From e0c01fe237155790821a5b0df9c43f214c437eb3 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Sun, 20 May 2018 15:48:52 -0600 Subject: [PATCH 0001/1518] Regenerate example files (#656) --- .../proto/examplepb/a_bit_of_everything.pb.go | 54 +++++++++---------- examples/proto/examplepb/echo_service.pb.go | 14 ++--- .../proto/examplepb/flow_combination.pb.go | 28 +++++----- examples/proto/examplepb/stream.pb.go | 14 ++--- .../examplepb/unannotated_echo_service.pb.go | 14 ++--- examples/proto/examplepb/wrappers.pb.go | 10 ++-- 6 files changed, 67 insertions(+), 67 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 64a70461dfd..520dae9c337 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -592,8 +592,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for ABitOfEverythingService service - +// ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ABitOfEverythingServiceClient interface { Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) @@ -627,7 +628,7 @@ func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServi func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, opts...) if err != nil { return nil, err } @@ -636,7 +637,7 @@ func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) if err != nil { return nil, err } @@ -645,7 +646,7 @@ func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABit func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) if err != nil { return nil, err } @@ -654,7 +655,7 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, opts...) if err != nil { return nil, err } @@ -663,7 +664,7 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) if err != nil { return nil, err } @@ -672,7 +673,7 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) if err != nil { return nil, err } @@ -681,7 +682,7 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -690,7 +691,7 @@ func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.String func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) if err != nil { return nil, err } @@ -699,7 +700,7 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -708,7 +709,7 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) if err != nil { return nil, err } @@ -717,7 +718,7 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) if err != nil { return nil, err } @@ -726,7 +727,7 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) if err != nil { return nil, err } @@ -735,15 +736,14 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for ABitOfEverythingService service - +// ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. type ABitOfEverythingServiceServer interface { Create(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) @@ -1066,8 +1066,9 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// Client API for CamelCaseServiceName service - +// CamelCaseServiceNameClient is the client API for CamelCaseServiceName service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type CamelCaseServiceNameClient interface { Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1082,15 +1083,14 @@ func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClie func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for CamelCaseServiceName service - +// CamelCaseServiceNameServer is the server API for CamelCaseServiceName service. type CamelCaseServiceNameServer interface { Empty(context.Context, *empty.Empty) (*empty.Empty, error) } @@ -1130,8 +1130,9 @@ var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// Client API for AnotherServiceWithNoBindings service - +// AnotherServiceWithNoBindingsClient is the client API for AnotherServiceWithNoBindings service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AnotherServiceWithNoBindingsClient interface { NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1146,15 +1147,14 @@ func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWi func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for AnotherServiceWithNoBindings service - +// AnotherServiceWithNoBindingsServer is the server API for AnotherServiceWithNoBindings service. type AnotherServiceWithNoBindingsServer interface { NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) } diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index 905eaa93a44..42a70d155e9 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -419,8 +419,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for EchoService service - +// EchoServiceClient is the client API for EchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type EchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -443,7 +444,7 @@ func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -452,7 +453,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts .. func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -461,15 +462,14 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for EchoService service - +// EchoServiceServer is the server API for EchoService service. type EchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index 20b2402f9d0..55be4381b5e 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -254,8 +254,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for FlowCombination service - +// FlowCombinationClient is the client API for FlowCombination service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type FlowCombinationClient interface { RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) @@ -279,7 +280,7 @@ func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) if err != nil { return nil, err } @@ -287,7 +288,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -319,7 +320,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -353,7 +354,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -385,7 +386,7 @@ func (x *flowCombinationStreamEmptyStreamClient) Recv() (*EmptyProto, error) { func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) if err != nil { return nil, err } @@ -394,7 +395,7 @@ func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProt func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -403,7 +404,7 @@ func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in * func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -411,7 +412,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[3], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -443,7 +444,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[4], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -475,7 +476,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[5], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -506,8 +507,7 @@ func (x *flowCombinationRpcPathNestedStreamClient) Recv() (*EmptyProto, error) { return m, nil } -// Server API for FlowCombination service - +// FlowCombinationServer is the server API for FlowCombination service. type FlowCombinationServer interface { RpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error) RpcEmptyStream(*EmptyProto, FlowCombination_RpcEmptyStreamServer) error diff --git a/examples/proto/examplepb/stream.pb.go b/examples/proto/examplepb/stream.pb.go index c598d8a548b..cc0c274c8ea 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/proto/examplepb/stream.pb.go @@ -34,8 +34,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for StreamService service - +// StreamServiceClient is the client API for StreamService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type StreamServiceClient interface { BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) @@ -51,7 +52,7 @@ func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -85,7 +86,7 @@ func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { } func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.StreamService/List", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -117,7 +118,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -147,8 +148,7 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { return m, nil } -// Server API for StreamService service - +// StreamServiceServer is the server API for StreamService service. type StreamServiceServer interface { BulkCreate(StreamService_BulkCreateServer) error List(*empty.Empty, StreamService_ListServer) error diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 7e2dd22f1c7..733ab6e8162 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -102,8 +102,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for UnannotatedEchoService service - +// UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type UnannotatedEchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -126,7 +127,7 @@ func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoService func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -135,7 +136,7 @@ func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *Unannotated func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -144,15 +145,14 @@ func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *Unannot func (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for UnannotatedEchoService service - +// UnannotatedEchoServiceServer is the server API for UnannotatedEchoService service. type UnannotatedEchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index 878c410dc3e..a5065f9d378 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -115,8 +115,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for WrappersService service - +// WrappersServiceClient is the client API for WrappersService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type WrappersServiceClient interface { Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) } @@ -131,15 +132,14 @@ func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) { out := new(Wrappers) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for WrappersService service - +// WrappersServiceServer is the server API for WrappersService service. type WrappersServiceServer interface { Create(context.Context, *Wrappers) (*Wrappers, error) } From 74ba57806b9706edc6e2c9e5854ced57a9cd5ba0 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Sun, 20 May 2018 16:03:43 -0600 Subject: [PATCH 0002/1518] Add v1.4.0 changelog (#655) Also adds a `make changelog` target that runs the github-changelog-generator against the repo. If you want to do a new release, don't forget to update the `--future-release` flag to be the next version number. --- CHANGELOG.md | 747 ++++++++++++++++++++++++++++++++++++++------------- Makefile | 15 +- 2 files changed, 568 insertions(+), 194 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2855894912e..5b9affdbebb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,215 +1,576 @@ # Change Log -## [1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/1.3.1) (2017-12-23) +## [v1.4.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.1...v1.4.0) + +**Implemented enhancements:** + +- customize the error return [\#405](https://github.com/grpc-ecosystem/grpc-gateway/issues/405) +- Support map type in query string [\#316](https://github.com/grpc-ecosystem/grpc-gateway/issues/316) +- gRPC gateway Bazel build rules [\#66](https://github.com/grpc-ecosystem/grpc-gateway/issues/66) +- Support bytes fields in path parameter [\#5](https://github.com/grpc-ecosystem/grpc-gateway/issues/5) + +**Closed issues:** + +- the protoc\_gen\_swagger bazel rule generates non working import path. [\#633](https://github.com/grpc-ecosystem/grpc-gateway/issues/633) +- code.NotFound should return a 404 instead of a 405 [\#630](https://github.com/grpc-ecosystem/grpc-gateway/issues/630) +- field in query path not found [\#629](https://github.com/grpc-ecosystem/grpc-gateway/issues/629) +- how to use client pool in the gateway? [\#612](https://github.com/grpc-ecosystem/grpc-gateway/issues/612) +- pass http request uri to grpc server [\#587](https://github.com/grpc-ecosystem/grpc-gateway/issues/587) +- bidi streams have racy read caused by goroutine that closes over local variable [\#583](https://github.com/grpc-ecosystem/grpc-gateway/issues/583) +- Streamed response is not valid json \(or: is this the expected format?\) [\#581](https://github.com/grpc-ecosystem/grpc-gateway/issues/581) +- Import "google/api/annotations.proto" was not found or had errors. [\#574](https://github.com/grpc-ecosystem/grpc-gateway/issues/574) +- is there has a way to let grpc-gateway server support multiple endpoints [\#573](https://github.com/grpc-ecosystem/grpc-gateway/issues/573) +- would it be possible to avoid vendoring "third\_party/googleapis/" [\#572](https://github.com/grpc-ecosystem/grpc-gateway/issues/572) +- Path parameters can't have URL encoded values [\#566](https://github.com/grpc-ecosystem/grpc-gateway/issues/566) +- Is there anyway to output the access log of grpc gateway [\#556](https://github.com/grpc-ecosystem/grpc-gateway/issues/556) +- proto: no slice oenc for \*reflect.rtype = \[\]\*reflect.rtype [\#551](https://github.com/grpc-ecosystem/grpc-gateway/issues/551) +- autoreconf not found [\#549](https://github.com/grpc-ecosystem/grpc-gateway/issues/549) +- \[feature\]combine expvar into grpc-gateway [\#542](https://github.com/grpc-ecosystem/grpc-gateway/issues/542) +- Source code still imports "golang.org/x/net/context" [\#533](https://github.com/grpc-ecosystem/grpc-gateway/issues/533) +- Incorrect error message when execute protoc-gen-grpc-gateway to HTTP GET method with BODY [\#531](https://github.com/grpc-ecosystem/grpc-gateway/issues/531) +- add support for the google.api.HttpBody proto as a request [\#528](https://github.com/grpc-ecosystem/grpc-gateway/issues/528) +- Prefixed model names in generated swagger spec [\#525](https://github.com/grpc-ecosystem/grpc-gateway/issues/525) +- Better format for error.message in stream [\#519](https://github.com/grpc-ecosystem/grpc-gateway/issues/519) +- Getting this on go get . in the src directory: HelloService.pb.go:20:8 - no Go files in \go\src\google\api [\#518](https://github.com/grpc-ecosystem/grpc-gateway/issues/518) +- ci: set up codecov [\#513](https://github.com/grpc-ecosystem/grpc-gateway/issues/513) +- protoc-gen-swagger not using description field of info swagger object [\#511](https://github.com/grpc-ecosystem/grpc-gateway/issues/511) +- Cut a minor release for https://github.com/grpc-ecosystem/grpc-gateway/issues/495 [\#506](https://github.com/grpc-ecosystem/grpc-gateway/issues/506) +- bug: uncapitalized service name causes runtime error unknown function in service.pb.gw.go [\#484](https://github.com/grpc-ecosystem/grpc-gateway/issues/484) +- RESOURCE\_EXHAUSTED -\> 503 [\#431](https://github.com/grpc-ecosystem/grpc-gateway/issues/431) +- Adding authentication definitions to generated swagger files [\#428](https://github.com/grpc-ecosystem/grpc-gateway/issues/428) +- Move to stdlib context over x/net/context [\#326](https://github.com/grpc-ecosystem/grpc-gateway/issues/326) +- deprecate 1.6 and embrace \(\*http.Request\).Context by default [\#313](https://github.com/grpc-ecosystem/grpc-gateway/issues/313) + **Merged pull requests:** -- Add support for --Import\_path [\#507](https://github.com/grpc-ecosystem/grpc-gateway/pull/507) -- Fix \#504 Missing Definitions [\#505](https://github.com/grpc-ecosystem/grpc-gateway/pull/505) -- Maintain default delimiter of newline [\#497](https://github.com/grpc-ecosystem/grpc-gateway/pull/497) -- Fix gen-swagger to support more well known types [\#496](https://github.com/grpc-ecosystem/grpc-gateway/pull/496) -- Use golang/protobuf instead of gogo/protobuf [\#494](https://github.com/grpc-ecosystem/grpc-gateway/pull/494) -- Fix stream delimiters [\#488](https://github.com/grpc-ecosystem/grpc-gateway/pull/488) -- ForwardResponseStream status code errors [\#482](https://github.com/grpc-ecosystem/grpc-gateway/pull/482) -- protoc-gen-grpc-gateway: flip request\_context default to true [\#474](https://github.com/grpc-ecosystem/grpc-gateway/pull/474) -- grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) -- Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) - -## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +- Add README.md for examples [\#645](https://github.com/grpc-ecosystem/grpc-gateway/pull/645) ([liukgg](https://github.com/liukgg)) +- JSONPb marshaler panics if input is nil interface [\#639](https://github.com/grpc-ecosystem/grpc-gateway/pull/639) ([jhump](https://github.com/jhump)) +- provide access to underlying \*json.Decoder from JSONPb.NewDecoder [\#637](https://github.com/grpc-ecosystem/grpc-gateway/pull/637) ([jhump](https://github.com/jhump)) +- fix compile errors caused by protobuf finally merging their dev branch to master [\#636](https://github.com/grpc-ecosystem/grpc-gateway/pull/636) ([jhump](https://github.com/jhump)) +- Generate import mappings. [\#635](https://github.com/grpc-ecosystem/grpc-gateway/pull/635) ([ensonic](https://github.com/ensonic)) +- Add support for the grpc\_api\_configuration option in the bazel rule. [\#632](https://github.com/grpc-ecosystem/grpc-gateway/pull/632) ([ensonic](https://github.com/ensonic)) +- Use repo relative labels in protoc-gen-swagger [\#631](https://github.com/grpc-ecosystem/grpc-gateway/pull/631) ([achew22](https://github.com/achew22)) +- Correct dependencies in Makefile [\#626](https://github.com/grpc-ecosystem/grpc-gateway/pull/626) ([yugui](https://github.com/yugui)) +- Avoid timing issues in the integration tests [\#624](https://github.com/grpc-ecosystem/grpc-gateway/pull/624) ([yugui](https://github.com/yugui)) +- Fix typos in gRPC API Configuration usage documentation [\#623](https://github.com/grpc-ecosystem/grpc-gateway/pull/623) ([hacst](https://github.com/hacst)) +- Skip unnecessary steps in USE\_BAZEL builds on TravisCI [\#622](https://github.com/grpc-ecosystem/grpc-gateway/pull/622) ([yugui](https://github.com/yugui)) +- Support param for field from Oneof definition. [\#621](https://github.com/grpc-ecosystem/grpc-gateway/pull/621) ([bonafideyan](https://github.com/bonafideyan)) +- Fixes file integrity errors on TravisCI [\#619](https://github.com/grpc-ecosystem/grpc-gateway/pull/619) ([yugui](https://github.com/yugui)) +- Reorganize examples [\#618](https://github.com/grpc-ecosystem/grpc-gateway/pull/618) ([yugui](https://github.com/yugui)) +- Update dependency declarations in the Makefile [\#617](https://github.com/grpc-ecosystem/grpc-gateway/pull/617) ([yugui](https://github.com/yugui)) +- Support delete method in swagger generator [\#616](https://github.com/grpc-ecosystem/grpc-gateway/pull/616) ([blackdahila](https://github.com/blackdahila)) +- feat\(bazel\): Add rule for generating .swagger.json files [\#613](https://github.com/grpc-ecosystem/grpc-gateway/pull/613) ([mrmeku](https://github.com/mrmeku)) +- Support UNIX domain socket in the example servers [\#609](https://github.com/grpc-ecosystem/grpc-gateway/pull/609) ([yugui](https://github.com/yugui)) +- misspelling [\#601](https://github.com/grpc-ecosystem/grpc-gateway/pull/601) ([chemidy](https://github.com/chemidy)) +- Pulled out parseReq func into a generic package + tests [\#600](https://github.com/grpc-ecosystem/grpc-gateway/pull/600) ([f0rmiga](https://github.com/f0rmiga)) +- Added Bazel support [\#599](https://github.com/grpc-ecosystem/grpc-gateway/pull/599) ([f0rmiga](https://github.com/f0rmiga)) +- Add basic docs section [\#597](https://github.com/grpc-ecosystem/grpc-gateway/pull/597) ([achew22](https://github.com/achew22)) +- Upgrade to go1.10 and regenerate [\#596](https://github.com/grpc-ecosystem/grpc-gateway/pull/596) ([achew22](https://github.com/achew22)) +- Support cases where the request is done with transfer-encoding chunked [\#589](https://github.com/grpc-ecosystem/grpc-gateway/pull/589) ([jacksontj](https://github.com/jacksontj)) +- Support multiple metadata annotators [\#586](https://github.com/grpc-ecosystem/grpc-gateway/pull/586) ([dmacthedestroyer](https://github.com/dmacthedestroyer)) +- Changed to use more appropriate http status code for ResourceExhausted [\#580](https://github.com/grpc-ecosystem/grpc-gateway/pull/580) ([eleniums](https://github.com/eleniums)) +- fix racy access of err variable [\#575](https://github.com/grpc-ecosystem/grpc-gateway/pull/575) ([jhump](https://github.com/jhump)) +- runtime: return 503 not 403 with ResourceExhausted. [\#569](https://github.com/grpc-ecosystem/grpc-gateway/pull/569) ([hexfusion](https://github.com/hexfusion)) +- \[\]byte in query now uses base64.StdEncoding [\#565](https://github.com/grpc-ecosystem/grpc-gateway/pull/565) ([lucasvo](https://github.com/lucasvo)) +- Add 3rd party rpc protos in order to have access to status and error [\#563](https://github.com/grpc-ecosystem/grpc-gateway/pull/563) ([rvegas](https://github.com/rvegas)) +- Add details to stream error response [\#561](https://github.com/grpc-ecosystem/grpc-gateway/pull/561) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- fix noenc error by fixing Details error field [\#557](https://github.com/grpc-ecosystem/grpc-gateway/pull/557) ([srenatus](https://github.com/srenatus)) +- error details: add @type key by switching to any.Any [\#553](https://github.com/grpc-ecosystem/grpc-gateway/pull/553) ([srenatus](https://github.com/srenatus)) +- Add a FAQ [\#550](https://github.com/grpc-ecosystem/grpc-gateway/pull/550) ([achew22](https://github.com/achew22)) +- Add security fields support to protoc-gen-swagger [\#547](https://github.com/grpc-ecosystem/grpc-gateway/pull/547) ([ivucica](https://github.com/ivucica)) +- Omit well-known type definitions from swagger output [\#541](https://github.com/grpc-ecosystem/grpc-gateway/pull/541) ([alexleigh](https://github.com/alexleigh)) +- Use importPath to set package name rather than package path. [\#537](https://github.com/grpc-ecosystem/grpc-gateway/pull/537) ([rwlincoln](https://github.com/rwlincoln)) +- Support for map type in query string [\#535](https://github.com/grpc-ecosystem/grpc-gateway/pull/535) ([adamstruck](https://github.com/adamstruck)) +- Fix error message in protoc-gen-grpc-gateway \(for \#531\) [\#532](https://github.com/grpc-ecosystem/grpc-gateway/pull/532) ([budougumi0617](https://github.com/budougumi0617)) +- runtime: support FieldMask as query param [\#529](https://github.com/grpc-ecosystem/grpc-gateway/pull/529) ([glerchundi](https://github.com/glerchundi)) +- Fix decoding empty request body [\#527](https://github.com/grpc-ecosystem/grpc-gateway/pull/527) ([syhpoon](https://github.com/syhpoon)) +- Add description, summary and tags fields in operationObject \(swagger\) [\#526](https://github.com/grpc-ecosystem/grpc-gateway/pull/526) ([devnull-](https://github.com/devnull-)) +- Converts the first letter of service name to uppercase [\#522](https://github.com/grpc-ecosystem/grpc-gateway/pull/522) ([thurt](https://github.com/thurt)) +- Add support for basic gRPC API Configuration YAML files [\#521](https://github.com/grpc-ecosystem/grpc-gateway/pull/521) ([hacst](https://github.com/hacst)) +- Fix travis to only difftest on go 1.9 [\#520](https://github.com/grpc-ecosystem/grpc-gateway/pull/520) ([achew22](https://github.com/achew22)) +- add error details to error json [\#515](https://github.com/grpc-ecosystem/grpc-gateway/pull/515) ([srenatus](https://github.com/srenatus)) +- ci: add codecov [\#514](https://github.com/grpc-ecosystem/grpc-gateway/pull/514) ([tmc](https://github.com/tmc)) +- Generate "Description" and "TermsOfService" fields [\#512](https://github.com/grpc-ecosystem/grpc-gateway/pull/512) ([lukasmalkmus](https://github.com/lukasmalkmus)) +- Release 1.3.1 [\#509](https://github.com/grpc-ecosystem/grpc-gateway/pull/509) ([tmc](https://github.com/tmc)) +- Support mapping bytes to \[\]byte [\#489](https://github.com/grpc-ecosystem/grpc-gateway/pull/489) ([loderunner](https://github.com/loderunner)) +- properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) + +## [v1.3.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) + +**Implemented enhancements:** + +- Support import\_path? [\#443](https://github.com/grpc-ecosystem/grpc-gateway/issues/443) + +**Closed issues:** + +- protoc-gen-swagger missing definition issue [\#504](https://github.com/grpc-ecosystem/grpc-gateway/issues/504) +- Are gateway metrics available? [\#498](https://github.com/grpc-ecosystem/grpc-gateway/issues/498) +- Backwards incompatible change to chunked encoding [\#495](https://github.com/grpc-ecosystem/grpc-gateway/issues/495) +- Map of list [\#493](https://github.com/grpc-ecosystem/grpc-gateway/issues/493) +- Repeated nested messages doesn't work in GET requests queries. [\#492](https://github.com/grpc-ecosystem/grpc-gateway/issues/492) +- How to run `makefile` for this repo? [\#491](https://github.com/grpc-ecosystem/grpc-gateway/issues/491) +- all SubConns are in TransientFailure [\#490](https://github.com/grpc-ecosystem/grpc-gateway/issues/490) +- Appengine Standard Environment: "not an Appengine context" [\#487](https://github.com/grpc-ecosystem/grpc-gateway/issues/487) +- Enum Path Parameter to Swagger [\#486](https://github.com/grpc-ecosystem/grpc-gateway/issues/486) +- Should v1.3 be also tagged as v1.3.0? [\#483](https://github.com/grpc-ecosystem/grpc-gateway/issues/483) +- HTTP response is not correct json encoded if the grpc return stream of objects. [\#481](https://github.com/grpc-ecosystem/grpc-gateway/issues/481) +- Support JSON-RPCv2 [\#477](https://github.com/grpc-ecosystem/grpc-gateway/issues/477) +- Naming convention? [\#475](https://github.com/grpc-ecosystem/grpc-gateway/issues/475) +- Request context not being used [\#470](https://github.com/grpc-ecosystem/grpc-gateway/issues/470) +- Generate Swagger documentation [\#469](https://github.com/grpc-ecosystem/grpc-gateway/issues/469) +- Support Request | make: swagger-codegen: Command not found [\#468](https://github.com/grpc-ecosystem/grpc-gateway/issues/468) +- How do you generate a swagger yaml file instead of json? [\#467](https://github.com/grpc-ecosystem/grpc-gateway/issues/467) +- Add default support for proto over http [\#465](https://github.com/grpc-ecosystem/grpc-gateway/issues/465) +- Allow compiling the gateway code to a different go package [\#463](https://github.com/grpc-ecosystem/grpc-gateway/issues/463) +- support google.api.HttpBody [\#457](https://github.com/grpc-ecosystem/grpc-gateway/issues/457) +- \[swagger bug\] with google/protobuf/wrappers.proto [\#453](https://github.com/grpc-ecosystem/grpc-gateway/issues/453) +- The tensorflow serving support RESTful api:{"error":"json: cannot unmarshal object into Go value of type \[\]json.RawMessage","code":3} [\#444](https://github.com/grpc-ecosystem/grpc-gateway/issues/444) +- choose some return fields omit or not omit by configure [\#439](https://github.com/grpc-ecosystem/grpc-gateway/issues/439) +- swagger title and version hardcoded [\#437](https://github.com/grpc-ecosystem/grpc-gateway/issues/437) +- Change the path though http header [\#424](https://github.com/grpc-ecosystem/grpc-gateway/issues/424) +- google/protobuf/descriptor.proto: File not found [\#422](https://github.com/grpc-ecosystem/grpc-gateway/issues/422) +- Output file will not compile if the .proto file does not contain a service with parameters in the url path [\#389](https://github.com/grpc-ecosystem/grpc-gateway/issues/389) +- Scaling support [\#381](https://github.com/grpc-ecosystem/grpc-gateway/issues/381) +- I cannot get the default value from client side [\#380](https://github.com/grpc-ecosystem/grpc-gateway/issues/380) +- Problem with Generated annotations.proto file [\#377](https://github.com/grpc-ecosystem/grpc-gateway/issues/377) +- Release 1.3.0 [\#357](https://github.com/grpc-ecosystem/grpc-gateway/issues/357) +- swagger: Unclear comments' parser behaviour [\#352](https://github.com/grpc-ecosystem/grpc-gateway/issues/352) +- Support semicolon syntax in go\_package protobuf option [\#341](https://github.com/grpc-ecosystem/grpc-gateway/issues/341) +- Add SOAP proxy [\#339](https://github.com/grpc-ecosystem/grpc-gateway/issues/339) +- Support combination of query params and body for POSTs [\#234](https://github.com/grpc-ecosystem/grpc-gateway/issues/234) +- Interceptor [\#221](https://github.com/grpc-ecosystem/grpc-gateway/issues/221) + **Merged pull requests:** -- Streaming forward handler fix chunk encoding [\#479](https://github.com/grpc-ecosystem/grpc-gateway/pull/479) -- Fix logic handling primitive wrapper in URL params [\#478](https://github.com/grpc-ecosystem/grpc-gateway/pull/478) -- runtime: use r.Context\(\) [\#473](https://github.com/grpc-ecosystem/grpc-gateway/pull/473) -- Optional SourceCodeInfo [\#466](https://github.com/grpc-ecosystem/grpc-gateway/pull/466) -- Some steps to fix Travis CI [\#461](https://github.com/grpc-ecosystem/grpc-gateway/pull/461) -- fix 2 typos in Registry.SetPrefix's comment [\#455](https://github.com/grpc-ecosystem/grpc-gateway/pull/455) -- Add Handler method to pass in client [\#454](https://github.com/grpc-ecosystem/grpc-gateway/pull/454) -- Fallback to JSON name when matching URL parameter. [\#450](https://github.com/grpc-ecosystem/grpc-gateway/pull/450) -- Update DO NOT EDIT template. [\#434](https://github.com/grpc-ecosystem/grpc-gateway/pull/434) -- Memoise calls to fullyQualifiedNameToSwaggerName to speed it up for large registries [\#421](https://github.com/grpc-ecosystem/grpc-gateway/pull/421) -- Update Swagger Codegen from 2.1.6 to 2.2.2 [\#415](https://github.com/grpc-ecosystem/grpc-gateway/pull/415) -- Return codes.InvalidArgument to rather return HTTP 400 instead of HTTP 500 [\#409](https://github.com/grpc-ecosystem/grpc-gateway/pull/409) -- improve {incoming,outgoing}HeaderMatcher logic [\#408](https://github.com/grpc-ecosystem/grpc-gateway/pull/408) -- improve WKT handling in gateway and openapi output [\#404](https://github.com/grpc-ecosystem/grpc-gateway/pull/404) -- Return if runtime.AnnotateContext gave error [\#403](https://github.com/grpc-ecosystem/grpc-gateway/pull/403) -- jsonpb: update tests to reflect new jsonpb behavior [\#401](https://github.com/grpc-ecosystem/grpc-gateway/pull/401) -- Reference import grpc Status to suppress unused errors. [\#387](https://github.com/grpc-ecosystem/grpc-gateway/pull/387) -- ci: regen with current protoc-gen-go [\#385](https://github.com/grpc-ecosystem/grpc-gateway/pull/385) -- Use status package for error and introduce WithProtoErrorHandler option [\#378](https://github.com/grpc-ecosystem/grpc-gateway/pull/378) -- Return response headers from grpc server [\#374](https://github.com/grpc-ecosystem/grpc-gateway/pull/374) -- Skip unreferenced messages in definitions. [\#371](https://github.com/grpc-ecosystem/grpc-gateway/pull/371) -- Use canonical header form in default header matcher. [\#369](https://github.com/grpc-ecosystem/grpc-gateway/pull/369) -- support allow\_delete\_body for protoc-gen-grpc-gateway [\#318](https://github.com/grpc-ecosystem/grpc-gateway/pull/318) -- fixes package name override doesn't work [\#277](https://github.com/grpc-ecosystem/grpc-gateway/pull/277) -- add custom options to allow more control of swagger/openapi output [\#145](https://github.com/grpc-ecosystem/grpc-gateway/pull/145) - -## [v1.2.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.2) (2017-04-17) +- Add support for --Import\_path [\#507](https://github.com/grpc-ecosystem/grpc-gateway/pull/507) ([achew22](https://github.com/achew22)) +- Fix \#504 Missing Definitions [\#505](https://github.com/grpc-ecosystem/grpc-gateway/pull/505) ([warmans](https://github.com/warmans)) +- Maintain default delimiter of newline [\#497](https://github.com/grpc-ecosystem/grpc-gateway/pull/497) ([jacksontj](https://github.com/jacksontj)) +- Fix gen-swagger to support more well known types [\#496](https://github.com/grpc-ecosystem/grpc-gateway/pull/496) ([shouichi](https://github.com/shouichi)) +- Use golang/protobuf instead of gogo/protobuf [\#494](https://github.com/grpc-ecosystem/grpc-gateway/pull/494) ([shouichi](https://github.com/shouichi)) +- Fix stream delimiters [\#488](https://github.com/grpc-ecosystem/grpc-gateway/pull/488) ([afking](https://github.com/afking)) +- ForwardResponseStream status code errors [\#482](https://github.com/grpc-ecosystem/grpc-gateway/pull/482) ([afking](https://github.com/afking)) +- protoc-gen-grpc-gateway: flip request\_context default to true [\#474](https://github.com/grpc-ecosystem/grpc-gateway/pull/474) ([srenatus](https://github.com/srenatus)) +- grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) +- Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) + +## [v1.3.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) + +## [v1.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) + +**Closed issues:** + +- Extract basic auth from URL [\#480](https://github.com/grpc-ecosystem/grpc-gateway/issues/480) +- Lack of "google/protobuf/descriptor.proto" [\#476](https://github.com/grpc-ecosystem/grpc-gateway/issues/476) +- question: how to indicate whether call is through grpc gateway [\#456](https://github.com/grpc-ecosystem/grpc-gateway/issues/456) +- How to define this restful api using pb? [\#452](https://github.com/grpc-ecosystem/grpc-gateway/issues/452) +- how to output field as an array of json values? [\#449](https://github.com/grpc-ecosystem/grpc-gateway/issues/449) +- How do I override maxMsgSize? [\#445](https://github.com/grpc-ecosystem/grpc-gateway/issues/445) +- OpenAPI spec is generated with duplicated operation IDs. [\#442](https://github.com/grpc-ecosystem/grpc-gateway/issues/442) +- This process seems to generate conflicting code with go-micro [\#440](https://github.com/grpc-ecosystem/grpc-gateway/issues/440) +- any way to let int64 marshal to int not string? [\#438](https://github.com/grpc-ecosystem/grpc-gateway/issues/438) +- Support streaming [\#435](https://github.com/grpc-ecosystem/grpc-gateway/issues/435) +- Update DO NOT EDIT header in generated files [\#433](https://github.com/grpc-ecosystem/grpc-gateway/issues/433) +- generate code use context not "golang.org/x/net/context" [\#430](https://github.com/grpc-ecosystem/grpc-gateway/issues/430) +- Replace \n with spaces in swagger definitions [\#426](https://github.com/grpc-ecosystem/grpc-gateway/issues/426) +- \[question\]Is there any example for http headers process? [\#420](https://github.com/grpc-ecosystem/grpc-gateway/issues/420) +- Is there any way to support a multipart form request? [\#410](https://github.com/grpc-ecosystem/grpc-gateway/issues/410) +- Not able to pass allow\_delete\_body to protoc-gen-grpc-gateway. [\#402](https://github.com/grpc-ecosystem/grpc-gateway/issues/402) +- returned errors should conform to google.rpc.Status [\#399](https://github.com/grpc-ecosystem/grpc-gateway/issues/399) +- Is there any way to generate python gateway code? [\#398](https://github.com/grpc-ecosystem/grpc-gateway/issues/398) +- how to handle arbitrary \(json\) structs [\#395](https://github.com/grpc-ecosystem/grpc-gateway/issues/395) +- \[question\]can give a url with query sting demo? [\#394](https://github.com/grpc-ecosystem/grpc-gateway/issues/394) +- \[question\]the swagger url generated is what? [\#393](https://github.com/grpc-ecosystem/grpc-gateway/issues/393) +- \[Question\] How do I use semantic versions? [\#392](https://github.com/grpc-ecosystem/grpc-gateway/issues/392) +- \[question\]how to run examples? [\#391](https://github.com/grpc-ecosystem/grpc-gateway/issues/391) +- Why does gateway use ServerMetadata? [\#388](https://github.com/grpc-ecosystem/grpc-gateway/issues/388) +- Can't generate code with last version [\#384](https://github.com/grpc-ecosystem/grpc-gateway/issues/384) +- is it ready for production use? [\#382](https://github.com/grpc-ecosystem/grpc-gateway/issues/382) +- Support Google Flatbuffers [\#376](https://github.com/grpc-ecosystem/grpc-gateway/issues/376) +- calling Enum by string name in requests using gogo/protobuf results in error. [\#372](https://github.com/grpc-ecosystem/grpc-gateway/issues/372) +- Definitions containing URLs with trailing slashes won't compile [\#370](https://github.com/grpc-ecosystem/grpc-gateway/issues/370) +- Should metadata annotator include the headers from incoming matcher? [\#368](https://github.com/grpc-ecosystem/grpc-gateway/issues/368) +- metadata.NewOutgoingContext is undefined [\#364](https://github.com/grpc-ecosystem/grpc-gateway/issues/364) +- Why does not gateway forward headers as-is? [\#311](https://github.com/grpc-ecosystem/grpc-gateway/issues/311) +- Question: Why passing context to RegisterMyServiceHandler is required? [\#301](https://github.com/grpc-ecosystem/grpc-gateway/issues/301) +- Allow whitelisting of particular HTTP headers to map to metadata. [\#253](https://github.com/grpc-ecosystem/grpc-gateway/issues/253) +- Swagger definitions don't handle parameters that are not explicitly required in the url [\#159](https://github.com/grpc-ecosystem/grpc-gateway/issues/159) + +**Merged pull requests:** + +- Fix wrong method names [\#603](https://github.com/grpc-ecosystem/grpc-gateway/pull/603) ([yugui](https://github.com/yugui)) +- Streaming forward handler fix chunk encoding [\#479](https://github.com/grpc-ecosystem/grpc-gateway/pull/479) ([afking](https://github.com/afking)) +- Fix logic handling primitive wrapper in URL params [\#478](https://github.com/grpc-ecosystem/grpc-gateway/pull/478) ([tgeng](https://github.com/tgeng)) +- runtime: use r.Context\(\) [\#473](https://github.com/grpc-ecosystem/grpc-gateway/pull/473) ([srenatus](https://github.com/srenatus)) +- Optional SourceCodeInfo [\#466](https://github.com/grpc-ecosystem/grpc-gateway/pull/466) ([afking](https://github.com/afking)) +- Some steps to fix Travis CI [\#461](https://github.com/grpc-ecosystem/grpc-gateway/pull/461) ([AlekSi](https://github.com/AlekSi)) +- fix 2 typos in Registry.SetPrefix's comment [\#455](https://github.com/grpc-ecosystem/grpc-gateway/pull/455) ([hectorj](https://github.com/hectorj)) +- Add Handler method to pass in client [\#454](https://github.com/grpc-ecosystem/grpc-gateway/pull/454) ([jacksontj](https://github.com/jacksontj)) +- Fallback to JSON name when matching URL parameter. [\#450](https://github.com/grpc-ecosystem/grpc-gateway/pull/450) ([tgeng](https://github.com/tgeng)) +- Update DO NOT EDIT template. [\#434](https://github.com/grpc-ecosystem/grpc-gateway/pull/434) ([AlekSi](https://github.com/AlekSi)) +- Memoise calls to fullyQualifiedNameToSwaggerName to speed it up for large registries [\#421](https://github.com/grpc-ecosystem/grpc-gateway/pull/421) ([peterebden](https://github.com/peterebden)) +- Update Swagger Codegen from 2.1.6 to 2.2.2 [\#415](https://github.com/grpc-ecosystem/grpc-gateway/pull/415) ([yugui](https://github.com/yugui)) +- Return codes.InvalidArgument to rather return HTTP 400 instead of HTTP 500 [\#409](https://github.com/grpc-ecosystem/grpc-gateway/pull/409) ([vaporz](https://github.com/vaporz)) +- improve {incoming,outgoing}HeaderMatcher logic [\#408](https://github.com/grpc-ecosystem/grpc-gateway/pull/408) ([flisky](https://github.com/flisky)) +- improve WKT handling in gateway and openapi output [\#404](https://github.com/grpc-ecosystem/grpc-gateway/pull/404) ([tmc](https://github.com/tmc)) +- Return if runtime.AnnotateContext gave error [\#403](https://github.com/grpc-ecosystem/grpc-gateway/pull/403) ([tamalsaha](https://github.com/tamalsaha)) +- jsonpb: update tests to reflect new jsonpb behavior [\#401](https://github.com/grpc-ecosystem/grpc-gateway/pull/401) ([tmc](https://github.com/tmc)) +- Reference import grpc Status to suppress unused errors. [\#387](https://github.com/grpc-ecosystem/grpc-gateway/pull/387) ([tamalsaha](https://github.com/tamalsaha)) +- ci: regen with current protoc-gen-go [\#385](https://github.com/grpc-ecosystem/grpc-gateway/pull/385) ([tmc](https://github.com/tmc)) +- Use status package for error and introduce WithProtoErrorHandler option [\#378](https://github.com/grpc-ecosystem/grpc-gateway/pull/378) ([kazegusuri](https://github.com/kazegusuri)) +- Return response headers from grpc server [\#374](https://github.com/grpc-ecosystem/grpc-gateway/pull/374) ([tamalsaha](https://github.com/tamalsaha)) +- Skip unreferenced messages in definitions. [\#371](https://github.com/grpc-ecosystem/grpc-gateway/pull/371) ([Lantame](https://github.com/Lantame)) +- Use canonical header form in default header matcher. [\#369](https://github.com/grpc-ecosystem/grpc-gateway/pull/369) ([tamalsaha](https://github.com/tamalsaha)) +- support allow\_delete\_body for protoc-gen-grpc-gateway [\#318](https://github.com/grpc-ecosystem/grpc-gateway/pull/318) ([flisky](https://github.com/flisky)) +- fixes package name override doesn't work [\#277](https://github.com/grpc-ecosystem/grpc-gateway/pull/277) ([favadi](https://github.com/favadi)) +- add custom options to allow more control of swagger/openapi output [\#145](https://github.com/grpc-ecosystem/grpc-gateway/pull/145) ([ivucica](https://github.com/ivucica)) + +## [v1.2.2](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.2) (2017-04-17) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.1...v1.2.2) + **Merged pull requests:** -- Add changelog for 1.2.2 [\#363](https://github.com/grpc-ecosystem/grpc-gateway/pull/363) -- metadata: fix properly and change to Outgoing [\#361](https://github.com/grpc-ecosystem/grpc-gateway/pull/361) +- Add changelog for 1.2.2 [\#363](https://github.com/grpc-ecosystem/grpc-gateway/pull/363) ([tmc](https://github.com/tmc)) +- metadata: fix properly and change to Outgoing [\#361](https://github.com/grpc-ecosystem/grpc-gateway/pull/361) ([tmc](https://github.com/tmc)) + +## [v1.2.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.1) (2017-04-17) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.0...v1.2.1) + +**Fixed bugs:** + +- reflect upstream grpc metadata api change [\#358](https://github.com/grpc-ecosystem/grpc-gateway/issues/358) + +**Closed issues:** + +- Empty value omitted [\#355](https://github.com/grpc-ecosystem/grpc-gateway/issues/355) +- Must generate reverse proxy in same package? [\#353](https://github.com/grpc-ecosystem/grpc-gateway/issues/353) +- Release 1.2.0 [\#340](https://github.com/grpc-ecosystem/grpc-gateway/issues/340) +- Cut another release [\#278](https://github.com/grpc-ecosystem/grpc-gateway/issues/278) -## [v1.2.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.1) (2017-04-17) **Merged pull requests:** -- Add changelog for 1.2.1 [\#360](https://github.com/grpc-ecosystem/grpc-gateway/pull/360) -- bugfix: reflect upstream api change. [\#359](https://github.com/grpc-ecosystem/grpc-gateway/pull/359) +- Add changelog for 1.2.1 [\#360](https://github.com/grpc-ecosystem/grpc-gateway/pull/360) ([tmc](https://github.com/tmc)) +- bugfix: reflect upstream api change. [\#359](https://github.com/grpc-ecosystem/grpc-gateway/pull/359) ([tmc](https://github.com/tmc)) + +## [v1.2.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.0) (2017-03-31) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.0.rc1...v1.2.0) + +**Closed issues:** + +- Problem with \*.proto as "no buildable Go source files" [\#338](https://github.com/grpc-ecosystem/grpc-gateway/issues/338) +- Invalid import during code generation [\#337](https://github.com/grpc-ecosystem/grpc-gateway/issues/337) -## [v1.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0) (2017-03-31) **Merged pull requests:** -- Add changelog for 1.2.0 [\#342](https://github.com/grpc-ecosystem/grpc-gateway/pull/342) +- Add changelog for 1.2.0 [\#342](https://github.com/grpc-ecosystem/grpc-gateway/pull/342) ([tmc](https://github.com/tmc)) + +## [v1.2.0.rc1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.0.rc1) (2017-03-24) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.1.0...v1.2.0.rc1) + +**Implemented enhancements:** + +- Support for Any types [\#80](https://github.com/grpc-ecosystem/grpc-gateway/issues/80) +- improve\(genswagger:template\):added support for google.protobuf.Timestamp [\#209](https://github.com/grpc-ecosystem/grpc-gateway/pull/209) ([EranAvidor](https://github.com/EranAvidor)) + +**Fixed bugs:** + +- Support for multi-segment elements [\#122](https://github.com/grpc-ecosystem/grpc-gateway/issues/122) + +**Closed issues:** + +- Go get breaks with autogenerated code [\#331](https://github.com/grpc-ecosystem/grpc-gateway/issues/331) +- Fresh install no longer generates necessary `google/api/annotations.pb.go` & `google/api/http.pb.go` files. [\#327](https://github.com/grpc-ecosystem/grpc-gateway/issues/327) +- Panic with query parameters [\#324](https://github.com/grpc-ecosystem/grpc-gateway/issues/324) +- Swagger-UI query parameters for enum types are sent as strings [\#320](https://github.com/grpc-ecosystem/grpc-gateway/issues/320) +- hide the object name in the response [\#317](https://github.com/grpc-ecosystem/grpc-gateway/issues/317) +- Package imported but not used [\#310](https://github.com/grpc-ecosystem/grpc-gateway/issues/310) +- Authorization headers aren't specified in Swagger.json [\#309](https://github.com/grpc-ecosystem/grpc-gateway/issues/309) +- Generating swagger version, contact name etc in generated docs [\#303](https://github.com/grpc-ecosystem/grpc-gateway/issues/303) +- Feature request: custom content type per service and rpc [\#302](https://github.com/grpc-ecosystem/grpc-gateway/issues/302) +- Reference: another RESTful api-gateway [\#299](https://github.com/grpc-ecosystem/grpc-gateway/issues/299) +- Integration with other languages is partially broken [\#298](https://github.com/grpc-ecosystem/grpc-gateway/issues/298) +- jsonpb convert int64 to integer instead of string [\#296](https://github.com/grpc-ecosystem/grpc-gateway/issues/296) +- default enum value is omitted [\#294](https://github.com/grpc-ecosystem/grpc-gateway/issues/294) +- Advice: could we simplify the flow as the below [\#292](https://github.com/grpc-ecosystem/grpc-gateway/issues/292) +- examples/browser test failure: TypeError: undefined is not a function \(evaluating 'window.location.protocol.startsWith\('chrome-extension'\)'\) [\#287](https://github.com/grpc-ecosystem/grpc-gateway/issues/287) +- ./entrypoint.go:25: undefined: api.RegisterYourServiceHandlerFromEndpoint [\#285](https://github.com/grpc-ecosystem/grpc-gateway/issues/285) +- Query params not handled in swagger file [\#284](https://github.com/grpc-ecosystem/grpc-gateway/issues/284) +- Please help: google/api/annotations.proto: File not found. [\#283](https://github.com/grpc-ecosystem/grpc-gateway/issues/283) +- Option to Allow Swagger for DELETEs with a body [\#279](https://github.com/grpc-ecosystem/grpc-gateway/issues/279) +- client declared and not used compilation error, after recent upgrade [\#276](https://github.com/grpc-ecosystem/grpc-gateway/issues/276) +- feature request / idea: generating JSONRPC2 client proxies from GRPC [\#272](https://github.com/grpc-ecosystem/grpc-gateway/issues/272) +- protoc-swagger-generator messes up the comments if there is rpc method that does not have rest [\#263](https://github.com/grpc-ecosystem/grpc-gateway/issues/263) +- Swagger Gen: underscores -\> lowerCamelCase field names and refs [\#261](https://github.com/grpc-ecosystem/grpc-gateway/issues/261) +- Timestamp as URL param causes bad request error [\#260](https://github.com/grpc-ecosystem/grpc-gateway/issues/260) +- "proto: no coders for int" printed whenever a gRPC error is returned over grpc-gateway. [\#259](https://github.com/grpc-ecosystem/grpc-gateway/issues/259) +- Compatibility with grpc.SupportPackageIsVersion4 [\#258](https://github.com/grpc-ecosystem/grpc-gateway/issues/258) +- How to use circuit breaker in this grpc gateway? [\#257](https://github.com/grpc-ecosystem/grpc-gateway/issues/257) +- cannot use example code to generate [\#255](https://github.com/grpc-ecosystem/grpc-gateway/issues/255) +- tests fail on go tip due to importing of main packages in test [\#250](https://github.com/grpc-ecosystem/grpc-gateway/issues/250) +- Add NGINX support [\#249](https://github.com/grpc-ecosystem/grpc-gateway/issues/249) +- Error when reverse proxy to gRPC server \(which is impl with Node.js\) [\#246](https://github.com/grpc-ecosystem/grpc-gateway/issues/246) +- Error output titlecase instead of lowercase [\#243](https://github.com/grpc-ecosystem/grpc-gateway/issues/243) +- Option field "\(google.api.http\)" is not a field or extension of message "ServiceOptions" [\#241](https://github.com/grpc-ecosystem/grpc-gateway/issues/241) +- Implement credentials handler in-box [\#238](https://github.com/grpc-ecosystem/grpc-gateway/issues/238) +- Proposal: Support WKT structs for URL params [\#237](https://github.com/grpc-ecosystem/grpc-gateway/issues/237) +- Example of /} in path template [\#232](https://github.com/grpc-ecosystem/grpc-gateway/issues/232) +- Serving swagger.json from runtime mux? [\#230](https://github.com/grpc-ecosystem/grpc-gateway/issues/230) +- ETCDclientv3 build error with the latest changes - github.com/grpc-ecosystem/grpc-gateway/runtime/marshal\_jsonpb.go:114: undefined: jsonpb.Unmarshaler [\#226](https://github.com/grpc-ecosystem/grpc-gateway/issues/226) +- Map in GET request [\#223](https://github.com/grpc-ecosystem/grpc-gateway/issues/223) +- HTTPS no longer works [\#220](https://github.com/grpc-ecosystem/grpc-gateway/issues/220) +- --swagger\_out plugin translates proto type int64 to string in Swagger specification [\#219](https://github.com/grpc-ecosystem/grpc-gateway/issues/219) +- Response body as a single field [\#217](https://github.com/grpc-ecosystem/grpc-gateway/issues/217) +- documentation of semantics of endpoint declarations [\#212](https://github.com/grpc-ecosystem/grpc-gateway/issues/212) +- gen-swagger does not generate PATCH method endpoints [\#211](https://github.com/grpc-ecosystem/grpc-gateway/issues/211) +- protoc-gen-grpc-gateway doesn't work correctly with option go\_package [\#207](https://github.com/grpc-ecosystem/grpc-gateway/issues/207) +- Browser Side Streaming Best Practices [\#206](https://github.com/grpc-ecosystem/grpc-gateway/issues/206) +- Does grpc-gateway support App Engine? [\#204](https://github.com/grpc-ecosystem/grpc-gateway/issues/204) +- "use of internal package" error, after moving to grpc-ecosystem [\#203](https://github.com/grpc-ecosystem/grpc-gateway/issues/203) +- Move to google.golang.org/genproto instead of shipping annotations.proto. [\#202](https://github.com/grpc-ecosystem/grpc-gateway/issues/202) +- Release v1.1.0 [\#196](https://github.com/grpc-ecosystem/grpc-gateway/issues/196) +- marshaler runtime.Marshaler does not handle io.EOF when decoding [\#195](https://github.com/grpc-ecosystem/grpc-gateway/issues/195) +- protobuf enumerated values now returned as strings instead of numbers. [\#186](https://github.com/grpc-ecosystem/grpc-gateway/issues/186) +- support annotating fields as required \(in swagger/oapi generation\)? [\#175](https://github.com/grpc-ecosystem/grpc-gateway/issues/175) +- architectural question: Can i codegen the client code for talking to the server ? [\#167](https://github.com/grpc-ecosystem/grpc-gateway/issues/167) +- Passing ENUM value as URL parameter throws error [\#166](https://github.com/grpc-ecosystem/grpc-gateway/issues/166) +- Support specifying which schemes should be output in swagger.json [\#161](https://github.com/grpc-ecosystem/grpc-gateway/issues/161) +- Use headers for routing [\#157](https://github.com/grpc-ecosystem/grpc-gateway/issues/157) +- ENUM in swagger.json makes client code failed to parse response from gateway [\#153](https://github.com/grpc-ecosystem/grpc-gateway/issues/153) +- Support map types [\#140](https://github.com/grpc-ecosystem/grpc-gateway/issues/140) +- generate OpenAPI/swagger documentation at run time? [\#138](https://github.com/grpc-ecosystem/grpc-gateway/issues/138) +- After the 1.7 release, update .travis.yaml to check the compiled proto output [\#137](https://github.com/grpc-ecosystem/grpc-gateway/issues/137) +- Getting parsed runtime.Pattern from server mux [\#127](https://github.com/grpc-ecosystem/grpc-gateway/issues/127) +- REST API without proxying [\#46](https://github.com/grpc-ecosystem/grpc-gateway/issues/46) -## [v1.2.0.rc1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0.rc1) (2017-03-24) **Merged pull requests:** -- Support user configurable header forwarding & context metadata [\#336](https://github.com/grpc-ecosystem/grpc-gateway/pull/336) -- Update go\_out parameter to remove comma [\#333](https://github.com/grpc-ecosystem/grpc-gateway/pull/333) -- Update stale path in README [\#332](https://github.com/grpc-ecosystem/grpc-gateway/pull/332) -- improve documentation regarding external dependencies [\#330](https://github.com/grpc-ecosystem/grpc-gateway/pull/330) -- Return an error on invalid nested query parameters. [\#329](https://github.com/grpc-ecosystem/grpc-gateway/pull/329) -- Update upstream proto files and add google.golang.org/genproto support. [\#325](https://github.com/grpc-ecosystem/grpc-gateway/pull/325) -- Support oneof fields in query params [\#321](https://github.com/grpc-ecosystem/grpc-gateway/pull/321) -- Do not ignore the error coming from http.ListenAndServe in examples [\#319](https://github.com/grpc-ecosystem/grpc-gateway/pull/319) -- Look up enum value maps by their proto name [\#315](https://github.com/grpc-ecosystem/grpc-gateway/pull/315) -- enable parsing enums from query parameters [\#314](https://github.com/grpc-ecosystem/grpc-gateway/pull/314) -- Do not add imports from methods with no bindings. [\#312](https://github.com/grpc-ecosystem/grpc-gateway/pull/312) -- Convert the first letter of method name to upper [\#300](https://github.com/grpc-ecosystem/grpc-gateway/pull/300) -- write query parameters to swagger definition [\#297](https://github.com/grpc-ecosystem/grpc-gateway/pull/297) -- Bump swagger-client to 2.1.28 for examples/browser [\#290](https://github.com/grpc-ecosystem/grpc-gateway/pull/290) -- pin to version before es6ism [\#289](https://github.com/grpc-ecosystem/grpc-gateway/pull/289) -- Prevent lack of http bindings from generating non-building output [\#286](https://github.com/grpc-ecosystem/grpc-gateway/pull/286) -- Added support for Timestamp in URL. [\#281](https://github.com/grpc-ecosystem/grpc-gateway/pull/281) -- add plugin param 'allow\_delete\_body' [\#280](https://github.com/grpc-ecosystem/grpc-gateway/pull/280) -- Fix ruby gen command [\#275](https://github.com/grpc-ecosystem/grpc-gateway/pull/275) -- Make grpc-gateway support enum fields in path parameter [\#273](https://github.com/grpc-ecosystem/grpc-gateway/pull/273) -- remove unnecessary make\(\) [\#271](https://github.com/grpc-ecosystem/grpc-gateway/pull/271) -- preserve field order in swagger spec [\#270](https://github.com/grpc-ecosystem/grpc-gateway/pull/270) -- Merge \#228 [\#268](https://github.com/grpc-ecosystem/grpc-gateway/pull/268) -- Handle methods with no bindings more carefully [\#267](https://github.com/grpc-ecosystem/grpc-gateway/pull/267) -- describe default marshaler in README.md [\#266](https://github.com/grpc-ecosystem/grpc-gateway/pull/266) -- Add request\_context flag to utilize \(\*http.Request\).Context\(\) in handlers [\#265](https://github.com/grpc-ecosystem/grpc-gateway/pull/265) -- Regenerate examples [\#264](https://github.com/grpc-ecosystem/grpc-gateway/pull/264) -- Correct runtime.errorBody protobuf field tag [\#256](https://github.com/grpc-ecosystem/grpc-gateway/pull/256) -- Pass permanent HTTP request headers [\#252](https://github.com/grpc-ecosystem/grpc-gateway/pull/252) -- regenerate examples, fix tests for go tip [\#248](https://github.com/grpc-ecosystem/grpc-gateway/pull/248) -- Render the swagger request body properly [\#247](https://github.com/grpc-ecosystem/grpc-gateway/pull/247) -- Error output should have lowercase attribute names [\#244](https://github.com/grpc-ecosystem/grpc-gateway/pull/244) -- runtime - export prefix constants [\#236](https://github.com/grpc-ecosystem/grpc-gateway/pull/236) -- README - Add CoreOS example [\#231](https://github.com/grpc-ecosystem/grpc-gateway/pull/231) -- Docs - Add section about how HTTP maps to gRPC [\#227](https://github.com/grpc-ecosystem/grpc-gateway/pull/227) -- readme: added links to additional documentation [\#222](https://github.com/grpc-ecosystem/grpc-gateway/pull/222) -- Use a released version of protoc [\#216](https://github.com/grpc-ecosystem/grpc-gateway/pull/216) -- Add contribution guideline [\#210](https://github.com/grpc-ecosystem/grpc-gateway/pull/210) -- improve\(genswagger:template\):added support for google.protobuf.Timestamp [\#209](https://github.com/grpc-ecosystem/grpc-gateway/pull/209) -- Allowing unknown fields to be dropped instead of returning error from… [\#208](https://github.com/grpc-ecosystem/grpc-gateway/pull/208) -- Avoid Internal Server Error on zero-length input for bidi streaming [\#200](https://github.com/grpc-ecosystem/grpc-gateway/pull/200) - -## [v1.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.1.0) (2016-07-23) +- Remove an obsolete custom option [\#604](https://github.com/grpc-ecosystem/grpc-gateway/pull/604) ([yugui](https://github.com/yugui)) +- Support user configurable header forwarding & context metadata [\#336](https://github.com/grpc-ecosystem/grpc-gateway/pull/336) ([tamalsaha](https://github.com/tamalsaha)) +- Update go\_out parameter to remove comma [\#333](https://github.com/grpc-ecosystem/grpc-gateway/pull/333) ([tmc](https://github.com/tmc)) +- Update stale path in README [\#332](https://github.com/grpc-ecosystem/grpc-gateway/pull/332) ([tmc](https://github.com/tmc)) +- improve documentation regarding external dependencies [\#330](https://github.com/grpc-ecosystem/grpc-gateway/pull/330) ([CaptTofu](https://github.com/CaptTofu)) +- Return an error on invalid nested query parameters. [\#329](https://github.com/grpc-ecosystem/grpc-gateway/pull/329) ([fische](https://github.com/fische)) +- Update upstream proto files and add google.golang.org/genproto support. [\#325](https://github.com/grpc-ecosystem/grpc-gateway/pull/325) ([tmc](https://github.com/tmc)) +- Support oneof fields in query params [\#321](https://github.com/grpc-ecosystem/grpc-gateway/pull/321) ([nilium](https://github.com/nilium)) +- Do not ignore the error coming from http.ListenAndServe in examples [\#319](https://github.com/grpc-ecosystem/grpc-gateway/pull/319) ([campoy](https://github.com/campoy)) +- Look up enum value maps by their proto name [\#315](https://github.com/grpc-ecosystem/grpc-gateway/pull/315) ([nilium](https://github.com/nilium)) +- enable parsing enums from query parameters [\#314](https://github.com/grpc-ecosystem/grpc-gateway/pull/314) ([tzneal](https://github.com/tzneal)) +- Do not add imports from methods with no bindings. [\#312](https://github.com/grpc-ecosystem/grpc-gateway/pull/312) ([fische](https://github.com/fische)) +- Convert the first letter of method name to upper [\#300](https://github.com/grpc-ecosystem/grpc-gateway/pull/300) ([lipixun](https://github.com/lipixun)) +- write query parameters to swagger definition [\#297](https://github.com/grpc-ecosystem/grpc-gateway/pull/297) ([t-yuki](https://github.com/t-yuki)) +- Bump swagger-client to 2.1.28 for examples/browser [\#290](https://github.com/grpc-ecosystem/grpc-gateway/pull/290) ([tmc](https://github.com/tmc)) +- pin to version before es6ism [\#289](https://github.com/grpc-ecosystem/grpc-gateway/pull/289) ([tmc](https://github.com/tmc)) +- Prevent lack of http bindings from generating non-building output [\#286](https://github.com/grpc-ecosystem/grpc-gateway/pull/286) ([tmc](https://github.com/tmc)) +- Added support for Timestamp in URL. [\#281](https://github.com/grpc-ecosystem/grpc-gateway/pull/281) ([johansja](https://github.com/johansja)) +- add plugin param 'allow\_delete\_body' [\#280](https://github.com/grpc-ecosystem/grpc-gateway/pull/280) ([msample](https://github.com/msample)) +- Fix ruby gen command [\#275](https://github.com/grpc-ecosystem/grpc-gateway/pull/275) ([bluehallu](https://github.com/bluehallu)) +- Make grpc-gateway support enum fields in path parameter [\#273](https://github.com/grpc-ecosystem/grpc-gateway/pull/273) ([linuxerwang](https://github.com/linuxerwang)) +- remove unnecessary make\(\) [\#271](https://github.com/grpc-ecosystem/grpc-gateway/pull/271) ([tmc](https://github.com/tmc)) +- preserve field order in swagger spec [\#270](https://github.com/grpc-ecosystem/grpc-gateway/pull/270) ([tmc](https://github.com/tmc)) +- Merge \#228 [\#268](https://github.com/grpc-ecosystem/grpc-gateway/pull/268) ([tmc](https://github.com/tmc)) +- Handle methods with no bindings more carefully [\#267](https://github.com/grpc-ecosystem/grpc-gateway/pull/267) ([tmc](https://github.com/tmc)) +- describe default marshaler in README.md [\#266](https://github.com/grpc-ecosystem/grpc-gateway/pull/266) ([tmc](https://github.com/tmc)) +- Add request\_context flag to utilize \(\*http.Request\).Context\(\) in handlers [\#265](https://github.com/grpc-ecosystem/grpc-gateway/pull/265) ([tmc](https://github.com/tmc)) +- Regenerate examples [\#264](https://github.com/grpc-ecosystem/grpc-gateway/pull/264) ([tmc](https://github.com/tmc)) +- Correct runtime.errorBody protobuf field tag [\#256](https://github.com/grpc-ecosystem/grpc-gateway/pull/256) ([tmc](https://github.com/tmc)) +- Pass permanent HTTP request headers [\#252](https://github.com/grpc-ecosystem/grpc-gateway/pull/252) ([tmc](https://github.com/tmc)) +- regenerate examples, fix tests for go tip [\#248](https://github.com/grpc-ecosystem/grpc-gateway/pull/248) ([tmc](https://github.com/tmc)) +- Render the swagger request body properly [\#247](https://github.com/grpc-ecosystem/grpc-gateway/pull/247) ([dprotaso](https://github.com/dprotaso)) +- Error output should have lowercase attribute names [\#244](https://github.com/grpc-ecosystem/grpc-gateway/pull/244) ([nathanborror](https://github.com/nathanborror)) +- runtime - export prefix constants [\#236](https://github.com/grpc-ecosystem/grpc-gateway/pull/236) ([philipithomas](https://github.com/philipithomas)) +- README - Add CoreOS example [\#231](https://github.com/grpc-ecosystem/grpc-gateway/pull/231) ([philipithomas](https://github.com/philipithomas)) +- Docs - Add section about how HTTP maps to gRPC [\#227](https://github.com/grpc-ecosystem/grpc-gateway/pull/227) ([philipithomas](https://github.com/philipithomas)) +- readme: added links to additional documentation [\#222](https://github.com/grpc-ecosystem/grpc-gateway/pull/222) ([sdemos](https://github.com/sdemos)) +- Use a released version of protoc [\#216](https://github.com/grpc-ecosystem/grpc-gateway/pull/216) ([yugui](https://github.com/yugui)) +- Add contribution guideline [\#210](https://github.com/grpc-ecosystem/grpc-gateway/pull/210) ([yugui](https://github.com/yugui)) +- Allowing unknown fields to be dropped instead of returning error from… [\#208](https://github.com/grpc-ecosystem/grpc-gateway/pull/208) ([sriniven](https://github.com/sriniven)) +- Avoid Internal Server Error on zero-length input for bidi streaming [\#200](https://github.com/grpc-ecosystem/grpc-gateway/pull/200) ([yugui](https://github.com/yugui)) + +## [v1.1.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.1.0) (2016-07-23) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.0.0...v1.1.0) + +**Implemented enhancements:** + +- Support oneof types of fields [\#82](https://github.com/grpc-ecosystem/grpc-gateway/issues/82) +- allow use of jsonpb for marshaling [\#79](https://github.com/grpc-ecosystem/grpc-gateway/issues/79) + +**Closed issues:** + +- Generating a gRPC stub using Gateway generates a gRPC internal error [\#198](https://github.com/grpc-ecosystem/grpc-gateway/issues/198) +- Build fails with error: use of internal package not allowed [\#197](https://github.com/grpc-ecosystem/grpc-gateway/issues/197) +- google/protobuf/descriptor.proto: File not found. [\#194](https://github.com/grpc-ecosystem/grpc-gateway/issues/194) +- please tag releases [\#189](https://github.com/grpc-ecosystem/grpc-gateway/issues/189) +- Support for path collapsing for embedded structs? [\#187](https://github.com/grpc-ecosystem/grpc-gateway/issues/187) +- \[ACTION Required\] Moving to grpc-ecosystem [\#179](https://github.com/grpc-ecosystem/grpc-gateway/issues/179) +- Ading grpc-timeout support [\#107](https://github.com/grpc-ecosystem/grpc-gateway/issues/107) +- Generation of one swagger file out of multiple protos? [\#99](https://github.com/grpc-ecosystem/grpc-gateway/issues/99) + **Merged pull requests:** -- Rename packages to follow the repository transfer [\#192](https://github.com/grpc-ecosystem/grpc-gateway/pull/192) -- return err early if EOF to prevent logging in normal conditions [\#191](https://github.com/grpc-ecosystem/grpc-gateway/pull/191) -- send Trailer header on error [\#188](https://github.com/grpc-ecosystem/grpc-gateway/pull/188) -- generate swagger output for streaming endpoints with a basic note [\#183](https://github.com/grpc-ecosystem/grpc-gateway/pull/183) +- Rename packages to follow the repository transfer [\#192](https://github.com/grpc-ecosystem/grpc-gateway/pull/192) ([yugui](https://github.com/yugui)) +- return err early if EOF to prevent logging in normal conditions [\#191](https://github.com/grpc-ecosystem/grpc-gateway/pull/191) ([tmc](https://github.com/tmc)) +- send Trailer header on error [\#188](https://github.com/grpc-ecosystem/grpc-gateway/pull/188) ([kazegusuri](https://github.com/kazegusuri)) +- generate swagger output for streaming endpoints with a basic note [\#183](https://github.com/grpc-ecosystem/grpc-gateway/pull/183) ([tmc](https://github.com/tmc)) + +## [v1.0.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.0.0) (2016-06-15) +**Implemented enhancements:** + +- support protobuf-over-HTTP [\#124](https://github.com/grpc-ecosystem/grpc-gateway/issues/124) +- Static mapping from proto field names to golang field names [\#86](https://github.com/grpc-ecosystem/grpc-gateway/issues/86) +- Format Errors to JSON [\#25](https://github.com/grpc-ecosystem/grpc-gateway/issues/25) +- Emit API definition in Swagger schema format [\#9](https://github.com/grpc-ecosystem/grpc-gateway/issues/9) +- Method parameter in query string [\#6](https://github.com/grpc-ecosystem/grpc-gateway/issues/6) +- Integrate authentication [\#4](https://github.com/grpc-ecosystem/grpc-gateway/issues/4) +- Add swagger support [\#68](https://github.com/grpc-ecosystem/grpc-gateway/pull/68) ([achew22](https://github.com/achew22)) +- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([peter-edge](https://github.com/peter-edge)) + +**Fixed bugs:** + +- recent annotation change requires req.RemoteAddr to be populated [\#177](https://github.com/grpc-ecosystem/grpc-gateway/issues/177) +- Runtime panic with CloseNotify [\#115](https://github.com/grpc-ecosystem/grpc-gateway/issues/115) +- Gateway code generation broken when rpc method with a streaming response has an input paramter [\#35](https://github.com/grpc-ecosystem/grpc-gateway/issues/35) +- URL usage of nested messages causes nil pointer in proto3 [\#32](https://github.com/grpc-ecosystem/grpc-gateway/issues/32) +- Multiple .proto files generates invalid import statements. [\#22](https://github.com/grpc-ecosystem/grpc-gateway/issues/22) + +**Closed issues:** + +- remote peer address is lost in ctx - always resolves to localhost [\#173](https://github.com/grpc-ecosystem/grpc-gateway/issues/173) +- Bidirectional streams don't concurrently Send and Recv [\#169](https://github.com/grpc-ecosystem/grpc-gateway/issues/169) +- Error: failed to import google/api/annotations.proto [\#165](https://github.com/grpc-ecosystem/grpc-gateway/issues/165) +- Test datarace in controlapi [\#163](https://github.com/grpc-ecosystem/grpc-gateway/issues/163) +- not enough arguments in call to runtime.HTTPError [\#162](https://github.com/grpc-ecosystem/grpc-gateway/issues/162) +- String-values for Enums in request object are not recognized. [\#150](https://github.com/grpc-ecosystem/grpc-gateway/issues/150) +- Handling of import public "file.proto" [\#139](https://github.com/grpc-ecosystem/grpc-gateway/issues/139) +- Does grpc-gateway support http middleware? [\#132](https://github.com/grpc-ecosystem/grpc-gateway/issues/132) +- push to web clients using WS or SSE ? [\#131](https://github.com/grpc-ecosystem/grpc-gateway/issues/131) +- protoc-gen-swagger comment parsing for documentation gen [\#128](https://github.com/grpc-ecosystem/grpc-gateway/issues/128) +- generated code has a data race [\#123](https://github.com/grpc-ecosystem/grpc-gateway/issues/123) +- panic: net/http: CloseNotify called after ServeHTTP finished [\#121](https://github.com/grpc-ecosystem/grpc-gateway/issues/121) +- CloseNotify race with ServeHTTP [\#119](https://github.com/grpc-ecosystem/grpc-gateway/issues/119) +- echo service example does not compile [\#117](https://github.com/grpc-ecosystem/grpc-gateway/issues/117) +- go vet issues in template\_test.go [\#113](https://github.com/grpc-ecosystem/grpc-gateway/issues/113) +- undefined: proto.SizeVarint [\#103](https://github.com/grpc-ecosystem/grpc-gateway/issues/103) +- Closing the HTTP connection does not cancel the Context [\#101](https://github.com/grpc-ecosystem/grpc-gateway/issues/101) +- Logging [\#92](https://github.com/grpc-ecosystem/grpc-gateway/issues/92) +- Missing default values in JSON output? [\#91](https://github.com/grpc-ecosystem/grpc-gateway/issues/91) +- Better grpc error strings [\#87](https://github.com/grpc-ecosystem/grpc-gateway/issues/87) +- Fields aren't named in the same manner as golang/protobuf [\#84](https://github.com/grpc-ecosystem/grpc-gateway/issues/84) +- Header Forwarding from server. [\#73](https://github.com/grpc-ecosystem/grpc-gateway/issues/73) +- No pattern specified in google.api.HttpRule [\#70](https://github.com/grpc-ecosystem/grpc-gateway/issues/70) +- cannot find package "google/api" [\#67](https://github.com/grpc-ecosystem/grpc-gateway/issues/67) +- Generated .pb.go with services no longer works with latest version of grpc-go. [\#62](https://github.com/grpc-ecosystem/grpc-gateway/issues/62) +- JavaScript Proxy [\#61](https://github.com/grpc-ecosystem/grpc-gateway/issues/61) +- Add HTTP error code, error status to responseStreamChunk Error [\#58](https://github.com/grpc-ecosystem/grpc-gateway/issues/58) +- Reverse the code gen idea [\#44](https://github.com/grpc-ecosystem/grpc-gateway/issues/44) +- array of maps in json [\#43](https://github.com/grpc-ecosystem/grpc-gateway/issues/43) +- Examples break with 1.5 because of import of "main" examples package [\#37](https://github.com/grpc-ecosystem/grpc-gateway/issues/37) +- Breaks with 1.5rc1 due to "internal" package name. [\#36](https://github.com/grpc-ecosystem/grpc-gateway/issues/36) +- Feature Request: Support for non-nullable nested messages. [\#20](https://github.com/grpc-ecosystem/grpc-gateway/issues/20) +- Is PascalFromSnake the right conversion to be doing? [\#19](https://github.com/grpc-ecosystem/grpc-gateway/issues/19) +- Infinite loop in generator when package name conflicts [\#17](https://github.com/grpc-ecosystem/grpc-gateway/issues/17) +- google.api.http options in multi-line format not supported [\#16](https://github.com/grpc-ecosystem/grpc-gateway/issues/16) +- Is there any plan to developing a C++ version? [\#15](https://github.com/grpc-ecosystem/grpc-gateway/issues/15) -## [v1.0.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.0.0) (2016-06-15) **Merged pull requests:** -- Regenerate files with the latest protoc-gen-go [\#185](https://github.com/grpc-ecosystem/grpc-gateway/pull/185) -- Add browser examples [\#184](https://github.com/grpc-ecosystem/grpc-gateway/pull/184) -- Fix golint and go vet errors [\#182](https://github.com/grpc-ecosystem/grpc-gateway/pull/182) -- Add integration with clients generated by swagger-codegen [\#181](https://github.com/grpc-ecosystem/grpc-gateway/pull/181) -- Simplify example services [\#180](https://github.com/grpc-ecosystem/grpc-gateway/pull/180) -- Avoid errors when req.RemoteAddr is empty [\#178](https://github.com/grpc-ecosystem/grpc-gateway/pull/178) -- Feature/headers [\#176](https://github.com/grpc-ecosystem/grpc-gateway/pull/176) -- Include HTTP req.remoteAddr in gRPC ctx [\#174](https://github.com/grpc-ecosystem/grpc-gateway/pull/174) -- Update dependencies [\#171](https://github.com/grpc-ecosystem/grpc-gateway/pull/171) -- Add bidirectional streaming support by running Send\(\) and Recv\(\) concurrently [\#170](https://github.com/grpc-ecosystem/grpc-gateway/pull/170) -- make Authorization header check case-insensitive to comply with RFC 2616 4.2 [\#164](https://github.com/grpc-ecosystem/grpc-gateway/pull/164) -- jsonpb: avoid duplicating upstream's struct [\#158](https://github.com/grpc-ecosystem/grpc-gateway/pull/158) -- Generate Swagger description for service methods using proto comments. [\#156](https://github.com/grpc-ecosystem/grpc-gateway/pull/156) -- Implement gRPC timeout support for inbound HTTP headers [\#155](https://github.com/grpc-ecosystem/grpc-gateway/pull/155) -- Add more examples to marshalers [\#154](https://github.com/grpc-ecosystem/grpc-gateway/pull/154) -- custom marshaler: handle `Accept` headers correctly [\#152](https://github.com/grpc-ecosystem/grpc-gateway/pull/152) -- Simplify custom marshaler API [\#151](https://github.com/grpc-ecosystem/grpc-gateway/pull/151) -- Fix camel case path parameter handling in swagger [\#149](https://github.com/grpc-ecosystem/grpc-gateway/pull/149) -- Swagger dot in path template [\#148](https://github.com/grpc-ecosystem/grpc-gateway/pull/148) -- Support map types in swagger generator [\#147](https://github.com/grpc-ecosystem/grpc-gateway/pull/147) -- Cleanup custom marshaler [\#146](https://github.com/grpc-ecosystem/grpc-gateway/pull/146) -- Implement custom Marshaler support, add jsonpb implemention. [\#144](https://github.com/grpc-ecosystem/grpc-gateway/pull/144) -- Allow period in path URL templates when generating Swagger templates. [\#143](https://github.com/grpc-ecosystem/grpc-gateway/pull/143) -- Link to LICENSE.txt [\#142](https://github.com/grpc-ecosystem/grpc-gateway/pull/142) -- Support map types in swagger generator [\#141](https://github.com/grpc-ecosystem/grpc-gateway/pull/141) -- Conditionally stops checking if generated file are up-to-date [\#136](https://github.com/grpc-ecosystem/grpc-gateway/pull/136) -- Generate Swagger description for service methods using proto comments. [\#134](https://github.com/grpc-ecosystem/grpc-gateway/pull/134) -- Swagger definitions now have `type` set to `object`. [\#133](https://github.com/grpc-ecosystem/grpc-gateway/pull/133) -- go\_package option as go import path [\#129](https://github.com/grpc-ecosystem/grpc-gateway/pull/129) -- Fix govet errors [\#126](https://github.com/grpc-ecosystem/grpc-gateway/pull/126) -- Fix data-race in generated codes [\#125](https://github.com/grpc-ecosystem/grpc-gateway/pull/125) -- Fix \#119 - CloseNotify race with ServeHTTP [\#120](https://github.com/grpc-ecosystem/grpc-gateway/pull/120) -- Replace glog with grpclog [\#118](https://github.com/grpc-ecosystem/grpc-gateway/pull/118) -- Fix a goroutine-leak in HTTP keep-alive [\#116](https://github.com/grpc-ecosystem/grpc-gateway/pull/116) -- Fix camel case path parameter handling in swagger [\#114](https://github.com/grpc-ecosystem/grpc-gateway/pull/114) -- gofmt -s [\#112](https://github.com/grpc-ecosystem/grpc-gateway/pull/112) -- fix typo [\#111](https://github.com/grpc-ecosystem/grpc-gateway/pull/111) -- fix typo [\#110](https://github.com/grpc-ecosystem/grpc-gateway/pull/110) -- fixes missing swagger operation objects [\#109](https://github.com/grpc-ecosystem/grpc-gateway/pull/109) -- Add parser and swagger support for enum, no gengateway yet [\#108](https://github.com/grpc-ecosystem/grpc-gateway/pull/108) -- README: add protoc-gen-swagger too [\#105](https://github.com/grpc-ecosystem/grpc-gateway/pull/105) -- README: Suggest go get -u by default. [\#104](https://github.com/grpc-ecosystem/grpc-gateway/pull/104) -- Cancel context when HTTP connection is closed [\#102](https://github.com/grpc-ecosystem/grpc-gateway/pull/102) -- wait test server up [\#100](https://github.com/grpc-ecosystem/grpc-gateway/pull/100) -- Fix the swagger section of the README.md [\#98](https://github.com/grpc-ecosystem/grpc-gateway/pull/98) -- Add documentation for using Swagger [\#97](https://github.com/grpc-ecosystem/grpc-gateway/pull/97) -- Better compatibility to field names generated by protoc-gen-go [\#96](https://github.com/grpc-ecosystem/grpc-gateway/pull/96) -- Update protoc from 3.0.0-beta1 to 3.0.0-beta2 [\#95](https://github.com/grpc-ecosystem/grpc-gateway/pull/95) -- Better grpc error strings [\#94](https://github.com/grpc-ecosystem/grpc-gateway/pull/94) -- make available header and trailer metadata [\#93](https://github.com/grpc-ecosystem/grpc-gateway/pull/93) -- make grpc.DialOption configurable [\#89](https://github.com/grpc-ecosystem/grpc-gateway/pull/89) -- Add request in error handlers [\#88](https://github.com/grpc-ecosystem/grpc-gateway/pull/88) -- Improve PascalFromSnake behavior [\#85](https://github.com/grpc-ecosystem/grpc-gateway/pull/85) -- Typo grcp -\> grpc [\#81](https://github.com/grpc-ecosystem/grpc-gateway/pull/81) -- Add abstraction of code generator implementation [\#78](https://github.com/grpc-ecosystem/grpc-gateway/pull/78) -- Support multivalue of metadata [\#77](https://github.com/grpc-ecosystem/grpc-gateway/pull/77) -- Fix broken test [\#76](https://github.com/grpc-ecosystem/grpc-gateway/pull/76) -- Added missing instruction line in README [\#75](https://github.com/grpc-ecosystem/grpc-gateway/pull/75) -- Fix a complie error in generated go files [\#71](https://github.com/grpc-ecosystem/grpc-gateway/pull/71) -- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) -- Add swagger support [\#68](https://github.com/grpc-ecosystem/grpc-gateway/pull/68) -- Bugfix/handling headers for `Authorization` and `Host` [\#65](https://github.com/grpc-ecosystem/grpc-gateway/pull/65) -- Fix `error` field always in chunk response [\#64](https://github.com/grpc-ecosystem/grpc-gateway/pull/64) -- Update .pb.go to latest version. [\#63](https://github.com/grpc-ecosystem/grpc-gateway/pull/63) -- Run more tests in Travis CI [\#60](https://github.com/grpc-ecosystem/grpc-gateway/pull/60) -- Added http error code and error status for responseStreamChunk error [\#59](https://github.com/grpc-ecosystem/grpc-gateway/pull/59) -- Fix parsing of verb and final path component. [\#55](https://github.com/grpc-ecosystem/grpc-gateway/pull/55) -- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) -- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) -- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) -- Fix a build error with the latest protoc-gen-go [\#50](https://github.com/grpc-ecosystem/grpc-gateway/pull/50) -- Configure Travis CI [\#49](https://github.com/grpc-ecosystem/grpc-gateway/pull/49) -- Follow a change of go package name convention in protoc-gen-go [\#48](https://github.com/grpc-ecosystem/grpc-gateway/pull/48) -- Consider tail segments after deep wildcard [\#47](https://github.com/grpc-ecosystem/grpc-gateway/pull/47) -- Fix typo in README [\#45](https://github.com/grpc-ecosystem/grpc-gateway/pull/45) -- Fix undefined variable error in generated codes [\#42](https://github.com/grpc-ecosystem/grpc-gateway/pull/42) -- Follow changes in protoc-gen-go and grpc-go [\#41](https://github.com/grpc-ecosystem/grpc-gateway/pull/41) -- Fixes \#4 [\#40](https://github.com/grpc-ecosystem/grpc-gateway/pull/40) -- fix examples to work with go1.5 [\#39](https://github.com/grpc-ecosystem/grpc-gateway/pull/39) -- rename internal to utilties for 1.5 compatibility [\#38](https://github.com/grpc-ecosystem/grpc-gateway/pull/38) -- Reflection fix of proto3 nested messages. [\#34](https://github.com/grpc-ecosystem/grpc-gateway/pull/34) -- \[Experimental\] Make the response forwarder function customizable [\#31](https://github.com/grpc-ecosystem/grpc-gateway/pull/31) -- Add f.Flush\(\) to runtime.ForwardResponseStream [\#30](https://github.com/grpc-ecosystem/grpc-gateway/pull/30) -- Format error message in JSON [\#29](https://github.com/grpc-ecosystem/grpc-gateway/pull/29) -- Update examples with HTTP header context annotation [\#28](https://github.com/grpc-ecosystem/grpc-gateway/pull/28) -- Report semantic errors in the source to protoc [\#27](https://github.com/grpc-ecosystem/grpc-gateway/pull/27) -- Add support for non-nullable nested messages. [\#21](https://github.com/grpc-ecosystem/grpc-gateway/pull/21) -- Receive GRPC metadata from HTTP headers. [\#18](https://github.com/grpc-ecosystem/grpc-gateway/pull/18) -- Implement detailed specs of google.api.http [\#14](https://github.com/grpc-ecosystem/grpc-gateway/pull/14) -- Configure travis CI [\#13](https://github.com/grpc-ecosystem/grpc-gateway/pull/13) -- Replace our own custom option with the one defined by Google [\#12](https://github.com/grpc-ecosystem/grpc-gateway/pull/12) -- Remove useless context setup [\#11](https://github.com/grpc-ecosystem/grpc-gateway/pull/11) -- Fix typo, path, missing semicolon. [\#10](https://github.com/grpc-ecosystem/grpc-gateway/pull/10) -- Use a globally unique id for the custom option [\#3](https://github.com/grpc-ecosystem/grpc-gateway/pull/3) -- implement ABitOfEverythingService [\#2](https://github.com/grpc-ecosystem/grpc-gateway/pull/2) -- support streaming API calls [\#1](https://github.com/grpc-ecosystem/grpc-gateway/pull/1) +- Regenerate files with the latest protoc-gen-go [\#185](https://github.com/grpc-ecosystem/grpc-gateway/pull/185) ([yugui](https://github.com/yugui)) +- Add browser examples [\#184](https://github.com/grpc-ecosystem/grpc-gateway/pull/184) ([yugui](https://github.com/yugui)) +- Fix golint and go vet errors [\#182](https://github.com/grpc-ecosystem/grpc-gateway/pull/182) ([yugui](https://github.com/yugui)) +- Add integration with clients generated by swagger-codegen [\#181](https://github.com/grpc-ecosystem/grpc-gateway/pull/181) ([yugui](https://github.com/yugui)) +- Simplify example services [\#180](https://github.com/grpc-ecosystem/grpc-gateway/pull/180) ([yugui](https://github.com/yugui)) +- Avoid errors when req.RemoteAddr is empty [\#178](https://github.com/grpc-ecosystem/grpc-gateway/pull/178) ([yugui](https://github.com/yugui)) +- Feature/headers [\#176](https://github.com/grpc-ecosystem/grpc-gateway/pull/176) ([yugui](https://github.com/yugui)) +- Include HTTP req.remoteAddr in gRPC ctx [\#174](https://github.com/grpc-ecosystem/grpc-gateway/pull/174) ([mikeatlas](https://github.com/mikeatlas)) +- Update dependencies [\#171](https://github.com/grpc-ecosystem/grpc-gateway/pull/171) ([yugui](https://github.com/yugui)) +- Add bidirectional streaming support by running Send\(\) and Recv\(\) concurrently [\#170](https://github.com/grpc-ecosystem/grpc-gateway/pull/170) ([tmc](https://github.com/tmc)) +- make Authorization header check case-insensitive to comply with RFC 2616 4.2 [\#164](https://github.com/grpc-ecosystem/grpc-gateway/pull/164) ([tmc](https://github.com/tmc)) +- jsonpb: avoid duplicating upstream's struct [\#158](https://github.com/grpc-ecosystem/grpc-gateway/pull/158) ([tamird](https://github.com/tamird)) +- Generate Swagger description for service methods using proto comments. [\#156](https://github.com/grpc-ecosystem/grpc-gateway/pull/156) ([t-yuki](https://github.com/t-yuki)) +- Implement gRPC timeout support for inbound HTTP headers [\#155](https://github.com/grpc-ecosystem/grpc-gateway/pull/155) ([mwitkow](https://github.com/mwitkow)) +- Add more examples to marshalers [\#154](https://github.com/grpc-ecosystem/grpc-gateway/pull/154) ([yugui](https://github.com/yugui)) +- custom marshaler: handle `Accept` headers correctly [\#152](https://github.com/grpc-ecosystem/grpc-gateway/pull/152) ([tamird](https://github.com/tamird)) +- Simplify custom marshaler API [\#151](https://github.com/grpc-ecosystem/grpc-gateway/pull/151) ([yugui](https://github.com/yugui)) +- Fix camel case path parameter handling in swagger [\#149](https://github.com/grpc-ecosystem/grpc-gateway/pull/149) ([yugui](https://github.com/yugui)) +- Swagger dot in path template [\#148](https://github.com/grpc-ecosystem/grpc-gateway/pull/148) ([yugui](https://github.com/yugui)) +- Support map types in swagger generator [\#147](https://github.com/grpc-ecosystem/grpc-gateway/pull/147) ([yugui](https://github.com/yugui)) +- Cleanup custom marshaler [\#146](https://github.com/grpc-ecosystem/grpc-gateway/pull/146) ([yugui](https://github.com/yugui)) +- Implement custom Marshaler support, add jsonpb implemention. [\#144](https://github.com/grpc-ecosystem/grpc-gateway/pull/144) ([tmc](https://github.com/tmc)) +- Allow period in path URL templates when generating Swagger templates. [\#143](https://github.com/grpc-ecosystem/grpc-gateway/pull/143) ([ivucica](https://github.com/ivucica)) +- Link to LICENSE.txt [\#142](https://github.com/grpc-ecosystem/grpc-gateway/pull/142) ([sunkuet02](https://github.com/sunkuet02)) +- Support map types in swagger generator [\#141](https://github.com/grpc-ecosystem/grpc-gateway/pull/141) ([t-yuki](https://github.com/t-yuki)) +- Conditionally stops checking if generated file are up-to-date [\#136](https://github.com/grpc-ecosystem/grpc-gateway/pull/136) ([yugui](https://github.com/yugui)) +- Generate Swagger description for service methods using proto comments. [\#134](https://github.com/grpc-ecosystem/grpc-gateway/pull/134) ([ivucica](https://github.com/ivucica)) +- Swagger definitions now have `type` set to `object`. [\#133](https://github.com/grpc-ecosystem/grpc-gateway/pull/133) ([ivucica](https://github.com/ivucica)) +- go\_package option as go import path [\#129](https://github.com/grpc-ecosystem/grpc-gateway/pull/129) ([kazegusuri](https://github.com/kazegusuri)) +- Fix govet errors [\#126](https://github.com/grpc-ecosystem/grpc-gateway/pull/126) ([yugui](https://github.com/yugui)) +- Fix data-race in generated codes [\#125](https://github.com/grpc-ecosystem/grpc-gateway/pull/125) ([yugui](https://github.com/yugui)) +- Fix \#119 - CloseNotify race with ServeHTTP [\#120](https://github.com/grpc-ecosystem/grpc-gateway/pull/120) ([cuongdo](https://github.com/cuongdo)) +- Replace glog with grpclog [\#118](https://github.com/grpc-ecosystem/grpc-gateway/pull/118) ([cuongdo](https://github.com/cuongdo)) +- Fix a goroutine-leak in HTTP keep-alive [\#116](https://github.com/grpc-ecosystem/grpc-gateway/pull/116) ([yugui](https://github.com/yugui)) +- Fix camel case path parameter handling in swagger [\#114](https://github.com/grpc-ecosystem/grpc-gateway/pull/114) ([t-yuki](https://github.com/t-yuki)) +- gofmt -s [\#112](https://github.com/grpc-ecosystem/grpc-gateway/pull/112) ([shawnps](https://github.com/shawnps)) +- fix typo [\#111](https://github.com/grpc-ecosystem/grpc-gateway/pull/111) ([shawnps](https://github.com/shawnps)) +- fix typo [\#110](https://github.com/grpc-ecosystem/grpc-gateway/pull/110) ([shawnps](https://github.com/shawnps)) +- fixes missing swagger operation objects [\#109](https://github.com/grpc-ecosystem/grpc-gateway/pull/109) ([t-yuki](https://github.com/t-yuki)) +- Add parser and swagger support for enum, no gengateway yet [\#108](https://github.com/grpc-ecosystem/grpc-gateway/pull/108) ([t-yuki](https://github.com/t-yuki)) +- README: add protoc-gen-swagger too [\#105](https://github.com/grpc-ecosystem/grpc-gateway/pull/105) ([philips](https://github.com/philips)) +- README: Suggest go get -u by default. [\#104](https://github.com/grpc-ecosystem/grpc-gateway/pull/104) ([shurcooL](https://github.com/shurcooL)) +- Cancel context when HTTP connection is closed [\#102](https://github.com/grpc-ecosystem/grpc-gateway/pull/102) ([floridoo](https://github.com/floridoo)) +- wait test server up [\#100](https://github.com/grpc-ecosystem/grpc-gateway/pull/100) ([kazegusuri](https://github.com/kazegusuri)) +- Fix the swagger section of the README.md [\#98](https://github.com/grpc-ecosystem/grpc-gateway/pull/98) ([naibaf0](https://github.com/naibaf0)) +- Add documentation for using Swagger [\#97](https://github.com/grpc-ecosystem/grpc-gateway/pull/97) ([achew22](https://github.com/achew22)) +- Better compatibility to field names generated by protoc-gen-go [\#96](https://github.com/grpc-ecosystem/grpc-gateway/pull/96) ([yugui](https://github.com/yugui)) +- Update protoc from 3.0.0-beta1 to 3.0.0-beta2 [\#95](https://github.com/grpc-ecosystem/grpc-gateway/pull/95) ([yugui](https://github.com/yugui)) +- Better grpc error strings [\#94](https://github.com/grpc-ecosystem/grpc-gateway/pull/94) ([floridoo](https://github.com/floridoo)) +- make available header and trailer metadata [\#93](https://github.com/grpc-ecosystem/grpc-gateway/pull/93) ([kazegusuri](https://github.com/kazegusuri)) +- make grpc.DialOption configurable [\#89](https://github.com/grpc-ecosystem/grpc-gateway/pull/89) ([kazegusuri](https://github.com/kazegusuri)) +- Add request in error handlers [\#88](https://github.com/grpc-ecosystem/grpc-gateway/pull/88) ([daniellowtw](https://github.com/daniellowtw)) +- Improve PascalFromSnake behavior [\#85](https://github.com/grpc-ecosystem/grpc-gateway/pull/85) ([tmc](https://github.com/tmc)) +- Typo grcp -\> grpc [\#81](https://github.com/grpc-ecosystem/grpc-gateway/pull/81) ([daniellowtw](https://github.com/daniellowtw)) +- Add abstraction of code generator implementation [\#78](https://github.com/grpc-ecosystem/grpc-gateway/pull/78) ([yugui](https://github.com/yugui)) +- Support multivalue of metadata [\#77](https://github.com/grpc-ecosystem/grpc-gateway/pull/77) ([yugui](https://github.com/yugui)) +- Fix broken test [\#76](https://github.com/grpc-ecosystem/grpc-gateway/pull/76) ([yugui](https://github.com/yugui)) +- Added missing instruction line in README [\#75](https://github.com/grpc-ecosystem/grpc-gateway/pull/75) ([betrcode](https://github.com/betrcode)) +- Fix a complie error in generated go files [\#71](https://github.com/grpc-ecosystem/grpc-gateway/pull/71) ([yugui](https://github.com/yugui)) +- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([peter-edge](https://github.com/peter-edge)) +- Bugfix/handling headers for `Authorization` and `Host` [\#65](https://github.com/grpc-ecosystem/grpc-gateway/pull/65) ([mwitkow](https://github.com/mwitkow)) +- Fix `error` field always in chunk response [\#64](https://github.com/grpc-ecosystem/grpc-gateway/pull/64) ([mwitkow](https://github.com/mwitkow)) +- Update .pb.go to latest version. [\#63](https://github.com/grpc-ecosystem/grpc-gateway/pull/63) ([johansja](https://github.com/johansja)) +- Run more tests in Travis CI [\#60](https://github.com/grpc-ecosystem/grpc-gateway/pull/60) ([yugui](https://github.com/yugui)) +- Added http error code and error status for responseStreamChunk error [\#59](https://github.com/grpc-ecosystem/grpc-gateway/pull/59) ([kdima](https://github.com/kdima)) +- Fix parsing of verb and final path component. [\#55](https://github.com/grpc-ecosystem/grpc-gateway/pull/55) ([hbchai](https://github.com/hbchai)) +- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([peter-edge](https://github.com/peter-edge)) +- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([peter-edge](https://github.com/peter-edge)) +- Fix a build error with the latest protoc-gen-go [\#50](https://github.com/grpc-ecosystem/grpc-gateway/pull/50) ([yugui](https://github.com/yugui)) +- Configure Travis CI [\#49](https://github.com/grpc-ecosystem/grpc-gateway/pull/49) ([yugui](https://github.com/yugui)) +- Follow a change of go package name convention in protoc-gen-go [\#48](https://github.com/grpc-ecosystem/grpc-gateway/pull/48) ([yugui](https://github.com/yugui)) +- Consider tail segments after deep wildcard [\#47](https://github.com/grpc-ecosystem/grpc-gateway/pull/47) ([yugui](https://github.com/yugui)) +- Fix typo in README [\#45](https://github.com/grpc-ecosystem/grpc-gateway/pull/45) ([jonboulle](https://github.com/jonboulle)) +- Fix undefined variable error in generated codes [\#42](https://github.com/grpc-ecosystem/grpc-gateway/pull/42) ([yugui](https://github.com/yugui)) +- Follow changes in protoc-gen-go and grpc-go [\#41](https://github.com/grpc-ecosystem/grpc-gateway/pull/41) ([yugui](https://github.com/yugui)) +- Fixes \#4 [\#40](https://github.com/grpc-ecosystem/grpc-gateway/pull/40) ([AmandaCameron](https://github.com/AmandaCameron)) +- fix examples to work with go1.5 [\#39](https://github.com/grpc-ecosystem/grpc-gateway/pull/39) ([tmc](https://github.com/tmc)) +- rename internal to utilties for 1.5 compatibility [\#38](https://github.com/grpc-ecosystem/grpc-gateway/pull/38) ([tmc](https://github.com/tmc)) +- Reflection fix of proto3 nested messages. [\#34](https://github.com/grpc-ecosystem/grpc-gateway/pull/34) ([mwitkow](https://github.com/mwitkow)) +- \[Experimental\] Make the response forwarder function customizable [\#31](https://github.com/grpc-ecosystem/grpc-gateway/pull/31) ([yugui](https://github.com/yugui)) +- Add f.Flush\(\) to runtime.ForwardResponseStream [\#30](https://github.com/grpc-ecosystem/grpc-gateway/pull/30) ([vvakame](https://github.com/vvakame)) +- Format error message in JSON [\#29](https://github.com/grpc-ecosystem/grpc-gateway/pull/29) ([yugui](https://github.com/yugui)) +- Update examples with HTTP header context annotation [\#28](https://github.com/grpc-ecosystem/grpc-gateway/pull/28) ([yugui](https://github.com/yugui)) +- Report semantic errors in the source to protoc [\#27](https://github.com/grpc-ecosystem/grpc-gateway/pull/27) ([yugui](https://github.com/yugui)) +- Add support for non-nullable nested messages. [\#21](https://github.com/grpc-ecosystem/grpc-gateway/pull/21) ([shurcooL](https://github.com/shurcooL)) +- Receive GRPC metadata from HTTP headers. [\#18](https://github.com/grpc-ecosystem/grpc-gateway/pull/18) ([crast](https://github.com/crast)) +- Implement detailed specs of google.api.http [\#14](https://github.com/grpc-ecosystem/grpc-gateway/pull/14) ([yugui](https://github.com/yugui)) +- Configure travis CI [\#13](https://github.com/grpc-ecosystem/grpc-gateway/pull/13) ([yugui](https://github.com/yugui)) +- Replace our own custom option with the one defined by Google [\#12](https://github.com/grpc-ecosystem/grpc-gateway/pull/12) ([yugui](https://github.com/yugui)) +- Remove useless context setup [\#11](https://github.com/grpc-ecosystem/grpc-gateway/pull/11) ([iamqizhao](https://github.com/iamqizhao)) +- Fix typo, path, missing semicolon. [\#10](https://github.com/grpc-ecosystem/grpc-gateway/pull/10) ([shurcooL](https://github.com/shurcooL)) +- Use a globally unique id for the custom option [\#3](https://github.com/grpc-ecosystem/grpc-gateway/pull/3) ([yugui](https://github.com/yugui)) +- implement ABitOfEverythingService [\#2](https://github.com/grpc-ecosystem/grpc-gateway/pull/2) ([mattn](https://github.com/mattn)) +- support streaming API calls [\#1](https://github.com/grpc-ecosystem/grpc-gateway/pull/1) ([yugui](https://github.com/yugui)) + + + +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Makefile b/Makefile index 890f7ede3fd..6f49a2a7293 100644 --- a/Makefile +++ b/Makefile @@ -168,7 +168,20 @@ examples: $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_DEPSRCS) $(EXAMPLE_SWAG test: examples go test -race $(PKG)/... go test -race $(PKG)/examples/integration -args -network=unix -endpoint=test.sock - +changelog: + docker run --rm \ + --interactive \ + --tty \ + -e "CHANGELOG_GITHUB_TOKEN=${CHANGELOG_GITHUB_TOKEN}" \ + -v "$(PWD):/usr/local/src/your-app" \ + ferrarimarco/github-changelog-generator \ + -u grpc-ecosystem \ + -p grpc-gateway \ + --author \ + --compare-link \ + --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ + --unreleased-label "**Next release**" \ + --future-release=v1.4.0 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From d4332eb2203238371751a21bdaae6ded2350c96f Mon Sep 17 00:00:00 2001 From: "Alvin.zeng" Date: Fri, 13 Apr 2018 10:26:15 +0800 Subject: [PATCH 0003/1518] generation one swagger file out of multiple protos --- .../descriptor/registry.go | 13 ++++++++++ protoc-gen-swagger/genswagger/generator.go | 25 +++++++++++++++++++ protoc-gen-swagger/main.go | 7 ++++-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 2596816e4dc..5fdec628871 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -40,6 +40,9 @@ type Registry struct { // externalHttpRules is a mapping from fully qualified service method names to additional HttpRules applicable besides the ones found in annotations. externalHTTPRules map[string][]*annotations.HttpRule + + // allowMerge generation one swagger file out of multiple protos + allowMerge bool } // NewRegistry returns a new Registry. @@ -297,6 +300,16 @@ func (r *Registry) SetAllowDeleteBody(allow bool) { r.allowDeleteBody = allow } +// SetAllowMerge controls whether generation one swagger file out of multiple protos +func (r *Registry) SetAllowMerge(allow bool) { + r.allowMerge = allow +} + +// IsAllowMerge whether generation one swagger file out of multiple protos +func (r *Registry) IsAllowMerge() bool { + return r.allowMerge +} + // sanitizePackageName replaces unallowed character in package name // with allowed character. func sanitizePackageName(pkgName string) string { diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 697e540b4ae..08237921d4e 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -13,6 +13,7 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" + swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) var ( @@ -30,6 +31,30 @@ func New(reg *descriptor.Registry) gen.Generator { func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { var files []*plugin.CodeGeneratorResponse_File + if g.reg.IsAllowMerge() { + var mergedTarget *descriptor.File + // try to find proto leader + for _, f := range targets { + if proto.HasExtension(f.Options, swagger_options.E_Openapiv2Swagger) { + mergedTarget = f + break + } + } + // merge protos to leader + for _, f := range targets { + if mergedTarget == nil { + mergedTarget = f + } else { + mergedTarget.Enums = append(mergedTarget.Enums, f.Enums...) + mergedTarget.Messages = append(mergedTarget.Messages, f.Messages...) + mergedTarget.Services = append(mergedTarget.Services, f.Services...) + } + } + + targets = nil + targets = append(targets, mergedTarget) + } + for _, file := range targets { glog.V(1).Infof("Processing %s", file.GetName()) code, err := applyTemplate(param{File: file, reg: g.reg}) diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index ad1dd8b06ae..3e481a4fd41 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -16,9 +16,11 @@ import ( var ( importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - file = flag.String("file", "-", "where to load data from") + file = flag.String("file", "-", "where to load data from") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") ) func main() { @@ -34,7 +36,7 @@ func main() { f, err = os.Open(*file) if err != nil { glog.Fatal(err) - } + } } glog.V(1).Info("Parsing code generator request") req, err := codegenerator.ParseRequest(f) @@ -52,6 +54,7 @@ func main() { reg.SetPrefix(*importPrefix) reg.SetAllowDeleteBody(*allowDeleteBody) + reg.SetAllowMerge(*allowMerge) for k, v := range pkgMap { reg.AddPkgMap(k, v) } From cb416f8dd2f6011a57d495180cdc1a5bd3e2bfc2 Mon Sep 17 00:00:00 2001 From: Chenyu Zheng Date: Sat, 5 May 2018 00:19:26 +0800 Subject: [PATCH 0004/1518] combine swagger file to one and fix CLA --- .../descriptor/registry.go | 13 ++++ protoc-gen-swagger/genswagger/generator.go | 75 +++++++++++++++---- protoc-gen-swagger/genswagger/template.go | 12 +-- .../genswagger/template_test.go | 50 ++++--------- protoc-gen-swagger/main.go | 10 ++- protoc-gen-swagger/main_test.go | 36 +++++---- 6 files changed, 124 insertions(+), 72 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 5fdec628871..b09e193c3da 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -43,6 +43,9 @@ type Registry struct { // allowMerge generation one swagger file out of multiple protos allowMerge bool + + // mergeFileName target swagger file name after merge + mergeFileName string } // NewRegistry returns a new Registry. @@ -310,6 +313,16 @@ func (r *Registry) IsAllowMerge() bool { return r.allowMerge } +// SetMergeFileName controls the target swagger file name out of multiple protos +func (r *Registry) SetMergeFileName(mergeFileName string) { + r.mergeFileName = mergeFileName +} + +// GetMergeFileName return the target merge swagger file name +func (r *Registry) GetMergeFileName() string { + return r.mergeFileName +} + // sanitizePackageName replaces unallowed character in package name // with allowed character. func sanitizePackageName(pkgName string) string { diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 08237921d4e..8eba8ac66a4 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -24,11 +24,57 @@ type generator struct { reg *descriptor.Registry } +type wrapper struct { + fileName string + swagger *swaggerObject +} + // New returns a new generator which generates grpc gateway files. func New(reg *descriptor.Registry) gen.Generator { return &generator{reg: reg} } +// Merge a lot of swagger file (wrapper) to single one swagger file +func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { + var mergedTarget *wrapper + for _, f := range targets { + if mergedTarget == nil { + mergedTarget = &wrapper{ + fileName: mergeFileName, + swagger: f.swagger, + } + } else { + for k, v := range f.swagger.Definitions { + mergedTarget.swagger.Definitions[k] = v + } + for k, v := range f.swagger.Paths { + mergedTarget.swagger.Paths[k] = v + } + for k, v := range f.swagger.SecurityDefinitions { + mergedTarget.swagger.SecurityDefinitions[k] = v + } + mergedTarget.swagger.Security = append(mergedTarget.swagger.Security, f.swagger.Security...) + } + } + return mergedTarget +} + +// convert swagger file obj to plugin.CodeGeneratorResponse_File +func encodeSwagger(file *wrapper) *plugin.CodeGeneratorResponse_File { + var formatted bytes.Buffer + enc := json.NewEncoder(&formatted) + enc.SetIndent("", " ") + enc.Encode(*file.swagger) + name := file.fileName + ext := filepath.Ext(name) + base := strings.TrimSuffix(name, ext) + output := fmt.Sprintf("%s.swagger.json", base) + return &plugin.CodeGeneratorResponse_File{ + Name: proto.String(output), + Content: proto.String(formatted.String()), + } +} + func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { var files []*plugin.CodeGeneratorResponse_File if g.reg.IsAllowMerge() { @@ -55,9 +101,10 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato targets = append(targets, mergedTarget) } + var swaggers []*wrapper for _, file := range targets { glog.V(1).Infof("Processing %s", file.GetName()) - code, err := applyTemplate(param{File: file, reg: g.reg}) + swagger, err := applyTemplate(param{File: file, reg: g.reg}) if err == errNoTargetService { glog.V(1).Infof("%s: %v", file.GetName(), err) continue @@ -65,19 +112,21 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato if err != nil { return nil, err } - - var formatted bytes.Buffer - json.Indent(&formatted, []byte(code), "", " ") - - name := file.GetName() - ext := filepath.Ext(name) - base := strings.TrimSuffix(name, ext) - output := fmt.Sprintf("%s.swagger.json", base) - files = append(files, &plugin.CodeGeneratorResponse_File{ - Name: proto.String(output), - Content: proto.String(formatted.String()), + swaggers = append(swaggers, &wrapper{ + fileName: file.GetName(), + swagger: swagger, }) - glog.V(1).Infof("Will emit %s", output) + } + + if g.reg.IsAllowMerge() { + targetSwagger := mergeTargetFile(swaggers, g.reg.GetMergeFileName()) + files = append(files, encodeSwagger(targetSwagger)) + glog.V(1).Infof("New swagger file will emit") + } else { + for _, file := range swaggers { + files = append(files, encodeSwagger(file)) + glog.V(1).Infof("New swagger file will emit") + } } return files, nil } diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index d2b73e1ad6c..c4f2b8d81aa 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1,8 +1,6 @@ package genswagger import ( - "bytes" - "encoding/json" "fmt" "os" "reflect" @@ -709,7 +707,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } // This function is called with a param which contains the entire definition of a method. -func applyTemplate(p param) (string, error) { +func applyTemplate(p param) (*swaggerObject, error) { // Create the basic template object. This is the object that everything is // defined off of. s := swaggerObject{ @@ -903,13 +901,7 @@ func applyTemplate(p param) (string, error) { // should be added here, once supported in the proto. } - // We now have rendered the entire swagger object. Write the bytes out to a - // string so it can be written to disk. - var w bytes.Buffer - enc := json.NewEncoder(&w) - enc.Encode(&s) - - return w.String(), nil + return &s, nil } // updateSwaggerDataFromComments updates a Swagger object based on a comment diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index d24f978fbeb..e01bbc34ec2 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1,7 +1,6 @@ package genswagger import ( - "encoding/json" "reflect" "testing" @@ -10,6 +9,7 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "fmt" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { @@ -253,32 +253,26 @@ func TestApplyTemplateSimple(t *testing.T) { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return } - got := new(swaggerObject) - err = json.Unmarshal([]byte(result), got) - if err != nil { - t.Errorf("json.Unmarshal(%s) failed with %v; want success", result, err) - return - } - if want, is, name := "2.0", got.Swagger, "Swagger"; !reflect.DeepEqual(is, want) { + if want, is, name := "2.0", result.Swagger, "Swagger"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := "", got.BasePath, "BasePath"; !reflect.DeepEqual(is, want) { + if want, is, name := "", result.BasePath, "BasePath"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := []string{"http", "https"}, got.Schemes, "Schemes"; !reflect.DeepEqual(is, want) { + if want, is, name := []string{"http", "https"}, result.Schemes, "Schemes"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := []string{"application/json"}, got.Consumes, "Consumes"; !reflect.DeepEqual(is, want) { + if want, is, name := []string{"application/json"}, result.Consumes, "Consumes"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := []string{"application/json"}, got.Produces, "Produces"; !reflect.DeepEqual(is, want) { + if want, is, name := []string{"application/json"}, result.Produces, "Produces"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { t.Errorf("had: %s", file) - t.Errorf("got: %s", result) + t.Errorf("got: %s", fmt.Sprint(result)) } } @@ -413,35 +407,29 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return } - var obj swaggerObject - err = json.Unmarshal([]byte(result), &obj) - if err != nil { - t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) - return - } - if want, got := "2.0", obj.Swagger; !reflect.DeepEqual(got, want) { + if want, got := "2.0", result.Swagger; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Swagger = %s want to be %s", file, got, want) } - if want, got := "", obj.BasePath; !reflect.DeepEqual(got, want) { + if want, got := "", result.BasePath; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).BasePath = %s want to be %s", file, got, want) } - if want, got := []string{"http", "https"}, obj.Schemes; !reflect.DeepEqual(got, want) { + if want, got := []string{"http", "https"}, result.Schemes; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Schemes = %s want to be %s", file, got, want) } - if want, got := []string{"application/json"}, obj.Consumes; !reflect.DeepEqual(got, want) { + if want, got := []string{"application/json"}, result.Consumes; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Consumes = %s want to be %s", file, got, want) } - if want, got := []string{"application/json"}, obj.Produces; !reflect.DeepEqual(got, want) { + if want, got := []string{"application/json"}, result.Produces; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Produces = %s want to be %s", file, got, want) } - if want, got, name := "Generated for ExampleService.Echo - ", obj.Paths["/v1/echo"].Post.Summary, "Paths[/v1/echo].Post.Summary"; !reflect.DeepEqual(got, want) { + if want, got, name := "Generated for ExampleService.Echo - ", result.Paths["/v1/echo"].Post.Summary, "Paths[/v1/echo].Post.Summary"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { t.Errorf("had: %s", file) - t.Errorf("got: %s", result) + t.Errorf("got: %s", fmt.Sprint(result)) } } @@ -685,22 +673,16 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return } - var obj swaggerObject - err = json.Unmarshal([]byte(result), &obj) - if err != nil { - t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) - return - } // Only EmptyMessage must be present, not ExampleMessage - if want, got, name := 1, len(obj.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + if want, got, name := 1, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { t.Errorf("had: %s", file) - t.Errorf("got: %s", result) + t.Errorf("got: %s", fmt.Sprint(result)) } } diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 3e481a4fd41..674af5c8b7c 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -19,8 +19,8 @@ var ( file = flag.String("file", "-", "where to load data from") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") + mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") ) func main() { @@ -55,6 +55,7 @@ func main() { reg.SetPrefix(*importPrefix) reg.SetAllowDeleteBody(*allowDeleteBody) reg.SetAllowMerge(*allowMerge) + reg.SetMergeFileName(*mergeFileName) for k, v := range pkgMap { reg.AddPkgMap(k, v) } @@ -126,6 +127,13 @@ func parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) erro } continue } + if spec[0] == "allow_merge" { + err := f.Set(spec[0], "true") + if err != nil { + return fmt.Errorf("Cannot set flag %s: %v", p, err) + } + continue + } err := f.Set(spec[0], "") if err != nil { return fmt.Errorf("Cannot set flag %s: %v", p, err) diff --git a/protoc-gen-swagger/main_test.go b/protoc-gen-swagger/main_test.go index d4b9d91daca..7bdca480979 100644 --- a/protoc-gen-swagger/main_test.go +++ b/protoc-gen-swagger/main_test.go @@ -7,7 +7,7 @@ import ( ) func TestParseReqParam(t *testing.T) { - + f := flag.CommandLine // this one must be first - with no leading clearFlags call it @@ -22,43 +22,43 @@ func TestParseReqParam(t *testing.T) { if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 0: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(false, "-", "", t, 0) + checkFlags(false, false, "-", "", "apidocs", t, 0) clearFlags() pkgMap = make(map[string]string) expected = map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"} - err = parseReqParam("allow_delete_body,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) + err = parseReqParam("allow_delete_body,allow_merge,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) if err != nil { t.Errorf("Test 1: unexpected parse error '%v'", err) } if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 1: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(true, "./foo.pb", "/bar/baz", t, 1) + checkFlags(true, true, "./foo.pb", "/bar/baz", "apidocs", t, 1) clearFlags() pkgMap = make(map[string]string) expected = map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"} - err = parseReqParam("allow_delete_body=true,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) + err = parseReqParam("allow_delete_body=true,allow_merge=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) if err != nil { t.Errorf("Test 2: unexpected parse error '%v'", err) } if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 2: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(true, "./foo.pb", "/bar/baz", t, 2) + checkFlags(true, true,"./foo.pb", "/bar/baz", "test_name", t, 2) clearFlags() pkgMap = make(map[string]string) expected = map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"} - err = parseReqParam("allow_delete_body=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", f, pkgMap) + err = parseReqParam("allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", f, pkgMap) if err != nil { t.Errorf("Test 3: unexpected parse error '%v'", err) } if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 3: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(false, "stdin", "", t, 3) + checkFlags(false, false,"stdin", "", "apidocs", t, 3) clearFlags() pkgMap = make(map[string]string) @@ -70,7 +70,7 @@ func TestParseReqParam(t *testing.T) { if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 4: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(false, "stdin", "", t, 4) + checkFlags(false, false, "stdin", "", "apidocs", t, 4) clearFlags() pkgMap = make(map[string]string) @@ -82,7 +82,7 @@ func TestParseReqParam(t *testing.T) { if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 5: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(false, "stdin", "", t, 5) + checkFlags(false, false,"stdin", "", "apidocs", t, 5) clearFlags() pkgMap = make(map[string]string) @@ -94,23 +94,23 @@ func TestParseReqParam(t *testing.T) { if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 6: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(false, "stdin", "", t, 6) + checkFlags(false, false,"stdin", "", "apidocs", t, 6) clearFlags() pkgMap = make(map[string]string) expected = map[string]string{} - err = parseReqParam("allow_delete_body,file,import_prefix", f, pkgMap) + err = parseReqParam("allow_delete_body,file,import_prefix,allow_merge,merge_file_name", f, pkgMap) if err != nil { t.Errorf("Test 7: unexpected parse error '%v'", err) } if !reflect.DeepEqual(pkgMap, expected) { t.Errorf("Test 7: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) } - checkFlags(true, "", "", t, 7) + checkFlags(true, true, "", "", "", t, 7) } -func checkFlags(allowDeleteV bool, fileV, importPathV string, t *testing.T, tid int) { +func checkFlags(allowDeleteV, allowMergeV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { if *importPrefix != importPathV { t.Errorf("Test %v: import_prefix misparsed, expected '%v', got '%v'", tid, importPathV, *importPrefix) } @@ -120,10 +120,18 @@ func checkFlags(allowDeleteV bool, fileV, importPathV string, t *testing.T, tid if *allowDeleteBody != allowDeleteV { t.Errorf("Test %v: allow_delete_body misparsed, expected '%v', got '%v'", tid, allowDeleteV, *allowDeleteBody) } + if *allowMerge != allowMergeV { + t.Errorf("Test %v: allow_merge misparsed, expected '%v', got '%v'", tid, allowMergeV, *allowMerge) + } + if *mergeFileName != mergeFileNameV { + t.Errorf("Test %v: merge_file_name misparsed, expected '%v', got '%v'", tid, mergeFileNameV, *mergeFileName) + } } func clearFlags() { *importPrefix = "" *file = "stdin" *allowDeleteBody = false + *allowMerge = false + *mergeFileName = "apidocs" } From 4ae34bd767f5b752e8aefdb46f102dd78a1e300a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20S=C5=82omka?= Date: Mon, 21 May 2018 11:52:38 +0200 Subject: [PATCH 0005/1518] Translate gRPC FailedPrecondition as HTTP PreconditionFailed --- runtime/errors.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/errors.go b/runtime/errors.go index d82dc7f8d90..0e2bdf4457d 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -1,10 +1,10 @@ package runtime import ( + "context" "io" "net/http" - "context" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/any" @@ -38,7 +38,7 @@ func HTTPStatusFromCode(code codes.Code) int { case codes.ResourceExhausted: return http.StatusTooManyRequests case codes.FailedPrecondition: - return http.StatusBadRequest + return http.StatusPreconditionFailed case codes.Aborted: return http.StatusConflict case codes.OutOfRange: From 92583770e3f01b09a0d3e9bdf64321d8bebd48f2 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Tue, 22 May 2018 20:39:44 -0600 Subject: [PATCH 0006/1518] Generate release notes for v1.4.1 --- CHANGELOG.md | 14 ++++++++++++++ Makefile | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b9affdbebb..bc7f219ea1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## [v1.4.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.1) (2018-05-23) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.0...v1.4.1) + +**Closed issues:** + +- Next release ? [\#605](https://github.com/grpc-ecosystem/grpc-gateway/issues/605) + +**Merged pull requests:** + +- Translate gRPC FailedPrecondition as HTTP PreconditionFailed [\#657](https://github.com/grpc-ecosystem/grpc-gateway/pull/657) ([slomek](https://github.com/slomek)) + ## [v1.4.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) [Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.1...v1.4.0) @@ -44,6 +55,9 @@ **Merged pull requests:** +- Generate a single swagger definition on demand [\#658](https://github.com/grpc-ecosystem/grpc-gateway/pull/658) ([achew22](https://github.com/achew22)) +- Regenerate example files [\#656](https://github.com/grpc-ecosystem/grpc-gateway/pull/656) ([achew22](https://github.com/achew22)) +- Add v1.4.0 changelog [\#655](https://github.com/grpc-ecosystem/grpc-gateway/pull/655) ([achew22](https://github.com/achew22)) - Add README.md for examples [\#645](https://github.com/grpc-ecosystem/grpc-gateway/pull/645) ([liukgg](https://github.com/liukgg)) - JSONPb marshaler panics if input is nil interface [\#639](https://github.com/grpc-ecosystem/grpc-gateway/pull/639) ([jhump](https://github.com/jhump)) - provide access to underlying \*json.Decoder from JSONPb.NewDecoder [\#637](https://github.com/grpc-ecosystem/grpc-gateway/pull/637) ([jhump](https://github.com/jhump)) diff --git a/Makefile b/Makefile index 6f49a2a7293..a690bb77a4b 100644 --- a/Makefile +++ b/Makefile @@ -181,7 +181,7 @@ changelog: --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.4.0 + --future-release=v1.4.1 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From a5b66c16bab6156b1cc525e76159bdff463123ba Mon Sep 17 00:00:00 2001 From: Alex Robinson Date: Thu, 17 May 2018 15:03:18 -0400 Subject: [PATCH 0007/1518] Replace the deprecated grpclog.Printf with grpclog.Infof grpclog.Printf is marked as deprecated, which causes code linting tools like https://github.com/dominikh/go-tools/tree/master/staticcheck to flag the go files generated by this tool: https://godoc.org/google.golang.org/grpc/grpclog#Printf --- .../examplepb/a_bit_of_everything.pb.gw.go | 8 +++--- .../proto/examplepb/echo_service.pb.gw.go | 4 +-- .../proto/examplepb/flow_combination.pb.gw.go | 26 +++++++++---------- examples/proto/examplepb/stream.pb.gw.go | 26 +++++++++---------- .../unannotated_echo_service.pb.gw.go | 4 +-- examples/proto/examplepb/wrappers.pb.gw.go | 4 +-- .../gengateway/template.go | 26 +++++++++---------- runtime/context.go | 2 +- runtime/errors.go | 12 ++++----- runtime/handler.go | 22 ++++++++-------- runtime/pattern.go | 16 ++++++------ runtime/proto_errors.go | 8 +++--- runtime/query.go | 4 +-- 13 files changed, 81 insertions(+), 81 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index f863b09ac72..7323f19a2ac 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -540,14 +540,14 @@ func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() @@ -1047,14 +1047,14 @@ func RegisterCamelCaseServiceNameHandlerFromEndpoint(ctx context.Context, mux *r defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 844ef1418ad..fef9953f7f5 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -308,14 +308,14 @@ func RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 9bc32889894..b6b77869c4e 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -58,7 +58,7 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run var metadata runtime.ServerMetadata stream, err := client.StreamEmptyRpc(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -69,22 +69,22 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run break } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) return nil, metadata, err } header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -99,7 +99,7 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler var metadata runtime.ServerMetadata stream, err := client.StreamEmptyStream(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -110,18 +110,18 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler return err } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return err } if err := stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return err } return nil } if err := handleSend(); err != nil { if cerr := stream.CloseSend(); cerr != nil { - grpclog.Printf("Failed to terminate client stream: %v", cerr) + grpclog.Infof("Failed to terminate client stream: %v", cerr) } if err == io.EOF { return stream, metadata, nil @@ -135,12 +135,12 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) } }() header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -995,14 +995,14 @@ func RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux *runtim defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 642d59a2805..0b1da5dbad6 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -34,7 +34,7 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M var metadata runtime.ServerMetadata stream, err := client.BulkCreate(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -45,22 +45,22 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M break } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) return nil, metadata, err } header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -92,7 +92,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar var metadata runtime.ServerMetadata stream, err := client.BulkEcho(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -103,18 +103,18 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar return err } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return err } if err := stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return err } return nil } if err := handleSend(); err != nil { if cerr := stream.CloseSend(); cerr != nil { - grpclog.Printf("Failed to terminate client stream: %v", cerr) + grpclog.Infof("Failed to terminate client stream: %v", cerr) } if err == io.EOF { return stream, metadata, nil @@ -128,12 +128,12 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) } }() header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -150,14 +150,14 @@ func RegisterStreamServiceHandlerFromEndpoint(ctx context.Context, mux *runtime. defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 65007db690a..2660312b309 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -149,14 +149,14 @@ func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index b42c7715e3d..769e91da074 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -51,14 +51,14 @@ func RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtim defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 435a1405100..dd830948156 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -157,7 +157,7 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont var metadata runtime.ServerMetadata stream, err := client.{{.Method.GetName}}(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -168,22 +168,22 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont break } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) return nil, metadata, err } header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -260,7 +260,7 @@ var ( var metadata runtime.ServerMetadata stream, err := client.{{.Method.GetName}}(ctx) if err != nil { - grpclog.Printf("Failed to start streaming: %v", err) + grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } dec := marshaler.NewDecoder(req.Body) @@ -271,18 +271,18 @@ var ( return err } if err != nil { - grpclog.Printf("Failed to decode request: %v", err) + grpclog.Infof("Failed to decode request: %v", err) return err } if err := stream.Send(&protoReq); err != nil { - grpclog.Printf("Failed to send request: %v", err) + grpclog.Infof("Failed to send request: %v", err) return err } return nil } if err := handleSend(); err != nil { if cerr := stream.CloseSend(); cerr != nil { - grpclog.Printf("Failed to terminate client stream: %v", cerr) + grpclog.Infof("Failed to terminate client stream: %v", cerr) } if err == io.EOF { return stream, metadata, nil @@ -296,12 +296,12 @@ var ( } } if err := stream.CloseSend(); err != nil { - grpclog.Printf("Failed to terminate client stream: %v", err) + grpclog.Infof("Failed to terminate client stream: %v", err) } }() header, err := stream.Header() if err != nil { - grpclog.Printf("Failed to get header from client: %v", err) + grpclog.Infof("Failed to get header from client: %v", err) return nil, metadata, err } metadata.HeaderMD = header @@ -322,14 +322,14 @@ func Register{{$svc.GetName}}HandlerFromEndpoint(ctx context.Context, mux *runti defer func() { if err != nil { if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } return } go func() { <-ctx.Done() if cerr := conn.Close(); cerr != nil { - grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) } }() }() diff --git a/runtime/context.go b/runtime/context.go index a745074c961..90758af099c 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -80,7 +80,7 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (con pairs = append(pairs, strings.ToLower(xForwardedFor), fmt.Sprintf("%s, %s", fwd, remoteIP)) } } else { - grpclog.Printf("invalid remote addr: %s", addr) + grpclog.Infof("invalid remote addr: %s", addr) } } diff --git a/runtime/errors.go b/runtime/errors.go index 0e2bdf4457d..5cfedbf790a 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -53,7 +53,7 @@ func HTTPStatusFromCode(code codes.Code) int { return http.StatusInternalServerError } - grpclog.Printf("Unknown gRPC error code: %v", code) + grpclog.Infof("Unknown gRPC error code: %v", code) return http.StatusInternalServerError } @@ -102,7 +102,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w if det, ok := detail.(proto.Message); ok { a, err := ptypes.MarshalAny(det) if err != nil { - grpclog.Printf("Failed to marshal any: %v", err) + grpclog.Infof("Failed to marshal any: %v", err) } else { body.Details = append(body.Details, a) } @@ -111,17 +111,17 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w buf, merr := marshaler.Marshal(body) if merr != nil { - grpclog.Printf("Failed to marshal error message %q: %v", body, merr) + grpclog.Infof("Failed to marshal error message %q: %v", body, merr) w.WriteHeader(http.StatusInternalServerError) if _, err := io.WriteString(w, fallback); err != nil { - grpclog.Printf("Failed to write response: %v", err) + grpclog.Infof("Failed to write response: %v", err) } return } md, ok := ServerMetadataFromContext(ctx) if !ok { - grpclog.Printf("Failed to extract ServerMetadata from context") + grpclog.Infof("Failed to extract ServerMetadata from context") } handleForwardResponseServerMetadata(w, mux, md) @@ -129,7 +129,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w st := HTTPStatusFromCode(s.Code()) w.WriteHeader(st) if _, err := w.Write(buf); err != nil { - grpclog.Printf("Failed to write response: %v", err) + grpclog.Infof("Failed to write response: %v", err) } handleForwardResponseTrailer(w, md) diff --git a/runtime/handler.go b/runtime/handler.go index 1b3c65035a4..9d6bbc2a473 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -19,14 +19,14 @@ import ( func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { f, ok := w.(http.Flusher) if !ok { - grpclog.Printf("Flush not supported in %T", w) + grpclog.Infof("Flush not supported in %T", w) http.Error(w, "unexpected type of web server", http.StatusInternalServerError) return } md, ok := ServerMetadataFromContext(ctx) if !ok { - grpclog.Printf("Failed to extract ServerMetadata from context") + grpclog.Infof("Failed to extract ServerMetadata from context") http.Error(w, "unexpected error", http.StatusInternalServerError) return } @@ -63,17 +63,17 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal buf, err := marshaler.Marshal(streamChunk(resp, nil)) if err != nil { - grpclog.Printf("Failed to marshal response chunk: %v", err) + grpclog.Infof("Failed to marshal response chunk: %v", err) handleForwardResponseStreamError(wroteHeader, marshaler, w, err) return } if _, err = w.Write(buf); err != nil { - grpclog.Printf("Failed to send response chunk: %v", err) + grpclog.Infof("Failed to send response chunk: %v", err) return } wroteHeader = true if _, err = w.Write(delimiter); err != nil { - grpclog.Printf("Failed to send delimiter chunk: %v", err) + grpclog.Infof("Failed to send delimiter chunk: %v", err) return } f.Flush() @@ -110,7 +110,7 @@ func handleForwardResponseTrailer(w http.ResponseWriter, md ServerMetadata) { func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { md, ok := ServerMetadataFromContext(ctx) if !ok { - grpclog.Printf("Failed to extract ServerMetadata from context") + grpclog.Infof("Failed to extract ServerMetadata from context") } handleForwardResponseServerMetadata(w, mux, md) @@ -123,13 +123,13 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha buf, err := marshaler.Marshal(resp) if err != nil { - grpclog.Printf("Marshal error: %v", err) + grpclog.Infof("Marshal error: %v", err) HTTPError(ctx, mux, marshaler, w, req, err) return } if _, err = w.Write(buf); err != nil { - grpclog.Printf("Failed to write response: %v", err) + grpclog.Infof("Failed to write response: %v", err) } handleForwardResponseTrailer(w, md) @@ -141,7 +141,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re } for _, opt := range opts { if err := opt(ctx, w, resp); err != nil { - grpclog.Printf("Error handling ForwardResponseOptions: %v", err) + grpclog.Infof("Error handling ForwardResponseOptions: %v", err) return err } } @@ -151,7 +151,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re func handleForwardResponseStreamError(wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, err error) { buf, merr := marshaler.Marshal(streamChunk(nil, err)) if merr != nil { - grpclog.Printf("Failed to marshal an error: %v", merr) + grpclog.Infof("Failed to marshal an error: %v", merr) return } if !wroteHeader { @@ -162,7 +162,7 @@ func handleForwardResponseStreamError(wroteHeader bool, marshaler Marshaler, w h w.WriteHeader(HTTPStatusFromCode(s.Code())) } if _, werr := w.Write(buf); werr != nil { - grpclog.Printf("Failed to notify error to client: %v", werr) + grpclog.Infof("Failed to notify error to client: %v", werr) return } } diff --git a/runtime/pattern.go b/runtime/pattern.go index 8a9ec2cdae4..f16a84ad389 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -44,13 +44,13 @@ type Pattern struct { // It returns an error if the given definition is invalid. func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) { if version != 1 { - grpclog.Printf("unsupported version: %d", version) + grpclog.Infof("unsupported version: %d", version) return Pattern{}, ErrInvalidPattern } l := len(ops) if l%2 != 0 { - grpclog.Printf("odd number of ops codes: %d", l) + grpclog.Infof("odd number of ops codes: %d", l) return Pattern{}, ErrInvalidPattern } @@ -73,14 +73,14 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er stack++ case utilities.OpPushM: if pushMSeen { - grpclog.Printf("pushM appears twice") + grpclog.Infof("pushM appears twice") return Pattern{}, ErrInvalidPattern } pushMSeen = true stack++ case utilities.OpLitPush: if op.operand < 0 || len(pool) <= op.operand { - grpclog.Printf("negative literal index: %d", op.operand) + grpclog.Infof("negative literal index: %d", op.operand) return Pattern{}, ErrInvalidPattern } if pushMSeen { @@ -89,7 +89,7 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er stack++ case utilities.OpConcatN: if op.operand <= 0 { - grpclog.Printf("negative concat size: %d", op.operand) + grpclog.Infof("negative concat size: %d", op.operand) return Pattern{}, ErrInvalidPattern } stack -= op.operand @@ -100,7 +100,7 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er stack++ case utilities.OpCapture: if op.operand < 0 || len(pool) <= op.operand { - grpclog.Printf("variable name index out of bound: %d", op.operand) + grpclog.Infof("variable name index out of bound: %d", op.operand) return Pattern{}, ErrInvalidPattern } v := pool[op.operand] @@ -108,11 +108,11 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er vars = append(vars, v) stack-- if stack < 0 { - grpclog.Printf("stack underflow") + grpclog.Infof("stack underflow") return Pattern{}, ErrInvalidPattern } default: - grpclog.Printf("invalid opcode: %d", op.code) + grpclog.Infof("invalid opcode: %d", op.code) return Pattern{}, ErrInvalidPattern } diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index 059928c2847..43fafca7c20 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -36,17 +36,17 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler buf, merr := marshaler.Marshal(s.Proto()) if merr != nil { - grpclog.Printf("Failed to marshal error message %q: %v", s.Proto(), merr) + grpclog.Infof("Failed to marshal error message %q: %v", s.Proto(), merr) w.WriteHeader(http.StatusInternalServerError) if _, err := io.WriteString(w, fallback); err != nil { - grpclog.Printf("Failed to write response: %v", err) + grpclog.Infof("Failed to write response: %v", err) } return } md, ok := ServerMetadataFromContext(ctx) if !ok { - grpclog.Printf("Failed to extract ServerMetadata from context") + grpclog.Infof("Failed to extract ServerMetadata from context") } handleForwardResponseServerMetadata(w, mux, md) @@ -54,7 +54,7 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler st := HTTPStatusFromCode(s.Code()) w.WriteHeader(st) if _, err := w.Write(buf); err != nil { - grpclog.Printf("Failed to write response: %v", err) + grpclog.Infof("Failed to write response: %v", err) } handleForwardResponseTrailer(w, md) diff --git a/runtime/query.go b/runtime/query.go index 07d0ff8c5bf..82c926a95f3 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -64,7 +64,7 @@ func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values [] if err != nil { return err } else if !f.IsValid() { - grpclog.Printf("field not found in %T: %s", msg, strings.Join(fieldPath, ".")) + grpclog.Infof("field not found in %T: %s", msg, strings.Join(fieldPath, ".")) return nil } @@ -108,7 +108,7 @@ func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values [] return fmt.Errorf("no value of field: %s", strings.Join(fieldPath, ".")) case 1: default: - grpclog.Printf("too many field values: %s", strings.Join(fieldPath, ".")) + grpclog.Infof("too many field values: %s", strings.Join(fieldPath, ".")) } return populateField(m, values[0], props) } From 78a473d0e7485950359c782b3c663ee6981eed0c Mon Sep 17 00:00:00 2001 From: Josh Humphries Date: Fri, 9 Mar 2018 14:27:09 -0500 Subject: [PATCH 0008/1518] option to tweak generated Register* function names --- .../examplepb/a_bit_of_everything.pb.gw.go | 8 ++--- .../proto/examplepb/echo_service.pb.gw.go | 4 +-- .../proto/examplepb/flow_combination.pb.gw.go | 4 +-- examples/proto/examplepb/stream.pb.gw.go | 4 +-- .../unannotated_echo_service.pb.gw.go | 4 +-- examples/proto/examplepb/wrappers.pb.gw.go | 4 +-- .../gengateway/generator.go | 24 ++++++++++---- .../gengateway/template.go | 33 ++++++++++--------- .../gengateway/template_test.go | 6 ++-- protoc-gen-grpc-gateway/main.go | 3 +- 10 files changed, 55 insertions(+), 39 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 7323f19a2ac..999eead1237 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -561,8 +561,8 @@ func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.Se return RegisterABitOfEverythingServiceHandlerClient(ctx, mux, NewABitOfEverythingServiceClient(conn)) } -// RegisterABitOfEverythingServiceHandler registers the http handlers for service ABitOfEverythingService to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "ABitOfEverythingServiceClient". +// RegisterABitOfEverythingServiceHandlerClient registers the http handlers for service ABitOfEverythingService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ABitOfEverythingServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ABitOfEverythingServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "ABitOfEverythingServiceClient" to call the correct interceptors. @@ -1068,8 +1068,8 @@ func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.Serve return RegisterCamelCaseServiceNameHandlerClient(ctx, mux, NewCamelCaseServiceNameClient(conn)) } -// RegisterCamelCaseServiceNameHandler registers the http handlers for service CamelCaseServiceName to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "CamelCaseServiceNameClient". +// RegisterCamelCaseServiceNameHandlerClient registers the http handlers for service CamelCaseServiceName +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CamelCaseServiceNameClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CamelCaseServiceNameClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "CamelCaseServiceNameClient" to call the correct interceptors. diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index fef9953f7f5..4e7bbf8c6ca 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -329,8 +329,8 @@ func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn return RegisterEchoServiceHandlerClient(ctx, mux, NewEchoServiceClient(conn)) } -// RegisterEchoServiceHandler registers the http handlers for service EchoService to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "EchoServiceClient". +// RegisterEchoServiceHandlerClient registers the http handlers for service EchoService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "EchoServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "EchoServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "EchoServiceClient" to call the correct interceptors. diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b6b77869c4e..3871cf618ca 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1016,8 +1016,8 @@ func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, return RegisterFlowCombinationHandlerClient(ctx, mux, NewFlowCombinationClient(conn)) } -// RegisterFlowCombinationHandler registers the http handlers for service FlowCombination to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "FlowCombinationClient". +// RegisterFlowCombinationHandlerClient registers the http handlers for service FlowCombination +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "FlowCombinationClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "FlowCombinationClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "FlowCombinationClient" to call the correct interceptors. diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 0b1da5dbad6..1577db1aa86 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -171,8 +171,8 @@ func RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, co return RegisterStreamServiceHandlerClient(ctx, mux, NewStreamServiceClient(conn)) } -// RegisterStreamServiceHandler registers the http handlers for service StreamService to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "StreamServiceClient". +// RegisterStreamServiceHandlerClient registers the http handlers for service StreamService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "StreamServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "StreamServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "StreamServiceClient" to call the correct interceptors. diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 2660312b309..cf0fc80c968 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -170,8 +170,8 @@ func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.Ser return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, NewUnannotatedEchoServiceClient(conn)) } -// RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "UnannotatedEchoServiceClient". +// RegisterUnannotatedEchoServiceHandlerClient registers the http handlers for service UnannotatedEchoService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "UnannotatedEchoServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "UnannotatedEchoServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "UnannotatedEchoServiceClient" to call the correct interceptors. diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 769e91da074..04452b5bf4c 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -72,8 +72,8 @@ func RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, return RegisterWrappersServiceHandlerClient(ctx, mux, NewWrappersServiceClient(conn)) } -// RegisterWrappersServiceHandler registers the http handlers for service WrappersService to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "WrappersServiceClient". +// RegisterWrappersServiceHandlerClient registers the http handlers for service WrappersService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WrappersServiceClient". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WrappersServiceClient" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "WrappersServiceClient" to call the correct interceptors. diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index 2bd8ee41569..bccd39e0405 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -20,13 +20,14 @@ var ( ) type generator struct { - reg *descriptor.Registry - baseImports []descriptor.GoPackage - useRequestContext bool + reg *descriptor.Registry + baseImports []descriptor.GoPackage + useRequestContext bool + registerFuncSuffix string } // New returns a new generator which generates grpc gateway files. -func New(reg *descriptor.Registry, useRequestContext bool) gen.Generator { +func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix string) gen.Generator { var imports []descriptor.GoPackage for _, pkgpath := range []string{ "io", @@ -56,7 +57,12 @@ func New(reg *descriptor.Registry, useRequestContext bool) gen.Generator { } imports = append(imports, pkg) } - return &generator{reg: reg, baseImports: imports, useRequestContext: useRequestContext} + return &generator{ + reg: reg, + baseImports: imports, + useRequestContext: useRequestContext, + registerFuncSuffix: registerFuncSuffix, + } } func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { @@ -110,5 +116,11 @@ func (g *generator) generate(file *descriptor.File) (string, error) { imports = append(imports, pkg) } } - return applyTemplate(param{File: file, Imports: imports, UseRequestContext: g.useRequestContext}) + params := param{ + File: file, + Imports: imports, + UseRequestContext: g.useRequestContext, + RegisterFuncSuffix: g.registerFuncSuffix, + } + return applyTemplate(params) } diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index dd830948156..36435750d66 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -13,8 +13,9 @@ import ( type param struct { *descriptor.File - Imports []descriptor.GoPackage - UseRequestContext bool + Imports []descriptor.GoPackage + UseRequestContext bool + RegisterFuncSuffix string } type binding struct { @@ -68,8 +69,9 @@ func (f queryParamFilter) String() string { } type trailerParams struct { - Services []*descriptor.Service - UseRequestContext bool + Services []*descriptor.Service + UseRequestContext bool + RegisterFuncSuffix string } func applyTemplate(p param) (string, error) { @@ -102,8 +104,9 @@ func applyTemplate(p param) (string, error) { } tp := trailerParams{ - Services: targetServices, - UseRequestContext: p.UseRequestContext, + Services: targetServices, + UseRequestContext: p.UseRequestContext, + RegisterFuncSuffix: p.RegisterFuncSuffix, } if err := trailerTemplate.Execute(w, tp); err != nil { return "", err @@ -312,9 +315,9 @@ var ( trailerTemplate = template.Must(template.New("trailer").Parse(` {{$UseRequestContext := .UseRequestContext}} {{range $svc := .Services}} -// Register{{$svc.GetName}}HandlerFromEndpoint is same as Register{{$svc.GetName}}Handler but +// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}FromEndpoint is same as Register{{$svc.GetName}}{{$.RegisterFuncSuffix}} but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func Register{{$svc.GetName}}HandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}FromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { conn, err := grpc.Dial(endpoint, opts...) if err != nil { return err @@ -334,21 +337,21 @@ func Register{{$svc.GetName}}HandlerFromEndpoint(ctx context.Context, mux *runti }() }() - return Register{{$svc.GetName}}Handler(ctx, mux, conn) + return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx, mux, conn) } -// Register{{$svc.GetName}}Handler registers the http handlers for service {{$svc.GetName}} to "mux". +// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}} registers the http handlers for service {{$svc.GetName}} to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func Register{{$svc.GetName}}Handler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return Register{{$svc.GetName}}HandlerClient(ctx, mux, New{{$svc.GetName}}Client(conn)) +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx, mux, New{{$svc.GetName}}Client(conn)) } -// Register{{$svc.GetName}}Handler registers the http handlers for service {{$svc.GetName}} to "mux". -// The handlers forward requests to the grpc endpoint over the given implementation of "{{$svc.GetName}}Client". +// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client registers the http handlers for service {{$svc.GetName}} +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "{{$svc.GetName}}Client". // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "{{$svc.GetName}}Client" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in // "{{$svc.GetName}}Client" to call the correct interceptors. -func Register{{$svc.GetName}}HandlerClient(ctx context.Context, mux *runtime.ServeMux, client {{$svc.GetName}}Client) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, mux *runtime.ServeMux, client {{$svc.GetName}}Client) error { {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index c5fb2f93e39..d28c943e1d3 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -77,7 +77,7 @@ func TestApplyTemplateHeader(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file)}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -222,7 +222,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file)}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -383,7 +383,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file)}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 3037d68b8e9..7ef4aa1b5b6 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -24,6 +24,7 @@ import ( var ( importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") importPath = flag.String("import_path", "", "used as the package if no input files declare go_package. If it contains slashes, everything up to the rightmost slash is ignored.") + registerFuncSuffix = flag.String("register_func_suffix", "Handler", "used to construct names of generated Register* methods.") useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") @@ -61,7 +62,7 @@ func main() { } } - g := gengateway.New(reg, *useRequestContext) + g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix) if *grpcAPIConfiguration != "" { if err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil { From 2bf5dda3f2192b082c73d329ea1f34f37bc982ce Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 31 May 2018 10:29:20 +0100 Subject: [PATCH 0009/1518] Examples: Consistently use tabs in a_bit_of_everything --- .../proto/examplepb/a_bit_of_everything.pb.go | 16 +- .../proto/examplepb/a_bit_of_everything.proto | 216 +++++++++--------- 2 files changed, 116 insertions(+), 116 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 520dae9c337..91b403c1bca 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{0} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0} } // DeepEnum is one or zero. @@ -79,7 +79,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0, 0, 0} } // Intentionaly complicated message type to cover much features of Protobuf. @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{0} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -447,7 +447,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{0, 0} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -499,7 +499,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{1} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -538,7 +538,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f27080d9602a5f10, []int{2} + return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1195,10 +1195,10 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_f27080d9602a5f10) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_06ded4cf666009ee) } -var fileDescriptor_a_bit_of_everything_f27080d9602a5f10 = []byte{ +var fileDescriptor_a_bit_of_everything_06ded4cf666009ee = []byte{ // 2019 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0xdb, 0xc8, 0x15, 0xf7, 0x48, 0xb2, 0x22, 0x3d, 0xf9, 0x43, 0x1e, 0xe7, 0xc3, 0x51, 0x9c, 0xf5, 0x44, 0xc9, diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 6eaa7d8fd9a..c7d5d597317 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -11,89 +11,89 @@ import "google/protobuf/timestamp.proto"; import "protoc-gen-swagger/options/annotations.proto"; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { - info: { - title: "A Bit of Everything"; - version: "1.0"; - contact: { - name: "gRPC-Gateway project"; - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - email: "none@example.com"; - }; - }; - // Overwriting host entry breaks tests, so this is not done here. - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "More about gRPC-Gateway"; - } - schemes: HTTP; - schemes: HTTPS; - schemes: WSS; - consumes: "application/json"; - consumes: "application/x-foo-mime"; - produces: "application/json"; - produces: "application/x-foo-mime"; - security_definitions: { - security: { - key: "BasicAuth"; - value: { - type: TYPE_BASIC; - } - } - security: { - key: "ApiKeyAuth"; - value: { - type: TYPE_API_KEY; - in: IN_HEADER; - name: "X-API-Key"; - } - } - security: { - key: "OAuth2"; - value: { - type: TYPE_OAUTH2; - flow: FLOW_ACCESS_CODE; - authorization_url: "https://example.com/oauth/authorize"; - token_url: "https://example.com/oauth/token"; - scopes: { - scope: { - key: "read"; - value: "Grants read access"; - } - scope: { - key: "write"; - value: "Grants write access"; - } - scope: { - key: "admin"; - value: "Grants read and write access to administrative information"; - } + info: { + title: "A Bit of Everything"; + version: "1.0"; + contact: { + name: "gRPC-Gateway project"; + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + email: "none@example.com"; + }; + }; + // Overwriting host entry breaks tests, so this is not done here. + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "More about gRPC-Gateway"; + } + schemes: HTTP; + schemes: HTTPS; + schemes: WSS; + consumes: "application/json"; + consumes: "application/x-foo-mime"; + produces: "application/json"; + produces: "application/x-foo-mime"; + security_definitions: { + security: { + key: "BasicAuth"; + value: { + type: TYPE_BASIC; + } + } + security: { + key: "ApiKeyAuth"; + value: { + type: TYPE_API_KEY; + in: IN_HEADER; + name: "X-API-Key"; + } + } + security: { + key: "OAuth2"; + value: { + type: TYPE_OAUTH2; + flow: FLOW_ACCESS_CODE; + authorization_url: "https://example.com/oauth/authorize"; + token_url: "https://example.com/oauth/token"; + scopes: { + scope: { + key: "read"; + value: "Grants read access"; + } + scope: { + key: "write"; + value: "Grants write access"; + } + scope: { + key: "admin"; + value: "Grants read and write access to administrative information"; + } + } + } + } + } + security: { + security_requirement: { + key: "BasicAuth"; + value: {}; + } + security_requirement: { + key: "ApiKeyAuth"; + value: {}; + } + } + security: { + security_requirement: { + key: "OAuth2"; + value: { + scope: "read"; + scope: "write"; + } + } + security_requirement: { + key: "ApiKeyAuth"; + value: {}; + } } - } - } - } - security: { - security_requirement: { - key: "BasicAuth"; - value: {}; - } - security_requirement: { - key: "ApiKeyAuth"; - value: {}; - } - } - security: { - security_requirement: { - key: "OAuth2"; - value: { - scope: "read"; - scope: "write"; - } - } - security_requirement: { - key: "ApiKeyAuth"; - value: {}; - } - } }; @@ -155,7 +155,7 @@ message ABitOfEverything { google.protobuf.Timestamp timestamp_value = 27; - // repeated enum value. it is comma-separated in query + // repeated enum value. it is comma-separated in query repeated NumericEnum repeated_enum_value = 28; } @@ -174,7 +174,7 @@ enum NumericEnum { // ZERO means 0 ZERO = 0; // ONE means 1 - ONE = 1; + ONE = 1; } // ABitOfEverything service is used to validate that APIs with complicated @@ -217,19 +217,19 @@ service ABitOfEverythingService { delete: "/v1/example/a_bit_of_everything/{uuid}" }; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - security: { - security_requirement: { - key: "ApiKeyAuth"; - value: {} - } - security_requirement: { - key: "OAuth2"; - value: { - scope: "read"; - scope: "write"; - } - } - } + security: { + security_requirement: { + key: "ApiKeyAuth"; + value: {} + } + security_requirement: { + key: "OAuth2"; + value: { + scope: "read"; + scope: "write"; + } + } + } }; } rpc GetQuery(ABitOfEverything) returns (google.protobuf.Empty) { @@ -237,11 +237,11 @@ service ABitOfEverythingService { get: "/v1/example/a_bit_of_everything/query/{uuid}" }; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - deprecated: true // For testing purposes. - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "Find out more about GetQuery"; - } + deprecated: true // For testing purposes. + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more about GetQuery"; + } }; } // Echo allows posting a StringMessage value. @@ -296,20 +296,20 @@ service ABitOfEverythingService { body: "data" }; } - rpc PostWithEmptyBody(Body) returns (google.protobuf.Empty) { - option (google.api.http) = { + rpc PostWithEmptyBody(Body) returns (google.protobuf.Empty) { + option (google.api.http) = { post: "/v2/example/postwithemptybody/{name}", body: "*" }; - } + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) service camelCaseServiceName { - rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) { - option (google.api.http) = { + rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { get: "/v2/example/empty", }; - } + } } service AnotherServiceWithNoBindings { rpc NoBindings(google.protobuf.Empty) returns (google.protobuf.Empty) {} From 9b9677c3147d604957d5057b98ffc5703addd294 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 31 May 2018 11:04:29 +0100 Subject: [PATCH 0010/1518] protoc-gen-swagger: Add ability to specify custom response objects Extends the openapiv2 protofile to allow control over response objects. Fixes #304 --- .../abe/examplepb_a_bit_of_everything.go | 1 + .../proto/examplepb/a_bit_of_everything.pb.go | 356 ++++++------- .../proto/examplepb/a_bit_of_everything.proto | 54 +- .../a_bit_of_everything.swagger.json | 258 +++++++++- examples/proto/examplepb/echo_service.pb.go | 18 +- .../proto/examplepb/flow_combination.pb.go | 16 +- .../examplepb/unannotated_echo_service.pb.go | 6 +- examples/proto/examplepb/wrappers.pb.go | 12 +- examples/proto/sub2/message.pb.go | 2 +- protoc-gen-swagger/genswagger/template.go | 225 ++++++-- .../genswagger/template_test.go | 14 +- protoc-gen-swagger/options/openapiv2.pb.go | 483 +++++++++++------- protoc-gen-swagger/options/openapiv2.proto | 32 +- runtime/internal/stream_chunk.pb.go | 10 +- 14 files changed, 1031 insertions(+), 456 deletions(-) diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index cb6fb3a487d..a64597c7f47 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -14,6 +14,7 @@ import ( "time" ) +// Intentionaly complicated message type to cover many features of Protobuf. type ExamplepbABitOfEverything struct { SingleNested ABitOfEverythingNested `json:"single_nested,omitempty"` diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 91b403c1bca..03f41a42483 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0} } // DeepEnum is one or zero. @@ -79,43 +79,43 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0, 0, 0} } -// Intentionaly complicated message type to cover much features of Protobuf. +// Intentionaly complicated message type to cover many features of Protobuf. // NEXT ID: 30 type ABitOfEverything struct { - SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested" json:"single_nested,omitempty"` - Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` - Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` - Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value" json:"fixed64_value,omitempty"` - Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value" json:"fixed32_value,omitempty"` - BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` + Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` + BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` - Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value" json:"sfixed32_value,omitempty"` - Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value" json:"sfixed64_value,omitempty"` - Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value" json:"sint32_value,omitempty"` - Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value" json:"sint64_value,omitempty"` - RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue" json:"repeated_string_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` + Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` + Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` + Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` + Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` + RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` // Types that are valid to be assigned to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` - MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=grpc.gateway.examples.examplepb.NumericEnum"` - MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue" json:"nonConventionalNameValue,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue" json:"timestamp_value,omitempty"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum"` + MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -150,10 +150,10 @@ type isABitOfEverything_OneofValue interface { } type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,oneof"` + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` } type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,oneof"` + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` } func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} @@ -435,9 +435,9 @@ func _ABitOfEverything_OneofSizer(msg proto.Message) (n int) { // Nested is nested type. type ABitOfEverything_Nested struct { // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"` - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -447,7 +447,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{0, 0} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -489,7 +489,7 @@ func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { } type Body struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -499,7 +499,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{1} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -527,8 +527,8 @@ func (m *Body) GetName() string { } type MessageWithBody struct { - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Data *Body `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Data *Body `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -538,7 +538,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_06ded4cf666009ee, []int{2} + return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1195,136 +1195,148 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_06ded4cf666009ee) -} - -var fileDescriptor_a_bit_of_everything_06ded4cf666009ee = []byte{ - // 2019 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0xdb, 0xc8, - 0x15, 0xf7, 0x48, 0xb2, 0x22, 0x3d, 0xf9, 0x43, 0x1e, 0xe7, 0xc3, 0x51, 0x9c, 0xf5, 0x44, 0xc9, - 0xb6, 0x8c, 0x37, 0x22, 0x37, 0xca, 0xa2, 0xd8, 0x08, 0x68, 0xb7, 0xb2, 0xad, 0x4d, 0x82, 0x6c, - 0x9c, 0x84, 0xd9, 0x4d, 0x83, 0x34, 0x5b, 0x83, 0x22, 0x47, 0x12, 0x13, 0x91, 0xc3, 0x92, 0x43, - 0x27, 0xaa, 0xeb, 0x16, 0xed, 0x02, 0x2d, 0xf6, 0x54, 0xc0, 0xbd, 0xef, 0xa5, 0x40, 0xd1, 0x4b, - 0x0f, 0x3d, 0xf4, 0x54, 0xa0, 0x3d, 0xf6, 0xd0, 0x63, 0x81, 0xde, 0x0b, 0xf4, 0xd4, 0x63, 0xff, - 0x82, 0x62, 0x86, 0xa4, 0x42, 0xc9, 0x16, 0x1c, 0x39, 0x8b, 0xbd, 0x24, 0x9c, 0x99, 0xdf, 0x7b, - 0xef, 0xf7, 0xde, 0xbc, 0xf7, 0xe6, 0xc9, 0x50, 0xa7, 0xaf, 0x0c, 0xc7, 0xeb, 0xd3, 0x40, 0xf3, - 0x7c, 0xc6, 0x99, 0x16, 0x2f, 0xbd, 0xb6, 0x66, 0xec, 0xb4, 0x6d, 0xbe, 0xc3, 0x3a, 0x3b, 0x74, - 0x97, 0xfa, 0x03, 0xde, 0xb3, 0xdd, 0xae, 0x2a, 0x31, 0x78, 0xad, 0xeb, 0x7b, 0xa6, 0xda, 0x35, - 0x38, 0x7d, 0x69, 0x0c, 0xd4, 0x44, 0x81, 0x3a, 0x14, 0xad, 0xac, 0x76, 0x19, 0xeb, 0xf6, 0xa9, - 0x66, 0x78, 0xb6, 0x66, 0xb8, 0x2e, 0xe3, 0x06, 0xb7, 0x99, 0x1b, 0x44, 0xe2, 0x95, 0x0b, 0xf1, - 0xa9, 0x5c, 0xb5, 0xc3, 0x8e, 0x46, 0x1d, 0x8f, 0x0f, 0xe2, 0xc3, 0x77, 0xc6, 0x0f, 0xad, 0xd0, - 0x97, 0xd2, 0xf1, 0x39, 0x19, 0xe3, 0x1b, 0x84, 0x6d, 0xcd, 0xa1, 0x41, 0x60, 0x74, 0x69, 0x8c, - 0xb8, 0x74, 0x18, 0x51, 0x1f, 0x83, 0xac, 0x8d, 0x1b, 0xe1, 0xb6, 0x43, 0x03, 0x6e, 0x38, 0x5e, - 0x0c, 0xb8, 0x26, 0xff, 0x33, 0x6b, 0x5d, 0xea, 0xd6, 0x82, 0x97, 0x46, 0xb7, 0x4b, 0x7d, 0x8d, - 0x79, 0xd2, 0x89, 0xc3, 0x0e, 0x55, 0xff, 0x5a, 0x86, 0x72, 0x73, 0xc3, 0xe6, 0xf7, 0x3b, 0xad, - 0x61, 0xa8, 0xf0, 0xe7, 0x30, 0x1f, 0xd8, 0x6e, 0xb7, 0x4f, 0x77, 0x5c, 0x1a, 0x70, 0x6a, 0xad, - 0x9c, 0x27, 0x48, 0x29, 0xd5, 0x3f, 0x54, 0x8f, 0x09, 0x9e, 0x3a, 0xae, 0x49, 0xdd, 0x96, 0xf2, - 0xfa, 0x5c, 0xa4, 0x2e, 0x5a, 0x61, 0x0c, 0xb9, 0x30, 0xb4, 0xad, 0x15, 0x44, 0x90, 0x52, 0xd4, - 0xe5, 0x37, 0x7e, 0x00, 0xf9, 0xd8, 0x56, 0x86, 0x64, 0xdf, 0xca, 0x56, 0xac, 0x07, 0xaf, 0x41, - 0xa9, 0xd3, 0x67, 0x06, 0xdf, 0xd9, 0x35, 0xfa, 0x21, 0x5d, 0xc9, 0x12, 0xa4, 0x64, 0x74, 0x90, - 0x5b, 0x8f, 0xc5, 0x0e, 0xbe, 0x04, 0x73, 0x16, 0x0b, 0xdb, 0x7d, 0x1a, 0x23, 0x72, 0x04, 0x29, - 0x48, 0x2f, 0x45, 0x7b, 0x11, 0x64, 0x0d, 0x4a, 0xb6, 0xcb, 0xbf, 0xf3, 0x41, 0x8c, 0x98, 0x25, - 0x48, 0xc9, 0xea, 0x20, 0xb7, 0x86, 0x3a, 0xc2, 0x34, 0x22, 0x4f, 0x90, 0x92, 0xd3, 0x4b, 0x61, - 0x0a, 0x12, 0xe9, 0xb8, 0x51, 0x8f, 0x11, 0xa7, 0x08, 0x52, 0x66, 0xa5, 0x8e, 0x1b, 0xf5, 0x08, - 0x70, 0x19, 0xe6, 0x3b, 0xf6, 0x2b, 0x6a, 0x0d, 0x95, 0x14, 0x08, 0x52, 0xf2, 0xfa, 0x5c, 0xbc, - 0x39, 0x0a, 0x1a, 0xea, 0x29, 0x12, 0xa4, 0x9c, 0x8a, 0x41, 0x89, 0xa6, 0x8b, 0x00, 0x6d, 0xc6, - 0xfa, 0x31, 0x02, 0x08, 0x52, 0x0a, 0x7a, 0x51, 0xec, 0x0c, 0xc9, 0x06, 0xdc, 0xb7, 0xdd, 0x6e, - 0x0c, 0x28, 0xc9, 0xf8, 0x97, 0xa2, 0xbd, 0x21, 0xd9, 0xf6, 0x80, 0xd3, 0x20, 0x46, 0x5c, 0x24, - 0x48, 0x99, 0xd3, 0x41, 0x6e, 0x8d, 0x38, 0x3c, 0xa4, 0x31, 0x4f, 0x90, 0x32, 0x1f, 0x39, 0x9c, - 0xb0, 0xb8, 0x0b, 0x40, 0xdd, 0xd0, 0x89, 0x01, 0x0b, 0x04, 0x29, 0x0b, 0xf5, 0x6b, 0xc7, 0x5e, - 0xe7, 0x76, 0xe8, 0x50, 0xdf, 0x36, 0x5b, 0x6e, 0xe8, 0xe8, 0x45, 0x21, 0x1f, 0x29, 0x7b, 0x17, - 0x16, 0x82, 0x51, 0xc7, 0x17, 0x09, 0x52, 0x16, 0xf5, 0xf9, 0x60, 0xc4, 0xf3, 0x21, 0x6c, 0x18, - 0xc4, 0x32, 0x41, 0x4a, 0x39, 0x81, 0xa5, 0xae, 0x2b, 0x48, 0xb3, 0x5f, 0x22, 0x48, 0x59, 0xd2, - 0x4b, 0x41, 0x8a, 0x7d, 0x0c, 0x19, 0xea, 0xc1, 0x04, 0x29, 0x38, 0x82, 0x24, 0x5a, 0xea, 0x70, - 0xc6, 0xa7, 0x1e, 0x35, 0x38, 0xb5, 0x76, 0x46, 0x02, 0xba, 0x4c, 0xb2, 0x4a, 0x51, 0x5f, 0x4e, - 0x0e, 0x1f, 0xa5, 0x02, 0x7b, 0x13, 0x4a, 0xcc, 0xa5, 0xa2, 0x23, 0x89, 0x86, 0xb1, 0x72, 0x5a, - 0x16, 0xd4, 0x59, 0x35, 0x2a, 0x66, 0x35, 0x29, 0x66, 0xb5, 0x25, 0x4e, 0x6f, 0xcf, 0xe8, 0x20, - 0xc1, 0x72, 0x85, 0x2f, 0xc3, 0x5c, 0x24, 0x1a, 0xd9, 0x5a, 0x39, 0x23, 0xae, 0xed, 0xf6, 0x8c, - 0x1e, 0x29, 0x8c, 0x8c, 0xe0, 0x67, 0x50, 0x74, 0x0c, 0x2f, 0xe6, 0x71, 0x56, 0x96, 0xd0, 0x47, - 0xd3, 0x97, 0xd0, 0x3d, 0xc3, 0x93, 0x74, 0x5b, 0x2e, 0xf7, 0x07, 0x7a, 0xc1, 0x89, 0x97, 0xf8, - 0x15, 0x2c, 0x3b, 0x86, 0xe7, 0x8d, 0xfb, 0x7b, 0x4e, 0xda, 0xb9, 0x7d, 0x22, 0x3b, 0xde, 0x48, - 0x7c, 0x22, 0x83, 0x4b, 0xce, 0xf8, 0x7e, 0xca, 0x72, 0x54, 0xd6, 0xb1, 0xe5, 0x95, 0xb7, 0xb3, - 0x1c, 0xb5, 0x8a, 0xc3, 0x96, 0x53, 0xfb, 0xb8, 0x01, 0x2b, 0x2e, 0x73, 0x37, 0x99, 0xbb, 0x4b, - 0x5d, 0xd1, 0x31, 0x8d, 0xfe, 0xb6, 0xe1, 0x44, 0x7d, 0x61, 0xa5, 0x22, 0x2b, 0x67, 0xe2, 0x39, - 0xde, 0x84, 0xc5, 0x61, 0x5b, 0x8e, 0x19, 0x5f, 0x90, 0x37, 0x5e, 0x39, 0x74, 0xe3, 0x9f, 0x26, - 0x38, 0x7d, 0x61, 0x28, 0x12, 0x29, 0x79, 0x06, 0xc3, 0x4c, 0xda, 0x49, 0x15, 0xd4, 0x2a, 0xc9, - 0x4e, 0x5d, 0x50, 0x4b, 0x89, 0xa2, 0x56, 0x52, 0x58, 0x95, 0x3f, 0x20, 0xc8, 0xbf, 0xee, 0xc7, - 0xae, 0xe1, 0xd0, 0xa4, 0x1f, 0x8b, 0x6f, 0x7c, 0x16, 0xf2, 0x86, 0xc3, 0x42, 0x97, 0xaf, 0x64, - 0x64, 0x85, 0xc7, 0x2b, 0xfc, 0x10, 0x32, 0xec, 0x85, 0x6c, 0xa6, 0x0b, 0xf5, 0xe6, 0x49, 0x7b, - 0xb4, 0xba, 0x45, 0xa9, 0x27, 0x89, 0x65, 0xd8, 0x8b, 0xea, 0x1a, 0x14, 0x92, 0x35, 0x2e, 0xc2, - 0xec, 0xc7, 0xcd, 0x4f, 0x1e, 0xb5, 0xca, 0x33, 0xb8, 0x00, 0xb9, 0x4f, 0xf5, 0xcf, 0x5a, 0x65, - 0x54, 0xb1, 0x61, 0x7e, 0x24, 0x31, 0x71, 0x19, 0xb2, 0x2f, 0xe8, 0x20, 0xe6, 0x2b, 0x3e, 0xf1, - 0x06, 0xcc, 0x46, 0xd1, 0xc9, 0x9c, 0xa0, 0xdd, 0x44, 0xa2, 0x8d, 0xcc, 0x87, 0xa8, 0xb2, 0x05, - 0x67, 0x8f, 0xce, 0xcd, 0x23, 0x6c, 0x9e, 0x4e, 0xdb, 0x2c, 0xa6, 0xb5, 0xfc, 0x2c, 0xd1, 0x32, - 0x9e, 0x67, 0x47, 0x68, 0xd9, 0x4e, 0x6b, 0x79, 0x9b, 0x77, 0xef, 0xb5, 0xfd, 0xc6, 0x0f, 0x0f, - 0x9a, 0x4f, 0xd6, 0x1f, 0xc3, 0x95, 0x8f, 0x6d, 0xd7, 0x22, 0x2c, 0xe4, 0xc4, 0x61, 0x3e, 0x25, - 0x46, 0x5b, 0x7c, 0x1e, 0x7a, 0xec, 0xd5, 0x1e, 0xe7, 0x5e, 0xd0, 0xd0, 0xb4, 0xae, 0xcd, 0x7b, - 0x61, 0x5b, 0x35, 0x99, 0xa3, 0x09, 0x0e, 0x35, 0x6a, 0xb2, 0x60, 0x10, 0x70, 0x1a, 0x2f, 0x63, - 0x4a, 0x1b, 0xf3, 0x49, 0x27, 0x93, 0xf6, 0xaa, 0x15, 0xc8, 0x6d, 0x30, 0x6b, 0x70, 0x54, 0x12, - 0x55, 0x9f, 0xc1, 0xe2, 0xbd, 0x68, 0x78, 0xf9, 0x81, 0xcd, 0x7b, 0x12, 0xb6, 0x00, 0x99, 0xe1, - 0xcb, 0x9f, 0xb1, 0x2d, 0x7c, 0x13, 0x72, 0x96, 0xc1, 0x8d, 0xd8, 0xfb, 0x77, 0x8f, 0xf5, 0x5e, - 0x28, 0xd1, 0xa5, 0xc8, 0x3a, 0x81, 0x52, 0xea, 0x16, 0x45, 0xbe, 0x3c, 0x6d, 0xe9, 0xf7, 0xcb, - 0x33, 0xf8, 0x14, 0x64, 0xef, 0x6f, 0xb7, 0xca, 0xa8, 0xfe, 0xa7, 0x65, 0x38, 0x37, 0xee, 0xef, - 0x23, 0xea, 0xef, 0xda, 0x26, 0xc5, 0x5f, 0x65, 0x21, 0xbf, 0xe9, 0x8b, 0xa2, 0xc0, 0xd7, 0xa7, - 0x8e, 0x79, 0x65, 0x7a, 0x91, 0xea, 0x1f, 0x33, 0xbf, 0xfc, 0xe7, 0x7f, 0x7e, 0x9b, 0xf9, 0x7d, - 0xa6, 0xfa, 0xbb, 0x8c, 0xb6, 0x7b, 0x3d, 0x99, 0x56, 0x8f, 0x9a, 0x55, 0xb5, 0xbd, 0xd4, 0xe4, - 0xb2, 0xaf, 0xed, 0xa5, 0xc7, 0x94, 0x7d, 0x6d, 0x2f, 0xf5, 0x3c, 0xed, 0x6b, 0x01, 0xf5, 0x0c, - 0xdf, 0xe0, 0xcc, 0xd7, 0xf6, 0xc2, 0x91, 0x83, 0xbd, 0xd4, 0x43, 0xb7, 0xaf, 0xed, 0x8d, 0xbc, - 0x8e, 0xc9, 0x3a, 0x75, 0xfe, 0x7a, 0x70, 0xd8, 0xd7, 0xf6, 0xd2, 0x5d, 0xfe, 0xbb, 0x01, 0xf7, - 0x3d, 0x9f, 0x76, 0xec, 0x57, 0xda, 0xfa, 0x7e, 0x64, 0x24, 0x25, 0x16, 0x8c, 0xeb, 0x09, 0xc6, - 0x0d, 0x05, 0x63, 0x02, 0xa3, 0x24, 0x27, 0xb5, 0xd0, 0x7d, 0xfc, 0x15, 0x02, 0x88, 0x2e, 0x48, - 0x26, 0xce, 0x37, 0x73, 0x49, 0xeb, 0xf2, 0x8e, 0xae, 0x54, 0xd7, 0x8e, 0xb9, 0xa1, 0x06, 0x5a, - 0xc7, 0x3f, 0x85, 0xfc, 0x27, 0x8c, 0xbd, 0x08, 0x3d, 0xbc, 0xa8, 0x8a, 0x41, 0x5d, 0xbd, 0x63, - 0xc5, 0xd9, 0x7e, 0x12, 0xcb, 0xaa, 0xb4, 0xac, 0xe0, 0x6f, 0x1d, 0x9b, 0x1b, 0x62, 0x5e, 0xde, - 0xc7, 0xbf, 0x42, 0x90, 0xff, 0xcc, 0xb3, 0x4e, 0x98, 0xbf, 0x13, 0x26, 0x8f, 0xea, 0x75, 0xc9, - 0xe2, 0xbd, 0xca, 0x1b, 0xb2, 0x10, 0x61, 0xf8, 0x0d, 0x82, 0xfc, 0x16, 0xed, 0x53, 0x4e, 0x0f, - 0xc7, 0x61, 0x92, 0x99, 0x67, 0x07, 0xcd, 0xf7, 0xda, 0x57, 0x61, 0x01, 0xa0, 0xe9, 0xd9, 0x77, - 0xe9, 0xa0, 0x19, 0xf2, 0x1e, 0x9e, 0x81, 0x73, 0x90, 0xbf, 0x2f, 0x3e, 0xeb, 0x78, 0x1e, 0x72, - 0x3e, 0x35, 0x2c, 0x98, 0x7d, 0xe9, 0xdb, 0x9c, 0x46, 0xa1, 0x59, 0x7f, 0xd3, 0xd0, 0xfc, 0x1b, - 0x41, 0xe1, 0x16, 0xe5, 0x0f, 0x43, 0xea, 0x0f, 0xbe, 0xce, 0xe0, 0x7c, 0x89, 0x0e, 0x9a, 0x7a, - 0x75, 0x1b, 0x56, 0x8f, 0xea, 0xab, 0x43, 0x83, 0x53, 0xf6, 0xd3, 0x27, 0x48, 0x7a, 0xa7, 0xe2, - 0x6b, 0xc7, 0x79, 0xf7, 0x63, 0xa1, 0x3e, 0xf1, 0xf1, 0xef, 0x19, 0xc8, 0xb5, 0xcc, 0x1e, 0xc3, - 0xca, 0x04, 0xff, 0x82, 0xb0, 0xad, 0x46, 0x8f, 0x58, 0x72, 0x19, 0x6f, 0x8c, 0xac, 0xfe, 0x17, - 0x1d, 0x34, 0xbf, 0x40, 0x30, 0x47, 0xcd, 0x1e, 0x23, 0x41, 0xd4, 0x30, 0xa1, 0x20, 0x57, 0xbe, - 0x67, 0xe2, 0xa5, 0x47, 0xa1, 0xe3, 0x18, 0xfe, 0xa0, 0x41, 0x5a, 0xf1, 0x56, 0xa5, 0xbc, 0x45, - 0x03, 0xd3, 0xb7, 0xe5, 0xcf, 0x4c, 0xb9, 0x5b, 0xdd, 0x02, 0x3c, 0x1a, 0x26, 0xc9, 0x76, 0xca, - 0xe0, 0xc8, 0xd0, 0x7c, 0x7e, 0x7c, 0x68, 0x04, 0x35, 0x6d, 0x2f, 0xea, 0x29, 0x4f, 0xcf, 0x57, - 0xcb, 0xda, 0x6e, 0x7d, 0x88, 0x17, 0x67, 0x8d, 0xe8, 0x71, 0x7c, 0x8a, 0xf1, 0xa1, 0x23, 0xfc, - 0x67, 0x04, 0x73, 0x62, 0xfe, 0x78, 0x60, 0xf0, 0x9e, 0xe4, 0xf8, 0xcd, 0x74, 0x9a, 0x8f, 0xa4, - 0x6f, 0x37, 0xab, 0x1f, 0x1c, 0x9b, 0xd4, 0x23, 0x3f, 0xc5, 0x55, 0xf1, 0xb0, 0xca, 0xba, 0x6b, - 0x02, 0x6c, 0xb3, 0x0d, 0xdb, 0xb5, 0x6c, 0xb7, 0x1b, 0xe0, 0xf3, 0x87, 0x72, 0x76, 0x2b, 0xfe, - 0xe3, 0xc3, 0xc4, 0x74, 0x9e, 0xc1, 0x8f, 0xe1, 0x94, 0x18, 0x3f, 0x59, 0xc8, 0xf1, 0x04, 0xd0, - 0x44, 0xe1, 0x0b, 0x92, 0xfe, 0x19, 0xbc, 0x9c, 0x8e, 0x27, 0x8f, 0x95, 0xf5, 0xa0, 0xdc, 0xf2, - 0x7d, 0xe6, 0x8b, 0x57, 0x7f, 0x8b, 0x72, 0xc3, 0xee, 0x07, 0x53, 0x1b, 0xb8, 0x22, 0x0d, 0xbc, - 0x83, 0x57, 0x47, 0x2e, 0x4c, 0x68, 0x7d, 0x69, 0xf3, 0x9e, 0x15, 0x6b, 0xfd, 0x35, 0x02, 0x7c, - 0x8b, 0xf2, 0xf1, 0x29, 0xe3, 0xfd, 0x63, 0xef, 0x63, 0x4c, 0x62, 0x22, 0x8d, 0x6f, 0x4b, 0x1a, - 0x97, 0xaa, 0xe7, 0xd3, 0x34, 0x04, 0x83, 0x36, 0xb3, 0x06, 0xda, 0x9e, 0xe8, 0x81, 0x72, 0x1a, - 0xc1, 0x5f, 0x20, 0x58, 0x7a, 0xc0, 0x02, 0x2e, 0x34, 0x4a, 0x51, 0x49, 0xe4, 0xcd, 0x06, 0x9a, - 0x89, 0xd6, 0x35, 0x69, 0xfd, 0x6a, 0xf5, 0x4a, 0xda, 0xba, 0xc7, 0x02, 0x2e, 0x18, 0xc8, 0x5f, - 0x92, 0x11, 0x8d, 0x24, 0x29, 0x2a, 0x7f, 0x43, 0x07, 0xcd, 0xbf, 0x20, 0xdc, 0x99, 0x30, 0xf5, - 0x10, 0x2b, 0x55, 0xa6, 0xb5, 0x1a, 0x79, 0xd9, 0xb3, 0xcd, 0x1e, 0x09, 0x7a, 0x2c, 0xec, 0x5b, - 0xc4, 0x65, 0x9c, 0xb4, 0x29, 0x09, 0x03, 0x6a, 0x11, 0xdb, 0x25, 0x5e, 0xdf, 0x30, 0x29, 0x61, - 0x1d, 0xc2, 0x7b, 0x94, 0x58, 0xcc, 0x0c, 0x1d, 0xea, 0x46, 0x7f, 0x3b, 0x22, 0x26, 0x73, 0xc4, - 0xe2, 0x52, 0xe5, 0x21, 0xac, 0x1d, 0xd5, 0x0b, 0x45, 0x19, 0x25, 0x73, 0xd6, 0x94, 0x15, 0x5f, - 0x7f, 0x0e, 0xa7, 0x4d, 0xc3, 0xa1, 0xfd, 0x4d, 0x23, 0xa0, 0xb1, 0x0e, 0x31, 0x14, 0x60, 0x1d, - 0x66, 0xa3, 0x9f, 0xc3, 0xd3, 0x26, 0xd2, 0x79, 0x19, 0xc3, 0x65, 0xbc, 0x34, 0x92, 0x48, 0xe2, - 0xa8, 0xfe, 0x23, 0x58, 0x6d, 0xba, 0x8c, 0xf7, 0xa8, 0x1f, 0x5b, 0x12, 0x97, 0x97, 0x2a, 0xaa, - 0xef, 0x8d, 0x94, 0xd8, 0xb4, 0x86, 0x67, 0x36, 0x7e, 0x31, 0x7b, 0xd0, 0xfc, 0x5f, 0x0e, 0x73, - 0x58, 0x6e, 0x92, 0x0d, 0x9b, 0x8b, 0x60, 0xa6, 0x3a, 0xc0, 0x13, 0x38, 0xdd, 0xd5, 0x1f, 0x6c, - 0xd6, 0x6e, 0x45, 0x9e, 0x13, 0xcf, 0x67, 0xcf, 0xa9, 0xc9, 0xa7, 0x8d, 0x58, 0xa5, 0xec, 0x32, - 0x97, 0x7e, 0x3f, 0xf6, 0x4c, 0xa0, 0xeb, 0xd9, 0xeb, 0xea, 0xfb, 0xeb, 0x59, 0x94, 0xc9, 0xd5, - 0xcb, 0x86, 0xe7, 0xf5, 0x6d, 0x53, 0x5e, 0x9b, 0xf6, 0x3c, 0x60, 0x6e, 0xfd, 0x6c, 0x7a, 0xe7, - 0x55, 0xad, 0xc3, 0x58, 0xcd, 0xb1, 0x1d, 0xda, 0x38, 0x84, 0x6c, 0x4c, 0x40, 0x3e, 0xfd, 0x32, - 0x03, 0x8b, 0x50, 0xdc, 0x30, 0x02, 0xdb, 0x94, 0xef, 0x76, 0xa6, 0x80, 0xe0, 0xe2, 0xc8, 0x4b, - 0xbe, 0x58, 0xc8, 0x54, 0x8a, 0x4f, 0x6a, 0xcd, 0x07, 0x77, 0x6a, 0x77, 0xe9, 0x80, 0x64, 0xe0, - 0x5f, 0x68, 0xf8, 0xb2, 0xff, 0x03, 0x15, 0xb2, 0x4a, 0xae, 0x7e, 0x39, 0x71, 0x32, 0xc5, 0x5b, - 0x63, 0x46, 0xc8, 0x7b, 0x9a, 0xf8, 0x87, 0xf9, 0xf6, 0x4f, 0x68, 0x63, 0x6d, 0x32, 0x88, 0xb3, - 0x17, 0xd4, 0xdd, 0xf8, 0x39, 0x54, 0xa2, 0x41, 0x01, 0xe3, 0x5b, 0xbe, 0xe1, 0xf2, 0x80, 0x88, - 0x05, 0x31, 0x4c, 0x93, 0x06, 0x01, 0xac, 0xc6, 0xe3, 0x03, 0x5e, 0x8e, 0x0f, 0xe5, 0x2a, 0x39, - 0xdd, 0x84, 0x59, 0xc3, 0x72, 0x6c, 0x17, 0x37, 0x46, 0x44, 0x5d, 0x6b, 0x04, 0x46, 0x38, 0x23, - 0x12, 0x66, 0x07, 0x5c, 0xf4, 0xd3, 0x5d, 0x4a, 0x6c, 0xb7, 0xc3, 0x7c, 0x47, 0x86, 0xa5, 0xbd, - 0x06, 0xf3, 0xe9, 0x50, 0xcc, 0x8c, 0x8f, 0x34, 0xed, 0xab, 0x13, 0x87, 0x9a, 0x71, 0xa8, 0x7f, - 0x07, 0xce, 0xdd, 0x7b, 0x5d, 0x43, 0xe9, 0xd4, 0x98, 0x36, 0x25, 0x9e, 0x16, 0x87, 0xfd, 0xa5, - 0x9d, 0x97, 0x59, 0x79, 0xe3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x60, 0xd8, 0x68, 0xe8, 0x2d, - 0x17, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_30755264634f37fa) +} + +var fileDescriptor_a_bit_of_everything_30755264634f37fa = []byte{ + // 2221 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x1b, 0x49, + 0xd9, 0xf7, 0x48, 0xb6, 0x62, 0x3f, 0xfe, 0x92, 0xdb, 0xd9, 0xc4, 0xd1, 0x3a, 0xeb, 0x8e, 0x92, + 0x7d, 0x57, 0xf1, 0xc6, 0x33, 0x89, 0xe2, 0x77, 0x2b, 0x31, 0x05, 0x41, 0xb6, 0xb5, 0x89, 0x37, + 0x1b, 0xc7, 0x99, 0xec, 0x86, 0x54, 0x2a, 0x8b, 0x69, 0xcd, 0xb4, 0xa4, 0x49, 0x34, 0xd3, 0xc3, + 0x74, 0x8f, 0x6d, 0x61, 0x0c, 0x05, 0x54, 0x41, 0xed, 0x89, 0x2a, 0x73, 0xe3, 0xb0, 0x07, 0xa8, + 0xa2, 0xb8, 0x50, 0x9c, 0xb8, 0x40, 0x15, 0x9c, 0x38, 0xed, 0x91, 0x2a, 0x0e, 0xdc, 0xa8, 0xe2, + 0xc0, 0x9f, 0x41, 0x75, 0xcf, 0x8c, 0x3c, 0x92, 0x2d, 0x1c, 0x25, 0xd4, 0x5e, 0xec, 0xe9, 0xee, + 0xdf, 0xf3, 0xfd, 0xd1, 0x4f, 0x0b, 0xca, 0x74, 0x8f, 0xb8, 0x7e, 0x8b, 0x72, 0xc3, 0x0f, 0x98, + 0x60, 0x46, 0xbc, 0xf4, 0x6b, 0x06, 0xd9, 0xae, 0x39, 0x62, 0x9b, 0xd5, 0xb7, 0xe9, 0x0e, 0x0d, + 0xda, 0xa2, 0xe9, 0x78, 0x0d, 0x5d, 0x61, 0xd0, 0x42, 0x23, 0xf0, 0x2d, 0xbd, 0x41, 0x04, 0xdd, + 0x25, 0x6d, 0x3d, 0x61, 0xa0, 0x77, 0x48, 0x0b, 0xf3, 0x0d, 0xc6, 0x1a, 0x2d, 0x6a, 0x10, 0xdf, + 0x31, 0x88, 0xe7, 0x31, 0x41, 0x84, 0xc3, 0x3c, 0x1e, 0x91, 0x17, 0xde, 0x8e, 0x4f, 0xd5, 0xaa, + 0x16, 0xd6, 0x0d, 0xea, 0xfa, 0xa2, 0x1d, 0x1f, 0xbe, 0xd3, 0x7b, 0x68, 0x87, 0x81, 0xa2, 0x8e, + 0xcf, 0x71, 0x8f, 0xbe, 0x3c, 0xac, 0x19, 0x2e, 0xe5, 0x9c, 0x34, 0x68, 0x8c, 0xb8, 0x74, 0x1c, + 0x51, 0xee, 0x81, 0x2c, 0xf4, 0x0a, 0x11, 0x8e, 0x4b, 0xb9, 0x20, 0xae, 0x1f, 0x03, 0xae, 0xa9, + 0x7f, 0xd6, 0x52, 0x83, 0x7a, 0x4b, 0x7c, 0x97, 0x34, 0x1a, 0x34, 0x30, 0x98, 0xaf, 0x8c, 0x38, + 0x6e, 0x50, 0xf1, 0x57, 0x33, 0x90, 0xaf, 0xac, 0x3a, 0xe2, 0x61, 0xbd, 0xda, 0x71, 0x15, 0xfa, + 0x0c, 0x26, 0xb9, 0xe3, 0x35, 0x5a, 0x74, 0xdb, 0xa3, 0x5c, 0x50, 0x7b, 0xee, 0x02, 0xd6, 0x4a, + 0xe3, 0xe5, 0x5b, 0xfa, 0x29, 0xce, 0xd3, 0x7b, 0x39, 0xe9, 0x9b, 0x8a, 0xde, 0x9c, 0x88, 0xd8, + 0x45, 0x2b, 0x84, 0x60, 0x38, 0x0c, 0x1d, 0x7b, 0x4e, 0xc3, 0x5a, 0x69, 0xcc, 0x54, 0xdf, 0x68, + 0x0b, 0x72, 0xb1, 0xac, 0x0c, 0xce, 0xbe, 0x91, 0xac, 0x98, 0x0f, 0x5a, 0x80, 0xf1, 0x7a, 0x8b, + 0x11, 0xb1, 0xbd, 0x43, 0x5a, 0x21, 0x9d, 0xcb, 0x62, 0xad, 0x94, 0x31, 0x41, 0x6d, 0x3d, 0x91, + 0x3b, 0xe8, 0x12, 0x4c, 0xd8, 0x2c, 0xac, 0xb5, 0x68, 0x8c, 0x18, 0xc6, 0x5a, 0x49, 0x33, 0xc7, + 0xa3, 0xbd, 0x08, 0xb2, 0x00, 0xe3, 0x8e, 0x27, 0x3e, 0x58, 0x8e, 0x11, 0x23, 0x58, 0x2b, 0x65, + 0x4d, 0x50, 0x5b, 0x1d, 0x1e, 0x61, 0x1a, 0x91, 0xc3, 0x5a, 0x69, 0xd8, 0x1c, 0x0f, 0x53, 0x90, + 0x88, 0xc7, 0xcd, 0x72, 0x8c, 0x38, 0x83, 0xb5, 0xd2, 0x88, 0xe2, 0x71, 0xb3, 0x1c, 0x01, 0x2e, + 0xc3, 0x64, 0xdd, 0xd9, 0xa3, 0x76, 0x87, 0xc9, 0x28, 0xd6, 0x4a, 0x39, 0x73, 0x22, 0xde, 0xec, + 0x06, 0x75, 0xf8, 0x8c, 0x61, 0xad, 0x74, 0x26, 0x06, 0x25, 0x9c, 0x2e, 0x02, 0xd4, 0x18, 0x6b, + 0xc5, 0x08, 0xc0, 0x5a, 0x69, 0xd4, 0x1c, 0x93, 0x3b, 0x1d, 0x65, 0xb9, 0x08, 0x1c, 0xaf, 0x11, + 0x03, 0xc6, 0x95, 0xff, 0xc7, 0xa3, 0xbd, 0x8e, 0xb2, 0xb5, 0xb6, 0xa0, 0x3c, 0x46, 0x5c, 0xc4, + 0x5a, 0x69, 0xc2, 0x04, 0xb5, 0xd5, 0x65, 0x70, 0x47, 0x8d, 0x49, 0xac, 0x95, 0x26, 0x23, 0x83, + 0x13, 0x2d, 0xee, 0x03, 0x50, 0x2f, 0x74, 0x63, 0xc0, 0x14, 0xd6, 0x4a, 0x53, 0xe5, 0x6b, 0xa7, + 0x86, 0x73, 0x33, 0x74, 0x69, 0xe0, 0x58, 0x55, 0x2f, 0x74, 0xcd, 0x31, 0x49, 0x1f, 0x31, 0x7b, + 0x17, 0xa6, 0x78, 0xb7, 0xe1, 0xd3, 0x58, 0x2b, 0x4d, 0x9b, 0x93, 0xbc, 0xcb, 0xf2, 0x0e, 0xac, + 0xe3, 0xc4, 0x3c, 0xd6, 0x4a, 0xf9, 0x04, 0x96, 0x0a, 0x17, 0x4f, 0x6b, 0x3f, 0x83, 0xb5, 0xd2, + 0x8c, 0x39, 0xce, 0x53, 0xda, 0xc7, 0x90, 0x0e, 0x1f, 0x84, 0xb5, 0x12, 0x8a, 0x20, 0x09, 0x97, + 0x32, 0xbc, 0x15, 0x50, 0x9f, 0x12, 0x41, 0xed, 0xed, 0x2e, 0x87, 0xce, 0xe2, 0x6c, 0x69, 0xcc, + 0x9c, 0x4d, 0x0e, 0x1f, 0xa7, 0x1c, 0x7b, 0x1b, 0xc6, 0x99, 0x47, 0x65, 0x47, 0x92, 0x0d, 0x63, + 0xee, 0xac, 0x2a, 0xa8, 0x73, 0x7a, 0x54, 0xcc, 0x7a, 0x52, 0xcc, 0x7a, 0x55, 0x9e, 0xde, 0x1b, + 0x32, 0x41, 0x81, 0xd5, 0x0a, 0x5d, 0x86, 0x89, 0x88, 0x34, 0x92, 0x35, 0xf7, 0x96, 0x0c, 0xdb, + 0xbd, 0x21, 0x33, 0x62, 0x18, 0x09, 0x41, 0xcf, 0x61, 0xcc, 0x25, 0x7e, 0xac, 0xc7, 0x39, 0x55, + 0x42, 0x77, 0x06, 0x2f, 0xa1, 0x07, 0xc4, 0x57, 0xea, 0x56, 0x3d, 0x11, 0xb4, 0xcd, 0x51, 0x37, + 0x5e, 0xa2, 0x3d, 0x98, 0x75, 0x89, 0xef, 0xf7, 0xda, 0x7b, 0x5e, 0xc9, 0xb9, 0xf7, 0x5a, 0x72, + 0xfc, 0x2e, 0xff, 0x44, 0x02, 0x67, 0xdc, 0xde, 0xfd, 0x94, 0xe4, 0xa8, 0xac, 0x63, 0xc9, 0x73, + 0x6f, 0x26, 0x39, 0x6a, 0x15, 0xc7, 0x25, 0xa7, 0xf6, 0xd1, 0x0a, 0xcc, 0x79, 0xcc, 0x5b, 0x63, + 0xde, 0x0e, 0xf5, 0x64, 0xc7, 0x24, 0xad, 0x4d, 0xe2, 0x46, 0x7d, 0x61, 0xae, 0xa0, 0x2a, 0xa7, + 0xef, 0x39, 0x5a, 0x83, 0xe9, 0x4e, 0x5b, 0x8e, 0x35, 0x7e, 0x5b, 0x45, 0xbc, 0x70, 0x2c, 0xe2, + 0x9f, 0x24, 0x38, 0x73, 0xaa, 0x43, 0x12, 0x31, 0x79, 0x0e, 0x9d, 0x4c, 0xda, 0x4e, 0x15, 0xd4, + 0x3c, 0xce, 0x0e, 0x5c, 0x50, 0x33, 0x09, 0xa3, 0x6a, 0x52, 0x58, 0x85, 0xdf, 0x6a, 0x90, 0x3b, + 0xea, 0xc7, 0x1e, 0x71, 0x69, 0xd2, 0x8f, 0xe5, 0x37, 0x3a, 0x07, 0x39, 0xe2, 0xb2, 0xd0, 0x13, + 0x73, 0x19, 0x55, 0xe1, 0xf1, 0x0a, 0x3d, 0x82, 0x0c, 0x7b, 0xa9, 0x9a, 0xe9, 0x54, 0xb9, 0xf2, + 0xba, 0x3d, 0x5a, 0x5f, 0xa7, 0xd4, 0x57, 0x8a, 0x65, 0xd8, 0xcb, 0xe2, 0x02, 0x8c, 0x26, 0x6b, + 0x34, 0x06, 0x23, 0x1f, 0x56, 0x3e, 0x7e, 0x5c, 0xcd, 0x0f, 0xa1, 0x51, 0x18, 0xfe, 0xc4, 0xfc, + 0xb4, 0x9a, 0xd7, 0x0a, 0x0e, 0x4c, 0x76, 0x25, 0x26, 0xca, 0x43, 0xf6, 0x25, 0x6d, 0xc7, 0xfa, + 0xca, 0x4f, 0xb4, 0x0a, 0x23, 0x91, 0x77, 0x32, 0xaf, 0xd1, 0x6e, 0x22, 0xd2, 0x95, 0xcc, 0x2d, + 0xad, 0xb0, 0x0e, 0xe7, 0x4e, 0xce, 0xcd, 0x13, 0x64, 0x9e, 0x4d, 0xcb, 0x1c, 0x4b, 0x73, 0xf9, + 0x41, 0xc2, 0xa5, 0x37, 0xcf, 0x4e, 0xe0, 0xb2, 0x99, 0xe6, 0xf2, 0x26, 0xf7, 0xde, 0x91, 0xfc, + 0x95, 0x3f, 0x6b, 0x87, 0x95, 0x3f, 0x6a, 0xf0, 0x9d, 0xc5, 0xd9, 0x0a, 0xae, 0x39, 0x02, 0xb3, + 0x3a, 0x3e, 0x1a, 0x84, 0xca, 0x1b, 0x1b, 0x9e, 0x48, 0x52, 0xb6, 0x8d, 0x2d, 0xe6, 0xfa, 0x2d, + 0xc7, 0x92, 0xc9, 0x81, 0xe3, 0x49, 0x03, 0x8b, 0xb6, 0x4f, 0xb1, 0x60, 0xd8, 0x62, 0x3b, 0x34, + 0xc0, 0x2e, 0xf1, 0xda, 0xb8, 0x4e, 0x89, 0x08, 0x03, 0xca, 0x25, 0xaf, 0xad, 0x24, 0x77, 0x17, + 0x9f, 0xc0, 0x95, 0x0f, 0x1d, 0xcf, 0xc6, 0x2c, 0x14, 0xd8, 0x65, 0x01, 0xc5, 0xa4, 0x26, 0x3f, + 0x8f, 0x0d, 0x14, 0x7a, 0x53, 0x08, 0x9f, 0xaf, 0x18, 0x46, 0xc3, 0x11, 0xcd, 0xb0, 0xa6, 0x5b, + 0xcc, 0x35, 0xa4, 0x9d, 0x4b, 0xd4, 0x62, 0xbc, 0xcd, 0x05, 0x8d, 0x97, 0xb1, 0xd9, 0xab, 0x93, + 0x49, 0xb7, 0x54, 0x36, 0x15, 0x0b, 0x30, 0xbc, 0xca, 0xec, 0xf6, 0x49, 0x89, 0x5a, 0x7c, 0x0e, + 0xd3, 0x0f, 0x22, 0xb5, 0xbf, 0xe5, 0x88, 0xa6, 0x82, 0x4d, 0x41, 0xa6, 0x33, 0x5d, 0x64, 0x1c, + 0x1b, 0xdd, 0x86, 0x61, 0x9b, 0x08, 0x12, 0x7b, 0xf8, 0xdd, 0x53, 0x3d, 0x2c, 0x99, 0x98, 0x8a, + 0x64, 0x11, 0xc3, 0x78, 0x2a, 0x53, 0x64, 0x4e, 0x3e, 0xab, 0x9a, 0x0f, 0xf3, 0x43, 0xe8, 0x0c, + 0x64, 0x1f, 0x6e, 0x56, 0xf3, 0x5a, 0xf9, 0xf7, 0x67, 0xe1, 0x7c, 0xaf, 0xbd, 0x8f, 0x69, 0xb0, + 0xe3, 0x58, 0x14, 0x7d, 0x91, 0x85, 0xdc, 0x5a, 0x20, 0x0b, 0x0f, 0xdd, 0x18, 0x38, 0xae, 0x85, + 0xc1, 0x49, 0x8a, 0xbf, 0xcb, 0xfc, 0xf8, 0x6f, 0xff, 0xfa, 0x45, 0xe6, 0x37, 0x99, 0xe2, 0xaf, + 0x33, 0xc6, 0xce, 0x8d, 0x64, 0x22, 0x3e, 0x69, 0x1e, 0x36, 0xf6, 0x53, 0xd3, 0xd1, 0x81, 0xb1, + 0x9f, 0x1e, 0x85, 0x0e, 0x8c, 0xfd, 0xd4, 0x15, 0x78, 0x60, 0x70, 0xea, 0x93, 0x80, 0x08, 0x16, + 0x18, 0xfb, 0x61, 0xd7, 0xc1, 0x7e, 0xea, 0x32, 0x3d, 0x30, 0xf6, 0xbb, 0x6e, 0xe0, 0x64, 0x9d, + 0x3a, 0x3f, 0x1a, 0x4e, 0x0e, 0x8c, 0xfd, 0xf4, 0x4d, 0xf2, 0x75, 0x2e, 0x02, 0x3f, 0xa0, 0x75, + 0x67, 0xcf, 0x58, 0x3c, 0x88, 0x84, 0xa4, 0xc8, 0x78, 0x2f, 0x1f, 0xde, 0x2b, 0x88, 0xf7, 0x10, + 0x74, 0x2b, 0xd9, 0xaf, 0x4d, 0x1f, 0xa0, 0x2f, 0x34, 0x80, 0x28, 0x40, 0x2a, 0x71, 0xbe, 0x9a, + 0x20, 0x2d, 0xaa, 0x18, 0x5d, 0x29, 0x2e, 0x9c, 0x12, 0xa1, 0x15, 0x6d, 0x11, 0x7d, 0x1f, 0x72, + 0x1f, 0x33, 0xf6, 0x32, 0xf4, 0xd1, 0xb4, 0x2e, 0x1f, 0x03, 0xfa, 0x86, 0x1d, 0x67, 0xfb, 0xeb, + 0x48, 0xd6, 0x95, 0xe4, 0x12, 0xfa, 0xbf, 0x53, 0x73, 0x43, 0xce, 0xe4, 0x07, 0xe8, 0xa7, 0x1a, + 0xe4, 0x3e, 0xf5, 0xed, 0xd7, 0xcc, 0xdf, 0x3e, 0xd3, 0x4d, 0xf1, 0x86, 0xd2, 0xe2, 0xfd, 0xc2, + 0x2b, 0x6a, 0x21, 0xdd, 0xf0, 0x73, 0x0d, 0x72, 0xeb, 0xb4, 0x45, 0x05, 0x3d, 0xee, 0x87, 0x7e, + 0x62, 0x9e, 0x1f, 0x56, 0xde, 0xaf, 0x5d, 0x85, 0x29, 0x80, 0x8a, 0xef, 0xdc, 0xa7, 0xed, 0x4a, + 0x28, 0x9a, 0x68, 0x08, 0xce, 0x43, 0xee, 0xa1, 0xfc, 0x2c, 0xa3, 0x49, 0x18, 0x0e, 0x28, 0xb1, + 0x61, 0x64, 0x37, 0x70, 0x04, 0x8d, 0x5c, 0xb3, 0xf8, 0xaa, 0xae, 0xf9, 0xa7, 0x06, 0xa3, 0x77, + 0xa9, 0x78, 0x14, 0xd2, 0xa0, 0xfd, 0xbf, 0x74, 0xce, 0xe7, 0xda, 0x61, 0xc5, 0x2c, 0x6e, 0xc2, + 0xfc, 0x49, 0x7d, 0xb5, 0x23, 0x70, 0xc0, 0x7e, 0xfa, 0x54, 0x53, 0xd6, 0xe9, 0xe8, 0xda, 0x69, + 0xd6, 0x7d, 0x57, 0xb2, 0x4f, 0x6c, 0xfc, 0x6b, 0x16, 0x86, 0xab, 0x56, 0x93, 0xa1, 0x52, 0x1f, + 0xfb, 0x78, 0x58, 0xd3, 0xa3, 0x8b, 0x32, 0x09, 0xc6, 0x2b, 0x23, 0x8b, 0xff, 0xce, 0x1c, 0x56, + 0x7e, 0x94, 0x81, 0x09, 0x6a, 0x35, 0x19, 0xe6, 0x51, 0xc3, 0x84, 0x51, 0xb5, 0x0a, 0x7c, 0x0b, + 0xcd, 0x3c, 0x0e, 0x5d, 0x97, 0x04, 0xed, 0x15, 0x5c, 0x8d, 0xb7, 0x0a, 0xf9, 0x75, 0xca, 0xad, + 0xc0, 0x51, 0x4f, 0x59, 0xb5, 0x5b, 0x5c, 0x07, 0xd4, 0xed, 0x26, 0xa5, 0xed, 0x80, 0xce, 0xf9, + 0xe8, 0x0e, 0x64, 0xff, 0xff, 0xfa, 0x4d, 0x74, 0x0b, 0x3e, 0x30, 0xa9, 0x08, 0x03, 0x8f, 0xda, + 0x78, 0xb7, 0x49, 0x3d, 0x2c, 0x9a, 0x14, 0x07, 0x94, 0xb3, 0x30, 0xb0, 0x28, 0x76, 0x38, 0x16, + 0xd4, 0xf5, 0x59, 0x40, 0x02, 0xa7, 0xd5, 0xc6, 0xa1, 0x47, 0x76, 0x88, 0xd3, 0x22, 0xb5, 0x16, + 0xd5, 0x3f, 0xfa, 0x1a, 0x64, 0x97, 0xaf, 0x2f, 0xa3, 0x65, 0x58, 0xfc, 0x2f, 0x0c, 0x6c, 0x46, + 0x39, 0xf6, 0x98, 0xc0, 0x74, 0xcf, 0xe1, 0x42, 0x47, 0x39, 0x18, 0xfe, 0x65, 0x46, 0xcb, 0xaa, + 0xc0, 0x7c, 0x76, 0x7a, 0x60, 0xa4, 0x63, 0x8c, 0xfd, 0xa8, 0xa3, 0x3d, 0xbb, 0x50, 0xcc, 0x1b, + 0x3b, 0xe5, 0x0e, 0x5e, 0x9e, 0xad, 0x44, 0xd7, 0xff, 0x33, 0x84, 0x8e, 0x1d, 0xa1, 0x3f, 0x68, + 0x30, 0x21, 0x27, 0xac, 0x2d, 0x22, 0x9a, 0xca, 0x43, 0x5f, 0x4d, 0x9f, 0xbb, 0xa3, 0x6c, 0xbb, + 0x5d, 0x5c, 0x3e, 0xb5, 0xa4, 0xba, 0x7e, 0x6c, 0xd0, 0xe5, 0xb5, 0xae, 0xaa, 0xbe, 0x02, 0xb0, + 0xc9, 0x56, 0x1d, 0xcf, 0x76, 0xbc, 0x06, 0x47, 0x17, 0x8e, 0x55, 0xcc, 0x7a, 0xfc, 0xf3, 0x4a, + 0xdf, 0x62, 0x1a, 0x42, 0x4f, 0xe0, 0x8c, 0x1c, 0xb0, 0x59, 0x28, 0x50, 0x1f, 0x50, 0x5f, 0xe2, + 0xb7, 0x95, 0xfa, 0x6f, 0xa1, 0xd9, 0xb4, 0x3f, 0x45, 0xcc, 0xac, 0x09, 0xf9, 0x6a, 0x10, 0xb0, + 0x40, 0xce, 0x1c, 0xeb, 0x54, 0x10, 0xa7, 0xc5, 0x07, 0x16, 0x70, 0x45, 0x09, 0x78, 0x07, 0xcd, + 0x77, 0x05, 0x4c, 0x72, 0xdd, 0x75, 0x44, 0xd3, 0x8e, 0xb9, 0xfe, 0x4c, 0x03, 0x74, 0x97, 0x8a, + 0xde, 0x19, 0xe7, 0xfa, 0xa9, 0xf1, 0xe8, 0xa1, 0xe8, 0xab, 0xc6, 0x7b, 0x4a, 0x8d, 0x4b, 0xc5, + 0x0b, 0x69, 0x35, 0xa4, 0x06, 0x35, 0x66, 0xb7, 0x8d, 0x7d, 0xd9, 0x81, 0xd5, 0x2c, 0x84, 0x7e, + 0xa2, 0xc1, 0xcc, 0x16, 0xe3, 0x42, 0x72, 0x54, 0xa4, 0x4a, 0x91, 0x57, 0x1b, 0xa7, 0xfa, 0x4a, + 0x37, 0x94, 0xf4, 0xab, 0xc5, 0x2b, 0x69, 0xe9, 0x3e, 0xe3, 0x42, 0x6a, 0xa0, 0xde, 0xca, 0x91, + 0x1a, 0x49, 0x52, 0x14, 0xfe, 0xa2, 0x1d, 0x56, 0xfe, 0xa4, 0xa1, 0x7a, 0x9f, 0x99, 0x0b, 0xdb, + 0xa9, 0x26, 0xb1, 0xb4, 0x84, 0x77, 0x9b, 0x8e, 0xd5, 0xc4, 0xbc, 0xc9, 0xc2, 0x96, 0xad, 0xca, + 0xaf, 0x46, 0x71, 0xc8, 0xa9, 0x8d, 0x1d, 0x0f, 0xfb, 0x2d, 0x62, 0x51, 0x39, 0xd0, 0xca, 0x42, + 0xb5, 0x99, 0x15, 0xba, 0xd4, 0x8b, 0x7e, 0x1d, 0x93, 0x53, 0xb1, 0x5c, 0x5c, 0x2a, 0x3c, 0x82, + 0x85, 0x93, 0x3a, 0xb1, 0x2c, 0xa3, 0x64, 0xca, 0x1b, 0xb0, 0xdf, 0x94, 0x5f, 0xc0, 0x59, 0x8b, + 0xb8, 0xb4, 0xb5, 0x46, 0x38, 0x8d, 0x79, 0xc8, 0x91, 0x04, 0x99, 0x30, 0x12, 0x3d, 0xf8, 0x07, + 0x4d, 0xa4, 0x0b, 0xca, 0x87, 0xb3, 0x68, 0xa6, 0x2b, 0x91, 0xe4, 0x51, 0xf9, 0xdb, 0x30, 0x5f, + 0xf1, 0x98, 0x68, 0xd2, 0x20, 0x96, 0x24, 0x83, 0x97, 0x2a, 0xaa, 0x6f, 0x74, 0x95, 0xd8, 0xa0, + 0x82, 0x87, 0x56, 0xff, 0x91, 0x3b, 0xac, 0x7c, 0x99, 0x43, 0x02, 0x66, 0x2b, 0x78, 0x35, 0x7a, + 0x69, 0xa4, 0x3a, 0xc0, 0x53, 0x38, 0xdb, 0x30, 0xb7, 0xd6, 0x96, 0xee, 0x46, 0x96, 0x63, 0x3f, + 0x60, 0x2f, 0xa8, 0x25, 0x06, 0xf5, 0x58, 0x21, 0xef, 0x31, 0x8f, 0x7e, 0x33, 0xb6, 0x4c, 0xa2, + 0xcb, 0xd9, 0x1b, 0xfa, 0xf5, 0xc5, 0xac, 0x96, 0x19, 0x2e, 0xe7, 0x89, 0x1f, 0xbd, 0x5f, 0x1c, + 0xe6, 0x19, 0x2f, 0x38, 0xf3, 0xca, 0xe7, 0xd2, 0x3b, 0x7b, 0x4b, 0x75, 0xc6, 0x96, 0x5c, 0xc7, + 0xa5, 0x2b, 0xc7, 0x90, 0x2b, 0x7d, 0x90, 0xe6, 0x96, 0x6c, 0xe8, 0x37, 0xd1, 0x06, 0xdc, 0x3d, + 0xde, 0xd0, 0x43, 0x4e, 0x83, 0xa3, 0x66, 0xde, 0x24, 0x3b, 0x14, 0xfb, 0x34, 0x70, 0x1d, 0xce, + 0x65, 0xde, 0x08, 0x86, 0x89, 0x65, 0x51, 0xce, 0xbb, 0x9a, 0xbf, 0x6e, 0xbe, 0xc1, 0x15, 0x71, + 0xc6, 0xbc, 0x07, 0xd9, 0xe5, 0x1b, 0xb7, 0x50, 0x05, 0x26, 0x37, 0xde, 0x73, 0x31, 0xc1, 0x82, + 0x12, 0x9f, 0x09, 0x1d, 0x5d, 0x07, 0xbd, 0x30, 0xd0, 0x4b, 0xf7, 0xd9, 0xe7, 0x19, 0x98, 0x86, + 0xb1, 0x55, 0xc2, 0x1d, 0x4b, 0x8d, 0x43, 0x99, 0x51, 0x0d, 0x2e, 0x76, 0x0d, 0x48, 0xd3, 0xa3, + 0x99, 0xc2, 0xd8, 0xd3, 0xa5, 0xca, 0xd6, 0xc6, 0xd2, 0x7d, 0xda, 0xc6, 0x19, 0xf8, 0xbb, 0xd6, + 0x19, 0x98, 0xbe, 0xd4, 0x46, 0xb3, 0xa5, 0xe1, 0xf2, 0xe5, 0x24, 0x7a, 0xa9, 0x80, 0x18, 0x8c, + 0x84, 0xa2, 0x69, 0xc8, 0x3f, 0x2c, 0x70, 0xbe, 0x47, 0x57, 0x16, 0xfa, 0x83, 0x04, 0x7b, 0x49, + 0xbd, 0xd5, 0x1f, 0x42, 0x21, 0x9a, 0xbf, 0x10, 0xba, 0x1b, 0x10, 0x4f, 0x70, 0x2c, 0x17, 0xb1, + 0xf7, 0x60, 0x3e, 0x9e, 0xca, 0xd0, 0x6c, 0x7c, 0xa8, 0x56, 0xc9, 0xe9, 0x1a, 0x8c, 0x10, 0xdb, + 0x75, 0x3c, 0xb4, 0xd2, 0x45, 0xea, 0xd9, 0x5d, 0x30, 0x15, 0x0c, 0x09, 0x73, 0xb8, 0x90, 0x17, + 0xc5, 0x0e, 0xc5, 0x8e, 0x57, 0x67, 0x81, 0xab, 0xe2, 0x5d, 0x5b, 0x80, 0xc9, 0xb4, 0x2b, 0x86, + 0x7a, 0x27, 0xc5, 0xda, 0xd5, 0xbe, 0xb3, 0x62, 0x2f, 0x34, 0xd8, 0x80, 0xf3, 0x0f, 0x8e, 0x9a, + 0x43, 0x3a, 0xe7, 0x07, 0xcd, 0xf5, 0x67, 0x63, 0x9d, 0xc8, 0xd5, 0x72, 0xaa, 0xdc, 0x6e, 0xfe, + 0x27, 0x00, 0x00, 0xff, 0xff, 0x8f, 0xb5, 0x00, 0xf0, 0xe8, 0x18, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index c7d5d597317..8f52dc97580 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -94,13 +94,45 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { value: {}; } } + responses: { + key: "403"; + value: { + description: "Returned when the user does not have permission to access the resource."; + } + } + responses: { + key: "404"; + value: { + description: "Returned when the resource does not exist."; + schema: { + json_schema: { + type: STRING; + } + } + } + } + responses: { + key: "418"; + value: { + description: "I'm a teapot."; + schema: { + json_schema: { + ref: ".grpc.gateway.examples.examplepb.NumericEnum"; + } + } + } + } }; -// Intentionaly complicated message type to cover much features of Protobuf. +// Intentionaly complicated message type to cover many features of Protobuf. // NEXT ID: 30 message ABitOfEverything { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { + title: "A bit of everything" + description: "Intentionaly complicated message type to cover many features of Protobuf." + } external_docs: { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more about ABitOfEverything"; @@ -155,7 +187,7 @@ message ABitOfEverything { google.protobuf.Timestamp timestamp_value = 27; - // repeated enum value. it is comma-separated in query + // repeated enum value. it is comma-separated in query repeated NumericEnum repeated_enum_value = 28; } @@ -271,6 +303,24 @@ service ABitOfEverythingService { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more Echo"; } + responses: { + key: "503"; + value: { + description: "Returned when the resource is temporarily unavailable."; + } + } + responses: { + // Overwrites global definition. + key: "404"; + value: { + description: "Returned when the resource does not exist."; + schema: { + json_schema: { + type: INTEGER; + } + } + } + } }; } rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index aa7f2479021..59452a74eb5 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -32,6 +32,22 @@ "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -60,6 +76,27 @@ "schema": { "$ref": "#/definitions/subStringMessage" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "int32", + "format": "integer" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "503": { + "description": "Returned when the resource is temporarily unavailable.", + "schema": {} } }, "parameters": [ @@ -89,6 +126,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -302,6 +355,22 @@ "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -423,6 +492,22 @@ "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -455,6 +540,22 @@ "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -477,6 +578,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -508,6 +625,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -542,6 +675,27 @@ "schema": { "$ref": "#/definitions/subStringMessage" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "int32", + "format": "integer" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "503": { + "description": "Returned when the resource is temporarily unavailable.", + "schema": {} } }, "parameters": [ @@ -571,6 +725,27 @@ "schema": { "$ref": "#/definitions/subStringMessage" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "int32", + "format": "integer" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "503": { + "description": "Returned when the resource is temporarily unavailable.", + "schema": {} } }, "parameters": [ @@ -602,6 +777,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "tags": [ @@ -618,6 +809,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "tags": [ @@ -634,6 +841,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -666,6 +889,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "tags": [ @@ -682,6 +921,22 @@ "schema": { "$ref": "#/definitions/protobufEmpty" } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } } }, "parameters": [ @@ -855,7 +1110,8 @@ "title": "repeated enum value. it is comma-separated in query" } }, - "title": "Intentionaly complicated message type to cover much features of Protobuf.\nNEXT ID: 30", + "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", "externalDocs": { "description": "Find out more about ABitOfEverything", "url": "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index 42a70d155e9..c99f75b69cc 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -71,10 +71,10 @@ type isEmbedded_Mark interface { } type Embedded_Progress struct { - Progress int64 `protobuf:"varint,1,opt,name=progress,oneof"` + Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` } type Embedded_Note struct { - Note string `protobuf:"bytes,2,opt,name=note,oneof"` + Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` } func (*Embedded_Progress) isEmbedded_Mark() {} @@ -169,13 +169,13 @@ func _Embedded_OneofSizer(msg proto.Message) (n int) { // SimpleMessage represents a simple message sent to the Echo service. type SimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` // Types that are valid to be assigned to Code: // *SimpleMessage_LineNum // *SimpleMessage_Lang Code isSimpleMessage_Code `protobuf_oneof:"code"` - Status *Embedded `protobuf:"bytes,5,opt,name=status" json:"status,omitempty"` + Status *Embedded `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // Types that are valid to be assigned to Ext: // *SimpleMessage_En // *SimpleMessage_No @@ -217,16 +217,16 @@ type isSimpleMessage_Ext interface { } type SimpleMessage_LineNum struct { - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,oneof"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` } type SimpleMessage_Lang struct { - Lang string `protobuf:"bytes,4,opt,name=lang,oneof"` + Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` } type SimpleMessage_En struct { - En int64 `protobuf:"varint,6,opt,name=en,oneof"` + En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` } type SimpleMessage_No struct { - No *Embedded `protobuf:"bytes,7,opt,name=no,oneof"` + No *Embedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` } func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index 55be4381b5e..25e2b775e50 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -55,9 +55,9 @@ func (m *EmptyProto) XXX_DiscardUnknown() { var xxx_messageInfo_EmptyProto proto.InternalMessageInfo type NonEmptyProto struct { - A string `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` + A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -109,7 +109,7 @@ func (m *NonEmptyProto) GetC() string { } type UnaryProto struct { - Str string `protobuf:"bytes,1,opt,name=str" json:"str,omitempty"` + Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -147,9 +147,9 @@ func (m *UnaryProto) GetStr() string { } type NestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -201,7 +201,7 @@ func (m *NestedProto) GetC() string { } type SingleNestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 733ab6e8162..28f0d7311d0 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -37,9 +37,9 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index a5065f9d378..f3caeaf4e6b 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -26,12 +26,12 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Wrappers struct { - StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` + StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/examples/proto/sub2/message.pb.go b/examples/proto/sub2/message.pb.go index a0a812c7d0f..6819b67ae3c 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/proto/sub2/message.pb.go @@ -19,7 +19,7 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type IdMessage struct { - Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index c4f2b8d81aa..41ffdde2c7c 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -84,7 +84,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st return nil, nil } } - schema := schemaOfField(field, reg) + schema := schemaOfField(field, reg, nil) fieldType := field.GetTypeName() if message.File != nil { comments := fieldProtoComments(reg, message, field) @@ -192,7 +192,7 @@ func findNestedMessagesAndEnumerations(message *descriptor.Message, reg *descrip } } -func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry) { +func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry, customRefs refMap) { for name, msg := range messages { switch name { case ".google.protobuf.Timestamp": @@ -229,23 +229,23 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, panic(err) } if opts != nil { - if opts.ExternalDocs != nil { - if schema.ExternalDocs == nil { - schema.ExternalDocs = &swaggerExternalDocumentationObject{} - } - if opts.ExternalDocs.Description != "" { - schema.ExternalDocs.Description = opts.ExternalDocs.Description - } - if opts.ExternalDocs.Url != "" { - schema.ExternalDocs.URL = opts.ExternalDocs.Url - } - } + protoSchema := swaggerSchemaFromProtoSchema(opts, reg, customRefs) - // TODO(ivucica): add remaining fields of schema object + // Warning: Make sure not to overwrite any fields already set on the schema type. + schema.ExternalDocs = protoSchema.ExternalDocs + if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { + schema.schemaCore = protoSchema.schemaCore + } + if protoSchema.Title != "" { + schema.Title = protoSchema.Title + } + if protoSchema.Description != "" { + schema.Description = protoSchema.Description + } } for _, f := range msg.Fields { - fieldValue := schemaOfField(f, reg) + fieldValue := schemaOfField(f, reg, customRefs) comments := fieldProtoComments(reg, msg, f) if err := updateSwaggerDataFromComments(&fieldValue, comments); err != nil { panic(err) @@ -258,7 +258,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } // schemaOfField returns a swagger Schema Object for a protobuf field. -func schemaOfField(f *descriptor.Field, reg *descriptor.Registry) swaggerSchemaObject { +func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { const ( singular = 0 array = 1 @@ -288,6 +288,9 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry) swaggerSchemaO core = schemaCore{ Ref: "#/definitions/" + fullyQualifiedNameToSwaggerName(fd.GetTypeName(), reg), } + if refs != nil { + refs[fd.GetTypeName()] = struct{}{} + } } default: ftype, format, ok := primitiveSchema(ft) @@ -512,7 +515,7 @@ func templateToSwaggerPath(path string) string { return strings.Join(parts, "/") } -func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, refs refMap) error { +func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { for methIdx, meth := range svc.Methods { @@ -525,7 +528,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re switch pt := parameter.Target.GetType(); pt { case pbdescriptor.FieldDescriptorProto_TYPE_GROUP, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { - schema := schemaOfField(parameter.Target, reg) + schema := schemaOfField(parameter.Target, reg, customRefs) paramType = schema.Type paramFormat = schema.Format } else { @@ -563,7 +566,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } else { lastField := b.Body.FieldPath[len(b.Body.FieldPath)-1] - schema = schemaOfField(lastField.Target, reg) + schema = schemaOfField(lastField.Target, reg, customRefs) } desc := "" @@ -620,7 +623,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re // Fill reference map with referenced request messages for _, param := range operationObject.Parameters { if param.Schema != nil && param.Schema.Ref != "" { - refs[param.Schema.Ref] = struct{}{} + requestResponseRefs[param.Schema.Ref] = struct{}{} } } @@ -634,17 +637,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if err != nil { panic(err) } - if opts.ExternalDocs != nil { - if operationObject.ExternalDocs == nil { - operationObject.ExternalDocs = &swaggerExternalDocumentationObject{} - } - if opts.ExternalDocs.Description != "" { - operationObject.ExternalDocs.Description = opts.ExternalDocs.Description - } - if opts.ExternalDocs.Url != "" { - operationObject.ExternalDocs.URL = opts.ExternalDocs.Url - } - } + operationObject.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(opts.ExternalDocs) // TODO(ivucica): this would be better supported by looking whether the method is deprecated in the proto file operationObject.Deprecated = opts.Deprecated @@ -676,6 +669,14 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } operationObject.Security = newSecurity } + if opts.Responses != nil { + for name, resp := range opts.Responses { + operationObject.Responses[name] = swaggerResponseObject{ + Description: resp.Description, + Schema: swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs), + } + } + } // TODO(ivucica): add remaining fields of operation object } @@ -726,17 +727,18 @@ func applyTemplate(p param) (*swaggerObject, error) { // Loops through all the services and their exposed GET/POST/PUT/DELETE definitions // and create entries for all of them. - refs := refMap{} - if err := renderServices(p.Services, s.Paths, p.reg, refs); err != nil { + // Also adds custom user specified references to second map. + requestResponseRefs, customRefs := refMap{}, refMap{} + if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs); err != nil { panic(err) } - // Find all the service's messages and enumerations that are defined (recursively) and then - // write their request and response types out as definition objects. + // Find all the service's messages and enumerations that are defined (recursively) + // and write request, response and other custom (but referenced) types out as definition objects. m := messageMap{} e := enumMap{} - findServicesMessagesAndEnumerations(p.Services, p.reg, m, e, refs) - renderMessagesAsDefinition(m, s.Definitions, p.reg) + findServicesMessagesAndEnumerations(p.Services, p.reg, m, e, requestResponseRefs) + renderMessagesAsDefinition(m, s.Definitions, p.reg, customRefs) renderEnumerationsAsDefinition(e, s.Definitions, p.reg) // File itself might have some comments and metadata. @@ -885,15 +887,40 @@ func applyTemplate(p param) (*swaggerObject, error) { } s.Security = newSecurity } - if spb.ExternalDocs != nil { - if s.ExternalDocs == nil { - s.ExternalDocs = &swaggerExternalDocumentationObject{} - } - if spb.ExternalDocs.Description != "" { - s.ExternalDocs.Description = spb.ExternalDocs.Description - } - if spb.ExternalDocs.Url != "" { - s.ExternalDocs.URL = spb.ExternalDocs.Url + s.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(spb.ExternalDocs) + // Populate all Paths with Responses set at top level, + // preferring Responses already set over those at the top level. + if spb.Responses != nil { + for _, verbs := range s.Paths { + var maps []swaggerResponsesObject + if verbs.Delete != nil { + maps = append(maps, verbs.Delete.Responses) + } + if verbs.Get != nil { + maps = append(maps, verbs.Get.Responses) + } + if verbs.Post != nil { + maps = append(maps, verbs.Post.Responses) + } + if verbs.Put != nil { + maps = append(maps, verbs.Put.Responses) + } + if verbs.Patch != nil { + maps = append(maps, verbs.Patch.Responses) + } + + for k, v := range spb.Responses { + for _, respMap := range maps { + if _, ok := respMap[k]; ok { + // Don't overwrite already existing Responses + continue + } + respMap[k] = swaggerResponseObject{ + Description: v.Description, + Schema: swaggerSchemaFromProtoSchema(v.Schema, p.reg, customRefs), + } + } + } } } @@ -901,6 +928,10 @@ func applyTemplate(p param) (*swaggerObject, error) { // should be added here, once supported in the proto. } + // Finally add any references added by users that aren't + // otherwise rendered. + addCustomRefs(s.Definitions, p.reg, customRefs) + return &s, nil } @@ -1187,3 +1218,105 @@ func extractSwaggerOptionFromFileDescriptor(file *pbdescriptor.FileDescriptorPro } return opts, nil } + +func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { + ret := swaggerSchemaObject{ + ExternalDocs: protoExternalDocumentationToSwaggerExternalDocumentation(s.GetExternalDocs()), + Title: s.GetJsonSchema().GetTitle(), + Description: s.GetJsonSchema().GetDescription(), + // TODO(johanbrandhorst): Add more fields? + } + if s.GetJsonSchema().GetRef() != "" { + swaggerName := fullyQualifiedNameToSwaggerName(s.GetJsonSchema().GetRef(), reg) + if swaggerName != "" { + ret.schemaCore.Ref = "#/definitions/" + swaggerName + if refs != nil { + refs[s.GetJsonSchema().GetRef()] = struct{}{} + } + } else { + ret.schemaCore.Ref += s.GetJsonSchema().GetRef() + } + } else { + f, t := protoJSONSchemaTypeToFormat(s.GetJsonSchema().GetType()) + ret.schemaCore.Format = f + ret.schemaCore.Type = t + } + return ret +} + +func protoJSONSchemaTypeToFormat(in []swagger_options.JSONSchema_JSONSchemaSimpleTypes) (string, string) { + if len(in) == 0 { + return "", "" + } + + // Can't support more than 1 type, just return the first element. + // This is due to an inconsistency in the design of the openapiv2 proto + // and that used in schemaCore. schemaCore uses the v3 definition of types, + // which only allows a single string, while the openapiv2 proto uses the OpenAPI v2 + // definition, which defers to the JSON schema definition, which allows a string or an array. + // Sources: + // https://swagger.io/specification/#itemsObject + // https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.2 + switch in[0] { + case swagger_options.JSONSchema_UNKNOWN, swagger_options.JSONSchema_NULL: + return "", "" + case swagger_options.JSONSchema_OBJECT: + return "object", "" + case swagger_options.JSONSchema_ARRAY: + return "array", "" + case swagger_options.JSONSchema_BOOLEAN: + return "boolean", "boolean" + case swagger_options.JSONSchema_INTEGER: + return "integer", "int32" + case swagger_options.JSONSchema_NUMBER: + return "number", "double" + case swagger_options.JSONSchema_STRING: + // NOTE: in swagger specifition, format should be empty on string type + return "string", "" + default: + // Maybe panic? + return "", "" + } +} + +func protoExternalDocumentationToSwaggerExternalDocumentation(in *swagger_options.ExternalDocumentation) *swaggerExternalDocumentationObject { + if in == nil { + return nil + } + + return &swaggerExternalDocumentationObject{ + Description: in.Description, + URL: in.Url, + } +} + +func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs refMap) { + if len(refs) == 0 { + return + } + msgMap := make(messageMap) + enumMap := make(enumMap) + for ref := range refs { + if _, ok := d[fullyQualifiedNameToSwaggerName(ref, reg)]; ok { + // Skip already existing definitions + delete(refs, ref) + continue + } + msg, err := reg.LookupMsg("", ref) + if err == nil { + msgMap[fullyQualifiedNameToSwaggerName(ref, reg)] = msg + continue + } + enum, err := reg.LookupEnum("", ref) + if err == nil { + enumMap[fullyQualifiedNameToSwaggerName(ref, reg)] = enum + continue + } + // ?? Should be either enum or msg + } + renderMessagesAsDefinition(msgMap, d, reg, refs) + renderEnumerationsAsDefinition(enumMap, d, reg) + + // Run again in case any new refs were added + addCustomRefs(d, reg, refs) +} diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index e01bbc34ec2..115391ee352 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1,6 +1,7 @@ package genswagger import ( + "fmt" "reflect" "testing" @@ -9,7 +10,6 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" - "fmt" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { @@ -773,6 +773,7 @@ func TestFQMNtoSwaggerName(t *testing.T) { func TestSchemaOfField(t *testing.T) { type test struct { field *descriptor.Field + refs refMap expected schemaCore } @@ -784,6 +785,7 @@ func TestSchemaOfField(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), }, }, + refs: make(refMap), expected: schemaCore{ Type: "string", }, @@ -796,6 +798,7 @@ func TestSchemaOfField(t *testing.T) { Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), }, }, + refs: make(refMap), expected: schemaCore{ Type: "array", Items: &swaggerItemsObject{ @@ -811,6 +814,7 @@ func TestSchemaOfField(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, + refs: make(refMap), expected: schemaCore{ Type: "string", }, @@ -824,6 +828,7 @@ func TestSchemaOfField(t *testing.T) { Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), }, }, + refs: make(refMap), expected: schemaCore{ Type: "array", Items: &swaggerItemsObject{ @@ -839,6 +844,7 @@ func TestSchemaOfField(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, + refs: refMap{".example.Message": struct{}{}}, expected: schemaCore{ Ref: "#/definitions/exampleMessage", }, @@ -875,7 +881,8 @@ func TestSchemaOfField(t *testing.T) { }) for _, test := range tests { - actual := schemaOfField(test.field, reg) + refs := make(refMap) + actual := schemaOfField(test.field, reg, refs) if e, a := test.expected.Type, actual.Type; e != a { t.Errorf("Expected schemaOfField(%v).Type = %s, actual: %s", test.field, e, a) } @@ -885,5 +892,8 @@ func TestSchemaOfField(t *testing.T) { if e, a := test.expected.Items.getType(), actual.Items.getType(); e != a { t.Errorf("Expected schemaOfField(%v).Items.Type = %v, actual.Type: %v", test.field, e, a) } + if !reflect.DeepEqual(refs, test.refs) { + t.Errorf("Expected schemaOfField(%v) to add refs %v, not %v", test.field, test.refs, refs) + } } } diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index be2342b7154..931bc38f441 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{0, 0} + return fileDescriptor_openapiv2_5363312922dcb572, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{6, 0} + return fileDescriptor_openapiv2_5363312922dcb572, []int{7, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{9, 0} + return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{9, 1} + return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{9, 2} + return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -190,16 +190,17 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // TODO(ivucica): document fields type Swagger struct { - Swagger string `protobuf:"bytes,1,opt,name=swagger" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host" json:"host,omitempty"` - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -209,7 +210,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{0} + return fileDescriptor_openapiv2_5363312922dcb572, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -278,6 +279,13 @@ func (m *Swagger) GetProduces() []string { return nil } +func (m *Swagger) GetResponses() map[string]*Response { + if m != nil { + return m.Responses + } + return nil +} + func (m *Swagger) GetSecurityDefinitions() *SecurityDefinitions { if m != nil { return m.SecurityDefinitions @@ -305,16 +313,17 @@ func (m *Swagger) GetExternalDocs() *ExternalDocumentation { // // TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -324,7 +333,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{1} + return fileDescriptor_openapiv2_5363312922dcb572, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -393,6 +402,13 @@ func (m *Operation) GetProduces() []string { return nil } +func (m *Operation) GetResponses() map[string]*Response { + if m != nil { + return m.Responses + } + return nil +} + func (m *Operation) GetSchemes() []string { if m != nil { return m.Schemes @@ -414,17 +430,71 @@ func (m *Operation) GetSecurity() []*SecurityRequirement { return nil } +// `Response` is a representation of OpenAPI v2 specification's Response object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject +// +type Response struct { + // `Description` is a short description of the response. + // GFM syntax can be used for rich text representation. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // `Schema` optionally defines the structure of the response. + // If `Schema` is not provided, it means there is no content to the response. + Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Response) Reset() { *m = Response{} } +func (m *Response) String() string { return proto.CompactTextString(m) } +func (*Response) ProtoMessage() {} +func (*Response) Descriptor() ([]byte, []int) { + return fileDescriptor_openapiv2_5363312922dcb572, []int{2} +} +func (m *Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Response.Unmarshal(m, b) +} +func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Response.Marshal(b, m, deterministic) +} +func (dst *Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_Response.Merge(dst, src) +} +func (m *Response) XXX_Size() int { + return xxx_messageInfo_Response.Size(m) +} +func (m *Response) XXX_DiscardUnknown() { + xxx_messageInfo_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_Response proto.InternalMessageInfo + +func (m *Response) GetDescription() string { + if m != nil { + return m.Description + } + return "" +} + +func (m *Response) GetSchema() *Schema { + if m != nil { + return m.Schema + } + return nil +} + // `Info` is a representation of OpenAPI v2 specification's Info object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // // TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact" json:"contact,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version" json:"version,omitempty"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -434,7 +504,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{2} + return fileDescriptor_openapiv2_5363312922dcb572, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -495,9 +565,9 @@ func (m *Info) GetVersion() string { // // TODO(ivucica): document fields type Contact struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` - Email string `protobuf:"bytes,3,opt,name=email" json:"email,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -507,7 +577,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{3} + return fileDescriptor_openapiv2_5363312922dcb572, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -555,8 +625,8 @@ func (m *Contact) GetEmail() string { // // TODO(ivucica): document fields type ExternalDocumentation struct { - Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -566,7 +636,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{4} + return fileDescriptor_openapiv2_5363312922dcb572, []int{5} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -606,11 +676,11 @@ func (m *ExternalDocumentation) GetUrl() string { // // TODO(ivucica): document fields type Schema struct { - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example" json:"example,omitempty"` + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` + Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -620,7 +690,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{5} + return fileDescriptor_openapiv2_5363312922dcb572, []int{6} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -687,26 +757,33 @@ func (m *Schema) GetExample() *any.Any { // // TODO(ivucica): document fields type JSONSchema struct { - Title string `protobuf:"bytes,5,opt,name=title" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default" json:"default,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum" json:"exclusive_minimum,omitempty"` - MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength" json:"max_length,omitempty"` - MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern" json:"pattern,omitempty"` - MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` - MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems" json:"unique_items,omitempty"` - MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties" json:"max_properties,omitempty"` - MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties" json:"min_properties,omitempty"` - Required []string `protobuf:"bytes,26,rep,name=required" json:"required,omitempty"` + // Ref is used to define an external reference to include in the message. + // This could be a fully qualified proto message reference, and that type must be imported + // into the protofile. If no message is identified, the Ref will be used verbatim in + // the output. + // For example: + // `ref: ".google.protobuf.Timestamp"`. + Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` + MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` + Required []string `protobuf:"bytes,26,rep,name=required,proto3" json:"required,omitempty"` // Items in 'array' must be unique. - Array []string `protobuf:"bytes,34,rep,name=array" json:"array,omitempty"` - Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` + Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` + Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -716,7 +793,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{6} + return fileDescriptor_openapiv2_5363312922dcb572, []int{7} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -736,6 +813,13 @@ func (m *JSONSchema) XXX_DiscardUnknown() { var xxx_messageInfo_JSONSchema proto.InternalMessageInfo +func (m *JSONSchema) GetRef() string { + if m != nil { + return m.Ref + } + return "" +} + func (m *JSONSchema) GetTitle() string { if m != nil { return m.Title @@ -877,8 +961,8 @@ func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { type Tag struct { // TODO(ivucica): Description should be extracted from comments on the proto // service object. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -888,7 +972,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{7} + return fileDescriptor_openapiv2_5363312922dcb572, []int{8} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -932,7 +1016,7 @@ func (m *Tag) GetExternalDocs() *ExternalDocumentation { // and only serves to provide the relevant details for each scheme. type SecurityDefinitions struct { // A single security scheme definition, mapping a "name" to the scheme it defines. - Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -942,7 +1026,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{8} + return fileDescriptor_openapiv2_5363312922dcb572, []int{9} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -981,36 +1065,36 @@ func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { type SecurityScheme struct { // Required. The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". - Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` + Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` // A short description for security scheme. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` // Required. The name of the header or query parameter to be used. // // Valid for apiKey. - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // Required. The location of the API key. Valid values are "query" or "header". // // Valid for apiKey. - In SecurityScheme_In `protobuf:"varint,4,opt,name=in,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` + In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` // Required. The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". // // Valid for oauth2. - Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` + Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` // Required. The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. // // Valid for oauth2/implicit and oauth2/accessCode. - AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl" json:"authorization_url,omitempty"` + AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` // Required. The token URL to be used for this flow. This SHOULD be in the // form of a URL. // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. - TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl" json:"token_url,omitempty"` + TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` // Required. The available scopes for the OAuth2 security scheme. // // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes" json:"scopes,omitempty"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1020,7 +1104,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{9} + return fileDescriptor_openapiv2_5363312922dcb572, []int{10} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1112,7 +1196,7 @@ type SecurityRequirement struct { // the Security Definitions. If the security scheme is of type "oauth2", // then the value is a list of scope names required for the execution. // For other security scheme types, the array MUST be empty. - SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1122,7 +1206,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{10} + return fileDescriptor_openapiv2_5363312922dcb572, []int{11} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1153,7 +1237,7 @@ func (m *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequi // scope names required for the execution. For other security scheme types, // the array MUST be empty. type SecurityRequirement_SecurityRequirementValue struct { - Scope []string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty"` + Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1167,7 +1251,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{10, 0} + return fileDescriptor_openapiv2_5363312922dcb572, []int{11, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1202,7 +1286,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) GetScope() []string { type Scopes struct { // Maps between a name of a scope to a short description of it (as the value // of the property). - Scope map[string]string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1212,7 +1296,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_4346354ad6fc20e0, []int{11} + return fileDescriptor_openapiv2_5363312922dcb572, []int{12} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1241,7 +1325,10 @@ func (m *Scopes) GetScope() map[string]string { func init() { proto.RegisterType((*Swagger)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger") + proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry") proto.RegisterType((*Operation)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation") + proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry") + proto.RegisterType((*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Response") proto.RegisterType((*Info)(nil), "grpc.gateway.protoc_gen_swagger.options.Info") proto.RegisterType((*Contact)(nil), "grpc.gateway.protoc_gen_swagger.options.Contact") proto.RegisterType((*ExternalDocumentation)(nil), "grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation") @@ -1264,113 +1351,119 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_4346354ad6fc20e0) -} - -var fileDescriptor_openapiv2_4346354ad6fc20e0 = []byte{ - // 1664 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0x5b, 0x73, 0xdb, 0xc6, - 0x15, 0x0e, 0xc8, 0x25, 0x09, 0x1e, 0x4a, 0xcc, 0x7a, 0x2d, 0xb7, 0x88, 0x12, 0xbb, 0x0a, 0x9a, - 0x4e, 0x35, 0xf6, 0x98, 0x4a, 0x95, 0x87, 0x66, 0x32, 0x9d, 0xce, 0x50, 0x12, 0x63, 0x03, 0x96, - 0x49, 0x16, 0xa4, 0xa2, 0xb8, 0x33, 0x1d, 0xcc, 0x1a, 0x5c, 0x52, 0x88, 0x71, 0x61, 0x70, 0x91, - 0xc4, 0xfe, 0x82, 0x3e, 0x77, 0xfa, 0xda, 0x9f, 0xd1, 0xa7, 0xf6, 0x67, 0xf4, 0x97, 0xb4, 0x6f, - 0x7d, 0xea, 0xec, 0x05, 0x24, 0x74, 0x49, 0x86, 0x91, 0xed, 0x27, 0xee, 0xf9, 0xce, 0x65, 0xf7, - 0x5c, 0xf6, 0x9c, 0x05, 0xe1, 0xf1, 0x3c, 0x89, 0xb3, 0xd8, 0x7b, 0x3a, 0x63, 0xd1, 0xd3, 0xf4, - 0x82, 0xce, 0x66, 0x2c, 0xd9, 0x8b, 0xe7, 0x99, 0x1f, 0x47, 0xe9, 0x5e, 0x3c, 0x67, 0x11, 0x9d, - 0xfb, 0xe7, 0xfb, 0x1d, 0x21, 0x44, 0x7e, 0x3d, 0x4b, 0xe6, 0x5e, 0x67, 0x46, 0x33, 0x76, 0x41, - 0x17, 0x12, 0xf3, 0xdc, 0x19, 0x8b, 0x5c, 0xa5, 0xd8, 0x51, 0x8a, 0xdb, 0x1f, 0xcd, 0xe2, 0x78, - 0x16, 0xb0, 0x3d, 0x21, 0xf2, 0x3a, 0x9f, 0xee, 0xd1, 0x48, 0xc9, 0x9b, 0xff, 0xa8, 0x41, 0x63, - 0x24, 0xc5, 0x89, 0x01, 0x0d, 0xa5, 0x69, 0x68, 0x3b, 0xda, 0x6e, 0xd3, 0x29, 0x48, 0xd2, 0x05, - 0xe4, 0x47, 0xd3, 0xd8, 0xa8, 0xec, 0x68, 0xbb, 0xad, 0xfd, 0xa7, 0x9d, 0x35, 0x37, 0xee, 0x58, - 0xd1, 0x34, 0x76, 0x84, 0x2a, 0x21, 0x80, 0xce, 0xe2, 0x34, 0x33, 0xaa, 0xc2, 0xb2, 0x58, 0x93, - 0x8f, 0xa1, 0xf9, 0x9a, 0xa6, 0xcc, 0x9d, 0xd3, 0xec, 0xcc, 0x40, 0x82, 0xa1, 0x73, 0x60, 0x48, - 0xb3, 0x33, 0xf2, 0x2d, 0x34, 0x52, 0xef, 0x8c, 0x85, 0x2c, 0x35, 0x6a, 0x3b, 0xd5, 0xdd, 0xf6, - 0xfe, 0xef, 0xd7, 0xde, 0x56, 0x39, 0x54, 0xfc, 0x8e, 0x84, 0x19, 0xa7, 0x30, 0x47, 0xb6, 0x41, - 0xf7, 0xe2, 0x28, 0xcd, 0xb9, 0xe9, 0xfa, 0x4e, 0x95, 0xef, 0x5a, 0xd0, 0x9c, 0x37, 0x4f, 0xe2, - 0x49, 0xee, 0xb1, 0xd4, 0x68, 0x48, 0x5e, 0x41, 0x93, 0x18, 0xb6, 0x52, 0xe6, 0xe5, 0x89, 0x9f, - 0x2d, 0xdc, 0x09, 0x9b, 0xfa, 0x91, 0x2f, 0xb6, 0x33, 0x5a, 0x22, 0x2a, 0xbf, 0x5b, 0xff, 0x78, - 0xca, 0xc8, 0xd1, 0xca, 0x86, 0x73, 0x3f, 0xbd, 0x09, 0x92, 0x6f, 0x41, 0x2f, 0x60, 0x63, 0x63, - 0xa7, 0x7a, 0xa7, 0x4d, 0x1c, 0xf6, 0x7d, 0xee, 0x27, 0x2c, 0x64, 0x51, 0xe6, 0x2c, 0xad, 0x11, - 0x0f, 0x36, 0xd9, 0x65, 0xc6, 0x92, 0x88, 0x06, 0xee, 0x24, 0xf6, 0x52, 0xa3, 0x2d, 0x7c, 0x58, - 0x3f, 0xc4, 0x3d, 0xa5, 0x7d, 0x14, 0x7b, 0x39, 0xb7, 0x4d, 0x39, 0xec, 0x6c, 0xb0, 0x15, 0x9c, - 0x9a, 0x07, 0xb0, 0x79, 0x25, 0x03, 0xa4, 0x05, 0x8d, 0x93, 0xfe, 0x8b, 0xfe, 0xe0, 0xb4, 0x8f, - 0x3f, 0x20, 0x3a, 0xa0, 0xe7, 0xe3, 0xf1, 0x10, 0x6b, 0xa4, 0x09, 0x35, 0xbe, 0x1a, 0xe1, 0x0a, - 0xa9, 0x43, 0xe5, 0x74, 0x84, 0xab, 0xa4, 0x01, 0xd5, 0xd3, 0xd1, 0x08, 0x23, 0x1b, 0xe9, 0x3a, - 0x6e, 0xda, 0x48, 0x6f, 0x62, 0xb0, 0x91, 0x0e, 0xb8, 0x65, 0x23, 0x7d, 0x13, 0xb7, 0xcd, 0x7f, - 0x56, 0xa1, 0x39, 0x98, 0xb3, 0x44, 0xec, 0xcb, 0x8b, 0x2b, 0xa3, 0xb3, 0xd4, 0xd0, 0x44, 0xc6, - 0xc4, 0x5a, 0x54, 0x73, 0x1e, 0x86, 0x34, 0x59, 0x88, 0xb2, 0xe5, 0xd5, 0x2c, 0x49, 0xb2, 0x03, - 0xad, 0x09, 0x4b, 0xbd, 0xc4, 0x17, 0xbe, 0xa8, 0x8a, 0x2c, 0x43, 0x37, 0xc3, 0x83, 0xde, 0x7d, - 0x78, 0xc8, 0xa7, 0xb0, 0x11, 0x17, 0x1e, 0xb8, 0xfe, 0xc4, 0xa8, 0xc9, 0x73, 0x2c, 0x31, 0x6b, - 0x72, 0xe7, 0x4a, 0x35, 0x56, 0x77, 0x07, 0x04, 0x6b, 0x59, 0xfb, 0x8f, 0x00, 0x26, 0x6c, 0x9e, - 0x30, 0x8f, 0x66, 0x6c, 0x22, 0x2a, 0x57, 0x77, 0x4a, 0xc8, 0xfb, 0x2b, 0xb9, 0x72, 0x26, 0xcd, - 0x7f, 0x6b, 0x80, 0x78, 0x6f, 0x20, 0x5b, 0x50, 0xcb, 0xfc, 0x2c, 0x60, 0xaa, 0xe1, 0x48, 0xe2, - 0x7a, 0x82, 0x2a, 0x37, 0x13, 0xb4, 0x0b, 0x38, 0x63, 0x49, 0x98, 0xba, 0xf1, 0xd4, 0x4d, 0x59, - 0x72, 0xee, 0x7b, 0x4c, 0xe5, 0xb1, 0x2d, 0xf0, 0xc1, 0x74, 0x24, 0x51, 0x62, 0x43, 0xc3, 0x8b, - 0xa3, 0x8c, 0x7a, 0x99, 0x4a, 0xe2, 0xe7, 0x6b, 0xfb, 0x73, 0x28, 0xf5, 0x9c, 0xc2, 0x00, 0x0f, - 0xeb, 0x39, 0x4b, 0x52, 0x7e, 0xa6, 0xba, 0x2c, 0x29, 0x45, 0xda, 0x48, 0xaf, 0xe1, 0xba, 0xd9, - 0x83, 0x86, 0xd2, 0xe1, 0x15, 0x19, 0xd1, 0xb0, 0xf0, 0x4b, 0xac, 0x09, 0x86, 0x6a, 0x9e, 0x04, - 0xca, 0x1d, 0xbe, 0xe4, 0xee, 0xb3, 0x90, 0xfa, 0x81, 0x3a, 0xbb, 0x24, 0xcc, 0x17, 0xf0, 0xe0, - 0xd6, 0xfa, 0xb9, 0x1e, 0x17, 0xed, 0x66, 0x5c, 0x6e, 0x6c, 0x61, 0xfe, 0xab, 0x02, 0x75, 0x71, - 0xfd, 0x28, 0x19, 0x43, 0xeb, 0xbb, 0x34, 0x8e, 0x5c, 0x51, 0x0b, 0x54, 0xa8, 0xb7, 0xf6, 0xbf, - 0x58, 0x3b, 0x1c, 0xf6, 0x68, 0xd0, 0x97, 0x96, 0x1c, 0xe0, 0x76, 0x94, 0xd5, 0xcf, 0x60, 0x73, - 0xe2, 0xf3, 0x13, 0x84, 0x7e, 0x44, 0xb3, 0x38, 0x51, 0x9b, 0x5f, 0x05, 0x79, 0xab, 0x4f, 0x18, - 0x9d, 0xb8, 0x71, 0x14, 0x2c, 0x84, 0xb7, 0xba, 0xa3, 0x73, 0x60, 0x10, 0x05, 0xb7, 0x74, 0xa3, - 0xda, 0x7b, 0xb8, 0x6e, 0x1d, 0x68, 0xb0, 0x4b, 0x1a, 0xce, 0x03, 0x26, 0x92, 0xd7, 0xda, 0xdf, - 0xea, 0xc8, 0xb1, 0xd8, 0x29, 0xc6, 0x62, 0xa7, 0x1b, 0x2d, 0x9c, 0x42, 0xc8, 0x46, 0x3a, 0xc2, - 0x35, 0xf3, 0x7f, 0x75, 0x80, 0x95, 0xe3, 0xab, 0x7a, 0xad, 0xfd, 0x48, 0xbd, 0xd6, 0x6f, 0xe6, - 0xc5, 0x80, 0xc6, 0x84, 0x4d, 0x69, 0x1e, 0x64, 0x46, 0x43, 0x56, 0x8e, 0x22, 0xc9, 0x2f, 0xa0, - 0x15, 0xe6, 0x41, 0xe6, 0xcf, 0x03, 0xe6, 0xc6, 0x53, 0x03, 0x76, 0xb4, 0x5d, 0xcd, 0x81, 0x02, - 0x1a, 0x4c, 0xb9, 0x6a, 0x48, 0x2f, 0xfd, 0x30, 0x0f, 0xc5, 0x75, 0xd5, 0x9c, 0x82, 0x24, 0x4f, - 0xe0, 0x1e, 0xbb, 0xf4, 0x82, 0x3c, 0xf5, 0xcf, 0x99, 0x5b, 0xc8, 0x6c, 0x88, 0xd8, 0xe2, 0x25, - 0xe3, 0xa5, 0x12, 0xe6, 0x66, 0xfc, 0x48, 0x88, 0x6c, 0x2a, 0x33, 0x92, 0xbc, 0x66, 0x46, 0xc9, - 0xb4, 0xaf, 0x9b, 0x51, 0xc2, 0x0f, 0x01, 0x42, 0x7a, 0xe9, 0x06, 0x2c, 0x9a, 0x65, 0x67, 0xc6, - 0x87, 0x3b, 0xda, 0x2e, 0x72, 0x9a, 0x21, 0xbd, 0x3c, 0x16, 0x80, 0x60, 0xfb, 0x51, 0xc1, 0xc6, - 0x8a, 0xed, 0x47, 0x8a, 0x6d, 0x40, 0x63, 0x4e, 0x33, 0x9e, 0x14, 0xe3, 0x9e, 0x0c, 0x83, 0x22, - 0x79, 0x7d, 0x70, 0xbb, 0x7e, 0xc6, 0xc2, 0xd4, 0xd8, 0x12, 0x7a, 0x7a, 0x48, 0x2f, 0x2d, 0x4e, - 0x0b, 0xa6, 0x1f, 0x29, 0xe6, 0x03, 0xc5, 0xf4, 0x23, 0xc9, 0xfc, 0x14, 0x36, 0xf2, 0xc8, 0xff, - 0x3e, 0x67, 0x8a, 0xff, 0x33, 0x71, 0xf2, 0x96, 0xc4, 0xa4, 0xc8, 0xaf, 0xa0, 0xcd, 0x8d, 0xcf, - 0x13, 0xde, 0x5b, 0x33, 0x9f, 0xa5, 0x86, 0x21, 0x8c, 0x6c, 0x86, 0xf4, 0x72, 0xb8, 0x04, 0x85, - 0x98, 0x1f, 0x95, 0xc5, 0x3e, 0x52, 0x62, 0x7e, 0x54, 0x12, 0xdb, 0x06, 0x3d, 0x91, 0x1d, 0x6e, - 0x62, 0x6c, 0xcb, 0xc6, 0x5b, 0xd0, 0xbc, 0x3e, 0x68, 0x92, 0xd0, 0x85, 0x61, 0x0a, 0x86, 0x24, - 0xc8, 0x9f, 0x00, 0x65, 0x8b, 0x39, 0x33, 0x7e, 0x29, 0xde, 0x31, 0xd6, 0x1d, 0x6e, 0x5c, 0x69, - 0x39, 0xf2, 0x79, 0x79, 0x8e, 0x17, 0x73, 0x96, 0x3a, 0xc2, 0xac, 0x79, 0x01, 0x0f, 0x6e, 0x65, - 0x5f, 0x9d, 0xb7, 0x4d, 0xa8, 0x75, 0x1d, 0xa7, 0xfb, 0x0a, 0x6b, 0x1c, 0x3f, 0x18, 0x0c, 0x8e, - 0x7b, 0xdd, 0x3e, 0xae, 0x70, 0xc2, 0xea, 0x8f, 0x7b, 0xcf, 0x7a, 0x0e, 0xae, 0xf2, 0xa1, 0xdc, - 0x3f, 0x39, 0x3e, 0xc6, 0x88, 0x00, 0xd4, 0xfb, 0x27, 0x2f, 0x0f, 0x7a, 0x0e, 0xae, 0xf1, 0xf5, - 0xe0, 0xc0, 0xee, 0x1d, 0x8e, 0x71, 0x9d, 0xaf, 0x47, 0x63, 0xc7, 0xea, 0x3f, 0xc3, 0x0d, 0x1b, - 0xe9, 0x1a, 0xae, 0xd8, 0x48, 0xaf, 0xe0, 0xaa, 0x8d, 0xf4, 0xaa, 0x18, 0xd7, 0x08, 0xd7, 0xae, - 0x0d, 0x6d, 0x82, 0xef, 0xdb, 0x48, 0xbf, 0x8f, 0xb7, 0x6c, 0xa4, 0xff, 0x1c, 0x1b, 0x36, 0xd2, - 0x3f, 0xc6, 0x9f, 0xd8, 0x48, 0xff, 0x04, 0x3f, 0xb4, 0x91, 0xfe, 0x10, 0x3f, 0xb2, 0x91, 0xfe, - 0x08, 0x9b, 0x36, 0xd2, 0x3f, 0xc3, 0x8f, 0x6d, 0xa4, 0x3f, 0xc6, 0x4f, 0x6c, 0xa4, 0x3f, 0xc1, - 0x1d, 0xf3, 0xaf, 0x1a, 0x54, 0xc7, 0x74, 0xb6, 0xc6, 0x3c, 0xb8, 0xd1, 0x41, 0xaa, 0xef, 0xbe, - 0x83, 0x48, 0x77, 0xcd, 0xff, 0x6a, 0x70, 0xff, 0x96, 0x17, 0x1c, 0x99, 0x96, 0x26, 0xa7, 0x26, - 0x26, 0xa7, 0xfd, 0x36, 0x2f, 0xc2, 0x25, 0xd6, 0x8b, 0xb2, 0x64, 0xb1, 0x9a, 0xa3, 0xdb, 0x19, - 0x6c, 0x5e, 0x61, 0xf1, 0x9e, 0xff, 0x86, 0x2d, 0xd4, 0x34, 0xe0, 0x4b, 0xf2, 0x12, 0x6a, 0xe7, - 0x34, 0xc8, 0x99, 0x7a, 0xaf, 0xff, 0xf6, 0x27, 0x9f, 0x43, 0xbd, 0x98, 0xa5, 0x95, 0xaf, 0x2a, - 0x5f, 0x6a, 0xfc, 0x3b, 0xa1, 0x7d, 0x95, 0x4b, 0x86, 0xaa, 0xaa, 0xf9, 0xc6, 0xed, 0x3b, 0x3c, - 0x13, 0xa4, 0x99, 0x0e, 0x2f, 0x55, 0x59, 0xc8, 0x6b, 0xe4, 0xb9, 0x18, 0xab, 0xd5, 0xd2, 0x58, - 0xb5, 0xa1, 0xe2, 0x47, 0x62, 0xb8, 0xb7, 0xf7, 0xbf, 0xba, 0xeb, 0x29, 0xac, 0xc8, 0xa9, 0xf8, - 0x11, 0xf7, 0x69, 0x1a, 0xc4, 0x17, 0xa2, 0xbd, 0xbf, 0x85, 0x4f, 0x5f, 0x07, 0xf1, 0x85, 0x23, - 0x2c, 0xf1, 0xee, 0x4a, 0xf3, 0xec, 0x2c, 0x4e, 0xfc, 0x3f, 0xcb, 0x97, 0x1e, 0x9f, 0xcf, 0x72, - 0x42, 0xe0, 0x2b, 0x8c, 0x93, 0x24, 0xe0, 0x8d, 0x2e, 0x8b, 0xdf, 0x30, 0x29, 0x24, 0x07, 0x85, - 0x2e, 0x00, 0xce, 0x7c, 0x06, 0xf5, 0xd4, 0x8b, 0xe7, 0x2c, 0x35, 0x74, 0x91, 0xd6, 0xbd, 0xf5, - 0x4f, 0x27, 0xd4, 0x1c, 0xa5, 0x6e, 0xbe, 0x00, 0xc4, 0x83, 0x4e, 0x30, 0x6c, 0x8c, 0x5f, 0x0d, - 0x7b, 0xae, 0xd5, 0xff, 0xa6, 0x7b, 0x6c, 0x1d, 0xe1, 0x0f, 0x48, 0x1b, 0x40, 0x20, 0x07, 0xdd, - 0x91, 0x75, 0x88, 0xb5, 0xa5, 0x44, 0x77, 0x68, 0xb9, 0x2f, 0x7a, 0xaf, 0x70, 0x85, 0x7c, 0x08, - 0x2d, 0x81, 0x0c, 0xba, 0x27, 0xe3, 0xe7, 0xfb, 0xb8, 0x6a, 0xfe, 0x06, 0x2a, 0x56, 0xc4, 0x15, - 0xad, 0x7e, 0xc9, 0xd0, 0x06, 0xe8, 0x56, 0xdf, 0xfd, 0xc3, 0x49, 0xcf, 0xe1, 0xfd, 0x66, 0x13, - 0x9a, 0x56, 0xdf, 0x7d, 0xde, 0xeb, 0x1e, 0xf5, 0x1c, 0x5c, 0x31, 0xbf, 0x03, 0xc4, 0x03, 0xc4, - 0xad, 0x7f, 0x7d, 0x3c, 0x38, 0x2d, 0xa9, 0xdd, 0x83, 0x4d, 0x89, 0xbc, 0x1c, 0x1e, 0x5b, 0x87, - 0xd6, 0x18, 0x6b, 0x4b, 0x68, 0xd8, 0x1d, 0x8d, 0x4e, 0x07, 0xce, 0x11, 0xae, 0x90, 0x2d, 0xc0, - 0x02, 0xea, 0x0e, 0xb9, 0x54, 0x77, 0x6c, 0x0d, 0xfa, 0xb8, 0xba, 0x42, 0x0f, 0x0f, 0x7b, 0xa3, - 0x91, 0x7b, 0x38, 0x38, 0xea, 0x61, 0x64, 0xfe, 0xa7, 0xb2, 0xba, 0xad, 0xa5, 0x77, 0x29, 0xf9, - 0x8b, 0x56, 0xfa, 0x98, 0x4b, 0x56, 0x0c, 0x75, 0x75, 0x4f, 0xde, 0xe6, 0xd1, 0x7b, 0x1b, 0x26, - 0x6f, 0xf1, 0xf2, 0x2b, 0xaf, 0xc4, 0xd9, 0xfe, 0x1c, 0x8c, 0x5b, 0x14, 0xbe, 0xe1, 0x57, 0x8f, - 0xcf, 0x13, 0x91, 0x34, 0xf5, 0x65, 0x23, 0x89, 0xed, 0xbf, 0x6b, 0xb7, 0xaa, 0xfc, 0x50, 0x3b, - 0x78, 0x73, 0xb5, 0x1d, 0xbc, 0x73, 0xdf, 0xc4, 0x51, 0xcb, 0xcd, 0xe2, 0x6f, 0x1a, 0x7f, 0x73, - 0xf2, 0x5a, 0x23, 0xc3, 0xb2, 0x03, 0xad, 0x9f, 0x72, 0x3f, 0x85, 0xbe, 0xfc, 0x91, 0xc1, 0x53, - 0xce, 0x7f, 0x09, 0xb0, 0x02, 0x6f, 0xf1, 0x76, 0xab, 0xec, 0x6d, 0xb3, 0x74, 0xac, 0x83, 0xc3, - 0x3f, 0x76, 0x67, 0x7e, 0x76, 0x96, 0xbf, 0xee, 0x78, 0x71, 0xb8, 0xc7, 0x0f, 0xf2, 0x94, 0x79, - 0x71, 0xba, 0x48, 0x33, 0xa6, 0x48, 0x75, 0xae, 0xbd, 0x1f, 0xfe, 0x13, 0xe6, 0x75, 0x5d, 0xf0, - 0xbe, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xb7, 0xe4, 0x3d, 0xa9, 0x11, 0x00, 0x00, + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_5363312922dcb572) +} + +var fileDescriptor_openapiv2_5363312922dcb572 = []byte{ + // 1753 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5f, 0x73, 0xdb, 0xc6, + 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, + 0x53, 0x8d, 0x3d, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0xa7, 0x1d, 0x4a, 0x62, 0x6c, 0xc0, 0x32, + 0xc9, 0x82, 0x54, 0x14, 0x77, 0x26, 0x83, 0x81, 0xc1, 0x23, 0x85, 0x18, 0x38, 0x20, 0xf8, 0x23, + 0x89, 0x7d, 0xeb, 0x4b, 0xdb, 0xe7, 0x4e, 0x5f, 0xfb, 0x31, 0xfa, 0xd6, 0x8f, 0xd1, 0x4f, 0xd2, + 0x7e, 0x80, 0x76, 0xee, 0x0f, 0x48, 0x50, 0x62, 0x32, 0x94, 0xff, 0xf4, 0x89, 0xb7, 0xbf, 0xfd, + 0x73, 0xbb, 0x77, 0xbb, 0x7b, 0x0b, 0xc2, 0xc3, 0x28, 0x0e, 0xd3, 0xd0, 0x7d, 0x3c, 0x23, 0xf4, + 0x71, 0x72, 0xe9, 0xcc, 0x66, 0x24, 0xde, 0x0f, 0xa3, 0xd4, 0x0b, 0x69, 0xb2, 0x1f, 0x46, 0x84, + 0x3a, 0x91, 0x77, 0x71, 0xd0, 0xe1, 0x42, 0xf8, 0x97, 0xb3, 0x38, 0x72, 0x3b, 0x33, 0x27, 0x25, + 0x97, 0xce, 0x5c, 0x60, 0xae, 0x3d, 0x23, 0xd4, 0x96, 0x8a, 0x1d, 0xa9, 0xb8, 0xf3, 0xc1, 0x2c, + 0x0c, 0x67, 0x3e, 0xd9, 0xe7, 0x22, 0x2f, 0xb3, 0xe9, 0xbe, 0x43, 0xa5, 0x7c, 0xfb, 0xbf, 0x55, + 0xa8, 0x8d, 0x84, 0x38, 0xd6, 0xa1, 0x26, 0x35, 0x75, 0x65, 0x57, 0xd9, 0xab, 0x5b, 0x39, 0x89, + 0xbb, 0xa0, 0x7a, 0x74, 0x1a, 0xea, 0xa5, 0x5d, 0x65, 0xaf, 0x71, 0xf0, 0xb8, 0xb3, 0xe1, 0xc6, + 0x1d, 0x83, 0x4e, 0x43, 0x8b, 0xab, 0x62, 0x0c, 0xea, 0x79, 0x98, 0xa4, 0x7a, 0x99, 0x5b, 0xe6, + 0x6b, 0xfc, 0x21, 0xd4, 0x5f, 0x3a, 0x09, 0xb1, 0x23, 0x27, 0x3d, 0xd7, 0x55, 0xce, 0xd0, 0x18, + 0x30, 0x74, 0xd2, 0x73, 0xfc, 0x0d, 0xd4, 0x12, 0xf7, 0x9c, 0x04, 0x24, 0xd1, 0x2b, 0xbb, 0xe5, + 0xbd, 0xd6, 0xc1, 0x6f, 0x36, 0xde, 0x56, 0x06, 0x94, 0xff, 0x8e, 0xb8, 0x19, 0x2b, 0x37, 0x87, + 0x77, 0x40, 0x73, 0x43, 0x9a, 0x64, 0xcc, 0x74, 0x75, 0xb7, 0xcc, 0x76, 0xcd, 0x69, 0xc6, 0x8b, + 0xe2, 0x70, 0x92, 0xb9, 0x24, 0xd1, 0x6b, 0x82, 0x97, 0xd3, 0xf8, 0x5b, 0xa8, 0xc7, 0x24, 0x89, + 0x42, 0x9a, 0x90, 0x44, 0x87, 0xdd, 0xf2, 0x5e, 0xe3, 0xe0, 0xb7, 0xb7, 0xf6, 0xc9, 0xca, 0x2d, + 0xf4, 0x68, 0x1a, 0xcf, 0xad, 0xa5, 0x45, 0x1c, 0xc2, 0x76, 0x42, 0xdc, 0x2c, 0xf6, 0xd2, 0xb9, + 0x3d, 0x21, 0x53, 0x8f, 0x7a, 0x5c, 0x53, 0x6f, 0xf0, 0x43, 0xff, 0xf5, 0xe6, 0x3b, 0x49, 0x23, + 0xc7, 0x4b, 0x1b, 0xd6, 0xdd, 0xe4, 0x26, 0x88, 0xbf, 0x01, 0x2d, 0x87, 0xf5, 0x2d, 0x1e, 0xce, + 0xed, 0x37, 0xb1, 0xc8, 0xf7, 0x99, 0x17, 0x93, 0x80, 0xd0, 0xd4, 0x5a, 0x58, 0xc3, 0x2e, 0x34, + 0xc9, 0x55, 0x4a, 0x62, 0xea, 0xf8, 0xf6, 0x24, 0x74, 0x13, 0xbd, 0xc5, 0x63, 0xd8, 0xfc, 0x06, + 0x7b, 0x52, 0xfb, 0x38, 0x74, 0x33, 0x66, 0xdb, 0x61, 0xb0, 0xb5, 0x45, 0x96, 0x70, 0xb2, 0x13, + 0x42, 0x6b, 0xf5, 0x30, 0x31, 0x82, 0xf2, 0x2b, 0x32, 0x97, 0xc9, 0xcb, 0x96, 0xf8, 0x09, 0x54, + 0x2e, 0x1c, 0x3f, 0x23, 0x32, 0x73, 0x3f, 0xdb, 0xd8, 0x81, 0xdc, 0xb2, 0x25, 0xf4, 0xbf, 0x2c, + 0x7d, 0xa1, 0xb4, 0x0f, 0xa1, 0xb9, 0x92, 0x51, 0xb8, 0x01, 0xb5, 0xd3, 0xfe, 0xb3, 0xfe, 0xe0, + 0xac, 0x8f, 0xde, 0xc3, 0x1a, 0xa8, 0x4f, 0xc7, 0xe3, 0x21, 0x52, 0x70, 0x1d, 0x2a, 0x6c, 0x35, + 0x42, 0x25, 0x5c, 0x85, 0xd2, 0xd9, 0x08, 0x95, 0x71, 0x0d, 0xca, 0x67, 0xa3, 0x11, 0x52, 0x4d, + 0x55, 0xd3, 0x50, 0xdd, 0x54, 0xb5, 0x3a, 0x02, 0x53, 0xd5, 0x9a, 0xa8, 0xd5, 0xfe, 0x73, 0x05, + 0xea, 0x83, 0x88, 0xc4, 0x3c, 0x44, 0x56, 0x26, 0xa9, 0x33, 0x4b, 0x74, 0x85, 0xe7, 0x1e, 0x5f, + 0xf3, 0xba, 0xcc, 0x82, 0xc0, 0x89, 0xe7, 0x3c, 0x0c, 0x56, 0x97, 0x82, 0xc4, 0xbb, 0xd0, 0x98, + 0x90, 0xc4, 0x8d, 0x3d, 0xee, 0xb5, 0xac, 0xad, 0x22, 0x74, 0xf3, 0x26, 0xd4, 0xb7, 0x7f, 0x13, + 0xf8, 0x63, 0xd8, 0x0a, 0xf3, 0x08, 0x6c, 0x6f, 0xa2, 0x57, 0x84, 0x1f, 0x0b, 0xcc, 0x98, 0xbc, + 0x76, 0xcd, 0xd9, 0xc5, 0x9a, 0xab, 0xf3, 0x24, 0xed, 0x6e, 0xec, 0xfb, 0xe2, 0x58, 0x7f, 0xa4, + 0xea, 0xf4, 0x65, 0x9b, 0x01, 0xbe, 0xf7, 0xa2, 0x4d, 0x3c, 0x00, 0x98, 0x90, 0x28, 0x26, 0xae, + 0x93, 0x92, 0x09, 0xaf, 0x42, 0xcd, 0x2a, 0x20, 0xef, 0xae, 0x7c, 0xfe, 0xef, 0x99, 0x2d, 0xb2, + 0xb2, 0xfd, 0x47, 0x05, 0xb4, 0x9c, 0x7b, 0x3d, 0xb5, 0x94, 0x9b, 0xa9, 0xf5, 0x04, 0xaa, 0xfc, + 0xa8, 0x1c, 0xe9, 0xc2, 0xfe, 0xe6, 0xd1, 0x73, 0x35, 0x4b, 0xaa, 0x9b, 0xaa, 0x56, 0xe6, 0x95, + 0xa1, 0xa2, 0x4a, 0xfb, 0x5f, 0x0a, 0xa8, 0xec, 0xd5, 0xc0, 0xdb, 0x50, 0x49, 0xbd, 0xd4, 0x27, + 0x72, 0x67, 0x41, 0x5c, 0xf7, 0xaa, 0x74, 0xd3, 0xab, 0x3d, 0x40, 0x29, 0x89, 0x83, 0xc4, 0x0e, + 0xa7, 0x76, 0x42, 0xe2, 0x0b, 0xcf, 0x25, 0xb2, 0x2e, 0x5a, 0x1c, 0x1f, 0x4c, 0x47, 0x02, 0xc5, + 0x26, 0xd4, 0xdc, 0x90, 0xa6, 0x8e, 0x9b, 0xca, 0xa2, 0xf8, 0x74, 0xe3, 0x00, 0x8e, 0x84, 0x9e, + 0x95, 0x1b, 0x60, 0x59, 0x74, 0x41, 0xe2, 0x84, 0xf9, 0x54, 0x15, 0x25, 0x2a, 0x49, 0x53, 0xd5, + 0x2a, 0xa8, 0xda, 0xee, 0x41, 0x4d, 0xea, 0xb0, 0x0a, 0xa7, 0x4e, 0x90, 0xc7, 0xc5, 0xd7, 0xec, + 0x7a, 0xb3, 0xd8, 0x97, 0xe1, 0xb0, 0x25, 0x0b, 0x9f, 0x04, 0x8e, 0xe7, 0x4b, 0xdf, 0x05, 0xd1, + 0x7e, 0x06, 0xf7, 0xd6, 0xd6, 0xe3, 0x06, 0xb7, 0x75, 0x63, 0x8b, 0xf6, 0x3f, 0x4b, 0x50, 0x15, + 0x37, 0x81, 0xc7, 0xd0, 0xf8, 0x2e, 0x09, 0xa9, 0x2d, 0xef, 0x53, 0xe1, 0xc7, 0xf1, 0xf9, 0xc6, + 0xc7, 0x61, 0x8e, 0x06, 0x7d, 0x79, 0xa7, 0xc0, 0xec, 0x48, 0xab, 0x9f, 0x40, 0x73, 0xe2, 0x31, + 0x0f, 0x02, 0x8f, 0x3a, 0x69, 0x18, 0xcb, 0xcd, 0x57, 0x41, 0x36, 0x04, 0xc4, 0xc4, 0x99, 0xd8, + 0x21, 0xf5, 0xe7, 0x3c, 0x5a, 0xcd, 0xd2, 0x18, 0x30, 0xa0, 0xfe, 0x9a, 0x87, 0xa4, 0xf2, 0x0e, + 0xda, 0x57, 0x07, 0x6a, 0xe4, 0xca, 0x09, 0x22, 0x9f, 0xf0, 0xcb, 0x6b, 0x1c, 0x6c, 0x77, 0xc4, + 0xc0, 0xd4, 0xc9, 0x07, 0xa6, 0x4e, 0x97, 0xce, 0xad, 0x5c, 0x48, 0x66, 0xea, 0x9f, 0x6a, 0x00, + 0xcb, 0xc0, 0xd9, 0xf9, 0xc6, 0x64, 0x2a, 0xaf, 0x8b, 0x2d, 0x97, 0x19, 0x5c, 0xf9, 0x91, 0x0c, + 0xae, 0xde, 0xbc, 0x29, 0x1d, 0x6a, 0x13, 0x32, 0x75, 0x32, 0x3f, 0xd5, 0x6b, 0x22, 0x97, 0x24, + 0x89, 0x7f, 0x06, 0x8d, 0x20, 0xf3, 0x53, 0x2f, 0xf2, 0x89, 0x1d, 0x4e, 0x75, 0xd8, 0x55, 0xf6, + 0x14, 0x0b, 0x72, 0x68, 0x30, 0x65, 0xaa, 0x81, 0x73, 0xe5, 0x05, 0x59, 0xc0, 0xfb, 0x95, 0x62, + 0xe5, 0x24, 0x7e, 0x04, 0x77, 0xc8, 0x95, 0xeb, 0x67, 0x89, 0x77, 0x41, 0xec, 0x5c, 0x66, 0x8b, + 0x9f, 0x36, 0x5a, 0x30, 0x9e, 0x4b, 0x61, 0x66, 0xc6, 0xa3, 0x5c, 0xa4, 0x29, 0xcd, 0x08, 0xf2, + 0x9a, 0x19, 0x29, 0xd3, 0xba, 0x6e, 0x46, 0x0a, 0xdf, 0x07, 0x08, 0x9c, 0x2b, 0xdb, 0x27, 0x74, + 0x96, 0x9e, 0xeb, 0xef, 0xef, 0x2a, 0x7b, 0xaa, 0x55, 0x0f, 0x9c, 0xab, 0x13, 0x0e, 0x70, 0xb6, + 0x47, 0x73, 0x36, 0x92, 0x6c, 0x8f, 0x4a, 0xb6, 0x0e, 0xb5, 0xc8, 0x49, 0xd9, 0x35, 0xe9, 0x77, + 0xc4, 0x31, 0x48, 0x92, 0x65, 0x0c, 0xb3, 0xeb, 0xa5, 0x24, 0x48, 0xf4, 0x6d, 0xae, 0xa7, 0x05, + 0xce, 0x95, 0xc1, 0x68, 0xce, 0xf4, 0xa8, 0x64, 0xde, 0x93, 0x4c, 0x8f, 0x0a, 0xe6, 0xc7, 0xb0, + 0x95, 0x51, 0xef, 0xfb, 0x8c, 0x48, 0xfe, 0x4f, 0xb8, 0xe7, 0x0d, 0x81, 0x09, 0x91, 0x5f, 0x40, + 0x8b, 0x19, 0x8f, 0x62, 0xf6, 0x7a, 0xa5, 0x1e, 0x49, 0x74, 0x9d, 0x1b, 0x69, 0x06, 0xce, 0xd5, + 0x70, 0x01, 0x72, 0x31, 0x8f, 0x16, 0xc5, 0x3e, 0x90, 0x62, 0x1e, 0x2d, 0x88, 0xed, 0x80, 0x16, + 0x8b, 0x16, 0x3f, 0xd1, 0x77, 0xc4, 0xd3, 0x96, 0xd3, 0x2c, 0x3f, 0x9c, 0x38, 0x76, 0xe6, 0x7a, + 0x9b, 0x33, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, 0x39, 0x9f, 0x79, 0x8d, 0xd7, + 0xa8, 0xc1, 0xc2, 0x72, 0xe4, 0xb1, 0x84, 0x1d, 0xcf, 0x23, 0x92, 0x58, 0xdc, 0x6c, 0xfb, 0x12, + 0xee, 0xad, 0x65, 0xaf, 0xce, 0x32, 0x75, 0xa8, 0x74, 0x2d, 0xab, 0xfb, 0x02, 0x29, 0x0c, 0x3f, + 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, 0x7b, 0x4f, 0x7a, 0x16, 0x2a, + 0xb3, 0x81, 0xa7, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, 0x9f, 0x3e, 0x3f, 0xec, 0x59, + 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, 0x1e, 0x8d, 0x2d, 0xa3, 0xff, + 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, 0x8b, 0x02, 0xba, 0x36, 0x0a, + 0x61, 0x74, 0xd7, 0x54, 0xb5, 0xbb, 0x68, 0xdb, 0x54, 0xb5, 0x9f, 0x22, 0xdd, 0x54, 0xb5, 0x0f, + 0xd1, 0x47, 0xa6, 0xaa, 0x7d, 0x84, 0xee, 0x9b, 0xaa, 0x76, 0x1f, 0x3d, 0x30, 0x55, 0xed, 0x01, + 0x6a, 0x9b, 0xaa, 0xf6, 0x09, 0x7a, 0x68, 0xaa, 0xda, 0x43, 0xf4, 0xc8, 0x54, 0xb5, 0x47, 0xa8, + 0xd3, 0xfe, 0xab, 0x02, 0xe5, 0xb1, 0x33, 0xdb, 0xe0, 0x6d, 0xb8, 0xd1, 0x4d, 0xca, 0x6f, 0xbf, + 0x9b, 0x88, 0x40, 0xdb, 0xff, 0x51, 0xe0, 0xee, 0x9a, 0x41, 0x1c, 0x4f, 0x0b, 0x43, 0x83, 0xc2, + 0x87, 0x06, 0xf3, 0x4d, 0x06, 0xfb, 0x05, 0x26, 0xe6, 0x9a, 0xe5, 0x08, 0x91, 0x42, 0x73, 0x85, + 0xb5, 0x66, 0x82, 0x78, 0xbe, 0x3a, 0x41, 0xfc, 0xea, 0xd6, 0x7e, 0xc8, 0xef, 0xaa, 0xc2, 0x84, + 0xfc, 0x8f, 0x0a, 0xb4, 0x56, 0xb9, 0x78, 0x28, 0xf3, 0x99, 0x6d, 0xdc, 0x7a, 0x8d, 0x09, 0x49, + 0x98, 0xe9, 0xb0, 0x24, 0x15, 0x29, 0xbc, 0xc1, 0x3d, 0xe7, 0x4f, 0x6c, 0xb9, 0xf0, 0xc4, 0x9a, + 0x50, 0xf2, 0x28, 0x7f, 0xe8, 0x5b, 0x07, 0x5f, 0xbe, 0xae, 0x17, 0x06, 0xb5, 0x4a, 0x1e, 0x65, + 0x31, 0x4d, 0xfd, 0xf0, 0x92, 0x37, 0xf6, 0x37, 0x88, 0xe9, 0x2b, 0x3f, 0xbc, 0xb4, 0xb8, 0x25, + 0xd6, 0x57, 0x9d, 0x2c, 0x3d, 0x0f, 0x63, 0xef, 0x0f, 0x62, 0x8a, 0x66, 0x6f, 0xb5, 0x78, 0x1b, + 0xd0, 0x0a, 0xe3, 0x34, 0xf6, 0x59, 0x8b, 0x4b, 0xc3, 0x57, 0x44, 0x08, 0x89, 0x27, 0x42, 0xe3, + 0x00, 0x63, 0xf2, 0xa9, 0x2c, 0x8c, 0x48, 0xa2, 0x6b, 0xb7, 0x9e, 0xca, 0x98, 0x9a, 0x25, 0xd5, + 0xdb, 0xcf, 0x40, 0x65, 0x87, 0x8e, 0x11, 0x6c, 0x8d, 0x5f, 0x0c, 0x7b, 0xb6, 0xd1, 0xff, 0xba, + 0x7b, 0x62, 0x1c, 0xa3, 0xf7, 0x70, 0x0b, 0x80, 0x23, 0x87, 0xdd, 0x91, 0x71, 0x84, 0x94, 0x85, + 0x44, 0x77, 0x68, 0xd8, 0xcf, 0x7a, 0x2f, 0x50, 0x09, 0xbf, 0x0f, 0x0d, 0x8e, 0x0c, 0xba, 0xa7, + 0xe3, 0xa7, 0x07, 0xa8, 0xdc, 0xfe, 0x0c, 0x4a, 0x06, 0x65, 0x8a, 0x46, 0xbf, 0x60, 0x68, 0x0b, + 0x34, 0xa3, 0x6f, 0xff, 0xee, 0xb4, 0x67, 0xb1, 0x4e, 0xd3, 0x84, 0xba, 0xd1, 0xb7, 0x9f, 0xf6, + 0xba, 0xc7, 0x3d, 0x0b, 0x95, 0xda, 0xdf, 0x81, 0xca, 0x0e, 0x88, 0x59, 0xff, 0xea, 0x64, 0x70, + 0x56, 0x50, 0xbb, 0x03, 0x4d, 0x81, 0x3c, 0x1f, 0x9e, 0x18, 0x47, 0xc6, 0x18, 0x29, 0x0b, 0x68, + 0xd8, 0x1d, 0x8d, 0xce, 0x06, 0xd6, 0x31, 0x2a, 0xe1, 0x6d, 0x40, 0x1c, 0xea, 0x0e, 0x99, 0x54, + 0x77, 0x6c, 0x0c, 0xfa, 0xa8, 0xbc, 0x44, 0x8f, 0x8e, 0x7a, 0xa3, 0x91, 0x7d, 0x34, 0x38, 0xee, + 0x21, 0xb5, 0xfd, 0xef, 0xd2, 0xb2, 0x5a, 0x0b, 0x23, 0x39, 0xfe, 0x8b, 0x52, 0xf8, 0x26, 0x8f, + 0x97, 0x0c, 0x59, 0xba, 0xa7, 0x6f, 0x32, 0xef, 0xaf, 0xc3, 0x44, 0x15, 0x2f, 0x3e, 0xd6, 0x0b, + 0x9c, 0x9d, 0x4f, 0x41, 0x5f, 0xa3, 0xf0, 0x35, 0x2b, 0x3d, 0xf6, 0x92, 0xf0, 0x4b, 0x93, 0x5f, + 0x8d, 0x82, 0xd8, 0xf9, 0xbb, 0xb2, 0x56, 0xe5, 0x87, 0xda, 0xc1, 0xab, 0xd5, 0x76, 0xf0, 0xd6, + 0x63, 0xe3, 0xae, 0x16, 0x9b, 0xc5, 0xdf, 0x14, 0x36, 0x7f, 0xb2, 0x5c, 0xc3, 0xc3, 0x62, 0x00, + 0x8d, 0xdb, 0xd4, 0x27, 0xd7, 0x17, 0x3f, 0xe2, 0xf0, 0x64, 0xf0, 0x5f, 0x00, 0x2c, 0xc1, 0x35, + 0xd1, 0x6e, 0x17, 0xa3, 0xad, 0x17, 0xdc, 0x3a, 0x3c, 0xfa, 0x7d, 0x77, 0xe6, 0xa5, 0xe7, 0xd9, + 0xcb, 0x8e, 0x1b, 0x06, 0xfb, 0xcc, 0x91, 0xc7, 0xc4, 0x0d, 0x93, 0x79, 0x92, 0x12, 0x49, 0x4a, + 0xbf, 0xf6, 0x7f, 0xf8, 0xaf, 0xba, 0x97, 0x55, 0xce, 0xfb, 0xfc, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xab, 0x81, 0x5a, 0xfc, 0xcf, 0x13, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index b3b9b89d995..c9f0386564c 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -31,8 +31,7 @@ message Swagger { // field 9 is reserved for 'definitions', which at this time are already // exposed as and customizable as proto messages. reserved 9; - // field 10 is reserved for 'responses'. - reserved 10; + map responses = 10; SecurityDefinitions security_definitions = 11; repeated SecurityRequirement security = 12; // field 13 is reserved for 'tags', which are supposed to be exposed as and @@ -57,13 +56,29 @@ message Operation { repeated string produces = 7; // field 8 is reserved for 'parameters'. reserved 8; - // field 9 is reserved for 'responses'. - reserved 9; + map responses = 9; repeated string schemes = 10; bool deprecated = 11; repeated SecurityRequirement security = 12; } +// `Response` is a representation of OpenAPI v2 specification's Response object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject +// +message Response { + // `Description` is a short description of the response. + // GFM syntax can be used for rich text representation. + string description = 1; + // `Schema` optionally defines the structure of the response. + // If `Schema` is not provided, it means there is no content to the response. + Schema schema = 2; + // field 3 is reserved for 'headers'. + reserved 3; + // field 3 is reserved for 'example'. + reserved 4; +} + // `Info` is a representation of OpenAPI v2 specification's Info object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject @@ -132,8 +147,13 @@ message JSONSchema { reserved 1; // field 2 is reserved for '$schema', omitted from OpenAPI v2. reserved 2; - // field 3 is reserved for '$ref', although it is unclear how it would be used. - reserved 3; + // Ref is used to define an external reference to include in the message. + // This could be a fully qualified proto message reference, and that type must be imported + // into the protofile. If no message is identified, the Ref will be used verbatim in + // the output. + // For example: + // `ref: ".google.protobuf.Timestamp"`. + string ref = 3; // field 4 is reserved for '$comment', omitted from OpenAPI v2. reserved 4; string title = 5; diff --git a/runtime/internal/stream_chunk.pb.go b/runtime/internal/stream_chunk.pb.go index a06c722c167..f4af074808b 100644 --- a/runtime/internal/stream_chunk.pb.go +++ b/runtime/internal/stream_chunk.pb.go @@ -22,11 +22,11 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // StreamError is a response type which is returned when // streaming rpc returns an error. type StreamError struct { - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details" json:"details,omitempty"` + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` + Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` From ffaaaf214149842155e58f39364dd459c2571187 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 17 Mar 2018 20:18:18 +0000 Subject: [PATCH 0011/1518] Stop marshalling any.Any types unnecessarily. Fixes #576. Adds a test case for marshalling of details as well. --- runtime/BUILD.bazel | 1 + runtime/errors.go | 17 +++-------------- runtime/errors_test.go | 37 ++++++++++++++++++++++++++++++++----- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index e04db4f7096..9fce0447165 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -74,6 +74,7 @@ go_test( "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", "@com_github_golang_protobuf//ptypes/wrappers:go_default_library", "@org_golang_google_genproto//protobuf/field_mask:go_default_library", + "@org_golang_google_genproto//googleapis/rpc/errdetails:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", diff --git a/runtime/errors.go b/runtime/errors.go index 5cfedbf790a..d112dfb7e13 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -6,7 +6,6 @@ import ( "net/http" "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/any" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -94,19 +93,9 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w } body := &errorBody{ - Error: s.Message(), - Code: int32(s.Code()), - } - - for _, detail := range s.Details() { - if det, ok := detail.(proto.Message); ok { - a, err := ptypes.MarshalAny(det) - if err != nil { - grpclog.Infof("Failed to marshal any: %v", err) - } else { - body.Details = append(body.Details, a) - } - } + Error: s.Message(), + Code: int32(s.Code()), + Details: s.Proto().GetDetails(), } buf, merr := marshaler.Marshal(body) diff --git a/runtime/errors_test.go b/runtime/errors_test.go index 2c7ecf18656..de51052893f 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -1,6 +1,7 @@ package runtime_test import ( + "context" "encoding/json" "fmt" "net/http" @@ -8,8 +9,8 @@ import ( "strings" "testing" - "context" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -17,10 +18,15 @@ import ( func TestDefaultHTTPError(t *testing.T) { ctx := context.Background() + statusWithDetails, _ := status.New(codes.FailedPrecondition, "failed precondition").WithDetails( + &errdetails.PreconditionFailure{}, + ) + for _, spec := range []struct { - err error - status int - msg string + err error + status int + msg string + details string }{ { err: fmt.Errorf("example error"), @@ -32,10 +38,16 @@ func TestDefaultHTTPError(t *testing.T) { status: http.StatusNotFound, msg: "no such resource", }, + { + err: statusWithDetails.Err(), + status: http.StatusPreconditionFailed, + msg: "failed precondition", + details: "type.googleapis.com/google.rpc.PreconditionFailure", + }, } { w := httptest.NewRecorder() req, _ := http.NewRequest("", "", nil) // Pass in an empty request to match the signature - runtime.DefaultHTTPError(ctx, &runtime.ServeMux{}, &runtime.JSONBuiltin{}, w, req, spec.err) + runtime.DefaultHTTPError(ctx, &runtime.ServeMux{}, &runtime.JSONPb{}, w, req, spec.err) if got, want := w.Header().Get("Content-Type"), "application/json"; got != want { t.Errorf(`w.Header().Get("Content-Type") = %q; want %q; on spec.err=%v`, got, want, spec.err) @@ -53,5 +65,20 @@ func TestDefaultHTTPError(t *testing.T) { if got, want := body["error"].(string), spec.msg; !strings.Contains(got, want) { t.Errorf(`body["error"] = %q; want %q; on spec.err=%v`, got, want, spec.err) } + + if spec.details != "" { + details, ok := body["details"].([]interface{}) + if !ok { + t.Errorf(`body["details"] = %T; want %T`, body["details"], []interface{}{}) + continue + } + if len(details) != 1 { + t.Errorf(`len(body["details"]) = %v; want 1`, len(details)) + continue + } + if details[0].(map[string]interface{})["@type"] != spec.details { + t.Errorf(`details.@type = %s; want %s`, details[0].(map[string]interface{})["@type"], spec.details) + } + } } } From 11bef10d24deac2b8a97fbc8e3342879dea763bf Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Sat, 23 Jun 2018 08:46:17 +0900 Subject: [PATCH 0012/1518] protoc-gen-swagger emits method summary and descriptions * Fix protoc-gen-swagger to output gRPC method summary and descriptions as Swagger expects. * Add a gRPC method comment to examples proto and regenerate examples --- .../abe/a_bit_of_everything_service_api.go | 3 +- .../abe/camel_case_service_name_api.go | 3 +- .../proto/examplepb/a_bit_of_everything.pb.go | 22 ++++++---- .../proto/examplepb/a_bit_of_everything.proto | 3 ++ .../a_bit_of_everything.swagger.json | 4 ++ protoc-gen-swagger/genswagger/template.go | 42 ++++++++++++------- 6 files changed, 51 insertions(+), 26 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 19c6fdaa7dd..da0dd1a7153 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -39,7 +39,8 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin } /** - * + * Create a new ABitOfEverything + * This API creates a new ABitOfEverything * * @param floatValue * @param doubleValue diff --git a/examples/clients/abe/camel_case_service_name_api.go b/examples/clients/abe/camel_case_service_name_api.go index 43c92f74152..ff49b76851b 100644 --- a/examples/clients/abe/camel_case_service_name_api.go +++ b/examples/clients/abe/camel_case_service_name_api.go @@ -37,7 +37,8 @@ func NewCamelCaseServiceNameApiWithBasePath(basePath string) *CamelCaseServiceNa } /** - * + * Create a new ABitOfEverything + * This API creates a new ABitOfEverything * * @return *ProtobufEmpty */ diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 03f41a42483..30812133da1 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0} } // DeepEnum is one or zero. @@ -79,7 +79,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -447,7 +447,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{0, 0} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -499,7 +499,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{1} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -538,7 +538,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_30755264634f37fa, []int{2} + return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -596,6 +596,9 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ABitOfEverythingServiceClient interface { + // Create a new ABitOfEverything + // + // This API creates a new ABitOfEverything Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) @@ -745,6 +748,9 @@ func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, i // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. type ABitOfEverythingServiceServer interface { + // Create a new ABitOfEverything + // + // This API creates a new ABitOfEverything Create(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) @@ -1195,10 +1201,10 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_30755264634f37fa) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_f41df16efbe7c49a) } -var fileDescriptor_a_bit_of_everything_30755264634f37fa = []byte{ +var fileDescriptor_a_bit_of_everything_f41df16efbe7c49a = []byte{ // 2221 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x1b, 0x49, 0xd9, 0xf7, 0x48, 0xb6, 0x62, 0x3f, 0xfe, 0x92, 0xdb, 0xd9, 0xc4, 0xd1, 0x3a, 0xeb, 0x8e, 0x92, diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 8f52dc97580..1f01701c0a7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -221,6 +221,9 @@ service ABitOfEverythingService { } }; + // Create a new ABitOfEverything + // + // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { // TODO add enum_value option (google.api.http) = { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 59452a74eb5..926ea194117 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -348,6 +348,8 @@ }, "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}": { "post": { + "summary": "Create a new ABitOfEverything", + "description": "This API creates a new ABitOfEverything", "operationId": "Create", "responses": { "200": { @@ -770,6 +772,8 @@ }, "/v2/example/empty": { "get": { + "summary": "Create a new ABitOfEverything", + "description": "This API creates a new ABitOfEverything", "operationId": "Empty", "responses": { "200": { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 41ffdde2c7c..04a193fc4ff 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -627,7 +627,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } - methComments := protoComments(reg, svc.File, nil, "Service", int32(svcIdx), methProtoPath, int32(methIdx)) + methComments := protoComments(reg, svc.File, nil, "Method", int32(svcIdx), methProtoPath, int32(methIdx)) if err := updateSwaggerDataFromComments(operationObject, methComments); err != nil { panic(err) } @@ -1069,6 +1069,8 @@ func protoComments(reg *descriptor.Registry, file *descriptor.File, outers []str var messageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "MessageType") var nestedProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)), "NestedType") var packageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") +var serviceProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Service") +var methodProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.ServiceDescriptorProto)(nil)), "Method") func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, typeIndex int32, fieldPaths []int32) bool { if typeName == "Package" && typeIndex == packageProtoPath { @@ -1084,31 +1086,39 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type return false } - typeNameDescriptor := reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)) - if len(outerPaths) > 0 { - if paths[0] != messageProtoPath || paths[1] != outerPaths[0] { + if typeName == "Method" { + if paths[0] != serviceProtoPath || paths[2] != methodProtoPath { return false } paths = paths[2:] - outerPaths = outerPaths[1:] + } else { + typeNameDescriptor := reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)) - for i, v := range outerPaths { - if paths[i*2] != nestedProtoPath || paths[i*2+1] != v { + if len(outerPaths) > 0 { + if paths[0] != messageProtoPath || paths[1] != outerPaths[0] { return false } - } - paths = paths[len(outerPaths)*2:] + paths = paths[2:] + outerPaths = outerPaths[1:] + + for i, v := range outerPaths { + if paths[i*2] != nestedProtoPath || paths[i*2+1] != v { + return false + } + } + paths = paths[len(outerPaths)*2:] - if typeName == "MessageType" { - typeName = "NestedType" + if typeName == "MessageType" { + typeName = "NestedType" + } + typeNameDescriptor = reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)) } - typeNameDescriptor = reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)) - } - if paths[0] != protoPathIndex(typeNameDescriptor, typeName) || paths[1] != typeIndex { - return false + if paths[0] != protoPathIndex(typeNameDescriptor, typeName) || paths[1] != typeIndex { + return false + } + paths = paths[2:] } - paths = paths[2:] for i, v := range fieldPaths { if paths[i] != v { From 41568b5bb87c1d6fee04b3dbf0f9c8cf5beafc4f Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Fri, 8 Jun 2018 23:06:15 +0900 Subject: [PATCH 0013/1518] Allow explicit empty security definition to overwrite existing definitions. It enables to clear default security configuration in operationObject.Security (to make public api). protoc-gen-swagger doesn't allow empty array (and it causes segfault) in operationObject.Security but it is really needed resetting security requirement configuration by Swagger. --- protoc-gen-swagger/genswagger/template.go | 17 +++++++++++------ protoc-gen-swagger/genswagger/types.go | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 04a193fc4ff..0ffe369cc9f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -653,21 +653,26 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } if opts.Security != nil { newSecurity := []swaggerSecurityRequirementObject{} - if operationObject.Security == nil { - newSecurity = []swaggerSecurityRequirementObject{} - } else { - newSecurity = operationObject.Security + if operationObject.Security != nil { + newSecurity = *operationObject.Security } for _, secReq := range opts.Security { newSecReq := swaggerSecurityRequirementObject{} for secReqKey, secReqValue := range secReq.SecurityRequirement { + if secReqValue == nil { + continue + } + newSecReqValue := make([]string, len(secReqValue.Scope)) copy(newSecReqValue, secReqValue.Scope) newSecReq[secReqKey] = newSecReqValue } - newSecurity = append(newSecurity, newSecReq) + + if len(newSecReq) > 0 { + newSecurity = append(newSecurity, newSecReq) + } } - operationObject.Security = newSecurity + operationObject.Security = &newSecurity } if opts.Responses != nil { for name, resp := range opts.Responses { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 0c85d941135..4a68a254a6b 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -105,7 +105,7 @@ type swaggerOperationObject struct { Tags []string `json:"tags,omitempty"` Deprecated bool `json:"deprecated,omitempty"` - Security []swaggerSecurityRequirementObject `json:"security,omitempty"` + Security *[]swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` } From ee3ef70b7777cde4e61e4e224cb11e92beecee6a Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Sat, 9 Jun 2018 18:08:25 +0900 Subject: [PATCH 0014/1518] Change GetQuery to be a public api by clear default security configuration --- .../abe/a_bit_of_everything_service_api.go | 13 - .../proto/examplepb/a_bit_of_everything.pb.go | 300 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 2 + .../a_bit_of_everything.swagger.json | 1 + 4 files changed, 153 insertions(+), 163 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index da0dd1a7153..4cc9d609e59 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -554,19 +554,6 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName strin var localVarPostBody interface{} var localVarFileName string var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") // add default headers if any for key := range a.Configuration.DefaultHeader { localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 30812133da1..5e3779c36c7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0} } // DeepEnum is one or zero. @@ -79,7 +79,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -447,7 +447,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{0, 0} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -499,7 +499,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{1} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -538,7 +538,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f41df16efbe7c49a, []int{2} + return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1201,148 +1201,148 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_f41df16efbe7c49a) -} - -var fileDescriptor_a_bit_of_everything_f41df16efbe7c49a = []byte{ - // 2221 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x1b, 0x49, - 0xd9, 0xf7, 0x48, 0xb6, 0x62, 0x3f, 0xfe, 0x92, 0xdb, 0xd9, 0xc4, 0xd1, 0x3a, 0xeb, 0x8e, 0x92, - 0x7d, 0x57, 0xf1, 0xc6, 0x33, 0x89, 0xe2, 0x77, 0x2b, 0x31, 0x05, 0x41, 0xb6, 0xb5, 0x89, 0x37, - 0x1b, 0xc7, 0x99, 0xec, 0x86, 0x54, 0x2a, 0x8b, 0x69, 0xcd, 0xb4, 0xa4, 0x49, 0x34, 0xd3, 0xc3, - 0x74, 0x8f, 0x6d, 0x61, 0x0c, 0x05, 0x54, 0x41, 0xed, 0x89, 0x2a, 0x73, 0xe3, 0xb0, 0x07, 0xa8, - 0xa2, 0xb8, 0x50, 0x9c, 0xb8, 0x40, 0x15, 0x9c, 0x38, 0xed, 0x91, 0x2a, 0x0e, 0xdc, 0xa8, 0xe2, - 0xc0, 0x9f, 0x41, 0x75, 0xcf, 0x8c, 0x3c, 0x92, 0x2d, 0x1c, 0x25, 0xd4, 0x5e, 0xec, 0xe9, 0xee, - 0xdf, 0xf3, 0xfd, 0xd1, 0x4f, 0x0b, 0xca, 0x74, 0x8f, 0xb8, 0x7e, 0x8b, 0x72, 0xc3, 0x0f, 0x98, - 0x60, 0x46, 0xbc, 0xf4, 0x6b, 0x06, 0xd9, 0xae, 0x39, 0x62, 0x9b, 0xd5, 0xb7, 0xe9, 0x0e, 0x0d, - 0xda, 0xa2, 0xe9, 0x78, 0x0d, 0x5d, 0x61, 0xd0, 0x42, 0x23, 0xf0, 0x2d, 0xbd, 0x41, 0x04, 0xdd, - 0x25, 0x6d, 0x3d, 0x61, 0xa0, 0x77, 0x48, 0x0b, 0xf3, 0x0d, 0xc6, 0x1a, 0x2d, 0x6a, 0x10, 0xdf, - 0x31, 0x88, 0xe7, 0x31, 0x41, 0x84, 0xc3, 0x3c, 0x1e, 0x91, 0x17, 0xde, 0x8e, 0x4f, 0xd5, 0xaa, - 0x16, 0xd6, 0x0d, 0xea, 0xfa, 0xa2, 0x1d, 0x1f, 0xbe, 0xd3, 0x7b, 0x68, 0x87, 0x81, 0xa2, 0x8e, - 0xcf, 0x71, 0x8f, 0xbe, 0x3c, 0xac, 0x19, 0x2e, 0xe5, 0x9c, 0x34, 0x68, 0x8c, 0xb8, 0x74, 0x1c, - 0x51, 0xee, 0x81, 0x2c, 0xf4, 0x0a, 0x11, 0x8e, 0x4b, 0xb9, 0x20, 0xae, 0x1f, 0x03, 0xae, 0xa9, - 0x7f, 0xd6, 0x52, 0x83, 0x7a, 0x4b, 0x7c, 0x97, 0x34, 0x1a, 0x34, 0x30, 0x98, 0xaf, 0x8c, 0x38, - 0x6e, 0x50, 0xf1, 0x57, 0x33, 0x90, 0xaf, 0xac, 0x3a, 0xe2, 0x61, 0xbd, 0xda, 0x71, 0x15, 0xfa, - 0x0c, 0x26, 0xb9, 0xe3, 0x35, 0x5a, 0x74, 0xdb, 0xa3, 0x5c, 0x50, 0x7b, 0xee, 0x02, 0xd6, 0x4a, - 0xe3, 0xe5, 0x5b, 0xfa, 0x29, 0xce, 0xd3, 0x7b, 0x39, 0xe9, 0x9b, 0x8a, 0xde, 0x9c, 0x88, 0xd8, - 0x45, 0x2b, 0x84, 0x60, 0x38, 0x0c, 0x1d, 0x7b, 0x4e, 0xc3, 0x5a, 0x69, 0xcc, 0x54, 0xdf, 0x68, - 0x0b, 0x72, 0xb1, 0xac, 0x0c, 0xce, 0xbe, 0x91, 0xac, 0x98, 0x0f, 0x5a, 0x80, 0xf1, 0x7a, 0x8b, - 0x11, 0xb1, 0xbd, 0x43, 0x5a, 0x21, 0x9d, 0xcb, 0x62, 0xad, 0x94, 0x31, 0x41, 0x6d, 0x3d, 0x91, - 0x3b, 0xe8, 0x12, 0x4c, 0xd8, 0x2c, 0xac, 0xb5, 0x68, 0x8c, 0x18, 0xc6, 0x5a, 0x49, 0x33, 0xc7, - 0xa3, 0xbd, 0x08, 0xb2, 0x00, 0xe3, 0x8e, 0x27, 0x3e, 0x58, 0x8e, 0x11, 0x23, 0x58, 0x2b, 0x65, - 0x4d, 0x50, 0x5b, 0x1d, 0x1e, 0x61, 0x1a, 0x91, 0xc3, 0x5a, 0x69, 0xd8, 0x1c, 0x0f, 0x53, 0x90, - 0x88, 0xc7, 0xcd, 0x72, 0x8c, 0x38, 0x83, 0xb5, 0xd2, 0x88, 0xe2, 0x71, 0xb3, 0x1c, 0x01, 0x2e, - 0xc3, 0x64, 0xdd, 0xd9, 0xa3, 0x76, 0x87, 0xc9, 0x28, 0xd6, 0x4a, 0x39, 0x73, 0x22, 0xde, 0xec, - 0x06, 0x75, 0xf8, 0x8c, 0x61, 0xad, 0x74, 0x26, 0x06, 0x25, 0x9c, 0x2e, 0x02, 0xd4, 0x18, 0x6b, - 0xc5, 0x08, 0xc0, 0x5a, 0x69, 0xd4, 0x1c, 0x93, 0x3b, 0x1d, 0x65, 0xb9, 0x08, 0x1c, 0xaf, 0x11, - 0x03, 0xc6, 0x95, 0xff, 0xc7, 0xa3, 0xbd, 0x8e, 0xb2, 0xb5, 0xb6, 0xa0, 0x3c, 0x46, 0x5c, 0xc4, - 0x5a, 0x69, 0xc2, 0x04, 0xb5, 0xd5, 0x65, 0x70, 0x47, 0x8d, 0x49, 0xac, 0x95, 0x26, 0x23, 0x83, - 0x13, 0x2d, 0xee, 0x03, 0x50, 0x2f, 0x74, 0x63, 0xc0, 0x14, 0xd6, 0x4a, 0x53, 0xe5, 0x6b, 0xa7, - 0x86, 0x73, 0x33, 0x74, 0x69, 0xe0, 0x58, 0x55, 0x2f, 0x74, 0xcd, 0x31, 0x49, 0x1f, 0x31, 0x7b, - 0x17, 0xa6, 0x78, 0xb7, 0xe1, 0xd3, 0x58, 0x2b, 0x4d, 0x9b, 0x93, 0xbc, 0xcb, 0xf2, 0x0e, 0xac, - 0xe3, 0xc4, 0x3c, 0xd6, 0x4a, 0xf9, 0x04, 0x96, 0x0a, 0x17, 0x4f, 0x6b, 0x3f, 0x83, 0xb5, 0xd2, - 0x8c, 0x39, 0xce, 0x53, 0xda, 0xc7, 0x90, 0x0e, 0x1f, 0x84, 0xb5, 0x12, 0x8a, 0x20, 0x09, 0x97, - 0x32, 0xbc, 0x15, 0x50, 0x9f, 0x12, 0x41, 0xed, 0xed, 0x2e, 0x87, 0xce, 0xe2, 0x6c, 0x69, 0xcc, - 0x9c, 0x4d, 0x0e, 0x1f, 0xa7, 0x1c, 0x7b, 0x1b, 0xc6, 0x99, 0x47, 0x65, 0x47, 0x92, 0x0d, 0x63, - 0xee, 0xac, 0x2a, 0xa8, 0x73, 0x7a, 0x54, 0xcc, 0x7a, 0x52, 0xcc, 0x7a, 0x55, 0x9e, 0xde, 0x1b, - 0x32, 0x41, 0x81, 0xd5, 0x0a, 0x5d, 0x86, 0x89, 0x88, 0x34, 0x92, 0x35, 0xf7, 0x96, 0x0c, 0xdb, - 0xbd, 0x21, 0x33, 0x62, 0x18, 0x09, 0x41, 0xcf, 0x61, 0xcc, 0x25, 0x7e, 0xac, 0xc7, 0x39, 0x55, - 0x42, 0x77, 0x06, 0x2f, 0xa1, 0x07, 0xc4, 0x57, 0xea, 0x56, 0x3d, 0x11, 0xb4, 0xcd, 0x51, 0x37, - 0x5e, 0xa2, 0x3d, 0x98, 0x75, 0x89, 0xef, 0xf7, 0xda, 0x7b, 0x5e, 0xc9, 0xb9, 0xf7, 0x5a, 0x72, - 0xfc, 0x2e, 0xff, 0x44, 0x02, 0x67, 0xdc, 0xde, 0xfd, 0x94, 0xe4, 0xa8, 0xac, 0x63, 0xc9, 0x73, - 0x6f, 0x26, 0x39, 0x6a, 0x15, 0xc7, 0x25, 0xa7, 0xf6, 0xd1, 0x0a, 0xcc, 0x79, 0xcc, 0x5b, 0x63, - 0xde, 0x0e, 0xf5, 0x64, 0xc7, 0x24, 0xad, 0x4d, 0xe2, 0x46, 0x7d, 0x61, 0xae, 0xa0, 0x2a, 0xa7, - 0xef, 0x39, 0x5a, 0x83, 0xe9, 0x4e, 0x5b, 0x8e, 0x35, 0x7e, 0x5b, 0x45, 0xbc, 0x70, 0x2c, 0xe2, - 0x9f, 0x24, 0x38, 0x73, 0xaa, 0x43, 0x12, 0x31, 0x79, 0x0e, 0x9d, 0x4c, 0xda, 0x4e, 0x15, 0xd4, - 0x3c, 0xce, 0x0e, 0x5c, 0x50, 0x33, 0x09, 0xa3, 0x6a, 0x52, 0x58, 0x85, 0xdf, 0x6a, 0x90, 0x3b, - 0xea, 0xc7, 0x1e, 0x71, 0x69, 0xd2, 0x8f, 0xe5, 0x37, 0x3a, 0x07, 0x39, 0xe2, 0xb2, 0xd0, 0x13, - 0x73, 0x19, 0x55, 0xe1, 0xf1, 0x0a, 0x3d, 0x82, 0x0c, 0x7b, 0xa9, 0x9a, 0xe9, 0x54, 0xb9, 0xf2, - 0xba, 0x3d, 0x5a, 0x5f, 0xa7, 0xd4, 0x57, 0x8a, 0x65, 0xd8, 0xcb, 0xe2, 0x02, 0x8c, 0x26, 0x6b, - 0x34, 0x06, 0x23, 0x1f, 0x56, 0x3e, 0x7e, 0x5c, 0xcd, 0x0f, 0xa1, 0x51, 0x18, 0xfe, 0xc4, 0xfc, - 0xb4, 0x9a, 0xd7, 0x0a, 0x0e, 0x4c, 0x76, 0x25, 0x26, 0xca, 0x43, 0xf6, 0x25, 0x6d, 0xc7, 0xfa, - 0xca, 0x4f, 0xb4, 0x0a, 0x23, 0x91, 0x77, 0x32, 0xaf, 0xd1, 0x6e, 0x22, 0xd2, 0x95, 0xcc, 0x2d, - 0xad, 0xb0, 0x0e, 0xe7, 0x4e, 0xce, 0xcd, 0x13, 0x64, 0x9e, 0x4d, 0xcb, 0x1c, 0x4b, 0x73, 0xf9, - 0x41, 0xc2, 0xa5, 0x37, 0xcf, 0x4e, 0xe0, 0xb2, 0x99, 0xe6, 0xf2, 0x26, 0xf7, 0xde, 0x91, 0xfc, - 0x95, 0x3f, 0x6b, 0x87, 0x95, 0x3f, 0x6a, 0xf0, 0x9d, 0xc5, 0xd9, 0x0a, 0xae, 0x39, 0x02, 0xb3, - 0x3a, 0x3e, 0x1a, 0x84, 0xca, 0x1b, 0x1b, 0x9e, 0x48, 0x52, 0xb6, 0x8d, 0x2d, 0xe6, 0xfa, 0x2d, - 0xc7, 0x92, 0xc9, 0x81, 0xe3, 0x49, 0x03, 0x8b, 0xb6, 0x4f, 0xb1, 0x60, 0xd8, 0x62, 0x3b, 0x34, - 0xc0, 0x2e, 0xf1, 0xda, 0xb8, 0x4e, 0x89, 0x08, 0x03, 0xca, 0x25, 0xaf, 0xad, 0x24, 0x77, 0x17, - 0x9f, 0xc0, 0x95, 0x0f, 0x1d, 0xcf, 0xc6, 0x2c, 0x14, 0xd8, 0x65, 0x01, 0xc5, 0xa4, 0x26, 0x3f, - 0x8f, 0x0d, 0x14, 0x7a, 0x53, 0x08, 0x9f, 0xaf, 0x18, 0x46, 0xc3, 0x11, 0xcd, 0xb0, 0xa6, 0x5b, - 0xcc, 0x35, 0xa4, 0x9d, 0x4b, 0xd4, 0x62, 0xbc, 0xcd, 0x05, 0x8d, 0x97, 0xb1, 0xd9, 0xab, 0x93, - 0x49, 0xb7, 0x54, 0x36, 0x15, 0x0b, 0x30, 0xbc, 0xca, 0xec, 0xf6, 0x49, 0x89, 0x5a, 0x7c, 0x0e, - 0xd3, 0x0f, 0x22, 0xb5, 0xbf, 0xe5, 0x88, 0xa6, 0x82, 0x4d, 0x41, 0xa6, 0x33, 0x5d, 0x64, 0x1c, - 0x1b, 0xdd, 0x86, 0x61, 0x9b, 0x08, 0x12, 0x7b, 0xf8, 0xdd, 0x53, 0x3d, 0x2c, 0x99, 0x98, 0x8a, - 0x64, 0x11, 0xc3, 0x78, 0x2a, 0x53, 0x64, 0x4e, 0x3e, 0xab, 0x9a, 0x0f, 0xf3, 0x43, 0xe8, 0x0c, - 0x64, 0x1f, 0x6e, 0x56, 0xf3, 0x5a, 0xf9, 0xf7, 0x67, 0xe1, 0x7c, 0xaf, 0xbd, 0x8f, 0x69, 0xb0, - 0xe3, 0x58, 0x14, 0x7d, 0x91, 0x85, 0xdc, 0x5a, 0x20, 0x0b, 0x0f, 0xdd, 0x18, 0x38, 0xae, 0x85, - 0xc1, 0x49, 0x8a, 0xbf, 0xcb, 0xfc, 0xf8, 0x6f, 0xff, 0xfa, 0x45, 0xe6, 0x37, 0x99, 0xe2, 0xaf, - 0x33, 0xc6, 0xce, 0x8d, 0x64, 0x22, 0x3e, 0x69, 0x1e, 0x36, 0xf6, 0x53, 0xd3, 0xd1, 0x81, 0xb1, - 0x9f, 0x1e, 0x85, 0x0e, 0x8c, 0xfd, 0xd4, 0x15, 0x78, 0x60, 0x70, 0xea, 0x93, 0x80, 0x08, 0x16, - 0x18, 0xfb, 0x61, 0xd7, 0xc1, 0x7e, 0xea, 0x32, 0x3d, 0x30, 0xf6, 0xbb, 0x6e, 0xe0, 0x64, 0x9d, - 0x3a, 0x3f, 0x1a, 0x4e, 0x0e, 0x8c, 0xfd, 0xf4, 0x4d, 0xf2, 0x75, 0x2e, 0x02, 0x3f, 0xa0, 0x75, - 0x67, 0xcf, 0x58, 0x3c, 0x88, 0x84, 0xa4, 0xc8, 0x78, 0x2f, 0x1f, 0xde, 0x2b, 0x88, 0xf7, 0x10, - 0x74, 0x2b, 0xd9, 0xaf, 0x4d, 0x1f, 0xa0, 0x2f, 0x34, 0x80, 0x28, 0x40, 0x2a, 0x71, 0xbe, 0x9a, - 0x20, 0x2d, 0xaa, 0x18, 0x5d, 0x29, 0x2e, 0x9c, 0x12, 0xa1, 0x15, 0x6d, 0x11, 0x7d, 0x1f, 0x72, - 0x1f, 0x33, 0xf6, 0x32, 0xf4, 0xd1, 0xb4, 0x2e, 0x1f, 0x03, 0xfa, 0x86, 0x1d, 0x67, 0xfb, 0xeb, - 0x48, 0xd6, 0x95, 0xe4, 0x12, 0xfa, 0xbf, 0x53, 0x73, 0x43, 0xce, 0xe4, 0x07, 0xe8, 0xa7, 0x1a, - 0xe4, 0x3e, 0xf5, 0xed, 0xd7, 0xcc, 0xdf, 0x3e, 0xd3, 0x4d, 0xf1, 0x86, 0xd2, 0xe2, 0xfd, 0xc2, - 0x2b, 0x6a, 0x21, 0xdd, 0xf0, 0x73, 0x0d, 0x72, 0xeb, 0xb4, 0x45, 0x05, 0x3d, 0xee, 0x87, 0x7e, - 0x62, 0x9e, 0x1f, 0x56, 0xde, 0xaf, 0x5d, 0x85, 0x29, 0x80, 0x8a, 0xef, 0xdc, 0xa7, 0xed, 0x4a, - 0x28, 0x9a, 0x68, 0x08, 0xce, 0x43, 0xee, 0xa1, 0xfc, 0x2c, 0xa3, 0x49, 0x18, 0x0e, 0x28, 0xb1, - 0x61, 0x64, 0x37, 0x70, 0x04, 0x8d, 0x5c, 0xb3, 0xf8, 0xaa, 0xae, 0xf9, 0xa7, 0x06, 0xa3, 0x77, - 0xa9, 0x78, 0x14, 0xd2, 0xa0, 0xfd, 0xbf, 0x74, 0xce, 0xe7, 0xda, 0x61, 0xc5, 0x2c, 0x6e, 0xc2, - 0xfc, 0x49, 0x7d, 0xb5, 0x23, 0x70, 0xc0, 0x7e, 0xfa, 0x54, 0x53, 0xd6, 0xe9, 0xe8, 0xda, 0x69, - 0xd6, 0x7d, 0x57, 0xb2, 0x4f, 0x6c, 0xfc, 0x6b, 0x16, 0x86, 0xab, 0x56, 0x93, 0xa1, 0x52, 0x1f, - 0xfb, 0x78, 0x58, 0xd3, 0xa3, 0x8b, 0x32, 0x09, 0xc6, 0x2b, 0x23, 0x8b, 0xff, 0xce, 0x1c, 0x56, - 0x7e, 0x94, 0x81, 0x09, 0x6a, 0x35, 0x19, 0xe6, 0x51, 0xc3, 0x84, 0x51, 0xb5, 0x0a, 0x7c, 0x0b, - 0xcd, 0x3c, 0x0e, 0x5d, 0x97, 0x04, 0xed, 0x15, 0x5c, 0x8d, 0xb7, 0x0a, 0xf9, 0x75, 0xca, 0xad, - 0xc0, 0x51, 0x4f, 0x59, 0xb5, 0x5b, 0x5c, 0x07, 0xd4, 0xed, 0x26, 0xa5, 0xed, 0x80, 0xce, 0xf9, - 0xe8, 0x0e, 0x64, 0xff, 0xff, 0xfa, 0x4d, 0x74, 0x0b, 0x3e, 0x30, 0xa9, 0x08, 0x03, 0x8f, 0xda, - 0x78, 0xb7, 0x49, 0x3d, 0x2c, 0x9a, 0x14, 0x07, 0x94, 0xb3, 0x30, 0xb0, 0x28, 0x76, 0x38, 0x16, - 0xd4, 0xf5, 0x59, 0x40, 0x02, 0xa7, 0xd5, 0xc6, 0xa1, 0x47, 0x76, 0x88, 0xd3, 0x22, 0xb5, 0x16, - 0xd5, 0x3f, 0xfa, 0x1a, 0x64, 0x97, 0xaf, 0x2f, 0xa3, 0x65, 0x58, 0xfc, 0x2f, 0x0c, 0x6c, 0x46, - 0x39, 0xf6, 0x98, 0xc0, 0x74, 0xcf, 0xe1, 0x42, 0x47, 0x39, 0x18, 0xfe, 0x65, 0x46, 0xcb, 0xaa, - 0xc0, 0x7c, 0x76, 0x7a, 0x60, 0xa4, 0x63, 0x8c, 0xfd, 0xa8, 0xa3, 0x3d, 0xbb, 0x50, 0xcc, 0x1b, - 0x3b, 0xe5, 0x0e, 0x5e, 0x9e, 0xad, 0x44, 0xd7, 0xff, 0x33, 0x84, 0x8e, 0x1d, 0xa1, 0x3f, 0x68, - 0x30, 0x21, 0x27, 0xac, 0x2d, 0x22, 0x9a, 0xca, 0x43, 0x5f, 0x4d, 0x9f, 0xbb, 0xa3, 0x6c, 0xbb, - 0x5d, 0x5c, 0x3e, 0xb5, 0xa4, 0xba, 0x7e, 0x6c, 0xd0, 0xe5, 0xb5, 0xae, 0xaa, 0xbe, 0x02, 0xb0, - 0xc9, 0x56, 0x1d, 0xcf, 0x76, 0xbc, 0x06, 0x47, 0x17, 0x8e, 0x55, 0xcc, 0x7a, 0xfc, 0xf3, 0x4a, - 0xdf, 0x62, 0x1a, 0x42, 0x4f, 0xe0, 0x8c, 0x1c, 0xb0, 0x59, 0x28, 0x50, 0x1f, 0x50, 0x5f, 0xe2, - 0xb7, 0x95, 0xfa, 0x6f, 0xa1, 0xd9, 0xb4, 0x3f, 0x45, 0xcc, 0xac, 0x09, 0xf9, 0x6a, 0x10, 0xb0, - 0x40, 0xce, 0x1c, 0xeb, 0x54, 0x10, 0xa7, 0xc5, 0x07, 0x16, 0x70, 0x45, 0x09, 0x78, 0x07, 0xcd, - 0x77, 0x05, 0x4c, 0x72, 0xdd, 0x75, 0x44, 0xd3, 0x8e, 0xb9, 0xfe, 0x4c, 0x03, 0x74, 0x97, 0x8a, - 0xde, 0x19, 0xe7, 0xfa, 0xa9, 0xf1, 0xe8, 0xa1, 0xe8, 0xab, 0xc6, 0x7b, 0x4a, 0x8d, 0x4b, 0xc5, - 0x0b, 0x69, 0x35, 0xa4, 0x06, 0x35, 0x66, 0xb7, 0x8d, 0x7d, 0xd9, 0x81, 0xd5, 0x2c, 0x84, 0x7e, - 0xa2, 0xc1, 0xcc, 0x16, 0xe3, 0x42, 0x72, 0x54, 0xa4, 0x4a, 0x91, 0x57, 0x1b, 0xa7, 0xfa, 0x4a, - 0x37, 0x94, 0xf4, 0xab, 0xc5, 0x2b, 0x69, 0xe9, 0x3e, 0xe3, 0x42, 0x6a, 0xa0, 0xde, 0xca, 0x91, - 0x1a, 0x49, 0x52, 0x14, 0xfe, 0xa2, 0x1d, 0x56, 0xfe, 0xa4, 0xa1, 0x7a, 0x9f, 0x99, 0x0b, 0xdb, - 0xa9, 0x26, 0xb1, 0xb4, 0x84, 0x77, 0x9b, 0x8e, 0xd5, 0xc4, 0xbc, 0xc9, 0xc2, 0x96, 0xad, 0xca, - 0xaf, 0x46, 0x71, 0xc8, 0xa9, 0x8d, 0x1d, 0x0f, 0xfb, 0x2d, 0x62, 0x51, 0x39, 0xd0, 0xca, 0x42, - 0xb5, 0x99, 0x15, 0xba, 0xd4, 0x8b, 0x7e, 0x1d, 0x93, 0x53, 0xb1, 0x5c, 0x5c, 0x2a, 0x3c, 0x82, - 0x85, 0x93, 0x3a, 0xb1, 0x2c, 0xa3, 0x64, 0xca, 0x1b, 0xb0, 0xdf, 0x94, 0x5f, 0xc0, 0x59, 0x8b, - 0xb8, 0xb4, 0xb5, 0x46, 0x38, 0x8d, 0x79, 0xc8, 0x91, 0x04, 0x99, 0x30, 0x12, 0x3d, 0xf8, 0x07, - 0x4d, 0xa4, 0x0b, 0xca, 0x87, 0xb3, 0x68, 0xa6, 0x2b, 0x91, 0xe4, 0x51, 0xf9, 0xdb, 0x30, 0x5f, - 0xf1, 0x98, 0x68, 0xd2, 0x20, 0x96, 0x24, 0x83, 0x97, 0x2a, 0xaa, 0x6f, 0x74, 0x95, 0xd8, 0xa0, - 0x82, 0x87, 0x56, 0xff, 0x91, 0x3b, 0xac, 0x7c, 0x99, 0x43, 0x02, 0x66, 0x2b, 0x78, 0x35, 0x7a, - 0x69, 0xa4, 0x3a, 0xc0, 0x53, 0x38, 0xdb, 0x30, 0xb7, 0xd6, 0x96, 0xee, 0x46, 0x96, 0x63, 0x3f, - 0x60, 0x2f, 0xa8, 0x25, 0x06, 0xf5, 0x58, 0x21, 0xef, 0x31, 0x8f, 0x7e, 0x33, 0xb6, 0x4c, 0xa2, - 0xcb, 0xd9, 0x1b, 0xfa, 0xf5, 0xc5, 0xac, 0x96, 0x19, 0x2e, 0xe7, 0x89, 0x1f, 0xbd, 0x5f, 0x1c, - 0xe6, 0x19, 0x2f, 0x38, 0xf3, 0xca, 0xe7, 0xd2, 0x3b, 0x7b, 0x4b, 0x75, 0xc6, 0x96, 0x5c, 0xc7, - 0xa5, 0x2b, 0xc7, 0x90, 0x2b, 0x7d, 0x90, 0xe6, 0x96, 0x6c, 0xe8, 0x37, 0xd1, 0x06, 0xdc, 0x3d, - 0xde, 0xd0, 0x43, 0x4e, 0x83, 0xa3, 0x66, 0xde, 0x24, 0x3b, 0x14, 0xfb, 0x34, 0x70, 0x1d, 0xce, - 0x65, 0xde, 0x08, 0x86, 0x89, 0x65, 0x51, 0xce, 0xbb, 0x9a, 0xbf, 0x6e, 0xbe, 0xc1, 0x15, 0x71, - 0xc6, 0xbc, 0x07, 0xd9, 0xe5, 0x1b, 0xb7, 0x50, 0x05, 0x26, 0x37, 0xde, 0x73, 0x31, 0xc1, 0x82, - 0x12, 0x9f, 0x09, 0x1d, 0x5d, 0x07, 0xbd, 0x30, 0xd0, 0x4b, 0xf7, 0xd9, 0xe7, 0x19, 0x98, 0x86, - 0xb1, 0x55, 0xc2, 0x1d, 0x4b, 0x8d, 0x43, 0x99, 0x51, 0x0d, 0x2e, 0x76, 0x0d, 0x48, 0xd3, 0xa3, - 0x99, 0xc2, 0xd8, 0xd3, 0xa5, 0xca, 0xd6, 0xc6, 0xd2, 0x7d, 0xda, 0xc6, 0x19, 0xf8, 0xbb, 0xd6, - 0x19, 0x98, 0xbe, 0xd4, 0x46, 0xb3, 0xa5, 0xe1, 0xf2, 0xe5, 0x24, 0x7a, 0xa9, 0x80, 0x18, 0x8c, - 0x84, 0xa2, 0x69, 0xc8, 0x3f, 0x2c, 0x70, 0xbe, 0x47, 0x57, 0x16, 0xfa, 0x83, 0x04, 0x7b, 0x49, - 0xbd, 0xd5, 0x1f, 0x42, 0x21, 0x9a, 0xbf, 0x10, 0xba, 0x1b, 0x10, 0x4f, 0x70, 0x2c, 0x17, 0xb1, - 0xf7, 0x60, 0x3e, 0x9e, 0xca, 0xd0, 0x6c, 0x7c, 0xa8, 0x56, 0xc9, 0xe9, 0x1a, 0x8c, 0x10, 0xdb, - 0x75, 0x3c, 0xb4, 0xd2, 0x45, 0xea, 0xd9, 0x5d, 0x30, 0x15, 0x0c, 0x09, 0x73, 0xb8, 0x90, 0x17, - 0xc5, 0x0e, 0xc5, 0x8e, 0x57, 0x67, 0x81, 0xab, 0xe2, 0x5d, 0x5b, 0x80, 0xc9, 0xb4, 0x2b, 0x86, - 0x7a, 0x27, 0xc5, 0xda, 0xd5, 0xbe, 0xb3, 0x62, 0x2f, 0x34, 0xd8, 0x80, 0xf3, 0x0f, 0x8e, 0x9a, - 0x43, 0x3a, 0xe7, 0x07, 0xcd, 0xf5, 0x67, 0x63, 0x9d, 0xc8, 0xd5, 0x72, 0xaa, 0xdc, 0x6e, 0xfe, - 0x27, 0x00, 0x00, 0xff, 0xff, 0x8f, 0xb5, 0x00, 0xf0, 0xe8, 0x18, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_a70f672d918531b9) +} + +var fileDescriptor_a_bit_of_everything_a70f672d918531b9 = []byte{ + // 2222 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcb, 0x73, 0x1b, 0x49, + 0x19, 0xf7, 0x48, 0xb6, 0x62, 0x7f, 0x7e, 0xc9, 0xed, 0x3c, 0x1c, 0xc5, 0x59, 0x77, 0x94, 0x2c, + 0xab, 0x78, 0xe3, 0x99, 0x44, 0x31, 0x5b, 0x89, 0x29, 0x08, 0xb2, 0xad, 0x4d, 0xbc, 0xd9, 0x38, + 0xce, 0x24, 0x1b, 0x52, 0xa9, 0x2c, 0xa6, 0x35, 0xd3, 0x96, 0x26, 0xd1, 0x4c, 0x0f, 0xd3, 0x3d, + 0xb6, 0x85, 0x31, 0x14, 0x50, 0x05, 0x45, 0x71, 0xa0, 0xca, 0xdc, 0x38, 0xec, 0x01, 0xaa, 0x28, + 0x2e, 0x1c, 0x38, 0x70, 0x81, 0x2a, 0x38, 0x71, 0xda, 0x23, 0x55, 0x1c, 0xb8, 0xc2, 0x81, 0x3f, + 0x83, 0xea, 0x9e, 0x19, 0x79, 0x24, 0x5b, 0x38, 0x4a, 0xb6, 0xf6, 0x62, 0x4f, 0x77, 0xff, 0xbe, + 0xf7, 0xa3, 0xbf, 0x16, 0x94, 0xe9, 0x2e, 0x71, 0xfd, 0x26, 0xe5, 0x86, 0x1f, 0x30, 0xc1, 0x8c, + 0x78, 0xe9, 0xd7, 0x0c, 0xb2, 0x59, 0x73, 0xc4, 0x26, 0xdb, 0xda, 0xa4, 0xdb, 0x34, 0x68, 0x89, + 0x86, 0xe3, 0xd5, 0x75, 0x85, 0x41, 0x73, 0xf5, 0xc0, 0xb7, 0xf4, 0x3a, 0x11, 0x74, 0x87, 0xb4, + 0xf4, 0x84, 0x81, 0xde, 0x26, 0x2d, 0xcc, 0xd6, 0x19, 0xab, 0x37, 0xa9, 0x41, 0x7c, 0xc7, 0x20, + 0x9e, 0xc7, 0x04, 0x11, 0x0e, 0xf3, 0x78, 0x44, 0x5e, 0xb8, 0x10, 0x9f, 0xaa, 0x55, 0x2d, 0xdc, + 0x32, 0xa8, 0xeb, 0x8b, 0x56, 0x7c, 0xf8, 0x4e, 0xf7, 0xa1, 0x1d, 0x06, 0x8a, 0x3a, 0x3e, 0xc7, + 0x5d, 0xfa, 0xf2, 0xb0, 0x66, 0xb8, 0x94, 0x73, 0x52, 0xa7, 0x31, 0xe2, 0xd2, 0x51, 0x44, 0xb9, + 0x0b, 0x32, 0xd7, 0x2d, 0x44, 0x38, 0x2e, 0xe5, 0x82, 0xb8, 0x7e, 0x0c, 0xb8, 0xa6, 0xfe, 0x59, + 0x0b, 0x75, 0xea, 0x2d, 0xf0, 0x1d, 0x52, 0xaf, 0xd3, 0xc0, 0x60, 0xbe, 0x32, 0xe2, 0xa8, 0x41, + 0xc5, 0xdf, 0x4c, 0x41, 0xbe, 0xb2, 0xec, 0x88, 0x87, 0x5b, 0xd5, 0xb6, 0xab, 0xd0, 0xa7, 0x30, + 0xce, 0x1d, 0xaf, 0xde, 0xa4, 0x9b, 0x1e, 0xe5, 0x82, 0xda, 0x33, 0xe7, 0xb1, 0x56, 0x1a, 0x2d, + 0xdf, 0xd2, 0x4f, 0x70, 0x9e, 0xde, 0xcd, 0x49, 0x5f, 0x57, 0xf4, 0xe6, 0x58, 0xc4, 0x2e, 0x5a, + 0x21, 0x04, 0x83, 0x61, 0xe8, 0xd8, 0x33, 0x1a, 0xd6, 0x4a, 0x23, 0xa6, 0xfa, 0x46, 0x1b, 0x90, + 0x8b, 0x65, 0x65, 0x70, 0xf6, 0xad, 0x64, 0xc5, 0x7c, 0xd0, 0x1c, 0x8c, 0x6e, 0x35, 0x19, 0x11, + 0x9b, 0xdb, 0xa4, 0x19, 0xd2, 0x99, 0x2c, 0xd6, 0x4a, 0x19, 0x13, 0xd4, 0xd6, 0x53, 0xb9, 0x83, + 0x2e, 0xc1, 0x98, 0xcd, 0xc2, 0x5a, 0x93, 0xc6, 0x88, 0x41, 0xac, 0x95, 0x34, 0x73, 0x34, 0xda, + 0x8b, 0x20, 0x73, 0x30, 0xea, 0x78, 0xe2, 0x83, 0xc5, 0x18, 0x31, 0x84, 0xb5, 0x52, 0xd6, 0x04, + 0xb5, 0xd5, 0xe6, 0x11, 0xa6, 0x11, 0x39, 0xac, 0x95, 0x06, 0xcd, 0xd1, 0x30, 0x05, 0x89, 0x78, + 0xdc, 0x2c, 0xc7, 0x88, 0x53, 0x58, 0x2b, 0x0d, 0x29, 0x1e, 0x37, 0xcb, 0x11, 0xe0, 0x32, 0x8c, + 0x6f, 0x39, 0xbb, 0xd4, 0x6e, 0x33, 0x19, 0xc6, 0x5a, 0x29, 0x67, 0x8e, 0xc5, 0x9b, 0x9d, 0xa0, + 0x36, 0x9f, 0x11, 0xac, 0x95, 0x4e, 0xc5, 0xa0, 0x84, 0xd3, 0x45, 0x80, 0x1a, 0x63, 0xcd, 0x18, + 0x01, 0x58, 0x2b, 0x0d, 0x9b, 0x23, 0x72, 0xa7, 0xad, 0x2c, 0x17, 0x81, 0xe3, 0xd5, 0x63, 0xc0, + 0xa8, 0xf2, 0xff, 0x68, 0xb4, 0xd7, 0x56, 0xb6, 0xd6, 0x12, 0x94, 0xc7, 0x88, 0x8b, 0x58, 0x2b, + 0x8d, 0x99, 0xa0, 0xb6, 0x3a, 0x0c, 0x6e, 0xab, 0x31, 0x8e, 0xb5, 0xd2, 0x78, 0x64, 0x70, 0xa2, + 0xc5, 0x7d, 0x00, 0xea, 0x85, 0x6e, 0x0c, 0x98, 0xc0, 0x5a, 0x69, 0xa2, 0x7c, 0xed, 0xc4, 0x70, + 0xae, 0x87, 0x2e, 0x0d, 0x1c, 0xab, 0xea, 0x85, 0xae, 0x39, 0x22, 0xe9, 0x23, 0x66, 0xef, 0xc2, + 0x04, 0xef, 0x34, 0x7c, 0x12, 0x6b, 0xa5, 0x49, 0x73, 0x9c, 0x77, 0x58, 0xde, 0x86, 0xb5, 0x9d, + 0x98, 0xc7, 0x5a, 0x29, 0x9f, 0xc0, 0x52, 0xe1, 0xe2, 0x69, 0xed, 0xa7, 0xb0, 0x56, 0x9a, 0x32, + 0x47, 0x79, 0x4a, 0xfb, 0x18, 0xd2, 0xe6, 0x83, 0xb0, 0x56, 0x42, 0x11, 0x24, 0xe1, 0x52, 0x86, + 0x33, 0x01, 0xf5, 0x29, 0x11, 0xd4, 0xde, 0xec, 0x70, 0xe8, 0x34, 0xce, 0x96, 0x46, 0xcc, 0xe9, + 0xe4, 0xf0, 0x71, 0xca, 0xb1, 0xb7, 0x61, 0x94, 0x79, 0x54, 0x76, 0x24, 0xd9, 0x30, 0x66, 0x4e, + 0xab, 0x82, 0x3a, 0xab, 0x47, 0xc5, 0xac, 0x27, 0xc5, 0xac, 0x57, 0xe5, 0xe9, 0xbd, 0x01, 0x13, + 0x14, 0x58, 0xad, 0xd0, 0x65, 0x18, 0x8b, 0x48, 0x23, 0x59, 0x33, 0x67, 0x64, 0xd8, 0xee, 0x0d, + 0x98, 0x11, 0xc3, 0x48, 0x08, 0x7a, 0x01, 0x23, 0x2e, 0xf1, 0x63, 0x3d, 0xce, 0xaa, 0x12, 0xba, + 0xd3, 0x7f, 0x09, 0x3d, 0x20, 0xbe, 0x52, 0xb7, 0xea, 0x89, 0xa0, 0x65, 0x0e, 0xbb, 0xf1, 0x12, + 0xed, 0xc2, 0xb4, 0x4b, 0x7c, 0xbf, 0xdb, 0xde, 0x73, 0x4a, 0xce, 0xbd, 0x37, 0x92, 0xe3, 0x77, + 0xf8, 0x27, 0x12, 0x38, 0xe5, 0x76, 0xef, 0xa7, 0x24, 0x47, 0x65, 0x1d, 0x4b, 0x9e, 0x79, 0x3b, + 0xc9, 0x51, 0xab, 0x38, 0x2a, 0x39, 0xb5, 0x8f, 0x96, 0x60, 0xc6, 0x63, 0xde, 0x0a, 0xf3, 0xb6, + 0xa9, 0x27, 0x3b, 0x26, 0x69, 0xae, 0x13, 0x37, 0xea, 0x0b, 0x33, 0x05, 0x55, 0x39, 0x3d, 0xcf, + 0xd1, 0x0a, 0x4c, 0xb6, 0xdb, 0x72, 0xac, 0xf1, 0x05, 0x15, 0xf1, 0xc2, 0x91, 0x88, 0x3f, 0x49, + 0x70, 0xe6, 0x44, 0x9b, 0x24, 0x62, 0xf2, 0x02, 0xda, 0x99, 0xb4, 0x99, 0x2a, 0xa8, 0x59, 0x9c, + 0xed, 0xbb, 0xa0, 0xa6, 0x12, 0x46, 0xd5, 0xa4, 0xb0, 0x0a, 0xbf, 0xd7, 0x20, 0x77, 0xd8, 0x8f, + 0x3d, 0xe2, 0xd2, 0xa4, 0x1f, 0xcb, 0x6f, 0x74, 0x16, 0x72, 0xc4, 0x65, 0xa1, 0x27, 0x66, 0x32, + 0xaa, 0xc2, 0xe3, 0x15, 0x7a, 0x04, 0x19, 0xf6, 0x4a, 0x35, 0xd3, 0x89, 0x72, 0xe5, 0x4d, 0x7b, + 0xb4, 0xbe, 0x4a, 0xa9, 0xaf, 0x14, 0xcb, 0xb0, 0x57, 0xc5, 0x39, 0x18, 0x4e, 0xd6, 0x68, 0x04, + 0x86, 0x3e, 0xac, 0x7c, 0xfc, 0xb8, 0x9a, 0x1f, 0x40, 0xc3, 0x30, 0xf8, 0xc4, 0xfc, 0xa4, 0x9a, + 0xd7, 0x0a, 0x0e, 0x8c, 0x77, 0x24, 0x26, 0xca, 0x43, 0xf6, 0x15, 0x6d, 0xc5, 0xfa, 0xca, 0x4f, + 0xb4, 0x0c, 0x43, 0x91, 0x77, 0x32, 0x6f, 0xd0, 0x6e, 0x22, 0xd2, 0xa5, 0xcc, 0x2d, 0xad, 0xb0, + 0x0a, 0x67, 0x8f, 0xcf, 0xcd, 0x63, 0x64, 0x9e, 0x4e, 0xcb, 0x1c, 0x49, 0x73, 0xf9, 0x41, 0xc2, + 0xa5, 0x3b, 0xcf, 0x8e, 0xe1, 0xb2, 0x9e, 0xe6, 0xf2, 0x36, 0xf7, 0xde, 0xa1, 0xfc, 0xa5, 0xbf, + 0x6a, 0x07, 0x95, 0x3f, 0x6b, 0xf0, 0x9d, 0xf9, 0xe9, 0x0a, 0xae, 0x39, 0x02, 0xb3, 0x2d, 0x7c, + 0x38, 0x08, 0x95, 0xd7, 0xd6, 0x3c, 0x91, 0xa4, 0x6c, 0x0b, 0x5b, 0xcc, 0xf5, 0x9b, 0x8e, 0x25, + 0x93, 0x03, 0xc7, 0x93, 0x06, 0x16, 0x2d, 0x9f, 0x62, 0xc1, 0xb0, 0xc5, 0xb6, 0x69, 0x80, 0x5d, + 0xe2, 0xb5, 0xf0, 0x16, 0x25, 0x22, 0x0c, 0x28, 0x97, 0xbc, 0x36, 0x92, 0xdc, 0x9d, 0x7f, 0x0a, + 0x57, 0x3e, 0x74, 0x3c, 0x1b, 0xb3, 0x50, 0x60, 0x97, 0x05, 0x14, 0x93, 0x9a, 0xfc, 0x3c, 0x32, + 0x50, 0xe8, 0x0d, 0x21, 0x7c, 0xbe, 0x64, 0x18, 0x75, 0x47, 0x34, 0xc2, 0x9a, 0x6e, 0x31, 0xd7, + 0x90, 0x76, 0x2e, 0x50, 0x8b, 0xf1, 0x16, 0x17, 0x34, 0x5e, 0xc6, 0x66, 0x2f, 0x8f, 0x27, 0xdd, + 0x52, 0xd9, 0x54, 0x2c, 0xc0, 0xe0, 0x32, 0xb3, 0x5b, 0xc7, 0x25, 0x6a, 0xf1, 0x05, 0x4c, 0x3e, + 0x88, 0xd4, 0xfe, 0x96, 0x23, 0x1a, 0x0a, 0x36, 0x01, 0x99, 0xf6, 0x74, 0x91, 0x71, 0x6c, 0x74, + 0x1b, 0x06, 0x6d, 0x22, 0x48, 0xec, 0xe1, 0x77, 0x4f, 0xf4, 0xb0, 0x64, 0x62, 0x2a, 0x92, 0x79, + 0x0c, 0xa3, 0xa9, 0x4c, 0x91, 0x39, 0xf9, 0xbc, 0x6a, 0x3e, 0xcc, 0x0f, 0xa0, 0x53, 0x90, 0x7d, + 0xb8, 0x5e, 0xcd, 0x6b, 0xe5, 0x3f, 0x9e, 0x86, 0x73, 0xdd, 0xf6, 0x3e, 0xa6, 0xc1, 0xb6, 0x63, + 0x51, 0xf4, 0x59, 0x16, 0x72, 0x2b, 0x81, 0x2c, 0x3c, 0x74, 0xa3, 0xef, 0xb8, 0x16, 0xfa, 0x27, + 0x29, 0xfe, 0x21, 0xf3, 0xe3, 0x7f, 0xfc, 0xe7, 0x57, 0x99, 0xdf, 0x65, 0x8a, 0xbf, 0xcd, 0x18, + 0xdb, 0x37, 0x92, 0x89, 0xf8, 0xb8, 0x79, 0xd8, 0xd8, 0x4b, 0x4d, 0x47, 0xfb, 0xc6, 0x5e, 0x7a, + 0x14, 0xda, 0x37, 0xf6, 0x52, 0x57, 0xe0, 0xbe, 0xc1, 0xa9, 0x4f, 0x02, 0x22, 0x58, 0x60, 0xec, + 0x85, 0x1d, 0x07, 0x7b, 0xa9, 0xcb, 0x74, 0xdf, 0xd8, 0xeb, 0xb8, 0x81, 0x93, 0x75, 0xea, 0xfc, + 0x70, 0x38, 0xd9, 0x37, 0xf6, 0xd2, 0x37, 0xc9, 0xd7, 0xb9, 0x08, 0xfc, 0x80, 0x6e, 0x39, 0xbb, + 0xc6, 0xfc, 0x7e, 0x24, 0x24, 0x45, 0xc6, 0xbb, 0xf9, 0xf0, 0x6e, 0x41, 0xbc, 0x8b, 0xa0, 0x53, + 0xc9, 0x5e, 0x6d, 0x7a, 0x1f, 0x7d, 0xa6, 0x01, 0x44, 0x01, 0x52, 0x89, 0xf3, 0xe5, 0x04, 0x69, + 0x5e, 0xc5, 0xe8, 0x4a, 0x71, 0xee, 0x84, 0x08, 0x2d, 0x69, 0xf3, 0xe8, 0xfb, 0x90, 0xfb, 0x98, + 0xb1, 0x57, 0xa1, 0x8f, 0x26, 0x75, 0xf9, 0x18, 0xd0, 0xd7, 0xec, 0x38, 0xdb, 0xdf, 0x44, 0xb2, + 0xae, 0x24, 0x97, 0xd0, 0x57, 0x4e, 0xcc, 0x0d, 0x39, 0x93, 0xef, 0xa3, 0x9f, 0x6a, 0x90, 0xfb, + 0xc4, 0xb7, 0xdf, 0x30, 0x7f, 0x7b, 0x4c, 0x37, 0xc5, 0x1b, 0x4a, 0x8b, 0xf7, 0x0b, 0xaf, 0xa9, + 0x85, 0x74, 0xc3, 0x2f, 0x35, 0xc8, 0xad, 0xd2, 0x26, 0x15, 0xf4, 0xa8, 0x1f, 0x7a, 0x89, 0x79, + 0x71, 0x50, 0x79, 0xbf, 0x76, 0x15, 0x26, 0x00, 0x2a, 0xbe, 0x73, 0x9f, 0xb6, 0x2a, 0xa1, 0x68, + 0xa0, 0x01, 0x38, 0x07, 0xb9, 0x87, 0xf2, 0xb3, 0x8c, 0xc6, 0x61, 0x30, 0xa0, 0xc4, 0x86, 0xa1, + 0x9d, 0xc0, 0x11, 0x34, 0x72, 0xcd, 0xfc, 0xeb, 0xba, 0xe6, 0xdf, 0x1a, 0x0c, 0xdf, 0xa5, 0xe2, + 0x51, 0x48, 0x83, 0xd6, 0x17, 0xe9, 0x9c, 0x5f, 0x68, 0x07, 0x95, 0x27, 0xc5, 0x75, 0x98, 0x3d, + 0xae, 0xaf, 0xb6, 0x05, 0xf6, 0xd9, 0x4f, 0x9f, 0x69, 0xb5, 0x01, 0x65, 0x9f, 0x8e, 0xae, 0x9d, + 0x64, 0xdf, 0x77, 0xa5, 0x80, 0xc4, 0xca, 0xbf, 0x67, 0x61, 0xb0, 0x6a, 0x35, 0x18, 0x2a, 0xf5, + 0xb0, 0x90, 0x87, 0x35, 0x3d, 0xba, 0x2a, 0x93, 0x70, 0xbc, 0x36, 0xb2, 0xf8, 0xdf, 0xcc, 0x41, + 0xe5, 0x47, 0x19, 0x18, 0xa3, 0x56, 0x83, 0x61, 0x1e, 0xb5, 0x4c, 0x18, 0x56, 0xab, 0xc0, 0xb7, + 0xd0, 0xd4, 0xe3, 0xd0, 0x75, 0x49, 0xd0, 0x5a, 0xc2, 0xd5, 0x78, 0xab, 0x90, 0x5f, 0xa5, 0xdc, + 0x0a, 0x1c, 0xf5, 0x98, 0x55, 0xbb, 0xc5, 0x55, 0x40, 0x9d, 0x8e, 0x52, 0xda, 0xf6, 0xe9, 0x9e, + 0x8f, 0xee, 0x40, 0xf6, 0xab, 0xd7, 0x6f, 0xa2, 0x5b, 0xf0, 0x81, 0x49, 0x45, 0x18, 0x78, 0xd4, + 0xc6, 0x3b, 0x0d, 0xea, 0x61, 0xd1, 0xa0, 0x38, 0xa0, 0x9c, 0x85, 0x81, 0x45, 0xb1, 0xc3, 0xb1, + 0xa0, 0xae, 0xcf, 0x02, 0x12, 0x38, 0xcd, 0x16, 0x0e, 0x3d, 0xb2, 0x4d, 0x9c, 0x26, 0xa9, 0x35, + 0xa9, 0xfe, 0xd1, 0xd7, 0x20, 0xbb, 0x78, 0x7d, 0x11, 0x2d, 0xc2, 0xfc, 0xff, 0x61, 0x60, 0x33, + 0xca, 0xb1, 0xc7, 0x04, 0xa6, 0xbb, 0x0e, 0x17, 0x3a, 0xca, 0xc1, 0xe0, 0xaf, 0x33, 0x5a, 0x56, + 0x05, 0xe6, 0xd3, 0x93, 0x03, 0x23, 0x1d, 0x63, 0xec, 0x45, 0x3d, 0xed, 0xf9, 0xf9, 0x62, 0xde, + 0xd8, 0x2e, 0xb7, 0xf1, 0xf2, 0x6c, 0x29, 0x1a, 0x00, 0x9e, 0x23, 0x74, 0xe4, 0x08, 0xfd, 0x49, + 0x83, 0x31, 0x39, 0x63, 0x6d, 0x10, 0xd1, 0x50, 0x1e, 0xfa, 0x72, 0x3a, 0xdd, 0x1d, 0x65, 0xdb, + 0xed, 0xe2, 0xe2, 0x89, 0x45, 0xd5, 0xf1, 0x73, 0x83, 0x2e, 0x2f, 0x76, 0x55, 0xf7, 0x15, 0x80, + 0x75, 0xb6, 0xec, 0x78, 0xb6, 0xe3, 0xd5, 0x39, 0x3a, 0x7f, 0xa4, 0x66, 0x56, 0xe3, 0x1f, 0x58, + 0x7a, 0x96, 0xd3, 0x00, 0x7a, 0x0a, 0xa7, 0xe4, 0x88, 0xcd, 0x42, 0x81, 0x7a, 0x80, 0x7a, 0x12, + 0x5f, 0x50, 0xea, 0x9f, 0x41, 0xd3, 0x69, 0x7f, 0x8a, 0x98, 0x59, 0x03, 0xf2, 0xd5, 0x20, 0x60, + 0x81, 0x9c, 0x3a, 0x56, 0xa9, 0x20, 0x4e, 0x93, 0xf7, 0x2d, 0xe0, 0x8a, 0x12, 0xf0, 0x0e, 0x9a, + 0xed, 0x08, 0x98, 0xe4, 0xba, 0xe3, 0x88, 0x86, 0x1d, 0x73, 0xfd, 0x99, 0x06, 0xe8, 0x2e, 0x15, + 0xdd, 0x53, 0xce, 0xf5, 0x13, 0xe3, 0xd1, 0x45, 0xd1, 0x53, 0x8d, 0xf7, 0x94, 0x1a, 0x97, 0x8a, + 0xe7, 0xd3, 0x6a, 0x48, 0x0d, 0x6a, 0xcc, 0x6e, 0x19, 0x7b, 0xb2, 0x07, 0xab, 0x69, 0x08, 0xfd, + 0x44, 0x83, 0xa9, 0x0d, 0xc6, 0x85, 0xe4, 0xa8, 0x48, 0x95, 0x22, 0xaf, 0x37, 0x50, 0xf5, 0x94, + 0x6e, 0x28, 0xe9, 0x57, 0x8b, 0x57, 0xd2, 0xd2, 0x7d, 0xc6, 0x85, 0xd4, 0x40, 0xbd, 0x96, 0x23, + 0x35, 0x92, 0xa4, 0x28, 0xfc, 0x4d, 0x3b, 0xa8, 0xfc, 0x45, 0x43, 0x5b, 0x3d, 0xa6, 0x2e, 0x6c, + 0xa7, 0x9a, 0xc4, 0xc2, 0x02, 0xde, 0x69, 0x38, 0x56, 0x03, 0xf3, 0x06, 0x0b, 0x9b, 0xb6, 0x2a, + 0xbf, 0x1a, 0xc5, 0x21, 0xa7, 0x36, 0x76, 0x3c, 0xec, 0x37, 0x89, 0x45, 0xe5, 0x48, 0x2b, 0x0b, + 0xd5, 0x66, 0x56, 0xe8, 0x52, 0x2f, 0xfa, 0x7d, 0x4c, 0xce, 0xc5, 0x72, 0x71, 0xa9, 0xf0, 0x08, + 0xe6, 0x8e, 0xeb, 0xc5, 0xb2, 0x8c, 0x92, 0x39, 0xaf, 0xcf, 0x7e, 0x53, 0x7e, 0x09, 0xa7, 0x2d, + 0xe2, 0xd2, 0xe6, 0x0a, 0xe1, 0x34, 0xe6, 0x21, 0x87, 0x12, 0x64, 0xc2, 0x50, 0xf4, 0xe4, 0xef, + 0x37, 0x91, 0xce, 0x2b, 0x1f, 0x4e, 0xa3, 0xa9, 0x8e, 0x44, 0x92, 0x47, 0xe5, 0x6f, 0xc3, 0x6c, + 0xc5, 0x63, 0xa2, 0x41, 0x83, 0x58, 0x92, 0x0c, 0x5e, 0xaa, 0xa8, 0xbe, 0xd1, 0x51, 0x62, 0xfd, + 0x0a, 0x1e, 0x58, 0xfe, 0x57, 0xee, 0xa0, 0xf2, 0x79, 0x0e, 0x09, 0x98, 0xae, 0xe0, 0xe5, 0xe8, + 0xad, 0x91, 0xea, 0x00, 0xcf, 0xe0, 0x74, 0xdd, 0xdc, 0x58, 0x59, 0xb8, 0x1b, 0x59, 0x8e, 0xfd, + 0x80, 0xbd, 0xa4, 0x96, 0xe8, 0xd7, 0x63, 0x85, 0xbc, 0xc7, 0x3c, 0xfa, 0xcd, 0xd8, 0x32, 0x89, + 0x2e, 0x67, 0x6f, 0xe8, 0xd7, 0xe7, 0xb3, 0x5a, 0x66, 0xb0, 0x9c, 0x27, 0x7e, 0xf4, 0x82, 0x71, + 0x98, 0x67, 0xbc, 0xe4, 0xcc, 0x2b, 0x9f, 0x4d, 0xef, 0xec, 0x2e, 0x6c, 0x31, 0xb6, 0xe0, 0x3a, + 0x2e, 0x5d, 0x3a, 0x82, 0x5c, 0xea, 0x81, 0x34, 0x37, 0x64, 0x43, 0xbf, 0x89, 0xd6, 0xe0, 0xee, + 0xd1, 0x86, 0x1e, 0x72, 0x1a, 0x1c, 0x36, 0xf3, 0x06, 0xd9, 0xa6, 0xd8, 0xa7, 0x81, 0xeb, 0x70, + 0x2e, 0xf3, 0x46, 0x30, 0x4c, 0x2c, 0x8b, 0x72, 0xde, 0xd1, 0xfc, 0x75, 0xf3, 0x2d, 0xae, 0x88, + 0x53, 0xe6, 0x3d, 0xc8, 0x2e, 0xde, 0xb8, 0x85, 0x2a, 0x30, 0xbe, 0xf6, 0x9e, 0x8b, 0x09, 0x16, + 0x94, 0xf8, 0x4c, 0xe8, 0xe8, 0x3a, 0xe8, 0x85, 0xbe, 0xde, 0xba, 0xcf, 0x7f, 0x9e, 0x81, 0x49, + 0x18, 0x59, 0x26, 0xdc, 0xb1, 0xd4, 0x40, 0x94, 0x19, 0xd6, 0xe0, 0x62, 0xc7, 0x88, 0x34, 0x39, + 0x9c, 0x29, 0x8c, 0x3c, 0x5b, 0xa8, 0x6c, 0xac, 0x2d, 0xdc, 0xa7, 0x2d, 0x9c, 0x81, 0x7f, 0x6a, + 0xed, 0x91, 0xe9, 0x73, 0x6d, 0x38, 0x5b, 0x1a, 0x2c, 0x5f, 0x4e, 0xa2, 0x97, 0x0a, 0x88, 0xc1, + 0x48, 0x28, 0x1a, 0x86, 0xfc, 0xc3, 0x02, 0xe7, 0x7b, 0x74, 0x69, 0xae, 0x37, 0x48, 0xb0, 0x57, + 0xd4, 0x5b, 0xfe, 0x21, 0x14, 0xa2, 0x09, 0x0c, 0xa1, 0xbb, 0x01, 0xf1, 0x04, 0xc7, 0x72, 0x11, + 0x7b, 0x0f, 0x66, 0xe3, 0xb9, 0x0c, 0x4d, 0xc7, 0x87, 0x6a, 0x95, 0x9c, 0xae, 0xc0, 0x10, 0xb1, + 0x5d, 0xc7, 0x43, 0x4b, 0x1d, 0xa4, 0x9e, 0xdd, 0x01, 0x53, 0xc1, 0x90, 0x30, 0x87, 0x0b, 0x79, + 0x51, 0x6c, 0x53, 0xec, 0x78, 0x5b, 0x2c, 0x70, 0x55, 0xbc, 0x6b, 0x73, 0x30, 0x9e, 0x76, 0xc5, + 0x40, 0xf7, 0xac, 0x58, 0xbb, 0xda, 0x73, 0x5a, 0xec, 0x86, 0x06, 0x6b, 0x70, 0xee, 0xc1, 0x61, + 0x73, 0x48, 0xe7, 0x7c, 0xbf, 0xb9, 0xfe, 0x7c, 0xa4, 0x1d, 0xb9, 0x5a, 0x4e, 0x95, 0xdb, 0xcd, + 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xfc, 0xf9, 0xc9, 0xea, 0x18, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 1f01701c0a7..94fe07214e3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -277,6 +277,8 @@ service ABitOfEverythingService { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more about GetQuery"; } + security: { + } }; } // Echo allows posting a StringMessage value. diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 926ea194117..4b82a011b2d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -340,6 +340,7 @@ "ABitOfEverythingService" ], "deprecated": true, + "security": [], "externalDocs": { "description": "Find out more about GetQuery", "url": "https://github.com/grpc-ecosystem/grpc-gateway" From fa90cfb8fa521cb2df47e090ea21ad310a188d07 Mon Sep 17 00:00:00 2001 From: Edward McFarlane Date: Mon, 11 Jun 2018 15:29:28 +0100 Subject: [PATCH 0015/1518] Bazel expose protoc-gen-grpc-gateway --- protoc-gen-grpc-gateway/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index fc4850fb695..8ca170d3da5 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -20,6 +20,7 @@ go_library( go_binary( name = "protoc-gen-grpc-gateway", embed = [":go_default_library"], + visibility = ["//visibility:public"], ) go_proto_compiler( From 39a18c62029d0d1dc5a5562a838465b623339e53 Mon Sep 17 00:00:00 2001 From: crozzy Date: Mon, 2 Jul 2018 16:22:33 -0700 Subject: [PATCH 0016/1518] Updated doc and comments to reflect what the code is doing regarding prefixing gRPC metadata context when dealing with Permanent HTTP header keys --- docs/_docs/usage.md | 5 ++--- runtime/context.go | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 8862c523273..2bb0f22cb3b 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -187,8 +187,7 @@ This parameter can be useful to pass request scoped context between the gateway * [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) * HTTP request source IP is added as `X-Forwarded-For` gRPC request header * HTTP request host is added as `X-Forwarded-Host` gRPC request header -* HTTP `Authorization` header is added as `authorization` gRPC request header +* HTTP `Authorization` header is added as `authorization` gRPC request header * Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header -* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`) +* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (after removing prefix 'Grpc-Metadata-') * While configurable, the default {un,}marshaling uses [jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with `OrigName: true`. - diff --git a/runtime/context.go b/runtime/context.go index 90758af099c..03a3015a82a 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -19,7 +19,8 @@ import ( // parameters to or from a gRPC call. const MetadataHeaderPrefix = "Grpc-Metadata-" -// MetadataPrefix is the prefix for grpc-gateway supplied custom metadata fields. +// MetadataPrefix is prepended to permanent HTTP header keys (as specified +// by the IANA) when added to the gRPC context. const MetadataPrefix = "grpcgateway-" // MetadataTrailerPrefix is prepended to gRPC metadata as it is converted to From e93c62320cecbe8279723bfd69550f4906d38eb0 Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Tue, 3 Jul 2018 14:31:35 +0900 Subject: [PATCH 0017/1518] Populate swagger method parameter description from message comments --- .../abe/a_bit_of_everything_service_api.go | 2 +- examples/clients/echo/echo_service_api.go | 8 +++---- .../unannotated_echo_service_api.go | 4 ++-- .../a_bit_of_everything.swagger.json | 1 + .../proto/examplepb/echo_service.swagger.json | 4 ++++ .../unannotated_echo_service.swagger.json | 2 ++ protoc-gen-swagger/genswagger/template.go | 23 ++++++++++++++----- 7 files changed, 31 insertions(+), 13 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 4cc9d609e59..f07085ef4a0 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -219,7 +219,7 @@ func (a ABitOfEverythingServiceApi) CreateBody(body ExamplepbABitOfEverything) ( /** * * - * @param singleNestedName + * @param singleNestedName name is nested field. * @param body * @return *ExamplepbABitOfEverything */ diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go index 775d0b3a7e6..6ae7cf85a32 100644 --- a/examples/clients/echo/echo_service_api.go +++ b/examples/clients/echo/echo_service_api.go @@ -41,7 +41,7 @@ func NewEchoServiceApiWithBasePath(basePath string) *EchoServiceApi { * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @return *ExamplepbSimpleMessage */ func (a EchoServiceApi) Echo(id string) (*ExamplepbSimpleMessage, *APIResponse, error) { @@ -102,7 +102,7 @@ func (a EchoServiceApi) Echo(id string) (*ExamplepbSimpleMessage, *APIResponse, * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @param num * @param lineNum * @param lang @@ -179,7 +179,7 @@ func (a EchoServiceApi) Echo2(id string, num string, lineNum string, lang string * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @param num * @param lang * @param lineNum @@ -256,7 +256,7 @@ func (a EchoServiceApi) Echo3(id string, num string, lang string, lineNum string * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @param lineNum * @param statusNote * @param num diff --git a/examples/clients/unannotatedecho/unannotated_echo_service_api.go b/examples/clients/unannotatedecho/unannotated_echo_service_api.go index 99f02f08d03..cb3efdde4d4 100644 --- a/examples/clients/unannotatedecho/unannotated_echo_service_api.go +++ b/examples/clients/unannotatedecho/unannotated_echo_service_api.go @@ -41,7 +41,7 @@ func NewUnannotatedEchoServiceApiWithBasePath(basePath string) *UnannotatedEchoS * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @return *ExamplepbUnannotatedSimpleMessage */ func (a UnannotatedEchoServiceApi) Echo(id string) (*ExamplepbUnannotatedSimpleMessage, *APIResponse, error) { @@ -102,7 +102,7 @@ func (a UnannotatedEchoServiceApi) Echo(id string) (*ExamplepbUnannotatedSimpleM * Echo method receives a simple message and returns it. * The message posted as the id parameter will also be returned. * - * @param id + * @param id Id represents the message identifier. * @param num * @param duration * @return *ExamplepbUnannotatedSimpleMessage diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 4b82a011b2d..babfb987a8e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -516,6 +516,7 @@ "parameters": [ { "name": "single_nested.name", + "description": "name is nested field.", "in": "path", "required": true, "type": "string" diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index c14354ffbce..ddcf349261d 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -32,6 +32,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" @@ -58,6 +59,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" @@ -137,6 +139,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" @@ -216,6 +219,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" diff --git a/examples/proto/examplepb/unannotated_echo_service.swagger.json b/examples/proto/examplepb/unannotated_echo_service.swagger.json index 9bfa9f28ba6..fcbf16573ee 100644 --- a/examples/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/proto/examplepb/unannotated_echo_service.swagger.json @@ -32,6 +32,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" @@ -58,6 +59,7 @@ "parameters": [ { "name": "id", + "description": "Id represents the message identifier.", "in": "path", "required": true, "type": "string" diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 0ffe369cc9f..f12ea38f724 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -524,13 +524,14 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { - var paramType, paramFormat string + var paramType, paramFormat, desc string switch pt := parameter.Target.GetType(); pt { case pbdescriptor.FieldDescriptorProto_TYPE_GROUP, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { schema := schemaOfField(parameter.Target, reg, customRefs) paramType = schema.Type paramFormat = schema.Format + desc = schema.Description } else { return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } @@ -545,10 +546,15 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } + if desc == "" { + desc = fieldProtoComments(reg, parameter.Target.Message, parameter.Target) + } + parameters = append(parameters, swaggerParameterObject{ - Name: parameter.String(), - In: "path", - Required: true, + Name: parameter.String(), + Description: desc, + In: "path", + Required: true, // Parameters in gRPC-Gateway can only be strings? Type: paramType, Format: paramFormat, @@ -557,6 +563,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re // Now check if there is a body parameter if b.Body != nil { var schema swaggerSchemaObject + desc := "" if len(b.Body.FieldPath) == 0 { schema = swaggerSchemaObject{ @@ -567,11 +574,15 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } else { lastField := b.Body.FieldPath[len(b.Body.FieldPath)-1] schema = schemaOfField(lastField.Target, reg, customRefs) + if schema.Description != "" { + desc = schema.Description + } else { + desc = fieldProtoComments(reg, lastField.Target.Message, lastField.Target) + } } - desc := "" if meth.GetClientStreaming() { - desc = "(streaming inputs)" + desc += " (streaming inputs)" } parameters = append(parameters, swaggerParameterObject{ Name: "body", From 5948c50af05b7b4a4417c40b6768ffedd3b866dd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 5 Jul 2018 19:30:57 +0100 Subject: [PATCH 0018/1518] runtime: add support for time types in query parameters (#693) Adds support for parsing the google.protobuf.Duration as well as native *time.Time and *time.Duration types in url query parameters. Helps #400. --- runtime/query.go | 37 ++++++++++++++++++++++++- runtime/query_test.go | 64 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) diff --git a/runtime/query.go b/runtime/query.go index 82c926a95f3..bb9359f17c0 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -221,6 +221,23 @@ func populateField(f reflect.Value, value string, props *proto.Properties) error f.Field(0).SetInt(int64(t.Unix())) f.Field(1).SetInt(int64(t.Nanosecond())) return nil + case "Duration": + if value == "null" { + f.Field(0).SetInt(0) + f.Field(1).SetInt(0) + return nil + } + d, err := time.ParseDuration(value) + if err != nil { + return fmt.Errorf("bad Duration: %v", err) + } + + ns := d.Nanoseconds() + s := ns / 1e9 + ns %= 1e9 + f.Field(0).SetInt(s) + f.Field(1).SetInt(ns) + return nil case "DoubleValue": fallthrough case "FloatValue": @@ -284,6 +301,24 @@ func populateField(f reflect.Value, value string, props *proto.Properties) error } } + // Handle Time and Duration stdlib types + switch t := i.(type) { + case *time.Time: + pt, err := time.Parse(time.RFC3339Nano, value) + if err != nil { + return fmt.Errorf("bad Timestamp: %v", err) + } + *t = pt + return nil + case *time.Duration: + d, err := time.ParseDuration(value) + if err != nil { + return fmt.Errorf("bad Duration: %v", err) + } + *t = d + return nil + } + // is the destination field an enumeration type? if enumValMap := proto.EnumValueMap(props.Enum); enumValMap != nil { return populateFieldEnum(f, value, enumValMap) @@ -291,7 +326,7 @@ func populateField(f reflect.Value, value string, props *proto.Properties) error conv, ok := convFromType[f.Kind()] if !ok { - return fmt.Errorf("unsupported field type %T", f) + return fmt.Errorf("field type %T is not supported in query parameters", i) } result := conv.Call([]reflect.Value{reflect.ValueOf(value)}) if err := result[1].Interface(); err != nil { diff --git a/runtime/query_test.go b/runtime/query_test.go index 904be49920a..358847928c8 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -10,6 +10,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" + "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/runtime" @@ -25,6 +26,10 @@ func TestPopulateParameters(t *testing.T) { t.Fatalf("Couldn't setup timestamp in Protobuf format: %v", err) } + durationT := 13 * time.Hour + durationStr := durationT.String() + durationPb := ptypes.DurationProto(durationT) + fieldmaskStr := "float_value,double_value" fieldmaskPb := &field_mask.FieldMask{Paths: []string{"float_value", "double_value"}} @@ -49,6 +54,7 @@ func TestPopulateParameters(t *testing.T) { "enum_value": {"1"}, "repeated_enum": {"1", "2", "0"}, "timestamp_value": {timeStr}, + "duration_value": {durationStr}, "fieldmask_value": {fieldmaskStr}, "wrapper_float_value": {"1.5"}, "wrapper_double_value": {"2.5"}, @@ -94,6 +100,7 @@ func TestPopulateParameters(t *testing.T) { EnumValue: EnumValue_Y, RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, TimestampValue: timePb, + DurationValue: durationPb, FieldMaskValue: fieldmaskPb, WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, @@ -142,6 +149,7 @@ func TestPopulateParameters(t *testing.T) { "enumValue": {"1"}, "repeatedEnum": {"1", "2", "0"}, "timestampValue": {timeStr}, + "durationValue": {durationStr}, "fieldmaskValue": {fieldmaskStr}, "wrapperFloatValue": {"1.5"}, "wrapperDoubleValue": {"2.5"}, @@ -168,6 +176,7 @@ func TestPopulateParameters(t *testing.T) { EnumValue: EnumValue_Y, RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, TimestampValue: timePb, + DurationValue: durationPb, FieldMaskValue: fieldmaskPb, WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, @@ -338,6 +347,51 @@ func TestPopulateParameters(t *testing.T) { } } +func TestPopulateParametersWithNativeTypes(t *testing.T) { + timeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC) + timeStr := timeT.Format(time.RFC3339Nano) + + durationT := 13 * time.Hour + durationStr := durationT.String() + + for _, spec := range []struct { + values url.Values + want *nativeProto3Message + }{ + { + values: url.Values{ + "native_timestamp_value": {timeStr}, + "native_duration_value": {durationStr}, + }, + want: &nativeProto3Message{ + NativeTimeValue: &timeT, + NativeDurationValue: &durationT, + }, + }, + { + values: url.Values{ + "nativeTimestampValue": {timeStr}, + "nativeDurationValue": {durationStr}, + }, + want: &nativeProto3Message{ + NativeTimeValue: &timeT, + NativeDurationValue: &durationT, + }, + }, + } { + msg := new(nativeProto3Message) + err := runtime.PopulateQueryParameters(msg, spec.values, utilities.NewDoubleArray(nil)) + + if err != nil { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, utilities.NewDoubleArray(nil)) failed with %v; want success", spec.values, err) + continue + } + if got, want := msg, spec.want; !proto.Equal(got, want) { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, utilities.NewDoubleArray(nil)) = %v; want %v", spec.values, got, want) + } + } +} + func TestPopulateParametersWithFilters(t *testing.T) { for _, spec := range []struct { values url.Values @@ -537,6 +591,7 @@ type proto3Message struct { EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,enum=runtime_test_api.EnumValue" json:"enum_value,omitempty"` RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,enum=runtime_test_api.EnumValue" json:"repeated_enum,omitempty"` TimestampValue *timestamp.Timestamp `protobuf:"bytes,16,opt,name=timestamp_value,json=timestampValue" json:"timestamp_value,omitempty"` + DurationValue *duration.Duration `protobuf:"bytes,42,opt,name=duration_value,json=durationValue" json:"duration_value,omitempty"` FieldMaskValue *field_mask.FieldMask `protobuf:"bytes,27,opt,name=fieldmask_value,json=fieldmaskValue" json:"fieldmask_value,omitempty"` OneofValue proto3Message_OneofValue `protobuf_oneof:"oneof_value"` WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue" json:"wrapper_double_value,omitempty"` @@ -680,6 +735,15 @@ func _proto3Message_OneofSizer(msg proto.Message) (n int) { return n } +type nativeProto3Message struct { + NativeTimeValue *time.Time `protobuf:"bytes,1,opt,name=native_timestamp_value,json=nativeTimestampValue" json:"native_timestamp_value,omitempty"` + NativeDurationValue *time.Duration `protobuf:"bytes,2,opt,name=native_duration_value,json=nativeDurationValue" json:"native_duration_value,omitempty"` +} + +func (m *nativeProto3Message) Reset() { *m = nativeProto3Message{} } +func (m *nativeProto3Message) String() string { return proto.CompactTextString(m) } +func (*nativeProto3Message) ProtoMessage() {} + type proto2Message struct { Nested *proto3Message `protobuf:"bytes,1,opt,name=nested,json=nested" json:"nested,omitempty"` FloatValue *float32 `protobuf:"fixed32,2,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` From 905e714ea78f10f5e14fbee72a9c547622ca1bdb Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 23 Jul 2018 16:15:55 +0100 Subject: [PATCH 0019/1518] Add explicit dependency versions (#696) Version constraints are copied from existing Bazel rules. In the future, these version upgrades must be performed atomically. --- .gitignore | 3 ++ .travis.yml | 1 + Gopkg.lock | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Gopkg.toml | 67 +++++++++++++++++++++++++++ Makefile | 3 +- WORKSPACE | 4 +- 6 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml diff --git a/.gitignore b/.gitignore index 55e4918abeb..7c349d62a43 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ bazel-genfiles bazel-grpc-gateway bazel-out bazel-testlogs + +# Go vendor directory +vendor diff --git a/.travis.yml b/.travis.yml index 323a464508b..76757804e00 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,7 @@ before_install: - test "${USE_BAZEL}" = true || go get github.com/golang/lint/golint - test "${USE_BAZEL}" = true || go get github.com/dghubble/sling - test "${USE_BAZEL}" = true || go get github.com/go-resty/resty + - test "${USE_BAZEL}" = true || curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh install: # Make sure externally referenced packages are go-gettable. - test "${USE_BAZEL}" = true || diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 00000000000..041bf73d54a --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,129 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/ghodss/yaml" + packages = ["."] + revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" + +[[projects]] + name = "github.com/go-resty/resty" + packages = ["."] + revision = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e" + +[[projects]] + name = "github.com/golang/glog" + packages = ["."] + revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" + +[[projects]] + name = "github.com/golang/protobuf" + packages = [ + "jsonpb", + "proto", + "protoc-gen-go", + "protoc-gen-go/descriptor", + "protoc-gen-go/generator", + "protoc-gen-go/generator/internal/remap", + "protoc-gen-go/grpc", + "protoc-gen-go/plugin", + "ptypes", + "ptypes/any", + "ptypes/duration", + "ptypes/empty", + "ptypes/struct", + "ptypes/timestamp", + "ptypes/wrappers" + ] + revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" + +[[projects]] + name = "github.com/rogpeppe/fastuuid" + packages = ["."] + revision = "6724a57986aff9bff1a1770e9347036def7c89f6" + +[[projects]] + name = "golang.org/x/net" + packages = [ + "context", + "http/httpguts", + "http2", + "http2/hpack", + "idna", + "internal/timeseries", + "lex/httplex", + "publicsuffix", + "trace" + ] + revision = "640f4622ab692b87c2f3a94265e6f579fe38263d" + +[[projects]] + name = "golang.org/x/text" + packages = [ + "collate", + "collate/build", + "internal/colltab", + "internal/gen", + "internal/tag", + "internal/triegen", + "internal/ucd", + "language", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable" + ] + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + +[[projects]] + name = "google.golang.org/genproto" + packages = [ + "googleapis/api/annotations", + "googleapis/rpc/errdetails", + "googleapis/rpc/status", + "protobuf/field_mask" + ] + revision = "86e600f69ee4704c6efbf6a2a40a5c10700e76c2" + +[[projects]] + name = "google.golang.org/grpc" + packages = [ + ".", + "balancer", + "balancer/base", + "balancer/roundrobin", + "codes", + "connectivity", + "credentials", + "encoding", + "encoding/proto", + "grpclb/grpc_lb_v1/messages", + "grpclog", + "internal", + "keepalive", + "metadata", + "naming", + "peer", + "resolver", + "resolver/dns", + "resolver/passthrough", + "stats", + "status", + "tap", + "transport" + ] + revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" + +[[projects]] + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "e3a3d005ebf93db02b6c7ddc886adc39342b492105fc1b6c4d0c362a43e6adf6" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 00000000000..c72ed54da1d --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,67 @@ +required = [ + "github.com/golang/protobuf/protoc-gen-go", +] + +[prune] + go-tests = true + unused-packages = true + +# Constrained versions that are defined in WORKSPACE are at the top + +[[constraint]] + # Also defined in WORKSPACE + revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" + name = "github.com/ghodss/yaml" + +[[constraint]] + # Also defined in WORKSPACE + revision = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e" + name = "github.com/go-resty/resty" + +[[constraint]] + # Also defined in WORKSPACE + revision = "6724a57986aff9bff1a1770e9347036def7c89f6" + name = "github.com/rogpeppe/fastuuid" + +[[override]] + # Also defined in WORKSPACE + revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" + name = "gopkg.in/yaml.v2" + +# These versions are constrained transitively by bazelbuild/rules_go + +[[constraint]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L75 + revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" + name = "github.com/golang/protobuf" + +[[constraint]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L110 + revision = "640f4622ab692b87c2f3a94265e6f579fe38263d" + name = "golang.org/x/net" + +[[constraint]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L123 + revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" + name = "google.golang.org/grpc" + +[[constraint]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L131 + revision = "86e600f69ee4704c6efbf6a2a40a5c10700e76c2" + name = "google.golang.org/genproto" + +[[constraint]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L138 + revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" + name = "github.com/golang/glog" + +[[override]] + # Also defined in bazelbuild/rules_go + # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L117 + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + name = "golang.org/x/text" diff --git a/Makefile b/Makefile index a690bb77a4b..ac1235ef267 100644 --- a/Makefile +++ b/Makefile @@ -115,7 +115,8 @@ generate: $(RUNTIME_GO) .SUFFIXES: .go .proto $(GO_PLUGIN): - go get $(GO_PLUGIN_PKG) + dep ensure -vendor-only + go install ./vendor/$(GO_PLUGIN_PKG) go build -o $@ $(GO_PLUGIN_PKG) $(RUNTIME_GO): $(RUNTIME_PROTO) $(GO_PLUGIN) diff --git a/WORKSPACE b/WORKSPACE index 225d0181767..2984db657d8 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -2,8 +2,8 @@ workspace(name = "grpc_ecosystem_grpc_gateway") http_archive( name = "io_bazel_rules_go", - url = "https://github.com/bazelbuild/rules_go/releases/download/0.10.3/rules_go-0.10.3.tar.gz", - sha256 = "feba3278c13cde8d67e341a837f69a029f698d7a27ddbb2a202be7a10b22142a", + url = "https://github.com/bazelbuild/rules_go/releases/download/0.12.1/rules_go-0.12.1.tar.gz", + sha256 = "8b68d0630d63d95dacc0016c3bb4b76154fe34fca93efd65d1c366de3fcb4294", ) http_archive( From d724c4f76ff2f8bb6140fcd3bc77ea4dc40e693b Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 23 Jul 2018 13:52:53 -0700 Subject: [PATCH 0020/1518] Add OpenTracing support to docs (#705) --- docs/_docs/customizingyourgateway.md | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 758611f2700..20c747f2771 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -59,6 +59,44 @@ Or you might want to mutate the response messages to be returned. mux := runtime.NewServeMux(runtime.WithForwardResponseOption(myFilter)) ``` +## OpenTracing Support + +If your project uses [OpenTracing](https://github.com/opentracing/opentracing-go) and you'd like spans to propagate through the gateway, you can add some middleware which parses the incoming HTTP headers to create a new span correctly. + +```go +import ( + ... + "github.com/opentracing/opentracing-go" + "github.com/opentracing/opentracing-go/ext" +) + +var grpcGatewayTag = opentracing.Tag{Key: string(ext.Component), Value: "grpc-gateway"} + +func tracingWrapper(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + parentSpanContext, err := opentracing.GlobalTracer().Extract( + opentracing.HTTPHeaders, + opentracing.HTTPHeadersCarrier(r.Header)) + if err == nil || err == opentracing.ErrSpanContextNotFound { + serverSpan := opentracing.GlobalTracer().StartSpan( + "ServeHTTP", + // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. + ext.RPCServerOption(parentSpanContext), + grpcGatewayTag, + ) + r = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan)) + defer serverSpan.Finish() + } + h.ServeHTTP(w, r) + }) +} + +// Then just wrap the mux returned by runtime.NewServeMux() like this +if err := http.ListenAndServe(":8080", tracingWrapper(mux)); err != nil { + log.Fatalf("failed to start gateway server on 8080: %v", err) +} +``` + ## Error handler http://mycodesmells.com/post/grpc-gateway-error-handler From 209d7ce1a333550d4ce54dad94432192eeb2041b Mon Sep 17 00:00:00 2001 From: Jim Riecken Date: Mon, 23 Jul 2018 14:41:26 -0700 Subject: [PATCH 0021/1518] protoc-gen-swagger: support all well-known wrapper types There were a few well-known wrapper types missing from the wkSchemas map. In specific UInt32Value, UInt64Value and BytesValue. This change handles them (and maps them to the same swagger types as the non-wrapped values) This also fixes the mapping of Int64Value. The Int64Value handling maps the value to a swagger integer. The documentation for Int64Value indicates that it should be mapped to a JSON string (also the mapping for normal int64 in protoc-gen-swagger maps it to a string, so this was inconsistent.) --- examples/proto/examplepb/wrappers.pb.go | 81 ++++++++----- examples/proto/examplepb/wrappers.proto | 3 + .../proto/examplepb/wrappers.swagger.json | 14 ++- protoc-gen-swagger/genswagger/template.go | 20 +++- .../genswagger/template_test.go | 112 ++++++++++++++++++ 5 files changed, 201 insertions(+), 29 deletions(-) diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index f3caeaf4e6b..fb44ca7aba9 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -32,6 +32,9 @@ type Wrappers struct { FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -41,7 +44,7 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_c39e75a579a3cddc, []int{0} + return fileDescriptor_wrappers_5850bd48b0187754, []int{0} } func (m *Wrappers) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Wrappers.Unmarshal(m, b) @@ -103,6 +106,27 @@ func (m *Wrappers) GetBoolValue() *wrappers.BoolValue { return nil } +func (m *Wrappers) GetUint32Value() *wrappers.UInt32Value { + if m != nil { + return m.Uint32Value + } + return nil +} + +func (m *Wrappers) GetUint64Value() *wrappers.UInt64Value { + if m != nil { + return m.Uint64Value + } + return nil +} + +func (m *Wrappers) GetBytesValue() *wrappers.BytesValue { + if m != nil { + return m.BytesValue + } + return nil +} + func init() { proto.RegisterType((*Wrappers)(nil), "grpc.gateway.examples.examplepb.Wrappers") } @@ -180,30 +204,33 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_c39e75a579a3cddc) -} - -var fileDescriptor_wrappers_c39e75a579a3cddc = []byte{ - // 333 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0xd2, 0xcf, 0x4a, 0x3b, 0x31, - 0x10, 0x07, 0x70, 0xb6, 0xfd, 0xfd, 0x8a, 0xcd, 0x0a, 0xc2, 0xe2, 0x41, 0xd7, 0x62, 0xa5, 0x17, - 0xff, 0x1c, 0xb2, 0xd8, 0x96, 0x82, 0x22, 0x08, 0x55, 0x04, 0xaf, 0x16, 0x14, 0xbc, 0x48, 0xd2, - 0xa6, 0x4b, 0x20, 0xee, 0x84, 0x6c, 0xda, 0xea, 0x49, 0xf4, 0x11, 0xf4, 0xd1, 0x7c, 0x05, 0x1f, - 0x44, 0x36, 0x9d, 0x6c, 0xc1, 0x52, 0xf4, 0x36, 0xb3, 0xf9, 0x7e, 0x06, 0x86, 0x1d, 0xb2, 0x2f, - 0x9e, 0xd8, 0xa3, 0x56, 0x22, 0x4f, 0xb4, 0x01, 0x0b, 0x09, 0xb6, 0x9a, 0x27, 0x33, 0xc3, 0xb4, - 0x16, 0x26, 0xa7, 0xee, 0x21, 0x6a, 0xa6, 0x46, 0x0f, 0x69, 0xca, 0xac, 0x98, 0xb1, 0x67, 0xea, - 0x15, 0x2d, 0xf3, 0x71, 0x23, 0x05, 0x48, 0x95, 0x48, 0x98, 0x96, 0x09, 0xcb, 0x32, 0xb0, 0xcc, - 0x4a, 0xc8, 0x90, 0xc7, 0xbb, 0xf8, 0xea, 0x3a, 0x3e, 0x19, 0xff, 0x18, 0xdf, 0x7a, 0xad, 0x92, - 0xb5, 0x3b, 0xfc, 0x14, 0x9d, 0x93, 0xf5, 0xdc, 0x1a, 0x99, 0xa5, 0x0f, 0x53, 0xa6, 0x26, 0x62, - 0x2b, 0xd8, 0x0b, 0x0e, 0xc2, 0x76, 0x83, 0xce, 0x67, 0x50, 0x3f, 0x83, 0x0e, 0x5c, 0xe8, 0xb6, - 0xc8, 0xdc, 0x84, 0xf9, 0xa2, 0x89, 0xce, 0x48, 0x28, 0x33, 0xdb, 0x69, 0xa3, 0xaf, 0x38, 0xbf, - 0xb3, 0xe4, 0xaf, 0x8b, 0xcc, 0x9c, 0x13, 0x59, 0xd6, 0xa8, 0x7b, 0x5d, 0xd4, 0xd5, 0xd5, 0xba, - 0xd7, 0x5d, 0x68, 0xac, 0x0b, 0x3d, 0x56, 0xc0, 0x2c, 0xea, 0x7f, 0x2b, 0xf4, 0x55, 0x91, 0x41, - 0x3d, 0x2e, 0xeb, 0x62, 0xf5, 0x11, 0x4c, 0xb8, 0x12, 0xc8, 0xff, 0xaf, 0x58, 0xfd, 0xd2, 0x85, - 0x70, 0xf5, 0xd1, 0xa2, 0x89, 0x4e, 0x08, 0xe1, 0x00, 0x0a, 0x79, 0xcd, 0xf1, 0x78, 0x89, 0xf7, - 0x01, 0xd4, 0x1c, 0xd7, 0xb9, 0x2f, 0xdb, 0xef, 0x01, 0xd9, 0xf0, 0xff, 0x60, 0x20, 0xcc, 0x54, - 0x0e, 0x45, 0xf4, 0x42, 0x6a, 0x17, 0x46, 0x30, 0x2b, 0xa2, 0x43, 0xfa, 0xcb, 0x05, 0x50, 0x6f, - 0xe3, 0xbf, 0x47, 0x5b, 0xcd, 0xb7, 0xcf, 0xaf, 0x8f, 0xca, 0x76, 0x6b, 0x33, 0x99, 0x1e, 0xfb, - 0xe3, 0x2b, 0x6f, 0xe3, 0x34, 0x38, 0xea, 0x87, 0xf7, 0xf5, 0x92, 0xf1, 0x9a, 0x5b, 0xa0, 0xf3, - 0x1d, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xa4, 0x0c, 0xe1, 0xb6, 0x02, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_5850bd48b0187754) +} + +var fileDescriptor_wrappers_5850bd48b0187754 = []byte{ + // 381 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x4a, 0xf3, 0x30, + 0x18, 0xc6, 0xe9, 0xbe, 0x7d, 0x73, 0x4b, 0x05, 0xa1, 0x78, 0xa0, 0x75, 0x38, 0xd9, 0x89, 0x7f, + 0x0e, 0x52, 0xdc, 0xc6, 0x40, 0x11, 0x84, 0x29, 0x82, 0xa7, 0x0e, 0x15, 0x3c, 0x91, 0x64, 0xcb, + 0x4a, 0xa1, 0x36, 0x25, 0x4d, 0x37, 0x77, 0x24, 0x78, 0x09, 0x7a, 0x45, 0x5e, 0x83, 0xb7, 0xe0, + 0x85, 0x48, 0xb2, 0x37, 0xd9, 0x74, 0x54, 0x3d, 0x7b, 0xde, 0xe6, 0xf9, 0x3d, 0xe1, 0x7d, 0x48, + 0xd1, 0x2e, 0x7b, 0x24, 0x0f, 0x69, 0xcc, 0xb2, 0x20, 0x15, 0x5c, 0xf2, 0x00, 0xc6, 0x94, 0x06, + 0x13, 0x41, 0xd2, 0x94, 0x89, 0x0c, 0xeb, 0x03, 0xaf, 0x11, 0x8a, 0x74, 0x80, 0x43, 0x22, 0xd9, + 0x84, 0x4c, 0xb1, 0xa1, 0xb0, 0xf5, 0xfb, 0xf5, 0x90, 0xf3, 0x30, 0x66, 0x01, 0x49, 0xa3, 0x80, + 0x24, 0x09, 0x97, 0x44, 0x46, 0x3c, 0x01, 0xdc, 0xdf, 0x86, 0x53, 0x3d, 0xd1, 0x7c, 0xf4, 0x2d, + 0xbe, 0xf9, 0x56, 0x46, 0xd5, 0x5b, 0xf8, 0xe4, 0x9d, 0xa2, 0xd5, 0x4c, 0x8a, 0x28, 0x09, 0xef, + 0xc7, 0x24, 0xce, 0xd9, 0x86, 0xb3, 0xe3, 0xec, 0xb9, 0xad, 0x3a, 0x9e, 0x65, 0x60, 0x93, 0x81, + 0xfb, 0xda, 0x74, 0xa3, 0x3c, 0x57, 0x6e, 0x36, 0x1f, 0xbc, 0x13, 0xe4, 0x46, 0x89, 0x6c, 0xb7, + 0x80, 0x2f, 0x69, 0x7e, 0x6b, 0x89, 0xbf, 0x54, 0x9e, 0x19, 0x8e, 0x22, 0xab, 0x81, 0xee, 0x76, + 0x80, 0xfe, 0x57, 0x4c, 0x77, 0x3b, 0x73, 0x1a, 0xb4, 0xa2, 0x47, 0x31, 0x27, 0x12, 0xe8, 0x72, + 0x01, 0x7d, 0xa1, 0x3c, 0x40, 0x8f, 0xac, 0x56, 0xab, 0x0f, 0x79, 0x4e, 0x63, 0x06, 0xf8, 0xff, + 0x82, 0xd5, 0xcf, 0xb5, 0x09, 0x56, 0x1f, 0xce, 0x07, 0xef, 0x08, 0x21, 0xca, 0x79, 0x0c, 0x78, + 0x45, 0xe3, 0xfe, 0x12, 0xde, 0xe3, 0x3c, 0x9e, 0xc1, 0x35, 0x6a, 0xa4, 0xba, 0x3b, 0x5f, 0xac, + 0x6d, 0xa5, 0xe0, 0xee, 0xeb, 0x85, 0xde, 0xdc, 0x7c, 0xa1, 0x38, 0x08, 0xb0, 0xcd, 0x55, 0x7f, + 0x08, 0x30, 0xd5, 0xb9, 0xf9, 0xd7, 0xee, 0xe8, 0x54, 0xb2, 0x0c, 0xf8, 0x5a, 0x41, 0x77, 0x3d, + 0xe5, 0x81, 0xee, 0xa8, 0xd5, 0xad, 0x17, 0x07, 0xad, 0x99, 0x37, 0xd4, 0x67, 0x62, 0x1c, 0x0d, + 0x98, 0xf7, 0x84, 0x2a, 0x67, 0x82, 0x11, 0xc9, 0xbc, 0x7d, 0xfc, 0xcb, 0x0b, 0xc6, 0x86, 0xf5, + 0xff, 0x6e, 0x6d, 0x36, 0x9e, 0xdf, 0x3f, 0x5e, 0x4b, 0x9b, 0xcd, 0xf5, 0x60, 0x7c, 0x68, 0x7e, + 0x1e, 0xfb, 0xb6, 0x8f, 0x9d, 0x83, 0x9e, 0x7b, 0x57, 0xb3, 0x18, 0xad, 0xe8, 0x15, 0xda, 0x9f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x0a, 0xc7, 0xe3, 0xe9, 0x76, 0x03, 0x00, 0x00, } diff --git a/examples/proto/examplepb/wrappers.proto b/examples/proto/examplepb/wrappers.proto index 094b0a4c662..b232a37fc83 100644 --- a/examples/proto/examplepb/wrappers.proto +++ b/examples/proto/examplepb/wrappers.proto @@ -12,6 +12,9 @@ message Wrappers { google.protobuf.FloatValue float_value = 4; google.protobuf.DoubleValue double_value = 5; google.protobuf.BoolValue bool_value = 6; + google.protobuf.UInt32Value uint32_value = 7; + google.protobuf.UInt64Value uint64_value = 8; + google.protobuf.BytesValue bytes_value = 9; } service WrappersService { diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/proto/examplepb/wrappers.swagger.json index 37c6144aed1..f30c5d4f0a6 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/proto/examplepb/wrappers.swagger.json @@ -54,7 +54,7 @@ "format": "int32" }, "int64_value": { - "type": "integer", + "type": "string", "format": "int64" }, "float_value": { @@ -68,6 +68,18 @@ "bool_value": { "type": "boolean", "format": "boolean" + }, + "uint32_value": { + "type": "integer", + "format": "int64" + }, + "uint64_value": { + "type": "string", + "format": "uint64" + }, + "bytes_value": { + "type": "string", + "format": "byte" } } } diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f12ea38f724..3489736abd3 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -26,14 +26,26 @@ var wktSchemas = map[string]schemaCore{ ".google.protobuf.StringValue": schemaCore{ Type: "string", }, + ".google.protobuf.BytesValue": schemaCore{ + Type: "string", + Format: "byte", + }, ".google.protobuf.Int32Value": schemaCore{ Type: "integer", Format: "int32", }, - ".google.protobuf.Int64Value": schemaCore{ + ".google.protobuf.UInt32Value": schemaCore{ Type: "integer", Format: "int64", }, + ".google.protobuf.Int64Value": schemaCore{ + Type: "string", + Format: "int64", + }, + ".google.protobuf.UInt64Value": schemaCore{ + Type: "string", + Format: "uint64", + }, ".google.protobuf.FloatValue": schemaCore{ Type: "number", Format: "float", @@ -201,10 +213,16 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, continue case ".google.protobuf.StringValue": continue + case ".google.protobuf.BytesValue": + continue case ".google.protobuf.Int32Value": continue + case ".google.protobuf.UInt32Value": + continue case ".google.protobuf.Int64Value": continue + case ".google.protobuf.UInt64Value": + continue case ".google.protobuf.FloatValue": continue case ".google.protobuf.DoubleValue": diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 115391ee352..f0ecd1e370d 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -836,6 +836,118 @@ func TestSchemaOfField(t *testing.T) { }, }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.BytesValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "string", + Format: "bytes", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.Int32Value"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "integer", + Format: "int32", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.UInt32Value"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "integer", + Format: "int64", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.Int64Value"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "string", + Format: "int64", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.UInt64Value"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "string", + Format: "uint64", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.FloatValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "number", + Format: "float", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.DoubleValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "number", + Format: "double", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.BoolValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "boolean", + Format: "boolean", + }, + }, { field: &descriptor.Field{ FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ From 7226a0d0cd5d6a64d73ed5eba1ce19cad859d70f Mon Sep 17 00:00:00 2001 From: James Hamlin Date: Wed, 1 Aug 2018 16:54:45 -0700 Subject: [PATCH 0022/1518] Add test case and proposed fix for path component with trailing colon (and string) (#708) * If a pattern has no verb, match with a verb arg appended to last component Parsing out a "verb" from the input path is a convenience for parsing. Whether the colon and string are _actually_ a verb depends on the matching HTTP rule. This change gives a verb-less pattern a chance to match a path by assuming the colon+string suffix are a part of the final component. Fixes #224 Signed-off-by: James Hamlin --- runtime/mux.go | 1 + runtime/mux_test.go | 32 ++++++++++++++++++++++++++++++++ runtime/pattern.go | 11 ++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/runtime/mux.go b/runtime/mux.go index 1d4c75760fe..6c06ab8c222 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -7,6 +7,7 @@ import ( "strings" "context" + "github.com/golang/protobuf/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" diff --git a/runtime/mux_test.go b/runtime/mux_test.go index bb90a7306a1..a0f15f7ae4e 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -176,6 +176,38 @@ func TestMuxServeHTTP(t *testing.T) { respStatus: http.StatusOK, respContent: "POST /foo:bar", }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "GET /foo/{id=*}", + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/bar:123", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "GET /foo/{id=*}", + }, } { mux := runtime.NewServeMux() for _, p := range spec.patterns { diff --git a/runtime/pattern.go b/runtime/pattern.go index f16a84ad389..223a12ecc43 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -144,7 +144,16 @@ func MustPattern(p Pattern, err error) Pattern { // If otherwise, the function returns an error. func (p Pattern) Match(components []string, verb string) (map[string]string, error) { if p.verb != verb { - return nil, ErrNotMatch + if p.verb != "" { + return nil, ErrNotMatch + } + if len(components) == 0 { + components = []string{":" + verb} + } else { + components = append([]string{}, components...) + components[len(components)-1] += ":" + verb + } + verb = "" } var pos int From 4a8ec3c01019bfc66a4fe6b37370c4d3aec48ca7 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 1 Aug 2018 18:12:54 -0600 Subject: [PATCH 0023/1518] Fix up examples --- .../proto/examplepb/a_bit_of_everything.pb.go | 44 ++++++----- examples/proto/examplepb/echo_service.pb.go | 76 +++++++++++-------- 2 files changed, 66 insertions(+), 54 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 5e3779c36c7..da41accc08d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -145,27 +145,6 @@ func (m *ABitOfEverything) XXX_DiscardUnknown() { var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo -type isABitOfEverything_OneofValue interface { - isABitOfEverything_OneofValue() -} - -type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` -} -type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` -} - -func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} -func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} - -func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { - if m != nil { - return m.OneofValue - } - return nil -} - func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { if m != nil { return m.SingleNested @@ -306,6 +285,29 @@ func (m *ABitOfEverything) GetRepeatedStringValue() []string { return nil } +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() +} + +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` +} + +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` +} + +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} + +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} + +func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { + if m != nil { + return m.OneofValue + } + return nil +} + func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index c99f75b69cc..da8af13fbf9 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -73,12 +73,14 @@ type isEmbedded_Mark interface { type Embedded_Progress struct { Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` } + type Embedded_Note struct { Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` } func (*Embedded_Progress) isEmbedded_Mark() {} -func (*Embedded_Note) isEmbedded_Mark() {} + +func (*Embedded_Note) isEmbedded_Mark() {} func (m *Embedded) GetMark() isEmbedded_Mark { if m != nil { @@ -209,30 +211,35 @@ func (m *SimpleMessage) XXX_DiscardUnknown() { var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo +func (m *SimpleMessage) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *SimpleMessage) GetNum() int64 { + if m != nil { + return m.Num + } + return 0 +} + type isSimpleMessage_Code interface { isSimpleMessage_Code() } -type isSimpleMessage_Ext interface { - isSimpleMessage_Ext() -} type SimpleMessage_LineNum struct { LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` } + type SimpleMessage_Lang struct { Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` } -type SimpleMessage_En struct { - En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` -} -type SimpleMessage_No struct { - No *Embedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` -} func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} -func (*SimpleMessage_Lang) isSimpleMessage_Code() {} -func (*SimpleMessage_En) isSimpleMessage_Ext() {} -func (*SimpleMessage_No) isSimpleMessage_Ext() {} + +func (*SimpleMessage_Lang) isSimpleMessage_Code() {} func (m *SimpleMessage) GetCode() isSimpleMessage_Code { if m != nil { @@ -240,26 +247,6 @@ func (m *SimpleMessage) GetCode() isSimpleMessage_Code { } return nil } -func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { - if m != nil { - return m.Ext - } - return nil -} - -func (m *SimpleMessage) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *SimpleMessage) GetNum() int64 { - if m != nil { - return m.Num - } - return 0 -} func (m *SimpleMessage) GetLineNum() int64 { if x, ok := m.GetCode().(*SimpleMessage_LineNum); ok { @@ -282,6 +269,29 @@ func (m *SimpleMessage) GetStatus() *Embedded { return nil } +type isSimpleMessage_Ext interface { + isSimpleMessage_Ext() +} + +type SimpleMessage_En struct { + En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` +} + +type SimpleMessage_No struct { + No *Embedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` +} + +func (*SimpleMessage_En) isSimpleMessage_Ext() {} + +func (*SimpleMessage_No) isSimpleMessage_Ext() {} + +func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { + if m != nil { + return m.Ext + } + return nil +} + func (m *SimpleMessage) GetEn() int64 { if x, ok := m.GetExt().(*SimpleMessage_En); ok { return x.En From 42fa2028fd3ba4a546dd525d9db71573f1992ba1 Mon Sep 17 00:00:00 2001 From: izumin5210 Date: Mon, 30 Jul 2018 09:53:33 +0900 Subject: [PATCH 0024/1518] Make support paths option Make protoc-gen-grpc-gateway support paths option such like golang/protobuf#515. --- .../gengateway/generator.go | 24 +++++++++++++++++-- .../gengateway/generator_test.go | 24 ++++++++++++++++++- protoc-gen-grpc-gateway/main.go | 3 ++- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index bccd39e0405..a5ed4ede518 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -19,15 +19,23 @@ var ( errNoTargetService = errors.New("no target service defined in the file") ) +type pathType int + +const ( + pathTypeImport pathType = iota + pathTypeSourceRelative +) + type generator struct { reg *descriptor.Registry baseImports []descriptor.GoPackage useRequestContext bool registerFuncSuffix string + pathType pathType } // New returns a new generator which generates grpc gateway files. -func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix string) gen.Generator { +func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string) gen.Generator { var imports []descriptor.GoPackage for _, pkgpath := range []string{ "io", @@ -57,11 +65,23 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix st } imports = append(imports, pkg) } + + var pathType pathType + switch pathTypeString { + case "", "import": + // paths=import is default + case "source_relative": + pathType = pathTypeSourceRelative + default: + glog.Fatalf(`Unknown path type %q: want "import" or "source_relative".`, pathTypeString) + } + return &generator{ reg: reg, baseImports: imports, useRequestContext: useRequestContext, registerFuncSuffix: registerFuncSuffix, + pathType: pathType, } } @@ -83,7 +103,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato return nil, err } name := file.GetName() - if file.GoPkg.Path != "" { + if g.pathType == pathTypeImport && file.GoPkg.Path != "" { name = fmt.Sprintf("%s/%s", file.GoPkg.Path, filepath.Base(name)) } ext := filepath.Ext(name) diff --git a/protoc-gen-grpc-gateway/gengateway/generator_test.go b/protoc-gen-grpc-gateway/gengateway/generator_test.go index 986ff4151e5..39e5f141dbe 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/gengateway/generator_test.go @@ -101,6 +101,7 @@ func TestGenerateServiceWithoutBindings(t *testing.T) { func TestGenerateOutputPath(t *testing.T) { cases := []struct { file *descriptor.File + pathType pathType expected string }{ { @@ -121,10 +122,31 @@ func TestGenerateOutputPath(t *testing.T) { ), expected: "example", }, + { + file: newExampleFileDescriptorWithGoPkg( + &descriptor.GoPackage{ + Path: "example.com/path/to/example", + Name: "example_pb", + }, + ), + pathType: pathTypeSourceRelative, + expected: ".", + }, + { + file: newExampleFileDescriptorWithGoPkg( + &descriptor.GoPackage{ + Path: "example", + Name: "example_pb", + }, + ), + pathType: pathTypeSourceRelative, + expected: ".", + }, } - g := &generator{} for _, c := range cases { + g := &generator{pathType: c.pathType} + file := c.file gots, err := g.Generate([]*descriptor.File{crossLinkFixture(file)}) if err != nil { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 7ef4aa1b5b6..b9d2dcfca6f 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -28,6 +28,7 @@ var ( useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") ) func main() { @@ -62,7 +63,7 @@ func main() { } } - g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix) + g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *pathType) if *grpcAPIConfiguration != "" { if err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil { From 7951e5b80744558ae3363fd792806e1db15e91a4 Mon Sep 17 00:00:00 2001 From: Fred Shih Date: Thu, 2 Aug 2018 23:14:01 -0700 Subject: [PATCH 0025/1518] Add message field to the error message emitted by grpc-gateway (#718) * Add message field to the error message emitted by grpc-gateway to make it more consistent with Status --- runtime/errors.go | 5 +++++ runtime/errors_test.go | 3 +++ 2 files changed, 8 insertions(+) diff --git a/runtime/errors.go b/runtime/errors.go index d112dfb7e13..b39f55ea824 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -66,6 +66,10 @@ var ( type errorBody struct { Error string `protobuf:"bytes,1,name=error" json:"error"` + // This is to make the error more compatible with users that expect errors to be Status objects: + // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto + // It should be the exact same message as the Error field. + Message string `protobuf:"bytes,1,name=message" json:"message"` Code int32 `protobuf:"varint,2,name=code" json:"code"` Details []*any.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"` } @@ -94,6 +98,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w body := &errorBody{ Error: s.Message(), + Message: s.Message(), Code: int32(s.Code()), Details: s.Proto().GetDetails(), } diff --git a/runtime/errors_test.go b/runtime/errors_test.go index de51052893f..f595375718e 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -65,6 +65,9 @@ func TestDefaultHTTPError(t *testing.T) { if got, want := body["error"].(string), spec.msg; !strings.Contains(got, want) { t.Errorf(`body["error"] = %q; want %q; on spec.err=%v`, got, want, spec.err) } + if got, want := body["message"].(string), spec.msg; !strings.Contains(got, want) { + t.Errorf(`body["message"] = %q; want %q; on spec.err=%v`, got, want, spec.err) + } if spec.details != "" { details, ok := body["details"].([]interface{}) From 221ef342721da51038fa6fc3fbd4f0d190f9f6f7 Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Fri, 29 Jun 2018 03:16:38 +0900 Subject: [PATCH 0026/1518] protoc-gen-swagger: support JSON Schema Validation properties and add openapiv2_field option This change supports [JSON Schema Validation](https://tools.ietf.org/html/draft-fge-json-schema-validation-00) properties. It allows you to specify some validation rules in `openapiv2_schema` option and `openapiv2_field` option of your .proto files. --- .../abe/examplepb_a_bit_of_everything.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 303 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 3 +- .../a_bit_of_everything.swagger.json | 8 +- protoc-gen-swagger/genswagger/template.go | 96 +++++- protoc-gen-swagger/genswagger/types.go | 15 + protoc-gen-swagger/options/annotations.pb.go | 58 ++-- protoc-gen-swagger/options/annotations.proto | 7 + 8 files changed, 300 insertions(+), 192 deletions(-) diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index a64597c7f47..a20c5c0db30 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -19,7 +19,7 @@ type ExamplepbABitOfEverything struct { SingleNested ABitOfEverythingNested `json:"single_nested,omitempty"` - Uuid string `json:"uuid,omitempty"` + Uuid string `json:"uuid"` Nested []ABitOfEverythingNested `json:"nested,omitempty"` diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index da41accc08d..58b4581ae25 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0} } // DeepEnum is one or zero. @@ -79,7 +79,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -449,7 +449,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{0, 0} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -501,7 +501,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{1} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -540,7 +540,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_a70f672d918531b9, []int{2} + return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1203,148 +1203,151 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_a70f672d918531b9) -} - -var fileDescriptor_a_bit_of_everything_a70f672d918531b9 = []byte{ - // 2222 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcb, 0x73, 0x1b, 0x49, - 0x19, 0xf7, 0x48, 0xb6, 0x62, 0x7f, 0x7e, 0xc9, 0xed, 0x3c, 0x1c, 0xc5, 0x59, 0x77, 0x94, 0x2c, - 0xab, 0x78, 0xe3, 0x99, 0x44, 0x31, 0x5b, 0x89, 0x29, 0x08, 0xb2, 0xad, 0x4d, 0xbc, 0xd9, 0x38, - 0xce, 0x24, 0x1b, 0x52, 0xa9, 0x2c, 0xa6, 0x35, 0xd3, 0x96, 0x26, 0xd1, 0x4c, 0x0f, 0xd3, 0x3d, - 0xb6, 0x85, 0x31, 0x14, 0x50, 0x05, 0x45, 0x71, 0xa0, 0xca, 0xdc, 0x38, 0xec, 0x01, 0xaa, 0x28, - 0x2e, 0x1c, 0x38, 0x70, 0x81, 0x2a, 0x38, 0x71, 0xda, 0x23, 0x55, 0x1c, 0xb8, 0xc2, 0x81, 0x3f, - 0x83, 0xea, 0x9e, 0x19, 0x79, 0x24, 0x5b, 0x38, 0x4a, 0xb6, 0xf6, 0x62, 0x4f, 0x77, 0xff, 0xbe, - 0xf7, 0xa3, 0xbf, 0x16, 0x94, 0xe9, 0x2e, 0x71, 0xfd, 0x26, 0xe5, 0x86, 0x1f, 0x30, 0xc1, 0x8c, - 0x78, 0xe9, 0xd7, 0x0c, 0xb2, 0x59, 0x73, 0xc4, 0x26, 0xdb, 0xda, 0xa4, 0xdb, 0x34, 0x68, 0x89, - 0x86, 0xe3, 0xd5, 0x75, 0x85, 0x41, 0x73, 0xf5, 0xc0, 0xb7, 0xf4, 0x3a, 0x11, 0x74, 0x87, 0xb4, - 0xf4, 0x84, 0x81, 0xde, 0x26, 0x2d, 0xcc, 0xd6, 0x19, 0xab, 0x37, 0xa9, 0x41, 0x7c, 0xc7, 0x20, - 0x9e, 0xc7, 0x04, 0x11, 0x0e, 0xf3, 0x78, 0x44, 0x5e, 0xb8, 0x10, 0x9f, 0xaa, 0x55, 0x2d, 0xdc, - 0x32, 0xa8, 0xeb, 0x8b, 0x56, 0x7c, 0xf8, 0x4e, 0xf7, 0xa1, 0x1d, 0x06, 0x8a, 0x3a, 0x3e, 0xc7, - 0x5d, 0xfa, 0xf2, 0xb0, 0x66, 0xb8, 0x94, 0x73, 0x52, 0xa7, 0x31, 0xe2, 0xd2, 0x51, 0x44, 0xb9, - 0x0b, 0x32, 0xd7, 0x2d, 0x44, 0x38, 0x2e, 0xe5, 0x82, 0xb8, 0x7e, 0x0c, 0xb8, 0xa6, 0xfe, 0x59, - 0x0b, 0x75, 0xea, 0x2d, 0xf0, 0x1d, 0x52, 0xaf, 0xd3, 0xc0, 0x60, 0xbe, 0x32, 0xe2, 0xa8, 0x41, - 0xc5, 0xdf, 0x4c, 0x41, 0xbe, 0xb2, 0xec, 0x88, 0x87, 0x5b, 0xd5, 0xb6, 0xab, 0xd0, 0xa7, 0x30, - 0xce, 0x1d, 0xaf, 0xde, 0xa4, 0x9b, 0x1e, 0xe5, 0x82, 0xda, 0x33, 0xe7, 0xb1, 0x56, 0x1a, 0x2d, - 0xdf, 0xd2, 0x4f, 0x70, 0x9e, 0xde, 0xcd, 0x49, 0x5f, 0x57, 0xf4, 0xe6, 0x58, 0xc4, 0x2e, 0x5a, - 0x21, 0x04, 0x83, 0x61, 0xe8, 0xd8, 0x33, 0x1a, 0xd6, 0x4a, 0x23, 0xa6, 0xfa, 0x46, 0x1b, 0x90, - 0x8b, 0x65, 0x65, 0x70, 0xf6, 0xad, 0x64, 0xc5, 0x7c, 0xd0, 0x1c, 0x8c, 0x6e, 0x35, 0x19, 0x11, - 0x9b, 0xdb, 0xa4, 0x19, 0xd2, 0x99, 0x2c, 0xd6, 0x4a, 0x19, 0x13, 0xd4, 0xd6, 0x53, 0xb9, 0x83, - 0x2e, 0xc1, 0x98, 0xcd, 0xc2, 0x5a, 0x93, 0xc6, 0x88, 0x41, 0xac, 0x95, 0x34, 0x73, 0x34, 0xda, - 0x8b, 0x20, 0x73, 0x30, 0xea, 0x78, 0xe2, 0x83, 0xc5, 0x18, 0x31, 0x84, 0xb5, 0x52, 0xd6, 0x04, - 0xb5, 0xd5, 0xe6, 0x11, 0xa6, 0x11, 0x39, 0xac, 0x95, 0x06, 0xcd, 0xd1, 0x30, 0x05, 0x89, 0x78, - 0xdc, 0x2c, 0xc7, 0x88, 0x53, 0x58, 0x2b, 0x0d, 0x29, 0x1e, 0x37, 0xcb, 0x11, 0xe0, 0x32, 0x8c, - 0x6f, 0x39, 0xbb, 0xd4, 0x6e, 0x33, 0x19, 0xc6, 0x5a, 0x29, 0x67, 0x8e, 0xc5, 0x9b, 0x9d, 0xa0, - 0x36, 0x9f, 0x11, 0xac, 0x95, 0x4e, 0xc5, 0xa0, 0x84, 0xd3, 0x45, 0x80, 0x1a, 0x63, 0xcd, 0x18, - 0x01, 0x58, 0x2b, 0x0d, 0x9b, 0x23, 0x72, 0xa7, 0xad, 0x2c, 0x17, 0x81, 0xe3, 0xd5, 0x63, 0xc0, - 0xa8, 0xf2, 0xff, 0x68, 0xb4, 0xd7, 0x56, 0xb6, 0xd6, 0x12, 0x94, 0xc7, 0x88, 0x8b, 0x58, 0x2b, - 0x8d, 0x99, 0xa0, 0xb6, 0x3a, 0x0c, 0x6e, 0xab, 0x31, 0x8e, 0xb5, 0xd2, 0x78, 0x64, 0x70, 0xa2, - 0xc5, 0x7d, 0x00, 0xea, 0x85, 0x6e, 0x0c, 0x98, 0xc0, 0x5a, 0x69, 0xa2, 0x7c, 0xed, 0xc4, 0x70, - 0xae, 0x87, 0x2e, 0x0d, 0x1c, 0xab, 0xea, 0x85, 0xae, 0x39, 0x22, 0xe9, 0x23, 0x66, 0xef, 0xc2, - 0x04, 0xef, 0x34, 0x7c, 0x12, 0x6b, 0xa5, 0x49, 0x73, 0x9c, 0x77, 0x58, 0xde, 0x86, 0xb5, 0x9d, - 0x98, 0xc7, 0x5a, 0x29, 0x9f, 0xc0, 0x52, 0xe1, 0xe2, 0x69, 0xed, 0xa7, 0xb0, 0x56, 0x9a, 0x32, - 0x47, 0x79, 0x4a, 0xfb, 0x18, 0xd2, 0xe6, 0x83, 0xb0, 0x56, 0x42, 0x11, 0x24, 0xe1, 0x52, 0x86, - 0x33, 0x01, 0xf5, 0x29, 0x11, 0xd4, 0xde, 0xec, 0x70, 0xe8, 0x34, 0xce, 0x96, 0x46, 0xcc, 0xe9, - 0xe4, 0xf0, 0x71, 0xca, 0xb1, 0xb7, 0x61, 0x94, 0x79, 0x54, 0x76, 0x24, 0xd9, 0x30, 0x66, 0x4e, - 0xab, 0x82, 0x3a, 0xab, 0x47, 0xc5, 0xac, 0x27, 0xc5, 0xac, 0x57, 0xe5, 0xe9, 0xbd, 0x01, 0x13, - 0x14, 0x58, 0xad, 0xd0, 0x65, 0x18, 0x8b, 0x48, 0x23, 0x59, 0x33, 0x67, 0x64, 0xd8, 0xee, 0x0d, - 0x98, 0x11, 0xc3, 0x48, 0x08, 0x7a, 0x01, 0x23, 0x2e, 0xf1, 0x63, 0x3d, 0xce, 0xaa, 0x12, 0xba, - 0xd3, 0x7f, 0x09, 0x3d, 0x20, 0xbe, 0x52, 0xb7, 0xea, 0x89, 0xa0, 0x65, 0x0e, 0xbb, 0xf1, 0x12, - 0xed, 0xc2, 0xb4, 0x4b, 0x7c, 0xbf, 0xdb, 0xde, 0x73, 0x4a, 0xce, 0xbd, 0x37, 0x92, 0xe3, 0x77, - 0xf8, 0x27, 0x12, 0x38, 0xe5, 0x76, 0xef, 0xa7, 0x24, 0x47, 0x65, 0x1d, 0x4b, 0x9e, 0x79, 0x3b, - 0xc9, 0x51, 0xab, 0x38, 0x2a, 0x39, 0xb5, 0x8f, 0x96, 0x60, 0xc6, 0x63, 0xde, 0x0a, 0xf3, 0xb6, - 0xa9, 0x27, 0x3b, 0x26, 0x69, 0xae, 0x13, 0x37, 0xea, 0x0b, 0x33, 0x05, 0x55, 0x39, 0x3d, 0xcf, - 0xd1, 0x0a, 0x4c, 0xb6, 0xdb, 0x72, 0xac, 0xf1, 0x05, 0x15, 0xf1, 0xc2, 0x91, 0x88, 0x3f, 0x49, - 0x70, 0xe6, 0x44, 0x9b, 0x24, 0x62, 0xf2, 0x02, 0xda, 0x99, 0xb4, 0x99, 0x2a, 0xa8, 0x59, 0x9c, - 0xed, 0xbb, 0xa0, 0xa6, 0x12, 0x46, 0xd5, 0xa4, 0xb0, 0x0a, 0xbf, 0xd7, 0x20, 0x77, 0xd8, 0x8f, - 0x3d, 0xe2, 0xd2, 0xa4, 0x1f, 0xcb, 0x6f, 0x74, 0x16, 0x72, 0xc4, 0x65, 0xa1, 0x27, 0x66, 0x32, - 0xaa, 0xc2, 0xe3, 0x15, 0x7a, 0x04, 0x19, 0xf6, 0x4a, 0x35, 0xd3, 0x89, 0x72, 0xe5, 0x4d, 0x7b, - 0xb4, 0xbe, 0x4a, 0xa9, 0xaf, 0x14, 0xcb, 0xb0, 0x57, 0xc5, 0x39, 0x18, 0x4e, 0xd6, 0x68, 0x04, - 0x86, 0x3e, 0xac, 0x7c, 0xfc, 0xb8, 0x9a, 0x1f, 0x40, 0xc3, 0x30, 0xf8, 0xc4, 0xfc, 0xa4, 0x9a, - 0xd7, 0x0a, 0x0e, 0x8c, 0x77, 0x24, 0x26, 0xca, 0x43, 0xf6, 0x15, 0x6d, 0xc5, 0xfa, 0xca, 0x4f, - 0xb4, 0x0c, 0x43, 0x91, 0x77, 0x32, 0x6f, 0xd0, 0x6e, 0x22, 0xd2, 0xa5, 0xcc, 0x2d, 0xad, 0xb0, - 0x0a, 0x67, 0x8f, 0xcf, 0xcd, 0x63, 0x64, 0x9e, 0x4e, 0xcb, 0x1c, 0x49, 0x73, 0xf9, 0x41, 0xc2, - 0xa5, 0x3b, 0xcf, 0x8e, 0xe1, 0xb2, 0x9e, 0xe6, 0xf2, 0x36, 0xf7, 0xde, 0xa1, 0xfc, 0xa5, 0xbf, - 0x6a, 0x07, 0x95, 0x3f, 0x6b, 0xf0, 0x9d, 0xf9, 0xe9, 0x0a, 0xae, 0x39, 0x02, 0xb3, 0x2d, 0x7c, - 0x38, 0x08, 0x95, 0xd7, 0xd6, 0x3c, 0x91, 0xa4, 0x6c, 0x0b, 0x5b, 0xcc, 0xf5, 0x9b, 0x8e, 0x25, - 0x93, 0x03, 0xc7, 0x93, 0x06, 0x16, 0x2d, 0x9f, 0x62, 0xc1, 0xb0, 0xc5, 0xb6, 0x69, 0x80, 0x5d, - 0xe2, 0xb5, 0xf0, 0x16, 0x25, 0x22, 0x0c, 0x28, 0x97, 0xbc, 0x36, 0x92, 0xdc, 0x9d, 0x7f, 0x0a, - 0x57, 0x3e, 0x74, 0x3c, 0x1b, 0xb3, 0x50, 0x60, 0x97, 0x05, 0x14, 0x93, 0x9a, 0xfc, 0x3c, 0x32, - 0x50, 0xe8, 0x0d, 0x21, 0x7c, 0xbe, 0x64, 0x18, 0x75, 0x47, 0x34, 0xc2, 0x9a, 0x6e, 0x31, 0xd7, - 0x90, 0x76, 0x2e, 0x50, 0x8b, 0xf1, 0x16, 0x17, 0x34, 0x5e, 0xc6, 0x66, 0x2f, 0x8f, 0x27, 0xdd, - 0x52, 0xd9, 0x54, 0x2c, 0xc0, 0xe0, 0x32, 0xb3, 0x5b, 0xc7, 0x25, 0x6a, 0xf1, 0x05, 0x4c, 0x3e, - 0x88, 0xd4, 0xfe, 0x96, 0x23, 0x1a, 0x0a, 0x36, 0x01, 0x99, 0xf6, 0x74, 0x91, 0x71, 0x6c, 0x74, - 0x1b, 0x06, 0x6d, 0x22, 0x48, 0xec, 0xe1, 0x77, 0x4f, 0xf4, 0xb0, 0x64, 0x62, 0x2a, 0x92, 0x79, - 0x0c, 0xa3, 0xa9, 0x4c, 0x91, 0x39, 0xf9, 0xbc, 0x6a, 0x3e, 0xcc, 0x0f, 0xa0, 0x53, 0x90, 0x7d, - 0xb8, 0x5e, 0xcd, 0x6b, 0xe5, 0x3f, 0x9e, 0x86, 0x73, 0xdd, 0xf6, 0x3e, 0xa6, 0xc1, 0xb6, 0x63, - 0x51, 0xf4, 0x59, 0x16, 0x72, 0x2b, 0x81, 0x2c, 0x3c, 0x74, 0xa3, 0xef, 0xb8, 0x16, 0xfa, 0x27, - 0x29, 0xfe, 0x21, 0xf3, 0xe3, 0x7f, 0xfc, 0xe7, 0x57, 0x99, 0xdf, 0x65, 0x8a, 0xbf, 0xcd, 0x18, - 0xdb, 0x37, 0x92, 0x89, 0xf8, 0xb8, 0x79, 0xd8, 0xd8, 0x4b, 0x4d, 0x47, 0xfb, 0xc6, 0x5e, 0x7a, - 0x14, 0xda, 0x37, 0xf6, 0x52, 0x57, 0xe0, 0xbe, 0xc1, 0xa9, 0x4f, 0x02, 0x22, 0x58, 0x60, 0xec, - 0x85, 0x1d, 0x07, 0x7b, 0xa9, 0xcb, 0x74, 0xdf, 0xd8, 0xeb, 0xb8, 0x81, 0x93, 0x75, 0xea, 0xfc, - 0x70, 0x38, 0xd9, 0x37, 0xf6, 0xd2, 0x37, 0xc9, 0xd7, 0xb9, 0x08, 0xfc, 0x80, 0x6e, 0x39, 0xbb, - 0xc6, 0xfc, 0x7e, 0x24, 0x24, 0x45, 0xc6, 0xbb, 0xf9, 0xf0, 0x6e, 0x41, 0xbc, 0x8b, 0xa0, 0x53, - 0xc9, 0x5e, 0x6d, 0x7a, 0x1f, 0x7d, 0xa6, 0x01, 0x44, 0x01, 0x52, 0x89, 0xf3, 0xe5, 0x04, 0x69, - 0x5e, 0xc5, 0xe8, 0x4a, 0x71, 0xee, 0x84, 0x08, 0x2d, 0x69, 0xf3, 0xe8, 0xfb, 0x90, 0xfb, 0x98, - 0xb1, 0x57, 0xa1, 0x8f, 0x26, 0x75, 0xf9, 0x18, 0xd0, 0xd7, 0xec, 0x38, 0xdb, 0xdf, 0x44, 0xb2, - 0xae, 0x24, 0x97, 0xd0, 0x57, 0x4e, 0xcc, 0x0d, 0x39, 0x93, 0xef, 0xa3, 0x9f, 0x6a, 0x90, 0xfb, - 0xc4, 0xb7, 0xdf, 0x30, 0x7f, 0x7b, 0x4c, 0x37, 0xc5, 0x1b, 0x4a, 0x8b, 0xf7, 0x0b, 0xaf, 0xa9, - 0x85, 0x74, 0xc3, 0x2f, 0x35, 0xc8, 0xad, 0xd2, 0x26, 0x15, 0xf4, 0xa8, 0x1f, 0x7a, 0x89, 0x79, - 0x71, 0x50, 0x79, 0xbf, 0x76, 0x15, 0x26, 0x00, 0x2a, 0xbe, 0x73, 0x9f, 0xb6, 0x2a, 0xa1, 0x68, - 0xa0, 0x01, 0x38, 0x07, 0xb9, 0x87, 0xf2, 0xb3, 0x8c, 0xc6, 0x61, 0x30, 0xa0, 0xc4, 0x86, 0xa1, - 0x9d, 0xc0, 0x11, 0x34, 0x72, 0xcd, 0xfc, 0xeb, 0xba, 0xe6, 0xdf, 0x1a, 0x0c, 0xdf, 0xa5, 0xe2, - 0x51, 0x48, 0x83, 0xd6, 0x17, 0xe9, 0x9c, 0x5f, 0x68, 0x07, 0x95, 0x27, 0xc5, 0x75, 0x98, 0x3d, - 0xae, 0xaf, 0xb6, 0x05, 0xf6, 0xd9, 0x4f, 0x9f, 0x69, 0xb5, 0x01, 0x65, 0x9f, 0x8e, 0xae, 0x9d, - 0x64, 0xdf, 0x77, 0xa5, 0x80, 0xc4, 0xca, 0xbf, 0x67, 0x61, 0xb0, 0x6a, 0x35, 0x18, 0x2a, 0xf5, - 0xb0, 0x90, 0x87, 0x35, 0x3d, 0xba, 0x2a, 0x93, 0x70, 0xbc, 0x36, 0xb2, 0xf8, 0xdf, 0xcc, 0x41, - 0xe5, 0x47, 0x19, 0x18, 0xa3, 0x56, 0x83, 0x61, 0x1e, 0xb5, 0x4c, 0x18, 0x56, 0xab, 0xc0, 0xb7, - 0xd0, 0xd4, 0xe3, 0xd0, 0x75, 0x49, 0xd0, 0x5a, 0xc2, 0xd5, 0x78, 0xab, 0x90, 0x5f, 0xa5, 0xdc, - 0x0a, 0x1c, 0xf5, 0x98, 0x55, 0xbb, 0xc5, 0x55, 0x40, 0x9d, 0x8e, 0x52, 0xda, 0xf6, 0xe9, 0x9e, - 0x8f, 0xee, 0x40, 0xf6, 0xab, 0xd7, 0x6f, 0xa2, 0x5b, 0xf0, 0x81, 0x49, 0x45, 0x18, 0x78, 0xd4, - 0xc6, 0x3b, 0x0d, 0xea, 0x61, 0xd1, 0xa0, 0x38, 0xa0, 0x9c, 0x85, 0x81, 0x45, 0xb1, 0xc3, 0xb1, - 0xa0, 0xae, 0xcf, 0x02, 0x12, 0x38, 0xcd, 0x16, 0x0e, 0x3d, 0xb2, 0x4d, 0x9c, 0x26, 0xa9, 0x35, - 0xa9, 0xfe, 0xd1, 0xd7, 0x20, 0xbb, 0x78, 0x7d, 0x11, 0x2d, 0xc2, 0xfc, 0xff, 0x61, 0x60, 0x33, - 0xca, 0xb1, 0xc7, 0x04, 0xa6, 0xbb, 0x0e, 0x17, 0x3a, 0xca, 0xc1, 0xe0, 0xaf, 0x33, 0x5a, 0x56, - 0x05, 0xe6, 0xd3, 0x93, 0x03, 0x23, 0x1d, 0x63, 0xec, 0x45, 0x3d, 0xed, 0xf9, 0xf9, 0x62, 0xde, - 0xd8, 0x2e, 0xb7, 0xf1, 0xf2, 0x6c, 0x29, 0x1a, 0x00, 0x9e, 0x23, 0x74, 0xe4, 0x08, 0xfd, 0x49, - 0x83, 0x31, 0x39, 0x63, 0x6d, 0x10, 0xd1, 0x50, 0x1e, 0xfa, 0x72, 0x3a, 0xdd, 0x1d, 0x65, 0xdb, - 0xed, 0xe2, 0xe2, 0x89, 0x45, 0xd5, 0xf1, 0x73, 0x83, 0x2e, 0x2f, 0x76, 0x55, 0xf7, 0x15, 0x80, - 0x75, 0xb6, 0xec, 0x78, 0xb6, 0xe3, 0xd5, 0x39, 0x3a, 0x7f, 0xa4, 0x66, 0x56, 0xe3, 0x1f, 0x58, - 0x7a, 0x96, 0xd3, 0x00, 0x7a, 0x0a, 0xa7, 0xe4, 0x88, 0xcd, 0x42, 0x81, 0x7a, 0x80, 0x7a, 0x12, - 0x5f, 0x50, 0xea, 0x9f, 0x41, 0xd3, 0x69, 0x7f, 0x8a, 0x98, 0x59, 0x03, 0xf2, 0xd5, 0x20, 0x60, - 0x81, 0x9c, 0x3a, 0x56, 0xa9, 0x20, 0x4e, 0x93, 0xf7, 0x2d, 0xe0, 0x8a, 0x12, 0xf0, 0x0e, 0x9a, - 0xed, 0x08, 0x98, 0xe4, 0xba, 0xe3, 0x88, 0x86, 0x1d, 0x73, 0xfd, 0x99, 0x06, 0xe8, 0x2e, 0x15, - 0xdd, 0x53, 0xce, 0xf5, 0x13, 0xe3, 0xd1, 0x45, 0xd1, 0x53, 0x8d, 0xf7, 0x94, 0x1a, 0x97, 0x8a, - 0xe7, 0xd3, 0x6a, 0x48, 0x0d, 0x6a, 0xcc, 0x6e, 0x19, 0x7b, 0xb2, 0x07, 0xab, 0x69, 0x08, 0xfd, - 0x44, 0x83, 0xa9, 0x0d, 0xc6, 0x85, 0xe4, 0xa8, 0x48, 0x95, 0x22, 0xaf, 0x37, 0x50, 0xf5, 0x94, - 0x6e, 0x28, 0xe9, 0x57, 0x8b, 0x57, 0xd2, 0xd2, 0x7d, 0xc6, 0x85, 0xd4, 0x40, 0xbd, 0x96, 0x23, - 0x35, 0x92, 0xa4, 0x28, 0xfc, 0x4d, 0x3b, 0xa8, 0xfc, 0x45, 0x43, 0x5b, 0x3d, 0xa6, 0x2e, 0x6c, - 0xa7, 0x9a, 0xc4, 0xc2, 0x02, 0xde, 0x69, 0x38, 0x56, 0x03, 0xf3, 0x06, 0x0b, 0x9b, 0xb6, 0x2a, - 0xbf, 0x1a, 0xc5, 0x21, 0xa7, 0x36, 0x76, 0x3c, 0xec, 0x37, 0x89, 0x45, 0xe5, 0x48, 0x2b, 0x0b, - 0xd5, 0x66, 0x56, 0xe8, 0x52, 0x2f, 0xfa, 0x7d, 0x4c, 0xce, 0xc5, 0x72, 0x71, 0xa9, 0xf0, 0x08, - 0xe6, 0x8e, 0xeb, 0xc5, 0xb2, 0x8c, 0x92, 0x39, 0xaf, 0xcf, 0x7e, 0x53, 0x7e, 0x09, 0xa7, 0x2d, - 0xe2, 0xd2, 0xe6, 0x0a, 0xe1, 0x34, 0xe6, 0x21, 0x87, 0x12, 0x64, 0xc2, 0x50, 0xf4, 0xe4, 0xef, - 0x37, 0x91, 0xce, 0x2b, 0x1f, 0x4e, 0xa3, 0xa9, 0x8e, 0x44, 0x92, 0x47, 0xe5, 0x6f, 0xc3, 0x6c, - 0xc5, 0x63, 0xa2, 0x41, 0x83, 0x58, 0x92, 0x0c, 0x5e, 0xaa, 0xa8, 0xbe, 0xd1, 0x51, 0x62, 0xfd, - 0x0a, 0x1e, 0x58, 0xfe, 0x57, 0xee, 0xa0, 0xf2, 0x79, 0x0e, 0x09, 0x98, 0xae, 0xe0, 0xe5, 0xe8, - 0xad, 0x91, 0xea, 0x00, 0xcf, 0xe0, 0x74, 0xdd, 0xdc, 0x58, 0x59, 0xb8, 0x1b, 0x59, 0x8e, 0xfd, - 0x80, 0xbd, 0xa4, 0x96, 0xe8, 0xd7, 0x63, 0x85, 0xbc, 0xc7, 0x3c, 0xfa, 0xcd, 0xd8, 0x32, 0x89, - 0x2e, 0x67, 0x6f, 0xe8, 0xd7, 0xe7, 0xb3, 0x5a, 0x66, 0xb0, 0x9c, 0x27, 0x7e, 0xf4, 0x82, 0x71, - 0x98, 0x67, 0xbc, 0xe4, 0xcc, 0x2b, 0x9f, 0x4d, 0xef, 0xec, 0x2e, 0x6c, 0x31, 0xb6, 0xe0, 0x3a, - 0x2e, 0x5d, 0x3a, 0x82, 0x5c, 0xea, 0x81, 0x34, 0x37, 0x64, 0x43, 0xbf, 0x89, 0xd6, 0xe0, 0xee, - 0xd1, 0x86, 0x1e, 0x72, 0x1a, 0x1c, 0x36, 0xf3, 0x06, 0xd9, 0xa6, 0xd8, 0xa7, 0x81, 0xeb, 0x70, - 0x2e, 0xf3, 0x46, 0x30, 0x4c, 0x2c, 0x8b, 0x72, 0xde, 0xd1, 0xfc, 0x75, 0xf3, 0x2d, 0xae, 0x88, - 0x53, 0xe6, 0x3d, 0xc8, 0x2e, 0xde, 0xb8, 0x85, 0x2a, 0x30, 0xbe, 0xf6, 0x9e, 0x8b, 0x09, 0x16, - 0x94, 0xf8, 0x4c, 0xe8, 0xe8, 0x3a, 0xe8, 0x85, 0xbe, 0xde, 0xba, 0xcf, 0x7f, 0x9e, 0x81, 0x49, - 0x18, 0x59, 0x26, 0xdc, 0xb1, 0xd4, 0x40, 0x94, 0x19, 0xd6, 0xe0, 0x62, 0xc7, 0x88, 0x34, 0x39, - 0x9c, 0x29, 0x8c, 0x3c, 0x5b, 0xa8, 0x6c, 0xac, 0x2d, 0xdc, 0xa7, 0x2d, 0x9c, 0x81, 0x7f, 0x6a, - 0xed, 0x91, 0xe9, 0x73, 0x6d, 0x38, 0x5b, 0x1a, 0x2c, 0x5f, 0x4e, 0xa2, 0x97, 0x0a, 0x88, 0xc1, - 0x48, 0x28, 0x1a, 0x86, 0xfc, 0xc3, 0x02, 0xe7, 0x7b, 0x74, 0x69, 0xae, 0x37, 0x48, 0xb0, 0x57, - 0xd4, 0x5b, 0xfe, 0x21, 0x14, 0xa2, 0x09, 0x0c, 0xa1, 0xbb, 0x01, 0xf1, 0x04, 0xc7, 0x72, 0x11, - 0x7b, 0x0f, 0x66, 0xe3, 0xb9, 0x0c, 0x4d, 0xc7, 0x87, 0x6a, 0x95, 0x9c, 0xae, 0xc0, 0x10, 0xb1, - 0x5d, 0xc7, 0x43, 0x4b, 0x1d, 0xa4, 0x9e, 0xdd, 0x01, 0x53, 0xc1, 0x90, 0x30, 0x87, 0x0b, 0x79, - 0x51, 0x6c, 0x53, 0xec, 0x78, 0x5b, 0x2c, 0x70, 0x55, 0xbc, 0x6b, 0x73, 0x30, 0x9e, 0x76, 0xc5, - 0x40, 0xf7, 0xac, 0x58, 0xbb, 0xda, 0x73, 0x5a, 0xec, 0x86, 0x06, 0x6b, 0x70, 0xee, 0xc1, 0x61, - 0x73, 0x48, 0xe7, 0x7c, 0xbf, 0xb9, 0xfe, 0x7c, 0xa4, 0x1d, 0xb9, 0x5a, 0x4e, 0x95, 0xdb, 0xcd, - 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xfc, 0xf9, 0xc9, 0xea, 0x18, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_ffe735e4b57f3795) +} + +var fileDescriptor_a_bit_of_everything_ffe735e4b57f3795 = []byte{ + // 2265 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x1b, 0x49, + 0xd9, 0xf7, 0x48, 0xb2, 0x62, 0x3f, 0xfe, 0x92, 0xdb, 0xd9, 0xc4, 0xd1, 0x7a, 0xd7, 0x1d, 0x6d, + 0xf6, 0x5d, 0xad, 0x77, 0x35, 0x63, 0x2b, 0x7e, 0xb7, 0x12, 0x53, 0xb0, 0xc8, 0xb6, 0x36, 0xf1, + 0x66, 0xe3, 0x38, 0x93, 0x6c, 0x48, 0x85, 0x04, 0x57, 0x4b, 0xd3, 0x92, 0x26, 0xd1, 0x4c, 0x0f, + 0xd3, 0x3d, 0xb6, 0x85, 0x31, 0x14, 0x50, 0x05, 0x05, 0x1c, 0xa8, 0x32, 0x37, 0x0e, 0x7b, 0xa1, + 0x8a, 0xe2, 0xc2, 0x81, 0x03, 0x27, 0x0e, 0x14, 0x87, 0x3d, 0xed, 0x0d, 0xaa, 0x38, 0x70, 0x85, + 0x03, 0x7f, 0x04, 0x07, 0xaa, 0x7b, 0x66, 0x94, 0x91, 0x6c, 0xe1, 0x28, 0xa1, 0xf6, 0x62, 0x4f, + 0x77, 0xff, 0x9e, 0xef, 0x8f, 0x7e, 0x5a, 0x50, 0xa6, 0x07, 0xc4, 0xf1, 0xda, 0x94, 0x1b, 0x9e, + 0xcf, 0x04, 0x33, 0xa2, 0xa5, 0x57, 0x33, 0xc8, 0x6e, 0xcd, 0x16, 0xbb, 0xac, 0xb1, 0x4b, 0xf7, + 0xa8, 0xdf, 0x11, 0x2d, 0xdb, 0x6d, 0xea, 0x0a, 0x83, 0x16, 0x9b, 0xbe, 0x57, 0xd7, 0x9b, 0x44, + 0xd0, 0x7d, 0xd2, 0xd1, 0x63, 0x06, 0x7a, 0x97, 0x34, 0xbf, 0xd0, 0x64, 0xac, 0xd9, 0xa6, 0x06, + 0xf1, 0x6c, 0x83, 0xb8, 0x2e, 0x13, 0x44, 0xd8, 0xcc, 0xe5, 0x21, 0x79, 0xfe, 0xf5, 0xe8, 0x54, + 0xad, 0x6a, 0x41, 0xc3, 0xa0, 0x8e, 0x27, 0x3a, 0xd1, 0xe1, 0x9b, 0xfd, 0x87, 0x56, 0xe0, 0x2b, + 0xea, 0xe8, 0x1c, 0xf7, 0xe9, 0xcb, 0x83, 0x9a, 0xe1, 0x50, 0xce, 0x49, 0x93, 0x46, 0x88, 0xcb, + 0x27, 0x11, 0xe5, 0x3e, 0xc8, 0x62, 0xbf, 0x10, 0x61, 0x3b, 0x94, 0x0b, 0xe2, 0x78, 0x11, 0xe0, + 0x7d, 0xf5, 0xaf, 0x5e, 0x6a, 0x52, 0xb7, 0xc4, 0xf7, 0x49, 0xb3, 0x49, 0x7d, 0x83, 0x79, 0xca, + 0x88, 0x93, 0x06, 0x15, 0xfe, 0x3d, 0x0b, 0xb9, 0xca, 0xba, 0x2d, 0xee, 0x34, 0xaa, 0x5d, 0x57, + 0xa1, 0x27, 0x30, 0xc5, 0x6d, 0xb7, 0xd9, 0xa6, 0xbb, 0x2e, 0xe5, 0x82, 0x5a, 0xf3, 0x97, 0xb0, + 0x56, 0x9c, 0x28, 0x5f, 0xd3, 0xcf, 0x70, 0x9e, 0xde, 0xcf, 0x49, 0xdf, 0x56, 0xf4, 0xe6, 0x64, + 0xc8, 0x2e, 0x5c, 0x21, 0x0a, 0x99, 0x20, 0xb0, 0xad, 0x79, 0x0d, 0x6b, 0xc5, 0xf1, 0xf5, 0xbb, + 0xc7, 0x95, 0xed, 0x9f, 0x69, 0xb7, 0xbe, 0x49, 0x4a, 0x8d, 0x4a, 0xe9, 0xa3, 0xe5, 0xd2, 0xf5, + 0x27, 0x87, 0xd7, 0x8e, 0x4a, 0xc9, 0xe5, 0xea, 0x30, 0xcb, 0x95, 0xf2, 0x91, 0xa9, 0xd8, 0xa3, + 0x1d, 0xc8, 0x46, 0xea, 0xa7, 0x70, 0xfa, 0x95, 0xd4, 0x8f, 0xf8, 0xa0, 0x45, 0x98, 0x68, 0xb4, + 0x19, 0x11, 0xbb, 0x7b, 0xa4, 0x1d, 0xd0, 0xf9, 0x34, 0xd6, 0x8a, 0x29, 0x13, 0xd4, 0xd6, 0x03, + 0xb9, 0x83, 0x2e, 0xc3, 0xa4, 0xc5, 0x82, 0x5a, 0x9b, 0x46, 0x88, 0x0c, 0xd6, 0x8a, 0x9a, 0x39, + 0x11, 0xee, 0x85, 0x90, 0x45, 0x98, 0xb0, 0x5d, 0xf1, 0xc1, 0x6a, 0x84, 0x18, 0xc5, 0x5a, 0x31, + 0x6d, 0x82, 0xda, 0xea, 0xf2, 0x08, 0x92, 0x88, 0x2c, 0xd6, 0x8a, 0x19, 0x73, 0x22, 0x48, 0x40, + 0x42, 0x1e, 0x57, 0xcb, 0x11, 0xe2, 0x1c, 0xd6, 0x8a, 0xa3, 0x8a, 0xc7, 0xd5, 0x72, 0x08, 0x78, + 0x0b, 0xa6, 0x1a, 0xf6, 0x01, 0xb5, 0xba, 0x4c, 0xc6, 0xb0, 0x56, 0xcc, 0x9a, 0x93, 0xd1, 0x66, + 0x2f, 0xa8, 0xcb, 0x67, 0x1c, 0x6b, 0xc5, 0x73, 0x11, 0x28, 0xe6, 0xf4, 0x06, 0x40, 0x8d, 0xb1, + 0x76, 0x84, 0x00, 0xac, 0x15, 0xc7, 0xcc, 0x71, 0xb9, 0xd3, 0x55, 0x96, 0x0b, 0xdf, 0x76, 0x9b, + 0x11, 0x60, 0x42, 0x86, 0xd4, 0x9c, 0x08, 0xf7, 0xba, 0xca, 0xd6, 0x3a, 0x82, 0xf2, 0x08, 0xf1, + 0x06, 0xd6, 0x8a, 0x93, 0x26, 0xa8, 0xad, 0x1e, 0x83, 0xbb, 0x6a, 0x4c, 0x61, 0xad, 0x38, 0x15, + 0x1a, 0x1c, 0x6b, 0x71, 0x0b, 0x80, 0xba, 0x81, 0x13, 0x01, 0xa6, 0xb1, 0x56, 0x9c, 0x2e, 0xbf, + 0x7f, 0x66, 0x38, 0xb7, 0x03, 0x87, 0xfa, 0x76, 0xbd, 0xea, 0x06, 0x8e, 0x39, 0x2e, 0xe9, 0x43, + 0x66, 0x6f, 0xc3, 0x34, 0xef, 0x35, 0x7c, 0x06, 0x6b, 0xc5, 0x19, 0x73, 0x8a, 0xf7, 0x58, 0xde, + 0x85, 0x75, 0x9d, 0x98, 0xc3, 0x5a, 0x31, 0x17, 0xc3, 0x12, 0xe1, 0xe2, 0x49, 0xed, 0x67, 0xb1, + 0x56, 0x9c, 0x35, 0x27, 0x78, 0x42, 0xfb, 0x08, 0xd2, 0xe5, 0x83, 0xb0, 0x56, 0x44, 0x21, 0x24, + 0xe6, 0x52, 0x86, 0xd7, 0x7c, 0xea, 0x51, 0x22, 0xa8, 0xb5, 0xdb, 0xe3, 0xd0, 0x39, 0x9c, 0x2e, + 0x8e, 0x9b, 0x73, 0xf1, 0xe1, 0xbd, 0x84, 0x63, 0xaf, 0xc3, 0x04, 0x73, 0xa9, 0x6c, 0x72, 0xb2, + 0x07, 0xcd, 0x9f, 0x57, 0x35, 0x7a, 0x41, 0x0f, 0xfb, 0x83, 0x1e, 0xf7, 0x07, 0xbd, 0x2a, 0x4f, + 0x6f, 0x8e, 0x98, 0xa0, 0xc0, 0x6a, 0x85, 0xde, 0x82, 0xc9, 0x90, 0x34, 0x94, 0x35, 0xff, 0x9a, + 0x0c, 0xdb, 0xcd, 0x11, 0x33, 0x64, 0x18, 0x0a, 0x41, 0x8f, 0x61, 0xdc, 0x21, 0x5e, 0xa4, 0xc7, + 0x05, 0x55, 0x42, 0x1f, 0x0e, 0x5f, 0x42, 0xb7, 0x89, 0xa7, 0xd4, 0xad, 0xba, 0xc2, 0xef, 0x98, + 0x63, 0x4e, 0xb4, 0x44, 0x07, 0x30, 0xe7, 0x10, 0xcf, 0xeb, 0xb7, 0xf7, 0xa2, 0x92, 0x73, 0xf3, + 0xa5, 0xe4, 0x78, 0x3d, 0xfe, 0x09, 0x05, 0xce, 0x3a, 0xfd, 0xfb, 0x09, 0xc9, 0x61, 0x59, 0x47, + 0x92, 0xe7, 0x5f, 0x4d, 0x72, 0xd8, 0x2a, 0x4e, 0x4a, 0x4e, 0xec, 0xa3, 0x35, 0x98, 0x77, 0x99, + 0xbb, 0xc1, 0xdc, 0x3d, 0xea, 0xca, 0x26, 0x4c, 0xda, 0xdb, 0xc4, 0x09, 0xfb, 0xc2, 0x7c, 0x5e, + 0x55, 0xce, 0xc0, 0x73, 0xb4, 0x01, 0x33, 0xdd, 0x4e, 0x1f, 0x69, 0xfc, 0xba, 0x8a, 0x78, 0xfe, + 0x44, 0xc4, 0xef, 0xc7, 0x38, 0x73, 0xba, 0x4b, 0x12, 0x32, 0x79, 0x0c, 0xdd, 0x4c, 0xda, 0x4d, + 0x14, 0xd4, 0x02, 0x4e, 0x0f, 0x5d, 0x50, 0xb3, 0x31, 0xa3, 0x6a, 0x5c, 0x58, 0xf9, 0xdf, 0x6a, + 0x90, 0x8d, 0x5a, 0x3c, 0x82, 0x8c, 0x4b, 0x1c, 0x1a, 0xb6, 0x78, 0x53, 0x7d, 0xa3, 0x0b, 0x90, + 0x25, 0x0e, 0x0b, 0x5c, 0x31, 0x9f, 0x52, 0x15, 0x1e, 0xad, 0xd0, 0x5d, 0x48, 0xb1, 0x67, 0xaa, + 0x99, 0x4e, 0x97, 0x2b, 0x2f, 0xdb, 0xa3, 0xf5, 0x4d, 0x4a, 0x3d, 0xa5, 0x58, 0x8a, 0x3d, 0x2b, + 0x2c, 0xc2, 0x58, 0xbc, 0x46, 0xe3, 0x30, 0xfa, 0x51, 0xe5, 0x93, 0x7b, 0xd5, 0xdc, 0x08, 0x1a, + 0x83, 0xcc, 0x7d, 0xf3, 0xd3, 0x6a, 0x4e, 0xcb, 0xdb, 0x30, 0xd5, 0x93, 0x98, 0x28, 0x07, 0xe9, + 0x67, 0xb4, 0x13, 0xe9, 0x2b, 0x3f, 0xd1, 0x3a, 0x8c, 0x86, 0xde, 0x49, 0xbd, 0x44, 0xbb, 0x09, + 0x49, 0xd7, 0x52, 0xd7, 0xb4, 0xfc, 0x26, 0x5c, 0x38, 0x3d, 0x37, 0x4f, 0x91, 0x79, 0x3e, 0x29, + 0x73, 0x3c, 0xc9, 0xe5, 0x7b, 0x31, 0x97, 0xfe, 0x3c, 0x3b, 0x85, 0xcb, 0x76, 0x92, 0xcb, 0xab, + 0xdc, 0x7b, 0xcf, 0xe5, 0xaf, 0x7d, 0xae, 0x1d, 0x57, 0xfe, 0xac, 0x41, 0x73, 0x69, 0xae, 0x82, + 0x6b, 0xb6, 0xc0, 0xac, 0x81, 0x9f, 0xcf, 0x56, 0xe5, 0xad, 0x2d, 0x57, 0xc4, 0x29, 0xdb, 0xc1, + 0x75, 0xe6, 0x78, 0x6d, 0xbb, 0x2e, 0x93, 0x03, 0x47, 0xc3, 0x0b, 0x16, 0x1d, 0x8f, 0x62, 0xc1, + 0x70, 0x9d, 0xed, 0x51, 0x1f, 0x3b, 0xc4, 0xed, 0xe0, 0x06, 0x25, 0x22, 0xf0, 0x29, 0x97, 0xbc, + 0x76, 0xe2, 0xdc, 0xfd, 0x8b, 0xa6, 0x2e, 0xef, 0xa5, 0x07, 0x70, 0xe5, 0x23, 0xdb, 0xb5, 0x30, + 0x0b, 0x04, 0x76, 0x98, 0x4f, 0x31, 0xa9, 0xc9, 0xcf, 0x13, 0xa3, 0x8a, 0xde, 0x12, 0xc2, 0xe3, + 0x6b, 0x86, 0xd1, 0xb4, 0x45, 0x2b, 0xa8, 0xe9, 0x75, 0xe6, 0x18, 0xd2, 0xdc, 0x12, 0xad, 0x33, + 0xde, 0xe1, 0x82, 0x46, 0xcb, 0xc8, 0xfa, 0xf5, 0xa9, 0xb8, 0x69, 0x2a, 0xd3, 0x0a, 0x79, 0xc8, + 0xac, 0x33, 0xab, 0x73, 0x5a, 0xbe, 0x16, 0x1e, 0xc3, 0xcc, 0xed, 0x50, 0xfb, 0x6f, 0xd8, 0xa2, + 0xa5, 0x60, 0xd3, 0x90, 0x8a, 0xe7, 0x16, 0x33, 0x65, 0x5b, 0xe8, 0x3a, 0x64, 0x2c, 0x22, 0x48, + 0xe4, 0xe8, 0xb7, 0xcf, 0x74, 0xb4, 0x64, 0x62, 0x2a, 0x92, 0x25, 0x0c, 0x13, 0x89, 0x84, 0x91, + 0xa9, 0xf9, 0xa8, 0x6a, 0xde, 0xc9, 0x8d, 0xa0, 0x73, 0x90, 0xbe, 0xb3, 0x5d, 0xcd, 0x69, 0xe5, + 0xdf, 0x9f, 0x87, 0x8b, 0xfd, 0xf6, 0xde, 0xa3, 0xfe, 0x9e, 0x5d, 0xa7, 0xe8, 0xb3, 0x34, 0x64, + 0x37, 0x7c, 0x59, 0x7f, 0x68, 0x65, 0xe8, 0xf0, 0xe6, 0x87, 0x27, 0x29, 0xfc, 0x2e, 0xf5, 0xc3, + 0xbf, 0xfe, 0xf3, 0x97, 0xa9, 0xdf, 0xa4, 0x0a, 0xbf, 0x4e, 0x19, 0x7b, 0x2b, 0xf1, 0xac, 0x7d, + 0xda, 0xa4, 0x6d, 0x1c, 0x26, 0x86, 0xa4, 0x23, 0xe3, 0x30, 0x39, 0x11, 0x1d, 0x19, 0x87, 0x89, + 0x9b, 0xf0, 0xc8, 0xe0, 0xd4, 0x23, 0x3e, 0x11, 0xcc, 0x37, 0x0e, 0x83, 0x9e, 0x83, 0xc3, 0xc4, + 0x9d, 0x7a, 0x64, 0x1c, 0xf6, 0x5c, 0xc4, 0xf1, 0x3a, 0x71, 0xfe, 0x7c, 0x46, 0x39, 0x32, 0x0e, + 0x93, 0x17, 0xca, 0x57, 0xb9, 0xf0, 0x3d, 0x9f, 0x36, 0xec, 0x03, 0x63, 0xe9, 0x28, 0x14, 0x92, + 0x20, 0xe3, 0xfd, 0x7c, 0x78, 0xbf, 0x20, 0xde, 0x47, 0xd0, 0xab, 0xe4, 0xa0, 0x6e, 0x7d, 0x84, + 0x3e, 0xd3, 0x00, 0xc2, 0x00, 0xa9, 0xc4, 0xf9, 0x72, 0x82, 0xb4, 0xa4, 0x62, 0x74, 0xa5, 0xb0, + 0x78, 0x46, 0x84, 0xd6, 0xb4, 0x25, 0xf4, 0x5d, 0xc8, 0x7e, 0xc2, 0xd8, 0xb3, 0xc0, 0x43, 0x33, + 0xba, 0x7c, 0x66, 0xe8, 0x5b, 0x56, 0x94, 0xed, 0x2f, 0x23, 0x59, 0x57, 0x92, 0x8b, 0xe8, 0xff, + 0xce, 0xcc, 0x0d, 0x59, 0xdd, 0x47, 0xe8, 0xc7, 0x1a, 0x64, 0x3f, 0xf5, 0xac, 0x97, 0xcc, 0xdf, + 0x01, 0x43, 0x4e, 0x61, 0x45, 0x69, 0xf1, 0x5e, 0xfe, 0x05, 0xb5, 0x90, 0x6e, 0xf8, 0x85, 0x06, + 0xd9, 0x4d, 0xda, 0xa6, 0x82, 0x9e, 0xf4, 0xc3, 0x20, 0x31, 0x8f, 0x8f, 0x2b, 0xef, 0xd5, 0xde, + 0x85, 0x69, 0x80, 0x8a, 0x67, 0xdf, 0xa2, 0x9d, 0x4a, 0x20, 0x5a, 0x68, 0x04, 0x2e, 0x42, 0xf6, + 0x8e, 0xfc, 0x2c, 0xa3, 0x29, 0xc8, 0xf8, 0x94, 0x58, 0x30, 0xba, 0xef, 0xdb, 0x82, 0x86, 0xae, + 0x59, 0x7a, 0x51, 0xd7, 0xfc, 0x43, 0x83, 0xb1, 0x1b, 0x54, 0xdc, 0x0d, 0xa8, 0xdf, 0xf9, 0x5f, + 0x3a, 0xe7, 0xe7, 0xda, 0x71, 0xe5, 0x7e, 0x61, 0x1b, 0x16, 0x4e, 0xeb, 0xab, 0x5d, 0x81, 0x43, + 0xf6, 0xd3, 0x87, 0x5a, 0x6d, 0x44, 0xd9, 0xa7, 0xa3, 0xf7, 0xcf, 0xb2, 0xef, 0xdb, 0x52, 0x40, + 0x6c, 0xe5, 0xe7, 0x69, 0xc8, 0x54, 0xeb, 0x2d, 0x86, 0x8a, 0x03, 0x2c, 0xe4, 0x41, 0x4d, 0x0f, + 0x6f, 0xcc, 0x38, 0x1c, 0x2f, 0x8c, 0x2c, 0xfc, 0x2b, 0x75, 0x5c, 0xf9, 0x41, 0x0a, 0x26, 0x69, + 0xbd, 0xc5, 0x30, 0x0f, 0x5b, 0x26, 0x8c, 0xa9, 0x95, 0xef, 0xd5, 0xd1, 0xec, 0xbd, 0xc0, 0x71, + 0x88, 0xdf, 0x59, 0xc3, 0xd5, 0x68, 0x2b, 0x9f, 0xdb, 0xa4, 0xbc, 0xee, 0xdb, 0xea, 0x99, 0xac, + 0x76, 0x0b, 0x9b, 0x80, 0x7a, 0x1d, 0xa5, 0xb4, 0x1d, 0xd2, 0x3d, 0x1f, 0x7f, 0x08, 0xe9, 0xff, + 0x5f, 0xbe, 0x8a, 0xae, 0xc1, 0x07, 0x26, 0x15, 0x81, 0xef, 0x52, 0x0b, 0xef, 0xb7, 0xa8, 0x8b, + 0x45, 0x8b, 0x62, 0x9f, 0x72, 0x16, 0xf8, 0x75, 0x8a, 0x6d, 0x8e, 0x05, 0x75, 0x3c, 0xe6, 0x13, + 0xdf, 0x6e, 0x77, 0x70, 0xe0, 0x92, 0x3d, 0x62, 0xb7, 0x49, 0xad, 0x4d, 0xf5, 0x8f, 0xbf, 0x02, + 0xe9, 0xd5, 0xe5, 0x55, 0xb4, 0x0a, 0x4b, 0xff, 0x85, 0x81, 0xc5, 0x28, 0xc7, 0x2e, 0x13, 0x98, + 0x1e, 0xd8, 0x5c, 0xe8, 0x28, 0x0b, 0x99, 0x5f, 0xa5, 0xb4, 0xb4, 0x0a, 0xcc, 0x93, 0xb3, 0x03, + 0x23, 0x1d, 0x63, 0x1c, 0x86, 0x3d, 0xed, 0xd1, 0xa5, 0x42, 0xce, 0xd8, 0x2b, 0x77, 0xf1, 0xf2, + 0x6c, 0x2d, 0x9c, 0x03, 0x1e, 0x21, 0x74, 0xe2, 0x08, 0xfd, 0x41, 0x83, 0x49, 0x39, 0x6a, 0xed, + 0x10, 0xd1, 0x52, 0x1e, 0xfa, 0x72, 0x3a, 0xdd, 0x87, 0xca, 0xb6, 0xeb, 0x85, 0xd5, 0x33, 0x8b, + 0xaa, 0xe7, 0x87, 0x0c, 0x5d, 0x5e, 0xec, 0xaa, 0xee, 0x2b, 0x00, 0xdb, 0x6c, 0xdd, 0x76, 0x2d, + 0xdb, 0x6d, 0x72, 0x74, 0xe9, 0x44, 0xcd, 0x6c, 0x46, 0x3f, 0xdd, 0x0c, 0x2c, 0xa7, 0x11, 0xf4, + 0x00, 0xce, 0xc9, 0x49, 0x9b, 0x05, 0x02, 0x0d, 0x00, 0x0d, 0x24, 0x7e, 0x5d, 0xa9, 0xff, 0x1a, + 0x9a, 0x4b, 0xfa, 0x53, 0x44, 0xcc, 0x5a, 0x90, 0xab, 0xfa, 0x3e, 0xf3, 0xe5, 0xd4, 0xb1, 0x49, + 0x05, 0xb1, 0xdb, 0x7c, 0x68, 0x01, 0x57, 0x94, 0x80, 0x37, 0xd1, 0x42, 0x4f, 0xc0, 0x24, 0xd7, + 0x7d, 0x5b, 0xb4, 0xac, 0x88, 0xeb, 0x4f, 0x34, 0x40, 0x37, 0xa8, 0xe8, 0x9f, 0x72, 0x96, 0xcf, + 0x8c, 0x47, 0x1f, 0xc5, 0x40, 0x35, 0xde, 0x51, 0x6a, 0x5c, 0x2e, 0x5c, 0x4a, 0xaa, 0x21, 0x35, + 0xa8, 0x31, 0xab, 0x63, 0x1c, 0xca, 0x1e, 0xac, 0xa6, 0x21, 0xf4, 0x23, 0x0d, 0x66, 0x77, 0x18, + 0x17, 0x92, 0xa3, 0x22, 0x55, 0x8a, 0xbc, 0xd8, 0x40, 0x35, 0x50, 0xba, 0xa1, 0xa4, 0xbf, 0x5b, + 0xb8, 0x92, 0x94, 0xee, 0x31, 0x2e, 0xa4, 0x06, 0xea, 0xd1, 0x1c, 0xaa, 0x11, 0x27, 0x45, 0xfe, + 0x4f, 0xda, 0x71, 0xe5, 0x8f, 0x1a, 0x6a, 0x0c, 0x98, 0xba, 0xb0, 0x95, 0x68, 0x12, 0xa5, 0x12, + 0xde, 0x6f, 0xd9, 0xf5, 0x16, 0xe6, 0x2d, 0x16, 0xb4, 0x2d, 0x55, 0x7e, 0x35, 0x8a, 0x03, 0x4e, + 0x2d, 0x6c, 0xbb, 0xd8, 0x6b, 0x93, 0x3a, 0x95, 0x93, 0xad, 0x2c, 0x54, 0x8b, 0xd5, 0x03, 0x87, + 0xba, 0xe1, 0x2f, 0x6f, 0x72, 0x3c, 0x96, 0x8b, 0xcb, 0xf9, 0xbb, 0xb0, 0x78, 0x5a, 0x2f, 0x96, + 0x65, 0x14, 0xcf, 0x79, 0x43, 0xf6, 0x9b, 0xf2, 0x53, 0x38, 0x5f, 0x27, 0x0e, 0x6d, 0x6f, 0x10, + 0x4e, 0x23, 0x1e, 0x72, 0x28, 0x41, 0x26, 0x8c, 0x86, 0x2f, 0xff, 0x61, 0x13, 0xe9, 0x92, 0xf2, + 0xe1, 0x1c, 0x9a, 0xed, 0x49, 0x24, 0x79, 0x54, 0xfe, 0x16, 0x2c, 0x54, 0x5c, 0x26, 0x5a, 0xd4, + 0x8f, 0x24, 0xc9, 0xe0, 0x25, 0x8a, 0xea, 0x6b, 0x3d, 0x25, 0x36, 0xac, 0xe0, 0x91, 0xf5, 0xbf, + 0x67, 0x8f, 0x2b, 0x5f, 0x64, 0x91, 0x80, 0xb9, 0x0a, 0x5e, 0x0f, 0x9f, 0x1c, 0x89, 0x0e, 0xf0, + 0x10, 0xce, 0x37, 0xcd, 0x9d, 0x8d, 0xd2, 0x8d, 0xd0, 0x72, 0xec, 0xf9, 0xec, 0x29, 0xad, 0x8b, + 0x61, 0x3d, 0x96, 0xcf, 0xb9, 0xcc, 0xa5, 0x5f, 0x8f, 0x2c, 0x93, 0xe8, 0x72, 0x7a, 0x45, 0x5f, + 0x5e, 0x4a, 0x6b, 0xa9, 0x4c, 0x39, 0x47, 0xbc, 0xf0, 0x21, 0x63, 0x33, 0xd7, 0x78, 0xca, 0x99, + 0x5b, 0xbe, 0x90, 0xdc, 0x39, 0x28, 0x35, 0x18, 0x2b, 0x39, 0xb6, 0x43, 0xd7, 0x4e, 0x20, 0xd7, + 0x06, 0x20, 0xcd, 0x1d, 0xd9, 0xd0, 0xaf, 0xa2, 0x2d, 0xb8, 0x71, 0xb2, 0xa1, 0x07, 0x9c, 0xfa, + 0xcf, 0x9b, 0x79, 0x8b, 0xec, 0x51, 0xec, 0x51, 0xdf, 0xb1, 0x39, 0x97, 0x79, 0x23, 0x18, 0x26, + 0xf5, 0x3a, 0xe5, 0xbc, 0xa7, 0xf9, 0xeb, 0xe6, 0x2b, 0x5c, 0x11, 0xe7, 0xcc, 0x9b, 0x90, 0x5e, + 0x5d, 0xb9, 0x86, 0x2a, 0x30, 0xb5, 0xf5, 0x8e, 0x83, 0x09, 0x16, 0x94, 0x78, 0x4c, 0xe8, 0x68, + 0x19, 0xf4, 0xfc, 0x50, 0x4f, 0xde, 0x47, 0x3f, 0x4d, 0xc1, 0x0c, 0x8c, 0xaf, 0x13, 0x6e, 0xd7, + 0xd5, 0x40, 0x94, 0x1a, 0xd3, 0xe0, 0x8d, 0x9e, 0x11, 0x69, 0x66, 0x2c, 0x95, 0x1f, 0x7f, 0x58, + 0xaa, 0xec, 0x6c, 0x95, 0x6e, 0xd1, 0x0e, 0x4e, 0xc1, 0xdf, 0xb4, 0xee, 0xc8, 0xf4, 0x85, 0x36, + 0x96, 0x2e, 0x66, 0xca, 0x6f, 0xc5, 0xd1, 0x4b, 0x04, 0xc4, 0x60, 0x24, 0x10, 0x2d, 0x43, 0xfe, + 0x61, 0xbe, 0xfd, 0x1d, 0xba, 0xb6, 0x38, 0x18, 0x24, 0xd8, 0x33, 0xea, 0xae, 0x7f, 0x1f, 0xf2, + 0xe1, 0x04, 0x86, 0xd0, 0x0d, 0x9f, 0xb8, 0x82, 0x63, 0xb9, 0x88, 0xbc, 0x07, 0x0b, 0xd1, 0x5c, + 0x86, 0xe6, 0xa2, 0x43, 0xb5, 0x8a, 0x4f, 0x37, 0x60, 0x94, 0x58, 0x8e, 0xed, 0xa2, 0xb5, 0x1e, + 0x52, 0xd7, 0xea, 0x81, 0xa9, 0x60, 0x48, 0x98, 0xcd, 0x85, 0xbc, 0x28, 0xf6, 0x28, 0xb6, 0xdd, + 0x06, 0xf3, 0x1d, 0x15, 0xef, 0xda, 0x22, 0x4c, 0x25, 0x5d, 0x31, 0xd2, 0x3f, 0x2b, 0xd6, 0xde, + 0x1d, 0x38, 0x2d, 0xf6, 0x43, 0xfd, 0x2d, 0xb8, 0x78, 0xfb, 0x79, 0x73, 0x48, 0xe6, 0xfc, 0xb0, + 0xb9, 0xfe, 0x68, 0xbc, 0x1b, 0xb9, 0x5a, 0x56, 0x95, 0xdb, 0xd5, 0xff, 0x04, 0x00, 0x00, 0xff, + 0xff, 0xd3, 0xfa, 0x70, 0x7c, 0x44, 0x19, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 94fe07214e3..3ee84c9bf0b 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -132,6 +132,7 @@ message ABitOfEverything { json_schema: { title: "A bit of everything" description: "Intentionaly complicated message type to cover many features of Protobuf." + required: ["uuid"] } external_docs: { url: "https://github.com/grpc-ecosystem/grpc-gateway"; @@ -155,7 +156,7 @@ message ABitOfEverything { } Nested single_nested = 25; - string uuid = 1; + string uuid = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"}]; repeated Nested nested = 2; float float_value = 3; double double_value = 4; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index babfb987a8e..0968e2d4de6 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1001,7 +1001,8 @@ "$ref": "#/definitions/ABitOfEverythingNested" }, "uuid": { - "type": "string" + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, "nested": { "type": "array", @@ -1121,7 +1122,10 @@ "externalDocs": { "description": "Find out more about ABitOfEverything", "url": "https://github.com/grpc-ecosystem/grpc-gateway" - } + }, + "required": [ + "uuid" + ] }, "examplepbBody": { "type": "object", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 3489736abd3..005a3474f61 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -251,6 +251,20 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, // Warning: Make sure not to overwrite any fields already set on the schema type. schema.ExternalDocs = protoSchema.ExternalDocs + schema.MultipleOf = protoSchema.MultipleOf + schema.Maximum = protoSchema.Maximum + schema.ExclusiveMaximum = protoSchema.ExclusiveMaximum + schema.Minimum = protoSchema.Minimum + schema.ExclusiveMinimum = protoSchema.ExclusiveMinimum + schema.MaxLength = protoSchema.MaxLength + schema.MinLength = protoSchema.MinLength + schema.Pattern = protoSchema.Pattern + schema.MaxItems = protoSchema.MaxItems + schema.MinItems = protoSchema.MinItems + schema.UniqueItems = protoSchema.UniqueItems + schema.MaxProperties = protoSchema.MaxProperties + schema.MinProperties = protoSchema.MinProperties + schema.Required = protoSchema.Required if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { schema.schemaCore = protoSchema.schemaCore } @@ -318,6 +332,7 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s core = schemaCore{Type: ft.String(), Format: "UNKNOWN"} } } + switch aggregate { case array: return swaggerSchemaObject{ @@ -334,7 +349,13 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s AdditionalProperties: &swaggerSchemaObject{schemaCore: core}, } default: - return swaggerSchemaObject{schemaCore: core} + ret := swaggerSchemaObject{ + schemaCore: core, + } + if j, err := extractJSONSchemaFromFieldDescriptor(fd); err == nil { + updateSwaggerObjectFromJSONSchema(&ret, j) + } + return ret } } @@ -1263,28 +1284,73 @@ func extractSwaggerOptionFromFileDescriptor(file *pbdescriptor.FileDescriptorPro return opts, nil } -func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { - ret := swaggerSchemaObject{ - ExternalDocs: protoExternalDocumentationToSwaggerExternalDocumentation(s.GetExternalDocs()), - Title: s.GetJsonSchema().GetTitle(), - Description: s.GetJsonSchema().GetDescription(), - // TODO(johanbrandhorst): Add more fields? +func extractJSONSchemaFromFieldDescriptor(fd *pbdescriptor.FieldDescriptorProto) (*swagger_options.JSONSchema, error) { + if fd.Options == nil { + return nil, nil } - if s.GetJsonSchema().GetRef() != "" { - swaggerName := fullyQualifiedNameToSwaggerName(s.GetJsonSchema().GetRef(), reg) + if !proto.HasExtension(fd.Options, swagger_options.E_Openapiv2Field) { + return nil, nil + } + ext, err := proto.GetExtension(fd.Options, swagger_options.E_Openapiv2Field) + if err != nil { + return nil, err + } + opts, ok := ext.(*swagger_options.JSONSchema) + if !ok { + return nil, fmt.Errorf("extension is %T; want a JSONSchema object", ext) + } + return opts, nil +} + +func protoJSONSchemaToSwaggerSchemaCore(j *swagger_options.JSONSchema, reg *descriptor.Registry, refs refMap) schemaCore { + ret := schemaCore{} + + if j.GetRef() != "" { + swaggerName := fullyQualifiedNameToSwaggerName(j.GetRef(), reg) if swaggerName != "" { - ret.schemaCore.Ref = "#/definitions/" + swaggerName + ret.Ref = "#/definitions/" + swaggerName if refs != nil { - refs[s.GetJsonSchema().GetRef()] = struct{}{} + refs[j.GetRef()] = struct{}{} } } else { - ret.schemaCore.Ref += s.GetJsonSchema().GetRef() + ret.Ref += j.GetRef() } } else { - f, t := protoJSONSchemaTypeToFormat(s.GetJsonSchema().GetType()) - ret.schemaCore.Format = f - ret.schemaCore.Type = t + f, t := protoJSONSchemaTypeToFormat(j.GetType()) + ret.Format = f + ret.Type = t } + + return ret +} + +func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_options.JSONSchema) { + s.Title = j.GetTitle() + s.Description = j.GetDescription() + s.MultipleOf = j.GetMultipleOf() + s.Maximum = j.GetMaximum() + s.ExclusiveMaximum = j.GetExclusiveMaximum() + s.Minimum = j.GetMinimum() + s.ExclusiveMinimum = j.GetExclusiveMinimum() + s.MaxLength = j.GetMaxLength() + s.MinLength = j.GetMinLength() + s.Pattern = j.GetPattern() + s.MaxItems = j.GetMaxItems() + s.MinItems = j.GetMinItems() + s.UniqueItems = j.GetUniqueItems() + s.MaxProperties = j.GetMaxProperties() + s.MinProperties = j.GetMinProperties() + s.Required = j.GetRequired() +} + +func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { + ret := swaggerSchemaObject{ + ExternalDocs: protoExternalDocumentationToSwaggerExternalDocumentation(s.GetExternalDocs()), + } + + ret.schemaCore = protoJSONSchemaToSwaggerSchemaCore(s.GetJsonSchema(), reg, refs) + updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema()) + return ret } diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 4a68a254a6b..d34e0bbf270 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -204,6 +204,21 @@ type swaggerSchemaObject struct { Title string `json:"title,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` + + MultipleOf float64 `json:"multiple_of,omitempty"` + Maximum float64 `json:"maximum,omitempty"` + ExclusiveMaximum bool `json:"exclusive_maximum,omitempty"` + Minimum float64 `json:"minimum,omitempty"` + ExclusiveMinimum bool `json:"exclusive_minimum,omitempty"` + MaxLength uint64 `json:"max_length,omitempty"` + MinLength uint64 `json:"min_length,omitempty"` + Pattern string `json:"pattern,omitempty"` + MaxItems uint64 `json:"max_items,omitempty"` + MinItems uint64 `json:"min_items,omitempty"` + UniqueItems bool `json:"unique_items,omitempty"` + MaxProperties uint64 `json:"max_properties,omitempty"` + MinProperties uint64 `json:"min_properties,omitempty"` + Required []string `json:"required,omitempty"` } // http://swagger.io/specification/#referenceObject diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index b8fffb69a0e..a743078b45c 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -55,37 +55,49 @@ var E_Openapiv2Tag = &proto.ExtensionDesc{ Filename: "protoc-gen-swagger/options/annotations.proto", } +var E_Openapiv2Field = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*JSONSchema)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_field", + Tag: "bytes,1042,opt,name=openapiv2_field,json=openapiv2Field", + Filename: "protoc-gen-swagger/options/annotations.proto", +} + func init() { proto.RegisterExtension(E_Openapiv2Swagger) proto.RegisterExtension(E_Openapiv2Operation) proto.RegisterExtension(E_Openapiv2Schema) proto.RegisterExtension(E_Openapiv2Tag) + proto.RegisterExtension(E_Openapiv2Field) } func init() { - proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_annotations_a3ffb1266b13d7a2) + proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_annotations_24d91a1b8877b604) } -var fileDescriptor_annotations_a3ffb1266b13d7a2 = []byte{ - // 311 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x4b, 0x03, 0x31, - 0x10, 0x85, 0xe9, 0x45, 0x64, 0x55, 0xac, 0xeb, 0x45, 0x8a, 0x68, 0x6f, 0x8a, 0xb4, 0x89, 0xd4, - 0xdb, 0xde, 0x54, 0xf0, 0x26, 0x85, 0x6d, 0x4f, 0x5e, 0x4a, 0x9a, 0x8e, 0xd3, 0x40, 0x9b, 0x09, - 0x49, 0xda, 0x52, 0xe8, 0xd1, 0x5f, 0xe0, 0x2f, 0x16, 0x93, 0xed, 0x56, 0xd6, 0x2a, 0x7b, 0xdb, - 0x99, 0x9d, 0xf7, 0xbe, 0xc7, 0x23, 0x49, 0xc7, 0x58, 0xf2, 0x24, 0xbb, 0x08, 0xba, 0xeb, 0x56, - 0x02, 0x11, 0x2c, 0x27, 0xe3, 0x15, 0x69, 0xc7, 0x85, 0xd6, 0xe4, 0x45, 0xf8, 0x66, 0xe1, 0x2c, - 0xbd, 0x41, 0x6b, 0x24, 0x43, 0xe1, 0x61, 0x25, 0xd6, 0x71, 0x27, 0x47, 0x08, 0x7a, 0x54, 0x48, - 0x59, 0x21, 0x6d, 0xdd, 0xfd, 0x63, 0x4b, 0x06, 0xb4, 0x30, 0x6a, 0xd9, 0x8b, 0x06, 0xad, 0x36, - 0x12, 0xe1, 0x0c, 0x78, 0x98, 0xc6, 0x8b, 0x77, 0x3e, 0x01, 0x27, 0xad, 0x32, 0x9e, 0x6c, 0xbc, - 0xc8, 0x36, 0xc9, 0x59, 0x29, 0xda, 0xa2, 0xd2, 0x4b, 0x16, 0x75, 0x6c, 0xab, 0x63, 0x2f, 0x6a, - 0x06, 0xfd, 0x08, 0xb9, 0xf8, 0x3c, 0x6c, 0x37, 0x6e, 0x8f, 0x7a, 0xf7, 0xac, 0x66, 0x62, 0x36, - 0x88, 0x73, 0xde, 0x2c, 0x49, 0xc5, 0x26, 0xfb, 0x68, 0x24, 0xe7, 0x3b, 0x3c, 0x19, 0xb0, 0xa1, - 0x93, 0xf4, 0xea, 0x57, 0x80, 0x57, 0xf0, 0x53, 0x9a, 0x54, 0x22, 0xf4, 0x6a, 0x47, 0xe8, 0x6f, - 0xad, 0xf3, 0xb4, 0xe4, 0x95, 0xbb, 0x6c, 0x93, 0x34, 0x7f, 0x94, 0x20, 0xa7, 0x30, 0x17, 0xe9, - 0xf5, 0x9e, 0x08, 0xce, 0x09, 0xac, 0xd6, 0xc0, 0xeb, 0xd7, 0x10, 0x8c, 0xf3, 0xd3, 0x5d, 0x0b, - 0x61, 0x91, 0xb9, 0xe4, 0x64, 0x47, 0xf7, 0x02, 0xf7, 0xa0, 0x07, 0x60, 0x97, 0x4a, 0x56, 0xd1, - 0x9d, 0xda, 0xe8, 0xa1, 0xc0, 0xfc, 0xb8, 0x84, 0x0c, 0x05, 0x3e, 0x3d, 0xbf, 0x3d, 0xa2, 0xf2, - 0xd3, 0xc5, 0x98, 0x49, 0x9a, 0xf3, 0x6f, 0x9f, 0x2e, 0x48, 0x72, 0x6b, 0xe7, 0xa1, 0x18, 0x0b, - 0x5b, 0xfe, 0xf7, 0x73, 0x1b, 0x1f, 0x84, 0x7f, 0x0f, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x80, - 0x7f, 0xc1, 0x6a, 0xea, 0x02, 0x00, 0x00, +var fileDescriptor_annotations_24d91a1b8877b604 = []byte{ + // 346 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xea, 0x40, + 0x14, 0xc5, 0xc3, 0xe6, 0xe5, 0xa5, 0xef, 0xa9, 0x58, 0x37, 0x86, 0xf8, 0x87, 0x9d, 0xc6, 0xc0, + 0x8c, 0x81, 0x5d, 0x77, 0x6a, 0xe2, 0xc2, 0x44, 0x49, 0x0a, 0x2b, 0x37, 0x64, 0x18, 0x2e, 0x97, + 0x49, 0x4a, 0xef, 0x64, 0x66, 0x80, 0x90, 0xb0, 0xf4, 0x13, 0xf8, 0x89, 0x8d, 0xd3, 0xd2, 0x9a, + 0x8a, 0xa6, 0xbb, 0xde, 0xdb, 0x39, 0xe7, 0x77, 0x7a, 0x3a, 0x41, 0x47, 0x1b, 0x72, 0x24, 0xbb, + 0x08, 0x69, 0xd7, 0xae, 0x05, 0x22, 0x18, 0x4e, 0xda, 0x29, 0x4a, 0x2d, 0x17, 0x69, 0x4a, 0x4e, + 0xf8, 0x67, 0xe6, 0x8f, 0x85, 0x57, 0x68, 0xb4, 0x64, 0x28, 0x1c, 0xac, 0xc5, 0x26, 0xdb, 0xc9, + 0x31, 0x42, 0x3a, 0xce, 0xa5, 0x2c, 0x97, 0xb6, 0x6e, 0x7e, 0xb1, 0x25, 0x0d, 0xa9, 0xd0, 0x6a, + 0xd5, 0xcb, 0x0c, 0x5a, 0x6d, 0x24, 0xc2, 0x04, 0xb8, 0x9f, 0x26, 0xcb, 0x19, 0x9f, 0x82, 0x95, + 0x46, 0x69, 0x47, 0x26, 0x3b, 0x11, 0x6d, 0x83, 0xe3, 0x42, 0xb4, 0x43, 0x85, 0x67, 0x2c, 0xd3, + 0xb1, 0x9d, 0x8e, 0x3d, 0xaa, 0x04, 0x06, 0x19, 0xe4, 0xf4, 0xfd, 0x6f, 0xbb, 0x71, 0xfd, 0xaf, + 0x77, 0xcb, 0x6a, 0x26, 0x66, 0xc3, 0x6c, 0x8e, 0x9b, 0x05, 0x29, 0xdf, 0x44, 0x6f, 0x8d, 0xe0, + 0xa4, 0xc4, 0x93, 0x06, 0xe3, 0x3b, 0x09, 0x2f, 0xbe, 0x05, 0x78, 0x06, 0x37, 0xa7, 0x69, 0x25, + 0x42, 0xaf, 0x76, 0x84, 0xc1, 0xce, 0x3a, 0x0e, 0x0b, 0x5e, 0xb1, 0x8b, 0xb6, 0x41, 0xf3, 0x4b, + 0x09, 0x72, 0x0e, 0x0b, 0x11, 0x5e, 0xee, 0x89, 0x60, 0xad, 0xc0, 0x6a, 0x0d, 0xbc, 0x7e, 0x0d, + 0xde, 0x38, 0x3e, 0x2a, 0x5b, 0xf0, 0x8b, 0xc8, 0x06, 0x07, 0x25, 0xdd, 0x09, 0xdc, 0x83, 0x1e, + 0x82, 0x59, 0x29, 0x59, 0x45, 0x77, 0x6a, 0xa3, 0x47, 0x02, 0xe3, 0xff, 0x05, 0x64, 0x24, 0x30, + 0xda, 0x06, 0x65, 0x8e, 0xf1, 0x4c, 0x41, 0x32, 0x0d, 0xcf, 0xf7, 0xfc, 0x75, 0x48, 0xaa, 0x9d, + 0xf7, 0x6b, 0x43, 0x9f, 0x86, 0x83, 0x97, 0xfc, 0x9b, 0x0f, 0x0b, 0x96, 0xb7, 0xbc, 0x7f, 0x78, + 0xbd, 0x43, 0xe5, 0xe6, 0xcb, 0x09, 0x93, 0xb4, 0xe0, 0x9f, 0x86, 0x5d, 0x90, 0x64, 0x37, 0xd6, + 0x41, 0x3e, 0xe6, 0xfe, 0xfc, 0xe7, 0xcb, 0x3e, 0xf9, 0xe3, 0xdf, 0xf5, 0x3f, 0x02, 0x00, 0x00, + 0xff, 0xff, 0x4b, 0xc4, 0x41, 0xfb, 0x68, 0x03, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/annotations.proto b/protoc-gen-swagger/options/annotations.proto index 8746192b7a8..2c0f594470e 100644 --- a/protoc-gen-swagger/options/annotations.proto +++ b/protoc-gen-swagger/options/annotations.proto @@ -35,3 +35,10 @@ extend google.protobuf.ServiceOptions { // different descriptor messages. Tag openapiv2_tag = 1042; } +extend google.protobuf.FieldOptions { + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + JSONSchema openapiv2_field = 1042; +} From bb916ca4f209e5f2a004537658d944ef4ae4409e Mon Sep 17 00:00:00 2001 From: Kousuke Ebihara Date: Tue, 7 Aug 2018 17:29:21 +0900 Subject: [PATCH 0027/1518] Fix naming convention of JSON Schema didn't matched with the spec please see also the schemaObject definition of OpenAPI v2 spec: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject --- .../proto/examplepb/a_bit_of_everything.pb.go | 306 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 1 + protoc-gen-swagger/genswagger/types.go | 20 +- 4 files changed, 165 insertions(+), 164 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 58b4581ae25..9e6c25ac895 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -53,7 +53,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0} } // DeepEnum is one or zero. @@ -79,7 +79,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -125,7 +125,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -449,7 +449,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{0, 0} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -501,7 +501,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{1} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -540,7 +540,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ffe735e4b57f3795, []int{2} + return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1203,151 +1203,151 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_ffe735e4b57f3795) -} - -var fileDescriptor_a_bit_of_everything_ffe735e4b57f3795 = []byte{ - // 2265 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x73, 0x1b, 0x49, - 0xd9, 0xf7, 0x48, 0xb2, 0x62, 0x3f, 0xfe, 0x92, 0xdb, 0xd9, 0xc4, 0xd1, 0x7a, 0xd7, 0x1d, 0x6d, - 0xf6, 0x5d, 0xad, 0x77, 0x35, 0x63, 0x2b, 0x7e, 0xb7, 0x12, 0x53, 0xb0, 0xc8, 0xb6, 0x36, 0xf1, - 0x66, 0xe3, 0x38, 0x93, 0x6c, 0x48, 0x85, 0x04, 0x57, 0x4b, 0xd3, 0x92, 0x26, 0xd1, 0x4c, 0x0f, - 0xd3, 0x3d, 0xb6, 0x85, 0x31, 0x14, 0x50, 0x05, 0x05, 0x1c, 0xa8, 0x32, 0x37, 0x0e, 0x7b, 0xa1, - 0x8a, 0xe2, 0xc2, 0x81, 0x03, 0x27, 0x0e, 0x14, 0x87, 0x3d, 0xed, 0x0d, 0xaa, 0x38, 0x70, 0x85, - 0x03, 0x7f, 0x04, 0x07, 0xaa, 0x7b, 0x66, 0x94, 0x91, 0x6c, 0xe1, 0x28, 0xa1, 0xf6, 0x62, 0x4f, - 0x77, 0xff, 0x9e, 0xef, 0x8f, 0x7e, 0x5a, 0x50, 0xa6, 0x07, 0xc4, 0xf1, 0xda, 0x94, 0x1b, 0x9e, - 0xcf, 0x04, 0x33, 0xa2, 0xa5, 0x57, 0x33, 0xc8, 0x6e, 0xcd, 0x16, 0xbb, 0xac, 0xb1, 0x4b, 0xf7, - 0xa8, 0xdf, 0x11, 0x2d, 0xdb, 0x6d, 0xea, 0x0a, 0x83, 0x16, 0x9b, 0xbe, 0x57, 0xd7, 0x9b, 0x44, - 0xd0, 0x7d, 0xd2, 0xd1, 0x63, 0x06, 0x7a, 0x97, 0x34, 0xbf, 0xd0, 0x64, 0xac, 0xd9, 0xa6, 0x06, - 0xf1, 0x6c, 0x83, 0xb8, 0x2e, 0x13, 0x44, 0xd8, 0xcc, 0xe5, 0x21, 0x79, 0xfe, 0xf5, 0xe8, 0x54, - 0xad, 0x6a, 0x41, 0xc3, 0xa0, 0x8e, 0x27, 0x3a, 0xd1, 0xe1, 0x9b, 0xfd, 0x87, 0x56, 0xe0, 0x2b, - 0xea, 0xe8, 0x1c, 0xf7, 0xe9, 0xcb, 0x83, 0x9a, 0xe1, 0x50, 0xce, 0x49, 0x93, 0x46, 0x88, 0xcb, - 0x27, 0x11, 0xe5, 0x3e, 0xc8, 0x62, 0xbf, 0x10, 0x61, 0x3b, 0x94, 0x0b, 0xe2, 0x78, 0x11, 0xe0, - 0x7d, 0xf5, 0xaf, 0x5e, 0x6a, 0x52, 0xb7, 0xc4, 0xf7, 0x49, 0xb3, 0x49, 0x7d, 0x83, 0x79, 0xca, - 0x88, 0x93, 0x06, 0x15, 0xfe, 0x3d, 0x0b, 0xb9, 0xca, 0xba, 0x2d, 0xee, 0x34, 0xaa, 0x5d, 0x57, - 0xa1, 0x27, 0x30, 0xc5, 0x6d, 0xb7, 0xd9, 0xa6, 0xbb, 0x2e, 0xe5, 0x82, 0x5a, 0xf3, 0x97, 0xb0, - 0x56, 0x9c, 0x28, 0x5f, 0xd3, 0xcf, 0x70, 0x9e, 0xde, 0xcf, 0x49, 0xdf, 0x56, 0xf4, 0xe6, 0x64, - 0xc8, 0x2e, 0x5c, 0x21, 0x0a, 0x99, 0x20, 0xb0, 0xad, 0x79, 0x0d, 0x6b, 0xc5, 0xf1, 0xf5, 0xbb, - 0xc7, 0x95, 0xed, 0x9f, 0x69, 0xb7, 0xbe, 0x49, 0x4a, 0x8d, 0x4a, 0xe9, 0xa3, 0xe5, 0xd2, 0xf5, - 0x27, 0x87, 0xd7, 0x8e, 0x4a, 0xc9, 0xe5, 0xea, 0x30, 0xcb, 0x95, 0xf2, 0x91, 0xa9, 0xd8, 0xa3, - 0x1d, 0xc8, 0x46, 0xea, 0xa7, 0x70, 0xfa, 0x95, 0xd4, 0x8f, 0xf8, 0xa0, 0x45, 0x98, 0x68, 0xb4, - 0x19, 0x11, 0xbb, 0x7b, 0xa4, 0x1d, 0xd0, 0xf9, 0x34, 0xd6, 0x8a, 0x29, 0x13, 0xd4, 0xd6, 0x03, - 0xb9, 0x83, 0x2e, 0xc3, 0xa4, 0xc5, 0x82, 0x5a, 0x9b, 0x46, 0x88, 0x0c, 0xd6, 0x8a, 0x9a, 0x39, - 0x11, 0xee, 0x85, 0x90, 0x45, 0x98, 0xb0, 0x5d, 0xf1, 0xc1, 0x6a, 0x84, 0x18, 0xc5, 0x5a, 0x31, - 0x6d, 0x82, 0xda, 0xea, 0xf2, 0x08, 0x92, 0x88, 0x2c, 0xd6, 0x8a, 0x19, 0x73, 0x22, 0x48, 0x40, - 0x42, 0x1e, 0x57, 0xcb, 0x11, 0xe2, 0x1c, 0xd6, 0x8a, 0xa3, 0x8a, 0xc7, 0xd5, 0x72, 0x08, 0x78, - 0x0b, 0xa6, 0x1a, 0xf6, 0x01, 0xb5, 0xba, 0x4c, 0xc6, 0xb0, 0x56, 0xcc, 0x9a, 0x93, 0xd1, 0x66, - 0x2f, 0xa8, 0xcb, 0x67, 0x1c, 0x6b, 0xc5, 0x73, 0x11, 0x28, 0xe6, 0xf4, 0x06, 0x40, 0x8d, 0xb1, - 0x76, 0x84, 0x00, 0xac, 0x15, 0xc7, 0xcc, 0x71, 0xb9, 0xd3, 0x55, 0x96, 0x0b, 0xdf, 0x76, 0x9b, - 0x11, 0x60, 0x42, 0x86, 0xd4, 0x9c, 0x08, 0xf7, 0xba, 0xca, 0xd6, 0x3a, 0x82, 0xf2, 0x08, 0xf1, - 0x06, 0xd6, 0x8a, 0x93, 0x26, 0xa8, 0xad, 0x1e, 0x83, 0xbb, 0x6a, 0x4c, 0x61, 0xad, 0x38, 0x15, - 0x1a, 0x1c, 0x6b, 0x71, 0x0b, 0x80, 0xba, 0x81, 0x13, 0x01, 0xa6, 0xb1, 0x56, 0x9c, 0x2e, 0xbf, - 0x7f, 0x66, 0x38, 0xb7, 0x03, 0x87, 0xfa, 0x76, 0xbd, 0xea, 0x06, 0x8e, 0x39, 0x2e, 0xe9, 0x43, - 0x66, 0x6f, 0xc3, 0x34, 0xef, 0x35, 0x7c, 0x06, 0x6b, 0xc5, 0x19, 0x73, 0x8a, 0xf7, 0x58, 0xde, - 0x85, 0x75, 0x9d, 0x98, 0xc3, 0x5a, 0x31, 0x17, 0xc3, 0x12, 0xe1, 0xe2, 0x49, 0xed, 0x67, 0xb1, - 0x56, 0x9c, 0x35, 0x27, 0x78, 0x42, 0xfb, 0x08, 0xd2, 0xe5, 0x83, 0xb0, 0x56, 0x44, 0x21, 0x24, - 0xe6, 0x52, 0x86, 0xd7, 0x7c, 0xea, 0x51, 0x22, 0xa8, 0xb5, 0xdb, 0xe3, 0xd0, 0x39, 0x9c, 0x2e, - 0x8e, 0x9b, 0x73, 0xf1, 0xe1, 0xbd, 0x84, 0x63, 0xaf, 0xc3, 0x04, 0x73, 0xa9, 0x6c, 0x72, 0xb2, - 0x07, 0xcd, 0x9f, 0x57, 0x35, 0x7a, 0x41, 0x0f, 0xfb, 0x83, 0x1e, 0xf7, 0x07, 0xbd, 0x2a, 0x4f, - 0x6f, 0x8e, 0x98, 0xa0, 0xc0, 0x6a, 0x85, 0xde, 0x82, 0xc9, 0x90, 0x34, 0x94, 0x35, 0xff, 0x9a, - 0x0c, 0xdb, 0xcd, 0x11, 0x33, 0x64, 0x18, 0x0a, 0x41, 0x8f, 0x61, 0xdc, 0x21, 0x5e, 0xa4, 0xc7, - 0x05, 0x55, 0x42, 0x1f, 0x0e, 0x5f, 0x42, 0xb7, 0x89, 0xa7, 0xd4, 0xad, 0xba, 0xc2, 0xef, 0x98, - 0x63, 0x4e, 0xb4, 0x44, 0x07, 0x30, 0xe7, 0x10, 0xcf, 0xeb, 0xb7, 0xf7, 0xa2, 0x92, 0x73, 0xf3, - 0xa5, 0xe4, 0x78, 0x3d, 0xfe, 0x09, 0x05, 0xce, 0x3a, 0xfd, 0xfb, 0x09, 0xc9, 0x61, 0x59, 0x47, - 0x92, 0xe7, 0x5f, 0x4d, 0x72, 0xd8, 0x2a, 0x4e, 0x4a, 0x4e, 0xec, 0xa3, 0x35, 0x98, 0x77, 0x99, - 0xbb, 0xc1, 0xdc, 0x3d, 0xea, 0xca, 0x26, 0x4c, 0xda, 0xdb, 0xc4, 0x09, 0xfb, 0xc2, 0x7c, 0x5e, - 0x55, 0xce, 0xc0, 0x73, 0xb4, 0x01, 0x33, 0xdd, 0x4e, 0x1f, 0x69, 0xfc, 0xba, 0x8a, 0x78, 0xfe, - 0x44, 0xc4, 0xef, 0xc7, 0x38, 0x73, 0xba, 0x4b, 0x12, 0x32, 0x79, 0x0c, 0xdd, 0x4c, 0xda, 0x4d, - 0x14, 0xd4, 0x02, 0x4e, 0x0f, 0x5d, 0x50, 0xb3, 0x31, 0xa3, 0x6a, 0x5c, 0x58, 0xf9, 0xdf, 0x6a, - 0x90, 0x8d, 0x5a, 0x3c, 0x82, 0x8c, 0x4b, 0x1c, 0x1a, 0xb6, 0x78, 0x53, 0x7d, 0xa3, 0x0b, 0x90, - 0x25, 0x0e, 0x0b, 0x5c, 0x31, 0x9f, 0x52, 0x15, 0x1e, 0xad, 0xd0, 0x5d, 0x48, 0xb1, 0x67, 0xaa, - 0x99, 0x4e, 0x97, 0x2b, 0x2f, 0xdb, 0xa3, 0xf5, 0x4d, 0x4a, 0x3d, 0xa5, 0x58, 0x8a, 0x3d, 0x2b, - 0x2c, 0xc2, 0x58, 0xbc, 0x46, 0xe3, 0x30, 0xfa, 0x51, 0xe5, 0x93, 0x7b, 0xd5, 0xdc, 0x08, 0x1a, - 0x83, 0xcc, 0x7d, 0xf3, 0xd3, 0x6a, 0x4e, 0xcb, 0xdb, 0x30, 0xd5, 0x93, 0x98, 0x28, 0x07, 0xe9, - 0x67, 0xb4, 0x13, 0xe9, 0x2b, 0x3f, 0xd1, 0x3a, 0x8c, 0x86, 0xde, 0x49, 0xbd, 0x44, 0xbb, 0x09, - 0x49, 0xd7, 0x52, 0xd7, 0xb4, 0xfc, 0x26, 0x5c, 0x38, 0x3d, 0x37, 0x4f, 0x91, 0x79, 0x3e, 0x29, - 0x73, 0x3c, 0xc9, 0xe5, 0x7b, 0x31, 0x97, 0xfe, 0x3c, 0x3b, 0x85, 0xcb, 0x76, 0x92, 0xcb, 0xab, - 0xdc, 0x7b, 0xcf, 0xe5, 0xaf, 0x7d, 0xae, 0x1d, 0x57, 0xfe, 0xac, 0x41, 0x73, 0x69, 0xae, 0x82, - 0x6b, 0xb6, 0xc0, 0xac, 0x81, 0x9f, 0xcf, 0x56, 0xe5, 0xad, 0x2d, 0x57, 0xc4, 0x29, 0xdb, 0xc1, - 0x75, 0xe6, 0x78, 0x6d, 0xbb, 0x2e, 0x93, 0x03, 0x47, 0xc3, 0x0b, 0x16, 0x1d, 0x8f, 0x62, 0xc1, - 0x70, 0x9d, 0xed, 0x51, 0x1f, 0x3b, 0xc4, 0xed, 0xe0, 0x06, 0x25, 0x22, 0xf0, 0x29, 0x97, 0xbc, - 0x76, 0xe2, 0xdc, 0xfd, 0x8b, 0xa6, 0x2e, 0xef, 0xa5, 0x07, 0x70, 0xe5, 0x23, 0xdb, 0xb5, 0x30, - 0x0b, 0x04, 0x76, 0x98, 0x4f, 0x31, 0xa9, 0xc9, 0xcf, 0x13, 0xa3, 0x8a, 0xde, 0x12, 0xc2, 0xe3, - 0x6b, 0x86, 0xd1, 0xb4, 0x45, 0x2b, 0xa8, 0xe9, 0x75, 0xe6, 0x18, 0xd2, 0xdc, 0x12, 0xad, 0x33, - 0xde, 0xe1, 0x82, 0x46, 0xcb, 0xc8, 0xfa, 0xf5, 0xa9, 0xb8, 0x69, 0x2a, 0xd3, 0x0a, 0x79, 0xc8, - 0xac, 0x33, 0xab, 0x73, 0x5a, 0xbe, 0x16, 0x1e, 0xc3, 0xcc, 0xed, 0x50, 0xfb, 0x6f, 0xd8, 0xa2, - 0xa5, 0x60, 0xd3, 0x90, 0x8a, 0xe7, 0x16, 0x33, 0x65, 0x5b, 0xe8, 0x3a, 0x64, 0x2c, 0x22, 0x48, - 0xe4, 0xe8, 0xb7, 0xcf, 0x74, 0xb4, 0x64, 0x62, 0x2a, 0x92, 0x25, 0x0c, 0x13, 0x89, 0x84, 0x91, - 0xa9, 0xf9, 0xa8, 0x6a, 0xde, 0xc9, 0x8d, 0xa0, 0x73, 0x90, 0xbe, 0xb3, 0x5d, 0xcd, 0x69, 0xe5, - 0xdf, 0x9f, 0x87, 0x8b, 0xfd, 0xf6, 0xde, 0xa3, 0xfe, 0x9e, 0x5d, 0xa7, 0xe8, 0xb3, 0x34, 0x64, - 0x37, 0x7c, 0x59, 0x7f, 0x68, 0x65, 0xe8, 0xf0, 0xe6, 0x87, 0x27, 0x29, 0xfc, 0x2e, 0xf5, 0xc3, - 0xbf, 0xfe, 0xf3, 0x97, 0xa9, 0xdf, 0xa4, 0x0a, 0xbf, 0x4e, 0x19, 0x7b, 0x2b, 0xf1, 0xac, 0x7d, - 0xda, 0xa4, 0x6d, 0x1c, 0x26, 0x86, 0xa4, 0x23, 0xe3, 0x30, 0x39, 0x11, 0x1d, 0x19, 0x87, 0x89, - 0x9b, 0xf0, 0xc8, 0xe0, 0xd4, 0x23, 0x3e, 0x11, 0xcc, 0x37, 0x0e, 0x83, 0x9e, 0x83, 0xc3, 0xc4, - 0x9d, 0x7a, 0x64, 0x1c, 0xf6, 0x5c, 0xc4, 0xf1, 0x3a, 0x71, 0xfe, 0x7c, 0x46, 0x39, 0x32, 0x0e, - 0x93, 0x17, 0xca, 0x57, 0xb9, 0xf0, 0x3d, 0x9f, 0x36, 0xec, 0x03, 0x63, 0xe9, 0x28, 0x14, 0x92, - 0x20, 0xe3, 0xfd, 0x7c, 0x78, 0xbf, 0x20, 0xde, 0x47, 0xd0, 0xab, 0xe4, 0xa0, 0x6e, 0x7d, 0x84, - 0x3e, 0xd3, 0x00, 0xc2, 0x00, 0xa9, 0xc4, 0xf9, 0x72, 0x82, 0xb4, 0xa4, 0x62, 0x74, 0xa5, 0xb0, - 0x78, 0x46, 0x84, 0xd6, 0xb4, 0x25, 0xf4, 0x5d, 0xc8, 0x7e, 0xc2, 0xd8, 0xb3, 0xc0, 0x43, 0x33, - 0xba, 0x7c, 0x66, 0xe8, 0x5b, 0x56, 0x94, 0xed, 0x2f, 0x23, 0x59, 0x57, 0x92, 0x8b, 0xe8, 0xff, - 0xce, 0xcc, 0x0d, 0x59, 0xdd, 0x47, 0xe8, 0xc7, 0x1a, 0x64, 0x3f, 0xf5, 0xac, 0x97, 0xcc, 0xdf, - 0x01, 0x43, 0x4e, 0x61, 0x45, 0x69, 0xf1, 0x5e, 0xfe, 0x05, 0xb5, 0x90, 0x6e, 0xf8, 0x85, 0x06, - 0xd9, 0x4d, 0xda, 0xa6, 0x82, 0x9e, 0xf4, 0xc3, 0x20, 0x31, 0x8f, 0x8f, 0x2b, 0xef, 0xd5, 0xde, - 0x85, 0x69, 0x80, 0x8a, 0x67, 0xdf, 0xa2, 0x9d, 0x4a, 0x20, 0x5a, 0x68, 0x04, 0x2e, 0x42, 0xf6, - 0x8e, 0xfc, 0x2c, 0xa3, 0x29, 0xc8, 0xf8, 0x94, 0x58, 0x30, 0xba, 0xef, 0xdb, 0x82, 0x86, 0xae, - 0x59, 0x7a, 0x51, 0xd7, 0xfc, 0x43, 0x83, 0xb1, 0x1b, 0x54, 0xdc, 0x0d, 0xa8, 0xdf, 0xf9, 0x5f, - 0x3a, 0xe7, 0xe7, 0xda, 0x71, 0xe5, 0x7e, 0x61, 0x1b, 0x16, 0x4e, 0xeb, 0xab, 0x5d, 0x81, 0x43, - 0xf6, 0xd3, 0x87, 0x5a, 0x6d, 0x44, 0xd9, 0xa7, 0xa3, 0xf7, 0xcf, 0xb2, 0xef, 0xdb, 0x52, 0x40, - 0x6c, 0xe5, 0xe7, 0x69, 0xc8, 0x54, 0xeb, 0x2d, 0x86, 0x8a, 0x03, 0x2c, 0xe4, 0x41, 0x4d, 0x0f, - 0x6f, 0xcc, 0x38, 0x1c, 0x2f, 0x8c, 0x2c, 0xfc, 0x2b, 0x75, 0x5c, 0xf9, 0x41, 0x0a, 0x26, 0x69, - 0xbd, 0xc5, 0x30, 0x0f, 0x5b, 0x26, 0x8c, 0xa9, 0x95, 0xef, 0xd5, 0xd1, 0xec, 0xbd, 0xc0, 0x71, - 0x88, 0xdf, 0x59, 0xc3, 0xd5, 0x68, 0x2b, 0x9f, 0xdb, 0xa4, 0xbc, 0xee, 0xdb, 0xea, 0x99, 0xac, - 0x76, 0x0b, 0x9b, 0x80, 0x7a, 0x1d, 0xa5, 0xb4, 0x1d, 0xd2, 0x3d, 0x1f, 0x7f, 0x08, 0xe9, 0xff, - 0x5f, 0xbe, 0x8a, 0xae, 0xc1, 0x07, 0x26, 0x15, 0x81, 0xef, 0x52, 0x0b, 0xef, 0xb7, 0xa8, 0x8b, - 0x45, 0x8b, 0x62, 0x9f, 0x72, 0x16, 0xf8, 0x75, 0x8a, 0x6d, 0x8e, 0x05, 0x75, 0x3c, 0xe6, 0x13, - 0xdf, 0x6e, 0x77, 0x70, 0xe0, 0x92, 0x3d, 0x62, 0xb7, 0x49, 0xad, 0x4d, 0xf5, 0x8f, 0xbf, 0x02, - 0xe9, 0xd5, 0xe5, 0x55, 0xb4, 0x0a, 0x4b, 0xff, 0x85, 0x81, 0xc5, 0x28, 0xc7, 0x2e, 0x13, 0x98, - 0x1e, 0xd8, 0x5c, 0xe8, 0x28, 0x0b, 0x99, 0x5f, 0xa5, 0xb4, 0xb4, 0x0a, 0xcc, 0x93, 0xb3, 0x03, - 0x23, 0x1d, 0x63, 0x1c, 0x86, 0x3d, 0xed, 0xd1, 0xa5, 0x42, 0xce, 0xd8, 0x2b, 0x77, 0xf1, 0xf2, - 0x6c, 0x2d, 0x9c, 0x03, 0x1e, 0x21, 0x74, 0xe2, 0x08, 0xfd, 0x41, 0x83, 0x49, 0x39, 0x6a, 0xed, - 0x10, 0xd1, 0x52, 0x1e, 0xfa, 0x72, 0x3a, 0xdd, 0x87, 0xca, 0xb6, 0xeb, 0x85, 0xd5, 0x33, 0x8b, - 0xaa, 0xe7, 0x87, 0x0c, 0x5d, 0x5e, 0xec, 0xaa, 0xee, 0x2b, 0x00, 0xdb, 0x6c, 0xdd, 0x76, 0x2d, - 0xdb, 0x6d, 0x72, 0x74, 0xe9, 0x44, 0xcd, 0x6c, 0x46, 0x3f, 0xdd, 0x0c, 0x2c, 0xa7, 0x11, 0xf4, - 0x00, 0xce, 0xc9, 0x49, 0x9b, 0x05, 0x02, 0x0d, 0x00, 0x0d, 0x24, 0x7e, 0x5d, 0xa9, 0xff, 0x1a, - 0x9a, 0x4b, 0xfa, 0x53, 0x44, 0xcc, 0x5a, 0x90, 0xab, 0xfa, 0x3e, 0xf3, 0xe5, 0xd4, 0xb1, 0x49, - 0x05, 0xb1, 0xdb, 0x7c, 0x68, 0x01, 0x57, 0x94, 0x80, 0x37, 0xd1, 0x42, 0x4f, 0xc0, 0x24, 0xd7, - 0x7d, 0x5b, 0xb4, 0xac, 0x88, 0xeb, 0x4f, 0x34, 0x40, 0x37, 0xa8, 0xe8, 0x9f, 0x72, 0x96, 0xcf, - 0x8c, 0x47, 0x1f, 0xc5, 0x40, 0x35, 0xde, 0x51, 0x6a, 0x5c, 0x2e, 0x5c, 0x4a, 0xaa, 0x21, 0x35, - 0xa8, 0x31, 0xab, 0x63, 0x1c, 0xca, 0x1e, 0xac, 0xa6, 0x21, 0xf4, 0x23, 0x0d, 0x66, 0x77, 0x18, - 0x17, 0x92, 0xa3, 0x22, 0x55, 0x8a, 0xbc, 0xd8, 0x40, 0x35, 0x50, 0xba, 0xa1, 0xa4, 0xbf, 0x5b, - 0xb8, 0x92, 0x94, 0xee, 0x31, 0x2e, 0xa4, 0x06, 0xea, 0xd1, 0x1c, 0xaa, 0x11, 0x27, 0x45, 0xfe, - 0x4f, 0xda, 0x71, 0xe5, 0x8f, 0x1a, 0x6a, 0x0c, 0x98, 0xba, 0xb0, 0x95, 0x68, 0x12, 0xa5, 0x12, - 0xde, 0x6f, 0xd9, 0xf5, 0x16, 0xe6, 0x2d, 0x16, 0xb4, 0x2d, 0x55, 0x7e, 0x35, 0x8a, 0x03, 0x4e, - 0x2d, 0x6c, 0xbb, 0xd8, 0x6b, 0x93, 0x3a, 0x95, 0x93, 0xad, 0x2c, 0x54, 0x8b, 0xd5, 0x03, 0x87, - 0xba, 0xe1, 0x2f, 0x6f, 0x72, 0x3c, 0x96, 0x8b, 0xcb, 0xf9, 0xbb, 0xb0, 0x78, 0x5a, 0x2f, 0x96, - 0x65, 0x14, 0xcf, 0x79, 0x43, 0xf6, 0x9b, 0xf2, 0x53, 0x38, 0x5f, 0x27, 0x0e, 0x6d, 0x6f, 0x10, - 0x4e, 0x23, 0x1e, 0x72, 0x28, 0x41, 0x26, 0x8c, 0x86, 0x2f, 0xff, 0x61, 0x13, 0xe9, 0x92, 0xf2, - 0xe1, 0x1c, 0x9a, 0xed, 0x49, 0x24, 0x79, 0x54, 0xfe, 0x16, 0x2c, 0x54, 0x5c, 0x26, 0x5a, 0xd4, - 0x8f, 0x24, 0xc9, 0xe0, 0x25, 0x8a, 0xea, 0x6b, 0x3d, 0x25, 0x36, 0xac, 0xe0, 0x91, 0xf5, 0xbf, - 0x67, 0x8f, 0x2b, 0x5f, 0x64, 0x91, 0x80, 0xb9, 0x0a, 0x5e, 0x0f, 0x9f, 0x1c, 0x89, 0x0e, 0xf0, - 0x10, 0xce, 0x37, 0xcd, 0x9d, 0x8d, 0xd2, 0x8d, 0xd0, 0x72, 0xec, 0xf9, 0xec, 0x29, 0xad, 0x8b, - 0x61, 0x3d, 0x96, 0xcf, 0xb9, 0xcc, 0xa5, 0x5f, 0x8f, 0x2c, 0x93, 0xe8, 0x72, 0x7a, 0x45, 0x5f, - 0x5e, 0x4a, 0x6b, 0xa9, 0x4c, 0x39, 0x47, 0xbc, 0xf0, 0x21, 0x63, 0x33, 0xd7, 0x78, 0xca, 0x99, - 0x5b, 0xbe, 0x90, 0xdc, 0x39, 0x28, 0x35, 0x18, 0x2b, 0x39, 0xb6, 0x43, 0xd7, 0x4e, 0x20, 0xd7, - 0x06, 0x20, 0xcd, 0x1d, 0xd9, 0xd0, 0xaf, 0xa2, 0x2d, 0xb8, 0x71, 0xb2, 0xa1, 0x07, 0x9c, 0xfa, - 0xcf, 0x9b, 0x79, 0x8b, 0xec, 0x51, 0xec, 0x51, 0xdf, 0xb1, 0x39, 0x97, 0x79, 0x23, 0x18, 0x26, - 0xf5, 0x3a, 0xe5, 0xbc, 0xa7, 0xf9, 0xeb, 0xe6, 0x2b, 0x5c, 0x11, 0xe7, 0xcc, 0x9b, 0x90, 0x5e, - 0x5d, 0xb9, 0x86, 0x2a, 0x30, 0xb5, 0xf5, 0x8e, 0x83, 0x09, 0x16, 0x94, 0x78, 0x4c, 0xe8, 0x68, - 0x19, 0xf4, 0xfc, 0x50, 0x4f, 0xde, 0x47, 0x3f, 0x4d, 0xc1, 0x0c, 0x8c, 0xaf, 0x13, 0x6e, 0xd7, - 0xd5, 0x40, 0x94, 0x1a, 0xd3, 0xe0, 0x8d, 0x9e, 0x11, 0x69, 0x66, 0x2c, 0x95, 0x1f, 0x7f, 0x58, - 0xaa, 0xec, 0x6c, 0x95, 0x6e, 0xd1, 0x0e, 0x4e, 0xc1, 0xdf, 0xb4, 0xee, 0xc8, 0xf4, 0x85, 0x36, - 0x96, 0x2e, 0x66, 0xca, 0x6f, 0xc5, 0xd1, 0x4b, 0x04, 0xc4, 0x60, 0x24, 0x10, 0x2d, 0x43, 0xfe, - 0x61, 0xbe, 0xfd, 0x1d, 0xba, 0xb6, 0x38, 0x18, 0x24, 0xd8, 0x33, 0xea, 0xae, 0x7f, 0x1f, 0xf2, - 0xe1, 0x04, 0x86, 0xd0, 0x0d, 0x9f, 0xb8, 0x82, 0x63, 0xb9, 0x88, 0xbc, 0x07, 0x0b, 0xd1, 0x5c, - 0x86, 0xe6, 0xa2, 0x43, 0xb5, 0x8a, 0x4f, 0x37, 0x60, 0x94, 0x58, 0x8e, 0xed, 0xa2, 0xb5, 0x1e, - 0x52, 0xd7, 0xea, 0x81, 0xa9, 0x60, 0x48, 0x98, 0xcd, 0x85, 0xbc, 0x28, 0xf6, 0x28, 0xb6, 0xdd, - 0x06, 0xf3, 0x1d, 0x15, 0xef, 0xda, 0x22, 0x4c, 0x25, 0x5d, 0x31, 0xd2, 0x3f, 0x2b, 0xd6, 0xde, - 0x1d, 0x38, 0x2d, 0xf6, 0x43, 0xfd, 0x2d, 0xb8, 0x78, 0xfb, 0x79, 0x73, 0x48, 0xe6, 0xfc, 0xb0, - 0xb9, 0xfe, 0x68, 0xbc, 0x1b, 0xb9, 0x5a, 0x56, 0x95, 0xdb, 0xd5, 0xff, 0x04, 0x00, 0x00, 0xff, - 0xff, 0xd3, 0xfa, 0x70, 0x7c, 0x44, 0x19, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_364bd45bb659fb85) +} + +var fileDescriptor_a_bit_of_everything_364bd45bb659fb85 = []byte{ + // 2266 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcb, 0x73, 0x1b, 0x49, + 0x19, 0xf7, 0x48, 0xb2, 0x62, 0x7f, 0x7e, 0xc9, 0xed, 0x6c, 0xe2, 0x68, 0xbd, 0xeb, 0x8e, 0x36, + 0xcb, 0x6a, 0xbd, 0xab, 0x19, 0x5b, 0x31, 0x5b, 0x89, 0x29, 0x58, 0x64, 0x5b, 0x9b, 0x78, 0xb3, + 0xeb, 0x38, 0x93, 0x6c, 0x48, 0x85, 0x04, 0x57, 0x4b, 0xd3, 0x92, 0x26, 0xd1, 0x4c, 0x0f, 0xd3, + 0x3d, 0xb6, 0x85, 0x31, 0xcf, 0x2a, 0x28, 0xe0, 0x40, 0x95, 0xb9, 0x71, 0xd8, 0x0b, 0x55, 0x14, + 0x17, 0x0e, 0x1c, 0x38, 0x71, 0xa0, 0x38, 0xec, 0x69, 0x6f, 0x50, 0xc5, 0x81, 0x2b, 0x1c, 0xf8, + 0x2f, 0xa0, 0xba, 0x67, 0x46, 0x19, 0xc9, 0x16, 0x8e, 0x12, 0x6a, 0x2f, 0xf6, 0x74, 0xf7, 0xef, + 0x7b, 0x3f, 0xfa, 0x6b, 0x41, 0x99, 0x1e, 0x10, 0xc7, 0x6b, 0x53, 0x6e, 0x78, 0x3e, 0x13, 0xcc, + 0x88, 0x96, 0x5e, 0xcd, 0x20, 0xbb, 0x35, 0x5b, 0xec, 0xb2, 0xc6, 0x2e, 0xdd, 0xa3, 0x7e, 0x47, + 0xb4, 0x6c, 0xb7, 0xa9, 0x2b, 0x0c, 0x5a, 0x6c, 0xfa, 0x5e, 0x5d, 0x6f, 0x12, 0x41, 0xf7, 0x49, + 0x47, 0x8f, 0x19, 0xe8, 0x5d, 0xd2, 0xfc, 0x42, 0x93, 0xb1, 0x66, 0x9b, 0x1a, 0xc4, 0xb3, 0x0d, + 0xe2, 0xba, 0x4c, 0x10, 0x61, 0x33, 0x97, 0x87, 0xe4, 0xf9, 0x57, 0xa3, 0x53, 0xb5, 0xaa, 0x05, + 0x0d, 0x83, 0x3a, 0x9e, 0xe8, 0x44, 0x87, 0xaf, 0xf7, 0x1f, 0x5a, 0x81, 0xaf, 0xa8, 0xa3, 0x73, + 0xdc, 0xa7, 0x2f, 0x0f, 0x6a, 0x86, 0x43, 0x39, 0x27, 0x4d, 0x1a, 0x21, 0x2e, 0x9f, 0x44, 0x94, + 0xfb, 0x20, 0x8b, 0xfd, 0x42, 0x84, 0xed, 0x50, 0x2e, 0x88, 0xe3, 0x45, 0x80, 0x77, 0xd5, 0xbf, + 0x7a, 0xa9, 0x49, 0xdd, 0x12, 0xdf, 0x27, 0xcd, 0x26, 0xf5, 0x0d, 0xe6, 0x29, 0x23, 0x4e, 0x1a, + 0x54, 0xf8, 0xcf, 0x2c, 0xe4, 0x2a, 0xeb, 0xb6, 0xb8, 0xdd, 0xa8, 0x76, 0x5d, 0x85, 0x1e, 0xc3, + 0x14, 0xb7, 0xdd, 0x66, 0x9b, 0xee, 0xba, 0x94, 0x0b, 0x6a, 0xcd, 0x5f, 0xc2, 0x5a, 0x71, 0xa2, + 0x7c, 0x4d, 0x3f, 0xc3, 0x79, 0x7a, 0x3f, 0x27, 0x7d, 0x5b, 0xd1, 0x9b, 0x93, 0x21, 0xbb, 0x70, + 0x85, 0x5a, 0x90, 0x09, 0x02, 0xdb, 0x9a, 0xd7, 0xb0, 0x56, 0x1c, 0x5f, 0xbf, 0x77, 0x5c, 0xb9, + 0xf3, 0x03, 0x4d, 0xfb, 0xb9, 0x76, 0xeb, 0x9b, 0xa4, 0xd4, 0xa8, 0x94, 0x3e, 0x58, 0x2e, 0x5d, + 0x7f, 0x7c, 0x78, 0xed, 0xa8, 0x94, 0x5c, 0xae, 0x0e, 0xb3, 0x5c, 0x29, 0x1f, 0x99, 0x4a, 0x02, + 0xda, 0x81, 0x6c, 0x64, 0x41, 0x0a, 0xa7, 0x5f, 0xca, 0x82, 0x88, 0x0f, 0x5a, 0x84, 0x89, 0x46, + 0x9b, 0x11, 0xb1, 0xbb, 0x47, 0xda, 0x01, 0x9d, 0x4f, 0x63, 0xad, 0x98, 0x32, 0x41, 0x6d, 0xdd, + 0x97, 0x3b, 0xe8, 0x32, 0x4c, 0x5a, 0x2c, 0xa8, 0xb5, 0x69, 0x84, 0xc8, 0x60, 0xad, 0xa8, 0x99, + 0x13, 0xe1, 0x5e, 0x08, 0x59, 0x84, 0x09, 0xdb, 0x15, 0xef, 0xad, 0x46, 0x88, 0x51, 0xac, 0x15, + 0xd3, 0x26, 0xa8, 0xad, 0x2e, 0x8f, 0x20, 0x89, 0xc8, 0x62, 0xad, 0x98, 0x31, 0x27, 0x82, 0x04, + 0x24, 0xe4, 0x71, 0xb5, 0x1c, 0x21, 0xce, 0x61, 0xad, 0x38, 0xaa, 0x78, 0x5c, 0x2d, 0x87, 0x80, + 0x37, 0x60, 0xaa, 0x61, 0x1f, 0x50, 0xab, 0xcb, 0x64, 0x0c, 0x6b, 0xc5, 0xac, 0x39, 0x19, 0x6d, + 0xf6, 0x82, 0xba, 0x7c, 0xc6, 0xb1, 0x56, 0x3c, 0x17, 0x81, 0x62, 0x4e, 0xaf, 0x01, 0xd4, 0x18, + 0x6b, 0x47, 0x08, 0xc0, 0x5a, 0x71, 0xcc, 0x1c, 0x97, 0x3b, 0x5d, 0x65, 0xb9, 0xf0, 0x6d, 0xb7, + 0x19, 0x01, 0x26, 0x64, 0x54, 0xcd, 0x89, 0x70, 0xaf, 0xab, 0x6c, 0xad, 0x23, 0x28, 0x8f, 0x10, + 0xaf, 0x61, 0xad, 0x38, 0x69, 0x82, 0xda, 0xea, 0x31, 0xb8, 0xab, 0xc6, 0x14, 0xd6, 0x8a, 0x53, + 0xa1, 0xc1, 0xb1, 0x16, 0xb7, 0x00, 0xa8, 0x1b, 0x38, 0x11, 0x60, 0x1a, 0x6b, 0xc5, 0xe9, 0xf2, + 0xbb, 0x67, 0x86, 0x73, 0x3b, 0x70, 0xa8, 0x6f, 0xd7, 0xab, 0x6e, 0xe0, 0x98, 0xe3, 0x92, 0x3e, + 0x64, 0xf6, 0x26, 0x4c, 0xf3, 0x5e, 0xc3, 0x67, 0xb0, 0x56, 0x9c, 0x31, 0xa7, 0x78, 0x8f, 0xe5, + 0x5d, 0x58, 0xd7, 0x89, 0x39, 0xac, 0x15, 0x73, 0x31, 0x2c, 0x11, 0x2e, 0x9e, 0xd4, 0x7e, 0x16, + 0x6b, 0xc5, 0x59, 0x73, 0x82, 0x27, 0xb4, 0x8f, 0x20, 0x5d, 0x3e, 0x08, 0x6b, 0x45, 0x14, 0x42, + 0x62, 0x2e, 0x65, 0x78, 0xc5, 0xa7, 0x1e, 0x25, 0x82, 0x5a, 0xbb, 0x3d, 0x0e, 0x9d, 0xc3, 0xe9, + 0xe2, 0xb8, 0x39, 0x17, 0x1f, 0xde, 0x4d, 0x38, 0xf6, 0x3a, 0x4c, 0x30, 0x97, 0xca, 0x3e, 0x27, + 0xdb, 0xd0, 0xfc, 0x79, 0x55, 0xa6, 0x17, 0xf4, 0xb0, 0x45, 0xe8, 0x71, 0x8b, 0xd0, 0xab, 0xf2, + 0xf4, 0xe6, 0x88, 0x09, 0x0a, 0xac, 0x56, 0xe8, 0x0d, 0x98, 0x0c, 0x49, 0x43, 0x59, 0xf3, 0xaf, + 0xc8, 0xb0, 0xdd, 0x1c, 0x31, 0x43, 0x86, 0xa1, 0x10, 0xf4, 0x08, 0xc6, 0x1d, 0xe2, 0x45, 0x7a, + 0x5c, 0x50, 0x25, 0xf4, 0xfe, 0xf0, 0x25, 0xf4, 0x31, 0xf1, 0x94, 0xba, 0x55, 0x57, 0xf8, 0x1d, + 0x73, 0xcc, 0x89, 0x96, 0xe8, 0x00, 0xe6, 0x1c, 0xe2, 0x79, 0xfd, 0xf6, 0x5e, 0x54, 0x72, 0x6e, + 0xbe, 0x90, 0x1c, 0xaf, 0xc7, 0x3f, 0xa1, 0xc0, 0x59, 0xa7, 0x7f, 0x3f, 0x21, 0x39, 0x2c, 0xeb, + 0x48, 0xf2, 0xfc, 0xcb, 0x49, 0x0e, 0x5b, 0xc5, 0x49, 0xc9, 0x89, 0x7d, 0xb4, 0x06, 0xf3, 0x2e, + 0x73, 0x37, 0x98, 0xbb, 0x47, 0x5d, 0xd9, 0x87, 0x49, 0x7b, 0x9b, 0x38, 0x61, 0x5f, 0x98, 0xcf, + 0xab, 0xca, 0x19, 0x78, 0x8e, 0x36, 0x60, 0xa6, 0xdb, 0xec, 0x23, 0x8d, 0x5f, 0x55, 0x11, 0xcf, + 0x9f, 0x88, 0xf8, 0xbd, 0x18, 0x67, 0x4e, 0x77, 0x49, 0x42, 0x26, 0x8f, 0xa0, 0x9b, 0x49, 0xbb, + 0x89, 0x82, 0x5a, 0xc0, 0xe9, 0xa1, 0x0b, 0x6a, 0x36, 0x66, 0x54, 0x8d, 0x0b, 0x2b, 0xff, 0x3b, + 0x0d, 0xb2, 0x51, 0x97, 0x47, 0x90, 0x71, 0x89, 0x43, 0xc3, 0x2e, 0x6f, 0xaa, 0x6f, 0x74, 0x01, + 0xb2, 0xc4, 0x61, 0x81, 0x2b, 0xe6, 0x53, 0xaa, 0xc2, 0xa3, 0x15, 0xba, 0x03, 0x29, 0xf6, 0x54, + 0x35, 0xd3, 0xe9, 0x72, 0xe5, 0x45, 0x7b, 0xb4, 0xbe, 0x49, 0xa9, 0xa7, 0x14, 0x4b, 0xb1, 0xa7, + 0x85, 0x45, 0x18, 0x8b, 0xd7, 0x68, 0x1c, 0x46, 0x3f, 0xa8, 0x7c, 0x74, 0xb7, 0x9a, 0x1b, 0x41, + 0x63, 0x90, 0xb9, 0x67, 0x7e, 0x52, 0xcd, 0x69, 0x79, 0x1b, 0xa6, 0x7a, 0x12, 0x13, 0xe5, 0x20, + 0xfd, 0x94, 0x76, 0x22, 0x7d, 0xe5, 0x27, 0x5a, 0x87, 0xd1, 0xd0, 0x3b, 0xa9, 0x17, 0x68, 0x37, + 0x21, 0xe9, 0x5a, 0xea, 0x9a, 0x96, 0xdf, 0x84, 0x0b, 0xa7, 0xe7, 0xe6, 0x29, 0x32, 0xcf, 0x27, + 0x65, 0x8e, 0x27, 0xb9, 0x7c, 0x2f, 0xe6, 0xd2, 0x9f, 0x67, 0xa7, 0x70, 0xd9, 0x4e, 0x72, 0x79, + 0x99, 0x7b, 0xef, 0x99, 0xfc, 0xb5, 0xcf, 0xb4, 0xe3, 0xca, 0x5f, 0x34, 0x68, 0x2e, 0xcd, 0x55, + 0x70, 0xcd, 0x16, 0x98, 0x35, 0xf0, 0xb3, 0xf1, 0xaa, 0xbc, 0xb5, 0xe5, 0x8a, 0x38, 0x65, 0x3b, + 0xb8, 0xce, 0x1c, 0xaf, 0x6d, 0xd7, 0x65, 0x72, 0xe0, 0x68, 0x7e, 0xc1, 0xa2, 0xe3, 0x51, 0x2c, + 0x18, 0xae, 0xb3, 0x3d, 0xea, 0x63, 0x87, 0xb8, 0x1d, 0xdc, 0xa0, 0x44, 0x04, 0x3e, 0xe5, 0x92, + 0xd7, 0x4e, 0x9c, 0xbb, 0x7f, 0xd5, 0xd4, 0xe5, 0xbd, 0x74, 0x1f, 0xae, 0x7c, 0x60, 0xbb, 0x16, + 0x66, 0x81, 0xc0, 0x0e, 0xf3, 0x29, 0x26, 0x35, 0xf9, 0x79, 0x62, 0x5a, 0xd1, 0x5b, 0x42, 0x78, + 0x7c, 0xcd, 0x30, 0x9a, 0xb6, 0x68, 0x05, 0x35, 0xbd, 0xce, 0x1c, 0x43, 0x9a, 0x5b, 0xa2, 0x75, + 0xc6, 0x3b, 0x5c, 0xd0, 0x68, 0x19, 0x59, 0xbf, 0x3e, 0x15, 0x37, 0x4d, 0x65, 0x5a, 0x21, 0x0f, + 0x99, 0x75, 0x66, 0x75, 0x4e, 0xcb, 0xd7, 0xc2, 0x23, 0x98, 0xf9, 0x38, 0xd4, 0xfe, 0x1b, 0xb6, + 0x68, 0x29, 0xd8, 0x34, 0xa4, 0xe2, 0xd1, 0xc5, 0x4c, 0xd9, 0x16, 0xba, 0x0e, 0x19, 0x8b, 0x08, + 0x12, 0x39, 0xfa, 0xcd, 0x33, 0x1d, 0x2d, 0x99, 0x98, 0x8a, 0x64, 0x09, 0xc3, 0x44, 0x22, 0x61, + 0x64, 0x6a, 0x3e, 0xac, 0x9a, 0xb7, 0x73, 0x23, 0xe8, 0x1c, 0xa4, 0x6f, 0x6f, 0x57, 0x73, 0x5a, + 0xf9, 0x0f, 0xe7, 0xe1, 0x62, 0xbf, 0xbd, 0x77, 0xa9, 0xbf, 0x67, 0xd7, 0x29, 0xfa, 0x34, 0x0d, + 0xd9, 0x0d, 0x5f, 0xd6, 0x1f, 0x5a, 0x19, 0x3a, 0xbc, 0xf9, 0xe1, 0x49, 0x0a, 0xbf, 0x4f, 0xfd, + 0xe8, 0x6f, 0xff, 0xfa, 0x55, 0xea, 0xb7, 0xa9, 0xc2, 0x6f, 0x52, 0xc6, 0xde, 0x4a, 0x3c, 0x6e, + 0x9f, 0x36, 0x6c, 0x1b, 0x87, 0x89, 0x21, 0xe9, 0xc8, 0x38, 0x4c, 0x4e, 0x44, 0x47, 0xc6, 0x61, + 0xe2, 0x26, 0x3c, 0x32, 0x38, 0xf5, 0x88, 0x4f, 0x04, 0xf3, 0x8d, 0xc3, 0xa0, 0xe7, 0xe0, 0x30, + 0x71, 0xa7, 0x1e, 0x19, 0x87, 0x3d, 0x17, 0x71, 0xbc, 0x4e, 0x9c, 0x3f, 0x9b, 0x51, 0x8e, 0x8c, + 0xc3, 0xe4, 0x85, 0xf2, 0x55, 0x2e, 0x7c, 0xcf, 0xa7, 0x0d, 0xfb, 0xc0, 0x58, 0x3a, 0x0a, 0x85, + 0x24, 0xc8, 0x78, 0x3f, 0x1f, 0xde, 0x2f, 0x88, 0xf7, 0x11, 0xf4, 0x2a, 0x39, 0xa8, 0x5b, 0x1f, + 0xa1, 0x4f, 0x35, 0x80, 0x30, 0x40, 0x2a, 0x71, 0xbe, 0x98, 0x20, 0x2d, 0xa9, 0x18, 0x5d, 0x29, + 0x2c, 0x9e, 0x11, 0xa1, 0x35, 0x6d, 0x09, 0x7d, 0x17, 0xb2, 0x1f, 0x31, 0xf6, 0x34, 0xf0, 0xd0, + 0x8c, 0x2e, 0x5f, 0x1a, 0xfa, 0x96, 0x15, 0x65, 0xfb, 0x8b, 0x48, 0xd6, 0x95, 0xe4, 0x22, 0xfa, + 0xd2, 0x99, 0xb9, 0x21, 0xab, 0xfb, 0x08, 0xfd, 0x44, 0x83, 0xec, 0x27, 0x9e, 0xf5, 0x82, 0xf9, + 0x3b, 0x60, 0xc8, 0x29, 0xac, 0x28, 0x2d, 0xde, 0xc9, 0x3f, 0xa7, 0x16, 0xd2, 0x0d, 0xbf, 0xd4, + 0x20, 0xbb, 0x49, 0xdb, 0x54, 0xd0, 0x93, 0x7e, 0x18, 0x24, 0xe6, 0xd1, 0x71, 0xe5, 0x9d, 0xda, + 0xdb, 0x30, 0x0d, 0x50, 0xf1, 0xec, 0x5b, 0xb4, 0x53, 0x09, 0x44, 0x0b, 0x8d, 0xc0, 0x45, 0xc8, + 0xde, 0x96, 0x9f, 0x65, 0x34, 0x05, 0x19, 0x9f, 0x12, 0x0b, 0x46, 0xf7, 0x7d, 0x5b, 0xd0, 0xd0, + 0x35, 0x4b, 0xcf, 0xeb, 0x9a, 0x7f, 0x6a, 0x30, 0x76, 0x83, 0x8a, 0x3b, 0x01, 0xf5, 0x3b, 0xff, + 0x4f, 0xe7, 0xfc, 0x42, 0x3b, 0xae, 0xdc, 0x2b, 0x6c, 0xc3, 0xc2, 0x69, 0x7d, 0xb5, 0x2b, 0x70, + 0xc8, 0x7e, 0xfa, 0x40, 0xab, 0x8d, 0x28, 0xfb, 0x74, 0xf4, 0xee, 0x59, 0xf6, 0x7d, 0x5b, 0x0a, + 0x88, 0xad, 0xfc, 0x2c, 0x0d, 0x99, 0x6a, 0xbd, 0xc5, 0x50, 0x71, 0x80, 0x85, 0x3c, 0xa8, 0xe9, + 0xe1, 0x8d, 0x19, 0x87, 0xe3, 0xb9, 0x91, 0x85, 0x7f, 0xa7, 0x8e, 0x2b, 0x3f, 0x4c, 0xc1, 0x24, + 0xad, 0xb7, 0x18, 0xe6, 0x61, 0xcb, 0x84, 0x31, 0xb5, 0xf2, 0xbd, 0x3a, 0x9a, 0xbd, 0x1b, 0x38, + 0x0e, 0xf1, 0x3b, 0x6b, 0xb8, 0x1a, 0x6d, 0xe5, 0x73, 0x9b, 0x94, 0xd7, 0x7d, 0x5b, 0xbd, 0x94, + 0xd5, 0x6e, 0x61, 0x13, 0x50, 0xaf, 0xa3, 0x94, 0xb6, 0x43, 0xba, 0xe7, 0xc3, 0xf7, 0x21, 0xfd, + 0xe5, 0xe5, 0xab, 0xe8, 0x1a, 0xbc, 0x67, 0x52, 0x11, 0xf8, 0x2e, 0xb5, 0xf0, 0x7e, 0x8b, 0xba, + 0x58, 0xb4, 0x28, 0xf6, 0x29, 0x67, 0x81, 0x5f, 0xa7, 0xd8, 0xe6, 0x58, 0x50, 0xc7, 0x63, 0x3e, + 0xf1, 0xed, 0x76, 0x07, 0x07, 0x2e, 0xd9, 0x23, 0x76, 0x9b, 0xd4, 0xda, 0x54, 0xff, 0xf0, 0x2b, + 0x90, 0x5e, 0x5d, 0x5e, 0x45, 0xab, 0xb0, 0xf4, 0x3f, 0x18, 0x58, 0x8c, 0x72, 0xec, 0x32, 0x81, + 0xe9, 0x81, 0xcd, 0x85, 0x8e, 0xb2, 0x90, 0xf9, 0x75, 0x4a, 0x4b, 0xab, 0xc0, 0x3c, 0x3e, 0x3b, + 0x30, 0xd2, 0x31, 0xc6, 0x61, 0xd8, 0xd3, 0x1e, 0x5e, 0x2a, 0xe4, 0x8c, 0xbd, 0x72, 0x17, 0x2f, + 0xcf, 0xd6, 0xc2, 0x39, 0xe0, 0x21, 0x42, 0x27, 0x8e, 0xd0, 0x1f, 0x35, 0x98, 0x94, 0xa3, 0xd6, + 0x0e, 0x11, 0x2d, 0xe5, 0xa1, 0x2f, 0xa6, 0xd3, 0xbd, 0xaf, 0x6c, 0xbb, 0x5e, 0x58, 0x3d, 0xb3, + 0xa8, 0x7a, 0x7e, 0xcb, 0xd0, 0xe5, 0xc5, 0xae, 0xea, 0xbe, 0x02, 0xb0, 0xcd, 0xd6, 0x6d, 0xd7, + 0xb2, 0xdd, 0x26, 0x47, 0x97, 0x4e, 0xd4, 0xcc, 0x66, 0xf4, 0xeb, 0xcd, 0xc0, 0x72, 0x1a, 0x41, + 0xf7, 0xe1, 0x9c, 0x9c, 0xb4, 0x59, 0x20, 0xd0, 0x00, 0xd0, 0x40, 0xe2, 0x57, 0x95, 0xfa, 0xaf, + 0xa0, 0xb9, 0xa4, 0x3f, 0x45, 0xc4, 0xac, 0x05, 0xb9, 0xaa, 0xef, 0x33, 0x5f, 0x4e, 0x1d, 0x9b, + 0x54, 0x10, 0xbb, 0xcd, 0x87, 0x16, 0x70, 0x45, 0x09, 0x78, 0x1d, 0x2d, 0xf4, 0x04, 0x4c, 0x72, + 0xdd, 0xb7, 0x45, 0xcb, 0x8a, 0xb8, 0xfe, 0x54, 0x03, 0x74, 0x83, 0x8a, 0xfe, 0x29, 0x67, 0xf9, + 0xcc, 0x78, 0xf4, 0x51, 0x0c, 0x54, 0xe3, 0x2d, 0xa5, 0xc6, 0xe5, 0xc2, 0xa5, 0xa4, 0x1a, 0x52, + 0x83, 0x1a, 0xb3, 0x3a, 0xc6, 0xa1, 0xec, 0xc1, 0x6a, 0x1a, 0x42, 0x3f, 0xd6, 0x60, 0x76, 0x87, + 0x71, 0x21, 0x39, 0x2a, 0x52, 0xa5, 0xc8, 0xf3, 0x0d, 0x54, 0x03, 0xa5, 0x1b, 0x4a, 0xfa, 0xdb, + 0x85, 0x2b, 0x49, 0xe9, 0x1e, 0xe3, 0x42, 0x6a, 0xa0, 0x1e, 0xcd, 0xa1, 0x1a, 0x71, 0x52, 0xe4, + 0xff, 0xac, 0x1d, 0x57, 0xfe, 0xa4, 0xa1, 0xc6, 0x80, 0xa9, 0x0b, 0x5b, 0x89, 0x26, 0x51, 0x2a, + 0xe1, 0xfd, 0x96, 0x5d, 0x6f, 0x61, 0xde, 0x62, 0x41, 0xdb, 0x52, 0xe5, 0x57, 0xa3, 0x38, 0xe0, + 0xd4, 0xc2, 0xb6, 0x8b, 0xbd, 0x36, 0xa9, 0x53, 0x39, 0xd9, 0xca, 0x42, 0xb5, 0x58, 0x3d, 0x70, + 0xa8, 0x1b, 0xfe, 0xf8, 0x26, 0xc7, 0x63, 0xb9, 0xb8, 0x9c, 0xbf, 0x03, 0x8b, 0xa7, 0xf5, 0x62, + 0x59, 0x46, 0xf1, 0x9c, 0x37, 0x64, 0xbf, 0x29, 0x3f, 0x81, 0xf3, 0x75, 0xe2, 0xd0, 0xf6, 0x06, + 0xe1, 0x34, 0xe2, 0x21, 0x87, 0x12, 0x64, 0xc2, 0x68, 0xf8, 0xf2, 0x1f, 0x36, 0x91, 0x2e, 0x29, + 0x1f, 0xce, 0xa1, 0xd9, 0x9e, 0x44, 0x92, 0x47, 0xe5, 0x6f, 0xc1, 0x42, 0xc5, 0x65, 0xa2, 0x45, + 0xfd, 0x48, 0x92, 0x0c, 0x5e, 0xa2, 0xa8, 0xbe, 0xd6, 0x53, 0x62, 0xc3, 0x0a, 0x1e, 0x59, 0xff, + 0x47, 0xf6, 0xb8, 0xf2, 0x79, 0x16, 0x09, 0x98, 0xab, 0xe0, 0xf5, 0xf0, 0xc9, 0x91, 0xe8, 0x00, + 0x0f, 0xe0, 0x7c, 0xd3, 0xdc, 0xd9, 0x28, 0xdd, 0x08, 0x2d, 0xc7, 0x9e, 0xcf, 0x9e, 0xd0, 0xba, + 0x18, 0xd6, 0x63, 0xf9, 0x9c, 0xcb, 0x5c, 0xfa, 0xf5, 0xc8, 0x32, 0x89, 0x2e, 0xa7, 0x57, 0xf4, + 0xe5, 0xa5, 0xb4, 0x96, 0xca, 0x94, 0x73, 0xc4, 0x0b, 0x1f, 0x32, 0x36, 0x73, 0x8d, 0x27, 0x9c, + 0xb9, 0xe5, 0x0b, 0xc9, 0x9d, 0x83, 0x52, 0x83, 0xb1, 0x92, 0x63, 0x3b, 0x74, 0xed, 0x04, 0x72, + 0x6d, 0x00, 0xd2, 0xdc, 0x91, 0x0d, 0xfd, 0x2a, 0xda, 0x82, 0x1b, 0x27, 0x1b, 0x7a, 0xc0, 0xa9, + 0xff, 0xac, 0x99, 0xb7, 0xc8, 0x1e, 0xc5, 0x1e, 0xf5, 0x1d, 0x9b, 0x73, 0x99, 0x37, 0x82, 0x61, + 0x52, 0xaf, 0x53, 0xce, 0x7b, 0x9a, 0xbf, 0x6e, 0xbe, 0xc4, 0x15, 0x71, 0xce, 0xbc, 0x09, 0xe9, + 0xd5, 0x95, 0x6b, 0xa8, 0x02, 0x53, 0x5b, 0x6f, 0x39, 0x98, 0x60, 0x41, 0x89, 0xc7, 0x84, 0x8e, + 0x96, 0x41, 0xcf, 0x0f, 0xf5, 0xe4, 0x7d, 0xf8, 0xb3, 0x14, 0xcc, 0xc0, 0xf8, 0x3a, 0xe1, 0x76, + 0x5d, 0x0d, 0x44, 0xa9, 0x31, 0x0d, 0x5e, 0xeb, 0x19, 0x91, 0x66, 0xc6, 0x52, 0xf9, 0xf1, 0x07, + 0xa5, 0xca, 0xce, 0x56, 0xe9, 0x16, 0xed, 0xe0, 0x14, 0xfc, 0x5d, 0xeb, 0x8e, 0x4c, 0x9f, 0x6b, + 0x63, 0xe9, 0x62, 0xa6, 0xfc, 0x46, 0x1c, 0xbd, 0x44, 0x40, 0x0c, 0x46, 0x02, 0xd1, 0x32, 0xe4, + 0x1f, 0xe6, 0xdb, 0xdf, 0xa1, 0x6b, 0x8b, 0x83, 0x41, 0x82, 0x3d, 0xa5, 0xee, 0xfa, 0xf7, 0x21, + 0x1f, 0x4e, 0x60, 0x08, 0xdd, 0xf0, 0x89, 0x2b, 0x38, 0x96, 0x8b, 0xc8, 0x7b, 0xb0, 0x10, 0xcd, + 0x65, 0x68, 0x2e, 0x3a, 0x54, 0xab, 0xf8, 0x74, 0x03, 0x46, 0x89, 0xe5, 0xd8, 0x2e, 0x5a, 0xeb, + 0x21, 0x75, 0xad, 0x1e, 0x98, 0x0a, 0x86, 0x84, 0xd9, 0x5c, 0xc8, 0x8b, 0x62, 0x8f, 0x62, 0xdb, + 0x6d, 0x30, 0xdf, 0x51, 0xf1, 0xae, 0x2d, 0xc2, 0x54, 0xd2, 0x15, 0x23, 0xfd, 0xb3, 0x62, 0xed, + 0xed, 0x81, 0xd3, 0x62, 0x3f, 0xd4, 0xdf, 0x82, 0x8b, 0x1f, 0x3f, 0x6b, 0x0e, 0xc9, 0x9c, 0x1f, + 0x36, 0xd7, 0x1f, 0x8e, 0x77, 0x23, 0x57, 0xcb, 0xaa, 0x72, 0xbb, 0xfa, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x69, 0x92, 0x48, 0xf9, 0x47, 0x19, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 3ee84c9bf0b..29ef445d5f7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -156,7 +156,7 @@ message ABitOfEverything { } Nested single_nested = 25; - string uuid = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"}]; + string uuid = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", min_length: 1}]; repeated Nested nested = 2; float float_value = 3; double double_value = 4; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 0968e2d4de6..4e33b7ea27f 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1002,6 +1002,7 @@ }, "uuid": { "type": "string", + "minLength": 1, "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, "nested": { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index d34e0bbf270..b6480b43e3a 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -205,19 +205,19 @@ type swaggerSchemaObject struct { ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` - MultipleOf float64 `json:"multiple_of,omitempty"` + MultipleOf float64 `json:"multipleOf,omitempty"` Maximum float64 `json:"maximum,omitempty"` - ExclusiveMaximum bool `json:"exclusive_maximum,omitempty"` + ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` Minimum float64 `json:"minimum,omitempty"` - ExclusiveMinimum bool `json:"exclusive_minimum,omitempty"` - MaxLength uint64 `json:"max_length,omitempty"` - MinLength uint64 `json:"min_length,omitempty"` + ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty"` + MaxLength uint64 `json:"maxLength,omitempty"` + MinLength uint64 `json:"minLength,omitempty"` Pattern string `json:"pattern,omitempty"` - MaxItems uint64 `json:"max_items,omitempty"` - MinItems uint64 `json:"min_items,omitempty"` - UniqueItems bool `json:"unique_items,omitempty"` - MaxProperties uint64 `json:"max_properties,omitempty"` - MinProperties uint64 `json:"min_properties,omitempty"` + MaxItems uint64 `json:"maxItems,omitempty"` + MinItems uint64 `json:"minItems,omitempty"` + UniqueItems bool `json:"uniqueItems,omitempty"` + MaxProperties uint64 `json:"maxProperties,omitempty"` + MinProperties uint64 `json:"minProperties,omitempty"` Required []string `json:"required,omitempty"` } From fa45a213aefadac8eb859fcd46c333b4986abd81 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 15 Aug 2018 10:30:08 +0100 Subject: [PATCH 0028/1518] Lock versions to tags where possible Using an exact revisions in `Gopkg.toml` prevents `dep` from detecting equivalence between constraints in the case where one dependency depends on, for example, golang/protobuf v1.1.0 and another depends on the revision that is tagged with that version. Using tagged versions should help with this. --- Gopkg.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gopkg.toml b/Gopkg.toml index c72ed54da1d..539982e325f 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -33,7 +33,7 @@ required = [ [[constraint]] # Also defined in bazelbuild/rules_go # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L75 - revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" + version = "1.1.0" name = "github.com/golang/protobuf" [[constraint]] @@ -45,7 +45,7 @@ required = [ [[constraint]] # Also defined in bazelbuild/rules_go # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L123 - revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" + version = "1.10.3" name = "google.golang.org/grpc" [[constraint]] From de0b679b7b2e83123304a21180e92b10b52f4f7c Mon Sep 17 00:00:00 2001 From: ch3rub1m Date: Fri, 20 Jul 2018 23:55:22 +0800 Subject: [PATCH 0029/1518] add support for resource name in swagger plugin (#702) --- protoc-gen-swagger/genswagger/template.go | 15 ++++++++++++++- protoc-gen-swagger/genswagger/template_test.go | 5 +++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 005a3474f61..99170d72dab 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -525,7 +525,7 @@ func templateToSwaggerPath(path string) string { } // Pop from the stack depth-- - buffer += "}" + buffer += string(char) case '/': if depth == 0 { parts = append(parts, buffer) @@ -534,6 +534,7 @@ func templateToSwaggerPath(path string) string { // section. continue } + buffer += string(char) default: buffer += string(char) break @@ -548,12 +549,24 @@ func templateToSwaggerPath(path string) string { // memory. re := regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") for index, part := range parts { + // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. + prefix := re.ReplaceAllString(part, "$1") + if isResourceName(prefix) { + continue + } parts[index] = re.ReplaceAllString(part, "{$1}") } return strings.Join(parts, "/") } +func isResourceName(prefix string) bool { + words := strings.Split(prefix, ".") + l := len(words) + field := words[l-1] + return field == "parent" || field == "name" +} + func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index f0ecd1e370d..67f449432d6 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -697,6 +697,11 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, + {"/{name=prefix/*}", "/{name=prefix/*}"}, + {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1/*/prefix2/*}"}, + {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, + {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, + {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, } for _, data := range tests { From e679739db1dec33f243ca6cd7a4f05909a801fe1 Mon Sep 17 00:00:00 2001 From: Dmitry Doroginin Date: Fri, 27 Jul 2018 15:08:50 +0300 Subject: [PATCH 0030/1518] Add supporting `response_body` field in the `google.api.HttpRule` (#712) Also: * add flag `allow_repeated_fields_in_body` in `protoc-gen-grpc-gateway` * add flag `json_names_for_fields` in `protoc-gen-swagger` --- Gopkg.lock | 2 +- Gopkg.toml | 11 +- Makefile | 23 +- WORKSPACE | 31 ++- examples/clients/responsebody/.gitignore | 24 ++ .../responsebody/.swagger-codegen-ignore | 23 ++ examples/clients/responsebody/api_client.go | 164 ++++++++++++ examples/clients/responsebody/api_response.go | 44 ++++ .../clients/responsebody/configuration.go | 67 +++++ .../docs/ExamplepbResponseBodyMessage.md | 11 + .../ExamplepbResponseBodyMessageResponse.md | 10 + .../docs/ExamplepbResponseBodyOut.md | 10 + .../docs/ExamplepbResponseBodyOutResponse.md | 10 + .../docs/ExamplepbResponseBodyReq.md | 10 + .../docs/ResponseBodyServiceApi.md | 36 +++ .../examplepb_response_body_message.go | 18 ++ ...xamplepb_response_body_message_response.go | 16 ++ .../examplepb_response_body_out.go | 16 ++ .../examplepb_response_body_out_response.go | 16 ++ .../examplepb_response_body_req.go | 16 ++ .../responsebody/response_body_service_api.go | 99 +++++++ examples/gateway/gateway.go | 1 + examples/integration/integration_test.go | 35 ++- examples/proto/examplepb/BUILD.bazel | 2 + .../examplepb/response_body_service.pb.go | 242 ++++++++++++++++++ .../examplepb/response_body_service.pb.gw.go | 143 +++++++++++ .../examplepb/response_body_service.proto | 26 ++ .../response_body_service.swagger.json | 61 +++++ examples/server/BUILD.bazel | 1 + examples/server/main.go | 1 + examples/server/responsebody.go | 23 ++ .../descriptor/registry.go | 30 +++ .../descriptor/services.go | 20 +- protoc-gen-grpc-gateway/descriptor/types.go | 11 +- .../gengateway/template.go | 19 ++ protoc-gen-grpc-gateway/main.go | 16 +- protoc-gen-swagger/genswagger/template.go | 32 ++- protoc-gen-swagger/main.go | 14 +- repositories.bzl | 4 +- runtime/handler.go | 15 +- runtime/mux.go | 1 - third_party/googleapis/README.grpc-gateway | 2 +- third_party/googleapis/google/api/http.proto | 77 ++++-- 43 files changed, 1356 insertions(+), 77 deletions(-) create mode 100644 examples/clients/responsebody/.gitignore create mode 100644 examples/clients/responsebody/.swagger-codegen-ignore create mode 100644 examples/clients/responsebody/api_client.go create mode 100644 examples/clients/responsebody/api_response.go create mode 100644 examples/clients/responsebody/configuration.go create mode 100644 examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md create mode 100644 examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md create mode 100644 examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md create mode 100644 examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md create mode 100644 examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md create mode 100644 examples/clients/responsebody/docs/ResponseBodyServiceApi.md create mode 100644 examples/clients/responsebody/examplepb_response_body_message.go create mode 100644 examples/clients/responsebody/examplepb_response_body_message_response.go create mode 100644 examples/clients/responsebody/examplepb_response_body_out.go create mode 100644 examples/clients/responsebody/examplepb_response_body_out_response.go create mode 100644 examples/clients/responsebody/examplepb_response_body_req.go create mode 100644 examples/clients/responsebody/response_body_service_api.go create mode 100644 examples/proto/examplepb/response_body_service.pb.go create mode 100644 examples/proto/examplepb/response_body_service.pb.gw.go create mode 100644 examples/proto/examplepb/response_body_service.proto create mode 100644 examples/proto/examplepb/response_body_service.swagger.json create mode 100644 examples/server/responsebody.go diff --git a/Gopkg.lock b/Gopkg.lock index 041bf73d54a..94cc9cc5d11 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -85,7 +85,7 @@ "googleapis/rpc/status", "protobuf/field_mask" ] - revision = "86e600f69ee4704c6efbf6a2a40a5c10700e76c2" + revision = "383e8b2c3b9e36c4076b235b32537292176bae20" [[projects]] name = "google.golang.org/grpc" diff --git a/Gopkg.toml b/Gopkg.toml index 539982e325f..cf3660628ae 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -23,6 +23,11 @@ required = [ revision = "6724a57986aff9bff1a1770e9347036def7c89f6" name = "github.com/rogpeppe/fastuuid" +[[constraint]] + # Also defined in WORKSPACE + revision = "383e8b2c3b9e36c4076b235b32537292176bae20" + name = "google.golang.org/genproto" + [[override]] # Also defined in WORKSPACE revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" @@ -48,12 +53,6 @@ required = [ version = "1.10.3" name = "google.golang.org/grpc" -[[constraint]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L131 - revision = "86e600f69ee4704c6efbf6a2a40a5c10700e76c2" - name = "google.golang.org/genproto" - [[constraint]] # Also defined in bazelbuild/rules_go # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L138 diff --git a/Makefile b/Makefile index ac1235ef267..14f1d673442 100644 --- a/Makefile +++ b/Makefile @@ -63,13 +63,17 @@ endif SWAGGER_EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/a_bit_of_everything.proto \ examples/proto/examplepb/wrappers.proto \ - examples/proto/examplepb/unannotated_echo_service.proto + examples/proto/examplepb/unannotated_echo_service.proto \ + examples/proto/examplepb/response_body_service.proto + EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/a_bit_of_everything.proto \ examples/proto/examplepb/stream.proto \ examples/proto/examplepb/flow_combination.proto \ examples/proto/examplepb/wrappers.proto \ - examples/proto/examplepb/unannotated_echo_service.proto + examples/proto/examplepb/unannotated_echo_service.proto \ + examples/proto/examplepb/response_body_service.proto + EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) @@ -105,7 +109,14 @@ UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_client.g $(EXAMPLE_CLIENT_DIR)/unannotatedecho/configuration.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/examplepb_unannotated_simple_message.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/unannotated_echo_service_api.go -EXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) +RESPONSE_BODY_EXAMPLE_SPEC=examples/proto/examplepb/response_body_service.swagger.json +RESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/api_client.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/api_response.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/configuration.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/examplepb_response_body.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/response_body_service_api.go + +EXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) SWAGGER_CODEGEN=swagger-codegen PROTOC_INC_PATH=$(dir $(shell which protoc))/../include @@ -164,6 +175,12 @@ $(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC) @rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/.travis.yml +$(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) + $(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \ + -l go -o examples/clients/responsebody --additional-properties packageName=responsebody + @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ + $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh \ + $(EXAMPLE_CLIENT_DIR)/responsebody/.travis.yml examples: $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_DEPSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) test: examples diff --git a/WORKSPACE b/WORKSPACE index 2984db657d8..bf8cb212f33 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -12,42 +12,51 @@ http_archive( sha256 = "d03625db67e9fb0905bbd206fa97e32ae9da894fe234a493e7517fd25faec914", ) +load("@io_bazel_rules_go//go:def.bzl", "go_repository") +load("//:repositories.bzl", "repositories") load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains") -go_rules_dependencies() - -go_register_toolchains() - -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") - -gazelle_dependencies() - -load("@io_bazel_rules_go//go:def.bzl", "go_repository") +# Also define in Gopkg.toml +go_repository( + name = "org_golang_google_genproto", + commit = "383e8b2c3b9e36c4076b235b32537292176bae20", + importpath = "google.golang.org/genproto", +) +# Also define in Gopkg.toml go_repository( name = "com_github_rogpeppe_fastuuid", commit = "6724a57986aff9bff1a1770e9347036def7c89f6", importpath = "github.com/rogpeppe/fastuuid", ) +# Also define in Gopkg.toml go_repository( name = "com_github_go_resty_resty", commit = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e", importpath = "github.com/go-resty/resty", ) +# Also define in Gopkg.toml go_repository( name = "com_github_ghodss_yaml", commit = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7", importpath = "github.com/ghodss/yaml", ) +# Also define in Gopkg.toml go_repository( name = "in_gopkg_yaml_v2", commit = "eb3733d160e74a9c7e442f435eb3bea458e1d19f", importpath = "gopkg.in/yaml.v2", ) -load("//:repositories.bzl", "repositories") - repositories() + +go_rules_dependencies() + +go_register_toolchains() + +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") + +gazelle_dependencies() diff --git a/examples/clients/responsebody/.gitignore b/examples/clients/responsebody/.gitignore new file mode 100644 index 00000000000..daf913b1b34 --- /dev/null +++ b/examples/clients/responsebody/.gitignore @@ -0,0 +1,24 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test +*.prof diff --git a/examples/clients/responsebody/.swagger-codegen-ignore b/examples/clients/responsebody/.swagger-codegen-ignore new file mode 100644 index 00000000000..c5fa491b4c5 --- /dev/null +++ b/examples/clients/responsebody/.swagger-codegen-ignore @@ -0,0 +1,23 @@ +# Swagger Codegen Ignore +# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/examples/clients/responsebody/api_client.go b/examples/clients/responsebody/api_client.go new file mode 100644 index 00000000000..1f7354b61dc --- /dev/null +++ b/examples/clients/responsebody/api_client.go @@ -0,0 +1,164 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +import ( + "bytes" + "fmt" + "path/filepath" + "reflect" + "strings" + "net/url" + "io/ioutil" + "github.com/go-resty/resty" +) + +type APIClient struct { + config *Configuration +} + +func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { + + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +func (c *APIClient) SelectHeaderAccept(accepts []string) string { + + if len(accepts) == 0 { + return "" + } + if contains(accepts, "application/json") { + return "application/json" + } + return strings.Join(accepts, ",") +} + +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +func (c *APIClient) CallAPI(path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams map[string]string, + fileName string, + fileBytes []byte) (*resty.Response, error) { + + rClient := c.prepareClient() + request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) + + switch strings.ToUpper(method) { + case "GET": + response, err := request.Get(path) + return response, err + case "POST": + response, err := request.Post(path) + return response, err + case "PUT": + response, err := request.Put(path) + return response, err + case "PATCH": + response, err := request.Patch(path) + return response, err + case "DELETE": + response, err := request.Delete(path) + return response, err + } + + return nil, fmt.Errorf("invalid method %v", method) +} + +func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { + delimiter := "" + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return fmt.Sprintf("%v", obj) +} + +func (c *APIClient) prepareClient() *resty.Client { + + rClient := resty.New() + + rClient.SetDebug(c.config.Debug) + if c.config.Transport != nil { + rClient.SetTransport(c.config.Transport) + } + + if c.config.Timeout != nil { + rClient.SetTimeout(*c.config.Timeout) + } + rClient.SetLogger(ioutil.Discard) + return rClient +} + +func (c *APIClient) prepareRequest( + rClient *resty.Client, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams map[string]string, + fileName string, + fileBytes []byte) *resty.Request { + + + request := rClient.R() + request.SetBody(postBody) + + if c.config.UserAgent != "" { + request.SetHeader("User-Agent", c.config.UserAgent) + } + + // add header parameter, if any + if len(headerParams) > 0 { + request.SetHeaders(headerParams) + } + + // add query parameter, if any + if len(queryParams) > 0 { + request.SetMultiValueQueryParams(queryParams) + } + + // add form parameter, if any + if len(formParams) > 0 { + request.SetFormData(formParams) + } + + if len(fileBytes) > 0 && fileName != "" { + _, fileNm := filepath.Split(fileName) + request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) + } + return request +} diff --git a/examples/clients/responsebody/api_response.go b/examples/clients/responsebody/api_response.go new file mode 100644 index 00000000000..225d12176b3 --- /dev/null +++ b/examples/clients/responsebody/api_response.go @@ -0,0 +1,44 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +import ( + "net/http" +) + +type APIResponse struct { + *http.Response `json:"-"` + Message string `json:"message,omitempty"` + // Operation is the name of the swagger operation. + Operation string `json:"operation,omitempty"` + // RequestURL is the request URL. This value is always available, even if the + // embedded *http.Response is nil. + RequestURL string `json:"url,omitempty"` + // Method is the HTTP method used for the request. This value is always + // available, even if the embedded *http.Response is nil. + Method string `json:"method,omitempty"` + // Payload holds the contents of the response body (which may be nil or empty). + // This is provided here as the raw response.Body() reader will have already + // been drained. + Payload []byte `json:"-"` +} + +func NewAPIResponse(r *http.Response) *APIResponse { + + response := &APIResponse{Response: r} + return response +} + +func NewAPIResponseWithError(errorMessage string) *APIResponse { + + response := &APIResponse{Message: errorMessage} + return response +} diff --git a/examples/clients/responsebody/configuration.go b/examples/clients/responsebody/configuration.go new file mode 100644 index 00000000000..0ffa917b424 --- /dev/null +++ b/examples/clients/responsebody/configuration.go @@ -0,0 +1,67 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +import ( + "encoding/base64" + "net/http" + "time" +) + + +type Configuration struct { + Username string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` + APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` + APIKey map[string]string `json:"APIKey,omitempty"` + Debug bool `json:"debug,omitempty"` + DebugFile string `json:"debugFile,omitempty"` + OAuthToken string `json:"oAuthToken,omitempty"` + BasePath string `json:"basePath,omitempty"` + Host string `json:"host,omitempty"` + Scheme string `json:"scheme,omitempty"` + AccessToken string `json:"accessToken,omitempty"` + DefaultHeader map[string]string `json:"defaultHeader,omitempty"` + UserAgent string `json:"userAgent,omitempty"` + APIClient *APIClient + Transport *http.Transport + Timeout *time.Duration `json:"timeout,omitempty"` +} + +func NewConfiguration() *Configuration { + cfg := &Configuration{ + BasePath: "http://localhost", + DefaultHeader: make(map[string]string), + APIKey: make(map[string]string), + APIKeyPrefix: make(map[string]string), + UserAgent: "Swagger-Codegen/1.0.0/go", + APIClient: &APIClient{}, + } + + cfg.APIClient.config = cfg + return cfg +} + +func (c *Configuration) GetBasicAuthEncodedString() string { + return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) +} + +func (c *Configuration) AddDefaultHeader(key string, value string) { + c.DefaultHeader[key] = value +} + +func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { + if c.APIKeyPrefix[APIKeyIdentifier] != "" { + return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] + } + + return c.APIKey[APIKeyIdentifier] +} diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md new file mode 100644 index 00000000000..5b7749a7be1 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md @@ -0,0 +1,11 @@ +# ExamplepbResponseBodyMessage + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Request** | **string** | | [optional] [default to null] +**Response** | [**ExamplepbResponseBodyMessageResponse**](examplepbResponseBodyMessageResponse.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md new file mode 100644 index 00000000000..d0990f90fb0 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md @@ -0,0 +1,10 @@ +# ExamplepbResponseBodyMessageResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Data** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md new file mode 100644 index 00000000000..a26ce7530d0 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md @@ -0,0 +1,10 @@ +# ExamplepbResponseBodyOut + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Response** | [**ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md new file mode 100644 index 00000000000..aff3fe461e4 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md @@ -0,0 +1,10 @@ +# ExamplepbResponseBodyOutResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Data** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md new file mode 100644 index 00000000000..84c87bf9a84 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md @@ -0,0 +1,10 @@ +# ExamplepbResponseBodyReq + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Data** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md new file mode 100644 index 00000000000..7c4506cc991 --- /dev/null +++ b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -0,0 +1,36 @@ +# \ResponseBodyServiceApi + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**GetResponseBody**](ResponseBodyServiceApi.md#GetResponseBody) | **Get** /responsebody/{data} | + + +# **GetResponseBody** +> ExamplepbResponseBodyOutResponse GetResponseBody($data) + + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data** | **string**| | + +### Return type + +[**ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/examples/clients/responsebody/examplepb_response_body_message.go b/examples/clients/responsebody/examplepb_response_body_message.go new file mode 100644 index 00000000000..6dfcea3835c --- /dev/null +++ b/examples/clients/responsebody/examplepb_response_body_message.go @@ -0,0 +1,18 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbResponseBodyMessage struct { + + Request string `json:"request,omitempty"` + + Response ExamplepbResponseBodyMessageResponse `json:"response,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_response_body_message_response.go b/examples/clients/responsebody/examplepb_response_body_message_response.go new file mode 100644 index 00000000000..436f1dff6cb --- /dev/null +++ b/examples/clients/responsebody/examplepb_response_body_message_response.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbResponseBodyMessageResponse struct { + + Data string `json:"data,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_response_body_out.go b/examples/clients/responsebody/examplepb_response_body_out.go new file mode 100644 index 00000000000..72fae8bd52a --- /dev/null +++ b/examples/clients/responsebody/examplepb_response_body_out.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbResponseBodyOut struct { + + Response ExamplepbResponseBodyOutResponse `json:"response,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_response_body_out_response.go b/examples/clients/responsebody/examplepb_response_body_out_response.go new file mode 100644 index 00000000000..ca14fa3e6a1 --- /dev/null +++ b/examples/clients/responsebody/examplepb_response_body_out_response.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbResponseBodyOutResponse struct { + + Data string `json:"data,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_response_body_req.go b/examples/clients/responsebody/examplepb_response_body_req.go new file mode 100644 index 00000000000..5d9a56d9546 --- /dev/null +++ b/examples/clients/responsebody/examplepb_response_body_req.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbResponseBodyReq struct { + + Data string `json:"data,omitempty"` +} diff --git a/examples/clients/responsebody/response_body_service_api.go b/examples/clients/responsebody/response_body_service_api.go new file mode 100644 index 00000000000..15fa4e5bb63 --- /dev/null +++ b/examples/clients/responsebody/response_body_service_api.go @@ -0,0 +1,99 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +import ( + "net/url" + "strings" + "encoding/json" + "fmt" +) + +type ResponseBodyServiceApi struct { + Configuration *Configuration +} + +func NewResponseBodyServiceApi() *ResponseBodyServiceApi { + configuration := NewConfiguration() + return &ResponseBodyServiceApi{ + Configuration: configuration, + } +} + +func NewResponseBodyServiceApiWithBasePath(basePath string) *ResponseBodyServiceApi { + configuration := NewConfiguration() + configuration.BasePath = basePath + + return &ResponseBodyServiceApi{ + Configuration: configuration, + } +} + +/** + * + * + * @param data + * @return *ExamplepbResponseBodyOutResponse + */ +func (a ResponseBodyServiceApi) GetResponseBody(data string) (*ExamplepbResponseBodyOutResponse, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/responsebody/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new(ExamplepbResponseBodyOutResponse) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "GetResponseBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + diff --git a/examples/gateway/gateway.go b/examples/gateway/gateway.go index ffdbe2ca246..297ebe63d8b 100644 --- a/examples/gateway/gateway.go +++ b/examples/gateway/gateway.go @@ -22,6 +22,7 @@ func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.Ser examplepb.RegisterStreamServiceHandler, examplepb.RegisterABitOfEverythingServiceHandler, examplepb.RegisterFlowCombinationHandler, + examplepb.RegisterResponseBodyServiceHandler, } { if err := f(ctx, mux, conn); err != nil { return nil, err diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 0c2885c4557..de4e8bb0ad8 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -18,7 +18,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" gw "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc/codes" ) @@ -980,3 +980,36 @@ func TestInvalidArgument(t *testing.T) { t.Logf("%s", buf) } } + +func TestResponseBody(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + + testResponseBody(t, 8080) +} + +func testResponseBody(t *testing.T, port int) { + url := fmt.Sprintf("http://localhost:%d/responsebody/foo", port) + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + if got, want := string(buf), `{"data":"foo"}`; got != want { + t.Errorf("response = %q; want %q", got, want) + } +} diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 066ccd467a9..09b77d200ab 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -9,6 +9,7 @@ package(default_visibility = ["//visibility:public"]) # gazelle:exclude flow_combination.pb.gw.go # gazelle:exclude stream.pb.gw.go # gazelle:exclude wrappers.pb.gw.go +# gazelle:exclude response_body_service.pb.gw.go proto_library( name = "examplepb_proto", @@ -19,6 +20,7 @@ proto_library( "stream.proto", "unannotated_echo_service.proto", "wrappers.proto", + "response_body_service.proto", ], deps = [ "//examples/proto/sub:sub_proto", diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go new file mode 100644 index 00000000000..fcad76e5898 --- /dev/null +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -0,0 +1,242 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: examples/proto/examplepb/response_body_service.proto + +package examplepb + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type ResponseBodyIn struct { + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } +func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } +func (*ResponseBodyIn) ProtoMessage() {} +func (*ResponseBodyIn) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{0} +} +func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) +} +func (m *ResponseBodyIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponseBodyIn.Marshal(b, m, deterministic) +} +func (dst *ResponseBodyIn) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyIn.Merge(dst, src) +} +func (m *ResponseBodyIn) XXX_Size() int { + return xxx_messageInfo_ResponseBodyIn.Size(m) +} +func (m *ResponseBodyIn) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBodyIn.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBodyIn proto.InternalMessageInfo + +func (m *ResponseBodyIn) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +type ResponseBodyOut struct { + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } +func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } +func (*ResponseBodyOut) ProtoMessage() {} +func (*ResponseBodyOut) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{1} +} +func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) +} +func (m *ResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponseBodyOut.Marshal(b, m, deterministic) +} +func (dst *ResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut.Merge(dst, src) +} +func (m *ResponseBodyOut) XXX_Size() int { + return xxx_messageInfo_ResponseBodyOut.Size(m) +} +func (m *ResponseBodyOut) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBodyOut.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBodyOut proto.InternalMessageInfo + +func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { + if m != nil { + return m.Response + } + return nil +} + +type ResponseBodyOut_Response struct { + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Response{} } +func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } +func (*ResponseBodyOut_Response) ProtoMessage() {} +func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{1, 0} +} +func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) +} +func (m *ResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponseBodyOut_Response.Marshal(b, m, deterministic) +} +func (dst *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut_Response.Merge(dst, src) +} +func (m *ResponseBodyOut_Response) XXX_Size() int { + return xxx_messageInfo_ResponseBodyOut_Response.Size(m) +} +func (m *ResponseBodyOut_Response) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBodyOut_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBodyOut_Response proto.InternalMessageInfo + +func (m *ResponseBodyOut_Response) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +func init() { + proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.examplepb.ResponseBodyIn") + proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut") + proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut.Response") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// ResponseBodyServiceClient is the client API for ResponseBodyService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ResponseBodyServiceClient interface { + GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) +} + +type responseBodyServiceClient struct { + cc *grpc.ClientConn +} + +func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient { + return &responseBodyServiceClient{cc} +} + +func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) { + out := new(ResponseBodyOut) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ResponseBodyServiceServer is the server API for ResponseBodyService service. +type ResponseBodyServiceServer interface { + GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) +} + +func RegisterResponseBodyServiceServer(s *grpc.Server, srv ResponseBodyServiceServer) { + s.RegisterService(&_ResponseBodyService_serviceDesc, srv) +} + +func _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResponseBodyIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ResponseBodyServiceServer).GetResponseBody(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ResponseBodyServiceServer).GetResponseBody(ctx, req.(*ResponseBodyIn)) + } + return interceptor(ctx, in, info, handler) +} + +var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.examplepb.ResponseBodyService", + HandlerType: (*ResponseBodyServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetResponseBody", + Handler: _ResponseBodyService_GetResponseBody_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/proto/examplepb/response_body_service.proto", +} + +func init() { + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_5010ebf28bf7b965) +} + +var fileDescriptor_response_body_service_5010ebf28bf7b965 = []byte{ + // 257 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, + 0x8b, 0x52, 0x8b, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0xe3, 0x93, 0xf2, 0x53, 0x2a, 0xe3, 0x8b, 0x53, + 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0xc0, 0xaa, 0x84, 0xe4, 0xd3, 0x8b, 0x0a, 0x92, 0xf5, 0xd2, + 0x13, 0x4b, 0x52, 0xcb, 0x13, 0x2b, 0xf5, 0x60, 0x46, 0xe8, 0xc1, 0x35, 0x4b, 0xc9, 0xa4, 0xe7, + 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x27, 0x16, 0x64, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, + 0x64, 0xe6, 0xe7, 0x15, 0x43, 0xb4, 0x2b, 0xa9, 0x70, 0xf1, 0x05, 0x41, 0x4d, 0x77, 0xca, 0x4f, + 0xa9, 0xf4, 0xcc, 0x13, 0x12, 0xe2, 0x62, 0x49, 0x49, 0x2c, 0x49, 0x94, 0x60, 0x54, 0x60, 0xd4, + 0xe0, 0x0c, 0x02, 0xb3, 0x95, 0x3a, 0x18, 0xb9, 0xf8, 0x91, 0x95, 0xf9, 0x97, 0x96, 0x08, 0x85, + 0x72, 0x71, 0xc0, 0xdc, 0x25, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x6d, 0x64, 0xa9, 0x47, 0xc0, 0x2d, + 0x7a, 0x68, 0x66, 0xc0, 0xf9, 0x41, 0x70, 0xa3, 0xa4, 0xe4, 0xb8, 0x38, 0x60, 0xa2, 0xd8, 0x9c, + 0x62, 0xb4, 0x85, 0x91, 0x4b, 0x18, 0xd9, 0x98, 0x60, 0x48, 0x68, 0x08, 0xcd, 0x61, 0xe4, 0xe2, + 0x77, 0x4f, 0x2d, 0x41, 0x96, 0x12, 0xd2, 0x27, 0xc9, 0x41, 0x9e, 0x79, 0x52, 0x06, 0xa4, 0xfa, + 0x40, 0x49, 0xad, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x0a, 0x42, 0x22, 0xf0, 0x48, 0x02, 0xc5, 0x91, + 0x7e, 0x35, 0xc8, 0xad, 0xb5, 0x49, 0x70, 0x6f, 0x39, 0x71, 0x47, 0x71, 0xc2, 0x0d, 0x49, 0x62, + 0x03, 0x87, 0xbd, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x4a, 0x08, 0x5b, 0xf2, 0x01, 0x00, + 0x00, +} diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go new file mode 100644 index 00000000000..ac15844a045 --- /dev/null +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -0,0 +1,143 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/proto/examplepb/response_body_service.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray + +func request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := client.GetResponseBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +// RegisterResponseBodyServiceHandlerFromEndpoint is same as RegisterResponseBodyServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterResponseBodyServiceHandler(ctx, mux, conn) +} + +// RegisterResponseBodyServiceHandler registers the http handlers for service ResponseBodyService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterResponseBodyServiceHandlerClient(ctx, mux, NewResponseBodyServiceClient(conn)) +} + +// RegisterResponseBodyServiceHandlerClient registers the http handlers for service ResponseBodyService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ResponseBodyServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ResponseBodyServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ResponseBodyServiceClient" to call the correct interceptors. +func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ResponseBodyServiceClient) error { + + mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ResponseBodyService_GetResponseBody_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_GetResponseBody_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +type response_ResponseBodyService_GetResponseBody_0 struct { + proto.Message +} + +func (m response_ResponseBodyService_GetResponseBody_0) XXX_ResponseBody() interface{} { + response := m.Message.(*ResponseBodyOut) + return response.Response +} + +var ( + pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "")) +) + +var ( + forward_ResponseBodyService_GetResponseBody_0 = runtime.ForwardResponseMessage +) diff --git a/examples/proto/examplepb/response_body_service.proto b/examples/proto/examplepb/response_body_service.proto new file mode 100644 index 00000000000..65d430e348d --- /dev/null +++ b/examples/proto/examplepb/response_body_service.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +option go_package = "examplepb"; + +package grpc.gateway.examples.examplepb; + +import "google/api/annotations.proto"; + +message ResponseBodyIn { + string data = 1; +} + +message ResponseBodyOut { + message Response { + string data = 1; + } + Response response = 2; +} + +service ResponseBodyService { + rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { + option (google.api.http) = { + get: "/responsebody/{data}" + response_body: "response" + }; + } +} diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json new file mode 100644 index 00000000000..c13e7646bcf --- /dev/null +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -0,0 +1,61 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/proto/examplepb/response_body_service.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/responsebody/{data}": { + "get": { + "operationId": "GetResponseBody", + "responses": { + "200": { + "description": "", + "schema": { + "$ref": "#/definitions/examplepbResponseBodyOutResponse" + } + } + }, + "parameters": [ + { + "name": "data", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ResponseBodyService" + ] + } + } + }, + "definitions": { + "examplepbResponseBodyOut": { + "type": "object", + "properties": { + "response": { + "$ref": "#/definitions/examplepbResponseBodyOutResponse" + } + } + }, + "examplepbResponseBodyOutResponse": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + } + } +} diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index 61fff8ab6ec..afd74848a09 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -10,6 +10,7 @@ go_library( "flow_combination.go", "main.go", "unannotatedecho.go", + "responsebody.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/server", deps = [ diff --git a/examples/server/main.go b/examples/server/main.go index 4cd385f879d..179485a3601 100644 --- a/examples/server/main.go +++ b/examples/server/main.go @@ -29,6 +29,7 @@ func Run(ctx context.Context, network, address string) error { abe := newABitOfEverythingServer() examples.RegisterABitOfEverythingServiceServer(s, abe) examples.RegisterStreamServiceServer(s, abe) + examples.RegisterResponseBodyServiceServer(s, newResponseBodyServer()) go func() { defer s.GracefulStop() diff --git a/examples/server/responsebody.go b/examples/server/responsebody.go new file mode 100644 index 00000000000..62cff2f47db --- /dev/null +++ b/examples/server/responsebody.go @@ -0,0 +1,23 @@ +package server + +import ( + "context" + + examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" +) + +// Implements of ResponseBodyServiceServer + +type responseBodyServer struct{} + +func newResponseBodyServer() examples.ResponseBodyServiceServer { + return new(responseBodyServer) +} + +func (s *responseBodyServer) GetResponseBody(ctx context.Context, req *examples.ResponseBodyIn) (*examples.ResponseBodyOut, error) { + return &examples.ResponseBodyOut{ + Response: &examples.ResponseBodyOut_Response{ + Data: req.Data, + }, + }, nil +} diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index b09e193c3da..9132e0a6d4d 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -46,6 +46,14 @@ type Registry struct { // mergeFileName target swagger file name after merge mergeFileName string + + // allowRepeatedFieldsInBody permits repeated field in body field path of `google.api.http` annotation option + allowRepeatedFieldsInBody bool + + // useJSONNamesForFields if true json tag name is used for generating fields in swagger definitions, + // otherwise the original proto name is used. It's helpful for synchronizing the swagger definition + // with grpc-gateway response, if it uses json tags for marshaling. + useJSONNamesForFields bool } // NewRegistry returns a new Registry. @@ -318,6 +326,28 @@ func (r *Registry) SetMergeFileName(mergeFileName string) { r.mergeFileName = mergeFileName } +// SetAllowRepeatedFieldsInBody controls whether repeated field can be used +// in `body` and `response_body` (`google.api.http` annotation option) field path or not +func (r *Registry) SetAllowRepeatedFieldsInBody(allow bool) { + r.allowRepeatedFieldsInBody = allow +} + +// IsAllowRepeatedFieldsInBody checks if repeated field can be used +// in `body` and `response_body` (`google.api.http` annotation option) field path or not +func (r *Registry) IsAllowRepeatedFieldsInBody() bool { + return r.allowRepeatedFieldsInBody +} + +// SetUseJSONNamesForFields sets useJSONNamesForFields +func (r *Registry) SetUseJSONNamesForFields(use bool) { + r.useJSONNamesForFields = use +} + +// GetUseJSONNamesForFields returns useJSONNamesForFields +func (r *Registry) GetUseJSONNamesForFields() bool { + return r.useJSONNamesForFields +} + // GetMergeFileName return the target merge swagger file name func (r *Registry) GetMergeFileName() string { return r.mergeFileName diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index c200e57e275..56dd9a8da2d 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -143,6 +143,11 @@ func (r *Registry) newMethod(svc *Service, md *descriptor.MethodDescriptorProto, return nil, err } + b.ResponseBody, err = r.newResponse(meth, opts.ResponseBody) + if err != nil { + return nil, err + } + return b, nil } @@ -238,6 +243,19 @@ func (r *Registry) newBody(meth *Method, path string) (*Body, error) { return &Body{FieldPath: FieldPath(fields)}, nil } +func (r *Registry) newResponse(meth *Method, path string) (*Body, error) { + msg := meth.ResponseType + switch path { + case "", "*": + return nil, nil + } + fields, err := r.resolveFieldPath(msg, path) + if err != nil { + return nil, err + } + return &Body{FieldPath: FieldPath(fields)}, nil +} + // lookupField looks up a field named "name" within "msg". // It returns nil if no such field found. func lookupField(msg *Message, name string) *Field { @@ -277,7 +295,7 @@ func (r *Registry) resolveFieldPath(msg *Message, path string) ([]FieldPathCompo if f == nil { return nil, fmt.Errorf("no field %q found in %s", path, root.GetName()) } - if f.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED { + if !r.allowRepeatedFieldsInBody && f.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED { return nil, fmt.Errorf("repeated field not allowed in field path: %s in %s", f.GetName(), path) } result = append(result, FieldPathComponent{Name: c, Target: f}) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 6346b68e956..1a6e1cce527 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" ) @@ -175,6 +175,8 @@ type Binding struct { PathParams []Parameter // Body describes parameters provided in HTTP request body. Body *Body + // ResponseBody describes field in response struct to marshal in HTTP response body. + ResponseBody *Body } // ExplicitParams returns a list of explicitly bound parameters of "b", @@ -227,10 +229,11 @@ func (p Parameter) ConvertFuncExpr() (string, error) { return conv, nil } -// Body describes a http requtest body to be sent to the method. +// Body describes a http (request|response) body to be sent to the (method|client). +// This is used in body and response_body options in google.api.HttpRule type Body struct { - // FieldPath is a path to a proto field which the request body is mapped to. - // The request body is mapped to the request type itself if FieldPath is empty. + // FieldPath is a path to a proto field which the (request|response) body is mapped to. + // The (request|response) body is mapped to the (request|response) type itself if FieldPath is empty. FieldPath FieldPath } diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 36435750d66..42c42c3ccaf 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -385,14 +385,33 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, {{if $m.GetServerStreaming}} forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) {{else}} + {{ if $b.ResponseBody }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + {{ else }} forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) {{end}} + {{end}} }) {{end}} {{end}} return nil } +{{range $m := $svc.Methods}} +{{range $b := $m.Bindings}} +{{if $b.ResponseBody}} +type response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} struct { + proto.Message +} + +func (m response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}) XXX_ResponseBody() interface{} { + response := m.Message.(*{{$m.ResponseType.GoType $m.Service.File.GoPkg.Path}}) + return {{$b.ResponseBody.AssignableExpr "response"}} +} +{{end}} +{{end}} +{{end}} + var ( {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index b9d2dcfca6f..276e8fc9df0 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -22,13 +22,14 @@ import ( ) var ( - importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - importPath = flag.String("import_path", "", "used as the package if no input files declare go_package. If it contains slashes, everything up to the rightmost slash is ignored.") - registerFuncSuffix = flag.String("register_func_suffix", "Handler", "used to construct names of generated Register* methods.") - useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") + importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") + importPath = flag.String("import_path", "", "used as the package if no input files declare go_package. If it contains slashes, everything up to the rightmost slash is ignored.") + registerFuncSuffix = flag.String("register_func_suffix", "Handler", "used to construct names of generated Register* methods.") + useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") + allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") ) func main() { @@ -75,6 +76,7 @@ func main() { reg.SetPrefix(*importPrefix) reg.SetImportPath(*importPath) reg.SetAllowDeleteBody(*allowDeleteBody) + reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) if err := reg.Load(req); err != nil { emitError(err) return diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 99170d72dab..3f82a52a7a5 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -283,7 +283,13 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, panic(err) } - schema.Properties = append(schema.Properties, keyVal{f.GetName(), fieldValue}) + kv := keyVal{Value: fieldValue} + if reg.GetUseJSONNamesForFields() { + kv.Key = f.GetJsonName() + } else { + kv.Key = f.GetName() + } + schema.Properties = append(schema.Properties, kv) } d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = schema } @@ -659,6 +665,24 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re methProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.ServiceDescriptorProto)(nil)), "Method") desc := "" + var responseSchema swaggerSchemaObject + + if b.ResponseBody == nil || len(b.ResponseBody.FieldPath) == 0 { + responseSchema = swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)), + }, + } + } else { + // This is resolving the value of response_body in the google.api.HttpRule + lastField := b.ResponseBody.FieldPath[len(b.ResponseBody.FieldPath)-1] + responseSchema = schemaOfField(lastField.Target, reg, customRefs) + if responseSchema.Description != "" { + desc = responseSchema.Description + } else { + desc = fieldProtoComments(reg, lastField.Target.Message, lastField.Target) + } + } if meth.GetServerStreaming() { desc += "(streaming responses)" } @@ -668,11 +692,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re Responses: swaggerResponsesObject{ "200": swaggerResponseObject{ Description: desc, - Schema: swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)), - }, - }, + Schema: responseSchema, }, }, } diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 674af5c8b7c..6c6cccb8d4a 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -15,12 +15,13 @@ import ( ) var ( - importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - file = flag.String("file", "-", "where to load data from") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") - mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") + importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") + file = flag.String("file", "-", "where to load data from") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") + mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") + useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") ) func main() { @@ -56,6 +57,7 @@ func main() { reg.SetAllowDeleteBody(*allowDeleteBody) reg.SetAllowMerge(*allowMerge) reg.SetMergeFileName(*mergeFileName) + reg.SetUseJSONNamesForFields(*useJSONNamesForFields) for k, v := range pkgMap { reg.AddPkgMap(k, v) } diff --git a/repositories.bzl b/repositories.bzl index 959b20cfffa..dc49d60eeee 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -28,12 +28,12 @@ go_library( """ def _googleapis_repository_impl(ctx): - googleapis_commit = "e1c0c726290a55065c0c46a62dacc9372939973b" + googleapis_commit = "3e68e19410baa7d78cdacc45b034eafe7467b439" ctx.download_and_extract( url = "https://github.com/googleapis/googleapis/archive/{commit}.tar.gz".format( commit = googleapis_commit, ), - sha256 = "9508971cb4a7c0fe03bc1bfafbd0abc9654c80b4c70e360a6c534938d06d8fb9", + sha256 = "eb98f16b037a27fd5fa6b3420a1e344014396d8ffbbab83c1adfe1296ea8572e", stripPrefix = "googleapis-{}".format(googleapis_commit), ) diff --git a/runtime/handler.go b/runtime/handler.go index 9d6bbc2a473..8ad9d766e1c 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -106,6 +106,12 @@ func handleForwardResponseTrailer(w http.ResponseWriter, md ServerMetadata) { } } +// responseBody interface contains method for getting field for marshaling to the response body +// this method is generated for response struct from the value of `response_body` in the `google.api.HttpRule` +type responseBody interface { + XXX_ResponseBody() interface{} +} + // ForwardResponseMessage forwards the message "resp" from gRPC server to REST client. func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { md, ok := ServerMetadataFromContext(ctx) @@ -120,8 +126,13 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha HTTPError(ctx, mux, marshaler, w, req, err) return } - - buf, err := marshaler.Marshal(resp) + var buf []byte + var err error + if rb, ok := resp.(responseBody); ok { + buf, err = marshaler.Marshal(rb.XXX_ResponseBody()) + } else { + buf, err = marshaler.Marshal(resp) + } if err != nil { grpclog.Infof("Marshal error: %v", err) HTTPError(ctx, mux, marshaler, w, req, err) diff --git a/runtime/mux.go b/runtime/mux.go index 6c06ab8c222..a184291e16a 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -5,7 +5,6 @@ import ( "net/http" "net/textproto" "strings" - "context" "github.com/golang/protobuf/proto" diff --git a/third_party/googleapis/README.grpc-gateway b/third_party/googleapis/README.grpc-gateway index cd723e52079..5c77aece630 100644 --- a/third_party/googleapis/README.grpc-gateway +++ b/third_party/googleapis/README.grpc-gateway @@ -3,7 +3,7 @@ Google APIs Project: Google APIs URL: https://github.com/google/googleapis -Revision: a9fb190cdb78ed9bb2d6bb3fb5b9ef46effa5df3 +Revision: 3544ab16c3342d790b00764251e348705991ea4b License: Apache License 2.0 diff --git a/third_party/googleapis/google/api/http.proto b/third_party/googleapis/google/api/http.proto index 5f8538a0164..2bd3a19bfa5 100644 --- a/third_party/googleapis/google/api/http.proto +++ b/third_party/googleapis/google/api/http.proto @@ -1,4 +1,4 @@ -// Copyright 2016 Google Inc. +// Copyright 2018 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; -// Defines the HTTP configuration for a service. It contains a list of +// Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. message Http { @@ -32,14 +32,22 @@ message Http { // // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; + + // When set to true, URL path parmeters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + bool fully_decode_reserved_expansion = 2; } // `HttpRule` defines the mapping of an RPC method to one or more HTTP -// REST APIs. The mapping determines what portions of the request -// message are populated from the path, query parameters, or body of -// the HTTP request. The mapping is typically specified as an -// `google.api.http` annotation, see "google/api/annotations.proto" -// for details. +// REST API methods. The mapping specifies how different portions of the RPC +// request message are mapped to URL path, URL query parameters, and +// HTTP request body. The mapping is typically specified as an +// `google.api.http` annotation on the RPC method, +// see "google/api/annotations.proto" for details. // // The mapping consists of a field specifying the path template and // method kind. The path template can refer to fields in the request @@ -87,6 +95,11 @@ message Http { // parameters. Assume the following definition of the request message: // // +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http).get = "/v1/messages/{message_id}"; +// } +// } // message GetMessageRequest { // message SubMessage { // string subfield = 1; @@ -199,7 +212,7 @@ message Http { // to the request message are as follows: // // 1. The `body` field specifies either `*` or a field path, or is -// omitted. If omitted, it assumes there is no HTTP body. +// omitted. If omitted, it indicates there is no HTTP request body. // 2. Leaf fields (recursive expansion of nested messages in the // request) can be classified into three types: // (a) Matched in the URL template. @@ -218,28 +231,34 @@ message Http { // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // -// The syntax `*` matches a single path segment. It follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion. -// -// The syntax `**` matches zero or more path segments. It follows the semantics -// of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved -// Expansion. NOTE: it must be the last segment in the path except the Verb. +// The syntax `*` matches a single path segment. The syntax `**` matches zero +// or more path segments, which must be the last part of the path except the +// `Verb`. The syntax `LITERAL` matches literal text in the path. // -// The syntax `LITERAL` matches literal text in the URL path. -// -// The syntax `Variable` matches the entire path as specified by its template; -// this nested template must not contain further variables. If a variable +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path, all characters +// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the +// Discovery Document as `{var}`. +// +// If a variable contains one or more path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path, all +// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables +// show up in the Discovery Document as `{+var}`. +// +// NOTE: While the single segment variable matches the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 +// Simple String Expansion, the multi segment variable **does not** match +// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. +// // NOTE: the field paths in variables and in the `body` must not refer to // repeated fields or map fields. -// -// Use CustomHttpPattern to specify any HTTP method that is not included in the -// `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for -// a given URL path rule. The wild-card rule is useful for services that provide -// content to Web (HTML) clients. message HttpRule { // Selects methods to which this rule applies. // @@ -265,7 +284,10 @@ message HttpRule { // Used for updating a resource. string patch = 6; - // Custom pattern is used for defining custom verbs. + // The custom pattern is used for specifying an HTTP method that is not + // included in the `pattern` field, such as HEAD, or "*" to leave the + // HTTP method unspecified for this rule. The wild-card rule is useful + // for services that provide content to Web (HTML) clients. CustomHttpPattern custom = 8; } @@ -275,6 +297,11 @@ message HttpRule { // present at the top-level of request message type. string body = 7; + // Optional. The name of the response field whose value is mapped to the HTTP + // body of response. Other response fields are ignored. When + // not set, the response message will be used as HTTP body of response. + string response_body = 12; + // Additional HTTP bindings for the selector. Nested bindings must // not contain an `additional_bindings` field themselves (that is, // the nesting may only be one level deep). From 8976e602c518589cb6d40aca52a7dd8aef83706a Mon Sep 17 00:00:00 2001 From: Timon Wong Date: Mon, 27 Aug 2018 14:05:24 +0800 Subject: [PATCH 0031/1518] Add support to forward grpc binary metadata Fixes #218 --- runtime/context.go | 26 ++++++++++++++++++++++++-- runtime/context_test.go | 27 ++++++++++++++++++++++++++- runtime/mux.go | 2 -- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/runtime/context.go b/runtime/context.go index 03a3015a82a..896057e1e1e 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -1,14 +1,16 @@ package runtime import ( + "context" + "encoding/base64" "fmt" "net" "net/http" + "net/textproto" "strconv" "strings" "time" - "context" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/metadata" @@ -28,6 +30,7 @@ const MetadataPrefix = "grpcgateway-" const MetadataTrailerPrefix = "Grpc-Trailer-" const metadataGrpcTimeout = "Grpc-Timeout" +const metadataHeaderBinarySuffix = "-Bin" const xForwardedFor = "X-Forwarded-For" const xForwardedHost = "X-Forwarded-Host" @@ -38,6 +41,14 @@ var ( DefaultContextTimeout = 0 * time.Second ) +func decodeBinHeader(v string) ([]byte, error) { + if len(v)%4 == 0 { + // Input was padded, or padding was not necessary. + return base64.StdEncoding.DecodeString(v) + } + return base64.RawStdEncoding.DecodeString(v) +} + /* AnnotateContext adds context information such as metadata from the request. @@ -58,11 +69,22 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (con for key, vals := range req.Header { for _, val := range vals { + key = textproto.CanonicalMIMEHeaderKey(key) // For backwards-compatibility, pass through 'authorization' header with no prefix. - if strings.ToLower(key) == "authorization" { + if key == "Authorization" { pairs = append(pairs, "authorization", val) } if h, ok := mux.incomingHeaderMatcher(key); ok { + // Handles "-bin" metadata in grpc, since grpc will do another base64 + // encode before sending to server, we need to decode it first. + if strings.HasSuffix(key, metadataHeaderBinarySuffix) { + b, err := decodeBinHeader(val) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "invalid binary header %s: %s", key, err) + } + + val = string(b) + } pairs = append(pairs, h, val) } } diff --git a/runtime/context_test.go b/runtime/context_test.go index e78a037d033..5f752408a03 100644 --- a/runtime/context_test.go +++ b/runtime/context_test.go @@ -1,12 +1,13 @@ package runtime_test import ( + "context" + "encoding/base64" "net/http" "reflect" "testing" "time" - "context" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc/metadata" ) @@ -68,6 +69,30 @@ func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { } } +func TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) { + ctx := context.Background() + request, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) + } + + binData := []byte("\x00test-binary-data") + request.Header.Add("Grpc-Metadata-Test-Bin", base64.StdEncoding.EncodeToString(binData)) + + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) + return + } + md, ok := metadata.FromOutgoingContext(annotated) + if !ok || len(md) != emptyForwardMetaCount+1 { + t.Errorf("Expected %d metadata items in context; got %v", emptyForwardMetaCount+1, md) + } + if got, want := md["test-bin"], []string{string(binData)}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["test-bin"] = %q want %q`, got, want) + } +} + func TestAnnotateContext_XForwardedFor(t *testing.T) { ctx := context.Background() request, err := http.NewRequest("GET", "http://bar.foo.example.com", nil) diff --git a/runtime/mux.go b/runtime/mux.go index a184291e16a..8f7dd36b700 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -3,7 +3,6 @@ package runtime import ( "fmt" "net/http" - "net/textproto" "strings" "context" @@ -51,7 +50,6 @@ type HeaderMatcherFunc func(string) (string, bool) // keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with // 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'. func DefaultHeaderMatcher(key string) (string, bool) { - key = textproto.CanonicalMIMEHeaderKey(key) if isPermanentHTTPHeader(key) { return MetadataPrefix + key, true } else if strings.HasPrefix(key, MetadataHeaderPrefix) { From ca6e9cd29f8938c69cbd81c0fa0da5b3ba74fc1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Ros=C3=A9n?= Date: Tue, 28 Aug 2018 15:19:29 +0200 Subject: [PATCH 0032/1518] Add support for enum path parameters Related to https://github.com/grpc-ecosystem/grpc-gateway/issues/322 Updated protoc-gen-swagger to output enum path parameters correctly Updated protoc-gen-grpc-gateway to handle enum path parameters Regenerated examples Added pathenum proto for an externally imported enum example and verification Added enum_helper.go to handle the lack of enum support in the swagger-codegen-cli 2.2.2 for Go, see https://github.com/swagger-api/swagger-codegen/pull/5635 Fixed browser integration test cases Updated bazel config Fixed last, faulty bazel config Updated integration test case to test both index == 0 and index > 0 for enums --- Makefile | 4 +- .../a_bit_of_everything_service.spec.js | 6 + examples/clients/abe/BUILD.bazel | 10 +- .../abe/a_bit_of_everything_service_api.go | 16 +- examples/clients/abe/enum_helper.go | 46 +++ .../abe/examplepb_a_bit_of_everything.go | 4 + .../abe/message_path_enum_nested_path_enum.go | 14 + examples/clients/abe/pathenum_path_enum.go | 14 + examples/integration/BUILD.bazel | 1 + examples/integration/client_test.go | 9 + examples/integration/integration_test.go | 12 +- examples/proto/examplepb/BUILD.bazel | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 368 ++++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 45 ++- .../proto/examplepb/a_bit_of_everything.proto | 6 +- .../a_bit_of_everything.swagger.json | 76 +++- examples/proto/pathenum/BUILD.bazel | 21 + examples/proto/pathenum/path_enum.pb.go | 120 ++++++ examples/proto/pathenum/path_enum.proto | 15 + protoc-gen-grpc-gateway/descriptor/types.go | 31 +- .../gengateway/BUILD.bazel | 1 + .../gengateway/generator.go | 23 +- .../gengateway/template.go | 37 +- .../gengateway/template_test.go | 6 +- protoc-gen-swagger/genswagger/template.go | 9 +- runtime/convert.go | 21 + 26 files changed, 717 insertions(+), 200 deletions(-) create mode 100644 examples/clients/abe/enum_helper.go create mode 100644 examples/clients/abe/message_path_enum_nested_path_enum.go create mode 100644 examples/clients/abe/pathenum_path_enum.go create mode 100644 examples/proto/pathenum/BUILD.bazel create mode 100644 examples/proto/pathenum/path_enum.pb.go create mode 100644 examples/proto/pathenum/path_enum.proto diff --git a/Makefile b/Makefile index 14f1d673442..4dea64d059c 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ EXAMPLES=examples/proto/examplepb/echo_service.proto \ EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) -EXAMPLE_DEPS=examples/proto/sub/message.proto examples/proto/sub2/message.proto +EXAMPLE_DEPS=examples/proto/pathenum/path_enum.proto examples/proto/sub/message.proto examples/proto/sub2/message.proto EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) EXAMPLE_CLIENT_DIR=examples/clients @@ -182,7 +182,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh \ $(EXAMPLE_CLIENT_DIR)/responsebody/.travis.yml -examples: $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_DEPSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) +examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) test: examples go test -race $(PKG)/... go test -race $(PKG)/examples/integration -args -network=unix -endpoint=test.sock diff --git a/examples/browser/a_bit_of_everything_service.spec.js b/examples/browser/a_bit_of_everything_service.spec.js index edcbebe11d6..7172b806fdf 100644 --- a/examples/browser/a_bit_of_everything_service.spec.js +++ b/examples/browser/a_bit_of_everything_service.spec.js @@ -34,6 +34,9 @@ describe('ABitOfEverythingService', function() { sint32_value: 2147483647, sint64_value: "4611686018427387903", nonConventionalNameValue: "camelCase", + enum_value: "ONE", + path_enum_value: "DEF", + nested_path_enum_value: "JKL", }; beforeEach(function(done) { @@ -72,6 +75,9 @@ describe('ABitOfEverythingService', function() { sint32_value: 2147483647, sint64_value: "4611686018427387903", nonConventionalNameValue: "camelCase", + enum_value: "ONE", + path_enum_value: "DEF", + nested_path_enum_value: "JKL", nested: [ { name: "bar", amount: 10 }, diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index fad5b661901..f70ac9305bb 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -13,13 +13,21 @@ go_library( "configuration.go", "echo_rpc_api.go", "echo_service_api.go", + "enum_helper.go", "examplepb_a_bit_of_everything.go", "examplepb_body.go", "examplepb_numeric_enum.go", + "message_path_enum_nested_path_enum.go", "nested_deep_enum.go", + "pathenum_path_enum.go", "protobuf_empty.go", "sub_string_message.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe", - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = [ + "//examples/proto/examplepb:go_default_library", + "//examples/proto/pathenum:go_default_library", + "//runtime:go_default_library", + "@com_github_go_resty_resty//:go_default_library" + ], ) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index f07085ef4a0..9e426740f2d 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -57,13 +57,16 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * @param sint32Value * @param sint64Value * @param nonConventionalNameValue + * @param enumValue + * @param pathEnumValue + * @param nestedPathEnumValue * @return *ExamplepbABitOfEverything */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string) (*ExamplepbABitOfEverything, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string) (*ExamplepbABitOfEverything, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}" + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}" localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -79,6 +82,9 @@ func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -530,6 +536,8 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param bytesValue * @param uint32Value * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param pathEnumValue + * @param nestedPathEnumValue * @param sfixed32Value * @param sfixed64Value * @param sint32Value @@ -541,7 +549,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 * @return *ProtobufEmpty */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*ProtobufEmpty, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -573,6 +581,8 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName strin localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) + localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) + localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) diff --git a/examples/clients/abe/enum_helper.go b/examples/clients/abe/enum_helper.go new file mode 100644 index 00000000000..df9e20fb66e --- /dev/null +++ b/examples/clients/abe/enum_helper.go @@ -0,0 +1,46 @@ +package abe + +import ( + pbexamplepb "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + pbpathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/runtime" +) + +// String returns a string representation of "NumericEnum" +func (e ExamplepbNumericEnum) String() string { + return pbexamplepb.NumericEnum_ONE.String() +} + +// UnmarshalJSON does a no-op unmarshal to ExamplepbNumericEnum. +// It just validates that the input is sane. +func (e ExamplepbNumericEnum) UnmarshalJSON(b []byte) error { + return unmarshalJSONEnum(b, pbexamplepb.NumericEnum_value) +} + +// String returns a string representation of "MessagePathEnum" +func (e MessagePathEnumNestedPathEnum) String() string { + return pbpathenum.MessagePathEnum_JKL.String() +} + +// UnmarshalJSON does a no-op unmarshal to MessagePathEnumNestedPathEnum. +// It just validates that the input is sane. +func (e MessagePathEnumNestedPathEnum) UnmarshalJSON(b []byte) error { + return unmarshalJSONEnum(b, pbpathenum.MessagePathEnum_NestedPathEnum_value) +} + +// String returns a string representation of "PathEnum" +func (e PathenumPathEnum) String() string { + return pbpathenum.PathEnum_DEF.String() +} + +// UnmarshalJSON does a no-op unmarshal to PathenumPathEnum. +// It just validates that the input is sane. +func (e PathenumPathEnum) UnmarshalJSON(b []byte) error { + return unmarshalJSONEnum(b, pbpathenum.PathEnum_value) +} + +func unmarshalJSONEnum(b []byte, enumValMap map[string]int32) error { + val := string(b[1 : len(b)-1]) + _, err := runtime.Enum(val, enumValMap) + return err +} diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index a20c5c0db30..f413637e1ca 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -47,6 +47,10 @@ type ExamplepbABitOfEverything struct { EnumValue ExamplepbNumericEnum `json:"enum_value,omitempty"` + PathEnumValue PathenumPathEnum `json:"path_enum_value,omitempty"` + + NestedPathEnumValue MessagePathEnumNestedPathEnum `json:"nested_path_enum_value,omitempty"` + Sfixed32Value int32 `json:"sfixed32_value,omitempty"` Sfixed64Value string `json:"sfixed64_value,omitempty"` diff --git a/examples/clients/abe/message_path_enum_nested_path_enum.go b/examples/clients/abe/message_path_enum_nested_path_enum.go new file mode 100644 index 00000000000..a6d9a579f6c --- /dev/null +++ b/examples/clients/abe/message_path_enum_nested_path_enum.go @@ -0,0 +1,14 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: 1.0 + * Contact: none@example.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package abe + +type MessagePathEnumNestedPathEnum struct { +} diff --git a/examples/clients/abe/pathenum_path_enum.go b/examples/clients/abe/pathenum_path_enum.go new file mode 100644 index 00000000000..76e4f87650d --- /dev/null +++ b/examples/clients/abe/pathenum_path_enum.go @@ -0,0 +1,14 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: 1.0 + * Contact: none@example.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package abe + +type PathenumPathEnum struct { +} diff --git a/examples/integration/BUILD.bazel b/examples/integration/BUILD.bazel index c603d01e14f..80e0df6227e 100644 --- a/examples/integration/BUILD.bazel +++ b/examples/integration/BUILD.bazel @@ -14,6 +14,7 @@ go_test( "//examples/clients/unannotatedecho:go_default_library", "//examples/gateway:go_default_library", "//examples/proto/examplepb:go_default_library", + "//examples/proto/pathenum:go_default_library", "//examples/proto/sub:go_default_library", "//examples/server:go_default_library", "//runtime:go_default_library", diff --git a/examples/integration/client_test.go b/examples/integration/client_test.go index b49a2f31fff..bbcfed59cb2 100644 --- a/examples/integration/client_test.go +++ b/examples/integration/client_test.go @@ -73,6 +73,9 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { Sint32Value: 2147483647, Sint64Value: "4611686018427387903", NonConventionalNameValue: "camelCase", + EnumValue: abe.ExamplepbNumericEnum{}, + PathEnumValue: abe.PathenumPathEnum{}, + NestedPathEnumValue: abe.MessagePathEnumNestedPathEnum{}, } resp, _, err := cl.Create( want.FloatValue, @@ -90,6 +93,9 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, + want.EnumValue.String(), + want.PathEnumValue.String(), + want.NestedPathEnumValue.String(), ) if err != nil { t.Errorf("cl.Create(%#v) failed with %v; want success", want, err) @@ -123,6 +129,9 @@ func testABEClientCreateBody(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { Sint32Value: 2147483647, Sint64Value: "4611686018427387903", NonConventionalNameValue: "camelCase", + EnumValue: abe.ExamplepbNumericEnum{}, + PathEnumValue: abe.PathenumPathEnum{}, + NestedPathEnumValue: abe.MessagePathEnumNestedPathEnum{}, Nested: []abe.ABitOfEverythingNested{ { diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index de4e8bb0ad8..518c9c9baab 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -18,6 +18,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" gw "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc/codes" @@ -284,8 +285,11 @@ func testABECreate(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", + EnumValue: gw.NumericEnum_ZERO, + PathEnumValue: pathenum.PathEnum_DEF, + NestedPathEnumValue: pathenum.MessagePathEnum_JKL, } - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue) + url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue) resp, err := http.Post(url, "application/json", strings.NewReader("{}")) if err != nil { @@ -335,6 +339,9 @@ func testABECreateBody(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", + EnumValue: gw.NumericEnum_ONE, + PathEnumValue: pathenum.PathEnum_ABC, + NestedPathEnumValue: pathenum.MessagePathEnum_GHI, Nested: []*gw.ABitOfEverything_Nested{ { @@ -429,6 +436,9 @@ func testABEBulkCreate(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", + EnumValue: gw.NumericEnum_ONE, + PathEnumValue: pathenum.PathEnum_ABC, + NestedPathEnumValue: pathenum.MessagePathEnum_GHI, Nested: []*gw.ABitOfEverything_Nested{ { diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 09b77d200ab..7ec13fbe279 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -23,6 +23,7 @@ proto_library( "response_body_service.proto", ], deps = [ + "//examples/proto/pathenum:pathenum_proto", "//examples/proto/sub:sub_proto", "//examples/proto/sub2:sub2_proto", "//protoc-gen-swagger/options:options_proto", @@ -43,6 +44,7 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb", proto = ":examplepb_proto", deps = [ + "//examples/proto/pathenum:go_default_library", "//examples/proto/sub:go_default_library", "//examples/proto/sub2:go_default_library", "//protoc-gen-swagger/options:go_default_library", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 9e6c25ac895..bc210b5e9a8 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -9,6 +9,7 @@ import math "math" import duration "github.com/golang/protobuf/ptypes/duration" import empty "github.com/golang/protobuf/ptypes/empty" import timestamp "github.com/golang/protobuf/ptypes/timestamp" +import pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" import sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" import sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" import _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" @@ -53,7 +54,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0} } // DeepEnum is one or zero. @@ -79,32 +80,34 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. // NEXT ID: 30 type ABitOfEverything struct { - SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` - Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` - BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` - Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` - Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` - Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` - Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` - RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` + Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` + BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` + PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` + NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` + Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` + Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` + Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` + Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` + RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` // Types that are valid to be assigned to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString @@ -125,7 +128,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -250,6 +253,20 @@ func (m *ABitOfEverything) GetEnumValue() NumericEnum { return NumericEnum_ZERO } +func (m *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum { + if m != nil { + return m.PathEnumValue + } + return pathenum.PathEnum_ABC +} + +func (m *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePathEnum_NestedPathEnum { + if m != nil { + return m.NestedPathEnumValue + } + return pathenum.MessagePathEnum_GHI +} + func (m *ABitOfEverything) GetSfixed32Value() int32 { if m != nil { return m.Sfixed32Value @@ -449,7 +466,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{0, 0} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -501,7 +518,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{1} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{1} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -540,7 +557,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_364bd45bb659fb85, []int{2} + return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{2} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1203,151 +1220,156 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_364bd45bb659fb85) -} - -var fileDescriptor_a_bit_of_everything_364bd45bb659fb85 = []byte{ - // 2266 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcb, 0x73, 0x1b, 0x49, - 0x19, 0xf7, 0x48, 0xb2, 0x62, 0x7f, 0x7e, 0xc9, 0xed, 0x6c, 0xe2, 0x68, 0xbd, 0xeb, 0x8e, 0x36, - 0xcb, 0x6a, 0xbd, 0xab, 0x19, 0x5b, 0x31, 0x5b, 0x89, 0x29, 0x58, 0x64, 0x5b, 0x9b, 0x78, 0xb3, - 0xeb, 0x38, 0x93, 0x6c, 0x48, 0x85, 0x04, 0x57, 0x4b, 0xd3, 0x92, 0x26, 0xd1, 0x4c, 0x0f, 0xd3, - 0x3d, 0xb6, 0x85, 0x31, 0xcf, 0x2a, 0x28, 0xe0, 0x40, 0x95, 0xb9, 0x71, 0xd8, 0x0b, 0x55, 0x14, - 0x17, 0x0e, 0x1c, 0x38, 0x71, 0xa0, 0x38, 0xec, 0x69, 0x6f, 0x50, 0xc5, 0x81, 0x2b, 0x1c, 0xf8, - 0x2f, 0xa0, 0xba, 0x67, 0x46, 0x19, 0xc9, 0x16, 0x8e, 0x12, 0x6a, 0x2f, 0xf6, 0x74, 0xf7, 0xef, - 0x7b, 0x3f, 0xfa, 0x6b, 0x41, 0x99, 0x1e, 0x10, 0xc7, 0x6b, 0x53, 0x6e, 0x78, 0x3e, 0x13, 0xcc, - 0x88, 0x96, 0x5e, 0xcd, 0x20, 0xbb, 0x35, 0x5b, 0xec, 0xb2, 0xc6, 0x2e, 0xdd, 0xa3, 0x7e, 0x47, - 0xb4, 0x6c, 0xb7, 0xa9, 0x2b, 0x0c, 0x5a, 0x6c, 0xfa, 0x5e, 0x5d, 0x6f, 0x12, 0x41, 0xf7, 0x49, - 0x47, 0x8f, 0x19, 0xe8, 0x5d, 0xd2, 0xfc, 0x42, 0x93, 0xb1, 0x66, 0x9b, 0x1a, 0xc4, 0xb3, 0x0d, - 0xe2, 0xba, 0x4c, 0x10, 0x61, 0x33, 0x97, 0x87, 0xe4, 0xf9, 0x57, 0xa3, 0x53, 0xb5, 0xaa, 0x05, - 0x0d, 0x83, 0x3a, 0x9e, 0xe8, 0x44, 0x87, 0xaf, 0xf7, 0x1f, 0x5a, 0x81, 0xaf, 0xa8, 0xa3, 0x73, - 0xdc, 0xa7, 0x2f, 0x0f, 0x6a, 0x86, 0x43, 0x39, 0x27, 0x4d, 0x1a, 0x21, 0x2e, 0x9f, 0x44, 0x94, - 0xfb, 0x20, 0x8b, 0xfd, 0x42, 0x84, 0xed, 0x50, 0x2e, 0x88, 0xe3, 0x45, 0x80, 0x77, 0xd5, 0xbf, - 0x7a, 0xa9, 0x49, 0xdd, 0x12, 0xdf, 0x27, 0xcd, 0x26, 0xf5, 0x0d, 0xe6, 0x29, 0x23, 0x4e, 0x1a, - 0x54, 0xf8, 0xcf, 0x2c, 0xe4, 0x2a, 0xeb, 0xb6, 0xb8, 0xdd, 0xa8, 0x76, 0x5d, 0x85, 0x1e, 0xc3, - 0x14, 0xb7, 0xdd, 0x66, 0x9b, 0xee, 0xba, 0x94, 0x0b, 0x6a, 0xcd, 0x5f, 0xc2, 0x5a, 0x71, 0xa2, - 0x7c, 0x4d, 0x3f, 0xc3, 0x79, 0x7a, 0x3f, 0x27, 0x7d, 0x5b, 0xd1, 0x9b, 0x93, 0x21, 0xbb, 0x70, - 0x85, 0x5a, 0x90, 0x09, 0x02, 0xdb, 0x9a, 0xd7, 0xb0, 0x56, 0x1c, 0x5f, 0xbf, 0x77, 0x5c, 0xb9, - 0xf3, 0x03, 0x4d, 0xfb, 0xb9, 0x76, 0xeb, 0x9b, 0xa4, 0xd4, 0xa8, 0x94, 0x3e, 0x58, 0x2e, 0x5d, - 0x7f, 0x7c, 0x78, 0xed, 0xa8, 0x94, 0x5c, 0xae, 0x0e, 0xb3, 0x5c, 0x29, 0x1f, 0x99, 0x4a, 0x02, - 0xda, 0x81, 0x6c, 0x64, 0x41, 0x0a, 0xa7, 0x5f, 0xca, 0x82, 0x88, 0x0f, 0x5a, 0x84, 0x89, 0x46, - 0x9b, 0x11, 0xb1, 0xbb, 0x47, 0xda, 0x01, 0x9d, 0x4f, 0x63, 0xad, 0x98, 0x32, 0x41, 0x6d, 0xdd, - 0x97, 0x3b, 0xe8, 0x32, 0x4c, 0x5a, 0x2c, 0xa8, 0xb5, 0x69, 0x84, 0xc8, 0x60, 0xad, 0xa8, 0x99, - 0x13, 0xe1, 0x5e, 0x08, 0x59, 0x84, 0x09, 0xdb, 0x15, 0xef, 0xad, 0x46, 0x88, 0x51, 0xac, 0x15, - 0xd3, 0x26, 0xa8, 0xad, 0x2e, 0x8f, 0x20, 0x89, 0xc8, 0x62, 0xad, 0x98, 0x31, 0x27, 0x82, 0x04, - 0x24, 0xe4, 0x71, 0xb5, 0x1c, 0x21, 0xce, 0x61, 0xad, 0x38, 0xaa, 0x78, 0x5c, 0x2d, 0x87, 0x80, - 0x37, 0x60, 0xaa, 0x61, 0x1f, 0x50, 0xab, 0xcb, 0x64, 0x0c, 0x6b, 0xc5, 0xac, 0x39, 0x19, 0x6d, - 0xf6, 0x82, 0xba, 0x7c, 0xc6, 0xb1, 0x56, 0x3c, 0x17, 0x81, 0x62, 0x4e, 0xaf, 0x01, 0xd4, 0x18, - 0x6b, 0x47, 0x08, 0xc0, 0x5a, 0x71, 0xcc, 0x1c, 0x97, 0x3b, 0x5d, 0x65, 0xb9, 0xf0, 0x6d, 0xb7, - 0x19, 0x01, 0x26, 0x64, 0x54, 0xcd, 0x89, 0x70, 0xaf, 0xab, 0x6c, 0xad, 0x23, 0x28, 0x8f, 0x10, - 0xaf, 0x61, 0xad, 0x38, 0x69, 0x82, 0xda, 0xea, 0x31, 0xb8, 0xab, 0xc6, 0x14, 0xd6, 0x8a, 0x53, - 0xa1, 0xc1, 0xb1, 0x16, 0xb7, 0x00, 0xa8, 0x1b, 0x38, 0x11, 0x60, 0x1a, 0x6b, 0xc5, 0xe9, 0xf2, - 0xbb, 0x67, 0x86, 0x73, 0x3b, 0x70, 0xa8, 0x6f, 0xd7, 0xab, 0x6e, 0xe0, 0x98, 0xe3, 0x92, 0x3e, - 0x64, 0xf6, 0x26, 0x4c, 0xf3, 0x5e, 0xc3, 0x67, 0xb0, 0x56, 0x9c, 0x31, 0xa7, 0x78, 0x8f, 0xe5, - 0x5d, 0x58, 0xd7, 0x89, 0x39, 0xac, 0x15, 0x73, 0x31, 0x2c, 0x11, 0x2e, 0x9e, 0xd4, 0x7e, 0x16, - 0x6b, 0xc5, 0x59, 0x73, 0x82, 0x27, 0xb4, 0x8f, 0x20, 0x5d, 0x3e, 0x08, 0x6b, 0x45, 0x14, 0x42, - 0x62, 0x2e, 0x65, 0x78, 0xc5, 0xa7, 0x1e, 0x25, 0x82, 0x5a, 0xbb, 0x3d, 0x0e, 0x9d, 0xc3, 0xe9, - 0xe2, 0xb8, 0x39, 0x17, 0x1f, 0xde, 0x4d, 0x38, 0xf6, 0x3a, 0x4c, 0x30, 0x97, 0xca, 0x3e, 0x27, - 0xdb, 0xd0, 0xfc, 0x79, 0x55, 0xa6, 0x17, 0xf4, 0xb0, 0x45, 0xe8, 0x71, 0x8b, 0xd0, 0xab, 0xf2, - 0xf4, 0xe6, 0x88, 0x09, 0x0a, 0xac, 0x56, 0xe8, 0x0d, 0x98, 0x0c, 0x49, 0x43, 0x59, 0xf3, 0xaf, - 0xc8, 0xb0, 0xdd, 0x1c, 0x31, 0x43, 0x86, 0xa1, 0x10, 0xf4, 0x08, 0xc6, 0x1d, 0xe2, 0x45, 0x7a, - 0x5c, 0x50, 0x25, 0xf4, 0xfe, 0xf0, 0x25, 0xf4, 0x31, 0xf1, 0x94, 0xba, 0x55, 0x57, 0xf8, 0x1d, - 0x73, 0xcc, 0x89, 0x96, 0xe8, 0x00, 0xe6, 0x1c, 0xe2, 0x79, 0xfd, 0xf6, 0x5e, 0x54, 0x72, 0x6e, - 0xbe, 0x90, 0x1c, 0xaf, 0xc7, 0x3f, 0xa1, 0xc0, 0x59, 0xa7, 0x7f, 0x3f, 0x21, 0x39, 0x2c, 0xeb, - 0x48, 0xf2, 0xfc, 0xcb, 0x49, 0x0e, 0x5b, 0xc5, 0x49, 0xc9, 0x89, 0x7d, 0xb4, 0x06, 0xf3, 0x2e, - 0x73, 0x37, 0x98, 0xbb, 0x47, 0x5d, 0xd9, 0x87, 0x49, 0x7b, 0x9b, 0x38, 0x61, 0x5f, 0x98, 0xcf, - 0xab, 0xca, 0x19, 0x78, 0x8e, 0x36, 0x60, 0xa6, 0xdb, 0xec, 0x23, 0x8d, 0x5f, 0x55, 0x11, 0xcf, - 0x9f, 0x88, 0xf8, 0xbd, 0x18, 0x67, 0x4e, 0x77, 0x49, 0x42, 0x26, 0x8f, 0xa0, 0x9b, 0x49, 0xbb, - 0x89, 0x82, 0x5a, 0xc0, 0xe9, 0xa1, 0x0b, 0x6a, 0x36, 0x66, 0x54, 0x8d, 0x0b, 0x2b, 0xff, 0x3b, - 0x0d, 0xb2, 0x51, 0x97, 0x47, 0x90, 0x71, 0x89, 0x43, 0xc3, 0x2e, 0x6f, 0xaa, 0x6f, 0x74, 0x01, - 0xb2, 0xc4, 0x61, 0x81, 0x2b, 0xe6, 0x53, 0xaa, 0xc2, 0xa3, 0x15, 0xba, 0x03, 0x29, 0xf6, 0x54, - 0x35, 0xd3, 0xe9, 0x72, 0xe5, 0x45, 0x7b, 0xb4, 0xbe, 0x49, 0xa9, 0xa7, 0x14, 0x4b, 0xb1, 0xa7, - 0x85, 0x45, 0x18, 0x8b, 0xd7, 0x68, 0x1c, 0x46, 0x3f, 0xa8, 0x7c, 0x74, 0xb7, 0x9a, 0x1b, 0x41, - 0x63, 0x90, 0xb9, 0x67, 0x7e, 0x52, 0xcd, 0x69, 0x79, 0x1b, 0xa6, 0x7a, 0x12, 0x13, 0xe5, 0x20, - 0xfd, 0x94, 0x76, 0x22, 0x7d, 0xe5, 0x27, 0x5a, 0x87, 0xd1, 0xd0, 0x3b, 0xa9, 0x17, 0x68, 0x37, - 0x21, 0xe9, 0x5a, 0xea, 0x9a, 0x96, 0xdf, 0x84, 0x0b, 0xa7, 0xe7, 0xe6, 0x29, 0x32, 0xcf, 0x27, - 0x65, 0x8e, 0x27, 0xb9, 0x7c, 0x2f, 0xe6, 0xd2, 0x9f, 0x67, 0xa7, 0x70, 0xd9, 0x4e, 0x72, 0x79, - 0x99, 0x7b, 0xef, 0x99, 0xfc, 0xb5, 0xcf, 0xb4, 0xe3, 0xca, 0x5f, 0x34, 0x68, 0x2e, 0xcd, 0x55, - 0x70, 0xcd, 0x16, 0x98, 0x35, 0xf0, 0xb3, 0xf1, 0xaa, 0xbc, 0xb5, 0xe5, 0x8a, 0x38, 0x65, 0x3b, - 0xb8, 0xce, 0x1c, 0xaf, 0x6d, 0xd7, 0x65, 0x72, 0xe0, 0x68, 0x7e, 0xc1, 0xa2, 0xe3, 0x51, 0x2c, - 0x18, 0xae, 0xb3, 0x3d, 0xea, 0x63, 0x87, 0xb8, 0x1d, 0xdc, 0xa0, 0x44, 0x04, 0x3e, 0xe5, 0x92, - 0xd7, 0x4e, 0x9c, 0xbb, 0x7f, 0xd5, 0xd4, 0xe5, 0xbd, 0x74, 0x1f, 0xae, 0x7c, 0x60, 0xbb, 0x16, - 0x66, 0x81, 0xc0, 0x0e, 0xf3, 0x29, 0x26, 0x35, 0xf9, 0x79, 0x62, 0x5a, 0xd1, 0x5b, 0x42, 0x78, - 0x7c, 0xcd, 0x30, 0x9a, 0xb6, 0x68, 0x05, 0x35, 0xbd, 0xce, 0x1c, 0x43, 0x9a, 0x5b, 0xa2, 0x75, - 0xc6, 0x3b, 0x5c, 0xd0, 0x68, 0x19, 0x59, 0xbf, 0x3e, 0x15, 0x37, 0x4d, 0x65, 0x5a, 0x21, 0x0f, - 0x99, 0x75, 0x66, 0x75, 0x4e, 0xcb, 0xd7, 0xc2, 0x23, 0x98, 0xf9, 0x38, 0xd4, 0xfe, 0x1b, 0xb6, - 0x68, 0x29, 0xd8, 0x34, 0xa4, 0xe2, 0xd1, 0xc5, 0x4c, 0xd9, 0x16, 0xba, 0x0e, 0x19, 0x8b, 0x08, - 0x12, 0x39, 0xfa, 0xcd, 0x33, 0x1d, 0x2d, 0x99, 0x98, 0x8a, 0x64, 0x09, 0xc3, 0x44, 0x22, 0x61, - 0x64, 0x6a, 0x3e, 0xac, 0x9a, 0xb7, 0x73, 0x23, 0xe8, 0x1c, 0xa4, 0x6f, 0x6f, 0x57, 0x73, 0x5a, - 0xf9, 0x0f, 0xe7, 0xe1, 0x62, 0xbf, 0xbd, 0x77, 0xa9, 0xbf, 0x67, 0xd7, 0x29, 0xfa, 0x34, 0x0d, - 0xd9, 0x0d, 0x5f, 0xd6, 0x1f, 0x5a, 0x19, 0x3a, 0xbc, 0xf9, 0xe1, 0x49, 0x0a, 0xbf, 0x4f, 0xfd, - 0xe8, 0x6f, 0xff, 0xfa, 0x55, 0xea, 0xb7, 0xa9, 0xc2, 0x6f, 0x52, 0xc6, 0xde, 0x4a, 0x3c, 0x6e, - 0x9f, 0x36, 0x6c, 0x1b, 0x87, 0x89, 0x21, 0xe9, 0xc8, 0x38, 0x4c, 0x4e, 0x44, 0x47, 0xc6, 0x61, - 0xe2, 0x26, 0x3c, 0x32, 0x38, 0xf5, 0x88, 0x4f, 0x04, 0xf3, 0x8d, 0xc3, 0xa0, 0xe7, 0xe0, 0x30, - 0x71, 0xa7, 0x1e, 0x19, 0x87, 0x3d, 0x17, 0x71, 0xbc, 0x4e, 0x9c, 0x3f, 0x9b, 0x51, 0x8e, 0x8c, - 0xc3, 0xe4, 0x85, 0xf2, 0x55, 0x2e, 0x7c, 0xcf, 0xa7, 0x0d, 0xfb, 0xc0, 0x58, 0x3a, 0x0a, 0x85, - 0x24, 0xc8, 0x78, 0x3f, 0x1f, 0xde, 0x2f, 0x88, 0xf7, 0x11, 0xf4, 0x2a, 0x39, 0xa8, 0x5b, 0x1f, - 0xa1, 0x4f, 0x35, 0x80, 0x30, 0x40, 0x2a, 0x71, 0xbe, 0x98, 0x20, 0x2d, 0xa9, 0x18, 0x5d, 0x29, - 0x2c, 0x9e, 0x11, 0xa1, 0x35, 0x6d, 0x09, 0x7d, 0x17, 0xb2, 0x1f, 0x31, 0xf6, 0x34, 0xf0, 0xd0, - 0x8c, 0x2e, 0x5f, 0x1a, 0xfa, 0x96, 0x15, 0x65, 0xfb, 0x8b, 0x48, 0xd6, 0x95, 0xe4, 0x22, 0xfa, - 0xd2, 0x99, 0xb9, 0x21, 0xab, 0xfb, 0x08, 0xfd, 0x44, 0x83, 0xec, 0x27, 0x9e, 0xf5, 0x82, 0xf9, - 0x3b, 0x60, 0xc8, 0x29, 0xac, 0x28, 0x2d, 0xde, 0xc9, 0x3f, 0xa7, 0x16, 0xd2, 0x0d, 0xbf, 0xd4, - 0x20, 0xbb, 0x49, 0xdb, 0x54, 0xd0, 0x93, 0x7e, 0x18, 0x24, 0xe6, 0xd1, 0x71, 0xe5, 0x9d, 0xda, - 0xdb, 0x30, 0x0d, 0x50, 0xf1, 0xec, 0x5b, 0xb4, 0x53, 0x09, 0x44, 0x0b, 0x8d, 0xc0, 0x45, 0xc8, - 0xde, 0x96, 0x9f, 0x65, 0x34, 0x05, 0x19, 0x9f, 0x12, 0x0b, 0x46, 0xf7, 0x7d, 0x5b, 0xd0, 0xd0, - 0x35, 0x4b, 0xcf, 0xeb, 0x9a, 0x7f, 0x6a, 0x30, 0x76, 0x83, 0x8a, 0x3b, 0x01, 0xf5, 0x3b, 0xff, - 0x4f, 0xe7, 0xfc, 0x42, 0x3b, 0xae, 0xdc, 0x2b, 0x6c, 0xc3, 0xc2, 0x69, 0x7d, 0xb5, 0x2b, 0x70, - 0xc8, 0x7e, 0xfa, 0x40, 0xab, 0x8d, 0x28, 0xfb, 0x74, 0xf4, 0xee, 0x59, 0xf6, 0x7d, 0x5b, 0x0a, - 0x88, 0xad, 0xfc, 0x2c, 0x0d, 0x99, 0x6a, 0xbd, 0xc5, 0x50, 0x71, 0x80, 0x85, 0x3c, 0xa8, 0xe9, - 0xe1, 0x8d, 0x19, 0x87, 0xe3, 0xb9, 0x91, 0x85, 0x7f, 0xa7, 0x8e, 0x2b, 0x3f, 0x4c, 0xc1, 0x24, - 0xad, 0xb7, 0x18, 0xe6, 0x61, 0xcb, 0x84, 0x31, 0xb5, 0xf2, 0xbd, 0x3a, 0x9a, 0xbd, 0x1b, 0x38, - 0x0e, 0xf1, 0x3b, 0x6b, 0xb8, 0x1a, 0x6d, 0xe5, 0x73, 0x9b, 0x94, 0xd7, 0x7d, 0x5b, 0xbd, 0x94, - 0xd5, 0x6e, 0x61, 0x13, 0x50, 0xaf, 0xa3, 0x94, 0xb6, 0x43, 0xba, 0xe7, 0xc3, 0xf7, 0x21, 0xfd, - 0xe5, 0xe5, 0xab, 0xe8, 0x1a, 0xbc, 0x67, 0x52, 0x11, 0xf8, 0x2e, 0xb5, 0xf0, 0x7e, 0x8b, 0xba, - 0x58, 0xb4, 0x28, 0xf6, 0x29, 0x67, 0x81, 0x5f, 0xa7, 0xd8, 0xe6, 0x58, 0x50, 0xc7, 0x63, 0x3e, - 0xf1, 0xed, 0x76, 0x07, 0x07, 0x2e, 0xd9, 0x23, 0x76, 0x9b, 0xd4, 0xda, 0x54, 0xff, 0xf0, 0x2b, - 0x90, 0x5e, 0x5d, 0x5e, 0x45, 0xab, 0xb0, 0xf4, 0x3f, 0x18, 0x58, 0x8c, 0x72, 0xec, 0x32, 0x81, - 0xe9, 0x81, 0xcd, 0x85, 0x8e, 0xb2, 0x90, 0xf9, 0x75, 0x4a, 0x4b, 0xab, 0xc0, 0x3c, 0x3e, 0x3b, - 0x30, 0xd2, 0x31, 0xc6, 0x61, 0xd8, 0xd3, 0x1e, 0x5e, 0x2a, 0xe4, 0x8c, 0xbd, 0x72, 0x17, 0x2f, - 0xcf, 0xd6, 0xc2, 0x39, 0xe0, 0x21, 0x42, 0x27, 0x8e, 0xd0, 0x1f, 0x35, 0x98, 0x94, 0xa3, 0xd6, - 0x0e, 0x11, 0x2d, 0xe5, 0xa1, 0x2f, 0xa6, 0xd3, 0xbd, 0xaf, 0x6c, 0xbb, 0x5e, 0x58, 0x3d, 0xb3, - 0xa8, 0x7a, 0x7e, 0xcb, 0xd0, 0xe5, 0xc5, 0xae, 0xea, 0xbe, 0x02, 0xb0, 0xcd, 0xd6, 0x6d, 0xd7, - 0xb2, 0xdd, 0x26, 0x47, 0x97, 0x4e, 0xd4, 0xcc, 0x66, 0xf4, 0xeb, 0xcd, 0xc0, 0x72, 0x1a, 0x41, - 0xf7, 0xe1, 0x9c, 0x9c, 0xb4, 0x59, 0x20, 0xd0, 0x00, 0xd0, 0x40, 0xe2, 0x57, 0x95, 0xfa, 0xaf, - 0xa0, 0xb9, 0xa4, 0x3f, 0x45, 0xc4, 0xac, 0x05, 0xb9, 0xaa, 0xef, 0x33, 0x5f, 0x4e, 0x1d, 0x9b, - 0x54, 0x10, 0xbb, 0xcd, 0x87, 0x16, 0x70, 0x45, 0x09, 0x78, 0x1d, 0x2d, 0xf4, 0x04, 0x4c, 0x72, - 0xdd, 0xb7, 0x45, 0xcb, 0x8a, 0xb8, 0xfe, 0x54, 0x03, 0x74, 0x83, 0x8a, 0xfe, 0x29, 0x67, 0xf9, - 0xcc, 0x78, 0xf4, 0x51, 0x0c, 0x54, 0xe3, 0x2d, 0xa5, 0xc6, 0xe5, 0xc2, 0xa5, 0xa4, 0x1a, 0x52, - 0x83, 0x1a, 0xb3, 0x3a, 0xc6, 0xa1, 0xec, 0xc1, 0x6a, 0x1a, 0x42, 0x3f, 0xd6, 0x60, 0x76, 0x87, - 0x71, 0x21, 0x39, 0x2a, 0x52, 0xa5, 0xc8, 0xf3, 0x0d, 0x54, 0x03, 0xa5, 0x1b, 0x4a, 0xfa, 0xdb, - 0x85, 0x2b, 0x49, 0xe9, 0x1e, 0xe3, 0x42, 0x6a, 0xa0, 0x1e, 0xcd, 0xa1, 0x1a, 0x71, 0x52, 0xe4, - 0xff, 0xac, 0x1d, 0x57, 0xfe, 0xa4, 0xa1, 0xc6, 0x80, 0xa9, 0x0b, 0x5b, 0x89, 0x26, 0x51, 0x2a, - 0xe1, 0xfd, 0x96, 0x5d, 0x6f, 0x61, 0xde, 0x62, 0x41, 0xdb, 0x52, 0xe5, 0x57, 0xa3, 0x38, 0xe0, - 0xd4, 0xc2, 0xb6, 0x8b, 0xbd, 0x36, 0xa9, 0x53, 0x39, 0xd9, 0xca, 0x42, 0xb5, 0x58, 0x3d, 0x70, - 0xa8, 0x1b, 0xfe, 0xf8, 0x26, 0xc7, 0x63, 0xb9, 0xb8, 0x9c, 0xbf, 0x03, 0x8b, 0xa7, 0xf5, 0x62, - 0x59, 0x46, 0xf1, 0x9c, 0x37, 0x64, 0xbf, 0x29, 0x3f, 0x81, 0xf3, 0x75, 0xe2, 0xd0, 0xf6, 0x06, - 0xe1, 0x34, 0xe2, 0x21, 0x87, 0x12, 0x64, 0xc2, 0x68, 0xf8, 0xf2, 0x1f, 0x36, 0x91, 0x2e, 0x29, - 0x1f, 0xce, 0xa1, 0xd9, 0x9e, 0x44, 0x92, 0x47, 0xe5, 0x6f, 0xc1, 0x42, 0xc5, 0x65, 0xa2, 0x45, - 0xfd, 0x48, 0x92, 0x0c, 0x5e, 0xa2, 0xa8, 0xbe, 0xd6, 0x53, 0x62, 0xc3, 0x0a, 0x1e, 0x59, 0xff, - 0x47, 0xf6, 0xb8, 0xf2, 0x79, 0x16, 0x09, 0x98, 0xab, 0xe0, 0xf5, 0xf0, 0xc9, 0x91, 0xe8, 0x00, - 0x0f, 0xe0, 0x7c, 0xd3, 0xdc, 0xd9, 0x28, 0xdd, 0x08, 0x2d, 0xc7, 0x9e, 0xcf, 0x9e, 0xd0, 0xba, - 0x18, 0xd6, 0x63, 0xf9, 0x9c, 0xcb, 0x5c, 0xfa, 0xf5, 0xc8, 0x32, 0x89, 0x2e, 0xa7, 0x57, 0xf4, - 0xe5, 0xa5, 0xb4, 0x96, 0xca, 0x94, 0x73, 0xc4, 0x0b, 0x1f, 0x32, 0x36, 0x73, 0x8d, 0x27, 0x9c, - 0xb9, 0xe5, 0x0b, 0xc9, 0x9d, 0x83, 0x52, 0x83, 0xb1, 0x92, 0x63, 0x3b, 0x74, 0xed, 0x04, 0x72, - 0x6d, 0x00, 0xd2, 0xdc, 0x91, 0x0d, 0xfd, 0x2a, 0xda, 0x82, 0x1b, 0x27, 0x1b, 0x7a, 0xc0, 0xa9, - 0xff, 0xac, 0x99, 0xb7, 0xc8, 0x1e, 0xc5, 0x1e, 0xf5, 0x1d, 0x9b, 0x73, 0x99, 0x37, 0x82, 0x61, - 0x52, 0xaf, 0x53, 0xce, 0x7b, 0x9a, 0xbf, 0x6e, 0xbe, 0xc4, 0x15, 0x71, 0xce, 0xbc, 0x09, 0xe9, - 0xd5, 0x95, 0x6b, 0xa8, 0x02, 0x53, 0x5b, 0x6f, 0x39, 0x98, 0x60, 0x41, 0x89, 0xc7, 0x84, 0x8e, - 0x96, 0x41, 0xcf, 0x0f, 0xf5, 0xe4, 0x7d, 0xf8, 0xb3, 0x14, 0xcc, 0xc0, 0xf8, 0x3a, 0xe1, 0x76, - 0x5d, 0x0d, 0x44, 0xa9, 0x31, 0x0d, 0x5e, 0xeb, 0x19, 0x91, 0x66, 0xc6, 0x52, 0xf9, 0xf1, 0x07, - 0xa5, 0xca, 0xce, 0x56, 0xe9, 0x16, 0xed, 0xe0, 0x14, 0xfc, 0x5d, 0xeb, 0x8e, 0x4c, 0x9f, 0x6b, - 0x63, 0xe9, 0x62, 0xa6, 0xfc, 0x46, 0x1c, 0xbd, 0x44, 0x40, 0x0c, 0x46, 0x02, 0xd1, 0x32, 0xe4, - 0x1f, 0xe6, 0xdb, 0xdf, 0xa1, 0x6b, 0x8b, 0x83, 0x41, 0x82, 0x3d, 0xa5, 0xee, 0xfa, 0xf7, 0x21, - 0x1f, 0x4e, 0x60, 0x08, 0xdd, 0xf0, 0x89, 0x2b, 0x38, 0x96, 0x8b, 0xc8, 0x7b, 0xb0, 0x10, 0xcd, - 0x65, 0x68, 0x2e, 0x3a, 0x54, 0xab, 0xf8, 0x74, 0x03, 0x46, 0x89, 0xe5, 0xd8, 0x2e, 0x5a, 0xeb, - 0x21, 0x75, 0xad, 0x1e, 0x98, 0x0a, 0x86, 0x84, 0xd9, 0x5c, 0xc8, 0x8b, 0x62, 0x8f, 0x62, 0xdb, - 0x6d, 0x30, 0xdf, 0x51, 0xf1, 0xae, 0x2d, 0xc2, 0x54, 0xd2, 0x15, 0x23, 0xfd, 0xb3, 0x62, 0xed, - 0xed, 0x81, 0xd3, 0x62, 0x3f, 0xd4, 0xdf, 0x82, 0x8b, 0x1f, 0x3f, 0x6b, 0x0e, 0xc9, 0x9c, 0x1f, - 0x36, 0xd7, 0x1f, 0x8e, 0x77, 0x23, 0x57, 0xcb, 0xaa, 0x72, 0xbb, 0xfa, 0xdf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x69, 0x92, 0x48, 0xf9, 0x47, 0x19, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8) +} + +var fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8 = []byte{ + // 2351 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4d, 0x6f, 0x1b, 0xc7, + 0xf9, 0xd7, 0x92, 0x14, 0x2d, 0x3d, 0x7a, 0xa3, 0x46, 0x8e, 0x2c, 0x33, 0x4a, 0x34, 0x66, 0x9c, + 0x7f, 0x18, 0x25, 0xdc, 0x95, 0x68, 0xfd, 0x03, 0x5b, 0x45, 0x93, 0x52, 0x2f, 0xb1, 0x15, 0x27, + 0xb2, 0xbc, 0x76, 0x5c, 0xc3, 0xb5, 0x2b, 0x0c, 0xc9, 0x21, 0xb9, 0x36, 0x77, 0x67, 0xbb, 0x33, + 0x2b, 0x89, 0x65, 0xd9, 0x57, 0xa0, 0x45, 0xdb, 0x43, 0x01, 0xf5, 0xd6, 0x43, 0xcf, 0xfd, 0x02, + 0x3d, 0xf5, 0x50, 0xf4, 0x90, 0x5e, 0x72, 0x6b, 0x81, 0x1c, 0x5a, 0xa0, 0x97, 0xb6, 0x40, 0xfb, + 0x2d, 0x8a, 0x99, 0xdd, 0xa5, 0x96, 0x94, 0x58, 0x99, 0x76, 0x91, 0x8b, 0xb4, 0x33, 0xf3, 0x9b, + 0xdf, 0xf3, 0xcc, 0xf3, 0x36, 0xcf, 0x10, 0x8a, 0xf4, 0x88, 0xd8, 0x6e, 0x93, 0x72, 0xc3, 0xf5, + 0x98, 0x60, 0x46, 0x38, 0x74, 0xcb, 0x06, 0xd9, 0x2f, 0x5b, 0x62, 0x9f, 0xd5, 0xf6, 0xe9, 0x01, + 0xf5, 0x5a, 0xa2, 0x61, 0x39, 0x75, 0x5d, 0x61, 0xd0, 0x52, 0xdd, 0x73, 0x2b, 0x7a, 0x9d, 0x08, + 0x7a, 0x48, 0x5a, 0x7a, 0x44, 0xa0, 0x77, 0xb7, 0x66, 0x17, 0xeb, 0x8c, 0xd5, 0x9b, 0xd4, 0x20, + 0xae, 0x65, 0x10, 0xc7, 0x61, 0x82, 0x08, 0x8b, 0x39, 0x3c, 0xd8, 0x9e, 0x7d, 0x35, 0x5c, 0x55, + 0xa3, 0xb2, 0x5f, 0x33, 0xa8, 0xed, 0x8a, 0x56, 0xb8, 0xf8, 0x7a, 0xff, 0x62, 0xd5, 0xf7, 0xd4, + 0xee, 0x70, 0xfd, 0xad, 0x3e, 0x7d, 0x5d, 0x22, 0x1a, 0xd4, 0xf1, 0x6d, 0xf5, 0xb1, 0x2f, 0xbf, + 0x42, 0x20, 0xee, 0x03, 0x72, 0xbf, 0x6c, 0xd8, 0x94, 0x73, 0x52, 0xa7, 0x21, 0xe2, 0xca, 0x69, + 0x44, 0xb1, 0x0f, 0xb2, 0xd4, 0xaf, 0x8d, 0xb0, 0x6c, 0xca, 0x05, 0xb1, 0xdd, 0x10, 0xf0, 0xae, + 0xfa, 0x57, 0x29, 0xd4, 0xa9, 0x53, 0xe0, 0x87, 0xa4, 0x5e, 0xa7, 0x9e, 0xc1, 0x5c, 0x75, 0xda, + 0xd3, 0x27, 0xcf, 0xfd, 0x71, 0x0e, 0x32, 0xa5, 0x0d, 0x4b, 0xdc, 0xa9, 0x6d, 0x77, 0x6d, 0x8a, + 0x9e, 0xc0, 0x14, 0xb7, 0x9c, 0x7a, 0x93, 0xee, 0x3b, 0x94, 0x0b, 0x5a, 0x5d, 0xb8, 0x8c, 0xb5, + 0xfc, 0x44, 0xf1, 0xba, 0x7e, 0x8e, 0x95, 0xf5, 0x7e, 0x26, 0x7d, 0x57, 0xed, 0x37, 0x27, 0x03, + 0xba, 0x60, 0x84, 0x1a, 0x90, 0xf2, 0x7d, 0xab, 0xba, 0xa0, 0x61, 0x2d, 0x3f, 0xbe, 0x71, 0xff, + 0xb8, 0x74, 0xf7, 0xfb, 0x9a, 0xf6, 0x33, 0xed, 0xf6, 0x37, 0x48, 0xa1, 0x56, 0x2a, 0x7c, 0xb8, + 0x52, 0xb8, 0xf1, 0xa4, 0x7d, 0xbd, 0x53, 0x88, 0x0f, 0xd7, 0x86, 0x19, 0xae, 0x16, 0x3b, 0xa6, + 0x92, 0x80, 0xf6, 0x20, 0x1d, 0x9e, 0x20, 0x81, 0x93, 0x2f, 0x75, 0x82, 0x90, 0x07, 0x2d, 0xc1, + 0x44, 0xad, 0xc9, 0x88, 0xd8, 0x3f, 0x20, 0x4d, 0x9f, 0x2e, 0x24, 0xb1, 0x96, 0x4f, 0x98, 0xa0, + 0xa6, 0x1e, 0xc8, 0x19, 0x74, 0x05, 0x26, 0xab, 0xcc, 0x2f, 0x37, 0x69, 0x88, 0x48, 0x61, 0x2d, + 0xaf, 0x99, 0x13, 0xc1, 0x5c, 0x00, 0x59, 0x82, 0x09, 0xcb, 0x11, 0xef, 0xad, 0x85, 0x88, 0x51, + 0xac, 0xe5, 0x93, 0x26, 0xa8, 0xa9, 0x2e, 0x87, 0x1f, 0x47, 0xa4, 0xb1, 0x96, 0x4f, 0x99, 0x13, + 0x7e, 0x0c, 0x12, 0x70, 0x5c, 0x2b, 0x86, 0x88, 0x0b, 0x58, 0xcb, 0x8f, 0x2a, 0x8e, 0x6b, 0xc5, + 0x00, 0xf0, 0x06, 0x4c, 0xd5, 0xac, 0x23, 0x5a, 0xed, 0x92, 0x8c, 0x61, 0x2d, 0x9f, 0x36, 0x27, + 0xc3, 0xc9, 0x5e, 0x50, 0x97, 0x67, 0x1c, 0x6b, 0xf9, 0x0b, 0x21, 0x28, 0x62, 0x7a, 0x0d, 0xa0, + 0xcc, 0x58, 0x33, 0x44, 0x00, 0xd6, 0xf2, 0x63, 0xe6, 0xb8, 0x9c, 0xe9, 0x2a, 0xcb, 0x85, 0x67, + 0x39, 0xf5, 0x10, 0x30, 0x21, 0xbd, 0x6a, 0x4e, 0x04, 0x73, 0x5d, 0x65, 0xcb, 0x2d, 0x41, 0x79, + 0x88, 0x78, 0x0d, 0x6b, 0xf9, 0x49, 0x13, 0xd4, 0x54, 0xcf, 0x81, 0xbb, 0x6a, 0x4c, 0x61, 0x2d, + 0x3f, 0x15, 0x1c, 0x38, 0xd2, 0xe2, 0x36, 0x80, 0x4c, 0xa5, 0x10, 0x30, 0x8d, 0xb5, 0xfc, 0x74, + 0xf1, 0xdd, 0x73, 0xdd, 0xb9, 0xeb, 0xdb, 0xd4, 0xb3, 0x2a, 0xdb, 0x8e, 0x6f, 0x9b, 0xe3, 0x72, + 0x7f, 0x40, 0xb6, 0x07, 0x33, 0xdd, 0xe4, 0x0c, 0x19, 0x5f, 0x57, 0x8c, 0xf9, 0x01, 0x8c, 0x51, + 0x4e, 0xeb, 0x7b, 0x44, 0x34, 0x14, 0xdb, 0x94, 0x1b, 0x7e, 0x05, 0x8c, 0x1c, 0xe6, 0x83, 0x08, + 0xd9, 0xef, 0x27, 0x5e, 0x52, 0xc4, 0xef, 0x9f, 0x47, 0xfc, 0x49, 0x90, 0xe5, 0x11, 0x7f, 0x18, + 0x77, 0x5d, 0x71, 0x73, 0x4e, 0xcf, 0x38, 0x10, 0xfa, 0x26, 0x4c, 0xf3, 0x5e, 0xff, 0xcd, 0x60, + 0x2d, 0x3f, 0x63, 0x4e, 0xf1, 0x1e, 0x07, 0x76, 0x61, 0xdd, 0x58, 0xc8, 0x60, 0x2d, 0x9f, 0x89, + 0x60, 0xb1, 0xa8, 0xe3, 0x71, 0x27, 0xcc, 0x62, 0x2d, 0x3f, 0x6b, 0x4e, 0xf0, 0x98, 0x13, 0x42, + 0x48, 0x97, 0x07, 0x61, 0x2d, 0x8f, 0x02, 0x48, 0xc4, 0x52, 0x84, 0x57, 0x3c, 0xea, 0x52, 0x22, + 0x4d, 0xd1, 0x13, 0x17, 0x73, 0x38, 0x99, 0x1f, 0x37, 0xe7, 0xa2, 0xc5, 0x7b, 0xb1, 0xf8, 0xb8, + 0x01, 0x13, 0xcc, 0xa1, 0xb2, 0xae, 0xcb, 0xb2, 0xbb, 0x70, 0x51, 0x55, 0x9b, 0x79, 0x3d, 0xa8, + 0x74, 0x7a, 0x54, 0xe9, 0xf4, 0x6d, 0xb9, 0x7a, 0x6b, 0xc4, 0x04, 0x05, 0x56, 0x23, 0xf4, 0x06, + 0x4c, 0x06, 0x5b, 0x03, 0x59, 0x0b, 0xaf, 0xc8, 0xe8, 0xbb, 0x35, 0x62, 0x06, 0x84, 0x81, 0x10, + 0xf4, 0x18, 0xc6, 0x6d, 0xe2, 0x86, 0x7a, 0xcc, 0xab, 0x4a, 0xf0, 0xc1, 0xf0, 0x95, 0xe0, 0x13, + 0xe2, 0x2a, 0x75, 0xb7, 0x1d, 0xe1, 0xb5, 0xcc, 0x31, 0x3b, 0x1c, 0xa2, 0x23, 0x98, 0xb3, 0x89, + 0xeb, 0xf6, 0x9f, 0xf7, 0x92, 0x92, 0x73, 0xeb, 0x85, 0xe4, 0xb8, 0x3d, 0xf6, 0x09, 0x04, 0xce, + 0xda, 0xfd, 0xf3, 0x31, 0xc9, 0x61, 0xec, 0x05, 0x92, 0x17, 0x5e, 0x4e, 0x72, 0x10, 0x79, 0xa7, + 0x25, 0xc7, 0xe6, 0xd1, 0x3a, 0x2c, 0x38, 0xcc, 0xd9, 0x64, 0xce, 0x01, 0x75, 0xe4, 0x75, 0x42, + 0x9a, 0xbb, 0xc4, 0x0e, 0xca, 0xdb, 0x42, 0x56, 0x15, 0x80, 0x81, 0xeb, 0x68, 0x13, 0x66, 0xba, + 0x77, 0x56, 0xa8, 0xf1, 0xab, 0xca, 0xe3, 0xd9, 0x53, 0x1e, 0xbf, 0x1f, 0xe1, 0xcc, 0xe9, 0xee, + 0x96, 0x80, 0xe4, 0x31, 0x74, 0x23, 0x29, 0x9e, 0x6c, 0x8b, 0x38, 0x39, 0x74, 0x5d, 0x98, 0x8d, + 0x88, 0xba, 0x89, 0x95, 0xfd, 0x8d, 0x06, 0xe9, 0xf0, 0xb2, 0x42, 0x90, 0x72, 0x88, 0x4d, 0x83, + 0xcb, 0xca, 0x54, 0xdf, 0x68, 0x1e, 0xd2, 0xc4, 0x66, 0xbe, 0x23, 0x16, 0x12, 0xaa, 0x50, 0x85, + 0x23, 0x74, 0x17, 0x12, 0xec, 0x99, 0xba, 0x13, 0xa6, 0x8b, 0xa5, 0x17, 0xbd, 0x6a, 0xf4, 0x2d, + 0x4a, 0x5d, 0xa5, 0x58, 0x82, 0x3d, 0xcb, 0x2d, 0xc1, 0x58, 0x34, 0x46, 0xe3, 0x30, 0xfa, 0x61, + 0xe9, 0xe3, 0x7b, 0xdb, 0x99, 0x11, 0x34, 0x06, 0xa9, 0xfb, 0xe6, 0xa7, 0xdb, 0x19, 0x2d, 0x6b, + 0xc1, 0x54, 0x4f, 0x60, 0xa2, 0x0c, 0x24, 0x9f, 0xd1, 0x56, 0xa8, 0xaf, 0xfc, 0x44, 0x1b, 0x30, + 0x1a, 0x58, 0x27, 0xf1, 0x02, 0x55, 0x33, 0xd8, 0xba, 0x9e, 0xb8, 0xae, 0x65, 0xb7, 0x60, 0xfe, + 0xec, 0xd8, 0x3c, 0x43, 0xe6, 0xc5, 0xb8, 0xcc, 0xf1, 0x38, 0xcb, 0x77, 0x23, 0x96, 0xfe, 0x38, + 0x3b, 0x83, 0x65, 0x37, 0xce, 0xf2, 0x32, 0xd7, 0xf7, 0x89, 0xfc, 0xf5, 0xcf, 0xb4, 0xe3, 0xd2, + 0x1f, 0x34, 0xa8, 0x2f, 0xcf, 0x95, 0x70, 0xd9, 0x12, 0x98, 0xd5, 0xf0, 0x49, 0x3b, 0x59, 0xdc, + 0xd9, 0x71, 0x44, 0x14, 0xb2, 0x2d, 0x5c, 0x61, 0xb6, 0xdb, 0xb4, 0x2a, 0x32, 0x38, 0x70, 0xd8, + 0x86, 0x61, 0xd1, 0x72, 0x29, 0x16, 0x0c, 0x57, 0xd8, 0x01, 0xf5, 0xb0, 0x4d, 0x9c, 0x16, 0xae, + 0x51, 0x22, 0x7c, 0x8f, 0x72, 0xc9, 0xb5, 0x17, 0xc5, 0xee, 0x9f, 0x34, 0xd5, 0x83, 0x2c, 0x3f, + 0x80, 0xab, 0x1f, 0x5a, 0x4e, 0x15, 0x33, 0x5f, 0x60, 0x9b, 0x79, 0x14, 0x93, 0xb2, 0xfc, 0x3c, + 0xd5, 0x74, 0xe9, 0x0d, 0x21, 0x5c, 0xbe, 0x6e, 0x18, 0x75, 0x4b, 0x34, 0xfc, 0xb2, 0x5e, 0x61, + 0xb6, 0x21, 0x8f, 0x5b, 0xa0, 0x15, 0xc6, 0x5b, 0x5c, 0xd0, 0x70, 0x18, 0x9e, 0x7e, 0x63, 0x2a, + 0x2a, 0x9a, 0xea, 0x68, 0xb9, 0x2c, 0xa4, 0x36, 0x58, 0xb5, 0x75, 0x56, 0xbc, 0xe6, 0x1e, 0xc3, + 0x4c, 0x78, 0xbd, 0x7c, 0xdd, 0x12, 0x0d, 0x05, 0x9b, 0x86, 0x44, 0xd4, 0x81, 0x99, 0x09, 0xab, + 0x8a, 0x6e, 0x40, 0xaa, 0x4a, 0x04, 0x09, 0x0d, 0xfd, 0xe6, 0xb9, 0x86, 0x96, 0x24, 0xa6, 0xda, + 0xb2, 0x8c, 0x61, 0x22, 0x16, 0x30, 0x32, 0x34, 0x1f, 0x6d, 0x9b, 0x77, 0x32, 0x23, 0xe8, 0x02, + 0x24, 0xef, 0xec, 0x6e, 0x67, 0xb4, 0xe2, 0xbf, 0x2f, 0xc2, 0xa5, 0xfe, 0xf3, 0xde, 0xa3, 0xde, + 0x81, 0x55, 0xa1, 0xe8, 0x8b, 0x24, 0xa4, 0x37, 0x3d, 0x99, 0x7f, 0x68, 0x75, 0x68, 0xf7, 0x66, + 0x87, 0xdf, 0x92, 0xfb, 0x67, 0xe2, 0x87, 0x7f, 0xfe, 0xc7, 0x2f, 0x13, 0x7f, 0x4b, 0xe4, 0xfe, + 0x9a, 0x30, 0x0e, 0x56, 0xa3, 0xe7, 0xc5, 0x59, 0x8f, 0x0b, 0xa3, 0x1d, 0xeb, 0xf5, 0x3a, 0x46, + 0x3b, 0xde, 0xd8, 0x75, 0x8c, 0x76, 0xec, 0x26, 0xec, 0x18, 0x9c, 0xba, 0xc4, 0x23, 0x82, 0x79, + 0x46, 0xdb, 0xef, 0x59, 0x68, 0xc7, 0xee, 0xd4, 0x8e, 0xd1, 0xee, 0xb9, 0x88, 0xa3, 0x71, 0x6c, + 0xfd, 0xa4, 0xd5, 0xea, 0x18, 0xed, 0xf8, 0x85, 0xf2, 0x55, 0x2e, 0x3c, 0xd7, 0xa3, 0x35, 0xeb, + 0xc8, 0x58, 0xee, 0x04, 0x42, 0x62, 0xdb, 0x78, 0x3f, 0x0f, 0xef, 0x17, 0xc4, 0xfb, 0x36, 0xf4, + 0x2a, 0x39, 0xa8, 0x5a, 0x77, 0x8c, 0xf6, 0x49, 0x79, 0xed, 0x18, 0xed, 0xbe, 0xee, 0x46, 0xee, + 0x3c, 0xb3, 0xed, 0xe9, 0xa0, 0x5f, 0x6b, 0x00, 0x81, 0x63, 0x55, 0xc0, 0x7d, 0x39, 0xce, 0x5d, + 0x56, 0xbe, 0xbd, 0x9a, 0x5b, 0x3a, 0xc7, 0xb3, 0xeb, 0xda, 0x32, 0xfa, 0x0e, 0xa4, 0x3f, 0x66, + 0xec, 0x99, 0xef, 0xa2, 0x19, 0x5d, 0x3e, 0xb4, 0xf4, 0x9d, 0x6a, 0x98, 0x25, 0x2f, 0x22, 0x59, + 0x57, 0x92, 0xf3, 0xe8, 0xff, 0xce, 0x8d, 0x29, 0x59, 0x15, 0x3a, 0xe8, 0xc7, 0x1a, 0xa4, 0x3f, + 0x75, 0xab, 0x2f, 0x18, 0xf7, 0x03, 0x9a, 0xa3, 0xdc, 0xaa, 0xd2, 0xe2, 0x9d, 0xec, 0x73, 0x6a, + 0x21, 0xcd, 0xf0, 0x0b, 0x0d, 0xd2, 0x5b, 0xb4, 0x49, 0x05, 0x3d, 0x6d, 0x87, 0x41, 0x62, 0x1e, + 0x1f, 0x97, 0xde, 0x29, 0xbf, 0x0d, 0xd3, 0x00, 0x25, 0xd7, 0xba, 0x4d, 0x5b, 0x25, 0x5f, 0x34, + 0xd0, 0x08, 0x5c, 0x82, 0xf4, 0x1d, 0xf9, 0x59, 0x44, 0x53, 0x90, 0xf2, 0x28, 0xa9, 0xc2, 0xe8, + 0xa1, 0x67, 0x09, 0x1a, 0x98, 0x66, 0xf9, 0x79, 0x4d, 0xf3, 0x77, 0x0d, 0xc6, 0x6e, 0x52, 0x71, + 0xd7, 0xa7, 0x5e, 0xeb, 0x7f, 0x69, 0x9c, 0x9f, 0x6b, 0xc7, 0xa5, 0xfb, 0xb9, 0x5d, 0x58, 0x3c, + 0xab, 0x1e, 0x77, 0x05, 0x0e, 0x59, 0x87, 0x1f, 0x6a, 0xe5, 0x11, 0x75, 0x3e, 0x1d, 0xbd, 0x7b, + 0xde, 0xf9, 0xbe, 0x25, 0x05, 0x44, 0xa7, 0xfc, 0x2c, 0x09, 0xa9, 0xed, 0x4a, 0x83, 0xa1, 0x41, + 0x6f, 0x0e, 0xee, 0x97, 0xf5, 0xe0, 0xa6, 0x8d, 0xdc, 0xf1, 0xdc, 0xc8, 0xdc, 0xbf, 0x12, 0xc7, + 0xa5, 0x1f, 0x24, 0x60, 0x92, 0x56, 0x1a, 0x0c, 0xf3, 0xa0, 0xd4, 0xc2, 0x98, 0x1a, 0x79, 0x6e, + 0x05, 0xcd, 0xde, 0xf3, 0x6d, 0x9b, 0x78, 0xad, 0x75, 0xbc, 0x1d, 0x4e, 0x65, 0x33, 0x5b, 0x94, + 0x57, 0x3c, 0x4b, 0xfd, 0x50, 0xa0, 0x66, 0x73, 0x5b, 0x80, 0x7a, 0x0d, 0xa5, 0xb4, 0x1d, 0xd2, + 0x3c, 0x1f, 0x7d, 0x00, 0xc9, 0xff, 0x5f, 0xb9, 0x86, 0xae, 0xc3, 0x7b, 0x26, 0x15, 0xbe, 0xe7, + 0xd0, 0x2a, 0x3e, 0x6c, 0x50, 0x07, 0x8b, 0x06, 0xc5, 0x1e, 0xe5, 0xcc, 0xf7, 0x2a, 0x14, 0x5b, + 0x1c, 0x0b, 0x6a, 0xbb, 0xcc, 0x23, 0x9e, 0xd5, 0x6c, 0x61, 0xdf, 0x21, 0x07, 0xc4, 0x6a, 0x92, + 0x72, 0x93, 0xea, 0x1f, 0x7d, 0x05, 0x92, 0x6b, 0x2b, 0x6b, 0x68, 0x0d, 0x96, 0xff, 0x0b, 0x41, + 0x95, 0x51, 0x8e, 0x1d, 0x26, 0x30, 0x3d, 0xb2, 0xb8, 0xd0, 0x51, 0x1a, 0x52, 0xbf, 0x4a, 0x68, + 0x49, 0xe5, 0x98, 0x27, 0xe7, 0x3b, 0x46, 0x1a, 0xc6, 0x68, 0x07, 0x85, 0xeb, 0xd1, 0xe5, 0x5c, + 0xc6, 0x38, 0x28, 0x76, 0xf1, 0x72, 0x6d, 0x3d, 0xe8, 0x1f, 0x1e, 0x21, 0x74, 0x6a, 0x09, 0xfd, + 0x56, 0x83, 0x49, 0xd9, 0xa2, 0xa9, 0xa7, 0x99, 0x9c, 0xf8, 0x72, 0x2a, 0xdd, 0x07, 0xea, 0x6c, + 0x37, 0x72, 0x6b, 0xe7, 0x26, 0x55, 0xcf, 0x4f, 0x39, 0xba, 0x6c, 0x08, 0x54, 0xde, 0x97, 0x00, + 0x76, 0xd9, 0x86, 0xe5, 0x54, 0x2d, 0xa7, 0xce, 0xd1, 0xe5, 0x53, 0x39, 0xb3, 0x15, 0xfe, 0xca, + 0x35, 0x30, 0x9d, 0x46, 0xd0, 0x03, 0xb8, 0x20, 0x3b, 0x74, 0xe6, 0x0b, 0x34, 0x00, 0x34, 0x70, + 0xf3, 0xab, 0x4a, 0xfd, 0x57, 0xd0, 0x5c, 0xdc, 0x9e, 0x22, 0x24, 0x6b, 0x40, 0x66, 0xdb, 0xf3, + 0x98, 0x27, 0xbb, 0x95, 0x2d, 0x2a, 0x88, 0xd5, 0xe4, 0x43, 0x0b, 0xb8, 0xaa, 0x04, 0xbc, 0x8e, + 0x16, 0x7b, 0x1c, 0x26, 0x59, 0x0f, 0x2d, 0xd1, 0xa8, 0x86, 0xac, 0x3f, 0xd1, 0x00, 0xdd, 0xa4, + 0xa2, 0xbf, 0x3b, 0x5a, 0x39, 0xd7, 0x1f, 0x7d, 0x3b, 0x06, 0xaa, 0xf1, 0x96, 0x52, 0xe3, 0x4a, + 0xee, 0x72, 0x5c, 0x0d, 0xa9, 0x41, 0x99, 0x55, 0x5b, 0x46, 0x5b, 0xd6, 0x60, 0xd5, 0x45, 0xa1, + 0x1f, 0x69, 0x30, 0xbb, 0xc7, 0xb8, 0x90, 0x8c, 0x6a, 0xab, 0x52, 0xe4, 0xf9, 0x1a, 0xb1, 0x81, + 0xd2, 0x0d, 0x25, 0xfd, 0xed, 0xdc, 0xd5, 0xb8, 0x74, 0x97, 0x71, 0x21, 0x35, 0x50, 0x8f, 0xed, + 0x40, 0x8d, 0x28, 0x28, 0xb2, 0xbf, 0xd7, 0x8e, 0x4b, 0xbf, 0xd3, 0x50, 0x6d, 0x40, 0xb7, 0x86, + 0xab, 0xb1, 0x22, 0x51, 0x28, 0xe0, 0xc3, 0x86, 0x55, 0x69, 0x60, 0xde, 0x60, 0x7e, 0xb3, 0xaa, + 0xd2, 0xaf, 0x4c, 0xb1, 0xcf, 0x69, 0x15, 0x5b, 0x0e, 0x76, 0x9b, 0xa4, 0x42, 0x65, 0x47, 0x2c, + 0x13, 0xb5, 0xca, 0x2a, 0xbe, 0x4d, 0x9d, 0xe0, 0xb7, 0x47, 0xd9, 0x56, 0xcb, 0xc1, 0x95, 0xec, + 0x5d, 0x58, 0x3a, 0xab, 0x16, 0xcb, 0x34, 0x8a, 0xfa, 0xc3, 0x21, 0xeb, 0x4d, 0xf1, 0x29, 0x5c, + 0xac, 0x10, 0x9b, 0x36, 0x37, 0x09, 0xa7, 0x21, 0x87, 0x6c, 0x66, 0x90, 0x09, 0xa3, 0xc1, 0x2f, + 0x06, 0xc3, 0x06, 0xd2, 0x65, 0x65, 0xc3, 0x39, 0x34, 0xdb, 0x13, 0x48, 0x72, 0xa9, 0xf8, 0x4d, + 0x58, 0x2c, 0x39, 0x4c, 0x34, 0xa8, 0x17, 0x4a, 0x92, 0xce, 0x8b, 0x25, 0xd5, 0xfb, 0x3d, 0x29, + 0x36, 0xac, 0xe0, 0x91, 0x8d, 0xbf, 0xa4, 0x8f, 0x4b, 0x9f, 0xa7, 0x91, 0x80, 0xb9, 0x12, 0xde, + 0x08, 0x9e, 0x2a, 0xb1, 0x0a, 0xf0, 0x10, 0x2e, 0xd6, 0xcd, 0xbd, 0xcd, 0xc2, 0xcd, 0xe0, 0xe4, + 0xd8, 0xf5, 0xd8, 0x53, 0x5a, 0x11, 0xc3, 0x5a, 0x2c, 0x9b, 0x71, 0x98, 0x43, 0xbf, 0x16, 0x9e, + 0x4c, 0xa2, 0x8b, 0xc9, 0x55, 0x7d, 0x65, 0x39, 0xa9, 0x25, 0x52, 0xc5, 0x0c, 0x71, 0x83, 0x07, + 0x90, 0xc5, 0x1c, 0xe3, 0x29, 0x67, 0x4e, 0x71, 0x3e, 0x3e, 0x73, 0x54, 0xa8, 0x31, 0x56, 0xb0, + 0x2d, 0x9b, 0xae, 0x9f, 0x42, 0xae, 0x0f, 0x40, 0x9a, 0x7b, 0xb2, 0xa0, 0x5f, 0x43, 0x3b, 0x70, + 0xf3, 0x74, 0x41, 0xf7, 0x39, 0xf5, 0x4e, 0x8a, 0x79, 0x83, 0x1c, 0x50, 0xec, 0x52, 0xcf, 0xb6, + 0x38, 0x97, 0x71, 0x23, 0x18, 0x26, 0x95, 0x0a, 0xe5, 0xbc, 0xa7, 0xf8, 0xeb, 0xe6, 0x4b, 0x5c, + 0x11, 0x17, 0xcc, 0x5b, 0x90, 0x5c, 0x5b, 0xbd, 0x8e, 0x4a, 0x30, 0xb5, 0xf3, 0x96, 0x8d, 0x09, + 0x16, 0x94, 0xb8, 0x4c, 0xe8, 0x68, 0x05, 0xf4, 0xec, 0x50, 0x4f, 0xe5, 0x47, 0x3f, 0x4d, 0xc0, + 0x0c, 0x8c, 0x6f, 0x10, 0x6e, 0x55, 0x54, 0x43, 0x94, 0x18, 0xd3, 0xe0, 0xb5, 0x9e, 0x16, 0x69, + 0x66, 0x2c, 0x91, 0x1d, 0x7f, 0x58, 0x28, 0xed, 0xed, 0x14, 0x6e, 0xd3, 0x16, 0x4e, 0xc0, 0x17, + 0x5a, 0xb7, 0x65, 0xfa, 0x5c, 0x1b, 0x4b, 0xe6, 0x53, 0xc5, 0x37, 0x22, 0xef, 0xc5, 0x1c, 0x62, + 0x30, 0xe2, 0x8b, 0x86, 0x21, 0xff, 0x30, 0xcf, 0xfa, 0x36, 0x5d, 0x5f, 0x1a, 0x0c, 0x12, 0xec, + 0x19, 0x75, 0x36, 0xbe, 0x07, 0xd9, 0xa0, 0x03, 0x43, 0xe8, 0xa6, 0x47, 0x1c, 0xc1, 0xb1, 0x1c, + 0x84, 0xd6, 0x83, 0xc5, 0xb0, 0x2f, 0x43, 0x73, 0xe1, 0xa2, 0x1a, 0x45, 0xab, 0x9b, 0x30, 0x4a, + 0xaa, 0xb6, 0xe5, 0xa0, 0xf5, 0x9e, 0xad, 0x4e, 0xb5, 0x07, 0xa6, 0x9c, 0x21, 0x61, 0x16, 0x17, + 0xf2, 0xa2, 0x38, 0xa0, 0xd8, 0x72, 0x6a, 0xcc, 0xb3, 0x95, 0xbf, 0xcb, 0x4b, 0x30, 0x15, 0x37, + 0xc5, 0x48, 0x7f, 0xaf, 0x58, 0x7e, 0x7b, 0x60, 0xb7, 0xd8, 0x0f, 0xf5, 0x76, 0xe0, 0xd2, 0x27, + 0x27, 0xc5, 0x21, 0x1e, 0xf3, 0xc3, 0xc6, 0xfa, 0xa3, 0xf1, 0xae, 0xe7, 0xca, 0x69, 0x95, 0x6e, + 0xd7, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x32, 0x75, 0x62, 0xe4, 0x6f, 0x1a, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 999eead1237..1805eb4e96c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -14,6 +14,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" "github.com/grpc-ecosystem/grpc-gateway/runtime" @@ -32,7 +33,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -41,6 +42,7 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run var ( val string + e int32 ok bool err error _ = err @@ -211,6 +213,45 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "nonConventionalNameValue", err) } + val, ok = pathParams["enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value") + } + + e, err = runtime.Enum(val, NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "enum_value", err) + } + + protoReq.EnumValue = NumericEnum(e) + + val, ok = pathParams["path_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_enum_value") + } + + e, err = runtime.Enum(val, pathenum.PathEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_enum_value", err) + } + + protoReq.PathEnumValue = pathenum.PathEnum(e) + + val, ok = pathParams["nested_path_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "nested_path_enum_value") + } + + e, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "nested_path_enum_value", err) + } + + protoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e) + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -978,7 +1019,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 29ef445d5f7..257d32cefd0 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -5,6 +5,7 @@ package grpc.gateway.examples.examplepb; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; +import "examples/proto/pathenum/path_enum.proto"; import "examples/proto/sub/message.proto"; import "examples/proto/sub2/message.proto"; import "google/protobuf/timestamp.proto"; @@ -170,6 +171,8 @@ message ABitOfEverything { bytes bytes_value = 29; uint32 uint32_value = 13; NumericEnum enum_value = 14; + pathenum.PathEnum path_enum_value = 30; + pathenum.MessagePathEnum.NestedPathEnum nested_path_enum_value = 31; sfixed32 sfixed32_value = 15; sfixed64 sfixed64_value = 16; sint32 sint32_value = 17; @@ -226,9 +229,8 @@ service ABitOfEverythingService { // // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { - // TODO add enum_value option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 4e33b7ea27f..ad7797aa66b 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -265,6 +265,28 @@ ], "default": "ZERO" }, + { + "name": "path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nested_path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, { "name": "sfixed32_value", "in": "query", @@ -347,7 +369,7 @@ } } }, - "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}": { + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -479,6 +501,36 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "enum_value", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + { + "name": "path_enum_value", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "ABC", + "DEF" + ] + }, + { + "name": "nested_path_enum_value", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "GHI", + "JKL" + ] } ], "tags": [ @@ -985,6 +1037,14 @@ }, "description": "Nested is nested type." }, + "MessagePathEnumNestedPathEnum": { + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, "NestedDeepEnum": { "type": "string", "enum": [ @@ -1057,6 +1117,12 @@ "enum_value": { "$ref": "#/definitions/examplepbNumericEnum" }, + "path_enum_value": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nested_path_enum_value": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, "sfixed32_value": { "type": "integer", "format": "int32" @@ -1145,6 +1211,14 @@ "default": "ZERO", "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" }, + "pathenumPathEnum": { + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, "protobufEmpty": { "type": "object", "description": "service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.", diff --git a/examples/proto/pathenum/BUILD.bazel b/examples/proto/pathenum/BUILD.bazel new file mode 100644 index 00000000000..26b3efc1921 --- /dev/null +++ b/examples/proto/pathenum/BUILD.bazel @@ -0,0 +1,21 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +package(default_visibility = ["//visibility:public"]) + +proto_library( + name = "pathenum_proto", + srcs = ["path_enum.proto"], +) + +go_proto_library( + name = "pathenum_go_proto", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum", + proto = ":pathenum_proto", +) + +go_library( + name = "go_default_library", + embed = [":pathenum_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum", +) diff --git a/examples/proto/pathenum/path_enum.pb.go b/examples/proto/pathenum/path_enum.pb.go new file mode 100644 index 00000000000..6de95037484 --- /dev/null +++ b/examples/proto/pathenum/path_enum.pb.go @@ -0,0 +1,120 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: examples/proto/pathenum/path_enum.proto + +package pathenum // import "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type PathEnum int32 + +const ( + PathEnum_ABC PathEnum = 0 + PathEnum_DEF PathEnum = 1 +) + +var PathEnum_name = map[int32]string{ + 0: "ABC", + 1: "DEF", +} +var PathEnum_value = map[string]int32{ + "ABC": 0, + "DEF": 1, +} + +func (x PathEnum) String() string { + return proto.EnumName(PathEnum_name, int32(x)) +} +func (PathEnum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_path_enum_f14abf5268452f40, []int{0} +} + +type MessagePathEnum_NestedPathEnum int32 + +const ( + MessagePathEnum_GHI MessagePathEnum_NestedPathEnum = 0 + MessagePathEnum_JKL MessagePathEnum_NestedPathEnum = 1 +) + +var MessagePathEnum_NestedPathEnum_name = map[int32]string{ + 0: "GHI", + 1: "JKL", +} +var MessagePathEnum_NestedPathEnum_value = map[string]int32{ + "GHI": 0, + "JKL": 1, +} + +func (x MessagePathEnum_NestedPathEnum) String() string { + return proto.EnumName(MessagePathEnum_NestedPathEnum_name, int32(x)) +} +func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_path_enum_f14abf5268452f40, []int{0, 0} +} + +type MessagePathEnum struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MessagePathEnum) Reset() { *m = MessagePathEnum{} } +func (m *MessagePathEnum) String() string { return proto.CompactTextString(m) } +func (*MessagePathEnum) ProtoMessage() {} +func (*MessagePathEnum) Descriptor() ([]byte, []int) { + return fileDescriptor_path_enum_f14abf5268452f40, []int{0} +} +func (m *MessagePathEnum) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MessagePathEnum.Unmarshal(m, b) +} +func (m *MessagePathEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MessagePathEnum.Marshal(b, m, deterministic) +} +func (dst *MessagePathEnum) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessagePathEnum.Merge(dst, src) +} +func (m *MessagePathEnum) XXX_Size() int { + return xxx_messageInfo_MessagePathEnum.Size(m) +} +func (m *MessagePathEnum) XXX_DiscardUnknown() { + xxx_messageInfo_MessagePathEnum.DiscardUnknown(m) +} + +var xxx_messageInfo_MessagePathEnum proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.pathenum.MessagePathEnum") + proto.RegisterEnum("grpc.gateway.examples.pathenum.PathEnum", PathEnum_name, PathEnum_value) + proto.RegisterEnum("grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum", MessagePathEnum_NestedPathEnum_name, MessagePathEnum_NestedPathEnum_value) +} + +func init() { + proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_path_enum_f14abf5268452f40) +} + +var fileDescriptor_path_enum_f14abf5268452f40 = []byte{ + // 175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4f, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, + 0xcd, 0x2b, 0xcd, 0x05, 0x33, 0xe2, 0x41, 0x2c, 0x3d, 0xb0, 0x84, 0x90, 0x5c, 0x7a, 0x51, 0x41, + 0xb2, 0x5e, 0x7a, 0x62, 0x49, 0x6a, 0x79, 0x62, 0xa5, 0x1e, 0x4c, 0x97, 0x1e, 0x4c, 0xbd, 0x92, + 0x29, 0x17, 0xbf, 0x6f, 0x6a, 0x71, 0x71, 0x62, 0x7a, 0x6a, 0x40, 0x62, 0x49, 0x86, 0x2b, 0x48, + 0x48, 0x89, 0x8b, 0xcf, 0x2f, 0xb5, 0xb8, 0x24, 0x35, 0x05, 0x26, 0x22, 0xc4, 0xce, 0xc5, 0xec, + 0xee, 0xe1, 0x29, 0xc0, 0x00, 0x62, 0x78, 0x79, 0xfb, 0x08, 0x30, 0x6a, 0xc9, 0x70, 0x71, 0x20, + 0xcb, 0x3a, 0x3a, 0x39, 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x1c, 0xa2, 0xec, 0xd2, + 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x2e, 0xd0, 0x4d, 0x4d, 0xce, + 0x2f, 0xae, 0x2c, 0x2e, 0x49, 0x85, 0x72, 0xa1, 0x0e, 0xd2, 0xc7, 0xe1, 0x8d, 0x24, 0x36, 0x30, + 0xdf, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x9a, 0x10, 0xfc, 0xe8, 0x00, 0x00, 0x00, +} diff --git a/examples/proto/pathenum/path_enum.proto b/examples/proto/pathenum/path_enum.proto new file mode 100644 index 00000000000..5c926ff7132 --- /dev/null +++ b/examples/proto/pathenum/path_enum.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum"; +package grpc.gateway.examples.pathenum; + +enum PathEnum { + ABC = 0; + DEF = 1; +} + +message MessagePathEnum { + enum NestedPathEnum { + GHI = 0; + JKL = 1; + } +} diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 1a6e1cce527..319e58727e6 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -121,6 +121,25 @@ func (e *Enum) FQEN() string { return strings.Join(components, ".") } +// GoType returns a go type name for the enum type. +// It prefixes the type name with the package alias if +// its belonging package is not "currentPackage". +func (e *Enum) GoType(currentPackage string) string { + var components []string + components = append(components, e.Outers...) + components = append(components, e.GetName()) + + name := strings.Join(components, "_") + if e.File.GoPkg.Path == currentPackage { + return name + } + pkg := e.File.GoPkg.Name + if alias := e.File.GoPkg.Alias; alias != "" { + pkg = alias + } + return fmt.Sprintf("%s.%s", pkg, name) +} + // Service wraps descriptor.ServiceDescriptorProto for richer features. type Service struct { // File is the file where this service is defined. @@ -338,10 +357,9 @@ var ( descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.String", // FieldDescriptorProto_TYPE_GROUP // FieldDescriptorProto_TYPE_MESSAGE - descriptor.FieldDescriptorProto_TYPE_BYTES: "runtime.Bytes", - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32", - // FieldDescriptorProto_TYPE_ENUM - // TODO(yugui) Handle Enum + descriptor.FieldDescriptorProto_TYPE_BYTES: "runtime.Bytes", + descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32", + descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.Enum", descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32", descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64", descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32", @@ -362,9 +380,8 @@ var ( // FieldDescriptorProto_TYPE_MESSAGE // FieldDescriptorProto_TYPE_BYTES // TODO(yugui) Handle bytes - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32P", - // FieldDescriptorProto_TYPE_ENUM - // TODO(yugui) Handle Enum + descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32P", + descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumP", descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32P", descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64P", descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32P", diff --git a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel index 517909b5046..3ab955c1fea 100644 --- a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", "@org_golang_google_genproto//googleapis/api/annotations:go_default_library", ], diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index a5ed4ede518..a619fae399e 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -127,6 +127,7 @@ func (g *generator) generate(file *descriptor.File) (string, error) { } for _, svc := range file.Services { for _, m := range svc.Methods { + imports = append(imports, g.addEnumPathParamImports(file, m, pkgSeen)...) pkg := m.RequestType.File.GoPkg if len(m.Bindings) == 0 || pkg == file.GoPkg || pkgSeen[pkg.Path] { @@ -142,5 +143,25 @@ func (g *generator) generate(file *descriptor.File) (string, error) { UseRequestContext: g.useRequestContext, RegisterFuncSuffix: g.registerFuncSuffix, } - return applyTemplate(params) + return applyTemplate(params, g.reg) +} + +// addEnumPathParamImports handles adding import of enum path parameter go packages +func (g *generator) addEnumPathParamImports(file *descriptor.File, m *descriptor.Method, pkgSeen map[string]bool) []descriptor.GoPackage { + var imports []descriptor.GoPackage + for _, b := range m.Bindings { + for _, p := range b.PathParams { + e, err := g.reg.LookupEnum("", p.Target.GetTypeName()) + if err != nil { + continue + } + pkg := e.File.GoPkg + if pkg == file.GoPkg || pkgSeen[pkg.Path] { + continue + } + pkgSeen[pkg.Path] = true + imports = append(imports, pkg) + } + } + return imports } diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 42c42c3ccaf..7d3aa2f2b4d 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -7,6 +7,7 @@ import ( "text/template" "github.com/golang/glog" + pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) @@ -20,6 +21,7 @@ type param struct { type binding struct { *descriptor.Binding + Registry *descriptor.Registry } // HasQueryParam determines if the binding needs parameters in query string. @@ -54,6 +56,25 @@ func (b binding) QueryParamFilter() queryParamFilter { return queryParamFilter{utilities.NewDoubleArray(seqs)} } +// HasEnumPathParam returns true if the path parameter slice contains a parameter that maps to an enum proto field, if not false is returned. +func (b binding) HasEnumPathParam() bool { + for _, p := range b.PathParams { + if p.Target.GetType() == pbdescriptor.FieldDescriptorProto_TYPE_ENUM { + return true + } + } + return false +} + +// LookupEnum looks up a enum type by path parameter. +func (b binding) LookupEnum(p descriptor.Parameter) *descriptor.Enum { + e, err := b.Registry.LookupEnum("", p.Target.GetTypeName()) + if err != nil { + return nil + } + return e +} + // queryParamFilter is a wrapper of utilities.DoubleArray which provides String() to output DoubleArray.Encoding in a stable and predictable format. type queryParamFilter struct { *utilities.DoubleArray @@ -74,7 +95,7 @@ type trailerParams struct { RegisterFuncSuffix string } -func applyTemplate(p param) (string, error) { +func applyTemplate(p param, reg *descriptor.Registry) (string, error) { w := bytes.NewBuffer(nil) if err := headerTemplate.Execute(w, p); err != nil { return "", err @@ -90,7 +111,7 @@ func applyTemplate(p param) (string, error) { meth.Name = &methName for _, b := range meth.Bindings { methodWithBindingsSeen = true - if err := handlerTemplate.Execute(w, binding{Binding: b}); err != nil { + if err := handlerTemplate.Execute(w, binding{Binding: b, Registry: reg}); err != nil { return "", err } } @@ -217,23 +238,33 @@ var ( {{if .PathParams}} var ( val string +{{- if .HasEnumPathParam}} + e int32 +{{- end}} ok bool err error _ = err ) + {{$binding := .}} {{range $param := .PathParams}} + {{$enum := $binding.LookupEnum $param}} val, ok = pathParams[{{$param | printf "%q"}}] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", {{$param | printf "%q"}}) } -{{if $param.IsNestedProto3 }} +{{if $param.IsNestedProto3}} err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) +{{else if $enum}} + e, err = {{$param.ConvertFuncExpr}}(val, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) {{else}} {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val) {{end}} if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } +{{if $enum}} + {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(e) +{{end}} {{end}} {{end}} {{if .HasQueryParam}} diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index d28c943e1d3..3f1313a7ddc 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -77,7 +77,7 @@ func TestApplyTemplateHeader(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -222,7 +222,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -383,7 +383,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 3f82a52a7a5..a377f33e692 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -583,6 +583,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re for _, parameter := range b.PathParams { var paramType, paramFormat, desc string + var enumNames []string switch pt := parameter.Target.GetType(); pt { case pbdescriptor.FieldDescriptorProto_TYPE_GROUP, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { @@ -594,8 +595,13 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } case pbdescriptor.FieldDescriptorProto_TYPE_ENUM: - paramType = fullyQualifiedNameToSwaggerName(parameter.Target.GetTypeName(), reg) + paramType = "string" paramFormat = "" + enum, err := reg.LookupEnum("", parameter.Target.GetTypeName()) + if err != nil { + return err + } + enumNames = listEnumNames(enum) default: var ok bool paramType, paramFormat, ok = primitiveSchema(pt) @@ -616,6 +622,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re // Parameters in gRPC-Gateway can only be strings? Type: paramType, Format: paramFormat, + Enum: enumNames, }) } // Now check if there is a body parameter diff --git a/runtime/convert.go b/runtime/convert.go index 903ae23407b..5000ff19064 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -2,6 +2,7 @@ package runtime import ( "encoding/base64" + "fmt" "strconv" "github.com/golang/protobuf/jsonpb" @@ -85,3 +86,23 @@ func Duration(val string) (*duration.Duration, error) { err := jsonpb.UnmarshalString(val, r) return r, err } + +// Enum converts the given string into an int32 that should be type casted into the +// correct enum proto type. +func Enum(val string, enumValMap map[string]int32) (int32, error) { + e, ok := enumValMap[val] + if ok { + return e, nil + } + + i, err := Int32(val) + if err != nil { + return 0, fmt.Errorf("%s is not valid", val) + } + for _, v := range enumValMap { + if v == i { + return i, nil + } + } + return 0, fmt.Errorf("%s is not valid", val) +} From c30b7d6e6c9cd56c65d9aba33cf272b4aa367a87 Mon Sep 17 00:00:00 2001 From: Sergey Shepelev Date: Thu, 9 Aug 2018 16:11:38 +0500 Subject: [PATCH 0033/1518] install-protoc was checking version from wrong executable path --- .travis/install-protoc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/install-protoc.sh b/.travis/install-protoc.sh index d96c259272a..dee80d861b1 100755 --- a/.travis/install-protoc.sh +++ b/.travis/install-protoc.sh @@ -4,7 +4,7 @@ if test -z "${protoc_version}"; then echo "Usage: .travis/install-protoc.sh protoc-version" exit 1 fi -if [ "`$HOME/local/bin/protoc-${protoc_version} --version 2>/dev/null | cut -d' ' -f 2`" != ${protoc_version} ]; then +if [ "`$HOME/local/bin/protoc --version 2>/dev/null | cut -d' ' -f 2`" != ${protoc_version} ]; then rm -rf $HOME/local/bin $HOME/local/include mkdir -p $HOME/tmp $HOME/local From 0e59487ff339a39252bdbef3ce34f39deecd8195 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 1 Sep 2018 20:50:48 +0100 Subject: [PATCH 0034/1518] Add missing modules to browser example This was failing in CI, hopefully this fixes it. --- examples/browser/package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/browser/package.json b/examples/browser/package.json index 963f4cd6c30..8771fa5f03a 100644 --- a/examples/browser/package.json +++ b/examples/browser/package.json @@ -18,6 +18,10 @@ "jasmine": "^2.4.1", "phantomjs": "^2.1.7", "swagger-client": "^2.1.28", - "webpack-stream": "^3.2.0" + "webpack-stream": "^3.2.0", + "bower-logger": "^0.2.2", + "mout": "^1.1.0", + "bower-config": "^0.6.2", + "configstore": "^4.0.0" } } From ab0345bb328757bfef2f3d7d4e642e182eb985b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Ros=C3=A9n?= Date: Sat, 1 Sep 2018 23:54:39 +0200 Subject: [PATCH 0035/1518] Added support for path param repeated primitive fields Added conversion functions for repeated path params Updated bytes converter to support URL encoded base64 strings Added support for repeated primitive path params in protoc-gen-grpc-gateway Added support for repeated primitive path params in protoc-gen-swagger Added --repeated_path_param_separator cmd line param to support setting separator to `csv`, `ssv`, `pipes` and `tsv` Re-generated examples Added ABitOfEverythingRepeated to validate repeated path parameter functionality Added GetRepeatedQuery rpc endpoint Updated browser tests to test GetRepeatedQuery rpc endpoint Updated integration tests to test GetRepeatedQuery rpc endpoint Added GetRepeatedQuery to ABitOfEverythingServer implementation Added missing reflect.DeepEqual test Change separator type from string to rune Fixed slice duplication in string slice conversion method Reverted --allowRepeatedFieldsInBody in swagger generator Changed TODO of bytes slice proto2 function Corrected if-statement releated to repeated fields in resolveFieldPath function Rebase --- .../a_bit_of_everything_service.spec.js | 36 ++ examples/clients/abe/BUILD.bazel | 1 + .../abe/a_bit_of_everything_service_api.go | 104 ++++ .../examplepb_a_bit_of_everything_repeated.go | 46 ++ examples/integration/integration_test.go | 121 ++++ .../proto/examplepb/a_bit_of_everything.pb.go | 533 ++++++++++++------ .../examplepb/a_bit_of_everything.pb.gw.go | 232 ++++++++ .../proto/examplepb/a_bit_of_everything.proto | 28 + .../a_bit_of_everything.swagger.json | 346 ++++++++++++ examples/server/a_bit_of_everything.go | 8 + .../descriptor/registry.go | 47 ++ .../descriptor/services.go | 10 +- .../descriptor/services_test.go | 2 +- protoc-gen-grpc-gateway/descriptor/types.go | 64 ++- .../gengateway/template.go | 34 +- protoc-gen-grpc-gateway/main.go | 21 +- protoc-gen-swagger/genswagger/template.go | 31 +- protoc-gen-swagger/genswagger/types.go | 20 +- protoc-gen-swagger/main.go | 19 +- runtime/convert.go | 148 ++++- 20 files changed, 1651 insertions(+), 200 deletions(-) create mode 100644 examples/clients/abe/examplepb_a_bit_of_everything_repeated.go diff --git a/examples/browser/a_bit_of_everything_service.spec.js b/examples/browser/a_bit_of_everything_service.spec.js index 7172b806fdf..c67d56de9fb 100644 --- a/examples/browser/a_bit_of_everything_service.spec.js +++ b/examples/browser/a_bit_of_everything_service.spec.js @@ -187,5 +187,41 @@ describe('ABitOfEverythingService', function() { }).finally(done); }); }); + + describe('GetRepeatedQuery', function() { + var repeated; + var expected = { + path_repeated_float_value: [1.5, -1.5], + path_repeated_double_value: [2.5, -2.5], + path_repeated_int64_value: ["4294967296", "-4294967296"], + path_repeated_uint64_value: ["0", "9223372036854775807"], + path_repeated_int32_value: [2147483647, -2147483648], + path_repeated_fixed64_value: ["0", "9223372036854775807"], + path_repeated_fixed32_value: [0, 4294967295], + path_repeated_bool_value: [true, false], + path_repeated_string_value: ["foo", "bar"], + path_repeated_bytes_value: ["AA==", "_w=="], + path_repeated_uint32_value: [4294967295, 0], + path_repeated_enum_value: ["ONE", "ONE"], + path_repeated_sfixed32_value: [-2147483648, 2147483647], + path_repeated_sfixed64_value: ["-4294967296", "4294967296"], + path_repeated_sint32_value: [2147483646, -2147483647], + path_repeated_sint64_value: ["4611686018427387903", "-4611686018427387904"] + }; + + beforeEach(function(done) { + client.ABitOfEverythingService.GetRepeatedQuery(expected).then(function(resp) { + repeated = resp.obj; + }).catch(function(err) { + done.fail(err); + }).then(done); + }); + + it('should echo the request back', function() { + // API will echo a non URL safe encoding + expected.path_repeated_bytes_value = ["AA==", "/w=="]; + expect(repeated).toEqual(expected); + }); + }); }); diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index f70ac9305bb..8603ce20e7f 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "echo_service_api.go", "enum_helper.go", "examplepb_a_bit_of_everything.go", + "examplepb_a_bit_of_everything_repeated.go", "examplepb_body.go", "examplepb_numeric_enum.go", "message_path_enum_nested_path_enum.go", diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 9e426740f2d..d1f2a1f95e9 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -634,6 +634,110 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName strin return successPayload, localVarAPIResponse, err } +/** + * + * + * @param pathRepeatedFloatValue repeated values. they are comma-separated in path + * @param pathRepeatedDoubleValue + * @param pathRepeatedInt64Value + * @param pathRepeatedUint64Value + * @param pathRepeatedInt32Value + * @param pathRepeatedFixed64Value + * @param pathRepeatedFixed32Value + * @param pathRepeatedBoolValue + * @param pathRepeatedStringValue + * @param pathRepeatedBytesValue + * @param pathRepeatedUint32Value + * @param pathRepeatedEnumValue + * @param pathRepeatedSfixed32Value + * @param pathRepeatedSfixed64Value + * @param pathRepeatedSint32Value + * @param pathRepeatedSint64Value + * @return *ExamplepbABitOfEverythingRepeated + */ +func (a ABitOfEverythingServiceApi) GetRepeatedQuery(pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (*ExamplepbABitOfEverythingRepeated, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_float_value"+"}", fmt.Sprintf("%v", pathRepeatedFloatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_double_value"+"}", fmt.Sprintf("%v", pathRepeatedDoubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int64_value"+"}", fmt.Sprintf("%v", pathRepeatedInt64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint64_value"+"}", fmt.Sprintf("%v", pathRepeatedUint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int32_value"+"}", fmt.Sprintf("%v", pathRepeatedInt32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bool_value"+"}", fmt.Sprintf("%v", pathRepeatedBoolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_string_value"+"}", fmt.Sprintf("%v", pathRepeatedStringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bytes_value"+"}", fmt.Sprintf("%v", pathRepeatedBytesValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint32_value"+"}", fmt.Sprintf("%v", pathRepeatedUint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_enum_value"+"}", fmt.Sprintf("%v", pathRepeatedEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint32_value"+"}", fmt.Sprintf("%v", pathRepeatedSint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint64_value"+"}", fmt.Sprintf("%v", pathRepeatedSint64Value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new(ExamplepbABitOfEverythingRepeated) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "GetRepeatedQuery", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + /** * * diff --git a/examples/clients/abe/examplepb_a_bit_of_everything_repeated.go b/examples/clients/abe/examplepb_a_bit_of_everything_repeated.go new file mode 100644 index 00000000000..35f588ccf3d --- /dev/null +++ b/examples/clients/abe/examplepb_a_bit_of_everything_repeated.go @@ -0,0 +1,46 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: 1.0 + * Contact: none@example.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package abe + +type ExamplepbABitOfEverythingRepeated struct { + + PathRepeatedFloatValue []float32 `json:"path_repeated_float_value,omitempty"` + + PathRepeatedDoubleValue []float64 `json:"path_repeated_double_value,omitempty"` + + PathRepeatedInt64Value []string `json:"path_repeated_int64_value,omitempty"` + + PathRepeatedUint64Value []string `json:"path_repeated_uint64_value,omitempty"` + + PathRepeatedInt32Value []int32 `json:"path_repeated_int32_value,omitempty"` + + PathRepeatedFixed64Value []string `json:"path_repeated_fixed64_value,omitempty"` + + PathRepeatedFixed32Value []int64 `json:"path_repeated_fixed32_value,omitempty"` + + PathRepeatedBoolValue []bool `json:"path_repeated_bool_value,omitempty"` + + PathRepeatedStringValue []string `json:"path_repeated_string_value,omitempty"` + + PathRepeatedBytesValue []string `json:"path_repeated_bytes_value,omitempty"` + + PathRepeatedUint32Value []int64 `json:"path_repeated_uint32_value,omitempty"` + + PathRepeatedEnumValue []ExamplepbNumericEnum `json:"path_repeated_enum_value,omitempty"` + + PathRepeatedSfixed32Value []int32 `json:"path_repeated_sfixed32_value,omitempty"` + + PathRepeatedSfixed64Value []string `json:"path_repeated_sfixed64_value,omitempty"` + + PathRepeatedSint32Value []int32 `json:"path_repeated_sint32_value,omitempty"` + + PathRepeatedSint64Value []string `json:"path_repeated_sint64_value,omitempty"` +} diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 518c9c9baab..ea401ac7db0 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -3,6 +3,7 @@ package integration_test import ( "bytes" "context" + "encoding/base64" "encoding/json" "fmt" "io" @@ -266,6 +267,7 @@ func TestABE(t *testing.T) { testABEBulkEcho(t, 8080) testABEBulkEchoZeroLength(t, 8080) testAdditionalBindings(t, 8080) + testABERepeated(t, 8080) } func testABECreate(t *testing.T, port int) { @@ -835,6 +837,125 @@ func testAdditionalBindings(t *testing.T, port int) { } } +func testABERepeated(t *testing.T, port int) { + f := func(v reflect.Value) string { + var f func(v reflect.Value, idx int) string + s := make([]string, v.Len()) + switch v.Index(0).Kind() { + case reflect.Slice: + f = func(v reflect.Value, idx int) string { + t := v.Index(idx).Type().Elem().Kind() + if t == reflect.Uint8 { + return base64.URLEncoding.EncodeToString(v.Index(idx).Interface().([]byte)) + } + // Could handle more elegantly + panic("unknown slice of type: " + t.String()) + } + default: + f = func(v reflect.Value, idx int) string { + return fmt.Sprintf("%v", v.Index(idx).Interface()) + } + } + for i := 0; i < v.Len(); i++ { + s[i] = f(v, i) + } + return strings.Join(s, ",") + } + want := gw.ABitOfEverythingRepeated{ + PathRepeatedFloatValue: []float32{ + 1.5, + -1.5, + }, + PathRepeatedDoubleValue: []float64{ + 2.5, + -2.5, + }, + PathRepeatedInt64Value: []int64{ + 4294967296, + -4294967296, + }, + PathRepeatedUint64Value: []uint64{ + 0, + 9223372036854775807, + }, + PathRepeatedInt32Value: []int32{ + 2147483647, + -2147483648, + }, + PathRepeatedFixed64Value: []uint64{ + 0, + 9223372036854775807, + }, + PathRepeatedFixed32Value: []uint32{ + 0, + 4294967295, + }, + PathRepeatedBoolValue: []bool{ + true, + false, + }, + PathRepeatedStringValue: []string{ + "foo", + "bar", + }, + PathRepeatedBytesValue: [][]byte{ + []byte{0x00}, + []byte{0xFF}, + }, + PathRepeatedUint32Value: []uint32{ + 0, + 4294967295, + }, + PathRepeatedEnumValue: []gw.NumericEnum{ + gw.NumericEnum_ZERO, + gw.NumericEnum_ONE, + }, + PathRepeatedSfixed32Value: []int32{ + 2147483647, + -2147483648, + }, + PathRepeatedSfixed64Value: []int64{ + 4294967296, + -4294967296, + }, + PathRepeatedSint32Value: []int32{ + 2147483647, + -2147483648, + }, + PathRepeatedSint64Value: []int64{ + 4611686018427387903, + -4611686018427387904, + }, + } + url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything_repeated/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s", port, f(reflect.ValueOf(want.PathRepeatedFloatValue)), f(reflect.ValueOf(want.PathRepeatedDoubleValue)), f(reflect.ValueOf(want.PathRepeatedInt64Value)), f(reflect.ValueOf(want.PathRepeatedUint64Value)), f(reflect.ValueOf(want.PathRepeatedInt32Value)), f(reflect.ValueOf(want.PathRepeatedFixed64Value)), f(reflect.ValueOf(want.PathRepeatedFixed32Value)), f(reflect.ValueOf(want.PathRepeatedBoolValue)), f(reflect.ValueOf(want.PathRepeatedStringValue)), f(reflect.ValueOf(want.PathRepeatedBytesValue)), f(reflect.ValueOf(want.PathRepeatedUint32Value)), f(reflect.ValueOf(want.PathRepeatedEnumValue)), f(reflect.ValueOf(want.PathRepeatedSfixed32Value)), f(reflect.ValueOf(want.PathRepeatedSfixed64Value)), f(reflect.ValueOf(want.PathRepeatedSint32Value)), f(reflect.ValueOf(want.PathRepeatedSint64Value))) + + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Post(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + var msg gw.ABitOfEverythingRepeated + if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { + t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + return + } + if got := msg; !reflect.DeepEqual(got, want) { + t.Errorf("msg= %v; want %v", &got, &want) + } +} + func TestTimeout(t *testing.T) { url := "http://localhost:8080/v2/example/timeout" req, err := http.NewRequest("GET", url, nil) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index bc210b5e9a8..e53bcbd4fda 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -54,7 +54,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0} } // DeepEnum is one or zero. @@ -80,7 +80,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -128,7 +128,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -466,7 +466,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{0, 0} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -507,6 +507,166 @@ func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { return ABitOfEverything_Nested_FALSE } +// ABitOfEverythingRepeated is used to validate repeated path parameter functionality +type ABitOfEverythingRepeated struct { + // repeated values. they are comma-separated in path + PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue,proto3" json:"path_repeated_float_value,omitempty"` + PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue,proto3" json:"path_repeated_double_value,omitempty"` + PathRepeatedInt64Value []int64 `protobuf:"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value,proto3" json:"path_repeated_int64_value,omitempty"` + PathRepeatedUint64Value []uint64 `protobuf:"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value,proto3" json:"path_repeated_uint64_value,omitempty"` + PathRepeatedInt32Value []int32 `protobuf:"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value,proto3" json:"path_repeated_int32_value,omitempty"` + PathRepeatedFixed64Value []uint64 `protobuf:"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value,proto3" json:"path_repeated_fixed64_value,omitempty"` + PathRepeatedFixed32Value []uint32 `protobuf:"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value,proto3" json:"path_repeated_fixed32_value,omitempty"` + PathRepeatedBoolValue []bool `protobuf:"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue,proto3" json:"path_repeated_bool_value,omitempty"` + PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3" json:"path_repeated_string_value,omitempty"` + PathRepeatedBytesValue [][]byte `protobuf:"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3" json:"path_repeated_bytes_value,omitempty"` + PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3" json:"path_repeated_uint32_value,omitempty"` + PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` + PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3" json:"path_repeated_sfixed32_value,omitempty"` + PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` + PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` + PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value,proto3" json:"path_repeated_sint64_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeated{} } +func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } +func (*ABitOfEverythingRepeated) ProtoMessage() {} +func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{1} +} +func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) +} +func (m *ABitOfEverythingRepeated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ABitOfEverythingRepeated.Marshal(b, m, deterministic) +} +func (dst *ABitOfEverythingRepeated) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverythingRepeated.Merge(dst, src) +} +func (m *ABitOfEverythingRepeated) XXX_Size() int { + return xxx_messageInfo_ABitOfEverythingRepeated.Size(m) +} +func (m *ABitOfEverythingRepeated) XXX_DiscardUnknown() { + xxx_messageInfo_ABitOfEverythingRepeated.DiscardUnknown(m) +} + +var xxx_messageInfo_ABitOfEverythingRepeated proto.InternalMessageInfo + +func (m *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float32 { + if m != nil { + return m.PathRepeatedFloatValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedDoubleValue() []float64 { + if m != nil { + return m.PathRepeatedDoubleValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedInt64Value() []int64 { + if m != nil { + return m.PathRepeatedInt64Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedUint64Value() []uint64 { + if m != nil { + return m.PathRepeatedUint64Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedInt32Value() []int32 { + if m != nil { + return m.PathRepeatedInt32Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedFixed64Value() []uint64 { + if m != nil { + return m.PathRepeatedFixed64Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedFixed32Value() []uint32 { + if m != nil { + return m.PathRepeatedFixed32Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedBoolValue() []bool { + if m != nil { + return m.PathRepeatedBoolValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedStringValue() []string { + if m != nil { + return m.PathRepeatedStringValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedBytesValue() [][]byte { + if m != nil { + return m.PathRepeatedBytesValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedUint32Value() []uint32 { + if m != nil { + return m.PathRepeatedUint32Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedEnumValue() []NumericEnum { + if m != nil { + return m.PathRepeatedEnumValue + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedSfixed32Value() []int32 { + if m != nil { + return m.PathRepeatedSfixed32Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedSfixed64Value() []int64 { + if m != nil { + return m.PathRepeatedSfixed64Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedSint32Value() []int32 { + if m != nil { + return m.PathRepeatedSint32Value + } + return nil +} + +func (m *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 { + if m != nil { + return m.PathRepeatedSint64Value + } + return nil +} + type Body struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -518,7 +678,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{1} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -557,7 +717,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8, []int{2} + return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -597,6 +757,7 @@ func init() { proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MappedNestedValueEntry") proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MappedStringValueEntry") proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.Nested") + proto.RegisterType((*ABitOfEverythingRepeated)(nil), "grpc.gateway.examples.examplepb.ABitOfEverythingRepeated") proto.RegisterType((*Body)(nil), "grpc.gateway.examples.examplepb.Body") proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.examplepb.MessageWithBody") proto.RegisterEnum("grpc.gateway.examples.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) @@ -624,6 +785,7 @@ type ABitOfEverythingServiceClient interface { Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) + GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) // Echo allows posting a StringMessage value. // // It also exposes multiple bindings. @@ -702,6 +864,15 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf return out, nil } +func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) { + out := new(ABitOfEverythingRepeated) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, opts...) @@ -776,6 +947,7 @@ type ABitOfEverythingServiceServer interface { Update(context.Context, *ABitOfEverything) (*empty.Empty, error) Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) + GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) // Echo allows posting a StringMessage value. // // It also exposes multiple bindings. @@ -904,6 +1076,24 @@ func _ABitOfEverythingService_GetQuery_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_GetRepeatedQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverythingRepeated) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, req.(*ABitOfEverythingRepeated)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sub.StringMessage) if err := dec(in); err != nil { @@ -1058,6 +1248,10 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetQuery", Handler: _ABitOfEverythingService_GetQuery_Handler, }, + { + MethodName: "GetRepeatedQuery", + Handler: _ABitOfEverythingService_GetRepeatedQuery_Handler, + }, { MethodName: "Echo", Handler: _ABitOfEverythingService_Echo_Handler, @@ -1220,156 +1414,179 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8) -} - -var fileDescriptor_a_bit_of_everything_70e21b42d3c87ea8 = []byte{ - // 2351 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4d, 0x6f, 0x1b, 0xc7, - 0xf9, 0xd7, 0x92, 0x14, 0x2d, 0x3d, 0x7a, 0xa3, 0x46, 0x8e, 0x2c, 0x33, 0x4a, 0x34, 0x66, 0x9c, - 0x7f, 0x18, 0x25, 0xdc, 0x95, 0x68, 0xfd, 0x03, 0x5b, 0x45, 0x93, 0x52, 0x2f, 0xb1, 0x15, 0x27, - 0xb2, 0xbc, 0x76, 0x5c, 0xc3, 0xb5, 0x2b, 0x0c, 0xc9, 0x21, 0xb9, 0x36, 0x77, 0x67, 0xbb, 0x33, - 0x2b, 0x89, 0x65, 0xd9, 0x57, 0xa0, 0x45, 0xdb, 0x43, 0x01, 0xf5, 0xd6, 0x43, 0xcf, 0xfd, 0x02, - 0x3d, 0xf5, 0x50, 0xf4, 0x90, 0x5e, 0x72, 0x6b, 0x81, 0x1c, 0x5a, 0xa0, 0x97, 0xb6, 0x40, 0xfb, - 0x2d, 0x8a, 0x99, 0xdd, 0xa5, 0x96, 0x94, 0x58, 0x99, 0x76, 0x91, 0x8b, 0xb4, 0x33, 0xf3, 0x9b, - 0xdf, 0xf3, 0xcc, 0xf3, 0x36, 0xcf, 0x10, 0x8a, 0xf4, 0x88, 0xd8, 0x6e, 0x93, 0x72, 0xc3, 0xf5, - 0x98, 0x60, 0x46, 0x38, 0x74, 0xcb, 0x06, 0xd9, 0x2f, 0x5b, 0x62, 0x9f, 0xd5, 0xf6, 0xe9, 0x01, - 0xf5, 0x5a, 0xa2, 0x61, 0x39, 0x75, 0x5d, 0x61, 0xd0, 0x52, 0xdd, 0x73, 0x2b, 0x7a, 0x9d, 0x08, - 0x7a, 0x48, 0x5a, 0x7a, 0x44, 0xa0, 0x77, 0xb7, 0x66, 0x17, 0xeb, 0x8c, 0xd5, 0x9b, 0xd4, 0x20, - 0xae, 0x65, 0x10, 0xc7, 0x61, 0x82, 0x08, 0x8b, 0x39, 0x3c, 0xd8, 0x9e, 0x7d, 0x35, 0x5c, 0x55, - 0xa3, 0xb2, 0x5f, 0x33, 0xa8, 0xed, 0x8a, 0x56, 0xb8, 0xf8, 0x7a, 0xff, 0x62, 0xd5, 0xf7, 0xd4, - 0xee, 0x70, 0xfd, 0xad, 0x3e, 0x7d, 0x5d, 0x22, 0x1a, 0xd4, 0xf1, 0x6d, 0xf5, 0xb1, 0x2f, 0xbf, - 0x42, 0x20, 0xee, 0x03, 0x72, 0xbf, 0x6c, 0xd8, 0x94, 0x73, 0x52, 0xa7, 0x21, 0xe2, 0xca, 0x69, - 0x44, 0xb1, 0x0f, 0xb2, 0xd4, 0xaf, 0x8d, 0xb0, 0x6c, 0xca, 0x05, 0xb1, 0xdd, 0x10, 0xf0, 0xae, - 0xfa, 0x57, 0x29, 0xd4, 0xa9, 0x53, 0xe0, 0x87, 0xa4, 0x5e, 0xa7, 0x9e, 0xc1, 0x5c, 0x75, 0xda, - 0xd3, 0x27, 0xcf, 0xfd, 0x71, 0x0e, 0x32, 0xa5, 0x0d, 0x4b, 0xdc, 0xa9, 0x6d, 0x77, 0x6d, 0x8a, - 0x9e, 0xc0, 0x14, 0xb7, 0x9c, 0x7a, 0x93, 0xee, 0x3b, 0x94, 0x0b, 0x5a, 0x5d, 0xb8, 0x8c, 0xb5, - 0xfc, 0x44, 0xf1, 0xba, 0x7e, 0x8e, 0x95, 0xf5, 0x7e, 0x26, 0x7d, 0x57, 0xed, 0x37, 0x27, 0x03, - 0xba, 0x60, 0x84, 0x1a, 0x90, 0xf2, 0x7d, 0xab, 0xba, 0xa0, 0x61, 0x2d, 0x3f, 0xbe, 0x71, 0xff, - 0xb8, 0x74, 0xf7, 0xfb, 0x9a, 0xf6, 0x33, 0xed, 0xf6, 0x37, 0x48, 0xa1, 0x56, 0x2a, 0x7c, 0xb8, - 0x52, 0xb8, 0xf1, 0xa4, 0x7d, 0xbd, 0x53, 0x88, 0x0f, 0xd7, 0x86, 0x19, 0xae, 0x16, 0x3b, 0xa6, - 0x92, 0x80, 0xf6, 0x20, 0x1d, 0x9e, 0x20, 0x81, 0x93, 0x2f, 0x75, 0x82, 0x90, 0x07, 0x2d, 0xc1, - 0x44, 0xad, 0xc9, 0x88, 0xd8, 0x3f, 0x20, 0x4d, 0x9f, 0x2e, 0x24, 0xb1, 0x96, 0x4f, 0x98, 0xa0, - 0xa6, 0x1e, 0xc8, 0x19, 0x74, 0x05, 0x26, 0xab, 0xcc, 0x2f, 0x37, 0x69, 0x88, 0x48, 0x61, 0x2d, - 0xaf, 0x99, 0x13, 0xc1, 0x5c, 0x00, 0x59, 0x82, 0x09, 0xcb, 0x11, 0xef, 0xad, 0x85, 0x88, 0x51, - 0xac, 0xe5, 0x93, 0x26, 0xa8, 0xa9, 0x2e, 0x87, 0x1f, 0x47, 0xa4, 0xb1, 0x96, 0x4f, 0x99, 0x13, - 0x7e, 0x0c, 0x12, 0x70, 0x5c, 0x2b, 0x86, 0x88, 0x0b, 0x58, 0xcb, 0x8f, 0x2a, 0x8e, 0x6b, 0xc5, - 0x00, 0xf0, 0x06, 0x4c, 0xd5, 0xac, 0x23, 0x5a, 0xed, 0x92, 0x8c, 0x61, 0x2d, 0x9f, 0x36, 0x27, - 0xc3, 0xc9, 0x5e, 0x50, 0x97, 0x67, 0x1c, 0x6b, 0xf9, 0x0b, 0x21, 0x28, 0x62, 0x7a, 0x0d, 0xa0, - 0xcc, 0x58, 0x33, 0x44, 0x00, 0xd6, 0xf2, 0x63, 0xe6, 0xb8, 0x9c, 0xe9, 0x2a, 0xcb, 0x85, 0x67, - 0x39, 0xf5, 0x10, 0x30, 0x21, 0xbd, 0x6a, 0x4e, 0x04, 0x73, 0x5d, 0x65, 0xcb, 0x2d, 0x41, 0x79, - 0x88, 0x78, 0x0d, 0x6b, 0xf9, 0x49, 0x13, 0xd4, 0x54, 0xcf, 0x81, 0xbb, 0x6a, 0x4c, 0x61, 0x2d, - 0x3f, 0x15, 0x1c, 0x38, 0xd2, 0xe2, 0x36, 0x80, 0x4c, 0xa5, 0x10, 0x30, 0x8d, 0xb5, 0xfc, 0x74, - 0xf1, 0xdd, 0x73, 0xdd, 0xb9, 0xeb, 0xdb, 0xd4, 0xb3, 0x2a, 0xdb, 0x8e, 0x6f, 0x9b, 0xe3, 0x72, - 0x7f, 0x40, 0xb6, 0x07, 0x33, 0xdd, 0xe4, 0x0c, 0x19, 0x5f, 0x57, 0x8c, 0xf9, 0x01, 0x8c, 0x51, - 0x4e, 0xeb, 0x7b, 0x44, 0x34, 0x14, 0xdb, 0x94, 0x1b, 0x7e, 0x05, 0x8c, 0x1c, 0xe6, 0x83, 0x08, - 0xd9, 0xef, 0x27, 0x5e, 0x52, 0xc4, 0xef, 0x9f, 0x47, 0xfc, 0x49, 0x90, 0xe5, 0x11, 0x7f, 0x18, - 0x77, 0x5d, 0x71, 0x73, 0x4e, 0xcf, 0x38, 0x10, 0xfa, 0x26, 0x4c, 0xf3, 0x5e, 0xff, 0xcd, 0x60, - 0x2d, 0x3f, 0x63, 0x4e, 0xf1, 0x1e, 0x07, 0x76, 0x61, 0xdd, 0x58, 0xc8, 0x60, 0x2d, 0x9f, 0x89, - 0x60, 0xb1, 0xa8, 0xe3, 0x71, 0x27, 0xcc, 0x62, 0x2d, 0x3f, 0x6b, 0x4e, 0xf0, 0x98, 0x13, 0x42, - 0x48, 0x97, 0x07, 0x61, 0x2d, 0x8f, 0x02, 0x48, 0xc4, 0x52, 0x84, 0x57, 0x3c, 0xea, 0x52, 0x22, - 0x4d, 0xd1, 0x13, 0x17, 0x73, 0x38, 0x99, 0x1f, 0x37, 0xe7, 0xa2, 0xc5, 0x7b, 0xb1, 0xf8, 0xb8, - 0x01, 0x13, 0xcc, 0xa1, 0xb2, 0xae, 0xcb, 0xb2, 0xbb, 0x70, 0x51, 0x55, 0x9b, 0x79, 0x3d, 0xa8, - 0x74, 0x7a, 0x54, 0xe9, 0xf4, 0x6d, 0xb9, 0x7a, 0x6b, 0xc4, 0x04, 0x05, 0x56, 0x23, 0xf4, 0x06, - 0x4c, 0x06, 0x5b, 0x03, 0x59, 0x0b, 0xaf, 0xc8, 0xe8, 0xbb, 0x35, 0x62, 0x06, 0x84, 0x81, 0x10, - 0xf4, 0x18, 0xc6, 0x6d, 0xe2, 0x86, 0x7a, 0xcc, 0xab, 0x4a, 0xf0, 0xc1, 0xf0, 0x95, 0xe0, 0x13, - 0xe2, 0x2a, 0x75, 0xb7, 0x1d, 0xe1, 0xb5, 0xcc, 0x31, 0x3b, 0x1c, 0xa2, 0x23, 0x98, 0xb3, 0x89, - 0xeb, 0xf6, 0x9f, 0xf7, 0x92, 0x92, 0x73, 0xeb, 0x85, 0xe4, 0xb8, 0x3d, 0xf6, 0x09, 0x04, 0xce, - 0xda, 0xfd, 0xf3, 0x31, 0xc9, 0x61, 0xec, 0x05, 0x92, 0x17, 0x5e, 0x4e, 0x72, 0x10, 0x79, 0xa7, - 0x25, 0xc7, 0xe6, 0xd1, 0x3a, 0x2c, 0x38, 0xcc, 0xd9, 0x64, 0xce, 0x01, 0x75, 0xe4, 0x75, 0x42, - 0x9a, 0xbb, 0xc4, 0x0e, 0xca, 0xdb, 0x42, 0x56, 0x15, 0x80, 0x81, 0xeb, 0x68, 0x13, 0x66, 0xba, - 0x77, 0x56, 0xa8, 0xf1, 0xab, 0xca, 0xe3, 0xd9, 0x53, 0x1e, 0xbf, 0x1f, 0xe1, 0xcc, 0xe9, 0xee, - 0x96, 0x80, 0xe4, 0x31, 0x74, 0x23, 0x29, 0x9e, 0x6c, 0x8b, 0x38, 0x39, 0x74, 0x5d, 0x98, 0x8d, - 0x88, 0xba, 0x89, 0x95, 0xfd, 0x8d, 0x06, 0xe9, 0xf0, 0xb2, 0x42, 0x90, 0x72, 0x88, 0x4d, 0x83, - 0xcb, 0xca, 0x54, 0xdf, 0x68, 0x1e, 0xd2, 0xc4, 0x66, 0xbe, 0x23, 0x16, 0x12, 0xaa, 0x50, 0x85, - 0x23, 0x74, 0x17, 0x12, 0xec, 0x99, 0xba, 0x13, 0xa6, 0x8b, 0xa5, 0x17, 0xbd, 0x6a, 0xf4, 0x2d, - 0x4a, 0x5d, 0xa5, 0x58, 0x82, 0x3d, 0xcb, 0x2d, 0xc1, 0x58, 0x34, 0x46, 0xe3, 0x30, 0xfa, 0x61, - 0xe9, 0xe3, 0x7b, 0xdb, 0x99, 0x11, 0x34, 0x06, 0xa9, 0xfb, 0xe6, 0xa7, 0xdb, 0x19, 0x2d, 0x6b, - 0xc1, 0x54, 0x4f, 0x60, 0xa2, 0x0c, 0x24, 0x9f, 0xd1, 0x56, 0xa8, 0xaf, 0xfc, 0x44, 0x1b, 0x30, - 0x1a, 0x58, 0x27, 0xf1, 0x02, 0x55, 0x33, 0xd8, 0xba, 0x9e, 0xb8, 0xae, 0x65, 0xb7, 0x60, 0xfe, - 0xec, 0xd8, 0x3c, 0x43, 0xe6, 0xc5, 0xb8, 0xcc, 0xf1, 0x38, 0xcb, 0x77, 0x23, 0x96, 0xfe, 0x38, - 0x3b, 0x83, 0x65, 0x37, 0xce, 0xf2, 0x32, 0xd7, 0xf7, 0x89, 0xfc, 0xf5, 0xcf, 0xb4, 0xe3, 0xd2, - 0x1f, 0x34, 0xa8, 0x2f, 0xcf, 0x95, 0x70, 0xd9, 0x12, 0x98, 0xd5, 0xf0, 0x49, 0x3b, 0x59, 0xdc, - 0xd9, 0x71, 0x44, 0x14, 0xb2, 0x2d, 0x5c, 0x61, 0xb6, 0xdb, 0xb4, 0x2a, 0x32, 0x38, 0x70, 0xd8, - 0x86, 0x61, 0xd1, 0x72, 0x29, 0x16, 0x0c, 0x57, 0xd8, 0x01, 0xf5, 0xb0, 0x4d, 0x9c, 0x16, 0xae, - 0x51, 0x22, 0x7c, 0x8f, 0x72, 0xc9, 0xb5, 0x17, 0xc5, 0xee, 0x9f, 0x34, 0xd5, 0x83, 0x2c, 0x3f, - 0x80, 0xab, 0x1f, 0x5a, 0x4e, 0x15, 0x33, 0x5f, 0x60, 0x9b, 0x79, 0x14, 0x93, 0xb2, 0xfc, 0x3c, - 0xd5, 0x74, 0xe9, 0x0d, 0x21, 0x5c, 0xbe, 0x6e, 0x18, 0x75, 0x4b, 0x34, 0xfc, 0xb2, 0x5e, 0x61, - 0xb6, 0x21, 0x8f, 0x5b, 0xa0, 0x15, 0xc6, 0x5b, 0x5c, 0xd0, 0x70, 0x18, 0x9e, 0x7e, 0x63, 0x2a, - 0x2a, 0x9a, 0xea, 0x68, 0xb9, 0x2c, 0xa4, 0x36, 0x58, 0xb5, 0x75, 0x56, 0xbc, 0xe6, 0x1e, 0xc3, - 0x4c, 0x78, 0xbd, 0x7c, 0xdd, 0x12, 0x0d, 0x05, 0x9b, 0x86, 0x44, 0xd4, 0x81, 0x99, 0x09, 0xab, - 0x8a, 0x6e, 0x40, 0xaa, 0x4a, 0x04, 0x09, 0x0d, 0xfd, 0xe6, 0xb9, 0x86, 0x96, 0x24, 0xa6, 0xda, - 0xb2, 0x8c, 0x61, 0x22, 0x16, 0x30, 0x32, 0x34, 0x1f, 0x6d, 0x9b, 0x77, 0x32, 0x23, 0xe8, 0x02, - 0x24, 0xef, 0xec, 0x6e, 0x67, 0xb4, 0xe2, 0xbf, 0x2f, 0xc2, 0xa5, 0xfe, 0xf3, 0xde, 0xa3, 0xde, - 0x81, 0x55, 0xa1, 0xe8, 0x8b, 0x24, 0xa4, 0x37, 0x3d, 0x99, 0x7f, 0x68, 0x75, 0x68, 0xf7, 0x66, - 0x87, 0xdf, 0x92, 0xfb, 0x67, 0xe2, 0x87, 0x7f, 0xfe, 0xc7, 0x2f, 0x13, 0x7f, 0x4b, 0xe4, 0xfe, - 0x9a, 0x30, 0x0e, 0x56, 0xa3, 0xe7, 0xc5, 0x59, 0x8f, 0x0b, 0xa3, 0x1d, 0xeb, 0xf5, 0x3a, 0x46, - 0x3b, 0xde, 0xd8, 0x75, 0x8c, 0x76, 0xec, 0x26, 0xec, 0x18, 0x9c, 0xba, 0xc4, 0x23, 0x82, 0x79, - 0x46, 0xdb, 0xef, 0x59, 0x68, 0xc7, 0xee, 0xd4, 0x8e, 0xd1, 0xee, 0xb9, 0x88, 0xa3, 0x71, 0x6c, - 0xfd, 0xa4, 0xd5, 0xea, 0x18, 0xed, 0xf8, 0x85, 0xf2, 0x55, 0x2e, 0x3c, 0xd7, 0xa3, 0x35, 0xeb, - 0xc8, 0x58, 0xee, 0x04, 0x42, 0x62, 0xdb, 0x78, 0x3f, 0x0f, 0xef, 0x17, 0xc4, 0xfb, 0x36, 0xf4, - 0x2a, 0x39, 0xa8, 0x5a, 0x77, 0x8c, 0xf6, 0x49, 0x79, 0xed, 0x18, 0xed, 0xbe, 0xee, 0x46, 0xee, - 0x3c, 0xb3, 0xed, 0xe9, 0xa0, 0x5f, 0x6b, 0x00, 0x81, 0x63, 0x55, 0xc0, 0x7d, 0x39, 0xce, 0x5d, - 0x56, 0xbe, 0xbd, 0x9a, 0x5b, 0x3a, 0xc7, 0xb3, 0xeb, 0xda, 0x32, 0xfa, 0x0e, 0xa4, 0x3f, 0x66, - 0xec, 0x99, 0xef, 0xa2, 0x19, 0x5d, 0x3e, 0xb4, 0xf4, 0x9d, 0x6a, 0x98, 0x25, 0x2f, 0x22, 0x59, - 0x57, 0x92, 0xf3, 0xe8, 0xff, 0xce, 0x8d, 0x29, 0x59, 0x15, 0x3a, 0xe8, 0xc7, 0x1a, 0xa4, 0x3f, - 0x75, 0xab, 0x2f, 0x18, 0xf7, 0x03, 0x9a, 0xa3, 0xdc, 0xaa, 0xd2, 0xe2, 0x9d, 0xec, 0x73, 0x6a, - 0x21, 0xcd, 0xf0, 0x0b, 0x0d, 0xd2, 0x5b, 0xb4, 0x49, 0x05, 0x3d, 0x6d, 0x87, 0x41, 0x62, 0x1e, - 0x1f, 0x97, 0xde, 0x29, 0xbf, 0x0d, 0xd3, 0x00, 0x25, 0xd7, 0xba, 0x4d, 0x5b, 0x25, 0x5f, 0x34, - 0xd0, 0x08, 0x5c, 0x82, 0xf4, 0x1d, 0xf9, 0x59, 0x44, 0x53, 0x90, 0xf2, 0x28, 0xa9, 0xc2, 0xe8, - 0xa1, 0x67, 0x09, 0x1a, 0x98, 0x66, 0xf9, 0x79, 0x4d, 0xf3, 0x77, 0x0d, 0xc6, 0x6e, 0x52, 0x71, - 0xd7, 0xa7, 0x5e, 0xeb, 0x7f, 0x69, 0x9c, 0x9f, 0x6b, 0xc7, 0xa5, 0xfb, 0xb9, 0x5d, 0x58, 0x3c, - 0xab, 0x1e, 0x77, 0x05, 0x0e, 0x59, 0x87, 0x1f, 0x6a, 0xe5, 0x11, 0x75, 0x3e, 0x1d, 0xbd, 0x7b, - 0xde, 0xf9, 0xbe, 0x25, 0x05, 0x44, 0xa7, 0xfc, 0x2c, 0x09, 0xa9, 0xed, 0x4a, 0x83, 0xa1, 0x41, - 0x6f, 0x0e, 0xee, 0x97, 0xf5, 0xe0, 0xa6, 0x8d, 0xdc, 0xf1, 0xdc, 0xc8, 0xdc, 0xbf, 0x12, 0xc7, - 0xa5, 0x1f, 0x24, 0x60, 0x92, 0x56, 0x1a, 0x0c, 0xf3, 0xa0, 0xd4, 0xc2, 0x98, 0x1a, 0x79, 0x6e, - 0x05, 0xcd, 0xde, 0xf3, 0x6d, 0x9b, 0x78, 0xad, 0x75, 0xbc, 0x1d, 0x4e, 0x65, 0x33, 0x5b, 0x94, - 0x57, 0x3c, 0x4b, 0xfd, 0x50, 0xa0, 0x66, 0x73, 0x5b, 0x80, 0x7a, 0x0d, 0xa5, 0xb4, 0x1d, 0xd2, - 0x3c, 0x1f, 0x7d, 0x00, 0xc9, 0xff, 0x5f, 0xb9, 0x86, 0xae, 0xc3, 0x7b, 0x26, 0x15, 0xbe, 0xe7, - 0xd0, 0x2a, 0x3e, 0x6c, 0x50, 0x07, 0x8b, 0x06, 0xc5, 0x1e, 0xe5, 0xcc, 0xf7, 0x2a, 0x14, 0x5b, - 0x1c, 0x0b, 0x6a, 0xbb, 0xcc, 0x23, 0x9e, 0xd5, 0x6c, 0x61, 0xdf, 0x21, 0x07, 0xc4, 0x6a, 0x92, - 0x72, 0x93, 0xea, 0x1f, 0x7d, 0x05, 0x92, 0x6b, 0x2b, 0x6b, 0x68, 0x0d, 0x96, 0xff, 0x0b, 0x41, - 0x95, 0x51, 0x8e, 0x1d, 0x26, 0x30, 0x3d, 0xb2, 0xb8, 0xd0, 0x51, 0x1a, 0x52, 0xbf, 0x4a, 0x68, - 0x49, 0xe5, 0x98, 0x27, 0xe7, 0x3b, 0x46, 0x1a, 0xc6, 0x68, 0x07, 0x85, 0xeb, 0xd1, 0xe5, 0x5c, - 0xc6, 0x38, 0x28, 0x76, 0xf1, 0x72, 0x6d, 0x3d, 0xe8, 0x1f, 0x1e, 0x21, 0x74, 0x6a, 0x09, 0xfd, - 0x56, 0x83, 0x49, 0xd9, 0xa2, 0xa9, 0xa7, 0x99, 0x9c, 0xf8, 0x72, 0x2a, 0xdd, 0x07, 0xea, 0x6c, - 0x37, 0x72, 0x6b, 0xe7, 0x26, 0x55, 0xcf, 0x4f, 0x39, 0xba, 0x6c, 0x08, 0x54, 0xde, 0x97, 0x00, - 0x76, 0xd9, 0x86, 0xe5, 0x54, 0x2d, 0xa7, 0xce, 0xd1, 0xe5, 0x53, 0x39, 0xb3, 0x15, 0xfe, 0xca, - 0x35, 0x30, 0x9d, 0x46, 0xd0, 0x03, 0xb8, 0x20, 0x3b, 0x74, 0xe6, 0x0b, 0x34, 0x00, 0x34, 0x70, - 0xf3, 0xab, 0x4a, 0xfd, 0x57, 0xd0, 0x5c, 0xdc, 0x9e, 0x22, 0x24, 0x6b, 0x40, 0x66, 0xdb, 0xf3, - 0x98, 0x27, 0xbb, 0x95, 0x2d, 0x2a, 0x88, 0xd5, 0xe4, 0x43, 0x0b, 0xb8, 0xaa, 0x04, 0xbc, 0x8e, - 0x16, 0x7b, 0x1c, 0x26, 0x59, 0x0f, 0x2d, 0xd1, 0xa8, 0x86, 0xac, 0x3f, 0xd1, 0x00, 0xdd, 0xa4, - 0xa2, 0xbf, 0x3b, 0x5a, 0x39, 0xd7, 0x1f, 0x7d, 0x3b, 0x06, 0xaa, 0xf1, 0x96, 0x52, 0xe3, 0x4a, - 0xee, 0x72, 0x5c, 0x0d, 0xa9, 0x41, 0x99, 0x55, 0x5b, 0x46, 0x5b, 0xd6, 0x60, 0xd5, 0x45, 0xa1, - 0x1f, 0x69, 0x30, 0xbb, 0xc7, 0xb8, 0x90, 0x8c, 0x6a, 0xab, 0x52, 0xe4, 0xf9, 0x1a, 0xb1, 0x81, - 0xd2, 0x0d, 0x25, 0xfd, 0xed, 0xdc, 0xd5, 0xb8, 0x74, 0x97, 0x71, 0x21, 0x35, 0x50, 0x8f, 0xed, - 0x40, 0x8d, 0x28, 0x28, 0xb2, 0xbf, 0xd7, 0x8e, 0x4b, 0xbf, 0xd3, 0x50, 0x6d, 0x40, 0xb7, 0x86, - 0xab, 0xb1, 0x22, 0x51, 0x28, 0xe0, 0xc3, 0x86, 0x55, 0x69, 0x60, 0xde, 0x60, 0x7e, 0xb3, 0xaa, - 0xd2, 0xaf, 0x4c, 0xb1, 0xcf, 0x69, 0x15, 0x5b, 0x0e, 0x76, 0x9b, 0xa4, 0x42, 0x65, 0x47, 0x2c, - 0x13, 0xb5, 0xca, 0x2a, 0xbe, 0x4d, 0x9d, 0xe0, 0xb7, 0x47, 0xd9, 0x56, 0xcb, 0xc1, 0x95, 0xec, - 0x5d, 0x58, 0x3a, 0xab, 0x16, 0xcb, 0x34, 0x8a, 0xfa, 0xc3, 0x21, 0xeb, 0x4d, 0xf1, 0x29, 0x5c, - 0xac, 0x10, 0x9b, 0x36, 0x37, 0x09, 0xa7, 0x21, 0x87, 0x6c, 0x66, 0x90, 0x09, 0xa3, 0xc1, 0x2f, - 0x06, 0xc3, 0x06, 0xd2, 0x65, 0x65, 0xc3, 0x39, 0x34, 0xdb, 0x13, 0x48, 0x72, 0xa9, 0xf8, 0x4d, - 0x58, 0x2c, 0x39, 0x4c, 0x34, 0xa8, 0x17, 0x4a, 0x92, 0xce, 0x8b, 0x25, 0xd5, 0xfb, 0x3d, 0x29, - 0x36, 0xac, 0xe0, 0x91, 0x8d, 0xbf, 0xa4, 0x8f, 0x4b, 0x9f, 0xa7, 0x91, 0x80, 0xb9, 0x12, 0xde, - 0x08, 0x9e, 0x2a, 0xb1, 0x0a, 0xf0, 0x10, 0x2e, 0xd6, 0xcd, 0xbd, 0xcd, 0xc2, 0xcd, 0xe0, 0xe4, - 0xd8, 0xf5, 0xd8, 0x53, 0x5a, 0x11, 0xc3, 0x5a, 0x2c, 0x9b, 0x71, 0x98, 0x43, 0xbf, 0x16, 0x9e, - 0x4c, 0xa2, 0x8b, 0xc9, 0x55, 0x7d, 0x65, 0x39, 0xa9, 0x25, 0x52, 0xc5, 0x0c, 0x71, 0x83, 0x07, - 0x90, 0xc5, 0x1c, 0xe3, 0x29, 0x67, 0x4e, 0x71, 0x3e, 0x3e, 0x73, 0x54, 0xa8, 0x31, 0x56, 0xb0, - 0x2d, 0x9b, 0xae, 0x9f, 0x42, 0xae, 0x0f, 0x40, 0x9a, 0x7b, 0xb2, 0xa0, 0x5f, 0x43, 0x3b, 0x70, - 0xf3, 0x74, 0x41, 0xf7, 0x39, 0xf5, 0x4e, 0x8a, 0x79, 0x83, 0x1c, 0x50, 0xec, 0x52, 0xcf, 0xb6, - 0x38, 0x97, 0x71, 0x23, 0x18, 0x26, 0x95, 0x0a, 0xe5, 0xbc, 0xa7, 0xf8, 0xeb, 0xe6, 0x4b, 0x5c, - 0x11, 0x17, 0xcc, 0x5b, 0x90, 0x5c, 0x5b, 0xbd, 0x8e, 0x4a, 0x30, 0xb5, 0xf3, 0x96, 0x8d, 0x09, - 0x16, 0x94, 0xb8, 0x4c, 0xe8, 0x68, 0x05, 0xf4, 0xec, 0x50, 0x4f, 0xe5, 0x47, 0x3f, 0x4d, 0xc0, - 0x0c, 0x8c, 0x6f, 0x10, 0x6e, 0x55, 0x54, 0x43, 0x94, 0x18, 0xd3, 0xe0, 0xb5, 0x9e, 0x16, 0x69, - 0x66, 0x2c, 0x91, 0x1d, 0x7f, 0x58, 0x28, 0xed, 0xed, 0x14, 0x6e, 0xd3, 0x16, 0x4e, 0xc0, 0x17, - 0x5a, 0xb7, 0x65, 0xfa, 0x5c, 0x1b, 0x4b, 0xe6, 0x53, 0xc5, 0x37, 0x22, 0xef, 0xc5, 0x1c, 0x62, - 0x30, 0xe2, 0x8b, 0x86, 0x21, 0xff, 0x30, 0xcf, 0xfa, 0x36, 0x5d, 0x5f, 0x1a, 0x0c, 0x12, 0xec, - 0x19, 0x75, 0x36, 0xbe, 0x07, 0xd9, 0xa0, 0x03, 0x43, 0xe8, 0xa6, 0x47, 0x1c, 0xc1, 0xb1, 0x1c, - 0x84, 0xd6, 0x83, 0xc5, 0xb0, 0x2f, 0x43, 0x73, 0xe1, 0xa2, 0x1a, 0x45, 0xab, 0x9b, 0x30, 0x4a, - 0xaa, 0xb6, 0xe5, 0xa0, 0xf5, 0x9e, 0xad, 0x4e, 0xb5, 0x07, 0xa6, 0x9c, 0x21, 0x61, 0x16, 0x17, - 0xf2, 0xa2, 0x38, 0xa0, 0xd8, 0x72, 0x6a, 0xcc, 0xb3, 0x95, 0xbf, 0xcb, 0x4b, 0x30, 0x15, 0x37, - 0xc5, 0x48, 0x7f, 0xaf, 0x58, 0x7e, 0x7b, 0x60, 0xb7, 0xd8, 0x0f, 0xf5, 0x76, 0xe0, 0xd2, 0x27, - 0x27, 0xc5, 0x21, 0x1e, 0xf3, 0xc3, 0xc6, 0xfa, 0xa3, 0xf1, 0xae, 0xe7, 0xca, 0x69, 0x95, 0x6e, - 0xd7, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x32, 0x75, 0x62, 0xe4, 0x6f, 0x1a, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_34defd096f52c726) +} + +var fileDescriptor_a_bit_of_everything_34defd096f52c726 = []byte{ + // 2708 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5f, 0x73, 0x1b, 0x57, + 0x15, 0xf7, 0x6a, 0x65, 0xc5, 0x3e, 0xb6, 0x6c, 0xf9, 0x3a, 0x71, 0x6c, 0xc5, 0xad, 0x6f, 0xd4, + 0x94, 0x6e, 0xdd, 0x6a, 0x37, 0x51, 0x4c, 0x49, 0xdc, 0x69, 0x83, 0x1c, 0x3b, 0x89, 0x9b, 0xd6, + 0x71, 0x36, 0x69, 0xe9, 0x84, 0x14, 0xcf, 0x4a, 0xba, 0x92, 0xb6, 0xd1, 0xee, 0x5d, 0x76, 0xef, + 0x3a, 0x11, 0x46, 0x50, 0x60, 0x06, 0x06, 0xfa, 0xc0, 0x8c, 0xe1, 0x89, 0x07, 0x9e, 0xf9, 0x02, + 0x3c, 0xf1, 0xc0, 0xf0, 0x50, 0x5e, 0xfa, 0x06, 0x33, 0x7d, 0x80, 0x19, 0x5e, 0x80, 0x19, 0x3e, + 0x01, 0x0c, 0x6f, 0xcc, 0xde, 0xfd, 0xe3, 0xdd, 0x95, 0x14, 0x47, 0x0e, 0xd3, 0x97, 0x44, 0xf7, + 0xde, 0xf3, 0xff, 0x9c, 0x7b, 0xce, 0xef, 0xae, 0xa1, 0x42, 0x9e, 0x68, 0x86, 0xd5, 0x21, 0x8e, + 0x62, 0xd9, 0x94, 0x51, 0x25, 0x58, 0x5a, 0x35, 0x45, 0xdb, 0xab, 0xe9, 0x6c, 0x8f, 0x36, 0xf7, + 0xc8, 0x3e, 0xb1, 0xbb, 0xac, 0xad, 0x9b, 0x2d, 0x99, 0xd3, 0xa0, 0x95, 0x96, 0x6d, 0xd5, 0xe5, + 0x96, 0xc6, 0xc8, 0x63, 0xad, 0x2b, 0x87, 0x02, 0xe4, 0x88, 0xb5, 0xb8, 0xdc, 0xa2, 0xb4, 0xd5, + 0x21, 0x8a, 0x66, 0xe9, 0x8a, 0x66, 0x9a, 0x94, 0x69, 0x4c, 0xa7, 0xa6, 0xe3, 0xb3, 0x17, 0xcf, + 0x05, 0xa7, 0x7c, 0x55, 0x73, 0x9b, 0x0a, 0x31, 0x2c, 0xd6, 0x0d, 0x0e, 0x5f, 0x4c, 0x1f, 0x36, + 0x5c, 0x9b, 0x73, 0x07, 0xe7, 0xaf, 0xa4, 0xec, 0xb5, 0x34, 0xd6, 0x26, 0xa6, 0x6b, 0xf0, 0x1f, + 0x7b, 0xde, 0xaf, 0x80, 0x10, 0xa7, 0x08, 0x1d, 0xb7, 0xa6, 0x18, 0xc4, 0x71, 0xb4, 0x16, 0x09, + 0x28, 0xce, 0xf7, 0x53, 0x54, 0x52, 0x24, 0x2b, 0x69, 0x6b, 0x98, 0x6e, 0x10, 0x87, 0x69, 0x86, + 0x15, 0x10, 0xbc, 0xce, 0xff, 0xab, 0x97, 0x5b, 0xc4, 0x2c, 0x3b, 0x8f, 0xb5, 0x56, 0x8b, 0xd8, + 0x0a, 0xb5, 0xb8, 0xb7, 0xfd, 0x9e, 0x97, 0xfe, 0x38, 0x0f, 0x85, 0xea, 0x86, 0xce, 0xee, 0x34, + 0xb7, 0xa2, 0x98, 0xa2, 0x8f, 0x20, 0xef, 0xe8, 0x66, 0xab, 0x43, 0xf6, 0x4c, 0xe2, 0x30, 0xd2, + 0x58, 0x5c, 0xc2, 0x82, 0x34, 0x55, 0xb9, 0x22, 0x1f, 0x13, 0x65, 0x39, 0x2d, 0x49, 0xde, 0xe1, + 0xfc, 0xea, 0xb4, 0x2f, 0xce, 0x5f, 0xa1, 0x36, 0x64, 0x5d, 0x57, 0x6f, 0x2c, 0x0a, 0x58, 0x90, + 0x26, 0x37, 0xee, 0x1f, 0x56, 0xef, 0x7e, 0x22, 0x08, 0x3f, 0x13, 0x6e, 0x7f, 0x53, 0x2b, 0x37, + 0xab, 0xe5, 0x1b, 0x17, 0xcb, 0x57, 0x3f, 0x3a, 0xb8, 0xd2, 0x2b, 0xc7, 0x97, 0x6b, 0xa3, 0x2c, + 0x2f, 0x55, 0x7a, 0x2a, 0xd7, 0x80, 0x76, 0x21, 0x17, 0x78, 0x90, 0xc1, 0xe2, 0x73, 0x79, 0x10, + 0xc8, 0x41, 0x2b, 0x30, 0xd5, 0xec, 0x50, 0x8d, 0xed, 0xed, 0x6b, 0x1d, 0x97, 0x2c, 0x8a, 0x58, + 0x90, 0x32, 0x2a, 0xf0, 0xad, 0x0f, 0xbc, 0x1d, 0x74, 0x1e, 0xa6, 0x1b, 0xd4, 0xad, 0x75, 0x48, + 0x40, 0x91, 0xc5, 0x82, 0x24, 0xa8, 0x53, 0xfe, 0x9e, 0x4f, 0xb2, 0x02, 0x53, 0xba, 0xc9, 0xde, + 0x58, 0x0b, 0x28, 0xc6, 0xb1, 0x20, 0x89, 0x2a, 0xf0, 0xad, 0x48, 0x86, 0x1b, 0xa7, 0xc8, 0x61, + 0x41, 0xca, 0xaa, 0x53, 0x6e, 0x8c, 0xc4, 0x97, 0x71, 0xb9, 0x12, 0x50, 0x9c, 0xc2, 0x82, 0x34, + 0xce, 0x65, 0x5c, 0xae, 0xf8, 0x04, 0x2f, 0x41, 0xbe, 0xa9, 0x3f, 0x21, 0x8d, 0x48, 0xc8, 0x04, + 0x16, 0xa4, 0x9c, 0x3a, 0x1d, 0x6c, 0x26, 0x89, 0x22, 0x39, 0x93, 0x58, 0x90, 0x4e, 0x05, 0x44, + 0xa1, 0xa4, 0x17, 0x00, 0x6a, 0x94, 0x76, 0x02, 0x0a, 0xc0, 0x82, 0x34, 0xa1, 0x4e, 0x7a, 0x3b, + 0x91, 0xb1, 0x0e, 0xb3, 0x75, 0xb3, 0x15, 0x10, 0x4c, 0x79, 0x59, 0x55, 0xa7, 0xfc, 0xbd, 0xc8, + 0xd8, 0x5a, 0x97, 0x11, 0x27, 0xa0, 0x78, 0x01, 0x0b, 0xd2, 0xb4, 0x0a, 0x7c, 0x2b, 0xe1, 0x70, + 0x64, 0x46, 0x1e, 0x0b, 0x52, 0xde, 0x77, 0x38, 0xb4, 0xe2, 0x36, 0x80, 0x77, 0x95, 0x02, 0x82, + 0x19, 0x2c, 0x48, 0x33, 0x95, 0xd7, 0x8f, 0x4d, 0xe7, 0x8e, 0x6b, 0x10, 0x5b, 0xaf, 0x6f, 0x99, + 0xae, 0xa1, 0x4e, 0x7a, 0xfc, 0xbe, 0xb0, 0x5d, 0x98, 0x8d, 0x2e, 0x67, 0x20, 0xf1, 0x45, 0x2e, + 0x51, 0x1a, 0x22, 0x31, 0xbc, 0xd3, 0xf2, 0xae, 0xc6, 0xda, 0x5c, 0x5a, 0xde, 0x0a, 0x7e, 0xf9, + 0x12, 0x1d, 0x58, 0xf0, 0x2b, 0x64, 0x2f, 0x2d, 0x78, 0x85, 0x0b, 0x7e, 0xfb, 0x38, 0xc1, 0xef, + 0xf9, 0xb7, 0x3c, 0x94, 0x1f, 0xd4, 0x5d, 0xa4, 0x6e, 0xde, 0x4c, 0xac, 0x7d, 0xa5, 0x2f, 0xc3, + 0x8c, 0x93, 0xcc, 0xdf, 0x2c, 0x16, 0xa4, 0x59, 0x35, 0xef, 0x24, 0x12, 0x18, 0x91, 0x45, 0xb5, + 0x50, 0xc0, 0x82, 0x54, 0x08, 0xc9, 0x62, 0x55, 0xe7, 0xc4, 0x93, 0x30, 0x87, 0x05, 0x69, 0x4e, + 0x9d, 0x72, 0x62, 0x49, 0x08, 0x48, 0x22, 0x39, 0x08, 0x0b, 0x12, 0xf2, 0x49, 0x42, 0x29, 0x15, + 0x38, 0x63, 0x13, 0x8b, 0x68, 0x5e, 0x28, 0x12, 0x75, 0x31, 0x8f, 0x45, 0x69, 0x52, 0x9d, 0x0f, + 0x0f, 0xef, 0xc5, 0xea, 0xe3, 0x2a, 0x4c, 0x51, 0x93, 0x78, 0x7d, 0xdd, 0x6b, 0xbb, 0x8b, 0xa7, + 0x79, 0xb7, 0x59, 0x90, 0xfd, 0x4e, 0x27, 0x87, 0x9d, 0x4e, 0xde, 0xf2, 0x4e, 0x6f, 0x8d, 0xa9, + 0xc0, 0x89, 0xf9, 0x0a, 0xbd, 0x04, 0xd3, 0x3e, 0xab, 0xaf, 0x6b, 0xf1, 0x8c, 0x57, 0x7d, 0xb7, + 0xc6, 0x54, 0x5f, 0xa0, 0xaf, 0x04, 0x3d, 0x84, 0x49, 0x43, 0xb3, 0x02, 0x3b, 0x16, 0x78, 0x27, + 0xb8, 0x36, 0x7a, 0x27, 0x78, 0x4f, 0xb3, 0xb8, 0xb9, 0x5b, 0x26, 0xb3, 0xbb, 0xea, 0x84, 0x11, + 0x2c, 0xd1, 0x13, 0x98, 0x37, 0x34, 0xcb, 0x4a, 0xfb, 0x7b, 0x96, 0xeb, 0xb9, 0x75, 0x22, 0x3d, + 0x56, 0x22, 0x3e, 0xbe, 0xc2, 0x39, 0x23, 0xbd, 0x1f, 0xd3, 0x1c, 0xd4, 0x9e, 0xaf, 0x79, 0xf1, + 0xf9, 0x34, 0xfb, 0x95, 0xd7, 0xaf, 0x39, 0xb6, 0x8f, 0xd6, 0x61, 0xd1, 0xa4, 0xe6, 0x75, 0x6a, + 0xee, 0x13, 0xd3, 0x1b, 0x27, 0x5a, 0x67, 0x47, 0x33, 0xfc, 0xf6, 0xb6, 0x58, 0xe4, 0x0d, 0x60, + 0xe8, 0x39, 0xba, 0x0e, 0xb3, 0xd1, 0xcc, 0x0a, 0x2c, 0x3e, 0xc7, 0x33, 0x5e, 0xec, 0xcb, 0xf8, + 0xfd, 0x90, 0x4e, 0x9d, 0x89, 0x58, 0x7c, 0x21, 0x0f, 0x21, 0xaa, 0xa4, 0xf8, 0x65, 0x5b, 0xc6, + 0xe2, 0xc8, 0x7d, 0x61, 0x2e, 0x14, 0x14, 0x5d, 0xac, 0xe2, 0x6f, 0x04, 0xc8, 0x05, 0xc3, 0x0a, + 0x41, 0xd6, 0xd4, 0x0c, 0xe2, 0x0f, 0x2b, 0x95, 0xff, 0x46, 0x0b, 0x90, 0xd3, 0x0c, 0xea, 0x9a, + 0x6c, 0x31, 0xc3, 0x1b, 0x55, 0xb0, 0x42, 0x77, 0x21, 0x43, 0x1f, 0xf1, 0x99, 0x30, 0x53, 0xa9, + 0x9e, 0x74, 0xd4, 0xc8, 0x9b, 0x84, 0x58, 0xdc, 0xb0, 0x0c, 0x7d, 0x54, 0x5a, 0x81, 0x89, 0x70, + 0x8d, 0x26, 0x61, 0xfc, 0x46, 0xf5, 0xdd, 0x7b, 0x5b, 0x85, 0x31, 0x34, 0x01, 0xd9, 0xfb, 0xea, + 0xfb, 0x5b, 0x05, 0xa1, 0xa8, 0x43, 0x3e, 0x51, 0x98, 0xa8, 0x00, 0xe2, 0x23, 0xd2, 0x0d, 0xec, + 0xf5, 0x7e, 0xa2, 0x0d, 0x18, 0xf7, 0xa3, 0x93, 0x39, 0x41, 0xd7, 0xf4, 0x59, 0xd7, 0x33, 0x57, + 0x84, 0xe2, 0x26, 0x2c, 0x0c, 0xae, 0xcd, 0x01, 0x3a, 0x4f, 0xc7, 0x75, 0x4e, 0xc6, 0xa5, 0x7c, + 0x2f, 0x94, 0x92, 0xae, 0xb3, 0x01, 0x52, 0x76, 0xe2, 0x52, 0x9e, 0x67, 0x7c, 0x1f, 0xe9, 0x5f, + 0xff, 0x4c, 0x38, 0xac, 0xfe, 0x41, 0x80, 0xd6, 0xea, 0x7c, 0x15, 0xd7, 0x74, 0x86, 0x69, 0x13, + 0x1f, 0xc1, 0xc9, 0xca, 0xf6, 0xb6, 0xc9, 0xc2, 0x92, 0xed, 0xe2, 0x3a, 0x35, 0xac, 0x8e, 0x5e, + 0xf7, 0x8a, 0x03, 0x07, 0x30, 0x0c, 0xb3, 0xae, 0x45, 0x30, 0xa3, 0xb8, 0x4e, 0xf7, 0x89, 0x8d, + 0x0d, 0xcd, 0xec, 0xe2, 0x26, 0xd1, 0x98, 0x6b, 0x13, 0xc7, 0x93, 0xb5, 0x1b, 0xd6, 0xee, 0x9f, + 0x04, 0x8e, 0x41, 0x56, 0x3f, 0x80, 0x0b, 0x37, 0x74, 0xb3, 0x81, 0xa9, 0xcb, 0xb0, 0x41, 0x6d, + 0x82, 0xb5, 0x9a, 0xf7, 0xb3, 0x0f, 0x74, 0xc9, 0x6d, 0xc6, 0x2c, 0x67, 0x5d, 0x51, 0x5a, 0x3a, + 0x6b, 0xbb, 0x35, 0xb9, 0x4e, 0x0d, 0xc5, 0x73, 0xb7, 0x4c, 0xea, 0xd4, 0xe9, 0x3a, 0x8c, 0x04, + 0xcb, 0xc0, 0xfb, 0x8d, 0x7c, 0xd8, 0x34, 0xb9, 0x6b, 0xa5, 0x5f, 0x4e, 0xc0, 0x62, 0x5a, 0xa6, + 0x1a, 0x14, 0x36, 0xba, 0x0a, 0x4b, 0x7c, 0x2c, 0x45, 0x57, 0x26, 0x8e, 0x61, 0x04, 0x2c, 0x4a, + 0x19, 0x75, 0xc1, 0x23, 0x08, 0x19, 0x6e, 0x1c, 0xe1, 0x99, 0x37, 0xa1, 0x98, 0x64, 0x4d, 0xa0, + 0x1b, 0x0f, 0x56, 0x09, 0xea, 0xd9, 0x38, 0xef, 0x66, 0x0c, 0xe9, 0xf4, 0xe9, 0x8d, 0x0f, 0x0f, + 0x11, 0x8b, 0x92, 0x98, 0xd4, 0xbb, 0x7d, 0x34, 0x47, 0xfa, 0xf4, 0x26, 0x10, 0x51, 0x16, 0x8b, + 0x52, 0x36, 0xa9, 0xf7, 0xfd, 0xd8, 0x10, 0x1a, 0xa4, 0x37, 0x9a, 0x6b, 0xe3, 0x58, 0x94, 0xc6, + 0xfb, 0xf4, 0x86, 0x23, 0xee, 0x2d, 0x38, 0x97, 0x0a, 0x55, 0x62, 0x72, 0xe6, 0xb0, 0x28, 0xe5, + 0xd4, 0xc5, 0x44, 0xb0, 0xe2, 0x43, 0x74, 0x30, 0x7b, 0x0c, 0xa7, 0x89, 0xd2, 0xa9, 0x01, 0xec, + 0xa1, 0xf6, 0xaf, 0xc1, 0x62, 0x92, 0x3d, 0x86, 0xbc, 0x26, 0xb0, 0x28, 0x4d, 0xa8, 0x67, 0xe2, + 0xbc, 0x1b, 0x11, 0x0a, 0xeb, 0x0b, 0x57, 0x62, 0x16, 0x4d, 0xf2, 0xd9, 0x9b, 0x08, 0x57, 0x72, + 0xfe, 0xa6, 0xc2, 0x15, 0x47, 0x6b, 0x80, 0x45, 0x69, 0x3a, 0x19, 0xae, 0x8d, 0x23, 0xe4, 0x36, + 0x30, 0x4d, 0x91, 0xbb, 0x53, 0x58, 0x94, 0xf2, 0xfd, 0x69, 0x0a, 0xbd, 0x25, 0x69, 0x6f, 0x63, + 0x9d, 0x7c, 0xfa, 0x04, 0x9d, 0x3c, 0x11, 0x9b, 0x23, 0x98, 0x74, 0x0d, 0x96, 0x53, 0xb1, 0x49, + 0x26, 0x25, 0x8f, 0x45, 0x69, 0x56, 0x5d, 0x4a, 0x44, 0x27, 0x01, 0xa0, 0x86, 0x08, 0x88, 0x8a, + 0x62, 0x06, 0x8b, 0x52, 0x61, 0x90, 0x80, 0xa1, 0xc5, 0x9c, 0x00, 0x5a, 0xb3, 0x58, 0x94, 0xe6, + 0x52, 0xd9, 0x89, 0x45, 0x69, 0x20, 0x73, 0x0c, 0xca, 0x89, 0x12, 0xea, 0x67, 0x0e, 0x34, 0x97, + 0x8a, 0x90, 0xdd, 0xa0, 0x8d, 0xee, 0xa0, 0x31, 0x56, 0x7a, 0x08, 0xb3, 0x01, 0xea, 0xfc, 0x86, + 0xce, 0xda, 0x9c, 0x6c, 0x06, 0x32, 0xe1, 0xc3, 0x4c, 0xcd, 0xe8, 0x5e, 0xe3, 0xc8, 0x36, 0x34, + 0xa6, 0x05, 0xfd, 0xf7, 0xe5, 0x63, 0xb3, 0xe1, 0x09, 0x51, 0x39, 0xcb, 0x2a, 0x86, 0xa9, 0x58, + 0x6e, 0xbc, 0x89, 0xf5, 0x60, 0x4b, 0xbd, 0x53, 0x18, 0x43, 0xa7, 0x40, 0xbc, 0xb3, 0xb3, 0x55, + 0x10, 0x2a, 0xff, 0x59, 0x82, 0xb3, 0xe9, 0x96, 0x75, 0x8f, 0xd8, 0xfb, 0x7a, 0x9d, 0xa0, 0x2f, + 0x44, 0xc8, 0x5d, 0xb7, 0x3d, 0x77, 0xd0, 0xa5, 0x91, 0xbb, 0x7e, 0x71, 0x74, 0x96, 0xd2, 0x3f, + 0x33, 0x3f, 0xfc, 0xf3, 0x3f, 0x7e, 0x91, 0xf9, 0x5b, 0xa6, 0xf4, 0xd7, 0x8c, 0xb2, 0x7f, 0x29, + 0xfc, 0xea, 0x30, 0xe8, 0x9b, 0x83, 0x72, 0x10, 0x6b, 0x9f, 0x3d, 0xe5, 0x20, 0xde, 0x11, 0x7b, + 0xca, 0x41, 0x2c, 0x3b, 0x3d, 0xc5, 0x21, 0x96, 0x66, 0x6b, 0x8c, 0xda, 0xca, 0x81, 0x9b, 0x38, + 0x38, 0x88, 0x55, 0x40, 0x4f, 0x39, 0x48, 0x14, 0x54, 0xb8, 0x8e, 0x9d, 0x1f, 0xf5, 0x81, 0x9e, + 0x72, 0x10, 0xbf, 0xdb, 0x6f, 0x39, 0xcc, 0xb6, 0x6c, 0xd2, 0xd4, 0x9f, 0x28, 0xab, 0x3d, 0x5f, + 0x49, 0x8c, 0xcd, 0x49, 0xcb, 0x71, 0xd2, 0x8a, 0x9c, 0x14, 0x43, 0xd2, 0xc8, 0x61, 0x20, 0xae, + 0xa7, 0x1c, 0x1c, 0xdd, 0xd5, 0x9e, 0x72, 0x90, 0x7a, 0xf4, 0x78, 0x9c, 0x03, 0x5f, 0x43, 0x3d, + 0xf4, 0x6b, 0x01, 0xc0, 0x4f, 0x2c, 0x2f, 0xb8, 0x2f, 0x27, 0xb9, 0xab, 0x3c, 0xb7, 0x17, 0x4a, + 0x2b, 0xc7, 0x64, 0x76, 0x5d, 0x58, 0x45, 0xdf, 0x85, 0xdc, 0xbb, 0x94, 0x3e, 0x72, 0x2d, 0x34, + 0x2b, 0x3b, 0x6e, 0xad, 0x22, 0x6f, 0x37, 0x82, 0x5b, 0x72, 0x12, 0xcd, 0x32, 0xd7, 0x2c, 0xa1, + 0xaf, 0x1c, 0x5b, 0x53, 0x1e, 0x58, 0xe8, 0xa1, 0x1f, 0x0b, 0x90, 0x7b, 0xdf, 0x6a, 0x9c, 0xb0, + 0xee, 0x87, 0xbc, 0x99, 0x4a, 0x97, 0xb8, 0x15, 0xaf, 0x15, 0x9f, 0xd1, 0x0a, 0x2f, 0x0c, 0x3f, + 0x17, 0x20, 0xb7, 0x49, 0x3a, 0x84, 0x91, 0xfe, 0x38, 0x0c, 0x53, 0xf3, 0xf0, 0xb0, 0xfa, 0x5a, + 0xed, 0x55, 0x98, 0x01, 0xa8, 0x5a, 0xfa, 0x6d, 0xd2, 0xad, 0xba, 0xac, 0x8d, 0xc6, 0xe0, 0x2c, + 0xe4, 0xee, 0x78, 0x3f, 0x2b, 0x28, 0x0f, 0x59, 0x9b, 0x68, 0x0d, 0x18, 0x7f, 0x6c, 0xeb, 0x8c, + 0xf8, 0xa1, 0x59, 0x7d, 0xd6, 0xd0, 0xfc, 0x5d, 0x80, 0x89, 0x9b, 0x84, 0xdd, 0x75, 0x89, 0xdd, + 0xfd, 0x7f, 0x06, 0xe7, 0x53, 0xe1, 0xb0, 0x7a, 0xbf, 0xb4, 0x03, 0xcb, 0x83, 0x60, 0x5a, 0xa4, + 0x70, 0x44, 0x78, 0xf6, 0xa1, 0x50, 0x1b, 0xe3, 0xfe, 0xc9, 0xe8, 0xf5, 0xe3, 0xfc, 0xfb, 0xb6, + 0xa7, 0x20, 0xf4, 0xf2, 0xd3, 0x71, 0x28, 0xdc, 0x24, 0x2c, 0xec, 0xe5, 0xbe, 0xf2, 0xab, 0x23, + 0x7b, 0x1b, 0xf2, 0x17, 0x4f, 0xce, 0x5a, 0xfa, 0x24, 0xcb, 0x3d, 0xf8, 0xaf, 0x88, 0xfe, 0x2d, + 0x1e, 0xe3, 0x43, 0x34, 0x9c, 0x82, 0x56, 0x30, 0x08, 0x68, 0xf6, 0xd2, 0x67, 0xa9, 0xbe, 0x39, + 0x14, 0x29, 0xf6, 0x9d, 0xb9, 0x4f, 0x3b, 0x4c, 0xf6, 0xb3, 0xa7, 0x60, 0xb9, 0xc1, 0xa7, 0x43, + 0x79, 0x13, 0x1d, 0x78, 0x38, 0xd6, 0xea, 0xe7, 0x3b, 0xc2, 0x52, 0x03, 0x1d, 0x19, 0xaa, 0xb0, + 0xbf, 0xc1, 0x0e, 0x01, 0x30, 0x43, 0x8e, 0x87, 0xfa, 0xe9, 0x3c, 0x4d, 0x6b, 0x62, 0x00, 0xa0, + 0xcf, 0x44, 0xc8, 0x6e, 0xd5, 0xdb, 0x14, 0x0d, 0xfb, 0x30, 0xe6, 0xb8, 0x35, 0xd9, 0x87, 0x92, + 0x61, 0x73, 0x78, 0x66, 0xca, 0xd2, 0xbf, 0x32, 0x87, 0xd5, 0x1f, 0x64, 0x60, 0x9a, 0xd4, 0xdb, + 0x14, 0x3b, 0xfe, 0xe0, 0x87, 0x09, 0xbe, 0xb2, 0xad, 0x3a, 0x9a, 0xbb, 0xe7, 0x1a, 0x86, 0x66, + 0x77, 0xd7, 0xf1, 0x56, 0xb0, 0x55, 0x2c, 0x6c, 0x12, 0xa7, 0x6e, 0xeb, 0xfc, 0x6b, 0x36, 0xdf, + 0x2d, 0x6d, 0x02, 0x4a, 0x5e, 0x5b, 0x6e, 0xed, 0x88, 0x97, 0xf5, 0x9d, 0x6b, 0x20, 0x7e, 0xf5, + 0xe2, 0x65, 0x74, 0x05, 0xde, 0x50, 0x09, 0x73, 0x6d, 0x93, 0x34, 0xf0, 0xe3, 0x36, 0x31, 0x31, + 0x6b, 0x13, 0x6c, 0x13, 0x87, 0xba, 0x76, 0x9d, 0x60, 0xdd, 0xc1, 0x8c, 0x18, 0x16, 0xb5, 0x35, + 0x5b, 0xef, 0x74, 0xb1, 0x6b, 0x6a, 0xfb, 0x9a, 0xde, 0xd1, 0x6a, 0x1d, 0x22, 0xbf, 0xf3, 0x26, + 0x88, 0x6b, 0x17, 0xd7, 0xd0, 0x1a, 0xac, 0x3e, 0x45, 0x40, 0x83, 0x12, 0x07, 0x9b, 0x94, 0x61, + 0xf2, 0x44, 0x77, 0x98, 0x8c, 0x72, 0x90, 0xfd, 0x55, 0x46, 0x10, 0xf9, 0x25, 0xfb, 0xe8, 0xf8, + 0x36, 0xe1, 0x05, 0x46, 0x39, 0xf0, 0x13, 0xf3, 0x60, 0xa9, 0x54, 0x50, 0xf6, 0x2b, 0x11, 0xbd, + 0x77, 0xb6, 0xee, 0x3f, 0x72, 0x1f, 0x20, 0xd4, 0x77, 0x84, 0x7e, 0x2b, 0xc0, 0xf4, 0x26, 0x21, + 0x16, 0xff, 0x7e, 0xe8, 0x6d, 0x7c, 0x39, 0x73, 0xf7, 0x1a, 0xf7, 0xed, 0x6a, 0x69, 0xed, 0xd8, + 0x16, 0x9f, 0xf8, 0x7b, 0x83, 0xec, 0xc1, 0x53, 0x3e, 0x85, 0xaa, 0x00, 0x3b, 0x74, 0x43, 0x37, + 0x1b, 0xba, 0xd9, 0x72, 0xd0, 0x52, 0x5f, 0x07, 0xdf, 0x0c, 0xfe, 0x14, 0x33, 0xb4, 0xb9, 0x8f, + 0xa1, 0x0f, 0xe0, 0xd4, 0x7d, 0xdd, 0x20, 0xd4, 0x65, 0x68, 0x08, 0xd1, 0x50, 0xe6, 0x73, 0xdc, + 0xfc, 0x33, 0x68, 0x3e, 0x1e, 0x4f, 0x16, 0x08, 0x6b, 0x43, 0x61, 0xcb, 0xb6, 0xa9, 0xed, 0x61, + 0xe7, 0x4d, 0xc2, 0x34, 0xbd, 0xe3, 0x8c, 0xac, 0xe0, 0x02, 0x57, 0xf0, 0x22, 0x5a, 0x4e, 0x24, + 0xcc, 0x93, 0xfa, 0x58, 0x67, 0xed, 0x46, 0x20, 0xf5, 0x27, 0x02, 0xa0, 0x9b, 0x84, 0xa5, 0xb1, + 0xfa, 0xc5, 0x63, 0xf3, 0x91, 0xe2, 0x18, 0x6a, 0xc6, 0x2b, 0xdc, 0x8c, 0xf3, 0xa5, 0xa5, 0xb8, + 0x19, 0x9e, 0x05, 0x35, 0xda, 0xe8, 0x2a, 0x07, 0x1e, 0x22, 0xe0, 0x98, 0x1e, 0xfd, 0x48, 0x80, + 0xb9, 0x5d, 0xea, 0x30, 0x4f, 0x22, 0x67, 0xe5, 0x86, 0x3c, 0xdb, 0xb3, 0x60, 0xa8, 0x76, 0x85, + 0x6b, 0x7f, 0xb5, 0x74, 0x21, 0xae, 0xdd, 0xa2, 0x0e, 0xf3, 0x2c, 0xe0, 0x5f, 0x84, 0x7d, 0x33, + 0xc2, 0xa2, 0x28, 0xfe, 0x5e, 0x38, 0xac, 0xfe, 0x4e, 0x40, 0xcd, 0x21, 0x6f, 0x07, 0xdc, 0x88, + 0x35, 0x89, 0x72, 0x19, 0x3f, 0x6e, 0xeb, 0xf5, 0x36, 0x76, 0xda, 0xd4, 0xed, 0x34, 0xf8, 0xf5, + 0xab, 0x11, 0xec, 0x3a, 0xa4, 0x81, 0x75, 0x13, 0x5b, 0x1d, 0xad, 0x4e, 0x30, 0x6d, 0xf2, 0x8b, + 0xda, 0xa0, 0x75, 0xd7, 0x20, 0xa6, 0xff, 0x07, 0x32, 0x5c, 0xa7, 0x86, 0xb7, 0x38, 0x5f, 0xbc, + 0x0b, 0x2b, 0x83, 0x90, 0x81, 0x77, 0x8d, 0xc2, 0xd7, 0xca, 0x88, 0xfd, 0xa6, 0xf2, 0x31, 0x9c, + 0xae, 0x6b, 0x06, 0xe9, 0x5c, 0xd7, 0x1c, 0x12, 0xc8, 0xf0, 0xa0, 0x35, 0x52, 0x61, 0xdc, 0xff, + 0xac, 0x3d, 0x6a, 0x21, 0x2d, 0xf1, 0x18, 0xce, 0xa3, 0xb9, 0x44, 0x21, 0x79, 0x47, 0x95, 0x6f, + 0xc1, 0x72, 0xd5, 0xa4, 0xac, 0x4d, 0xec, 0x40, 0x93, 0x97, 0xbc, 0xd8, 0xa5, 0x7a, 0x3b, 0x71, + 0xc5, 0x46, 0x55, 0x3c, 0xb6, 0xf1, 0x97, 0xdc, 0x61, 0xf5, 0xf3, 0x1c, 0x62, 0x30, 0x5f, 0xc5, + 0x1b, 0xfe, 0xf7, 0xb4, 0x58, 0x07, 0xf8, 0x10, 0x4e, 0xb7, 0xd4, 0xdd, 0xeb, 0xe5, 0x9b, 0xbe, + 0xe7, 0xd8, 0xb2, 0xe9, 0xc7, 0xa4, 0xce, 0x46, 0x8d, 0x58, 0xb1, 0x60, 0x52, 0x93, 0x7c, 0x3d, + 0xf0, 0xcc, 0xa3, 0xae, 0x88, 0x97, 0xe4, 0x8b, 0xab, 0xa2, 0x90, 0xc9, 0x56, 0x0a, 0x9a, 0xe5, + 0x7f, 0xa5, 0xd3, 0xa9, 0xa9, 0x7c, 0xec, 0x50, 0xb3, 0xb2, 0x10, 0xdf, 0x79, 0x52, 0x6e, 0x52, + 0x5a, 0x36, 0x74, 0x83, 0xac, 0xf7, 0x51, 0xae, 0x0f, 0xa1, 0x54, 0x77, 0xbd, 0x86, 0x7e, 0x19, + 0x6d, 0xc3, 0xcd, 0xfe, 0x86, 0xee, 0x3a, 0xc4, 0x3e, 0x6a, 0xe6, 0x6d, 0x6d, 0x9f, 0x60, 0x8b, + 0xd8, 0x86, 0xee, 0x38, 0x5e, 0xdd, 0x30, 0x8a, 0xb5, 0x7a, 0x9d, 0x38, 0x4e, 0xa2, 0xf9, 0xcb, + 0xea, 0x73, 0x8c, 0x88, 0x53, 0xea, 0x2d, 0x10, 0xd7, 0x2e, 0x5d, 0x41, 0x55, 0xc8, 0x6f, 0xbf, + 0x62, 0x60, 0x0d, 0x33, 0xa2, 0x59, 0x94, 0xc9, 0xe8, 0x22, 0xc8, 0xc5, 0x91, 0xbe, 0x91, 0x3c, + 0xf8, 0x69, 0x06, 0x66, 0x61, 0x72, 0x43, 0x73, 0xf4, 0x3a, 0x87, 0xe7, 0x99, 0x09, 0x01, 0x5e, + 0x48, 0x00, 0xf6, 0xd9, 0x89, 0x4c, 0x71, 0xf2, 0xc3, 0x72, 0x75, 0x77, 0xbb, 0x7c, 0x9b, 0x74, + 0x71, 0x06, 0xbe, 0x10, 0x22, 0x00, 0xff, 0xb9, 0x30, 0x21, 0x4a, 0xd9, 0xca, 0x4b, 0x61, 0xf6, + 0x62, 0x09, 0x51, 0xa8, 0xe6, 0xb2, 0xb6, 0xe2, 0xfd, 0x43, 0x6d, 0xfd, 0x3b, 0x64, 0x7d, 0x65, + 0x38, 0x11, 0xa3, 0x8f, 0x88, 0xb9, 0xf1, 0x7d, 0x28, 0xfa, 0xef, 0x01, 0x84, 0x6e, 0xda, 0x9a, + 0xc9, 0x1c, 0xec, 0x2d, 0x82, 0xe8, 0xc1, 0x72, 0xf0, 0x4a, 0x40, 0xf3, 0xc1, 0x21, 0x5f, 0x85, + 0xa7, 0xd7, 0x61, 0x5c, 0x6b, 0x18, 0xba, 0x89, 0xd6, 0x13, 0xac, 0x66, 0x23, 0x41, 0xc6, 0x93, + 0xe1, 0x91, 0xe9, 0x0e, 0xf3, 0x06, 0xc5, 0x3e, 0xc1, 0xba, 0xd9, 0xa4, 0xb6, 0xc1, 0xf3, 0x5d, + 0x5b, 0x81, 0x7c, 0x3c, 0x14, 0x63, 0xe9, 0x97, 0x4b, 0xed, 0xd5, 0xa1, 0x6f, 0x97, 0x34, 0xa9, + 0xbd, 0x0d, 0x67, 0xdf, 0x3b, 0x6a, 0x0e, 0xf1, 0x9a, 0x1f, 0xb5, 0xd6, 0x1f, 0x4c, 0x46, 0x99, + 0xab, 0xe5, 0xf8, 0x75, 0xbb, 0xfc, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9d, 0xee, 0xfd, 0x43, + 0x14, 0x21, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 1805eb4e96c..af771b2c31f 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -394,6 +394,205 @@ func request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler r } +func request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverythingRepeated + var metadata runtime.ServerMetadata + + var ( + val string + es []int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["path_repeated_float_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_float_value") + } + + protoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_float_value", err) + } + + val, ok = pathParams["path_repeated_double_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_double_value") + } + + protoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_double_value", err) + } + + val, ok = pathParams["path_repeated_int64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int64_value") + } + + protoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int64_value", err) + } + + val, ok = pathParams["path_repeated_uint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint64_value") + } + + protoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint64_value", err) + } + + val, ok = pathParams["path_repeated_int32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int32_value") + } + + protoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int32_value", err) + } + + val, ok = pathParams["path_repeated_fixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed64_value") + } + + protoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed64_value", err) + } + + val, ok = pathParams["path_repeated_fixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed32_value") + } + + protoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed32_value", err) + } + + val, ok = pathParams["path_repeated_bool_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bool_value") + } + + protoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bool_value", err) + } + + val, ok = pathParams["path_repeated_string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_string_value") + } + + protoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_string_value", err) + } + + val, ok = pathParams["path_repeated_bytes_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bytes_value") + } + + protoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bytes_value", err) + } + + val, ok = pathParams["path_repeated_uint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint32_value") + } + + protoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint32_value", err) + } + + val, ok = pathParams["path_repeated_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_enum_value") + } + + es, err = runtime.EnumSlice(val, ",", NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_enum_value", err) + } + + s := make([]NumericEnum, len(es)) + for i, v := range es { + s[i] = NumericEnum(v) + } + protoReq.PathRepeatedEnumValue = s + + val, ok = pathParams["path_repeated_sfixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed32_value") + } + + protoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed32_value", err) + } + + val, ok = pathParams["path_repeated_sfixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed64_value") + } + + protoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed64_value", err) + } + + val, ok = pathParams["path_repeated_sint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint32_value") + } + + protoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint32_value", err) + } + + val, ok = pathParams["path_repeated_sint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint64_value") + } + + protoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint64_value", err) + } + + msg, err := client.GetRepeatedQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq sub.StringMessage var metadata runtime.ServerMetadata @@ -783,6 +982,35 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_GetRepeatedQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_GetRepeatedQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ABitOfEverythingService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1031,6 +1259,8 @@ var ( pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "")) + pattern_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{"v1", "example", "a_bit_of_everything_repeated", "path_repeated_float_value", "path_repeated_double_value", "path_repeated_int64_value", "path_repeated_uint64_value", "path_repeated_int32_value", "path_repeated_fixed64_value", "path_repeated_fixed32_value", "path_repeated_bool_value", "path_repeated_string_value", "path_repeated_bytes_value", "path_repeated_uint32_value", "path_repeated_enum_value", "path_repeated_sfixed32_value", "path_repeated_sfixed64_value", "path_repeated_sint32_value", "path_repeated_sint64_value"}, "")) + pattern_ABitOfEverythingService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "echo", "value"}, "")) pattern_ABitOfEverythingService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "")) @@ -1061,6 +1291,8 @@ var ( forward_ABitOfEverythingService_GetQuery_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Echo_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_Echo_1 = runtime.ForwardResponseMessage diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 257d32cefd0..a500bd397ad 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -195,6 +195,28 @@ message ABitOfEverything { repeated NumericEnum repeated_enum_value = 28; } +// ABitOfEverythingRepeated is used to validate repeated path parameter functionality +message ABitOfEverythingRepeated { + + // repeated values. they are comma-separated in path + repeated float path_repeated_float_value = 1; + repeated double path_repeated_double_value = 2; + repeated int64 path_repeated_int64_value = 3; + repeated uint64 path_repeated_uint64_value = 4; + repeated int32 path_repeated_int32_value = 5; + repeated fixed64 path_repeated_fixed64_value = 6; + repeated fixed32 path_repeated_fixed32_value = 7; + repeated bool path_repeated_bool_value = 8; + repeated string path_repeated_string_value = 9; + repeated bytes path_repeated_bytes_value = 10; + repeated uint32 path_repeated_uint32_value = 11; + repeated NumericEnum path_repeated_enum_value = 12; + repeated sfixed32 path_repeated_sfixed32_value = 13; + repeated sfixed64 path_repeated_sfixed64_value = 14; + repeated sint32 path_repeated_sint32_value = 15; + repeated sint64 path_repeated_sint64_value = 16; +} + message Body { string name = 1; } @@ -284,6 +306,11 @@ service ABitOfEverythingService { } }; } + rpc GetRepeatedQuery(ABitOfEverythingRepeated) returns (ABitOfEverythingRepeated) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" + }; + } // Echo allows posting a StringMessage value. // // It also exposes multiple bindings. @@ -361,6 +388,7 @@ service ABitOfEverythingService { }; } } + // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) service camelCaseServiceName { rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index ad7797aa66b..461028cb570 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -720,6 +720,235 @@ ] } }, + "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}": { + "get": { + "operationId": "GetRepeatedQuery", + "responses": { + "200": { + "description": "", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverythingRepeated" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "path_repeated_float_value", + "description": "repeated values. they are comma-separated in path", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "number", + "format": "float" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_double_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_int64_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "int64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_uint64_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "uint64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_int32_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_fixed64_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "uint64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_fixed32_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_bool_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "boolean", + "format": "boolean" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_string_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_bytes_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "byte" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_uint32_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_enum_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_sfixed32_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_sfixed64_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "int64" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_sint32_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "integer", + "format": "int32" + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "path_repeated_sint64_value", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "format": "int64" + }, + "collectionFormat": "csv", + "minItems": 1 + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v2/example/echo": { "get": { "summary": "Summary: Echo rpc", @@ -1194,6 +1423,123 @@ "uuid" ] }, + "examplepbABitOfEverythingRepeated": { + "type": "object", + "properties": { + "path_repeated_float_value": { + "type": "array", + "items": { + "type": "number", + "format": "float" + }, + "title": "repeated values. they are comma-separated in path" + }, + "path_repeated_double_value": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + }, + "path_repeated_int64_value": { + "type": "array", + "items": { + "type": "string", + "format": "int64" + } + }, + "path_repeated_uint64_value": { + "type": "array", + "items": { + "type": "string", + "format": "uint64" + } + }, + "path_repeated_int32_value": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + }, + "path_repeated_fixed64_value": { + "type": "array", + "items": { + "type": "string", + "format": "uint64" + } + }, + "path_repeated_fixed32_value": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "path_repeated_bool_value": { + "type": "array", + "items": { + "type": "boolean", + "format": "boolean" + } + }, + "path_repeated_string_value": { + "type": "array", + "items": { + "type": "string" + } + }, + "path_repeated_bytes_value": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + }, + "path_repeated_uint32_value": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "path_repeated_enum_value": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "path_repeated_sfixed32_value": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + }, + "path_repeated_sfixed64_value": { + "type": "array", + "items": { + "type": "string", + "format": "int64" + } + }, + "path_repeated_sint32_value": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + }, + "path_repeated_sint64_value": { + "type": "array", + "items": { + "type": "string", + "format": "int64" + } + } + }, + "title": "ABitOfEverythingRepeated is used to validate repeated path parameter functionality" + }, "examplepbBody": { "type": "object", "properties": { diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index 2d8dec55c25..4f433654749 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -187,6 +187,14 @@ func (s *_ABitOfEverythingServer) GetQuery(ctx context.Context, msg *examples.AB return new(empty.Empty), nil } +func (s *_ABitOfEverythingServer) GetRepeatedQuery(ctx context.Context, msg *examples.ABitOfEverythingRepeated) (*examples.ABitOfEverythingRepeated, error) { + s.m.Lock() + defer s.m.Unlock() + + glog.Info(msg) + return msg, nil +} + func (s *_ABitOfEverythingServer) Echo(ctx context.Context, msg *sub.StringMessage) (*sub.StringMessage, error) { s.m.Lock() defer s.m.Unlock() diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 9132e0a6d4d..9a201112b0a 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -50,12 +50,20 @@ type Registry struct { // allowRepeatedFieldsInBody permits repeated field in body field path of `google.api.http` annotation option allowRepeatedFieldsInBody bool + // repeatedPathParamSeparator specifies how path parameter repeated fields are separated + repeatedPathParamSeparator repeatedFieldSeparator + // useJSONNamesForFields if true json tag name is used for generating fields in swagger definitions, // otherwise the original proto name is used. It's helpful for synchronizing the swagger definition // with grpc-gateway response, if it uses json tags for marshaling. useJSONNamesForFields bool } +type repeatedFieldSeparator struct { + name string + sep rune +} + // NewRegistry returns a new Registry. func NewRegistry() *Registry { return &Registry{ @@ -65,6 +73,10 @@ func NewRegistry() *Registry { pkgMap: make(map[string]string), pkgAliases: make(map[string]string), externalHTTPRules: make(map[string][]*annotations.HttpRule), + repeatedPathParamSeparator: repeatedFieldSeparator{ + name: "csv", + sep: ',', + }, } } @@ -338,6 +350,41 @@ func (r *Registry) IsAllowRepeatedFieldsInBody() bool { return r.allowRepeatedFieldsInBody } +// GetRepeatedPathParamSeparator returns a rune spcifying how +// path parameter repeated fields are separated. +func (r *Registry) GetRepeatedPathParamSeparator() rune { + return r.repeatedPathParamSeparator.sep +} + +// GetRepeatedPathParamSeparatorName returns the name path parameter repeated +// fields repeatedFieldSeparator. I.e. 'csv', 'pipe', 'ssv' or 'tsv' +func (r *Registry) GetRepeatedPathParamSeparatorName() string { + return r.repeatedPathParamSeparator.name +} + +// SetRepeatedPathParamSeparator sets how path parameter repeated fields are +// separated. Allowed names are 'csv', 'pipe', 'ssv' and 'tsv'. +func (r *Registry) SetRepeatedPathParamSeparator(name string) error { + var sep rune + switch name { + case "csv": + sep = ',' + case "pipes": + sep = '|' + case "ssv": + sep = ' ' + case "tsv": + sep = '\t' + default: + return fmt.Errorf("unknown repeated path parameter separator: %s", name) + } + r.repeatedPathParamSeparator = repeatedFieldSeparator{ + name: name, + sep: sep, + } + return nil +} + // SetUseJSONNamesForFields sets useJSONNamesForFields func (r *Registry) SetUseJSONNamesForFields(use bool) { r.useJSONNamesForFields = use diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index 56dd9a8da2d..8916d316d18 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -203,7 +203,7 @@ func extractAPIOptions(meth *descriptor.MethodDescriptorProto) (*options.HttpRul func (r *Registry) newParam(meth *Method, path string) (Parameter, error) { msg := meth.RequestType - fields, err := r.resolveFieldPath(msg, path) + fields, err := r.resolveFieldPath(msg, path, true) if err != nil { return Parameter{}, err } @@ -236,7 +236,7 @@ func (r *Registry) newBody(meth *Method, path string) (*Body, error) { case "*": return &Body{FieldPath: nil}, nil } - fields, err := r.resolveFieldPath(msg, path) + fields, err := r.resolveFieldPath(msg, path, false) if err != nil { return nil, err } @@ -249,7 +249,7 @@ func (r *Registry) newResponse(meth *Method, path string) (*Body, error) { case "", "*": return nil, nil } - fields, err := r.resolveFieldPath(msg, path) + fields, err := r.resolveFieldPath(msg, path, false) if err != nil { return nil, err } @@ -268,7 +268,7 @@ func lookupField(msg *Message, name string) *Field { } // resolveFieldPath resolves "path" into a list of fieldDescriptor, starting from "msg". -func (r *Registry) resolveFieldPath(msg *Message, path string) ([]FieldPathComponent, error) { +func (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) ([]FieldPathComponent, error) { if path == "" { return nil, nil } @@ -295,7 +295,7 @@ func (r *Registry) resolveFieldPath(msg *Message, path string) ([]FieldPathCompo if f == nil { return nil, fmt.Errorf("no field %q found in %s", path, root.GetName()) } - if !r.allowRepeatedFieldsInBody && f.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED { + if !(isPathParam || r.allowRepeatedFieldsInBody) && f.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED { return nil, fmt.Errorf("repeated field not allowed in field path: %s in %s", f.GetName(), path) } result = append(result, FieldPathComponent{Name: c, Target: f}) diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index 93a8f67ce05..355ce6099fc 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -1097,7 +1097,7 @@ func TestResolveFieldPath(t *testing.T) { if err != nil { t.Fatalf("reg.LookupFile(%q) failed with %v; want success; on file=%s", file.GetName(), err, spec.src) } - _, err = reg.resolveFieldPath(f.Messages[0], spec.path) + _, err = reg.resolveFieldPath(f.Messages[0], spec.path, false) if got, want := err != nil, spec.wantErr; got != want { if want { t.Errorf("reg.resolveFiledPath(%q, %q) succeeded; want an error", f.Messages[0].GetName(), spec.path) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 319e58727e6..5cf9d597fb0 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -234,8 +234,12 @@ type Parameter struct { // The converter function converts a string into a value for the parameter. func (p Parameter) ConvertFuncExpr() (string, error) { tbl := proto3ConvertFuncs - if p.Target.Message.File.proto2() { + if !p.IsProto2() && p.IsRepeated() { + tbl = proto3RepeatedConvertFuncs + } else if p.IsProto2() && !p.IsRepeated() { tbl = proto2ConvertFuncs + } else if p.IsProto2() && p.IsRepeated() { + tbl = proto2RepeatedConvertFuncs } typ := p.Target.GetType() conv, ok := tbl[typ] @@ -248,6 +252,21 @@ func (p Parameter) ConvertFuncExpr() (string, error) { return conv, nil } +// IsEnum returns true if the field is an enum type, otherwise false is returned. +func (p Parameter) IsEnum() bool { + return p.Target.GetType() == descriptor.FieldDescriptorProto_TYPE_ENUM +} + +// IsRepeated returns true if the field is repeated, otherwise false is returned. +func (p Parameter) IsRepeated() bool { + return p.Target.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED +} + +// IsProto2 returns true if the field is proto2, otherwise false is returned. +func (p Parameter) IsProto2() bool { + return p.Target.Message.File.proto2() +} + // Body describes a http (request|response) body to be sent to the (method|client). // This is used in body and response_body options in google.api.HttpRule type Body struct { @@ -366,6 +385,27 @@ var ( descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64", } + proto3RepeatedConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ + descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", + descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", + descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", + descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", + descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", + descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", + descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", + descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", + // FieldDescriptorProto_TYPE_GROUP + // FieldDescriptorProto_TYPE_MESSAGE + descriptor.FieldDescriptorProto_TYPE_BYTES: "runtime.BytesSlice", + descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", + descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", + descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", + descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", + } + proto2ConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64P", descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32P", @@ -388,6 +428,28 @@ var ( descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64P", } + proto2RepeatedConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ + descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", + descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", + descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", + descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", + descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", + descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", + descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", + descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", + // FieldDescriptorProto_TYPE_GROUP + // FieldDescriptorProto_TYPE_MESSAGE + // FieldDescriptorProto_TYPE_BYTES + // TODO(maros7) Handle bytes + descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", + descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", + descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", + descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", + descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", + } + wellKnownTypeConv = map[string]string{ ".google.protobuf.Timestamp": "runtime.Timestamp", ".google.protobuf.Duration": "runtime.Duration", diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 7d3aa2f2b4d..a8031068702 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -7,7 +7,6 @@ import ( "text/template" "github.com/golang/glog" - pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) @@ -56,10 +55,24 @@ func (b binding) QueryParamFilter() queryParamFilter { return queryParamFilter{utilities.NewDoubleArray(seqs)} } -// HasEnumPathParam returns true if the path parameter slice contains a parameter that maps to an enum proto field, if not false is returned. +// HasEnumPathParam returns true if the path parameter slice contains a parameter +// that maps to an enum proto field that is not repeated, if not false is returned. func (b binding) HasEnumPathParam() bool { + return b.hasEnumPathParam(false) +} + +// HasRepeatedEnumPathParam returns true if the path parameter slice contains a parameter +// that maps to a repeated enum proto field, if not false is returned. +func (b binding) HasRepeatedEnumPathParam() bool { + return b.hasEnumPathParam(true) +} + +// hasEnumPathParam returns true if the path parameter slice contains a parameter +// that maps to a enum proto field and that the enum proto field is or isn't repeated +// based on the provided 'repeated' parameter. +func (b binding) hasEnumPathParam(repeated bool) bool { for _, p := range b.PathParams { - if p.Target.GetType() == pbdescriptor.FieldDescriptorProto_TYPE_ENUM { + if p.IsEnum() && p.IsRepeated() == repeated { return true } } @@ -240,6 +253,9 @@ var ( val string {{- if .HasEnumPathParam}} e int32 +{{- end}} +{{- if .HasRepeatedEnumPathParam}} + es []int32 {{- end}} ok bool err error @@ -255,14 +271,20 @@ var ( {{if $param.IsNestedProto3}} err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) {{else if $enum}} - e, err = {{$param.ConvertFuncExpr}}(val, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) {{else}} - {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val) + {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) {{end}} if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } -{{if $enum}} +{{if and $enum $param.IsRepeated}} + s := make([]{{$enum.GoType $param.Target.Message.File.GoPkg.Path}}, len(es)) + for i, v := range es { + s[i] = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(v) + } + {{$param.AssignableExpr "protoReq"}} = s +{{else if $enum}} {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(e) {{end}} {{end}} diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 276e8fc9df0..a34627534ca 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -22,14 +22,15 @@ import ( ) var ( - importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - importPath = flag.String("import_path", "", "used as the package if no input files declare go_package. If it contains slashes, everything up to the rightmost slash is ignored.") - registerFuncSuffix = flag.String("register_func_suffix", "Handler", "used to construct names of generated Register* methods.") - useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") - allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") + importPath = flag.String("import_path", "", "used as the package if no input files declare go_package. If it contains slashes, everything up to the rightmost slash is ignored.") + registerFuncSuffix = flag.String("register_func_suffix", "Handler", "used to construct names of generated Register* methods.") + useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") + allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") ) func main() { @@ -77,6 +78,10 @@ func main() { reg.SetImportPath(*importPath) reg.SetAllowDeleteBody(*allowDeleteBody) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) + if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { + emitError(err) + return + } if err := reg.Load(req); err != nil { emitError(err) return diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index a377f33e692..e5d37492186 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -582,11 +582,16 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { - var paramType, paramFormat, desc string + var paramType, paramFormat, desc, collectionFormat string var enumNames []string + var items *swaggerItemsObject + var minItems *int switch pt := parameter.Target.GetType(); pt { case pbdescriptor.FieldDescriptorProto_TYPE_GROUP, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { + if parameter.IsRepeated() { + return fmt.Errorf("only primitive and enum types are allowed in repeated path parameters") + } schema := schemaOfField(parameter.Target, reg, customRefs) paramType = schema.Type paramFormat = schema.Format @@ -610,6 +615,21 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } + if parameter.IsRepeated() { + core := schemaCore{Type: paramType, Format: paramFormat} + if parameter.IsEnum() { + var s []string + core.Enum = enumNames + enumNames = s + } + items = (*swaggerItemsObject)(&core) + paramType = "array" + paramFormat = "" + collectionFormat = reg.GetRepeatedPathParamSeparatorName() + minItems = new(int) + *minItems = 1 + } + if desc == "" { desc = fieldProtoComments(reg, parameter.Target.Message, parameter.Target) } @@ -620,9 +640,12 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re In: "path", Required: true, // Parameters in gRPC-Gateway can only be strings? - Type: paramType, - Format: paramFormat, - Enum: enumNames, + Type: paramType, + Format: paramFormat, + Enum: enumNames, + Items: items, + CollectionFormat: collectionFormat, + MinItems: minItems, }) } // Now check if there is a body parameter diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index b6480b43e3a..9d01e21d15c 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -113,15 +113,17 @@ type swaggerParametersObject []swaggerParameterObject // http://swagger.io/specification/#parameterObject type swaggerParameterObject struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` - In string `json:"in,omitempty"` - Required bool `json:"required"` - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Items *swaggerItemsObject `json:"items,omitempty"` - Enum []string `json:"enum,omitempty"` - Default string `json:"default,omitempty"` + Name string `json:"name"` + Description string `json:"description,omitempty"` + In string `json:"in,omitempty"` + Required bool `json:"required"` + Type string `json:"type,omitempty"` + Format string `json:"format,omitempty"` + Items *swaggerItemsObject `json:"items,omitempty"` + Enum []string `json:"enum,omitempty"` + CollectionFormat string `json:"collectionFormat,omitempty"` + Default string `json:"default,omitempty"` + MinItems *int `json:"minItems,omitempty"` // Or you can explicitly refer to another type. If this is defined all // other fields should be empty diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 6c6cccb8d4a..578b5c4233e 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -15,13 +15,14 @@ import ( ) var ( - importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - file = flag.String("file", "-", "where to load data from") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") - mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") - useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") + importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") + file = flag.String("file", "-", "where to load data from") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") + mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") + useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") + repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") ) func main() { @@ -58,6 +59,10 @@ func main() { reg.SetAllowMerge(*allowMerge) reg.SetMergeFileName(*mergeFileName) reg.SetUseJSONNamesForFields(*useJSONNamesForFields) + if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { + emitError(err) + return + } for k, v := range pkgMap { reg.AddPkgMap(k, v) } diff --git a/runtime/convert.go b/runtime/convert.go index 5000ff19064..bd54ba12bec 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "fmt" "strconv" + "strings" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/ptypes/duration" @@ -16,16 +17,52 @@ func String(val string) (string, error) { return val, nil } +// StringSlice converts 'val' where individual strings are separated by +// 'sep' into a string slice. +func StringSlice(val, sep string) ([]string, error) { + return strings.Split(val, sep), nil +} + // Bool converts the given string representation of a boolean value into bool. func Bool(val string) (bool, error) { return strconv.ParseBool(val) } +// BoolSlice converts 'val' where individual booleans are separated by +// 'sep' into a bool slice. +func BoolSlice(val, sep string) ([]bool, error) { + s := strings.Split(val, sep) + values := make([]bool, len(s)) + for i, v := range s { + value, err := Bool(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Float64 converts the given string representation into representation of a floating point number into float64. func Float64(val string) (float64, error) { return strconv.ParseFloat(val, 64) } +// Float64Slice converts 'val' where individual floating point numbers are separated by +// 'sep' into a float64 slice. +func Float64Slice(val, sep string) ([]float64, error) { + s := strings.Split(val, sep) + values := make([]float64, len(s)) + for i, v := range s { + value, err := Float64(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Float32 converts the given string representation of a floating point number into float32. func Float32(val string) (float32, error) { f, err := strconv.ParseFloat(val, 32) @@ -35,11 +72,41 @@ func Float32(val string) (float32, error) { return float32(f), nil } +// Float32Slice converts 'val' where individual floating point numbers are separated by +// 'sep' into a float32 slice. +func Float32Slice(val, sep string) ([]float32, error) { + s := strings.Split(val, sep) + values := make([]float32, len(s)) + for i, v := range s { + value, err := Float32(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Int64 converts the given string representation of an integer into int64. func Int64(val string) (int64, error) { return strconv.ParseInt(val, 0, 64) } +// Int64Slice converts 'val' where individual integers are separated by +// 'sep' into a int64 slice. +func Int64Slice(val, sep string) ([]int64, error) { + s := strings.Split(val, sep) + values := make([]int64, len(s)) + for i, v := range s { + value, err := Int64(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Int32 converts the given string representation of an integer into int32. func Int32(val string) (int32, error) { i, err := strconv.ParseInt(val, 0, 32) @@ -49,11 +116,41 @@ func Int32(val string) (int32, error) { return int32(i), nil } +// Int32Slice converts 'val' where individual integers are separated by +// 'sep' into a int32 slice. +func Int32Slice(val, sep string) ([]int32, error) { + s := strings.Split(val, sep) + values := make([]int32, len(s)) + for i, v := range s { + value, err := Int32(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Uint64 converts the given string representation of an integer into uint64. func Uint64(val string) (uint64, error) { return strconv.ParseUint(val, 0, 64) } +// Uint64Slice converts 'val' where individual integers are separated by +// 'sep' into a uint64 slice. +func Uint64Slice(val, sep string) ([]uint64, error) { + s := strings.Split(val, sep) + values := make([]uint64, len(s)) + for i, v := range s { + value, err := Uint64(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Uint32 converts the given string representation of an integer into uint32. func Uint32(val string) (uint32, error) { i, err := strconv.ParseUint(val, 0, 32) @@ -63,16 +160,49 @@ func Uint32(val string) (uint32, error) { return uint32(i), nil } +// Uint32Slice converts 'val' where individual integers are separated by +// 'sep' into a uint32 slice. +func Uint32Slice(val, sep string) ([]uint32, error) { + s := strings.Split(val, sep) + values := make([]uint32, len(s)) + for i, v := range s { + value, err := Uint32(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Bytes converts the given string representation of a byte sequence into a slice of bytes // A bytes sequence is encoded in URL-safe base64 without padding func Bytes(val string) ([]byte, error) { b, err := base64.StdEncoding.DecodeString(val) if err != nil { - return nil, err + b, err = base64.URLEncoding.DecodeString(val) + if err != nil { + return nil, err + } } return b, nil } +// BytesSlice converts 'val' where individual bytes sequences, encoded in URL-safe +// base64 without padding, are separated by 'sep' into a slice of bytes slices slice. +func BytesSlice(val, sep string) ([][]byte, error) { + s := strings.Split(val, sep) + values := make([][]byte, len(s)) + for i, v := range s { + value, err := Bytes(v) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} + // Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp. func Timestamp(val string) (*timestamp.Timestamp, error) { var r *timestamp.Timestamp @@ -106,3 +236,19 @@ func Enum(val string, enumValMap map[string]int32) (int32, error) { } return 0, fmt.Errorf("%s is not valid", val) } + +// EnumSlice converts 'val' where individual enums are separated by 'sep' +// into a int32 slice. Each individual int32 should be type casted into the +// correct enum proto type. +func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) { + s := strings.Split(val, sep) + values := make([]int32, len(s)) + for i, v := range s { + value, err := Enum(v, enumValMap) + if err != nil { + return values, err + } + values[i] = value + } + return values, nil +} From 8558711daa6c2853489043207b563dceacbc19cf Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 9 Sep 2018 12:38:07 +0100 Subject: [PATCH 0036/1518] Generate release notes for v1.5.0 --- CHANGELOG.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++----- Makefile | 4 +-- 2 files changed, 78 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc7f219ea1d..997afe3f6d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,72 @@ # Change Log +## [v1.5.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.0) (2018-09-09) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.1...v1.5.0) + +**Fixed bugs:** + +- 404s using colons in the middle of the last path segment [\#224](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) +- forwarding binary metadata is broken [\#218](https://github.com/grpc-ecosystem/grpc-gateway/issues/218) + +**Closed issues:** + +- something wrong with service [\#748](https://github.com/grpc-ecosystem/grpc-gateway/issues/748) +- Support for repeated path parameters [\#741](https://github.com/grpc-ecosystem/grpc-gateway/issues/741) +- Uint64 is represented as type:"string" in the swagger docs. [\#735](https://github.com/grpc-ecosystem/grpc-gateway/issues/735) +- autoregister all provided services [\#732](https://github.com/grpc-ecosystem/grpc-gateway/issues/732) +- `go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` fails on clean environment [\#731](https://github.com/grpc-ecosystem/grpc-gateway/issues/731) +- format tool [\#729](https://github.com/grpc-ecosystem/grpc-gateway/issues/729) +- Client grabbing errors [\#728](https://github.com/grpc-ecosystem/grpc-gateway/issues/728) +- how to do tls auth in grpc+grpc-gateway [\#727](https://github.com/grpc-ecosystem/grpc-gateway/issues/727) +- Let service choose it's own marshaller [\#725](https://github.com/grpc-ecosystem/grpc-gateway/issues/725) +- why gateway proxy can not distribute the http request to local server? prompt 404 [\#722](https://github.com/grpc-ecosystem/grpc-gateway/issues/722) +- enc.SetIndent undefined \(type \*json.Encoder has no field or method SetIndent\) [\#717](https://github.com/grpc-ecosystem/grpc-gateway/issues/717) +- Travis CI fails on master branch [\#714](https://github.com/grpc-ecosystem/grpc-gateway/issues/714) +- google/protobuf/descriptor.proto: File not found. ? [\#713](https://github.com/grpc-ecosystem/grpc-gateway/issues/713) +- APIs with grpc-gateway \(S3,WebDav\) [\#709](https://github.com/grpc-ecosystem/grpc-gateway/issues/709) +- FR: Promote a field in the returned JSON message to a top-level returned value [\#707](https://github.com/grpc-ecosystem/grpc-gateway/issues/707) +- Does grpc-gateway support the HTTP 2.0 protocol? [\#703](https://github.com/grpc-ecosystem/grpc-gateway/issues/703) +- The swagger plugin couldn’t distinguish two rpcs if we use the resource name design style. [\#702](https://github.com/grpc-ecosystem/grpc-gateway/issues/702) +- Handling of optional parameters [\#697](https://github.com/grpc-ecosystem/grpc-gateway/issues/697) +- Vendor dependencies [\#689](https://github.com/grpc-ecosystem/grpc-gateway/issues/689) +- Output swagger seems incorrect [\#688](https://github.com/grpc-ecosystem/grpc-gateway/issues/688) +- how to use this in java? [\#685](https://github.com/grpc-ecosystem/grpc-gateway/issues/685) +- r [\#684](https://github.com/grpc-ecosystem/grpc-gateway/issues/684) +- url query parameters should support semicolon in value field [\#680](https://github.com/grpc-ecosystem/grpc-gateway/issues/680) +- how to install swagger-codegen@2.2.2? [\#670](https://github.com/grpc-ecosystem/grpc-gateway/issues/670) +- Merging swagger specs fails to use rpc comments [\#664](https://github.com/grpc-ecosystem/grpc-gateway/issues/664) +- Impossible to use gogo/protobuf registered types in gRPC Status errors [\#576](https://github.com/grpc-ecosystem/grpc-gateway/issues/576) +- Path parameters can't have URL encoded values [\#566](https://github.com/grpc-ecosystem/grpc-gateway/issues/566) +- docs: show example of tracing over http-\>grpc boundary [\#348](https://github.com/grpc-ecosystem/grpc-gateway/issues/348) +- Response codes and descriptions in Swagger docs [\#304](https://github.com/grpc-ecosystem/grpc-gateway/issues/304) + +**Merged pull requests:** + +- Add missing modules to browser example [\#743](https://github.com/grpc-ecosystem/grpc-gateway/pull/743) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Added support for path param repeated fields [\#742](https://github.com/grpc-ecosystem/grpc-gateway/pull/742) ([maros7](https://github.com/maros7)) +- Add support for enum path parameters [\#738](https://github.com/grpc-ecosystem/grpc-gateway/pull/738) ([maros7](https://github.com/maros7)) +- Add support to forward grpc binary metadata [\#737](https://github.com/grpc-ecosystem/grpc-gateway/pull/737) ([timonwong](https://github.com/timonwong)) +- Lock versions to tags where possible [\#724](https://github.com/grpc-ecosystem/grpc-gateway/pull/724) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- install-protoc was checking version from wrong executable path [\#721](https://github.com/grpc-ecosystem/grpc-gateway/pull/721) ([temoto](https://github.com/temoto)) +- Fix naming convention of JSON Schema didn't matched with the spec [\#719](https://github.com/grpc-ecosystem/grpc-gateway/pull/719) ([co3k](https://github.com/co3k)) +- Add message field to the error message emitted by grpc-gateway [\#718](https://github.com/grpc-ecosystem/grpc-gateway/pull/718) ([ffredsh](https://github.com/ffredsh)) +- Fix up examples [\#715](https://github.com/grpc-ecosystem/grpc-gateway/pull/715) ([achew22](https://github.com/achew22)) +- Support HttpRule with field response [\#712](https://github.com/grpc-ecosystem/grpc-gateway/pull/712) ([doroginin](https://github.com/doroginin)) +- Make support paths option [\#711](https://github.com/grpc-ecosystem/grpc-gateway/pull/711) ([izumin5210](https://github.com/izumin5210)) +- Add test case and proposed fix for path component with trailing colon \(and string\) [\#708](https://github.com/grpc-ecosystem/grpc-gateway/pull/708) ([jfhamlin](https://github.com/jfhamlin)) +- add OpenTracing support to docs [\#705](https://github.com/grpc-ecosystem/grpc-gateway/pull/705) ([theRealWardo](https://github.com/theRealWardo)) +- add support for resource name in swagger plugin \(\#702\) [\#704](https://github.com/grpc-ecosystem/grpc-gateway/pull/704) ([ch3rub1m](https://github.com/ch3rub1m)) +- Add explicit dependency versions [\#696](https://github.com/grpc-ecosystem/grpc-gateway/pull/696) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- protoc-gen-swagger: support all well-known wrapper types [\#695](https://github.com/grpc-ecosystem/grpc-gateway/pull/695) ([jriecken](https://github.com/jriecken)) +- runtime: add support for time types in query parameters [\#693](https://github.com/grpc-ecosystem/grpc-gateway/pull/693) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Populate swagger method parameter description from message comments [\#692](https://github.com/grpc-ecosystem/grpc-gateway/pull/692) ([co3k](https://github.com/co3k)) +- Updated doc and comments to reflect Permanent HTTP header keys prefixing [\#691](https://github.com/grpc-ecosystem/grpc-gateway/pull/691) ([crozzy](https://github.com/crozzy)) +- protoc-gen-swagger: support JSON Schema Validation properties and add openapiv2\_field option [\#687](https://github.com/grpc-ecosystem/grpc-gateway/pull/687) ([co3k](https://github.com/co3k)) +- Bazel expose protoc-gen-grpc-gateway [\#668](https://github.com/grpc-ecosystem/grpc-gateway/pull/668) ([afking](https://github.com/afking)) +- Fix protoc-gen-swagger to output gRPC method summary and descriptions as Swagger's them [\#667](https://github.com/grpc-ecosystem/grpc-gateway/pull/667) ([co3k](https://github.com/co3k)) +- Allow explicit empty security definition to overwrite existing definitions [\#666](https://github.com/grpc-ecosystem/grpc-gateway/pull/666) ([co3k](https://github.com/co3k)) +- protoc-gen-swagger: Add ability to specify custom response objects [\#663](https://github.com/grpc-ecosystem/grpc-gateway/pull/663) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.4.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.1) (2018-05-23) [Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.0...v1.4.1) @@ -9,6 +76,7 @@ **Merged pull requests:** +- Generate release notes for v1.4.1 [\#659](https://github.com/grpc-ecosystem/grpc-gateway/pull/659) ([achew22](https://github.com/achew22)) - Translate gRPC FailedPrecondition as HTTP PreconditionFailed [\#657](https://github.com/grpc-ecosystem/grpc-gateway/pull/657) ([slomek](https://github.com/slomek)) ## [v1.4.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) @@ -33,7 +101,6 @@ - Import "google/api/annotations.proto" was not found or had errors. [\#574](https://github.com/grpc-ecosystem/grpc-gateway/issues/574) - is there has a way to let grpc-gateway server support multiple endpoints [\#573](https://github.com/grpc-ecosystem/grpc-gateway/issues/573) - would it be possible to avoid vendoring "third\_party/googleapis/" [\#572](https://github.com/grpc-ecosystem/grpc-gateway/issues/572) -- Path parameters can't have URL encoded values [\#566](https://github.com/grpc-ecosystem/grpc-gateway/issues/566) - Is there anyway to output the access log of grpc gateway [\#556](https://github.com/grpc-ecosystem/grpc-gateway/issues/556) - proto: no slice oenc for \*reflect.rtype = \[\]\*reflect.rtype [\#551](https://github.com/grpc-ecosystem/grpc-gateway/issues/551) - autoreconf not found [\#549](https://github.com/grpc-ecosystem/grpc-gateway/issues/549) @@ -58,6 +125,7 @@ - Generate a single swagger definition on demand [\#658](https://github.com/grpc-ecosystem/grpc-gateway/pull/658) ([achew22](https://github.com/achew22)) - Regenerate example files [\#656](https://github.com/grpc-ecosystem/grpc-gateway/pull/656) ([achew22](https://github.com/achew22)) - Add v1.4.0 changelog [\#655](https://github.com/grpc-ecosystem/grpc-gateway/pull/655) ([achew22](https://github.com/achew22)) +- Replace the deprecated grpclog.Printf with grpclog.Infof [\#654](https://github.com/grpc-ecosystem/grpc-gateway/pull/654) ([a-robinson](https://github.com/a-robinson)) - Add README.md for examples [\#645](https://github.com/grpc-ecosystem/grpc-gateway/pull/645) ([liukgg](https://github.com/liukgg)) - JSONPb marshaler panics if input is nil interface [\#639](https://github.com/grpc-ecosystem/grpc-gateway/pull/639) ([jhump](https://github.com/jhump)) - provide access to underlying \*json.Decoder from JSONPb.NewDecoder [\#637](https://github.com/grpc-ecosystem/grpc-gateway/pull/637) ([jhump](https://github.com/jhump)) @@ -84,7 +152,9 @@ - Support cases where the request is done with transfer-encoding chunked [\#589](https://github.com/grpc-ecosystem/grpc-gateway/pull/589) ([jacksontj](https://github.com/jacksontj)) - Support multiple metadata annotators [\#586](https://github.com/grpc-ecosystem/grpc-gateway/pull/586) ([dmacthedestroyer](https://github.com/dmacthedestroyer)) - Changed to use more appropriate http status code for ResourceExhausted [\#580](https://github.com/grpc-ecosystem/grpc-gateway/pull/580) ([eleniums](https://github.com/eleniums)) +- Stop marshalling any.Any types unnecessarily. [\#577](https://github.com/grpc-ecosystem/grpc-gateway/pull/577) ([johanbrandhorst](https://github.com/johanbrandhorst)) - fix racy access of err variable [\#575](https://github.com/grpc-ecosystem/grpc-gateway/pull/575) ([jhump](https://github.com/jhump)) +- option to tweak generated Register\* function names [\#571](https://github.com/grpc-ecosystem/grpc-gateway/pull/571) ([jhump](https://github.com/jhump)) - runtime: return 503 not 403 with ResourceExhausted. [\#569](https://github.com/grpc-ecosystem/grpc-gateway/pull/569) ([hexfusion](https://github.com/hexfusion)) - \[\]byte in query now uses base64.StdEncoding [\#565](https://github.com/grpc-ecosystem/grpc-gateway/pull/565) ([lucasvo](https://github.com/lucasvo)) - Add 3rd party rpc protos in order to have access to status and error [\#563](https://github.com/grpc-ecosystem/grpc-gateway/pull/563) ([rvegas](https://github.com/rvegas)) @@ -123,7 +193,6 @@ - Are gateway metrics available? [\#498](https://github.com/grpc-ecosystem/grpc-gateway/issues/498) - Backwards incompatible change to chunked encoding [\#495](https://github.com/grpc-ecosystem/grpc-gateway/issues/495) - Map of list [\#493](https://github.com/grpc-ecosystem/grpc-gateway/issues/493) -- Repeated nested messages doesn't work in GET requests queries. [\#492](https://github.com/grpc-ecosystem/grpc-gateway/issues/492) - How to run `makefile` for this repo? [\#491](https://github.com/grpc-ecosystem/grpc-gateway/issues/491) - all SubConns are in TransientFailure [\#490](https://github.com/grpc-ecosystem/grpc-gateway/issues/490) - Appengine Standard Environment: "not an Appengine context" [\#487](https://github.com/grpc-ecosystem/grpc-gateway/issues/487) @@ -236,7 +305,7 @@ - ci: regen with current protoc-gen-go [\#385](https://github.com/grpc-ecosystem/grpc-gateway/pull/385) ([tmc](https://github.com/tmc)) - Use status package for error and introduce WithProtoErrorHandler option [\#378](https://github.com/grpc-ecosystem/grpc-gateway/pull/378) ([kazegusuri](https://github.com/kazegusuri)) - Return response headers from grpc server [\#374](https://github.com/grpc-ecosystem/grpc-gateway/pull/374) ([tamalsaha](https://github.com/tamalsaha)) -- Skip unreferenced messages in definitions. [\#371](https://github.com/grpc-ecosystem/grpc-gateway/pull/371) ([Lantame](https://github.com/Lantame)) +- Skip unreferenced messages in definitions. [\#371](https://github.com/grpc-ecosystem/grpc-gateway/pull/371) ([lantame](https://github.com/lantame)) - Use canonical header form in default header matcher. [\#369](https://github.com/grpc-ecosystem/grpc-gateway/pull/369) ([tamalsaha](https://github.com/tamalsaha)) - support allow\_delete\_body for protoc-gen-grpc-gateway [\#318](https://github.com/grpc-ecosystem/grpc-gateway/pull/318) ([flisky](https://github.com/flisky)) - fixes package name override doesn't work [\#277](https://github.com/grpc-ecosystem/grpc-gateway/pull/277) ([favadi](https://github.com/favadi)) @@ -531,7 +600,7 @@ - fixes missing swagger operation objects [\#109](https://github.com/grpc-ecosystem/grpc-gateway/pull/109) ([t-yuki](https://github.com/t-yuki)) - Add parser and swagger support for enum, no gengateway yet [\#108](https://github.com/grpc-ecosystem/grpc-gateway/pull/108) ([t-yuki](https://github.com/t-yuki)) - README: add protoc-gen-swagger too [\#105](https://github.com/grpc-ecosystem/grpc-gateway/pull/105) ([philips](https://github.com/philips)) -- README: Suggest go get -u by default. [\#104](https://github.com/grpc-ecosystem/grpc-gateway/pull/104) ([shurcooL](https://github.com/shurcooL)) +- README: Suggest go get -u by default. [\#104](https://github.com/grpc-ecosystem/grpc-gateway/pull/104) ([dmitshur](https://github.com/dmitshur)) - Cancel context when HTTP connection is closed [\#102](https://github.com/grpc-ecosystem/grpc-gateway/pull/102) ([floridoo](https://github.com/floridoo)) - wait test server up [\#100](https://github.com/grpc-ecosystem/grpc-gateway/pull/100) ([kazegusuri](https://github.com/kazegusuri)) - Fix the swagger section of the README.md [\#98](https://github.com/grpc-ecosystem/grpc-gateway/pull/98) ([naibaf0](https://github.com/naibaf0)) @@ -574,17 +643,17 @@ - Format error message in JSON [\#29](https://github.com/grpc-ecosystem/grpc-gateway/pull/29) ([yugui](https://github.com/yugui)) - Update examples with HTTP header context annotation [\#28](https://github.com/grpc-ecosystem/grpc-gateway/pull/28) ([yugui](https://github.com/yugui)) - Report semantic errors in the source to protoc [\#27](https://github.com/grpc-ecosystem/grpc-gateway/pull/27) ([yugui](https://github.com/yugui)) -- Add support for non-nullable nested messages. [\#21](https://github.com/grpc-ecosystem/grpc-gateway/pull/21) ([shurcooL](https://github.com/shurcooL)) +- Add support for non-nullable nested messages. [\#21](https://github.com/grpc-ecosystem/grpc-gateway/pull/21) ([dmitshur](https://github.com/dmitshur)) - Receive GRPC metadata from HTTP headers. [\#18](https://github.com/grpc-ecosystem/grpc-gateway/pull/18) ([crast](https://github.com/crast)) - Implement detailed specs of google.api.http [\#14](https://github.com/grpc-ecosystem/grpc-gateway/pull/14) ([yugui](https://github.com/yugui)) - Configure travis CI [\#13](https://github.com/grpc-ecosystem/grpc-gateway/pull/13) ([yugui](https://github.com/yugui)) - Replace our own custom option with the one defined by Google [\#12](https://github.com/grpc-ecosystem/grpc-gateway/pull/12) ([yugui](https://github.com/yugui)) - Remove useless context setup [\#11](https://github.com/grpc-ecosystem/grpc-gateway/pull/11) ([iamqizhao](https://github.com/iamqizhao)) -- Fix typo, path, missing semicolon. [\#10](https://github.com/grpc-ecosystem/grpc-gateway/pull/10) ([shurcooL](https://github.com/shurcooL)) +- Fix typo, path, missing semicolon. [\#10](https://github.com/grpc-ecosystem/grpc-gateway/pull/10) ([dmitshur](https://github.com/dmitshur)) - Use a globally unique id for the custom option [\#3](https://github.com/grpc-ecosystem/grpc-gateway/pull/3) ([yugui](https://github.com/yugui)) - implement ABitOfEverythingService [\#2](https://github.com/grpc-ecosystem/grpc-gateway/pull/2) ([mattn](https://github.com/mattn)) - support streaming API calls [\#1](https://github.com/grpc-ecosystem/grpc-gateway/pull/1) ([yugui](https://github.com/yugui)) -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/Makefile b/Makefile index 4dea64d059c..1fcdb12698f 100644 --- a/Makefile +++ b/Makefile @@ -192,14 +192,14 @@ changelog: --tty \ -e "CHANGELOG_GITHUB_TOKEN=${CHANGELOG_GITHUB_TOKEN}" \ -v "$(PWD):/usr/local/src/your-app" \ - ferrarimarco/github-changelog-generator \ + ferrarimarco/github-changelog-generator:1.14.3 \ -u grpc-ecosystem \ -p grpc-gateway \ --author \ --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.4.1 + --future-release=v1.5.0 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 565b48109c5aa4c467de8873ca28afc91ab56d73 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 9 Sep 2018 14:01:49 +0100 Subject: [PATCH 0037/1518] Add more guidance to issue template --- ISSUE_TEMPLATE.md | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 9edbaa64c96..e732a82f019 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,41 +1,66 @@ +# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps before submitting an issue. -# Please follow the general troubleshooting steps first: - -- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases) -- [ ] Update your copy of `grpc-gateway` to the latest version from github. with - `git fetch https://github.com/grpc-ecosystem/grpc-gateway master && git reset --hard FETCH_HEAD` +- [ ] Check if your issue has already been reported (https://github.com/grpc-ecosystem/grpc-gateway/issues). +- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases). +- [ ] Update your copy of the `grpc-gateway` library to the latest version from github: + ```sh + go get -u github.com/grpc-ecosystem/grpc-gateway + ``` - [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-swagger` binary from your `PATH`, - and install locally built binaries. + and reinstall the latest versions: + ```sh + go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway + go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger + ``` + +## I still have a problem! + +Please consider reaching out for help on a chat forum, such as +[Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway). +It's much easier to help with common debugging steps in a chat, and some of +the maintainers are reading the channel regularly. If you +submit an issue which is clearly an environment setup problem, or it's obvious +you haven't tried seeking help somewhere else first, we may close your issue. + +## I still have a problem! + +Please follow these steps to submit a bug report: ### Bug reports: Fill in the following sections with explanations of what's gone wrong. -Steps you follow to reproduce the error: +### Steps you follow to reproduce the error: +```html +``` Your steps here. -What did you expect to happen instead: +### What did you expect to happen instead: +```html +``` Your answer here. -What's your theory on why it isn't working: +### What's your theory on why it isn't working: +```html +``` Your theory here. From 7916b03771e9edb045fcfc7db5f516f8b6a29c39 Mon Sep 17 00:00:00 2001 From: Sri Krishna Paritala Date: Mon, 10 Sep 2018 17:13:36 +0530 Subject: [PATCH 0038/1518] Added camelCase Example --- docs/_docs/customizingyourgateway.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 20c747f2771..a8071cb1741 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -7,6 +7,7 @@ order: 101 # Customizing your gateway ## Message serialization +### Custom serializer You might want to serialize request/response messages in MessagePack instead of JSON, for example. @@ -20,6 +21,13 @@ You might want to serialize request/response messages in MessagePack instead of You can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/marshal_jsonpb.go) for reference. +### Using camelCase for JSON + +The protocol buffer compiler generates camelCase JSON tags that can be used with jsonpb package. By default jsonpb Marshaller uses `OrigName: true` which uses the exact case used in the proto files. To use camelCase for the JSON representation, + ```go + mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName:false})) + ``` + ## Mapping from HTTP request headers to gRPC client metadata You might not like [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. From 8077515eaf98524f4fcfbcc83f50b37730e08838 Mon Sep 17 00:00:00 2001 From: Hong Zhang Date: Sun, 23 Sep 2018 16:51:26 -0700 Subject: [PATCH 0039/1518] Update README.md Point users to the proto definition instead of Service Management API documentation. Latter is generated from former, and is more likely to be out of date. Rephrase "custom options" to "google.api.http" annotation to be more straight forward. --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ccb7d7409c4..445368e7118 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). It reads [gRPC](http://github.com/grpc/grpc-common) service definition, and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. -This server is generated according to [custom options](https://cloud.google.com/service-management/reference/rpc/google.api#http) in your gRPC definition. +This server is generated according to the +[`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) +annotation in your gRPC service definition. It helps you to provide your APIs in both gRPC and RESTful style at the same time. @@ -20,7 +22,7 @@ However, you might still want to provide a traditional RESTful API as well. Reas This project aims to provide that HTTP+JSON interface to your gRPC service. A small amount of configuration in your service to attach HTTP semantics is all that's needed to generate a reverse-proxy with this library. ## Installation -First you need to install ProtocolBuffers 3.0.0-beta-3 or later. +First you need to install ProtocolBuffers 3.0.0 or later. ```sh mkdir tmp @@ -59,7 +61,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. rpc Echo(StringMessage) returns (StringMessage) {} } ``` -2. Add a [custom option](https://cloud.google.com/service-management/reference/rpc/google.api#http) to the .proto file +2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) to your .proto file your_service.proto: ```diff @@ -83,7 +85,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` - If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) for more information. + If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) for more information. 3. Generate gRPC stub From 60a328a0d18a4026eeafd96e9662044e9c90f9d6 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 1 Oct 2018 20:40:19 +0100 Subject: [PATCH 0040/1518] Revert #708 since it breaks backwards compatibility The solution for #224 turned out to break backwards compatibility, so we're going to have to find another solution for users who desire this behaviour. Also adds test cases from #760. --- runtime/mux.go | 2 +- runtime/mux_test.go | 16 +++------------- runtime/pattern.go | 11 +---------- 3 files changed, 5 insertions(+), 24 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 8f7dd36b700..463084a7022 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -1,10 +1,10 @@ package runtime import ( + "context" "fmt" "net/http" "strings" - "context" "github.com/golang/protobuf/proto" "google.golang.org/grpc/codes" diff --git a/runtime/mux_test.go b/runtime/mux_test.go index a0f15f7ae4e..894148d5692 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -183,30 +183,20 @@ func TestMuxServeHTTP(t *testing.T) { ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, pool: []string{"foo", "id"}, }, - }, - reqMethod: "GET", - reqPath: "/foo/bar", - headers: map[string]string{ - "Content-Type": "application/json", - }, - respStatus: http.StatusOK, - respContent: "GET /foo/{id=*}", - }, - { - patterns: []stubPattern{ { method: "GET", ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, pool: []string{"foo", "id"}, + verb: "verb", }, }, reqMethod: "GET", - reqPath: "/foo/bar:123", + reqPath: "/foo/bar:verb", headers: map[string]string{ "Content-Type": "application/json", }, respStatus: http.StatusOK, - respContent: "GET /foo/{id=*}", + respContent: "GET /foo/{id=*}:verb", }, } { mux := runtime.NewServeMux() diff --git a/runtime/pattern.go b/runtime/pattern.go index 223a12ecc43..f16a84ad389 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -144,16 +144,7 @@ func MustPattern(p Pattern, err error) Pattern { // If otherwise, the function returns an error. func (p Pattern) Match(components []string, verb string) (map[string]string, error) { if p.verb != verb { - if p.verb != "" { - return nil, ErrNotMatch - } - if len(components) == 0 { - components = []string{":" + verb} - } else { - components = append([]string{}, components...) - components[len(components)-1] += ":" + verb - } - verb = "" + return nil, ErrNotMatch } var pos int From aeab1d96e0f1368d243e2e5f526aa29d495517bb Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 1 Oct 2018 22:09:24 +0100 Subject: [PATCH 0041/1518] Generate changelog for release v1.5.1 --- CHANGELOG.md | 31 ++++++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 997afe3f6d1..3d7184d2058 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,39 @@ # Change Log +## [v1.5.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-01) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.0...v1.5.1) + +**Implemented enhancements:** + +- protobuf well known types aren't represented in swagger output correctly [\#160](https://github.com/grpc-ecosystem/grpc-gateway/issues/160) + +**Fixed bugs:** + +- URLs using verb no longer work after upgrading to v1.5.0 [\#760](https://github.com/grpc-ecosystem/grpc-gateway/issues/760) +- protoc-gen-swagger doesn't generate any request objects for GET/DELETE [\#747](https://github.com/grpc-ecosystem/grpc-gateway/issues/747) + +**Closed issues:** + +- how to get proper fields name for method [\#745](https://github.com/grpc-ecosystem/grpc-gateway/issues/745) +- Make a new release [\#733](https://github.com/grpc-ecosystem/grpc-gateway/issues/733) +- how to provide interface type inside proto for grpc-gateway [\#723](https://github.com/grpc-ecosystem/grpc-gateway/issues/723) +- Is there any way we can remove fields from the response json in grpc-gateway? [\#710](https://github.com/grpc-ecosystem/grpc-gateway/issues/710) +- How to write tests for the gateway? [\#699](https://github.com/grpc-ecosystem/grpc-gateway/issues/699) +- protoc-gen-swagger: No comments for path parameters [\#694](https://github.com/grpc-ecosystem/grpc-gateway/issues/694) +- Can you differentiate between an empty map vs field not provided? [\#552](https://github.com/grpc-ecosystem/grpc-gateway/issues/552) + +**Merged pull requests:** + +- Revert \#708 since it breaks backwards compatibility [\#761](https://github.com/grpc-ecosystem/grpc-gateway/pull/761) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update README.md [\#757](https://github.com/grpc-ecosystem/grpc-gateway/pull/757) ([wora](https://github.com/wora)) +- Added camelCase Example [\#751](https://github.com/grpc-ecosystem/grpc-gateway/pull/751) ([srikrsna](https://github.com/srikrsna)) +- Add more guidance to issue template [\#750](https://github.com/grpc-ecosystem/grpc-gateway/pull/750) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.5.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.0) (2018-09-09) [Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.1...v1.5.0) **Fixed bugs:** -- 404s using colons in the middle of the last path segment [\#224](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) - forwarding binary metadata is broken [\#218](https://github.com/grpc-ecosystem/grpc-gateway/issues/218) **Closed issues:** @@ -42,6 +70,7 @@ **Merged pull requests:** +- Generate release notes for v1.5.0 [\#749](https://github.com/grpc-ecosystem/grpc-gateway/pull/749) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add missing modules to browser example [\#743](https://github.com/grpc-ecosystem/grpc-gateway/pull/743) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Added support for path param repeated fields [\#742](https://github.com/grpc-ecosystem/grpc-gateway/pull/742) ([maros7](https://github.com/maros7)) - Add support for enum path parameters [\#738](https://github.com/grpc-ecosystem/grpc-gateway/pull/738) ([maros7](https://github.com/maros7)) diff --git a/Makefile b/Makefile index 1fcdb12698f..0d18c0131ca 100644 --- a/Makefile +++ b/Makefile @@ -199,7 +199,7 @@ changelog: --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.5.0 + --future-release=v1.5.1 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 8aa3d3f00fbaea619d864e688cd045497aa30fe8 Mon Sep 17 00:00:00 2001 From: John Children Date: Tue, 2 Oct 2018 17:33:35 +0100 Subject: [PATCH 0042/1518] Add default value for swagger 200 response This commit adds a default value to the description field of 200 responses. This is needed to meet the swagger specification requirement of a short description for all response objects. --- protoc-gen-swagger/genswagger/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e5d37492186..939c7b3730b 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -694,7 +694,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } methProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.ServiceDescriptorProto)(nil)), "Method") - desc := "" + desc := "A successful response." var responseSchema swaggerSchemaObject if b.ResponseBody == nil || len(b.ResponseBody.FieldPath) == 0 { From 8996a59490a320e088c8a043a72a560b38e393cb Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 9 Oct 2018 22:37:10 +0100 Subject: [PATCH 0043/1518] Regenerate files with new CI setup --- .../proto/examplepb/a_bit_of_everything.pb.go | 196 +++++++++--------- .../a_bit_of_everything.swagger.json | 32 +-- examples/proto/examplepb/echo_service.pb.go | 104 +++++----- .../proto/examplepb/echo_service.swagger.json | 14 +- .../proto/examplepb/flow_combination.pb.go | 44 ++-- .../examplepb/response_body_service.pb.go | 16 +- examples/proto/examplepb/stream.pb.go | 14 +- .../examplepb/unannotated_echo_service.pb.go | 20 +- .../unannotated_echo_service.swagger.json | 8 +- examples/proto/examplepb/wrappers.pb.go | 28 +-- .../proto/examplepb/wrappers.swagger.json | 2 +- examples/proto/sub2/message.pb.go | 2 +- protoc-gen-swagger/options/openapiv2.pb.go | 146 ++++++------- runtime/internal/stream_chunk.pb.go | 10 +- 14 files changed, 312 insertions(+), 324 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index e53bcbd4fda..2609fd85f71 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -86,39 +86,39 @@ func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { // Intentionaly complicated message type to cover many features of Protobuf. // NEXT ID: 30 type ABitOfEverything struct { - SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` - Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` - BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested" json:"single_nested,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` + Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` + Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` + Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value" json:"fixed64_value,omitempty"` + Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value" json:"fixed32_value,omitempty"` + BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` - PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` - NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` - Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` - Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` - Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` - Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` - RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` + PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` + NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` + Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value" json:"sfixed32_value,omitempty"` + Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value" json:"sfixed64_value,omitempty"` + Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value" json:"sint32_value,omitempty"` + Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value" json:"sint64_value,omitempty"` + RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue" json:"repeated_string_value,omitempty"` // Types that are valid to be assigned to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` - MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum"` - MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=grpc.gateway.examples.examplepb.NumericEnum"` + MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue" json:"nonConventionalNameValue,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -148,6 +148,27 @@ func (m *ABitOfEverything) XXX_DiscardUnknown() { var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() +} + +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,oneof"` +} +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,oneof"` +} + +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} + +func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { + if m != nil { + return m.OneofValue + } + return nil +} + func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { if m != nil { return m.SingleNested @@ -302,29 +323,6 @@ func (m *ABitOfEverything) GetRepeatedStringValue() []string { return nil } -type isABitOfEverything_OneofValue interface { - isABitOfEverything_OneofValue() -} - -type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` -} - -type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` -} - -func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} - -func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} - -func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { - if m != nil { - return m.OneofValue - } - return nil -} - func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty @@ -454,9 +452,9 @@ func _ABitOfEverything_OneofSizer(msg proto.Message) (n int) { // Nested is nested type. type ABitOfEverything_Nested struct { // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"` + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -510,22 +508,22 @@ func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { // ABitOfEverythingRepeated is used to validate repeated path parameter functionality type ABitOfEverythingRepeated struct { // repeated values. they are comma-separated in path - PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue,proto3" json:"path_repeated_float_value,omitempty"` - PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue,proto3" json:"path_repeated_double_value,omitempty"` - PathRepeatedInt64Value []int64 `protobuf:"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value,proto3" json:"path_repeated_int64_value,omitempty"` - PathRepeatedUint64Value []uint64 `protobuf:"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value,proto3" json:"path_repeated_uint64_value,omitempty"` - PathRepeatedInt32Value []int32 `protobuf:"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value,proto3" json:"path_repeated_int32_value,omitempty"` - PathRepeatedFixed64Value []uint64 `protobuf:"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value,proto3" json:"path_repeated_fixed64_value,omitempty"` - PathRepeatedFixed32Value []uint32 `protobuf:"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value,proto3" json:"path_repeated_fixed32_value,omitempty"` - PathRepeatedBoolValue []bool `protobuf:"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue,proto3" json:"path_repeated_bool_value,omitempty"` - PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3" json:"path_repeated_string_value,omitempty"` + PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue" json:"path_repeated_float_value,omitempty"` + PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue" json:"path_repeated_double_value,omitempty"` + PathRepeatedInt64Value []int64 `protobuf:"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value" json:"path_repeated_int64_value,omitempty"` + PathRepeatedUint64Value []uint64 `protobuf:"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value" json:"path_repeated_uint64_value,omitempty"` + PathRepeatedInt32Value []int32 `protobuf:"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value" json:"path_repeated_int32_value,omitempty"` + PathRepeatedFixed64Value []uint64 `protobuf:"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value" json:"path_repeated_fixed64_value,omitempty"` + PathRepeatedFixed32Value []uint32 `protobuf:"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value" json:"path_repeated_fixed32_value,omitempty"` + PathRepeatedBoolValue []bool `protobuf:"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue" json:"path_repeated_bool_value,omitempty"` + PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue" json:"path_repeated_string_value,omitempty"` PathRepeatedBytesValue [][]byte `protobuf:"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3" json:"path_repeated_bytes_value,omitempty"` - PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3" json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` - PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3" json:"path_repeated_sfixed32_value,omitempty"` - PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` - PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` - PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value,proto3" json:"path_repeated_sint64_value,omitempty"` + PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value" json:"path_repeated_uint32_value,omitempty"` + PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` + PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value" json:"path_repeated_sfixed32_value,omitempty"` + PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value" json:"path_repeated_sfixed64_value,omitempty"` + PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value" json:"path_repeated_sint32_value,omitempty"` + PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value" json:"path_repeated_sint64_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -668,7 +666,7 @@ func (m *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 { } type Body struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -706,8 +704,8 @@ func (m *Body) GetName() string { } type MessageWithBody struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Data *Body `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + Data *Body `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -772,9 +770,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for ABitOfEverythingService service + type ABitOfEverythingServiceClient interface { // Create a new ABitOfEverything // @@ -812,7 +809,7 @@ func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServi func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -821,7 +818,7 @@ func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -830,7 +827,7 @@ func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABit func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -839,7 +836,7 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -848,7 +845,7 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -857,7 +854,7 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -866,7 +863,7 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) { out := new(ABitOfEverythingRepeated) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -875,7 +872,7 @@ func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -884,7 +881,7 @@ func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.String func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -893,7 +890,7 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -902,7 +899,7 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -911,7 +908,7 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -920,7 +917,7 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -929,14 +926,15 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. +// Server API for ABitOfEverythingService service + type ABitOfEverythingServiceServer interface { // Create a new ABitOfEverything // @@ -1285,9 +1283,8 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// CamelCaseServiceNameClient is the client API for CamelCaseServiceName service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for CamelCaseServiceName service + type CamelCaseServiceNameClient interface { Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1302,14 +1299,15 @@ func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClie func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// CamelCaseServiceNameServer is the server API for CamelCaseServiceName service. +// Server API for CamelCaseServiceName service + type CamelCaseServiceNameServer interface { Empty(context.Context, *empty.Empty) (*empty.Empty, error) } @@ -1349,9 +1347,8 @@ var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// AnotherServiceWithNoBindingsClient is the client API for AnotherServiceWithNoBindings service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for AnotherServiceWithNoBindings service + type AnotherServiceWithNoBindingsClient interface { NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1366,14 +1363,15 @@ func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWi func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// AnotherServiceWithNoBindingsServer is the server API for AnotherServiceWithNoBindings service. +// Server API for AnotherServiceWithNoBindings service + type AnotherServiceWithNoBindingsServer interface { NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) } diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 461028cb570..1495eb269f1 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -28,7 +28,7 @@ "operationId": "CreateBody", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } @@ -72,7 +72,7 @@ "operationId": "Echo", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" } @@ -122,7 +122,7 @@ "operationId": "GetQuery", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -376,7 +376,7 @@ "operationId": "Create", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } @@ -543,7 +543,7 @@ "operationId": "DeepPathEcho", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } @@ -592,7 +592,7 @@ "operationId": "Lookup", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbABitOfEverything" } @@ -630,7 +630,7 @@ "operationId": "Delete", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -677,7 +677,7 @@ "operationId": "Update", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -725,7 +725,7 @@ "operationId": "GetRepeatedQuery", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbABitOfEverythingRepeated" } @@ -956,7 +956,7 @@ "operationId": "Echo3", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" } @@ -1006,7 +1006,7 @@ "operationId": "Echo2", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" } @@ -1060,7 +1060,7 @@ "operationId": "Empty", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -1092,7 +1092,7 @@ "operationId": "ErrorWithDetails", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -1124,7 +1124,7 @@ "operationId": "PostWithEmptyBody", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -1172,7 +1172,7 @@ "operationId": "Timeout", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } @@ -1204,7 +1204,7 @@ "operationId": "GetMessageWithBody", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/protobufEmpty" } diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index da8af13fbf9..905eaa93a44 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -71,16 +71,14 @@ type isEmbedded_Mark interface { } type Embedded_Progress struct { - Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` + Progress int64 `protobuf:"varint,1,opt,name=progress,oneof"` } - type Embedded_Note struct { - Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` + Note string `protobuf:"bytes,2,opt,name=note,oneof"` } func (*Embedded_Progress) isEmbedded_Mark() {} - -func (*Embedded_Note) isEmbedded_Mark() {} +func (*Embedded_Note) isEmbedded_Mark() {} func (m *Embedded) GetMark() isEmbedded_Mark { if m != nil { @@ -171,13 +169,13 @@ func _Embedded_OneofSizer(msg proto.Message) (n int) { // SimpleMessage represents a simple message sent to the Echo service. type SimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` // Types that are valid to be assigned to Code: // *SimpleMessage_LineNum // *SimpleMessage_Lang Code isSimpleMessage_Code `protobuf_oneof:"code"` - Status *Embedded `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + Status *Embedded `protobuf:"bytes,5,opt,name=status" json:"status,omitempty"` // Types that are valid to be assigned to Ext: // *SimpleMessage_En // *SimpleMessage_No @@ -211,35 +209,30 @@ func (m *SimpleMessage) XXX_DiscardUnknown() { var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo -func (m *SimpleMessage) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *SimpleMessage) GetNum() int64 { - if m != nil { - return m.Num - } - return 0 -} - type isSimpleMessage_Code interface { isSimpleMessage_Code() } +type isSimpleMessage_Ext interface { + isSimpleMessage_Ext() +} type SimpleMessage_LineNum struct { - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,oneof"` } - type SimpleMessage_Lang struct { - Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` + Lang string `protobuf:"bytes,4,opt,name=lang,oneof"` +} +type SimpleMessage_En struct { + En int64 `protobuf:"varint,6,opt,name=en,oneof"` +} +type SimpleMessage_No struct { + No *Embedded `protobuf:"bytes,7,opt,name=no,oneof"` } func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} - -func (*SimpleMessage_Lang) isSimpleMessage_Code() {} +func (*SimpleMessage_Lang) isSimpleMessage_Code() {} +func (*SimpleMessage_En) isSimpleMessage_Ext() {} +func (*SimpleMessage_No) isSimpleMessage_Ext() {} func (m *SimpleMessage) GetCode() isSimpleMessage_Code { if m != nil { @@ -247,6 +240,26 @@ func (m *SimpleMessage) GetCode() isSimpleMessage_Code { } return nil } +func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { + if m != nil { + return m.Ext + } + return nil +} + +func (m *SimpleMessage) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *SimpleMessage) GetNum() int64 { + if m != nil { + return m.Num + } + return 0 +} func (m *SimpleMessage) GetLineNum() int64 { if x, ok := m.GetCode().(*SimpleMessage_LineNum); ok { @@ -269,29 +282,6 @@ func (m *SimpleMessage) GetStatus() *Embedded { return nil } -type isSimpleMessage_Ext interface { - isSimpleMessage_Ext() -} - -type SimpleMessage_En struct { - En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` -} - -type SimpleMessage_No struct { - No *Embedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` -} - -func (*SimpleMessage_En) isSimpleMessage_Ext() {} - -func (*SimpleMessage_No) isSimpleMessage_Ext() {} - -func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { - if m != nil { - return m.Ext - } - return nil -} - func (m *SimpleMessage) GetEn() int64 { if x, ok := m.GetExt().(*SimpleMessage_En); ok { return x.En @@ -429,9 +419,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// EchoServiceClient is the client API for EchoService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for EchoService service + type EchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -454,7 +443,7 @@ func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -463,7 +452,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts .. func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -472,14 +461,15 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// EchoServiceServer is the server API for EchoService service. +// Server API for EchoService service + type EchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index ddcf349261d..f1687bccf64 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -23,7 +23,7 @@ "operationId": "Echo", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -50,7 +50,7 @@ "operationId": "Echo2", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -130,7 +130,7 @@ "operationId": "Echo3", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -210,7 +210,7 @@ "operationId": "Echo4", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -284,7 +284,7 @@ "operationId": "Echo5", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -357,7 +357,7 @@ "operationId": "EchoBody", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } @@ -384,7 +384,7 @@ "operationId": "EchoDelete", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index 25e2b775e50..20b2402f9d0 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -55,9 +55,9 @@ func (m *EmptyProto) XXX_DiscardUnknown() { var xxx_messageInfo_EmptyProto proto.InternalMessageInfo type NonEmptyProto struct { - A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` + A string `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -109,7 +109,7 @@ func (m *NonEmptyProto) GetC() string { } type UnaryProto struct { - Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` + Str string `protobuf:"bytes,1,opt,name=str" json:"str,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -147,9 +147,9 @@ func (m *UnaryProto) GetStr() string { } type NestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -201,7 +201,7 @@ func (m *NestedProto) GetC() string { } type SingleNestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -254,9 +254,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// FlowCombinationClient is the client API for FlowCombination service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for FlowCombination service + type FlowCombinationClient interface { RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) @@ -280,7 +279,7 @@ func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -288,7 +287,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -320,7 +319,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -354,7 +353,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -386,7 +385,7 @@ func (x *flowCombinationStreamEmptyStreamClient) Recv() (*EmptyProto, error) { func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -395,7 +394,7 @@ func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProt func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -404,7 +403,7 @@ func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in * func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -412,7 +411,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[3], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -444,7 +443,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[4], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -476,7 +475,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[5], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -507,7 +506,8 @@ func (x *flowCombinationRpcPathNestedStreamClient) Recv() (*EmptyProto, error) { return m, nil } -// FlowCombinationServer is the server API for FlowCombination service. +// Server API for FlowCombination service + type FlowCombinationServer interface { RpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error) RpcEmptyStream(*EmptyProto, FlowCombination_RpcEmptyStreamServer) error diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index fcad76e5898..8c7123740d4 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -25,7 +25,7 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type ResponseBodyIn struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -63,7 +63,7 @@ func (m *ResponseBodyIn) GetData() string { } type ResponseBodyOut struct { - Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response" json:"response,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -101,7 +101,7 @@ func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { } type ResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -152,9 +152,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// ResponseBodyServiceClient is the client API for ResponseBodyService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for ResponseBodyService service + type ResponseBodyServiceClient interface { GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) } @@ -169,14 +168,15 @@ func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) { out := new(ResponseBodyOut) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// ResponseBodyServiceServer is the server API for ResponseBodyService service. +// Server API for ResponseBodyService service + type ResponseBodyServiceServer interface { GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) } diff --git a/examples/proto/examplepb/stream.pb.go b/examples/proto/examplepb/stream.pb.go index cc0c274c8ea..c598d8a548b 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/proto/examplepb/stream.pb.go @@ -34,9 +34,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// StreamServiceClient is the client API for StreamService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for StreamService service + type StreamServiceClient interface { BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) @@ -52,7 +51,7 @@ func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) + stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -86,7 +85,7 @@ func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { } func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.StreamService/List", opts...) + stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -118,7 +117,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) + stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -148,7 +147,8 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { return m, nil } -// StreamServiceServer is the server API for StreamService service. +// Server API for StreamService service + type StreamServiceServer interface { BulkCreate(StreamService_BulkCreateServer) error List(*empty.Empty, StreamService_ListServer) error diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 28f0d7311d0..7e2dd22f1c7 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -37,9 +37,9 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` + Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -102,9 +102,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for UnannotatedEchoService service + type UnannotatedEchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -127,7 +126,7 @@ func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoService func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -136,7 +135,7 @@ func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *Unannotated func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, c.cc, opts...) if err != nil { return nil, err } @@ -145,14 +144,15 @@ func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *Unannot func (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// UnannotatedEchoServiceServer is the server API for UnannotatedEchoService service. +// Server API for UnannotatedEchoService service + type UnannotatedEchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/unannotated_echo_service.swagger.json b/examples/proto/examplepb/unannotated_echo_service.swagger.json index fcbf16573ee..48825985057 100644 --- a/examples/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/proto/examplepb/unannotated_echo_service.swagger.json @@ -23,7 +23,7 @@ "operationId": "Echo", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } @@ -50,7 +50,7 @@ "operationId": "Echo2", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } @@ -89,7 +89,7 @@ "operationId": "EchoBody", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } @@ -116,7 +116,7 @@ "operationId": "EchoDelete", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index fb44ca7aba9..23fdd65a8b3 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -26,15 +26,15 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Wrappers struct { - StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` + Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` + FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` + DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` + Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` + Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` + BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue" json:"bytes_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -139,9 +139,8 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// WrappersServiceClient is the client API for WrappersService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +// Client API for WrappersService service + type WrappersServiceClient interface { Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) } @@ -156,14 +155,15 @@ func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) { out := new(Wrappers) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, opts...) + err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, c.cc, opts...) if err != nil { return nil, err } return out, nil } -// WrappersServiceServer is the server API for WrappersService service. +// Server API for WrappersService service + type WrappersServiceServer interface { Create(context.Context, *Wrappers) (*Wrappers, error) } diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/proto/examplepb/wrappers.swagger.json index f30c5d4f0a6..8e2df83bb20 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/proto/examplepb/wrappers.swagger.json @@ -20,7 +20,7 @@ "operationId": "Create", "responses": { "200": { - "description": "", + "description": "A successful response.", "schema": { "$ref": "#/definitions/examplepbWrappers" } diff --git a/examples/proto/sub2/message.pb.go b/examples/proto/sub2/message.pb.go index 6819b67ae3c..a0a812c7d0f 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/proto/sub2/message.pb.go @@ -19,7 +19,7 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type IdMessage struct { - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 931bc38f441..a5a31210c02 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -190,17 +190,17 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // TODO(ivucica): document fields type Swagger struct { - Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Swagger string `protobuf:"bytes,1,opt,name=swagger" json:"swagger,omitempty"` + Info *Info `protobuf:"bytes,2,opt,name=info" json:"info,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host" json:"host,omitempty"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath" json:"base_path,omitempty"` + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions" json:"security_definitions,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -313,17 +313,17 @@ func (m *Swagger) GetExternalDocs() *ExternalDocumentation { // // TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Tags []string `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Schemes []string `protobuf:"bytes,10,rep,name=schemes" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -437,10 +437,10 @@ func (m *Operation) GetSecurity() []*SecurityRequirement { type Response struct { // `Description` is a short description of the response. // GFM syntax can be used for rich text representation. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. - Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Schema *Schema `protobuf:"bytes,2,opt,name=schema" json:"schema,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -490,11 +490,11 @@ func (m *Response) GetSchema() *Schema { // // TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,4,opt,name=contact" json:"contact,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version" json:"version,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -565,9 +565,9 @@ func (m *Info) GetVersion() string { // // TODO(ivucica): document fields type Contact struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email" json:"email,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -625,8 +625,8 @@ func (m *Contact) GetEmail() string { // // TODO(ivucica): document fields type ExternalDocumentation struct { - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -676,11 +676,11 @@ func (m *ExternalDocumentation) GetUrl() string { // // TODO(ivucica): document fields type Schema struct { - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema" json:"json_schema,omitempty"` + Discriminator string `protobuf:"bytes,2,opt,name=discriminator" json:"discriminator,omitempty"` + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly" json:"read_only,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + Example *any.Any `protobuf:"bytes,6,opt,name=example" json:"example,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -763,27 +763,27 @@ type JSONSchema struct { // the output. // For example: // `ref: ".google.protobuf.Timestamp"`. - Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` - MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` - Required []string `protobuf:"bytes,26,rep,name=required,proto3" json:"required,omitempty"` + Ref string `protobuf:"bytes,3,opt,name=ref" json:"ref,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title" json:"title,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default" json:"default,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf" json:"multiple_of,omitempty"` + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,13,opt,name=minimum" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum" json:"exclusive_minimum,omitempty"` + MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength" json:"max_length,omitempty"` + MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,17,opt,name=pattern" json:"pattern,omitempty"` + MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` + MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems" json:"unique_items,omitempty"` + MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties" json:"max_properties,omitempty"` + MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties" json:"min_properties,omitempty"` + Required []string `protobuf:"bytes,26,rep,name=required" json:"required,omitempty"` // Items in 'array' must be unique. - Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` - Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` + Array []string `protobuf:"bytes,34,rep,name=array" json:"array,omitempty"` + Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -961,8 +961,8 @@ func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { type Tag struct { // TODO(ivucica): Description should be extracted from comments on the proto // service object. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1016,7 +1016,7 @@ func (m *Tag) GetExternalDocs() *ExternalDocumentation { // and only serves to provide the relevant details for each scheme. type SecurityDefinitions struct { // A single security scheme definition, mapping a "name" to the scheme it defines. - Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1065,36 +1065,36 @@ func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { type SecurityScheme struct { // Required. The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". - Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` + Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` // A short description for security scheme. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` // Required. The name of the header or query parameter to be used. // // Valid for apiKey. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` // Required. The location of the API key. Valid values are "query" or "header". // // Valid for apiKey. - In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` + In SecurityScheme_In `protobuf:"varint,4,opt,name=in,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` // Required. The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". // // Valid for oauth2. - Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` + Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` // Required. The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. // // Valid for oauth2/implicit and oauth2/accessCode. - AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` + AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl" json:"authorization_url,omitempty"` // Required. The token URL to be used for this flow. This SHOULD be in the // form of a URL. // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. - TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` + TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl" json:"token_url,omitempty"` // Required. The available scopes for the OAuth2 security scheme. // // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes" json:"scopes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1196,7 +1196,7 @@ type SecurityRequirement struct { // the Security Definitions. If the security scheme is of type "oauth2", // then the value is a list of scope names required for the execution. // For other security scheme types, the array MUST be empty. - SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1237,7 +1237,7 @@ func (m *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequi // scope names required for the execution. For other security scheme types, // the array MUST be empty. type SecurityRequirement_SecurityRequirementValue struct { - Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` + Scope []string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1286,7 +1286,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) GetScope() []string { type Scopes struct { // Maps between a name of a scope to a short description of it (as the value // of the property). - Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Scope map[string]string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/runtime/internal/stream_chunk.pb.go b/runtime/internal/stream_chunk.pb.go index f4af074808b..a06c722c167 100644 --- a/runtime/internal/stream_chunk.pb.go +++ b/runtime/internal/stream_chunk.pb.go @@ -22,11 +22,11 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // StreamError is a response type which is returned when // streaming rpc returns an error. type StreamError struct { - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus" json:"http_status,omitempty"` + Details []*any.Any `protobuf:"bytes,5,rep,name=details" json:"details,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` From 0a52bbd2f9d05ebcc1f064d0245830c67e349a50 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 9 Oct 2018 22:37:26 +0100 Subject: [PATCH 0044/1518] Replace travis with Circle-CI --- .circleci/Dockerfile | 36 +++++++++++ .circleci/README.md | 22 +++++++ .circleci/config.yml | 97 ++++++++++++++++++++++++++++++ .travis.yml | 82 ------------------------- .travis/bazel-build.sh | 10 --- .travis/bazel-test.sh | 12 ---- .travis/install-bazel.sh | 20 ------ .travis/install-protoc.sh | 19 ------ .travis/install-swagger-codegen.sh | 9 --- CONTRIBUTING.md | 13 ++++ Makefile | 3 +- bin/coverage | 17 ------ 12 files changed, 169 insertions(+), 171 deletions(-) create mode 100644 .circleci/Dockerfile create mode 100644 .circleci/README.md create mode 100644 .circleci/config.yml delete mode 100644 .travis.yml delete mode 100755 .travis/bazel-build.sh delete mode 100755 .travis/bazel-test.sh delete mode 100755 .travis/install-bazel.sh delete mode 100755 .travis/install-protoc.sh delete mode 100755 .travis/install-swagger-codegen.sh delete mode 100755 bin/coverage diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile new file mode 100644 index 00000000000..9285342ec0f --- /dev/null +++ b/.circleci/Dockerfile @@ -0,0 +1,36 @@ +FROM golang:latest + +## Warm apt cache +RUN apt-get update + +# Install swagger-codegen +ENV SWAGGER_CODEGEN_VERSION=2.2.2 +RUN apt-get install -y openjdk-8-jre wget && \ + wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ + -O /usr/local/bin/swagger-codegen-cli.jar && \ + apt-get remove -y wget +ENV SWAGGER_CODEGEN="java -jar /usr/local/bin/swagger-codegen-cli.jar" + +# Install protoc +ENV PROTOC_VERSION=3.1.0 +RUN apt-get install -y wget unzip && \ + wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ + -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ + unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ + rm -f /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ + apt-get remove -y unzip wget + +# Install node +ENV NODE_VERSION=v6.1 +RUN apt-get install -y wget bzip2 && \ + wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && \ + apt-get remove -y wget + +# Install dep +RUN apt-get install -y wget && \ + wget -qO- https://raw.githubusercontent.com/golang/dep/master/install.sh | sh && \ + apt-get remove -y wget + +# Clean up +RUN apt-get autoremove -y && \ + rm -rf /var/lib/apt/lists/* diff --git a/.circleci/README.md b/.circleci/README.md new file mode 100644 index 00000000000..6fe89053bbe --- /dev/null +++ b/.circleci/README.md @@ -0,0 +1,22 @@ +## gRPC-Gateway CI testing setup + +Contained within is the CI test setup for the Gateway. It runs on Circle CI. + +### I want to regenerate the files after making changes! + +Great, it should be as simple as thus (run from the root of the directory): + +```bash +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ + /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ + make realclean && \ + make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' +``` + +If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. + +### Whats up with the Dockerfile? + +The `Dockerfile` in this folder is used as the build environment when regenerating the files (see above). +The canonical repository for this Dockerfile is `jfbrandhorst/grpc-gateway-build-env`. Please request access +before attempting to make any changes to the Dockerfile. diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000000..a2ad7f9c4b7 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,97 @@ +version: 2 +jobs: + build: + docker: + - image: "golang:latest" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + - run: dep ensure --vendor-only + - run: go build ./... + test: + docker: + - image: "golang:latest" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + environment: + GLOG_logtostderr: "1" + steps: + - checkout + - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + - run: dep ensure --vendor-only + - run: go test -race -coverprofile=coverage.txt ./... + - run: bash <(curl -s https://codecov.io/bash) + node_test: + docker: + - image: "jfbrandhorst/grpc-gateway-build-env" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: > + . $HOME/.nvm/nvm.sh && + cd examples/browser && + npm install gulp-cli && + npm install && + ./node_modules/.bin/gulp + generate: + docker: + - image: "jfbrandhorst/grpc-gateway-build-env" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: make realclean + - run: make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}" # Set in Docker image + - run: git diff --exit-code + lint: + docker: + - image: "golang:latest" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh + - run: dep ensure --vendor-only + - run: go get github.com/golang/lint/golint + - run: make lint + bazel_build: + docker: + - image: "l.gcr.io/google/bazel:latest" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: > + bazel + --batch + --output_base=$HOME/.cache/_grpc_gateway_bazel + --host_jvm_args=-Xmx500m + --host_jvm_args=-Xms500m + build + --local_resources=400,1,1.0 + //... + bazel_test: + docker: + - image: "l.gcr.io/google/bazel:latest" + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + steps: + - checkout + - run: > + bazel + --batch + --output_base=$HOME/.cache/_grpc_gateway_bazel + --host_jvm_args=-Xmx500m + --host_jvm_args=-Xms500m + test + --local_resources=400,1,1.0 + --test_output=errors + --features=race + //... +workflows: + version: 2 + all: + jobs: + - build + - test + - node_test + - generate + - lint + - bazel_build + - bazel_test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 76757804e00..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,82 +0,0 @@ -language: go -sudo: false -go: - - 1.9.x - - 1.10.x - - master -go_import_path: github.com/grpc-ecosystem/grpc-gateway -cache: - directories: - - $HOME/local - - ${TRAVIS_BUILD_DIR}/examples/browser/node_modules - - $HOME/.cache/_grpc_gateway_bazel -before_install: - - if [ "${USE_BAZEL}" = true ]; then ./.travis/install-bazel.sh $BAZEL_VERSION; fi - - test "${USE_BAZEL}" = true || ./.travis/install-protoc.sh $PROTOC_VERSION - - test "${USE_BAZEL}" = true || ./.travis/install-swagger-codegen.sh $SWAGGER_CODEGEN_VERSION - - test "${USE_BAZEL}" = true || (nvm install $NODE_VERSION && nvm use $NODE_VERSION && node --version) - - test "${USE_BAZEL}" = true || go get github.com/golang/lint/golint - - test "${USE_BAZEL}" = true || go get github.com/dghubble/sling - - test "${USE_BAZEL}" = true || go get github.com/go-resty/resty - - test "${USE_BAZEL}" = true || curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh -install: - # Make sure externally referenced packages are go-gettable. - - test "${USE_BAZEL}" = true || - go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - - test "${USE_BAZEL}" = true || - go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger - - test "${USE_BAZEL}" = true || - go get github.com/grpc-ecosystem/grpc-gateway/runtime - - test "${USE_BAZEL}" = true || - go get github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-grpc-server - - test "${USE_BAZEL}" = true || - go get github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-gateway-server - - # Just build if USE_BAZEL - - if [ "${USE_BAZEL}" = true ]; then ./.travis/bazel-build.sh; fi -before_script: - - test "${USE_BAZEL}" = true || - (cd examples/browser && npm install) -script: - # Make sure examples of generated files are up-to-date - - test "${USE_BAZEL}" = true || - (make realclean && make examples SWAGGER_CODEGEN="java -jar $HOME/local/swagger-codegen-cli.jar") - - if [ -z "${USE_BAZEL}" ] && - (go version | grep -q "${GO_VERSION_TO_DIFF_TEST}") && - [ -z "${GATEWAY_PLUGIN_FLAGS}" ]; then - test -z "$(git status --porcelain)" || (git status; git diff; exit 1); - fi - - # Unit tests, integration tests and code health checks - - test "${USE_BAZEL}" = true || - env GLOG_logtostderr=1 go test -race -v github.com/grpc-ecosystem/grpc-gateway/... - - test "${USE_BAZEL}" = true || - make lint - - test "${USE_BAZEL}" = true || - sh -c 'cd examples/browser && node ./node_modules/gulp/bin/gulp' - - - if [ "${USE_BAZEL}" = true ]; then ./.travis/bazel-test.sh; fi - - # test coverage - - if (go version | grep -q "${GO_VERSION_TO_DIFF_TEST}") && - [ -z "${GATEWAY_PLUGIN_FLAGS}" ]; then - env GLOG_logtostderr=1 ./bin/coverage; - fi -after_success: - - bash <(curl -s https://codecov.io/bash) - -env: - global: - - "PATH=$PATH:$HOME/local/bin" - - GO_VERSION_TO_DIFF_TEST="go version go1\.10\.[0-9]\+ linux/amd64" - - BAZEL_VERSION=0.12.0 - - NODE_VERSION=v6.1 - - PROTOC_VERSION=3.1.0 - - SWAGGER_CODEGEN_VERSION=2.2.2 - matrix: - - GATEWAY_PLUGIN_FLAGS= - - GATEWAY_PLUGIN_FLAGS=request_context=false -matrix: - include: - - go: master - env: USE_BAZEL=true diff --git a/.travis/bazel-build.sh b/.travis/bazel-build.sh deleted file mode 100755 index f46781d414b..00000000000 --- a/.travis/bazel-build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eu - -bazel \ - --batch \ - --output_base=$HOME/.cache/_grpc_gateway_bazel \ - --host_jvm_args=-Xmx500m \ - --host_jvm_args=-Xms500m \ - build \ - --local_resources=400,1,1.0 \ - //... diff --git a/.travis/bazel-test.sh b/.travis/bazel-test.sh deleted file mode 100755 index 86dbbf3270a..00000000000 --- a/.travis/bazel-test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -eu - -bazel \ - --batch \ - --output_base=$HOME/.cache/_grpc_gateway_bazel \ - --host_jvm_args=-Xmx500m \ - --host_jvm_args=-Xms500m \ - test \ - --local_resources=400,1,1.0 \ - --test_output=errors \ - --features=race \ - //... diff --git a/.travis/install-bazel.sh b/.travis/install-bazel.sh deleted file mode 100755 index 9bebe44cdd2..00000000000 --- a/.travis/install-bazel.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -eu - -bazel_version=$1 - -if test -z "${bazel_version}"; then - echo "Usage: .travis/install-bazel.sh bazel-version" - exit 1 -fi - -if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then - OS=darwin -else - OS=linux -fi - -filename=bazel-${bazel_version}-installer-${OS}-x86_64.sh -wget https://github.com/bazelbuild/bazel/releases/download/${bazel_version}/${filename} -chmod +x $filename -./$filename --user -rm -f $filename diff --git a/.travis/install-protoc.sh b/.travis/install-protoc.sh deleted file mode 100755 index dee80d861b1..00000000000 --- a/.travis/install-protoc.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -eu -protoc_version=$1 -if test -z "${protoc_version}"; then - echo "Usage: .travis/install-protoc.sh protoc-version" - exit 1 -fi -if [ "`$HOME/local/bin/protoc --version 2>/dev/null | cut -d' ' -f 2`" != ${protoc_version} ]; then - rm -rf $HOME/local/bin $HOME/local/include - - mkdir -p $HOME/tmp $HOME/local - cd $HOME/tmp - wget https://github.com/google/protobuf/releases/download/v${protoc_version}/protoc-${protoc_version}-linux-x86_64.zip - unzip protoc-${protoc_version}-linux-x86_64.zip - mv bin $HOME/local/bin - mv include $HOME/local/include -fi - -echo \$ $HOME/local/bin/protoc --version -$HOME/local/bin/protoc --version diff --git a/.travis/install-swagger-codegen.sh b/.travis/install-swagger-codegen.sh deleted file mode 100755 index ad4c8b56815..00000000000 --- a/.travis/install-swagger-codegen.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -eu -codegen_version=$1 -if test -z "${codegen_version}"; then - echo "Usage: .travis/install-swagger-codegen.sh codegen-version" - exit 1 -fi - -wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${codegen_version}/swagger-codegen-cli-${codegen_version}.jar \ - -O $HOME/local/swagger-codegen-cli.jar diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4f0c59eea8d..8bcfb2794ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,3 +18,16 @@ with us through the issue tracker. ### Code reviews All submissions, including submissions by project members, require review. + +### I want to regenerate the files after making changes! + +Great, it should be as simple as thus (run from the root of the directory): + +```bash +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ + /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ + make realclean && \ + make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' +``` + +If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. diff --git a/Makefile b/Makefile index 0d18c0131ca..f2de987b047 100644 --- a/Makefile +++ b/Makefile @@ -127,8 +127,7 @@ generate: $(RUNTIME_GO) $(GO_PLUGIN): dep ensure -vendor-only - go install ./vendor/$(GO_PLUGIN_PKG) - go build -o $@ $(GO_PLUGIN_PKG) + go build -o $@ ./vendor/$(GO_PLUGIN_PKG) $(RUNTIME_GO): $(RUNTIME_PROTO) $(GO_PLUGIN) protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I $(GOPATH)/src/$(GO_PTYPES_ANY_PKG) -I. --go_out=$(PKGMAP):. $(RUNTIME_PROTO) diff --git a/bin/coverage b/bin/coverage deleted file mode 100755 index 65bbe95faa5..00000000000 --- a/bin/coverage +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -euo pipefail -USE_BAZEL=${USE_BAZEL:-false} -> coverage.txt - -if [ "${USE_BAZEL}" = true ]; then - # TODO(yugui) Support bazel - exit 0 -fi - -for d in $(go list ./... | grep -v vendor); do - go test -race -coverprofile=profile.out -covermode=atomic $d - if [ -f profile.out ]; then - cat profile.out >> coverage.txt - rm profile.out - fi -done From 61203f4513ef79e42116feed6eb159d0d32704dd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 16 Oct 2018 22:15:02 +0100 Subject: [PATCH 0045/1518] Fix CircleCI configuration (#777) * Fix CircleCI configuration The original configuration had never actually been run on CircleCI's servers. * Replace mentions of Travis with CircleCI --- .circleci/config.yml | 34 +++++++------------------------- Makefile | 12 ++++-------- README.md | 46 ++++++++++++++++++++++---------------------- docs/index.md | 2 +- 4 files changed, 35 insertions(+), 59 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a2ad7f9c4b7..2707fd7786e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,22 +2,20 @@ version: 2 jobs: build: docker: - - image: "golang:latest" + - image: "jfbrandhorst/grpc-gateway-build-env" working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - run: dep ensure --vendor-only - run: go build ./... test: docker: - - image: "golang:latest" + - image: "jfbrandhorst/grpc-gateway-build-env" working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway environment: GLOG_logtostderr: "1" steps: - checkout - - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - run: dep ensure --vendor-only - run: go test -race -coverprofile=coverage.txt ./... - run: bash <(curl -s https://codecov.io/bash) @@ -27,6 +25,7 @@ jobs: working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout + - run: dep ensure --vendor-only - run: > . $HOME/.nvm/nvm.sh && cd examples/browser && @@ -44,13 +43,12 @@ jobs: - run: git diff --exit-code lint: docker: - - image: "golang:latest" + - image: "jfbrandhorst/grpc-gateway-build-env" working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - run: dep ensure --vendor-only - - run: go get github.com/golang/lint/golint + - run: go get golang.org/x/lint/golint - run: make lint bazel_build: docker: @@ -58,32 +56,14 @@ jobs: working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: > - bazel - --batch - --output_base=$HOME/.cache/_grpc_gateway_bazel - --host_jvm_args=-Xmx500m - --host_jvm_args=-Xms500m - build - --local_resources=400,1,1.0 - //... + - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m build --local_resources=400,1,1.0 //... bazel_test: docker: - image: "l.gcr.io/google/bazel:latest" working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: > - bazel - --batch - --output_base=$HOME/.cache/_grpc_gateway_bazel - --host_jvm_args=-Xmx500m - --host_jvm_args=-Xms500m - test - --local_resources=400,1,1.0 - --test_output=errors - --features=race - //... + - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m test --local_resources=400,1,1.0 --test_output=errors --features=race //... workflows: version: 2 all: diff --git a/Makefile b/Makefile index f2de987b047..5cd992cd635 100644 --- a/Makefile +++ b/Makefile @@ -160,26 +160,22 @@ $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ -l go -o examples/clients/echo --additional-properties packageName=echo @rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \ - $(EXAMPLE_CLIENT_DIR)/echo/git_push.sh \ - $(EXAMPLE_CLIENT_DIR)/echo/.travis.yml + $(EXAMPLE_CLIENT_DIR)/echo/git_push.sh $(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \ -l go -o examples/clients/abe --additional-properties packageName=abe @rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \ - $(EXAMPLE_CLIENT_DIR)/abe/git_push.sh \ - $(EXAMPLE_CLIENT_DIR)/abe/.travis.yml + $(EXAMPLE_CLIENT_DIR)/abe/git_push.sh $(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(UNANNOTATED_ECHO_EXAMPLE_SPEC) \ -l go -o examples/clients/unannotatedecho --additional-properties packageName=unannotatedecho @rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \ - $(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh \ - $(EXAMPLE_CLIENT_DIR)/unannotatedecho/.travis.yml + $(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \ -l go -o examples/clients/responsebody --additional-properties packageName=responsebody @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ - $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh \ - $(EXAMPLE_CLIENT_DIR)/responsebody/.travis.yml + $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) test: examples diff --git a/README.md b/README.md index 445368e7118..e10f1b660a1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # grpc-gateway -[![Build Status](https://travis-ci.org/grpc-ecosystem/grpc-gateway.svg?branch=master)](https://travis-ci.org/grpc-ecosystem/grpc-gateway) +[![CircleCI](https://circleci.com/gh/grpc-ecosystem/grpc-gateway.svg?style=svg)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). It reads [gRPC](http://github.com/grpc/grpc-common) service definition, @@ -43,12 +43,12 @@ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger go get -u github.com/golang/protobuf/protoc-gen-go ``` - + ## Usage Make sure that your `$GOPATH/bin` is in your `$PATH`. 1. Define your service in gRPC - + your_service.proto: ```protobuf syntax = "proto3"; @@ -56,13 +56,13 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. message StringMessage { string value = 1; } - + service YourService { rpc Echo(StringMessage) returns (StringMessage) {} } ``` 2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) to your .proto file - + your_service.proto: ```diff syntax = "proto3"; @@ -73,7 +73,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. message StringMessage { string value = 1; } - + service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} + rpc Echo(StringMessage) returns (StringMessage) { @@ -88,7 +88,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) for more information. 3. Generate gRPC stub - + ```sh protoc -I/usr/local/include -I. \ -I$GOPATH/src \ @@ -96,11 +96,11 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. --go_out=plugins=grpc:. \ path/to/your_service.proto ``` - + It will generate a stub file `path/to/your_service.pb.go`. 4. Implement your service in gRPC as usual 1. (Optional) Generate gRPC stub in the language you want. - + e.g. ```sh protoc -I/usr/local/include -I. \ @@ -108,7 +108,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --ruby_out=. \ path/to/your/service_proto - + protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ @@ -118,9 +118,9 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. ``` 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. 3. Implement your service - + 5. Generate reverse-proxy - + ```sh protoc -I/usr/local/include -I. \ -I$GOPATH/src \ @@ -128,13 +128,13 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. --grpc-gateway_out=logtostderr=true:. \ path/to/your_service.proto ``` - + It will generate a reverse proxy `path/to/your_service.pb.gw.go`. Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. 6. Write an entrypoint - + Now you need to write an entrypoint of the proxy server. ```go package main @@ -142,38 +142,38 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. import ( "flag" "net/http" - + "github.com/golang/glog" "golang.org/x/net/context" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc" - + gw "path/to/your_service_package" ) - + var ( echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService") ) - + func run() error { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() - + mux := runtime.NewServeMux() opts := []grpc.DialOption{grpc.WithInsecure()} err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts) if err != nil { return err } - + return http.ListenAndServe(":8080", mux) } - + func main() { flag.Parse() defer glog.Flush() - + if err := run(); err != nil { glog.Fatal(err) } @@ -240,7 +240,7 @@ But patch is welcome. * [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) * HTTP request source IP is added as `X-Forwarded-For` gRPC request header * HTTP request host is added as `X-Forwarded-Host` gRPC request header -* HTTP `Authorization` header is added as `authorization` gRPC request header +* HTTP `Authorization` header is added as `authorization` gRPC request header * Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header * HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`) * While configurable, the default {un,}marshaling uses [jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with `OrigName: true`. diff --git a/docs/index.md b/docs/index.md index 47b6ec026fc..bb36263e758 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ # grpc-gateway -[![Build Status](https://travis-ci.org/grpc-ecosystem/grpc-gateway.svg?branch=master)](https://travis-ci.org/grpc-ecosystem/grpc-gateway) +[![CircleCI](https://circleci.com/gh/johanbrandhorst/grpc-gateway.svg?style=svg)](https://circleci.com/gh/johanbrandhorst/grpc-gateway) grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). It reads [gRPC](http://github.com/grpc/grpc-common) service definition, From 1771d343101c454e385245932874d7b5b078819d Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 11 Oct 2018 10:55:30 +0200 Subject: [PATCH 0046/1518] tests: s/iotuil/ioutil/ typo Signed-off-by: Stephan Renatus --- examples/integration/integration_test.go | 32 ++++++++++++------------ examples/integration/proto_error_test.go | 4 +-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index ea401ac7db0..b488be6ad2f 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -80,7 +80,7 @@ func testEcho(t *testing.T, port int, contentType string) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -113,7 +113,7 @@ func testEchoOneof(t *testing.T, port int, contentType string) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -146,7 +146,7 @@ func testEchoOneof1(t *testing.T, port int, contentType string) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -179,7 +179,7 @@ func testEchoOneof2(t *testing.T, port int, contentType string) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -219,7 +219,7 @@ func testEchoBody(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -301,7 +301,7 @@ func testABECreate(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -387,7 +387,7 @@ func testABECreateBody(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -473,7 +473,7 @@ func testABEBulkCreate(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -512,7 +512,7 @@ func testABELookup(t *testing.T, port int) { defer cresp.Body.Close() buf, err := ioutil.ReadAll(cresp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(cresp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) return } if got, want := cresp.StatusCode, http.StatusOK; got != want { @@ -818,7 +818,7 @@ func testAdditionalBindings(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success; i=%d", err, i) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success; i=%d", err, i) return } if got, want := resp.StatusCode, http.StatusOK; got != want { @@ -937,7 +937,7 @@ func testABERepeated(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -987,7 +987,7 @@ func TestErrorWithDetails(t *testing.T) { buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Fatalf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Fatalf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) } if got, want := resp.StatusCode, http.StatusInternalServerError; got != want { @@ -1062,7 +1062,7 @@ func TestUnknownPath(t *testing.T) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1082,7 +1082,7 @@ func TestMethodNotAllowed(t *testing.T) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1102,7 +1102,7 @@ func TestInvalidArgument(t *testing.T) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1131,7 +1131,7 @@ func testResponseBody(t *testing.T, port int) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } diff --git a/examples/integration/proto_error_test.go b/examples/integration/proto_error_test.go index 84a631f9b1c..5aa263b3df4 100644 --- a/examples/integration/proto_error_test.go +++ b/examples/integration/proto_error_test.go @@ -133,7 +133,7 @@ func TestUnknownPathWithProtoError(t *testing.T) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -180,7 +180,7 @@ func TestMethodNotAllowedWithProtoError(t *testing.T) { defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { - t.Errorf("iotuil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } From f7cf64976c2a46ce866933fa726e89cbb6f31977 Mon Sep 17 00:00:00 2001 From: Joel Urraco Date: Wed, 17 Oct 2018 13:00:04 +0200 Subject: [PATCH 0047/1518] DefaultHeaderMatcher: use textproto.CanonicalMIMEHeaderKey ok received key --- runtime/mux.go | 2 ++ runtime/mux_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/runtime/mux.go b/runtime/mux.go index 463084a7022..3064c69ecbd 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/textproto" "strings" "github.com/golang/protobuf/proto" @@ -50,6 +51,7 @@ type HeaderMatcherFunc func(string) (string, bool) // keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with // 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'. func DefaultHeaderMatcher(key string) (string, bool) { + key = textproto.CanonicalMIMEHeaderKey(key) if isPermanentHTTPHeader(key) { return MetadataPrefix + key, true } else if strings.HasPrefix(key, MetadataHeaderPrefix) { diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 894148d5692..f3ecbf63388 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -233,3 +233,43 @@ func TestMuxServeHTTP(t *testing.T) { } } } + +var defaultHeaderMatcherTests = []struct { + name string + in string + outValue string + outValid bool +}{ + { + "permanent HTTP header should return prefixed", + "Accept", + "grpcgateway-Accept", + true, + }, + { + "key prefixed with MetadataHeaderPrefix should return without the prefix", + "Grpc-Metadata-Custom-Header", + "Custom-Header", + true, + }, + { + "non-permanent HTTP header key without prefix should not return", + "Custom-Header", + "", + false, + }, +} + +func TestDefaultHeaderMatcher(t *testing.T) { + for _, tt := range defaultHeaderMatcherTests { + t.Run(tt.name, func(t *testing.T) { + out, valid := runtime.DefaultHeaderMatcher(tt.in) + if out != tt.outValue { + t.Errorf("got %v, want %v", out, tt.outValue) + } + if valid != tt.outValid { + t.Errorf("got %v, want %v", valid, tt.outValid) + } + }) + } +} From fdcb0d026242e8895d157a6637c7366e612f2594 Mon Sep 17 00:00:00 2001 From: Ricardo Vegas Date: Tue, 30 Oct 2018 10:03:10 +0100 Subject: [PATCH 0048/1518] Add documentation to the rest of methods --- examples/gateway/handlers.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/gateway/handlers.go b/examples/gateway/handlers.go index d52580f52df..3db3fc3bf2b 100644 --- a/examples/gateway/handlers.go +++ b/examples/gateway/handlers.go @@ -11,6 +11,7 @@ import ( "google.golang.org/grpc/connectivity" ) +// swaggerServer returns swagger specification files located under "/swagger/" func swaggerServer(dir string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if !strings.HasSuffix(r.URL.Path, ".swagger.json") { @@ -41,6 +42,9 @@ func allowCORS(h http.Handler) http.Handler { }) } +// preflightHandler adds the necessary headers in order to serve +// CORS from any origin using the methods "GET", "HEAD", "POST", "PUT", "DELETE" +// We insist, don't do this without consideration in production systems. func preflightHandler(w http.ResponseWriter, r *http.Request) { headers := []string{"Content-Type", "Accept"} w.Header().Set("Access-Control-Allow-Headers", strings.Join(headers, ",")) @@ -49,6 +53,7 @@ func preflightHandler(w http.ResponseWriter, r *http.Request) { glog.Infof("preflight request for %s", r.URL.Path) } +// healthzServer returns a simple health handler which returns ok. func healthzServer(conn *grpc.ClientConn) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") From c203e727a7ca475c659524ed14b695d5ec6acd0c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 30 Oct 2018 21:27:55 +0000 Subject: [PATCH 0049/1518] ci: add job for building binaries for releases This will trigger a build of a linux, darwin and windows build of protoc-gen-grpc-gateway and protoc-gen-swagger on every new tag matching the semver regex. --- .circleci/config.yml | 119 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 112 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2707fd7786e..4cead752fa4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: build: docker: - - image: "jfbrandhorst/grpc-gateway-build-env" + - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout @@ -10,7 +10,7 @@ jobs: - run: go build ./... test: docker: - - image: "jfbrandhorst/grpc-gateway-build-env" + - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway environment: GLOG_logtostderr: "1" @@ -21,7 +21,7 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: "jfbrandhorst/grpc-gateway-build-env" + - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout @@ -34,7 +34,7 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: "jfbrandhorst/grpc-gateway-build-env" + - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout @@ -43,7 +43,7 @@ jobs: - run: git diff --exit-code lint: docker: - - image: "jfbrandhorst/grpc-gateway-build-env" + - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout @@ -52,18 +52,95 @@ jobs: - run: make lint bazel_build: docker: - - image: "l.gcr.io/google/bazel:latest" + - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m build --local_resources=400,1,1.0 //... bazel_test: docker: - - image: "l.gcr.io/google/bazel:latest" + - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m test --local_resources=400,1,1.0 --test_output=errors --features=race //... + build_linux_release: + docker: + - image: jfbrandhorst/grpc-gateway-build-env + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + environment: + CGO_ENABLED: "0" + GOOS: "linux" + GOARCH: "amd64" + steps: + - checkout + - run: mkdir -p release + - run: dep ensure --vendor-only + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-linux-x86_64 ./protoc-gen-grpc-gateway/ + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-swagger-${VERSION}-linux-x86_64 ./protoc-gen-swagger/ + - persist_to_workspace: + root: ./ + paths: + - release + build_darwin_release: + docker: + - image: jfbrandhorst/grpc-gateway-build-env + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + environment: + CGO_ENABLED: "0" + GOOS: "darwin" + GOARCH: "amd64" + steps: + - checkout + - run: mkdir -p release + - run: dep ensure --vendor-only + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-darwin-x86_64 ./protoc-gen-grpc-gateway/ + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-swagger-${VERSION}-darwin-x86_64 ./protoc-gen-swagger/ + - persist_to_workspace: + root: ./ + paths: + - release + build_windows_release: + docker: + - image: jfbrandhorst/grpc-gateway-build-env + working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + environment: + CGO_ENABLED: "0" + GOOS: "windows" + GOARCH: "amd64" + steps: + - checkout + - run: mkdir -p release + - run: dep ensure --vendor-only + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-windows-x86_64.exe ./protoc-gen-grpc-gateway/ + - run: | + VERSION=$(git describe --tags --abbrev=0) + go build -o ./release/protoc-gen-swagger-${VERSION}-windows-x86_64.exe ./protoc-gen-swagger/ + - persist_to_workspace: + root: ./ + paths: + - release + publish_github_release: + docker: + - image: cibuilds/github:0.10 + steps: + - attach_workspace: + at: ./release + - run: + name: "Publish Release on GitHub" + command: | + VERSION=$(git describe --tags --abbrev=0) + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} ${VERSION} ./release/ workflows: version: 2 all: @@ -75,3 +152,31 @@ workflows: - lint - bazel_build - bazel_test + - build_linux_release: + filters: + branches: + ignore: /.*/ + tags: + only: /^v\d+\.\d+\.\d+$/ + - build_windows_release: + filters: + branches: + ignore: /.*/ + tags: + only: /^v\d+\.\d+\.\d+$/ + - build_darwin_release: + filters: + branches: + ignore: /.*/ + tags: + only: /^v\d+\.\d+\.\d+$/ + - publish_github_release: + requires: + - build_linux_release + - build_darwin_release + - build_windows_release + filters: + branches: + ignore: /.*/ + tags: + only: /^v\d+\.\d+\.\d+$/ From dfdde994718b7aff4dae96d3aa30a6424b659ec4 Mon Sep 17 00:00:00 2001 From: Wesley Spikes Date: Sat, 3 Nov 2018 13:07:43 -0700 Subject: [PATCH 0050/1518] Remove http.CloseNotifier code from Go >= 1.7 builds http.CloseNotifier is deprecated as of Go 1.11, with a note that "the CloseNotifier interface predates Go's context package. New code should use Request.Context instead." Seeing as Request.Context has been around since 1.7, it seems likely safe to adjust our template to omit this block whenever Request.Context is in use. --- .../examplepb/a_bit_of_everything.pb.gw.go | 144 ----------- .../proto/examplepb/echo_service.pb.gw.go | 63 ----- .../proto/examplepb/flow_combination.pb.gw.go | 234 ------------------ .../examplepb/response_body_service.pb.gw.go | 9 - examples/proto/examplepb/stream.pb.gw.go | 27 -- .../unannotated_echo_service.pb.gw.go | 36 --- examples/proto/examplepb/wrappers.pb.gw.go | 9 - .../gengateway/template.go | 9 - 8 files changed, 531 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index af771b2c31f..c506569c47d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -811,15 +811,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -840,15 +831,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_CreateBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -869,15 +851,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -898,15 +871,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -927,15 +891,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("DELETE", pattern_ABitOfEverythingService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -956,15 +911,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_GetQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -985,15 +931,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_GetRepeatedQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1014,15 +951,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1043,15 +971,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1072,15 +991,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1101,15 +1011,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_DeepPathEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1130,15 +1031,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_Timeout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1159,15 +1051,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("GET", pattern_ABitOfEverythingService_ErrorWithDetails_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1188,15 +1071,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_GetMessageWithBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1217,15 +1091,6 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt mux.Handle("POST", pattern_ABitOfEverythingService_PostWithEmptyBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1351,15 +1216,6 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 4e7bbf8c6ca..ca6579265e0 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -339,15 +339,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -368,15 +359,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("GET", pattern_EchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -397,15 +379,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("GET", pattern_EchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -426,15 +399,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("GET", pattern_EchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -455,15 +419,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("GET", pattern_EchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -484,15 +439,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_EchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -513,15 +459,6 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux mux.Handle("DELETE", pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 3871cf618ca..a20cf605711 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1026,15 +1026,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1055,15 +1046,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1084,15 +1066,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1113,15 +1086,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1142,15 +1106,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1171,15 +1126,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1200,15 +1146,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1229,15 +1166,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1258,15 +1186,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1287,15 +1206,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1316,15 +1226,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1345,15 +1246,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1374,15 +1266,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1403,15 +1286,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1432,15 +1306,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1461,15 +1326,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1490,15 +1346,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1519,15 +1366,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1548,15 +1386,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1577,15 +1406,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1606,15 +1426,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1635,15 +1446,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1664,15 +1466,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1693,15 +1486,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1722,15 +1506,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -1751,15 +1526,6 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index ac15844a045..41480f44bb9 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -96,15 +96,6 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 1577db1aa86..a62da50e2a0 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -181,15 +181,6 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -210,15 +201,6 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM mux.Handle("GET", pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -239,15 +221,6 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM mux.Handle("POST", pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index cf0fc80c968..90bcbbd39f0 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -180,15 +180,6 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -209,15 +200,6 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti mux.Handle("GET", pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -238,15 +220,6 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti mux.Handle("POST", pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { @@ -267,15 +240,6 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti mux.Handle("DELETE", pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 04452b5bf4c..f603e0283a2 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -82,15 +82,6 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index a8031068702..7db03cca64e 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -414,15 +414,6 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, ctx, cancel := context.WithCancel(ctx) {{- end }} defer cancel() - if cn, ok := w.(http.CloseNotifier); ok { - go func(done <-chan struct{}, closed <-chan bool) { - select { - case <-done: - case <-closed: - cancel() - } - }(ctx.Done(), cn.CloseNotify()) - } inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateContext(ctx, mux, req) if err != nil { From 3043d37993dd876b61167ddd4467d6c06af55276 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Tue, 8 May 2018 09:31:09 +0200 Subject: [PATCH 0051/1518] Add Handling of 'License' message to the annotation proto. This information is used by the default html doc generator and so it is nice to be able to provide it. Add the message to openapiv2.proto and extend template.go to handle it. Tested via: bazel build //examples/proto/examplepb:expamplepb_protoc_gen_swagger more bazel-bin/examples/proto/examplepb/a_bit_of_everything.swagger.json --- examples/proto/examplepb/a_bit_of_everything.proto | 4 ++++ protoc-gen-swagger/genswagger/template.go | 11 +++++++++++ protoc-gen-swagger/options/openapiv2.proto | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index a500bd397ad..d7a91bf4d8e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -20,6 +20,10 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { url: "https://github.com/grpc-ecosystem/grpc-gateway"; email: "none@example.com"; }; + license: { + name: "BSD 3-Clause License"; + url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; + }; }; // Overwriting host entry breaks tests, so this is not done here. external_docs: { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 939c7b3730b..a493c15fb3f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -902,6 +902,17 @@ func applyTemplate(p param) (*swaggerObject, error) { s.Info.Contact.Email = spb.Info.Contact.Email } } + if spb.Info.License != nil { + if s.Info.License == nil { + s.Info.License = &swaggerLicenseObject{} + } + if spb.Info.License.Name != "" { + s.Info.License.Name = spb.Info.License.Name + } + if spb.Info.License.Url != "" { + s.Info.License.URL = spb.Info.License.Url + } + } } if spb.Host != "" { s.Host = spb.Host diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index c9f0386564c..d1d6d969d78 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -89,8 +89,7 @@ message Info { string description = 2; string terms_of_service = 3; Contact contact = 4; - // field 5 is reserved for 'license'. - reserved 5; + License license=5; string version = 6; } @@ -105,6 +104,17 @@ message Contact { string email = 3; } +// `License` is a representation of OpenAPI v2 specification's License object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject +// +message License { + // Required. The license name used for the API. + string name = 1; + // A URL to the license used for the API. + string url = 2; +} + // `ExternalDocumentation` is a representation of OpenAPI v2 specification's // ExternalDocumentation object. // From 844b78d9a291695a45d1d826fda9c1b95a2ddfc1 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Mon, 5 Nov 2018 16:30:14 +0100 Subject: [PATCH 0052/1518] Regenerate checked-in files for the Info.License addition. --- .../proto/examplepb/a_bit_of_everything.pb.go | 366 +++++++++--------- .../a_bit_of_everything.swagger.json | 4 + protoc-gen-swagger/options/openapiv2.pb.go | 322 ++++++++------- 3 files changed, 380 insertions(+), 312 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 2609fd85f71..788a346b8b8 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -54,7 +54,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0} } // DeepEnum is one or zero. @@ -80,7 +80,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -128,7 +128,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -464,7 +464,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{0, 0} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -533,7 +533,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{1} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -676,7 +676,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{2} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -715,7 +715,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_34defd096f52c726, []int{3} + return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -1412,179 +1412,181 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_34defd096f52c726) -} - -var fileDescriptor_a_bit_of_everything_34defd096f52c726 = []byte{ - // 2708 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5f, 0x73, 0x1b, 0x57, - 0x15, 0xf7, 0x6a, 0x65, 0xc5, 0x3e, 0xb6, 0x6c, 0xf9, 0x3a, 0x71, 0x6c, 0xc5, 0xad, 0x6f, 0xd4, - 0x94, 0x6e, 0xdd, 0x6a, 0x37, 0x51, 0x4c, 0x49, 0xdc, 0x69, 0x83, 0x1c, 0x3b, 0x89, 0x9b, 0xd6, - 0x71, 0x36, 0x69, 0xe9, 0x84, 0x14, 0xcf, 0x4a, 0xba, 0x92, 0xb6, 0xd1, 0xee, 0x5d, 0x76, 0xef, - 0x3a, 0x11, 0x46, 0x50, 0x60, 0x06, 0x06, 0xfa, 0xc0, 0x8c, 0xe1, 0x89, 0x07, 0x9e, 0xf9, 0x02, - 0x3c, 0xf1, 0xc0, 0xf0, 0x50, 0x5e, 0xfa, 0x06, 0x33, 0x7d, 0x80, 0x19, 0x5e, 0x80, 0x19, 0x3e, - 0x01, 0x0c, 0x6f, 0xcc, 0xde, 0xfd, 0xe3, 0xdd, 0x95, 0x14, 0x47, 0x0e, 0xd3, 0x97, 0x44, 0xf7, - 0xde, 0xf3, 0xff, 0x9c, 0x7b, 0xce, 0xef, 0xae, 0xa1, 0x42, 0x9e, 0x68, 0x86, 0xd5, 0x21, 0x8e, - 0x62, 0xd9, 0x94, 0x51, 0x25, 0x58, 0x5a, 0x35, 0x45, 0xdb, 0xab, 0xe9, 0x6c, 0x8f, 0x36, 0xf7, - 0xc8, 0x3e, 0xb1, 0xbb, 0xac, 0xad, 0x9b, 0x2d, 0x99, 0xd3, 0xa0, 0x95, 0x96, 0x6d, 0xd5, 0xe5, - 0x96, 0xc6, 0xc8, 0x63, 0xad, 0x2b, 0x87, 0x02, 0xe4, 0x88, 0xb5, 0xb8, 0xdc, 0xa2, 0xb4, 0xd5, - 0x21, 0x8a, 0x66, 0xe9, 0x8a, 0x66, 0x9a, 0x94, 0x69, 0x4c, 0xa7, 0xa6, 0xe3, 0xb3, 0x17, 0xcf, - 0x05, 0xa7, 0x7c, 0x55, 0x73, 0x9b, 0x0a, 0x31, 0x2c, 0xd6, 0x0d, 0x0e, 0x5f, 0x4c, 0x1f, 0x36, - 0x5c, 0x9b, 0x73, 0x07, 0xe7, 0xaf, 0xa4, 0xec, 0xb5, 0x34, 0xd6, 0x26, 0xa6, 0x6b, 0xf0, 0x1f, - 0x7b, 0xde, 0xaf, 0x80, 0x10, 0xa7, 0x08, 0x1d, 0xb7, 0xa6, 0x18, 0xc4, 0x71, 0xb4, 0x16, 0x09, - 0x28, 0xce, 0xf7, 0x53, 0x54, 0x52, 0x24, 0x2b, 0x69, 0x6b, 0x98, 0x6e, 0x10, 0x87, 0x69, 0x86, - 0x15, 0x10, 0xbc, 0xce, 0xff, 0xab, 0x97, 0x5b, 0xc4, 0x2c, 0x3b, 0x8f, 0xb5, 0x56, 0x8b, 0xd8, - 0x0a, 0xb5, 0xb8, 0xb7, 0xfd, 0x9e, 0x97, 0xfe, 0x38, 0x0f, 0x85, 0xea, 0x86, 0xce, 0xee, 0x34, - 0xb7, 0xa2, 0x98, 0xa2, 0x8f, 0x20, 0xef, 0xe8, 0x66, 0xab, 0x43, 0xf6, 0x4c, 0xe2, 0x30, 0xd2, - 0x58, 0x5c, 0xc2, 0x82, 0x34, 0x55, 0xb9, 0x22, 0x1f, 0x13, 0x65, 0x39, 0x2d, 0x49, 0xde, 0xe1, - 0xfc, 0xea, 0xb4, 0x2f, 0xce, 0x5f, 0xa1, 0x36, 0x64, 0x5d, 0x57, 0x6f, 0x2c, 0x0a, 0x58, 0x90, - 0x26, 0x37, 0xee, 0x1f, 0x56, 0xef, 0x7e, 0x22, 0x08, 0x3f, 0x13, 0x6e, 0x7f, 0x53, 0x2b, 0x37, - 0xab, 0xe5, 0x1b, 0x17, 0xcb, 0x57, 0x3f, 0x3a, 0xb8, 0xd2, 0x2b, 0xc7, 0x97, 0x6b, 0xa3, 0x2c, - 0x2f, 0x55, 0x7a, 0x2a, 0xd7, 0x80, 0x76, 0x21, 0x17, 0x78, 0x90, 0xc1, 0xe2, 0x73, 0x79, 0x10, - 0xc8, 0x41, 0x2b, 0x30, 0xd5, 0xec, 0x50, 0x8d, 0xed, 0xed, 0x6b, 0x1d, 0x97, 0x2c, 0x8a, 0x58, - 0x90, 0x32, 0x2a, 0xf0, 0xad, 0x0f, 0xbc, 0x1d, 0x74, 0x1e, 0xa6, 0x1b, 0xd4, 0xad, 0x75, 0x48, - 0x40, 0x91, 0xc5, 0x82, 0x24, 0xa8, 0x53, 0xfe, 0x9e, 0x4f, 0xb2, 0x02, 0x53, 0xba, 0xc9, 0xde, - 0x58, 0x0b, 0x28, 0xc6, 0xb1, 0x20, 0x89, 0x2a, 0xf0, 0xad, 0x48, 0x86, 0x1b, 0xa7, 0xc8, 0x61, - 0x41, 0xca, 0xaa, 0x53, 0x6e, 0x8c, 0xc4, 0x97, 0x71, 0xb9, 0x12, 0x50, 0x9c, 0xc2, 0x82, 0x34, - 0xce, 0x65, 0x5c, 0xae, 0xf8, 0x04, 0x2f, 0x41, 0xbe, 0xa9, 0x3f, 0x21, 0x8d, 0x48, 0xc8, 0x04, - 0x16, 0xa4, 0x9c, 0x3a, 0x1d, 0x6c, 0x26, 0x89, 0x22, 0x39, 0x93, 0x58, 0x90, 0x4e, 0x05, 0x44, - 0xa1, 0xa4, 0x17, 0x00, 0x6a, 0x94, 0x76, 0x02, 0x0a, 0xc0, 0x82, 0x34, 0xa1, 0x4e, 0x7a, 0x3b, - 0x91, 0xb1, 0x0e, 0xb3, 0x75, 0xb3, 0x15, 0x10, 0x4c, 0x79, 0x59, 0x55, 0xa7, 0xfc, 0xbd, 0xc8, - 0xd8, 0x5a, 0x97, 0x11, 0x27, 0xa0, 0x78, 0x01, 0x0b, 0xd2, 0xb4, 0x0a, 0x7c, 0x2b, 0xe1, 0x70, - 0x64, 0x46, 0x1e, 0x0b, 0x52, 0xde, 0x77, 0x38, 0xb4, 0xe2, 0x36, 0x80, 0x77, 0x95, 0x02, 0x82, - 0x19, 0x2c, 0x48, 0x33, 0x95, 0xd7, 0x8f, 0x4d, 0xe7, 0x8e, 0x6b, 0x10, 0x5b, 0xaf, 0x6f, 0x99, - 0xae, 0xa1, 0x4e, 0x7a, 0xfc, 0xbe, 0xb0, 0x5d, 0x98, 0x8d, 0x2e, 0x67, 0x20, 0xf1, 0x45, 0x2e, - 0x51, 0x1a, 0x22, 0x31, 0xbc, 0xd3, 0xf2, 0xae, 0xc6, 0xda, 0x5c, 0x5a, 0xde, 0x0a, 0x7e, 0xf9, - 0x12, 0x1d, 0x58, 0xf0, 0x2b, 0x64, 0x2f, 0x2d, 0x78, 0x85, 0x0b, 0x7e, 0xfb, 0x38, 0xc1, 0xef, - 0xf9, 0xb7, 0x3c, 0x94, 0x1f, 0xd4, 0x5d, 0xa4, 0x6e, 0xde, 0x4c, 0xac, 0x7d, 0xa5, 0x2f, 0xc3, - 0x8c, 0x93, 0xcc, 0xdf, 0x2c, 0x16, 0xa4, 0x59, 0x35, 0xef, 0x24, 0x12, 0x18, 0x91, 0x45, 0xb5, - 0x50, 0xc0, 0x82, 0x54, 0x08, 0xc9, 0x62, 0x55, 0xe7, 0xc4, 0x93, 0x30, 0x87, 0x05, 0x69, 0x4e, - 0x9d, 0x72, 0x62, 0x49, 0x08, 0x48, 0x22, 0x39, 0x08, 0x0b, 0x12, 0xf2, 0x49, 0x42, 0x29, 0x15, - 0x38, 0x63, 0x13, 0x8b, 0x68, 0x5e, 0x28, 0x12, 0x75, 0x31, 0x8f, 0x45, 0x69, 0x52, 0x9d, 0x0f, - 0x0f, 0xef, 0xc5, 0xea, 0xe3, 0x2a, 0x4c, 0x51, 0x93, 0x78, 0x7d, 0xdd, 0x6b, 0xbb, 0x8b, 0xa7, - 0x79, 0xb7, 0x59, 0x90, 0xfd, 0x4e, 0x27, 0x87, 0x9d, 0x4e, 0xde, 0xf2, 0x4e, 0x6f, 0x8d, 0xa9, - 0xc0, 0x89, 0xf9, 0x0a, 0xbd, 0x04, 0xd3, 0x3e, 0xab, 0xaf, 0x6b, 0xf1, 0x8c, 0x57, 0x7d, 0xb7, - 0xc6, 0x54, 0x5f, 0xa0, 0xaf, 0x04, 0x3d, 0x84, 0x49, 0x43, 0xb3, 0x02, 0x3b, 0x16, 0x78, 0x27, - 0xb8, 0x36, 0x7a, 0x27, 0x78, 0x4f, 0xb3, 0xb8, 0xb9, 0x5b, 0x26, 0xb3, 0xbb, 0xea, 0x84, 0x11, - 0x2c, 0xd1, 0x13, 0x98, 0x37, 0x34, 0xcb, 0x4a, 0xfb, 0x7b, 0x96, 0xeb, 0xb9, 0x75, 0x22, 0x3d, - 0x56, 0x22, 0x3e, 0xbe, 0xc2, 0x39, 0x23, 0xbd, 0x1f, 0xd3, 0x1c, 0xd4, 0x9e, 0xaf, 0x79, 0xf1, - 0xf9, 0x34, 0xfb, 0x95, 0xd7, 0xaf, 0x39, 0xb6, 0x8f, 0xd6, 0x61, 0xd1, 0xa4, 0xe6, 0x75, 0x6a, - 0xee, 0x13, 0xd3, 0x1b, 0x27, 0x5a, 0x67, 0x47, 0x33, 0xfc, 0xf6, 0xb6, 0x58, 0xe4, 0x0d, 0x60, - 0xe8, 0x39, 0xba, 0x0e, 0xb3, 0xd1, 0xcc, 0x0a, 0x2c, 0x3e, 0xc7, 0x33, 0x5e, 0xec, 0xcb, 0xf8, - 0xfd, 0x90, 0x4e, 0x9d, 0x89, 0x58, 0x7c, 0x21, 0x0f, 0x21, 0xaa, 0xa4, 0xf8, 0x65, 0x5b, 0xc6, - 0xe2, 0xc8, 0x7d, 0x61, 0x2e, 0x14, 0x14, 0x5d, 0xac, 0xe2, 0x6f, 0x04, 0xc8, 0x05, 0xc3, 0x0a, - 0x41, 0xd6, 0xd4, 0x0c, 0xe2, 0x0f, 0x2b, 0x95, 0xff, 0x46, 0x0b, 0x90, 0xd3, 0x0c, 0xea, 0x9a, - 0x6c, 0x31, 0xc3, 0x1b, 0x55, 0xb0, 0x42, 0x77, 0x21, 0x43, 0x1f, 0xf1, 0x99, 0x30, 0x53, 0xa9, - 0x9e, 0x74, 0xd4, 0xc8, 0x9b, 0x84, 0x58, 0xdc, 0xb0, 0x0c, 0x7d, 0x54, 0x5a, 0x81, 0x89, 0x70, - 0x8d, 0x26, 0x61, 0xfc, 0x46, 0xf5, 0xdd, 0x7b, 0x5b, 0x85, 0x31, 0x34, 0x01, 0xd9, 0xfb, 0xea, - 0xfb, 0x5b, 0x05, 0xa1, 0xa8, 0x43, 0x3e, 0x51, 0x98, 0xa8, 0x00, 0xe2, 0x23, 0xd2, 0x0d, 0xec, - 0xf5, 0x7e, 0xa2, 0x0d, 0x18, 0xf7, 0xa3, 0x93, 0x39, 0x41, 0xd7, 0xf4, 0x59, 0xd7, 0x33, 0x57, - 0x84, 0xe2, 0x26, 0x2c, 0x0c, 0xae, 0xcd, 0x01, 0x3a, 0x4f, 0xc7, 0x75, 0x4e, 0xc6, 0xa5, 0x7c, - 0x2f, 0x94, 0x92, 0xae, 0xb3, 0x01, 0x52, 0x76, 0xe2, 0x52, 0x9e, 0x67, 0x7c, 0x1f, 0xe9, 0x5f, - 0xff, 0x4c, 0x38, 0xac, 0xfe, 0x41, 0x80, 0xd6, 0xea, 0x7c, 0x15, 0xd7, 0x74, 0x86, 0x69, 0x13, - 0x1f, 0xc1, 0xc9, 0xca, 0xf6, 0xb6, 0xc9, 0xc2, 0x92, 0xed, 0xe2, 0x3a, 0x35, 0xac, 0x8e, 0x5e, - 0xf7, 0x8a, 0x03, 0x07, 0x30, 0x0c, 0xb3, 0xae, 0x45, 0x30, 0xa3, 0xb8, 0x4e, 0xf7, 0x89, 0x8d, - 0x0d, 0xcd, 0xec, 0xe2, 0x26, 0xd1, 0x98, 0x6b, 0x13, 0xc7, 0x93, 0xb5, 0x1b, 0xd6, 0xee, 0x9f, - 0x04, 0x8e, 0x41, 0x56, 0x3f, 0x80, 0x0b, 0x37, 0x74, 0xb3, 0x81, 0xa9, 0xcb, 0xb0, 0x41, 0x6d, - 0x82, 0xb5, 0x9a, 0xf7, 0xb3, 0x0f, 0x74, 0xc9, 0x6d, 0xc6, 0x2c, 0x67, 0x5d, 0x51, 0x5a, 0x3a, - 0x6b, 0xbb, 0x35, 0xb9, 0x4e, 0x0d, 0xc5, 0x73, 0xb7, 0x4c, 0xea, 0xd4, 0xe9, 0x3a, 0x8c, 0x04, - 0xcb, 0xc0, 0xfb, 0x8d, 0x7c, 0xd8, 0x34, 0xb9, 0x6b, 0xa5, 0x5f, 0x4e, 0xc0, 0x62, 0x5a, 0xa6, - 0x1a, 0x14, 0x36, 0xba, 0x0a, 0x4b, 0x7c, 0x2c, 0x45, 0x57, 0x26, 0x8e, 0x61, 0x04, 0x2c, 0x4a, - 0x19, 0x75, 0xc1, 0x23, 0x08, 0x19, 0x6e, 0x1c, 0xe1, 0x99, 0x37, 0xa1, 0x98, 0x64, 0x4d, 0xa0, - 0x1b, 0x0f, 0x56, 0x09, 0xea, 0xd9, 0x38, 0xef, 0x66, 0x0c, 0xe9, 0xf4, 0xe9, 0x8d, 0x0f, 0x0f, - 0x11, 0x8b, 0x92, 0x98, 0xd4, 0xbb, 0x7d, 0x34, 0x47, 0xfa, 0xf4, 0x26, 0x10, 0x51, 0x16, 0x8b, - 0x52, 0x36, 0xa9, 0xf7, 0xfd, 0xd8, 0x10, 0x1a, 0xa4, 0x37, 0x9a, 0x6b, 0xe3, 0x58, 0x94, 0xc6, - 0xfb, 0xf4, 0x86, 0x23, 0xee, 0x2d, 0x38, 0x97, 0x0a, 0x55, 0x62, 0x72, 0xe6, 0xb0, 0x28, 0xe5, - 0xd4, 0xc5, 0x44, 0xb0, 0xe2, 0x43, 0x74, 0x30, 0x7b, 0x0c, 0xa7, 0x89, 0xd2, 0xa9, 0x01, 0xec, - 0xa1, 0xf6, 0xaf, 0xc1, 0x62, 0x92, 0x3d, 0x86, 0xbc, 0x26, 0xb0, 0x28, 0x4d, 0xa8, 0x67, 0xe2, - 0xbc, 0x1b, 0x11, 0x0a, 0xeb, 0x0b, 0x57, 0x62, 0x16, 0x4d, 0xf2, 0xd9, 0x9b, 0x08, 0x57, 0x72, - 0xfe, 0xa6, 0xc2, 0x15, 0x47, 0x6b, 0x80, 0x45, 0x69, 0x3a, 0x19, 0xae, 0x8d, 0x23, 0xe4, 0x36, - 0x30, 0x4d, 0x91, 0xbb, 0x53, 0x58, 0x94, 0xf2, 0xfd, 0x69, 0x0a, 0xbd, 0x25, 0x69, 0x6f, 0x63, - 0x9d, 0x7c, 0xfa, 0x04, 0x9d, 0x3c, 0x11, 0x9b, 0x23, 0x98, 0x74, 0x0d, 0x96, 0x53, 0xb1, 0x49, - 0x26, 0x25, 0x8f, 0x45, 0x69, 0x56, 0x5d, 0x4a, 0x44, 0x27, 0x01, 0xa0, 0x86, 0x08, 0x88, 0x8a, - 0x62, 0x06, 0x8b, 0x52, 0x61, 0x90, 0x80, 0xa1, 0xc5, 0x9c, 0x00, 0x5a, 0xb3, 0x58, 0x94, 0xe6, - 0x52, 0xd9, 0x89, 0x45, 0x69, 0x20, 0x73, 0x0c, 0xca, 0x89, 0x12, 0xea, 0x67, 0x0e, 0x34, 0x97, - 0x8a, 0x90, 0xdd, 0xa0, 0x8d, 0xee, 0xa0, 0x31, 0x56, 0x7a, 0x08, 0xb3, 0x01, 0xea, 0xfc, 0x86, - 0xce, 0xda, 0x9c, 0x6c, 0x06, 0x32, 0xe1, 0xc3, 0x4c, 0xcd, 0xe8, 0x5e, 0xe3, 0xc8, 0x36, 0x34, - 0xa6, 0x05, 0xfd, 0xf7, 0xe5, 0x63, 0xb3, 0xe1, 0x09, 0x51, 0x39, 0xcb, 0x2a, 0x86, 0xa9, 0x58, - 0x6e, 0xbc, 0x89, 0xf5, 0x60, 0x4b, 0xbd, 0x53, 0x18, 0x43, 0xa7, 0x40, 0xbc, 0xb3, 0xb3, 0x55, - 0x10, 0x2a, 0xff, 0x59, 0x82, 0xb3, 0xe9, 0x96, 0x75, 0x8f, 0xd8, 0xfb, 0x7a, 0x9d, 0xa0, 0x2f, - 0x44, 0xc8, 0x5d, 0xb7, 0x3d, 0x77, 0xd0, 0xa5, 0x91, 0xbb, 0x7e, 0x71, 0x74, 0x96, 0xd2, 0x3f, - 0x33, 0x3f, 0xfc, 0xf3, 0x3f, 0x7e, 0x91, 0xf9, 0x5b, 0xa6, 0xf4, 0xd7, 0x8c, 0xb2, 0x7f, 0x29, - 0xfc, 0xea, 0x30, 0xe8, 0x9b, 0x83, 0x72, 0x10, 0x6b, 0x9f, 0x3d, 0xe5, 0x20, 0xde, 0x11, 0x7b, - 0xca, 0x41, 0x2c, 0x3b, 0x3d, 0xc5, 0x21, 0x96, 0x66, 0x6b, 0x8c, 0xda, 0xca, 0x81, 0x9b, 0x38, - 0x38, 0x88, 0x55, 0x40, 0x4f, 0x39, 0x48, 0x14, 0x54, 0xb8, 0x8e, 0x9d, 0x1f, 0xf5, 0x81, 0x9e, - 0x72, 0x10, 0xbf, 0xdb, 0x6f, 0x39, 0xcc, 0xb6, 0x6c, 0xd2, 0xd4, 0x9f, 0x28, 0xab, 0x3d, 0x5f, - 0x49, 0x8c, 0xcd, 0x49, 0xcb, 0x71, 0xd2, 0x8a, 0x9c, 0x14, 0x43, 0xd2, 0xc8, 0x61, 0x20, 0xae, - 0xa7, 0x1c, 0x1c, 0xdd, 0xd5, 0x9e, 0x72, 0x90, 0x7a, 0xf4, 0x78, 0x9c, 0x03, 0x5f, 0x43, 0x3d, - 0xf4, 0x6b, 0x01, 0xc0, 0x4f, 0x2c, 0x2f, 0xb8, 0x2f, 0x27, 0xb9, 0xab, 0x3c, 0xb7, 0x17, 0x4a, - 0x2b, 0xc7, 0x64, 0x76, 0x5d, 0x58, 0x45, 0xdf, 0x85, 0xdc, 0xbb, 0x94, 0x3e, 0x72, 0x2d, 0x34, - 0x2b, 0x3b, 0x6e, 0xad, 0x22, 0x6f, 0x37, 0x82, 0x5b, 0x72, 0x12, 0xcd, 0x32, 0xd7, 0x2c, 0xa1, - 0xaf, 0x1c, 0x5b, 0x53, 0x1e, 0x58, 0xe8, 0xa1, 0x1f, 0x0b, 0x90, 0x7b, 0xdf, 0x6a, 0x9c, 0xb0, - 0xee, 0x87, 0xbc, 0x99, 0x4a, 0x97, 0xb8, 0x15, 0xaf, 0x15, 0x9f, 0xd1, 0x0a, 0x2f, 0x0c, 0x3f, - 0x17, 0x20, 0xb7, 0x49, 0x3a, 0x84, 0x91, 0xfe, 0x38, 0x0c, 0x53, 0xf3, 0xf0, 0xb0, 0xfa, 0x5a, - 0xed, 0x55, 0x98, 0x01, 0xa8, 0x5a, 0xfa, 0x6d, 0xd2, 0xad, 0xba, 0xac, 0x8d, 0xc6, 0xe0, 0x2c, - 0xe4, 0xee, 0x78, 0x3f, 0x2b, 0x28, 0x0f, 0x59, 0x9b, 0x68, 0x0d, 0x18, 0x7f, 0x6c, 0xeb, 0x8c, - 0xf8, 0xa1, 0x59, 0x7d, 0xd6, 0xd0, 0xfc, 0x5d, 0x80, 0x89, 0x9b, 0x84, 0xdd, 0x75, 0x89, 0xdd, - 0xfd, 0x7f, 0x06, 0xe7, 0x53, 0xe1, 0xb0, 0x7a, 0xbf, 0xb4, 0x03, 0xcb, 0x83, 0x60, 0x5a, 0xa4, - 0x70, 0x44, 0x78, 0xf6, 0xa1, 0x50, 0x1b, 0xe3, 0xfe, 0xc9, 0xe8, 0xf5, 0xe3, 0xfc, 0xfb, 0xb6, - 0xa7, 0x20, 0xf4, 0xf2, 0xd3, 0x71, 0x28, 0xdc, 0x24, 0x2c, 0xec, 0xe5, 0xbe, 0xf2, 0xab, 0x23, - 0x7b, 0x1b, 0xf2, 0x17, 0x4f, 0xce, 0x5a, 0xfa, 0x24, 0xcb, 0x3d, 0xf8, 0xaf, 0x88, 0xfe, 0x2d, - 0x1e, 0xe3, 0x43, 0x34, 0x9c, 0x82, 0x56, 0x30, 0x08, 0x68, 0xf6, 0xd2, 0x67, 0xa9, 0xbe, 0x39, - 0x14, 0x29, 0xf6, 0x9d, 0xb9, 0x4f, 0x3b, 0x4c, 0xf6, 0xb3, 0xa7, 0x60, 0xb9, 0xc1, 0xa7, 0x43, - 0x79, 0x13, 0x1d, 0x78, 0x38, 0xd6, 0xea, 0xe7, 0x3b, 0xc2, 0x52, 0x03, 0x1d, 0x19, 0xaa, 0xb0, - 0xbf, 0xc1, 0x0e, 0x01, 0x30, 0x43, 0x8e, 0x87, 0xfa, 0xe9, 0x3c, 0x4d, 0x6b, 0x62, 0x00, 0xa0, - 0xcf, 0x44, 0xc8, 0x6e, 0xd5, 0xdb, 0x14, 0x0d, 0xfb, 0x30, 0xe6, 0xb8, 0x35, 0xd9, 0x87, 0x92, - 0x61, 0x73, 0x78, 0x66, 0xca, 0xd2, 0xbf, 0x32, 0x87, 0xd5, 0x1f, 0x64, 0x60, 0x9a, 0xd4, 0xdb, - 0x14, 0x3b, 0xfe, 0xe0, 0x87, 0x09, 0xbe, 0xb2, 0xad, 0x3a, 0x9a, 0xbb, 0xe7, 0x1a, 0x86, 0x66, - 0x77, 0xd7, 0xf1, 0x56, 0xb0, 0x55, 0x2c, 0x6c, 0x12, 0xa7, 0x6e, 0xeb, 0xfc, 0x6b, 0x36, 0xdf, - 0x2d, 0x6d, 0x02, 0x4a, 0x5e, 0x5b, 0x6e, 0xed, 0x88, 0x97, 0xf5, 0x9d, 0x6b, 0x20, 0x7e, 0xf5, - 0xe2, 0x65, 0x74, 0x05, 0xde, 0x50, 0x09, 0x73, 0x6d, 0x93, 0x34, 0xf0, 0xe3, 0x36, 0x31, 0x31, - 0x6b, 0x13, 0x6c, 0x13, 0x87, 0xba, 0x76, 0x9d, 0x60, 0xdd, 0xc1, 0x8c, 0x18, 0x16, 0xb5, 0x35, - 0x5b, 0xef, 0x74, 0xb1, 0x6b, 0x6a, 0xfb, 0x9a, 0xde, 0xd1, 0x6a, 0x1d, 0x22, 0xbf, 0xf3, 0x26, - 0x88, 0x6b, 0x17, 0xd7, 0xd0, 0x1a, 0xac, 0x3e, 0x45, 0x40, 0x83, 0x12, 0x07, 0x9b, 0x94, 0x61, - 0xf2, 0x44, 0x77, 0x98, 0x8c, 0x72, 0x90, 0xfd, 0x55, 0x46, 0x10, 0xf9, 0x25, 0xfb, 0xe8, 0xf8, - 0x36, 0xe1, 0x05, 0x46, 0x39, 0xf0, 0x13, 0xf3, 0x60, 0xa9, 0x54, 0x50, 0xf6, 0x2b, 0x11, 0xbd, - 0x77, 0xb6, 0xee, 0x3f, 0x72, 0x1f, 0x20, 0xd4, 0x77, 0x84, 0x7e, 0x2b, 0xc0, 0xf4, 0x26, 0x21, - 0x16, 0xff, 0x7e, 0xe8, 0x6d, 0x7c, 0x39, 0x73, 0xf7, 0x1a, 0xf7, 0xed, 0x6a, 0x69, 0xed, 0xd8, - 0x16, 0x9f, 0xf8, 0x7b, 0x83, 0xec, 0xc1, 0x53, 0x3e, 0x85, 0xaa, 0x00, 0x3b, 0x74, 0x43, 0x37, - 0x1b, 0xba, 0xd9, 0x72, 0xd0, 0x52, 0x5f, 0x07, 0xdf, 0x0c, 0xfe, 0x14, 0x33, 0xb4, 0xb9, 0x8f, - 0xa1, 0x0f, 0xe0, 0xd4, 0x7d, 0xdd, 0x20, 0xd4, 0x65, 0x68, 0x08, 0xd1, 0x50, 0xe6, 0x73, 0xdc, - 0xfc, 0x33, 0x68, 0x3e, 0x1e, 0x4f, 0x16, 0x08, 0x6b, 0x43, 0x61, 0xcb, 0xb6, 0xa9, 0xed, 0x61, - 0xe7, 0x4d, 0xc2, 0x34, 0xbd, 0xe3, 0x8c, 0xac, 0xe0, 0x02, 0x57, 0xf0, 0x22, 0x5a, 0x4e, 0x24, - 0xcc, 0x93, 0xfa, 0x58, 0x67, 0xed, 0x46, 0x20, 0xf5, 0x27, 0x02, 0xa0, 0x9b, 0x84, 0xa5, 0xb1, - 0xfa, 0xc5, 0x63, 0xf3, 0x91, 0xe2, 0x18, 0x6a, 0xc6, 0x2b, 0xdc, 0x8c, 0xf3, 0xa5, 0xa5, 0xb8, - 0x19, 0x9e, 0x05, 0x35, 0xda, 0xe8, 0x2a, 0x07, 0x1e, 0x22, 0xe0, 0x98, 0x1e, 0xfd, 0x48, 0x80, - 0xb9, 0x5d, 0xea, 0x30, 0x4f, 0x22, 0x67, 0xe5, 0x86, 0x3c, 0xdb, 0xb3, 0x60, 0xa8, 0x76, 0x85, - 0x6b, 0x7f, 0xb5, 0x74, 0x21, 0xae, 0xdd, 0xa2, 0x0e, 0xf3, 0x2c, 0xe0, 0x5f, 0x84, 0x7d, 0x33, - 0xc2, 0xa2, 0x28, 0xfe, 0x5e, 0x38, 0xac, 0xfe, 0x4e, 0x40, 0xcd, 0x21, 0x6f, 0x07, 0xdc, 0x88, - 0x35, 0x89, 0x72, 0x19, 0x3f, 0x6e, 0xeb, 0xf5, 0x36, 0x76, 0xda, 0xd4, 0xed, 0x34, 0xf8, 0xf5, - 0xab, 0x11, 0xec, 0x3a, 0xa4, 0x81, 0x75, 0x13, 0x5b, 0x1d, 0xad, 0x4e, 0x30, 0x6d, 0xf2, 0x8b, - 0xda, 0xa0, 0x75, 0xd7, 0x20, 0xa6, 0xff, 0x07, 0x32, 0x5c, 0xa7, 0x86, 0xb7, 0x38, 0x5f, 0xbc, - 0x0b, 0x2b, 0x83, 0x90, 0x81, 0x77, 0x8d, 0xc2, 0xd7, 0xca, 0x88, 0xfd, 0xa6, 0xf2, 0x31, 0x9c, - 0xae, 0x6b, 0x06, 0xe9, 0x5c, 0xd7, 0x1c, 0x12, 0xc8, 0xf0, 0xa0, 0x35, 0x52, 0x61, 0xdc, 0xff, - 0xac, 0x3d, 0x6a, 0x21, 0x2d, 0xf1, 0x18, 0xce, 0xa3, 0xb9, 0x44, 0x21, 0x79, 0x47, 0x95, 0x6f, - 0xc1, 0x72, 0xd5, 0xa4, 0xac, 0x4d, 0xec, 0x40, 0x93, 0x97, 0xbc, 0xd8, 0xa5, 0x7a, 0x3b, 0x71, - 0xc5, 0x46, 0x55, 0x3c, 0xb6, 0xf1, 0x97, 0xdc, 0x61, 0xf5, 0xf3, 0x1c, 0x62, 0x30, 0x5f, 0xc5, - 0x1b, 0xfe, 0xf7, 0xb4, 0x58, 0x07, 0xf8, 0x10, 0x4e, 0xb7, 0xd4, 0xdd, 0xeb, 0xe5, 0x9b, 0xbe, - 0xe7, 0xd8, 0xb2, 0xe9, 0xc7, 0xa4, 0xce, 0x46, 0x8d, 0x58, 0xb1, 0x60, 0x52, 0x93, 0x7c, 0x3d, - 0xf0, 0xcc, 0xa3, 0xae, 0x88, 0x97, 0xe4, 0x8b, 0xab, 0xa2, 0x90, 0xc9, 0x56, 0x0a, 0x9a, 0xe5, - 0x7f, 0xa5, 0xd3, 0xa9, 0xa9, 0x7c, 0xec, 0x50, 0xb3, 0xb2, 0x10, 0xdf, 0x79, 0x52, 0x6e, 0x52, - 0x5a, 0x36, 0x74, 0x83, 0xac, 0xf7, 0x51, 0xae, 0x0f, 0xa1, 0x54, 0x77, 0xbd, 0x86, 0x7e, 0x19, - 0x6d, 0xc3, 0xcd, 0xfe, 0x86, 0xee, 0x3a, 0xc4, 0x3e, 0x6a, 0xe6, 0x6d, 0x6d, 0x9f, 0x60, 0x8b, - 0xd8, 0x86, 0xee, 0x38, 0x5e, 0xdd, 0x30, 0x8a, 0xb5, 0x7a, 0x9d, 0x38, 0x4e, 0xa2, 0xf9, 0xcb, - 0xea, 0x73, 0x8c, 0x88, 0x53, 0xea, 0x2d, 0x10, 0xd7, 0x2e, 0x5d, 0x41, 0x55, 0xc8, 0x6f, 0xbf, - 0x62, 0x60, 0x0d, 0x33, 0xa2, 0x59, 0x94, 0xc9, 0xe8, 0x22, 0xc8, 0xc5, 0x91, 0xbe, 0x91, 0x3c, - 0xf8, 0x69, 0x06, 0x66, 0x61, 0x72, 0x43, 0x73, 0xf4, 0x3a, 0x87, 0xe7, 0x99, 0x09, 0x01, 0x5e, - 0x48, 0x00, 0xf6, 0xd9, 0x89, 0x4c, 0x71, 0xf2, 0xc3, 0x72, 0x75, 0x77, 0xbb, 0x7c, 0x9b, 0x74, - 0x71, 0x06, 0xbe, 0x10, 0x22, 0x00, 0xff, 0xb9, 0x30, 0x21, 0x4a, 0xd9, 0xca, 0x4b, 0x61, 0xf6, - 0x62, 0x09, 0x51, 0xa8, 0xe6, 0xb2, 0xb6, 0xe2, 0xfd, 0x43, 0x6d, 0xfd, 0x3b, 0x64, 0x7d, 0x65, - 0x38, 0x11, 0xa3, 0x8f, 0x88, 0xb9, 0xf1, 0x7d, 0x28, 0xfa, 0xef, 0x01, 0x84, 0x6e, 0xda, 0x9a, - 0xc9, 0x1c, 0xec, 0x2d, 0x82, 0xe8, 0xc1, 0x72, 0xf0, 0x4a, 0x40, 0xf3, 0xc1, 0x21, 0x5f, 0x85, - 0xa7, 0xd7, 0x61, 0x5c, 0x6b, 0x18, 0xba, 0x89, 0xd6, 0x13, 0xac, 0x66, 0x23, 0x41, 0xc6, 0x93, - 0xe1, 0x91, 0xe9, 0x0e, 0xf3, 0x06, 0xc5, 0x3e, 0xc1, 0xba, 0xd9, 0xa4, 0xb6, 0xc1, 0xf3, 0x5d, - 0x5b, 0x81, 0x7c, 0x3c, 0x14, 0x63, 0xe9, 0x97, 0x4b, 0xed, 0xd5, 0xa1, 0x6f, 0x97, 0x34, 0xa9, - 0xbd, 0x0d, 0x67, 0xdf, 0x3b, 0x6a, 0x0e, 0xf1, 0x9a, 0x1f, 0xb5, 0xd6, 0x1f, 0x4c, 0x46, 0x99, - 0xab, 0xe5, 0xf8, 0x75, 0xbb, 0xfc, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9d, 0xee, 0xfd, 0x43, - 0x14, 0x21, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_dc9cebfa7968115c) +} + +var fileDescriptor_a_bit_of_everything_dc9cebfa7968115c = []byte{ + // 2750 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x19, 0xcd, 0x73, 0x1b, 0x57, + 0xdd, 0xab, 0x95, 0x65, 0xfb, 0xe7, 0x2f, 0xf9, 0x39, 0x71, 0x6c, 0xc5, 0xad, 0x5f, 0xd4, 0x94, + 0x6e, 0xdd, 0x6a, 0x37, 0x51, 0x4c, 0x49, 0xdc, 0x69, 0x83, 0xfc, 0x91, 0xc4, 0x4d, 0xea, 0x38, + 0x9b, 0xb4, 0x74, 0x42, 0x5a, 0xcf, 0x4a, 0x7a, 0x96, 0xb6, 0xd1, 0xee, 0x5b, 0x76, 0xdf, 0x3a, + 0x16, 0x46, 0x50, 0x60, 0x06, 0x06, 0x7a, 0x60, 0xc6, 0x70, 0xe2, 0xc0, 0x99, 0x03, 0x57, 0x4e, + 0x3d, 0x30, 0x1c, 0xca, 0x85, 0x1b, 0x30, 0xbd, 0x30, 0xc3, 0x05, 0x98, 0xe1, 0x2f, 0x80, 0xe1, + 0xc6, 0xec, 0xdb, 0x0f, 0xef, 0xae, 0xa4, 0x38, 0x72, 0x98, 0x5e, 0xec, 0x7d, 0xef, 0xfd, 0xbe, + 0xbf, 0xdf, 0x13, 0x94, 0xc9, 0x81, 0x66, 0x58, 0x2d, 0xe2, 0x28, 0x96, 0x4d, 0x19, 0x55, 0x82, + 0xa5, 0x55, 0x55, 0xb4, 0xdd, 0xaa, 0xce, 0x76, 0xe9, 0xde, 0x2e, 0xd9, 0x27, 0x76, 0x9b, 0x35, + 0x75, 0xb3, 0x21, 0x73, 0x18, 0xb4, 0xd4, 0xb0, 0xad, 0x9a, 0xdc, 0xd0, 0x18, 0x79, 0xa2, 0xb5, + 0xe5, 0x90, 0x80, 0x1c, 0xa1, 0x16, 0x16, 0x1b, 0x94, 0x36, 0x5a, 0x44, 0xd1, 0x2c, 0x5d, 0xd1, + 0x4c, 0x93, 0x32, 0x8d, 0xe9, 0xd4, 0x74, 0x7c, 0xf4, 0xc2, 0xf9, 0xe0, 0x94, 0xaf, 0xaa, 0xee, + 0x9e, 0x42, 0x0c, 0x8b, 0xb5, 0x83, 0xc3, 0x17, 0xd3, 0x87, 0x75, 0xd7, 0xe6, 0xd8, 0xc1, 0xf9, + 0x2b, 0x29, 0x79, 0x2d, 0x8d, 0x35, 0x89, 0xe9, 0x1a, 0xfc, 0x63, 0xd7, 0xfb, 0x0a, 0x00, 0x71, + 0x0a, 0xd0, 0x71, 0xab, 0x8a, 0x41, 0x1c, 0x47, 0x6b, 0x90, 0x00, 0xe2, 0x42, 0x37, 0x44, 0x39, + 0x05, 0xb2, 0x94, 0x96, 0x86, 0xe9, 0x06, 0x71, 0x98, 0x66, 0x58, 0x01, 0xc0, 0xeb, 0xfc, 0x5f, + 0xad, 0xd4, 0x20, 0x66, 0xc9, 0x79, 0xa2, 0x35, 0x1a, 0xc4, 0x56, 0xa8, 0xc5, 0xb5, 0xed, 0xd6, + 0xbc, 0xf8, 0x87, 0x59, 0xc8, 0x57, 0xd6, 0x74, 0x76, 0x77, 0x6f, 0x33, 0xb2, 0x29, 0xfa, 0x10, + 0x26, 0x1d, 0xdd, 0x6c, 0xb4, 0xc8, 0xae, 0x49, 0x1c, 0x46, 0xea, 0xf3, 0x0b, 0x58, 0x90, 0xc6, + 0xcb, 0x57, 0xe5, 0x13, 0xac, 0x2c, 0xa7, 0x29, 0xc9, 0xdb, 0x1c, 0x5f, 0x9d, 0xf0, 0xc9, 0xf9, + 0x2b, 0xd4, 0x84, 0xac, 0xeb, 0xea, 0xf5, 0x79, 0x01, 0x0b, 0xd2, 0xd8, 0xda, 0x83, 0xa3, 0xca, + 0xbd, 0x4f, 0x04, 0xe1, 0xa7, 0xc2, 0xed, 0x6f, 0x6a, 0xa5, 0xbd, 0x4a, 0xe9, 0xc6, 0xa5, 0xd2, + 0xb5, 0x0f, 0x0f, 0xaf, 0x76, 0x4a, 0xf1, 0xe5, 0xca, 0x20, 0xcb, 0xcb, 0xe5, 0x8e, 0xca, 0x39, + 0xa0, 0x1d, 0xc8, 0x05, 0x1a, 0x64, 0xb0, 0xf8, 0x5c, 0x1a, 0x04, 0x74, 0xd0, 0x12, 0x8c, 0xef, + 0xb5, 0xa8, 0xc6, 0x76, 0xf7, 0xb5, 0x96, 0x4b, 0xe6, 0x45, 0x2c, 0x48, 0x19, 0x15, 0xf8, 0xd6, + 0xfb, 0xde, 0x0e, 0xba, 0x00, 0x13, 0x75, 0xea, 0x56, 0x5b, 0x24, 0x80, 0xc8, 0x62, 0x41, 0x12, + 0xd4, 0x71, 0x7f, 0xcf, 0x07, 0x59, 0x82, 0x71, 0xdd, 0x64, 0x6f, 0xac, 0x04, 0x10, 0xc3, 0x58, + 0x90, 0x44, 0x15, 0xf8, 0x56, 0x44, 0xc3, 0x8d, 0x43, 0xe4, 0xb0, 0x20, 0x65, 0xd5, 0x71, 0x37, + 0x06, 0xe2, 0xd3, 0xb8, 0x52, 0x0e, 0x20, 0x46, 0xb0, 0x20, 0x0d, 0x73, 0x1a, 0x57, 0xca, 0x3e, + 0xc0, 0x4b, 0x30, 0xb9, 0xa7, 0x1f, 0x90, 0x7a, 0x44, 0x64, 0x14, 0x0b, 0x52, 0x4e, 0x9d, 0x08, + 0x36, 0x93, 0x40, 0x11, 0x9d, 0x31, 0x2c, 0x48, 0x23, 0x01, 0x50, 0x48, 0xe9, 0x05, 0x80, 0x2a, + 0xa5, 0xad, 0x00, 0x02, 0xb0, 0x20, 0x8d, 0xaa, 0x63, 0xde, 0x4e, 0x24, 0xac, 0xc3, 0x6c, 0xdd, + 0x6c, 0x04, 0x00, 0xe3, 0x9e, 0x57, 0xd5, 0x71, 0x7f, 0x2f, 0x12, 0xb6, 0xda, 0x66, 0xc4, 0x09, + 0x20, 0x5e, 0xc0, 0x82, 0x34, 0xa1, 0x02, 0xdf, 0x4a, 0x28, 0x1c, 0x89, 0x31, 0x89, 0x05, 0x69, + 0xd2, 0x57, 0x38, 0x94, 0xe2, 0x36, 0x80, 0x97, 0x4a, 0x01, 0xc0, 0x14, 0x16, 0xa4, 0xa9, 0xf2, + 0xeb, 0x27, 0xba, 0x73, 0xdb, 0x35, 0x88, 0xad, 0xd7, 0x36, 0x4d, 0xd7, 0x50, 0xc7, 0x3c, 0x7c, + 0x9f, 0xd8, 0x0e, 0x4c, 0x47, 0xc9, 0x19, 0x50, 0x7c, 0x91, 0x53, 0x94, 0xfa, 0x50, 0x0c, 0x73, + 0x5a, 0xde, 0xd1, 0x58, 0x93, 0x53, 0x9b, 0xb4, 0x82, 0x2f, 0x9f, 0xa2, 0x03, 0x73, 0x7e, 0x84, + 0xec, 0xa6, 0x09, 0x2f, 0x71, 0xc2, 0x6f, 0x9f, 0x44, 0xf8, 0x5d, 0x3f, 0xcb, 0x43, 0xfa, 0x41, + 0xdc, 0x45, 0xec, 0x66, 0xcd, 0xc4, 0xda, 0x67, 0xfa, 0x32, 0x4c, 0x39, 0x49, 0xff, 0x4d, 0x63, + 0x41, 0x9a, 0x56, 0x27, 0x9d, 0x84, 0x03, 0x23, 0xb0, 0x28, 0x16, 0xf2, 0x58, 0x90, 0xf2, 0x21, + 0x58, 0x2c, 0xea, 0x9c, 0xb8, 0x13, 0x66, 0xb0, 0x20, 0xcd, 0xa8, 0xe3, 0x4e, 0xcc, 0x09, 0x01, + 0x48, 0x44, 0x07, 0x61, 0x41, 0x42, 0x3e, 0x48, 0x48, 0xa5, 0x0c, 0x67, 0x6d, 0x62, 0x11, 0xcd, + 0x33, 0x45, 0x22, 0x2e, 0x66, 0xb1, 0x28, 0x8d, 0xa9, 0xb3, 0xe1, 0xe1, 0xfd, 0x58, 0x7c, 0x5c, + 0x83, 0x71, 0x6a, 0x12, 0xaf, 0xae, 0x7b, 0x65, 0x77, 0xfe, 0x0c, 0xaf, 0x36, 0x73, 0xb2, 0x5f, + 0xe9, 0xe4, 0xb0, 0xd2, 0xc9, 0x9b, 0xde, 0xe9, 0xad, 0x21, 0x15, 0x38, 0x30, 0x5f, 0xa1, 0x97, + 0x60, 0xc2, 0x47, 0xf5, 0x79, 0xcd, 0x9f, 0xf5, 0xa2, 0xef, 0xd6, 0x90, 0xea, 0x13, 0xf4, 0x99, + 0xa0, 0x47, 0x30, 0x66, 0x68, 0x56, 0x20, 0xc7, 0x1c, 0xaf, 0x04, 0xd7, 0x07, 0xaf, 0x04, 0xef, + 0x6a, 0x16, 0x17, 0x77, 0xd3, 0x64, 0x76, 0x5b, 0x1d, 0x35, 0x82, 0x25, 0x3a, 0x80, 0x59, 0x43, + 0xb3, 0xac, 0xb4, 0xbe, 0xe7, 0x38, 0x9f, 0x5b, 0xa7, 0xe2, 0x63, 0x25, 0xec, 0xe3, 0x33, 0x9c, + 0x31, 0xd2, 0xfb, 0x31, 0xce, 0x41, 0xec, 0xf9, 0x9c, 0xe7, 0x9f, 0x8f, 0xb3, 0x1f, 0x79, 0xdd, + 0x9c, 0x63, 0xfb, 0x68, 0x15, 0xe6, 0x4d, 0x6a, 0xae, 0x53, 0x73, 0x9f, 0x98, 0x5e, 0x3b, 0xd1, + 0x5a, 0xdb, 0x9a, 0xe1, 0x97, 0xb7, 0xf9, 0x02, 0x2f, 0x00, 0x7d, 0xcf, 0xd1, 0x3a, 0x4c, 0x47, + 0x3d, 0x2b, 0x90, 0xf8, 0x3c, 0xf7, 0x78, 0xa1, 0xcb, 0xe3, 0x0f, 0x42, 0x38, 0x75, 0x2a, 0x42, + 0xf1, 0x89, 0x3c, 0x82, 0x28, 0x92, 0xe2, 0xc9, 0xb6, 0x88, 0xc5, 0x81, 0xeb, 0xc2, 0x4c, 0x48, + 0x28, 0x4a, 0xac, 0xc2, 0xaf, 0x05, 0xc8, 0x05, 0xcd, 0x0a, 0x41, 0xd6, 0xd4, 0x0c, 0xe2, 0x37, + 0x2b, 0x95, 0x7f, 0xa3, 0x39, 0xc8, 0x69, 0x06, 0x75, 0x4d, 0x36, 0x9f, 0xe1, 0x85, 0x2a, 0x58, + 0xa1, 0x7b, 0x90, 0xa1, 0x8f, 0x79, 0x4f, 0x98, 0x2a, 0x57, 0x4e, 0xdb, 0x6a, 0xe4, 0x0d, 0x42, + 0x2c, 0x2e, 0x58, 0x86, 0x3e, 0x2e, 0x2e, 0xc1, 0x68, 0xb8, 0x46, 0x63, 0x30, 0x7c, 0xa3, 0x72, + 0xe7, 0xfe, 0x66, 0x7e, 0x08, 0x8d, 0x42, 0xf6, 0x81, 0xfa, 0xde, 0x66, 0x5e, 0x28, 0xe8, 0x30, + 0x99, 0x08, 0x4c, 0x94, 0x07, 0xf1, 0x31, 0x69, 0x07, 0xf2, 0x7a, 0x9f, 0x68, 0x0d, 0x86, 0x7d, + 0xeb, 0x64, 0x4e, 0x51, 0x35, 0x7d, 0xd4, 0xd5, 0xcc, 0x55, 0xa1, 0xb0, 0x01, 0x73, 0xbd, 0x63, + 0xb3, 0x07, 0xcf, 0x33, 0x71, 0x9e, 0x63, 0x71, 0x2a, 0xdf, 0x0d, 0xa9, 0xa4, 0xe3, 0xac, 0x07, + 0x95, 0xed, 0x38, 0x95, 0xe7, 0x69, 0xdf, 0xc7, 0xfc, 0x57, 0x3f, 0x17, 0x8e, 0x2a, 0xbf, 0x17, + 0xa0, 0xb1, 0x3c, 0x5b, 0xc1, 0x55, 0x9d, 0x61, 0xba, 0x87, 0x8f, 0xc7, 0xc9, 0xf2, 0xd6, 0x96, + 0xc9, 0xc2, 0x90, 0x6d, 0xe3, 0x1a, 0x35, 0xac, 0x96, 0x5e, 0xf3, 0x82, 0x03, 0x07, 0x63, 0x18, + 0x66, 0x6d, 0x8b, 0x60, 0x46, 0x71, 0x8d, 0xee, 0x13, 0x1b, 0x1b, 0x9a, 0xd9, 0xc6, 0x7b, 0x44, + 0x63, 0xae, 0x4d, 0x1c, 0x8f, 0xd6, 0x4e, 0x18, 0xbb, 0x7f, 0x12, 0xf8, 0x0c, 0xb2, 0xfc, 0x3e, + 0x5c, 0xbc, 0xa1, 0x9b, 0x75, 0x4c, 0x5d, 0x86, 0x0d, 0x6a, 0x13, 0xac, 0x55, 0xbd, 0xcf, 0xae, + 0xa1, 0x4b, 0x6e, 0x32, 0x66, 0x39, 0xab, 0x8a, 0xd2, 0xd0, 0x59, 0xd3, 0xad, 0xca, 0x35, 0x6a, + 0x28, 0x9e, 0xba, 0x25, 0x52, 0xa3, 0x4e, 0xdb, 0x61, 0x24, 0x58, 0x06, 0xda, 0xaf, 0x4d, 0x86, + 0x45, 0x93, 0xab, 0x56, 0xfc, 0xc5, 0x28, 0xcc, 0xa7, 0x69, 0xaa, 0x41, 0x60, 0xa3, 0x6b, 0xb0, + 0xc0, 0xdb, 0x52, 0x94, 0x32, 0xf1, 0x19, 0x46, 0xc0, 0xa2, 0x94, 0x51, 0xe7, 0x3c, 0x80, 0x10, + 0xe1, 0xc6, 0xf1, 0x3c, 0xf3, 0x26, 0x14, 0x92, 0xa8, 0x89, 0xe9, 0xc6, 0x1b, 0xab, 0x04, 0xf5, + 0x5c, 0x1c, 0x77, 0x23, 0x36, 0xe9, 0x74, 0xf1, 0x8d, 0x37, 0x0f, 0x11, 0x8b, 0x92, 0x98, 0xe4, + 0xbb, 0x75, 0xdc, 0x47, 0xba, 0xf8, 0x26, 0x26, 0xa2, 0x2c, 0x16, 0xa5, 0x6c, 0x92, 0xef, 0x7b, + 0xb1, 0x26, 0xd4, 0x8b, 0x6f, 0xd4, 0xd7, 0x86, 0xb1, 0x28, 0x0d, 0x77, 0xf1, 0x0d, 0x5b, 0xdc, + 0x5b, 0x70, 0x3e, 0x65, 0xaa, 0x44, 0xe7, 0xcc, 0x61, 0x51, 0xca, 0xa9, 0xf3, 0x09, 0x63, 0xc5, + 0x9b, 0x68, 0x6f, 0xf4, 0xd8, 0x9c, 0x26, 0x4a, 0x23, 0x3d, 0xd0, 0x43, 0xee, 0x5f, 0x83, 0xf9, + 0x24, 0x7a, 0x6c, 0xf2, 0x1a, 0xc5, 0xa2, 0x34, 0xaa, 0x9e, 0x8d, 0xe3, 0xae, 0x45, 0x53, 0x58, + 0x97, 0xb9, 0x12, 0xbd, 0x68, 0x8c, 0xf7, 0xde, 0x84, 0xb9, 0x92, 0xfd, 0x37, 0x65, 0xae, 0xf8, + 0xb4, 0x06, 0x58, 0x94, 0x26, 0x92, 0xe6, 0x5a, 0x3b, 0x9e, 0xdc, 0x7a, 0xba, 0x29, 0x52, 0x77, + 0x1c, 0x8b, 0xd2, 0x64, 0xb7, 0x9b, 0x42, 0x6d, 0x49, 0x5a, 0xdb, 0x58, 0x25, 0x9f, 0x38, 0x45, + 0x25, 0x4f, 0xd8, 0xe6, 0x78, 0x4c, 0xba, 0x0e, 0x8b, 0x29, 0xdb, 0x24, 0x9d, 0x32, 0x89, 0x45, + 0x69, 0x5a, 0x5d, 0x48, 0x58, 0x27, 0x31, 0x40, 0xf5, 0x21, 0x10, 0x05, 0xc5, 0x14, 0x16, 0xa5, + 0x7c, 0x2f, 0x02, 0x7d, 0x83, 0x39, 0x31, 0x68, 0x4d, 0x63, 0x51, 0x9a, 0x49, 0x79, 0x27, 0x66, + 0xa5, 0x9e, 0xc8, 0xb1, 0x51, 0x4e, 0x94, 0x50, 0x37, 0x72, 0xc0, 0xb9, 0x58, 0x80, 0xec, 0x1a, + 0xad, 0xb7, 0x7b, 0xb5, 0xb1, 0xe2, 0x23, 0x98, 0x0e, 0xa6, 0xce, 0x6f, 0xe8, 0xac, 0xc9, 0xc1, + 0xa6, 0x20, 0x13, 0x5e, 0xcc, 0xd4, 0x8c, 0xee, 0x15, 0x8e, 0x6c, 0x5d, 0x63, 0x5a, 0x50, 0x7f, + 0x5f, 0x3e, 0xd1, 0x1b, 0x1e, 0x11, 0x95, 0xa3, 0x2c, 0x63, 0x18, 0x8f, 0xf9, 0xc6, 0xeb, 0x58, + 0x0f, 0x37, 0xd5, 0xbb, 0xf9, 0x21, 0x34, 0x02, 0xe2, 0xdd, 0xed, 0xcd, 0xbc, 0x50, 0xfe, 0xcf, + 0x02, 0x9c, 0x4b, 0x97, 0xac, 0xfb, 0xc4, 0xde, 0xd7, 0x6b, 0x04, 0x7d, 0x21, 0x42, 0x6e, 0xdd, + 0xf6, 0xd4, 0x41, 0x97, 0x07, 0xae, 0xfa, 0x85, 0xc1, 0x51, 0x8a, 0xff, 0xcc, 0xfc, 0xe0, 0xcf, + 0xff, 0xf8, 0x79, 0xe6, 0x6f, 0x99, 0xe2, 0x5f, 0x33, 0xca, 0xfe, 0xe5, 0xf0, 0xd5, 0xa1, 0xd7, + 0x9b, 0x83, 0x72, 0x18, 0x2b, 0x9f, 0x1d, 0xe5, 0x30, 0x5e, 0x11, 0x3b, 0xca, 0x61, 0xcc, 0x3b, + 0x1d, 0xc5, 0x21, 0x96, 0x66, 0x6b, 0x8c, 0xda, 0xca, 0xa1, 0x9b, 0x38, 0x38, 0x8c, 0x45, 0x40, + 0x47, 0x39, 0x4c, 0x04, 0x54, 0xb8, 0x8e, 0x9d, 0x1f, 0xd7, 0x81, 0x8e, 0x72, 0x18, 0xcf, 0xed, + 0xb7, 0x1c, 0x66, 0x5b, 0x36, 0xd9, 0xd3, 0x0f, 0x94, 0xe5, 0x8e, 0xcf, 0x24, 0x86, 0xe6, 0xa4, + 0xe9, 0x38, 0x69, 0x46, 0x4e, 0x0a, 0x21, 0x29, 0x64, 0xbf, 0x21, 0xae, 0xa3, 0x1c, 0x1e, 0xe7, + 0x6a, 0x47, 0x39, 0x4c, 0x5d, 0x7a, 0x3c, 0xcc, 0x9e, 0xb7, 0xa1, 0x0e, 0xfa, 0x95, 0x00, 0xe0, + 0x3b, 0x96, 0x07, 0xdc, 0x97, 0xe3, 0xdc, 0x65, 0xee, 0xdb, 0x8b, 0xc5, 0xa5, 0x13, 0x3c, 0xbb, + 0x2a, 0x2c, 0xa3, 0xef, 0x40, 0xee, 0x0e, 0xa5, 0x8f, 0x5d, 0x0b, 0x4d, 0xcb, 0x8e, 0x5b, 0x2d, + 0xcb, 0x5b, 0xf5, 0x20, 0x4b, 0x4e, 0xc3, 0x59, 0xe6, 0x9c, 0x25, 0xf4, 0x95, 0x13, 0x63, 0xca, + 0x1b, 0x16, 0x3a, 0xe8, 0x47, 0x02, 0xe4, 0xde, 0xb3, 0xea, 0xa7, 0x8c, 0xfb, 0x3e, 0x77, 0xa6, + 0xe2, 0x65, 0x2e, 0xc5, 0x6b, 0x85, 0x67, 0x94, 0xc2, 0x33, 0xc3, 0xcf, 0x04, 0xc8, 0x6d, 0x90, + 0x16, 0x61, 0xa4, 0xdb, 0x0e, 0xfd, 0xd8, 0x3c, 0x3a, 0xaa, 0xbc, 0x56, 0x7d, 0x15, 0xa6, 0x00, + 0x2a, 0x96, 0x7e, 0x9b, 0xb4, 0x2b, 0x2e, 0x6b, 0xa2, 0x21, 0x38, 0x07, 0xb9, 0xbb, 0xde, 0x67, + 0x19, 0x4d, 0x42, 0xd6, 0x26, 0x5a, 0x1d, 0x86, 0x9f, 0xd8, 0x3a, 0x23, 0xbe, 0x69, 0x96, 0x9f, + 0xd5, 0x34, 0x7f, 0x17, 0x60, 0xf4, 0x26, 0x61, 0xf7, 0x5c, 0x62, 0xb7, 0xff, 0x9f, 0xc6, 0xf9, + 0x54, 0x38, 0xaa, 0x3c, 0x28, 0x6e, 0xc3, 0x62, 0xaf, 0x31, 0x2d, 0x62, 0x38, 0xe0, 0x78, 0xf6, + 0x81, 0x50, 0x1d, 0xe2, 0xfa, 0xc9, 0xe8, 0xf5, 0x93, 0xf4, 0xfb, 0x96, 0xc7, 0x20, 0xd4, 0xf2, + 0xd3, 0x61, 0xc8, 0xdf, 0x24, 0x2c, 0xac, 0xe5, 0x3e, 0xf3, 0x6b, 0x03, 0x6b, 0x1b, 0xe2, 0x17, + 0x4e, 0x8f, 0x5a, 0xfc, 0x24, 0xcb, 0x35, 0xf8, 0xaf, 0x88, 0xfe, 0x2d, 0x9e, 0xa0, 0x43, 0xd4, + 0x9c, 0x82, 0x52, 0xd0, 0x6b, 0xd0, 0xec, 0xa4, 0xcf, 0x52, 0x75, 0xb3, 0xef, 0xa4, 0xd8, 0x75, + 0xe6, 0x3e, 0xed, 0x30, 0x59, 0xcf, 0x9e, 0x32, 0xcb, 0xf5, 0x3e, 0xed, 0x8b, 0x9b, 0xa8, 0xc0, + 0xfd, 0x67, 0xad, 0x6e, 0xbc, 0xe3, 0x59, 0xaa, 0xa7, 0x22, 0x7d, 0x19, 0x76, 0x17, 0xd8, 0x3e, + 0x03, 0x4c, 0x9f, 0xe3, 0xbe, 0x7a, 0x3a, 0x4f, 0xe3, 0x9a, 0x68, 0x00, 0xe8, 0x73, 0x11, 0xb2, + 0x9b, 0xb5, 0x26, 0x45, 0xfd, 0x1e, 0xc6, 0x1c, 0xb7, 0x2a, 0xfb, 0xa3, 0x64, 0x58, 0x1c, 0x9e, + 0x19, 0xb2, 0xf8, 0xaf, 0xcc, 0x51, 0xe5, 0xfb, 0x19, 0x98, 0x20, 0xb5, 0x26, 0xc5, 0x8e, 0xdf, + 0xf8, 0x61, 0x94, 0xaf, 0x6c, 0xab, 0x86, 0x66, 0xee, 0xbb, 0x86, 0xa1, 0xd9, 0xed, 0x55, 0xbc, + 0x19, 0x6c, 0x15, 0xf2, 0x1b, 0xc4, 0xa9, 0xd9, 0x3a, 0x7f, 0xcd, 0xe6, 0xbb, 0xc5, 0x0d, 0x40, + 0xc9, 0xb4, 0xe5, 0xd2, 0x0e, 0x98, 0xac, 0xef, 0x5c, 0x07, 0xf1, 0xab, 0x97, 0xae, 0xa0, 0xab, + 0xf0, 0x86, 0x4a, 0x98, 0x6b, 0x9b, 0xa4, 0x8e, 0x9f, 0x34, 0x89, 0x89, 0x59, 0x93, 0x60, 0x9b, + 0x38, 0xd4, 0xb5, 0x6b, 0x04, 0xeb, 0x0e, 0x66, 0xc4, 0xb0, 0xa8, 0xad, 0xd9, 0x7a, 0xab, 0x8d, + 0x5d, 0x53, 0xdb, 0xd7, 0xf4, 0x96, 0x56, 0x6d, 0x11, 0xf9, 0x9d, 0x37, 0x41, 0x5c, 0xb9, 0xb4, + 0x82, 0x56, 0x60, 0xf9, 0x29, 0x04, 0xea, 0x94, 0x38, 0xd8, 0xa4, 0x0c, 0x93, 0x03, 0xdd, 0x61, + 0x32, 0xca, 0x41, 0xf6, 0x97, 0x19, 0x41, 0xe4, 0x49, 0xf6, 0xe1, 0xc9, 0x65, 0xc2, 0x33, 0x8c, + 0x72, 0xe8, 0x3b, 0xe6, 0xe1, 0x42, 0x31, 0xaf, 0xec, 0x97, 0x23, 0x78, 0xef, 0x6c, 0xd5, 0xbf, + 0xe4, 0x3e, 0x44, 0xa8, 0xeb, 0x08, 0xfd, 0x56, 0x80, 0x89, 0x0d, 0x42, 0x2c, 0xfe, 0x7e, 0xe8, + 0x6d, 0x7c, 0x39, 0x7d, 0xf7, 0x3a, 0xd7, 0xed, 0x5a, 0x71, 0xe5, 0xc4, 0x12, 0x9f, 0xf8, 0xbd, + 0x41, 0xf6, 0xc6, 0x53, 0xde, 0x85, 0x2a, 0x00, 0xdb, 0x74, 0x4d, 0x37, 0xeb, 0xba, 0xd9, 0x70, + 0xd0, 0x42, 0x57, 0x05, 0xdf, 0x08, 0x7e, 0x8a, 0xe9, 0x5b, 0xdc, 0x87, 0xd0, 0xfb, 0x30, 0xf2, + 0x40, 0x37, 0x08, 0x75, 0x19, 0xea, 0x03, 0xd4, 0x17, 0xf9, 0x3c, 0x17, 0xff, 0x2c, 0x9a, 0x8d, + 0xdb, 0x93, 0x05, 0xc4, 0x9a, 0x90, 0xdf, 0xb4, 0x6d, 0x6a, 0x7b, 0xb3, 0xf3, 0x06, 0x61, 0x9a, + 0xde, 0x72, 0x06, 0x66, 0x70, 0x91, 0x33, 0x78, 0x11, 0x2d, 0x26, 0x1c, 0xe6, 0x51, 0x7d, 0xa2, + 0xb3, 0x66, 0x3d, 0xa0, 0xfa, 0x63, 0x01, 0xd0, 0x4d, 0xc2, 0xd2, 0xb3, 0xfa, 0xa5, 0x13, 0xfd, + 0x91, 0xc2, 0xe8, 0x2b, 0xc6, 0x2b, 0x5c, 0x8c, 0x0b, 0xc5, 0x85, 0xb8, 0x18, 0x9e, 0x04, 0x55, + 0x5a, 0x6f, 0x2b, 0x87, 0xde, 0x44, 0xc0, 0x67, 0x7a, 0xf4, 0x43, 0x01, 0x66, 0x76, 0xa8, 0xc3, + 0x3c, 0x8a, 0x1c, 0x95, 0x0b, 0xf2, 0x6c, 0xd7, 0x82, 0xbe, 0xdc, 0x15, 0xce, 0xfd, 0xd5, 0xe2, + 0xc5, 0x38, 0x77, 0x8b, 0x3a, 0xcc, 0x93, 0x80, 0xbf, 0x08, 0xfb, 0x62, 0x84, 0x41, 0x51, 0xf8, + 0x9d, 0x70, 0x54, 0xf9, 0x4c, 0x40, 0x7b, 0x7d, 0xee, 0x0e, 0xb8, 0x1e, 0x2b, 0x12, 0xa5, 0x12, + 0x7e, 0xd2, 0xd4, 0x6b, 0x4d, 0xec, 0x34, 0xa9, 0xdb, 0xaa, 0xf3, 0xf4, 0xab, 0x12, 0xec, 0x3a, + 0xa4, 0x8e, 0x75, 0x13, 0x5b, 0x2d, 0xad, 0x46, 0x30, 0xdd, 0xe3, 0x89, 0x5a, 0xa7, 0x35, 0xd7, + 0x20, 0xa6, 0xff, 0x03, 0x19, 0xae, 0x51, 0xc3, 0x5b, 0x5c, 0x28, 0xdc, 0x83, 0xa5, 0x5e, 0x93, + 0x81, 0x97, 0x46, 0xe1, 0x6d, 0x65, 0xc0, 0x7a, 0x53, 0xfe, 0x18, 0xce, 0xd4, 0x34, 0x83, 0xb4, + 0xd6, 0x35, 0x87, 0x04, 0x34, 0xbc, 0xd1, 0x1a, 0xa9, 0x30, 0xec, 0x3f, 0x6b, 0x0f, 0x1a, 0x48, + 0x0b, 0xdc, 0x86, 0xb3, 0x68, 0x26, 0x11, 0x48, 0xde, 0x51, 0xf9, 0x23, 0x58, 0xac, 0x98, 0x94, + 0x35, 0x89, 0x1d, 0x70, 0xf2, 0x9c, 0x17, 0x4b, 0xaa, 0xb7, 0x13, 0x29, 0x36, 0x28, 0xe3, 0xa1, + 0xb5, 0xcf, 0x46, 0x8e, 0x2a, 0xbf, 0x19, 0x41, 0x7f, 0x11, 0x60, 0xb6, 0x82, 0xd7, 0xfc, 0x07, + 0xb5, 0x58, 0x09, 0xf8, 0x00, 0xce, 0x34, 0xd4, 0x9d, 0xf5, 0xd2, 0x4d, 0x5f, 0x75, 0x6c, 0xd9, + 0xf4, 0x63, 0x52, 0x63, 0x83, 0x9a, 0xac, 0x90, 0x37, 0xa9, 0x49, 0xbe, 0x1e, 0xa8, 0xe6, 0x41, + 0x2f, 0x7f, 0x04, 0x67, 0xd6, 0xee, 0x6f, 0xe0, 0x2b, 0xa5, 0xf5, 0x96, 0xe6, 0x3a, 0x04, 0xdf, + 0xd1, 0x6b, 0xc4, 0x74, 0x08, 0xba, 0x31, 0x18, 0x65, 0xa5, 0xda, 0xa2, 0x55, 0xc5, 0xd0, 0x1c, + 0x46, 0x6c, 0xe5, 0xce, 0xd6, 0xfa, 0xe6, 0xf6, 0xfd, 0x4d, 0x99, 0x1d, 0xb0, 0xb2, 0x78, 0x59, + 0xbe, 0xb4, 0x2c, 0x0a, 0x99, 0x6c, 0x39, 0xaf, 0x59, 0xfe, 0x33, 0xa0, 0x4e, 0x4d, 0xe5, 0x63, + 0x87, 0x9a, 0xe5, 0xb9, 0xf8, 0xce, 0x41, 0x69, 0x8f, 0xd2, 0x92, 0xa1, 0x1b, 0x64, 0xb5, 0x0b, + 0x72, 0xb5, 0x0f, 0xa4, 0xba, 0xe3, 0x75, 0x8c, 0x2b, 0x68, 0x0b, 0x6e, 0x76, 0x77, 0x0c, 0xd7, + 0x21, 0xf6, 0x71, 0xb7, 0x68, 0x6a, 0xfb, 0x04, 0x5b, 0xc4, 0x36, 0x74, 0xc7, 0xf1, 0x02, 0x93, + 0x51, 0xac, 0xd5, 0x6a, 0xc4, 0x71, 0x12, 0xdd, 0x45, 0x56, 0x9f, 0xa3, 0x07, 0x8d, 0xa8, 0xb7, + 0x40, 0x5c, 0xb9, 0x7c, 0x15, 0x55, 0x60, 0x72, 0xeb, 0x15, 0x03, 0x6b, 0x98, 0x11, 0xcd, 0xa2, + 0x4c, 0x46, 0x97, 0x40, 0x2e, 0x0c, 0xf4, 0x08, 0xf3, 0xf0, 0x27, 0x19, 0x98, 0x86, 0xb1, 0x35, + 0xcd, 0xd1, 0x6b, 0x7c, 0xfe, 0xcf, 0x8c, 0x0a, 0xf0, 0x42, 0xe2, 0x46, 0x30, 0x3d, 0x9a, 0x29, + 0x8c, 0x7d, 0x50, 0xaa, 0xec, 0x6c, 0x95, 0x6e, 0x93, 0x36, 0xce, 0xc0, 0x17, 0x42, 0x74, 0x43, + 0xf8, 0xa3, 0x30, 0x2a, 0x4a, 0xd9, 0xf2, 0x4b, 0xa1, 0x0f, 0x63, 0x0e, 0x57, 0xa8, 0xe6, 0xb2, + 0xa6, 0xe2, 0xfd, 0xa1, 0xb6, 0xfe, 0x6d, 0xb2, 0xba, 0xd4, 0x1f, 0x88, 0xd1, 0xc7, 0xc4, 0x5c, + 0xfb, 0x1e, 0x14, 0xfc, 0x0b, 0x07, 0x42, 0x37, 0x6d, 0xcd, 0x64, 0x0e, 0xf6, 0x16, 0x81, 0xf5, + 0x60, 0x31, 0xb8, 0x86, 0xa0, 0xd9, 0xe0, 0x90, 0xaf, 0xc2, 0xd3, 0x75, 0x18, 0xd6, 0xea, 0x86, + 0x6e, 0xa2, 0xd5, 0x04, 0xaa, 0x59, 0x4f, 0x80, 0x71, 0x67, 0x78, 0x60, 0xba, 0xc3, 0xbc, 0x4e, + 0xb4, 0x4f, 0xb0, 0x6e, 0xee, 0x51, 0xdb, 0xe0, 0xfe, 0xae, 0x2e, 0xc1, 0x64, 0xdc, 0x14, 0x43, + 0xe9, 0xab, 0x51, 0xf5, 0xd5, 0xbe, 0x97, 0xa3, 0x34, 0xa8, 0xbd, 0x05, 0xe7, 0xde, 0x3d, 0xae, + 0x3e, 0xf1, 0x9c, 0x1a, 0x34, 0x97, 0x1e, 0x8e, 0x45, 0x9e, 0xab, 0xe6, 0x78, 0x3e, 0x5f, 0xf9, + 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9f, 0xcc, 0xe3, 0x75, 0x21, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 1495eb269f1..61c1023786e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -7,6 +7,10 @@ "name": "gRPC-Gateway project", "url": "https://github.com/grpc-ecosystem/grpc-gateway", "email": "none@example.com" + }, + "license": { + "name": "BSD 3-Clause License", + "url": "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt" } }, "schemes": [ diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index a5a31210c02..fa72484e3a8 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{0, 0} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{7, 0} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 0} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 1} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{10, 2} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -210,7 +210,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{0} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -333,7 +333,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{1} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -450,7 +450,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{2} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -494,6 +494,7 @@ type Info struct { Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService" json:"terms_of_service,omitempty"` Contact *Contact `protobuf:"bytes,4,opt,name=contact" json:"contact,omitempty"` + License *License `protobuf:"bytes,5,opt,name=license" json:"license,omitempty"` Version string `protobuf:"bytes,6,opt,name=version" json:"version,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -504,7 +505,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{3} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -552,6 +553,13 @@ func (m *Info) GetContact() *Contact { return nil } +func (m *Info) GetLicense() *License { + if m != nil { + return m.License + } + return nil +} + func (m *Info) GetVersion() string { if m != nil { return m.Version @@ -577,7 +585,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{4} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -618,6 +626,58 @@ func (m *Contact) GetEmail() string { return "" } +// `License` is a representation of OpenAPI v2 specification's License object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject +// +type License struct { + // Required. The license name used for the API. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A URL to the license used for the API. + Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *License) Reset() { *m = License{} } +func (m *License) String() string { return proto.CompactTextString(m) } +func (*License) ProtoMessage() {} +func (*License) Descriptor() ([]byte, []int) { + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{5} +} +func (m *License) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_License.Unmarshal(m, b) +} +func (m *License) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_License.Marshal(b, m, deterministic) +} +func (dst *License) XXX_Merge(src proto.Message) { + xxx_messageInfo_License.Merge(dst, src) +} +func (m *License) XXX_Size() int { + return xxx_messageInfo_License.Size(m) +} +func (m *License) XXX_DiscardUnknown() { + xxx_messageInfo_License.DiscardUnknown(m) +} + +var xxx_messageInfo_License proto.InternalMessageInfo + +func (m *License) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *License) GetUrl() string { + if m != nil { + return m.Url + } + return "" +} + // `ExternalDocumentation` is a representation of OpenAPI v2 specification's // ExternalDocumentation object. // @@ -636,7 +696,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{5} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -690,7 +750,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{6} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -793,7 +853,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{7} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -972,7 +1032,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{8} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1026,7 +1086,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{9} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1104,7 +1164,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{10} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1206,7 +1266,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{11} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1251,7 +1311,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{11, 0} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1296,7 +1356,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_5363312922dcb572, []int{12} + return fileDescriptor_openapiv2_b1201f239ab2f555, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1331,6 +1391,7 @@ func init() { proto.RegisterType((*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Response") proto.RegisterType((*Info)(nil), "grpc.gateway.protoc_gen_swagger.options.Info") proto.RegisterType((*Contact)(nil), "grpc.gateway.protoc_gen_swagger.options.Contact") + proto.RegisterType((*License)(nil), "grpc.gateway.protoc_gen_swagger.options.License") proto.RegisterType((*ExternalDocumentation)(nil), "grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation") proto.RegisterType((*Schema)(nil), "grpc.gateway.protoc_gen_swagger.options.Schema") proto.RegisterType((*JSONSchema)(nil), "grpc.gateway.protoc_gen_swagger.options.JSONSchema") @@ -1351,119 +1412,120 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_5363312922dcb572) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_b1201f239ab2f555) } -var fileDescriptor_openapiv2_5363312922dcb572 = []byte{ - // 1753 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5f, 0x73, 0xdb, 0xc6, +var fileDescriptor_openapiv2_b1201f239ab2f555 = []byte{ + // 1773 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, 0x53, 0x8d, 0x3d, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0xa7, 0x1d, 0x4a, 0x62, 0x6c, 0xc0, 0x32, - 0xc9, 0x82, 0x54, 0x14, 0x77, 0x26, 0x83, 0x81, 0xc1, 0x23, 0x85, 0x18, 0x38, 0x20, 0xf8, 0x23, - 0x89, 0x7d, 0xeb, 0x4b, 0xdb, 0xe7, 0x4e, 0x5f, 0xfb, 0x31, 0xfa, 0xd6, 0x8f, 0xd1, 0x4f, 0xd2, - 0x7e, 0x80, 0x76, 0xee, 0x0f, 0x48, 0x50, 0x62, 0x32, 0x94, 0xff, 0xf4, 0x89, 0xb7, 0xbf, 0xfd, - 0x73, 0xbb, 0x77, 0xbb, 0x7b, 0x0b, 0xc2, 0xc3, 0x28, 0x0e, 0xd3, 0xd0, 0x7d, 0x3c, 0x23, 0xf4, - 0x71, 0x72, 0xe9, 0xcc, 0x66, 0x24, 0xde, 0x0f, 0xa3, 0xd4, 0x0b, 0x69, 0xb2, 0x1f, 0x46, 0x84, - 0x3a, 0x91, 0x77, 0x71, 0xd0, 0xe1, 0x42, 0xf8, 0x97, 0xb3, 0x38, 0x72, 0x3b, 0x33, 0x27, 0x25, - 0x97, 0xce, 0x5c, 0x60, 0xae, 0x3d, 0x23, 0xd4, 0x96, 0x8a, 0x1d, 0xa9, 0xb8, 0xf3, 0xc1, 0x2c, - 0x0c, 0x67, 0x3e, 0xd9, 0xe7, 0x22, 0x2f, 0xb3, 0xe9, 0xbe, 0x43, 0xa5, 0x7c, 0xfb, 0xbf, 0x55, - 0xa8, 0x8d, 0x84, 0x38, 0xd6, 0xa1, 0x26, 0x35, 0x75, 0x65, 0x57, 0xd9, 0xab, 0x5b, 0x39, 0x89, - 0xbb, 0xa0, 0x7a, 0x74, 0x1a, 0xea, 0xa5, 0x5d, 0x65, 0xaf, 0x71, 0xf0, 0xb8, 0xb3, 0xe1, 0xc6, - 0x1d, 0x83, 0x4e, 0x43, 0x8b, 0xab, 0x62, 0x0c, 0xea, 0x79, 0x98, 0xa4, 0x7a, 0x99, 0x5b, 0xe6, - 0x6b, 0xfc, 0x21, 0xd4, 0x5f, 0x3a, 0x09, 0xb1, 0x23, 0x27, 0x3d, 0xd7, 0x55, 0xce, 0xd0, 0x18, - 0x30, 0x74, 0xd2, 0x73, 0xfc, 0x0d, 0xd4, 0x12, 0xf7, 0x9c, 0x04, 0x24, 0xd1, 0x2b, 0xbb, 0xe5, - 0xbd, 0xd6, 0xc1, 0x6f, 0x36, 0xde, 0x56, 0x06, 0x94, 0xff, 0x8e, 0xb8, 0x19, 0x2b, 0x37, 0x87, - 0x77, 0x40, 0x73, 0x43, 0x9a, 0x64, 0xcc, 0x74, 0x75, 0xb7, 0xcc, 0x76, 0xcd, 0x69, 0xc6, 0x8b, - 0xe2, 0x70, 0x92, 0xb9, 0x24, 0xd1, 0x6b, 0x82, 0x97, 0xd3, 0xf8, 0x5b, 0xa8, 0xc7, 0x24, 0x89, - 0x42, 0x9a, 0x90, 0x44, 0x87, 0xdd, 0xf2, 0x5e, 0xe3, 0xe0, 0xb7, 0xb7, 0xf6, 0xc9, 0xca, 0x2d, - 0xf4, 0x68, 0x1a, 0xcf, 0xad, 0xa5, 0x45, 0x1c, 0xc2, 0x76, 0x42, 0xdc, 0x2c, 0xf6, 0xd2, 0xb9, - 0x3d, 0x21, 0x53, 0x8f, 0x7a, 0x5c, 0x53, 0x6f, 0xf0, 0x43, 0xff, 0xf5, 0xe6, 0x3b, 0x49, 0x23, - 0xc7, 0x4b, 0x1b, 0xd6, 0xdd, 0xe4, 0x26, 0x88, 0xbf, 0x01, 0x2d, 0x87, 0xf5, 0x2d, 0x1e, 0xce, - 0xed, 0x37, 0xb1, 0xc8, 0xf7, 0x99, 0x17, 0x93, 0x80, 0xd0, 0xd4, 0x5a, 0x58, 0xc3, 0x2e, 0x34, - 0xc9, 0x55, 0x4a, 0x62, 0xea, 0xf8, 0xf6, 0x24, 0x74, 0x13, 0xbd, 0xc5, 0x63, 0xd8, 0xfc, 0x06, - 0x7b, 0x52, 0xfb, 0x38, 0x74, 0x33, 0x66, 0xdb, 0x61, 0xb0, 0xb5, 0x45, 0x96, 0x70, 0xb2, 0x13, - 0x42, 0x6b, 0xf5, 0x30, 0x31, 0x82, 0xf2, 0x2b, 0x32, 0x97, 0xc9, 0xcb, 0x96, 0xf8, 0x09, 0x54, - 0x2e, 0x1c, 0x3f, 0x23, 0x32, 0x73, 0x3f, 0xdb, 0xd8, 0x81, 0xdc, 0xb2, 0x25, 0xf4, 0xbf, 0x2c, - 0x7d, 0xa1, 0xb4, 0x0f, 0xa1, 0xb9, 0x92, 0x51, 0xb8, 0x01, 0xb5, 0xd3, 0xfe, 0xb3, 0xfe, 0xe0, - 0xac, 0x8f, 0xde, 0xc3, 0x1a, 0xa8, 0x4f, 0xc7, 0xe3, 0x21, 0x52, 0x70, 0x1d, 0x2a, 0x6c, 0x35, - 0x42, 0x25, 0x5c, 0x85, 0xd2, 0xd9, 0x08, 0x95, 0x71, 0x0d, 0xca, 0x67, 0xa3, 0x11, 0x52, 0x4d, - 0x55, 0xd3, 0x50, 0xdd, 0x54, 0xb5, 0x3a, 0x02, 0x53, 0xd5, 0x9a, 0xa8, 0xd5, 0xfe, 0x73, 0x05, - 0xea, 0x83, 0x88, 0xc4, 0x3c, 0x44, 0x56, 0x26, 0xa9, 0x33, 0x4b, 0x74, 0x85, 0xe7, 0x1e, 0x5f, - 0xf3, 0xba, 0xcc, 0x82, 0xc0, 0x89, 0xe7, 0x3c, 0x0c, 0x56, 0x97, 0x82, 0xc4, 0xbb, 0xd0, 0x98, - 0x90, 0xc4, 0x8d, 0x3d, 0xee, 0xb5, 0xac, 0xad, 0x22, 0x74, 0xf3, 0x26, 0xd4, 0xb7, 0x7f, 0x13, - 0xf8, 0x63, 0xd8, 0x0a, 0xf3, 0x08, 0x6c, 0x6f, 0xa2, 0x57, 0x84, 0x1f, 0x0b, 0xcc, 0x98, 0xbc, - 0x76, 0xcd, 0xd9, 0xc5, 0x9a, 0xab, 0xf3, 0x24, 0xed, 0x6e, 0xec, 0xfb, 0xe2, 0x58, 0x7f, 0xa4, - 0xea, 0xf4, 0x65, 0x9b, 0x01, 0xbe, 0xf7, 0xa2, 0x4d, 0x3c, 0x00, 0x98, 0x90, 0x28, 0x26, 0xae, - 0x93, 0x92, 0x09, 0xaf, 0x42, 0xcd, 0x2a, 0x20, 0xef, 0xae, 0x7c, 0xfe, 0xef, 0x99, 0x2d, 0xb2, - 0xb2, 0xfd, 0x47, 0x05, 0xb4, 0x9c, 0x7b, 0x3d, 0xb5, 0x94, 0x9b, 0xa9, 0xf5, 0x04, 0xaa, 0xfc, - 0xa8, 0x1c, 0xe9, 0xc2, 0xfe, 0xe6, 0xd1, 0x73, 0x35, 0x4b, 0xaa, 0x9b, 0xaa, 0x56, 0xe6, 0x95, - 0xa1, 0xa2, 0x4a, 0xfb, 0x5f, 0x0a, 0xa8, 0xec, 0xd5, 0xc0, 0xdb, 0x50, 0x49, 0xbd, 0xd4, 0x27, - 0x72, 0x67, 0x41, 0x5c, 0xf7, 0xaa, 0x74, 0xd3, 0xab, 0x3d, 0x40, 0x29, 0x89, 0x83, 0xc4, 0x0e, - 0xa7, 0x76, 0x42, 0xe2, 0x0b, 0xcf, 0x25, 0xb2, 0x2e, 0x5a, 0x1c, 0x1f, 0x4c, 0x47, 0x02, 0xc5, - 0x26, 0xd4, 0xdc, 0x90, 0xa6, 0x8e, 0x9b, 0xca, 0xa2, 0xf8, 0x74, 0xe3, 0x00, 0x8e, 0x84, 0x9e, - 0x95, 0x1b, 0x60, 0x59, 0x74, 0x41, 0xe2, 0x84, 0xf9, 0x54, 0x15, 0x25, 0x2a, 0x49, 0x53, 0xd5, - 0x2a, 0xa8, 0xda, 0xee, 0x41, 0x4d, 0xea, 0xb0, 0x0a, 0xa7, 0x4e, 0x90, 0xc7, 0xc5, 0xd7, 0xec, - 0x7a, 0xb3, 0xd8, 0x97, 0xe1, 0xb0, 0x25, 0x0b, 0x9f, 0x04, 0x8e, 0xe7, 0x4b, 0xdf, 0x05, 0xd1, - 0x7e, 0x06, 0xf7, 0xd6, 0xd6, 0xe3, 0x06, 0xb7, 0x75, 0x63, 0x8b, 0xf6, 0x3f, 0x4b, 0x50, 0x15, - 0x37, 0x81, 0xc7, 0xd0, 0xf8, 0x2e, 0x09, 0xa9, 0x2d, 0xef, 0x53, 0xe1, 0xc7, 0xf1, 0xf9, 0xc6, - 0xc7, 0x61, 0x8e, 0x06, 0x7d, 0x79, 0xa7, 0xc0, 0xec, 0x48, 0xab, 0x9f, 0x40, 0x73, 0xe2, 0x31, - 0x0f, 0x02, 0x8f, 0x3a, 0x69, 0x18, 0xcb, 0xcd, 0x57, 0x41, 0x36, 0x04, 0xc4, 0xc4, 0x99, 0xd8, - 0x21, 0xf5, 0xe7, 0x3c, 0x5a, 0xcd, 0xd2, 0x18, 0x30, 0xa0, 0xfe, 0x9a, 0x87, 0xa4, 0xf2, 0x0e, - 0xda, 0x57, 0x07, 0x6a, 0xe4, 0xca, 0x09, 0x22, 0x9f, 0xf0, 0xcb, 0x6b, 0x1c, 0x6c, 0x77, 0xc4, - 0xc0, 0xd4, 0xc9, 0x07, 0xa6, 0x4e, 0x97, 0xce, 0xad, 0x5c, 0x48, 0x66, 0xea, 0x9f, 0x6a, 0x00, - 0xcb, 0xc0, 0xd9, 0xf9, 0xc6, 0x64, 0x2a, 0xaf, 0x8b, 0x2d, 0x97, 0x19, 0x5c, 0xf9, 0x91, 0x0c, - 0xae, 0xde, 0xbc, 0x29, 0x1d, 0x6a, 0x13, 0x32, 0x75, 0x32, 0x3f, 0xd5, 0x6b, 0x22, 0x97, 0x24, - 0x89, 0x7f, 0x06, 0x8d, 0x20, 0xf3, 0x53, 0x2f, 0xf2, 0x89, 0x1d, 0x4e, 0x75, 0xd8, 0x55, 0xf6, - 0x14, 0x0b, 0x72, 0x68, 0x30, 0x65, 0xaa, 0x81, 0x73, 0xe5, 0x05, 0x59, 0xc0, 0xfb, 0x95, 0x62, - 0xe5, 0x24, 0x7e, 0x04, 0x77, 0xc8, 0x95, 0xeb, 0x67, 0x89, 0x77, 0x41, 0xec, 0x5c, 0x66, 0x8b, - 0x9f, 0x36, 0x5a, 0x30, 0x9e, 0x4b, 0x61, 0x66, 0xc6, 0xa3, 0x5c, 0xa4, 0x29, 0xcd, 0x08, 0xf2, - 0x9a, 0x19, 0x29, 0xd3, 0xba, 0x6e, 0x46, 0x0a, 0xdf, 0x07, 0x08, 0x9c, 0x2b, 0xdb, 0x27, 0x74, - 0x96, 0x9e, 0xeb, 0xef, 0xef, 0x2a, 0x7b, 0xaa, 0x55, 0x0f, 0x9c, 0xab, 0x13, 0x0e, 0x70, 0xb6, - 0x47, 0x73, 0x36, 0x92, 0x6c, 0x8f, 0x4a, 0xb6, 0x0e, 0xb5, 0xc8, 0x49, 0xd9, 0x35, 0xe9, 0x77, - 0xc4, 0x31, 0x48, 0x92, 0x65, 0x0c, 0xb3, 0xeb, 0xa5, 0x24, 0x48, 0xf4, 0x6d, 0xae, 0xa7, 0x05, - 0xce, 0x95, 0xc1, 0x68, 0xce, 0xf4, 0xa8, 0x64, 0xde, 0x93, 0x4c, 0x8f, 0x0a, 0xe6, 0xc7, 0xb0, - 0x95, 0x51, 0xef, 0xfb, 0x8c, 0x48, 0xfe, 0x4f, 0xb8, 0xe7, 0x0d, 0x81, 0x09, 0x91, 0x5f, 0x40, - 0x8b, 0x19, 0x8f, 0x62, 0xf6, 0x7a, 0xa5, 0x1e, 0x49, 0x74, 0x9d, 0x1b, 0x69, 0x06, 0xce, 0xd5, - 0x70, 0x01, 0x72, 0x31, 0x8f, 0x16, 0xc5, 0x3e, 0x90, 0x62, 0x1e, 0x2d, 0x88, 0xed, 0x80, 0x16, - 0x8b, 0x16, 0x3f, 0xd1, 0x77, 0xc4, 0xd3, 0x96, 0xd3, 0x2c, 0x3f, 0x9c, 0x38, 0x76, 0xe6, 0x7a, - 0x9b, 0x33, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, 0x39, 0x9f, 0x79, 0x8d, 0xd7, - 0xa8, 0xc1, 0xc2, 0x72, 0xe4, 0xb1, 0x84, 0x1d, 0xcf, 0x23, 0x92, 0x58, 0xdc, 0x6c, 0xfb, 0x12, - 0xee, 0xad, 0x65, 0xaf, 0xce, 0x32, 0x75, 0xa8, 0x74, 0x2d, 0xab, 0xfb, 0x02, 0x29, 0x0c, 0x3f, - 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, 0x7b, 0x4f, 0x7a, 0x16, 0x2a, - 0xb3, 0x81, 0xa7, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, 0x9f, 0x3e, 0x3f, 0xec, 0x59, - 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, 0x1e, 0x8d, 0x2d, 0xa3, 0xff, - 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, 0x8b, 0x02, 0xba, 0x36, 0x0a, - 0x61, 0x74, 0xd7, 0x54, 0xb5, 0xbb, 0x68, 0xdb, 0x54, 0xb5, 0x9f, 0x22, 0xdd, 0x54, 0xb5, 0x0f, - 0xd1, 0x47, 0xa6, 0xaa, 0x7d, 0x84, 0xee, 0x9b, 0xaa, 0x76, 0x1f, 0x3d, 0x30, 0x55, 0xed, 0x01, - 0x6a, 0x9b, 0xaa, 0xf6, 0x09, 0x7a, 0x68, 0xaa, 0xda, 0x43, 0xf4, 0xc8, 0x54, 0xb5, 0x47, 0xa8, - 0xd3, 0xfe, 0xab, 0x02, 0xe5, 0xb1, 0x33, 0xdb, 0xe0, 0x6d, 0xb8, 0xd1, 0x4d, 0xca, 0x6f, 0xbf, - 0x9b, 0x88, 0x40, 0xdb, 0xff, 0x51, 0xe0, 0xee, 0x9a, 0x41, 0x1c, 0x4f, 0x0b, 0x43, 0x83, 0xc2, - 0x87, 0x06, 0xf3, 0x4d, 0x06, 0xfb, 0x05, 0x26, 0xe6, 0x9a, 0xe5, 0x08, 0x91, 0x42, 0x73, 0x85, - 0xb5, 0x66, 0x82, 0x78, 0xbe, 0x3a, 0x41, 0xfc, 0xea, 0xd6, 0x7e, 0xc8, 0xef, 0xaa, 0xc2, 0x84, - 0xfc, 0x8f, 0x0a, 0xb4, 0x56, 0xb9, 0x78, 0x28, 0xf3, 0x99, 0x6d, 0xdc, 0x7a, 0x8d, 0x09, 0x49, - 0x98, 0xe9, 0xb0, 0x24, 0x15, 0x29, 0xbc, 0xc1, 0x3d, 0xe7, 0x4f, 0x6c, 0xb9, 0xf0, 0xc4, 0x9a, - 0x50, 0xf2, 0x28, 0x7f, 0xe8, 0x5b, 0x07, 0x5f, 0xbe, 0xae, 0x17, 0x06, 0xb5, 0x4a, 0x1e, 0x65, - 0x31, 0x4d, 0xfd, 0xf0, 0x92, 0x37, 0xf6, 0x37, 0x88, 0xe9, 0x2b, 0x3f, 0xbc, 0xb4, 0xb8, 0x25, - 0xd6, 0x57, 0x9d, 0x2c, 0x3d, 0x0f, 0x63, 0xef, 0x0f, 0x62, 0x8a, 0x66, 0x6f, 0xb5, 0x78, 0x1b, - 0xd0, 0x0a, 0xe3, 0x34, 0xf6, 0x59, 0x8b, 0x4b, 0xc3, 0x57, 0x44, 0x08, 0x89, 0x27, 0x42, 0xe3, - 0x00, 0x63, 0xf2, 0xa9, 0x2c, 0x8c, 0x48, 0xa2, 0x6b, 0xb7, 0x9e, 0xca, 0x98, 0x9a, 0x25, 0xd5, - 0xdb, 0xcf, 0x40, 0x65, 0x87, 0x8e, 0x11, 0x6c, 0x8d, 0x5f, 0x0c, 0x7b, 0xb6, 0xd1, 0xff, 0xba, - 0x7b, 0x62, 0x1c, 0xa3, 0xf7, 0x70, 0x0b, 0x80, 0x23, 0x87, 0xdd, 0x91, 0x71, 0x84, 0x94, 0x85, - 0x44, 0x77, 0x68, 0xd8, 0xcf, 0x7a, 0x2f, 0x50, 0x09, 0xbf, 0x0f, 0x0d, 0x8e, 0x0c, 0xba, 0xa7, - 0xe3, 0xa7, 0x07, 0xa8, 0xdc, 0xfe, 0x0c, 0x4a, 0x06, 0x65, 0x8a, 0x46, 0xbf, 0x60, 0x68, 0x0b, - 0x34, 0xa3, 0x6f, 0xff, 0xee, 0xb4, 0x67, 0xb1, 0x4e, 0xd3, 0x84, 0xba, 0xd1, 0xb7, 0x9f, 0xf6, - 0xba, 0xc7, 0x3d, 0x0b, 0x95, 0xda, 0xdf, 0x81, 0xca, 0x0e, 0x88, 0x59, 0xff, 0xea, 0x64, 0x70, - 0x56, 0x50, 0xbb, 0x03, 0x4d, 0x81, 0x3c, 0x1f, 0x9e, 0x18, 0x47, 0xc6, 0x18, 0x29, 0x0b, 0x68, - 0xd8, 0x1d, 0x8d, 0xce, 0x06, 0xd6, 0x31, 0x2a, 0xe1, 0x6d, 0x40, 0x1c, 0xea, 0x0e, 0x99, 0x54, - 0x77, 0x6c, 0x0c, 0xfa, 0xa8, 0xbc, 0x44, 0x8f, 0x8e, 0x7a, 0xa3, 0x91, 0x7d, 0x34, 0x38, 0xee, - 0x21, 0xb5, 0xfd, 0xef, 0xd2, 0xb2, 0x5a, 0x0b, 0x23, 0x39, 0xfe, 0x8b, 0x52, 0xf8, 0x26, 0x8f, - 0x97, 0x0c, 0x59, 0xba, 0xa7, 0x6f, 0x32, 0xef, 0xaf, 0xc3, 0x44, 0x15, 0x2f, 0x3e, 0xd6, 0x0b, - 0x9c, 0x9d, 0x4f, 0x41, 0x5f, 0xa3, 0xf0, 0x35, 0x2b, 0x3d, 0xf6, 0x92, 0xf0, 0x4b, 0x93, 0x5f, - 0x8d, 0x82, 0xd8, 0xf9, 0xbb, 0xb2, 0x56, 0xe5, 0x87, 0xda, 0xc1, 0xab, 0xd5, 0x76, 0xf0, 0xd6, - 0x63, 0xe3, 0xae, 0x16, 0x9b, 0xc5, 0xdf, 0x14, 0x36, 0x7f, 0xb2, 0x5c, 0xc3, 0xc3, 0x62, 0x00, - 0x8d, 0xdb, 0xd4, 0x27, 0xd7, 0x17, 0x3f, 0xe2, 0xf0, 0x64, 0xf0, 0x5f, 0x00, 0x2c, 0xc1, 0x35, - 0xd1, 0x6e, 0x17, 0xa3, 0xad, 0x17, 0xdc, 0x3a, 0x3c, 0xfa, 0x7d, 0x77, 0xe6, 0xa5, 0xe7, 0xd9, - 0xcb, 0x8e, 0x1b, 0x06, 0xfb, 0xcc, 0x91, 0xc7, 0xc4, 0x0d, 0x93, 0x79, 0x92, 0x12, 0x49, 0x4a, - 0xbf, 0xf6, 0x7f, 0xf8, 0xaf, 0xba, 0x97, 0x55, 0xce, 0xfb, 0xfc, 0x7f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xab, 0x81, 0x5a, 0xfc, 0xcf, 0x13, 0x00, 0x00, + 0xc9, 0x82, 0x54, 0x14, 0x77, 0x26, 0x83, 0x81, 0xc1, 0x23, 0x85, 0x18, 0x38, 0x20, 0xf8, 0x90, + 0xc4, 0xbe, 0xf5, 0xa5, 0xed, 0x73, 0xa7, 0x4f, 0x9d, 0xe9, 0x9f, 0xd1, 0xb7, 0xfe, 0x55, 0xed, + 0x1f, 0xd0, 0xce, 0x7d, 0x80, 0x04, 0x25, 0x26, 0x43, 0xf9, 0xa3, 0x4f, 0xbc, 0xfd, 0xfa, 0xdd, + 0xee, 0xde, 0xee, 0xdd, 0x82, 0xf0, 0x30, 0x8a, 0xc3, 0x34, 0x74, 0x1f, 0xcf, 0x08, 0x7d, 0x9c, + 0x5c, 0x3a, 0xb3, 0x19, 0x89, 0xf7, 0xc3, 0x28, 0xf5, 0x42, 0x9a, 0xec, 0x87, 0x11, 0xa1, 0x4e, + 0xe4, 0x5d, 0x1c, 0x74, 0xb8, 0x12, 0xfe, 0xe5, 0x2c, 0x8e, 0xdc, 0xce, 0xcc, 0x49, 0xc9, 0xa5, + 0x33, 0x17, 0x3c, 0xd7, 0x9e, 0x11, 0x6a, 0x4b, 0xc3, 0x8e, 0x34, 0xdc, 0xf9, 0x60, 0x16, 0x86, + 0x33, 0x9f, 0xec, 0x73, 0x95, 0x97, 0xd9, 0x74, 0xdf, 0xa1, 0x52, 0xbf, 0xfd, 0xdf, 0x2a, 0xd4, + 0x46, 0x42, 0x1d, 0xeb, 0x50, 0x93, 0x96, 0xba, 0xb2, 0xab, 0xec, 0xd5, 0xad, 0x9c, 0xc4, 0x5d, + 0x50, 0x3d, 0x3a, 0x0d, 0xf5, 0xd2, 0xae, 0xb2, 0xd7, 0x38, 0x78, 0xdc, 0xd9, 0x70, 0xe3, 0x8e, + 0x41, 0xa7, 0xa1, 0xc5, 0x4d, 0x31, 0x06, 0xf5, 0x3c, 0x4c, 0x52, 0xbd, 0xcc, 0x91, 0xf9, 0x1a, + 0x7f, 0x08, 0xf5, 0x97, 0x4e, 0x42, 0xec, 0xc8, 0x49, 0xcf, 0x75, 0x95, 0x0b, 0x34, 0xc6, 0x18, + 0x3a, 0xe9, 0x39, 0xfe, 0x06, 0x6a, 0x89, 0x7b, 0x4e, 0x02, 0x92, 0xe8, 0x95, 0xdd, 0xf2, 0x5e, + 0xeb, 0xe0, 0x37, 0x1b, 0x6f, 0x2b, 0x03, 0xca, 0x7f, 0x47, 0x1c, 0xc6, 0xca, 0xe1, 0xf0, 0x0e, + 0x68, 0x6e, 0x48, 0x93, 0x8c, 0x41, 0x57, 0x77, 0xcb, 0x6c, 0xd7, 0x9c, 0x66, 0xb2, 0x28, 0x0e, + 0x27, 0x99, 0x4b, 0x12, 0xbd, 0x26, 0x64, 0x39, 0x8d, 0xbf, 0x85, 0x7a, 0x4c, 0x92, 0x28, 0xa4, + 0x09, 0x49, 0x74, 0xd8, 0x2d, 0xef, 0x35, 0x0e, 0x7e, 0x7b, 0x6b, 0x9f, 0xac, 0x1c, 0xa1, 0x47, + 0xd3, 0x78, 0x6e, 0x2d, 0x11, 0x71, 0x08, 0xdb, 0x09, 0x71, 0xb3, 0xd8, 0x4b, 0xe7, 0xf6, 0x84, + 0x4c, 0x3d, 0xea, 0x71, 0x4b, 0xbd, 0xc1, 0x93, 0xfe, 0xeb, 0xcd, 0x77, 0x92, 0x20, 0xc7, 0x4b, + 0x0c, 0xeb, 0x6e, 0x72, 0x93, 0x89, 0xbf, 0x01, 0x2d, 0x67, 0xeb, 0x5b, 0x3c, 0x9c, 0xdb, 0x6f, + 0x62, 0x91, 0xef, 0x33, 0x2f, 0x26, 0x01, 0xa1, 0xa9, 0xb5, 0x40, 0xc3, 0x2e, 0x34, 0xc9, 0x55, + 0x4a, 0x62, 0xea, 0xf8, 0xf6, 0x24, 0x74, 0x13, 0xbd, 0xc5, 0x63, 0xd8, 0xfc, 0x04, 0x7b, 0xd2, + 0xfa, 0x38, 0x74, 0x33, 0x86, 0xed, 0x30, 0xb6, 0xb5, 0x45, 0x96, 0xec, 0x64, 0x27, 0x84, 0xd6, + 0x6a, 0x32, 0x31, 0x82, 0xf2, 0x2b, 0x32, 0x97, 0xc5, 0xcb, 0x96, 0xf8, 0x09, 0x54, 0x2e, 0x1c, + 0x3f, 0x23, 0xb2, 0x72, 0x3f, 0xdb, 0xd8, 0x81, 0x1c, 0xd9, 0x12, 0xf6, 0x5f, 0x96, 0xbe, 0x50, + 0xda, 0x87, 0xd0, 0x5c, 0xa9, 0x28, 0xdc, 0x80, 0xda, 0x69, 0xff, 0x59, 0x7f, 0x70, 0xd6, 0x47, + 0xef, 0x61, 0x0d, 0xd4, 0xa7, 0xe3, 0xf1, 0x10, 0x29, 0xb8, 0x0e, 0x15, 0xb6, 0x1a, 0xa1, 0x12, + 0xae, 0x42, 0xe9, 0x6c, 0x84, 0xca, 0xb8, 0x06, 0xe5, 0xb3, 0xd1, 0x08, 0xa9, 0xa6, 0xaa, 0x69, + 0xa8, 0x6e, 0xaa, 0x5a, 0x1d, 0x81, 0xa9, 0x6a, 0x4d, 0xd4, 0x6a, 0xff, 0xb9, 0x02, 0xf5, 0x41, + 0x44, 0x62, 0x1e, 0x22, 0x6b, 0x93, 0xd4, 0x99, 0x25, 0xba, 0xc2, 0x6b, 0x8f, 0xaf, 0x79, 0x5f, + 0x66, 0x41, 0xe0, 0xc4, 0x73, 0x1e, 0x06, 0xeb, 0x4b, 0x41, 0xe2, 0x5d, 0x68, 0x4c, 0x48, 0xe2, + 0xc6, 0x1e, 0xf7, 0x5a, 0xf6, 0x56, 0x91, 0x75, 0xf3, 0x24, 0xd4, 0xb7, 0x7f, 0x12, 0xf8, 0x63, + 0xd8, 0x0a, 0xf3, 0x08, 0x6c, 0x6f, 0xa2, 0x57, 0x84, 0x1f, 0x0b, 0x9e, 0x31, 0x79, 0xed, 0x9e, + 0xb3, 0x8b, 0x3d, 0x57, 0xe7, 0x45, 0xda, 0xdd, 0xd8, 0xf7, 0x45, 0x5a, 0x7f, 0xa4, 0xeb, 0xf4, + 0xe5, 0x35, 0x03, 0x7c, 0xef, 0xc5, 0x35, 0xf1, 0x00, 0x60, 0x42, 0xa2, 0x98, 0xb8, 0x4e, 0x4a, + 0x26, 0xbc, 0x0b, 0x35, 0xab, 0xc0, 0x79, 0x77, 0xed, 0xf3, 0x7f, 0xaf, 0x6c, 0x51, 0x95, 0xed, + 0x3f, 0x2a, 0xa0, 0xe5, 0xd2, 0xeb, 0xa5, 0xa5, 0xdc, 0x2c, 0xad, 0x27, 0x50, 0xe5, 0xa9, 0x72, + 0xa4, 0x0b, 0xfb, 0x9b, 0x47, 0xcf, 0xcd, 0x2c, 0x69, 0x6e, 0xaa, 0x5a, 0x99, 0x77, 0x86, 0x8a, + 0x2a, 0xed, 0xbf, 0x97, 0x40, 0x65, 0xaf, 0x06, 0xde, 0x86, 0x4a, 0xea, 0xa5, 0x3e, 0x91, 0x3b, + 0x0b, 0xe2, 0xba, 0x57, 0xa5, 0x9b, 0x5e, 0xed, 0x01, 0x4a, 0x49, 0x1c, 0x24, 0x76, 0x38, 0xb5, + 0x13, 0x12, 0x5f, 0x78, 0x2e, 0x91, 0x7d, 0xd1, 0xe2, 0xfc, 0xc1, 0x74, 0x24, 0xb8, 0xd8, 0x84, + 0x9a, 0x1b, 0xd2, 0xd4, 0x71, 0x53, 0xd9, 0x14, 0x9f, 0x6e, 0x1c, 0xc0, 0x91, 0xb0, 0xb3, 0x72, + 0x00, 0x86, 0xe5, 0x7b, 0x2e, 0xa1, 0x09, 0xe1, 0xc5, 0x7f, 0x1b, 0xac, 0x13, 0x61, 0x67, 0xe5, + 0x00, 0xac, 0x22, 0x2f, 0x48, 0x9c, 0xb0, 0xf8, 0xaa, 0xa2, 0xdd, 0x25, 0xd9, 0xee, 0x41, 0x4d, + 0xee, 0xcc, 0xee, 0x09, 0xea, 0x04, 0x79, 0x76, 0xf8, 0x9a, 0x15, 0x49, 0x16, 0xfb, 0x32, 0x29, + 0x6c, 0xc9, 0x92, 0x48, 0x02, 0xc7, 0xf3, 0x65, 0x06, 0x04, 0xd1, 0xde, 0x87, 0x9a, 0xdc, 0x74, + 0x33, 0x98, 0xf6, 0x33, 0xb8, 0xb7, 0xf6, 0x1a, 0xd8, 0xa0, 0x48, 0x6e, 0x82, 0xfd, 0xab, 0x04, + 0x55, 0x51, 0x00, 0x78, 0x0c, 0x8d, 0xef, 0x92, 0x90, 0xda, 0xb2, 0x8c, 0x14, 0x9e, 0xb9, 0xcf, + 0x37, 0xce, 0x9c, 0x39, 0x1a, 0xf4, 0x65, 0x29, 0x01, 0xc3, 0x91, 0xa8, 0x9f, 0x40, 0x73, 0xe2, + 0x31, 0x0f, 0x02, 0x8f, 0x3a, 0x69, 0x18, 0xcb, 0xcd, 0x57, 0x99, 0x6c, 0xf6, 0x88, 0x89, 0x33, + 0xb1, 0x43, 0xea, 0xcf, 0x79, 0x7a, 0x34, 0x4b, 0x63, 0x8c, 0x01, 0xf5, 0xd7, 0xbc, 0x5f, 0x95, + 0x77, 0x70, 0x6b, 0x76, 0xa0, 0x46, 0xae, 0x9c, 0x20, 0xf2, 0x09, 0x3f, 0xe7, 0xc6, 0xc1, 0x76, + 0x47, 0xcc, 0x69, 0x9d, 0x7c, 0x4e, 0xeb, 0x74, 0xe9, 0xdc, 0xca, 0x95, 0x64, 0x83, 0xfc, 0xa9, + 0x06, 0xb0, 0x0c, 0x9c, 0xe5, 0x37, 0x26, 0x53, 0x79, 0xbe, 0x6c, 0xb9, 0x6c, 0x9c, 0xca, 0x8f, + 0x34, 0x4e, 0xf5, 0xe6, 0x49, 0xe9, 0x50, 0x9b, 0x90, 0xa9, 0x93, 0xf9, 0xa9, 0x5e, 0x13, 0x65, + 0x27, 0x49, 0xfc, 0x33, 0x68, 0x04, 0x99, 0x9f, 0x7a, 0x91, 0x4f, 0xec, 0x70, 0xaa, 0xc3, 0xae, + 0xb2, 0xa7, 0x58, 0x90, 0xb3, 0x06, 0x53, 0x66, 0x1a, 0x38, 0x57, 0x5e, 0x90, 0x05, 0xfc, 0x9a, + 0x54, 0xac, 0x9c, 0xc4, 0x8f, 0xe0, 0x0e, 0xb9, 0x72, 0xfd, 0x2c, 0xf1, 0x2e, 0x88, 0x9d, 0xeb, + 0x6c, 0xf1, 0x6c, 0xa3, 0x85, 0xe0, 0xb9, 0x54, 0x66, 0x30, 0x1e, 0xe5, 0x2a, 0x4d, 0x09, 0x23, + 0xc8, 0x6b, 0x30, 0x52, 0xa7, 0x75, 0x1d, 0x46, 0x2a, 0xdf, 0x07, 0x08, 0x9c, 0x2b, 0xdb, 0x27, + 0x74, 0x96, 0x9e, 0xeb, 0xef, 0xef, 0x2a, 0x7b, 0xaa, 0x55, 0x0f, 0x9c, 0xab, 0x13, 0xce, 0xe0, + 0x62, 0x8f, 0xe6, 0x62, 0x24, 0xc5, 0x1e, 0x95, 0x62, 0x1d, 0x6a, 0x91, 0x93, 0xb2, 0x63, 0xd2, + 0xef, 0x88, 0x34, 0x48, 0x92, 0x55, 0x0c, 0xc3, 0xf5, 0x52, 0x12, 0x24, 0xfa, 0x36, 0xb7, 0xd3, + 0x02, 0xe7, 0xca, 0x60, 0x34, 0x17, 0x7a, 0x54, 0x0a, 0xef, 0x49, 0xa1, 0x47, 0x85, 0xf0, 0x63, + 0xd8, 0xca, 0xa8, 0xf7, 0x7d, 0x46, 0xa4, 0xfc, 0x27, 0xdc, 0xf3, 0x86, 0xe0, 0x09, 0x95, 0x5f, + 0x40, 0x8b, 0x81, 0x47, 0x31, 0x7b, 0x34, 0x53, 0x8f, 0x24, 0xba, 0xce, 0x41, 0x9a, 0x81, 0x73, + 0x35, 0x5c, 0x30, 0xb9, 0x9a, 0x47, 0x8b, 0x6a, 0x1f, 0x48, 0x35, 0x8f, 0x16, 0xd4, 0x76, 0x40, + 0x8b, 0xc5, 0xcb, 0x32, 0xd1, 0x77, 0xc4, 0x8b, 0x9a, 0xd3, 0xac, 0x3e, 0x9c, 0x38, 0x76, 0xe6, + 0x7a, 0x9b, 0x0b, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, 0x39, 0x1f, 0xb5, 0x8d, + 0xd7, 0xe8, 0xc1, 0xc2, 0x72, 0xe4, 0xb1, 0x82, 0x1d, 0xcf, 0x23, 0x92, 0x58, 0x1c, 0xb6, 0x7d, + 0x09, 0xf7, 0xd6, 0x8a, 0x57, 0x47, 0xa8, 0x3a, 0x54, 0xba, 0x96, 0xd5, 0x7d, 0x81, 0x14, 0xc6, + 0x3f, 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, 0x7b, 0x4f, 0x7a, 0x16, + 0x2a, 0xb3, 0x39, 0xab, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, 0x9f, 0x3e, 0x3f, 0xec, + 0x59, 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, 0x1e, 0x8d, 0x2d, 0xa3, + 0xff, 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, 0x8b, 0x06, 0xba, 0x36, + 0x81, 0x61, 0x74, 0xd7, 0x54, 0xb5, 0xbb, 0x68, 0xdb, 0x54, 0xb5, 0x9f, 0x22, 0xdd, 0x54, 0xb5, + 0x0f, 0xd1, 0x47, 0xa6, 0xaa, 0x7d, 0x84, 0xee, 0x9b, 0xaa, 0x76, 0x1f, 0x3d, 0x30, 0x55, 0xed, + 0x01, 0x6a, 0x9b, 0xaa, 0xf6, 0x09, 0x7a, 0x68, 0xaa, 0xda, 0x43, 0xf4, 0xc8, 0x54, 0xb5, 0x47, + 0xa8, 0xd3, 0xfe, 0xab, 0x02, 0xe5, 0xb1, 0x33, 0xdb, 0xe0, 0x49, 0xba, 0x71, 0x9b, 0x94, 0xdf, + 0xfe, 0x6d, 0x22, 0x02, 0x6d, 0xff, 0x47, 0x81, 0xbb, 0x6b, 0xe6, 0x7f, 0x3c, 0x2d, 0xcc, 0x2a, + 0x0a, 0x9f, 0x55, 0xcc, 0x37, 0xf9, 0x9e, 0x58, 0xf0, 0xc4, 0x38, 0xb5, 0x9c, 0x5c, 0x52, 0x68, + 0xae, 0x88, 0xd6, 0x0c, 0x2e, 0xcf, 0x57, 0x07, 0x97, 0x5f, 0xdd, 0xda, 0x0f, 0xf9, 0x39, 0x57, + 0x18, 0xcc, 0xff, 0x59, 0x81, 0xd6, 0xaa, 0x14, 0x0f, 0x65, 0x3d, 0xb3, 0x8d, 0x5b, 0xaf, 0x31, + 0x98, 0x09, 0x98, 0x0e, 0x2b, 0x52, 0x51, 0xc2, 0x1b, 0x9c, 0x73, 0xfe, 0x98, 0x96, 0x0b, 0x8f, + 0xa9, 0x09, 0x25, 0x8f, 0xf2, 0xf9, 0xa2, 0x75, 0xf0, 0xe5, 0xeb, 0x7a, 0x61, 0x50, 0xab, 0xe4, + 0x51, 0x16, 0xd3, 0xd4, 0x0f, 0x2f, 0xf9, 0xc5, 0xfe, 0x06, 0x31, 0x7d, 0xe5, 0x87, 0x97, 0x16, + 0x47, 0x62, 0xf7, 0xaa, 0x93, 0xa5, 0xe7, 0x61, 0xec, 0xfd, 0x41, 0x0c, 0xef, 0xec, 0xad, 0x16, + 0x6f, 0x03, 0x5a, 0x11, 0x9c, 0xc6, 0x3e, 0xbb, 0xe2, 0xd2, 0xf0, 0x15, 0x11, 0x4a, 0xe2, 0x89, + 0xd0, 0x38, 0x83, 0x09, 0xf9, 0x30, 0x18, 0x46, 0x24, 0xd1, 0xb5, 0x5b, 0x0f, 0x83, 0xcc, 0xcc, + 0x92, 0xe6, 0xed, 0x67, 0xa0, 0xb2, 0xa4, 0x63, 0x04, 0x5b, 0xe3, 0x17, 0xc3, 0x9e, 0x6d, 0xf4, + 0xbf, 0xee, 0x9e, 0x18, 0xc7, 0xe8, 0x3d, 0xdc, 0x02, 0xe0, 0x9c, 0xc3, 0xee, 0xc8, 0x38, 0x42, + 0xca, 0x42, 0xa3, 0x3b, 0x34, 0xec, 0x67, 0xbd, 0x17, 0xa8, 0x84, 0xdf, 0x87, 0x06, 0xe7, 0x0c, + 0xba, 0xa7, 0xe3, 0xa7, 0x07, 0xa8, 0xdc, 0xfe, 0x0c, 0x4a, 0x06, 0x65, 0x86, 0x46, 0xbf, 0x00, + 0xb4, 0x05, 0x9a, 0xd1, 0xb7, 0x7f, 0x77, 0xda, 0xb3, 0xd8, 0x4d, 0xd3, 0x84, 0xba, 0xd1, 0xb7, + 0x9f, 0xf6, 0xba, 0xc7, 0x3d, 0x0b, 0x95, 0xda, 0xdf, 0x81, 0xca, 0x12, 0xc4, 0xd0, 0xbf, 0x3a, + 0x19, 0x9c, 0x15, 0xcc, 0xee, 0x40, 0x53, 0x70, 0x9e, 0x0f, 0x4f, 0x8c, 0x23, 0x63, 0x8c, 0x94, + 0x05, 0x6b, 0xd8, 0x1d, 0x8d, 0xce, 0x06, 0xd6, 0x31, 0x2a, 0xe1, 0x6d, 0x40, 0x9c, 0xd5, 0x1d, + 0x32, 0xad, 0xee, 0xd8, 0x18, 0xf4, 0x51, 0x79, 0xc9, 0x3d, 0x3a, 0xea, 0x8d, 0x46, 0xf6, 0xd1, + 0xe0, 0xb8, 0x87, 0xd4, 0xf6, 0xbf, 0x4b, 0xcb, 0x6e, 0x2d, 0x7c, 0x09, 0xe0, 0xbf, 0x28, 0x85, + 0xbf, 0x02, 0xe2, 0xa5, 0x40, 0xb6, 0xee, 0xe9, 0x9b, 0x7c, 0x66, 0xac, 0xe3, 0x89, 0x2e, 0x5e, + 0xfc, 0x47, 0x50, 0x90, 0xec, 0x7c, 0x0a, 0xfa, 0x1a, 0x83, 0xaf, 0x59, 0xeb, 0xb1, 0x97, 0x84, + 0x1f, 0x9a, 0xfc, 0x58, 0x15, 0xc4, 0xce, 0x3f, 0x94, 0xb5, 0x26, 0x3f, 0x74, 0x1d, 0xbc, 0x5a, + 0xbd, 0x0e, 0xde, 0x7a, 0x6c, 0xdc, 0xd5, 0xe2, 0x65, 0xf1, 0x37, 0x85, 0xcd, 0x9f, 0xac, 0xd6, + 0xf0, 0xb0, 0x18, 0x40, 0xe3, 0x36, 0xfd, 0xc9, 0xed, 0xc5, 0x8f, 0x48, 0x9e, 0x0c, 0xfe, 0x0b, + 0x80, 0x25, 0x73, 0x4d, 0xb4, 0xdb, 0xc5, 0x68, 0xeb, 0x05, 0xb7, 0x0e, 0x8f, 0x7e, 0xdf, 0x9d, + 0x79, 0xe9, 0x79, 0xf6, 0xb2, 0xe3, 0x86, 0xc1, 0x3e, 0x73, 0xe4, 0x31, 0x71, 0xc3, 0x64, 0x9e, + 0xa4, 0x44, 0x92, 0xd2, 0xaf, 0xfd, 0x1f, 0xfe, 0x87, 0xf0, 0x65, 0x95, 0xcb, 0x3e, 0xff, 0x5f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xc4, 0x0e, 0x83, 0x46, 0x14, 0x00, 0x00, } From 53343c762d073d4fe6554c92b59bc381125e5bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Vu=C4=8Dica?= Date: Tue, 6 Nov 2018 16:56:53 +0000 Subject: [PATCH 0053/1518] protoc-gen-swagger: Fix formatting of license field definition. --- protoc-gen-swagger/options/openapiv2.pb.go | 44 +++++++++++----------- protoc-gen-swagger/options/openapiv2.proto | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index fa72484e3a8..8acf78d147e 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{0, 0} + return fileDescriptor_openapiv2_ae281b352364822e, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{8, 0} + return fileDescriptor_openapiv2_ae281b352364822e, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 0} + return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 1} + return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11, 2} + return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -210,7 +210,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{0} + return fileDescriptor_openapiv2_ae281b352364822e, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -333,7 +333,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{1} + return fileDescriptor_openapiv2_ae281b352364822e, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -450,7 +450,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{2} + return fileDescriptor_openapiv2_ae281b352364822e, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -505,7 +505,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{3} + return fileDescriptor_openapiv2_ae281b352364822e, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -585,7 +585,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{4} + return fileDescriptor_openapiv2_ae281b352364822e, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -644,7 +644,7 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{5} + return fileDescriptor_openapiv2_ae281b352364822e, []int{5} } func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) @@ -696,7 +696,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{6} + return fileDescriptor_openapiv2_ae281b352364822e, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -750,7 +750,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{7} + return fileDescriptor_openapiv2_ae281b352364822e, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -853,7 +853,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{8} + return fileDescriptor_openapiv2_ae281b352364822e, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -1032,7 +1032,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{9} + return fileDescriptor_openapiv2_ae281b352364822e, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1086,7 +1086,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{10} + return fileDescriptor_openapiv2_ae281b352364822e, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1164,7 +1164,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{11} + return fileDescriptor_openapiv2_ae281b352364822e, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1266,7 +1266,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{12} + return fileDescriptor_openapiv2_ae281b352364822e, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1311,7 +1311,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{12, 0} + return fileDescriptor_openapiv2_ae281b352364822e, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1356,7 +1356,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_b1201f239ab2f555, []int{13} + return fileDescriptor_openapiv2_ae281b352364822e, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1412,10 +1412,10 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_b1201f239ab2f555) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_ae281b352364822e) } -var fileDescriptor_openapiv2_b1201f239ab2f555 = []byte{ +var fileDescriptor_openapiv2_ae281b352364822e = []byte{ // 1773 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index d1d6d969d78..18b6c89dae0 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -89,7 +89,7 @@ message Info { string description = 2; string terms_of_service = 3; Contact contact = 4; - License license=5; + License license = 5; string version = 6; } From b5e2350205c68eff38dac490ef029d38a95be896 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Wed, 7 Nov 2018 13:28:27 +0100 Subject: [PATCH 0054/1518] Use newer Bazel repo rules (#798) This uses the new go_repository and http_archive rules. Using the former avoids a warning: DEPRECATED: the rules_go version of go_repository is deprecated. Migrate to the new version in @bazel_gazelle//def.bzl instead. The latter will avoid breakage when the native http_archive rule is disabled by default in a future version of Bazel. --- WORKSPACE | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index bf8cb212f33..32c20f962c1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,5 +1,7 @@ workspace(name = "grpc_ecosystem_grpc_gateway") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + http_archive( name = "io_bazel_rules_go", url = "https://github.com/bazelbuild/rules_go/releases/download/0.12.1/rules_go-0.12.1.tar.gz", @@ -12,7 +14,11 @@ http_archive( sha256 = "d03625db67e9fb0905bbd206fa97e32ae9da894fe234a493e7517fd25faec914", ) -load("@io_bazel_rules_go//go:def.bzl", "go_repository") +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") + +gazelle_dependencies() + +load("@bazel_gazelle//:def.bzl", "go_repository") load("//:repositories.bzl", "repositories") load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains") @@ -56,7 +62,3 @@ repositories() go_rules_dependencies() go_register_toolchains() - -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") - -gazelle_dependencies() From 7d429ea4af6c17ae773bafb6dffae8e851a9b35f Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Wed, 7 Nov 2018 12:28:38 +0000 Subject: [PATCH 0055/1518] Run //:gazelle_diff in the CI --- .circleci/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4cead752fa4..39e326fafa8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -56,14 +56,15 @@ jobs: working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m build --local_resources=400,1,1.0 //... + - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff + - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel build //... bazel_test: docker: - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel --host_jvm_args=-Xmx500m --host_jvm_args=-Xms500m test --local_resources=400,1,1.0 --test_output=errors --features=race //... + - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel test --test_output=errors --features=race //... build_linux_release: docker: - image: jfbrandhorst/grpc-gateway-build-env From 3ff87af9f7d72b06bf49dc35c5c97f4d99a07977 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Thu, 8 Nov 2018 23:58:24 +0100 Subject: [PATCH 0056/1518] Run buildifer on Bazel files (#797) buildifier autoformats the files to give a consistent style. This makes edits easier for contributors that have their editor set to autoformat-on-save. buildifier has been added to the Bazel workspace so that the same version can be used by contributors and CI. You can run `bazel run :buildifier_check` to check for necessary changes and `bazel run :buildifier` to apply them. `bazel test //...` also builds all targets. These changes should make the CI steps run a little faster. --- .circleci/config.yml | 11 +++--- BUILD | 10 +++++ WORKSPACE | 29 +++++++++----- examples/clients/abe/BUILD.bazel | 2 +- examples/proto/examplepb/BUILD.bazel | 2 +- examples/server/BUILD.bazel | 2 +- protoc-gen-swagger/defs.bzl | 58 ++++++++++++++-------------- repositories.bzl | 2 - runtime/BUILD.bazel | 2 +- 9 files changed, 69 insertions(+), 49 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 39e326fafa8..30d20053a19 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -50,21 +50,22 @@ jobs: - run: dep ensure --vendor-only - run: go get golang.org/x/lint/golint - run: make lint - bazel_build: + bazel_lint: docker: - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff - - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel build //... + - run: 'bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:buildifier_check || + (echo "Bazel files not formatted, please run \`bazel run :buildifier\`"; exit 1)' + - run: bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff bazel_test: docker: - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: bazel --batch --output_base=$HOME/.cache/_grpc_gateway_bazel test --test_output=errors --features=race //... + - run: bazel --output_base=$HOME/.cache/_grpc_gateway_bazel test --test_output=errors --features=race //... build_linux_release: docker: - image: jfbrandhorst/grpc-gateway-build-env @@ -151,7 +152,7 @@ workflows: - node_test - generate - lint - - bazel_build + - bazel_lint - bazel_test - build_linux_release: filters: diff --git a/BUILD b/BUILD index 0ab0afa13f7..b72e9743bd8 100644 --- a/BUILD +++ b/BUILD @@ -1,4 +1,14 @@ load("@bazel_gazelle//:def.bzl", "gazelle") +load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier") + +buildifier( + name = "buildifier", +) + +buildifier( + name = "buildifier_check", + mode = "check", +) # gazelle:exclude third_party diff --git a/WORKSPACE b/WORKSPACE index 32c20f962c1..5a6545f1103 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,14 +4,21 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - url = "https://github.com/bazelbuild/rules_go/releases/download/0.12.1/rules_go-0.12.1.tar.gz", sha256 = "8b68d0630d63d95dacc0016c3bb4b76154fe34fca93efd65d1c366de3fcb4294", + url = "https://github.com/bazelbuild/rules_go/releases/download/0.12.1/rules_go-0.12.1.tar.gz", ) http_archive( name = "bazel_gazelle", - url = "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.10.1/bazel-gazelle-0.10.1.tar.gz", sha256 = "d03625db67e9fb0905bbd206fa97e32ae9da894fe234a493e7517fd25faec914", + url = "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.10.1/bazel-gazelle-0.10.1.tar.gz", +) + +http_archive( + name = "com_github_bazelbuild_buildtools", + sha256 = "e4c83a7a5d0712e2cea2077112a5eb6bb1af75a84e34c8c9b77330e322966b8b", + strip_prefix = "buildtools-e90e7cc6ef3e6d08d4ca8a982935c3eed638e058", + url = "https://github.com/bazelbuild/buildtools/archive/e90e7cc6ef3e6d08d4ca8a982935c3eed638e058.tar.gz", ) load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") @@ -20,7 +27,7 @@ gazelle_dependencies() load("@bazel_gazelle//:def.bzl", "go_repository") load("//:repositories.bzl", "repositories") -load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains") +load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") # Also define in Gopkg.toml go_repository( @@ -45,16 +52,16 @@ go_repository( # Also define in Gopkg.toml go_repository( - name = "com_github_ghodss_yaml", - commit = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7", - importpath = "github.com/ghodss/yaml", + name = "com_github_ghodss_yaml", + commit = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7", + importpath = "github.com/ghodss/yaml", ) # Also define in Gopkg.toml go_repository( - name = "in_gopkg_yaml_v2", - commit = "eb3733d160e74a9c7e442f435eb3bea458e1d19f", - importpath = "gopkg.in/yaml.v2", + name = "in_gopkg_yaml_v2", + commit = "eb3733d160e74a9c7e442f435eb3bea458e1d19f", + importpath = "gopkg.in/yaml.v2", ) repositories() @@ -62,3 +69,7 @@ repositories() go_rules_dependencies() go_register_toolchains() + +load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") + +buildifier_dependencies() diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 8603ce20e7f..6b61fa1b3fa 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -29,6 +29,6 @@ go_library( "//examples/proto/examplepb:go_default_library", "//examples/proto/pathenum:go_default_library", "//runtime:go_default_library", - "@com_github_go_resty_resty//:go_default_library" + "@com_github_go_resty_resty//:go_default_library", ], ) diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 7ec13fbe279..0e0c79d38ca 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -17,10 +17,10 @@ proto_library( "a_bit_of_everything.proto", "echo_service.proto", "flow_combination.proto", + "response_body_service.proto", "stream.proto", "unannotated_echo_service.proto", "wrappers.proto", - "response_body_service.proto", ], deps = [ "//examples/proto/pathenum:pathenum_proto", diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index afd74848a09..10bb44d0641 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -9,8 +9,8 @@ go_library( "echo.go", "flow_combination.go", "main.go", - "unannotatedecho.go", "responsebody.go", + "unannotatedecho.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/server", deps = [ diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index ada033139c6..a2933cdbeaa 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -33,34 +33,34 @@ def _collect_includes(gen_dir, srcs): def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration): swagger_files = [] for proto in direct_proto_srcs: - swagger_file = actions.declare_file( - "%s.swagger.json" % proto.basename[:-len(".proto")], - sibling = proto, - ) + swagger_file = actions.declare_file( + "%s.swagger.json" % proto.basename[:-len(".proto")], + sibling = proto, + ) - inputs = direct_proto_srcs + transitive_proto_srcs + [protoc_gen_swagger] + inputs = direct_proto_srcs + transitive_proto_srcs + [protoc_gen_swagger] - options=["logtostderr=true"] - if grpc_api_configuration: - options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) - inputs.append(grpc_api_configuration) + options = ["logtostderr=true"] + if grpc_api_configuration: + options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) + inputs.append(grpc_api_configuration) - includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) + includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) - args = actions.args() - args.add("--plugin=%s" % protoc_gen_swagger.path) - args.add("--swagger_out=%s:%s" % (",".join(options), ctx.bin_dir.path)) - args.add(["-I%s" % include for include in includes]) - args.add(proto.path) + args = actions.args() + args.add("--plugin=%s" % protoc_gen_swagger.path) + args.add("--swagger_out=%s:%s" % (",".join(options), ctx.bin_dir.path)) + args.add(["-I%s" % include for include in includes]) + args.add(proto.path) - actions.run( - executable = protoc, - inputs = inputs, - outputs = [swagger_file], - arguments = [args], - ) + actions.run( + executable = protoc, + inputs = inputs, + outputs = [swagger_file], + arguments = [args], + ) - swagger_files.append(swagger_file) + swagger_files.append(swagger_file) return swagger_files @@ -69,7 +69,7 @@ def _proto_gen_swagger_impl(ctx): grpc_api_configuration = ctx.file.grpc_api_configuration return struct( - files=depset( + files = depset( _run_proto_gen_swagger( ctx, direct_proto_srcs = proto.direct_sources, @@ -77,9 +77,9 @@ def _proto_gen_swagger_impl(ctx): actions = ctx.actions, protoc = ctx.executable._protoc, protoc_gen_swagger = ctx.executable._protoc_gen_swagger, - grpc_api_configuration = grpc_api_configuration - ) - ) + grpc_api_configuration = grpc_api_configuration, + ), + ), ) protoc_gen_swagger = rule( @@ -87,11 +87,11 @@ protoc_gen_swagger = rule( "proto": attr.label( allow_rules = ["proto_library"], mandatory = True, - providers = ['proto'], + providers = ["proto"], ), "grpc_api_configuration": attr.label( - allow_single_file=True, - mandatory=False + allow_single_file = True, + mandatory = False, ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", diff --git a/repositories.bzl b/repositories.bzl index dc49d60eeee..4133986239d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -39,11 +39,9 @@ def _googleapis_repository_impl(ctx): ctx.file("google/api/BUILD.bazel", GOOGLEAPIS_GOOGLE_API_BUILD_CONTENTS) - _googleapis_repository = repository_rule( implementation = _googleapis_repository_impl, ) - def repositories(): _googleapis_repository(name = "com_github_googleapis_googleapis") diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 9fce0447165..60c1fec31d9 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -73,8 +73,8 @@ go_test( "@com_github_golang_protobuf//ptypes/struct:go_default_library", "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", "@com_github_golang_protobuf//ptypes/wrappers:go_default_library", - "@org_golang_google_genproto//protobuf/field_mask:go_default_library", "@org_golang_google_genproto//googleapis/rpc/errdetails:go_default_library", + "@org_golang_google_genproto//protobuf/field_mask:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", From aa4f5a47af81592dac1c4fddd553d3921d1adf13 Mon Sep 17 00:00:00 2001 From: ch3rub1m Date: Tue, 13 Nov 2018 16:57:13 +0800 Subject: [PATCH 0057/1518] fix bug: the resource name of custom method doesn't be retained --- protoc-gen-swagger/genswagger/template.go | 2 ++ protoc-gen-swagger/genswagger/template_test.go | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index a493c15fb3f..f2f9a8e354a 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -570,6 +570,8 @@ func isResourceName(prefix string) bool { words := strings.Split(prefix, ".") l := len(words) field := words[l-1] + words = strings.Split(field, ":") + field = words[0] return field == "parent" || field == "name" } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 67f449432d6..5dcb33756ed 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -702,6 +702,11 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, + {"/{name=prefix/*}:customMethod", "/{name=prefix/*}:customMethod"}, + {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1/*/prefix2/*}:customMethod"}, + {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix/*}:customMethod"}, + {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, + {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, } for _, data := range tests { From a7c0cd068de87715ea04bad788744a7b958d60f3 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Tue, 13 Nov 2018 16:42:54 +0100 Subject: [PATCH 0058/1518] Update rules_go and gazelle (#802) * Update rules_go and gazelle This requires/allows the following changes: - rerun Gazelle to regenerate the build files - fix marshal_jsonpb_test to assert correct behavior when EnumsAsInts == false - remove `repositories.bzl` (replaced by @go_googleapis) Also, enforce up-to-date build files in the CI check. Note: this version of the commit includes an out-of-date BUILD file to test the CI check. * Update Gopkg.toml and Gopkg.lock * Update generated proto code The generated code changed with the updated dependencies. * Fix node_test Enum values inside maps are now supported. --- .circleci/config.yml | 3 +- Gopkg.lock | 26 ++- Gopkg.toml | 18 +- WORKSPACE | 22 +- codegenerator/BUILD.bazel | 8 +- .../a_bit_of_everything_service.spec.js | 3 +- examples/clients/responsebody/BUILD.bazel | 19 ++ examples/integration/BUILD.bazel | 8 +- examples/proto/examplepb/BUILD.bazel | 19 +- .../proto/examplepb/a_bit_of_everything.pb.go | 196 +++++++++--------- examples/proto/examplepb/echo_service.pb.go | 104 +++++----- .../proto/examplepb/flow_combination.pb.go | 44 ++-- .../examplepb/response_body_service.pb.go | 16 +- examples/proto/examplepb/stream.pb.go | 14 +- .../examplepb/unannotated_echo_service.pb.go | 20 +- examples/proto/examplepb/wrappers.pb.go | 28 +-- examples/proto/sub2/message.pb.go | 2 +- examples/server/BUILD.bazel | 6 +- protoc-gen-grpc-gateway/BUILD.bazel | 2 +- .../descriptor/BUILD.bazel | 14 +- protoc-gen-grpc-gateway/generator/BUILD.bazel | 2 +- .../gengateway/BUILD.bazel | 6 +- protoc-gen-swagger/BUILD.bazel | 2 +- protoc-gen-swagger/genswagger/BUILD.bazel | 8 +- protoc-gen-swagger/options/BUILD.bazel | 4 - protoc-gen-swagger/options/openapiv2.pb.go | 152 +++++++------- repositories.bzl | 47 ----- runtime/BUILD.bazel | 38 ++-- runtime/internal/BUILD.bazel | 1 - runtime/internal/stream_chunk.pb.go | 10 +- runtime/marshal_jsonpb_test.go | 4 +- utilities/BUILD.bazel | 4 +- 32 files changed, 420 insertions(+), 430 deletions(-) create mode 100644 examples/clients/responsebody/BUILD.bazel delete mode 100644 repositories.bzl diff --git a/.circleci/config.yml b/.circleci/config.yml index 30d20053a19..150455b5c21 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,7 +58,8 @@ jobs: - checkout - run: 'bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:buildifier_check || (echo "Bazel files not formatted, please run \`bazel run :buildifier\`"; exit 1)' - - run: bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff + - run: 'test -z "$(bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff)" || + (echo "Bazel files out-of-date, please run \`bazel run :gazelle_diff\`"; exit 1)' bazel_test: docker: - image: l.gcr.io/google/bazel:latest diff --git a/Gopkg.lock b/Gopkg.lock index 94cc9cc5d11..ca212aeaa81 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -35,7 +35,7 @@ "ptypes/timestamp", "ptypes/wrappers" ] - revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" + revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" [[projects]] name = "github.com/rogpeppe/fastuuid" @@ -51,11 +51,16 @@ "http2/hpack", "idna", "internal/timeseries", - "lex/httplex", "publicsuffix", "trace" ] - revision = "640f4622ab692b87c2f3a94265e6f579fe38263d" + revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["unix"] + revision = "66b7b1311ac80bbafcd2daeef9a5e6e2cd1e2399" [[projects]] name = "golang.org/x/text" @@ -76,6 +81,7 @@ "unicode/rangetable" ] revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" [[projects]] name = "google.golang.org/genproto" @@ -99,9 +105,13 @@ "credentials", "encoding", "encoding/proto", - "grpclb/grpc_lb_v1/messages", "grpclog", "internal", + "internal/backoff", + "internal/channelz", + "internal/envconfig", + "internal/grpcrand", + "internal/transport", "keepalive", "metadata", "naming", @@ -111,10 +121,10 @@ "resolver/passthrough", "stats", "status", - "tap", - "transport" + "tap" ] - revision = "d11072e7ca9811b1100b80ca0269ac831f06d024" + revision = "2e463a05d100327ca47ac218281906921038fd95" + version = "v1.16.0" [[projects]] name = "gopkg.in/yaml.v2" @@ -124,6 +134,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "e3a3d005ebf93db02b6c7ddc886adc39342b492105fc1b6c4d0c362a43e6adf6" + inputs-digest = "869b43d6e47c7434098120dae9352bde379feae8504ece065ee51b78c6aca0fa" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index cf3660628ae..e4c78e94a90 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -37,30 +37,30 @@ required = [ [[constraint]] # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L75 - version = "1.1.0" + # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L52 + revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" name = "github.com/golang/protobuf" [[constraint]] # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L110 - revision = "640f4622ab692b87c2f3a94265e6f579fe38263d" + # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L96 + revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" name = "golang.org/x/net" [[constraint]] # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L123 - version = "1.10.3" + # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L123 + version = "1.15.0" name = "google.golang.org/grpc" [[constraint]] # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L138 + # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L160 revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" name = "github.com/golang/glog" [[override]] # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/436452edc29a2f1e0edc22d180fbb57c27e6d0af/go/private/repositories.bzl#L117 - revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L117 + version = "0.3.0" name = "golang.org/x/text" diff --git a/WORKSPACE b/WORKSPACE index 5a6545f1103..6dc67684db1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -2,16 +2,24 @@ workspace(name = "grpc_ecosystem_grpc_gateway") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +# master as of 2018-11-09. This should be updated when a new release is tagged. http_archive( name = "io_bazel_rules_go", - sha256 = "8b68d0630d63d95dacc0016c3bb4b76154fe34fca93efd65d1c366de3fcb4294", - url = "https://github.com/bazelbuild/rules_go/releases/download/0.12.1/rules_go-0.12.1.tar.gz", + sha256 = "c23db3b50b8822e153bc5accfea75baeecedb481a162391c4f3b9aec451e34b4", + strip_prefix = "rules_go-109c520465fcb418f2c4be967f3744d959ad66d3", + urls = [ + "https://github.com/bazelbuild/rules_go/archive/109c520465fcb418f2c4be967f3744d959ad66d3.tar.gz", + ], ) +# master as of 2018-11-09. This should be updated when a new release is tagged. http_archive( name = "bazel_gazelle", - sha256 = "d03625db67e9fb0905bbd206fa97e32ae9da894fe234a493e7517fd25faec914", - url = "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.10.1/bazel-gazelle-0.10.1.tar.gz", + sha256 = "a3af4a61d7b2f2c5386761f94a21f474871a32f0e94b13f08824248c4df25229", + strip_prefix = "bazel-gazelle-7b1e3c6eb5447c6647955fc93c012635f274f0f0", + urls = [ + "https://github.com/bazelbuild/bazel-gazelle/archive/7b1e3c6eb5447c6647955fc93c012635f274f0f0.tar.gz", + ], ) http_archive( @@ -21,12 +29,10 @@ http_archive( url = "https://github.com/bazelbuild/buildtools/archive/e90e7cc6ef3e6d08d4ca8a982935c3eed638e058.tar.gz", ) -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") gazelle_dependencies() -load("@bazel_gazelle//:def.bzl", "go_repository") -load("//:repositories.bzl", "repositories") load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") # Also define in Gopkg.toml @@ -64,8 +70,6 @@ go_repository( importpath = "gopkg.in/yaml.v2", ) -repositories() - go_rules_dependencies() go_register_toolchains() diff --git a/codegenerator/BUILD.bazel b/codegenerator/BUILD.bazel index 1eddaaf7395..651177fa157 100644 --- a/codegenerator/BUILD.bazel +++ b/codegenerator/BUILD.bazel @@ -11,16 +11,16 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/codegenerator", deps = [ "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) go_test( - name = "go_default_xtest", + name = "go_default_test", srcs = ["parse_req_test.go"], + embed = [":go_default_library"], deps = [ - ":go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/examples/browser/a_bit_of_everything_service.spec.js b/examples/browser/a_bit_of_everything_service.spec.js index c67d56de9fb..5d8e792fda9 100644 --- a/examples/browser/a_bit_of_everything_service.spec.js +++ b/examples/browser/a_bit_of_everything_service.spec.js @@ -85,8 +85,7 @@ describe('ABitOfEverythingService', function() { ], repeated_string_value: ["a", "b", "c"], oneof_string: "x", - // TODO(yugui) Support enum by name - map_value: { a: 1, b: 2 }, + map_value: { a: "ONE", b: 2 }, mapped_string_value: { a: "x", b: "y" }, mapped_nested_value: { a: { name: "x", amount: 1 }, diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel new file mode 100644 index 00000000000..bdbc237a815 --- /dev/null +++ b/examples/clients/responsebody/BUILD.bazel @@ -0,0 +1,19 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "api_client.go", + "api_response.go", + "configuration.go", + "examplepb_response_body_message.go", + "examplepb_response_body_message_response.go", + "examplepb_response_body_out.go", + "examplepb_response_body_out_response.go", + "examplepb_response_body_req.go", + "response_body_service_api.go", + ], + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", + visibility = ["//visibility:public"], + deps = ["@com_github_go_resty_resty//:go_default_library"], +) diff --git a/examples/integration/BUILD.bazel b/examples/integration/BUILD.bazel index 80e0df6227e..287de4b324a 100644 --- a/examples/integration/BUILD.bazel +++ b/examples/integration/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_test") go_test( - name = "go_default_xtest", + name = "go_default_test", srcs = [ "client_test.go", "integration_test.go", @@ -19,10 +19,10 @@ go_test( "//examples/server:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes/empty:go_default_library", - "@org_golang_google_genproto//googleapis/rpc/status:go_default_library", + "@go_googleapis//google/rpc:status_go_proto", + "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@org_golang_google_grpc//codes:go_default_library", ], ) diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 0e0c79d38ca..20009954efc 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -27,11 +27,11 @@ proto_library( "//examples/proto/sub:sub_proto", "//examples/proto/sub2:sub2_proto", "//protoc-gen-swagger/options:options_proto", - "@com_github_googleapis_googleapis//google/api:api_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", + "@go_googleapis//google/api:annotations_proto", ], ) @@ -48,18 +48,25 @@ go_proto_library( "//examples/proto/sub:go_default_library", "//examples/proto/sub2:go_default_library", "//protoc-gen-swagger/options:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/empty:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", - "@com_github_golang_protobuf//ptypes/wrappers:go_default_library", - "@com_github_googleapis_googleapis//google/api:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", ], ) go_library( name = "go_default_library", + srcs = ["unannotated_echo_service.pb.gw.go"], embed = [":examplepb_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb", + deps = [ + "//runtime:go_default_library", + "//utilities:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//grpclog:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + "@org_golang_x_net//context:go_default_library", + ], ) protoc_gen_swagger( diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 788a346b8b8..4ba9b36f349 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -86,39 +86,39 @@ func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { // Intentionaly complicated message type to cover many features of Protobuf. // NEXT ID: 30 type ABitOfEverything struct { - SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested" json:"single_nested,omitempty"` - Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` - Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` - Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value" json:"fixed64_value,omitempty"` - Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value" json:"fixed32_value,omitempty"` - BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` + Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` + BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` - PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` - NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` - Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value" json:"sfixed32_value,omitempty"` - Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value" json:"sfixed64_value,omitempty"` - Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value" json:"sint32_value,omitempty"` - Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value" json:"sint64_value,omitempty"` - RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue" json:"repeated_string_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` + PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` + NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` + Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` + Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` + Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` + Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` + RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` // Types that are valid to be assigned to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` - MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=grpc.gateway.examples.examplepb.NumericEnum"` - MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue" json:"nonConventionalNameValue,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue" json:"timestamp_value,omitempty"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum"` + MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -148,27 +148,6 @@ func (m *ABitOfEverything) XXX_DiscardUnknown() { var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo -type isABitOfEverything_OneofValue interface { - isABitOfEverything_OneofValue() -} - -type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,oneof"` -} -type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,oneof"` -} - -func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} -func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} - -func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { - if m != nil { - return m.OneofValue - } - return nil -} - func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { if m != nil { return m.SingleNested @@ -323,6 +302,29 @@ func (m *ABitOfEverything) GetRepeatedStringValue() []string { return nil } +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() +} + +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` +} + +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` +} + +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} + +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} + +func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { + if m != nil { + return m.OneofValue + } + return nil +} + func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty @@ -452,9 +454,9 @@ func _ABitOfEverything_OneofSizer(msg proto.Message) (n int) { // Nested is nested type. type ABitOfEverything_Nested struct { // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount" json:"amount,omitempty"` - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -508,22 +510,22 @@ func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { // ABitOfEverythingRepeated is used to validate repeated path parameter functionality type ABitOfEverythingRepeated struct { // repeated values. they are comma-separated in path - PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue" json:"path_repeated_float_value,omitempty"` - PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue" json:"path_repeated_double_value,omitempty"` - PathRepeatedInt64Value []int64 `protobuf:"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value" json:"path_repeated_int64_value,omitempty"` - PathRepeatedUint64Value []uint64 `protobuf:"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value" json:"path_repeated_uint64_value,omitempty"` - PathRepeatedInt32Value []int32 `protobuf:"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value" json:"path_repeated_int32_value,omitempty"` - PathRepeatedFixed64Value []uint64 `protobuf:"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value" json:"path_repeated_fixed64_value,omitempty"` - PathRepeatedFixed32Value []uint32 `protobuf:"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value" json:"path_repeated_fixed32_value,omitempty"` - PathRepeatedBoolValue []bool `protobuf:"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue" json:"path_repeated_bool_value,omitempty"` - PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue" json:"path_repeated_string_value,omitempty"` + PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue,proto3" json:"path_repeated_float_value,omitempty"` + PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue,proto3" json:"path_repeated_double_value,omitempty"` + PathRepeatedInt64Value []int64 `protobuf:"varint,3,rep,packed,name=path_repeated_int64_value,json=pathRepeatedInt64Value,proto3" json:"path_repeated_int64_value,omitempty"` + PathRepeatedUint64Value []uint64 `protobuf:"varint,4,rep,packed,name=path_repeated_uint64_value,json=pathRepeatedUint64Value,proto3" json:"path_repeated_uint64_value,omitempty"` + PathRepeatedInt32Value []int32 `protobuf:"varint,5,rep,packed,name=path_repeated_int32_value,json=pathRepeatedInt32Value,proto3" json:"path_repeated_int32_value,omitempty"` + PathRepeatedFixed64Value []uint64 `protobuf:"fixed64,6,rep,packed,name=path_repeated_fixed64_value,json=pathRepeatedFixed64Value,proto3" json:"path_repeated_fixed64_value,omitempty"` + PathRepeatedFixed32Value []uint32 `protobuf:"fixed32,7,rep,packed,name=path_repeated_fixed32_value,json=pathRepeatedFixed32Value,proto3" json:"path_repeated_fixed32_value,omitempty"` + PathRepeatedBoolValue []bool `protobuf:"varint,8,rep,packed,name=path_repeated_bool_value,json=pathRepeatedBoolValue,proto3" json:"path_repeated_bool_value,omitempty"` + PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3" json:"path_repeated_string_value,omitempty"` PathRepeatedBytesValue [][]byte `protobuf:"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3" json:"path_repeated_bytes_value,omitempty"` - PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value" json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` - PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value" json:"path_repeated_sfixed32_value,omitempty"` - PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value" json:"path_repeated_sfixed64_value,omitempty"` - PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value" json:"path_repeated_sint32_value,omitempty"` - PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value" json:"path_repeated_sint64_value,omitempty"` + PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3" json:"path_repeated_uint32_value,omitempty"` + PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` + PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3" json:"path_repeated_sfixed32_value,omitempty"` + PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` + PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` + PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value,proto3" json:"path_repeated_sint64_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -666,7 +668,7 @@ func (m *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 { } type Body struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -704,8 +706,8 @@ func (m *Body) GetName() string { } type MessageWithBody struct { - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Data *Body `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Data *Body `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -770,8 +772,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for ABitOfEverythingService service - +// ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ABitOfEverythingServiceClient interface { // Create a new ABitOfEverything // @@ -809,7 +812,7 @@ func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServi func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, opts...) if err != nil { return nil, err } @@ -818,7 +821,7 @@ func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) if err != nil { return nil, err } @@ -827,7 +830,7 @@ func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABit func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) if err != nil { return nil, err } @@ -836,7 +839,7 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, opts...) if err != nil { return nil, err } @@ -845,7 +848,7 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) if err != nil { return nil, err } @@ -854,7 +857,7 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) if err != nil { return nil, err } @@ -863,7 +866,7 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) { out := new(ABitOfEverythingRepeated) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) if err != nil { return nil, err } @@ -872,7 +875,7 @@ func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -881,7 +884,7 @@ func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.String func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) if err != nil { return nil, err } @@ -890,7 +893,7 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -899,7 +902,7 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) if err != nil { return nil, err } @@ -908,7 +911,7 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) if err != nil { return nil, err } @@ -917,7 +920,7 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) if err != nil { return nil, err } @@ -926,15 +929,14 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for ABitOfEverythingService service - +// ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. type ABitOfEverythingServiceServer interface { // Create a new ABitOfEverything // @@ -1283,8 +1285,9 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// Client API for CamelCaseServiceName service - +// CamelCaseServiceNameClient is the client API for CamelCaseServiceName service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type CamelCaseServiceNameClient interface { Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1299,15 +1302,14 @@ func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClie func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for CamelCaseServiceName service - +// CamelCaseServiceNameServer is the server API for CamelCaseServiceName service. type CamelCaseServiceNameServer interface { Empty(context.Context, *empty.Empty) (*empty.Empty, error) } @@ -1347,8 +1349,9 @@ var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } -// Client API for AnotherServiceWithNoBindings service - +// AnotherServiceWithNoBindingsClient is the client API for AnotherServiceWithNoBindings service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type AnotherServiceWithNoBindingsClient interface { NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } @@ -1363,15 +1366,14 @@ func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWi func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for AnotherServiceWithNoBindings service - +// AnotherServiceWithNoBindingsServer is the server API for AnotherServiceWithNoBindings service. type AnotherServiceWithNoBindingsServer interface { NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) } diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index 905eaa93a44..da8af13fbf9 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -71,14 +71,16 @@ type isEmbedded_Mark interface { } type Embedded_Progress struct { - Progress int64 `protobuf:"varint,1,opt,name=progress,oneof"` + Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` } + type Embedded_Note struct { - Note string `protobuf:"bytes,2,opt,name=note,oneof"` + Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` } func (*Embedded_Progress) isEmbedded_Mark() {} -func (*Embedded_Note) isEmbedded_Mark() {} + +func (*Embedded_Note) isEmbedded_Mark() {} func (m *Embedded) GetMark() isEmbedded_Mark { if m != nil { @@ -169,13 +171,13 @@ func _Embedded_OneofSizer(msg proto.Message) (n int) { // SimpleMessage represents a simple message sent to the Echo service. type SimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` // Types that are valid to be assigned to Code: // *SimpleMessage_LineNum // *SimpleMessage_Lang Code isSimpleMessage_Code `protobuf_oneof:"code"` - Status *Embedded `protobuf:"bytes,5,opt,name=status" json:"status,omitempty"` + Status *Embedded `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // Types that are valid to be assigned to Ext: // *SimpleMessage_En // *SimpleMessage_No @@ -209,30 +211,35 @@ func (m *SimpleMessage) XXX_DiscardUnknown() { var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo +func (m *SimpleMessage) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *SimpleMessage) GetNum() int64 { + if m != nil { + return m.Num + } + return 0 +} + type isSimpleMessage_Code interface { isSimpleMessage_Code() } -type isSimpleMessage_Ext interface { - isSimpleMessage_Ext() -} type SimpleMessage_LineNum struct { - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,oneof"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` } + type SimpleMessage_Lang struct { - Lang string `protobuf:"bytes,4,opt,name=lang,oneof"` -} -type SimpleMessage_En struct { - En int64 `protobuf:"varint,6,opt,name=en,oneof"` -} -type SimpleMessage_No struct { - No *Embedded `protobuf:"bytes,7,opt,name=no,oneof"` + Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` } func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} -func (*SimpleMessage_Lang) isSimpleMessage_Code() {} -func (*SimpleMessage_En) isSimpleMessage_Ext() {} -func (*SimpleMessage_No) isSimpleMessage_Ext() {} + +func (*SimpleMessage_Lang) isSimpleMessage_Code() {} func (m *SimpleMessage) GetCode() isSimpleMessage_Code { if m != nil { @@ -240,26 +247,6 @@ func (m *SimpleMessage) GetCode() isSimpleMessage_Code { } return nil } -func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { - if m != nil { - return m.Ext - } - return nil -} - -func (m *SimpleMessage) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *SimpleMessage) GetNum() int64 { - if m != nil { - return m.Num - } - return 0 -} func (m *SimpleMessage) GetLineNum() int64 { if x, ok := m.GetCode().(*SimpleMessage_LineNum); ok { @@ -282,6 +269,29 @@ func (m *SimpleMessage) GetStatus() *Embedded { return nil } +type isSimpleMessage_Ext interface { + isSimpleMessage_Ext() +} + +type SimpleMessage_En struct { + En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` +} + +type SimpleMessage_No struct { + No *Embedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` +} + +func (*SimpleMessage_En) isSimpleMessage_Ext() {} + +func (*SimpleMessage_No) isSimpleMessage_Ext() {} + +func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { + if m != nil { + return m.Ext + } + return nil +} + func (m *SimpleMessage) GetEn() int64 { if x, ok := m.GetExt().(*SimpleMessage_En); ok { return x.En @@ -419,8 +429,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for EchoService service - +// EchoServiceClient is the client API for EchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type EchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -443,7 +454,7 @@ func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -452,7 +463,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts .. func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -461,15 +472,14 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for EchoService service - +// EchoServiceServer is the server API for EchoService service. type EchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index 20b2402f9d0..25e2b775e50 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -55,9 +55,9 @@ func (m *EmptyProto) XXX_DiscardUnknown() { var xxx_messageInfo_EmptyProto proto.InternalMessageInfo type NonEmptyProto struct { - A string `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` + A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -109,7 +109,7 @@ func (m *NonEmptyProto) GetC() string { } type UnaryProto struct { - Str string `protobuf:"bytes,1,opt,name=str" json:"str,omitempty"` + Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -147,9 +147,9 @@ func (m *UnaryProto) GetStr() string { } type NestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c" json:"c,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -201,7 +201,7 @@ func (m *NestedProto) GetC() string { } type SingleNestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a" json:"a,omitempty"` + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -254,8 +254,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for FlowCombination service - +// FlowCombinationClient is the client API for FlowCombination service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type FlowCombinationClient interface { RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) @@ -279,7 +280,7 @@ func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) if err != nil { return nil, err } @@ -287,7 +288,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -319,7 +320,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -353,7 +354,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -385,7 +386,7 @@ func (x *flowCombinationStreamEmptyStreamClient) Recv() (*EmptyProto, error) { func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) if err != nil { return nil, err } @@ -394,7 +395,7 @@ func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProt func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -403,7 +404,7 @@ func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in * func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -411,7 +412,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[3], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -443,7 +444,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[4], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -475,7 +476,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := grpc.NewClientStream(ctx, &_FlowCombination_serviceDesc.Streams[5], c.cc, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -506,8 +507,7 @@ func (x *flowCombinationRpcPathNestedStreamClient) Recv() (*EmptyProto, error) { return m, nil } -// Server API for FlowCombination service - +// FlowCombinationServer is the server API for FlowCombination service. type FlowCombinationServer interface { RpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error) RpcEmptyStream(*EmptyProto, FlowCombination_RpcEmptyStreamServer) error diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index 8c7123740d4..fcad76e5898 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -25,7 +25,7 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type ResponseBodyIn struct { - Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -63,7 +63,7 @@ func (m *ResponseBodyIn) GetData() string { } type ResponseBodyOut struct { - Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response" json:"response,omitempty"` + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -101,7 +101,7 @@ func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { } type ResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -152,8 +152,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for ResponseBodyService service - +// ResponseBodyServiceClient is the client API for ResponseBodyService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ResponseBodyServiceClient interface { GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) } @@ -168,15 +169,14 @@ func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) { out := new(ResponseBodyOut) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for ResponseBodyService service - +// ResponseBodyServiceServer is the server API for ResponseBodyService service. type ResponseBodyServiceServer interface { GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) } diff --git a/examples/proto/examplepb/stream.pb.go b/examples/proto/examplepb/stream.pb.go index c598d8a548b..cc0c274c8ea 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/proto/examplepb/stream.pb.go @@ -34,8 +34,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for StreamService service - +// StreamServiceClient is the client API for StreamService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type StreamServiceClient interface { BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) @@ -51,7 +52,7 @@ func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[0], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -85,7 +86,7 @@ func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { } func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[1], c.cc, "/grpc.gateway.examples.examplepb.StreamService/List", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -117,7 +118,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := grpc.NewClientStream(ctx, &_StreamService_serviceDesc.Streams[2], c.cc, "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -147,8 +148,7 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { return m, nil } -// Server API for StreamService service - +// StreamServiceServer is the server API for StreamService service. type StreamServiceServer interface { BulkCreate(StreamService_BulkCreateServer) error List(*empty.Empty, StreamService_ListServer) error diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 7e2dd22f1c7..28f0d7311d0 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -37,9 +37,9 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration" json:"duration,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -102,8 +102,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for UnannotatedEchoService service - +// UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type UnannotatedEchoServiceClient interface { // Echo method receives a simple message and returns it. // @@ -126,7 +127,7 @@ func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoService func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -135,7 +136,7 @@ func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *Unannotated func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -144,15 +145,14 @@ func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *Unannot func (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for UnannotatedEchoService service - +// UnannotatedEchoServiceServer is the server API for UnannotatedEchoService service. type UnannotatedEchoServiceServer interface { // Echo method receives a simple message and returns it. // diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index 23fdd65a8b3..fb44ca7aba9 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -26,15 +26,15 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Wrappers struct { - StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` - Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` - Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` - BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue" json:"bytes_value,omitempty"` + StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -139,8 +139,9 @@ var _ grpc.ClientConn // is compatible with the grpc package it is being compiled against. const _ = grpc.SupportPackageIsVersion4 -// Client API for WrappersService service - +// WrappersServiceClient is the client API for WrappersService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type WrappersServiceClient interface { Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) } @@ -155,15 +156,14 @@ func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) { out := new(Wrappers) - err := grpc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, c.cc, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, opts...) if err != nil { return nil, err } return out, nil } -// Server API for WrappersService service - +// WrappersServiceServer is the server API for WrappersService service. type WrappersServiceServer interface { Create(context.Context, *Wrappers) (*Wrappers, error) } diff --git a/examples/proto/sub2/message.pb.go b/examples/proto/sub2/message.pb.go index a0a812c7d0f..6819b67ae3c 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/proto/sub2/message.pb.go @@ -19,7 +19,7 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type IdMessage struct { - Uuid string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index 10bb44d0641..29d44cfb4d1 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -19,10 +19,10 @@ go_library( "//examples/proto/sub2:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/empty:go_default_library", "@com_github_rogpeppe_fastuuid//:go_default_library", - "@org_golang_google_genproto//googleapis/rpc/errdetails:go_default_library", + "@go_googleapis//google/rpc:errdetails_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 8ca170d3da5..1af07f27f79 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "//protoc-gen-grpc-gateway/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel index 93670c52729..cfbdc277a8c 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel @@ -16,12 +16,12 @@ go_library( "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", - "@org_golang_google_genproto//googleapis/api/annotations:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", + "@go_googleapis//google/api:annotations_go_proto", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], ) @@ -38,7 +38,7 @@ go_test( deps = [ "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/generator/BUILD.bazel b/protoc-gen-grpc-gateway/generator/BUILD.bazel index 5995e5df888..6cb2162d847 100644 --- a/protoc-gen-grpc-gateway/generator/BUILD.bazel +++ b/protoc-gen-grpc-gateway/generator/BUILD.bazel @@ -8,6 +8,6 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator", deps = [ "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel index 3ab955c1fea..fcd9cfc3209 100644 --- a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel @@ -16,9 +16,7 @@ go_library( "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", - "@org_golang_google_genproto//googleapis/api/annotations:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) @@ -34,6 +32,6 @@ go_test( "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], ) diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index 62384ef3496..d5a1d05fcc7 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -12,7 +12,7 @@ go_library( "//protoc-gen-swagger/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 7f34844a7a0..172330ad88f 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -17,8 +17,8 @@ go_library( "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], ) @@ -31,7 +31,7 @@ go_test( "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/plugin:go_default_library", + "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], ) diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 476cb59db4b..0a91a7bbc68 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -20,10 +20,6 @@ go_proto_library( compilers = ["@io_bazel_rules_go//proto:go_grpc"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", proto = ":options_proto", - deps = [ - "@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library", - "@com_github_golang_protobuf//ptypes/any:go_default_library", - ], ) go_library( diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 8acf78d147e..ccdb18fe08b 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -190,17 +190,17 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // TODO(ivucica): document fields type Swagger struct { - Swagger string `protobuf:"bytes,1,opt,name=swagger" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host" json:"host,omitempty"` - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -313,17 +313,17 @@ func (m *Swagger) GetExternalDocs() *ExternalDocumentation { // // TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security" json:"security,omitempty"` + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -437,10 +437,10 @@ func (m *Operation) GetSecurity() []*SecurityRequirement { type Response struct { // `Description` is a short description of the response. // GFM syntax can be used for rich text representation. - Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. - Schema *Schema `protobuf:"bytes,2,opt,name=schema" json:"schema,omitempty"` + Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -490,12 +490,12 @@ func (m *Response) GetSchema() *Schema { // // TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact" json:"contact,omitempty"` - License *License `protobuf:"bytes,5,opt,name=license" json:"license,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version" json:"version,omitempty"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -573,9 +573,9 @@ func (m *Info) GetVersion() string { // // TODO(ivucica): document fields type Contact struct { - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` - Email string `protobuf:"bytes,3,opt,name=email" json:"email,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -632,9 +632,9 @@ func (m *Contact) GetEmail() string { // type License struct { // Required. The license name used for the API. - Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // A URL to the license used for the API. - Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -685,8 +685,8 @@ func (m *License) GetUrl() string { // // TODO(ivucica): document fields type ExternalDocumentation struct { - Description string `protobuf:"bytes,1,opt,name=description" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"` + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -736,11 +736,11 @@ func (m *ExternalDocumentation) GetUrl() string { // // TODO(ivucica): document fields type Schema struct { - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example" json:"example,omitempty"` + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` + Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -823,27 +823,27 @@ type JSONSchema struct { // the output. // For example: // `ref: ".google.protobuf.Timestamp"`. - Ref string `protobuf:"bytes,3,opt,name=ref" json:"ref,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default" json:"default,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum" json:"exclusive_minimum,omitempty"` - MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength" json:"max_length,omitempty"` - MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern" json:"pattern,omitempty"` - MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems" json:"max_items,omitempty"` - MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems" json:"unique_items,omitempty"` - MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties" json:"max_properties,omitempty"` - MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties" json:"min_properties,omitempty"` - Required []string `protobuf:"bytes,26,rep,name=required" json:"required,omitempty"` + Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength uint64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems uint64 `protobuf:"varint,20,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems uint64 `protobuf:"varint,21,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,22,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + MaxProperties uint64 `protobuf:"varint,24,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` + MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` + Required []string `protobuf:"bytes,26,rep,name=required,proto3" json:"required,omitempty"` // Items in 'array' must be unique. - Array []string `protobuf:"bytes,34,rep,name=array" json:"array,omitempty"` - Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` + Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` + Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1021,8 +1021,8 @@ func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { type Tag struct { // TODO(ivucica): Description should be extracted from comments on the proto // service object. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs" json:"external_docs,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1076,7 +1076,7 @@ func (m *Tag) GetExternalDocs() *ExternalDocumentation { // and only serves to provide the relevant details for each scheme. type SecurityDefinitions struct { // A single security scheme definition, mapping a "name" to the scheme it defines. - Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1125,36 +1125,36 @@ func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { type SecurityScheme struct { // Required. The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". - Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` + Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` // A short description for security scheme. - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` // Required. The name of the header or query parameter to be used. // // Valid for apiKey. - Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` // Required. The location of the API key. Valid values are "query" or "header". // // Valid for apiKey. - In SecurityScheme_In `protobuf:"varint,4,opt,name=in,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` + In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` // Required. The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". // // Valid for oauth2. - Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` + Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` // Required. The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. // // Valid for oauth2/implicit and oauth2/accessCode. - AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl" json:"authorization_url,omitempty"` + AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` // Required. The token URL to be used for this flow. This SHOULD be in the // form of a URL. // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. - TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl" json:"token_url,omitempty"` + TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` // Required. The available scopes for the OAuth2 security scheme. // // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes" json:"scopes,omitempty"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1256,7 +1256,7 @@ type SecurityRequirement struct { // the Security Definitions. If the security scheme is of type "oauth2", // then the value is a list of scope names required for the execution. // For other security scheme types, the array MUST be empty. - SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1297,7 +1297,7 @@ func (m *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequi // scope names required for the execution. For other security scheme types, // the array MUST be empty. type SecurityRequirement_SecurityRequirementValue struct { - Scope []string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty"` + Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1346,7 +1346,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) GetScope() []string { type Scopes struct { // Maps between a name of a scope to a short description of it (as the value // of the property). - Scope map[string]string `protobuf:"bytes,1,rep,name=scope" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/repositories.bzl b/repositories.bzl deleted file mode 100644 index 4133986239d..00000000000 --- a/repositories.bzl +++ /dev/null @@ -1,47 +0,0 @@ -GOOGLEAPIS_GOOGLE_API_BUILD_CONTENTS = """ -load("@io_bazel_rules_go//go:def.bzl", "go_library") -load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") - -package(default_visibility = ["//visibility:public"]) - -proto_library( - name = "api_proto", - srcs = [ - "annotations.proto", - "http.proto", - ], - deps = ["@com_google_protobuf//:descriptor_proto"], -) - -go_proto_library( - name = "api_go_proto", - importpath = "google.golang.org/genproto/googleapis/api/annotations", - proto = ":api_proto", - deps = ["@com_github_golang_protobuf//protoc-gen-go/descriptor:go_default_library"], -) - -go_library( - name = "go_default_library", - embed = [":api_go_proto"], - importpath = "google.golang.org/genproto/googleapis/api/annotations", -) -""" - -def _googleapis_repository_impl(ctx): - googleapis_commit = "3e68e19410baa7d78cdacc45b034eafe7467b439" - ctx.download_and_extract( - url = "https://github.com/googleapis/googleapis/archive/{commit}.tar.gz".format( - commit = googleapis_commit, - ), - sha256 = "eb98f16b037a27fd5fa6b3420a1e344014396d8ffbbab83c1adfe1296ea8572e", - stripPrefix = "googleapis-{}".format(googleapis_commit), - ) - - ctx.file("google/api/BUILD.bazel", GOOGLEAPIS_GOOGLE_API_BUILD_CONTENTS) - -_googleapis_repository = repository_rule( - implementation = _googleapis_repository_impl, -) - -def repositories(): - _googleapis_repository(name = "com_github_googleapis_googleapis") diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 60c1fec31d9..66a8999f2a2 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -25,12 +25,11 @@ go_library( deps = [ "//runtime/internal:go_default_library", "//utilities:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library", - "@com_github_golang_protobuf//ptypes/any:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", + "@io_bazel_rules_go//proto/wkt:any_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", @@ -41,14 +40,6 @@ go_library( go_test( name = "go_default_test", size = "small", - srcs = ["pattern_test.go"], - embed = [":go_default_library"], - deps = ["//utilities:go_default_library"], -) - -go_test( - name = "go_default_xtest", - size = "small", srcs = [ "context_test.go", "errors_test.go", @@ -58,23 +49,24 @@ go_test( "marshal_proto_test.go", "marshaler_registry_test.go", "mux_test.go", + "pattern_test.go", "query_test.go", ], + embed = [":go_default_library"], deps = [ - ":go_default_library", "//examples/proto/examplepb:go_default_library", "//runtime/internal:go_default_library", "//utilities:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library", - "@com_github_golang_protobuf//ptypes/duration:go_default_library", - "@com_github_golang_protobuf//ptypes/empty:go_default_library", - "@com_github_golang_protobuf//ptypes/struct:go_default_library", - "@com_github_golang_protobuf//ptypes/timestamp:go_default_library", - "@com_github_golang_protobuf//ptypes/wrappers:go_default_library", - "@org_golang_google_genproto//googleapis/rpc/errdetails:go_default_library", - "@org_golang_google_genproto//protobuf/field_mask:go_default_library", + "@com_github_golang_protobuf//ptypes:go_default_library_gen", + "@go_googleapis//google/rpc:errdetails_go_proto", + "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:empty_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@io_bazel_rules_go//proto/wkt:struct_go_proto", + "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", diff --git a/runtime/internal/BUILD.bazel b/runtime/internal/BUILD.bazel index 937e66089ee..63565730423 100644 --- a/runtime/internal/BUILD.bazel +++ b/runtime/internal/BUILD.bazel @@ -13,7 +13,6 @@ go_proto_library( name = "internal_go_proto", importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", proto = ":internal_proto", - deps = ["@com_github_golang_protobuf//ptypes/any:go_default_library"], ) go_library( diff --git a/runtime/internal/stream_chunk.pb.go b/runtime/internal/stream_chunk.pb.go index a06c722c167..f4af074808b 100644 --- a/runtime/internal/stream_chunk.pb.go +++ b/runtime/internal/stream_chunk.pb.go @@ -22,11 +22,11 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // StreamError is a response type which is returned when // streaming rpc returns an error. type StreamError struct { - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details" json:"details,omitempty"` + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` + Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 0c3d01bfeba..00dcfd99c5e 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -270,8 +270,8 @@ func TestJSONPbEncoder(t *testing.T) { if strings.ContainsAny(json, " \t\r\n") { t.Errorf("strings.ContainsAny(%q, %q) = true; want false", json, " \t\r\n") } - if strings.Contains(json, "ONE") { - t.Errorf(`strings.Contains(%q, "ONE") = true; want false`, json) + if !strings.Contains(json, "ONE") { + t.Errorf(`strings.Contains(%q, "ONE") = false; want true`, json) } if want := "uint64Value"; !strings.Contains(json, want) { t.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want) diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index 58d291c3738..151f6864d92 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -13,8 +13,8 @@ go_library( ) go_test( - name = "go_default_xtest", + name = "go_default_test", size = "small", srcs = ["trie_test.go"], - deps = [":go_default_library"], + embed = [":go_default_library"], ) From 73373e5bf2362d891afcaa78ee9201b6dc92df96 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Wed, 14 Nov 2018 14:51:26 +0100 Subject: [PATCH 0059/1518] Make Bazel CI failures clearer (#807) * Make Bazel CI failures clearer - don't try to run tests if the BUILD files are out-of-date - run buildifier even if the tests fail, as it may still be useful - use a parameter to hold Bazel config to simplify config.yml - ignore the vendor/ directory when running Gazelle (otherwise it will fail if you've used `dep` to create vendor/) * Add Bazel invocation to CONTRIBUTING.md --- .circleci/config.yml | 36 ++++++++++++++++++++++-------------- BUILD | 1 + CONTRIBUTING.md | 4 +++- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 150455b5c21..b4189cd4638 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -50,23 +50,32 @@ jobs: - run: dep ensure --vendor-only - run: go get golang.org/x/lint/golint - run: make lint - bazel_lint: + bazel: docker: - image: l.gcr.io/google/bazel:latest working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway steps: - checkout - - run: 'bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:buildifier_check || - (echo "Bazel files not formatted, please run \`bazel run :buildifier\`"; exit 1)' - - run: 'test -z "$(bazel --output_base=$HOME/.cache/_grpc_gateway_bazel run //:gazelle_diff)" || - (echo "Bazel files out-of-date, please run \`bazel run :gazelle_diff\`"; exit 1)' - bazel_test: - docker: - - image: l.gcr.io/google/bazel:latest - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway - steps: - - checkout - - run: bazel --output_base=$HOME/.cache/_grpc_gateway_bazel test --test_output=errors --features=race //... + - run: + name: Create Bazel config file (.bazelrc) + command: | + cat > .bazelrc << EOF + startup --output_base $HOME/.cache/_grpc_gateway_bazel + build --test_output errors + build --features race + EOF + - run: + name: Check that Bazel BUILD files are up-to-date + command: 'test -z "$(bazel run //:gazelle_diff)" || + (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle_fix\`" >&2; exit 1)' + - run: + name: Run tests with Bazel + command: bazel test //... + - run: + name: Check formatting of Bazel BUILD files + command: 'bazel run //:buildifier_check || + (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' + when: always build_linux_release: docker: - image: jfbrandhorst/grpc-gateway-build-env @@ -153,8 +162,7 @@ workflows: - node_test - generate - lint - - bazel_lint - - bazel_test + - bazel - build_linux_release: filters: branches: diff --git a/BUILD b/BUILD index b72e9743bd8..a9997cb5a0e 100644 --- a/BUILD +++ b/BUILD @@ -11,6 +11,7 @@ buildifier( ) # gazelle:exclude third_party +# gazelle:exclude vendor gazelle( name = "gazelle_diff", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8bcfb2794ca..a7d09ce6cb0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,10 +24,12 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ +docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' +docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ + l.gcr.io/google/bazel -c 'bazel run :gazelle_fix; bazel run :buildifier' ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. From 165983158a39a3d3f7518f633e6260caba5194e8 Mon Sep 17 00:00:00 2001 From: Mayank Date: Wed, 14 Nov 2018 19:23:00 +0530 Subject: [PATCH 0060/1518] Adding support for more well known types in descriptor (#809) --- protoc-gen-grpc-gateway/descriptor/types.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 5cf9d597fb0..ada554b53a8 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -451,7 +451,16 @@ var ( } wellKnownTypeConv = map[string]string{ - ".google.protobuf.Timestamp": "runtime.Timestamp", - ".google.protobuf.Duration": "runtime.Duration", + ".google.protobuf.Timestamp": "runtime.Timestamp", + ".google.protobuf.Duration": "runtime.Duration", + ".google.protobuf.StringValue": "runtime.StringValue", + ".google.protobuf.BytesValue": "runtime.BytesValue", + ".google.protobuf.Int32Value": "runtime.Int32Value", + ".google.protobuf.UInt32Value": "runtime.UInt32Value", + ".google.protobuf.Int64Value": "runtime.Int64Value", + ".google.protobuf.UInt64Value": "runtime.UInt64Value", + ".google.protobuf.FloatValue": "runtime.FloatValue", + ".google.protobuf.DoubleValue": "runtime.DoubleValue", + ".google.protobuf.BoolValue": "runtime.BoolValue", } ) From da4a1fc0406b9914a11b3e47f18d59779f8f025e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 15 Nov 2018 17:25:10 +0000 Subject: [PATCH 0061/1518] Corret wellKnownTypeConv function references Fixes #808 --- protoc-gen-grpc-gateway/descriptor/types.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index ada554b53a8..c9b4a561b78 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -453,14 +453,14 @@ var ( wellKnownTypeConv = map[string]string{ ".google.protobuf.Timestamp": "runtime.Timestamp", ".google.protobuf.Duration": "runtime.Duration", - ".google.protobuf.StringValue": "runtime.StringValue", - ".google.protobuf.BytesValue": "runtime.BytesValue", - ".google.protobuf.Int32Value": "runtime.Int32Value", - ".google.protobuf.UInt32Value": "runtime.UInt32Value", - ".google.protobuf.Int64Value": "runtime.Int64Value", - ".google.protobuf.UInt64Value": "runtime.UInt64Value", - ".google.protobuf.FloatValue": "runtime.FloatValue", - ".google.protobuf.DoubleValue": "runtime.DoubleValue", - ".google.protobuf.BoolValue": "runtime.BoolValue", + ".google.protobuf.StringValue": "runtime.String", + ".google.protobuf.BytesValue": "runtime.Bytes", + ".google.protobuf.Int32Value": "runtime.Int32", + ".google.protobuf.UInt32Value": "runtime.UInt32", + ".google.protobuf.Int64Value": "runtime.Int64", + ".google.protobuf.UInt64Value": "runtime.UInt64", + ".google.protobuf.FloatValue": "runtime.Float", + ".google.protobuf.DoubleValue": "runtime.Double", + ".google.protobuf.BoolValue": "runtime.Bool", } ) From 09679ff1afbd9924a2c9d23c37fafde9655f36fa Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 16 Nov 2018 10:33:30 +0000 Subject: [PATCH 0062/1518] Revert "Adding support for more well known types in descriptor" (#813) * Revert "Adding support for more well known types in descriptor (#809)" This reverts commit 165983158a39a3d3f7518f633e6260caba5194e8. --- protoc-gen-grpc-gateway/descriptor/types.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index c9b4a561b78..a412b2bcf67 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -453,14 +453,5 @@ var ( wellKnownTypeConv = map[string]string{ ".google.protobuf.Timestamp": "runtime.Timestamp", ".google.protobuf.Duration": "runtime.Duration", - ".google.protobuf.StringValue": "runtime.String", - ".google.protobuf.BytesValue": "runtime.Bytes", - ".google.protobuf.Int32Value": "runtime.Int32", - ".google.protobuf.UInt32Value": "runtime.UInt32", - ".google.protobuf.Int64Value": "runtime.Int64", - ".google.protobuf.UInt64Value": "runtime.UInt64", - ".google.protobuf.FloatValue": "runtime.Float", - ".google.protobuf.DoubleValue": "runtime.Double", - ".google.protobuf.BoolValue": "runtime.Bool", } ) From 2138c1f28fd08e1bda9f3ed65dac85f8884485cf Mon Sep 17 00:00:00 2001 From: micnncim Date: Sat, 17 Nov 2018 09:47:53 +0900 Subject: [PATCH 0063/1518] Fix protobuf repository's owner name on README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e10f1b660a1..b32b0e76213 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ First you need to install ProtocolBuffers 3.0.0 or later. ```sh mkdir tmp cd tmp -git clone https://github.com/google/protobuf +git clone https://github.com/protocolbuffers/protobuf cd protobuf ./autogen.sh ./configure From a73f992ba916778e4277a13d24bb29aeee290511 Mon Sep 17 00:00:00 2001 From: Mayank Date: Mon, 19 Nov 2018 16:39:37 +0530 Subject: [PATCH 0064/1518] Added support for more WKT (#816) * Added support for more WKT * Lint fix: added comments on exported functions * Lint fix: added comments on exported functions * Added end to end example to show support of StringValue in url option template * updated more example protos; removed server and proxy for now * Updated convert.go to fix float and other wkt * brazel build fix --- examples/pbwrappers/helloworld/BUILD.bazel | 39 + .../pbwrappers/helloworld/helloworld.pb.go | 288 ++++++++ .../pbwrappers/helloworld/helloworld.pb.gw.go | 664 ++++++++++++++++++ .../pbwrappers/helloworld/helloworld.proto | 58 ++ protoc-gen-grpc-gateway/descriptor/types.go | 9 + runtime/BUILD.bazel | 1 + runtime/convert.go | 58 ++ 7 files changed, 1117 insertions(+) create mode 100644 examples/pbwrappers/helloworld/BUILD.bazel create mode 100644 examples/pbwrappers/helloworld/helloworld.pb.go create mode 100644 examples/pbwrappers/helloworld/helloworld.pb.gw.go create mode 100644 examples/pbwrappers/helloworld/helloworld.proto diff --git a/examples/pbwrappers/helloworld/BUILD.bazel b/examples/pbwrappers/helloworld/BUILD.bazel new file mode 100644 index 00000000000..0b6c67f8074 --- /dev/null +++ b/examples/pbwrappers/helloworld/BUILD.bazel @@ -0,0 +1,39 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +proto_library( + name = "helloworld_proto", + srcs = ["helloworld.proto"], + visibility = ["//visibility:public"], + deps = [ + "@com_google_protobuf//:wrappers_proto", + "@go_googleapis//google/api:annotations_proto", + ], +) + +go_proto_library( + name = "helloworld_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/pbwrappers/helloworld", + proto = ":helloworld_proto", + visibility = ["//visibility:public"], + deps = ["@go_googleapis//google/api:annotations_go_proto"], +) + +go_library( + name = "go_default_library", + srcs = ["helloworld.pb.gw.go"], + embed = [":helloworld_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/pbwrappers/helloworld", + visibility = ["//visibility:public"], + deps = [ + "//runtime:go_default_library", + "//utilities:go_default_library", + "@com_github_golang_protobuf//proto:go_default_library", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//grpclog:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + "@org_golang_x_net//context:go_default_library", + ], +) diff --git a/examples/pbwrappers/helloworld/helloworld.pb.go b/examples/pbwrappers/helloworld/helloworld.pb.go new file mode 100644 index 00000000000..9225dfd1f88 --- /dev/null +++ b/examples/pbwrappers/helloworld/helloworld.pb.go @@ -0,0 +1,288 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: helloworld.proto + +package helloworld + +import ( + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type HelloRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + StrVal *wrappers.StringValue `protobuf:"bytes,2,opt,name=strVal,proto3" json:"strVal,omitempty"` + FloatVal *wrappers.FloatValue `protobuf:"bytes,3,opt,name=floatVal,proto3" json:"floatVal,omitempty"` + DoubleVal *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=doubleVal,proto3" json:"doubleVal,omitempty"` + BoolVal *wrappers.BoolValue `protobuf:"bytes,5,opt,name=boolVal,proto3" json:"boolVal,omitempty"` + BytesVal *wrappers.BytesValue `protobuf:"bytes,6,opt,name=bytesVal,proto3" json:"bytesVal,omitempty"` + Int32Val *wrappers.Int32Value `protobuf:"bytes,7,opt,name=int32Val,proto3" json:"int32Val,omitempty"` + Uint32Val *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=uint32Val,proto3" json:"uint32Val,omitempty"` + Int64Val *wrappers.Int64Value `protobuf:"bytes,9,opt,name=int64Val,proto3" json:"int64Val,omitempty"` + Uint64Val *wrappers.UInt64Value `protobuf:"bytes,10,opt,name=uint64Val,proto3" json:"uint64Val,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HelloRequest) Reset() { *m = HelloRequest{} } +func (m *HelloRequest) String() string { return proto.CompactTextString(m) } +func (*HelloRequest) ProtoMessage() {} +func (*HelloRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_17b8c58d586b62f2, []int{0} +} + +func (m *HelloRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HelloRequest.Unmarshal(m, b) +} +func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic) +} +func (m *HelloRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_HelloRequest.Merge(m, src) +} +func (m *HelloRequest) XXX_Size() int { + return xxx_messageInfo_HelloRequest.Size(m) +} +func (m *HelloRequest) XXX_DiscardUnknown() { + xxx_messageInfo_HelloRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_HelloRequest proto.InternalMessageInfo + +func (m *HelloRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *HelloRequest) GetStrVal() *wrappers.StringValue { + if m != nil { + return m.StrVal + } + return nil +} + +func (m *HelloRequest) GetFloatVal() *wrappers.FloatValue { + if m != nil { + return m.FloatVal + } + return nil +} + +func (m *HelloRequest) GetDoubleVal() *wrappers.DoubleValue { + if m != nil { + return m.DoubleVal + } + return nil +} + +func (m *HelloRequest) GetBoolVal() *wrappers.BoolValue { + if m != nil { + return m.BoolVal + } + return nil +} + +func (m *HelloRequest) GetBytesVal() *wrappers.BytesValue { + if m != nil { + return m.BytesVal + } + return nil +} + +func (m *HelloRequest) GetInt32Val() *wrappers.Int32Value { + if m != nil { + return m.Int32Val + } + return nil +} + +func (m *HelloRequest) GetUint32Val() *wrappers.UInt32Value { + if m != nil { + return m.Uint32Val + } + return nil +} + +func (m *HelloRequest) GetInt64Val() *wrappers.Int64Value { + if m != nil { + return m.Int64Val + } + return nil +} + +func (m *HelloRequest) GetUint64Val() *wrappers.UInt64Value { + if m != nil { + return m.Uint64Val + } + return nil +} + +type HelloReply struct { + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HelloReply) Reset() { *m = HelloReply{} } +func (m *HelloReply) String() string { return proto.CompactTextString(m) } +func (*HelloReply) ProtoMessage() {} +func (*HelloReply) Descriptor() ([]byte, []int) { + return fileDescriptor_17b8c58d586b62f2, []int{1} +} + +func (m *HelloReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HelloReply.Unmarshal(m, b) +} +func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic) +} +func (m *HelloReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_HelloReply.Merge(m, src) +} +func (m *HelloReply) XXX_Size() int { + return xxx_messageInfo_HelloReply.Size(m) +} +func (m *HelloReply) XXX_DiscardUnknown() { + xxx_messageInfo_HelloReply.DiscardUnknown(m) +} + +var xxx_messageInfo_HelloReply proto.InternalMessageInfo + +func (m *HelloReply) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func init() { + proto.RegisterType((*HelloRequest)(nil), "helloworld.HelloRequest") + proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") +} + +func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) } + +var fileDescriptor_17b8c58d586b62f2 = []byte{ + // 468 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x8a, 0xd4, 0x40, + 0x14, 0x85, 0xe9, 0xd8, 0xf6, 0x4f, 0x8d, 0x0b, 0x29, 0xa4, 0x09, 0xb1, 0x91, 0xa1, 0x17, 0x32, + 0xab, 0x04, 0x7a, 0x9a, 0x11, 0x5c, 0x0e, 0xe2, 0xcf, 0x36, 0x83, 0xb3, 0xe8, 0x5d, 0x85, 0xb9, + 0xd3, 0x06, 0x6a, 0x52, 0xb1, 0x7e, 0x1c, 0xc2, 0x90, 0x8d, 0x3b, 0x77, 0x82, 0xef, 0xe0, 0xeb, + 0xb8, 0x70, 0xe9, 0xd6, 0x07, 0x91, 0xba, 0xa9, 0x4a, 0x45, 0xc6, 0xb8, 0x4b, 0xe5, 0x9c, 0xef, + 0x9e, 0x4a, 0xee, 0x21, 0x8f, 0x3f, 0x00, 0xe7, 0xe2, 0x56, 0x48, 0x7e, 0x95, 0xd6, 0x52, 0x68, + 0x41, 0x49, 0x78, 0x93, 0xac, 0x0f, 0x42, 0x1c, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, + 0x33, 0x5d, 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0x99, 0x53, 0xf1, 0x54, 0x98, 0xeb, 0xec, 0x56, 0xb2, + 0xba, 0x06, 0xe9, 0xf4, 0xcd, 0xf7, 0x29, 0x79, 0xf4, 0xd6, 0x0e, 0xcb, 0xe1, 0xa3, 0x01, 0xa5, + 0x29, 0x25, 0xd3, 0x8a, 0xdd, 0x40, 0x3c, 0x39, 0x9e, 0x9c, 0x2c, 0x73, 0x7c, 0xa6, 0x3b, 0x32, + 0x53, 0x5a, 0x5e, 0x32, 0x1e, 0x47, 0xc7, 0x93, 0x93, 0xa3, 0xed, 0x3a, 0xed, 0xa6, 0xa6, 0x7e, + 0x6a, 0x7a, 0xa1, 0x65, 0x59, 0x1d, 0x2e, 0x19, 0x37, 0x90, 0x3b, 0x2f, 0x7d, 0x41, 0x16, 0xd7, + 0x5c, 0x30, 0x6d, 0xb9, 0x07, 0xc8, 0x3d, 0xbd, 0xc7, 0xbd, 0x76, 0x06, 0x03, 0x79, 0x6f, 0xa6, + 0x2f, 0xc9, 0xf2, 0x4a, 0x98, 0x82, 0x83, 0x25, 0xa7, 0x23, 0x89, 0xaf, 0xbc, 0xc3, 0x40, 0x1e, + 0xec, 0x74, 0x47, 0xe6, 0x85, 0x10, 0xdc, 0x92, 0x0f, 0x91, 0x4c, 0xee, 0x91, 0xe7, 0x9d, 0x6e, + 0x20, 0xf7, 0x56, 0x7b, 0xd5, 0xa2, 0xd1, 0xa0, 0x2c, 0x36, 0x1b, 0xb9, 0xea, 0xb9, 0x33, 0xd8, + 0xab, 0x7a, 0xb3, 0x05, 0xcb, 0x4a, 0x9f, 0x6e, 0x2d, 0x38, 0x1f, 0x01, 0xdf, 0x39, 0x83, 0x05, + 0xbd, 0xd9, 0x7e, 0xa3, 0xe9, 0xc9, 0xc5, 0xc8, 0x37, 0xbe, 0x1f, 0xa0, 0xc1, 0xee, 0x42, 0xcf, + 0x76, 0x16, 0x5d, 0x8e, 0x87, 0xa2, 0xc1, 0x85, 0xe2, 0xb3, 0x0f, 0xed, 0x48, 0xf2, 0x9f, 0x50, + 0x8f, 0x06, 0xfb, 0xe6, 0x39, 0x21, 0xae, 0x27, 0x35, 0x6f, 0x68, 0x4c, 0xe6, 0x37, 0xa0, 0x14, + 0x3b, 0xf8, 0xa2, 0xf8, 0xe3, 0xf6, 0x57, 0x44, 0xe6, 0x6f, 0x24, 0x80, 0x06, 0x49, 0x7f, 0x44, + 0x64, 0x71, 0xc1, 0x1a, 0xe4, 0x68, 0x9c, 0x0e, 0x6a, 0x3c, 0xac, 0x5c, 0xb2, 0xfa, 0x87, 0x52, + 0xf3, 0x66, 0xf3, 0x35, 0xfa, 0xfc, 0xf3, 0xf7, 0xb7, 0xe8, 0x4b, 0x44, 0x8f, 0x32, 0xc5, 0x9a, + 0xec, 0xce, 0x96, 0xb1, 0xdd, 0xaf, 0xe8, 0x13, 0x3c, 0x2a, 0x2d, 0x3f, 0x31, 0x9e, 0xdd, 0x75, + 0x75, 0x6b, 0xf7, 0x09, 0x8d, 0xf1, 0x3d, 0xf6, 0x08, 0x15, 0xdf, 0xa8, 0x76, 0xbf, 0xa6, 0x09, + 0x6a, 0x5d, 0x51, 0x50, 0xec, 0x3b, 0xd3, 0xee, 0x63, 0xba, 0x42, 0xd5, 0xd6, 0x01, 0x35, 0xd7, + 0x8b, 0x30, 0x13, 0x17, 0xde, 0x49, 0x6e, 0xf5, 0x41, 0xc3, 0xbd, 0xa0, 0xe6, 0x37, 0x14, 0xf2, + 0x4c, 0x10, 0x4d, 0x50, 0x07, 0xe4, 0xd9, 0xce, 0x93, 0xf8, 0x9b, 0xff, 0x26, 0x9d, 0xd8, 0x2f, + 0xa1, 0x2d, 0x66, 0xb8, 0xa6, 0xd3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x65, 0xa5, 0x95, 0xa8, + 0x13, 0x04, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// GreeterClient is the client API for Greeter service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type GreeterClient interface { + SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) +} + +type greeterClient struct { + cc *grpc.ClientConn +} + +func NewGreeterClient(cc *grpc.ClientConn) GreeterClient { + return &greeterClient{cc} +} + +func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) { + out := new(HelloReply) + err := c.cc.Invoke(ctx, "/helloworld.Greeter/SayHello", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// GreeterServer is the server API for Greeter service. +type GreeterServer interface { + SayHello(context.Context, *HelloRequest) (*HelloReply, error) +} + +func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { + s.RegisterService(&_Greeter_serviceDesc, srv) +} + +func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HelloRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GreeterServer).SayHello(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/helloworld.Greeter/SayHello", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Greeter_serviceDesc = grpc.ServiceDesc{ + ServiceName: "helloworld.Greeter", + HandlerType: (*GreeterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SayHello", + Handler: _Greeter_SayHello_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "helloworld.proto", +} diff --git a/examples/pbwrappers/helloworld/helloworld.pb.gw.go b/examples/pbwrappers/helloworld/helloworld.pb.gw.go new file mode 100644 index 00000000000..c09fe741ece --- /dev/null +++ b/examples/pbwrappers/helloworld/helloworld.pb.gw.go @@ -0,0 +1,664 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: helloworld.proto + +/* +Package helloworld is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package helloworld + +import ( + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray + +var ( + filter_Greeter_SayHello_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_1 = &utilities.DoubleArray{Encoding: map[string]int{"strVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["strVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "strVal") + } + + protoReq.StrVal, err = runtime.StringValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "strVal", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_2 = &utilities.DoubleArray{Encoding: map[string]int{"floatVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["floatVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "floatVal") + } + + protoReq.FloatVal, err = runtime.FloatValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "floatVal", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_3 = &utilities.DoubleArray{Encoding: map[string]int{"doubleVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["doubleVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "doubleVal") + } + + protoReq.DoubleVal, err = runtime.DoubleValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "doubleVal", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_4 = &utilities.DoubleArray{Encoding: map[string]int{"boolVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["boolVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "boolVal") + } + + protoReq.BoolVal, err = runtime.BoolValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "boolVal", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_5 = &utilities.DoubleArray{Encoding: map[string]int{"bytesVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["bytesVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bytesVal") + } + + protoReq.BytesVal, err = runtime.BytesValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bytesVal", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_5); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_6 = &utilities.DoubleArray{Encoding: map[string]int{"int32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int32Val") + } + + protoReq.Int32Val, err = runtime.Int32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32Val", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_6); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_7 = &utilities.DoubleArray{Encoding: map[string]int{"uint32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint32Val") + } + + protoReq.Uint32Val, err = runtime.UInt32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32Val", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_7); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_8 = &utilities.DoubleArray{Encoding: map[string]int{"int64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int64Val") + } + + protoReq.Int64Val, err = runtime.Int64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64Val", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_8); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_Greeter_SayHello_9 = &utilities.DoubleArray{Encoding: map[string]int{"uint64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler, client GreeterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint64Val") + } + + protoReq.Uint64Val, err = runtime.UInt64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64Val", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_9); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SayHello(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +// RegisterGreeterHandlerFromEndpoint is same as RegisterGreeterHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterGreeterHandler(ctx, mux, conn) +} + +// RegisterGreeterHandler registers the http handlers for service Greeter to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterGreeterHandlerClient(ctx, mux, NewGreeterClient(conn)) +} + +// RegisterGreeterHandlerClient registers the http handlers for service Greeter +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GreeterClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GreeterClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "GreeterClient" to call the correct interceptors. +func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GreeterClient) error { + + mux.Handle("GET", pattern_Greeter_SayHello_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_2(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_3(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_4(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_5(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_6(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_7, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_7(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_7(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_8, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_8(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_8(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_9, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Greeter_SayHello_9(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_9(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "")) + + pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "")) + + pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "")) + + pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "")) + + pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "")) + + pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "")) + + pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "")) + + pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "")) + + pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "")) + + pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "")) +) + +var ( + forward_Greeter_SayHello_0 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_1 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_2 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_3 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_4 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_5 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_6 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_7 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_8 = runtime.ForwardResponseMessage + + forward_Greeter_SayHello_9 = runtime.ForwardResponseMessage +) diff --git a/examples/pbwrappers/helloworld/helloworld.proto b/examples/pbwrappers/helloworld/helloworld.proto new file mode 100644 index 00000000000..a685c65b8bc --- /dev/null +++ b/examples/pbwrappers/helloworld/helloworld.proto @@ -0,0 +1,58 @@ +syntax = "proto3"; + +package helloworld; + +import "google/api/annotations.proto"; +import "google/protobuf/wrappers.proto"; + +service Greeter { + rpc SayHello (HelloRequest) returns (HelloReply) { + option (google.api.http) = { + get: "/say/{name}" + additional_bindings: { + get: "/say/strval/{strVal}", + } + additional_bindings: { + get: "/say/floatval/{floatVal}", + } + additional_bindings: { + get: "/say/doubleval/{doubleVal}", + } + additional_bindings: { + get: "/say/boolval/{boolVal}", + } + additional_bindings: { + get: "/say/bytesval/{bytesVal}", + } + additional_bindings: { + get: "/say/int32val/{int32Val}", + } + additional_bindings: { + get: "/say/uint32val/{uint32Val}", + } + additional_bindings: { + get: "/say/int64val/{int64Val}", + } + additional_bindings: { + get: "/say/uint64val/{uint64Val}", + } + }; + } +} + +message HelloRequest { + string name = 1; + google.protobuf.StringValue strVal = 2; + google.protobuf.FloatValue floatVal = 3; + google.protobuf.DoubleValue doubleVal = 4; + google.protobuf.BoolValue boolVal = 5; + google.protobuf.BytesValue bytesVal = 6; + google.protobuf.Int32Value int32Val = 7; + google.protobuf.UInt32Value uint32Val = 8; + google.protobuf.Int64Value int64Val = 9; + google.protobuf.UInt64Value uint64Val = 10; +} + +message HelloReply { + string message = 1; +} diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index a412b2bcf67..4aa75f85dbf 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -453,5 +453,14 @@ var ( wellKnownTypeConv = map[string]string{ ".google.protobuf.Timestamp": "runtime.Timestamp", ".google.protobuf.Duration": "runtime.Duration", + ".google.protobuf.StringValue": "runtime.StringValue", + ".google.protobuf.FloatValue": "runtime.FloatValue", + ".google.protobuf.DoubleValue": "runtime.DoubleValue", + ".google.protobuf.BoolValue": "runtime.BoolValue", + ".google.protobuf.BytesValue": "runtime.BytesValue", + ".google.protobuf.Int32Value": "runtime.Int32Value", + ".google.protobuf.UInt32Value": "runtime.UInt32Value", + ".google.protobuf.Int64Value": "runtime.Int64Value", + ".google.protobuf.UInt64Value": "runtime.UInt64Value", } ) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 66a8999f2a2..252c4527853 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -30,6 +30,7 @@ go_library( "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", diff --git a/runtime/convert.go b/runtime/convert.go index bd54ba12bec..a5b3bd6a792 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -9,6 +9,7 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/timestamp" + "github.com/golang/protobuf/ptypes/wrappers" ) // String just returns the given string. @@ -252,3 +253,60 @@ func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) { } return values, nil } + +/* + Support fot google.protobuf.wrappers on top of primitive types +*/ + +// StringValue well-known type support as wrapper around string type +func StringValue(val string) (*wrappers.StringValue, error) { + return &wrappers.StringValue{Value: val}, nil +} + +// FloatValue well-known type support as wrapper around float32 type +func FloatValue(val string) (*wrappers.FloatValue, error) { + parsedVal, err := Float32(val) + return &wrappers.FloatValue{Value: parsedVal}, err +} + +// DoubleValue well-known type support as wrapper around float64 type +func DoubleValue(val string) (*wrappers.DoubleValue, error) { + parsedVal, err := Float64(val) + return &wrappers.DoubleValue{Value: parsedVal}, err +} + +// BoolValue well-known type support as wrapper around bool type +func BoolValue(val string) (*wrappers.BoolValue, error) { + parsedVal, err := Bool(val) + return &wrappers.BoolValue{Value: parsedVal}, err +} + +// Int32Value well-known type support as wrapper around int32 type +func Int32Value(val string) (*wrappers.Int32Value, error) { + parsedVal, err := Int32(val) + return &wrappers.Int32Value{Value: parsedVal}, err +} + +// UInt32Value well-known type support as wrapper around uint32 type +func UInt32Value(val string) (*wrappers.UInt32Value, error) { + parsedVal, err := Uint32(val) + return &wrappers.UInt32Value{Value: parsedVal}, err +} + +// Int64Value well-known type support as wrapper around int64 type +func Int64Value(val string) (*wrappers.Int64Value, error) { + parsedVal, err := Int64(val) + return &wrappers.Int64Value{Value: parsedVal}, err +} + +// UInt64Value well-known type support as wrapper around uint64 type +func UInt64Value(val string) (*wrappers.UInt64Value, error) { + parsedVal, err := Uint64(val) + return &wrappers.UInt64Value{Value: parsedVal}, err +} + +// BytesValue well-known type support as wrapper around bytes[] type +func BytesValue(val string) (*wrappers.BytesValue, error) { + parsedVal, err := Bytes(val) + return &wrappers.BytesValue{Value: parsedVal}, err +} From d8ad87ee91e1062c2a6117bda0b5523e9cb949ef Mon Sep 17 00:00:00 2001 From: Roman Azami Date: Mon, 19 Nov 2018 10:46:39 -0800 Subject: [PATCH 0065/1518] Feature/patch2 rebased (#812) * Updated Patch behavior * Patch update with regenerated BUILD files * Added documentation for PATCH usage * Added some curl examples for PATCH --- Gopkg.lock | 63 ++- Makefile | 2 +- docs/_docs/patch.md | 66 +++ examples/clients/abe/BUILD.bazel | 2 + .../abe/a_bit_of_everything_service_api.go | 231 ++++++++ .../abe/examplepb_update_v2_request.go | 18 + examples/clients/abe/protobuf_field_mask.go | 18 + examples/integration/BUILD.bazel | 1 + examples/integration/integration_test.go | 188 +++++++ examples/proto/examplepb/BUILD.bazel | 1 + .../proto/examplepb/a_bit_of_everything.pb.go | 493 +++++++++++------- .../examplepb/a_bit_of_everything.pb.gw.go | 241 ++++++++- .../proto/examplepb/a_bit_of_everything.proto | 23 + .../a_bit_of_everything.swagger.json | 168 ++++++ .../proto/examplepb/echo_service.pb.gw.go | 6 +- .../proto/examplepb/flow_combination.pb.gw.go | 84 ++- examples/proto/examplepb/stream.pb.gw.go | 12 +- .../unannotated_echo_service.pb.gw.go | 6 +- examples/proto/examplepb/wrappers.pb.gw.go | 6 +- examples/server/BUILD.bazel | 11 +- examples/server/a_bit_of_everything.go | 38 +- examples/server/fieldmask_helper.go | 55 ++ examples/server/fieldmask_helper_test.go | 92 ++++ .../gengateway/BUILD.bazel | 1 + .../gengateway/template.go | 58 ++- .../gengateway/template_test.go | 4 +- runtime/BUILD.bazel | 4 + runtime/fieldmask.go | 70 +++ runtime/fieldmask_test.go | 87 ++++ utilities/BUILD.bazel | 1 + utilities/readerfactory.go | 20 + 31 files changed, 1846 insertions(+), 224 deletions(-) create mode 100644 docs/_docs/patch.md create mode 100644 examples/clients/abe/examplepb_update_v2_request.go create mode 100644 examples/clients/abe/protobuf_field_mask.go create mode 100644 examples/server/fieldmask_helper.go create mode 100644 examples/server/fieldmask_helper_test.go create mode 100644 runtime/fieldmask.go create mode 100644 runtime/fieldmask_test.go create mode 100644 utilities/readerfactory.go diff --git a/Gopkg.lock b/Gopkg.lock index ca212aeaa81..1bbc8d61516 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,21 +2,28 @@ [[projects]] + digest = "1:2cd7915ab26ede7d95b8749e6b1f933f1c6d5398030684e6505940a10f31cfda" name = "github.com/ghodss/yaml" packages = ["."] + pruneopts = "UT" revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" [[projects]] + digest = "1:5cae6c173646d9230aecf8074c171edb4fb9a37f074c5c89ba2fece20b6703b6" name = "github.com/go-resty/resty" packages = ["."] + pruneopts = "UT" revision = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e" [[projects]] + digest = "1:1ba1d79f2810270045c328ae5d674321db34e3aae468eb4233883b473c5c0467" name = "github.com/golang/glog" packages = ["."] + pruneopts = "UT" revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" [[projects]] + digest = "1:77303a120dcd145972685b3465e58e1a0910544fcb323ca24755e073c1ea6d2c" name = "github.com/golang/protobuf" packages = [ "jsonpb", @@ -33,16 +40,20 @@ "ptypes/empty", "ptypes/struct", "ptypes/timestamp", - "ptypes/wrappers" + "ptypes/wrappers", ] + pruneopts = "UT" revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" [[projects]] + digest = "1:d673e95129a1107bfd04e093751a5e1267faabc27d218d824fb013f57ac08f55" name = "github.com/rogpeppe/fastuuid" packages = ["."] + pruneopts = "UT" revision = "6724a57986aff9bff1a1770e9347036def7c89f6" [[projects]] + digest = "1:c0b7af9789502fec69b7ab40035a2180e43b9663c32101084ba51c844ea416e9" name = "golang.org/x/net" packages = [ "context", @@ -52,17 +63,21 @@ "idna", "internal/timeseries", "publicsuffix", - "trace" + "trace", ] + pruneopts = "UT" revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" [[projects]] branch = "master" + digest = "1:7ba061af4131fb44b30448572acd0d6fefbf63a61b97b7ef1dea0be5871c2742" name = "golang.org/x/sys" packages = ["unix"] + pruneopts = "UT" revision = "66b7b1311ac80bbafcd2daeef9a5e6e2cd1e2399" [[projects]] + digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" name = "golang.org/x/text" packages = [ "collate", @@ -78,22 +93,26 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable" + "unicode/rangetable", ] + pruneopts = "UT" revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" version = "v0.3.0" [[projects]] + digest = "1:46be2f6b4d4e4b89f8102668902e68013234da1684fc78da602da95e745f285d" name = "google.golang.org/genproto" packages = [ "googleapis/api/annotations", "googleapis/rpc/errdetails", "googleapis/rpc/status", - "protobuf/field_mask" + "protobuf/field_mask", ] + pruneopts = "UT" revision = "383e8b2c3b9e36c4076b235b32537292176bae20" [[projects]] + digest = "1:c3ad9841823db6da420a5625b367913b4ff54bbe60e8e3c98bd20e243e62e2d2" name = "google.golang.org/grpc" packages = [ ".", @@ -121,19 +140,51 @@ "resolver/passthrough", "stats", "status", - "tap" + "tap", ] + pruneopts = "UT" revision = "2e463a05d100327ca47ac218281906921038fd95" version = "v1.16.0" [[projects]] + digest = "1:6570992c02a2137a20be83990a979b6fe892e20ecdc6b756449989b2a7efb8ae" name = "gopkg.in/yaml.v2" packages = ["."] + pruneopts = "UT" revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "869b43d6e47c7434098120dae9352bde379feae8504ece065ee51b78c6aca0fa" + input-imports = [ + "github.com/ghodss/yaml", + "github.com/go-resty/resty", + "github.com/golang/glog", + "github.com/golang/protobuf/jsonpb", + "github.com/golang/protobuf/proto", + "github.com/golang/protobuf/protoc-gen-go", + "github.com/golang/protobuf/protoc-gen-go/descriptor", + "github.com/golang/protobuf/protoc-gen-go/generator", + "github.com/golang/protobuf/protoc-gen-go/plugin", + "github.com/golang/protobuf/ptypes", + "github.com/golang/protobuf/ptypes/any", + "github.com/golang/protobuf/ptypes/duration", + "github.com/golang/protobuf/ptypes/empty", + "github.com/golang/protobuf/ptypes/struct", + "github.com/golang/protobuf/ptypes/timestamp", + "github.com/golang/protobuf/ptypes/wrappers", + "github.com/rogpeppe/fastuuid", + "golang.org/x/net/context", + "google.golang.org/genproto/googleapis/api/annotations", + "google.golang.org/genproto/googleapis/rpc/errdetails", + "google.golang.org/genproto/googleapis/rpc/status", + "google.golang.org/genproto/protobuf/field_mask", + "google.golang.org/grpc", + "google.golang.org/grpc/codes", + "google.golang.org/grpc/connectivity", + "google.golang.org/grpc/grpclog", + "google.golang.org/grpc/metadata", + "google.golang.org/grpc/status", + ] solver-name = "gps-cdcl" solver-version = 1 diff --git a/Makefile b/Makefile index 5cd992cd635..865058628ef 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) -PKGMAP=Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/proto/sub/message.proto=$(PKG)/examples/proto/sub +PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/proto/sub/message.proto=$(PKG)/examples/proto/sub ADDITIONAL_GW_FLAGS= ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md new file mode 100644 index 00000000000..c395b7f61c2 --- /dev/null +++ b/docs/_docs/patch.md @@ -0,0 +1,66 @@ +--- +category: documentation +--- + +# Patch Feature +The HTTP PATCH method allows a resource to be partially updated. + +The idea, If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. +This handles two scenarios: +- The FieldMask is hidden from the REST request (as in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L286) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the [PatchWithFieldMaskInBody](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L295) example). For this case, a check is made as to whether the FieldMask is nil/empty prior to populating with the request body. + +If it's not nil, then it converts the FieldMask paths from the REST (snake_case) to gRPC (PascalCase) format. Otherwise, it acts like the previous case. + +## Example Usage +1. Create PATCH request. + + The PATCH request needs to include the message and the update mask. +```golang +// UpdateV2Request request for update includes the message and the update mask +message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; +} +``` +2. Define your service in gRPC + +If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. + +```golang +rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; +} +``` + +If you want to use PATCH wtih fieldmask exposed to the REST request then include the entire request message. + +```golang +rpc PatchWithFieldMaskInBody(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; +} +``` + +3. Generate gRPC and reverse-proxy stubs and implement your service. + +## Curl examples + +In the example below we will partially update our ABitOfEverything resource by passing only the field we want to change. Since we are using the endpoint with field mask hidden we only need to pass the field we want to change ("string_value") and it will keep everything else in our resource the same. +``` +curl --data '{"string_value": "strprefix/foo"}' -X PATCH http://address:port/v2/example/a_bit_of_everything/1 +``` + +If we know what fields we want to update then we can use PATCH with field mask approach. For this we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask. +``` +curl --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' -X PATCH http://address:port/v2a/example/a_bit_of_everything/1 +``` \ No newline at end of file diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 6b61fa1b3fa..5df684b7f31 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -18,10 +18,12 @@ go_library( "examplepb_a_bit_of_everything_repeated.go", "examplepb_body.go", "examplepb_numeric_enum.go", + "examplepb_update_v2_request.go", "message_path_enum_nested_path_enum.go", "nested_deep_enum.go", "pathenum_path_enum.go", "protobuf_empty.go", + "protobuf_field_mask.go", "sub_string_message.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe", diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index d1f2a1f95e9..5e8d72779c3 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -812,6 +812,83 @@ func (a ABitOfEverythingServiceApi) Lookup(uuid string) (*ExamplepbABitOfEveryth return successPayload, localVarAPIResponse, err } +/** + * + * + * @param abeUuid + * @param body + * @return *ProtobufEmpty + */ +func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, body ExamplepbUpdateV2Request) (*ProtobufEmpty, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Patch") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + var successPayload = new(ProtobufEmpty) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "PatchWithFieldMaskInBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + /** * * @@ -1038,3 +1115,157 @@ func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEver return successPayload, localVarAPIResponse, err } +/** + * + * + * @param abeUuid + * @param body + * @return *ProtobufEmpty + */ +func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Put") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + var successPayload = new(ProtobufEmpty) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "UpdateV2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + +/** + * + * + * @param abeUuid + * @param body + * @return *ProtobufEmpty + */ +func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Patch") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + var successPayload = new(ProtobufEmpty) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "UpdateV22", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + diff --git a/examples/clients/abe/examplepb_update_v2_request.go b/examples/clients/abe/examplepb_update_v2_request.go new file mode 100644 index 00000000000..9d021f8241c --- /dev/null +++ b/examples/clients/abe/examplepb_update_v2_request.go @@ -0,0 +1,18 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: 1.0 + * Contact: none@example.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package abe + +type ExamplepbUpdateV2Request struct { + + Abe ExamplepbABitOfEverything `json:"abe,omitempty"` + + UpdateMask ProtobufFieldMask `json:"update_mask,omitempty"` +} diff --git a/examples/clients/abe/protobuf_field_mask.go b/examples/clients/abe/protobuf_field_mask.go new file mode 100644 index 00000000000..f30f2531765 --- /dev/null +++ b/examples/clients/abe/protobuf_field_mask.go @@ -0,0 +1,18 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: 1.0 + * Contact: none@example.com + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package abe + +// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, the existing repeated values in the target resource will be overwritten by the new values. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then the existing sub-message in the target resource is overwritten. Given the target message: f { b { d : 1 x : 2 } c : 1 } And an update message: f { b { d : 10 } } then if the field mask is: paths: \"f.b\" then the result will be: f { b { d : 10 } c : 1 } However, if the update mask was: paths: \"f.b.d\" then the result would be: f { b { d : 10 x : 2 } c : 1 } In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. +type ProtobufFieldMask struct { + + // The set of field mask paths. + Paths []string `json:"paths,omitempty"` +} diff --git a/examples/integration/BUILD.bazel b/examples/integration/BUILD.bazel index 287de4b324a..b37ad78ec78 100644 --- a/examples/integration/BUILD.bazel +++ b/examples/integration/BUILD.bazel @@ -23,6 +23,7 @@ go_test( "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes:go_default_library", ], ) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index b488be6ad2f..96b36d04b58 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -22,6 +22,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" ) @@ -555,6 +556,193 @@ func testABELookup(t *testing.T, port int) { } } +// TestABEPatch demonstrates partially updating a resource. +// First, we'll create an ABE resource with known values for string_value and int32_value +// Then, issue a PATCH request updating only the string_value +// Then, GET the resource and verify that string_value is changed, but int32_value isn't +func TestABEPatch(t *testing.T) { + port := 8080 + + // create a record with a known string_value and int32_value + uuid := postABE(t, port, gw.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) + + // issue PATCH request, only updating string_value + req, err := http.NewRequest( + http.MethodPatch, + fmt.Sprintf("http://localhost:%d/v2/example/a_bit_of_everything/%s", port, uuid), + strings.NewReader(`{"string_value": "strprefix/foo"}`), + ) + if err != nil { + t.Fatalf("http.NewRequest(PATCH) failed with %v; want success", err) + } + patchResp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("failed to issue PATCH request: %v", err) + } + if got, want := patchResp.StatusCode, http.StatusOK; got != want { + if body, err := ioutil.ReadAll(patchResp.Body); err != nil { + t.Errorf("patchResp body couldn't be read: %v", err) + } else { + t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) + } + } + + // issue GET request, verifying that string_value is changed and int32_value is not + getRespBody := getABE(t, port, uuid) + if got, want := getRespBody.StringValue, "strprefix/foo"; got != want { + t.Errorf("string_value= %q; want %q", got, want) + } + if got, want := getRespBody.Int32Value, int32(32); got != want { + t.Errorf("int_32_value= %d; want %d", got, want) + } +} + +// TestABEPatchBody demonstrates the ability to specify an update mask within the request body. +func TestABEPatchBody(t *testing.T) { + port := 8080 + + for _, tc := range []struct { + name string + originalValue gw.ABitOfEverything + input gw.UpdateV2Request + want gw.ABitOfEverything + }{ + { + name: "with fieldmask provided", + originalValue: gw.ABitOfEverything{ + StringValue: "rabbit", + SingleNested: &gw.ABitOfEverything_Nested{Name: "some value that will get overwritten", Amount: 345}, + }, + input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + StringValue: "some value that won't get updated because it's not in the field mask", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + }, UpdateMask: &field_mask.FieldMask{Paths: []string{"single_nested"}}}, + want: gw.ABitOfEverything{StringValue: "rabbit", SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}}, + }, + { + name: "with empty fieldmask", + originalValue: gw.ABitOfEverything{ + StringValue: "some value that will get overwritten", + SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 345}, + }, + input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + }, UpdateMask: &field_mask.FieldMask{}}, + want: gw.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + }, + }, + { + name: "with nil fieldmask", + originalValue: gw.ABitOfEverything{ + StringValue: "some value that will get overwritten", + SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 123}, + }, + input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 657}, + }, UpdateMask: nil}, + want: gw.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 657}, + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + originalABE := tc.originalValue + uuid := postABE(t, port, originalABE) + + patchBody := tc.input + patchReq, err := http.NewRequest( + http.MethodPatch, + fmt.Sprintf("http://localhost:%d/v2a/example/a_bit_of_everything/%s", port, uuid), + strings.NewReader(mustMarshal(t, patchBody)), + ) + if err != nil { + t.Fatalf("http.NewRequest(PATCH) failed with %v; want success", err) + } + patchResp, err := http.DefaultClient.Do(patchReq) + if err != nil { + t.Fatalf("failed to issue PATCH request: %v", err) + } + if got, want := patchResp.StatusCode, http.StatusOK; got != want { + if body, err := ioutil.ReadAll(patchResp.Body); err != nil { + t.Errorf("patchResp body couldn't be read: %v", err) + } else { + t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) + } + } + + want, got := tc.want, getABE(t, port, uuid) + got.Uuid = "" // empty out uuid so we don't need to worry about it in comparisons + if !reflect.DeepEqual(want, got) { + t.Errorf("want %v\ngot %v", want, got) + } + }) + } +} + +// mustMarshal marshals the given object into a json string, calling t.Fatal if an error occurs. Useful in testing to +// inline marshalling whenever you don't expect the marshalling to return an error +func mustMarshal(t *testing.T, i interface{}) string { + b, err := json.Marshal(i) + if err != nil { + t.Fatalf("failed to marshal %#v: %v", i, err) + } + + return string(b) +} + +// postABE conveniently creates a new ABE record for ease in testing +func postABE(t *testing.T, port int, abe gw.ABitOfEverything) (uuid string) { + url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + postResp, err := http.Post(url, "application/json", strings.NewReader(mustMarshal(t, abe))) + if err != nil { + t.Fatalf("http.Post(%q) failed with %v; want success", url, err) + return + } + body, err := ioutil.ReadAll(postResp.Body) + if err != nil { + t.Fatalf("postResp body couldn't be read: %v", err) + } + var f struct { + UUID string `json:"uuid"` + } + if err := json.Unmarshal(body, &f); err != nil { + t.Fatalf("postResp body couldn't be unmarshalled: %v. body: %s", err, string(body)) + } + if f.UUID == "" { + t.Fatalf("want uuid from postResp, but got none. body: %s", string(body)) + } + return f.UUID +} + +// getABE conveniently fetches an ABE record for ease in testing +func getABE(t *testing.T, port int, uuid string) gw.ABitOfEverything { + gURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%s", port, uuid) + getResp, err := http.Get(gURL) + if err != nil { + t.Fatalf("http.Get(%s) failed with %v; want success", gURL, err) + } + defer getResp.Body.Close() + + if got, want := getResp.StatusCode, http.StatusOK; got != want { + t.Fatalf("getResp.StatusCode= %d, want %d. resp: %v", got, want, getResp) + } + var getRespBody gw.ABitOfEverything + body, err := ioutil.ReadAll(getResp.Body) + if err != nil { + t.Fatalf("getResp body couldn't be read: %v", err) + } + if err := json.Unmarshal(body, &getRespBody); err != nil { + t.Fatalf("getResp body couldn't be unmarshalled: %v body: %s", err, string(body)) + } + + return getRespBody +} + func testABELookupNotFound(t *testing.T, port int) { url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) uuid := "not_exist" diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 20009954efc..f819a9472dd 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -29,6 +29,7 @@ proto_library( "//protoc-gen-swagger/options:options_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", "@go_googleapis//google/api:annotations_proto", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 4ba9b36f349..4f29c98d99c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -14,6 +14,7 @@ import sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" import sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" import _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" import _ "google.golang.org/genproto/googleapis/api/annotations" +import field_mask "google.golang.org/genproto/protobuf/field_mask" import ( context "golang.org/x/net/context" @@ -54,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0} } // DeepEnum is one or zero. @@ -80,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -128,7 +129,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -466,7 +467,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{0, 0} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -535,7 +536,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{1} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -678,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{2} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -717,7 +718,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_dc9cebfa7968115c, []int{3} + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -751,6 +752,53 @@ func (m *MessageWithBody) GetData() *Body { return nil } +// UpdateV2Request request for update includes the message and the update mask +type UpdateV2Request struct { + Abe *ABitOfEverything `protobuf:"bytes,1,opt,name=abe,proto3" json:"abe,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } +func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } +func (*UpdateV2Request) ProtoMessage() {} +func (*UpdateV2Request) Descriptor() ([]byte, []int) { + return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{4} +} +func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) +} +func (m *UpdateV2Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UpdateV2Request.Marshal(b, m, deterministic) +} +func (dst *UpdateV2Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateV2Request.Merge(dst, src) +} +func (m *UpdateV2Request) XXX_Size() int { + return xxx_messageInfo_UpdateV2Request.Size(m) +} +func (m *UpdateV2Request) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateV2Request.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateV2Request proto.InternalMessageInfo + +func (m *UpdateV2Request) GetAbe() *ABitOfEverything { + if m != nil { + return m.Abe + } + return nil +} + +func (m *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + func init() { proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything") proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MapValueEntry") @@ -760,6 +808,7 @@ func init() { proto.RegisterType((*ABitOfEverythingRepeated)(nil), "grpc.gateway.examples.examplepb.ABitOfEverythingRepeated") proto.RegisterType((*Body)(nil), "grpc.gateway.examples.examplepb.Body") proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.examplepb.MessageWithBody") + proto.RegisterType((*UpdateV2Request)(nil), "grpc.gateway.examples.examplepb.UpdateV2Request") proto.RegisterEnum("grpc.gateway.examples.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) proto.RegisterEnum("grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) } @@ -783,6 +832,8 @@ type ABitOfEverythingServiceClient interface { CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) + UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) + PatchWithFieldMaskInBody(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) @@ -846,6 +897,24 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv return out, nil } +func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aBitOfEverythingServiceClient) PatchWithFieldMaskInBody(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PatchWithFieldMaskInBody", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) @@ -945,6 +1014,8 @@ type ABitOfEverythingServiceServer interface { CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) Update(context.Context, *ABitOfEverything) (*empty.Empty, error) + UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) + PatchWithFieldMaskInBody(context.Context, *UpdateV2Request) (*empty.Empty, error) Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) @@ -1040,6 +1111,42 @@ func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/UpdateV2", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, req.(*UpdateV2Request)) + } + return interceptor(ctx, in, info, handler) +} + +func _ABitOfEverythingService_PatchWithFieldMaskInBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).PatchWithFieldMaskInBody(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PatchWithFieldMaskInBody", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).PatchWithFieldMaskInBody(ctx, req.(*UpdateV2Request)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sub2.IdMessage) if err := dec(in); err != nil { @@ -1240,6 +1347,14 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "Update", Handler: _ABitOfEverythingService_Update_Handler, }, + { + MethodName: "UpdateV2", + Handler: _ABitOfEverythingService_UpdateV2_Handler, + }, + { + MethodName: "PatchWithFieldMaskInBody", + Handler: _ABitOfEverythingService_PatchWithFieldMaskInBody_Handler, + }, { MethodName: "Delete", Handler: _ABitOfEverythingService_Delete_Handler, @@ -1414,181 +1529,191 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_dc9cebfa7968115c) -} - -var fileDescriptor_a_bit_of_everything_dc9cebfa7968115c = []byte{ - // 2750 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x19, 0xcd, 0x73, 0x1b, 0x57, - 0xdd, 0xab, 0x95, 0x65, 0xfb, 0xe7, 0x2f, 0xf9, 0x39, 0x71, 0x6c, 0xc5, 0xad, 0x5f, 0xd4, 0x94, - 0x6e, 0xdd, 0x6a, 0x37, 0x51, 0x4c, 0x49, 0xdc, 0x69, 0x83, 0xfc, 0x91, 0xc4, 0x4d, 0xea, 0x38, - 0x9b, 0xb4, 0x74, 0x42, 0x5a, 0xcf, 0x4a, 0x7a, 0x96, 0xb6, 0xd1, 0xee, 0x5b, 0x76, 0xdf, 0x3a, - 0x16, 0x46, 0x50, 0x60, 0x06, 0x06, 0x7a, 0x60, 0xc6, 0x70, 0xe2, 0xc0, 0x99, 0x03, 0x57, 0x4e, - 0x3d, 0x30, 0x1c, 0xca, 0x85, 0x1b, 0x30, 0xbd, 0x30, 0xc3, 0x05, 0x98, 0xe1, 0x2f, 0x80, 0xe1, - 0xc6, 0xec, 0xdb, 0x0f, 0xef, 0xae, 0xa4, 0x38, 0x72, 0x98, 0x5e, 0xec, 0x7d, 0xef, 0xfd, 0xbe, - 0xbf, 0xdf, 0x13, 0x94, 0xc9, 0x81, 0x66, 0x58, 0x2d, 0xe2, 0x28, 0x96, 0x4d, 0x19, 0x55, 0x82, - 0xa5, 0x55, 0x55, 0xb4, 0xdd, 0xaa, 0xce, 0x76, 0xe9, 0xde, 0x2e, 0xd9, 0x27, 0x76, 0x9b, 0x35, - 0x75, 0xb3, 0x21, 0x73, 0x18, 0xb4, 0xd4, 0xb0, 0xad, 0x9a, 0xdc, 0xd0, 0x18, 0x79, 0xa2, 0xb5, - 0xe5, 0x90, 0x80, 0x1c, 0xa1, 0x16, 0x16, 0x1b, 0x94, 0x36, 0x5a, 0x44, 0xd1, 0x2c, 0x5d, 0xd1, - 0x4c, 0x93, 0x32, 0x8d, 0xe9, 0xd4, 0x74, 0x7c, 0xf4, 0xc2, 0xf9, 0xe0, 0x94, 0xaf, 0xaa, 0xee, - 0x9e, 0x42, 0x0c, 0x8b, 0xb5, 0x83, 0xc3, 0x17, 0xd3, 0x87, 0x75, 0xd7, 0xe6, 0xd8, 0xc1, 0xf9, - 0x2b, 0x29, 0x79, 0x2d, 0x8d, 0x35, 0x89, 0xe9, 0x1a, 0xfc, 0x63, 0xd7, 0xfb, 0x0a, 0x00, 0x71, - 0x0a, 0xd0, 0x71, 0xab, 0x8a, 0x41, 0x1c, 0x47, 0x6b, 0x90, 0x00, 0xe2, 0x42, 0x37, 0x44, 0x39, - 0x05, 0xb2, 0x94, 0x96, 0x86, 0xe9, 0x06, 0x71, 0x98, 0x66, 0x58, 0x01, 0xc0, 0xeb, 0xfc, 0x5f, - 0xad, 0xd4, 0x20, 0x66, 0xc9, 0x79, 0xa2, 0x35, 0x1a, 0xc4, 0x56, 0xa8, 0xc5, 0xb5, 0xed, 0xd6, - 0xbc, 0xf8, 0x87, 0x59, 0xc8, 0x57, 0xd6, 0x74, 0x76, 0x77, 0x6f, 0x33, 0xb2, 0x29, 0xfa, 0x10, - 0x26, 0x1d, 0xdd, 0x6c, 0xb4, 0xc8, 0xae, 0x49, 0x1c, 0x46, 0xea, 0xf3, 0x0b, 0x58, 0x90, 0xc6, - 0xcb, 0x57, 0xe5, 0x13, 0xac, 0x2c, 0xa7, 0x29, 0xc9, 0xdb, 0x1c, 0x5f, 0x9d, 0xf0, 0xc9, 0xf9, - 0x2b, 0xd4, 0x84, 0xac, 0xeb, 0xea, 0xf5, 0x79, 0x01, 0x0b, 0xd2, 0xd8, 0xda, 0x83, 0xa3, 0xca, - 0xbd, 0x4f, 0x04, 0xe1, 0xa7, 0xc2, 0xed, 0x6f, 0x6a, 0xa5, 0xbd, 0x4a, 0xe9, 0xc6, 0xa5, 0xd2, - 0xb5, 0x0f, 0x0f, 0xaf, 0x76, 0x4a, 0xf1, 0xe5, 0xca, 0x20, 0xcb, 0xcb, 0xe5, 0x8e, 0xca, 0x39, - 0xa0, 0x1d, 0xc8, 0x05, 0x1a, 0x64, 0xb0, 0xf8, 0x5c, 0x1a, 0x04, 0x74, 0xd0, 0x12, 0x8c, 0xef, - 0xb5, 0xa8, 0xc6, 0x76, 0xf7, 0xb5, 0x96, 0x4b, 0xe6, 0x45, 0x2c, 0x48, 0x19, 0x15, 0xf8, 0xd6, - 0xfb, 0xde, 0x0e, 0xba, 0x00, 0x13, 0x75, 0xea, 0x56, 0x5b, 0x24, 0x80, 0xc8, 0x62, 0x41, 0x12, - 0xd4, 0x71, 0x7f, 0xcf, 0x07, 0x59, 0x82, 0x71, 0xdd, 0x64, 0x6f, 0xac, 0x04, 0x10, 0xc3, 0x58, - 0x90, 0x44, 0x15, 0xf8, 0x56, 0x44, 0xc3, 0x8d, 0x43, 0xe4, 0xb0, 0x20, 0x65, 0xd5, 0x71, 0x37, - 0x06, 0xe2, 0xd3, 0xb8, 0x52, 0x0e, 0x20, 0x46, 0xb0, 0x20, 0x0d, 0x73, 0x1a, 0x57, 0xca, 0x3e, - 0xc0, 0x4b, 0x30, 0xb9, 0xa7, 0x1f, 0x90, 0x7a, 0x44, 0x64, 0x14, 0x0b, 0x52, 0x4e, 0x9d, 0x08, - 0x36, 0x93, 0x40, 0x11, 0x9d, 0x31, 0x2c, 0x48, 0x23, 0x01, 0x50, 0x48, 0xe9, 0x05, 0x80, 0x2a, - 0xa5, 0xad, 0x00, 0x02, 0xb0, 0x20, 0x8d, 0xaa, 0x63, 0xde, 0x4e, 0x24, 0xac, 0xc3, 0x6c, 0xdd, - 0x6c, 0x04, 0x00, 0xe3, 0x9e, 0x57, 0xd5, 0x71, 0x7f, 0x2f, 0x12, 0xb6, 0xda, 0x66, 0xc4, 0x09, - 0x20, 0x5e, 0xc0, 0x82, 0x34, 0xa1, 0x02, 0xdf, 0x4a, 0x28, 0x1c, 0x89, 0x31, 0x89, 0x05, 0x69, - 0xd2, 0x57, 0x38, 0x94, 0xe2, 0x36, 0x80, 0x97, 0x4a, 0x01, 0xc0, 0x14, 0x16, 0xa4, 0xa9, 0xf2, - 0xeb, 0x27, 0xba, 0x73, 0xdb, 0x35, 0x88, 0xad, 0xd7, 0x36, 0x4d, 0xd7, 0x50, 0xc7, 0x3c, 0x7c, - 0x9f, 0xd8, 0x0e, 0x4c, 0x47, 0xc9, 0x19, 0x50, 0x7c, 0x91, 0x53, 0x94, 0xfa, 0x50, 0x0c, 0x73, - 0x5a, 0xde, 0xd1, 0x58, 0x93, 0x53, 0x9b, 0xb4, 0x82, 0x2f, 0x9f, 0xa2, 0x03, 0x73, 0x7e, 0x84, - 0xec, 0xa6, 0x09, 0x2f, 0x71, 0xc2, 0x6f, 0x9f, 0x44, 0xf8, 0x5d, 0x3f, 0xcb, 0x43, 0xfa, 0x41, - 0xdc, 0x45, 0xec, 0x66, 0xcd, 0xc4, 0xda, 0x67, 0xfa, 0x32, 0x4c, 0x39, 0x49, 0xff, 0x4d, 0x63, - 0x41, 0x9a, 0x56, 0x27, 0x9d, 0x84, 0x03, 0x23, 0xb0, 0x28, 0x16, 0xf2, 0x58, 0x90, 0xf2, 0x21, - 0x58, 0x2c, 0xea, 0x9c, 0xb8, 0x13, 0x66, 0xb0, 0x20, 0xcd, 0xa8, 0xe3, 0x4e, 0xcc, 0x09, 0x01, - 0x48, 0x44, 0x07, 0x61, 0x41, 0x42, 0x3e, 0x48, 0x48, 0xa5, 0x0c, 0x67, 0x6d, 0x62, 0x11, 0xcd, - 0x33, 0x45, 0x22, 0x2e, 0x66, 0xb1, 0x28, 0x8d, 0xa9, 0xb3, 0xe1, 0xe1, 0xfd, 0x58, 0x7c, 0x5c, - 0x83, 0x71, 0x6a, 0x12, 0xaf, 0xae, 0x7b, 0x65, 0x77, 0xfe, 0x0c, 0xaf, 0x36, 0x73, 0xb2, 0x5f, - 0xe9, 0xe4, 0xb0, 0xd2, 0xc9, 0x9b, 0xde, 0xe9, 0xad, 0x21, 0x15, 0x38, 0x30, 0x5f, 0xa1, 0x97, - 0x60, 0xc2, 0x47, 0xf5, 0x79, 0xcd, 0x9f, 0xf5, 0xa2, 0xef, 0xd6, 0x90, 0xea, 0x13, 0xf4, 0x99, - 0xa0, 0x47, 0x30, 0x66, 0x68, 0x56, 0x20, 0xc7, 0x1c, 0xaf, 0x04, 0xd7, 0x07, 0xaf, 0x04, 0xef, - 0x6a, 0x16, 0x17, 0x77, 0xd3, 0x64, 0x76, 0x5b, 0x1d, 0x35, 0x82, 0x25, 0x3a, 0x80, 0x59, 0x43, - 0xb3, 0xac, 0xb4, 0xbe, 0xe7, 0x38, 0x9f, 0x5b, 0xa7, 0xe2, 0x63, 0x25, 0xec, 0xe3, 0x33, 0x9c, - 0x31, 0xd2, 0xfb, 0x31, 0xce, 0x41, 0xec, 0xf9, 0x9c, 0xe7, 0x9f, 0x8f, 0xb3, 0x1f, 0x79, 0xdd, - 0x9c, 0x63, 0xfb, 0x68, 0x15, 0xe6, 0x4d, 0x6a, 0xae, 0x53, 0x73, 0x9f, 0x98, 0x5e, 0x3b, 0xd1, - 0x5a, 0xdb, 0x9a, 0xe1, 0x97, 0xb7, 0xf9, 0x02, 0x2f, 0x00, 0x7d, 0xcf, 0xd1, 0x3a, 0x4c, 0x47, - 0x3d, 0x2b, 0x90, 0xf8, 0x3c, 0xf7, 0x78, 0xa1, 0xcb, 0xe3, 0x0f, 0x42, 0x38, 0x75, 0x2a, 0x42, - 0xf1, 0x89, 0x3c, 0x82, 0x28, 0x92, 0xe2, 0xc9, 0xb6, 0x88, 0xc5, 0x81, 0xeb, 0xc2, 0x4c, 0x48, - 0x28, 0x4a, 0xac, 0xc2, 0xaf, 0x05, 0xc8, 0x05, 0xcd, 0x0a, 0x41, 0xd6, 0xd4, 0x0c, 0xe2, 0x37, - 0x2b, 0x95, 0x7f, 0xa3, 0x39, 0xc8, 0x69, 0x06, 0x75, 0x4d, 0x36, 0x9f, 0xe1, 0x85, 0x2a, 0x58, - 0xa1, 0x7b, 0x90, 0xa1, 0x8f, 0x79, 0x4f, 0x98, 0x2a, 0x57, 0x4e, 0xdb, 0x6a, 0xe4, 0x0d, 0x42, - 0x2c, 0x2e, 0x58, 0x86, 0x3e, 0x2e, 0x2e, 0xc1, 0x68, 0xb8, 0x46, 0x63, 0x30, 0x7c, 0xa3, 0x72, - 0xe7, 0xfe, 0x66, 0x7e, 0x08, 0x8d, 0x42, 0xf6, 0x81, 0xfa, 0xde, 0x66, 0x5e, 0x28, 0xe8, 0x30, - 0x99, 0x08, 0x4c, 0x94, 0x07, 0xf1, 0x31, 0x69, 0x07, 0xf2, 0x7a, 0x9f, 0x68, 0x0d, 0x86, 0x7d, - 0xeb, 0x64, 0x4e, 0x51, 0x35, 0x7d, 0xd4, 0xd5, 0xcc, 0x55, 0xa1, 0xb0, 0x01, 0x73, 0xbd, 0x63, - 0xb3, 0x07, 0xcf, 0x33, 0x71, 0x9e, 0x63, 0x71, 0x2a, 0xdf, 0x0d, 0xa9, 0xa4, 0xe3, 0xac, 0x07, - 0x95, 0xed, 0x38, 0x95, 0xe7, 0x69, 0xdf, 0xc7, 0xfc, 0x57, 0x3f, 0x17, 0x8e, 0x2a, 0xbf, 0x17, - 0xa0, 0xb1, 0x3c, 0x5b, 0xc1, 0x55, 0x9d, 0x61, 0xba, 0x87, 0x8f, 0xc7, 0xc9, 0xf2, 0xd6, 0x96, - 0xc9, 0xc2, 0x90, 0x6d, 0xe3, 0x1a, 0x35, 0xac, 0x96, 0x5e, 0xf3, 0x82, 0x03, 0x07, 0x63, 0x18, - 0x66, 0x6d, 0x8b, 0x60, 0x46, 0x71, 0x8d, 0xee, 0x13, 0x1b, 0x1b, 0x9a, 0xd9, 0xc6, 0x7b, 0x44, - 0x63, 0xae, 0x4d, 0x1c, 0x8f, 0xd6, 0x4e, 0x18, 0xbb, 0x7f, 0x12, 0xf8, 0x0c, 0xb2, 0xfc, 0x3e, - 0x5c, 0xbc, 0xa1, 0x9b, 0x75, 0x4c, 0x5d, 0x86, 0x0d, 0x6a, 0x13, 0xac, 0x55, 0xbd, 0xcf, 0xae, - 0xa1, 0x4b, 0x6e, 0x32, 0x66, 0x39, 0xab, 0x8a, 0xd2, 0xd0, 0x59, 0xd3, 0xad, 0xca, 0x35, 0x6a, - 0x28, 0x9e, 0xba, 0x25, 0x52, 0xa3, 0x4e, 0xdb, 0x61, 0x24, 0x58, 0x06, 0xda, 0xaf, 0x4d, 0x86, - 0x45, 0x93, 0xab, 0x56, 0xfc, 0xc5, 0x28, 0xcc, 0xa7, 0x69, 0xaa, 0x41, 0x60, 0xa3, 0x6b, 0xb0, - 0xc0, 0xdb, 0x52, 0x94, 0x32, 0xf1, 0x19, 0x46, 0xc0, 0xa2, 0x94, 0x51, 0xe7, 0x3c, 0x80, 0x10, - 0xe1, 0xc6, 0xf1, 0x3c, 0xf3, 0x26, 0x14, 0x92, 0xa8, 0x89, 0xe9, 0xc6, 0x1b, 0xab, 0x04, 0xf5, - 0x5c, 0x1c, 0x77, 0x23, 0x36, 0xe9, 0x74, 0xf1, 0x8d, 0x37, 0x0f, 0x11, 0x8b, 0x92, 0x98, 0xe4, - 0xbb, 0x75, 0xdc, 0x47, 0xba, 0xf8, 0x26, 0x26, 0xa2, 0x2c, 0x16, 0xa5, 0x6c, 0x92, 0xef, 0x7b, - 0xb1, 0x26, 0xd4, 0x8b, 0x6f, 0xd4, 0xd7, 0x86, 0xb1, 0x28, 0x0d, 0x77, 0xf1, 0x0d, 0x5b, 0xdc, - 0x5b, 0x70, 0x3e, 0x65, 0xaa, 0x44, 0xe7, 0xcc, 0x61, 0x51, 0xca, 0xa9, 0xf3, 0x09, 0x63, 0xc5, - 0x9b, 0x68, 0x6f, 0xf4, 0xd8, 0x9c, 0x26, 0x4a, 0x23, 0x3d, 0xd0, 0x43, 0xee, 0x5f, 0x83, 0xf9, - 0x24, 0x7a, 0x6c, 0xf2, 0x1a, 0xc5, 0xa2, 0x34, 0xaa, 0x9e, 0x8d, 0xe3, 0xae, 0x45, 0x53, 0x58, - 0x97, 0xb9, 0x12, 0xbd, 0x68, 0x8c, 0xf7, 0xde, 0x84, 0xb9, 0x92, 0xfd, 0x37, 0x65, 0xae, 0xf8, - 0xb4, 0x06, 0x58, 0x94, 0x26, 0x92, 0xe6, 0x5a, 0x3b, 0x9e, 0xdc, 0x7a, 0xba, 0x29, 0x52, 0x77, - 0x1c, 0x8b, 0xd2, 0x64, 0xb7, 0x9b, 0x42, 0x6d, 0x49, 0x5a, 0xdb, 0x58, 0x25, 0x9f, 0x38, 0x45, - 0x25, 0x4f, 0xd8, 0xe6, 0x78, 0x4c, 0xba, 0x0e, 0x8b, 0x29, 0xdb, 0x24, 0x9d, 0x32, 0x89, 0x45, - 0x69, 0x5a, 0x5d, 0x48, 0x58, 0x27, 0x31, 0x40, 0xf5, 0x21, 0x10, 0x05, 0xc5, 0x14, 0x16, 0xa5, - 0x7c, 0x2f, 0x02, 0x7d, 0x83, 0x39, 0x31, 0x68, 0x4d, 0x63, 0x51, 0x9a, 0x49, 0x79, 0x27, 0x66, - 0xa5, 0x9e, 0xc8, 0xb1, 0x51, 0x4e, 0x94, 0x50, 0x37, 0x72, 0xc0, 0xb9, 0x58, 0x80, 0xec, 0x1a, - 0xad, 0xb7, 0x7b, 0xb5, 0xb1, 0xe2, 0x23, 0x98, 0x0e, 0xa6, 0xce, 0x6f, 0xe8, 0xac, 0xc9, 0xc1, - 0xa6, 0x20, 0x13, 0x5e, 0xcc, 0xd4, 0x8c, 0xee, 0x15, 0x8e, 0x6c, 0x5d, 0x63, 0x5a, 0x50, 0x7f, - 0x5f, 0x3e, 0xd1, 0x1b, 0x1e, 0x11, 0x95, 0xa3, 0x2c, 0x63, 0x18, 0x8f, 0xf9, 0xc6, 0xeb, 0x58, - 0x0f, 0x37, 0xd5, 0xbb, 0xf9, 0x21, 0x34, 0x02, 0xe2, 0xdd, 0xed, 0xcd, 0xbc, 0x50, 0xfe, 0xcf, - 0x02, 0x9c, 0x4b, 0x97, 0xac, 0xfb, 0xc4, 0xde, 0xd7, 0x6b, 0x04, 0x7d, 0x21, 0x42, 0x6e, 0xdd, - 0xf6, 0xd4, 0x41, 0x97, 0x07, 0xae, 0xfa, 0x85, 0xc1, 0x51, 0x8a, 0xff, 0xcc, 0xfc, 0xe0, 0xcf, - 0xff, 0xf8, 0x79, 0xe6, 0x6f, 0x99, 0xe2, 0x5f, 0x33, 0xca, 0xfe, 0xe5, 0xf0, 0xd5, 0xa1, 0xd7, - 0x9b, 0x83, 0x72, 0x18, 0x2b, 0x9f, 0x1d, 0xe5, 0x30, 0x5e, 0x11, 0x3b, 0xca, 0x61, 0xcc, 0x3b, - 0x1d, 0xc5, 0x21, 0x96, 0x66, 0x6b, 0x8c, 0xda, 0xca, 0xa1, 0x9b, 0x38, 0x38, 0x8c, 0x45, 0x40, - 0x47, 0x39, 0x4c, 0x04, 0x54, 0xb8, 0x8e, 0x9d, 0x1f, 0xd7, 0x81, 0x8e, 0x72, 0x18, 0xcf, 0xed, - 0xb7, 0x1c, 0x66, 0x5b, 0x36, 0xd9, 0xd3, 0x0f, 0x94, 0xe5, 0x8e, 0xcf, 0x24, 0x86, 0xe6, 0xa4, - 0xe9, 0x38, 0x69, 0x46, 0x4e, 0x0a, 0x21, 0x29, 0x64, 0xbf, 0x21, 0xae, 0xa3, 0x1c, 0x1e, 0xe7, - 0x6a, 0x47, 0x39, 0x4c, 0x5d, 0x7a, 0x3c, 0xcc, 0x9e, 0xb7, 0xa1, 0x0e, 0xfa, 0x95, 0x00, 0xe0, - 0x3b, 0x96, 0x07, 0xdc, 0x97, 0xe3, 0xdc, 0x65, 0xee, 0xdb, 0x8b, 0xc5, 0xa5, 0x13, 0x3c, 0xbb, - 0x2a, 0x2c, 0xa3, 0xef, 0x40, 0xee, 0x0e, 0xa5, 0x8f, 0x5d, 0x0b, 0x4d, 0xcb, 0x8e, 0x5b, 0x2d, - 0xcb, 0x5b, 0xf5, 0x20, 0x4b, 0x4e, 0xc3, 0x59, 0xe6, 0x9c, 0x25, 0xf4, 0x95, 0x13, 0x63, 0xca, - 0x1b, 0x16, 0x3a, 0xe8, 0x47, 0x02, 0xe4, 0xde, 0xb3, 0xea, 0xa7, 0x8c, 0xfb, 0x3e, 0x77, 0xa6, - 0xe2, 0x65, 0x2e, 0xc5, 0x6b, 0x85, 0x67, 0x94, 0xc2, 0x33, 0xc3, 0xcf, 0x04, 0xc8, 0x6d, 0x90, - 0x16, 0x61, 0xa4, 0xdb, 0x0e, 0xfd, 0xd8, 0x3c, 0x3a, 0xaa, 0xbc, 0x56, 0x7d, 0x15, 0xa6, 0x00, - 0x2a, 0x96, 0x7e, 0x9b, 0xb4, 0x2b, 0x2e, 0x6b, 0xa2, 0x21, 0x38, 0x07, 0xb9, 0xbb, 0xde, 0x67, - 0x19, 0x4d, 0x42, 0xd6, 0x26, 0x5a, 0x1d, 0x86, 0x9f, 0xd8, 0x3a, 0x23, 0xbe, 0x69, 0x96, 0x9f, - 0xd5, 0x34, 0x7f, 0x17, 0x60, 0xf4, 0x26, 0x61, 0xf7, 0x5c, 0x62, 0xb7, 0xff, 0x9f, 0xc6, 0xf9, - 0x54, 0x38, 0xaa, 0x3c, 0x28, 0x6e, 0xc3, 0x62, 0xaf, 0x31, 0x2d, 0x62, 0x38, 0xe0, 0x78, 0xf6, - 0x81, 0x50, 0x1d, 0xe2, 0xfa, 0xc9, 0xe8, 0xf5, 0x93, 0xf4, 0xfb, 0x96, 0xc7, 0x20, 0xd4, 0xf2, - 0xd3, 0x61, 0xc8, 0xdf, 0x24, 0x2c, 0xac, 0xe5, 0x3e, 0xf3, 0x6b, 0x03, 0x6b, 0x1b, 0xe2, 0x17, - 0x4e, 0x8f, 0x5a, 0xfc, 0x24, 0xcb, 0x35, 0xf8, 0xaf, 0x88, 0xfe, 0x2d, 0x9e, 0xa0, 0x43, 0xd4, - 0x9c, 0x82, 0x52, 0xd0, 0x6b, 0xd0, 0xec, 0xa4, 0xcf, 0x52, 0x75, 0xb3, 0xef, 0xa4, 0xd8, 0x75, - 0xe6, 0x3e, 0xed, 0x30, 0x59, 0xcf, 0x9e, 0x32, 0xcb, 0xf5, 0x3e, 0xed, 0x8b, 0x9b, 0xa8, 0xc0, - 0xfd, 0x67, 0xad, 0x6e, 0xbc, 0xe3, 0x59, 0xaa, 0xa7, 0x22, 0x7d, 0x19, 0x76, 0x17, 0xd8, 0x3e, - 0x03, 0x4c, 0x9f, 0xe3, 0xbe, 0x7a, 0x3a, 0x4f, 0xe3, 0x9a, 0x68, 0x00, 0xe8, 0x73, 0x11, 0xb2, - 0x9b, 0xb5, 0x26, 0x45, 0xfd, 0x1e, 0xc6, 0x1c, 0xb7, 0x2a, 0xfb, 0xa3, 0x64, 0x58, 0x1c, 0x9e, - 0x19, 0xb2, 0xf8, 0xaf, 0xcc, 0x51, 0xe5, 0xfb, 0x19, 0x98, 0x20, 0xb5, 0x26, 0xc5, 0x8e, 0xdf, - 0xf8, 0x61, 0x94, 0xaf, 0x6c, 0xab, 0x86, 0x66, 0xee, 0xbb, 0x86, 0xa1, 0xd9, 0xed, 0x55, 0xbc, - 0x19, 0x6c, 0x15, 0xf2, 0x1b, 0xc4, 0xa9, 0xd9, 0x3a, 0x7f, 0xcd, 0xe6, 0xbb, 0xc5, 0x0d, 0x40, - 0xc9, 0xb4, 0xe5, 0xd2, 0x0e, 0x98, 0xac, 0xef, 0x5c, 0x07, 0xf1, 0xab, 0x97, 0xae, 0xa0, 0xab, - 0xf0, 0x86, 0x4a, 0x98, 0x6b, 0x9b, 0xa4, 0x8e, 0x9f, 0x34, 0x89, 0x89, 0x59, 0x93, 0x60, 0x9b, - 0x38, 0xd4, 0xb5, 0x6b, 0x04, 0xeb, 0x0e, 0x66, 0xc4, 0xb0, 0xa8, 0xad, 0xd9, 0x7a, 0xab, 0x8d, - 0x5d, 0x53, 0xdb, 0xd7, 0xf4, 0x96, 0x56, 0x6d, 0x11, 0xf9, 0x9d, 0x37, 0x41, 0x5c, 0xb9, 0xb4, - 0x82, 0x56, 0x60, 0xf9, 0x29, 0x04, 0xea, 0x94, 0x38, 0xd8, 0xa4, 0x0c, 0x93, 0x03, 0xdd, 0x61, - 0x32, 0xca, 0x41, 0xf6, 0x97, 0x19, 0x41, 0xe4, 0x49, 0xf6, 0xe1, 0xc9, 0x65, 0xc2, 0x33, 0x8c, - 0x72, 0xe8, 0x3b, 0xe6, 0xe1, 0x42, 0x31, 0xaf, 0xec, 0x97, 0x23, 0x78, 0xef, 0x6c, 0xd5, 0xbf, - 0xe4, 0x3e, 0x44, 0xa8, 0xeb, 0x08, 0xfd, 0x56, 0x80, 0x89, 0x0d, 0x42, 0x2c, 0xfe, 0x7e, 0xe8, - 0x6d, 0x7c, 0x39, 0x7d, 0xf7, 0x3a, 0xd7, 0xed, 0x5a, 0x71, 0xe5, 0xc4, 0x12, 0x9f, 0xf8, 0xbd, - 0x41, 0xf6, 0xc6, 0x53, 0xde, 0x85, 0x2a, 0x00, 0xdb, 0x74, 0x4d, 0x37, 0xeb, 0xba, 0xd9, 0x70, - 0xd0, 0x42, 0x57, 0x05, 0xdf, 0x08, 0x7e, 0x8a, 0xe9, 0x5b, 0xdc, 0x87, 0xd0, 0xfb, 0x30, 0xf2, - 0x40, 0x37, 0x08, 0x75, 0x19, 0xea, 0x03, 0xd4, 0x17, 0xf9, 0x3c, 0x17, 0xff, 0x2c, 0x9a, 0x8d, - 0xdb, 0x93, 0x05, 0xc4, 0x9a, 0x90, 0xdf, 0xb4, 0x6d, 0x6a, 0x7b, 0xb3, 0xf3, 0x06, 0x61, 0x9a, - 0xde, 0x72, 0x06, 0x66, 0x70, 0x91, 0x33, 0x78, 0x11, 0x2d, 0x26, 0x1c, 0xe6, 0x51, 0x7d, 0xa2, - 0xb3, 0x66, 0x3d, 0xa0, 0xfa, 0x63, 0x01, 0xd0, 0x4d, 0xc2, 0xd2, 0xb3, 0xfa, 0xa5, 0x13, 0xfd, - 0x91, 0xc2, 0xe8, 0x2b, 0xc6, 0x2b, 0x5c, 0x8c, 0x0b, 0xc5, 0x85, 0xb8, 0x18, 0x9e, 0x04, 0x55, - 0x5a, 0x6f, 0x2b, 0x87, 0xde, 0x44, 0xc0, 0x67, 0x7a, 0xf4, 0x43, 0x01, 0x66, 0x76, 0xa8, 0xc3, - 0x3c, 0x8a, 0x1c, 0x95, 0x0b, 0xf2, 0x6c, 0xd7, 0x82, 0xbe, 0xdc, 0x15, 0xce, 0xfd, 0xd5, 0xe2, - 0xc5, 0x38, 0x77, 0x8b, 0x3a, 0xcc, 0x93, 0x80, 0xbf, 0x08, 0xfb, 0x62, 0x84, 0x41, 0x51, 0xf8, - 0x9d, 0x70, 0x54, 0xf9, 0x4c, 0x40, 0x7b, 0x7d, 0xee, 0x0e, 0xb8, 0x1e, 0x2b, 0x12, 0xa5, 0x12, - 0x7e, 0xd2, 0xd4, 0x6b, 0x4d, 0xec, 0x34, 0xa9, 0xdb, 0xaa, 0xf3, 0xf4, 0xab, 0x12, 0xec, 0x3a, - 0xa4, 0x8e, 0x75, 0x13, 0x5b, 0x2d, 0xad, 0x46, 0x30, 0xdd, 0xe3, 0x89, 0x5a, 0xa7, 0x35, 0xd7, - 0x20, 0xa6, 0xff, 0x03, 0x19, 0xae, 0x51, 0xc3, 0x5b, 0x5c, 0x28, 0xdc, 0x83, 0xa5, 0x5e, 0x93, - 0x81, 0x97, 0x46, 0xe1, 0x6d, 0x65, 0xc0, 0x7a, 0x53, 0xfe, 0x18, 0xce, 0xd4, 0x34, 0x83, 0xb4, - 0xd6, 0x35, 0x87, 0x04, 0x34, 0xbc, 0xd1, 0x1a, 0xa9, 0x30, 0xec, 0x3f, 0x6b, 0x0f, 0x1a, 0x48, - 0x0b, 0xdc, 0x86, 0xb3, 0x68, 0x26, 0x11, 0x48, 0xde, 0x51, 0xf9, 0x23, 0x58, 0xac, 0x98, 0x94, - 0x35, 0x89, 0x1d, 0x70, 0xf2, 0x9c, 0x17, 0x4b, 0xaa, 0xb7, 0x13, 0x29, 0x36, 0x28, 0xe3, 0xa1, - 0xb5, 0xcf, 0x46, 0x8e, 0x2a, 0xbf, 0x19, 0x41, 0x7f, 0x11, 0x60, 0xb6, 0x82, 0xd7, 0xfc, 0x07, - 0xb5, 0x58, 0x09, 0xf8, 0x00, 0xce, 0x34, 0xd4, 0x9d, 0xf5, 0xd2, 0x4d, 0x5f, 0x75, 0x6c, 0xd9, - 0xf4, 0x63, 0x52, 0x63, 0x83, 0x9a, 0xac, 0x90, 0x37, 0xa9, 0x49, 0xbe, 0x1e, 0xa8, 0xe6, 0x41, - 0x2f, 0x7f, 0x04, 0x67, 0xd6, 0xee, 0x6f, 0xe0, 0x2b, 0xa5, 0xf5, 0x96, 0xe6, 0x3a, 0x04, 0xdf, - 0xd1, 0x6b, 0xc4, 0x74, 0x08, 0xba, 0x31, 0x18, 0x65, 0xa5, 0xda, 0xa2, 0x55, 0xc5, 0xd0, 0x1c, - 0x46, 0x6c, 0xe5, 0xce, 0xd6, 0xfa, 0xe6, 0xf6, 0xfd, 0x4d, 0x99, 0x1d, 0xb0, 0xb2, 0x78, 0x59, - 0xbe, 0xb4, 0x2c, 0x0a, 0x99, 0x6c, 0x39, 0xaf, 0x59, 0xfe, 0x33, 0xa0, 0x4e, 0x4d, 0xe5, 0x63, - 0x87, 0x9a, 0xe5, 0xb9, 0xf8, 0xce, 0x41, 0x69, 0x8f, 0xd2, 0x92, 0xa1, 0x1b, 0x64, 0xb5, 0x0b, - 0x72, 0xb5, 0x0f, 0xa4, 0xba, 0xe3, 0x75, 0x8c, 0x2b, 0x68, 0x0b, 0x6e, 0x76, 0x77, 0x0c, 0xd7, - 0x21, 0xf6, 0x71, 0xb7, 0x68, 0x6a, 0xfb, 0x04, 0x5b, 0xc4, 0x36, 0x74, 0xc7, 0xf1, 0x02, 0x93, - 0x51, 0xac, 0xd5, 0x6a, 0xc4, 0x71, 0x12, 0xdd, 0x45, 0x56, 0x9f, 0xa3, 0x07, 0x8d, 0xa8, 0xb7, - 0x40, 0x5c, 0xb9, 0x7c, 0x15, 0x55, 0x60, 0x72, 0xeb, 0x15, 0x03, 0x6b, 0x98, 0x11, 0xcd, 0xa2, - 0x4c, 0x46, 0x97, 0x40, 0x2e, 0x0c, 0xf4, 0x08, 0xf3, 0xf0, 0x27, 0x19, 0x98, 0x86, 0xb1, 0x35, - 0xcd, 0xd1, 0x6b, 0x7c, 0xfe, 0xcf, 0x8c, 0x0a, 0xf0, 0x42, 0xe2, 0x46, 0x30, 0x3d, 0x9a, 0x29, - 0x8c, 0x7d, 0x50, 0xaa, 0xec, 0x6c, 0x95, 0x6e, 0x93, 0x36, 0xce, 0xc0, 0x17, 0x42, 0x74, 0x43, - 0xf8, 0xa3, 0x30, 0x2a, 0x4a, 0xd9, 0xf2, 0x4b, 0xa1, 0x0f, 0x63, 0x0e, 0x57, 0xa8, 0xe6, 0xb2, - 0xa6, 0xe2, 0xfd, 0xa1, 0xb6, 0xfe, 0x6d, 0xb2, 0xba, 0xd4, 0x1f, 0x88, 0xd1, 0xc7, 0xc4, 0x5c, - 0xfb, 0x1e, 0x14, 0xfc, 0x0b, 0x07, 0x42, 0x37, 0x6d, 0xcd, 0x64, 0x0e, 0xf6, 0x16, 0x81, 0xf5, - 0x60, 0x31, 0xb8, 0x86, 0xa0, 0xd9, 0xe0, 0x90, 0xaf, 0xc2, 0xd3, 0x75, 0x18, 0xd6, 0xea, 0x86, - 0x6e, 0xa2, 0xd5, 0x04, 0xaa, 0x59, 0x4f, 0x80, 0x71, 0x67, 0x78, 0x60, 0xba, 0xc3, 0xbc, 0x4e, - 0xb4, 0x4f, 0xb0, 0x6e, 0xee, 0x51, 0xdb, 0xe0, 0xfe, 0xae, 0x2e, 0xc1, 0x64, 0xdc, 0x14, 0x43, - 0xe9, 0xab, 0x51, 0xf5, 0xd5, 0xbe, 0x97, 0xa3, 0x34, 0xa8, 0xbd, 0x05, 0xe7, 0xde, 0x3d, 0xae, - 0x3e, 0xf1, 0x9c, 0x1a, 0x34, 0x97, 0x1e, 0x8e, 0x45, 0x9e, 0xab, 0xe6, 0x78, 0x3e, 0x5f, 0xf9, - 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9f, 0xcc, 0xe3, 0x75, 0x21, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_7494e8194e1b43f3) +} + +var fileDescriptor_a_bit_of_everything_7494e8194e1b43f3 = []byte{ + // 2901 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1b, 0xd7, + 0xb5, 0xd7, 0x70, 0xa8, 0xaf, 0xa3, 0x2f, 0xea, 0xca, 0x1f, 0x32, 0xad, 0x44, 0xd7, 0x8c, 0xf3, + 0x32, 0x51, 0x42, 0x8e, 0x4d, 0xfb, 0xe5, 0xd9, 0x0a, 0x12, 0x3f, 0xea, 0xc3, 0xb6, 0x62, 0x5b, + 0x96, 0xc7, 0x8e, 0x5f, 0xe0, 0xe7, 0x44, 0xb8, 0x24, 0xaf, 0xc8, 0xb1, 0x39, 0x73, 0x27, 0x73, + 0xef, 0xc8, 0x66, 0x55, 0xb5, 0x69, 0x0b, 0xb4, 0x68, 0xb3, 0x28, 0xe0, 0x74, 0x55, 0x14, 0x5d, + 0x77, 0xd1, 0x6d, 0x57, 0x59, 0xb4, 0x5d, 0xa4, 0x9b, 0xee, 0xda, 0x22, 0x40, 0x51, 0xa0, 0x9b, + 0xb6, 0x40, 0xff, 0x82, 0x02, 0xdd, 0x15, 0x73, 0x67, 0x86, 0x9a, 0x19, 0x92, 0x96, 0x69, 0x07, + 0xd9, 0x48, 0x73, 0xe7, 0x9e, 0xf3, 0x3b, 0x9f, 0xf7, 0x9c, 0x73, 0x87, 0x50, 0xa6, 0x8f, 0x89, + 0xe5, 0xb4, 0x28, 0xd7, 0x1d, 0x97, 0x09, 0xa6, 0x87, 0x4b, 0xa7, 0xaa, 0x93, 0xed, 0xaa, 0x29, + 0xb6, 0xd9, 0xce, 0x36, 0xdd, 0xa5, 0x6e, 0x5b, 0x34, 0x4d, 0xbb, 0x51, 0x92, 0x34, 0x68, 0xb1, + 0xe1, 0x3a, 0xb5, 0x52, 0x83, 0x08, 0xfa, 0x88, 0xb4, 0x4b, 0x11, 0x40, 0xa9, 0xc3, 0x9a, 0x5f, + 0x68, 0x30, 0xd6, 0x68, 0x51, 0x9d, 0x38, 0xa6, 0x4e, 0x6c, 0x9b, 0x09, 0x22, 0x4c, 0x66, 0xf3, + 0x80, 0x3d, 0x8f, 0xc3, 0x5d, 0xb9, 0xaa, 0x7a, 0x3b, 0xfa, 0x8e, 0x49, 0x5b, 0xf5, 0x6d, 0x8b, + 0xf0, 0x87, 0x21, 0xc5, 0xc9, 0x34, 0x05, 0xb5, 0x1c, 0xd1, 0x0e, 0x37, 0x5f, 0x4e, 0x6f, 0xd6, + 0x3d, 0x57, 0xe2, 0x87, 0xfb, 0xaf, 0xa5, 0x2c, 0x72, 0x88, 0x68, 0x52, 0xdb, 0xb3, 0xe4, 0xc3, + 0xb6, 0xff, 0x14, 0xe9, 0x91, 0x22, 0xe4, 0x5e, 0x55, 0xb7, 0x28, 0xe7, 0xa4, 0x41, 0x43, 0x8a, + 0x53, 0xdd, 0x14, 0xe5, 0x14, 0xc9, 0x62, 0x5a, 0x1b, 0x61, 0x5a, 0x94, 0x0b, 0x62, 0x39, 0x21, + 0xc1, 0x9b, 0xf2, 0x5f, 0xad, 0xd8, 0xa0, 0x76, 0x91, 0x3f, 0x22, 0x8d, 0x06, 0x75, 0x75, 0xe6, + 0x48, 0x7f, 0x74, 0xfb, 0xa6, 0xf0, 0xbb, 0x39, 0xc8, 0x55, 0x56, 0x4c, 0x71, 0x73, 0x67, 0xbd, + 0xe3, 0x75, 0xf4, 0x21, 0x4c, 0x71, 0xd3, 0x6e, 0xb4, 0xe8, 0xb6, 0x4d, 0xb9, 0xa0, 0xf5, 0xf9, + 0x13, 0x58, 0xd1, 0x26, 0xca, 0x17, 0x4a, 0x87, 0xc4, 0xa1, 0x94, 0x46, 0x2a, 0x6d, 0x4a, 0x7e, + 0x63, 0x32, 0x80, 0x0b, 0x56, 0xa8, 0x09, 0x59, 0xcf, 0x33, 0xeb, 0xf3, 0x0a, 0x56, 0xb4, 0xf1, + 0x95, 0x3b, 0x4f, 0x2a, 0xb7, 0x3e, 0x51, 0x94, 0x1f, 0x29, 0xd7, 0xfe, 0x9f, 0x14, 0x77, 0x2a, + 0xc5, 0xcb, 0x67, 0x8a, 0x17, 0x3f, 0xdc, 0xbb, 0xb0, 0x5f, 0x8c, 0x2f, 0xcf, 0x0f, 0xb2, 0x3c, + 0x5b, 0xde, 0x37, 0xa4, 0x04, 0xb4, 0x05, 0x23, 0xa1, 0x05, 0x19, 0xac, 0xbe, 0x90, 0x05, 0x21, + 0x0e, 0x5a, 0x84, 0x89, 0x9d, 0x16, 0x23, 0x62, 0x7b, 0x97, 0xb4, 0x3c, 0x3a, 0xaf, 0x62, 0x45, + 0xcb, 0x18, 0x20, 0x5f, 0xdd, 0xf5, 0xdf, 0xa0, 0x53, 0x30, 0x59, 0x67, 0x5e, 0xb5, 0x45, 0x43, + 0x8a, 0x2c, 0x56, 0x34, 0xc5, 0x98, 0x08, 0xde, 0x05, 0x24, 0x8b, 0x30, 0x61, 0xda, 0xe2, 0xad, + 0xf3, 0x21, 0xc5, 0x30, 0x56, 0x34, 0xd5, 0x00, 0xf9, 0xaa, 0x83, 0xe1, 0xc5, 0x29, 0x46, 0xb0, + 0xa2, 0x65, 0x8d, 0x09, 0x2f, 0x46, 0x12, 0x60, 0x9c, 0x2b, 0x87, 0x14, 0xa3, 0x58, 0xd1, 0x86, + 0x25, 0xc6, 0xb9, 0x72, 0x40, 0xf0, 0x0a, 0x4c, 0xed, 0x98, 0x8f, 0x69, 0xbd, 0x03, 0x32, 0x86, + 0x15, 0x6d, 0xc4, 0x98, 0x0c, 0x5f, 0x26, 0x89, 0x3a, 0x38, 0xe3, 0x58, 0xd1, 0x46, 0x43, 0xa2, + 0x08, 0xe9, 0x25, 0x80, 0x2a, 0x63, 0xad, 0x90, 0x02, 0xb0, 0xa2, 0x8d, 0x19, 0xe3, 0xfe, 0x9b, + 0x8e, 0xb2, 0x5c, 0xb8, 0xa6, 0xdd, 0x08, 0x09, 0x26, 0xfc, 0xa8, 0x1a, 0x13, 0xc1, 0xbb, 0x8e, + 0xb2, 0xd5, 0xb6, 0xa0, 0x3c, 0xa4, 0x78, 0x09, 0x2b, 0xda, 0xa4, 0x01, 0xf2, 0x55, 0xc2, 0xe0, + 0x8e, 0x1a, 0x53, 0x58, 0xd1, 0xa6, 0x02, 0x83, 0x23, 0x2d, 0xae, 0x01, 0xf8, 0x47, 0x29, 0x24, + 0x98, 0xc6, 0x8a, 0x36, 0x5d, 0x7e, 0xf3, 0xd0, 0x70, 0x6e, 0x7a, 0x16, 0x75, 0xcd, 0xda, 0xba, + 0xed, 0x59, 0xc6, 0xb8, 0xcf, 0x1f, 0x80, 0x6d, 0xc1, 0x4c, 0xe7, 0x70, 0x86, 0x88, 0x2f, 0x4b, + 0x44, 0xad, 0x0f, 0x62, 0x74, 0xa6, 0x4b, 0x5b, 0x44, 0x34, 0x25, 0xda, 0x94, 0x13, 0x3e, 0x05, + 0x88, 0x1c, 0x8e, 0x05, 0x19, 0xb2, 0x9d, 0x06, 0x5e, 0x94, 0xc0, 0xef, 0x1e, 0x06, 0x7c, 0x23, + 0x38, 0xe5, 0x11, 0x7e, 0x98, 0x77, 0x1d, 0x71, 0x73, 0x76, 0x62, 0x1d, 0x08, 0x7d, 0x15, 0xa6, + 0x79, 0x32, 0x7e, 0x33, 0x58, 0xd1, 0x66, 0x8c, 0x29, 0x9e, 0x08, 0x60, 0x87, 0xac, 0x93, 0x0b, + 0x39, 0xac, 0x68, 0xb9, 0x88, 0x2c, 0x96, 0x75, 0x3c, 0x1e, 0x84, 0x59, 0xac, 0x68, 0xb3, 0xc6, + 0x04, 0x8f, 0x05, 0x21, 0x24, 0xe9, 0xe0, 0x20, 0xac, 0x68, 0x28, 0x20, 0x89, 0x50, 0xca, 0x70, + 0xd4, 0xa5, 0x0e, 0x25, 0xbe, 0x2b, 0x12, 0x79, 0x31, 0x87, 0x55, 0x6d, 0xdc, 0x98, 0x8b, 0x36, + 0x6f, 0xc7, 0xf2, 0xe3, 0x22, 0x4c, 0x30, 0x9b, 0xfa, 0x95, 0xdf, 0x2f, 0xbb, 0xf3, 0x47, 0x64, + 0xb5, 0x39, 0x56, 0x0a, 0x2a, 0x5d, 0x29, 0xaa, 0x74, 0xa5, 0x75, 0x7f, 0xf7, 0xea, 0x90, 0x01, + 0x92, 0x58, 0xae, 0xd0, 0x2b, 0x30, 0x19, 0xb0, 0x06, 0xb2, 0xe6, 0x8f, 0xfa, 0xd9, 0x77, 0x75, + 0xc8, 0x08, 0x00, 0x03, 0x21, 0xe8, 0x3e, 0x8c, 0x5b, 0xc4, 0x09, 0xf5, 0x38, 0x26, 0x2b, 0xc1, + 0xa5, 0xc1, 0x2b, 0xc1, 0x0d, 0xe2, 0x48, 0x75, 0xd7, 0x6d, 0xe1, 0xb6, 0x8d, 0x31, 0x2b, 0x5c, + 0xa2, 0xc7, 0x30, 0x67, 0x11, 0xc7, 0x49, 0xdb, 0x7b, 0x5c, 0xca, 0xb9, 0xfa, 0x5c, 0x72, 0x9c, + 0x84, 0x7f, 0x02, 0x81, 0xb3, 0x56, 0xfa, 0x7d, 0x4c, 0x72, 0x98, 0x7b, 0x81, 0xe4, 0xf9, 0x17, + 0x93, 0x1c, 0x64, 0x5e, 0xb7, 0xe4, 0xd8, 0x7b, 0xb4, 0x0c, 0xf3, 0x36, 0xb3, 0x57, 0x99, 0xbd, + 0x4b, 0x6d, 0xbf, 0x9d, 0x90, 0xd6, 0x26, 0xb1, 0x82, 0xf2, 0x36, 0x9f, 0x97, 0x05, 0xa0, 0xef, + 0x3e, 0x5a, 0x85, 0x99, 0x4e, 0xcf, 0x0a, 0x35, 0x3e, 0x29, 0x23, 0x9e, 0xef, 0x8a, 0xf8, 0x9d, + 0x88, 0xce, 0x98, 0xee, 0xb0, 0x04, 0x20, 0xf7, 0xa1, 0x93, 0x49, 0xf1, 0xc3, 0xb6, 0x80, 0xd5, + 0x81, 0xeb, 0xc2, 0x6c, 0x04, 0xd4, 0x39, 0x58, 0xf9, 0x5f, 0x28, 0x30, 0x12, 0x36, 0x2b, 0x04, + 0x59, 0x9b, 0x58, 0x34, 0x68, 0x56, 0x86, 0x7c, 0x46, 0xc7, 0x60, 0x84, 0x58, 0xcc, 0xb3, 0xc5, + 0x7c, 0x46, 0x16, 0xaa, 0x70, 0x85, 0x6e, 0x41, 0x86, 0x3d, 0x94, 0x3d, 0x61, 0xba, 0x5c, 0x79, + 0xde, 0x56, 0x53, 0x5a, 0xa3, 0xd4, 0x91, 0x8a, 0x65, 0xd8, 0xc3, 0xc2, 0x22, 0x8c, 0x45, 0x6b, + 0x34, 0x0e, 0xc3, 0x97, 0x2b, 0xd7, 0x6f, 0xaf, 0xe7, 0x86, 0xd0, 0x18, 0x64, 0xef, 0x18, 0xef, + 0xaf, 0xe7, 0x94, 0xbc, 0x09, 0x53, 0x89, 0xc4, 0x44, 0x39, 0x50, 0x1f, 0xd2, 0x76, 0xa8, 0xaf, + 0xff, 0x88, 0x56, 0x60, 0x38, 0xf0, 0x4e, 0xe6, 0x39, 0xaa, 0x66, 0xc0, 0xba, 0x9c, 0xb9, 0xa0, + 0xe4, 0xd7, 0xe0, 0x58, 0xef, 0xdc, 0xec, 0x21, 0xf3, 0x48, 0x5c, 0xe6, 0x78, 0x1c, 0xe5, 0x5b, + 0x11, 0x4a, 0x3a, 0xcf, 0x7a, 0xa0, 0x6c, 0xc6, 0x51, 0x5e, 0xa4, 0x7d, 0x1f, 0xc8, 0x5f, 0xfe, + 0x42, 0x79, 0x52, 0xf9, 0xad, 0x02, 0x8d, 0xa5, 0xb9, 0x0a, 0xae, 0x9a, 0x02, 0xb3, 0x1d, 0x7c, + 0x30, 0x70, 0x96, 0x37, 0x36, 0x6c, 0x11, 0xa5, 0x6c, 0x1b, 0xd7, 0x98, 0xe5, 0xb4, 0xcc, 0x9a, + 0x9f, 0x1c, 0x38, 0x1c, 0xc3, 0xb0, 0x68, 0x3b, 0x14, 0x0b, 0x86, 0x6b, 0x6c, 0x97, 0xba, 0xd8, + 0x22, 0x76, 0x1b, 0xef, 0x50, 0x22, 0x3c, 0x97, 0x72, 0x1f, 0x6b, 0x2b, 0xca, 0xdd, 0x3f, 0x28, + 0x72, 0x06, 0x59, 0xba, 0x0b, 0xa7, 0x2f, 0x9b, 0x76, 0x1d, 0x33, 0x4f, 0x60, 0x8b, 0xb9, 0x14, + 0x93, 0xaa, 0xff, 0xd8, 0x35, 0x74, 0x95, 0x9a, 0x42, 0x38, 0x7c, 0x59, 0xd7, 0x1b, 0xa6, 0x68, + 0x7a, 0xd5, 0x52, 0x8d, 0x59, 0xba, 0x6f, 0x6e, 0x91, 0xd6, 0x18, 0x6f, 0x73, 0x41, 0xc3, 0x65, + 0x68, 0xfd, 0xca, 0x54, 0x54, 0x34, 0xa5, 0x69, 0x85, 0x9f, 0x8c, 0xc1, 0x7c, 0x1a, 0xd3, 0x08, + 0x13, 0x1b, 0x5d, 0x84, 0x13, 0xb2, 0x2d, 0x75, 0x8e, 0x4c, 0x7c, 0x86, 0x51, 0xb0, 0xaa, 0x65, + 0x8c, 0x63, 0x3e, 0x41, 0xc4, 0x70, 0xf9, 0x60, 0x9e, 0x79, 0x1b, 0xf2, 0x49, 0xd6, 0xc4, 0x74, + 0xe3, 0x8f, 0x55, 0x8a, 0x71, 0x3c, 0xce, 0xbb, 0x16, 0x9b, 0x74, 0xba, 0xe4, 0xc6, 0x9b, 0x87, + 0x8a, 0x55, 0x4d, 0x4d, 0xca, 0xdd, 0x38, 0xe8, 0x23, 0x5d, 0x72, 0x13, 0x13, 0x51, 0x16, 0xab, + 0x5a, 0x36, 0x29, 0xf7, 0xfd, 0x58, 0x13, 0xea, 0x25, 0xb7, 0xd3, 0xd7, 0x86, 0xb1, 0xaa, 0x0d, + 0x77, 0xc9, 0x8d, 0x5a, 0xdc, 0x3b, 0x70, 0x32, 0xe5, 0xaa, 0x44, 0xe7, 0x1c, 0xc1, 0xaa, 0x36, + 0x62, 0xcc, 0x27, 0x9c, 0x15, 0x6f, 0xa2, 0xbd, 0xd9, 0x63, 0x73, 0x9a, 0xaa, 0x8d, 0xf6, 0x60, + 0x8f, 0xa4, 0xff, 0x0f, 0xcc, 0x27, 0xd9, 0x63, 0x93, 0xd7, 0x18, 0x56, 0xb5, 0x31, 0xe3, 0x68, + 0x9c, 0x77, 0xa5, 0x33, 0x85, 0x75, 0xb9, 0x2b, 0xd1, 0x8b, 0xc6, 0x65, 0xef, 0x4d, 0xb8, 0x2b, + 0xd9, 0x7f, 0x53, 0xee, 0x8a, 0x4f, 0x6b, 0x80, 0x55, 0x6d, 0x32, 0xe9, 0xae, 0x95, 0x83, 0xc9, + 0xad, 0x67, 0x98, 0x3a, 0xe6, 0x4e, 0x60, 0x55, 0x9b, 0xea, 0x0e, 0x53, 0x64, 0x2d, 0x4d, 0x5b, + 0x1b, 0xab, 0xe4, 0x93, 0xcf, 0x51, 0xc9, 0x13, 0xbe, 0x39, 0x18, 0x93, 0x2e, 0xc1, 0x42, 0xca, + 0x37, 0xc9, 0xa0, 0x4c, 0x61, 0x55, 0x9b, 0x31, 0x4e, 0x24, 0xbc, 0x93, 0x18, 0xa0, 0xfa, 0x00, + 0x74, 0x92, 0x62, 0x1a, 0xab, 0x5a, 0xae, 0x17, 0x40, 0xdf, 0x64, 0x4e, 0x0c, 0x5a, 0x33, 0x58, + 0xd5, 0x66, 0x53, 0xd1, 0x89, 0x79, 0xa9, 0x27, 0x73, 0x6c, 0x94, 0x53, 0x35, 0xd4, 0xcd, 0x1c, + 0x4a, 0x2e, 0xe4, 0x21, 0xbb, 0xc2, 0xea, 0xed, 0x5e, 0x6d, 0xac, 0x70, 0x1f, 0x66, 0xc2, 0xa9, + 0xf3, 0xff, 0x4c, 0xd1, 0x94, 0x64, 0xd3, 0x90, 0x89, 0x2e, 0x66, 0x46, 0xc6, 0xf4, 0x0b, 0x47, + 0xb6, 0x4e, 0x04, 0x09, 0xeb, 0xef, 0xab, 0x87, 0x46, 0xc3, 0x07, 0x31, 0x24, 0x4b, 0xe1, 0x33, + 0x05, 0x66, 0xde, 0x77, 0xea, 0x44, 0xd0, 0xbb, 0x65, 0x83, 0x7e, 0xec, 0x51, 0x2e, 0xd0, 0x2a, + 0xa8, 0xa4, 0x1a, 0x28, 0x31, 0x51, 0x3e, 0x3b, 0x70, 0x35, 0x37, 0x7c, 0x6e, 0xf4, 0x36, 0x4c, + 0x78, 0x12, 0x57, 0xde, 0xe0, 0x43, 0xd5, 0xba, 0x67, 0x87, 0xcb, 0xfe, 0x25, 0xff, 0x06, 0xe1, + 0x0f, 0x0d, 0x08, 0xc8, 0xfd, 0xe7, 0x25, 0x0c, 0x13, 0xb1, 0x8c, 0xf1, 0xfb, 0xe8, 0xbd, 0x75, + 0xe3, 0x66, 0x6e, 0x08, 0x8d, 0x82, 0x7a, 0x73, 0x73, 0x3d, 0xa7, 0x94, 0xff, 0xbc, 0x00, 0xc7, + 0xd3, 0x82, 0x6f, 0x53, 0x77, 0xd7, 0xac, 0x51, 0xf4, 0xa5, 0x0a, 0x23, 0xab, 0xae, 0xef, 0x64, + 0x34, 0xb8, 0xf6, 0xf9, 0xc1, 0x59, 0x0a, 0xff, 0xc8, 0x7c, 0xf7, 0x8f, 0x7f, 0xff, 0x2c, 0xf3, + 0xd7, 0x4c, 0xe1, 0x2f, 0x19, 0x7d, 0xf7, 0x6c, 0xf4, 0xb5, 0xa4, 0xd7, 0xb7, 0x12, 0x7d, 0x2f, + 0x56, 0xd4, 0xf7, 0xf5, 0xbd, 0x78, 0x9d, 0xde, 0xd7, 0xf7, 0x62, 0x39, 0xb3, 0xaf, 0x73, 0xea, + 0x10, 0x97, 0x08, 0xe6, 0xea, 0x7b, 0x5e, 0x62, 0x63, 0x2f, 0x96, 0x97, 0xfb, 0xfa, 0x5e, 0x22, + 0xcd, 0xa3, 0x75, 0x6c, 0xff, 0xa0, 0x3a, 0xed, 0xeb, 0x7b, 0xf1, 0x8a, 0xf3, 0x0e, 0x17, 0xae, + 0xe3, 0xd2, 0x1d, 0xf3, 0xb1, 0xbe, 0xb4, 0x1f, 0x08, 0x89, 0xb1, 0xf1, 0x34, 0x0e, 0x4f, 0x0b, + 0xe2, 0x29, 0x86, 0xa4, 0x92, 0xfd, 0x46, 0xcb, 0x7d, 0x7d, 0xef, 0xa0, 0x82, 0xec, 0xeb, 0x7b, + 0xa9, 0xab, 0x98, 0xcf, 0xd9, 0xf3, 0x8e, 0xb6, 0x8f, 0x7e, 0xae, 0x00, 0x04, 0x81, 0x95, 0xc7, + 0xe0, 0xeb, 0x09, 0xee, 0x92, 0x8c, 0xed, 0xe9, 0xc2, 0xe2, 0x21, 0x91, 0x5d, 0x56, 0x96, 0xd0, + 0x37, 0x61, 0xe4, 0x3a, 0x63, 0x0f, 0x3d, 0x07, 0xcd, 0x94, 0xb8, 0x57, 0x2d, 0x97, 0x36, 0xea, + 0xe1, 0xd9, 0x7d, 0x1e, 0xc9, 0x25, 0x29, 0x59, 0x43, 0xff, 0x75, 0x68, 0x4e, 0xf9, 0x23, 0xcc, + 0x3e, 0xfa, 0xbe, 0x02, 0x23, 0xc1, 0x59, 0x7e, 0x1e, 0xd7, 0xf4, 0xb9, 0xc9, 0x15, 0xce, 0x4a, + 0x2d, 0xde, 0xc8, 0x3f, 0xa3, 0x16, 0xbe, 0x1b, 0x7e, 0xa3, 0xc0, 0x58, 0x54, 0x54, 0xd0, 0x99, + 0x43, 0x55, 0x49, 0xd5, 0x9f, 0xbe, 0x9a, 0x3c, 0x90, 0x9a, 0xd4, 0xf3, 0x4b, 0xfa, 0x6e, 0xf9, + 0xe9, 0x9a, 0x90, 0x2a, 0x2d, 0x05, 0xda, 0xf8, 0xb5, 0xe8, 0xde, 0xd9, 0xf2, 0xa0, 0x2c, 0xe8, + 0x67, 0x0a, 0xcc, 0x6f, 0x11, 0x51, 0x6b, 0xfa, 0x45, 0xb7, 0x53, 0xa4, 0x36, 0x6c, 0x99, 0x78, + 0x5f, 0x9d, 0x49, 0x6f, 0x49, 0x93, 0xce, 0x94, 0xdf, 0xd0, 0x77, 0xcb, 0xe4, 0x59, 0x15, 0x54, + 0x96, 0xd0, 0x8f, 0x15, 0x18, 0x59, 0xa3, 0x2d, 0x2a, 0x68, 0x77, 0xa6, 0xf5, 0x93, 0x75, 0xff, + 0x49, 0xe5, 0x8d, 0xea, 0xeb, 0x30, 0x0d, 0x50, 0x71, 0xcc, 0x6b, 0xb4, 0x5d, 0xf1, 0x44, 0x13, + 0x0d, 0xc1, 0x71, 0x18, 0xb9, 0xe9, 0x3f, 0x96, 0xd1, 0x14, 0x64, 0x5d, 0x4a, 0xea, 0x30, 0xfc, + 0xc8, 0x35, 0x05, 0x0d, 0x92, 0x6f, 0xe9, 0x59, 0x93, 0xef, 0x6f, 0x0a, 0x8c, 0x5d, 0xa1, 0xe2, + 0x96, 0x47, 0xdd, 0xf6, 0x57, 0x99, 0x7e, 0x9f, 0x2a, 0x4f, 0x2a, 0x77, 0x0a, 0x9b, 0xb0, 0xd0, + 0x6b, 0x3c, 0xef, 0x08, 0x1c, 0x70, 0x2c, 0xff, 0x40, 0xa9, 0x0e, 0x49, 0xfb, 0x4a, 0xe8, 0xcd, + 0xc3, 0xec, 0xfb, 0xd8, 0x17, 0x10, 0x59, 0xf9, 0xe9, 0x30, 0xe4, 0xae, 0x50, 0x11, 0xf5, 0xf0, + 0x40, 0xf8, 0xc5, 0xc1, 0x5b, 0x64, 0xc8, 0x9f, 0x7f, 0x7e, 0xd6, 0xc2, 0x27, 0x59, 0x69, 0xc1, + 0xbf, 0x55, 0xf4, 0x2f, 0xf5, 0x10, 0x1b, 0x3a, 0x43, 0x49, 0x58, 0x6c, 0x7b, 0x5d, 0x30, 0xf6, + 0xd3, 0x7b, 0xa9, 0xce, 0xd4, 0xf7, 0x86, 0xd0, 0xb5, 0xe7, 0x3d, 0x6d, 0x33, 0xd9, 0x31, 0x9e, + 0x32, 0xc3, 0xf7, 0xde, 0xed, 0xcb, 0x9b, 0xe8, 0x71, 0xfd, 0x67, 0xec, 0x6e, 0xbe, 0x83, 0x19, + 0xba, 0xa7, 0x21, 0x7d, 0x05, 0x76, 0xb7, 0xb0, 0x3e, 0x83, 0x6b, 0x9f, 0xed, 0xbe, 0x76, 0xf2, + 0xa7, 0x49, 0x4d, 0xb4, 0x58, 0xf4, 0x85, 0x0a, 0xd9, 0xf5, 0x5a, 0x93, 0xa1, 0x7e, 0x1f, 0x44, + 0xb9, 0x57, 0x2d, 0x05, 0x57, 0x88, 0xa8, 0x38, 0x3c, 0x33, 0x65, 0xe1, 0x9f, 0x99, 0x27, 0x95, + 0xef, 0x64, 0x60, 0x92, 0xd6, 0x9a, 0x0c, 0xf3, 0x60, 0xb4, 0x82, 0x31, 0xb9, 0x72, 0x9d, 0x1a, + 0x9a, 0xbd, 0xed, 0x59, 0x16, 0x71, 0xdb, 0xcb, 0x78, 0x3d, 0x7c, 0x95, 0xcf, 0xad, 0x51, 0x5e, + 0x73, 0x4d, 0xf9, 0x2b, 0x86, 0x7c, 0x5b, 0x58, 0x03, 0x94, 0x3c, 0xb6, 0x52, 0xdb, 0x01, 0x0f, + 0xeb, 0x7b, 0x97, 0x40, 0xfd, 0xef, 0x33, 0xe7, 0xd0, 0x05, 0x78, 0xcb, 0xa0, 0xc2, 0x73, 0x6d, + 0x5a, 0xc7, 0x8f, 0x9a, 0xd4, 0xc6, 0xa2, 0x49, 0xb1, 0x4b, 0x39, 0xf3, 0xdc, 0x1a, 0xc5, 0x26, + 0xc7, 0x82, 0x5a, 0x0e, 0x73, 0x89, 0x6b, 0xb6, 0xda, 0xd8, 0xb3, 0xc9, 0x2e, 0x31, 0x5b, 0xa4, + 0xda, 0xa2, 0xa5, 0xf7, 0xde, 0x06, 0xf5, 0xfc, 0x99, 0xf3, 0xe8, 0x3c, 0x2c, 0x3d, 0x05, 0xa0, + 0xce, 0x28, 0xc7, 0x36, 0x13, 0x98, 0x3e, 0x36, 0xb9, 0x28, 0xa1, 0x11, 0xc8, 0xfe, 0x34, 0xa3, + 0xa8, 0xf2, 0x90, 0x7d, 0x78, 0x78, 0x99, 0xf0, 0x1d, 0xa3, 0xef, 0x05, 0x81, 0xb9, 0x77, 0xa2, + 0x90, 0x8b, 0x37, 0x1c, 0x7f, 0x6f, 0x39, 0xf8, 0xb8, 0x71, 0x0f, 0xa1, 0xae, 0x2d, 0xf4, 0x2b, + 0x05, 0x26, 0xd7, 0x28, 0x75, 0xe4, 0x77, 0x63, 0xff, 0xc5, 0xd7, 0x33, 0xd9, 0x5c, 0x92, 0xb6, + 0x5d, 0x2c, 0x9c, 0x3f, 0xb4, 0xc4, 0x27, 0x7e, 0x67, 0x2a, 0xf9, 0xd7, 0x12, 0xd9, 0x85, 0x2a, + 0x00, 0x9b, 0x6c, 0xc5, 0xb4, 0xeb, 0xa6, 0xdd, 0xe0, 0xe8, 0x44, 0x57, 0x05, 0x5f, 0x0b, 0x7f, + 0x82, 0xeb, 0x5b, 0xdc, 0x87, 0xd0, 0x5d, 0x18, 0xbd, 0x63, 0x5a, 0x94, 0x79, 0x02, 0xf5, 0x21, + 0xea, 0xcb, 0x7c, 0x52, 0xaa, 0x7f, 0x14, 0xcd, 0xc5, 0xfd, 0x29, 0x42, 0xb0, 0x26, 0xe4, 0xd6, + 0x5d, 0x97, 0xb9, 0x7e, 0xfb, 0x5e, 0xa3, 0x82, 0x98, 0x2d, 0x3e, 0xb0, 0x80, 0xd3, 0x52, 0xc0, + 0xcb, 0x68, 0x21, 0x11, 0x30, 0x1f, 0xf5, 0x91, 0x29, 0x9a, 0xf5, 0x10, 0xf5, 0x07, 0x0a, 0xa0, + 0x2b, 0x54, 0xa4, 0xef, 0x68, 0x87, 0xcf, 0x08, 0x29, 0x8e, 0xbe, 0x6a, 0xbc, 0x26, 0xd5, 0x38, + 0x55, 0x38, 0x11, 0x57, 0xc3, 0xd7, 0xa0, 0xca, 0xea, 0x6d, 0x7d, 0xcf, 0x9f, 0x08, 0xe4, 0x5d, + 0x0e, 0x7d, 0x4f, 0x81, 0xd9, 0x2d, 0xc6, 0x85, 0x8f, 0x28, 0x59, 0xa5, 0x22, 0xcf, 0x76, 0x1d, + 0xec, 0x2b, 0x5d, 0x97, 0xd2, 0x5f, 0x2f, 0x9c, 0x8e, 0x4b, 0x77, 0x18, 0x17, 0xbe, 0x06, 0xf2, + 0x97, 0x80, 0x40, 0x8d, 0x28, 0x29, 0xf2, 0xbf, 0x56, 0x9e, 0x54, 0x3e, 0x57, 0xd0, 0x4e, 0x9f, + 0xdb, 0x19, 0xae, 0xc7, 0x8a, 0x44, 0xb1, 0x88, 0x1f, 0x35, 0xcd, 0x5a, 0x13, 0xf3, 0x26, 0xf3, + 0x5a, 0x75, 0x79, 0xfc, 0xaa, 0x14, 0x7b, 0x9c, 0xd6, 0xb1, 0x69, 0x63, 0xa7, 0x45, 0x6a, 0x14, + 0xb3, 0x1d, 0x79, 0x50, 0xeb, 0xac, 0xe6, 0x59, 0xd4, 0x0e, 0x7e, 0x18, 0xc5, 0x35, 0x66, 0xf9, + 0x8b, 0x53, 0xf9, 0x5b, 0xb0, 0xd8, 0x6b, 0x32, 0xf0, 0x8f, 0x51, 0x74, 0x1f, 0x1c, 0xb0, 0xde, + 0x94, 0x1f, 0xc0, 0x91, 0x1a, 0xb1, 0x68, 0x6b, 0x95, 0x70, 0x1a, 0x62, 0xf8, 0x97, 0x17, 0x64, + 0xc0, 0x70, 0xf0, 0x73, 0xc6, 0xa0, 0x89, 0x74, 0x42, 0xfa, 0x70, 0x0e, 0xcd, 0x26, 0x12, 0xc9, + 0xdf, 0x2a, 0x7f, 0x04, 0x0b, 0x15, 0x9b, 0x89, 0x26, 0x75, 0x43, 0x49, 0x7e, 0xf0, 0x62, 0x87, + 0xea, 0xdd, 0xc4, 0x11, 0x1b, 0x54, 0xf0, 0xd0, 0xca, 0xe7, 0xa3, 0x4f, 0x2a, 0xbf, 0x1c, 0x45, + 0x7f, 0x52, 0x60, 0xae, 0x82, 0x57, 0x82, 0x0f, 0xa9, 0xb1, 0x12, 0xf0, 0x01, 0x1c, 0x69, 0x18, + 0x5b, 0xab, 0xc5, 0x2b, 0x81, 0xe9, 0xd8, 0x71, 0xd9, 0x03, 0x5a, 0x13, 0x83, 0xba, 0x2c, 0x9f, + 0xb3, 0x99, 0x4d, 0xff, 0x37, 0x34, 0xcd, 0xa7, 0x5e, 0xfa, 0x08, 0x8e, 0xac, 0xdc, 0x5e, 0xc3, + 0xe7, 0x8a, 0xab, 0x2d, 0xe2, 0x71, 0x8a, 0xaf, 0x9b, 0x35, 0x6a, 0x73, 0x8a, 0x2e, 0x0f, 0x86, + 0xac, 0x57, 0x5b, 0xac, 0xaa, 0x5b, 0x84, 0x0b, 0xea, 0xea, 0xd7, 0x37, 0x56, 0xd7, 0x37, 0x6f, + 0xaf, 0x97, 0xc4, 0x63, 0x51, 0x56, 0xcf, 0x96, 0xce, 0x2c, 0xa9, 0x4a, 0x26, 0x5b, 0xce, 0x11, + 0x27, 0xf8, 0xfc, 0x6b, 0x32, 0x5b, 0x7f, 0xc0, 0x99, 0x5d, 0x3e, 0x16, 0x7f, 0xf3, 0xb8, 0xb8, + 0xc3, 0x58, 0xd1, 0x32, 0x2d, 0xba, 0xdc, 0x45, 0xb9, 0xdc, 0x87, 0xd2, 0xd8, 0xf2, 0x3b, 0xc6, + 0x39, 0xb4, 0x01, 0x57, 0xba, 0x3b, 0x86, 0xc7, 0xa9, 0x7b, 0xd0, 0x2d, 0x9a, 0x64, 0x97, 0x62, + 0x87, 0xba, 0x96, 0xc9, 0xb9, 0x9f, 0x98, 0x82, 0x61, 0x52, 0xab, 0x51, 0xce, 0x13, 0xdd, 0xa5, + 0x64, 0xbc, 0x40, 0x0f, 0x1a, 0x35, 0xae, 0x82, 0x7a, 0xfe, 0xec, 0x05, 0x54, 0x81, 0xa9, 0x8d, + 0xd7, 0x2c, 0x4c, 0xb0, 0xa0, 0xc4, 0x61, 0xa2, 0x84, 0xce, 0x40, 0x29, 0x3f, 0xd0, 0xc7, 0xb7, + 0x7b, 0x3f, 0xcc, 0xc0, 0x0c, 0x8c, 0xaf, 0x10, 0x6e, 0xd6, 0xe4, 0xfc, 0x9f, 0x19, 0x53, 0xe0, + 0xa5, 0xc4, 0x8d, 0x60, 0x66, 0x2c, 0x93, 0x1f, 0xff, 0xa0, 0x58, 0xd9, 0xda, 0x28, 0x5e, 0xa3, + 0x6d, 0x9c, 0x81, 0x2f, 0x95, 0xce, 0x0d, 0xe1, 0xf7, 0xca, 0x98, 0xaa, 0x65, 0xcb, 0xaf, 0x44, + 0x31, 0x8c, 0x05, 0x5c, 0x67, 0xc4, 0x13, 0x4d, 0xdd, 0xff, 0xc3, 0x5c, 0xf3, 0x1b, 0x74, 0x79, + 0xb1, 0x3f, 0x91, 0x60, 0x0f, 0xa9, 0xbd, 0xf2, 0x6d, 0xc8, 0x07, 0x17, 0x0e, 0x84, 0xae, 0xb8, + 0xc4, 0x16, 0x1c, 0xfb, 0x8b, 0xd0, 0x7b, 0xb0, 0x10, 0x5e, 0x43, 0xd0, 0x5c, 0xb8, 0x29, 0x57, + 0xd1, 0xee, 0x2a, 0x0c, 0x93, 0xba, 0x65, 0xda, 0x68, 0x39, 0xc1, 0x6a, 0xd7, 0x13, 0x64, 0x32, + 0x18, 0x3e, 0x99, 0xc9, 0x85, 0xdf, 0x89, 0x76, 0x29, 0x36, 0xed, 0x1d, 0xe6, 0x5a, 0x32, 0xde, + 0xd5, 0x45, 0x98, 0x8a, 0xbb, 0x62, 0x28, 0x7d, 0x35, 0xaa, 0xbe, 0xde, 0xf7, 0x72, 0x94, 0x26, + 0x75, 0x37, 0xe0, 0xf8, 0x8d, 0x83, 0xea, 0x13, 0x3f, 0x53, 0x83, 0x9e, 0xa5, 0x7b, 0xe3, 0x9d, + 0xc8, 0x55, 0x47, 0xe4, 0x79, 0x3e, 0xf7, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x52, 0x42, 0x5e, + 0xa6, 0x8f, 0x23, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index c506569c47d..2d9070eef8d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -265,7 +265,11 @@ func request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler var protoReq ABitOfEverything var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -305,7 +309,11 @@ func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler run var protoReq ABitOfEverything var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -332,6 +340,139 @@ func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler run } +var ( + filter_ABitOfEverythingService_UpdateV2_0 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} +) + +func request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["abe.uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_UpdateV2_1 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} +) + +func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["abe.uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["abe.uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + } + + msg, err := client.PatchWithFieldMaskInBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq sub2.IdMessage var metadata runtime.ServerMetadata @@ -624,7 +765,11 @@ func request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runti var protoReq sub.StringMessage var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Value); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Value); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -654,7 +799,11 @@ func request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshal var protoReq ABitOfEverything var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -703,7 +852,11 @@ func request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, m var protoReq MessageWithBody var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Data); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -734,7 +887,11 @@ func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, ma var protoReq Body var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -888,6 +1045,66 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("PUT", pattern_ABitOfEverythingService_UpdateV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_UpdateV2_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateV2_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_UpdateV2_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateV2_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("DELETE", pattern_ABitOfEverythingService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1120,6 +1337,12 @@ var ( pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) + + pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) + + pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "")) + pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "")) @@ -1152,6 +1375,12 @@ var ( forward_ABitOfEverythingService_Update_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_UpdateV2_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_UpdateV2_1 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Delete_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_GetQuery_0 = runtime.ForwardResponseMessage diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index d7a91bf4d8e..e07b09789d5 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -3,6 +3,7 @@ option go_package = "examplepb"; package grpc.gateway.examples.examplepb; import "google/api/annotations.proto"; +import "google/protobuf/field_mask.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; import "examples/proto/pathenum/path_enum.proto"; @@ -239,6 +240,12 @@ enum NumericEnum { ONE = 1; } +// UpdateV2Request request for update includes the message and the update mask +message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; +} + // ABitOfEverything service is used to validate that APIs with complicated // proto messages and URL templates are still processed correctly. service ABitOfEverythingService { @@ -276,6 +283,22 @@ service ABitOfEverythingService { body: "*" }; } + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; + } + rpc PatchWithFieldMaskInBody(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; + } rpc Delete(sub2.IdMessage) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1/example/a_bit_of_everything/{uuid}" diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 61c1023786e..b3249e62612 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -953,6 +953,100 @@ ] } }, + "/v2/example/a_bit_of_everything/{abe.uuid}": { + "put": { + "operationId": "UpdateV2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/protobufEmpty" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "abe.uuid", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + }, + "patch": { + "operationId": "UpdateV22", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/protobufEmpty" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "abe.uuid", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v2/example/echo": { "get": { "summary": "Summary: Echo rpc", @@ -1250,6 +1344,54 @@ "ABitOfEverythingService" ] } + }, + "/v2a/example/a_bit_of_everything/{abe.uuid}": { + "patch": { + "operationId": "PatchWithFieldMaskInBody", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/protobufEmpty" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "abe.uuid", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbUpdateV2Request" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } } }, "definitions": { @@ -1561,6 +1703,18 @@ "default": "ZERO", "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" }, + "examplepbUpdateV2Request": { + "type": "object", + "properties": { + "abe": { + "$ref": "#/definitions/examplepbABitOfEverything" + }, + "update_mask": { + "$ref": "#/definitions/protobufFieldMask" + } + }, + "title": "UpdateV2Request request for update includes the message and the update mask" + }, "pathenumPathEnum": { "type": "string", "enum": [ @@ -1574,6 +1728,20 @@ "description": "service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.", "title": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:" }, + "protobufFieldMask": { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The set of field mask paths." + } + }, + "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, the existing\nrepeated values in the target resource will be overwritten by the new values.\nNote that a repeated field is only allowed in the last position of a `paths`\nstring.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then the existing sub-message in the target resource is\noverwritten. Given the target message:\n\n f {\n b {\n d : 1\n x : 2\n }\n c : 1\n }\n\nAnd an update message:\n\n f {\n b {\n d : 10\n }\n }\n\nthen if the field mask is:\n\n paths: \"f.b\"\n\nthen the result will be:\n\n f {\n b {\n d : 10\n }\n c : 1\n }\n\nHowever, if the update mask was:\n\n paths: \"f.b.d\"\n\nthen the result would be:\n\n f {\n b {\n d : 10\n x : 2\n }\n c : 1\n }\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.", + "title": "`FieldMask` represents a set of symbolic field paths, for example:" + }, "subStringMessage": { "type": "object", "properties": { diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index ca6579265e0..5e9efc9beac 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -272,7 +272,11 @@ func request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marsh var protoReq SimpleMessage var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index a20cf605711..b4ae06a19d7 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -61,7 +61,11 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + dec := marshaler.NewDecoder(newReader()) for { var protoReq EmptyProto err = dec.Decode(&protoReq) @@ -102,7 +106,11 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, berr + } + dec := marshaler.NewDecoder(newReader()) handleSend := func() error { var protoReq EmptyProto err := dec.Decode(&protoReq) @@ -151,7 +159,11 @@ func request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -230,7 +242,11 @@ func request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -276,7 +292,11 @@ func request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -297,7 +317,11 @@ func request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -406,7 +430,11 @@ func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler r var protoReq NestedProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -491,7 +519,11 @@ func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler r var protoReq NestedProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -526,7 +558,11 @@ func request_FlowCombination_RpcBodyStream_0(ctx context.Context, marshaler runt var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -629,7 +665,11 @@ func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runt var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -683,7 +723,11 @@ func request_FlowCombination_RpcBodyStream_4(ctx context.Context, marshaler runt var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -712,7 +756,11 @@ func request_FlowCombination_RpcBodyStream_5(ctx context.Context, marshaler runt var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -845,7 +893,11 @@ func request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, marshale var protoReq NestedProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -946,7 +998,11 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale var protoReq NestedProto var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.C); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index a62da50e2a0..f43c517b17e 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -37,7 +37,11 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + dec := marshaler.NewDecoder(newReader()) for { var protoReq ABitOfEverything err = dec.Decode(&protoReq) @@ -95,7 +99,11 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, berr + } + dec := marshaler.NewDecoder(newReader()) handleSend := func() error { var protoReq sub.StringMessage err := dec.Decode(&protoReq) diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 90bcbbd39f0..01764c0f9e6 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -113,7 +113,11 @@ func request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler ru var protoReq UnannotatedSimpleMessage var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index f603e0283a2..7e95a4c6163 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -32,7 +32,11 @@ func request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Mar var protoReq Wrappers var metadata runtime.ServerMetadata - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index 29d44cfb4d1..6a35faff50c 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) @@ -7,6 +7,7 @@ go_library( srcs = [ "a_bit_of_everything.go", "echo.go", + "fieldmask_helper.go", "flow_combination.go", "main.go", "responsebody.go", @@ -23,9 +24,17 @@ go_library( "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", ], ) + +go_test( + name = "go_default_test", + srcs = ["fieldmask_helper_test.go"], + embed = [":go_default_library"], + deps = ["@io_bazel_rules_go//proto/wkt:field_mask_go_proto"], +) diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index 4f433654749..384638cab31 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "strings" "sync" "github.com/golang/glog" @@ -11,8 +12,8 @@ import ( "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/empty" examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" - sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" "github.com/rogpeppe/fastuuid" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" @@ -161,6 +162,39 @@ func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABit return new(empty.Empty), nil } +func (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.UpdateV2Request) (*empty.Empty, error) { + glog.Info(msg) + // If there is no update mask do a regular update + if msg.UpdateMask == nil || len(msg.UpdateMask.GetPaths()) == 0 { + return s.Update(ctx, msg.Abe) + } + + s.m.Lock() + defer s.m.Unlock() + if a, ok := s.v[msg.Abe.Uuid]; ok { + applyFieldMask(a, msg.Abe, msg.UpdateMask) + } else { + return nil, status.Errorf(codes.NotFound, "not found") + } + return new(empty.Empty), nil +} + +// PatchWithFieldMaskInBody differs from UpdateV2 only in that this method exposes the field mask in the request body, +// so that clients can specify their mask explicitly +func (s *_ABitOfEverythingServer) PatchWithFieldMaskInBody(ctx context.Context, request *examples.UpdateV2Request) (*empty.Empty, error) { + // low-effort attempt to modify the field mask to only include paths for the ABE struct. Since this is only for the + // integration tests, this narrow implementaion is fine. + if request.UpdateMask != nil { + var shifted []string + for _, path := range request.UpdateMask.GetPaths() { + shifted = append(shifted, strings.TrimPrefix(path, "Abe.")) + } + request.UpdateMask.Paths = shifted + } + + return s.UpdateV2(ctx, request) +} + func (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessage) (*empty.Empty, error) { s.m.Lock() defer s.m.Unlock() diff --git a/examples/server/fieldmask_helper.go b/examples/server/fieldmask_helper.go new file mode 100644 index 00000000000..d0cac43c58f --- /dev/null +++ b/examples/server/fieldmask_helper.go @@ -0,0 +1,55 @@ +package server + +import ( + "log" + "reflect" + "strings" + + "google.golang.org/genproto/protobuf/field_mask" +) + +func applyFieldMask(patchee, patcher interface{}, mask *field_mask.FieldMask) { + if mask == nil { + return + } + + for _, path := range mask.GetPaths() { + val := getField(patcher, path) + if val.IsValid() { + setValue(patchee, val, path) + } + } +} + +func getField(obj interface{}, path string) (val reflect.Value) { + // this func is lazy -- if anything bad happens just return nil + defer func() { + if r := recover(); r != nil { + log.Printf("failed to get field:\npath: %q\nobj: %#v\nerr: %v", path, obj, r) + val = reflect.Value{} + } + }() + + v := reflect.ValueOf(obj) + if len(path) == 0 { + return v + } + + for _, s := range strings.Split(path, ".") { + if v.Kind() == reflect.Ptr { + v = reflect.Indirect(v) + } + v = v.FieldByName(s) + } + + return v +} + +func setValue(obj interface{}, newValue reflect.Value, path string) { + defer func() { + if r := recover(); r != nil { + log.Printf("failed to set value:\nnewValue: %#v\npath: %q\nobj: %#v\nerr: %v", newValue, path, obj, r) + } + }() + getField(obj, path).Set(newValue) +} diff --git a/examples/server/fieldmask_helper_test.go b/examples/server/fieldmask_helper_test.go new file mode 100644 index 00000000000..c735fdd7aca --- /dev/null +++ b/examples/server/fieldmask_helper_test.go @@ -0,0 +1,92 @@ +package server + +import ( + "reflect" + "testing" + + "google.golang.org/genproto/protobuf/field_mask" +) + +func TestApplyFieldMask(t *testing.T) { + for _, test := range []struct { + name string + patchee interface{} + patcher interface{} + fieldMask *field_mask.FieldMask + expected interface{} + }{ + {"nil fieldMask", &a{E: 64}, &a{E: 42}, nil, &a{E: 64}}, + {"empty paths", &a{E: 63}, &a{E: 42}, &field_mask.FieldMask{}, &a{E: 63}}, + {"simple path", &a{E: 23, F: "test"}, &a{B: &b{}, E: 42}, &field_mask.FieldMask{Paths: []string{"E"}}, &a{E: 42, F: "test"}}, + {"nested", &a{B: &b{C: 85}}, &a{B: &b{C: 58, D: nil}}, &field_mask.FieldMask{Paths: []string{"B.C"}}, &a{B: &b{C: 58}}}, + {"multiple paths", &a{B: &b{C: 40, D: []int{1, 2, 3}}, E: 34, F: "catapult"}, &a{B: &b{C: 56}, F: "lettuce"}, &field_mask.FieldMask{Paths: []string{"B.C", "F"}}, &a{B: &b{C: 56, D: []int{1, 2, 3}}, E: 34, F: "lettuce"}}, + } { + t.Run(test.name, func(t *testing.T) { + applyFieldMask(test.patchee, test.patcher, test.fieldMask) + if !reflect.DeepEqual(test.patchee, test.expected) { + t.Errorf("expected %v, but was %v", test.expected, test.patchee) + } + }) + } +} + +func TestGetValue(t *testing.T) { + for _, test := range []struct { + name string + input interface{} + path string + expected interface{} + }{ + {"empty", &a{E: 45, F: "test"}, "", &a{E: 45, F: "test"}}, + {"pointer-simple", &a{E: 45}, "E", 45}, + {"pointer-nested", &a{B: &b{C: 42}}, "B.C", 42}, + {"pointer-complex type", &a{B: &b{D: []int{1, 2}}}, "B.D", []int{1, 2}}, + {"pointer-invalid path", &a{F: "test"}, "X.Y", nil}, + {"simple", a{E: 45}, "E", 45}, + {"nested", a{B: &b{C: 42}}, "B.C", 42}, + {"complex type", a{B: &b{D: []int{1, 2}}}, "B.D", []int{1, 2}}, + {"invalid path", a{F: "test"}, "X.Y", nil}, + } { + t.Run(test.name, func(t *testing.T) { + if actual := getField(test.input, test.path); actual.IsValid() { + if !reflect.DeepEqual(test.expected, actual.Interface()) { + t.Errorf("expected %v, but got %v", test.expected, actual) + } + } else if test.expected != nil { + t.Errorf("expected nil, but was %v", actual) + } + }) + } +} + +func TestSetValue(t *testing.T) { + for _, test := range []struct { + name string + obj interface{} + newValue interface{} + path string + expected interface{} + }{ + {"simple", &a{E: 45}, 34, "E", 34}, + {"nested", &a{B: &b{C: 54}}, 43, "B.C", 43}, + {"complex type", &a{B: &b{D: []int{1, 2}}}, []int{3, 4}, "B.D", []int{3, 4}}, + } { + t.Run(test.name, func(t *testing.T) { + setValue(test.obj, reflect.ValueOf(test.newValue), test.path) + if actual := getField(test.obj, test.path).Interface(); !reflect.DeepEqual(actual, test.expected) { + t.Errorf("expected %v, but got %v", test.newValue, actual) + } + }) + } +} + +type a struct { + B *b + E int + F string +} + +type b struct { + C int + D []int +} diff --git a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel index fcd9cfc3209..316010f500d 100644 --- a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/gengateway/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 7db03cca64e..fad1392c0c0 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -7,6 +7,7 @@ import ( "text/template" "github.com/golang/glog" + generator2 "github.com/golang/protobuf/protoc-gen-go/generator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) @@ -23,6 +24,14 @@ type binding struct { Registry *descriptor.Registry } +// GetBodyFieldPath returns the binding body's fieldpath. +func (b binding) GetBodyFieldPath() string { + if b.Body != nil && len(b.Body.FieldPath) != 0 { + return b.Body.FieldPath.String() + } + return "*" +} + // HasQueryParam determines if the binding needs parameters in query string. // // It sometimes returns true even though actually the binding does not need. @@ -88,6 +97,26 @@ func (b binding) LookupEnum(p descriptor.Parameter) *descriptor.Enum { return e } +// FieldMaskField returns the golang-style name of the variable for a FieldMask, if there is exactly one of that type in +// the message. Otherwise, it returns an empty string. +func (b binding) FieldMaskField() string { + var fieldMaskField *descriptor.Field + for _, f := range b.Method.RequestType.Fields { + if f.GetTypeName() == ".google.protobuf.FieldMask" { + // if there is more than 1 FieldMask for this request, then return none + if fieldMaskField != nil { + return "" + } + fieldMaskField = f + } + } + + if fieldMaskField != nil { + return generator2.CamelCase(fieldMaskField.GetName()) + } + return "" +} + // queryParamFilter is a wrapper of utilities.DoubleArray which provides String() to output DoubleArray.Encoding in a stable and predictable format. type queryParamFilter struct { *utilities.DoubleArray @@ -197,7 +226,11 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + dec := marshaler.NewDecoder(newReader()) for { var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} err = dec.Decode(&protoReq) @@ -244,9 +277,24 @@ var ( var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} var metadata runtime.ServerMetadata {{if .Body}} - if err := marshaler.NewDecoder(req.Body).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } + {{- if and (eq (.HTTPMethod) "PATCH") (.FieldMaskField)}} + if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) + } {{if not (eq "*" .GetBodyFieldPath)}} else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.{{.FieldMaskField}} = fieldMask + } + } {{end}} + {{end}} {{end}} {{if .PathParams}} var ( @@ -319,7 +367,11 @@ var ( grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - dec := marshaler.NewDecoder(req.Body) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, berr + } + dec := marshaler.NewDecoder(newReader()) handleSend := func() error { var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} err := dec.Decode(&protoReq) diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index 3f1313a7ddc..ca9e587a69d 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -230,7 +230,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := spec.sigWant; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `marshaler.NewDecoder(req.Body).Decode(&protoReq.GetNested().Bool)`; !strings.Contains(got, want) { + if want := `marshaler.NewDecoder(newReader()).Decode(&protoReq.GetNested().Bool)`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `val, ok = pathParams["nested.int32"]`; !strings.Contains(got, want) { @@ -391,7 +391,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := spec.sigWant; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `marshaler.NewDecoder(req.Body)`; !strings.Contains(got, want) { + if want := `marshaler.NewDecoder(newReader()`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 252c4527853..059e2033535 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -9,6 +9,7 @@ go_library( "convert.go", "doc.go", "errors.go", + "fieldmask.go", "handler.go", "marshal_json.go", "marshal_jsonpb.go", @@ -27,8 +28,10 @@ go_library( "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", + "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//codes:go_default_library", @@ -44,6 +47,7 @@ go_test( srcs = [ "context_test.go", "errors_test.go", + "fieldmask_test.go", "handler_test.go", "marshal_json_test.go", "marshal_jsonpb_test.go", diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go new file mode 100644 index 00000000000..e1cf7a91461 --- /dev/null +++ b/runtime/fieldmask.go @@ -0,0 +1,70 @@ +package runtime + +import ( + "encoding/json" + "io" + "strings" + + "github.com/golang/protobuf/protoc-gen-go/generator" + "google.golang.org/genproto/protobuf/field_mask" +) + +// FieldMaskFromRequestBody creates a FieldMask printing all complete paths from the JSON body. +func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) { + fm := &field_mask.FieldMask{} + var root interface{} + if err := json.NewDecoder(r).Decode(&root); err != nil { + if err == io.EOF { + return fm, nil + } + return nil, err + } + + queue := []fieldMaskPathItem{{node: root}} + for len(queue) > 0 { + // dequeue an item + item := queue[0] + queue = queue[1:] + + if m, ok := item.node.(map[string]interface{}); ok { + // if the item is an object, then enqueue all of its children + for k, v := range m { + queue = append(queue, fieldMaskPathItem{path: append(item.path, generator.CamelCase(k)), node: v}) + } + } else if len(item.path) > 0 { + // otherwise, it's a leaf node so print its path + fm.Paths = append(fm.Paths, strings.Join(item.path, ".")) + } + } + + return fm, nil +} + +// fieldMaskPathItem stores a in-progress deconstruction of a path for a fieldmask +type fieldMaskPathItem struct { + // the list of prior fields leading up to node + path []string + + // a generic decoded json object the current item to inspect for further path extraction + node interface{} +} + +// CamelCaseFieldMask updates the given FieldMask by converting all of its paths to CamelCase, using the same heuristic +// that's used for naming protobuf fields in Go. +func CamelCaseFieldMask(mask *field_mask.FieldMask) { + if mask == nil || mask.Paths == nil { + return + } + + var newPaths []string + for _, path := range mask.Paths { + lowerCasedParts := strings.Split(path, ".") + var camelCasedParts []string + for _, part := range lowerCasedParts { + camelCasedParts = append(camelCasedParts, generator.CamelCase(part)) + } + newPaths = append(newPaths, strings.Join(camelCasedParts, ".")) + } + + mask.Paths = newPaths +} diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go new file mode 100644 index 00000000000..3c097878aa0 --- /dev/null +++ b/runtime/fieldmask_test.go @@ -0,0 +1,87 @@ +package runtime + +import ( + "bytes" + "fmt" + "testing" + + "google.golang.org/genproto/protobuf/field_mask" +) + +func fieldMasksEqual(fm1, fm2 *field_mask.FieldMask) bool { + if fm1 == nil && fm2 == nil { + return true + } + if fm1 == nil || fm2 == nil { + return false + } + if len(fm1.GetPaths()) != len(fm2.GetPaths()) { + return false + } + + paths := make(map[string]bool) + for _, path := range fm1.GetPaths() { + paths[path] = true + } + for _, path := range fm2.GetPaths() { + if _, ok := paths[path]; !ok { + return false + } + } + + return true +} + +func newFieldMask(paths ...string) *field_mask.FieldMask { + return &field_mask.FieldMask{Paths: paths} +} + +func fieldMaskString(fm *field_mask.FieldMask) string { + if fm == nil { + return "" + } + return fmt.Sprintf("%v", fm.GetPaths()) +} + +func TestFieldMaskFromRequestBody(t *testing.T) { + for _, tc := range []struct { + name string + input string + expected *field_mask.FieldMask + expectedErr error + }{ + {name: "empty", expected: newFieldMask()}, + {name: "simple", input: `{"foo":1, "bar":"baz"}`, expected: newFieldMask("Foo", "Bar")}, + {name: "nested", input: `{"foo": {"bar":1, "baz": 2}, "qux": 3}`, expected: newFieldMask("Foo.Bar", "Foo.Baz", "Qux")}, + {name: "canonical", input: `{"f": {"b": {"d": 1, "x": 2}, "c": 1}}`, expected: newFieldMask("F.B.D", "F.B.X", "F.C")}, + } { + t.Run(tc.name, func(t *testing.T) { + actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input))) + if !fieldMasksEqual(actual, tc.expected) { + t.Errorf("want %v; got %v", fieldMaskString(tc.expected), fieldMaskString(actual)) + } + if err != tc.expectedErr { + t.Errorf("want %v; got %v", tc.expectedErr, err) + } + }) + } +} + +func TestCamelCaseFieldMask(t *testing.T) { + for _, tc := range []struct { + name string + input *field_mask.FieldMask + expected *field_mask.FieldMask + }{ + {"nil", nil, nil}, + {"empty", &field_mask.FieldMask{Paths: nil}, &field_mask.FieldMask{Paths: nil}}, + {"main usage", newFieldMask("a", "a.b", "some_field.some_sub_field"), newFieldMask("A", "A.B", "SomeField.SomeSubField")}, + } { + t.Run(tc.name, func(t *testing.T) { + CamelCaseFieldMask(tc.input) + if expected, actual := tc.expected, tc.input; !fieldMasksEqual(expected, actual) { + t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) + } + }) + } +} diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index 151f6864d92..7109d793231 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -7,6 +7,7 @@ go_library( srcs = [ "doc.go", "pattern.go", + "readerfactory.go", "trie.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/utilities", diff --git a/utilities/readerfactory.go b/utilities/readerfactory.go new file mode 100644 index 00000000000..6dd3854665f --- /dev/null +++ b/utilities/readerfactory.go @@ -0,0 +1,20 @@ +package utilities + +import ( + "bytes" + "io" + "io/ioutil" +) + +// IOReaderFactory takes in an io.Reader and returns a function that will allow you to create a new reader that begins +// at the start of the stream +func IOReaderFactory(r io.Reader) (func() io.Reader, error) { + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, err + } + + return func() io.Reader { + return bytes.NewReader(b) + }, nil +} From 7ad920cb70af14a60b14add071a4605a0655ea6e Mon Sep 17 00:00:00 2001 From: Kelly Campbell Date: Wed, 5 Dec 2018 14:20:19 -0500 Subject: [PATCH 0066/1518] Add filegroup for options proto files This allows other projects to generate proto code for other languages, e.g. py_proto_library --- protoc-gen-swagger/options/BUILD.bazel | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 0a91a7bbc68..7a51fd7c7f4 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -3,6 +3,20 @@ load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") package(default_visibility = ["//visibility:public"]) +filegroup( + name = "options_proto_files", + srcs = [ + "annotations.proto", + "openapiv2.proto", + ], +) + +go_library( + name = "go_default_library", + embed = [":options_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", +) + proto_library( name = "options_proto", srcs = [ @@ -21,9 +35,3 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", proto = ":options_proto", ) - -go_library( - name = "go_default_library", - embed = [":options_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", -) From bf6aa1e1a04a04ed11ee4e239945aa45256d232b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 7 Dec 2018 19:56:03 +0000 Subject: [PATCH 0067/1518] Generate changelog for 1.6.0 --- CHANGELOG.md | 68 +++++++++++++++++++++++++++++++++++++++++++++------- Makefile | 2 +- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d7184d2058..e6ca50f188c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,54 @@ # Change Log -## [v1.5.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-01) +## [v1.6.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.0) (2018-12-07) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.0) + +**Implemented enhancements:** + +- Add 'License' message to the annotation proto. [\#644](https://github.com/grpc-ecosystem/grpc-gateway/pull/644) ([ensonic](https://github.com/ensonic)) + +**Fixed bugs:** + +- Cannot return HTTP header using "Grpc-Metadata-" prefix [\#782](https://github.com/grpc-ecosystem/grpc-gateway/issues/782) +- protoc-gen-swagger throws the error: Any JSON doesn't have '@type' [\#771](https://github.com/grpc-ecosystem/grpc-gateway/issues/771) +- proto-gen-swagger: provide default description for HTTP 200 responses [\#766](https://github.com/grpc-ecosystem/grpc-gateway/issues/766) + +**Closed issues:** + +- Please release the repo, IOReaderFactory is not available on the latest release! [\#823](https://github.com/grpc-ecosystem/grpc-gateway/issues/823) +- Unable to add protobuf wrappers in url template option [\#808](https://github.com/grpc-ecosystem/grpc-gateway/issues/808) +- Class 'GPBMetadata\ProtocGenSwagger\Options\Annotations' not found [\#794](https://github.com/grpc-ecosystem/grpc-gateway/issues/794) +- REST gateway over RPCS? [\#789](https://github.com/grpc-ecosystem/grpc-gateway/issues/789) +- Why the rctx is substituted by a new empty context? [\#788](https://github.com/grpc-ecosystem/grpc-gateway/issues/788) +- grpc gateway intercepter [\#785](https://github.com/grpc-ecosystem/grpc-gateway/issues/785) +- "error" and "message" fields in error response [\#768](https://github.com/grpc-ecosystem/grpc-gateway/issues/768) +- Go1.11: http.CloseNotifier is deprecated [\#736](https://github.com/grpc-ecosystem/grpc-gateway/issues/736) +- Access to raw post body [\#652](https://github.com/grpc-ecosystem/grpc-gateway/issues/652) + +**Merged pull requests:** + +- Add filegroup for options proto files [\#821](https://github.com/grpc-ecosystem/grpc-gateway/pull/821) ([kellycampbell](https://github.com/kellycampbell)) +- Added support for more WKT [\#816](https://github.com/grpc-ecosystem/grpc-gateway/pull/816) ([mayankcpdixit](https://github.com/mayankcpdixit)) +- Fix protobuf repository's owner name on README.md [\#814](https://github.com/grpc-ecosystem/grpc-gateway/pull/814) ([micnncim](https://github.com/micnncim)) +- Revert "Adding support for more well known types in descriptor" [\#813](https://github.com/grpc-ecosystem/grpc-gateway/pull/813) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Feature/patch2 rebased [\#812](https://github.com/grpc-ecosystem/grpc-gateway/pull/812) ([razamiDev](https://github.com/razamiDev)) +- Correct wellKnownTypeConv function references [\#811](https://github.com/grpc-ecosystem/grpc-gateway/pull/811) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Adding support for more well known types in descriptor [\#809](https://github.com/grpc-ecosystem/grpc-gateway/pull/809) ([mayankcpdixit](https://github.com/mayankcpdixit)) +- Make Bazel CI failures clearer [\#807](https://github.com/grpc-ecosystem/grpc-gateway/pull/807) ([drigz](https://github.com/drigz)) +- fix bug: the resource name of custom method doesn't be retained [\#805](https://github.com/grpc-ecosystem/grpc-gateway/pull/805) ([ch3rub1m](https://github.com/ch3rub1m)) +- Update rules\_go and gazelle [\#802](https://github.com/grpc-ecosystem/grpc-gateway/pull/802) ([drigz](https://github.com/drigz)) +- Use newer Bazel repo rules [\#798](https://github.com/grpc-ecosystem/grpc-gateway/pull/798) ([drigz](https://github.com/drigz)) +- Run buildifer on Bazel files [\#797](https://github.com/grpc-ecosystem/grpc-gateway/pull/797) ([drigz](https://github.com/drigz)) +- protoc-gen-swagger: Fix formatting of license field definition. [\#796](https://github.com/grpc-ecosystem/grpc-gateway/pull/796) ([ivucica](https://github.com/ivucica)) +- Remove http.CloseNotifier code from Go \>= 1.7 builds [\#795](https://github.com/grpc-ecosystem/grpc-gateway/pull/795) ([SpikesDivZero](https://github.com/SpikesDivZero)) +- ci: add job for building binaries for releases [\#793](https://github.com/grpc-ecosystem/grpc-gateway/pull/793) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add documentation to the rest of methods on the examples [\#791](https://github.com/grpc-ecosystem/grpc-gateway/pull/791) ([rvegas](https://github.com/rvegas)) +- fix \#782 Cannot return HTTP header using "Grpc-Metadata-" prefix [\#784](https://github.com/grpc-ecosystem/grpc-gateway/pull/784) ([joelclouddistrict](https://github.com/joelclouddistrict)) +- Fix CircleCI configuration [\#777](https://github.com/grpc-ecosystem/grpc-gateway/pull/777) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- tests: s/iotuil/ioutil/ typo [\#775](https://github.com/grpc-ecosystem/grpc-gateway/pull/775) ([srenatus](https://github.com/srenatus)) +- Replace travis with CircleCI for easier testing [\#772](https://github.com/grpc-ecosystem/grpc-gateway/pull/772) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +## [v1.5.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-02) [Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.0...v1.5.1) **Implemented enhancements:** @@ -21,9 +69,12 @@ - How to write tests for the gateway? [\#699](https://github.com/grpc-ecosystem/grpc-gateway/issues/699) - protoc-gen-swagger: No comments for path parameters [\#694](https://github.com/grpc-ecosystem/grpc-gateway/issues/694) - Can you differentiate between an empty map vs field not provided? [\#552](https://github.com/grpc-ecosystem/grpc-gateway/issues/552) +- import\_path option not working as intended [\#536](https://github.com/grpc-ecosystem/grpc-gateway/issues/536) **Merged pull requests:** +- Add default value for swagger 200 response [\#767](https://github.com/grpc-ecosystem/grpc-gateway/pull/767) ([johnchildren](https://github.com/johnchildren)) +- Generate changelog for release v1.5.1 [\#764](https://github.com/grpc-ecosystem/grpc-gateway/pull/764) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Revert \#708 since it breaks backwards compatibility [\#761](https://github.com/grpc-ecosystem/grpc-gateway/pull/761) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update README.md [\#757](https://github.com/grpc-ecosystem/grpc-gateway/pull/757) ([wora](https://github.com/wora)) - Added camelCase Example [\#751](https://github.com/grpc-ecosystem/grpc-gateway/pull/751) ([srikrsna](https://github.com/srikrsna)) @@ -44,7 +95,6 @@ - autoregister all provided services [\#732](https://github.com/grpc-ecosystem/grpc-gateway/issues/732) - `go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` fails on clean environment [\#731](https://github.com/grpc-ecosystem/grpc-gateway/issues/731) - format tool [\#729](https://github.com/grpc-ecosystem/grpc-gateway/issues/729) -- Client grabbing errors [\#728](https://github.com/grpc-ecosystem/grpc-gateway/issues/728) - how to do tls auth in grpc+grpc-gateway [\#727](https://github.com/grpc-ecosystem/grpc-gateway/issues/727) - Let service choose it's own marshaller [\#725](https://github.com/grpc-ecosystem/grpc-gateway/issues/725) - why gateway proxy can not distribute the http request to local server? prompt 404 [\#722](https://github.com/grpc-ecosystem/grpc-gateway/issues/722) @@ -210,7 +260,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) **Implemented enhancements:** @@ -251,7 +301,7 @@ - swagger: Unclear comments' parser behaviour [\#352](https://github.com/grpc-ecosystem/grpc-gateway/issues/352) - Support semicolon syntax in go\_package protobuf option [\#341](https://github.com/grpc-ecosystem/grpc-gateway/issues/341) - Add SOAP proxy [\#339](https://github.com/grpc-ecosystem/grpc-gateway/issues/339) -- Support combination of query params and body for POSTs [\#234](https://github.com/grpc-ecosystem/grpc-gateway/issues/234) +- Support combination of query params and body for POSTs with body: "\*" [\#234](https://github.com/grpc-ecosystem/grpc-gateway/issues/234) - Interceptor [\#221](https://github.com/grpc-ecosystem/grpc-gateway/issues/221) **Merged pull requests:** @@ -267,11 +317,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) - ## [v1.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) + +## [v1.3.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) **Closed issues:** @@ -685,4 +735,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Makefile b/Makefile index 865058628ef..d7eb8fa9781 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.5.1 + --future-release=v1.6.0 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 66f0e34a24333799f541fbc554b5449aafda557e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 7 Dec 2018 20:25:40 +0000 Subject: [PATCH 0068/1518] Check out code before calling ghr --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index b4189cd4638..7e0e657f5af 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -148,6 +148,7 @@ jobs: steps: - attach_workspace: at: ./release + - checkout - run: name: "Publish Release on GitHub" command: | From 01c07cdabb480b6d67b5c5586ae3b66e806de513 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 7 Dec 2018 21:24:57 +0000 Subject: [PATCH 0069/1518] Write version to intermediate file for release publish --- .circleci/config.yml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7e0e657f5af..b1fe018b1bd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,6 +76,17 @@ jobs: command: 'bazel run //:buildifier_check || (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always + write_release_version: + docker: + - image: docker:git + working_directory: /src + steps: + - checkout + - run: git describe --tags --abbrev=0 > VERSION + - persist_to_workspace: + root: ./ + paths: + - VERSION build_linux_release: docker: - image: jfbrandhorst/grpc-gateway-build-env @@ -147,13 +158,12 @@ jobs: - image: cibuilds/github:0.10 steps: - attach_workspace: - at: ./release - - checkout + at: /workspace - run: name: "Publish Release on GitHub" command: | - VERSION=$(git describe --tags --abbrev=0) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} ${VERSION} ./release/ + VERSION=$(cat /workspace/VERSION) + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} /workspace/release/ workflows: version: 2 all: @@ -164,6 +174,12 @@ workflows: - generate - lint - bazel + - write_release_version: + filters: + branches: + ignore: /.*/ + tags: + only: /^v\d+\.\d+\.\d+$/ - build_linux_release: filters: branches: @@ -184,6 +200,7 @@ workflows: only: /^v\d+\.\d+\.\d+$/ - publish_github_release: requires: + - write_release_version - build_linux_release - build_darwin_release - build_windows_release From 5b7aa478a4868c90f73159b3db1d0f4432132a03 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 7 Dec 2018 17:21:11 -0700 Subject: [PATCH 0070/1518] Stop the publishing recursion --- .circleci/config.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b1fe018b1bd..09d050563e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,14 +198,14 @@ workflows: ignore: /.*/ tags: only: /^v\d+\.\d+\.\d+$/ - - publish_github_release: - requires: - - write_release_version - - build_linux_release - - build_darwin_release - - build_windows_release - filters: - branches: - ignore: /.*/ - tags: - only: /^v\d+\.\d+\.\d+$/ +# - publish_github_release: +# requires: +# - write_release_version +# - build_linux_release +# - build_darwin_release +# - build_windows_release +# filters: +# branches: +# ignore: /.*/ +# tags: +# only: /^v\d+\.\d+\.\d+$/ From 2cb2dfbd4c72b13c88abc7828f9b276bf7e66133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=BCderl?= Date: Thu, 8 Nov 2018 16:51:33 +0100 Subject: [PATCH 0071/1518] Swagger-gen: Major overhaul of well-known-type handling - swaggerSchemaObject.Properties is now optional (pointer), because google.protobuf.Empty requires us to set Properties{} instead of nil, because this equals in Swagger to an empty JSON object (which is exactly what Empty represents and how the gateway treats it). If it's not a pointer, we can't distinguish between "not set" (in most cases, we don't want Properties to be set, instead usually just .Ref is set), and "set to an empty value e.g. Properties{} with length 0). We don't want Properties{} to occur except for specific cases, e.g. for Empty. - Wrappers and Empty are not rendered as definitions, now also for RPC Method input/output. instead, all necessary schema information is provided "in-line" via schema.type and schema.properties. - Empty is now omitted as well if it's input/output of a RPC Method. --- Makefile | 1 - examples/clients/abe/BUILD.bazel | 1 - .../abe/a_bit_of_everything_service_api.go | 60 +-- .../abe/camel_case_service_name_api.go | 6 +- .../abe/examplepb_a_bit_of_everything.go | 2 +- examples/clients/abe/protobuf_empty.go | 15 - .../a_bit_of_everything.swagger.json | 29 +- examples/proto/examplepb/wrappers.pb.go | 404 +++++++++++++++-- examples/proto/examplepb/wrappers.pb.gw.go | 412 ++++++++++++++++++ examples/proto/examplepb/wrappers.proto | 62 +++ .../proto/examplepb/wrappers.swagger.json | 276 ++++++++++++ protoc-gen-swagger/genswagger/template.go | 92 ++-- protoc-gen-swagger/genswagger/types.go | 4 +- 13 files changed, 1232 insertions(+), 132 deletions(-) delete mode 100644 examples/clients/abe/protobuf_empty.go diff --git a/Makefile b/Makefile index d7eb8fa9781..b2d6722d2c7 100644 --- a/Makefile +++ b/Makefile @@ -101,7 +101,6 @@ ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/a_bit_of_everything_nested.go \ $(EXAMPLE_CLIENT_DIR)/abe/examplepb_body.go \ $(EXAMPLE_CLIENT_DIR)/abe/examplepb_numeric_enum.go \ $(EXAMPLE_CLIENT_DIR)/abe/nested_deep_enum.go \ - $(EXAMPLE_CLIENT_DIR)/abe/protobuf_empty.go \ $(EXAMPLE_CLIENT_DIR)/abe/sub_string_message.go UNANNOTATED_ECHO_EXAMPLE_SPEC=examples/proto/examplepb/unannotated_echo_service.swagger.json UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_client.go \ diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 5df684b7f31..4d3c3546e93 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -22,7 +22,6 @@ go_library( "message_path_enum_nested_path_enum.go", "nested_deep_enum.go", "pathenum_path_enum.go", - "protobuf_empty.go", "protobuf_field_mask.go", "sub_string_message.go", ], diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 5e8d72779c3..85e864ca833 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -303,9 +303,9 @@ func (a ABitOfEverythingServiceApi) DeepPathEcho(singleNestedName string, body E * * * @param uuid - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) Delete(uuid string) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Delete(uuid string) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Delete") // create path and map variables @@ -350,7 +350,7 @@ func (a ABitOfEverythingServiceApi) Delete(uuid string) (*ProtobufEmpty, *APIRes if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -371,9 +371,9 @@ func (a ABitOfEverythingServiceApi) Delete(uuid string) (*ProtobufEmpty, *APIRes /** * * - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -422,7 +422,7 @@ func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*ProtobufEmpty, *APIResp if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -445,9 +445,9 @@ func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*ProtobufEmpty, *APIResp * * @param id * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body ExamplepbBody) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body ExamplepbBody) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables @@ -499,7 +499,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -547,9 +547,9 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param nonConventionalNameValue * @param timestampValue * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -616,7 +616,7 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName strin if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -817,9 +817,9 @@ func (a ABitOfEverythingServiceApi) Lookup(uuid string) (*ExamplepbABitOfEveryth * * @param abeUuid * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, body ExamplepbUpdateV2Request) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, body ExamplepbUpdateV2Request) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Patch") // create path and map variables @@ -871,7 +871,7 @@ func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, bod } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -894,9 +894,9 @@ func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, bod * * @param name * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables @@ -948,7 +948,7 @@ func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body Examplep } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -969,9 +969,9 @@ func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body Examplep /** * * - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) Timeout() (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -1020,7 +1020,7 @@ func (a ABitOfEverythingServiceApi) Timeout() (*ProtobufEmpty, *APIResponse, err if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -1043,9 +1043,9 @@ func (a ABitOfEverythingServiceApi) Timeout() (*ProtobufEmpty, *APIResponse, err * * @param uuid * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Put") // create path and map variables @@ -1097,7 +1097,7 @@ func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEver } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -1120,9 +1120,9 @@ func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEver * * @param abeUuid * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Put") // create path and map variables @@ -1174,7 +1174,7 @@ func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitO } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) @@ -1197,9 +1197,9 @@ func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitO * * @param abeUuid * @param body - * @return *ProtobufEmpty + * @return *interface{} */ -func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Patch") // create path and map variables @@ -1251,7 +1251,7 @@ func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABit } // body params localVarPostBody = &body - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) diff --git a/examples/clients/abe/camel_case_service_name_api.go b/examples/clients/abe/camel_case_service_name_api.go index ff49b76851b..cb8cb48fd99 100644 --- a/examples/clients/abe/camel_case_service_name_api.go +++ b/examples/clients/abe/camel_case_service_name_api.go @@ -40,9 +40,9 @@ func NewCamelCaseServiceNameApiWithBasePath(basePath string) *CamelCaseServiceNa * Create a new ABitOfEverything * This API creates a new ABitOfEverything * - * @return *ProtobufEmpty + * @return *interface{} */ -func (a CamelCaseServiceNameApi) Empty() (*ProtobufEmpty, *APIResponse, error) { +func (a CamelCaseServiceNameApi) Empty() (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -91,7 +91,7 @@ func (a CamelCaseServiceNameApi) Empty() (*ProtobufEmpty, *APIResponse, error) { if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - var successPayload = new(ProtobufEmpty) + var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index f413637e1ca..9701914d126 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -61,7 +61,7 @@ type ExamplepbABitOfEverything struct { RepeatedStringValue []string `json:"repeated_string_value,omitempty"` - OneofEmpty ProtobufEmpty `json:"oneof_empty,omitempty"` + OneofEmpty interface{} `json:"oneof_empty,omitempty"` OneofString string `json:"oneof_string,omitempty"` diff --git a/examples/clients/abe/protobuf_empty.go b/examples/clients/abe/protobuf_empty.go deleted file mode 100644 index 97c7bf612b8..00000000000 --- a/examples/clients/abe/protobuf_empty.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`. -type ProtobufEmpty struct { -} diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index b3249e62612..227bb4eeea5 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -128,7 +128,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -636,7 +636,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -683,7 +683,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -960,7 +960,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1006,7 +1006,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1160,7 +1160,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1192,7 +1192,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1224,7 +1224,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1272,7 +1272,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1304,7 +1304,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1352,7 +1352,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} } }, "403": { @@ -1521,7 +1521,7 @@ } }, "oneof_empty": { - "$ref": "#/definitions/protobufEmpty" + "properties": {} }, "oneof_string": { "type": "string" @@ -1723,11 +1723,6 @@ ], "default": "ABC" }, - "protobufEmpty": { - "type": "object", - "description": "service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.", - "title": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:" - }, "protobufFieldMask": { "type": "object", "properties": { diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index fb44ca7aba9..0b0616ee60c 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -6,6 +6,7 @@ package examplepb import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import empty "github.com/golang/protobuf/ptypes/empty" import wrappers "github.com/golang/protobuf/ptypes/wrappers" import _ "google.golang.org/genproto/googleapis/api/annotations" @@ -44,7 +45,7 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_5850bd48b0187754, []int{0} + return fileDescriptor_wrappers_3d2e9c7780d635b4, []int{0} } func (m *Wrappers) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Wrappers.Unmarshal(m, b) @@ -144,6 +145,16 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type WrappersServiceClient interface { Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) + CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) + CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) + CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) + CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) + CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) + CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) + CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) + CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) + CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) + CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) } type wrappersServiceClient struct { @@ -163,9 +174,109 @@ func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts . return out, nil } +func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) { + out := new(wrappers.StringValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateStringValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) { + out := new(wrappers.Int32Value) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateInt32Value", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) { + out := new(wrappers.Int64Value) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateInt64Value", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) { + out := new(wrappers.FloatValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateFloatValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) { + out := new(wrappers.DoubleValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) { + out := new(wrappers.BoolValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateBoolValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) { + out := new(wrappers.UInt32Value) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) { + out := new(wrappers.UInt64Value) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) { + out := new(wrappers.BytesValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateBytesValue", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { + out := new(empty.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateEmpty", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // WrappersServiceServer is the server API for WrappersService service. type WrappersServiceServer interface { Create(context.Context, *Wrappers) (*Wrappers, error) + CreateStringValue(context.Context, *wrappers.StringValue) (*wrappers.StringValue, error) + CreateInt32Value(context.Context, *wrappers.Int32Value) (*wrappers.Int32Value, error) + CreateInt64Value(context.Context, *wrappers.Int64Value) (*wrappers.Int64Value, error) + CreateFloatValue(context.Context, *wrappers.FloatValue) (*wrappers.FloatValue, error) + CreateDoubleValue(context.Context, *wrappers.DoubleValue) (*wrappers.DoubleValue, error) + CreateBoolValue(context.Context, *wrappers.BoolValue) (*wrappers.BoolValue, error) + CreateUInt32Value(context.Context, *wrappers.UInt32Value) (*wrappers.UInt32Value, error) + CreateUInt64Value(context.Context, *wrappers.UInt64Value) (*wrappers.UInt64Value, error) + CreateBytesValue(context.Context, *wrappers.BytesValue) (*wrappers.BytesValue, error) + CreateEmpty(context.Context, *empty.Empty) (*empty.Empty, error) } func RegisterWrappersServiceServer(s *grpc.Server, srv WrappersServiceServer) { @@ -190,6 +301,186 @@ func _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.StringValue) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateStringValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateStringValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrappers.StringValue)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.Int32Value) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateInt32Value(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateInt32Value", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrappers.Int32Value)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.Int64Value) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateInt64Value(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateInt64Value", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrappers.Int64Value)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.FloatValue) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateFloatValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateFloatValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrappers.FloatValue)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.DoubleValue) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateDoubleValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateDoubleValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrappers.DoubleValue)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.BoolValue) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateBoolValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateBoolValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrappers.BoolValue)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.UInt32Value) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateUInt32Value(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt32Value", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrappers.UInt32Value)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.UInt64Value) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateUInt64Value(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt64Value", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrappers.UInt64Value)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(wrappers.BytesValue) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateBytesValue(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateBytesValue", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrappers.BytesValue)) + } + return interceptor(ctx, in, info, handler) +} + +func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WrappersServiceServer).CreateEmpty(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateEmpty", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + var _WrappersService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.examplepb.WrappersService", HandlerType: (*WrappersServiceServer)(nil), @@ -198,39 +489,92 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ MethodName: "Create", Handler: _WrappersService_Create_Handler, }, + { + MethodName: "CreateStringValue", + Handler: _WrappersService_CreateStringValue_Handler, + }, + { + MethodName: "CreateInt32Value", + Handler: _WrappersService_CreateInt32Value_Handler, + }, + { + MethodName: "CreateInt64Value", + Handler: _WrappersService_CreateInt64Value_Handler, + }, + { + MethodName: "CreateFloatValue", + Handler: _WrappersService_CreateFloatValue_Handler, + }, + { + MethodName: "CreateDoubleValue", + Handler: _WrappersService_CreateDoubleValue_Handler, + }, + { + MethodName: "CreateBoolValue", + Handler: _WrappersService_CreateBoolValue_Handler, + }, + { + MethodName: "CreateUInt32Value", + Handler: _WrappersService_CreateUInt32Value_Handler, + }, + { + MethodName: "CreateUInt64Value", + Handler: _WrappersService_CreateUInt64Value_Handler, + }, + { + MethodName: "CreateBytesValue", + Handler: _WrappersService_CreateBytesValue_Handler, + }, + { + MethodName: "CreateEmpty", + Handler: _WrappersService_CreateEmpty_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/wrappers.proto", } func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_5850bd48b0187754) -} - -var fileDescriptor_wrappers_5850bd48b0187754 = []byte{ - // 381 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xdf, 0x4a, 0xf3, 0x30, - 0x18, 0xc6, 0xe9, 0xbe, 0x7d, 0x73, 0x4b, 0x05, 0xa1, 0x78, 0xa0, 0x75, 0x38, 0xd9, 0x89, 0x7f, - 0x0e, 0x52, 0xdc, 0xc6, 0x40, 0x11, 0x84, 0x29, 0x82, 0xa7, 0x0e, 0x15, 0x3c, 0x91, 0x64, 0xcb, - 0x4a, 0xa1, 0x36, 0x25, 0x4d, 0x37, 0x77, 0x24, 0x78, 0x09, 0x7a, 0x45, 0x5e, 0x83, 0xb7, 0xe0, - 0x85, 0x48, 0xb2, 0x37, 0xd9, 0x74, 0x54, 0x3d, 0x7b, 0xde, 0xe6, 0xf9, 0x3d, 0xe1, 0x7d, 0x48, - 0xd1, 0x2e, 0x7b, 0x24, 0x0f, 0x69, 0xcc, 0xb2, 0x20, 0x15, 0x5c, 0xf2, 0x00, 0xc6, 0x94, 0x06, - 0x13, 0x41, 0xd2, 0x94, 0x89, 0x0c, 0xeb, 0x03, 0xaf, 0x11, 0x8a, 0x74, 0x80, 0x43, 0x22, 0xd9, - 0x84, 0x4c, 0xb1, 0xa1, 0xb0, 0xf5, 0xfb, 0xf5, 0x90, 0xf3, 0x30, 0x66, 0x01, 0x49, 0xa3, 0x80, - 0x24, 0x09, 0x97, 0x44, 0x46, 0x3c, 0x01, 0xdc, 0xdf, 0x86, 0x53, 0x3d, 0xd1, 0x7c, 0xf4, 0x2d, - 0xbe, 0xf9, 0x56, 0x46, 0xd5, 0x5b, 0xf8, 0xe4, 0x9d, 0xa2, 0xd5, 0x4c, 0x8a, 0x28, 0x09, 0xef, - 0xc7, 0x24, 0xce, 0xd9, 0x86, 0xb3, 0xe3, 0xec, 0xb9, 0xad, 0x3a, 0x9e, 0x65, 0x60, 0x93, 0x81, - 0xfb, 0xda, 0x74, 0xa3, 0x3c, 0x57, 0x6e, 0x36, 0x1f, 0xbc, 0x13, 0xe4, 0x46, 0x89, 0x6c, 0xb7, - 0x80, 0x2f, 0x69, 0x7e, 0x6b, 0x89, 0xbf, 0x54, 0x9e, 0x19, 0x8e, 0x22, 0xab, 0x81, 0xee, 0x76, - 0x80, 0xfe, 0x57, 0x4c, 0x77, 0x3b, 0x73, 0x1a, 0xb4, 0xa2, 0x47, 0x31, 0x27, 0x12, 0xe8, 0x72, - 0x01, 0x7d, 0xa1, 0x3c, 0x40, 0x8f, 0xac, 0x56, 0xab, 0x0f, 0x79, 0x4e, 0x63, 0x06, 0xf8, 0xff, - 0x82, 0xd5, 0xcf, 0xb5, 0x09, 0x56, 0x1f, 0xce, 0x07, 0xef, 0x08, 0x21, 0xca, 0x79, 0x0c, 0x78, - 0x45, 0xe3, 0xfe, 0x12, 0xde, 0xe3, 0x3c, 0x9e, 0xc1, 0x35, 0x6a, 0xa4, 0xba, 0x3b, 0x5f, 0xac, - 0x6d, 0xa5, 0xe0, 0xee, 0xeb, 0x85, 0xde, 0xdc, 0x7c, 0xa1, 0x38, 0x08, 0xb0, 0xcd, 0x55, 0x7f, - 0x08, 0x30, 0xd5, 0xb9, 0xf9, 0xd7, 0xee, 0xe8, 0x54, 0xb2, 0x0c, 0xf8, 0x5a, 0x41, 0x77, 0x3d, - 0xe5, 0x81, 0xee, 0xa8, 0xd5, 0xad, 0x17, 0x07, 0xad, 0x99, 0x37, 0xd4, 0x67, 0x62, 0x1c, 0x0d, - 0x98, 0xf7, 0x84, 0x2a, 0x67, 0x82, 0x11, 0xc9, 0xbc, 0x7d, 0xfc, 0xcb, 0x0b, 0xc6, 0x86, 0xf5, - 0xff, 0x6e, 0x6d, 0x36, 0x9e, 0xdf, 0x3f, 0x5e, 0x4b, 0x9b, 0xcd, 0xf5, 0x60, 0x7c, 0x68, 0x7e, - 0x1e, 0xfb, 0xb6, 0x8f, 0x9d, 0x83, 0x9e, 0x7b, 0x57, 0xb3, 0x18, 0xad, 0xe8, 0x15, 0xda, 0x9f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0x0a, 0xc7, 0xe3, 0xe9, 0x76, 0x03, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_3d2e9c7780d635b4) +} + +var fileDescriptor_wrappers_3d2e9c7780d635b4 = []byte{ + // 578 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, + 0x8b, 0x44, 0x74, 0x55, 0x25, 0x26, 0x24, 0xa4, 0xf2, 0x21, 0x71, 0xcb, 0x34, 0x26, 0x71, 0x83, + 0xec, 0xcd, 0x8d, 0x82, 0xb2, 0x38, 0x4a, 0x9c, 0x8e, 0x5e, 0x21, 0xf1, 0x0a, 0x3c, 0x00, 0xcf, + 0xc2, 0x33, 0xf0, 0x0a, 0x3c, 0x08, 0xf2, 0x57, 0x3e, 0x9a, 0xe5, 0xc0, 0x9d, 0x9d, 0xff, 0xf9, + 0x9d, 0x7f, 0x7d, 0x7c, 0x8e, 0x8b, 0x9e, 0xf0, 0xaf, 0xf4, 0x32, 0x4b, 0x78, 0x11, 0x66, 0xb9, + 0x90, 0x22, 0xb4, 0xdb, 0x8c, 0x85, 0x57, 0x39, 0xcd, 0x32, 0x9e, 0x17, 0x81, 0x16, 0xf0, 0x41, + 0x94, 0x67, 0xe7, 0x41, 0x44, 0x25, 0xbf, 0xa2, 0xcb, 0xc0, 0x51, 0x41, 0x15, 0x4f, 0xf6, 0x23, + 0x21, 0xa2, 0x84, 0x87, 0x34, 0x8b, 0x43, 0x9a, 0xa6, 0x42, 0x52, 0x19, 0x8b, 0xd4, 0xe2, 0xe4, + 0x91, 0x55, 0xf5, 0x8e, 0x95, 0xf3, 0x95, 0xf4, 0x64, 0x6f, 0x55, 0xe7, 0x97, 0x99, 0x5c, 0x1a, + 0xd1, 0xff, 0xb5, 0x8e, 0x36, 0xce, 0x6c, 0x3c, 0x7e, 0x85, 0x36, 0x0b, 0x99, 0xc7, 0x69, 0xf4, + 0x79, 0x41, 0x93, 0x92, 0xef, 0x0c, 0x1e, 0x0f, 0x9e, 0x7a, 0xe3, 0xfd, 0xc0, 0x24, 0x08, 0x5c, + 0x82, 0xe0, 0x44, 0x07, 0x7d, 0x54, 0x31, 0x1f, 0xbc, 0xa2, 0xde, 0xe0, 0x97, 0xc8, 0x8b, 0x53, + 0x79, 0x34, 0xb6, 0xfc, 0x9a, 0xe6, 0xf7, 0x3a, 0xfc, 0x7b, 0x15, 0x63, 0x70, 0x14, 0x57, 0x6b, + 0x4b, 0x4f, 0x27, 0x96, 0xbe, 0xd1, 0x4f, 0x4f, 0x27, 0x35, 0x6d, 0xd7, 0x8a, 0x9e, 0x27, 0x82, + 0x4a, 0x4b, 0xaf, 0xf7, 0xd0, 0xef, 0x54, 0x8c, 0xa5, 0xe7, 0xd5, 0x5a, 0x1d, 0xfd, 0x42, 0x94, + 0x2c, 0xe1, 0x16, 0xbf, 0xd9, 0x73, 0xf4, 0x37, 0x3a, 0xc8, 0x1e, 0xfd, 0xa2, 0xde, 0xe0, 0x17, + 0x08, 0x31, 0x21, 0x12, 0x8b, 0x0f, 0x35, 0x4e, 0x3a, 0xf8, 0x4c, 0x88, 0xc4, 0xc0, 0x23, 0xe6, + 0x96, 0xca, 0xbb, 0x6c, 0x96, 0xed, 0x56, 0x8f, 0xf7, 0x69, 0xa3, 0x6e, 0x5e, 0xd9, 0x28, 0x9c, + 0x4d, 0x50, 0x55, 0x6e, 0x03, 0x48, 0xe0, 0x4a, 0xe7, 0x95, 0xed, 0xda, 0xb1, 0xa5, 0xe4, 0x85, + 0xe5, 0x47, 0x3d, 0xb5, 0x9b, 0xa9, 0x18, 0x5b, 0x3b, 0x56, 0xad, 0xc7, 0x3f, 0x47, 0x68, 0xcb, + 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, 0xc7, 0xdf, 0xd0, 0xf0, 0x75, 0xce, 0xa9, 0xe4, 0xf8, + 0x59, 0xf0, 0x8f, 0xf6, 0x0e, 0x1c, 0x4b, 0xfe, 0x3f, 0xd4, 0x3f, 0xf8, 0xfe, 0xfb, 0xcf, 0x8f, + 0xb5, 0x5d, 0xff, 0x7e, 0xb8, 0x78, 0xee, 0x26, 0xab, 0x6a, 0xfc, 0xe3, 0xc1, 0x21, 0xfe, 0x82, + 0xb6, 0xcd, 0x0f, 0x68, 0x34, 0x2b, 0x06, 0x5b, 0x99, 0x80, 0xaa, 0xbf, 0xab, 0x1d, 0xef, 0xf9, + 0x77, 0x94, 0xa3, 0xe4, 0x85, 0x34, 0xa2, 0xf2, 0x9a, 0xa3, 0xbb, 0xc6, 0xab, 0xbe, 0x20, 0x0c, + 0x75, 0x3d, 0x81, 0x44, 0x7f, 0x47, 0x1b, 0x61, 0xff, 0xb6, 0x33, 0xd2, 0xda, 0xaa, 0x8f, 0xbb, + 0x3a, 0x68, 0x3e, 0x08, 0x24, 0x5e, 0xeb, 0x33, 0x9d, 0xb4, 0x7c, 0xea, 0x61, 0xc1, 0xd0, 0x24, + 0x11, 0x48, 0xec, 0xfa, 0x68, 0xad, 0x75, 0x47, 0x8d, 0xa9, 0xc2, 0xe0, 0xcc, 0x11, 0x50, 0xed, + 0xde, 0x91, 0x11, 0x95, 0x17, 0x43, 0x5b, 0xc6, 0xab, 0x1a, 0x41, 0x0c, 0x8c, 0x27, 0x01, 0x34, + 0xff, 0xa1, 0x76, 0xd9, 0xf6, 0x37, 0x9d, 0x8b, 0x92, 0x5a, 0xe7, 0x69, 0x4c, 0x2a, 0x06, 0xe7, + 0x98, 0x80, 0x6a, 0xf7, 0x3c, 0xa7, 0xb1, 0xeb, 0x85, 0x96, 0x97, 0x6b, 0x06, 0x70, 0xe4, 0x09, + 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, 0xf5, 0x03, 0x80, 0xa1, 0xd7, 0x81, 0x40, 0x62, 0xb7, 0x1f, + 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, 0x7c, 0xde, 0xaa, 0x7f, 0x28, 0xfc, 0xa0, 0x93, 0x45, 0x7f, + 0x27, 0x3d, 0xdf, 0xbb, 0x89, 0xf5, 0xe7, 0xe3, 0xc1, 0xe1, 0xcc, 0xfb, 0x34, 0xaa, 0xde, 0x10, + 0x36, 0xd4, 0xd8, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x83, 0xaf, 0x71, 0xa0, 0x07, + 0x00, 0x00, } diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 7e95a4c6163..703f2e604fb 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -13,6 +13,8 @@ import ( "net/http" "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/empty" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "golang.org/x/net/context" @@ -45,6 +47,176 @@ func request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Mar } +func request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.StringValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateStringValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.Int32Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateInt32Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.Int64Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateInt64Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.FloatValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateFloatValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.DoubleValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateDoubleValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.BoolValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateBoolValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.UInt32Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateUInt32Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.UInt64Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateUInt64Value(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.BytesValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateBytesValue(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateEmpty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + // RegisterWrappersServiceHandlerFromEndpoint is same as RegisterWrappersServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -103,13 +275,253 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv }) + mux.Handle("POST", pattern_WrappersService_CreateStringValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateStringValue_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateStringValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateInt32Value_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateInt64Value_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateFloatValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateFloatValue_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateFloatValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateDoubleValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateDoubleValue_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateDoubleValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateBoolValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateBoolValue_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateBoolValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateUInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateUInt32Value_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateUInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateUInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateUInt64Value_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateUInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateBytesValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateBytesValue_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateBytesValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateEmpty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_WrappersService_CreateEmpty_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateEmpty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } var ( pattern_WrappersService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "wrappers"}, "")) + + pattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testString"}, "")) + + pattern_WrappersService_CreateInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt32"}, "")) + + pattern_WrappersService_CreateInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt64"}, "")) + + pattern_WrappersService_CreateFloatValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testFloat"}, "")) + + pattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testDouble"}, "")) + + pattern_WrappersService_CreateBoolValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBool"}, "")) + + pattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint32"}, "")) + + pattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint64"}, "")) + + pattern_WrappersService_CreateBytesValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBytes"}, "")) + + pattern_WrappersService_CreateEmpty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testEmpty"}, "")) ) var ( forward_WrappersService_Create_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateStringValue_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateInt32Value_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateInt64Value_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateFloatValue_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateDoubleValue_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateBoolValue_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateUInt32Value_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateUInt64Value_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateBytesValue_0 = runtime.ForwardResponseMessage + + forward_WrappersService_CreateEmpty_0 = runtime.ForwardResponseMessage ) diff --git a/examples/proto/examplepb/wrappers.proto b/examples/proto/examplepb/wrappers.proto index b232a37fc83..46b2552a3f7 100644 --- a/examples/proto/examplepb/wrappers.proto +++ b/examples/proto/examplepb/wrappers.proto @@ -4,6 +4,7 @@ package grpc.gateway.examples.examplepb; import "google/api/annotations.proto"; import "google/protobuf/wrappers.proto"; +import "google/protobuf/empty.proto"; message Wrappers { google.protobuf.StringValue string_value = 1; @@ -24,4 +25,65 @@ service WrappersService { body: "*" }; } + + rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) { + option (google.api.http) = { + post: "/v1/testString" + body: "*" + }; + } + rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) { + option (google.api.http) = { + post: "/v1/testInt32" + body: "*" + }; + } + rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value){ + option (google.api.http) = { + post: "/v1/testInt64" + body: "*" + }; + } + rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue){ + option (google.api.http) = { + post: "/v1/testFloat" + body: "*" + }; + } + rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue){ + option (google.api.http) = { + post: "/v1/testDouble" + body: "*" + }; + } + rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue){ + option (google.api.http) = { + post: "/v1/testBool" + body: "*" + }; + } + rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value){ + option (google.api.http) = { + post: "/v1/testUint32" + body: "*" + }; + } + rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value){ + option (google.api.http) = { + post: "/v1/testUint64" + body: "*" + }; + } + rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue){ + option (google.api.http) = { + post: "/v1/testBytes" + body: "*" + }; + } + rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty){ + option (google.api.http) = { + post: "/v1/testEmpty" + body: "*" + }; + } } diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/proto/examplepb/wrappers.swagger.json index 8e2df83bb20..f45b512e1c6 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/proto/examplepb/wrappers.swagger.json @@ -40,6 +40,282 @@ "WrappersService" ] } + }, + "/v1/testBool": { + "post": { + "operationId": "CreateBoolValue", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "boolean", + "format": "boolean" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "boolean", + "format": "boolean" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testBytes": { + "post": { + "operationId": "CreateBytesValue", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "string", + "format": "byte" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string", + "format": "byte" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testDouble": { + "post": { + "operationId": "CreateDoubleValue", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "number", + "format": "double" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "number", + "format": "double" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testEmpty": { + "post": { + "operationId": "CreateEmpty", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "properties": {} + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testFloat": { + "post": { + "operationId": "CreateFloatValue", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "number", + "format": "float" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "number", + "format": "float" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testInt32": { + "post": { + "operationId": "CreateInt32Value", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "integer", + "format": "int32" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testInt64": { + "post": { + "operationId": "CreateInt64Value", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "string", + "format": "int64" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string", + "format": "int64" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testString": { + "post": { + "operationId": "CreateStringValue", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "string" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testUint32": { + "post": { + "operationId": "CreateUInt32Value", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "tags": [ + "WrappersService" + ] + } + }, + "/v1/testUint64": { + "post": { + "operationId": "CreateUInt64Value", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "string", + "format": "uint64" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string", + "format": "uint64" + } + } + ], + "tags": [ + "WrappersService" + ] + } } }, "definitions": { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f2f9a8e354a..930b6c78d7d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -58,6 +58,7 @@ var wktSchemas = map[string]schemaCore{ Type: "boolean", Format: "boolean", }, + ".google.protobuf.Empty": schemaCore{}, } func listEnumNames(enum *descriptor.Enum) (names []string) { @@ -170,11 +171,15 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto for _, meth := range svc.Methods { // Request may be fully included in query if _, ok := refs[fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg))]; ok { - m[fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)] = meth.RequestType + if !skipRenderingRef(meth.RequestType.FQMN()) { + m[fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)] = meth.RequestType + } } findNestedMessagesAndEnumerations(meth.RequestType, reg, m, e) - m[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + if !skipRenderingRef(meth.ResponseType.FQMN()) { + m[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + } findNestedMessagesAndEnumerations(meth.ResponseType, reg, m, e) } } @@ -204,32 +209,19 @@ func findNestedMessagesAndEnumerations(message *descriptor.Message, reg *descrip } } +func skipRenderingRef(refName string) bool { + if _, ok := wktSchemas[refName]; ok { + return true + } + return false +} + func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry, customRefs refMap) { for name, msg := range messages { - switch name { - case ".google.protobuf.Timestamp": - continue - case ".google.protobuf.Duration": - continue - case ".google.protobuf.StringValue": - continue - case ".google.protobuf.BytesValue": - continue - case ".google.protobuf.Int32Value": - continue - case ".google.protobuf.UInt32Value": - continue - case ".google.protobuf.Int64Value": - continue - case ".google.protobuf.UInt64Value": - continue - case ".google.protobuf.FloatValue": - continue - case ".google.protobuf.DoubleValue": - continue - case ".google.protobuf.BoolValue": + if skipRenderingRef(name) { continue } + if opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { continue } @@ -289,7 +281,10 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } else { kv.Key = f.GetName() } - schema.Properties = append(schema.Properties, kv) + if schema.Properties == nil { + schema.Properties = &swaggerSchemaObjectProperties{} + } + *schema.Properties = append(*schema.Properties, kv) } d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = schema } @@ -318,16 +313,23 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s aggregate = array } + var props *swaggerSchemaObjectProperties + switch ft := fd.GetType(); ft { case pbdescriptor.FieldDescriptorProto_TYPE_ENUM, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE, pbdescriptor.FieldDescriptorProto_TYPE_GROUP: if wktSchema, ok := wktSchemas[fd.GetTypeName()]; ok { core = wktSchema + + if fd.GetTypeName() == ".google.protobuf.Empty" { + props = &swaggerSchemaObjectProperties{} + } } else { core = schemaCore{ Ref: "#/definitions/" + fullyQualifiedNameToSwaggerName(fd.GetTypeName(), reg), } if refs != nil { refs[fd.GetTypeName()] = struct{}{} + } } default: @@ -352,11 +354,12 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s schemaCore: schemaCore{ Type: "object", }, - AdditionalProperties: &swaggerSchemaObject{schemaCore: core}, + AdditionalProperties: &swaggerSchemaObject{Properties: props, schemaCore: core}, } default: ret := swaggerSchemaObject{ schemaCore: core, + Properties: props, } if j, err := extractJSONSchemaFromFieldDescriptor(fd); err == nil { updateSwaggerObjectFromJSONSchema(&ret, j) @@ -657,9 +660,19 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if len(b.Body.FieldPath) == 0 { schema = swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)), - }, + schemaCore: schemaCore{}, + } + + wknSchemaCore, isWkn := wktSchemas[meth.RequestType.FQMN()] + if !isWkn { + schema.Ref = fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)) + } else { + schema.schemaCore = wknSchemaCore + + // Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher. + if meth.RequestType.FQMN() == ".google.protobuf.Empty" { + schema.Properties = &swaggerSchemaObjectProperties{} + } } } else { lastField := b.Body.FieldPath[len(b.Body.FieldPath)-1] @@ -701,9 +714,23 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if b.ResponseBody == nil || len(b.ResponseBody.FieldPath) == 0 { responseSchema = swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)), - }, + schemaCore: schemaCore{}, + } + + // Don't link to a full definition for + // empty; it's overly verbose. + // schema.Properties{} renders it as + // well, without a definition + wknSchemaCore, isWkn := wktSchemas[meth.ResponseType.FQMN()] + if !isWkn { + responseSchema.Ref = fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)) + } else { + responseSchema.schemaCore = wknSchemaCore + + // Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher. + if meth.ResponseType.FQMN() == ".google.protobuf.Empty" { + responseSchema.Properties = &swaggerSchemaObjectProperties{} + } } } else { // This is resolving the value of response_body in the google.api.HttpRule @@ -1498,6 +1525,7 @@ func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs re enumMap[fullyQualifiedNameToSwaggerName(ref, reg)] = enum continue } + // ?? Should be either enum or msg } renderMessagesAsDefinition(msgMap, d, reg, refs) diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 9d01e21d15c..b66450cdaa3 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -199,8 +199,8 @@ func (op swaggerSchemaObjectProperties) MarshalJSON() ([]byte, error) { type swaggerSchemaObject struct { schemaCore // Properties can be recursively defined - Properties swaggerSchemaObjectProperties `json:"properties,omitempty"` - AdditionalProperties *swaggerSchemaObject `json:"additionalProperties,omitempty"` + Properties *swaggerSchemaObjectProperties `json:"properties,omitempty"` + AdditionalProperties *swaggerSchemaObject `json:"additionalProperties,omitempty"` Description string `json:"description,omitempty"` Title string `json:"title,omitempty"` From 8140d9885335da81d10ae02cff62afff36fb4ae4 Mon Sep 17 00:00:00 2001 From: Sam Batschelet Date: Tue, 18 Dec 2018 17:47:05 -0500 Subject: [PATCH 0072/1518] protoc-gen-swagger: check typeIndex when typeName is Method Signed-off-by: Sam Batschelet --- protoc-gen-swagger/genswagger/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 930b6c78d7d..e579d953dbe 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1245,7 +1245,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type } if typeName == "Method" { - if paths[0] != serviceProtoPath || paths[2] != methodProtoPath { + if paths[0] != serviceProtoPath || paths[1] != typeIndex || paths[2] != methodProtoPath { return false } paths = paths[2:] From 247dea366c8121b0143c4f7513c00b56c4e98fd0 Mon Sep 17 00:00:00 2001 From: Sam Batschelet Date: Thu, 20 Dec 2018 13:00:11 -0500 Subject: [PATCH 0073/1518] protoc-gen-swagger: add tests for isProtoPathMatches and protoComments Signed-off-by: Sam Batschelet --- .../genswagger/template_test.go | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 5dcb33756ed..359a1b92dce 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1019,3 +1019,145 @@ func TestSchemaOfField(t *testing.T) { } } } + +func fileFixtureServices(services []string) *descriptor.File { + var ( + svcdesc = []*protodescriptor.ServiceDescriptorProto{} + loc = []*protodescriptor.SourceCodeInfo_Location{} + msgdesc = []*protodescriptor.DescriptorProto{} + methdesc = []*protodescriptor.MethodDescriptorProto{} + msg = []*descriptor.Message{} + svc = []*descriptor.Service{} + ) + + for _, service := range services { + // loc + sc := &protodescriptor.SourceCodeInfo_Location{ + LeadingComments: proto.String(fmt.Sprintf("%s message", service)), + } + loc = append(loc, sc) + // methdesc + md := &protodescriptor.MethodDescriptorProto{ + Name: proto.String(service), + InputType: proto.String(fmt.Sprintf("%sMessage", service)), + OutputType: proto.String(fmt.Sprintf("%sMessage", service)), + } + methdesc = append(methdesc, md) + // svcdesc + sd := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String(fmt.Sprintf("%sService", service)), + Method: []*protodescriptor.MethodDescriptorProto{md}, + } + svcdesc = append(svcdesc, sd) + // msgdesc + d := &protodescriptor.DescriptorProto{ + Name: proto.String(fmt.Sprintf("%sRequest", service)), + } + msgdesc = append(msgdesc, d) + // msg + m := &descriptor.Message{ + DescriptorProto: d, + } + msg = append(msg, m) + // methods + meth := &descriptor.Method{ + MethodDescriptorProto: md, + RequestType: m, + ResponseType: m, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: fmt.Sprintf("/v1/%s", service), + }, + }, + }, + } + s := &descriptor.Service{ + ServiceDescriptorProto: sd, + Methods: []*descriptor.Method{meth}, + } + svc = append(svc, s) + } + + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{ + Location: loc, + }, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: msgdesc, + Service: svcdesc, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example1.pb", + Name: "example_pb", + }, + Messages: msg, + Services: svc, + } + return &file +} + +func TestIsProtoPathMatches(t *testing.T) { + for _, test := range []struct { + path []int32 + outerPaths []int32 + typeName string + typeIndex int32 + fieldPaths []int32 + want bool + }{ + {[]int32{6, 0, 2, 0}, []int32{}, "Method", 1, []int32{2, 0}, false}, + {[]int32{6, 0, 2, 0, 1}, []int32{}, "Method", 1, []int32{2, 0}, false}, + {[]int32{6, 0, 2, 0}, []int32{}, "Method", 0, []int32{2, 0}, true}, + {[]int32{}, []int32{}, "Package", 2, []int32{}, false}, + {[]int32{2}, []int32{}, "Package", 3, []int32{}, false}, + {[]int32{2}, []int32{}, "Package", 2, []int32{}, true}, + {[]int32{4, 0}, []int32{}, "MessageType", 1, []int32{}, false}, + {[]int32{4, 0, 2, 0}, []int32{}, "MessageType", 0, []int32{4, 0}, false}, + } { + got := isProtoPathMatches(test.path, test.outerPaths, test.typeName, test.typeIndex, test.fieldPaths) + if got != test.want { + t.Errorf("isProtoPathMatches(%v) got (%t) want %t", test, got, test.want) + } + } +} + +func TestProtoComments(t *testing.T) { + for _, test := range []struct { + services []string + startPath []int32 + outers []string + typeName string + typeIndex int32 + fieldPaths []int32 + want string + }{ + {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 0, []int32{2, 0}, "Foo message"}, + {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 1, []int32{2, 0}, "Bar message"}, + {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 2, []int32{2, 0}, ""}, + {[]string{"Foo", "Bar"}, []int32{4, 0, 1}, []string{}, "Method", 0, []int32{2, 0}, ""}, + {[]string{"Foo", "Bar"}, []int32{6, 0, 1, 1}, []string{}, "Method", 0, []int32{2, 0}, ""}, + {[]string{"Foo", "Bar", "Baz"}, []int32{6, 0, 2, 0}, []string{}, "Method", 2, []int32{2, 0}, "Baz message"}, + } { + file := fileFixtureServices(test.services) + for i, loc := range file.SourceCodeInfo.Location { + test.startPath[1] = int32(i) + loc.Path = append(loc.Path, test.startPath...) + } + reg := descriptor.NewRegistry() + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + got := protoComments(reg, file, test.outers, test.typeName, test.typeIndex, test.fieldPaths...) + if got != test.want { + t.Errorf("protoComments(%v) got (%s) want %s", test, got, test.want) + } + } +} From 11787b1760cc8a3ce36b4175b60d48f048d1eb68 Mon Sep 17 00:00:00 2001 From: Sam Batschelet Date: Thu, 20 Dec 2018 13:36:28 -0500 Subject: [PATCH 0074/1518] examples/*: regenerate files Signed-off-by: Sam Batschelet --- examples/clients/abe/camel_case_service_name_api.go | 3 +-- examples/proto/examplepb/a_bit_of_everything.swagger.json | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/clients/abe/camel_case_service_name_api.go b/examples/clients/abe/camel_case_service_name_api.go index cb8cb48fd99..d761b19786c 100644 --- a/examples/clients/abe/camel_case_service_name_api.go +++ b/examples/clients/abe/camel_case_service_name_api.go @@ -37,8 +37,7 @@ func NewCamelCaseServiceNameApiWithBasePath(basePath string) *CamelCaseServiceNa } /** - * Create a new ABitOfEverything - * This API creates a new ABitOfEverything + * * * @return *interface{} */ diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 227bb4eeea5..7ca5c86992c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1153,8 +1153,6 @@ }, "/v2/example/empty": { "get": { - "summary": "Create a new ABitOfEverything", - "description": "This API creates a new ABitOfEverything", "operationId": "Empty", "responses": { "200": { From 538c6622a488546f4c7edb2a26de6c1d1406b170 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 21 Dec 2018 13:03:14 +0000 Subject: [PATCH 0075/1518] Include version in release builds --- protoc-gen-grpc-gateway/main.go | 14 ++++++++++++++ protoc-gen-swagger/main.go | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index a34627534ca..39ceb256fc9 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -10,6 +10,7 @@ package main import ( "flag" + "fmt" "os" "strings" @@ -31,12 +32,25 @@ var ( pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") + versionFlag = flag.Bool("version", false, "print the current verison") +) + +// Variables set by goreleaser at build time +var ( + version = "dev" + commit = "unknown" + date = "unknown" ) func main() { flag.Parse() defer glog.Flush() + if *versionFlag { + fmt.Printf("Version %v, commit %v, built at %v\n", version, commit, date) + os.Exit(0) + } + reg := descriptor.NewRegistry() glog.V(1).Info("Parsing code generator request") diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 578b5c4233e..5c921f6e163 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -23,12 +23,25 @@ var ( mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") + versionFlag = flag.Bool("version", false, "print the current verison") +) + +// Variables set by goreleaser at build time +var ( + version = "dev" + commit = "unknown" + date = "unknown" ) func main() { flag.Parse() defer glog.Flush() + if *versionFlag { + fmt.Printf("Version %v, commit %v, built at %v\n", version, commit, date) + os.Exit(0) + } + reg := descriptor.NewRegistry() glog.V(1).Info("Processing code generator request") From 5b007c7def5c79ebe94eb7d5c0ce86e606415a56 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 21 Dec 2018 12:32:37 +0000 Subject: [PATCH 0076/1518] Replace complicated release procedure with goreleaser --- .circleci/config.yml | 117 ++----------------------------------------- .goreleaser.yml | 27 ++++++++++ 2 files changed, 31 insertions(+), 113 deletions(-) create mode 100644 .goreleaser.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 09d050563e0..68dd572a8ca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,94 +76,14 @@ jobs: command: 'bazel run //:buildifier_check || (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always - write_release_version: - docker: - - image: docker:git - working_directory: /src - steps: - - checkout - - run: git describe --tags --abbrev=0 > VERSION - - persist_to_workspace: - root: ./ - paths: - - VERSION - build_linux_release: - docker: - - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway - environment: - CGO_ENABLED: "0" - GOOS: "linux" - GOARCH: "amd64" - steps: - - checkout - - run: mkdir -p release - - run: dep ensure --vendor-only - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-linux-x86_64 ./protoc-gen-grpc-gateway/ - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-swagger-${VERSION}-linux-x86_64 ./protoc-gen-swagger/ - - persist_to_workspace: - root: ./ - paths: - - release - build_darwin_release: - docker: - - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway - environment: - CGO_ENABLED: "0" - GOOS: "darwin" - GOARCH: "amd64" - steps: - - checkout - - run: mkdir -p release - - run: dep ensure --vendor-only - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-darwin-x86_64 ./protoc-gen-grpc-gateway/ - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-swagger-${VERSION}-darwin-x86_64 ./protoc-gen-swagger/ - - persist_to_workspace: - root: ./ - paths: - - release - build_windows_release: + release: docker: - image: jfbrandhorst/grpc-gateway-build-env working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway - environment: - CGO_ENABLED: "0" - GOOS: "windows" - GOARCH: "amd64" steps: - checkout - - run: mkdir -p release - run: dep ensure --vendor-only - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-grpc-gateway-${VERSION}-windows-x86_64.exe ./protoc-gen-grpc-gateway/ - - run: | - VERSION=$(git describe --tags --abbrev=0) - go build -o ./release/protoc-gen-swagger-${VERSION}-windows-x86_64.exe ./protoc-gen-swagger/ - - persist_to_workspace: - root: ./ - paths: - - release - publish_github_release: - docker: - - image: cibuilds/github:0.10 - steps: - - attach_workspace: - at: /workspace - - run: - name: "Publish Release on GitHub" - command: | - VERSION=$(cat /workspace/VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} /workspace/release/ + - run: curl -sL https://git.io/goreleaser | bash workflows: version: 2 all: @@ -174,38 +94,9 @@ workflows: - generate - lint - bazel - - write_release_version: - filters: - branches: - ignore: /.*/ - tags: - only: /^v\d+\.\d+\.\d+$/ - - build_linux_release: - filters: - branches: - ignore: /.*/ - tags: - only: /^v\d+\.\d+\.\d+$/ - - build_windows_release: - filters: - branches: - ignore: /.*/ - tags: - only: /^v\d+\.\d+\.\d+$/ - - build_darwin_release: + - release: filters: branches: ignore: /.*/ tags: - only: /^v\d+\.\d+\.\d+$/ -# - publish_github_release: -# requires: -# - write_release_version -# - build_linux_release -# - build_darwin_release -# - build_windows_release -# filters: -# branches: -# ignore: /.*/ -# tags: -# only: /^v\d+\.\d+\.\d+$/ + only: /v[0-9]+(\.[0-9]+)*(-.*)*/ diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 00000000000..28131d84ff0 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,27 @@ +builds: + - main: ./protoc-gen-grpc-gateway/main.go + binary: protoc-gen-grpc-gateway + env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - amd64 + - main: ./protoc-gen-swagger/main.go + binary: protoc-gen-swagger + env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - amd64 +archive: + name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" + format: binary + replacements: + amd64: x86_64 +dist: _output From 719aaadb1a4f7b11606d454e266fe5c5f789796f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 21 Dec 2018 14:38:24 +0000 Subject: [PATCH 0077/1518] Regenerate changelog for 1.6.3 --- CHANGELOG.md | 40 ++++++++++++++++++++++++++++++++++------ Makefile | 2 +- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6ca50f188c..19c081f8c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,30 @@ # Change Log +## [v1.6.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) + +**Fixed bugs:** + +- Comments of rpc method gets copied if multiple services are present in a proto file. [\#746](https://github.com/grpc-ecosystem/grpc-gateway/issues/746) + +**Closed issues:** + +- Issue with google.protobuf.Empty representation in swagger file [\#831](https://github.com/grpc-ecosystem/grpc-gateway/issues/831) + +**Merged pull requests:** + +- protoc-gen-swagger: check typeIndex when typeName is Method [\#833](https://github.com/grpc-ecosystem/grpc-gateway/pull/833) ([hexfusion](https://github.com/hexfusion)) +- Replace complicated circle CI release with goreleaser. [\#828](https://github.com/grpc-ecosystem/grpc-gateway/pull/828) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Stop the publishing recursion [\#827](https://github.com/grpc-ecosystem/grpc-gateway/pull/827) ([achew22](https://github.com/achew22)) + +## [v1.6.2](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.2) (2018-12-07) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.0...v1.6.2) + ## [v1.6.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.0) (2018-12-07) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.0) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.1...v1.6.0) + +## [v1.6.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.1) (2018-12-07) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.1) **Implemented enhancements:** @@ -16,6 +39,7 @@ **Closed issues:** - Please release the repo, IOReaderFactory is not available on the latest release! [\#823](https://github.com/grpc-ecosystem/grpc-gateway/issues/823) +- Bazel CI breaks frequently [\#817](https://github.com/grpc-ecosystem/grpc-gateway/issues/817) - Unable to add protobuf wrappers in url template option [\#808](https://github.com/grpc-ecosystem/grpc-gateway/issues/808) - Class 'GPBMetadata\ProtocGenSwagger\Options\Annotations' not found [\#794](https://github.com/grpc-ecosystem/grpc-gateway/issues/794) - REST gateway over RPCS? [\#789](https://github.com/grpc-ecosystem/grpc-gateway/issues/789) @@ -27,6 +51,9 @@ **Merged pull requests:** +- Write version to intermediate file for release publish [\#826](https://github.com/grpc-ecosystem/grpc-gateway/pull/826) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Check out code before calling ghr [\#825](https://github.com/grpc-ecosystem/grpc-gateway/pull/825) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.6.0 [\#824](https://github.com/grpc-ecosystem/grpc-gateway/pull/824) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add filegroup for options proto files [\#821](https://github.com/grpc-ecosystem/grpc-gateway/pull/821) ([kellycampbell](https://github.com/kellycampbell)) - Added support for more WKT [\#816](https://github.com/grpc-ecosystem/grpc-gateway/pull/816) ([mayankcpdixit](https://github.com/mayankcpdixit)) - Fix protobuf repository's owner name on README.md [\#814](https://github.com/grpc-ecosystem/grpc-gateway/pull/814) ([micnncim](https://github.com/micnncim)) @@ -37,6 +64,7 @@ - Make Bazel CI failures clearer [\#807](https://github.com/grpc-ecosystem/grpc-gateway/pull/807) ([drigz](https://github.com/drigz)) - fix bug: the resource name of custom method doesn't be retained [\#805](https://github.com/grpc-ecosystem/grpc-gateway/pull/805) ([ch3rub1m](https://github.com/ch3rub1m)) - Update rules\_go and gazelle [\#802](https://github.com/grpc-ecosystem/grpc-gateway/pull/802) ([drigz](https://github.com/drigz)) +- Properly omit wrappers and google.protobuf.empty from swagger definitions [\#801](https://github.com/grpc-ecosystem/grpc-gateway/pull/801) ([birdayz](https://github.com/birdayz)) - Use newer Bazel repo rules [\#798](https://github.com/grpc-ecosystem/grpc-gateway/pull/798) ([drigz](https://github.com/drigz)) - Run buildifer on Bazel files [\#797](https://github.com/grpc-ecosystem/grpc-gateway/pull/797) ([drigz](https://github.com/drigz)) - protoc-gen-swagger: Fix formatting of license field definition. [\#796](https://github.com/grpc-ecosystem/grpc-gateway/pull/796) ([ivucica](https://github.com/ivucica)) @@ -260,7 +288,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) **Implemented enhancements:** @@ -317,11 +345,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) - ## [v1.3.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) + +## [v1.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) **Closed issues:** diff --git a/Makefile b/Makefile index b2d6722d2c7..cdc140a0c30 100644 --- a/Makefile +++ b/Makefile @@ -193,7 +193,7 @@ changelog: --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.6.0 + --future-release=v1.6.3 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 4f282c37468d422fae6cb2b2cab6f291c92ec844 Mon Sep 17 00:00:00 2001 From: royeo Date: Wed, 26 Dec 2018 20:17:54 +0800 Subject: [PATCH 0078/1518] Fix the url of gRPC timeouts on README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b32b0e76213..165a620cc57 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRP * Mapping streaming APIs to newline-delimited JSON streams * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definition for [Swagger](http://swagger.io). -* Setting [gRPC timeouts](http://www.grpc.io/docs/guides/wire.html) through inbound HTTP `Grpc-Timeout` header. +* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) through inbound HTTP `Grpc-Timeout` header. * Partial support for [gRPC API Configuration]((https://cloud.google.com/endpoints/docs/grpc/grpc-service-config)) files as an alternative to annotation. ### Want to support From f5e0366a4d025b8b2fb096294a64961b6717e414 Mon Sep 17 00:00:00 2001 From: Royeo Date: Wed, 26 Dec 2018 21:35:24 +0800 Subject: [PATCH 0079/1518] Fix the url of gRPC timeouts on README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 165a620cc57..a780964be08 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRP * Mapping streaming APIs to newline-delimited JSON streams * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definition for [Swagger](http://swagger.io). -* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) through inbound HTTP `Grpc-Timeout` header. +* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests) through inbound HTTP `Grpc-Timeout` header. * Partial support for [gRPC API Configuration]((https://cloud.google.com/endpoints/docs/grpc/grpc-service-config)) files as an alternative to annotation. ### Want to support From a6d3ad2556af0f950be6dbdc2f10b1015efa6c66 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Mon, 7 Jan 2019 16:33:36 -0700 Subject: [PATCH 0080/1518] Update bazel dependencies --- WORKSPACE | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 6dc67684db1..e74086a7aff 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,40 +1,38 @@ workspace(name = "grpc_ecosystem_grpc_gateway") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -# master as of 2018-11-09. This should be updated when a new release is tagged. http_archive( name = "io_bazel_rules_go", - sha256 = "c23db3b50b8822e153bc5accfea75baeecedb481a162391c4f3b9aec451e34b4", - strip_prefix = "rules_go-109c520465fcb418f2c4be967f3744d959ad66d3", - urls = [ - "https://github.com/bazelbuild/rules_go/archive/109c520465fcb418f2c4be967f3744d959ad66d3.tar.gz", - ], + sha256 = "7be7dc01f1e0afdba6c8eb2b43d2fa01c743be1b9273ab1eaf6c233df078d705", + urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.16.5/rules_go-0.16.5.tar.gz"], ) -# master as of 2018-11-09. This should be updated when a new release is tagged. http_archive( name = "bazel_gazelle", - sha256 = "a3af4a61d7b2f2c5386761f94a21f474871a32f0e94b13f08824248c4df25229", - strip_prefix = "bazel-gazelle-7b1e3c6eb5447c6647955fc93c012635f274f0f0", - urls = [ - "https://github.com/bazelbuild/bazel-gazelle/archive/7b1e3c6eb5447c6647955fc93c012635f274f0f0.tar.gz", - ], + sha256 = "7949fc6cc17b5b191103e97481cf8889217263acf52e00b560683413af204fcb", + urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.16.0/bazel-gazelle-0.16.0.tar.gz"], ) -http_archive( - name = "com_github_bazelbuild_buildtools", - sha256 = "e4c83a7a5d0712e2cea2077112a5eb6bb1af75a84e34c8c9b77330e322966b8b", - strip_prefix = "buildtools-e90e7cc6ef3e6d08d4ca8a982935c3eed638e058", - url = "https://github.com/bazelbuild/buildtools/archive/e90e7cc6ef3e6d08d4ca8a982935c3eed638e058.tar.gz", -) +load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") +go_rules_dependencies() + +go_register_toolchains() + +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") gazelle_dependencies() load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") +go_rules_dependencies() + +go_register_toolchains() + +load("@bazel_gazelle//:deps.bzl", "go_repository") + # Also define in Gopkg.toml go_repository( name = "org_golang_google_genproto", @@ -70,9 +68,11 @@ go_repository( importpath = "gopkg.in/yaml.v2", ) -go_rules_dependencies() - -go_register_toolchains() +http_archive( + name = "com_github_bazelbuild_buildtools", + strip_prefix = "buildtools-bf564b4925ab5876a3f64d8b90fab7f769013d42", + url = "https://github.com/bazelbuild/buildtools/archive/bf564b4925ab5876a3f64d8b90fab7f769013d42.zip", +) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 96cb2e21aead140b435e26833dbb1f019274bd8c Mon Sep 17 00:00:00 2001 From: Gorka Lerchundi Osa Date: Mon, 7 Jan 2019 22:52:55 +0100 Subject: [PATCH 0081/1518] gengateway: allow opting out patch feature Closes #839 --- .../gengateway/generator.go | 5 +- .../gengateway/template.go | 13 ++- .../gengateway/template_test.go | 85 ++++++++++++++++++- protoc-gen-grpc-gateway/main.go | 3 +- 4 files changed, 98 insertions(+), 8 deletions(-) diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index a619fae399e..fa1adc3470f 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -32,10 +32,11 @@ type generator struct { useRequestContext bool registerFuncSuffix string pathType pathType + allowPatchFeature bool } // New returns a new generator which generates grpc gateway files. -func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string) gen.Generator { +func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string, allowPatchFeature bool) gen.Generator { var imports []descriptor.GoPackage for _, pkgpath := range []string{ "io", @@ -82,6 +83,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p useRequestContext: useRequestContext, registerFuncSuffix: registerFuncSuffix, pathType: pathType, + allowPatchFeature: allowPatchFeature, } } @@ -142,6 +144,7 @@ func (g *generator) generate(file *descriptor.File) (string, error) { Imports: imports, UseRequestContext: g.useRequestContext, RegisterFuncSuffix: g.registerFuncSuffix, + AllowPatchFeature: g.allowPatchFeature, } return applyTemplate(params, g.reg) } diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index fad1392c0c0..fd5fc1157d9 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -17,11 +17,13 @@ type param struct { Imports []descriptor.GoPackage UseRequestContext bool RegisterFuncSuffix string + AllowPatchFeature bool } type binding struct { *descriptor.Binding - Registry *descriptor.Registry + Registry *descriptor.Registry + AllowPatchFeature bool } // GetBodyFieldPath returns the binding body's fieldpath. @@ -153,7 +155,11 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { meth.Name = &methName for _, b := range meth.Bindings { methodWithBindingsSeen = true - if err := handlerTemplate.Execute(w, binding{Binding: b, Registry: reg}); err != nil { + if err := handlerTemplate.Execute(w, binding{ + Binding: b, + Registry: reg, + AllowPatchFeature: p.AllowPatchFeature, + }); err != nil { return "", err } } @@ -268,6 +274,7 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont `)) _ = template.Must(handlerTemplate.New("client-rpc-request-func").Parse(` +{{$AllowPatchFeature := .AllowPatchFeature}} {{if .HasQueryParam}} var ( filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}} = {{.QueryParamFilter}} @@ -284,7 +291,7 @@ var ( if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - {{- if and (eq (.HTTPMethod) "PATCH") (.FieldMaskField)}} + {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) } {{if not (eq "*" .GetBodyFieldPath)}} else { diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index ca9e587a69d..33c28eb1586 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -77,7 +77,7 @@ func TestApplyTemplateHeader(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -222,7 +222,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -383,7 +383,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { }, }, } - got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler"}, descriptor.NewRegistry()) + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -402,3 +402,82 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } } } + +func TestAllowPatchFeature(t *testing.T) { + updateMaskDesc := &protodescriptor.FieldDescriptorProto{ + Name: proto.String("UpdateMask"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".google.protobuf.FieldMask"), + Number: proto.Int32(1), + } + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{updateMaskDesc}, + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + updateMaskField := &descriptor.Field{ + Message: msg, + FieldDescriptorProto: updateMaskDesc, + } + msg.Fields = append(msg.Fields, updateMaskField) + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*protodescriptor.DescriptorProto{msgdesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "PATCH", + Body: &descriptor.Body{FieldPath: nil}, + }, + }, + }, + }, + }, + }, + } + want := "if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 {\n" + for _, allowPatchFeature := range []bool{true, false} { + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: allowPatchFeature}, descriptor.NewRegistry()) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if allowPatchFeature { + if !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + } else { + if strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to _not_ contain %s", file, got, want) + } + } + } +} diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 39ceb256fc9..60d9de92e6b 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -32,6 +32,7 @@ var ( pathType = flag.String("paths", "", "specifies how the paths of generated files are structured") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") + allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") versionFlag = flag.Bool("version", false, "print the current verison") ) @@ -79,7 +80,7 @@ func main() { } } - g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *pathType) + g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *pathType, *allowPatchFeature) if *grpcAPIConfiguration != "" { if err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil { From ae4bb97e7718691c8e0742a7c07989c91630e042 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 8 Jan 2019 09:20:40 +0000 Subject: [PATCH 0082/1518] Generate changelog for 1.6.4 --- CHANGELOG.md | 15 +++++++++++++++ Makefile | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19c081f8c0c..605e291a65c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## [v1.6.4](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.4) (2019-01-08) +[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.3...v1.6.4) + +**Closed issues:** + +- feature request: opt-out fieldmask behaviour in patch [\#839](https://github.com/grpc-ecosystem/grpc-gateway/issues/839) +- gRPC streaming keepAlive doesn't work with docker swarm [\#838](https://github.com/grpc-ecosystem/grpc-gateway/issues/838) + +**Merged pull requests:** + +- Update bazel dependencies [\#841](https://github.com/grpc-ecosystem/grpc-gateway/pull/841) ([achew22](https://github.com/achew22)) +- gengateway: allow opting out patch feature [\#840](https://github.com/grpc-ecosystem/grpc-gateway/pull/840) ([glerchundi](https://github.com/glerchundi)) +- Fix the url of gRPC timeouts on README.md [\#836](https://github.com/grpc-ecosystem/grpc-gateway/pull/836) ([royeo](https://github.com/royeo)) + ## [v1.6.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) [Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) @@ -13,6 +27,7 @@ **Merged pull requests:** +- Regenerate changelog for 1.6.3 [\#835](https://github.com/grpc-ecosystem/grpc-gateway/pull/835) ([johanbrandhorst](https://github.com/johanbrandhorst)) - protoc-gen-swagger: check typeIndex when typeName is Method [\#833](https://github.com/grpc-ecosystem/grpc-gateway/pull/833) ([hexfusion](https://github.com/hexfusion)) - Replace complicated circle CI release with goreleaser. [\#828](https://github.com/grpc-ecosystem/grpc-gateway/pull/828) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Stop the publishing recursion [\#827](https://github.com/grpc-ecosystem/grpc-gateway/pull/827) ([achew22](https://github.com/achew22)) diff --git a/Makefile b/Makefile index cdc140a0c30..74f7901cfec 100644 --- a/Makefile +++ b/Makefile @@ -193,7 +193,7 @@ changelog: --compare-link \ --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ --unreleased-label "**Next release**" \ - --future-release=v1.6.3 + --future-release=v1.6.4 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 9ae946519c22ae092c39e7c79b29ba90252a2570 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 9 Jan 2019 11:03:27 +0000 Subject: [PATCH 0083/1518] Fix the generated URL in the changelog --- CHANGELOG.md | 71 ++++++++++++++++++++++++++-------------------------- Makefile | 2 +- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 605e291a65c..1e230f8e92d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Change Log -## [v1.6.4](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.4) (2019-01-08) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.3...v1.6.4) +## [v1.6.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.4) (2019-01-08) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.3...v1.6.4) **Closed issues:** @@ -10,12 +10,13 @@ **Merged pull requests:** +- Generate changelog for 1.6.4 [\#843](https://github.com/grpc-ecosystem/grpc-gateway/pull/843) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update bazel dependencies [\#841](https://github.com/grpc-ecosystem/grpc-gateway/pull/841) ([achew22](https://github.com/achew22)) - gengateway: allow opting out patch feature [\#840](https://github.com/grpc-ecosystem/grpc-gateway/pull/840) ([glerchundi](https://github.com/glerchundi)) - Fix the url of gRPC timeouts on README.md [\#836](https://github.com/grpc-ecosystem/grpc-gateway/pull/836) ([royeo](https://github.com/royeo)) -## [v1.6.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) +## [v1.6.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) **Fixed bugs:** @@ -32,14 +33,14 @@ - Replace complicated circle CI release with goreleaser. [\#828](https://github.com/grpc-ecosystem/grpc-gateway/pull/828) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Stop the publishing recursion [\#827](https://github.com/grpc-ecosystem/grpc-gateway/pull/827) ([achew22](https://github.com/achew22)) -## [v1.6.2](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.2) (2018-12-07) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.0...v1.6.2) +## [v1.6.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.2) (2018-12-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.0...v1.6.2) -## [v1.6.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.0) (2018-12-07) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.6.1...v1.6.0) +## [v1.6.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.0) (2018-12-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.1...v1.6.0) -## [v1.6.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.6.1) (2018-12-07) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.1) +## [v1.6.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.1) (2018-12-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.1) **Implemented enhancements:** @@ -91,8 +92,8 @@ - tests: s/iotuil/ioutil/ typo [\#775](https://github.com/grpc-ecosystem/grpc-gateway/pull/775) ([srenatus](https://github.com/srenatus)) - Replace travis with CircleCI for easier testing [\#772](https://github.com/grpc-ecosystem/grpc-gateway/pull/772) ([johanbrandhorst](https://github.com/johanbrandhorst)) -## [v1.5.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-02) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.5.0...v1.5.1) +## [v1.5.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-02) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.5.0...v1.5.1) **Implemented enhancements:** @@ -123,8 +124,8 @@ - Added camelCase Example [\#751](https://github.com/grpc-ecosystem/grpc-gateway/pull/751) ([srikrsna](https://github.com/srikrsna)) - Add more guidance to issue template [\#750](https://github.com/grpc-ecosystem/grpc-gateway/pull/750) ([johanbrandhorst](https://github.com/johanbrandhorst)) -## [v1.5.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.5.0) (2018-09-09) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.1...v1.5.0) +## [v1.5.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.5.0) (2018-09-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.4.1...v1.5.0) **Fixed bugs:** @@ -189,8 +190,8 @@ - Allow explicit empty security definition to overwrite existing definitions [\#666](https://github.com/grpc-ecosystem/grpc-gateway/pull/666) ([co3k](https://github.com/co3k)) - protoc-gen-swagger: Add ability to specify custom response objects [\#663](https://github.com/grpc-ecosystem/grpc-gateway/pull/663) ([johanbrandhorst](https://github.com/johanbrandhorst)) -## [v1.4.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.1) (2018-05-23) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.4.0...v1.4.1) +## [v1.4.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.4.1) (2018-05-23) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.4.0...v1.4.1) **Closed issues:** @@ -201,8 +202,8 @@ - Generate release notes for v1.4.1 [\#659](https://github.com/grpc-ecosystem/grpc-gateway/pull/659) ([achew22](https://github.com/achew22)) - Translate gRPC FailedPrecondition as HTTP PreconditionFailed [\#657](https://github.com/grpc-ecosystem/grpc-gateway/pull/657) ([slomek](https://github.com/slomek)) -## [v1.4.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.1...v1.4.0) +## [v1.4.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.1...v1.4.0) **Implemented enhancements:** @@ -302,8 +303,8 @@ - Support mapping bytes to \[\]byte [\#489](https://github.com/grpc-ecosystem/grpc-gateway/pull/489) ([loderunner](https://github.com/loderunner)) - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) -## [v1.3.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) +## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) **Implemented enhancements:** @@ -360,11 +361,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) +## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) -## [v1.3](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) +## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) **Closed issues:** @@ -433,16 +434,16 @@ - fixes package name override doesn't work [\#277](https://github.com/grpc-ecosystem/grpc-gateway/pull/277) ([favadi](https://github.com/favadi)) - add custom options to allow more control of swagger/openapi output [\#145](https://github.com/grpc-ecosystem/grpc-gateway/pull/145) ([ivucica](https://github.com/ivucica)) -## [v1.2.2](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.2) (2017-04-17) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.1...v1.2.2) +## [v1.2.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.2) (2017-04-17) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.1...v1.2.2) **Merged pull requests:** - Add changelog for 1.2.2 [\#363](https://github.com/grpc-ecosystem/grpc-gateway/pull/363) ([tmc](https://github.com/tmc)) - metadata: fix properly and change to Outgoing [\#361](https://github.com/grpc-ecosystem/grpc-gateway/pull/361) ([tmc](https://github.com/tmc)) -## [v1.2.1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.1) (2017-04-17) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.0...v1.2.1) +## [v1.2.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.1) (2017-04-17) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.0...v1.2.1) **Fixed bugs:** @@ -460,8 +461,8 @@ - Add changelog for 1.2.1 [\#360](https://github.com/grpc-ecosystem/grpc-gateway/pull/360) ([tmc](https://github.com/tmc)) - bugfix: reflect upstream api change. [\#359](https://github.com/grpc-ecosystem/grpc-gateway/pull/359) ([tmc](https://github.com/tmc)) -## [v1.2.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.0) (2017-03-31) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.2.0.rc1...v1.2.0) +## [v1.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0) (2017-03-31) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.0.rc1...v1.2.0) **Closed issues:** @@ -472,8 +473,8 @@ - Add changelog for 1.2.0 [\#342](https://github.com/grpc-ecosystem/grpc-gateway/pull/342) ([tmc](https://github.com/tmc)) -## [v1.2.0.rc1](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.2.0.rc1) (2017-03-24) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.1.0...v1.2.0.rc1) +## [v1.2.0.rc1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0.rc1) (2017-03-24) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.1.0...v1.2.0.rc1) **Implemented enhancements:** @@ -594,8 +595,8 @@ - Allowing unknown fields to be dropped instead of returning error from… [\#208](https://github.com/grpc-ecosystem/grpc-gateway/pull/208) ([sriniven](https://github.com/sriniven)) - Avoid Internal Server Error on zero-length input for bidi streaming [\#200](https://github.com/grpc-ecosystem/grpc-gateway/pull/200) ([yugui](https://github.com/yugui)) -## [v1.1.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.1.0) (2016-07-23) -[Full Changelog](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/compare/v1.0.0...v1.1.0) +## [v1.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.1.0) (2016-07-23) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.0.0...v1.1.0) **Implemented enhancements:** @@ -620,7 +621,7 @@ - send Trailer header on error [\#188](https://github.com/grpc-ecosystem/grpc-gateway/pull/188) ([kazegusuri](https://github.com/kazegusuri)) - generate swagger output for streaming endpoints with a basic note [\#183](https://github.com/grpc-ecosystem/grpc-gateway/pull/183) ([tmc](https://github.com/tmc)) -## [v1.0.0](https://grpc-ecosystem.github.io/grpc-gateway/grpc-ecosystem/grpc-gateway/tree/v1.0.0) (2016-06-15) +## [v1.0.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.0.0) (2016-06-15) **Implemented enhancements:** - support protobuf-over-HTTP [\#124](https://github.com/grpc-ecosystem/grpc-gateway/issues/124) diff --git a/Makefile b/Makefile index 74f7901cfec..23b720ad4a5 100644 --- a/Makefile +++ b/Makefile @@ -191,7 +191,7 @@ changelog: -p grpc-gateway \ --author \ --compare-link \ - --github-site=https://grpc-ecosystem.github.io/grpc-gateway \ + --github-site=https://github.com \ --unreleased-label "**Next release**" \ --future-release=v1.6.4 lint: From 56b5264f0263b9ea5dc88b68f67f68124be4ca39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=BCderl?= Date: Wed, 7 Nov 2018 23:52:43 +0100 Subject: [PATCH 0084/1518] fill example attribute of swagger schema if provided for messages --- protoc-gen-swagger/genswagger/template.go | 7 +++++++ protoc-gen-swagger/genswagger/types.go | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e579d953dbe..09069a6900a 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -266,6 +266,9 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, if protoSchema.Description != "" { schema.Description = protoSchema.Description } + if protoSchema.Example != "" { + schema.Example = protoSchema.Example + } } for _, f := range msg.Fields { @@ -1454,6 +1457,10 @@ func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Reg ret.schemaCore = protoJSONSchemaToSwaggerSchemaCore(s.GetJsonSchema(), reg, refs) updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema()) + if s.Example != nil { + ret.Example = string(s.Example.Value) + } + return ret } diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index b66450cdaa3..62787d4b8c3 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -133,9 +133,10 @@ type swaggerParameterObject struct { // core part of schema, which is common to itemsObject and schemaObject. // http://swagger.io/specification/#itemsObject type schemaCore struct { - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Ref string `json:"$ref,omitempty"` + Type string `json:"type,omitempty"` + Format string `json:"format,omitempty"` + Ref string `json:"$ref,omitempty"` + Example string `json:"example,omitempty"` Items *swaggerItemsObject `json:"items,omitempty"` From 0ab953b4221caaf3ec8c04590423ae77af11951d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=BCderl?= Date: Thu, 8 Nov 2018 00:04:03 +0100 Subject: [PATCH 0085/1518] fix nil dereference --- protoc-gen-swagger/genswagger/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 09069a6900a..2132d880957 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1457,7 +1457,7 @@ func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Reg ret.schemaCore = protoJSONSchemaToSwaggerSchemaCore(s.GetJsonSchema(), reg, refs) updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema()) - if s.Example != nil { + if s != nil && s.Example != nil { ret.Example = string(s.Example.Value) } From c4aae9110b12011f7fbae1f58ce7e51ad401ea09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=BCderl?= Date: Thu, 8 Nov 2018 10:20:42 +0100 Subject: [PATCH 0086/1518] use json.RawMessage for property & object examples with json.RawMessage, users can supply complete json for swagger objects (i.e. for a proto Message). If it's correct json, it will be added to the output.json and rendered correctly by consuming applications (i.e. code generators or swagger-ui) Example, in proto: option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { example: { value: '{"someKey" : "someValue", "anotherKey" : 5}'; }; }; Rendered JSON: "example": { "someKey": "someValue", "anotherKey": 5 } If we used string instead of json.RawMessage, the serializer would escape the quotes and it would be serialized as a string. This is not desirable, because the output should be in fact JSON key/value pairs. --- protoc-gen-swagger/genswagger/template.go | 6 ++++-- protoc-gen-swagger/genswagger/types.go | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 2132d880957..4f8ecd6ce94 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -9,6 +9,8 @@ import ( "strings" "sync" + "encoding/json" + "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" @@ -266,7 +268,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, if protoSchema.Description != "" { schema.Description = protoSchema.Description } - if protoSchema.Example != "" { + if protoSchema.Example != nil { schema.Example = protoSchema.Example } } @@ -1458,7 +1460,7 @@ func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Reg updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema()) if s != nil && s.Example != nil { - ret.Example = string(s.Example.Value) + ret.Example = json.RawMessage(s.Example.Value) } return ret diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 62787d4b8c3..6125c80f314 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -133,10 +133,10 @@ type swaggerParameterObject struct { // core part of schema, which is common to itemsObject and schemaObject. // http://swagger.io/specification/#itemsObject type schemaCore struct { - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Ref string `json:"$ref,omitempty"` - Example string `json:"example,omitempty"` + Type string `json:"type,omitempty"` + Format string `json:"format,omitempty"` + Ref string `json:"$ref,omitempty"` + Example json.RawMessage `json:"example,omitempty"` Items *swaggerItemsObject `json:"items,omitempty"` From e5ffc3bec24e5a4d0b6044f0c1f6872b905b0f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=BCderl?= Date: Thu, 8 Nov 2018 10:55:26 +0100 Subject: [PATCH 0087/1518] goimports --- protoc-gen-swagger/genswagger/template.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 4f8ecd6ce94..d7650d57494 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1,6 +1,7 @@ package genswagger import ( + "encoding/json" "fmt" "os" "reflect" @@ -9,8 +10,6 @@ import ( "strings" "sync" - "encoding/json" - "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" From ffc6808e07a6a5dcf746da54bba99a959f520aa9 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 9 Jan 2019 16:04:51 +0100 Subject: [PATCH 0088/1518] a_bit_of_everything.proto: add 'example' example Signed-off-by: Stephan Renatus --- .../proto/examplepb/a_bit_of_everything.pb.go | 393 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 1 + .../a_bit_of_everything.swagger.json | 3 + 3 files changed, 202 insertions(+), 195 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 4f29c98d99c..41f237ae881 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -129,7 +129,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -467,7 +467,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{0, 0} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -536,7 +536,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{1} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -679,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{2} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -718,7 +718,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{3} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -765,7 +765,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_7494e8194e1b43f3, []int{4} + return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1529,191 +1529,194 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_7494e8194e1b43f3) -} - -var fileDescriptor_a_bit_of_everything_7494e8194e1b43f3 = []byte{ - // 2901 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1b, 0xd7, - 0xb5, 0xd7, 0x70, 0xa8, 0xaf, 0xa3, 0x2f, 0xea, 0xca, 0x1f, 0x32, 0xad, 0x44, 0xd7, 0x8c, 0xf3, - 0x32, 0x51, 0x42, 0x8e, 0x4d, 0xfb, 0xe5, 0xd9, 0x0a, 0x12, 0x3f, 0xea, 0xc3, 0xb6, 0x62, 0x5b, - 0x96, 0xc7, 0x8e, 0x5f, 0xe0, 0xe7, 0x44, 0xb8, 0x24, 0xaf, 0xc8, 0xb1, 0x39, 0x73, 0x27, 0x73, - 0xef, 0xc8, 0x66, 0x55, 0xb5, 0x69, 0x0b, 0xb4, 0x68, 0xb3, 0x28, 0xe0, 0x74, 0x55, 0x14, 0x5d, - 0x77, 0xd1, 0x6d, 0x57, 0x59, 0xb4, 0x5d, 0xa4, 0x9b, 0xee, 0xda, 0x22, 0x40, 0x51, 0xa0, 0x9b, - 0xb6, 0x40, 0xff, 0x82, 0x02, 0xdd, 0x15, 0x73, 0x67, 0x86, 0x9a, 0x19, 0x92, 0x96, 0x69, 0x07, - 0xd9, 0x48, 0x73, 0xe7, 0x9e, 0xf3, 0x3b, 0x9f, 0xf7, 0x9c, 0x73, 0x87, 0x50, 0xa6, 0x8f, 0x89, - 0xe5, 0xb4, 0x28, 0xd7, 0x1d, 0x97, 0x09, 0xa6, 0x87, 0x4b, 0xa7, 0xaa, 0x93, 0xed, 0xaa, 0x29, - 0xb6, 0xd9, 0xce, 0x36, 0xdd, 0xa5, 0x6e, 0x5b, 0x34, 0x4d, 0xbb, 0x51, 0x92, 0x34, 0x68, 0xb1, - 0xe1, 0x3a, 0xb5, 0x52, 0x83, 0x08, 0xfa, 0x88, 0xb4, 0x4b, 0x11, 0x40, 0xa9, 0xc3, 0x9a, 0x5f, - 0x68, 0x30, 0xd6, 0x68, 0x51, 0x9d, 0x38, 0xa6, 0x4e, 0x6c, 0x9b, 0x09, 0x22, 0x4c, 0x66, 0xf3, - 0x80, 0x3d, 0x8f, 0xc3, 0x5d, 0xb9, 0xaa, 0x7a, 0x3b, 0xfa, 0x8e, 0x49, 0x5b, 0xf5, 0x6d, 0x8b, - 0xf0, 0x87, 0x21, 0xc5, 0xc9, 0x34, 0x05, 0xb5, 0x1c, 0xd1, 0x0e, 0x37, 0x5f, 0x4e, 0x6f, 0xd6, - 0x3d, 0x57, 0xe2, 0x87, 0xfb, 0xaf, 0xa5, 0x2c, 0x72, 0x88, 0x68, 0x52, 0xdb, 0xb3, 0xe4, 0xc3, - 0xb6, 0xff, 0x14, 0xe9, 0x91, 0x22, 0xe4, 0x5e, 0x55, 0xb7, 0x28, 0xe7, 0xa4, 0x41, 0x43, 0x8a, - 0x53, 0xdd, 0x14, 0xe5, 0x14, 0xc9, 0x62, 0x5a, 0x1b, 0x61, 0x5a, 0x94, 0x0b, 0x62, 0x39, 0x21, - 0xc1, 0x9b, 0xf2, 0x5f, 0xad, 0xd8, 0xa0, 0x76, 0x91, 0x3f, 0x22, 0x8d, 0x06, 0x75, 0x75, 0xe6, - 0x48, 0x7f, 0x74, 0xfb, 0xa6, 0xf0, 0xbb, 0x39, 0xc8, 0x55, 0x56, 0x4c, 0x71, 0x73, 0x67, 0xbd, - 0xe3, 0x75, 0xf4, 0x21, 0x4c, 0x71, 0xd3, 0x6e, 0xb4, 0xe8, 0xb6, 0x4d, 0xb9, 0xa0, 0xf5, 0xf9, - 0x13, 0x58, 0xd1, 0x26, 0xca, 0x17, 0x4a, 0x87, 0xc4, 0xa1, 0x94, 0x46, 0x2a, 0x6d, 0x4a, 0x7e, - 0x63, 0x32, 0x80, 0x0b, 0x56, 0xa8, 0x09, 0x59, 0xcf, 0x33, 0xeb, 0xf3, 0x0a, 0x56, 0xb4, 0xf1, - 0x95, 0x3b, 0x4f, 0x2a, 0xb7, 0x3e, 0x51, 0x94, 0x1f, 0x29, 0xd7, 0xfe, 0x9f, 0x14, 0x77, 0x2a, - 0xc5, 0xcb, 0x67, 0x8a, 0x17, 0x3f, 0xdc, 0xbb, 0xb0, 0x5f, 0x8c, 0x2f, 0xcf, 0x0f, 0xb2, 0x3c, - 0x5b, 0xde, 0x37, 0xa4, 0x04, 0xb4, 0x05, 0x23, 0xa1, 0x05, 0x19, 0xac, 0xbe, 0x90, 0x05, 0x21, - 0x0e, 0x5a, 0x84, 0x89, 0x9d, 0x16, 0x23, 0x62, 0x7b, 0x97, 0xb4, 0x3c, 0x3a, 0xaf, 0x62, 0x45, - 0xcb, 0x18, 0x20, 0x5f, 0xdd, 0xf5, 0xdf, 0xa0, 0x53, 0x30, 0x59, 0x67, 0x5e, 0xb5, 0x45, 0x43, - 0x8a, 0x2c, 0x56, 0x34, 0xc5, 0x98, 0x08, 0xde, 0x05, 0x24, 0x8b, 0x30, 0x61, 0xda, 0xe2, 0xad, - 0xf3, 0x21, 0xc5, 0x30, 0x56, 0x34, 0xd5, 0x00, 0xf9, 0xaa, 0x83, 0xe1, 0xc5, 0x29, 0x46, 0xb0, - 0xa2, 0x65, 0x8d, 0x09, 0x2f, 0x46, 0x12, 0x60, 0x9c, 0x2b, 0x87, 0x14, 0xa3, 0x58, 0xd1, 0x86, - 0x25, 0xc6, 0xb9, 0x72, 0x40, 0xf0, 0x0a, 0x4c, 0xed, 0x98, 0x8f, 0x69, 0xbd, 0x03, 0x32, 0x86, - 0x15, 0x6d, 0xc4, 0x98, 0x0c, 0x5f, 0x26, 0x89, 0x3a, 0x38, 0xe3, 0x58, 0xd1, 0x46, 0x43, 0xa2, - 0x08, 0xe9, 0x25, 0x80, 0x2a, 0x63, 0xad, 0x90, 0x02, 0xb0, 0xa2, 0x8d, 0x19, 0xe3, 0xfe, 0x9b, - 0x8e, 0xb2, 0x5c, 0xb8, 0xa6, 0xdd, 0x08, 0x09, 0x26, 0xfc, 0xa8, 0x1a, 0x13, 0xc1, 0xbb, 0x8e, - 0xb2, 0xd5, 0xb6, 0xa0, 0x3c, 0xa4, 0x78, 0x09, 0x2b, 0xda, 0xa4, 0x01, 0xf2, 0x55, 0xc2, 0xe0, - 0x8e, 0x1a, 0x53, 0x58, 0xd1, 0xa6, 0x02, 0x83, 0x23, 0x2d, 0xae, 0x01, 0xf8, 0x47, 0x29, 0x24, - 0x98, 0xc6, 0x8a, 0x36, 0x5d, 0x7e, 0xf3, 0xd0, 0x70, 0x6e, 0x7a, 0x16, 0x75, 0xcd, 0xda, 0xba, - 0xed, 0x59, 0xc6, 0xb8, 0xcf, 0x1f, 0x80, 0x6d, 0xc1, 0x4c, 0xe7, 0x70, 0x86, 0x88, 0x2f, 0x4b, - 0x44, 0xad, 0x0f, 0x62, 0x74, 0xa6, 0x4b, 0x5b, 0x44, 0x34, 0x25, 0xda, 0x94, 0x13, 0x3e, 0x05, - 0x88, 0x1c, 0x8e, 0x05, 0x19, 0xb2, 0x9d, 0x06, 0x5e, 0x94, 0xc0, 0xef, 0x1e, 0x06, 0x7c, 0x23, - 0x38, 0xe5, 0x11, 0x7e, 0x98, 0x77, 0x1d, 0x71, 0x73, 0x76, 0x62, 0x1d, 0x08, 0x7d, 0x15, 0xa6, - 0x79, 0x32, 0x7e, 0x33, 0x58, 0xd1, 0x66, 0x8c, 0x29, 0x9e, 0x08, 0x60, 0x87, 0xac, 0x93, 0x0b, - 0x39, 0xac, 0x68, 0xb9, 0x88, 0x2c, 0x96, 0x75, 0x3c, 0x1e, 0x84, 0x59, 0xac, 0x68, 0xb3, 0xc6, - 0x04, 0x8f, 0x05, 0x21, 0x24, 0xe9, 0xe0, 0x20, 0xac, 0x68, 0x28, 0x20, 0x89, 0x50, 0xca, 0x70, - 0xd4, 0xa5, 0x0e, 0x25, 0xbe, 0x2b, 0x12, 0x79, 0x31, 0x87, 0x55, 0x6d, 0xdc, 0x98, 0x8b, 0x36, - 0x6f, 0xc7, 0xf2, 0xe3, 0x22, 0x4c, 0x30, 0x9b, 0xfa, 0x95, 0xdf, 0x2f, 0xbb, 0xf3, 0x47, 0x64, - 0xb5, 0x39, 0x56, 0x0a, 0x2a, 0x5d, 0x29, 0xaa, 0x74, 0xa5, 0x75, 0x7f, 0xf7, 0xea, 0x90, 0x01, - 0x92, 0x58, 0xae, 0xd0, 0x2b, 0x30, 0x19, 0xb0, 0x06, 0xb2, 0xe6, 0x8f, 0xfa, 0xd9, 0x77, 0x75, - 0xc8, 0x08, 0x00, 0x03, 0x21, 0xe8, 0x3e, 0x8c, 0x5b, 0xc4, 0x09, 0xf5, 0x38, 0x26, 0x2b, 0xc1, - 0xa5, 0xc1, 0x2b, 0xc1, 0x0d, 0xe2, 0x48, 0x75, 0xd7, 0x6d, 0xe1, 0xb6, 0x8d, 0x31, 0x2b, 0x5c, - 0xa2, 0xc7, 0x30, 0x67, 0x11, 0xc7, 0x49, 0xdb, 0x7b, 0x5c, 0xca, 0xb9, 0xfa, 0x5c, 0x72, 0x9c, - 0x84, 0x7f, 0x02, 0x81, 0xb3, 0x56, 0xfa, 0x7d, 0x4c, 0x72, 0x98, 0x7b, 0x81, 0xe4, 0xf9, 0x17, - 0x93, 0x1c, 0x64, 0x5e, 0xb7, 0xe4, 0xd8, 0x7b, 0xb4, 0x0c, 0xf3, 0x36, 0xb3, 0x57, 0x99, 0xbd, - 0x4b, 0x6d, 0xbf, 0x9d, 0x90, 0xd6, 0x26, 0xb1, 0x82, 0xf2, 0x36, 0x9f, 0x97, 0x05, 0xa0, 0xef, - 0x3e, 0x5a, 0x85, 0x99, 0x4e, 0xcf, 0x0a, 0x35, 0x3e, 0x29, 0x23, 0x9e, 0xef, 0x8a, 0xf8, 0x9d, - 0x88, 0xce, 0x98, 0xee, 0xb0, 0x04, 0x20, 0xf7, 0xa1, 0x93, 0x49, 0xf1, 0xc3, 0xb6, 0x80, 0xd5, - 0x81, 0xeb, 0xc2, 0x6c, 0x04, 0xd4, 0x39, 0x58, 0xf9, 0x5f, 0x28, 0x30, 0x12, 0x36, 0x2b, 0x04, - 0x59, 0x9b, 0x58, 0x34, 0x68, 0x56, 0x86, 0x7c, 0x46, 0xc7, 0x60, 0x84, 0x58, 0xcc, 0xb3, 0xc5, - 0x7c, 0x46, 0x16, 0xaa, 0x70, 0x85, 0x6e, 0x41, 0x86, 0x3d, 0x94, 0x3d, 0x61, 0xba, 0x5c, 0x79, - 0xde, 0x56, 0x53, 0x5a, 0xa3, 0xd4, 0x91, 0x8a, 0x65, 0xd8, 0xc3, 0xc2, 0x22, 0x8c, 0x45, 0x6b, - 0x34, 0x0e, 0xc3, 0x97, 0x2b, 0xd7, 0x6f, 0xaf, 0xe7, 0x86, 0xd0, 0x18, 0x64, 0xef, 0x18, 0xef, - 0xaf, 0xe7, 0x94, 0xbc, 0x09, 0x53, 0x89, 0xc4, 0x44, 0x39, 0x50, 0x1f, 0xd2, 0x76, 0xa8, 0xaf, - 0xff, 0x88, 0x56, 0x60, 0x38, 0xf0, 0x4e, 0xe6, 0x39, 0xaa, 0x66, 0xc0, 0xba, 0x9c, 0xb9, 0xa0, - 0xe4, 0xd7, 0xe0, 0x58, 0xef, 0xdc, 0xec, 0x21, 0xf3, 0x48, 0x5c, 0xe6, 0x78, 0x1c, 0xe5, 0x5b, - 0x11, 0x4a, 0x3a, 0xcf, 0x7a, 0xa0, 0x6c, 0xc6, 0x51, 0x5e, 0xa4, 0x7d, 0x1f, 0xc8, 0x5f, 0xfe, - 0x42, 0x79, 0x52, 0xf9, 0xad, 0x02, 0x8d, 0xa5, 0xb9, 0x0a, 0xae, 0x9a, 0x02, 0xb3, 0x1d, 0x7c, - 0x30, 0x70, 0x96, 0x37, 0x36, 0x6c, 0x11, 0xa5, 0x6c, 0x1b, 0xd7, 0x98, 0xe5, 0xb4, 0xcc, 0x9a, - 0x9f, 0x1c, 0x38, 0x1c, 0xc3, 0xb0, 0x68, 0x3b, 0x14, 0x0b, 0x86, 0x6b, 0x6c, 0x97, 0xba, 0xd8, - 0x22, 0x76, 0x1b, 0xef, 0x50, 0x22, 0x3c, 0x97, 0x72, 0x1f, 0x6b, 0x2b, 0xca, 0xdd, 0x3f, 0x28, - 0x72, 0x06, 0x59, 0xba, 0x0b, 0xa7, 0x2f, 0x9b, 0x76, 0x1d, 0x33, 0x4f, 0x60, 0x8b, 0xb9, 0x14, - 0x93, 0xaa, 0xff, 0xd8, 0x35, 0x74, 0x95, 0x9a, 0x42, 0x38, 0x7c, 0x59, 0xd7, 0x1b, 0xa6, 0x68, - 0x7a, 0xd5, 0x52, 0x8d, 0x59, 0xba, 0x6f, 0x6e, 0x91, 0xd6, 0x18, 0x6f, 0x73, 0x41, 0xc3, 0x65, - 0x68, 0xfd, 0xca, 0x54, 0x54, 0x34, 0xa5, 0x69, 0x85, 0x9f, 0x8c, 0xc1, 0x7c, 0x1a, 0xd3, 0x08, - 0x13, 0x1b, 0x5d, 0x84, 0x13, 0xb2, 0x2d, 0x75, 0x8e, 0x4c, 0x7c, 0x86, 0x51, 0xb0, 0xaa, 0x65, - 0x8c, 0x63, 0x3e, 0x41, 0xc4, 0x70, 0xf9, 0x60, 0x9e, 0x79, 0x1b, 0xf2, 0x49, 0xd6, 0xc4, 0x74, - 0xe3, 0x8f, 0x55, 0x8a, 0x71, 0x3c, 0xce, 0xbb, 0x16, 0x9b, 0x74, 0xba, 0xe4, 0xc6, 0x9b, 0x87, - 0x8a, 0x55, 0x4d, 0x4d, 0xca, 0xdd, 0x38, 0xe8, 0x23, 0x5d, 0x72, 0x13, 0x13, 0x51, 0x16, 0xab, - 0x5a, 0x36, 0x29, 0xf7, 0xfd, 0x58, 0x13, 0xea, 0x25, 0xb7, 0xd3, 0xd7, 0x86, 0xb1, 0xaa, 0x0d, - 0x77, 0xc9, 0x8d, 0x5a, 0xdc, 0x3b, 0x70, 0x32, 0xe5, 0xaa, 0x44, 0xe7, 0x1c, 0xc1, 0xaa, 0x36, - 0x62, 0xcc, 0x27, 0x9c, 0x15, 0x6f, 0xa2, 0xbd, 0xd9, 0x63, 0x73, 0x9a, 0xaa, 0x8d, 0xf6, 0x60, - 0x8f, 0xa4, 0xff, 0x0f, 0xcc, 0x27, 0xd9, 0x63, 0x93, 0xd7, 0x18, 0x56, 0xb5, 0x31, 0xe3, 0x68, - 0x9c, 0x77, 0xa5, 0x33, 0x85, 0x75, 0xb9, 0x2b, 0xd1, 0x8b, 0xc6, 0x65, 0xef, 0x4d, 0xb8, 0x2b, - 0xd9, 0x7f, 0x53, 0xee, 0x8a, 0x4f, 0x6b, 0x80, 0x55, 0x6d, 0x32, 0xe9, 0xae, 0x95, 0x83, 0xc9, - 0xad, 0x67, 0x98, 0x3a, 0xe6, 0x4e, 0x60, 0x55, 0x9b, 0xea, 0x0e, 0x53, 0x64, 0x2d, 0x4d, 0x5b, - 0x1b, 0xab, 0xe4, 0x93, 0xcf, 0x51, 0xc9, 0x13, 0xbe, 0x39, 0x18, 0x93, 0x2e, 0xc1, 0x42, 0xca, - 0x37, 0xc9, 0xa0, 0x4c, 0x61, 0x55, 0x9b, 0x31, 0x4e, 0x24, 0xbc, 0x93, 0x18, 0xa0, 0xfa, 0x00, - 0x74, 0x92, 0x62, 0x1a, 0xab, 0x5a, 0xae, 0x17, 0x40, 0xdf, 0x64, 0x4e, 0x0c, 0x5a, 0x33, 0x58, - 0xd5, 0x66, 0x53, 0xd1, 0x89, 0x79, 0xa9, 0x27, 0x73, 0x6c, 0x94, 0x53, 0x35, 0xd4, 0xcd, 0x1c, - 0x4a, 0x2e, 0xe4, 0x21, 0xbb, 0xc2, 0xea, 0xed, 0x5e, 0x6d, 0xac, 0x70, 0x1f, 0x66, 0xc2, 0xa9, - 0xf3, 0xff, 0x4c, 0xd1, 0x94, 0x64, 0xd3, 0x90, 0x89, 0x2e, 0x66, 0x46, 0xc6, 0xf4, 0x0b, 0x47, - 0xb6, 0x4e, 0x04, 0x09, 0xeb, 0xef, 0xab, 0x87, 0x46, 0xc3, 0x07, 0x31, 0x24, 0x4b, 0xe1, 0x33, - 0x05, 0x66, 0xde, 0x77, 0xea, 0x44, 0xd0, 0xbb, 0x65, 0x83, 0x7e, 0xec, 0x51, 0x2e, 0xd0, 0x2a, - 0xa8, 0xa4, 0x1a, 0x28, 0x31, 0x51, 0x3e, 0x3b, 0x70, 0x35, 0x37, 0x7c, 0x6e, 0xf4, 0x36, 0x4c, - 0x78, 0x12, 0x57, 0xde, 0xe0, 0x43, 0xd5, 0xba, 0x67, 0x87, 0xcb, 0xfe, 0x25, 0xff, 0x06, 0xe1, - 0x0f, 0x0d, 0x08, 0xc8, 0xfd, 0xe7, 0x25, 0x0c, 0x13, 0xb1, 0x8c, 0xf1, 0xfb, 0xe8, 0xbd, 0x75, - 0xe3, 0x66, 0x6e, 0x08, 0x8d, 0x82, 0x7a, 0x73, 0x73, 0x3d, 0xa7, 0x94, 0xff, 0xbc, 0x00, 0xc7, - 0xd3, 0x82, 0x6f, 0x53, 0x77, 0xd7, 0xac, 0x51, 0xf4, 0xa5, 0x0a, 0x23, 0xab, 0xae, 0xef, 0x64, - 0x34, 0xb8, 0xf6, 0xf9, 0xc1, 0x59, 0x0a, 0xff, 0xc8, 0x7c, 0xf7, 0x8f, 0x7f, 0xff, 0x2c, 0xf3, - 0xd7, 0x4c, 0xe1, 0x2f, 0x19, 0x7d, 0xf7, 0x6c, 0xf4, 0xb5, 0xa4, 0xd7, 0xb7, 0x12, 0x7d, 0x2f, - 0x56, 0xd4, 0xf7, 0xf5, 0xbd, 0x78, 0x9d, 0xde, 0xd7, 0xf7, 0x62, 0x39, 0xb3, 0xaf, 0x73, 0xea, - 0x10, 0x97, 0x08, 0xe6, 0xea, 0x7b, 0x5e, 0x62, 0x63, 0x2f, 0x96, 0x97, 0xfb, 0xfa, 0x5e, 0x22, - 0xcd, 0xa3, 0x75, 0x6c, 0xff, 0xa0, 0x3a, 0xed, 0xeb, 0x7b, 0xf1, 0x8a, 0xf3, 0x0e, 0x17, 0xae, - 0xe3, 0xd2, 0x1d, 0xf3, 0xb1, 0xbe, 0xb4, 0x1f, 0x08, 0x89, 0xb1, 0xf1, 0x34, 0x0e, 0x4f, 0x0b, - 0xe2, 0x29, 0x86, 0xa4, 0x92, 0xfd, 0x46, 0xcb, 0x7d, 0x7d, 0xef, 0xa0, 0x82, 0xec, 0xeb, 0x7b, - 0xa9, 0xab, 0x98, 0xcf, 0xd9, 0xf3, 0x8e, 0xb6, 0x8f, 0x7e, 0xae, 0x00, 0x04, 0x81, 0x95, 0xc7, - 0xe0, 0xeb, 0x09, 0xee, 0x92, 0x8c, 0xed, 0xe9, 0xc2, 0xe2, 0x21, 0x91, 0x5d, 0x56, 0x96, 0xd0, - 0x37, 0x61, 0xe4, 0x3a, 0x63, 0x0f, 0x3d, 0x07, 0xcd, 0x94, 0xb8, 0x57, 0x2d, 0x97, 0x36, 0xea, - 0xe1, 0xd9, 0x7d, 0x1e, 0xc9, 0x25, 0x29, 0x59, 0x43, 0xff, 0x75, 0x68, 0x4e, 0xf9, 0x23, 0xcc, - 0x3e, 0xfa, 0xbe, 0x02, 0x23, 0xc1, 0x59, 0x7e, 0x1e, 0xd7, 0xf4, 0xb9, 0xc9, 0x15, 0xce, 0x4a, - 0x2d, 0xde, 0xc8, 0x3f, 0xa3, 0x16, 0xbe, 0x1b, 0x7e, 0xa3, 0xc0, 0x58, 0x54, 0x54, 0xd0, 0x99, - 0x43, 0x55, 0x49, 0xd5, 0x9f, 0xbe, 0x9a, 0x3c, 0x90, 0x9a, 0xd4, 0xf3, 0x4b, 0xfa, 0x6e, 0xf9, - 0xe9, 0x9a, 0x90, 0x2a, 0x2d, 0x05, 0xda, 0xf8, 0xb5, 0xe8, 0xde, 0xd9, 0xf2, 0xa0, 0x2c, 0xe8, - 0x67, 0x0a, 0xcc, 0x6f, 0x11, 0x51, 0x6b, 0xfa, 0x45, 0xb7, 0x53, 0xa4, 0x36, 0x6c, 0x99, 0x78, - 0x5f, 0x9d, 0x49, 0x6f, 0x49, 0x93, 0xce, 0x94, 0xdf, 0xd0, 0x77, 0xcb, 0xe4, 0x59, 0x15, 0x54, - 0x96, 0xd0, 0x8f, 0x15, 0x18, 0x59, 0xa3, 0x2d, 0x2a, 0x68, 0x77, 0xa6, 0xf5, 0x93, 0x75, 0xff, - 0x49, 0xe5, 0x8d, 0xea, 0xeb, 0x30, 0x0d, 0x50, 0x71, 0xcc, 0x6b, 0xb4, 0x5d, 0xf1, 0x44, 0x13, - 0x0d, 0xc1, 0x71, 0x18, 0xb9, 0xe9, 0x3f, 0x96, 0xd1, 0x14, 0x64, 0x5d, 0x4a, 0xea, 0x30, 0xfc, - 0xc8, 0x35, 0x05, 0x0d, 0x92, 0x6f, 0xe9, 0x59, 0x93, 0xef, 0x6f, 0x0a, 0x8c, 0x5d, 0xa1, 0xe2, - 0x96, 0x47, 0xdd, 0xf6, 0x57, 0x99, 0x7e, 0x9f, 0x2a, 0x4f, 0x2a, 0x77, 0x0a, 0x9b, 0xb0, 0xd0, - 0x6b, 0x3c, 0xef, 0x08, 0x1c, 0x70, 0x2c, 0xff, 0x40, 0xa9, 0x0e, 0x49, 0xfb, 0x4a, 0xe8, 0xcd, - 0xc3, 0xec, 0xfb, 0xd8, 0x17, 0x10, 0x59, 0xf9, 0xe9, 0x30, 0xe4, 0xae, 0x50, 0x11, 0xf5, 0xf0, - 0x40, 0xf8, 0xc5, 0xc1, 0x5b, 0x64, 0xc8, 0x9f, 0x7f, 0x7e, 0xd6, 0xc2, 0x27, 0x59, 0x69, 0xc1, - 0xbf, 0x55, 0xf4, 0x2f, 0xf5, 0x10, 0x1b, 0x3a, 0x43, 0x49, 0x58, 0x6c, 0x7b, 0x5d, 0x30, 0xf6, - 0xd3, 0x7b, 0xa9, 0xce, 0xd4, 0xf7, 0x86, 0xd0, 0xb5, 0xe7, 0x3d, 0x6d, 0x33, 0xd9, 0x31, 0x9e, - 0x32, 0xc3, 0xf7, 0xde, 0xed, 0xcb, 0x9b, 0xe8, 0x71, 0xfd, 0x67, 0xec, 0x6e, 0xbe, 0x83, 0x19, - 0xba, 0xa7, 0x21, 0x7d, 0x05, 0x76, 0xb7, 0xb0, 0x3e, 0x83, 0x6b, 0x9f, 0xed, 0xbe, 0x76, 0xf2, - 0xa7, 0x49, 0x4d, 0xb4, 0x58, 0xf4, 0x85, 0x0a, 0xd9, 0xf5, 0x5a, 0x93, 0xa1, 0x7e, 0x1f, 0x44, - 0xb9, 0x57, 0x2d, 0x05, 0x57, 0x88, 0xa8, 0x38, 0x3c, 0x33, 0x65, 0xe1, 0x9f, 0x99, 0x27, 0x95, - 0xef, 0x64, 0x60, 0x92, 0xd6, 0x9a, 0x0c, 0xf3, 0x60, 0xb4, 0x82, 0x31, 0xb9, 0x72, 0x9d, 0x1a, - 0x9a, 0xbd, 0xed, 0x59, 0x16, 0x71, 0xdb, 0xcb, 0x78, 0x3d, 0x7c, 0x95, 0xcf, 0xad, 0x51, 0x5e, - 0x73, 0x4d, 0xf9, 0x2b, 0x86, 0x7c, 0x5b, 0x58, 0x03, 0x94, 0x3c, 0xb6, 0x52, 0xdb, 0x01, 0x0f, - 0xeb, 0x7b, 0x97, 0x40, 0xfd, 0xef, 0x33, 0xe7, 0xd0, 0x05, 0x78, 0xcb, 0xa0, 0xc2, 0x73, 0x6d, - 0x5a, 0xc7, 0x8f, 0x9a, 0xd4, 0xc6, 0xa2, 0x49, 0xb1, 0x4b, 0x39, 0xf3, 0xdc, 0x1a, 0xc5, 0x26, - 0xc7, 0x82, 0x5a, 0x0e, 0x73, 0x89, 0x6b, 0xb6, 0xda, 0xd8, 0xb3, 0xc9, 0x2e, 0x31, 0x5b, 0xa4, - 0xda, 0xa2, 0xa5, 0xf7, 0xde, 0x06, 0xf5, 0xfc, 0x99, 0xf3, 0xe8, 0x3c, 0x2c, 0x3d, 0x05, 0xa0, - 0xce, 0x28, 0xc7, 0x36, 0x13, 0x98, 0x3e, 0x36, 0xb9, 0x28, 0xa1, 0x11, 0xc8, 0xfe, 0x34, 0xa3, - 0xa8, 0xf2, 0x90, 0x7d, 0x78, 0x78, 0x99, 0xf0, 0x1d, 0xa3, 0xef, 0x05, 0x81, 0xb9, 0x77, 0xa2, - 0x90, 0x8b, 0x37, 0x1c, 0x7f, 0x6f, 0x39, 0xf8, 0xb8, 0x71, 0x0f, 0xa1, 0xae, 0x2d, 0xf4, 0x2b, - 0x05, 0x26, 0xd7, 0x28, 0x75, 0xe4, 0x77, 0x63, 0xff, 0xc5, 0xd7, 0x33, 0xd9, 0x5c, 0x92, 0xb6, - 0x5d, 0x2c, 0x9c, 0x3f, 0xb4, 0xc4, 0x27, 0x7e, 0x67, 0x2a, 0xf9, 0xd7, 0x12, 0xd9, 0x85, 0x2a, - 0x00, 0x9b, 0x6c, 0xc5, 0xb4, 0xeb, 0xa6, 0xdd, 0xe0, 0xe8, 0x44, 0x57, 0x05, 0x5f, 0x0b, 0x7f, - 0x82, 0xeb, 0x5b, 0xdc, 0x87, 0xd0, 0x5d, 0x18, 0xbd, 0x63, 0x5a, 0x94, 0x79, 0x02, 0xf5, 0x21, - 0xea, 0xcb, 0x7c, 0x52, 0xaa, 0x7f, 0x14, 0xcd, 0xc5, 0xfd, 0x29, 0x42, 0xb0, 0x26, 0xe4, 0xd6, - 0x5d, 0x97, 0xb9, 0x7e, 0xfb, 0x5e, 0xa3, 0x82, 0x98, 0x2d, 0x3e, 0xb0, 0x80, 0xd3, 0x52, 0xc0, - 0xcb, 0x68, 0x21, 0x11, 0x30, 0x1f, 0xf5, 0x91, 0x29, 0x9a, 0xf5, 0x10, 0xf5, 0x07, 0x0a, 0xa0, - 0x2b, 0x54, 0xa4, 0xef, 0x68, 0x87, 0xcf, 0x08, 0x29, 0x8e, 0xbe, 0x6a, 0xbc, 0x26, 0xd5, 0x38, - 0x55, 0x38, 0x11, 0x57, 0xc3, 0xd7, 0xa0, 0xca, 0xea, 0x6d, 0x7d, 0xcf, 0x9f, 0x08, 0xe4, 0x5d, - 0x0e, 0x7d, 0x4f, 0x81, 0xd9, 0x2d, 0xc6, 0x85, 0x8f, 0x28, 0x59, 0xa5, 0x22, 0xcf, 0x76, 0x1d, - 0xec, 0x2b, 0x5d, 0x97, 0xd2, 0x5f, 0x2f, 0x9c, 0x8e, 0x4b, 0x77, 0x18, 0x17, 0xbe, 0x06, 0xf2, - 0x97, 0x80, 0x40, 0x8d, 0x28, 0x29, 0xf2, 0xbf, 0x56, 0x9e, 0x54, 0x3e, 0x57, 0xd0, 0x4e, 0x9f, - 0xdb, 0x19, 0xae, 0xc7, 0x8a, 0x44, 0xb1, 0x88, 0x1f, 0x35, 0xcd, 0x5a, 0x13, 0xf3, 0x26, 0xf3, - 0x5a, 0x75, 0x79, 0xfc, 0xaa, 0x14, 0x7b, 0x9c, 0xd6, 0xb1, 0x69, 0x63, 0xa7, 0x45, 0x6a, 0x14, - 0xb3, 0x1d, 0x79, 0x50, 0xeb, 0xac, 0xe6, 0x59, 0xd4, 0x0e, 0x7e, 0x18, 0xc5, 0x35, 0x66, 0xf9, - 0x8b, 0x53, 0xf9, 0x5b, 0xb0, 0xd8, 0x6b, 0x32, 0xf0, 0x8f, 0x51, 0x74, 0x1f, 0x1c, 0xb0, 0xde, - 0x94, 0x1f, 0xc0, 0x91, 0x1a, 0xb1, 0x68, 0x6b, 0x95, 0x70, 0x1a, 0x62, 0xf8, 0x97, 0x17, 0x64, - 0xc0, 0x70, 0xf0, 0x73, 0xc6, 0xa0, 0x89, 0x74, 0x42, 0xfa, 0x70, 0x0e, 0xcd, 0x26, 0x12, 0xc9, - 0xdf, 0x2a, 0x7f, 0x04, 0x0b, 0x15, 0x9b, 0x89, 0x26, 0x75, 0x43, 0x49, 0x7e, 0xf0, 0x62, 0x87, - 0xea, 0xdd, 0xc4, 0x11, 0x1b, 0x54, 0xf0, 0xd0, 0xca, 0xe7, 0xa3, 0x4f, 0x2a, 0xbf, 0x1c, 0x45, - 0x7f, 0x52, 0x60, 0xae, 0x82, 0x57, 0x82, 0x0f, 0xa9, 0xb1, 0x12, 0xf0, 0x01, 0x1c, 0x69, 0x18, - 0x5b, 0xab, 0xc5, 0x2b, 0x81, 0xe9, 0xd8, 0x71, 0xd9, 0x03, 0x5a, 0x13, 0x83, 0xba, 0x2c, 0x9f, - 0xb3, 0x99, 0x4d, 0xff, 0x37, 0x34, 0xcd, 0xa7, 0x5e, 0xfa, 0x08, 0x8e, 0xac, 0xdc, 0x5e, 0xc3, - 0xe7, 0x8a, 0xab, 0x2d, 0xe2, 0x71, 0x8a, 0xaf, 0x9b, 0x35, 0x6a, 0x73, 0x8a, 0x2e, 0x0f, 0x86, - 0xac, 0x57, 0x5b, 0xac, 0xaa, 0x5b, 0x84, 0x0b, 0xea, 0xea, 0xd7, 0x37, 0x56, 0xd7, 0x37, 0x6f, - 0xaf, 0x97, 0xc4, 0x63, 0x51, 0x56, 0xcf, 0x96, 0xce, 0x2c, 0xa9, 0x4a, 0x26, 0x5b, 0xce, 0x11, - 0x27, 0xf8, 0xfc, 0x6b, 0x32, 0x5b, 0x7f, 0xc0, 0x99, 0x5d, 0x3e, 0x16, 0x7f, 0xf3, 0xb8, 0xb8, - 0xc3, 0x58, 0xd1, 0x32, 0x2d, 0xba, 0xdc, 0x45, 0xb9, 0xdc, 0x87, 0xd2, 0xd8, 0xf2, 0x3b, 0xc6, - 0x39, 0xb4, 0x01, 0x57, 0xba, 0x3b, 0x86, 0xc7, 0xa9, 0x7b, 0xd0, 0x2d, 0x9a, 0x64, 0x97, 0x62, - 0x87, 0xba, 0x96, 0xc9, 0xb9, 0x9f, 0x98, 0x82, 0x61, 0x52, 0xab, 0x51, 0xce, 0x13, 0xdd, 0xa5, - 0x64, 0xbc, 0x40, 0x0f, 0x1a, 0x35, 0xae, 0x82, 0x7a, 0xfe, 0xec, 0x05, 0x54, 0x81, 0xa9, 0x8d, - 0xd7, 0x2c, 0x4c, 0xb0, 0xa0, 0xc4, 0x61, 0xa2, 0x84, 0xce, 0x40, 0x29, 0x3f, 0xd0, 0xc7, 0xb7, - 0x7b, 0x3f, 0xcc, 0xc0, 0x0c, 0x8c, 0xaf, 0x10, 0x6e, 0xd6, 0xe4, 0xfc, 0x9f, 0x19, 0x53, 0xe0, - 0xa5, 0xc4, 0x8d, 0x60, 0x66, 0x2c, 0x93, 0x1f, 0xff, 0xa0, 0x58, 0xd9, 0xda, 0x28, 0x5e, 0xa3, - 0x6d, 0x9c, 0x81, 0x2f, 0x95, 0xce, 0x0d, 0xe1, 0xf7, 0xca, 0x98, 0xaa, 0x65, 0xcb, 0xaf, 0x44, - 0x31, 0x8c, 0x05, 0x5c, 0x67, 0xc4, 0x13, 0x4d, 0xdd, 0xff, 0xc3, 0x5c, 0xf3, 0x1b, 0x74, 0x79, - 0xb1, 0x3f, 0x91, 0x60, 0x0f, 0xa9, 0xbd, 0xf2, 0x6d, 0xc8, 0x07, 0x17, 0x0e, 0x84, 0xae, 0xb8, - 0xc4, 0x16, 0x1c, 0xfb, 0x8b, 0xd0, 0x7b, 0xb0, 0x10, 0x5e, 0x43, 0xd0, 0x5c, 0xb8, 0x29, 0x57, - 0xd1, 0xee, 0x2a, 0x0c, 0x93, 0xba, 0x65, 0xda, 0x68, 0x39, 0xc1, 0x6a, 0xd7, 0x13, 0x64, 0x32, - 0x18, 0x3e, 0x99, 0xc9, 0x85, 0xdf, 0x89, 0x76, 0x29, 0x36, 0xed, 0x1d, 0xe6, 0x5a, 0x32, 0xde, - 0xd5, 0x45, 0x98, 0x8a, 0xbb, 0x62, 0x28, 0x7d, 0x35, 0xaa, 0xbe, 0xde, 0xf7, 0x72, 0x94, 0x26, - 0x75, 0x37, 0xe0, 0xf8, 0x8d, 0x83, 0xea, 0x13, 0x3f, 0x53, 0x83, 0x9e, 0xa5, 0x7b, 0xe3, 0x9d, - 0xc8, 0x55, 0x47, 0xe4, 0x79, 0x3e, 0xf7, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x52, 0x42, 0x5e, - 0xa6, 0x8f, 0x23, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_2003bb04c40c37e3) +} + +var fileDescriptor_a_bit_of_everything_2003bb04c40c37e3 = []byte{ + // 2945 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, + 0xdd, 0x5a, 0x2e, 0xf5, 0xfa, 0xe9, 0x45, 0x8d, 0xfc, 0x90, 0x69, 0x25, 0x1a, 0x33, 0xce, 0x97, + 0x8d, 0x12, 0x72, 0x25, 0x4a, 0x71, 0x6c, 0x05, 0x89, 0x3f, 0xea, 0x61, 0x5b, 0xb1, 0x2d, 0xcb, + 0x6b, 0xc7, 0x5f, 0xe0, 0xcf, 0x89, 0x30, 0x24, 0x87, 0xe4, 0xda, 0xdc, 0x9d, 0xcd, 0xee, 0xac, + 0x6c, 0x7e, 0xfa, 0xd4, 0xa6, 0x2d, 0xd0, 0xa2, 0xcd, 0xa1, 0x80, 0xd3, 0x53, 0x51, 0xf4, 0xdc, + 0x43, 0xaf, 0x3d, 0xe5, 0xd0, 0x5e, 0x7a, 0xea, 0xad, 0x2d, 0x02, 0x14, 0x05, 0x7a, 0x69, 0x0b, + 0xf4, 0x2f, 0x68, 0x51, 0xb4, 0x87, 0x62, 0x67, 0x77, 0xa9, 0xdd, 0x25, 0x69, 0x99, 0x72, 0x90, + 0x8b, 0xb4, 0x33, 0xf3, 0x7b, 0xbf, 0x67, 0x08, 0x45, 0xfa, 0x84, 0x18, 0x56, 0x93, 0x3a, 0xaa, + 0x65, 0x33, 0xce, 0xd4, 0x60, 0x69, 0x95, 0x55, 0xb2, 0x5b, 0xd6, 0xf9, 0x2e, 0xab, 0xed, 0xd2, + 0x3d, 0x6a, 0xb7, 0x78, 0x43, 0x37, 0xeb, 0x05, 0x01, 0x83, 0xe6, 0xeb, 0xb6, 0x55, 0x29, 0xd4, + 0x09, 0xa7, 0x8f, 0x49, 0xab, 0x10, 0x12, 0x28, 0xb4, 0x51, 0xb3, 0x73, 0x75, 0xc6, 0xea, 0x4d, + 0xaa, 0x12, 0x4b, 0x57, 0x89, 0x69, 0x32, 0x4e, 0xb8, 0xce, 0x4c, 0xc7, 0x47, 0xcf, 0xe2, 0xe0, + 0x54, 0xac, 0xca, 0x6e, 0x4d, 0xad, 0xe9, 0xb4, 0x59, 0xdd, 0x35, 0x88, 0xf3, 0x28, 0x80, 0x38, + 0x9b, 0x84, 0xa0, 0x86, 0xc5, 0x5b, 0xc1, 0xe1, 0xcb, 0xc9, 0xc3, 0xaa, 0x6b, 0x0b, 0xfa, 0xc1, + 0xf9, 0x6b, 0x09, 0x8d, 0x2c, 0xc2, 0x1b, 0xd4, 0x74, 0x0d, 0xf1, 0xb1, 0xeb, 0x7d, 0x85, 0x72, + 0x24, 0x00, 0x1d, 0xb7, 0xac, 0x1a, 0xd4, 0x71, 0x48, 0x9d, 0x06, 0x10, 0xe7, 0x3a, 0x21, 0x8a, + 0x09, 0x90, 0xf9, 0xa4, 0x34, 0x5c, 0x37, 0xa8, 0xc3, 0x89, 0x61, 0x05, 0x00, 0x6f, 0x8a, 0x7f, + 0x95, 0x7c, 0x9d, 0x9a, 0x79, 0xe7, 0x31, 0xa9, 0xd7, 0xa9, 0xad, 0x32, 0x4b, 0xd8, 0xa3, 0xd3, + 0x36, 0xb9, 0x7f, 0xcf, 0x40, 0xa6, 0xb4, 0xa6, 0xf3, 0x5b, 0xb5, 0xcd, 0xb6, 0xd5, 0xd1, 0x47, + 0x30, 0xe1, 0xe8, 0x66, 0xbd, 0x49, 0x77, 0x4d, 0xea, 0x70, 0x5a, 0x9d, 0x3d, 0x83, 0x25, 0x65, + 0xac, 0x78, 0xb1, 0x70, 0x84, 0x1f, 0x0a, 0x49, 0x4a, 0x85, 0x6d, 0x81, 0xaf, 0x8d, 0xfb, 0xe4, + 0xfc, 0x15, 0x6a, 0x40, 0xda, 0x75, 0xf5, 0xea, 0xac, 0x84, 0x25, 0x65, 0x74, 0xed, 0xee, 0xd3, + 0xd2, 0xed, 0x4f, 0x25, 0xe9, 0x07, 0xd2, 0xf5, 0xff, 0x25, 0xf9, 0x5a, 0x29, 0x7f, 0x65, 0x31, + 0x7f, 0xe9, 0xa3, 0xfd, 0x8b, 0x07, 0xf9, 0xe8, 0x72, 0xa5, 0x9f, 0xe5, 0x52, 0xf1, 0x40, 0x13, + 0x1c, 0xd0, 0x0e, 0x0c, 0x05, 0x1a, 0xa4, 0xb0, 0xfc, 0x42, 0x1a, 0x04, 0x74, 0xd0, 0x3c, 0x8c, + 0xd5, 0x9a, 0x8c, 0xf0, 0xdd, 0x3d, 0xd2, 0x74, 0xe9, 0xac, 0x8c, 0x25, 0x25, 0xa5, 0x81, 0xd8, + 0xba, 0xe7, 0xed, 0xa0, 0x73, 0x30, 0x5e, 0x65, 0x6e, 0xb9, 0x49, 0x03, 0x88, 0x34, 0x96, 0x14, + 0x49, 0x1b, 0xf3, 0xf7, 0x7c, 0x90, 0x79, 0x18, 0xd3, 0x4d, 0x7e, 0x61, 0x25, 0x80, 0x18, 0xc4, + 0x92, 0x22, 0x6b, 0x20, 0xb6, 0xda, 0x34, 0xdc, 0x28, 0xc4, 0x10, 0x96, 0x94, 0xb4, 0x36, 0xe6, + 0x46, 0x40, 0x7c, 0x1a, 0xcb, 0xc5, 0x00, 0x62, 0x18, 0x4b, 0xca, 0xa0, 0xa0, 0xb1, 0x5c, 0xf4, + 0x01, 0x5e, 0x81, 0x89, 0x9a, 0xfe, 0x84, 0x56, 0xdb, 0x44, 0x46, 0xb0, 0xa4, 0x0c, 0x69, 0xe3, + 0xc1, 0x66, 0x1c, 0xa8, 0x4d, 0x67, 0x14, 0x4b, 0xca, 0x70, 0x00, 0x14, 0x52, 0x7a, 0x09, 0xa0, + 0xcc, 0x58, 0x33, 0x80, 0x00, 0x2c, 0x29, 0x23, 0xda, 0xa8, 0xb7, 0xd3, 0x16, 0xd6, 0xe1, 0xb6, + 0x6e, 0xd6, 0x03, 0x80, 0x31, 0xcf, 0xab, 0xda, 0x98, 0xbf, 0xd7, 0x16, 0xb6, 0xdc, 0xe2, 0xd4, + 0x09, 0x20, 0x5e, 0xc2, 0x92, 0x32, 0xae, 0x81, 0xd8, 0x8a, 0x29, 0xdc, 0x16, 0x63, 0x02, 0x4b, + 0xca, 0x84, 0xaf, 0x70, 0x28, 0xc5, 0x75, 0x00, 0x2f, 0x95, 0x02, 0x80, 0x49, 0x2c, 0x29, 0x93, + 0xc5, 0x37, 0x8f, 0x74, 0xe7, 0xb6, 0x6b, 0x50, 0x5b, 0xaf, 0x6c, 0x9a, 0xae, 0xa1, 0x8d, 0x7a, + 0xf8, 0x3e, 0xb1, 0x1d, 0x98, 0x6a, 0x27, 0x67, 0x40, 0xf1, 0x65, 0x41, 0x51, 0xe9, 0x41, 0x31, + 0xcc, 0xe9, 0xc2, 0x0e, 0xe1, 0x0d, 0x41, 0x6d, 0xc2, 0x0a, 0xbe, 0x7c, 0x8a, 0x0e, 0x9c, 0xf2, + 0x23, 0x64, 0x37, 0x49, 0x78, 0x5e, 0x10, 0x7e, 0xef, 0x28, 0xc2, 0x37, 0xfd, 0x2c, 0x0f, 0xe9, + 0x07, 0x71, 0xd7, 0x66, 0x37, 0x63, 0xc6, 0xd6, 0x3e, 0xd3, 0x57, 0x61, 0xd2, 0x89, 0xfb, 0x6f, + 0x0a, 0x4b, 0xca, 0x94, 0x36, 0xe1, 0xc4, 0x1c, 0xd8, 0x06, 0x6b, 0xc7, 0x42, 0x06, 0x4b, 0x4a, + 0x26, 0x04, 0x8b, 0x44, 0x9d, 0x13, 0x75, 0xc2, 0x34, 0x96, 0x94, 0x69, 0x6d, 0xcc, 0x89, 0x38, + 0x21, 0x00, 0x69, 0xd3, 0x41, 0x58, 0x52, 0x90, 0x0f, 0x12, 0x52, 0x29, 0xc2, 0x49, 0x9b, 0x5a, + 0x94, 0x78, 0xa6, 0x88, 0xc5, 0xc5, 0x0c, 0x96, 0x95, 0x51, 0x6d, 0x26, 0x3c, 0xbc, 0x13, 0x89, + 0x8f, 0x4b, 0x30, 0xc6, 0x4c, 0xea, 0x55, 0x7e, 0xaf, 0xec, 0xce, 0x9e, 0x10, 0xd5, 0xe6, 0x54, + 0xc1, 0xaf, 0x74, 0x85, 0xb0, 0xd2, 0x15, 0x36, 0xbd, 0xd3, 0x6b, 0x03, 0x1a, 0x08, 0x60, 0xb1, + 0x42, 0xaf, 0xc0, 0xb8, 0x8f, 0xea, 0xf3, 0x9a, 0x3d, 0xe9, 0x45, 0xdf, 0xb5, 0x01, 0xcd, 0x27, + 0xe8, 0x33, 0x41, 0x0f, 0x60, 0xd4, 0x20, 0x56, 0x20, 0xc7, 0x29, 0x51, 0x09, 0x2e, 0xf7, 0x5f, + 0x09, 0x6e, 0x12, 0x4b, 0x88, 0xbb, 0x69, 0x72, 0xbb, 0xa5, 0x8d, 0x18, 0xc1, 0x12, 0x3d, 0x81, + 0x19, 0x83, 0x58, 0x56, 0x52, 0xdf, 0xd3, 0x82, 0xcf, 0xb5, 0x63, 0xf1, 0xb1, 0x62, 0xf6, 0xf1, + 0x19, 0x4e, 0x1b, 0xc9, 0xfd, 0x08, 0xe7, 0x20, 0xf6, 0x7c, 0xce, 0xb3, 0x2f, 0xc6, 0xd9, 0x8f, + 0xbc, 0x4e, 0xce, 0x91, 0x7d, 0xb4, 0x0a, 0xb3, 0x26, 0x33, 0xd7, 0x99, 0xb9, 0x47, 0x4d, 0xaf, + 0x9d, 0x90, 0xe6, 0x36, 0x31, 0xfc, 0xf2, 0x36, 0x9b, 0x15, 0x05, 0xa0, 0xe7, 0x39, 0x5a, 0x87, + 0xa9, 0x76, 0xcf, 0x0a, 0x24, 0x3e, 0x2b, 0x3c, 0x9e, 0xed, 0xf0, 0xf8, 0xdd, 0x10, 0x4e, 0x9b, + 0x6c, 0xa3, 0xf8, 0x44, 0x1e, 0x40, 0x3b, 0x92, 0xa2, 0xc9, 0x36, 0x87, 0xe5, 0xbe, 0xeb, 0xc2, + 0x74, 0x48, 0xa8, 0x9d, 0x58, 0xd9, 0x9f, 0x49, 0x30, 0x14, 0x34, 0x2b, 0x04, 0x69, 0x93, 0x18, + 0xd4, 0x6f, 0x56, 0x9a, 0xf8, 0x46, 0xa7, 0x60, 0x88, 0x18, 0xcc, 0x35, 0xf9, 0x6c, 0x4a, 0x14, + 0xaa, 0x60, 0x85, 0x6e, 0x43, 0x8a, 0x3d, 0x12, 0x3d, 0x61, 0xb2, 0x58, 0x3a, 0x6e, 0xab, 0x29, + 0x6c, 0x50, 0x6a, 0x09, 0xc1, 0x52, 0xec, 0x51, 0x6e, 0x1e, 0x46, 0xc2, 0x35, 0x1a, 0x85, 0xc1, + 0x2b, 0xa5, 0x1b, 0x77, 0x36, 0x33, 0x03, 0x68, 0x04, 0xd2, 0x77, 0xb5, 0x0f, 0x36, 0x33, 0x52, + 0x56, 0x87, 0x89, 0x58, 0x60, 0xa2, 0x0c, 0xc8, 0x8f, 0x68, 0x2b, 0x90, 0xd7, 0xfb, 0x44, 0x6b, + 0x30, 0xe8, 0x5b, 0x27, 0x75, 0x8c, 0xaa, 0xe9, 0xa3, 0xae, 0xa6, 0x2e, 0x4a, 0xd9, 0x0d, 0x38, + 0xd5, 0x3d, 0x36, 0xbb, 0xf0, 0x3c, 0x11, 0xe5, 0x39, 0x1a, 0xa5, 0xf2, 0x8d, 0x90, 0x4a, 0x32, + 0xce, 0xba, 0x50, 0xd9, 0x8e, 0x52, 0x79, 0x91, 0xf6, 0x7d, 0xc8, 0x7f, 0xf5, 0x5f, 0xd2, 0xd3, + 0xd2, 0x3f, 0x24, 0xa8, 0x2f, 0xcc, 0x94, 0x70, 0x59, 0xe7, 0x98, 0xd5, 0xf0, 0xe1, 0xc0, 0x59, + 0xdc, 0xda, 0x32, 0x79, 0x18, 0xb2, 0x2d, 0x5c, 0x61, 0x86, 0xd5, 0xd4, 0x2b, 0x5e, 0x70, 0xe0, + 0x60, 0x0c, 0xc3, 0xbc, 0x65, 0x51, 0xcc, 0x19, 0xae, 0xb0, 0x3d, 0x6a, 0x63, 0x83, 0x98, 0x2d, + 0x5c, 0xa3, 0x84, 0xbb, 0x36, 0x75, 0x3c, 0x5a, 0x3b, 0x61, 0xec, 0xfe, 0x56, 0x12, 0x33, 0xc8, + 0xc2, 0x3d, 0x38, 0x7f, 0x45, 0x37, 0xab, 0x98, 0xb9, 0x1c, 0x1b, 0xcc, 0xa6, 0x98, 0x94, 0xbd, + 0xcf, 0x8e, 0xa1, 0xab, 0xd0, 0xe0, 0xdc, 0x72, 0x56, 0x55, 0xb5, 0xae, 0xf3, 0x86, 0x5b, 0x2e, + 0x54, 0x98, 0xa1, 0x7a, 0xea, 0xe6, 0x69, 0x85, 0x39, 0x2d, 0x87, 0xd3, 0x60, 0x19, 0x68, 0x5f, + 0x5c, 0x41, 0xc5, 0x7d, 0x9c, 0xf3, 0x58, 0xe4, 0x56, 0x71, 0x6e, 0xb1, 0x52, 0x5b, 0xbe, 0xb0, + 0x44, 0x97, 0xf2, 0x2b, 0xe5, 0x95, 0x95, 0xfc, 0xca, 0xc5, 0xe5, 0x6a, 0x9e, 0x2c, 0xbd, 0x75, + 0x29, 0xff, 0xd6, 0x4a, 0x95, 0x94, 0xab, 0xb5, 0xb7, 0xe9, 0xc5, 0xa5, 0x95, 0x1c, 0x3e, 0x58, + 0x9b, 0x08, 0x4b, 0xad, 0x30, 0x48, 0xee, 0x47, 0x23, 0x30, 0x9b, 0x94, 0x44, 0x0b, 0xd2, 0x01, + 0x5d, 0x82, 0x33, 0xa2, 0x99, 0xb5, 0x13, 0x2d, 0x3a, 0xf9, 0x48, 0x58, 0x56, 0x52, 0xda, 0x29, + 0x0f, 0x20, 0x44, 0xb8, 0x72, 0x38, 0x05, 0xbd, 0x03, 0xd9, 0x38, 0x6a, 0x6c, 0x26, 0xf2, 0x86, + 0x31, 0x49, 0x3b, 0x1d, 0xc5, 0xdd, 0x88, 0xcc, 0x47, 0x1d, 0x7c, 0xa3, 0x2d, 0x47, 0xc6, 0xb2, + 0x22, 0xc7, 0xf9, 0x6e, 0x1d, 0x76, 0x9f, 0x0e, 0xbe, 0xb1, 0x39, 0x2a, 0x8d, 0x65, 0x25, 0x1d, + 0xe7, 0xfb, 0x41, 0xa4, 0x75, 0x75, 0xe3, 0xdb, 0xee, 0x86, 0x83, 0x58, 0x56, 0x06, 0x3b, 0xf8, + 0x86, 0x8d, 0xf1, 0x5d, 0x38, 0x9b, 0x30, 0x55, 0xac, 0xdf, 0x0e, 0x61, 0x59, 0x19, 0xd2, 0x66, + 0x63, 0xc6, 0x8a, 0xb6, 0xde, 0xee, 0xe8, 0x91, 0xe9, 0x4e, 0x56, 0x86, 0xbb, 0xa0, 0x87, 0xdc, + 0xdf, 0x86, 0xd9, 0x38, 0x7a, 0x64, 0x5e, 0x1b, 0xc1, 0xb2, 0x32, 0xa2, 0x9d, 0x8c, 0xe2, 0xae, + 0xb5, 0x67, 0xb7, 0x0e, 0x73, 0xc5, 0x3a, 0xd8, 0xa8, 0xe8, 0xd8, 0x31, 0x73, 0xc5, 0xbb, 0x76, + 0xc2, 0x5c, 0xd1, 0x19, 0x0f, 0xb0, 0xac, 0x8c, 0xc7, 0xcd, 0xb5, 0x76, 0x38, 0xef, 0x75, 0x75, + 0x53, 0x5b, 0xdd, 0x31, 0x2c, 0x2b, 0x13, 0x9d, 0x6e, 0x0a, 0xb5, 0xa5, 0x49, 0x6d, 0x23, 0xf5, + 0x7f, 0xfc, 0x18, 0xf5, 0x3f, 0x66, 0x9b, 0xc3, 0xe1, 0xea, 0x32, 0xcc, 0x25, 0x6c, 0x13, 0x77, + 0xca, 0x04, 0x96, 0x95, 0x29, 0xed, 0x4c, 0xcc, 0x3a, 0xb1, 0xb1, 0xab, 0x07, 0x81, 0x76, 0x50, + 0x4c, 0x62, 0x59, 0xc9, 0x74, 0x23, 0xd0, 0x33, 0x98, 0x63, 0xe3, 0xd9, 0x14, 0x96, 0x95, 0xe9, + 0x84, 0x77, 0x22, 0x56, 0xea, 0x8a, 0x1c, 0x19, 0x00, 0x65, 0x05, 0x75, 0x22, 0x07, 0x9c, 0x73, + 0x59, 0x48, 0xaf, 0xb1, 0x6a, 0xab, 0x5b, 0xf3, 0xcb, 0x3d, 0x80, 0xa9, 0x60, 0x56, 0xfd, 0x1f, + 0x9d, 0x37, 0x04, 0xd8, 0x24, 0xa4, 0xc2, 0xeb, 0x9c, 0x96, 0xd2, 0xbd, 0xc2, 0x91, 0xae, 0x12, + 0x4e, 0x82, 0xaa, 0xfd, 0xea, 0x91, 0xde, 0xf0, 0x88, 0x68, 0x02, 0x25, 0xf7, 0xb9, 0x04, 0x53, + 0x1f, 0x58, 0x55, 0xc2, 0xe9, 0xbd, 0xa2, 0x46, 0x3f, 0x71, 0xa9, 0xc3, 0xd1, 0x3a, 0xc8, 0xa4, + 0xec, 0x0b, 0x31, 0x56, 0x5c, 0xea, 0xbb, 0x07, 0x68, 0x1e, 0x36, 0x7a, 0x07, 0xc6, 0x5c, 0x41, + 0x57, 0xdc, 0xfb, 0x03, 0xd1, 0x3a, 0x27, 0x8e, 0x2b, 0x3a, 0x6d, 0x56, 0x6f, 0x12, 0xe7, 0x91, + 0x06, 0x3e, 0xb8, 0xf7, 0xbd, 0x80, 0x61, 0x2c, 0x12, 0x31, 0x5e, 0xf7, 0xbd, 0xbf, 0xa9, 0xdd, + 0xca, 0x0c, 0xa0, 0x61, 0x90, 0x6f, 0x6d, 0x6f, 0x66, 0xa4, 0xe2, 0x1f, 0xe6, 0xe0, 0x74, 0x92, + 0xf1, 0x1d, 0x6a, 0xef, 0xe9, 0x15, 0x8a, 0xbe, 0x94, 0x61, 0x68, 0xdd, 0xf6, 0x8c, 0x8c, 0xfa, + 0x97, 0x3e, 0xdb, 0x3f, 0x4a, 0xee, 0xaf, 0xa9, 0x6f, 0xff, 0xee, 0x2f, 0x9f, 0xa7, 0xfe, 0x94, + 0xca, 0xfd, 0x31, 0xa5, 0xee, 0x2d, 0x85, 0x6f, 0x2c, 0xdd, 0x5e, 0x58, 0xd4, 0xfd, 0x48, 0x51, + 0x3f, 0x50, 0xf7, 0xa3, 0x75, 0xfa, 0x40, 0xdd, 0x8f, 0xc4, 0xcc, 0x81, 0xea, 0x50, 0x8b, 0xd8, + 0x84, 0x33, 0x5b, 0xdd, 0x77, 0x63, 0x07, 0xfb, 0x91, 0xb8, 0x3c, 0x50, 0xf7, 0x63, 0x61, 0x1e, + 0xae, 0x23, 0xe7, 0x87, 0xd5, 0xe9, 0x40, 0xdd, 0x8f, 0x56, 0x9c, 0x77, 0x1d, 0x6e, 0x5b, 0x36, + 0xad, 0xe9, 0x4f, 0xd4, 0x85, 0x03, 0x9f, 0x49, 0x04, 0xcd, 0x49, 0xd2, 0x71, 0x92, 0x8c, 0x9c, + 0x04, 0x42, 0x5c, 0xc8, 0x5e, 0x03, 0xe9, 0x81, 0xba, 0x7f, 0x58, 0x41, 0x0e, 0xd4, 0xfd, 0xc4, + 0x05, 0xce, 0xc3, 0xec, 0x7a, 0xb3, 0x3b, 0x40, 0x3f, 0x95, 0x00, 0x7c, 0xc7, 0x8a, 0x34, 0xf8, + 0x7a, 0x9c, 0xbb, 0x20, 0x7c, 0x7b, 0x3e, 0x37, 0x7f, 0x84, 0x67, 0x57, 0xa5, 0x05, 0xf4, 0xff, + 0x30, 0x74, 0x83, 0xb1, 0x47, 0xae, 0x85, 0xa6, 0x0a, 0x8e, 0x5b, 0x2e, 0x16, 0xb6, 0xaa, 0x41, + 0xee, 0x1e, 0x87, 0x73, 0x41, 0x70, 0x56, 0xd0, 0x7f, 0x1d, 0x19, 0x53, 0xde, 0x54, 0x72, 0x80, + 0xbe, 0x2b, 0xc1, 0x90, 0x9f, 0xcb, 0xc7, 0x31, 0x4d, 0x8f, 0xfb, 0x5f, 0x6e, 0x49, 0x48, 0xf1, + 0x46, 0xf6, 0x39, 0xa5, 0xf0, 0xcc, 0xf0, 0x2b, 0x09, 0x46, 0xc2, 0xa2, 0x82, 0x16, 0x8f, 0x14, + 0x25, 0x51, 0x7f, 0x7a, 0x4a, 0xf2, 0x50, 0x48, 0x52, 0xcd, 0x2e, 0xa8, 0x7b, 0xc5, 0x67, 0x4b, + 0x42, 0xca, 0xb4, 0xe0, 0x4b, 0xe3, 0xd5, 0xa2, 0xfb, 0x4b, 0xc5, 0x7e, 0x51, 0xd0, 0x4f, 0x24, + 0x98, 0xdd, 0x21, 0xbc, 0xd2, 0xf0, 0x8a, 0x6e, 0xbb, 0x48, 0x6d, 0x99, 0x22, 0xf0, 0xbe, 0x3a, + 0x95, 0x2e, 0x08, 0x95, 0x16, 0x8b, 0x6f, 0xa8, 0x7b, 0x45, 0xf2, 0xbc, 0x02, 0x4a, 0x0b, 0xe8, + 0x87, 0x12, 0x0c, 0x6d, 0xd0, 0x26, 0xe5, 0xb4, 0x33, 0xd2, 0x7a, 0xf1, 0x7a, 0xf0, 0xb4, 0xf4, + 0x46, 0xf9, 0x75, 0x98, 0x04, 0x28, 0x59, 0xfa, 0x75, 0xda, 0x2a, 0xb9, 0xbc, 0x81, 0x06, 0xe0, + 0x34, 0x0c, 0xdd, 0xf2, 0x3e, 0x8b, 0x68, 0x02, 0xd2, 0x36, 0x25, 0x55, 0x18, 0x7c, 0x6c, 0xeb, + 0x9c, 0xfa, 0xc1, 0xb7, 0xf0, 0xbc, 0xc1, 0xf7, 0x67, 0x09, 0x46, 0xae, 0x52, 0x7e, 0xdb, 0xa5, + 0x76, 0xeb, 0xab, 0x0c, 0xbf, 0xcf, 0xa4, 0xa7, 0xa5, 0xbb, 0xb9, 0x6d, 0x98, 0xeb, 0x36, 0xd4, + 0xb7, 0x19, 0xf6, 0x39, 0xcc, 0x7f, 0x28, 0x95, 0x07, 0x84, 0x7e, 0x05, 0xf4, 0xe6, 0x51, 0xfa, + 0x7d, 0xe2, 0x31, 0x08, 0xb5, 0xfc, 0x6c, 0x10, 0x32, 0x57, 0x29, 0x0f, 0x7b, 0xb8, 0xcf, 0xfc, + 0x52, 0xff, 0x2d, 0x32, 0xc0, 0xcf, 0x1e, 0x1f, 0x35, 0xf7, 0x69, 0x5a, 0x68, 0xf0, 0x4f, 0x19, + 0xfd, 0x5d, 0x3e, 0x42, 0x87, 0xf6, 0x50, 0x12, 0x14, 0xdb, 0x6e, 0x17, 0x8c, 0x83, 0xe4, 0x59, + 0xa2, 0x33, 0xf5, 0xbc, 0x21, 0x74, 0x9c, 0xb9, 0xcf, 0x3a, 0x8c, 0x77, 0x8c, 0x67, 0xcc, 0xf0, + 0xdd, 0x4f, 0x7b, 0xe2, 0xc6, 0x7a, 0x5c, 0xef, 0x19, 0xbb, 0x13, 0xef, 0x70, 0x86, 0xee, 0xaa, + 0x48, 0x4f, 0x86, 0x9d, 0x2d, 0xac, 0xc7, 0xe0, 0xda, 0xe3, 0xb8, 0xa7, 0x9e, 0xce, 0xb3, 0xb8, + 0xc6, 0x5a, 0x2c, 0xfa, 0xb5, 0x0c, 0xe9, 0xcd, 0x4a, 0x83, 0xa1, 0x5e, 0xcf, 0xa8, 0x8e, 0x5b, + 0x2e, 0xf8, 0x57, 0x88, 0xb0, 0x38, 0x3c, 0x37, 0x64, 0xee, 0x6f, 0xa9, 0xa7, 0xa5, 0x6f, 0xa5, + 0x60, 0x9c, 0x56, 0x1a, 0x0c, 0x3b, 0xfe, 0x68, 0x05, 0x23, 0x62, 0x65, 0x5b, 0x15, 0x34, 0x7d, + 0xc7, 0x35, 0x0c, 0x62, 0xb7, 0x56, 0xf1, 0x66, 0xb0, 0x95, 0xcd, 0x6c, 0x50, 0xa7, 0x62, 0xeb, + 0xe2, 0xb7, 0x0f, 0xb1, 0x9b, 0xdb, 0x00, 0x14, 0x4f, 0x5b, 0x21, 0x6d, 0x9f, 0xc9, 0xfa, 0xfe, + 0x65, 0x90, 0xdf, 0x5a, 0x5c, 0x46, 0x17, 0xe1, 0x82, 0x46, 0xb9, 0x6b, 0x9b, 0xb4, 0x8a, 0x1f, + 0x37, 0xa8, 0x89, 0x79, 0x83, 0x62, 0x9b, 0x3a, 0xcc, 0xb5, 0x2b, 0x14, 0xeb, 0x0e, 0xe6, 0xd4, + 0xb0, 0x98, 0x4d, 0x6c, 0xbd, 0xd9, 0xc2, 0xae, 0x49, 0xf6, 0x88, 0xde, 0x24, 0xe5, 0x26, 0x2d, + 0xbc, 0xff, 0x0e, 0xc8, 0x2b, 0x8b, 0x2b, 0x68, 0x05, 0x16, 0x9e, 0x41, 0xa0, 0xca, 0xa8, 0x83, + 0x4d, 0xc6, 0x31, 0x7d, 0xa2, 0x3b, 0xbc, 0x80, 0x86, 0x20, 0xfd, 0xe3, 0x94, 0x24, 0x8b, 0x24, + 0xfb, 0xe8, 0xe8, 0x32, 0xe1, 0x19, 0x46, 0xdd, 0xf7, 0x1d, 0x73, 0xff, 0x4c, 0x2e, 0x13, 0x6d, + 0x38, 0xde, 0xd9, 0xaa, 0xff, 0x24, 0x72, 0x1f, 0xa1, 0x8e, 0x23, 0xf4, 0x0b, 0x09, 0xc6, 0x37, + 0x28, 0xb5, 0xc4, 0x6b, 0xb3, 0xb7, 0xf1, 0xf5, 0x4c, 0x36, 0x97, 0x85, 0x6e, 0x97, 0x72, 0x2b, + 0x47, 0x96, 0xf8, 0xd8, 0xaf, 0x53, 0x05, 0xef, 0x5a, 0x22, 0xba, 0x50, 0x09, 0x60, 0x9b, 0xad, + 0xe9, 0x66, 0x55, 0x37, 0xeb, 0x0e, 0x3a, 0xd3, 0x51, 0xc1, 0x37, 0x82, 0x1f, 0xee, 0x7a, 0x16, + 0xf7, 0x01, 0x74, 0x0f, 0x86, 0xef, 0xea, 0x06, 0x65, 0x2e, 0x47, 0x3d, 0x80, 0x7a, 0x22, 0x9f, + 0x15, 0xe2, 0x9f, 0x44, 0x33, 0x51, 0x7b, 0xf2, 0x80, 0x58, 0x03, 0x32, 0x9b, 0xb6, 0xcd, 0x6c, + 0xaf, 0x7d, 0x6f, 0x50, 0x4e, 0xf4, 0xa6, 0xd3, 0x37, 0x83, 0xf3, 0x82, 0xc1, 0xcb, 0x68, 0x2e, + 0xe6, 0x30, 0x8f, 0xea, 0x63, 0x9d, 0x37, 0xaa, 0x01, 0xd5, 0xef, 0x49, 0x80, 0xae, 0x52, 0x9e, + 0xbc, 0xa3, 0x1d, 0x3d, 0x23, 0x24, 0x30, 0x7a, 0x8a, 0xf1, 0x9a, 0x10, 0xe3, 0x5c, 0xee, 0x4c, + 0x54, 0x0c, 0x4f, 0x82, 0x32, 0xab, 0xb6, 0xd4, 0x7d, 0x6f, 0x22, 0x10, 0x77, 0x39, 0xf4, 0x1d, + 0x09, 0xa6, 0x77, 0x98, 0xc3, 0x3d, 0x8a, 0x02, 0x55, 0x08, 0xf2, 0x7c, 0xd7, 0xc1, 0x9e, 0xdc, + 0x55, 0xc1, 0xfd, 0xf5, 0xdc, 0xf9, 0x28, 0x77, 0x8b, 0x39, 0xdc, 0x93, 0x40, 0xfc, 0x7e, 0xe0, + 0x8b, 0x11, 0x06, 0x45, 0xf6, 0x97, 0xd2, 0xd3, 0xd2, 0x17, 0x12, 0xaa, 0xf5, 0xb8, 0x9d, 0xe1, + 0x6a, 0xa4, 0x48, 0xe4, 0xf3, 0xf8, 0x71, 0x43, 0xaf, 0x34, 0xb0, 0xd3, 0x60, 0x6e, 0xb3, 0x2a, + 0xd2, 0xaf, 0x4c, 0xb1, 0xeb, 0xd0, 0x2a, 0xd6, 0x4d, 0x6c, 0x35, 0x49, 0x85, 0x62, 0x56, 0x13, + 0x89, 0x5a, 0x65, 0x15, 0xd7, 0xa0, 0xa6, 0xff, 0x73, 0x2a, 0xae, 0x30, 0xc3, 0x5b, 0x9c, 0xcb, + 0xde, 0x86, 0xf9, 0x6e, 0x93, 0x81, 0x97, 0x46, 0xe1, 0x7d, 0xb0, 0xdf, 0x97, 0xbe, 0x87, 0x70, + 0xa2, 0x42, 0x0c, 0xda, 0x5c, 0x27, 0x0e, 0x0d, 0x68, 0x78, 0x97, 0x17, 0xa4, 0xc1, 0xa0, 0xff, + 0x23, 0x48, 0xbf, 0x81, 0x74, 0x46, 0xd8, 0x70, 0x06, 0x4d, 0xc7, 0x02, 0xc9, 0x3b, 0x2a, 0x7e, + 0x0c, 0x73, 0x25, 0x93, 0xf1, 0x06, 0xb5, 0x03, 0x4e, 0x9e, 0xf3, 0x22, 0x49, 0xf5, 0x5e, 0x2c, + 0xc5, 0xfa, 0x65, 0x3c, 0xb0, 0xf6, 0xc5, 0xf0, 0xd3, 0xd2, 0xcf, 0x87, 0xd1, 0xef, 0x25, 0x98, + 0x29, 0xe1, 0x35, 0xff, 0xf9, 0x35, 0x52, 0x02, 0x3e, 0x84, 0x13, 0x75, 0x6d, 0x67, 0x3d, 0x7f, + 0xd5, 0x57, 0x1d, 0x5b, 0x36, 0x7b, 0x48, 0x2b, 0xbc, 0x5f, 0x93, 0x65, 0x33, 0x26, 0x33, 0xe9, + 0x7f, 0x07, 0xaa, 0x79, 0xd0, 0x0b, 0x1f, 0xc3, 0x89, 0xb5, 0x3b, 0x1b, 0x78, 0x39, 0xbf, 0xde, + 0x24, 0xae, 0x43, 0xf1, 0x0d, 0xbd, 0x42, 0x4d, 0x87, 0xa2, 0x2b, 0xfd, 0x51, 0x56, 0xcb, 0x4d, + 0x56, 0x56, 0x0d, 0xe2, 0x70, 0x6a, 0xab, 0x37, 0xb6, 0xd6, 0x37, 0xb7, 0xef, 0x6c, 0x16, 0xf8, + 0x13, 0x5e, 0x94, 0x97, 0x0a, 0x8b, 0x0b, 0xb2, 0x94, 0x4a, 0x17, 0x33, 0xc4, 0xf2, 0x1f, 0x8d, + 0x75, 0x66, 0xaa, 0x0f, 0x1d, 0x66, 0x16, 0x4f, 0x45, 0x77, 0x9e, 0xe4, 0x6b, 0x8c, 0xe5, 0x0d, + 0xdd, 0xa0, 0xab, 0x1d, 0x90, 0xab, 0x3d, 0x20, 0xb5, 0x1d, 0xaf, 0x63, 0x2c, 0xa3, 0x2d, 0xb8, + 0xda, 0xd9, 0x31, 0x5c, 0x87, 0xda, 0x87, 0xdd, 0xa2, 0x41, 0xf6, 0x28, 0xb6, 0xa8, 0x6d, 0xe8, + 0x8e, 0xe3, 0x05, 0x26, 0x67, 0x98, 0x54, 0x2a, 0xd4, 0x71, 0x62, 0xdd, 0xa5, 0xa0, 0xbd, 0x40, + 0x0f, 0x1a, 0xd6, 0xae, 0x81, 0xbc, 0xb2, 0x74, 0x11, 0x95, 0x60, 0x62, 0xeb, 0x35, 0x03, 0x13, + 0xcc, 0x29, 0xb1, 0x18, 0x2f, 0xa0, 0x45, 0x28, 0x64, 0xfb, 0x7a, 0x7c, 0xbb, 0xff, 0xfd, 0x14, + 0x4c, 0xc1, 0xe8, 0x1a, 0x71, 0xf4, 0x8a, 0x98, 0xff, 0x53, 0x23, 0x12, 0xbc, 0x14, 0xbb, 0x11, + 0x4c, 0x8d, 0xa4, 0xb2, 0xa3, 0x1f, 0xe6, 0x4b, 0x3b, 0x5b, 0xf9, 0xeb, 0xb4, 0x85, 0x53, 0xf0, + 0xa5, 0xd4, 0xbe, 0x21, 0xfc, 0x46, 0x1a, 0x91, 0x95, 0x74, 0xf1, 0x95, 0xd0, 0x87, 0x11, 0x87, + 0xab, 0x8c, 0xb8, 0xbc, 0xa1, 0x7a, 0x7f, 0x98, 0xad, 0xff, 0x1f, 0x5d, 0x9d, 0xef, 0x0d, 0xc4, + 0xd9, 0x23, 0x6a, 0xae, 0x7d, 0x13, 0xb2, 0xfe, 0x85, 0x03, 0xa1, 0xab, 0x36, 0x31, 0xb9, 0x83, + 0xbd, 0x45, 0x60, 0x3d, 0x98, 0x0b, 0xae, 0x21, 0x68, 0x26, 0x38, 0x14, 0xab, 0xf0, 0x74, 0x1d, + 0x06, 0x49, 0xd5, 0xd0, 0x4d, 0xb4, 0x1a, 0x43, 0x35, 0xab, 0x31, 0x30, 0xe1, 0x0c, 0x0f, 0x4c, + 0x77, 0xb8, 0xd7, 0x89, 0xf6, 0x28, 0xd6, 0xcd, 0x1a, 0xb3, 0x0d, 0xe1, 0xef, 0xf2, 0x3c, 0x4c, + 0x44, 0x4d, 0x31, 0x90, 0xbc, 0x1a, 0x95, 0x5f, 0xef, 0x79, 0x39, 0x4a, 0x82, 0xda, 0x5b, 0x70, + 0xfa, 0xe6, 0x61, 0xf5, 0x89, 0xe6, 0x54, 0xbf, 0xb9, 0x74, 0x7f, 0xb4, 0xed, 0xb9, 0xf2, 0x90, + 0xc8, 0xe7, 0xe5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x9b, 0x2b, 0x68, 0xc5, 0x23, 0x00, + 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index e07b09789d5..ffa464680f8 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -144,6 +144,7 @@ message ABitOfEverything { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more about ABitOfEverything"; } + example: { value: '{ "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" }' } }; // Nested is nested type. diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 7ca5c86992c..1ca1a155d56 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1429,6 +1429,9 @@ }, "examplepbABitOfEverything": { "type": "object", + "example": { + "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + }, "properties": { "single_nested": { "$ref": "#/definitions/ABitOfEverythingNested" From 2e215aa734bd713484d8ab746488afa54f4ff8fd Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 11:29:28 +0100 Subject: [PATCH 0089/1518] protoc-gen-swagger/genswagger: add tests for message definitions Signed-off-by: Stephan Renatus --- .../genswagger/template_test.go | 153 ++++++++++++++++++ 1 file changed, 153 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 359a1b92dce..c63ff1adb86 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1,6 +1,7 @@ package genswagger import ( + "encoding/json" "fmt" "reflect" "testing" @@ -8,8 +9,10 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { @@ -1020,6 +1023,156 @@ func TestSchemaOfField(t *testing.T) { } } +func TestRenderMessagesAsDefinition(t *testing.T) { + tests := []struct { + schema swagger_options.Schema + defs swaggerDefinitionsObject + }{ + { + schema: swagger_options.Schema{}, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{schemaCore: schemaCore{Type: "object"}}, + }, + }, + { + schema: swagger_options.Schema{ + Example: &any.Any{ + TypeUrl: "this_isnt_used", + Value: []byte(`{"foo":"bar"}`), + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{schemaCore: schemaCore{ + Type: "object", + Example: json.RawMessage(`{"foo":"bar"}`), + }}, + }, + }, + { + schema: swagger_options.Schema{ + Example: &any.Any{ + Value: []byte(`XXXX anything goes XXXX`), + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{schemaCore: schemaCore{ + Type: "object", + Example: json.RawMessage(`XXXX anything goes XXXX`), + }}, + }, + }, + { + schema: swagger_options.Schema{ + ExternalDocs: &swagger_options.ExternalDocumentation{ + Description: "glorious docs", + Url: "https://nada", + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + ExternalDocs: &swaggerExternalDocumentationObject{ + Description: "glorious docs", + URL: "https://nada", + }, + }, + }, + }, + { // JSONSchema options + schema: swagger_options.Schema{ + JsonSchema: &swagger_options.JSONSchema{ + Title: "title", + Description: "desc", + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + MaxItems: 20, + MinItems: 2, + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + MaxItems: 20, + MinItems: 2, + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + }, + }, + }, + } + + for _, test := range tests { + + d := &protodescriptor.DescriptorProto{ + Name: proto.String("Message"), + Options: &protodescriptor.MessageOptions{}, + } + err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &test.schema) + if err != nil { + t.Fatalf("SetExtension returned error: %v", err) + } + + reg := descriptor.NewRegistry() + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: []*protodescriptor.DescriptorProto{d}, + EnumType: []*protodescriptor.EnumDescriptorProto{}, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + Messages: []*descriptor.Message{&descriptor.Message{DescriptorProto: d}}, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + msg, err := reg.LookupMsg("", ".example.Message") + if err != nil { + t.Fatalf("lookup message: %v", err) + } + + refs := make(refMap) + actual := make(swaggerDefinitionsObject) + msgMap := map[string]*descriptor.Message{ + msg.FQMN(): msg, + } + renderMessagesAsDefinition(msgMap, actual, reg, refs) + + if !reflect.DeepEqual(actual, test.defs) { + t.Errorf("Expected renderMessagesAsDefinition() to add defs %v, not %v", test.defs, actual) + } + } +} + func fileFixtureServices(services []string) *descriptor.File { var ( svcdesc = []*protodescriptor.ServiceDescriptorProto{} From 97724519082d03c3200a62d8b622456c133eb423 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 11:30:37 +0100 Subject: [PATCH 0090/1518] protoc-gen-swagger/genswagger: simplify skipRenderingRef Signed-off-by: Stephan Renatus --- protoc-gen-swagger/genswagger/template.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index d7650d57494..5c869e0f31d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -211,10 +211,8 @@ func findNestedMessagesAndEnumerations(message *descriptor.Message, reg *descrip } func skipRenderingRef(refName string) bool { - if _, ok := wktSchemas[refName]; ok { - return true - } - return false + _, ok := wktSchemas[refName] + return ok } func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry, customRefs refMap) { From cb479e9a8793abeda4fc3c94a4669f2dee82d079 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 12:34:38 +0100 Subject: [PATCH 0091/1518] template_test: make test loop fit into the scheme used for other tests Originally, I wanted this to become a test for nested messages; but I didn't make it that far. Anyhow, I think this way of testing this is better than what I had in this PR before. Signed-off-by: Stephan Renatus --- .../genswagger/template_test.go | 179 +++++++++++------- 1 file changed, 109 insertions(+), 70 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index c63ff1adb86..b653ce51ce9 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1024,21 +1024,34 @@ func TestSchemaOfField(t *testing.T) { } func TestRenderMessagesAsDefinition(t *testing.T) { + tests := []struct { - schema swagger_options.Schema - defs swaggerDefinitionsObject + descr string + msgDescs []*protodescriptor.DescriptorProto + schema map[string]swagger_options.Schema // per-message schema to add + defs swaggerDefinitionsObject }{ { - schema: swagger_options.Schema{}, + descr: "no swagger options", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{}, defs: map[string]swaggerSchemaObject{ "Message": swaggerSchemaObject{schemaCore: schemaCore{Type: "object"}}, }, }, { - schema: swagger_options.Schema{ - Example: &any.Any{ - TypeUrl: "this_isnt_used", - Value: []byte(`{"foo":"bar"}`), + descr: "example option", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + Example: &any.Any{ + TypeUrl: "this_isnt_used", + Value: []byte(`{"foo":"bar"}`), + }, }, }, defs: map[string]swaggerSchemaObject{ @@ -1049,9 +1062,15 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, { - schema: swagger_options.Schema{ - Example: &any.Any{ - Value: []byte(`XXXX anything goes XXXX`), + descr: "example option with something non-json", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + Example: &any.Any{ + Value: []byte(`XXXX anything goes XXXX`), + }, }, }, defs: map[string]swaggerSchemaObject{ @@ -1062,10 +1081,16 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, { - schema: swagger_options.Schema{ - ExternalDocs: &swagger_options.ExternalDocumentation{ - Description: "glorious docs", - Url: "https://nada", + descr: "external docs option", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + ExternalDocs: &swagger_options.ExternalDocumentation{ + Description: "glorious docs", + Url: "https://nada", + }, }, }, defs: map[string]swaggerSchemaObject{ @@ -1080,25 +1105,31 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - { // JSONSchema options - schema: swagger_options.Schema{ - JsonSchema: &swagger_options.JSONSchema{ - Title: "title", - Description: "desc", - MultipleOf: 100, - Maximum: 101, - ExclusiveMaximum: true, - Minimum: 1, - ExclusiveMinimum: true, - MaxLength: 10, - MinLength: 3, - Pattern: "[a-z]+", - MaxItems: 20, - MinItems: 2, - UniqueItems: true, - MaxProperties: 33, - MinProperties: 22, - Required: []string{"req"}, + { + descr: "JSONSchema options", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + JsonSchema: &swagger_options.JSONSchema{ + Title: "title", + Description: "desc", + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + MaxItems: 20, + MinItems: 2, + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + }, }, }, defs: map[string]swaggerSchemaObject{ @@ -1128,48 +1159,56 @@ func TestRenderMessagesAsDefinition(t *testing.T) { } for _, test := range tests { + t.Run(test.descr, func(t *testing.T) { - d := &protodescriptor.DescriptorProto{ - Name: proto.String("Message"), - Options: &protodescriptor.MessageOptions{}, - } - err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &test.schema) - if err != nil { - t.Fatalf("SetExtension returned error: %v", err) - } + msgs := []*descriptor.Message{} + for _, msgdesc := range test.msgDescs { + msgdesc.Options = &protodescriptor.MessageOptions{} + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } - reg := descriptor.NewRegistry() - file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, - Name: proto.String("example.proto"), - Package: proto.String("example"), - Dependency: []string{}, - MessageType: []*protodescriptor.DescriptorProto{d}, - EnumType: []*protodescriptor.EnumDescriptorProto{}, - Service: []*protodescriptor.ServiceDescriptorProto{}, - }, - Messages: []*descriptor.Message{&descriptor.Message{DescriptorProto: d}}, - } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, - }) + reg := descriptor.NewRegistry() + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.msgDescs, + EnumType: []*protodescriptor.EnumDescriptorProto{}, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) - msg, err := reg.LookupMsg("", ".example.Message") - if err != nil { - t.Fatalf("lookup message: %v", err) - } + msgMap := map[string]*descriptor.Message{} + for _, d := range test.msgDescs { + name := d.GetName() + msg, err := reg.LookupMsg("example", name) + if err != nil { + t.Fatalf("lookup message %v: %v", name, err) + } + msgMap[msg.FQMN()] = msg - refs := make(refMap) - actual := make(swaggerDefinitionsObject) - msgMap := map[string]*descriptor.Message{ - msg.FQMN(): msg, - } - renderMessagesAsDefinition(msgMap, actual, reg, refs) + if schema, ok := test.schema[name]; ok { + err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) + if err != nil { + t.Fatalf("SetExtension(%s, ...) returned error: %v", msg, err) + } + } + } - if !reflect.DeepEqual(actual, test.defs) { - t.Errorf("Expected renderMessagesAsDefinition() to add defs %v, not %v", test.defs, actual) - } + refs := make(refMap) + actual := make(swaggerDefinitionsObject) + renderMessagesAsDefinition(msgMap, actual, reg, refs) + + if !reflect.DeepEqual(actual, test.defs) { + t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) + } + }) } } From 9151caa8444bb3c936c527e0c6baf95e612b59e2 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 12:38:25 +0100 Subject: [PATCH 0092/1518] examples/a_bit_of_everything: add nested msg example Signed-off-by: Stephan Renatus --- .../proto/examplepb/a_bit_of_everything.pb.go | 391 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 3 + .../a_bit_of_everything.swagger.json | 3 + 3 files changed, 202 insertions(+), 195 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 41f237ae881..3b5727f2db2 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -129,7 +129,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -467,7 +467,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{0, 0} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -536,7 +536,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{1} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -679,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{2} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -718,7 +718,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{3} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -765,7 +765,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_2003bb04c40c37e3, []int{4} + return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1529,194 +1529,195 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_2003bb04c40c37e3) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_11870f281dcdb894) } -var fileDescriptor_a_bit_of_everything_2003bb04c40c37e3 = []byte{ - // 2945 bytes of a gzipped FileDescriptorProto +var fileDescriptor_a_bit_of_everything_11870f281dcdb894 = []byte{ + // 2964 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, - 0xdd, 0x5a, 0x2e, 0xf5, 0xfa, 0xe9, 0x45, 0x8d, 0xfc, 0x90, 0x69, 0x25, 0x1a, 0x33, 0xce, 0x97, - 0x8d, 0x12, 0x72, 0x25, 0x4a, 0x71, 0x6c, 0x05, 0x89, 0x3f, 0xea, 0x61, 0x5b, 0xb1, 0x2d, 0xcb, - 0x6b, 0xc7, 0x5f, 0xe0, 0xcf, 0x89, 0x30, 0x24, 0x87, 0xe4, 0xda, 0xdc, 0x9d, 0xcd, 0xee, 0xac, - 0x6c, 0x7e, 0xfa, 0xd4, 0xa6, 0x2d, 0xd0, 0xa2, 0xcd, 0xa1, 0x80, 0xd3, 0x53, 0x51, 0xf4, 0xdc, - 0x43, 0xaf, 0x3d, 0xe5, 0xd0, 0x5e, 0x7a, 0xea, 0xad, 0x2d, 0x02, 0x14, 0x05, 0x7a, 0x69, 0x0b, - 0xf4, 0x2f, 0x68, 0x51, 0xb4, 0x87, 0x62, 0x67, 0x77, 0xa9, 0xdd, 0x25, 0x69, 0x99, 0x72, 0x90, - 0x8b, 0xb4, 0x33, 0xf3, 0x7b, 0xbf, 0x67, 0x08, 0x45, 0xfa, 0x84, 0x18, 0x56, 0x93, 0x3a, 0xaa, - 0x65, 0x33, 0xce, 0xd4, 0x60, 0x69, 0x95, 0x55, 0xb2, 0x5b, 0xd6, 0xf9, 0x2e, 0xab, 0xed, 0xd2, - 0x3d, 0x6a, 0xb7, 0x78, 0x43, 0x37, 0xeb, 0x05, 0x01, 0x83, 0xe6, 0xeb, 0xb6, 0x55, 0x29, 0xd4, - 0x09, 0xa7, 0x8f, 0x49, 0xab, 0x10, 0x12, 0x28, 0xb4, 0x51, 0xb3, 0x73, 0x75, 0xc6, 0xea, 0x4d, - 0xaa, 0x12, 0x4b, 0x57, 0x89, 0x69, 0x32, 0x4e, 0xb8, 0xce, 0x4c, 0xc7, 0x47, 0xcf, 0xe2, 0xe0, - 0x54, 0xac, 0xca, 0x6e, 0x4d, 0xad, 0xe9, 0xb4, 0x59, 0xdd, 0x35, 0x88, 0xf3, 0x28, 0x80, 0x38, - 0x9b, 0x84, 0xa0, 0x86, 0xc5, 0x5b, 0xc1, 0xe1, 0xcb, 0xc9, 0xc3, 0xaa, 0x6b, 0x0b, 0xfa, 0xc1, - 0xf9, 0x6b, 0x09, 0x8d, 0x2c, 0xc2, 0x1b, 0xd4, 0x74, 0x0d, 0xf1, 0xb1, 0xeb, 0x7d, 0x85, 0x72, - 0x24, 0x00, 0x1d, 0xb7, 0xac, 0x1a, 0xd4, 0x71, 0x48, 0x9d, 0x06, 0x10, 0xe7, 0x3a, 0x21, 0x8a, - 0x09, 0x90, 0xf9, 0xa4, 0x34, 0x5c, 0x37, 0xa8, 0xc3, 0x89, 0x61, 0x05, 0x00, 0x6f, 0x8a, 0x7f, - 0x95, 0x7c, 0x9d, 0x9a, 0x79, 0xe7, 0x31, 0xa9, 0xd7, 0xa9, 0xad, 0x32, 0x4b, 0xd8, 0xa3, 0xd3, - 0x36, 0xb9, 0x7f, 0xcf, 0x40, 0xa6, 0xb4, 0xa6, 0xf3, 0x5b, 0xb5, 0xcd, 0xb6, 0xd5, 0xd1, 0x47, - 0x30, 0xe1, 0xe8, 0x66, 0xbd, 0x49, 0x77, 0x4d, 0xea, 0x70, 0x5a, 0x9d, 0x3d, 0x83, 0x25, 0x65, - 0xac, 0x78, 0xb1, 0x70, 0x84, 0x1f, 0x0a, 0x49, 0x4a, 0x85, 0x6d, 0x81, 0xaf, 0x8d, 0xfb, 0xe4, - 0xfc, 0x15, 0x6a, 0x40, 0xda, 0x75, 0xf5, 0xea, 0xac, 0x84, 0x25, 0x65, 0x74, 0xed, 0xee, 0xd3, - 0xd2, 0xed, 0x4f, 0x25, 0xe9, 0x07, 0xd2, 0xf5, 0xff, 0x25, 0xf9, 0x5a, 0x29, 0x7f, 0x65, 0x31, - 0x7f, 0xe9, 0xa3, 0xfd, 0x8b, 0x07, 0xf9, 0xe8, 0x72, 0xa5, 0x9f, 0xe5, 0x52, 0xf1, 0x40, 0x13, - 0x1c, 0xd0, 0x0e, 0x0c, 0x05, 0x1a, 0xa4, 0xb0, 0xfc, 0x42, 0x1a, 0x04, 0x74, 0xd0, 0x3c, 0x8c, - 0xd5, 0x9a, 0x8c, 0xf0, 0xdd, 0x3d, 0xd2, 0x74, 0xe9, 0xac, 0x8c, 0x25, 0x25, 0xa5, 0x81, 0xd8, - 0xba, 0xe7, 0xed, 0xa0, 0x73, 0x30, 0x5e, 0x65, 0x6e, 0xb9, 0x49, 0x03, 0x88, 0x34, 0x96, 0x14, - 0x49, 0x1b, 0xf3, 0xf7, 0x7c, 0x90, 0x79, 0x18, 0xd3, 0x4d, 0x7e, 0x61, 0x25, 0x80, 0x18, 0xc4, - 0x92, 0x22, 0x6b, 0x20, 0xb6, 0xda, 0x34, 0xdc, 0x28, 0xc4, 0x10, 0x96, 0x94, 0xb4, 0x36, 0xe6, - 0x46, 0x40, 0x7c, 0x1a, 0xcb, 0xc5, 0x00, 0x62, 0x18, 0x4b, 0xca, 0xa0, 0xa0, 0xb1, 0x5c, 0xf4, - 0x01, 0x5e, 0x81, 0x89, 0x9a, 0xfe, 0x84, 0x56, 0xdb, 0x44, 0x46, 0xb0, 0xa4, 0x0c, 0x69, 0xe3, - 0xc1, 0x66, 0x1c, 0xa8, 0x4d, 0x67, 0x14, 0x4b, 0xca, 0x70, 0x00, 0x14, 0x52, 0x7a, 0x09, 0xa0, - 0xcc, 0x58, 0x33, 0x80, 0x00, 0x2c, 0x29, 0x23, 0xda, 0xa8, 0xb7, 0xd3, 0x16, 0xd6, 0xe1, 0xb6, - 0x6e, 0xd6, 0x03, 0x80, 0x31, 0xcf, 0xab, 0xda, 0x98, 0xbf, 0xd7, 0x16, 0xb6, 0xdc, 0xe2, 0xd4, - 0x09, 0x20, 0x5e, 0xc2, 0x92, 0x32, 0xae, 0x81, 0xd8, 0x8a, 0x29, 0xdc, 0x16, 0x63, 0x02, 0x4b, - 0xca, 0x84, 0xaf, 0x70, 0x28, 0xc5, 0x75, 0x00, 0x2f, 0x95, 0x02, 0x80, 0x49, 0x2c, 0x29, 0x93, - 0xc5, 0x37, 0x8f, 0x74, 0xe7, 0xb6, 0x6b, 0x50, 0x5b, 0xaf, 0x6c, 0x9a, 0xae, 0xa1, 0x8d, 0x7a, - 0xf8, 0x3e, 0xb1, 0x1d, 0x98, 0x6a, 0x27, 0x67, 0x40, 0xf1, 0x65, 0x41, 0x51, 0xe9, 0x41, 0x31, - 0xcc, 0xe9, 0xc2, 0x0e, 0xe1, 0x0d, 0x41, 0x6d, 0xc2, 0x0a, 0xbe, 0x7c, 0x8a, 0x0e, 0x9c, 0xf2, - 0x23, 0x64, 0x37, 0x49, 0x78, 0x5e, 0x10, 0x7e, 0xef, 0x28, 0xc2, 0x37, 0xfd, 0x2c, 0x0f, 0xe9, - 0x07, 0x71, 0xd7, 0x66, 0x37, 0x63, 0xc6, 0xd6, 0x3e, 0xd3, 0x57, 0x61, 0xd2, 0x89, 0xfb, 0x6f, - 0x0a, 0x4b, 0xca, 0x94, 0x36, 0xe1, 0xc4, 0x1c, 0xd8, 0x06, 0x6b, 0xc7, 0x42, 0x06, 0x4b, 0x4a, - 0x26, 0x04, 0x8b, 0x44, 0x9d, 0x13, 0x75, 0xc2, 0x34, 0x96, 0x94, 0x69, 0x6d, 0xcc, 0x89, 0x38, - 0x21, 0x00, 0x69, 0xd3, 0x41, 0x58, 0x52, 0x90, 0x0f, 0x12, 0x52, 0x29, 0xc2, 0x49, 0x9b, 0x5a, - 0x94, 0x78, 0xa6, 0x88, 0xc5, 0xc5, 0x0c, 0x96, 0x95, 0x51, 0x6d, 0x26, 0x3c, 0xbc, 0x13, 0x89, - 0x8f, 0x4b, 0x30, 0xc6, 0x4c, 0xea, 0x55, 0x7e, 0xaf, 0xec, 0xce, 0x9e, 0x10, 0xd5, 0xe6, 0x54, - 0xc1, 0xaf, 0x74, 0x85, 0xb0, 0xd2, 0x15, 0x36, 0xbd, 0xd3, 0x6b, 0x03, 0x1a, 0x08, 0x60, 0xb1, - 0x42, 0xaf, 0xc0, 0xb8, 0x8f, 0xea, 0xf3, 0x9a, 0x3d, 0xe9, 0x45, 0xdf, 0xb5, 0x01, 0xcd, 0x27, - 0xe8, 0x33, 0x41, 0x0f, 0x60, 0xd4, 0x20, 0x56, 0x20, 0xc7, 0x29, 0x51, 0x09, 0x2e, 0xf7, 0x5f, - 0x09, 0x6e, 0x12, 0x4b, 0x88, 0xbb, 0x69, 0x72, 0xbb, 0xa5, 0x8d, 0x18, 0xc1, 0x12, 0x3d, 0x81, - 0x19, 0x83, 0x58, 0x56, 0x52, 0xdf, 0xd3, 0x82, 0xcf, 0xb5, 0x63, 0xf1, 0xb1, 0x62, 0xf6, 0xf1, - 0x19, 0x4e, 0x1b, 0xc9, 0xfd, 0x08, 0xe7, 0x20, 0xf6, 0x7c, 0xce, 0xb3, 0x2f, 0xc6, 0xd9, 0x8f, - 0xbc, 0x4e, 0xce, 0x91, 0x7d, 0xb4, 0x0a, 0xb3, 0x26, 0x33, 0xd7, 0x99, 0xb9, 0x47, 0x4d, 0xaf, - 0x9d, 0x90, 0xe6, 0x36, 0x31, 0xfc, 0xf2, 0x36, 0x9b, 0x15, 0x05, 0xa0, 0xe7, 0x39, 0x5a, 0x87, - 0xa9, 0x76, 0xcf, 0x0a, 0x24, 0x3e, 0x2b, 0x3c, 0x9e, 0xed, 0xf0, 0xf8, 0xdd, 0x10, 0x4e, 0x9b, - 0x6c, 0xa3, 0xf8, 0x44, 0x1e, 0x40, 0x3b, 0x92, 0xa2, 0xc9, 0x36, 0x87, 0xe5, 0xbe, 0xeb, 0xc2, - 0x74, 0x48, 0xa8, 0x9d, 0x58, 0xd9, 0x9f, 0x49, 0x30, 0x14, 0x34, 0x2b, 0x04, 0x69, 0x93, 0x18, - 0xd4, 0x6f, 0x56, 0x9a, 0xf8, 0x46, 0xa7, 0x60, 0x88, 0x18, 0xcc, 0x35, 0xf9, 0x6c, 0x4a, 0x14, - 0xaa, 0x60, 0x85, 0x6e, 0x43, 0x8a, 0x3d, 0x12, 0x3d, 0x61, 0xb2, 0x58, 0x3a, 0x6e, 0xab, 0x29, - 0x6c, 0x50, 0x6a, 0x09, 0xc1, 0x52, 0xec, 0x51, 0x6e, 0x1e, 0x46, 0xc2, 0x35, 0x1a, 0x85, 0xc1, - 0x2b, 0xa5, 0x1b, 0x77, 0x36, 0x33, 0x03, 0x68, 0x04, 0xd2, 0x77, 0xb5, 0x0f, 0x36, 0x33, 0x52, - 0x56, 0x87, 0x89, 0x58, 0x60, 0xa2, 0x0c, 0xc8, 0x8f, 0x68, 0x2b, 0x90, 0xd7, 0xfb, 0x44, 0x6b, - 0x30, 0xe8, 0x5b, 0x27, 0x75, 0x8c, 0xaa, 0xe9, 0xa3, 0xae, 0xa6, 0x2e, 0x4a, 0xd9, 0x0d, 0x38, - 0xd5, 0x3d, 0x36, 0xbb, 0xf0, 0x3c, 0x11, 0xe5, 0x39, 0x1a, 0xa5, 0xf2, 0x8d, 0x90, 0x4a, 0x32, - 0xce, 0xba, 0x50, 0xd9, 0x8e, 0x52, 0x79, 0x91, 0xf6, 0x7d, 0xc8, 0x7f, 0xf5, 0x5f, 0xd2, 0xd3, - 0xd2, 0x3f, 0x24, 0xa8, 0x2f, 0xcc, 0x94, 0x70, 0x59, 0xe7, 0x98, 0xd5, 0xf0, 0xe1, 0xc0, 0x59, - 0xdc, 0xda, 0x32, 0x79, 0x18, 0xb2, 0x2d, 0x5c, 0x61, 0x86, 0xd5, 0xd4, 0x2b, 0x5e, 0x70, 0xe0, - 0x60, 0x0c, 0xc3, 0xbc, 0x65, 0x51, 0xcc, 0x19, 0xae, 0xb0, 0x3d, 0x6a, 0x63, 0x83, 0x98, 0x2d, - 0x5c, 0xa3, 0x84, 0xbb, 0x36, 0x75, 0x3c, 0x5a, 0x3b, 0x61, 0xec, 0xfe, 0x56, 0x12, 0x33, 0xc8, - 0xc2, 0x3d, 0x38, 0x7f, 0x45, 0x37, 0xab, 0x98, 0xb9, 0x1c, 0x1b, 0xcc, 0xa6, 0x98, 0x94, 0xbd, - 0xcf, 0x8e, 0xa1, 0xab, 0xd0, 0xe0, 0xdc, 0x72, 0x56, 0x55, 0xb5, 0xae, 0xf3, 0x86, 0x5b, 0x2e, - 0x54, 0x98, 0xa1, 0x7a, 0xea, 0xe6, 0x69, 0x85, 0x39, 0x2d, 0x87, 0xd3, 0x60, 0x19, 0x68, 0x5f, - 0x5c, 0x41, 0xc5, 0x7d, 0x9c, 0xf3, 0x58, 0xe4, 0x56, 0x71, 0x6e, 0xb1, 0x52, 0x5b, 0xbe, 0xb0, - 0x44, 0x97, 0xf2, 0x2b, 0xe5, 0x95, 0x95, 0xfc, 0xca, 0xc5, 0xe5, 0x6a, 0x9e, 0x2c, 0xbd, 0x75, - 0x29, 0xff, 0xd6, 0x4a, 0x95, 0x94, 0xab, 0xb5, 0xb7, 0xe9, 0xc5, 0xa5, 0x95, 0x1c, 0x3e, 0x58, - 0x9b, 0x08, 0x4b, 0xad, 0x30, 0x48, 0xee, 0x47, 0x23, 0x30, 0x9b, 0x94, 0x44, 0x0b, 0xd2, 0x01, - 0x5d, 0x82, 0x33, 0xa2, 0x99, 0xb5, 0x13, 0x2d, 0x3a, 0xf9, 0x48, 0x58, 0x56, 0x52, 0xda, 0x29, - 0x0f, 0x20, 0x44, 0xb8, 0x72, 0x38, 0x05, 0xbd, 0x03, 0xd9, 0x38, 0x6a, 0x6c, 0x26, 0xf2, 0x86, - 0x31, 0x49, 0x3b, 0x1d, 0xc5, 0xdd, 0x88, 0xcc, 0x47, 0x1d, 0x7c, 0xa3, 0x2d, 0x47, 0xc6, 0xb2, - 0x22, 0xc7, 0xf9, 0x6e, 0x1d, 0x76, 0x9f, 0x0e, 0xbe, 0xb1, 0x39, 0x2a, 0x8d, 0x65, 0x25, 0x1d, - 0xe7, 0xfb, 0x41, 0xa4, 0x75, 0x75, 0xe3, 0xdb, 0xee, 0x86, 0x83, 0x58, 0x56, 0x06, 0x3b, 0xf8, - 0x86, 0x8d, 0xf1, 0x5d, 0x38, 0x9b, 0x30, 0x55, 0xac, 0xdf, 0x0e, 0x61, 0x59, 0x19, 0xd2, 0x66, - 0x63, 0xc6, 0x8a, 0xb6, 0xde, 0xee, 0xe8, 0x91, 0xe9, 0x4e, 0x56, 0x86, 0xbb, 0xa0, 0x87, 0xdc, - 0xdf, 0x86, 0xd9, 0x38, 0x7a, 0x64, 0x5e, 0x1b, 0xc1, 0xb2, 0x32, 0xa2, 0x9d, 0x8c, 0xe2, 0xae, - 0xb5, 0x67, 0xb7, 0x0e, 0x73, 0xc5, 0x3a, 0xd8, 0xa8, 0xe8, 0xd8, 0x31, 0x73, 0xc5, 0xbb, 0x76, - 0xc2, 0x5c, 0xd1, 0x19, 0x0f, 0xb0, 0xac, 0x8c, 0xc7, 0xcd, 0xb5, 0x76, 0x38, 0xef, 0x75, 0x75, - 0x53, 0x5b, 0xdd, 0x31, 0x2c, 0x2b, 0x13, 0x9d, 0x6e, 0x0a, 0xb5, 0xa5, 0x49, 0x6d, 0x23, 0xf5, - 0x7f, 0xfc, 0x18, 0xf5, 0x3f, 0x66, 0x9b, 0xc3, 0xe1, 0xea, 0x32, 0xcc, 0x25, 0x6c, 0x13, 0x77, - 0xca, 0x04, 0x96, 0x95, 0x29, 0xed, 0x4c, 0xcc, 0x3a, 0xb1, 0xb1, 0xab, 0x07, 0x81, 0x76, 0x50, - 0x4c, 0x62, 0x59, 0xc9, 0x74, 0x23, 0xd0, 0x33, 0x98, 0x63, 0xe3, 0xd9, 0x14, 0x96, 0x95, 0xe9, - 0x84, 0x77, 0x22, 0x56, 0xea, 0x8a, 0x1c, 0x19, 0x00, 0x65, 0x05, 0x75, 0x22, 0x07, 0x9c, 0x73, - 0x59, 0x48, 0xaf, 0xb1, 0x6a, 0xab, 0x5b, 0xf3, 0xcb, 0x3d, 0x80, 0xa9, 0x60, 0x56, 0xfd, 0x1f, - 0x9d, 0x37, 0x04, 0xd8, 0x24, 0xa4, 0xc2, 0xeb, 0x9c, 0x96, 0xd2, 0xbd, 0xc2, 0x91, 0xae, 0x12, - 0x4e, 0x82, 0xaa, 0xfd, 0xea, 0x91, 0xde, 0xf0, 0x88, 0x68, 0x02, 0x25, 0xf7, 0xb9, 0x04, 0x53, - 0x1f, 0x58, 0x55, 0xc2, 0xe9, 0xbd, 0xa2, 0x46, 0x3f, 0x71, 0xa9, 0xc3, 0xd1, 0x3a, 0xc8, 0xa4, - 0xec, 0x0b, 0x31, 0x56, 0x5c, 0xea, 0xbb, 0x07, 0x68, 0x1e, 0x36, 0x7a, 0x07, 0xc6, 0x5c, 0x41, - 0x57, 0xdc, 0xfb, 0x03, 0xd1, 0x3a, 0x27, 0x8e, 0x2b, 0x3a, 0x6d, 0x56, 0x6f, 0x12, 0xe7, 0x91, - 0x06, 0x3e, 0xb8, 0xf7, 0xbd, 0x80, 0x61, 0x2c, 0x12, 0x31, 0x5e, 0xf7, 0xbd, 0xbf, 0xa9, 0xdd, - 0xca, 0x0c, 0xa0, 0x61, 0x90, 0x6f, 0x6d, 0x6f, 0x66, 0xa4, 0xe2, 0x1f, 0xe6, 0xe0, 0x74, 0x92, - 0xf1, 0x1d, 0x6a, 0xef, 0xe9, 0x15, 0x8a, 0xbe, 0x94, 0x61, 0x68, 0xdd, 0xf6, 0x8c, 0x8c, 0xfa, - 0x97, 0x3e, 0xdb, 0x3f, 0x4a, 0xee, 0xaf, 0xa9, 0x6f, 0xff, 0xee, 0x2f, 0x9f, 0xa7, 0xfe, 0x94, - 0xca, 0xfd, 0x31, 0xa5, 0xee, 0x2d, 0x85, 0x6f, 0x2c, 0xdd, 0x5e, 0x58, 0xd4, 0xfd, 0x48, 0x51, - 0x3f, 0x50, 0xf7, 0xa3, 0x75, 0xfa, 0x40, 0xdd, 0x8f, 0xc4, 0xcc, 0x81, 0xea, 0x50, 0x8b, 0xd8, - 0x84, 0x33, 0x5b, 0xdd, 0x77, 0x63, 0x07, 0xfb, 0x91, 0xb8, 0x3c, 0x50, 0xf7, 0x63, 0x61, 0x1e, - 0xae, 0x23, 0xe7, 0x87, 0xd5, 0xe9, 0x40, 0xdd, 0x8f, 0x56, 0x9c, 0x77, 0x1d, 0x6e, 0x5b, 0x36, - 0xad, 0xe9, 0x4f, 0xd4, 0x85, 0x03, 0x9f, 0x49, 0x04, 0xcd, 0x49, 0xd2, 0x71, 0x92, 0x8c, 0x9c, - 0x04, 0x42, 0x5c, 0xc8, 0x5e, 0x03, 0xe9, 0x81, 0xba, 0x7f, 0x58, 0x41, 0x0e, 0xd4, 0xfd, 0xc4, - 0x05, 0xce, 0xc3, 0xec, 0x7a, 0xb3, 0x3b, 0x40, 0x3f, 0x95, 0x00, 0x7c, 0xc7, 0x8a, 0x34, 0xf8, - 0x7a, 0x9c, 0xbb, 0x20, 0x7c, 0x7b, 0x3e, 0x37, 0x7f, 0x84, 0x67, 0x57, 0xa5, 0x05, 0xf4, 0xff, - 0x30, 0x74, 0x83, 0xb1, 0x47, 0xae, 0x85, 0xa6, 0x0a, 0x8e, 0x5b, 0x2e, 0x16, 0xb6, 0xaa, 0x41, - 0xee, 0x1e, 0x87, 0x73, 0x41, 0x70, 0x56, 0xd0, 0x7f, 0x1d, 0x19, 0x53, 0xde, 0x54, 0x72, 0x80, - 0xbe, 0x2b, 0xc1, 0x90, 0x9f, 0xcb, 0xc7, 0x31, 0x4d, 0x8f, 0xfb, 0x5f, 0x6e, 0x49, 0x48, 0xf1, - 0x46, 0xf6, 0x39, 0xa5, 0xf0, 0xcc, 0xf0, 0x2b, 0x09, 0x46, 0xc2, 0xa2, 0x82, 0x16, 0x8f, 0x14, - 0x25, 0x51, 0x7f, 0x7a, 0x4a, 0xf2, 0x50, 0x48, 0x52, 0xcd, 0x2e, 0xa8, 0x7b, 0xc5, 0x67, 0x4b, - 0x42, 0xca, 0xb4, 0xe0, 0x4b, 0xe3, 0xd5, 0xa2, 0xfb, 0x4b, 0xc5, 0x7e, 0x51, 0xd0, 0x4f, 0x24, - 0x98, 0xdd, 0x21, 0xbc, 0xd2, 0xf0, 0x8a, 0x6e, 0xbb, 0x48, 0x6d, 0x99, 0x22, 0xf0, 0xbe, 0x3a, - 0x95, 0x2e, 0x08, 0x95, 0x16, 0x8b, 0x6f, 0xa8, 0x7b, 0x45, 0xf2, 0xbc, 0x02, 0x4a, 0x0b, 0xe8, - 0x87, 0x12, 0x0c, 0x6d, 0xd0, 0x26, 0xe5, 0xb4, 0x33, 0xd2, 0x7a, 0xf1, 0x7a, 0xf0, 0xb4, 0xf4, - 0x46, 0xf9, 0x75, 0x98, 0x04, 0x28, 0x59, 0xfa, 0x75, 0xda, 0x2a, 0xb9, 0xbc, 0x81, 0x06, 0xe0, - 0x34, 0x0c, 0xdd, 0xf2, 0x3e, 0x8b, 0x68, 0x02, 0xd2, 0x36, 0x25, 0x55, 0x18, 0x7c, 0x6c, 0xeb, - 0x9c, 0xfa, 0xc1, 0xb7, 0xf0, 0xbc, 0xc1, 0xf7, 0x67, 0x09, 0x46, 0xae, 0x52, 0x7e, 0xdb, 0xa5, - 0x76, 0xeb, 0xab, 0x0c, 0xbf, 0xcf, 0xa4, 0xa7, 0xa5, 0xbb, 0xb9, 0x6d, 0x98, 0xeb, 0x36, 0xd4, - 0xb7, 0x19, 0xf6, 0x39, 0xcc, 0x7f, 0x28, 0x95, 0x07, 0x84, 0x7e, 0x05, 0xf4, 0xe6, 0x51, 0xfa, - 0x7d, 0xe2, 0x31, 0x08, 0xb5, 0xfc, 0x6c, 0x10, 0x32, 0x57, 0x29, 0x0f, 0x7b, 0xb8, 0xcf, 0xfc, - 0x52, 0xff, 0x2d, 0x32, 0xc0, 0xcf, 0x1e, 0x1f, 0x35, 0xf7, 0x69, 0x5a, 0x68, 0xf0, 0x4f, 0x19, - 0xfd, 0x5d, 0x3e, 0x42, 0x87, 0xf6, 0x50, 0x12, 0x14, 0xdb, 0x6e, 0x17, 0x8c, 0x83, 0xe4, 0x59, - 0xa2, 0x33, 0xf5, 0xbc, 0x21, 0x74, 0x9c, 0xb9, 0xcf, 0x3a, 0x8c, 0x77, 0x8c, 0x67, 0xcc, 0xf0, - 0xdd, 0x4f, 0x7b, 0xe2, 0xc6, 0x7a, 0x5c, 0xef, 0x19, 0xbb, 0x13, 0xef, 0x70, 0x86, 0xee, 0xaa, - 0x48, 0x4f, 0x86, 0x9d, 0x2d, 0xac, 0xc7, 0xe0, 0xda, 0xe3, 0xb8, 0xa7, 0x9e, 0xce, 0xb3, 0xb8, - 0xc6, 0x5a, 0x2c, 0xfa, 0xb5, 0x0c, 0xe9, 0xcd, 0x4a, 0x83, 0xa1, 0x5e, 0xcf, 0xa8, 0x8e, 0x5b, - 0x2e, 0xf8, 0x57, 0x88, 0xb0, 0x38, 0x3c, 0x37, 0x64, 0xee, 0x6f, 0xa9, 0xa7, 0xa5, 0x6f, 0xa5, - 0x60, 0x9c, 0x56, 0x1a, 0x0c, 0x3b, 0xfe, 0x68, 0x05, 0x23, 0x62, 0x65, 0x5b, 0x15, 0x34, 0x7d, - 0xc7, 0x35, 0x0c, 0x62, 0xb7, 0x56, 0xf1, 0x66, 0xb0, 0x95, 0xcd, 0x6c, 0x50, 0xa7, 0x62, 0xeb, - 0xe2, 0xb7, 0x0f, 0xb1, 0x9b, 0xdb, 0x00, 0x14, 0x4f, 0x5b, 0x21, 0x6d, 0x9f, 0xc9, 0xfa, 0xfe, - 0x65, 0x90, 0xdf, 0x5a, 0x5c, 0x46, 0x17, 0xe1, 0x82, 0x46, 0xb9, 0x6b, 0x9b, 0xb4, 0x8a, 0x1f, - 0x37, 0xa8, 0x89, 0x79, 0x83, 0x62, 0x9b, 0x3a, 0xcc, 0xb5, 0x2b, 0x14, 0xeb, 0x0e, 0xe6, 0xd4, - 0xb0, 0x98, 0x4d, 0x6c, 0xbd, 0xd9, 0xc2, 0xae, 0x49, 0xf6, 0x88, 0xde, 0x24, 0xe5, 0x26, 0x2d, - 0xbc, 0xff, 0x0e, 0xc8, 0x2b, 0x8b, 0x2b, 0x68, 0x05, 0x16, 0x9e, 0x41, 0xa0, 0xca, 0xa8, 0x83, - 0x4d, 0xc6, 0x31, 0x7d, 0xa2, 0x3b, 0xbc, 0x80, 0x86, 0x20, 0xfd, 0xe3, 0x94, 0x24, 0x8b, 0x24, - 0xfb, 0xe8, 0xe8, 0x32, 0xe1, 0x19, 0x46, 0xdd, 0xf7, 0x1d, 0x73, 0xff, 0x4c, 0x2e, 0x13, 0x6d, - 0x38, 0xde, 0xd9, 0xaa, 0xff, 0x24, 0x72, 0x1f, 0xa1, 0x8e, 0x23, 0xf4, 0x0b, 0x09, 0xc6, 0x37, - 0x28, 0xb5, 0xc4, 0x6b, 0xb3, 0xb7, 0xf1, 0xf5, 0x4c, 0x36, 0x97, 0x85, 0x6e, 0x97, 0x72, 0x2b, - 0x47, 0x96, 0xf8, 0xd8, 0xaf, 0x53, 0x05, 0xef, 0x5a, 0x22, 0xba, 0x50, 0x09, 0x60, 0x9b, 0xad, - 0xe9, 0x66, 0x55, 0x37, 0xeb, 0x0e, 0x3a, 0xd3, 0x51, 0xc1, 0x37, 0x82, 0x1f, 0xee, 0x7a, 0x16, - 0xf7, 0x01, 0x74, 0x0f, 0x86, 0xef, 0xea, 0x06, 0x65, 0x2e, 0x47, 0x3d, 0x80, 0x7a, 0x22, 0x9f, - 0x15, 0xe2, 0x9f, 0x44, 0x33, 0x51, 0x7b, 0xf2, 0x80, 0x58, 0x03, 0x32, 0x9b, 0xb6, 0xcd, 0x6c, - 0xaf, 0x7d, 0x6f, 0x50, 0x4e, 0xf4, 0xa6, 0xd3, 0x37, 0x83, 0xf3, 0x82, 0xc1, 0xcb, 0x68, 0x2e, - 0xe6, 0x30, 0x8f, 0xea, 0x63, 0x9d, 0x37, 0xaa, 0x01, 0xd5, 0xef, 0x49, 0x80, 0xae, 0x52, 0x9e, - 0xbc, 0xa3, 0x1d, 0x3d, 0x23, 0x24, 0x30, 0x7a, 0x8a, 0xf1, 0x9a, 0x10, 0xe3, 0x5c, 0xee, 0x4c, - 0x54, 0x0c, 0x4f, 0x82, 0x32, 0xab, 0xb6, 0xd4, 0x7d, 0x6f, 0x22, 0x10, 0x77, 0x39, 0xf4, 0x1d, - 0x09, 0xa6, 0x77, 0x98, 0xc3, 0x3d, 0x8a, 0x02, 0x55, 0x08, 0xf2, 0x7c, 0xd7, 0xc1, 0x9e, 0xdc, - 0x55, 0xc1, 0xfd, 0xf5, 0xdc, 0xf9, 0x28, 0x77, 0x8b, 0x39, 0xdc, 0x93, 0x40, 0xfc, 0x7e, 0xe0, - 0x8b, 0x11, 0x06, 0x45, 0xf6, 0x97, 0xd2, 0xd3, 0xd2, 0x17, 0x12, 0xaa, 0xf5, 0xb8, 0x9d, 0xe1, - 0x6a, 0xa4, 0x48, 0xe4, 0xf3, 0xf8, 0x71, 0x43, 0xaf, 0x34, 0xb0, 0xd3, 0x60, 0x6e, 0xb3, 0x2a, - 0xd2, 0xaf, 0x4c, 0xb1, 0xeb, 0xd0, 0x2a, 0xd6, 0x4d, 0x6c, 0x35, 0x49, 0x85, 0x62, 0x56, 0x13, - 0x89, 0x5a, 0x65, 0x15, 0xd7, 0xa0, 0xa6, 0xff, 0x73, 0x2a, 0xae, 0x30, 0xc3, 0x5b, 0x9c, 0xcb, - 0xde, 0x86, 0xf9, 0x6e, 0x93, 0x81, 0x97, 0x46, 0xe1, 0x7d, 0xb0, 0xdf, 0x97, 0xbe, 0x87, 0x70, - 0xa2, 0x42, 0x0c, 0xda, 0x5c, 0x27, 0x0e, 0x0d, 0x68, 0x78, 0x97, 0x17, 0xa4, 0xc1, 0xa0, 0xff, - 0x23, 0x48, 0xbf, 0x81, 0x74, 0x46, 0xd8, 0x70, 0x06, 0x4d, 0xc7, 0x02, 0xc9, 0x3b, 0x2a, 0x7e, - 0x0c, 0x73, 0x25, 0x93, 0xf1, 0x06, 0xb5, 0x03, 0x4e, 0x9e, 0xf3, 0x22, 0x49, 0xf5, 0x5e, 0x2c, - 0xc5, 0xfa, 0x65, 0x3c, 0xb0, 0xf6, 0xc5, 0xf0, 0xd3, 0xd2, 0xcf, 0x87, 0xd1, 0xef, 0x25, 0x98, - 0x29, 0xe1, 0x35, 0xff, 0xf9, 0x35, 0x52, 0x02, 0x3e, 0x84, 0x13, 0x75, 0x6d, 0x67, 0x3d, 0x7f, - 0xd5, 0x57, 0x1d, 0x5b, 0x36, 0x7b, 0x48, 0x2b, 0xbc, 0x5f, 0x93, 0x65, 0x33, 0x26, 0x33, 0xe9, - 0x7f, 0x07, 0xaa, 0x79, 0xd0, 0x0b, 0x1f, 0xc3, 0x89, 0xb5, 0x3b, 0x1b, 0x78, 0x39, 0xbf, 0xde, - 0x24, 0xae, 0x43, 0xf1, 0x0d, 0xbd, 0x42, 0x4d, 0x87, 0xa2, 0x2b, 0xfd, 0x51, 0x56, 0xcb, 0x4d, - 0x56, 0x56, 0x0d, 0xe2, 0x70, 0x6a, 0xab, 0x37, 0xb6, 0xd6, 0x37, 0xb7, 0xef, 0x6c, 0x16, 0xf8, - 0x13, 0x5e, 0x94, 0x97, 0x0a, 0x8b, 0x0b, 0xb2, 0x94, 0x4a, 0x17, 0x33, 0xc4, 0xf2, 0x1f, 0x8d, - 0x75, 0x66, 0xaa, 0x0f, 0x1d, 0x66, 0x16, 0x4f, 0x45, 0x77, 0x9e, 0xe4, 0x6b, 0x8c, 0xe5, 0x0d, - 0xdd, 0xa0, 0xab, 0x1d, 0x90, 0xab, 0x3d, 0x20, 0xb5, 0x1d, 0xaf, 0x63, 0x2c, 0xa3, 0x2d, 0xb8, - 0xda, 0xd9, 0x31, 0x5c, 0x87, 0xda, 0x87, 0xdd, 0xa2, 0x41, 0xf6, 0x28, 0xb6, 0xa8, 0x6d, 0xe8, - 0x8e, 0xe3, 0x05, 0x26, 0x67, 0x98, 0x54, 0x2a, 0xd4, 0x71, 0x62, 0xdd, 0xa5, 0xa0, 0xbd, 0x40, - 0x0f, 0x1a, 0xd6, 0xae, 0x81, 0xbc, 0xb2, 0x74, 0x11, 0x95, 0x60, 0x62, 0xeb, 0x35, 0x03, 0x13, - 0xcc, 0x29, 0xb1, 0x18, 0x2f, 0xa0, 0x45, 0x28, 0x64, 0xfb, 0x7a, 0x7c, 0xbb, 0xff, 0xfd, 0x14, - 0x4c, 0xc1, 0xe8, 0x1a, 0x71, 0xf4, 0x8a, 0x98, 0xff, 0x53, 0x23, 0x12, 0xbc, 0x14, 0xbb, 0x11, - 0x4c, 0x8d, 0xa4, 0xb2, 0xa3, 0x1f, 0xe6, 0x4b, 0x3b, 0x5b, 0xf9, 0xeb, 0xb4, 0x85, 0x53, 0xf0, - 0xa5, 0xd4, 0xbe, 0x21, 0xfc, 0x46, 0x1a, 0x91, 0x95, 0x74, 0xf1, 0x95, 0xd0, 0x87, 0x11, 0x87, - 0xab, 0x8c, 0xb8, 0xbc, 0xa1, 0x7a, 0x7f, 0x98, 0xad, 0xff, 0x1f, 0x5d, 0x9d, 0xef, 0x0d, 0xc4, - 0xd9, 0x23, 0x6a, 0xae, 0x7d, 0x13, 0xb2, 0xfe, 0x85, 0x03, 0xa1, 0xab, 0x36, 0x31, 0xb9, 0x83, - 0xbd, 0x45, 0x60, 0x3d, 0x98, 0x0b, 0xae, 0x21, 0x68, 0x26, 0x38, 0x14, 0xab, 0xf0, 0x74, 0x1d, - 0x06, 0x49, 0xd5, 0xd0, 0x4d, 0xb4, 0x1a, 0x43, 0x35, 0xab, 0x31, 0x30, 0xe1, 0x0c, 0x0f, 0x4c, - 0x77, 0xb8, 0xd7, 0x89, 0xf6, 0x28, 0xd6, 0xcd, 0x1a, 0xb3, 0x0d, 0xe1, 0xef, 0xf2, 0x3c, 0x4c, - 0x44, 0x4d, 0x31, 0x90, 0xbc, 0x1a, 0x95, 0x5f, 0xef, 0x79, 0x39, 0x4a, 0x82, 0xda, 0x5b, 0x70, - 0xfa, 0xe6, 0x61, 0xf5, 0x89, 0xe6, 0x54, 0xbf, 0xb9, 0x74, 0x7f, 0xb4, 0xed, 0xb9, 0xf2, 0x90, - 0xc8, 0xe7, 0xe5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x2c, 0x9b, 0x2b, 0x68, 0xc5, 0x23, 0x00, - 0x00, + 0xdd, 0x5a, 0x2e, 0xf5, 0x1a, 0xbd, 0xa8, 0x91, 0x1f, 0x32, 0xad, 0x44, 0x63, 0xc6, 0xf9, 0xb2, + 0x51, 0x42, 0xae, 0x44, 0x29, 0x8e, 0xad, 0x20, 0xf1, 0x47, 0x3d, 0x6c, 0x2b, 0xb6, 0x65, 0x79, + 0xed, 0xf8, 0x0b, 0xfc, 0x39, 0x11, 0x86, 0xdc, 0x21, 0xb9, 0x16, 0x77, 0x67, 0xb3, 0x3b, 0x2b, + 0x9b, 0x9f, 0x3e, 0xb6, 0x69, 0x0b, 0xb4, 0x68, 0x73, 0x28, 0xa0, 0xb4, 0x97, 0xa2, 0xe8, 0x5f, + 0xd0, 0x6b, 0x4f, 0x39, 0xb4, 0x3d, 0xf4, 0xd4, 0x5b, 0x5b, 0x04, 0x28, 0x0a, 0xf4, 0xd2, 0x16, + 0xe8, 0x5f, 0xd0, 0xa2, 0xe8, 0xa5, 0x98, 0xd9, 0x5d, 0x6a, 0x77, 0x49, 0x5a, 0xa6, 0x1c, 0xe4, + 0x22, 0xed, 0xcc, 0xfc, 0xde, 0xef, 0x19, 0x82, 0x22, 0x79, 0x8a, 0x4d, 0xbb, 0x41, 0x5c, 0xd5, + 0x76, 0x28, 0xa3, 0x6a, 0xb0, 0xb4, 0xcb, 0x2a, 0xde, 0x2d, 0x1b, 0x6c, 0x97, 0x56, 0x77, 0xc9, + 0x3e, 0x71, 0x9a, 0xac, 0x6e, 0x58, 0xb5, 0x82, 0x80, 0x81, 0xf3, 0x35, 0xc7, 0xae, 0x14, 0x6a, + 0x98, 0x91, 0x27, 0xb8, 0x59, 0x08, 0x09, 0x14, 0xda, 0xa8, 0xd9, 0xb9, 0x1a, 0xa5, 0xb5, 0x06, + 0x51, 0xb1, 0x6d, 0xa8, 0xd8, 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xa3, 0x67, 0x51, 0x70, + 0x2a, 0x56, 0x65, 0xaf, 0xaa, 0x56, 0x0d, 0xd2, 0xd0, 0x77, 0x4d, 0xec, 0xee, 0x05, 0x10, 0xe7, + 0x93, 0x10, 0xc4, 0xb4, 0x59, 0x33, 0x38, 0x7c, 0x39, 0x79, 0xa8, 0x7b, 0x8e, 0xa0, 0x1f, 0x9c, + 0xbf, 0x96, 0xd0, 0xc8, 0xc6, 0xac, 0x4e, 0x2c, 0xcf, 0x14, 0x1f, 0xbb, 0xfc, 0x2b, 0x94, 0x23, + 0x01, 0xe8, 0x7a, 0x65, 0xd5, 0x24, 0xae, 0x8b, 0x6b, 0x24, 0x80, 0xb8, 0xd0, 0x09, 0x51, 0x4c, + 0x80, 0xcc, 0x27, 0xa5, 0x61, 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x00, 0x78, 0x53, 0xfc, 0xab, + 0xe4, 0x6b, 0xc4, 0xca, 0xbb, 0x4f, 0x70, 0xad, 0x46, 0x1c, 0x95, 0xda, 0xc2, 0x1e, 0x9d, 0xb6, + 0xc9, 0xfd, 0xf8, 0x14, 0xc8, 0x94, 0xd6, 0x0c, 0x76, 0xa7, 0xba, 0xd9, 0xb6, 0x3a, 0xfc, 0x08, + 0x4c, 0xb8, 0x86, 0x55, 0x6b, 0x90, 0x5d, 0x8b, 0xb8, 0x8c, 0xe8, 0xb3, 0xe7, 0x90, 0xa4, 0x8c, + 0x15, 0x2f, 0x17, 0x8e, 0xf1, 0x43, 0x21, 0x49, 0xa9, 0xb0, 0x2d, 0xf0, 0xb5, 0x71, 0x9f, 0x9c, + 0xbf, 0x82, 0x75, 0x90, 0xf6, 0x3c, 0x43, 0x9f, 0x95, 0x90, 0xa4, 0x8c, 0xae, 0xdd, 0x3f, 0x2c, + 0xdd, 0xfd, 0x54, 0x92, 0x7e, 0x20, 0xdd, 0xfc, 0x5f, 0x9c, 0xaf, 0x96, 0xf2, 0xd7, 0x16, 0xf3, + 0x57, 0x3e, 0x3a, 0xb8, 0xdc, 0xca, 0x47, 0x97, 0x2b, 0xfd, 0x2c, 0x97, 0x8a, 0x2d, 0x4d, 0x70, + 0x80, 0x3b, 0x60, 0x28, 0xd0, 0x20, 0x85, 0xe4, 0x17, 0xd2, 0x20, 0xa0, 0x03, 0xe7, 0xc1, 0x58, + 0xb5, 0x41, 0x31, 0xdb, 0xdd, 0xc7, 0x0d, 0x8f, 0xcc, 0xca, 0x48, 0x52, 0x52, 0x1a, 0x10, 0x5b, + 0x0f, 0xf8, 0x0e, 0xbc, 0x00, 0xc6, 0x75, 0xea, 0x95, 0x1b, 0x24, 0x80, 0x48, 0x23, 0x49, 0x91, + 0xb4, 0x31, 0x7f, 0xcf, 0x07, 0x99, 0x07, 0x63, 0x86, 0xc5, 0x2e, 0xad, 0x04, 0x10, 0x83, 0x48, + 0x52, 0x64, 0x0d, 0x88, 0xad, 0x36, 0x0d, 0x2f, 0x0a, 0x31, 0x84, 0x24, 0x25, 0xad, 0x8d, 0x79, + 0x11, 0x10, 0x9f, 0xc6, 0x72, 0x31, 0x80, 0x18, 0x46, 0x92, 0x32, 0x28, 0x68, 0x2c, 0x17, 0x7d, + 0x80, 0x57, 0xc0, 0x44, 0xd5, 0x78, 0x4a, 0xf4, 0x36, 0x91, 0x11, 0x24, 0x29, 0x43, 0xda, 0x78, + 0xb0, 0x19, 0x07, 0x6a, 0xd3, 0x19, 0x45, 0x92, 0x32, 0x1c, 0x00, 0x85, 0x94, 0x5e, 0x02, 0xa0, + 0x4c, 0x69, 0x23, 0x80, 0x00, 0x48, 0x52, 0x46, 0xb4, 0x51, 0xbe, 0xd3, 0x16, 0xd6, 0x65, 0x8e, + 0x61, 0xd5, 0x02, 0x80, 0x31, 0xee, 0x55, 0x6d, 0xcc, 0xdf, 0x6b, 0x0b, 0x5b, 0x6e, 0x32, 0xe2, + 0x06, 0x10, 0x2f, 0x21, 0x49, 0x19, 0xd7, 0x80, 0xd8, 0x8a, 0x29, 0xdc, 0x16, 0x63, 0x02, 0x49, + 0xca, 0x84, 0xaf, 0x70, 0x28, 0xc5, 0x4d, 0x00, 0x78, 0x2a, 0x05, 0x00, 0x93, 0x48, 0x52, 0x26, + 0x8b, 0x6f, 0x1e, 0xeb, 0xce, 0x6d, 0xcf, 0x24, 0x8e, 0x51, 0xd9, 0xb4, 0x3c, 0x53, 0x1b, 0xe5, + 0xf8, 0x3e, 0xb1, 0x1d, 0x30, 0xd5, 0x4e, 0xce, 0x80, 0xe2, 0xcb, 0x82, 0xa2, 0xd2, 0x83, 0x62, + 0x98, 0xd3, 0x85, 0x1d, 0xcc, 0xea, 0x82, 0xda, 0x84, 0x1d, 0x7c, 0xf9, 0x14, 0x5d, 0x70, 0xc6, + 0x8f, 0x90, 0xdd, 0x24, 0xe1, 0x79, 0x41, 0xf8, 0xbd, 0xe3, 0x08, 0xdf, 0xf6, 0xb3, 0x3c, 0xa4, + 0x1f, 0xc4, 0x5d, 0x9b, 0xdd, 0x8c, 0x15, 0x5b, 0xfb, 0x4c, 0x5f, 0x05, 0x93, 0x6e, 0xdc, 0x7f, + 0x53, 0x48, 0x52, 0xa6, 0xb4, 0x09, 0x37, 0xe6, 0xc0, 0x36, 0x58, 0x3b, 0x16, 0x32, 0x48, 0x52, + 0x32, 0x21, 0x58, 0x24, 0xea, 0xdc, 0xa8, 0x13, 0xa6, 0x91, 0xa4, 0x4c, 0x6b, 0x63, 0x6e, 0xc4, + 0x09, 0x01, 0x48, 0x9b, 0x0e, 0x44, 0x92, 0x02, 0x7d, 0x90, 0x90, 0x4a, 0x11, 0x9c, 0x76, 0x88, + 0x4d, 0x30, 0x37, 0x45, 0x2c, 0x2e, 0x66, 0x90, 0xac, 0x8c, 0x6a, 0x33, 0xe1, 0xe1, 0xbd, 0x48, + 0x7c, 0x5c, 0x01, 0x63, 0xd4, 0x22, 0xbc, 0xf2, 0xf3, 0xb2, 0x3b, 0x7b, 0x4a, 0x54, 0x9b, 0x33, + 0x05, 0xbf, 0xd2, 0x15, 0xc2, 0x4a, 0x57, 0xd8, 0xe4, 0xa7, 0x37, 0x06, 0x34, 0x20, 0x80, 0xc5, + 0x0a, 0xbe, 0x02, 0xc6, 0x7d, 0x54, 0x9f, 0xd7, 0xec, 0x69, 0x1e, 0x7d, 0x37, 0x06, 0x34, 0x9f, + 0xa0, 0xcf, 0x04, 0x3e, 0x02, 0xa3, 0x26, 0xb6, 0x03, 0x39, 0xce, 0x88, 0x4a, 0x70, 0xb5, 0xff, + 0x4a, 0x70, 0x1b, 0xdb, 0x42, 0xdc, 0x4d, 0x8b, 0x39, 0x4d, 0x6d, 0xc4, 0x0c, 0x96, 0xf0, 0x29, + 0x98, 0x31, 0xb1, 0x6d, 0x27, 0xf5, 0x3d, 0x2b, 0xf8, 0xdc, 0x38, 0x11, 0x1f, 0x3b, 0x66, 0x1f, + 0x9f, 0xe1, 0xb4, 0x99, 0xdc, 0x8f, 0x70, 0x0e, 0x62, 0xcf, 0xe7, 0x3c, 0xfb, 0x62, 0x9c, 0xfd, + 0xc8, 0xeb, 0xe4, 0x1c, 0xd9, 0x87, 0xab, 0x60, 0xd6, 0xa2, 0xd6, 0x3a, 0xb5, 0xf6, 0x89, 0xc5, + 0xdb, 0x09, 0x6e, 0x6c, 0x63, 0xd3, 0x2f, 0x6f, 0xb3, 0x59, 0x51, 0x00, 0x7a, 0x9e, 0xc3, 0x75, + 0x30, 0xd5, 0xee, 0x59, 0x81, 0xc4, 0xe7, 0x85, 0xc7, 0xb3, 0x1d, 0x1e, 0xbf, 0x1f, 0xc2, 0x69, + 0x93, 0x6d, 0x14, 0x9f, 0xc8, 0x23, 0xd0, 0x8e, 0xa4, 0x68, 0xb2, 0xcd, 0x21, 0xb9, 0xef, 0xba, + 0x30, 0x1d, 0x12, 0x6a, 0x27, 0x56, 0xf6, 0xd7, 0x12, 0x18, 0x0a, 0x9a, 0x15, 0x04, 0x69, 0x0b, + 0x9b, 0xc4, 0x6f, 0x56, 0x9a, 0xf8, 0x86, 0x67, 0xc0, 0x10, 0x36, 0xa9, 0x67, 0xb1, 0xd9, 0x94, + 0x28, 0x54, 0xc1, 0x0a, 0xde, 0x05, 0x29, 0xba, 0x27, 0x7a, 0xc2, 0x64, 0xb1, 0x74, 0xd2, 0x56, + 0x53, 0xd8, 0x20, 0xc4, 0x16, 0x82, 0xa5, 0xe8, 0x5e, 0x6e, 0x1e, 0x8c, 0x84, 0x6b, 0x38, 0x0a, + 0x06, 0xaf, 0x95, 0x6e, 0xdd, 0xdb, 0xcc, 0x0c, 0xc0, 0x11, 0x90, 0xbe, 0xaf, 0x7d, 0xb0, 0x99, + 0x91, 0x56, 0xcf, 0x1e, 0x96, 0x4e, 0x15, 0x21, 0xcc, 0x1c, 0xa0, 0x1c, 0xdd, 0xcb, 0xad, 0xa2, + 0x1c, 0xdf, 0xcf, 0xa1, 0x56, 0xd6, 0x00, 0x13, 0xb1, 0x88, 0x85, 0x19, 0x20, 0xef, 0x91, 0x66, + 0xa0, 0x08, 0xff, 0x84, 0x6b, 0x60, 0xd0, 0x37, 0x5b, 0xea, 0x04, 0xe5, 0xd4, 0x47, 0x5d, 0x4d, + 0x5d, 0x96, 0xb2, 0x1b, 0xe0, 0x4c, 0xf7, 0xa0, 0xed, 0xc2, 0xf3, 0x54, 0x94, 0xe7, 0x68, 0x94, + 0xca, 0x37, 0x42, 0x2a, 0xc9, 0x00, 0xec, 0x42, 0x65, 0x3b, 0x4a, 0xe5, 0x45, 0xfa, 0xfa, 0x11, + 0xff, 0xd5, 0x7f, 0x4b, 0x87, 0xa5, 0x7f, 0x4a, 0xa0, 0xb6, 0x30, 0x53, 0x42, 0x65, 0x83, 0x21, + 0x5a, 0x45, 0x47, 0x93, 0x68, 0x71, 0x6b, 0xcb, 0x62, 0x61, 0x2c, 0x37, 0x51, 0x85, 0x9a, 0x76, + 0xc3, 0xa8, 0xf0, 0xa8, 0x41, 0xc1, 0x7c, 0x86, 0x58, 0xd3, 0x26, 0x88, 0x51, 0x54, 0xa1, 0xfb, + 0xc4, 0x41, 0x26, 0xb6, 0x9a, 0xa8, 0x4a, 0x30, 0xf3, 0x1c, 0xe2, 0x72, 0x5a, 0x3b, 0x61, 0x50, + 0xff, 0x4e, 0x12, 0xc3, 0xc9, 0xc2, 0x03, 0x70, 0xf1, 0x9a, 0x61, 0xe9, 0x88, 0x7a, 0x0c, 0x99, + 0xd4, 0x21, 0x08, 0x97, 0xf9, 0x67, 0xc7, 0x34, 0x56, 0xa8, 0x33, 0x66, 0xbb, 0xab, 0xaa, 0x5a, + 0x33, 0x58, 0xdd, 0x2b, 0x17, 0x2a, 0xd4, 0x54, 0xb9, 0xba, 0x79, 0x52, 0xa1, 0x6e, 0xd3, 0x65, + 0x24, 0x58, 0x06, 0xda, 0x17, 0x57, 0x60, 0xf1, 0x00, 0xe5, 0x38, 0x0b, 0x1e, 0x0e, 0x8b, 0x95, + 0xea, 0xf2, 0xa5, 0x25, 0xb2, 0x94, 0x5f, 0x29, 0xaf, 0xac, 0xe4, 0x57, 0x2e, 0x2f, 0xeb, 0x79, + 0xbc, 0xf4, 0xd6, 0x95, 0xfc, 0x5b, 0x2b, 0x3a, 0x2e, 0xeb, 0xd5, 0xb7, 0xc9, 0xe5, 0xa5, 0x95, + 0x1c, 0x6a, 0xad, 0x4d, 0x84, 0x35, 0x58, 0x18, 0x24, 0xf7, 0xa3, 0x11, 0x30, 0x9b, 0x94, 0x44, + 0x0b, 0xf2, 0x04, 0x5e, 0x01, 0xe7, 0x44, 0x97, 0x6b, 0x67, 0x60, 0x74, 0x24, 0x92, 0x90, 0xac, + 0xa4, 0xb4, 0x33, 0x1c, 0x20, 0x44, 0xb8, 0x76, 0x34, 0x1e, 0xbd, 0x03, 0xb2, 0x71, 0xd4, 0xd8, + 0xb0, 0xc4, 0xa7, 0x34, 0x49, 0x3b, 0x1b, 0xc5, 0xdd, 0x88, 0x0c, 0x4e, 0x1d, 0x7c, 0xa3, 0xbd, + 0x48, 0x46, 0xb2, 0x22, 0xc7, 0xf9, 0x6e, 0x1d, 0xb5, 0xa5, 0x0e, 0xbe, 0xb1, 0x01, 0x2b, 0x8d, + 0x64, 0x25, 0x1d, 0xe7, 0xfb, 0x41, 0xa4, 0xa7, 0x75, 0xe3, 0xdb, 0x6e, 0x93, 0x83, 0x48, 0x56, + 0x06, 0x3b, 0xf8, 0x86, 0x1d, 0xf3, 0x5d, 0x70, 0x3e, 0x61, 0xaa, 0x58, 0x23, 0x1e, 0x42, 0xb2, + 0x32, 0xa4, 0xcd, 0xc6, 0x8c, 0x15, 0xed, 0xc9, 0xdd, 0xd1, 0x23, 0x63, 0x9f, 0xac, 0x0c, 0x77, + 0x41, 0x0f, 0xb9, 0xbf, 0x0d, 0x66, 0xe3, 0xe8, 0x91, 0x41, 0x6e, 0x04, 0xc9, 0xca, 0x88, 0x76, + 0x3a, 0x8a, 0xbb, 0xd6, 0x1e, 0xea, 0x3a, 0xcc, 0x15, 0x6b, 0x6d, 0xa3, 0xa2, 0x95, 0xc7, 0xcc, + 0x15, 0x6f, 0xe7, 0x09, 0x73, 0x45, 0x87, 0x3f, 0x80, 0x64, 0x65, 0x3c, 0x6e, 0xae, 0xb5, 0xa3, + 0x41, 0xb0, 0xab, 0x9b, 0xda, 0xea, 0x8e, 0x21, 0x59, 0x99, 0xe8, 0x74, 0x53, 0xa8, 0x2d, 0x49, + 0x6a, 0x1b, 0x69, 0x0c, 0xe3, 0x27, 0x68, 0x0c, 0x31, 0xdb, 0x1c, 0x4d, 0x5d, 0x57, 0xc1, 0x5c, + 0xc2, 0x36, 0x71, 0xa7, 0x4c, 0x20, 0x59, 0x99, 0xd2, 0xce, 0xc5, 0xac, 0x13, 0x9b, 0xc7, 0x7a, + 0x10, 0x68, 0x07, 0xc5, 0x24, 0x92, 0x95, 0x4c, 0x37, 0x02, 0x3d, 0x83, 0x39, 0x36, 0xb7, 0x4d, + 0x21, 0x59, 0x99, 0x4e, 0x78, 0x27, 0x62, 0xa5, 0xae, 0xc8, 0x91, 0xc9, 0x50, 0x56, 0x60, 0x27, + 0x72, 0xc0, 0x39, 0x97, 0x05, 0xe9, 0x35, 0xaa, 0x37, 0xbb, 0x75, 0xc5, 0xdc, 0x23, 0x30, 0x15, + 0x0c, 0xb1, 0xff, 0x63, 0xb0, 0xba, 0x00, 0x9b, 0x04, 0xa9, 0xf0, 0x9e, 0xa7, 0xa5, 0x0c, 0x5e, + 0x38, 0xd2, 0x3a, 0x66, 0x38, 0xa8, 0xda, 0xaf, 0x1e, 0xeb, 0x0d, 0x4e, 0x44, 0x13, 0x28, 0xb9, + 0xcf, 0x25, 0x30, 0xf5, 0x81, 0xad, 0x63, 0x46, 0x1e, 0x14, 0x35, 0xf2, 0x89, 0x47, 0x5c, 0x06, + 0xd7, 0x81, 0x8c, 0xcb, 0xbe, 0x10, 0x63, 0xc5, 0xa5, 0xbe, 0x7b, 0x80, 0xc6, 0xb1, 0xe1, 0x3b, + 0x60, 0xcc, 0x13, 0x74, 0xc5, 0x83, 0x40, 0x20, 0x5a, 0xe7, 0x28, 0x72, 0xcd, 0x20, 0x0d, 0xfd, + 0x36, 0x76, 0xf7, 0x34, 0xe0, 0x83, 0xf3, 0xef, 0x05, 0x04, 0xc6, 0x22, 0x11, 0xc3, 0xdb, 0xf2, + 0xc3, 0x4d, 0xed, 0x4e, 0x66, 0x00, 0x0e, 0x03, 0xf9, 0xce, 0xf6, 0x66, 0x46, 0x2a, 0xfe, 0x71, + 0x0e, 0x9c, 0x4d, 0x32, 0xbe, 0x47, 0x9c, 0x7d, 0xa3, 0x42, 0xe0, 0x97, 0x32, 0x18, 0x5a, 0x77, + 0xb8, 0x91, 0x61, 0xff, 0xd2, 0x67, 0xfb, 0x47, 0xc9, 0xfd, 0x2d, 0xf5, 0xed, 0xdf, 0xff, 0xf5, + 0xf3, 0xd4, 0x9f, 0x53, 0xb9, 0x3f, 0xa5, 0xd4, 0xfd, 0xa5, 0xf0, 0xf1, 0xa5, 0xdb, 0xd3, 0x8b, + 0x7a, 0x10, 0x29, 0xea, 0x2d, 0xf5, 0x20, 0x5a, 0xa7, 0x5b, 0xea, 0x41, 0x24, 0x66, 0x5a, 0xaa, + 0x4b, 0x6c, 0xec, 0x60, 0x46, 0x1d, 0xf5, 0xc0, 0x8b, 0x1d, 0x1c, 0x44, 0xe2, 0xb2, 0xa5, 0x1e, + 0xc4, 0xc2, 0x3c, 0x5c, 0x47, 0xce, 0x8f, 0xaa, 0x53, 0x4b, 0x3d, 0x88, 0x56, 0x9c, 0x77, 0x5d, + 0xe6, 0xd8, 0x0e, 0xa9, 0x1a, 0x4f, 0xd5, 0x85, 0x96, 0xcf, 0x24, 0x82, 0xe6, 0x26, 0xe9, 0xb8, + 0x49, 0x46, 0x6e, 0x02, 0x21, 0x2e, 0x64, 0xaf, 0x49, 0xb5, 0xa5, 0x1e, 0x1c, 0x55, 0x90, 0x96, + 0x7a, 0x90, 0xb8, 0xd9, 0x71, 0xcc, 0xae, 0x57, 0xbe, 0x16, 0xfc, 0x99, 0x04, 0x80, 0xef, 0x58, + 0x91, 0x06, 0x5f, 0x8f, 0x73, 0x17, 0x84, 0x6f, 0x2f, 0xe6, 0xe6, 0x8f, 0xf1, 0xec, 0xaa, 0xb4, + 0x00, 0xff, 0x1f, 0x0c, 0xdd, 0xa2, 0x74, 0xcf, 0xb3, 0xe1, 0x54, 0xc1, 0xf5, 0xca, 0xc5, 0xc2, + 0x96, 0x1e, 0xe4, 0xee, 0x49, 0x38, 0x17, 0x04, 0x67, 0x05, 0xfe, 0xd7, 0xb1, 0x31, 0xc5, 0xa7, + 0x92, 0x16, 0xfc, 0xae, 0x04, 0x86, 0xfc, 0x5c, 0x3e, 0x89, 0x69, 0x7a, 0x5c, 0x0c, 0x73, 0x4b, + 0x42, 0x8a, 0x37, 0xb2, 0xcf, 0x29, 0x05, 0x37, 0xc3, 0xaf, 0x24, 0x30, 0x12, 0x16, 0x15, 0xb8, + 0x78, 0xac, 0x28, 0x89, 0xfa, 0xd3, 0x53, 0x92, 0xc7, 0x42, 0x12, 0x3d, 0xbb, 0xa0, 0xee, 0x17, + 0x9f, 0x2d, 0x09, 0x2e, 0x93, 0x82, 0x2f, 0x0d, 0xaf, 0x45, 0x0f, 0x97, 0x8a, 0xfd, 0xa2, 0xc0, + 0x9f, 0x4a, 0x60, 0x76, 0x07, 0xb3, 0x4a, 0x9d, 0x17, 0xdd, 0x76, 0x91, 0xda, 0xb2, 0x44, 0xe0, + 0x7d, 0x75, 0x2a, 0x5d, 0x12, 0x2a, 0x2d, 0x16, 0xdf, 0x50, 0xf7, 0x8b, 0xf8, 0x79, 0x05, 0x94, + 0x16, 0xe0, 0x0f, 0x25, 0x30, 0xb4, 0x41, 0x1a, 0x84, 0x91, 0xce, 0x48, 0xeb, 0xc5, 0xeb, 0xd1, + 0x61, 0xe9, 0x8d, 0xf2, 0xeb, 0x60, 0x12, 0x80, 0x92, 0x6d, 0xdc, 0x24, 0xcd, 0x92, 0xc7, 0xea, + 0x70, 0x00, 0x9c, 0x05, 0x43, 0x77, 0xf8, 0x67, 0x11, 0x4e, 0x80, 0xb4, 0x43, 0xb0, 0x0e, 0x06, + 0x9f, 0x38, 0x06, 0x23, 0x7e, 0xf0, 0x2d, 0x3c, 0x6f, 0xf0, 0xfd, 0x45, 0x02, 0x23, 0xd7, 0x09, + 0xbb, 0xeb, 0x11, 0xa7, 0xf9, 0x55, 0x86, 0xdf, 0x67, 0xd2, 0x61, 0xe9, 0x7e, 0x6e, 0x1b, 0xcc, + 0x75, 0x1b, 0xea, 0xdb, 0x0c, 0xfb, 0x1c, 0xe6, 0x3f, 0x94, 0xca, 0x03, 0x42, 0xbf, 0x02, 0x7c, + 0xf3, 0x38, 0xfd, 0x3e, 0xe1, 0x0c, 0x42, 0x2d, 0x3f, 0x1b, 0x04, 0x99, 0xeb, 0x84, 0x85, 0x3d, + 0xdc, 0x67, 0x7e, 0xa5, 0xff, 0x16, 0x19, 0xe0, 0x67, 0x4f, 0x8e, 0x9a, 0xfb, 0x34, 0x2d, 0x34, + 0xf8, 0x97, 0x0c, 0xff, 0x21, 0x1f, 0xa3, 0x43, 0x7b, 0x28, 0x09, 0x8a, 0x6d, 0xb7, 0x0b, 0x46, + 0x2b, 0x79, 0x96, 0xe8, 0x4c, 0x3d, 0x6f, 0x08, 0x1d, 0x67, 0xde, 0xb3, 0x0e, 0xe3, 0x1d, 0xe3, + 0x19, 0x33, 0x7c, 0xf7, 0xd3, 0x9e, 0xb8, 0xb1, 0x1e, 0xd7, 0x7b, 0xc6, 0xee, 0xc4, 0x3b, 0x9a, + 0xa1, 0xbb, 0x2a, 0xd2, 0x93, 0x61, 0x67, 0x0b, 0xeb, 0x31, 0xb8, 0xf6, 0x38, 0xee, 0xa9, 0xa7, + 0xfb, 0x2c, 0xae, 0xb1, 0x16, 0x0b, 0x7f, 0x23, 0x83, 0xf4, 0x66, 0xa5, 0x4e, 0x61, 0xaf, 0xf7, + 0x55, 0xd7, 0x2b, 0x17, 0xfc, 0x2b, 0x44, 0x58, 0x1c, 0x9e, 0x1b, 0x32, 0xf7, 0xf7, 0xd4, 0x61, + 0xe9, 0x5b, 0x29, 0x30, 0x4e, 0x2a, 0x75, 0x8a, 0x5c, 0x7f, 0xb4, 0x02, 0x23, 0x62, 0xe5, 0xd8, + 0x15, 0x38, 0x7d, 0xcf, 0x33, 0x4d, 0xec, 0x34, 0x57, 0xd1, 0x66, 0xb0, 0x95, 0xcd, 0x6c, 0x10, + 0xb7, 0xe2, 0x18, 0xe2, 0x47, 0x11, 0xb1, 0x9b, 0xdb, 0x00, 0x30, 0x9e, 0xb6, 0x42, 0xda, 0x3e, + 0x93, 0xf5, 0xfd, 0xab, 0x40, 0x7e, 0x6b, 0x71, 0x19, 0x5e, 0x06, 0x97, 0x34, 0xc2, 0x3c, 0xc7, + 0x22, 0x3a, 0x7a, 0x52, 0x27, 0x16, 0x62, 0x75, 0x82, 0x1c, 0xe2, 0x52, 0xcf, 0xa9, 0x10, 0x64, + 0xb8, 0x88, 0x11, 0xd3, 0xa6, 0x0e, 0x76, 0x8c, 0x46, 0x13, 0x79, 0x16, 0xde, 0xc7, 0x46, 0x03, + 0x97, 0x1b, 0xa4, 0xf0, 0xfe, 0x3b, 0x40, 0x5e, 0x59, 0x5c, 0x81, 0x2b, 0x60, 0xe1, 0x19, 0x04, + 0x74, 0x4a, 0x5c, 0x64, 0x51, 0x86, 0xc8, 0x53, 0xc3, 0x65, 0x05, 0x38, 0x04, 0xd2, 0x3f, 0x49, + 0x49, 0xb2, 0x48, 0xb2, 0x8f, 0x8e, 0x2f, 0x13, 0xdc, 0x30, 0xea, 0x81, 0xef, 0x98, 0x87, 0xe7, + 0x72, 0x99, 0x68, 0xc3, 0xe1, 0x67, 0xab, 0xfe, 0x93, 0xc8, 0x43, 0x08, 0x3b, 0x8e, 0xe0, 0x2f, + 0x24, 0x30, 0xbe, 0x41, 0x88, 0x2d, 0x9e, 0xa1, 0xf9, 0xc6, 0xd7, 0x33, 0xd9, 0x5c, 0x15, 0xba, + 0x5d, 0xc9, 0xad, 0x1c, 0x5b, 0xe2, 0x63, 0x3f, 0x5b, 0x15, 0xf8, 0xb5, 0x44, 0x74, 0xa1, 0x12, + 0x00, 0xdb, 0x74, 0xcd, 0xb0, 0x74, 0xc3, 0xaa, 0xb9, 0xf0, 0x5c, 0x47, 0x05, 0xdf, 0x08, 0x7e, + 0xd1, 0xeb, 0x59, 0xdc, 0x07, 0xe0, 0x03, 0x30, 0x7c, 0xdf, 0x30, 0x09, 0xf5, 0x18, 0xec, 0x01, + 0xd4, 0x13, 0xf9, 0xbc, 0x10, 0xff, 0x34, 0x9c, 0x89, 0xda, 0x93, 0x05, 0xc4, 0xea, 0x20, 0xb3, + 0xe9, 0x38, 0xd4, 0xe1, 0xed, 0x7b, 0x83, 0x30, 0x6c, 0x34, 0xdc, 0xbe, 0x19, 0x5c, 0x14, 0x0c, + 0x5e, 0x86, 0x73, 0x31, 0x87, 0x71, 0xaa, 0x4f, 0x0c, 0x56, 0xd7, 0x03, 0xaa, 0xdf, 0x93, 0x00, + 0xbc, 0x4e, 0x58, 0xf2, 0x8e, 0x76, 0xfc, 0x8c, 0x90, 0xc0, 0xe8, 0x29, 0xc6, 0x6b, 0x42, 0x8c, + 0x0b, 0xb9, 0x73, 0x51, 0x31, 0xb8, 0x04, 0x65, 0xaa, 0x37, 0xd5, 0x03, 0x3e, 0x11, 0x88, 0xbb, + 0x1c, 0xfc, 0x8e, 0x04, 0xa6, 0x77, 0xa8, 0xcb, 0x38, 0x45, 0x81, 0x2a, 0x04, 0x79, 0xbe, 0xeb, + 0x60, 0x4f, 0xee, 0xaa, 0xe0, 0xfe, 0x7a, 0xee, 0x62, 0x94, 0xbb, 0x4d, 0x5d, 0xc6, 0x25, 0x10, + 0x3f, 0x2c, 0xf8, 0x62, 0x84, 0x41, 0x91, 0xfd, 0xa5, 0x74, 0x58, 0xfa, 0x42, 0x82, 0xd5, 0x1e, + 0xb7, 0x33, 0xa4, 0x47, 0x8a, 0x44, 0x3e, 0x8f, 0x9e, 0xd4, 0x8d, 0x4a, 0x1d, 0xb9, 0x75, 0xea, + 0x35, 0x74, 0x91, 0x7e, 0x65, 0x82, 0x3c, 0x97, 0xe8, 0xc8, 0xb0, 0x90, 0xdd, 0xc0, 0x15, 0x82, + 0x68, 0x55, 0x24, 0xaa, 0x4e, 0x2b, 0x9e, 0x49, 0x2c, 0xff, 0x77, 0x56, 0x54, 0xa1, 0x26, 0x5f, + 0x5c, 0xc8, 0xde, 0x05, 0xf3, 0xdd, 0x26, 0x03, 0x9e, 0x46, 0xe1, 0x7d, 0xb0, 0xdf, 0x97, 0xbe, + 0xc7, 0xe0, 0x54, 0x05, 0x9b, 0xa4, 0xb1, 0x8e, 0x5d, 0x12, 0xd0, 0xe0, 0x97, 0x17, 0xa8, 0x81, + 0x41, 0xff, 0xd7, 0x91, 0x7e, 0x03, 0xe9, 0x9c, 0xb0, 0xe1, 0x0c, 0x9c, 0x8e, 0x05, 0x12, 0x3f, + 0x2a, 0x7e, 0x0c, 0xe6, 0x4a, 0x16, 0x65, 0x75, 0xe2, 0x04, 0x9c, 0xb8, 0xf3, 0x22, 0x49, 0xf5, + 0x5e, 0x2c, 0xc5, 0xfa, 0x65, 0x3c, 0xb0, 0xf6, 0xc5, 0xf0, 0x61, 0xe9, 0xe7, 0xc3, 0xf0, 0x0f, + 0x12, 0x98, 0x29, 0xa1, 0x35, 0xff, 0xf9, 0x35, 0x52, 0x02, 0x3e, 0x04, 0xa7, 0x6a, 0xda, 0xce, + 0x7a, 0xfe, 0xba, 0xaf, 0x3a, 0xb2, 0x1d, 0xfa, 0x98, 0x54, 0x58, 0xbf, 0x26, 0xcb, 0x66, 0x2c, + 0x6a, 0x91, 0xff, 0x0e, 0x54, 0xe3, 0xd0, 0x0b, 0x1f, 0x83, 0x53, 0x6b, 0xf7, 0x36, 0xd0, 0x72, + 0x7e, 0xbd, 0x81, 0x3d, 0x97, 0xa0, 0x5b, 0x46, 0x85, 0x58, 0x2e, 0x81, 0xd7, 0xfa, 0xa3, 0xac, + 0x96, 0x1b, 0xb4, 0xac, 0x9a, 0xd8, 0x65, 0xc4, 0x51, 0x6f, 0x6d, 0xad, 0x6f, 0x6e, 0xdf, 0xdb, + 0x2c, 0xb0, 0xa7, 0xac, 0x28, 0x2f, 0x15, 0x16, 0x17, 0x64, 0x29, 0x95, 0x2e, 0x66, 0xb0, 0xed, + 0x3f, 0x1a, 0x1b, 0xd4, 0x52, 0x1f, 0xbb, 0xd4, 0x2a, 0x9e, 0x89, 0xee, 0x3c, 0xcd, 0x57, 0x29, + 0xcd, 0x9b, 0x86, 0x49, 0x56, 0x3b, 0x20, 0x57, 0x7b, 0x40, 0x6a, 0x3b, 0xbc, 0x63, 0x2c, 0xc3, + 0x2d, 0x70, 0xbd, 0xb3, 0x63, 0x78, 0x2e, 0x71, 0x8e, 0xba, 0x45, 0x1d, 0xef, 0x13, 0x64, 0x13, + 0xc7, 0x34, 0x5c, 0x97, 0x07, 0x26, 0xa3, 0x08, 0x57, 0x2a, 0xc4, 0x75, 0x63, 0xdd, 0xa5, 0xa0, + 0xbd, 0x40, 0x0f, 0x1a, 0xd6, 0x6e, 0x00, 0x79, 0x65, 0xe9, 0x32, 0x2c, 0x81, 0x89, 0xad, 0xd7, + 0x4c, 0x84, 0x11, 0x23, 0xd8, 0xa6, 0xac, 0x00, 0x17, 0x41, 0x21, 0xdb, 0xd7, 0xe3, 0xdb, 0xc3, + 0xef, 0xa7, 0xc0, 0x14, 0x18, 0x5d, 0xc3, 0xae, 0x51, 0x11, 0xf3, 0x7f, 0x6a, 0x44, 0x02, 0x2f, + 0xc5, 0x6e, 0x04, 0x53, 0x23, 0xa9, 0xec, 0xe8, 0x87, 0xf9, 0xd2, 0xce, 0x56, 0xfe, 0x26, 0x69, + 0xa2, 0x14, 0xf8, 0x52, 0x6a, 0xdf, 0x10, 0x7e, 0x2b, 0x8d, 0xc8, 0x4a, 0xba, 0xf8, 0x4a, 0xe8, + 0xc3, 0x88, 0xc3, 0x55, 0x8a, 0x3d, 0x56, 0x57, 0xf9, 0x1f, 0xea, 0x18, 0xff, 0x47, 0x56, 0xe7, + 0x7b, 0x03, 0x31, 0xba, 0x47, 0xac, 0xb5, 0x6f, 0x82, 0xac, 0x7f, 0xe1, 0x80, 0xf0, 0xba, 0x83, + 0x2d, 0xe6, 0x22, 0xbe, 0x08, 0xac, 0x07, 0xe6, 0x82, 0x6b, 0x08, 0x9c, 0x09, 0x0e, 0xc5, 0x2a, + 0x3c, 0x5d, 0x07, 0x83, 0x58, 0x37, 0x0d, 0x0b, 0xae, 0xc6, 0x50, 0x2d, 0x3d, 0x06, 0x26, 0x9c, + 0xc1, 0xc1, 0x0c, 0x97, 0xf1, 0x4e, 0xb4, 0x4f, 0x90, 0x61, 0x55, 0xa9, 0x63, 0x0a, 0x7f, 0x97, + 0xe7, 0xc1, 0x44, 0xd4, 0x14, 0x03, 0xc9, 0xab, 0x51, 0xf9, 0xf5, 0x9e, 0x97, 0xa3, 0x24, 0xa8, + 0xb3, 0x05, 0xce, 0xde, 0x3e, 0xaa, 0x3e, 0xd1, 0x9c, 0xea, 0x37, 0x97, 0x1e, 0x8e, 0xb6, 0x3d, + 0x57, 0x1e, 0x12, 0xf9, 0xbc, 0xfc, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x89, 0x81, 0xa8, + 0xde, 0x23, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index ffa464680f8..dbb62a79a06 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -149,6 +149,9 @@ message ABitOfEverything { // Nested is nested type. message Nested { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + example: { value: '{ "ok": "TRUE" }' } + }; // name is nested field. string name = 1; uint32 amount = 2; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 1ca1a155d56..c85d1345f32 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1395,6 +1395,9 @@ "definitions": { "ABitOfEverythingNested": { "type": "object", + "example": { + "ok": "TRUE" + }, "properties": { "name": { "type": "string", From d1d8a9a4e3026825ff808fda38cc8dde6faaf179 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 12:40:47 +0100 Subject: [PATCH 0093/1518] protoc-gen-swagger/genswagger: update BUILD.bazel Signed-off-by: Stephan Renatus --- protoc-gen-swagger/genswagger/BUILD.bazel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 172330ad88f..683b5eeec06 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -30,7 +30,9 @@ go_test( deps = [ "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], From 20e8cf9fb34a4c43782226b3e0dd42913a5c0a9b Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Thu, 10 Jan 2019 12:58:35 +0100 Subject: [PATCH 0094/1518] examples/a_bit_of_everything: add more complex message example Signed-off-by: Stephan Renatus --- .../proto/examplepb/a_bit_of_everything.pb.go | 401 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 3 + .../a_bit_of_everything.swagger.json | 13 + 3 files changed, 218 insertions(+), 199 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 3b5727f2db2..bb0eb2d17c9 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -129,7 +129,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -467,7 +467,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{0, 0} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -536,7 +536,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{1} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -679,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{2} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -718,7 +718,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{3} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -765,7 +765,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_11870f281dcdb894, []int{4} + return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1529,195 +1529,198 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_11870f281dcdb894) -} - -var fileDescriptor_a_bit_of_everything_11870f281dcdb894 = []byte{ - // 2964 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, - 0xdd, 0x5a, 0x2e, 0xf5, 0x1a, 0xbd, 0xa8, 0x91, 0x1f, 0x32, 0xad, 0x44, 0x63, 0xc6, 0xf9, 0xb2, - 0x51, 0x42, 0xae, 0x44, 0x29, 0x8e, 0xad, 0x20, 0xf1, 0x47, 0x3d, 0x6c, 0x2b, 0xb6, 0x65, 0x79, - 0xed, 0xf8, 0x0b, 0xfc, 0x39, 0x11, 0x86, 0xdc, 0x21, 0xb9, 0x16, 0x77, 0x67, 0xb3, 0x3b, 0x2b, - 0x9b, 0x9f, 0x3e, 0xb6, 0x69, 0x0b, 0xb4, 0x68, 0x73, 0x28, 0xa0, 0xb4, 0x97, 0xa2, 0xe8, 0x5f, - 0xd0, 0x6b, 0x4f, 0x39, 0xb4, 0x3d, 0xf4, 0xd4, 0x5b, 0x5b, 0x04, 0x28, 0x0a, 0xf4, 0xd2, 0x16, - 0xe8, 0x5f, 0xd0, 0xa2, 0xe8, 0xa5, 0x98, 0xd9, 0x5d, 0x6a, 0x77, 0x49, 0x5a, 0xa6, 0x1c, 0xe4, - 0x22, 0xed, 0xcc, 0xfc, 0xde, 0xef, 0x19, 0x82, 0x22, 0x79, 0x8a, 0x4d, 0xbb, 0x41, 0x5c, 0xd5, - 0x76, 0x28, 0xa3, 0x6a, 0xb0, 0xb4, 0xcb, 0x2a, 0xde, 0x2d, 0x1b, 0x6c, 0x97, 0x56, 0x77, 0xc9, - 0x3e, 0x71, 0x9a, 0xac, 0x6e, 0x58, 0xb5, 0x82, 0x80, 0x81, 0xf3, 0x35, 0xc7, 0xae, 0x14, 0x6a, - 0x98, 0x91, 0x27, 0xb8, 0x59, 0x08, 0x09, 0x14, 0xda, 0xa8, 0xd9, 0xb9, 0x1a, 0xa5, 0xb5, 0x06, - 0x51, 0xb1, 0x6d, 0xa8, 0xd8, 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xa3, 0x67, 0x51, 0x70, - 0x2a, 0x56, 0x65, 0xaf, 0xaa, 0x56, 0x0d, 0xd2, 0xd0, 0x77, 0x4d, 0xec, 0xee, 0x05, 0x10, 0xe7, - 0x93, 0x10, 0xc4, 0xb4, 0x59, 0x33, 0x38, 0x7c, 0x39, 0x79, 0xa8, 0x7b, 0x8e, 0xa0, 0x1f, 0x9c, - 0xbf, 0x96, 0xd0, 0xc8, 0xc6, 0xac, 0x4e, 0x2c, 0xcf, 0x14, 0x1f, 0xbb, 0xfc, 0x2b, 0x94, 0x23, - 0x01, 0xe8, 0x7a, 0x65, 0xd5, 0x24, 0xae, 0x8b, 0x6b, 0x24, 0x80, 0xb8, 0xd0, 0x09, 0x51, 0x4c, - 0x80, 0xcc, 0x27, 0xa5, 0x61, 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x00, 0x78, 0x53, 0xfc, 0xab, - 0xe4, 0x6b, 0xc4, 0xca, 0xbb, 0x4f, 0x70, 0xad, 0x46, 0x1c, 0x95, 0xda, 0xc2, 0x1e, 0x9d, 0xb6, - 0xc9, 0xfd, 0xf8, 0x14, 0xc8, 0x94, 0xd6, 0x0c, 0x76, 0xa7, 0xba, 0xd9, 0xb6, 0x3a, 0xfc, 0x08, - 0x4c, 0xb8, 0x86, 0x55, 0x6b, 0x90, 0x5d, 0x8b, 0xb8, 0x8c, 0xe8, 0xb3, 0xe7, 0x90, 0xa4, 0x8c, - 0x15, 0x2f, 0x17, 0x8e, 0xf1, 0x43, 0x21, 0x49, 0xa9, 0xb0, 0x2d, 0xf0, 0xb5, 0x71, 0x9f, 0x9c, - 0xbf, 0x82, 0x75, 0x90, 0xf6, 0x3c, 0x43, 0x9f, 0x95, 0x90, 0xa4, 0x8c, 0xae, 0xdd, 0x3f, 0x2c, - 0xdd, 0xfd, 0x54, 0x92, 0x7e, 0x20, 0xdd, 0xfc, 0x5f, 0x9c, 0xaf, 0x96, 0xf2, 0xd7, 0x16, 0xf3, - 0x57, 0x3e, 0x3a, 0xb8, 0xdc, 0xca, 0x47, 0x97, 0x2b, 0xfd, 0x2c, 0x97, 0x8a, 0x2d, 0x4d, 0x70, - 0x80, 0x3b, 0x60, 0x28, 0xd0, 0x20, 0x85, 0xe4, 0x17, 0xd2, 0x20, 0xa0, 0x03, 0xe7, 0xc1, 0x58, - 0xb5, 0x41, 0x31, 0xdb, 0xdd, 0xc7, 0x0d, 0x8f, 0xcc, 0xca, 0x48, 0x52, 0x52, 0x1a, 0x10, 0x5b, - 0x0f, 0xf8, 0x0e, 0xbc, 0x00, 0xc6, 0x75, 0xea, 0x95, 0x1b, 0x24, 0x80, 0x48, 0x23, 0x49, 0x91, - 0xb4, 0x31, 0x7f, 0xcf, 0x07, 0x99, 0x07, 0x63, 0x86, 0xc5, 0x2e, 0xad, 0x04, 0x10, 0x83, 0x48, - 0x52, 0x64, 0x0d, 0x88, 0xad, 0x36, 0x0d, 0x2f, 0x0a, 0x31, 0x84, 0x24, 0x25, 0xad, 0x8d, 0x79, - 0x11, 0x10, 0x9f, 0xc6, 0x72, 0x31, 0x80, 0x18, 0x46, 0x92, 0x32, 0x28, 0x68, 0x2c, 0x17, 0x7d, - 0x80, 0x57, 0xc0, 0x44, 0xd5, 0x78, 0x4a, 0xf4, 0x36, 0x91, 0x11, 0x24, 0x29, 0x43, 0xda, 0x78, - 0xb0, 0x19, 0x07, 0x6a, 0xd3, 0x19, 0x45, 0x92, 0x32, 0x1c, 0x00, 0x85, 0x94, 0x5e, 0x02, 0xa0, - 0x4c, 0x69, 0x23, 0x80, 0x00, 0x48, 0x52, 0x46, 0xb4, 0x51, 0xbe, 0xd3, 0x16, 0xd6, 0x65, 0x8e, - 0x61, 0xd5, 0x02, 0x80, 0x31, 0xee, 0x55, 0x6d, 0xcc, 0xdf, 0x6b, 0x0b, 0x5b, 0x6e, 0x32, 0xe2, - 0x06, 0x10, 0x2f, 0x21, 0x49, 0x19, 0xd7, 0x80, 0xd8, 0x8a, 0x29, 0xdc, 0x16, 0x63, 0x02, 0x49, - 0xca, 0x84, 0xaf, 0x70, 0x28, 0xc5, 0x4d, 0x00, 0x78, 0x2a, 0x05, 0x00, 0x93, 0x48, 0x52, 0x26, - 0x8b, 0x6f, 0x1e, 0xeb, 0xce, 0x6d, 0xcf, 0x24, 0x8e, 0x51, 0xd9, 0xb4, 0x3c, 0x53, 0x1b, 0xe5, - 0xf8, 0x3e, 0xb1, 0x1d, 0x30, 0xd5, 0x4e, 0xce, 0x80, 0xe2, 0xcb, 0x82, 0xa2, 0xd2, 0x83, 0x62, - 0x98, 0xd3, 0x85, 0x1d, 0xcc, 0xea, 0x82, 0xda, 0x84, 0x1d, 0x7c, 0xf9, 0x14, 0x5d, 0x70, 0xc6, - 0x8f, 0x90, 0xdd, 0x24, 0xe1, 0x79, 0x41, 0xf8, 0xbd, 0xe3, 0x08, 0xdf, 0xf6, 0xb3, 0x3c, 0xa4, - 0x1f, 0xc4, 0x5d, 0x9b, 0xdd, 0x8c, 0x15, 0x5b, 0xfb, 0x4c, 0x5f, 0x05, 0x93, 0x6e, 0xdc, 0x7f, - 0x53, 0x48, 0x52, 0xa6, 0xb4, 0x09, 0x37, 0xe6, 0xc0, 0x36, 0x58, 0x3b, 0x16, 0x32, 0x48, 0x52, - 0x32, 0x21, 0x58, 0x24, 0xea, 0xdc, 0xa8, 0x13, 0xa6, 0x91, 0xa4, 0x4c, 0x6b, 0x63, 0x6e, 0xc4, - 0x09, 0x01, 0x48, 0x9b, 0x0e, 0x44, 0x92, 0x02, 0x7d, 0x90, 0x90, 0x4a, 0x11, 0x9c, 0x76, 0x88, - 0x4d, 0x30, 0x37, 0x45, 0x2c, 0x2e, 0x66, 0x90, 0xac, 0x8c, 0x6a, 0x33, 0xe1, 0xe1, 0xbd, 0x48, - 0x7c, 0x5c, 0x01, 0x63, 0xd4, 0x22, 0xbc, 0xf2, 0xf3, 0xb2, 0x3b, 0x7b, 0x4a, 0x54, 0x9b, 0x33, - 0x05, 0xbf, 0xd2, 0x15, 0xc2, 0x4a, 0x57, 0xd8, 0xe4, 0xa7, 0x37, 0x06, 0x34, 0x20, 0x80, 0xc5, - 0x0a, 0xbe, 0x02, 0xc6, 0x7d, 0x54, 0x9f, 0xd7, 0xec, 0x69, 0x1e, 0x7d, 0x37, 0x06, 0x34, 0x9f, - 0xa0, 0xcf, 0x04, 0x3e, 0x02, 0xa3, 0x26, 0xb6, 0x03, 0x39, 0xce, 0x88, 0x4a, 0x70, 0xb5, 0xff, - 0x4a, 0x70, 0x1b, 0xdb, 0x42, 0xdc, 0x4d, 0x8b, 0x39, 0x4d, 0x6d, 0xc4, 0x0c, 0x96, 0xf0, 0x29, - 0x98, 0x31, 0xb1, 0x6d, 0x27, 0xf5, 0x3d, 0x2b, 0xf8, 0xdc, 0x38, 0x11, 0x1f, 0x3b, 0x66, 0x1f, - 0x9f, 0xe1, 0xb4, 0x99, 0xdc, 0x8f, 0x70, 0x0e, 0x62, 0xcf, 0xe7, 0x3c, 0xfb, 0x62, 0x9c, 0xfd, - 0xc8, 0xeb, 0xe4, 0x1c, 0xd9, 0x87, 0xab, 0x60, 0xd6, 0xa2, 0xd6, 0x3a, 0xb5, 0xf6, 0x89, 0xc5, - 0xdb, 0x09, 0x6e, 0x6c, 0x63, 0xd3, 0x2f, 0x6f, 0xb3, 0x59, 0x51, 0x00, 0x7a, 0x9e, 0xc3, 0x75, - 0x30, 0xd5, 0xee, 0x59, 0x81, 0xc4, 0xe7, 0x85, 0xc7, 0xb3, 0x1d, 0x1e, 0xbf, 0x1f, 0xc2, 0x69, - 0x93, 0x6d, 0x14, 0x9f, 0xc8, 0x23, 0xd0, 0x8e, 0xa4, 0x68, 0xb2, 0xcd, 0x21, 0xb9, 0xef, 0xba, - 0x30, 0x1d, 0x12, 0x6a, 0x27, 0x56, 0xf6, 0xd7, 0x12, 0x18, 0x0a, 0x9a, 0x15, 0x04, 0x69, 0x0b, - 0x9b, 0xc4, 0x6f, 0x56, 0x9a, 0xf8, 0x86, 0x67, 0xc0, 0x10, 0x36, 0xa9, 0x67, 0xb1, 0xd9, 0x94, - 0x28, 0x54, 0xc1, 0x0a, 0xde, 0x05, 0x29, 0xba, 0x27, 0x7a, 0xc2, 0x64, 0xb1, 0x74, 0xd2, 0x56, - 0x53, 0xd8, 0x20, 0xc4, 0x16, 0x82, 0xa5, 0xe8, 0x5e, 0x6e, 0x1e, 0x8c, 0x84, 0x6b, 0x38, 0x0a, - 0x06, 0xaf, 0x95, 0x6e, 0xdd, 0xdb, 0xcc, 0x0c, 0xc0, 0x11, 0x90, 0xbe, 0xaf, 0x7d, 0xb0, 0x99, - 0x91, 0x56, 0xcf, 0x1e, 0x96, 0x4e, 0x15, 0x21, 0xcc, 0x1c, 0xa0, 0x1c, 0xdd, 0xcb, 0xad, 0xa2, - 0x1c, 0xdf, 0xcf, 0xa1, 0x56, 0xd6, 0x00, 0x13, 0xb1, 0x88, 0x85, 0x19, 0x20, 0xef, 0x91, 0x66, - 0xa0, 0x08, 0xff, 0x84, 0x6b, 0x60, 0xd0, 0x37, 0x5b, 0xea, 0x04, 0xe5, 0xd4, 0x47, 0x5d, 0x4d, - 0x5d, 0x96, 0xb2, 0x1b, 0xe0, 0x4c, 0xf7, 0xa0, 0xed, 0xc2, 0xf3, 0x54, 0x94, 0xe7, 0x68, 0x94, - 0xca, 0x37, 0x42, 0x2a, 0xc9, 0x00, 0xec, 0x42, 0x65, 0x3b, 0x4a, 0xe5, 0x45, 0xfa, 0xfa, 0x11, - 0xff, 0xd5, 0x7f, 0x4b, 0x87, 0xa5, 0x7f, 0x4a, 0xa0, 0xb6, 0x30, 0x53, 0x42, 0x65, 0x83, 0x21, - 0x5a, 0x45, 0x47, 0x93, 0x68, 0x71, 0x6b, 0xcb, 0x62, 0x61, 0x2c, 0x37, 0x51, 0x85, 0x9a, 0x76, - 0xc3, 0xa8, 0xf0, 0xa8, 0x41, 0xc1, 0x7c, 0x86, 0x58, 0xd3, 0x26, 0x88, 0x51, 0x54, 0xa1, 0xfb, - 0xc4, 0x41, 0x26, 0xb6, 0x9a, 0xa8, 0x4a, 0x30, 0xf3, 0x1c, 0xe2, 0x72, 0x5a, 0x3b, 0x61, 0x50, - 0xff, 0x4e, 0x12, 0xc3, 0xc9, 0xc2, 0x03, 0x70, 0xf1, 0x9a, 0x61, 0xe9, 0x88, 0x7a, 0x0c, 0x99, - 0xd4, 0x21, 0x08, 0x97, 0xf9, 0x67, 0xc7, 0x34, 0x56, 0xa8, 0x33, 0x66, 0xbb, 0xab, 0xaa, 0x5a, - 0x33, 0x58, 0xdd, 0x2b, 0x17, 0x2a, 0xd4, 0x54, 0xb9, 0xba, 0x79, 0x52, 0xa1, 0x6e, 0xd3, 0x65, - 0x24, 0x58, 0x06, 0xda, 0x17, 0x57, 0x60, 0xf1, 0x00, 0xe5, 0x38, 0x0b, 0x1e, 0x0e, 0x8b, 0x95, - 0xea, 0xf2, 0xa5, 0x25, 0xb2, 0x94, 0x5f, 0x29, 0xaf, 0xac, 0xe4, 0x57, 0x2e, 0x2f, 0xeb, 0x79, - 0xbc, 0xf4, 0xd6, 0x95, 0xfc, 0x5b, 0x2b, 0x3a, 0x2e, 0xeb, 0xd5, 0xb7, 0xc9, 0xe5, 0xa5, 0x95, - 0x1c, 0x6a, 0xad, 0x4d, 0x84, 0x35, 0x58, 0x18, 0x24, 0xf7, 0xa3, 0x11, 0x30, 0x9b, 0x94, 0x44, - 0x0b, 0xf2, 0x04, 0x5e, 0x01, 0xe7, 0x44, 0x97, 0x6b, 0x67, 0x60, 0x74, 0x24, 0x92, 0x90, 0xac, - 0xa4, 0xb4, 0x33, 0x1c, 0x20, 0x44, 0xb8, 0x76, 0x34, 0x1e, 0xbd, 0x03, 0xb2, 0x71, 0xd4, 0xd8, - 0xb0, 0xc4, 0xa7, 0x34, 0x49, 0x3b, 0x1b, 0xc5, 0xdd, 0x88, 0x0c, 0x4e, 0x1d, 0x7c, 0xa3, 0xbd, - 0x48, 0x46, 0xb2, 0x22, 0xc7, 0xf9, 0x6e, 0x1d, 0xb5, 0xa5, 0x0e, 0xbe, 0xb1, 0x01, 0x2b, 0x8d, - 0x64, 0x25, 0x1d, 0xe7, 0xfb, 0x41, 0xa4, 0xa7, 0x75, 0xe3, 0xdb, 0x6e, 0x93, 0x83, 0x48, 0x56, - 0x06, 0x3b, 0xf8, 0x86, 0x1d, 0xf3, 0x5d, 0x70, 0x3e, 0x61, 0xaa, 0x58, 0x23, 0x1e, 0x42, 0xb2, - 0x32, 0xa4, 0xcd, 0xc6, 0x8c, 0x15, 0xed, 0xc9, 0xdd, 0xd1, 0x23, 0x63, 0x9f, 0xac, 0x0c, 0x77, - 0x41, 0x0f, 0xb9, 0xbf, 0x0d, 0x66, 0xe3, 0xe8, 0x91, 0x41, 0x6e, 0x04, 0xc9, 0xca, 0x88, 0x76, - 0x3a, 0x8a, 0xbb, 0xd6, 0x1e, 0xea, 0x3a, 0xcc, 0x15, 0x6b, 0x6d, 0xa3, 0xa2, 0x95, 0xc7, 0xcc, - 0x15, 0x6f, 0xe7, 0x09, 0x73, 0x45, 0x87, 0x3f, 0x80, 0x64, 0x65, 0x3c, 0x6e, 0xae, 0xb5, 0xa3, - 0x41, 0xb0, 0xab, 0x9b, 0xda, 0xea, 0x8e, 0x21, 0x59, 0x99, 0xe8, 0x74, 0x53, 0xa8, 0x2d, 0x49, - 0x6a, 0x1b, 0x69, 0x0c, 0xe3, 0x27, 0x68, 0x0c, 0x31, 0xdb, 0x1c, 0x4d, 0x5d, 0x57, 0xc1, 0x5c, - 0xc2, 0x36, 0x71, 0xa7, 0x4c, 0x20, 0x59, 0x99, 0xd2, 0xce, 0xc5, 0xac, 0x13, 0x9b, 0xc7, 0x7a, - 0x10, 0x68, 0x07, 0xc5, 0x24, 0x92, 0x95, 0x4c, 0x37, 0x02, 0x3d, 0x83, 0x39, 0x36, 0xb7, 0x4d, - 0x21, 0x59, 0x99, 0x4e, 0x78, 0x27, 0x62, 0xa5, 0xae, 0xc8, 0x91, 0xc9, 0x50, 0x56, 0x60, 0x27, - 0x72, 0xc0, 0x39, 0x97, 0x05, 0xe9, 0x35, 0xaa, 0x37, 0xbb, 0x75, 0xc5, 0xdc, 0x23, 0x30, 0x15, - 0x0c, 0xb1, 0xff, 0x63, 0xb0, 0xba, 0x00, 0x9b, 0x04, 0xa9, 0xf0, 0x9e, 0xa7, 0xa5, 0x0c, 0x5e, - 0x38, 0xd2, 0x3a, 0x66, 0x38, 0xa8, 0xda, 0xaf, 0x1e, 0xeb, 0x0d, 0x4e, 0x44, 0x13, 0x28, 0xb9, - 0xcf, 0x25, 0x30, 0xf5, 0x81, 0xad, 0x63, 0x46, 0x1e, 0x14, 0x35, 0xf2, 0x89, 0x47, 0x5c, 0x06, - 0xd7, 0x81, 0x8c, 0xcb, 0xbe, 0x10, 0x63, 0xc5, 0xa5, 0xbe, 0x7b, 0x80, 0xc6, 0xb1, 0xe1, 0x3b, - 0x60, 0xcc, 0x13, 0x74, 0xc5, 0x83, 0x40, 0x20, 0x5a, 0xe7, 0x28, 0x72, 0xcd, 0x20, 0x0d, 0xfd, - 0x36, 0x76, 0xf7, 0x34, 0xe0, 0x83, 0xf3, 0xef, 0x05, 0x04, 0xc6, 0x22, 0x11, 0xc3, 0xdb, 0xf2, - 0xc3, 0x4d, 0xed, 0x4e, 0x66, 0x00, 0x0e, 0x03, 0xf9, 0xce, 0xf6, 0x66, 0x46, 0x2a, 0xfe, 0x71, - 0x0e, 0x9c, 0x4d, 0x32, 0xbe, 0x47, 0x9c, 0x7d, 0xa3, 0x42, 0xe0, 0x97, 0x32, 0x18, 0x5a, 0x77, - 0xb8, 0x91, 0x61, 0xff, 0xd2, 0x67, 0xfb, 0x47, 0xc9, 0xfd, 0x2d, 0xf5, 0xed, 0xdf, 0xff, 0xf5, - 0xf3, 0xd4, 0x9f, 0x53, 0xb9, 0x3f, 0xa5, 0xd4, 0xfd, 0xa5, 0xf0, 0xf1, 0xa5, 0xdb, 0xd3, 0x8b, - 0x7a, 0x10, 0x29, 0xea, 0x2d, 0xf5, 0x20, 0x5a, 0xa7, 0x5b, 0xea, 0x41, 0x24, 0x66, 0x5a, 0xaa, - 0x4b, 0x6c, 0xec, 0x60, 0x46, 0x1d, 0xf5, 0xc0, 0x8b, 0x1d, 0x1c, 0x44, 0xe2, 0xb2, 0xa5, 0x1e, - 0xc4, 0xc2, 0x3c, 0x5c, 0x47, 0xce, 0x8f, 0xaa, 0x53, 0x4b, 0x3d, 0x88, 0x56, 0x9c, 0x77, 0x5d, - 0xe6, 0xd8, 0x0e, 0xa9, 0x1a, 0x4f, 0xd5, 0x85, 0x96, 0xcf, 0x24, 0x82, 0xe6, 0x26, 0xe9, 0xb8, - 0x49, 0x46, 0x6e, 0x02, 0x21, 0x2e, 0x64, 0xaf, 0x49, 0xb5, 0xa5, 0x1e, 0x1c, 0x55, 0x90, 0x96, - 0x7a, 0x90, 0xb8, 0xd9, 0x71, 0xcc, 0xae, 0x57, 0xbe, 0x16, 0xfc, 0x99, 0x04, 0x80, 0xef, 0x58, - 0x91, 0x06, 0x5f, 0x8f, 0x73, 0x17, 0x84, 0x6f, 0x2f, 0xe6, 0xe6, 0x8f, 0xf1, 0xec, 0xaa, 0xb4, - 0x00, 0xff, 0x1f, 0x0c, 0xdd, 0xa2, 0x74, 0xcf, 0xb3, 0xe1, 0x54, 0xc1, 0xf5, 0xca, 0xc5, 0xc2, - 0x96, 0x1e, 0xe4, 0xee, 0x49, 0x38, 0x17, 0x04, 0x67, 0x05, 0xfe, 0xd7, 0xb1, 0x31, 0xc5, 0xa7, - 0x92, 0x16, 0xfc, 0xae, 0x04, 0x86, 0xfc, 0x5c, 0x3e, 0x89, 0x69, 0x7a, 0x5c, 0x0c, 0x73, 0x4b, - 0x42, 0x8a, 0x37, 0xb2, 0xcf, 0x29, 0x05, 0x37, 0xc3, 0xaf, 0x24, 0x30, 0x12, 0x16, 0x15, 0xb8, - 0x78, 0xac, 0x28, 0x89, 0xfa, 0xd3, 0x53, 0x92, 0xc7, 0x42, 0x12, 0x3d, 0xbb, 0xa0, 0xee, 0x17, - 0x9f, 0x2d, 0x09, 0x2e, 0x93, 0x82, 0x2f, 0x0d, 0xaf, 0x45, 0x0f, 0x97, 0x8a, 0xfd, 0xa2, 0xc0, - 0x9f, 0x4a, 0x60, 0x76, 0x07, 0xb3, 0x4a, 0x9d, 0x17, 0xdd, 0x76, 0x91, 0xda, 0xb2, 0x44, 0xe0, - 0x7d, 0x75, 0x2a, 0x5d, 0x12, 0x2a, 0x2d, 0x16, 0xdf, 0x50, 0xf7, 0x8b, 0xf8, 0x79, 0x05, 0x94, - 0x16, 0xe0, 0x0f, 0x25, 0x30, 0xb4, 0x41, 0x1a, 0x84, 0x91, 0xce, 0x48, 0xeb, 0xc5, 0xeb, 0xd1, - 0x61, 0xe9, 0x8d, 0xf2, 0xeb, 0x60, 0x12, 0x80, 0x92, 0x6d, 0xdc, 0x24, 0xcd, 0x92, 0xc7, 0xea, - 0x70, 0x00, 0x9c, 0x05, 0x43, 0x77, 0xf8, 0x67, 0x11, 0x4e, 0x80, 0xb4, 0x43, 0xb0, 0x0e, 0x06, - 0x9f, 0x38, 0x06, 0x23, 0x7e, 0xf0, 0x2d, 0x3c, 0x6f, 0xf0, 0xfd, 0x45, 0x02, 0x23, 0xd7, 0x09, - 0xbb, 0xeb, 0x11, 0xa7, 0xf9, 0x55, 0x86, 0xdf, 0x67, 0xd2, 0x61, 0xe9, 0x7e, 0x6e, 0x1b, 0xcc, - 0x75, 0x1b, 0xea, 0xdb, 0x0c, 0xfb, 0x1c, 0xe6, 0x3f, 0x94, 0xca, 0x03, 0x42, 0xbf, 0x02, 0x7c, - 0xf3, 0x38, 0xfd, 0x3e, 0xe1, 0x0c, 0x42, 0x2d, 0x3f, 0x1b, 0x04, 0x99, 0xeb, 0x84, 0x85, 0x3d, - 0xdc, 0x67, 0x7e, 0xa5, 0xff, 0x16, 0x19, 0xe0, 0x67, 0x4f, 0x8e, 0x9a, 0xfb, 0x34, 0x2d, 0x34, - 0xf8, 0x97, 0x0c, 0xff, 0x21, 0x1f, 0xa3, 0x43, 0x7b, 0x28, 0x09, 0x8a, 0x6d, 0xb7, 0x0b, 0x46, - 0x2b, 0x79, 0x96, 0xe8, 0x4c, 0x3d, 0x6f, 0x08, 0x1d, 0x67, 0xde, 0xb3, 0x0e, 0xe3, 0x1d, 0xe3, - 0x19, 0x33, 0x7c, 0xf7, 0xd3, 0x9e, 0xb8, 0xb1, 0x1e, 0xd7, 0x7b, 0xc6, 0xee, 0xc4, 0x3b, 0x9a, - 0xa1, 0xbb, 0x2a, 0xd2, 0x93, 0x61, 0x67, 0x0b, 0xeb, 0x31, 0xb8, 0xf6, 0x38, 0xee, 0xa9, 0xa7, - 0xfb, 0x2c, 0xae, 0xb1, 0x16, 0x0b, 0x7f, 0x23, 0x83, 0xf4, 0x66, 0xa5, 0x4e, 0x61, 0xaf, 0xf7, - 0x55, 0xd7, 0x2b, 0x17, 0xfc, 0x2b, 0x44, 0x58, 0x1c, 0x9e, 0x1b, 0x32, 0xf7, 0xf7, 0xd4, 0x61, - 0xe9, 0x5b, 0x29, 0x30, 0x4e, 0x2a, 0x75, 0x8a, 0x5c, 0x7f, 0xb4, 0x02, 0x23, 0x62, 0xe5, 0xd8, - 0x15, 0x38, 0x7d, 0xcf, 0x33, 0x4d, 0xec, 0x34, 0x57, 0xd1, 0x66, 0xb0, 0x95, 0xcd, 0x6c, 0x10, - 0xb7, 0xe2, 0x18, 0xe2, 0x47, 0x11, 0xb1, 0x9b, 0xdb, 0x00, 0x30, 0x9e, 0xb6, 0x42, 0xda, 0x3e, - 0x93, 0xf5, 0xfd, 0xab, 0x40, 0x7e, 0x6b, 0x71, 0x19, 0x5e, 0x06, 0x97, 0x34, 0xc2, 0x3c, 0xc7, - 0x22, 0x3a, 0x7a, 0x52, 0x27, 0x16, 0x62, 0x75, 0x82, 0x1c, 0xe2, 0x52, 0xcf, 0xa9, 0x10, 0x64, - 0xb8, 0x88, 0x11, 0xd3, 0xa6, 0x0e, 0x76, 0x8c, 0x46, 0x13, 0x79, 0x16, 0xde, 0xc7, 0x46, 0x03, - 0x97, 0x1b, 0xa4, 0xf0, 0xfe, 0x3b, 0x40, 0x5e, 0x59, 0x5c, 0x81, 0x2b, 0x60, 0xe1, 0x19, 0x04, - 0x74, 0x4a, 0x5c, 0x64, 0x51, 0x86, 0xc8, 0x53, 0xc3, 0x65, 0x05, 0x38, 0x04, 0xd2, 0x3f, 0x49, - 0x49, 0xb2, 0x48, 0xb2, 0x8f, 0x8e, 0x2f, 0x13, 0xdc, 0x30, 0xea, 0x81, 0xef, 0x98, 0x87, 0xe7, - 0x72, 0x99, 0x68, 0xc3, 0xe1, 0x67, 0xab, 0xfe, 0x93, 0xc8, 0x43, 0x08, 0x3b, 0x8e, 0xe0, 0x2f, - 0x24, 0x30, 0xbe, 0x41, 0x88, 0x2d, 0x9e, 0xa1, 0xf9, 0xc6, 0xd7, 0x33, 0xd9, 0x5c, 0x15, 0xba, - 0x5d, 0xc9, 0xad, 0x1c, 0x5b, 0xe2, 0x63, 0x3f, 0x5b, 0x15, 0xf8, 0xb5, 0x44, 0x74, 0xa1, 0x12, - 0x00, 0xdb, 0x74, 0xcd, 0xb0, 0x74, 0xc3, 0xaa, 0xb9, 0xf0, 0x5c, 0x47, 0x05, 0xdf, 0x08, 0x7e, - 0xd1, 0xeb, 0x59, 0xdc, 0x07, 0xe0, 0x03, 0x30, 0x7c, 0xdf, 0x30, 0x09, 0xf5, 0x18, 0xec, 0x01, - 0xd4, 0x13, 0xf9, 0xbc, 0x10, 0xff, 0x34, 0x9c, 0x89, 0xda, 0x93, 0x05, 0xc4, 0xea, 0x20, 0xb3, - 0xe9, 0x38, 0xd4, 0xe1, 0xed, 0x7b, 0x83, 0x30, 0x6c, 0x34, 0xdc, 0xbe, 0x19, 0x5c, 0x14, 0x0c, - 0x5e, 0x86, 0x73, 0x31, 0x87, 0x71, 0xaa, 0x4f, 0x0c, 0x56, 0xd7, 0x03, 0xaa, 0xdf, 0x93, 0x00, - 0xbc, 0x4e, 0x58, 0xf2, 0x8e, 0x76, 0xfc, 0x8c, 0x90, 0xc0, 0xe8, 0x29, 0xc6, 0x6b, 0x42, 0x8c, - 0x0b, 0xb9, 0x73, 0x51, 0x31, 0xb8, 0x04, 0x65, 0xaa, 0x37, 0xd5, 0x03, 0x3e, 0x11, 0x88, 0xbb, - 0x1c, 0xfc, 0x8e, 0x04, 0xa6, 0x77, 0xa8, 0xcb, 0x38, 0x45, 0x81, 0x2a, 0x04, 0x79, 0xbe, 0xeb, - 0x60, 0x4f, 0xee, 0xaa, 0xe0, 0xfe, 0x7a, 0xee, 0x62, 0x94, 0xbb, 0x4d, 0x5d, 0xc6, 0x25, 0x10, - 0x3f, 0x2c, 0xf8, 0x62, 0x84, 0x41, 0x91, 0xfd, 0xa5, 0x74, 0x58, 0xfa, 0x42, 0x82, 0xd5, 0x1e, - 0xb7, 0x33, 0xa4, 0x47, 0x8a, 0x44, 0x3e, 0x8f, 0x9e, 0xd4, 0x8d, 0x4a, 0x1d, 0xb9, 0x75, 0xea, - 0x35, 0x74, 0x91, 0x7e, 0x65, 0x82, 0x3c, 0x97, 0xe8, 0xc8, 0xb0, 0x90, 0xdd, 0xc0, 0x15, 0x82, - 0x68, 0x55, 0x24, 0xaa, 0x4e, 0x2b, 0x9e, 0x49, 0x2c, 0xff, 0x77, 0x56, 0x54, 0xa1, 0x26, 0x5f, - 0x5c, 0xc8, 0xde, 0x05, 0xf3, 0xdd, 0x26, 0x03, 0x9e, 0x46, 0xe1, 0x7d, 0xb0, 0xdf, 0x97, 0xbe, - 0xc7, 0xe0, 0x54, 0x05, 0x9b, 0xa4, 0xb1, 0x8e, 0x5d, 0x12, 0xd0, 0xe0, 0x97, 0x17, 0xa8, 0x81, - 0x41, 0xff, 0xd7, 0x91, 0x7e, 0x03, 0xe9, 0x9c, 0xb0, 0xe1, 0x0c, 0x9c, 0x8e, 0x05, 0x12, 0x3f, - 0x2a, 0x7e, 0x0c, 0xe6, 0x4a, 0x16, 0x65, 0x75, 0xe2, 0x04, 0x9c, 0xb8, 0xf3, 0x22, 0x49, 0xf5, - 0x5e, 0x2c, 0xc5, 0xfa, 0x65, 0x3c, 0xb0, 0xf6, 0xc5, 0xf0, 0x61, 0xe9, 0xe7, 0xc3, 0xf0, 0x0f, - 0x12, 0x98, 0x29, 0xa1, 0x35, 0xff, 0xf9, 0x35, 0x52, 0x02, 0x3e, 0x04, 0xa7, 0x6a, 0xda, 0xce, - 0x7a, 0xfe, 0xba, 0xaf, 0x3a, 0xb2, 0x1d, 0xfa, 0x98, 0x54, 0x58, 0xbf, 0x26, 0xcb, 0x66, 0x2c, - 0x6a, 0x91, 0xff, 0x0e, 0x54, 0xe3, 0xd0, 0x0b, 0x1f, 0x83, 0x53, 0x6b, 0xf7, 0x36, 0xd0, 0x72, - 0x7e, 0xbd, 0x81, 0x3d, 0x97, 0xa0, 0x5b, 0x46, 0x85, 0x58, 0x2e, 0x81, 0xd7, 0xfa, 0xa3, 0xac, - 0x96, 0x1b, 0xb4, 0xac, 0x9a, 0xd8, 0x65, 0xc4, 0x51, 0x6f, 0x6d, 0xad, 0x6f, 0x6e, 0xdf, 0xdb, - 0x2c, 0xb0, 0xa7, 0xac, 0x28, 0x2f, 0x15, 0x16, 0x17, 0x64, 0x29, 0x95, 0x2e, 0x66, 0xb0, 0xed, - 0x3f, 0x1a, 0x1b, 0xd4, 0x52, 0x1f, 0xbb, 0xd4, 0x2a, 0x9e, 0x89, 0xee, 0x3c, 0xcd, 0x57, 0x29, - 0xcd, 0x9b, 0x86, 0x49, 0x56, 0x3b, 0x20, 0x57, 0x7b, 0x40, 0x6a, 0x3b, 0xbc, 0x63, 0x2c, 0xc3, - 0x2d, 0x70, 0xbd, 0xb3, 0x63, 0x78, 0x2e, 0x71, 0x8e, 0xba, 0x45, 0x1d, 0xef, 0x13, 0x64, 0x13, - 0xc7, 0x34, 0x5c, 0x97, 0x07, 0x26, 0xa3, 0x08, 0x57, 0x2a, 0xc4, 0x75, 0x63, 0xdd, 0xa5, 0xa0, - 0xbd, 0x40, 0x0f, 0x1a, 0xd6, 0x6e, 0x00, 0x79, 0x65, 0xe9, 0x32, 0x2c, 0x81, 0x89, 0xad, 0xd7, - 0x4c, 0x84, 0x11, 0x23, 0xd8, 0xa6, 0xac, 0x00, 0x17, 0x41, 0x21, 0xdb, 0xd7, 0xe3, 0xdb, 0xc3, - 0xef, 0xa7, 0xc0, 0x14, 0x18, 0x5d, 0xc3, 0xae, 0x51, 0x11, 0xf3, 0x7f, 0x6a, 0x44, 0x02, 0x2f, - 0xc5, 0x6e, 0x04, 0x53, 0x23, 0xa9, 0xec, 0xe8, 0x87, 0xf9, 0xd2, 0xce, 0x56, 0xfe, 0x26, 0x69, - 0xa2, 0x14, 0xf8, 0x52, 0x6a, 0xdf, 0x10, 0x7e, 0x2b, 0x8d, 0xc8, 0x4a, 0xba, 0xf8, 0x4a, 0xe8, - 0xc3, 0x88, 0xc3, 0x55, 0x8a, 0x3d, 0x56, 0x57, 0xf9, 0x1f, 0xea, 0x18, 0xff, 0x47, 0x56, 0xe7, - 0x7b, 0x03, 0x31, 0xba, 0x47, 0xac, 0xb5, 0x6f, 0x82, 0xac, 0x7f, 0xe1, 0x80, 0xf0, 0xba, 0x83, - 0x2d, 0xe6, 0x22, 0xbe, 0x08, 0xac, 0x07, 0xe6, 0x82, 0x6b, 0x08, 0x9c, 0x09, 0x0e, 0xc5, 0x2a, - 0x3c, 0x5d, 0x07, 0x83, 0x58, 0x37, 0x0d, 0x0b, 0xae, 0xc6, 0x50, 0x2d, 0x3d, 0x06, 0x26, 0x9c, - 0xc1, 0xc1, 0x0c, 0x97, 0xf1, 0x4e, 0xb4, 0x4f, 0x90, 0x61, 0x55, 0xa9, 0x63, 0x0a, 0x7f, 0x97, - 0xe7, 0xc1, 0x44, 0xd4, 0x14, 0x03, 0xc9, 0xab, 0x51, 0xf9, 0xf5, 0x9e, 0x97, 0xa3, 0x24, 0xa8, - 0xb3, 0x05, 0xce, 0xde, 0x3e, 0xaa, 0x3e, 0xd1, 0x9c, 0xea, 0x37, 0x97, 0x1e, 0x8e, 0xb6, 0x3d, - 0x57, 0x1e, 0x12, 0xf9, 0xbc, 0xfc, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x89, 0x81, 0xa8, - 0xde, 0x23, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_583e142cf4e91dc2) +} + +var fileDescriptor_a_bit_of_everything_583e142cf4e91dc2 = []byte{ + // 3012 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0x5b, 0x6f, 0x1b, 0xc7, + 0xb9, 0x5a, 0x2e, 0x75, 0x1b, 0xdd, 0xa8, 0x91, 0x2f, 0x32, 0xad, 0x44, 0x63, 0xc6, 0x39, 0xd9, + 0x28, 0x26, 0x57, 0xa2, 0x14, 0xc7, 0x66, 0x90, 0xf8, 0x50, 0x17, 0xdb, 0x8a, 0x6d, 0x59, 0x5e, + 0x3b, 0x3e, 0x81, 0x63, 0x47, 0x18, 0x92, 0x43, 0x72, 0x2d, 0xee, 0xce, 0x66, 0x77, 0x56, 0x36, + 0x0f, 0x0f, 0xcf, 0xc9, 0x69, 0x81, 0x16, 0x6d, 0x1e, 0x0a, 0x28, 0xe8, 0x4b, 0x51, 0xf4, 0x17, + 0xf4, 0xb5, 0x4f, 0x79, 0x68, 0xfb, 0xd0, 0xa7, 0xbe, 0xb5, 0x45, 0x80, 0xa2, 0x40, 0x5f, 0xda, + 0x02, 0xfd, 0x05, 0x2d, 0x8a, 0x02, 0x45, 0x31, 0xb3, 0xbb, 0xd4, 0xee, 0x92, 0xb4, 0x4c, 0x3b, + 0xc8, 0x8b, 0xb4, 0x33, 0xf3, 0xdd, 0xbf, 0x6f, 0xbe, 0xcb, 0x10, 0xe4, 0xc9, 0x53, 0x6c, 0x58, + 0x0d, 0xe2, 0xa8, 0x96, 0x4d, 0x19, 0x55, 0xfd, 0xa5, 0x55, 0x52, 0xf1, 0x5e, 0x49, 0x67, 0x7b, + 0xb4, 0xba, 0x47, 0x0e, 0x88, 0xdd, 0x64, 0x75, 0xdd, 0xac, 0xe5, 0x04, 0x0c, 0x5c, 0xac, 0xd9, + 0x56, 0x39, 0x57, 0xc3, 0x8c, 0x3c, 0xc1, 0xcd, 0x5c, 0x40, 0x20, 0xd7, 0x41, 0x4d, 0x2f, 0xd4, + 0x28, 0xad, 0x35, 0x88, 0x8a, 0x2d, 0x5d, 0xc5, 0xa6, 0x49, 0x19, 0x66, 0x3a, 0x35, 0x1d, 0x0f, + 0x3d, 0x8d, 0xfc, 0x53, 0xb1, 0x2a, 0xb9, 0x55, 0xb5, 0xaa, 0x93, 0x46, 0x65, 0xcf, 0xc0, 0xce, + 0xbe, 0x0f, 0x71, 0x36, 0x0e, 0x41, 0x0c, 0x8b, 0x35, 0xfd, 0xc3, 0x57, 0xe3, 0x87, 0x15, 0xd7, + 0x16, 0xf4, 0xfd, 0xf3, 0x37, 0x62, 0x1a, 0x59, 0x98, 0xd5, 0x89, 0xe9, 0x1a, 0xe2, 0x63, 0x8f, + 0x7f, 0x05, 0x72, 0xc4, 0x00, 0x1d, 0xb7, 0xa4, 0x1a, 0xc4, 0x71, 0x70, 0x8d, 0xf8, 0x10, 0xe7, + 0xba, 0x21, 0xf2, 0x31, 0x90, 0xc5, 0xb8, 0x34, 0x4c, 0x37, 0x88, 0xc3, 0xb0, 0x61, 0xf9, 0x00, + 0x17, 0xc4, 0xbf, 0x72, 0xb6, 0x46, 0xcc, 0xac, 0xf3, 0x04, 0xd7, 0x6a, 0xc4, 0x56, 0xa9, 0x25, + 0xec, 0xd1, 0x6d, 0x9b, 0xcc, 0x0f, 0x4f, 0x80, 0x54, 0x71, 0x5d, 0x67, 0xb7, 0xab, 0x5b, 0x1d, + 0xab, 0xc3, 0x47, 0x60, 0xca, 0xd1, 0xcd, 0x5a, 0x83, 0xec, 0x99, 0xc4, 0x61, 0xa4, 0x32, 0x7f, + 0x06, 0x49, 0xca, 0x44, 0xfe, 0x52, 0xee, 0x18, 0x3f, 0xe4, 0xe2, 0x94, 0x72, 0x3b, 0x02, 0x5f, + 0x9b, 0xf4, 0xc8, 0x79, 0x2b, 0x58, 0x07, 0x49, 0xd7, 0xd5, 0x2b, 0xf3, 0x12, 0x92, 0x94, 0xf1, + 0xf5, 0x7b, 0x87, 0xc5, 0x3b, 0x9f, 0x49, 0xd2, 0xf7, 0xa5, 0x1b, 0x1f, 0xe3, 0x6c, 0xb5, 0x98, + 0xbd, 0xba, 0x9c, 0xbd, 0xfc, 0xa8, 0x75, 0xa9, 0x9d, 0x0d, 0x2f, 0xd7, 0x06, 0x59, 0xae, 0xe4, + 0xdb, 0x9a, 0xe0, 0x00, 0x77, 0xc1, 0x88, 0xaf, 0x41, 0x02, 0xc9, 0x2f, 0xa5, 0x81, 0x4f, 0x07, + 0x2e, 0x82, 0x89, 0x6a, 0x83, 0x62, 0xb6, 0x77, 0x80, 0x1b, 0x2e, 0x99, 0x97, 0x91, 0xa4, 0x24, + 0x34, 0x20, 0xb6, 0xee, 0xf3, 0x1d, 0x78, 0x0e, 0x4c, 0x56, 0xa8, 0x5b, 0x6a, 0x10, 0x1f, 0x22, + 0x89, 0x24, 0x45, 0xd2, 0x26, 0xbc, 0x3d, 0x0f, 0x64, 0x11, 0x4c, 0xe8, 0x26, 0xbb, 0xb8, 0xe6, + 0x43, 0x0c, 0x23, 0x49, 0x91, 0x35, 0x20, 0xb6, 0x3a, 0x34, 0xdc, 0x30, 0xc4, 0x08, 0x92, 0x94, + 0xa4, 0x36, 0xe1, 0x86, 0x40, 0x3c, 0x1a, 0xab, 0x79, 0x1f, 0x62, 0x14, 0x49, 0xca, 0xb0, 0xa0, + 0xb1, 0x9a, 0xf7, 0x00, 0x5e, 0x03, 0x53, 0x55, 0xfd, 0x29, 0xa9, 0x74, 0x88, 0x8c, 0x21, 0x49, + 0x19, 0xd1, 0x26, 0xfd, 0xcd, 0x28, 0x50, 0x87, 0xce, 0x38, 0x92, 0x94, 0x51, 0x1f, 0x28, 0xa0, + 0xf4, 0x0a, 0x00, 0x25, 0x4a, 0x1b, 0x3e, 0x04, 0x40, 0x92, 0x32, 0xa6, 0x8d, 0xf3, 0x9d, 0x8e, + 0xb0, 0x0e, 0xb3, 0x75, 0xb3, 0xe6, 0x03, 0x4c, 0x70, 0xaf, 0x6a, 0x13, 0xde, 0x5e, 0x47, 0xd8, + 0x52, 0x93, 0x11, 0xc7, 0x87, 0x78, 0x05, 0x49, 0xca, 0xa4, 0x06, 0xc4, 0x56, 0x44, 0xe1, 0x8e, + 0x18, 0x53, 0x48, 0x52, 0xa6, 0x3c, 0x85, 0x03, 0x29, 0x6e, 0x00, 0xc0, 0xaf, 0x92, 0x0f, 0x30, + 0x8d, 0x24, 0x65, 0x3a, 0x7f, 0xe1, 0x58, 0x77, 0xee, 0xb8, 0x06, 0xb1, 0xf5, 0xf2, 0x96, 0xe9, + 0x1a, 0xda, 0x38, 0xc7, 0xf7, 0x88, 0xed, 0x82, 0x99, 0xce, 0xe5, 0xf4, 0x29, 0xbe, 0x2a, 0x28, + 0x2a, 0x7d, 0x28, 0x06, 0x77, 0x3a, 0xb7, 0x8b, 0x59, 0x5d, 0x50, 0x9b, 0xb2, 0xfc, 0x2f, 0x8f, + 0xa2, 0x03, 0x4e, 0x79, 0x11, 0xb2, 0x17, 0x27, 0xbc, 0x28, 0x08, 0xbf, 0x7f, 0x1c, 0xe1, 0x5b, + 0xde, 0x2d, 0x0f, 0xe8, 0xfb, 0x71, 0xd7, 0x61, 0x37, 0x67, 0x46, 0xd6, 0x1e, 0xd3, 0xd7, 0xc1, + 0xb4, 0x13, 0xf5, 0xdf, 0x0c, 0x92, 0x94, 0x19, 0x6d, 0xca, 0x89, 0x38, 0xb0, 0x03, 0xd6, 0x89, + 0x85, 0x14, 0x92, 0x94, 0x54, 0x00, 0x16, 0x8a, 0x3a, 0x27, 0xec, 0x84, 0x59, 0x24, 0x29, 0xb3, + 0xda, 0x84, 0x13, 0x72, 0x82, 0x0f, 0xd2, 0xa1, 0x03, 0x91, 0xa4, 0x40, 0x0f, 0x24, 0xa0, 0x92, + 0x07, 0x27, 0x6d, 0x62, 0x11, 0xcc, 0x4d, 0x11, 0x89, 0x8b, 0x39, 0x24, 0x2b, 0xe3, 0xda, 0x5c, + 0x70, 0x78, 0x37, 0x14, 0x1f, 0x97, 0xc1, 0x04, 0x35, 0x09, 0xcf, 0xfc, 0x3c, 0xed, 0xce, 0x9f, + 0x10, 0xd9, 0xe6, 0x54, 0xce, 0xcb, 0x74, 0xb9, 0x20, 0xd3, 0xe5, 0xb6, 0xf8, 0xe9, 0xf5, 0x21, + 0x0d, 0x08, 0x60, 0xb1, 0x82, 0xaf, 0x81, 0x49, 0x0f, 0xd5, 0xe3, 0x35, 0x7f, 0x92, 0x47, 0xdf, + 0xf5, 0x21, 0xcd, 0x23, 0xe8, 0x31, 0x81, 0x0f, 0xc1, 0xb8, 0x81, 0x2d, 0x5f, 0x8e, 0x53, 0x22, + 0x13, 0x5c, 0x19, 0x3c, 0x13, 0xdc, 0xc2, 0x96, 0x10, 0x77, 0xcb, 0x64, 0x76, 0x53, 0x1b, 0x33, + 0xfc, 0x25, 0x7c, 0x0a, 0xe6, 0x0c, 0x6c, 0x59, 0x71, 0x7d, 0x4f, 0x0b, 0x3e, 0xd7, 0x5f, 0x88, + 0x8f, 0x15, 0xb1, 0x8f, 0xc7, 0x70, 0xd6, 0x88, 0xef, 0x87, 0x38, 0xfb, 0xb1, 0xe7, 0x71, 0x9e, + 0x7f, 0x39, 0xce, 0x5e, 0xe4, 0x75, 0x73, 0x0e, 0xed, 0xc3, 0x02, 0x98, 0x37, 0xa9, 0xb9, 0x41, + 0xcd, 0x03, 0x62, 0xf2, 0x72, 0x82, 0x1b, 0x3b, 0xd8, 0xf0, 0xd2, 0xdb, 0x7c, 0x5a, 0x24, 0x80, + 0xbe, 0xe7, 0x70, 0x03, 0xcc, 0x74, 0x6a, 0x96, 0x2f, 0xf1, 0x59, 0xe1, 0xf1, 0x74, 0x97, 0xc7, + 0xef, 0x05, 0x70, 0xda, 0x74, 0x07, 0xc5, 0x23, 0xf2, 0x10, 0x74, 0x22, 0x29, 0x7c, 0xd9, 0x16, + 0x90, 0x3c, 0x70, 0x5e, 0x98, 0x0d, 0x08, 0x75, 0x2e, 0x56, 0xfa, 0x97, 0x12, 0x18, 0xf1, 0x8b, + 0x15, 0x04, 0x49, 0x13, 0x1b, 0xc4, 0x2b, 0x56, 0x9a, 0xf8, 0x86, 0xa7, 0xc0, 0x08, 0x36, 0xa8, + 0x6b, 0xb2, 0xf9, 0x84, 0x48, 0x54, 0xfe, 0x0a, 0xde, 0x01, 0x09, 0xba, 0x2f, 0x6a, 0xc2, 0x74, + 0xbe, 0xf8, 0xa2, 0xa5, 0x26, 0xb7, 0x49, 0x88, 0x25, 0x04, 0x4b, 0xd0, 0xfd, 0xcc, 0x22, 0x18, + 0x0b, 0xd6, 0x70, 0x1c, 0x0c, 0x5f, 0x2d, 0xde, 0xbc, 0xbb, 0x95, 0x1a, 0x82, 0x63, 0x20, 0x79, + 0x4f, 0xfb, 0x70, 0x2b, 0x25, 0x15, 0x4e, 0x1f, 0x16, 0x4f, 0xe4, 0x21, 0x4c, 0xb5, 0x50, 0x86, + 0xee, 0x67, 0x0a, 0x28, 0xc3, 0xf7, 0x33, 0xa8, 0x9d, 0xd6, 0xc1, 0x54, 0x24, 0x62, 0x61, 0x0a, + 0xc8, 0xfb, 0xa4, 0xe9, 0x2b, 0xc2, 0x3f, 0xe1, 0x3a, 0x18, 0xf6, 0xcc, 0x96, 0x78, 0x81, 0x74, + 0xea, 0xa1, 0x16, 0x12, 0x97, 0xa4, 0xf4, 0x26, 0x38, 0xd5, 0x3b, 0x68, 0x7b, 0xf0, 0x3c, 0x11, + 0xe6, 0x39, 0x1e, 0xa6, 0xf2, 0xbf, 0x01, 0x95, 0x78, 0x00, 0xf6, 0xa0, 0xb2, 0x13, 0xa6, 0xf2, + 0x32, 0x75, 0xfd, 0x88, 0x7f, 0xe1, 0x9f, 0xd2, 0x61, 0xf1, 0xef, 0x12, 0xa8, 0x2d, 0xcd, 0x15, + 0x51, 0x49, 0x67, 0x88, 0x56, 0xd1, 0x51, 0x27, 0x9a, 0xdf, 0xde, 0x36, 0x59, 0x10, 0xcb, 0x4d, + 0x54, 0xa6, 0x86, 0xd5, 0xd0, 0xcb, 0x3c, 0x6a, 0x90, 0xdf, 0x9f, 0x21, 0xd6, 0xb4, 0x08, 0x62, + 0x14, 0x95, 0xe9, 0x01, 0xb1, 0x91, 0x81, 0xcd, 0x26, 0xaa, 0x12, 0xcc, 0x5c, 0x9b, 0x38, 0x9c, + 0xd6, 0x6e, 0x10, 0xd4, 0xbf, 0x91, 0x44, 0x73, 0xb2, 0x74, 0x1f, 0x9c, 0xbf, 0xaa, 0x9b, 0x15, + 0x44, 0x5d, 0x86, 0x0c, 0x6a, 0x13, 0x84, 0x4b, 0xfc, 0xb3, 0xab, 0x1b, 0xcb, 0xd5, 0x19, 0xb3, + 0x9c, 0x82, 0xaa, 0xd6, 0x74, 0x56, 0x77, 0x4b, 0xb9, 0x32, 0x35, 0x54, 0xae, 0x6e, 0x96, 0x94, + 0xa9, 0xd3, 0x74, 0x18, 0xf1, 0x97, 0xbe, 0xf6, 0xf9, 0x35, 0x98, 0x6f, 0xa1, 0x0c, 0x67, 0xc1, + 0xc3, 0x61, 0xb9, 0x5c, 0x5d, 0xbd, 0xb8, 0x42, 0x56, 0xb2, 0x6b, 0xa5, 0xb5, 0xb5, 0xec, 0xda, + 0xa5, 0xd5, 0x4a, 0x16, 0xaf, 0xbc, 0x7d, 0x39, 0xfb, 0xf6, 0x5a, 0x05, 0x97, 0x2a, 0xd5, 0x77, + 0xc8, 0xa5, 0x95, 0xb5, 0x0c, 0x6a, 0xaf, 0x4f, 0x05, 0x39, 0x58, 0x18, 0x24, 0xf3, 0xaf, 0x31, + 0x30, 0x1f, 0x97, 0x44, 0xf3, 0xef, 0x09, 0xbc, 0x0c, 0xce, 0x88, 0x2a, 0xd7, 0xb9, 0x81, 0xe1, + 0x96, 0x48, 0x42, 0xb2, 0x92, 0xd0, 0x4e, 0x71, 0x80, 0x00, 0xe1, 0xea, 0x51, 0x7b, 0xf4, 0x2e, + 0x48, 0x47, 0x51, 0x23, 0xcd, 0x12, 0xef, 0xd2, 0x24, 0xed, 0x74, 0x18, 0x77, 0x33, 0xd4, 0x38, + 0x75, 0xf1, 0x0d, 0xd7, 0x22, 0x19, 0xc9, 0x8a, 0x1c, 0xe5, 0xbb, 0x7d, 0x54, 0x96, 0xba, 0xf8, + 0x46, 0x1a, 0xac, 0x24, 0x92, 0x95, 0x64, 0x94, 0xef, 0x87, 0xa1, 0x9a, 0xd6, 0x8b, 0x6f, 0xa7, + 0x4c, 0x0e, 0x23, 0x59, 0x19, 0xee, 0xe2, 0x1b, 0x54, 0xcc, 0xf7, 0xc0, 0xd9, 0x98, 0xa9, 0x22, + 0x85, 0x78, 0x04, 0xc9, 0xca, 0x88, 0x36, 0x1f, 0x31, 0x56, 0xb8, 0x26, 0xf7, 0x46, 0x0f, 0xb5, + 0x7d, 0xb2, 0x32, 0xda, 0x03, 0x3d, 0xe0, 0xfe, 0x0e, 0x98, 0x8f, 0xa2, 0x87, 0x1a, 0xb9, 0x31, + 0x24, 0x2b, 0x63, 0xda, 0xc9, 0x30, 0xee, 0x7a, 0xa7, 0xa9, 0xeb, 0x32, 0x57, 0xa4, 0xb4, 0x8d, + 0x8b, 0x52, 0x1e, 0x31, 0x57, 0xb4, 0x9c, 0xc7, 0xcc, 0x15, 0x6e, 0xfe, 0x00, 0x92, 0x95, 0xc9, + 0xa8, 0xb9, 0xd6, 0x8f, 0x1a, 0xc1, 0x9e, 0x6e, 0xea, 0xa8, 0x3b, 0x81, 0x64, 0x65, 0xaa, 0xdb, + 0x4d, 0x81, 0xb6, 0x24, 0xae, 0x6d, 0xa8, 0x30, 0x4c, 0xbe, 0x40, 0x61, 0x88, 0xd8, 0xe6, 0xa8, + 0xeb, 0xba, 0x02, 0x16, 0x62, 0xb6, 0x89, 0x3a, 0x65, 0x0a, 0xc9, 0xca, 0x8c, 0x76, 0x26, 0x62, + 0x9d, 0x48, 0x3f, 0xd6, 0x87, 0x40, 0x27, 0x28, 0xa6, 0x91, 0xac, 0xa4, 0x7a, 0x11, 0xe8, 0x1b, + 0xcc, 0x91, 0xbe, 0x6d, 0x06, 0xc9, 0xca, 0x6c, 0xcc, 0x3b, 0x21, 0x2b, 0xf5, 0x44, 0x0e, 0x75, + 0x86, 0xb2, 0x02, 0xbb, 0x91, 0x7d, 0xce, 0x85, 0xfa, 0x61, 0x91, 0xe4, 0xcb, 0x10, 0xb7, 0x50, + 0xa6, 0x5f, 0x60, 0x65, 0x0a, 0xe8, 0x63, 0x66, 0xbb, 0xe4, 0x02, 0xf2, 0xfe, 0x56, 0x71, 0xc3, + 0xf1, 0x17, 0x8f, 0x2e, 0xc4, 0xd1, 0x42, 0x72, 0x73, 0xbc, 0x95, 0x0b, 0x28, 0x7f, 0x01, 0xad, + 0x3e, 0x42, 0xed, 0x4c, 0x1a, 0x24, 0xd7, 0x69, 0xa5, 0xd9, 0xab, 0xfe, 0x66, 0x1e, 0x82, 0x19, + 0xbf, 0x5d, 0xfe, 0x2f, 0x9d, 0xd5, 0x05, 0xd8, 0x34, 0x48, 0x04, 0x13, 0xa5, 0x96, 0xd0, 0x79, + 0x8a, 0x4a, 0x56, 0x30, 0xc3, 0x7e, 0x7d, 0x78, 0xfd, 0x58, 0xbf, 0x73, 0x22, 0x9a, 0x40, 0xc9, + 0x7c, 0x21, 0x81, 0x99, 0x0f, 0xad, 0x0a, 0x66, 0xe4, 0x7e, 0x5e, 0x23, 0x9f, 0xba, 0xc4, 0x61, + 0x70, 0x03, 0xc8, 0xb8, 0xe4, 0x09, 0x31, 0x91, 0x5f, 0x19, 0xb8, 0xda, 0x68, 0x1c, 0x1b, 0xbe, + 0x0b, 0x26, 0x5c, 0x41, 0x57, 0x3c, 0x3d, 0xf8, 0xa2, 0x75, 0x37, 0x3d, 0x57, 0x75, 0xd2, 0xa8, + 0xdc, 0xc2, 0xce, 0xbe, 0x06, 0x3c, 0x70, 0xfe, 0xbd, 0x84, 0xc0, 0x44, 0x28, 0x36, 0x79, 0x03, + 0xf0, 0x60, 0x4b, 0xbb, 0x9d, 0x1a, 0x82, 0xa3, 0x40, 0xbe, 0xbd, 0xb3, 0x95, 0x92, 0xf2, 0xbf, + 0x5f, 0x00, 0xa7, 0xe3, 0x8c, 0xef, 0x12, 0xfb, 0x40, 0x2f, 0x13, 0xf8, 0x95, 0x0c, 0x46, 0x36, + 0x6c, 0x6e, 0x73, 0x38, 0xb8, 0xf4, 0xe9, 0xc1, 0x51, 0x32, 0x7f, 0x49, 0x7c, 0xeb, 0xb7, 0x7f, + 0xfe, 0x22, 0xf1, 0xc7, 0x44, 0xe6, 0x0f, 0x09, 0xf5, 0x60, 0x25, 0x78, 0xe6, 0xe9, 0xf5, 0xc8, + 0xa3, 0xb6, 0x42, 0xe5, 0xa3, 0xad, 0xb6, 0xc2, 0x15, 0xa1, 0xad, 0xb6, 0x42, 0xd1, 0xd9, 0x56, + 0x1d, 0x62, 0x61, 0x1b, 0x33, 0x6a, 0xab, 0x2d, 0x37, 0x72, 0xd0, 0x0a, 0x45, 0x52, 0x5b, 0x6d, + 0x45, 0x2e, 0x54, 0xb0, 0x0e, 0x9d, 0x1f, 0x85, 0x6b, 0x5b, 0x6d, 0x85, 0x73, 0xdb, 0x7b, 0x0e, + 0xb3, 0x2d, 0x9b, 0x54, 0xf5, 0xa7, 0xea, 0x52, 0xdb, 0x63, 0x12, 0x42, 0x73, 0xe2, 0x74, 0x9c, + 0x38, 0x23, 0x27, 0x86, 0x10, 0x15, 0xb2, 0x5f, 0x4f, 0xdc, 0x56, 0x5b, 0x47, 0xb9, 0xaa, 0xad, + 0xb6, 0x62, 0x33, 0x24, 0xc7, 0xec, 0x39, 0x5c, 0xb6, 0xe1, 0x4f, 0x24, 0x00, 0x3c, 0xc7, 0x8a, + 0x6b, 0xf0, 0xcd, 0x38, 0x77, 0x49, 0xf8, 0xf6, 0x7c, 0x66, 0xf1, 0x18, 0xcf, 0x16, 0xa4, 0x25, + 0xf8, 0x3f, 0x60, 0xe4, 0x26, 0xa5, 0xfb, 0xae, 0x05, 0x67, 0x72, 0x8e, 0x5b, 0xca, 0xe7, 0xb6, + 0x2b, 0xfe, 0xdd, 0x7d, 0x11, 0xce, 0x39, 0xc1, 0x59, 0x81, 0xff, 0x71, 0x6c, 0x4c, 0xf1, 0xfe, + 0xa7, 0x0d, 0xbf, 0x23, 0x81, 0x11, 0xef, 0x2e, 0xbf, 0x88, 0x69, 0xfa, 0x8c, 0xa0, 0x99, 0x15, + 0x21, 0xc5, 0x5b, 0xe9, 0xe7, 0x94, 0x82, 0x9b, 0xe1, 0x17, 0x12, 0x18, 0x0b, 0x92, 0x0a, 0x5c, + 0x3e, 0x56, 0x94, 0x58, 0xfe, 0xe9, 0x2b, 0xc9, 0x63, 0x21, 0x49, 0x25, 0xbd, 0xa4, 0x1e, 0xe4, + 0x9f, 0x2d, 0x09, 0x2e, 0x91, 0x9c, 0x27, 0x0d, 0xcf, 0x45, 0x0f, 0x56, 0xf2, 0x83, 0xa2, 0xc0, + 0x1f, 0x4b, 0x60, 0x7e, 0x17, 0xb3, 0x72, 0x9d, 0x27, 0xdd, 0x4e, 0x92, 0xda, 0x36, 0x45, 0xe0, + 0x7d, 0x7d, 0x2a, 0x5d, 0x14, 0x2a, 0x2d, 0xe7, 0xdf, 0x52, 0x0f, 0xf2, 0xf8, 0x79, 0x05, 0x94, + 0x96, 0xe0, 0x0f, 0x24, 0x30, 0xb2, 0x49, 0x1a, 0x84, 0x91, 0xee, 0x48, 0xeb, 0xc7, 0xeb, 0xe1, + 0x61, 0xf1, 0xad, 0xd2, 0x9b, 0x60, 0x1a, 0x80, 0xa2, 0xa5, 0xdf, 0x20, 0xcd, 0xa2, 0xcb, 0xea, + 0x70, 0x08, 0x9c, 0x06, 0x23, 0xb7, 0xf9, 0x67, 0x1e, 0x4e, 0x81, 0xa4, 0x4d, 0x70, 0x05, 0x0c, + 0x3f, 0xb1, 0x75, 0x46, 0xbc, 0xe0, 0x5b, 0x7a, 0xde, 0xe0, 0xfb, 0x93, 0x04, 0xc6, 0xae, 0x11, + 0x76, 0xc7, 0x25, 0x76, 0xf3, 0xeb, 0x0c, 0xbf, 0xcf, 0xa5, 0xc3, 0xe2, 0xbd, 0xcc, 0x0e, 0x58, + 0xe8, 0x35, 0x3e, 0x74, 0x18, 0x0e, 0x38, 0x36, 0x7c, 0x24, 0x95, 0x86, 0x84, 0x7e, 0x39, 0x78, + 0xe1, 0x38, 0xfd, 0x3e, 0xe5, 0x0c, 0x02, 0x2d, 0x3f, 0x1f, 0x06, 0xa9, 0x6b, 0x84, 0x05, 0xdd, + 0x82, 0xc7, 0xfc, 0xf2, 0xe0, 0x25, 0xd2, 0xc7, 0x4f, 0xbf, 0x38, 0x6a, 0xe6, 0xb3, 0xa4, 0xd0, + 0xe0, 0x1f, 0x32, 0xfc, 0x9b, 0x7c, 0x8c, 0x0e, 0x9d, 0x16, 0xc4, 0x4f, 0xb6, 0xbd, 0x46, 0x99, + 0x76, 0xfc, 0x2c, 0x56, 0x99, 0xfa, 0xce, 0x22, 0x5d, 0x67, 0xee, 0xb3, 0x0e, 0xa3, 0x15, 0xe3, + 0x19, 0xd3, 0x42, 0xef, 0xd3, 0xbe, 0xb8, 0x91, 0x1a, 0xd7, 0xbf, 0x9b, 0xef, 0xc6, 0x3b, 0xea, + 0xd6, 0x7b, 0x2a, 0xd2, 0x97, 0x61, 0x77, 0x09, 0xeb, 0xd3, 0x22, 0xf7, 0x39, 0xee, 0xab, 0xa7, + 0xf3, 0x2c, 0xae, 0x91, 0x12, 0x0b, 0x7f, 0x25, 0x83, 0xe4, 0x56, 0xb9, 0x4e, 0x61, 0xbf, 0x97, + 0x5c, 0xc7, 0x2d, 0xe5, 0xbc, 0x61, 0x25, 0x48, 0x0e, 0xcf, 0x0d, 0x99, 0xf9, 0x6b, 0xe2, 0xb0, + 0xf8, 0xff, 0x09, 0x30, 0x49, 0xca, 0x75, 0x8a, 0x1c, 0xaf, 0xb5, 0x02, 0x63, 0x62, 0x65, 0x5b, + 0x65, 0x38, 0x7b, 0xd7, 0x35, 0x0c, 0x6c, 0x37, 0x0b, 0x68, 0xcb, 0xdf, 0x4a, 0xa7, 0x36, 0x89, + 0x53, 0xb6, 0x75, 0xf1, 0xf3, 0x8b, 0xd8, 0xcd, 0x6c, 0x02, 0x18, 0xbd, 0xb6, 0x42, 0xda, 0x01, + 0x2f, 0xeb, 0x07, 0x57, 0x80, 0xfc, 0xf6, 0xf2, 0x2a, 0xbc, 0x04, 0x2e, 0x6a, 0x84, 0xb9, 0xb6, + 0x49, 0x2a, 0xe8, 0x49, 0x9d, 0x98, 0x88, 0xd5, 0x09, 0xb2, 0x89, 0x43, 0x5d, 0xbb, 0x4c, 0x90, + 0xee, 0x20, 0x46, 0x0c, 0x8b, 0xda, 0xd8, 0xd6, 0x1b, 0x4d, 0xe4, 0x9a, 0xf8, 0x00, 0xeb, 0x0d, + 0x5c, 0x6a, 0x90, 0xdc, 0x07, 0xef, 0x02, 0x79, 0x6d, 0x79, 0x0d, 0xae, 0x81, 0xa5, 0x67, 0x10, + 0xa8, 0x50, 0xe2, 0x20, 0x93, 0x32, 0x44, 0x9e, 0xea, 0x0e, 0xcb, 0xc1, 0x11, 0x90, 0xfc, 0x51, + 0x42, 0x92, 0xc5, 0x25, 0x7b, 0x74, 0x7c, 0x9a, 0xe0, 0x86, 0x51, 0x5b, 0x9e, 0x63, 0x1e, 0x9c, + 0xc9, 0xa4, 0xc2, 0x05, 0x87, 0x9f, 0x15, 0xbc, 0xc7, 0x97, 0x07, 0x10, 0x76, 0x1d, 0xc1, 0x9f, + 0x49, 0x60, 0x72, 0x93, 0x10, 0x4b, 0x3c, 0x78, 0xf3, 0x8d, 0x6f, 0xa6, 0xb3, 0xb9, 0x22, 0x74, + 0xbb, 0x9c, 0x59, 0x3b, 0x36, 0xc5, 0x47, 0x7e, 0x20, 0xcb, 0xf1, 0xb1, 0x44, 0x54, 0xa1, 0x22, + 0x00, 0x3b, 0x74, 0x5d, 0x37, 0x2b, 0xba, 0x59, 0x73, 0xe0, 0x99, 0xae, 0x0c, 0xbe, 0xe9, 0xff, + 0x76, 0xd8, 0x37, 0xb9, 0x0f, 0xc1, 0xfb, 0x60, 0xf4, 0x9e, 0x6e, 0x10, 0xea, 0x32, 0xd8, 0x07, + 0xa8, 0x2f, 0xf2, 0x59, 0x21, 0xfe, 0x49, 0x38, 0x17, 0xb6, 0x27, 0xf3, 0x89, 0xd5, 0x41, 0x6a, + 0xcb, 0xb6, 0xa9, 0xcd, 0xcb, 0xf7, 0x26, 0x61, 0x58, 0x6f, 0x38, 0x03, 0x33, 0x38, 0x2f, 0x18, + 0xbc, 0x0a, 0x17, 0x22, 0x0e, 0xe3, 0x54, 0x9f, 0xe8, 0xac, 0x5e, 0xf1, 0xa9, 0x7e, 0x57, 0x02, + 0xf0, 0x1a, 0x61, 0xf1, 0x19, 0xed, 0xf8, 0x1e, 0x21, 0x86, 0xd1, 0x57, 0x8c, 0x37, 0x84, 0x18, + 0xe7, 0x32, 0x67, 0xc2, 0x62, 0x70, 0x09, 0x4a, 0xb4, 0xd2, 0x54, 0x5b, 0xbc, 0x23, 0x10, 0xb3, + 0x1c, 0xfc, 0xb6, 0x04, 0x66, 0x77, 0xa9, 0xc3, 0x38, 0x45, 0x81, 0x2a, 0x04, 0x79, 0xbe, 0x71, + 0xb0, 0x2f, 0x77, 0x55, 0x70, 0x7f, 0x33, 0x73, 0x3e, 0xcc, 0xdd, 0xa2, 0x0e, 0xe3, 0x12, 0x88, + 0x9f, 0x30, 0x3c, 0x31, 0x82, 0xa0, 0x48, 0xff, 0x5c, 0x3a, 0x2c, 0x7e, 0x29, 0xc1, 0x6a, 0x9f, + 0xe9, 0x0c, 0x55, 0x42, 0x49, 0x22, 0x9b, 0x45, 0x4f, 0xea, 0x7a, 0xb9, 0x8e, 0x9c, 0x3a, 0x75, + 0x1b, 0x15, 0x71, 0xfd, 0x4a, 0x04, 0xb9, 0x0e, 0xa9, 0x20, 0xdd, 0x44, 0x56, 0x03, 0x97, 0x09, + 0xa2, 0x55, 0x71, 0x51, 0x2b, 0xb4, 0xec, 0x1a, 0xc4, 0xf4, 0x7e, 0xd1, 0x45, 0x65, 0x6a, 0xf0, + 0xc5, 0xb9, 0xf4, 0x1d, 0xb0, 0xd8, 0xab, 0x33, 0xe0, 0xd7, 0x28, 0x98, 0x07, 0x07, 0x7d, 0x53, + 0x7c, 0x0c, 0x4e, 0x94, 0xb1, 0x41, 0x1a, 0x1b, 0xd8, 0x21, 0x3e, 0x0d, 0x3e, 0xbc, 0x40, 0x0d, + 0x0c, 0x7b, 0xbf, 0xc3, 0x0c, 0x1a, 0x48, 0x67, 0x84, 0x0d, 0xe7, 0xe0, 0x6c, 0x24, 0x90, 0xf8, + 0x51, 0xfe, 0x13, 0xb0, 0x50, 0x34, 0x29, 0xab, 0x13, 0xdb, 0xe7, 0xc4, 0x9d, 0x17, 0xba, 0x54, + 0xef, 0x47, 0xae, 0xd8, 0xa0, 0x8c, 0x87, 0xd6, 0xbf, 0x1c, 0x3d, 0x2c, 0xfe, 0x74, 0x14, 0xfe, + 0x4e, 0x02, 0x73, 0x45, 0xb4, 0xee, 0x3d, 0xf4, 0x86, 0x52, 0xc0, 0x47, 0xe0, 0x44, 0x4d, 0xdb, + 0xdd, 0xc8, 0x5e, 0xf3, 0x54, 0x47, 0x96, 0x4d, 0x1f, 0x93, 0x32, 0x1b, 0xd4, 0x64, 0xe9, 0x94, + 0x49, 0x4d, 0xf2, 0x9f, 0xbe, 0x6a, 0x1c, 0x7a, 0xe9, 0x13, 0x70, 0x62, 0xfd, 0xee, 0x26, 0x5a, + 0xcd, 0x6e, 0x34, 0xb0, 0xeb, 0x10, 0x74, 0x53, 0x2f, 0x13, 0xd3, 0x21, 0xf0, 0xea, 0x60, 0x94, + 0xd5, 0x52, 0x83, 0x96, 0x54, 0x03, 0x3b, 0x8c, 0xd8, 0xea, 0xcd, 0xed, 0x8d, 0xad, 0x9d, 0xbb, + 0x5b, 0x39, 0xf6, 0x94, 0xe5, 0xe5, 0x95, 0xdc, 0xf2, 0x92, 0x2c, 0x25, 0x92, 0xf9, 0x14, 0xb6, + 0xbc, 0xe7, 0x69, 0x9d, 0x9a, 0xea, 0x63, 0x87, 0x9a, 0xf9, 0x53, 0xe1, 0x9d, 0xa7, 0xd9, 0x2a, + 0xa5, 0x59, 0x43, 0x37, 0x48, 0xa1, 0x0b, 0xb2, 0xd0, 0x07, 0x52, 0xdb, 0xe5, 0x15, 0x63, 0x15, + 0x6e, 0x83, 0x6b, 0xdd, 0x15, 0xc3, 0x75, 0x88, 0x7d, 0x54, 0x2d, 0xea, 0xf8, 0x80, 0x20, 0x8b, + 0xd8, 0x86, 0xee, 0x38, 0x3c, 0x30, 0x19, 0x45, 0xb8, 0x5c, 0x26, 0x8e, 0x13, 0xa9, 0x2e, 0x39, + 0xed, 0x25, 0x6a, 0xd0, 0xa8, 0x76, 0x1d, 0xc8, 0x6b, 0x2b, 0x97, 0x60, 0x11, 0x4c, 0x6d, 0xbf, + 0x61, 0x20, 0x8c, 0x18, 0xc1, 0x16, 0x65, 0x39, 0xb8, 0x0c, 0x72, 0xe9, 0x81, 0x9e, 0xf9, 0x1e, + 0x7c, 0x2f, 0x01, 0x66, 0xc0, 0xf8, 0x3a, 0x76, 0xf4, 0xb2, 0xe8, 0xff, 0x13, 0x63, 0x12, 0x78, + 0x25, 0x32, 0x11, 0xcc, 0x8c, 0x25, 0xd2, 0xe3, 0x1f, 0x65, 0x8b, 0xbb, 0xdb, 0xd9, 0x1b, 0xa4, + 0x89, 0x12, 0xe0, 0x2b, 0xa9, 0x33, 0x21, 0xfc, 0x5a, 0x1a, 0x93, 0x95, 0x64, 0xfe, 0xb5, 0xc0, + 0x87, 0x21, 0x87, 0xab, 0x14, 0xbb, 0xac, 0xae, 0xf2, 0x3f, 0xd4, 0xd6, 0xff, 0x9b, 0x14, 0x16, + 0xfb, 0x03, 0x31, 0xba, 0x4f, 0xcc, 0xf5, 0xff, 0x03, 0x69, 0x6f, 0xe0, 0x80, 0xf0, 0x9a, 0x8d, + 0x4d, 0xe6, 0x20, 0xbe, 0xf0, 0xad, 0x07, 0x16, 0xfc, 0x31, 0x04, 0xce, 0xf9, 0x87, 0x62, 0x15, + 0x9c, 0x6e, 0x80, 0x61, 0x5c, 0x31, 0x74, 0x13, 0x16, 0x22, 0xa8, 0x66, 0x25, 0x02, 0x26, 0x9c, + 0xc1, 0xc1, 0x74, 0x87, 0xf1, 0x4a, 0x74, 0x40, 0x90, 0x6e, 0x56, 0xa9, 0x6d, 0x08, 0x7f, 0x97, + 0x16, 0xc1, 0x54, 0xd8, 0x14, 0x43, 0xf1, 0xd1, 0xa8, 0xf4, 0x66, 0xdf, 0xe1, 0x28, 0x0e, 0x6a, + 0x6f, 0x83, 0xd3, 0xb7, 0x8e, 0xb2, 0x4f, 0xf8, 0x4e, 0x0d, 0x7a, 0x97, 0x1e, 0x8c, 0x77, 0x3c, + 0x57, 0x1a, 0x11, 0xf7, 0x79, 0xf5, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xc2, 0x5e, 0xf3, + 0x48, 0x24, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index dbb62a79a06..eba0d7d629c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -206,6 +206,9 @@ message ABitOfEverything { // ABitOfEverythingRepeated is used to validate repeated path parameter functionality message ABitOfEverythingRepeated { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + example: { value: '{ "path_repeated_bool_value": [true, true, false, true], "path_repeated_int32_value": [1, 2, 3] }' } + }; // repeated values. they are comma-separated in path repeated float path_repeated_float_value = 1; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index c85d1345f32..b4c3e5bb17e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1575,6 +1575,19 @@ }, "examplepbABitOfEverythingRepeated": { "type": "object", + "example": { + "path_repeated_bool_value": [ + true, + true, + false, + true + ], + "path_repeated_int32_value": [ + 1, + 2, + 3 + ] + }, "properties": { "path_repeated_float_value": { "type": "array", From a0500cba2195de914ae92997961c957aac0082f2 Mon Sep 17 00:00:00 2001 From: Alex Bice Date: Thu, 17 Jan 2019 15:35:55 -0700 Subject: [PATCH 0095/1518] Support outputting arrays in protoc-gen-swagger (#853) * protoc-gen-swagger: add flag 'allow_repeated_fields_in_body' Also added/updated tests for flags * protoc-gen-swagger: updated response body example Also: * Added integration tests * Added an extra cli test for parsing the flag --- Makefile | 4 +- examples/clients/responsebody/BUILD.bazel | 3 + .../docs/ExamplepbRepeatedResponseBodyOut.md | 10 + ...xamplepbRepeatedResponseBodyOutResponse.md | 10 + .../docs/ExamplepbRepeatedResponseStrings.md | 10 + .../docs/ResponseBodyServiceApi.md | 56 ++++ .../examplepb_repeated_response_body_out.go | 16 ++ ...epb_repeated_response_body_out_response.go | 16 ++ .../examplepb_repeated_response_strings.go | 16 ++ .../responsebody/response_body_service_api.go | 120 +++++++++ examples/integration/integration_test.go | 50 ++++ .../examplepb/response_body_service.pb.go | 240 ++++++++++++++++-- .../examplepb/response_body_service.pb.gw.go | 120 +++++++++ .../examplepb/response_body_service.proto | 43 +++- .../response_body_service.swagger.json | 84 ++++++ examples/server/responsebody.go | 16 ++ protoc-gen-grpc-gateway/BUILD.bazel | 5 +- protoc-gen-swagger/defs.bzl | 2 +- protoc-gen-swagger/main.go | 9 + protoc-gen-swagger/main_test.go | 209 ++++++++------- 20 files changed, 901 insertions(+), 138 deletions(-) create mode 100644 examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md create mode 100644 examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md create mode 100644 examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md create mode 100644 examples/clients/responsebody/examplepb_repeated_response_body_out.go create mode 100644 examples/clients/responsebody/examplepb_repeated_response_body_out_response.go create mode 100644 examples/clients/responsebody/examplepb_repeated_response_strings.go diff --git a/Makefile b/Makefile index 23b720ad4a5..8d7156cc378 100644 --- a/Makefile +++ b/Makefile @@ -149,11 +149,11 @@ $(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(EXAMPLE_DEPS) $(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index bdbc237a815..393d28446e4 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -6,6 +6,9 @@ go_library( "api_client.go", "api_response.go", "configuration.go", + "examplepb_repeated_response_body_out.go", + "examplepb_repeated_response_body_out_response.go", + "examplepb_repeated_response_strings.go", "examplepb_response_body_message.go", "examplepb_response_body_message_response.go", "examplepb_response_body_out.go", diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md new file mode 100644 index 00000000000..1a78a92234c --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md @@ -0,0 +1,10 @@ +# ExamplepbRepeatedResponseBodyOut + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Response** | [**[]ExamplepbRepeatedResponseBodyOutResponse**](examplepbRepeatedResponseBodyOutResponse.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md new file mode 100644 index 00000000000..b11c5bb123f --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md @@ -0,0 +1,10 @@ +# ExamplepbRepeatedResponseBodyOutResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Data** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md new file mode 100644 index 00000000000..702cfa03868 --- /dev/null +++ b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md @@ -0,0 +1,10 @@ +# ExamplepbRepeatedResponseStrings + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Values** | **[]string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md index 7c4506cc991..458725faa9b 100644 --- a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md +++ b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -5,6 +5,8 @@ All URIs are relative to *http://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- [**GetResponseBody**](ResponseBodyServiceApi.md#GetResponseBody) | **Get** /responsebody/{data} | +[**ListResponseBodies**](ResponseBodyServiceApi.md#ListResponseBodies) | **Get** /responsebodies/{data} | +[**ListResponseStrings**](ResponseBodyServiceApi.md#ListResponseStrings) | **Get** /responsestrings/{data} | # **GetResponseBody** @@ -34,3 +36,57 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **ListResponseBodies** +> []ExamplepbRepeatedResponseBodyOutResponse ListResponseBodies($data) + + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data** | **string**| | + +### Return type + +[**[]ExamplepbRepeatedResponseBodyOutResponse**](examplepbRepeatedResponseBodyOutResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **ListResponseStrings** +> []string ListResponseStrings($data) + + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data** | **string**| | + +### Return type + +**[]string** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/examples/clients/responsebody/examplepb_repeated_response_body_out.go b/examples/clients/responsebody/examplepb_repeated_response_body_out.go new file mode 100644 index 00000000000..18977ab5732 --- /dev/null +++ b/examples/clients/responsebody/examplepb_repeated_response_body_out.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbRepeatedResponseBodyOut struct { + + Response []ExamplepbRepeatedResponseBodyOutResponse `json:"response,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go b/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go new file mode 100644 index 00000000000..c13c50cb507 --- /dev/null +++ b/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbRepeatedResponseBodyOutResponse struct { + + Data string `json:"data,omitempty"` +} diff --git a/examples/clients/responsebody/examplepb_repeated_response_strings.go b/examples/clients/responsebody/examplepb_repeated_response_strings.go new file mode 100644 index 00000000000..94a35e877ab --- /dev/null +++ b/examples/clients/responsebody/examplepb_repeated_response_strings.go @@ -0,0 +1,16 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ExamplepbRepeatedResponseStrings struct { + + Values []string `json:"values,omitempty"` +} diff --git a/examples/clients/responsebody/response_body_service_api.go b/examples/clients/responsebody/response_body_service_api.go index 15fa4e5bb63..000cecd6ddd 100644 --- a/examples/clients/responsebody/response_body_service_api.go +++ b/examples/clients/responsebody/response_body_service_api.go @@ -97,3 +97,123 @@ func (a ResponseBodyServiceApi) GetResponseBody(data string) (*ExamplepbResponse return successPayload, localVarAPIResponse, err } +/** + * + * + * @param data + * @return []ExamplepbRepeatedResponseBodyOutResponse + */ +func (a ResponseBodyServiceApi) ListResponseBodies(data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/responsebodies/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new([]ExamplepbRepeatedResponseBodyOutResponse) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "ListResponseBodies", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return *successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return *successPayload, localVarAPIResponse, err +} + +/** + * + * + * @param data + * @return []string + */ +func (a ResponseBodyServiceApi) ListResponseStrings(data string) ([]string, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/responsestrings/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new([]string) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "ListResponseStrings", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return *successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return *successPayload, localVarAPIResponse, err +} + diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 96b36d04b58..f9ea66b9a26 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1307,6 +1307,8 @@ func TestResponseBody(t *testing.T) { } testResponseBody(t, 8080) + testResponseBodies(t, 8080) + testResponseStrings(t, 8080) } func testResponseBody(t *testing.T, port int) { @@ -1332,3 +1334,51 @@ func testResponseBody(t *testing.T, port int) { t.Errorf("response = %q; want %q", got, want) } } + +func testResponseBodies(t *testing.T, port int) { + url := fmt.Sprintf("http://localhost:%d/responsebodies/foo", port) + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + if got, want := string(buf), `[{"data":"foo"}]`; got != want { + t.Errorf("response = %q; want %q", got, want) + } +} + +func testResponseStrings(t *testing.T, port int) { + url := fmt.Sprintf("http://localhost:%d/responsestrings/foo", port) + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + if got, want := string(buf), `["hello","foo"]`; got != want { + t.Errorf("response = %q; want %q", got, want) + } +} diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index fcad76e5898..922aafa8fef 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -35,7 +35,7 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{0} + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{0} } func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) @@ -73,7 +73,7 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{1} + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{1} } func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) @@ -111,7 +111,7 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5010ebf28bf7b965, []int{1, 0} + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{1, 0} } func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) @@ -138,10 +138,127 @@ func (m *ResponseBodyOut_Response) GetData() string { return "" } +type RepeatedResponseBodyOut struct { + Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut{} } +func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } +func (*RepeatedResponseBodyOut) ProtoMessage() {} +func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{2} +} +func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) +} +func (m *RepeatedResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepeatedResponseBodyOut.Marshal(b, m, deterministic) +} +func (dst *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut.Merge(dst, src) +} +func (m *RepeatedResponseBodyOut) XXX_Size() int { + return xxx_messageInfo_RepeatedResponseBodyOut.Size(m) +} +func (m *RepeatedResponseBodyOut) XXX_DiscardUnknown() { + xxx_messageInfo_RepeatedResponseBodyOut.DiscardUnknown(m) +} + +var xxx_messageInfo_RepeatedResponseBodyOut proto.InternalMessageInfo + +func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { + if m != nil { + return m.Response + } + return nil +} + +type RepeatedResponseBodyOut_Response struct { + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedResponseBodyOut_Response{} } +func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } +func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} +func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{2, 0} +} +func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) +} +func (m *RepeatedResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Marshal(b, m, deterministic) +} +func (dst *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(dst, src) +} +func (m *RepeatedResponseBodyOut_Response) XXX_Size() int { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Size(m) +} +func (m *RepeatedResponseBodyOut_Response) XXX_DiscardUnknown() { + xxx_messageInfo_RepeatedResponseBodyOut_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_RepeatedResponseBodyOut_Response proto.InternalMessageInfo + +func (m *RepeatedResponseBodyOut_Response) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +type RepeatedResponseStrings struct { + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings{} } +func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } +func (*RepeatedResponseStrings) ProtoMessage() {} +func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{3} +} +func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) +} +func (m *RepeatedResponseStrings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepeatedResponseStrings.Marshal(b, m, deterministic) +} +func (dst *RepeatedResponseStrings) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseStrings.Merge(dst, src) +} +func (m *RepeatedResponseStrings) XXX_Size() int { + return xxx_messageInfo_RepeatedResponseStrings.Size(m) +} +func (m *RepeatedResponseStrings) XXX_DiscardUnknown() { + xxx_messageInfo_RepeatedResponseStrings.DiscardUnknown(m) +} + +var xxx_messageInfo_RepeatedResponseStrings proto.InternalMessageInfo + +func (m *RepeatedResponseStrings) GetValues() []string { + if m != nil { + return m.Values + } + return nil +} + func init() { proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.examplepb.ResponseBodyIn") proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut") proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut.Response") + proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut") + proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut.Response") + proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseStrings") } // Reference imports to suppress errors if they are not otherwise used. @@ -157,6 +274,8 @@ const _ = grpc.SupportPackageIsVersion4 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ResponseBodyServiceClient interface { GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) + ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) + ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) } type responseBodyServiceClient struct { @@ -176,9 +295,29 @@ func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *Res return out, nil } +func (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) { + out := new(RepeatedResponseBodyOut) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseBodies", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) { + out := new(RepeatedResponseStrings) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseStrings", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ResponseBodyServiceServer is the server API for ResponseBodyService service. type ResponseBodyServiceServer interface { GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) + ListResponseBodies(context.Context, *ResponseBodyIn) (*RepeatedResponseBodyOut, error) + ListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error) } func RegisterResponseBodyServiceServer(s *grpc.Server, srv ResponseBodyServiceServer) { @@ -203,6 +342,42 @@ func _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _ResponseBodyService_ListResponseBodies_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResponseBodyIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseBodies", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, req.(*ResponseBodyIn)) + } + return interceptor(ctx, in, info, handler) +} + +func _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResponseBodyIn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseStrings", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, req.(*ResponseBodyIn)) + } + return interceptor(ctx, in, info, handler) +} + var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.examplepb.ResponseBodyService", HandlerType: (*ResponseBodyServiceServer)(nil), @@ -211,32 +386,47 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ MethodName: "GetResponseBody", Handler: _ResponseBodyService_GetResponseBody_Handler, }, + { + MethodName: "ListResponseBodies", + Handler: _ResponseBodyService_ListResponseBodies_Handler, + }, + { + MethodName: "ListResponseStrings", + Handler: _ResponseBodyService_ListResponseStrings_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/response_body_service.proto", } func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_5010ebf28bf7b965) -} - -var fileDescriptor_response_body_service_5010ebf28bf7b965 = []byte{ - // 257 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, - 0x8b, 0x52, 0x8b, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0xe3, 0x93, 0xf2, 0x53, 0x2a, 0xe3, 0x8b, 0x53, - 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0xc0, 0xaa, 0x84, 0xe4, 0xd3, 0x8b, 0x0a, 0x92, 0xf5, 0xd2, - 0x13, 0x4b, 0x52, 0xcb, 0x13, 0x2b, 0xf5, 0x60, 0x46, 0xe8, 0xc1, 0x35, 0x4b, 0xc9, 0xa4, 0xe7, - 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x27, 0x16, 0x64, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, 0x96, - 0x64, 0xe6, 0xe7, 0x15, 0x43, 0xb4, 0x2b, 0xa9, 0x70, 0xf1, 0x05, 0x41, 0x4d, 0x77, 0xca, 0x4f, - 0xa9, 0xf4, 0xcc, 0x13, 0x12, 0xe2, 0x62, 0x49, 0x49, 0x2c, 0x49, 0x94, 0x60, 0x54, 0x60, 0xd4, - 0xe0, 0x0c, 0x02, 0xb3, 0x95, 0x3a, 0x18, 0xb9, 0xf8, 0x91, 0x95, 0xf9, 0x97, 0x96, 0x08, 0x85, - 0x72, 0x71, 0xc0, 0xdc, 0x25, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x6d, 0x64, 0xa9, 0x47, 0xc0, 0x2d, - 0x7a, 0x68, 0x66, 0xc0, 0xf9, 0x41, 0x70, 0xa3, 0xa4, 0xe4, 0xb8, 0x38, 0x60, 0xa2, 0xd8, 0x9c, - 0x62, 0xb4, 0x85, 0x91, 0x4b, 0x18, 0xd9, 0x98, 0x60, 0x48, 0x68, 0x08, 0xcd, 0x61, 0xe4, 0xe2, - 0x77, 0x4f, 0x2d, 0x41, 0x96, 0x12, 0xd2, 0x27, 0xc9, 0x41, 0x9e, 0x79, 0x52, 0x06, 0xa4, 0xfa, - 0x40, 0x49, 0xad, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x0a, 0x42, 0x22, 0xf0, 0x48, 0x02, 0xc5, 0x91, - 0x7e, 0x35, 0xc8, 0xad, 0xb5, 0x49, 0x70, 0x6f, 0x39, 0x71, 0x47, 0x71, 0xc2, 0x0d, 0x49, 0x62, - 0x03, 0x87, 0xbd, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x4a, 0x08, 0x5b, 0xf2, 0x01, 0x00, - 0x00, + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_5b2acb9aa53489f0) +} + +var fileDescriptor_response_body_service_5b2acb9aa53489f0 = []byte{ + // 378 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xd3, 0xc1, 0x4a, 0xc3, 0x30, + 0x18, 0x07, 0x70, 0xb2, 0x8d, 0xb1, 0x65, 0xe0, 0x20, 0x93, 0x6d, 0x0c, 0xd1, 0x5a, 0x44, 0x7b, + 0x6a, 0x75, 0x7a, 0xd0, 0xa3, 0xbb, 0xc8, 0x40, 0x10, 0x3a, 0xbc, 0x08, 0x32, 0xd2, 0xf5, 0xa3, + 0x14, 0x66, 0x12, 0x9a, 0x6c, 0x3a, 0xc4, 0x8b, 0x27, 0x0f, 0xde, 0xbc, 0x78, 0xf0, 0x05, 0x7c, + 0x1e, 0x5f, 0xc1, 0x07, 0x91, 0x75, 0x6d, 0xa8, 0x73, 0xa0, 0xdb, 0xc1, 0x5b, 0xd3, 0x24, 0xff, + 0xfc, 0x9a, 0xef, 0x2b, 0x3e, 0x82, 0x3b, 0x7a, 0x23, 0x86, 0x20, 0x1d, 0x11, 0x71, 0xc5, 0x9d, + 0x64, 0x28, 0x3c, 0x27, 0x02, 0x29, 0x38, 0x93, 0xd0, 0xf7, 0xb8, 0x3f, 0xe9, 0x4b, 0x88, 0xc6, + 0xe1, 0x00, 0xec, 0x78, 0x15, 0xd9, 0x0a, 0x22, 0x31, 0xb0, 0x03, 0xaa, 0xe0, 0x96, 0x4e, 0xec, + 0x34, 0xc2, 0xd6, 0x9b, 0x5b, 0x1b, 0x01, 0xe7, 0xc1, 0x10, 0x1c, 0x2a, 0x42, 0x87, 0x32, 0xc6, + 0x15, 0x55, 0x21, 0x67, 0x72, 0xb6, 0xdd, 0xdc, 0xc1, 0x6b, 0x6e, 0x92, 0xde, 0xe1, 0xfe, 0xa4, + 0xcb, 0x08, 0xc1, 0x05, 0x9f, 0x2a, 0xda, 0x44, 0x06, 0xb2, 0xca, 0x6e, 0xfc, 0x6c, 0x3e, 0x21, + 0x5c, 0xcd, 0x2e, 0xbb, 0x18, 0x29, 0x72, 0x89, 0x4b, 0xa9, 0xab, 0x99, 0x33, 0x90, 0x55, 0x69, + 0x9f, 0xd8, 0xbf, 0x58, 0xec, 0xb9, 0x0c, 0x3d, 0x76, 0x75, 0x54, 0x6b, 0x13, 0x97, 0xd2, 0xb7, + 0x0b, 0x29, 0xaf, 0x08, 0x37, 0x5c, 0x10, 0x40, 0x15, 0xf8, 0xf3, 0xa4, 0xeb, 0x6f, 0xa4, 0xbc, + 0x55, 0x69, 0x9f, 0xfe, 0x81, 0xb4, 0x30, 0x6b, 0x15, 0xda, 0xc1, 0x4f, 0x59, 0x4f, 0x45, 0x21, + 0x0b, 0x24, 0xa9, 0xe3, 0xe2, 0x98, 0x0e, 0x47, 0x20, 0x9b, 0xc8, 0xc8, 0x5b, 0x65, 0x37, 0x19, + 0xb5, 0x9f, 0x0b, 0xb8, 0x96, 0x3d, 0xb9, 0x37, 0xab, 0x2d, 0x79, 0x43, 0xb8, 0x7a, 0x06, 0x2a, + 0x3b, 0x45, 0x9c, 0xa5, 0xae, 0xb7, 0xcb, 0x5a, 0xfb, 0xcb, 0xd6, 0xc3, 0xdc, 0x7d, 0xfc, 0xf8, + 0x7c, 0xc9, 0x19, 0x64, 0x5d, 0xb7, 0xdc, 0xb4, 0xe3, 0x9c, 0xfb, 0xe9, 0xe7, 0x3d, 0x78, 0xfa, + 0x26, 0xc8, 0x3b, 0xc2, 0xe4, 0x3c, 0x94, 0x59, 0x5f, 0x08, 0x72, 0x79, 0xe1, 0xf1, 0xaa, 0xe5, + 0x31, 0xad, 0x58, 0x6a, 0x92, 0x7a, 0x56, 0x1a, 0x82, 0x5c, 0x68, 0xad, 0x65, 0xad, 0x69, 0x49, + 0xfe, 0x01, 0x9b, 0x1c, 0x65, 0xee, 0xc5, 0xd8, 0x6d, 0xd2, 0xd0, 0x58, 0x39, 0x9b, 0x49, 0xb5, + 0x49, 0x3b, 0x74, 0x2a, 0x57, 0x65, 0x9d, 0xe6, 0x15, 0xe3, 0x3f, 0xf4, 0xf0, 0x2b, 0x00, 0x00, + 0xff, 0xff, 0x39, 0xa0, 0x6e, 0xed, 0x18, 0x04, 0x00, 0x00, } diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 41480f44bb9..804a4815442 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -55,6 +55,60 @@ func request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshale } +func request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := client.ListResponseBodies(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := client.ListResponseStrings(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + // RegisterResponseBodyServiceHandlerFromEndpoint is same as RegisterResponseBodyServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -113,6 +167,46 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. }) + mux.Handle("GET", pattern_ResponseBodyService_ListResponseBodies_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ResponseBodyService_ListResponseBodies_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_ListResponseBodies_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ResponseBodyService_ListResponseStrings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ResponseBodyService_ListResponseStrings_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_ListResponseStrings_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -125,10 +219,36 @@ func (m response_ResponseBodyService_GetResponseBody_0) XXX_ResponseBody() inter return response.Response } +type response_ResponseBodyService_ListResponseBodies_0 struct { + proto.Message +} + +func (m response_ResponseBodyService_ListResponseBodies_0) XXX_ResponseBody() interface{} { + response := m.Message.(*RepeatedResponseBodyOut) + return response.Response +} + +type response_ResponseBodyService_ListResponseStrings_0 struct { + proto.Message +} + +func (m response_ResponseBodyService_ListResponseStrings_0) XXX_ResponseBody() interface{} { + response := m.Message.(*RepeatedResponseStrings) + return response.Values +} + var ( pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "")) + + pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "")) + + pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "")) ) var ( forward_ResponseBodyService_GetResponseBody_0 = runtime.ForwardResponseMessage + + forward_ResponseBodyService_ListResponseBodies_0 = runtime.ForwardResponseMessage + + forward_ResponseBodyService_ListResponseStrings_0 = runtime.ForwardResponseMessage ) diff --git a/examples/proto/examplepb/response_body_service.proto b/examples/proto/examplepb/response_body_service.proto index 65d430e348d..9e2f0165a3e 100644 --- a/examples/proto/examplepb/response_body_service.proto +++ b/examples/proto/examplepb/response_body_service.proto @@ -5,22 +5,39 @@ package grpc.gateway.examples.examplepb; import "google/api/annotations.proto"; -message ResponseBodyIn { - string data = 1; -} +message ResponseBodyIn { string data = 1; } message ResponseBodyOut { - message Response { - string data = 1; - } - Response response = 2; + message Response { string data = 1; } + Response response = 2; +} + +message RepeatedResponseBodyOut { + message Response { string data = 1; } + repeated Response response = 2; } +message RepeatedResponseStrings { repeated string values = 1; } + service ResponseBodyService { - rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { - option (google.api.http) = { - get: "/responsebody/{data}" - response_body: "response" - }; - } + rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { + option (google.api.http) = { + get : "/responsebody/{data}" + response_body : "response" + }; + } + + rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) { + option (google.api.http) = { + get : "/responsebodies/{data}" + response_body : "response" + }; + } + + rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) { + option (google.api.http) = { + get : "/responsestrings/{data}" + response_body : "values" + }; + } } diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index c13e7646bcf..c77d6ea05e0 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -15,6 +15,33 @@ "application/json" ], "paths": { + "/responsebodies/{data}": { + "get": { + "operationId": "ListResponseBodies", + "responses": { + "200": { + "description": "", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" + } + } + } + }, + "parameters": [ + { + "name": "data", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ResponseBodyService" + ] + } + }, "/responsebody/{data}": { "get": { "operationId": "GetResponseBody", @@ -38,9 +65,66 @@ "ResponseBodyService" ] } + }, + "/responsestrings/{data}": { + "get": { + "operationId": "ListResponseStrings", + "responses": { + "200": { + "description": "", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "parameters": [ + { + "name": "data", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ResponseBodyService" + ] + } } }, "definitions": { + "examplepbRepeatedResponseBodyOut": { + "type": "object", + "properties": { + "response": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" + } + } + } + }, + "examplepbRepeatedResponseBodyOutResponse": { + "type": "object", + "properties": { + "data": { + "type": "string" + } + } + }, + "examplepbRepeatedResponseStrings": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "examplepbResponseBodyOut": { "type": "object", "properties": { diff --git a/examples/server/responsebody.go b/examples/server/responsebody.go index 62cff2f47db..f27a0718be7 100644 --- a/examples/server/responsebody.go +++ b/examples/server/responsebody.go @@ -21,3 +21,19 @@ func (s *responseBodyServer) GetResponseBody(ctx context.Context, req *examples. }, }, nil } + +func (s *responseBodyServer) ListResponseBodies(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseBodyOut, error) { + return &examples.RepeatedResponseBodyOut{ + Response: []*examples.RepeatedResponseBodyOut_Response{ + &examples.RepeatedResponseBodyOut_Response{ + Data: req.Data, + }, + }, + }, nil +} + +func (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseStrings, error) { + return &examples.RepeatedResponseStrings{ + Values: []string{"hello", req.Data}, + }, nil +} diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 1af07f27f79..cb772efe9e1 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -25,7 +25,10 @@ go_binary( go_proto_compiler( name = "go_gen_grpc_gateway", - options = ["logtostderr=true"], + options = [ + "logtostderr=true", + "allow_repeated_fields_in_body=true", + ], plugin = ":protoc-gen-grpc-gateway", suffix = ".pb.gw.go", visibility = ["//visibility:public"], diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index a2933cdbeaa..d049ce596af 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -40,7 +40,7 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action inputs = direct_proto_srcs + transitive_proto_srcs + [protoc_gen_swagger] - options = ["logtostderr=true"] + options = ["logtostderr=true", "allow_repeated_fields_in_body=true"] if grpc_api_configuration: options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) inputs.append(grpc_api_configuration) diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 5c921f6e163..174e4fad384 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -24,6 +24,7 @@ var ( useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") versionFlag = flag.Bool("version", false, "print the current verison") + allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") ) // Variables set by goreleaser at build time @@ -72,6 +73,7 @@ func main() { reg.SetAllowMerge(*allowMerge) reg.SetMergeFileName(*mergeFileName) reg.SetUseJSONNamesForFields(*useJSONNamesForFields) + reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return @@ -154,6 +156,13 @@ func parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) erro } continue } + if spec[0] == "allow_repeated_fields_in_body" { + err := f.Set(spec[0], "true") + if err != nil { + return fmt.Errorf("Cannot set flag %s: %v", p, err) + } + continue + } err := f.Set(spec[0], "") if err != nil { return fmt.Errorf("Cannot set flag %s: %v", p, err) diff --git a/protoc-gen-swagger/main_test.go b/protoc-gen-swagger/main_test.go index 7bdca480979..dc8e09bdb12 100644 --- a/protoc-gen-swagger/main_test.go +++ b/protoc-gen-swagger/main_test.go @@ -1,116 +1,129 @@ package main import ( + "errors" "flag" "reflect" "testing" ) func TestParseReqParam(t *testing.T) { - - f := flag.CommandLine - // this one must be first - with no leading clearFlags call it - // verifies our expectation of default values as we reset by - // clearFlags - pkgMap := make(map[string]string) - expected := map[string]string{} - err := parseReqParam("", f, pkgMap) - if err != nil { - t.Errorf("Test 0: unexpected parse error '%v'", err) + testcases := []struct { + name string + expected map[string]string + request string + expectedError error + allowDeleteBodyV bool + allowMergeV bool + allowRepeatedFieldsInBodyV bool + fileV string + importPathV string + mergeFileNameV string + }{ + { + // this one must be first - with no leading clearFlags call it + // verifies our expectation of default values as we reset by + // clearFlags + name: "Test 0", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + fileV: "-", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 1", + expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, + request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "apidocs", + }, + { + name: "Test 2", + expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, + request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "test_name", + }, + { + name: "Test 3", + expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, + request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 4", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 5", + expected: map[string]string{}, + request: "unknown_param=17", + expectedError: errors.New("Cannot set flag unknown_param=17: no such flag -unknown_param"), + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 6", + expected: map[string]string{}, + request: "Mfoo", + expectedError: errors.New("Cannot set flag Mfoo: no such flag -Mfoo"), + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 7", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,merge_file_name", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + fileV: "", importPathV: "", mergeFileNameV: "", + }, + { + name: "Test 8", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", + expectedError: errors.New(`Cannot set flag allow_repeated_fields_in_body=3: strconv.ParseBool: parsing "3": invalid syntax`), + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: false, + fileV: "", importPathV: "", mergeFileNameV: "apidocs", + }, } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 0: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(false, false, "-", "", "apidocs", t, 0) - - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"} - err = parseReqParam("allow_delete_body,allow_merge,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) - if err != nil { - t.Errorf("Test 1: unexpected parse error '%v'", err) - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 1: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(true, true, "./foo.pb", "/bar/baz", "apidocs", t, 1) - - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"} - err = parseReqParam("allow_delete_body=true,allow_merge=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", f, pkgMap) - if err != nil { - t.Errorf("Test 2: unexpected parse error '%v'", err) - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 2: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(true, true,"./foo.pb", "/bar/baz", "test_name", t, 2) - - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"} - err = parseReqParam("allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", f, pkgMap) - if err != nil { - t.Errorf("Test 3: unexpected parse error '%v'", err) - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 3: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(false, false,"stdin", "", "apidocs", t, 3) - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{} - err = parseReqParam("", f, pkgMap) - if err != nil { - t.Errorf("Test 4: unexpected parse error '%v'", err) - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 4: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(false, false, "stdin", "", "apidocs", t, 4) - - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{} - err = parseReqParam("unknown_param=17", f, pkgMap) - if err == nil { - t.Error("Test 5: expected parse error not returned") - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 5: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(false, false,"stdin", "", "apidocs", t, 5) + for i, tc := range testcases { + t.Run(tc.name, func(tt *testing.T) { + f := flag.CommandLine + pkgMap := make(map[string]string) + err := parseReqParam(tc.request, f, pkgMap) + if tc.expectedError == nil { + if err != nil { + tt.Errorf("unexpected parse error '%v'", err) + } + if !reflect.DeepEqual(pkgMap, tc.expected) { + tt.Errorf("pkgMap parse error, expected '%v', got '%v'", tc.expected, pkgMap) + } + } else { + if err == nil { + tt.Error("expected parse error not returned") + } + if !reflect.DeepEqual(pkgMap, tc.expected) { + tt.Errorf("pkgMap parse error, expected '%v', got '%v'", tc.expected, pkgMap) + } + if err.Error() != tc.expectedError.Error() { + tt.Errorf("expected error malformed, expected %q, go %q", tc.expectedError.Error(), err.Error()) + } + } + checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{} - err = parseReqParam("Mfoo", f, pkgMap) - if err == nil { - t.Error("Test 6: expected parse error not returned") + clearFlags() + }) } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 6: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(false, false,"stdin", "", "apidocs", t, 6) - - clearFlags() - pkgMap = make(map[string]string) - expected = map[string]string{} - err = parseReqParam("allow_delete_body,file,import_prefix,allow_merge,merge_file_name", f, pkgMap) - if err != nil { - t.Errorf("Test 7: unexpected parse error '%v'", err) - } - if !reflect.DeepEqual(pkgMap, expected) { - t.Errorf("Test 7: pkgMap parse error, expected '%v', got '%v'", expected, pkgMap) - } - checkFlags(true, true, "", "", "", t, 7) } -func checkFlags(allowDeleteV, allowMergeV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { +func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { if *importPrefix != importPathV { t.Errorf("Test %v: import_prefix misparsed, expected '%v', got '%v'", tid, importPathV, *importPrefix) } @@ -126,6 +139,9 @@ func checkFlags(allowDeleteV, allowMergeV bool, fileV, importPathV, mergeFileNam if *mergeFileName != mergeFileNameV { t.Errorf("Test %v: merge_file_name misparsed, expected '%v', got '%v'", tid, mergeFileNameV, *mergeFileName) } + if *allowRepeatedFieldsInBody != allowRepeatedFieldsInBodyV { + t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, allowRepeatedFieldsInBodyV, *allowRepeatedFieldsInBody) + } } func clearFlags() { @@ -133,5 +149,6 @@ func clearFlags() { *file = "stdin" *allowDeleteBody = false *allowMerge = false + *allowRepeatedFieldsInBody = false *mergeFileName = "apidocs" } From ff4dc68bd6b2ae667eada815c8856fcc341956d8 Mon Sep 17 00:00:00 2001 From: Alex Bice Date: Fri, 18 Jan 2019 16:04:34 -0700 Subject: [PATCH 0096/1518] marshal_jsonpb: Added nil slice default value (#854) * marshal_jsonpb: Added nil slice default value * marshal_jsonpb: reduced indentation --- examples/integration/integration_test.go | 68 ++++++++---- examples/server/responsebody.go | 5 + runtime/marshal_jsonpb.go | 4 + runtime/marshal_jsonpb_test.go | 130 +++++++++++++++++++++++ 4 files changed, 189 insertions(+), 18 deletions(-) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index f9ea66b9a26..c361300371d 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1360,25 +1360,57 @@ func testResponseBodies(t *testing.T, port int) { } func testResponseStrings(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/responsestrings/foo", port) - resp, err := http.Get(url) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) - return - } - defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + // Run Secondary server with different marshalling + ch := make(chan error) + go func() { + if err := runGateway(ctx, ":8081", runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EmitDefaults: true})); err != nil { + ch <- fmt.Errorf("cannot run gateway service: %v", err) + } + }() - if got, want := resp.StatusCode, http.StatusOK; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - } + port = 8081 - if got, want := string(buf), `["hello","foo"]`; got != want { - t.Errorf("response = %q; want %q", got, want) + for i, spec := range []struct { + endpoint string + expectedCode int + expectedBody string + }{ + { + endpoint: fmt.Sprintf("http://localhost:%d/responsestrings/foo", port), + expectedCode: http.StatusOK, + expectedBody: `["hello","foo"]`, + }, + { + endpoint: fmt.Sprintf("http://localhost:%d/responsestrings/empty", port), + expectedCode: http.StatusOK, + expectedBody: `[]`, + }, + } { + t.Run(strconv.Itoa(i), func(t *testing.T) { + url := spec.endpoint + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, spec.expectedCode; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + if got, want := string(buf), spec.expectedBody; got != want { + t.Errorf("response = %q; want %q", got, want) + } + }) } + } diff --git a/examples/server/responsebody.go b/examples/server/responsebody.go index f27a0718be7..e5dc800a423 100644 --- a/examples/server/responsebody.go +++ b/examples/server/responsebody.go @@ -33,6 +33,11 @@ func (s *responseBodyServer) ListResponseBodies(ctx context.Context, req *exampl } func (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseStrings, error) { + if req.Data == "empty" { + return &examples.RepeatedResponseStrings{ + Values: []string{}, + }, nil + } return &examples.RepeatedResponseStrings{ Values: []string{"hello", req.Data}, }, nil diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index f56072a6f15..1567944e6f2 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -67,6 +67,10 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { rv = rv.Elem() } + if rv.Kind() == reflect.Slice && rv.IsNil() && j.EmitDefaults { + return []byte("[]"), nil + } + if rv.Kind() == reflect.Map { m := make(map[string]*json.RawMessage) for _, k := range rv.MapKeys() { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 00dcfd99c5e..72d791d262b 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -3,6 +3,7 @@ package runtime_test import ( "bytes" "reflect" + "strconv" "strings" "testing" @@ -614,3 +615,132 @@ var ( // TODO(yugui) Add other well-known types once jsonpb supports them } ) + +func TestJSONPbMarshalResponseBodies(t *testing.T) { + for i, spec := range []struct { + input interface{} + emitDefaults bool + verifier func(json string) + }{ + { + input: &examplepb.ResponseBodyOut{ + Response: &examplepb.ResponseBodyOut_Response{Data: "abcdef"}, + }, + verifier: func(json string) { + expected := `{"response":{"data":"abcdef"}}` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + emitDefaults: true, + input: &examplepb.ResponseBodyOut{}, + verifier: func(json string) { + expected := `{"response":null}` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: &examplepb.RepeatedResponseBodyOut_Response{}, + verifier: func(json string) { + expected := `{}` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + emitDefaults: true, + input: &examplepb.RepeatedResponseBodyOut_Response{}, + verifier: func(json string) { + expected := `{"data":""}` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil), + verifier: func(json string) { + expected := `null` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + emitDefaults: true, + input: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil), + verifier: func(json string) { + expected := `[]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: []*examplepb.RepeatedResponseBodyOut_Response{}, + verifier: func(json string) { + expected := `[]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: []string{"something"}, + verifier: func(json string) { + expected := `["something"]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: []string{}, + verifier: func(json string) { + expected := `[]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + input: ([]string)(nil), + verifier: func(json string) { + expected := `null` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + emitDefaults: true, + input: ([]string)(nil), + verifier: func(json string) { + expected := `[]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + } { + + t.Run(strconv.Itoa(i), func(t *testing.T) { + m := runtime.JSONPb{ + EmitDefaults: spec.emitDefaults, + } + val := spec.input + buf, err := m.Marshal(val) + if err != nil { + t.Errorf("m.Marshal(%v) failed with %v; want success; spec=%v", val, err, spec) + } + if spec.verifier != nil { + spec.verifier(string(buf)) + } + }) + } +} From 035302926bc2dd7bf534ad636092693bfe652c5e Mon Sep 17 00:00:00 2001 From: Alex Bice Date: Mon, 21 Jan 2019 06:13:05 -0700 Subject: [PATCH 0097/1518] marshal_jsonpb: add check for slice sub types implementing proto.Message (#856) * marshal_jsonpb: add check for slice sub types implementing proto.Message * Added more tests. --- examples/clients/responsebody/BUILD.bazel | 1 + ...xamplepbRepeatedResponseBodyOutResponse.md | 1 + .../responsebody/docs/ResponseResponseType.md | 9 ++ ...epb_repeated_response_body_out_response.go | 2 + .../responsebody/response_response_type.go | 14 ++ examples/integration/integration_test.go | 7 +- .../examplepb/response_body_service.pb.go | 120 ++++++++++++------ .../examplepb/response_body_service.proto | 13 +- .../response_body_service.swagger.json | 13 ++ runtime/marshal_jsonpb.go | 39 +++++- runtime/marshal_jsonpb_test.go | 33 ++++- 11 files changed, 208 insertions(+), 44 deletions(-) create mode 100644 examples/clients/responsebody/docs/ResponseResponseType.md create mode 100644 examples/clients/responsebody/response_response_type.go diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index 393d28446e4..e621bea6960 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "examplepb_response_body_out_response.go", "examplepb_response_body_req.go", "response_body_service_api.go", + "response_response_type.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", visibility = ["//visibility:public"], diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md index b11c5bb123f..64153cb125c 100644 --- a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md +++ b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md @@ -4,6 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **Data** | **string** | | [optional] [default to null] +**Type_** | [**ResponseResponseType**](ResponseResponseType.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/clients/responsebody/docs/ResponseResponseType.md b/examples/clients/responsebody/docs/ResponseResponseType.md new file mode 100644 index 00000000000..31085130a0c --- /dev/null +++ b/examples/clients/responsebody/docs/ResponseResponseType.md @@ -0,0 +1,9 @@ +# ResponseResponseType + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go b/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go index c13c50cb507..8c5c20bac24 100644 --- a/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go +++ b/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go @@ -13,4 +13,6 @@ package responsebody type ExamplepbRepeatedResponseBodyOutResponse struct { Data string `json:"data,omitempty"` + + Type_ ResponseResponseType `json:"type,omitempty"` } diff --git a/examples/clients/responsebody/response_response_type.go b/examples/clients/responsebody/response_response_type.go new file mode 100644 index 00000000000..1c986fb7f92 --- /dev/null +++ b/examples/clients/responsebody/response_response_type.go @@ -0,0 +1,14 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * OpenAPI spec version: version not set + * + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package responsebody + +type ResponseResponseType struct { +} diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index c361300371d..b0e8926a82c 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1365,7 +1365,7 @@ func testResponseStrings(t *testing.T, port int) { // Run Secondary server with different marshalling ch := make(chan error) go func() { - if err := runGateway(ctx, ":8081", runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EmitDefaults: true})); err != nil { + if err := runGateway(ctx, ":8081", runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EnumsAsInts: false, EmitDefaults: true})); err != nil { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() @@ -1387,6 +1387,11 @@ func testResponseStrings(t *testing.T, port int) { expectedCode: http.StatusOK, expectedBody: `[]`, }, + { + endpoint: fmt.Sprintf("http://localhost:%d/responsebodies/foo", port), + expectedCode: http.StatusOK, + expectedBody: `[{"data":"foo","type":"UNKNOWN"}]`, + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { url := spec.endpoint diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index 922aafa8fef..ba11d58bb78 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -24,6 +24,35 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +type RepeatedResponseBodyOut_Response_ResponseType int32 + +const ( + // UNKNOWN + RepeatedResponseBodyOut_Response_UNKNOWN RepeatedResponseBodyOut_Response_ResponseType = 0 + // A is 1 + RepeatedResponseBodyOut_Response_A RepeatedResponseBodyOut_Response_ResponseType = 1 + // B is 2 + RepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2 +) + +var RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "A", + 2: "B", +} +var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ + "UNKNOWN": 0, + "A": 1, + "B": 2, +} + +func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { + return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) +} +func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2, 0, 0} +} + type ResponseBodyIn struct { Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -35,7 +64,7 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{0} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{0} } func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) @@ -73,7 +102,7 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{1} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{1} } func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) @@ -111,7 +140,7 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{1, 0} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{1, 0} } func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) @@ -149,7 +178,7 @@ func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut) ProtoMessage() {} func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{2} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2} } func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) @@ -177,17 +206,18 @@ func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Respo } type RepeatedResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedResponseBodyOut_Response{} } func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{2, 0} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2, 0} } func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) @@ -214,6 +244,13 @@ func (m *RepeatedResponseBodyOut_Response) GetData() string { return "" } +func (m *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { + if m != nil { + return m.Type + } + return RepeatedResponseBodyOut_Response_UNKNOWN +} + type RepeatedResponseStrings struct { Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -225,7 +262,7 @@ func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseStrings) ProtoMessage() {} func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_5b2acb9aa53489f0, []int{3} + return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{3} } func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) @@ -259,6 +296,7 @@ func init() { proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut") proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut.Response") proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseStrings") + proto.RegisterEnum("grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) } // Reference imports to suppress errors if they are not otherwise used. @@ -400,33 +438,37 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_5b2acb9aa53489f0) -} - -var fileDescriptor_response_body_service_5b2acb9aa53489f0 = []byte{ - // 378 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xd3, 0xc1, 0x4a, 0xc3, 0x30, - 0x18, 0x07, 0x70, 0xb2, 0x8d, 0xb1, 0x65, 0xe0, 0x20, 0x93, 0x6d, 0x0c, 0xd1, 0x5a, 0x44, 0x7b, - 0x6a, 0x75, 0x7a, 0xd0, 0xa3, 0xbb, 0xc8, 0x40, 0x10, 0x3a, 0xbc, 0x08, 0x32, 0xd2, 0xf5, 0xa3, - 0x14, 0x66, 0x12, 0x9a, 0x6c, 0x3a, 0xc4, 0x8b, 0x27, 0x0f, 0xde, 0xbc, 0x78, 0xf0, 0x05, 0x7c, - 0x1e, 0x5f, 0xc1, 0x07, 0x91, 0x75, 0x6d, 0xa8, 0x73, 0xa0, 0xdb, 0xc1, 0x5b, 0xd3, 0x24, 0xff, - 0xfc, 0x9a, 0xef, 0x2b, 0x3e, 0x82, 0x3b, 0x7a, 0x23, 0x86, 0x20, 0x1d, 0x11, 0x71, 0xc5, 0x9d, - 0x64, 0x28, 0x3c, 0x27, 0x02, 0x29, 0x38, 0x93, 0xd0, 0xf7, 0xb8, 0x3f, 0xe9, 0x4b, 0x88, 0xc6, - 0xe1, 0x00, 0xec, 0x78, 0x15, 0xd9, 0x0a, 0x22, 0x31, 0xb0, 0x03, 0xaa, 0xe0, 0x96, 0x4e, 0xec, - 0x34, 0xc2, 0xd6, 0x9b, 0x5b, 0x1b, 0x01, 0xe7, 0xc1, 0x10, 0x1c, 0x2a, 0x42, 0x87, 0x32, 0xc6, - 0x15, 0x55, 0x21, 0x67, 0x72, 0xb6, 0xdd, 0xdc, 0xc1, 0x6b, 0x6e, 0x92, 0xde, 0xe1, 0xfe, 0xa4, - 0xcb, 0x08, 0xc1, 0x05, 0x9f, 0x2a, 0xda, 0x44, 0x06, 0xb2, 0xca, 0x6e, 0xfc, 0x6c, 0x3e, 0x21, - 0x5c, 0xcd, 0x2e, 0xbb, 0x18, 0x29, 0x72, 0x89, 0x4b, 0xa9, 0xab, 0x99, 0x33, 0x90, 0x55, 0x69, - 0x9f, 0xd8, 0xbf, 0x58, 0xec, 0xb9, 0x0c, 0x3d, 0x76, 0x75, 0x54, 0x6b, 0x13, 0x97, 0xd2, 0xb7, - 0x0b, 0x29, 0xaf, 0x08, 0x37, 0x5c, 0x10, 0x40, 0x15, 0xf8, 0xf3, 0xa4, 0xeb, 0x6f, 0xa4, 0xbc, - 0x55, 0x69, 0x9f, 0xfe, 0x81, 0xb4, 0x30, 0x6b, 0x15, 0xda, 0xc1, 0x4f, 0x59, 0x4f, 0x45, 0x21, - 0x0b, 0x24, 0xa9, 0xe3, 0xe2, 0x98, 0x0e, 0x47, 0x20, 0x9b, 0xc8, 0xc8, 0x5b, 0x65, 0x37, 0x19, - 0xb5, 0x9f, 0x0b, 0xb8, 0x96, 0x3d, 0xb9, 0x37, 0xab, 0x2d, 0x79, 0x43, 0xb8, 0x7a, 0x06, 0x2a, - 0x3b, 0x45, 0x9c, 0xa5, 0xae, 0xb7, 0xcb, 0x5a, 0xfb, 0xcb, 0xd6, 0xc3, 0xdc, 0x7d, 0xfc, 0xf8, - 0x7c, 0xc9, 0x19, 0x64, 0x5d, 0xb7, 0xdc, 0xb4, 0xe3, 0x9c, 0xfb, 0xe9, 0xe7, 0x3d, 0x78, 0xfa, - 0x26, 0xc8, 0x3b, 0xc2, 0xe4, 0x3c, 0x94, 0x59, 0x5f, 0x08, 0x72, 0x79, 0xe1, 0xf1, 0xaa, 0xe5, - 0x31, 0xad, 0x58, 0x6a, 0x92, 0x7a, 0x56, 0x1a, 0x82, 0x5c, 0x68, 0xad, 0x65, 0xad, 0x69, 0x49, - 0xfe, 0x01, 0x9b, 0x1c, 0x65, 0xee, 0xc5, 0xd8, 0x6d, 0xd2, 0xd0, 0x58, 0x39, 0x9b, 0x49, 0xb5, - 0x49, 0x3b, 0x74, 0x2a, 0x57, 0x65, 0x9d, 0xe6, 0x15, 0xe3, 0x3f, 0xf4, 0xf0, 0x2b, 0x00, 0x00, - 0xff, 0xff, 0x39, 0xa0, 0x6e, 0xed, 0x18, 0x04, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_811d1d707fc0d3aa) +} + +var fileDescriptor_response_body_service_811d1d707fc0d3aa = []byte{ + // 441 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, + 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, + 0xd1, 0xb8, 0x49, 0x34, 0xba, 0xd0, 0x65, 0xbb, 0x91, 0xa2, 0xa4, 0x90, 0x5a, 0x04, 0x41, 0xca, + 0xa4, 0x39, 0x84, 0x40, 0xcd, 0x0c, 0x99, 0x69, 0x35, 0x88, 0x1b, 0x57, 0x2e, 0xdc, 0xb9, 0xf5, + 0x01, 0x74, 0xe1, 0xd3, 0xf8, 0x0a, 0x3e, 0x88, 0x34, 0x4d, 0x86, 0x58, 0x83, 0x5a, 0x05, 0x57, + 0x99, 0x33, 0x7f, 0xbe, 0xf3, 0xe3, 0x7c, 0xe7, 0x04, 0xdf, 0x83, 0x57, 0xec, 0x85, 0x58, 0x82, + 0xf4, 0x44, 0xce, 0x15, 0xf7, 0xaa, 0x50, 0x44, 0x5e, 0x0e, 0x52, 0xf0, 0x4c, 0xc2, 0x3c, 0xe2, + 0x71, 0x31, 0x97, 0x90, 0xaf, 0xd3, 0x05, 0xb8, 0xe5, 0x2d, 0x72, 0x35, 0xc9, 0xc5, 0xc2, 0x4d, + 0x98, 0x82, 0x97, 0xac, 0x70, 0x6b, 0x09, 0x57, 0x3f, 0x1e, 0x5c, 0x4e, 0x38, 0x4f, 0x96, 0xe0, + 0x31, 0x91, 0x7a, 0x2c, 0xcb, 0xb8, 0x62, 0x2a, 0xe5, 0x99, 0xdc, 0x3e, 0xa7, 0xd7, 0xf1, 0x51, + 0x58, 0xa9, 0x8f, 0x78, 0x5c, 0x8c, 0x33, 0x42, 0x70, 0x37, 0x66, 0x8a, 0x59, 0xc8, 0x46, 0x4e, + 0x2f, 0x2c, 0xd7, 0xf4, 0x1d, 0xc2, 0xc7, 0xcd, 0x6b, 0x93, 0x95, 0x22, 0x33, 0x7c, 0x58, 0x73, + 0x59, 0x86, 0x8d, 0x1c, 0xd3, 0x7f, 0xe0, 0xfe, 0x86, 0xc5, 0xdd, 0xd1, 0xd0, 0x71, 0xa8, 0xa5, + 0x06, 0x57, 0xf0, 0x61, 0xbd, 0xdb, 0x8a, 0xf2, 0xc9, 0xc0, 0x67, 0x21, 0x08, 0x60, 0x0a, 0xe2, + 0x5d, 0xa4, 0xe7, 0x3f, 0x20, 0x75, 0x1c, 0xd3, 0x1f, 0xfe, 0x01, 0x52, 0xab, 0x56, 0x1b, 0xda, + 0x17, 0xf4, 0x6b, 0x36, 0x12, 0xe1, 0xae, 0x2a, 0x04, 0x58, 0x1d, 0x1b, 0x39, 0x47, 0x7e, 0xf0, + 0xcf, 0xb9, 0xf5, 0xe2, 0x49, 0x21, 0x20, 0x2c, 0xb5, 0xe9, 0x2d, 0x7c, 0xb1, 0xb9, 0x4b, 0x4c, + 0x7c, 0x61, 0x16, 0x3c, 0x0a, 0x26, 0x4f, 0x83, 0xfe, 0x39, 0x72, 0x1e, 0xa3, 0x61, 0x1f, 0x6d, + 0x3e, 0xa3, 0xbe, 0x41, 0xef, 0xfc, 0x5c, 0xa9, 0xa9, 0xca, 0xd3, 0x2c, 0x91, 0xe4, 0x14, 0x1f, + 0xac, 0xd9, 0x72, 0x05, 0xd2, 0x42, 0x76, 0xc7, 0xe9, 0x85, 0x55, 0xe4, 0xbf, 0xef, 0xe2, 0x93, + 0x26, 0xcd, 0x74, 0xdb, 0x6b, 0xe4, 0x23, 0xc2, 0xc7, 0x0f, 0x41, 0x35, 0x8f, 0x88, 0xb7, 0x97, + 0xdd, 0xe3, 0x6c, 0x70, 0x7b, 0xdf, 0xfe, 0xa0, 0x37, 0xde, 0x7e, 0xfd, 0xf6, 0xc1, 0xb0, 0xc9, + 0x25, 0x3d, 0x02, 0x9b, 0x09, 0xf0, 0x5e, 0x6f, 0xaa, 0xfd, 0x26, 0xd2, 0xce, 0x90, 0xcf, 0x08, + 0x93, 0xc7, 0xa9, 0x6c, 0xf2, 0xa5, 0x20, 0xf7, 0x27, 0xbc, 0xff, 0xb7, 0x96, 0x51, 0xa7, 0x24, + 0xa5, 0xe4, 0xb4, 0x49, 0x9a, 0x82, 0x6c, 0x65, 0x3d, 0x69, 0xb2, 0xd6, 0x96, 0xfc, 0x07, 0xd8, + 0x2a, 0x15, 0xbd, 0x59, 0xc2, 0x5e, 0x23, 0x67, 0x1a, 0x56, 0x6e, 0x4f, 0x6a, 0xda, 0xaa, 0x1d, + 0x46, 0xe6, 0xb3, 0x9e, 0x56, 0x8b, 0x0e, 0xca, 0x3f, 0xc6, 0xdd, 0xef, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x07, 0xc9, 0xea, 0x62, 0xa8, 0x04, 0x00, 0x00, } diff --git a/examples/proto/examplepb/response_body_service.proto b/examples/proto/examplepb/response_body_service.proto index 9e2f0165a3e..48b50f80545 100644 --- a/examples/proto/examplepb/response_body_service.proto +++ b/examples/proto/examplepb/response_body_service.proto @@ -13,7 +13,18 @@ message ResponseBodyOut { } message RepeatedResponseBodyOut { - message Response { string data = 1; } + message Response { + string data = 1; + enum ResponseType { + // UNKNOWN + UNKNOWN = 0; + // A is 1 + A = 1; + // B is 2 + B = 2; + } + ResponseType type = 3; + } repeated Response response = 2; } diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index c77d6ea05e0..820129e93eb 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -95,6 +95,16 @@ } }, "definitions": { + "ResponseResponseType": { + "type": "string", + "enum": [ + "UNKNOWN", + "A", + "B" + ], + "default": "UNKNOWN", + "title": "- UNKNOWN: UNKNOWN\n - A: A is 1\n - B: B is 2" + }, "examplepbRepeatedResponseBodyOut": { "type": "object", "properties": { @@ -111,6 +121,9 @@ "properties": { "data": { "type": "string" + }, + "type": { + "$ref": "#/definitions/ResponseResponseType" } } }, diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 1567944e6f2..3530dddd0aa 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -50,6 +50,11 @@ func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error { return (*jsonpb.Marshaler)(j).Marshal(w, p) } +var ( + // protoMessageType is stored to prevent constant lookup of the same type at runtime. + protoMessageType = reflect.TypeOf((*proto.Message)(nil)).Elem() +) + // marshalNonProto marshals a non-message field of a protobuf message. // This function does not correctly marshals arbitrary data structure into JSON, // but it is only capable of marshaling non-message field values of protobuf, @@ -67,8 +72,38 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { rv = rv.Elem() } - if rv.Kind() == reflect.Slice && rv.IsNil() && j.EmitDefaults { - return []byte("[]"), nil + if rv.Kind() == reflect.Slice { + if rv.IsNil() { + if j.EmitDefaults { + return []byte("[]"), nil + } + return []byte("null"), nil + } + + if rv.Type().Elem().Implements(protoMessageType) { + var buf bytes.Buffer + err := buf.WriteByte('[') + if err != nil { + return nil, err + } + for i := 0; i < rv.Len(); i++ { + if i != 0 { + err = buf.WriteByte(',') + if err != nil { + return nil, err + } + } + if err = (*jsonpb.Marshaler)(j).Marshal(&buf, rv.Index(i).Interface().(proto.Message)); err != nil { + return nil, err + } + } + err = buf.WriteByte(']') + if err != nil { + return nil, err + } + + return buf.Bytes(), nil + } } if rv.Kind() == reflect.Map { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 72d791d262b..cec41bda914 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -656,7 +656,7 @@ func TestJSONPbMarshalResponseBodies(t *testing.T) { emitDefaults: true, input: &examplepb.RepeatedResponseBodyOut_Response{}, verifier: func(json string) { - expected := `{"data":""}` + expected := `{"data":"","type":"UNKNOWN"}` if json != expected { t.Errorf("json not equal (%q, %q)", json, expected) } @@ -727,6 +727,37 @@ func TestJSONPbMarshalResponseBodies(t *testing.T) { } }, }, + { + input: []*examplepb.RepeatedResponseBodyOut_Response{ + &examplepb.RepeatedResponseBodyOut_Response{}, + &examplepb.RepeatedResponseBodyOut_Response{ + Data: "abc", + Type: examplepb.RepeatedResponseBodyOut_Response_A, + }, + }, + verifier: func(json string) { + expected := `[{},{"data":"abc","type":"A"}]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, + { + emitDefaults: true, + input: []*examplepb.RepeatedResponseBodyOut_Response{ + &examplepb.RepeatedResponseBodyOut_Response{}, + &examplepb.RepeatedResponseBodyOut_Response{ + Data: "abc", + Type: examplepb.RepeatedResponseBodyOut_Response_B, + }, + }, + verifier: func(json string) { + expected := `[{"data":"","type":"UNKNOWN"},{"data":"abc","type":"B"}]` + if json != expected { + t.Errorf("json not equal (%q, %q)", json, expected) + } + }, + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { From 078fa178386eb47a74d194114fddefdf4ac30264 Mon Sep 17 00:00:00 2001 From: Uladzimir Trehubenka Date: Tue, 22 Jan 2019 13:41:01 +0300 Subject: [PATCH 0098/1518] Added WithDisablePathLengthFallback option (to fix issue #447) (#855) --- runtime/mux.go | 30 ++++++++++++++++++----------- runtime/mux_test.go | 47 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 3064c69ecbd..ec81e55b5ef 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -20,13 +20,14 @@ type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[str // It matches http requests to patterns and invokes the corresponding handler. type ServeMux struct { // handlers maps HTTP method to a list of handlers. - handlers map[string][]handler - forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error - marshalers marshalerRegistry - incomingHeaderMatcher HeaderMatcherFunc - outgoingHeaderMatcher HeaderMatcherFunc - metadataAnnotators []func(context.Context, *http.Request) metadata.MD - protoErrorHandler ProtoErrorHandlerFunc + handlers map[string][]handler + forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error + marshalers marshalerRegistry + incomingHeaderMatcher HeaderMatcherFunc + outgoingHeaderMatcher HeaderMatcherFunc + metadataAnnotators []func(context.Context, *http.Request) metadata.MD + protoErrorHandler ProtoErrorHandlerFunc + disablePathLengthFallback bool } // ServeMuxOption is an option that can be given to a ServeMux on construction. @@ -102,6 +103,13 @@ func WithProtoErrorHandler(fn ProtoErrorHandlerFunc) ServeMuxOption { } } +// WithDisablePathLengthFallback returns a ServeMuxOption for disable path length fallback. +func WithDisablePathLengthFallback() ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.disablePathLengthFallback = true + } +} + // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ @@ -177,7 +185,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { components[l-1], verb = c[:idx], c[idx+1:] } - if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && isPathLengthFallback(r) { + if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { r.Method = strings.ToUpper(override) if err := r.ParseForm(); err != nil { if s.protoErrorHandler != nil { @@ -211,7 +219,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { continue } // X-HTTP-Method-Override is optional. Always allow fallback to POST. - if isPathLengthFallback(r) { + if s.isPathLengthFallback(r) { if err := r.ParseForm(); err != nil { if s.protoErrorHandler != nil { _, outboundMarshaler := MarshalerForRequest(s, r) @@ -250,8 +258,8 @@ func (s *ServeMux) GetForwardResponseOptions() []func(context.Context, http.Resp return s.forwardResponseOptions } -func isPathLengthFallback(r *http.Request) bool { - return r.Method == "POST" && r.Header.Get("Content-Type") == "application/x-www-form-urlencoded" +func (s *ServeMux) isPathLengthFallback(r *http.Request) bool { + return !s.disablePathLengthFallback && r.Method == "POST" && r.Header.Get("Content-Type") == "application/x-www-form-urlencoded" } type handler struct { diff --git a/runtime/mux_test.go b/runtime/mux_test.go index f3ecbf63388..08ed6cc6806 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -27,6 +27,8 @@ func TestMuxServeHTTP(t *testing.T) { respStatus int respContent string + + disablePathLengthFallback bool }{ { patterns: nil, @@ -122,6 +124,45 @@ func TestMuxServeHTTP(t *testing.T) { respStatus: http.StatusOK, respContent: "GET /foo", }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"foo"}, + }, + }, + reqMethod: "POST", + reqPath: "/foo", + headers: map[string]string{ + "Content-Type": "application/x-www-form-urlencoded", + }, + respStatus: http.StatusMethodNotAllowed, + respContent: "Method Not Allowed\n", + disablePathLengthFallback: true, + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"foo"}, + }, + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"foo"}, + }, + }, + reqMethod: "POST", + reqPath: "/foo", + headers: map[string]string{ + "Content-Type": "application/x-www-form-urlencoded", + }, + respStatus: http.StatusOK, + respContent: "POST /foo", + disablePathLengthFallback: true, + }, { patterns: []stubPattern{ { @@ -199,7 +240,11 @@ func TestMuxServeHTTP(t *testing.T) { respContent: "GET /foo/{id=*}:verb", }, } { - mux := runtime.NewServeMux() + var opts []runtime.ServeMuxOption + if spec.disablePathLengthFallback { + opts = append(opts, runtime.WithDisablePathLengthFallback()) + } + mux := runtime.NewServeMux(opts...) for _, p := range spec.patterns { func(p stubPattern) { pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb) From 92218224b669754f7e4337d22608a8aadae36ae0 Mon Sep 17 00:00:00 2001 From: Fabian Hernandez Date: Tue, 22 Jan 2019 11:44:56 -0600 Subject: [PATCH 0099/1518] Adding support for default and required swagger annotation fields. (#852) * Adding support for default and required swagger annotation fields:Solves issue #851 * Fixing test for swagger generation * updating swagger definition * removing breaking changes over enums * Adding example for required field as an array --- .../abe/a_bit_of_everything_service_api.go | 6 +- .../abe/examplepb_a_bit_of_everything.go | 5 +- .../proto/examplepb/a_bit_of_everything.pb.go | 406 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 4 +- .../a_bit_of_everything.swagger.json | 21 +- protoc-gen-swagger/genswagger/template.go | 25 +- 6 files changed, 251 insertions(+), 216 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 85e864ca833..1e8956c2aff 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -42,7 +42,7 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * Create a new ABitOfEverything * This API creates a new ABitOfEverything * - * @param floatValue + * @param floatValue Float value field * @param doubleValue * @param int64Value * @param uint64Value @@ -521,10 +521,10 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * * * @param uuid + * @param floatValue Float value field * @param singleNestedName name is nested field. * @param singleNestedAmount * @param singleNestedOk - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param floatValue * @param doubleValue * @param int64Value * @param uint64Value @@ -549,7 +549,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index 9701914d126..91320d0e7c3 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -23,11 +23,12 @@ type ExamplepbABitOfEverything struct { Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field FloatValue float32 `json:"float_value,omitempty"` - DoubleValue float64 `json:"double_value,omitempty"` + DoubleValue float64 `json:"double_value"` - Int64Value string `json:"int64_value,omitempty"` + Int64Value string `json:"int64_value"` Uint64Value string `json:"uint64_value,omitempty"` diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index bb0eb2d17c9..896288bd685 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -129,7 +129,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -467,7 +467,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{0, 0} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -536,7 +536,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{1} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -679,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{2} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -718,7 +718,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{3} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -765,7 +765,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_583e142cf4e91dc2, []int{4} + return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1529,198 +1529,200 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_583e142cf4e91dc2) -} - -var fileDescriptor_a_bit_of_everything_583e142cf4e91dc2 = []byte{ - // 3012 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0x5b, 0x6f, 0x1b, 0xc7, - 0xb9, 0x5a, 0x2e, 0x75, 0x1b, 0xdd, 0xa8, 0x91, 0x2f, 0x32, 0xad, 0x44, 0x63, 0xc6, 0x39, 0xd9, - 0x28, 0x26, 0x57, 0xa2, 0x14, 0xc7, 0x66, 0x90, 0xf8, 0x50, 0x17, 0xdb, 0x8a, 0x6d, 0x59, 0x5e, - 0x3b, 0x3e, 0x81, 0x63, 0x47, 0x18, 0x92, 0x43, 0x72, 0x2d, 0xee, 0xce, 0x66, 0x77, 0x56, 0x36, - 0x0f, 0x0f, 0xcf, 0xc9, 0x69, 0x81, 0x16, 0x6d, 0x1e, 0x0a, 0x28, 0xe8, 0x4b, 0x51, 0xf4, 0x17, - 0xf4, 0xb5, 0x4f, 0x79, 0x68, 0xfb, 0xd0, 0xa7, 0xbe, 0xb5, 0x45, 0x80, 0xa2, 0x40, 0x5f, 0xda, - 0x02, 0xfd, 0x05, 0x2d, 0x8a, 0x02, 0x45, 0x31, 0xb3, 0xbb, 0xd4, 0xee, 0x92, 0xb4, 0x4c, 0x3b, - 0xc8, 0x8b, 0xb4, 0x33, 0xf3, 0xdd, 0xbf, 0x6f, 0xbe, 0xcb, 0x10, 0xe4, 0xc9, 0x53, 0x6c, 0x58, - 0x0d, 0xe2, 0xa8, 0x96, 0x4d, 0x19, 0x55, 0xfd, 0xa5, 0x55, 0x52, 0xf1, 0x5e, 0x49, 0x67, 0x7b, - 0xb4, 0xba, 0x47, 0x0e, 0x88, 0xdd, 0x64, 0x75, 0xdd, 0xac, 0xe5, 0x04, 0x0c, 0x5c, 0xac, 0xd9, - 0x56, 0x39, 0x57, 0xc3, 0x8c, 0x3c, 0xc1, 0xcd, 0x5c, 0x40, 0x20, 0xd7, 0x41, 0x4d, 0x2f, 0xd4, - 0x28, 0xad, 0x35, 0x88, 0x8a, 0x2d, 0x5d, 0xc5, 0xa6, 0x49, 0x19, 0x66, 0x3a, 0x35, 0x1d, 0x0f, - 0x3d, 0x8d, 0xfc, 0x53, 0xb1, 0x2a, 0xb9, 0x55, 0xb5, 0xaa, 0x93, 0x46, 0x65, 0xcf, 0xc0, 0xce, - 0xbe, 0x0f, 0x71, 0x36, 0x0e, 0x41, 0x0c, 0x8b, 0x35, 0xfd, 0xc3, 0x57, 0xe3, 0x87, 0x15, 0xd7, - 0x16, 0xf4, 0xfd, 0xf3, 0x37, 0x62, 0x1a, 0x59, 0x98, 0xd5, 0x89, 0xe9, 0x1a, 0xe2, 0x63, 0x8f, - 0x7f, 0x05, 0x72, 0xc4, 0x00, 0x1d, 0xb7, 0xa4, 0x1a, 0xc4, 0x71, 0x70, 0x8d, 0xf8, 0x10, 0xe7, - 0xba, 0x21, 0xf2, 0x31, 0x90, 0xc5, 0xb8, 0x34, 0x4c, 0x37, 0x88, 0xc3, 0xb0, 0x61, 0xf9, 0x00, - 0x17, 0xc4, 0xbf, 0x72, 0xb6, 0x46, 0xcc, 0xac, 0xf3, 0x04, 0xd7, 0x6a, 0xc4, 0x56, 0xa9, 0x25, - 0xec, 0xd1, 0x6d, 0x9b, 0xcc, 0x0f, 0x4f, 0x80, 0x54, 0x71, 0x5d, 0x67, 0xb7, 0xab, 0x5b, 0x1d, - 0xab, 0xc3, 0x47, 0x60, 0xca, 0xd1, 0xcd, 0x5a, 0x83, 0xec, 0x99, 0xc4, 0x61, 0xa4, 0x32, 0x7f, - 0x06, 0x49, 0xca, 0x44, 0xfe, 0x52, 0xee, 0x18, 0x3f, 0xe4, 0xe2, 0x94, 0x72, 0x3b, 0x02, 0x5f, - 0x9b, 0xf4, 0xc8, 0x79, 0x2b, 0x58, 0x07, 0x49, 0xd7, 0xd5, 0x2b, 0xf3, 0x12, 0x92, 0x94, 0xf1, - 0xf5, 0x7b, 0x87, 0xc5, 0x3b, 0x9f, 0x49, 0xd2, 0xf7, 0xa5, 0x1b, 0x1f, 0xe3, 0x6c, 0xb5, 0x98, - 0xbd, 0xba, 0x9c, 0xbd, 0xfc, 0xa8, 0x75, 0xa9, 0x9d, 0x0d, 0x2f, 0xd7, 0x06, 0x59, 0xae, 0xe4, - 0xdb, 0x9a, 0xe0, 0x00, 0x77, 0xc1, 0x88, 0xaf, 0x41, 0x02, 0xc9, 0x2f, 0xa5, 0x81, 0x4f, 0x07, - 0x2e, 0x82, 0x89, 0x6a, 0x83, 0x62, 0xb6, 0x77, 0x80, 0x1b, 0x2e, 0x99, 0x97, 0x91, 0xa4, 0x24, - 0x34, 0x20, 0xb6, 0xee, 0xf3, 0x1d, 0x78, 0x0e, 0x4c, 0x56, 0xa8, 0x5b, 0x6a, 0x10, 0x1f, 0x22, - 0x89, 0x24, 0x45, 0xd2, 0x26, 0xbc, 0x3d, 0x0f, 0x64, 0x11, 0x4c, 0xe8, 0x26, 0xbb, 0xb8, 0xe6, - 0x43, 0x0c, 0x23, 0x49, 0x91, 0x35, 0x20, 0xb6, 0x3a, 0x34, 0xdc, 0x30, 0xc4, 0x08, 0x92, 0x94, - 0xa4, 0x36, 0xe1, 0x86, 0x40, 0x3c, 0x1a, 0xab, 0x79, 0x1f, 0x62, 0x14, 0x49, 0xca, 0xb0, 0xa0, - 0xb1, 0x9a, 0xf7, 0x00, 0x5e, 0x03, 0x53, 0x55, 0xfd, 0x29, 0xa9, 0x74, 0x88, 0x8c, 0x21, 0x49, - 0x19, 0xd1, 0x26, 0xfd, 0xcd, 0x28, 0x50, 0x87, 0xce, 0x38, 0x92, 0x94, 0x51, 0x1f, 0x28, 0xa0, - 0xf4, 0x0a, 0x00, 0x25, 0x4a, 0x1b, 0x3e, 0x04, 0x40, 0x92, 0x32, 0xa6, 0x8d, 0xf3, 0x9d, 0x8e, - 0xb0, 0x0e, 0xb3, 0x75, 0xb3, 0xe6, 0x03, 0x4c, 0x70, 0xaf, 0x6a, 0x13, 0xde, 0x5e, 0x47, 0xd8, - 0x52, 0x93, 0x11, 0xc7, 0x87, 0x78, 0x05, 0x49, 0xca, 0xa4, 0x06, 0xc4, 0x56, 0x44, 0xe1, 0x8e, - 0x18, 0x53, 0x48, 0x52, 0xa6, 0x3c, 0x85, 0x03, 0x29, 0x6e, 0x00, 0xc0, 0xaf, 0x92, 0x0f, 0x30, - 0x8d, 0x24, 0x65, 0x3a, 0x7f, 0xe1, 0x58, 0x77, 0xee, 0xb8, 0x06, 0xb1, 0xf5, 0xf2, 0x96, 0xe9, - 0x1a, 0xda, 0x38, 0xc7, 0xf7, 0x88, 0xed, 0x82, 0x99, 0xce, 0xe5, 0xf4, 0x29, 0xbe, 0x2a, 0x28, - 0x2a, 0x7d, 0x28, 0x06, 0x77, 0x3a, 0xb7, 0x8b, 0x59, 0x5d, 0x50, 0x9b, 0xb2, 0xfc, 0x2f, 0x8f, - 0xa2, 0x03, 0x4e, 0x79, 0x11, 0xb2, 0x17, 0x27, 0xbc, 0x28, 0x08, 0xbf, 0x7f, 0x1c, 0xe1, 0x5b, - 0xde, 0x2d, 0x0f, 0xe8, 0xfb, 0x71, 0xd7, 0x61, 0x37, 0x67, 0x46, 0xd6, 0x1e, 0xd3, 0xd7, 0xc1, - 0xb4, 0x13, 0xf5, 0xdf, 0x0c, 0x92, 0x94, 0x19, 0x6d, 0xca, 0x89, 0x38, 0xb0, 0x03, 0xd6, 0x89, - 0x85, 0x14, 0x92, 0x94, 0x54, 0x00, 0x16, 0x8a, 0x3a, 0x27, 0xec, 0x84, 0x59, 0x24, 0x29, 0xb3, - 0xda, 0x84, 0x13, 0x72, 0x82, 0x0f, 0xd2, 0xa1, 0x03, 0x91, 0xa4, 0x40, 0x0f, 0x24, 0xa0, 0x92, - 0x07, 0x27, 0x6d, 0x62, 0x11, 0xcc, 0x4d, 0x11, 0x89, 0x8b, 0x39, 0x24, 0x2b, 0xe3, 0xda, 0x5c, - 0x70, 0x78, 0x37, 0x14, 0x1f, 0x97, 0xc1, 0x04, 0x35, 0x09, 0xcf, 0xfc, 0x3c, 0xed, 0xce, 0x9f, - 0x10, 0xd9, 0xe6, 0x54, 0xce, 0xcb, 0x74, 0xb9, 0x20, 0xd3, 0xe5, 0xb6, 0xf8, 0xe9, 0xf5, 0x21, - 0x0d, 0x08, 0x60, 0xb1, 0x82, 0xaf, 0x81, 0x49, 0x0f, 0xd5, 0xe3, 0x35, 0x7f, 0x92, 0x47, 0xdf, - 0xf5, 0x21, 0xcd, 0x23, 0xe8, 0x31, 0x81, 0x0f, 0xc1, 0xb8, 0x81, 0x2d, 0x5f, 0x8e, 0x53, 0x22, - 0x13, 0x5c, 0x19, 0x3c, 0x13, 0xdc, 0xc2, 0x96, 0x10, 0x77, 0xcb, 0x64, 0x76, 0x53, 0x1b, 0x33, - 0xfc, 0x25, 0x7c, 0x0a, 0xe6, 0x0c, 0x6c, 0x59, 0x71, 0x7d, 0x4f, 0x0b, 0x3e, 0xd7, 0x5f, 0x88, - 0x8f, 0x15, 0xb1, 0x8f, 0xc7, 0x70, 0xd6, 0x88, 0xef, 0x87, 0x38, 0xfb, 0xb1, 0xe7, 0x71, 0x9e, - 0x7f, 0x39, 0xce, 0x5e, 0xe4, 0x75, 0x73, 0x0e, 0xed, 0xc3, 0x02, 0x98, 0x37, 0xa9, 0xb9, 0x41, - 0xcd, 0x03, 0x62, 0xf2, 0x72, 0x82, 0x1b, 0x3b, 0xd8, 0xf0, 0xd2, 0xdb, 0x7c, 0x5a, 0x24, 0x80, - 0xbe, 0xe7, 0x70, 0x03, 0xcc, 0x74, 0x6a, 0x96, 0x2f, 0xf1, 0x59, 0xe1, 0xf1, 0x74, 0x97, 0xc7, - 0xef, 0x05, 0x70, 0xda, 0x74, 0x07, 0xc5, 0x23, 0xf2, 0x10, 0x74, 0x22, 0x29, 0x7c, 0xd9, 0x16, - 0x90, 0x3c, 0x70, 0x5e, 0x98, 0x0d, 0x08, 0x75, 0x2e, 0x56, 0xfa, 0x97, 0x12, 0x18, 0xf1, 0x8b, - 0x15, 0x04, 0x49, 0x13, 0x1b, 0xc4, 0x2b, 0x56, 0x9a, 0xf8, 0x86, 0xa7, 0xc0, 0x08, 0x36, 0xa8, - 0x6b, 0xb2, 0xf9, 0x84, 0x48, 0x54, 0xfe, 0x0a, 0xde, 0x01, 0x09, 0xba, 0x2f, 0x6a, 0xc2, 0x74, - 0xbe, 0xf8, 0xa2, 0xa5, 0x26, 0xb7, 0x49, 0x88, 0x25, 0x04, 0x4b, 0xd0, 0xfd, 0xcc, 0x22, 0x18, - 0x0b, 0xd6, 0x70, 0x1c, 0x0c, 0x5f, 0x2d, 0xde, 0xbc, 0xbb, 0x95, 0x1a, 0x82, 0x63, 0x20, 0x79, - 0x4f, 0xfb, 0x70, 0x2b, 0x25, 0x15, 0x4e, 0x1f, 0x16, 0x4f, 0xe4, 0x21, 0x4c, 0xb5, 0x50, 0x86, - 0xee, 0x67, 0x0a, 0x28, 0xc3, 0xf7, 0x33, 0xa8, 0x9d, 0xd6, 0xc1, 0x54, 0x24, 0x62, 0x61, 0x0a, - 0xc8, 0xfb, 0xa4, 0xe9, 0x2b, 0xc2, 0x3f, 0xe1, 0x3a, 0x18, 0xf6, 0xcc, 0x96, 0x78, 0x81, 0x74, - 0xea, 0xa1, 0x16, 0x12, 0x97, 0xa4, 0xf4, 0x26, 0x38, 0xd5, 0x3b, 0x68, 0x7b, 0xf0, 0x3c, 0x11, - 0xe6, 0x39, 0x1e, 0xa6, 0xf2, 0xbf, 0x01, 0x95, 0x78, 0x00, 0xf6, 0xa0, 0xb2, 0x13, 0xa6, 0xf2, - 0x32, 0x75, 0xfd, 0x88, 0x7f, 0xe1, 0x9f, 0xd2, 0x61, 0xf1, 0xef, 0x12, 0xa8, 0x2d, 0xcd, 0x15, - 0x51, 0x49, 0x67, 0x88, 0x56, 0xd1, 0x51, 0x27, 0x9a, 0xdf, 0xde, 0x36, 0x59, 0x10, 0xcb, 0x4d, - 0x54, 0xa6, 0x86, 0xd5, 0xd0, 0xcb, 0x3c, 0x6a, 0x90, 0xdf, 0x9f, 0x21, 0xd6, 0xb4, 0x08, 0x62, - 0x14, 0x95, 0xe9, 0x01, 0xb1, 0x91, 0x81, 0xcd, 0x26, 0xaa, 0x12, 0xcc, 0x5c, 0x9b, 0x38, 0x9c, - 0xd6, 0x6e, 0x10, 0xd4, 0xbf, 0x91, 0x44, 0x73, 0xb2, 0x74, 0x1f, 0x9c, 0xbf, 0xaa, 0x9b, 0x15, - 0x44, 0x5d, 0x86, 0x0c, 0x6a, 0x13, 0x84, 0x4b, 0xfc, 0xb3, 0xab, 0x1b, 0xcb, 0xd5, 0x19, 0xb3, - 0x9c, 0x82, 0xaa, 0xd6, 0x74, 0x56, 0x77, 0x4b, 0xb9, 0x32, 0x35, 0x54, 0xae, 0x6e, 0x96, 0x94, - 0xa9, 0xd3, 0x74, 0x18, 0xf1, 0x97, 0xbe, 0xf6, 0xf9, 0x35, 0x98, 0x6f, 0xa1, 0x0c, 0x67, 0xc1, - 0xc3, 0x61, 0xb9, 0x5c, 0x5d, 0xbd, 0xb8, 0x42, 0x56, 0xb2, 0x6b, 0xa5, 0xb5, 0xb5, 0xec, 0xda, - 0xa5, 0xd5, 0x4a, 0x16, 0xaf, 0xbc, 0x7d, 0x39, 0xfb, 0xf6, 0x5a, 0x05, 0x97, 0x2a, 0xd5, 0x77, - 0xc8, 0xa5, 0x95, 0xb5, 0x0c, 0x6a, 0xaf, 0x4f, 0x05, 0x39, 0x58, 0x18, 0x24, 0xf3, 0xaf, 0x31, - 0x30, 0x1f, 0x97, 0x44, 0xf3, 0xef, 0x09, 0xbc, 0x0c, 0xce, 0x88, 0x2a, 0xd7, 0xb9, 0x81, 0xe1, - 0x96, 0x48, 0x42, 0xb2, 0x92, 0xd0, 0x4e, 0x71, 0x80, 0x00, 0xe1, 0xea, 0x51, 0x7b, 0xf4, 0x2e, - 0x48, 0x47, 0x51, 0x23, 0xcd, 0x12, 0xef, 0xd2, 0x24, 0xed, 0x74, 0x18, 0x77, 0x33, 0xd4, 0x38, - 0x75, 0xf1, 0x0d, 0xd7, 0x22, 0x19, 0xc9, 0x8a, 0x1c, 0xe5, 0xbb, 0x7d, 0x54, 0x96, 0xba, 0xf8, - 0x46, 0x1a, 0xac, 0x24, 0x92, 0x95, 0x64, 0x94, 0xef, 0x87, 0xa1, 0x9a, 0xd6, 0x8b, 0x6f, 0xa7, - 0x4c, 0x0e, 0x23, 0x59, 0x19, 0xee, 0xe2, 0x1b, 0x54, 0xcc, 0xf7, 0xc0, 0xd9, 0x98, 0xa9, 0x22, - 0x85, 0x78, 0x04, 0xc9, 0xca, 0x88, 0x36, 0x1f, 0x31, 0x56, 0xb8, 0x26, 0xf7, 0x46, 0x0f, 0xb5, - 0x7d, 0xb2, 0x32, 0xda, 0x03, 0x3d, 0xe0, 0xfe, 0x0e, 0x98, 0x8f, 0xa2, 0x87, 0x1a, 0xb9, 0x31, - 0x24, 0x2b, 0x63, 0xda, 0xc9, 0x30, 0xee, 0x7a, 0xa7, 0xa9, 0xeb, 0x32, 0x57, 0xa4, 0xb4, 0x8d, - 0x8b, 0x52, 0x1e, 0x31, 0x57, 0xb4, 0x9c, 0xc7, 0xcc, 0x15, 0x6e, 0xfe, 0x00, 0x92, 0x95, 0xc9, - 0xa8, 0xb9, 0xd6, 0x8f, 0x1a, 0xc1, 0x9e, 0x6e, 0xea, 0xa8, 0x3b, 0x81, 0x64, 0x65, 0xaa, 0xdb, - 0x4d, 0x81, 0xb6, 0x24, 0xae, 0x6d, 0xa8, 0x30, 0x4c, 0xbe, 0x40, 0x61, 0x88, 0xd8, 0xe6, 0xa8, - 0xeb, 0xba, 0x02, 0x16, 0x62, 0xb6, 0x89, 0x3a, 0x65, 0x0a, 0xc9, 0xca, 0x8c, 0x76, 0x26, 0x62, - 0x9d, 0x48, 0x3f, 0xd6, 0x87, 0x40, 0x27, 0x28, 0xa6, 0x91, 0xac, 0xa4, 0x7a, 0x11, 0xe8, 0x1b, - 0xcc, 0x91, 0xbe, 0x6d, 0x06, 0xc9, 0xca, 0x6c, 0xcc, 0x3b, 0x21, 0x2b, 0xf5, 0x44, 0x0e, 0x75, - 0x86, 0xb2, 0x02, 0xbb, 0x91, 0x7d, 0xce, 0x85, 0xfa, 0x61, 0x91, 0xe4, 0xcb, 0x10, 0xb7, 0x50, - 0xa6, 0x5f, 0x60, 0x65, 0x0a, 0xe8, 0x63, 0x66, 0xbb, 0xe4, 0x02, 0xf2, 0xfe, 0x56, 0x71, 0xc3, - 0xf1, 0x17, 0x8f, 0x2e, 0xc4, 0xd1, 0x42, 0x72, 0x73, 0xbc, 0x95, 0x0b, 0x28, 0x7f, 0x01, 0xad, - 0x3e, 0x42, 0xed, 0x4c, 0x1a, 0x24, 0xd7, 0x69, 0xa5, 0xd9, 0xab, 0xfe, 0x66, 0x1e, 0x82, 0x19, - 0xbf, 0x5d, 0xfe, 0x2f, 0x9d, 0xd5, 0x05, 0xd8, 0x34, 0x48, 0x04, 0x13, 0xa5, 0x96, 0xd0, 0x79, - 0x8a, 0x4a, 0x56, 0x30, 0xc3, 0x7e, 0x7d, 0x78, 0xfd, 0x58, 0xbf, 0x73, 0x22, 0x9a, 0x40, 0xc9, - 0x7c, 0x21, 0x81, 0x99, 0x0f, 0xad, 0x0a, 0x66, 0xe4, 0x7e, 0x5e, 0x23, 0x9f, 0xba, 0xc4, 0x61, - 0x70, 0x03, 0xc8, 0xb8, 0xe4, 0x09, 0x31, 0x91, 0x5f, 0x19, 0xb8, 0xda, 0x68, 0x1c, 0x1b, 0xbe, - 0x0b, 0x26, 0x5c, 0x41, 0x57, 0x3c, 0x3d, 0xf8, 0xa2, 0x75, 0x37, 0x3d, 0x57, 0x75, 0xd2, 0xa8, - 0xdc, 0xc2, 0xce, 0xbe, 0x06, 0x3c, 0x70, 0xfe, 0xbd, 0x84, 0xc0, 0x44, 0x28, 0x36, 0x79, 0x03, - 0xf0, 0x60, 0x4b, 0xbb, 0x9d, 0x1a, 0x82, 0xa3, 0x40, 0xbe, 0xbd, 0xb3, 0x95, 0x92, 0xf2, 0xbf, - 0x5f, 0x00, 0xa7, 0xe3, 0x8c, 0xef, 0x12, 0xfb, 0x40, 0x2f, 0x13, 0xf8, 0x95, 0x0c, 0x46, 0x36, - 0x6c, 0x6e, 0x73, 0x38, 0xb8, 0xf4, 0xe9, 0xc1, 0x51, 0x32, 0x7f, 0x49, 0x7c, 0xeb, 0xb7, 0x7f, - 0xfe, 0x22, 0xf1, 0xc7, 0x44, 0xe6, 0x0f, 0x09, 0xf5, 0x60, 0x25, 0x78, 0xe6, 0xe9, 0xf5, 0xc8, - 0xa3, 0xb6, 0x42, 0xe5, 0xa3, 0xad, 0xb6, 0xc2, 0x15, 0xa1, 0xad, 0xb6, 0x42, 0xd1, 0xd9, 0x56, - 0x1d, 0x62, 0x61, 0x1b, 0x33, 0x6a, 0xab, 0x2d, 0x37, 0x72, 0xd0, 0x0a, 0x45, 0x52, 0x5b, 0x6d, - 0x45, 0x2e, 0x54, 0xb0, 0x0e, 0x9d, 0x1f, 0x85, 0x6b, 0x5b, 0x6d, 0x85, 0x73, 0xdb, 0x7b, 0x0e, - 0xb3, 0x2d, 0x9b, 0x54, 0xf5, 0xa7, 0xea, 0x52, 0xdb, 0x63, 0x12, 0x42, 0x73, 0xe2, 0x74, 0x9c, - 0x38, 0x23, 0x27, 0x86, 0x10, 0x15, 0xb2, 0x5f, 0x4f, 0xdc, 0x56, 0x5b, 0x47, 0xb9, 0xaa, 0xad, - 0xb6, 0x62, 0x33, 0x24, 0xc7, 0xec, 0x39, 0x5c, 0xb6, 0xe1, 0x4f, 0x24, 0x00, 0x3c, 0xc7, 0x8a, - 0x6b, 0xf0, 0xcd, 0x38, 0x77, 0x49, 0xf8, 0xf6, 0x7c, 0x66, 0xf1, 0x18, 0xcf, 0x16, 0xa4, 0x25, - 0xf8, 0x3f, 0x60, 0xe4, 0x26, 0xa5, 0xfb, 0xae, 0x05, 0x67, 0x72, 0x8e, 0x5b, 0xca, 0xe7, 0xb6, - 0x2b, 0xfe, 0xdd, 0x7d, 0x11, 0xce, 0x39, 0xc1, 0x59, 0x81, 0xff, 0x71, 0x6c, 0x4c, 0xf1, 0xfe, - 0xa7, 0x0d, 0xbf, 0x23, 0x81, 0x11, 0xef, 0x2e, 0xbf, 0x88, 0x69, 0xfa, 0x8c, 0xa0, 0x99, 0x15, - 0x21, 0xc5, 0x5b, 0xe9, 0xe7, 0x94, 0x82, 0x9b, 0xe1, 0x17, 0x12, 0x18, 0x0b, 0x92, 0x0a, 0x5c, - 0x3e, 0x56, 0x94, 0x58, 0xfe, 0xe9, 0x2b, 0xc9, 0x63, 0x21, 0x49, 0x25, 0xbd, 0xa4, 0x1e, 0xe4, - 0x9f, 0x2d, 0x09, 0x2e, 0x91, 0x9c, 0x27, 0x0d, 0xcf, 0x45, 0x0f, 0x56, 0xf2, 0x83, 0xa2, 0xc0, - 0x1f, 0x4b, 0x60, 0x7e, 0x17, 0xb3, 0x72, 0x9d, 0x27, 0xdd, 0x4e, 0x92, 0xda, 0x36, 0x45, 0xe0, - 0x7d, 0x7d, 0x2a, 0x5d, 0x14, 0x2a, 0x2d, 0xe7, 0xdf, 0x52, 0x0f, 0xf2, 0xf8, 0x79, 0x05, 0x94, - 0x96, 0xe0, 0x0f, 0x24, 0x30, 0xb2, 0x49, 0x1a, 0x84, 0x91, 0xee, 0x48, 0xeb, 0xc7, 0xeb, 0xe1, - 0x61, 0xf1, 0xad, 0xd2, 0x9b, 0x60, 0x1a, 0x80, 0xa2, 0xa5, 0xdf, 0x20, 0xcd, 0xa2, 0xcb, 0xea, - 0x70, 0x08, 0x9c, 0x06, 0x23, 0xb7, 0xf9, 0x67, 0x1e, 0x4e, 0x81, 0xa4, 0x4d, 0x70, 0x05, 0x0c, - 0x3f, 0xb1, 0x75, 0x46, 0xbc, 0xe0, 0x5b, 0x7a, 0xde, 0xe0, 0xfb, 0x93, 0x04, 0xc6, 0xae, 0x11, - 0x76, 0xc7, 0x25, 0x76, 0xf3, 0xeb, 0x0c, 0xbf, 0xcf, 0xa5, 0xc3, 0xe2, 0xbd, 0xcc, 0x0e, 0x58, - 0xe8, 0x35, 0x3e, 0x74, 0x18, 0x0e, 0x38, 0x36, 0x7c, 0x24, 0x95, 0x86, 0x84, 0x7e, 0x39, 0x78, - 0xe1, 0x38, 0xfd, 0x3e, 0xe5, 0x0c, 0x02, 0x2d, 0x3f, 0x1f, 0x06, 0xa9, 0x6b, 0x84, 0x05, 0xdd, - 0x82, 0xc7, 0xfc, 0xf2, 0xe0, 0x25, 0xd2, 0xc7, 0x4f, 0xbf, 0x38, 0x6a, 0xe6, 0xb3, 0xa4, 0xd0, - 0xe0, 0x1f, 0x32, 0xfc, 0x9b, 0x7c, 0x8c, 0x0e, 0x9d, 0x16, 0xc4, 0x4f, 0xb6, 0xbd, 0x46, 0x99, - 0x76, 0xfc, 0x2c, 0x56, 0x99, 0xfa, 0xce, 0x22, 0x5d, 0x67, 0xee, 0xb3, 0x0e, 0xa3, 0x15, 0xe3, - 0x19, 0xd3, 0x42, 0xef, 0xd3, 0xbe, 0xb8, 0x91, 0x1a, 0xd7, 0xbf, 0x9b, 0xef, 0xc6, 0x3b, 0xea, - 0xd6, 0x7b, 0x2a, 0xd2, 0x97, 0x61, 0x77, 0x09, 0xeb, 0xd3, 0x22, 0xf7, 0x39, 0xee, 0xab, 0xa7, - 0xf3, 0x2c, 0xae, 0x91, 0x12, 0x0b, 0x7f, 0x25, 0x83, 0xe4, 0x56, 0xb9, 0x4e, 0x61, 0xbf, 0x97, - 0x5c, 0xc7, 0x2d, 0xe5, 0xbc, 0x61, 0x25, 0x48, 0x0e, 0xcf, 0x0d, 0x99, 0xf9, 0x6b, 0xe2, 0xb0, - 0xf8, 0xff, 0x09, 0x30, 0x49, 0xca, 0x75, 0x8a, 0x1c, 0xaf, 0xb5, 0x02, 0x63, 0x62, 0x65, 0x5b, - 0x65, 0x38, 0x7b, 0xd7, 0x35, 0x0c, 0x6c, 0x37, 0x0b, 0x68, 0xcb, 0xdf, 0x4a, 0xa7, 0x36, 0x89, - 0x53, 0xb6, 0x75, 0xf1, 0xf3, 0x8b, 0xd8, 0xcd, 0x6c, 0x02, 0x18, 0xbd, 0xb6, 0x42, 0xda, 0x01, - 0x2f, 0xeb, 0x07, 0x57, 0x80, 0xfc, 0xf6, 0xf2, 0x2a, 0xbc, 0x04, 0x2e, 0x6a, 0x84, 0xb9, 0xb6, - 0x49, 0x2a, 0xe8, 0x49, 0x9d, 0x98, 0x88, 0xd5, 0x09, 0xb2, 0x89, 0x43, 0x5d, 0xbb, 0x4c, 0x90, - 0xee, 0x20, 0x46, 0x0c, 0x8b, 0xda, 0xd8, 0xd6, 0x1b, 0x4d, 0xe4, 0x9a, 0xf8, 0x00, 0xeb, 0x0d, - 0x5c, 0x6a, 0x90, 0xdc, 0x07, 0xef, 0x02, 0x79, 0x6d, 0x79, 0x0d, 0xae, 0x81, 0xa5, 0x67, 0x10, - 0xa8, 0x50, 0xe2, 0x20, 0x93, 0x32, 0x44, 0x9e, 0xea, 0x0e, 0xcb, 0xc1, 0x11, 0x90, 0xfc, 0x51, - 0x42, 0x92, 0xc5, 0x25, 0x7b, 0x74, 0x7c, 0x9a, 0xe0, 0x86, 0x51, 0x5b, 0x9e, 0x63, 0x1e, 0x9c, - 0xc9, 0xa4, 0xc2, 0x05, 0x87, 0x9f, 0x15, 0xbc, 0xc7, 0x97, 0x07, 0x10, 0x76, 0x1d, 0xc1, 0x9f, - 0x49, 0x60, 0x72, 0x93, 0x10, 0x4b, 0x3c, 0x78, 0xf3, 0x8d, 0x6f, 0xa6, 0xb3, 0xb9, 0x22, 0x74, - 0xbb, 0x9c, 0x59, 0x3b, 0x36, 0xc5, 0x47, 0x7e, 0x20, 0xcb, 0xf1, 0xb1, 0x44, 0x54, 0xa1, 0x22, - 0x00, 0x3b, 0x74, 0x5d, 0x37, 0x2b, 0xba, 0x59, 0x73, 0xe0, 0x99, 0xae, 0x0c, 0xbe, 0xe9, 0xff, - 0x76, 0xd8, 0x37, 0xb9, 0x0f, 0xc1, 0xfb, 0x60, 0xf4, 0x9e, 0x6e, 0x10, 0xea, 0x32, 0xd8, 0x07, - 0xa8, 0x2f, 0xf2, 0x59, 0x21, 0xfe, 0x49, 0x38, 0x17, 0xb6, 0x27, 0xf3, 0x89, 0xd5, 0x41, 0x6a, - 0xcb, 0xb6, 0xa9, 0xcd, 0xcb, 0xf7, 0x26, 0x61, 0x58, 0x6f, 0x38, 0x03, 0x33, 0x38, 0x2f, 0x18, - 0xbc, 0x0a, 0x17, 0x22, 0x0e, 0xe3, 0x54, 0x9f, 0xe8, 0xac, 0x5e, 0xf1, 0xa9, 0x7e, 0x57, 0x02, - 0xf0, 0x1a, 0x61, 0xf1, 0x19, 0xed, 0xf8, 0x1e, 0x21, 0x86, 0xd1, 0x57, 0x8c, 0x37, 0x84, 0x18, - 0xe7, 0x32, 0x67, 0xc2, 0x62, 0x70, 0x09, 0x4a, 0xb4, 0xd2, 0x54, 0x5b, 0xbc, 0x23, 0x10, 0xb3, - 0x1c, 0xfc, 0xb6, 0x04, 0x66, 0x77, 0xa9, 0xc3, 0x38, 0x45, 0x81, 0x2a, 0x04, 0x79, 0xbe, 0x71, - 0xb0, 0x2f, 0x77, 0x55, 0x70, 0x7f, 0x33, 0x73, 0x3e, 0xcc, 0xdd, 0xa2, 0x0e, 0xe3, 0x12, 0x88, - 0x9f, 0x30, 0x3c, 0x31, 0x82, 0xa0, 0x48, 0xff, 0x5c, 0x3a, 0x2c, 0x7e, 0x29, 0xc1, 0x6a, 0x9f, - 0xe9, 0x0c, 0x55, 0x42, 0x49, 0x22, 0x9b, 0x45, 0x4f, 0xea, 0x7a, 0xb9, 0x8e, 0x9c, 0x3a, 0x75, - 0x1b, 0x15, 0x71, 0xfd, 0x4a, 0x04, 0xb9, 0x0e, 0xa9, 0x20, 0xdd, 0x44, 0x56, 0x03, 0x97, 0x09, - 0xa2, 0x55, 0x71, 0x51, 0x2b, 0xb4, 0xec, 0x1a, 0xc4, 0xf4, 0x7e, 0xd1, 0x45, 0x65, 0x6a, 0xf0, - 0xc5, 0xb9, 0xf4, 0x1d, 0xb0, 0xd8, 0xab, 0x33, 0xe0, 0xd7, 0x28, 0x98, 0x07, 0x07, 0x7d, 0x53, - 0x7c, 0x0c, 0x4e, 0x94, 0xb1, 0x41, 0x1a, 0x1b, 0xd8, 0x21, 0x3e, 0x0d, 0x3e, 0xbc, 0x40, 0x0d, - 0x0c, 0x7b, 0xbf, 0xc3, 0x0c, 0x1a, 0x48, 0x67, 0x84, 0x0d, 0xe7, 0xe0, 0x6c, 0x24, 0x90, 0xf8, - 0x51, 0xfe, 0x13, 0xb0, 0x50, 0x34, 0x29, 0xab, 0x13, 0xdb, 0xe7, 0xc4, 0x9d, 0x17, 0xba, 0x54, - 0xef, 0x47, 0xae, 0xd8, 0xa0, 0x8c, 0x87, 0xd6, 0xbf, 0x1c, 0x3d, 0x2c, 0xfe, 0x74, 0x14, 0xfe, - 0x4e, 0x02, 0x73, 0x45, 0xb4, 0xee, 0x3d, 0xf4, 0x86, 0x52, 0xc0, 0x47, 0xe0, 0x44, 0x4d, 0xdb, - 0xdd, 0xc8, 0x5e, 0xf3, 0x54, 0x47, 0x96, 0x4d, 0x1f, 0x93, 0x32, 0x1b, 0xd4, 0x64, 0xe9, 0x94, - 0x49, 0x4d, 0xf2, 0x9f, 0xbe, 0x6a, 0x1c, 0x7a, 0xe9, 0x13, 0x70, 0x62, 0xfd, 0xee, 0x26, 0x5a, - 0xcd, 0x6e, 0x34, 0xb0, 0xeb, 0x10, 0x74, 0x53, 0x2f, 0x13, 0xd3, 0x21, 0xf0, 0xea, 0x60, 0x94, - 0xd5, 0x52, 0x83, 0x96, 0x54, 0x03, 0x3b, 0x8c, 0xd8, 0xea, 0xcd, 0xed, 0x8d, 0xad, 0x9d, 0xbb, - 0x5b, 0x39, 0xf6, 0x94, 0xe5, 0xe5, 0x95, 0xdc, 0xf2, 0x92, 0x2c, 0x25, 0x92, 0xf9, 0x14, 0xb6, - 0xbc, 0xe7, 0x69, 0x9d, 0x9a, 0xea, 0x63, 0x87, 0x9a, 0xf9, 0x53, 0xe1, 0x9d, 0xa7, 0xd9, 0x2a, - 0xa5, 0x59, 0x43, 0x37, 0x48, 0xa1, 0x0b, 0xb2, 0xd0, 0x07, 0x52, 0xdb, 0xe5, 0x15, 0x63, 0x15, - 0x6e, 0x83, 0x6b, 0xdd, 0x15, 0xc3, 0x75, 0x88, 0x7d, 0x54, 0x2d, 0xea, 0xf8, 0x80, 0x20, 0x8b, - 0xd8, 0x86, 0xee, 0x38, 0x3c, 0x30, 0x19, 0x45, 0xb8, 0x5c, 0x26, 0x8e, 0x13, 0xa9, 0x2e, 0x39, - 0xed, 0x25, 0x6a, 0xd0, 0xa8, 0x76, 0x1d, 0xc8, 0x6b, 0x2b, 0x97, 0x60, 0x11, 0x4c, 0x6d, 0xbf, - 0x61, 0x20, 0x8c, 0x18, 0xc1, 0x16, 0x65, 0x39, 0xb8, 0x0c, 0x72, 0xe9, 0x81, 0x9e, 0xf9, 0x1e, - 0x7c, 0x2f, 0x01, 0x66, 0xc0, 0xf8, 0x3a, 0x76, 0xf4, 0xb2, 0xe8, 0xff, 0x13, 0x63, 0x12, 0x78, - 0x25, 0x32, 0x11, 0xcc, 0x8c, 0x25, 0xd2, 0xe3, 0x1f, 0x65, 0x8b, 0xbb, 0xdb, 0xd9, 0x1b, 0xa4, - 0x89, 0x12, 0xe0, 0x2b, 0xa9, 0x33, 0x21, 0xfc, 0x5a, 0x1a, 0x93, 0x95, 0x64, 0xfe, 0xb5, 0xc0, - 0x87, 0x21, 0x87, 0xab, 0x14, 0xbb, 0xac, 0xae, 0xf2, 0x3f, 0xd4, 0xd6, 0xff, 0x9b, 0x14, 0x16, - 0xfb, 0x03, 0x31, 0xba, 0x4f, 0xcc, 0xf5, 0xff, 0x03, 0x69, 0x6f, 0xe0, 0x80, 0xf0, 0x9a, 0x8d, - 0x4d, 0xe6, 0x20, 0xbe, 0xf0, 0xad, 0x07, 0x16, 0xfc, 0x31, 0x04, 0xce, 0xf9, 0x87, 0x62, 0x15, - 0x9c, 0x6e, 0x80, 0x61, 0x5c, 0x31, 0x74, 0x13, 0x16, 0x22, 0xa8, 0x66, 0x25, 0x02, 0x26, 0x9c, - 0xc1, 0xc1, 0x74, 0x87, 0xf1, 0x4a, 0x74, 0x40, 0x90, 0x6e, 0x56, 0xa9, 0x6d, 0x08, 0x7f, 0x97, - 0x16, 0xc1, 0x54, 0xd8, 0x14, 0x43, 0xf1, 0xd1, 0xa8, 0xf4, 0x66, 0xdf, 0xe1, 0x28, 0x0e, 0x6a, - 0x6f, 0x83, 0xd3, 0xb7, 0x8e, 0xb2, 0x4f, 0xf8, 0x4e, 0x0d, 0x7a, 0x97, 0x1e, 0x8c, 0x77, 0x3c, - 0x57, 0x1a, 0x11, 0xf7, 0x79, 0xf5, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xc2, 0x5e, 0xf3, - 0x48, 0x24, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_74470c9779693dcd) +} + +var fileDescriptor_a_bit_of_everything_74470c9779693dcd = []byte{ + // 3044 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, + 0xdd, 0x5a, 0xae, 0x9e, 0xa3, 0x17, 0x35, 0xf2, 0x43, 0xa6, 0x95, 0x68, 0xcc, 0x38, 0xc9, 0x5a, + 0x31, 0xb9, 0xd2, 0x4a, 0x71, 0x6c, 0x06, 0x89, 0x3f, 0xea, 0x61, 0x5b, 0xb1, 0x2d, 0xcb, 0x6b, + 0xc7, 0x5f, 0xe0, 0xd8, 0x11, 0x86, 0xe4, 0x50, 0x5c, 0x8b, 0xbb, 0xb3, 0xd9, 0x9d, 0x95, 0xcd, + 0x4f, 0x1f, 0xbf, 0x2f, 0x7d, 0xa0, 0x45, 0x9b, 0x43, 0x01, 0x05, 0x3d, 0xb4, 0x28, 0xfa, 0x17, + 0xf4, 0xda, 0x53, 0x0e, 0x6d, 0x0f, 0x3d, 0xf5, 0xe6, 0x16, 0x01, 0x8a, 0x02, 0xb9, 0xb4, 0x05, + 0xfa, 0x17, 0x14, 0xe8, 0xa5, 0x28, 0x66, 0x76, 0x97, 0xda, 0x5d, 0x92, 0x96, 0x69, 0x07, 0xb9, + 0x48, 0x3b, 0x33, 0xbf, 0xd7, 0xfc, 0xde, 0xbf, 0x21, 0xd0, 0xc8, 0x13, 0x6c, 0xda, 0x75, 0xe2, + 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa5, 0x5d, 0x52, 0xf1, 0x76, 0xc9, 0x60, 0xdb, 0xb4, 0xba, + 0x4d, 0xf6, 0x88, 0xd3, 0x60, 0x35, 0xc3, 0xda, 0xc9, 0x0b, 0x18, 0x38, 0xb7, 0xe3, 0xd8, 0xe5, + 0xfc, 0x0e, 0x66, 0xe4, 0x31, 0x6e, 0xe4, 0x43, 0x02, 0xf9, 0x16, 0x6a, 0x66, 0x76, 0x87, 0xd2, + 0x9d, 0x3a, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xa3, 0x67, + 0x50, 0x70, 0x2a, 0x56, 0x25, 0xaf, 0xaa, 0x56, 0x0d, 0x52, 0xaf, 0x6c, 0x9b, 0xd8, 0xdd, 0x0d, + 0x20, 0x4e, 0x27, 0x21, 0x88, 0x69, 0xb3, 0x46, 0x70, 0xf8, 0x6a, 0xf2, 0xb0, 0xe2, 0x39, 0x82, + 0x7e, 0x70, 0xfe, 0x66, 0xe2, 0x46, 0x36, 0x66, 0x35, 0x62, 0x79, 0xa6, 0xf8, 0xd8, 0xe6, 0x5f, + 0xa1, 0x1c, 0x09, 0x40, 0xd7, 0x2b, 0xa9, 0x26, 0x71, 0x5d, 0xbc, 0x43, 0x02, 0x88, 0x33, 0xed, + 0x10, 0x5a, 0x02, 0x64, 0x2e, 0x29, 0x0d, 0x33, 0x4c, 0xe2, 0x32, 0x6c, 0xda, 0x01, 0xc0, 0x79, + 0xf1, 0xaf, 0x9c, 0xdb, 0x21, 0x56, 0xce, 0x7d, 0x8c, 0x77, 0x76, 0x88, 0xa3, 0x52, 0x5b, 0xe8, + 0xa3, 0x5d, 0x37, 0xd9, 0xaf, 0x8f, 0x81, 0x74, 0x71, 0xc5, 0x60, 0xb7, 0xaa, 0xeb, 0x2d, 0xad, + 0xc3, 0x87, 0x60, 0xdc, 0x35, 0xac, 0x9d, 0x3a, 0xd9, 0xb6, 0x88, 0xcb, 0x48, 0x65, 0xe6, 0x14, + 0x92, 0x94, 0x51, 0xed, 0x62, 0xfe, 0x08, 0x3b, 0xe4, 0x93, 0x94, 0xf2, 0x9b, 0x02, 0x5f, 0x1f, + 0xf3, 0xc9, 0xf9, 0x2b, 0x58, 0x03, 0xfd, 0x9e, 0x67, 0x54, 0x66, 0x24, 0x24, 0x29, 0x23, 0x2b, + 0x77, 0x0f, 0x8a, 0xb7, 0x3f, 0x93, 0xa4, 0x1f, 0x4b, 0xd7, 0x3f, 0xc6, 0xb9, 0x6a, 0x31, 0x77, + 0x65, 0x21, 0x77, 0xe9, 0xe1, 0xfe, 0xc5, 0x66, 0x2e, 0xba, 0x5c, 0xee, 0x65, 0xb9, 0xa8, 0x35, + 0x75, 0xc1, 0x01, 0x6e, 0x81, 0xc1, 0xe0, 0x06, 0x29, 0x24, 0xbf, 0xd4, 0x0d, 0x02, 0x3a, 0xf0, + 0x03, 0x30, 0x5a, 0xad, 0x53, 0xcc, 0xb6, 0xf7, 0x70, 0xdd, 0x23, 0x33, 0x32, 0x92, 0x94, 0xd4, + 0xca, 0xb9, 0x83, 0xe2, 0x1b, 0xda, 0xd4, 0x15, 0xbe, 0x8f, 0xc4, 0x3e, 0x12, 0x1e, 0x56, 0x90, + 0x17, 0xf2, 0xda, 0x53, 0x29, 0x8a, 0xa0, 0x03, 0xb1, 0xb8, 0xc7, 0xbf, 0xe1, 0x19, 0x30, 0x56, + 0xa1, 0x5e, 0xa9, 0x4e, 0x02, 0x62, 0xfd, 0x48, 0x52, 0x24, 0x7d, 0xd4, 0xdf, 0xf3, 0x41, 0xe6, + 0xc0, 0xa8, 0x61, 0xb1, 0x0b, 0xcb, 0x01, 0xc4, 0x00, 0x92, 0x14, 0x59, 0x07, 0x62, 0xab, 0x45, + 0xc3, 0x8b, 0x42, 0x0c, 0x22, 0x49, 0xe9, 0xd7, 0x47, 0xbd, 0x08, 0x88, 0x4f, 0x63, 0x49, 0x0b, + 0x20, 0x86, 0x90, 0xa4, 0x0c, 0x08, 0x1a, 0x4b, 0x9a, 0x0f, 0xf0, 0x1a, 0x18, 0xaf, 0x1a, 0x4f, + 0x48, 0xa5, 0x45, 0x64, 0x18, 0x49, 0xca, 0xa0, 0x3e, 0x16, 0x6c, 0xc6, 0x81, 0x5a, 0x74, 0x46, + 0x90, 0xa4, 0x0c, 0x05, 0x40, 0x21, 0xa5, 0x57, 0x00, 0x28, 0x51, 0x5a, 0x0f, 0x20, 0x00, 0x92, + 0x94, 0x61, 0x7d, 0x84, 0xef, 0xb4, 0x84, 0x75, 0x99, 0x63, 0x58, 0x3b, 0x01, 0xc0, 0x28, 0x77, + 0x00, 0x7d, 0xd4, 0xdf, 0x6b, 0x09, 0x5b, 0x6a, 0x30, 0xe2, 0x06, 0x10, 0xaf, 0x20, 0x49, 0x19, + 0xd3, 0x81, 0xd8, 0x8a, 0x5d, 0xb8, 0x25, 0xc6, 0x38, 0x92, 0x94, 0x71, 0xff, 0xc2, 0xa1, 0x14, + 0xd7, 0x01, 0xe0, 0x51, 0x17, 0x00, 0x4c, 0x20, 0x49, 0x99, 0xd0, 0xce, 0x1f, 0x69, 0xf9, 0x4d, + 0xcf, 0x24, 0x8e, 0x51, 0x5e, 0xb7, 0x3c, 0x53, 0x1f, 0xe1, 0xf8, 0x3e, 0xb1, 0x2d, 0x30, 0xd9, + 0x8a, 0xe3, 0x80, 0xe2, 0xab, 0x82, 0xa2, 0xd2, 0x85, 0x62, 0x18, 0xfe, 0xf9, 0x2d, 0xcc, 0x6a, + 0x82, 0xda, 0xb8, 0x1d, 0x7c, 0xf9, 0x14, 0x5d, 0x70, 0xc2, 0x77, 0xa6, 0xed, 0x24, 0xe1, 0x39, + 0x41, 0xf8, 0xfd, 0xa3, 0x08, 0xdf, 0xf4, 0x13, 0x42, 0x48, 0x3f, 0x70, 0xd1, 0x16, 0xbb, 0x69, + 0x2b, 0xb6, 0xf6, 0x99, 0xbe, 0x0e, 0x26, 0xdc, 0xb8, 0xfd, 0x26, 0x91, 0xa4, 0x4c, 0xea, 0xe3, + 0x6e, 0xcc, 0x80, 0x2d, 0xb0, 0x96, 0x2f, 0xa4, 0x91, 0xa4, 0xa4, 0x43, 0xb0, 0x88, 0xd7, 0xb9, + 0x51, 0x23, 0x4c, 0x21, 0x49, 0x99, 0xd2, 0x47, 0xdd, 0x88, 0x11, 0x02, 0x90, 0x16, 0x1d, 0x88, + 0x24, 0x05, 0xfa, 0x20, 0x21, 0x15, 0x0d, 0x1c, 0x77, 0x88, 0x4d, 0x30, 0x57, 0x45, 0xcc, 0x2f, + 0xa6, 0x91, 0xac, 0x8c, 0xe8, 0xd3, 0xe1, 0xe1, 0x9d, 0x88, 0x7f, 0x5c, 0x02, 0xa3, 0xd4, 0x22, + 0xbc, 0x48, 0xf0, 0x0c, 0x3d, 0x73, 0x4c, 0x24, 0xa6, 0x13, 0x79, 0x3f, 0x29, 0xe6, 0xc3, 0xa4, + 0x98, 0x5f, 0xe7, 0xa7, 0xd7, 0xfa, 0x74, 0x20, 0x80, 0xc5, 0x0a, 0xbe, 0x06, 0xc6, 0x7c, 0x54, + 0x9f, 0xd7, 0xcc, 0x71, 0xee, 0x7d, 0xd7, 0xfa, 0x74, 0x9f, 0xa0, 0xcf, 0x04, 0x3e, 0x00, 0x23, + 0x26, 0xb6, 0x03, 0x39, 0x4e, 0x88, 0xa4, 0x71, 0xb9, 0xf7, 0xa4, 0x71, 0x13, 0xdb, 0x42, 0xdc, + 0x75, 0x8b, 0x39, 0x0d, 0x7d, 0xd8, 0x0c, 0x96, 0xf0, 0x09, 0x98, 0x36, 0xb1, 0x6d, 0x27, 0xef, + 0x7b, 0x52, 0xf0, 0xb9, 0xf6, 0x42, 0x7c, 0xec, 0x98, 0x7e, 0x7c, 0x86, 0x53, 0x66, 0x72, 0x3f, + 0xc2, 0x39, 0xf0, 0x3d, 0x9f, 0xf3, 0xcc, 0xcb, 0x71, 0xf6, 0x3d, 0xaf, 0x9d, 0x73, 0x64, 0x1f, + 0x16, 0xc0, 0x8c, 0x45, 0xad, 0x55, 0x6a, 0xed, 0x11, 0x8b, 0x57, 0x1e, 0x5c, 0xdf, 0xc4, 0xa6, + 0x9f, 0xde, 0x66, 0x32, 0x22, 0x01, 0x74, 0x3d, 0x87, 0xab, 0x60, 0xb2, 0x55, 0xde, 0x02, 0x89, + 0x4f, 0x0b, 0x8b, 0x67, 0xda, 0x2c, 0x7e, 0x37, 0x84, 0xd3, 0x27, 0x5a, 0x28, 0x3e, 0x91, 0x07, + 0xa0, 0xe5, 0x49, 0xd1, 0x60, 0x9b, 0x45, 0x72, 0xcf, 0x79, 0x61, 0x2a, 0x24, 0xd4, 0x0a, 0xac, + 0xcc, 0xef, 0x24, 0x30, 0x18, 0xd4, 0x35, 0x08, 0xfa, 0x2d, 0x6c, 0x12, 0xbf, 0xae, 0xe9, 0xe2, + 0x1b, 0x9e, 0x00, 0x83, 0xd8, 0xa4, 0x9e, 0xc5, 0x66, 0x52, 0x22, 0x51, 0x05, 0x2b, 0x78, 0x1b, + 0xa4, 0xe8, 0xae, 0x28, 0x1f, 0x13, 0x5a, 0xf1, 0x45, 0xab, 0x52, 0x7e, 0x8d, 0x10, 0x5b, 0x08, + 0x96, 0xa2, 0xbb, 0xd9, 0x39, 0x30, 0x1c, 0xae, 0xe1, 0x08, 0x18, 0xb8, 0x52, 0xbc, 0x71, 0x67, + 0x3d, 0xdd, 0x07, 0x87, 0x41, 0xff, 0x5d, 0xfd, 0xc3, 0xf5, 0xb4, 0x54, 0x38, 0x79, 0x50, 0x3c, + 0xa6, 0x41, 0x98, 0xde, 0x47, 0x59, 0xba, 0x9b, 0x2d, 0xa0, 0x2c, 0xdf, 0xcf, 0xa2, 0x66, 0xc6, + 0x00, 0xe3, 0x31, 0x8f, 0x85, 0x69, 0x20, 0xef, 0x92, 0x46, 0x70, 0x11, 0xfe, 0x09, 0x57, 0xc0, + 0x80, 0xaf, 0xb6, 0xd4, 0x0b, 0xa4, 0x53, 0x1f, 0xb5, 0x90, 0xba, 0x28, 0x65, 0xd6, 0xc0, 0x89, + 0xce, 0x4e, 0xdb, 0x81, 0xe7, 0xb1, 0x28, 0xcf, 0x91, 0x28, 0x95, 0xff, 0x0b, 0xa9, 0x24, 0x1d, + 0xb0, 0x03, 0x95, 0xcd, 0x28, 0x95, 0x97, 0x69, 0x01, 0x0e, 0xf9, 0x17, 0x7e, 0x96, 0x3a, 0x28, + 0xfe, 0x34, 0x05, 0xbe, 0x2f, 0xcd, 0x4f, 0x17, 0x51, 0xc9, 0x60, 0x88, 0x56, 0xd1, 0x61, 0xd7, + 0xaa, 0x6d, 0x6c, 0x58, 0x2c, 0x74, 0xe6, 0x06, 0x2a, 0x53, 0xd3, 0xae, 0x1b, 0x65, 0xee, 0x36, + 0x28, 0xe8, 0xe5, 0x10, 0x6b, 0xd8, 0x04, 0x31, 0x8a, 0xca, 0x74, 0x8f, 0x38, 0xc8, 0xc4, 0x56, + 0x03, 0x55, 0x09, 0x66, 0x9e, 0x43, 0x5c, 0x4e, 0x6b, 0x2b, 0xf4, 0xea, 0xa7, 0x92, 0x68, 0x64, + 0x9e, 0x4a, 0xd1, 0x36, 0xe0, 0xa9, 0x14, 0xeb, 0x1b, 0xe6, 0xef, 0x81, 0xb3, 0x57, 0x0c, 0xab, + 0x82, 0xa8, 0xc7, 0x90, 0x49, 0x1d, 0x82, 0x70, 0x89, 0x7f, 0xb6, 0xb5, 0x75, 0xf9, 0x1a, 0x63, + 0xb6, 0x5b, 0x50, 0xd5, 0x1d, 0x83, 0xd5, 0xbc, 0x52, 0xbe, 0x4c, 0x4d, 0x95, 0x2b, 0x23, 0x47, + 0xca, 0xd4, 0x6d, 0xb8, 0x8c, 0x04, 0xcb, 0x40, 0x37, 0xda, 0x32, 0xd4, 0xf6, 0x51, 0x96, 0xf3, + 0xe7, 0xce, 0xb2, 0x50, 0xae, 0x2e, 0x5d, 0x58, 0x24, 0x8b, 0xb9, 0xe5, 0xd2, 0xf2, 0x72, 0x6e, + 0xf9, 0xe2, 0x52, 0x25, 0x87, 0x17, 0xdf, 0xbe, 0x94, 0x7b, 0x7b, 0xb9, 0x82, 0x4b, 0x95, 0xea, + 0x3b, 0xe4, 0xe2, 0xe2, 0x72, 0x16, 0x35, 0x57, 0xc6, 0xc3, 0x0c, 0x2d, 0x84, 0xcb, 0xfe, 0x7b, + 0x18, 0xcc, 0x24, 0x25, 0xd1, 0x83, 0x28, 0x82, 0x97, 0xc0, 0x29, 0x51, 0x03, 0x5b, 0xf1, 0x19, + 0xed, 0xad, 0x24, 0x24, 0x2b, 0x29, 0xfd, 0x04, 0x07, 0x08, 0x11, 0xae, 0x1c, 0x36, 0x4f, 0xef, + 0x82, 0x4c, 0x1c, 0x35, 0xd6, 0x4a, 0xf1, 0x76, 0x4f, 0xd2, 0x4f, 0x46, 0x71, 0xd7, 0x22, 0x6d, + 0x55, 0x1b, 0xdf, 0x68, 0xa5, 0x92, 0x91, 0xac, 0xc8, 0x71, 0xbe, 0x1b, 0x87, 0x45, 0xab, 0x8d, + 0x6f, 0xac, 0xfd, 0xea, 0x47, 0xb2, 0xd2, 0x1f, 0xe7, 0xfb, 0x61, 0xa4, 0xe2, 0x75, 0xe2, 0xdb, + 0x2a, 0xa2, 0x03, 0x48, 0x56, 0x06, 0xda, 0xf8, 0x86, 0xf5, 0xf4, 0x3d, 0x70, 0x3a, 0xa1, 0xaa, + 0x58, 0x99, 0x1e, 0x44, 0xb2, 0x32, 0xa8, 0xcf, 0xc4, 0x94, 0x15, 0xad, 0xd8, 0x9d, 0xd1, 0x23, + 0x4d, 0xa1, 0xac, 0x0c, 0x75, 0x40, 0x0f, 0xb9, 0xbf, 0x03, 0x66, 0xe2, 0xe8, 0x91, 0x36, 0x6f, + 0x18, 0xc9, 0xca, 0xb0, 0x7e, 0x3c, 0x8a, 0xbb, 0xd2, 0x6a, 0xf9, 0xda, 0xd4, 0x15, 0x2b, 0x7c, + 0x23, 0xa2, 0xd0, 0xc7, 0xd4, 0x15, 0x2f, 0xf6, 0x09, 0x75, 0x45, 0x5b, 0x43, 0x80, 0x64, 0x65, + 0x2c, 0xae, 0xae, 0x95, 0xc3, 0x36, 0xb1, 0xa3, 0x99, 0x5a, 0xd7, 0x1d, 0x45, 0xb2, 0x32, 0xde, + 0x6e, 0xa6, 0xf0, 0xb6, 0x24, 0x79, 0xdb, 0x48, 0xd9, 0x18, 0x7b, 0x81, 0xb2, 0x11, 0xd3, 0xcd, + 0x61, 0x4f, 0x76, 0x19, 0xcc, 0x26, 0x74, 0x13, 0x37, 0xca, 0x38, 0x92, 0x95, 0x49, 0xfd, 0x54, + 0x4c, 0x3b, 0xb1, 0x6e, 0xad, 0x0b, 0x81, 0x96, 0x53, 0x4c, 0x20, 0x59, 0x49, 0x77, 0x22, 0xd0, + 0xd5, 0x99, 0x63, 0x5d, 0xdd, 0x24, 0x92, 0x95, 0xa9, 0x84, 0x75, 0x22, 0x5a, 0xea, 0x88, 0x1c, + 0xe9, 0x1b, 0x65, 0x05, 0xb6, 0x23, 0x07, 0x9c, 0x0b, 0xb5, 0x83, 0x22, 0xd1, 0xca, 0x10, 0xef, + 0xa3, 0x6c, 0x37, 0xc7, 0xca, 0x16, 0xd0, 0xc7, 0xcc, 0xf1, 0xc8, 0x79, 0xe4, 0xff, 0xad, 0xe2, + 0xba, 0x1b, 0x2c, 0x1e, 0x9e, 0x4f, 0xa2, 0x45, 0xe4, 0xe6, 0x78, 0x8b, 0xe7, 0x91, 0x76, 0x1e, + 0x2d, 0x3d, 0x44, 0xcd, 0x6c, 0x06, 0xf4, 0xaf, 0xd0, 0x4a, 0xa3, 0x53, 0x75, 0xce, 0x3e, 0x00, + 0x93, 0x41, 0x33, 0xfd, 0xdf, 0x06, 0xab, 0x09, 0xb0, 0x09, 0x90, 0x0a, 0x47, 0x53, 0x3d, 0x65, + 0xf0, 0x14, 0xd5, 0x5f, 0xc1, 0x0c, 0x07, 0xd5, 0xe3, 0xf5, 0x23, 0xed, 0xce, 0x89, 0xe8, 0x02, + 0x25, 0xfb, 0x85, 0x04, 0x26, 0x3f, 0xb4, 0x2b, 0x98, 0x91, 0x7b, 0x9a, 0x4e, 0x3e, 0xf5, 0x88, + 0xcb, 0xe0, 0x2a, 0x90, 0x71, 0xc9, 0x17, 0x62, 0x54, 0x5b, 0xec, 0xb9, 0x16, 0xe9, 0x1c, 0x1b, + 0xbe, 0x0b, 0x46, 0x3d, 0x41, 0x57, 0xbc, 0x61, 0x04, 0xa2, 0xb5, 0xb7, 0x44, 0x57, 0xf8, 0x10, + 0x7a, 0x13, 0xbb, 0xbb, 0x3a, 0xf0, 0xc1, 0xf9, 0xf7, 0x3c, 0x02, 0xa3, 0x11, 0xdf, 0xe4, 0xed, + 0xc1, 0xfd, 0x75, 0xfd, 0x56, 0xba, 0x0f, 0x0e, 0x01, 0xf9, 0xd6, 0xe6, 0x7a, 0x5a, 0xd2, 0xfe, + 0x3c, 0x0b, 0x4e, 0x26, 0x19, 0xdf, 0x21, 0xce, 0x9e, 0x51, 0x26, 0xf0, 0x2b, 0x19, 0x0c, 0xae, + 0x3a, 0x5c, 0xe7, 0xb0, 0x77, 0xe9, 0x33, 0xbd, 0xa3, 0x64, 0xff, 0x9e, 0xfa, 0xee, 0x1f, 0xff, + 0xf6, 0x45, 0xea, 0xeb, 0x54, 0xf6, 0x2f, 0x29, 0x75, 0x6f, 0x31, 0x7c, 0x2f, 0xea, 0xf4, 0x5a, + 0xa4, 0xee, 0x47, 0xca, 0x47, 0x53, 0xdd, 0x8f, 0x56, 0x84, 0xa6, 0xba, 0x1f, 0xf1, 0xce, 0xa6, + 0xea, 0x12, 0x1b, 0x3b, 0x98, 0x51, 0x47, 0xdd, 0xf7, 0x62, 0x07, 0xfb, 0x11, 0x4f, 0x6a, 0xaa, + 0xfb, 0xb1, 0x80, 0x0a, 0xd7, 0x91, 0xf3, 0x43, 0x77, 0x6d, 0xaa, 0xfb, 0xd1, 0xdc, 0xf6, 0x9e, + 0xcb, 0x1c, 0xdb, 0x21, 0x55, 0xe3, 0x89, 0x3a, 0xdf, 0xf4, 0x99, 0x44, 0xd0, 0xdc, 0x24, 0x1d, + 0x37, 0xc9, 0xc8, 0x4d, 0x20, 0xc4, 0x85, 0xec, 0xd6, 0x31, 0x37, 0xd5, 0xfd, 0xc3, 0x5c, 0xd5, + 0x54, 0xf7, 0x13, 0x13, 0x26, 0xc7, 0xec, 0x38, 0x7a, 0x36, 0xe1, 0x2f, 0x25, 0x00, 0x7c, 0xc3, + 0x8a, 0x30, 0xf8, 0x76, 0x8c, 0x3b, 0x2f, 0x6c, 0x7b, 0x36, 0x3b, 0x77, 0x84, 0x65, 0x0b, 0xd2, + 0x3c, 0xfc, 0x5f, 0x30, 0x78, 0x83, 0xd2, 0x5d, 0xcf, 0x86, 0x93, 0x79, 0xd7, 0x2b, 0x69, 0xf9, + 0x8d, 0x4a, 0x10, 0xbb, 0x2f, 0xc2, 0x39, 0x2f, 0x38, 0x2b, 0xf0, 0x8d, 0x23, 0x7d, 0x8a, 0xf7, + 0x3f, 0x4d, 0xf8, 0x03, 0x09, 0x0c, 0xfa, 0xb1, 0xfc, 0x22, 0xaa, 0xe9, 0x32, 0xa0, 0x66, 0x17, + 0x85, 0x14, 0x6f, 0x65, 0x9e, 0x53, 0x0a, 0xae, 0x86, 0xdf, 0x4a, 0x60, 0x38, 0x4c, 0x2a, 0x70, + 0xe1, 0x48, 0x51, 0x12, 0xf9, 0xa7, 0xab, 0x24, 0x8f, 0x84, 0x24, 0x95, 0xcc, 0xbc, 0xba, 0xa7, + 0x3d, 0x5b, 0x12, 0x5c, 0x22, 0x79, 0x5f, 0x1a, 0x9e, 0x8b, 0xee, 0x2f, 0x6a, 0xbd, 0xa2, 0xc0, + 0x5f, 0x48, 0x60, 0x66, 0x0b, 0xb3, 0x72, 0x8d, 0x27, 0xdd, 0x56, 0x92, 0xda, 0xb0, 0x84, 0xe3, + 0x7d, 0x73, 0x57, 0xba, 0x20, 0xae, 0xb4, 0xa0, 0xbd, 0xa5, 0xee, 0x69, 0xf8, 0x79, 0x05, 0x94, + 0xe6, 0xe1, 0x4f, 0x24, 0x30, 0xb8, 0x46, 0xea, 0x84, 0x91, 0x76, 0x4f, 0xeb, 0xc6, 0xeb, 0xc1, + 0x41, 0xf1, 0xad, 0xd2, 0x39, 0x30, 0x01, 0x40, 0xd1, 0x36, 0xae, 0x93, 0x46, 0xd1, 0x63, 0x35, + 0xd8, 0x07, 0x4e, 0x82, 0xc1, 0x5b, 0xfc, 0x53, 0x83, 0xe3, 0xa0, 0xdf, 0x21, 0xb8, 0x02, 0x06, + 0x1e, 0x3b, 0x06, 0x23, 0xbe, 0xf3, 0xcd, 0x3f, 0xaf, 0xf3, 0xfd, 0x55, 0x02, 0xc3, 0x57, 0x09, + 0xbb, 0xed, 0x11, 0xa7, 0xf1, 0x4d, 0xba, 0xdf, 0xe7, 0xd2, 0x41, 0xf1, 0x6e, 0x76, 0x13, 0xcc, + 0x76, 0x1a, 0x1f, 0x5a, 0x0c, 0x7b, 0x1c, 0x1b, 0x3e, 0x92, 0x4a, 0x7d, 0xe2, 0x7e, 0x79, 0x78, + 0xfe, 0xa8, 0xfb, 0x7d, 0xca, 0x19, 0x84, 0xb7, 0xfc, 0x7c, 0x00, 0xa4, 0xaf, 0x12, 0x16, 0x76, + 0x0b, 0x3e, 0xf3, 0x4b, 0xbd, 0x97, 0xc8, 0x00, 0x3f, 0xf3, 0xe2, 0xa8, 0xd9, 0xcf, 0xfa, 0xc5, + 0x0d, 0xfe, 0x25, 0xc3, 0x7f, 0xca, 0x47, 0xdc, 0xa1, 0xd5, 0x82, 0x04, 0xc9, 0xb6, 0xd3, 0x28, + 0xd3, 0x4c, 0x9e, 0x25, 0x2a, 0x53, 0xd7, 0x59, 0xa4, 0xed, 0xcc, 0x7b, 0xd6, 0x61, 0xbc, 0x62, + 0x3c, 0x63, 0x5a, 0xe8, 0x7c, 0xda, 0x15, 0x37, 0x56, 0xe3, 0xba, 0x77, 0xf3, 0xed, 0x78, 0x87, + 0xdd, 0x7a, 0xc7, 0x8b, 0x74, 0x65, 0xd8, 0x5e, 0xc2, 0xba, 0xb4, 0xc8, 0x5d, 0x8e, 0xbb, 0xde, + 0xd3, 0x7d, 0x16, 0xd7, 0x58, 0x89, 0x85, 0xbf, 0x97, 0x41, 0xff, 0x7a, 0xb9, 0x46, 0x61, 0xb7, + 0x77, 0x5e, 0xd7, 0x2b, 0xe5, 0xfd, 0x61, 0x25, 0x4c, 0x0e, 0xcf, 0x0d, 0x99, 0xfd, 0x47, 0xea, + 0xa0, 0xf8, 0x9d, 0x14, 0x18, 0x23, 0xe5, 0x1a, 0x45, 0xae, 0xdf, 0x5a, 0x81, 0x61, 0xb1, 0x72, + 0xec, 0x32, 0x9c, 0xba, 0xe3, 0x99, 0x26, 0x76, 0x1a, 0x05, 0xb4, 0x1e, 0x6c, 0x65, 0xd2, 0x6b, + 0xc4, 0x2d, 0x3b, 0x86, 0xf8, 0x1d, 0x47, 0xec, 0x66, 0xd7, 0x00, 0x8c, 0x87, 0xad, 0x90, 0xb6, + 0xc7, 0x60, 0xfd, 0xe0, 0x32, 0x90, 0xdf, 0x5e, 0x58, 0x82, 0x17, 0xc1, 0x05, 0x9d, 0x30, 0xcf, + 0xb1, 0x48, 0x05, 0x3d, 0xae, 0x11, 0x0b, 0xb1, 0x1a, 0x41, 0x0e, 0x71, 0xa9, 0xe7, 0x94, 0x09, + 0x32, 0x5c, 0xc4, 0x88, 0x69, 0x53, 0x07, 0x3b, 0x46, 0xbd, 0x81, 0x3c, 0x0b, 0xef, 0x61, 0xa3, + 0x8e, 0x4b, 0x75, 0x92, 0xff, 0xe0, 0x5d, 0x20, 0x2f, 0x2f, 0x2c, 0xc3, 0x65, 0x30, 0xff, 0x0c, + 0x02, 0x15, 0x4a, 0x5c, 0x64, 0x51, 0x86, 0xc8, 0x13, 0xc3, 0x65, 0x79, 0x38, 0x08, 0xfa, 0x7f, + 0x9e, 0x92, 0x64, 0x11, 0x64, 0x0f, 0x8f, 0x4e, 0x13, 0x5c, 0x31, 0xea, 0xbe, 0x6f, 0x98, 0xfb, + 0xa7, 0xb2, 0xe9, 0x68, 0xc1, 0xe1, 0x67, 0x05, 0xff, 0x69, 0xe6, 0x3e, 0x84, 0x6d, 0x47, 0xf0, + 0xd7, 0x12, 0x18, 0x5b, 0x23, 0xc4, 0x16, 0xcf, 0xe1, 0x7c, 0xe3, 0xdb, 0xe9, 0x6c, 0x2e, 0x8b, + 0xbb, 0x5d, 0xca, 0x2e, 0x1f, 0x99, 0xe2, 0x63, 0xbf, 0xb4, 0xe5, 0xf9, 0x58, 0x22, 0xaa, 0x50, + 0x11, 0x80, 0x4d, 0xba, 0x62, 0x58, 0x15, 0xc3, 0xda, 0x71, 0xe1, 0xa9, 0xb6, 0x0c, 0xbe, 0x16, + 0xfc, 0x08, 0xd9, 0x35, 0xb9, 0xf7, 0xc1, 0x7b, 0x60, 0xe8, 0xae, 0x61, 0x12, 0xea, 0x31, 0xd8, + 0x05, 0xa8, 0x2b, 0xf2, 0x69, 0x21, 0xfe, 0x71, 0x38, 0x1d, 0xd5, 0x27, 0x0b, 0x88, 0xd5, 0x40, + 0x7a, 0xdd, 0x71, 0xa8, 0xc3, 0xcb, 0xf7, 0x1a, 0x61, 0xd8, 0xa8, 0xbb, 0x3d, 0x33, 0x38, 0x2b, + 0x18, 0xbc, 0x0a, 0x67, 0x63, 0x06, 0xe3, 0x54, 0x1f, 0x1b, 0xac, 0x56, 0x09, 0xa8, 0xfe, 0x50, + 0x02, 0xf0, 0x2a, 0x61, 0xc9, 0x19, 0xed, 0xe8, 0x1e, 0x21, 0x81, 0xd1, 0x55, 0x8c, 0x37, 0x85, + 0x18, 0x67, 0xb2, 0xa7, 0xa2, 0x62, 0x70, 0x09, 0x4a, 0xb4, 0xd2, 0x50, 0xf7, 0x79, 0x47, 0x20, + 0x66, 0x39, 0xf8, 0x3d, 0x09, 0x4c, 0x6d, 0x51, 0x97, 0x71, 0x8a, 0x02, 0x55, 0x08, 0xf2, 0x7c, + 0xe3, 0x60, 0x57, 0xee, 0xaa, 0xe0, 0x7e, 0x2e, 0x7b, 0x36, 0xca, 0xdd, 0xa6, 0x2e, 0xe3, 0x12, + 0x88, 0x1f, 0x38, 0x7c, 0x31, 0x42, 0xa7, 0xc8, 0xfc, 0x46, 0x3a, 0x28, 0x7e, 0x29, 0xc1, 0x6a, + 0x97, 0xe9, 0x0c, 0x55, 0x22, 0x49, 0x22, 0x97, 0x43, 0x8f, 0x6b, 0x46, 0xb9, 0x86, 0xdc, 0x1a, + 0xf5, 0xea, 0x15, 0x11, 0x7e, 0x25, 0x82, 0x3c, 0x97, 0x54, 0x90, 0x61, 0x21, 0xbb, 0x8e, 0xcb, + 0x04, 0xd1, 0xaa, 0x08, 0xd4, 0x0a, 0x2d, 0x7b, 0x26, 0xb1, 0xfc, 0x9f, 0x86, 0x51, 0x99, 0x9a, + 0x7c, 0x71, 0x26, 0x73, 0x1b, 0xcc, 0x75, 0xea, 0x0c, 0x78, 0x18, 0x85, 0xf3, 0x60, 0xaf, 0x6f, + 0x8a, 0x8f, 0xc0, 0xb1, 0x32, 0x36, 0x49, 0x7d, 0x15, 0xbb, 0x24, 0xa0, 0xc1, 0x87, 0x17, 0xa8, + 0x83, 0x01, 0xff, 0x57, 0x9a, 0x5e, 0x1d, 0xe9, 0x94, 0xd0, 0xe1, 0x34, 0x9c, 0x8a, 0x39, 0x12, + 0x3f, 0xd2, 0x3e, 0x01, 0xb3, 0x45, 0x8b, 0xb2, 0x1a, 0x71, 0x02, 0x4e, 0xdc, 0x78, 0x91, 0xa0, + 0x7a, 0x3f, 0x16, 0x62, 0xbd, 0x32, 0xee, 0x5b, 0xf9, 0x72, 0xe8, 0xa0, 0xf8, 0xab, 0x21, 0xf8, + 0x27, 0x09, 0x4c, 0x17, 0xd1, 0x8a, 0xff, 0x0a, 0x1c, 0x49, 0x01, 0x1f, 0x81, 0x63, 0x3b, 0xfa, + 0xd6, 0x6a, 0xee, 0xaa, 0x7f, 0x75, 0x64, 0x3b, 0xf4, 0x11, 0x29, 0xb3, 0x5e, 0x55, 0x96, 0x49, + 0x5b, 0xd4, 0x22, 0xff, 0x15, 0x5c, 0x8d, 0x43, 0xcf, 0x7f, 0x02, 0x8e, 0xad, 0xdc, 0x59, 0x43, + 0x4b, 0xb9, 0xd5, 0x3a, 0xf6, 0x5c, 0x82, 0x6e, 0x18, 0x65, 0x62, 0xb9, 0x04, 0x5e, 0xe9, 0x8d, + 0xb2, 0x5a, 0xaa, 0xd3, 0x92, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xbd, 0xb1, 0xb1, 0xba, 0xbe, 0x79, + 0x67, 0x3d, 0xcf, 0x9e, 0x30, 0x4d, 0x5e, 0xcc, 0x2f, 0xcc, 0xcb, 0x52, 0xaa, 0x5f, 0x4b, 0x63, + 0xdb, 0x7f, 0xbb, 0x36, 0xa8, 0xa5, 0x3e, 0x72, 0xa9, 0xa5, 0x9d, 0x88, 0xee, 0x3c, 0xc9, 0x55, + 0x29, 0xcd, 0x99, 0x86, 0x49, 0x0a, 0x6d, 0x90, 0x85, 0x2e, 0x90, 0xfa, 0x16, 0xaf, 0x18, 0x4b, + 0x70, 0x03, 0x5c, 0x6d, 0xaf, 0x18, 0x9e, 0x4b, 0x9c, 0xc3, 0x6a, 0x51, 0xc3, 0x7b, 0x04, 0xd9, + 0xc4, 0x31, 0x0d, 0xd7, 0xe5, 0x8e, 0xc9, 0x28, 0xc2, 0xe5, 0x32, 0x71, 0xdd, 0x58, 0x75, 0xc9, + 0xeb, 0x2f, 0x51, 0x83, 0x86, 0xf4, 0x6b, 0x40, 0x5e, 0x5e, 0xbc, 0x08, 0x8b, 0x60, 0x7c, 0xe3, + 0x4d, 0x13, 0x61, 0xc4, 0x08, 0xb6, 0x29, 0xcb, 0xc3, 0x05, 0x90, 0xcf, 0xf4, 0xf4, 0xcc, 0x77, + 0xff, 0x47, 0x29, 0x30, 0x09, 0x46, 0x56, 0xb0, 0x6b, 0x94, 0x45, 0xff, 0x9f, 0x1a, 0x96, 0xc0, + 0x2b, 0xb1, 0x89, 0x60, 0x72, 0x38, 0x95, 0x19, 0xf9, 0x28, 0x57, 0xdc, 0xda, 0xc8, 0x5d, 0x27, + 0x0d, 0x94, 0x02, 0x5f, 0x49, 0xad, 0x09, 0xe1, 0x0f, 0xd2, 0xb0, 0xac, 0xf4, 0x6b, 0xaf, 0x85, + 0x36, 0x8c, 0x18, 0x5c, 0xa5, 0xd8, 0x63, 0x35, 0x95, 0xff, 0xa1, 0x8e, 0xf1, 0x3f, 0xa4, 0x30, + 0xd7, 0x1d, 0x88, 0xd1, 0x5d, 0x62, 0xad, 0xfc, 0x3f, 0xc8, 0xf8, 0x03, 0x07, 0x84, 0x57, 0x1d, + 0x6c, 0x31, 0x17, 0xf1, 0x45, 0xa0, 0x3d, 0x30, 0x1b, 0x8c, 0x21, 0x70, 0x3a, 0x38, 0x14, 0xab, + 0xf0, 0x74, 0x15, 0x0c, 0xe0, 0x8a, 0x69, 0x58, 0xb0, 0x10, 0x43, 0xb5, 0x2a, 0x31, 0x30, 0x61, + 0x0c, 0x0e, 0x66, 0xb8, 0x8c, 0x57, 0xa2, 0x3d, 0x82, 0x0c, 0xab, 0x4a, 0x1d, 0x53, 0xd8, 0xbb, + 0x34, 0x07, 0xc6, 0xa3, 0xaa, 0xe8, 0x4b, 0x8e, 0x46, 0xa5, 0x73, 0x5d, 0x87, 0xa3, 0x24, 0xa8, + 0xb3, 0x01, 0x4e, 0xde, 0x3c, 0xcc, 0x3e, 0xd1, 0x98, 0xea, 0x35, 0x96, 0xee, 0x8f, 0xb4, 0x2c, + 0x57, 0x1a, 0x14, 0xf1, 0xbc, 0xf4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0x8b, 0x0d, 0x32, + 0x91, 0x24, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index eba0d7d629c..9533cad3e5e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -138,7 +138,7 @@ message ABitOfEverything { json_schema: { title: "A bit of everything" description: "Intentionaly complicated message type to cover many features of Protobuf." - required: ["uuid"] + required: ["uuid", "int64_value", "double_value"] } external_docs: { url: "https://github.com/grpc-ecosystem/grpc-gateway"; @@ -168,7 +168,7 @@ message ABitOfEverything { string uuid = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", min_length: 1}]; repeated Nested nested = 2; - float float_value = 3; + float float_value = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {description: "Float value field", default: "0.2", required: ['float_value']}]; double double_value = 4; int64 int64_value = 5; uint64 uint64_value = 6; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index b4c3e5bb17e..3e246b63c78 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -183,10 +183,12 @@ }, { "name": "float_value", + "description": "Float value field", "in": "query", - "required": false, + "required": true, "type": "number", - "format": "float" + "format": "float", + "default": "0.2" }, { "name": "double_value", @@ -405,10 +407,12 @@ "parameters": [ { "name": "float_value", + "description": "Float value field", "in": "path", "required": true, "type": "number", - "format": "float" + "format": "float", + "default": "0.2" }, { "name": "double_value", @@ -1452,7 +1456,12 @@ }, "float_value": { "type": "number", - "format": "float" + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "float_value" + ] }, "double_value": { "type": "number", @@ -1570,7 +1579,9 @@ "url": "https://github.com/grpc-ecosystem/grpc-gateway" }, "required": [ - "uuid" + "uuid", + "int64_value", + "double_value" ] }, "examplepbABitOfEverythingRepeated": { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 5c869e0f31d..e8675963b75 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -90,7 +90,7 @@ func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Regis return params, nil } -// queryParams converts a field to a list of swagger query parameters recuresively. +// queryParams converts a field to a list of swagger query parameters recursively. func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter) (params []swaggerParameterObject, err error) { // make sure the parameter is not already listed as a path parameter for _, pathParam := range pathParams { @@ -120,14 +120,27 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st if schema.Title != "" { // merge title because title of parameter object will be ignored desc = strings.TrimSpace(schema.Title + ". " + schema.Description) } + + // verify if the field is required + required := false + for _, fieldName := range schema.Required { + if fieldName == field.GetName() { + required = true + break + } + } + param := swaggerParameterObject{ Name: prefix + field.GetName(), Description: desc, In: "query", + Default: schema.Default, Type: schema.Type, Items: schema.Items, Format: schema.Format, + Required: required, } + if isEnum { enum, err := reg.LookupEnum("", fieldType) if err != nil { @@ -250,6 +263,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, schema.MaxLength = protoSchema.MaxLength schema.MinLength = protoSchema.MinLength schema.Pattern = protoSchema.Pattern + schema.Default = protoSchema.Default schema.MaxItems = protoSchema.MaxItems schema.MinItems = protoSchema.MinItems schema.UniqueItems = protoSchema.UniqueItems @@ -589,7 +603,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { - var paramType, paramFormat, desc, collectionFormat string + var paramType, paramFormat, desc, collectionFormat, defaultValue string var enumNames []string var items *swaggerItemsObject var minItems *int @@ -603,6 +617,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re paramType = schema.Type paramFormat = schema.Format desc = schema.Description + defaultValue = schema.Default } else { return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } @@ -620,6 +635,10 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if !ok { return fmt.Errorf("unknown field type %v", pt) } + + schema := schemaOfField(parameter.Target, reg, customRefs) + desc = schema.Description + defaultValue = schema.Default } if parameter.IsRepeated() { @@ -646,6 +665,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re Description: desc, In: "path", Required: true, + Default: defaultValue, // Parameters in gRPC-Gateway can only be strings? Type: paramType, Format: paramFormat, @@ -1440,6 +1460,7 @@ func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_option s.MaxLength = j.GetMaxLength() s.MinLength = j.GetMinLength() s.Pattern = j.GetPattern() + s.Default = j.GetDefault() s.MaxItems = j.GetMaxItems() s.MinItems = j.GetMinItems() s.UniqueItems = j.GetUniqueItems() From f336fbcc3f21acf89e935c2353e7ead734ec31f5 Mon Sep 17 00:00:00 2001 From: Michael Chinn <1105686+mechinn@users.noreply.github.com> Date: Wed, 23 Jan 2019 10:22:47 -0500 Subject: [PATCH 0100/1518] make generated swagger json match gateway behavior for server streams (#850) * #579 fixing protoc-gen-swagger to wrap server stream messages with "result" object to match gateway behavior * #579 fixing test example swagger json * change streamdefinitions to x-stream-definitions and add test * move runtime internal to root of repo for use in protoc-gen-swagger, adding error to stream wrapper * adding comment explaining AddStreamError * fix bazel --- Makefile | 3 +- examples/proto/examplepb/stream.swagger.json | 362 ++++++++++++++++++ {runtime/internal => internal}/BUILD.bazel | 6 +- .../internal => internal}/stream_chunk.pb.go | 39 +- .../internal => internal}/stream_chunk.proto | 0 protoc-gen-swagger/genswagger/BUILD.bazel | 2 + protoc-gen-swagger/genswagger/generator.go | 3 + protoc-gen-swagger/genswagger/template.go | 127 +++++- .../genswagger/template_test.go | 75 +++- protoc-gen-swagger/genswagger/types.go | 1 + protoc-gen-swagger/main.go | 5 + runtime/BUILD.bazel | 4 +- runtime/handler.go | 2 +- runtime/handler_test.go | 2 +- 14 files changed, 586 insertions(+), 45 deletions(-) create mode 100644 examples/proto/examplepb/stream.swagger.json rename {runtime/internal => internal}/BUILD.bazel (66%) rename {runtime/internal => internal}/stream_chunk.pb.go (64%) rename {runtime/internal => internal}/stream_chunk.proto (100%) diff --git a/Makefile b/Makefile index 8d7156cc378..d627f84511d 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ SWAGGER_PLUGIN_FLAGS?= GOOGLEAPIS_DIR=third_party/googleapis OUTPUT_DIR=_output -RUNTIME_PROTO=runtime/internal/stream_chunk.proto +RUNTIME_PROTO=internal/stream_chunk.proto RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto @@ -63,6 +63,7 @@ endif SWAGGER_EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/a_bit_of_everything.proto \ examples/proto/examplepb/wrappers.proto \ + examples/proto/examplepb/stream.proto \ examples/proto/examplepb/unannotated_echo_service.proto \ examples/proto/examplepb/response_body_service.proto diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json new file mode 100644 index 00000000000..a441c36be48 --- /dev/null +++ b/examples/proto/examplepb/stream.swagger.json @@ -0,0 +1,362 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/proto/examplepb/stream.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/a_bit_of_everything": { + "get": { + "operationId": "List", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "$ref": "#/x-stream-definitions/examplepbABitOfEverything" + } + } + }, + "tags": [ + "StreamService" + ] + } + }, + "/v1/example/a_bit_of_everything/bulk": { + "post": { + "operationId": "BulkCreate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + } + }, + "parameters": [ + { + "name": "body", + "description": " (streaming inputs)", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + } + ], + "tags": [ + "StreamService" + ] + } + }, + "/v1/example/a_bit_of_everything/echo": { + "post": { + "operationId": "BulkEcho", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "$ref": "#/x-stream-definitions/subStringMessage" + } + } + }, + "parameters": [ + { + "name": "body", + "description": " (streaming inputs)", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/subStringMessage" + } + } + ], + "tags": [ + "StreamService" + ] + } + } + }, + "definitions": { + "ABitOfEverythingNested": { + "type": "object", + "example": { + "ok": "TRUE" + }, + "properties": { + "name": { + "type": "string", + "description": "name is nested field." + }, + "amount": { + "type": "integer", + "format": "int64" + }, + "ok": { + "$ref": "#/definitions/NestedDeepEnum" + } + }, + "description": "Nested is nested type." + }, + "MessagePathEnumNestedPathEnum": { + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + "NestedDeepEnum": { + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE", + "description": "DeepEnum is one or zero.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true." + }, + "examplepbABitOfEverything": { + "type": "object", + "example": { + "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + }, + "properties": { + "single_nested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "uuid": { + "type": "string", + "minLength": 1, + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "float_value": { + "type": "number", + "format": "float" + }, + "double_value": { + "type": "number", + "format": "double" + }, + "int64_value": { + "type": "string", + "format": "int64" + }, + "uint64_value": { + "type": "string", + "format": "uint64" + }, + "int32_value": { + "type": "integer", + "format": "int32" + }, + "fixed64_value": { + "type": "string", + "format": "uint64" + }, + "fixed32_value": { + "type": "integer", + "format": "int64" + }, + "bool_value": { + "type": "boolean", + "format": "boolean" + }, + "string_value": { + "type": "string" + }, + "bytes_value": { + "type": "string", + "format": "byte" + }, + "uint32_value": { + "type": "integer", + "format": "int64" + }, + "enum_value": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "path_enum_value": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nested_path_enum_value": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32_value": { + "type": "integer", + "format": "int32" + }, + "sfixed64_value": { + "type": "string", + "format": "int64" + }, + "sint32_value": { + "type": "integer", + "format": "int32" + }, + "sint64_value": { + "type": "string", + "format": "int64" + }, + "repeated_string_value": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneof_empty": { + "properties": {} + }, + "oneof_string": { + "type": "string" + }, + "map_value": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mapped_string_value": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mapped_nested_value": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestamp_value": { + "type": "string", + "format": "date-time" + }, + "repeated_enum_value": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + } + }, + "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "uuid" + ] + }, + "examplepbNumericEnum": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO", + "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" + }, + "pathenumPathEnum": { + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name whose content describes the type of the\nserialized protocol buffer message.\n\nFor URLs which use the scheme `http`, `https`, or no scheme, the\nfollowing restrictions and interpretations apply:\n\n* If no scheme is provided, `https` is assumed.\n* The last segment of the URL's path must represent the fully\n qualified name of the type (as in `path/google.protobuf.Duration`).\n The name should be in a canonical form (e.g., leading \".\" is\n not accepted).\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeStreamError": { + "type": "object", + "properties": { + "grpc_code": { + "type": "integer", + "format": "int32" + }, + "http_code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "http_status": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "subStringMessage": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + } + } + }, + "x-stream-definitions": { + "examplepbABitOfEverything": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbABitOfEverything" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of examplepbABitOfEverything" + }, + "subStringMessage": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/subStringMessage" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of subStringMessage" + } + } +} diff --git a/runtime/internal/BUILD.bazel b/internal/BUILD.bazel similarity index 66% rename from runtime/internal/BUILD.bazel rename to internal/BUILD.bazel index 63565730423..76cafe6ec7f 100644 --- a/runtime/internal/BUILD.bazel +++ b/internal/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") -package(default_visibility = ["//runtime:__subpackages__"]) +package(default_visibility = ["//visibility:public"]) proto_library( name = "internal_proto", @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "internal_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", proto = ":internal_proto", ) go_library( name = "go_default_library", embed = [":internal_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", ) diff --git a/runtime/internal/stream_chunk.pb.go b/internal/stream_chunk.pb.go similarity index 64% rename from runtime/internal/stream_chunk.pb.go rename to internal/stream_chunk.pb.go index f4af074808b..c6cfb5c1c02 100644 --- a/runtime/internal/stream_chunk.pb.go +++ b/internal/stream_chunk.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: runtime/internal/stream_chunk.proto +// source: internal/stream_chunk.proto package internal @@ -36,7 +36,7 @@ func (m *StreamError) Reset() { *m = StreamError{} } func (m *StreamError) String() string { return proto.CompactTextString(m) } func (*StreamError) ProtoMessage() {} func (*StreamError) Descriptor() ([]byte, []int) { - return fileDescriptor_stream_chunk_6adb10b40700458b, []int{0} + return fileDescriptor_stream_chunk_cac6867f460b29a5, []int{0} } func (m *StreamError) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamError.Unmarshal(m, b) @@ -96,24 +96,23 @@ func init() { } func init() { - proto.RegisterFile("runtime/internal/stream_chunk.proto", fileDescriptor_stream_chunk_6adb10b40700458b) + proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_stream_chunk_cac6867f460b29a5) } -var fileDescriptor_stream_chunk_6adb10b40700458b = []byte{ - // 226 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0xc1, 0x4e, 0x84, 0x30, - 0x10, 0x86, 0x83, 0xeb, 0xba, 0xbb, 0xc3, 0x8d, 0xec, 0xa1, 0xea, 0x41, 0xa2, 0x17, 0x4e, 0x25, - 0xd1, 0x27, 0x50, 0xe3, 0x0b, 0xb0, 0x37, 0x2f, 0x9b, 0x59, 0x18, 0x0b, 0x11, 0x5a, 0x32, 0x1d, - 0x62, 0x78, 0x2d, 0x9f, 0xd0, 0xb4, 0xc8, 0xb1, 0xdf, 0xf7, 0xff, 0x93, 0x3f, 0x85, 0x27, 0x9e, - 0xac, 0x74, 0x03, 0x95, 0x9d, 0x15, 0x62, 0x8b, 0x7d, 0xe9, 0x85, 0x09, 0x87, 0x73, 0xdd, 0x4e, - 0xf6, 0x5b, 0x8f, 0xec, 0xc4, 0x65, 0x47, 0xc3, 0x63, 0xad, 0x0d, 0x0a, 0xfd, 0xe0, 0xac, 0xff, - 0x1b, 0x77, 0xb7, 0xc6, 0x39, 0xd3, 0x53, 0x19, 0x33, 0x97, 0xe9, 0xab, 0x44, 0x3b, 0x2f, 0x85, - 0xc7, 0xdf, 0x04, 0xd2, 0x53, 0xbc, 0xf3, 0xc1, 0xec, 0x38, 0xbb, 0x87, 0x43, 0x38, 0x71, 0xae, - 0x5d, 0x43, 0x2a, 0xc9, 0x93, 0x62, 0x5b, 0xed, 0x03, 0x78, 0x77, 0x0d, 0x05, 0xd9, 0x8a, 0x8c, - 0x8b, 0xbc, 0x5a, 0x64, 0x00, 0x51, 0x2a, 0xd8, 0x0d, 0xe4, 0x3d, 0x1a, 0x52, 0x9b, 0x3c, 0x29, - 0x0e, 0xd5, 0xfa, 0xcc, 0x1e, 0x20, 0x8d, 0x35, 0x2f, 0x28, 0x93, 0x57, 0xd7, 0xd1, 0x42, 0x40, - 0xa7, 0x48, 0x32, 0x0d, 0xbb, 0x86, 0x04, 0xbb, 0xde, 0xab, 0x6d, 0xbe, 0x29, 0xd2, 0xe7, 0xa3, - 0x5e, 0x16, 0xeb, 0x75, 0xb1, 0x7e, 0xb5, 0x73, 0xb5, 0x86, 0xde, 0xe0, 0x73, 0xbf, 0x7e, 0xc2, - 0xe5, 0x26, 0x46, 0x5e, 0xfe, 0x02, 0x00, 0x00, 0xff, 0xff, 0x16, 0x75, 0x92, 0x08, 0x1f, 0x01, - 0x00, 0x00, +var fileDescriptor_stream_chunk_cac6867f460b29a5 = []byte{ + // 223 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x41, 0x4e, 0xc3, 0x30, + 0x10, 0x45, 0x15, 0x4a, 0x69, 0x3b, 0xd9, 0x45, 0x5d, 0x18, 0xba, 0x20, 0x62, 0x95, 0x95, 0x23, + 0xc1, 0x09, 0x00, 0x71, 0x81, 0x74, 0xc7, 0xa6, 0x9a, 0x26, 0x83, 0x13, 0x91, 0xd8, 0xd1, 0x78, + 0x22, 0x94, 0x6b, 0x71, 0xc2, 0xca, 0x8e, 0xb2, 0xf4, 0x7b, 0x7f, 0xbe, 0xbe, 0x0c, 0xa7, 0xce, + 0x0a, 0xb1, 0xc5, 0xbe, 0xf4, 0xc2, 0x84, 0xc3, 0xa5, 0x6e, 0x27, 0xfb, 0xab, 0x47, 0x76, 0xe2, + 0xb2, 0xa3, 0xe1, 0xb1, 0xd6, 0x06, 0x85, 0xfe, 0x70, 0xd6, 0x3c, 0x59, 0xe9, 0x06, 0x7a, 0x7a, + 0x34, 0xce, 0x99, 0x9e, 0xca, 0x98, 0xb9, 0x4e, 0x3f, 0x25, 0xda, 0x79, 0x39, 0x78, 0xf9, 0x4f, + 0x20, 0x3d, 0xc7, 0x9e, 0x2f, 0x66, 0xc7, 0xd9, 0x09, 0x0e, 0xa1, 0xe2, 0x52, 0xbb, 0x86, 0x54, + 0x92, 0x27, 0xc5, 0xb6, 0xda, 0x07, 0xf0, 0xe9, 0x1a, 0x0a, 0xb2, 0x15, 0x19, 0x17, 0x79, 0xb7, + 0xc8, 0x00, 0xa2, 0x54, 0xb0, 0x1b, 0xc8, 0x7b, 0x34, 0xa4, 0x36, 0x79, 0x52, 0x1c, 0xaa, 0xf5, + 0x99, 0x3d, 0x43, 0x1a, 0xcf, 0xbc, 0xa0, 0x4c, 0x5e, 0xdd, 0x47, 0x0b, 0x01, 0x9d, 0x23, 0xc9, + 0x34, 0xec, 0x1a, 0x12, 0xec, 0x7a, 0xaf, 0xb6, 0xf9, 0xa6, 0x48, 0x5f, 0x8f, 0x7a, 0x59, 0xac, + 0xd7, 0xc5, 0xfa, 0xdd, 0xce, 0xd5, 0x1a, 0xfa, 0x80, 0xef, 0xfd, 0xfa, 0x09, 0xd7, 0x87, 0x18, + 0x79, 0xbb, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x7d, 0xa5, 0x18, 0x17, 0x01, 0x00, 0x00, } diff --git a/runtime/internal/stream_chunk.proto b/internal/stream_chunk.proto similarity index 100% rename from runtime/internal/stream_chunk.proto rename to internal/stream_chunk.proto diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 683b5eeec06..be398fb0dc1 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -12,11 +12,13 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger", deps = [ + "//internal:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 8eba8ac66a4..b69f7e42e3e 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -47,6 +47,9 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { for k, v := range f.swagger.Definitions { mergedTarget.swagger.Definitions[k] = v } + for k, v := range f.swagger.StreamDefinitions { + mergedTarget.swagger.StreamDefinitions[k] = v + } for k, v := range f.swagger.Paths { mergedTarget.swagger.Paths[k] = v } diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e8675963b75..f5a6e031164 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1,6 +1,8 @@ package genswagger import ( + "bytes" + "compress/gzip" "encoding/json" "fmt" "os" @@ -10,8 +12,12 @@ import ( "strings" "sync" + "github.com/golang/glog" "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + "github.com/golang/protobuf/ptypes/any" + "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -180,7 +186,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } // findServicesMessagesAndEnumerations discovers all messages and enums defined in the RPC methods of the service. -func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descriptor.Registry, m messageMap, e enumMap, refs refMap) { +func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descriptor.Registry, m messageMap, ms messageMap, e enumMap, refs refMap) { for _, svc := range s { for _, meth := range svc.Methods { // Request may be fully included in query @@ -193,6 +199,20 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto if !skipRenderingRef(meth.ResponseType.FQMN()) { m[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + if meth.GetServerStreaming() { + runtimeStreamError := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg) + glog.V(1).Infof("StreamError FQMN: %s", runtimeStreamError) + streamError, err := reg.LookupMsg(".grpc.gateway.runtime", "StreamError") + if err == nil { + glog.V(1).Infof("StreamError: %v", streamError) + m[runtimeStreamError] = streamError + findNestedMessagesAndEnumerations(streamError, reg, m, e) + } else { + //just in case there is an error looking up StreamError + glog.Error(err) + } + ms[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + } } findNestedMessagesAndEnumerations(meth.ResponseType, reg, m, e) } @@ -306,6 +326,92 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } } +//AddStreamError Adds internal.StreamError and Any to registry for stream responses +func AddStreamError(reg *descriptor.Registry) error { + //load internal protos + any, err := fileDescriptorProtoFromProtoDescriptor(&any.Any{}) + if err != nil { + return err + } + streamError, err := fileDescriptorProtoFromProtoDescriptor(&internal.StreamError{}) + if err != nil { + return err + } + if err := reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*pbdescriptor.FileDescriptorProto{ + any, + streamError, + }, + }); err != nil { + return err + } + return nil +} + +type protoDescriptor interface { + Descriptor() ([]byte, []int) +} + +func fileDescriptorProtoFromProtoDescriptor(pd protoDescriptor) (*pbdescriptor.FileDescriptorProto, error) { + pdd, _ := pd.Descriptor() + r, err := gzip.NewReader(bytes.NewReader(pdd)) + if err != nil { + return nil, err + } + var buf bytes.Buffer + _, err = buf.ReadFrom(r) + if err != nil { + return nil, err + } + err = r.Close() + if err != nil { + return nil, err + } + fdp := &pbdescriptor.FileDescriptorProto{} + if err := proto.Unmarshal(buf.Bytes(), fdp); err != nil { + return nil, err + } + //hide the fact that we are loading this from the pb.go instead of the proto directly + fdp.SourceCodeInfo = &pbdescriptor.SourceCodeInfo{} + return fdp, nil +} + +func renderMessagesAsStreamDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry) { + for name, msg := range messages { + if skipRenderingRef(name) { + continue + } + + if opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { + continue + } + d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = swaggerSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + Title: fmt.Sprintf("Stream result of %s", fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)), + Properties: &swaggerSchemaObjectProperties{ + keyVal{ + Key: "result", + Value: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)), + }, + }, + }, + keyVal{ + Key: "error", + Value: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg)), + }, + }, + }, + }, + } + } +} + // schemaOfField returns a swagger Schema Object for a protobuf field. func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { const ( @@ -766,6 +872,8 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } if meth.GetServerStreaming() { desc += "(streaming responses)" + // Use the streamdefinition which wraps the message in a "result" + responseSchema.Ref = strings.Replace(responseSchema.Ref, `#/definitions/`, `#/x-stream-definitions/`, 1) } operationObject := &swaggerOperationObject{ Tags: []string{svc.GetName()}, @@ -882,12 +990,13 @@ func applyTemplate(p param) (*swaggerObject, error) { // defined off of. s := swaggerObject{ // Swagger 2.0 is the version of this document - Swagger: "2.0", - Schemes: []string{"http", "https"}, - Consumes: []string{"application/json"}, - Produces: []string{"application/json"}, - Paths: make(swaggerPathsObject), - Definitions: make(swaggerDefinitionsObject), + Swagger: "2.0", + Schemes: []string{"http", "https"}, + Consumes: []string{"application/json"}, + Produces: []string{"application/json"}, + Paths: make(swaggerPathsObject), + Definitions: make(swaggerDefinitionsObject), + StreamDefinitions: make(swaggerDefinitionsObject), Info: swaggerInfoObject{ Title: *p.File.Name, Version: "version not set", @@ -905,9 +1014,11 @@ func applyTemplate(p param) (*swaggerObject, error) { // Find all the service's messages and enumerations that are defined (recursively) // and write request, response and other custom (but referenced) types out as definition objects. m := messageMap{} + ms := messageMap{} e := enumMap{} - findServicesMessagesAndEnumerations(p.Services, p.reg, m, e, requestResponseRefs) + findServicesMessagesAndEnumerations(p.Services, p.reg, m, ms, e, requestResponseRefs) renderMessagesAsDefinition(m, s.Definitions, p.reg, customRefs) + renderMessagesAsStreamDefinition(ms, s.StreamDefinitions, p.reg) renderEnumerationsAsDefinition(e, s.Definitions, p.reg) // File itself might have some comments and metadata. diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index b653ce51ce9..4e20a3ccd25 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -280,7 +280,6 @@ func TestApplyTemplateSimple(t *testing.T) { } func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { - t.Skip() msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), Field: []*protodescriptor.FieldDescriptorProto{ @@ -405,7 +404,9 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { }, }, } - result, err := applyTemplate(param{File: crossLinkFixture(&file)}) + reg := descriptor.NewRegistry() + reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -425,9 +426,6 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want, got := []string{"application/json"}, result.Produces; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Produces = %s want to be %s", file, got, want) } - if want, got, name := "Generated for ExampleService.Echo - ", result.Paths["/v1/echo"].Post.Summary, "Paths[/v1/echo].Post.Summary"; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) - } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { @@ -437,7 +435,6 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { } func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { - t.Skip() msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), Field: []*protodescriptor.FieldDescriptorProto{ @@ -561,11 +558,71 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { }, }, } - _, err := applyTemplate(param{File: crossLinkFixture(&file)}) - if err == nil { - t.Errorf("applyTemplate(%#v) should have failed cause swagger doesn't support streaming", file) + reg := descriptor.NewRegistry() + if err := AddStreamError(reg); err != nil { + t.Errorf("AddStreamError(%#v) failed with %v; want success", reg, err) return } + reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + // Only ExampleMessage must be present, not NestedMessage + if want, got, name := 3, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + } + // stream ExampleMessage must be present + if want, got, name := 1, len(result.StreamDefinitions), "len(StreamDefinitions)"; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + } else { + streamExampleExampleMessage := result.StreamDefinitions["exampleExampleMessage"] + if want, got, name := "object", streamExampleExampleMessage.Type, `StreamDefinitions["exampleExampleMessage"].Type`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + if want, got, name := "Stream result of exampleExampleMessage", streamExampleExampleMessage.Title, `StreamDefinitions["exampleExampleMessage"].Title`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + streamExampleExampleMessageProperties := *(streamExampleExampleMessage.Properties) + if want, got, name := 2, len(streamExampleExampleMessageProperties), `len(StreamDefinitions["exampleExampleMessage"].Properties)`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + } else { + resultProperty := streamExampleExampleMessageProperties[0] + if want, got, name := "result", resultProperty.Key, `(*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Key`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + result := resultProperty.Value.(swaggerSchemaObject) + if want, got, name := "#/definitions/exampleExampleMessage", result.Ref, `((*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Value.(swaggerSchemaObject)).Ref`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + errorProperty := streamExampleExampleMessageProperties[1] + if want, got, name := "error", errorProperty.Key, `(*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Key`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + err := errorProperty.Value.(swaggerSchemaObject) + if want, got, name := "#/definitions/runtimeStreamError", err.Ref, `((*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Value.(swaggerSchemaObject)).Ref`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + } + } + if want, got, name := 1, len(result.Paths["/v1/echo"].Post.Responses), "len(Paths[/v1/echo].Post.Responses)"; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + } else { + if want, got, name := "A successful response.(streaming responses)", result.Paths["/v1/echo"].Post.Responses["200"].Description, `result.Paths["/v1/echo"].Post.Responses["200"].Description`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + if want, got, name := "#/x-stream-definitions/exampleExampleMessage", result.Paths["/v1/echo"].Post.Responses["200"].Schema.Ref, `result.Paths["/v1/echo"].Post.Responses["200"].Description`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + } + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", file) + t.Errorf("got: %s", fmt.Sprint(result)) + } } func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 6125c80f314..d2bed9aa92c 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -57,6 +57,7 @@ type swaggerObject struct { Produces []string `json:"produces"` Paths swaggerPathsObject `json:"paths"` Definitions swaggerDefinitionsObject `json:"definitions"` + StreamDefinitions swaggerDefinitionsObject `json:"x-stream-definitions,omitempty"` SecurityDefinitions swaggerSecurityDefinitionsObject `json:"securityDefinitions,omitempty"` Security []swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 174e4fad384..a4d11fd1ef5 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -91,6 +91,11 @@ func main() { g := genswagger.New(reg) + if err := genswagger.AddStreamError(reg); err != nil { + emitError(err) + return + } + if err := reg.Load(req); err != nil { emitError(err) return diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 059e2033535..c99f83e5851 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -24,7 +24,7 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime", deps = [ - "//runtime/internal:go_default_library", + "//internal:go_default_library", "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", @@ -60,7 +60,7 @@ go_test( embed = [":go_default_library"], deps = [ "//examples/proto/examplepb:go_default_library", - "//runtime/internal:go_default_library", + "//internal:go_default_library", "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", diff --git a/runtime/handler.go b/runtime/handler.go index 8ad9d766e1c..58ba686b81b 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -9,7 +9,7 @@ import ( "context" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/runtime/internal" + "github.com/grpc-ecosystem/grpc-gateway/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 6a712a4e64e..c9caa25cfc0 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -10,8 +10,8 @@ import ( "context" "github.com/golang/protobuf/proto" pb "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/runtime/internal" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" From f52ac10cf4614bfa405446afac1164927e26951d Mon Sep 17 00:00:00 2001 From: Michael Chinn <1105686+mechinn@users.noreply.github.com> Date: Wed, 23 Jan 2019 11:20:12 -0500 Subject: [PATCH 0101/1518] Use github.com/golang/protobuf/descriptor ForMessage and fix CI from not rebasing (#857) * Use github.com/golang/protobuf/descriptor ForMessage instead of extracting FileDescriptorProto ourselves and fixing generated stream.swagger.json * Fixing bazel and removing dead code * remove required github.com/golang/protobuf/descriptor * revert removing github.com/go-resty/resty --- Gopkg.lock | 4 +- examples/proto/examplepb/stream.swagger.json | 11 +++- protoc-gen-swagger/genswagger/BUILD.bazel | 1 + protoc-gen-swagger/genswagger/generator.go | 26 +++++++++ protoc-gen-swagger/genswagger/template.go | 55 -------------------- 5 files changed, 39 insertions(+), 58 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 1bbc8d61516..4e9da479903 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -23,9 +23,10 @@ revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" [[projects]] - digest = "1:77303a120dcd145972685b3465e58e1a0910544fcb323ca24755e073c1ea6d2c" + digest = "1:329b943e12961fb0c0db5bc18858433e569183178edfd0a8d99033ce032c62cc" name = "github.com/golang/protobuf" packages = [ + "descriptor", "jsonpb", "proto", "protoc-gen-go", @@ -160,6 +161,7 @@ "github.com/ghodss/yaml", "github.com/go-resty/resty", "github.com/golang/glog", + "github.com/golang/protobuf/descriptor", "github.com/golang/protobuf/jsonpb", "github.com/golang/protobuf/proto", "github.com/golang/protobuf/protoc-gen-go", diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index a441c36be48..7739b3ea13d 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -146,7 +146,12 @@ }, "float_value": { "type": "number", - "format": "float" + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "float_value" + ] }, "double_value": { "type": "number", @@ -264,7 +269,9 @@ "url": "https://github.com/grpc-ecosystem/grpc-gateway" }, "required": [ - "uuid" + "uuid", + "int64_value", + "double_value" ] }, "examplepbNumericEnum": { diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index be398fb0dc1..18f72b9e37c 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -17,6 +17,7 @@ go_library( "//protoc-gen-grpc-gateway/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index b69f7e42e3e..a7bc905b672 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -9,8 +9,12 @@ import ( "strings" "github.com/golang/glog" + pbdescriptor "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + protocdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + "github.com/golang/protobuf/ptypes/any" + "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" @@ -133,3 +137,25 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato } return files, nil } + +//AddStreamError Adds grpc.gateway.runtime.StreamError and google.protobuf.Any to registry for stream responses +func AddStreamError(reg *descriptor.Registry) error { + //load internal protos + any := fileDescriptorProtoForMessage(&any.Any{}) + streamError := fileDescriptorProtoForMessage(&internal.StreamError{}) + if err := reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protocdescriptor.FileDescriptorProto{ + any, + streamError, + }, + }); err != nil { + return err + } + return nil +} + +func fileDescriptorProtoForMessage(msg pbdescriptor.Message) *protocdescriptor.FileDescriptorProto { + fdp, _ := pbdescriptor.ForMessage(msg) + fdp.SourceCodeInfo = &protocdescriptor.SourceCodeInfo{} + return fdp +} diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f5a6e031164..771a005c99b 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1,8 +1,6 @@ package genswagger import ( - "bytes" - "compress/gzip" "encoding/json" "fmt" "os" @@ -15,9 +13,6 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -326,56 +321,6 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } } -//AddStreamError Adds internal.StreamError and Any to registry for stream responses -func AddStreamError(reg *descriptor.Registry) error { - //load internal protos - any, err := fileDescriptorProtoFromProtoDescriptor(&any.Any{}) - if err != nil { - return err - } - streamError, err := fileDescriptorProtoFromProtoDescriptor(&internal.StreamError{}) - if err != nil { - return err - } - if err := reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*pbdescriptor.FileDescriptorProto{ - any, - streamError, - }, - }); err != nil { - return err - } - return nil -} - -type protoDescriptor interface { - Descriptor() ([]byte, []int) -} - -func fileDescriptorProtoFromProtoDescriptor(pd protoDescriptor) (*pbdescriptor.FileDescriptorProto, error) { - pdd, _ := pd.Descriptor() - r, err := gzip.NewReader(bytes.NewReader(pdd)) - if err != nil { - return nil, err - } - var buf bytes.Buffer - _, err = buf.ReadFrom(r) - if err != nil { - return nil, err - } - err = r.Close() - if err != nil { - return nil, err - } - fdp := &pbdescriptor.FileDescriptorProto{} - if err := proto.Unmarshal(buf.Bytes(), fdp); err != nil { - return nil, err - } - //hide the fact that we are loading this from the pb.go instead of the proto directly - fdp.SourceCodeInfo = &pbdescriptor.SourceCodeInfo{} - return fdp, nil -} - func renderMessagesAsStreamDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry) { for name, msg := range messages { if skipRenderingRef(name) { From b7a5640779183161e8d6c3e51f60f0859b5559ba Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 23 Jan 2019 16:27:36 +0000 Subject: [PATCH 0102/1518] Generate changelog for 1.7.0 --- CHANGELOG.md | 21 +++++++++++++++++++++ Makefile | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e230f8e92d..f7cc4cb3def 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## [v1.7.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.7.0) (2019-01-23) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.4...v1.7.0) + +**Closed issues:** + +- Error to build project with go module [\#846](https://github.com/grpc-ecosystem/grpc-gateway/issues/846) +- Result of gateway's Stream response is wrapped with "result" [\#579](https://github.com/grpc-ecosystem/grpc-gateway/issues/579) + +**Merged pull requests:** + +- Use github.com/golang/protobuf/descriptor ForMessage and fix CI from not rebasing [\#857](https://github.com/grpc-ecosystem/grpc-gateway/pull/857) ([mechinn](https://github.com/mechinn)) +- marshal\_jsonpb: add check for slice sub types implementing proto.Message [\#856](https://github.com/grpc-ecosystem/grpc-gateway/pull/856) ([abice](https://github.com/abice)) +- Added WithDisablePathLengthFallback option \(to fix issue \#447\) [\#855](https://github.com/grpc-ecosystem/grpc-gateway/pull/855) ([UladzimirTrehubenka](https://github.com/UladzimirTrehubenka)) +- marshal\_jsonpb: Added nil slice default value [\#854](https://github.com/grpc-ecosystem/grpc-gateway/pull/854) ([abice](https://github.com/abice)) +- Add flag 'allow\_repeated\_fields\_in\_body' to protoc-gen-swagger [\#853](https://github.com/grpc-ecosystem/grpc-gateway/pull/853) ([abice](https://github.com/abice)) +- Adding support for default and required swagger annotation fields. [\#852](https://github.com/grpc-ecosystem/grpc-gateway/pull/852) ([fahernandez](https://github.com/fahernandez)) +- make generated swagger json match gateway behavior for server streams [\#850](https://github.com/grpc-ecosystem/grpc-gateway/pull/850) ([mechinn](https://github.com/mechinn)) +- test: "fill attributes of swagger schema if provided for messages" [\#849](https://github.com/grpc-ecosystem/grpc-gateway/pull/849) ([srenatus](https://github.com/srenatus)) +- Fix the generated URL in the changelog [\#845](https://github.com/grpc-ecosystem/grpc-gateway/pull/845) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.6.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.4) (2019-01-08) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.3...v1.6.4) @@ -81,6 +101,7 @@ - fix bug: the resource name of custom method doesn't be retained [\#805](https://github.com/grpc-ecosystem/grpc-gateway/pull/805) ([ch3rub1m](https://github.com/ch3rub1m)) - Update rules\_go and gazelle [\#802](https://github.com/grpc-ecosystem/grpc-gateway/pull/802) ([drigz](https://github.com/drigz)) - Properly omit wrappers and google.protobuf.empty from swagger definitions [\#801](https://github.com/grpc-ecosystem/grpc-gateway/pull/801) ([birdayz](https://github.com/birdayz)) +- protoc-gen-swagger: honor example field of message option [\#799](https://github.com/grpc-ecosystem/grpc-gateway/pull/799) ([birdayz](https://github.com/birdayz)) - Use newer Bazel repo rules [\#798](https://github.com/grpc-ecosystem/grpc-gateway/pull/798) ([drigz](https://github.com/drigz)) - Run buildifer on Bazel files [\#797](https://github.com/grpc-ecosystem/grpc-gateway/pull/797) ([drigz](https://github.com/drigz)) - protoc-gen-swagger: Fix formatting of license field definition. [\#796](https://github.com/grpc-ecosystem/grpc-gateway/pull/796) ([ivucica](https://github.com/ivucica)) diff --git a/Makefile b/Makefile index d627f84511d..ba923e91f9c 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.6.4 + --future-release=v1.7.0 lint: golint --set_exit_status $(PKG)/runtime golint --set_exit_status $(PKG)/utilities/... From 1b220ea401fc5adad31a4259514d934f76c74280 Mon Sep 17 00:00:00 2001 From: zwcn Date: Mon, 28 Jan 2019 15:46:10 -0500 Subject: [PATCH 0103/1518] protoc-gen-swagger: add the package name to the tags field of each endpoint if the package name exists in the proto file (#860) * add the package name to the tags field of each endpoint * prepend the package name only if it is defined in the proto file * fix the generate stage of the CI by checking in generated files * add a boolean flag allow_package_name_in_tags and unit tests * update bazel files * rename the flag to include_package_in_tags --- .../descriptor/registry.go | 16 +++++++ protoc-gen-swagger/genswagger/template.go | 8 +++- protoc-gen-swagger/main.go | 9 ++++ protoc-gen-swagger/main_test.go | 43 ++++++++++++------- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 9a201112b0a..510ab253830 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -50,6 +50,10 @@ type Registry struct { // allowRepeatedFieldsInBody permits repeated field in body field path of `google.api.http` annotation option allowRepeatedFieldsInBody bool + // includePackageInTags controls whether the package name defined in the `package` directive + // in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation. + includePackageInTags bool + // repeatedPathParamSeparator specifies how path parameter repeated fields are separated repeatedPathParamSeparator repeatedFieldSeparator @@ -350,6 +354,18 @@ func (r *Registry) IsAllowRepeatedFieldsInBody() bool { return r.allowRepeatedFieldsInBody } +// SetIncludePackageInTags controls whether the package name defined in the `package` directive +// in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation. +func (r *Registry) SetIncludePackageInTags(allow bool) { + r.includePackageInTags = allow +} + +// IsIncludePackageInTags checks whether the package name defined in the `package` directive +// in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation. +func (r *Registry) IsIncludePackageInTags() bool { + return r.includePackageInTags +} + // GetRepeatedPathParamSeparator returns a rune spcifying how // path parameter repeated fields are separated. func (r *Registry) GetRepeatedPathParamSeparator() rune { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 771a005c99b..fcc98b1f51f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -820,8 +820,14 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re // Use the streamdefinition which wraps the message in a "result" responseSchema.Ref = strings.Replace(responseSchema.Ref, `#/definitions/`, `#/x-stream-definitions/`, 1) } + + tag := svc.GetName() + if pkg := svc.File.GetPackage(); pkg != "" && reg.IsIncludePackageInTags() { + tag = pkg + "." + tag + } + operationObject := &swaggerOperationObject{ - Tags: []string{svc.GetName()}, + Tags: []string{tag}, Parameters: parameters, Responses: swaggerResponsesObject{ "200": swaggerResponseObject{ diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index a4d11fd1ef5..16ce528b709 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -25,6 +25,7 @@ var ( repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") versionFlag = flag.Bool("version", false, "print the current verison") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") ) // Variables set by goreleaser at build time @@ -74,6 +75,7 @@ func main() { reg.SetMergeFileName(*mergeFileName) reg.SetUseJSONNamesForFields(*useJSONNamesForFields) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) + reg.SetIncludePackageInTags(*includePackageInTags) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return @@ -168,6 +170,13 @@ func parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) erro } continue } + if spec[0] == "include_package_in_tags" { + err := f.Set(spec[0], "true") + if err != nil { + return fmt.Errorf("Cannot set flag %s: %v", p, err) + } + continue + } err := f.Set(spec[0], "") if err != nil { return fmt.Errorf("Cannot set flag %s: %v", p, err) diff --git a/protoc-gen-swagger/main_test.go b/protoc-gen-swagger/main_test.go index dc8e09bdb12..b5ebda041a2 100644 --- a/protoc-gen-swagger/main_test.go +++ b/protoc-gen-swagger/main_test.go @@ -17,6 +17,7 @@ func TestParseReqParam(t *testing.T) { allowDeleteBodyV bool allowMergeV bool allowRepeatedFieldsInBodyV bool + includePackageInTagsV bool fileV string importPathV string mergeFileNameV string @@ -28,35 +29,35 @@ func TestParseReqParam(t *testing.T) { name: "Test 0", expected: map[string]string{}, request: "", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "-", importPathV: "", mergeFileNameV: "apidocs", }, { name: "Test 1", expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, - request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "apidocs", }, { name: "Test 2", expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, - request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "test_name", }, { name: "Test 3", expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, { name: "Test 4", expected: map[string]string{}, request: "", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, { @@ -64,7 +65,7 @@ func TestParseReqParam(t *testing.T) { expected: map[string]string{}, request: "unknown_param=17", expectedError: errors.New("Cannot set flag unknown_param=17: no such flag -unknown_param"), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, { @@ -72,14 +73,14 @@ func TestParseReqParam(t *testing.T) { expected: map[string]string{}, request: "Mfoo", expectedError: errors.New("Cannot set flag Mfoo: no such flag -Mfoo"), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, { name: "Test 7", expected: map[string]string{}, - request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,merge_file_name", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name", + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, fileV: "", importPathV: "", mergeFileNameV: "", }, { @@ -87,9 +88,17 @@ func TestParseReqParam(t *testing.T) { expected: map[string]string{}, request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", expectedError: errors.New(`Cannot set flag allow_repeated_fields_in_body=3: strconv.ParseBool: parsing "3": invalid syntax`), - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: false, + allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "", importPathV: "", mergeFileNameV: "apidocs", }, + { + name: "Test 9", + expected: map[string]string{}, + request: "include_package_in_tags=3", + expectedError: errors.New(`Cannot set flag include_package_in_tags=3: strconv.ParseBool: parsing "3": invalid syntax`), + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, } for i, tc := range testcases { @@ -112,10 +121,10 @@ func TestParseReqParam(t *testing.T) { tt.Errorf("pkgMap parse error, expected '%v', got '%v'", tc.expected, pkgMap) } if err.Error() != tc.expectedError.Error() { - tt.Errorf("expected error malformed, expected %q, go %q", tc.expectedError.Error(), err.Error()) + tt.Errorf("expected error malformed, expected %q, got %q", tc.expectedError.Error(), err.Error()) } } - checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) + checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) clearFlags() }) @@ -123,7 +132,7 @@ func TestParseReqParam(t *testing.T) { } -func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { +func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePackageInTagsV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { if *importPrefix != importPathV { t.Errorf("Test %v: import_prefix misparsed, expected '%v', got '%v'", tid, importPathV, *importPrefix) } @@ -142,6 +151,9 @@ func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV bool, file if *allowRepeatedFieldsInBody != allowRepeatedFieldsInBodyV { t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, allowRepeatedFieldsInBodyV, *allowRepeatedFieldsInBody) } + if *includePackageInTags != includePackageInTagsV { + t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, includePackageInTagsV, *includePackageInTags) + } } func clearFlags() { @@ -150,5 +162,6 @@ func clearFlags() { *allowDeleteBody = false *allowMerge = false *allowRepeatedFieldsInBody = false + *includePackageInTags = false *mergeFileName = "apidocs" } From c3923b1034cd4a10cea4dfae173804b19f6f7fe0 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 5 Feb 2019 11:34:38 +0000 Subject: [PATCH 0104/1518] Update CI badge link in documentation --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index bb36263e758..59e3047c87a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ # grpc-gateway -[![CircleCI](https://circleci.com/gh/johanbrandhorst/grpc-gateway.svg?style=svg)](https://circleci.com/gh/johanbrandhorst/grpc-gateway) +[![CircleCI](https://circleci.com/gh/grpc-ecosystem/grpc-gateway.svg?style=svg)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). It reads [gRPC](http://github.com/grpc/grpc-common) service definition, From 1afb80beb97413687f6460afe090cd5bccbbb2e5 Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 14:50:35 -0600 Subject: [PATCH 0105/1518] 863 adding swagger annotation support for enum, repeated enum, nested object, repeated nested object and repeated primitive fields --- .../abe/a_bit_of_everything_service_api.go | 30 +- .../abe/examplepb_a_bit_of_everything.go | 15 + examples/clients/echo/api_client.go | 2 +- examples/clients/echo/api_response.go | 2 +- examples/clients/echo/configuration.go | 2 +- examples/clients/echo/echo_service_api.go | 2 +- examples/clients/echo/examplepb_embedded.go | 2 +- .../clients/echo/examplepb_simple_message.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 473 ++++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 63 ++- .../proto/examplepb/a_bit_of_everything.proto | 17 +- .../a_bit_of_everything.swagger.json | 153 +++++- .../proto/examplepb/echo_service.swagger.json | 2 +- examples/proto/examplepb/stream.swagger.json | 34 ++ protoc-gen-swagger/genswagger/template.go | 37 +- 15 files changed, 602 insertions(+), 234 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 1e8956c2aff..21971cc14fc 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -60,13 +60,17 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * @param enumValue * @param pathEnumValue * @param nestedPathEnumValue + * @param repeatedEnumValue repeated enum value. it is comma-separated in query + * @param repeatedEnumValueAnnotation Repeated numeric enum description. + * @param enumValueAnnotation Numeric enum description. + * @param repeatedStringAnnotation Repeated string description. * @return *ExamplepbABitOfEverything */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string) (*ExamplepbABitOfEverything, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, repeatedEnumValue []string, repeatedEnumValueAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string) (*ExamplepbABitOfEverything, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}" + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}" localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -85,6 +89,10 @@ func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"repeated_enum_value"+"}", fmt.Sprintf("%v", repeatedEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"repeated_enum_value_annotation"+"}", fmt.Sprintf("%v", repeatedEnumValueAnnotation), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) + localVarPath = strings.Replace(localVarPath, "{"+"repeated_string_annotation"+"}", fmt.Sprintf("%v", repeatedStringAnnotation), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -547,9 +555,15 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param nonConventionalNameValue * @param timestampValue * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedEnumValueAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedStringAnnotation Repeated string title. Repeated string description. + * @param nestedAnnotationName name is nested field. + * @param nestedAnnotationAmount + * @param nestedAnnotationOk - FALSE: FALSE is false. - TRUE: TRUE is true. * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumValueAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -596,6 +610,16 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si var repeatedEnumValueCollectionFormat = "csv" localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) + var repeatedEnumValueAnnotationCollectionFormat = "csv" + localVarQueryParams.Add("repeated_enum_value_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumValueAnnotation, repeatedEnumValueAnnotationCollectionFormat)) + + localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) + var repeatedStringAnnotationCollectionFormat = "csv" + localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) + + localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) + localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) + localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index 91320d0e7c3..74ec2f41000 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -77,4 +77,19 @@ type ExamplepbABitOfEverything struct { TimestampValue time.Time `json:"timestamp_value,omitempty"` RepeatedEnumValue []ExamplepbNumericEnum `json:"repeated_enum_value,omitempty"` + + // Repeated numeric enum description. + RepeatedEnumValueAnnotation []ExamplepbNumericEnum `json:"repeated_enum_value_annotation,omitempty"` + + // Numeric enum description. + EnumValueAnnotation ExamplepbNumericEnum `json:"enum_value_annotation,omitempty"` + + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeated_string_annotation,omitempty"` + + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeated_nested_annotation,omitempty"` + + // Nested object description. + NestedAnnotation ABitOfEverythingNested `json:"nested_annotation,omitempty"` } diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index 7a517148026..d54e3e68565 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/api_response.go index 8b0d07c4a13..a4f0ab08001 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/api_response.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 9a75a30aeec..6441b8dc698 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go index 6ae7cf85a32..7625bc9eec8 100644 --- a/examples/clients/echo/echo_service_api.go +++ b/examples/clients/echo/echo_service_api.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_embedded.go b/examples/clients/echo/examplepb_embedded.go index 4b5fe265ac9..ad76336c25b 100644 --- a/examples/clients/echo/examplepb_embedded.go +++ b/examples/clients/echo/examplepb_embedded.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/examplepb_simple_message.go index 366a6876665..2b9b366e57e 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/examplepb_simple_message.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 896288bd685..9f5eed795a3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -119,17 +119,27 @@ type ABitOfEverything struct { NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + // repeated numeric enum comment (This comment is overridden by the field annotation) + RepeatedEnumValueAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_value_annotation,json=repeatedEnumValueAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value_annotation,omitempty"` + // numeric enum comment (This comment is overridden by the field annotation) + EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` + // repeated string comment (This comment is overridden by the field annotation) + RepeatedStringAnnotation []string `protobuf:"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3" json:"repeated_string_annotation,omitempty"` + // repeated nested object comment (This comment is overridden by the field annotation) + RepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3" json:"repeated_nested_annotation,omitempty"` + // nested object comments (This comment is overridden by the field annotation) + NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -382,6 +392,41 @@ func (m *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { return nil } +func (m *ABitOfEverything) GetRepeatedEnumValueAnnotation() []NumericEnum { + if m != nil { + return m.RepeatedEnumValueAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { + if m != nil { + return m.EnumValueAnnotation + } + return NumericEnum_ZERO +} + +func (m *ABitOfEverything) GetRepeatedStringAnnotation() []string { + if m != nil { + return m.RepeatedStringAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { + if m != nil { + return m.RepeatedNestedAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { + if m != nil { + return m.NestedAnnotation + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*ABitOfEverything) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _ABitOfEverything_OneofMarshaler, _ABitOfEverything_OneofUnmarshaler, _ABitOfEverything_OneofSizer, []interface{}{ @@ -467,7 +512,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{0, 0} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -536,7 +581,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{1} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -679,7 +724,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{2} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -718,7 +763,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{3} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -765,7 +810,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_74470c9779693dcd, []int{4} + return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1529,200 +1574,212 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_74470c9779693dcd) -} - -var fileDescriptor_a_bit_of_everything_74470c9779693dcd = []byte{ - // 3044 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, - 0xdd, 0x5a, 0xae, 0x9e, 0xa3, 0x17, 0x35, 0xf2, 0x43, 0xa6, 0x95, 0x68, 0xcc, 0x38, 0xc9, 0x5a, - 0x31, 0xb9, 0xd2, 0x4a, 0x71, 0x6c, 0x06, 0x89, 0x3f, 0xea, 0x61, 0x5b, 0xb1, 0x2d, 0xcb, 0x6b, - 0xc7, 0x5f, 0xe0, 0xd8, 0x11, 0x86, 0xe4, 0x50, 0x5c, 0x8b, 0xbb, 0xb3, 0xd9, 0x9d, 0x95, 0xcd, - 0x4f, 0x1f, 0xbf, 0x2f, 0x7d, 0xa0, 0x45, 0x9b, 0x43, 0x01, 0x05, 0x3d, 0xb4, 0x28, 0xfa, 0x17, - 0xf4, 0xda, 0x53, 0x0e, 0x6d, 0x0f, 0x3d, 0xf5, 0xe6, 0x16, 0x01, 0x8a, 0x02, 0xb9, 0xb4, 0x05, - 0xfa, 0x17, 0x14, 0xe8, 0xa5, 0x28, 0x66, 0x76, 0x97, 0xda, 0x5d, 0x92, 0x96, 0x69, 0x07, 0xb9, - 0x48, 0x3b, 0x33, 0xbf, 0xd7, 0xfc, 0xde, 0xbf, 0x21, 0xd0, 0xc8, 0x13, 0x6c, 0xda, 0x75, 0xe2, - 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa5, 0x5d, 0x52, 0xf1, 0x76, 0xc9, 0x60, 0xdb, 0xb4, 0xba, - 0x4d, 0xf6, 0x88, 0xd3, 0x60, 0x35, 0xc3, 0xda, 0xc9, 0x0b, 0x18, 0x38, 0xb7, 0xe3, 0xd8, 0xe5, - 0xfc, 0x0e, 0x66, 0xe4, 0x31, 0x6e, 0xe4, 0x43, 0x02, 0xf9, 0x16, 0x6a, 0x66, 0x76, 0x87, 0xd2, - 0x9d, 0x3a, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xa3, 0x67, - 0x50, 0x70, 0x2a, 0x56, 0x25, 0xaf, 0xaa, 0x56, 0x0d, 0x52, 0xaf, 0x6c, 0x9b, 0xd8, 0xdd, 0x0d, - 0x20, 0x4e, 0x27, 0x21, 0x88, 0x69, 0xb3, 0x46, 0x70, 0xf8, 0x6a, 0xf2, 0xb0, 0xe2, 0x39, 0x82, - 0x7e, 0x70, 0xfe, 0x66, 0xe2, 0x46, 0x36, 0x66, 0x35, 0x62, 0x79, 0xa6, 0xf8, 0xd8, 0xe6, 0x5f, - 0xa1, 0x1c, 0x09, 0x40, 0xd7, 0x2b, 0xa9, 0x26, 0x71, 0x5d, 0xbc, 0x43, 0x02, 0x88, 0x33, 0xed, - 0x10, 0x5a, 0x02, 0x64, 0x2e, 0x29, 0x0d, 0x33, 0x4c, 0xe2, 0x32, 0x6c, 0xda, 0x01, 0xc0, 0x79, - 0xf1, 0xaf, 0x9c, 0xdb, 0x21, 0x56, 0xce, 0x7d, 0x8c, 0x77, 0x76, 0x88, 0xa3, 0x52, 0x5b, 0xe8, - 0xa3, 0x5d, 0x37, 0xd9, 0xaf, 0x8f, 0x81, 0x74, 0x71, 0xc5, 0x60, 0xb7, 0xaa, 0xeb, 0x2d, 0xad, - 0xc3, 0x87, 0x60, 0xdc, 0x35, 0xac, 0x9d, 0x3a, 0xd9, 0xb6, 0x88, 0xcb, 0x48, 0x65, 0xe6, 0x14, - 0x92, 0x94, 0x51, 0xed, 0x62, 0xfe, 0x08, 0x3b, 0xe4, 0x93, 0x94, 0xf2, 0x9b, 0x02, 0x5f, 0x1f, - 0xf3, 0xc9, 0xf9, 0x2b, 0x58, 0x03, 0xfd, 0x9e, 0x67, 0x54, 0x66, 0x24, 0x24, 0x29, 0x23, 0x2b, - 0x77, 0x0f, 0x8a, 0xb7, 0x3f, 0x93, 0xa4, 0x1f, 0x4b, 0xd7, 0x3f, 0xc6, 0xb9, 0x6a, 0x31, 0x77, - 0x65, 0x21, 0x77, 0xe9, 0xe1, 0xfe, 0xc5, 0x66, 0x2e, 0xba, 0x5c, 0xee, 0x65, 0xb9, 0xa8, 0x35, - 0x75, 0xc1, 0x01, 0x6e, 0x81, 0xc1, 0xe0, 0x06, 0x29, 0x24, 0xbf, 0xd4, 0x0d, 0x02, 0x3a, 0xf0, - 0x03, 0x30, 0x5a, 0xad, 0x53, 0xcc, 0xb6, 0xf7, 0x70, 0xdd, 0x23, 0x33, 0x32, 0x92, 0x94, 0xd4, - 0xca, 0xb9, 0x83, 0xe2, 0x1b, 0xda, 0xd4, 0x15, 0xbe, 0x8f, 0xc4, 0x3e, 0x12, 0x1e, 0x56, 0x90, - 0x17, 0xf2, 0xda, 0x53, 0x29, 0x8a, 0xa0, 0x03, 0xb1, 0xb8, 0xc7, 0xbf, 0xe1, 0x19, 0x30, 0x56, - 0xa1, 0x5e, 0xa9, 0x4e, 0x02, 0x62, 0xfd, 0x48, 0x52, 0x24, 0x7d, 0xd4, 0xdf, 0xf3, 0x41, 0xe6, - 0xc0, 0xa8, 0x61, 0xb1, 0x0b, 0xcb, 0x01, 0xc4, 0x00, 0x92, 0x14, 0x59, 0x07, 0x62, 0xab, 0x45, - 0xc3, 0x8b, 0x42, 0x0c, 0x22, 0x49, 0xe9, 0xd7, 0x47, 0xbd, 0x08, 0x88, 0x4f, 0x63, 0x49, 0x0b, - 0x20, 0x86, 0x90, 0xa4, 0x0c, 0x08, 0x1a, 0x4b, 0x9a, 0x0f, 0xf0, 0x1a, 0x18, 0xaf, 0x1a, 0x4f, - 0x48, 0xa5, 0x45, 0x64, 0x18, 0x49, 0xca, 0xa0, 0x3e, 0x16, 0x6c, 0xc6, 0x81, 0x5a, 0x74, 0x46, - 0x90, 0xa4, 0x0c, 0x05, 0x40, 0x21, 0xa5, 0x57, 0x00, 0x28, 0x51, 0x5a, 0x0f, 0x20, 0x00, 0x92, - 0x94, 0x61, 0x7d, 0x84, 0xef, 0xb4, 0x84, 0x75, 0x99, 0x63, 0x58, 0x3b, 0x01, 0xc0, 0x28, 0x77, - 0x00, 0x7d, 0xd4, 0xdf, 0x6b, 0x09, 0x5b, 0x6a, 0x30, 0xe2, 0x06, 0x10, 0xaf, 0x20, 0x49, 0x19, - 0xd3, 0x81, 0xd8, 0x8a, 0x5d, 0xb8, 0x25, 0xc6, 0x38, 0x92, 0x94, 0x71, 0xff, 0xc2, 0xa1, 0x14, - 0xd7, 0x01, 0xe0, 0x51, 0x17, 0x00, 0x4c, 0x20, 0x49, 0x99, 0xd0, 0xce, 0x1f, 0x69, 0xf9, 0x4d, - 0xcf, 0x24, 0x8e, 0x51, 0x5e, 0xb7, 0x3c, 0x53, 0x1f, 0xe1, 0xf8, 0x3e, 0xb1, 0x2d, 0x30, 0xd9, - 0x8a, 0xe3, 0x80, 0xe2, 0xab, 0x82, 0xa2, 0xd2, 0x85, 0x62, 0x18, 0xfe, 0xf9, 0x2d, 0xcc, 0x6a, - 0x82, 0xda, 0xb8, 0x1d, 0x7c, 0xf9, 0x14, 0x5d, 0x70, 0xc2, 0x77, 0xa6, 0xed, 0x24, 0xe1, 0x39, - 0x41, 0xf8, 0xfd, 0xa3, 0x08, 0xdf, 0xf4, 0x13, 0x42, 0x48, 0x3f, 0x70, 0xd1, 0x16, 0xbb, 0x69, - 0x2b, 0xb6, 0xf6, 0x99, 0xbe, 0x0e, 0x26, 0xdc, 0xb8, 0xfd, 0x26, 0x91, 0xa4, 0x4c, 0xea, 0xe3, - 0x6e, 0xcc, 0x80, 0x2d, 0xb0, 0x96, 0x2f, 0xa4, 0x91, 0xa4, 0xa4, 0x43, 0xb0, 0x88, 0xd7, 0xb9, - 0x51, 0x23, 0x4c, 0x21, 0x49, 0x99, 0xd2, 0x47, 0xdd, 0x88, 0x11, 0x02, 0x90, 0x16, 0x1d, 0x88, - 0x24, 0x05, 0xfa, 0x20, 0x21, 0x15, 0x0d, 0x1c, 0x77, 0x88, 0x4d, 0x30, 0x57, 0x45, 0xcc, 0x2f, - 0xa6, 0x91, 0xac, 0x8c, 0xe8, 0xd3, 0xe1, 0xe1, 0x9d, 0x88, 0x7f, 0x5c, 0x02, 0xa3, 0xd4, 0x22, - 0xbc, 0x48, 0xf0, 0x0c, 0x3d, 0x73, 0x4c, 0x24, 0xa6, 0x13, 0x79, 0x3f, 0x29, 0xe6, 0xc3, 0xa4, - 0x98, 0x5f, 0xe7, 0xa7, 0xd7, 0xfa, 0x74, 0x20, 0x80, 0xc5, 0x0a, 0xbe, 0x06, 0xc6, 0x7c, 0x54, - 0x9f, 0xd7, 0xcc, 0x71, 0xee, 0x7d, 0xd7, 0xfa, 0x74, 0x9f, 0xa0, 0xcf, 0x04, 0x3e, 0x00, 0x23, - 0x26, 0xb6, 0x03, 0x39, 0x4e, 0x88, 0xa4, 0x71, 0xb9, 0xf7, 0xa4, 0x71, 0x13, 0xdb, 0x42, 0xdc, - 0x75, 0x8b, 0x39, 0x0d, 0x7d, 0xd8, 0x0c, 0x96, 0xf0, 0x09, 0x98, 0x36, 0xb1, 0x6d, 0x27, 0xef, - 0x7b, 0x52, 0xf0, 0xb9, 0xf6, 0x42, 0x7c, 0xec, 0x98, 0x7e, 0x7c, 0x86, 0x53, 0x66, 0x72, 0x3f, - 0xc2, 0x39, 0xf0, 0x3d, 0x9f, 0xf3, 0xcc, 0xcb, 0x71, 0xf6, 0x3d, 0xaf, 0x9d, 0x73, 0x64, 0x1f, - 0x16, 0xc0, 0x8c, 0x45, 0xad, 0x55, 0x6a, 0xed, 0x11, 0x8b, 0x57, 0x1e, 0x5c, 0xdf, 0xc4, 0xa6, - 0x9f, 0xde, 0x66, 0x32, 0x22, 0x01, 0x74, 0x3d, 0x87, 0xab, 0x60, 0xb2, 0x55, 0xde, 0x02, 0x89, - 0x4f, 0x0b, 0x8b, 0x67, 0xda, 0x2c, 0x7e, 0x37, 0x84, 0xd3, 0x27, 0x5a, 0x28, 0x3e, 0x91, 0x07, - 0xa0, 0xe5, 0x49, 0xd1, 0x60, 0x9b, 0x45, 0x72, 0xcf, 0x79, 0x61, 0x2a, 0x24, 0xd4, 0x0a, 0xac, - 0xcc, 0xef, 0x24, 0x30, 0x18, 0xd4, 0x35, 0x08, 0xfa, 0x2d, 0x6c, 0x12, 0xbf, 0xae, 0xe9, 0xe2, - 0x1b, 0x9e, 0x00, 0x83, 0xd8, 0xa4, 0x9e, 0xc5, 0x66, 0x52, 0x22, 0x51, 0x05, 0x2b, 0x78, 0x1b, - 0xa4, 0xe8, 0xae, 0x28, 0x1f, 0x13, 0x5a, 0xf1, 0x45, 0xab, 0x52, 0x7e, 0x8d, 0x10, 0x5b, 0x08, - 0x96, 0xa2, 0xbb, 0xd9, 0x39, 0x30, 0x1c, 0xae, 0xe1, 0x08, 0x18, 0xb8, 0x52, 0xbc, 0x71, 0x67, - 0x3d, 0xdd, 0x07, 0x87, 0x41, 0xff, 0x5d, 0xfd, 0xc3, 0xf5, 0xb4, 0x54, 0x38, 0x79, 0x50, 0x3c, - 0xa6, 0x41, 0x98, 0xde, 0x47, 0x59, 0xba, 0x9b, 0x2d, 0xa0, 0x2c, 0xdf, 0xcf, 0xa2, 0x66, 0xc6, - 0x00, 0xe3, 0x31, 0x8f, 0x85, 0x69, 0x20, 0xef, 0x92, 0x46, 0x70, 0x11, 0xfe, 0x09, 0x57, 0xc0, - 0x80, 0xaf, 0xb6, 0xd4, 0x0b, 0xa4, 0x53, 0x1f, 0xb5, 0x90, 0xba, 0x28, 0x65, 0xd6, 0xc0, 0x89, - 0xce, 0x4e, 0xdb, 0x81, 0xe7, 0xb1, 0x28, 0xcf, 0x91, 0x28, 0x95, 0xff, 0x0b, 0xa9, 0x24, 0x1d, - 0xb0, 0x03, 0x95, 0xcd, 0x28, 0x95, 0x97, 0x69, 0x01, 0x0e, 0xf9, 0x17, 0x7e, 0x96, 0x3a, 0x28, - 0xfe, 0x34, 0x05, 0xbe, 0x2f, 0xcd, 0x4f, 0x17, 0x51, 0xc9, 0x60, 0x88, 0x56, 0xd1, 0x61, 0xd7, - 0xaa, 0x6d, 0x6c, 0x58, 0x2c, 0x74, 0xe6, 0x06, 0x2a, 0x53, 0xd3, 0xae, 0x1b, 0x65, 0xee, 0x36, - 0x28, 0xe8, 0xe5, 0x10, 0x6b, 0xd8, 0x04, 0x31, 0x8a, 0xca, 0x74, 0x8f, 0x38, 0xc8, 0xc4, 0x56, - 0x03, 0x55, 0x09, 0x66, 0x9e, 0x43, 0x5c, 0x4e, 0x6b, 0x2b, 0xf4, 0xea, 0xa7, 0x92, 0x68, 0x64, - 0x9e, 0x4a, 0xd1, 0x36, 0xe0, 0xa9, 0x14, 0xeb, 0x1b, 0xe6, 0xef, 0x81, 0xb3, 0x57, 0x0c, 0xab, - 0x82, 0xa8, 0xc7, 0x90, 0x49, 0x1d, 0x82, 0x70, 0x89, 0x7f, 0xb6, 0xb5, 0x75, 0xf9, 0x1a, 0x63, - 0xb6, 0x5b, 0x50, 0xd5, 0x1d, 0x83, 0xd5, 0xbc, 0x52, 0xbe, 0x4c, 0x4d, 0x95, 0x2b, 0x23, 0x47, - 0xca, 0xd4, 0x6d, 0xb8, 0x8c, 0x04, 0xcb, 0x40, 0x37, 0xda, 0x32, 0xd4, 0xf6, 0x51, 0x96, 0xf3, - 0xe7, 0xce, 0xb2, 0x50, 0xae, 0x2e, 0x5d, 0x58, 0x24, 0x8b, 0xb9, 0xe5, 0xd2, 0xf2, 0x72, 0x6e, - 0xf9, 0xe2, 0x52, 0x25, 0x87, 0x17, 0xdf, 0xbe, 0x94, 0x7b, 0x7b, 0xb9, 0x82, 0x4b, 0x95, 0xea, - 0x3b, 0xe4, 0xe2, 0xe2, 0x72, 0x16, 0x35, 0x57, 0xc6, 0xc3, 0x0c, 0x2d, 0x84, 0xcb, 0xfe, 0x7b, - 0x18, 0xcc, 0x24, 0x25, 0xd1, 0x83, 0x28, 0x82, 0x97, 0xc0, 0x29, 0x51, 0x03, 0x5b, 0xf1, 0x19, - 0xed, 0xad, 0x24, 0x24, 0x2b, 0x29, 0xfd, 0x04, 0x07, 0x08, 0x11, 0xae, 0x1c, 0x36, 0x4f, 0xef, - 0x82, 0x4c, 0x1c, 0x35, 0xd6, 0x4a, 0xf1, 0x76, 0x4f, 0xd2, 0x4f, 0x46, 0x71, 0xd7, 0x22, 0x6d, - 0x55, 0x1b, 0xdf, 0x68, 0xa5, 0x92, 0x91, 0xac, 0xc8, 0x71, 0xbe, 0x1b, 0x87, 0x45, 0xab, 0x8d, - 0x6f, 0xac, 0xfd, 0xea, 0x47, 0xb2, 0xd2, 0x1f, 0xe7, 0xfb, 0x61, 0xa4, 0xe2, 0x75, 0xe2, 0xdb, - 0x2a, 0xa2, 0x03, 0x48, 0x56, 0x06, 0xda, 0xf8, 0x86, 0xf5, 0xf4, 0x3d, 0x70, 0x3a, 0xa1, 0xaa, - 0x58, 0x99, 0x1e, 0x44, 0xb2, 0x32, 0xa8, 0xcf, 0xc4, 0x94, 0x15, 0xad, 0xd8, 0x9d, 0xd1, 0x23, - 0x4d, 0xa1, 0xac, 0x0c, 0x75, 0x40, 0x0f, 0xb9, 0xbf, 0x03, 0x66, 0xe2, 0xe8, 0x91, 0x36, 0x6f, - 0x18, 0xc9, 0xca, 0xb0, 0x7e, 0x3c, 0x8a, 0xbb, 0xd2, 0x6a, 0xf9, 0xda, 0xd4, 0x15, 0x2b, 0x7c, - 0x23, 0xa2, 0xd0, 0xc7, 0xd4, 0x15, 0x2f, 0xf6, 0x09, 0x75, 0x45, 0x5b, 0x43, 0x80, 0x64, 0x65, - 0x2c, 0xae, 0xae, 0x95, 0xc3, 0x36, 0xb1, 0xa3, 0x99, 0x5a, 0xd7, 0x1d, 0x45, 0xb2, 0x32, 0xde, - 0x6e, 0xa6, 0xf0, 0xb6, 0x24, 0x79, 0xdb, 0x48, 0xd9, 0x18, 0x7b, 0x81, 0xb2, 0x11, 0xd3, 0xcd, - 0x61, 0x4f, 0x76, 0x19, 0xcc, 0x26, 0x74, 0x13, 0x37, 0xca, 0x38, 0x92, 0x95, 0x49, 0xfd, 0x54, - 0x4c, 0x3b, 0xb1, 0x6e, 0xad, 0x0b, 0x81, 0x96, 0x53, 0x4c, 0x20, 0x59, 0x49, 0x77, 0x22, 0xd0, - 0xd5, 0x99, 0x63, 0x5d, 0xdd, 0x24, 0x92, 0x95, 0xa9, 0x84, 0x75, 0x22, 0x5a, 0xea, 0x88, 0x1c, - 0xe9, 0x1b, 0x65, 0x05, 0xb6, 0x23, 0x07, 0x9c, 0x0b, 0xb5, 0x83, 0x22, 0xd1, 0xca, 0x10, 0xef, - 0xa3, 0x6c, 0x37, 0xc7, 0xca, 0x16, 0xd0, 0xc7, 0xcc, 0xf1, 0xc8, 0x79, 0xe4, 0xff, 0xad, 0xe2, - 0xba, 0x1b, 0x2c, 0x1e, 0x9e, 0x4f, 0xa2, 0x45, 0xe4, 0xe6, 0x78, 0x8b, 0xe7, 0x91, 0x76, 0x1e, - 0x2d, 0x3d, 0x44, 0xcd, 0x6c, 0x06, 0xf4, 0xaf, 0xd0, 0x4a, 0xa3, 0x53, 0x75, 0xce, 0x3e, 0x00, - 0x93, 0x41, 0x33, 0xfd, 0xdf, 0x06, 0xab, 0x09, 0xb0, 0x09, 0x90, 0x0a, 0x47, 0x53, 0x3d, 0x65, - 0xf0, 0x14, 0xd5, 0x5f, 0xc1, 0x0c, 0x07, 0xd5, 0xe3, 0xf5, 0x23, 0xed, 0xce, 0x89, 0xe8, 0x02, - 0x25, 0xfb, 0x85, 0x04, 0x26, 0x3f, 0xb4, 0x2b, 0x98, 0x91, 0x7b, 0x9a, 0x4e, 0x3e, 0xf5, 0x88, - 0xcb, 0xe0, 0x2a, 0x90, 0x71, 0xc9, 0x17, 0x62, 0x54, 0x5b, 0xec, 0xb9, 0x16, 0xe9, 0x1c, 0x1b, - 0xbe, 0x0b, 0x46, 0x3d, 0x41, 0x57, 0xbc, 0x61, 0x04, 0xa2, 0xb5, 0xb7, 0x44, 0x57, 0xf8, 0x10, - 0x7a, 0x13, 0xbb, 0xbb, 0x3a, 0xf0, 0xc1, 0xf9, 0xf7, 0x3c, 0x02, 0xa3, 0x11, 0xdf, 0xe4, 0xed, - 0xc1, 0xfd, 0x75, 0xfd, 0x56, 0xba, 0x0f, 0x0e, 0x01, 0xf9, 0xd6, 0xe6, 0x7a, 0x5a, 0xd2, 0xfe, - 0x3c, 0x0b, 0x4e, 0x26, 0x19, 0xdf, 0x21, 0xce, 0x9e, 0x51, 0x26, 0xf0, 0x2b, 0x19, 0x0c, 0xae, - 0x3a, 0x5c, 0xe7, 0xb0, 0x77, 0xe9, 0x33, 0xbd, 0xa3, 0x64, 0xff, 0x9e, 0xfa, 0xee, 0x1f, 0xff, - 0xf6, 0x45, 0xea, 0xeb, 0x54, 0xf6, 0x2f, 0x29, 0x75, 0x6f, 0x31, 0x7c, 0x2f, 0xea, 0xf4, 0x5a, - 0xa4, 0xee, 0x47, 0xca, 0x47, 0x53, 0xdd, 0x8f, 0x56, 0x84, 0xa6, 0xba, 0x1f, 0xf1, 0xce, 0xa6, - 0xea, 0x12, 0x1b, 0x3b, 0x98, 0x51, 0x47, 0xdd, 0xf7, 0x62, 0x07, 0xfb, 0x11, 0x4f, 0x6a, 0xaa, - 0xfb, 0xb1, 0x80, 0x0a, 0xd7, 0x91, 0xf3, 0x43, 0x77, 0x6d, 0xaa, 0xfb, 0xd1, 0xdc, 0xf6, 0x9e, - 0xcb, 0x1c, 0xdb, 0x21, 0x55, 0xe3, 0x89, 0x3a, 0xdf, 0xf4, 0x99, 0x44, 0xd0, 0xdc, 0x24, 0x1d, - 0x37, 0xc9, 0xc8, 0x4d, 0x20, 0xc4, 0x85, 0xec, 0xd6, 0x31, 0x37, 0xd5, 0xfd, 0xc3, 0x5c, 0xd5, - 0x54, 0xf7, 0x13, 0x13, 0x26, 0xc7, 0xec, 0x38, 0x7a, 0x36, 0xe1, 0x2f, 0x25, 0x00, 0x7c, 0xc3, - 0x8a, 0x30, 0xf8, 0x76, 0x8c, 0x3b, 0x2f, 0x6c, 0x7b, 0x36, 0x3b, 0x77, 0x84, 0x65, 0x0b, 0xd2, - 0x3c, 0xfc, 0x5f, 0x30, 0x78, 0x83, 0xd2, 0x5d, 0xcf, 0x86, 0x93, 0x79, 0xd7, 0x2b, 0x69, 0xf9, - 0x8d, 0x4a, 0x10, 0xbb, 0x2f, 0xc2, 0x39, 0x2f, 0x38, 0x2b, 0xf0, 0x8d, 0x23, 0x7d, 0x8a, 0xf7, - 0x3f, 0x4d, 0xf8, 0x03, 0x09, 0x0c, 0xfa, 0xb1, 0xfc, 0x22, 0xaa, 0xe9, 0x32, 0xa0, 0x66, 0x17, - 0x85, 0x14, 0x6f, 0x65, 0x9e, 0x53, 0x0a, 0xae, 0x86, 0xdf, 0x4a, 0x60, 0x38, 0x4c, 0x2a, 0x70, - 0xe1, 0x48, 0x51, 0x12, 0xf9, 0xa7, 0xab, 0x24, 0x8f, 0x84, 0x24, 0x95, 0xcc, 0xbc, 0xba, 0xa7, - 0x3d, 0x5b, 0x12, 0x5c, 0x22, 0x79, 0x5f, 0x1a, 0x9e, 0x8b, 0xee, 0x2f, 0x6a, 0xbd, 0xa2, 0xc0, - 0x5f, 0x48, 0x60, 0x66, 0x0b, 0xb3, 0x72, 0x8d, 0x27, 0xdd, 0x56, 0x92, 0xda, 0xb0, 0x84, 0xe3, - 0x7d, 0x73, 0x57, 0xba, 0x20, 0xae, 0xb4, 0xa0, 0xbd, 0xa5, 0xee, 0x69, 0xf8, 0x79, 0x05, 0x94, - 0xe6, 0xe1, 0x4f, 0x24, 0x30, 0xb8, 0x46, 0xea, 0x84, 0x91, 0x76, 0x4f, 0xeb, 0xc6, 0xeb, 0xc1, - 0x41, 0xf1, 0xad, 0xd2, 0x39, 0x30, 0x01, 0x40, 0xd1, 0x36, 0xae, 0x93, 0x46, 0xd1, 0x63, 0x35, - 0xd8, 0x07, 0x4e, 0x82, 0xc1, 0x5b, 0xfc, 0x53, 0x83, 0xe3, 0xa0, 0xdf, 0x21, 0xb8, 0x02, 0x06, - 0x1e, 0x3b, 0x06, 0x23, 0xbe, 0xf3, 0xcd, 0x3f, 0xaf, 0xf3, 0xfd, 0x55, 0x02, 0xc3, 0x57, 0x09, - 0xbb, 0xed, 0x11, 0xa7, 0xf1, 0x4d, 0xba, 0xdf, 0xe7, 0xd2, 0x41, 0xf1, 0x6e, 0x76, 0x13, 0xcc, - 0x76, 0x1a, 0x1f, 0x5a, 0x0c, 0x7b, 0x1c, 0x1b, 0x3e, 0x92, 0x4a, 0x7d, 0xe2, 0x7e, 0x79, 0x78, - 0xfe, 0xa8, 0xfb, 0x7d, 0xca, 0x19, 0x84, 0xb7, 0xfc, 0x7c, 0x00, 0xa4, 0xaf, 0x12, 0x16, 0x76, - 0x0b, 0x3e, 0xf3, 0x4b, 0xbd, 0x97, 0xc8, 0x00, 0x3f, 0xf3, 0xe2, 0xa8, 0xd9, 0xcf, 0xfa, 0xc5, - 0x0d, 0xfe, 0x25, 0xc3, 0x7f, 0xca, 0x47, 0xdc, 0xa1, 0xd5, 0x82, 0x04, 0xc9, 0xb6, 0xd3, 0x28, - 0xd3, 0x4c, 0x9e, 0x25, 0x2a, 0x53, 0xd7, 0x59, 0xa4, 0xed, 0xcc, 0x7b, 0xd6, 0x61, 0xbc, 0x62, - 0x3c, 0x63, 0x5a, 0xe8, 0x7c, 0xda, 0x15, 0x37, 0x56, 0xe3, 0xba, 0x77, 0xf3, 0xed, 0x78, 0x87, - 0xdd, 0x7a, 0xc7, 0x8b, 0x74, 0x65, 0xd8, 0x5e, 0xc2, 0xba, 0xb4, 0xc8, 0x5d, 0x8e, 0xbb, 0xde, - 0xd3, 0x7d, 0x16, 0xd7, 0x58, 0x89, 0x85, 0xbf, 0x97, 0x41, 0xff, 0x7a, 0xb9, 0x46, 0x61, 0xb7, - 0x77, 0x5e, 0xd7, 0x2b, 0xe5, 0xfd, 0x61, 0x25, 0x4c, 0x0e, 0xcf, 0x0d, 0x99, 0xfd, 0x47, 0xea, - 0xa0, 0xf8, 0x9d, 0x14, 0x18, 0x23, 0xe5, 0x1a, 0x45, 0xae, 0xdf, 0x5a, 0x81, 0x61, 0xb1, 0x72, - 0xec, 0x32, 0x9c, 0xba, 0xe3, 0x99, 0x26, 0x76, 0x1a, 0x05, 0xb4, 0x1e, 0x6c, 0x65, 0xd2, 0x6b, - 0xc4, 0x2d, 0x3b, 0x86, 0xf8, 0x1d, 0x47, 0xec, 0x66, 0xd7, 0x00, 0x8c, 0x87, 0xad, 0x90, 0xb6, - 0xc7, 0x60, 0xfd, 0xe0, 0x32, 0x90, 0xdf, 0x5e, 0x58, 0x82, 0x17, 0xc1, 0x05, 0x9d, 0x30, 0xcf, - 0xb1, 0x48, 0x05, 0x3d, 0xae, 0x11, 0x0b, 0xb1, 0x1a, 0x41, 0x0e, 0x71, 0xa9, 0xe7, 0x94, 0x09, - 0x32, 0x5c, 0xc4, 0x88, 0x69, 0x53, 0x07, 0x3b, 0x46, 0xbd, 0x81, 0x3c, 0x0b, 0xef, 0x61, 0xa3, - 0x8e, 0x4b, 0x75, 0x92, 0xff, 0xe0, 0x5d, 0x20, 0x2f, 0x2f, 0x2c, 0xc3, 0x65, 0x30, 0xff, 0x0c, - 0x02, 0x15, 0x4a, 0x5c, 0x64, 0x51, 0x86, 0xc8, 0x13, 0xc3, 0x65, 0x79, 0x38, 0x08, 0xfa, 0x7f, - 0x9e, 0x92, 0x64, 0x11, 0x64, 0x0f, 0x8f, 0x4e, 0x13, 0x5c, 0x31, 0xea, 0xbe, 0x6f, 0x98, 0xfb, - 0xa7, 0xb2, 0xe9, 0x68, 0xc1, 0xe1, 0x67, 0x05, 0xff, 0x69, 0xe6, 0x3e, 0x84, 0x6d, 0x47, 0xf0, - 0xd7, 0x12, 0x18, 0x5b, 0x23, 0xc4, 0x16, 0xcf, 0xe1, 0x7c, 0xe3, 0xdb, 0xe9, 0x6c, 0x2e, 0x8b, - 0xbb, 0x5d, 0xca, 0x2e, 0x1f, 0x99, 0xe2, 0x63, 0xbf, 0xb4, 0xe5, 0xf9, 0x58, 0x22, 0xaa, 0x50, - 0x11, 0x80, 0x4d, 0xba, 0x62, 0x58, 0x15, 0xc3, 0xda, 0x71, 0xe1, 0xa9, 0xb6, 0x0c, 0xbe, 0x16, - 0xfc, 0x08, 0xd9, 0x35, 0xb9, 0xf7, 0xc1, 0x7b, 0x60, 0xe8, 0xae, 0x61, 0x12, 0xea, 0x31, 0xd8, - 0x05, 0xa8, 0x2b, 0xf2, 0x69, 0x21, 0xfe, 0x71, 0x38, 0x1d, 0xd5, 0x27, 0x0b, 0x88, 0xd5, 0x40, - 0x7a, 0xdd, 0x71, 0xa8, 0xc3, 0xcb, 0xf7, 0x1a, 0x61, 0xd8, 0xa8, 0xbb, 0x3d, 0x33, 0x38, 0x2b, - 0x18, 0xbc, 0x0a, 0x67, 0x63, 0x06, 0xe3, 0x54, 0x1f, 0x1b, 0xac, 0x56, 0x09, 0xa8, 0xfe, 0x50, - 0x02, 0xf0, 0x2a, 0x61, 0xc9, 0x19, 0xed, 0xe8, 0x1e, 0x21, 0x81, 0xd1, 0x55, 0x8c, 0x37, 0x85, - 0x18, 0x67, 0xb2, 0xa7, 0xa2, 0x62, 0x70, 0x09, 0x4a, 0xb4, 0xd2, 0x50, 0xf7, 0x79, 0x47, 0x20, - 0x66, 0x39, 0xf8, 0x3d, 0x09, 0x4c, 0x6d, 0x51, 0x97, 0x71, 0x8a, 0x02, 0x55, 0x08, 0xf2, 0x7c, - 0xe3, 0x60, 0x57, 0xee, 0xaa, 0xe0, 0x7e, 0x2e, 0x7b, 0x36, 0xca, 0xdd, 0xa6, 0x2e, 0xe3, 0x12, - 0x88, 0x1f, 0x38, 0x7c, 0x31, 0x42, 0xa7, 0xc8, 0xfc, 0x46, 0x3a, 0x28, 0x7e, 0x29, 0xc1, 0x6a, - 0x97, 0xe9, 0x0c, 0x55, 0x22, 0x49, 0x22, 0x97, 0x43, 0x8f, 0x6b, 0x46, 0xb9, 0x86, 0xdc, 0x1a, - 0xf5, 0xea, 0x15, 0x11, 0x7e, 0x25, 0x82, 0x3c, 0x97, 0x54, 0x90, 0x61, 0x21, 0xbb, 0x8e, 0xcb, - 0x04, 0xd1, 0xaa, 0x08, 0xd4, 0x0a, 0x2d, 0x7b, 0x26, 0xb1, 0xfc, 0x9f, 0x86, 0x51, 0x99, 0x9a, - 0x7c, 0x71, 0x26, 0x73, 0x1b, 0xcc, 0x75, 0xea, 0x0c, 0x78, 0x18, 0x85, 0xf3, 0x60, 0xaf, 0x6f, - 0x8a, 0x8f, 0xc0, 0xb1, 0x32, 0x36, 0x49, 0x7d, 0x15, 0xbb, 0x24, 0xa0, 0xc1, 0x87, 0x17, 0xa8, - 0x83, 0x01, 0xff, 0x57, 0x9a, 0x5e, 0x1d, 0xe9, 0x94, 0xd0, 0xe1, 0x34, 0x9c, 0x8a, 0x39, 0x12, - 0x3f, 0xd2, 0x3e, 0x01, 0xb3, 0x45, 0x8b, 0xb2, 0x1a, 0x71, 0x02, 0x4e, 0xdc, 0x78, 0x91, 0xa0, - 0x7a, 0x3f, 0x16, 0x62, 0xbd, 0x32, 0xee, 0x5b, 0xf9, 0x72, 0xe8, 0xa0, 0xf8, 0xab, 0x21, 0xf8, - 0x27, 0x09, 0x4c, 0x17, 0xd1, 0x8a, 0xff, 0x0a, 0x1c, 0x49, 0x01, 0x1f, 0x81, 0x63, 0x3b, 0xfa, - 0xd6, 0x6a, 0xee, 0xaa, 0x7f, 0x75, 0x64, 0x3b, 0xf4, 0x11, 0x29, 0xb3, 0x5e, 0x55, 0x96, 0x49, - 0x5b, 0xd4, 0x22, 0xff, 0x15, 0x5c, 0x8d, 0x43, 0xcf, 0x7f, 0x02, 0x8e, 0xad, 0xdc, 0x59, 0x43, - 0x4b, 0xb9, 0xd5, 0x3a, 0xf6, 0x5c, 0x82, 0x6e, 0x18, 0x65, 0x62, 0xb9, 0x04, 0x5e, 0xe9, 0x8d, - 0xb2, 0x5a, 0xaa, 0xd3, 0x92, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xbd, 0xb1, 0xb1, 0xba, 0xbe, 0x79, - 0x67, 0x3d, 0xcf, 0x9e, 0x30, 0x4d, 0x5e, 0xcc, 0x2f, 0xcc, 0xcb, 0x52, 0xaa, 0x5f, 0x4b, 0x63, - 0xdb, 0x7f, 0xbb, 0x36, 0xa8, 0xa5, 0x3e, 0x72, 0xa9, 0xa5, 0x9d, 0x88, 0xee, 0x3c, 0xc9, 0x55, - 0x29, 0xcd, 0x99, 0x86, 0x49, 0x0a, 0x6d, 0x90, 0x85, 0x2e, 0x90, 0xfa, 0x16, 0xaf, 0x18, 0x4b, - 0x70, 0x03, 0x5c, 0x6d, 0xaf, 0x18, 0x9e, 0x4b, 0x9c, 0xc3, 0x6a, 0x51, 0xc3, 0x7b, 0x04, 0xd9, - 0xc4, 0x31, 0x0d, 0xd7, 0xe5, 0x8e, 0xc9, 0x28, 0xc2, 0xe5, 0x32, 0x71, 0xdd, 0x58, 0x75, 0xc9, - 0xeb, 0x2f, 0x51, 0x83, 0x86, 0xf4, 0x6b, 0x40, 0x5e, 0x5e, 0xbc, 0x08, 0x8b, 0x60, 0x7c, 0xe3, - 0x4d, 0x13, 0x61, 0xc4, 0x08, 0xb6, 0x29, 0xcb, 0xc3, 0x05, 0x90, 0xcf, 0xf4, 0xf4, 0xcc, 0x77, - 0xff, 0x47, 0x29, 0x30, 0x09, 0x46, 0x56, 0xb0, 0x6b, 0x94, 0x45, 0xff, 0x9f, 0x1a, 0x96, 0xc0, - 0x2b, 0xb1, 0x89, 0x60, 0x72, 0x38, 0x95, 0x19, 0xf9, 0x28, 0x57, 0xdc, 0xda, 0xc8, 0x5d, 0x27, - 0x0d, 0x94, 0x02, 0x5f, 0x49, 0xad, 0x09, 0xe1, 0x0f, 0xd2, 0xb0, 0xac, 0xf4, 0x6b, 0xaf, 0x85, - 0x36, 0x8c, 0x18, 0x5c, 0xa5, 0xd8, 0x63, 0x35, 0x95, 0xff, 0xa1, 0x8e, 0xf1, 0x3f, 0xa4, 0x30, - 0xd7, 0x1d, 0x88, 0xd1, 0x5d, 0x62, 0xad, 0xfc, 0x3f, 0xc8, 0xf8, 0x03, 0x07, 0x84, 0x57, 0x1d, - 0x6c, 0x31, 0x17, 0xf1, 0x45, 0xa0, 0x3d, 0x30, 0x1b, 0x8c, 0x21, 0x70, 0x3a, 0x38, 0x14, 0xab, - 0xf0, 0x74, 0x15, 0x0c, 0xe0, 0x8a, 0x69, 0x58, 0xb0, 0x10, 0x43, 0xb5, 0x2a, 0x31, 0x30, 0x61, - 0x0c, 0x0e, 0x66, 0xb8, 0x8c, 0x57, 0xa2, 0x3d, 0x82, 0x0c, 0xab, 0x4a, 0x1d, 0x53, 0xd8, 0xbb, - 0x34, 0x07, 0xc6, 0xa3, 0xaa, 0xe8, 0x4b, 0x8e, 0x46, 0xa5, 0x73, 0x5d, 0x87, 0xa3, 0x24, 0xa8, - 0xb3, 0x01, 0x4e, 0xde, 0x3c, 0xcc, 0x3e, 0xd1, 0x98, 0xea, 0x35, 0x96, 0xee, 0x8f, 0xb4, 0x2c, - 0x57, 0x1a, 0x14, 0xf1, 0xbc, 0xf4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, 0x8b, 0x0d, 0x32, - 0x91, 0x24, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_ba3a130ee49bb615) +} + +var fileDescriptor_a_bit_of_everything_ba3a130ee49bb615 = []byte{ + // 3247 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0xdb, 0x73, 0xdb, 0xc6, + 0xd5, 0x17, 0x08, 0xea, 0xb6, 0xba, 0x51, 0x2b, 0x5f, 0x24, 0x5a, 0xb6, 0xd6, 0xb4, 0x93, 0xc0, + 0x8c, 0x49, 0x48, 0x90, 0xec, 0xc8, 0xcc, 0x24, 0xfe, 0x48, 0x5d, 0x6c, 0xc5, 0xb6, 0x2c, 0xc3, + 0x8e, 0xbf, 0x8c, 0x63, 0x47, 0x03, 0x92, 0x4b, 0x11, 0x16, 0x81, 0x45, 0x80, 0x85, 0x6c, 0x7e, + 0xfc, 0xf8, 0x7d, 0xe9, 0x65, 0xd2, 0x69, 0xf3, 0xd0, 0x19, 0xa5, 0x7d, 0xe8, 0x65, 0xfa, 0x17, + 0xf4, 0xb5, 0xd3, 0x87, 0xcc, 0xf4, 0x36, 0x93, 0xe9, 0x4c, 0xfb, 0x54, 0xb7, 0xd3, 0x7f, 0xa0, + 0x7d, 0xe8, 0x5f, 0xd0, 0x99, 0xbe, 0x74, 0x3a, 0x58, 0x00, 0x24, 0x00, 0x92, 0x96, 0x69, 0x67, + 0xf2, 0x22, 0x63, 0x77, 0xcf, 0x39, 0xbf, 0xb3, 0x67, 0xcf, 0x9e, 0xcb, 0xd2, 0x40, 0xc2, 0x4f, + 0x15, 0xcd, 0xa8, 0x61, 0x4b, 0x34, 0x4c, 0x42, 0x89, 0xe8, 0x0d, 0x8d, 0xa2, 0xa8, 0xec, 0x16, + 0x55, 0xba, 0x4b, 0x2a, 0xbb, 0xf8, 0x00, 0x9b, 0x75, 0x5a, 0x55, 0xf5, 0xbd, 0x2c, 0xa3, 0x81, + 0x0b, 0x7b, 0xa6, 0x51, 0xca, 0xee, 0x29, 0x14, 0x3f, 0x51, 0xea, 0x59, 0x5f, 0x40, 0xb6, 0xc5, + 0x9a, 0x9c, 0xdf, 0x23, 0x64, 0xaf, 0x86, 0x45, 0xc5, 0x50, 0x45, 0x45, 0xd7, 0x09, 0x55, 0xa8, + 0x4a, 0x74, 0xcb, 0x65, 0x4f, 0x22, 0x6f, 0x95, 0x8d, 0x8a, 0x76, 0x45, 0xac, 0xa8, 0xb8, 0x56, + 0xde, 0xd5, 0x14, 0x6b, 0xdf, 0xa3, 0x38, 0x15, 0xa5, 0xc0, 0x9a, 0x41, 0xeb, 0xde, 0xe2, 0x99, + 0xe8, 0x62, 0xd9, 0x36, 0x99, 0x7c, 0x6f, 0xfd, 0x8d, 0xc8, 0x8e, 0x0c, 0x85, 0x56, 0xb1, 0x6e, + 0x6b, 0xec, 0x63, 0xd7, 0xf9, 0xf2, 0xf5, 0x88, 0x10, 0x5a, 0x76, 0x51, 0xd4, 0xb0, 0x65, 0x29, + 0x7b, 0xd8, 0xa3, 0x38, 0xdb, 0x49, 0x21, 0x45, 0x48, 0x16, 0xa2, 0xda, 0x50, 0x55, 0xc3, 0x16, + 0x55, 0x34, 0xc3, 0x23, 0xb8, 0xc8, 0xfe, 0x29, 0x65, 0xf6, 0xb0, 0x9e, 0xb1, 0x9e, 0x28, 0x7b, + 0x7b, 0xd8, 0x14, 0x89, 0xc1, 0xec, 0xd1, 0x69, 0x9b, 0xd4, 0xa7, 0xa7, 0x40, 0x22, 0x5f, 0x50, + 0xe9, 0xed, 0xca, 0x46, 0xcb, 0xea, 0xf0, 0x11, 0x98, 0xb0, 0x54, 0x7d, 0xaf, 0x86, 0x77, 0x75, + 0x6c, 0x51, 0x5c, 0x9e, 0x9d, 0x43, 0x9c, 0x30, 0x26, 0xad, 0x66, 0x8f, 0x38, 0x87, 0x6c, 0x54, + 0x52, 0x76, 0x9b, 0xf1, 0xcb, 0xe3, 0xae, 0x38, 0x77, 0x04, 0xab, 0x20, 0x6e, 0xdb, 0x6a, 0x79, + 0x96, 0x43, 0x9c, 0x30, 0x5a, 0xb8, 0x77, 0x98, 0xbf, 0xf3, 0x09, 0xc7, 0x7d, 0x8f, 0xbb, 0xf1, + 0xa1, 0x92, 0xa9, 0xe4, 0x33, 0x9b, 0x8b, 0x99, 0x2b, 0x8f, 0x1a, 0xab, 0xcd, 0x4c, 0x70, 0xb8, + 0xd2, 0xcf, 0x70, 0x49, 0x6a, 0xca, 0x0c, 0x01, 0xee, 0x80, 0x21, 0x6f, 0x07, 0x31, 0xc4, 0xbf, + 0xd2, 0x0e, 0x3c, 0x39, 0xf0, 0x3d, 0x30, 0x56, 0xa9, 0x11, 0x85, 0xee, 0x1e, 0x28, 0x35, 0x1b, + 0xcf, 0xf2, 0x88, 0x13, 0x62, 0x85, 0x0b, 0x87, 0xf9, 0xd7, 0xa5, 0xe9, 0x4d, 0x67, 0x1e, 0xb1, + 0x79, 0xc4, 0x3c, 0x2c, 0xc7, 0x2f, 0x66, 0xa5, 0x67, 0x5c, 0x90, 0x41, 0x06, 0x6c, 0x70, 0xdf, + 0xf9, 0x86, 0x67, 0xc1, 0x78, 0x99, 0xd8, 0xc5, 0x1a, 0xf6, 0x84, 0xc5, 0x11, 0x27, 0x70, 0xf2, + 0x98, 0x3b, 0xe7, 0x92, 0x2c, 0x80, 0x31, 0x55, 0xa7, 0x97, 0x57, 0x3c, 0x8a, 0x41, 0xc4, 0x09, + 0xbc, 0x0c, 0xd8, 0x54, 0x4b, 0x86, 0x1d, 0xa4, 0x18, 0x42, 0x9c, 0x10, 0x97, 0xc7, 0xec, 0x00, + 0x89, 0x2b, 0x63, 0x59, 0xf2, 0x28, 0x86, 0x11, 0x27, 0x0c, 0x32, 0x19, 0xcb, 0x92, 0x4b, 0x70, + 0x0e, 0x4c, 0x54, 0xd4, 0xa7, 0xb8, 0xdc, 0x12, 0x32, 0x82, 0x38, 0x61, 0x48, 0x1e, 0xf7, 0x26, + 0xc3, 0x44, 0x2d, 0x39, 0xa3, 0x88, 0x13, 0x86, 0x3d, 0x22, 0x5f, 0xd2, 0x69, 0x00, 0x8a, 0x84, + 0xd4, 0x3c, 0x0a, 0x80, 0x38, 0x61, 0x44, 0x1e, 0x75, 0x66, 0x5a, 0xca, 0x5a, 0xd4, 0x54, 0xf5, + 0x3d, 0x8f, 0x60, 0xcc, 0x71, 0x00, 0x79, 0xcc, 0x9d, 0x6b, 0x29, 0x5b, 0xac, 0x53, 0x6c, 0x79, + 0x14, 0xa7, 0x11, 0x27, 0x8c, 0xcb, 0x80, 0x4d, 0x85, 0x36, 0xdc, 0x52, 0x63, 0x02, 0x71, 0xc2, + 0x84, 0xbb, 0x61, 0x5f, 0x8b, 0x1b, 0x00, 0x38, 0xb7, 0xce, 0x23, 0x98, 0x44, 0x9c, 0x30, 0x29, + 0x5d, 0x3c, 0xf2, 0xe4, 0xb7, 0x6d, 0x0d, 0x9b, 0x6a, 0x69, 0x43, 0xb7, 0x35, 0x79, 0xd4, 0xe1, + 0x77, 0x85, 0xed, 0x80, 0xa9, 0xd6, 0x3d, 0xf6, 0x24, 0x9e, 0x61, 0x12, 0x85, 0x1e, 0x12, 0xfd, + 0xeb, 0x9f, 0xdd, 0x51, 0x68, 0x95, 0x49, 0x9b, 0x30, 0xbc, 0x2f, 0x57, 0xa2, 0x05, 0x4e, 0xb8, + 0xce, 0xb4, 0x1b, 0x15, 0xbc, 0xc0, 0x04, 0xbf, 0x7b, 0x94, 0xe0, 0x5b, 0x6e, 0x40, 0xf0, 0xe5, + 0x7b, 0x2e, 0xda, 0x82, 0x9b, 0xd1, 0x43, 0x63, 0x17, 0xf4, 0x35, 0x30, 0x69, 0x85, 0xcf, 0x6f, + 0x0a, 0x71, 0xc2, 0x94, 0x3c, 0x61, 0x85, 0x0e, 0xb0, 0x45, 0xd6, 0xf2, 0x85, 0x04, 0xe2, 0x84, + 0x84, 0x4f, 0x16, 0xf0, 0x3a, 0x2b, 0x78, 0x08, 0xd3, 0x88, 0x13, 0xa6, 0xe5, 0x31, 0x2b, 0x70, + 0x08, 0x1e, 0x49, 0x4b, 0x0e, 0x44, 0x9c, 0x00, 0x5d, 0x12, 0x5f, 0x8a, 0x04, 0x8e, 0x9b, 0xd8, + 0xc0, 0x8a, 0x63, 0x8a, 0x90, 0x5f, 0xcc, 0x20, 0x5e, 0x18, 0x95, 0x67, 0xfc, 0xc5, 0xbb, 0x01, + 0xff, 0xb8, 0x02, 0xc6, 0x88, 0x8e, 0x9d, 0x24, 0xe1, 0x44, 0xe8, 0xd9, 0x63, 0x2c, 0x30, 0x9d, + 0xc8, 0xba, 0x41, 0x31, 0xeb, 0x07, 0xc5, 0xec, 0x86, 0xb3, 0x7a, 0x7d, 0x40, 0x06, 0x8c, 0x98, + 0x8d, 0xe0, 0x39, 0x30, 0xee, 0xb2, 0xba, 0x58, 0xb3, 0xc7, 0x1d, 0xef, 0xbb, 0x3e, 0x20, 0xbb, + 0x02, 0x5d, 0x10, 0xf8, 0x10, 0x8c, 0x6a, 0x8a, 0xe1, 0xe9, 0x71, 0x82, 0x05, 0x8d, 0xab, 0xfd, + 0x07, 0x8d, 0x5b, 0x8a, 0xc1, 0xd4, 0xdd, 0xd0, 0xa9, 0x59, 0x97, 0x47, 0x34, 0x6f, 0x08, 0x9f, + 0x82, 0x19, 0x4d, 0x31, 0x8c, 0xe8, 0x7e, 0x4f, 0x32, 0x9c, 0xeb, 0x2f, 0x85, 0x63, 0x84, 0xec, + 0xe3, 0x02, 0x4e, 0x6b, 0xd1, 0xf9, 0x00, 0xb2, 0xe7, 0x7b, 0x2e, 0xf2, 0xec, 0xab, 0x21, 0xbb, + 0x9e, 0xd7, 0x89, 0x1c, 0x98, 0x87, 0x39, 0x30, 0xab, 0x13, 0x7d, 0x8d, 0xe8, 0x07, 0x58, 0x77, + 0x32, 0x8f, 0x52, 0xdb, 0x56, 0x34, 0x37, 0xbc, 0xcd, 0x26, 0x59, 0x00, 0xe8, 0xb9, 0x0e, 0xd7, + 0xc0, 0x54, 0x2b, 0xbd, 0x79, 0x1a, 0x9f, 0x62, 0x27, 0x9e, 0xec, 0x38, 0xf1, 0x7b, 0x3e, 0x9d, + 0x3c, 0xd9, 0x62, 0x71, 0x85, 0x3c, 0x04, 0x2d, 0x4f, 0x0a, 0x5e, 0xb6, 0x79, 0xc4, 0xf7, 0x1d, + 0x17, 0xa6, 0x7d, 0x41, 0xed, 0x8b, 0xf5, 0x4b, 0x0e, 0x9c, 0xe9, 0x22, 0x7e, 0xb7, 0x9d, 0x6a, + 0x67, 0x51, 0xff, 0x48, 0x85, 0xf5, 0xc3, 0x7c, 0x3e, 0x7d, 0x4a, 0xf6, 0x04, 0x23, 0xdd, 0x5d, + 0x42, 0x0e, 0x00, 0xa2, 0x2a, 0xad, 0x61, 0x29, 0xd5, 0x7d, 0xb1, 0x8c, 0xad, 0x92, 0xa9, 0xb2, + 0x7c, 0x9f, 0x95, 0x4f, 0x75, 0xe8, 0x9b, 0x6f, 0xa9, 0x05, 0x7f, 0xc0, 0x81, 0xe3, 0xdd, 0x15, + 0x3e, 0xdb, 0x7f, 0xc8, 0x2c, 0x48, 0x87, 0x79, 0x31, 0x0d, 0xb7, 0x3b, 0xf5, 0x9c, 0xdb, 0xee, + 0xa9, 0xde, 0x0c, 0xee, 0xa2, 0xd6, 0x01, 0x48, 0x46, 0xa3, 0x42, 0x40, 0xb5, 0x94, 0x13, 0x1a, + 0x0a, 0xab, 0x87, 0xf9, 0x4b, 0xe9, 0xe3, 0x2d, 0x03, 0xb8, 0x64, 0x1e, 0xde, 0x7c, 0x74, 0x3a, + 0x04, 0x39, 0x1b, 0x0e, 0x2a, 0x01, 0xdc, 0x5f, 0x71, 0x01, 0x60, 0xef, 0x92, 0x04, 0x80, 0xcf, + 0xbd, 0x5a, 0x01, 0x51, 0xd8, 0x3c, 0xcc, 0xaf, 0xa5, 0xdb, 0xba, 0xb9, 0x00, 0x88, 0x14, 0x1f, + 0xe3, 0x12, 0xf5, 0x34, 0x3f, 0xd7, 0x63, 0xb5, 0xfb, 0x06, 0x5c, 0xb9, 0x81, 0x0d, 0xfc, 0x84, + 0x03, 0xd3, 0x9d, 0x7a, 0x9f, 0x7f, 0xb5, 0xd2, 0xad, 0xb0, 0x72, 0x98, 0x5f, 0x4a, 0xcf, 0x6c, + 0x77, 0x51, 0x37, 0xb9, 0xdd, 0x5b, 0xcb, 0x84, 0x1e, 0xd1, 0x2e, 0xf9, 0x5b, 0x0e, 0x0c, 0x79, + 0xf5, 0x1f, 0x04, 0x71, 0x5d, 0xd1, 0xb0, 0x5b, 0xff, 0xc9, 0xec, 0x1b, 0x9e, 0x00, 0x43, 0x8a, + 0x46, 0x6c, 0x9d, 0xce, 0xc6, 0x58, 0x42, 0xf7, 0x46, 0xf0, 0x0e, 0x88, 0x91, 0x7d, 0x56, 0x66, + 0x4d, 0x4a, 0xf9, 0x97, 0xdd, 0x44, 0x76, 0x1d, 0x63, 0x83, 0x5d, 0xe0, 0x18, 0xd9, 0x4f, 0x2d, + 0x80, 0x11, 0x7f, 0x0c, 0x47, 0xc1, 0xe0, 0x66, 0xfe, 0xe6, 0xdd, 0x8d, 0xc4, 0x00, 0x1c, 0x01, + 0xf1, 0x7b, 0xf2, 0xfb, 0x1b, 0x09, 0x2e, 0x77, 0xf2, 0x30, 0x7f, 0x4c, 0x82, 0x30, 0xd1, 0x40, + 0x29, 0xb2, 0x9f, 0xca, 0xa1, 0x94, 0x33, 0x9f, 0x42, 0xcd, 0xa4, 0x0a, 0x26, 0x42, 0x91, 0x1d, + 0x26, 0x00, 0xbf, 0x8f, 0xeb, 0xde, 0x46, 0x9c, 0x4f, 0x58, 0x00, 0x83, 0x6e, 0x78, 0x89, 0xbd, + 0x44, 0xd9, 0xe1, 0xb2, 0xe6, 0x62, 0xab, 0x5c, 0x72, 0x1d, 0x9c, 0xe8, 0x1e, 0xdc, 0xbb, 0x60, + 0x1e, 0x0b, 0x62, 0x8e, 0x06, 0xa5, 0xfc, 0x9f, 0x2f, 0x25, 0x1a, 0xa8, 0xbb, 0x48, 0xd9, 0x0e, + 0x4a, 0x79, 0x95, 0x52, 0xb9, 0x8d, 0x9f, 0xfb, 0x51, 0xec, 0x30, 0xff, 0xc3, 0x18, 0xf8, 0x36, + 0x97, 0x9e, 0xc9, 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0x76, 0x77, 0x27, 0x6d, 0x6d, 0xe9, 0xd4, + 0x0f, 0xfa, 0x75, 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x02, 0x78, 0x3d, 0x0f, 0xa2, 0x75, + 0x03, 0x23, 0x4a, 0x50, 0x89, 0x1c, 0x60, 0x13, 0x69, 0x8a, 0x5e, 0x47, 0x15, 0xac, 0x50, 0xdb, + 0xc4, 0x96, 0x23, 0x6b, 0xc7, 0x8f, 0xfe, 0xcf, 0x38, 0x56, 0xf0, 0x3f, 0xe3, 0x82, 0xe5, 0xf2, + 0x33, 0x2e, 0x54, 0x5f, 0xa7, 0xef, 0x83, 0xf3, 0x9b, 0xaa, 0x5e, 0x46, 0xc4, 0xa6, 0x48, 0x23, + 0x26, 0x46, 0x4a, 0xd1, 0xf9, 0xec, 0x68, 0x7f, 0xb2, 0x55, 0x4a, 0x0d, 0x2b, 0x27, 0x8a, 0x7b, + 0x2a, 0xad, 0xda, 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, 0x2e, 0x11, 0xab, 0x6e, 0x51, + 0xec, 0x0d, 0x3d, 0xdb, 0x48, 0x2b, 0x50, 0x6a, 0xa0, 0x94, 0x83, 0xef, 0x38, 0xcb, 0x62, 0xa9, + 0xb2, 0x7c, 0x79, 0x09, 0x2f, 0x65, 0x56, 0x8a, 0x2b, 0x2b, 0x99, 0x95, 0xd5, 0xe5, 0x72, 0x46, + 0x59, 0xba, 0x74, 0x25, 0x73, 0x69, 0xa5, 0xac, 0x14, 0xcb, 0x95, 0xb7, 0xf0, 0xea, 0xd2, 0x4a, + 0x0a, 0x35, 0x0b, 0x13, 0x7e, 0x25, 0xc3, 0x94, 0x4b, 0xfd, 0x7b, 0x04, 0xcc, 0x46, 0x35, 0xf1, + 0xe3, 0x01, 0xbc, 0x02, 0xe6, 0x58, 0xad, 0xd8, 0x8a, 0x4f, 0xc1, 0x1e, 0x84, 0x43, 0xbc, 0x10, + 0x93, 0x4f, 0x38, 0x04, 0x3e, 0xc3, 0x66, 0xbb, 0xc9, 0x78, 0x1b, 0x24, 0xc3, 0xac, 0xa1, 0x96, + 0xc3, 0x69, 0x8b, 0x38, 0xf9, 0x64, 0x90, 0x77, 0x3d, 0xd0, 0x7e, 0x74, 0xe0, 0x06, 0x2b, 0x3a, + 0x1e, 0xf1, 0x02, 0x1f, 0xc6, 0xdd, 0x6a, 0x17, 0x77, 0x1d, 0xb8, 0xa1, 0x36, 0x25, 0x8e, 0x78, + 0x21, 0x1e, 0xc6, 0x7d, 0x3f, 0x50, 0x19, 0x76, 0xc3, 0x6d, 0x15, 0x9b, 0x83, 0x88, 0x17, 0x06, + 0x3b, 0x70, 0xfd, 0xba, 0xf3, 0x1d, 0x70, 0x2a, 0x62, 0xaa, 0x50, 0x39, 0x3b, 0x84, 0x78, 0x61, + 0x48, 0x9e, 0x0d, 0x19, 0x2b, 0x58, 0xd9, 0x76, 0x67, 0x0f, 0x34, 0x4f, 0xbc, 0x30, 0xdc, 0x85, + 0xdd, 0x47, 0x7f, 0x0b, 0xcc, 0x86, 0xd9, 0x03, 0xed, 0xd0, 0x08, 0xe2, 0x85, 0x11, 0xf9, 0x78, + 0x90, 0xb7, 0xd0, 0x6a, 0x8d, 0x3a, 0xcc, 0x15, 0x2a, 0x10, 0x47, 0x59, 0x41, 0x1c, 0x32, 0x57, + 0xb8, 0x28, 0x8e, 0x98, 0x2b, 0xd8, 0x42, 0x01, 0xc4, 0x0b, 0xe3, 0x61, 0x73, 0x15, 0xda, 0xed, + 0x54, 0xd7, 0x63, 0x6a, 0x6d, 0x77, 0x0c, 0xf1, 0xc2, 0x44, 0xe7, 0x31, 0xf9, 0xbb, 0xc5, 0xd1, + 0xdd, 0x06, 0xca, 0xab, 0xf1, 0x97, 0x28, 0xaf, 0x42, 0xb6, 0x69, 0x97, 0x58, 0x57, 0xc1, 0x7c, + 0xc4, 0x36, 0xe1, 0x43, 0x99, 0x40, 0xbc, 0x30, 0x25, 0xcf, 0x85, 0xac, 0x13, 0xea, 0x6a, 0x7a, + 0x08, 0x68, 0x39, 0xc5, 0x24, 0xe2, 0x85, 0x44, 0x37, 0x01, 0x3d, 0x9d, 0x39, 0xd4, 0xfd, 0x4c, + 0x21, 0x5e, 0x98, 0x8e, 0x9c, 0x4e, 0xc0, 0x4a, 0x5d, 0x99, 0x03, 0xfd, 0x15, 0x2f, 0xc0, 0x4e, + 0x66, 0x0f, 0x39, 0x57, 0x3d, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x06, 0x4a, 0xf5, 0x72, 0xac, 0x54, + 0x0e, 0x7d, 0x48, 0x4d, 0x1b, 0x5f, 0x44, 0xee, 0xdf, 0x8a, 0x52, 0xb3, 0xbc, 0xc1, 0xa3, 0x8b, + 0x51, 0xb6, 0x80, 0xde, 0x0e, 0xdf, 0xd2, 0x45, 0x24, 0x5d, 0x44, 0xcb, 0x8f, 0x50, 0x33, 0x95, + 0x04, 0xf1, 0x02, 0x29, 0xd7, 0xbb, 0x65, 0xe7, 0xd4, 0x43, 0x30, 0xe5, 0x35, 0x9d, 0xff, 0xad, + 0xd2, 0x2a, 0x23, 0x9b, 0x04, 0x31, 0xff, 0x09, 0x47, 0x8e, 0xa9, 0x4e, 0x88, 0x8a, 0x97, 0x15, + 0xaa, 0x78, 0xd9, 0xe3, 0xb5, 0x23, 0xcf, 0xdd, 0x11, 0x22, 0x33, 0x96, 0xd4, 0xe7, 0x1c, 0x98, + 0x7a, 0xdf, 0x28, 0x2b, 0x14, 0xdf, 0x97, 0x64, 0xfc, 0xb1, 0x8d, 0x2d, 0x0a, 0xd7, 0x00, 0xaf, + 0x14, 0x5d, 0x25, 0xc6, 0xa4, 0xa5, 0xbe, 0x73, 0x91, 0xec, 0x70, 0xc3, 0xb7, 0xc1, 0x98, 0xcd, + 0xe4, 0xb2, 0xb7, 0x3e, 0x4f, 0xb5, 0xce, 0xd6, 0x61, 0x53, 0xc5, 0xb5, 0xf2, 0x2d, 0xc5, 0xda, + 0x97, 0x81, 0x4b, 0xee, 0x7c, 0xa7, 0x11, 0x18, 0x0b, 0xf8, 0xa6, 0x53, 0x1e, 0x3c, 0xd8, 0x90, + 0x6f, 0x27, 0x06, 0xe0, 0x30, 0xe0, 0x6f, 0x6f, 0x6f, 0x24, 0x38, 0xe9, 0xcb, 0xd3, 0xe0, 0x64, + 0x14, 0xf8, 0x2e, 0x36, 0x0f, 0xd4, 0x12, 0x86, 0xbf, 0x8b, 0x83, 0xa1, 0x35, 0xd3, 0xb1, 0x39, + 0xec, 0x5f, 0xfb, 0x64, 0xff, 0x2c, 0xa9, 0x3f, 0xf1, 0xdf, 0xfc, 0xf3, 0xdf, 0x3f, 0x8f, 0xfd, + 0x81, 0x4f, 0xfd, 0x9e, 0x17, 0x0f, 0x96, 0xfc, 0x77, 0xd5, 0x6e, 0xaf, 0xaa, 0x62, 0x23, 0x90, + 0x3e, 0x9a, 0x62, 0x23, 0x98, 0x11, 0x9a, 0x62, 0x23, 0xe0, 0x9d, 0x4d, 0xd1, 0xc2, 0x86, 0x62, + 0x2a, 0x94, 0x98, 0x62, 0xc3, 0x0e, 0x2d, 0x34, 0x02, 0x9e, 0xd4, 0x14, 0x1b, 0xa1, 0x0b, 0xe5, + 0x8f, 0x03, 0xeb, 0x6d, 0x77, 0x6d, 0x8a, 0x8d, 0x60, 0x6c, 0x7b, 0xc7, 0xa2, 0xa6, 0x61, 0xe2, + 0x8a, 0xfa, 0x54, 0x4c, 0x37, 0x5d, 0x90, 0x00, 0x9b, 0x15, 0x95, 0x63, 0x45, 0x81, 0xac, 0x08, + 0x43, 0x58, 0xc9, 0x5e, 0x9d, 0x65, 0x53, 0x6c, 0xb4, 0x63, 0x55, 0x53, 0x6c, 0x44, 0x5e, 0x62, + 0x1c, 0xce, 0xae, 0x4f, 0x34, 0x4d, 0xb1, 0xd1, 0x25, 0xd8, 0x75, 0x9f, 0x0d, 0x54, 0xe1, 0x21, + 0xb8, 0xf0, 0x7c, 0xef, 0x5e, 0xa7, 0x09, 0x7f, 0xc6, 0x01, 0xe0, 0x3a, 0x11, 0xbb, 0x72, 0x5f, + 0x8f, 0x23, 0xa5, 0x99, 0x1f, 0x9d, 0x4f, 0x2d, 0x1c, 0xe1, 0x45, 0x39, 0x2e, 0x0d, 0xff, 0x17, + 0x0c, 0xdd, 0x24, 0x64, 0xdf, 0x36, 0xe0, 0x54, 0xd6, 0xb2, 0x8b, 0x52, 0x76, 0xab, 0xec, 0xc5, + 0x89, 0x97, 0x41, 0xce, 0x32, 0x64, 0x01, 0xbe, 0x7e, 0xa4, 0xff, 0x3a, 0xb5, 0x56, 0x13, 0x7e, + 0xca, 0x81, 0x21, 0x37, 0x6e, 0xbc, 0x8c, 0x69, 0x7a, 0x3c, 0x1a, 0xa5, 0x96, 0x98, 0x16, 0x6f, + 0x26, 0x5f, 0x50, 0x0b, 0xc7, 0x0c, 0xbf, 0xe1, 0xc0, 0x88, 0x1f, 0xc0, 0xe0, 0xe2, 0x91, 0xaa, + 0x44, 0x62, 0x5d, 0x4f, 0x4d, 0x1e, 0x33, 0x4d, 0xca, 0xc9, 0xb4, 0x78, 0x20, 0x3d, 0x5f, 0x13, + 0xa5, 0x88, 0xb3, 0xae, 0x36, 0x4e, 0xdc, 0x7b, 0xb0, 0x24, 0xf5, 0xcb, 0x02, 0x7f, 0xca, 0x81, + 0xd9, 0x1d, 0x85, 0x96, 0xaa, 0x4e, 0x80, 0x6f, 0x05, 0xc4, 0x2d, 0x9d, 0x39, 0xde, 0x57, 0xb7, + 0xa5, 0xcb, 0x6c, 0x4b, 0x8b, 0xd2, 0x9b, 0xe2, 0x81, 0xa4, 0xbc, 0xa8, 0x82, 0x5c, 0x1a, 0x7e, + 0x9f, 0x03, 0x43, 0xeb, 0xb8, 0x86, 0x29, 0xee, 0xf4, 0xb4, 0x5e, 0x58, 0x0f, 0x0f, 0xf3, 0x6f, + 0x16, 0x2f, 0x80, 0x49, 0x00, 0xf2, 0x86, 0x7a, 0x03, 0xd7, 0xf3, 0x36, 0xad, 0xc2, 0x01, 0x70, + 0x12, 0x0c, 0xdd, 0x76, 0x3e, 0x25, 0x38, 0x01, 0xe2, 0x26, 0x56, 0xca, 0x60, 0xf0, 0x89, 0xa9, + 0x52, 0xec, 0x3a, 0x5f, 0xfa, 0x45, 0x9d, 0xef, 0x6f, 0x1c, 0x18, 0xb9, 0x86, 0xe9, 0x1d, 0x1b, + 0x9b, 0xf5, 0xaf, 0xd2, 0xfd, 0x3e, 0xe3, 0x0e, 0xf3, 0xf7, 0x52, 0xdb, 0x60, 0xbe, 0x5b, 0xab, + 0xd2, 0x02, 0xec, 0xb3, 0x45, 0xf9, 0x80, 0x2b, 0x0e, 0xb0, 0xfd, 0x65, 0xe1, 0xc5, 0xa3, 0xf6, + 0xf7, 0xb1, 0x03, 0xe0, 0xef, 0xf2, 0xb3, 0x41, 0x90, 0xb8, 0x86, 0xa9, 0x5f, 0x99, 0xb8, 0xe0, + 0x57, 0xfa, 0x4f, 0xc7, 0x1e, 0x7f, 0xf2, 0xe5, 0x59, 0x53, 0x9f, 0xc4, 0xd9, 0x0e, 0xfe, 0xc5, + 0xc3, 0x7f, 0x1e, 0x95, 0xe0, 0x5a, 0xe5, 0x8e, 0x17, 0xd8, 0xbb, 0xb5, 0x4d, 0xcd, 0xe8, 0x5a, + 0x24, 0x0b, 0xf6, 0xec, 0x7b, 0x3a, 0xd6, 0xec, 0xe7, 0x2d, 0x86, 0xb3, 0xd3, 0x73, 0x3a, 0x93, + 0xee, 0xab, 0x3d, 0x79, 0x43, 0xf9, 0xb4, 0x77, 0xe7, 0xd0, 0xc9, 0xd7, 0xee, 0x0c, 0xba, 0x6e, + 0xa4, 0x27, 0x60, 0x67, 0xba, 0xec, 0x51, 0x8e, 0xf7, 0x58, 0xee, 0xb9, 0x4f, 0xeb, 0x79, 0xa8, + 0xa1, 0x74, 0x0e, 0xbf, 0xe4, 0x41, 0x7c, 0xa3, 0x54, 0x25, 0xb0, 0xd7, 0x6f, 0x2f, 0x96, 0x5d, + 0xcc, 0xba, 0x8d, 0x91, 0x1f, 0x1c, 0x5e, 0x98, 0x32, 0xf5, 0x8f, 0xd8, 0x61, 0xfe, 0x1b, 0x31, + 0x30, 0x8e, 0x4b, 0x55, 0x82, 0x2c, 0xb7, 0x8c, 0x03, 0x23, 0x6c, 0x64, 0x1a, 0x25, 0x38, 0x7d, + 0xd7, 0xd6, 0x34, 0xc5, 0xac, 0xe7, 0xd0, 0x86, 0x37, 0x95, 0x4c, 0xac, 0xb7, 0x9f, 0xbc, 0xd8, + 0x6c, 0x6a, 0x1d, 0xc0, 0xf0, 0xb5, 0x65, 0xda, 0xf6, 0x79, 0x59, 0xdf, 0xbb, 0x0a, 0xf8, 0x4b, + 0x8b, 0xcb, 0x70, 0x15, 0x5c, 0x96, 0x31, 0xb5, 0x4d, 0x1d, 0x97, 0xd1, 0x93, 0x2a, 0xd6, 0x11, + 0xad, 0x62, 0x64, 0x62, 0x8b, 0xd8, 0x66, 0x09, 0x23, 0xd5, 0x42, 0x14, 0x6b, 0x06, 0x31, 0x15, + 0x53, 0xad, 0xd5, 0x91, 0xad, 0x2b, 0x07, 0x8a, 0x5a, 0x53, 0x8a, 0x35, 0x9c, 0x7d, 0xef, 0x6d, + 0xc0, 0xaf, 0x2c, 0xae, 0xc0, 0x15, 0x90, 0x7e, 0x8e, 0x80, 0x32, 0xc1, 0x16, 0xd2, 0x09, 0x45, + 0xf8, 0xa9, 0x6a, 0xd1, 0x2c, 0x1c, 0x02, 0xf1, 0x1f, 0xc7, 0x38, 0xb7, 0x8a, 0x7c, 0x74, 0x74, + 0x98, 0x70, 0x0c, 0x23, 0x36, 0xdc, 0x83, 0x79, 0x30, 0x97, 0x4a, 0x04, 0x13, 0x8e, 0xb3, 0x96, + 0x73, 0x9f, 0x81, 0x1e, 0x40, 0xd8, 0xb1, 0x04, 0x7f, 0xc1, 0x81, 0xf1, 0x75, 0x8c, 0x0d, 0xf6, + 0x13, 0x95, 0x33, 0xf1, 0xf5, 0x54, 0x36, 0x57, 0xd9, 0xde, 0xae, 0xa4, 0x56, 0x8e, 0x0c, 0xf1, + 0xa1, 0x5f, 0xbf, 0xb3, 0x4e, 0x0b, 0xc4, 0xb2, 0x50, 0x1e, 0x80, 0x6d, 0x52, 0x50, 0xf5, 0xb2, + 0xaa, 0xef, 0x59, 0x70, 0xae, 0x23, 0x82, 0xaf, 0x7b, 0xff, 0x31, 0xa0, 0x67, 0x70, 0x1f, 0x80, + 0xf7, 0xc1, 0xf0, 0x3d, 0x55, 0xc3, 0xc4, 0xa6, 0xb0, 0x07, 0x51, 0x4f, 0xe6, 0x53, 0x4c, 0xfd, + 0xe3, 0x70, 0x26, 0x68, 0x4f, 0xea, 0x09, 0xab, 0x82, 0xc4, 0x86, 0x69, 0x12, 0xd3, 0x49, 0xdf, + 0xeb, 0x98, 0x2a, 0x6a, 0xcd, 0xea, 0x1b, 0xe0, 0x3c, 0x03, 0x38, 0x03, 0xe7, 0x43, 0x07, 0xe6, + 0x48, 0x7d, 0xa2, 0xd2, 0x6a, 0xd9, 0x93, 0xfa, 0x1d, 0x0e, 0xc0, 0x6b, 0x98, 0x46, 0xfb, 0xc1, + 0xa3, 0x6b, 0x84, 0x08, 0x47, 0x4f, 0x35, 0xde, 0x60, 0x6a, 0x9c, 0x4d, 0xcd, 0x05, 0xd5, 0x70, + 0x34, 0x28, 0x92, 0x72, 0x5d, 0x6c, 0x38, 0x15, 0x01, 0xeb, 0x1b, 0xe1, 0xb7, 0x38, 0x30, 0xbd, + 0x43, 0x2c, 0xea, 0x48, 0x64, 0xac, 0x4c, 0x91, 0x17, 0x6b, 0x3d, 0x7b, 0xa2, 0x8b, 0x0c, 0xfd, + 0x42, 0xea, 0x7c, 0x10, 0xdd, 0x20, 0x16, 0x75, 0x34, 0x60, 0x3f, 0x3a, 0xba, 0x6a, 0xf8, 0x4e, + 0x91, 0xfc, 0x35, 0x77, 0x98, 0xff, 0x82, 0x83, 0x95, 0x1e, 0x9d, 0x60, 0xf0, 0x5d, 0x1c, 0x65, + 0x32, 0xe8, 0x49, 0x55, 0x2d, 0x55, 0x91, 0x55, 0x25, 0x76, 0xad, 0xcc, 0xae, 0x5f, 0x11, 0x23, + 0xdb, 0xc2, 0x65, 0xa4, 0xea, 0xc8, 0xa8, 0x29, 0x25, 0x8c, 0x48, 0x85, 0x5d, 0xd4, 0x32, 0x29, + 0xd9, 0x1a, 0xd6, 0xdd, 0x5e, 0x00, 0x95, 0x88, 0xe6, 0x0c, 0xce, 0x26, 0xef, 0x80, 0x85, 0x6e, + 0x95, 0x81, 0x73, 0x8d, 0xfc, 0xde, 0xb3, 0xdf, 0xf7, 0xcb, 0xc7, 0xe0, 0x58, 0x49, 0xd1, 0x70, + 0x6d, 0x4d, 0xb1, 0xb0, 0x27, 0xc3, 0x69, 0x94, 0xa0, 0x0c, 0x06, 0xdd, 0x5f, 0x4e, 0xfb, 0x75, + 0xa4, 0x39, 0x66, 0xc3, 0x19, 0x38, 0x1d, 0x72, 0x24, 0x67, 0x49, 0xfa, 0x08, 0xcc, 0xe7, 0x75, + 0x42, 0xab, 0xd8, 0xf4, 0x90, 0x9c, 0xc3, 0x0b, 0x5c, 0xaa, 0x77, 0x43, 0x57, 0xac, 0x5f, 0xe0, + 0x81, 0xc2, 0x17, 0xc3, 0x87, 0xf9, 0x9f, 0x0f, 0xc3, 0xbf, 0x70, 0x60, 0x26, 0x8f, 0x0a, 0xee, + 0x8b, 0x73, 0x20, 0x04, 0x7c, 0x00, 0x8e, 0xed, 0xc9, 0x3b, 0x6b, 0x99, 0x6b, 0xee, 0xd6, 0x91, + 0x61, 0x92, 0xc7, 0xb8, 0x44, 0xfb, 0x35, 0x59, 0x32, 0xa1, 0x13, 0x1d, 0xff, 0x97, 0xb7, 0x35, + 0x87, 0x3a, 0xfd, 0x11, 0x38, 0x56, 0xb8, 0xbb, 0x8e, 0x96, 0x33, 0x6b, 0x35, 0xc5, 0xb6, 0x30, + 0xba, 0xa9, 0x96, 0xb0, 0x6e, 0x61, 0xb8, 0xd9, 0x9f, 0x64, 0xb1, 0x58, 0x23, 0x45, 0x51, 0x53, + 0x2c, 0x8a, 0x4d, 0xf1, 0xe6, 0xd6, 0xda, 0xc6, 0xf6, 0xdd, 0x8d, 0x2c, 0x7d, 0x4a, 0x25, 0x7e, + 0x29, 0xbb, 0x98, 0xe6, 0xb9, 0x58, 0x5c, 0x4a, 0x28, 0x86, 0xfb, 0x4e, 0xae, 0x12, 0x5d, 0x7c, + 0x6c, 0x11, 0x5d, 0x3a, 0x11, 0x9c, 0x79, 0x9a, 0xa9, 0x10, 0x92, 0xd1, 0x54, 0x0d, 0xe7, 0x3a, + 0x28, 0x73, 0x3d, 0x28, 0xe5, 0x1d, 0x27, 0x63, 0x2c, 0xc3, 0x2d, 0x70, 0xad, 0x33, 0x63, 0xd8, + 0x16, 0x36, 0xdb, 0xd9, 0xa2, 0xaa, 0x1c, 0x60, 0x64, 0x60, 0x53, 0x53, 0x2d, 0xcb, 0x71, 0x4c, + 0x4a, 0x90, 0x52, 0x2a, 0x61, 0xcb, 0x0a, 0x65, 0x97, 0xac, 0xfc, 0x0a, 0x39, 0x68, 0x58, 0xbe, + 0x0e, 0xf8, 0x95, 0xa5, 0x55, 0x98, 0x07, 0x13, 0x5b, 0x6f, 0x68, 0x48, 0x41, 0x14, 0x2b, 0x06, + 0xa1, 0x59, 0xb8, 0x08, 0xb2, 0xc9, 0xbe, 0x9e, 0x14, 0x1f, 0x7c, 0x37, 0x06, 0xa6, 0xc0, 0x68, + 0x41, 0xb1, 0xd4, 0x12, 0xab, 0xff, 0x63, 0x23, 0x1c, 0x38, 0x1d, 0xea, 0x08, 0xa6, 0x46, 0x62, + 0xc9, 0xd1, 0x0f, 0x32, 0xf9, 0x9d, 0xad, 0xcc, 0x0d, 0x5c, 0x47, 0x31, 0xf0, 0x57, 0xae, 0xd5, + 0x21, 0xfc, 0x91, 0x1b, 0xe1, 0x85, 0xb8, 0x74, 0xce, 0x3f, 0xc3, 0xc0, 0x81, 0x8b, 0x44, 0xb1, + 0x69, 0x55, 0x74, 0xfe, 0x10, 0x53, 0xfd, 0x1f, 0x9c, 0x5b, 0xe8, 0x4d, 0x44, 0xc9, 0x3e, 0xd6, + 0x0b, 0xff, 0x0f, 0x92, 0x6e, 0xc3, 0x01, 0xe1, 0x35, 0x53, 0xd1, 0xa9, 0x85, 0x9c, 0x81, 0x67, + 0x3d, 0x30, 0xef, 0xb5, 0x21, 0x70, 0xc6, 0x5b, 0x64, 0x23, 0x7f, 0x75, 0x0d, 0x0c, 0x2a, 0x65, + 0x4d, 0xd5, 0x61, 0x2e, 0xc4, 0xaa, 0x97, 0x43, 0x64, 0xec, 0x30, 0x1c, 0x32, 0xd5, 0xa2, 0x4e, + 0x26, 0x3a, 0xc0, 0x48, 0xd5, 0x2b, 0xc4, 0xd4, 0xd8, 0x79, 0x17, 0x17, 0xc0, 0x44, 0xd0, 0x14, + 0x03, 0xd1, 0xd6, 0xa8, 0x78, 0xa1, 0x67, 0x73, 0x14, 0x25, 0x35, 0xb7, 0xc0, 0xc9, 0x5b, 0xed, + 0xe8, 0x13, 0xbc, 0x53, 0xfd, 0xde, 0xa5, 0x07, 0xa3, 0xad, 0x93, 0x2b, 0x0e, 0xb1, 0xfb, 0xbc, + 0xfc, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x13, 0x85, 0x60, 0x25, 0x28, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 2d9070eef8d..b7e7c012e57 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -33,7 +33,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "repeated_enum_value": 18, "repeated_enum_value_annotation": 19, "enum_value_annotation": 20, "repeated_string_annotation": 21}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -43,6 +43,7 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run var ( val string e int32 + es []int32 ok bool err error _ = err @@ -252,6 +253,64 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e) + val, ok = pathParams["repeated_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_enum_value") + } + + es, err = runtime.EnumSlice(val, ",", NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_enum_value", err) + } + + s := make([]NumericEnum, len(es)) + for i, v := range es { + s[i] = NumericEnum(v) + } + protoReq.RepeatedEnumValue = s + + val, ok = pathParams["repeated_enum_value_annotation"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_enum_value_annotation") + } + + es, err = runtime.EnumSlice(val, ",", NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_enum_value_annotation", err) + } + + s := make([]NumericEnum, len(es)) + for i, v := range es { + s[i] = NumericEnum(v) + } + protoReq.RepeatedEnumValueAnnotation = s + + val, ok = pathParams["enum_value_annotation"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value_annotation") + } + + e, err = runtime.Enum(val, NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "enum_value_annotation", err) + } + + protoReq.EnumValueAnnotation = NumericEnum(e) + + val, ok = pathParams["repeated_string_annotation"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_string_annotation") + } + + protoReq.RepeatedStringAnnotation, err = runtime.StringSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_string_annotation", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1329,7 +1388,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24, 1, 0, 4, 1, 5, 25, 1, 0, 4, 1, 5, 26}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "repeated_enum_value", "repeated_enum_value_annotation", "enum_value_annotation", "repeated_string_annotation"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 9533cad3e5e..82af8e0414f 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -202,6 +202,21 @@ message ABitOfEverything { // repeated enum value. it is comma-separated in query repeated NumericEnum repeated_enum_value = 28; + + // repeated numeric enum comment (This comment is overridden by the field annotation) + repeated NumericEnum repeated_enum_value_annotation = 32 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated numeric enum title", description: "Repeated numeric enum description."}]; + + // numeric enum comment (This comment is overridden by the field annotation) + NumericEnum enum_value_annotation = 33 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Numeric enum title", description: "Numeric enum description."}]; + + // repeated string comment (This comment is overridden by the field annotation) + repeated string repeated_string_annotation = 34 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated string title", description: "Repeated string description."}]; + + // repeated nested object comment (This comment is overridden by the field annotation) + repeated Nested repeated_nested_annotation = 35 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated nested object title", description: "Repeated nested object description."}]; + + // nested object comments (This comment is overridden by the field annotation) + Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Nested object title", description: "Nested object description."}]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality @@ -270,7 +285,7 @@ service ABitOfEverythingService { // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 3e246b63c78..48a97db32a9 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -362,6 +362,68 @@ "ONE" ] } + }, + { + "name": "repeated_enum_value_annotation", + "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + } + }, + { + "name": "enum_value_annotation", + "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeated_string_annotation", + "description": "Repeated string title. Repeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + } + }, + { + "name": "nested_annotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nested_annotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nested_annotation.ok", + "description": " - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" } ], "tags": [ @@ -375,7 +437,7 @@ } } }, - "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}": { + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -539,6 +601,61 @@ "GHI", "JKL" ] + }, + { + "name": "repeated_enum_value", + "description": "repeated enum value. it is comma-separated in query", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "repeated_enum_value_annotation", + "description": "Repeated numeric enum description.", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "csv", + "minItems": 1 + }, + { + "name": "enum_value_annotation", + "description": "Numeric enum description.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + { + "name": "repeated_string_annotation", + "description": "Repeated string description.", + "in": "path", + "required": true, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "minItems": 1 } ], "tags": [ @@ -1570,6 +1687,40 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "title": "repeated enum value. it is comma-separated in query" + }, + "repeated_enum_value_annotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enum_value_annotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeated_string_annotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeated_nested_annotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nested_annotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index f1687bccf64..bc9feb32160 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "Echo Service", + "title": "examples/proto/examplepb/echo_service.proto", "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 7739b3ea13d..581ae1fd2f1 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -260,6 +260,40 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "title": "repeated enum value. it is comma-separated in query" + }, + "repeated_enum_value_annotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enum_value_annotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeated_string_annotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeated_nested_annotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nested_annotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index fcc98b1f51f..e1c9eca76a0 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -408,31 +408,35 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s } } + ret := swaggerSchemaObject{} + switch aggregate { case array: - return swaggerSchemaObject{ + ret = swaggerSchemaObject{ schemaCore: schemaCore{ Type: "array", Items: (*swaggerItemsObject)(&core), }, } case object: - return swaggerSchemaObject{ + ret = swaggerSchemaObject{ schemaCore: schemaCore{ Type: "object", }, AdditionalProperties: &swaggerSchemaObject{Properties: props, schemaCore: core}, } default: - ret := swaggerSchemaObject{ + ret = swaggerSchemaObject{ schemaCore: core, Properties: props, } - if j, err := extractJSONSchemaFromFieldDescriptor(fd); err == nil { - updateSwaggerObjectFromJSONSchema(&ret, j) - } - return ret } + + if j, err := extractJSONSchemaFromFieldDescriptor(fd); err == nil { + updateSwaggerObjectFromJSONSchema(&ret, j) + } + + return ret } // primitiveSchema returns a pair of "Type" and "Format" in JSON Schema for @@ -680,6 +684,9 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re return err } enumNames = listEnumNames(enum) + schema := schemaOfField(parameter.Target, reg, customRefs) + desc = schema.Description + defaultValue = schema.Default default: var ok bool paramType, paramFormat, ok = primitiveSchema(pt) @@ -1214,26 +1221,32 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string) er paragraphs := strings.Split(comment, "\n\n") - // If there is a summary (or summary-equivalent), use the first + // If there is a summary (or summary-equivalent) and its empty, use the first // paragraph as summary, and the rest as description. if summaryValue.CanSet() { summary := strings.TrimSpace(paragraphs[0]) description := strings.TrimSpace(strings.Join(paragraphs[1:], "\n\n")) if !usingTitle || (len(summary) > 0 && summary[len(summary)-1] != '.') { - summaryValue.Set(reflect.ValueOf(summary)) + // overrides the schema value only if it's empty + if summaryValue.Len() == 0 { + summaryValue.Set(reflect.ValueOf(summary)) + } if len(description) > 0 { if !descriptionValue.CanSet() { return fmt.Errorf("Encountered object type with a summary, but no description") } - descriptionValue.Set(reflect.ValueOf(description)) + // overrides the schema value only if it's empty + if descriptionValue.Len() == 0 { + descriptionValue.Set(reflect.ValueOf(description)) + } } return nil } } // There was no summary field on the swaggerObject. Try to apply the - // whole comment into description. - if descriptionValue.CanSet() { + // whole comment into description if the swagger object description is empty. + if descriptionValue.CanSet() && descriptionValue.Len() == 0 { descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, "\n\n"))) return nil } From 46533c553f60f0248795e1cea635926e8314c81e Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 16:02:37 -0600 Subject: [PATCH 0106/1518] 863 fixing swagger generation --- .../abe/a_bit_of_everything_service_api.go | 14 +- .../abe/examplepb_a_bit_of_everything.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 439 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 21 +- .../proto/examplepb/a_bit_of_everything.proto | 4 +- .../a_bit_of_everything.swagger.json | 22 +- examples/proto/examplepb/stream.swagger.json | 2 +- 7 files changed, 235 insertions(+), 269 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 21971cc14fc..de167d3cd16 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -61,16 +61,15 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * @param pathEnumValue * @param nestedPathEnumValue * @param repeatedEnumValue repeated enum value. it is comma-separated in query - * @param repeatedEnumValueAnnotation Repeated numeric enum description. * @param enumValueAnnotation Numeric enum description. * @param repeatedStringAnnotation Repeated string description. * @return *ExamplepbABitOfEverything */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, repeatedEnumValue []string, repeatedEnumValueAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string) (*ExamplepbABitOfEverything, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, repeatedEnumValue []string, enumValueAnnotation string, repeatedStringAnnotation []string) (*ExamplepbABitOfEverything, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}" + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}" localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -90,7 +89,6 @@ func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"repeated_enum_value"+"}", fmt.Sprintf("%v", repeatedEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"repeated_enum_value_annotation"+"}", fmt.Sprintf("%v", repeatedEnumValueAnnotation), -1) localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) localVarPath = strings.Replace(localVarPath, "{"+"repeated_string_annotation"+"}", fmt.Sprintf("%v", repeatedStringAnnotation), -1) @@ -555,7 +553,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param nonConventionalNameValue * @param timestampValue * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedEnumValueAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 * @param repeatedStringAnnotation Repeated string title. Repeated string description. * @param nestedAnnotationName name is nested field. @@ -563,7 +561,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param nestedAnnotationOk - FALSE: FALSE is false. - TRUE: TRUE is true. * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumValueAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -610,8 +608,8 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si var repeatedEnumValueCollectionFormat = "csv" localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - var repeatedEnumValueAnnotationCollectionFormat = "csv" - localVarQueryParams.Add("repeated_enum_value_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumValueAnnotation, repeatedEnumValueAnnotationCollectionFormat)) + var repeatedEnumAnnotationCollectionFormat = "csv" + localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) var repeatedStringAnnotationCollectionFormat = "csv" diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index 74ec2f41000..2190507a464 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -79,7 +79,7 @@ type ExamplepbABitOfEverything struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeated_enum_value,omitempty"` // Repeated numeric enum description. - RepeatedEnumValueAnnotation []ExamplepbNumericEnum `json:"repeated_enum_value_annotation,omitempty"` + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeated_enum_annotation,omitempty"` // Numeric enum description. EnumValueAnnotation ExamplepbNumericEnum `json:"enum_value_annotation,omitempty"` diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 9f5eed795a3..2e0ace34871 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -121,7 +121,7 @@ type ABitOfEverything struct { // repeated enum value. it is comma-separated in query RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` // repeated numeric enum comment (This comment is overridden by the field annotation) - RepeatedEnumValueAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_value_annotation,json=repeatedEnumValueAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value_annotation,omitempty"` + RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` // numeric enum comment (This comment is overridden by the field annotation) EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` // repeated string comment (This comment is overridden by the field annotation) @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -392,9 +392,9 @@ func (m *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { return nil } -func (m *ABitOfEverything) GetRepeatedEnumValueAnnotation() []NumericEnum { +func (m *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { if m != nil { - return m.RepeatedEnumValueAnnotation + return m.RepeatedEnumAnnotation } return nil } @@ -512,7 +512,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{0, 0} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -581,7 +581,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{1} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -724,7 +724,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{2} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -763,7 +763,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{3} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -810,7 +810,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_ba3a130ee49bb615, []int{4} + return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1574,212 +1574,213 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_ba3a130ee49bb615) -} - -var fileDescriptor_a_bit_of_everything_ba3a130ee49bb615 = []byte{ - // 3247 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0xdb, 0x73, 0xdb, 0xc6, - 0xd5, 0x17, 0x08, 0xea, 0xb6, 0xba, 0x51, 0x2b, 0x5f, 0x24, 0x5a, 0xb6, 0xd6, 0xb4, 0x93, 0xc0, - 0x8c, 0x49, 0x48, 0x90, 0xec, 0xc8, 0xcc, 0x24, 0xfe, 0x48, 0x5d, 0x6c, 0xc5, 0xb6, 0x2c, 0xc3, - 0x8e, 0xbf, 0x8c, 0x63, 0x47, 0x03, 0x92, 0x4b, 0x11, 0x16, 0x81, 0x45, 0x80, 0x85, 0x6c, 0x7e, - 0xfc, 0xf8, 0x7d, 0xe9, 0x65, 0xd2, 0x69, 0xf3, 0xd0, 0x19, 0xa5, 0x7d, 0xe8, 0x65, 0xfa, 0x17, - 0xf4, 0xb5, 0xd3, 0x87, 0xcc, 0xf4, 0x36, 0x93, 0xe9, 0x4c, 0xfb, 0x54, 0xb7, 0xd3, 0x7f, 0xa0, - 0x7d, 0xe8, 0x5f, 0xd0, 0x99, 0xbe, 0x74, 0x3a, 0x58, 0x00, 0x24, 0x00, 0x92, 0x96, 0x69, 0x67, - 0xf2, 0x22, 0x63, 0x77, 0xcf, 0x39, 0xbf, 0xb3, 0x67, 0xcf, 0x9e, 0xcb, 0xd2, 0x40, 0xc2, 0x4f, - 0x15, 0xcd, 0xa8, 0x61, 0x4b, 0x34, 0x4c, 0x42, 0x89, 0xe8, 0x0d, 0x8d, 0xa2, 0xa8, 0xec, 0x16, - 0x55, 0xba, 0x4b, 0x2a, 0xbb, 0xf8, 0x00, 0x9b, 0x75, 0x5a, 0x55, 0xf5, 0xbd, 0x2c, 0xa3, 0x81, - 0x0b, 0x7b, 0xa6, 0x51, 0xca, 0xee, 0x29, 0x14, 0x3f, 0x51, 0xea, 0x59, 0x5f, 0x40, 0xb6, 0xc5, - 0x9a, 0x9c, 0xdf, 0x23, 0x64, 0xaf, 0x86, 0x45, 0xc5, 0x50, 0x45, 0x45, 0xd7, 0x09, 0x55, 0xa8, - 0x4a, 0x74, 0xcb, 0x65, 0x4f, 0x22, 0x6f, 0x95, 0x8d, 0x8a, 0x76, 0x45, 0xac, 0xa8, 0xb8, 0x56, - 0xde, 0xd5, 0x14, 0x6b, 0xdf, 0xa3, 0x38, 0x15, 0xa5, 0xc0, 0x9a, 0x41, 0xeb, 0xde, 0xe2, 0x99, - 0xe8, 0x62, 0xd9, 0x36, 0x99, 0x7c, 0x6f, 0xfd, 0x8d, 0xc8, 0x8e, 0x0c, 0x85, 0x56, 0xb1, 0x6e, - 0x6b, 0xec, 0x63, 0xd7, 0xf9, 0xf2, 0xf5, 0x88, 0x10, 0x5a, 0x76, 0x51, 0xd4, 0xb0, 0x65, 0x29, - 0x7b, 0xd8, 0xa3, 0x38, 0xdb, 0x49, 0x21, 0x45, 0x48, 0x16, 0xa2, 0xda, 0x50, 0x55, 0xc3, 0x16, - 0x55, 0x34, 0xc3, 0x23, 0xb8, 0xc8, 0xfe, 0x29, 0x65, 0xf6, 0xb0, 0x9e, 0xb1, 0x9e, 0x28, 0x7b, - 0x7b, 0xd8, 0x14, 0x89, 0xc1, 0xec, 0xd1, 0x69, 0x9b, 0xd4, 0xa7, 0xa7, 0x40, 0x22, 0x5f, 0x50, - 0xe9, 0xed, 0xca, 0x46, 0xcb, 0xea, 0xf0, 0x11, 0x98, 0xb0, 0x54, 0x7d, 0xaf, 0x86, 0x77, 0x75, - 0x6c, 0x51, 0x5c, 0x9e, 0x9d, 0x43, 0x9c, 0x30, 0x26, 0xad, 0x66, 0x8f, 0x38, 0x87, 0x6c, 0x54, - 0x52, 0x76, 0x9b, 0xf1, 0xcb, 0xe3, 0xae, 0x38, 0x77, 0x04, 0xab, 0x20, 0x6e, 0xdb, 0x6a, 0x79, - 0x96, 0x43, 0x9c, 0x30, 0x5a, 0xb8, 0x77, 0x98, 0xbf, 0xf3, 0x09, 0xc7, 0x7d, 0x8f, 0xbb, 0xf1, - 0xa1, 0x92, 0xa9, 0xe4, 0x33, 0x9b, 0x8b, 0x99, 0x2b, 0x8f, 0x1a, 0xab, 0xcd, 0x4c, 0x70, 0xb8, - 0xd2, 0xcf, 0x70, 0x49, 0x6a, 0xca, 0x0c, 0x01, 0xee, 0x80, 0x21, 0x6f, 0x07, 0x31, 0xc4, 0xbf, - 0xd2, 0x0e, 0x3c, 0x39, 0xf0, 0x3d, 0x30, 0x56, 0xa9, 0x11, 0x85, 0xee, 0x1e, 0x28, 0x35, 0x1b, - 0xcf, 0xf2, 0x88, 0x13, 0x62, 0x85, 0x0b, 0x87, 0xf9, 0xd7, 0xa5, 0xe9, 0x4d, 0x67, 0x1e, 0xb1, - 0x79, 0xc4, 0x3c, 0x2c, 0xc7, 0x2f, 0x66, 0xa5, 0x67, 0x5c, 0x90, 0x41, 0x06, 0x6c, 0x70, 0xdf, - 0xf9, 0x86, 0x67, 0xc1, 0x78, 0x99, 0xd8, 0xc5, 0x1a, 0xf6, 0x84, 0xc5, 0x11, 0x27, 0x70, 0xf2, - 0x98, 0x3b, 0xe7, 0x92, 0x2c, 0x80, 0x31, 0x55, 0xa7, 0x97, 0x57, 0x3c, 0x8a, 0x41, 0xc4, 0x09, - 0xbc, 0x0c, 0xd8, 0x54, 0x4b, 0x86, 0x1d, 0xa4, 0x18, 0x42, 0x9c, 0x10, 0x97, 0xc7, 0xec, 0x00, - 0x89, 0x2b, 0x63, 0x59, 0xf2, 0x28, 0x86, 0x11, 0x27, 0x0c, 0x32, 0x19, 0xcb, 0x92, 0x4b, 0x70, - 0x0e, 0x4c, 0x54, 0xd4, 0xa7, 0xb8, 0xdc, 0x12, 0x32, 0x82, 0x38, 0x61, 0x48, 0x1e, 0xf7, 0x26, - 0xc3, 0x44, 0x2d, 0x39, 0xa3, 0x88, 0x13, 0x86, 0x3d, 0x22, 0x5f, 0xd2, 0x69, 0x00, 0x8a, 0x84, - 0xd4, 0x3c, 0x0a, 0x80, 0x38, 0x61, 0x44, 0x1e, 0x75, 0x66, 0x5a, 0xca, 0x5a, 0xd4, 0x54, 0xf5, - 0x3d, 0x8f, 0x60, 0xcc, 0x71, 0x00, 0x79, 0xcc, 0x9d, 0x6b, 0x29, 0x5b, 0xac, 0x53, 0x6c, 0x79, - 0x14, 0xa7, 0x11, 0x27, 0x8c, 0xcb, 0x80, 0x4d, 0x85, 0x36, 0xdc, 0x52, 0x63, 0x02, 0x71, 0xc2, - 0x84, 0xbb, 0x61, 0x5f, 0x8b, 0x1b, 0x00, 0x38, 0xb7, 0xce, 0x23, 0x98, 0x44, 0x9c, 0x30, 0x29, - 0x5d, 0x3c, 0xf2, 0xe4, 0xb7, 0x6d, 0x0d, 0x9b, 0x6a, 0x69, 0x43, 0xb7, 0x35, 0x79, 0xd4, 0xe1, - 0x77, 0x85, 0xed, 0x80, 0xa9, 0xd6, 0x3d, 0xf6, 0x24, 0x9e, 0x61, 0x12, 0x85, 0x1e, 0x12, 0xfd, - 0xeb, 0x9f, 0xdd, 0x51, 0x68, 0x95, 0x49, 0x9b, 0x30, 0xbc, 0x2f, 0x57, 0xa2, 0x05, 0x4e, 0xb8, - 0xce, 0xb4, 0x1b, 0x15, 0xbc, 0xc0, 0x04, 0xbf, 0x7b, 0x94, 0xe0, 0x5b, 0x6e, 0x40, 0xf0, 0xe5, - 0x7b, 0x2e, 0xda, 0x82, 0x9b, 0xd1, 0x43, 0x63, 0x17, 0xf4, 0x35, 0x30, 0x69, 0x85, 0xcf, 0x6f, - 0x0a, 0x71, 0xc2, 0x94, 0x3c, 0x61, 0x85, 0x0e, 0xb0, 0x45, 0xd6, 0xf2, 0x85, 0x04, 0xe2, 0x84, - 0x84, 0x4f, 0x16, 0xf0, 0x3a, 0x2b, 0x78, 0x08, 0xd3, 0x88, 0x13, 0xa6, 0xe5, 0x31, 0x2b, 0x70, - 0x08, 0x1e, 0x49, 0x4b, 0x0e, 0x44, 0x9c, 0x00, 0x5d, 0x12, 0x5f, 0x8a, 0x04, 0x8e, 0x9b, 0xd8, - 0xc0, 0x8a, 0x63, 0x8a, 0x90, 0x5f, 0xcc, 0x20, 0x5e, 0x18, 0x95, 0x67, 0xfc, 0xc5, 0xbb, 0x01, - 0xff, 0xb8, 0x02, 0xc6, 0x88, 0x8e, 0x9d, 0x24, 0xe1, 0x44, 0xe8, 0xd9, 0x63, 0x2c, 0x30, 0x9d, - 0xc8, 0xba, 0x41, 0x31, 0xeb, 0x07, 0xc5, 0xec, 0x86, 0xb3, 0x7a, 0x7d, 0x40, 0x06, 0x8c, 0x98, - 0x8d, 0xe0, 0x39, 0x30, 0xee, 0xb2, 0xba, 0x58, 0xb3, 0xc7, 0x1d, 0xef, 0xbb, 0x3e, 0x20, 0xbb, - 0x02, 0x5d, 0x10, 0xf8, 0x10, 0x8c, 0x6a, 0x8a, 0xe1, 0xe9, 0x71, 0x82, 0x05, 0x8d, 0xab, 0xfd, - 0x07, 0x8d, 0x5b, 0x8a, 0xc1, 0xd4, 0xdd, 0xd0, 0xa9, 0x59, 0x97, 0x47, 0x34, 0x6f, 0x08, 0x9f, - 0x82, 0x19, 0x4d, 0x31, 0x8c, 0xe8, 0x7e, 0x4f, 0x32, 0x9c, 0xeb, 0x2f, 0x85, 0x63, 0x84, 0xec, - 0xe3, 0x02, 0x4e, 0x6b, 0xd1, 0xf9, 0x00, 0xb2, 0xe7, 0x7b, 0x2e, 0xf2, 0xec, 0xab, 0x21, 0xbb, - 0x9e, 0xd7, 0x89, 0x1c, 0x98, 0x87, 0x39, 0x30, 0xab, 0x13, 0x7d, 0x8d, 0xe8, 0x07, 0x58, 0x77, - 0x32, 0x8f, 0x52, 0xdb, 0x56, 0x34, 0x37, 0xbc, 0xcd, 0x26, 0x59, 0x00, 0xe8, 0xb9, 0x0e, 0xd7, - 0xc0, 0x54, 0x2b, 0xbd, 0x79, 0x1a, 0x9f, 0x62, 0x27, 0x9e, 0xec, 0x38, 0xf1, 0x7b, 0x3e, 0x9d, - 0x3c, 0xd9, 0x62, 0x71, 0x85, 0x3c, 0x04, 0x2d, 0x4f, 0x0a, 0x5e, 0xb6, 0x79, 0xc4, 0xf7, 0x1d, - 0x17, 0xa6, 0x7d, 0x41, 0xed, 0x8b, 0xf5, 0x4b, 0x0e, 0x9c, 0xe9, 0x22, 0x7e, 0xb7, 0x9d, 0x6a, - 0x67, 0x51, 0xff, 0x48, 0x85, 0xf5, 0xc3, 0x7c, 0x3e, 0x7d, 0x4a, 0xf6, 0x04, 0x23, 0xdd, 0x5d, - 0x42, 0x0e, 0x00, 0xa2, 0x2a, 0xad, 0x61, 0x29, 0xd5, 0x7d, 0xb1, 0x8c, 0xad, 0x92, 0xa9, 0xb2, - 0x7c, 0x9f, 0x95, 0x4f, 0x75, 0xe8, 0x9b, 0x6f, 0xa9, 0x05, 0x7f, 0xc0, 0x81, 0xe3, 0xdd, 0x15, - 0x3e, 0xdb, 0x7f, 0xc8, 0x2c, 0x48, 0x87, 0x79, 0x31, 0x0d, 0xb7, 0x3b, 0xf5, 0x9c, 0xdb, 0xee, - 0xa9, 0xde, 0x0c, 0xee, 0xa2, 0xd6, 0x01, 0x48, 0x46, 0xa3, 0x42, 0x40, 0xb5, 0x94, 0x13, 0x1a, - 0x0a, 0xab, 0x87, 0xf9, 0x4b, 0xe9, 0xe3, 0x2d, 0x03, 0xb8, 0x64, 0x1e, 0xde, 0x7c, 0x74, 0x3a, - 0x04, 0x39, 0x1b, 0x0e, 0x2a, 0x01, 0xdc, 0x5f, 0x71, 0x01, 0x60, 0xef, 0x92, 0x04, 0x80, 0xcf, - 0xbd, 0x5a, 0x01, 0x51, 0xd8, 0x3c, 0xcc, 0xaf, 0xa5, 0xdb, 0xba, 0xb9, 0x00, 0x88, 0x14, 0x1f, - 0xe3, 0x12, 0xf5, 0x34, 0x3f, 0xd7, 0x63, 0xb5, 0xfb, 0x06, 0x5c, 0xb9, 0x81, 0x0d, 0xfc, 0x84, - 0x03, 0xd3, 0x9d, 0x7a, 0x9f, 0x7f, 0xb5, 0xd2, 0xad, 0xb0, 0x72, 0x98, 0x5f, 0x4a, 0xcf, 0x6c, - 0x77, 0x51, 0x37, 0xb9, 0xdd, 0x5b, 0xcb, 0x84, 0x1e, 0xd1, 0x2e, 0xf9, 0x5b, 0x0e, 0x0c, 0x79, - 0xf5, 0x1f, 0x04, 0x71, 0x5d, 0xd1, 0xb0, 0x5b, 0xff, 0xc9, 0xec, 0x1b, 0x9e, 0x00, 0x43, 0x8a, - 0x46, 0x6c, 0x9d, 0xce, 0xc6, 0x58, 0x42, 0xf7, 0x46, 0xf0, 0x0e, 0x88, 0x91, 0x7d, 0x56, 0x66, - 0x4d, 0x4a, 0xf9, 0x97, 0xdd, 0x44, 0x76, 0x1d, 0x63, 0x83, 0x5d, 0xe0, 0x18, 0xd9, 0x4f, 0x2d, - 0x80, 0x11, 0x7f, 0x0c, 0x47, 0xc1, 0xe0, 0x66, 0xfe, 0xe6, 0xdd, 0x8d, 0xc4, 0x00, 0x1c, 0x01, - 0xf1, 0x7b, 0xf2, 0xfb, 0x1b, 0x09, 0x2e, 0x77, 0xf2, 0x30, 0x7f, 0x4c, 0x82, 0x30, 0xd1, 0x40, - 0x29, 0xb2, 0x9f, 0xca, 0xa1, 0x94, 0x33, 0x9f, 0x42, 0xcd, 0xa4, 0x0a, 0x26, 0x42, 0x91, 0x1d, - 0x26, 0x00, 0xbf, 0x8f, 0xeb, 0xde, 0x46, 0x9c, 0x4f, 0x58, 0x00, 0x83, 0x6e, 0x78, 0x89, 0xbd, - 0x44, 0xd9, 0xe1, 0xb2, 0xe6, 0x62, 0xab, 0x5c, 0x72, 0x1d, 0x9c, 0xe8, 0x1e, 0xdc, 0xbb, 0x60, - 0x1e, 0x0b, 0x62, 0x8e, 0x06, 0xa5, 0xfc, 0x9f, 0x2f, 0x25, 0x1a, 0xa8, 0xbb, 0x48, 0xd9, 0x0e, - 0x4a, 0x79, 0x95, 0x52, 0xb9, 0x8d, 0x9f, 0xfb, 0x51, 0xec, 0x30, 0xff, 0xc3, 0x18, 0xf8, 0x36, - 0x97, 0x9e, 0xc9, 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0x76, 0x77, 0x27, 0x6d, 0x6d, 0xe9, 0xd4, - 0x0f, 0xfa, 0x75, 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x02, 0x78, 0x3d, 0x0f, 0xa2, 0x75, - 0x03, 0x23, 0x4a, 0x50, 0x89, 0x1c, 0x60, 0x13, 0x69, 0x8a, 0x5e, 0x47, 0x15, 0xac, 0x50, 0xdb, - 0xc4, 0x96, 0x23, 0x6b, 0xc7, 0x8f, 0xfe, 0xcf, 0x38, 0x56, 0xf0, 0x3f, 0xe3, 0x82, 0xe5, 0xf2, - 0x33, 0x2e, 0x54, 0x5f, 0xa7, 0xef, 0x83, 0xf3, 0x9b, 0xaa, 0x5e, 0x46, 0xc4, 0xa6, 0x48, 0x23, - 0x26, 0x46, 0x4a, 0xd1, 0xf9, 0xec, 0x68, 0x7f, 0xb2, 0x55, 0x4a, 0x0d, 0x2b, 0x27, 0x8a, 0x7b, - 0x2a, 0xad, 0xda, 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, 0x2e, 0x11, 0xab, 0x6e, 0x51, - 0xec, 0x0d, 0x3d, 0xdb, 0x48, 0x2b, 0x50, 0x6a, 0xa0, 0x94, 0x83, 0xef, 0x38, 0xcb, 0x62, 0xa9, - 0xb2, 0x7c, 0x79, 0x09, 0x2f, 0x65, 0x56, 0x8a, 0x2b, 0x2b, 0x99, 0x95, 0xd5, 0xe5, 0x72, 0x46, - 0x59, 0xba, 0x74, 0x25, 0x73, 0x69, 0xa5, 0xac, 0x14, 0xcb, 0x95, 0xb7, 0xf0, 0xea, 0xd2, 0x4a, - 0x0a, 0x35, 0x0b, 0x13, 0x7e, 0x25, 0xc3, 0x94, 0x4b, 0xfd, 0x7b, 0x04, 0xcc, 0x46, 0x35, 0xf1, - 0xe3, 0x01, 0xbc, 0x02, 0xe6, 0x58, 0xad, 0xd8, 0x8a, 0x4f, 0xc1, 0x1e, 0x84, 0x43, 0xbc, 0x10, - 0x93, 0x4f, 0x38, 0x04, 0x3e, 0xc3, 0x66, 0xbb, 0xc9, 0x78, 0x1b, 0x24, 0xc3, 0xac, 0xa1, 0x96, - 0xc3, 0x69, 0x8b, 0x38, 0xf9, 0x64, 0x90, 0x77, 0x3d, 0xd0, 0x7e, 0x74, 0xe0, 0x06, 0x2b, 0x3a, - 0x1e, 0xf1, 0x02, 0x1f, 0xc6, 0xdd, 0x6a, 0x17, 0x77, 0x1d, 0xb8, 0xa1, 0x36, 0x25, 0x8e, 0x78, - 0x21, 0x1e, 0xc6, 0x7d, 0x3f, 0x50, 0x19, 0x76, 0xc3, 0x6d, 0x15, 0x9b, 0x83, 0x88, 0x17, 0x06, - 0x3b, 0x70, 0xfd, 0xba, 0xf3, 0x1d, 0x70, 0x2a, 0x62, 0xaa, 0x50, 0x39, 0x3b, 0x84, 0x78, 0x61, - 0x48, 0x9e, 0x0d, 0x19, 0x2b, 0x58, 0xd9, 0x76, 0x67, 0x0f, 0x34, 0x4f, 0xbc, 0x30, 0xdc, 0x85, - 0xdd, 0x47, 0x7f, 0x0b, 0xcc, 0x86, 0xd9, 0x03, 0xed, 0xd0, 0x08, 0xe2, 0x85, 0x11, 0xf9, 0x78, - 0x90, 0xb7, 0xd0, 0x6a, 0x8d, 0x3a, 0xcc, 0x15, 0x2a, 0x10, 0x47, 0x59, 0x41, 0x1c, 0x32, 0x57, - 0xb8, 0x28, 0x8e, 0x98, 0x2b, 0xd8, 0x42, 0x01, 0xc4, 0x0b, 0xe3, 0x61, 0x73, 0x15, 0xda, 0xed, - 0x54, 0xd7, 0x63, 0x6a, 0x6d, 0x77, 0x0c, 0xf1, 0xc2, 0x44, 0xe7, 0x31, 0xf9, 0xbb, 0xc5, 0xd1, - 0xdd, 0x06, 0xca, 0xab, 0xf1, 0x97, 0x28, 0xaf, 0x42, 0xb6, 0x69, 0x97, 0x58, 0x57, 0xc1, 0x7c, - 0xc4, 0x36, 0xe1, 0x43, 0x99, 0x40, 0xbc, 0x30, 0x25, 0xcf, 0x85, 0xac, 0x13, 0xea, 0x6a, 0x7a, - 0x08, 0x68, 0x39, 0xc5, 0x24, 0xe2, 0x85, 0x44, 0x37, 0x01, 0x3d, 0x9d, 0x39, 0xd4, 0xfd, 0x4c, - 0x21, 0x5e, 0x98, 0x8e, 0x9c, 0x4e, 0xc0, 0x4a, 0x5d, 0x99, 0x03, 0xfd, 0x15, 0x2f, 0xc0, 0x4e, - 0x66, 0x0f, 0x39, 0x57, 0x3d, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x06, 0x4a, 0xf5, 0x72, 0xac, 0x54, - 0x0e, 0x7d, 0x48, 0x4d, 0x1b, 0x5f, 0x44, 0xee, 0xdf, 0x8a, 0x52, 0xb3, 0xbc, 0xc1, 0xa3, 0x8b, - 0x51, 0xb6, 0x80, 0xde, 0x0e, 0xdf, 0xd2, 0x45, 0x24, 0x5d, 0x44, 0xcb, 0x8f, 0x50, 0x33, 0x95, - 0x04, 0xf1, 0x02, 0x29, 0xd7, 0xbb, 0x65, 0xe7, 0xd4, 0x43, 0x30, 0xe5, 0x35, 0x9d, 0xff, 0xad, - 0xd2, 0x2a, 0x23, 0x9b, 0x04, 0x31, 0xff, 0x09, 0x47, 0x8e, 0xa9, 0x4e, 0x88, 0x8a, 0x97, 0x15, - 0xaa, 0x78, 0xd9, 0xe3, 0xb5, 0x23, 0xcf, 0xdd, 0x11, 0x22, 0x33, 0x96, 0xd4, 0xe7, 0x1c, 0x98, - 0x7a, 0xdf, 0x28, 0x2b, 0x14, 0xdf, 0x97, 0x64, 0xfc, 0xb1, 0x8d, 0x2d, 0x0a, 0xd7, 0x00, 0xaf, - 0x14, 0x5d, 0x25, 0xc6, 0xa4, 0xa5, 0xbe, 0x73, 0x91, 0xec, 0x70, 0xc3, 0xb7, 0xc1, 0x98, 0xcd, - 0xe4, 0xb2, 0xb7, 0x3e, 0x4f, 0xb5, 0xce, 0xd6, 0x61, 0x53, 0xc5, 0xb5, 0xf2, 0x2d, 0xc5, 0xda, - 0x97, 0x81, 0x4b, 0xee, 0x7c, 0xa7, 0x11, 0x18, 0x0b, 0xf8, 0xa6, 0x53, 0x1e, 0x3c, 0xd8, 0x90, - 0x6f, 0x27, 0x06, 0xe0, 0x30, 0xe0, 0x6f, 0x6f, 0x6f, 0x24, 0x38, 0xe9, 0xcb, 0xd3, 0xe0, 0x64, - 0x14, 0xf8, 0x2e, 0x36, 0x0f, 0xd4, 0x12, 0x86, 0xbf, 0x8b, 0x83, 0xa1, 0x35, 0xd3, 0xb1, 0x39, - 0xec, 0x5f, 0xfb, 0x64, 0xff, 0x2c, 0xa9, 0x3f, 0xf1, 0xdf, 0xfc, 0xf3, 0xdf, 0x3f, 0x8f, 0xfd, - 0x81, 0x4f, 0xfd, 0x9e, 0x17, 0x0f, 0x96, 0xfc, 0x77, 0xd5, 0x6e, 0xaf, 0xaa, 0x62, 0x23, 0x90, - 0x3e, 0x9a, 0x62, 0x23, 0x98, 0x11, 0x9a, 0x62, 0x23, 0xe0, 0x9d, 0x4d, 0xd1, 0xc2, 0x86, 0x62, - 0x2a, 0x94, 0x98, 0x62, 0xc3, 0x0e, 0x2d, 0x34, 0x02, 0x9e, 0xd4, 0x14, 0x1b, 0xa1, 0x0b, 0xe5, - 0x8f, 0x03, 0xeb, 0x6d, 0x77, 0x6d, 0x8a, 0x8d, 0x60, 0x6c, 0x7b, 0xc7, 0xa2, 0xa6, 0x61, 0xe2, - 0x8a, 0xfa, 0x54, 0x4c, 0x37, 0x5d, 0x90, 0x00, 0x9b, 0x15, 0x95, 0x63, 0x45, 0x81, 0xac, 0x08, - 0x43, 0x58, 0xc9, 0x5e, 0x9d, 0x65, 0x53, 0x6c, 0xb4, 0x63, 0x55, 0x53, 0x6c, 0x44, 0x5e, 0x62, - 0x1c, 0xce, 0xae, 0x4f, 0x34, 0x4d, 0xb1, 0xd1, 0x25, 0xd8, 0x75, 0x9f, 0x0d, 0x54, 0xe1, 0x21, - 0xb8, 0xf0, 0x7c, 0xef, 0x5e, 0xa7, 0x09, 0x7f, 0xc6, 0x01, 0xe0, 0x3a, 0x11, 0xbb, 0x72, 0x5f, - 0x8f, 0x23, 0xa5, 0x99, 0x1f, 0x9d, 0x4f, 0x2d, 0x1c, 0xe1, 0x45, 0x39, 0x2e, 0x0d, 0xff, 0x17, - 0x0c, 0xdd, 0x24, 0x64, 0xdf, 0x36, 0xe0, 0x54, 0xd6, 0xb2, 0x8b, 0x52, 0x76, 0xab, 0xec, 0xc5, - 0x89, 0x97, 0x41, 0xce, 0x32, 0x64, 0x01, 0xbe, 0x7e, 0xa4, 0xff, 0x3a, 0xb5, 0x56, 0x13, 0x7e, - 0xca, 0x81, 0x21, 0x37, 0x6e, 0xbc, 0x8c, 0x69, 0x7a, 0x3c, 0x1a, 0xa5, 0x96, 0x98, 0x16, 0x6f, - 0x26, 0x5f, 0x50, 0x0b, 0xc7, 0x0c, 0xbf, 0xe1, 0xc0, 0x88, 0x1f, 0xc0, 0xe0, 0xe2, 0x91, 0xaa, - 0x44, 0x62, 0x5d, 0x4f, 0x4d, 0x1e, 0x33, 0x4d, 0xca, 0xc9, 0xb4, 0x78, 0x20, 0x3d, 0x5f, 0x13, - 0xa5, 0x88, 0xb3, 0xae, 0x36, 0x4e, 0xdc, 0x7b, 0xb0, 0x24, 0xf5, 0xcb, 0x02, 0x7f, 0xca, 0x81, - 0xd9, 0x1d, 0x85, 0x96, 0xaa, 0x4e, 0x80, 0x6f, 0x05, 0xc4, 0x2d, 0x9d, 0x39, 0xde, 0x57, 0xb7, - 0xa5, 0xcb, 0x6c, 0x4b, 0x8b, 0xd2, 0x9b, 0xe2, 0x81, 0xa4, 0xbc, 0xa8, 0x82, 0x5c, 0x1a, 0x7e, - 0x9f, 0x03, 0x43, 0xeb, 0xb8, 0x86, 0x29, 0xee, 0xf4, 0xb4, 0x5e, 0x58, 0x0f, 0x0f, 0xf3, 0x6f, - 0x16, 0x2f, 0x80, 0x49, 0x00, 0xf2, 0x86, 0x7a, 0x03, 0xd7, 0xf3, 0x36, 0xad, 0xc2, 0x01, 0x70, - 0x12, 0x0c, 0xdd, 0x76, 0x3e, 0x25, 0x38, 0x01, 0xe2, 0x26, 0x56, 0xca, 0x60, 0xf0, 0x89, 0xa9, - 0x52, 0xec, 0x3a, 0x5f, 0xfa, 0x45, 0x9d, 0xef, 0x6f, 0x1c, 0x18, 0xb9, 0x86, 0xe9, 0x1d, 0x1b, - 0x9b, 0xf5, 0xaf, 0xd2, 0xfd, 0x3e, 0xe3, 0x0e, 0xf3, 0xf7, 0x52, 0xdb, 0x60, 0xbe, 0x5b, 0xab, - 0xd2, 0x02, 0xec, 0xb3, 0x45, 0xf9, 0x80, 0x2b, 0x0e, 0xb0, 0xfd, 0x65, 0xe1, 0xc5, 0xa3, 0xf6, - 0xf7, 0xb1, 0x03, 0xe0, 0xef, 0xf2, 0xb3, 0x41, 0x90, 0xb8, 0x86, 0xa9, 0x5f, 0x99, 0xb8, 0xe0, - 0x57, 0xfa, 0x4f, 0xc7, 0x1e, 0x7f, 0xf2, 0xe5, 0x59, 0x53, 0x9f, 0xc4, 0xd9, 0x0e, 0xfe, 0xc5, - 0xc3, 0x7f, 0x1e, 0x95, 0xe0, 0x5a, 0xe5, 0x8e, 0x17, 0xd8, 0xbb, 0xb5, 0x4d, 0xcd, 0xe8, 0x5a, - 0x24, 0x0b, 0xf6, 0xec, 0x7b, 0x3a, 0xd6, 0xec, 0xe7, 0x2d, 0x86, 0xb3, 0xd3, 0x73, 0x3a, 0x93, - 0xee, 0xab, 0x3d, 0x79, 0x43, 0xf9, 0xb4, 0x77, 0xe7, 0xd0, 0xc9, 0xd7, 0xee, 0x0c, 0xba, 0x6e, - 0xa4, 0x27, 0x60, 0x67, 0xba, 0xec, 0x51, 0x8e, 0xf7, 0x58, 0xee, 0xb9, 0x4f, 0xeb, 0x79, 0xa8, - 0xa1, 0x74, 0x0e, 0xbf, 0xe4, 0x41, 0x7c, 0xa3, 0x54, 0x25, 0xb0, 0xd7, 0x6f, 0x2f, 0x96, 0x5d, - 0xcc, 0xba, 0x8d, 0x91, 0x1f, 0x1c, 0x5e, 0x98, 0x32, 0xf5, 0x8f, 0xd8, 0x61, 0xfe, 0x1b, 0x31, - 0x30, 0x8e, 0x4b, 0x55, 0x82, 0x2c, 0xb7, 0x8c, 0x03, 0x23, 0x6c, 0x64, 0x1a, 0x25, 0x38, 0x7d, - 0xd7, 0xd6, 0x34, 0xc5, 0xac, 0xe7, 0xd0, 0x86, 0x37, 0x95, 0x4c, 0xac, 0xb7, 0x9f, 0xbc, 0xd8, - 0x6c, 0x6a, 0x1d, 0xc0, 0xf0, 0xb5, 0x65, 0xda, 0xf6, 0x79, 0x59, 0xdf, 0xbb, 0x0a, 0xf8, 0x4b, - 0x8b, 0xcb, 0x70, 0x15, 0x5c, 0x96, 0x31, 0xb5, 0x4d, 0x1d, 0x97, 0xd1, 0x93, 0x2a, 0xd6, 0x11, - 0xad, 0x62, 0x64, 0x62, 0x8b, 0xd8, 0x66, 0x09, 0x23, 0xd5, 0x42, 0x14, 0x6b, 0x06, 0x31, 0x15, - 0x53, 0xad, 0xd5, 0x91, 0xad, 0x2b, 0x07, 0x8a, 0x5a, 0x53, 0x8a, 0x35, 0x9c, 0x7d, 0xef, 0x6d, - 0xc0, 0xaf, 0x2c, 0xae, 0xc0, 0x15, 0x90, 0x7e, 0x8e, 0x80, 0x32, 0xc1, 0x16, 0xd2, 0x09, 0x45, - 0xf8, 0xa9, 0x6a, 0xd1, 0x2c, 0x1c, 0x02, 0xf1, 0x1f, 0xc7, 0x38, 0xb7, 0x8a, 0x7c, 0x74, 0x74, - 0x98, 0x70, 0x0c, 0x23, 0x36, 0xdc, 0x83, 0x79, 0x30, 0x97, 0x4a, 0x04, 0x13, 0x8e, 0xb3, 0x96, - 0x73, 0x9f, 0x81, 0x1e, 0x40, 0xd8, 0xb1, 0x04, 0x7f, 0xc1, 0x81, 0xf1, 0x75, 0x8c, 0x0d, 0xf6, - 0x13, 0x95, 0x33, 0xf1, 0xf5, 0x54, 0x36, 0x57, 0xd9, 0xde, 0xae, 0xa4, 0x56, 0x8e, 0x0c, 0xf1, - 0xa1, 0x5f, 0xbf, 0xb3, 0x4e, 0x0b, 0xc4, 0xb2, 0x50, 0x1e, 0x80, 0x6d, 0x52, 0x50, 0xf5, 0xb2, - 0xaa, 0xef, 0x59, 0x70, 0xae, 0x23, 0x82, 0xaf, 0x7b, 0xff, 0x31, 0xa0, 0x67, 0x70, 0x1f, 0x80, - 0xf7, 0xc1, 0xf0, 0x3d, 0x55, 0xc3, 0xc4, 0xa6, 0xb0, 0x07, 0x51, 0x4f, 0xe6, 0x53, 0x4c, 0xfd, - 0xe3, 0x70, 0x26, 0x68, 0x4f, 0xea, 0x09, 0xab, 0x82, 0xc4, 0x86, 0x69, 0x12, 0xd3, 0x49, 0xdf, - 0xeb, 0x98, 0x2a, 0x6a, 0xcd, 0xea, 0x1b, 0xe0, 0x3c, 0x03, 0x38, 0x03, 0xe7, 0x43, 0x07, 0xe6, - 0x48, 0x7d, 0xa2, 0xd2, 0x6a, 0xd9, 0x93, 0xfa, 0x1d, 0x0e, 0xc0, 0x6b, 0x98, 0x46, 0xfb, 0xc1, - 0xa3, 0x6b, 0x84, 0x08, 0x47, 0x4f, 0x35, 0xde, 0x60, 0x6a, 0x9c, 0x4d, 0xcd, 0x05, 0xd5, 0x70, - 0x34, 0x28, 0x92, 0x72, 0x5d, 0x6c, 0x38, 0x15, 0x01, 0xeb, 0x1b, 0xe1, 0xb7, 0x38, 0x30, 0xbd, - 0x43, 0x2c, 0xea, 0x48, 0x64, 0xac, 0x4c, 0x91, 0x17, 0x6b, 0x3d, 0x7b, 0xa2, 0x8b, 0x0c, 0xfd, - 0x42, 0xea, 0x7c, 0x10, 0xdd, 0x20, 0x16, 0x75, 0x34, 0x60, 0x3f, 0x3a, 0xba, 0x6a, 0xf8, 0x4e, - 0x91, 0xfc, 0x35, 0x77, 0x98, 0xff, 0x82, 0x83, 0x95, 0x1e, 0x9d, 0x60, 0xf0, 0x5d, 0x1c, 0x65, - 0x32, 0xe8, 0x49, 0x55, 0x2d, 0x55, 0x91, 0x55, 0x25, 0x76, 0xad, 0xcc, 0xae, 0x5f, 0x11, 0x23, - 0xdb, 0xc2, 0x65, 0xa4, 0xea, 0xc8, 0xa8, 0x29, 0x25, 0x8c, 0x48, 0x85, 0x5d, 0xd4, 0x32, 0x29, - 0xd9, 0x1a, 0xd6, 0xdd, 0x5e, 0x00, 0x95, 0x88, 0xe6, 0x0c, 0xce, 0x26, 0xef, 0x80, 0x85, 0x6e, - 0x95, 0x81, 0x73, 0x8d, 0xfc, 0xde, 0xb3, 0xdf, 0xf7, 0xcb, 0xc7, 0xe0, 0x58, 0x49, 0xd1, 0x70, - 0x6d, 0x4d, 0xb1, 0xb0, 0x27, 0xc3, 0x69, 0x94, 0xa0, 0x0c, 0x06, 0xdd, 0x5f, 0x4e, 0xfb, 0x75, - 0xa4, 0x39, 0x66, 0xc3, 0x19, 0x38, 0x1d, 0x72, 0x24, 0x67, 0x49, 0xfa, 0x08, 0xcc, 0xe7, 0x75, - 0x42, 0xab, 0xd8, 0xf4, 0x90, 0x9c, 0xc3, 0x0b, 0x5c, 0xaa, 0x77, 0x43, 0x57, 0xac, 0x5f, 0xe0, - 0x81, 0xc2, 0x17, 0xc3, 0x87, 0xf9, 0x9f, 0x0f, 0xc3, 0xbf, 0x70, 0x60, 0x26, 0x8f, 0x0a, 0xee, - 0x8b, 0x73, 0x20, 0x04, 0x7c, 0x00, 0x8e, 0xed, 0xc9, 0x3b, 0x6b, 0x99, 0x6b, 0xee, 0xd6, 0x91, - 0x61, 0x92, 0xc7, 0xb8, 0x44, 0xfb, 0x35, 0x59, 0x32, 0xa1, 0x13, 0x1d, 0xff, 0x97, 0xb7, 0x35, - 0x87, 0x3a, 0xfd, 0x11, 0x38, 0x56, 0xb8, 0xbb, 0x8e, 0x96, 0x33, 0x6b, 0x35, 0xc5, 0xb6, 0x30, - 0xba, 0xa9, 0x96, 0xb0, 0x6e, 0x61, 0xb8, 0xd9, 0x9f, 0x64, 0xb1, 0x58, 0x23, 0x45, 0x51, 0x53, - 0x2c, 0x8a, 0x4d, 0xf1, 0xe6, 0xd6, 0xda, 0xc6, 0xf6, 0xdd, 0x8d, 0x2c, 0x7d, 0x4a, 0x25, 0x7e, - 0x29, 0xbb, 0x98, 0xe6, 0xb9, 0x58, 0x5c, 0x4a, 0x28, 0x86, 0xfb, 0x4e, 0xae, 0x12, 0x5d, 0x7c, - 0x6c, 0x11, 0x5d, 0x3a, 0x11, 0x9c, 0x79, 0x9a, 0xa9, 0x10, 0x92, 0xd1, 0x54, 0x0d, 0xe7, 0x3a, - 0x28, 0x73, 0x3d, 0x28, 0xe5, 0x1d, 0x27, 0x63, 0x2c, 0xc3, 0x2d, 0x70, 0xad, 0x33, 0x63, 0xd8, - 0x16, 0x36, 0xdb, 0xd9, 0xa2, 0xaa, 0x1c, 0x60, 0x64, 0x60, 0x53, 0x53, 0x2d, 0xcb, 0x71, 0x4c, - 0x4a, 0x90, 0x52, 0x2a, 0x61, 0xcb, 0x0a, 0x65, 0x97, 0xac, 0xfc, 0x0a, 0x39, 0x68, 0x58, 0xbe, - 0x0e, 0xf8, 0x95, 0xa5, 0x55, 0x98, 0x07, 0x13, 0x5b, 0x6f, 0x68, 0x48, 0x41, 0x14, 0x2b, 0x06, - 0xa1, 0x59, 0xb8, 0x08, 0xb2, 0xc9, 0xbe, 0x9e, 0x14, 0x1f, 0x7c, 0x37, 0x06, 0xa6, 0xc0, 0x68, - 0x41, 0xb1, 0xd4, 0x12, 0xab, 0xff, 0x63, 0x23, 0x1c, 0x38, 0x1d, 0xea, 0x08, 0xa6, 0x46, 0x62, - 0xc9, 0xd1, 0x0f, 0x32, 0xf9, 0x9d, 0xad, 0xcc, 0x0d, 0x5c, 0x47, 0x31, 0xf0, 0x57, 0xae, 0xd5, - 0x21, 0xfc, 0x91, 0x1b, 0xe1, 0x85, 0xb8, 0x74, 0xce, 0x3f, 0xc3, 0xc0, 0x81, 0x8b, 0x44, 0xb1, - 0x69, 0x55, 0x74, 0xfe, 0x10, 0x53, 0xfd, 0x1f, 0x9c, 0x5b, 0xe8, 0x4d, 0x44, 0xc9, 0x3e, 0xd6, - 0x0b, 0xff, 0x0f, 0x92, 0x6e, 0xc3, 0x01, 0xe1, 0x35, 0x53, 0xd1, 0xa9, 0x85, 0x9c, 0x81, 0x67, - 0x3d, 0x30, 0xef, 0xb5, 0x21, 0x70, 0xc6, 0x5b, 0x64, 0x23, 0x7f, 0x75, 0x0d, 0x0c, 0x2a, 0x65, - 0x4d, 0xd5, 0x61, 0x2e, 0xc4, 0xaa, 0x97, 0x43, 0x64, 0xec, 0x30, 0x1c, 0x32, 0xd5, 0xa2, 0x4e, - 0x26, 0x3a, 0xc0, 0x48, 0xd5, 0x2b, 0xc4, 0xd4, 0xd8, 0x79, 0x17, 0x17, 0xc0, 0x44, 0xd0, 0x14, - 0x03, 0xd1, 0xd6, 0xa8, 0x78, 0xa1, 0x67, 0x73, 0x14, 0x25, 0x35, 0xb7, 0xc0, 0xc9, 0x5b, 0xed, - 0xe8, 0x13, 0xbc, 0x53, 0xfd, 0xde, 0xa5, 0x07, 0xa3, 0xad, 0x93, 0x2b, 0x0e, 0xb1, 0xfb, 0xbc, - 0xfc, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x13, 0x85, 0x60, 0x25, 0x28, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_68327cc2832b2df4) +} + +var fileDescriptor_a_bit_of_everything_68327cc2832b2df4 = []byte{ + // 3251 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcb, 0x6f, 0x1b, 0x47, + 0x9a, 0x57, 0xb3, 0xa9, 0x57, 0xe9, 0x45, 0x95, 0x6c, 0x99, 0xa2, 0xe5, 0xa8, 0x4c, 0x3b, 0x49, + 0x9b, 0x31, 0xd9, 0x52, 0x4b, 0x76, 0x64, 0x06, 0x89, 0x97, 0xd4, 0xc3, 0x56, 0x6c, 0xcb, 0x72, + 0xdb, 0xf1, 0x06, 0x8e, 0x1d, 0xa1, 0x49, 0x16, 0xc5, 0xb6, 0xd8, 0x5d, 0x9d, 0xee, 0x6a, 0xd9, + 0x5c, 0x2e, 0x77, 0xb3, 0x0f, 0xec, 0x62, 0x37, 0x87, 0x05, 0x94, 0xdd, 0xc3, 0x3e, 0xb0, 0xc0, + 0x02, 0x8b, 0x05, 0x16, 0xc8, 0x61, 0x2e, 0x73, 0x0a, 0x30, 0x8f, 0xc3, 0x9c, 0xe6, 0xe6, 0x19, + 0xcc, 0x3f, 0x30, 0x73, 0x98, 0xbf, 0x60, 0x80, 0xc1, 0x00, 0x83, 0x41, 0x57, 0x77, 0x93, 0xdd, + 0x4d, 0xd2, 0x32, 0xed, 0x20, 0x17, 0xa9, 0xab, 0xea, 0xfb, 0xbe, 0xdf, 0x57, 0x5f, 0x7d, 0xf5, + 0x3d, 0x8a, 0x40, 0xc2, 0xcf, 0x15, 0xcd, 0xa8, 0x63, 0x4b, 0x34, 0x4c, 0x42, 0x89, 0xe8, 0x0d, + 0x8d, 0x92, 0xa8, 0xec, 0x97, 0x54, 0xba, 0x4f, 0xaa, 0xfb, 0xf8, 0x08, 0x9b, 0x0d, 0x5a, 0x53, + 0xf5, 0x83, 0x1c, 0xa3, 0x81, 0x4b, 0x07, 0xa6, 0x51, 0xce, 0x1d, 0x28, 0x14, 0x3f, 0x53, 0x1a, + 0x39, 0x5f, 0x40, 0xae, 0xcd, 0x9a, 0x5a, 0x3c, 0x20, 0xe4, 0xa0, 0x8e, 0x45, 0xc5, 0x50, 0x45, + 0x45, 0xd7, 0x09, 0x55, 0xa8, 0x4a, 0x74, 0xcb, 0x65, 0x4f, 0x21, 0x6f, 0x95, 0x8d, 0x4a, 0x76, + 0x55, 0xac, 0xaa, 0xb8, 0x5e, 0xd9, 0xd7, 0x14, 0xeb, 0xd0, 0xa3, 0x38, 0x1b, 0xa5, 0xc0, 0x9a, + 0x41, 0x1b, 0xde, 0xe2, 0x5b, 0xd1, 0xc5, 0x8a, 0x6d, 0x32, 0xf9, 0xde, 0xfa, 0xbb, 0x91, 0x1d, + 0x19, 0x0a, 0xad, 0x61, 0xdd, 0xd6, 0xd8, 0xc7, 0xbe, 0xf3, 0xe5, 0xeb, 0x11, 0x21, 0xb4, 0xec, + 0x92, 0xa8, 0x61, 0xcb, 0x52, 0x0e, 0xb0, 0x47, 0x71, 0xbe, 0x9b, 0x42, 0x8a, 0x90, 0x2c, 0x45, + 0xb5, 0xa1, 0xaa, 0x86, 0x2d, 0xaa, 0x68, 0x86, 0x47, 0x70, 0x99, 0xfd, 0x2b, 0x67, 0x0f, 0xb0, + 0x9e, 0xb5, 0x9e, 0x29, 0x07, 0x07, 0xd8, 0x14, 0x89, 0xc1, 0xec, 0xd1, 0x6d, 0x9b, 0xf4, 0x1f, + 0x52, 0x20, 0x51, 0x28, 0xaa, 0xf4, 0x6e, 0x75, 0xab, 0x6d, 0x75, 0xf8, 0x04, 0x4c, 0x59, 0xaa, + 0x7e, 0x50, 0xc7, 0xfb, 0x3a, 0xb6, 0x28, 0xae, 0x24, 0x17, 0x10, 0x27, 0x4c, 0x48, 0xeb, 0xb9, + 0x13, 0xce, 0x21, 0x17, 0x95, 0x94, 0xdb, 0x65, 0xfc, 0xf2, 0xa4, 0x2b, 0xce, 0x1d, 0xc1, 0x1a, + 0x88, 0xdb, 0xb6, 0x5a, 0x49, 0x72, 0x88, 0x13, 0xc6, 0x8b, 0x0f, 0x8e, 0x0b, 0xf7, 0xbe, 0xe4, + 0xb8, 0x7f, 0xe6, 0x6e, 0x7d, 0xa6, 0x64, 0xab, 0x85, 0xec, 0xf6, 0x72, 0xf6, 0xda, 0x93, 0xe6, + 0x7a, 0x2b, 0x1b, 0x1c, 0xae, 0x0d, 0x32, 0x5c, 0x91, 0x5a, 0x32, 0x43, 0x80, 0x7b, 0x60, 0xc4, + 0xdb, 0x41, 0x0c, 0xf1, 0x6f, 0xb4, 0x03, 0x4f, 0x0e, 0xfc, 0x18, 0x4c, 0x54, 0xeb, 0x44, 0xa1, + 0xfb, 0x47, 0x4a, 0xdd, 0xc6, 0x49, 0x1e, 0x71, 0x42, 0xac, 0x78, 0xe9, 0xb8, 0xf0, 0x8e, 0x34, + 0xbb, 0xed, 0xcc, 0x23, 0x36, 0x8f, 0x98, 0x87, 0xe5, 0xf9, 0xe5, 0x9c, 0xf4, 0x82, 0x0b, 0x32, + 0xc8, 0x80, 0x0d, 0x1e, 0x3a, 0xdf, 0xf0, 0x3c, 0x98, 0xac, 0x10, 0xbb, 0x54, 0xc7, 0x9e, 0xb0, + 0x38, 0xe2, 0x04, 0x4e, 0x9e, 0x70, 0xe7, 0x5c, 0x92, 0x25, 0x30, 0xa1, 0xea, 0xf4, 0xea, 0x9a, + 0x47, 0x31, 0x8c, 0x38, 0x81, 0x97, 0x01, 0x9b, 0x6a, 0xcb, 0xb0, 0x83, 0x14, 0x23, 0x88, 0x13, + 0xe2, 0xf2, 0x84, 0x1d, 0x20, 0x71, 0x65, 0xac, 0x4a, 0x1e, 0xc5, 0x28, 0xe2, 0x84, 0x61, 0x26, + 0x63, 0x55, 0x72, 0x09, 0x2e, 0x80, 0xa9, 0xaa, 0xfa, 0x1c, 0x57, 0xda, 0x42, 0xc6, 0x10, 0x27, + 0x8c, 0xc8, 0x93, 0xde, 0x64, 0x98, 0xa8, 0x2d, 0x67, 0x1c, 0x71, 0xc2, 0xa8, 0x47, 0xe4, 0x4b, + 0x3a, 0x07, 0x40, 0x89, 0x90, 0xba, 0x47, 0x01, 0x10, 0x27, 0x8c, 0xc9, 0xe3, 0xce, 0x4c, 0x5b, + 0x59, 0x8b, 0x9a, 0xaa, 0x7e, 0xe0, 0x11, 0x4c, 0x38, 0x0e, 0x20, 0x4f, 0xb8, 0x73, 0x6d, 0x65, + 0x4b, 0x0d, 0x8a, 0x2d, 0x8f, 0xe2, 0x1c, 0xe2, 0x84, 0x49, 0x19, 0xb0, 0xa9, 0xd0, 0x86, 0xdb, + 0x6a, 0x4c, 0x21, 0x4e, 0x98, 0x72, 0x37, 0xec, 0x6b, 0x71, 0x0b, 0x00, 0xe7, 0xd6, 0x79, 0x04, + 0xd3, 0x88, 0x13, 0xa6, 0xa5, 0xcb, 0x27, 0x9e, 0xfc, 0xae, 0xad, 0x61, 0x53, 0x2d, 0x6f, 0xe9, + 0xb6, 0x26, 0x8f, 0x3b, 0xfc, 0xae, 0xb0, 0x3d, 0x30, 0xd3, 0xbe, 0xc7, 0x9e, 0xc4, 0xb7, 0x98, + 0x44, 0xa1, 0x8f, 0x44, 0xff, 0xfa, 0xe7, 0xf6, 0x14, 0x5a, 0x63, 0xd2, 0xa6, 0x0c, 0xef, 0xcb, + 0x95, 0x68, 0x81, 0x79, 0xd7, 0x99, 0xf6, 0xa3, 0x82, 0x97, 0x98, 0xe0, 0x8f, 0x4e, 0x12, 0x7c, + 0xc7, 0x0d, 0x08, 0xbe, 0x7c, 0xcf, 0x45, 0xdb, 0x70, 0x73, 0x7a, 0x68, 0xec, 0x82, 0xbe, 0x0d, + 0xa6, 0xad, 0xf0, 0xf9, 0xcd, 0x20, 0x4e, 0x98, 0x91, 0xa7, 0xac, 0xd0, 0x01, 0xb6, 0xc9, 0xda, + 0xbe, 0x90, 0x40, 0x9c, 0x90, 0xf0, 0xc9, 0x02, 0x5e, 0x67, 0x05, 0x0f, 0x61, 0x16, 0x71, 0xc2, + 0xac, 0x3c, 0x61, 0x05, 0x0e, 0xc1, 0x23, 0x69, 0xcb, 0x81, 0x88, 0x13, 0xa0, 0x4b, 0xe2, 0x4b, + 0x91, 0xc0, 0x69, 0x13, 0x1b, 0x58, 0x71, 0x4c, 0x11, 0xf2, 0x8b, 0x39, 0xc4, 0x0b, 0xe3, 0xf2, + 0x9c, 0xbf, 0x78, 0x3f, 0xe0, 0x1f, 0xd7, 0xc0, 0x04, 0xd1, 0xb1, 0x93, 0x24, 0x9c, 0x08, 0x9d, + 0x3c, 0xc5, 0x02, 0xd3, 0x7c, 0xce, 0x0d, 0x8a, 0x39, 0x3f, 0x28, 0xe6, 0xb6, 0x9c, 0xd5, 0x9b, + 0x43, 0x32, 0x60, 0xc4, 0x6c, 0x04, 0x2f, 0x80, 0x49, 0x97, 0xd5, 0xc5, 0x4a, 0x9e, 0x76, 0xbc, + 0xef, 0xe6, 0x90, 0xec, 0x0a, 0x74, 0x41, 0xe0, 0x63, 0x30, 0xae, 0x29, 0x86, 0xa7, 0xc7, 0x3c, + 0x0b, 0x1a, 0xd7, 0x07, 0x0f, 0x1a, 0x77, 0x14, 0x83, 0xa9, 0xbb, 0xa5, 0x53, 0xb3, 0x21, 0x8f, + 0x69, 0xde, 0x10, 0x3e, 0x07, 0x73, 0x9a, 0x62, 0x18, 0xd1, 0xfd, 0x9e, 0x61, 0x38, 0x37, 0x5f, + 0x0b, 0xc7, 0x08, 0xd9, 0xc7, 0x05, 0x9c, 0xd5, 0xa2, 0xf3, 0x01, 0x64, 0xcf, 0xf7, 0x5c, 0xe4, + 0xe4, 0x9b, 0x21, 0xbb, 0x9e, 0xd7, 0x8d, 0x1c, 0x98, 0x87, 0x79, 0x90, 0xd4, 0x89, 0xbe, 0x41, + 0xf4, 0x23, 0xac, 0x3b, 0x99, 0x47, 0xa9, 0xef, 0x2a, 0x9a, 0x1b, 0xde, 0x92, 0x29, 0x16, 0x00, + 0xfa, 0xae, 0xc3, 0x0d, 0x30, 0xd3, 0x4e, 0x6f, 0x9e, 0xc6, 0x67, 0xd9, 0x89, 0xa7, 0xba, 0x4e, + 0xfc, 0x81, 0x4f, 0x27, 0x4f, 0xb7, 0x59, 0x5c, 0x21, 0x8f, 0x41, 0xdb, 0x93, 0x82, 0x97, 0x6d, + 0x11, 0xf1, 0x03, 0xc7, 0x85, 0x59, 0x5f, 0x50, 0xe7, 0x62, 0x7d, 0xc3, 0x81, 0x64, 0x58, 0x7c, + 0x27, 0xc9, 0x26, 0xd1, 0xe0, 0x18, 0xc5, 0xcd, 0xe3, 0x42, 0x21, 0x73, 0x56, 0xf6, 0x44, 0x22, + 0xdd, 0x5d, 0x42, 0x8e, 0x68, 0x44, 0x55, 0x5a, 0xc7, 0x52, 0xba, 0xf7, 0x62, 0x05, 0x5b, 0x65, + 0x53, 0x65, 0x99, 0x3e, 0x27, 0xcf, 0x07, 0x35, 0x2d, 0xb4, 0x35, 0x82, 0xff, 0xca, 0x81, 0xd3, + 0x1d, 0x23, 0x04, 0x75, 0x3d, 0x3f, 0x78, 0x9c, 0x2c, 0x4a, 0xc7, 0x05, 0x31, 0x03, 0x77, 0xbb, + 0x55, 0x5c, 0xd8, 0xed, 0xab, 0xd9, 0x5c, 0x3b, 0xb6, 0x06, 0xd4, 0x3a, 0x02, 0xa9, 0x68, 0x28, + 0x08, 0xa8, 0x96, 0x76, 0xe2, 0x41, 0x71, 0xfd, 0xb8, 0x70, 0x25, 0x73, 0xba, 0xbd, 0x77, 0x97, + 0xcc, 0xc3, 0x5b, 0x8c, 0x4e, 0x87, 0x20, 0x93, 0xe1, 0x48, 0x12, 0xc0, 0xfd, 0x11, 0x17, 0x00, + 0xf6, 0x6e, 0x46, 0x00, 0xf8, 0xc2, 0x9b, 0x55, 0x0d, 0xc5, 0xed, 0xe3, 0xc2, 0x46, 0xa6, 0xa3, + 0x9b, 0x0b, 0x80, 0x48, 0xe9, 0x29, 0x2e, 0x53, 0x4f, 0xf3, 0x0b, 0x7d, 0x56, 0x7b, 0x6f, 0xc0, + 0x95, 0x1b, 0xd8, 0xc0, 0x7f, 0x72, 0x60, 0xb6, 0x5b, 0xef, 0x8b, 0x6f, 0x56, 0xaf, 0x15, 0xd7, + 0x8e, 0x0b, 0x2b, 0x99, 0xb9, 0xdd, 0x1e, 0xea, 0xa6, 0x76, 0xfb, 0x6b, 0x99, 0xd0, 0x23, 0xda, + 0xa5, 0x7e, 0xca, 0x81, 0x11, 0xaf, 0xe8, 0x83, 0x20, 0xae, 0x2b, 0x1a, 0x76, 0x8b, 0x3e, 0x99, + 0x7d, 0xc3, 0x79, 0x30, 0xa2, 0x68, 0xc4, 0xd6, 0x69, 0x32, 0xc6, 0xb2, 0xb8, 0x37, 0x82, 0xf7, + 0x40, 0x8c, 0x1c, 0xb2, 0xda, 0x6a, 0x5a, 0x2a, 0xbc, 0xee, 0x26, 0x72, 0x9b, 0x18, 0x1b, 0xec, + 0xd6, 0xc6, 0xc8, 0x61, 0x7a, 0x09, 0x8c, 0xf9, 0x63, 0x38, 0x0e, 0x86, 0xb7, 0x0b, 0xb7, 0xef, + 0x6f, 0x25, 0x86, 0xe0, 0x18, 0x88, 0x3f, 0x90, 0x3f, 0xd9, 0x4a, 0x70, 0xf9, 0x33, 0xc7, 0x85, + 0x53, 0x12, 0x84, 0x89, 0x26, 0x4a, 0x93, 0xc3, 0x74, 0x1e, 0xa5, 0x9d, 0xf9, 0x34, 0x6a, 0xa5, + 0x54, 0x30, 0x15, 0x0a, 0xe7, 0x30, 0x01, 0xf8, 0x43, 0xdc, 0xf0, 0x36, 0xe2, 0x7c, 0xc2, 0x22, + 0x18, 0x76, 0x63, 0x4a, 0xec, 0x35, 0x6a, 0x0d, 0x97, 0x35, 0x1f, 0x5b, 0xe7, 0x52, 0x9b, 0x60, + 0xbe, 0x77, 0x44, 0xef, 0x81, 0x79, 0x2a, 0x88, 0x39, 0x1e, 0x94, 0xf2, 0x57, 0xbe, 0x94, 0x68, + 0x74, 0xee, 0x21, 0x65, 0x37, 0x28, 0xe5, 0x4d, 0xea, 0xe3, 0x0e, 0x7e, 0xfe, 0xdf, 0x63, 0xc7, + 0x85, 0x7f, 0x8b, 0x81, 0xbf, 0xe7, 0x32, 0x73, 0x05, 0x54, 0x52, 0x29, 0x22, 0x55, 0xd4, 0x69, + 0xe9, 0xa4, 0x9d, 0x1d, 0x9d, 0xfa, 0x91, 0xbe, 0x81, 0xca, 0x44, 0x33, 0xea, 0x6a, 0x99, 0x5d, + 0x00, 0xaf, 0xd1, 0x41, 0xb4, 0x61, 0x60, 0x44, 0x09, 0x2a, 0x93, 0x23, 0x6c, 0x22, 0x4d, 0xd1, + 0x1b, 0xa8, 0x8a, 0x15, 0x6a, 0x9b, 0xd8, 0x72, 0x64, 0xed, 0xf9, 0x21, 0xff, 0x05, 0xc7, 0xaa, + 0xfc, 0x17, 0x5c, 0xb0, 0x46, 0x7e, 0xc1, 0x85, 0x8a, 0xea, 0xcc, 0x43, 0x70, 0x71, 0x5b, 0xd5, + 0x2b, 0x88, 0xd8, 0x14, 0x69, 0xc4, 0xc4, 0x48, 0x29, 0x39, 0x9f, 0x5d, 0x3d, 0x4f, 0xae, 0x46, + 0xa9, 0x61, 0xe5, 0x45, 0xf1, 0x40, 0xa5, 0x35, 0xbb, 0x94, 0x2b, 0x13, 0x4d, 0x74, 0x8c, 0x91, + 0xc5, 0x65, 0x62, 0x35, 0x2c, 0x8a, 0xbd, 0xa1, 0x67, 0x1b, 0x69, 0x0d, 0x4a, 0x4d, 0x94, 0x76, + 0xf0, 0x1d, 0x67, 0x59, 0x2e, 0x57, 0x57, 0xaf, 0xae, 0xe0, 0x95, 0xec, 0x5a, 0x69, 0x6d, 0x2d, + 0xbb, 0xb6, 0xbe, 0x5a, 0xc9, 0x2a, 0x2b, 0x57, 0xae, 0x65, 0xaf, 0xac, 0x55, 0x94, 0x52, 0xa5, + 0xfa, 0x3e, 0x5e, 0x5f, 0x59, 0x4b, 0xa3, 0x56, 0x71, 0xca, 0x2f, 0x5f, 0x98, 0x72, 0xe9, 0x3f, + 0x8e, 0x81, 0x64, 0x54, 0x13, 0x3f, 0x1e, 0xc0, 0x6b, 0x60, 0x81, 0x15, 0x88, 0xed, 0xf8, 0x14, + 0x6c, 0x3c, 0x38, 0xc4, 0x0b, 0x31, 0x79, 0xde, 0x21, 0xf0, 0x19, 0xb6, 0x3b, 0x9d, 0xc5, 0x07, + 0x20, 0x15, 0x66, 0x0d, 0xf5, 0x19, 0x4e, 0x2f, 0xc4, 0xc9, 0x67, 0x82, 0xbc, 0x9b, 0x81, 0x9e, + 0xa3, 0x0b, 0x37, 0x58, 0xc6, 0xf1, 0x88, 0x17, 0xf8, 0x30, 0xee, 0x4e, 0xa7, 0xa2, 0xeb, 0xc2, + 0x0d, 0xf5, 0x26, 0x71, 0xc4, 0x0b, 0xf1, 0x30, 0xee, 0x27, 0x81, 0x72, 0xb0, 0x17, 0x6e, 0xbb, + 0xc2, 0x1c, 0x46, 0xbc, 0x30, 0xdc, 0x85, 0xeb, 0x17, 0x9b, 0x1f, 0x82, 0xb3, 0x11, 0x53, 0x85, + 0x6a, 0xd8, 0x11, 0xc4, 0x0b, 0x23, 0x72, 0x32, 0x64, 0xac, 0x60, 0x39, 0xdb, 0x9b, 0x3d, 0xd0, + 0x31, 0xf1, 0xc2, 0x68, 0x0f, 0x76, 0x1f, 0xfd, 0x7d, 0x90, 0x0c, 0xb3, 0x07, 0x7a, 0xa0, 0x31, + 0xc4, 0x0b, 0x63, 0xf2, 0xe9, 0x20, 0x6f, 0xb1, 0xdd, 0x0f, 0x75, 0x99, 0x2b, 0x54, 0x15, 0x8e, + 0xb3, 0x2a, 0x38, 0x64, 0xae, 0x70, 0x25, 0x1c, 0x31, 0x57, 0xb0, 0x6f, 0x02, 0x88, 0x17, 0x26, + 0xc3, 0xe6, 0x2a, 0x76, 0x7a, 0xa8, 0x9e, 0xc7, 0xd4, 0xde, 0xee, 0x04, 0xe2, 0x85, 0xa9, 0xee, + 0x63, 0xf2, 0x77, 0x8b, 0xa3, 0xbb, 0x0d, 0xd4, 0x54, 0x93, 0xaf, 0x51, 0x53, 0x85, 0x6c, 0xd3, + 0xa9, 0xab, 0xae, 0x83, 0xc5, 0x88, 0x6d, 0xc2, 0x87, 0x32, 0x85, 0x78, 0x61, 0x46, 0x5e, 0x08, + 0x59, 0x27, 0xd4, 0xca, 0xf4, 0x11, 0xd0, 0x76, 0x8a, 0x69, 0xc4, 0x0b, 0x89, 0x5e, 0x02, 0xfa, + 0x3a, 0x73, 0xa8, 0xe5, 0x99, 0x41, 0xbc, 0x30, 0x1b, 0x39, 0x9d, 0x80, 0x95, 0x7a, 0x32, 0x07, + 0x9a, 0x2a, 0x5e, 0x80, 0xdd, 0xcc, 0x1e, 0x72, 0xbe, 0x76, 0x5c, 0xc0, 0x52, 0x19, 0x2a, 0x4d, + 0x94, 0xee, 0xe7, 0x58, 0xe9, 0x3c, 0xfa, 0x8c, 0x9a, 0x36, 0xbe, 0x8c, 0xdc, 0xbf, 0x55, 0xa5, + 0x6e, 0x79, 0x83, 0x27, 0x97, 0xa3, 0x6c, 0x01, 0xbd, 0x1d, 0xbe, 0x95, 0xcb, 0x48, 0xba, 0x8c, + 0x56, 0x9f, 0xa0, 0x56, 0x3a, 0x05, 0xe2, 0x45, 0x52, 0x69, 0xf4, 0xca, 0xce, 0xe9, 0xc7, 0x60, + 0xc6, 0xeb, 0x34, 0xff, 0x5c, 0xa5, 0x35, 0x46, 0x36, 0x0d, 0x62, 0xfe, 0xbb, 0x8d, 0x1c, 0x53, + 0x9d, 0x10, 0x15, 0xaf, 0x28, 0x54, 0xf1, 0xb2, 0xc7, 0xdb, 0x27, 0x9e, 0xbb, 0x23, 0x44, 0x66, + 0x2c, 0xe9, 0xaf, 0x39, 0x30, 0xf3, 0x89, 0x51, 0x51, 0x28, 0x7e, 0x28, 0xc9, 0xf8, 0x0b, 0x1b, + 0x5b, 0x14, 0x6e, 0x00, 0x5e, 0x29, 0xb9, 0x4a, 0x4c, 0x48, 0x2b, 0x03, 0xe7, 0x22, 0xd9, 0xe1, + 0x86, 0x1f, 0x80, 0x09, 0x9b, 0xc9, 0x65, 0x0f, 0x7c, 0x9e, 0x6a, 0xdd, 0xfd, 0xc2, 0xb6, 0x8a, + 0xeb, 0x95, 0x3b, 0x8a, 0x75, 0x28, 0x03, 0x97, 0xdc, 0xf9, 0xce, 0x20, 0x30, 0x11, 0xf0, 0x4d, + 0xa7, 0x3c, 0x78, 0xb4, 0x25, 0xdf, 0x4d, 0x0c, 0xc1, 0x51, 0xc0, 0xdf, 0xdd, 0xdd, 0x4a, 0x70, + 0xd2, 0xff, 0x9e, 0x03, 0x67, 0xa2, 0xc0, 0xf7, 0xb1, 0x79, 0xa4, 0x96, 0x31, 0xfc, 0x9f, 0x38, + 0x18, 0xd9, 0x30, 0x1d, 0x9b, 0xc3, 0xc1, 0xb5, 0x4f, 0x0d, 0xce, 0x92, 0xfe, 0x01, 0xff, 0xb7, + 0xbf, 0xf8, 0xcd, 0xd7, 0xb1, 0xff, 0xe7, 0xd3, 0xff, 0xc7, 0x8b, 0x47, 0x2b, 0xfe, 0x63, 0x6a, + 0xaf, 0xa7, 0x54, 0xb1, 0x19, 0x48, 0x1f, 0x2d, 0xb1, 0x19, 0xcc, 0x08, 0x2d, 0xb1, 0x19, 0xf0, + 0xce, 0x96, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, 0x4c, 0xb1, 0x69, 0x87, 0x16, 0x9a, 0x01, 0x4f, + 0x6a, 0x89, 0xcd, 0xd0, 0x85, 0xf2, 0xc7, 0x81, 0xf5, 0x8e, 0xbb, 0xb6, 0xc4, 0x66, 0x30, 0xb6, + 0x7d, 0x68, 0x51, 0xd3, 0x30, 0x71, 0x55, 0x7d, 0x2e, 0x66, 0x5a, 0x2e, 0x48, 0x80, 0xcd, 0x8a, + 0xca, 0xb1, 0xa2, 0x40, 0x56, 0x84, 0x21, 0xac, 0x64, 0xbf, 0x76, 0xb2, 0x25, 0x36, 0x3b, 0xb1, + 0xaa, 0x25, 0x36, 0x23, 0xcf, 0x2f, 0x0e, 0x67, 0xcf, 0x77, 0x99, 0x96, 0xd8, 0xec, 0x11, 0xec, + 0x42, 0xd2, 0x02, 0xc5, 0x77, 0x90, 0xba, 0xab, 0x95, 0x69, 0xc1, 0xff, 0xe6, 0x00, 0x70, 0x7d, + 0x84, 0xdd, 0xa8, 0xef, 0xc7, 0x4f, 0x32, 0xcc, 0x4d, 0x2e, 0xa6, 0x97, 0x4e, 0x70, 0x92, 0x3c, + 0x97, 0x81, 0x7f, 0x09, 0x46, 0x6e, 0x13, 0x72, 0x68, 0x1b, 0x70, 0x26, 0x67, 0xd9, 0x25, 0x29, + 0xb7, 0x53, 0xf1, 0xc2, 0xc0, 0xeb, 0x20, 0xe7, 0x18, 0xb2, 0x00, 0xdf, 0x39, 0xd1, 0x3d, 0x9d, + 0x52, 0xaa, 0x05, 0xff, 0x81, 0x03, 0x23, 0x6e, 0x58, 0x78, 0x1d, 0xd3, 0xf4, 0x79, 0x08, 0x4a, + 0xaf, 0x30, 0x2d, 0xde, 0x4b, 0xbd, 0xa2, 0x16, 0x8e, 0x19, 0x7e, 0xc2, 0x81, 0x31, 0x3f, 0x3e, + 0xc1, 0xe5, 0x13, 0x55, 0x89, 0x84, 0xb2, 0xbe, 0x9a, 0x3c, 0x65, 0x9a, 0x54, 0x52, 0x19, 0xf1, + 0x48, 0x7a, 0xb9, 0x26, 0x4a, 0x09, 0xe7, 0x5c, 0x6d, 0x9c, 0xb0, 0xf6, 0x68, 0x45, 0x1a, 0x94, + 0x05, 0xfe, 0x17, 0x07, 0x92, 0x7b, 0x0a, 0x2d, 0xd7, 0x9c, 0xf8, 0xdd, 0x8e, 0x77, 0x3b, 0x3a, + 0x73, 0xbc, 0xef, 0x6e, 0x4b, 0x57, 0xd9, 0x96, 0x96, 0xa5, 0xf7, 0xc4, 0x23, 0x49, 0x79, 0x55, + 0x05, 0xb9, 0x0c, 0xfc, 0x17, 0x0e, 0x8c, 0x6c, 0xe2, 0x3a, 0xa6, 0xb8, 0xdb, 0xd3, 0xfa, 0x61, + 0x3d, 0x3e, 0x2e, 0xbc, 0x57, 0xba, 0x04, 0xa6, 0x01, 0x28, 0x18, 0xea, 0x2d, 0xdc, 0x28, 0xd8, + 0xb4, 0x06, 0x87, 0xc0, 0x19, 0x30, 0x72, 0xd7, 0xf9, 0x94, 0xe0, 0x14, 0x88, 0x9b, 0x58, 0xa9, + 0x80, 0xe1, 0x67, 0xa6, 0x4a, 0xb1, 0xeb, 0x7c, 0x99, 0x57, 0x75, 0xbe, 0x5f, 0x73, 0x60, 0xec, + 0x06, 0xa6, 0xf7, 0x6c, 0x6c, 0x36, 0xbe, 0x4b, 0xf7, 0xfb, 0x8a, 0x3b, 0x2e, 0x3c, 0x48, 0xef, + 0x82, 0xc5, 0x5e, 0x9d, 0x48, 0x1b, 0x70, 0xc0, 0x0e, 0xe4, 0x53, 0xae, 0x34, 0xc4, 0xf6, 0x97, + 0x83, 0x97, 0x4f, 0xda, 0xdf, 0x17, 0x0e, 0x80, 0xbf, 0xcb, 0xaf, 0x86, 0x41, 0xe2, 0x06, 0xa6, + 0x7e, 0xe1, 0xe1, 0x82, 0x5f, 0x1b, 0x3c, 0xdb, 0x7a, 0xfc, 0xa9, 0xd7, 0x67, 0x4d, 0x7f, 0x19, + 0x67, 0x3b, 0xf8, 0x3d, 0x0f, 0x7f, 0x77, 0x52, 0xfe, 0x6a, 0x57, 0x33, 0x5e, 0xdc, 0xee, 0xd5, + 0x15, 0xb5, 0xa2, 0x6b, 0x91, 0x24, 0xd7, 0xb7, 0xad, 0xe9, 0x5a, 0xb3, 0x5f, 0xb6, 0x18, 0x4e, + 0x3e, 0x2f, 0x69, 0x3c, 0x7a, 0xaf, 0xf6, 0xe5, 0x0d, 0xa5, 0xcb, 0xfe, 0x8d, 0x41, 0x37, 0x5f, + 0xa7, 0xf0, 0xef, 0xb9, 0x91, 0xbe, 0x80, 0xdd, 0xd9, 0xb0, 0x4f, 0xb5, 0xdd, 0x67, 0xb9, 0xef, + 0x3e, 0xad, 0x97, 0xa1, 0x86, 0xb2, 0x35, 0xfc, 0x19, 0x0f, 0xe2, 0x5b, 0xe5, 0x1a, 0x81, 0xfd, + 0x7e, 0x4f, 0xb1, 0xec, 0x52, 0xce, 0xed, 0x7b, 0xfc, 0xe0, 0xf0, 0xca, 0x94, 0xe9, 0xdf, 0xc6, + 0x8e, 0x0b, 0x7f, 0x13, 0x03, 0x93, 0xb8, 0x5c, 0x23, 0xc8, 0x72, 0xab, 0x34, 0x30, 0xc6, 0x46, + 0xa6, 0x51, 0x86, 0xb3, 0xf7, 0x6d, 0x4d, 0x53, 0xcc, 0x46, 0x1e, 0x6d, 0x79, 0x53, 0xa9, 0xc4, + 0x66, 0xe7, 0x45, 0x8b, 0xcd, 0xa6, 0x37, 0x01, 0x0c, 0x5f, 0x5b, 0xa6, 0xed, 0x80, 0x97, 0xf5, + 0xe3, 0xeb, 0x80, 0xbf, 0xb2, 0xbc, 0x0a, 0xd7, 0xc1, 0x55, 0x19, 0x53, 0xdb, 0xd4, 0x71, 0x05, + 0x3d, 0xab, 0x61, 0x1d, 0xd1, 0x1a, 0x46, 0x26, 0xb6, 0x88, 0x6d, 0x96, 0x31, 0x52, 0x2d, 0x44, + 0xb1, 0x66, 0x10, 0x53, 0x31, 0xd5, 0x7a, 0x03, 0xd9, 0xba, 0x72, 0xa4, 0xa8, 0x75, 0xa5, 0x54, + 0xc7, 0xb9, 0x8f, 0x3f, 0x00, 0xfc, 0xda, 0xf2, 0x1a, 0x5c, 0x03, 0x99, 0x97, 0x08, 0xa8, 0x10, + 0x6c, 0x21, 0x9d, 0x50, 0x84, 0x9f, 0xab, 0x16, 0xcd, 0xc1, 0x11, 0x10, 0xff, 0x8f, 0x18, 0xe7, + 0x16, 0x89, 0x4f, 0x4e, 0x0e, 0x13, 0x8e, 0x61, 0xc4, 0xa6, 0x7b, 0x30, 0x8f, 0x16, 0xd2, 0x89, + 0x60, 0xc2, 0x71, 0xd6, 0xf2, 0xee, 0x2b, 0xcf, 0x23, 0x08, 0xbb, 0x96, 0xe0, 0x0f, 0x39, 0x30, + 0xb9, 0x89, 0xb1, 0xc1, 0x7e, 0x76, 0x72, 0x26, 0xbe, 0x9f, 0xca, 0xe6, 0x3a, 0xdb, 0xdb, 0xb5, + 0xf4, 0xda, 0x89, 0x21, 0x3e, 0xf4, 0x8b, 0x76, 0xce, 0xe9, 0x70, 0x58, 0x16, 0x2a, 0x00, 0xb0, + 0x4b, 0x8a, 0xaa, 0x5e, 0x51, 0xf5, 0x03, 0x0b, 0x2e, 0x74, 0x45, 0xf0, 0x4d, 0xef, 0xc7, 0xfe, + 0xbe, 0xc1, 0x7d, 0x08, 0x3e, 0x04, 0xa3, 0x0f, 0x54, 0x0d, 0x13, 0x9b, 0xc2, 0x3e, 0x44, 0x7d, + 0x99, 0xcf, 0x32, 0xf5, 0x4f, 0xc3, 0xb9, 0xa0, 0x3d, 0xa9, 0x27, 0xac, 0x06, 0x12, 0x5b, 0xa6, + 0x49, 0x4c, 0x27, 0x7d, 0x6f, 0x62, 0xaa, 0xa8, 0x75, 0x6b, 0x60, 0x80, 0x8b, 0x0c, 0xe0, 0x2d, + 0xb8, 0x18, 0x3a, 0x30, 0x47, 0xea, 0x33, 0x95, 0xd6, 0x2a, 0x9e, 0xd4, 0x7f, 0xe4, 0x00, 0xbc, + 0x81, 0x69, 0xb4, 0xdd, 0x3b, 0xb9, 0x46, 0x88, 0x70, 0xf4, 0x55, 0xe3, 0x5d, 0xa6, 0xc6, 0xf9, + 0xf4, 0x42, 0x50, 0x0d, 0x47, 0x83, 0x12, 0xa9, 0x34, 0xc4, 0xa6, 0x53, 0x11, 0xb0, 0xb6, 0x10, + 0xfe, 0x1d, 0x07, 0x66, 0xf7, 0x88, 0x45, 0x1d, 0x89, 0x8c, 0x95, 0x29, 0xf2, 0x6a, 0x9d, 0x65, + 0x5f, 0x74, 0x91, 0xa1, 0x5f, 0x4a, 0x5f, 0x0c, 0xa2, 0x1b, 0xc4, 0xa2, 0x8e, 0x06, 0xec, 0x87, + 0x44, 0x57, 0x0d, 0xdf, 0x29, 0x52, 0x3f, 0xe6, 0x8e, 0x0b, 0xdf, 0x72, 0xb0, 0xda, 0xa7, 0xd1, + 0x0b, 0x3e, 0x7b, 0xa3, 0x6c, 0x16, 0x3d, 0xab, 0xa9, 0xe5, 0x1a, 0xb2, 0x6a, 0xc4, 0xae, 0x57, + 0xd8, 0xf5, 0x2b, 0x61, 0x64, 0x5b, 0xb8, 0x82, 0x54, 0x1d, 0x19, 0x75, 0xa5, 0x8c, 0x11, 0xa9, + 0xb2, 0x8b, 0x5a, 0x21, 0x65, 0x5b, 0xc3, 0xba, 0xdb, 0x0b, 0xa0, 0x32, 0xd1, 0x9c, 0xc1, 0xf9, + 0xd4, 0x3d, 0xb0, 0xd4, 0xab, 0x32, 0x70, 0xae, 0x91, 0xdf, 0x5a, 0x0e, 0xfa, 0x3c, 0xf9, 0x14, + 0x9c, 0x2a, 0x2b, 0x1a, 0xae, 0x6f, 0x28, 0x16, 0xf6, 0x64, 0x38, 0x7d, 0x10, 0x94, 0xc1, 0xb0, + 0xfb, 0x6b, 0xe8, 0xa0, 0x8e, 0xb4, 0xc0, 0x6c, 0x38, 0x07, 0x67, 0x43, 0x8e, 0xe4, 0x2c, 0x49, + 0x9f, 0x83, 0xc5, 0x82, 0x4e, 0x68, 0x0d, 0x9b, 0x1e, 0x92, 0x73, 0x78, 0x81, 0x4b, 0xf5, 0x51, + 0xe8, 0x8a, 0x0d, 0x0a, 0x3c, 0x54, 0xfc, 0x76, 0xf4, 0xb8, 0xf0, 0xcd, 0x28, 0xfc, 0x25, 0x07, + 0xe6, 0x0a, 0xa8, 0xe8, 0x3e, 0x28, 0x07, 0x42, 0xc0, 0xa7, 0xe0, 0xd4, 0x81, 0xbc, 0xb7, 0x91, + 0xbd, 0xe1, 0x6e, 0x1d, 0x19, 0x26, 0x79, 0x8a, 0xcb, 0x74, 0x50, 0x93, 0xa5, 0x12, 0x3a, 0xd1, + 0xf1, 0x9f, 0x79, 0x5b, 0x73, 0xa8, 0x33, 0x9f, 0x83, 0x53, 0xc5, 0xfb, 0x9b, 0x68, 0x35, 0xbb, + 0x51, 0x57, 0x6c, 0x0b, 0xa3, 0xdb, 0x6a, 0x19, 0xeb, 0x16, 0x86, 0xdb, 0x83, 0x49, 0x16, 0x4b, + 0x75, 0x52, 0x12, 0x35, 0xc5, 0xa2, 0xd8, 0x14, 0x6f, 0xef, 0x6c, 0x6c, 0xed, 0xde, 0xdf, 0xca, + 0xd1, 0xe7, 0x54, 0xe2, 0x57, 0x72, 0xcb, 0x19, 0x9e, 0x8b, 0xc5, 0xa5, 0x84, 0x62, 0xb8, 0xcf, + 0xe0, 0x2a, 0xd1, 0xc5, 0xa7, 0x16, 0xd1, 0xa5, 0xf9, 0xe0, 0xcc, 0xf3, 0x6c, 0x95, 0x90, 0xac, + 0xa6, 0x6a, 0x38, 0xdf, 0x45, 0x99, 0xef, 0x43, 0x29, 0xef, 0x39, 0x19, 0x63, 0x15, 0xee, 0x80, + 0x1b, 0xdd, 0x19, 0xc3, 0xb6, 0xb0, 0xd9, 0xc9, 0x16, 0x35, 0xe5, 0x08, 0x23, 0x03, 0x9b, 0x9a, + 0x6a, 0x59, 0x8e, 0x63, 0x52, 0x82, 0x94, 0x72, 0x19, 0x5b, 0x56, 0x28, 0xbb, 0xe4, 0xe4, 0x37, + 0xc8, 0x41, 0xa3, 0xf2, 0x4d, 0xc0, 0xaf, 0xad, 0xac, 0xc3, 0x02, 0x98, 0xda, 0x79, 0x57, 0x43, + 0x0a, 0xa2, 0x58, 0x31, 0x08, 0xcd, 0xc1, 0x65, 0x90, 0x4b, 0x0d, 0xf4, 0x62, 0xf8, 0xe8, 0x9f, + 0x62, 0x60, 0x06, 0x8c, 0x17, 0x15, 0x4b, 0x2d, 0xb3, 0xfa, 0x3f, 0x36, 0xc6, 0x81, 0x73, 0xa1, + 0x8e, 0x60, 0x66, 0x2c, 0x96, 0x1a, 0xff, 0x34, 0x5b, 0xd8, 0xdb, 0xc9, 0xde, 0xc2, 0x0d, 0x14, + 0x03, 0xbf, 0xe2, 0xda, 0x1d, 0xc2, 0xcf, 0xb9, 0x31, 0x5e, 0x88, 0x4b, 0x17, 0xfc, 0x33, 0x0c, + 0x1c, 0xb8, 0x48, 0x14, 0x9b, 0xd6, 0x44, 0xe7, 0x0f, 0x31, 0xd5, 0xbf, 0xc0, 0xf9, 0xa5, 0xfe, + 0x44, 0x94, 0x1c, 0x62, 0xbd, 0xf8, 0xd7, 0x20, 0xe5, 0x36, 0x1c, 0x10, 0xde, 0x30, 0x15, 0x9d, + 0x5a, 0xc8, 0x19, 0x78, 0xd6, 0x03, 0x8b, 0x5e, 0x1b, 0x02, 0xe7, 0xbc, 0x45, 0x36, 0xf2, 0x57, + 0x37, 0xc0, 0xb0, 0x52, 0xd1, 0x54, 0x1d, 0xe6, 0x43, 0xac, 0x7a, 0x25, 0x44, 0xc6, 0x0e, 0xc3, + 0x21, 0x53, 0x2d, 0xea, 0x64, 0xa2, 0x23, 0x8c, 0x54, 0xbd, 0x4a, 0x4c, 0x8d, 0x9d, 0x77, 0x69, + 0x09, 0x4c, 0x05, 0x4d, 0x31, 0x14, 0x6d, 0x8d, 0x4a, 0x97, 0xfa, 0x36, 0x47, 0x51, 0x52, 0x73, + 0x07, 0x9c, 0xb9, 0xd3, 0x89, 0x3e, 0xc1, 0x3b, 0x35, 0xe8, 0x5d, 0x7a, 0x34, 0xde, 0x3e, 0xb9, + 0xd2, 0x08, 0xbb, 0xcf, 0xab, 0x7f, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x54, 0x0b, 0x85, 0xbe, 0xf9, + 0x27, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index b7e7c012e57..e9e8855f877 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -33,7 +33,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "repeated_enum_value": 18, "repeated_enum_value_annotation": 19, "enum_value_annotation": 20, "repeated_string_annotation": 21}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "repeated_enum_value": 18, "enum_value_annotation": 19, "repeated_string_annotation": 20}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -270,23 +270,6 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run } protoReq.RepeatedEnumValue = s - val, ok = pathParams["repeated_enum_value_annotation"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_enum_value_annotation") - } - - es, err = runtime.EnumSlice(val, ",", NumericEnum_value) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_enum_value_annotation", err) - } - - s := make([]NumericEnum, len(es)) - for i, v := range es { - s[i] = NumericEnum(v) - } - protoReq.RepeatedEnumValueAnnotation = s - val, ok = pathParams["enum_value_annotation"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value_annotation") @@ -1388,7 +1371,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24, 1, 0, 4, 1, 5, 25, 1, 0, 4, 1, 5, 26}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "repeated_enum_value", "repeated_enum_value_annotation", "enum_value_annotation", "repeated_string_annotation"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24, 1, 0, 4, 1, 5, 25}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "repeated_enum_value", "enum_value_annotation", "repeated_string_annotation"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 82af8e0414f..1fd471575a5 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -204,7 +204,7 @@ message ABitOfEverything { repeated NumericEnum repeated_enum_value = 28; // repeated numeric enum comment (This comment is overridden by the field annotation) - repeated NumericEnum repeated_enum_value_annotation = 32 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated numeric enum title", description: "Repeated numeric enum description."}]; + repeated NumericEnum repeated_enum_annotation = 32 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated numeric enum title", description: "Repeated numeric enum description."}]; // numeric enum comment (This comment is overridden by the field annotation) NumericEnum enum_value_annotation = 33 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Numeric enum title", description: "Numeric enum description."}]; @@ -285,7 +285,7 @@ service ABitOfEverythingService { // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 48a97db32a9..af0b88fd77c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -364,7 +364,7 @@ } }, { - "name": "repeated_enum_value_annotation", + "name": "repeated_enum_annotation", "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -437,7 +437,7 @@ } } }, - "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{repeated_enum_value_annotation}/{enum_value_annotation}/{repeated_string_annotation}": { + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -618,22 +618,6 @@ "collectionFormat": "csv", "minItems": 1 }, - { - "name": "repeated_enum_value_annotation", - "description": "Repeated numeric enum description.", - "in": "path", - "required": true, - "type": "array", - "items": { - "type": "string", - "enum": [ - "ZERO", - "ONE" - ] - }, - "collectionFormat": "csv", - "minItems": 1 - }, { "name": "enum_value_annotation", "description": "Numeric enum description.", @@ -1688,7 +1672,7 @@ }, "title": "repeated enum value. it is comma-separated in query" }, - "repeated_enum_value_annotation": { + "repeated_enum_annotation": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 581ae1fd2f1..4418cbb5ce3 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -261,7 +261,7 @@ }, "title": "repeated enum value. it is comma-separated in query" }, - "repeated_enum_value_annotation": { + "repeated_enum_annotation": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" From 2908bf052ca9690cf4fda97f4ba0267f66886b2e Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 17:47:00 -0600 Subject: [PATCH 0107/1518] 863 fixing swagger generation test --- .../abe/a_bit_of_everything_service_api.go | 8 +- examples/clients/echo/api_client.go | 2 +- examples/clients/echo/api_response.go | 2 +- examples/clients/echo/configuration.go | 2 +- examples/clients/echo/echo_service_api.go | 2 +- examples/clients/echo/examplepb_embedded.go | 2 +- .../clients/echo/examplepb_simple_message.go | 2 +- examples/integration/client_test.go | 2 + examples/integration/integration_test.go | 49 +- .../proto/examplepb/a_bit_of_everything.pb.go | 433 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 33 +- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 30 +- protoc-gen-swagger/genswagger/template.go | 2 +- runtime/marshal_jsonpb_test.go | 10 + 15 files changed, 289 insertions(+), 292 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index de167d3cd16..5cbf25f0071 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -60,16 +60,14 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * @param enumValue * @param pathEnumValue * @param nestedPathEnumValue - * @param repeatedEnumValue repeated enum value. it is comma-separated in query * @param enumValueAnnotation Numeric enum description. - * @param repeatedStringAnnotation Repeated string description. * @return *ExamplepbABitOfEverything */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, repeatedEnumValue []string, enumValueAnnotation string, repeatedStringAnnotation []string) (*ExamplepbABitOfEverything, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (*ExamplepbABitOfEverything, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}" + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -88,9 +86,7 @@ func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"repeated_enum_value"+"}", fmt.Sprintf("%v", repeatedEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) - localVarPath = strings.Replace(localVarPath, "{"+"repeated_string_annotation"+"}", fmt.Sprintf("%v", repeatedStringAnnotation), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index d54e3e68565..7a517148026 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/api_response.go index a4f0ab08001..8b0d07c4a13 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/api_response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 6441b8dc698..9a75a30aeec 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go index 7625bc9eec8..6ae7cf85a32 100644 --- a/examples/clients/echo/echo_service_api.go +++ b/examples/clients/echo/echo_service_api.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_embedded.go b/examples/clients/echo/examplepb_embedded.go index ad76336c25b..4b5fe265ac9 100644 --- a/examples/clients/echo/examplepb_embedded.go +++ b/examples/clients/echo/examplepb_embedded.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/examplepb_simple_message.go index 2b9b366e57e..366a6876665 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/examplepb_simple_message.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/integration/client_test.go b/examples/integration/client_test.go index bbcfed59cb2..90431625380 100644 --- a/examples/integration/client_test.go +++ b/examples/integration/client_test.go @@ -76,6 +76,7 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { EnumValue: abe.ExamplepbNumericEnum{}, PathEnumValue: abe.PathenumPathEnum{}, NestedPathEnumValue: abe.MessagePathEnumNestedPathEnum{}, + EnumValueAnnotation: abe.ExamplepbNumericEnum{}, } resp, _, err := cl.Create( want.FloatValue, @@ -96,6 +97,7 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { want.EnumValue.String(), want.PathEnumValue.String(), want.NestedPathEnumValue.String(), + want.EnumValueAnnotation.String(), ) if err != nil { t.Errorf("cl.Create(%#v) failed with %v; want success", want, err) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index b0e8926a82c..fd1a3655a9a 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -291,8 +291,9 @@ func testABECreate(t *testing.T, port int) { EnumValue: gw.NumericEnum_ZERO, PathEnumValue: pathenum.PathEnum_DEF, NestedPathEnumValue: pathenum.MessagePathEnum_JKL, + EnumValueAnnotation: gw.NumericEnum_ONE, } - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue) + url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) resp, err := http.Post(url, "application/json", strings.NewReader("{}")) if err != nil { @@ -372,6 +373,29 @@ func testABECreateBody(t *testing.T, port int) { "a": {Name: "x", Amount: 1}, "b": {Name: "y", Amount: 2}, }, + RepeatedEnumAnnotation: []gw.NumericEnum{ + gw.NumericEnum_ONE, + gw.NumericEnum_ZERO, + }, + EnumValueAnnotation: gw.NumericEnum_ONE, + RepeatedStringAnnotation: []string{ + "a", + "b", + }, + RepeatedNestedAnnotation: []*gw.ABitOfEverything_Nested{ + { + Name: "hoge", + Amount: 10, + }, + { + Name: "fuga", + Amount: 20, + }, + }, + NestedAnnotation: &gw.ABitOfEverything_Nested{ + Name: "hoge", + Amount: 10, + }, } url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) var m jsonpb.Marshaler @@ -453,6 +477,29 @@ func testABEBulkCreate(t *testing.T, port int) { Amount: 20, }, }, + RepeatedEnumAnnotation: []gw.NumericEnum{ + gw.NumericEnum_ONE, + gw.NumericEnum_ZERO, + }, + EnumValueAnnotation: gw.NumericEnum_ONE, + RepeatedStringAnnotation: []string{ + "a", + "b", + }, + RepeatedNestedAnnotation: []*gw.ABitOfEverything_Nested{ + { + Name: "hoge", + Amount: 10, + }, + { + Name: "fuga", + Amount: 20, + }, + }, + NestedAnnotation: &gw.ABitOfEverything_Nested{ + Name: "hoge", + Amount: 10, + }, } var m jsonpb.Marshaler if err := m.Marshal(w, &want); err != nil { diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 2e0ace34871..4aee105fdf8 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -512,7 +512,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{0, 0} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -581,7 +581,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{1} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -724,7 +724,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{2} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -763,7 +763,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{3} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -810,7 +810,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_68327cc2832b2df4, []int{4} + return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1574,213 +1574,212 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_68327cc2832b2df4) -} - -var fileDescriptor_a_bit_of_everything_68327cc2832b2df4 = []byte{ - // 3251 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcb, 0x6f, 0x1b, 0x47, - 0x9a, 0x57, 0xb3, 0xa9, 0x57, 0xe9, 0x45, 0x95, 0x6c, 0x99, 0xa2, 0xe5, 0xa8, 0x4c, 0x3b, 0x49, - 0x9b, 0x31, 0xd9, 0x52, 0x4b, 0x76, 0x64, 0x06, 0x89, 0x97, 0xd4, 0xc3, 0x56, 0x6c, 0xcb, 0x72, - 0xdb, 0xf1, 0x06, 0x8e, 0x1d, 0xa1, 0x49, 0x16, 0xc5, 0xb6, 0xd8, 0x5d, 0x9d, 0xee, 0x6a, 0xd9, - 0x5c, 0x2e, 0x77, 0xb3, 0x0f, 0xec, 0x62, 0x37, 0x87, 0x05, 0x94, 0xdd, 0xc3, 0x3e, 0xb0, 0xc0, - 0x02, 0x8b, 0x05, 0x16, 0xc8, 0x61, 0x2e, 0x73, 0x0a, 0x30, 0x8f, 0xc3, 0x9c, 0xe6, 0xe6, 0x19, - 0xcc, 0x3f, 0x30, 0x73, 0x98, 0xbf, 0x60, 0x80, 0xc1, 0x00, 0x83, 0x41, 0x57, 0x77, 0x93, 0xdd, - 0x4d, 0xd2, 0x32, 0xed, 0x20, 0x17, 0xa9, 0xab, 0xea, 0xfb, 0xbe, 0xdf, 0x57, 0x5f, 0x7d, 0xf5, - 0x3d, 0x8a, 0x40, 0xc2, 0xcf, 0x15, 0xcd, 0xa8, 0x63, 0x4b, 0x34, 0x4c, 0x42, 0x89, 0xe8, 0x0d, - 0x8d, 0x92, 0xa8, 0xec, 0x97, 0x54, 0xba, 0x4f, 0xaa, 0xfb, 0xf8, 0x08, 0x9b, 0x0d, 0x5a, 0x53, - 0xf5, 0x83, 0x1c, 0xa3, 0x81, 0x4b, 0x07, 0xa6, 0x51, 0xce, 0x1d, 0x28, 0x14, 0x3f, 0x53, 0x1a, - 0x39, 0x5f, 0x40, 0xae, 0xcd, 0x9a, 0x5a, 0x3c, 0x20, 0xe4, 0xa0, 0x8e, 0x45, 0xc5, 0x50, 0x45, - 0x45, 0xd7, 0x09, 0x55, 0xa8, 0x4a, 0x74, 0xcb, 0x65, 0x4f, 0x21, 0x6f, 0x95, 0x8d, 0x4a, 0x76, - 0x55, 0xac, 0xaa, 0xb8, 0x5e, 0xd9, 0xd7, 0x14, 0xeb, 0xd0, 0xa3, 0x38, 0x1b, 0xa5, 0xc0, 0x9a, - 0x41, 0x1b, 0xde, 0xe2, 0x5b, 0xd1, 0xc5, 0x8a, 0x6d, 0x32, 0xf9, 0xde, 0xfa, 0xbb, 0x91, 0x1d, - 0x19, 0x0a, 0xad, 0x61, 0xdd, 0xd6, 0xd8, 0xc7, 0xbe, 0xf3, 0xe5, 0xeb, 0x11, 0x21, 0xb4, 0xec, - 0x92, 0xa8, 0x61, 0xcb, 0x52, 0x0e, 0xb0, 0x47, 0x71, 0xbe, 0x9b, 0x42, 0x8a, 0x90, 0x2c, 0x45, - 0xb5, 0xa1, 0xaa, 0x86, 0x2d, 0xaa, 0x68, 0x86, 0x47, 0x70, 0x99, 0xfd, 0x2b, 0x67, 0x0f, 0xb0, - 0x9e, 0xb5, 0x9e, 0x29, 0x07, 0x07, 0xd8, 0x14, 0x89, 0xc1, 0xec, 0xd1, 0x6d, 0x9b, 0xf4, 0x1f, - 0x52, 0x20, 0x51, 0x28, 0xaa, 0xf4, 0x6e, 0x75, 0xab, 0x6d, 0x75, 0xf8, 0x04, 0x4c, 0x59, 0xaa, - 0x7e, 0x50, 0xc7, 0xfb, 0x3a, 0xb6, 0x28, 0xae, 0x24, 0x17, 0x10, 0x27, 0x4c, 0x48, 0xeb, 0xb9, - 0x13, 0xce, 0x21, 0x17, 0x95, 0x94, 0xdb, 0x65, 0xfc, 0xf2, 0xa4, 0x2b, 0xce, 0x1d, 0xc1, 0x1a, - 0x88, 0xdb, 0xb6, 0x5a, 0x49, 0x72, 0x88, 0x13, 0xc6, 0x8b, 0x0f, 0x8e, 0x0b, 0xf7, 0xbe, 0xe4, - 0xb8, 0x7f, 0xe6, 0x6e, 0x7d, 0xa6, 0x64, 0xab, 0x85, 0xec, 0xf6, 0x72, 0xf6, 0xda, 0x93, 0xe6, - 0x7a, 0x2b, 0x1b, 0x1c, 0xae, 0x0d, 0x32, 0x5c, 0x91, 0x5a, 0x32, 0x43, 0x80, 0x7b, 0x60, 0xc4, - 0xdb, 0x41, 0x0c, 0xf1, 0x6f, 0xb4, 0x03, 0x4f, 0x0e, 0xfc, 0x18, 0x4c, 0x54, 0xeb, 0x44, 0xa1, - 0xfb, 0x47, 0x4a, 0xdd, 0xc6, 0x49, 0x1e, 0x71, 0x42, 0xac, 0x78, 0xe9, 0xb8, 0xf0, 0x8e, 0x34, - 0xbb, 0xed, 0xcc, 0x23, 0x36, 0x8f, 0x98, 0x87, 0xe5, 0xf9, 0xe5, 0x9c, 0xf4, 0x82, 0x0b, 0x32, - 0xc8, 0x80, 0x0d, 0x1e, 0x3a, 0xdf, 0xf0, 0x3c, 0x98, 0xac, 0x10, 0xbb, 0x54, 0xc7, 0x9e, 0xb0, - 0x38, 0xe2, 0x04, 0x4e, 0x9e, 0x70, 0xe7, 0x5c, 0x92, 0x25, 0x30, 0xa1, 0xea, 0xf4, 0xea, 0x9a, - 0x47, 0x31, 0x8c, 0x38, 0x81, 0x97, 0x01, 0x9b, 0x6a, 0xcb, 0xb0, 0x83, 0x14, 0x23, 0x88, 0x13, - 0xe2, 0xf2, 0x84, 0x1d, 0x20, 0x71, 0x65, 0xac, 0x4a, 0x1e, 0xc5, 0x28, 0xe2, 0x84, 0x61, 0x26, - 0x63, 0x55, 0x72, 0x09, 0x2e, 0x80, 0xa9, 0xaa, 0xfa, 0x1c, 0x57, 0xda, 0x42, 0xc6, 0x10, 0x27, - 0x8c, 0xc8, 0x93, 0xde, 0x64, 0x98, 0xa8, 0x2d, 0x67, 0x1c, 0x71, 0xc2, 0xa8, 0x47, 0xe4, 0x4b, - 0x3a, 0x07, 0x40, 0x89, 0x90, 0xba, 0x47, 0x01, 0x10, 0x27, 0x8c, 0xc9, 0xe3, 0xce, 0x4c, 0x5b, - 0x59, 0x8b, 0x9a, 0xaa, 0x7e, 0xe0, 0x11, 0x4c, 0x38, 0x0e, 0x20, 0x4f, 0xb8, 0x73, 0x6d, 0x65, - 0x4b, 0x0d, 0x8a, 0x2d, 0x8f, 0xe2, 0x1c, 0xe2, 0x84, 0x49, 0x19, 0xb0, 0xa9, 0xd0, 0x86, 0xdb, - 0x6a, 0x4c, 0x21, 0x4e, 0x98, 0x72, 0x37, 0xec, 0x6b, 0x71, 0x0b, 0x00, 0xe7, 0xd6, 0x79, 0x04, - 0xd3, 0x88, 0x13, 0xa6, 0xa5, 0xcb, 0x27, 0x9e, 0xfc, 0xae, 0xad, 0x61, 0x53, 0x2d, 0x6f, 0xe9, - 0xb6, 0x26, 0x8f, 0x3b, 0xfc, 0xae, 0xb0, 0x3d, 0x30, 0xd3, 0xbe, 0xc7, 0x9e, 0xc4, 0xb7, 0x98, - 0x44, 0xa1, 0x8f, 0x44, 0xff, 0xfa, 0xe7, 0xf6, 0x14, 0x5a, 0x63, 0xd2, 0xa6, 0x0c, 0xef, 0xcb, - 0x95, 0x68, 0x81, 0x79, 0xd7, 0x99, 0xf6, 0xa3, 0x82, 0x97, 0x98, 0xe0, 0x8f, 0x4e, 0x12, 0x7c, - 0xc7, 0x0d, 0x08, 0xbe, 0x7c, 0xcf, 0x45, 0xdb, 0x70, 0x73, 0x7a, 0x68, 0xec, 0x82, 0xbe, 0x0d, - 0xa6, 0xad, 0xf0, 0xf9, 0xcd, 0x20, 0x4e, 0x98, 0x91, 0xa7, 0xac, 0xd0, 0x01, 0xb6, 0xc9, 0xda, - 0xbe, 0x90, 0x40, 0x9c, 0x90, 0xf0, 0xc9, 0x02, 0x5e, 0x67, 0x05, 0x0f, 0x61, 0x16, 0x71, 0xc2, - 0xac, 0x3c, 0x61, 0x05, 0x0e, 0xc1, 0x23, 0x69, 0xcb, 0x81, 0x88, 0x13, 0xa0, 0x4b, 0xe2, 0x4b, - 0x91, 0xc0, 0x69, 0x13, 0x1b, 0x58, 0x71, 0x4c, 0x11, 0xf2, 0x8b, 0x39, 0xc4, 0x0b, 0xe3, 0xf2, - 0x9c, 0xbf, 0x78, 0x3f, 0xe0, 0x1f, 0xd7, 0xc0, 0x04, 0xd1, 0xb1, 0x93, 0x24, 0x9c, 0x08, 0x9d, - 0x3c, 0xc5, 0x02, 0xd3, 0x7c, 0xce, 0x0d, 0x8a, 0x39, 0x3f, 0x28, 0xe6, 0xb6, 0x9c, 0xd5, 0x9b, - 0x43, 0x32, 0x60, 0xc4, 0x6c, 0x04, 0x2f, 0x80, 0x49, 0x97, 0xd5, 0xc5, 0x4a, 0x9e, 0x76, 0xbc, - 0xef, 0xe6, 0x90, 0xec, 0x0a, 0x74, 0x41, 0xe0, 0x63, 0x30, 0xae, 0x29, 0x86, 0xa7, 0xc7, 0x3c, - 0x0b, 0x1a, 0xd7, 0x07, 0x0f, 0x1a, 0x77, 0x14, 0x83, 0xa9, 0xbb, 0xa5, 0x53, 0xb3, 0x21, 0x8f, - 0x69, 0xde, 0x10, 0x3e, 0x07, 0x73, 0x9a, 0x62, 0x18, 0xd1, 0xfd, 0x9e, 0x61, 0x38, 0x37, 0x5f, - 0x0b, 0xc7, 0x08, 0xd9, 0xc7, 0x05, 0x9c, 0xd5, 0xa2, 0xf3, 0x01, 0x64, 0xcf, 0xf7, 0x5c, 0xe4, - 0xe4, 0x9b, 0x21, 0xbb, 0x9e, 0xd7, 0x8d, 0x1c, 0x98, 0x87, 0x79, 0x90, 0xd4, 0x89, 0xbe, 0x41, - 0xf4, 0x23, 0xac, 0x3b, 0x99, 0x47, 0xa9, 0xef, 0x2a, 0x9a, 0x1b, 0xde, 0x92, 0x29, 0x16, 0x00, - 0xfa, 0xae, 0xc3, 0x0d, 0x30, 0xd3, 0x4e, 0x6f, 0x9e, 0xc6, 0x67, 0xd9, 0x89, 0xa7, 0xba, 0x4e, - 0xfc, 0x81, 0x4f, 0x27, 0x4f, 0xb7, 0x59, 0x5c, 0x21, 0x8f, 0x41, 0xdb, 0x93, 0x82, 0x97, 0x6d, - 0x11, 0xf1, 0x03, 0xc7, 0x85, 0x59, 0x5f, 0x50, 0xe7, 0x62, 0x7d, 0xc3, 0x81, 0x64, 0x58, 0x7c, - 0x27, 0xc9, 0x26, 0xd1, 0xe0, 0x18, 0xc5, 0xcd, 0xe3, 0x42, 0x21, 0x73, 0x56, 0xf6, 0x44, 0x22, - 0xdd, 0x5d, 0x42, 0x8e, 0x68, 0x44, 0x55, 0x5a, 0xc7, 0x52, 0xba, 0xf7, 0x62, 0x05, 0x5b, 0x65, - 0x53, 0x65, 0x99, 0x3e, 0x27, 0xcf, 0x07, 0x35, 0x2d, 0xb4, 0x35, 0x82, 0xff, 0xca, 0x81, 0xd3, - 0x1d, 0x23, 0x04, 0x75, 0x3d, 0x3f, 0x78, 0x9c, 0x2c, 0x4a, 0xc7, 0x05, 0x31, 0x03, 0x77, 0xbb, - 0x55, 0x5c, 0xd8, 0xed, 0xab, 0xd9, 0x5c, 0x3b, 0xb6, 0x06, 0xd4, 0x3a, 0x02, 0xa9, 0x68, 0x28, - 0x08, 0xa8, 0x96, 0x76, 0xe2, 0x41, 0x71, 0xfd, 0xb8, 0x70, 0x25, 0x73, 0xba, 0xbd, 0x77, 0x97, - 0xcc, 0xc3, 0x5b, 0x8c, 0x4e, 0x87, 0x20, 0x93, 0xe1, 0x48, 0x12, 0xc0, 0xfd, 0x11, 0x17, 0x00, - 0xf6, 0x6e, 0x46, 0x00, 0xf8, 0xc2, 0x9b, 0x55, 0x0d, 0xc5, 0xed, 0xe3, 0xc2, 0x46, 0xa6, 0xa3, - 0x9b, 0x0b, 0x80, 0x48, 0xe9, 0x29, 0x2e, 0x53, 0x4f, 0xf3, 0x0b, 0x7d, 0x56, 0x7b, 0x6f, 0xc0, - 0x95, 0x1b, 0xd8, 0xc0, 0x7f, 0x72, 0x60, 0xb6, 0x5b, 0xef, 0x8b, 0x6f, 0x56, 0xaf, 0x15, 0xd7, - 0x8e, 0x0b, 0x2b, 0x99, 0xb9, 0xdd, 0x1e, 0xea, 0xa6, 0x76, 0xfb, 0x6b, 0x99, 0xd0, 0x23, 0xda, - 0xa5, 0x7e, 0xca, 0x81, 0x11, 0xaf, 0xe8, 0x83, 0x20, 0xae, 0x2b, 0x1a, 0x76, 0x8b, 0x3e, 0x99, - 0x7d, 0xc3, 0x79, 0x30, 0xa2, 0x68, 0xc4, 0xd6, 0x69, 0x32, 0xc6, 0xb2, 0xb8, 0x37, 0x82, 0xf7, - 0x40, 0x8c, 0x1c, 0xb2, 0xda, 0x6a, 0x5a, 0x2a, 0xbc, 0xee, 0x26, 0x72, 0x9b, 0x18, 0x1b, 0xec, - 0xd6, 0xc6, 0xc8, 0x61, 0x7a, 0x09, 0x8c, 0xf9, 0x63, 0x38, 0x0e, 0x86, 0xb7, 0x0b, 0xb7, 0xef, - 0x6f, 0x25, 0x86, 0xe0, 0x18, 0x88, 0x3f, 0x90, 0x3f, 0xd9, 0x4a, 0x70, 0xf9, 0x33, 0xc7, 0x85, - 0x53, 0x12, 0x84, 0x89, 0x26, 0x4a, 0x93, 0xc3, 0x74, 0x1e, 0xa5, 0x9d, 0xf9, 0x34, 0x6a, 0xa5, - 0x54, 0x30, 0x15, 0x0a, 0xe7, 0x30, 0x01, 0xf8, 0x43, 0xdc, 0xf0, 0x36, 0xe2, 0x7c, 0xc2, 0x22, - 0x18, 0x76, 0x63, 0x4a, 0xec, 0x35, 0x6a, 0x0d, 0x97, 0x35, 0x1f, 0x5b, 0xe7, 0x52, 0x9b, 0x60, - 0xbe, 0x77, 0x44, 0xef, 0x81, 0x79, 0x2a, 0x88, 0x39, 0x1e, 0x94, 0xf2, 0x57, 0xbe, 0x94, 0x68, - 0x74, 0xee, 0x21, 0x65, 0x37, 0x28, 0xe5, 0x4d, 0xea, 0xe3, 0x0e, 0x7e, 0xfe, 0xdf, 0x63, 0xc7, - 0x85, 0x7f, 0x8b, 0x81, 0xbf, 0xe7, 0x32, 0x73, 0x05, 0x54, 0x52, 0x29, 0x22, 0x55, 0xd4, 0x69, - 0xe9, 0xa4, 0x9d, 0x1d, 0x9d, 0xfa, 0x91, 0xbe, 0x81, 0xca, 0x44, 0x33, 0xea, 0x6a, 0x99, 0x5d, - 0x00, 0xaf, 0xd1, 0x41, 0xb4, 0x61, 0x60, 0x44, 0x09, 0x2a, 0x93, 0x23, 0x6c, 0x22, 0x4d, 0xd1, - 0x1b, 0xa8, 0x8a, 0x15, 0x6a, 0x9b, 0xd8, 0x72, 0x64, 0xed, 0xf9, 0x21, 0xff, 0x05, 0xc7, 0xaa, - 0xfc, 0x17, 0x5c, 0xb0, 0x46, 0x7e, 0xc1, 0x85, 0x8a, 0xea, 0xcc, 0x43, 0x70, 0x71, 0x5b, 0xd5, - 0x2b, 0x88, 0xd8, 0x14, 0x69, 0xc4, 0xc4, 0x48, 0x29, 0x39, 0x9f, 0x5d, 0x3d, 0x4f, 0xae, 0x46, - 0xa9, 0x61, 0xe5, 0x45, 0xf1, 0x40, 0xa5, 0x35, 0xbb, 0x94, 0x2b, 0x13, 0x4d, 0x74, 0x8c, 0x91, - 0xc5, 0x65, 0x62, 0x35, 0x2c, 0x8a, 0xbd, 0xa1, 0x67, 0x1b, 0x69, 0x0d, 0x4a, 0x4d, 0x94, 0x76, - 0xf0, 0x1d, 0x67, 0x59, 0x2e, 0x57, 0x57, 0xaf, 0xae, 0xe0, 0x95, 0xec, 0x5a, 0x69, 0x6d, 0x2d, - 0xbb, 0xb6, 0xbe, 0x5a, 0xc9, 0x2a, 0x2b, 0x57, 0xae, 0x65, 0xaf, 0xac, 0x55, 0x94, 0x52, 0xa5, - 0xfa, 0x3e, 0x5e, 0x5f, 0x59, 0x4b, 0xa3, 0x56, 0x71, 0xca, 0x2f, 0x5f, 0x98, 0x72, 0xe9, 0x3f, - 0x8e, 0x81, 0x64, 0x54, 0x13, 0x3f, 0x1e, 0xc0, 0x6b, 0x60, 0x81, 0x15, 0x88, 0xed, 0xf8, 0x14, - 0x6c, 0x3c, 0x38, 0xc4, 0x0b, 0x31, 0x79, 0xde, 0x21, 0xf0, 0x19, 0xb6, 0x3b, 0x9d, 0xc5, 0x07, - 0x20, 0x15, 0x66, 0x0d, 0xf5, 0x19, 0x4e, 0x2f, 0xc4, 0xc9, 0x67, 0x82, 0xbc, 0x9b, 0x81, 0x9e, - 0xa3, 0x0b, 0x37, 0x58, 0xc6, 0xf1, 0x88, 0x17, 0xf8, 0x30, 0xee, 0x4e, 0xa7, 0xa2, 0xeb, 0xc2, - 0x0d, 0xf5, 0x26, 0x71, 0xc4, 0x0b, 0xf1, 0x30, 0xee, 0x27, 0x81, 0x72, 0xb0, 0x17, 0x6e, 0xbb, - 0xc2, 0x1c, 0x46, 0xbc, 0x30, 0xdc, 0x85, 0xeb, 0x17, 0x9b, 0x1f, 0x82, 0xb3, 0x11, 0x53, 0x85, - 0x6a, 0xd8, 0x11, 0xc4, 0x0b, 0x23, 0x72, 0x32, 0x64, 0xac, 0x60, 0x39, 0xdb, 0x9b, 0x3d, 0xd0, - 0x31, 0xf1, 0xc2, 0x68, 0x0f, 0x76, 0x1f, 0xfd, 0x7d, 0x90, 0x0c, 0xb3, 0x07, 0x7a, 0xa0, 0x31, - 0xc4, 0x0b, 0x63, 0xf2, 0xe9, 0x20, 0x6f, 0xb1, 0xdd, 0x0f, 0x75, 0x99, 0x2b, 0x54, 0x15, 0x8e, - 0xb3, 0x2a, 0x38, 0x64, 0xae, 0x70, 0x25, 0x1c, 0x31, 0x57, 0xb0, 0x6f, 0x02, 0x88, 0x17, 0x26, - 0xc3, 0xe6, 0x2a, 0x76, 0x7a, 0xa8, 0x9e, 0xc7, 0xd4, 0xde, 0xee, 0x04, 0xe2, 0x85, 0xa9, 0xee, - 0x63, 0xf2, 0x77, 0x8b, 0xa3, 0xbb, 0x0d, 0xd4, 0x54, 0x93, 0xaf, 0x51, 0x53, 0x85, 0x6c, 0xd3, - 0xa9, 0xab, 0xae, 0x83, 0xc5, 0x88, 0x6d, 0xc2, 0x87, 0x32, 0x85, 0x78, 0x61, 0x46, 0x5e, 0x08, - 0x59, 0x27, 0xd4, 0xca, 0xf4, 0x11, 0xd0, 0x76, 0x8a, 0x69, 0xc4, 0x0b, 0x89, 0x5e, 0x02, 0xfa, - 0x3a, 0x73, 0xa8, 0xe5, 0x99, 0x41, 0xbc, 0x30, 0x1b, 0x39, 0x9d, 0x80, 0x95, 0x7a, 0x32, 0x07, - 0x9a, 0x2a, 0x5e, 0x80, 0xdd, 0xcc, 0x1e, 0x72, 0xbe, 0x76, 0x5c, 0xc0, 0x52, 0x19, 0x2a, 0x4d, - 0x94, 0xee, 0xe7, 0x58, 0xe9, 0x3c, 0xfa, 0x8c, 0x9a, 0x36, 0xbe, 0x8c, 0xdc, 0xbf, 0x55, 0xa5, - 0x6e, 0x79, 0x83, 0x27, 0x97, 0xa3, 0x6c, 0x01, 0xbd, 0x1d, 0xbe, 0x95, 0xcb, 0x48, 0xba, 0x8c, - 0x56, 0x9f, 0xa0, 0x56, 0x3a, 0x05, 0xe2, 0x45, 0x52, 0x69, 0xf4, 0xca, 0xce, 0xe9, 0xc7, 0x60, - 0xc6, 0xeb, 0x34, 0xff, 0x5c, 0xa5, 0x35, 0x46, 0x36, 0x0d, 0x62, 0xfe, 0xbb, 0x8d, 0x1c, 0x53, - 0x9d, 0x10, 0x15, 0xaf, 0x28, 0x54, 0xf1, 0xb2, 0xc7, 0xdb, 0x27, 0x9e, 0xbb, 0x23, 0x44, 0x66, - 0x2c, 0xe9, 0xaf, 0x39, 0x30, 0xf3, 0x89, 0x51, 0x51, 0x28, 0x7e, 0x28, 0xc9, 0xf8, 0x0b, 0x1b, - 0x5b, 0x14, 0x6e, 0x00, 0x5e, 0x29, 0xb9, 0x4a, 0x4c, 0x48, 0x2b, 0x03, 0xe7, 0x22, 0xd9, 0xe1, - 0x86, 0x1f, 0x80, 0x09, 0x9b, 0xc9, 0x65, 0x0f, 0x7c, 0x9e, 0x6a, 0xdd, 0xfd, 0xc2, 0xb6, 0x8a, - 0xeb, 0x95, 0x3b, 0x8a, 0x75, 0x28, 0x03, 0x97, 0xdc, 0xf9, 0xce, 0x20, 0x30, 0x11, 0xf0, 0x4d, - 0xa7, 0x3c, 0x78, 0xb4, 0x25, 0xdf, 0x4d, 0x0c, 0xc1, 0x51, 0xc0, 0xdf, 0xdd, 0xdd, 0x4a, 0x70, - 0xd2, 0xff, 0x9e, 0x03, 0x67, 0xa2, 0xc0, 0xf7, 0xb1, 0x79, 0xa4, 0x96, 0x31, 0xfc, 0x9f, 0x38, - 0x18, 0xd9, 0x30, 0x1d, 0x9b, 0xc3, 0xc1, 0xb5, 0x4f, 0x0d, 0xce, 0x92, 0xfe, 0x01, 0xff, 0xb7, - 0xbf, 0xf8, 0xcd, 0xd7, 0xb1, 0xff, 0xe7, 0xd3, 0xff, 0xc7, 0x8b, 0x47, 0x2b, 0xfe, 0x63, 0x6a, - 0xaf, 0xa7, 0x54, 0xb1, 0x19, 0x48, 0x1f, 0x2d, 0xb1, 0x19, 0xcc, 0x08, 0x2d, 0xb1, 0x19, 0xf0, - 0xce, 0x96, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, 0x4c, 0xb1, 0x69, 0x87, 0x16, 0x9a, 0x01, 0x4f, - 0x6a, 0x89, 0xcd, 0xd0, 0x85, 0xf2, 0xc7, 0x81, 0xf5, 0x8e, 0xbb, 0xb6, 0xc4, 0x66, 0x30, 0xb6, - 0x7d, 0x68, 0x51, 0xd3, 0x30, 0x71, 0x55, 0x7d, 0x2e, 0x66, 0x5a, 0x2e, 0x48, 0x80, 0xcd, 0x8a, - 0xca, 0xb1, 0xa2, 0x40, 0x56, 0x84, 0x21, 0xac, 0x64, 0xbf, 0x76, 0xb2, 0x25, 0x36, 0x3b, 0xb1, - 0xaa, 0x25, 0x36, 0x23, 0xcf, 0x2f, 0x0e, 0x67, 0xcf, 0x77, 0x99, 0x96, 0xd8, 0xec, 0x11, 0xec, - 0x42, 0xd2, 0x02, 0xc5, 0x77, 0x90, 0xba, 0xab, 0x95, 0x69, 0xc1, 0xff, 0xe6, 0x00, 0x70, 0x7d, - 0x84, 0xdd, 0xa8, 0xef, 0xc7, 0x4f, 0x32, 0xcc, 0x4d, 0x2e, 0xa6, 0x97, 0x4e, 0x70, 0x92, 0x3c, - 0x97, 0x81, 0x7f, 0x09, 0x46, 0x6e, 0x13, 0x72, 0x68, 0x1b, 0x70, 0x26, 0x67, 0xd9, 0x25, 0x29, - 0xb7, 0x53, 0xf1, 0xc2, 0xc0, 0xeb, 0x20, 0xe7, 0x18, 0xb2, 0x00, 0xdf, 0x39, 0xd1, 0x3d, 0x9d, - 0x52, 0xaa, 0x05, 0xff, 0x81, 0x03, 0x23, 0x6e, 0x58, 0x78, 0x1d, 0xd3, 0xf4, 0x79, 0x08, 0x4a, - 0xaf, 0x30, 0x2d, 0xde, 0x4b, 0xbd, 0xa2, 0x16, 0x8e, 0x19, 0x7e, 0xc2, 0x81, 0x31, 0x3f, 0x3e, - 0xc1, 0xe5, 0x13, 0x55, 0x89, 0x84, 0xb2, 0xbe, 0x9a, 0x3c, 0x65, 0x9a, 0x54, 0x52, 0x19, 0xf1, - 0x48, 0x7a, 0xb9, 0x26, 0x4a, 0x09, 0xe7, 0x5c, 0x6d, 0x9c, 0xb0, 0xf6, 0x68, 0x45, 0x1a, 0x94, - 0x05, 0xfe, 0x17, 0x07, 0x92, 0x7b, 0x0a, 0x2d, 0xd7, 0x9c, 0xf8, 0xdd, 0x8e, 0x77, 0x3b, 0x3a, - 0x73, 0xbc, 0xef, 0x6e, 0x4b, 0x57, 0xd9, 0x96, 0x96, 0xa5, 0xf7, 0xc4, 0x23, 0x49, 0x79, 0x55, - 0x05, 0xb9, 0x0c, 0xfc, 0x17, 0x0e, 0x8c, 0x6c, 0xe2, 0x3a, 0xa6, 0xb8, 0xdb, 0xd3, 0xfa, 0x61, - 0x3d, 0x3e, 0x2e, 0xbc, 0x57, 0xba, 0x04, 0xa6, 0x01, 0x28, 0x18, 0xea, 0x2d, 0xdc, 0x28, 0xd8, - 0xb4, 0x06, 0x87, 0xc0, 0x19, 0x30, 0x72, 0xd7, 0xf9, 0x94, 0xe0, 0x14, 0x88, 0x9b, 0x58, 0xa9, - 0x80, 0xe1, 0x67, 0xa6, 0x4a, 0xb1, 0xeb, 0x7c, 0x99, 0x57, 0x75, 0xbe, 0x5f, 0x73, 0x60, 0xec, - 0x06, 0xa6, 0xf7, 0x6c, 0x6c, 0x36, 0xbe, 0x4b, 0xf7, 0xfb, 0x8a, 0x3b, 0x2e, 0x3c, 0x48, 0xef, - 0x82, 0xc5, 0x5e, 0x9d, 0x48, 0x1b, 0x70, 0xc0, 0x0e, 0xe4, 0x53, 0xae, 0x34, 0xc4, 0xf6, 0x97, - 0x83, 0x97, 0x4f, 0xda, 0xdf, 0x17, 0x0e, 0x80, 0xbf, 0xcb, 0xaf, 0x86, 0x41, 0xe2, 0x06, 0xa6, - 0x7e, 0xe1, 0xe1, 0x82, 0x5f, 0x1b, 0x3c, 0xdb, 0x7a, 0xfc, 0xa9, 0xd7, 0x67, 0x4d, 0x7f, 0x19, - 0x67, 0x3b, 0xf8, 0x3d, 0x0f, 0x7f, 0x77, 0x52, 0xfe, 0x6a, 0x57, 0x33, 0x5e, 0xdc, 0xee, 0xd5, - 0x15, 0xb5, 0xa2, 0x6b, 0x91, 0x24, 0xd7, 0xb7, 0xad, 0xe9, 0x5a, 0xb3, 0x5f, 0xb6, 0x18, 0x4e, - 0x3e, 0x2f, 0x69, 0x3c, 0x7a, 0xaf, 0xf6, 0xe5, 0x0d, 0xa5, 0xcb, 0xfe, 0x8d, 0x41, 0x37, 0x5f, - 0xa7, 0xf0, 0xef, 0xb9, 0x91, 0xbe, 0x80, 0xdd, 0xd9, 0xb0, 0x4f, 0xb5, 0xdd, 0x67, 0xb9, 0xef, - 0x3e, 0xad, 0x97, 0xa1, 0x86, 0xb2, 0x35, 0xfc, 0x19, 0x0f, 0xe2, 0x5b, 0xe5, 0x1a, 0x81, 0xfd, - 0x7e, 0x4f, 0xb1, 0xec, 0x52, 0xce, 0xed, 0x7b, 0xfc, 0xe0, 0xf0, 0xca, 0x94, 0xe9, 0xdf, 0xc6, - 0x8e, 0x0b, 0x7f, 0x13, 0x03, 0x93, 0xb8, 0x5c, 0x23, 0xc8, 0x72, 0xab, 0x34, 0x30, 0xc6, 0x46, - 0xa6, 0x51, 0x86, 0xb3, 0xf7, 0x6d, 0x4d, 0x53, 0xcc, 0x46, 0x1e, 0x6d, 0x79, 0x53, 0xa9, 0xc4, - 0x66, 0xe7, 0x45, 0x8b, 0xcd, 0xa6, 0x37, 0x01, 0x0c, 0x5f, 0x5b, 0xa6, 0xed, 0x80, 0x97, 0xf5, - 0xe3, 0xeb, 0x80, 0xbf, 0xb2, 0xbc, 0x0a, 0xd7, 0xc1, 0x55, 0x19, 0x53, 0xdb, 0xd4, 0x71, 0x05, - 0x3d, 0xab, 0x61, 0x1d, 0xd1, 0x1a, 0x46, 0x26, 0xb6, 0x88, 0x6d, 0x96, 0x31, 0x52, 0x2d, 0x44, - 0xb1, 0x66, 0x10, 0x53, 0x31, 0xd5, 0x7a, 0x03, 0xd9, 0xba, 0x72, 0xa4, 0xa8, 0x75, 0xa5, 0x54, - 0xc7, 0xb9, 0x8f, 0x3f, 0x00, 0xfc, 0xda, 0xf2, 0x1a, 0x5c, 0x03, 0x99, 0x97, 0x08, 0xa8, 0x10, - 0x6c, 0x21, 0x9d, 0x50, 0x84, 0x9f, 0xab, 0x16, 0xcd, 0xc1, 0x11, 0x10, 0xff, 0x8f, 0x18, 0xe7, - 0x16, 0x89, 0x4f, 0x4e, 0x0e, 0x13, 0x8e, 0x61, 0xc4, 0xa6, 0x7b, 0x30, 0x8f, 0x16, 0xd2, 0x89, - 0x60, 0xc2, 0x71, 0xd6, 0xf2, 0xee, 0x2b, 0xcf, 0x23, 0x08, 0xbb, 0x96, 0xe0, 0x0f, 0x39, 0x30, - 0xb9, 0x89, 0xb1, 0xc1, 0x7e, 0x76, 0x72, 0x26, 0xbe, 0x9f, 0xca, 0xe6, 0x3a, 0xdb, 0xdb, 0xb5, - 0xf4, 0xda, 0x89, 0x21, 0x3e, 0xf4, 0x8b, 0x76, 0xce, 0xe9, 0x70, 0x58, 0x16, 0x2a, 0x00, 0xb0, - 0x4b, 0x8a, 0xaa, 0x5e, 0x51, 0xf5, 0x03, 0x0b, 0x2e, 0x74, 0x45, 0xf0, 0x4d, 0xef, 0xc7, 0xfe, - 0xbe, 0xc1, 0x7d, 0x08, 0x3e, 0x04, 0xa3, 0x0f, 0x54, 0x0d, 0x13, 0x9b, 0xc2, 0x3e, 0x44, 0x7d, - 0x99, 0xcf, 0x32, 0xf5, 0x4f, 0xc3, 0xb9, 0xa0, 0x3d, 0xa9, 0x27, 0xac, 0x06, 0x12, 0x5b, 0xa6, - 0x49, 0x4c, 0x27, 0x7d, 0x6f, 0x62, 0xaa, 0xa8, 0x75, 0x6b, 0x60, 0x80, 0x8b, 0x0c, 0xe0, 0x2d, - 0xb8, 0x18, 0x3a, 0x30, 0x47, 0xea, 0x33, 0x95, 0xd6, 0x2a, 0x9e, 0xd4, 0x7f, 0xe4, 0x00, 0xbc, - 0x81, 0x69, 0xb4, 0xdd, 0x3b, 0xb9, 0x46, 0x88, 0x70, 0xf4, 0x55, 0xe3, 0x5d, 0xa6, 0xc6, 0xf9, - 0xf4, 0x42, 0x50, 0x0d, 0x47, 0x83, 0x12, 0xa9, 0x34, 0xc4, 0xa6, 0x53, 0x11, 0xb0, 0xb6, 0x10, - 0xfe, 0x1d, 0x07, 0x66, 0xf7, 0x88, 0x45, 0x1d, 0x89, 0x8c, 0x95, 0x29, 0xf2, 0x6a, 0x9d, 0x65, - 0x5f, 0x74, 0x91, 0xa1, 0x5f, 0x4a, 0x5f, 0x0c, 0xa2, 0x1b, 0xc4, 0xa2, 0x8e, 0x06, 0xec, 0x87, - 0x44, 0x57, 0x0d, 0xdf, 0x29, 0x52, 0x3f, 0xe6, 0x8e, 0x0b, 0xdf, 0x72, 0xb0, 0xda, 0xa7, 0xd1, - 0x0b, 0x3e, 0x7b, 0xa3, 0x6c, 0x16, 0x3d, 0xab, 0xa9, 0xe5, 0x1a, 0xb2, 0x6a, 0xc4, 0xae, 0x57, - 0xd8, 0xf5, 0x2b, 0x61, 0x64, 0x5b, 0xb8, 0x82, 0x54, 0x1d, 0x19, 0x75, 0xa5, 0x8c, 0x11, 0xa9, - 0xb2, 0x8b, 0x5a, 0x21, 0x65, 0x5b, 0xc3, 0xba, 0xdb, 0x0b, 0xa0, 0x32, 0xd1, 0x9c, 0xc1, 0xf9, - 0xd4, 0x3d, 0xb0, 0xd4, 0xab, 0x32, 0x70, 0xae, 0x91, 0xdf, 0x5a, 0x0e, 0xfa, 0x3c, 0xf9, 0x14, - 0x9c, 0x2a, 0x2b, 0x1a, 0xae, 0x6f, 0x28, 0x16, 0xf6, 0x64, 0x38, 0x7d, 0x10, 0x94, 0xc1, 0xb0, - 0xfb, 0x6b, 0xe8, 0xa0, 0x8e, 0xb4, 0xc0, 0x6c, 0x38, 0x07, 0x67, 0x43, 0x8e, 0xe4, 0x2c, 0x49, - 0x9f, 0x83, 0xc5, 0x82, 0x4e, 0x68, 0x0d, 0x9b, 0x1e, 0x92, 0x73, 0x78, 0x81, 0x4b, 0xf5, 0x51, - 0xe8, 0x8a, 0x0d, 0x0a, 0x3c, 0x54, 0xfc, 0x76, 0xf4, 0xb8, 0xf0, 0xcd, 0x28, 0xfc, 0x25, 0x07, - 0xe6, 0x0a, 0xa8, 0xe8, 0x3e, 0x28, 0x07, 0x42, 0xc0, 0xa7, 0xe0, 0xd4, 0x81, 0xbc, 0xb7, 0x91, - 0xbd, 0xe1, 0x6e, 0x1d, 0x19, 0x26, 0x79, 0x8a, 0xcb, 0x74, 0x50, 0x93, 0xa5, 0x12, 0x3a, 0xd1, - 0xf1, 0x9f, 0x79, 0x5b, 0x73, 0xa8, 0x33, 0x9f, 0x83, 0x53, 0xc5, 0xfb, 0x9b, 0x68, 0x35, 0xbb, - 0x51, 0x57, 0x6c, 0x0b, 0xa3, 0xdb, 0x6a, 0x19, 0xeb, 0x16, 0x86, 0xdb, 0x83, 0x49, 0x16, 0x4b, - 0x75, 0x52, 0x12, 0x35, 0xc5, 0xa2, 0xd8, 0x14, 0x6f, 0xef, 0x6c, 0x6c, 0xed, 0xde, 0xdf, 0xca, - 0xd1, 0xe7, 0x54, 0xe2, 0x57, 0x72, 0xcb, 0x19, 0x9e, 0x8b, 0xc5, 0xa5, 0x84, 0x62, 0xb8, 0xcf, - 0xe0, 0x2a, 0xd1, 0xc5, 0xa7, 0x16, 0xd1, 0xa5, 0xf9, 0xe0, 0xcc, 0xf3, 0x6c, 0x95, 0x90, 0xac, - 0xa6, 0x6a, 0x38, 0xdf, 0x45, 0x99, 0xef, 0x43, 0x29, 0xef, 0x39, 0x19, 0x63, 0x15, 0xee, 0x80, - 0x1b, 0xdd, 0x19, 0xc3, 0xb6, 0xb0, 0xd9, 0xc9, 0x16, 0x35, 0xe5, 0x08, 0x23, 0x03, 0x9b, 0x9a, - 0x6a, 0x59, 0x8e, 0x63, 0x52, 0x82, 0x94, 0x72, 0x19, 0x5b, 0x56, 0x28, 0xbb, 0xe4, 0xe4, 0x37, - 0xc8, 0x41, 0xa3, 0xf2, 0x4d, 0xc0, 0xaf, 0xad, 0xac, 0xc3, 0x02, 0x98, 0xda, 0x79, 0x57, 0x43, - 0x0a, 0xa2, 0x58, 0x31, 0x08, 0xcd, 0xc1, 0x65, 0x90, 0x4b, 0x0d, 0xf4, 0x62, 0xf8, 0xe8, 0x9f, - 0x62, 0x60, 0x06, 0x8c, 0x17, 0x15, 0x4b, 0x2d, 0xb3, 0xfa, 0x3f, 0x36, 0xc6, 0x81, 0x73, 0xa1, - 0x8e, 0x60, 0x66, 0x2c, 0x96, 0x1a, 0xff, 0x34, 0x5b, 0xd8, 0xdb, 0xc9, 0xde, 0xc2, 0x0d, 0x14, - 0x03, 0xbf, 0xe2, 0xda, 0x1d, 0xc2, 0xcf, 0xb9, 0x31, 0x5e, 0x88, 0x4b, 0x17, 0xfc, 0x33, 0x0c, - 0x1c, 0xb8, 0x48, 0x14, 0x9b, 0xd6, 0x44, 0xe7, 0x0f, 0x31, 0xd5, 0xbf, 0xc0, 0xf9, 0xa5, 0xfe, - 0x44, 0x94, 0x1c, 0x62, 0xbd, 0xf8, 0xd7, 0x20, 0xe5, 0x36, 0x1c, 0x10, 0xde, 0x30, 0x15, 0x9d, - 0x5a, 0xc8, 0x19, 0x78, 0xd6, 0x03, 0x8b, 0x5e, 0x1b, 0x02, 0xe7, 0xbc, 0x45, 0x36, 0xf2, 0x57, - 0x37, 0xc0, 0xb0, 0x52, 0xd1, 0x54, 0x1d, 0xe6, 0x43, 0xac, 0x7a, 0x25, 0x44, 0xc6, 0x0e, 0xc3, - 0x21, 0x53, 0x2d, 0xea, 0x64, 0xa2, 0x23, 0x8c, 0x54, 0xbd, 0x4a, 0x4c, 0x8d, 0x9d, 0x77, 0x69, - 0x09, 0x4c, 0x05, 0x4d, 0x31, 0x14, 0x6d, 0x8d, 0x4a, 0x97, 0xfa, 0x36, 0x47, 0x51, 0x52, 0x73, - 0x07, 0x9c, 0xb9, 0xd3, 0x89, 0x3e, 0xc1, 0x3b, 0x35, 0xe8, 0x5d, 0x7a, 0x34, 0xde, 0x3e, 0xb9, - 0xd2, 0x08, 0xbb, 0xcf, 0xab, 0x7f, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x54, 0x0b, 0x85, 0xbe, 0xf9, - 0x27, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3) +} + +var fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3 = []byte{ + // 3233 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0x5b, 0x6f, 0x1b, 0xc7, + 0xb9, 0x5a, 0xae, 0xae, 0xa3, 0x1b, 0x35, 0xb2, 0x65, 0x8a, 0x56, 0xa2, 0x31, 0xed, 0x24, 0x6b, + 0xc6, 0xe4, 0x4a, 0x2b, 0xd9, 0x91, 0x19, 0x24, 0x3e, 0xa4, 0x2e, 0xb6, 0x62, 0x5b, 0x96, 0xd7, + 0x8e, 0x4f, 0xe0, 0xd8, 0x11, 0x96, 0xe4, 0x50, 0x5c, 0x8b, 0xbb, 0xb3, 0xd9, 0x9d, 0x95, 0xcd, + 0xa3, 0xc3, 0x73, 0xd2, 0x0b, 0x5a, 0xb4, 0x79, 0x28, 0xc0, 0xb4, 0x0f, 0xbd, 0xa0, 0xbf, 0x20, + 0xaf, 0x7d, 0x0a, 0xd0, 0xcb, 0x43, 0x9f, 0xfa, 0xe6, 0x16, 0xfd, 0x03, 0xed, 0x43, 0x9f, 0x0a, + 0x14, 0x05, 0x02, 0x14, 0x45, 0x8b, 0x62, 0x67, 0x77, 0xc9, 0xdd, 0x25, 0x69, 0x99, 0x76, 0x90, + 0x17, 0x69, 0x67, 0xe6, 0xbb, 0x7f, 0xdf, 0x7c, 0x97, 0x21, 0x90, 0xf0, 0x13, 0x45, 0x33, 0x6a, + 0xd8, 0x12, 0x0d, 0x93, 0x50, 0x22, 0x7a, 0x4b, 0xa3, 0x28, 0x2a, 0x7b, 0x45, 0x95, 0xee, 0x91, + 0xca, 0x1e, 0x3e, 0xc4, 0x66, 0x9d, 0x56, 0x55, 0x7d, 0x3f, 0xcb, 0x60, 0xe0, 0xe2, 0xbe, 0x69, + 0x94, 0xb2, 0xfb, 0x0a, 0xc5, 0x8f, 0x95, 0x7a, 0xd6, 0x27, 0x90, 0x6d, 0xa1, 0x26, 0x17, 0xf6, + 0x09, 0xd9, 0xaf, 0x61, 0x51, 0x31, 0x54, 0x51, 0xd1, 0x75, 0x42, 0x15, 0xaa, 0x12, 0xdd, 0x72, + 0xd1, 0x93, 0xc8, 0x3b, 0x65, 0xab, 0xa2, 0x5d, 0x11, 0x2b, 0x2a, 0xae, 0x95, 0xf7, 0x34, 0xc5, + 0x3a, 0xf0, 0x20, 0x4e, 0x47, 0x21, 0xb0, 0x66, 0xd0, 0xba, 0x77, 0xf8, 0x6a, 0xf4, 0xb0, 0x6c, + 0x9b, 0x8c, 0xbe, 0x77, 0xfe, 0x46, 0x44, 0x23, 0x43, 0xa1, 0x55, 0xac, 0xdb, 0x1a, 0xfb, 0xd8, + 0x73, 0xbe, 0x7c, 0x39, 0x22, 0x80, 0x96, 0x5d, 0x14, 0x35, 0x6c, 0x59, 0xca, 0x3e, 0xf6, 0x20, + 0xce, 0x74, 0x42, 0x48, 0x11, 0x90, 0xc5, 0xa8, 0x34, 0x54, 0xd5, 0xb0, 0x45, 0x15, 0xcd, 0xf0, + 0x00, 0x2e, 0xb0, 0x7f, 0xa5, 0xcc, 0x3e, 0xd6, 0x33, 0xd6, 0x63, 0x65, 0x7f, 0x1f, 0x9b, 0x22, + 0x31, 0x98, 0x3d, 0x3a, 0x6d, 0x93, 0xfa, 0x67, 0x12, 0xc4, 0xf3, 0x05, 0x95, 0xde, 0xaa, 0x6c, + 0xb6, 0xac, 0x0e, 0x1f, 0x82, 0x49, 0x4b, 0xd5, 0xf7, 0x6b, 0x78, 0x4f, 0xc7, 0x16, 0xc5, 0xe5, + 0xc4, 0x3c, 0xe2, 0x84, 0x71, 0x69, 0x2d, 0x7b, 0x8c, 0x1f, 0xb2, 0x51, 0x4a, 0xd9, 0x1d, 0x86, + 0x2f, 0x4f, 0xb8, 0xe4, 0xdc, 0x15, 0xac, 0x82, 0x41, 0xdb, 0x56, 0xcb, 0x09, 0x0e, 0x71, 0xc2, + 0x58, 0xe1, 0x6e, 0x33, 0x7f, 0xfb, 0x13, 0x8e, 0xfb, 0x3e, 0x77, 0xfd, 0x43, 0x25, 0x53, 0xc9, + 0x67, 0xb6, 0x96, 0x32, 0x97, 0x1f, 0x1e, 0xad, 0x35, 0x32, 0xc1, 0xe5, 0x6a, 0x3f, 0xcb, 0x65, + 0xa9, 0x21, 0x33, 0x0e, 0x70, 0x17, 0x0c, 0x7b, 0x1a, 0xc4, 0x10, 0xff, 0x52, 0x1a, 0x78, 0x74, + 0xe0, 0x7b, 0x60, 0xbc, 0x52, 0x23, 0x0a, 0xdd, 0x3b, 0x54, 0x6a, 0x36, 0x4e, 0xf0, 0x88, 0x13, + 0x62, 0x85, 0xf3, 0xcd, 0xfc, 0xeb, 0xd2, 0xcc, 0x96, 0xb3, 0x8f, 0xd8, 0x3e, 0x62, 0x11, 0x96, + 0xe3, 0x97, 0xb2, 0xd2, 0x53, 0x2e, 0x88, 0x20, 0x03, 0xb6, 0xb8, 0xe7, 0x7c, 0xc3, 0x33, 0x60, + 0xa2, 0x4c, 0xec, 0x62, 0x0d, 0x7b, 0xc4, 0x06, 0x11, 0x27, 0x70, 0xf2, 0xb8, 0xbb, 0xe7, 0x82, + 0x2c, 0x82, 0x71, 0x55, 0xa7, 0x97, 0x56, 0x3d, 0x88, 0x21, 0xc4, 0x09, 0xbc, 0x0c, 0xd8, 0x56, + 0x8b, 0x86, 0x1d, 0x84, 0x18, 0x46, 0x9c, 0x30, 0x28, 0x8f, 0xdb, 0x01, 0x10, 0x97, 0xc6, 0x8a, + 0xe4, 0x41, 0x8c, 0x20, 0x4e, 0x18, 0x62, 0x34, 0x56, 0x24, 0x17, 0xe0, 0x2c, 0x98, 0xac, 0xa8, + 0x4f, 0x70, 0xb9, 0x45, 0x64, 0x14, 0x71, 0xc2, 0xb0, 0x3c, 0xe1, 0x6d, 0x86, 0x81, 0x5a, 0x74, + 0xc6, 0x10, 0x27, 0x8c, 0x78, 0x40, 0x3e, 0xa5, 0x57, 0x00, 0x28, 0x12, 0x52, 0xf3, 0x20, 0x00, + 0xe2, 0x84, 0x51, 0x79, 0xcc, 0xd9, 0x69, 0x09, 0x6b, 0x51, 0x53, 0xd5, 0xf7, 0x3d, 0x80, 0x71, + 0x27, 0x00, 0xe4, 0x71, 0x77, 0xaf, 0x25, 0x6c, 0xb1, 0x4e, 0xb1, 0xe5, 0x41, 0xbc, 0x82, 0x38, + 0x61, 0x42, 0x06, 0x6c, 0x2b, 0xa4, 0x70, 0x4b, 0x8c, 0x49, 0xc4, 0x09, 0x93, 0xae, 0xc2, 0xbe, + 0x14, 0xd7, 0x01, 0x70, 0x6e, 0x9d, 0x07, 0x30, 0x85, 0x38, 0x61, 0x4a, 0xba, 0x70, 0xac, 0xe7, + 0x77, 0x6c, 0x0d, 0x9b, 0x6a, 0x69, 0x53, 0xb7, 0x35, 0x79, 0xcc, 0xc1, 0x77, 0x89, 0xed, 0x82, + 0xe9, 0xd6, 0x3d, 0xf6, 0x28, 0xbe, 0xca, 0x28, 0x0a, 0x3d, 0x28, 0xfa, 0xd7, 0x3f, 0xbb, 0xab, + 0xd0, 0x2a, 0xa3, 0x36, 0x69, 0x78, 0x5f, 0x2e, 0x45, 0x0b, 0xcc, 0xb9, 0xc1, 0xb4, 0x17, 0x25, + 0xbc, 0xc8, 0x08, 0xbf, 0x7b, 0x1c, 0xe1, 0x9b, 0x6e, 0x42, 0xf0, 0xe9, 0x7b, 0x21, 0xda, 0x62, + 0x37, 0xab, 0x87, 0xd6, 0x2e, 0xd3, 0xd7, 0xc0, 0x94, 0x15, 0xf6, 0xdf, 0x34, 0xe2, 0x84, 0x69, + 0x79, 0xd2, 0x0a, 0x39, 0xb0, 0x05, 0xd6, 0x8a, 0x85, 0x38, 0xe2, 0x84, 0xb8, 0x0f, 0x16, 0x88, + 0x3a, 0x2b, 0xe8, 0x84, 0x19, 0xc4, 0x09, 0x33, 0xf2, 0xb8, 0x15, 0x70, 0x82, 0x07, 0xd2, 0xa2, + 0x03, 0x11, 0x27, 0x40, 0x17, 0xc4, 0xa7, 0x22, 0x81, 0x93, 0x26, 0x36, 0xb0, 0xe2, 0x98, 0x22, + 0x14, 0x17, 0xb3, 0x88, 0x17, 0xc6, 0xe4, 0x59, 0xff, 0xf0, 0x4e, 0x20, 0x3e, 0x2e, 0x83, 0x71, + 0xa2, 0x63, 0xa7, 0x48, 0x38, 0x19, 0x3a, 0x71, 0x82, 0x25, 0xa6, 0xb9, 0xac, 0x9b, 0x14, 0xb3, + 0x7e, 0x52, 0xcc, 0x6e, 0x3a, 0xa7, 0xd7, 0x06, 0x64, 0xc0, 0x80, 0xd9, 0x0a, 0x9e, 0x05, 0x13, + 0x2e, 0xaa, 0xcb, 0x2b, 0x71, 0xd2, 0x89, 0xbe, 0x6b, 0x03, 0xb2, 0x4b, 0xd0, 0x65, 0x02, 0x1f, + 0x80, 0x31, 0x4d, 0x31, 0x3c, 0x39, 0xe6, 0x58, 0xd2, 0xb8, 0xd2, 0x7f, 0xd2, 0xb8, 0xa9, 0x18, + 0x4c, 0xdc, 0x4d, 0x9d, 0x9a, 0x75, 0x79, 0x54, 0xf3, 0x96, 0xf0, 0x09, 0x98, 0xd5, 0x14, 0xc3, + 0x88, 0xea, 0x7b, 0x8a, 0xf1, 0xb9, 0xf6, 0x42, 0x7c, 0x8c, 0x90, 0x7d, 0x5c, 0x86, 0x33, 0x5a, + 0x74, 0x3f, 0xc0, 0xd9, 0x8b, 0x3d, 0x97, 0x73, 0xe2, 0xe5, 0x38, 0xbb, 0x91, 0xd7, 0xc9, 0x39, + 0xb0, 0x0f, 0x73, 0x20, 0xa1, 0x13, 0x7d, 0x9d, 0xe8, 0x87, 0x58, 0x77, 0x2a, 0x8f, 0x52, 0xdb, + 0x51, 0x34, 0x37, 0xbd, 0x25, 0x92, 0x2c, 0x01, 0xf4, 0x3c, 0x87, 0xeb, 0x60, 0xba, 0x55, 0xde, + 0x3c, 0x89, 0x4f, 0x33, 0x8f, 0x27, 0x3b, 0x3c, 0x7e, 0xd7, 0x87, 0x93, 0xa7, 0x5a, 0x28, 0x2e, + 0x91, 0x07, 0xa0, 0x15, 0x49, 0xc1, 0xcb, 0xb6, 0x80, 0xf8, 0xbe, 0xf3, 0xc2, 0x8c, 0x4f, 0xa8, + 0x7d, 0xb1, 0x3e, 0xe7, 0x40, 0x22, 0x4c, 0xbe, 0x5d, 0x64, 0x13, 0xa8, 0x7f, 0x1e, 0x85, 0x8d, + 0x66, 0x3e, 0x9f, 0x3e, 0x2d, 0x7b, 0x24, 0x91, 0xee, 0x1e, 0x21, 0x87, 0x34, 0xa2, 0x2a, 0xad, + 0x61, 0x29, 0xd5, 0xfd, 0xb0, 0x8c, 0xad, 0x92, 0xa9, 0xb2, 0x4a, 0x9f, 0x95, 0xe7, 0x82, 0x92, + 0xe6, 0x5b, 0x12, 0xc1, 0x1f, 0x72, 0xe0, 0x64, 0xdb, 0x08, 0x41, 0x59, 0xcf, 0xf4, 0x9f, 0x27, + 0x0b, 0x52, 0x33, 0x2f, 0xa6, 0xe1, 0x4e, 0xa7, 0x88, 0xf3, 0x3b, 0x3d, 0x25, 0x9b, 0x6d, 0xe5, + 0xd6, 0x80, 0x58, 0x87, 0x20, 0x19, 0x4d, 0x05, 0x01, 0xd1, 0x52, 0x4e, 0x3e, 0x28, 0xac, 0x35, + 0xf3, 0x17, 0xd3, 0x27, 0x5b, 0xba, 0xbb, 0x60, 0x1e, 0xbf, 0x85, 0xe8, 0x76, 0x88, 0x65, 0x22, + 0x9c, 0x49, 0x02, 0x7c, 0x7f, 0xc9, 0x05, 0x18, 0x7b, 0x37, 0x23, 0xc0, 0xf8, 0xec, 0xcb, 0x75, + 0x0d, 0x85, 0xad, 0x66, 0x7e, 0x3d, 0xdd, 0x96, 0xcd, 0x65, 0x80, 0x48, 0xf1, 0x11, 0x2e, 0x51, + 0x4f, 0xf2, 0xb3, 0x3d, 0x4e, 0xbb, 0x2b, 0xe0, 0xd2, 0x0d, 0x28, 0xf0, 0x53, 0x0e, 0xcc, 0x74, + 0xca, 0x7d, 0xee, 0xe5, 0xfa, 0xb5, 0xc2, 0x6a, 0x33, 0xbf, 0x9c, 0x9e, 0xdd, 0xe9, 0x22, 0x6e, + 0x72, 0xa7, 0xb7, 0x94, 0x71, 0x3d, 0x22, 0x5d, 0xf2, 0x37, 0x1c, 0x18, 0xf6, 0x9a, 0x3e, 0x08, + 0x06, 0x75, 0x45, 0xc3, 0x6e, 0xd3, 0x27, 0xb3, 0x6f, 0x38, 0x07, 0x86, 0x15, 0x8d, 0xd8, 0x3a, + 0x4d, 0xc4, 0x58, 0x15, 0xf7, 0x56, 0xf0, 0x36, 0x88, 0x91, 0x03, 0xd6, 0x5b, 0x4d, 0x49, 0xf9, + 0x17, 0x55, 0x22, 0xbb, 0x81, 0xb1, 0xc1, 0x6e, 0x6d, 0x8c, 0x1c, 0xa4, 0x16, 0xc1, 0xa8, 0xbf, + 0x86, 0x63, 0x60, 0x68, 0x2b, 0x7f, 0xe3, 0xce, 0x66, 0x7c, 0x00, 0x8e, 0x82, 0xc1, 0xbb, 0xf2, + 0xfb, 0x9b, 0x71, 0x2e, 0x77, 0xaa, 0x99, 0x3f, 0x21, 0x41, 0x18, 0x3f, 0x42, 0x29, 0x72, 0x90, + 0xca, 0xa1, 0x94, 0xb3, 0x9f, 0x42, 0x8d, 0xa4, 0x0a, 0x26, 0x43, 0xe9, 0x1c, 0xc6, 0x01, 0x7f, + 0x80, 0xeb, 0x9e, 0x22, 0xce, 0x27, 0x2c, 0x80, 0x21, 0x37, 0xa7, 0xc4, 0x5e, 0xa0, 0xd7, 0x70, + 0x51, 0x73, 0xb1, 0x35, 0x2e, 0xb9, 0x01, 0xe6, 0xba, 0x67, 0xf4, 0x2e, 0x3c, 0x4f, 0x04, 0x79, + 0x8e, 0x05, 0xa9, 0xfc, 0x9f, 0x4f, 0x25, 0x9a, 0x9d, 0xbb, 0x50, 0xd9, 0x09, 0x52, 0x79, 0x99, + 0xfe, 0xb8, 0xcd, 0x3f, 0xf7, 0xe3, 0x58, 0x33, 0xff, 0xa3, 0x18, 0xf8, 0x36, 0x97, 0x9e, 0xcd, + 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0xf6, 0x48, 0x27, 0x6d, 0x6f, 0xeb, 0xd4, 0xcf, 0xf4, 0x75, + 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x02, 0x78, 0x83, 0x0e, 0xa2, 0x75, 0x03, 0x23, 0x4a, + 0x50, 0x89, 0x1c, 0x62, 0x13, 0x69, 0x8a, 0x5e, 0x47, 0x15, 0xac, 0x50, 0xdb, 0xc4, 0x96, 0x43, + 0x6b, 0xd7, 0x4f, 0xf9, 0x4f, 0x39, 0xd6, 0xe5, 0x3f, 0xe5, 0x82, 0x3d, 0xf2, 0x53, 0x2e, 0xd4, + 0x54, 0xa7, 0xef, 0x81, 0x73, 0x5b, 0xaa, 0x5e, 0x46, 0xc4, 0xa6, 0x48, 0x23, 0x26, 0x46, 0x4a, + 0xd1, 0xf9, 0xec, 0x98, 0x79, 0xb2, 0x55, 0x4a, 0x0d, 0x2b, 0x27, 0x8a, 0xfb, 0x2a, 0xad, 0xda, + 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, 0x2e, 0x11, 0xab, 0x6e, 0x51, 0xec, 0x2d, 0x3d, + 0xdb, 0x48, 0xab, 0x50, 0x3a, 0x42, 0x29, 0x87, 0xbf, 0x13, 0x2c, 0x4b, 0xa5, 0xca, 0xca, 0xa5, + 0x65, 0xbc, 0x9c, 0x59, 0x2d, 0xae, 0xae, 0x66, 0x56, 0xd7, 0x56, 0xca, 0x19, 0x65, 0xf9, 0xe2, + 0xe5, 0xcc, 0xc5, 0xd5, 0xb2, 0x52, 0x2c, 0x57, 0xde, 0xc2, 0x6b, 0xcb, 0xab, 0x29, 0xd4, 0x28, + 0x4c, 0xfa, 0xed, 0x0b, 0x13, 0x2e, 0xf5, 0xef, 0x51, 0x90, 0x88, 0x4a, 0xe2, 0xe7, 0x03, 0x78, + 0x19, 0xcc, 0xb3, 0x06, 0xb1, 0x95, 0x9f, 0x82, 0x83, 0x07, 0x87, 0x78, 0x21, 0x26, 0xcf, 0x39, + 0x00, 0x3e, 0xc2, 0x56, 0x7b, 0xb2, 0x78, 0x1b, 0x24, 0xc3, 0xa8, 0xa1, 0x39, 0xc3, 0x99, 0x85, + 0x38, 0xf9, 0x54, 0x10, 0x77, 0x23, 0x30, 0x73, 0x74, 0xf0, 0x0d, 0xb6, 0x71, 0x3c, 0xe2, 0x05, + 0x3e, 0xcc, 0x77, 0xbb, 0xdd, 0xd1, 0x75, 0xf0, 0x0d, 0xcd, 0x26, 0x83, 0x88, 0x17, 0x06, 0xc3, + 0x7c, 0xdf, 0x0f, 0xb4, 0x83, 0xdd, 0xf8, 0xb6, 0x3a, 0xcc, 0x21, 0xc4, 0x0b, 0x43, 0x1d, 0x7c, + 0xfd, 0x66, 0xf3, 0x1d, 0x70, 0x3a, 0x62, 0xaa, 0x50, 0x0f, 0x3b, 0x8c, 0x78, 0x61, 0x58, 0x4e, + 0x84, 0x8c, 0x15, 0x6c, 0x67, 0xbb, 0xa3, 0x07, 0x26, 0x26, 0x5e, 0x18, 0xe9, 0x82, 0xee, 0x73, + 0x7f, 0x0b, 0x24, 0xc2, 0xe8, 0x81, 0x19, 0x68, 0x14, 0xf1, 0xc2, 0xa8, 0x7c, 0x32, 0x88, 0x5b, + 0x68, 0xcd, 0x43, 0x1d, 0xe6, 0x0a, 0x75, 0x85, 0x63, 0xac, 0x0b, 0x0e, 0x99, 0x2b, 0xdc, 0x09, + 0x47, 0xcc, 0x15, 0x9c, 0x9b, 0x00, 0xe2, 0x85, 0x89, 0xb0, 0xb9, 0x0a, 0xed, 0x19, 0xaa, 0xab, + 0x9b, 0x5a, 0xea, 0x8e, 0x23, 0x5e, 0x98, 0xec, 0x74, 0x93, 0xaf, 0x2d, 0x8e, 0x6a, 0x1b, 0xe8, + 0xa9, 0x26, 0x5e, 0xa0, 0xa7, 0x0a, 0xd9, 0xa6, 0xdd, 0x57, 0x5d, 0x01, 0x0b, 0x11, 0xdb, 0x84, + 0x9d, 0x32, 0x89, 0x78, 0x61, 0x5a, 0x9e, 0x0f, 0x59, 0x27, 0x34, 0xca, 0xf4, 0x20, 0xd0, 0x0a, + 0x8a, 0x29, 0xc4, 0x0b, 0xf1, 0x6e, 0x04, 0x7a, 0x06, 0x73, 0x68, 0xe4, 0x99, 0x46, 0xbc, 0x30, + 0x13, 0xf1, 0x4e, 0xc0, 0x4a, 0x5d, 0x91, 0x03, 0x43, 0x15, 0x2f, 0xc0, 0x4e, 0x64, 0x8f, 0x73, + 0xae, 0xda, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x23, 0x94, 0xea, 0x15, 0x58, 0xa9, 0x1c, 0xfa, 0x90, + 0x9a, 0x36, 0xbe, 0x80, 0xdc, 0xbf, 0x15, 0xa5, 0x66, 0x79, 0x8b, 0x87, 0x17, 0xa2, 0x68, 0x01, + 0xb9, 0x1d, 0xbc, 0xe5, 0x0b, 0x48, 0xba, 0x80, 0x56, 0x1e, 0xa2, 0x46, 0x2a, 0x09, 0x06, 0x0b, + 0xa4, 0x5c, 0xef, 0x56, 0x9d, 0x53, 0x0f, 0xc0, 0xb4, 0x37, 0x69, 0xfe, 0xb7, 0x4a, 0xab, 0x0c, + 0x6c, 0x0a, 0xc4, 0xfc, 0x77, 0x1b, 0x39, 0xa6, 0x3a, 0x29, 0x6a, 0xb0, 0xac, 0x50, 0xc5, 0xab, + 0x1e, 0xaf, 0x1d, 0xeb, 0x77, 0x87, 0x88, 0xcc, 0x50, 0x52, 0x9f, 0x71, 0x60, 0xfa, 0x7d, 0xa3, + 0xac, 0x50, 0x7c, 0x4f, 0x92, 0xf1, 0xc7, 0x36, 0xb6, 0x28, 0x5c, 0x07, 0xbc, 0x52, 0x74, 0x85, + 0x18, 0x97, 0x96, 0xfb, 0xae, 0x45, 0xb2, 0x83, 0x0d, 0xdf, 0x06, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, + 0xf8, 0x3c, 0xd1, 0x3a, 0xe7, 0x85, 0x2d, 0x15, 0xd7, 0xca, 0x37, 0x15, 0xeb, 0x40, 0x06, 0x2e, + 0xb8, 0xf3, 0x9d, 0x46, 0x60, 0x3c, 0x10, 0x9b, 0x4e, 0x7b, 0x70, 0x7f, 0x53, 0xbe, 0x15, 0x1f, + 0x80, 0x23, 0x80, 0xbf, 0xb5, 0xb3, 0x19, 0xe7, 0xa4, 0xbf, 0x2d, 0x80, 0x53, 0x51, 0xc6, 0x77, + 0xb0, 0x79, 0xa8, 0x96, 0x30, 0xfc, 0x2b, 0x0f, 0x86, 0xd7, 0x4d, 0xc7, 0xe6, 0xb0, 0x7f, 0xe9, + 0x93, 0xfd, 0xa3, 0xa4, 0xfe, 0x15, 0xfb, 0xe6, 0xef, 0xff, 0xfc, 0x59, 0xec, 0xcb, 0x58, 0xea, + 0xef, 0x31, 0xf1, 0x70, 0xd9, 0x7f, 0x4c, 0xed, 0xf6, 0x94, 0x2a, 0x1e, 0x05, 0xca, 0x47, 0x43, + 0x3c, 0x0a, 0x56, 0x84, 0x86, 0x78, 0x14, 0x88, 0xce, 0x86, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, + 0x4c, 0xf1, 0xc8, 0x0e, 0x1d, 0x1c, 0x05, 0x22, 0xa9, 0x21, 0x1e, 0x85, 0x2e, 0x94, 0xbf, 0x0e, + 0x9c, 0xb7, 0xc3, 0xb5, 0x21, 0x1e, 0x05, 0x73, 0xdb, 0x3b, 0x16, 0x35, 0x0d, 0x13, 0x57, 0xd4, + 0x27, 0x62, 0xba, 0xe1, 0x32, 0x09, 0xa0, 0x59, 0x51, 0x3a, 0x56, 0x94, 0x91, 0x15, 0x41, 0x08, + 0x0b, 0xd9, 0x6b, 0x9c, 0x6c, 0x88, 0x47, 0xed, 0x5c, 0xd5, 0x10, 0x8f, 0x22, 0xcf, 0x2f, 0x0e, + 0x66, 0xd7, 0x77, 0x99, 0x10, 0x5e, 0xa0, 0xcd, 0x6e, 0xc0, 0x9f, 0x73, 0x00, 0xb8, 0x0e, 0x67, + 0xd7, 0xe3, 0xeb, 0x71, 0x7a, 0x9a, 0xf9, 0xfc, 0x5c, 0x6a, 0xf1, 0x18, 0x8f, 0xe7, 0xb8, 0x34, + 0xfc, 0x5f, 0x30, 0x7c, 0x83, 0x90, 0x03, 0xdb, 0x80, 0xd3, 0x59, 0xcb, 0x2e, 0x4a, 0xd9, 0xed, + 0xb2, 0x77, 0xa7, 0x5f, 0x84, 0x73, 0x96, 0x71, 0x16, 0xe0, 0xeb, 0xc7, 0xc6, 0x9a, 0xd3, 0x17, + 0x35, 0xe0, 0x77, 0x38, 0x30, 0xec, 0xde, 0xf1, 0x17, 0x31, 0x4d, 0x8f, 0x57, 0x9d, 0xd4, 0x32, + 0x93, 0xe2, 0xcd, 0xe4, 0x73, 0x4a, 0xe1, 0x98, 0xe1, 0xd7, 0x1c, 0x18, 0xf5, 0x93, 0x0d, 0x5c, + 0x3a, 0x56, 0x94, 0x48, 0x5e, 0xea, 0x29, 0xc9, 0x23, 0x26, 0x49, 0x39, 0x99, 0x16, 0x0f, 0xa5, + 0x67, 0x4b, 0xa2, 0x14, 0x71, 0xd6, 0x95, 0xc6, 0xc9, 0x51, 0xf7, 0x97, 0xa5, 0x7e, 0x51, 0xe0, + 0xcf, 0x38, 0x90, 0xd8, 0x55, 0x68, 0xa9, 0xea, 0x24, 0xe3, 0x56, 0xf2, 0xda, 0xd6, 0x59, 0xe0, + 0x7d, 0x75, 0x2a, 0x5d, 0x62, 0x2a, 0x2d, 0x49, 0x6f, 0x8a, 0x87, 0x92, 0xf2, 0xbc, 0x02, 0x72, + 0x69, 0xf8, 0x03, 0x0e, 0x0c, 0x6f, 0xe0, 0x1a, 0xa6, 0xb8, 0x33, 0xd2, 0x7a, 0xf1, 0x7a, 0xd0, + 0xcc, 0xbf, 0x59, 0x3c, 0x0f, 0xa6, 0x00, 0xc8, 0x1b, 0xea, 0x75, 0x5c, 0xcf, 0xdb, 0xb4, 0x0a, + 0x07, 0xc0, 0x29, 0x30, 0x7c, 0xcb, 0xf9, 0x94, 0xe0, 0x24, 0x18, 0x34, 0xb1, 0x52, 0x06, 0x43, + 0x8f, 0x4d, 0x95, 0x62, 0x37, 0xf8, 0xd2, 0xcf, 0x1b, 0x7c, 0x7f, 0xe2, 0xc0, 0xe8, 0x55, 0x4c, + 0x6f, 0xdb, 0xd8, 0xac, 0x7f, 0x95, 0xe1, 0xf7, 0x29, 0xd7, 0xcc, 0xdf, 0x4d, 0xed, 0x80, 0x85, + 0x6e, 0x63, 0x45, 0x8b, 0x61, 0x9f, 0xe3, 0xc4, 0x07, 0x5c, 0x71, 0x80, 0xe9, 0x97, 0x85, 0x17, + 0x8e, 0xd3, 0xef, 0x63, 0x87, 0x81, 0xaf, 0xe5, 0xa7, 0x43, 0x20, 0x7e, 0x15, 0x53, 0xbf, 0x8b, + 0x70, 0x99, 0x5f, 0xee, 0xbf, 0x74, 0x7a, 0xf8, 0xc9, 0x17, 0x47, 0x4d, 0x7d, 0x32, 0xc8, 0x34, + 0xf8, 0x07, 0x0f, 0xbf, 0xe4, 0x8f, 0xd1, 0xa1, 0xd5, 0x9a, 0x78, 0x49, 0xb8, 0xdb, 0x88, 0xd3, + 0x88, 0x9e, 0x45, 0x2a, 0x56, 0xcf, 0x19, 0xa5, 0xe3, 0xcc, 0x7e, 0xd6, 0x61, 0xb8, 0x92, 0x3c, + 0x63, 0x8a, 0xe8, 0x7e, 0xda, 0x13, 0x37, 0x54, 0xfb, 0x7a, 0x77, 0xf9, 0x9d, 0x78, 0xed, 0x2e, + 0xbe, 0xab, 0x22, 0x3d, 0x19, 0x76, 0x96, 0xb6, 0x1e, 0xad, 0x73, 0x8f, 0xe3, 0x9e, 0x7a, 0x5a, + 0xcf, 0xe2, 0x1a, 0x2a, 0xbd, 0xf0, 0xb7, 0x3c, 0x18, 0xdc, 0x2c, 0x55, 0x09, 0xec, 0xf5, 0xe3, + 0x88, 0x65, 0x17, 0xb3, 0xee, 0x10, 0xe3, 0x27, 0x87, 0xe7, 0x86, 0x4c, 0xfd, 0x25, 0xd6, 0xcc, + 0x7f, 0x23, 0x06, 0x26, 0x70, 0xa9, 0x4a, 0x90, 0xe5, 0xb6, 0x5c, 0x60, 0x94, 0xad, 0x4c, 0xa3, + 0x04, 0x67, 0xee, 0xd8, 0x9a, 0xa6, 0x98, 0xf5, 0x1c, 0xda, 0xf4, 0xb6, 0x92, 0xf1, 0x8d, 0xf6, + 0xf3, 0x14, 0xdb, 0x4d, 0x6d, 0x00, 0x18, 0xbe, 0xb6, 0x4c, 0xda, 0x3e, 0x2f, 0xeb, 0x7b, 0x57, + 0x00, 0x7f, 0x71, 0x69, 0x05, 0xae, 0x81, 0x4b, 0x32, 0xa6, 0xb6, 0xa9, 0xe3, 0x32, 0x7a, 0x5c, + 0xc5, 0x3a, 0xa2, 0x55, 0x8c, 0x4c, 0x6c, 0x11, 0xdb, 0x2c, 0x61, 0xa4, 0x5a, 0x88, 0x62, 0xcd, + 0x20, 0xa6, 0x62, 0xaa, 0xb5, 0x3a, 0xb2, 0x75, 0xe5, 0x50, 0x51, 0x6b, 0x4a, 0xb1, 0x86, 0xb3, + 0xef, 0xbd, 0x0d, 0xf8, 0xd5, 0xa5, 0x55, 0xb8, 0x0a, 0xd2, 0xcf, 0x20, 0x50, 0x26, 0xd8, 0x42, + 0x3a, 0xa1, 0x08, 0x3f, 0x51, 0x2d, 0x9a, 0x85, 0xc3, 0x60, 0xf0, 0x27, 0x31, 0x8e, 0x67, 0x97, + 0xec, 0xe1, 0xf1, 0x69, 0xc2, 0x31, 0x8c, 0x78, 0xe4, 0x3a, 0xe6, 0xfe, 0x7c, 0x2a, 0x1e, 0x2c, + 0x38, 0xce, 0x59, 0xce, 0x7d, 0xb2, 0xb9, 0x0f, 0x61, 0xc7, 0x11, 0xfc, 0x05, 0x07, 0x26, 0x36, + 0x30, 0x36, 0xd8, 0x6f, 0x48, 0xce, 0xc6, 0xd7, 0xd3, 0xd9, 0x5c, 0x61, 0xba, 0x5d, 0x4e, 0xad, + 0x1e, 0x9b, 0xe2, 0x43, 0x3f, 0x4f, 0x67, 0x9d, 0x71, 0x85, 0x55, 0xa1, 0x3c, 0x00, 0x3b, 0xa4, + 0xa0, 0xea, 0x65, 0x55, 0xdf, 0xb7, 0xe0, 0x7c, 0x47, 0x06, 0xdf, 0xf0, 0x7e, 0xb9, 0xef, 0x99, + 0xdc, 0x07, 0xe0, 0x3d, 0x30, 0x72, 0x57, 0xd5, 0x30, 0xb1, 0x29, 0xec, 0x01, 0xd4, 0x13, 0xf9, + 0x34, 0x13, 0xff, 0x24, 0x9c, 0x0d, 0xda, 0x93, 0x7a, 0xc4, 0xaa, 0x20, 0xbe, 0x69, 0x9a, 0xc4, + 0x74, 0xca, 0xf7, 0x06, 0xa6, 0x8a, 0x5a, 0xb3, 0xfa, 0x66, 0x70, 0x8e, 0x31, 0x78, 0x15, 0x2e, + 0x84, 0x1c, 0xe6, 0x50, 0x7d, 0xac, 0xd2, 0x6a, 0xd9, 0xa3, 0xfa, 0x5d, 0x0e, 0xc0, 0xab, 0x98, + 0x46, 0x67, 0xb7, 0xe3, 0x7b, 0x84, 0x08, 0x46, 0x4f, 0x31, 0xde, 0x60, 0x62, 0x9c, 0x49, 0xcd, + 0x07, 0xc5, 0x70, 0x24, 0x28, 0x92, 0x72, 0x5d, 0x3c, 0x72, 0x3a, 0x02, 0x36, 0xe3, 0xc1, 0x6f, + 0x71, 0x60, 0x66, 0x97, 0x58, 0xd4, 0xa1, 0xc8, 0x50, 0x99, 0x20, 0xcf, 0x37, 0x26, 0xf6, 0xe4, + 0x2e, 0x32, 0xee, 0xe7, 0x53, 0xe7, 0x82, 0xdc, 0x0d, 0x62, 0x51, 0x47, 0x02, 0xf6, 0xab, 0xa0, + 0x2b, 0x86, 0x1f, 0x14, 0xc9, 0x5f, 0x71, 0xcd, 0xfc, 0x17, 0x1c, 0xac, 0xf4, 0x98, 0xda, 0x82, + 0x6f, 0xd8, 0x28, 0x93, 0x41, 0x8f, 0xab, 0x6a, 0xa9, 0x8a, 0xac, 0x2a, 0xb1, 0x6b, 0x65, 0x76, + 0xfd, 0x8a, 0x18, 0xd9, 0x16, 0x2e, 0x23, 0x55, 0x47, 0x46, 0x4d, 0x29, 0x61, 0x44, 0x2a, 0xec, + 0xa2, 0x96, 0x49, 0xc9, 0xd6, 0xb0, 0xee, 0xce, 0x02, 0xa8, 0x44, 0x34, 0x67, 0x71, 0x26, 0x79, + 0x1b, 0x2c, 0x76, 0xeb, 0x0c, 0x9c, 0x6b, 0xe4, 0xcf, 0x89, 0xfd, 0xbe, 0x35, 0x3e, 0x02, 0x27, + 0x4a, 0x8a, 0x86, 0x6b, 0xeb, 0x8a, 0x85, 0x3d, 0x1a, 0xce, 0x50, 0x03, 0x65, 0x30, 0xe4, 0xfe, + 0xb4, 0xd9, 0x6f, 0x20, 0xcd, 0x33, 0x1b, 0xce, 0xc2, 0x99, 0x50, 0x20, 0x39, 0x47, 0xd2, 0x47, + 0x60, 0x21, 0xaf, 0x13, 0x5a, 0xc5, 0xa6, 0xc7, 0xc9, 0x71, 0x5e, 0xe0, 0x52, 0xbd, 0x1b, 0xba, + 0x62, 0xfd, 0x32, 0x1e, 0x28, 0x7c, 0x31, 0xd2, 0xcc, 0x7f, 0x3e, 0x02, 0xff, 0xc0, 0x81, 0xd9, + 0x3c, 0x2a, 0xb8, 0xaf, 0xc3, 0x81, 0x14, 0xf0, 0x01, 0x38, 0xb1, 0x2f, 0xef, 0xae, 0x67, 0xae, + 0xba, 0xaa, 0x23, 0xc3, 0x24, 0x8f, 0x70, 0x89, 0xf6, 0x6b, 0xb2, 0x64, 0x5c, 0x27, 0x3a, 0xfe, + 0x2f, 0x4f, 0x35, 0x07, 0x3a, 0xfd, 0x11, 0x38, 0x51, 0xb8, 0xb3, 0x81, 0x56, 0x32, 0xeb, 0x35, + 0xc5, 0xb6, 0x30, 0xba, 0xa1, 0x96, 0xb0, 0x6e, 0x61, 0xb8, 0xd5, 0x1f, 0x65, 0xb1, 0x58, 0x23, + 0x45, 0x51, 0x53, 0x2c, 0x8a, 0x4d, 0xf1, 0xc6, 0xf6, 0xfa, 0xe6, 0xce, 0x9d, 0xcd, 0x2c, 0x7d, + 0x42, 0x25, 0x7e, 0x39, 0xbb, 0x94, 0xe6, 0xb9, 0xd8, 0xa0, 0x14, 0x57, 0x0c, 0xf7, 0x4d, 0x5b, + 0x25, 0xba, 0xf8, 0xc8, 0x22, 0xba, 0x34, 0x17, 0xdc, 0x79, 0x92, 0xa9, 0x10, 0x92, 0xd1, 0x54, + 0x0d, 0xe7, 0x3a, 0x20, 0x73, 0x3d, 0x20, 0xe5, 0x5d, 0xa7, 0x62, 0xac, 0xc0, 0x6d, 0x70, 0xb5, + 0xb3, 0x62, 0xd8, 0x16, 0x36, 0xdb, 0xd5, 0xa2, 0xaa, 0x1c, 0x62, 0x64, 0x60, 0x53, 0x53, 0x2d, + 0xcb, 0x09, 0x4c, 0x4a, 0x90, 0x52, 0x2a, 0x61, 0xcb, 0x0a, 0x55, 0x97, 0xac, 0xfc, 0x12, 0x35, + 0x68, 0x44, 0xbe, 0x06, 0xf8, 0xd5, 0xe5, 0x35, 0x98, 0x07, 0x93, 0xdb, 0x6f, 0x68, 0x48, 0x41, + 0x14, 0x2b, 0x06, 0xa1, 0x59, 0xb8, 0x04, 0xb2, 0xc9, 0xbe, 0x9e, 0xff, 0xee, 0x7f, 0x2f, 0x06, + 0xa6, 0xc1, 0x58, 0x41, 0xb1, 0xd4, 0x12, 0xeb, 0xff, 0x63, 0xa3, 0x1c, 0x78, 0x25, 0x34, 0x11, + 0x4c, 0x8f, 0xc6, 0x92, 0x63, 0x1f, 0x64, 0xf2, 0xbb, 0xdb, 0x99, 0xeb, 0xb8, 0x8e, 0x62, 0xe0, + 0x8f, 0x5c, 0x6b, 0x42, 0xf8, 0x1d, 0x37, 0xca, 0x0b, 0x83, 0xd2, 0x59, 0xdf, 0x87, 0x01, 0x87, + 0x8b, 0x44, 0xb1, 0x69, 0x55, 0x74, 0xfe, 0x10, 0x53, 0xfd, 0x1f, 0x9c, 0x5b, 0xec, 0x0d, 0x44, + 0xc9, 0x01, 0xd6, 0x0b, 0xff, 0x0f, 0x92, 0xee, 0xc0, 0x01, 0xe1, 0x55, 0x53, 0xd1, 0xa9, 0x85, + 0x9c, 0x85, 0x67, 0x3d, 0xb0, 0xe0, 0x8d, 0x21, 0x70, 0xd6, 0x3b, 0x64, 0x2b, 0xff, 0x74, 0x1d, + 0x0c, 0x29, 0x65, 0x4d, 0xd5, 0x61, 0x2e, 0x84, 0xaa, 0x97, 0x43, 0x60, 0xcc, 0x19, 0x0e, 0x98, + 0x6a, 0x51, 0xa7, 0x12, 0x1d, 0x62, 0xa4, 0xea, 0x15, 0x62, 0x6a, 0xcc, 0xdf, 0xc5, 0x45, 0x30, + 0x19, 0x34, 0xc5, 0x40, 0x74, 0x34, 0x2a, 0x9e, 0xef, 0x39, 0x1c, 0x45, 0x41, 0xcd, 0x6d, 0x70, + 0xea, 0x66, 0x3b, 0xfb, 0x04, 0xef, 0x54, 0xbf, 0x77, 0xe9, 0xfe, 0x58, 0xcb, 0x73, 0xc5, 0x61, + 0x76, 0x9f, 0x57, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x35, 0xba, 0x1f, 0xec, 0xc6, 0x27, 0x00, + 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index e9e8855f877..49621b876cc 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -33,7 +33,7 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "repeated_enum_value": 18, "enum_value_annotation": 19, "repeated_string_annotation": 20}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -43,7 +43,6 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run var ( val string e int32 - es []int32 ok bool err error _ = err @@ -253,23 +252,6 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e) - val, ok = pathParams["repeated_enum_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_enum_value") - } - - es, err = runtime.EnumSlice(val, ",", NumericEnum_value) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_enum_value", err) - } - - s := make([]NumericEnum, len(es)) - for i, v := range es { - s[i] = NumericEnum(v) - } - protoReq.RepeatedEnumValue = s - val, ok = pathParams["enum_value_annotation"] if !ok { return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value_annotation") @@ -283,17 +265,6 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.EnumValueAnnotation = NumericEnum(e) - val, ok = pathParams["repeated_string_annotation"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repeated_string_annotation") - } - - protoReq.RepeatedStringAnnotation, err = runtime.StringSlice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repeated_string_annotation", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1371,7 +1342,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24, 1, 0, 4, 1, 5, 25}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "repeated_enum_value", "enum_value_annotation", "repeated_string_annotation"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 1fd471575a5..9a73797c510 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -285,7 +285,7 @@ service ABitOfEverythingService { // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index af0b88fd77c..b8639ec204f 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -437,7 +437,7 @@ } } }, - "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{repeated_enum_value}/{enum_value_annotation}/{repeated_string_annotation}": { + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -602,22 +602,6 @@ "JKL" ] }, - { - "name": "repeated_enum_value", - "description": "repeated enum value. it is comma-separated in query", - "in": "path", - "required": true, - "type": "array", - "items": { - "type": "string", - "enum": [ - "ZERO", - "ONE" - ] - }, - "collectionFormat": "csv", - "minItems": 1 - }, { "name": "enum_value_annotation", "description": "Numeric enum description.", @@ -628,18 +612,6 @@ "ZERO", "ONE" ] - }, - { - "name": "repeated_string_annotation", - "description": "Repeated string description.", - "in": "path", - "required": true, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv", - "minItems": 1 } ], "tags": [ diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e1c9eca76a0..54b9ce6ba12 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1221,7 +1221,7 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string) er paragraphs := strings.Split(comment, "\n\n") - // If there is a summary (or summary-equivalent) and its empty, use the first + // If there is a summary (or summary-equivalent) and it's empty, use the first // paragraph as summary, and the rest as description. if summaryValue.CanSet() { summary := strings.TrimSpace(paragraphs[0]) diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index cec41bda914..77da0550b6c 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -42,6 +42,11 @@ func TestJSONPbMarshal(t *testing.T) { "a": examplepb.NumericEnum_ONE, "b": examplepb.NumericEnum_ZERO, }, + RepeatedEnumAnnotation: []examplepb.NumericEnum{}, + EnumValueAnnotation: examplepb.NumericEnum_ONE, + RepeatedStringAnnotation: []string{}, + RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{}, + NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, } for i, spec := range []struct { @@ -258,6 +263,11 @@ func TestJSONPbEncoder(t *testing.T) { "a": examplepb.NumericEnum_ONE, "b": examplepb.NumericEnum_ZERO, }, + RepeatedEnumAnnotation: []examplepb.NumericEnum{}, + EnumValueAnnotation: examplepb.NumericEnum_ONE, + RepeatedStringAnnotation: []string{}, + RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{}, + NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, } for i, spec := range []struct { From 2f0c6b9f440b2b25d1f39a1c5eb9b69eb7b4ed2a Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 17:48:40 -0600 Subject: [PATCH 0108/1518] 863 removed unused code --- examples/proto/examplepb/echo_service.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index bc9feb32160..f1687bccf64 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/echo_service.proto", + "title": "Echo Service", "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, From 266fad2e78abd522f1ad3b31d8885ae15ef6b924 Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 17:54:35 -0600 Subject: [PATCH 0109/1518] 863 completing proto documentation --- examples/clients/echo/api_client.go | 2 +- examples/clients/echo/api_response.go | 2 +- examples/clients/echo/configuration.go | 2 +- examples/clients/echo/echo_service_api.go | 2 +- examples/clients/echo/examplepb_embedded.go | 2 +- examples/clients/echo/examplepb_simple_message.go | 2 +- examples/proto/examplepb/echo_service.swagger.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index 7a517148026..d54e3e68565 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/api_response.go index 8b0d07c4a13..a4f0ab08001 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/api_response.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 9a75a30aeec..6441b8dc698 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go index 6ae7cf85a32..7625bc9eec8 100644 --- a/examples/clients/echo/echo_service_api.go +++ b/examples/clients/echo/echo_service_api.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_embedded.go b/examples/clients/echo/examplepb_embedded.go index 4b5fe265ac9..ad76336c25b 100644 --- a/examples/clients/echo/examplepb_embedded.go +++ b/examples/clients/echo/examplepb_embedded.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/examplepb_simple_message.go index 366a6876665..2b9b366e57e 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/examplepb_simple_message.go @@ -1,5 +1,5 @@ /* - * Echo Service + * examples/proto/examplepb/echo_service.proto * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index f1687bccf64..bc9feb32160 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "Echo Service", + "title": "examples/proto/examplepb/echo_service.proto", "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, From 3f14b6828d28e60ebfc0d586e2c4400ecddc7a41 Mon Sep 17 00:00:00 2001 From: fahernandez Date: Mon, 11 Feb 2019 18:01:31 -0600 Subject: [PATCH 0110/1518] 863 fixing node test --- examples/browser/a_bit_of_everything_service.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/browser/a_bit_of_everything_service.spec.js b/examples/browser/a_bit_of_everything_service.spec.js index 5d8e792fda9..21512ab78aa 100644 --- a/examples/browser/a_bit_of_everything_service.spec.js +++ b/examples/browser/a_bit_of_everything_service.spec.js @@ -37,6 +37,7 @@ describe('ABitOfEverythingService', function() { enum_value: "ONE", path_enum_value: "DEF", nested_path_enum_value: "JKL", + enum_value_annotation: "ONE", }; beforeEach(function(done) { From 657b8acaacf2604abbfb62875a0a768e759c7c64 Mon Sep 17 00:00:00 2001 From: fahernandez Date: Tue, 12 Feb 2019 10:46:17 -0600 Subject: [PATCH 0111/1518] 863 keeping comment precendece on swagger package definition --- examples/clients/echo/api_client.go | 2 +- examples/clients/echo/api_response.go | 2 +- examples/clients/echo/configuration.go | 2 +- examples/clients/echo/echo_service_api.go | 2 +- examples/clients/echo/examplepb_embedded.go | 2 +- .../clients/echo/examplepb_simple_message.go | 2 +- .../proto/examplepb/echo_service.swagger.json | 2 +- protoc-gen-swagger/genswagger/template.go | 20 ++++++++++--------- 8 files changed, 18 insertions(+), 16 deletions(-) diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index d54e3e68565..7a517148026 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/api_response.go index a4f0ab08001..8b0d07c4a13 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/api_response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 6441b8dc698..9a75a30aeec 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go index 7625bc9eec8..6ae7cf85a32 100644 --- a/examples/clients/echo/echo_service_api.go +++ b/examples/clients/echo/echo_service_api.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_embedded.go b/examples/clients/echo/examplepb_embedded.go index ad76336c25b..4b5fe265ac9 100644 --- a/examples/clients/echo/examplepb_embedded.go +++ b/examples/clients/echo/examplepb_embedded.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/examplepb_simple_message.go index 2b9b366e57e..366a6876665 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/examplepb_simple_message.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/echo_service.proto + * Echo Service * * Echo Service API consists of a single service which returns a message. * diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index bc9feb32160..f1687bccf64 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/echo_service.proto", + "title": "Echo Service", "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 54b9ce6ba12..e779542736a 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -103,7 +103,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st fieldType := field.GetTypeName() if message.File != nil { comments := fieldProtoComments(reg, message, field) - if err := updateSwaggerDataFromComments(&schema, comments); err != nil { + if err := updateSwaggerDataFromComments(&schema, comments, "MessageType"); err != nil { return nil, err } } @@ -258,7 +258,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, }, } msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) - if err := updateSwaggerDataFromComments(&schema, msgComments); err != nil { + if err := updateSwaggerDataFromComments(&schema, msgComments, "MessageType"); err != nil { panic(err) } opts, err := extractSchemaOptionFromMessageDescriptor(msg.DescriptorProto) @@ -302,7 +302,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, for _, f := range msg.Fields { fieldValue := schemaOfField(f, reg, customRefs) comments := fieldProtoComments(reg, msg, f) - if err := updateSwaggerDataFromComments(&fieldValue, comments); err != nil { + if err := updateSwaggerDataFromComments(&fieldValue, comments, "MessageType"); err != nil { panic(err) } @@ -507,7 +507,7 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r Default: defaultValue, }, } - if err := updateSwaggerDataFromComments(&enumSchemaObject, enumComments); err != nil { + if err := updateSwaggerDataFromComments(&enumSchemaObject, enumComments, "EnumType"); err != nil { panic(err) } @@ -858,7 +858,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } methComments := protoComments(reg, svc.File, nil, "Method", int32(svcIdx), methProtoPath, int32(methIdx)) - if err := updateSwaggerDataFromComments(operationObject, methComments); err != nil { + if err := updateSwaggerDataFromComments(operationObject, methComments, "Method"); err != nil { panic(err) } @@ -982,7 +982,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // File itself might have some comments and metadata. packageProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") packageComments := protoComments(p.reg, p.File, nil, "Package", packageProtoPath) - if err := updateSwaggerDataFromComments(&s, packageComments); err != nil { + if err := updateSwaggerDataFromComments(&s, packageComments, "Package"); err != nil { panic(err) } @@ -1196,7 +1196,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // // If there is no 'Summary', the same behavior will be attempted on 'Title', // but only if the last character is not a period. -func updateSwaggerDataFromComments(swaggerObject interface{}, comment string) error { +func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, typeName string) error { if len(comment) == 0 { return nil } @@ -1228,7 +1228,8 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string) er description := strings.TrimSpace(strings.Join(paragraphs[1:], "\n\n")) if !usingTitle || (len(summary) > 0 && summary[len(summary)-1] != '.') { // overrides the schema value only if it's empty - if summaryValue.Len() == 0 { + // keep the comment precedence when updating the package definition + if summaryValue.Len() == 0 || typeName == "Package" { summaryValue.Set(reflect.ValueOf(summary)) } if len(description) > 0 { @@ -1236,7 +1237,8 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string) er return fmt.Errorf("Encountered object type with a summary, but no description") } // overrides the schema value only if it's empty - if descriptionValue.Len() == 0 { + // keep the comment precedence when updating the package definition + if descriptionValue.Len() == 0 || typeName == "Package" { descriptionValue.Set(reflect.ValueOf(description)) } } From b73f41879d25fcb2179f7c31c01efd79495a882c Mon Sep 17 00:00:00 2001 From: fahernandez Date: Tue, 12 Feb 2019 11:05:40 -0600 Subject: [PATCH 0112/1518] 863 fixing code format --- protoc-gen-swagger/genswagger/template.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e779542736a..8f440e729a6 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1238,9 +1238,9 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, ty } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if descriptionValue.Len() == 0 || typeName == "Package" { + if descriptionValue.Len() == 0 || typeName == "Package" { descriptionValue.Set(reflect.ValueOf(description)) - } + } } return nil } From 45aec340b2c63ae1aa6f0961fe0090c7f18d18e0 Mon Sep 17 00:00:00 2001 From: fahernandez Date: Tue, 12 Feb 2019 13:04:38 -0600 Subject: [PATCH 0113/1518] 863 changing field options override behavior for schema package object --- protoc-gen-swagger/genswagger/template.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 8f440e729a6..ccaee513be6 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -103,7 +103,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st fieldType := field.GetTypeName() if message.File != nil { comments := fieldProtoComments(reg, message, field) - if err := updateSwaggerDataFromComments(&schema, comments, "MessageType"); err != nil { + if err := updateSwaggerDataFromComments(&schema, comments, false); err != nil { return nil, err } } @@ -258,7 +258,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, }, } msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) - if err := updateSwaggerDataFromComments(&schema, msgComments, "MessageType"); err != nil { + if err := updateSwaggerDataFromComments(&schema, msgComments, false); err != nil { panic(err) } opts, err := extractSchemaOptionFromMessageDescriptor(msg.DescriptorProto) @@ -302,7 +302,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, for _, f := range msg.Fields { fieldValue := schemaOfField(f, reg, customRefs) comments := fieldProtoComments(reg, msg, f) - if err := updateSwaggerDataFromComments(&fieldValue, comments, "MessageType"); err != nil { + if err := updateSwaggerDataFromComments(&fieldValue, comments, false); err != nil { panic(err) } @@ -507,7 +507,7 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r Default: defaultValue, }, } - if err := updateSwaggerDataFromComments(&enumSchemaObject, enumComments, "EnumType"); err != nil { + if err := updateSwaggerDataFromComments(&enumSchemaObject, enumComments, false); err != nil { panic(err) } @@ -858,7 +858,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } methComments := protoComments(reg, svc.File, nil, "Method", int32(svcIdx), methProtoPath, int32(methIdx)) - if err := updateSwaggerDataFromComments(operationObject, methComments, "Method"); err != nil { + if err := updateSwaggerDataFromComments(operationObject, methComments, false); err != nil { panic(err) } @@ -982,7 +982,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // File itself might have some comments and metadata. packageProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") packageComments := protoComments(p.reg, p.File, nil, "Package", packageProtoPath) - if err := updateSwaggerDataFromComments(&s, packageComments, "Package"); err != nil { + if err := updateSwaggerDataFromComments(&s, packageComments, true); err != nil { panic(err) } @@ -1196,7 +1196,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // // If there is no 'Summary', the same behavior will be attempted on 'Title', // but only if the last character is not a period. -func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, typeName string) error { +func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, isPackageObject bool) error { if len(comment) == 0 { return nil } @@ -1229,7 +1229,7 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, ty if !usingTitle || (len(summary) > 0 && summary[len(summary)-1] != '.') { // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if summaryValue.Len() == 0 || typeName == "Package" { + if summaryValue.Len() == 0 || isPackageObject { summaryValue.Set(reflect.ValueOf(summary)) } if len(description) > 0 { @@ -1238,7 +1238,7 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, ty } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if descriptionValue.Len() == 0 || typeName == "Package" { + if descriptionValue.Len() == 0 || isPackageObject { descriptionValue.Set(reflect.ValueOf(description)) } } @@ -1248,7 +1248,7 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, ty // There was no summary field on the swaggerObject. Try to apply the // whole comment into description if the swagger object description is empty. - if descriptionValue.CanSet() && descriptionValue.Len() == 0 { + if descriptionValue.CanSet() && (descriptionValue.Len() == 0 || isPackageObject){ descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, "\n\n"))) return nil } From 8ce214f0a04eec043d200b9571af112b716c9a04 Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Wed, 13 Feb 2019 01:10:56 +0530 Subject: [PATCH 0114/1518] Updated Service, Method, Message Identifiers to be CamelCased The incompatibility caused between the generated .pb.gw.go and .pb.go files due to inconsistent identifier capitalization has been fixed here. Logic from protoc-gen-go for the Message, Service and Method Names is ported to protoc-gen-grpc-gateway. Have made changes in the template.go file and have written a test so we don't regress this in the future. This fixes https://github.com/grpc-ecosystem/grpc-gateway/issues/683 --- .../gengateway/template.go | 10 +- .../gengateway/template_test.go | 95 +++++++++++++++++++ 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index fd5fc1157d9..12c02ae9f9f 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -112,7 +112,6 @@ func (b binding) FieldMaskField() string { fieldMaskField = f } } - if fieldMaskField != nil { return generator2.CamelCase(fieldMaskField.GetName()) } @@ -145,13 +144,18 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { return "", err } var targetServices []*descriptor.Service + + for _, msg := range p.Messages { + msgName := generator2.CamelCase(*msg.Name) + msg.Name = &msgName + } for _, svc := range p.Services { var methodWithBindingsSeen bool - svcName := strings.Title(*svc.Name) + svcName := generator2.CamelCase(*svc.Name) svc.Name = &svcName for _, meth := range svc.Methods { glog.V(2).Infof("Processing %s.%s", svc.GetName(), meth.GetName()) - methName := strings.Title(*meth.Name) + methName := generator2.CamelCase(*meth.Name) meth.Name = &methName for _, b := range meth.Bindings { methodWithBindingsSeen = true diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index 33c28eb1586..ba941d095dd 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -481,3 +481,98 @@ func TestAllowPatchFeature(t *testing.T) { } } } + +func TestIdentifierCapitalization(t *testing.T){ + msgdesc1 := &protodescriptor.DescriptorProto{ + Name: proto.String("Exam_pleRequest"), + } + msgdesc2 := &protodescriptor.DescriptorProto{ + Name: proto.String("example_response"), + } + meth1 := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("ExampleGe2t"), + InputType: proto.String("Exam_pleRequest"), + OutputType: proto.String("example_response"), + } + meth2 := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Exampl_eGet"), + InputType: proto.String("Exam_pleRequest"), + OutputType: proto.String("example_response"), + } + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("Example"), + Method: []*protodescriptor.MethodDescriptorProto{meth1, meth2}, + } + msg1 := &descriptor.Message{ + DescriptorProto: msgdesc1, + } + msg2 := &descriptor.Message{ + DescriptorProto: msgdesc2, + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, + MessageType: []*protodescriptor.DescriptorProto{msgdesc1, msgdesc2}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg1, msg2}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth1, + RequestType: msg1, + ResponseType: msg1, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + }, + }, + }, + }, + }, + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth2, + RequestType: msg2, + ResponseType: msg2, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + }, + }, + }, + }, + }, + }, + } + + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if want := `msg, err := client.ExampleGe2T(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + if want := `msg, err := client.ExamplEGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + if want := `var protoReq ExamPleRequest`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + if want := `var protoReq ExampleResponse`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } +} From ada3454792ff3b2229b1fb32cd946ba0572e60af Mon Sep 17 00:00:00 2001 From: Fabian Hernandez Date: Mon, 18 Feb 2019 12:43:27 -0600 Subject: [PATCH 0115/1518] 868 improving README with AWS API gateway findings (#869) * 868 improving README with AWS API gateway findings * 868 adding review feedback * 868 fixing typos related to aws documentation tips * Update docs/_docs/aws.md Co-Authored-By: fahernandez --- docs/_docs/aws.md | 14 ++++++++++++++ docs/index.md | 1 + 2 files changed, 15 insertions(+) create mode 100644 docs/_docs/aws.md diff --git a/docs/_docs/aws.md b/docs/_docs/aws.md new file mode 100644 index 00000000000..96e98c089b6 --- /dev/null +++ b/docs/_docs/aws.md @@ -0,0 +1,14 @@ +--- +category: documentation +--- + +# AWS + +## Import swagger documentation into AWS API Gateway +The AWS API gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html). +Here are some tips to consider when importing the documentation: + +1. Remove any circular dependencies (these aren't supported by the parser). +2. Remove security-related annotations (These annotations aren't well supported by the parser). +3. Max length of fields are reviewed by the parser but the errors aren't self-explanatory. Review the [specification](https://swagger.io/specification/v2/) to verify that the requirements are met. +4. API gateway errors aren't great, but you can use this [page](https://apidevtools.org/swagger-parser/online/) for structure validation. diff --git a/docs/index.md b/docs/index.md index 59e3047c87a..57b23e1add0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,6 +17,7 @@ To learn more about us check out our documentation on: * [Installation and usage](_docs/usage.md) * [Examples](_docs/examples.md) * [Features](_docs/features.md) +* [AWS API Gateway tips](_docs/aws.md) # Contribution From 6806a84f43b8f96f4964f1aaee186bd406cfdb56 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 18 Feb 2019 22:53:18 +0000 Subject: [PATCH 0116/1518] Switch to go modules --- .circleci/config.yml | 28 +++---- .gitignore | 3 + CONTRIBUTING.md | 4 +- Gopkg.lock | 192 ------------------------------------------- Gopkg.toml | 66 --------------- Makefile | 41 +++++---- README.md | 143 +++++++++++++++++++------------- go.mod | 18 ++++ go.sum | 43 ++++++++++ 9 files changed, 184 insertions(+), 354 deletions(-) delete mode 100644 Gopkg.lock delete mode 100644 Gopkg.toml create mode 100644 go.mod create mode 100644 go.sum diff --git a/.circleci/config.yml b/.circleci/config.yml index 68dd572a8ca..cac9aa698e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,29 +3,27 @@ jobs: build: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - - run: dep ensure --vendor-only - run: go build ./... test: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway environment: - GLOG_logtostderr: "1" + GLOG_logtostderr: '1' steps: - checkout - - run: dep ensure --vendor-only - run: go test -race -coverprofile=coverage.txt ./... - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - - run: dep ensure --vendor-only + - run: go mod vendor - run: > . $HOME/.nvm/nvm.sh && cd examples/browser && @@ -35,25 +33,25 @@ jobs: generate: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - run: make realclean - run: make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}" # Set in Docker image + - run: go mod tidy - run: git diff --exit-code lint: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - - run: dep ensure --vendor-only - run: go get golang.org/x/lint/golint - run: make lint bazel: docker: - image: l.gcr.io/google/bazel:latest - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - run: @@ -67,22 +65,22 @@ jobs: - run: name: Check that Bazel BUILD files are up-to-date command: 'test -z "$(bazel run //:gazelle_diff)" || - (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle_fix\`" >&2; exit 1)' + (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle_fix\`" >&2; exit 1)' - run: name: Run tests with Bazel command: bazel test //... - run: name: Check formatting of Bazel BUILD files command: 'bazel run //:buildifier_check || - (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' + (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always release: docker: - image: jfbrandhorst/grpc-gateway-build-env - working_directory: /go/src/github.com/grpc-ecosystem/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - - run: dep ensure --vendor-only + - run: go mod vendor - run: curl -sL https://git.io/goreleaser | bash workflows: version: 2 diff --git a/.gitignore b/.gitignore index 7c349d62a43..2a59512090f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ bazel-testlogs # Go vendor directory vendor + +# Generated travis files +.travis.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a7d09ce6cb0..04fc20639c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,8 +24,8 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ - /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ +docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ + /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ diff --git a/Gopkg.lock b/Gopkg.lock deleted file mode 100644 index 4e9da479903..00000000000 --- a/Gopkg.lock +++ /dev/null @@ -1,192 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - digest = "1:2cd7915ab26ede7d95b8749e6b1f933f1c6d5398030684e6505940a10f31cfda" - name = "github.com/ghodss/yaml" - packages = ["."] - pruneopts = "UT" - revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" - -[[projects]] - digest = "1:5cae6c173646d9230aecf8074c171edb4fb9a37f074c5c89ba2fece20b6703b6" - name = "github.com/go-resty/resty" - packages = ["."] - pruneopts = "UT" - revision = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e" - -[[projects]] - digest = "1:1ba1d79f2810270045c328ae5d674321db34e3aae468eb4233883b473c5c0467" - name = "github.com/golang/glog" - packages = ["."] - pruneopts = "UT" - revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" - -[[projects]] - digest = "1:329b943e12961fb0c0db5bc18858433e569183178edfd0a8d99033ce032c62cc" - name = "github.com/golang/protobuf" - packages = [ - "descriptor", - "jsonpb", - "proto", - "protoc-gen-go", - "protoc-gen-go/descriptor", - "protoc-gen-go/generator", - "protoc-gen-go/generator/internal/remap", - "protoc-gen-go/grpc", - "protoc-gen-go/plugin", - "ptypes", - "ptypes/any", - "ptypes/duration", - "ptypes/empty", - "ptypes/struct", - "ptypes/timestamp", - "ptypes/wrappers", - ] - pruneopts = "UT" - revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" - -[[projects]] - digest = "1:d673e95129a1107bfd04e093751a5e1267faabc27d218d824fb013f57ac08f55" - name = "github.com/rogpeppe/fastuuid" - packages = ["."] - pruneopts = "UT" - revision = "6724a57986aff9bff1a1770e9347036def7c89f6" - -[[projects]] - digest = "1:c0b7af9789502fec69b7ab40035a2180e43b9663c32101084ba51c844ea416e9" - name = "golang.org/x/net" - packages = [ - "context", - "http/httpguts", - "http2", - "http2/hpack", - "idna", - "internal/timeseries", - "publicsuffix", - "trace", - ] - pruneopts = "UT" - revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" - -[[projects]] - branch = "master" - digest = "1:7ba061af4131fb44b30448572acd0d6fefbf63a61b97b7ef1dea0be5871c2742" - name = "golang.org/x/sys" - packages = ["unix"] - pruneopts = "UT" - revision = "66b7b1311ac80bbafcd2daeef9a5e6e2cd1e2399" - -[[projects]] - digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" - name = "golang.org/x/text" - packages = [ - "collate", - "collate/build", - "internal/colltab", - "internal/gen", - "internal/tag", - "internal/triegen", - "internal/ucd", - "language", - "secure/bidirule", - "transform", - "unicode/bidi", - "unicode/cldr", - "unicode/norm", - "unicode/rangetable", - ] - pruneopts = "UT" - revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" - version = "v0.3.0" - -[[projects]] - digest = "1:46be2f6b4d4e4b89f8102668902e68013234da1684fc78da602da95e745f285d" - name = "google.golang.org/genproto" - packages = [ - "googleapis/api/annotations", - "googleapis/rpc/errdetails", - "googleapis/rpc/status", - "protobuf/field_mask", - ] - pruneopts = "UT" - revision = "383e8b2c3b9e36c4076b235b32537292176bae20" - -[[projects]] - digest = "1:c3ad9841823db6da420a5625b367913b4ff54bbe60e8e3c98bd20e243e62e2d2" - name = "google.golang.org/grpc" - packages = [ - ".", - "balancer", - "balancer/base", - "balancer/roundrobin", - "codes", - "connectivity", - "credentials", - "encoding", - "encoding/proto", - "grpclog", - "internal", - "internal/backoff", - "internal/channelz", - "internal/envconfig", - "internal/grpcrand", - "internal/transport", - "keepalive", - "metadata", - "naming", - "peer", - "resolver", - "resolver/dns", - "resolver/passthrough", - "stats", - "status", - "tap", - ] - pruneopts = "UT" - revision = "2e463a05d100327ca47ac218281906921038fd95" - version = "v1.16.0" - -[[projects]] - digest = "1:6570992c02a2137a20be83990a979b6fe892e20ecdc6b756449989b2a7efb8ae" - name = "gopkg.in/yaml.v2" - packages = ["."] - pruneopts = "UT" - revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - input-imports = [ - "github.com/ghodss/yaml", - "github.com/go-resty/resty", - "github.com/golang/glog", - "github.com/golang/protobuf/descriptor", - "github.com/golang/protobuf/jsonpb", - "github.com/golang/protobuf/proto", - "github.com/golang/protobuf/protoc-gen-go", - "github.com/golang/protobuf/protoc-gen-go/descriptor", - "github.com/golang/protobuf/protoc-gen-go/generator", - "github.com/golang/protobuf/protoc-gen-go/plugin", - "github.com/golang/protobuf/ptypes", - "github.com/golang/protobuf/ptypes/any", - "github.com/golang/protobuf/ptypes/duration", - "github.com/golang/protobuf/ptypes/empty", - "github.com/golang/protobuf/ptypes/struct", - "github.com/golang/protobuf/ptypes/timestamp", - "github.com/golang/protobuf/ptypes/wrappers", - "github.com/rogpeppe/fastuuid", - "golang.org/x/net/context", - "google.golang.org/genproto/googleapis/api/annotations", - "google.golang.org/genproto/googleapis/rpc/errdetails", - "google.golang.org/genproto/googleapis/rpc/status", - "google.golang.org/genproto/protobuf/field_mask", - "google.golang.org/grpc", - "google.golang.org/grpc/codes", - "google.golang.org/grpc/connectivity", - "google.golang.org/grpc/grpclog", - "google.golang.org/grpc/metadata", - "google.golang.org/grpc/status", - ] - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml deleted file mode 100644 index e4c78e94a90..00000000000 --- a/Gopkg.toml +++ /dev/null @@ -1,66 +0,0 @@ -required = [ - "github.com/golang/protobuf/protoc-gen-go", -] - -[prune] - go-tests = true - unused-packages = true - -# Constrained versions that are defined in WORKSPACE are at the top - -[[constraint]] - # Also defined in WORKSPACE - revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" - name = "github.com/ghodss/yaml" - -[[constraint]] - # Also defined in WORKSPACE - revision = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e" - name = "github.com/go-resty/resty" - -[[constraint]] - # Also defined in WORKSPACE - revision = "6724a57986aff9bff1a1770e9347036def7c89f6" - name = "github.com/rogpeppe/fastuuid" - -[[constraint]] - # Also defined in WORKSPACE - revision = "383e8b2c3b9e36c4076b235b32537292176bae20" - name = "google.golang.org/genproto" - -[[override]] - # Also defined in WORKSPACE - revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" - name = "gopkg.in/yaml.v2" - -# These versions are constrained transitively by bazelbuild/rules_go - -[[constraint]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L52 - revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" - name = "github.com/golang/protobuf" - -[[constraint]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L96 - revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" - name = "golang.org/x/net" - -[[constraint]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L123 - version = "1.15.0" - name = "google.golang.org/grpc" - -[[constraint]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L160 - revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" - name = "github.com/golang/glog" - -[[override]] - # Also defined in bazelbuild/rules_go - # https://github.com/bazelbuild/rules_go/blob/109c520465fcb418f2c4be967f3744d959ad66d3/go/private/repositories.bzl#L117 - version = "0.3.0" - name = "golang.org/x/text" diff --git a/Makefile b/Makefile index ba923e91f9c..b141347681a 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,6 @@ # You don't have to rebuild these targets by yourself unless you develop # grpc-gateway itself. -PKG=github.com/grpc-ecosystem/grpc-gateway GO_PLUGIN=bin/protoc-gen-go GO_PROTOBUF_REPO=github.com/golang/protobuf GO_PLUGIN_PKG=$(GO_PROTOBUF_REPO)/protoc-gen-go @@ -15,9 +14,9 @@ SWAGGER_PLUGIN_SRC= utilities/doc.go \ protoc-gen-swagger/genswagger/generator.go \ protoc-gen-swagger/genswagger/template.go \ protoc-gen-swagger/main.go -SWAGGER_PLUGIN_PKG=$(PKG)/protoc-gen-swagger +SWAGGER_PLUGIN_PKG=./protoc-gen-swagger GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway -GATEWAY_PLUGIN_PKG=$(PKG)/protoc-gen-grpc-gateway +GATEWAY_PLUGIN_PKG=./protoc-gen-grpc-gateway GATEWAY_PLUGIN_SRC= utilities/doc.go \ utilities/pattern.go \ utilities/trie.go \ @@ -51,7 +50,7 @@ RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) -PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/proto/sub/message.proto=$(PKG)/examples/proto/sub +PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub ADDITIONAL_GW_FLAGS= ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) @@ -126,14 +125,14 @@ generate: $(RUNTIME_GO) .SUFFIXES: .go .proto $(GO_PLUGIN): - dep ensure -vendor-only - go build -o $@ ./vendor/$(GO_PLUGIN_PKG) + go build -o $(GO_PLUGIN) $(GO_PLUGIN_PKG) $(RUNTIME_GO): $(RUNTIME_PROTO) $(GO_PLUGIN) - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I $(GOPATH)/src/$(GO_PTYPES_ANY_PKG) -I. --go_out=$(PKGMAP):. $(RUNTIME_PROTO) + go mod vendor + protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I ./vendor/$(GO_PTYPES_ANY_PKG) -I. --go_out=$(PKGMAP),paths=source_relative:. $(RUNTIME_PROTO) $(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP):$(GOPATH)/src $(OPENAPIV2_PROTO) + protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(OPENAPIV2_PROTO) $(GATEWAY_PLUGIN): $(RUNTIME_GO) $(GATEWAY_PLUGIN_SRC) go build -o $@ $(GATEWAY_PLUGIN_PKG) @@ -142,11 +141,11 @@ $(SWAGGER_PLUGIN): $(SWAGGER_PLUGIN_SRC) $(OPENAPIV2_GO) go build -o $@ $(SWAGGER_PLUGIN_PKG) $(EXAMPLE_SVCSRCS): $(GO_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc:. $(EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(EXAMPLES) $(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(EXAMPLE_DEPS) mkdir -p $(OUTPUT_DIR) - protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc:$(OUTPUT_DIR) $(@:.pb.go=.proto) - cp $(OUTPUT_DIR)/$(PKG)/$@ $@ || cp $(OUTPUT_DIR)/$@ $@ + protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:$(OUTPUT_DIR) $(@:.pb.go=.proto) + cp $(OUTPUT_DIR)/$@ $@ || cp $(OUTPUT_DIR)/$@ $@ $(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) @@ -179,8 +178,8 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) test: examples - go test -race $(PKG)/... - go test -race $(PKG)/examples/integration -args -network=unix -endpoint=test.sock + go test -race ... + go test -race examples/integration -args -network=unix -endpoint=test.sock changelog: docker run --rm \ --interactive \ @@ -196,14 +195,14 @@ changelog: --unreleased-label "**Next release**" \ --future-release=v1.7.0 lint: - golint --set_exit_status $(PKG)/runtime - golint --set_exit_status $(PKG)/utilities/... - golint --set_exit_status $(PKG)/protoc-gen-grpc-gateway/... - golint --set_exit_status $(PKG)/protoc-gen-swagger/... - go vet $(PKG)/runtime || true - go vet $(PKG)/utilities/... - go vet $(PKG)/protoc-gen-grpc-gateway/... - go vet $(PKG)/protoc-gen-swagger/... + golint --set_exit_status ./runtime + golint --set_exit_status ./utilities/... + golint --set_exit_status ./protoc-gen-grpc-gateway/... + golint --set_exit_status ./protoc-gen-swagger/... + go vet ./runtime || true + go vet ./utilities/... + go vet ./protoc-gen-grpc-gateway/... + go vet ./protoc-gen-swagger/... clean: rm -f $(GATEWAY_PLUGIN) $(SWAGGER_PLUGIN) diff --git a/README.md b/README.md index a780964be08..d87501ec8f5 100644 --- a/README.md +++ b/README.md @@ -2,39 +2,40 @@ [![CircleCI](https://circleci.com/gh/grpc-ecosystem/grpc-gateway.svg?style=svg)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) -grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). -It reads [gRPC](http://github.com/grpc/grpc-common) service definition, -and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. -This server is generated according to the +The grpc-gateway is a plugin of the Google protocol buffers compiler +[protoc](https://github.com/protocolbuffers/protobuf). +It reads protobuf service definitions and generates a reverse-proxy server which +translates a RESTful JSON API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) -annotation in your gRPC service definition. +annotations in your service definitions. -It helps you to provide your APIs in both gRPC and RESTful style at the same time. +It helps you provide your APIs in both gRPC and RESTful style at the same time. ![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) ## Check out our [documentation](https://grpc-ecosystem.github.io/grpc-gateway/)! ## Background -gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. -However, you might still want to provide a traditional RESTful API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by gRPC to simply maintaining the aesthetics and tooling involved with a RESTful architecture. - -This project aims to provide that HTTP+JSON interface to your gRPC service. A small amount of configuration in your service to attach HTTP semantics is all that's needed to generate a reverse-proxy with this library. +gRPC is great -- it generates API clients and server stubs in many programming +languages, it is fast, easy-to-use, bandwidth-efficient and its design is +combat-proven by Google. However, you might still want to provide a traditional +RESTful JSON API as well. Reasons can range from maintaining +backwards-compatibility, supporting languages or clients not well supported by +gRPC to simply maintaining the aesthetics and tooling involved with a RESTful +JSON architecture. + +This project aims to provide that HTTP+JSON interface to your gRPC service. +A small amount of configuration in your service to attach HTTP semantics is all +that's needed to generate a reverse-proxy with this library. ## Installation -First you need to install ProtocolBuffers 3.0.0 or later. -```sh -mkdir tmp -cd tmp -git clone https://github.com/protocolbuffers/protobuf -cd protobuf -./autogen.sh -./configure -make -make check -sudo make install -``` +The grpc-gateway requires a local installation of the Google protocol buffers +compiler `protoc` v3.0.0 or above. Please install this via your local package +manager or by downloading one of the releases from the official repository: + +https://github.com/protocolbuffers/protobuf/releases + Then, `go get -u` as usual the following packages: @@ -44,8 +45,15 @@ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger go get -u github.com/golang/protobuf/protoc-gen-go ``` +This will place three binaries in your `$GOBIN`; + +* `protoc-gen-grpc-gateway` +* `protoc-gen-grpc-swagger` +* `protoc-gen-go` + +Make sure that your `$GOBIN` is in your `$PATH`. + ## Usage -Make sure that your `$GOPATH/bin` is in your `$PATH`. 1. Define your service in gRPC @@ -61,7 +69,8 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. rpc Echo(StringMessage) returns (StringMessage) {} } ``` -2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) to your .proto file +2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) +annotation to your .proto file your_service.proto: ```diff @@ -85,7 +94,11 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` - If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) for more information. + If you do not want to modify the proto file for use with grpc-gateway you can + alternatively use an external + [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. + [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) + for more information. 3. Generate gRPC stub @@ -131,8 +144,6 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. It will generate a reverse proxy `path/to/your_service.pb.gw.go`. - Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. - 6. Write an entrypoint Now you need to write an entrypoint of the proxy server. @@ -191,13 +202,18 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. ``` ## Parameters and flags -`protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import path. -They are compatible to [the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). +`protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to +Golang import paths. They are compatible to +[the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters) +(except `source_relative`). -In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). -This parameter can be useful to pass request scoped context between the gateway and the gRPC service. +In addition we also support the `request_context` parameter in order to use the +`http.Request`'s Context (only for Go 1.7 and above). This parameter can be +useful to pass request scoped context between the gateway and the gRPC service. -`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. +`protoc-gen-grpc-gateway` also supports some more command line flags to control +logging. You can give these flags together with parameters above. Run +`protoc-gen-grpc-gateway --help` for more details about the flags. ## More Examples More examples are available under `examples` directory. @@ -208,43 +224,54 @@ More examples are available under `examples` directory. * `server/main.go`: service implementation * `main.go`: entrypoint of the generated reverse proxy -To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)) +To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), +gRPC-gateway, and a gRPC server, see +[this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) +(and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)). ## Features + ### Supported -* Generating JSON API handlers -* Method parameters in request body -* Method parameters in request path -* Method parameters in query string + +* Generating JSON API handlers. +* Method parameters in request body. +* Method parameters in request path. +* Method parameters in query string. * Enum fields in path parameter (including repeated enum fields). -* Mapping streaming APIs to newline-delimited JSON streams +* Mapping streaming APIs to newline-delimited JSON streams. * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) -* Optionally emitting API definition for [Swagger](http://swagger.io). -* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests) through inbound HTTP `Grpc-Timeout` header. -* Partial support for [gRPC API Configuration]((https://cloud.google.com/endpoints/docs/grpc/grpc-service-config)) files as an alternative to annotation. - -### Want to support -But not yet. -* Optionally generating the entrypoint. #8 -* `import_path` parameter +* Optionally emitting API definitions for +[OpenAPI (Swagger) v2](https://swagger.io/docs/specification/2-0/basic-structure/). +* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests) +through inbound HTTP `Grpc-Timeout` header. +* Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) +files as an alternative to annotation. +* Automatically translating PATCH requests into Field Mask gRPC requests. See +[the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/patch.html) +for more information. ### No plan to support But patch is welcome. -* Method parameters in HTTP headers -* Handling trailer metadata -* Encoding request/response body in XML -* True bi-directional streaming. (Probably impossible?) +* Method parameters in HTTP headers. +* Handling trailer metadata. +* Encoding request/response body in XML. +* True bi-directional streaming. # Mapping gRPC to HTTP -* [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) -* HTTP request source IP is added as `X-Forwarded-For` gRPC request header -* HTTP request host is added as `X-Forwarded-Host` gRPC request header -* HTTP `Authorization` header is added as `authorization` gRPC request header -* Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header -* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`) -* While configurable, the default {un,}marshaling uses [jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with `OrigName: true`. - +* [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15). +* HTTP request source IP is added as `X-Forwarded-For` gRPC request header. +* HTTP request host is added as `X-Forwarded-Host` gRPC request header. +* HTTP `Authorization` header is added as `authorization` gRPC request header. +* Remaining Permanent HTTP header keys (as specified by the IANA +[here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) +are prefixed with `grpcgateway-` and added with their values to gRPC request +header. +* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata +(prefixed with `grpcgateway-`). +* While configurable, the default {un,}marshaling uses +[jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with +`OrigName: true`. # Contribution See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). diff --git a/go.mod b/go.mod new file mode 100644 index 00000000000..4c1a2ae7173 --- /dev/null +++ b/go.mod @@ -0,0 +1,18 @@ +module github.com/grpc-ecosystem/grpc-gateway + +require ( + github.com/ghodss/yaml v1.0.0 + github.com/go-resty/resty v1.9.0 + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b + github.com/golang/protobuf v1.2.0 + github.com/kr/pretty v0.1.0 // indirect + github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af + golang.org/x/net v0.0.0-20181220203305-927f97764cc3 + golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 // indirect + google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 + google.golang.org/grpc v1.16.0 + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect +) + +replace github.com/go-resty/resty => gopkg.in/resty.v1 v1.9.0 diff --git a/go.sum b/go.sum new file mode 100644 index 00000000000..ceb099f3428 --- /dev/null +++ b/go.sum @@ -0,0 +1,43 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 h1:YoY1wS6JYVRpIfFngRf2HHo9R9dAne3xbkGOQ5rJXjU= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.16.0 h1:dz5IJGuC2BB7qXR5AyHNwAUBhZscK2xVez7mznh72sY= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/resty.v1 v1.9.0/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 121c47c68b25f96e75a602260cf28159ea156b65 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Sat, 23 Feb 2019 00:37:53 -0700 Subject: [PATCH 0117/1518] Upgrade to rules_go 0.17.0 Also fixes #873 --- BUILD | 13 ++----------- WORKSPACE | 12 +++--------- protoc-gen-swagger/defs.bzl | 10 ++++++---- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/BUILD b/BUILD index a9997cb5a0e..27944f25764 100644 --- a/BUILD +++ b/BUILD @@ -12,18 +12,9 @@ buildifier( # gazelle:exclude third_party # gazelle:exclude vendor +# gazelle:prefix github.com/grpc-ecosystem/grpc-gateway -gazelle( - name = "gazelle_diff", - mode = "diff", - prefix = "github.com/grpc-ecosystem/grpc-gateway", -) - -gazelle( - name = "gazelle_fix", - mode = "fix", - prefix = "github.com/grpc-ecosystem/grpc-gateway", -) +gazelle(name = "gazelle") package_group( name = "generators", diff --git a/WORKSPACE b/WORKSPACE index e74086a7aff..d6c2c00c395 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,8 +5,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "7be7dc01f1e0afdba6c8eb2b43d2fa01c743be1b9273ab1eaf6c233df078d705", - urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.16.5/rules_go-0.16.5.tar.gz"], + sha256 = "492c3ac68ed9dcf527a07e6a1b2dcbf199c6bf8b35517951467ac32e421c06c1", + urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.17.0/rules_go-0.17.0.tar.gz"], ) http_archive( @@ -15,7 +15,7 @@ http_archive( urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.16.0/bazel-gazelle-0.16.0.tar.gz"], ) -load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") +load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains") go_rules_dependencies() @@ -25,12 +25,6 @@ load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") gazelle_dependencies() -load("@io_bazel_rules_go//go:def.bzl", "go_register_toolchains", "go_rules_dependencies") - -go_rules_dependencies() - -go_register_toolchains() - load("@bazel_gazelle//:deps.bzl", "go_repository") # Also define in Gopkg.toml diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index d049ce596af..186178d8892 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -38,7 +38,8 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action sibling = proto, ) - inputs = direct_proto_srcs + transitive_proto_srcs + [protoc_gen_swagger] + inputs = direct_proto_srcs + transitive_proto_srcs + tools = [protoc_gen_swagger] options = ["logtostderr=true", "allow_repeated_fields_in_body=true"] if grpc_api_configuration: @@ -50,12 +51,13 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action args = actions.args() args.add("--plugin=%s" % protoc_gen_swagger.path) args.add("--swagger_out=%s:%s" % (",".join(options), ctx.bin_dir.path)) - args.add(["-I%s" % include for include in includes]) + args.add_all(["-I%s" % include for include in includes]) args.add(proto.path) actions.run( executable = protoc, inputs = inputs, + tools = tools, outputs = [swagger_file], arguments = [args], ) @@ -68,7 +70,7 @@ def _proto_gen_swagger_impl(ctx): proto = ctx.attr.proto.proto grpc_api_configuration = ctx.file.grpc_api_configuration - return struct( + return [DefaultInfo( files = depset( _run_proto_gen_swagger( ctx, @@ -80,7 +82,7 @@ def _proto_gen_swagger_impl(ctx): grpc_api_configuration = grpc_api_configuration, ), ), - ) + )] protoc_gen_swagger = rule( attrs = { From 9a7c952d3c7e6c0239ddb5d1d351e0fdb6c3c8d3 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Sat, 23 Feb 2019 16:59:37 -0700 Subject: [PATCH 0118/1518] Run buildifer on WORKSPACE --- WORKSPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WORKSPACE b/WORKSPACE index d6c2c00c395..4ba250819c1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -15,7 +15,7 @@ http_archive( urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.16.0/bazel-gazelle-0.16.0.tar.gz"], ) -load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains") +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") go_rules_dependencies() From 70fc086ac9ea0b499fd55f4e002e4ec581d000c5 Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Mon, 25 Feb 2019 14:12:16 +0100 Subject: [PATCH 0119/1518] protoc-gen-grpc-gateway: use context package from stdlib --- examples/proto/examplepb/a_bit_of_everything.pb.gw.go | 2 +- examples/proto/examplepb/echo_service.pb.gw.go | 2 +- examples/proto/examplepb/flow_combination.pb.gw.go | 2 +- examples/proto/examplepb/response_body_service.pb.gw.go | 2 +- examples/proto/examplepb/stream.pb.gw.go | 2 +- examples/proto/examplepb/unannotated_echo_service.pb.gw.go | 2 +- examples/proto/examplepb/wrappers.pb.gw.go | 2 +- protoc-gen-grpc-gateway/gengateway/generator.go | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 49621b876cc..23ae923228d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -9,6 +9,7 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" @@ -19,7 +20,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 5e9efc9beac..6995d2afc57 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -9,13 +9,13 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b4ae06a19d7..70844205596 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -9,13 +9,13 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 804a4815442..35b4f766884 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -9,13 +9,13 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index f43c517b17e..fb4c8fcae45 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -9,6 +9,7 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" @@ -17,7 +18,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 01764c0f9e6..19c6664ecb2 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -9,13 +9,13 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 703f2e604fb..3b1478554aa 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -9,6 +9,7 @@ It translates gRPC into RESTful JSON APIs. package examplepb import ( + "context" "io" "net/http" @@ -17,7 +18,6 @@ import ( "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index fa1adc3470f..43943f95643 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -39,12 +39,12 @@ type generator struct { func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string, allowPatchFeature bool) gen.Generator { var imports []descriptor.GoPackage for _, pkgpath := range []string{ + "context", "io", "net/http", "github.com/grpc-ecosystem/grpc-gateway/runtime", "github.com/grpc-ecosystem/grpc-gateway/utilities", "github.com/golang/protobuf/proto", - "golang.org/x/net/context", "google.golang.org/grpc", "google.golang.org/grpc/codes", "google.golang.org/grpc/grpclog", From 206758a4ba87256a3668bfc49992d14080cef2e5 Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 28 Feb 2019 14:04:22 +0100 Subject: [PATCH 0120/1518] Fix Swagger parameter names when using JSON names. (#879) * Fix parameter names when using JSON names. * Add test. Fix fallback when `json_name` is unset (query params). * Remove fallback. See https://github.com/grpc-ecosystem/grpc-gateway/pull/879#issuecomment-468261505. --- protoc-gen-swagger/genswagger/template.go | 7 +- .../genswagger/template_test.go | 74 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index ccaee513be6..2b74d5f164f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -132,7 +132,6 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } param := swaggerParameterObject{ - Name: prefix + field.GetName(), Description: desc, In: "query", Default: schema.Default, @@ -142,6 +141,12 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st Required: required, } + if reg.GetUseJSONNamesForFields() { + param.Name = prefix + field.GetJsonName() + } else { + param.Name = prefix + field.GetName() + } + if isEnum { enum, err := reg.LookupEnum("", fieldType) if err != nil { diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 4e20a3ccd25..76b1e830e0e 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -197,6 +197,80 @@ func TestMessageToQueryParameters(t *testing.T) { } } +func TestMessageToQueryParametersWithJsonName(t *testing.T) { + type test struct { + MsgDescs []*protodescriptor.DescriptorProto + Message string + Params []swaggerParameterObject + } + + tests := []test{ + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("test_field_a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + JsonName: proto.String("testFieldA"), + }, + }, + }, + }, + Message: "ExampleMessage", + Params: []swaggerParameterObject{ + swaggerParameterObject{ + Name: "testFieldA", + In: "query", + Required: false, + Type: "string", + }, + }, + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + params, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}) + if err != nil { + t.Fatalf("failed to convert message to query parameters: %s", err) + } + if !reflect.DeepEqual(params, test.Params) { + t.Errorf("expected %v, got %v", test.Params, params) + } + } +} + func TestApplyTemplateSimple(t *testing.T) { msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), From d9d0984fe8019a32a8894466d9a0527fa8ade38e Mon Sep 17 00:00:00 2001 From: klimov sergey Date: Thu, 28 Feb 2019 16:37:52 +0300 Subject: [PATCH 0121/1518] go.mod: update grpc from v1.16.0 to v1.17.0 --- go.mod | 2 +- go.sum | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4c1a2ae7173..2e12ba3899a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( golang.org/x/net v0.0.0-20181220203305-927f97764cc3 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 // indirect google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 - google.golang.org/grpc v1.16.0 + google.golang.org/grpc v1.17.0 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect ) diff --git a/go.sum b/go.sum index ceb099f3428..19c3d5fa952 100644 --- a/go.sum +++ b/go.sum @@ -4,7 +4,6 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -16,7 +15,7 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= @@ -33,8 +32,8 @@ golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGm google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.16.0 h1:dz5IJGuC2BB7qXR5AyHNwAUBhZscK2xVez7mznh72sY= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/resty.v1 v1.9.0/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= From fff15072357c46f1065dbbd967f3591312b54de9 Mon Sep 17 00:00:00 2001 From: klimov sergey Date: Thu, 28 Feb 2019 17:21:56 +0300 Subject: [PATCH 0122/1518] go.mod: update grpc from v1.17.0 to v1.19.0 --- go.mod | 2 +- go.sum | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2e12ba3899a..9284d871c75 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( golang.org/x/net v0.0.0-20181220203305-927f97764cc3 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 // indirect google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 - google.golang.org/grpc v1.17.0 + google.golang.org/grpc v1.19.0 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect ) diff --git a/go.sum b/go.sum index 19c3d5fa952..78191e96227 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -7,7 +8,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -28,15 +28,15 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 h1:YoY1wS6JYVRpIfFngRf2HHo9R golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.17.0 h1:TRJYBgMclJvGYn2rIMjj+h9KtMt5r1Ij7ODVRIZkwhk= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/resty.v1 v1.9.0/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 0c2b3b165f486a2c49b627e71880172d27607a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20JACQUES?= Date: Fri, 1 Mar 2019 10:19:03 +0100 Subject: [PATCH 0123/1518] protoc-gen-swagger: add fqn_for_swagger_name option Adds a new option fqn_for_swagger_name. This uses the protobuf FQN in the generated swagger specification. --- .../descriptor/registry.go | 16 ++++++++++++ protoc-gen-swagger/genswagger/template.go | 25 +++++++++++-------- .../genswagger/template_test.go | 22 +++++++++++++--- protoc-gen-swagger/main.go | 2 ++ protoc-gen-swagger/main_test.go | 25 ++++++++++++++++--- 5 files changed, 73 insertions(+), 17 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 510ab253830..1131ca453f9 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -61,6 +61,12 @@ type Registry struct { // otherwise the original proto name is used. It's helpful for synchronizing the swagger definition // with grpc-gateway response, if it uses json tags for marshaling. useJSONNamesForFields bool + + // useFQNForSwaggerName if true swagger names will use the full qualified name (FQN) from proto definition, + // and generate a dot-separated swagger name concatenating all elements from the proto FQN. + // If false, the default behavior is to concat the last 2 elements of the FQN if they are unique, otherwise concat + // all the elements of the FQN without any separator + useFQNForSwaggerName bool } type repeatedFieldSeparator struct { @@ -411,6 +417,16 @@ func (r *Registry) GetUseJSONNamesForFields() bool { return r.useJSONNamesForFields } +// SetUseFQNForSwaggerName sets useFQNForSwaggerName +func (r *Registry) SetUseFQNForSwaggerName(use bool) { + r.useFQNForSwaggerName = use +} + +// GetUseFQNForSwaggerName returns useFQNForSwaggerName +func (r *Registry) GetUseFQNForSwaggerName() bool { + return r.useFQNForSwaggerName +} + // GetMergeFileName return the target merge swagger file name func (r *Registry) GetMergeFileName() string { return r.mergeFileName diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 2b74d5f164f..74f53394cae 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -527,7 +527,7 @@ func fullyQualifiedNameToSwaggerName(fqn string, reg *descriptor.Registry) strin if mapping, present := registriesSeen[reg]; present { return mapping[fqn] } - mapping := resolveFullyQualifiedNameToSwaggerNames(append(reg.GetAllFQMNs(), reg.GetAllFQENs()...)) + mapping := resolveFullyQualifiedNameToSwaggerNames(append(reg.GetAllFQMNs(), reg.GetAllFQENs()...), reg.GetUseFQNForSwaggerName()) registriesSeen[reg] = mapping return mapping[fqn] } @@ -544,7 +544,7 @@ var registriesSeenMutex sync.Mutex // This likely could be made better. This will always generate the same names // but may not always produce optimal names. This is a reasonably close // approximation of what they should look like in most cases. -func resolveFullyQualifiedNameToSwaggerNames(messages []string) map[string]string { +func resolveFullyQualifiedNameToSwaggerNames(messages []string, useFQNForSwaggerName bool) map[string]string { packagesByDepth := make(map[int][][]string) uniqueNames := make(map[string]string) @@ -573,14 +573,19 @@ func resolveFullyQualifiedNameToSwaggerNames(messages []string) map[string]strin } for _, p := range messages { - h := hierarchy(p) - for depth := 0; depth < len(h); depth++ { - if count(packagesByDepth[depth], h[len(h)-depth:]) == 1 { - uniqueNames[p] = strings.Join(h[len(h)-depth-1:], "") - break - } - if depth == len(h)-1 { - uniqueNames[p] = strings.Join(h, "") + if useFQNForSwaggerName { + // strip leading dot from proto fqn + uniqueNames[p] = p[1:] + } else { + h := hierarchy(p) + for depth := 0; depth < len(h); depth++ { + if count(packagesByDepth[depth], h[len(h)-depth:]) == 1 { + uniqueNames[p] = strings.Join(h[len(h)-depth-1:], "") + break + } + if depth == len(h)-1 { + uniqueNames[p] = strings.Join(h, "") + } } } } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 76b1e830e0e..f11246bf1a0 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -853,9 +853,10 @@ func TestTemplateToSwaggerPath(t *testing.T) { func TestResolveFullyQualifiedNameToSwaggerName(t *testing.T) { var tests = []struct { - input string - output string - listOfFQMNs []string + input string + output string + listOfFQMNs []string + useFQNForSwaggerName bool }{ { ".a.b.C", @@ -863,6 +864,7 @@ func TestResolveFullyQualifiedNameToSwaggerName(t *testing.T) { []string{ ".a.b.C", }, + false, }, { ".a.b.C", @@ -871,6 +873,7 @@ func TestResolveFullyQualifiedNameToSwaggerName(t *testing.T) { ".a.C", ".a.b.C", }, + false, }, { ".a.b.C", @@ -880,11 +883,22 @@ func TestResolveFullyQualifiedNameToSwaggerName(t *testing.T) { ".a.C", ".a.b.C", }, + false, + }, + { + ".a.b.C", + "a.b.C", + []string{ + ".C", + ".a.C", + ".a.b.C", + }, + true, }, } for _, data := range tests { - names := resolveFullyQualifiedNameToSwaggerNames(data.listOfFQMNs) + names := resolveFullyQualifiedNameToSwaggerNames(data.listOfFQMNs, data.useFQNForSwaggerName) output := names[data.input] if output != data.output { t.Errorf("Expected fullyQualifiedNameToSwaggerName(%v) to be %s but got %s", diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 16ce528b709..237e4604983 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -26,6 +26,7 @@ var ( versionFlag = flag.Bool("version", false, "print the current verison") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") + useFQNForSwaggerName = flag.Bool("fqn_for_swagger_name", false, "if set, the object's swagger names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") ) // Variables set by goreleaser at build time @@ -76,6 +77,7 @@ func main() { reg.SetUseJSONNamesForFields(*useJSONNamesForFields) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) reg.SetIncludePackageInTags(*includePackageInTags) + reg.SetUseFQNForSwaggerName(*useFQNForSwaggerName) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return diff --git a/protoc-gen-swagger/main_test.go b/protoc-gen-swagger/main_test.go index b5ebda041a2..2c6eec129d4 100644 --- a/protoc-gen-swagger/main_test.go +++ b/protoc-gen-swagger/main_test.go @@ -21,6 +21,7 @@ func TestParseReqParam(t *testing.T) { fileV string importPathV string mergeFileNameV string + useFQNForSwaggerNameV bool }{ { // this one must be first - with no leading clearFlags call it @@ -99,6 +100,21 @@ func TestParseReqParam(t *testing.T) { allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, + { + name: "Test 10", + expected: map[string]string{}, + request: "fqn_for_swagger_name=3", + expectedError: errors.New(`Cannot set flag fqn_for_swagger_name=3: strconv.ParseBool: parsing "3": invalid syntax`), + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, useFQNForSwaggerNameV: false, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, + { + name: "Test 11", + expected: map[string]string{}, + request: "fqn_for_swagger_name=true", + allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, useFQNForSwaggerNameV: true, + fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + }, } for i, tc := range testcases { @@ -124,7 +140,7 @@ func TestParseReqParam(t *testing.T) { tt.Errorf("expected error malformed, expected %q, got %q", tc.expectedError.Error(), err.Error()) } } - checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) + checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.useFQNForSwaggerNameV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) clearFlags() }) @@ -132,7 +148,7 @@ func TestParseReqParam(t *testing.T) { } -func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePackageInTagsV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { +func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePackageInTagsV bool, useFQNForSwaggerNameV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { if *importPrefix != importPathV { t.Errorf("Test %v: import_prefix misparsed, expected '%v', got '%v'", tid, importPathV, *importPrefix) } @@ -152,7 +168,10 @@ func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePa t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, allowRepeatedFieldsInBodyV, *allowRepeatedFieldsInBody) } if *includePackageInTags != includePackageInTagsV { - t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, includePackageInTagsV, *includePackageInTags) + t.Errorf("Test %v: include_package_in_tags misparsed, expected '%v', got '%v'", tid, includePackageInTagsV, *includePackageInTags) + } + if *useFQNForSwaggerName != useFQNForSwaggerNameV { + t.Errorf("Test %v: fqn_for_swagger_name misparsed, expected '%v', got '%v'", tid, useFQNForSwaggerNameV, *useFQNForSwaggerName) } } From 144843a2a3456d63e4ec888a706095975a1c3ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20JACQUES?= Date: Fri, 1 Mar 2019 15:18:51 +0100 Subject: [PATCH 0124/1518] Add read-only support to protoc-gen-swagger output (#882) Can be set via: * explicit swagger option on the field * Implicit comment "Output only." on the field --- protoc-gen-swagger/genswagger/template.go | 8 + .../genswagger/template_test.go | 135 +++++++++ protoc-gen-swagger/genswagger/types.go | 1 + protoc-gen-swagger/options/openapiv2.pb.go | 269 +++++++++--------- protoc-gen-swagger/options/openapiv2.proto | 3 +- 5 files changed, 284 insertions(+), 132 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 74f53394cae..484ca971643 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -275,6 +275,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, // Warning: Make sure not to overwrite any fields already set on the schema type. schema.ExternalDocs = protoSchema.ExternalDocs + schema.ReadOnly = protoSchema.ReadOnly schema.MultipleOf = protoSchema.MultipleOf schema.Maximum = protoSchema.Maximum schema.ExclusiveMaximum = protoSchema.ExclusiveMaximum @@ -1223,6 +1224,12 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, is // Figure out which properties to update. summaryValue := infoObjectValue.FieldByName("Summary") descriptionValue := infoObjectValue.FieldByName("Description") + readOnlyValue := infoObjectValue.FieldByName("ReadOnly") + + if readOnlyValue.Kind() == reflect.Bool && readOnlyValue.CanSet() && strings.Contains(comment, "Output only.") { + readOnlyValue.Set(reflect.ValueOf(true)) + } + usingTitle := false if !summaryValue.CanSet() { summaryValue = infoObjectValue.FieldByName("Title") @@ -1539,6 +1546,7 @@ func protoJSONSchemaToSwaggerSchemaCore(j *swagger_options.JSONSchema, reg *desc func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_options.JSONSchema) { s.Title = j.GetTitle() s.Description = j.GetDescription() + s.ReadOnly = j.GetReadOnly() s.MultipleOf = j.GetMultipleOf() s.Maximum = j.GetMaximum() s.ExclusiveMaximum = j.GetExclusiveMaximum() diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index f11246bf1a0..603e2ed8feb 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -2,6 +2,7 @@ package genswagger import ( "encoding/json" + "errors" "fmt" "reflect" "testing" @@ -1274,6 +1275,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { MaxProperties: 33, MinProperties: 22, Required: []string{"req"}, + ReadOnly: true, }, }, }, @@ -1298,6 +1300,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { MaxProperties: 33, MinProperties: 22, Required: []string{"req"}, + ReadOnly: true, }, }, }, @@ -1498,3 +1501,135 @@ func TestProtoComments(t *testing.T) { } } } + +func TestUpdateSwaggerDataFromComments(t *testing.T) { + + tests := []struct { + descr string + swaggerObject interface{} + comments string + expectedError error + expectedSwaggerObject interface{} + }{ + { + descr: "empty comments", + swaggerObject: nil, + expectedSwaggerObject: nil, + comments: "", + expectedError: nil, + }, + { + descr: "set field to read only", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + ReadOnly: true, + Description: "... Output only. ...", + }, + comments: "... Output only. ...", + expectedError: nil, + }, + { + descr: "set title", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "Comment with no trailing dot", + }, + comments: "Comment with no trailing dot", + expectedError: nil, + }, + { + descr: "set description", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + Description: "Comment with trailing dot.", + }, + comments: "Comment with trailing dot.", + expectedError: nil, + }, + { + descr: "use info object", + swaggerObject: &swaggerObject{ + Info: swaggerInfoObject{ + }, + }, + expectedSwaggerObject: &swaggerObject{ + Info: swaggerInfoObject{ + Description: "Comment with trailing dot.", + }, + }, + comments: "Comment with trailing dot.", + expectedError: nil, + }, + { + descr: "multi line comment with title", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject { + Title: "First line", + Description: "Second line", + }, + comments: "First line\n\nSecond line", + expectedError: nil, + }, + { + descr: "multi line comment no title", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject { + Description: "First line.\n\nSecond line", + }, + comments: "First line.\n\nSecond line", + expectedError: nil, + }, + { + descr: "multi line comment with summary with dot", + swaggerObject: &swaggerOperationObject{}, + expectedSwaggerObject: &swaggerOperationObject { + Summary: "First line.", + Description: "Second line", + }, + comments: "First line.\n\nSecond line", + expectedError: nil, + }, + { + descr: "multi line comment with summary no dot", + swaggerObject: &swaggerOperationObject{}, + expectedSwaggerObject: &swaggerOperationObject { + Summary: "First line", + Description: "Second line", + }, + comments: "First line\n\nSecond line", + expectedError: nil, + }, + { + descr: "multi line comment with summary no dot", + swaggerObject: &schemaCore{}, + expectedSwaggerObject: &schemaCore{}, + comments: "Any comment", + expectedError: errors.New("no description nor summary property"), + }, + } + + for _, test := range tests { + t.Run(test.descr, func(t *testing.T) { + err := updateSwaggerDataFromComments(test.swaggerObject, test.comments, false) + + if test.expectedError == nil { + if err != nil { + t.Errorf("unexpected error '%v'", err) + } + if !reflect.DeepEqual(test.swaggerObject, test.expectedSwaggerObject) { + t.Errorf("swaggerObject was not updated corretly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) + } + } else { + if err == nil { + t.Error("expected update error not returned") + } + if !reflect.DeepEqual(test.swaggerObject, test.expectedSwaggerObject) { + t.Errorf("swaggerObject was not updated corretly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) + } + if err.Error() != test.expectedError.Error() { + t.Errorf("expected error malformed, expected %q, got %q", test.expectedError.Error(), err.Error()) + } + } + }) + } +} \ No newline at end of file diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index d2bed9aa92c..6599937dc69 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -209,6 +209,7 @@ type swaggerSchemaObject struct { ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` + ReadOnly bool `json:"readOnly,omitempty"` MultipleOf float64 `json:"multipleOf,omitempty"` Maximum float64 `json:"maximum,omitempty"` ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index ccdb18fe08b..dd6cfd5d072 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{0, 0} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{8, 0} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 0} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 1} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{11, 2} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -210,7 +210,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{0} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -333,7 +333,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{1} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -450,7 +450,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{2} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -505,7 +505,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{3} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -585,7 +585,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{4} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -644,7 +644,7 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{5} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{5} } func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) @@ -696,7 +696,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{6} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -750,7 +750,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{7} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -827,6 +827,7 @@ type JSONSchema struct { Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` @@ -853,7 +854,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{8} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -901,6 +902,13 @@ func (m *JSONSchema) GetDefault() string { return "" } +func (m *JSONSchema) GetReadOnly() bool { + if m != nil { + return m.ReadOnly + } + return false +} + func (m *JSONSchema) GetMultipleOf() float64 { if m != nil { return m.MultipleOf @@ -1032,7 +1040,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{9} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1086,7 +1094,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{10} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1164,7 +1172,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{11} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1266,7 +1274,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{12} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1311,7 +1319,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{12, 0} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1356,7 +1364,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_ae281b352364822e, []int{13} + return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1412,120 +1420,121 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_ae281b352364822e) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_11f010f5fecc79bc) } -var fileDescriptor_openapiv2_ae281b352364822e = []byte{ - // 1773 bytes of a gzipped FileDescriptorProto +var fileDescriptor_openapiv2_11f010f5fecc79bc = []byte{ + // 1777 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, 0x53, 0x8d, 0x3d, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0xa7, 0x1d, 0x4a, 0x62, 0x6c, 0xc0, 0x32, 0xc9, 0x82, 0x54, 0x14, 0x77, 0x26, 0x83, 0x81, 0xc1, 0x23, 0x85, 0x18, 0x38, 0x20, 0xf8, 0x90, - 0xc4, 0xbe, 0xf5, 0xa5, 0xed, 0x73, 0xa7, 0x4f, 0x9d, 0xe9, 0x9f, 0xd1, 0xb7, 0xfe, 0x55, 0xed, - 0x1f, 0xd0, 0xce, 0x7d, 0x80, 0x04, 0x25, 0x26, 0x43, 0xf9, 0xa3, 0x4f, 0xbc, 0xfd, 0xfa, 0xdd, - 0xee, 0xde, 0xee, 0xdd, 0x82, 0xf0, 0x30, 0x8a, 0xc3, 0x34, 0x74, 0x1f, 0xcf, 0x08, 0x7d, 0x9c, - 0x5c, 0x3a, 0xb3, 0x19, 0x89, 0xf7, 0xc3, 0x28, 0xf5, 0x42, 0x9a, 0xec, 0x87, 0x11, 0xa1, 0x4e, - 0xe4, 0x5d, 0x1c, 0x74, 0xb8, 0x12, 0xfe, 0xe5, 0x2c, 0x8e, 0xdc, 0xce, 0xcc, 0x49, 0xc9, 0xa5, - 0x33, 0x17, 0x3c, 0xd7, 0x9e, 0x11, 0x6a, 0x4b, 0xc3, 0x8e, 0x34, 0xdc, 0xf9, 0x60, 0x16, 0x86, - 0x33, 0x9f, 0xec, 0x73, 0x95, 0x97, 0xd9, 0x74, 0xdf, 0xa1, 0x52, 0xbf, 0xfd, 0xdf, 0x2a, 0xd4, - 0x46, 0x42, 0x1d, 0xeb, 0x50, 0x93, 0x96, 0xba, 0xb2, 0xab, 0xec, 0xd5, 0xad, 0x9c, 0xc4, 0x5d, - 0x50, 0x3d, 0x3a, 0x0d, 0xf5, 0xd2, 0xae, 0xb2, 0xd7, 0x38, 0x78, 0xdc, 0xd9, 0x70, 0xe3, 0x8e, - 0x41, 0xa7, 0xa1, 0xc5, 0x4d, 0x31, 0x06, 0xf5, 0x3c, 0x4c, 0x52, 0xbd, 0xcc, 0x91, 0xf9, 0x1a, - 0x7f, 0x08, 0xf5, 0x97, 0x4e, 0x42, 0xec, 0xc8, 0x49, 0xcf, 0x75, 0x95, 0x0b, 0x34, 0xc6, 0x18, - 0x3a, 0xe9, 0x39, 0xfe, 0x06, 0x6a, 0x89, 0x7b, 0x4e, 0x02, 0x92, 0xe8, 0x95, 0xdd, 0xf2, 0x5e, - 0xeb, 0xe0, 0x37, 0x1b, 0x6f, 0x2b, 0x03, 0xca, 0x7f, 0x47, 0x1c, 0xc6, 0xca, 0xe1, 0xf0, 0x0e, - 0x68, 0x6e, 0x48, 0x93, 0x8c, 0x41, 0x57, 0x77, 0xcb, 0x6c, 0xd7, 0x9c, 0x66, 0xb2, 0x28, 0x0e, - 0x27, 0x99, 0x4b, 0x12, 0xbd, 0x26, 0x64, 0x39, 0x8d, 0xbf, 0x85, 0x7a, 0x4c, 0x92, 0x28, 0xa4, - 0x09, 0x49, 0x74, 0xd8, 0x2d, 0xef, 0x35, 0x0e, 0x7e, 0x7b, 0x6b, 0x9f, 0xac, 0x1c, 0xa1, 0x47, - 0xd3, 0x78, 0x6e, 0x2d, 0x11, 0x71, 0x08, 0xdb, 0x09, 0x71, 0xb3, 0xd8, 0x4b, 0xe7, 0xf6, 0x84, - 0x4c, 0x3d, 0xea, 0x71, 0x4b, 0xbd, 0xc1, 0x93, 0xfe, 0xeb, 0xcd, 0x77, 0x92, 0x20, 0xc7, 0x4b, - 0x0c, 0xeb, 0x6e, 0x72, 0x93, 0x89, 0xbf, 0x01, 0x2d, 0x67, 0xeb, 0x5b, 0x3c, 0x9c, 0xdb, 0x6f, - 0x62, 0x91, 0xef, 0x33, 0x2f, 0x26, 0x01, 0xa1, 0xa9, 0xb5, 0x40, 0xc3, 0x2e, 0x34, 0xc9, 0x55, - 0x4a, 0x62, 0xea, 0xf8, 0xf6, 0x24, 0x74, 0x13, 0xbd, 0xc5, 0x63, 0xd8, 0xfc, 0x04, 0x7b, 0xd2, - 0xfa, 0x38, 0x74, 0x33, 0x86, 0xed, 0x30, 0xb6, 0xb5, 0x45, 0x96, 0xec, 0x64, 0x27, 0x84, 0xd6, - 0x6a, 0x32, 0x31, 0x82, 0xf2, 0x2b, 0x32, 0x97, 0xc5, 0xcb, 0x96, 0xf8, 0x09, 0x54, 0x2e, 0x1c, - 0x3f, 0x23, 0xb2, 0x72, 0x3f, 0xdb, 0xd8, 0x81, 0x1c, 0xd9, 0x12, 0xf6, 0x5f, 0x96, 0xbe, 0x50, - 0xda, 0x87, 0xd0, 0x5c, 0xa9, 0x28, 0xdc, 0x80, 0xda, 0x69, 0xff, 0x59, 0x7f, 0x70, 0xd6, 0x47, - 0xef, 0x61, 0x0d, 0xd4, 0xa7, 0xe3, 0xf1, 0x10, 0x29, 0xb8, 0x0e, 0x15, 0xb6, 0x1a, 0xa1, 0x12, - 0xae, 0x42, 0xe9, 0x6c, 0x84, 0xca, 0xb8, 0x06, 0xe5, 0xb3, 0xd1, 0x08, 0xa9, 0xa6, 0xaa, 0x69, - 0xa8, 0x6e, 0xaa, 0x5a, 0x1d, 0x81, 0xa9, 0x6a, 0x4d, 0xd4, 0x6a, 0xff, 0xb9, 0x02, 0xf5, 0x41, - 0x44, 0x62, 0x1e, 0x22, 0x6b, 0x93, 0xd4, 0x99, 0x25, 0xba, 0xc2, 0x6b, 0x8f, 0xaf, 0x79, 0x5f, - 0x66, 0x41, 0xe0, 0xc4, 0x73, 0x1e, 0x06, 0xeb, 0x4b, 0x41, 0xe2, 0x5d, 0x68, 0x4c, 0x48, 0xe2, - 0xc6, 0x1e, 0xf7, 0x5a, 0xf6, 0x56, 0x91, 0x75, 0xf3, 0x24, 0xd4, 0xb7, 0x7f, 0x12, 0xf8, 0x63, - 0xd8, 0x0a, 0xf3, 0x08, 0x6c, 0x6f, 0xa2, 0x57, 0x84, 0x1f, 0x0b, 0x9e, 0x31, 0x79, 0xed, 0x9e, - 0xb3, 0x8b, 0x3d, 0x57, 0xe7, 0x45, 0xda, 0xdd, 0xd8, 0xf7, 0x45, 0x5a, 0x7f, 0xa4, 0xeb, 0xf4, - 0xe5, 0x35, 0x03, 0x7c, 0xef, 0xc5, 0x35, 0xf1, 0x00, 0x60, 0x42, 0xa2, 0x98, 0xb8, 0x4e, 0x4a, - 0x26, 0xbc, 0x0b, 0x35, 0xab, 0xc0, 0x79, 0x77, 0xed, 0xf3, 0x7f, 0xaf, 0x6c, 0x51, 0x95, 0xed, - 0x3f, 0x2a, 0xa0, 0xe5, 0xd2, 0xeb, 0xa5, 0xa5, 0xdc, 0x2c, 0xad, 0x27, 0x50, 0xe5, 0xa9, 0x72, - 0xa4, 0x0b, 0xfb, 0x9b, 0x47, 0xcf, 0xcd, 0x2c, 0x69, 0x6e, 0xaa, 0x5a, 0x99, 0x77, 0x86, 0x8a, - 0x2a, 0xed, 0xbf, 0x97, 0x40, 0x65, 0xaf, 0x06, 0xde, 0x86, 0x4a, 0xea, 0xa5, 0x3e, 0x91, 0x3b, - 0x0b, 0xe2, 0xba, 0x57, 0xa5, 0x9b, 0x5e, 0xed, 0x01, 0x4a, 0x49, 0x1c, 0x24, 0x76, 0x38, 0xb5, - 0x13, 0x12, 0x5f, 0x78, 0x2e, 0x91, 0x7d, 0xd1, 0xe2, 0xfc, 0xc1, 0x74, 0x24, 0xb8, 0xd8, 0x84, - 0x9a, 0x1b, 0xd2, 0xd4, 0x71, 0x53, 0xd9, 0x14, 0x9f, 0x6e, 0x1c, 0xc0, 0x91, 0xb0, 0xb3, 0x72, - 0x00, 0x86, 0xe5, 0x7b, 0x2e, 0xa1, 0x09, 0xe1, 0xc5, 0x7f, 0x1b, 0xac, 0x13, 0x61, 0x67, 0xe5, - 0x00, 0xac, 0x22, 0x2f, 0x48, 0x9c, 0xb0, 0xf8, 0xaa, 0xa2, 0xdd, 0x25, 0xd9, 0xee, 0x41, 0x4d, - 0xee, 0xcc, 0xee, 0x09, 0xea, 0x04, 0x79, 0x76, 0xf8, 0x9a, 0x15, 0x49, 0x16, 0xfb, 0x32, 0x29, - 0x6c, 0xc9, 0x92, 0x48, 0x02, 0xc7, 0xf3, 0x65, 0x06, 0x04, 0xd1, 0xde, 0x87, 0x9a, 0xdc, 0x74, - 0x33, 0x98, 0xf6, 0x33, 0xb8, 0xb7, 0xf6, 0x1a, 0xd8, 0xa0, 0x48, 0x6e, 0x82, 0xfd, 0xab, 0x04, - 0x55, 0x51, 0x00, 0x78, 0x0c, 0x8d, 0xef, 0x92, 0x90, 0xda, 0xb2, 0x8c, 0x14, 0x9e, 0xb9, 0xcf, - 0x37, 0xce, 0x9c, 0x39, 0x1a, 0xf4, 0x65, 0x29, 0x01, 0xc3, 0x91, 0xa8, 0x9f, 0x40, 0x73, 0xe2, - 0x31, 0x0f, 0x02, 0x8f, 0x3a, 0x69, 0x18, 0xcb, 0xcd, 0x57, 0x99, 0x6c, 0xf6, 0x88, 0x89, 0x33, - 0xb1, 0x43, 0xea, 0xcf, 0x79, 0x7a, 0x34, 0x4b, 0x63, 0x8c, 0x01, 0xf5, 0xd7, 0xbc, 0x5f, 0x95, - 0x77, 0x70, 0x6b, 0x76, 0xa0, 0x46, 0xae, 0x9c, 0x20, 0xf2, 0x09, 0x3f, 0xe7, 0xc6, 0xc1, 0x76, - 0x47, 0xcc, 0x69, 0x9d, 0x7c, 0x4e, 0xeb, 0x74, 0xe9, 0xdc, 0xca, 0x95, 0x64, 0x83, 0xfc, 0xa9, - 0x06, 0xb0, 0x0c, 0x9c, 0xe5, 0x37, 0x26, 0x53, 0x79, 0xbe, 0x6c, 0xb9, 0x6c, 0x9c, 0xca, 0x8f, - 0x34, 0x4e, 0xf5, 0xe6, 0x49, 0xe9, 0x50, 0x9b, 0x90, 0xa9, 0x93, 0xf9, 0xa9, 0x5e, 0x13, 0x65, - 0x27, 0x49, 0xfc, 0x33, 0x68, 0x04, 0x99, 0x9f, 0x7a, 0x91, 0x4f, 0xec, 0x70, 0xaa, 0xc3, 0xae, - 0xb2, 0xa7, 0x58, 0x90, 0xb3, 0x06, 0x53, 0x66, 0x1a, 0x38, 0x57, 0x5e, 0x90, 0x05, 0xfc, 0x9a, - 0x54, 0xac, 0x9c, 0xc4, 0x8f, 0xe0, 0x0e, 0xb9, 0x72, 0xfd, 0x2c, 0xf1, 0x2e, 0x88, 0x9d, 0xeb, - 0x6c, 0xf1, 0x6c, 0xa3, 0x85, 0xe0, 0xb9, 0x54, 0x66, 0x30, 0x1e, 0xe5, 0x2a, 0x4d, 0x09, 0x23, - 0xc8, 0x6b, 0x30, 0x52, 0xa7, 0x75, 0x1d, 0x46, 0x2a, 0xdf, 0x07, 0x08, 0x9c, 0x2b, 0xdb, 0x27, - 0x74, 0x96, 0x9e, 0xeb, 0xef, 0xef, 0x2a, 0x7b, 0xaa, 0x55, 0x0f, 0x9c, 0xab, 0x13, 0xce, 0xe0, - 0x62, 0x8f, 0xe6, 0x62, 0x24, 0xc5, 0x1e, 0x95, 0x62, 0x1d, 0x6a, 0x91, 0x93, 0xb2, 0x63, 0xd2, - 0xef, 0x88, 0x34, 0x48, 0x92, 0x55, 0x0c, 0xc3, 0xf5, 0x52, 0x12, 0x24, 0xfa, 0x36, 0xb7, 0xd3, - 0x02, 0xe7, 0xca, 0x60, 0x34, 0x17, 0x7a, 0x54, 0x0a, 0xef, 0x49, 0xa1, 0x47, 0x85, 0xf0, 0x63, - 0xd8, 0xca, 0xa8, 0xf7, 0x7d, 0x46, 0xa4, 0xfc, 0x27, 0xdc, 0xf3, 0x86, 0xe0, 0x09, 0x95, 0x5f, - 0x40, 0x8b, 0x81, 0x47, 0x31, 0x7b, 0x34, 0x53, 0x8f, 0x24, 0xba, 0xce, 0x41, 0x9a, 0x81, 0x73, - 0x35, 0x5c, 0x30, 0xb9, 0x9a, 0x47, 0x8b, 0x6a, 0x1f, 0x48, 0x35, 0x8f, 0x16, 0xd4, 0x76, 0x40, - 0x8b, 0xc5, 0xcb, 0x32, 0xd1, 0x77, 0xc4, 0x8b, 0x9a, 0xd3, 0xac, 0x3e, 0x9c, 0x38, 0x76, 0xe6, - 0x7a, 0x9b, 0x0b, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, 0x39, 0x1f, 0xb5, 0x8d, - 0xd7, 0xe8, 0xc1, 0xc2, 0x72, 0xe4, 0xb1, 0x82, 0x1d, 0xcf, 0x23, 0x92, 0x58, 0x1c, 0xb6, 0x7d, - 0x09, 0xf7, 0xd6, 0x8a, 0x57, 0x47, 0xa8, 0x3a, 0x54, 0xba, 0x96, 0xd5, 0x7d, 0x81, 0x14, 0xc6, - 0x3f, 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, 0x7b, 0x4f, 0x7a, 0x16, - 0x2a, 0xb3, 0x39, 0xab, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, 0x9f, 0x3e, 0x3f, 0xec, - 0x59, 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, 0x1e, 0x8d, 0x2d, 0xa3, - 0xff, 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, 0x8b, 0x06, 0xba, 0x36, - 0x81, 0x61, 0x74, 0xd7, 0x54, 0xb5, 0xbb, 0x68, 0xdb, 0x54, 0xb5, 0x9f, 0x22, 0xdd, 0x54, 0xb5, - 0x0f, 0xd1, 0x47, 0xa6, 0xaa, 0x7d, 0x84, 0xee, 0x9b, 0xaa, 0x76, 0x1f, 0x3d, 0x30, 0x55, 0xed, - 0x01, 0x6a, 0x9b, 0xaa, 0xf6, 0x09, 0x7a, 0x68, 0xaa, 0xda, 0x43, 0xf4, 0xc8, 0x54, 0xb5, 0x47, - 0xa8, 0xd3, 0xfe, 0xab, 0x02, 0xe5, 0xb1, 0x33, 0xdb, 0xe0, 0x49, 0xba, 0x71, 0x9b, 0x94, 0xdf, - 0xfe, 0x6d, 0x22, 0x02, 0x6d, 0xff, 0x47, 0x81, 0xbb, 0x6b, 0xe6, 0x7f, 0x3c, 0x2d, 0xcc, 0x2a, - 0x0a, 0x9f, 0x55, 0xcc, 0x37, 0xf9, 0x9e, 0x58, 0xf0, 0xc4, 0x38, 0xb5, 0x9c, 0x5c, 0x52, 0x68, - 0xae, 0x88, 0xd6, 0x0c, 0x2e, 0xcf, 0x57, 0x07, 0x97, 0x5f, 0xdd, 0xda, 0x0f, 0xf9, 0x39, 0x57, - 0x18, 0xcc, 0xff, 0x59, 0x81, 0xd6, 0xaa, 0x14, 0x0f, 0x65, 0x3d, 0xb3, 0x8d, 0x5b, 0xaf, 0x31, - 0x98, 0x09, 0x98, 0x0e, 0x2b, 0x52, 0x51, 0xc2, 0x1b, 0x9c, 0x73, 0xfe, 0x98, 0x96, 0x0b, 0x8f, - 0xa9, 0x09, 0x25, 0x8f, 0xf2, 0xf9, 0xa2, 0x75, 0xf0, 0xe5, 0xeb, 0x7a, 0x61, 0x50, 0xab, 0xe4, - 0x51, 0x16, 0xd3, 0xd4, 0x0f, 0x2f, 0xf9, 0xc5, 0xfe, 0x06, 0x31, 0x7d, 0xe5, 0x87, 0x97, 0x16, - 0x47, 0x62, 0xf7, 0xaa, 0x93, 0xa5, 0xe7, 0x61, 0xec, 0xfd, 0x41, 0x0c, 0xef, 0xec, 0xad, 0x16, - 0x6f, 0x03, 0x5a, 0x11, 0x9c, 0xc6, 0x3e, 0xbb, 0xe2, 0xd2, 0xf0, 0x15, 0x11, 0x4a, 0xe2, 0x89, - 0xd0, 0x38, 0x83, 0x09, 0xf9, 0x30, 0x18, 0x46, 0x24, 0xd1, 0xb5, 0x5b, 0x0f, 0x83, 0xcc, 0xcc, - 0x92, 0xe6, 0xed, 0x67, 0xa0, 0xb2, 0xa4, 0x63, 0x04, 0x5b, 0xe3, 0x17, 0xc3, 0x9e, 0x6d, 0xf4, - 0xbf, 0xee, 0x9e, 0x18, 0xc7, 0xe8, 0x3d, 0xdc, 0x02, 0xe0, 0x9c, 0xc3, 0xee, 0xc8, 0x38, 0x42, - 0xca, 0x42, 0xa3, 0x3b, 0x34, 0xec, 0x67, 0xbd, 0x17, 0xa8, 0x84, 0xdf, 0x87, 0x06, 0xe7, 0x0c, - 0xba, 0xa7, 0xe3, 0xa7, 0x07, 0xa8, 0xdc, 0xfe, 0x0c, 0x4a, 0x06, 0x65, 0x86, 0x46, 0xbf, 0x00, - 0xb4, 0x05, 0x9a, 0xd1, 0xb7, 0x7f, 0x77, 0xda, 0xb3, 0xd8, 0x4d, 0xd3, 0x84, 0xba, 0xd1, 0xb7, - 0x9f, 0xf6, 0xba, 0xc7, 0x3d, 0x0b, 0x95, 0xda, 0xdf, 0x81, 0xca, 0x12, 0xc4, 0xd0, 0xbf, 0x3a, - 0x19, 0x9c, 0x15, 0xcc, 0xee, 0x40, 0x53, 0x70, 0x9e, 0x0f, 0x4f, 0x8c, 0x23, 0x63, 0x8c, 0x94, - 0x05, 0x6b, 0xd8, 0x1d, 0x8d, 0xce, 0x06, 0xd6, 0x31, 0x2a, 0xe1, 0x6d, 0x40, 0x9c, 0xd5, 0x1d, - 0x32, 0xad, 0xee, 0xd8, 0x18, 0xf4, 0x51, 0x79, 0xc9, 0x3d, 0x3a, 0xea, 0x8d, 0x46, 0xf6, 0xd1, - 0xe0, 0xb8, 0x87, 0xd4, 0xf6, 0xbf, 0x4b, 0xcb, 0x6e, 0x2d, 0x7c, 0x09, 0xe0, 0xbf, 0x28, 0x85, - 0xbf, 0x02, 0xe2, 0xa5, 0x40, 0xb6, 0xee, 0xe9, 0x9b, 0x7c, 0x66, 0xac, 0xe3, 0x89, 0x2e, 0x5e, - 0xfc, 0x47, 0x50, 0x90, 0xec, 0x7c, 0x0a, 0xfa, 0x1a, 0x83, 0xaf, 0x59, 0xeb, 0xb1, 0x97, 0x84, - 0x1f, 0x9a, 0xfc, 0x58, 0x15, 0xc4, 0xce, 0x3f, 0x94, 0xb5, 0x26, 0x3f, 0x74, 0x1d, 0xbc, 0x5a, - 0xbd, 0x0e, 0xde, 0x7a, 0x6c, 0xdc, 0xd5, 0xe2, 0x65, 0xf1, 0x37, 0x85, 0xcd, 0x9f, 0xac, 0xd6, - 0xf0, 0xb0, 0x18, 0x40, 0xe3, 0x36, 0xfd, 0xc9, 0xed, 0xc5, 0x8f, 0x48, 0x9e, 0x0c, 0xfe, 0x0b, - 0x80, 0x25, 0x73, 0x4d, 0xb4, 0xdb, 0xc5, 0x68, 0xeb, 0x05, 0xb7, 0x0e, 0x8f, 0x7e, 0xdf, 0x9d, - 0x79, 0xe9, 0x79, 0xf6, 0xb2, 0xe3, 0x86, 0xc1, 0x3e, 0x73, 0xe4, 0x31, 0x71, 0xc3, 0x64, 0x9e, - 0xa4, 0x44, 0x92, 0xd2, 0xaf, 0xfd, 0x1f, 0xfe, 0x87, 0xf0, 0x65, 0x95, 0xcb, 0x3e, 0xff, 0x5f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xf7, 0xc4, 0x0e, 0x83, 0x46, 0x14, 0x00, 0x00, + 0xc4, 0xbe, 0xf5, 0xa9, 0x7d, 0xee, 0xf4, 0xa9, 0x33, 0xf9, 0x33, 0xfa, 0xd6, 0xbf, 0xaa, 0xfd, + 0x03, 0xda, 0xb9, 0x0f, 0x90, 0xa0, 0xc4, 0x64, 0x28, 0x7f, 0xf4, 0x89, 0xb7, 0x5f, 0xbf, 0xdb, + 0xdd, 0xdb, 0xbd, 0x5b, 0x10, 0x1e, 0x46, 0x71, 0x98, 0x86, 0xee, 0xe3, 0x19, 0xa1, 0x8f, 0x93, + 0x4b, 0x67, 0x36, 0x23, 0xf1, 0x7e, 0x18, 0xa5, 0x5e, 0x48, 0x93, 0xfd, 0x30, 0x22, 0xd4, 0x89, + 0xbc, 0x8b, 0x83, 0x0e, 0x57, 0xc2, 0xbf, 0x9e, 0xc5, 0x91, 0xdb, 0x99, 0x39, 0x29, 0xb9, 0x74, + 0xe6, 0x82, 0xe7, 0xda, 0x33, 0x42, 0x6d, 0x69, 0xd8, 0x91, 0x86, 0x3b, 0x1f, 0xcc, 0xc2, 0x70, + 0xe6, 0x93, 0x7d, 0xae, 0xf2, 0x32, 0x9b, 0xee, 0x3b, 0x54, 0xea, 0xb7, 0xff, 0x5b, 0x85, 0xda, + 0x48, 0xa8, 0x63, 0x1d, 0x6a, 0xd2, 0x52, 0x57, 0x76, 0x95, 0xbd, 0xba, 0x95, 0x93, 0xb8, 0x0b, + 0xaa, 0x47, 0xa7, 0xa1, 0x5e, 0xda, 0x55, 0xf6, 0x1a, 0x07, 0x8f, 0x3b, 0x1b, 0x6e, 0xdc, 0x31, + 0xe8, 0x34, 0xb4, 0xb8, 0x29, 0xc6, 0xa0, 0x9e, 0x87, 0x49, 0xaa, 0x97, 0x39, 0x32, 0x5f, 0xe3, + 0x0f, 0xa1, 0xfe, 0xd2, 0x49, 0x88, 0x1d, 0x39, 0xe9, 0xb9, 0xae, 0x72, 0x81, 0xc6, 0x18, 0x43, + 0x27, 0x3d, 0xc7, 0xdf, 0x40, 0x2d, 0x71, 0xcf, 0x49, 0x40, 0x12, 0xbd, 0xb2, 0x5b, 0xde, 0x6b, + 0x1d, 0xfc, 0x6e, 0xe3, 0x6d, 0x65, 0x40, 0xf9, 0xef, 0x88, 0xc3, 0x58, 0x39, 0x1c, 0xde, 0x01, + 0xcd, 0x0d, 0x69, 0x92, 0x31, 0xe8, 0xea, 0x6e, 0x99, 0xed, 0x9a, 0xd3, 0x4c, 0x16, 0xc5, 0xe1, + 0x24, 0x73, 0x49, 0xa2, 0xd7, 0x84, 0x2c, 0xa7, 0xf1, 0xb7, 0x50, 0x8f, 0x49, 0x12, 0x85, 0x34, + 0x21, 0x89, 0x0e, 0xbb, 0xe5, 0xbd, 0xc6, 0xc1, 0xef, 0x6f, 0xed, 0x93, 0x95, 0x23, 0xf4, 0x68, + 0x1a, 0xcf, 0xad, 0x25, 0x22, 0x0e, 0x61, 0x3b, 0x21, 0x6e, 0x16, 0x7b, 0xe9, 0xdc, 0x9e, 0x90, + 0xa9, 0x47, 0x3d, 0x6e, 0xa9, 0x37, 0x78, 0xd2, 0x7f, 0xbb, 0xf9, 0x4e, 0x12, 0xe4, 0x78, 0x89, + 0x61, 0xdd, 0x4d, 0x6e, 0x32, 0xf1, 0x37, 0xa0, 0xe5, 0x6c, 0x7d, 0x8b, 0x87, 0x73, 0xfb, 0x4d, + 0x2c, 0xf2, 0x7d, 0xe6, 0xc5, 0x24, 0x20, 0x34, 0xb5, 0x16, 0x68, 0xd8, 0x85, 0x26, 0xb9, 0x4a, + 0x49, 0x4c, 0x1d, 0xdf, 0x9e, 0x84, 0x6e, 0xa2, 0xb7, 0x78, 0x0c, 0x9b, 0x9f, 0x60, 0x4f, 0x5a, + 0x1f, 0x87, 0x6e, 0xc6, 0xb0, 0x1d, 0xc6, 0xb6, 0xb6, 0xc8, 0x92, 0x9d, 0xec, 0x84, 0xd0, 0x5a, + 0x4d, 0x26, 0x46, 0x50, 0x7e, 0x45, 0xe6, 0xb2, 0x78, 0xd9, 0x12, 0x3f, 0x81, 0xca, 0x85, 0xe3, + 0x67, 0x44, 0x56, 0xee, 0x67, 0x1b, 0x3b, 0x90, 0x23, 0x5b, 0xc2, 0xfe, 0xcb, 0xd2, 0x17, 0x4a, + 0xfb, 0x10, 0x9a, 0x2b, 0x15, 0x85, 0x1b, 0x50, 0x3b, 0xed, 0x3f, 0xeb, 0x0f, 0xce, 0xfa, 0xe8, + 0x3d, 0xac, 0x81, 0xfa, 0x74, 0x3c, 0x1e, 0x22, 0x05, 0xd7, 0xa1, 0xc2, 0x56, 0x23, 0x54, 0xc2, + 0x55, 0x28, 0x9d, 0x8d, 0x50, 0x19, 0xd7, 0xa0, 0x7c, 0x36, 0x1a, 0x21, 0xd5, 0x54, 0x35, 0x0d, + 0xd5, 0x4d, 0x55, 0xab, 0x23, 0x30, 0x55, 0xad, 0x89, 0x5a, 0xed, 0xbf, 0x54, 0xa0, 0x3e, 0x88, + 0x48, 0xcc, 0x43, 0x64, 0x6d, 0x92, 0x3a, 0xb3, 0x44, 0x57, 0x78, 0xed, 0xf1, 0x35, 0xef, 0xcb, + 0x2c, 0x08, 0x9c, 0x78, 0xce, 0xc3, 0x60, 0x7d, 0x29, 0x48, 0xbc, 0x0b, 0x8d, 0x09, 0x49, 0xdc, + 0xd8, 0xe3, 0x5e, 0xcb, 0xde, 0x2a, 0xb2, 0x6e, 0x9e, 0x84, 0xfa, 0xf6, 0x4f, 0x02, 0x7f, 0x0c, + 0x5b, 0x61, 0x1e, 0x81, 0xed, 0x4d, 0xf4, 0x8a, 0xf0, 0x63, 0xc1, 0x33, 0x26, 0xaf, 0xdd, 0x73, + 0x76, 0xb1, 0xe7, 0xea, 0xbc, 0x48, 0xbb, 0x1b, 0xfb, 0xbe, 0x48, 0xeb, 0x4f, 0x74, 0x9d, 0xbe, + 0xbc, 0x66, 0x80, 0xef, 0xbd, 0xb8, 0x26, 0x1e, 0x00, 0x4c, 0x48, 0x14, 0x13, 0xd7, 0x49, 0xc9, + 0x84, 0x77, 0xa1, 0x66, 0x15, 0x38, 0xef, 0xae, 0x7d, 0xfe, 0xef, 0x95, 0x2d, 0xaa, 0xb2, 0xfd, + 0x67, 0x05, 0xb4, 0x5c, 0x7a, 0xbd, 0xb4, 0x94, 0x9b, 0xa5, 0xf5, 0x04, 0xaa, 0x3c, 0x55, 0x8e, + 0x74, 0x61, 0x7f, 0xf3, 0xe8, 0xb9, 0x99, 0x25, 0xcd, 0x4d, 0x55, 0x2b, 0xf3, 0xce, 0x50, 0x51, + 0xa5, 0xfd, 0x8f, 0x12, 0xa8, 0xec, 0xd5, 0xc0, 0xdb, 0x50, 0x49, 0xbd, 0xd4, 0x27, 0x72, 0x67, + 0x41, 0x5c, 0xf7, 0xaa, 0x74, 0xd3, 0xab, 0x3d, 0x40, 0x29, 0x89, 0x83, 0xc4, 0x0e, 0xa7, 0x76, + 0x42, 0xe2, 0x0b, 0xcf, 0x25, 0xb2, 0x2f, 0x5a, 0x9c, 0x3f, 0x98, 0x8e, 0x04, 0x17, 0x9b, 0x50, + 0x73, 0x43, 0x9a, 0x3a, 0x6e, 0x2a, 0x9b, 0xe2, 0xd3, 0x8d, 0x03, 0x38, 0x12, 0x76, 0x56, 0x0e, + 0xc0, 0xb0, 0x7c, 0xcf, 0x25, 0x34, 0x21, 0xbc, 0xf8, 0x6f, 0x83, 0x75, 0x22, 0xec, 0xac, 0x1c, + 0x80, 0x55, 0xe4, 0x05, 0x89, 0x13, 0x16, 0x5f, 0x55, 0xb4, 0xbb, 0x24, 0xdb, 0x3d, 0xa8, 0xc9, + 0x9d, 0xd9, 0x3d, 0x41, 0x9d, 0x20, 0xcf, 0x0e, 0x5f, 0xb3, 0x22, 0xc9, 0x62, 0x5f, 0x26, 0x85, + 0x2d, 0x59, 0x12, 0x49, 0xe0, 0x78, 0xbe, 0xcc, 0x80, 0x20, 0xda, 0xfb, 0x50, 0x93, 0x9b, 0x6e, + 0x06, 0xd3, 0x7e, 0x06, 0xf7, 0xd6, 0x5e, 0x03, 0x1b, 0x14, 0xc9, 0x4d, 0xb0, 0x7f, 0x95, 0xa0, + 0x2a, 0x0a, 0x00, 0x8f, 0xa1, 0xf1, 0x5d, 0x12, 0x52, 0x5b, 0x96, 0x91, 0xc2, 0x33, 0xf7, 0xf9, + 0xc6, 0x99, 0x33, 0x47, 0x83, 0xbe, 0x2c, 0x25, 0x60, 0x38, 0x12, 0xf5, 0x13, 0x68, 0x4e, 0x3c, + 0xe6, 0x41, 0xe0, 0x51, 0x27, 0x0d, 0x63, 0xb9, 0xf9, 0x2a, 0x93, 0xcd, 0x1e, 0x31, 0x71, 0x26, + 0x76, 0x48, 0xfd, 0x39, 0x4f, 0x8f, 0x66, 0x69, 0x8c, 0x31, 0xa0, 0xfe, 0x9a, 0xf7, 0xab, 0xf2, + 0x0e, 0x6e, 0xcd, 0x0e, 0xd4, 0xc8, 0x95, 0x13, 0x44, 0x3e, 0xe1, 0xe7, 0xdc, 0x38, 0xd8, 0xee, + 0x88, 0x39, 0xad, 0x93, 0xcf, 0x69, 0x9d, 0x2e, 0x9d, 0x5b, 0xb9, 0x92, 0x6c, 0x90, 0x1f, 0x6a, + 0x00, 0xcb, 0xc0, 0x59, 0x7e, 0x63, 0x32, 0x95, 0xe7, 0xcb, 0x96, 0xcb, 0xc6, 0xa9, 0xfc, 0x44, + 0xe3, 0x54, 0x6f, 0x9e, 0x94, 0x0e, 0xb5, 0x09, 0x99, 0x3a, 0x99, 0x9f, 0xea, 0x35, 0x51, 0x76, + 0x92, 0x5c, 0x4d, 0x95, 0x76, 0x2d, 0x55, 0xbf, 0x80, 0x46, 0x90, 0xf9, 0xa9, 0x17, 0xf9, 0xc4, + 0x0e, 0xa7, 0x3a, 0xec, 0x2a, 0x7b, 0x8a, 0x05, 0x39, 0x6b, 0x30, 0x65, 0xb8, 0x81, 0x73, 0xe5, + 0x05, 0x59, 0xc0, 0xef, 0x50, 0xc5, 0xca, 0x49, 0xfc, 0x08, 0xee, 0x90, 0x2b, 0xd7, 0xcf, 0x12, + 0xef, 0x82, 0xd8, 0xb9, 0xce, 0x16, 0xc7, 0x47, 0x0b, 0xc1, 0x73, 0xa9, 0xcc, 0x60, 0x3c, 0xca, + 0x55, 0x9a, 0x12, 0x46, 0x90, 0xd7, 0x60, 0xa4, 0x4e, 0xeb, 0x3a, 0x8c, 0x54, 0xbe, 0x0f, 0x10, + 0x38, 0x57, 0xb6, 0x4f, 0xe8, 0x2c, 0x3d, 0xd7, 0xdf, 0xdf, 0x55, 0xf6, 0x54, 0xab, 0x1e, 0x38, + 0x57, 0x27, 0x9c, 0xc1, 0xc5, 0x1e, 0xcd, 0xc5, 0x48, 0x8a, 0x3d, 0x2a, 0xc5, 0x3a, 0xd4, 0x22, + 0x27, 0x65, 0x67, 0xa8, 0xdf, 0x11, 0x39, 0x92, 0x24, 0xcb, 0x11, 0xc3, 0xf5, 0x52, 0x12, 0x24, + 0xfa, 0x36, 0xb7, 0xd3, 0x02, 0xe7, 0xca, 0x60, 0x34, 0x17, 0x7a, 0x54, 0x0a, 0xef, 0x49, 0xa1, + 0x47, 0x85, 0xf0, 0x63, 0xd8, 0xca, 0xa8, 0xf7, 0x7d, 0x46, 0xa4, 0xfc, 0x67, 0xdc, 0xf3, 0x86, + 0xe0, 0x09, 0x95, 0x5f, 0x41, 0x8b, 0x81, 0x47, 0x31, 0x7b, 0x51, 0x53, 0x8f, 0x24, 0xba, 0xce, + 0x41, 0x9a, 0x81, 0x73, 0x35, 0x5c, 0x30, 0xb9, 0x9a, 0x47, 0x8b, 0x6a, 0x1f, 0x48, 0x35, 0x8f, + 0x16, 0xd4, 0x76, 0x40, 0x8b, 0xc5, 0xb3, 0x33, 0xd1, 0x77, 0xc4, 0x73, 0x9b, 0xd3, 0xac, 0x78, + 0x9c, 0x38, 0x76, 0xe6, 0x7a, 0x9b, 0x0b, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, + 0x25, 0x9f, 0xc3, 0x8d, 0xd7, 0x68, 0xd0, 0xc2, 0x72, 0xe4, 0xb1, 0x6a, 0x1e, 0xcf, 0x23, 0x92, + 0x58, 0x1c, 0xb6, 0x7d, 0x09, 0xf7, 0xd6, 0x8a, 0x57, 0xe7, 0xab, 0x3a, 0x54, 0xba, 0x96, 0xd5, + 0x7d, 0x81, 0x14, 0xc6, 0x3f, 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, + 0x7b, 0x4f, 0x7a, 0x16, 0x2a, 0xb3, 0x21, 0xac, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, + 0x9f, 0x3e, 0x3f, 0xec, 0x59, 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, + 0x1e, 0x8d, 0x2d, 0xa3, 0xff, 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, + 0x8b, 0xee, 0x5a, 0x0c, 0x66, 0x18, 0xdd, 0x35, 0x55, 0xed, 0x2e, 0xda, 0x36, 0x55, 0xed, 0xe7, + 0x48, 0x37, 0x55, 0xed, 0x43, 0xf4, 0x91, 0xa9, 0x6a, 0x1f, 0xa1, 0xfb, 0xa6, 0xaa, 0xdd, 0x47, + 0x0f, 0x4c, 0x55, 0x7b, 0x80, 0xda, 0xa6, 0xaa, 0x7d, 0x82, 0x1e, 0x9a, 0xaa, 0xf6, 0x10, 0x3d, + 0x32, 0x55, 0xed, 0x11, 0xea, 0xb4, 0xff, 0xa6, 0x40, 0x79, 0xec, 0xcc, 0x36, 0x78, 0xa9, 0x6e, + 0x5c, 0x32, 0xe5, 0xb7, 0x7f, 0xc9, 0x88, 0x10, 0xdb, 0xff, 0x51, 0xe0, 0xee, 0x9a, 0xcf, 0x02, + 0x3c, 0x2d, 0x8c, 0x30, 0x0a, 0x1f, 0x61, 0xcc, 0x37, 0xf9, 0xcc, 0x58, 0xf0, 0xc4, 0x94, 0xb5, + 0x1c, 0x68, 0x52, 0x68, 0xae, 0x88, 0xd6, 0xcc, 0x33, 0xcf, 0x57, 0xe7, 0x99, 0xdf, 0xdc, 0xda, + 0x0f, 0xf9, 0x95, 0x57, 0x98, 0xd7, 0xff, 0x59, 0x81, 0xd6, 0xaa, 0x14, 0x0f, 0x65, 0x25, 0xb3, + 0x8d, 0x5b, 0xaf, 0x31, 0xaf, 0x09, 0x98, 0x0e, 0x2b, 0x4f, 0x51, 0xbc, 0x1b, 0x9c, 0x73, 0xfe, + 0xc6, 0x96, 0x0b, 0x6f, 0xac, 0x09, 0x25, 0x8f, 0xf2, 0xb1, 0xa3, 0x75, 0xf0, 0xe5, 0xeb, 0x7a, + 0x61, 0x50, 0xab, 0xe4, 0x51, 0x16, 0xd3, 0xd4, 0x0f, 0x2f, 0xf9, 0x7d, 0xff, 0x06, 0x31, 0x7d, + 0xe5, 0x87, 0x97, 0x16, 0x47, 0x62, 0x37, 0xaa, 0x93, 0xa5, 0xe7, 0x61, 0xec, 0xfd, 0x49, 0xcc, + 0xf4, 0xec, 0x09, 0x17, 0x4f, 0x06, 0x5a, 0x11, 0x9c, 0xc6, 0x3e, 0xbb, 0xdc, 0xd2, 0xf0, 0x15, + 0x11, 0x4a, 0xe2, 0xe5, 0xd0, 0x38, 0x83, 0x09, 0xf9, 0x8c, 0x18, 0x46, 0x24, 0xe1, 0xef, 0xc6, + 0xed, 0x66, 0x44, 0x66, 0x66, 0x49, 0xf3, 0xf6, 0x33, 0x50, 0x59, 0xd2, 0x31, 0x82, 0xad, 0xf1, + 0x8b, 0x61, 0xcf, 0x36, 0xfa, 0x5f, 0x77, 0x4f, 0x8c, 0x63, 0xf4, 0x1e, 0x6e, 0x01, 0x70, 0xce, + 0x61, 0x77, 0x64, 0x1c, 0x21, 0x65, 0xa1, 0xd1, 0x1d, 0x1a, 0xf6, 0xb3, 0xde, 0x0b, 0x54, 0xc2, + 0xef, 0x43, 0x83, 0x73, 0x06, 0xdd, 0xd3, 0xf1, 0xd3, 0x03, 0x54, 0x6e, 0x7f, 0x06, 0x25, 0x83, + 0x32, 0x43, 0xa3, 0x5f, 0x00, 0xda, 0x02, 0xcd, 0xe8, 0xdb, 0x7f, 0x38, 0xed, 0x59, 0xec, 0x8e, + 0x69, 0x42, 0xdd, 0xe8, 0xdb, 0x4f, 0x7b, 0xdd, 0xe3, 0x9e, 0x85, 0x4a, 0xed, 0xef, 0x40, 0x65, + 0x09, 0x62, 0xe8, 0x5f, 0x9d, 0x0c, 0xce, 0x0a, 0x66, 0x77, 0xa0, 0x29, 0x38, 0xcf, 0x87, 0x27, + 0xc6, 0x91, 0x31, 0x46, 0xca, 0x82, 0x35, 0xec, 0x8e, 0x46, 0x67, 0x03, 0xeb, 0x18, 0x95, 0xf0, + 0x36, 0x20, 0xce, 0xea, 0x0e, 0x99, 0x56, 0x77, 0x6c, 0x0c, 0xfa, 0xa8, 0xbc, 0xe4, 0x1e, 0x1d, + 0xf5, 0x46, 0x23, 0xfb, 0x68, 0x70, 0xdc, 0x43, 0x6a, 0xfb, 0xdf, 0xa5, 0x65, 0xb7, 0x16, 0x3e, + 0x10, 0xf0, 0x5f, 0x95, 0xc2, 0x3f, 0x04, 0xf1, 0x52, 0x20, 0x5b, 0xf7, 0xf4, 0x4d, 0xbe, 0x3e, + 0xd6, 0xf1, 0x44, 0x17, 0x2f, 0xfe, 0x3a, 0x28, 0x48, 0x76, 0x3e, 0x05, 0x7d, 0x8d, 0xc1, 0xd7, + 0xac, 0xf5, 0xd8, 0x1b, 0xc2, 0x0f, 0x4d, 0x7e, 0xc3, 0x0a, 0x62, 0xe7, 0x07, 0x65, 0xad, 0xc9, + 0x8f, 0x5d, 0x07, 0xaf, 0x56, 0xaf, 0x83, 0xb7, 0x1e, 0x1b, 0x77, 0xb5, 0x78, 0x59, 0xfc, 0x5d, + 0x61, 0x63, 0x29, 0xab, 0x35, 0x3c, 0x2c, 0x06, 0xd0, 0xb8, 0x4d, 0x7f, 0x72, 0x7b, 0xf1, 0x23, + 0x92, 0x27, 0x83, 0xff, 0x02, 0x60, 0xc9, 0x5c, 0x13, 0xed, 0x76, 0x31, 0xda, 0x7a, 0xc1, 0xad, + 0xc3, 0xa3, 0x3f, 0x76, 0x67, 0x5e, 0x7a, 0x9e, 0xbd, 0xec, 0xb8, 0x61, 0xb0, 0xcf, 0x1c, 0x79, + 0x4c, 0xdc, 0x30, 0x99, 0x27, 0x29, 0x91, 0xa4, 0xf4, 0x6b, 0xff, 0xc7, 0xff, 0x38, 0x7c, 0x59, + 0xe5, 0xb2, 0xcf, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb3, 0xec, 0xbb, 0xdf, 0x5d, 0x14, 0x00, + 0x00, } diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 18b6c89dae0..105f8feb41d 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -169,8 +169,7 @@ message JSONSchema { string title = 5; string description = 6; string default = 7; - // field 8 is reserved for 'readOnly', which has an OpenAPI v2-specific meaning and is defined there. - reserved 8; + bool read_only = 8; // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in favor of 'example' field. reserved 9; double multiple_of = 10; From 920e58b16c65cbfbf16ae9304f1a45f738c2de37 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 1 Mar 2019 16:04:05 +0000 Subject: [PATCH 0125/1518] Generate changelog for 1.8.0 (#883) --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7cc4cb3def..70911432dd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,46 @@ # Change Log +## [v1.8.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.0) (2019-03-01) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.7.0...v1.8.0) + +**Implemented enhancements:** + +- Cleaner Swagger-generated schema names \(omitting prefixes\) [\#877](https://github.com/grpc-ecosystem/grpc-gateway/issues/877) +- Support swagger annotations for default and required fields [\#851](https://github.com/grpc-ecosystem/grpc-gateway/issues/851) +- Support go modules [\#755](https://github.com/grpc-ecosystem/grpc-gateway/issues/755) + +**Fixed bugs:** + +- inconsistent identifier capitalization between protoc-gen-go and protoc-gen-grpc-gateway [\#683](https://github.com/grpc-ecosystem/grpc-gateway/issues/683) + +**Closed issues:** + +- Bazel incompatible changes [\#873](https://github.com/grpc-ecosystem/grpc-gateway/issues/873) +- Swagger has not existed for four years [\#872](https://github.com/grpc-ecosystem/grpc-gateway/issues/872) +- Improve README with AWS API Gateway findings [\#868](https://github.com/grpc-ecosystem/grpc-gateway/issues/868) +- swagger error [\#867](https://github.com/grpc-ecosystem/grpc-gateway/issues/867) +- A question about generating file protoc-gen-grpc-gateway/gengateway/template.go [\#864](https://github.com/grpc-ecosystem/grpc-gateway/issues/864) +- Repeated field documentation is overwritten by fields comments [\#863](https://github.com/grpc-ecosystem/grpc-gateway/issues/863) +- Using dep to depend on specific revision of golang/protobuf is causing transative dependency problems for users [\#829](https://github.com/grpc-ecosystem/grpc-gateway/issues/829) +- Mac OS X - Note about your tutorial [\#787](https://github.com/grpc-ecosystem/grpc-gateway/issues/787) +- Returning 302 redirect as response [\#607](https://github.com/grpc-ecosystem/grpc-gateway/issues/607) + +**Merged pull requests:** + +- Read only support [\#882](https://github.com/grpc-ecosystem/grpc-gateway/pull/882) ([hypnoce](https://github.com/hypnoce)) +- Add fqn\_for\_swagger\_name option [\#881](https://github.com/grpc-ecosystem/grpc-gateway/pull/881) ([hypnoce](https://github.com/hypnoce)) +- go.mod: update grpc from v1.16.0 to v1.17.0 [\#880](https://github.com/grpc-ecosystem/grpc-gateway/pull/880) ([klim0v](https://github.com/klim0v)) +- Fix parameter names when using JSON names. [\#879](https://github.com/grpc-ecosystem/grpc-gateway/pull/879) ([brocaar](https://github.com/brocaar)) +- protoc-gen-grpc-gateway: use context package from stdlib [\#876](https://github.com/grpc-ecosystem/grpc-gateway/pull/876) ([simonpasquier](https://github.com/simonpasquier)) +- Run buildifer on WORKSPACE [\#875](https://github.com/grpc-ecosystem/grpc-gateway/pull/875) ([achew22](https://github.com/achew22)) +- Upgrade to rules\_go 0.17.0 [\#874](https://github.com/grpc-ecosystem/grpc-gateway/pull/874) ([achew22](https://github.com/achew22)) +- Switch to go modules [\#870](https://github.com/grpc-ecosystem/grpc-gateway/pull/870) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- 868 improving README with AWS API gateway findings [\#869](https://github.com/grpc-ecosystem/grpc-gateway/pull/869) ([fahernandez](https://github.com/fahernandez)) +- Updated Service, Method, Message Identifiers to be CamelCased [\#866](https://github.com/grpc-ecosystem/grpc-gateway/pull/866) ([waveywaves](https://github.com/waveywaves)) +- 863 adding swagger annotation support for enum and nested objects [\#865](https://github.com/grpc-ecosystem/grpc-gateway/pull/865) ([fahernandez](https://github.com/fahernandez)) +- Update CI badge link in documentation [\#862](https://github.com/grpc-ecosystem/grpc-gateway/pull/862) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- protoc-gen-swagger: add the package name to the tags field of each endpoint if the package name exists in the proto file [\#860](https://github.com/grpc-ecosystem/grpc-gateway/pull/860) ([zwcn](https://github.com/zwcn)) + ## [v1.7.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.7.0) (2019-01-23) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.4...v1.7.0) @@ -10,6 +51,7 @@ **Merged pull requests:** +- Generate changelog for 1.7.0 [\#858](https://github.com/grpc-ecosystem/grpc-gateway/pull/858) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Use github.com/golang/protobuf/descriptor ForMessage and fix CI from not rebasing [\#857](https://github.com/grpc-ecosystem/grpc-gateway/pull/857) ([mechinn](https://github.com/mechinn)) - marshal\_jsonpb: add check for slice sub types implementing proto.Message [\#856](https://github.com/grpc-ecosystem/grpc-gateway/pull/856) ([abice](https://github.com/abice)) - Added WithDisablePathLengthFallback option \(to fix issue \#447\) [\#855](https://github.com/grpc-ecosystem/grpc-gateway/pull/855) ([UladzimirTrehubenka](https://github.com/UladzimirTrehubenka)) diff --git a/Makefile b/Makefile index b141347681a..f25e14d7cde 100644 --- a/Makefile +++ b/Makefile @@ -193,7 +193,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.7.0 + --future-release=v1.8.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 4ce2f87e7b5ae447c9c599a0ed22456c82355f93 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 1 Mar 2019 23:46:58 +0000 Subject: [PATCH 0126/1518] CI: fix release builds (#884) * CI: fix release builds * Solve resty issue once and for all with sed magic --- .circleci/Dockerfile | 7 +------ .circleci/config.yml | 4 ++-- CONTRIBUTING.md | 2 +- Makefile | 1 + WORKSPACE | 10 ++++------ examples/clients/abe/BUILD.bazel | 2 +- examples/clients/abe/api_client.go | 2 +- examples/clients/echo/BUILD.bazel | 2 +- examples/clients/echo/api_client.go | 2 +- examples/clients/responsebody/BUILD.bazel | 2 +- examples/clients/responsebody/api_client.go | 2 +- examples/clients/unannotatedecho/BUILD.bazel | 2 +- examples/clients/unannotatedecho/api_client.go | 2 +- examples/proto/examplepb/BUILD.bazel | 1 - go.mod | 4 +--- go.sum | 4 ++-- 16 files changed, 20 insertions(+), 29 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 9285342ec0f..10ee4847f30 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:latest +FROM golang:1.11 ## Warm apt cache RUN apt-get update @@ -26,11 +26,6 @@ RUN apt-get install -y wget bzip2 && \ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && \ apt-get remove -y wget -# Install dep -RUN apt-get install -y wget && \ - wget -qO- https://raw.githubusercontent.com/golang/dep/master/install.sh | sh && \ - apt-get remove -y wget - # Clean up RUN apt-get autoremove -y && \ rm -rf /var/lib/apt/lists/* diff --git a/.circleci/config.yml b/.circleci/config.yml index cac9aa698e0..3a172fabb9c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -64,8 +64,8 @@ jobs: EOF - run: name: Check that Bazel BUILD files are up-to-date - command: 'test -z "$(bazel run //:gazelle_diff)" || - (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle_fix\`" >&2; exit 1)' + command: 'bazel run //:gazelle || + (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle\`" >&2; exit 1)' - run: name: Run tests with Bazel command: bazel test //... diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 04fc20639c9..0c4e8287ca8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle_fix; bazel run :buildifier' + l.gcr.io/google/bazel -c 'bazel run :gazelle; bazel run :buildifier' ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. diff --git a/Makefile b/Makefile index f25e14d7cde..7ca298961a7 100644 --- a/Makefile +++ b/Makefile @@ -177,6 +177,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) + find -type f -name *.go -exec sed -s -i 's;github.com/go-resty/resty;gopkg.in/resty.v1;g' {} + test: examples go test -race ... go test -race examples/integration -args -network=unix -endpoint=test.sock diff --git a/WORKSPACE b/WORKSPACE index 4ba250819c1..66c7f2061ef 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -21,12 +21,10 @@ go_rules_dependencies() go_register_toolchains() -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") gazelle_dependencies() -load("@bazel_gazelle//:deps.bzl", "go_repository") - # Also define in Gopkg.toml go_repository( name = "org_golang_google_genproto", @@ -43,9 +41,9 @@ go_repository( # Also define in Gopkg.toml go_repository( - name = "com_github_go_resty_resty", - commit = "f8815663de1e64d57cdd4ee9e2b2fa96977a030e", - importpath = "github.com/go-resty/resty", + name = "in_gopkg_resty_v1", + commit = "fa5875c0caa5c260ab78acec5a244215a730247f", + importpath = "gopkg.in/resty.v1", ) # Also define in Gopkg.toml diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 4d3c3546e93..4c28ed28d6a 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -30,6 +30,6 @@ go_library( "//examples/proto/examplepb:go_default_library", "//examples/proto/pathenum:go_default_library", "//runtime:go_default_library", - "@com_github_go_resty_resty//:go_default_library", + "@in_gopkg_resty_v1//:go_default_library", ], ) diff --git a/examples/clients/abe/api_client.go b/examples/clients/abe/api_client.go index bf3e21a9fb1..d6bc762e9bd 100644 --- a/examples/clients/abe/api_client.go +++ b/examples/clients/abe/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "github.com/go-resty/resty" + "gopkg.in/resty.v1" ) type APIClient struct { diff --git a/examples/clients/echo/BUILD.bazel b/examples/clients/echo/BUILD.bazel index 090b56aafab..97f3f317ba5 100644 --- a/examples/clients/echo/BUILD.bazel +++ b/examples/clients/echo/BUILD.bazel @@ -13,5 +13,5 @@ go_library( "examplepb_simple_message.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo", - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = ["@in_gopkg_resty_v1//:go_default_library"], ) diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index 7a517148026..d3facaa4633 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "github.com/go-resty/resty" + "gopkg.in/resty.v1" ) type APIClient struct { diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index e621bea6960..0f7ce09fc40 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -19,5 +19,5 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", visibility = ["//visibility:public"], - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = ["@in_gopkg_resty_v1//:go_default_library"], ) diff --git a/examples/clients/responsebody/api_client.go b/examples/clients/responsebody/api_client.go index 1f7354b61dc..1ac422ec895 100644 --- a/examples/clients/responsebody/api_client.go +++ b/examples/clients/responsebody/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "github.com/go-resty/resty" + "gopkg.in/resty.v1" ) type APIClient struct { diff --git a/examples/clients/unannotatedecho/BUILD.bazel b/examples/clients/unannotatedecho/BUILD.bazel index 611c6c7052d..c7c60503b9c 100644 --- a/examples/clients/unannotatedecho/BUILD.bazel +++ b/examples/clients/unannotatedecho/BUILD.bazel @@ -12,5 +12,5 @@ go_library( "unannotated_echo_service_api.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho", - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = ["@in_gopkg_resty_v1//:go_default_library"], ) diff --git a/examples/clients/unannotatedecho/api_client.go b/examples/clients/unannotatedecho/api_client.go index aa4c1f14e42..c898727e74b 100644 --- a/examples/clients/unannotatedecho/api_client.go +++ b/examples/clients/unannotatedecho/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "github.com/go-resty/resty" + "gopkg.in/resty.v1" ) type APIClient struct { diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index f819a9472dd..abff1fb6d90 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -66,7 +66,6 @@ go_library( "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", - "@org_golang_x_net//context:go_default_library", ], ) diff --git a/go.mod b/go.mod index 9284d871c75..e63e264f1b9 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/grpc-ecosystem/grpc-gateway require ( github.com/ghodss/yaml v1.0.0 - github.com/go-resty/resty v1.9.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.2.0 github.com/kr/pretty v0.1.0 // indirect @@ -12,7 +11,6 @@ require ( google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 google.golang.org/grpc v1.19.0 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + gopkg.in/resty.v1 v1.12.0 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect ) - -replace github.com/go-resty/resty => gopkg.in/resty.v1 v1.9.0 diff --git a/go.sum b/go.sum index 78191e96227..186bc4101fc 100644 --- a/go.sum +++ b/go.sum @@ -16,7 +16,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -36,7 +35,8 @@ google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/resty.v1 v1.9.0/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From 7d1918f9e926dafd000b917eb2caccbcf64477df Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 2 Mar 2019 00:04:28 +0000 Subject: [PATCH 0127/1518] Generate changelog for v1.8.1 (#887) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70911432dd2..0e7aa10b741 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## [v1.8.1-pre1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.1-pre1) (2019-03-01) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.0...v1.8.1-pre1) + +**Merged pull requests:** + +- CI: fix release builds [\#884](https://github.com/grpc-ecosystem/grpc-gateway/pull/884) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.8.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.0) (2019-03-01) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.7.0...v1.8.0) @@ -27,6 +34,7 @@ **Merged pull requests:** +- Generate changelog for 1.8.0 [\#883](https://github.com/grpc-ecosystem/grpc-gateway/pull/883) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Read only support [\#882](https://github.com/grpc-ecosystem/grpc-gateway/pull/882) ([hypnoce](https://github.com/hypnoce)) - Add fqn\_for\_swagger\_name option [\#881](https://github.com/grpc-ecosystem/grpc-gateway/pull/881) ([hypnoce](https://github.com/hypnoce)) - go.mod: update grpc from v1.16.0 to v1.17.0 [\#880](https://github.com/grpc-ecosystem/grpc-gateway/pull/880) ([klim0v](https://github.com/klim0v)) From cc6fc9477f5b080efc935111ada8bd854aac5b22 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 2 Mar 2019 18:42:12 +0000 Subject: [PATCH 0128/1518] README: Add some nicer looking badges (#890) I felt inspired by another repo I found. These badges look great! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d87501ec8f5..4dc4733234b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # grpc-gateway -[![CircleCI](https://circleci.com/gh/grpc-ecosystem/grpc-gateway.svg?style=svg)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) +[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). From 15c52a70637e8f318a90bd49519b22db92a34225 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 2 Mar 2019 20:17:21 +0000 Subject: [PATCH 0129/1518] Upgrade generator and runtime versions (#889) * Upgrade generator and runtime versions Go 1.12 Node 10.15.2 Protoc 3.7.0 Swagger Codegen 2.4.2 * Fix vet error discovered by Go 1.12 * Regenerate protofiles with protoc 3.7.0 * Update expected error in when specifying incorrect flags Apparently this message changed with Go 1.12 * Use explicit versioning of build environment in docker commands --- .circleci/Dockerfile | 6 +-- .circleci/README.md | 2 +- .circleci/config.yml | 12 ++--- CONTRIBUTING.md | 2 +- WORKSPACE | 8 ++-- examples/clients/abe/protobuf_field_mask.go | 2 +- examples/proto/examplepb/BUILD.bazel | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 20 ++++----- .../a_bit_of_everything.swagger.json | 2 +- examples/proto/examplepb/echo_service.pb.go | 8 ++-- .../proto/examplepb/flow_combination.pb.go | 14 +++--- .../examplepb/response_body_service.pb.go | 18 ++++---- examples/proto/examplepb/stream.pb.go | 4 +- examples/proto/examplepb/stream.swagger.json | 4 +- .../examplepb/unannotated_echo_service.pb.go | 6 +-- examples/proto/examplepb/wrappers.pb.go | 6 +-- examples/proto/pathenum/path_enum.pb.go | 10 ++--- examples/proto/sub/message.pb.go | 6 +-- examples/proto/sub2/message.pb.go | 6 +-- internal/stream_chunk.pb.go | 6 +-- .../descriptor/services_test.go | 4 +- protoc-gen-swagger/main_test.go | 6 +-- protoc-gen-swagger/options/annotations.pb.go | 4 +- protoc-gen-swagger/options/openapiv2.pb.go | 44 +++++++++---------- 24 files changed, 101 insertions(+), 101 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 10ee4847f30..1343053c0e6 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.11 +FROM golang:1.12 ## Warm apt cache RUN apt-get update @@ -12,7 +12,7 @@ RUN apt-get install -y openjdk-8-jre wget && \ ENV SWAGGER_CODEGEN="java -jar /usr/local/bin/swagger-codegen-cli.jar" # Install protoc -ENV PROTOC_VERSION=3.1.0 +ENV PROTOC_VERSION=3.7.0 RUN apt-get install -y wget unzip && \ wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ @@ -21,7 +21,7 @@ RUN apt-get install -y wget unzip && \ apt-get remove -y unzip wget # Install node -ENV NODE_VERSION=v6.1 +ENV NODE_VERSION=v10.15.2 RUN apt-get install -y wget bzip2 && \ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && \ apt-get remove -y wget diff --git a/.circleci/README.md b/.circleci/README.md index 6fe89053bbe..4aa13589bed 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -7,7 +7,7 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. Great, it should be as simple as thus (run from the root of the directory): ```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.12 \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' diff --git a/.circleci/config.yml b/.circleci/config.yml index 3a172fabb9c..964063f8f1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,14 @@ version: 2 jobs: build: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway environment: GLOG_logtostderr: '1' @@ -19,7 +19,7 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway steps: - checkout @@ -32,7 +32,7 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway steps: - checkout @@ -42,7 +42,7 @@ jobs: - run: git diff --exit-code lint: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway steps: - checkout @@ -76,7 +76,7 @@ jobs: when: always release: docker: - - image: jfbrandhorst/grpc-gateway-build-env + - image: jfbrandhorst/grpc-gateway-build-env:1.12 working_directory: /src/grpc-gateway steps: - checkout diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0c4e8287ca8..c2ac49c2bb1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,7 +24,7 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env \ +docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.12 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' diff --git a/WORKSPACE b/WORKSPACE index 66c7f2061ef..7c2f93819b5 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,14 +5,14 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "492c3ac68ed9dcf527a07e6a1b2dcbf199c6bf8b35517951467ac32e421c06c1", - urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.17.0/rules_go-0.17.0.tar.gz"], + sha256 = "6776d68ebb897625dead17ae510eac3d5f6342367327875210df44dbe2aeeb19", + urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.17.1/rules_go-0.17.1.tar.gz"], ) http_archive( name = "bazel_gazelle", - sha256 = "7949fc6cc17b5b191103e97481cf8889217263acf52e00b560683413af204fcb", - urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.16.0/bazel-gazelle-0.16.0.tar.gz"], + sha256 = "3c681998538231a2d24d0c07ed5a7658cb72bfb5fd4bf9911157c0e9ac6a2687", + urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.17.0/bazel-gazelle-0.17.0.tar.gz"], ) load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") diff --git a/examples/clients/abe/protobuf_field_mask.go b/examples/clients/abe/protobuf_field_mask.go index f30f2531765..2e21bc72874 100644 --- a/examples/clients/abe/protobuf_field_mask.go +++ b/examples/clients/abe/protobuf_field_mask.go @@ -10,7 +10,7 @@ package abe -// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, the existing repeated values in the target resource will be overwritten by the new values. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then the existing sub-message in the target resource is overwritten. Given the target message: f { b { d : 1 x : 2 } c : 1 } And an update message: f { b { d : 10 } } then if the field mask is: paths: \"f.b\" then the result will be: f { b { d : 10 } c : 1 } However, if the update mask was: paths: \"f.b.d\" then the result would be: f { b { d : 10 x : 2 } c : 1 } In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. +// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is duplicated or unmappable. type ProtobufFieldMask struct { // The set of field mask paths. diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index abff1fb6d90..f5aa149eb8e 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -40,7 +40,7 @@ go_proto_library( name = "examplepb_go_proto", compilers = [ "@io_bazel_rules_go//proto:go_grpc", - "//protoc-gen-grpc-gateway:go_gen_grpc_gateway", + "//protoc-gen-grpc-gateway:go_gen_grpc_gateway", # keep ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb", proto = ":examplepb_proto", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 4aee105fdf8..78a9e6610a0 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -512,7 +512,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{0, 0} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -581,7 +581,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{1} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -724,7 +724,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{2} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -763,7 +763,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{3} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -810,7 +810,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3, []int{4} + return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1574,10 +1574,10 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_355f53a87bca58c1) } -var fileDescriptor_a_bit_of_everything_13e92efa8be5f8b3 = []byte{ +var fileDescriptor_a_bit_of_everything_355f53a87bca58c1 = []byte{ // 3233 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0x5b, 0x6f, 0x1b, 0xc7, 0xb9, 0x5a, 0xae, 0xae, 0xa3, 0x1b, 0x35, 0xb2, 0x65, 0x8a, 0x56, 0xa2, 0x31, 0xed, 0x24, 0x6b, diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index b8639ec204f..f786e898f00 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1869,7 +1869,7 @@ "description": "The set of field mask paths." } }, - "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, the existing\nrepeated values in the target resource will be overwritten by the new values.\nNote that a repeated field is only allowed in the last position of a `paths`\nstring.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then the existing sub-message in the target resource is\noverwritten. Given the target message:\n\n f {\n b {\n d : 1\n x : 2\n }\n c : 1\n }\n\nAnd an update message:\n\n f {\n b {\n d : 10\n }\n }\n\nthen if the field mask is:\n\n paths: \"f.b\"\n\nthen the result will be:\n\n f {\n b {\n d : 10\n }\n c : 1\n }\n\nHowever, if the update mask was:\n\n paths: \"f.b.d\"\n\nthen the result would be:\n\n f {\n b {\n d : 10\n x : 2\n }\n c : 1\n }\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.", + "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, "subStringMessage": { diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index da8af13fbf9..5c1500fb2e5 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -46,7 +46,7 @@ func (m *Embedded) Reset() { *m = Embedded{} } func (m *Embedded) String() string { return proto.CompactTextString(m) } func (*Embedded) ProtoMessage() {} func (*Embedded) Descriptor() ([]byte, []int) { - return fileDescriptor_echo_service_c13a64d5f1f0c068, []int{0} + return fileDescriptor_echo_service_8fe0ac1ad649faf8, []int{0} } func (m *Embedded) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Embedded.Unmarshal(m, b) @@ -191,7 +191,7 @@ func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } func (*SimpleMessage) ProtoMessage() {} func (*SimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_echo_service_c13a64d5f1f0c068, []int{1} + return fileDescriptor_echo_service_8fe0ac1ad649faf8, []int{1} } func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleMessage.Unmarshal(m, b) @@ -572,10 +572,10 @@ var _EchoService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/echo_service.proto", fileDescriptor_echo_service_c13a64d5f1f0c068) + proto.RegisterFile("examples/proto/examplepb/echo_service.proto", fileDescriptor_echo_service_8fe0ac1ad649faf8) } -var fileDescriptor_echo_service_c13a64d5f1f0c068 = []byte{ +var fileDescriptor_echo_service_8fe0ac1ad649faf8 = []byte{ // 470 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, 0x14, 0xef, 0xd9, 0x6e, 0x9a, 0xbc, 0x08, 0x54, 0x9d, 0x40, 0x98, 0xb4, 0xa8, 0x91, 0xc5, 0x10, diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index 25e2b775e50..f50fe51ba5c 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -34,7 +34,7 @@ func (m *EmptyProto) Reset() { *m = EmptyProto{} } func (m *EmptyProto) String() string { return proto.CompactTextString(m) } func (*EmptyProto) ProtoMessage() {} func (*EmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_40371c0acedc1fc5, []int{0} + return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{0} } func (m *EmptyProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EmptyProto.Unmarshal(m, b) @@ -67,7 +67,7 @@ func (m *NonEmptyProto) Reset() { *m = NonEmptyProto{} } func (m *NonEmptyProto) String() string { return proto.CompactTextString(m) } func (*NonEmptyProto) ProtoMessage() {} func (*NonEmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_40371c0acedc1fc5, []int{1} + return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{1} } func (m *NonEmptyProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonEmptyProto.Unmarshal(m, b) @@ -119,7 +119,7 @@ func (m *UnaryProto) Reset() { *m = UnaryProto{} } func (m *UnaryProto) String() string { return proto.CompactTextString(m) } func (*UnaryProto) ProtoMessage() {} func (*UnaryProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_40371c0acedc1fc5, []int{2} + return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{2} } func (m *UnaryProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnaryProto.Unmarshal(m, b) @@ -159,7 +159,7 @@ func (m *NestedProto) Reset() { *m = NestedProto{} } func (m *NestedProto) String() string { return proto.CompactTextString(m) } func (*NestedProto) ProtoMessage() {} func (*NestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_40371c0acedc1fc5, []int{3} + return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{3} } func (m *NestedProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NestedProto.Unmarshal(m, b) @@ -211,7 +211,7 @@ func (m *SingleNestedProto) Reset() { *m = SingleNestedProto{} } func (m *SingleNestedProto) String() string { return proto.CompactTextString(m) } func (*SingleNestedProto) ProtoMessage() {} func (*SingleNestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_40371c0acedc1fc5, []int{4} + return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{4} } func (m *SingleNestedProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleNestedProto.Unmarshal(m, b) @@ -791,10 +791,10 @@ var _FlowCombination_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/flow_combination.proto", fileDescriptor_flow_combination_40371c0acedc1fc5) + proto.RegisterFile("examples/proto/examplepb/flow_combination.proto", fileDescriptor_flow_combination_63ace3110e4bd00b) } -var fileDescriptor_flow_combination_40371c0acedc1fc5 = []byte{ +var fileDescriptor_flow_combination_63ace3110e4bd00b = []byte{ // 655 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xbf, 0x8f, 0x12, 0x41, 0x14, 0xc7, 0xf3, 0xb8, 0xc4, 0xe4, 0x86, 0xfb, 0xc1, 0x2d, 0x06, 0x81, 0xc3, 0xe3, 0x6e, 0xbc, diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index ba11d58bb78..ed7ead481db 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -50,7 +50,7 @@ func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) } func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2, 0, 0} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2, 0, 0} } type ResponseBodyIn struct { @@ -64,7 +64,7 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{0} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{0} } func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) @@ -102,7 +102,7 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{1} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{1} } func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) @@ -140,7 +140,7 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{1, 0} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{1, 0} } func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) @@ -178,7 +178,7 @@ func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut) ProtoMessage() {} func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2} } func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) @@ -217,7 +217,7 @@ func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedRespon func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{2, 0} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2, 0} } func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) @@ -262,7 +262,7 @@ func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseStrings) ProtoMessage() {} func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_811d1d707fc0d3aa, []int{3} + return fileDescriptor_response_body_service_d3778d99bb1173be, []int{3} } func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) @@ -438,10 +438,10 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_811d1d707fc0d3aa) + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_d3778d99bb1173be) } -var fileDescriptor_response_body_service_811d1d707fc0d3aa = []byte{ +var fileDescriptor_response_body_service_d3778d99bb1173be = []byte{ // 441 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, diff --git a/examples/proto/examplepb/stream.pb.go b/examples/proto/examplepb/stream.pb.go index cc0c274c8ea..8c1cd2e920b 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/proto/examplepb/stream.pb.go @@ -258,10 +258,10 @@ var _StreamService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/stream.proto", fileDescriptor_stream_0929397c5d8d3331) + proto.RegisterFile("examples/proto/examplepb/stream.proto", fileDescriptor_stream_44f32a4fe5bf6004) } -var fileDescriptor_stream_0929397c5d8d3331 = []byte{ +var fileDescriptor_stream_44f32a4fe5bf6004 = []byte{ // 319 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xb1, 0x4e, 0xc3, 0x30, 0x10, 0x86, 0x15, 0x40, 0x08, 0x8c, 0x58, 0x3c, 0x30, 0x04, 0xa4, 0x42, 0x05, 0xa2, 0x30, 0xd8, diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 4418cbb5ce3..259900180bb 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -330,7 +330,7 @@ "properties": { "type_url": { "type": "string", - "description": "A URL/resource name whose content describes the type of the\nserialized protocol buffer message.\n\nFor URLs which use the scheme `http`, `https`, or no scheme, the\nfollowing restrictions and interpretations apply:\n\n* If no scheme is provided, `https` is assumed.\n* The last segment of the URL's path must represent the fully\n qualified name of the type (as in `path/google.protobuf.Duration`).\n The name should be in a canonical form (e.g., leading \".\" is\n not accepted).\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, "value": { "type": "string", @@ -338,7 +338,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "runtimeStreamError": { "type": "object", diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 28f0d7311d0..73699e5c602 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -49,7 +49,7 @@ func (m *UnannotatedSimpleMessage) Reset() { *m = UnannotatedSimpleMessa func (m *UnannotatedSimpleMessage) String() string { return proto.CompactTextString(m) } func (*UnannotatedSimpleMessage) ProtoMessage() {} func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_unannotated_echo_service_33987b03bf51a339, []int{0} + return fileDescriptor_unannotated_echo_service_ca2b904682e29806, []int{0} } func (m *UnannotatedSimpleMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnannotatedSimpleMessage.Unmarshal(m, b) @@ -245,10 +245,10 @@ var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_unannotated_echo_service_33987b03bf51a339) + proto.RegisterFile("examples/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_unannotated_echo_service_ca2b904682e29806) } -var fileDescriptor_unannotated_echo_service_33987b03bf51a339 = []byte{ +var fileDescriptor_unannotated_echo_service_ca2b904682e29806 = []byte{ // 268 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index 0b0616ee60c..48462f92b92 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -45,7 +45,7 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_3d2e9c7780d635b4, []int{0} + return fileDescriptor_wrappers_1614a2b17737abd3, []int{0} } func (m *Wrappers) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Wrappers.Unmarshal(m, b) @@ -535,10 +535,10 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_3d2e9c7780d635b4) + proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_1614a2b17737abd3) } -var fileDescriptor_wrappers_3d2e9c7780d635b4 = []byte{ +var fileDescriptor_wrappers_1614a2b17737abd3 = []byte{ // 578 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, diff --git a/examples/proto/pathenum/path_enum.pb.go b/examples/proto/pathenum/path_enum.pb.go index 6de95037484..a3daa1953d4 100644 --- a/examples/proto/pathenum/path_enum.pb.go +++ b/examples/proto/pathenum/path_enum.pb.go @@ -38,7 +38,7 @@ func (x PathEnum) String() string { return proto.EnumName(PathEnum_name, int32(x)) } func (PathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_path_enum_f14abf5268452f40, []int{0} + return fileDescriptor_path_enum_802d5f52757a97bd, []int{0} } type MessagePathEnum_NestedPathEnum int32 @@ -61,7 +61,7 @@ func (x MessagePathEnum_NestedPathEnum) String() string { return proto.EnumName(MessagePathEnum_NestedPathEnum_name, int32(x)) } func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_path_enum_f14abf5268452f40, []int{0, 0} + return fileDescriptor_path_enum_802d5f52757a97bd, []int{0, 0} } type MessagePathEnum struct { @@ -74,7 +74,7 @@ func (m *MessagePathEnum) Reset() { *m = MessagePathEnum{} } func (m *MessagePathEnum) String() string { return proto.CompactTextString(m) } func (*MessagePathEnum) ProtoMessage() {} func (*MessagePathEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_path_enum_f14abf5268452f40, []int{0} + return fileDescriptor_path_enum_802d5f52757a97bd, []int{0} } func (m *MessagePathEnum) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessagePathEnum.Unmarshal(m, b) @@ -101,10 +101,10 @@ func init() { } func init() { - proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_path_enum_f14abf5268452f40) + proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_path_enum_802d5f52757a97bd) } -var fileDescriptor_path_enum_f14abf5268452f40 = []byte{ +var fileDescriptor_path_enum_802d5f52757a97bd = []byte{ // 175 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4f, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, diff --git a/examples/proto/sub/message.pb.go b/examples/proto/sub/message.pb.go index 81612434029..cc5381674f7 100644 --- a/examples/proto/sub/message.pb.go +++ b/examples/proto/sub/message.pb.go @@ -29,7 +29,7 @@ func (m *StringMessage) Reset() { *m = StringMessage{} } func (m *StringMessage) String() string { return proto.CompactTextString(m) } func (*StringMessage) ProtoMessage() {} func (*StringMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_message_c180d3d1a4bbfe02, []int{0} + return fileDescriptor_message_6a35c3d524a65df7, []int{0} } func (m *StringMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StringMessage.Unmarshal(m, b) @@ -61,10 +61,10 @@ func init() { } func init() { - proto.RegisterFile("examples/proto/sub/message.proto", fileDescriptor_message_c180d3d1a4bbfe02) + proto.RegisterFile("examples/proto/sub/message.proto", fileDescriptor_message_6a35c3d524a65df7) } -var fileDescriptor_message_c180d3d1a4bbfe02 = []byte{ +var fileDescriptor_message_6a35c3d524a65df7 = []byte{ // 114 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0xd2, 0xcf, diff --git a/examples/proto/sub2/message.pb.go b/examples/proto/sub2/message.pb.go index 6819b67ae3c..586c6440b98 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/proto/sub2/message.pb.go @@ -29,7 +29,7 @@ func (m *IdMessage) Reset() { *m = IdMessage{} } func (m *IdMessage) String() string { return proto.CompactTextString(m) } func (*IdMessage) ProtoMessage() {} func (*IdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_message_1fa155de06adc960, []int{0} + return fileDescriptor_message_9619dbc3ad374621, []int{0} } func (m *IdMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IdMessage.Unmarshal(m, b) @@ -61,10 +61,10 @@ func init() { } func init() { - proto.RegisterFile("examples/proto/sub2/message.proto", fileDescriptor_message_1fa155de06adc960) + proto.RegisterFile("examples/proto/sub2/message.proto", fileDescriptor_message_9619dbc3ad374621) } -var fileDescriptor_message_1fa155de06adc960 = []byte{ +var fileDescriptor_message_9619dbc3ad374621 = []byte{ // 130 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, diff --git a/internal/stream_chunk.pb.go b/internal/stream_chunk.pb.go index c6cfb5c1c02..8858f069046 100644 --- a/internal/stream_chunk.pb.go +++ b/internal/stream_chunk.pb.go @@ -36,7 +36,7 @@ func (m *StreamError) Reset() { *m = StreamError{} } func (m *StreamError) String() string { return proto.CompactTextString(m) } func (*StreamError) ProtoMessage() {} func (*StreamError) Descriptor() ([]byte, []int) { - return fileDescriptor_stream_chunk_cac6867f460b29a5, []int{0} + return fileDescriptor_stream_chunk_a2afb657504565d7, []int{0} } func (m *StreamError) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamError.Unmarshal(m, b) @@ -96,10 +96,10 @@ func init() { } func init() { - proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_stream_chunk_cac6867f460b29a5) + proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_stream_chunk_a2afb657504565d7) } -var fileDescriptor_stream_chunk_cac6867f460b29a5 = []byte{ +var fileDescriptor_stream_chunk_a2afb657504565d7 = []byte{ // 223 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x41, 0x4e, 0xc3, 0x30, 0x10, 0x45, 0x15, 0x4a, 0x69, 0x3b, 0xd9, 0x45, 0x5d, 0x18, 0xba, 0x20, 0x62, 0x95, 0x95, 0x23, diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index 355ce6099fc..1ccb8fbef0a 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -99,11 +99,11 @@ func testExtractServices(t *testing.T, input []*descriptor.FileDescriptorProto, } for ; k < len(meth.Bindings); k++ { got := meth.Bindings[k] - t.Errorf("svcs[%d].Methods[%d].Bindings[%d] = %q; want it to be missing; input = %v", i, j, k, got, input) + t.Errorf("svcs[%d].Methods[%d].Bindings[%d] = %v; want it to be missing; input = %v", i, j, k, got, input) } for ; k < len(wantMeth.Bindings); k++ { want := wantMeth.Bindings[k] - t.Errorf("svcs[%d].Methods[%d].Bindings[%d] missing; want %q; input = %v", i, j, k, want, input) + t.Errorf("svcs[%d].Methods[%d].Bindings[%d] missing; want %v; input = %v", i, j, k, want, input) } } for ; j < len(svc.Methods); j++ { diff --git a/protoc-gen-swagger/main_test.go b/protoc-gen-swagger/main_test.go index 2c6eec129d4..7dcbf0c0bb5 100644 --- a/protoc-gen-swagger/main_test.go +++ b/protoc-gen-swagger/main_test.go @@ -88,7 +88,7 @@ func TestParseReqParam(t *testing.T) { name: "Test 8", expected: map[string]string{}, request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", - expectedError: errors.New(`Cannot set flag allow_repeated_fields_in_body=3: strconv.ParseBool: parsing "3": invalid syntax`), + expectedError: errors.New(`Cannot set flag allow_repeated_fields_in_body=3: parse error`), allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "", importPathV: "", mergeFileNameV: "apidocs", }, @@ -96,7 +96,7 @@ func TestParseReqParam(t *testing.T) { name: "Test 9", expected: map[string]string{}, request: "include_package_in_tags=3", - expectedError: errors.New(`Cannot set flag include_package_in_tags=3: strconv.ParseBool: parsing "3": invalid syntax`), + expectedError: errors.New(`Cannot set flag include_package_in_tags=3: parse error`), allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, @@ -104,7 +104,7 @@ func TestParseReqParam(t *testing.T) { name: "Test 10", expected: map[string]string{}, request: "fqn_for_swagger_name=3", - expectedError: errors.New(`Cannot set flag fqn_for_swagger_name=3: strconv.ParseBool: parsing "3": invalid syntax`), + expectedError: errors.New(`Cannot set flag fqn_for_swagger_name=3: parse error`), allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, useFQNForSwaggerNameV: false, fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", }, diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index a743078b45c..9fc282bb7bd 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -73,10 +73,10 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_annotations_24d91a1b8877b604) + proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_annotations_8378bd63c2853a5a) } -var fileDescriptor_annotations_24d91a1b8877b604 = []byte{ +var fileDescriptor_annotations_8378bd63c2853a5a = []byte{ // 346 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xea, 0x40, 0x14, 0xc5, 0xc3, 0xe6, 0xe5, 0xa5, 0xef, 0xa9, 0x58, 0x37, 0x86, 0xf8, 0x87, 0x9d, 0xc6, 0xc0, diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index dd6cfd5d072..8bf40b05e6a 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{0, 0} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{8, 0} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 0} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 1} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11, 2} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -210,7 +210,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{0} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -333,7 +333,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{1} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -450,7 +450,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{2} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -505,7 +505,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{3} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -585,7 +585,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{4} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -644,7 +644,7 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{5} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{5} } func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) @@ -696,7 +696,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{6} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -750,7 +750,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{7} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -854,7 +854,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{8} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -1040,7 +1040,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{9} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1094,7 +1094,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{10} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1172,7 +1172,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{11} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1274,7 +1274,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{12} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1319,7 +1319,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{12, 0} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1364,7 +1364,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_11f010f5fecc79bc, []int{13} + return fileDescriptor_openapiv2_29cfb415de848cf5, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1420,10 +1420,10 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_11f010f5fecc79bc) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_29cfb415de848cf5) } -var fileDescriptor_openapiv2_11f010f5fecc79bc = []byte{ +var fileDescriptor_openapiv2_29cfb415de848cf5 = []byte{ // 1777 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, From 87b57f514b555601a094c7d95aafcffe0ba51961 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Mon, 4 Mar 2019 17:32:43 +0100 Subject: [PATCH 0130/1518] bazel: Use new ProtoInfo provider The old `.proto` provider will be removed in a future Bazel release: https://github.com/bazelbuild/bazel/issues/7152 The Bazel build now requires Bazel 0.22.0 or newer. --- protoc-gen-swagger/defs.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 186178d8892..75a055530f6 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -67,7 +67,7 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action return swagger_files def _proto_gen_swagger_impl(ctx): - proto = ctx.attr.proto.proto + proto = ctx.attr.proto[ProtoInfo] grpc_api_configuration = ctx.file.grpc_api_configuration return [DefaultInfo( From be1271593384d22bab91640c2f836b2c86119444 Mon Sep 17 00:00:00 2001 From: Alok Parlikar Date: Wed, 6 Mar 2019 22:59:20 +0530 Subject: [PATCH 0131/1518] Disable IOReaderFactory for streaming requests (#896) An IOReaderFactory was being used to wrap request body for client/bidi streaming requests. This was causing the requests to be fully buffered before being sent to the grpc server, thereby breaking streaming. This commit changes that to directly use request body. Fixes #894 --- .../proto/examplepb/flow_combination.pb.gw.go | 12 ++---------- examples/proto/examplepb/stream.pb.gw.go | 12 ++---------- protoc-gen-grpc-gateway/gengateway/template.go | 16 ++++------------ .../gengateway/template_test.go | 9 +++------ 4 files changed, 11 insertions(+), 38 deletions(-) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 70844205596..b34314fe7d1 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -61,11 +61,7 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) for { var protoReq EmptyProto err = dec.Decode(&protoReq) @@ -106,11 +102,7 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, berr - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) handleSend := func() error { var protoReq EmptyProto err := dec.Decode(&protoReq) diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index fb4c8fcae45..afda301f0ca 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -37,11 +37,7 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) for { var protoReq ABitOfEverything err = dec.Decode(&protoReq) @@ -99,11 +95,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, berr - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) handleSend := func() error { var protoReq sub.StringMessage err := dec.Decode(&protoReq) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 12c02ae9f9f..d376ccdb255 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -236,11 +236,7 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) for { var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} err = dec.Decode(&protoReq) @@ -303,8 +299,8 @@ var ( return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask - } - } {{end}} + } + } {{end}} {{end}} {{end}} {{if .PathParams}} @@ -378,11 +374,7 @@ var ( grpclog.Infof("Failed to start streaming: %v", err) return nil, metadata, err } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, berr - } - dec := marshaler.NewDecoder(newReader()) + dec := marshaler.NewDecoder(req.Body) handleSend := func() error { var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} err := dec.Decode(&protoReq) diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index ba941d095dd..5e287a680d1 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -391,9 +391,6 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := spec.sigWant; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `marshaler.NewDecoder(newReader()`; !strings.Contains(got, want) { - t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) - } if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } @@ -482,7 +479,7 @@ func TestAllowPatchFeature(t *testing.T) { } } -func TestIdentifierCapitalization(t *testing.T){ +func TestIdentifierCapitalization(t *testing.T) { msgdesc1 := &protodescriptor.DescriptorProto{ Name: proto.String("Exam_pleRequest"), } @@ -492,12 +489,12 @@ func TestIdentifierCapitalization(t *testing.T){ meth1 := &protodescriptor.MethodDescriptorProto{ Name: proto.String("ExampleGe2t"), InputType: proto.String("Exam_pleRequest"), - OutputType: proto.String("example_response"), + OutputType: proto.String("example_response"), } meth2 := &protodescriptor.MethodDescriptorProto{ Name: proto.String("Exampl_eGet"), InputType: proto.String("Exam_pleRequest"), - OutputType: proto.String("example_response"), + OutputType: proto.String("example_response"), } svc := &protodescriptor.ServiceDescriptorProto{ Name: proto.String("Example"), From c0317cd7eb831e6a2548b61caba66c174beff661 Mon Sep 17 00:00:00 2001 From: Fabian Hernandez Date: Thu, 7 Mar 2019 03:31:47 -0600 Subject: [PATCH 0132/1518] Fix problem while generating swagger documentation for enum messages containing a dot (#898) Fixes #898 --- .../clients/abe/a_bit_of_everything_nested.go | 1 + .../abe/a_bit_of_everything_service_api.go | 4 +- .../proto/examplepb/a_bit_of_everything.pb.go | 437 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 4 +- .../a_bit_of_everything.swagger.json | 7 +- examples/proto/examplepb/stream.swagger.json | 3 +- protoc-gen-swagger/genswagger/template.go | 6 +- 7 files changed, 235 insertions(+), 227 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_nested.go b/examples/clients/abe/a_bit_of_everything_nested.go index 095e8c5f118..c5b1dc53c75 100644 --- a/examples/clients/abe/a_bit_of_everything_nested.go +++ b/examples/clients/abe/a_bit_of_everything_nested.go @@ -18,5 +18,6 @@ type ABitOfEverythingNested struct { Amount int64 `json:"amount,omitempty"` + // DeepEnum description. Ok NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 5cbf25f0071..ce7c5d817ba 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -526,7 +526,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param floatValue Float value field * @param singleNestedName name is nested field. * @param singleNestedAmount - * @param singleNestedOk - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param singleNestedOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param doubleValue * @param int64Value * @param uint64Value @@ -554,7 +554,7 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param repeatedStringAnnotation Repeated string title. Repeated string description. * @param nestedAnnotationName name is nested field. * @param nestedAnnotationAmount - * @param nestedAnnotationOk - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @return *interface{} */ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*interface{}, *APIResponse, error) { diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 78a9e6610a0..7b8ee6672ef 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -500,8 +500,9 @@ func _ABitOfEverything_OneofSizer(msg proto.Message) (n int) { // Nested is nested type. type ABitOfEverything_Nested struct { // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // DeepEnum comment. Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -512,7 +513,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{0, 0} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -581,7 +582,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{1} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -724,7 +725,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{2} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -763,7 +764,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{3} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -810,7 +811,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_355f53a87bca58c1, []int{4} + return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1574,212 +1575,212 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_355f53a87bca58c1) -} - -var fileDescriptor_a_bit_of_everything_355f53a87bca58c1 = []byte{ - // 3233 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0x5b, 0x6f, 0x1b, 0xc7, - 0xb9, 0x5a, 0xae, 0xae, 0xa3, 0x1b, 0x35, 0xb2, 0x65, 0x8a, 0x56, 0xa2, 0x31, 0xed, 0x24, 0x6b, - 0xc6, 0xe4, 0x4a, 0x2b, 0xd9, 0x91, 0x19, 0x24, 0x3e, 0xa4, 0x2e, 0xb6, 0x62, 0x5b, 0x96, 0xd7, - 0x8e, 0x4f, 0xe0, 0xd8, 0x11, 0x96, 0xe4, 0x50, 0x5c, 0x8b, 0xbb, 0xb3, 0xd9, 0x9d, 0x95, 0xcd, - 0xa3, 0xc3, 0x73, 0xd2, 0x0b, 0x5a, 0xb4, 0x79, 0x28, 0xc0, 0xb4, 0x0f, 0xbd, 0xa0, 0xbf, 0x20, - 0xaf, 0x7d, 0x0a, 0xd0, 0xcb, 0x43, 0x9f, 0xfa, 0xe6, 0x16, 0xfd, 0x03, 0xed, 0x43, 0x9f, 0x0a, - 0x14, 0x05, 0x02, 0x14, 0x45, 0x8b, 0x62, 0x67, 0x77, 0xc9, 0xdd, 0x25, 0x69, 0x99, 0x76, 0x90, - 0x17, 0x69, 0x67, 0xe6, 0xbb, 0x7f, 0xdf, 0x7c, 0x97, 0x21, 0x90, 0xf0, 0x13, 0x45, 0x33, 0x6a, - 0xd8, 0x12, 0x0d, 0x93, 0x50, 0x22, 0x7a, 0x4b, 0xa3, 0x28, 0x2a, 0x7b, 0x45, 0x95, 0xee, 0x91, - 0xca, 0x1e, 0x3e, 0xc4, 0x66, 0x9d, 0x56, 0x55, 0x7d, 0x3f, 0xcb, 0x60, 0xe0, 0xe2, 0xbe, 0x69, - 0x94, 0xb2, 0xfb, 0x0a, 0xc5, 0x8f, 0x95, 0x7a, 0xd6, 0x27, 0x90, 0x6d, 0xa1, 0x26, 0x17, 0xf6, - 0x09, 0xd9, 0xaf, 0x61, 0x51, 0x31, 0x54, 0x51, 0xd1, 0x75, 0x42, 0x15, 0xaa, 0x12, 0xdd, 0x72, - 0xd1, 0x93, 0xc8, 0x3b, 0x65, 0xab, 0xa2, 0x5d, 0x11, 0x2b, 0x2a, 0xae, 0x95, 0xf7, 0x34, 0xc5, - 0x3a, 0xf0, 0x20, 0x4e, 0x47, 0x21, 0xb0, 0x66, 0xd0, 0xba, 0x77, 0xf8, 0x6a, 0xf4, 0xb0, 0x6c, - 0x9b, 0x8c, 0xbe, 0x77, 0xfe, 0x46, 0x44, 0x23, 0x43, 0xa1, 0x55, 0xac, 0xdb, 0x1a, 0xfb, 0xd8, - 0x73, 0xbe, 0x7c, 0x39, 0x22, 0x80, 0x96, 0x5d, 0x14, 0x35, 0x6c, 0x59, 0xca, 0x3e, 0xf6, 0x20, - 0xce, 0x74, 0x42, 0x48, 0x11, 0x90, 0xc5, 0xa8, 0x34, 0x54, 0xd5, 0xb0, 0x45, 0x15, 0xcd, 0xf0, - 0x00, 0x2e, 0xb0, 0x7f, 0xa5, 0xcc, 0x3e, 0xd6, 0x33, 0xd6, 0x63, 0x65, 0x7f, 0x1f, 0x9b, 0x22, - 0x31, 0x98, 0x3d, 0x3a, 0x6d, 0x93, 0xfa, 0x67, 0x12, 0xc4, 0xf3, 0x05, 0x95, 0xde, 0xaa, 0x6c, - 0xb6, 0xac, 0x0e, 0x1f, 0x82, 0x49, 0x4b, 0xd5, 0xf7, 0x6b, 0x78, 0x4f, 0xc7, 0x16, 0xc5, 0xe5, - 0xc4, 0x3c, 0xe2, 0x84, 0x71, 0x69, 0x2d, 0x7b, 0x8c, 0x1f, 0xb2, 0x51, 0x4a, 0xd9, 0x1d, 0x86, - 0x2f, 0x4f, 0xb8, 0xe4, 0xdc, 0x15, 0xac, 0x82, 0x41, 0xdb, 0x56, 0xcb, 0x09, 0x0e, 0x71, 0xc2, - 0x58, 0xe1, 0x6e, 0x33, 0x7f, 0xfb, 0x13, 0x8e, 0xfb, 0x3e, 0x77, 0xfd, 0x43, 0x25, 0x53, 0xc9, - 0x67, 0xb6, 0x96, 0x32, 0x97, 0x1f, 0x1e, 0xad, 0x35, 0x32, 0xc1, 0xe5, 0x6a, 0x3f, 0xcb, 0x65, - 0xa9, 0x21, 0x33, 0x0e, 0x70, 0x17, 0x0c, 0x7b, 0x1a, 0xc4, 0x10, 0xff, 0x52, 0x1a, 0x78, 0x74, - 0xe0, 0x7b, 0x60, 0xbc, 0x52, 0x23, 0x0a, 0xdd, 0x3b, 0x54, 0x6a, 0x36, 0x4e, 0xf0, 0x88, 0x13, - 0x62, 0x85, 0xf3, 0xcd, 0xfc, 0xeb, 0xd2, 0xcc, 0x96, 0xb3, 0x8f, 0xd8, 0x3e, 0x62, 0x11, 0x96, - 0xe3, 0x97, 0xb2, 0xd2, 0x53, 0x2e, 0x88, 0x20, 0x03, 0xb6, 0xb8, 0xe7, 0x7c, 0xc3, 0x33, 0x60, - 0xa2, 0x4c, 0xec, 0x62, 0x0d, 0x7b, 0xc4, 0x06, 0x11, 0x27, 0x70, 0xf2, 0xb8, 0xbb, 0xe7, 0x82, - 0x2c, 0x82, 0x71, 0x55, 0xa7, 0x97, 0x56, 0x3d, 0x88, 0x21, 0xc4, 0x09, 0xbc, 0x0c, 0xd8, 0x56, - 0x8b, 0x86, 0x1d, 0x84, 0x18, 0x46, 0x9c, 0x30, 0x28, 0x8f, 0xdb, 0x01, 0x10, 0x97, 0xc6, 0x8a, - 0xe4, 0x41, 0x8c, 0x20, 0x4e, 0x18, 0x62, 0x34, 0x56, 0x24, 0x17, 0xe0, 0x2c, 0x98, 0xac, 0xa8, - 0x4f, 0x70, 0xb9, 0x45, 0x64, 0x14, 0x71, 0xc2, 0xb0, 0x3c, 0xe1, 0x6d, 0x86, 0x81, 0x5a, 0x74, - 0xc6, 0x10, 0x27, 0x8c, 0x78, 0x40, 0x3e, 0xa5, 0x57, 0x00, 0x28, 0x12, 0x52, 0xf3, 0x20, 0x00, - 0xe2, 0x84, 0x51, 0x79, 0xcc, 0xd9, 0x69, 0x09, 0x6b, 0x51, 0x53, 0xd5, 0xf7, 0x3d, 0x80, 0x71, - 0x27, 0x00, 0xe4, 0x71, 0x77, 0xaf, 0x25, 0x6c, 0xb1, 0x4e, 0xb1, 0xe5, 0x41, 0xbc, 0x82, 0x38, - 0x61, 0x42, 0x06, 0x6c, 0x2b, 0xa4, 0x70, 0x4b, 0x8c, 0x49, 0xc4, 0x09, 0x93, 0xae, 0xc2, 0xbe, - 0x14, 0xd7, 0x01, 0x70, 0x6e, 0x9d, 0x07, 0x30, 0x85, 0x38, 0x61, 0x4a, 0xba, 0x70, 0xac, 0xe7, - 0x77, 0x6c, 0x0d, 0x9b, 0x6a, 0x69, 0x53, 0xb7, 0x35, 0x79, 0xcc, 0xc1, 0x77, 0x89, 0xed, 0x82, - 0xe9, 0xd6, 0x3d, 0xf6, 0x28, 0xbe, 0xca, 0x28, 0x0a, 0x3d, 0x28, 0xfa, 0xd7, 0x3f, 0xbb, 0xab, - 0xd0, 0x2a, 0xa3, 0x36, 0x69, 0x78, 0x5f, 0x2e, 0x45, 0x0b, 0xcc, 0xb9, 0xc1, 0xb4, 0x17, 0x25, - 0xbc, 0xc8, 0x08, 0xbf, 0x7b, 0x1c, 0xe1, 0x9b, 0x6e, 0x42, 0xf0, 0xe9, 0x7b, 0x21, 0xda, 0x62, - 0x37, 0xab, 0x87, 0xd6, 0x2e, 0xd3, 0xd7, 0xc0, 0x94, 0x15, 0xf6, 0xdf, 0x34, 0xe2, 0x84, 0x69, - 0x79, 0xd2, 0x0a, 0x39, 0xb0, 0x05, 0xd6, 0x8a, 0x85, 0x38, 0xe2, 0x84, 0xb8, 0x0f, 0x16, 0x88, - 0x3a, 0x2b, 0xe8, 0x84, 0x19, 0xc4, 0x09, 0x33, 0xf2, 0xb8, 0x15, 0x70, 0x82, 0x07, 0xd2, 0xa2, - 0x03, 0x11, 0x27, 0x40, 0x17, 0xc4, 0xa7, 0x22, 0x81, 0x93, 0x26, 0x36, 0xb0, 0xe2, 0x98, 0x22, - 0x14, 0x17, 0xb3, 0x88, 0x17, 0xc6, 0xe4, 0x59, 0xff, 0xf0, 0x4e, 0x20, 0x3e, 0x2e, 0x83, 0x71, - 0xa2, 0x63, 0xa7, 0x48, 0x38, 0x19, 0x3a, 0x71, 0x82, 0x25, 0xa6, 0xb9, 0xac, 0x9b, 0x14, 0xb3, - 0x7e, 0x52, 0xcc, 0x6e, 0x3a, 0xa7, 0xd7, 0x06, 0x64, 0xc0, 0x80, 0xd9, 0x0a, 0x9e, 0x05, 0x13, - 0x2e, 0xaa, 0xcb, 0x2b, 0x71, 0xd2, 0x89, 0xbe, 0x6b, 0x03, 0xb2, 0x4b, 0xd0, 0x65, 0x02, 0x1f, - 0x80, 0x31, 0x4d, 0x31, 0x3c, 0x39, 0xe6, 0x58, 0xd2, 0xb8, 0xd2, 0x7f, 0xd2, 0xb8, 0xa9, 0x18, - 0x4c, 0xdc, 0x4d, 0x9d, 0x9a, 0x75, 0x79, 0x54, 0xf3, 0x96, 0xf0, 0x09, 0x98, 0xd5, 0x14, 0xc3, - 0x88, 0xea, 0x7b, 0x8a, 0xf1, 0xb9, 0xf6, 0x42, 0x7c, 0x8c, 0x90, 0x7d, 0x5c, 0x86, 0x33, 0x5a, - 0x74, 0x3f, 0xc0, 0xd9, 0x8b, 0x3d, 0x97, 0x73, 0xe2, 0xe5, 0x38, 0xbb, 0x91, 0xd7, 0xc9, 0x39, - 0xb0, 0x0f, 0x73, 0x20, 0xa1, 0x13, 0x7d, 0x9d, 0xe8, 0x87, 0x58, 0x77, 0x2a, 0x8f, 0x52, 0xdb, - 0x51, 0x34, 0x37, 0xbd, 0x25, 0x92, 0x2c, 0x01, 0xf4, 0x3c, 0x87, 0xeb, 0x60, 0xba, 0x55, 0xde, - 0x3c, 0x89, 0x4f, 0x33, 0x8f, 0x27, 0x3b, 0x3c, 0x7e, 0xd7, 0x87, 0x93, 0xa7, 0x5a, 0x28, 0x2e, - 0x91, 0x07, 0xa0, 0x15, 0x49, 0xc1, 0xcb, 0xb6, 0x80, 0xf8, 0xbe, 0xf3, 0xc2, 0x8c, 0x4f, 0xa8, - 0x7d, 0xb1, 0x3e, 0xe7, 0x40, 0x22, 0x4c, 0xbe, 0x5d, 0x64, 0x13, 0xa8, 0x7f, 0x1e, 0x85, 0x8d, - 0x66, 0x3e, 0x9f, 0x3e, 0x2d, 0x7b, 0x24, 0x91, 0xee, 0x1e, 0x21, 0x87, 0x34, 0xa2, 0x2a, 0xad, - 0x61, 0x29, 0xd5, 0xfd, 0xb0, 0x8c, 0xad, 0x92, 0xa9, 0xb2, 0x4a, 0x9f, 0x95, 0xe7, 0x82, 0x92, - 0xe6, 0x5b, 0x12, 0xc1, 0x1f, 0x72, 0xe0, 0x64, 0xdb, 0x08, 0x41, 0x59, 0xcf, 0xf4, 0x9f, 0x27, - 0x0b, 0x52, 0x33, 0x2f, 0xa6, 0xe1, 0x4e, 0xa7, 0x88, 0xf3, 0x3b, 0x3d, 0x25, 0x9b, 0x6d, 0xe5, - 0xd6, 0x80, 0x58, 0x87, 0x20, 0x19, 0x4d, 0x05, 0x01, 0xd1, 0x52, 0x4e, 0x3e, 0x28, 0xac, 0x35, - 0xf3, 0x17, 0xd3, 0x27, 0x5b, 0xba, 0xbb, 0x60, 0x1e, 0xbf, 0x85, 0xe8, 0x76, 0x88, 0x65, 0x22, - 0x9c, 0x49, 0x02, 0x7c, 0x7f, 0xc9, 0x05, 0x18, 0x7b, 0x37, 0x23, 0xc0, 0xf8, 0xec, 0xcb, 0x75, - 0x0d, 0x85, 0xad, 0x66, 0x7e, 0x3d, 0xdd, 0x96, 0xcd, 0x65, 0x80, 0x48, 0xf1, 0x11, 0x2e, 0x51, - 0x4f, 0xf2, 0xb3, 0x3d, 0x4e, 0xbb, 0x2b, 0xe0, 0xd2, 0x0d, 0x28, 0xf0, 0x53, 0x0e, 0xcc, 0x74, - 0xca, 0x7d, 0xee, 0xe5, 0xfa, 0xb5, 0xc2, 0x6a, 0x33, 0xbf, 0x9c, 0x9e, 0xdd, 0xe9, 0x22, 0x6e, - 0x72, 0xa7, 0xb7, 0x94, 0x71, 0x3d, 0x22, 0x5d, 0xf2, 0x37, 0x1c, 0x18, 0xf6, 0x9a, 0x3e, 0x08, - 0x06, 0x75, 0x45, 0xc3, 0x6e, 0xd3, 0x27, 0xb3, 0x6f, 0x38, 0x07, 0x86, 0x15, 0x8d, 0xd8, 0x3a, - 0x4d, 0xc4, 0x58, 0x15, 0xf7, 0x56, 0xf0, 0x36, 0x88, 0x91, 0x03, 0xd6, 0x5b, 0x4d, 0x49, 0xf9, - 0x17, 0x55, 0x22, 0xbb, 0x81, 0xb1, 0xc1, 0x6e, 0x6d, 0x8c, 0x1c, 0xa4, 0x16, 0xc1, 0xa8, 0xbf, - 0x86, 0x63, 0x60, 0x68, 0x2b, 0x7f, 0xe3, 0xce, 0x66, 0x7c, 0x00, 0x8e, 0x82, 0xc1, 0xbb, 0xf2, - 0xfb, 0x9b, 0x71, 0x2e, 0x77, 0xaa, 0x99, 0x3f, 0x21, 0x41, 0x18, 0x3f, 0x42, 0x29, 0x72, 0x90, - 0xca, 0xa1, 0x94, 0xb3, 0x9f, 0x42, 0x8d, 0xa4, 0x0a, 0x26, 0x43, 0xe9, 0x1c, 0xc6, 0x01, 0x7f, - 0x80, 0xeb, 0x9e, 0x22, 0xce, 0x27, 0x2c, 0x80, 0x21, 0x37, 0xa7, 0xc4, 0x5e, 0xa0, 0xd7, 0x70, - 0x51, 0x73, 0xb1, 0x35, 0x2e, 0xb9, 0x01, 0xe6, 0xba, 0x67, 0xf4, 0x2e, 0x3c, 0x4f, 0x04, 0x79, - 0x8e, 0x05, 0xa9, 0xfc, 0x9f, 0x4f, 0x25, 0x9a, 0x9d, 0xbb, 0x50, 0xd9, 0x09, 0x52, 0x79, 0x99, - 0xfe, 0xb8, 0xcd, 0x3f, 0xf7, 0xe3, 0x58, 0x33, 0xff, 0xa3, 0x18, 0xf8, 0x36, 0x97, 0x9e, 0xcd, - 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0xf6, 0x48, 0x27, 0x6d, 0x6f, 0xeb, 0xd4, 0xcf, 0xf4, 0x75, - 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x02, 0x78, 0x83, 0x0e, 0xa2, 0x75, 0x03, 0x23, 0x4a, - 0x50, 0x89, 0x1c, 0x62, 0x13, 0x69, 0x8a, 0x5e, 0x47, 0x15, 0xac, 0x50, 0xdb, 0xc4, 0x96, 0x43, - 0x6b, 0xd7, 0x4f, 0xf9, 0x4f, 0x39, 0xd6, 0xe5, 0x3f, 0xe5, 0x82, 0x3d, 0xf2, 0x53, 0x2e, 0xd4, - 0x54, 0xa7, 0xef, 0x81, 0x73, 0x5b, 0xaa, 0x5e, 0x46, 0xc4, 0xa6, 0x48, 0x23, 0x26, 0x46, 0x4a, - 0xd1, 0xf9, 0xec, 0x98, 0x79, 0xb2, 0x55, 0x4a, 0x0d, 0x2b, 0x27, 0x8a, 0xfb, 0x2a, 0xad, 0xda, - 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, 0x2e, 0x11, 0xab, 0x6e, 0x51, 0xec, 0x2d, 0x3d, - 0xdb, 0x48, 0xab, 0x50, 0x3a, 0x42, 0x29, 0x87, 0xbf, 0x13, 0x2c, 0x4b, 0xa5, 0xca, 0xca, 0xa5, - 0x65, 0xbc, 0x9c, 0x59, 0x2d, 0xae, 0xae, 0x66, 0x56, 0xd7, 0x56, 0xca, 0x19, 0x65, 0xf9, 0xe2, - 0xe5, 0xcc, 0xc5, 0xd5, 0xb2, 0x52, 0x2c, 0x57, 0xde, 0xc2, 0x6b, 0xcb, 0xab, 0x29, 0xd4, 0x28, - 0x4c, 0xfa, 0xed, 0x0b, 0x13, 0x2e, 0xf5, 0xef, 0x51, 0x90, 0x88, 0x4a, 0xe2, 0xe7, 0x03, 0x78, - 0x19, 0xcc, 0xb3, 0x06, 0xb1, 0x95, 0x9f, 0x82, 0x83, 0x07, 0x87, 0x78, 0x21, 0x26, 0xcf, 0x39, - 0x00, 0x3e, 0xc2, 0x56, 0x7b, 0xb2, 0x78, 0x1b, 0x24, 0xc3, 0xa8, 0xa1, 0x39, 0xc3, 0x99, 0x85, - 0x38, 0xf9, 0x54, 0x10, 0x77, 0x23, 0x30, 0x73, 0x74, 0xf0, 0x0d, 0xb6, 0x71, 0x3c, 0xe2, 0x05, - 0x3e, 0xcc, 0x77, 0xbb, 0xdd, 0xd1, 0x75, 0xf0, 0x0d, 0xcd, 0x26, 0x83, 0x88, 0x17, 0x06, 0xc3, - 0x7c, 0xdf, 0x0f, 0xb4, 0x83, 0xdd, 0xf8, 0xb6, 0x3a, 0xcc, 0x21, 0xc4, 0x0b, 0x43, 0x1d, 0x7c, - 0xfd, 0x66, 0xf3, 0x1d, 0x70, 0x3a, 0x62, 0xaa, 0x50, 0x0f, 0x3b, 0x8c, 0x78, 0x61, 0x58, 0x4e, - 0x84, 0x8c, 0x15, 0x6c, 0x67, 0xbb, 0xa3, 0x07, 0x26, 0x26, 0x5e, 0x18, 0xe9, 0x82, 0xee, 0x73, - 0x7f, 0x0b, 0x24, 0xc2, 0xe8, 0x81, 0x19, 0x68, 0x14, 0xf1, 0xc2, 0xa8, 0x7c, 0x32, 0x88, 0x5b, - 0x68, 0xcd, 0x43, 0x1d, 0xe6, 0x0a, 0x75, 0x85, 0x63, 0xac, 0x0b, 0x0e, 0x99, 0x2b, 0xdc, 0x09, - 0x47, 0xcc, 0x15, 0x9c, 0x9b, 0x00, 0xe2, 0x85, 0x89, 0xb0, 0xb9, 0x0a, 0xed, 0x19, 0xaa, 0xab, - 0x9b, 0x5a, 0xea, 0x8e, 0x23, 0x5e, 0x98, 0xec, 0x74, 0x93, 0xaf, 0x2d, 0x8e, 0x6a, 0x1b, 0xe8, - 0xa9, 0x26, 0x5e, 0xa0, 0xa7, 0x0a, 0xd9, 0xa6, 0xdd, 0x57, 0x5d, 0x01, 0x0b, 0x11, 0xdb, 0x84, - 0x9d, 0x32, 0x89, 0x78, 0x61, 0x5a, 0x9e, 0x0f, 0x59, 0x27, 0x34, 0xca, 0xf4, 0x20, 0xd0, 0x0a, - 0x8a, 0x29, 0xc4, 0x0b, 0xf1, 0x6e, 0x04, 0x7a, 0x06, 0x73, 0x68, 0xe4, 0x99, 0x46, 0xbc, 0x30, - 0x13, 0xf1, 0x4e, 0xc0, 0x4a, 0x5d, 0x91, 0x03, 0x43, 0x15, 0x2f, 0xc0, 0x4e, 0x64, 0x8f, 0x73, - 0xae, 0xda, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x23, 0x94, 0xea, 0x15, 0x58, 0xa9, 0x1c, 0xfa, 0x90, - 0x9a, 0x36, 0xbe, 0x80, 0xdc, 0xbf, 0x15, 0xa5, 0x66, 0x79, 0x8b, 0x87, 0x17, 0xa2, 0x68, 0x01, - 0xb9, 0x1d, 0xbc, 0xe5, 0x0b, 0x48, 0xba, 0x80, 0x56, 0x1e, 0xa2, 0x46, 0x2a, 0x09, 0x06, 0x0b, - 0xa4, 0x5c, 0xef, 0x56, 0x9d, 0x53, 0x0f, 0xc0, 0xb4, 0x37, 0x69, 0xfe, 0xb7, 0x4a, 0xab, 0x0c, - 0x6c, 0x0a, 0xc4, 0xfc, 0x77, 0x1b, 0x39, 0xa6, 0x3a, 0x29, 0x6a, 0xb0, 0xac, 0x50, 0xc5, 0xab, - 0x1e, 0xaf, 0x1d, 0xeb, 0x77, 0x87, 0x88, 0xcc, 0x50, 0x52, 0x9f, 0x71, 0x60, 0xfa, 0x7d, 0xa3, - 0xac, 0x50, 0x7c, 0x4f, 0x92, 0xf1, 0xc7, 0x36, 0xb6, 0x28, 0x5c, 0x07, 0xbc, 0x52, 0x74, 0x85, - 0x18, 0x97, 0x96, 0xfb, 0xae, 0x45, 0xb2, 0x83, 0x0d, 0xdf, 0x06, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, - 0xf8, 0x3c, 0xd1, 0x3a, 0xe7, 0x85, 0x2d, 0x15, 0xd7, 0xca, 0x37, 0x15, 0xeb, 0x40, 0x06, 0x2e, - 0xb8, 0xf3, 0x9d, 0x46, 0x60, 0x3c, 0x10, 0x9b, 0x4e, 0x7b, 0x70, 0x7f, 0x53, 0xbe, 0x15, 0x1f, - 0x80, 0x23, 0x80, 0xbf, 0xb5, 0xb3, 0x19, 0xe7, 0xa4, 0xbf, 0x2d, 0x80, 0x53, 0x51, 0xc6, 0x77, - 0xb0, 0x79, 0xa8, 0x96, 0x30, 0xfc, 0x2b, 0x0f, 0x86, 0xd7, 0x4d, 0xc7, 0xe6, 0xb0, 0x7f, 0xe9, - 0x93, 0xfd, 0xa3, 0xa4, 0xfe, 0x15, 0xfb, 0xe6, 0xef, 0xff, 0xfc, 0x59, 0xec, 0xcb, 0x58, 0xea, - 0xef, 0x31, 0xf1, 0x70, 0xd9, 0x7f, 0x4c, 0xed, 0xf6, 0x94, 0x2a, 0x1e, 0x05, 0xca, 0x47, 0x43, - 0x3c, 0x0a, 0x56, 0x84, 0x86, 0x78, 0x14, 0x88, 0xce, 0x86, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, - 0x4c, 0xf1, 0xc8, 0x0e, 0x1d, 0x1c, 0x05, 0x22, 0xa9, 0x21, 0x1e, 0x85, 0x2e, 0x94, 0xbf, 0x0e, - 0x9c, 0xb7, 0xc3, 0xb5, 0x21, 0x1e, 0x05, 0x73, 0xdb, 0x3b, 0x16, 0x35, 0x0d, 0x13, 0x57, 0xd4, - 0x27, 0x62, 0xba, 0xe1, 0x32, 0x09, 0xa0, 0x59, 0x51, 0x3a, 0x56, 0x94, 0x91, 0x15, 0x41, 0x08, - 0x0b, 0xd9, 0x6b, 0x9c, 0x6c, 0x88, 0x47, 0xed, 0x5c, 0xd5, 0x10, 0x8f, 0x22, 0xcf, 0x2f, 0x0e, - 0x66, 0xd7, 0x77, 0x99, 0x10, 0x5e, 0xa0, 0xcd, 0x6e, 0xc0, 0x9f, 0x73, 0x00, 0xb8, 0x0e, 0x67, - 0xd7, 0xe3, 0xeb, 0x71, 0x7a, 0x9a, 0xf9, 0xfc, 0x5c, 0x6a, 0xf1, 0x18, 0x8f, 0xe7, 0xb8, 0x34, - 0xfc, 0x5f, 0x30, 0x7c, 0x83, 0x90, 0x03, 0xdb, 0x80, 0xd3, 0x59, 0xcb, 0x2e, 0x4a, 0xd9, 0xed, - 0xb2, 0x77, 0xa7, 0x5f, 0x84, 0x73, 0x96, 0x71, 0x16, 0xe0, 0xeb, 0xc7, 0xc6, 0x9a, 0xd3, 0x17, - 0x35, 0xe0, 0x77, 0x38, 0x30, 0xec, 0xde, 0xf1, 0x17, 0x31, 0x4d, 0x8f, 0x57, 0x9d, 0xd4, 0x32, - 0x93, 0xe2, 0xcd, 0xe4, 0x73, 0x4a, 0xe1, 0x98, 0xe1, 0xd7, 0x1c, 0x18, 0xf5, 0x93, 0x0d, 0x5c, - 0x3a, 0x56, 0x94, 0x48, 0x5e, 0xea, 0x29, 0xc9, 0x23, 0x26, 0x49, 0x39, 0x99, 0x16, 0x0f, 0xa5, - 0x67, 0x4b, 0xa2, 0x14, 0x71, 0xd6, 0x95, 0xc6, 0xc9, 0x51, 0xf7, 0x97, 0xa5, 0x7e, 0x51, 0xe0, - 0xcf, 0x38, 0x90, 0xd8, 0x55, 0x68, 0xa9, 0xea, 0x24, 0xe3, 0x56, 0xf2, 0xda, 0xd6, 0x59, 0xe0, - 0x7d, 0x75, 0x2a, 0x5d, 0x62, 0x2a, 0x2d, 0x49, 0x6f, 0x8a, 0x87, 0x92, 0xf2, 0xbc, 0x02, 0x72, - 0x69, 0xf8, 0x03, 0x0e, 0x0c, 0x6f, 0xe0, 0x1a, 0xa6, 0xb8, 0x33, 0xd2, 0x7a, 0xf1, 0x7a, 0xd0, - 0xcc, 0xbf, 0x59, 0x3c, 0x0f, 0xa6, 0x00, 0xc8, 0x1b, 0xea, 0x75, 0x5c, 0xcf, 0xdb, 0xb4, 0x0a, - 0x07, 0xc0, 0x29, 0x30, 0x7c, 0xcb, 0xf9, 0x94, 0xe0, 0x24, 0x18, 0x34, 0xb1, 0x52, 0x06, 0x43, - 0x8f, 0x4d, 0x95, 0x62, 0x37, 0xf8, 0xd2, 0xcf, 0x1b, 0x7c, 0x7f, 0xe2, 0xc0, 0xe8, 0x55, 0x4c, - 0x6f, 0xdb, 0xd8, 0xac, 0x7f, 0x95, 0xe1, 0xf7, 0x29, 0xd7, 0xcc, 0xdf, 0x4d, 0xed, 0x80, 0x85, - 0x6e, 0x63, 0x45, 0x8b, 0x61, 0x9f, 0xe3, 0xc4, 0x07, 0x5c, 0x71, 0x80, 0xe9, 0x97, 0x85, 0x17, - 0x8e, 0xd3, 0xef, 0x63, 0x87, 0x81, 0xaf, 0xe5, 0xa7, 0x43, 0x20, 0x7e, 0x15, 0x53, 0xbf, 0x8b, - 0x70, 0x99, 0x5f, 0xee, 0xbf, 0x74, 0x7a, 0xf8, 0xc9, 0x17, 0x47, 0x4d, 0x7d, 0x32, 0xc8, 0x34, - 0xf8, 0x07, 0x0f, 0xbf, 0xe4, 0x8f, 0xd1, 0xa1, 0xd5, 0x9a, 0x78, 0x49, 0xb8, 0xdb, 0x88, 0xd3, - 0x88, 0x9e, 0x45, 0x2a, 0x56, 0xcf, 0x19, 0xa5, 0xe3, 0xcc, 0x7e, 0xd6, 0x61, 0xb8, 0x92, 0x3c, - 0x63, 0x8a, 0xe8, 0x7e, 0xda, 0x13, 0x37, 0x54, 0xfb, 0x7a, 0x77, 0xf9, 0x9d, 0x78, 0xed, 0x2e, - 0xbe, 0xab, 0x22, 0x3d, 0x19, 0x76, 0x96, 0xb6, 0x1e, 0xad, 0x73, 0x8f, 0xe3, 0x9e, 0x7a, 0x5a, - 0xcf, 0xe2, 0x1a, 0x2a, 0xbd, 0xf0, 0xb7, 0x3c, 0x18, 0xdc, 0x2c, 0x55, 0x09, 0xec, 0xf5, 0xe3, - 0x88, 0x65, 0x17, 0xb3, 0xee, 0x10, 0xe3, 0x27, 0x87, 0xe7, 0x86, 0x4c, 0xfd, 0x25, 0xd6, 0xcc, - 0x7f, 0x23, 0x06, 0x26, 0x70, 0xa9, 0x4a, 0x90, 0xe5, 0xb6, 0x5c, 0x60, 0x94, 0xad, 0x4c, 0xa3, - 0x04, 0x67, 0xee, 0xd8, 0x9a, 0xa6, 0x98, 0xf5, 0x1c, 0xda, 0xf4, 0xb6, 0x92, 0xf1, 0x8d, 0xf6, - 0xf3, 0x14, 0xdb, 0x4d, 0x6d, 0x00, 0x18, 0xbe, 0xb6, 0x4c, 0xda, 0x3e, 0x2f, 0xeb, 0x7b, 0x57, - 0x00, 0x7f, 0x71, 0x69, 0x05, 0xae, 0x81, 0x4b, 0x32, 0xa6, 0xb6, 0xa9, 0xe3, 0x32, 0x7a, 0x5c, - 0xc5, 0x3a, 0xa2, 0x55, 0x8c, 0x4c, 0x6c, 0x11, 0xdb, 0x2c, 0x61, 0xa4, 0x5a, 0x88, 0x62, 0xcd, - 0x20, 0xa6, 0x62, 0xaa, 0xb5, 0x3a, 0xb2, 0x75, 0xe5, 0x50, 0x51, 0x6b, 0x4a, 0xb1, 0x86, 0xb3, - 0xef, 0xbd, 0x0d, 0xf8, 0xd5, 0xa5, 0x55, 0xb8, 0x0a, 0xd2, 0xcf, 0x20, 0x50, 0x26, 0xd8, 0x42, - 0x3a, 0xa1, 0x08, 0x3f, 0x51, 0x2d, 0x9a, 0x85, 0xc3, 0x60, 0xf0, 0x27, 0x31, 0x8e, 0x67, 0x97, - 0xec, 0xe1, 0xf1, 0x69, 0xc2, 0x31, 0x8c, 0x78, 0xe4, 0x3a, 0xe6, 0xfe, 0x7c, 0x2a, 0x1e, 0x2c, - 0x38, 0xce, 0x59, 0xce, 0x7d, 0xb2, 0xb9, 0x0f, 0x61, 0xc7, 0x11, 0xfc, 0x05, 0x07, 0x26, 0x36, - 0x30, 0x36, 0xd8, 0x6f, 0x48, 0xce, 0xc6, 0xd7, 0xd3, 0xd9, 0x5c, 0x61, 0xba, 0x5d, 0x4e, 0xad, - 0x1e, 0x9b, 0xe2, 0x43, 0x3f, 0x4f, 0x67, 0x9d, 0x71, 0x85, 0x55, 0xa1, 0x3c, 0x00, 0x3b, 0xa4, - 0xa0, 0xea, 0x65, 0x55, 0xdf, 0xb7, 0xe0, 0x7c, 0x47, 0x06, 0xdf, 0xf0, 0x7e, 0xb9, 0xef, 0x99, - 0xdc, 0x07, 0xe0, 0x3d, 0x30, 0x72, 0x57, 0xd5, 0x30, 0xb1, 0x29, 0xec, 0x01, 0xd4, 0x13, 0xf9, - 0x34, 0x13, 0xff, 0x24, 0x9c, 0x0d, 0xda, 0x93, 0x7a, 0xc4, 0xaa, 0x20, 0xbe, 0x69, 0x9a, 0xc4, - 0x74, 0xca, 0xf7, 0x06, 0xa6, 0x8a, 0x5a, 0xb3, 0xfa, 0x66, 0x70, 0x8e, 0x31, 0x78, 0x15, 0x2e, - 0x84, 0x1c, 0xe6, 0x50, 0x7d, 0xac, 0xd2, 0x6a, 0xd9, 0xa3, 0xfa, 0x5d, 0x0e, 0xc0, 0xab, 0x98, - 0x46, 0x67, 0xb7, 0xe3, 0x7b, 0x84, 0x08, 0x46, 0x4f, 0x31, 0xde, 0x60, 0x62, 0x9c, 0x49, 0xcd, - 0x07, 0xc5, 0x70, 0x24, 0x28, 0x92, 0x72, 0x5d, 0x3c, 0x72, 0x3a, 0x02, 0x36, 0xe3, 0xc1, 0x6f, - 0x71, 0x60, 0x66, 0x97, 0x58, 0xd4, 0xa1, 0xc8, 0x50, 0x99, 0x20, 0xcf, 0x37, 0x26, 0xf6, 0xe4, - 0x2e, 0x32, 0xee, 0xe7, 0x53, 0xe7, 0x82, 0xdc, 0x0d, 0x62, 0x51, 0x47, 0x02, 0xf6, 0xab, 0xa0, - 0x2b, 0x86, 0x1f, 0x14, 0xc9, 0x5f, 0x71, 0xcd, 0xfc, 0x17, 0x1c, 0xac, 0xf4, 0x98, 0xda, 0x82, - 0x6f, 0xd8, 0x28, 0x93, 0x41, 0x8f, 0xab, 0x6a, 0xa9, 0x8a, 0xac, 0x2a, 0xb1, 0x6b, 0x65, 0x76, - 0xfd, 0x8a, 0x18, 0xd9, 0x16, 0x2e, 0x23, 0x55, 0x47, 0x46, 0x4d, 0x29, 0x61, 0x44, 0x2a, 0xec, - 0xa2, 0x96, 0x49, 0xc9, 0xd6, 0xb0, 0xee, 0xce, 0x02, 0xa8, 0x44, 0x34, 0x67, 0x71, 0x26, 0x79, - 0x1b, 0x2c, 0x76, 0xeb, 0x0c, 0x9c, 0x6b, 0xe4, 0xcf, 0x89, 0xfd, 0xbe, 0x35, 0x3e, 0x02, 0x27, - 0x4a, 0x8a, 0x86, 0x6b, 0xeb, 0x8a, 0x85, 0x3d, 0x1a, 0xce, 0x50, 0x03, 0x65, 0x30, 0xe4, 0xfe, - 0xb4, 0xd9, 0x6f, 0x20, 0xcd, 0x33, 0x1b, 0xce, 0xc2, 0x99, 0x50, 0x20, 0x39, 0x47, 0xd2, 0x47, - 0x60, 0x21, 0xaf, 0x13, 0x5a, 0xc5, 0xa6, 0xc7, 0xc9, 0x71, 0x5e, 0xe0, 0x52, 0xbd, 0x1b, 0xba, - 0x62, 0xfd, 0x32, 0x1e, 0x28, 0x7c, 0x31, 0xd2, 0xcc, 0x7f, 0x3e, 0x02, 0xff, 0xc0, 0x81, 0xd9, - 0x3c, 0x2a, 0xb8, 0xaf, 0xc3, 0x81, 0x14, 0xf0, 0x01, 0x38, 0xb1, 0x2f, 0xef, 0xae, 0x67, 0xae, - 0xba, 0xaa, 0x23, 0xc3, 0x24, 0x8f, 0x70, 0x89, 0xf6, 0x6b, 0xb2, 0x64, 0x5c, 0x27, 0x3a, 0xfe, - 0x2f, 0x4f, 0x35, 0x07, 0x3a, 0xfd, 0x11, 0x38, 0x51, 0xb8, 0xb3, 0x81, 0x56, 0x32, 0xeb, 0x35, - 0xc5, 0xb6, 0x30, 0xba, 0xa1, 0x96, 0xb0, 0x6e, 0x61, 0xb8, 0xd5, 0x1f, 0x65, 0xb1, 0x58, 0x23, - 0x45, 0x51, 0x53, 0x2c, 0x8a, 0x4d, 0xf1, 0xc6, 0xf6, 0xfa, 0xe6, 0xce, 0x9d, 0xcd, 0x2c, 0x7d, - 0x42, 0x25, 0x7e, 0x39, 0xbb, 0x94, 0xe6, 0xb9, 0xd8, 0xa0, 0x14, 0x57, 0x0c, 0xf7, 0x4d, 0x5b, - 0x25, 0xba, 0xf8, 0xc8, 0x22, 0xba, 0x34, 0x17, 0xdc, 0x79, 0x92, 0xa9, 0x10, 0x92, 0xd1, 0x54, - 0x0d, 0xe7, 0x3a, 0x20, 0x73, 0x3d, 0x20, 0xe5, 0x5d, 0xa7, 0x62, 0xac, 0xc0, 0x6d, 0x70, 0xb5, - 0xb3, 0x62, 0xd8, 0x16, 0x36, 0xdb, 0xd5, 0xa2, 0xaa, 0x1c, 0x62, 0x64, 0x60, 0x53, 0x53, 0x2d, - 0xcb, 0x09, 0x4c, 0x4a, 0x90, 0x52, 0x2a, 0x61, 0xcb, 0x0a, 0x55, 0x97, 0xac, 0xfc, 0x12, 0x35, - 0x68, 0x44, 0xbe, 0x06, 0xf8, 0xd5, 0xe5, 0x35, 0x98, 0x07, 0x93, 0xdb, 0x6f, 0x68, 0x48, 0x41, - 0x14, 0x2b, 0x06, 0xa1, 0x59, 0xb8, 0x04, 0xb2, 0xc9, 0xbe, 0x9e, 0xff, 0xee, 0x7f, 0x2f, 0x06, - 0xa6, 0xc1, 0x58, 0x41, 0xb1, 0xd4, 0x12, 0xeb, 0xff, 0x63, 0xa3, 0x1c, 0x78, 0x25, 0x34, 0x11, - 0x4c, 0x8f, 0xc6, 0x92, 0x63, 0x1f, 0x64, 0xf2, 0xbb, 0xdb, 0x99, 0xeb, 0xb8, 0x8e, 0x62, 0xe0, - 0x8f, 0x5c, 0x6b, 0x42, 0xf8, 0x1d, 0x37, 0xca, 0x0b, 0x83, 0xd2, 0x59, 0xdf, 0x87, 0x01, 0x87, - 0x8b, 0x44, 0xb1, 0x69, 0x55, 0x74, 0xfe, 0x10, 0x53, 0xfd, 0x1f, 0x9c, 0x5b, 0xec, 0x0d, 0x44, - 0xc9, 0x01, 0xd6, 0x0b, 0xff, 0x0f, 0x92, 0xee, 0xc0, 0x01, 0xe1, 0x55, 0x53, 0xd1, 0xa9, 0x85, - 0x9c, 0x85, 0x67, 0x3d, 0xb0, 0xe0, 0x8d, 0x21, 0x70, 0xd6, 0x3b, 0x64, 0x2b, 0xff, 0x74, 0x1d, - 0x0c, 0x29, 0x65, 0x4d, 0xd5, 0x61, 0x2e, 0x84, 0xaa, 0x97, 0x43, 0x60, 0xcc, 0x19, 0x0e, 0x98, - 0x6a, 0x51, 0xa7, 0x12, 0x1d, 0x62, 0xa4, 0xea, 0x15, 0x62, 0x6a, 0xcc, 0xdf, 0xc5, 0x45, 0x30, - 0x19, 0x34, 0xc5, 0x40, 0x74, 0x34, 0x2a, 0x9e, 0xef, 0x39, 0x1c, 0x45, 0x41, 0xcd, 0x6d, 0x70, - 0xea, 0x66, 0x3b, 0xfb, 0x04, 0xef, 0x54, 0xbf, 0x77, 0xe9, 0xfe, 0x58, 0xcb, 0x73, 0xc5, 0x61, - 0x76, 0x9f, 0x57, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x35, 0xba, 0x1f, 0xec, 0xc6, 0x27, 0x00, - 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_75cdf8204f309306) +} + +var fileDescriptor_a_bit_of_everything_75cdf8204f309306 = []byte{ + // 3241 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, + 0xf9, 0x5a, 0xae, 0x9e, 0xa3, 0x17, 0x35, 0xb2, 0x65, 0x8a, 0x56, 0xa2, 0x31, 0xed, 0x24, 0x6b, + 0xc6, 0xe4, 0x4a, 0x2b, 0xd9, 0x91, 0x19, 0x24, 0xfe, 0x91, 0x7a, 0xd8, 0x8a, 0x6d, 0x59, 0x59, + 0x3b, 0xfe, 0x05, 0x8e, 0x1d, 0x61, 0x49, 0x0e, 0xc5, 0xb5, 0xb8, 0x3b, 0x9b, 0xdd, 0x59, 0xd9, + 0xac, 0xca, 0x36, 0x7d, 0xa0, 0x45, 0x9b, 0x43, 0x01, 0xa6, 0x45, 0xd1, 0x07, 0xfa, 0x17, 0xe4, + 0xda, 0x53, 0x80, 0xb6, 0x97, 0x9e, 0x7a, 0x73, 0x8b, 0xde, 0x7a, 0x6a, 0x0f, 0x3d, 0x15, 0x28, + 0x0a, 0x04, 0xe8, 0xa1, 0x45, 0xb1, 0xb3, 0xbb, 0xe4, 0xee, 0x92, 0xb4, 0x4c, 0x3b, 0xc8, 0x45, + 0xda, 0x99, 0xf9, 0xde, 0xdf, 0x37, 0xdf, 0x63, 0x08, 0x24, 0xfc, 0x58, 0xd1, 0x8c, 0x1a, 0xb6, + 0x44, 0xc3, 0x24, 0x94, 0x88, 0xde, 0xd2, 0x28, 0x8a, 0xca, 0x5e, 0x51, 0xa5, 0x7b, 0xa4, 0xb2, + 0x87, 0x0f, 0xb1, 0x59, 0xa7, 0x55, 0x55, 0xdf, 0xcf, 0x32, 0x18, 0xb8, 0xb8, 0x6f, 0x1a, 0xa5, + 0xec, 0xbe, 0x42, 0xf1, 0x23, 0xa5, 0x9e, 0xf5, 0x09, 0x64, 0x5b, 0xa8, 0xc9, 0x85, 0x7d, 0x42, + 0xf6, 0x6b, 0x58, 0x54, 0x0c, 0x55, 0x54, 0x74, 0x9d, 0x50, 0x85, 0xaa, 0x44, 0xb7, 0x5c, 0xf4, + 0x24, 0xf2, 0x4e, 0xd9, 0xaa, 0x68, 0x57, 0xc4, 0x8a, 0x8a, 0x6b, 0xe5, 0x3d, 0x4d, 0xb1, 0x0e, + 0x3c, 0x88, 0xd3, 0x51, 0x08, 0xac, 0x19, 0xb4, 0xee, 0x1d, 0xbe, 0x1c, 0x3d, 0x2c, 0xdb, 0x26, + 0xa3, 0xef, 0x9d, 0xbf, 0x16, 0xd1, 0xc8, 0x50, 0x68, 0x15, 0xeb, 0xb6, 0xc6, 0x3e, 0xf6, 0x9c, + 0x2f, 0x5f, 0x8e, 0x08, 0xa0, 0x65, 0x17, 0x45, 0x0d, 0x5b, 0x96, 0xb2, 0x8f, 0x3d, 0x88, 0x33, + 0x9d, 0x10, 0x52, 0x04, 0x64, 0x31, 0x2a, 0x0d, 0x55, 0x35, 0x6c, 0x51, 0x45, 0x33, 0x3c, 0x80, + 0x0b, 0xec, 0x5f, 0x29, 0xb3, 0x8f, 0xf5, 0x8c, 0xf5, 0x48, 0xd9, 0xdf, 0xc7, 0xa6, 0x48, 0x0c, + 0x66, 0x8f, 0x4e, 0xdb, 0xa4, 0x7e, 0x7a, 0x1a, 0xc4, 0xf3, 0x05, 0x95, 0xde, 0xaa, 0x6c, 0xb6, + 0xac, 0x0e, 0x1f, 0x80, 0x49, 0x4b, 0xd5, 0xf7, 0x6b, 0x78, 0x4f, 0xc7, 0x16, 0xc5, 0xe5, 0xc4, + 0x3c, 0xe2, 0x84, 0x71, 0x69, 0x2d, 0x7b, 0x8c, 0x1f, 0xb2, 0x51, 0x4a, 0xd9, 0x1d, 0x86, 0x2f, + 0x4f, 0xb8, 0xe4, 0xdc, 0x15, 0xac, 0x82, 0x41, 0xdb, 0x56, 0xcb, 0x09, 0x0e, 0x71, 0xc2, 0x58, + 0xe1, 0x4e, 0x33, 0xff, 0xee, 0xc7, 0x1c, 0xf7, 0x43, 0xee, 0xfa, 0x07, 0x4a, 0xa6, 0x92, 0xcf, + 0x6c, 0x2d, 0x65, 0x2e, 0x3f, 0x38, 0x5a, 0x6b, 0x64, 0x82, 0xcb, 0xd5, 0x7e, 0x96, 0xcb, 0x52, + 0x43, 0x66, 0x1c, 0xe0, 0x2e, 0x18, 0xf6, 0x34, 0x88, 0x21, 0xfe, 0x85, 0x34, 0xf0, 0xe8, 0xc0, + 0x77, 0xc0, 0x78, 0xa5, 0x46, 0x14, 0xba, 0x77, 0xa8, 0xd4, 0x6c, 0x9c, 0xe0, 0x11, 0x27, 0xc4, + 0x0a, 0xe7, 0x9b, 0xf9, 0x57, 0xa5, 0x99, 0x2d, 0x67, 0x1f, 0xb1, 0x7d, 0xc4, 0x22, 0x2c, 0xc7, + 0x2f, 0x65, 0xa5, 0x27, 0x5c, 0x10, 0x41, 0x06, 0x6c, 0x71, 0xd7, 0xf9, 0x86, 0x67, 0xc0, 0x44, + 0x99, 0xd8, 0xc5, 0x1a, 0xf6, 0x88, 0x0d, 0x22, 0x4e, 0xe0, 0xe4, 0x71, 0x77, 0xcf, 0x05, 0x59, + 0x04, 0xe3, 0xaa, 0x4e, 0x2f, 0xad, 0x7a, 0x10, 0x43, 0x88, 0x13, 0x78, 0x19, 0xb0, 0xad, 0x16, + 0x0d, 0x3b, 0x08, 0x31, 0x8c, 0x38, 0x61, 0x50, 0x1e, 0xb7, 0x03, 0x20, 0x2e, 0x8d, 0x15, 0xc9, + 0x83, 0x18, 0x41, 0x9c, 0x30, 0xc4, 0x68, 0xac, 0x48, 0x2e, 0xc0, 0x59, 0x30, 0x59, 0x51, 0x1f, + 0xe3, 0x72, 0x8b, 0xc8, 0x28, 0xe2, 0x84, 0x61, 0x79, 0xc2, 0xdb, 0x0c, 0x03, 0xb5, 0xe8, 0x8c, + 0x21, 0x4e, 0x18, 0xf1, 0x80, 0x7c, 0x4a, 0x2f, 0x01, 0x50, 0x24, 0xa4, 0xe6, 0x41, 0x00, 0xc4, + 0x09, 0xa3, 0xf2, 0x98, 0xb3, 0xd3, 0x12, 0xd6, 0xa2, 0xa6, 0xaa, 0xef, 0x7b, 0x00, 0xe3, 0x4e, + 0x00, 0xc8, 0xe3, 0xee, 0x5e, 0x4b, 0xd8, 0x62, 0x9d, 0x62, 0xcb, 0x83, 0x78, 0x09, 0x71, 0xc2, + 0x84, 0x0c, 0xd8, 0x56, 0x48, 0xe1, 0x96, 0x18, 0x93, 0x88, 0x13, 0x26, 0x5d, 0x85, 0x7d, 0x29, + 0xae, 0x03, 0xe0, 0xdc, 0x3a, 0x0f, 0x60, 0x0a, 0x71, 0xc2, 0x94, 0x74, 0xe1, 0x58, 0xcf, 0xef, + 0xd8, 0x1a, 0x36, 0xd5, 0xd2, 0xa6, 0x6e, 0x6b, 0xf2, 0x98, 0x83, 0xef, 0x12, 0xdb, 0x05, 0xd3, + 0xad, 0x7b, 0xec, 0x51, 0x7c, 0x99, 0x51, 0x14, 0x7a, 0x50, 0xf4, 0xaf, 0x7f, 0x76, 0x57, 0xa1, + 0x55, 0x46, 0x6d, 0xd2, 0xf0, 0xbe, 0x5c, 0x8a, 0x16, 0x98, 0x73, 0x83, 0x69, 0x2f, 0x4a, 0x78, + 0x91, 0x11, 0x7e, 0xfb, 0x38, 0xc2, 0x37, 0xdd, 0x84, 0xe0, 0xd3, 0xf7, 0x42, 0xb4, 0xc5, 0x6e, + 0x56, 0x0f, 0xad, 0x5d, 0xa6, 0xaf, 0x80, 0x29, 0x2b, 0xec, 0xbf, 0x69, 0xc4, 0x09, 0xd3, 0xf2, + 0xa4, 0x15, 0x72, 0x60, 0x0b, 0xac, 0x15, 0x0b, 0x71, 0xc4, 0x09, 0x71, 0x1f, 0x2c, 0x10, 0x75, + 0x56, 0xd0, 0x09, 0x33, 0x88, 0x13, 0x66, 0xe4, 0x71, 0x2b, 0xe0, 0x04, 0x0f, 0xa4, 0x45, 0x07, + 0x22, 0x4e, 0x80, 0x2e, 0x88, 0x4f, 0x45, 0x02, 0x27, 0x4d, 0x6c, 0x60, 0xc5, 0x31, 0x45, 0x28, + 0x2e, 0x66, 0x11, 0x2f, 0x8c, 0xc9, 0xb3, 0xfe, 0xe1, 0xed, 0x40, 0x7c, 0x5c, 0x06, 0xe3, 0x44, + 0xc7, 0x4e, 0x91, 0x70, 0x32, 0x74, 0xe2, 0x04, 0x4b, 0x4c, 0x73, 0x59, 0x37, 0x29, 0x66, 0xfd, + 0xa4, 0x98, 0xdd, 0x74, 0x4e, 0xaf, 0x0d, 0xc8, 0x80, 0x01, 0xb3, 0x15, 0x3c, 0x0b, 0x26, 0x5c, + 0x54, 0x97, 0x57, 0xe2, 0xa4, 0x13, 0x7d, 0xd7, 0x06, 0x64, 0x97, 0xa0, 0xcb, 0x04, 0xde, 0x07, + 0x63, 0x9a, 0x62, 0x78, 0x72, 0xcc, 0xb1, 0xa4, 0x71, 0xa5, 0xff, 0xa4, 0x71, 0x53, 0x31, 0x98, + 0xb8, 0x9b, 0x3a, 0x35, 0xeb, 0xf2, 0xa8, 0xe6, 0x2d, 0xe1, 0x63, 0x30, 0xab, 0x29, 0x86, 0x11, + 0xd5, 0xf7, 0x14, 0xe3, 0x73, 0xed, 0xb9, 0xf8, 0x18, 0x21, 0xfb, 0xb8, 0x0c, 0x67, 0xb4, 0xe8, + 0x7e, 0x80, 0xb3, 0x17, 0x7b, 0x2e, 0xe7, 0xc4, 0x8b, 0x71, 0x76, 0x23, 0xaf, 0x93, 0x73, 0x60, + 0x1f, 0xe6, 0x40, 0x42, 0x27, 0xfa, 0x3a, 0xd1, 0x0f, 0xb1, 0xee, 0x54, 0x1e, 0xa5, 0xb6, 0xa3, + 0x68, 0x6e, 0x7a, 0x4b, 0x24, 0x59, 0x02, 0xe8, 0x79, 0x0e, 0xd7, 0xc1, 0x74, 0xab, 0xbc, 0x79, + 0x12, 0x9f, 0x66, 0x1e, 0x4f, 0x76, 0x78, 0xfc, 0x8e, 0x0f, 0x27, 0x4f, 0xb5, 0x50, 0x5c, 0x22, + 0xf7, 0x41, 0x2b, 0x92, 0x82, 0x97, 0x6d, 0x01, 0xf1, 0x7d, 0xe7, 0x85, 0x19, 0x9f, 0x50, 0xfb, + 0x62, 0x7d, 0xc6, 0x81, 0x44, 0x98, 0x7c, 0xbb, 0xc8, 0x26, 0x50, 0xff, 0x3c, 0x0a, 0x1b, 0xcd, + 0x7c, 0x3e, 0x7d, 0x5a, 0xf6, 0x48, 0x22, 0xdd, 0x3d, 0x42, 0x0e, 0x69, 0x44, 0x55, 0x5a, 0xc3, + 0x52, 0xaa, 0xfb, 0x61, 0x19, 0x5b, 0x25, 0x53, 0x65, 0x95, 0x3e, 0x2b, 0xcf, 0x05, 0x25, 0xcd, + 0xb7, 0x24, 0x82, 0x3f, 0xe6, 0xc0, 0xc9, 0xb6, 0x11, 0x82, 0xb2, 0x9e, 0xe9, 0x3f, 0x4f, 0x16, + 0xa4, 0x66, 0x5e, 0x4c, 0xc3, 0x9d, 0x4e, 0x11, 0xe7, 0x77, 0x7a, 0x4a, 0x36, 0xdb, 0xca, 0xad, + 0x01, 0xb1, 0x0e, 0x41, 0x32, 0x9a, 0x0a, 0x02, 0xa2, 0xa5, 0x9c, 0x7c, 0x50, 0x58, 0x6b, 0xe6, + 0x2f, 0xa6, 0x4f, 0xb6, 0x74, 0x77, 0xc1, 0x3c, 0x7e, 0x0b, 0xd1, 0xed, 0x10, 0xcb, 0x44, 0x38, + 0x93, 0x04, 0xf8, 0xfe, 0x86, 0x0b, 0x30, 0xf6, 0x6e, 0x46, 0x80, 0xf1, 0xd9, 0x17, 0xeb, 0x1a, + 0x0a, 0x5b, 0xcd, 0xfc, 0x7a, 0xba, 0x2d, 0x9b, 0xcb, 0x00, 0x91, 0xe2, 0x43, 0x5c, 0xa2, 0x9e, + 0xe4, 0x67, 0x7b, 0x9c, 0x76, 0x57, 0xc0, 0xa5, 0x1b, 0x50, 0xe0, 0x17, 0x1c, 0x98, 0xe9, 0x94, + 0xfb, 0xdc, 0x8b, 0xf5, 0x6b, 0x85, 0xd5, 0x66, 0x7e, 0x39, 0x3d, 0xbb, 0xd3, 0x45, 0xdc, 0xe4, + 0x4e, 0x6f, 0x29, 0xe3, 0x7a, 0x44, 0xba, 0xe4, 0x5f, 0x38, 0x30, 0xec, 0x35, 0x7d, 0x10, 0x0c, + 0xea, 0x8a, 0x86, 0xdd, 0xa6, 0x4f, 0x66, 0xdf, 0x70, 0x0e, 0x0c, 0x2b, 0x1a, 0xb1, 0x75, 0x9a, + 0x88, 0xb1, 0x2a, 0xee, 0xad, 0xa0, 0x06, 0x62, 0xe4, 0x80, 0xf5, 0x56, 0x53, 0x52, 0xfe, 0x79, + 0x95, 0xc8, 0x6e, 0x60, 0x6c, 0xb0, 0x28, 0x4d, 0x36, 0xf3, 0xa7, 0xa4, 0x93, 0xfe, 0x32, 0x2c, + 0x73, 0x8c, 0x1c, 0xa4, 0x16, 0xc1, 0xa8, 0x7f, 0x08, 0xc7, 0xc0, 0xd0, 0x56, 0xfe, 0xc6, 0xed, + 0xcd, 0xf8, 0x00, 0x1c, 0x05, 0x83, 0x77, 0xe4, 0xf7, 0x36, 0xe3, 0x5c, 0xee, 0x54, 0x33, 0x7f, + 0x42, 0x82, 0x30, 0x7e, 0x84, 0x52, 0xe4, 0x20, 0x95, 0x43, 0x29, 0x67, 0x3f, 0x85, 0x1a, 0x49, + 0x15, 0x4c, 0x86, 0x52, 0x3d, 0x8c, 0x03, 0xfe, 0x00, 0xd7, 0x3d, 0x25, 0x9d, 0x4f, 0x58, 0x00, + 0x43, 0x6e, 0xbe, 0x89, 0x3d, 0x47, 0x1f, 0xe2, 0xa2, 0xe6, 0x62, 0x6b, 0x5c, 0x72, 0x03, 0xcc, + 0x75, 0xcf, 0xf6, 0x5d, 0x78, 0x9e, 0x08, 0xf2, 0x1c, 0x0b, 0x52, 0xf9, 0x86, 0x4f, 0x25, 0x9a, + 0xb9, 0xbb, 0x50, 0xd9, 0x09, 0x52, 0x79, 0x91, 0xde, 0xb9, 0xcd, 0x3f, 0xf7, 0xb3, 0x58, 0x33, + 0xff, 0x93, 0x18, 0xf8, 0x2e, 0x97, 0x9e, 0xcd, 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0xf6, 0xb8, + 0x27, 0x6d, 0x6f, 0xeb, 0xd4, 0xaf, 0x02, 0x75, 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x72, + 0x78, 0x43, 0x10, 0xa2, 0x75, 0x03, 0x23, 0x4a, 0x50, 0x89, 0x1c, 0x62, 0x13, 0x69, 0x8a, 0x5e, + 0x47, 0x15, 0xac, 0x50, 0xdb, 0xc4, 0x96, 0x43, 0x6b, 0xd7, 0x2f, 0x07, 0x4f, 0x38, 0x36, 0x01, + 0x3c, 0xe1, 0x82, 0xfd, 0xf3, 0x13, 0x2e, 0xd4, 0x70, 0xa7, 0xef, 0x82, 0x73, 0x5b, 0xaa, 0x5e, + 0x46, 0xc4, 0xa6, 0x48, 0x23, 0x26, 0x46, 0x4a, 0xd1, 0xf9, 0xec, 0x98, 0x87, 0xb2, 0x55, 0x4a, + 0x0d, 0x2b, 0x27, 0x8a, 0xfb, 0x2a, 0xad, 0xda, 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, + 0x2e, 0x11, 0xab, 0x6e, 0x51, 0xec, 0x2d, 0x3d, 0xdb, 0x48, 0xab, 0x50, 0x3a, 0x42, 0x29, 0x87, + 0xbf, 0x13, 0x2c, 0x4b, 0xa5, 0xca, 0xca, 0xa5, 0x65, 0xbc, 0x9c, 0x59, 0x2d, 0xae, 0xae, 0x66, + 0x56, 0xd7, 0x56, 0xca, 0x19, 0x65, 0xf9, 0xe2, 0xe5, 0xcc, 0xc5, 0xd5, 0xb2, 0x52, 0x2c, 0x57, + 0xde, 0xc0, 0x6b, 0xcb, 0xab, 0x29, 0xd4, 0x28, 0x4c, 0xfa, 0xad, 0x0d, 0x13, 0x2e, 0xf5, 0xdf, + 0x51, 0x90, 0x88, 0x4a, 0xe2, 0xe7, 0x0a, 0x78, 0x19, 0xcc, 0xb3, 0xe6, 0xb1, 0x95, 0xbb, 0x82, + 0x43, 0x09, 0x87, 0x78, 0x21, 0x26, 0xcf, 0x39, 0x00, 0x3e, 0xc2, 0x56, 0x7b, 0xea, 0x78, 0x13, + 0x24, 0xc3, 0xa8, 0xa1, 0x19, 0xc4, 0x99, 0x93, 0x38, 0xf9, 0x54, 0x10, 0x77, 0x23, 0x30, 0x8f, + 0x74, 0xf0, 0x0d, 0xb6, 0x78, 0x3c, 0xe2, 0x05, 0x3e, 0xcc, 0x77, 0xbb, 0xdd, 0xed, 0x75, 0xf0, + 0x0d, 0xcd, 0x2d, 0x83, 0x88, 0x17, 0x06, 0xc3, 0x7c, 0xdf, 0x0b, 0xb4, 0x8a, 0xdd, 0xf8, 0xb6, + 0xba, 0xcf, 0x21, 0xc4, 0x0b, 0x43, 0x1d, 0x7c, 0xfd, 0x46, 0xf4, 0x2d, 0x70, 0x3a, 0x62, 0xaa, + 0x50, 0x7f, 0x3b, 0x8c, 0x78, 0x61, 0x58, 0x4e, 0x84, 0x8c, 0x15, 0x6c, 0x75, 0xbb, 0xa3, 0x07, + 0xa6, 0x29, 0x5e, 0x18, 0xe9, 0x82, 0xee, 0x73, 0x7f, 0x03, 0x24, 0xc2, 0xe8, 0x81, 0xf9, 0x68, + 0x14, 0xf1, 0xc2, 0xa8, 0x7c, 0x32, 0x88, 0x5b, 0x68, 0xcd, 0x4a, 0x1d, 0xe6, 0x0a, 0x75, 0x8c, + 0x63, 0xac, 0x43, 0x0e, 0x99, 0x2b, 0xdc, 0x25, 0x47, 0xcc, 0x15, 0x9c, 0xa9, 0x00, 0xe2, 0x85, + 0x89, 0xb0, 0xb9, 0x0a, 0xed, 0xf9, 0xaa, 0xab, 0x9b, 0x5a, 0xea, 0x8e, 0x23, 0x5e, 0x98, 0xec, + 0x74, 0x93, 0xaf, 0x2d, 0x8e, 0x6a, 0x1b, 0xe8, 0xb7, 0x26, 0x9e, 0xa3, 0xdf, 0x0a, 0xd9, 0xa6, + 0xdd, 0x73, 0x5d, 0x01, 0x0b, 0x11, 0xdb, 0x84, 0x9d, 0x32, 0x89, 0x78, 0x61, 0x5a, 0x9e, 0x0f, + 0x59, 0x27, 0x34, 0xe6, 0xf4, 0x20, 0xd0, 0x0a, 0x8a, 0x29, 0xc4, 0x0b, 0xf1, 0x6e, 0x04, 0x7a, + 0x06, 0x73, 0x68, 0x1c, 0x9a, 0x46, 0xbc, 0x30, 0x13, 0xf1, 0x4e, 0xc0, 0x4a, 0x5d, 0x91, 0x03, + 0x03, 0x17, 0x2f, 0xc0, 0x4e, 0x64, 0x8f, 0x73, 0xae, 0xda, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x23, + 0x94, 0xea, 0x15, 0x58, 0xa9, 0x1c, 0xfa, 0x80, 0x9a, 0x36, 0xbe, 0x80, 0xdc, 0xbf, 0x15, 0xa5, + 0x66, 0x79, 0x8b, 0x07, 0x17, 0xa2, 0x68, 0x01, 0xb9, 0x1d, 0xbc, 0xe5, 0x0b, 0x48, 0xba, 0x80, + 0x56, 0x1e, 0xa0, 0x46, 0x2a, 0x09, 0x06, 0x0b, 0xa4, 0x5c, 0xef, 0x56, 0xb9, 0x53, 0xf7, 0xc1, + 0xb4, 0x37, 0x85, 0xfe, 0xbf, 0x4a, 0xab, 0x0c, 0x6c, 0x0a, 0xc4, 0xfc, 0x37, 0x1d, 0x39, 0xa6, + 0x3a, 0x29, 0x6a, 0xb0, 0xac, 0x50, 0xc5, 0xab, 0x1e, 0xaf, 0x1c, 0xeb, 0x77, 0x87, 0x88, 0xcc, + 0x50, 0x52, 0x9f, 0x72, 0x60, 0xfa, 0x3d, 0xa3, 0xac, 0x50, 0x7c, 0x57, 0x92, 0xf1, 0x47, 0x36, + 0xb6, 0x28, 0x5c, 0x07, 0xbc, 0x52, 0x74, 0x85, 0x18, 0x97, 0x96, 0xfb, 0xae, 0x45, 0xb2, 0x83, + 0x0d, 0xdf, 0x04, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, 0xff, 0x3c, 0xd1, 0x3a, 0x67, 0x89, 0x2d, 0x15, + 0xd7, 0xca, 0x37, 0x15, 0xeb, 0x40, 0x06, 0x2e, 0xb8, 0xf3, 0x9d, 0x46, 0x60, 0x3c, 0x10, 0x9b, + 0x4e, 0x7b, 0x70, 0x6f, 0x53, 0xbe, 0x15, 0x1f, 0x80, 0x23, 0x80, 0xbf, 0xb5, 0xb3, 0x19, 0xe7, + 0xa4, 0x7f, 0x2e, 0x80, 0x53, 0x51, 0xc6, 0xb7, 0xb1, 0x79, 0xa8, 0x96, 0x30, 0xfc, 0x07, 0x0f, + 0x86, 0xd7, 0x4d, 0xc7, 0xe6, 0xb0, 0x7f, 0xe9, 0x93, 0xfd, 0xa3, 0xa4, 0xfe, 0x13, 0xfb, 0xf6, + 0x1f, 0xff, 0xf6, 0x69, 0xec, 0x8b, 0x58, 0xea, 0x5f, 0x31, 0xf1, 0x70, 0xd9, 0x7f, 0x68, 0xed, + 0xf6, 0xcc, 0x2a, 0x1e, 0x05, 0xca, 0x47, 0x43, 0x3c, 0x0a, 0x56, 0x84, 0x86, 0x78, 0x14, 0x88, + 0xce, 0x86, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, 0x4c, 0xf1, 0xc8, 0x0e, 0x1d, 0x1c, 0x05, 0x22, + 0xa9, 0x21, 0x1e, 0x85, 0x2e, 0x94, 0xbf, 0x0e, 0x9c, 0xb7, 0xc3, 0xb5, 0x21, 0x1e, 0x05, 0x73, + 0xdb, 0x5b, 0x16, 0x35, 0x0d, 0x13, 0x57, 0xd4, 0xc7, 0x62, 0xba, 0xe1, 0x32, 0x09, 0xa0, 0x59, + 0x51, 0x3a, 0x56, 0x94, 0x91, 0x15, 0x41, 0x08, 0x0b, 0xd9, 0x6b, 0xd4, 0x6c, 0x88, 0x47, 0xed, + 0x5c, 0xd5, 0x10, 0x8f, 0x22, 0x4f, 0x33, 0x0e, 0x66, 0xd7, 0x37, 0x9b, 0x10, 0x5e, 0xa0, 0x05, + 0x6f, 0xc0, 0x5f, 0x71, 0x00, 0xb8, 0x0e, 0x67, 0xd7, 0xe3, 0xab, 0x71, 0x7a, 0x9a, 0xf9, 0xfc, + 0x5c, 0x6a, 0xf1, 0x18, 0x8f, 0xe7, 0xb8, 0x34, 0xfc, 0x3a, 0x18, 0xbe, 0x41, 0xc8, 0x81, 0x6d, + 0xc0, 0xe9, 0xac, 0x65, 0x17, 0xa5, 0xec, 0x76, 0xd9, 0xbb, 0xd3, 0xcf, 0xc3, 0x39, 0xcb, 0x38, + 0x0b, 0xf0, 0xd5, 0x63, 0x63, 0xcd, 0xe9, 0x8b, 0x1a, 0xf0, 0x7b, 0x1c, 0x18, 0x76, 0xef, 0xf8, + 0xf3, 0x98, 0xa6, 0xc7, 0x8b, 0x4f, 0x6a, 0x99, 0x49, 0xf1, 0x7a, 0xf2, 0x19, 0xa5, 0x70, 0xcc, + 0xf0, 0x3b, 0x0e, 0x8c, 0xfa, 0xc9, 0x06, 0x2e, 0x1d, 0x2b, 0x4a, 0x24, 0x2f, 0xf5, 0x94, 0xe4, + 0x21, 0x93, 0xa4, 0x9c, 0x4c, 0x8b, 0x87, 0xd2, 0xd3, 0x25, 0x51, 0x8a, 0x38, 0xeb, 0x4a, 0xe3, + 0xe4, 0xa8, 0x7b, 0xcb, 0x52, 0xbf, 0x28, 0xf0, 0x97, 0x1c, 0x48, 0xec, 0x2a, 0xb4, 0x54, 0x75, + 0x92, 0x71, 0x2b, 0x79, 0x6d, 0xeb, 0x2c, 0xf0, 0xbe, 0x3c, 0x95, 0x2e, 0x31, 0x95, 0x96, 0xa4, + 0xd7, 0xc5, 0x43, 0x49, 0x79, 0x56, 0x01, 0xb9, 0x34, 0xfc, 0x11, 0x07, 0x86, 0x37, 0x70, 0x0d, + 0x53, 0xdc, 0x19, 0x69, 0xbd, 0x78, 0xdd, 0x6f, 0xe6, 0x5f, 0x2f, 0x9e, 0x07, 0x53, 0x00, 0xe4, + 0x0d, 0xf5, 0x3a, 0xae, 0xe7, 0x6d, 0x5a, 0x85, 0x03, 0xe0, 0x14, 0x18, 0xbe, 0xe5, 0x7c, 0x4a, + 0x70, 0x12, 0x0c, 0x9a, 0x58, 0x29, 0x83, 0xa1, 0x47, 0xa6, 0x4a, 0xb1, 0x1b, 0x7c, 0xe9, 0x67, + 0x0d, 0xbe, 0xbf, 0x72, 0x60, 0xf4, 0x2a, 0xa6, 0xef, 0xda, 0xd8, 0xac, 0x7f, 0x99, 0xe1, 0xf7, + 0x09, 0xd7, 0xcc, 0xdf, 0x49, 0xed, 0x80, 0x85, 0x6e, 0x63, 0x45, 0x8b, 0x61, 0x9f, 0xe3, 0xc4, + 0xfb, 0x5c, 0x71, 0x80, 0xe9, 0x97, 0x85, 0x17, 0x8e, 0xd3, 0xef, 0x23, 0x87, 0x81, 0xaf, 0xe5, + 0x27, 0x43, 0x20, 0x7e, 0x15, 0x53, 0xbf, 0x8b, 0x70, 0x99, 0x5f, 0xee, 0xbf, 0x74, 0x7a, 0xf8, + 0xc9, 0xe7, 0x47, 0x4d, 0x7d, 0x3c, 0xc8, 0x34, 0xf8, 0x37, 0x0f, 0xbf, 0xe0, 0x8f, 0xd1, 0xa1, + 0xd5, 0x9a, 0x78, 0x49, 0xb8, 0xdb, 0x88, 0xd3, 0x88, 0x9e, 0x45, 0x2a, 0x56, 0xcf, 0x19, 0xa5, + 0xe3, 0xcc, 0x7e, 0xda, 0x61, 0xb8, 0x92, 0x3c, 0x65, 0x8a, 0xe8, 0x7e, 0xda, 0x13, 0x37, 0x54, + 0xfb, 0x7a, 0x77, 0xf9, 0x9d, 0x78, 0xed, 0x2e, 0xbe, 0xab, 0x22, 0x3d, 0x19, 0x76, 0x96, 0xb6, + 0x1e, 0xad, 0x73, 0x8f, 0xe3, 0x9e, 0x7a, 0x5a, 0x4f, 0xe3, 0x1a, 0x2a, 0xbd, 0xf0, 0xf7, 0x3c, + 0x18, 0xdc, 0x2c, 0x55, 0x09, 0xec, 0xf5, 0xc3, 0x89, 0x65, 0x17, 0xb3, 0xee, 0x10, 0xe3, 0x27, + 0x87, 0x67, 0x86, 0x4c, 0xfd, 0x3d, 0xd6, 0xcc, 0x7f, 0x2b, 0x06, 0x26, 0x70, 0xa9, 0x4a, 0x90, + 0xe5, 0xb6, 0x5c, 0x60, 0x94, 0xad, 0x4c, 0xa3, 0x04, 0x67, 0x6e, 0xdb, 0x9a, 0xa6, 0x98, 0xf5, + 0x1c, 0xda, 0xf4, 0xb6, 0x92, 0xf1, 0x8d, 0xf6, 0x33, 0x10, 0xdb, 0x4d, 0x6d, 0x00, 0x18, 0xbe, + 0xb6, 0x4c, 0xda, 0x3e, 0x2f, 0xeb, 0x3b, 0x57, 0x00, 0x7f, 0x71, 0x69, 0x05, 0xae, 0x81, 0x4b, + 0x32, 0xa6, 0xb6, 0xa9, 0xe3, 0x32, 0x7a, 0x54, 0xc5, 0x3a, 0xa2, 0x55, 0x8c, 0x4c, 0x6c, 0x11, + 0xdb, 0x2c, 0x61, 0xa4, 0x5a, 0x88, 0x62, 0xcd, 0x20, 0xa6, 0x62, 0xaa, 0xb5, 0x3a, 0xb2, 0x75, + 0xe5, 0x50, 0x51, 0x6b, 0x4a, 0xb1, 0x86, 0xb3, 0xef, 0xbc, 0x09, 0xf8, 0xd5, 0xa5, 0x55, 0xb8, + 0x0a, 0xd2, 0x4f, 0x21, 0x50, 0x26, 0xd8, 0x42, 0x3a, 0xa1, 0x08, 0x3f, 0x56, 0x2d, 0x9a, 0x85, + 0xc3, 0x60, 0xf0, 0xe7, 0x31, 0x8e, 0x67, 0x97, 0xec, 0xc1, 0xf1, 0x69, 0xc2, 0x31, 0x8c, 0x78, + 0xe4, 0x3a, 0xe6, 0xde, 0x7c, 0x2a, 0x1e, 0x2c, 0x38, 0xce, 0x59, 0xce, 0x7d, 0xb2, 0xb9, 0x07, + 0x61, 0xc7, 0x11, 0xfc, 0x35, 0x07, 0x26, 0x36, 0x30, 0x36, 0xd8, 0xef, 0x4b, 0xce, 0xc6, 0x57, + 0xd3, 0xd9, 0x5c, 0x61, 0xba, 0x5d, 0x4e, 0xad, 0x1e, 0x9b, 0xe2, 0x43, 0x3f, 0x5d, 0x67, 0x9d, + 0x71, 0x85, 0x55, 0xa1, 0x3c, 0x00, 0x3b, 0xa4, 0xa0, 0xea, 0x65, 0x55, 0xdf, 0xb7, 0xe0, 0x7c, + 0x47, 0x06, 0xdf, 0xf0, 0x7e, 0xd5, 0xef, 0x99, 0xdc, 0x07, 0xe0, 0x5d, 0x30, 0x72, 0x47, 0xd5, + 0x30, 0xb1, 0x29, 0xec, 0x01, 0xd4, 0x13, 0xf9, 0x34, 0x13, 0xff, 0x24, 0x9c, 0x0d, 0xda, 0x93, + 0x7a, 0xc4, 0xaa, 0x20, 0xbe, 0x69, 0x9a, 0xc4, 0x74, 0xca, 0xf7, 0x06, 0xa6, 0x8a, 0x5a, 0xb3, + 0xfa, 0x66, 0x70, 0x8e, 0x31, 0x78, 0x19, 0x2e, 0x84, 0x1c, 0xe6, 0x50, 0x7d, 0xa4, 0xd2, 0x6a, + 0xd9, 0xa3, 0xfa, 0x7d, 0x0e, 0xc0, 0xab, 0x98, 0x46, 0x67, 0xb7, 0xe3, 0x7b, 0x84, 0x08, 0x46, + 0x4f, 0x31, 0x5e, 0x63, 0x62, 0x9c, 0x49, 0xcd, 0x07, 0xc5, 0x70, 0x24, 0x28, 0x92, 0x72, 0x5d, + 0x3c, 0x72, 0x3a, 0x02, 0x36, 0xe3, 0xc1, 0xef, 0x70, 0x60, 0x66, 0x97, 0x58, 0xd4, 0xa1, 0xc8, + 0x50, 0x99, 0x20, 0xcf, 0x36, 0x26, 0xf6, 0xe4, 0x2e, 0x32, 0xee, 0xe7, 0x53, 0xe7, 0x82, 0xdc, + 0x0d, 0x62, 0x51, 0x47, 0x02, 0xf6, 0x8b, 0xa1, 0x2b, 0x86, 0x1f, 0x14, 0xc9, 0xdf, 0x72, 0xcd, + 0xfc, 0xe7, 0x1c, 0xac, 0xf4, 0x98, 0xda, 0x82, 0x6f, 0xc5, 0x28, 0x93, 0x41, 0x8f, 0xaa, 0x6a, + 0xa9, 0x8a, 0xac, 0x2a, 0xb1, 0x6b, 0x65, 0x76, 0xfd, 0x8a, 0x18, 0xd9, 0x16, 0x2e, 0x23, 0x55, + 0x47, 0x46, 0x4d, 0x29, 0x61, 0x44, 0x2a, 0xec, 0xa2, 0x96, 0x49, 0xc9, 0xd6, 0xb0, 0xee, 0xce, + 0x02, 0xa8, 0x44, 0x34, 0x67, 0x71, 0x26, 0xf9, 0x2e, 0x58, 0xec, 0xd6, 0x19, 0x38, 0xd7, 0xc8, + 0x9f, 0x13, 0xfb, 0x7d, 0x6b, 0x7c, 0x08, 0x4e, 0x94, 0x14, 0x0d, 0xd7, 0xd6, 0x15, 0x0b, 0x7b, + 0x34, 0x9c, 0xa1, 0x06, 0xca, 0x60, 0xc8, 0xfd, 0xd9, 0xb3, 0xdf, 0x40, 0x9a, 0x67, 0x36, 0x9c, + 0x85, 0x33, 0xa1, 0x40, 0x72, 0x8e, 0xa4, 0x0f, 0xc1, 0x42, 0x5e, 0x27, 0xb4, 0x8a, 0x4d, 0x8f, + 0x93, 0xe3, 0xbc, 0xc0, 0xa5, 0x7a, 0x3b, 0x74, 0xc5, 0xfa, 0x65, 0x3c, 0x50, 0xf8, 0x7c, 0xa4, + 0x99, 0xff, 0x6c, 0x04, 0xfe, 0x89, 0x03, 0xb3, 0x79, 0x54, 0x70, 0x5f, 0x87, 0x03, 0x29, 0xe0, + 0x7d, 0x70, 0x62, 0x5f, 0xde, 0x5d, 0xcf, 0x5c, 0x75, 0x55, 0x47, 0x86, 0x49, 0x1e, 0xe2, 0x12, + 0xed, 0xd7, 0x64, 0xc9, 0xb8, 0x4e, 0x74, 0xfc, 0x7f, 0x9e, 0x6a, 0x0e, 0x74, 0xfa, 0x43, 0x70, + 0xa2, 0x70, 0x7b, 0x03, 0xad, 0x64, 0xd6, 0x6b, 0x8a, 0x6d, 0x61, 0x74, 0x43, 0x2d, 0x61, 0xdd, + 0xc2, 0x70, 0xab, 0x3f, 0xca, 0x62, 0xb1, 0x46, 0x8a, 0xa2, 0xa6, 0x58, 0x14, 0x9b, 0xe2, 0x8d, + 0xed, 0xf5, 0xcd, 0x9d, 0xdb, 0x9b, 0x59, 0xfa, 0x98, 0x4a, 0xfc, 0x72, 0x76, 0x29, 0xcd, 0x73, + 0xb1, 0x41, 0x29, 0xae, 0x18, 0xee, 0x9b, 0xb6, 0x4a, 0x74, 0xf1, 0xa1, 0x45, 0x74, 0x69, 0x2e, + 0xb8, 0xf3, 0x38, 0x53, 0x21, 0x24, 0xa3, 0xa9, 0x1a, 0xce, 0x75, 0x40, 0xe6, 0x7a, 0x40, 0xca, + 0xbb, 0x4e, 0xc5, 0x58, 0x81, 0xdb, 0xe0, 0x6a, 0x67, 0xc5, 0xb0, 0x2d, 0x6c, 0xb6, 0xab, 0x45, + 0x55, 0x39, 0xc4, 0xc8, 0xc0, 0xa6, 0xa6, 0x5a, 0x96, 0x13, 0x98, 0x94, 0x20, 0xa5, 0x54, 0xc2, + 0x96, 0x15, 0xaa, 0x2e, 0x59, 0xf9, 0x05, 0x6a, 0xd0, 0x88, 0x7c, 0x0d, 0xf0, 0xab, 0xcb, 0x6b, + 0x30, 0x0f, 0x26, 0xb7, 0x5f, 0xd3, 0x90, 0x82, 0x28, 0x56, 0x0c, 0x42, 0xb3, 0x70, 0x09, 0x64, + 0x93, 0x7d, 0x3d, 0xff, 0xdd, 0xfb, 0x41, 0x0c, 0x4c, 0x83, 0xb1, 0x82, 0x62, 0xa9, 0x25, 0xd6, + 0xff, 0xc7, 0x46, 0x39, 0xf0, 0x52, 0x68, 0x22, 0x98, 0x1e, 0x8d, 0x25, 0xc7, 0xde, 0xcf, 0xe4, + 0x77, 0xb7, 0x33, 0xd7, 0x71, 0x1d, 0xc5, 0xc0, 0x9f, 0xb9, 0xd6, 0x84, 0xf0, 0x07, 0x6e, 0x94, + 0x17, 0x06, 0xa5, 0xb3, 0xbe, 0x0f, 0x03, 0x0e, 0x17, 0x89, 0x62, 0xd3, 0xaa, 0xe8, 0xfc, 0x21, + 0xa6, 0xfa, 0x35, 0x9c, 0x5b, 0xec, 0x0d, 0x44, 0xc9, 0x01, 0xd6, 0x0b, 0xdf, 0x04, 0x49, 0x77, + 0xe0, 0x80, 0xf0, 0xaa, 0xa9, 0xe8, 0xd4, 0x42, 0xce, 0xc2, 0xb3, 0x1e, 0x58, 0xf0, 0xc6, 0x10, + 0x38, 0xeb, 0x1d, 0xb2, 0x95, 0x7f, 0xba, 0x0e, 0x86, 0x94, 0xb2, 0xa6, 0xea, 0x30, 0x17, 0x42, + 0xd5, 0xcb, 0x21, 0x30, 0xe6, 0x0c, 0x07, 0x4c, 0xb5, 0xa8, 0x53, 0x89, 0x0e, 0x31, 0x52, 0xf5, + 0x0a, 0x31, 0x35, 0xe6, 0xef, 0xe2, 0x22, 0x98, 0x0c, 0x9a, 0x62, 0x20, 0x3a, 0x1a, 0x15, 0xcf, + 0xf7, 0x1c, 0x8e, 0xa2, 0xa0, 0xe6, 0x36, 0x38, 0x75, 0xb3, 0x9d, 0x7d, 0x82, 0x77, 0xaa, 0xdf, + 0xbb, 0x74, 0x6f, 0xac, 0xe5, 0xb9, 0xe2, 0x30, 0xbb, 0xcf, 0x2b, 0xff, 0x0b, 0x00, 0x00, 0xff, + 0xff, 0xce, 0xfe, 0xb9, 0x59, 0xe2, 0x27, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 9a73797c510..5a4e525ff8c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -162,7 +162,9 @@ message ABitOfEverything { // TRUE is true. TRUE = 1; } - DeepEnum ok = 3; + + // DeepEnum comment. + DeepEnum ok = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {description: "DeepEnum description."}]; } Nested single_nested = 25; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index f786e898f00..048fa8da4b3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -171,7 +171,7 @@ }, { "name": "single_nested.ok", - "description": " - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, "type": "string", @@ -415,7 +415,7 @@ }, { "name": "nested_annotation.ok", - "description": " - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, "type": "string", @@ -1485,7 +1485,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 259900180bb..d67b6d24496 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -102,7 +102,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 484ca971643..55f42093b59 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1265,8 +1265,10 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, is // There was no summary field on the swaggerObject. Try to apply the // whole comment into description if the swagger object description is empty. - if descriptionValue.CanSet() && (descriptionValue.Len() == 0 || isPackageObject){ - descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, "\n\n"))) + if descriptionValue.CanSet() { + if descriptionValue.Len() == 0 || isPackageObject { + descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, "\n\n"))) + } return nil } From 5328886f9f5735cbc4f4819bf6b840a48609ad66 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 7 Mar 2019 09:51:26 +0000 Subject: [PATCH 0133/1518] Regenerate changelog for 1.8.2 --- CHANGELOG.md | 32 +++++++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e7aa10b741..06c555b2ee5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Change Log +## [v1.8.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.2) (2019-03-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.1...v1.8.2) + +**Implemented enhancements:** + +- Update the build environment Dockerfile to Go 1.12 [\#885](https://github.com/grpc-ecosystem/grpc-gateway/issues/885) + +**Fixed bugs:** + +- Change in behavior of streaming request body \(1.4.1 vs 1.8.1\) [\#894](https://github.com/grpc-ecosystem/grpc-gateway/issues/894) +- Cannot download 1.8.0 with modules [\#886](https://github.com/grpc-ecosystem/grpc-gateway/issues/886) + +**Closed issues:** + +- Description and title ignored when field is not a scaler value type [\#892](https://github.com/grpc-ecosystem/grpc-gateway/issues/892) + +**Merged pull requests:** + +- 897 fixing problem while generating swagger documentation for enum messages [\#898](https://github.com/grpc-ecosystem/grpc-gateway/pull/898) ([fahernandez](https://github.com/fahernandez)) +- bugfix: disable IOReaderFactory for streaming requests [\#896](https://github.com/grpc-ecosystem/grpc-gateway/pull/896) ([happyalu](https://github.com/happyalu)) +- bazel: Use new ProtoInfo provider [\#893](https://github.com/grpc-ecosystem/grpc-gateway/pull/893) ([drigz](https://github.com/drigz)) +- README: Add some nicer looking badges [\#890](https://github.com/grpc-ecosystem/grpc-gateway/pull/890) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Upgrade generator and runtime versions [\#889](https://github.com/grpc-ecosystem/grpc-gateway/pull/889) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +## [v1.8.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.1) (2019-03-02) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.1-pre1...v1.8.1) + +**Merged pull requests:** + +- Generate changelog for v1.8.1 [\#887](https://github.com/grpc-ecosystem/grpc-gateway/pull/887) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.8.1-pre1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.1-pre1) (2019-03-01) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.0...v1.8.1-pre1) @@ -12,7 +43,6 @@ **Implemented enhancements:** -- Cleaner Swagger-generated schema names \(omitting prefixes\) [\#877](https://github.com/grpc-ecosystem/grpc-gateway/issues/877) - Support swagger annotations for default and required fields [\#851](https://github.com/grpc-ecosystem/grpc-gateway/issues/851) - Support go modules [\#755](https://github.com/grpc-ecosystem/grpc-gateway/issues/755) diff --git a/Makefile b/Makefile index 7ca298961a7..c1d8ec93227 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.0 + --future-release=v1.8.2 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 9bb0d96453406df45ed7ad20a1bebeca7e14b9e5 Mon Sep 17 00:00:00 2001 From: Elliot Shepherd Date: Wed, 27 Feb 2019 14:24:19 +1100 Subject: [PATCH 0134/1518] protoc-gen-swagger: return error when encoding swagger file Previously, the error was being ignored --- protoc-gen-swagger/genswagger/generator.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index a7bc905b672..749ff4b0d28 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -67,11 +67,13 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { } // convert swagger file obj to plugin.CodeGeneratorResponse_File -func encodeSwagger(file *wrapper) *plugin.CodeGeneratorResponse_File { +func encodeSwagger(file *wrapper) (*plugin.CodeGeneratorResponse_File, error) { var formatted bytes.Buffer enc := json.NewEncoder(&formatted) enc.SetIndent("", " ") - enc.Encode(*file.swagger) + if err := enc.Encode(*file.swagger); err != nil { + return nil, err + } name := file.fileName ext := filepath.Ext(name) base := strings.TrimSuffix(name, ext) @@ -79,7 +81,7 @@ func encodeSwagger(file *wrapper) *plugin.CodeGeneratorResponse_File { return &plugin.CodeGeneratorResponse_File{ Name: proto.String(output), Content: proto.String(formatted.String()), - } + }, nil } func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { @@ -127,11 +129,19 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato if g.reg.IsAllowMerge() { targetSwagger := mergeTargetFile(swaggers, g.reg.GetMergeFileName()) - files = append(files, encodeSwagger(targetSwagger)) + f, err := encodeSwagger(targetSwagger) + if err != nil { + return nil, fmt.Errorf("failed to encode swagger for %s: %s", g.reg.GetMergeFileName(), err) + } + files = append(files, f) glog.V(1).Infof("New swagger file will emit") } else { for _, file := range swaggers { - files = append(files, encodeSwagger(file)) + f, err := encodeSwagger(file) + if err != nil { + return nil, fmt.Errorf("failed to encode swagger for %s: %s", file.fileName, err) + } + files = append(files, f) glog.V(1).Infof("New swagger file will emit") } } From 2b6cab672e62c65a1bbe3a7c835c7273607e795a Mon Sep 17 00:00:00 2001 From: Brent Date: Sun, 10 Mar 2019 11:59:07 -0500 Subject: [PATCH 0135/1518] Use collectionFormat multi for query params of repeated fields (#902) * Use collectionFormat multi for query params of repeated fields Fixes #756 . Also formats protoc-gen-swagger/genswagger/template_test.go according to go fmt. --- .../abe/a_bit_of_everything_service_api.go | 8 +- .../a_bit_of_everything.swagger.json | 81 ++++++++++------ .../response_body_service.swagger.json | 12 ++- examples/proto/examplepb/stream.swagger.json | 21 +++-- protoc-gen-swagger/genswagger/template.go | 20 ++-- .../genswagger/template_test.go | 94 +++++++++++-------- protoc-gen-swagger/genswagger/types.go | 1 + 7 files changed, 147 insertions(+), 90 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index ce7c5d817ba..415243210cd 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -595,20 +595,20 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "csv" + var repeatedStringValueCollectionFormat = "multi" localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "csv" + var repeatedEnumValueCollectionFormat = "multi" localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - var repeatedEnumAnnotationCollectionFormat = "csv" + var repeatedEnumAnnotationCollectionFormat = "multi" localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "csv" + var repeatedStringAnnotationCollectionFormat = "multi" localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 048fa8da4b3..0bbb58038e2 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -328,7 +328,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, { "name": "oneof_string", @@ -361,7 +362,8 @@ "ZERO", "ONE" ] - } + }, + "collectionFormat": "multi" }, { "name": "repeated_enum_annotation", @@ -375,7 +377,8 @@ "ZERO", "ONE" ] - } + }, + "collectionFormat": "multi" }, { "name": "enum_value_annotation", @@ -397,7 +400,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, { "name": "nested_annotation.name", @@ -1526,7 +1530,8 @@ "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" - } + }, + "collectionFormat": "multi" }, "float_value": { "type": "number", @@ -1605,7 +1610,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, "oneof_empty": { "properties": {} @@ -1643,7 +1649,8 @@ "items": { "$ref": "#/definitions/examplepbNumericEnum" }, - "title": "repeated enum value. it is comma-separated in query" + "title": "repeated enum value. it is comma-separated in query", + "collectionFormat": "multi" }, "repeated_enum_annotation": { "type": "array", @@ -1651,7 +1658,8 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "description": "Repeated numeric enum description.", - "title": "Repeated numeric enum title" + "title": "Repeated numeric enum title", + "collectionFormat": "multi" }, "enum_value_annotation": { "$ref": "#/definitions/examplepbNumericEnum", @@ -1664,7 +1672,8 @@ "type": "string" }, "description": "Repeated string description.", - "title": "Repeated string title" + "title": "Repeated string title", + "collectionFormat": "multi" }, "repeated_nested_annotation": { "type": "array", @@ -1672,7 +1681,8 @@ "$ref": "#/definitions/ABitOfEverythingNested" }, "description": "Repeated nested object description.", - "title": "Repeated nested object title" + "title": "Repeated nested object title", + "collectionFormat": "multi" }, "nested_annotation": { "$ref": "#/definitions/ABitOfEverythingNested", @@ -1714,110 +1724,126 @@ "type": "number", "format": "float" }, - "title": "repeated values. they are comma-separated in path" + "title": "repeated values. they are comma-separated in path", + "collectionFormat": "multi" }, "path_repeated_double_value": { "type": "array", "items": { "type": "number", "format": "double" - } + }, + "collectionFormat": "multi" }, "path_repeated_int64_value": { "type": "array", "items": { "type": "string", "format": "int64" - } + }, + "collectionFormat": "multi" }, "path_repeated_uint64_value": { "type": "array", "items": { "type": "string", "format": "uint64" - } + }, + "collectionFormat": "multi" }, "path_repeated_int32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - } + }, + "collectionFormat": "multi" }, "path_repeated_fixed64_value": { "type": "array", "items": { "type": "string", "format": "uint64" - } + }, + "collectionFormat": "multi" }, "path_repeated_fixed32_value": { "type": "array", "items": { "type": "integer", "format": "int64" - } + }, + "collectionFormat": "multi" }, "path_repeated_bool_value": { "type": "array", "items": { "type": "boolean", "format": "boolean" - } + }, + "collectionFormat": "multi" }, "path_repeated_string_value": { "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, "path_repeated_bytes_value": { "type": "array", "items": { "type": "string", "format": "byte" - } + }, + "collectionFormat": "multi" }, "path_repeated_uint32_value": { "type": "array", "items": { "type": "integer", "format": "int64" - } + }, + "collectionFormat": "multi" }, "path_repeated_enum_value": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" - } + }, + "collectionFormat": "multi" }, "path_repeated_sfixed32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - } + }, + "collectionFormat": "multi" }, "path_repeated_sfixed64_value": { "type": "array", "items": { "type": "string", "format": "int64" - } + }, + "collectionFormat": "multi" }, "path_repeated_sint32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - } + }, + "collectionFormat": "multi" }, "path_repeated_sint64_value": { "type": "array", "items": { "type": "string", "format": "int64" - } + }, + "collectionFormat": "multi" } }, "title": "ABitOfEverythingRepeated is used to validate repeated path parameter functionality" @@ -1867,7 +1893,8 @@ "items": { "type": "string" }, - "description": "The set of field mask paths." + "description": "The set of field mask paths.", + "collectionFormat": "multi" } }, "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index 820129e93eb..3150845833c 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -25,7 +25,8 @@ "type": "array", "items": { "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" - } + }, + "collectionFormat": "multi" } } }, @@ -76,7 +77,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" } } }, @@ -112,7 +114,8 @@ "type": "array", "items": { "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" - } + }, + "collectionFormat": "multi" } } }, @@ -134,7 +137,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" } } }, diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index d67b6d24496..e24bd55feb6 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -143,7 +143,8 @@ "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" - } + }, + "collectionFormat": "multi" }, "float_value": { "type": "number", @@ -222,7 +223,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, "oneof_empty": { "properties": {} @@ -260,7 +262,8 @@ "items": { "$ref": "#/definitions/examplepbNumericEnum" }, - "title": "repeated enum value. it is comma-separated in query" + "title": "repeated enum value. it is comma-separated in query", + "collectionFormat": "multi" }, "repeated_enum_annotation": { "type": "array", @@ -268,7 +271,8 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "description": "Repeated numeric enum description.", - "title": "Repeated numeric enum title" + "title": "Repeated numeric enum title", + "collectionFormat": "multi" }, "enum_value_annotation": { "$ref": "#/definitions/examplepbNumericEnum", @@ -281,7 +285,8 @@ "type": "string" }, "description": "Repeated string description.", - "title": "Repeated string title" + "title": "Repeated string title", + "collectionFormat": "multi" }, "repeated_nested_annotation": { "type": "array", @@ -289,7 +294,8 @@ "$ref": "#/definitions/ABitOfEverythingNested" }, "description": "Repeated nested object description.", - "title": "Repeated nested object title" + "title": "Repeated nested object title", + "collectionFormat": "multi" }, "nested_annotation": { "$ref": "#/definitions/ABitOfEverythingNested", @@ -362,7 +368,8 @@ "type": "array", "items": { "$ref": "#/definitions/protobufAny" - } + }, + "collectionFormat": "multi" } } }, diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 55f42093b59..b4f1b9b8460 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -132,13 +132,14 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } param := swaggerParameterObject{ - Description: desc, - In: "query", - Default: schema.Default, - Type: schema.Type, - Items: schema.Items, - Format: schema.Format, - Required: required, + Description: desc, + In: "query", + Default: schema.Default, + Type: schema.Type, + Items: schema.Items, + Format: schema.Format, + CollectionFormat: schema.CollectionFormat, + Required: required, } if reg.GetUseJSONNamesForFields() { @@ -423,6 +424,7 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s Type: "array", Items: (*swaggerItemsObject)(&core), }, + CollectionFormat: "multi", } case object: ret = swaggerSchemaObject{ @@ -1255,9 +1257,9 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, is } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if descriptionValue.Len() == 0 || isPackageObject { + if descriptionValue.Len() == 0 || isPackageObject { descriptionValue.Set(reflect.ValueOf(description)) - } + } } return nil } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 603e2ed8feb..d2e4c05b61f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -58,6 +58,12 @@ func TestMessageToQueryParameters(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), Number: proto.Int32(2), }, + { + Name: proto.String("c"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Number: proto.Int32(3), + }, }, }, }, @@ -76,6 +82,13 @@ func TestMessageToQueryParameters(t *testing.T) { Type: "number", Format: "double", }, + swaggerParameterObject{ + Name: "c", + In: "query", + Required: false, + Type: "array", + CollectionFormat: "multi", + }, }, }, { @@ -192,6 +205,10 @@ func TestMessageToQueryParameters(t *testing.T) { if err != nil { t.Fatalf("failed to convert message to query parameters: %s", err) } + // avoid checking Items for array types + for i := range params { + params[i].Items = nil + } if !reflect.DeepEqual(params, test.Params) { t.Errorf("expected %v, got %v", test.Params, params) } @@ -1505,106 +1522,105 @@ func TestProtoComments(t *testing.T) { func TestUpdateSwaggerDataFromComments(t *testing.T) { tests := []struct { - descr string - swaggerObject interface{} - comments string - expectedError error - expectedSwaggerObject interface{} + descr string + swaggerObject interface{} + comments string + expectedError error + expectedSwaggerObject interface{} }{ { - descr: "empty comments", - swaggerObject: nil, + descr: "empty comments", + swaggerObject: nil, expectedSwaggerObject: nil, - comments: "", - expectedError: nil, + comments: "", + expectedError: nil, }, { - descr: "set field to read only", + descr: "set field to read only", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ - ReadOnly: true, + ReadOnly: true, Description: "... Output only. ...", }, - comments: "... Output only. ...", + comments: "... Output only. ...", expectedError: nil, }, { - descr: "set title", + descr: "set title", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Title: "Comment with no trailing dot", }, - comments: "Comment with no trailing dot", + comments: "Comment with no trailing dot", expectedError: nil, }, { - descr: "set description", + descr: "set description", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Description: "Comment with trailing dot.", }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { descr: "use info object", swaggerObject: &swaggerObject{ - Info: swaggerInfoObject{ - }, + Info: swaggerInfoObject{}, }, expectedSwaggerObject: &swaggerObject{ Info: swaggerInfoObject{ Description: "Comment with trailing dot.", }, }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { - descr: "multi line comment with title", + descr: "multi line comment with title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject { - Title: "First line", + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment no title", + descr: "multi line comment no title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject { + expectedSwaggerObject: &swaggerSchemaObject{ Description: "First line.\n\nSecond line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary with dot", + descr: "multi line comment with summary with dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject { - Summary: "First line.", + expectedSwaggerObject: &swaggerOperationObject{ + Summary: "First line.", Description: "Second line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", + descr: "multi line comment with summary no dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject { - Summary: "First line", + expectedSwaggerObject: &swaggerOperationObject{ + Summary: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", - swaggerObject: &schemaCore{}, + descr: "multi line comment with summary no dot", + swaggerObject: &schemaCore{}, expectedSwaggerObject: &schemaCore{}, - comments: "Any comment", - expectedError: errors.New("no description nor summary property"), + comments: "Any comment", + expectedError: errors.New("no description nor summary property"), }, } @@ -1632,4 +1648,4 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { } }) } -} \ No newline at end of file +} diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 6599937dc69..ddc63167db1 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -224,6 +224,7 @@ type swaggerSchemaObject struct { MaxProperties uint64 `json:"maxProperties,omitempty"` MinProperties uint64 `json:"minProperties,omitempty"` Required []string `json:"required,omitempty"` + CollectionFormat string `json:"collectionFormat,omitempty"` } // http://swagger.io/specification/#referenceObject From 6523154b0128738bcc0320ce39849670007e66ac Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 11 Mar 2019 12:08:51 +0000 Subject: [PATCH 0136/1518] Regenerate changelog for 1.8.3 --- CHANGELOG.md | 22 ++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06c555b2ee5..c047bb966c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## [v1.8.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.3) (2019-03-11) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.2...v1.8.3) + +**Implemented enhancements:** + +- Feature request from openapi 3: Allow apiKey in cookie [\#900](https://github.com/grpc-ecosystem/grpc-gateway/issues/900) + +**Fixed bugs:** + +- Error while defining enum comments [\#897](https://github.com/grpc-ecosystem/grpc-gateway/issues/897) + +**Closed issues:** + +- Its impossible to send response with non 200 status code [\#901](https://github.com/grpc-ecosystem/grpc-gateway/issues/901) +- Swagger get query param documentation shows repeated fields incorrectly [\#756](https://github.com/grpc-ecosystem/grpc-gateway/issues/756) + +**Merged pull requests:** + +- Use collectionFormat multi for query params of repeated fields [\#902](https://github.com/grpc-ecosystem/grpc-gateway/pull/902) ([bmperrea](https://github.com/bmperrea)) + ## [v1.8.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.2) (2019-03-07) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.1...v1.8.2) @@ -18,6 +38,7 @@ **Merged pull requests:** +- Regenerate changelog for 1.8.2 [\#899](https://github.com/grpc-ecosystem/grpc-gateway/pull/899) ([johanbrandhorst](https://github.com/johanbrandhorst)) - 897 fixing problem while generating swagger documentation for enum messages [\#898](https://github.com/grpc-ecosystem/grpc-gateway/pull/898) ([fahernandez](https://github.com/fahernandez)) - bugfix: disable IOReaderFactory for streaming requests [\#896](https://github.com/grpc-ecosystem/grpc-gateway/pull/896) ([happyalu](https://github.com/happyalu)) - bazel: Use new ProtoInfo provider [\#893](https://github.com/grpc-ecosystem/grpc-gateway/pull/893) ([drigz](https://github.com/drigz)) @@ -69,6 +90,7 @@ - Add fqn\_for\_swagger\_name option [\#881](https://github.com/grpc-ecosystem/grpc-gateway/pull/881) ([hypnoce](https://github.com/hypnoce)) - go.mod: update grpc from v1.16.0 to v1.17.0 [\#880](https://github.com/grpc-ecosystem/grpc-gateway/pull/880) ([klim0v](https://github.com/klim0v)) - Fix parameter names when using JSON names. [\#879](https://github.com/grpc-ecosystem/grpc-gateway/pull/879) ([brocaar](https://github.com/brocaar)) +- protoc-gen-swagger: return error when encoding swagger file [\#878](https://github.com/grpc-ecosystem/grpc-gateway/pull/878) ([elliots](https://github.com/elliots)) - protoc-gen-grpc-gateway: use context package from stdlib [\#876](https://github.com/grpc-ecosystem/grpc-gateway/pull/876) ([simonpasquier](https://github.com/simonpasquier)) - Run buildifer on WORKSPACE [\#875](https://github.com/grpc-ecosystem/grpc-gateway/pull/875) ([achew22](https://github.com/achew22)) - Upgrade to rules\_go 0.17.0 [\#874](https://github.com/grpc-ecosystem/grpc-gateway/pull/874) ([achew22](https://github.com/achew22)) diff --git a/Makefile b/Makefile index c1d8ec93227..4103c542012 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.2 + --future-release=v1.8.3 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 7aca14d0a16247151f6e423f4cbfbd75a1bd4776 Mon Sep 17 00:00:00 2001 From: Wim Spaargaren Date: Mon, 11 Mar 2019 17:25:07 +0100 Subject: [PATCH 0137/1518] New proposal: support for the google.api.HttpBody (#904) * Implementation of HTTPBody marshaler * Rework HTTPBodyMarshaler fallback marshaler * Added tests. * Fix gomod * Fixed tests and added two new ones. * Added marshal backwards compatibility * Last line modsum was removed. * Embedded Marshaler & fixed import order * Removed inherited methods. * Comment improvements * Added small readme. * Doc enhancements * Identation fix * What's wrong with identation --- docs/_docs/httpbody.md | 43 ++++++++++ runtime/errors.go | 17 +++- runtime/handler.go | 11 ++- runtime/marshal_httpbodyproto.go | 43 ++++++++++ runtime/marshal_httpbodyproto_test.go | 49 ++++++++++++ runtime/proto_errors.go | 15 +++- third_party/googleapis/README.grpc-gateway | 1 + .../googleapis/google/api/httpbody.proto | 78 +++++++++++++++++++ 8 files changed, 249 insertions(+), 8 deletions(-) create mode 100644 docs/_docs/httpbody.md create mode 100644 runtime/marshal_httpbodyproto.go create mode 100644 runtime/marshal_httpbodyproto_test.go create mode 100644 third_party/googleapis/google/api/httpbody.proto diff --git a/docs/_docs/httpbody.md b/docs/_docs/httpbody.md new file mode 100644 index 00000000000..f95148ab336 --- /dev/null +++ b/docs/_docs/httpbody.md @@ -0,0 +1,43 @@ +--- +category: documentation +--- + +# HttpBody message Feature +The [HTTP Body](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! + +## Example Usage +1. Create a mux with the HTTP Body Marshaler as option. + +```golang + mux := runtime.NewServeMux(runtime.SetHTTPBodyMarshaler) +``` +2. Define your service in gRPC with an httpbody response message + +```golang +import "google/api/httpbody.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; + +service HttpBodyExampleService { + + rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) { + option (google.api.http) = { + get: "/helloworld" + }; + } + +} +``` +3. Generate gRPC and reverse-proxy stubs and implement your service. + +## Example service implementation + +```golang +func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) { + return &httpbody.HttpBody{ + ContentType: "text/html", + Data: []byte("Hello World"), + }, nil +} + +``` \ No newline at end of file diff --git a/runtime/errors.go b/runtime/errors.go index b39f55ea824..41d54ef916a 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -65,7 +65,7 @@ var ( ) type errorBody struct { - Error string `protobuf:"bytes,1,name=error" json:"error"` + Error string `protobuf:"bytes,1,name=error" json:"error"` // This is to make the error more compatible with users that expect errors to be Status objects: // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto // It should be the exact same message as the Error field. @@ -88,14 +88,23 @@ func (*errorBody) ProtoMessage() {} func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { const fallback = `{"error": "failed to marshal error message"}` - w.Header().Del("Trailer") - w.Header().Set("Content-Type", marshaler.ContentType()) - s, ok := status.FromError(err) if !ok { s = status.New(codes.Unknown, err.Error()) } + w.Header().Del("Trailer") + + contentType := marshaler.ContentType() + // Check marshaler on run time in order to keep backwards compatability + // An interface param needs to be added to the ContentType() function on + // the Marshal interface to be able to remove this check + if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { + pb := s.Proto() + contentType = httpBodyMarshaler.ContentTypeFromMessage(pb) + } + w.Header().Set("Content-Type", contentType) + body := &errorBody{ Error: s.Message(), Message: s.Message(), diff --git a/runtime/handler.go b/runtime/handler.go index 58ba686b81b..1fc63f7f58b 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -121,7 +121,16 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha handleForwardResponseServerMetadata(w, mux, md) handleForwardResponseTrailerHeader(w, md) - w.Header().Set("Content-Type", marshaler.ContentType()) + + contentType := marshaler.ContentType() + // Check marshaler on run time in order to keep backwards compatability + // An interface param needs to be added to the ContentType() function on + // the Marshal interface to be able to remove this check + if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { + contentType = httpBodyMarshaler.ContentTypeFromMessage(resp) + } + w.Header().Set("Content-Type", contentType) + if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { HTTPError(ctx, mux, marshaler, w, req, err) return diff --git a/runtime/marshal_httpbodyproto.go b/runtime/marshal_httpbodyproto.go new file mode 100644 index 00000000000..f55285b5d6c --- /dev/null +++ b/runtime/marshal_httpbodyproto.go @@ -0,0 +1,43 @@ +package runtime + +import ( + "google.golang.org/genproto/googleapis/api/httpbody" +) + +// SetHTTPBodyMarshaler overwrite the default marshaler with the HTTPBodyMarshaler +func SetHTTPBodyMarshaler(serveMux *ServeMux) { + serveMux.marshalers.mimeMap[MIMEWildcard] = &HTTPBodyMarshaler{ + Marshaler: &JSONPb{OrigName: true}, + } +} + +// HTTPBodyMarshaler is a Marshaler which supports marshaling of a +// google.api.HttpBody message as the full response body if it is +// the actual message used as the response. If not, then this will +// simply fallback to the Marshaler specified as its default Marshaler. +type HTTPBodyMarshaler struct { + Marshaler +} + +// ContentType implementation to keep backwards compatability with marshal interface +func (h *HTTPBodyMarshaler) ContentType() string { + return h.ContentTypeFromMessage(nil) +} + +// ContentTypeFromMessage in case v is a google.api.HttpBody message it returns +// its specified content type otherwise fall back to the default Marshaler. +func (h *HTTPBodyMarshaler) ContentTypeFromMessage(v interface{}) string { + if httpBody, ok := v.(*httpbody.HttpBody); ok { + return httpBody.GetContentType() + } + return h.Marshaler.ContentType() +} + +// Marshal marshals "v" by returning the body bytes if v is a +// google.api.HttpBody message, otherwise it falls back to the default Marshaler. +func (h *HTTPBodyMarshaler) Marshal(v interface{}) ([]byte, error) { + if httpBody, ok := v.(*httpbody.HttpBody); ok { + return httpBody.Data, nil + } + return h.Marshaler.Marshal(v) +} diff --git a/runtime/marshal_httpbodyproto_test.go b/runtime/marshal_httpbodyproto_test.go new file mode 100644 index 00000000000..1f07022770a --- /dev/null +++ b/runtime/marshal_httpbodyproto_test.go @@ -0,0 +1,49 @@ +package runtime_test + +import ( + "bytes" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "google.golang.org/genproto/googleapis/api/httpbody" +) + +func TestHTTPBodyContentType(t *testing.T) { + m := runtime.HTTPBodyMarshaler{ + &runtime.JSONPb{ + OrigName: true, + }, + } + expected := "CustomContentType" + message := &httpbody.HttpBody{ + ContentType: expected, + } + res := m.ContentType() + if res != "application/json" { + t.Errorf("content type not equal (%q, %q)", res, expected) + } + res = m.ContentTypeFromMessage(message) + if res != expected { + t.Errorf("content type not equal (%q, %q)", res, expected) + } +} + +func TestHTTPBodyMarshal(t *testing.T) { + m := runtime.HTTPBodyMarshaler{ + &runtime.JSONPb{ + OrigName: true, + }, + } + expected := []byte("Some test") + message := &httpbody.HttpBody{ + Data: expected, + } + res, err := m.Marshal(message) + if err != nil { + t.Errorf("m.Marshal(%#v) failed with %v; want success", message, err) + } + if !bytes.Equal(res, expected) { + t.Errorf("Marshalled data not equal (%q, %q)", res, expected) + + } +} diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index 43fafca7c20..b7fa32e45db 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -26,14 +26,23 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler // return Internal when Marshal failed const fallback = `{"code": 13, "message": "failed to marshal error message"}` - w.Header().Del("Trailer") - w.Header().Set("Content-Type", marshaler.ContentType()) - s, ok := status.FromError(err) if !ok { s = status.New(codes.Unknown, err.Error()) } + w.Header().Del("Trailer") + + contentType := marshaler.ContentType() + // Check marshaler on run time in order to keep backwards compatability + // An interface param needs to be added to the ContentType() function on + // the Marshal interface to be able to remove this check + if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { + pb := s.Proto() + contentType = httpBodyMarshaler.ContentTypeFromMessage(pb) + } + w.Header().Set("Content-Type", contentType) + buf, merr := marshaler.Marshal(s.Proto()) if merr != nil { grpclog.Infof("Failed to marshal error message %q: %v", s.Proto(), merr) diff --git a/third_party/googleapis/README.grpc-gateway b/third_party/googleapis/README.grpc-gateway index 5c77aece630..b7d1bea36cd 100644 --- a/third_party/googleapis/README.grpc-gateway +++ b/third_party/googleapis/README.grpc-gateway @@ -12,6 +12,7 @@ Imported Files - google/api/annotations.proto - google/api/http.proto +- google/api/httpbody.proto Generated Files diff --git a/third_party/googleapis/google/api/httpbody.proto b/third_party/googleapis/google/api/httpbody.proto new file mode 100644 index 00000000000..4428515c120 --- /dev/null +++ b/third_party/googleapis/google/api/httpbody.proto @@ -0,0 +1,78 @@ +// Copyright 2018 Google LLC. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/any.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; +option java_multiple_files = true; +option java_outer_classname = "HttpBodyProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Message that represents an arbitrary HTTP body. It should only be used for +// payload formats that can't be represented as JSON, such as raw binary or +// an HTML page. +// +// +// This message can be used both in streaming and non-streaming API methods in +// the request as well as the response. +// +// It can be used as a top-level request field, which is convenient if one +// wants to extract parameters from either the URL or HTTP template into the +// request fields and also want access to the raw HTTP body. +// +// Example: +// +// message GetResourceRequest { +// // A unique request id. +// string request_id = 1; +// +// // The raw HTTP body is bound to this field. +// google.api.HttpBody http_body = 2; +// } +// +// service ResourceService { +// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); +// rpc UpdateResource(google.api.HttpBody) returns +// (google.protobuf.Empty); +// } +// +// Example with streaming methods: +// +// service CaldavService { +// rpc GetCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// rpc UpdateCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// } +// +// Use of this type only changes how the request and response bodies are +// handled, all other features will continue to work unchanged. +message HttpBody { + // The HTTP Content-Type header value specifying the content type of the body. + string content_type = 1; + + // The HTTP request/response body as raw binary. + bytes data = 2; + + // Application specific response metadata. Must be set in the first response + // for streaming APIs. + repeated google.protobuf.Any extensions = 3; +} \ No newline at end of file From 8994a11b8456c37ed2145ff141b097fdb52249da Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 13 Mar 2019 11:11:20 +0000 Subject: [PATCH 0138/1518] Revert "Use collectionFormat multi for query params of repeated fields (#902)" This reverts commit 2b6cab672e62c65a1bbe3a7c835c7273607e795a. It was found to have introduced a swagger spec violation, see #906. --- .../abe/a_bit_of_everything_service_api.go | 8 +- .../a_bit_of_everything.swagger.json | 81 ++++++---------- .../response_body_service.swagger.json | 12 +-- examples/proto/examplepb/stream.swagger.json | 21 ++--- protoc-gen-swagger/genswagger/template.go | 20 ++-- .../genswagger/template_test.go | 94 ++++++++----------- protoc-gen-swagger/genswagger/types.go | 1 - 7 files changed, 90 insertions(+), 147 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 415243210cd..ce7c5d817ba 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -595,20 +595,20 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "multi" + var repeatedStringValueCollectionFormat = "csv" localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "multi" + var repeatedEnumValueCollectionFormat = "csv" localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - var repeatedEnumAnnotationCollectionFormat = "multi" + var repeatedEnumAnnotationCollectionFormat = "csv" localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "multi" + var repeatedStringAnnotationCollectionFormat = "csv" localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 0bbb58038e2..048fa8da4b3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -328,8 +328,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } }, { "name": "oneof_string", @@ -362,8 +361,7 @@ "ZERO", "ONE" ] - }, - "collectionFormat": "multi" + } }, { "name": "repeated_enum_annotation", @@ -377,8 +375,7 @@ "ZERO", "ONE" ] - }, - "collectionFormat": "multi" + } }, { "name": "enum_value_annotation", @@ -400,8 +397,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } }, { "name": "nested_annotation.name", @@ -1530,8 +1526,7 @@ "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" - }, - "collectionFormat": "multi" + } }, "float_value": { "type": "number", @@ -1610,8 +1605,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } }, "oneof_empty": { "properties": {} @@ -1649,8 +1643,7 @@ "items": { "$ref": "#/definitions/examplepbNumericEnum" }, - "title": "repeated enum value. it is comma-separated in query", - "collectionFormat": "multi" + "title": "repeated enum value. it is comma-separated in query" }, "repeated_enum_annotation": { "type": "array", @@ -1658,8 +1651,7 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "description": "Repeated numeric enum description.", - "title": "Repeated numeric enum title", - "collectionFormat": "multi" + "title": "Repeated numeric enum title" }, "enum_value_annotation": { "$ref": "#/definitions/examplepbNumericEnum", @@ -1672,8 +1664,7 @@ "type": "string" }, "description": "Repeated string description.", - "title": "Repeated string title", - "collectionFormat": "multi" + "title": "Repeated string title" }, "repeated_nested_annotation": { "type": "array", @@ -1681,8 +1672,7 @@ "$ref": "#/definitions/ABitOfEverythingNested" }, "description": "Repeated nested object description.", - "title": "Repeated nested object title", - "collectionFormat": "multi" + "title": "Repeated nested object title" }, "nested_annotation": { "$ref": "#/definitions/ABitOfEverythingNested", @@ -1724,126 +1714,110 @@ "type": "number", "format": "float" }, - "title": "repeated values. they are comma-separated in path", - "collectionFormat": "multi" + "title": "repeated values. they are comma-separated in path" }, "path_repeated_double_value": { "type": "array", "items": { "type": "number", "format": "double" - }, - "collectionFormat": "multi" + } }, "path_repeated_int64_value": { "type": "array", "items": { "type": "string", "format": "int64" - }, - "collectionFormat": "multi" + } }, "path_repeated_uint64_value": { "type": "array", "items": { "type": "string", "format": "uint64" - }, - "collectionFormat": "multi" + } }, "path_repeated_int32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - }, - "collectionFormat": "multi" + } }, "path_repeated_fixed64_value": { "type": "array", "items": { "type": "string", "format": "uint64" - }, - "collectionFormat": "multi" + } }, "path_repeated_fixed32_value": { "type": "array", "items": { "type": "integer", "format": "int64" - }, - "collectionFormat": "multi" + } }, "path_repeated_bool_value": { "type": "array", "items": { "type": "boolean", "format": "boolean" - }, - "collectionFormat": "multi" + } }, "path_repeated_string_value": { "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } }, "path_repeated_bytes_value": { "type": "array", "items": { "type": "string", "format": "byte" - }, - "collectionFormat": "multi" + } }, "path_repeated_uint32_value": { "type": "array", "items": { "type": "integer", "format": "int64" - }, - "collectionFormat": "multi" + } }, "path_repeated_enum_value": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" - }, - "collectionFormat": "multi" + } }, "path_repeated_sfixed32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - }, - "collectionFormat": "multi" + } }, "path_repeated_sfixed64_value": { "type": "array", "items": { "type": "string", "format": "int64" - }, - "collectionFormat": "multi" + } }, "path_repeated_sint32_value": { "type": "array", "items": { "type": "integer", "format": "int32" - }, - "collectionFormat": "multi" + } }, "path_repeated_sint64_value": { "type": "array", "items": { "type": "string", "format": "int64" - }, - "collectionFormat": "multi" + } } }, "title": "ABitOfEverythingRepeated is used to validate repeated path parameter functionality" @@ -1893,8 +1867,7 @@ "items": { "type": "string" }, - "description": "The set of field mask paths.", - "collectionFormat": "multi" + "description": "The set of field mask paths." } }, "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index 3150845833c..820129e93eb 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -25,8 +25,7 @@ "type": "array", "items": { "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" - }, - "collectionFormat": "multi" + } } } }, @@ -77,8 +76,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } } } }, @@ -114,8 +112,7 @@ "type": "array", "items": { "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" - }, - "collectionFormat": "multi" + } } } }, @@ -137,8 +134,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } } } }, diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index e24bd55feb6..d67b6d24496 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -143,8 +143,7 @@ "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" - }, - "collectionFormat": "multi" + } }, "float_value": { "type": "number", @@ -223,8 +222,7 @@ "type": "array", "items": { "type": "string" - }, - "collectionFormat": "multi" + } }, "oneof_empty": { "properties": {} @@ -262,8 +260,7 @@ "items": { "$ref": "#/definitions/examplepbNumericEnum" }, - "title": "repeated enum value. it is comma-separated in query", - "collectionFormat": "multi" + "title": "repeated enum value. it is comma-separated in query" }, "repeated_enum_annotation": { "type": "array", @@ -271,8 +268,7 @@ "$ref": "#/definitions/examplepbNumericEnum" }, "description": "Repeated numeric enum description.", - "title": "Repeated numeric enum title", - "collectionFormat": "multi" + "title": "Repeated numeric enum title" }, "enum_value_annotation": { "$ref": "#/definitions/examplepbNumericEnum", @@ -285,8 +281,7 @@ "type": "string" }, "description": "Repeated string description.", - "title": "Repeated string title", - "collectionFormat": "multi" + "title": "Repeated string title" }, "repeated_nested_annotation": { "type": "array", @@ -294,8 +289,7 @@ "$ref": "#/definitions/ABitOfEverythingNested" }, "description": "Repeated nested object description.", - "title": "Repeated nested object title", - "collectionFormat": "multi" + "title": "Repeated nested object title" }, "nested_annotation": { "$ref": "#/definitions/ABitOfEverythingNested", @@ -368,8 +362,7 @@ "type": "array", "items": { "$ref": "#/definitions/protobufAny" - }, - "collectionFormat": "multi" + } } } }, diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index b4f1b9b8460..55f42093b59 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -132,14 +132,13 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } param := swaggerParameterObject{ - Description: desc, - In: "query", - Default: schema.Default, - Type: schema.Type, - Items: schema.Items, - Format: schema.Format, - CollectionFormat: schema.CollectionFormat, - Required: required, + Description: desc, + In: "query", + Default: schema.Default, + Type: schema.Type, + Items: schema.Items, + Format: schema.Format, + Required: required, } if reg.GetUseJSONNamesForFields() { @@ -424,7 +423,6 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s Type: "array", Items: (*swaggerItemsObject)(&core), }, - CollectionFormat: "multi", } case object: ret = swaggerSchemaObject{ @@ -1257,9 +1255,9 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, is } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if descriptionValue.Len() == 0 || isPackageObject { + if descriptionValue.Len() == 0 || isPackageObject { descriptionValue.Set(reflect.ValueOf(description)) - } + } } return nil } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index d2e4c05b61f..603e2ed8feb 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -58,12 +58,6 @@ func TestMessageToQueryParameters(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), Number: proto.Int32(2), }, - { - Name: proto.String("c"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), - Number: proto.Int32(3), - }, }, }, }, @@ -82,13 +76,6 @@ func TestMessageToQueryParameters(t *testing.T) { Type: "number", Format: "double", }, - swaggerParameterObject{ - Name: "c", - In: "query", - Required: false, - Type: "array", - CollectionFormat: "multi", - }, }, }, { @@ -205,10 +192,6 @@ func TestMessageToQueryParameters(t *testing.T) { if err != nil { t.Fatalf("failed to convert message to query parameters: %s", err) } - // avoid checking Items for array types - for i := range params { - params[i].Items = nil - } if !reflect.DeepEqual(params, test.Params) { t.Errorf("expected %v, got %v", test.Params, params) } @@ -1522,105 +1505,106 @@ func TestProtoComments(t *testing.T) { func TestUpdateSwaggerDataFromComments(t *testing.T) { tests := []struct { - descr string - swaggerObject interface{} - comments string - expectedError error - expectedSwaggerObject interface{} + descr string + swaggerObject interface{} + comments string + expectedError error + expectedSwaggerObject interface{} }{ { - descr: "empty comments", - swaggerObject: nil, + descr: "empty comments", + swaggerObject: nil, expectedSwaggerObject: nil, - comments: "", - expectedError: nil, + comments: "", + expectedError: nil, }, { - descr: "set field to read only", + descr: "set field to read only", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ - ReadOnly: true, + ReadOnly: true, Description: "... Output only. ...", }, - comments: "... Output only. ...", + comments: "... Output only. ...", expectedError: nil, }, { - descr: "set title", + descr: "set title", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Title: "Comment with no trailing dot", }, - comments: "Comment with no trailing dot", + comments: "Comment with no trailing dot", expectedError: nil, }, { - descr: "set description", + descr: "set description", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Description: "Comment with trailing dot.", }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { descr: "use info object", swaggerObject: &swaggerObject{ - Info: swaggerInfoObject{}, + Info: swaggerInfoObject{ + }, }, expectedSwaggerObject: &swaggerObject{ Info: swaggerInfoObject{ Description: "Comment with trailing dot.", }, }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { - descr: "multi line comment with title", + descr: "multi line comment with title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject{ - Title: "First line", + expectedSwaggerObject: &swaggerSchemaObject { + Title: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment no title", + descr: "multi line comment no title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject{ + expectedSwaggerObject: &swaggerSchemaObject { Description: "First line.\n\nSecond line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary with dot", + descr: "multi line comment with summary with dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject{ - Summary: "First line.", + expectedSwaggerObject: &swaggerOperationObject { + Summary: "First line.", Description: "Second line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", + descr: "multi line comment with summary no dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject{ - Summary: "First line", + expectedSwaggerObject: &swaggerOperationObject { + Summary: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", - swaggerObject: &schemaCore{}, + descr: "multi line comment with summary no dot", + swaggerObject: &schemaCore{}, expectedSwaggerObject: &schemaCore{}, - comments: "Any comment", - expectedError: errors.New("no description nor summary property"), + comments: "Any comment", + expectedError: errors.New("no description nor summary property"), }, } @@ -1648,4 +1632,4 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { } }) } -} +} \ No newline at end of file diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index ddc63167db1..6599937dc69 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -224,7 +224,6 @@ type swaggerSchemaObject struct { MaxProperties uint64 `json:"maxProperties,omitempty"` MinProperties uint64 `json:"minProperties,omitempty"` Required []string `json:"required,omitempty"` - CollectionFormat string `json:"collectionFormat,omitempty"` } // http://swagger.io/specification/#referenceObject From e81e272f3e6fbdf9cd2837112cedf837191d3a3f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 13 Mar 2019 11:28:13 +0000 Subject: [PATCH 0139/1518] Generate changelog for 1.8.4 --- CHANGELOG.md | 14 +++++++++++++- Makefile | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c047bb966c0..08ac7c7d518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## [v1.8.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.4) (2019-03-13) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.3...v1.8.4) + +**Closed issues:** + +- Invalid swagger generated for bodies with repeated fields [\#906](https://github.com/grpc-ecosystem/grpc-gateway/issues/906) + +**Merged pull requests:** + +- Revert "Use collectionFormat multi for query params of repeated fields \(\#902\)" [\#907](https://github.com/grpc-ecosystem/grpc-gateway/pull/907) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- New proposal: support for the google.api.HttpBody [\#904](https://github.com/grpc-ecosystem/grpc-gateway/pull/904) ([wimspaargaren](https://github.com/wimspaargaren)) + ## [v1.8.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.3) (2019-03-11) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.2...v1.8.3) @@ -14,10 +26,10 @@ **Closed issues:** - Its impossible to send response with non 200 status code [\#901](https://github.com/grpc-ecosystem/grpc-gateway/issues/901) -- Swagger get query param documentation shows repeated fields incorrectly [\#756](https://github.com/grpc-ecosystem/grpc-gateway/issues/756) **Merged pull requests:** +- Regenerate changelog for 1.8.3 [\#903](https://github.com/grpc-ecosystem/grpc-gateway/pull/903) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Use collectionFormat multi for query params of repeated fields [\#902](https://github.com/grpc-ecosystem/grpc-gateway/pull/902) ([bmperrea](https://github.com/bmperrea)) ## [v1.8.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.2) (2019-03-07) diff --git a/Makefile b/Makefile index 4103c542012..2afdf29bd28 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.3 + --future-release=v1.8.4 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 5e6c7098c518ad6773f89a0639fd2285c132e9e1 Mon Sep 17 00:00:00 2001 From: Brent Date: Thu, 14 Mar 2019 09:47:37 -0500 Subject: [PATCH 0140/1518] CollectionFormat multi for query params of repeated fields 2 (#909) * Use collectionFormat multi for query params of repeated fields Fixes #756 . Also formats protoc-gen-swagger/genswagger/template_test.go according to go fmt. * regenerate the files * only specify multi in the method queryParams Fixes #906. * deep equal checks in TestSchemaOfField --- .../abe/a_bit_of_everything_service_api.go | 8 +- .../a_bit_of_everything.swagger.json | 12 +- protoc-gen-swagger/genswagger/template.go | 7 +- .../genswagger/template_test.go | 107 ++++++++++-------- protoc-gen-swagger/genswagger/types.go | 7 -- 5 files changed, 76 insertions(+), 65 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index ce7c5d817ba..415243210cd 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -595,20 +595,20 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "csv" + var repeatedStringValueCollectionFormat = "multi" localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "csv" + var repeatedEnumValueCollectionFormat = "multi" localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - var repeatedEnumAnnotationCollectionFormat = "csv" + var repeatedEnumAnnotationCollectionFormat = "multi" localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "csv" + var repeatedStringAnnotationCollectionFormat = "multi" localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 048fa8da4b3..952baa18492 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -328,7 +328,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, { "name": "oneof_string", @@ -361,7 +362,8 @@ "ZERO", "ONE" ] - } + }, + "collectionFormat": "multi" }, { "name": "repeated_enum_annotation", @@ -375,7 +377,8 @@ "ZERO", "ONE" ] - } + }, + "collectionFormat": "multi" }, { "name": "enum_value_annotation", @@ -397,7 +400,8 @@ "type": "array", "items": { "type": "string" - } + }, + "collectionFormat": "multi" }, { "name": "nested_annotation.name", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 55f42093b59..b802fef186d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -140,6 +140,9 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st Format: schema.Format, Required: required, } + if param.Type == "array" { + param.CollectionFormat = "multi" + } if reg.GetUseJSONNamesForFields() { param.Name = prefix + field.GetJsonName() @@ -1255,9 +1258,9 @@ func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, is } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition - if descriptionValue.Len() == 0 || isPackageObject { + if descriptionValue.Len() == 0 || isPackageObject { descriptionValue.Set(reflect.ValueOf(description)) - } + } } return nil } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 603e2ed8feb..6f14e5f268b 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -58,6 +58,12 @@ func TestMessageToQueryParameters(t *testing.T) { Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), Number: proto.Int32(2), }, + { + Name: proto.String("c"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Number: proto.Int32(3), + }, }, }, }, @@ -76,6 +82,13 @@ func TestMessageToQueryParameters(t *testing.T) { Type: "number", Format: "double", }, + swaggerParameterObject{ + Name: "c", + In: "query", + Required: false, + Type: "array", + CollectionFormat: "multi", + }, }, }, { @@ -192,6 +205,10 @@ func TestMessageToQueryParameters(t *testing.T) { if err != nil { t.Fatalf("failed to convert message to query parameters: %s", err) } + // avoid checking Items for array types + for i := range params { + params[i].Items = nil + } if !reflect.DeepEqual(params, test.Params) { t.Errorf("expected %v, got %v", test.Params, params) } @@ -1006,7 +1023,7 @@ func TestSchemaOfField(t *testing.T) { refs: make(refMap), expected: schemaCore{ Type: "string", - Format: "bytes", + Format: "byte", }, }, { @@ -1154,14 +1171,9 @@ func TestSchemaOfField(t *testing.T) { for _, test := range tests { refs := make(refMap) actual := schemaOfField(test.field, reg, refs) - if e, a := test.expected.Type, actual.Type; e != a { - t.Errorf("Expected schemaOfField(%v).Type = %s, actual: %s", test.field, e, a) - } - if e, a := test.expected.Ref, actual.Ref; e != a { - t.Errorf("Expected schemaOfField(%v).Ref = %s, actual: %s", test.field, e, a) - } - if e, a := test.expected.Items.getType(), actual.Items.getType(); e != a { - t.Errorf("Expected schemaOfField(%v).Items.Type = %v, actual.Type: %v", test.field, e, a) + expectedSchemaObject := swaggerSchemaObject{schemaCore: test.expected} + if e, a := expectedSchemaObject, actual; !reflect.DeepEqual(a, e) { + t.Errorf("Expected schemaOfField(%v) = %v, actual: %v", test.field, e, a) } if !reflect.DeepEqual(refs, test.refs) { t.Errorf("Expected schemaOfField(%v) to add refs %v, not %v", test.field, test.refs, refs) @@ -1505,106 +1517,105 @@ func TestProtoComments(t *testing.T) { func TestUpdateSwaggerDataFromComments(t *testing.T) { tests := []struct { - descr string - swaggerObject interface{} - comments string - expectedError error - expectedSwaggerObject interface{} + descr string + swaggerObject interface{} + comments string + expectedError error + expectedSwaggerObject interface{} }{ { - descr: "empty comments", - swaggerObject: nil, + descr: "empty comments", + swaggerObject: nil, expectedSwaggerObject: nil, - comments: "", - expectedError: nil, + comments: "", + expectedError: nil, }, { - descr: "set field to read only", + descr: "set field to read only", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ - ReadOnly: true, + ReadOnly: true, Description: "... Output only. ...", }, - comments: "... Output only. ...", + comments: "... Output only. ...", expectedError: nil, }, { - descr: "set title", + descr: "set title", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Title: "Comment with no trailing dot", }, - comments: "Comment with no trailing dot", + comments: "Comment with no trailing dot", expectedError: nil, }, { - descr: "set description", + descr: "set description", swaggerObject: &swaggerSchemaObject{}, expectedSwaggerObject: &swaggerSchemaObject{ Description: "Comment with trailing dot.", }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { descr: "use info object", swaggerObject: &swaggerObject{ - Info: swaggerInfoObject{ - }, + Info: swaggerInfoObject{}, }, expectedSwaggerObject: &swaggerObject{ Info: swaggerInfoObject{ Description: "Comment with trailing dot.", }, }, - comments: "Comment with trailing dot.", + comments: "Comment with trailing dot.", expectedError: nil, }, { - descr: "multi line comment with title", + descr: "multi line comment with title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject { - Title: "First line", + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment no title", + descr: "multi line comment no title", swaggerObject: &swaggerSchemaObject{}, - expectedSwaggerObject: &swaggerSchemaObject { + expectedSwaggerObject: &swaggerSchemaObject{ Description: "First line.\n\nSecond line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary with dot", + descr: "multi line comment with summary with dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject { - Summary: "First line.", + expectedSwaggerObject: &swaggerOperationObject{ + Summary: "First line.", Description: "Second line", }, - comments: "First line.\n\nSecond line", + comments: "First line.\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", + descr: "multi line comment with summary no dot", swaggerObject: &swaggerOperationObject{}, - expectedSwaggerObject: &swaggerOperationObject { - Summary: "First line", + expectedSwaggerObject: &swaggerOperationObject{ + Summary: "First line", Description: "Second line", }, - comments: "First line\n\nSecond line", + comments: "First line\n\nSecond line", expectedError: nil, }, { - descr: "multi line comment with summary no dot", - swaggerObject: &schemaCore{}, + descr: "multi line comment with summary no dot", + swaggerObject: &schemaCore{}, expectedSwaggerObject: &schemaCore{}, - comments: "Any comment", - expectedError: errors.New("no description nor summary property"), + comments: "Any comment", + expectedError: errors.New("no description nor summary property"), }, } @@ -1632,4 +1643,4 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { } }) } -} \ No newline at end of file +} diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 6599937dc69..66aaf177d23 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -150,13 +150,6 @@ type schemaCore struct { type swaggerItemsObject schemaCore -func (o *swaggerItemsObject) getType() string { - if o == nil { - return "" - } - return o.Type -} - // http://swagger.io/specification/#responsesObject type swaggerResponsesObject map[string]swaggerResponseObject From 20f268a412e5b342ebfb1a0eef7c3b7bd6c260ea Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 Mar 2019 09:51:02 +0000 Subject: [PATCH 0141/1518] Generate changelog for 1.8.5 --- CHANGELOG.md | 22 +++++++++++++++++----- Makefile | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08ac7c7d518..5dd1f3ee2f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-03-15) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.4...v1.8.5) + +**Closed issues:** + +- Swagger get query param documentation shows repeated fields incorrectly [\#756](https://github.com/grpc-ecosystem/grpc-gateway/issues/756) + +**Merged pull requests:** + +- CollectionFormat multi for query params of repeated fields 2 [\#909](https://github.com/grpc-ecosystem/grpc-gateway/pull/909) ([bmperrea](https://github.com/bmperrea)) + ## [v1.8.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.4) (2019-03-13) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.3...v1.8.4) @@ -9,6 +20,7 @@ **Merged pull requests:** +- Generate changelog for 1.8.4 [\#908](https://github.com/grpc-ecosystem/grpc-gateway/pull/908) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Revert "Use collectionFormat multi for query params of repeated fields \(\#902\)" [\#907](https://github.com/grpc-ecosystem/grpc-gateway/pull/907) ([johanbrandhorst](https://github.com/johanbrandhorst)) - New proposal: support for the google.api.HttpBody [\#904](https://github.com/grpc-ecosystem/grpc-gateway/pull/904) ([wimspaargaren](https://github.com/wimspaargaren)) @@ -439,7 +451,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) **Implemented enhancements:** @@ -496,11 +508,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) - ## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) + +## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) **Closed issues:** diff --git a/Makefile b/Makefile index 2afdf29bd28..c6428554a5f 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.4 + --future-release=v1.8.5 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 01b57e6642262f092a9c2b7c38a54b63295ae549 Mon Sep 17 00:00:00 2001 From: brycematheson1234 <44283277+brycematheson1234@users.noreply.github.com> Date: Wed, 27 Mar 2019 19:40:02 +1100 Subject: [PATCH 0142/1518] Fixed empty path bug (#913) * Removed / from list of disallowed first tokens Fixes #414 * Changed functionality to allow / * Formatting change --- protoc-gen-grpc-gateway/httprule/parse.go | 2 +- protoc-gen-grpc-gateway/httprule/parse_test.go | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/httprule/parse.go b/protoc-gen-grpc-gateway/httprule/parse.go index 3be742685c6..f933cd85ef2 100644 --- a/protoc-gen-grpc-gateway/httprule/parse.go +++ b/protoc-gen-grpc-gateway/httprule/parse.go @@ -232,7 +232,7 @@ func (p *parser) accept(term termType) (string, error) { t := p.tokens[0] switch term { case "/", "*", "**", ".", "=", "{", "}": - if t != string(term) { + if t != string(term) && t != "/" { return "", fmt.Errorf("expected %q but got %q", term, t) } case typeEOF: diff --git a/protoc-gen-grpc-gateway/httprule/parse_test.go b/protoc-gen-grpc-gateway/httprule/parse_test.go index 6a49c712d62..6508e820c5a 100644 --- a/protoc-gen-grpc-gateway/httprule/parse_test.go +++ b/protoc-gen-grpc-gateway/httprule/parse_test.go @@ -113,6 +113,12 @@ func TestParseSegments(t *testing.T) { literal("v1"), }, }, + { + tokens: []string{"/", eof}, + want: []segment{ + wildcard{}, + }, + }, { tokens: []string{"-._~!$&'()*+,;=:@", eof}, want: []segment{ @@ -247,7 +253,7 @@ func TestParseSegmentsWithErrors(t *testing.T) { }{ { // double slash - tokens: []string{"/", eof}, + tokens: []string{"//", eof}, }, { // invalid literal From 79ff520b46091f8148bafeafd6e798826d6d47c2 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Sun, 31 Mar 2019 01:18:29 -0600 Subject: [PATCH 0143/1518] Make gazelle diffs fail the build --- .circleci/config.yml | 2 +- runtime/BUILD.bazel | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 964063f8f1e..373948713d4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -64,7 +64,7 @@ jobs: EOF - run: name: Check that Bazel BUILD files are up-to-date - command: 'bazel run //:gazelle || + command: 'bazel run //:gazelle -- --mode=diff || (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle\`" >&2; exit 1)' - run: name: Run tests with Bazel diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index c99f83e5851..20862228ef8 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -11,6 +11,7 @@ go_library( "errors.go", "fieldmask.go", "handler.go", + "marshal_httpbodyproto.go", "marshal_json.go", "marshal_jsonpb.go", "marshal_proto.go", @@ -29,6 +30,7 @@ go_library( "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", + "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", @@ -49,6 +51,7 @@ go_test( "errors_test.go", "fieldmask_test.go", "handler_test.go", + "marshal_httpbodyproto_test.go", "marshal_json_test.go", "marshal_jsonpb_test.go", "marshal_proto_test.go", @@ -65,6 +68,7 @@ go_test( "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", + "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", From 52a539ec166cf7380660e9c7ebde5206169d385d Mon Sep 17 00:00:00 2001 From: Paul Cody Johnston Date: Sun, 14 Apr 2019 16:19:32 -0600 Subject: [PATCH 0144/1518] Delete redundant load statement --- WORKSPACE | 1 - 1 file changed, 1 deletion(-) diff --git a/WORKSPACE b/WORKSPACE index 7c2f93819b5..4084128959d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,6 +1,5 @@ workspace(name = "grpc_ecosystem_grpc_gateway") -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( From 5df65325d29cf25394672a51be0449fb6da420e5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 7 May 2019 16:35:22 +0100 Subject: [PATCH 0145/1518] Generate changelog for 1.8.6 --- CHANGELOG.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dd1f3ee2f6..8124fdf36a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-05-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.5...v1.8.5) + +**Fixed bugs:** + +- can't specify an empty path? [\#414](https://github.com/grpc-ecosystem/grpc-gateway/issues/414) + +**Closed issues:** + +- JSON stream response not available [\#926](https://github.com/grpc-ecosystem/grpc-gateway/issues/926) +- why google/api/http.proto annotations.proto Field Numbers is 72295728 ? [\#925](https://github.com/grpc-ecosystem/grpc-gateway/issues/925) +- Documentation: 'base\_path' Swagger attribute confuses users [\#918](https://github.com/grpc-ecosystem/grpc-gateway/issues/918) +- go get: error loading module requirements go 1.11 [\#915](https://github.com/grpc-ecosystem/grpc-gateway/issues/915) +- gateway generation issue on windows [\#911](https://github.com/grpc-ecosystem/grpc-gateway/issues/911) + +**Merged pull requests:** + +- Delete redundant load statement [\#922](https://github.com/grpc-ecosystem/grpc-gateway/pull/922) ([pcj](https://github.com/pcj)) +- Make gazelle diffs fail the build [\#916](https://github.com/grpc-ecosystem/grpc-gateway/pull/916) ([achew22](https://github.com/achew22)) +- Fixed empty path bug [\#913](https://github.com/grpc-ecosystem/grpc-gateway/pull/913) ([brycematheson1234](https://github.com/brycematheson1234)) + ## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-03-15) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.4...v1.8.5) @@ -9,6 +30,7 @@ **Merged pull requests:** +- Generate changelog for 1.8.5 [\#910](https://github.com/grpc-ecosystem/grpc-gateway/pull/910) ([johanbrandhorst](https://github.com/johanbrandhorst)) - CollectionFormat multi for query params of repeated fields 2 [\#909](https://github.com/grpc-ecosystem/grpc-gateway/pull/909) ([bmperrea](https://github.com/bmperrea)) ## [v1.8.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.4) (2019-03-13) @@ -778,7 +800,7 @@ - Method parameter in query string [\#6](https://github.com/grpc-ecosystem/grpc-gateway/issues/6) - Integrate authentication [\#4](https://github.com/grpc-ecosystem/grpc-gateway/issues/4) - Add swagger support [\#68](https://github.com/grpc-ecosystem/grpc-gateway/pull/68) ([achew22](https://github.com/achew22)) -- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([peter-edge](https://github.com/peter-edge)) +- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([pedgeio](https://github.com/pedgeio)) **Fixed bugs:** @@ -888,15 +910,15 @@ - Fix broken test [\#76](https://github.com/grpc-ecosystem/grpc-gateway/pull/76) ([yugui](https://github.com/yugui)) - Added missing instruction line in README [\#75](https://github.com/grpc-ecosystem/grpc-gateway/pull/75) ([betrcode](https://github.com/betrcode)) - Fix a complie error in generated go files [\#71](https://github.com/grpc-ecosystem/grpc-gateway/pull/71) ([yugui](https://github.com/yugui)) -- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([peter-edge](https://github.com/peter-edge)) +- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([pedgeio](https://github.com/pedgeio)) - Bugfix/handling headers for `Authorization` and `Host` [\#65](https://github.com/grpc-ecosystem/grpc-gateway/pull/65) ([mwitkow](https://github.com/mwitkow)) - Fix `error` field always in chunk response [\#64](https://github.com/grpc-ecosystem/grpc-gateway/pull/64) ([mwitkow](https://github.com/mwitkow)) - Update .pb.go to latest version. [\#63](https://github.com/grpc-ecosystem/grpc-gateway/pull/63) ([johansja](https://github.com/johansja)) - Run more tests in Travis CI [\#60](https://github.com/grpc-ecosystem/grpc-gateway/pull/60) ([yugui](https://github.com/yugui)) - Added http error code and error status for responseStreamChunk error [\#59](https://github.com/grpc-ecosystem/grpc-gateway/pull/59) ([kdima](https://github.com/kdima)) - Fix parsing of verb and final path component. [\#55](https://github.com/grpc-ecosystem/grpc-gateway/pull/55) ([hbchai](https://github.com/hbchai)) -- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([peter-edge](https://github.com/peter-edge)) -- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([peter-edge](https://github.com/peter-edge)) +- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([pedgeio](https://github.com/pedgeio)) +- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([pedgeio](https://github.com/pedgeio)) - Fix a build error with the latest protoc-gen-go [\#50](https://github.com/grpc-ecosystem/grpc-gateway/pull/50) ([yugui](https://github.com/yugui)) - Configure Travis CI [\#49](https://github.com/grpc-ecosystem/grpc-gateway/pull/49) ([yugui](https://github.com/yugui)) - Follow a change of go package name convention in protoc-gen-go [\#48](https://github.com/grpc-ecosystem/grpc-gateway/pull/48) ([yugui](https://github.com/yugui)) From ab421d1d9e82e23044ee68caafe64fa072a49950 Mon Sep 17 00:00:00 2001 From: Elena Deneva Date: Thu, 18 Apr 2019 13:59:55 +0200 Subject: [PATCH 0146/1518] Run proto gen swagger with protos from external repository Currently the protoc_gen_swagger doesn't work with protos from external repositories. The bazel rule because the swagger.json file is not stored at the expected place. Example if the rule for the proto @remote//proto:action_proto is passed to the protoc_gen_swagger, the action.swagger.json file is written to proto/action.swagger.json and is expected to be at the same place as the proto external/remote/proto/action.swagger.json. --- protoc-gen-swagger/defs.bzl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 75a055530f6..936ca4791fe 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -46,11 +46,15 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) inputs.append(grpc_api_configuration) + output_dir = ctx.bin_dir.path + if proto.owner.workspace_root: + output_dir = "/".join([output_dir, proto.owner.workspace_root]) + includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) args = actions.args() args.add("--plugin=%s" % protoc_gen_swagger.path) - args.add("--swagger_out=%s:%s" % (",".join(options), ctx.bin_dir.path)) + args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) args.add_all(["-I%s" % include for include in includes]) args.add(proto.path) From 15c7b2ea9d896c07d9b28eca57050b1ee0aea4d6 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 7 May 2019 16:51:27 +0100 Subject: [PATCH 0147/1518] Generate correct changelog version --- CHANGELOG.md | 7 ++++--- Makefile | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8124fdf36a5..606ce495162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Change Log -## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-05-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.5...v1.8.5) +## [v1.8.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.6) (2019-05-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.5...v1.8.6) **Fixed bugs:** @@ -20,6 +20,7 @@ - Delete redundant load statement [\#922](https://github.com/grpc-ecosystem/grpc-gateway/pull/922) ([pcj](https://github.com/pcj)) - Make gazelle diffs fail the build [\#916](https://github.com/grpc-ecosystem/grpc-gateway/pull/916) ([achew22](https://github.com/achew22)) - Fixed empty path bug [\#913](https://github.com/grpc-ecosystem/grpc-gateway/pull/913) ([brycematheson1234](https://github.com/brycematheson1234)) +- Use proto gen swagger with protos from external repository [\#924](https://github.com/grpc-ecosystem/grpc-gateway/pull/924) ([elenadeneva92](https://github.com/elenadeneva92)) ## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-03-15) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.4...v1.8.5) @@ -948,4 +949,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/Makefile b/Makefile index c6428554a5f..3a77f72f959 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.5 + --future-release=v1.8.6 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From f005bec61ccd1a03f4d7a5a04fd2fbc8237d50cc Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Thu, 9 May 2019 18:03:18 -0400 Subject: [PATCH 0148/1518] ability to customize stream errors (#930) * ability to customize stream errors * fix build(?); review feedback * default stream error handler; some other cleanup * don't use ProtoErrorHandlerFunc for any stream calls -- not backwards compatible * add details about stream error handler to docs --- docs/_docs/customizingyourgateway.md | 67 ++++++++++++++++++++++++++ runtime/handler.go | 72 +++++++++++++--------------- runtime/mux.go | 16 +++++++ runtime/proto_errors.go | 40 +++++++++++++++- 4 files changed, 154 insertions(+), 41 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index a8071cb1741..31b7794bd55 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -108,6 +108,73 @@ if err := http.ListenAndServe(":8080", tracingWrapper(mux)); err != nil { ## Error handler http://mycodesmells.com/post/grpc-gateway-error-handler +## Stream Error Handler +The error handler described in the previous section applies only +to RPC methods that have a unary response. + +When the method has a streaming response, grpc-gateway handles +that by emitting a newline-separated stream of "chunks". Each +chunk is an envelope that can container either a response message +or an error. Only the last chunk will include an error, and only +when the RPC handler ends abnormally (i.e. with an error code). + +Because of the way the errors are included in the response body, +the other error handler signature is insufficient. So for server +streams, you must install a _different_ error handler: + +```go +mux := runtime.NewServeMux( + runtime.WithStreamErrorHandler(handleStreamError)) +``` + +The signature of the handler is much more rigid because we need +to know the structure of the error payload in order to properly +encode the "chunk" schema into a Swagger/OpenAPI spec. + +So the function must return a `*runtime.StreamError`. The handler +can choose to omit some fields and can filter/transform the original +error, such as stripping stack traces from error messages. + +Here's an example custom handler: +```go +// handleStreamError overrides default behavior for computing an error +// message for a server stream. +// +// It uses a default "502 Bad Gateway" HTTP code; only emits "safe" +// messages; and does not set gRPC code or details fields (so they will +// be omitted from the resulting JSON object that is sent to client). +func handleStreamError(ctx context.Context, err error) *runtime.StreamError { + code := http.StatusBadGateway + msg := "unexpected error" + if s, ok := status.FromError(err); ok { + code = runtime.HTTPStatusFromCode(s.Code()) + // default message, based on the name of the gRPC code + msg = code.String() + // see if error details include "safe" message to send + // to external callers + for _, msg := s.Details() { + if safe, ok := msg.(*SafeMessage); ok { + msg = safe.Text + break + } + } + } + return &runtime.StreamError{ + HttpCode: int32(code), + HttpStatus: http.StatusText(code), + Message: msg, + } +} +``` + +If no custom handler is provided, the default stream error handler +will include any gRPC error attributes (code, message, detail messages), +if the error being reported includes them. If the error does not have +these attributes, a gRPC code of `Unknown` (2) is reported. The default +handler will also include an HTTP code and status, which is derived +from the gRPC code (or set to `"500 Internal Server Error"` when +the source error has no gRPC attributes). + ## Replace a response forwarder per method You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. diff --git a/runtime/handler.go b/runtime/handler.go index 1fc63f7f58b..2af900650dc 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -1,6 +1,7 @@ package runtime import ( + "errors" "fmt" "io" "net/http" @@ -8,13 +9,12 @@ import ( "context" "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/internal" - "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/status" ) +var errEmptyResponse = errors.New("empty response") + // ForwardResponseStream forwards the stream from gRPC server to REST client. func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { f, ok := w.(http.Flusher) @@ -53,18 +53,18 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal return } if err != nil { - handleForwardResponseStreamError(wroteHeader, marshaler, w, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) return } if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { - handleForwardResponseStreamError(wroteHeader, marshaler, w, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) return } - buf, err := marshaler.Marshal(streamChunk(resp, nil)) + buf, err := marshaler.Marshal(streamChunk(ctx, resp, mux.streamErrorHandler)) if err != nil { grpclog.Infof("Failed to marshal response chunk: %v", err) - handleForwardResponseStreamError(wroteHeader, marshaler, w, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) return } if _, err = w.Write(buf); err != nil { @@ -124,7 +124,7 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha contentType := marshaler.ContentType() // Check marshaler on run time in order to keep backwards compatability - // An interface param needs to be added to the ContentType() function on + // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { contentType = httpBodyMarshaler.ContentTypeFromMessage(resp) @@ -168,48 +168,42 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re return nil } -func handleForwardResponseStreamError(wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, err error) { - buf, merr := marshaler.Marshal(streamChunk(nil, err)) +func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error) { + serr := streamError(ctx, mux.streamErrorHandler, err) + if !wroteHeader { + w.WriteHeader(int(serr.HttpCode)) + } + buf, merr := marshaler.Marshal(errorChunk(serr)) if merr != nil { grpclog.Infof("Failed to marshal an error: %v", merr) return } - if !wroteHeader { - s, ok := status.FromError(err) - if !ok { - s = status.New(codes.Unknown, err.Error()) - } - w.WriteHeader(HTTPStatusFromCode(s.Code())) - } if _, werr := w.Write(buf); werr != nil { grpclog.Infof("Failed to notify error to client: %v", werr) return } } -func streamChunk(result proto.Message, err error) map[string]proto.Message { - if err != nil { - grpcCode := codes.Unknown - grpcMessage := err.Error() - var grpcDetails []*any.Any - if s, ok := status.FromError(err); ok { - grpcCode = s.Code() - grpcMessage = s.Message() - grpcDetails = s.Proto().GetDetails() - } - httpCode := HTTPStatusFromCode(grpcCode) - return map[string]proto.Message{ - "error": &internal.StreamError{ - GrpcCode: int32(grpcCode), - HttpCode: int32(httpCode), - Message: grpcMessage, - HttpStatus: http.StatusText(httpCode), - Details: grpcDetails, - }, - } - } +// streamChunk returns a chunk in a response stream for the given result. The +// given errHandler is used to render an error chunk if result is nil. +func streamChunk(ctx context.Context, result proto.Message, errHandler StreamErrorHandlerFunc) map[string]proto.Message { if result == nil { - return streamChunk(nil, fmt.Errorf("empty response")) + return errorChunk(streamError(ctx, errHandler, errEmptyResponse)) } return map[string]proto.Message{"result": result} } + +// streamError returns the payload for the final message in a response stream +// that represents the given err. +func streamError(ctx context.Context, errHandler StreamErrorHandlerFunc, err error) *StreamError { + serr := errHandler(ctx, err) + if serr != nil { + return serr + } + // TODO: log about misbehaving stream error handler? + return DefaultHTTPStreamErrorHandler(ctx, err) +} + +func errorChunk(err *StreamError) map[string]proto.Message { + return map[string]proto.Message{"error": (*internal.StreamError)(err)} +} diff --git a/runtime/mux.go b/runtime/mux.go index ec81e55b5ef..80f14314002 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -26,6 +26,7 @@ type ServeMux struct { incomingHeaderMatcher HeaderMatcherFunc outgoingHeaderMatcher HeaderMatcherFunc metadataAnnotators []func(context.Context, *http.Request) metadata.MD + streamErrorHandler StreamErrorHandlerFunc protoErrorHandler ProtoErrorHandlerFunc disablePathLengthFallback bool } @@ -110,12 +111,27 @@ func WithDisablePathLengthFallback() ServeMuxOption { } } +// WithStreamErrorHandler returns a ServeMuxOption that will use the given custom stream +// error handler, which allows for customizing the error trailer for server-streaming +// calls. +// +// For stream errors that occur before any response has been written, the mux's +// ProtoErrorHandler will be invoked. However, once data has been written, the errors must +// be handled differently: they must be included in the response body. The response body's +// final message will include the error details returned by the stream error handler. +func WithStreamErrorHandler(fn StreamErrorHandlerFunc) ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.streamErrorHandler = fn + } +} + // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ handlers: make(map[string][]handler), forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), marshalers: makeMarshalerMIMERegistry(), + streamErrorHandler: DefaultHTTPStreamErrorHandler, } for _, opt := range opts { diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index b7fa32e45db..ca76324efb1 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -1,15 +1,25 @@ package runtime import ( + "context" "io" "net/http" - "context" + "github.com/golang/protobuf/ptypes/any" + "github.com/grpc-ecosystem/grpc-gateway/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) +// StreamErrorHandlerFunc accepts an error as a gRPC error generated via status package and translates it into a +// a proto struct used to represent error at the end of a stream. +type StreamErrorHandlerFunc func(context.Context, error) *StreamError + +// StreamError is the payload for the final message in a server stream in the event that the server returns an +// error after a response message has already been sent. +type StreamError internal.StreamError + // ProtoErrorHandlerFunc handles the error as a gRPC error generated via status package and replies to the request. type ProtoErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error) @@ -35,7 +45,7 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler contentType := marshaler.ContentType() // Check marshaler on run time in order to keep backwards compatability - // An interface param needs to be added to the ContentType() function on + // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { pb := s.Proto() @@ -68,3 +78,29 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler handleForwardResponseTrailer(w, md) } + +// DefaultHTTPStreamErrorHandler converts the given err into a *StreamError via +// default logic. +// +// It extracts the gRPC status from err if possible. The fields of the status are +// used to populate the returned StreamError, and the HTTP status code is derived +// from the gRPC code via HTTPStatusFromCode. If the given err does not contain a +// gRPC status, an "Unknown" gRPC code is used and "Internal Server Error" HTTP code. +func DefaultHTTPStreamErrorHandler(_ context.Context, err error) *StreamError { + grpcCode := codes.Unknown + grpcMessage := err.Error() + var grpcDetails []*any.Any + if s, ok := status.FromError(err); ok { + grpcCode = s.Code() + grpcMessage = s.Message() + grpcDetails = s.Proto().GetDetails() + } + httpCode := HTTPStatusFromCode(grpcCode) + return &StreamError{ + GrpcCode: int32(grpcCode), + HttpCode: int32(httpCode), + Message: grpcMessage, + HttpStatus: http.StatusText(httpCode), + Details: grpcDetails, + } +} From e178b56f941846f453f1b92559112de9935cd384 Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Fri, 10 May 2019 03:24:12 -0400 Subject: [PATCH 0149/1518] newline between JSON messages (#931) * newline between JSON messages from JSONPb.Encode * use j.Delimiter() * fix jsonpb tests --- runtime/marshal_jsonpb.go | 10 +++++++++- runtime/marshal_jsonpb_test.go | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 3530dddd0aa..2fbb2628727 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -151,7 +151,15 @@ func (d DecoderWrapper) Decode(v interface{}) error { // NewEncoder returns an Encoder which writes JSON stream into "w". func (j *JSONPb) NewEncoder(w io.Writer) Encoder { - return EncoderFunc(func(v interface{}) error { return j.marshalTo(w, v) }) + return EncoderFunc(func(v interface{}) error { + if err := j.marshalTo(w, v); err != nil { + return err + } + // mimic json.Encoder by adding a newline (makes output + // easier to read when it contains multiple encoded items) + _, err := w.Write(j.Delimiter()) + return err + }) } func unmarshalJSONPb(data []byte, v interface{}) error { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 77da0550b6c..00590e94401 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -278,6 +278,9 @@ func TestJSONPbEncoder(t *testing.T) { }{ { verifier: func(json string) { + // remove trailing delimiter before verifying + json = strings.TrimSuffix(json, "\n") + if strings.ContainsAny(json, " \t\r\n") { t.Errorf("strings.ContainsAny(%q, %q) = true; want false", json, " \t\r\n") } @@ -356,7 +359,7 @@ func TestJSONPbEncoderFields(t *testing.T) { if err := enc.Encode(fixt.data); err != nil { t.Errorf("enc.Encode(%#v) failed with %v; want success", fixt.data, err) } - if got, want := buf.String(), fixt.json; got != want { + if got, want := buf.String(), fixt.json + string(m.Delimiter()); got != want { t.Errorf("enc.Encode(%#v) = %q; want %q", fixt.data, got, want) } } From 4ff41eed6f4ac56098f2adda458a5dacb94a70e4 Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Mon, 13 May 2019 12:26:38 -0400 Subject: [PATCH 0150/1518] use error value for bad URI so custom error handler could treat it special (#932) * use error value for bad URI; so custom error handler could treat it special * add test for ErrUnknownURI being distinct from other 'unimplemented' errors * use status.Convert instead of status.FromError --- runtime/mux.go | 17 +++++++++----- runtime/mux_test.go | 57 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 80f14314002..093373a204a 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -16,6 +16,14 @@ import ( // A HandlerFunc handles a specific pair of path pattern and HTTP method. type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) +// ErrUnknownURI is the error supplied to a custom ProtoErrorHandlerFunc when +// a request is received with a URI path that does not match any registered +// service method. +// +// Since gRPC servers return an "Unimplemented" code for requests with an +// unrecognized URI path, this error also has a gRPC "Unimplemented" code. +var ErrUnknownURI = status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented)) + // ServeMux is a request multiplexer for grpc-gateway. // It matches http requests to patterns and invokes the corresponding handler. type ServeMux struct { @@ -190,8 +198,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { if idx := strings.LastIndex(components[l-1], ":"); idx == 0 { if s.protoErrorHandler != nil { _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented)) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) + s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) } else { OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) } @@ -251,8 +258,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { } if s.protoErrorHandler != nil { _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusMethodNotAllowed)) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) + s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) } else { OtherErrorHandler(w, r, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) } @@ -262,8 +268,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { if s.protoErrorHandler != nil { _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented)) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) + s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) } else { OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) } diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 08ed6cc6806..e033091a885 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -2,6 +2,7 @@ package runtime_test import ( "bytes" + "context" "fmt" "net/http" "net/http/httptest" @@ -9,6 +10,8 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) func TestMuxServeHTTP(t *testing.T) { @@ -29,6 +32,7 @@ func TestMuxServeHTTP(t *testing.T) { respContent string disablePathLengthFallback bool + errHandler runtime.ProtoErrorHandlerFunc }{ { patterns: nil, @@ -239,11 +243,46 @@ func TestMuxServeHTTP(t *testing.T) { respStatus: http.StatusOK, respContent: "GET /foo/{id=*}:verb", }, + { + // mux identifying invalid path results in 'Not Found' status + // (with custom handler looking for ErrUnknownURI) + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"unimplemented"}, + }, + }, + reqMethod: "GET", + reqPath: "/foobar", + respStatus: http.StatusNotFound, + respContent: "GET /foobar", + errHandler: unknownPathIs404, + }, + { + // server returning unimplemented results in 'Not Implemented' code + // even when using custom error handler + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"unimplemented"}, + }, + }, + reqMethod: "GET", + reqPath: "/unimplemented", + respStatus: http.StatusNotImplemented, + respContent: `GET /unimplemented`, + errHandler: unknownPathIs404, + }, } { var opts []runtime.ServeMuxOption if spec.disablePathLengthFallback { opts = append(opts, runtime.WithDisablePathLengthFallback()) } + if spec.errHandler != nil { + opts = append(opts, runtime.WithProtoErrorHandler(spec.errHandler)) + } mux := runtime.NewServeMux(opts...) for _, p := range spec.patterns { func(p stubPattern) { @@ -252,6 +291,13 @@ func TestMuxServeHTTP(t *testing.T) { t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) } mux.Handle(p.method, pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { + if r.URL.Path == "/unimplemented" { + // simulate method returning "unimplemented" error + _, m := runtime.MarshalerForRequest(mux, r) + runtime.HTTPError(r.Context(), mux, m, w, r, status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented))) + w.WriteHeader(http.StatusNotImplemented) + return + } fmt.Fprintf(w, "%s %s", p.method, pat.String()) }) }(p) @@ -279,6 +325,17 @@ func TestMuxServeHTTP(t *testing.T) { } } +func unknownPathIs404(ctx context.Context, mux *runtime.ServeMux, m runtime.Marshaler, w http.ResponseWriter, r *http.Request, err error) { + if err == runtime.ErrUnknownURI { + w.WriteHeader(http.StatusNotFound) + } else { + c := status.Convert(err).Code() + w.WriteHeader(runtime.HTTPStatusFromCode(c)) + } + + fmt.Fprintf(w, "%s %s", r.Method, r.URL.Path) +} + var defaultHeaderMatcherTests = []struct { name string in string From 8fd5fd9d19ce68183a6b0934519dfe7fe6269612 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 14 May 2019 09:42:49 +0100 Subject: [PATCH 0151/1518] Generate changelog for 1.9.0 --- CHANGELOG.md | 29 ++++++++++++++++++++++------- Makefile | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 606ce495162..c60c86475e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## [v1.9.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.0) (2019-05-14) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.6...v1.9.0) + +**Closed issues:** + +- Errors in response streams do not go through the registered error handler [\#584](https://github.com/grpc-ecosystem/grpc-gateway/issues/584) + +**Merged pull requests:** + +- use error value for bad URI so custom error handler could treat it special [\#932](https://github.com/grpc-ecosystem/grpc-gateway/pull/932) ([jhump](https://github.com/jhump)) +- newline between JSON messages [\#931](https://github.com/grpc-ecosystem/grpc-gateway/pull/931) ([jhump](https://github.com/jhump)) +- ability to customize stream errors [\#930](https://github.com/grpc-ecosystem/grpc-gateway/pull/930) ([jhump](https://github.com/jhump)) + ## [v1.8.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.6) (2019-05-07) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.5...v1.8.6) @@ -17,10 +30,12 @@ **Merged pull requests:** +- Generate correct changelog version [\#929](https://github.com/grpc-ecosystem/grpc-gateway/pull/929) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.8.6 [\#928](https://github.com/grpc-ecosystem/grpc-gateway/pull/928) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Use proto gen swagger with protos from external repository [\#924](https://github.com/grpc-ecosystem/grpc-gateway/pull/924) ([elenadeneva92](https://github.com/elenadeneva92)) - Delete redundant load statement [\#922](https://github.com/grpc-ecosystem/grpc-gateway/pull/922) ([pcj](https://github.com/pcj)) - Make gazelle diffs fail the build [\#916](https://github.com/grpc-ecosystem/grpc-gateway/pull/916) ([achew22](https://github.com/achew22)) - Fixed empty path bug [\#913](https://github.com/grpc-ecosystem/grpc-gateway/pull/913) ([brycematheson1234](https://github.com/brycematheson1234)) -- Use proto gen swagger with protos from external repository [\#924](https://github.com/grpc-ecosystem/grpc-gateway/pull/924) ([elenadeneva92](https://github.com/elenadeneva92)) ## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-03-15) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.4...v1.8.5) @@ -474,7 +489,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) **Implemented enhancements:** @@ -531,11 +546,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) - ## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) + +## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) **Closed issues:** @@ -949,4 +964,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Makefile b/Makefile index 3a77f72f959..7875c2d738f 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.8.6 + --future-release=v1.9.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From b5f6fca70e912fb65866e4bb801c5c16b40e3fcc Mon Sep 17 00:00:00 2001 From: Emil Aasa Date: Tue, 14 May 2019 19:38:07 +0200 Subject: [PATCH 0152/1518] Fix make test on MacOS make test errors out on MacOS because it uses bsd find instead of gnu find which is standard in most Linux distributions. The fix just provides an explicit folder . which bsd find requires but gnu find has as default. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7875c2d738f..ad9b85daec5 100644 --- a/Makefile +++ b/Makefile @@ -177,7 +177,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) - find -type f -name *.go -exec sed -s -i 's;github.com/go-resty/resty;gopkg.in/resty.v1;g' {} + + find . -type f -name *.go -exec sed -s -i 's;github.com/go-resty/resty;gopkg.in/resty.v1;g' {} + test: examples go test -race ... go test -race examples/integration -args -network=unix -endpoint=test.sock From e6f18d33a7b3bfa5b94f3d5fb513252184ce2d90 Mon Sep 17 00:00:00 2001 From: mingqing Date: Sun, 26 May 2019 15:08:02 +0800 Subject: [PATCH 0153/1518] fix query params not populate if method is post (#939) * fix query params not populate if method is post * regenerate example files. * fix go.mod * use req.From instead of req.PostForm to avoid missing url params in post method * regenerate example files * add test case and regenerate example files * adjust to use subtests and remove confused variable * use an explicit test name instead of the auto index * rename local var url to apiURL avoid conflict with net/url --- .../abe/a_bit_of_everything_service_api.go | 221 ++++++++ examples/integration/integration_test.go | 268 ++++++---- .../proto/examplepb/a_bit_of_everything.pb.go | 502 ++++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 157 +++++- .../proto/examplepb/a_bit_of_everything.proto | 11 + .../a_bit_of_everything.swagger.json | 355 +++++++++++++ .../proto/examplepb/echo_service.pb.gw.go | 30 +- .../proto/examplepb/flow_combination.pb.gw.go | 80 ++- .../unannotated_echo_service.pb.gw.go | 15 +- examples/server/a_bit_of_everything.go | 8 + .../gengateway/template.go | 5 +- 11 files changed, 1310 insertions(+), 342 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 415243210cd..f4fe7b6f87e 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -38,6 +38,227 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin } } +/** + * + * + * @param singleNestedName name is nested field. + * @param floatValue Float value field + * @param singleNestedAmount + * @param singleNestedOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param uuid + * @param doubleValue + * @param int64Value + * @param uint64Value + * @param int32Value + * @param fixed64Value + * @param fixed32Value + * @param boolValue + * @param stringValue + * @param bytesValue + * @param uint32Value + * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param pathEnumValue + * @param nestedPathEnumValue + * @param sfixed32Value + * @param sfixed64Value + * @param sint32Value + * @param sint64Value + * @param repeatedStringValue + * @param oneofString + * @param nonConventionalNameValue + * @param timestampValue + * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedStringAnnotation Repeated string title. Repeated string description. + * @param nestedAnnotationAmount + * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @return *ExamplepbABitOfEverything + */ +func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, floatValue float32, singleNestedAmount int64, singleNestedOk string, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*ExamplepbABitOfEverything, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) + localVarQueryParams.Add("single_nested.ok", a.Configuration.APIClient.ParameterToString(singleNestedOk, "")) + localVarQueryParams.Add("uuid", a.Configuration.APIClient.ParameterToString(uuid, "")) + localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) + localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) + localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) + localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) + localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) + localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) + localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) + localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) + localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) + localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) + localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) + localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) + localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) + localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) + localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) + localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) + localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) + localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) + var repeatedStringValueCollectionFormat = "multi" + localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) + + localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) + localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) + localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) + var repeatedEnumValueCollectionFormat = "multi" + localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) + + var repeatedEnumAnnotationCollectionFormat = "multi" + localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) + + localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) + var repeatedStringAnnotationCollectionFormat = "multi" + localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) + + localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) + localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new(ExamplepbABitOfEverything) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "CheckGetQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + +/** + * + * + * @param stringValue + * @param body + * @return *ExamplepbABitOfEverything + */ +func (a ABitOfEverythingServiceApi) CheckPostQueryParams(stringValue string, body ABitOfEverythingNested) (*ExamplepbABitOfEverything, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Post") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/post/{string_value}" + localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + var successPayload = new(ExamplepbABitOfEverything) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "CheckPostQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + /** * Create a new ABitOfEverything * This API creates a new ABitOfEverything diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index fd1a3655a9a..62db1063785 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -9,6 +9,7 @@ import ( "io" "io/ioutil" "net/http" + "net/url" "reflect" "strconv" "strings" @@ -72,10 +73,10 @@ func TestForwardResponseOption(t *testing.T) { } func testEcho(t *testing.T, port int, contentType string) { - url := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid", port) - resp, err := http.Post(url, "application/json", strings.NewReader("{}")) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid", port) + resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -105,10 +106,10 @@ func testEcho(t *testing.T, port int, contentType string) { } func testEchoOneof(t *testing.T, port int, contentType string) { - url := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid/10/golang", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid/10/golang", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -138,10 +139,10 @@ func testEchoOneof(t *testing.T, port int, contentType string) { } func testEchoOneof1(t *testing.T, port int, contentType string) { - url := fmt.Sprintf("http://localhost:%d/v1/example/echo1/myid/10/golang", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo1/myid/10/golang", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -171,10 +172,10 @@ func testEchoOneof1(t *testing.T, port int, contentType string) { } func testEchoOneof2(t *testing.T, port int, contentType string) { - url := fmt.Sprintf("http://localhost:%d/v1/example/echo2/golang", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo2/golang", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -211,10 +212,10 @@ func testEchoBody(t *testing.T, port int) { t.Fatalf("m.MarshalToString(%#v) failed with %v; want success", payload, err) } - url := fmt.Sprintf("http://localhost:%d/v1/example/echo_body", port) - resp, err := http.Post(url, "", strings.NewReader(payload)) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo_body", port) + resp, err := http.Post(apiURL, "", strings.NewReader(payload)) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -293,11 +294,11 @@ func testABECreate(t *testing.T, port int) { NestedPathEnumValue: pathenum.MessagePathEnum_JKL, EnumValueAnnotation: gw.NumericEnum_ONE, } - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) - resp, err := http.Post(url, "application/json", strings.NewReader("{}")) + resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -373,11 +374,11 @@ func testABECreateBody(t *testing.T, port int) { "a": {Name: "x", Amount: 1}, "b": {Name: "y", Amount: 2}, }, - RepeatedEnumAnnotation: []gw.NumericEnum{ + RepeatedEnumAnnotation: []gw.NumericEnum{ gw.NumericEnum_ONE, gw.NumericEnum_ZERO, }, - EnumValueAnnotation: gw.NumericEnum_ONE, + EnumValueAnnotation: gw.NumericEnum_ONE, RepeatedStringAnnotation: []string{ "a", "b", @@ -397,16 +398,16 @@ func testABECreateBody(t *testing.T, port int) { Amount: 10, }, } - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) var m jsonpb.Marshaler payload, err := m.MarshalToString(&want) if err != nil { t.Fatalf("m.MarshalToString(%#v) failed with %v; want success", want, err) } - resp, err := http.Post(url, "application/json", strings.NewReader(payload)) + resp, err := http.Post(apiURL, "application/json", strings.NewReader(payload)) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -477,11 +478,11 @@ func testABEBulkCreate(t *testing.T, port int) { Amount: 20, }, }, - RepeatedEnumAnnotation: []gw.NumericEnum{ + RepeatedEnumAnnotation: []gw.NumericEnum{ gw.NumericEnum_ONE, gw.NumericEnum_ZERO, }, - EnumValueAnnotation: gw.NumericEnum_ONE, + EnumValueAnnotation: gw.NumericEnum_ONE, RepeatedStringAnnotation: []string{ "a", "b", @@ -512,10 +513,10 @@ func testABEBulkCreate(t *testing.T, port int) { count++ } }(w) - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/bulk", port) - resp, err := http.Post(url, "application/json", r) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/bulk", port) + resp, err := http.Post(apiURL, "application/json", r) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -549,12 +550,12 @@ func testABEBulkCreate(t *testing.T, port int) { } func testABELookup(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) - cresp, err := http.Post(url, "application/json", strings.NewReader(` + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + cresp, err := http.Post(apiURL, "application/json", strings.NewReader(` {"bool_value": true, "string_value": "strprefix/example"} `)) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer cresp.Body.Close() @@ -575,10 +576,10 @@ func testABELookup(t *testing.T, port int) { return } - url = fmt.Sprintf("%s/%s", url, want.Uuid) - resp, err := http.Get(url) + apiURL = fmt.Sprintf("%s/%s", apiURL, want.Uuid) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -744,10 +745,10 @@ func mustMarshal(t *testing.T, i interface{}) string { // postABE conveniently creates a new ABE record for ease in testing func postABE(t *testing.T, port int, abe gw.ABitOfEverything) (uuid string) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) - postResp, err := http.Post(url, "application/json", strings.NewReader(mustMarshal(t, abe))) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + postResp, err := http.Post(apiURL, "application/json", strings.NewReader(mustMarshal(t, abe))) if err != nil { - t.Fatalf("http.Post(%q) failed with %v; want success", url, err) + t.Fatalf("http.Post(%q) failed with %v; want success", apiURL, err) return } body, err := ioutil.ReadAll(postResp.Body) @@ -791,12 +792,12 @@ func getABE(t *testing.T, port int, uuid string) gw.ABitOfEverything { } func testABELookupNotFound(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) uuid := "not_exist" - url = fmt.Sprintf("%s/%s", url, uuid) - resp, err := http.Get(url) + apiURL = fmt.Sprintf("%s/%s", apiURL, uuid) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -841,10 +842,10 @@ func testABELookupNotFound(t *testing.T, port int) { } func testABEList(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -915,17 +916,17 @@ func testABEBulkEcho(t *testing.T, port int) { } }() - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo", port) - req, err := http.NewRequest("POST", url, reqr) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo", port) + req, err := http.NewRequest("POST", apiURL, reqr) if err != nil { - t.Errorf("http.NewRequest(%q, %q, reqr) failed with %v; want success", "POST", url, err) + t.Errorf("http.NewRequest(%q, %q, reqr) failed with %v; want success", "POST", apiURL, err) return } req.Header.Set("Content-Type", "application/json") req.Header.Set("Transfer-Encoding", "chunked") resp, err := http.DefaultClient.Do(req) if err != nil { - t.Errorf("http.Post(%q, %q, req) failed with %v; want success", url, "application/json", err) + t.Errorf("http.Post(%q, %q, req) failed with %v; want success", apiURL, "application/json", err) return } defer resp.Body.Close() @@ -970,17 +971,17 @@ func testABEBulkEcho(t *testing.T, port int) { } func testABEBulkEchoZeroLength(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo", port) - req, err := http.NewRequest("POST", url, bytes.NewReader(nil)) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo", port) + req, err := http.NewRequest("POST", apiURL, bytes.NewReader(nil)) if err != nil { - t.Errorf("http.NewRequest(%q, %q, bytes.NewReader(nil)) failed with %v; want success", "POST", url, err) + t.Errorf("http.NewRequest(%q, %q, bytes.NewReader(nil)) failed with %v; want success", "POST", apiURL, err) return } req.Header.Set("Content-Type", "application/json") req.Header.Set("Transfer-Encoding", "chunked") resp, err := http.DefaultClient.Do(req) if err != nil { - t.Errorf("http.Post(%q, %q, req) failed with %v; want success", url, "application/json", err) + t.Errorf("http.Post(%q, %q, req) failed with %v; want success", apiURL, "application/json", err) return } defer resp.Body.Close() @@ -1004,19 +1005,19 @@ func testABEBulkEchoZeroLength(t *testing.T, port int) { func testAdditionalBindings(t *testing.T, port int) { for i, f := range []func() *http.Response{ func() *http.Response { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo/hello", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/echo/hello", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return nil } return resp }, func() *http.Response { - url := fmt.Sprintf("http://localhost:%d/v2/example/echo", port) - resp, err := http.Post(url, "application/json", strings.NewReader(`"hello"`)) + apiURL := fmt.Sprintf("http://localhost:%d/v2/example/echo", port) + resp, err := http.Post(apiURL, "application/json", strings.NewReader(`"hello"`)) if err != nil { - t.Errorf("http.Post(%q, %q, %q) failed with %v; want success", url, "application/json", `"hello"`, err) + t.Errorf("http.Post(%q, %q, %q) failed with %v; want success", apiURL, "application/json", `"hello"`, err) return nil } return resp @@ -1027,19 +1028,19 @@ func testAdditionalBindings(t *testing.T, port int) { defer w.Close() w.Write([]byte(`"hello"`)) }() - url := fmt.Sprintf("http://localhost:%d/v2/example/echo", port) - resp, err := http.Post(url, "application/json", r) + apiURL := fmt.Sprintf("http://localhost:%d/v2/example/echo", port) + resp, err := http.Post(apiURL, "application/json", r) if err != nil { - t.Errorf("http.Post(%q, %q, %q) failed with %v; want success", url, "application/json", `"hello"`, err) + t.Errorf("http.Post(%q, %q, %q) failed with %v; want success", apiURL, "application/json", `"hello"`, err) return nil } return resp }, func() *http.Response { - url := fmt.Sprintf("http://localhost:%d/v2/example/echo?value=hello", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/v2/example/echo?value=hello", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return nil } return resp @@ -1162,11 +1163,11 @@ func testABERepeated(t *testing.T, port int) { -4611686018427387904, }, } - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything_repeated/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s", port, f(reflect.ValueOf(want.PathRepeatedFloatValue)), f(reflect.ValueOf(want.PathRepeatedDoubleValue)), f(reflect.ValueOf(want.PathRepeatedInt64Value)), f(reflect.ValueOf(want.PathRepeatedUint64Value)), f(reflect.ValueOf(want.PathRepeatedInt32Value)), f(reflect.ValueOf(want.PathRepeatedFixed64Value)), f(reflect.ValueOf(want.PathRepeatedFixed32Value)), f(reflect.ValueOf(want.PathRepeatedBoolValue)), f(reflect.ValueOf(want.PathRepeatedStringValue)), f(reflect.ValueOf(want.PathRepeatedBytesValue)), f(reflect.ValueOf(want.PathRepeatedUint32Value)), f(reflect.ValueOf(want.PathRepeatedEnumValue)), f(reflect.ValueOf(want.PathRepeatedSfixed32Value)), f(reflect.ValueOf(want.PathRepeatedSfixed64Value)), f(reflect.ValueOf(want.PathRepeatedSint32Value)), f(reflect.ValueOf(want.PathRepeatedSint64Value))) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything_repeated/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s/%s", port, f(reflect.ValueOf(want.PathRepeatedFloatValue)), f(reflect.ValueOf(want.PathRepeatedDoubleValue)), f(reflect.ValueOf(want.PathRepeatedInt64Value)), f(reflect.ValueOf(want.PathRepeatedUint64Value)), f(reflect.ValueOf(want.PathRepeatedInt32Value)), f(reflect.ValueOf(want.PathRepeatedFixed64Value)), f(reflect.ValueOf(want.PathRepeatedFixed32Value)), f(reflect.ValueOf(want.PathRepeatedBoolValue)), f(reflect.ValueOf(want.PathRepeatedStringValue)), f(reflect.ValueOf(want.PathRepeatedBytesValue)), f(reflect.ValueOf(want.PathRepeatedUint32Value)), f(reflect.ValueOf(want.PathRepeatedEnumValue)), f(reflect.ValueOf(want.PathRepeatedSfixed32Value)), f(reflect.ValueOf(want.PathRepeatedSfixed64Value)), f(reflect.ValueOf(want.PathRepeatedSint32Value)), f(reflect.ValueOf(want.PathRepeatedSint64Value))) - resp, err := http.Get(url) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1192,10 +1193,10 @@ func testABERepeated(t *testing.T, port int) { } func TestTimeout(t *testing.T) { - url := "http://localhost:8080/v2/example/timeout" - req, err := http.NewRequest("GET", url, nil) + apiURL := "http://localhost:8080/v2/example/timeout" + req, err := http.NewRequest("GET", apiURL, nil) if err != nil { - t.Errorf(`http.NewRequest("GET", %q, nil) failed with %v; want success`, url, err) + t.Errorf(`http.NewRequest("GET", %q, nil) failed with %v; want success`, apiURL, err) return } req.Header.Set("Grpc-Timeout", "10m") @@ -1212,10 +1213,10 @@ func TestTimeout(t *testing.T) { } func TestErrorWithDetails(t *testing.T) { - url := "http://localhost:8080/v2/example/errorwithdetails" - resp, err := http.Get(url) + apiURL := "http://localhost:8080/v2/example/errorwithdetails" + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1272,26 +1273,26 @@ func TestErrorWithDetails(t *testing.T) { } func TestPostWithEmptyBody(t *testing.T) { - url := "http://localhost:8080/v2/example/postwithemptybody/name" - rep, err := http.Post(url, "application/json", nil) + apiURL := "http://localhost:8080/v2/example/postwithemptybody/name" + rep, err := http.Post(apiURL, "application/json", nil) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } if rep.StatusCode != http.StatusOK { - t.Errorf("http.Post(%q) response code is %d; want %d", url, + t.Errorf("http.Post(%q) response code is %d; want %d", apiURL, rep.StatusCode, http.StatusOK) return } } func TestUnknownPath(t *testing.T) { - url := "http://localhost:8080" - resp, err := http.Post(url, "application/json", strings.NewReader("{}")) + apiURL := "http://localhost:8080" + resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1308,10 +1309,10 @@ func TestUnknownPath(t *testing.T) { } func TestMethodNotAllowed(t *testing.T) { - url := "http://localhost:8080/v1/example/echo/myid" - resp, err := http.Get(url) + apiURL := "http://localhost:8080/v1/example/echo/myid" + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1328,10 +1329,10 @@ func TestMethodNotAllowed(t *testing.T) { } func TestInvalidArgument(t *testing.T) { - url := "http://localhost:8080/v1/example/echo/myid/not_int64" - resp, err := http.Get(url) + apiURL := "http://localhost:8080/v1/example/echo/myid/not_int64" + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1359,10 +1360,10 @@ func TestResponseBody(t *testing.T) { } func testResponseBody(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/responsebody/foo", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/responsebody/foo", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1383,10 +1384,10 @@ func testResponseBody(t *testing.T, port int) { } func testResponseBodies(t *testing.T, port int) { - url := fmt.Sprintf("http://localhost:%d/responsebodies/foo", port) - resp, err := http.Get(url) + apiURL := fmt.Sprintf("http://localhost:%d/responsebodies/foo", port) + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1441,10 +1442,10 @@ func testResponseStrings(t *testing.T, port int) { }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { - url := spec.endpoint - resp, err := http.Get(url) + apiURL := spec.endpoint + resp, err := http.Get(apiURL) if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) return } defer resp.Body.Close() @@ -1466,3 +1467,80 @@ func testResponseStrings(t *testing.T, port int) { } } + +func TestRequestQueryParams(t *testing.T) { + port := 8080 + + formValues := url.Values{} + formValues.Set("string_value", "hello-world") + formValues.Add("repeated_string_value", "demo1") + formValues.Add("repeated_string_value", "demo2") + + testCases := []struct { + name string + httpMethod string + contentType string + apiURL string + wantContent string + requestContent io.Reader + }{ + { + name: "get url query values", + httpMethod: "GET", + contentType: "application/json", + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), + wantContent: `{"single_nested":{"name":"foo"},"double_value":1234.56,"bool_value":true}`, + }, + { + name: "post url query values", + httpMethod: "POST", + contentType: "application/json", + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/post/hello-world?double_value=%v&bool_value=%v", port, 1234.56, true), + wantContent: `{"single_nested":{"name":"foo","amount":100},"double_value":1234.56,"bool_value":true,"string_value":"hello-world"}`, + requestContent: strings.NewReader(`{"name":"foo","amount":100}`), + }, + { + name: "post form and url query values", + httpMethod: "POST", + contentType: "application/x-www-form-urlencoded", + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), + wantContent: `{"single_nested":{"name":"foo"},"double_value":1234.56,"bool_value":true,"string_value":"hello-world","repeated_string_value":["demo1","demo2"]}`, + requestContent: strings.NewReader(formValues.Encode()), + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + req, err := http.NewRequest(tc.httpMethod, tc.apiURL, tc.requestContent) + if err != nil { + t.Errorf("http.method (%q) http.url (%q) failed with %v; want success", tc.httpMethod, tc.apiURL, err) + return + } + + req.Header.Add("Content-Type", tc.contentType) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Errorf("http.method (%q) http.url (%q) failed with %v; want success", tc.httpMethod, tc.apiURL, err) + return + } + defer resp.Body.Close() + + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if gotCode, wantCode := resp.StatusCode, http.StatusOK; gotCode != wantCode { + t.Errorf("resp.StatusCode = %d; want %d", gotCode, wantCode) + t.Logf("%s", buf) + } + + gotContent := string(buf) + if gotContent != tc.wantContent { + t.Errorf("http.method (%q) http.url (%q) response = %q; want %q", tc.httpMethod, tc.apiURL, gotContent, tc.wantContent) + } + }) + } +} diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 7b8ee6672ef..ee105d94ed4 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -513,7 +513,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{0, 0} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -582,7 +582,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{1} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -725,7 +725,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{2} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -764,7 +764,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{3} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -811,7 +811,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_75cdf8204f309306, []int{4} + return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -897,6 +897,8 @@ type ABitOfEverythingServiceClient interface { ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) + CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) } type aBitOfEverythingServiceClient struct { @@ -1051,6 +1053,24 @@ func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, i return out, nil } +func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckGetQueryParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. type ABitOfEverythingServiceServer interface { // Create a new ABitOfEverything @@ -1079,6 +1099,8 @@ type ABitOfEverythingServiceServer interface { ErrorWithDetails(context.Context, *empty.Empty) (*empty.Empty, error) GetMessageWithBody(context.Context, *MessageWithBody) (*empty.Empty, error) PostWithEmptyBody(context.Context, *Body) (*empty.Empty, error) + CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) } func RegisterABitOfEverythingServiceServer(s *grpc.Server, srv ABitOfEverythingServiceServer) { @@ -1373,6 +1395,42 @@ func _ABitOfEverythingService_PostWithEmptyBody_Handler(srv interface{}, ctx con return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckGetQueryParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + +func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckPostQueryParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.examplepb.ABitOfEverythingService", HandlerType: (*ABitOfEverythingServiceServer)(nil), @@ -1441,6 +1499,14 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "PostWithEmptyBody", Handler: _ABitOfEverythingService_PostWithEmptyBody_Handler, }, + { + MethodName: "CheckGetQueryParams", + Handler: _ABitOfEverythingService_CheckGetQueryParams_Handler, + }, + { + MethodName: "CheckPostQueryParams", + Handler: _ABitOfEverythingService_CheckPostQueryParams_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", @@ -1575,212 +1641,216 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_75cdf8204f309306) -} - -var fileDescriptor_a_bit_of_everything_75cdf8204f309306 = []byte{ - // 3241 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x39, 0xcb, 0x6f, 0x1b, 0xc7, - 0xf9, 0x5a, 0xae, 0x9e, 0xa3, 0x17, 0x35, 0xb2, 0x65, 0x8a, 0x56, 0xa2, 0x31, 0xed, 0x24, 0x6b, - 0xc6, 0xe4, 0x4a, 0x2b, 0xd9, 0x91, 0x19, 0x24, 0xfe, 0x91, 0x7a, 0xd8, 0x8a, 0x6d, 0x59, 0x59, - 0x3b, 0xfe, 0x05, 0x8e, 0x1d, 0x61, 0x49, 0x0e, 0xc5, 0xb5, 0xb8, 0x3b, 0x9b, 0xdd, 0x59, 0xd9, - 0xac, 0xca, 0x36, 0x7d, 0xa0, 0x45, 0x9b, 0x43, 0x01, 0xa6, 0x45, 0xd1, 0x07, 0xfa, 0x17, 0xe4, - 0xda, 0x53, 0x80, 0xb6, 0x97, 0x9e, 0x7a, 0x73, 0x8b, 0xde, 0x7a, 0x6a, 0x0f, 0x3d, 0x15, 0x28, - 0x0a, 0x04, 0xe8, 0xa1, 0x45, 0xb1, 0xb3, 0xbb, 0xe4, 0xee, 0x92, 0xb4, 0x4c, 0x3b, 0xc8, 0x45, - 0xda, 0x99, 0xf9, 0xde, 0xdf, 0x37, 0xdf, 0x63, 0x08, 0x24, 0xfc, 0x58, 0xd1, 0x8c, 0x1a, 0xb6, - 0x44, 0xc3, 0x24, 0x94, 0x88, 0xde, 0xd2, 0x28, 0x8a, 0xca, 0x5e, 0x51, 0xa5, 0x7b, 0xa4, 0xb2, - 0x87, 0x0f, 0xb1, 0x59, 0xa7, 0x55, 0x55, 0xdf, 0xcf, 0x32, 0x18, 0xb8, 0xb8, 0x6f, 0x1a, 0xa5, - 0xec, 0xbe, 0x42, 0xf1, 0x23, 0xa5, 0x9e, 0xf5, 0x09, 0x64, 0x5b, 0xa8, 0xc9, 0x85, 0x7d, 0x42, - 0xf6, 0x6b, 0x58, 0x54, 0x0c, 0x55, 0x54, 0x74, 0x9d, 0x50, 0x85, 0xaa, 0x44, 0xb7, 0x5c, 0xf4, - 0x24, 0xf2, 0x4e, 0xd9, 0xaa, 0x68, 0x57, 0xc4, 0x8a, 0x8a, 0x6b, 0xe5, 0x3d, 0x4d, 0xb1, 0x0e, - 0x3c, 0x88, 0xd3, 0x51, 0x08, 0xac, 0x19, 0xb4, 0xee, 0x1d, 0xbe, 0x1c, 0x3d, 0x2c, 0xdb, 0x26, - 0xa3, 0xef, 0x9d, 0xbf, 0x16, 0xd1, 0xc8, 0x50, 0x68, 0x15, 0xeb, 0xb6, 0xc6, 0x3e, 0xf6, 0x9c, - 0x2f, 0x5f, 0x8e, 0x08, 0xa0, 0x65, 0x17, 0x45, 0x0d, 0x5b, 0x96, 0xb2, 0x8f, 0x3d, 0x88, 0x33, - 0x9d, 0x10, 0x52, 0x04, 0x64, 0x31, 0x2a, 0x0d, 0x55, 0x35, 0x6c, 0x51, 0x45, 0x33, 0x3c, 0x80, - 0x0b, 0xec, 0x5f, 0x29, 0xb3, 0x8f, 0xf5, 0x8c, 0xf5, 0x48, 0xd9, 0xdf, 0xc7, 0xa6, 0x48, 0x0c, - 0x66, 0x8f, 0x4e, 0xdb, 0xa4, 0x7e, 0x7a, 0x1a, 0xc4, 0xf3, 0x05, 0x95, 0xde, 0xaa, 0x6c, 0xb6, - 0xac, 0x0e, 0x1f, 0x80, 0x49, 0x4b, 0xd5, 0xf7, 0x6b, 0x78, 0x4f, 0xc7, 0x16, 0xc5, 0xe5, 0xc4, - 0x3c, 0xe2, 0x84, 0x71, 0x69, 0x2d, 0x7b, 0x8c, 0x1f, 0xb2, 0x51, 0x4a, 0xd9, 0x1d, 0x86, 0x2f, - 0x4f, 0xb8, 0xe4, 0xdc, 0x15, 0xac, 0x82, 0x41, 0xdb, 0x56, 0xcb, 0x09, 0x0e, 0x71, 0xc2, 0x58, - 0xe1, 0x4e, 0x33, 0xff, 0xee, 0xc7, 0x1c, 0xf7, 0x43, 0xee, 0xfa, 0x07, 0x4a, 0xa6, 0x92, 0xcf, - 0x6c, 0x2d, 0x65, 0x2e, 0x3f, 0x38, 0x5a, 0x6b, 0x64, 0x82, 0xcb, 0xd5, 0x7e, 0x96, 0xcb, 0x52, - 0x43, 0x66, 0x1c, 0xe0, 0x2e, 0x18, 0xf6, 0x34, 0x88, 0x21, 0xfe, 0x85, 0x34, 0xf0, 0xe8, 0xc0, - 0x77, 0xc0, 0x78, 0xa5, 0x46, 0x14, 0xba, 0x77, 0xa8, 0xd4, 0x6c, 0x9c, 0xe0, 0x11, 0x27, 0xc4, - 0x0a, 0xe7, 0x9b, 0xf9, 0x57, 0xa5, 0x99, 0x2d, 0x67, 0x1f, 0xb1, 0x7d, 0xc4, 0x22, 0x2c, 0xc7, - 0x2f, 0x65, 0xa5, 0x27, 0x5c, 0x10, 0x41, 0x06, 0x6c, 0x71, 0xd7, 0xf9, 0x86, 0x67, 0xc0, 0x44, - 0x99, 0xd8, 0xc5, 0x1a, 0xf6, 0x88, 0x0d, 0x22, 0x4e, 0xe0, 0xe4, 0x71, 0x77, 0xcf, 0x05, 0x59, - 0x04, 0xe3, 0xaa, 0x4e, 0x2f, 0xad, 0x7a, 0x10, 0x43, 0x88, 0x13, 0x78, 0x19, 0xb0, 0xad, 0x16, - 0x0d, 0x3b, 0x08, 0x31, 0x8c, 0x38, 0x61, 0x50, 0x1e, 0xb7, 0x03, 0x20, 0x2e, 0x8d, 0x15, 0xc9, - 0x83, 0x18, 0x41, 0x9c, 0x30, 0xc4, 0x68, 0xac, 0x48, 0x2e, 0xc0, 0x59, 0x30, 0x59, 0x51, 0x1f, - 0xe3, 0x72, 0x8b, 0xc8, 0x28, 0xe2, 0x84, 0x61, 0x79, 0xc2, 0xdb, 0x0c, 0x03, 0xb5, 0xe8, 0x8c, - 0x21, 0x4e, 0x18, 0xf1, 0x80, 0x7c, 0x4a, 0x2f, 0x01, 0x50, 0x24, 0xa4, 0xe6, 0x41, 0x00, 0xc4, - 0x09, 0xa3, 0xf2, 0x98, 0xb3, 0xd3, 0x12, 0xd6, 0xa2, 0xa6, 0xaa, 0xef, 0x7b, 0x00, 0xe3, 0x4e, - 0x00, 0xc8, 0xe3, 0xee, 0x5e, 0x4b, 0xd8, 0x62, 0x9d, 0x62, 0xcb, 0x83, 0x78, 0x09, 0x71, 0xc2, - 0x84, 0x0c, 0xd8, 0x56, 0x48, 0xe1, 0x96, 0x18, 0x93, 0x88, 0x13, 0x26, 0x5d, 0x85, 0x7d, 0x29, - 0xae, 0x03, 0xe0, 0xdc, 0x3a, 0x0f, 0x60, 0x0a, 0x71, 0xc2, 0x94, 0x74, 0xe1, 0x58, 0xcf, 0xef, - 0xd8, 0x1a, 0x36, 0xd5, 0xd2, 0xa6, 0x6e, 0x6b, 0xf2, 0x98, 0x83, 0xef, 0x12, 0xdb, 0x05, 0xd3, - 0xad, 0x7b, 0xec, 0x51, 0x7c, 0x99, 0x51, 0x14, 0x7a, 0x50, 0xf4, 0xaf, 0x7f, 0x76, 0x57, 0xa1, - 0x55, 0x46, 0x6d, 0xd2, 0xf0, 0xbe, 0x5c, 0x8a, 0x16, 0x98, 0x73, 0x83, 0x69, 0x2f, 0x4a, 0x78, - 0x91, 0x11, 0x7e, 0xfb, 0x38, 0xc2, 0x37, 0xdd, 0x84, 0xe0, 0xd3, 0xf7, 0x42, 0xb4, 0xc5, 0x6e, - 0x56, 0x0f, 0xad, 0x5d, 0xa6, 0xaf, 0x80, 0x29, 0x2b, 0xec, 0xbf, 0x69, 0xc4, 0x09, 0xd3, 0xf2, - 0xa4, 0x15, 0x72, 0x60, 0x0b, 0xac, 0x15, 0x0b, 0x71, 0xc4, 0x09, 0x71, 0x1f, 0x2c, 0x10, 0x75, - 0x56, 0xd0, 0x09, 0x33, 0x88, 0x13, 0x66, 0xe4, 0x71, 0x2b, 0xe0, 0x04, 0x0f, 0xa4, 0x45, 0x07, - 0x22, 0x4e, 0x80, 0x2e, 0x88, 0x4f, 0x45, 0x02, 0x27, 0x4d, 0x6c, 0x60, 0xc5, 0x31, 0x45, 0x28, - 0x2e, 0x66, 0x11, 0x2f, 0x8c, 0xc9, 0xb3, 0xfe, 0xe1, 0xed, 0x40, 0x7c, 0x5c, 0x06, 0xe3, 0x44, - 0xc7, 0x4e, 0x91, 0x70, 0x32, 0x74, 0xe2, 0x04, 0x4b, 0x4c, 0x73, 0x59, 0x37, 0x29, 0x66, 0xfd, - 0xa4, 0x98, 0xdd, 0x74, 0x4e, 0xaf, 0x0d, 0xc8, 0x80, 0x01, 0xb3, 0x15, 0x3c, 0x0b, 0x26, 0x5c, - 0x54, 0x97, 0x57, 0xe2, 0xa4, 0x13, 0x7d, 0xd7, 0x06, 0x64, 0x97, 0xa0, 0xcb, 0x04, 0xde, 0x07, - 0x63, 0x9a, 0x62, 0x78, 0x72, 0xcc, 0xb1, 0xa4, 0x71, 0xa5, 0xff, 0xa4, 0x71, 0x53, 0x31, 0x98, - 0xb8, 0x9b, 0x3a, 0x35, 0xeb, 0xf2, 0xa8, 0xe6, 0x2d, 0xe1, 0x63, 0x30, 0xab, 0x29, 0x86, 0x11, - 0xd5, 0xf7, 0x14, 0xe3, 0x73, 0xed, 0xb9, 0xf8, 0x18, 0x21, 0xfb, 0xb8, 0x0c, 0x67, 0xb4, 0xe8, - 0x7e, 0x80, 0xb3, 0x17, 0x7b, 0x2e, 0xe7, 0xc4, 0x8b, 0x71, 0x76, 0x23, 0xaf, 0x93, 0x73, 0x60, - 0x1f, 0xe6, 0x40, 0x42, 0x27, 0xfa, 0x3a, 0xd1, 0x0f, 0xb1, 0xee, 0x54, 0x1e, 0xa5, 0xb6, 0xa3, - 0x68, 0x6e, 0x7a, 0x4b, 0x24, 0x59, 0x02, 0xe8, 0x79, 0x0e, 0xd7, 0xc1, 0x74, 0xab, 0xbc, 0x79, - 0x12, 0x9f, 0x66, 0x1e, 0x4f, 0x76, 0x78, 0xfc, 0x8e, 0x0f, 0x27, 0x4f, 0xb5, 0x50, 0x5c, 0x22, - 0xf7, 0x41, 0x2b, 0x92, 0x82, 0x97, 0x6d, 0x01, 0xf1, 0x7d, 0xe7, 0x85, 0x19, 0x9f, 0x50, 0xfb, - 0x62, 0x7d, 0xc6, 0x81, 0x44, 0x98, 0x7c, 0xbb, 0xc8, 0x26, 0x50, 0xff, 0x3c, 0x0a, 0x1b, 0xcd, - 0x7c, 0x3e, 0x7d, 0x5a, 0xf6, 0x48, 0x22, 0xdd, 0x3d, 0x42, 0x0e, 0x69, 0x44, 0x55, 0x5a, 0xc3, - 0x52, 0xaa, 0xfb, 0x61, 0x19, 0x5b, 0x25, 0x53, 0x65, 0x95, 0x3e, 0x2b, 0xcf, 0x05, 0x25, 0xcd, - 0xb7, 0x24, 0x82, 0x3f, 0xe6, 0xc0, 0xc9, 0xb6, 0x11, 0x82, 0xb2, 0x9e, 0xe9, 0x3f, 0x4f, 0x16, - 0xa4, 0x66, 0x5e, 0x4c, 0xc3, 0x9d, 0x4e, 0x11, 0xe7, 0x77, 0x7a, 0x4a, 0x36, 0xdb, 0xca, 0xad, - 0x01, 0xb1, 0x0e, 0x41, 0x32, 0x9a, 0x0a, 0x02, 0xa2, 0xa5, 0x9c, 0x7c, 0x50, 0x58, 0x6b, 0xe6, - 0x2f, 0xa6, 0x4f, 0xb6, 0x74, 0x77, 0xc1, 0x3c, 0x7e, 0x0b, 0xd1, 0xed, 0x10, 0xcb, 0x44, 0x38, - 0x93, 0x04, 0xf8, 0xfe, 0x86, 0x0b, 0x30, 0xf6, 0x6e, 0x46, 0x80, 0xf1, 0xd9, 0x17, 0xeb, 0x1a, - 0x0a, 0x5b, 0xcd, 0xfc, 0x7a, 0xba, 0x2d, 0x9b, 0xcb, 0x00, 0x91, 0xe2, 0x43, 0x5c, 0xa2, 0x9e, - 0xe4, 0x67, 0x7b, 0x9c, 0x76, 0x57, 0xc0, 0xa5, 0x1b, 0x50, 0xe0, 0x17, 0x1c, 0x98, 0xe9, 0x94, - 0xfb, 0xdc, 0x8b, 0xf5, 0x6b, 0x85, 0xd5, 0x66, 0x7e, 0x39, 0x3d, 0xbb, 0xd3, 0x45, 0xdc, 0xe4, - 0x4e, 0x6f, 0x29, 0xe3, 0x7a, 0x44, 0xba, 0xe4, 0x5f, 0x38, 0x30, 0xec, 0x35, 0x7d, 0x10, 0x0c, - 0xea, 0x8a, 0x86, 0xdd, 0xa6, 0x4f, 0x66, 0xdf, 0x70, 0x0e, 0x0c, 0x2b, 0x1a, 0xb1, 0x75, 0x9a, - 0x88, 0xb1, 0x2a, 0xee, 0xad, 0xa0, 0x06, 0x62, 0xe4, 0x80, 0xf5, 0x56, 0x53, 0x52, 0xfe, 0x79, - 0x95, 0xc8, 0x6e, 0x60, 0x6c, 0xb0, 0x28, 0x4d, 0x36, 0xf3, 0xa7, 0xa4, 0x93, 0xfe, 0x32, 0x2c, - 0x73, 0x8c, 0x1c, 0xa4, 0x16, 0xc1, 0xa8, 0x7f, 0x08, 0xc7, 0xc0, 0xd0, 0x56, 0xfe, 0xc6, 0xed, - 0xcd, 0xf8, 0x00, 0x1c, 0x05, 0x83, 0x77, 0xe4, 0xf7, 0x36, 0xe3, 0x5c, 0xee, 0x54, 0x33, 0x7f, - 0x42, 0x82, 0x30, 0x7e, 0x84, 0x52, 0xe4, 0x20, 0x95, 0x43, 0x29, 0x67, 0x3f, 0x85, 0x1a, 0x49, - 0x15, 0x4c, 0x86, 0x52, 0x3d, 0x8c, 0x03, 0xfe, 0x00, 0xd7, 0x3d, 0x25, 0x9d, 0x4f, 0x58, 0x00, - 0x43, 0x6e, 0xbe, 0x89, 0x3d, 0x47, 0x1f, 0xe2, 0xa2, 0xe6, 0x62, 0x6b, 0x5c, 0x72, 0x03, 0xcc, - 0x75, 0xcf, 0xf6, 0x5d, 0x78, 0x9e, 0x08, 0xf2, 0x1c, 0x0b, 0x52, 0xf9, 0x86, 0x4f, 0x25, 0x9a, - 0xb9, 0xbb, 0x50, 0xd9, 0x09, 0x52, 0x79, 0x91, 0xde, 0xb9, 0xcd, 0x3f, 0xf7, 0xb3, 0x58, 0x33, - 0xff, 0x93, 0x18, 0xf8, 0x2e, 0x97, 0x9e, 0xcd, 0xa3, 0xa2, 0x4a, 0x11, 0xa9, 0xa0, 0xf6, 0xb8, - 0x27, 0x6d, 0x6f, 0xeb, 0xd4, 0xaf, 0x02, 0x75, 0x54, 0x22, 0x9a, 0x51, 0x53, 0x4b, 0xec, 0x72, - 0x78, 0x43, 0x10, 0xa2, 0x75, 0x03, 0x23, 0x4a, 0x50, 0x89, 0x1c, 0x62, 0x13, 0x69, 0x8a, 0x5e, - 0x47, 0x15, 0xac, 0x50, 0xdb, 0xc4, 0x96, 0x43, 0x6b, 0xd7, 0x2f, 0x07, 0x4f, 0x38, 0x36, 0x01, - 0x3c, 0xe1, 0x82, 0xfd, 0xf3, 0x13, 0x2e, 0xd4, 0x70, 0xa7, 0xef, 0x82, 0x73, 0x5b, 0xaa, 0x5e, - 0x46, 0xc4, 0xa6, 0x48, 0x23, 0x26, 0x46, 0x4a, 0xd1, 0xf9, 0xec, 0x98, 0x87, 0xb2, 0x55, 0x4a, - 0x0d, 0x2b, 0x27, 0x8a, 0xfb, 0x2a, 0xad, 0xda, 0xc5, 0x6c, 0x89, 0x68, 0xa2, 0x63, 0x8c, 0x0c, - 0x2e, 0x11, 0xab, 0x6e, 0x51, 0xec, 0x2d, 0x3d, 0xdb, 0x48, 0xab, 0x50, 0x3a, 0x42, 0x29, 0x87, - 0xbf, 0x13, 0x2c, 0x4b, 0xa5, 0xca, 0xca, 0xa5, 0x65, 0xbc, 0x9c, 0x59, 0x2d, 0xae, 0xae, 0x66, - 0x56, 0xd7, 0x56, 0xca, 0x19, 0x65, 0xf9, 0xe2, 0xe5, 0xcc, 0xc5, 0xd5, 0xb2, 0x52, 0x2c, 0x57, - 0xde, 0xc0, 0x6b, 0xcb, 0xab, 0x29, 0xd4, 0x28, 0x4c, 0xfa, 0xad, 0x0d, 0x13, 0x2e, 0xf5, 0xdf, - 0x51, 0x90, 0x88, 0x4a, 0xe2, 0xe7, 0x0a, 0x78, 0x19, 0xcc, 0xb3, 0xe6, 0xb1, 0x95, 0xbb, 0x82, - 0x43, 0x09, 0x87, 0x78, 0x21, 0x26, 0xcf, 0x39, 0x00, 0x3e, 0xc2, 0x56, 0x7b, 0xea, 0x78, 0x13, - 0x24, 0xc3, 0xa8, 0xa1, 0x19, 0xc4, 0x99, 0x93, 0x38, 0xf9, 0x54, 0x10, 0x77, 0x23, 0x30, 0x8f, - 0x74, 0xf0, 0x0d, 0xb6, 0x78, 0x3c, 0xe2, 0x05, 0x3e, 0xcc, 0x77, 0xbb, 0xdd, 0xed, 0x75, 0xf0, - 0x0d, 0xcd, 0x2d, 0x83, 0x88, 0x17, 0x06, 0xc3, 0x7c, 0xdf, 0x0b, 0xb4, 0x8a, 0xdd, 0xf8, 0xb6, - 0xba, 0xcf, 0x21, 0xc4, 0x0b, 0x43, 0x1d, 0x7c, 0xfd, 0x46, 0xf4, 0x2d, 0x70, 0x3a, 0x62, 0xaa, - 0x50, 0x7f, 0x3b, 0x8c, 0x78, 0x61, 0x58, 0x4e, 0x84, 0x8c, 0x15, 0x6c, 0x75, 0xbb, 0xa3, 0x07, - 0xa6, 0x29, 0x5e, 0x18, 0xe9, 0x82, 0xee, 0x73, 0x7f, 0x03, 0x24, 0xc2, 0xe8, 0x81, 0xf9, 0x68, - 0x14, 0xf1, 0xc2, 0xa8, 0x7c, 0x32, 0x88, 0x5b, 0x68, 0xcd, 0x4a, 0x1d, 0xe6, 0x0a, 0x75, 0x8c, - 0x63, 0xac, 0x43, 0x0e, 0x99, 0x2b, 0xdc, 0x25, 0x47, 0xcc, 0x15, 0x9c, 0xa9, 0x00, 0xe2, 0x85, - 0x89, 0xb0, 0xb9, 0x0a, 0xed, 0xf9, 0xaa, 0xab, 0x9b, 0x5a, 0xea, 0x8e, 0x23, 0x5e, 0x98, 0xec, - 0x74, 0x93, 0xaf, 0x2d, 0x8e, 0x6a, 0x1b, 0xe8, 0xb7, 0x26, 0x9e, 0xa3, 0xdf, 0x0a, 0xd9, 0xa6, - 0xdd, 0x73, 0x5d, 0x01, 0x0b, 0x11, 0xdb, 0x84, 0x9d, 0x32, 0x89, 0x78, 0x61, 0x5a, 0x9e, 0x0f, - 0x59, 0x27, 0x34, 0xe6, 0xf4, 0x20, 0xd0, 0x0a, 0x8a, 0x29, 0xc4, 0x0b, 0xf1, 0x6e, 0x04, 0x7a, - 0x06, 0x73, 0x68, 0x1c, 0x9a, 0x46, 0xbc, 0x30, 0x13, 0xf1, 0x4e, 0xc0, 0x4a, 0x5d, 0x91, 0x03, - 0x03, 0x17, 0x2f, 0xc0, 0x4e, 0x64, 0x8f, 0x73, 0xae, 0xda, 0xcc, 0x63, 0xa9, 0x04, 0x95, 0x23, - 0x94, 0xea, 0x15, 0x58, 0xa9, 0x1c, 0xfa, 0x80, 0x9a, 0x36, 0xbe, 0x80, 0xdc, 0xbf, 0x15, 0xa5, - 0x66, 0x79, 0x8b, 0x07, 0x17, 0xa2, 0x68, 0x01, 0xb9, 0x1d, 0xbc, 0xe5, 0x0b, 0x48, 0xba, 0x80, - 0x56, 0x1e, 0xa0, 0x46, 0x2a, 0x09, 0x06, 0x0b, 0xa4, 0x5c, 0xef, 0x56, 0xb9, 0x53, 0xf7, 0xc1, - 0xb4, 0x37, 0x85, 0xfe, 0xbf, 0x4a, 0xab, 0x0c, 0x6c, 0x0a, 0xc4, 0xfc, 0x37, 0x1d, 0x39, 0xa6, - 0x3a, 0x29, 0x6a, 0xb0, 0xac, 0x50, 0xc5, 0xab, 0x1e, 0xaf, 0x1c, 0xeb, 0x77, 0x87, 0x88, 0xcc, - 0x50, 0x52, 0x9f, 0x72, 0x60, 0xfa, 0x3d, 0xa3, 0xac, 0x50, 0x7c, 0x57, 0x92, 0xf1, 0x47, 0x36, - 0xb6, 0x28, 0x5c, 0x07, 0xbc, 0x52, 0x74, 0x85, 0x18, 0x97, 0x96, 0xfb, 0xae, 0x45, 0xb2, 0x83, - 0x0d, 0xdf, 0x04, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, 0xff, 0x3c, 0xd1, 0x3a, 0x67, 0x89, 0x2d, 0x15, - 0xd7, 0xca, 0x37, 0x15, 0xeb, 0x40, 0x06, 0x2e, 0xb8, 0xf3, 0x9d, 0x46, 0x60, 0x3c, 0x10, 0x9b, - 0x4e, 0x7b, 0x70, 0x6f, 0x53, 0xbe, 0x15, 0x1f, 0x80, 0x23, 0x80, 0xbf, 0xb5, 0xb3, 0x19, 0xe7, - 0xa4, 0x7f, 0x2e, 0x80, 0x53, 0x51, 0xc6, 0xb7, 0xb1, 0x79, 0xa8, 0x96, 0x30, 0xfc, 0x07, 0x0f, - 0x86, 0xd7, 0x4d, 0xc7, 0xe6, 0xb0, 0x7f, 0xe9, 0x93, 0xfd, 0xa3, 0xa4, 0xfe, 0x13, 0xfb, 0xf6, - 0x1f, 0xff, 0xf6, 0x69, 0xec, 0x8b, 0x58, 0xea, 0x5f, 0x31, 0xf1, 0x70, 0xd9, 0x7f, 0x68, 0xed, - 0xf6, 0xcc, 0x2a, 0x1e, 0x05, 0xca, 0x47, 0x43, 0x3c, 0x0a, 0x56, 0x84, 0x86, 0x78, 0x14, 0x88, - 0xce, 0x86, 0x68, 0x61, 0x43, 0x31, 0x15, 0x4a, 0x4c, 0xf1, 0xc8, 0x0e, 0x1d, 0x1c, 0x05, 0x22, - 0xa9, 0x21, 0x1e, 0x85, 0x2e, 0x94, 0xbf, 0x0e, 0x9c, 0xb7, 0xc3, 0xb5, 0x21, 0x1e, 0x05, 0x73, - 0xdb, 0x5b, 0x16, 0x35, 0x0d, 0x13, 0x57, 0xd4, 0xc7, 0x62, 0xba, 0xe1, 0x32, 0x09, 0xa0, 0x59, - 0x51, 0x3a, 0x56, 0x94, 0x91, 0x15, 0x41, 0x08, 0x0b, 0xd9, 0x6b, 0xd4, 0x6c, 0x88, 0x47, 0xed, - 0x5c, 0xd5, 0x10, 0x8f, 0x22, 0x4f, 0x33, 0x0e, 0x66, 0xd7, 0x37, 0x9b, 0x10, 0x5e, 0xa0, 0x05, - 0x6f, 0xc0, 0x5f, 0x71, 0x00, 0xb8, 0x0e, 0x67, 0xd7, 0xe3, 0xab, 0x71, 0x7a, 0x9a, 0xf9, 0xfc, - 0x5c, 0x6a, 0xf1, 0x18, 0x8f, 0xe7, 0xb8, 0x34, 0xfc, 0x3a, 0x18, 0xbe, 0x41, 0xc8, 0x81, 0x6d, - 0xc0, 0xe9, 0xac, 0x65, 0x17, 0xa5, 0xec, 0x76, 0xd9, 0xbb, 0xd3, 0xcf, 0xc3, 0x39, 0xcb, 0x38, - 0x0b, 0xf0, 0xd5, 0x63, 0x63, 0xcd, 0xe9, 0x8b, 0x1a, 0xf0, 0x7b, 0x1c, 0x18, 0x76, 0xef, 0xf8, - 0xf3, 0x98, 0xa6, 0xc7, 0x8b, 0x4f, 0x6a, 0x99, 0x49, 0xf1, 0x7a, 0xf2, 0x19, 0xa5, 0x70, 0xcc, - 0xf0, 0x3b, 0x0e, 0x8c, 0xfa, 0xc9, 0x06, 0x2e, 0x1d, 0x2b, 0x4a, 0x24, 0x2f, 0xf5, 0x94, 0xe4, - 0x21, 0x93, 0xa4, 0x9c, 0x4c, 0x8b, 0x87, 0xd2, 0xd3, 0x25, 0x51, 0x8a, 0x38, 0xeb, 0x4a, 0xe3, - 0xe4, 0xa8, 0x7b, 0xcb, 0x52, 0xbf, 0x28, 0xf0, 0x97, 0x1c, 0x48, 0xec, 0x2a, 0xb4, 0x54, 0x75, - 0x92, 0x71, 0x2b, 0x79, 0x6d, 0xeb, 0x2c, 0xf0, 0xbe, 0x3c, 0x95, 0x2e, 0x31, 0x95, 0x96, 0xa4, - 0xd7, 0xc5, 0x43, 0x49, 0x79, 0x56, 0x01, 0xb9, 0x34, 0xfc, 0x11, 0x07, 0x86, 0x37, 0x70, 0x0d, - 0x53, 0xdc, 0x19, 0x69, 0xbd, 0x78, 0xdd, 0x6f, 0xe6, 0x5f, 0x2f, 0x9e, 0x07, 0x53, 0x00, 0xe4, - 0x0d, 0xf5, 0x3a, 0xae, 0xe7, 0x6d, 0x5a, 0x85, 0x03, 0xe0, 0x14, 0x18, 0xbe, 0xe5, 0x7c, 0x4a, - 0x70, 0x12, 0x0c, 0x9a, 0x58, 0x29, 0x83, 0xa1, 0x47, 0xa6, 0x4a, 0xb1, 0x1b, 0x7c, 0xe9, 0x67, - 0x0d, 0xbe, 0xbf, 0x72, 0x60, 0xf4, 0x2a, 0xa6, 0xef, 0xda, 0xd8, 0xac, 0x7f, 0x99, 0xe1, 0xf7, - 0x09, 0xd7, 0xcc, 0xdf, 0x49, 0xed, 0x80, 0x85, 0x6e, 0x63, 0x45, 0x8b, 0x61, 0x9f, 0xe3, 0xc4, - 0xfb, 0x5c, 0x71, 0x80, 0xe9, 0x97, 0x85, 0x17, 0x8e, 0xd3, 0xef, 0x23, 0x87, 0x81, 0xaf, 0xe5, - 0x27, 0x43, 0x20, 0x7e, 0x15, 0x53, 0xbf, 0x8b, 0x70, 0x99, 0x5f, 0xee, 0xbf, 0x74, 0x7a, 0xf8, - 0xc9, 0xe7, 0x47, 0x4d, 0x7d, 0x3c, 0xc8, 0x34, 0xf8, 0x37, 0x0f, 0xbf, 0xe0, 0x8f, 0xd1, 0xa1, - 0xd5, 0x9a, 0x78, 0x49, 0xb8, 0xdb, 0x88, 0xd3, 0x88, 0x9e, 0x45, 0x2a, 0x56, 0xcf, 0x19, 0xa5, - 0xe3, 0xcc, 0x7e, 0xda, 0x61, 0xb8, 0x92, 0x3c, 0x65, 0x8a, 0xe8, 0x7e, 0xda, 0x13, 0x37, 0x54, - 0xfb, 0x7a, 0x77, 0xf9, 0x9d, 0x78, 0xed, 0x2e, 0xbe, 0xab, 0x22, 0x3d, 0x19, 0x76, 0x96, 0xb6, - 0x1e, 0xad, 0x73, 0x8f, 0xe3, 0x9e, 0x7a, 0x5a, 0x4f, 0xe3, 0x1a, 0x2a, 0xbd, 0xf0, 0xf7, 0x3c, - 0x18, 0xdc, 0x2c, 0x55, 0x09, 0xec, 0xf5, 0xc3, 0x89, 0x65, 0x17, 0xb3, 0xee, 0x10, 0xe3, 0x27, - 0x87, 0x67, 0x86, 0x4c, 0xfd, 0x3d, 0xd6, 0xcc, 0x7f, 0x2b, 0x06, 0x26, 0x70, 0xa9, 0x4a, 0x90, - 0xe5, 0xb6, 0x5c, 0x60, 0x94, 0xad, 0x4c, 0xa3, 0x04, 0x67, 0x6e, 0xdb, 0x9a, 0xa6, 0x98, 0xf5, - 0x1c, 0xda, 0xf4, 0xb6, 0x92, 0xf1, 0x8d, 0xf6, 0x33, 0x10, 0xdb, 0x4d, 0x6d, 0x00, 0x18, 0xbe, - 0xb6, 0x4c, 0xda, 0x3e, 0x2f, 0xeb, 0x3b, 0x57, 0x00, 0x7f, 0x71, 0x69, 0x05, 0xae, 0x81, 0x4b, - 0x32, 0xa6, 0xb6, 0xa9, 0xe3, 0x32, 0x7a, 0x54, 0xc5, 0x3a, 0xa2, 0x55, 0x8c, 0x4c, 0x6c, 0x11, - 0xdb, 0x2c, 0x61, 0xa4, 0x5a, 0x88, 0x62, 0xcd, 0x20, 0xa6, 0x62, 0xaa, 0xb5, 0x3a, 0xb2, 0x75, - 0xe5, 0x50, 0x51, 0x6b, 0x4a, 0xb1, 0x86, 0xb3, 0xef, 0xbc, 0x09, 0xf8, 0xd5, 0xa5, 0x55, 0xb8, - 0x0a, 0xd2, 0x4f, 0x21, 0x50, 0x26, 0xd8, 0x42, 0x3a, 0xa1, 0x08, 0x3f, 0x56, 0x2d, 0x9a, 0x85, - 0xc3, 0x60, 0xf0, 0xe7, 0x31, 0x8e, 0x67, 0x97, 0xec, 0xc1, 0xf1, 0x69, 0xc2, 0x31, 0x8c, 0x78, - 0xe4, 0x3a, 0xe6, 0xde, 0x7c, 0x2a, 0x1e, 0x2c, 0x38, 0xce, 0x59, 0xce, 0x7d, 0xb2, 0xb9, 0x07, - 0x61, 0xc7, 0x11, 0xfc, 0x35, 0x07, 0x26, 0x36, 0x30, 0x36, 0xd8, 0xef, 0x4b, 0xce, 0xc6, 0x57, - 0xd3, 0xd9, 0x5c, 0x61, 0xba, 0x5d, 0x4e, 0xad, 0x1e, 0x9b, 0xe2, 0x43, 0x3f, 0x5d, 0x67, 0x9d, - 0x71, 0x85, 0x55, 0xa1, 0x3c, 0x00, 0x3b, 0xa4, 0xa0, 0xea, 0x65, 0x55, 0xdf, 0xb7, 0xe0, 0x7c, - 0x47, 0x06, 0xdf, 0xf0, 0x7e, 0xd5, 0xef, 0x99, 0xdc, 0x07, 0xe0, 0x5d, 0x30, 0x72, 0x47, 0xd5, - 0x30, 0xb1, 0x29, 0xec, 0x01, 0xd4, 0x13, 0xf9, 0x34, 0x13, 0xff, 0x24, 0x9c, 0x0d, 0xda, 0x93, - 0x7a, 0xc4, 0xaa, 0x20, 0xbe, 0x69, 0x9a, 0xc4, 0x74, 0xca, 0xf7, 0x06, 0xa6, 0x8a, 0x5a, 0xb3, - 0xfa, 0x66, 0x70, 0x8e, 0x31, 0x78, 0x19, 0x2e, 0x84, 0x1c, 0xe6, 0x50, 0x7d, 0xa4, 0xd2, 0x6a, - 0xd9, 0xa3, 0xfa, 0x7d, 0x0e, 0xc0, 0xab, 0x98, 0x46, 0x67, 0xb7, 0xe3, 0x7b, 0x84, 0x08, 0x46, - 0x4f, 0x31, 0x5e, 0x63, 0x62, 0x9c, 0x49, 0xcd, 0x07, 0xc5, 0x70, 0x24, 0x28, 0x92, 0x72, 0x5d, - 0x3c, 0x72, 0x3a, 0x02, 0x36, 0xe3, 0xc1, 0xef, 0x70, 0x60, 0x66, 0x97, 0x58, 0xd4, 0xa1, 0xc8, - 0x50, 0x99, 0x20, 0xcf, 0x36, 0x26, 0xf6, 0xe4, 0x2e, 0x32, 0xee, 0xe7, 0x53, 0xe7, 0x82, 0xdc, - 0x0d, 0x62, 0x51, 0x47, 0x02, 0xf6, 0x8b, 0xa1, 0x2b, 0x86, 0x1f, 0x14, 0xc9, 0xdf, 0x72, 0xcd, - 0xfc, 0xe7, 0x1c, 0xac, 0xf4, 0x98, 0xda, 0x82, 0x6f, 0xc5, 0x28, 0x93, 0x41, 0x8f, 0xaa, 0x6a, - 0xa9, 0x8a, 0xac, 0x2a, 0xb1, 0x6b, 0x65, 0x76, 0xfd, 0x8a, 0x18, 0xd9, 0x16, 0x2e, 0x23, 0x55, - 0x47, 0x46, 0x4d, 0x29, 0x61, 0x44, 0x2a, 0xec, 0xa2, 0x96, 0x49, 0xc9, 0xd6, 0xb0, 0xee, 0xce, - 0x02, 0xa8, 0x44, 0x34, 0x67, 0x71, 0x26, 0xf9, 0x2e, 0x58, 0xec, 0xd6, 0x19, 0x38, 0xd7, 0xc8, - 0x9f, 0x13, 0xfb, 0x7d, 0x6b, 0x7c, 0x08, 0x4e, 0x94, 0x14, 0x0d, 0xd7, 0xd6, 0x15, 0x0b, 0x7b, - 0x34, 0x9c, 0xa1, 0x06, 0xca, 0x60, 0xc8, 0xfd, 0xd9, 0xb3, 0xdf, 0x40, 0x9a, 0x67, 0x36, 0x9c, - 0x85, 0x33, 0xa1, 0x40, 0x72, 0x8e, 0xa4, 0x0f, 0xc1, 0x42, 0x5e, 0x27, 0xb4, 0x8a, 0x4d, 0x8f, - 0x93, 0xe3, 0xbc, 0xc0, 0xa5, 0x7a, 0x3b, 0x74, 0xc5, 0xfa, 0x65, 0x3c, 0x50, 0xf8, 0x7c, 0xa4, - 0x99, 0xff, 0x6c, 0x04, 0xfe, 0x89, 0x03, 0xb3, 0x79, 0x54, 0x70, 0x5f, 0x87, 0x03, 0x29, 0xe0, - 0x7d, 0x70, 0x62, 0x5f, 0xde, 0x5d, 0xcf, 0x5c, 0x75, 0x55, 0x47, 0x86, 0x49, 0x1e, 0xe2, 0x12, - 0xed, 0xd7, 0x64, 0xc9, 0xb8, 0x4e, 0x74, 0xfc, 0x7f, 0x9e, 0x6a, 0x0e, 0x74, 0xfa, 0x43, 0x70, - 0xa2, 0x70, 0x7b, 0x03, 0xad, 0x64, 0xd6, 0x6b, 0x8a, 0x6d, 0x61, 0x74, 0x43, 0x2d, 0x61, 0xdd, - 0xc2, 0x70, 0xab, 0x3f, 0xca, 0x62, 0xb1, 0x46, 0x8a, 0xa2, 0xa6, 0x58, 0x14, 0x9b, 0xe2, 0x8d, - 0xed, 0xf5, 0xcd, 0x9d, 0xdb, 0x9b, 0x59, 0xfa, 0x98, 0x4a, 0xfc, 0x72, 0x76, 0x29, 0xcd, 0x73, - 0xb1, 0x41, 0x29, 0xae, 0x18, 0xee, 0x9b, 0xb6, 0x4a, 0x74, 0xf1, 0xa1, 0x45, 0x74, 0x69, 0x2e, - 0xb8, 0xf3, 0x38, 0x53, 0x21, 0x24, 0xa3, 0xa9, 0x1a, 0xce, 0x75, 0x40, 0xe6, 0x7a, 0x40, 0xca, - 0xbb, 0x4e, 0xc5, 0x58, 0x81, 0xdb, 0xe0, 0x6a, 0x67, 0xc5, 0xb0, 0x2d, 0x6c, 0xb6, 0xab, 0x45, - 0x55, 0x39, 0xc4, 0xc8, 0xc0, 0xa6, 0xa6, 0x5a, 0x96, 0x13, 0x98, 0x94, 0x20, 0xa5, 0x54, 0xc2, - 0x96, 0x15, 0xaa, 0x2e, 0x59, 0xf9, 0x05, 0x6a, 0xd0, 0x88, 0x7c, 0x0d, 0xf0, 0xab, 0xcb, 0x6b, - 0x30, 0x0f, 0x26, 0xb7, 0x5f, 0xd3, 0x90, 0x82, 0x28, 0x56, 0x0c, 0x42, 0xb3, 0x70, 0x09, 0x64, - 0x93, 0x7d, 0x3d, 0xff, 0xdd, 0xfb, 0x41, 0x0c, 0x4c, 0x83, 0xb1, 0x82, 0x62, 0xa9, 0x25, 0xd6, - 0xff, 0xc7, 0x46, 0x39, 0xf0, 0x52, 0x68, 0x22, 0x98, 0x1e, 0x8d, 0x25, 0xc7, 0xde, 0xcf, 0xe4, - 0x77, 0xb7, 0x33, 0xd7, 0x71, 0x1d, 0xc5, 0xc0, 0x9f, 0xb9, 0xd6, 0x84, 0xf0, 0x07, 0x6e, 0x94, - 0x17, 0x06, 0xa5, 0xb3, 0xbe, 0x0f, 0x03, 0x0e, 0x17, 0x89, 0x62, 0xd3, 0xaa, 0xe8, 0xfc, 0x21, - 0xa6, 0xfa, 0x35, 0x9c, 0x5b, 0xec, 0x0d, 0x44, 0xc9, 0x01, 0xd6, 0x0b, 0xdf, 0x04, 0x49, 0x77, - 0xe0, 0x80, 0xf0, 0xaa, 0xa9, 0xe8, 0xd4, 0x42, 0xce, 0xc2, 0xb3, 0x1e, 0x58, 0xf0, 0xc6, 0x10, - 0x38, 0xeb, 0x1d, 0xb2, 0x95, 0x7f, 0xba, 0x0e, 0x86, 0x94, 0xb2, 0xa6, 0xea, 0x30, 0x17, 0x42, - 0xd5, 0xcb, 0x21, 0x30, 0xe6, 0x0c, 0x07, 0x4c, 0xb5, 0xa8, 0x53, 0x89, 0x0e, 0x31, 0x52, 0xf5, - 0x0a, 0x31, 0x35, 0xe6, 0xef, 0xe2, 0x22, 0x98, 0x0c, 0x9a, 0x62, 0x20, 0x3a, 0x1a, 0x15, 0xcf, - 0xf7, 0x1c, 0x8e, 0xa2, 0xa0, 0xe6, 0x36, 0x38, 0x75, 0xb3, 0x9d, 0x7d, 0x82, 0x77, 0xaa, 0xdf, - 0xbb, 0x74, 0x6f, 0xac, 0xe5, 0xb9, 0xe2, 0x30, 0xbb, 0xcf, 0x2b, 0xff, 0x0b, 0x00, 0x00, 0xff, - 0xff, 0xce, 0xfe, 0xb9, 0x59, 0xe2, 0x27, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_db561398d393056a) +} + +var fileDescriptor_a_bit_of_everything_db561398d393056a = []byte{ + // 3311 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x73, 0x1b, 0xc7, + 0x99, 0x1c, 0x0c, 0x9f, 0xcd, 0x17, 0xd8, 0x94, 0x28, 0x10, 0xa2, 0xcd, 0x16, 0x24, 0xdb, 0x23, + 0x58, 0xc0, 0x90, 0x43, 0x4a, 0xa6, 0xe0, 0xb2, 0xb5, 0x00, 0x1f, 0x12, 0x2d, 0x89, 0xa2, 0x46, + 0xb2, 0xd6, 0x25, 0x4b, 0x66, 0x35, 0x80, 0x06, 0x31, 0x22, 0xe6, 0xe1, 0x99, 0x1e, 0x4a, 0x58, + 0x2e, 0x76, 0xbd, 0x8f, 0xda, 0xad, 0xb5, 0x0f, 0x5b, 0x05, 0x27, 0x95, 0xca, 0xa3, 0xf2, 0x0b, + 0x7c, 0xcd, 0xc9, 0x55, 0x49, 0x0e, 0xc9, 0x29, 0x87, 0x54, 0x29, 0xa9, 0xdc, 0x72, 0x4a, 0x0e, + 0x39, 0xe5, 0x92, 0x2a, 0x57, 0xe5, 0x90, 0x54, 0x6a, 0x7a, 0x66, 0x80, 0x99, 0x01, 0x20, 0x0a, + 0x92, 0x4b, 0x17, 0x6a, 0xba, 0xfb, 0x7b, 0x7f, 0x5f, 0x7f, 0x8f, 0x86, 0x80, 0x44, 0x9e, 0x60, + 0xd5, 0xa8, 0x11, 0x4b, 0x34, 0x4c, 0x9d, 0xea, 0xa2, 0xb7, 0x34, 0x8a, 0x22, 0xde, 0x2b, 0x2a, + 0x74, 0x4f, 0xaf, 0xec, 0x91, 0x43, 0x62, 0xd6, 0x69, 0x55, 0xd1, 0xf6, 0xb3, 0x0c, 0x06, 0x2e, + 0xee, 0x9b, 0x46, 0x29, 0xbb, 0x8f, 0x29, 0x79, 0x8c, 0xeb, 0x59, 0x9f, 0x40, 0xb6, 0x85, 0x9a, + 0x5c, 0xd8, 0xd7, 0xf5, 0xfd, 0x1a, 0x11, 0xb1, 0xa1, 0x88, 0x58, 0xd3, 0x74, 0x8a, 0xa9, 0xa2, + 0x6b, 0x96, 0x8b, 0x9e, 0x44, 0xde, 0x29, 0x5b, 0x15, 0xed, 0x8a, 0x58, 0x51, 0x48, 0xad, 0xbc, + 0xa7, 0x62, 0xeb, 0xc0, 0x83, 0x38, 0x1d, 0x85, 0x20, 0xaa, 0x41, 0xeb, 0xde, 0xe1, 0xeb, 0xd1, + 0xc3, 0xb2, 0x6d, 0x32, 0xfa, 0xde, 0xf9, 0x5b, 0x11, 0x8d, 0x0c, 0x4c, 0xab, 0x44, 0xb3, 0x55, + 0xf6, 0xb1, 0xe7, 0x7c, 0xf9, 0x72, 0x44, 0x00, 0x2d, 0xbb, 0x28, 0xaa, 0xc4, 0xb2, 0xf0, 0x3e, + 0xf1, 0x20, 0xce, 0x74, 0x42, 0x48, 0x11, 0x90, 0xc5, 0xa8, 0x34, 0x54, 0x51, 0x89, 0x45, 0xb1, + 0x6a, 0x78, 0x00, 0x17, 0xd8, 0x3f, 0xa5, 0xcc, 0x3e, 0xd1, 0x32, 0xd6, 0x63, 0xbc, 0xbf, 0x4f, + 0x4c, 0x51, 0x37, 0x98, 0x3d, 0x3a, 0x6d, 0x93, 0xfa, 0xde, 0x69, 0x10, 0xcf, 0x17, 0x14, 0x7a, + 0xab, 0xb2, 0xd9, 0xb2, 0x3a, 0x7c, 0x08, 0x26, 0x2d, 0x45, 0xdb, 0xaf, 0x91, 0x3d, 0x8d, 0x58, + 0x94, 0x94, 0x13, 0xf3, 0x88, 0x13, 0xc6, 0xa5, 0xb5, 0xec, 0x31, 0x7e, 0xc8, 0x46, 0x29, 0x65, + 0x77, 0x18, 0xbe, 0x3c, 0xe1, 0x92, 0x73, 0x57, 0xb0, 0x0a, 0x06, 0x6d, 0x5b, 0x29, 0x27, 0x38, + 0xc4, 0x09, 0x63, 0x85, 0xbb, 0xcd, 0xfc, 0xed, 0xcf, 0x38, 0xee, 0x73, 0xee, 0xfa, 0xc7, 0x38, + 0x53, 0xc9, 0x67, 0xb6, 0x96, 0x32, 0x97, 0x1f, 0x1e, 0xad, 0x35, 0x32, 0xc1, 0xe5, 0x6a, 0x3f, + 0xcb, 0x65, 0xa9, 0x21, 0x33, 0x0e, 0x70, 0x17, 0x0c, 0x7b, 0x1a, 0xc4, 0x10, 0xff, 0x52, 0x1a, + 0x78, 0x74, 0xe0, 0x07, 0x60, 0xbc, 0x52, 0xd3, 0x31, 0xdd, 0x3b, 0xc4, 0x35, 0x9b, 0x24, 0x78, + 0xc4, 0x09, 0xb1, 0xc2, 0xf9, 0x66, 0xfe, 0x4d, 0x69, 0x66, 0xcb, 0xd9, 0x47, 0x6c, 0x1f, 0xb1, + 0x08, 0xcb, 0xf1, 0x4b, 0x59, 0xe9, 0x29, 0x17, 0x44, 0x90, 0x01, 0x5b, 0xdc, 0x73, 0xbe, 0xe1, + 0x19, 0x30, 0x51, 0xd6, 0xed, 0x62, 0x8d, 0x78, 0xc4, 0x06, 0x11, 0x27, 0x70, 0xf2, 0xb8, 0xbb, + 0xe7, 0x82, 0x2c, 0x82, 0x71, 0x45, 0xa3, 0x97, 0x56, 0x3d, 0x88, 0x21, 0xc4, 0x09, 0xbc, 0x0c, + 0xd8, 0x56, 0x8b, 0x86, 0x1d, 0x84, 0x18, 0x46, 0x9c, 0x30, 0x28, 0x8f, 0xdb, 0x01, 0x10, 0x97, + 0xc6, 0x8a, 0xe4, 0x41, 0x8c, 0x20, 0x4e, 0x18, 0x62, 0x34, 0x56, 0x24, 0x17, 0xe0, 0x2c, 0x98, + 0xac, 0x28, 0x4f, 0x48, 0xb9, 0x45, 0x64, 0x14, 0x71, 0xc2, 0xb0, 0x3c, 0xe1, 0x6d, 0x86, 0x81, + 0x5a, 0x74, 0xc6, 0x10, 0x27, 0x8c, 0x78, 0x40, 0x3e, 0xa5, 0xd7, 0x00, 0x28, 0xea, 0x7a, 0xcd, + 0x83, 0x00, 0x88, 0x13, 0x46, 0xe5, 0x31, 0x67, 0xa7, 0x25, 0xac, 0x45, 0x4d, 0x45, 0xdb, 0xf7, + 0x00, 0xc6, 0x9d, 0x00, 0x90, 0xc7, 0xdd, 0xbd, 0x96, 0xb0, 0xc5, 0x3a, 0x25, 0x96, 0x07, 0xf1, + 0x1a, 0xe2, 0x84, 0x09, 0x19, 0xb0, 0xad, 0x90, 0xc2, 0x2d, 0x31, 0x26, 0x11, 0x27, 0x4c, 0xba, + 0x0a, 0xfb, 0x52, 0x5c, 0x07, 0xc0, 0xb9, 0x75, 0x1e, 0xc0, 0x14, 0xe2, 0x84, 0x29, 0xe9, 0xc2, + 0xb1, 0x9e, 0xdf, 0xb1, 0x55, 0x62, 0x2a, 0xa5, 0x4d, 0xcd, 0x56, 0xe5, 0x31, 0x07, 0xdf, 0x25, + 0xb6, 0x0b, 0xa6, 0x5b, 0xf7, 0xd8, 0xa3, 0xf8, 0x3a, 0xa3, 0x28, 0xf4, 0xa0, 0xe8, 0x5f, 0xff, + 0xec, 0x2e, 0xa6, 0x55, 0x46, 0x6d, 0xd2, 0xf0, 0xbe, 0x5c, 0x8a, 0x16, 0x98, 0x73, 0x83, 0x69, + 0x2f, 0x4a, 0x78, 0x91, 0x11, 0x7e, 0xff, 0x38, 0xc2, 0x37, 0xdd, 0x84, 0xe0, 0xd3, 0xf7, 0x42, + 0xb4, 0xc5, 0x6e, 0x56, 0x0b, 0xad, 0x5d, 0xa6, 0x6f, 0x80, 0x29, 0x2b, 0xec, 0xbf, 0x69, 0xc4, + 0x09, 0xd3, 0xf2, 0xa4, 0x15, 0x72, 0x60, 0x0b, 0xac, 0x15, 0x0b, 0x71, 0xc4, 0x09, 0x71, 0x1f, + 0x2c, 0x10, 0x75, 0x56, 0xd0, 0x09, 0x33, 0x88, 0x13, 0x66, 0xe4, 0x71, 0x2b, 0xe0, 0x04, 0x0f, + 0xa4, 0x45, 0x07, 0x22, 0x4e, 0x80, 0x2e, 0x88, 0x4f, 0x45, 0x02, 0x27, 0x4d, 0x62, 0x10, 0xec, + 0x98, 0x22, 0x14, 0x17, 0xb3, 0x88, 0x17, 0xc6, 0xe4, 0x59, 0xff, 0xf0, 0x4e, 0x20, 0x3e, 0x2e, + 0x83, 0x71, 0x5d, 0x23, 0x4e, 0x91, 0x70, 0x32, 0x74, 0xe2, 0x04, 0x4b, 0x4c, 0x73, 0x59, 0x37, + 0x29, 0x66, 0xfd, 0xa4, 0x98, 0xdd, 0x74, 0x4e, 0xaf, 0x0d, 0xc8, 0x80, 0x01, 0xb3, 0x15, 0x3c, + 0x0b, 0x26, 0x5c, 0x54, 0x97, 0x57, 0xe2, 0xa4, 0x13, 0x7d, 0xd7, 0x06, 0x64, 0x97, 0xa0, 0xcb, + 0x04, 0x3e, 0x00, 0x63, 0x2a, 0x36, 0x3c, 0x39, 0xe6, 0x58, 0xd2, 0xb8, 0xd2, 0x7f, 0xd2, 0xb8, + 0x89, 0x0d, 0x26, 0xee, 0xa6, 0x46, 0xcd, 0xba, 0x3c, 0xaa, 0x7a, 0x4b, 0xf8, 0x04, 0xcc, 0xaa, + 0xd8, 0x30, 0xa2, 0xfa, 0x9e, 0x62, 0x7c, 0xae, 0xbd, 0x10, 0x1f, 0x23, 0x64, 0x1f, 0x97, 0xe1, + 0x8c, 0x1a, 0xdd, 0x0f, 0x70, 0xf6, 0x62, 0xcf, 0xe5, 0x9c, 0x78, 0x39, 0xce, 0x6e, 0xe4, 0x75, + 0x72, 0x0e, 0xec, 0xc3, 0x1c, 0x48, 0x68, 0xba, 0xb6, 0xae, 0x6b, 0x87, 0x44, 0x73, 0x2a, 0x0f, + 0xae, 0xed, 0x60, 0xd5, 0x4d, 0x6f, 0x89, 0x24, 0x4b, 0x00, 0x3d, 0xcf, 0xe1, 0x3a, 0x98, 0x6e, + 0x95, 0x37, 0x4f, 0xe2, 0xd3, 0xcc, 0xe3, 0xc9, 0x0e, 0x8f, 0xdf, 0xf5, 0xe1, 0xe4, 0xa9, 0x16, + 0x8a, 0x4b, 0xe4, 0x01, 0x68, 0x45, 0x52, 0xf0, 0xb2, 0x2d, 0x20, 0xbe, 0xef, 0xbc, 0x30, 0xe3, + 0x13, 0x6a, 0x5f, 0xac, 0xaf, 0x38, 0x90, 0x08, 0x93, 0x6f, 0x17, 0xd9, 0x04, 0xea, 0x9f, 0x47, + 0x61, 0xa3, 0x99, 0xcf, 0xa7, 0x4f, 0xcb, 0x1e, 0x49, 0xa4, 0xb9, 0x47, 0xc8, 0x21, 0x8d, 0xa8, + 0x42, 0x6b, 0x44, 0x4a, 0x75, 0x3f, 0x2c, 0x13, 0xab, 0x64, 0x2a, 0xac, 0xd2, 0x67, 0xe5, 0xb9, + 0xa0, 0xa4, 0xf9, 0x96, 0x44, 0xf0, 0x3b, 0x1c, 0x38, 0xd9, 0x36, 0x42, 0x50, 0xd6, 0x33, 0xfd, + 0xe7, 0xc9, 0x82, 0xd4, 0xcc, 0x8b, 0x69, 0xb8, 0xd3, 0x29, 0xe2, 0xfc, 0x4e, 0x4f, 0xc9, 0x66, + 0x5b, 0xb9, 0x35, 0x20, 0xd6, 0x21, 0x48, 0x46, 0x53, 0x41, 0x40, 0xb4, 0x94, 0x93, 0x0f, 0x0a, + 0x6b, 0xcd, 0xfc, 0xc5, 0xf4, 0xc9, 0x96, 0xee, 0x2e, 0x98, 0xc7, 0x6f, 0x21, 0xba, 0x1d, 0x62, + 0x99, 0x08, 0x67, 0x92, 0x00, 0xdf, 0x9f, 0x72, 0x01, 0xc6, 0xde, 0xcd, 0x08, 0x30, 0x3e, 0xfb, + 0x72, 0x5d, 0x43, 0x61, 0xab, 0x99, 0x5f, 0x4f, 0xb7, 0x65, 0x73, 0x19, 0x20, 0xbd, 0xf8, 0x88, + 0x94, 0xa8, 0x27, 0xf9, 0xd9, 0x1e, 0xa7, 0xdd, 0x15, 0x70, 0xe9, 0x06, 0x14, 0xf8, 0x21, 0x07, + 0x66, 0x3a, 0xe5, 0x3e, 0xf7, 0x72, 0xfd, 0x5a, 0x61, 0xb5, 0x99, 0x5f, 0x4e, 0xcf, 0xee, 0x74, + 0x11, 0x37, 0xb9, 0xd3, 0x5b, 0xca, 0xb8, 0x16, 0x91, 0x2e, 0xf9, 0x7b, 0x0e, 0x0c, 0x7b, 0x4d, + 0x1f, 0x04, 0x83, 0x1a, 0x56, 0x89, 0xdb, 0xf4, 0xc9, 0xec, 0x1b, 0xce, 0x81, 0x61, 0xac, 0xea, + 0xb6, 0x46, 0x13, 0x31, 0x56, 0xc5, 0xbd, 0x15, 0x54, 0x41, 0x4c, 0x3f, 0x60, 0xbd, 0xd5, 0x94, + 0x94, 0x7f, 0x51, 0x25, 0xb2, 0x1b, 0x84, 0x18, 0x2c, 0x4a, 0x93, 0xcd, 0xfc, 0x29, 0xe9, 0xa4, + 0xbf, 0x0c, 0xcb, 0x1c, 0xd3, 0x0f, 0x52, 0x8b, 0x60, 0xd4, 0x3f, 0x84, 0x63, 0x60, 0x68, 0x2b, + 0x7f, 0xe3, 0xce, 0x66, 0x7c, 0x00, 0x8e, 0x82, 0xc1, 0xbb, 0xf2, 0x87, 0x9b, 0x71, 0x2e, 0x77, + 0xaa, 0x99, 0x3f, 0x21, 0x41, 0x18, 0x3f, 0x42, 0x29, 0xfd, 0x20, 0x95, 0x43, 0x29, 0x67, 0x3f, + 0x85, 0x1a, 0x49, 0x05, 0x4c, 0x86, 0x52, 0x3d, 0x8c, 0x03, 0xfe, 0x80, 0xd4, 0x3d, 0x25, 0x9d, + 0x4f, 0x58, 0x00, 0x43, 0x6e, 0xbe, 0x89, 0xbd, 0x40, 0x1f, 0xe2, 0xa2, 0xe6, 0x62, 0x6b, 0x5c, + 0x72, 0x03, 0xcc, 0x75, 0xcf, 0xf6, 0x5d, 0x78, 0x9e, 0x08, 0xf2, 0x1c, 0x0b, 0x52, 0xf9, 0x37, + 0x9f, 0x4a, 0x34, 0x73, 0x77, 0xa1, 0xb2, 0x13, 0xa4, 0xf2, 0x32, 0xbd, 0x73, 0x9b, 0x7f, 0xee, + 0xfb, 0xb1, 0x66, 0xfe, 0xbb, 0x31, 0xf0, 0xdf, 0x5c, 0x7a, 0x36, 0x8f, 0x8a, 0x0a, 0x45, 0x7a, + 0x05, 0xb5, 0xc7, 0x3d, 0x69, 0x7b, 0x5b, 0xa3, 0x7e, 0x15, 0xa8, 0xa3, 0x92, 0xae, 0x1a, 0x35, + 0xa5, 0xc4, 0x2e, 0x87, 0x37, 0x04, 0x21, 0x5a, 0x37, 0x08, 0xa2, 0x3a, 0x2a, 0xe9, 0x87, 0xc4, + 0x44, 0x2a, 0xd6, 0xea, 0xa8, 0x42, 0x30, 0xb5, 0x4d, 0x62, 0x39, 0xb4, 0x76, 0xfd, 0x72, 0xf0, + 0x94, 0x63, 0x13, 0xc0, 0x53, 0x2e, 0xd8, 0x3f, 0x3f, 0xe5, 0x42, 0x0d, 0x77, 0xfa, 0x1e, 0x38, + 0xb7, 0xa5, 0x68, 0x65, 0xa4, 0xdb, 0x14, 0xa9, 0xba, 0x49, 0x10, 0x2e, 0x3a, 0x9f, 0x1d, 0xf3, + 0x50, 0xb6, 0x4a, 0xa9, 0x61, 0xe5, 0x44, 0x71, 0x5f, 0xa1, 0x55, 0xbb, 0x98, 0x2d, 0xe9, 0xaa, + 0xe8, 0x18, 0x23, 0x43, 0x4a, 0xba, 0x55, 0xb7, 0x28, 0xf1, 0x96, 0x9e, 0x6d, 0xa4, 0x55, 0x28, + 0x1d, 0xa1, 0x94, 0xc3, 0xdf, 0x09, 0x96, 0xa5, 0x52, 0x65, 0xe5, 0xd2, 0x32, 0x59, 0xce, 0xac, + 0x16, 0x57, 0x57, 0x33, 0xab, 0x6b, 0x2b, 0xe5, 0x0c, 0x5e, 0xbe, 0x78, 0x39, 0x73, 0x71, 0xb5, + 0x8c, 0x8b, 0xe5, 0xca, 0x3b, 0x64, 0x6d, 0x79, 0x35, 0x85, 0x1a, 0x85, 0x49, 0xbf, 0xb5, 0x61, + 0xc2, 0xa5, 0xfe, 0x3e, 0x0a, 0x12, 0x51, 0x49, 0xfc, 0x5c, 0x01, 0x2f, 0x83, 0x79, 0xd6, 0x3c, + 0xb6, 0x72, 0x57, 0x70, 0x28, 0xe1, 0x10, 0x2f, 0xc4, 0xe4, 0x39, 0x07, 0xc0, 0x47, 0xd8, 0x6a, + 0x4f, 0x1d, 0xef, 0x82, 0x64, 0x18, 0x35, 0x34, 0x83, 0x38, 0x73, 0x12, 0x27, 0x9f, 0x0a, 0xe2, + 0x6e, 0x04, 0xe6, 0x91, 0x0e, 0xbe, 0xc1, 0x16, 0x8f, 0x47, 0xbc, 0xc0, 0x87, 0xf9, 0x6e, 0xb7, + 0xbb, 0xbd, 0x0e, 0xbe, 0xa1, 0xb9, 0x65, 0x10, 0xf1, 0xc2, 0x60, 0x98, 0xef, 0x87, 0x81, 0x56, + 0xb1, 0x1b, 0xdf, 0x56, 0xf7, 0x39, 0x84, 0x78, 0x61, 0xa8, 0x83, 0xaf, 0xdf, 0x88, 0xbe, 0x07, + 0x4e, 0x47, 0x4c, 0x15, 0xea, 0x6f, 0x87, 0x11, 0x2f, 0x0c, 0xcb, 0x89, 0x90, 0xb1, 0x82, 0xad, + 0x6e, 0x77, 0xf4, 0xc0, 0x34, 0xc5, 0x0b, 0x23, 0x5d, 0xd0, 0x7d, 0xee, 0xef, 0x80, 0x44, 0x18, + 0x3d, 0x30, 0x1f, 0x8d, 0x22, 0x5e, 0x18, 0x95, 0x4f, 0x06, 0x71, 0x0b, 0xad, 0x59, 0xa9, 0xc3, + 0x5c, 0xa1, 0x8e, 0x71, 0x8c, 0x75, 0xc8, 0x21, 0x73, 0x85, 0xbb, 0xe4, 0x88, 0xb9, 0x82, 0x33, + 0x15, 0x40, 0xbc, 0x30, 0x11, 0x36, 0x57, 0xa1, 0x3d, 0x5f, 0x75, 0x75, 0x53, 0x4b, 0xdd, 0x71, + 0xc4, 0x0b, 0x93, 0x9d, 0x6e, 0xf2, 0xb5, 0x25, 0x51, 0x6d, 0x03, 0xfd, 0xd6, 0xc4, 0x0b, 0xf4, + 0x5b, 0x21, 0xdb, 0xb4, 0x7b, 0xae, 0x2b, 0x60, 0x21, 0x62, 0x9b, 0xb0, 0x53, 0x26, 0x11, 0x2f, + 0x4c, 0xcb, 0xf3, 0x21, 0xeb, 0x84, 0xc6, 0x9c, 0x1e, 0x04, 0x5a, 0x41, 0x31, 0x85, 0x78, 0x21, + 0xde, 0x8d, 0x40, 0xcf, 0x60, 0x0e, 0x8d, 0x43, 0xd3, 0x88, 0x17, 0x66, 0x22, 0xde, 0x09, 0x58, + 0xa9, 0x2b, 0x72, 0x60, 0xe0, 0xe2, 0x05, 0xd8, 0x89, 0xec, 0x71, 0xce, 0x55, 0x9b, 0x79, 0x22, + 0x95, 0x20, 0x3e, 0x42, 0xa9, 0x5e, 0x81, 0x95, 0xca, 0xa1, 0x8f, 0xa9, 0x69, 0x93, 0x0b, 0xc8, + 0xfd, 0x5b, 0xc1, 0x35, 0xcb, 0x5b, 0x3c, 0xbc, 0x10, 0x45, 0x0b, 0xc8, 0xed, 0xe0, 0x2d, 0x5f, + 0x40, 0xd2, 0x05, 0xb4, 0xf2, 0x10, 0x35, 0x52, 0x49, 0x30, 0x58, 0xd0, 0xcb, 0xf5, 0x6e, 0x95, + 0x3b, 0xf5, 0x00, 0x4c, 0x7b, 0x53, 0xe8, 0x3f, 0x2b, 0xb4, 0xca, 0xc0, 0xa6, 0x40, 0xcc, 0x7f, + 0xd3, 0x91, 0x63, 0x8a, 0x93, 0xa2, 0x06, 0xcb, 0x98, 0x62, 0xaf, 0x7a, 0xbc, 0x71, 0xac, 0xdf, + 0x1d, 0x22, 0x32, 0x43, 0x49, 0x7d, 0xc9, 0x81, 0xe9, 0x0f, 0x8d, 0x32, 0xa6, 0xe4, 0x9e, 0x24, + 0x93, 0x4f, 0x6d, 0x62, 0x51, 0xb8, 0x0e, 0x78, 0x5c, 0x74, 0x85, 0x18, 0x97, 0x96, 0xfb, 0xae, + 0x45, 0xb2, 0x83, 0x0d, 0xdf, 0x05, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, 0xff, 0x3c, 0xd1, 0x3a, 0x67, + 0x89, 0x2d, 0x85, 0xd4, 0xca, 0x37, 0xb1, 0x75, 0x20, 0x03, 0x17, 0xdc, 0xf9, 0x4e, 0x23, 0x30, + 0x1e, 0x88, 0x4d, 0xa7, 0x3d, 0xb8, 0xbf, 0x29, 0xdf, 0x8a, 0x0f, 0xc0, 0x11, 0xc0, 0xdf, 0xda, + 0xd9, 0x8c, 0x73, 0xd2, 0xe7, 0x08, 0x9c, 0x8a, 0x32, 0xbe, 0x43, 0xcc, 0x43, 0xa5, 0x44, 0xe0, + 0x9f, 0x79, 0x30, 0xbc, 0x6e, 0x3a, 0x36, 0x87, 0xfd, 0x4b, 0x9f, 0xec, 0x1f, 0x25, 0xf5, 0xb7, + 0xd8, 0x7f, 0xfe, 0xe6, 0x8f, 0x5f, 0xc6, 0xbe, 0x89, 0xa5, 0xfe, 0x12, 0x13, 0x0f, 0x97, 0xfd, + 0x87, 0xd6, 0x6e, 0xcf, 0xac, 0xe2, 0x51, 0xa0, 0x7c, 0x34, 0xc4, 0xa3, 0x60, 0x45, 0x68, 0x88, + 0x47, 0x81, 0xe8, 0x6c, 0x88, 0x16, 0x31, 0xb0, 0x89, 0xa9, 0x6e, 0x8a, 0x47, 0x76, 0xe8, 0xe0, + 0x28, 0x10, 0x49, 0x0d, 0xf1, 0x28, 0x74, 0xa1, 0xfc, 0x75, 0xe0, 0xbc, 0x1d, 0xae, 0x0d, 0xf1, + 0x28, 0x98, 0xdb, 0xde, 0xb3, 0xa8, 0x69, 0x98, 0xa4, 0xa2, 0x3c, 0x11, 0xd3, 0x0d, 0x97, 0x49, + 0x00, 0xcd, 0x8a, 0xd2, 0xb1, 0xa2, 0x8c, 0xac, 0x08, 0x42, 0x58, 0xc8, 0x5e, 0xa3, 0x66, 0x43, + 0x3c, 0x6a, 0xe7, 0xaa, 0x86, 0x78, 0x14, 0x79, 0x9a, 0x71, 0x30, 0xbb, 0xbe, 0xd9, 0x84, 0xf0, + 0x02, 0x2d, 0x78, 0x03, 0xfe, 0x98, 0x03, 0xc0, 0x75, 0x38, 0xbb, 0x1e, 0xaf, 0xc6, 0xe9, 0x69, + 0xe6, 0xf3, 0x73, 0xa9, 0xc5, 0x63, 0x3c, 0x9e, 0xe3, 0xd2, 0xf0, 0x5f, 0xc1, 0xf0, 0x0d, 0x5d, + 0x3f, 0xb0, 0x0d, 0x38, 0x9d, 0xb5, 0xec, 0xa2, 0x94, 0xdd, 0x2e, 0x7b, 0x77, 0xfa, 0x45, 0x38, + 0x67, 0x19, 0x67, 0x01, 0xbe, 0x79, 0x6c, 0xac, 0x39, 0x7d, 0x51, 0x03, 0xfe, 0x0f, 0x07, 0x86, + 0xdd, 0x3b, 0xfe, 0x22, 0xa6, 0xe9, 0xf1, 0xe2, 0x93, 0x5a, 0x66, 0x52, 0xbc, 0x9d, 0x7c, 0x4e, + 0x29, 0x1c, 0x33, 0xfc, 0x9c, 0x03, 0xa3, 0x7e, 0xb2, 0x81, 0x4b, 0xc7, 0x8a, 0x12, 0xc9, 0x4b, + 0x3d, 0x25, 0x79, 0xc4, 0x24, 0x29, 0x27, 0xd3, 0xe2, 0xa1, 0xf4, 0x6c, 0x49, 0x70, 0x91, 0x64, + 0x5d, 0x69, 0x9c, 0x1c, 0x75, 0x7f, 0x59, 0xea, 0x17, 0x05, 0xfe, 0x88, 0x03, 0x89, 0x5d, 0x4c, + 0x4b, 0x55, 0x27, 0x19, 0xb7, 0x92, 0xd7, 0xb6, 0xc6, 0x02, 0xef, 0xdb, 0x53, 0xe9, 0x12, 0x53, + 0x69, 0x49, 0x7a, 0x5b, 0x3c, 0x94, 0xf0, 0xf3, 0x0a, 0xc8, 0xa5, 0xe1, 0xff, 0x73, 0x60, 0x78, + 0x83, 0xd4, 0x08, 0x25, 0x9d, 0x91, 0xd6, 0x8b, 0xd7, 0x83, 0x66, 0xfe, 0xed, 0xe2, 0x79, 0x30, + 0x05, 0x40, 0xde, 0x50, 0xae, 0x93, 0x7a, 0xde, 0xa6, 0x55, 0x38, 0x00, 0x4e, 0x81, 0xe1, 0x5b, + 0xce, 0xa7, 0x04, 0x27, 0xc1, 0xa0, 0x49, 0x70, 0x19, 0x0c, 0x3d, 0x36, 0x15, 0x4a, 0xdc, 0xe0, + 0x4b, 0x3f, 0x6f, 0xf0, 0xfd, 0x81, 0x03, 0xa3, 0x57, 0x09, 0xbd, 0x6d, 0x13, 0xb3, 0xfe, 0x6d, + 0x86, 0xdf, 0x17, 0x5c, 0x33, 0x7f, 0x37, 0xb5, 0x03, 0x16, 0xba, 0x8d, 0x15, 0x2d, 0x86, 0x7d, + 0x8e, 0x13, 0x1f, 0x71, 0xc5, 0x01, 0xa6, 0x5f, 0x16, 0x5e, 0x38, 0x4e, 0xbf, 0x4f, 0x1d, 0x06, + 0xbe, 0x96, 0x5f, 0x0c, 0x81, 0xf8, 0x55, 0x42, 0xfd, 0x2e, 0xc2, 0x65, 0x7e, 0xb9, 0xff, 0xd2, + 0xe9, 0xe1, 0x27, 0x5f, 0x1c, 0x35, 0xf5, 0xd9, 0x20, 0xd3, 0xe0, 0xaf, 0x3c, 0xfc, 0x86, 0x3f, + 0x46, 0x87, 0x56, 0x6b, 0xe2, 0x25, 0xe1, 0x6e, 0x23, 0x4e, 0x23, 0x7a, 0x16, 0xa9, 0x58, 0x3d, + 0x67, 0x94, 0x8e, 0x33, 0xfb, 0x59, 0x87, 0xe1, 0x4a, 0xf2, 0x8c, 0x29, 0xa2, 0xfb, 0x69, 0x4f, + 0xdc, 0x50, 0xed, 0xeb, 0xdd, 0xe5, 0x77, 0xe2, 0xb5, 0xbb, 0xf8, 0xae, 0x8a, 0xf4, 0x64, 0xd8, + 0x59, 0xda, 0x7a, 0xb4, 0xce, 0x3d, 0x8e, 0x7b, 0xea, 0x69, 0x3d, 0x8b, 0x6b, 0xa8, 0xf4, 0xc2, + 0x5f, 0xf2, 0x60, 0x70, 0xb3, 0x54, 0xd5, 0x61, 0xaf, 0x1f, 0x4e, 0x2c, 0xbb, 0x98, 0x75, 0x87, + 0x18, 0x3f, 0x39, 0x3c, 0x37, 0x64, 0xea, 0x4f, 0xb1, 0x66, 0xfe, 0x3f, 0x62, 0x60, 0x82, 0x94, + 0xaa, 0x3a, 0xb2, 0xdc, 0x96, 0x0b, 0x8c, 0xb2, 0x95, 0x69, 0x94, 0xe0, 0xcc, 0x1d, 0x5b, 0x55, + 0xb1, 0x59, 0xcf, 0xa1, 0x4d, 0x6f, 0x2b, 0x19, 0xdf, 0x68, 0x3f, 0x03, 0xb1, 0xdd, 0xd4, 0x06, + 0x80, 0xe1, 0x6b, 0xcb, 0xa4, 0xed, 0xf3, 0xb2, 0x7e, 0x70, 0x05, 0xf0, 0x17, 0x97, 0x56, 0xe0, + 0x1a, 0xb8, 0x24, 0x13, 0x6a, 0x9b, 0x1a, 0x29, 0xa3, 0xc7, 0x55, 0xa2, 0x21, 0x5a, 0x25, 0xc8, + 0x24, 0x96, 0x6e, 0x9b, 0x25, 0x82, 0x14, 0x0b, 0x51, 0xa2, 0x1a, 0xba, 0x89, 0x4d, 0xa5, 0x56, + 0x47, 0xb6, 0x86, 0x0f, 0xb1, 0x52, 0xc3, 0xc5, 0x1a, 0xc9, 0x7e, 0xf0, 0x2e, 0xe0, 0x57, 0x97, + 0x56, 0xe1, 0x2a, 0x48, 0x3f, 0x83, 0x40, 0x59, 0x27, 0x16, 0xd2, 0x74, 0x8a, 0xc8, 0x13, 0xc5, + 0xa2, 0x59, 0x38, 0x0c, 0x06, 0x7f, 0x10, 0xe3, 0x78, 0x76, 0xc9, 0x1e, 0x1e, 0x9f, 0x26, 0x1c, + 0xc3, 0x88, 0x47, 0xae, 0x63, 0xee, 0xcf, 0xa7, 0xe2, 0xc1, 0x82, 0xe3, 0x9c, 0xe5, 0xdc, 0x27, + 0x9b, 0xfb, 0x10, 0x76, 0x1c, 0xc1, 0x9f, 0x70, 0x60, 0x62, 0x83, 0x10, 0x83, 0xfd, 0xbe, 0xe4, + 0x6c, 0xbc, 0x9a, 0xce, 0xe6, 0x0a, 0xd3, 0xed, 0x72, 0x6a, 0xf5, 0xd8, 0x14, 0x1f, 0xfa, 0xe9, + 0x3a, 0xeb, 0x8c, 0x2b, 0xac, 0x0a, 0xe5, 0x01, 0xd8, 0xd1, 0x0b, 0x8a, 0x56, 0x56, 0xb4, 0x7d, + 0x0b, 0xce, 0x77, 0x64, 0xf0, 0x0d, 0xef, 0x57, 0xfd, 0x9e, 0xc9, 0x7d, 0x00, 0xde, 0x03, 0x23, + 0x77, 0x15, 0x95, 0xe8, 0x36, 0x85, 0x3d, 0x80, 0x7a, 0x22, 0x9f, 0x66, 0xe2, 0x9f, 0x84, 0xb3, + 0x41, 0x7b, 0x52, 0x8f, 0x58, 0x15, 0xc4, 0x37, 0x4d, 0x53, 0x37, 0x9d, 0xf2, 0xbd, 0x41, 0x28, + 0x56, 0x6a, 0x56, 0xdf, 0x0c, 0xce, 0x31, 0x06, 0xaf, 0xc3, 0x85, 0x90, 0xc3, 0x1c, 0xaa, 0x8f, + 0x15, 0x5a, 0x2d, 0x7b, 0x54, 0xff, 0x97, 0x03, 0xf0, 0x2a, 0xa1, 0xd1, 0xd9, 0xed, 0xf8, 0x1e, + 0x21, 0x82, 0xd1, 0x53, 0x8c, 0xb7, 0x98, 0x18, 0x67, 0x52, 0xf3, 0x41, 0x31, 0x1c, 0x09, 0x8a, + 0x7a, 0xb9, 0x2e, 0x1e, 0x39, 0x1d, 0x01, 0x9b, 0xf1, 0xe0, 0x7f, 0x71, 0x60, 0x66, 0x57, 0xb7, + 0xa8, 0x43, 0x91, 0xa1, 0x32, 0x41, 0x9e, 0x6f, 0x4c, 0xec, 0xc9, 0x5d, 0x64, 0xdc, 0xcf, 0xa7, + 0xce, 0x05, 0xb9, 0x1b, 0xba, 0x45, 0x1d, 0x09, 0xd8, 0x2f, 0x86, 0xae, 0x18, 0xad, 0xa0, 0xf8, + 0x05, 0x07, 0x66, 0xd7, 0xab, 0xa4, 0x74, 0xe0, 0x17, 0xe7, 0x5d, 0x6c, 0x62, 0xd5, 0x7a, 0x45, + 0x31, 0x7d, 0x95, 0x89, 0x9b, 0x87, 0x57, 0x8e, 0x8b, 0x69, 0x83, 0x49, 0x25, 0xee, 0x13, 0xda, + 0x35, 0xbc, 0xe1, 0xaf, 0x39, 0x70, 0x82, 0xa9, 0xe1, 0x58, 0xf4, 0xd5, 0xeb, 0x71, 0x9b, 0xe9, + 0x71, 0x3d, 0x95, 0x7b, 0x4e, 0x3d, 0x1c, 0x8f, 0x84, 0x87, 0xbe, 0x46, 0x2e, 0xfc, 0x3f, 0x4e, + 0x92, 0x3f, 0xe3, 0x9a, 0xf9, 0xaf, 0x39, 0x58, 0xe9, 0x31, 0x4e, 0x07, 0x1f, 0xf1, 0x51, 0x26, + 0x83, 0x1e, 0x57, 0x95, 0x52, 0x15, 0x59, 0x55, 0xdd, 0xae, 0x95, 0x59, 0x5e, 0x2c, 0x12, 0x64, + 0x5b, 0xa4, 0x8c, 0x14, 0x0d, 0x19, 0x35, 0x5c, 0x22, 0x48, 0xaf, 0xb0, 0x0c, 0x5a, 0xd6, 0x4b, + 0xb6, 0x4a, 0x34, 0x77, 0x48, 0x43, 0x25, 0x5d, 0x75, 0x16, 0x67, 0x92, 0xb7, 0xc1, 0x62, 0xb7, + 0x96, 0xcd, 0xc9, 0x6f, 0xfe, 0x00, 0xdf, 0xef, 0x23, 0xf0, 0x23, 0x70, 0xa2, 0x84, 0x55, 0x52, + 0x5b, 0xc7, 0x16, 0xf1, 0x68, 0x38, 0xd3, 0x26, 0x94, 0xc1, 0x90, 0xfb, 0x7b, 0x74, 0xbf, 0x37, + 0x7c, 0x9e, 0x59, 0x79, 0x16, 0xce, 0x84, 0x6e, 0xb8, 0x73, 0x24, 0x7d, 0x02, 0x16, 0xf2, 0x9a, + 0x4e, 0xab, 0xc4, 0xf4, 0x38, 0x39, 0xb7, 0x2a, 0x90, 0xed, 0xde, 0x0f, 0xe5, 0xbe, 0x7e, 0x19, + 0x0f, 0x14, 0xbe, 0x1e, 0x69, 0xe6, 0xbf, 0x1a, 0x81, 0xbf, 0xe5, 0xc0, 0x6c, 0x1e, 0x15, 0xdc, + 0x67, 0xfb, 0x80, 0xff, 0x3f, 0x02, 0x27, 0xf6, 0xe5, 0xdd, 0xf5, 0xcc, 0x55, 0x57, 0x75, 0x64, + 0x98, 0xfa, 0x23, 0x52, 0xa2, 0xfd, 0x9a, 0x2c, 0x19, 0xd7, 0x74, 0x8d, 0xfc, 0x93, 0xa7, 0x9a, + 0x03, 0x9d, 0xfe, 0x04, 0x9c, 0x28, 0xdc, 0xd9, 0x40, 0x2b, 0x99, 0xf5, 0x1a, 0xb6, 0x2d, 0x82, + 0x6e, 0x28, 0x25, 0xa2, 0x59, 0x04, 0x6e, 0xf5, 0x47, 0x59, 0x2c, 0xd6, 0xf4, 0xa2, 0xa8, 0x62, + 0x8b, 0x12, 0x53, 0xbc, 0xb1, 0xbd, 0xbe, 0xb9, 0x73, 0x67, 0x33, 0x4b, 0x9f, 0x50, 0x89, 0x5f, + 0xce, 0x2e, 0xa5, 0x79, 0x2e, 0x36, 0x28, 0xc5, 0xb1, 0xe1, 0xfe, 0xd8, 0xa0, 0xe8, 0x9a, 0xf8, + 0xc8, 0xd2, 0x35, 0x69, 0x2e, 0xb8, 0xf3, 0x24, 0x53, 0xd1, 0xf5, 0x8c, 0xaa, 0xa8, 0x24, 0xd7, + 0x01, 0x99, 0xeb, 0x01, 0x29, 0xef, 0x3a, 0xa5, 0x7c, 0x05, 0x6e, 0x83, 0xab, 0x9d, 0xa5, 0xdc, + 0xb6, 0x88, 0xd9, 0x2e, 0xe3, 0x55, 0x7c, 0x48, 0x90, 0x41, 0x4c, 0x55, 0xb1, 0x2c, 0x27, 0x30, + 0xa9, 0x8e, 0x70, 0xa9, 0x44, 0x2c, 0x2b, 0x54, 0xf6, 0xb3, 0xf2, 0x4b, 0x34, 0x07, 0x23, 0xf2, + 0x35, 0xc0, 0xaf, 0x2e, 0xaf, 0xc1, 0x3c, 0x98, 0xdc, 0x7e, 0x4b, 0x45, 0x18, 0x51, 0x82, 0x0d, + 0x9d, 0x66, 0xe1, 0x12, 0xc8, 0x26, 0xfb, 0x7a, 0x97, 0xbd, 0xff, 0x7f, 0x31, 0x30, 0x0d, 0xc6, + 0x0a, 0xd8, 0x52, 0x4a, 0x6c, 0x30, 0x8b, 0x8d, 0x72, 0xe0, 0xb5, 0xd0, 0xa8, 0x36, 0x3d, 0x1a, + 0x4b, 0x8e, 0x7d, 0x94, 0xc9, 0xef, 0x6e, 0x67, 0xae, 0x93, 0x3a, 0x8a, 0x81, 0xdf, 0x71, 0xad, + 0xd1, 0xed, 0x57, 0xdc, 0x28, 0x2f, 0x0c, 0x4a, 0x67, 0x7d, 0x1f, 0x06, 0x1c, 0x2e, 0xea, 0xd8, + 0xa6, 0x55, 0xd1, 0xf9, 0xa3, 0x9b, 0xca, 0xbf, 0x90, 0xdc, 0x62, 0x6f, 0x20, 0xaa, 0x1f, 0x10, + 0xad, 0xf0, 0xef, 0x20, 0xe9, 0x4e, 0x82, 0x10, 0x5e, 0x35, 0xb1, 0x46, 0x2d, 0xe4, 0x2c, 0x3c, + 0xeb, 0x81, 0x05, 0x6f, 0x3e, 0x84, 0xb3, 0xde, 0x21, 0x5b, 0xf9, 0xa7, 0xeb, 0x60, 0x08, 0x97, + 0x55, 0x45, 0x83, 0xb9, 0x10, 0xaa, 0x56, 0x0e, 0x81, 0x31, 0x67, 0x38, 0x60, 0x8a, 0x45, 0x9d, + 0x16, 0xe1, 0x90, 0x20, 0x45, 0xab, 0xe8, 0xa6, 0xca, 0xfc, 0x5d, 0x5c, 0x04, 0x93, 0x41, 0x53, + 0x0c, 0x44, 0x67, 0xd6, 0xe2, 0xf9, 0x9e, 0x53, 0x6b, 0x14, 0xd4, 0xdc, 0x06, 0xa7, 0x6e, 0xb6, + 0xb3, 0x4f, 0xf0, 0x4e, 0xf5, 0x7b, 0x97, 0xee, 0x8f, 0xb5, 0x3c, 0x57, 0x1c, 0x66, 0xf7, 0x79, + 0xe5, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xed, 0x21, 0x52, 0xb7, 0x7b, 0x29, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 23ae923228d..cc2b326c833 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -265,7 +265,10 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.EnumValueAnnotation = NumericEnum(e) - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -387,7 +390,10 @@ func request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -439,7 +445,10 @@ func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -539,7 +548,10 @@ func request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_GetQuery_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -799,7 +811,10 @@ func request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runti var protoReq sub.StringMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -931,6 +946,90 @@ func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, ma } +var ( + filter_ABitOfEverythingService_CheckGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "name": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} +) + +func request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CheckGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_CheckPostQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "string_value": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.SingleNested); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "string_value") + } + + protoReq.StringValue, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CheckPostQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -1338,6 +1437,46 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_CheckGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckPostQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1377,6 +1516,10 @@ var ( pattern_ABitOfEverythingService_GetMessageWithBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "withbody", "id"}, "")) pattern_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "postwithemptybody", "name"}, "")) + + pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "")) + + pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "")) ) var ( @@ -1415,6 +1558,10 @@ var ( forward_ABitOfEverythingService_GetMessageWithBody_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.ForwardResponseMessage ) // RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 5a4e525ff8c..84d22126f11 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -438,6 +438,17 @@ service ABitOfEverythingService { body: "*" }; } + rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" + }; + } + rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/params/post/{string_value}" + body: "single_nested" + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 952baa18492..a83eeb952c3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -121,6 +121,361 @@ } } }, + "/v1/example/a_bit_of_everything/params/get/{single_nested.name}": { + "get": { + "operationId": "CheckGetQueryParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "single_nested.name", + "description": "name is nested field.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "single_nested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "single_nested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "uuid", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "float_value", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "double_value", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64_value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64_value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "bool_value", + "in": "query", + "required": false, + "type": "boolean", + "format": "boolean" + }, + { + "name": "string_value", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytes_value", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enum_value", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nested_path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeated_string_value", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneof_string", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestamp_value", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeated_enum_value", + "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeated_enum_annotation", + "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enum_value_annotation", + "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeated_string_annotation", + "description": "Repeated string title. Repeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nested_annotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nested_annotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, + "/v1/example/a_bit_of_everything/params/post/{string_value}": { + "post": { + "operationId": "CheckPostQueryParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "string_value", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/a_bit_of_everything/query/{uuid}": { "get": { "operationId": "GetQuery", diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 6995d2afc57..65aaccd3ccc 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -54,7 +54,10 @@ func request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -100,7 +103,10 @@ func request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -162,7 +168,10 @@ func request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -224,7 +233,10 @@ func request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_3); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -259,7 +271,10 @@ func request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -293,7 +308,10 @@ func request_EchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Mar var protoReq SimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b34314fe7d1..e633c129807 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -221,7 +221,10 @@ func request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler runtime var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -292,7 +295,10 @@ func request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -335,7 +341,10 @@ func request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -370,7 +379,10 @@ func request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler runtime return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -405,7 +417,10 @@ func request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -459,7 +474,10 @@ func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -494,7 +512,10 @@ func request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -537,7 +558,10 @@ func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -636,7 +660,10 @@ func request_FlowCombination_RpcBodyStream_2(ctx context.Context, marshaler runt var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyStream_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -723,7 +750,10 @@ func request_FlowCombination_RpcBodyStream_4(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyStream_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -774,7 +804,10 @@ func request_FlowCombination_RpcBodyStream_5(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyStream_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -817,7 +850,10 @@ func request_FlowCombination_RpcBodyStream_6(ctx context.Context, marshaler runt return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyStream_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyStream_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -860,7 +896,10 @@ func request_FlowCombination_RpcPathSingleNestedStream_0(ctx context.Context, ma return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathSingleNestedStream_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedStream_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -922,7 +961,10 @@ func request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedStream_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -965,7 +1007,10 @@ func request_FlowCombination_RpcPathNestedStream_1(ctx context.Context, marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedStream_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1016,7 +1061,10 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedStream_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedStream_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 19c6664ecb2..8d50142d728 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -54,7 +54,10 @@ func request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtim return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -100,7 +103,10 @@ func request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtim return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -134,7 +140,10 @@ func request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler var protoReq UnannotatedSimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index 384638cab31..fc3acca0c1e 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -312,3 +312,11 @@ func (s *_ABitOfEverythingServer) GetMessageWithBody(ctx context.Context, msg *e func (s *_ABitOfEverythingServer) PostWithEmptyBody(ctx context.Context, msg *examples.Body) (*empty.Empty, error) { return &empty.Empty{}, nil } + +func (s *_ABitOfEverythingServer) CheckGetQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + return msg, nil +} + +func (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + return msg, nil +} diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index d376ccdb255..a14de379642 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -345,7 +345,10 @@ var ( {{end}} {{end}} {{if .HasQueryParam}} - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } {{end}} From 14c247169cc1e96c27e5eb74b354ce3d6dfd72a8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 13 Jun 2019 09:06:42 +0100 Subject: [PATCH 0154/1518] Revert "protoc-gen-swagger: check typeIndex when typeName is Method" This reverts the changes introduced in #833. It caused a regression in the swagger generator allow_merge behaviour. Fixes #923 --- .../abe/camel_case_service_name_api.go | 3 +- .../a_bit_of_everything.swagger.json | 2 + protoc-gen-swagger/genswagger/template.go | 2 +- .../genswagger/template_test.go | 142 ------------------ 4 files changed, 5 insertions(+), 144 deletions(-) diff --git a/examples/clients/abe/camel_case_service_name_api.go b/examples/clients/abe/camel_case_service_name_api.go index d761b19786c..cb8cb48fd99 100644 --- a/examples/clients/abe/camel_case_service_name_api.go +++ b/examples/clients/abe/camel_case_service_name_api.go @@ -37,7 +37,8 @@ func NewCamelCaseServiceNameApiWithBasePath(basePath string) *CamelCaseServiceNa } /** - * + * Create a new ABitOfEverything + * This API creates a new ABitOfEverything * * @return *interface{} */ diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index a83eeb952c3..edfa08730b7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1589,6 +1589,8 @@ }, "/v2/example/empty": { "get": { + "summary": "Create a new ABitOfEverything", + "description": "This API creates a new ABitOfEverything", "operationId": "Empty", "responses": { "200": { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index b802fef186d..b02ed6aa2c7 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1366,7 +1366,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type } if typeName == "Method" { - if paths[0] != serviceProtoPath || paths[1] != typeIndex || paths[2] != methodProtoPath { + if paths[0] != serviceProtoPath || paths[2] != methodProtoPath { return false } paths = paths[2:] diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 6f14e5f268b..4853a4370d3 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1372,148 +1372,6 @@ func TestRenderMessagesAsDefinition(t *testing.T) { } } -func fileFixtureServices(services []string) *descriptor.File { - var ( - svcdesc = []*protodescriptor.ServiceDescriptorProto{} - loc = []*protodescriptor.SourceCodeInfo_Location{} - msgdesc = []*protodescriptor.DescriptorProto{} - methdesc = []*protodescriptor.MethodDescriptorProto{} - msg = []*descriptor.Message{} - svc = []*descriptor.Service{} - ) - - for _, service := range services { - // loc - sc := &protodescriptor.SourceCodeInfo_Location{ - LeadingComments: proto.String(fmt.Sprintf("%s message", service)), - } - loc = append(loc, sc) - // methdesc - md := &protodescriptor.MethodDescriptorProto{ - Name: proto.String(service), - InputType: proto.String(fmt.Sprintf("%sMessage", service)), - OutputType: proto.String(fmt.Sprintf("%sMessage", service)), - } - methdesc = append(methdesc, md) - // svcdesc - sd := &protodescriptor.ServiceDescriptorProto{ - Name: proto.String(fmt.Sprintf("%sService", service)), - Method: []*protodescriptor.MethodDescriptorProto{md}, - } - svcdesc = append(svcdesc, sd) - // msgdesc - d := &protodescriptor.DescriptorProto{ - Name: proto.String(fmt.Sprintf("%sRequest", service)), - } - msgdesc = append(msgdesc, d) - // msg - m := &descriptor.Message{ - DescriptorProto: d, - } - msg = append(msg, m) - // methods - meth := &descriptor.Method{ - MethodDescriptorProto: md, - RequestType: m, - ResponseType: m, - Bindings: []*descriptor.Binding{ - { - HTTPMethod: "POST", - Body: &descriptor.Body{FieldPath: nil}, - PathTmpl: httprule.Template{ - Version: 1, - OpCodes: []int{0, 0}, - Template: fmt.Sprintf("/v1/%s", service), - }, - }, - }, - } - s := &descriptor.Service{ - ServiceDescriptorProto: sd, - Methods: []*descriptor.Method{meth}, - } - svc = append(svc, s) - } - - file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{ - Location: loc, - }, - Name: proto.String("example.proto"), - Package: proto.String("example"), - Dependency: []string{}, - MessageType: msgdesc, - Service: svcdesc, - }, - GoPkg: descriptor.GoPackage{ - Path: "example.com/path/to/example/example1.pb", - Name: "example_pb", - }, - Messages: msg, - Services: svc, - } - return &file -} - -func TestIsProtoPathMatches(t *testing.T) { - for _, test := range []struct { - path []int32 - outerPaths []int32 - typeName string - typeIndex int32 - fieldPaths []int32 - want bool - }{ - {[]int32{6, 0, 2, 0}, []int32{}, "Method", 1, []int32{2, 0}, false}, - {[]int32{6, 0, 2, 0, 1}, []int32{}, "Method", 1, []int32{2, 0}, false}, - {[]int32{6, 0, 2, 0}, []int32{}, "Method", 0, []int32{2, 0}, true}, - {[]int32{}, []int32{}, "Package", 2, []int32{}, false}, - {[]int32{2}, []int32{}, "Package", 3, []int32{}, false}, - {[]int32{2}, []int32{}, "Package", 2, []int32{}, true}, - {[]int32{4, 0}, []int32{}, "MessageType", 1, []int32{}, false}, - {[]int32{4, 0, 2, 0}, []int32{}, "MessageType", 0, []int32{4, 0}, false}, - } { - got := isProtoPathMatches(test.path, test.outerPaths, test.typeName, test.typeIndex, test.fieldPaths) - if got != test.want { - t.Errorf("isProtoPathMatches(%v) got (%t) want %t", test, got, test.want) - } - } -} - -func TestProtoComments(t *testing.T) { - for _, test := range []struct { - services []string - startPath []int32 - outers []string - typeName string - typeIndex int32 - fieldPaths []int32 - want string - }{ - {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 0, []int32{2, 0}, "Foo message"}, - {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 1, []int32{2, 0}, "Bar message"}, - {[]string{"Foo", "Bar"}, []int32{6, 0, 2, 0}, []string{}, "Method", 2, []int32{2, 0}, ""}, - {[]string{"Foo", "Bar"}, []int32{4, 0, 1}, []string{}, "Method", 0, []int32{2, 0}, ""}, - {[]string{"Foo", "Bar"}, []int32{6, 0, 1, 1}, []string{}, "Method", 0, []int32{2, 0}, ""}, - {[]string{"Foo", "Bar", "Baz"}, []int32{6, 0, 2, 0}, []string{}, "Method", 2, []int32{2, 0}, "Baz message"}, - } { - file := fileFixtureServices(test.services) - for i, loc := range file.SourceCodeInfo.Location { - test.startPath[1] = int32(i) - loc.Path = append(loc.Path, test.startPath...) - } - reg := descriptor.NewRegistry() - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, - }) - got := protoComments(reg, file, test.outers, test.typeName, test.typeIndex, test.fieldPaths...) - if got != test.want { - t.Errorf("protoComments(%v) got (%s) want %s", test, got, test.want) - } - } -} - func TestUpdateSwaggerDataFromComments(t *testing.T) { tests := []struct { From cddead4ec1d10cc62f08e1fd6f8591fbe71cfff9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 13 Jun 2019 21:35:25 +0100 Subject: [PATCH 0155/1518] Generate changelog for 1.9.1 --- CHANGELOG.md | 22 ++++++++++++++++++---- Makefile | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c60c86475e5..b820c925e32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Change Log +## [v1.9.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.1) (2019-06-13) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.0...v1.9.1) + +**Closed issues:** + +- grpc: received message larger than max [\#943](https://github.com/grpc-ecosystem/grpc-gateway/issues/943) +- json 1.1 api support for grpc-ecosystem to use queryparams with filter [\#938](https://github.com/grpc-ecosystem/grpc-gateway/issues/938) +- i import a new gateway.Endpoint without recompile [\#937](https://github.com/grpc-ecosystem/grpc-gateway/issues/937) +- all SubConns are in TransientFailure [\#936](https://github.com/grpc-ecosystem/grpc-gateway/issues/936) +- Merging swagger specs fails to use rpc comments \(again\) [\#923](https://github.com/grpc-ecosystem/grpc-gateway/issues/923) + +**Merged pull requests:** + +- Revert "protoc-gen-swagger: check typeIndex when typeName is Method" [\#945](https://github.com/grpc-ecosystem/grpc-gateway/pull/945) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- fix query params not populate if method is post [\#939](https://github.com/grpc-ecosystem/grpc-gateway/pull/939) ([mingqing](https://github.com/mingqing)) +- Fix make test on MacOS [\#935](https://github.com/grpc-ecosystem/grpc-gateway/pull/935) ([emilaasa](https://github.com/emilaasa)) + ## [v1.9.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.0) (2019-05-14) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.6...v1.9.0) @@ -9,6 +26,7 @@ **Merged pull requests:** +- Generate changelog for 1.9.0 [\#933](https://github.com/grpc-ecosystem/grpc-gateway/pull/933) ([johanbrandhorst](https://github.com/johanbrandhorst)) - use error value for bad URI so custom error handler could treat it special [\#932](https://github.com/grpc-ecosystem/grpc-gateway/pull/932) ([jhump](https://github.com/jhump)) - newline between JSON messages [\#931](https://github.com/grpc-ecosystem/grpc-gateway/pull/931) ([jhump](https://github.com/jhump)) - ability to customize stream errors [\#930](https://github.com/grpc-ecosystem/grpc-gateway/pull/930) ([jhump](https://github.com/jhump)) @@ -202,10 +220,6 @@ ## [v1.6.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) -**Fixed bugs:** - -- Comments of rpc method gets copied if multiple services are present in a proto file. [\#746](https://github.com/grpc-ecosystem/grpc-gateway/issues/746) - **Closed issues:** - Issue with google.protobuf.Empty representation in swagger file [\#831](https://github.com/grpc-ecosystem/grpc-gateway/issues/831) diff --git a/Makefile b/Makefile index ad9b85daec5..8d61d71bc66 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.0 + --future-release=v1.9.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From e77cc6849d1295f5c3611ee7eb3388f251a4e0bf Mon Sep 17 00:00:00 2001 From: James Hamlin Date: Sat, 15 Jun 2019 23:18:55 -0700 Subject: [PATCH 0156/1518] Support colon in final path segment, last match wins behavior (behind flags) (#949) * Support colon in final path segment, last match wins behavior (behind flags) Signed-off-by: James Hamlin * Update examples Signed-off-by: James Hamlin Fixes #224 --- .../examplepb/a_bit_of_everything.pb.gw.go | 42 +++++----- .../proto/examplepb/echo_service.pb.gw.go | 14 ++-- .../proto/examplepb/flow_combination.pb.gw.go | 52 ++++++------- .../examplepb/response_body_service.pb.gw.go | 6 +- examples/proto/examplepb/stream.pb.gw.go | 6 +- .../unannotated_echo_service.pb.gw.go | 8 +- examples/proto/examplepb/wrappers.pb.gw.go | 22 +++--- .../descriptor/registry.go | 14 ++++ .../gengateway/template.go | 8 +- .../gengateway/template_test.go | 4 +- protoc-gen-grpc-gateway/main.go | 2 + runtime/mux.go | 16 +++- runtime/mux_test.go | 78 ++++++++++++++++--- runtime/pattern.go | 51 ++++++++++-- 14 files changed, 227 insertions(+), 96 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index cc2b326c833..df3b7b394f4 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -1481,45 +1481,45 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) + pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) + pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) + pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "")) + pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "")) + pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{"v1", "example", "a_bit_of_everything_repeated", "path_repeated_float_value", "path_repeated_double_value", "path_repeated_int64_value", "path_repeated_uint64_value", "path_repeated_int32_value", "path_repeated_fixed64_value", "path_repeated_fixed32_value", "path_repeated_bool_value", "path_repeated_string_value", "path_repeated_bytes_value", "path_repeated_uint32_value", "path_repeated_enum_value", "path_repeated_sfixed32_value", "path_repeated_sfixed64_value", "path_repeated_sint32_value", "path_repeated_sint64_value"}, "")) + pattern_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{"v1", "example", "a_bit_of_everything_repeated", "path_repeated_float_value", "path_repeated_double_value", "path_repeated_int64_value", "path_repeated_uint64_value", "path_repeated_int32_value", "path_repeated_fixed64_value", "path_repeated_fixed32_value", "path_repeated_bool_value", "path_repeated_string_value", "path_repeated_bytes_value", "path_repeated_uint32_value", "path_repeated_enum_value", "path_repeated_sfixed32_value", "path_repeated_sfixed64_value", "path_repeated_sint32_value", "path_repeated_sint64_value"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "echo", "value"}, "")) + pattern_ABitOfEverythingService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "echo", "value"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "")) + pattern_ABitOfEverythingService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "")) + pattern_ABitOfEverythingService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_DeepPathEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "single_nested.name"}, "")) + pattern_ABitOfEverythingService_DeepPathEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "single_nested.name"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_Timeout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "timeout"}, "")) + pattern_ABitOfEverythingService_Timeout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "timeout"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_ErrorWithDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "errorwithdetails"}, "")) + pattern_ABitOfEverythingService_ErrorWithDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "errorwithdetails"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_GetMessageWithBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "withbody", "id"}, "")) + pattern_ABitOfEverythingService_GetMessageWithBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "withbody", "id"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "postwithemptybody", "name"}, "")) + pattern_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "postwithemptybody", "name"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "")) + pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "")) + pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -1626,7 +1626,7 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime } var ( - pattern_CamelCaseServiceName_Empty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "empty"}, "")) + pattern_CamelCaseServiceName_Empty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "empty"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 65aaccd3ccc..1ceb1894a2e 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -502,19 +502,19 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux } var ( - pattern_EchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "")) + pattern_EchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "")) + pattern_EchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo", "id", "num", "lang"}, "")) + pattern_EchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo", "id", "num", "lang"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo1", "id", "line_num", "status.note"}, "")) + pattern_EchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo1", "id", "line_num", "status.note"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo2", "no.note"}, "")) + pattern_EchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo2", "no.note"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "")) + pattern_EchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) + pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index e633c129807..e5de847c464 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1643,57 +1643,57 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv } var ( - pattern_FlowCombination_RpcEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "empty"}, "")) + pattern_FlowCombination_RpcEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "empty"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "empty", "stream"}, "")) + pattern_FlowCombination_RpcEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "empty", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_StreamEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stream", "empty", "rpc"}, "")) + pattern_FlowCombination_StreamEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stream", "empty", "rpc"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_StreamEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"stream", "empty"}, "")) + pattern_FlowCombination_StreamEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"stream", "empty"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "body"}, "")) + pattern_FlowCombination_RpcBodyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "body"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "path", "a", "b", "c"}, "")) + pattern_FlowCombination_RpcBodyRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "path", "a", "b", "c"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "query"}, "")) + pattern_FlowCombination_RpcBodyRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "query"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "body", "path", "a", "b"}, "")) + pattern_FlowCombination_RpcBodyRpc_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "body", "path", "a", "b"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{"rpc", "body", "query"}, "")) + pattern_FlowCombination_RpcBodyRpc_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{"rpc", "body", "query"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 0}, []string{"rpc", "body", "path", "a", "query"}, "")) + pattern_FlowCombination_RpcBodyRpc_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 0}, []string{"rpc", "body", "path", "a", "query"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyRpc_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 0}, []string{"rpc", "path", "a", "query"}, "")) + pattern_FlowCombination_RpcBodyRpc_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 0}, []string{"rpc", "path", "a", "query"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathSingleNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) + pattern_FlowCombination_RpcPathSingleNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{"rpc", "path-nested", "a.str", "b"}, "")) + pattern_FlowCombination_RpcPathNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{"rpc", "path-nested", "a.str", "b"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) + pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) + pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "body", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "body", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "path", "a", "b", "c", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "path", "a", "b", "c", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "query", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "body", "path", "a", "b", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "body", "path", "a", "b", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"rpc", "body", "query", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"rpc", "body", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"rpc", "body", "path", "a", "query", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"rpc", "body", "path", "a", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcBodyStream_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"rpc", "path", "a", "query", "stream"}, "")) + pattern_FlowCombination_RpcBodyStream_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"rpc", "path", "a", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathSingleNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) + pattern_FlowCombination_RpcPathSingleNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"rpc", "path-nested", "a.str", "b", "stream"}, "")) + pattern_FlowCombination_RpcPathNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"rpc", "path-nested", "a.str", "b", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) + pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) + pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 35b4f766884..7de38ce36af 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -238,11 +238,11 @@ func (m response_ResponseBodyService_ListResponseStrings_0) XXX_ResponseBody() i } var ( - pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "")) + pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "")) + pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "")) + pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index afda301f0ca..3b01d805071 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -242,11 +242,11 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM } var ( - pattern_StreamService_BulkCreate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "bulk"}, "")) + pattern_StreamService_BulkCreate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "bulk"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_StreamService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) + pattern_StreamService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_StreamService_BulkEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "echo"}, "")) + pattern_StreamService_BulkEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "echo"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 8d50142d728..721b18ba6e2 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -274,13 +274,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti } var ( - pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "")) + pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "")) + pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "")) + pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) + pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 3b1478554aa..1c0765519f8 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -479,27 +479,27 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv } var ( - pattern_WrappersService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "wrappers"}, "")) + pattern_WrappersService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "wrappers"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testString"}, "")) + pattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testString"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt32"}, "")) + pattern_WrappersService_CreateInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt32"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt64"}, "")) + pattern_WrappersService_CreateInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt64"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateFloatValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testFloat"}, "")) + pattern_WrappersService_CreateFloatValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testFloat"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testDouble"}, "")) + pattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testDouble"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateBoolValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBool"}, "")) + pattern_WrappersService_CreateBoolValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBool"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint32"}, "")) + pattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint32"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint64"}, "")) + pattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint64"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateBytesValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBytes"}, "")) + pattern_WrappersService_CreateBytesValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBytes"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_WrappersService_CreateEmpty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testEmpty"}, "")) + pattern_WrappersService_CreateEmpty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testEmpty"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 1131ca453f9..2f056364b8f 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -67,6 +67,10 @@ type Registry struct { // If false, the default behavior is to concat the last 2 elements of the FQN if they are unique, otherwise concat // all the elements of the FQN without any separator useFQNForSwaggerName bool + + // allowColonFinalSegments determines whether colons are permitted + // in the final segment of a path. + allowColonFinalSegments bool } type repeatedFieldSeparator struct { @@ -422,6 +426,16 @@ func (r *Registry) SetUseFQNForSwaggerName(use bool) { r.useFQNForSwaggerName = use } +// GetAllowColonFinalSegments returns allowColonFinalSegments +func (r *Registry) GetAllowColonFinalSegments() bool { + return r.allowColonFinalSegments +} + +// SetAllowColonFinalSegments sets allowColonFinalSegments +func (r *Registry) SetAllowColonFinalSegments(use bool) { + r.allowColonFinalSegments = use +} + // GetUseFQNForSwaggerName returns useFQNForSwaggerName func (r *Registry) GetUseFQNForSwaggerName() bool { return r.useFQNForSwaggerName diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index a14de379642..d5a4980d65c 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -136,6 +136,7 @@ type trailerParams struct { Services []*descriptor.Service UseRequestContext bool RegisterFuncSuffix string + AssumeColonVerb bool } func applyTemplate(p param, reg *descriptor.Registry) (string, error) { @@ -176,10 +177,15 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { return "", errNoTargetService } + assumeColonVerb := true + if reg != nil { + assumeColonVerb = !reg.GetAllowColonFinalSegments() + } tp := trailerParams{ Services: targetServices, UseRequestContext: p.UseRequestContext, RegisterFuncSuffix: p.RegisterFuncSuffix, + AssumeColonVerb: assumeColonVerb, } if err := trailerTemplate.Execute(w, tp); err != nil { return "", err @@ -517,7 +523,7 @@ func (m response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}) XXX_ResponseBody( var ( {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} - pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} = runtime.MustPattern(runtime.NewPattern({{$b.PathTmpl.Version}}, {{$b.PathTmpl.OpCodes | printf "%#v"}}, {{$b.PathTmpl.Pool | printf "%#v"}}, {{$b.PathTmpl.Verb | printf "%q"}})) + pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} = runtime.MustPattern(runtime.NewPattern({{$b.PathTmpl.Version}}, {{$b.PathTmpl.OpCodes | printf "%#v"}}, {{$b.PathTmpl.Pool | printf "%#v"}}, {{$b.PathTmpl.Verb | printf "%q"}}, runtime.AssumeColonVerbOpt({{$.AssumeColonVerb}}))) {{end}} {{end}} ) diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index 5e287a680d1..fbf54e6a69d 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -242,7 +242,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { + if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), "", runtime.AssumeColonVerbOpt(true)))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } @@ -394,7 +394,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { + if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), "", runtime.AssumeColonVerbOpt(true)))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 60d9de92e6b..291ba7deb2f 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -33,6 +33,7 @@ var ( allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") + allowColonFinalSegments = flag.Bool("allow_colon_final_segments", false, "determines whether colons are permitted in the final segment of a path") versionFlag = flag.Bool("version", false, "print the current verison") ) @@ -93,6 +94,7 @@ func main() { reg.SetImportPath(*importPath) reg.SetAllowDeleteBody(*allowDeleteBody) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) + reg.SetAllowColonFinalSegments(*allowColonFinalSegments) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return diff --git a/runtime/mux.go b/runtime/mux.go index 093373a204a..1da3a58854d 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -37,6 +37,7 @@ type ServeMux struct { streamErrorHandler StreamErrorHandlerFunc protoErrorHandler ProtoErrorHandlerFunc disablePathLengthFallback bool + lastMatchWins bool } // ServeMuxOption is an option that can be given to a ServeMux on construction. @@ -133,6 +134,15 @@ func WithStreamErrorHandler(fn StreamErrorHandlerFunc) ServeMuxOption { } } +// WithLastMatchWins returns a ServeMuxOption that will enable "last +// match wins" behavior, where if multiple path patterns match a +// request path, the last one defined in the .proto file will be used. +func WithLastMatchWins() ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.lastMatchWins = true + } +} + // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ @@ -173,7 +183,11 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { // Handle associates "h" to the pair of HTTP method and path pattern. func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { - s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h}) + if s.lastMatchWins { + s.handlers[meth] = append([]handler{handler{pat: pat, h: h}}, s.handlers[meth]...) + } else { + s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h}) + } } // ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path. diff --git a/runtime/mux_test.go b/runtime/mux_test.go index e033091a885..23243d8f3a4 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -22,7 +22,8 @@ func TestMuxServeHTTP(t *testing.T) { verb string } for _, spec := range []struct { - patterns []stubPattern + patterns []stubPattern + patternOpts []runtime.PatternOpt reqMethod string reqPath string @@ -33,6 +34,7 @@ func TestMuxServeHTTP(t *testing.T) { disablePathLengthFallback bool errHandler runtime.ProtoErrorHandlerFunc + muxOpts []runtime.ServeMuxOption }{ { patterns: nil, @@ -253,11 +255,11 @@ func TestMuxServeHTTP(t *testing.T) { pool: []string{"unimplemented"}, }, }, - reqMethod: "GET", - reqPath: "/foobar", + reqMethod: "GET", + reqPath: "/foobar", respStatus: http.StatusNotFound, respContent: "GET /foobar", - errHandler: unknownPathIs404, + errHandler: unknownPathIs404, }, { // server returning unimplemented results in 'Not Implemented' code @@ -269,14 +271,72 @@ func TestMuxServeHTTP(t *testing.T) { pool: []string{"unimplemented"}, }, }, - reqMethod: "GET", - reqPath: "/unimplemented", + reqMethod: "GET", + reqPath: "/unimplemented", respStatus: http.StatusNotImplemented, respContent: `GET /unimplemented`, - errHandler: unknownPathIs404, + errHandler: unknownPathIs404, + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + }, + patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, + reqMethod: "GET", + reqPath: "/foo/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "GET /foo/{id=*}", + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + }, + patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, + reqMethod: "GET", + reqPath: "/foo/bar:123", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "GET /foo/{id=*}", + }, + { + patterns: []stubPattern{ + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + verb: "verb", + }, + }, + patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, + reqMethod: "POST", + reqPath: "/foo/bar:verb", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "POST /foo/{id=*}:verb", + muxOpts: []runtime.ServeMuxOption{runtime.WithLastMatchWins()}, }, } { - var opts []runtime.ServeMuxOption + opts := spec.muxOpts if spec.disablePathLengthFallback { opts = append(opts, runtime.WithDisablePathLengthFallback()) } @@ -286,7 +346,7 @@ func TestMuxServeHTTP(t *testing.T) { mux := runtime.NewServeMux(opts...) for _, p := range spec.patterns { func(p stubPattern) { - pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb) + pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb, spec.patternOpts...) if err != nil { t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) } diff --git a/runtime/pattern.go b/runtime/pattern.go index f16a84ad389..09053695da7 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -35,14 +35,31 @@ type Pattern struct { tailLen int // verb is the VERB part of the path pattern. It is empty if the pattern does not have VERB part. verb string + // assumeColonVerb indicates whether a path suffix after a final + // colon may only be interpreted as a verb. + assumeColonVerb bool } +type patternOptions struct { + assumeColonVerb bool +} + +// PatternOpt is an option for creating Patterns. +type PatternOpt func(*patternOptions) + // NewPattern returns a new Pattern from the given definition values. // "ops" is a sequence of op codes. "pool" is a constant pool. // "verb" is the verb part of the pattern. It is empty if the pattern does not have the part. // "version" must be 1 for now. // It returns an error if the given definition is invalid. -func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) { +func NewPattern(version int, ops []int, pool []string, verb string, opts ...PatternOpt) (Pattern, error) { + options := patternOptions{ + assumeColonVerb: true, + } + for _, o := range opts { + o(&options) + } + if version != 1 { grpclog.Infof("unsupported version: %d", version) return Pattern{}, ErrInvalidPattern @@ -122,12 +139,13 @@ func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, er typedOps = append(typedOps, op) } return Pattern{ - ops: typedOps, - pool: pool, - vars: vars, - stacksize: maxstack, - tailLen: tailLen, - verb: verb, + ops: typedOps, + pool: pool, + vars: vars, + stacksize: maxstack, + tailLen: tailLen, + verb: verb, + assumeColonVerb: options.assumeColonVerb, }, nil } @@ -144,7 +162,16 @@ func MustPattern(p Pattern, err error) Pattern { // If otherwise, the function returns an error. func (p Pattern) Match(components []string, verb string) (map[string]string, error) { if p.verb != verb { - return nil, ErrNotMatch + if p.assumeColonVerb || p.verb != "" { + return nil, ErrNotMatch + } + if len(components) == 0 { + components = []string{":" + verb} + } else { + components = append([]string{}, components...) + components[len(components)-1] += ":" + verb + } + verb = "" } var pos int @@ -225,3 +252,11 @@ func (p Pattern) String() string { } return "/" + segs } + +// AssumeColonVerbOpt indicates whether a path suffix after a final +// colon may only be interpreted as a verb. +func AssumeColonVerbOpt(val bool) PatternOpt { + return PatternOpt(func(o *patternOptions) { + o.assumeColonVerb = val + }) +} From e7ba6a44e298323c5f7c2c9f941e7e2ee21ed717 Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Sat, 15 Jun 2019 22:13:50 -0700 Subject: [PATCH 0157/1518] Improve README file --- README.md | 70 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 4dc4733234b..811e97876be 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which -translates a RESTful JSON API into gRPC. This server is generated according to the +'translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. -It helps you provide your APIs in both gRPC and RESTful style at the same time. +This helps you provide your APIs in both gRPC and RESTful style at the same time. ![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) @@ -21,7 +21,7 @@ languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. However, you might still want to provide a traditional RESTful JSON API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by -gRPC to simply maintaining the aesthetics and tooling involved with a RESTful +gRPC, to simply maintaining the aesthetics and tooling involved with a RESTful JSON architecture. This project aims to provide that HTTP+JSON interface to your gRPC service. @@ -37,7 +37,7 @@ manager or by downloading one of the releases from the official repository: https://github.com/protocolbuffers/protobuf/releases -Then, `go get -u` as usual the following packages: +Then use `go get -u` to download the following packages: ```sh go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway @@ -55,9 +55,9 @@ Make sure that your `$GOBIN` is in your `$PATH`. ## Usage -1. Define your service in gRPC +1. Define your [gRPC](https://grpc.io/docs/) service using protocol buffers - your_service.proto: + `your_service.proto`: ```protobuf syntax = "proto3"; package example; @@ -69,10 +69,11 @@ Make sure that your `$GOBIN` is in your `$PATH`. rpc Echo(StringMessage) returns (StringMessage) {} } ``` + 2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotation to your .proto file - your_service.proto: + `your_service.proto`: ```diff syntax = "proto3"; package example; @@ -102,6 +103,7 @@ annotation to your .proto file 3. Generate gRPC stub + The following generates gRPC code for Golang based on `path/to/your_service.proto`: ```sh protoc -I/usr/local/include -I. \ -I$GOPATH/src \ @@ -111,28 +113,30 @@ annotation to your .proto file ``` It will generate a stub file `path/to/your_service.pb.go`. + 4. Implement your service in gRPC as usual - 1. (Optional) Generate gRPC stub in the language you want. - e.g. + 1. (Optional) Generate gRPC stub in the [other programming languages](https://grpc.io/docs/). + + For example, the following generates gRPC code for Ruby based on `path/to/your_service.proto`: ```sh protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --ruby_out=. \ - path/to/your/service_proto + path/to/your_service.proto protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --plugin=protoc-gen-grpc=grpc_ruby_plugin \ --grpc-ruby_out=. \ - path/to/your/service.proto + path/to/your_service.proto ``` 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. - 3. Implement your service + 3. Implement your gRPC service stubs -5. Generate reverse-proxy +5. Generate reverse-proxy using `protoc-gen-grpc-gateway` ```sh protoc -I/usr/local/include -I. \ @@ -144,54 +148,58 @@ annotation to your .proto file It will generate a reverse proxy `path/to/your_service.pb.gw.go`. -6. Write an entrypoint +6. Write an entrypoint for the HTTP reverse-proxy server - Now you need to write an entrypoint of the proxy server. ```go package main - + import ( + "context" // Use "golang.org/x/net/context" for Golang version <= 1.6 "flag" "net/http" - + "github.com/golang/glog" - "golang.org/x/net/context" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc" - - gw "path/to/your_service_package" + + gw "path/to/your_service_package" // Update ) - + var ( - echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService") + // command-line options: + // gRPC server endpoint + grpcServerEndpoint = flag.String("grpc-server-endpoint", "localhost:9090", "gRPC server endpoint") ) - + func run() error { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() - + + // Register gRPC server endpoint + // Note: Make sure the gRPC server is running properly and accessible mux := runtime.NewServeMux() opts := []grpc.DialOption{grpc.WithInsecure()} - err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts) + err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts) if err != nil { return err } - - return http.ListenAndServe(":8080", mux) + + // Start HTTP server (and proxy calls to gRPC server endpoint) + return http.ListenAndServe(":8081", mux) } - + func main() { flag.Parse() defer glog.Flush() - + if err := run(); err != nil { glog.Fatal(err) } } ``` -7. (Optional) Generate swagger definitions +7. (Optional) Generate swagger definitions using `protoc-gen-grpc-swagger` ```sh protoc -I/usr/local/include -I. \ @@ -226,7 +234,7 @@ More examples are available under `examples` directory. To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see -[this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) +[this example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)). ## Features From cd0c8ef3533e9c04e6520cac37a81fe262fb0b34 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 17 Jun 2019 15:57:34 +0100 Subject: [PATCH 0158/1518] Generate changelog for 1.9.2 --- CHANGELOG.md | 23 ++++++++++++++++++----- Makefile | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b820c925e32..f321e33786a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## [v1.9.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.2) (2019-06-17) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.1...v1.9.2) + +**Fixed bugs:** + +- 404s using colons in the middle of the last path segment [\#224](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) + +**Merged pull requests:** + +- Improve README file [\#950](https://github.com/grpc-ecosystem/grpc-gateway/pull/950) ([charleswhchan](https://github.com/charleswhchan)) +- Support colon in final path segment, last match wins behavior \(behind flags\) [\#949](https://github.com/grpc-ecosystem/grpc-gateway/pull/949) ([jfhamlin](https://github.com/jfhamlin)) + ## [v1.9.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.1) (2019-06-13) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.0...v1.9.1) @@ -13,6 +25,7 @@ **Merged pull requests:** +- Generate changelog for 1.9.1 [\#946](https://github.com/grpc-ecosystem/grpc-gateway/pull/946) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Revert "protoc-gen-swagger: check typeIndex when typeName is Method" [\#945](https://github.com/grpc-ecosystem/grpc-gateway/pull/945) ([johanbrandhorst](https://github.com/johanbrandhorst)) - fix query params not populate if method is post [\#939](https://github.com/grpc-ecosystem/grpc-gateway/pull/939) ([mingqing](https://github.com/mingqing)) - Fix make test on MacOS [\#935](https://github.com/grpc-ecosystem/grpc-gateway/pull/935) ([emilaasa](https://github.com/emilaasa)) @@ -503,7 +516,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) **Implemented enhancements:** @@ -560,11 +573,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) - ## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) + +## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) **Closed issues:** diff --git a/Makefile b/Makefile index 8d61d71bc66..56b2b927160 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.1 + --future-release=v1.9.2 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From ee2f38523e9512e3f433e2513446483f843a7df3 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Tue, 18 Jun 2019 16:08:21 +0200 Subject: [PATCH 0159/1518] docs/customizingyourgateway: add ?pretty example (#954) As discussed in slack. The code is rough, but should illustrate the point. Signed-off-by: Stephan Renatus --- docs/_docs/customizingyourgateway.md | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 31b7794bd55..1d927f0166d 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -28,6 +28,55 @@ The protocol buffer compiler generates camelCase JSON tags that can be used with mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName:false})) ``` +### Pretty-print JSON responses when queried with ?pretty + +You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows: + +1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) + that translates the provided query parameter into a custom `Accept` header, and +2. Register a pretty-printing marshaler for that MIME code. + +For example: + +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/json+pretty", &runtime.JSONPb{Indent: " "}), +) +prettier := func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // checking Values as map[string][]string also catches ?pretty and ?pretty= + // r.URL.Query().Get("pretty") would not. + if _, ok := r.URL.Query()["pretty"]; ok { + r.Header.Set("Accept", "application/json+pretty") + } + h.ServeHTTP(w, r) + }) +} +http.ListenAndServe(":8080", prettier(mux)) +``` + +Note that `runtime.JSONPb{Indent: " "}` will do the trick for pretty-printing: it wraps +`jsonpb.Marshaler`: +```go +type Marshaler struct { + // ... + + // A string to indent each level by. The presence of this field will + // also cause a space to appear between the field separator and + // value, and for newlines to be appear between fields and array + // elements. + Indent string + + // ... +} +``` + +Now, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to +your HTTP endpoints, the response will be pretty-printed. + +Note that this will conflict with any methods having input messages with fields named `pretty`; +also, this example code does not remove the query parameter `pretty` from further processing. + ## Mapping from HTTP request headers to gRPC client metadata You might not like [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. From 883b764bfe150ada7b454452de47e6619c37839f Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Tue, 18 Jun 2019 16:57:23 +0200 Subject: [PATCH 0160/1518] Update to rules_go and buildtools (#956) * Update to rules_go v0.18.6 This fixes the build with Bazel 0.27. * Update bazelbuild/buildtools to v0.26. This is also required for Bazel 0.27, it seems. Fixes #955 --- BUILD | 1 + WORKSPACE | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/BUILD b/BUILD index 27944f25764..08af40b556e 100644 --- a/BUILD +++ b/BUILD @@ -12,6 +12,7 @@ buildifier( # gazelle:exclude third_party # gazelle:exclude vendor +# gazelle:exclude _output # gazelle:prefix github.com/grpc-ecosystem/grpc-gateway gazelle(name = "gazelle") diff --git a/WORKSPACE b/WORKSPACE index 4084128959d..b4b48563b75 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,8 +4,11 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "6776d68ebb897625dead17ae510eac3d5f6342367327875210df44dbe2aeeb19", - urls = ["https://github.com/bazelbuild/rules_go/releases/download/0.17.1/rules_go-0.17.1.tar.gz"], + sha256 = "f04d2373bcaf8aa09bccb08a98a57e721306c8f6043a2a0ee610fd6853dcde3d", + urls = [ + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz", + ], ) http_archive( @@ -61,8 +64,9 @@ go_repository( http_archive( name = "com_github_bazelbuild_buildtools", - strip_prefix = "buildtools-bf564b4925ab5876a3f64d8b90fab7f769013d42", - url = "https://github.com/bazelbuild/buildtools/archive/bf564b4925ab5876a3f64d8b90fab7f769013d42.zip", + sha256 = "86592d703ecbe0c5cbb5139333a63268cf58d7efd2c459c8be8e69e77d135e29", + strip_prefix = "buildtools-0.26.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/0.26.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From d6fec188bf351df151bcf40b65d6c326fe6ebbf0 Mon Sep 17 00:00:00 2001 From: Vladislav Saveliev Date: Fri, 21 Jun 2019 16:47:27 +0600 Subject: [PATCH 0161/1518] Add new option for the decoder - to disallow unknown fields (#959) Fixes #448 --- runtime/marshal_jsonpb.go | 16 ++++++++++++++-- runtime/marshal_jsonpb_test.go | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 2fbb2628727..f0de351b212 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -172,7 +172,7 @@ func decodeJSONPb(d *json.Decoder, v interface{}) error { if !ok { return decodeNonProtoField(d, v) } - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true} + unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: allowUnknownFields} return unmarshaler.UnmarshalNext(d, p) } @@ -186,7 +186,7 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { rv.Set(reflect.New(rv.Type().Elem())) } if rv.Type().ConvertibleTo(typeProtoMessage) { - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true} + unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: allowUnknownFields} return unmarshaler.UnmarshalNext(d, rv.Interface().(proto.Message)) } rv = rv.Elem() @@ -248,3 +248,15 @@ var typeProtoMessage = reflect.TypeOf((*proto.Message)(nil)).Elem() func (j *JSONPb) Delimiter() []byte { return []byte("\n") } + +// allowUnknownFields helps not to return an error when the destination +// is a struct and the input contains object keys which do not match any +// non-ignored, exported fields in the destination. +var allowUnknownFields = true + +// DisallowUnknownFields enables option in decoder (unmarshaller) to +// return an error when it finds an unknown field. This function must be +// called before using the JSON marshaller. +func DisallowUnknownFields() { + allowUnknownFields = false +} diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 00590e94401..7d60ef7ce35 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -468,6 +468,25 @@ func TestJSONPbDecoderFields(t *testing.T) { } } +func TestJSONPbDecoderUnknownField(t *testing.T) { + var ( + m runtime.JSONPb + got examplepb.ABitOfEverything + ) + data := `{ + "uuid": "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7", + "unknownField": "111" + }` + + runtime.DisallowUnknownFields() + + r := strings.NewReader(data) + dec := m.NewDecoder(r) + if err := dec.Decode(&got); err == nil { + t.Errorf("m.Unmarshal(&got) not failed; want `unknown field` error; data=%q", data) + } +} + var ( fieldFixtures = []struct { data interface{} From 0d29f14a9afe84adfbc8760b9fad6b394436fd3e Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Mon, 24 Jun 2019 11:19:17 -0400 Subject: [PATCH 0162/1518] protoc_gen_swagger: Add attr for single_output (#944) --- examples/proto/examplepb/BUILD.bazel | 8 +++- protoc-gen-swagger/defs.bzl | 68 +++++++++++++++++++++------- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index f5aa149eb8e..dd7a2d45c3c 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -70,6 +70,12 @@ go_library( ) protoc_gen_swagger( - name = "expamplepb_protoc_gen_swagger", + name = "examplepb_protoc_gen_swagger", proto = ":examplepb_proto", ) + +protoc_gen_swagger( + name = "examplepb_protoc_gen_swagger_merged", + proto = ":examplepb_proto", + single_output = True, # Outputs a single swagger.json file. +) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 936ca4791fe..4f90807f0f5 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -30,33 +30,38 @@ def _collect_includes(gen_dir, srcs): return includes -def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration): +def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration, single_output): swagger_files = [] - for proto in direct_proto_srcs: - swagger_file = actions.declare_file( - "%s.swagger.json" % proto.basename[:-len(".proto")], - sibling = proto, - ) - inputs = direct_proto_srcs + transitive_proto_srcs - tools = [protoc_gen_swagger] + inputs = direct_proto_srcs + transitive_proto_srcs + tools = [protoc_gen_swagger] - options = ["logtostderr=true", "allow_repeated_fields_in_body=true"] - if grpc_api_configuration: - options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) - inputs.append(grpc_api_configuration) + options = ["logtostderr=true", "allow_repeated_fields_in_body=true"] + if grpc_api_configuration: + options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) + inputs.append(grpc_api_configuration) + includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) + + if single_output: + swagger_file = actions.declare_file( + "%s.swagger.json" % ctx.attr.name, + sibling = direct_proto_srcs[0], + ) output_dir = ctx.bin_dir.path - if proto.owner.workspace_root: - output_dir = "/".join([output_dir, proto.owner.workspace_root]) + if direct_proto_srcs[0].owner.workspace_root: + output_dir = "/".join([output_dir, direct_proto_srcs[0].owner.workspace_root]) + + output_dir = "/".join([output_dir, direct_proto_srcs[0].dirname]) - includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) + options.append("allow_merge=true") + options.append("merge_file_name=%s" % ctx.attr.name) args = actions.args() args.add("--plugin=%s" % protoc_gen_swagger.path) args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) args.add_all(["-I%s" % include for include in includes]) - args.add(proto.path) + args.add_all([src.path for src in direct_proto_srcs]) actions.run( executable = protoc, @@ -67,6 +72,32 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action ) swagger_files.append(swagger_file) + else: + for proto in direct_proto_srcs: + swagger_file = actions.declare_file( + "%s.swagger.json" % proto.basename[:-len(".proto")], + sibling = proto, + ) + + output_dir = ctx.bin_dir.path + if proto.owner.workspace_root: + output_dir = "/".join([output_dir, proto.owner.workspace_root]) + + args = actions.args() + args.add("--plugin=%s" % protoc_gen_swagger.path) + args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) + args.add_all(["-I%s" % include for include in includes]) + args.add(proto.path) + + actions.run( + executable = protoc, + inputs = inputs, + tools = tools, + outputs = [swagger_file], + arguments = [args], + ) + + swagger_files.append(swagger_file) return swagger_files @@ -84,6 +115,7 @@ def _proto_gen_swagger_impl(ctx): protoc = ctx.executable._protoc, protoc_gen_swagger = ctx.executable._protoc_gen_swagger, grpc_api_configuration = grpc_api_configuration, + single_output = ctx.attr.single_output, ), ), )] @@ -99,6 +131,10 @@ protoc_gen_swagger = rule( allow_single_file = True, mandatory = False, ), + "single_output": attr.bool( + default = False, + mandatory = False, + ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, From 21fa8c30c8ffd9511ebcfc4695f0d079e8aa53fa Mon Sep 17 00:00:00 2001 From: Gustavo Covas Date: Fri, 28 Jun 2019 12:55:27 -0300 Subject: [PATCH 0163/1518] Fix EOF handling in client side streaming (#962) * Add integration test for #961 Co-authored-by: Jonas Arilho * Add verification for io.EOF after stream.Send() on generated code template (#961) Co-authored-by: Jonas Arilho * Add more values on testABEBulkCreateWithError, run go mod tidy Fixes #961 --- examples/integration/integration_test.go | 61 +++++++++++++++++++ .../proto/examplepb/flow_combination.pb.gw.go | 3 + examples/proto/examplepb/stream.pb.gw.go | 3 + examples/server/a_bit_of_everything.go | 9 ++- .../gengateway/template.go | 3 + 5 files changed, 78 insertions(+), 1 deletion(-) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 62db1063785..03aed1a0886 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -15,6 +15,7 @@ import ( "strings" "sync" "testing" + "time" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" @@ -263,6 +264,7 @@ func TestABE(t *testing.T) { testABECreate(t, 8080) testABECreateBody(t, 8080) testABEBulkCreate(t, 8080) + testABEBulkCreateWithError(t, 8080) testABELookup(t, 8080) testABELookupNotFound(t, 8080) testABEList(t, 8080) @@ -549,6 +551,65 @@ func testABEBulkCreate(t *testing.T, port int) { } } +func testABEBulkCreateWithError(t *testing.T, port int) { + count := 0 + r, w := io.Pipe() + go func(w io.WriteCloser) { + defer func() { + if cerr := w.Close(); cerr != nil { + t.Errorf("w.Close() failed with %v; want success", cerr) + } + }() + for _, val := range []string{ + "foo", "bar", "baz", "qux", "quux", + } { + time.Sleep(1 * time.Millisecond) + + want := gw.ABitOfEverything{ + StringValue: fmt.Sprintf("strprefix/%s", val), + } + var m jsonpb.Marshaler + if err := m.Marshal(w, &want); err != nil { + t.Fatalf("m.Marshal(%#v, w) failed with %v; want success", want, err) + } + if _, err := io.WriteString(w, "\n"); err != nil { + t.Errorf("w.Write(%q) failed with %v; want success", "\n", err) + return + } + count++ + } + }(w) + + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/bulk", port) + request, err := http.NewRequest("POST", apiURL, r) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "POST", apiURL, err) + } + request.Header.Add("Grpc-Metadata-error", "some error") + + resp, err := http.DefaultClient.Do(request) + if err != nil { + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusBadRequest; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + var msg errorBody + if err := json.Unmarshal(buf, &msg); err != nil { + t.Fatalf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) + } +} + func testABELookup(t *testing.T, port int) { apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) cresp, err := http.Post(apiURL, "application/json", strings.NewReader(` diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index e5de847c464..b29a6f3bbf9 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -73,6 +73,9 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { + if err == io.EOF { + break + } grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 3b01d805071..ec7cb9217b6 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -49,6 +49,9 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { + if err == io.EOF { + break + } grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index fc3acca0c1e..b2bcf41994d 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -65,8 +65,15 @@ func (s *_ABitOfEverythingServer) CreateBody(ctx context.Context, msg *examples. } func (s *_ABitOfEverythingServer) BulkCreate(stream examples.StreamService_BulkCreateServer) error { - count := 0 ctx := stream.Context() + + if header, ok := metadata.FromIncomingContext(ctx); ok { + if v, ok := header["error"]; ok { + return status.Errorf(codes.InvalidArgument, "error metadata: %v", v) + } + } + + count := 0 for { msg, err := stream.Recv() if err == io.EOF { diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index d5a4980d65c..97770d93bf0 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -254,6 +254,9 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if err = stream.Send(&protoReq); err != nil { + if err == io.EOF { + break + } grpclog.Infof("Failed to send request: %v", err) return nil, metadata, err } From d54b3615f714b03edde6d9206fa0476a9169c966 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 28 Jun 2019 23:22:12 +0100 Subject: [PATCH 0164/1518] Generate changelog for 1.9.3 (#964) --- CHANGELOG.md | 22 ++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f321e33786a..41ddf8c2fe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## [v1.9.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.3) (2019-06-28) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.2...v1.9.3) + +**Fixed bugs:** + +- EOF when calling Send for client streams [\#961](https://github.com/grpc-ecosystem/grpc-gateway/issues/961) + +**Closed issues:** + +- application/x-www-form-urlencoded support. [\#960](https://github.com/grpc-ecosystem/grpc-gateway/issues/960) +- Bazel files are out of date [\#955](https://github.com/grpc-ecosystem/grpc-gateway/issues/955) +- Configurable AllowUnknownFields in jsonpb? [\#448](https://github.com/grpc-ecosystem/grpc-gateway/issues/448) + +**Merged pull requests:** + +- EOF on send [\#962](https://github.com/grpc-ecosystem/grpc-gateway/pull/962) ([gustavocovas](https://github.com/gustavocovas)) +- Add new option for the decoder - to disallow unknown fields [\#959](https://github.com/grpc-ecosystem/grpc-gateway/pull/959) ([vsaveliev](https://github.com/vsaveliev)) +- Update to rules\_go and buildtools [\#956](https://github.com/grpc-ecosystem/grpc-gateway/pull/956) ([drigz](https://github.com/drigz)) +- docs/customizingyourgateway: add ?pretty example [\#954](https://github.com/grpc-ecosystem/grpc-gateway/pull/954) ([srenatus](https://github.com/srenatus)) +- protoc\_gen\_swagger: Add attr for allow\_merge [\#944](https://github.com/grpc-ecosystem/grpc-gateway/pull/944) ([prestonvanloon](https://github.com/prestonvanloon)) + ## [v1.9.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.2) (2019-06-17) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.1...v1.9.2) @@ -9,6 +30,7 @@ **Merged pull requests:** +- Generate changelog for 1.9.2 [\#953](https://github.com/grpc-ecosystem/grpc-gateway/pull/953) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Improve README file [\#950](https://github.com/grpc-ecosystem/grpc-gateway/pull/950) ([charleswhchan](https://github.com/charleswhchan)) - Support colon in final path segment, last match wins behavior \(behind flags\) [\#949](https://github.com/grpc-ecosystem/grpc-gateway/pull/949) ([jfhamlin](https://github.com/jfhamlin)) diff --git a/Makefile b/Makefile index 56b2b927160..df63bfdb96a 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.2 + --future-release=v1.9.3 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 740ef2ee80c49ed4a272e8c3b54ebf352109f572 Mon Sep 17 00:00:00 2001 From: Scott Meeuwsen <3615587+nu11ptr@users.noreply.github.com> Date: Sat, 29 Jun 2019 09:22:16 -0700 Subject: [PATCH 0165/1518] Added comments to base_path to explain behavior (#919) * Add base_path docs to explain behavior * Add to 'base_path' description * Regenerated Go code from protobuf * Revert go.mod to previous version Closes #918 --- protoc-gen-swagger/options/openapiv2.pb.go | 56 ++++++++++++---------- protoc-gen-swagger/options/openapiv2.proto | 6 +++ 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 8bf40b05e6a..f52414a5ef9 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -48,7 +48,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{0, 0} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +89,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{8, 0} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +120,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 0} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +147,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 1} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +181,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11, 2} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -190,9 +190,15 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // TODO(ivucica): document fields type Swagger struct { - Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, + // it allows you to remove this portion from the path endpoints in your Swagger file making them easier + // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting + // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the + // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // serve the API from the `base_path`. BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` @@ -210,7 +216,7 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{0} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -333,7 +339,7 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{1} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -450,7 +456,7 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{2} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -505,7 +511,7 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{3} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -585,7 +591,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{4} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -644,7 +650,7 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{5} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{5} } func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) @@ -696,7 +702,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{6} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -750,7 +756,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{7} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -854,7 +860,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{8} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -1040,7 +1046,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{9} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1094,7 +1100,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{10} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1172,7 +1178,7 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{11} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1274,7 +1280,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{12} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1319,7 +1325,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{12, 0} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1364,7 +1370,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_29cfb415de848cf5, []int{13} + return fileDescriptor_openapiv2_78431ddfac00899a, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1420,10 +1426,10 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_29cfb415de848cf5) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_78431ddfac00899a) } -var fileDescriptor_openapiv2_29cfb415de848cf5 = []byte{ +var fileDescriptor_openapiv2_78431ddfac00899a = []byte{ // 1777 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 105f8feb41d..1fb248ca144 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -15,6 +15,12 @@ message Swagger { string swagger = 1; Info info = 2; string host = 3; + // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, + // it allows you to remove this portion from the path endpoints in your Swagger file making them easier + // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting + // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the + // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // serve the API from the `base_path`. string base_path = 4; enum SwaggerScheme { UNKNOWN = 0; From e8ac3c0270956c9e62a78021f70b1ca14cd7bcd5 Mon Sep 17 00:00:00 2001 From: Franxois Date: Tue, 2 Jul 2019 14:52:40 +0200 Subject: [PATCH 0166/1518] doc(readme): fix typo (#965) Fix `protoc-gen-swagger` binary name in readme.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 811e97876be..75dcd753620 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ go get -u github.com/golang/protobuf/protoc-gen-go This will place three binaries in your `$GOBIN`; * `protoc-gen-grpc-gateway` -* `protoc-gen-grpc-swagger` +* `protoc-gen-swagger` * `protoc-gen-go` Make sure that your `$GOBIN` is in your `$PATH`. @@ -199,7 +199,7 @@ annotation to your .proto file } ``` -7. (Optional) Generate swagger definitions using `protoc-gen-grpc-swagger` +7. (Optional) Generate swagger definitions using `protoc-gen-swagger` ```sh protoc -I/usr/local/include -I. \ From e91130127636c9a0893d541ef6394a2e6c6b6bd0 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Mon, 8 Jul 2019 14:01:51 -0700 Subject: [PATCH 0167/1518] Fix query.go to avoid invalid protobuf assumptions The golang/protobuf compatibility agreement reserves the right add/remove XXX fields and methods. Fix this code to avoid assuming: * that XXX_WellKnownType always exists (it won't in the future). Instead, it should determine whether a message is a well-known type based on its full name. * that Go struct field indexes are stable (they aren't). An internal field may be added to the front of the message, causing the current assumptions to be invalidated. Instead, access the struct field by name, which will not change. --- runtime/query.go | 177 +++++++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 89 deletions(-) diff --git a/runtime/query.go b/runtime/query.go index bb9359f17c0..5fbba5e8e8b 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -202,103 +202,102 @@ func populateField(f reflect.Value, value string, props *proto.Properties) error i := f.Addr().Interface() // Handle protobuf well known types - type wkt interface { - XXX_WellKnownType() string + var name string + switch m := i.(type) { + case interface{ XXX_WellKnownType() string }: + name = m.XXX_WellKnownType() + case proto.Message: + const wktPrefix = "google.protobuf." + if fullName := proto.MessageName(m); strings.HasPrefix(fullName, wktPrefix) { + name = fullName[len(wktPrefix):] + } } - if wkt, ok := i.(wkt); ok { - switch wkt.XXX_WellKnownType() { - case "Timestamp": - if value == "null" { - f.Field(0).SetInt(0) - f.Field(1).SetInt(0) - return nil - } - - t, err := time.Parse(time.RFC3339Nano, value) - if err != nil { - return fmt.Errorf("bad Timestamp: %v", err) - } - f.Field(0).SetInt(int64(t.Unix())) - f.Field(1).SetInt(int64(t.Nanosecond())) + switch name { + case "Timestamp": + if value == "null" { + f.FieldByName("Seconds").SetInt(0) + f.FieldByName("Nanos").SetInt(0) return nil - case "Duration": - if value == "null" { - f.Field(0).SetInt(0) - f.Field(1).SetInt(0) - return nil - } - d, err := time.ParseDuration(value) - if err != nil { - return fmt.Errorf("bad Duration: %v", err) - } + } - ns := d.Nanoseconds() - s := ns / 1e9 - ns %= 1e9 - f.Field(0).SetInt(s) - f.Field(1).SetInt(ns) - return nil - case "DoubleValue": - fallthrough - case "FloatValue": - float64Val, err := strconv.ParseFloat(value, 64) - if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.Field(0).SetFloat(float64Val) - return nil - case "Int64Value": - fallthrough - case "Int32Value": - int64Val, err := strconv.ParseInt(value, 10, 64) - if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.Field(0).SetInt(int64Val) - return nil - case "UInt64Value": - fallthrough - case "UInt32Value": - uint64Val, err := strconv.ParseUint(value, 10, 64) - if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.Field(0).SetUint(uint64Val) - return nil - case "BoolValue": - if value == "true" { - f.Field(0).SetBool(true) - } else if value == "false" { - f.Field(0).SetBool(false) - } else { - return fmt.Errorf("bad BoolValue: %s", value) - } - return nil - case "StringValue": - f.Field(0).SetString(value) - return nil - case "BytesValue": - bytesVal, err := base64.StdEncoding.DecodeString(value) - if err != nil { - return fmt.Errorf("bad BytesValue: %s", value) - } - f.Field(0).SetBytes(bytesVal) + t, err := time.Parse(time.RFC3339Nano, value) + if err != nil { + return fmt.Errorf("bad Timestamp: %v", err) + } + f.FieldByName("Seconds").SetInt(int64(t.Unix())) + f.FieldByName("Nanos").SetInt(int64(t.Nanosecond())) + return nil + case "Duration": + if value == "null" { + f.FieldByName("Seconds").SetInt(0) + f.FieldByName("Nanos").SetInt(0) return nil } - } + d, err := time.ParseDuration(value) + if err != nil { + return fmt.Errorf("bad Duration: %v", err) + } - // Handle google well known types - if gwkt, ok := i.(proto.Message); ok { - switch proto.MessageName(gwkt) { - case "google.protobuf.FieldMask": - p := f.Field(0) - for _, v := range strings.Split(value, ",") { - if v != "" { - p.Set(reflect.Append(p, reflect.ValueOf(v))) - } + ns := d.Nanoseconds() + s := ns / 1e9 + ns %= 1e9 + f.FieldByName("Seconds").SetInt(s) + f.FieldByName("Nanos").SetInt(ns) + return nil + case "DoubleValue": + fallthrough + case "FloatValue": + float64Val, err := strconv.ParseFloat(value, 64) + if err != nil { + return fmt.Errorf("bad DoubleValue: %s", value) + } + f.FieldByName("Value").SetFloat(float64Val) + return nil + case "Int64Value": + fallthrough + case "Int32Value": + int64Val, err := strconv.ParseInt(value, 10, 64) + if err != nil { + return fmt.Errorf("bad DoubleValue: %s", value) + } + f.FieldByName("Value").SetInt(int64Val) + return nil + case "UInt64Value": + fallthrough + case "UInt32Value": + uint64Val, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return fmt.Errorf("bad DoubleValue: %s", value) + } + f.FieldByName("Value").SetUint(uint64Val) + return nil + case "BoolValue": + if value == "true" { + f.FieldByName("Value").SetBool(true) + } else if value == "false" { + f.FieldByName("Value").SetBool(false) + } else { + return fmt.Errorf("bad BoolValue: %s", value) + } + return nil + case "StringValue": + f.FieldByName("Value").SetString(value) + return nil + case "BytesValue": + bytesVal, err := base64.StdEncoding.DecodeString(value) + if err != nil { + return fmt.Errorf("bad BytesValue: %s", value) + } + f.FieldByName("Value").SetBytes(bytesVal) + return nil + case "FieldMask": + p := f.FieldByName("Paths") + for _, v := range strings.Split(value, ",") { + if v != "" { + p.Set(reflect.Append(p, reflect.ValueOf(v))) } - return nil } + return nil } // Handle Time and Duration stdlib types From bebc7374a79e1105d786ef3468b474e47d652511 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 9 Jul 2019 08:56:50 +0100 Subject: [PATCH 0168/1518] Generate changelog for 1.9.4 --- CHANGELOG.md | 26 +++++++++++++++++++++----- Makefile | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41ddf8c2fe4..74a1c58b5ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## [v1.9.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.4) (2019-07-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.3...v1.9.4) + +**Closed issues:** + +- Read the Http Post Body [\#921](https://github.com/grpc-ecosystem/grpc-gateway/issues/921) +- Swagger document generation, required field is invalid [\#665](https://github.com/grpc-ecosystem/grpc-gateway/issues/665) + +**Merged pull requests:** + +- Fix query.go to avoid invalid protobuf assumptions [\#967](https://github.com/grpc-ecosystem/grpc-gateway/pull/967) ([dsnet](https://github.com/dsnet)) +- doc\(readme\): fix typo [\#965](https://github.com/grpc-ecosystem/grpc-gateway/pull/965) ([franxois](https://github.com/franxois)) +- Added comments to base\_path to explain behavior [\#919](https://github.com/grpc-ecosystem/grpc-gateway/pull/919) ([nu11ptr](https://github.com/nu11ptr)) + ## [v1.9.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.3) (2019-06-28) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.2...v1.9.3) @@ -9,12 +23,14 @@ **Closed issues:** +- Please make a new release! [\#963](https://github.com/grpc-ecosystem/grpc-gateway/issues/963) - application/x-www-form-urlencoded support. [\#960](https://github.com/grpc-ecosystem/grpc-gateway/issues/960) - Bazel files are out of date [\#955](https://github.com/grpc-ecosystem/grpc-gateway/issues/955) - Configurable AllowUnknownFields in jsonpb? [\#448](https://github.com/grpc-ecosystem/grpc-gateway/issues/448) **Merged pull requests:** +- Generate changelog for 1.9.3 [\#964](https://github.com/grpc-ecosystem/grpc-gateway/pull/964) ([johanbrandhorst](https://github.com/johanbrandhorst)) - EOF on send [\#962](https://github.com/grpc-ecosystem/grpc-gateway/pull/962) ([gustavocovas](https://github.com/gustavocovas)) - Add new option for the decoder - to disallow unknown fields [\#959](https://github.com/grpc-ecosystem/grpc-gateway/pull/959) ([vsaveliev](https://github.com/vsaveliev)) - Update to rules\_go and buildtools [\#956](https://github.com/grpc-ecosystem/grpc-gateway/pull/956) ([drigz](https://github.com/drigz)) @@ -538,7 +554,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) **Implemented enhancements:** @@ -595,11 +611,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) - ## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) + +## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) **Closed issues:** diff --git a/Makefile b/Makefile index df63bfdb96a..d4f087f892a 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.3 + --future-release=v1.9.4 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 928eeabe78d7aa7962ea7f2fdaa01cba79150ba3 Mon Sep 17 00:00:00 2001 From: Masoud Ghiasi Date: Mon, 22 Jul 2019 12:26:55 +0430 Subject: [PATCH 0169/1518] fix: Support preflight of auth libraries in js --- examples/gateway/handlers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gateway/handlers.go b/examples/gateway/handlers.go index 3db3fc3bf2b..ead3bb5bf3b 100644 --- a/examples/gateway/handlers.go +++ b/examples/gateway/handlers.go @@ -46,7 +46,7 @@ func allowCORS(h http.Handler) http.Handler { // CORS from any origin using the methods "GET", "HEAD", "POST", "PUT", "DELETE" // We insist, don't do this without consideration in production systems. func preflightHandler(w http.ResponseWriter, r *http.Request) { - headers := []string{"Content-Type", "Accept"} + headers := []string{"Content-Type", "Accept", "Authorization"} w.Header().Set("Access-Control-Allow-Headers", strings.Join(headers, ",")) methods := []string{"GET", "HEAD", "POST", "PUT", "DELETE"} w.Header().Set("Access-Control-Allow-Methods", strings.Join(methods, ",")) From f37ac2a6987941c78126eee1fa74f2413c4c37a2 Mon Sep 17 00:00:00 2001 From: Chris Cormack Date: Mon, 22 Jul 2019 11:32:35 +0100 Subject: [PATCH 0170/1518] Fix HTTP Status Code returned for a `Failed Precondition` error Fixes #972 (and reverses #657). This now returns the semantically correct `400` response, rather than a `412`. This matches the gRPC documentation. --- runtime/errors.go | 3 ++- runtime/errors_test.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/runtime/errors.go b/runtime/errors.go index 41d54ef916a..ad945788dc6 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -37,7 +37,8 @@ func HTTPStatusFromCode(code codes.Code) int { case codes.ResourceExhausted: return http.StatusTooManyRequests case codes.FailedPrecondition: - return http.StatusPreconditionFailed + // Note, this deliberately doesn't translate to the similarly named '412 Precondition Failed' HTTP response status. + return http.StatusBadRequest case codes.Aborted: return http.StatusConflict case codes.OutOfRange: diff --git a/runtime/errors_test.go b/runtime/errors_test.go index f595375718e..6d684d4ed89 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -40,7 +40,7 @@ func TestDefaultHTTPError(t *testing.T) { }, { err: statusWithDetails.Err(), - status: http.StatusPreconditionFailed, + status: http.StatusBadRequest, msg: "failed precondition", details: "type.googleapis.com/google.rpc.PreconditionFailure", }, From ad529a448ba494a88058f9e5be0988713174ac86 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 22 Jul 2019 18:15:56 +0100 Subject: [PATCH 0171/1518] Generate changelog for 1.9.5 --- CHANGELOG.md | 17 +++++++++++++++++ Makefile | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74a1c58b5ae..27e479b6f99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Change Log +## [v1.9.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.5) (2019-07-22) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.4...v1.9.5) + +**Fixed bugs:** + +- Non-standard use of 412 HTTP Status Code [\#972](https://github.com/grpc-ecosystem/grpc-gateway/issues/972) + +**Closed issues:** + +- why response use enum's name [\#970](https://github.com/grpc-ecosystem/grpc-gateway/issues/970) + +**Merged pull requests:** + +- Fix HTTP Status Code returned for a `Failed Precondition` error [\#974](https://github.com/grpc-ecosystem/grpc-gateway/pull/974) ([cjcormack](https://github.com/cjcormack)) +- Examples fix: Support preflight of auth libraries in js [\#973](https://github.com/grpc-ecosystem/grpc-gateway/pull/973) ([GhiaC](https://github.com/GhiaC)) + ## [v1.9.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.4) (2019-07-09) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.3...v1.9.4) @@ -10,6 +26,7 @@ **Merged pull requests:** +- Generate changelog for 1.9.4 [\#969](https://github.com/grpc-ecosystem/grpc-gateway/pull/969) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Fix query.go to avoid invalid protobuf assumptions [\#967](https://github.com/grpc-ecosystem/grpc-gateway/pull/967) ([dsnet](https://github.com/dsnet)) - doc\(readme\): fix typo [\#965](https://github.com/grpc-ecosystem/grpc-gateway/pull/965) ([franxois](https://github.com/franxois)) - Added comments to base\_path to explain behavior [\#919](https://github.com/grpc-ecosystem/grpc-gateway/pull/919) ([nu11ptr](https://github.com/nu11ptr)) diff --git a/Makefile b/Makefile index d4f087f892a..5915f17d506 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.4 + --future-release=v1.9.5 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From d63917fcb0d53f39184485b9b6a0893af18a5668 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Mon, 29 Jul 2019 23:26:13 -0600 Subject: [PATCH 0172/1518] Upgrade to the latest rules_go (#979) Also, finally does the thing where we can now run a single command after updating `go.mod` and Bazel will be fixed. This was released in the latest gazelle. ```sh bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories ``` --- WORKSPACE | 66 +++++++++----------- repositories.bzl | 153 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+), 39 deletions(-) create mode 100644 repositories.bzl diff --git a/WORKSPACE b/WORKSPACE index b4b48563b75..79e4cd83235 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,64 +4,52 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "f04d2373bcaf8aa09bccb08a98a57e721306c8f6043a2a0ee610fd6853dcde3d", + sha256 = "8df59f11fb697743cbb3f26cfb8750395f30471e9eabde0d174c3aebc7a1cd39", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/0.18.6/rules_go-0.18.6.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.19.1/rules_go-0.19.1.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/0.19.1/rules_go-0.19.1.tar.gz", ], ) -http_archive( - name = "bazel_gazelle", - sha256 = "3c681998538231a2d24d0c07ed5a7658cb72bfb5fd4bf9911157c0e9ac6a2687", - urls = ["https://github.com/bazelbuild/bazel-gazelle/releases/download/0.17.0/bazel-gazelle-0.17.0.tar.gz"], -) - load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") go_rules_dependencies() go_register_toolchains() -load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") +http_archive( + name = "bazel_gazelle", + sha256 = "be9296bfd64882e3c08e3283c58fcb461fa6dd3c171764fcc4cf322f60615a9b", + urls = [ + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/0.18.1/bazel-gazelle-0.18.1.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.18.1/bazel-gazelle-0.18.1.tar.gz", + ], +) + +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") gazelle_dependencies() -# Also define in Gopkg.toml -go_repository( - name = "org_golang_google_genproto", - commit = "383e8b2c3b9e36c4076b235b32537292176bae20", - importpath = "google.golang.org/genproto", -) +# Use gazelle to declare Go dependencies in Bazel. +# gazelle:repository_macro repositories.bzl%go_repositories -# Also define in Gopkg.toml -go_repository( - name = "com_github_rogpeppe_fastuuid", - commit = "6724a57986aff9bff1a1770e9347036def7c89f6", - importpath = "github.com/rogpeppe/fastuuid", -) +load("//:repositories.bzl", "go_repositories") -# Also define in Gopkg.toml -go_repository( - name = "in_gopkg_resty_v1", - commit = "fa5875c0caa5c260ab78acec5a244215a730247f", - importpath = "gopkg.in/resty.v1", -) +go_repositories() -# Also define in Gopkg.toml -go_repository( - name = "com_github_ghodss_yaml", - commit = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7", - importpath = "github.com/ghodss/yaml", -) +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") -# Also define in Gopkg.toml -go_repository( - name = "in_gopkg_yaml_v2", - commit = "eb3733d160e74a9c7e442f435eb3bea458e1d19f", - importpath = "gopkg.in/yaml.v2", +git_repository( + name = "com_google_protobuf", + commit = "09745575a923640154bcf307fba8aedff47f240a", + remote = "https://github.com/protocolbuffers/protobuf", + shallow_since = "1558721209 -0700", ) +load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") + +protobuf_deps() + http_archive( name = "com_github_bazelbuild_buildtools", sha256 = "86592d703ecbe0c5cbb5139333a63268cf58d7efd2c459c8be8e69e77d135e29", diff --git a/repositories.bzl b/repositories.bzl new file mode 100644 index 00000000000..9477332b07a --- /dev/null +++ b/repositories.bzl @@ -0,0 +1,153 @@ +load("@bazel_gazelle//:deps.bzl", "go_repository") + +def go_repositories(): + go_repository( + name = "co_honnef_go_tools", + importpath = "honnef.co/go/tools", + sum = "h1:XJP7lxbSxWLOMNdBE4B/STaqVy6L73o0knwj2vIlxnw=", + version = "v0.0.0-20190102054323-c2f93a96b099", + ) + go_repository( + name = "com_github_burntsushi_toml", + importpath = "github.com/BurntSushi/toml", + sum = "h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=", + version = "v0.3.1", + ) + go_repository( + name = "com_github_client9_misspell", + importpath = "github.com/client9/misspell", + sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", + version = "v0.3.4", + ) + go_repository( + name = "com_github_ghodss_yaml", + importpath = "github.com/ghodss/yaml", + sum = "h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_golang_glog", + importpath = "github.com/golang/glog", + sum = "h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=", + version = "v0.0.0-20160126235308-23def4e6c14b", + ) + go_repository( + name = "com_github_golang_mock", + importpath = "github.com/golang/mock", + sum = "h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_golang_protobuf", + importpath = "github.com/golang/protobuf", + sum = "h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_kr_pretty", + importpath = "github.com/kr/pretty", + sum = "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_kr_pty", + importpath = "github.com/kr/pty", + sum = "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_kr_text", + importpath = "github.com/kr/text", + sum = "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_rogpeppe_fastuuid", + importpath = "github.com/rogpeppe/fastuuid", + sum = "h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng=", + version = "v0.0.0-20150106093220-6724a57986af", + ) + go_repository( + name = "com_google_cloud_go", + importpath = "cloud.google.com/go", + sum = "h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=", + version = "v0.26.0", + ) + go_repository( + name = "in_gopkg_check_v1", + importpath = "gopkg.in/check.v1", + sum = "h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=", + version = "v1.0.0-20180628173108-788fd7840127", + ) + go_repository( + name = "in_gopkg_resty_v1", + importpath = "gopkg.in/resty.v1", + sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", + version = "v1.12.0", + ) + go_repository( + name = "in_gopkg_yaml_v2", + importpath = "gopkg.in/yaml.v2", + sum = "h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk=", + version = "v2.0.0-20170812160011-eb3733d160e7", + ) + go_repository( + name = "org_golang_google_appengine", + importpath = "google.golang.org/appengine", + sum = "h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs=", + version = "v1.1.0", + ) + go_repository( + name = "org_golang_google_genproto", + importpath = "google.golang.org/genproto", + sum = "h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=", + version = "v0.0.0-20180817151627-c66870c02cf8", + ) + go_repository( + name = "org_golang_google_grpc", + importpath = "google.golang.org/grpc", + sum = "h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=", + version = "v1.19.0", + ) + go_repository( + name = "org_golang_x_lint", + importpath = "golang.org/x/lint", + sum = "h1:x/bBzNauLQAlE3fLku/xy92Y8QwKX5HZymrMz2IiKFc=", + version = "v0.0.0-20181026193005-c67002cb31c3", + ) + go_repository( + name = "org_golang_x_net", + importpath = "golang.org/x/net", + sum = "h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=", + version = "v0.0.0-20181220203305-927f97764cc3", + ) + go_repository( + name = "org_golang_x_oauth2", + importpath = "golang.org/x/oauth2", + sum = "h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=", + version = "v0.0.0-20180821212333-d2e6202438be", + ) + go_repository( + name = "org_golang_x_sync", + importpath = "golang.org/x/sync", + sum = "h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=", + version = "v0.0.0-20180314180146-1d60e4601c6f", + ) + go_repository( + name = "org_golang_x_sys", + importpath = "golang.org/x/sys", + sum = "h1:YoY1wS6JYVRpIfFngRf2HHo9R9dAne3xbkGOQ5rJXjU=", + version = "v0.0.0-20181107165924-66b7b1311ac8", + ) + go_repository( + name = "org_golang_x_text", + importpath = "golang.org/x/text", + sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", + version = "v0.3.0", + ) + go_repository( + name = "org_golang_x_tools", + importpath = "golang.org/x/tools", + sum = "h1:qMK98NmNCRVDIYFycQ5yVRkvgDUFfdP8Ip4KqmDEB7g=", + version = "v0.0.0-20190114222345-bf090417da8b", + ) From 56b3d2a3096be842ca29e3fd49d060fda511000b Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Mon, 5 Aug 2019 15:25:06 -0600 Subject: [PATCH 0173/1518] Create presubmit.yaml which configures CI (#983) Bazel runs a community CI server that has a bunch of free resources for testing projects that opt into Bazel. This configures that resource. --- .bazelci/presubmit.yml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .bazelci/presubmit.yml diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml new file mode 100644 index 00000000000..1e998201599 --- /dev/null +++ b/.bazelci/presubmit.yml @@ -0,0 +1,42 @@ +--- +platforms: + ubuntu1804: + build_flags: + - "--build_tag_filters=-nolinux" + build_targets: + - "..." + test_flags: + - "--features=race" + - "--test_tag_filters=-nolinux" + test_targets: + - "..." + ubuntu1604: + build_flags: + - "--build_tag_filters=-nolinux" + build_targets: + - "..." + test_flags: + - "--features=race" + - "--test_tag_filters=-nolinux" + test_targets: + - "..." + macos: + build_flags: + - "--build_tag_filters=-nomacos" + build_targets: + - "..." + test_flags: + - "--features=race" + - "--test_tag_filters=-nomacos" + test_targets: + - "..." + windows: + build_flags: + - "--build_tag_filters=-nowindows" + build_targets: + - "..." + test_flags: + - "--test_tag_filters=-nowindows" + - "--experimental_enable_runfiles" + test_targets: + - "..." From fdf063599d922ec89a70819e2d5b7b4b5c642b92 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 5 Aug 2019 16:08:44 +0100 Subject: [PATCH 0174/1518] Fix release script Specify an "id" for each build, as this was otherwise inferred and duplicate for our two builds. Also remove the use of the deprecated "archive" instruction in favour of "archives". Fixes #981 --- .goreleaser.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 28131d84ff0..bcc63e544d3 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,5 +1,6 @@ builds: - main: ./protoc-gen-grpc-gateway/main.go + id: protoc-gen-grpc-gateway binary: protoc-gen-grpc-gateway env: - CGO_ENABLED=0 @@ -10,6 +11,7 @@ builds: goarch: - amd64 - main: ./protoc-gen-swagger/main.go + id: protoc-gen-swagger binary: protoc-gen-swagger env: - CGO_ENABLED=0 @@ -19,9 +21,9 @@ builds: - windows goarch: - amd64 -archive: - name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" - format: binary - replacements: - amd64: x86_64 +archives: + - name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" + format: binary + replacements: + amd64: x86_64 dist: _output From 643a3cf0d8a1c5c6db8a80eb92f80639d6df6be6 Mon Sep 17 00:00:00 2001 From: xin-au Date: Fri, 9 Aug 2019 00:12:05 -0700 Subject: [PATCH 0175/1518] Use json camel case when GetUseJSONNamesForFields is enabled (#985) * Use json name when GetUseJSONNamesForFields is enabled * Optimzed an if statement * Merge two if statements * Convert parameters to lower camel case in url * Revert services.go file * Fix an unit test * Update bazel file * Add an unit test for testing json camel case * Add an unit test for testing code without enabling json camel case * Add more corner cases Fixes #986 --- protoc-gen-swagger/genswagger/BUILD.bazel | 1 + protoc-gen-swagger/genswagger/template.go | 34 +++++++++-- .../genswagger/template_test.go | 61 +++++++++++++++++-- 3 files changed, 87 insertions(+), 9 deletions(-) diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 18f72b9e37c..7798e9b99c5 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index b02ed6aa2c7..3b1e8348c20 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -13,6 +13,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + gogen "github.com/golang/protobuf/protoc-gen-go/generator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -597,7 +598,7 @@ func resolveFullyQualifiedNameToSwaggerNames(messages []string, useFQNForSwagger } // Swagger expects paths of the form /path/{string_value} but grpc-gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. -func templateToSwaggerPath(path string) string { +func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // It seems like the right thing to do here is to just use // strings.Split(path, "/") but that breaks badly when you hit a url like // /{my_field=prefix/*}/ and end up with 2 sections representing my_field. @@ -606,12 +607,15 @@ func templateToSwaggerPath(path string) string { var parts []string depth := 0 buffer := "" + jsonBuffer := "" for _, char := range path { switch char { case '{': // Push on the stack depth++ buffer += string(char) + jsonBuffer = "" + jsonBuffer += string(char) break case '}': if depth == 0 { @@ -620,6 +624,14 @@ func templateToSwaggerPath(path string) string { // Pop from the stack depth-- buffer += string(char) + if reg.GetUseJSONNamesForFields() && + len(jsonBuffer) > 1 { + jsonSnakeCaseName := string(jsonBuffer[1 : len(buffer)-1]) + jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName)) + prev := string(buffer[:len(buffer)-len(jsonSnakeCaseName)-2]) + buffer = strings.Join([]string{prev, "{", jsonCamelCaseName, "}"}, "") + jsonBuffer = "" + } case '/': if depth == 0 { parts = append(parts, buffer) @@ -631,6 +643,7 @@ func templateToSwaggerPath(path string) string { buffer += string(char) default: buffer += string(char) + jsonBuffer += string(char) break } } @@ -731,9 +744,12 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if desc == "" { desc = fieldProtoComments(reg, parameter.Target.Message, parameter.Target) } - + parameterString := parameter.String() + if reg.GetUseJSONNamesForFields() { + parameterString = lowerCamelCase(parameterString) + } parameters = append(parameters, swaggerParameterObject{ - Name: parameter.String(), + Name: parameterString, Description: desc, In: "path", Required: true, @@ -797,7 +813,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters = append(parameters, queryParams...) } - pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template)] + pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template, reg)] if !ok { pathItemObject = swaggerPathItemObject{} } @@ -947,7 +963,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re pathItemObject.Patch = operationObject break } - paths[templateToSwaggerPath(b.PathTmpl.Template)] = pathItemObject + paths[templateToSwaggerPath(b.PathTmpl.Template, reg)] = pathItemObject } } } @@ -1661,3 +1677,11 @@ func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs re // Run again in case any new refs were added addCustomRefs(d, reg, refs) } + +func lowerCamelCase(parameter string) string { + parameterString := gogen.CamelCase(parameter) + builder := &strings.Builder{} + builder.WriteString(strings.ToLower(string(parameterString[0]))) + builder.WriteString(parameterString[1:]) + return builder.String() +} diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 4853a4370d3..200f563d544 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -838,6 +838,59 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { } } +func TestTemplateWithJsonCamelCase(t *testing.T) { + var tests = []struct { + input string + expected string + }{ + {"/test/{test_id}", "/test/{testId}"}, + {"/test1/{test1_id}/test2/{test2_id}", "/test1/{test1Id}/test2/{test2Id}"}, + {"/test1/{test1_id}/{test2_id}", "/test1/{test1Id}/{test2Id}"}, + {"/test1/test2/{test1_id}/{test2_id}", "/test1/test2/{test1Id}/{test2Id}"}, + {"/test1/{test1_id1_id2}", "/test1/{test1Id1Id2}"}, + {"/test1/{test1_id1_id2}/test2/{test2_id3_id4}", "/test1/{test1Id1Id2}/test2/{test2Id3Id4}"}, + {"/test1/test2/{test1_id1_id2}/{test2_id3_id4}", "/test1/test2/{test1Id1Id2}/{test2Id3Id4}"}, + {"test/{a}", "test/{a}"}, + {"test/{ab}", "test/{ab}"}, + {"test/{a_a}", "test/{aA}"}, + {"test/{ab_c}", "test/{abC}"}, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + for _, data := range tests { + actual := templateToSwaggerPath(data.input, reg) + if data.expected != actual { + t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) + } + } +} + +func TestTemplateWithoutJsonCamelCase(t *testing.T) { + var tests = []struct { + input string + expected string + }{ + {"/test/{test_id}", "/test/{test_id}"}, + {"/test1/{test1_id}/test2/{test2_id}", "/test1/{test1_id}/test2/{test2_id}"}, + {"/test1/{test1_id}/{test2_id}", "/test1/{test1_id}/{test2_id}"}, + {"/test1/test2/{test1_id}/{test2_id}", "/test1/test2/{test1_id}/{test2_id}"}, + {"/test1/{test1_id1_id2}", "/test1/{test1_id1_id2}"}, + {"/test1/{test1_id1_id2}/test2/{test2_id3_id4}", "/test1/{test1_id1_id2}/test2/{test2_id3_id4}"}, + {"/test1/test2/{test1_id1_id2}/{test2_id3_id4}", "/test1/test2/{test1_id1_id2}/{test2_id3_id4}"}, + {"test/{a}", "test/{a}"}, + {"test/{ab}", "test/{ab}"}, + {"test/{a_a}", "test/{a_a}"}, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(false) + for _, data := range tests { + actual := templateToSwaggerPath(data.input, reg) + if data.expected != actual { + t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) + } + } +} + func TestTemplateToSwaggerPath(t *testing.T) { var tests = []struct { input string @@ -860,9 +913,9 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, } - + reg := descriptor.NewRegistry() for _, data := range tests { - actual := templateToSwaggerPath(data.input) + actual := templateToSwaggerPath(data.input, reg) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -937,9 +990,9 @@ func TestFQMNtoSwaggerName(t *testing.T) { {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, } - + reg := descriptor.NewRegistry() for _, data := range tests { - actual := templateToSwaggerPath(data.input) + actual := templateToSwaggerPath(data.input, reg) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } From b6e6efbd841af268a04f85e0057d82c6d48ec34d Mon Sep 17 00:00:00 2001 From: vthiery Date: Fri, 9 Aug 2019 10:29:42 +0200 Subject: [PATCH 0176/1518] Add doc for opentracing support Mention the fact that the client must be initialized with an opentracing interceptor to allow the propagation of spans through the gateway. --- docs/_docs/customizingyourgateway.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 1d927f0166d..73286d9f8c9 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -154,6 +154,28 @@ if err := http.ListenAndServe(":8080", tracingWrapper(mux)); err != nil { } ``` +Finally, don't forget to add a tracing interceptor when registering +the services. E.g. + +```go +import ( + ... + "google.golang.org/grpc" + "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" +) + +opts := []grpc.DialOption{ + grpc.WithUnaryInterceptor( + grpc_opentracing.UnaryClientInterceptor( + grpc_opentracing.WithTracer(opentracing.GlobalTracer()), + ), + ), +} +if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opts); err != nil { + log.Fatalf("could not register HTTP service: %v", err) +} +``` + ## Error handler http://mycodesmells.com/post/grpc-gateway-error-handler From 86e5755138ae75350007517799d83132c27a58d5 Mon Sep 17 00:00:00 2001 From: xin-au Date: Sat, 10 Aug 2019 08:54:38 -0700 Subject: [PATCH 0177/1518] Camel case backward compatible in Swagger doc (#988) * Avoid potential out of range and support the convention that could be inside * Add some test cases for testing backward compatible --- protoc-gen-swagger/genswagger/template.go | 3 ++- protoc-gen-swagger/genswagger/template_test.go | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 3b1e8348c20..0a32b49e68d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -626,7 +626,7 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { buffer += string(char) if reg.GetUseJSONNamesForFields() && len(jsonBuffer) > 1 { - jsonSnakeCaseName := string(jsonBuffer[1 : len(buffer)-1]) + jsonSnakeCaseName := string(jsonBuffer[1:]) jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName)) prev := string(buffer[:len(buffer)-len(jsonSnakeCaseName)-2]) buffer = strings.Join([]string{prev, "{", jsonCamelCaseName, "}"}, "") @@ -641,6 +641,7 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { continue } buffer += string(char) + jsonBuffer += string(char) default: buffer += string(char) jsonBuffer += string(char) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 200f563d544..385785ffc8f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -914,6 +914,14 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, } reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(false) + for _, data := range tests { + actual := templateToSwaggerPath(data.input, reg) + if data.expected != actual { + t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) + } + } + reg.SetUseJSONNamesForFields(true) for _, data := range tests { actual := templateToSwaggerPath(data.input, reg) if data.expected != actual { @@ -991,6 +999,14 @@ func TestFQMNtoSwaggerName(t *testing.T) { {"/{test1}/{test2}/", "/{test1}/{test2}/"}, } reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(false) + for _, data := range tests { + actual := templateToSwaggerPath(data.input, reg) + if data.expected != actual { + t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) + } + } + reg.SetUseJSONNamesForFields(true) for _, data := range tests { actual := templateToSwaggerPath(data.input, reg) if data.expected != actual { From 929d1ba25509a24d64a1382edf8c7223a3054b88 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 11 Aug 2019 22:20:18 +0100 Subject: [PATCH 0178/1518] protoc-gen-swagger: correctly type struct.proto types --- protoc-gen-swagger/genswagger/template.go | 15 +++++ .../genswagger/template_test.go | 55 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 0a32b49e68d..ca83b3693f2 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -62,6 +62,21 @@ var wktSchemas = map[string]schemaCore{ Format: "boolean", }, ".google.protobuf.Empty": schemaCore{}, + ".google.protobuf.Struct": schemaCore{ + Type: "object", + }, + ".google.protobuf.Value": schemaCore{ + Type: "object", + }, + ".google.protobuf.ListValue": schemaCore{ + Type: "array", + Items: (*swaggerItemsObject)(&schemaCore{ + Type: "object", + }), + }, + ".google.protobuf.NullValue": schemaCore{ + Type: "string", + }, } func listEnumNames(enum *descriptor.Enum) (names []string) { diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 385785ffc8f..06021fe10ce 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1193,6 +1193,61 @@ func TestSchemaOfField(t *testing.T) { Format: "boolean", }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.Struct"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "object", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.Value"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "object", + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.ListValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "array", + Items: (*swaggerItemsObject)(&schemaCore{ + Type: "object", + }), + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + Name: proto.String("wrapped_field"), + TypeName: proto.String(".google.protobuf.NullValue"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: schemaCore{ + Type: "string", + }, + }, { field: &descriptor.Field{ FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ From 855af06489c1c1db52b31f41b6ed88f8b8805d0d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 15 Aug 2019 15:23:39 +0100 Subject: [PATCH 0179/1518] Correct HTTPBody doc The previous suggestion would result in a compilation error. --- docs/_docs/httpbody.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/_docs/httpbody.md b/docs/_docs/httpbody.md index f95148ab336..5a0f9219ada 100644 --- a/docs/_docs/httpbody.md +++ b/docs/_docs/httpbody.md @@ -6,10 +6,11 @@ category: documentation The [HTTP Body](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! ## Example Usage -1. Create a mux with the HTTP Body Marshaler as option. +1. Create a mux and configure it to use the `HTTPBodyMarshaler`. ```golang - mux := runtime.NewServeMux(runtime.SetHTTPBodyMarshaler) + mux := runtime.NewServeMux() + runtime.SetHTTPBodyMarshaler(mux) ``` 2. Define your service in gRPC with an httpbody response message From e560d3a78f59c25304633c2d9058c8b375722931 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Thu, 15 Aug 2019 13:00:22 -0600 Subject: [PATCH 0180/1518] Disable Windows CI Bazel We don't have a maintainer for Bazel windows. If you want to volunteer, send a PR rolling this back and let's fix it. --- .bazelci/presubmit.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index 1e998201599..a0da2fcc0bc 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -30,13 +30,3 @@ platforms: - "--test_tag_filters=-nomacos" test_targets: - "..." - windows: - build_flags: - - "--build_tag_filters=-nowindows" - build_targets: - - "..." - test_flags: - - "--test_tag_filters=-nowindows" - - "--experimental_enable_runfiles" - test_targets: - - "..." From fd2d159495beeea56e2b747d3d4b68299a81210c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 12 Aug 2019 11:19:22 +0100 Subject: [PATCH 0181/1518] Generate changelog for 1.9.6 --- CHANGELOG.md | 28 +++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27e479b6f99..735a96a3d4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## [v1.9.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.6) (2019-08-16) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.5...v1.9.6) + +**Closed issues:** + +- Returning a primitive type as a response instead of proto messages [\#994](https://github.com/grpc-ecosystem/grpc-gateway/issues/994) +- protoc-gen-swagger: fix description of google/protobuf/struct.proto types [\#989](https://github.com/grpc-ecosystem/grpc-gateway/issues/989) +- Swagger generator does not convert parameters in URLs to camel case when `json\_names\_for\_fields` is enable. [\#986](https://github.com/grpc-ecosystem/grpc-gateway/issues/986) +- The release upload job is broken [\#981](https://github.com/grpc-ecosystem/grpc-gateway/issues/981) +- Schema and field name questions from a front end developer [\#980](https://github.com/grpc-ecosystem/grpc-gateway/issues/980) +- undefined: runtime.AssumeColonVerbOpt [\#978](https://github.com/grpc-ecosystem/grpc-gateway/issues/978) +- I want to know how to transfer http+proto to grpc. [\#977](https://github.com/grpc-ecosystem/grpc-gateway/issues/977) +- Is it possible to use protoc-gen-swagger options in my own protos? [\#976](https://github.com/grpc-ecosystem/grpc-gateway/issues/976) + +**Merged pull requests:** + +- Disable Windows CI Bazel [\#996](https://github.com/grpc-ecosystem/grpc-gateway/pull/996) ([achew22](https://github.com/achew22)) +- Correct HTTPBody doc [\#995](https://github.com/grpc-ecosystem/grpc-gateway/pull/995) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- protoc-gen-swagger: correctly type struct.proto types [\#990](https://github.com/grpc-ecosystem/grpc-gateway/pull/990) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Camel case backward compatible in Swagger doc [\#988](https://github.com/grpc-ecosystem/grpc-gateway/pull/988) ([xin-au](https://github.com/xin-au)) +- Add doc for opentracing support [\#987](https://github.com/grpc-ecosystem/grpc-gateway/pull/987) ([vthiery](https://github.com/vthiery)) +- Use json camel case when GetUseJSONNamesForFields is enabled [\#985](https://github.com/grpc-ecosystem/grpc-gateway/pull/985) ([xin-au](https://github.com/xin-au)) +- Create presubmit.yaml which configures CI [\#983](https://github.com/grpc-ecosystem/grpc-gateway/pull/983) ([achew22](https://github.com/achew22)) +- Fix release script [\#982](https://github.com/grpc-ecosystem/grpc-gateway/pull/982) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Upgrade to the latest rules\_go [\#979](https://github.com/grpc-ecosystem/grpc-gateway/pull/979) ([achew22](https://github.com/achew22)) + ## [v1.9.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.5) (2019-07-22) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.4...v1.9.5) @@ -13,6 +39,7 @@ **Merged pull requests:** +- Generate changelog for 1.9.5 [\#975](https://github.com/grpc-ecosystem/grpc-gateway/pull/975) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Fix HTTP Status Code returned for a `Failed Precondition` error [\#974](https://github.com/grpc-ecosystem/grpc-gateway/pull/974) ([cjcormack](https://github.com/cjcormack)) - Examples fix: Support preflight of auth libraries in js [\#973](https://github.com/grpc-ecosystem/grpc-gateway/pull/973) ([GhiaC](https://github.com/GhiaC)) @@ -719,7 +746,6 @@ **Closed issues:** - Empty value omitted [\#355](https://github.com/grpc-ecosystem/grpc-gateway/issues/355) -- Must generate reverse proxy in same package? [\#353](https://github.com/grpc-ecosystem/grpc-gateway/issues/353) - Release 1.2.0 [\#340](https://github.com/grpc-ecosystem/grpc-gateway/issues/340) - Cut another release [\#278](https://github.com/grpc-ecosystem/grpc-gateway/issues/278) diff --git a/Makefile b/Makefile index 5915f17d506..f48004971f5 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.5 + --future-release=v1.9.6 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 4ba7ec0bc390cae4a2d03625ac122aa8a772ac3a Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 24 Aug 2019 10:06:41 -0400 Subject: [PATCH 0182/1518] Allow overriding the primitive type of fields (#1003) * Allow overriding the primitive type of fields * Updated generated files and added a separate example for type override * Fixed formatting * Made logic for type override a little bit more forgiving * Added additional files it needs to pass tests --- .../abe/a_bit_of_everything_service_api.go | 8 +- .../abe/examplepb_a_bit_of_everything.go | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 451 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 2 + .../a_bit_of_everything.swagger.json | 42 +- examples/proto/examplepb/stream.swagger.json | 4 + protoc-gen-swagger/genswagger/template.go | 3 + 7 files changed, 287 insertions(+), 225 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index f4fe7b6f87e..31a5b3c9c1c 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -73,9 +73,10 @@ func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythin * @param repeatedStringAnnotation Repeated string title. Repeated string description. * @param nestedAnnotationAmount * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param int64OverrideType * @return *ExamplepbABitOfEverything */ -func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, floatValue float32, singleNestedAmount int64, singleNestedOk string, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*ExamplepbABitOfEverything, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, floatValue float32, singleNestedAmount int64, singleNestedOk string, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationAmount int64, nestedAnnotationOk string, int64OverrideType int64) (*ExamplepbABitOfEverything, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -144,6 +145,7 @@ func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) + localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } @@ -776,9 +778,10 @@ func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body Examplepb * @param nestedAnnotationName name is nested field. * @param nestedAnnotationAmount * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param int64OverrideType * @return *interface{} */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string, int64OverrideType int64) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables @@ -835,6 +838,7 @@ func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, si localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) + localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go index 2190507a464..f14edb018dd 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/examplepb_a_bit_of_everything.go @@ -92,4 +92,6 @@ type ExamplepbABitOfEverything struct { // Nested object description. NestedAnnotation ABitOfEverythingNested `json:"nested_annotation,omitempty"` + + Int64OverrideType int64 `json:"int64_override_type,omitempty"` } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index ee105d94ed4..677cdab761e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0, 0, 0} } // Intentionaly complicated message type to cover many features of Protobuf. @@ -130,6 +130,7 @@ type ABitOfEverything struct { RepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3" json:"repeated_nested_annotation,omitempty"` // nested object comments (This comment is overridden by the field annotation) NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` + Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -139,7 +140,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -427,6 +428,13 @@ func (m *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { return nil } +func (m *ABitOfEverything) GetInt64OverrideType() int64 { + if m != nil { + return m.Int64OverrideType + } + return 0 +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*ABitOfEverything) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _ABitOfEverything_OneofMarshaler, _ABitOfEverything_OneofUnmarshaler, _ABitOfEverything_OneofSizer, []interface{}{ @@ -513,7 +521,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{0, 0} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -582,7 +590,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{1} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -725,7 +733,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{2} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -764,7 +772,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{3} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -811,7 +819,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_db561398d393056a, []int{4} + return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1641,216 +1649,219 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_db561398d393056a) -} - -var fileDescriptor_a_bit_of_everything_db561398d393056a = []byte{ - // 3311 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x73, 0x1b, 0xc7, - 0x99, 0x1c, 0x0c, 0x9f, 0xcd, 0x17, 0xd8, 0x94, 0x28, 0x10, 0xa2, 0xcd, 0x16, 0x24, 0xdb, 0x23, - 0x58, 0xc0, 0x90, 0x43, 0x4a, 0xa6, 0xe0, 0xb2, 0xb5, 0x00, 0x1f, 0x12, 0x2d, 0x89, 0xa2, 0x46, - 0xb2, 0xd6, 0x25, 0x4b, 0x66, 0x35, 0x80, 0x06, 0x31, 0x22, 0xe6, 0xe1, 0x99, 0x1e, 0x4a, 0x58, - 0x2e, 0x76, 0xbd, 0x8f, 0xda, 0xad, 0xb5, 0x0f, 0x5b, 0x05, 0x27, 0x95, 0xca, 0xa3, 0xf2, 0x0b, - 0x7c, 0xcd, 0xc9, 0x55, 0x49, 0x0e, 0xc9, 0x29, 0x87, 0x54, 0x29, 0xa9, 0xdc, 0x72, 0x4a, 0x0e, - 0x39, 0xe5, 0x92, 0x2a, 0x57, 0xe5, 0x90, 0x54, 0x6a, 0x7a, 0x66, 0x80, 0x99, 0x01, 0x20, 0x0a, - 0x92, 0x4b, 0x17, 0x6a, 0xba, 0xfb, 0x7b, 0x7f, 0x5f, 0x7f, 0x8f, 0x86, 0x80, 0x44, 0x9e, 0x60, - 0xd5, 0xa8, 0x11, 0x4b, 0x34, 0x4c, 0x9d, 0xea, 0xa2, 0xb7, 0x34, 0x8a, 0x22, 0xde, 0x2b, 0x2a, - 0x74, 0x4f, 0xaf, 0xec, 0x91, 0x43, 0x62, 0xd6, 0x69, 0x55, 0xd1, 0xf6, 0xb3, 0x0c, 0x06, 0x2e, - 0xee, 0x9b, 0x46, 0x29, 0xbb, 0x8f, 0x29, 0x79, 0x8c, 0xeb, 0x59, 0x9f, 0x40, 0xb6, 0x85, 0x9a, - 0x5c, 0xd8, 0xd7, 0xf5, 0xfd, 0x1a, 0x11, 0xb1, 0xa1, 0x88, 0x58, 0xd3, 0x74, 0x8a, 0xa9, 0xa2, - 0x6b, 0x96, 0x8b, 0x9e, 0x44, 0xde, 0x29, 0x5b, 0x15, 0xed, 0x8a, 0x58, 0x51, 0x48, 0xad, 0xbc, - 0xa7, 0x62, 0xeb, 0xc0, 0x83, 0x38, 0x1d, 0x85, 0x20, 0xaa, 0x41, 0xeb, 0xde, 0xe1, 0xeb, 0xd1, - 0xc3, 0xb2, 0x6d, 0x32, 0xfa, 0xde, 0xf9, 0x5b, 0x11, 0x8d, 0x0c, 0x4c, 0xab, 0x44, 0xb3, 0x55, - 0xf6, 0xb1, 0xe7, 0x7c, 0xf9, 0x72, 0x44, 0x00, 0x2d, 0xbb, 0x28, 0xaa, 0xc4, 0xb2, 0xf0, 0x3e, - 0xf1, 0x20, 0xce, 0x74, 0x42, 0x48, 0x11, 0x90, 0xc5, 0xa8, 0x34, 0x54, 0x51, 0x89, 0x45, 0xb1, - 0x6a, 0x78, 0x00, 0x17, 0xd8, 0x3f, 0xa5, 0xcc, 0x3e, 0xd1, 0x32, 0xd6, 0x63, 0xbc, 0xbf, 0x4f, - 0x4c, 0x51, 0x37, 0x98, 0x3d, 0x3a, 0x6d, 0x93, 0xfa, 0xde, 0x69, 0x10, 0xcf, 0x17, 0x14, 0x7a, - 0xab, 0xb2, 0xd9, 0xb2, 0x3a, 0x7c, 0x08, 0x26, 0x2d, 0x45, 0xdb, 0xaf, 0x91, 0x3d, 0x8d, 0x58, - 0x94, 0x94, 0x13, 0xf3, 0x88, 0x13, 0xc6, 0xa5, 0xb5, 0xec, 0x31, 0x7e, 0xc8, 0x46, 0x29, 0x65, - 0x77, 0x18, 0xbe, 0x3c, 0xe1, 0x92, 0x73, 0x57, 0xb0, 0x0a, 0x06, 0x6d, 0x5b, 0x29, 0x27, 0x38, - 0xc4, 0x09, 0x63, 0x85, 0xbb, 0xcd, 0xfc, 0xed, 0xcf, 0x38, 0xee, 0x73, 0xee, 0xfa, 0xc7, 0x38, - 0x53, 0xc9, 0x67, 0xb6, 0x96, 0x32, 0x97, 0x1f, 0x1e, 0xad, 0x35, 0x32, 0xc1, 0xe5, 0x6a, 0x3f, - 0xcb, 0x65, 0xa9, 0x21, 0x33, 0x0e, 0x70, 0x17, 0x0c, 0x7b, 0x1a, 0xc4, 0x10, 0xff, 0x52, 0x1a, - 0x78, 0x74, 0xe0, 0x07, 0x60, 0xbc, 0x52, 0xd3, 0x31, 0xdd, 0x3b, 0xc4, 0x35, 0x9b, 0x24, 0x78, - 0xc4, 0x09, 0xb1, 0xc2, 0xf9, 0x66, 0xfe, 0x4d, 0x69, 0x66, 0xcb, 0xd9, 0x47, 0x6c, 0x1f, 0xb1, - 0x08, 0xcb, 0xf1, 0x4b, 0x59, 0xe9, 0x29, 0x17, 0x44, 0x90, 0x01, 0x5b, 0xdc, 0x73, 0xbe, 0xe1, - 0x19, 0x30, 0x51, 0xd6, 0xed, 0x62, 0x8d, 0x78, 0xc4, 0x06, 0x11, 0x27, 0x70, 0xf2, 0xb8, 0xbb, - 0xe7, 0x82, 0x2c, 0x82, 0x71, 0x45, 0xa3, 0x97, 0x56, 0x3d, 0x88, 0x21, 0xc4, 0x09, 0xbc, 0x0c, - 0xd8, 0x56, 0x8b, 0x86, 0x1d, 0x84, 0x18, 0x46, 0x9c, 0x30, 0x28, 0x8f, 0xdb, 0x01, 0x10, 0x97, - 0xc6, 0x8a, 0xe4, 0x41, 0x8c, 0x20, 0x4e, 0x18, 0x62, 0x34, 0x56, 0x24, 0x17, 0xe0, 0x2c, 0x98, - 0xac, 0x28, 0x4f, 0x48, 0xb9, 0x45, 0x64, 0x14, 0x71, 0xc2, 0xb0, 0x3c, 0xe1, 0x6d, 0x86, 0x81, - 0x5a, 0x74, 0xc6, 0x10, 0x27, 0x8c, 0x78, 0x40, 0x3e, 0xa5, 0xd7, 0x00, 0x28, 0xea, 0x7a, 0xcd, - 0x83, 0x00, 0x88, 0x13, 0x46, 0xe5, 0x31, 0x67, 0xa7, 0x25, 0xac, 0x45, 0x4d, 0x45, 0xdb, 0xf7, - 0x00, 0xc6, 0x9d, 0x00, 0x90, 0xc7, 0xdd, 0xbd, 0x96, 0xb0, 0xc5, 0x3a, 0x25, 0x96, 0x07, 0xf1, - 0x1a, 0xe2, 0x84, 0x09, 0x19, 0xb0, 0xad, 0x90, 0xc2, 0x2d, 0x31, 0x26, 0x11, 0x27, 0x4c, 0xba, - 0x0a, 0xfb, 0x52, 0x5c, 0x07, 0xc0, 0xb9, 0x75, 0x1e, 0xc0, 0x14, 0xe2, 0x84, 0x29, 0xe9, 0xc2, - 0xb1, 0x9e, 0xdf, 0xb1, 0x55, 0x62, 0x2a, 0xa5, 0x4d, 0xcd, 0x56, 0xe5, 0x31, 0x07, 0xdf, 0x25, - 0xb6, 0x0b, 0xa6, 0x5b, 0xf7, 0xd8, 0xa3, 0xf8, 0x3a, 0xa3, 0x28, 0xf4, 0xa0, 0xe8, 0x5f, 0xff, - 0xec, 0x2e, 0xa6, 0x55, 0x46, 0x6d, 0xd2, 0xf0, 0xbe, 0x5c, 0x8a, 0x16, 0x98, 0x73, 0x83, 0x69, - 0x2f, 0x4a, 0x78, 0x91, 0x11, 0x7e, 0xff, 0x38, 0xc2, 0x37, 0xdd, 0x84, 0xe0, 0xd3, 0xf7, 0x42, - 0xb4, 0xc5, 0x6e, 0x56, 0x0b, 0xad, 0x5d, 0xa6, 0x6f, 0x80, 0x29, 0x2b, 0xec, 0xbf, 0x69, 0xc4, - 0x09, 0xd3, 0xf2, 0xa4, 0x15, 0x72, 0x60, 0x0b, 0xac, 0x15, 0x0b, 0x71, 0xc4, 0x09, 0x71, 0x1f, - 0x2c, 0x10, 0x75, 0x56, 0xd0, 0x09, 0x33, 0x88, 0x13, 0x66, 0xe4, 0x71, 0x2b, 0xe0, 0x04, 0x0f, - 0xa4, 0x45, 0x07, 0x22, 0x4e, 0x80, 0x2e, 0x88, 0x4f, 0x45, 0x02, 0x27, 0x4d, 0x62, 0x10, 0xec, - 0x98, 0x22, 0x14, 0x17, 0xb3, 0x88, 0x17, 0xc6, 0xe4, 0x59, 0xff, 0xf0, 0x4e, 0x20, 0x3e, 0x2e, - 0x83, 0x71, 0x5d, 0x23, 0x4e, 0x91, 0x70, 0x32, 0x74, 0xe2, 0x04, 0x4b, 0x4c, 0x73, 0x59, 0x37, - 0x29, 0x66, 0xfd, 0xa4, 0x98, 0xdd, 0x74, 0x4e, 0xaf, 0x0d, 0xc8, 0x80, 0x01, 0xb3, 0x15, 0x3c, - 0x0b, 0x26, 0x5c, 0x54, 0x97, 0x57, 0xe2, 0xa4, 0x13, 0x7d, 0xd7, 0x06, 0x64, 0x97, 0xa0, 0xcb, - 0x04, 0x3e, 0x00, 0x63, 0x2a, 0x36, 0x3c, 0x39, 0xe6, 0x58, 0xd2, 0xb8, 0xd2, 0x7f, 0xd2, 0xb8, - 0x89, 0x0d, 0x26, 0xee, 0xa6, 0x46, 0xcd, 0xba, 0x3c, 0xaa, 0x7a, 0x4b, 0xf8, 0x04, 0xcc, 0xaa, - 0xd8, 0x30, 0xa2, 0xfa, 0x9e, 0x62, 0x7c, 0xae, 0xbd, 0x10, 0x1f, 0x23, 0x64, 0x1f, 0x97, 0xe1, - 0x8c, 0x1a, 0xdd, 0x0f, 0x70, 0xf6, 0x62, 0xcf, 0xe5, 0x9c, 0x78, 0x39, 0xce, 0x6e, 0xe4, 0x75, - 0x72, 0x0e, 0xec, 0xc3, 0x1c, 0x48, 0x68, 0xba, 0xb6, 0xae, 0x6b, 0x87, 0x44, 0x73, 0x2a, 0x0f, - 0xae, 0xed, 0x60, 0xd5, 0x4d, 0x6f, 0x89, 0x24, 0x4b, 0x00, 0x3d, 0xcf, 0xe1, 0x3a, 0x98, 0x6e, - 0x95, 0x37, 0x4f, 0xe2, 0xd3, 0xcc, 0xe3, 0xc9, 0x0e, 0x8f, 0xdf, 0xf5, 0xe1, 0xe4, 0xa9, 0x16, - 0x8a, 0x4b, 0xe4, 0x01, 0x68, 0x45, 0x52, 0xf0, 0xb2, 0x2d, 0x20, 0xbe, 0xef, 0xbc, 0x30, 0xe3, - 0x13, 0x6a, 0x5f, 0xac, 0xaf, 0x38, 0x90, 0x08, 0x93, 0x6f, 0x17, 0xd9, 0x04, 0xea, 0x9f, 0x47, - 0x61, 0xa3, 0x99, 0xcf, 0xa7, 0x4f, 0xcb, 0x1e, 0x49, 0xa4, 0xb9, 0x47, 0xc8, 0x21, 0x8d, 0xa8, - 0x42, 0x6b, 0x44, 0x4a, 0x75, 0x3f, 0x2c, 0x13, 0xab, 0x64, 0x2a, 0xac, 0xd2, 0x67, 0xe5, 0xb9, - 0xa0, 0xa4, 0xf9, 0x96, 0x44, 0xf0, 0x3b, 0x1c, 0x38, 0xd9, 0x36, 0x42, 0x50, 0xd6, 0x33, 0xfd, - 0xe7, 0xc9, 0x82, 0xd4, 0xcc, 0x8b, 0x69, 0xb8, 0xd3, 0x29, 0xe2, 0xfc, 0x4e, 0x4f, 0xc9, 0x66, - 0x5b, 0xb9, 0x35, 0x20, 0xd6, 0x21, 0x48, 0x46, 0x53, 0x41, 0x40, 0xb4, 0x94, 0x93, 0x0f, 0x0a, - 0x6b, 0xcd, 0xfc, 0xc5, 0xf4, 0xc9, 0x96, 0xee, 0x2e, 0x98, 0xc7, 0x6f, 0x21, 0xba, 0x1d, 0x62, - 0x99, 0x08, 0x67, 0x92, 0x00, 0xdf, 0x9f, 0x72, 0x01, 0xc6, 0xde, 0xcd, 0x08, 0x30, 0x3e, 0xfb, - 0x72, 0x5d, 0x43, 0x61, 0xab, 0x99, 0x5f, 0x4f, 0xb7, 0x65, 0x73, 0x19, 0x20, 0xbd, 0xf8, 0x88, - 0x94, 0xa8, 0x27, 0xf9, 0xd9, 0x1e, 0xa7, 0xdd, 0x15, 0x70, 0xe9, 0x06, 0x14, 0xf8, 0x21, 0x07, - 0x66, 0x3a, 0xe5, 0x3e, 0xf7, 0x72, 0xfd, 0x5a, 0x61, 0xb5, 0x99, 0x5f, 0x4e, 0xcf, 0xee, 0x74, - 0x11, 0x37, 0xb9, 0xd3, 0x5b, 0xca, 0xb8, 0x16, 0x91, 0x2e, 0xf9, 0x7b, 0x0e, 0x0c, 0x7b, 0x4d, - 0x1f, 0x04, 0x83, 0x1a, 0x56, 0x89, 0xdb, 0xf4, 0xc9, 0xec, 0x1b, 0xce, 0x81, 0x61, 0xac, 0xea, - 0xb6, 0x46, 0x13, 0x31, 0x56, 0xc5, 0xbd, 0x15, 0x54, 0x41, 0x4c, 0x3f, 0x60, 0xbd, 0xd5, 0x94, - 0x94, 0x7f, 0x51, 0x25, 0xb2, 0x1b, 0x84, 0x18, 0x2c, 0x4a, 0x93, 0xcd, 0xfc, 0x29, 0xe9, 0xa4, - 0xbf, 0x0c, 0xcb, 0x1c, 0xd3, 0x0f, 0x52, 0x8b, 0x60, 0xd4, 0x3f, 0x84, 0x63, 0x60, 0x68, 0x2b, - 0x7f, 0xe3, 0xce, 0x66, 0x7c, 0x00, 0x8e, 0x82, 0xc1, 0xbb, 0xf2, 0x87, 0x9b, 0x71, 0x2e, 0x77, - 0xaa, 0x99, 0x3f, 0x21, 0x41, 0x18, 0x3f, 0x42, 0x29, 0xfd, 0x20, 0x95, 0x43, 0x29, 0x67, 0x3f, - 0x85, 0x1a, 0x49, 0x05, 0x4c, 0x86, 0x52, 0x3d, 0x8c, 0x03, 0xfe, 0x80, 0xd4, 0x3d, 0x25, 0x9d, - 0x4f, 0x58, 0x00, 0x43, 0x6e, 0xbe, 0x89, 0xbd, 0x40, 0x1f, 0xe2, 0xa2, 0xe6, 0x62, 0x6b, 0x5c, - 0x72, 0x03, 0xcc, 0x75, 0xcf, 0xf6, 0x5d, 0x78, 0x9e, 0x08, 0xf2, 0x1c, 0x0b, 0x52, 0xf9, 0x37, - 0x9f, 0x4a, 0x34, 0x73, 0x77, 0xa1, 0xb2, 0x13, 0xa4, 0xf2, 0x32, 0xbd, 0x73, 0x9b, 0x7f, 0xee, - 0xfb, 0xb1, 0x66, 0xfe, 0xbb, 0x31, 0xf0, 0xdf, 0x5c, 0x7a, 0x36, 0x8f, 0x8a, 0x0a, 0x45, 0x7a, - 0x05, 0xb5, 0xc7, 0x3d, 0x69, 0x7b, 0x5b, 0xa3, 0x7e, 0x15, 0xa8, 0xa3, 0x92, 0xae, 0x1a, 0x35, - 0xa5, 0xc4, 0x2e, 0x87, 0x37, 0x04, 0x21, 0x5a, 0x37, 0x08, 0xa2, 0x3a, 0x2a, 0xe9, 0x87, 0xc4, - 0x44, 0x2a, 0xd6, 0xea, 0xa8, 0x42, 0x30, 0xb5, 0x4d, 0x62, 0x39, 0xb4, 0x76, 0xfd, 0x72, 0xf0, - 0x94, 0x63, 0x13, 0xc0, 0x53, 0x2e, 0xd8, 0x3f, 0x3f, 0xe5, 0x42, 0x0d, 0x77, 0xfa, 0x1e, 0x38, - 0xb7, 0xa5, 0x68, 0x65, 0xa4, 0xdb, 0x14, 0xa9, 0xba, 0x49, 0x10, 0x2e, 0x3a, 0x9f, 0x1d, 0xf3, - 0x50, 0xb6, 0x4a, 0xa9, 0x61, 0xe5, 0x44, 0x71, 0x5f, 0xa1, 0x55, 0xbb, 0x98, 0x2d, 0xe9, 0xaa, - 0xe8, 0x18, 0x23, 0x43, 0x4a, 0xba, 0x55, 0xb7, 0x28, 0xf1, 0x96, 0x9e, 0x6d, 0xa4, 0x55, 0x28, - 0x1d, 0xa1, 0x94, 0xc3, 0xdf, 0x09, 0x96, 0xa5, 0x52, 0x65, 0xe5, 0xd2, 0x32, 0x59, 0xce, 0xac, - 0x16, 0x57, 0x57, 0x33, 0xab, 0x6b, 0x2b, 0xe5, 0x0c, 0x5e, 0xbe, 0x78, 0x39, 0x73, 0x71, 0xb5, - 0x8c, 0x8b, 0xe5, 0xca, 0x3b, 0x64, 0x6d, 0x79, 0x35, 0x85, 0x1a, 0x85, 0x49, 0xbf, 0xb5, 0x61, - 0xc2, 0xa5, 0xfe, 0x3e, 0x0a, 0x12, 0x51, 0x49, 0xfc, 0x5c, 0x01, 0x2f, 0x83, 0x79, 0xd6, 0x3c, - 0xb6, 0x72, 0x57, 0x70, 0x28, 0xe1, 0x10, 0x2f, 0xc4, 0xe4, 0x39, 0x07, 0xc0, 0x47, 0xd8, 0x6a, - 0x4f, 0x1d, 0xef, 0x82, 0x64, 0x18, 0x35, 0x34, 0x83, 0x38, 0x73, 0x12, 0x27, 0x9f, 0x0a, 0xe2, - 0x6e, 0x04, 0xe6, 0x91, 0x0e, 0xbe, 0xc1, 0x16, 0x8f, 0x47, 0xbc, 0xc0, 0x87, 0xf9, 0x6e, 0xb7, - 0xbb, 0xbd, 0x0e, 0xbe, 0xa1, 0xb9, 0x65, 0x10, 0xf1, 0xc2, 0x60, 0x98, 0xef, 0x87, 0x81, 0x56, - 0xb1, 0x1b, 0xdf, 0x56, 0xf7, 0x39, 0x84, 0x78, 0x61, 0xa8, 0x83, 0xaf, 0xdf, 0x88, 0xbe, 0x07, - 0x4e, 0x47, 0x4c, 0x15, 0xea, 0x6f, 0x87, 0x11, 0x2f, 0x0c, 0xcb, 0x89, 0x90, 0xb1, 0x82, 0xad, - 0x6e, 0x77, 0xf4, 0xc0, 0x34, 0xc5, 0x0b, 0x23, 0x5d, 0xd0, 0x7d, 0xee, 0xef, 0x80, 0x44, 0x18, - 0x3d, 0x30, 0x1f, 0x8d, 0x22, 0x5e, 0x18, 0x95, 0x4f, 0x06, 0x71, 0x0b, 0xad, 0x59, 0xa9, 0xc3, - 0x5c, 0xa1, 0x8e, 0x71, 0x8c, 0x75, 0xc8, 0x21, 0x73, 0x85, 0xbb, 0xe4, 0x88, 0xb9, 0x82, 0x33, - 0x15, 0x40, 0xbc, 0x30, 0x11, 0x36, 0x57, 0xa1, 0x3d, 0x5f, 0x75, 0x75, 0x53, 0x4b, 0xdd, 0x71, - 0xc4, 0x0b, 0x93, 0x9d, 0x6e, 0xf2, 0xb5, 0x25, 0x51, 0x6d, 0x03, 0xfd, 0xd6, 0xc4, 0x0b, 0xf4, - 0x5b, 0x21, 0xdb, 0xb4, 0x7b, 0xae, 0x2b, 0x60, 0x21, 0x62, 0x9b, 0xb0, 0x53, 0x26, 0x11, 0x2f, - 0x4c, 0xcb, 0xf3, 0x21, 0xeb, 0x84, 0xc6, 0x9c, 0x1e, 0x04, 0x5a, 0x41, 0x31, 0x85, 0x78, 0x21, - 0xde, 0x8d, 0x40, 0xcf, 0x60, 0x0e, 0x8d, 0x43, 0xd3, 0x88, 0x17, 0x66, 0x22, 0xde, 0x09, 0x58, - 0xa9, 0x2b, 0x72, 0x60, 0xe0, 0xe2, 0x05, 0xd8, 0x89, 0xec, 0x71, 0xce, 0x55, 0x9b, 0x79, 0x22, - 0x95, 0x20, 0x3e, 0x42, 0xa9, 0x5e, 0x81, 0x95, 0xca, 0xa1, 0x8f, 0xa9, 0x69, 0x93, 0x0b, 0xc8, - 0xfd, 0x5b, 0xc1, 0x35, 0xcb, 0x5b, 0x3c, 0xbc, 0x10, 0x45, 0x0b, 0xc8, 0xed, 0xe0, 0x2d, 0x5f, - 0x40, 0xd2, 0x05, 0xb4, 0xf2, 0x10, 0x35, 0x52, 0x49, 0x30, 0x58, 0xd0, 0xcb, 0xf5, 0x6e, 0x95, - 0x3b, 0xf5, 0x00, 0x4c, 0x7b, 0x53, 0xe8, 0x3f, 0x2b, 0xb4, 0xca, 0xc0, 0xa6, 0x40, 0xcc, 0x7f, - 0xd3, 0x91, 0x63, 0x8a, 0x93, 0xa2, 0x06, 0xcb, 0x98, 0x62, 0xaf, 0x7a, 0xbc, 0x71, 0xac, 0xdf, - 0x1d, 0x22, 0x32, 0x43, 0x49, 0x7d, 0xc9, 0x81, 0xe9, 0x0f, 0x8d, 0x32, 0xa6, 0xe4, 0x9e, 0x24, - 0x93, 0x4f, 0x6d, 0x62, 0x51, 0xb8, 0x0e, 0x78, 0x5c, 0x74, 0x85, 0x18, 0x97, 0x96, 0xfb, 0xae, - 0x45, 0xb2, 0x83, 0x0d, 0xdf, 0x05, 0xe3, 0x36, 0xa3, 0xcb, 0x1e, 0xff, 0x3c, 0xd1, 0x3a, 0x67, - 0x89, 0x2d, 0x85, 0xd4, 0xca, 0x37, 0xb1, 0x75, 0x20, 0x03, 0x17, 0xdc, 0xf9, 0x4e, 0x23, 0x30, - 0x1e, 0x88, 0x4d, 0xa7, 0x3d, 0xb8, 0xbf, 0x29, 0xdf, 0x8a, 0x0f, 0xc0, 0x11, 0xc0, 0xdf, 0xda, - 0xd9, 0x8c, 0x73, 0xd2, 0xe7, 0x08, 0x9c, 0x8a, 0x32, 0xbe, 0x43, 0xcc, 0x43, 0xa5, 0x44, 0xe0, - 0x9f, 0x79, 0x30, 0xbc, 0x6e, 0x3a, 0x36, 0x87, 0xfd, 0x4b, 0x9f, 0xec, 0x1f, 0x25, 0xf5, 0xb7, - 0xd8, 0x7f, 0xfe, 0xe6, 0x8f, 0x5f, 0xc6, 0xbe, 0x89, 0xa5, 0xfe, 0x12, 0x13, 0x0f, 0x97, 0xfd, - 0x87, 0xd6, 0x6e, 0xcf, 0xac, 0xe2, 0x51, 0xa0, 0x7c, 0x34, 0xc4, 0xa3, 0x60, 0x45, 0x68, 0x88, - 0x47, 0x81, 0xe8, 0x6c, 0x88, 0x16, 0x31, 0xb0, 0x89, 0xa9, 0x6e, 0x8a, 0x47, 0x76, 0xe8, 0xe0, - 0x28, 0x10, 0x49, 0x0d, 0xf1, 0x28, 0x74, 0xa1, 0xfc, 0x75, 0xe0, 0xbc, 0x1d, 0xae, 0x0d, 0xf1, - 0x28, 0x98, 0xdb, 0xde, 0xb3, 0xa8, 0x69, 0x98, 0xa4, 0xa2, 0x3c, 0x11, 0xd3, 0x0d, 0x97, 0x49, - 0x00, 0xcd, 0x8a, 0xd2, 0xb1, 0xa2, 0x8c, 0xac, 0x08, 0x42, 0x58, 0xc8, 0x5e, 0xa3, 0x66, 0x43, - 0x3c, 0x6a, 0xe7, 0xaa, 0x86, 0x78, 0x14, 0x79, 0x9a, 0x71, 0x30, 0xbb, 0xbe, 0xd9, 0x84, 0xf0, - 0x02, 0x2d, 0x78, 0x03, 0xfe, 0x98, 0x03, 0xc0, 0x75, 0x38, 0xbb, 0x1e, 0xaf, 0xc6, 0xe9, 0x69, - 0xe6, 0xf3, 0x73, 0xa9, 0xc5, 0x63, 0x3c, 0x9e, 0xe3, 0xd2, 0xf0, 0x5f, 0xc1, 0xf0, 0x0d, 0x5d, - 0x3f, 0xb0, 0x0d, 0x38, 0x9d, 0xb5, 0xec, 0xa2, 0x94, 0xdd, 0x2e, 0x7b, 0x77, 0xfa, 0x45, 0x38, - 0x67, 0x19, 0x67, 0x01, 0xbe, 0x79, 0x6c, 0xac, 0x39, 0x7d, 0x51, 0x03, 0xfe, 0x0f, 0x07, 0x86, - 0xdd, 0x3b, 0xfe, 0x22, 0xa6, 0xe9, 0xf1, 0xe2, 0x93, 0x5a, 0x66, 0x52, 0xbc, 0x9d, 0x7c, 0x4e, - 0x29, 0x1c, 0x33, 0xfc, 0x9c, 0x03, 0xa3, 0x7e, 0xb2, 0x81, 0x4b, 0xc7, 0x8a, 0x12, 0xc9, 0x4b, - 0x3d, 0x25, 0x79, 0xc4, 0x24, 0x29, 0x27, 0xd3, 0xe2, 0xa1, 0xf4, 0x6c, 0x49, 0x70, 0x91, 0x64, - 0x5d, 0x69, 0x9c, 0x1c, 0x75, 0x7f, 0x59, 0xea, 0x17, 0x05, 0xfe, 0x88, 0x03, 0x89, 0x5d, 0x4c, - 0x4b, 0x55, 0x27, 0x19, 0xb7, 0x92, 0xd7, 0xb6, 0xc6, 0x02, 0xef, 0xdb, 0x53, 0xe9, 0x12, 0x53, - 0x69, 0x49, 0x7a, 0x5b, 0x3c, 0x94, 0xf0, 0xf3, 0x0a, 0xc8, 0xa5, 0xe1, 0xff, 0x73, 0x60, 0x78, - 0x83, 0xd4, 0x08, 0x25, 0x9d, 0x91, 0xd6, 0x8b, 0xd7, 0x83, 0x66, 0xfe, 0xed, 0xe2, 0x79, 0x30, - 0x05, 0x40, 0xde, 0x50, 0xae, 0x93, 0x7a, 0xde, 0xa6, 0x55, 0x38, 0x00, 0x4e, 0x81, 0xe1, 0x5b, - 0xce, 0xa7, 0x04, 0x27, 0xc1, 0xa0, 0x49, 0x70, 0x19, 0x0c, 0x3d, 0x36, 0x15, 0x4a, 0xdc, 0xe0, - 0x4b, 0x3f, 0x6f, 0xf0, 0xfd, 0x81, 0x03, 0xa3, 0x57, 0x09, 0xbd, 0x6d, 0x13, 0xb3, 0xfe, 0x6d, - 0x86, 0xdf, 0x17, 0x5c, 0x33, 0x7f, 0x37, 0xb5, 0x03, 0x16, 0xba, 0x8d, 0x15, 0x2d, 0x86, 0x7d, - 0x8e, 0x13, 0x1f, 0x71, 0xc5, 0x01, 0xa6, 0x5f, 0x16, 0x5e, 0x38, 0x4e, 0xbf, 0x4f, 0x1d, 0x06, - 0xbe, 0x96, 0x5f, 0x0c, 0x81, 0xf8, 0x55, 0x42, 0xfd, 0x2e, 0xc2, 0x65, 0x7e, 0xb9, 0xff, 0xd2, - 0xe9, 0xe1, 0x27, 0x5f, 0x1c, 0x35, 0xf5, 0xd9, 0x20, 0xd3, 0xe0, 0xaf, 0x3c, 0xfc, 0x86, 0x3f, - 0x46, 0x87, 0x56, 0x6b, 0xe2, 0x25, 0xe1, 0x6e, 0x23, 0x4e, 0x23, 0x7a, 0x16, 0xa9, 0x58, 0x3d, - 0x67, 0x94, 0x8e, 0x33, 0xfb, 0x59, 0x87, 0xe1, 0x4a, 0xf2, 0x8c, 0x29, 0xa2, 0xfb, 0x69, 0x4f, - 0xdc, 0x50, 0xed, 0xeb, 0xdd, 0xe5, 0x77, 0xe2, 0xb5, 0xbb, 0xf8, 0xae, 0x8a, 0xf4, 0x64, 0xd8, - 0x59, 0xda, 0x7a, 0xb4, 0xce, 0x3d, 0x8e, 0x7b, 0xea, 0x69, 0x3d, 0x8b, 0x6b, 0xa8, 0xf4, 0xc2, - 0x5f, 0xf2, 0x60, 0x70, 0xb3, 0x54, 0xd5, 0x61, 0xaf, 0x1f, 0x4e, 0x2c, 0xbb, 0x98, 0x75, 0x87, - 0x18, 0x3f, 0x39, 0x3c, 0x37, 0x64, 0xea, 0x4f, 0xb1, 0x66, 0xfe, 0x3f, 0x62, 0x60, 0x82, 0x94, - 0xaa, 0x3a, 0xb2, 0xdc, 0x96, 0x0b, 0x8c, 0xb2, 0x95, 0x69, 0x94, 0xe0, 0xcc, 0x1d, 0x5b, 0x55, - 0xb1, 0x59, 0xcf, 0xa1, 0x4d, 0x6f, 0x2b, 0x19, 0xdf, 0x68, 0x3f, 0x03, 0xb1, 0xdd, 0xd4, 0x06, - 0x80, 0xe1, 0x6b, 0xcb, 0xa4, 0xed, 0xf3, 0xb2, 0x7e, 0x70, 0x05, 0xf0, 0x17, 0x97, 0x56, 0xe0, - 0x1a, 0xb8, 0x24, 0x13, 0x6a, 0x9b, 0x1a, 0x29, 0xa3, 0xc7, 0x55, 0xa2, 0x21, 0x5a, 0x25, 0xc8, - 0x24, 0x96, 0x6e, 0x9b, 0x25, 0x82, 0x14, 0x0b, 0x51, 0xa2, 0x1a, 0xba, 0x89, 0x4d, 0xa5, 0x56, - 0x47, 0xb6, 0x86, 0x0f, 0xb1, 0x52, 0xc3, 0xc5, 0x1a, 0xc9, 0x7e, 0xf0, 0x2e, 0xe0, 0x57, 0x97, - 0x56, 0xe1, 0x2a, 0x48, 0x3f, 0x83, 0x40, 0x59, 0x27, 0x16, 0xd2, 0x74, 0x8a, 0xc8, 0x13, 0xc5, - 0xa2, 0x59, 0x38, 0x0c, 0x06, 0x7f, 0x10, 0xe3, 0x78, 0x76, 0xc9, 0x1e, 0x1e, 0x9f, 0x26, 0x1c, - 0xc3, 0x88, 0x47, 0xae, 0x63, 0xee, 0xcf, 0xa7, 0xe2, 0xc1, 0x82, 0xe3, 0x9c, 0xe5, 0xdc, 0x27, - 0x9b, 0xfb, 0x10, 0x76, 0x1c, 0xc1, 0x9f, 0x70, 0x60, 0x62, 0x83, 0x10, 0x83, 0xfd, 0xbe, 0xe4, - 0x6c, 0xbc, 0x9a, 0xce, 0xe6, 0x0a, 0xd3, 0xed, 0x72, 0x6a, 0xf5, 0xd8, 0x14, 0x1f, 0xfa, 0xe9, - 0x3a, 0xeb, 0x8c, 0x2b, 0xac, 0x0a, 0xe5, 0x01, 0xd8, 0xd1, 0x0b, 0x8a, 0x56, 0x56, 0xb4, 0x7d, - 0x0b, 0xce, 0x77, 0x64, 0xf0, 0x0d, 0xef, 0x57, 0xfd, 0x9e, 0xc9, 0x7d, 0x00, 0xde, 0x03, 0x23, - 0x77, 0x15, 0x95, 0xe8, 0x36, 0x85, 0x3d, 0x80, 0x7a, 0x22, 0x9f, 0x66, 0xe2, 0x9f, 0x84, 0xb3, - 0x41, 0x7b, 0x52, 0x8f, 0x58, 0x15, 0xc4, 0x37, 0x4d, 0x53, 0x37, 0x9d, 0xf2, 0xbd, 0x41, 0x28, - 0x56, 0x6a, 0x56, 0xdf, 0x0c, 0xce, 0x31, 0x06, 0xaf, 0xc3, 0x85, 0x90, 0xc3, 0x1c, 0xaa, 0x8f, - 0x15, 0x5a, 0x2d, 0x7b, 0x54, 0xff, 0x97, 0x03, 0xf0, 0x2a, 0xa1, 0xd1, 0xd9, 0xed, 0xf8, 0x1e, - 0x21, 0x82, 0xd1, 0x53, 0x8c, 0xb7, 0x98, 0x18, 0x67, 0x52, 0xf3, 0x41, 0x31, 0x1c, 0x09, 0x8a, - 0x7a, 0xb9, 0x2e, 0x1e, 0x39, 0x1d, 0x01, 0x9b, 0xf1, 0xe0, 0x7f, 0x71, 0x60, 0x66, 0x57, 0xb7, - 0xa8, 0x43, 0x91, 0xa1, 0x32, 0x41, 0x9e, 0x6f, 0x4c, 0xec, 0xc9, 0x5d, 0x64, 0xdc, 0xcf, 0xa7, - 0xce, 0x05, 0xb9, 0x1b, 0xba, 0x45, 0x1d, 0x09, 0xd8, 0x2f, 0x86, 0xae, 0x18, 0xad, 0xa0, 0xf8, - 0x05, 0x07, 0x66, 0xd7, 0xab, 0xa4, 0x74, 0xe0, 0x17, 0xe7, 0x5d, 0x6c, 0x62, 0xd5, 0x7a, 0x45, - 0x31, 0x7d, 0x95, 0x89, 0x9b, 0x87, 0x57, 0x8e, 0x8b, 0x69, 0x83, 0x49, 0x25, 0xee, 0x13, 0xda, - 0x35, 0xbc, 0xe1, 0xaf, 0x39, 0x70, 0x82, 0xa9, 0xe1, 0x58, 0xf4, 0xd5, 0xeb, 0x71, 0x9b, 0xe9, - 0x71, 0x3d, 0x95, 0x7b, 0x4e, 0x3d, 0x1c, 0x8f, 0x84, 0x87, 0xbe, 0x46, 0x2e, 0xfc, 0x3f, 0x4e, - 0x92, 0x3f, 0xe3, 0x9a, 0xf9, 0xaf, 0x39, 0x58, 0xe9, 0x31, 0x4e, 0x07, 0x1f, 0xf1, 0x51, 0x26, - 0x83, 0x1e, 0x57, 0x95, 0x52, 0x15, 0x59, 0x55, 0xdd, 0xae, 0x95, 0x59, 0x5e, 0x2c, 0x12, 0x64, - 0x5b, 0xa4, 0x8c, 0x14, 0x0d, 0x19, 0x35, 0x5c, 0x22, 0x48, 0xaf, 0xb0, 0x0c, 0x5a, 0xd6, 0x4b, - 0xb6, 0x4a, 0x34, 0x77, 0x48, 0x43, 0x25, 0x5d, 0x75, 0x16, 0x67, 0x92, 0xb7, 0xc1, 0x62, 0xb7, - 0x96, 0xcd, 0xc9, 0x6f, 0xfe, 0x00, 0xdf, 0xef, 0x23, 0xf0, 0x23, 0x70, 0xa2, 0x84, 0x55, 0x52, - 0x5b, 0xc7, 0x16, 0xf1, 0x68, 0x38, 0xd3, 0x26, 0x94, 0xc1, 0x90, 0xfb, 0x7b, 0x74, 0xbf, 0x37, - 0x7c, 0x9e, 0x59, 0x79, 0x16, 0xce, 0x84, 0x6e, 0xb8, 0x73, 0x24, 0x7d, 0x02, 0x16, 0xf2, 0x9a, - 0x4e, 0xab, 0xc4, 0xf4, 0x38, 0x39, 0xb7, 0x2a, 0x90, 0xed, 0xde, 0x0f, 0xe5, 0xbe, 0x7e, 0x19, - 0x0f, 0x14, 0xbe, 0x1e, 0x69, 0xe6, 0xbf, 0x1a, 0x81, 0xbf, 0xe5, 0xc0, 0x6c, 0x1e, 0x15, 0xdc, - 0x67, 0xfb, 0x80, 0xff, 0x3f, 0x02, 0x27, 0xf6, 0xe5, 0xdd, 0xf5, 0xcc, 0x55, 0x57, 0x75, 0x64, - 0x98, 0xfa, 0x23, 0x52, 0xa2, 0xfd, 0x9a, 0x2c, 0x19, 0xd7, 0x74, 0x8d, 0xfc, 0x93, 0xa7, 0x9a, - 0x03, 0x9d, 0xfe, 0x04, 0x9c, 0x28, 0xdc, 0xd9, 0x40, 0x2b, 0x99, 0xf5, 0x1a, 0xb6, 0x2d, 0x82, - 0x6e, 0x28, 0x25, 0xa2, 0x59, 0x04, 0x6e, 0xf5, 0x47, 0x59, 0x2c, 0xd6, 0xf4, 0xa2, 0xa8, 0x62, - 0x8b, 0x12, 0x53, 0xbc, 0xb1, 0xbd, 0xbe, 0xb9, 0x73, 0x67, 0x33, 0x4b, 0x9f, 0x50, 0x89, 0x5f, - 0xce, 0x2e, 0xa5, 0x79, 0x2e, 0x36, 0x28, 0xc5, 0xb1, 0xe1, 0xfe, 0xd8, 0xa0, 0xe8, 0x9a, 0xf8, - 0xc8, 0xd2, 0x35, 0x69, 0x2e, 0xb8, 0xf3, 0x24, 0x53, 0xd1, 0xf5, 0x8c, 0xaa, 0xa8, 0x24, 0xd7, - 0x01, 0x99, 0xeb, 0x01, 0x29, 0xef, 0x3a, 0xa5, 0x7c, 0x05, 0x6e, 0x83, 0xab, 0x9d, 0xa5, 0xdc, - 0xb6, 0x88, 0xd9, 0x2e, 0xe3, 0x55, 0x7c, 0x48, 0x90, 0x41, 0x4c, 0x55, 0xb1, 0x2c, 0x27, 0x30, - 0xa9, 0x8e, 0x70, 0xa9, 0x44, 0x2c, 0x2b, 0x54, 0xf6, 0xb3, 0xf2, 0x4b, 0x34, 0x07, 0x23, 0xf2, - 0x35, 0xc0, 0xaf, 0x2e, 0xaf, 0xc1, 0x3c, 0x98, 0xdc, 0x7e, 0x4b, 0x45, 0x18, 0x51, 0x82, 0x0d, - 0x9d, 0x66, 0xe1, 0x12, 0xc8, 0x26, 0xfb, 0x7a, 0x97, 0xbd, 0xff, 0x7f, 0x31, 0x30, 0x0d, 0xc6, - 0x0a, 0xd8, 0x52, 0x4a, 0x6c, 0x30, 0x8b, 0x8d, 0x72, 0xe0, 0xb5, 0xd0, 0xa8, 0x36, 0x3d, 0x1a, - 0x4b, 0x8e, 0x7d, 0x94, 0xc9, 0xef, 0x6e, 0x67, 0xae, 0x93, 0x3a, 0x8a, 0x81, 0xdf, 0x71, 0xad, - 0xd1, 0xed, 0x57, 0xdc, 0x28, 0x2f, 0x0c, 0x4a, 0x67, 0x7d, 0x1f, 0x06, 0x1c, 0x2e, 0xea, 0xd8, - 0xa6, 0x55, 0xd1, 0xf9, 0xa3, 0x9b, 0xca, 0xbf, 0x90, 0xdc, 0x62, 0x6f, 0x20, 0xaa, 0x1f, 0x10, - 0xad, 0xf0, 0xef, 0x20, 0xe9, 0x4e, 0x82, 0x10, 0x5e, 0x35, 0xb1, 0x46, 0x2d, 0xe4, 0x2c, 0x3c, - 0xeb, 0x81, 0x05, 0x6f, 0x3e, 0x84, 0xb3, 0xde, 0x21, 0x5b, 0xf9, 0xa7, 0xeb, 0x60, 0x08, 0x97, - 0x55, 0x45, 0x83, 0xb9, 0x10, 0xaa, 0x56, 0x0e, 0x81, 0x31, 0x67, 0x38, 0x60, 0x8a, 0x45, 0x9d, - 0x16, 0xe1, 0x90, 0x20, 0x45, 0xab, 0xe8, 0xa6, 0xca, 0xfc, 0x5d, 0x5c, 0x04, 0x93, 0x41, 0x53, - 0x0c, 0x44, 0x67, 0xd6, 0xe2, 0xf9, 0x9e, 0x53, 0x6b, 0x14, 0xd4, 0xdc, 0x06, 0xa7, 0x6e, 0xb6, - 0xb3, 0x4f, 0xf0, 0x4e, 0xf5, 0x7b, 0x97, 0xee, 0x8f, 0xb5, 0x3c, 0x57, 0x1c, 0x66, 0xf7, 0x79, - 0xe5, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xed, 0x21, 0x52, 0xb7, 0x7b, 0x29, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71) +} + +var fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71 = []byte{ + // 3345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x73, 0x1b, 0x47, + 0x7a, 0x1c, 0x0c, 0x9f, 0xcd, 0x17, 0xd8, 0x94, 0x28, 0x10, 0xa2, 0xcd, 0x16, 0x24, 0xaf, 0xc7, + 0xb0, 0x80, 0x21, 0x87, 0xb4, 0x4d, 0xc1, 0xb5, 0xab, 0x0c, 0xf8, 0x90, 0x69, 0xd9, 0x14, 0x3d, + 0x92, 0x1d, 0x97, 0xd6, 0x5a, 0x56, 0x03, 0x68, 0x10, 0x23, 0x62, 0x1e, 0x3b, 0xd3, 0x43, 0x09, + 0x61, 0x90, 0x6c, 0x1e, 0x95, 0x54, 0x76, 0x0f, 0xa9, 0xc2, 0x26, 0x87, 0x3c, 0x2a, 0xbf, 0x60, + 0xaf, 0x39, 0x6d, 0x55, 0x92, 0x43, 0x72, 0xca, 0x21, 0x29, 0x27, 0x95, 0x5b, 0x4e, 0xc9, 0x21, + 0xa7, 0x5c, 0x52, 0xb5, 0x55, 0x39, 0x24, 0xb5, 0xd5, 0x3d, 0x33, 0xc0, 0xcc, 0x00, 0x10, 0x05, + 0x69, 0x4b, 0x17, 0x69, 0xba, 0xfb, 0x7b, 0x7f, 0x5f, 0x7f, 0x8f, 0x06, 0x81, 0x42, 0x9e, 0x63, + 0xc3, 0x6e, 0x12, 0x57, 0xb6, 0x1d, 0x8b, 0x5a, 0x72, 0xb0, 0xb4, 0x2b, 0x32, 0x3e, 0xa9, 0xe8, + 0xf4, 0xc4, 0xaa, 0x9f, 0x90, 0x73, 0xe2, 0xb4, 0x68, 0x43, 0x37, 0x4f, 0x8b, 0x1c, 0x06, 0xae, + 0x9f, 0x3a, 0x76, 0xb5, 0x78, 0x8a, 0x29, 0x79, 0x86, 0x5b, 0xc5, 0x90, 0x40, 0xb1, 0x8b, 0x9a, + 0x5d, 0x3b, 0xb5, 0xac, 0xd3, 0x26, 0x91, 0xb1, 0xad, 0xcb, 0xd8, 0x34, 0x2d, 0x8a, 0xa9, 0x6e, + 0x99, 0xae, 0x8f, 0x9e, 0x45, 0xc1, 0x29, 0x5f, 0x55, 0xbc, 0xba, 0x5c, 0xd7, 0x49, 0xb3, 0x76, + 0x62, 0x60, 0xf7, 0x2c, 0x80, 0xb8, 0x9e, 0x84, 0x20, 0x86, 0x4d, 0x5b, 0xc1, 0xe1, 0xdb, 0xc9, + 0xc3, 0x9a, 0xe7, 0x70, 0xfa, 0xc1, 0xf9, 0xbb, 0x09, 0x8d, 0x6c, 0x4c, 0x1b, 0xc4, 0xf4, 0x0c, + 0xfe, 0x71, 0xc2, 0xbe, 0x42, 0x39, 0x12, 0x80, 0xae, 0x57, 0x91, 0x0d, 0xe2, 0xba, 0xf8, 0x94, + 0x04, 0x10, 0x37, 0xfa, 0x21, 0x94, 0x04, 0xc8, 0x7a, 0x52, 0x1a, 0xaa, 0x1b, 0xc4, 0xa5, 0xd8, + 0xb0, 0x03, 0x80, 0xdb, 0xfc, 0xbf, 0x6a, 0xe1, 0x94, 0x98, 0x05, 0xf7, 0x19, 0x3e, 0x3d, 0x25, + 0x8e, 0x6c, 0xd9, 0xdc, 0x1e, 0xfd, 0xb6, 0xc9, 0xfd, 0xf3, 0x75, 0x90, 0x56, 0xcb, 0x3a, 0x7d, + 0x50, 0xdf, 0xef, 0x5a, 0x1d, 0x3e, 0x01, 0xf3, 0xae, 0x6e, 0x9e, 0x36, 0xc9, 0x89, 0x49, 0x5c, + 0x4a, 0x6a, 0x99, 0x55, 0x24, 0x48, 0xb3, 0xca, 0x4e, 0xf1, 0x12, 0x3f, 0x14, 0x93, 0x94, 0x8a, + 0x47, 0x1c, 0x5f, 0x9b, 0xf3, 0xc9, 0xf9, 0x2b, 0xd8, 0x00, 0xe3, 0x9e, 0xa7, 0xd7, 0x32, 0x02, + 0x12, 0xa4, 0x99, 0xf2, 0xa3, 0x8e, 0xfa, 0xc5, 0x8f, 0x04, 0xe1, 0xc7, 0xc2, 0xfd, 0xef, 0xe3, + 0x42, 0x5d, 0x2d, 0x1c, 0x6c, 0x14, 0xee, 0x3c, 0xb9, 0xd8, 0x69, 0x17, 0xa2, 0xcb, 0xed, 0x51, + 0x96, 0x9b, 0x4a, 0x5b, 0xe3, 0x1c, 0xe0, 0x31, 0x98, 0x0c, 0x34, 0x48, 0x21, 0xf1, 0xb5, 0x34, + 0x08, 0xe8, 0xc0, 0x4f, 0xc1, 0x6c, 0xbd, 0x69, 0x61, 0x7a, 0x72, 0x8e, 0x9b, 0x1e, 0xc9, 0x88, + 0x48, 0x90, 0x52, 0xe5, 0xf7, 0x3a, 0xea, 0x77, 0x94, 0xa5, 0x03, 0xb6, 0x8f, 0xf8, 0x3e, 0xe2, + 0x11, 0x56, 0x12, 0x37, 0x8a, 0xca, 0xb7, 0x42, 0x14, 0x41, 0x03, 0x7c, 0xf1, 0x15, 0xfb, 0x86, + 0x37, 0xc0, 0x5c, 0xcd, 0xf2, 0x2a, 0x4d, 0x12, 0x10, 0x1b, 0x47, 0x82, 0x24, 0x68, 0xb3, 0xfe, + 0x9e, 0x0f, 0xb2, 0x0e, 0x66, 0x75, 0x93, 0x7e, 0xb8, 0x1d, 0x40, 0x4c, 0x20, 0x41, 0x12, 0x35, + 0xc0, 0xb7, 0xba, 0x34, 0xbc, 0x28, 0xc4, 0x24, 0x12, 0xa4, 0x71, 0x6d, 0xd6, 0x8b, 0x80, 0xf8, + 0x34, 0xb6, 0x94, 0x00, 0x62, 0x0a, 0x09, 0xd2, 0x04, 0xa7, 0xb1, 0xa5, 0xf8, 0x00, 0x37, 0xc1, + 0x7c, 0x5d, 0x7f, 0x4e, 0x6a, 0x5d, 0x22, 0xd3, 0x48, 0x90, 0x26, 0xb5, 0xb9, 0x60, 0x33, 0x0e, + 0xd4, 0xa5, 0x33, 0x83, 0x04, 0x69, 0x2a, 0x00, 0x0a, 0x29, 0xbd, 0x05, 0x40, 0xc5, 0xb2, 0x9a, + 0x01, 0x04, 0x40, 0x82, 0x34, 0xad, 0xcd, 0xb0, 0x9d, 0xae, 0xb0, 0x2e, 0x75, 0x74, 0xf3, 0x34, + 0x00, 0x98, 0x65, 0x01, 0xa0, 0xcd, 0xfa, 0x7b, 0x5d, 0x61, 0x2b, 0x2d, 0x4a, 0xdc, 0x00, 0xe2, + 0x2d, 0x24, 0x48, 0x73, 0x1a, 0xe0, 0x5b, 0x31, 0x85, 0xbb, 0x62, 0xcc, 0x23, 0x41, 0x9a, 0xf7, + 0x15, 0x0e, 0xa5, 0xb8, 0x0f, 0x00, 0xbb, 0x75, 0x01, 0xc0, 0x02, 0x12, 0xa4, 0x05, 0xe5, 0xf6, + 0xa5, 0x9e, 0x3f, 0xf2, 0x0c, 0xe2, 0xe8, 0xd5, 0x7d, 0xd3, 0x33, 0xb4, 0x19, 0x86, 0xef, 0x13, + 0x3b, 0x06, 0x8b, 0xdd, 0x7b, 0x1c, 0x50, 0x7c, 0x9b, 0x53, 0x94, 0x86, 0x50, 0x0c, 0xaf, 0x7f, + 0xf1, 0x18, 0xd3, 0x06, 0xa7, 0x36, 0x6f, 0x07, 0x5f, 0x3e, 0x45, 0x17, 0xac, 0xf8, 0xc1, 0x74, + 0x92, 0x24, 0xbc, 0xce, 0x09, 0x7f, 0xef, 0x32, 0xc2, 0x9f, 0xfb, 0x09, 0x21, 0xa4, 0x1f, 0x84, + 0x68, 0x97, 0xdd, 0xb2, 0x19, 0x5b, 0xfb, 0x4c, 0xdf, 0x01, 0x0b, 0x6e, 0xdc, 0x7f, 0x8b, 0x48, + 0x90, 0x16, 0xb5, 0x79, 0x37, 0xe6, 0xc0, 0x2e, 0x58, 0x37, 0x16, 0xd2, 0x48, 0x90, 0xd2, 0x21, + 0x58, 0x24, 0xea, 0xdc, 0xa8, 0x13, 0x96, 0x90, 0x20, 0x2d, 0x69, 0xb3, 0x6e, 0xc4, 0x09, 0x01, + 0x48, 0x97, 0x0e, 0x44, 0x82, 0x04, 0x7d, 0x90, 0x90, 0x8a, 0x02, 0xae, 0x3a, 0xc4, 0x26, 0x98, + 0x99, 0x22, 0x16, 0x17, 0xcb, 0x48, 0x94, 0x66, 0xb4, 0xe5, 0xf0, 0xf0, 0x61, 0x24, 0x3e, 0xee, + 0x80, 0x59, 0xcb, 0x24, 0xac, 0x48, 0xb0, 0x0c, 0x9d, 0xb9, 0xc2, 0x13, 0xd3, 0x4a, 0xd1, 0x4f, + 0x8a, 0xc5, 0x30, 0x29, 0x16, 0xf7, 0xd9, 0xe9, 0x27, 0x63, 0x1a, 0xe0, 0xc0, 0x7c, 0x05, 0x6f, + 0x82, 0x39, 0x1f, 0xd5, 0xe7, 0x95, 0xb9, 0xca, 0xa2, 0xef, 0x93, 0x31, 0xcd, 0x27, 0xe8, 0x33, + 0x81, 0xdf, 0x80, 0x19, 0x03, 0xdb, 0x81, 0x1c, 0x2b, 0x3c, 0x69, 0xdc, 0x1d, 0x3d, 0x69, 0x7c, + 0x8e, 0x6d, 0x2e, 0xee, 0xbe, 0x49, 0x9d, 0x96, 0x36, 0x6d, 0x04, 0x4b, 0xf8, 0x1c, 0x2c, 0x1b, + 0xd8, 0xb6, 0x93, 0xfa, 0x5e, 0xe3, 0x7c, 0x3e, 0x79, 0x25, 0x3e, 0x76, 0xcc, 0x3e, 0x3e, 0xc3, + 0x25, 0x23, 0xb9, 0x1f, 0xe1, 0x1c, 0xc4, 0x9e, 0xcf, 0x39, 0xf3, 0x7a, 0x9c, 0xfd, 0xc8, 0xeb, + 0xe7, 0x1c, 0xd9, 0x87, 0x25, 0x90, 0x31, 0x2d, 0x73, 0xd7, 0x32, 0xcf, 0x89, 0xc9, 0x2a, 0x0f, + 0x6e, 0x1e, 0x61, 0xc3, 0x4f, 0x6f, 0x99, 0x2c, 0x4f, 0x00, 0x43, 0xcf, 0xe1, 0x2e, 0x58, 0xec, + 0x96, 0xb7, 0x40, 0xe2, 0xeb, 0xdc, 0xe3, 0xd9, 0x3e, 0x8f, 0x3f, 0x0a, 0xe1, 0xb4, 0x85, 0x2e, + 0x8a, 0x4f, 0xe4, 0x1b, 0xd0, 0x8d, 0xa4, 0xe8, 0x65, 0x5b, 0x43, 0xe2, 0xc8, 0x79, 0x61, 0x29, + 0x24, 0xd4, 0xbb, 0x58, 0x3f, 0x13, 0x40, 0x26, 0x4e, 0xbe, 0x57, 0x64, 0x33, 0x68, 0x74, 0x1e, + 0xe5, 0xbd, 0x8e, 0xaa, 0xe6, 0xaf, 0x6b, 0x01, 0x49, 0x64, 0xfa, 0x47, 0x88, 0x91, 0x46, 0x54, + 0xa7, 0x4d, 0xa2, 0xe4, 0x06, 0x1f, 0xd6, 0x88, 0x5b, 0x75, 0x74, 0x5e, 0xe9, 0x8b, 0xda, 0x4a, + 0x54, 0x52, 0xb5, 0x2b, 0x11, 0xfc, 0x13, 0x01, 0x5c, 0xed, 0x19, 0x21, 0x2a, 0xeb, 0x8d, 0xd1, + 0xf3, 0x64, 0x59, 0xe9, 0xa8, 0x72, 0x1e, 0x1e, 0xf5, 0x8b, 0xb8, 0x7a, 0x34, 0x54, 0xb2, 0xe5, + 0x6e, 0x6e, 0x8d, 0x88, 0x75, 0x0e, 0xb2, 0xc9, 0x54, 0x10, 0x11, 0x2d, 0xc7, 0xf2, 0x41, 0x79, + 0xa7, 0xa3, 0x7e, 0x90, 0xbf, 0xda, 0xd5, 0xdd, 0x07, 0x0b, 0xf8, 0xad, 0x25, 0xb7, 0x63, 0x2c, + 0x33, 0xf1, 0x4c, 0x12, 0xe1, 0xfb, 0x37, 0x42, 0x84, 0x71, 0x70, 0x33, 0x22, 0x8c, 0x6f, 0xbe, + 0x5e, 0xd7, 0x50, 0x3e, 0xe8, 0xa8, 0xbb, 0xf9, 0x9e, 0x6c, 0x3e, 0x03, 0x64, 0x55, 0x9e, 0x92, + 0x2a, 0x0d, 0x24, 0xbf, 0x39, 0xe4, 0x74, 0xb0, 0x02, 0x3e, 0xdd, 0x88, 0x02, 0x7f, 0x21, 0x80, + 0xa5, 0x7e, 0xb9, 0x6f, 0xbd, 0x5e, 0xbf, 0x56, 0xde, 0xee, 0xa8, 0x9b, 0xf9, 0xe5, 0xa3, 0x01, + 0xe2, 0x66, 0x8f, 0x86, 0x4b, 0x99, 0x36, 0x93, 0xd2, 0x7d, 0x04, 0x96, 0xfd, 0x1a, 0x60, 0x9d, + 0x13, 0xc7, 0xd1, 0x6b, 0xe4, 0x84, 0xb6, 0x6c, 0x92, 0x79, 0x87, 0xb5, 0x31, 0xe5, 0xa9, 0x8e, + 0x3a, 0xfe, 0xe7, 0x29, 0x41, 0xd4, 0x96, 0x38, 0xcc, 0x83, 0x00, 0xe4, 0x51, 0xcb, 0x26, 0xd9, + 0x7f, 0x17, 0xc0, 0x64, 0xd0, 0x2d, 0x42, 0x30, 0x6e, 0x62, 0x83, 0xf8, 0xdd, 0xa2, 0xc6, 0xbf, + 0xe1, 0x0a, 0x98, 0xc4, 0x86, 0xe5, 0x99, 0x34, 0x93, 0xe2, 0xe5, 0x3f, 0x58, 0x41, 0x03, 0xa4, + 0xac, 0x33, 0xde, 0x94, 0x2d, 0x28, 0xea, 0xab, 0x6a, 0x5f, 0xdc, 0x23, 0xc4, 0xe6, 0xe1, 0x9d, + 0xed, 0xa8, 0xd7, 0x94, 0xab, 0xe1, 0x32, 0xae, 0x6c, 0xca, 0x3a, 0xcb, 0xad, 0x83, 0xe9, 0xf0, + 0x10, 0xce, 0x80, 0x89, 0x03, 0xf5, 0xb3, 0x87, 0xfb, 0xe9, 0x31, 0x38, 0x0d, 0xc6, 0x1f, 0x69, + 0x5f, 0xee, 0xa7, 0x85, 0xd2, 0xb5, 0x8e, 0x7a, 0x45, 0x81, 0x30, 0x7d, 0x81, 0x72, 0xd6, 0x59, + 0xae, 0x84, 0x72, 0x6c, 0x3f, 0x87, 0xda, 0x59, 0x1d, 0xcc, 0xc7, 0x6a, 0x04, 0x4c, 0x03, 0xf1, + 0x8c, 0xb4, 0x02, 0x25, 0xd9, 0x27, 0x2c, 0x83, 0x09, 0x3f, 0x51, 0xa5, 0x5e, 0xa1, 0x81, 0xf1, + 0x51, 0x4b, 0xa9, 0x1d, 0x21, 0xbb, 0x07, 0x56, 0x06, 0x97, 0x89, 0x01, 0x3c, 0xaf, 0x44, 0x79, + 0xce, 0x44, 0xa9, 0xfc, 0x56, 0x48, 0x25, 0x99, 0xf2, 0x07, 0x50, 0x39, 0x8a, 0x52, 0x79, 0x9d, + 0xa6, 0xbb, 0xc7, 0xbf, 0xf4, 0x67, 0xa9, 0x8e, 0xfa, 0xa7, 0x29, 0xf0, 0xfb, 0x42, 0x7e, 0x59, + 0x45, 0x15, 0x9d, 0x22, 0xab, 0x8e, 0x7a, 0x73, 0xa2, 0x72, 0x78, 0x68, 0xd2, 0xb0, 0x7c, 0xb4, + 0x50, 0xd5, 0x32, 0xec, 0xa6, 0x5e, 0xe5, 0xb7, 0x2a, 0x98, 0x9e, 0x10, 0x0b, 0x3c, 0x44, 0x2d, + 0x54, 0x65, 0xa1, 0x88, 0x0c, 0x6c, 0xb6, 0x50, 0x9d, 0x60, 0xea, 0x39, 0xc4, 0x65, 0xb4, 0x8e, + 0xc3, 0x3a, 0xf2, 0xad, 0xc0, 0x47, 0x87, 0x6f, 0x85, 0x68, 0xe3, 0xfd, 0xad, 0x10, 0xeb, 0xd4, + 0xf3, 0x5f, 0x81, 0x5b, 0x07, 0xba, 0x59, 0x43, 0x96, 0x47, 0x91, 0x61, 0x39, 0x04, 0xe1, 0x0a, + 0xfb, 0xec, 0x1b, 0xa4, 0x8a, 0x0d, 0x4a, 0x6d, 0xb7, 0x24, 0xcb, 0xa7, 0x3a, 0x6d, 0x78, 0x95, + 0x62, 0xd5, 0x32, 0x64, 0x66, 0x8c, 0x02, 0xa9, 0x5a, 0x6e, 0xcb, 0xa5, 0x24, 0x58, 0x06, 0xb6, + 0x51, 0xb6, 0xa1, 0x72, 0x81, 0x72, 0x8c, 0x3f, 0x0b, 0x96, 0x8d, 0x6a, 0x7d, 0xeb, 0xc3, 0x4d, + 0xb2, 0x59, 0xd8, 0xae, 0x6c, 0x6f, 0x17, 0xb6, 0x77, 0xb6, 0x6a, 0x05, 0xbc, 0xf9, 0xc1, 0x9d, + 0xc2, 0x07, 0xdb, 0x35, 0x5c, 0xa9, 0xd5, 0x3f, 0x22, 0x3b, 0x9b, 0xdb, 0x39, 0xd4, 0x2e, 0xcf, + 0x87, 0x3d, 0x11, 0x17, 0x2e, 0xf7, 0xff, 0xd3, 0x20, 0x93, 0x94, 0x24, 0x4c, 0x32, 0xf0, 0x0e, + 0x58, 0xe5, 0x5d, 0x67, 0x37, 0xe9, 0x45, 0xa7, 0x19, 0x01, 0x89, 0x52, 0x4a, 0x5b, 0x61, 0x00, + 0x21, 0xc2, 0x41, 0x6f, 0x5c, 0xf9, 0x18, 0x64, 0xe3, 0xa8, 0xb1, 0xe1, 0x85, 0x0d, 0x58, 0x82, + 0x76, 0x2d, 0x8a, 0xbb, 0x17, 0x19, 0x64, 0xfa, 0xf8, 0x46, 0x7b, 0x43, 0x11, 0x89, 0x92, 0x18, + 0xe7, 0x7b, 0xd8, 0x6b, 0x13, 0xfb, 0xf8, 0xc6, 0x06, 0x9e, 0x71, 0x24, 0x4a, 0xe3, 0x71, 0xbe, + 0x5f, 0x46, 0x7a, 0xcc, 0x41, 0x7c, 0xbb, 0x6d, 0xeb, 0x04, 0x12, 0xa5, 0x89, 0x3e, 0xbe, 0x61, + 0x07, 0xfb, 0x5d, 0x70, 0x3d, 0x61, 0xaa, 0x58, 0x63, 0x3c, 0x89, 0x44, 0x69, 0x52, 0xcb, 0xc4, + 0x8c, 0x15, 0xed, 0x91, 0x07, 0xa3, 0x47, 0xc6, 0x30, 0x51, 0x9a, 0x1a, 0x80, 0x1e, 0x72, 0xff, + 0x08, 0x64, 0xe2, 0xe8, 0x91, 0xc1, 0x6a, 0x1a, 0x89, 0xd2, 0xb4, 0x76, 0x35, 0x8a, 0x5b, 0xee, + 0x0e, 0x59, 0x7d, 0xe6, 0x8a, 0xb5, 0x9a, 0x33, 0xbc, 0xb5, 0x8e, 0x99, 0x2b, 0xde, 0x5e, 0x27, + 0xcc, 0x15, 0x1d, 0xc6, 0x00, 0x12, 0xa5, 0xb9, 0xb8, 0xb9, 0xca, 0xbd, 0xc1, 0x6c, 0xa0, 0x9b, + 0xba, 0xea, 0xce, 0x22, 0x51, 0x9a, 0xef, 0x77, 0x53, 0xa8, 0x2d, 0x49, 0x6a, 0x1b, 0x69, 0xd4, + 0xe6, 0x5e, 0xa1, 0x51, 0x8b, 0xd9, 0xa6, 0xd7, 0xac, 0xdd, 0x05, 0x6b, 0x09, 0xdb, 0xc4, 0x9d, + 0x32, 0x8f, 0x44, 0x69, 0x51, 0x5b, 0x8d, 0x59, 0x27, 0x36, 0x1f, 0x0d, 0x21, 0xd0, 0x0d, 0x8a, + 0x05, 0x24, 0x4a, 0xe9, 0x41, 0x04, 0x86, 0x06, 0x73, 0x6c, 0x8e, 0x5a, 0x44, 0xa2, 0xb4, 0x94, + 0xf0, 0x4e, 0xc4, 0x4a, 0x03, 0x91, 0x23, 0x93, 0x9a, 0x28, 0xc1, 0x7e, 0xe4, 0x80, 0x73, 0xa9, + 0xd1, 0x51, 0x89, 0x52, 0x85, 0xf8, 0x02, 0xe5, 0x86, 0x05, 0x56, 0xae, 0x84, 0xbe, 0x4f, 0x1d, + 0x8f, 0xdc, 0x46, 0xfe, 0xbf, 0x75, 0xdc, 0x74, 0x83, 0xc5, 0x93, 0xdb, 0x49, 0xb4, 0x88, 0xdc, + 0x0c, 0x6f, 0xf3, 0x36, 0x52, 0x6e, 0xa3, 0xad, 0x27, 0xa8, 0x9d, 0xcb, 0x82, 0xf1, 0xb2, 0x55, + 0x6b, 0x0d, 0xaa, 0xdc, 0xb9, 0x6f, 0xc0, 0x62, 0x30, 0xbe, 0xfe, 0xba, 0x4e, 0x1b, 0x1c, 0x6c, + 0x01, 0xa4, 0xc2, 0xc7, 0x20, 0x2d, 0xa5, 0xb3, 0x14, 0x35, 0x5e, 0xc3, 0x14, 0x07, 0xd5, 0xe3, + 0x9d, 0x4b, 0xfd, 0xce, 0x88, 0x68, 0x1c, 0x25, 0xf7, 0x53, 0x01, 0x2c, 0x7e, 0x69, 0xd7, 0x30, + 0x25, 0x5f, 0x29, 0x1a, 0xf9, 0xa1, 0x47, 0x5c, 0x0a, 0x77, 0x81, 0x88, 0x2b, 0xbe, 0x10, 0xb3, + 0xca, 0xe6, 0xc8, 0xb5, 0x48, 0x63, 0xd8, 0xf0, 0x63, 0x30, 0xeb, 0x71, 0xba, 0xfc, 0xd5, 0x30, + 0x10, 0xad, 0x7f, 0x08, 0x39, 0xd0, 0x49, 0xb3, 0xf6, 0x39, 0x76, 0xcf, 0x34, 0xe0, 0x83, 0xb3, + 0xef, 0x3c, 0x02, 0xb3, 0x91, 0xd8, 0x64, 0xed, 0xc1, 0xe3, 0x7d, 0xed, 0x41, 0x7a, 0x0c, 0x4e, + 0x01, 0xf1, 0xc1, 0xd1, 0x7e, 0x5a, 0x50, 0x7e, 0x8c, 0xc0, 0xb5, 0x24, 0xe3, 0x87, 0xc4, 0x39, + 0xd7, 0xab, 0x04, 0xfe, 0xb7, 0x08, 0x26, 0x77, 0x1d, 0x66, 0x73, 0x38, 0xba, 0xf4, 0xd9, 0xd1, + 0x51, 0x72, 0xff, 0x97, 0xfa, 0xdd, 0x7f, 0xf9, 0xcf, 0x9f, 0xa6, 0x7e, 0x91, 0xca, 0xfd, 0x4f, + 0x4a, 0x3e, 0xdf, 0x0c, 0x5f, 0x68, 0x07, 0xbd, 0xcf, 0xca, 0x17, 0x91, 0xf2, 0xd1, 0x96, 0x2f, + 0xa2, 0x15, 0xa1, 0x2d, 0x5f, 0x44, 0xa2, 0xb3, 0x2d, 0xbb, 0xc4, 0xc6, 0x0e, 0xa6, 0x96, 0x23, + 0x5f, 0x78, 0xb1, 0x83, 0x8b, 0x48, 0x24, 0xb5, 0xe5, 0x8b, 0xd8, 0x85, 0x0a, 0xd7, 0x91, 0xf3, + 0x5e, 0xb8, 0xb6, 0xe5, 0x8b, 0x68, 0x6e, 0xfb, 0xae, 0x4b, 0x1d, 0xdb, 0x21, 0x75, 0xfd, 0xb9, + 0x9c, 0x6f, 0xfb, 0x4c, 0x22, 0x68, 0x6e, 0x92, 0x8e, 0x9b, 0x64, 0xe4, 0x26, 0x10, 0xe2, 0x42, + 0x0e, 0x9b, 0x51, 0xdb, 0xf2, 0x45, 0x2f, 0x57, 0xb5, 0xe5, 0x8b, 0xc4, 0x9b, 0x0e, 0xc3, 0x1c, + 0xf8, 0xd8, 0x13, 0xc3, 0x8b, 0xf4, 0xee, 0x6d, 0xf8, 0x57, 0x02, 0x00, 0xbe, 0xc3, 0xf9, 0xf5, + 0x78, 0x33, 0x4e, 0xcf, 0x73, 0x9f, 0xdf, 0xca, 0xad, 0x5f, 0xe2, 0xf1, 0x92, 0x90, 0x87, 0xbf, + 0x09, 0x26, 0x3f, 0xb3, 0xac, 0x33, 0xcf, 0x86, 0x8b, 0x45, 0xd7, 0xab, 0x28, 0xc5, 0xc3, 0x5a, + 0x70, 0xa7, 0x5f, 0x85, 0x73, 0x91, 0x73, 0x96, 0xe0, 0x77, 0x2e, 0x8d, 0x35, 0xd6, 0x17, 0xb5, + 0xe1, 0x1f, 0x08, 0x60, 0xd2, 0xbf, 0xe3, 0xaf, 0x62, 0x9a, 0x21, 0x4f, 0x45, 0xb9, 0x4d, 0x2e, + 0xc5, 0xfb, 0xd9, 0x97, 0x94, 0x82, 0x99, 0xe1, 0xef, 0x04, 0x30, 0x1d, 0x26, 0x1b, 0xb8, 0x71, + 0xa9, 0x28, 0x89, 0xbc, 0x34, 0x54, 0x92, 0xa7, 0x5c, 0x92, 0x5a, 0x36, 0x2f, 0x9f, 0x2b, 0x2f, + 0x96, 0x04, 0x57, 0x48, 0xd1, 0x97, 0x86, 0xe5, 0xa8, 0xc7, 0x9b, 0xca, 0xa8, 0x28, 0xf0, 0x2f, + 0x05, 0x90, 0x39, 0xc6, 0xb4, 0xda, 0x60, 0xc9, 0xb8, 0x9b, 0xbc, 0x0e, 0x4d, 0x1e, 0x78, 0xbf, + 0x3a, 0x95, 0x3e, 0xe4, 0x2a, 0x6d, 0x28, 0xef, 0xcb, 0xe7, 0x0a, 0x7e, 0x59, 0x01, 0x85, 0x3c, + 0xfc, 0x63, 0x01, 0x4c, 0xee, 0x91, 0x26, 0xa1, 0xa4, 0x3f, 0xd2, 0x86, 0xf1, 0xfa, 0xa6, 0xa3, + 0xbe, 0x5f, 0x79, 0x0f, 0x2c, 0x00, 0xa0, 0xda, 0xfa, 0x7d, 0xd2, 0x52, 0x3d, 0xda, 0x80, 0x63, + 0xe0, 0x1a, 0x98, 0x7c, 0xc0, 0x3e, 0x15, 0x38, 0x0f, 0xc6, 0x1d, 0x82, 0x6b, 0x60, 0xe2, 0x99, + 0xa3, 0x53, 0xe2, 0x07, 0x5f, 0xfe, 0x65, 0x83, 0xef, 0x3f, 0x04, 0x30, 0x7d, 0x8f, 0xd0, 0x2f, + 0x3c, 0xe2, 0xb4, 0x7e, 0x95, 0xe1, 0xf7, 0x13, 0xa1, 0xa3, 0x3e, 0xca, 0x1d, 0x81, 0xb5, 0x41, + 0x63, 0x45, 0x97, 0xe1, 0x88, 0xe3, 0xc4, 0xd7, 0x42, 0x65, 0x8c, 0xeb, 0x57, 0x84, 0xb7, 0x2f, + 0xd3, 0xef, 0x87, 0x8c, 0x41, 0xa8, 0xe5, 0x4f, 0x26, 0x40, 0xfa, 0x1e, 0xa1, 0x61, 0x17, 0xe1, + 0x33, 0xbf, 0x33, 0x7a, 0xe9, 0x0c, 0xf0, 0xb3, 0xaf, 0x8e, 0x9a, 0xfb, 0xd1, 0x38, 0xd7, 0xe0, + 0x7f, 0x45, 0xf8, 0x0b, 0xf1, 0x12, 0x1d, 0xba, 0xad, 0x49, 0x90, 0x84, 0x07, 0x8d, 0x38, 0xed, + 0xe4, 0x59, 0xa2, 0x62, 0x0d, 0x9d, 0x51, 0xfa, 0xce, 0xbc, 0x17, 0x1d, 0xc6, 0x2b, 0xc9, 0x0b, + 0xa6, 0x88, 0xc1, 0xa7, 0x43, 0x71, 0x63, 0xb5, 0x6f, 0x78, 0x97, 0xdf, 0x8f, 0xd7, 0xeb, 0xe2, + 0x07, 0x2a, 0x32, 0x94, 0x61, 0x7f, 0x69, 0x1b, 0xd2, 0x3a, 0x0f, 0x39, 0x1e, 0xaa, 0xa7, 0xfb, + 0x22, 0xae, 0xb1, 0xd2, 0x0b, 0xff, 0x41, 0x04, 0xe3, 0xfb, 0xd5, 0x86, 0x05, 0x87, 0xfd, 0xe2, + 0xe2, 0x7a, 0x95, 0xa2, 0x3f, 0xc4, 0x84, 0xc9, 0xe1, 0xa5, 0x21, 0x73, 0xff, 0x95, 0xea, 0xa8, + 0xbf, 0x93, 0x02, 0x73, 0xa4, 0xda, 0xb0, 0x90, 0xeb, 0xb7, 0x5c, 0x60, 0x9a, 0xaf, 0x1c, 0xbb, + 0x0a, 0x97, 0x1e, 0x7a, 0x86, 0x81, 0x9d, 0x56, 0x09, 0xed, 0x07, 0x5b, 0xd9, 0xf4, 0x5e, 0xef, + 0x19, 0x88, 0xef, 0xe6, 0xf6, 0x00, 0x8c, 0x5f, 0x5b, 0x2e, 0xed, 0x88, 0x97, 0xf5, 0xd3, 0xbb, + 0x40, 0xfc, 0x60, 0x63, 0x0b, 0xee, 0x80, 0x0f, 0x35, 0x42, 0x3d, 0xc7, 0x24, 0x35, 0xf4, 0xac, + 0x41, 0x4c, 0x44, 0x1b, 0x04, 0x39, 0xc4, 0xb5, 0x3c, 0xa7, 0x4a, 0x90, 0xee, 0x22, 0x4a, 0x0c, + 0xdb, 0x72, 0xb0, 0xa3, 0x37, 0x5b, 0xc8, 0x33, 0xf1, 0x39, 0xd6, 0x9b, 0xb8, 0xd2, 0x24, 0xc5, + 0x4f, 0x3f, 0x06, 0xe2, 0xf6, 0xc6, 0x36, 0xdc, 0x06, 0xf9, 0x17, 0x10, 0xa8, 0x59, 0xc4, 0x45, + 0xa6, 0x45, 0x11, 0x79, 0xae, 0xbb, 0xb4, 0x08, 0x27, 0x01, 0x7f, 0x83, 0xe3, 0x97, 0xec, 0xc9, + 0xe5, 0x69, 0x82, 0x19, 0x46, 0xbe, 0xf0, 0x1d, 0xf3, 0x78, 0x35, 0x97, 0x8e, 0x16, 0x1c, 0x76, + 0x56, 0xf2, 0x9f, 0x6c, 0x1e, 0x43, 0xd8, 0x77, 0x04, 0xff, 0x5a, 0x00, 0x73, 0x7b, 0x84, 0xd8, + 0xfc, 0x87, 0x29, 0xb6, 0xf1, 0x66, 0x3a, 0x9b, 0xbb, 0x5c, 0xb7, 0x3b, 0xb9, 0xed, 0x4b, 0x53, + 0x7c, 0xec, 0x37, 0xef, 0x22, 0x1b, 0x57, 0x78, 0x15, 0x52, 0x01, 0x38, 0xb2, 0xca, 0xba, 0x59, + 0xd3, 0xcd, 0x53, 0x17, 0xae, 0xf6, 0x65, 0xf0, 0xbd, 0xe0, 0xcf, 0x01, 0x86, 0x26, 0xf7, 0x31, + 0xf8, 0x15, 0x98, 0x7a, 0xa4, 0x1b, 0xc4, 0xf2, 0x28, 0x1c, 0x02, 0x34, 0x14, 0xf9, 0x3a, 0x17, + 0xff, 0x2a, 0x5c, 0x8e, 0xda, 0x93, 0x06, 0xc4, 0x1a, 0x20, 0xbd, 0xef, 0x38, 0x96, 0xc3, 0xca, + 0xf7, 0x1e, 0xa1, 0x58, 0x6f, 0xba, 0x23, 0x33, 0xb8, 0xc5, 0x19, 0xbc, 0x0d, 0xd7, 0x62, 0x0e, + 0x63, 0x54, 0x9f, 0xe9, 0xb4, 0x51, 0x0b, 0xa8, 0xfe, 0xa1, 0x00, 0xe0, 0x3d, 0x42, 0x93, 0xb3, + 0xdb, 0xe5, 0x3d, 0x42, 0x02, 0x63, 0xa8, 0x18, 0xef, 0x72, 0x31, 0x6e, 0xe4, 0x56, 0xa3, 0x62, + 0x30, 0x09, 0x2a, 0x56, 0xad, 0x25, 0x5f, 0xb0, 0x8e, 0x80, 0xcf, 0x78, 0xf0, 0xf7, 0x04, 0xb0, + 0x74, 0x6c, 0xb9, 0x94, 0x51, 0xe4, 0xa8, 0x5c, 0x90, 0x97, 0x1b, 0x13, 0x87, 0x72, 0x97, 0x39, + 0xf7, 0xf7, 0x72, 0xb7, 0xa2, 0xdc, 0x6d, 0xcb, 0xa5, 0x4c, 0x02, 0xfe, 0x53, 0xa3, 0x2f, 0x46, + 0x37, 0x28, 0xfe, 0x5e, 0x00, 0xcb, 0xbb, 0x0d, 0x52, 0x3d, 0x0b, 0x8b, 0xf3, 0x31, 0x76, 0xb0, + 0xe1, 0xbe, 0xa1, 0x98, 0xbe, 0xc7, 0xc5, 0x55, 0xe1, 0xdd, 0xcb, 0x62, 0xda, 0xe6, 0x52, 0xc9, + 0xa7, 0x84, 0x0e, 0x0c, 0x6f, 0xf8, 0x4f, 0x02, 0xb8, 0xc2, 0xd5, 0x60, 0x16, 0x7d, 0xf3, 0x7a, + 0x7c, 0xc1, 0xf5, 0xb8, 0x9f, 0x2b, 0xbd, 0xa4, 0x1e, 0xcc, 0x23, 0xf1, 0xa1, 0xaf, 0x5d, 0x8a, + 0xff, 0xa9, 0x4a, 0xf6, 0x6f, 0x85, 0x8e, 0xfa, 0x73, 0x01, 0xd6, 0x87, 0x8c, 0xd3, 0xd1, 0x47, + 0x7c, 0x54, 0x28, 0xa0, 0x67, 0x0d, 0xbd, 0xda, 0x40, 0x6e, 0xc3, 0xf2, 0x9a, 0x35, 0x9e, 0x17, + 0x2b, 0x04, 0x79, 0x2e, 0xa9, 0x21, 0xdd, 0x44, 0x76, 0x13, 0x57, 0x09, 0xb2, 0xea, 0x3c, 0x83, + 0xd6, 0xac, 0xaa, 0x67, 0x10, 0xd3, 0x1f, 0xd2, 0x50, 0xd5, 0x32, 0xd8, 0xe2, 0x46, 0xf6, 0x0b, + 0xb0, 0x3e, 0xa8, 0x65, 0x63, 0xf9, 0x2d, 0x1c, 0xe0, 0x47, 0x7d, 0x04, 0x7e, 0x0a, 0xae, 0x54, + 0xb1, 0x41, 0x9a, 0xbb, 0xd8, 0x25, 0x01, 0x0d, 0x36, 0x6d, 0x42, 0x0d, 0x4c, 0xf8, 0x3f, 0x64, + 0x8f, 0x7a, 0xc3, 0x57, 0xb9, 0x95, 0x97, 0xe1, 0x52, 0xec, 0x86, 0xb3, 0x23, 0xe5, 0x07, 0x60, + 0x4d, 0x35, 0x2d, 0xda, 0x20, 0x4e, 0xc0, 0x89, 0xdd, 0xaa, 0x48, 0xb6, 0xfb, 0x5e, 0x2c, 0xf7, + 0x8d, 0xca, 0x78, 0xac, 0xfc, 0xf3, 0xa9, 0x8e, 0xfa, 0xb3, 0x29, 0xf8, 0xaf, 0x02, 0x58, 0x56, + 0x51, 0xd9, 0x7f, 0xb6, 0x8f, 0xf8, 0xff, 0x6b, 0x70, 0xe5, 0x54, 0x3b, 0xde, 0x2d, 0xdc, 0xf3, + 0x55, 0x47, 0xb6, 0x63, 0x3d, 0x25, 0x55, 0x3a, 0xaa, 0xc9, 0xb2, 0x69, 0xd3, 0x32, 0xc9, 0xaf, + 0x05, 0xaa, 0x31, 0xe8, 0xfc, 0x0f, 0xc0, 0x95, 0xf2, 0xc3, 0x3d, 0xb4, 0x55, 0xd8, 0x6d, 0x62, + 0xcf, 0x25, 0xe8, 0x33, 0xbd, 0x4a, 0x4c, 0x97, 0xc0, 0x83, 0xd1, 0x28, 0xcb, 0x95, 0xa6, 0x55, + 0x91, 0x0d, 0xec, 0x52, 0xe2, 0xc8, 0x9f, 0x1d, 0xee, 0xee, 0x1f, 0x3d, 0xdc, 0x2f, 0xd2, 0xe7, + 0x54, 0x11, 0x37, 0x8b, 0x1b, 0x79, 0x51, 0x48, 0x8d, 0x2b, 0x69, 0x6c, 0xfb, 0x3f, 0x36, 0xe8, + 0x96, 0x29, 0x3f, 0x75, 0x2d, 0x53, 0x59, 0x89, 0xee, 0x3c, 0x2f, 0xd4, 0x2d, 0xab, 0x60, 0xe8, + 0x06, 0x29, 0xf5, 0x41, 0x96, 0x86, 0x40, 0x6a, 0xc7, 0xac, 0x94, 0x6f, 0xc1, 0x43, 0x70, 0xaf, + 0xbf, 0x94, 0x7b, 0x2e, 0x71, 0x7a, 0x65, 0xbc, 0x81, 0xcf, 0x09, 0xb2, 0x89, 0x63, 0xe8, 0xae, + 0xcb, 0x02, 0x93, 0x5a, 0x08, 0x57, 0xab, 0xc4, 0x75, 0x63, 0x65, 0xbf, 0xa8, 0xbd, 0x46, 0x73, + 0x30, 0xa5, 0x7d, 0x02, 0xc4, 0xed, 0xcd, 0x1d, 0xa8, 0x82, 0xf9, 0xc3, 0x77, 0x0d, 0x84, 0x11, + 0x25, 0xd8, 0xb6, 0x68, 0x11, 0x6e, 0x80, 0x62, 0x76, 0xa4, 0x77, 0xd9, 0xc7, 0x7f, 0x94, 0x02, + 0x8b, 0x60, 0xa6, 0x8c, 0x5d, 0xbd, 0xca, 0x07, 0xb3, 0xd4, 0xb4, 0x00, 0xde, 0x8a, 0x8d, 0x6a, + 0x8b, 0xd3, 0xa9, 0xec, 0xcc, 0xd7, 0x05, 0xf5, 0xf8, 0xb0, 0x70, 0x9f, 0xb4, 0x50, 0x0a, 0xfc, + 0x9b, 0xd0, 0x1d, 0xdd, 0xfe, 0x51, 0x98, 0x16, 0xa5, 0x71, 0xe5, 0x66, 0xe8, 0xc3, 0x88, 0xc3, + 0x65, 0x0b, 0x7b, 0xb4, 0x21, 0xb3, 0x7f, 0x2c, 0x47, 0xff, 0x0d, 0x52, 0x5a, 0x1f, 0x0e, 0x44, + 0xad, 0x33, 0x62, 0x96, 0x7f, 0x1b, 0x64, 0xfd, 0x49, 0x10, 0xc2, 0x7b, 0x0e, 0x36, 0xa9, 0x8b, + 0xd8, 0x22, 0xb0, 0x1e, 0x58, 0x0b, 0xe6, 0x43, 0xb8, 0x1c, 0x1c, 0xf2, 0x55, 0x78, 0xba, 0x0b, + 0x26, 0x70, 0xcd, 0xd0, 0x4d, 0x58, 0x8a, 0xa1, 0x9a, 0xb5, 0x18, 0x18, 0x77, 0x06, 0x03, 0xd3, + 0x5d, 0xca, 0x5a, 0x84, 0x73, 0x82, 0x74, 0xb3, 0x6e, 0x39, 0x06, 0xf7, 0x77, 0x65, 0x1d, 0xcc, + 0x47, 0x4d, 0x31, 0x96, 0x9c, 0x59, 0x2b, 0xef, 0x0d, 0x9d, 0x5a, 0x93, 0xa0, 0xce, 0x21, 0xb8, + 0xf6, 0x79, 0x2f, 0xfb, 0x44, 0xef, 0xd4, 0xa8, 0x77, 0xe9, 0xf1, 0x4c, 0xd7, 0x73, 0x95, 0x49, + 0x7e, 0x9f, 0xb7, 0x7e, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x34, 0x38, 0x21, 0xb4, 0x29, 0x00, + 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 84d22126f11..85235fa9520 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -219,6 +219,8 @@ message ABitOfEverything { // nested object comments (This comment is overridden by the field annotation) Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Nested object title", description: "Nested object description."}]; + + int64 int64_override_type = 37 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {type: INTEGER}]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index edfa08730b7..278c4aaaa2f 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -44,6 +44,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -88,7 +89,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { - "type": "int32", + "type": "integer", "format": "integer" } }, @@ -138,6 +139,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -421,6 +423,13 @@ "TRUE" ], "default": "FALSE" + }, + { + "name": "int64_override_type", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" } ], "tags": [ @@ -445,6 +454,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -493,6 +503,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -783,6 +794,13 @@ "TRUE" ], "default": "FALSE" + }, + { + "name": "int64_override_type", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" } ], "tags": [ @@ -815,6 +833,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -995,6 +1014,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1044,6 +1064,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1082,6 +1103,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1129,6 +1151,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1177,6 +1200,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1406,6 +1430,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1452,6 +1477,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1502,7 +1528,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { - "type": "int32", + "type": "integer", "format": "integer" } }, @@ -1552,7 +1578,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { - "type": "int32", + "type": "integer", "format": "integer" } }, @@ -1606,6 +1632,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1638,6 +1665,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1670,6 +1698,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1718,6 +1747,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1750,6 +1780,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -1798,6 +1829,7 @@ "404": { "description": "Returned when the resource does not exist.", "schema": { + "type": "string", "format": "string" } }, @@ -2039,6 +2071,10 @@ "$ref": "#/definitions/ABitOfEverythingNested", "description": "Nested object description.", "title": "Nested object title" + }, + "int64_override_type": { + "type": "integer", + "format": "int64" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index d67b6d24496..e9fcd5ed5ee 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -295,6 +295,10 @@ "$ref": "#/definitions/ABitOfEverythingNested", "description": "Nested object description.", "title": "Nested object title" + }, + "int64_override_type": { + "type": "integer", + "format": "int64" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index ca83b3693f2..dfb8a490854 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1599,6 +1599,9 @@ func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_option s.MaxProperties = j.GetMaxProperties() s.MinProperties = j.GetMinProperties() s.Required = j.GetRequired() + if overrideType := j.GetType(); len(overrideType) > 0 { + s.Type = strings.ToLower(overrideType[0].String()) + } } func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { From 9d0c596203d5ceb50d4071f4f67020873e60d17a Mon Sep 17 00:00:00 2001 From: Dominik Honnef Date: Tue, 20 Aug 2019 08:30:13 +0200 Subject: [PATCH 0183/1518] Add Fuzzit integration Add a basic fuzz test for the httprule package, run regression tests locally on every PR and continuous fuzzing on fuzzit.dev. --- .circleci/config.yml | 9 ++++++++ README.md | 2 +- fuzzit.sh | 27 ++++++++++++++++++++++++ protoc-gen-grpc-gateway/httprule/fuzz.go | 11 ++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100755 fuzzit.sh create mode 100644 protoc-gen-grpc-gateway/httprule/fuzz.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 373948713d4..3ce4687d4dd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,6 +48,14 @@ jobs: - checkout - run: go get golang.org/x/lint/golint - run: make lint + fuzzit: + docker: + - image: fuzzitdev/fuzzit:golang1.12-stretch-llvm9 + working_directory: /go/src/github.com/grpc-gateway/grpc-gateway + steps: + - checkout + - setup_remote_docker + - run: ./fuzzit.sh bazel: docker: - image: l.gcr.io/google/bazel:latest @@ -88,6 +96,7 @@ workflows: jobs: - build - test + - fuzzit - node_test - generate - lint diff --git a/README.md b/README.md index 75dcd753620..bb1af895665 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # grpc-gateway -[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) +[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![fuzzit](https://app.fuzzit.dev/badge?org_id=grpc-gateway)](https://app.fuzzit.dev/orgs/grpc-gateway/dashboard) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). diff --git a/fuzzit.sh b/fuzzit.sh new file mode 100755 index 00000000000..63d35a57675 --- /dev/null +++ b/fuzzit.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -xe + +# Go-fuzz doesn't support modules yet, so ensure we do everything in the old style GOPATH way +export GO111MODULE="off" + +# Install go-fuzz +go get -u github.com/dvyukov/go-fuzz/go-fuzz github.com/dvyukov/go-fuzz/go-fuzz-build + +# Compiling fuzz targets in fuzz.go with go-fuzz (https://github.com/dvyukov/go-fuzz) and libFuzzer support +# This is a workaround until go-fuzz has gomodules support https://github.com/dvyukov/go-fuzz/issues/195 +BRANCH=$(git rev-parse --abbrev-ref HEAD) +git branch --set-upstream-to=origin/master $BRANCH + +go get -v -u ./protoc-gen-grpc-gateway/httprule +go-fuzz-build -libfuzzer -o parse-http-rule.a ./protoc-gen-grpc-gateway/httprule +clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule + +wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 +chmod a+x fuzzit + +if [ -z "CIRCLE_PULL_REQUEST" ]; then + TYPE="fuzzing" +else + TYPE="local-regression" +fi +./fuzzit create job --type ${TYPE} grpc-gateway/parse-http-rule parse-http-rule diff --git a/protoc-gen-grpc-gateway/httprule/fuzz.go b/protoc-gen-grpc-gateway/httprule/fuzz.go new file mode 100644 index 00000000000..138f7c12f0e --- /dev/null +++ b/protoc-gen-grpc-gateway/httprule/fuzz.go @@ -0,0 +1,11 @@ +// +build gofuzz + +package httprule + +func Fuzz(data []byte) int { + _, err := Parse(string(data)) + if err != nil { + return 0 + } + return 0 +} From 336cf960e6c9fd50288eba42718a73a8e0c3750a Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Thu, 24 Jan 2019 10:14:59 +0800 Subject: [PATCH 0184/1518] =?UTF-8?q?=E5=A2=9E=E5=8A=A0local=20server?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 6fc552f9c3cd8ee378e9ac179604f0d1005e4af1) --- .../gengateway/template_local.go | 148 ++++++++++++++++++ protoc-gen-grpc-gateway/main.go | 2 +- 2 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 protoc-gen-grpc-gateway/gengateway/template_local.go diff --git a/protoc-gen-grpc-gateway/gengateway/template_local.go b/protoc-gen-grpc-gateway/gengateway/template_local.go new file mode 100644 index 00000000000..ed6385242fe --- /dev/null +++ b/protoc-gen-grpc-gateway/gengateway/template_local.go @@ -0,0 +1,148 @@ +package gengateway + +import ( + "strings" + "text/template" +) + +var ( + localHandlerTemplate = template.Must(template.New("local-handler").Parse(` +{{if and .Method.GetClientStreaming .Method.GetServerStreaming}} +// TODO bidi-streaming-request +{{else if .Method.GetClientStreaming}} +// TODO client-streaming-request +{{else if .Method.GetServerStreaming}} +// TODO server-streaming-request +{{else}} +{{template "local-rpc-request-func" .}} +{{end}} +`)) + + _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.Replace(` +{{if .Method.GetServerStreaming}} +// TODO +{{else}} +func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.GetName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) +{{end}}`, "\n", "", -1))) + + _ = template.Must(localHandlerTemplate.New("local-rpc-request-func").Parse(` +{{$AllowPatchFeature := .AllowPatchFeature}} +{{template "local-request-func-signature" .}} { + var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} + var metadata runtime.ServerMetadata +{{if .Body}} + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} + if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) + } {{if not (eq "*" .GetBodyFieldPath)}} else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.{{.FieldMaskField}} = fieldMask + } + } {{end}} + {{end}} +{{end}} +{{if .PathParams}} + var ( + val string +{{- if .HasEnumPathParam}} + e int32 +{{- end}} +{{- if .HasRepeatedEnumPathParam}} + es []int32 +{{- end}} + ok bool + err error + _ = err + ) + {{$binding := .}} + {{range $param := .PathParams}} + {{$enum := $binding.LookupEnum $param}} + val, ok = pathParams[{{$param | printf "%q"}}] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", {{$param | printf "%q"}}) + } +{{if $param.IsNestedProto3}} + err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) +{{else if $enum}} + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) +{{else}} + {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) +{{end}} + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) + } +{{if and $enum $param.IsRepeated}} + s := make([]{{$enum.GoType $param.Target.Message.File.GoPkg.Path}}, len(es)) + for i, v := range es { + s[i] = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(v) + } + {{$param.AssignableExpr "protoReq"}} = s +{{else if $enum}} + {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(e) +{{end}} + {{end}} +{{end}} +{{if .HasQueryParam}} + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } +{{end}} +{{if .Method.GetServerStreaming}} + // TODO +{{else}} + msg, err := server.{{.Method.GetName}}(ctx, &protoReq) + return msg, metadata, err +{{end}} +}`)) + + localTrailerTemplate = template.Must(template.New("local-trailer").Parse(` +{{$UseRequestContext := .UseRequestContext}} +{{range $svc := .Services}} +// {{$svc.GetName}} local server register +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server) error { + {{range $m := $svc.Methods}} + {{range $b := $m.Bindings}} + mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + {{- if $UseRequestContext }} + ctx, cancel := context.WithCancel(req.Context()) + {{- else -}} + ctx, cancel := context.WithCancel(ctx) + {{- end }} + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + {{if $m.GetServerStreaming}} + // TODO + {{else}} + {{ if $b.ResponseBody }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + {{ else }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + {{end}} + {{end}} + }) + {{end}} + {{end}} + return nil +} +{{end}}`)) +) diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 291ba7deb2f..9717164ec00 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -19,7 +19,7 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/gengateway" + "github.com/hb-go/grpc-gateway/protoc-gen-grpc-gateway/gengateway" ) var ( From 0cf4756e225b9e306594e626e61c281ea1491aa5 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Sat, 1 Jun 2019 08:00:53 +0800 Subject: [PATCH 0185/1518] put back the import path (cherry picked from commit 726a5605013cd835e46c0a5cbad012b41b20a124) --- protoc-gen-grpc-gateway/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 9717164ec00..291ba7deb2f 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -19,7 +19,7 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/hb-go/grpc-gateway/protoc-gen-grpc-gateway/gengateway" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/gengateway" ) var ( From 1f85732f675c53453e91da100a267cfaca6ab1aa Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Mon, 17 Jun 2019 11:17:17 +0800 Subject: [PATCH 0186/1518] merge template to the same file (cherry picked from commit 3470c1c99549dbcb7630b2b7a8e156db8c38cc54) --- .../gengateway/template_local.go | 148 ------------------ 1 file changed, 148 deletions(-) delete mode 100644 protoc-gen-grpc-gateway/gengateway/template_local.go diff --git a/protoc-gen-grpc-gateway/gengateway/template_local.go b/protoc-gen-grpc-gateway/gengateway/template_local.go deleted file mode 100644 index ed6385242fe..00000000000 --- a/protoc-gen-grpc-gateway/gengateway/template_local.go +++ /dev/null @@ -1,148 +0,0 @@ -package gengateway - -import ( - "strings" - "text/template" -) - -var ( - localHandlerTemplate = template.Must(template.New("local-handler").Parse(` -{{if and .Method.GetClientStreaming .Method.GetServerStreaming}} -// TODO bidi-streaming-request -{{else if .Method.GetClientStreaming}} -// TODO client-streaming-request -{{else if .Method.GetServerStreaming}} -// TODO server-streaming-request -{{else}} -{{template "local-rpc-request-func" .}} -{{end}} -`)) - - _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.Replace(` -{{if .Method.GetServerStreaming}} -// TODO -{{else}} -func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.GetName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) -{{end}}`, "\n", "", -1))) - - _ = template.Must(localHandlerTemplate.New("local-rpc-request-func").Parse(` -{{$AllowPatchFeature := .AllowPatchFeature}} -{{template "local-request-func-signature" .}} { - var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} - var metadata runtime.ServerMetadata -{{if .Body}} - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} - if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) - } {{if not (eq "*" .GetBodyFieldPath)}} else { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } else { - protoReq.{{.FieldMaskField}} = fieldMask - } - } {{end}} - {{end}} -{{end}} -{{if .PathParams}} - var ( - val string -{{- if .HasEnumPathParam}} - e int32 -{{- end}} -{{- if .HasRepeatedEnumPathParam}} - es []int32 -{{- end}} - ok bool - err error - _ = err - ) - {{$binding := .}} - {{range $param := .PathParams}} - {{$enum := $binding.LookupEnum $param}} - val, ok = pathParams[{{$param | printf "%q"}}] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", {{$param | printf "%q"}}) - } -{{if $param.IsNestedProto3}} - err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) -{{else if $enum}} - e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) -{{else}} - {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) -{{end}} - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) - } -{{if and $enum $param.IsRepeated}} - s := make([]{{$enum.GoType $param.Target.Message.File.GoPkg.Path}}, len(es)) - for i, v := range es { - s[i] = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(v) - } - {{$param.AssignableExpr "protoReq"}} = s -{{else if $enum}} - {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(e) -{{end}} - {{end}} -{{end}} -{{if .HasQueryParam}} - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } -{{end}} -{{if .Method.GetServerStreaming}} - // TODO -{{else}} - msg, err := server.{{.Method.GetName}}(ctx, &protoReq) - return msg, metadata, err -{{end}} -}`)) - - localTrailerTemplate = template.Must(template.New("local-trailer").Parse(` -{{$UseRequestContext := .UseRequestContext}} -{{range $svc := .Services}} -// {{$svc.GetName}} local server register -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server) error { - {{range $m := $svc.Methods}} - {{range $b := $m.Bindings}} - mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - {{- if $UseRequestContext }} - ctx, cancel := context.WithCancel(req.Context()) - {{- else -}} - ctx, cancel := context.WithCancel(ctx) - {{- end }} - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - {{if $m.GetServerStreaming}} - // TODO - {{else}} - {{ if $b.ResponseBody }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) - {{ else }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - {{end}} - {{end}} - }) - {{end}} - {{end}} - return nil -} -{{end}}`)) -) From 571d70f86722ad5f4a34d5571b03ba519aedf8fc Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Mon, 17 Jun 2019 11:17:55 +0800 Subject: [PATCH 0187/1518] regenerate `*.pb.gw.go` files (cherry picked from commit 6d795959b51aae2bc4b3c5cfa1319868df5dfcdb) --- .../examplepb/a_bit_of_everything.pb.gw.go | 2242 +++++++++++++---- .../proto/examplepb/echo_service.pb.gw.go | 396 +++ .../proto/examplepb/flow_combination.pb.gw.go | 1048 +++++++- .../examplepb/response_body_service.pb.gw.go | 147 ++ examples/proto/examplepb/stream.pb.gw.go | 72 + .../unannotated_echo_service.pb.gw.go | 189 ++ examples/proto/examplepb/wrappers.pb.gw.go | 413 +++ 7 files changed, 4022 insertions(+), 485 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index df3b7b394f4..b1c9fcd2923 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -277,490 +277,307 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run } -func request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ABitOfEverything var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreateBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq sub2.IdMessage - var metadata runtime.ServerMetadata - var ( val string + e int32 ok bool err error _ = err ) - val, ok = pathParams["uuid"] + val, ok = pathParams["float_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "float_value") } - protoReq.Uuid, err = runtime.String(val) + protoReq.FloatValue, err = runtime.Float32(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "float_value", err) } - msg, err := client.Lookup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + val, ok = pathParams["double_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "double_value") + } -func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ABitOfEverything - var metadata runtime.ServerMetadata + protoReq.DoubleValue, err = runtime.Float64(val) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "double_value", err) } - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["uuid"] + val, ok = pathParams["int64_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int64_value") } - protoReq.Uuid, err = runtime.String(val) + protoReq.Int64Value, err = runtime.Int64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64_value", err) } - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -var ( - filter_ABitOfEverythingService_UpdateV2_0 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} -) + val, ok = pathParams["uint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint64_value") + } -func request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateV2Request - var metadata runtime.ServerMetadata + protoReq.Uint64Value, err = runtime.Uint64(val) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64_value", err) } - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["abe.uuid"] + val, ok = pathParams["int32_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int32_value") } - err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + protoReq.Int32Value, err = runtime.Int32(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32_value", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["fixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fixed64_value") } - msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + protoReq.Fixed64Value, err = runtime.Uint64(val) -} + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fixed64_value", err) + } -var ( - filter_ABitOfEverythingService_UpdateV2_1 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} -) + val, ok = pathParams["fixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "fixed32_value") + } -func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateV2Request - var metadata runtime.ServerMetadata + protoReq.Fixed32Value, err = runtime.Uint32(val) - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) - } else { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } else { - protoReq.UpdateMask = fieldMask - } + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "fixed32_value", err) } - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["abe.uuid"] + val, ok = pathParams["bool_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bool_value") } - err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + protoReq.BoolValue, err = runtime.Bool(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bool_value", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "string_value") } - msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + protoReq.StringValue, err = runtime.String(val) -func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq UpdateV2Request - var metadata runtime.ServerMetadata + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) + } - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + val, ok = pathParams["uint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint32_value") } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + + protoReq.Uint32Value, err = runtime.Uint32(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32_value", err) } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) + + val, ok = pathParams["sfixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sfixed32_value") } - var ( - val string - ok bool - err error - _ = err - ) + protoReq.Sfixed32Value, err = runtime.Int32(val) - val, ok = pathParams["abe.uuid"] + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sfixed32_value", err) + } + + val, ok = pathParams["sfixed64_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sfixed64_value") } - err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + protoReq.Sfixed64Value, err = runtime.Int64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sfixed64_value", err) } - msg, err := client.PatchWithFieldMaskInBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + val, ok = pathParams["sint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sint32_value") + } -func request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq sub2.IdMessage - var metadata runtime.ServerMetadata + protoReq.Sint32Value, err = runtime.Int32(val) - var ( - val string - ok bool - err error - _ = err - ) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sint32_value", err) + } - val, ok = pathParams["uuid"] + val, ok = pathParams["sint64_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sint64_value") } - protoReq.Uuid, err = runtime.String(val) + protoReq.Sint64Value, err = runtime.Int64(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sint64_value", err) } - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + val, ok = pathParams["nonConventionalNameValue"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "nonConventionalNameValue") + } -} - -var ( - filter_ABitOfEverythingService_GetQuery_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ABitOfEverything - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["uuid"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") - } - - protoReq.Uuid, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ABitOfEverythingRepeated - var metadata runtime.ServerMetadata - - var ( - val string - es []int32 - ok bool - err error - _ = err - ) - - val, ok = pathParams["path_repeated_float_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_float_value") - } - - protoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_float_value", err) - } - - val, ok = pathParams["path_repeated_double_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_double_value") - } - - protoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, ",") + protoReq.NonConventionalNameValue, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_double_value", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "nonConventionalNameValue", err) } - val, ok = pathParams["path_repeated_int64_value"] + val, ok = pathParams["enum_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int64_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value") } - protoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, ",") + e, err = runtime.Enum(val, NumericEnum_value) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int64_value", err) - } - - val, ok = pathParams["path_repeated_uint64_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint64_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "enum_value", err) } - protoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint64_value", err) - } + protoReq.EnumValue = NumericEnum(e) - val, ok = pathParams["path_repeated_int32_value"] + val, ok = pathParams["path_enum_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int32_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_enum_value") } - protoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, ",") + e, err = runtime.Enum(val, pathenum.PathEnum_value) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int32_value", err) - } - - val, ok = pathParams["path_repeated_fixed64_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed64_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_enum_value", err) } - protoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed64_value", err) - } + protoReq.PathEnumValue = pathenum.PathEnum(e) - val, ok = pathParams["path_repeated_fixed32_value"] + val, ok = pathParams["nested_path_enum_value"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed32_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "nested_path_enum_value") } - protoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, ",") + e, err = runtime.Enum(val, pathenum.MessagePathEnum_NestedPathEnum_value) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed32_value", err) - } - - val, ok = pathParams["path_repeated_bool_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bool_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "nested_path_enum_value", err) } - protoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bool_value", err) - } + protoReq.NestedPathEnumValue = pathenum.MessagePathEnum_NestedPathEnum(e) - val, ok = pathParams["path_repeated_string_value"] + val, ok = pathParams["enum_value_annotation"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_string_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "enum_value_annotation") } - protoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, ",") + e, err = runtime.Enum(val, NumericEnum_value) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_string_value", err) - } - - val, ok = pathParams["path_repeated_bytes_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bytes_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "enum_value_annotation", err) } - protoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, ",") + protoReq.EnumValueAnnotation = NumericEnum(e) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bytes_value", err) + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - val, ok = pathParams["path_repeated_uint32_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint32_value") - } + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err - protoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, ",") +} - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint32_value", err) - } +func request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata - val, ok = pathParams["path_repeated_enum_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_enum_value") + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - - es, err = runtime.EnumSlice(val, ",", NumericEnum_value) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_enum_value", err) + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - s := make([]NumericEnum, len(es)) - for i, v := range es { - s[i] = NumericEnum(v) - } - protoReq.PathRepeatedEnumValue = s + msg, err := client.CreateBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err - val, ok = pathParams["path_repeated_sfixed32_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed32_value") - } +} - protoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, ",") +func local_request_ABitOfEverythingService_CreateBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed32_value", err) + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - - val, ok = pathParams["path_repeated_sfixed64_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed64_value") + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - protoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, ",") - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed64_value", err) - } + msg, err := server.CreateBody(ctx, &protoReq) + return msg, metadata, err - val, ok = pathParams["path_repeated_sint32_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint32_value") - } +} - protoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, ",") +func request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub2.IdMessage + var metadata runtime.ServerMetadata - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint32_value", err) - } + var ( + val string + ok bool + err error + _ = err + ) - val, ok = pathParams["path_repeated_sint64_value"] + val, ok = pathParams["uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint64_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") } - protoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, ",") + protoReq.Uuid, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint64_value", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - msg, err := client.GetRepeatedQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Lookup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq sub.StringMessage +func local_request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub2.IdMessage var metadata runtime.ServerMetadata var ( @@ -770,60 +587,58 @@ func request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runti _ = err ) - val, ok = pathParams["value"] + val, ok = pathParams["uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") } - protoReq.Value, err = runtime.StringP(val) + protoReq.Uuid, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "value", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.Lookup(ctx, &protoReq) return msg, metadata, err } -func request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq sub.StringMessage +func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Value); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} + var ( + val string + ok bool + err error + _ = err + ) -var ( - filter_ABitOfEverythingService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } -func request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq sub.StringMessage - var metadata runtime.ServerMetadata + protoReq.Uuid, err = runtime.String(val) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ABitOfEverything var metadata runtime.ServerMetadata @@ -842,49 +657,77 @@ func request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshal _ = err ) - val, ok = pathParams["single_nested.name"] + val, ok = pathParams["uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") } - err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + protoReq.Uuid, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - msg, err := client.DeepPathEcho(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.Update(ctx, &protoReq) return msg, metadata, err } -func request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty +var ( + filter_ABitOfEverythingService_UpdateV2_0 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} +) + +func request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request var metadata runtime.ServerMetadata - msg, err := client.Timeout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } -} + var ( + val string + ok bool + err error + _ = err + ) -func request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata + val, ok = pathParams["abe.uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + } - msg, err := client.ErrorWithDetails(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq MessageWithBody +func local_request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -895,33 +738,50 @@ func request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, m _ = err ) - val, ok = pathParams["id"] + val, ok = pathParams["abe.uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") } - protoReq.Id, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - msg, err := client.GetMessageWithBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateV2(ctx, &protoReq) return msg, metadata, err } -func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Body +var ( + filter_ABitOfEverythingService_UpdateV2_1 = &utilities.DoubleArray{Encoding: map[string]int{"abe": 0, "uuid": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} +) + +func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } var ( val string @@ -930,30 +790,50 @@ func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, ma _ = err ) - val, ok = pathParams["name"] + val, ok = pathParams["abe.uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") } - protoReq.Name, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - msg, err := client.PostWithEmptyBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -var ( - filter_ABitOfEverythingService_CheckGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "name": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} -) - -func request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ABitOfEverything +func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request var metadata runtime.ServerMetadata + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + var ( val string ok bool @@ -961,44 +841,40 @@ func request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, _ = err ) - val, ok = pathParams["single_nested.name"] + val, ok = pathParams["abe.uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") } - err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.CheckGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.UpdateV2(ctx, &protoReq) return msg, metadata, err } -var ( - filter_ABitOfEverythingService_CheckPostQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "string_value": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ABitOfEverything +func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.SingleNested); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } var ( val string @@ -1007,38 +883,1552 @@ func request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, _ = err ) - val, ok = pathParams["string_value"] + val, ok = pathParams["abe.uuid"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "string_value") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") } - protoReq.StringValue, err = runtime.String(val) + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + msg, err := client.PatchWithFieldMaskInBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateV2Request + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } + if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.UpdateMask) + } - msg, err := client.CheckPostQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["abe.uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "abe.uuid") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "abe.uuid", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) + } + + msg, err := server.PatchWithFieldMaskInBody(ctx, &protoReq) return msg, metadata, err } -func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty +func request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub2.IdMessage var metadata runtime.ServerMetadata - msg, err := client.Empty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } +func local_request_ABitOfEverythingService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub2.IdMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_GetQuery_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_GetQuery_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetQuery(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverythingRepeated + var metadata runtime.ServerMetadata + + var ( + val string + es []int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["path_repeated_float_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_float_value") + } + + protoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_float_value", err) + } + + val, ok = pathParams["path_repeated_double_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_double_value") + } + + protoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_double_value", err) + } + + val, ok = pathParams["path_repeated_int64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int64_value") + } + + protoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int64_value", err) + } + + val, ok = pathParams["path_repeated_uint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint64_value") + } + + protoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint64_value", err) + } + + val, ok = pathParams["path_repeated_int32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int32_value") + } + + protoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int32_value", err) + } + + val, ok = pathParams["path_repeated_fixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed64_value") + } + + protoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed64_value", err) + } + + val, ok = pathParams["path_repeated_fixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed32_value") + } + + protoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed32_value", err) + } + + val, ok = pathParams["path_repeated_bool_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bool_value") + } + + protoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bool_value", err) + } + + val, ok = pathParams["path_repeated_string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_string_value") + } + + protoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_string_value", err) + } + + val, ok = pathParams["path_repeated_bytes_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bytes_value") + } + + protoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bytes_value", err) + } + + val, ok = pathParams["path_repeated_uint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint32_value") + } + + protoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint32_value", err) + } + + val, ok = pathParams["path_repeated_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_enum_value") + } + + es, err = runtime.EnumSlice(val, ",", NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_enum_value", err) + } + + s := make([]NumericEnum, len(es)) + for i, v := range es { + s[i] = NumericEnum(v) + } + protoReq.PathRepeatedEnumValue = s + + val, ok = pathParams["path_repeated_sfixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed32_value") + } + + protoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed32_value", err) + } + + val, ok = pathParams["path_repeated_sfixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed64_value") + } + + protoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed64_value", err) + } + + val, ok = pathParams["path_repeated_sint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint32_value") + } + + protoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint32_value", err) + } + + val, ok = pathParams["path_repeated_sint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint64_value") + } + + protoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint64_value", err) + } + + msg, err := client.GetRepeatedQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_GetRepeatedQuery_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverythingRepeated + var metadata runtime.ServerMetadata + + var ( + val string + es []int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["path_repeated_float_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_float_value") + } + + protoReq.PathRepeatedFloatValue, err = runtime.Float32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_float_value", err) + } + + val, ok = pathParams["path_repeated_double_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_double_value") + } + + protoReq.PathRepeatedDoubleValue, err = runtime.Float64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_double_value", err) + } + + val, ok = pathParams["path_repeated_int64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int64_value") + } + + protoReq.PathRepeatedInt64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int64_value", err) + } + + val, ok = pathParams["path_repeated_uint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint64_value") + } + + protoReq.PathRepeatedUint64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint64_value", err) + } + + val, ok = pathParams["path_repeated_int32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_int32_value") + } + + protoReq.PathRepeatedInt32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_int32_value", err) + } + + val, ok = pathParams["path_repeated_fixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed64_value") + } + + protoReq.PathRepeatedFixed64Value, err = runtime.Uint64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed64_value", err) + } + + val, ok = pathParams["path_repeated_fixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_fixed32_value") + } + + protoReq.PathRepeatedFixed32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_fixed32_value", err) + } + + val, ok = pathParams["path_repeated_bool_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bool_value") + } + + protoReq.PathRepeatedBoolValue, err = runtime.BoolSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bool_value", err) + } + + val, ok = pathParams["path_repeated_string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_string_value") + } + + protoReq.PathRepeatedStringValue, err = runtime.StringSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_string_value", err) + } + + val, ok = pathParams["path_repeated_bytes_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_bytes_value") + } + + protoReq.PathRepeatedBytesValue, err = runtime.BytesSlice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_bytes_value", err) + } + + val, ok = pathParams["path_repeated_uint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_uint32_value") + } + + protoReq.PathRepeatedUint32Value, err = runtime.Uint32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_uint32_value", err) + } + + val, ok = pathParams["path_repeated_enum_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_enum_value") + } + + es, err = runtime.EnumSlice(val, ",", NumericEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_enum_value", err) + } + + s := make([]NumericEnum, len(es)) + for i, v := range es { + s[i] = NumericEnum(v) + } + protoReq.PathRepeatedEnumValue = s + + val, ok = pathParams["path_repeated_sfixed32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed32_value") + } + + protoReq.PathRepeatedSfixed32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed32_value", err) + } + + val, ok = pathParams["path_repeated_sfixed64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sfixed64_value") + } + + protoReq.PathRepeatedSfixed64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sfixed64_value", err) + } + + val, ok = pathParams["path_repeated_sint32_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint32_value") + } + + protoReq.PathRepeatedSint32Value, err = runtime.Int32Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint32_value", err) + } + + val, ok = pathParams["path_repeated_sint64_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "path_repeated_sint64_value") + } + + protoReq.PathRepeatedSint64Value, err = runtime.Int64Slice(val, ",") + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "path_repeated_sint64_value", err) + } + + msg, err := server.GetRepeatedQuery(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "value") + } + + protoReq.Value, err = runtime.StringP(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "value", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "value") + } + + protoReq.Value, err = runtime.StringP(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "value", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Value); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Value); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq sub.StringMessage + var metadata runtime.ServerMetadata + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Echo_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + } + + msg, err := client.DeepPathEcho(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + } + + msg, err := server.DeepPathEcho(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.Timeout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.Timeout(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.ErrorWithDetails(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.ErrorWithDetails(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MessageWithBody + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.GetMessageWithBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_GetMessageWithBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MessageWithBody + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.GetMessageWithBody(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Body + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := client.PostWithEmptyBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_PostWithEmptyBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Body + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := server.PostWithEmptyBody(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_CheckGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "name": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} +) + +func request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CheckGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.name", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CheckGetQueryParams(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_CheckPostQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "string_value": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.SingleNested); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "string_value") + } + + protoReq.StringValue, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CheckPostQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.SingleNested); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "string_value") + } + + protoReq.StringValue, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CheckPostQueryParams(ctx, &protoReq) + return msg, metadata, err + +} + +func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.Empty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, server CamelCaseServiceNameServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.Empty(ctx, &protoReq) + return msg, metadata, err + +} + +// ABitOfEverythingService local server register +func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer) error { + + mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Create_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_CreateBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_CreateBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CreateBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Lookup_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_ABitOfEverythingService_UpdateV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateV2_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateV2_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_ABitOfEverythingService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Delete_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_GetQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_GetQuery_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_GetQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_GetRepeatedQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_GetRepeatedQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_DeepPathEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_DeepPathEcho_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_Timeout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Timeout_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Timeout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_ErrorWithDetails_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_ErrorWithDetails_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_GetMessageWithBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_GetMessageWithBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_PostWithEmptyBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PostWithEmptyBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ABitOfEverythingService_CheckGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckPostQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// CamelCaseServiceName local server register +func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer) error { + + mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_CamelCaseServiceName_Empty_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_CamelCaseServiceName_Empty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterABitOfEverythingServiceHandlerFromEndpoint is same as RegisterABitOfEverythingServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 1ceb1894a2e..a9ef0451e5f 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -66,6 +66,37 @@ func request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler } +func local_request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "num": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -115,6 +146,48 @@ func request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler } +func local_request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "num": 1, "lang": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} ) @@ -180,6 +253,64 @@ func request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler } +func local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + val, ok = pathParams["lang"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "lang") + } + + if protoReq.Code == nil { + protoReq.Code = &SimpleMessage_Lang{} + } else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) + } + protoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_Echo_3 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "line_num": 1, "status": 2, "note": 3}, Base: []int{1, 1, 2, 1, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 4, 2, 3, 5}} ) @@ -245,6 +376,64 @@ func request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler } +func local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["line_num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "line_num") + } + + if protoReq.Code == nil { + protoReq.Code = &SimpleMessage_LineNum{} + } else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) + } + protoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "line_num", err) + } + + val, ok = pathParams["status.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "status.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "status.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_Echo_4 = &utilities.DoubleArray{Encoding: map[string]int{"no": 0, "note": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) @@ -283,6 +472,37 @@ func request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler } +func local_request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["no.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "no.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "no.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + func request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq SimpleMessage var metadata runtime.ServerMetadata @@ -300,6 +520,23 @@ func request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marsh } +func local_request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoBody(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -320,6 +557,165 @@ func request_EchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Mar } +func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_EchoDelete_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoDelete(ctx, &protoReq) + return msg, metadata, err + +} + +// EchoService local server register +func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer) error { + + mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_EchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_EchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_EchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_Echo_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_EchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_Echo_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_EchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterEchoServiceHandlerFromEndpoint is same as RegisterEchoServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b29a6f3bbf9..dfce88514f2 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -37,6 +37,15 @@ func request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtim } +func local_request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq EmptyProto + var metadata runtime.ServerMetadata + + msg, err := server.RpcEmptyRpc(ctx, &protoReq) + return msg, metadata, err + +} + func request_FlowCombination_RpcEmptyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcEmptyStreamClient, runtime.ServerMetadata, error) { var protoReq EmptyProto var metadata runtime.ServerMetadata @@ -54,6 +63,8 @@ func request_FlowCombination_RpcEmptyStream_0(ctx context.Context, marshaler run } +// TODO server-streaming-request + func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.StreamEmptyRpc(ctx) @@ -98,6 +109,8 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run } +// TODO client-streaming-request + func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_StreamEmptyStreamClient, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.StreamEmptyStream(ctx) @@ -150,6 +163,8 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler return stream, metadata, nil } +// TODO bidi-streaming-request + func request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -167,6 +182,23 @@ func request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + func request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -216,6 +248,55 @@ func request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_1(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a") + } + + protoReq.A, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) + } + + val, ok = pathParams["b"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "b") + } + + protoReq.B, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) + } + + val, ok = pathParams["c"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "c") + } + + protoReq.C, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "c", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_FlowCombination_RpcBodyRpc_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -236,6 +317,19 @@ func request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + func request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -282,6 +376,52 @@ func request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_3(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a") + } + + protoReq.A, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) + } + + val, ok = pathParams["b"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "b") + } + + protoReq.B, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_FlowCombination_RpcBodyRpc_4 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -310,6 +450,27 @@ func request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_FlowCombination_RpcBodyRpc_5 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -356,6 +517,45 @@ func request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime } +func local_request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a") + } + + protoReq.A, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_5); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcBodyRpc(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_FlowCombination_RpcBodyRpc_6 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -394,12 +594,8 @@ func request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler runtime } -var ( - filter_FlowCombination_RpcPathSingleNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} -) - -func request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SingleNestedProto +func local_request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonEmptyProto var metadata runtime.ServerMetadata var ( @@ -409,45 +605,34 @@ func request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marsh _ = err ) - val, ok = pathParams["a.str"] + val, ok = pathParams["a"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a") } - err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + protoReq.A, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RpcPathSingleNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.RpcBodyRpc(ctx, &protoReq) return msg, metadata, err } var ( - filter_FlowCombination_RpcPathNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2, "b": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}} + filter_FlowCombination_RpcPathSingleNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) -func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq NestedProto +func request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SingleNestedProto var metadata runtime.ServerMetadata - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - var ( val string ok bool @@ -466,35 +651,20 @@ func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - val, ok = pathParams["b"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "b") - } - - protoReq.B, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.RpcPathSingleNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -var ( - filter_FlowCombination_RpcPathNestedRpc_1 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} -) - -func request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq NestedProto +func local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SingleNestedProto var metadata runtime.ServerMetadata var ( @@ -515,23 +685,20 @@ func request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := server.RpcPathSingleNestedRpc(ctx, &protoReq) return msg, metadata, err } var ( - filter_FlowCombination_RpcPathNestedRpc_2 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}} + filter_FlowCombination_RpcPathNestedRpc_0 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2, "b": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}} ) -func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NestedProto var metadata runtime.ServerMetadata @@ -561,15 +728,230 @@ func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + val, ok = pathParams["b"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "b") } - msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + protoReq.B, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NestedProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a.str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + } + + val, ok = pathParams["b"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "b") + } + + protoReq.B, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcPathNestedRpc(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_FlowCombination_RpcPathNestedRpc_1 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} +) + +func request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NestedProto + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a.str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NestedProto + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a.str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcPathNestedRpc(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_FlowCombination_RpcPathNestedRpc_2 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}} +) + +func request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NestedProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a.str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RpcPathNestedRpc(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marshaler runtime.Marshaler, server FlowCombinationServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NestedProto + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.C); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["a.str"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "a.str") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "a.str", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RpcPathNestedRpc(ctx, &protoReq) + return msg, metadata, err } @@ -598,6 +980,8 @@ func request_FlowCombination_RpcBodyStream_0(ctx context.Context, marshaler runt } +// TODO server-streaming-request + func request_FlowCombination_RpcBodyStream_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -655,6 +1039,8 @@ func request_FlowCombination_RpcBodyStream_1(ctx context.Context, marshaler runt } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcBodyStream_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -683,6 +1069,8 @@ func request_FlowCombination_RpcBodyStream_2(ctx context.Context, marshaler runt } +// TODO server-streaming-request + func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -737,6 +1125,8 @@ func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runt } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcBodyStream_4 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -773,6 +1163,8 @@ func request_FlowCombination_RpcBodyStream_4(ctx context.Context, marshaler runt } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcBodyStream_5 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -827,6 +1219,8 @@ func request_FlowCombination_RpcBodyStream_5(ctx context.Context, marshaler runt } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcBodyStream_6 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -873,6 +1267,8 @@ func request_FlowCombination_RpcBodyStream_6(ctx context.Context, marshaler runt } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcPathSingleNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) @@ -919,6 +1315,8 @@ func request_FlowCombination_RpcPathSingleNestedStream_0(ctx context.Context, ma } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcPathNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2, "b": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}} ) @@ -984,6 +1382,8 @@ func request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, marshale } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcPathNestedStream_1 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) @@ -1030,6 +1430,8 @@ func request_FlowCombination_RpcPathNestedStream_1(ctx context.Context, marshale } +// TODO server-streaming-request + var ( filter_FlowCombination_RpcPathNestedStream_2 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}} ) @@ -1084,6 +1486,534 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale } +// TODO server-streaming-request + +// FlowCombination local server register +func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer) error { + + mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcEmptyStream_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_StreamEmptyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_StreamEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_StreamEmptyStream_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_5(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyRpc_6(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcBodyRpc_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcPathSingleNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcPathNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcPathNestedRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedRpc_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_FlowCombination_RpcPathNestedRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_5(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcBodyStream_6(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathSingleNestedStream_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedStream_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedStream_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_FlowCombination_RpcPathNestedStream_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + return nil +} + // RegisterFlowCombinationHandlerFromEndpoint is same as RegisterFlowCombinationHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 7de38ce36af..360d9b204c3 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -55,6 +55,33 @@ func request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshale } +func local_request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := server.GetResponseBody(ctx, &protoReq) + return msg, metadata, err + +} + func request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ResponseBodyIn var metadata runtime.ServerMetadata @@ -82,6 +109,33 @@ func request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marsh } +func local_request_ResponseBodyService_ListResponseBodies_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := server.ListResponseBodies(ctx, &protoReq) + return msg, metadata, err + +} + func request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ResponseBodyIn var metadata runtime.ServerMetadata @@ -109,6 +163,99 @@ func request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, mars } +func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context, marshaler runtime.Marshaler, server ResponseBodyServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + msg, err := server.ListResponseStrings(ctx, &protoReq) + return msg, metadata, err + +} + +// ResponseBodyService local server register +func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer) error { + + mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ResponseBodyService_GetResponseBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_GetResponseBody_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ResponseBodyService_ListResponseBodies_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_ListResponseBodies_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ResponseBodyService_ListResponseStrings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_ListResponseStrings_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterResponseBodyServiceHandlerFromEndpoint is same as RegisterResponseBodyServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index ec7cb9217b6..4157d741a18 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -74,6 +74,8 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M } +// TODO client-streaming-request + func request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_ListClient, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -91,6 +93,8 @@ func request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshal } +// TODO server-streaming-request + func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_BulkEchoClient, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.BulkEcho(ctx) @@ -143,6 +147,74 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar return stream, metadata, nil } +// TODO bidi-streaming-request + +// StreamService local server register +func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer) error { + + mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_StreamService_BulkCreate_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_StreamService_BulkCreate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_StreamService_List_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + mux.Handle("POST", pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_StreamService_BulkEcho_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + // TODO + + }) + + return nil +} + // RegisterStreamServiceHandlerFromEndpoint is same as RegisterStreamServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterStreamServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 721b18ba6e2..09f91ca367e 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -66,6 +66,37 @@ func request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtim } +func local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_UnannotatedEchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "num": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -115,6 +146,48 @@ func request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtim } +func local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + func request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq UnannotatedSimpleMessage var metadata runtime.ServerMetadata @@ -132,6 +205,23 @@ func request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler ru } +func local_request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoBody(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_UnannotatedEchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -152,6 +242,105 @@ func request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler } +func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_EchoDelete_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoDelete(ctx, &protoReq) + return msg, metadata, err + +} + +// UnannotatedEchoService local server register +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer) error { + + mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterUnannotatedEchoServiceHandlerFromEndpoint is same as RegisterUnannotatedEchoServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 1c0765519f8..824c098fa94 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -47,6 +47,23 @@ func request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Mar } +func local_request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Wrappers + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.StringValue var metadata runtime.ServerMetadata @@ -64,6 +81,23 @@ func request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler } +func local_request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.StringValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateStringValue(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.Int32Value var metadata runtime.ServerMetadata @@ -81,6 +115,23 @@ func request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler r } +func local_request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.Int32Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateInt32Value(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.Int64Value var metadata runtime.ServerMetadata @@ -98,6 +149,23 @@ func request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler r } +func local_request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.Int64Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateInt64Value(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.FloatValue var metadata runtime.ServerMetadata @@ -115,6 +183,23 @@ func request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler r } +func local_request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.FloatValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateFloatValue(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.DoubleValue var metadata runtime.ServerMetadata @@ -132,6 +217,23 @@ func request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler } +func local_request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.DoubleValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateDoubleValue(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.BoolValue var metadata runtime.ServerMetadata @@ -149,6 +251,23 @@ func request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler ru } +func local_request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.BoolValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateBoolValue(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.UInt32Value var metadata runtime.ServerMetadata @@ -166,6 +285,23 @@ func request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler } +func local_request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.UInt32Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateUInt32Value(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.UInt64Value var metadata runtime.ServerMetadata @@ -183,6 +319,23 @@ func request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler } +func local_request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.UInt64Value + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateUInt64Value(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq wrappers.BytesValue var metadata runtime.ServerMetadata @@ -200,6 +353,23 @@ func request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler r } +func local_request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq wrappers.BytesValue + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateBytesValue(ctx, &protoReq) + return msg, metadata, err + +} + func request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -217,6 +387,249 @@ func request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtim } +func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateEmpty(ctx, &protoReq) + return msg, metadata, err + +} + +// WrappersService local server register +func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer) error { + + mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_Create_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateStringValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateStringValue_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateStringValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateInt32Value_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateInt64Value_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateFloatValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateFloatValue_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateFloatValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateDoubleValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateDoubleValue_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateDoubleValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateBoolValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateBoolValue_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateBoolValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateUInt32Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateUInt32Value_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateUInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateUInt64Value_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateUInt64Value_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateUInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateBytesValue_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateBytesValue_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateBytesValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_WrappersService_CreateEmpty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_WrappersService_CreateEmpty_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_WrappersService_CreateEmpty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterWrappersServiceHandlerFromEndpoint is same as RegisterWrappersServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { From b1af1482073baefd44ef2066110576e263889618 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Tue, 18 Jun 2019 14:21:59 +0800 Subject: [PATCH 0188/1518] Support stream through DialOption grpc.WithContextDialer(), not directly. (cherry picked from commit fa54ccf81d6254afc2aa1fdb215dbc25fc9043b6) --- .../examplepb/a_bit_of_everything.pb.gw.go | 58 ++++- .../proto/examplepb/echo_service.pb.gw.go | 29 ++- .../proto/examplepb/flow_combination.pb.gw.go | 130 +++++----- .../examplepb/response_body_service.pb.gw.go | 29 ++- examples/proto/examplepb/stream.pb.gw.go | 64 ++++- .../unannotated_echo_service.pb.gw.go | 29 ++- examples/proto/examplepb/wrappers.pb.gw.go | 29 ++- .../gengateway/template.go | 233 ++++++++++++++++++ 8 files changed, 521 insertions(+), 80 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index b1c9fcd2923..43fb890813e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -1997,8 +1997,33 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r } -// ABitOfEverythingService local server register -func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer) error { +// RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to "mux". +// UnaryRPC :call ABitOfEverythingServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterABitOfEverythingServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterABitOfEverythingServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -2403,8 +2428,33 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt return nil } -// CamelCaseServiceName local server register -func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer) error { +// RegisterCamelCaseServiceNameHandlerServer registers the http handlers for service CamelCaseServiceName to "mux". +// UnaryRPC :call CamelCaseServiceNameServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterCamelCaseServiceNameHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterCamelCaseServiceNameHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) error { mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index a9ef0451e5f..fae175b770f 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -570,8 +570,33 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti } -// EchoService local server register -func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer) error { +// RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to "mux". +// UnaryRPC :call EchoServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterEchoServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index dfce88514f2..b11c2782b16 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -63,8 +63,6 @@ func request_FlowCombination_RpcEmptyStream_0(ctx context.Context, marshaler run } -// TODO server-streaming-request - func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.StreamEmptyRpc(ctx) @@ -109,8 +107,6 @@ func request_FlowCombination_StreamEmptyRpc_0(ctx context.Context, marshaler run } -// TODO client-streaming-request - func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_StreamEmptyStreamClient, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.StreamEmptyStream(ctx) @@ -163,8 +159,6 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler return stream, metadata, nil } -// TODO bidi-streaming-request - func request_FlowCombination_RpcBodyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -980,8 +974,6 @@ func request_FlowCombination_RpcBodyStream_0(ctx context.Context, marshaler runt } -// TODO server-streaming-request - func request_FlowCombination_RpcBodyStream_1(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -1039,8 +1031,6 @@ func request_FlowCombination_RpcBodyStream_1(ctx context.Context, marshaler runt } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcBodyStream_2 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -1069,8 +1059,6 @@ func request_FlowCombination_RpcBodyStream_2(ctx context.Context, marshaler runt } -// TODO server-streaming-request - func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (FlowCombination_RpcBodyStreamClient, runtime.ServerMetadata, error) { var protoReq NonEmptyProto var metadata runtime.ServerMetadata @@ -1125,8 +1113,6 @@ func request_FlowCombination_RpcBodyStream_3(ctx context.Context, marshaler runt } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcBodyStream_4 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -1163,8 +1149,6 @@ func request_FlowCombination_RpcBodyStream_4(ctx context.Context, marshaler runt } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcBodyStream_5 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -1219,8 +1203,6 @@ func request_FlowCombination_RpcBodyStream_5(ctx context.Context, marshaler runt } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcBodyStream_6 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -1267,8 +1249,6 @@ func request_FlowCombination_RpcBodyStream_6(ctx context.Context, marshaler runt } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcPathSingleNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) @@ -1315,8 +1295,6 @@ func request_FlowCombination_RpcPathSingleNestedStream_0(ctx context.Context, ma } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcPathNestedStream_0 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2, "b": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 3, 1, 2, 4, 5}} ) @@ -1382,8 +1360,6 @@ func request_FlowCombination_RpcPathNestedStream_0(ctx context.Context, marshale } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcPathNestedStream_1 = &utilities.DoubleArray{Encoding: map[string]int{"a": 0, "str": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} ) @@ -1430,8 +1406,6 @@ func request_FlowCombination_RpcPathNestedStream_1(ctx context.Context, marshale } -// TODO server-streaming-request - var ( filter_FlowCombination_RpcPathNestedStream_2 = &utilities.DoubleArray{Encoding: map[string]int{"c": 0, "a": 1, "str": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 3, 2, 4}} ) @@ -1486,10 +1460,54 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale } -// TODO server-streaming-request +// RegisterFlowCombinationHandlerServer registers the http handlers for service FlowCombination to "mux". +// UnaryRPC :call FlowCombinationServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterFlowCombinationHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterFlowCombinationHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { + + conn, err := grpc.Dial("", opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + }() + }() -// FlowCombination local server register -func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer) error { + client := NewFlowCombinationClient(conn) mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -1520,14 +1538,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcEmptyStream_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1540,7 +1558,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_StreamEmptyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_StreamEmptyRpc_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1560,14 +1578,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_StreamEmptyStream_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_StreamEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_StreamEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1800,14 +1818,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1820,14 +1838,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1840,14 +1858,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_2(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1860,14 +1878,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_3(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_3(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_3(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1880,14 +1898,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_4(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_4(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_4(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1900,14 +1918,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_5(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_5(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_5(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1920,14 +1938,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyStream_6(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_6(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcBodyStream_6(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1940,14 +1958,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathSingleNestedStream_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcPathSingleNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1960,14 +1978,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedStream_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcPathNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1980,14 +1998,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedStream_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_1(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcPathNestedStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2000,14 +2018,14 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedStream_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_2(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_FlowCombination_RpcPathNestedStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 360d9b204c3..3d316a97efe 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -190,8 +190,33 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context } -// ResponseBodyService local server register -func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer) error { +// RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to "mux". +// UnaryRPC :call ResponseBodyServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterResponseBodyServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterResponseBodyServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) error { mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 4157d741a18..b6d6cfc4881 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -74,8 +74,6 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M } -// TODO client-streaming-request - func request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_ListClient, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -93,8 +91,6 @@ func request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshal } -// TODO server-streaming-request - func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_BulkEchoClient, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata stream, err := client.BulkEcho(ctx) @@ -147,10 +143,54 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar return stream, metadata, nil } -// TODO bidi-streaming-request +// RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to "mux". +// UnaryRPC :call StreamServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterStreamServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterStreamServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { + + conn, err := grpc.Dial("", opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + }() + }() -// StreamService local server register -func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer) error { + client := NewStreamServiceClient(conn) mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -161,7 +201,7 @@ func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeM runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_StreamService_BulkCreate_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_StreamService_BulkCreate_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -181,14 +221,14 @@ func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeM runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_StreamService_List_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_StreamService_List_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_StreamService_List_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -201,14 +241,14 @@ func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeM runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_StreamService_BulkEcho_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := request_StreamService_BulkEcho_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - // TODO + forward_StreamService_BulkEcho_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 09f91ca367e..263f9228361 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -255,8 +255,33 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars } -// UnannotatedEchoService local server register -func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer) error { +// RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to "mux". +// UnaryRPC :call UnannotatedEchoServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterUnannotatedEchoServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterUnannotatedEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 824c098fa94..825bc012a7b 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -404,8 +404,33 @@ func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler } -// WrappersService local server register -func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer) error { +// RegisterWrappersServiceHandlerServer registers the http handlers for service WrappersService to "mux". +// UnaryRPC :call WrappersServiceServer directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.RegisterWrappersServiceHandlerServer( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// RegisterWrappersServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 97770d93bf0..9b5f62abda1 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -167,6 +167,15 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { }); err != nil { return "", err } + + // Local + if err := localHandlerTemplate.Execute(w, binding{ + Binding: b, + Registry: reg, + AllowPatchFeature: p.AllowPatchFeature, + }); err != nil { + return "", err + } } } if methodWithBindingsSeen { @@ -187,6 +196,11 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { RegisterFuncSuffix: p.RegisterFuncSuffix, AssumeColonVerb: assumeColonVerb, } + // Local + if err := localTrailerTemplate.Execute(w, tp); err != nil { + return "", err + } + if err := trailerTemplate.Execute(w, tp); err != nil { return "", err } @@ -432,6 +446,225 @@ var ( } `)) + localHandlerTemplate = template.Must(template.New("local-handler").Parse(` +{{if and .Method.GetClientStreaming .Method.GetServerStreaming}} +{{else if .Method.GetClientStreaming}} +{{else if .Method.GetServerStreaming}} +{{else}} +{{template "local-client-rpc-request-func" .}} +{{end}} +`)) + + _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.Replace(` +{{if .Method.GetServerStreaming}} +{{else}} +func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.GetName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) +{{end}}`, "\n", "", -1))) + + _ = template.Must(localHandlerTemplate.New("local-client-rpc-request-func").Parse(` +{{$AllowPatchFeature := .AllowPatchFeature}} +{{template "local-request-func-signature" .}} { + var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} + var metadata runtime.ServerMetadata +{{if .Body}} + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} + if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { + runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) + } {{if not (eq "*" .GetBodyFieldPath)}} else { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.{{.FieldMaskField}} = fieldMask + } + } {{end}} + {{end}} +{{end}} +{{if .PathParams}} + var ( + val string +{{- if .HasEnumPathParam}} + e int32 +{{- end}} +{{- if .HasRepeatedEnumPathParam}} + es []int32 +{{- end}} + ok bool + err error + _ = err + ) + {{$binding := .}} + {{range $param := .PathParams}} + {{$enum := $binding.LookupEnum $param}} + val, ok = pathParams[{{$param | printf "%q"}}] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", {{$param | printf "%q"}}) + } +{{if $param.IsNestedProto3}} + err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) +{{else if $enum}} + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) +{{else}} + {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) +{{end}} + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) + } +{{if and $enum $param.IsRepeated}} + s := make([]{{$enum.GoType $param.Target.Message.File.GoPkg.Path}}, len(es)) + for i, v := range es { + s[i] = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(v) + } + {{$param.AssignableExpr "protoReq"}} = s +{{else if $enum}} + {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}(e) +{{end}} + {{end}} +{{end}} +{{if .HasQueryParam}} + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } +{{end}} +{{if .Method.GetServerStreaming}} + // TODO +{{else}} + msg, err := server.{{.Method.GetName}}(ctx, &protoReq) + return msg, metadata, err +{{end}} +}`)) + + localTrailerTemplate = template.Must(template.New("local-trailer").Parse(` +{{$UseRequestContext := .UseRequestContext}} +{{range $svc := .Services}} +// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server registers the http handlers for service {{$svc.GetName}} to "mux". +// UnaryRPC :call {{$svc.GetName}}Server directly. +// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. +// +// bcLis := bufconn.Listen(1024 * 1024) +// go s.Serve(bcLis) +// +// ctx := context.Background() +// ctx, cancel := context.WithCancel(ctx) +// defer cancel() +// +// mux := runtime.NewServeMux() +// err := pb.Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server( +// ctx, +// mux, +// &srv, +// []grpc.DialOption{ +// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { +// return bcLis.Dial() +// }), +// }, +// ) +// +// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server does not support stream rpc call directly, and grpc-go have an issue "Feature Request: +// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { + {{$streaming := 0}} + {{range $m := $svc.Methods}} + {{if or $m.GetClientStreaming $m.GetServerStreaming}} + {{$streaming = 1}} + {{end}} + {{end}} + {{if eq $streaming 1}} + conn, err := grpc.Dial("", opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn: %v", cerr) + } + }() + }() + + client := New{{$svc.GetName}}Client(conn) + {{end}} + + {{range $m := $svc.Methods}} + {{range $b := $m.Bindings}} + {{if or $m.GetClientStreaming $m.GetServerStreaming}} + mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + {{- if $UseRequestContext }} + ctx, cancel := context.WithCancel(req.Context()) + {{- else -}} + ctx, cancel := context.WithCancel(ctx) + {{- end }} + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + {{if $m.GetServerStreaming}} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + {{else}} + {{ if $b.ResponseBody }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + {{ else }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + {{end}} + {{end}} + }) + {{else}} + mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + {{- if $UseRequestContext }} + ctx, cancel := context.WithCancel(req.Context()) + {{- else -}} + ctx, cancel := context.WithCancel(ctx) + {{- end }} + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + {{ if $b.ResponseBody }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + {{ else }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + {{end}} + }) + {{end}} + {{end}} + {{end}} + return nil +} +{{end}}`)) + trailerTemplate = template.Must(template.New("trailer").Parse(` {{$UseRequestContext := .UseRequestContext}} {{range $svc := .Services}} From 8baf57f92f5b6e8d48735ba756f003fddda829d9 Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Wed, 31 Jul 2019 08:57:48 +0800 Subject: [PATCH 0189/1518] Update protoc-gen-grpc-gateway/gengateway/template.go Co-Authored-By: Johan Brandhorst --- protoc-gen-grpc-gateway/gengateway/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 9b5f62abda1..bdd0960eb4b 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -545,7 +545,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct {{range $svc := .Services}} // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server registers the http handlers for service {{$svc.GetName}} to "mux". // UnaryRPC :call {{$svc.GetName}}Server directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) From 36f62acaf12587af3c97beea576f8c38e5b7735e Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Wed, 31 Jul 2019 09:02:51 +0800 Subject: [PATCH 0190/1518] Update protoc-gen-grpc-gateway/gengateway/template.go Co-Authored-By: Johan Brandhorst --- protoc-gen-grpc-gateway/gengateway/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index bdd0960eb4b..59e768953d8 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -569,7 +569,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) (err error) { {{$streaming := 0}} {{range $m := $svc.Methods}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} From 15eaac834cd6416ab4c2714a98e2aa7b96658149 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Wed, 31 Jul 2019 09:26:56 +0800 Subject: [PATCH 0191/1518] regenerate `*.pb.gw.go` files --- examples/proto/examplepb/a_bit_of_everything.pb.gw.go | 8 ++++---- examples/proto/examplepb/echo_service.pb.gw.go | 4 ++-- examples/proto/examplepb/flow_combination.pb.gw.go | 4 ++-- examples/proto/examplepb/response_body_service.pb.gw.go | 4 ++-- examples/proto/examplepb/stream.pb.gw.go | 4 ++-- .../proto/examplepb/unannotated_echo_service.pb.gw.go | 4 ++-- examples/proto/examplepb/wrappers.pb.gw.go | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 43fb890813e..cc3fdc51d18 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -1999,7 +1999,7 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r // RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to "mux". // UnaryRPC :call ABitOfEverythingServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -2023,7 +2023,7 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r // // RegisterABitOfEverythingServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) error { +func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) (err error) { mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -2430,7 +2430,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt // RegisterCamelCaseServiceNameHandlerServer registers the http handlers for service CamelCaseServiceName to "mux". // UnaryRPC :call CamelCaseServiceNameServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -2454,7 +2454,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt // // RegisterCamelCaseServiceNameHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) error { +func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) (err error) { mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index fae175b770f..bfbbbc14005 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -572,7 +572,7 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti // RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to "mux". // UnaryRPC :call EchoServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -596,7 +596,7 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti // // RegisterEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) error { +func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) (err error) { mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b11c2782b16..3cc01b9d43a 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1462,7 +1462,7 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // RegisterFlowCombinationHandlerServer registers the http handlers for service FlowCombination to "mux". // UnaryRPC :call FlowCombinationServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -1486,7 +1486,7 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // // RegisterFlowCombinationHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { +func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) (err error) { conn, err := grpc.Dial("", opts...) if err != nil { diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 3d316a97efe..45332fad13a 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -192,7 +192,7 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context // RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to "mux". // UnaryRPC :call ResponseBodyServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -216,7 +216,7 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context // // RegisterResponseBodyServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) error { +func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) (err error) { mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index b6d6cfc4881..b5da899be70 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -145,7 +145,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to "mux". // UnaryRPC :call StreamServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -169,7 +169,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // // RegisterStreamServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { +func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) (err error) { conn, err := grpc.Dial("", opts...) if err != nil { diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 263f9228361..40fc15038e9 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -257,7 +257,7 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars // RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to "mux". // UnaryRPC :call UnannotatedEchoServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -281,7 +281,7 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars // // RegisterUnannotatedEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) error { +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) (err error) { mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 825bc012a7b..c9691cdea7b 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -406,7 +406,7 @@ func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler // RegisterWrappersServiceHandlerServer registers the http handlers for service WrappersService to "mux". // UnaryRPC :call WrappersServiceServer directly. -// StreamingRPC :need dial the same port for grpc.Server, we can use bufconn package(grpc-go/test/bufconn). +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. // // bcLis := bufconn.Listen(1024 * 1024) @@ -430,7 +430,7 @@ func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler // // RegisterWrappersServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: // Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) error { +func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) (err error) { mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) From 78791fdc8021b6efc19a4a99ee910033b943d2cf Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Sat, 3 Aug 2019 07:31:49 +0800 Subject: [PATCH 0192/1518] streaming return Unimplemented error --- .../examplepb/a_bit_of_everything.pb.gw.go | 50 +-- .../proto/examplepb/echo_service.pb.gw.go | 25 +- .../proto/examplepb/flow_combination.pb.gw.go | 298 +----------------- .../examplepb/response_body_service.pb.gw.go | 25 +- examples/proto/examplepb/stream.pb.gw.go | 100 +----- .../unannotated_echo_service.pb.gw.go | 25 +- examples/proto/examplepb/wrappers.pb.gw.go | 25 +- .../gengateway/template.go | 75 +---- 8 files changed, 27 insertions(+), 596 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index cc3fdc51d18..32080de1dac 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2000,30 +2000,7 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r // RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to "mux". // UnaryRPC :call ABitOfEverythingServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterABitOfEverythingServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterABitOfEverythingServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) (err error) { +func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -2431,30 +2408,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt // RegisterCamelCaseServiceNameHandlerServer registers the http handlers for service CamelCaseServiceName to "mux". // UnaryRPC :call CamelCaseServiceNameServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterCamelCaseServiceNameHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterCamelCaseServiceNameHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) (err error) { +func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) error { mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index bfbbbc14005..f86a9be9d25 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -573,30 +573,7 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti // RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to "mux". // UnaryRPC :call EchoServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterEchoServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) (err error) { +func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 3cc01b9d43a..ed9700e5b70 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1463,51 +1463,7 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // RegisterFlowCombinationHandlerServer registers the http handlers for service FlowCombination to "mux". // UnaryRPC :call FlowCombinationServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterFlowCombinationHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterFlowCombinationHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) (err error) { - - conn, err := grpc.Dial("", opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - }() - }() - - client := NewFlowCombinationClient(conn) +func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -1530,63 +1486,15 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_StreamEmptyRpc_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_StreamEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_StreamEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_StreamEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1810,223 +1718,47 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_1(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_2(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_3(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_3(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_4(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_4(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_5(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_5(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcBodyStream_6(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcBodyStream_6(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcPathSingleNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcPathNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcPathNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcPathNestedStream_1(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcPathNestedStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_FlowCombination_RpcPathNestedStream_2(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_FlowCombination_RpcPathNestedStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) return nil diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 45332fad13a..8b82a1b816e 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -193,30 +193,7 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context // RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to "mux". // UnaryRPC :call ResponseBodyServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterResponseBodyServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterResponseBodyServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) (err error) { +func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) error { mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index b5da899be70..04e76615e3f 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -146,110 +146,18 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to "mux". // UnaryRPC :call StreamServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterStreamServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterStreamServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) (err error) { - - conn, err := grpc.Dial("", opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - }() - }() - - client := NewStreamServiceClient(conn) +func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_StreamService_BulkCreate_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_StreamService_BulkCreate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("GET", pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_StreamService_List_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_StreamService_List_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_StreamService_BulkEcho_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_StreamService_BulkEcho_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) return nil diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 40fc15038e9..fdb9f186e19 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -258,30 +258,7 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars // RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to "mux". // UnaryRPC :call UnannotatedEchoServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterUnannotatedEchoServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterUnannotatedEchoServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) (err error) { +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index c9691cdea7b..beaf2bf5fc4 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -407,30 +407,7 @@ func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler // RegisterWrappersServiceHandlerServer registers the http handlers for service WrappersService to "mux". // UnaryRPC :call WrappersServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.RegisterWrappersServiceHandlerServer( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// RegisterWrappersServiceHandlerServer does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) (err error) { +func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) error { mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 59e768953d8..e1d5393e94c 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -546,90 +546,19 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server registers the http handlers for service {{$svc.GetName}} to "mux". // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// If the gateway proto have stream must add DialOption grpc.WithContextDialer. e.g. -// -// bcLis := bufconn.Listen(1024 * 1024) -// go s.Serve(bcLis) -// -// ctx := context.Background() -// ctx, cancel := context.WithCancel(ctx) -// defer cancel() -// -// mux := runtime.NewServeMux() -// err := pb.Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server( -// ctx, -// mux, -// &srv, -// []grpc.DialOption{ -// grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { -// return bcLis.Dial() -// }), -// }, -// ) -// -// Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server does not support stream rpc call directly, and grpc-go have an issue "Feature Request: -// Add support for In-Process transport #906". So it is currently EXPERIMENTAL and subject to change. -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) (err error) { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { {{$streaming := 0}} {{range $m := $svc.Methods}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} {{$streaming = 1}} {{end}} {{end}} - {{if eq $streaming 1}} - conn, err := grpc.Dial("", opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn: %v", cerr) - } - }() - }() - - client := New{{$svc.GetName}}Client(conn) - {{end}} {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - {{- if $UseRequestContext }} - ctx, cancel := context.WithCancel(req.Context()) - {{- else -}} - ctx, cancel := context.WithCancel(ctx) - {{- end }} - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - {{if $m.GetServerStreaming}} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - {{else}} - {{ if $b.ResponseBody }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) - {{ else }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - {{end}} - {{end}} + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) {{else}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { From 862728f334c92dca41c4a44af47d9f630f1874a3 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Sat, 3 Aug 2019 07:43:58 +0800 Subject: [PATCH 0193/1518] remove un used code --- protoc-gen-grpc-gateway/gengateway/template.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index e1d5393e94c..00dcd2709b1 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -547,13 +547,6 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { - {{$streaming := 0}} - {{range $m := $svc.Methods}} - {{if or $m.GetClientStreaming $m.GetServerStreaming}} - {{$streaming = 1}} - {{end}} - {{end}} - {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} From a0da87c721021fb7229cb6f25f345c3ff1cd3cdb Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Sat, 3 Aug 2019 13:27:19 +0800 Subject: [PATCH 0194/1518] return Unimplemented error when registering service have stream method --- .../proto/examplepb/flow_combination.pb.gw.go | 16 ++-------------- examples/proto/examplepb/stream.pb.gw.go | 5 ++--- protoc-gen-grpc-gateway/gengateway/template.go | 11 ++++++++++- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index ed9700e5b70..b64993cd5db 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1465,6 +1465,8 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1486,15 +1488,12 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1718,47 +1717,36 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) return nil diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 04e76615e3f..42e42dc53af 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -148,16 +148,15 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("GET", pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) mux.Handle("POST", pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) return nil diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 00dcd2709b1..3f746439753 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -547,11 +547,20 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { + {{$streaming := 0}} + {{range $m := $svc.Methods}} + {{if or $m.GetClientStreaming $m.GetServerStreaming}} + {{$streaming = 1}} + {{end}} + {{end}} + {{if eq $streaming 1}} + return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + {{end}} + {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") }) {{else}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { From 47c6a88c9ec2bf42d1facf333fbc7275d06a5fa8 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Sat, 3 Aug 2019 14:49:31 +0800 Subject: [PATCH 0195/1518] return error when streaming method call --- .../proto/examplepb/flow_combination.pb.gw.go | 58 ++++++++++++++++++- examples/proto/examplepb/stream.pb.gw.go | 14 ++++- .../gengateway/template.go | 14 ++--- 3 files changed, 72 insertions(+), 14 deletions(-) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index b64993cd5db..8d5a83e6e37 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1465,8 +1465,6 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1488,12 +1486,24 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_StreamEmptyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -1717,36 +1727,80 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcBodyStream_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcPathSingleNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_FlowCombination_RpcPathNestedStream_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) return nil diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 42e42dc53af..117e0903bf5 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -148,15 +148,25 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("GET", pattern_StreamService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) mux.Handle("POST", pattern_StreamService_BulkEcho_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) return nil diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 3f746439753..a524fa25fc9 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -547,20 +547,14 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { - {{$streaming := 0}} - {{range $m := $svc.Methods}} - {{if or $m.GetClientStreaming $m.GetServerStreaming}} - {{$streaming = 1}} - {{end}} - {{end}} - {{if eq $streaming 1}} - return status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - {{end}} - {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) {{else}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { From e70d12881bf6b263ad98efb7a21e87e34b780712 Mon Sep 17 00:00:00 2001 From: Hobo86 Date: Tue, 20 Aug 2019 21:54:24 +0800 Subject: [PATCH 0196/1518] add template in process test --- .../gengateway/template_test.go | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index fbf54e6a69d..b18162e4266 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -400,6 +400,182 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } } +func TestApplyTemplateInProcess(t *testing.T) { + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String("NestedMessage"), + Number: proto.Int32(1), + }, + }, + } + nesteddesc := &protodescriptor.DescriptorProto{ + Name: proto.String("NestedMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("int32"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("bool"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Number: proto.Int32(2), + }, + }, + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Echo"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + ClientStreaming: proto.Bool(true), + } + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + for _, spec := range []struct { + clientStreaming bool + serverStreaming bool + sigWant []string + }{ + { + clientStreaming: false, + serverStreaming: false, + sigWant: []string{ + `func local_request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ExampleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`, + `resp, md, err := local_request_ExampleService_Echo_0(rctx, inboundMarshaler, server, req, pathParams)`, + }, + }, + { + clientStreaming: true, + serverStreaming: true, + sigWant: []string{ + `err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")`, + }, + }, + { + clientStreaming: true, + serverStreaming: false, + sigWant: []string{ + `err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")`, + }, + }, + { + clientStreaming: false, + serverStreaming: true, + sigWant: []string{ + `err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")`, + }, + }, + } { + meth.ClientStreaming = proto.Bool(spec.clientStreaming) + meth.ServerStreaming = proto.Bool(spec.serverStreaming) + + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + nested := &descriptor.Message{ + DescriptorProto: nesteddesc, + } + + nestedField := &descriptor.Field{ + Message: msg, + FieldDescriptorProto: msg.GetField()[0], + } + intField := &descriptor.Field{ + Message: nested, + FieldDescriptorProto: nested.GetField()[0], + } + boolField := &descriptor.Field{ + Message: nested, + FieldDescriptorProto: nested.GetField()[1], + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg, nested}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "nested", + Target: nestedField, + }, + { + Name: "int32", + Target: intField, + }, + }), + Target: intField, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "nested", + Target: nestedField, + }, + { + Name: "bool", + Target: boolField, + }, + }), + }, + }, + }, + }, + }, + }, + }, + } + got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + for _, want := range spec.sigWant { + if !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + } + + if want := `func RegisterExampleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ExampleServiceServer, opts []grpc.DialOption) error {`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } + } +} + func TestAllowPatchFeature(t *testing.T) { updateMaskDesc := &protodescriptor.FieldDescriptorProto{ Name: proto.String("UpdateMask"), From a9bbe40ed238db18f710b0e3d2970348c8fcec41 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 28 Aug 2019 11:37:40 +0100 Subject: [PATCH 0197/1518] Generate changelog for 1.10.0 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 735a96a3d4d..f42367a063c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## [v1.10.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.10.0) (2019-08-28) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.6...v1.10.0) + +**Implemented enhancements:** + +- allow protobuf well known types in params [\#400](https://github.com/grpc-ecosystem/grpc-gateway/issues/400) +- Add a register, so that the gRPC service can be invoked in-process to provide a HTTP server. [\#947](https://github.com/grpc-ecosystem/grpc-gateway/pull/947) ([hb-chen](https://github.com/hb-chen)) + +**Fixed bugs:** + +- grpc-gateway don't work well when using github.com/golang/protobuf/ptypes/struct with streaming [\#999](https://github.com/grpc-ecosystem/grpc-gateway/issues/999) + +**Closed issues:** + +- Allow final url path parameter to be optional [\#1005](https://github.com/grpc-ecosystem/grpc-gateway/issues/1005) +- Update integration test dependencies [\#1004](https://github.com/grpc-ecosystem/grpc-gateway/issues/1004) +- Suggestion: Continuous Fuzzing [\#998](https://github.com/grpc-ecosystem/grpc-gateway/issues/998) +- Why grpc gateway does not call grpc callback directly? [\#952](https://github.com/grpc-ecosystem/grpc-gateway/issues/952) + +**Merged pull requests:** + +- Allow overriding the primitive type of fields [\#1003](https://github.com/grpc-ecosystem/grpc-gateway/pull/1003) ([snowzach](https://github.com/snowzach)) +- Add Continuous Fuzzing Integration via fuzzit.dev [\#1001](https://github.com/grpc-ecosystem/grpc-gateway/pull/1001) ([yevgenypats](https://github.com/yevgenypats)) + ## [v1.9.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.6) (2019-08-16) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.5...v1.9.6) @@ -18,6 +42,7 @@ - Disable Windows CI Bazel [\#996](https://github.com/grpc-ecosystem/grpc-gateway/pull/996) ([achew22](https://github.com/achew22)) - Correct HTTPBody doc [\#995](https://github.com/grpc-ecosystem/grpc-gateway/pull/995) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.9.6 [\#993](https://github.com/grpc-ecosystem/grpc-gateway/pull/993) ([johanbrandhorst](https://github.com/johanbrandhorst)) - protoc-gen-swagger: correctly type struct.proto types [\#990](https://github.com/grpc-ecosystem/grpc-gateway/pull/990) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Camel case backward compatible in Swagger doc [\#988](https://github.com/grpc-ecosystem/grpc-gateway/pull/988) ([xin-au](https://github.com/xin-au)) - Add doc for opentracing support [\#987](https://github.com/grpc-ecosystem/grpc-gateway/pull/987) ([vthiery](https://github.com/vthiery)) diff --git a/Makefile b/Makefile index f48004971f5..a5751064323 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.9.6 + --future-release=v1.10.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 2da5bfafe05e07c9401137126e55eb0ca4f76472 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Thu, 29 Aug 2019 18:08:17 -0700 Subject: [PATCH 0198/1518] Fix hand-crafted protobuf message (#1016) errorBody is an improperly hand-crafted protobuf Message. In particular, field number 1 is used twice, causing this to message to crash in the v2 re-implementation of Go protobufs. This PR modifies the field numbers to be unique. Since Error is a special field not in status.proto, we choose a large field number to avoid conflicting with any new field that may be added to the real Status message. We also fix the field numbers to truly match up with Status. --- runtime/errors.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/errors.go b/runtime/errors.go index ad945788dc6..a36080713ce 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -66,12 +66,12 @@ var ( ) type errorBody struct { - Error string `protobuf:"bytes,1,name=error" json:"error"` + Error string `protobuf:"bytes,100,name=error" json:"error"` // This is to make the error more compatible with users that expect errors to be Status objects: // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto // It should be the exact same message as the Error field. - Message string `protobuf:"bytes,1,name=message" json:"message"` - Code int32 `protobuf:"varint,2,name=code" json:"code"` + Code int32 `protobuf:"varint,1,name=code" json:"code"` + Message string `protobuf:"bytes,2,name=message" json:"message"` Details []*any.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"` } From c9c752b181e294657aa721c7397690390f7b728f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2019 00:01:29 -0600 Subject: [PATCH 0199/1518] Bump nokogiri from 1.8.2 to 1.10.4 in /docs (#1007) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.8.2 to 1.10.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.8.2...v1.10.4) Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 6bc4cb1f8f7..0ec5af07799 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -201,7 +201,7 @@ GEM rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) mercenary (0.3.6) - mini_portile2 (2.3.0) + mini_portile2 (2.4.0) minima (2.4.1) jekyll (~> 3.5) jekyll-feed (~> 0.9) @@ -209,8 +209,8 @@ GEM minitest (5.11.3) multipart-post (2.0.0) net-dns (0.8.0) - nokogiri (1.8.2) - mini_portile2 (~> 2.3.0) + nokogiri (1.10.4) + mini_portile2 (~> 2.4.0) octokit (4.8.0) sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.1) From 8572f50517d87f9f81b3524e5a13fcbc180d9788 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2019 00:01:38 -0600 Subject: [PATCH 0200/1518] Bump rubyzip from 1.2.1 to 1.2.3 in /docs (#1008) Bumps [rubyzip](https://github.com/rubyzip/rubyzip) from 1.2.1 to 1.2.3. - [Release notes](https://github.com/rubyzip/rubyzip/releases) - [Changelog](https://github.com/rubyzip/rubyzip/blob/master/Changelog.md) - [Commits](https://github.com/rubyzip/rubyzip/compare/v1.2.1...v1.2.3) Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 0ec5af07799..16d37d39e96 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -223,7 +223,7 @@ GEM ruby-enum (0.7.2) i18n ruby_dep (1.5.0) - rubyzip (1.2.1) + rubyzip (1.2.3) safe_yaml (1.0.4) sass (3.5.6) sass-listen (~> 4.0.0) From b0c7159cbaa8e7a42749513c89402925a849a736 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2019 00:01:55 -0600 Subject: [PATCH 0201/1518] Bump ffi from 1.9.23 to 1.11.1 in /docs (#1009) Bumps [ffi](https://github.com/ffi/ffi) from 1.9.23 to 1.11.1. - [Release notes](https://github.com/ffi/ffi/releases) - [Changelog](https://github.com/ffi/ffi/blob/master/CHANGELOG.md) - [Commits](https://github.com/ffi/ffi/compare/1.9.23...1.11.1) Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 16d37d39e96..9bf6baf5847 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -25,7 +25,7 @@ GEM execjs (2.7.0) faraday (0.14.0) multipart-post (>= 1.2, < 3) - ffi (1.9.23) + ffi (1.11.1) forwardable-extended (2.6.0) gemoji (3.0.0) github-pages (182) From 2adde8d0718f63509a713069dd1babb914edd513 Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Sat, 31 Aug 2019 04:56:31 +0800 Subject: [PATCH 0202/1518] Remove template func RegisterXXXServer() unused param opts []grpc.DialOption (#1018) --- examples/proto/examplepb/a_bit_of_everything.pb.gw.go | 4 ++-- examples/proto/examplepb/echo_service.pb.gw.go | 2 +- examples/proto/examplepb/flow_combination.pb.gw.go | 2 +- examples/proto/examplepb/response_body_service.pb.gw.go | 2 +- examples/proto/examplepb/stream.pb.gw.go | 2 +- examples/proto/examplepb/unannotated_echo_service.pb.gw.go | 2 +- examples/proto/examplepb/wrappers.pb.gw.go | 2 +- protoc-gen-grpc-gateway/gengateway/template.go | 2 +- protoc-gen-grpc-gateway/gengateway/template_test.go | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 32080de1dac..b86b40cccb1 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2000,7 +2000,7 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r // RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to "mux". // UnaryRPC :call ABitOfEverythingServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer, opts []grpc.DialOption) error { +func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ABitOfEverythingServiceServer) error { mux.Handle("POST", pattern_ABitOfEverythingService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) @@ -2408,7 +2408,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt // RegisterCamelCaseServiceNameHandlerServer registers the http handlers for service CamelCaseServiceName to "mux". // UnaryRPC :call CamelCaseServiceNameServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer, opts []grpc.DialOption) error { +func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CamelCaseServiceNameServer) error { mux.Handle("GET", pattern_CamelCaseServiceName_Empty_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index f86a9be9d25..26c82ddaf77 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -573,7 +573,7 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti // RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to "mux". // UnaryRPC :call EchoServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer, opts []grpc.DialOption) error { +func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EchoServiceServer) error { mux.Handle("POST", pattern_EchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 8d5a83e6e37..13dacf6400c 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1463,7 +1463,7 @@ func request_FlowCombination_RpcPathNestedStream_2(ctx context.Context, marshale // RegisterFlowCombinationHandlerServer registers the http handlers for service FlowCombination to "mux". // UnaryRPC :call FlowCombinationServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer, opts []grpc.DialOption) error { +func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.ServeMux, server FlowCombinationServer) error { mux.Handle("POST", pattern_FlowCombination_RpcEmptyRpc_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 8b82a1b816e..8937e2cad3d 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -193,7 +193,7 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context // RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to "mux". // UnaryRPC :call ResponseBodyServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer, opts []grpc.DialOption) error { +func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ResponseBodyServiceServer) error { mux.Handle("GET", pattern_ResponseBodyService_GetResponseBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index 117e0903bf5..b2629f9a564 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -146,7 +146,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar // RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to "mux". // UnaryRPC :call StreamServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer, opts []grpc.DialOption) error { +func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server StreamServiceServer) error { mux.Handle("POST", pattern_StreamService_BulkCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index fdb9f186e19..04ab538bcf6 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -258,7 +258,7 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars // RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to "mux". // UnaryRPC :call UnannotatedEchoServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer, opts []grpc.DialOption) error { +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server UnannotatedEchoServiceServer) error { mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index beaf2bf5fc4..8896b32124f 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -407,7 +407,7 @@ func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler // RegisterWrappersServiceHandlerServer registers the http handlers for service WrappersService to "mux". // UnaryRPC :call WrappersServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer, opts []grpc.DialOption) error { +func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WrappersServiceServer) error { mux.Handle("POST", pattern_WrappersService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index a524fa25fc9..0751cd3cea7 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -546,7 +546,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server registers the http handlers for service {{$svc.GetName}} to "mux". // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server, opts []grpc.DialOption) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server) error { {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index b18162e4266..eca95556c9a 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -570,7 +570,7 @@ func TestApplyTemplateInProcess(t *testing.T) { } } - if want := `func RegisterExampleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ExampleServiceServer, opts []grpc.DialOption) error {`; !strings.Contains(got, want) { + if want := `func RegisterExampleServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ExampleServiceServer) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } From 2737a624a3045ab839dc1ebcd4e4fc0b142d6bfa Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 30 Aug 2019 22:14:36 +0100 Subject: [PATCH 0203/1518] Generate changelog for 1.11.0 --- CHANGELOG.md | 20 ++++++++++++++++++++ Makefile | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f42367a063c..cb476a4f02a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log +## [v1.11.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.0) (2019-08-30) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.10.0...v1.11.0) + +**Fixed bugs:** + +- protoc-gen-grpc-gateway fails silently after release 1.10 [\#1013](https://github.com/grpc-ecosystem/grpc-gateway/issues/1013) + +**Closed issues:** + +- protoc-gen-swagger does not generate parameters other than body and path parameters. [\#1012](https://github.com/grpc-ecosystem/grpc-gateway/issues/1012) + +**Merged pull requests:** + +- remove template func RegisterXXXServer\(\) unused param opts \[\]grpc.DialOption [\#1018](https://github.com/grpc-ecosystem/grpc-gateway/pull/1018) ([hb-chen](https://github.com/hb-chen)) +- Fix hand-crafted protobuf message [\#1016](https://github.com/grpc-ecosystem/grpc-gateway/pull/1016) ([dsnet](https://github.com/dsnet)) +- Bump ffi from 1.9.23 to 1.11.1 in /docs [\#1009](https://github.com/grpc-ecosystem/grpc-gateway/pull/1009) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump rubyzip from 1.2.1 to 1.2.3 in /docs [\#1008](https://github.com/grpc-ecosystem/grpc-gateway/pull/1008) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump nokogiri from 1.8.2 to 1.10.4 in /docs [\#1007](https://github.com/grpc-ecosystem/grpc-gateway/pull/1007) ([dependabot[bot]](https://github.com/apps/dependabot)) + ## [v1.10.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.10.0) (2019-08-28) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.6...v1.10.0) @@ -21,6 +40,7 @@ **Merged pull requests:** +- Generate changelog for 1.10.0 [\#1011](https://github.com/grpc-ecosystem/grpc-gateway/pull/1011) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Allow overriding the primitive type of fields [\#1003](https://github.com/grpc-ecosystem/grpc-gateway/pull/1003) ([snowzach](https://github.com/snowzach)) - Add Continuous Fuzzing Integration via fuzzit.dev [\#1001](https://github.com/grpc-ecosystem/grpc-gateway/pull/1001) ([yevgenypats](https://github.com/yevgenypats)) diff --git a/Makefile b/Makefile index a5751064323..77adf474592 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.10.0 + --future-release=v1.11.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 9ab2e7e569ec9a82dcbf05b56f47186c1a632448 Mon Sep 17 00:00:00 2001 From: Yevgeny Pats Date: Sat, 31 Aug 2019 10:30:30 +0300 Subject: [PATCH 0204/1518] Fuzzit: use go-fuzz with go-modules support --- .circleci/config.yml | 2 +- fuzzit.sh | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3ce4687d4dd..f4332817307 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -51,7 +51,7 @@ jobs: fuzzit: docker: - image: fuzzitdev/fuzzit:golang1.12-stretch-llvm9 - working_directory: /go/src/github.com/grpc-gateway/grpc-gateway + working_directory: /src/grpc-gateway steps: - checkout - setup_remote_docker diff --git a/fuzzit.sh b/fuzzit.sh index 63d35a57675..e5df5f3f843 100755 --- a/fuzzit.sh +++ b/fuzzit.sh @@ -1,18 +1,16 @@ #!/bin/bash set -xe -# Go-fuzz doesn't support modules yet, so ensure we do everything in the old style GOPATH way -export GO111MODULE="off" +# We use fuzzit fork until go-fuzz will support go-modules +mkdir -p /go/src/github.com/dvyukov +cd /go/src/github.com/dvyukov +git clone https://github.com/fuzzitdev/go-fuzz +cd go-fuzz +go get ./... +go build ./... -# Install go-fuzz -go get -u github.com/dvyukov/go-fuzz/go-fuzz github.com/dvyukov/go-fuzz/go-fuzz-build - -# Compiling fuzz targets in fuzz.go with go-fuzz (https://github.com/dvyukov/go-fuzz) and libFuzzer support -# This is a workaround until go-fuzz has gomodules support https://github.com/dvyukov/go-fuzz/issues/195 -BRANCH=$(git rev-parse --abbrev-ref HEAD) -git branch --set-upstream-to=origin/master $BRANCH - -go get -v -u ./protoc-gen-grpc-gateway/httprule +#go get -v -u ./protoc-gen-grpc-gateway/httprule +cd /src/grpc-gateway go-fuzz-build -libfuzzer -o parse-http-rule.a ./protoc-gen-grpc-gateway/httprule clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule From 6d2b64e3a9edc3d206345280e594703a7d4c5543 Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Sat, 31 Aug 2019 17:37:33 +0800 Subject: [PATCH 0205/1518] Use incoming context for direct server calls (#1021) * invoke in process server need attach md to incoming context * else if code style --- .../examplepb/a_bit_of_everything.pb.gw.go | 42 ++-- .../proto/examplepb/echo_service.pb.gw.go | 14 +- .../proto/examplepb/flow_combination.pb.gw.go | 24 +-- .../examplepb/response_body_service.pb.gw.go | 6 +- .../unannotated_echo_service.pb.gw.go | 8 +- examples/proto/examplepb/wrappers.pb.gw.go | 22 +- .../gengateway/template.go | 2 +- runtime/context.go | 34 ++- runtime/context_test.go | 203 ++++++++++++++++++ 9 files changed, 292 insertions(+), 63 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index b86b40cccb1..11bb93e3bca 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2006,7 +2006,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2026,7 +2026,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2046,7 +2046,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2066,7 +2066,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2086,7 +2086,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2106,7 +2106,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2126,7 +2126,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2146,7 +2146,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2166,7 +2166,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2186,7 +2186,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2206,7 +2206,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2226,7 +2226,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2246,7 +2246,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2266,7 +2266,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2286,7 +2286,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2306,7 +2306,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2326,7 +2326,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2346,7 +2346,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2366,7 +2366,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2386,7 +2386,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2414,7 +2414,7 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index 26c82ddaf77..a0445e04929 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -579,7 +579,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -599,7 +599,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -619,7 +619,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -639,7 +639,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -659,7 +659,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -679,7 +679,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -699,7 +699,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index 13dacf6400c..c69b4f1daae 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -1469,7 +1469,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1510,7 +1510,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1530,7 +1530,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1550,7 +1550,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1570,7 +1570,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1590,7 +1590,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1610,7 +1610,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1630,7 +1630,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1650,7 +1650,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1670,7 +1670,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1690,7 +1690,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1710,7 +1710,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index 8937e2cad3d..e90bba3f44c 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -199,7 +199,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -219,7 +219,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -239,7 +239,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index 04ab538bcf6..e92b4af943c 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -264,7 +264,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -284,7 +284,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -304,7 +304,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -324,7 +324,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 8896b32124f..57ff5f69962 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -413,7 +413,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -433,7 +433,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -453,7 +453,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -473,7 +473,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -493,7 +493,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -513,7 +513,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -533,7 +533,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -553,7 +553,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -573,7 +573,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -593,7 +593,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -613,7 +613,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 0751cd3cea7..4dcc9637d5d 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -565,7 +565,7 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, {{- end }} defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/runtime/context.go b/runtime/context.go index 896057e1e1e..f8083821f3d 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -57,13 +57,39 @@ except that the forwarded destination is not another HTTP service but rather a gRPC service. */ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req) + if err != nil { + return nil, err + } + if md == nil { + return ctx, nil + } + + return metadata.NewOutgoingContext(ctx, md), nil +} + +// AnnotateIncomingContext adds context information such as metadata from the request. +// Attach metadata as incoming context. +func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req) + if err != nil { + return nil, err + } + if md == nil { + return ctx, nil + } + + return metadata.NewIncomingContext(ctx, md), nil +} + +func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, metadata.MD, error) { var pairs []string timeout := DefaultContextTimeout if tm := req.Header.Get(metadataGrpcTimeout); tm != "" { var err error timeout, err = timeoutDecode(tm) if err != nil { - return nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm) + return nil, nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm) } } @@ -80,7 +106,7 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (con if strings.HasSuffix(key, metadataHeaderBinarySuffix) { b, err := decodeBinHeader(val) if err != nil { - return nil, status.Errorf(codes.InvalidArgument, "invalid binary header %s: %s", key, err) + return nil, nil, status.Errorf(codes.InvalidArgument, "invalid binary header %s: %s", key, err) } val = string(b) @@ -111,13 +137,13 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (con ctx, _ = context.WithTimeout(ctx, timeout) } if len(pairs) == 0 { - return ctx, nil + return ctx, nil, nil } md := metadata.Pairs(pairs...) for _, mda := range mux.metadataAnnotators { md = metadata.Join(md, mda(ctx, req)) } - return metadata.NewOutgoingContext(ctx, md), nil + return ctx, md, nil } // ServerMetadata consists of metadata sent from gRPC server. diff --git a/runtime/context_test.go b/runtime/context_test.go index 5f752408a03..93e28eca103 100644 --- a/runtime/context_test.go +++ b/runtime/context_test.go @@ -215,3 +215,206 @@ func TestAnnotateContext_SupportsCustomAnnotators(t *testing.T) { } } } + +func TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) { + ctx := context.Background() + + request, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) + } + request.Header.Add("Some-Irrelevant-Header", "some value") + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + md, ok := metadata.FromIncomingContext(annotated) + if !ok || len(md) != emptyForwardMetaCount { + t.Errorf("Expected %d metadata items in context; got %v", emptyForwardMetaCount, md) + } +} + +func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { + ctx := context.Background() + request, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) + } + request.Header.Add("Some-Irrelevant-Header", "some value") + request.Header.Add("Grpc-Metadata-FooBar", "Value1") + request.Header.Add("Grpc-Metadata-Foo-BAZ", "Value2") + request.Header.Add("Grpc-Metadata-foo-bAz", "Value3") + request.Header.Add("Authorization", "Token 1234567890") + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + md, ok := metadata.FromIncomingContext(annotated) + if got, want := len(md), emptyForwardMetaCount+4; !ok || got != want { + t.Errorf("metadata items in context = %d want %d: %v", got, want, md) + } + if got, want := md["foobar"], []string{"Value1"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["grpcgateway-foobar"] = %q; want %q`, got, want) + } + if got, want := md["foo-baz"], []string{"Value2", "Value3"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["grpcgateway-foo-baz"] = %q want %q`, got, want) + } + if got, want := md["grpcgateway-authorization"], []string{"Token 1234567890"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["grpcgateway-authorization"] = %q want %q`, got, want) + } + if got, want := md["authorization"], []string{"Token 1234567890"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["authorization"] = %q want %q`, got, want) + } +} + +func TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) { + ctx := context.Background() + request, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) + } + + binData := []byte("\x00test-binary-data") + request.Header.Add("Grpc-Metadata-Test-Bin", base64.StdEncoding.EncodeToString(binData)) + + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + md, ok := metadata.FromIncomingContext(annotated) + if !ok || len(md) != emptyForwardMetaCount+1 { + t.Errorf("Expected %d metadata items in context; got %v", emptyForwardMetaCount+1, md) + } + if got, want := md["test-bin"], []string{string(binData)}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["test-bin"] = %q want %q`, got, want) + } +} + +func TestAnnotateIncomingContext_XForwardedFor(t *testing.T) { + ctx := context.Background() + request, err := http.NewRequest("GET", "http://bar.foo.example.com", nil) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://bar.foo.example.com", err) + } + request.Header.Add("X-Forwarded-For", "192.0.2.100") // client + request.RemoteAddr = "192.0.2.200:12345" // proxy + + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + md, ok := metadata.FromIncomingContext(annotated) + if !ok || len(md) != emptyForwardMetaCount+1 { + t.Errorf("Expected %d metadata items in context; got %v", emptyForwardMetaCount+1, md) + } + if got, want := md["x-forwarded-host"], []string{"bar.foo.example.com"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["host"] = %v; want %v`, got, want) + } + // Note: it must be in order client, proxy1, proxy2 + if got, want := md["x-forwarded-for"], []string{"192.0.2.100, 192.0.2.200"}; !reflect.DeepEqual(got, want) { + t.Errorf(`md["x-forwarded-for"] = %v want %v`, got, want) + } +} + +func TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) { + // While run all test, TestAnnotateContext_SupportsTimeouts() will change the DefaultContextTimeout, so reset it to zero. + runtime.DefaultContextTimeout = 0 * time.Second + + ctx := context.Background() + request, err := http.NewRequest("GET", "http://example.com", nil) + if err != nil { + t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) + } + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + if _, ok := annotated.Deadline(); ok { + // no deadline by default + t.Errorf("annotated.Deadline() = _, true; want _, false") + } + + const acceptableError = 50 * time.Millisecond + runtime.DefaultContextTimeout = 10 * time.Second + annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + deadline, ok := annotated.Deadline() + if !ok { + t.Errorf("annotated.Deadline() = _, false; want _, true") + } + if got, want := deadline.Sub(time.Now()), runtime.DefaultContextTimeout; got-want > acceptableError || got-want < -acceptableError { + t.Errorf("deadline.Sub(time.Now()) = %v; want %v; with error %v", got, want, acceptableError) + } + + for _, spec := range []struct { + timeout string + want time.Duration + }{ + { + timeout: "17H", + want: 17 * time.Hour, + }, + { + timeout: "19M", + want: 19 * time.Minute, + }, + { + timeout: "23S", + want: 23 * time.Second, + }, + { + timeout: "1009m", + want: 1009 * time.Millisecond, + }, + { + timeout: "1000003u", + want: 1000003 * time.Microsecond, + }, + { + timeout: "100000007n", + want: 100000007 * time.Nanosecond, + }, + } { + request.Header.Set("Grpc-Timeout", spec.timeout) + annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + deadline, ok := annotated.Deadline() + if !ok { + t.Errorf("annotated.Deadline() = _, false; want _, true; timeout = %q", spec.timeout) + } + if got, want := deadline.Sub(time.Now()), spec.want; got-want > acceptableError || got-want < -acceptableError { + t.Errorf("deadline.Sub(time.Now()) = %v; want %v; with error %v; timeout= %q", got, want, acceptableError, spec.timeout) + } + } +} +func TestAnnotateIncomingContext_SupportsCustomAnnotators(t *testing.T) { + md1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"foo": "bar"}) } + md2 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"baz": "qux"}) } + expected := metadata.New(map[string]string{"foo": "bar", "baz": "qux"}) + request, err := http.NewRequest("GET", "http://example.com", nil) + if err != nil { + t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) + } + annotated, err := runtime.AnnotateIncomingContext(context.Background(), runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request) + if err != nil { + t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) + return + } + actual, _ := metadata.FromIncomingContext(annotated) + for key, e := range expected { + if a, ok := actual[key]; !ok || !reflect.DeepEqual(e, a) { + t.Errorf("metadata.MD[%s] = %v; want %v", key, a, e) + } + } +} From 471f45a5a99a578de7a8638dc7ed29e245bde097 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 2 Sep 2019 18:20:31 +0100 Subject: [PATCH 0206/1518] Generate changelog for 1.11.1 --- CHANGELOG.md | 19 +++++++++++++++++++ Makefile | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb476a4f02a..0c39858b0b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## [v1.11.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.1) (2019-09-02) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.0...v1.11.1) + +**Fixed bugs:** + +- protoc\_gen\_swagger openapiv2\_field definition ignores the type option [\#1002](https://github.com/grpc-ecosystem/grpc-gateway/issues/1002) + +**Closed issues:** + +- AnnotateIncomingContext not declared by package runtime [\#1023](https://github.com/grpc-ecosystem/grpc-gateway/issues/1023) +- Fuzzit CI job is failing unexpectedly [\#1019](https://github.com/grpc-ecosystem/grpc-gateway/issues/1019) +- Bazel Rule? [\#1010](https://github.com/grpc-ecosystem/grpc-gateway/issues/1010) + +**Merged pull requests:** + +- Fuzzit: use go-fuzz with go-modules support [\#1022](https://github.com/grpc-ecosystem/grpc-gateway/pull/1022) ([yevgenypats](https://github.com/yevgenypats)) +- invoke in process server need attach md to incoming context [\#1021](https://github.com/grpc-ecosystem/grpc-gateway/pull/1021) ([hb-chen](https://github.com/hb-chen)) + ## [v1.11.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.0) (2019-08-30) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.10.0...v1.11.0) @@ -13,6 +31,7 @@ **Merged pull requests:** +- Generate changelog for 1.11.0 [\#1020](https://github.com/grpc-ecosystem/grpc-gateway/pull/1020) ([johanbrandhorst](https://github.com/johanbrandhorst)) - remove template func RegisterXXXServer\(\) unused param opts \[\]grpc.DialOption [\#1018](https://github.com/grpc-ecosystem/grpc-gateway/pull/1018) ([hb-chen](https://github.com/hb-chen)) - Fix hand-crafted protobuf message [\#1016](https://github.com/grpc-ecosystem/grpc-gateway/pull/1016) ([dsnet](https://github.com/dsnet)) - Bump ffi from 1.9.23 to 1.11.1 in /docs [\#1009](https://github.com/grpc-ecosystem/grpc-gateway/pull/1009) ([dependabot[bot]](https://github.com/apps/dependabot)) diff --git a/Makefile b/Makefile index 77adf474592..f1af53985ce 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.11.0 + --future-release=v1.11.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 00f5cc7a95f7e9f7d91a87dfeadc1fd0f4955c6a Mon Sep 17 00:00:00 2001 From: Zach Gershman Date: Tue, 3 Sep 2019 08:32:39 -0700 Subject: [PATCH 0207/1518] docs need type assertion on proto.Message (#1026) * docs need type assertion on proto.Message * Update docs/_docs/customizingyourgateway.md Co-Authored-By: Johan Brandhorst --- docs/_docs/customizingyourgateway.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 73286d9f8c9..a22ce80594c 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -104,8 +104,13 @@ Or you might want to mutate the response messages to be returned. 1. Write a filter function. ```go func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error { - w.Header().Set("X-My-Tracking-Token", resp.Token) - resp.Token = "" + t, ok := resp.(*externalpb.Tokenizer) + + if ok { + w.Header().Set("X-My-Tracking-Token", t.Token) + t.Token = "" + } + return nil } ``` From 106549a76266ddf06ef31cd385327729152faa78 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 4 Sep 2019 05:14:49 +0200 Subject: [PATCH 0208/1518] runtime: stop using nil ponters with Unmarshal (#1028) * runtime: stop using nil ponters with Unmarshal Fixes #1025 --- runtime/BUILD.bazel | 1 + runtime/convert.go | 18 +++-- runtime/convert_test.go | 143 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 6 deletions(-) create mode 100644 runtime/convert_test.go diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 20862228ef8..d03ca5c97a2 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -48,6 +48,7 @@ go_test( size = "small", srcs = [ "context_test.go", + "convert_test.go", "errors_test.go", "fieldmask_test.go", "handler_test.go", diff --git a/runtime/convert.go b/runtime/convert.go index a5b3bd6a792..2c279344dc4 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -206,16 +206,22 @@ func BytesSlice(val, sep string) ([][]byte, error) { // Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp. func Timestamp(val string) (*timestamp.Timestamp, error) { - var r *timestamp.Timestamp - err := jsonpb.UnmarshalString(val, r) - return r, err + var r timestamp.Timestamp + err := jsonpb.UnmarshalString(val, &r) + if err != nil { + return nil, err + } + return &r, nil } // Duration converts the given string into a timestamp.Duration. func Duration(val string) (*duration.Duration, error) { - var r *duration.Duration - err := jsonpb.UnmarshalString(val, r) - return r, err + var r duration.Duration + err := jsonpb.UnmarshalString(val, &r) + if err != nil { + return nil, err + } + return &r, nil } // Enum converts the given string into an int32 that should be type casted into the diff --git a/runtime/convert_test.go b/runtime/convert_test.go new file mode 100644 index 00000000000..ffbc0a56553 --- /dev/null +++ b/runtime/convert_test.go @@ -0,0 +1,143 @@ +package runtime_test + +import ( + "encoding/json" + "fmt" + "reflect" + "testing" + + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/duration" + "github.com/golang/protobuf/ptypes/timestamp" + "github.com/grpc-ecosystem/grpc-gateway/runtime" +) + +func TestConvertTimestamp(t *testing.T) { + specs := []struct { + name string + input string + output *timestamp.Timestamp + wanterr error + }{ + { + name: "a valid RFC3339 timestamp", + input: `"2016-05-10T10:19:13.123Z"`, + output: ×tamp.Timestamp{ + Seconds: 1462875553, + Nanos: 123000000, + }, + wanterr: nil, + }, + { + name: "invalid timestamp", + input: `"05-10-2016T10:19:13.123Z"`, + output: nil, + wanterr: fmt.Errorf(`bad Timestamp: parsing time "05-10-2016T10:19:13.123Z" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "0-2016T10:19:13.123Z" as "2006"`), + }, + { + name: "JSON number", + input: "123", + output: nil, + wanterr: &json.UnmarshalTypeError{ + Value: "number", + Type: reflect.TypeOf("123"), + Offset: 3, + }, + }, + { + name: "JSON bool", + input: "true", + output: nil, + wanterr: &json.UnmarshalTypeError{ + Value: "bool", + Type: reflect.TypeOf("123"), + Offset: 4, + }, + }, + } + + for _, spec := range specs { + t.Run(spec.name, func(t *testing.T) { + ts, err := runtime.Timestamp(spec.input) + if spec.wanterr != nil { + if !reflect.DeepEqual(err, spec.wanterr) { + t.Errorf("got unexpected error\n%#v\nexpected\n%#v", err, spec.wanterr) + } + return + } + if !proto.Equal(ts, spec.output) { + t.Errorf( + "when testing %s; got\n%#v\nexpected\n%#v", + spec.name, + ts, + spec.output, + ) + } + }) + } +} + +func TestConvertDuration(t *testing.T) { + specs := []struct { + name string + input string + output *duration.Duration + wanterr error + }{ + { + name: "a valid duration", + input: `"123.456s"`, + output: &duration.Duration{ + Seconds: 123, + Nanos: 456000000, + }, + wanterr: nil, + }, + { + name: "invalid duration", + input: `"123years"`, + output: nil, + wanterr: fmt.Errorf(`bad Duration: time: unknown unit years in duration 123years`), + }, + { + name: "JSON number", + input: "123", + output: nil, + wanterr: &json.UnmarshalTypeError{ + Value: "number", + Type: reflect.TypeOf("123"), + Offset: 3, + }, + }, + { + name: "JSON bool", + input: "true", + output: nil, + wanterr: &json.UnmarshalTypeError{ + Value: "bool", + Type: reflect.TypeOf("123"), + Offset: 4, + }, + }, + } + + for _, spec := range specs { + t.Run(spec.name, func(t *testing.T) { + ts, err := runtime.Duration(spec.input) + if spec.wanterr != nil { + if !reflect.DeepEqual(err, spec.wanterr) { + t.Errorf("got unexpected error\n%#v\nexpected\n%#v", err, spec.wanterr) + } + return + } + if !proto.Equal(ts, spec.output) { + t.Errorf( + "when testing %s; got\n%#v\nexpected\n%#v", + spec.name, + ts, + spec.output, + ) + } + }) + } +} From 3ad0fb96ecfdf73fa2eddb3de116ae98360dbb35 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 4 Sep 2019 10:33:31 +0200 Subject: [PATCH 0209/1518] nitpick a_bit_of_everything.proto (#1030) * examples/ABE: fix typo, replace spaces Signed-off-by: Stephan Renatus * examples/ABE: fix typo, replace spaces [regenerate] Signed-off-by: Stephan Renatus --- .../proto/examplepb/a_bit_of_everything.pb.go | 23 +++++++++---------- .../proto/examplepb/a_bit_of_everything.proto | 17 +++++++------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 677cdab761e..0799993d5bf 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0} } // DeepEnum is one or zero. @@ -81,11 +81,10 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0, 0, 0} } -// Intentionaly complicated message type to cover many features of Protobuf. -// NEXT ID: 30 +// Intentionally complicated message type to cover many features of Protobuf. type ABitOfEverything struct { SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` @@ -140,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -521,7 +520,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{0, 0} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -590,7 +589,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{1} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -733,7 +732,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{2} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -772,7 +771,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{3} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -819,7 +818,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71, []int{4} + return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1649,10 +1648,10 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_8015f566ede6db7f) } -var fileDescriptor_a_bit_of_everything_f9a4fe1a63432c71 = []byte{ +var fileDescriptor_a_bit_of_everything_8015f566ede6db7f = []byte{ // 3345 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x73, 0x1b, 0x47, 0x7a, 0x1c, 0x0c, 0x9f, 0xcd, 0x17, 0xd8, 0x94, 0x28, 0x10, 0xa2, 0xcd, 0x16, 0x24, 0xaf, 0xc7, diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 85235fa9520..ce0b654823d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -131,8 +131,7 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { }; -// Intentionaly complicated message type to cover many features of Protobuf. -// NEXT ID: 30 +// Intentionally complicated message type to cover many features of Protobuf. message ABitOfEverything { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { json_schema: { @@ -205,7 +204,7 @@ message ABitOfEverything { // repeated enum value. it is comma-separated in query repeated NumericEnum repeated_enum_value = 28; - // repeated numeric enum comment (This comment is overridden by the field annotation) + // repeated numeric enum comment (This comment is overridden by the field annotation) repeated NumericEnum repeated_enum_annotation = 32 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = {title: "Repeated numeric enum title", description: "Repeated numeric enum description."}]; // numeric enum comment (This comment is overridden by the field annotation) @@ -440,17 +439,17 @@ service ABitOfEverythingService { body: "*" }; } - rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { + rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { get: "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" }; - } - rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { + } + rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { post: "/v1/example/a_bit_of_everything/params/post/{string_value}" body: "single_nested" }; - } + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) From 82d4276e18a5faa30569e4a126f3cd9c88e62a2d Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 4 Sep 2019 15:04:10 +0200 Subject: [PATCH 0210/1518] nitpick spacing in other proto files (#1032) * examples/*.proto: make spaces consistent (with tabs) Signed-off-by: Stephan Renatus * examples/*.proto: make spaces consistent (with tabs) [regenerate] Signed-off-by: Stephan Renatus --- .../examplepb/response_body_service.pb.go | 18 +-- .../examplepb/response_body_service.proto | 78 ++++++------ .../examplepb/unannotated_echo_service.proto | 4 +- examples/proto/examplepb/wrappers.pb.go | 6 +- examples/proto/examplepb/wrappers.proto | 120 +++++++++--------- 5 files changed, 115 insertions(+), 111 deletions(-) diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index ed7ead481db..ae80ec69077 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -50,7 +50,7 @@ func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) } func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2, 0, 0} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2, 0, 0} } type ResponseBodyIn struct { @@ -64,7 +64,7 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{0} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{0} } func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) @@ -102,7 +102,7 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{1} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{1} } func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) @@ -140,7 +140,7 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{1, 0} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{1, 0} } func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) @@ -178,7 +178,7 @@ func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut) ProtoMessage() {} func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2} } func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) @@ -217,7 +217,7 @@ func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedRespon func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{2, 0} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2, 0} } func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) @@ -262,7 +262,7 @@ func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseStrings) ProtoMessage() {} func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_d3778d99bb1173be, []int{3} + return fileDescriptor_response_body_service_dd1070a6693ff118, []int{3} } func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) @@ -438,10 +438,10 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_d3778d99bb1173be) + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_dd1070a6693ff118) } -var fileDescriptor_response_body_service_d3778d99bb1173be = []byte{ +var fileDescriptor_response_body_service_dd1070a6693ff118 = []byte{ // 441 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, diff --git a/examples/proto/examplepb/response_body_service.proto b/examples/proto/examplepb/response_body_service.proto index 48b50f80545..215591daf95 100644 --- a/examples/proto/examplepb/response_body_service.proto +++ b/examples/proto/examplepb/response_body_service.proto @@ -5,50 +5,54 @@ package grpc.gateway.examples.examplepb; import "google/api/annotations.proto"; -message ResponseBodyIn { string data = 1; } +message ResponseBodyIn { + string data = 1; +} message ResponseBodyOut { - message Response { string data = 1; } - Response response = 2; + message Response { + string data = 1; + } + Response response = 2; } message RepeatedResponseBodyOut { - message Response { - string data = 1; - enum ResponseType { - // UNKNOWN - UNKNOWN = 0; - // A is 1 - A = 1; - // B is 2 - B = 2; - } - ResponseType type = 3; - } - repeated Response response = 2; + message Response { + string data = 1; + enum ResponseType { + // UNKNOWN + UNKNOWN = 0; + // A is 1 + A = 1; + // B is 2 + B = 2; + } + ResponseType type = 3; + } + repeated Response response = 2; } -message RepeatedResponseStrings { repeated string values = 1; } +message RepeatedResponseStrings { + repeated string values = 1; +} service ResponseBodyService { - rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { - option (google.api.http) = { - get : "/responsebody/{data}" - response_body : "response" - }; - } - - rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) { - option (google.api.http) = { - get : "/responsebodies/{data}" - response_body : "response" - }; - } - - rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) { - option (google.api.http) = { - get : "/responsestrings/{data}" - response_body : "values" - }; - } + rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { + option (google.api.http) = { + get : "/responsebody/{data}" + response_body : "response" + }; + } + rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) { + option (google.api.http) = { + get : "/responsebodies/{data}" + response_body : "response" + }; + } + rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) { + option (google.api.http) = { + get : "/responsestrings/{data}" + response_body : "values" + }; + } } diff --git a/examples/proto/examplepb/unannotated_echo_service.proto b/examples/proto/examplepb/unannotated_echo_service.proto index 9187f78e2de..6c3dbfeaf9a 100644 --- a/examples/proto/examplepb/unannotated_echo_service.proto +++ b/examples/proto/examplepb/unannotated_echo_service.proto @@ -28,10 +28,10 @@ service UnannotatedEchoService { // The message posted as the id parameter will also be // returned. rpc Echo(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); - + // EchoBody method receives a simple message and returns it. rpc EchoBody(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); - // EchoDelete method receives a simple message and returns it. + // EchoDelete method receives a simple message and returns it. rpc EchoDelete(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); } diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index 48462f92b92..c0a52fe21bc 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -45,7 +45,7 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_1614a2b17737abd3, []int{0} + return fileDescriptor_wrappers_357c0312be7b0bb0, []int{0} } func (m *Wrappers) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Wrappers.Unmarshal(m, b) @@ -535,10 +535,10 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_1614a2b17737abd3) + proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_357c0312be7b0bb0) } -var fileDescriptor_wrappers_1614a2b17737abd3 = []byte{ +var fileDescriptor_wrappers_357c0312be7b0bb0 = []byte{ // 578 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, diff --git a/examples/proto/examplepb/wrappers.proto b/examples/proto/examplepb/wrappers.proto index 46b2552a3f7..48ce5a8ec6e 100644 --- a/examples/proto/examplepb/wrappers.proto +++ b/examples/proto/examplepb/wrappers.proto @@ -26,64 +26,64 @@ service WrappersService { }; } - rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) { - option (google.api.http) = { - post: "/v1/testString" - body: "*" - }; - } - rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) { - option (google.api.http) = { - post: "/v1/testInt32" - body: "*" - }; - } - rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value){ - option (google.api.http) = { - post: "/v1/testInt64" - body: "*" - }; - } - rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue){ - option (google.api.http) = { - post: "/v1/testFloat" - body: "*" - }; - } - rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue){ - option (google.api.http) = { - post: "/v1/testDouble" - body: "*" - }; - } - rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue){ - option (google.api.http) = { - post: "/v1/testBool" - body: "*" - }; - } - rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value){ - option (google.api.http) = { - post: "/v1/testUint32" - body: "*" - }; - } - rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value){ - option (google.api.http) = { - post: "/v1/testUint64" - body: "*" - }; - } - rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue){ - option (google.api.http) = { - post: "/v1/testBytes" - body: "*" - }; - } - rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty){ - option (google.api.http) = { - post: "/v1/testEmpty" - body: "*" - }; - } + rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) { + option (google.api.http) = { + post: "/v1/testString" + body: "*" + }; + } + rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) { + option (google.api.http) = { + post: "/v1/testInt32" + body: "*" + }; + } + rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value){ + option (google.api.http) = { + post: "/v1/testInt64" + body: "*" + }; + } + rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue){ + option (google.api.http) = { + post: "/v1/testFloat" + body: "*" + }; + } + rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue){ + option (google.api.http) = { + post: "/v1/testDouble" + body: "*" + }; + } + rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue){ + option (google.api.http) = { + post: "/v1/testBool" + body: "*" + }; + } + rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value){ + option (google.api.http) = { + post: "/v1/testUint32" + body: "*" + }; + } + rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value){ + option (google.api.http) = { + post: "/v1/testUint64" + body: "*" + }; + } + rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue){ + option (google.api.http) = { + post: "/v1/testBytes" + body: "*" + }; + } + rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty){ + option (google.api.http) = { + post: "/v1/testEmpty" + body: "*" + }; + } } From 7f57073b1543f1b5a5077437aa57b92b6cfc04a6 Mon Sep 17 00:00:00 2001 From: Dmitry Shemin Date: Wed, 4 Sep 2019 00:14:53 +0700 Subject: [PATCH 0211/1518] Small performance fix Move static regexp to a global variable in order to avoid multiple regexp pattern compilations. --- protoc-gen-swagger/genswagger/template.go | 7 +- .../genswagger/template_test.go | 22 +++++++ runtime/query.go | 8 +-- runtime/query_test.go | 64 +++++++++++++++++++ 4 files changed, 93 insertions(+), 8 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index dfb8a490854..337fb1a7370 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -612,6 +612,8 @@ func resolveFullyQualifiedNameToSwaggerNames(messages []string, useFQNForSwagger return uniqueNames } +var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") + // Swagger expects paths of the form /path/{string_value} but grpc-gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // It seems like the right thing to do here is to just use @@ -670,14 +672,13 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // Parts is now an array of segments of the path. Interestingly, since the // syntax for this subsection CAN be handled by a regexp since it has no // memory. - re := regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") for index, part := range parts { // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. - prefix := re.ReplaceAllString(part, "$1") + prefix := canRegexp.ReplaceAllString(part, "$1") if isResourceName(prefix) { continue } - parts[index] = re.ReplaceAllString(part, "{$1}") + parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } return strings.Join(parts, "/") diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 06021fe10ce..09902345e65 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -930,6 +930,28 @@ func TestTemplateToSwaggerPath(t *testing.T) { } } +func BenchmarkTemplateToSwaggerPath(b *testing.B) { + const input = "/{user.name=prefix1/*/prefix2/*}:customMethod" + + b.Run("with JSON names", func(b *testing.B) { + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(false) + + for i := 0; i < b.N; i++ { + _ = templateToSwaggerPath(input, reg) + } + }) + + b.Run("without JSON names", func(b *testing.B) { + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + + for i := 0; i < b.N; i++ { + _ = templateToSwaggerPath(input, reg) + } + }) +} + func TestResolveFullyQualifiedNameToSwaggerName(t *testing.T) { var tests = []struct { input string diff --git a/runtime/query.go b/runtime/query.go index 5fbba5e8e8b..ee0207e461e 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -15,15 +15,13 @@ import ( "google.golang.org/grpc/grpclog" ) +var valuesKeyRegexp = regexp.MustCompile("^(.*)\\[(.*)\\]$") + // PopulateQueryParameters populates "values" into "msg". // A value is ignored if its key starts with one of the elements in "filter". func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { for key, values := range values { - re, err := regexp.Compile("^(.*)\\[(.*)\\]$") - if err != nil { - return err - } - match := re.FindStringSubmatch(key) + match := valuesKeyRegexp.FindStringSubmatch(key) if len(match) == 3 { key = match[1] values = append([]string{match[2]}, values...) diff --git a/runtime/query_test.go b/runtime/query_test.go index 358847928c8..fb8d27ad769 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -18,6 +18,70 @@ import ( "google.golang.org/genproto/protobuf/field_mask" ) +func BenchmarkPopulateQueryParameters(b *testing.B) { + timeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC) + timeStr := timeT.Format(time.RFC3339Nano) + + durationT := 13 * time.Hour + durationStr := durationT.String() + + fieldmaskStr := "float_value,double_value" + + msg := &proto3Message{} + values := url.Values{ + "float_value": {"1.5"}, + "double_value": {"2.5"}, + "int64_value": {"-1"}, + "int32_value": {"-2"}, + "uint64_value": {"3"}, + "uint32_value": {"4"}, + "bool_value": {"true"}, + "string_value": {"str"}, + "bytes_value": {"Ynl0ZXM="}, + "repeated_value": {"a", "b", "c"}, + "enum_value": {"1"}, + "repeated_enum": {"1", "2", "0"}, + "timestamp_value": {timeStr}, + "duration_value": {durationStr}, + "fieldmask_value": {fieldmaskStr}, + "wrapper_float_value": {"1.5"}, + "wrapper_double_value": {"2.5"}, + "wrapper_int64_value": {"-1"}, + "wrapper_int32_value": {"-2"}, + "wrapper_u_int64_value": {"3"}, + "wrapper_u_int32_value": {"4"}, + "wrapper_bool_value": {"true"}, + "wrapper_string_value": {"str"}, + "wrapper_bytes_value": {"Ynl0ZXM="}, + "map_value[key]": {"value"}, + "map_value[second]": {"bar"}, + "map_value[third]": {"zzz"}, + "map_value[fourth]": {""}, + `map_value[~!@#$%^&*()]`: {"value"}, + "map_value2[key]": {"-2"}, + "map_value3[-2]": {"value"}, + "map_value4[key]": {"-1"}, + "map_value5[-1]": {"value"}, + "map_value6[key]": {"3"}, + "map_value7[3]": {"value"}, + "map_value8[key]": {"4"}, + "map_value9[4]": {"value"}, + "map_value10[key]": {"1.5"}, + "map_value11[1.5]": {"value"}, + "map_value12[key]": {"2.5"}, + "map_value13[2.5]": {"value"}, + "map_value14[key]": {"true"}, + "map_value15[true]": {"value"}, + } + filter := utilities.NewDoubleArray([][]string{ + {"bool_value"}, {"repeated_value"}, + }) + + for i := 0; i < b.N; i++ { + _ = runtime.PopulateQueryParameters(msg, values, filter) + } +} + func TestPopulateParameters(t *testing.T) { timeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC) timeStr := timeT.Format(time.RFC3339Nano) From c53be1db352f1cd0400a2307ce8b1b9f83be1741 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Mon, 9 Sep 2019 11:08:39 -0600 Subject: [PATCH 0212/1518] Configure stale[bot] --- .github/stale.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000000..3a1b5318f38 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - help wanted + - enhancement + - security +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false From 82dc0837d5ecce71198123cbf94fb6eaff7698f6 Mon Sep 17 00:00:00 2001 From: Cem Enson <23116487+cemenson@users.noreply.github.com> Date: Mon, 9 Sep 2019 19:35:28 +0100 Subject: [PATCH 0213/1518] added additional info for custom http headers (#1035) * added additional info for custom http headers --- docs/_docs/customizingyourgateway.md | 39 +++++++++++++++++++++------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index a22ce80594c..49dcb1660c4 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -83,18 +83,39 @@ You might not like [the default mapping rule](http://godoc.org/github.com/grpc-e 1. Write a [`HeaderMatcherFunc`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#HeaderMatcherFunc). 2. Register the function with [`WithIncomingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithIncomingHeaderMatcher) - e.g. - ```go - func yourMatcher(headerName string) (mdName string, ok bool) { - ... - } - ... - mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(yourMatcher)) + e.g. + ```go + func CustomMatcher(key string) (string, bool) { + switch key { + case "x-custom-header1": + return key, true + case "x-custom-header2": + return "custom-header2", true + default: + return key, false + } + } + ... - ``` + mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) + + ``` ## Mapping from gRPC server metadata to HTTP response headers -ditto. Use [`WithOutgoingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithOutgoingHeaderMatcher) +ditto. Use [`WithOutgoingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithOutgoingHeaderMatcher). +See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) +for more info on sending / receiving gRPC metadata. + + e.g. + + ```go + ... + if appendCustomHeader { + grpc.SendHeader(ctx, metadata.New(map[string]string{ + "x-custom-header1": "value", + })) + } + ``` ## Mutate response messages or set response headers You might want to return a subset of response fields as HTTP response headers; From 5ebe3a8e01b56f67d5f0c6da3a274639e5e1a376 Mon Sep 17 00:00:00 2001 From: Henry Kwan Date: Tue, 10 Sep 2019 22:13:00 +0800 Subject: [PATCH 0214/1518] Update README.md update case-sensitive url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb1af895665..9f7493d9bf2 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ More examples are available under `examples` directory. To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) -(and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)). +(and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)). ## Features From d818363f3d58d4fb72e612f96afc0e9b9363715c Mon Sep 17 00:00:00 2001 From: James Mills <1290234+prologic@users.noreply.github.com> Date: Wed, 11 Sep 2019 05:01:58 +1000 Subject: [PATCH 0215/1518] Update ISSUE_TEMPLATE.md (#1014) Fix minor typo --- ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index e732a82f019..9cb92f9eecc 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -59,7 +59,7 @@ Your answer here. ```html ``` From 6ec92bb6ccf3d732ba5650395b965575f3804f98 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 11 Sep 2019 10:57:24 +0200 Subject: [PATCH 0216/1518] examples/integration: wait for secondary gateway I haven't been able to reproduce #992, but this looks like a likely fix. ;) Signed-off-by: Stephan Renatus --- examples/integration/integration_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 03aed1a0886..49ed02ac957 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1479,6 +1479,10 @@ func testResponseStrings(t *testing.T, port int) { } }() + if err := waitForGateway(ctx, 8081); err != nil { + t.Fatalf("waitForGateway(ctx, 8081) failed with %v; want success", err) + } + port = 8081 for i, spec := range []struct { From ffa3b83af8a47a3d0dcfa110b212ee7ab908d425 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Fri, 13 Sep 2019 17:02:41 +0200 Subject: [PATCH 0217/1518] protoc-gen-swagger: add support for arbitrary extensions (#1033) * protoc-gen-swagger: add support for arbitrary top-level extensions Using google.protobuf.Value isn't the nicest solution here, but with map extensions = 15; I could not find a way to specify those in a_bit_of_everything.proto that would have passed through protoc. Signed-off-by: Stephan Renatus * protoc-gen-swagger: ensure keys start with 'x-' Signed-off-by: Stephan Renatus * protoc-gen-swagger: start with tests Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: sort extensions by key, expand test Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: add custom Extensions to SecurityScheme Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: add custom Extensions to Info Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: add custom Extensions to Operation Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: add custom Extensions to Response Signed-off-by: Stephan Renatus * protoc-gen-swagger/genswagger: add comment and links Signed-off-by: Stephan Renatus * update a_bit_of_everything.pb.go Signed-off-by: Stephan Renatus * update protoc-gen-swagger/genswagger/BUILD.bazel Signed-off-by: Stephan Renatus * update protoc-gen-swagger/genswagger: fix internal struct key replacement Dropping the `-` would make `x-foobar` and `x-foo-bar` clash. Replacing with `_` doesn't. Signed-off-by: Stephan Renatus * TestApplyTemplateExtensions: fix test Signed-off-by: Stephan Renatus --- .../proto/examplepb/a_bit_of_everything.pb.go | 456 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 62 +++ .../a_bit_of_everything.swagger.json | 29 +- protoc-gen-swagger/genswagger/BUILD.bazel | 3 + protoc-gen-swagger/genswagger/generator.go | 78 ++- protoc-gen-swagger/genswagger/template.go | 59 ++- .../genswagger/template_test.go | 148 ++++++ protoc-gen-swagger/genswagger/types.go | 15 + protoc-gen-swagger/options/BUILD.bazel | 1 + protoc-gen-swagger/options/openapiv2.pb.go | 410 +++++++++------- protoc-gen-swagger/options/openapiv2.proto | 6 + 11 files changed, 856 insertions(+), 411 deletions(-) diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 0799993d5bf..b16115fdfce 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -520,7 +520,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{0, 0} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -589,7 +589,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{1} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -732,7 +732,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{2} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -771,7 +771,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{3} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -818,7 +818,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_8015f566ede6db7f, []int{4} + return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -1648,219 +1648,229 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_8015f566ede6db7f) -} - -var fileDescriptor_a_bit_of_everything_8015f566ede6db7f = []byte{ - // 3345 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3a, 0x4b, 0x73, 0x1b, 0x47, - 0x7a, 0x1c, 0x0c, 0x9f, 0xcd, 0x17, 0xd8, 0x94, 0x28, 0x10, 0xa2, 0xcd, 0x16, 0x24, 0xaf, 0xc7, - 0xb0, 0x80, 0x21, 0x87, 0xb4, 0x4d, 0xc1, 0xb5, 0xab, 0x0c, 0xf8, 0x90, 0x69, 0xd9, 0x14, 0x3d, - 0x92, 0x1d, 0x97, 0xd6, 0x5a, 0x56, 0x03, 0x68, 0x10, 0x23, 0x62, 0x1e, 0x3b, 0xd3, 0x43, 0x09, - 0x61, 0x90, 0x6c, 0x1e, 0x95, 0x54, 0x76, 0x0f, 0xa9, 0xc2, 0x26, 0x87, 0x3c, 0x2a, 0xbf, 0x60, - 0xaf, 0x39, 0x6d, 0x55, 0x92, 0x43, 0x72, 0xca, 0x21, 0x29, 0x27, 0x95, 0x5b, 0x4e, 0xc9, 0x21, - 0xa7, 0x5c, 0x52, 0xb5, 0x55, 0x39, 0x24, 0xb5, 0xd5, 0x3d, 0x33, 0xc0, 0xcc, 0x00, 0x10, 0x05, - 0x69, 0x4b, 0x17, 0x69, 0xba, 0xfb, 0x7b, 0x7f, 0x5f, 0x7f, 0x8f, 0x06, 0x81, 0x42, 0x9e, 0x63, - 0xc3, 0x6e, 0x12, 0x57, 0xb6, 0x1d, 0x8b, 0x5a, 0x72, 0xb0, 0xb4, 0x2b, 0x32, 0x3e, 0xa9, 0xe8, - 0xf4, 0xc4, 0xaa, 0x9f, 0x90, 0x73, 0xe2, 0xb4, 0x68, 0x43, 0x37, 0x4f, 0x8b, 0x1c, 0x06, 0xae, - 0x9f, 0x3a, 0x76, 0xb5, 0x78, 0x8a, 0x29, 0x79, 0x86, 0x5b, 0xc5, 0x90, 0x40, 0xb1, 0x8b, 0x9a, - 0x5d, 0x3b, 0xb5, 0xac, 0xd3, 0x26, 0x91, 0xb1, 0xad, 0xcb, 0xd8, 0x34, 0x2d, 0x8a, 0xa9, 0x6e, - 0x99, 0xae, 0x8f, 0x9e, 0x45, 0xc1, 0x29, 0x5f, 0x55, 0xbc, 0xba, 0x5c, 0xd7, 0x49, 0xb3, 0x76, - 0x62, 0x60, 0xf7, 0x2c, 0x80, 0xb8, 0x9e, 0x84, 0x20, 0x86, 0x4d, 0x5b, 0xc1, 0xe1, 0xdb, 0xc9, - 0xc3, 0x9a, 0xe7, 0x70, 0xfa, 0xc1, 0xf9, 0xbb, 0x09, 0x8d, 0x6c, 0x4c, 0x1b, 0xc4, 0xf4, 0x0c, - 0xfe, 0x71, 0xc2, 0xbe, 0x42, 0x39, 0x12, 0x80, 0xae, 0x57, 0x91, 0x0d, 0xe2, 0xba, 0xf8, 0x94, - 0x04, 0x10, 0x37, 0xfa, 0x21, 0x94, 0x04, 0xc8, 0x7a, 0x52, 0x1a, 0xaa, 0x1b, 0xc4, 0xa5, 0xd8, - 0xb0, 0x03, 0x80, 0xdb, 0xfc, 0xbf, 0x6a, 0xe1, 0x94, 0x98, 0x05, 0xf7, 0x19, 0x3e, 0x3d, 0x25, - 0x8e, 0x6c, 0xd9, 0xdc, 0x1e, 0xfd, 0xb6, 0xc9, 0xfd, 0xf3, 0x75, 0x90, 0x56, 0xcb, 0x3a, 0x7d, - 0x50, 0xdf, 0xef, 0x5a, 0x1d, 0x3e, 0x01, 0xf3, 0xae, 0x6e, 0x9e, 0x36, 0xc9, 0x89, 0x49, 0x5c, - 0x4a, 0x6a, 0x99, 0x55, 0x24, 0x48, 0xb3, 0xca, 0x4e, 0xf1, 0x12, 0x3f, 0x14, 0x93, 0x94, 0x8a, - 0x47, 0x1c, 0x5f, 0x9b, 0xf3, 0xc9, 0xf9, 0x2b, 0xd8, 0x00, 0xe3, 0x9e, 0xa7, 0xd7, 0x32, 0x02, - 0x12, 0xa4, 0x99, 0xf2, 0xa3, 0x8e, 0xfa, 0xc5, 0x8f, 0x04, 0xe1, 0xc7, 0xc2, 0xfd, 0xef, 0xe3, - 0x42, 0x5d, 0x2d, 0x1c, 0x6c, 0x14, 0xee, 0x3c, 0xb9, 0xd8, 0x69, 0x17, 0xa2, 0xcb, 0xed, 0x51, - 0x96, 0x9b, 0x4a, 0x5b, 0xe3, 0x1c, 0xe0, 0x31, 0x98, 0x0c, 0x34, 0x48, 0x21, 0xf1, 0xb5, 0x34, - 0x08, 0xe8, 0xc0, 0x4f, 0xc1, 0x6c, 0xbd, 0x69, 0x61, 0x7a, 0x72, 0x8e, 0x9b, 0x1e, 0xc9, 0x88, - 0x48, 0x90, 0x52, 0xe5, 0xf7, 0x3a, 0xea, 0x77, 0x94, 0xa5, 0x03, 0xb6, 0x8f, 0xf8, 0x3e, 0xe2, - 0x11, 0x56, 0x12, 0x37, 0x8a, 0xca, 0xb7, 0x42, 0x14, 0x41, 0x03, 0x7c, 0xf1, 0x15, 0xfb, 0x86, - 0x37, 0xc0, 0x5c, 0xcd, 0xf2, 0x2a, 0x4d, 0x12, 0x10, 0x1b, 0x47, 0x82, 0x24, 0x68, 0xb3, 0xfe, - 0x9e, 0x0f, 0xb2, 0x0e, 0x66, 0x75, 0x93, 0x7e, 0xb8, 0x1d, 0x40, 0x4c, 0x20, 0x41, 0x12, 0x35, - 0xc0, 0xb7, 0xba, 0x34, 0xbc, 0x28, 0xc4, 0x24, 0x12, 0xa4, 0x71, 0x6d, 0xd6, 0x8b, 0x80, 0xf8, - 0x34, 0xb6, 0x94, 0x00, 0x62, 0x0a, 0x09, 0xd2, 0x04, 0xa7, 0xb1, 0xa5, 0xf8, 0x00, 0x37, 0xc1, - 0x7c, 0x5d, 0x7f, 0x4e, 0x6a, 0x5d, 0x22, 0xd3, 0x48, 0x90, 0x26, 0xb5, 0xb9, 0x60, 0x33, 0x0e, - 0xd4, 0xa5, 0x33, 0x83, 0x04, 0x69, 0x2a, 0x00, 0x0a, 0x29, 0xbd, 0x05, 0x40, 0xc5, 0xb2, 0x9a, - 0x01, 0x04, 0x40, 0x82, 0x34, 0xad, 0xcd, 0xb0, 0x9d, 0xae, 0xb0, 0x2e, 0x75, 0x74, 0xf3, 0x34, - 0x00, 0x98, 0x65, 0x01, 0xa0, 0xcd, 0xfa, 0x7b, 0x5d, 0x61, 0x2b, 0x2d, 0x4a, 0xdc, 0x00, 0xe2, - 0x2d, 0x24, 0x48, 0x73, 0x1a, 0xe0, 0x5b, 0x31, 0x85, 0xbb, 0x62, 0xcc, 0x23, 0x41, 0x9a, 0xf7, - 0x15, 0x0e, 0xa5, 0xb8, 0x0f, 0x00, 0xbb, 0x75, 0x01, 0xc0, 0x02, 0x12, 0xa4, 0x05, 0xe5, 0xf6, - 0xa5, 0x9e, 0x3f, 0xf2, 0x0c, 0xe2, 0xe8, 0xd5, 0x7d, 0xd3, 0x33, 0xb4, 0x19, 0x86, 0xef, 0x13, - 0x3b, 0x06, 0x8b, 0xdd, 0x7b, 0x1c, 0x50, 0x7c, 0x9b, 0x53, 0x94, 0x86, 0x50, 0x0c, 0xaf, 0x7f, - 0xf1, 0x18, 0xd3, 0x06, 0xa7, 0x36, 0x6f, 0x07, 0x5f, 0x3e, 0x45, 0x17, 0xac, 0xf8, 0xc1, 0x74, - 0x92, 0x24, 0xbc, 0xce, 0x09, 0x7f, 0xef, 0x32, 0xc2, 0x9f, 0xfb, 0x09, 0x21, 0xa4, 0x1f, 0x84, - 0x68, 0x97, 0xdd, 0xb2, 0x19, 0x5b, 0xfb, 0x4c, 0xdf, 0x01, 0x0b, 0x6e, 0xdc, 0x7f, 0x8b, 0x48, - 0x90, 0x16, 0xb5, 0x79, 0x37, 0xe6, 0xc0, 0x2e, 0x58, 0x37, 0x16, 0xd2, 0x48, 0x90, 0xd2, 0x21, - 0x58, 0x24, 0xea, 0xdc, 0xa8, 0x13, 0x96, 0x90, 0x20, 0x2d, 0x69, 0xb3, 0x6e, 0xc4, 0x09, 0x01, - 0x48, 0x97, 0x0e, 0x44, 0x82, 0x04, 0x7d, 0x90, 0x90, 0x8a, 0x02, 0xae, 0x3a, 0xc4, 0x26, 0x98, - 0x99, 0x22, 0x16, 0x17, 0xcb, 0x48, 0x94, 0x66, 0xb4, 0xe5, 0xf0, 0xf0, 0x61, 0x24, 0x3e, 0xee, - 0x80, 0x59, 0xcb, 0x24, 0xac, 0x48, 0xb0, 0x0c, 0x9d, 0xb9, 0xc2, 0x13, 0xd3, 0x4a, 0xd1, 0x4f, - 0x8a, 0xc5, 0x30, 0x29, 0x16, 0xf7, 0xd9, 0xe9, 0x27, 0x63, 0x1a, 0xe0, 0xc0, 0x7c, 0x05, 0x6f, - 0x82, 0x39, 0x1f, 0xd5, 0xe7, 0x95, 0xb9, 0xca, 0xa2, 0xef, 0x93, 0x31, 0xcd, 0x27, 0xe8, 0x33, - 0x81, 0xdf, 0x80, 0x19, 0x03, 0xdb, 0x81, 0x1c, 0x2b, 0x3c, 0x69, 0xdc, 0x1d, 0x3d, 0x69, 0x7c, - 0x8e, 0x6d, 0x2e, 0xee, 0xbe, 0x49, 0x9d, 0x96, 0x36, 0x6d, 0x04, 0x4b, 0xf8, 0x1c, 0x2c, 0x1b, - 0xd8, 0xb6, 0x93, 0xfa, 0x5e, 0xe3, 0x7c, 0x3e, 0x79, 0x25, 0x3e, 0x76, 0xcc, 0x3e, 0x3e, 0xc3, - 0x25, 0x23, 0xb9, 0x1f, 0xe1, 0x1c, 0xc4, 0x9e, 0xcf, 0x39, 0xf3, 0x7a, 0x9c, 0xfd, 0xc8, 0xeb, - 0xe7, 0x1c, 0xd9, 0x87, 0x25, 0x90, 0x31, 0x2d, 0x73, 0xd7, 0x32, 0xcf, 0x89, 0xc9, 0x2a, 0x0f, - 0x6e, 0x1e, 0x61, 0xc3, 0x4f, 0x6f, 0x99, 0x2c, 0x4f, 0x00, 0x43, 0xcf, 0xe1, 0x2e, 0x58, 0xec, - 0x96, 0xb7, 0x40, 0xe2, 0xeb, 0xdc, 0xe3, 0xd9, 0x3e, 0x8f, 0x3f, 0x0a, 0xe1, 0xb4, 0x85, 0x2e, - 0x8a, 0x4f, 0xe4, 0x1b, 0xd0, 0x8d, 0xa4, 0xe8, 0x65, 0x5b, 0x43, 0xe2, 0xc8, 0x79, 0x61, 0x29, - 0x24, 0xd4, 0xbb, 0x58, 0x3f, 0x13, 0x40, 0x26, 0x4e, 0xbe, 0x57, 0x64, 0x33, 0x68, 0x74, 0x1e, - 0xe5, 0xbd, 0x8e, 0xaa, 0xe6, 0xaf, 0x6b, 0x01, 0x49, 0x64, 0xfa, 0x47, 0x88, 0x91, 0x46, 0x54, - 0xa7, 0x4d, 0xa2, 0xe4, 0x06, 0x1f, 0xd6, 0x88, 0x5b, 0x75, 0x74, 0x5e, 0xe9, 0x8b, 0xda, 0x4a, - 0x54, 0x52, 0xb5, 0x2b, 0x11, 0xfc, 0x13, 0x01, 0x5c, 0xed, 0x19, 0x21, 0x2a, 0xeb, 0x8d, 0xd1, - 0xf3, 0x64, 0x59, 0xe9, 0xa8, 0x72, 0x1e, 0x1e, 0xf5, 0x8b, 0xb8, 0x7a, 0x34, 0x54, 0xb2, 0xe5, - 0x6e, 0x6e, 0x8d, 0x88, 0x75, 0x0e, 0xb2, 0xc9, 0x54, 0x10, 0x11, 0x2d, 0xc7, 0xf2, 0x41, 0x79, - 0xa7, 0xa3, 0x7e, 0x90, 0xbf, 0xda, 0xd5, 0xdd, 0x07, 0x0b, 0xf8, 0xad, 0x25, 0xb7, 0x63, 0x2c, - 0x33, 0xf1, 0x4c, 0x12, 0xe1, 0xfb, 0x37, 0x42, 0x84, 0x71, 0x70, 0x33, 0x22, 0x8c, 0x6f, 0xbe, - 0x5e, 0xd7, 0x50, 0x3e, 0xe8, 0xa8, 0xbb, 0xf9, 0x9e, 0x6c, 0x3e, 0x03, 0x64, 0x55, 0x9e, 0x92, - 0x2a, 0x0d, 0x24, 0xbf, 0x39, 0xe4, 0x74, 0xb0, 0x02, 0x3e, 0xdd, 0x88, 0x02, 0x7f, 0x21, 0x80, - 0xa5, 0x7e, 0xb9, 0x6f, 0xbd, 0x5e, 0xbf, 0x56, 0xde, 0xee, 0xa8, 0x9b, 0xf9, 0xe5, 0xa3, 0x01, - 0xe2, 0x66, 0x8f, 0x86, 0x4b, 0x99, 0x36, 0x93, 0xd2, 0x7d, 0x04, 0x96, 0xfd, 0x1a, 0x60, 0x9d, - 0x13, 0xc7, 0xd1, 0x6b, 0xe4, 0x84, 0xb6, 0x6c, 0x92, 0x79, 0x87, 0xb5, 0x31, 0xe5, 0xa9, 0x8e, - 0x3a, 0xfe, 0xe7, 0x29, 0x41, 0xd4, 0x96, 0x38, 0xcc, 0x83, 0x00, 0xe4, 0x51, 0xcb, 0x26, 0xd9, - 0x7f, 0x17, 0xc0, 0x64, 0xd0, 0x2d, 0x42, 0x30, 0x6e, 0x62, 0x83, 0xf8, 0xdd, 0xa2, 0xc6, 0xbf, - 0xe1, 0x0a, 0x98, 0xc4, 0x86, 0xe5, 0x99, 0x34, 0x93, 0xe2, 0xe5, 0x3f, 0x58, 0x41, 0x03, 0xa4, - 0xac, 0x33, 0xde, 0x94, 0x2d, 0x28, 0xea, 0xab, 0x6a, 0x5f, 0xdc, 0x23, 0xc4, 0xe6, 0xe1, 0x9d, - 0xed, 0xa8, 0xd7, 0x94, 0xab, 0xe1, 0x32, 0xae, 0x6c, 0xca, 0x3a, 0xcb, 0xad, 0x83, 0xe9, 0xf0, - 0x10, 0xce, 0x80, 0x89, 0x03, 0xf5, 0xb3, 0x87, 0xfb, 0xe9, 0x31, 0x38, 0x0d, 0xc6, 0x1f, 0x69, - 0x5f, 0xee, 0xa7, 0x85, 0xd2, 0xb5, 0x8e, 0x7a, 0x45, 0x81, 0x30, 0x7d, 0x81, 0x72, 0xd6, 0x59, - 0xae, 0x84, 0x72, 0x6c, 0x3f, 0x87, 0xda, 0x59, 0x1d, 0xcc, 0xc7, 0x6a, 0x04, 0x4c, 0x03, 0xf1, - 0x8c, 0xb4, 0x02, 0x25, 0xd9, 0x27, 0x2c, 0x83, 0x09, 0x3f, 0x51, 0xa5, 0x5e, 0xa1, 0x81, 0xf1, - 0x51, 0x4b, 0xa9, 0x1d, 0x21, 0xbb, 0x07, 0x56, 0x06, 0x97, 0x89, 0x01, 0x3c, 0xaf, 0x44, 0x79, - 0xce, 0x44, 0xa9, 0xfc, 0x56, 0x48, 0x25, 0x99, 0xf2, 0x07, 0x50, 0x39, 0x8a, 0x52, 0x79, 0x9d, - 0xa6, 0xbb, 0xc7, 0xbf, 0xf4, 0x67, 0xa9, 0x8e, 0xfa, 0xa7, 0x29, 0xf0, 0xfb, 0x42, 0x7e, 0x59, - 0x45, 0x15, 0x9d, 0x22, 0xab, 0x8e, 0x7a, 0x73, 0xa2, 0x72, 0x78, 0x68, 0xd2, 0xb0, 0x7c, 0xb4, - 0x50, 0xd5, 0x32, 0xec, 0xa6, 0x5e, 0xe5, 0xb7, 0x2a, 0x98, 0x9e, 0x10, 0x0b, 0x3c, 0x44, 0x2d, - 0x54, 0x65, 0xa1, 0x88, 0x0c, 0x6c, 0xb6, 0x50, 0x9d, 0x60, 0xea, 0x39, 0xc4, 0x65, 0xb4, 0x8e, - 0xc3, 0x3a, 0xf2, 0xad, 0xc0, 0x47, 0x87, 0x6f, 0x85, 0x68, 0xe3, 0xfd, 0xad, 0x10, 0xeb, 0xd4, - 0xf3, 0x5f, 0x81, 0x5b, 0x07, 0xba, 0x59, 0x43, 0x96, 0x47, 0x91, 0x61, 0x39, 0x04, 0xe1, 0x0a, - 0xfb, 0xec, 0x1b, 0xa4, 0x8a, 0x0d, 0x4a, 0x6d, 0xb7, 0x24, 0xcb, 0xa7, 0x3a, 0x6d, 0x78, 0x95, - 0x62, 0xd5, 0x32, 0x64, 0x66, 0x8c, 0x02, 0xa9, 0x5a, 0x6e, 0xcb, 0xa5, 0x24, 0x58, 0x06, 0xb6, - 0x51, 0xb6, 0xa1, 0x72, 0x81, 0x72, 0x8c, 0x3f, 0x0b, 0x96, 0x8d, 0x6a, 0x7d, 0xeb, 0xc3, 0x4d, - 0xb2, 0x59, 0xd8, 0xae, 0x6c, 0x6f, 0x17, 0xb6, 0x77, 0xb6, 0x6a, 0x05, 0xbc, 0xf9, 0xc1, 0x9d, - 0xc2, 0x07, 0xdb, 0x35, 0x5c, 0xa9, 0xd5, 0x3f, 0x22, 0x3b, 0x9b, 0xdb, 0x39, 0xd4, 0x2e, 0xcf, - 0x87, 0x3d, 0x11, 0x17, 0x2e, 0xf7, 0xff, 0xd3, 0x20, 0x93, 0x94, 0x24, 0x4c, 0x32, 0xf0, 0x0e, - 0x58, 0xe5, 0x5d, 0x67, 0x37, 0xe9, 0x45, 0xa7, 0x19, 0x01, 0x89, 0x52, 0x4a, 0x5b, 0x61, 0x00, - 0x21, 0xc2, 0x41, 0x6f, 0x5c, 0xf9, 0x18, 0x64, 0xe3, 0xa8, 0xb1, 0xe1, 0x85, 0x0d, 0x58, 0x82, - 0x76, 0x2d, 0x8a, 0xbb, 0x17, 0x19, 0x64, 0xfa, 0xf8, 0x46, 0x7b, 0x43, 0x11, 0x89, 0x92, 0x18, - 0xe7, 0x7b, 0xd8, 0x6b, 0x13, 0xfb, 0xf8, 0xc6, 0x06, 0x9e, 0x71, 0x24, 0x4a, 0xe3, 0x71, 0xbe, - 0x5f, 0x46, 0x7a, 0xcc, 0x41, 0x7c, 0xbb, 0x6d, 0xeb, 0x04, 0x12, 0xa5, 0x89, 0x3e, 0xbe, 0x61, - 0x07, 0xfb, 0x5d, 0x70, 0x3d, 0x61, 0xaa, 0x58, 0x63, 0x3c, 0x89, 0x44, 0x69, 0x52, 0xcb, 0xc4, - 0x8c, 0x15, 0xed, 0x91, 0x07, 0xa3, 0x47, 0xc6, 0x30, 0x51, 0x9a, 0x1a, 0x80, 0x1e, 0x72, 0xff, - 0x08, 0x64, 0xe2, 0xe8, 0x91, 0xc1, 0x6a, 0x1a, 0x89, 0xd2, 0xb4, 0x76, 0x35, 0x8a, 0x5b, 0xee, - 0x0e, 0x59, 0x7d, 0xe6, 0x8a, 0xb5, 0x9a, 0x33, 0xbc, 0xb5, 0x8e, 0x99, 0x2b, 0xde, 0x5e, 0x27, - 0xcc, 0x15, 0x1d, 0xc6, 0x00, 0x12, 0xa5, 0xb9, 0xb8, 0xb9, 0xca, 0xbd, 0xc1, 0x6c, 0xa0, 0x9b, - 0xba, 0xea, 0xce, 0x22, 0x51, 0x9a, 0xef, 0x77, 0x53, 0xa8, 0x2d, 0x49, 0x6a, 0x1b, 0x69, 0xd4, - 0xe6, 0x5e, 0xa1, 0x51, 0x8b, 0xd9, 0xa6, 0xd7, 0xac, 0xdd, 0x05, 0x6b, 0x09, 0xdb, 0xc4, 0x9d, - 0x32, 0x8f, 0x44, 0x69, 0x51, 0x5b, 0x8d, 0x59, 0x27, 0x36, 0x1f, 0x0d, 0x21, 0xd0, 0x0d, 0x8a, - 0x05, 0x24, 0x4a, 0xe9, 0x41, 0x04, 0x86, 0x06, 0x73, 0x6c, 0x8e, 0x5a, 0x44, 0xa2, 0xb4, 0x94, - 0xf0, 0x4e, 0xc4, 0x4a, 0x03, 0x91, 0x23, 0x93, 0x9a, 0x28, 0xc1, 0x7e, 0xe4, 0x80, 0x73, 0xa9, - 0xd1, 0x51, 0x89, 0x52, 0x85, 0xf8, 0x02, 0xe5, 0x86, 0x05, 0x56, 0xae, 0x84, 0xbe, 0x4f, 0x1d, - 0x8f, 0xdc, 0x46, 0xfe, 0xbf, 0x75, 0xdc, 0x74, 0x83, 0xc5, 0x93, 0xdb, 0x49, 0xb4, 0x88, 0xdc, - 0x0c, 0x6f, 0xf3, 0x36, 0x52, 0x6e, 0xa3, 0xad, 0x27, 0xa8, 0x9d, 0xcb, 0x82, 0xf1, 0xb2, 0x55, - 0x6b, 0x0d, 0xaa, 0xdc, 0xb9, 0x6f, 0xc0, 0x62, 0x30, 0xbe, 0xfe, 0xba, 0x4e, 0x1b, 0x1c, 0x6c, - 0x01, 0xa4, 0xc2, 0xc7, 0x20, 0x2d, 0xa5, 0xb3, 0x14, 0x35, 0x5e, 0xc3, 0x14, 0x07, 0xd5, 0xe3, - 0x9d, 0x4b, 0xfd, 0xce, 0x88, 0x68, 0x1c, 0x25, 0xf7, 0x53, 0x01, 0x2c, 0x7e, 0x69, 0xd7, 0x30, - 0x25, 0x5f, 0x29, 0x1a, 0xf9, 0xa1, 0x47, 0x5c, 0x0a, 0x77, 0x81, 0x88, 0x2b, 0xbe, 0x10, 0xb3, - 0xca, 0xe6, 0xc8, 0xb5, 0x48, 0x63, 0xd8, 0xf0, 0x63, 0x30, 0xeb, 0x71, 0xba, 0xfc, 0xd5, 0x30, - 0x10, 0xad, 0x7f, 0x08, 0x39, 0xd0, 0x49, 0xb3, 0xf6, 0x39, 0x76, 0xcf, 0x34, 0xe0, 0x83, 0xb3, - 0xef, 0x3c, 0x02, 0xb3, 0x91, 0xd8, 0x64, 0xed, 0xc1, 0xe3, 0x7d, 0xed, 0x41, 0x7a, 0x0c, 0x4e, - 0x01, 0xf1, 0xc1, 0xd1, 0x7e, 0x5a, 0x50, 0x7e, 0x8c, 0xc0, 0xb5, 0x24, 0xe3, 0x87, 0xc4, 0x39, - 0xd7, 0xab, 0x04, 0xfe, 0xb7, 0x08, 0x26, 0x77, 0x1d, 0x66, 0x73, 0x38, 0xba, 0xf4, 0xd9, 0xd1, - 0x51, 0x72, 0xff, 0x97, 0xfa, 0xdd, 0x7f, 0xf9, 0xcf, 0x9f, 0xa6, 0x7e, 0x91, 0xca, 0xfd, 0x4f, - 0x4a, 0x3e, 0xdf, 0x0c, 0x5f, 0x68, 0x07, 0xbd, 0xcf, 0xca, 0x17, 0x91, 0xf2, 0xd1, 0x96, 0x2f, - 0xa2, 0x15, 0xa1, 0x2d, 0x5f, 0x44, 0xa2, 0xb3, 0x2d, 0xbb, 0xc4, 0xc6, 0x0e, 0xa6, 0x96, 0x23, - 0x5f, 0x78, 0xb1, 0x83, 0x8b, 0x48, 0x24, 0xb5, 0xe5, 0x8b, 0xd8, 0x85, 0x0a, 0xd7, 0x91, 0xf3, - 0x5e, 0xb8, 0xb6, 0xe5, 0x8b, 0x68, 0x6e, 0xfb, 0xae, 0x4b, 0x1d, 0xdb, 0x21, 0x75, 0xfd, 0xb9, - 0x9c, 0x6f, 0xfb, 0x4c, 0x22, 0x68, 0x6e, 0x92, 0x8e, 0x9b, 0x64, 0xe4, 0x26, 0x10, 0xe2, 0x42, - 0x0e, 0x9b, 0x51, 0xdb, 0xf2, 0x45, 0x2f, 0x57, 0xb5, 0xe5, 0x8b, 0xc4, 0x9b, 0x0e, 0xc3, 0x1c, - 0xf8, 0xd8, 0x13, 0xc3, 0x8b, 0xf4, 0xee, 0x6d, 0xf8, 0x57, 0x02, 0x00, 0xbe, 0xc3, 0xf9, 0xf5, - 0x78, 0x33, 0x4e, 0xcf, 0x73, 0x9f, 0xdf, 0xca, 0xad, 0x5f, 0xe2, 0xf1, 0x92, 0x90, 0x87, 0xbf, - 0x09, 0x26, 0x3f, 0xb3, 0xac, 0x33, 0xcf, 0x86, 0x8b, 0x45, 0xd7, 0xab, 0x28, 0xc5, 0xc3, 0x5a, - 0x70, 0xa7, 0x5f, 0x85, 0x73, 0x91, 0x73, 0x96, 0xe0, 0x77, 0x2e, 0x8d, 0x35, 0xd6, 0x17, 0xb5, - 0xe1, 0x1f, 0x08, 0x60, 0xd2, 0xbf, 0xe3, 0xaf, 0x62, 0x9a, 0x21, 0x4f, 0x45, 0xb9, 0x4d, 0x2e, - 0xc5, 0xfb, 0xd9, 0x97, 0x94, 0x82, 0x99, 0xe1, 0xef, 0x04, 0x30, 0x1d, 0x26, 0x1b, 0xb8, 0x71, - 0xa9, 0x28, 0x89, 0xbc, 0x34, 0x54, 0x92, 0xa7, 0x5c, 0x92, 0x5a, 0x36, 0x2f, 0x9f, 0x2b, 0x2f, - 0x96, 0x04, 0x57, 0x48, 0xd1, 0x97, 0x86, 0xe5, 0xa8, 0xc7, 0x9b, 0xca, 0xa8, 0x28, 0xf0, 0x2f, - 0x05, 0x90, 0x39, 0xc6, 0xb4, 0xda, 0x60, 0xc9, 0xb8, 0x9b, 0xbc, 0x0e, 0x4d, 0x1e, 0x78, 0xbf, - 0x3a, 0x95, 0x3e, 0xe4, 0x2a, 0x6d, 0x28, 0xef, 0xcb, 0xe7, 0x0a, 0x7e, 0x59, 0x01, 0x85, 0x3c, - 0xfc, 0x63, 0x01, 0x4c, 0xee, 0x91, 0x26, 0xa1, 0xa4, 0x3f, 0xd2, 0x86, 0xf1, 0xfa, 0xa6, 0xa3, - 0xbe, 0x5f, 0x79, 0x0f, 0x2c, 0x00, 0xa0, 0xda, 0xfa, 0x7d, 0xd2, 0x52, 0x3d, 0xda, 0x80, 0x63, - 0xe0, 0x1a, 0x98, 0x7c, 0xc0, 0x3e, 0x15, 0x38, 0x0f, 0xc6, 0x1d, 0x82, 0x6b, 0x60, 0xe2, 0x99, - 0xa3, 0x53, 0xe2, 0x07, 0x5f, 0xfe, 0x65, 0x83, 0xef, 0x3f, 0x04, 0x30, 0x7d, 0x8f, 0xd0, 0x2f, - 0x3c, 0xe2, 0xb4, 0x7e, 0x95, 0xe1, 0xf7, 0x13, 0xa1, 0xa3, 0x3e, 0xca, 0x1d, 0x81, 0xb5, 0x41, - 0x63, 0x45, 0x97, 0xe1, 0x88, 0xe3, 0xc4, 0xd7, 0x42, 0x65, 0x8c, 0xeb, 0x57, 0x84, 0xb7, 0x2f, - 0xd3, 0xef, 0x87, 0x8c, 0x41, 0xa8, 0xe5, 0x4f, 0x26, 0x40, 0xfa, 0x1e, 0xa1, 0x61, 0x17, 0xe1, - 0x33, 0xbf, 0x33, 0x7a, 0xe9, 0x0c, 0xf0, 0xb3, 0xaf, 0x8e, 0x9a, 0xfb, 0xd1, 0x38, 0xd7, 0xe0, - 0x7f, 0x45, 0xf8, 0x0b, 0xf1, 0x12, 0x1d, 0xba, 0xad, 0x49, 0x90, 0x84, 0x07, 0x8d, 0x38, 0xed, - 0xe4, 0x59, 0xa2, 0x62, 0x0d, 0x9d, 0x51, 0xfa, 0xce, 0xbc, 0x17, 0x1d, 0xc6, 0x2b, 0xc9, 0x0b, - 0xa6, 0x88, 0xc1, 0xa7, 0x43, 0x71, 0x63, 0xb5, 0x6f, 0x78, 0x97, 0xdf, 0x8f, 0xd7, 0xeb, 0xe2, - 0x07, 0x2a, 0x32, 0x94, 0x61, 0x7f, 0x69, 0x1b, 0xd2, 0x3a, 0x0f, 0x39, 0x1e, 0xaa, 0xa7, 0xfb, - 0x22, 0xae, 0xb1, 0xd2, 0x0b, 0xff, 0x41, 0x04, 0xe3, 0xfb, 0xd5, 0x86, 0x05, 0x87, 0xfd, 0xe2, - 0xe2, 0x7a, 0x95, 0xa2, 0x3f, 0xc4, 0x84, 0xc9, 0xe1, 0xa5, 0x21, 0x73, 0xff, 0x95, 0xea, 0xa8, - 0xbf, 0x93, 0x02, 0x73, 0xa4, 0xda, 0xb0, 0x90, 0xeb, 0xb7, 0x5c, 0x60, 0x9a, 0xaf, 0x1c, 0xbb, - 0x0a, 0x97, 0x1e, 0x7a, 0x86, 0x81, 0x9d, 0x56, 0x09, 0xed, 0x07, 0x5b, 0xd9, 0xf4, 0x5e, 0xef, - 0x19, 0x88, 0xef, 0xe6, 0xf6, 0x00, 0x8c, 0x5f, 0x5b, 0x2e, 0xed, 0x88, 0x97, 0xf5, 0xd3, 0xbb, - 0x40, 0xfc, 0x60, 0x63, 0x0b, 0xee, 0x80, 0x0f, 0x35, 0x42, 0x3d, 0xc7, 0x24, 0x35, 0xf4, 0xac, - 0x41, 0x4c, 0x44, 0x1b, 0x04, 0x39, 0xc4, 0xb5, 0x3c, 0xa7, 0x4a, 0x90, 0xee, 0x22, 0x4a, 0x0c, - 0xdb, 0x72, 0xb0, 0xa3, 0x37, 0x5b, 0xc8, 0x33, 0xf1, 0x39, 0xd6, 0x9b, 0xb8, 0xd2, 0x24, 0xc5, - 0x4f, 0x3f, 0x06, 0xe2, 0xf6, 0xc6, 0x36, 0xdc, 0x06, 0xf9, 0x17, 0x10, 0xa8, 0x59, 0xc4, 0x45, - 0xa6, 0x45, 0x11, 0x79, 0xae, 0xbb, 0xb4, 0x08, 0x27, 0x01, 0x7f, 0x83, 0xe3, 0x97, 0xec, 0xc9, - 0xe5, 0x69, 0x82, 0x19, 0x46, 0xbe, 0xf0, 0x1d, 0xf3, 0x78, 0x35, 0x97, 0x8e, 0x16, 0x1c, 0x76, - 0x56, 0xf2, 0x9f, 0x6c, 0x1e, 0x43, 0xd8, 0x77, 0x04, 0xff, 0x5a, 0x00, 0x73, 0x7b, 0x84, 0xd8, - 0xfc, 0x87, 0x29, 0xb6, 0xf1, 0x66, 0x3a, 0x9b, 0xbb, 0x5c, 0xb7, 0x3b, 0xb9, 0xed, 0x4b, 0x53, - 0x7c, 0xec, 0x37, 0xef, 0x22, 0x1b, 0x57, 0x78, 0x15, 0x52, 0x01, 0x38, 0xb2, 0xca, 0xba, 0x59, - 0xd3, 0xcd, 0x53, 0x17, 0xae, 0xf6, 0x65, 0xf0, 0xbd, 0xe0, 0xcf, 0x01, 0x86, 0x26, 0xf7, 0x31, - 0xf8, 0x15, 0x98, 0x7a, 0xa4, 0x1b, 0xc4, 0xf2, 0x28, 0x1c, 0x02, 0x34, 0x14, 0xf9, 0x3a, 0x17, - 0xff, 0x2a, 0x5c, 0x8e, 0xda, 0x93, 0x06, 0xc4, 0x1a, 0x20, 0xbd, 0xef, 0x38, 0x96, 0xc3, 0xca, - 0xf7, 0x1e, 0xa1, 0x58, 0x6f, 0xba, 0x23, 0x33, 0xb8, 0xc5, 0x19, 0xbc, 0x0d, 0xd7, 0x62, 0x0e, - 0x63, 0x54, 0x9f, 0xe9, 0xb4, 0x51, 0x0b, 0xa8, 0xfe, 0xa1, 0x00, 0xe0, 0x3d, 0x42, 0x93, 0xb3, - 0xdb, 0xe5, 0x3d, 0x42, 0x02, 0x63, 0xa8, 0x18, 0xef, 0x72, 0x31, 0x6e, 0xe4, 0x56, 0xa3, 0x62, - 0x30, 0x09, 0x2a, 0x56, 0xad, 0x25, 0x5f, 0xb0, 0x8e, 0x80, 0xcf, 0x78, 0xf0, 0xf7, 0x04, 0xb0, - 0x74, 0x6c, 0xb9, 0x94, 0x51, 0xe4, 0xa8, 0x5c, 0x90, 0x97, 0x1b, 0x13, 0x87, 0x72, 0x97, 0x39, - 0xf7, 0xf7, 0x72, 0xb7, 0xa2, 0xdc, 0x6d, 0xcb, 0xa5, 0x4c, 0x02, 0xfe, 0x53, 0xa3, 0x2f, 0x46, - 0x37, 0x28, 0xfe, 0x5e, 0x00, 0xcb, 0xbb, 0x0d, 0x52, 0x3d, 0x0b, 0x8b, 0xf3, 0x31, 0x76, 0xb0, - 0xe1, 0xbe, 0xa1, 0x98, 0xbe, 0xc7, 0xc5, 0x55, 0xe1, 0xdd, 0xcb, 0x62, 0xda, 0xe6, 0x52, 0xc9, - 0xa7, 0x84, 0x0e, 0x0c, 0x6f, 0xf8, 0x4f, 0x02, 0xb8, 0xc2, 0xd5, 0x60, 0x16, 0x7d, 0xf3, 0x7a, - 0x7c, 0xc1, 0xf5, 0xb8, 0x9f, 0x2b, 0xbd, 0xa4, 0x1e, 0xcc, 0x23, 0xf1, 0xa1, 0xaf, 0x5d, 0x8a, - 0xff, 0xa9, 0x4a, 0xf6, 0x6f, 0x85, 0x8e, 0xfa, 0x73, 0x01, 0xd6, 0x87, 0x8c, 0xd3, 0xd1, 0x47, - 0x7c, 0x54, 0x28, 0xa0, 0x67, 0x0d, 0xbd, 0xda, 0x40, 0x6e, 0xc3, 0xf2, 0x9a, 0x35, 0x9e, 0x17, - 0x2b, 0x04, 0x79, 0x2e, 0xa9, 0x21, 0xdd, 0x44, 0x76, 0x13, 0x57, 0x09, 0xb2, 0xea, 0x3c, 0x83, - 0xd6, 0xac, 0xaa, 0x67, 0x10, 0xd3, 0x1f, 0xd2, 0x50, 0xd5, 0x32, 0xd8, 0xe2, 0x46, 0xf6, 0x0b, - 0xb0, 0x3e, 0xa8, 0x65, 0x63, 0xf9, 0x2d, 0x1c, 0xe0, 0x47, 0x7d, 0x04, 0x7e, 0x0a, 0xae, 0x54, - 0xb1, 0x41, 0x9a, 0xbb, 0xd8, 0x25, 0x01, 0x0d, 0x36, 0x6d, 0x42, 0x0d, 0x4c, 0xf8, 0x3f, 0x64, - 0x8f, 0x7a, 0xc3, 0x57, 0xb9, 0x95, 0x97, 0xe1, 0x52, 0xec, 0x86, 0xb3, 0x23, 0xe5, 0x07, 0x60, - 0x4d, 0x35, 0x2d, 0xda, 0x20, 0x4e, 0xc0, 0x89, 0xdd, 0xaa, 0x48, 0xb6, 0xfb, 0x5e, 0x2c, 0xf7, - 0x8d, 0xca, 0x78, 0xac, 0xfc, 0xf3, 0xa9, 0x8e, 0xfa, 0xb3, 0x29, 0xf8, 0xaf, 0x02, 0x58, 0x56, - 0x51, 0xd9, 0x7f, 0xb6, 0x8f, 0xf8, 0xff, 0x6b, 0x70, 0xe5, 0x54, 0x3b, 0xde, 0x2d, 0xdc, 0xf3, - 0x55, 0x47, 0xb6, 0x63, 0x3d, 0x25, 0x55, 0x3a, 0xaa, 0xc9, 0xb2, 0x69, 0xd3, 0x32, 0xc9, 0xaf, - 0x05, 0xaa, 0x31, 0xe8, 0xfc, 0x0f, 0xc0, 0x95, 0xf2, 0xc3, 0x3d, 0xb4, 0x55, 0xd8, 0x6d, 0x62, - 0xcf, 0x25, 0xe8, 0x33, 0xbd, 0x4a, 0x4c, 0x97, 0xc0, 0x83, 0xd1, 0x28, 0xcb, 0x95, 0xa6, 0x55, - 0x91, 0x0d, 0xec, 0x52, 0xe2, 0xc8, 0x9f, 0x1d, 0xee, 0xee, 0x1f, 0x3d, 0xdc, 0x2f, 0xd2, 0xe7, - 0x54, 0x11, 0x37, 0x8b, 0x1b, 0x79, 0x51, 0x48, 0x8d, 0x2b, 0x69, 0x6c, 0xfb, 0x3f, 0x36, 0xe8, - 0x96, 0x29, 0x3f, 0x75, 0x2d, 0x53, 0x59, 0x89, 0xee, 0x3c, 0x2f, 0xd4, 0x2d, 0xab, 0x60, 0xe8, - 0x06, 0x29, 0xf5, 0x41, 0x96, 0x86, 0x40, 0x6a, 0xc7, 0xac, 0x94, 0x6f, 0xc1, 0x43, 0x70, 0xaf, - 0xbf, 0x94, 0x7b, 0x2e, 0x71, 0x7a, 0x65, 0xbc, 0x81, 0xcf, 0x09, 0xb2, 0x89, 0x63, 0xe8, 0xae, - 0xcb, 0x02, 0x93, 0x5a, 0x08, 0x57, 0xab, 0xc4, 0x75, 0x63, 0x65, 0xbf, 0xa8, 0xbd, 0x46, 0x73, - 0x30, 0xa5, 0x7d, 0x02, 0xc4, 0xed, 0xcd, 0x1d, 0xa8, 0x82, 0xf9, 0xc3, 0x77, 0x0d, 0x84, 0x11, - 0x25, 0xd8, 0xb6, 0x68, 0x11, 0x6e, 0x80, 0x62, 0x76, 0xa4, 0x77, 0xd9, 0xc7, 0x7f, 0x94, 0x02, - 0x8b, 0x60, 0xa6, 0x8c, 0x5d, 0xbd, 0xca, 0x07, 0xb3, 0xd4, 0xb4, 0x00, 0xde, 0x8a, 0x8d, 0x6a, - 0x8b, 0xd3, 0xa9, 0xec, 0xcc, 0xd7, 0x05, 0xf5, 0xf8, 0xb0, 0x70, 0x9f, 0xb4, 0x50, 0x0a, 0xfc, - 0x9b, 0xd0, 0x1d, 0xdd, 0xfe, 0x51, 0x98, 0x16, 0xa5, 0x71, 0xe5, 0x66, 0xe8, 0xc3, 0x88, 0xc3, - 0x65, 0x0b, 0x7b, 0xb4, 0x21, 0xb3, 0x7f, 0x2c, 0x47, 0xff, 0x0d, 0x52, 0x5a, 0x1f, 0x0e, 0x44, - 0xad, 0x33, 0x62, 0x96, 0x7f, 0x1b, 0x64, 0xfd, 0x49, 0x10, 0xc2, 0x7b, 0x0e, 0x36, 0xa9, 0x8b, - 0xd8, 0x22, 0xb0, 0x1e, 0x58, 0x0b, 0xe6, 0x43, 0xb8, 0x1c, 0x1c, 0xf2, 0x55, 0x78, 0xba, 0x0b, - 0x26, 0x70, 0xcd, 0xd0, 0x4d, 0x58, 0x8a, 0xa1, 0x9a, 0xb5, 0x18, 0x18, 0x77, 0x06, 0x03, 0xd3, - 0x5d, 0xca, 0x5a, 0x84, 0x73, 0x82, 0x74, 0xb3, 0x6e, 0x39, 0x06, 0xf7, 0x77, 0x65, 0x1d, 0xcc, - 0x47, 0x4d, 0x31, 0x96, 0x9c, 0x59, 0x2b, 0xef, 0x0d, 0x9d, 0x5a, 0x93, 0xa0, 0xce, 0x21, 0xb8, - 0xf6, 0x79, 0x2f, 0xfb, 0x44, 0xef, 0xd4, 0xa8, 0x77, 0xe9, 0xf1, 0x4c, 0xd7, 0x73, 0x95, 0x49, - 0x7e, 0x9f, 0xb7, 0x7e, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x34, 0x38, 0x21, 0xb4, 0x29, 0x00, - 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_eb14258081b6c54b) +} + +var fileDescriptor_a_bit_of_everything_eb14258081b6c54b = []byte{ + // 3520 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7a, 0x4b, 0x70, 0x1b, 0x47, + 0x7a, 0x3f, 0x07, 0xc3, 0x67, 0xf3, 0x05, 0x36, 0x45, 0x09, 0x82, 0xb8, 0x66, 0x0b, 0x92, 0xd7, + 0x23, 0xac, 0x80, 0x21, 0x87, 0xb4, 0x2d, 0xc1, 0xff, 0xb5, 0x3d, 0x20, 0x29, 0x99, 0x92, 0x4d, + 0xd1, 0x23, 0x59, 0x7f, 0x47, 0x6b, 0x2d, 0xd3, 0x00, 0x1a, 0xc4, 0x88, 0x98, 0xc7, 0xce, 0xf4, + 0x50, 0x84, 0x18, 0x24, 0x5b, 0x49, 0x2a, 0xa9, 0xca, 0xde, 0xb0, 0x49, 0xe5, 0xb1, 0xa9, 0x5c, + 0x52, 0xb9, 0xa4, 0x72, 0x4a, 0x55, 0x2a, 0x87, 0x54, 0x25, 0x39, 0xe4, 0x96, 0x43, 0x52, 0x4e, + 0x55, 0x4e, 0xc9, 0x29, 0x39, 0xe7, 0x92, 0x2a, 0x57, 0xe5, 0x90, 0x47, 0x75, 0xcf, 0x0c, 0x30, + 0x33, 0x00, 0x44, 0x41, 0xda, 0xb2, 0x0f, 0xd6, 0x74, 0xf7, 0xf7, 0xf8, 0x7d, 0xdd, 0x5f, 0x7f, + 0x8f, 0x06, 0x81, 0x42, 0x4e, 0xb1, 0x61, 0x37, 0x89, 0x2b, 0xdb, 0x8e, 0x45, 0x2d, 0x39, 0x18, + 0xda, 0x15, 0x19, 0x1f, 0x56, 0x74, 0x7a, 0x68, 0xd5, 0x0f, 0xc9, 0x09, 0x71, 0x5a, 0xb4, 0xa1, + 0x9b, 0x47, 0x45, 0x4e, 0x03, 0xd7, 0x8e, 0x1c, 0xbb, 0x5a, 0x3c, 0xc2, 0x94, 0x3c, 0xc7, 0xad, + 0x62, 0x28, 0xa0, 0xd8, 0x65, 0xcd, 0xae, 0x1e, 0x59, 0xd6, 0x51, 0x93, 0xc8, 0xd8, 0xd6, 0x65, + 0x6c, 0x9a, 0x16, 0xc5, 0x54, 0xb7, 0x4c, 0xd7, 0x67, 0xcf, 0xa2, 0x60, 0x95, 0x8f, 0x2a, 0x5e, + 0x5d, 0xae, 0xeb, 0xa4, 0x59, 0x3b, 0x34, 0xb0, 0x7b, 0x1c, 0x50, 0x5c, 0x49, 0x52, 0x10, 0xc3, + 0xa6, 0xad, 0x60, 0xf1, 0xad, 0xe4, 0x62, 0xcd, 0x73, 0xb8, 0xfc, 0x60, 0xfd, 0x9d, 0x84, 0x45, + 0x36, 0xa6, 0x0d, 0x62, 0x7a, 0x06, 0xff, 0x38, 0x64, 0x5f, 0x21, 0x8e, 0x04, 0xa1, 0xeb, 0x55, + 0x64, 0x83, 0xb8, 0x2e, 0x3e, 0x22, 0x01, 0xc5, 0xd5, 0x7e, 0x0a, 0x25, 0x41, 0xb2, 0x96, 0x44, + 0x43, 0x75, 0x83, 0xb8, 0x14, 0x1b, 0x76, 0x40, 0x70, 0x93, 0xff, 0x53, 0x2d, 0x1c, 0x11, 0xb3, + 0xe0, 0x3e, 0xc7, 0x47, 0x47, 0xc4, 0x91, 0x2d, 0x9b, 0xef, 0x47, 0xff, 0xde, 0xe4, 0xfe, 0xf1, + 0x0a, 0x48, 0xab, 0x65, 0x9d, 0x3e, 0xa8, 0xef, 0x76, 0x77, 0x1d, 0x3e, 0x05, 0xf3, 0xae, 0x6e, + 0x1e, 0x35, 0xc9, 0xa1, 0x49, 0x5c, 0x4a, 0x6a, 0x99, 0xcb, 0x48, 0x90, 0x66, 0x95, 0x5b, 0xc5, + 0x73, 0xce, 0xa1, 0x98, 0x94, 0x54, 0xdc, 0xe7, 0xfc, 0xda, 0x9c, 0x2f, 0xce, 0x1f, 0xc1, 0x06, + 0x18, 0xf7, 0x3c, 0xbd, 0x96, 0x11, 0x90, 0x20, 0xcd, 0x94, 0x1f, 0x75, 0xd4, 0xcf, 0x7f, 0x2c, + 0x08, 0xbf, 0x25, 0xdc, 0xff, 0x01, 0x2e, 0xd4, 0xd5, 0xc2, 0x9d, 0xf5, 0xc2, 0xed, 0xa7, 0x67, + 0xb7, 0xda, 0x85, 0xe8, 0x70, 0x6b, 0x94, 0xe1, 0x86, 0xd2, 0xd6, 0xb8, 0x06, 0x78, 0x00, 0x26, + 0x03, 0x0b, 0x52, 0x48, 0x7c, 0x23, 0x0b, 0x02, 0x39, 0xf0, 0x1e, 0x98, 0xad, 0x37, 0x2d, 0x4c, + 0x0f, 0x4f, 0x70, 0xd3, 0x23, 0x19, 0x11, 0x09, 0x52, 0xaa, 0x7c, 0xa3, 0xa3, 0x7e, 0x57, 0x59, + 0xba, 0xc3, 0xe6, 0x11, 0x9f, 0x47, 0xdc, 0xc3, 0x4a, 0xe2, 0x7a, 0x51, 0xf9, 0x5a, 0x88, 0x32, + 0x68, 0x80, 0x0f, 0x1e, 0xb3, 0x6f, 0x78, 0x15, 0xcc, 0xd5, 0x2c, 0xaf, 0xd2, 0x24, 0x81, 0xb0, + 0x71, 0x24, 0x48, 0x82, 0x36, 0xeb, 0xcf, 0xf9, 0x24, 0x6b, 0x60, 0x56, 0x37, 0xe9, 0x7b, 0x5b, + 0x01, 0xc5, 0x04, 0x12, 0x24, 0x51, 0x03, 0x7c, 0xaa, 0x2b, 0xc3, 0x8b, 0x52, 0x4c, 0x22, 0x41, + 0x1a, 0xd7, 0x66, 0xbd, 0x08, 0x89, 0x2f, 0x63, 0x53, 0x09, 0x28, 0xa6, 0x90, 0x20, 0x4d, 0x70, + 0x19, 0x9b, 0x8a, 0x4f, 0x70, 0x0d, 0xcc, 0xd7, 0xf5, 0x53, 0x52, 0xeb, 0x0a, 0x99, 0x46, 0x82, + 0x34, 0xa9, 0xcd, 0x05, 0x93, 0x71, 0xa2, 0xae, 0x9c, 0x19, 0x24, 0x48, 0x53, 0x01, 0x51, 0x28, + 0xe9, 0x3b, 0x00, 0x54, 0x2c, 0xab, 0x19, 0x50, 0x00, 0x24, 0x48, 0xd3, 0xda, 0x0c, 0x9b, 0xe9, + 0x82, 0x75, 0xa9, 0xa3, 0x9b, 0x47, 0x01, 0xc1, 0x2c, 0x73, 0x00, 0x6d, 0xd6, 0x9f, 0xeb, 0x82, + 0xad, 0xb4, 0x28, 0x71, 0x03, 0x8a, 0xef, 0x20, 0x41, 0x9a, 0xd3, 0x00, 0x9f, 0x8a, 0x19, 0xdc, + 0x85, 0x31, 0x8f, 0x04, 0x69, 0xde, 0x37, 0x38, 0x44, 0x71, 0x1f, 0x00, 0x76, 0xeb, 0x02, 0x82, + 0x05, 0x24, 0x48, 0x0b, 0xca, 0xcd, 0x73, 0x4f, 0x7e, 0xdf, 0x33, 0x88, 0xa3, 0x57, 0x77, 0x4d, + 0xcf, 0xd0, 0x66, 0x18, 0xbf, 0x2f, 0xec, 0x00, 0x2c, 0x76, 0xef, 0x71, 0x20, 0xf1, 0x2d, 0x2e, + 0x51, 0x1a, 0x22, 0x31, 0xbc, 0xfe, 0xc5, 0x03, 0x4c, 0x1b, 0x5c, 0xda, 0xbc, 0x1d, 0x7c, 0xf9, + 0x12, 0x5d, 0x70, 0xd1, 0x77, 0xa6, 0xc3, 0xa4, 0xe0, 0x35, 0x2e, 0xf8, 0xc3, 0xf3, 0x04, 0x7f, + 0xe6, 0x07, 0x84, 0x50, 0x7e, 0xe0, 0xa2, 0x5d, 0x75, 0xcb, 0x66, 0x6c, 0xec, 0x2b, 0x7d, 0x1b, + 0x2c, 0xb8, 0xf1, 0xf3, 0x5b, 0x44, 0x82, 0xb4, 0xa8, 0xcd, 0xbb, 0xb1, 0x03, 0xec, 0x92, 0x75, + 0x7d, 0x21, 0x8d, 0x04, 0x29, 0x1d, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x12, 0x12, 0xa4, + 0x25, 0x6d, 0xd6, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x95, 0x03, 0x91, 0x20, 0x41, 0x9f, 0x24, 0x94, + 0xa2, 0x80, 0x15, 0x87, 0xd8, 0x04, 0xb3, 0xad, 0x88, 0xf9, 0xc5, 0x32, 0x12, 0xa5, 0x19, 0x6d, + 0x39, 0x5c, 0x7c, 0x18, 0xf1, 0x8f, 0xdb, 0x60, 0xd6, 0x32, 0x09, 0x4b, 0x12, 0x2c, 0x42, 0x67, + 0x2e, 0xf0, 0xc0, 0x74, 0xb1, 0xe8, 0x07, 0xc5, 0x62, 0x18, 0x14, 0x8b, 0xbb, 0x6c, 0xf5, 0x93, + 0x31, 0x0d, 0x70, 0x62, 0x3e, 0x82, 0xd7, 0xc0, 0x9c, 0xcf, 0xea, 0xeb, 0xca, 0xac, 0x30, 0xef, + 0xfb, 0x64, 0x4c, 0xf3, 0x05, 0xfa, 0x4a, 0xe0, 0x57, 0x60, 0xc6, 0xc0, 0x76, 0x80, 0xe3, 0x22, + 0x0f, 0x1a, 0x1f, 0x8d, 0x1e, 0x34, 0x3e, 0xc3, 0x36, 0x87, 0xbb, 0x6b, 0x52, 0xa7, 0xa5, 0x4d, + 0x1b, 0xc1, 0x10, 0x9e, 0x82, 0x65, 0x03, 0xdb, 0x76, 0xd2, 0xde, 0x4b, 0x5c, 0xcf, 0x27, 0xaf, + 0xa5, 0xc7, 0x8e, 0xed, 0x8f, 0xaf, 0x70, 0xc9, 0x48, 0xce, 0x47, 0x34, 0x07, 0xbe, 0xe7, 0x6b, + 0xce, 0xbc, 0x99, 0x66, 0xdf, 0xf3, 0xfa, 0x35, 0x47, 0xe6, 0x61, 0x09, 0x64, 0x4c, 0xcb, 0xdc, + 0xb6, 0xcc, 0x13, 0x62, 0xb2, 0xcc, 0x83, 0x9b, 0xfb, 0xd8, 0xf0, 0xc3, 0x5b, 0x26, 0xcb, 0x03, + 0xc0, 0xd0, 0x75, 0xb8, 0x0d, 0x16, 0xbb, 0xe9, 0x2d, 0x40, 0x7c, 0x85, 0x9f, 0x78, 0xb6, 0xef, + 0xc4, 0x1f, 0x85, 0x74, 0xda, 0x42, 0x97, 0xc5, 0x17, 0xf2, 0x15, 0xe8, 0x7a, 0x52, 0xf4, 0xb2, + 0xad, 0x22, 0x71, 0xe4, 0xb8, 0xb0, 0x14, 0x0a, 0xea, 0x5d, 0xac, 0x3f, 0x13, 0x40, 0x26, 0x2e, + 0xbe, 0x97, 0x64, 0x33, 0x68, 0x74, 0x1d, 0xe5, 0x9d, 0x8e, 0xaa, 0xe6, 0xaf, 0x68, 0x81, 0x48, + 0x64, 0xfa, 0x4b, 0x88, 0x89, 0x46, 0x54, 0xa7, 0x4d, 0xa2, 0xe4, 0x06, 0x2f, 0xd6, 0x88, 0x5b, + 0x75, 0x74, 0x9e, 0xe9, 0x8b, 0xda, 0xc5, 0x28, 0x52, 0xb5, 0x8b, 0x08, 0xfe, 0xb6, 0x00, 0x56, + 0x7a, 0x9b, 0x10, 0xc5, 0x7a, 0x75, 0xf4, 0x38, 0x59, 0x56, 0x3a, 0xaa, 0x9c, 0x87, 0xfb, 0xfd, + 0x10, 0x2f, 0xef, 0x0f, 0x45, 0xb6, 0xdc, 0x8d, 0xad, 0x11, 0x58, 0x27, 0x20, 0x9b, 0x0c, 0x05, + 0x11, 0x68, 0x39, 0x16, 0x0f, 0xca, 0xb7, 0x3a, 0xea, 0xbb, 0xf9, 0x95, 0xae, 0xed, 0x3e, 0x59, + 0xa0, 0x6f, 0x35, 0x39, 0x1d, 0x53, 0x99, 0x89, 0x47, 0x92, 0x88, 0xde, 0xbf, 0x16, 0x22, 0x8a, + 0x83, 0x9b, 0x11, 0x51, 0x7c, 0xed, 0xcd, 0xaa, 0x86, 0xf2, 0x9d, 0x8e, 0xba, 0x9d, 0xef, 0x61, + 0xf3, 0x15, 0x20, 0xab, 0xf2, 0x8c, 0x54, 0x69, 0x80, 0xfc, 0xda, 0x90, 0xd5, 0xc1, 0x06, 0xf8, + 0x72, 0x23, 0x06, 0xfc, 0x4c, 0x00, 0x4b, 0xfd, 0xb8, 0xaf, 0xbf, 0x59, 0xbd, 0x56, 0xde, 0xea, + 0xa8, 0x1b, 0xf9, 0xe5, 0xfd, 0x01, 0x70, 0xb3, 0xfb, 0xc3, 0x51, 0xa6, 0xcd, 0x24, 0xba, 0xf7, + 0xc1, 0xb2, 0x9f, 0x03, 0xac, 0x13, 0xe2, 0x38, 0x7a, 0x8d, 0x1c, 0xd2, 0x96, 0x4d, 0x32, 0x6f, + 0xb3, 0x32, 0xa6, 0x3c, 0xd5, 0x51, 0xc7, 0xff, 0x20, 0x25, 0x88, 0xda, 0x12, 0xa7, 0x79, 0x10, + 0x90, 0x3c, 0x6a, 0xd9, 0x24, 0xfb, 0xaf, 0x02, 0x98, 0x0c, 0xaa, 0x45, 0x08, 0xc6, 0x4d, 0x6c, + 0x10, 0xbf, 0x5a, 0xd4, 0xf8, 0x37, 0xbc, 0x08, 0x26, 0xb1, 0x61, 0x79, 0x26, 0xcd, 0xa4, 0x78, + 0xfa, 0x0f, 0x46, 0xd0, 0x00, 0x29, 0xeb, 0x98, 0x17, 0x65, 0x0b, 0x8a, 0xfa, 0xba, 0xd6, 0x17, + 0x77, 0x08, 0xb1, 0xb9, 0x7b, 0x67, 0x3b, 0xea, 0x25, 0x65, 0x25, 0x1c, 0xc6, 0x8d, 0x4d, 0x59, + 0xc7, 0xb9, 0x35, 0x30, 0x1d, 0x2e, 0xc2, 0x19, 0x30, 0x71, 0x47, 0xfd, 0xf4, 0xe1, 0x6e, 0x7a, + 0x0c, 0x4e, 0x83, 0xf1, 0x47, 0xda, 0x17, 0xbb, 0x69, 0xa1, 0x74, 0xa9, 0xa3, 0x5e, 0x50, 0x20, + 0x4c, 0x9f, 0xa1, 0x9c, 0x75, 0x9c, 0x2b, 0xa1, 0x1c, 0x9b, 0xcf, 0xa1, 0x76, 0x56, 0x07, 0xf3, + 0xb1, 0x1c, 0x01, 0xd3, 0x40, 0x3c, 0x26, 0xad, 0xc0, 0x48, 0xf6, 0x09, 0xcb, 0x60, 0xc2, 0x0f, + 0x54, 0xa9, 0xd7, 0x28, 0x60, 0x7c, 0xd6, 0x52, 0xea, 0x96, 0x90, 0xdd, 0x01, 0x17, 0x07, 0xa7, + 0x89, 0x01, 0x3a, 0x2f, 0x44, 0x75, 0xce, 0x44, 0xa5, 0xfc, 0x72, 0x28, 0x25, 0x19, 0xf2, 0x07, + 0x48, 0xd9, 0x8f, 0x4a, 0x79, 0x93, 0xa2, 0xbb, 0xa7, 0xbf, 0xf4, 0xfb, 0xa9, 0x8e, 0xfa, 0x3b, + 0x29, 0xf0, 0xeb, 0x42, 0x7e, 0x59, 0x45, 0x15, 0x9d, 0x22, 0xab, 0x8e, 0x7a, 0x7d, 0xa2, 0xb2, + 0xb7, 0x67, 0xd2, 0x30, 0x7d, 0xb4, 0x50, 0xd5, 0x32, 0xec, 0xa6, 0x5e, 0xe5, 0xb7, 0x2a, 0xe8, + 0x9e, 0x10, 0x73, 0x3c, 0x44, 0x2d, 0x54, 0x65, 0xae, 0x88, 0x0c, 0x6c, 0xb6, 0x50, 0x9d, 0x60, + 0xea, 0x39, 0xc4, 0x65, 0xb2, 0x0e, 0xc2, 0x3c, 0xf2, 0xb5, 0xc0, 0x5b, 0x87, 0xaf, 0x85, 0x68, + 0xe1, 0xfd, 0xb5, 0x10, 0xab, 0xd4, 0xf3, 0x8f, 0xc1, 0xf5, 0x3b, 0xba, 0x59, 0x43, 0x96, 0x47, + 0x91, 0x61, 0x39, 0x04, 0xe1, 0x0a, 0xfb, 0xec, 0x6b, 0xa4, 0x8a, 0x0d, 0x4a, 0x6d, 0xb7, 0x24, + 0xcb, 0x47, 0x3a, 0x6d, 0x78, 0x95, 0x62, 0xd5, 0x32, 0x64, 0xb6, 0x19, 0x05, 0x52, 0xb5, 0xdc, + 0x96, 0x4b, 0x49, 0x30, 0x0c, 0xf6, 0x46, 0xd9, 0x82, 0xca, 0x19, 0xca, 0x31, 0xfd, 0xcc, 0x59, + 0xd6, 0xab, 0xf5, 0xcd, 0xf7, 0x36, 0xc8, 0x46, 0x61, 0xab, 0xb2, 0xb5, 0x55, 0xd8, 0xba, 0xb5, + 0x59, 0x2b, 0xe0, 0x8d, 0x77, 0x6f, 0x17, 0xde, 0xdd, 0xaa, 0xe1, 0x4a, 0xad, 0xfe, 0x3e, 0xb9, + 0xb5, 0xb1, 0x95, 0x43, 0xed, 0xf2, 0x7c, 0x58, 0x13, 0x71, 0x70, 0xb9, 0xff, 0x99, 0x06, 0x99, + 0x24, 0x92, 0x30, 0xc8, 0xc0, 0xdb, 0xe0, 0x32, 0xaf, 0x3a, 0xbb, 0x41, 0x2f, 0xda, 0xcd, 0x08, + 0x48, 0x94, 0x52, 0xda, 0x45, 0x46, 0x10, 0x32, 0xdc, 0xe9, 0xb5, 0x2b, 0x1f, 0x80, 0x6c, 0x9c, + 0x35, 0xd6, 0xbc, 0xb0, 0x06, 0x4b, 0xd0, 0x2e, 0x45, 0x79, 0x77, 0x22, 0x8d, 0x4c, 0x9f, 0xde, + 0x68, 0x6d, 0x28, 0x22, 0x51, 0x12, 0xe3, 0x7a, 0xf7, 0x7a, 0x65, 0x62, 0x9f, 0xde, 0x58, 0xc3, + 0x33, 0x8e, 0x44, 0x69, 0x3c, 0xae, 0xf7, 0x8b, 0x48, 0x8d, 0x39, 0x48, 0x6f, 0xb7, 0x6c, 0x9d, + 0x40, 0xa2, 0x34, 0xd1, 0xa7, 0x37, 0xac, 0x60, 0xbf, 0x0f, 0xae, 0x24, 0xb6, 0x2a, 0x56, 0x18, + 0x4f, 0x22, 0x51, 0x9a, 0xd4, 0x32, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0x83, 0xd9, 0x23, 0x6d, 0x98, + 0x28, 0x4d, 0x0d, 0x60, 0x0f, 0xb5, 0xbf, 0x0f, 0x32, 0x71, 0xf6, 0x48, 0x63, 0x35, 0x8d, 0x44, + 0x69, 0x5a, 0x5b, 0x89, 0xf2, 0x96, 0xbb, 0x4d, 0x56, 0xdf, 0x76, 0xc5, 0x4a, 0xcd, 0x19, 0x5e, + 0x5a, 0xc7, 0xb6, 0x2b, 0x5e, 0x5e, 0x27, 0xb6, 0x2b, 0xda, 0x8c, 0x01, 0x24, 0x4a, 0x73, 0xf1, + 0xed, 0x2a, 0xf7, 0x1a, 0xb3, 0x81, 0xc7, 0xd4, 0x35, 0x77, 0x16, 0x89, 0xd2, 0x7c, 0xff, 0x31, + 0x85, 0xd6, 0x92, 0xa4, 0xb5, 0x91, 0x42, 0x6d, 0xee, 0x35, 0x0a, 0xb5, 0xd8, 0xde, 0xf4, 0x8a, + 0xb5, 0x8f, 0xc0, 0x6a, 0x62, 0x6f, 0xe2, 0x87, 0x32, 0x8f, 0x44, 0x69, 0x51, 0xbb, 0x1c, 0xdb, + 0x9d, 0x58, 0x7f, 0x34, 0x44, 0x40, 0xd7, 0x29, 0x16, 0x90, 0x28, 0xa5, 0x07, 0x09, 0x18, 0xea, + 0xcc, 0xb1, 0x3e, 0x6a, 0x11, 0x89, 0xd2, 0x52, 0xe2, 0x74, 0x22, 0xbb, 0x34, 0x90, 0x39, 0xd2, + 0xa9, 0x89, 0x12, 0xec, 0x67, 0x0e, 0x34, 0x97, 0x1a, 0x1d, 0x95, 0x28, 0x55, 0x88, 0xcf, 0x50, + 0x6e, 0x98, 0x63, 0xe5, 0x4a, 0xe8, 0x07, 0xd4, 0xf1, 0xc8, 0x4d, 0xe4, 0xff, 0xbf, 0x8e, 0x9b, + 0x6e, 0x30, 0x78, 0x7a, 0x33, 0xc9, 0x16, 0xc1, 0xcd, 0xf8, 0x36, 0x6e, 0x22, 0xe5, 0x26, 0xda, + 0x7c, 0x8a, 0xda, 0xb9, 0x2c, 0x18, 0x2f, 0x5b, 0xb5, 0xd6, 0xa0, 0xcc, 0x9d, 0xfb, 0x0a, 0x2c, + 0x06, 0xed, 0xeb, 0xff, 0xd7, 0x69, 0x83, 0x93, 0x2d, 0x80, 0x54, 0xf8, 0x18, 0xa4, 0xa5, 0x74, + 0x16, 0xa2, 0xc6, 0x6b, 0x98, 0xe2, 0x20, 0x7b, 0xbc, 0x7d, 0xee, 0xb9, 0x33, 0x21, 0x1a, 0x67, + 0xc9, 0xfd, 0x54, 0x00, 0x8b, 0x5f, 0xd8, 0x35, 0x4c, 0xc9, 0x63, 0x45, 0x23, 0x3f, 0xf2, 0x88, + 0x4b, 0xe1, 0x36, 0x10, 0x71, 0xc5, 0x07, 0x31, 0xab, 0x6c, 0x8c, 0x9c, 0x8b, 0x34, 0xc6, 0x0d, + 0x3f, 0x00, 0xb3, 0x1e, 0x97, 0xcb, 0x5f, 0x0d, 0x03, 0x68, 0xfd, 0x4d, 0xc8, 0x1d, 0x9d, 0x34, + 0x6b, 0x9f, 0x61, 0xf7, 0x58, 0x03, 0x3e, 0x39, 0xfb, 0xce, 0x23, 0x30, 0x1b, 0xf1, 0x4d, 0x56, + 0x1e, 0x3c, 0xd9, 0xd5, 0x1e, 0xa4, 0xc7, 0xe0, 0x14, 0x10, 0x1f, 0xec, 0xef, 0xa6, 0x05, 0xe5, + 0x2f, 0x11, 0xb8, 0x94, 0x54, 0xfc, 0x90, 0x38, 0x27, 0x7a, 0x95, 0xc0, 0xff, 0x10, 0xc1, 0xe4, + 0xb6, 0xc3, 0xf6, 0x1c, 0x8e, 0x8e, 0x3e, 0x3b, 0x3a, 0x4b, 0xee, 0xbf, 0x53, 0xbf, 0xfa, 0x4f, + 0xff, 0xfe, 0xd3, 0xd4, 0x37, 0xa9, 0xdc, 0x7f, 0xa6, 0xe4, 0x93, 0x8d, 0xf0, 0x85, 0x76, 0xd0, + 0xfb, 0xac, 0x7c, 0x16, 0x49, 0x1f, 0x6d, 0xf9, 0x2c, 0x9a, 0x11, 0xda, 0xf2, 0x59, 0xc4, 0x3b, + 0xdb, 0xb2, 0x4b, 0x6c, 0xec, 0x60, 0x6a, 0x39, 0xf2, 0x99, 0x17, 0x5b, 0x38, 0x8b, 0x78, 0x52, + 0x5b, 0x3e, 0x8b, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xb9, 0x6b, 0x5b, 0x3e, 0x8b, 0xc6, 0xb6, + 0xef, 0xbb, 0xd4, 0xb1, 0x1d, 0x52, 0xd7, 0x4f, 0xe5, 0x7c, 0xdb, 0x57, 0x12, 0x61, 0x73, 0x93, + 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xac, 0x47, 0x6d, 0xcb, 0x67, 0xbd, 0x58, + 0xd5, 0x96, 0xcf, 0x12, 0x6f, 0x3a, 0x8c, 0x73, 0xe0, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, 0xb7, + 0xe1, 0x1f, 0x09, 0x00, 0xf8, 0x07, 0xce, 0xaf, 0xc7, 0xb7, 0x73, 0xe8, 0x79, 0x7e, 0xe6, 0xd7, + 0x73, 0x6b, 0xe7, 0x9c, 0x78, 0x49, 0xc8, 0xc3, 0x5f, 0x02, 0x93, 0x9f, 0x5a, 0xd6, 0xb1, 0x67, + 0xc3, 0xc5, 0xa2, 0xeb, 0x55, 0x94, 0xe2, 0x5e, 0x2d, 0xb8, 0xd3, 0xaf, 0xa3, 0xb9, 0xc8, 0x35, + 0x4b, 0xf0, 0xbb, 0xe7, 0xfa, 0x1a, 0xab, 0x8b, 0xda, 0xf0, 0x37, 0x04, 0x30, 0xe9, 0xdf, 0xf1, + 0xd7, 0xd9, 0x9a, 0x21, 0x4f, 0x45, 0xb9, 0x0d, 0x8e, 0xe2, 0x7b, 0xd9, 0x57, 0x44, 0xc1, 0xb6, + 0xe1, 0x6f, 0x05, 0x30, 0x1d, 0x06, 0x1b, 0xb8, 0x7e, 0x2e, 0x94, 0x44, 0x5c, 0x1a, 0x8a, 0xe4, + 0x19, 0x47, 0x52, 0xcb, 0xe6, 0xe5, 0x13, 0xe5, 0xe5, 0x48, 0x70, 0x85, 0x14, 0x7d, 0x34, 0x2c, + 0x46, 0x3d, 0xd9, 0x50, 0x46, 0x65, 0x81, 0x7f, 0x28, 0x80, 0xcc, 0x01, 0xa6, 0xd5, 0x06, 0x0b, + 0xc6, 0xdd, 0xe0, 0xb5, 0x67, 0x72, 0xc7, 0xfb, 0xf9, 0x99, 0xf4, 0x1e, 0x37, 0x69, 0x5d, 0xf9, + 0x9e, 0x7c, 0xa2, 0xe0, 0x57, 0x05, 0x28, 0xe4, 0xe1, 0x9f, 0x08, 0x60, 0x72, 0x87, 0x34, 0x09, + 0x25, 0xfd, 0x9e, 0x36, 0x4c, 0x97, 0xd3, 0x51, 0xd5, 0xca, 0x0d, 0xb0, 0x00, 0x80, 0x6a, 0xeb, + 0xf7, 0x49, 0x4b, 0xf5, 0x68, 0x03, 0x8e, 0x81, 0x4b, 0x60, 0xf2, 0x01, 0xfb, 0x54, 0xe0, 0x3c, + 0x18, 0x77, 0x08, 0xae, 0x81, 0x89, 0xe7, 0x8e, 0x4e, 0xc9, 0xb3, 0x0b, 0x60, 0xe1, 0xb4, 0xa0, + 0x3b, 0x0e, 0x03, 0xe1, 0xea, 0x95, 0x26, 0x81, 0x29, 0x24, 0xf8, 0x2e, 0x99, 0x7f, 0x55, 0x97, + 0xfc, 0x37, 0x01, 0x4c, 0xdf, 0x25, 0xf4, 0x73, 0x8f, 0x38, 0xad, 0x9f, 0xa7, 0x53, 0xfe, 0x44, + 0xe8, 0xa8, 0x8f, 0x72, 0xfb, 0x60, 0x75, 0x50, 0xb3, 0xd1, 0x55, 0x38, 0x62, 0x93, 0xf1, 0xa5, + 0x50, 0x19, 0xe3, 0xf6, 0x15, 0xe1, 0xcd, 0xf3, 0xec, 0xfb, 0x11, 0x53, 0x10, 0x5a, 0xf9, 0x93, + 0x09, 0x90, 0xbe, 0x4b, 0x68, 0x58, 0x5b, 0xf8, 0xca, 0x6f, 0x8f, 0x9e, 0x50, 0x03, 0xfe, 0xec, + 0xeb, 0xb3, 0xe6, 0x7e, 0x3c, 0xce, 0x2d, 0xf8, 0x2f, 0x11, 0x7e, 0x23, 0x9e, 0x63, 0x43, 0xb7, + 0x60, 0x09, 0x42, 0xf3, 0xa0, 0xc6, 0xa7, 0x9d, 0x5c, 0x4b, 0xe4, 0xb1, 0xa1, 0x9d, 0x4b, 0xdf, + 0x9a, 0xf7, 0xb2, 0xc5, 0x78, 0x7e, 0x79, 0x49, 0x6f, 0x31, 0x78, 0x75, 0x28, 0x6f, 0x2c, 0x23, + 0x0e, 0xaf, 0xfd, 0xfb, 0xf9, 0x7a, 0xb5, 0xfd, 0x40, 0x43, 0x86, 0x2a, 0xec, 0x4f, 0x78, 0x43, + 0x0a, 0xea, 0x21, 0xcb, 0x43, 0xed, 0x74, 0x5f, 0xa6, 0x35, 0x96, 0x90, 0xe1, 0xbf, 0x88, 0x60, + 0x7c, 0xb7, 0xda, 0xb0, 0xe0, 0xb0, 0xdf, 0x61, 0x5c, 0xaf, 0x52, 0xf4, 0x5b, 0x9b, 0x30, 0x64, + 0xbc, 0x32, 0x65, 0xee, 0x7f, 0x53, 0x1d, 0xf5, 0xf7, 0x52, 0x60, 0x8e, 0x54, 0x1b, 0x16, 0x72, + 0xfd, 0x42, 0x0c, 0x4c, 0xf3, 0x91, 0x63, 0x57, 0xe1, 0xd2, 0x43, 0xcf, 0x30, 0xb0, 0xd3, 0x2a, + 0xa1, 0xdd, 0x60, 0x2a, 0x9b, 0xde, 0xe9, 0x3d, 0x0e, 0xf1, 0xd9, 0xdc, 0x0e, 0x80, 0xf1, 0x6b, + 0xcb, 0xd1, 0x8e, 0x78, 0x59, 0xef, 0x3d, 0x06, 0xe2, 0xbb, 0xeb, 0x9b, 0xf0, 0x01, 0x78, 0x4f, + 0x23, 0xd4, 0x73, 0x4c, 0x52, 0x43, 0xcf, 0x1b, 0xc4, 0x44, 0xb4, 0x41, 0x90, 0x43, 0x5c, 0xcb, + 0x73, 0xaa, 0x04, 0xe9, 0x2e, 0xa2, 0xc4, 0xb0, 0x2d, 0x07, 0x3b, 0x7a, 0xb3, 0x85, 0x3c, 0x13, + 0x9f, 0x60, 0xbd, 0x89, 0x2b, 0x4d, 0x52, 0xcc, 0xaf, 0x80, 0xe9, 0xd3, 0x82, 0xe9, 0x19, 0x15, + 0xe2, 0xc0, 0x99, 0xa5, 0x31, 0xfe, 0xdf, 0x2f, 0x7c, 0x7c, 0xef, 0x03, 0x20, 0x6e, 0xad, 0x6f, + 0xc1, 0x2d, 0x90, 0x7f, 0x89, 0xdc, 0x9a, 0x45, 0x5c, 0x64, 0x5a, 0x14, 0x91, 0x53, 0xdd, 0xa5, + 0x45, 0x38, 0x09, 0xf8, 0x83, 0x1d, 0xbf, 0x7b, 0x4f, 0xcf, 0x8f, 0x1e, 0x6c, 0xbf, 0xe4, 0x33, + 0xff, 0xbc, 0x9e, 0x5c, 0xce, 0xa5, 0xa3, 0xd9, 0x89, 0xad, 0x95, 0xfc, 0xf7, 0x9d, 0x27, 0x10, + 0xf6, 0x2d, 0xc1, 0xbf, 0x10, 0xc0, 0xdc, 0x0e, 0x21, 0x36, 0xff, 0x15, 0x8b, 0x4d, 0x7c, 0x3b, + 0x65, 0xd0, 0x47, 0xdc, 0xb6, 0xdb, 0xb9, 0xad, 0x73, 0x23, 0x7f, 0xec, 0x07, 0xf2, 0x22, 0xeb, + 0x6d, 0x78, 0xca, 0x52, 0x01, 0xd8, 0xb7, 0xca, 0xba, 0x59, 0xd3, 0xcd, 0x23, 0x17, 0x5e, 0xee, + 0x0b, 0xec, 0x3b, 0xc1, 0xdf, 0x0e, 0x0c, 0x8d, 0xf9, 0x63, 0xf0, 0x31, 0x98, 0x7a, 0xa4, 0x1b, + 0xc4, 0xf2, 0x28, 0x1c, 0x42, 0x34, 0x94, 0xf9, 0x0a, 0x87, 0xbf, 0x02, 0x97, 0xa3, 0xfb, 0x49, + 0x03, 0x61, 0x0d, 0x90, 0xde, 0x75, 0x1c, 0xcb, 0x61, 0xb9, 0x7e, 0x87, 0x50, 0xac, 0x37, 0xdd, + 0x91, 0x15, 0x5c, 0xe7, 0x0a, 0xde, 0x82, 0xab, 0xb1, 0x03, 0x63, 0x52, 0x9f, 0xeb, 0xb4, 0x51, + 0x0b, 0xa4, 0xfe, 0xa6, 0x00, 0xe0, 0x5d, 0x42, 0x93, 0x8d, 0xde, 0xf9, 0x05, 0x45, 0x82, 0x63, + 0x28, 0x8c, 0x77, 0x38, 0x8c, 0xab, 0xb9, 0xcb, 0x51, 0x18, 0x0c, 0x41, 0xc5, 0xaa, 0xb5, 0xe4, + 0x33, 0x56, 0x3e, 0xf0, 0x86, 0x10, 0xfe, 0x9a, 0x00, 0x96, 0x0e, 0x2c, 0x97, 0x32, 0x89, 0x9c, + 0x95, 0x03, 0x79, 0xb5, 0x9e, 0x72, 0xa8, 0x76, 0x99, 0x6b, 0xbf, 0x91, 0xbb, 0x1e, 0xd5, 0x6e, + 0x5b, 0x2e, 0x65, 0x08, 0xf8, 0xef, 0x92, 0x3e, 0x8c, 0xae, 0x53, 0xfc, 0x9d, 0x00, 0x96, 0xb7, + 0x1b, 0xa4, 0x7a, 0x1c, 0xe6, 0xec, 0x03, 0xec, 0x60, 0xc3, 0xfd, 0x96, 0x7c, 0xfa, 0x2e, 0x87, + 0xab, 0xc2, 0x8f, 0xce, 0xf3, 0x69, 0x9b, 0xa3, 0x92, 0x8f, 0x08, 0x1d, 0xe8, 0xde, 0xf0, 0x1f, + 0x04, 0x70, 0x81, 0x9b, 0xc1, 0x76, 0xf4, 0xdb, 0xb7, 0xe3, 0x73, 0x6e, 0xc7, 0xfd, 0x5c, 0xe9, + 0x15, 0xed, 0x60, 0x27, 0x12, 0xef, 0x10, 0xdb, 0xa5, 0xf8, 0xdf, 0xb5, 0x64, 0xff, 0x46, 0xe8, + 0xa8, 0x7f, 0x25, 0xc0, 0xfa, 0x90, 0xde, 0x3b, 0xfa, 0xe2, 0x8f, 0x0a, 0x05, 0xf4, 0xbc, 0xa1, + 0x57, 0x1b, 0xc8, 0x6d, 0x58, 0x5e, 0xb3, 0xc6, 0xe3, 0x62, 0x85, 0x20, 0xcf, 0x25, 0x35, 0xa4, + 0x9b, 0xc8, 0x6e, 0xe2, 0x2a, 0x41, 0x56, 0x9d, 0x47, 0xd0, 0x9a, 0x55, 0xf5, 0x0c, 0x62, 0xfa, + 0x1d, 0x1d, 0xaa, 0x5a, 0x06, 0x1b, 0x5c, 0xcd, 0x7e, 0x0e, 0xd6, 0x06, 0x55, 0x72, 0x2c, 0xbe, + 0x85, 0xdd, 0xfe, 0xa8, 0x2f, 0xc6, 0xcf, 0xc0, 0x85, 0x2a, 0x36, 0x48, 0x73, 0x1b, 0xbb, 0x24, + 0x90, 0xc1, 0x5a, 0x53, 0xa8, 0x81, 0x09, 0xff, 0x57, 0xef, 0x51, 0x6f, 0xf8, 0x65, 0xbe, 0xcb, + 0xcb, 0x70, 0x29, 0x76, 0xc3, 0xd9, 0x92, 0xf2, 0x43, 0xb0, 0xaa, 0x9a, 0x16, 0x6d, 0x10, 0x27, + 0xd0, 0xc4, 0x6e, 0x55, 0x24, 0xda, 0x7d, 0x18, 0x8b, 0x7d, 0xa3, 0x2a, 0x1e, 0x2b, 0xff, 0xf9, + 0x4c, 0x47, 0xfd, 0xe3, 0x19, 0xf8, 0x8d, 0x00, 0x96, 0x55, 0x54, 0xf6, 0xdf, 0xf8, 0x23, 0xe7, + 0xff, 0x25, 0xb8, 0x70, 0xa4, 0x1d, 0x6c, 0x17, 0xee, 0xfa, 0xa6, 0x23, 0xdb, 0xb1, 0x9e, 0x91, + 0x2a, 0x1d, 0x75, 0xcb, 0xb2, 0x69, 0xd3, 0x32, 0xc9, 0xc7, 0x81, 0x69, 0x8c, 0x3a, 0xff, 0x43, + 0x70, 0xa1, 0xfc, 0x70, 0x07, 0x6d, 0x16, 0xb6, 0x9b, 0xd8, 0x73, 0x09, 0xfa, 0x54, 0xaf, 0x12, + 0xd3, 0x25, 0xf0, 0xce, 0x68, 0x92, 0xe5, 0x4a, 0xd3, 0xaa, 0xc8, 0x06, 0x76, 0x29, 0x71, 0xe4, + 0x4f, 0xf7, 0xb6, 0x77, 0xf7, 0x1f, 0xee, 0x16, 0xe9, 0x29, 0x55, 0xc4, 0x8d, 0xe2, 0x7a, 0x09, + 0x81, 0x95, 0xd3, 0x82, 0x6b, 0x19, 0x84, 0x5b, 0xd3, 0xfb, 0x82, 0x53, 0xd9, 0x89, 0x16, 0xae, + 0xd5, 0x70, 0x5e, 0x14, 0x52, 0xe3, 0x4a, 0x1a, 0xdb, 0xfe, 0x6f, 0x17, 0xba, 0x65, 0xca, 0xcf, + 0x5c, 0xcb, 0x54, 0x2e, 0x46, 0x67, 0x4e, 0x0b, 0x75, 0xcb, 0x2a, 0x18, 0xba, 0x41, 0x4a, 0x7d, + 0x94, 0xa5, 0x21, 0x94, 0xda, 0x01, 0x4b, 0xf6, 0x9b, 0x70, 0x0f, 0xdc, 0xed, 0x4f, 0xf6, 0x9e, + 0x4b, 0x9c, 0x5e, 0xa2, 0x6f, 0xe0, 0x13, 0x82, 0x6c, 0xe2, 0x18, 0xba, 0xeb, 0x32, 0xd7, 0xa5, + 0x16, 0xc2, 0xd5, 0x2a, 0x71, 0xdd, 0x58, 0x61, 0x50, 0xd4, 0xde, 0xa0, 0x7c, 0x98, 0xd2, 0x3e, + 0x01, 0xe2, 0xd6, 0xc6, 0x2d, 0xa8, 0x82, 0xf9, 0xbd, 0x77, 0x0c, 0x84, 0x11, 0x25, 0xd8, 0xb6, + 0x68, 0x11, 0xae, 0x83, 0x62, 0x76, 0xa4, 0x67, 0xde, 0x27, 0xbf, 0x2b, 0x82, 0x45, 0x30, 0x53, + 0xc6, 0xae, 0x5e, 0xe5, 0x7d, 0x5e, 0x6a, 0x5a, 0x00, 0x7f, 0x2a, 0xc4, 0x5a, 0xbf, 0x9f, 0x09, + 0xd3, 0xa9, 0xec, 0xcc, 0x97, 0x05, 0xf5, 0x60, 0xaf, 0x70, 0x9f, 0xb4, 0x50, 0xea, 0x9e, 0x04, + 0x56, 0x4f, 0x0b, 0xd8, 0xc0, 0x2f, 0x2c, 0xb3, 0x80, 0x6d, 0x3d, 0x50, 0x55, 0xc0, 0x1e, 0x6d, + 0xd0, 0x96, 0x4d, 0xe0, 0x74, 0x76, 0xd2, 0x62, 0x03, 0xe5, 0xde, 0x2f, 0x82, 0xb7, 0x86, 0x51, + 0x5a, 0x8e, 0xfe, 0x82, 0x38, 0xf0, 0xc3, 0xfc, 0xff, 0x03, 0x8b, 0x60, 0x9c, 0xf3, 0x4d, 0x65, + 0x27, 0xa8, 0x75, 0x4c, 0x4c, 0x70, 0x03, 0xac, 0xf6, 0x48, 0x34, 0xe2, 0x7a, 0x4d, 0xfa, 0x88, + 0x36, 0xf7, 0xcc, 0x87, 0xa4, 0x6a, 0x99, 0x35, 0xb7, 0x5b, 0x86, 0xed, 0x7f, 0x0c, 0xfe, 0x59, + 0xe8, 0xf6, 0xa5, 0x7f, 0x2f, 0x4c, 0x8b, 0xd2, 0xb8, 0x72, 0x2d, 0xf4, 0xb9, 0x88, 0x83, 0xca, + 0x1c, 0x8f, 0xdc, 0x15, 0x5a, 0x5a, 0x1b, 0x4e, 0xc4, 0x21, 0x94, 0x7f, 0x05, 0x64, 0xfd, 0x36, + 0x17, 0xc2, 0xbb, 0x0e, 0x36, 0xa9, 0x8b, 0xd8, 0x20, 0x38, 0x4b, 0xb0, 0x1a, 0x34, 0xbf, 0x70, + 0x39, 0x58, 0xe4, 0xa3, 0x70, 0x75, 0x1b, 0x4c, 0xe0, 0x9a, 0xa1, 0x9b, 0xb0, 0x14, 0x63, 0x35, + 0x6b, 0x31, 0x32, 0xee, 0x1a, 0x8c, 0x4c, 0x77, 0x29, 0x2b, 0x69, 0x4e, 0x08, 0xd2, 0xcd, 0xba, + 0xe5, 0x18, 0xdc, 0xfb, 0x2a, 0x6b, 0x60, 0x3e, 0x7a, 0x30, 0x63, 0xc9, 0x86, 0xbc, 0x72, 0x63, + 0x68, 0x4b, 0x9e, 0x24, 0x75, 0xf6, 0xc0, 0xa5, 0xcf, 0x7a, 0xd1, 0x32, 0x1a, 0x03, 0x46, 0xbd, + 0xfb, 0x2f, 0xae, 0x00, 0x78, 0x5a, 0x88, 0xce, 0xb0, 0x4b, 0x02, 0x27, 0xb2, 0x62, 0x05, 0x3b, + 0x2f, 0x24, 0x70, 0x29, 0xb1, 0x58, 0xc1, 0x2f, 0x0a, 0x4d, 0xdd, 0xa5, 0x70, 0x5e, 0x99, 0x05, + 0x13, 0x59, 0xd1, 0x32, 0x09, 0x48, 0x21, 0xe1, 0xc9, 0x4c, 0xd7, 0x1d, 0x2b, 0x93, 0x3c, 0x8c, + 0x6d, 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x94, 0x65, 0x6b, 0xb3, 0xd8, 0x2a, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index ce0b654823d..767e492e261 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -25,6 +25,12 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { name: "BSD 3-Clause License"; url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; }; + extensions: { + key: "x-something-something"; + value { + string_value: "yadda"; + } + } }; // Overwriting host entry breaks tests, so this is not done here. external_docs: { @@ -51,6 +57,31 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { type: TYPE_API_KEY; in: IN_HEADER; name: "X-API-Key"; + extensions: { + key: "x-amazon-apigateway-authtype"; + value { + string_value: "oauth2"; + } + } + extensions: { + key: "x-amazon-apigateway-authorizer"; + value { + struct_value { + fields { + key: "type"; + value { + string_value: "token"; + } + } + fields { + key: "authorizerResultTtlInSeconds"; + value { + number_value: 60; + } + } + } + } + } } } security: { @@ -128,6 +159,25 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { } } } + extensions: { + key: "x-grpc-gateway-foo"; + value { + string_value: "bar"; + } + } + extensions: { + key: "x-grpc-gateway-baz-list"; + value { + list_value: { + values: { + string_value: "one"; + } + values: { + bool_value: true; + } + } + } + } }; @@ -342,6 +392,12 @@ service ABitOfEverythingService { } } } + extensions: { + key: "x-irreversible"; + value { + bool_value: true; + } + } }; } rpc GetQuery(ABitOfEverything) returns (google.protobuf.Empty) { @@ -394,6 +450,12 @@ service ABitOfEverythingService { key: "503"; value: { description: "Returned when the resource is temporarily unavailable."; + extensions: { + key: "x-number"; + value { + number_value: 100; + } + } } } responses: { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 278c4aaaa2f..58c1b34c74e 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -11,7 +11,8 @@ "license": { "name": "BSD 3-Clause License", "url": "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt" - } + }, + "x-something-something": "yadda" }, "schemes": [ "http", @@ -101,7 +102,8 @@ }, "503": { "description": "Returned when the resource is temporarily unavailable.", - "schema": {} + "schema": {}, + "x-number": 100 } }, "parameters": [ @@ -1133,7 +1135,8 @@ "write" ] } - ] + ], + "x-irreversible": true }, "put": { "operationId": "Update", @@ -1540,7 +1543,8 @@ }, "503": { "description": "Returned when the resource is temporarily unavailable.", - "schema": {} + "schema": {}, + "x-number": 100 } }, "parameters": [ @@ -1590,7 +1594,8 @@ }, "503": { "description": "Returned when the resource is temporarily unavailable.", - "schema": {} + "schema": {}, + "x-number": 100 } }, "parameters": [ @@ -2283,7 +2288,12 @@ "ApiKeyAuth": { "type": "apiKey", "name": "X-API-Key", - "in": "header" + "in": "header", + "x-amazon-apigateway-authorizer": { + "authorizerResultTtlInSeconds": 60, + "type": "token" + }, + "x-amazon-apigateway-authtype": "oauth2" }, "BasicAuth": { "type": "basic" @@ -2316,5 +2326,10 @@ "externalDocs": { "description": "More about gRPC-Gateway", "url": "https://github.com/grpc-ecosystem/grpc-gateway" - } + }, + "x-grpc-gateway-baz-list": [ + "one", + true + ], + "x-grpc-gateway-foo": "bar" } diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 7798e9b99c5..929d0cf11d5 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -18,11 +18,13 @@ go_library( "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", + "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@io_bazel_rules_go//proto/wkt:struct_go_proto", ], ) @@ -39,5 +41,6 @@ go_test( "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@io_bazel_rules_go//proto/wkt:struct_go_proto", ], ) diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 749ff4b0d28..31409ac4c19 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "path/filepath" + "reflect" "strings" "github.com/golang/glog" @@ -66,7 +67,82 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { return mergedTarget } -// convert swagger file obj to plugin.CodeGeneratorResponse_File +func fieldName(k string) string { + return strings.ReplaceAll(strings.Title(k), "-", "_") +} + +// Q: What's up with the alias types here? +// A: We don't want to completely override how these structs are marshaled into +// JSON, we only want to add fields (see below, extensionMarshalJSON). +// An infinite recursion would happen if we'd call json.Marshal on the struct +// that has swaggerObject as an embedded field. To avoid that, we'll create +// type aliases, and those don't have the custom MarshalJSON methods defined +// on them. See http://choly.ca/post/go-json-marshalling/ (or, if it ever +// goes away, use +// https://web.archive.org/web/20190806073003/http://choly.ca/post/go-json-marshalling/. +func (so swaggerObject) MarshalJSON() ([]byte, error) { + type alias swaggerObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so swaggerInfoObject) MarshalJSON() ([]byte, error) { + type alias swaggerInfoObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so swaggerSecuritySchemeObject) MarshalJSON() ([]byte, error) { + type alias swaggerSecuritySchemeObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so swaggerOperationObject) MarshalJSON() ([]byte, error) { + type alias swaggerOperationObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so swaggerResponseObject) MarshalJSON() ([]byte, error) { + type alias swaggerResponseObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error) { + // To append arbitrary keys to the struct we'll render into json, + // we're creating another struct that embeds the original one, and + // its extra fields: + // + // The struct will look like + // struct { + // *swaggerCore + // XGrpcGatewayFoo json.RawMessage `json:"x-grpc-gateway-foo"` + // XGrpcGatewayBar json.RawMessage `json:"x-grpc-gateway-bar"` + // } + // and thus render into what we want -- the JSON of swaggerCore with the + // extensions appended. + fields := []reflect.StructField{ + reflect.StructField{ // embedded + Name: "Embedded", + Type: reflect.TypeOf(so), + Anonymous: true, + }, + } + for _, ext := range extensions { + fields = append(fields, reflect.StructField{ + Name: fieldName(ext.key), + Type: reflect.TypeOf(ext.value), + Tag: reflect.StructTag(fmt.Sprintf("json:\"%s\"", ext.key)), + }) + } + + t := reflect.StructOf(fields) + s := reflect.New(t).Elem() + s.Field(0).Set(reflect.ValueOf(so)) + for _, ext := range extensions { + s.FieldByName(fieldName(ext.key)).Set(reflect.ValueOf(ext.value)) + } + return json.Marshal(s.Interface()) +} + +// encodeSwagger converts swagger file obj to plugin.CodeGeneratorResponse_File func encodeSwagger(file *wrapper) (*plugin.CodeGeneratorResponse_File, error) { var formatted bytes.Buffer enc := json.NewEncoder(&formatted) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 337fb1a7370..3d97207c7eb 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -6,12 +6,15 @@ import ( "os" "reflect" "regexp" + "sort" "strconv" "strings" "sync" "github.com/golang/glog" + "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" + structpb "github.com/golang/protobuf/ptypes/struct" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" @@ -953,11 +956,27 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } if opts.Responses != nil { for name, resp := range opts.Responses { - operationObject.Responses[name] = swaggerResponseObject{ + respObj := swaggerResponseObject{ Description: resp.Description, Schema: swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs), } + if resp.Extensions != nil { + exts, err := processExtensions(resp.Extensions) + if err != nil { + return err + } + respObj.extensions = exts + } + operationObject.Responses[name] = respObj + } + } + + if opts.Extensions != nil { + exts, err := processExtensions(opts.Extensions) + if err != nil { + return err } + operationObject.extensions = exts } // TODO(ivucica): add remaining fields of operation object @@ -1080,6 +1099,13 @@ func applyTemplate(p param) (*swaggerObject, error) { s.Info.License.URL = spb.Info.License.Url } } + if spb.Info.Extensions != nil { + exts, err := processExtensions(spb.Info.Extensions) + if err != nil { + return nil, err + } + s.Info.extensions = exts + } } if spb.Host != "" { s.Host = spb.Host @@ -1162,6 +1188,13 @@ func applyTemplate(p param) (*swaggerObject, error) { newSecDefValue.Scopes[scopeKey] = scopeDesc } } + if secDefValue.Extensions != nil { + exts, err := processExtensions(secDefValue.Extensions) + if err != nil { + return nil, err + } + newSecDefValue.extensions = exts + } s.SecurityDefinitions[secDefKey] = newSecDefValue } } @@ -1220,6 +1253,14 @@ func applyTemplate(p param) (*swaggerObject, error) { } } + if spb.Extensions != nil { + exts, err := processExtensions(spb.Extensions) + if err != nil { + return nil, err + } + s.extensions = exts + } + // Additional fields on the OpenAPI v2 spec's "Swagger" object // should be added here, once supported in the proto. } @@ -1231,6 +1272,22 @@ func applyTemplate(p param) (*swaggerObject, error) { return &s, nil } +func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error) { + exts := []extension{} + for k, v := range inputExts { + if !strings.HasPrefix(k, "x-") { + return nil, fmt.Errorf("Extension keys need to start with \"x-\": %q", k) + } + ext, err := (&jsonpb.Marshaler{Indent: " "}).MarshalToString(v) + if err != nil { + return nil, err + } + exts = append(exts, extension{key: k, value: json.RawMessage(ext)}) + } + sort.Slice(exts, func(i, j int) bool { return exts[i].key < exts[j].key }) + return exts, nil +} + // updateSwaggerDataFromComments updates a Swagger object based on a comment // from the proto file. // diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 09902345e65..5f0adf4f26f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -11,6 +11,7 @@ import ( protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" + structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" @@ -371,6 +372,153 @@ func TestApplyTemplateSimple(t *testing.T) { } } +func TestApplyTemplateExtensions(t *testing.T) { + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + Options: &protodescriptor.MethodOptions{}, + } + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, + MessageType: []*protodescriptor.DescriptorProto{msgdesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + Options: &protodescriptor.FileOptions{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", // TODO(achew22): Figure out what this should really be + }, + }, + }, + }, + }, + }, + }, + } + swagger := swagger_options.Swagger{ + Info: &swagger_options.Info{ + Title: "test", + Extensions: map[string]*structpb.Value{ + "x-info-extension": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "bar"}}, + }, + }, + Extensions: map[string]*structpb.Value{ + "x-foo": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "bar"}}, + "x-bar": &structpb.Value{Kind: &structpb.Value_ListValue{ListValue: &structpb.ListValue{ + Values: []*structpb.Value{{Kind: &structpb.Value_StringValue{StringValue: "baz"}}}, + }}}, + }, + SecurityDefinitions: &swagger_options.SecurityDefinitions{ + Security: map[string]*swagger_options.SecurityScheme{ + "somescheme": &swagger_options.SecurityScheme{ + Extensions: map[string]*structpb.Value{ + "x-security-baz": &structpb.Value{Kind: &structpb.Value_BoolValue{BoolValue: true}}, + }, + }, + }, + }, + } + if err := proto.SetExtension(proto.Message(file.FileDescriptorProto.Options), swagger_options.E_Openapiv2Swagger, &swagger); err != nil { + t.Fatalf("proto.SetExtension(FileDescriptorProto.Options) failed: %v", err) + } + + swaggerOperation := swagger_options.Operation{ + Responses: map[string]*swagger_options.Response{ + "200": &swagger_options.Response{ + Extensions: map[string]*structpb.Value{ + "x-resp-id": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "resp1000"}}, + }, + }, + }, + Extensions: map[string]*structpb.Value{ + "x-op-foo": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "baz"}}, + }, + } + if err := proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation); err != nil { + t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: descriptor.NewRegistry()}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if want, is, name := "2.0", result.Swagger, "Swagger"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + if want, is, name := []extension{ + {key: "x-bar", value: json.RawMessage("[\n \"baz\"\n ]")}, + {key: "x-foo", value: json.RawMessage("\"bar\"")}, + }, result.extensions, "Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + var scheme swaggerSecuritySchemeObject + for _, v := range result.SecurityDefinitions { + scheme = v + } + if want, is, name := []extension{ + {key: "x-security-baz", value: json.RawMessage("true")}, + }, scheme.extensions, "SecurityScheme.Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + if want, is, name := []extension{ + {key: "x-info-extension", value: json.RawMessage("\"bar\"")}, + }, result.Info.extensions, "Info.Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + var operation *swaggerOperationObject + var response swaggerResponseObject + for _, v := range result.Paths { + operation = v.Get + response = v.Get.Responses["200"] + } + if want, is, name := []extension{ + {key: "x-op-foo", value: json.RawMessage("\"baz\"")}, + }, operation.extensions, "operation.Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + if want, is, name := []extension{ + {key: "x-resp-id", value: json.RawMessage("\"resp1000\"")}, + }, response.extensions, "response.Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } +} + func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 66aaf177d23..77db96d877b 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -25,6 +25,8 @@ type swaggerInfoObject struct { Contact *swaggerContactObject `json:"contact,omitempty"` License *swaggerLicenseObject `json:"license,omitempty"` + + extensions []extension } // http://swagger.io/specification/#contactObject @@ -46,6 +48,11 @@ type swaggerExternalDocumentationObject struct { URL string `json:"url,omitempty"` } +type extension struct { + key string + value json.RawMessage +} + // http://swagger.io/specification/#swaggerObject type swaggerObject struct { Swagger string `json:"swagger"` @@ -61,6 +68,8 @@ type swaggerObject struct { SecurityDefinitions swaggerSecurityDefinitionsObject `json:"securityDefinitions,omitempty"` Security []swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` + + extensions []extension } // http://swagger.io/specification/#securityDefinitionsObject @@ -76,6 +85,8 @@ type swaggerSecuritySchemeObject struct { AuthorizationURL string `json:"authorizationUrl,omitempty"` TokenURL string `json:"tokenUrl,omitempty"` Scopes swaggerScopesObject `json:"scopes,omitempty"` + + extensions []extension } // http://swagger.io/specification/#scopesObject @@ -108,6 +119,8 @@ type swaggerOperationObject struct { Security *[]swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` + + extensions []extension } type swaggerParametersObject []swaggerParameterObject @@ -157,6 +170,8 @@ type swaggerResponsesObject map[string]swaggerResponseObject type swaggerResponseObject struct { Description string `json:"description"` Schema swaggerSchemaObject `json:"schema"` + + extensions []extension } type keyVal struct { diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 7a51fd7c7f4..8dea43d297d 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -26,6 +26,7 @@ proto_library( deps = [ "@com_google_protobuf//:any_proto", "@com_google_protobuf//:descriptor_proto", + "@com_google_protobuf//:struct_proto", ], ) diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index f52414a5ef9..6720071bde0 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -7,6 +7,7 @@ import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import any "github.com/golang/protobuf/ptypes/any" +import _struct "github.com/golang/protobuf/ptypes/struct" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -48,7 +49,7 @@ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{0, 0} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -89,7 +90,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{8, 0} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -120,7 +121,7 @@ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 0} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -147,7 +148,7 @@ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 1} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -181,7 +182,7 @@ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{11, 2} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -199,24 +200,25 @@ type Swagger struct { // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{0} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{0} } func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) @@ -313,33 +315,41 @@ func (m *Swagger) GetExternalDocs() *ExternalDocumentation { return nil } +func (m *Swagger) GetExtensions() map[string]*_struct.Value { + if m != nil { + return m.Extensions + } + return nil +} + // `Operation` is a representation of OpenAPI v2 specification's Operation object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject // // TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{1} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{1} } func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) @@ -436,6 +446,13 @@ func (m *Operation) GetSecurity() []*SecurityRequirement { return nil } +func (m *Operation) GetExtensions() map[string]*_struct.Value { + if m != nil { + return m.Extensions + } + return nil +} + // `Response` is a representation of OpenAPI v2 specification's Response object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject @@ -446,17 +463,18 @@ type Response struct { Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. - Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{2} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{2} } func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) @@ -490,28 +508,36 @@ func (m *Response) GetSchema() *Schema { return nil } +func (m *Response) GetExtensions() map[string]*_struct.Value { + if m != nil { + return m.Extensions + } + return nil +} + // `Info` is a representation of OpenAPI v2 specification's Info object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // // TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{3} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{3} } func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) @@ -573,6 +599,13 @@ func (m *Info) GetVersion() string { return "" } +func (m *Info) GetExtensions() map[string]*_struct.Value { + if m != nil { + return m.Extensions + } + return nil +} + // `Contact` is a representation of OpenAPI v2 specification's Contact object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject @@ -591,7 +624,7 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{4} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{4} } func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) @@ -650,7 +683,7 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{5} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{5} } func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) @@ -702,7 +735,7 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{6} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{6} } func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) @@ -756,7 +789,7 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{7} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{7} } func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) @@ -860,7 +893,7 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{8} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{8} } func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) @@ -1046,7 +1079,7 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{9} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{9} } func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) @@ -1100,7 +1133,7 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{10} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{10} } func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) @@ -1168,17 +1201,18 @@ type SecurityScheme struct { // Required. The available scopes for the OAuth2 security scheme. // // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{11} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{11} } func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) @@ -1254,6 +1288,13 @@ func (m *SecurityScheme) GetScopes() *Scopes { return nil } +func (m *SecurityScheme) GetExtensions() map[string]*_struct.Value { + if m != nil { + return m.Extensions + } + return nil +} + // `SecurityRequirement` is a representation of OpenAPI v2 specification's // Security Requirement object. // @@ -1280,7 +1321,7 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{12} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{12} } func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) @@ -1325,7 +1366,7 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{12, 0} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{12, 0} } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) @@ -1370,7 +1411,7 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_78431ddfac00899a, []int{13} + return fileDescriptor_openapiv2_7182f700aabb5117, []int{13} } func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) @@ -1399,11 +1440,15 @@ func (m *Scopes) GetScope() map[string]string { func init() { proto.RegisterType((*Swagger)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger") + proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry") proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry") proto.RegisterType((*Operation)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation") + proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry") proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry") proto.RegisterType((*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Response") + proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry") proto.RegisterType((*Info)(nil), "grpc.gateway.protoc_gen_swagger.options.Info") + proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry") proto.RegisterType((*Contact)(nil), "grpc.gateway.protoc_gen_swagger.options.Contact") proto.RegisterType((*License)(nil), "grpc.gateway.protoc_gen_swagger.options.License") proto.RegisterType((*ExternalDocumentation)(nil), "grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation") @@ -1413,6 +1458,7 @@ func init() { proto.RegisterType((*SecurityDefinitions)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions") proto.RegisterMapType((map[string]*SecurityScheme)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.SecurityEntry") proto.RegisterType((*SecurityScheme)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityScheme") + proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityScheme.ExtensionsEntry") proto.RegisterType((*SecurityRequirement)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement") proto.RegisterMapType((map[string]*SecurityRequirement_SecurityRequirementValue)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementEntry") proto.RegisterType((*SecurityRequirement_SecurityRequirementValue)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementValue") @@ -1426,121 +1472,127 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_78431ddfac00899a) -} - -var fileDescriptor_openapiv2_78431ddfac00899a = []byte{ - // 1777 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x73, 0xdb, 0xc6, - 0x11, 0x0f, 0x48, 0x90, 0x04, 0x97, 0x22, 0x73, 0x3e, 0xcb, 0x2d, 0xa2, 0xc4, 0xae, 0xc2, 0xa6, - 0x53, 0x8d, 0x3d, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0xa7, 0x1d, 0x4a, 0x62, 0x6c, 0xc0, 0x32, - 0xc9, 0x82, 0x54, 0x14, 0x77, 0x26, 0x83, 0x81, 0xc1, 0x23, 0x85, 0x18, 0x38, 0x20, 0xf8, 0x90, - 0xc4, 0xbe, 0xf5, 0xa9, 0x7d, 0xee, 0xf4, 0xa9, 0x33, 0xf9, 0x33, 0xfa, 0xd6, 0xbf, 0xaa, 0xfd, - 0x03, 0xda, 0xb9, 0x0f, 0x90, 0xa0, 0xc4, 0x64, 0x28, 0x7f, 0xf4, 0x89, 0xb7, 0x5f, 0xbf, 0xdb, - 0xdd, 0xdb, 0xbd, 0x5b, 0x10, 0x1e, 0x46, 0x71, 0x98, 0x86, 0xee, 0xe3, 0x19, 0xa1, 0x8f, 0x93, - 0x4b, 0x67, 0x36, 0x23, 0xf1, 0x7e, 0x18, 0xa5, 0x5e, 0x48, 0x93, 0xfd, 0x30, 0x22, 0xd4, 0x89, - 0xbc, 0x8b, 0x83, 0x0e, 0x57, 0xc2, 0xbf, 0x9e, 0xc5, 0x91, 0xdb, 0x99, 0x39, 0x29, 0xb9, 0x74, - 0xe6, 0x82, 0xe7, 0xda, 0x33, 0x42, 0x6d, 0x69, 0xd8, 0x91, 0x86, 0x3b, 0x1f, 0xcc, 0xc2, 0x70, - 0xe6, 0x93, 0x7d, 0xae, 0xf2, 0x32, 0x9b, 0xee, 0x3b, 0x54, 0xea, 0xb7, 0xff, 0x5b, 0x85, 0xda, - 0x48, 0xa8, 0x63, 0x1d, 0x6a, 0xd2, 0x52, 0x57, 0x76, 0x95, 0xbd, 0xba, 0x95, 0x93, 0xb8, 0x0b, - 0xaa, 0x47, 0xa7, 0xa1, 0x5e, 0xda, 0x55, 0xf6, 0x1a, 0x07, 0x8f, 0x3b, 0x1b, 0x6e, 0xdc, 0x31, - 0xe8, 0x34, 0xb4, 0xb8, 0x29, 0xc6, 0xa0, 0x9e, 0x87, 0x49, 0xaa, 0x97, 0x39, 0x32, 0x5f, 0xe3, - 0x0f, 0xa1, 0xfe, 0xd2, 0x49, 0x88, 0x1d, 0x39, 0xe9, 0xb9, 0xae, 0x72, 0x81, 0xc6, 0x18, 0x43, - 0x27, 0x3d, 0xc7, 0xdf, 0x40, 0x2d, 0x71, 0xcf, 0x49, 0x40, 0x12, 0xbd, 0xb2, 0x5b, 0xde, 0x6b, - 0x1d, 0xfc, 0x6e, 0xe3, 0x6d, 0x65, 0x40, 0xf9, 0xef, 0x88, 0xc3, 0x58, 0x39, 0x1c, 0xde, 0x01, - 0xcd, 0x0d, 0x69, 0x92, 0x31, 0xe8, 0xea, 0x6e, 0x99, 0xed, 0x9a, 0xd3, 0x4c, 0x16, 0xc5, 0xe1, - 0x24, 0x73, 0x49, 0xa2, 0xd7, 0x84, 0x2c, 0xa7, 0xf1, 0xb7, 0x50, 0x8f, 0x49, 0x12, 0x85, 0x34, - 0x21, 0x89, 0x0e, 0xbb, 0xe5, 0xbd, 0xc6, 0xc1, 0xef, 0x6f, 0xed, 0x93, 0x95, 0x23, 0xf4, 0x68, - 0x1a, 0xcf, 0xad, 0x25, 0x22, 0x0e, 0x61, 0x3b, 0x21, 0x6e, 0x16, 0x7b, 0xe9, 0xdc, 0x9e, 0x90, - 0xa9, 0x47, 0x3d, 0x6e, 0xa9, 0x37, 0x78, 0xd2, 0x7f, 0xbb, 0xf9, 0x4e, 0x12, 0xe4, 0x78, 0x89, - 0x61, 0xdd, 0x4d, 0x6e, 0x32, 0xf1, 0x37, 0xa0, 0xe5, 0x6c, 0x7d, 0x8b, 0x87, 0x73, 0xfb, 0x4d, - 0x2c, 0xf2, 0x7d, 0xe6, 0xc5, 0x24, 0x20, 0x34, 0xb5, 0x16, 0x68, 0xd8, 0x85, 0x26, 0xb9, 0x4a, - 0x49, 0x4c, 0x1d, 0xdf, 0x9e, 0x84, 0x6e, 0xa2, 0xb7, 0x78, 0x0c, 0x9b, 0x9f, 0x60, 0x4f, 0x5a, - 0x1f, 0x87, 0x6e, 0xc6, 0xb0, 0x1d, 0xc6, 0xb6, 0xb6, 0xc8, 0x92, 0x9d, 0xec, 0x84, 0xd0, 0x5a, - 0x4d, 0x26, 0x46, 0x50, 0x7e, 0x45, 0xe6, 0xb2, 0x78, 0xd9, 0x12, 0x3f, 0x81, 0xca, 0x85, 0xe3, - 0x67, 0x44, 0x56, 0xee, 0x67, 0x1b, 0x3b, 0x90, 0x23, 0x5b, 0xc2, 0xfe, 0xcb, 0xd2, 0x17, 0x4a, - 0xfb, 0x10, 0x9a, 0x2b, 0x15, 0x85, 0x1b, 0x50, 0x3b, 0xed, 0x3f, 0xeb, 0x0f, 0xce, 0xfa, 0xe8, - 0x3d, 0xac, 0x81, 0xfa, 0x74, 0x3c, 0x1e, 0x22, 0x05, 0xd7, 0xa1, 0xc2, 0x56, 0x23, 0x54, 0xc2, - 0x55, 0x28, 0x9d, 0x8d, 0x50, 0x19, 0xd7, 0xa0, 0x7c, 0x36, 0x1a, 0x21, 0xd5, 0x54, 0x35, 0x0d, - 0xd5, 0x4d, 0x55, 0xab, 0x23, 0x30, 0x55, 0xad, 0x89, 0x5a, 0xed, 0xbf, 0x54, 0xa0, 0x3e, 0x88, - 0x48, 0xcc, 0x43, 0x64, 0x6d, 0x92, 0x3a, 0xb3, 0x44, 0x57, 0x78, 0xed, 0xf1, 0x35, 0xef, 0xcb, - 0x2c, 0x08, 0x9c, 0x78, 0xce, 0xc3, 0x60, 0x7d, 0x29, 0x48, 0xbc, 0x0b, 0x8d, 0x09, 0x49, 0xdc, - 0xd8, 0xe3, 0x5e, 0xcb, 0xde, 0x2a, 0xb2, 0x6e, 0x9e, 0x84, 0xfa, 0xf6, 0x4f, 0x02, 0x7f, 0x0c, - 0x5b, 0x61, 0x1e, 0x81, 0xed, 0x4d, 0xf4, 0x8a, 0xf0, 0x63, 0xc1, 0x33, 0x26, 0xaf, 0xdd, 0x73, - 0x76, 0xb1, 0xe7, 0xea, 0xbc, 0x48, 0xbb, 0x1b, 0xfb, 0xbe, 0x48, 0xeb, 0x4f, 0x74, 0x9d, 0xbe, - 0xbc, 0x66, 0x80, 0xef, 0xbd, 0xb8, 0x26, 0x1e, 0x00, 0x4c, 0x48, 0x14, 0x13, 0xd7, 0x49, 0xc9, - 0x84, 0x77, 0xa1, 0x66, 0x15, 0x38, 0xef, 0xae, 0x7d, 0xfe, 0xef, 0x95, 0x2d, 0xaa, 0xb2, 0xfd, - 0x67, 0x05, 0xb4, 0x5c, 0x7a, 0xbd, 0xb4, 0x94, 0x9b, 0xa5, 0xf5, 0x04, 0xaa, 0x3c, 0x55, 0x8e, - 0x74, 0x61, 0x7f, 0xf3, 0xe8, 0xb9, 0x99, 0x25, 0xcd, 0x4d, 0x55, 0x2b, 0xf3, 0xce, 0x50, 0x51, - 0xa5, 0xfd, 0x8f, 0x12, 0xa8, 0xec, 0xd5, 0xc0, 0xdb, 0x50, 0x49, 0xbd, 0xd4, 0x27, 0x72, 0x67, - 0x41, 0x5c, 0xf7, 0xaa, 0x74, 0xd3, 0xab, 0x3d, 0x40, 0x29, 0x89, 0x83, 0xc4, 0x0e, 0xa7, 0x76, - 0x42, 0xe2, 0x0b, 0xcf, 0x25, 0xb2, 0x2f, 0x5a, 0x9c, 0x3f, 0x98, 0x8e, 0x04, 0x17, 0x9b, 0x50, - 0x73, 0x43, 0x9a, 0x3a, 0x6e, 0x2a, 0x9b, 0xe2, 0xd3, 0x8d, 0x03, 0x38, 0x12, 0x76, 0x56, 0x0e, - 0xc0, 0xb0, 0x7c, 0xcf, 0x25, 0x34, 0x21, 0xbc, 0xf8, 0x6f, 0x83, 0x75, 0x22, 0xec, 0xac, 0x1c, - 0x80, 0x55, 0xe4, 0x05, 0x89, 0x13, 0x16, 0x5f, 0x55, 0xb4, 0xbb, 0x24, 0xdb, 0x3d, 0xa8, 0xc9, - 0x9d, 0xd9, 0x3d, 0x41, 0x9d, 0x20, 0xcf, 0x0e, 0x5f, 0xb3, 0x22, 0xc9, 0x62, 0x5f, 0x26, 0x85, - 0x2d, 0x59, 0x12, 0x49, 0xe0, 0x78, 0xbe, 0xcc, 0x80, 0x20, 0xda, 0xfb, 0x50, 0x93, 0x9b, 0x6e, - 0x06, 0xd3, 0x7e, 0x06, 0xf7, 0xd6, 0x5e, 0x03, 0x1b, 0x14, 0xc9, 0x4d, 0xb0, 0x7f, 0x95, 0xa0, - 0x2a, 0x0a, 0x00, 0x8f, 0xa1, 0xf1, 0x5d, 0x12, 0x52, 0x5b, 0x96, 0x91, 0xc2, 0x33, 0xf7, 0xf9, - 0xc6, 0x99, 0x33, 0x47, 0x83, 0xbe, 0x2c, 0x25, 0x60, 0x38, 0x12, 0xf5, 0x13, 0x68, 0x4e, 0x3c, - 0xe6, 0x41, 0xe0, 0x51, 0x27, 0x0d, 0x63, 0xb9, 0xf9, 0x2a, 0x93, 0xcd, 0x1e, 0x31, 0x71, 0x26, - 0x76, 0x48, 0xfd, 0x39, 0x4f, 0x8f, 0x66, 0x69, 0x8c, 0x31, 0xa0, 0xfe, 0x9a, 0xf7, 0xab, 0xf2, - 0x0e, 0x6e, 0xcd, 0x0e, 0xd4, 0xc8, 0x95, 0x13, 0x44, 0x3e, 0xe1, 0xe7, 0xdc, 0x38, 0xd8, 0xee, - 0x88, 0x39, 0xad, 0x93, 0xcf, 0x69, 0x9d, 0x2e, 0x9d, 0x5b, 0xb9, 0x92, 0x6c, 0x90, 0x1f, 0x6a, - 0x00, 0xcb, 0xc0, 0x59, 0x7e, 0x63, 0x32, 0x95, 0xe7, 0xcb, 0x96, 0xcb, 0xc6, 0xa9, 0xfc, 0x44, - 0xe3, 0x54, 0x6f, 0x9e, 0x94, 0x0e, 0xb5, 0x09, 0x99, 0x3a, 0x99, 0x9f, 0xea, 0x35, 0x51, 0x76, - 0x92, 0x5c, 0x4d, 0x95, 0x76, 0x2d, 0x55, 0xbf, 0x80, 0x46, 0x90, 0xf9, 0xa9, 0x17, 0xf9, 0xc4, - 0x0e, 0xa7, 0x3a, 0xec, 0x2a, 0x7b, 0x8a, 0x05, 0x39, 0x6b, 0x30, 0x65, 0xb8, 0x81, 0x73, 0xe5, - 0x05, 0x59, 0xc0, 0xef, 0x50, 0xc5, 0xca, 0x49, 0xfc, 0x08, 0xee, 0x90, 0x2b, 0xd7, 0xcf, 0x12, - 0xef, 0x82, 0xd8, 0xb9, 0xce, 0x16, 0xc7, 0x47, 0x0b, 0xc1, 0x73, 0xa9, 0xcc, 0x60, 0x3c, 0xca, - 0x55, 0x9a, 0x12, 0x46, 0x90, 0xd7, 0x60, 0xa4, 0x4e, 0xeb, 0x3a, 0x8c, 0x54, 0xbe, 0x0f, 0x10, - 0x38, 0x57, 0xb6, 0x4f, 0xe8, 0x2c, 0x3d, 0xd7, 0xdf, 0xdf, 0x55, 0xf6, 0x54, 0xab, 0x1e, 0x38, - 0x57, 0x27, 0x9c, 0xc1, 0xc5, 0x1e, 0xcd, 0xc5, 0x48, 0x8a, 0x3d, 0x2a, 0xc5, 0x3a, 0xd4, 0x22, - 0x27, 0x65, 0x67, 0xa8, 0xdf, 0x11, 0x39, 0x92, 0x24, 0xcb, 0x11, 0xc3, 0xf5, 0x52, 0x12, 0x24, - 0xfa, 0x36, 0xb7, 0xd3, 0x02, 0xe7, 0xca, 0x60, 0x34, 0x17, 0x7a, 0x54, 0x0a, 0xef, 0x49, 0xa1, - 0x47, 0x85, 0xf0, 0x63, 0xd8, 0xca, 0xa8, 0xf7, 0x7d, 0x46, 0xa4, 0xfc, 0x67, 0xdc, 0xf3, 0x86, - 0xe0, 0x09, 0x95, 0x5f, 0x41, 0x8b, 0x81, 0x47, 0x31, 0x7b, 0x51, 0x53, 0x8f, 0x24, 0xba, 0xce, - 0x41, 0x9a, 0x81, 0x73, 0x35, 0x5c, 0x30, 0xb9, 0x9a, 0x47, 0x8b, 0x6a, 0x1f, 0x48, 0x35, 0x8f, - 0x16, 0xd4, 0x76, 0x40, 0x8b, 0xc5, 0xb3, 0x33, 0xd1, 0x77, 0xc4, 0x73, 0x9b, 0xd3, 0xac, 0x78, - 0x9c, 0x38, 0x76, 0xe6, 0x7a, 0x9b, 0x0b, 0x04, 0x81, 0xbf, 0x05, 0x35, 0x9d, 0x47, 0x44, 0xff, - 0x25, 0x9f, 0xc3, 0x8d, 0xd7, 0x68, 0xd0, 0xc2, 0x72, 0xe4, 0xb1, 0x6a, 0x1e, 0xcf, 0x23, 0x92, - 0x58, 0x1c, 0xb6, 0x7d, 0x09, 0xf7, 0xd6, 0x8a, 0x57, 0xe7, 0xab, 0x3a, 0x54, 0xba, 0x96, 0xd5, - 0x7d, 0x81, 0x14, 0xc6, 0x3f, 0x1c, 0x0c, 0x4e, 0x7a, 0xdd, 0x3e, 0x2a, 0x31, 0xc2, 0xe8, 0x8f, - 0x7b, 0x4f, 0x7a, 0x16, 0x2a, 0xb3, 0x21, 0xac, 0x7f, 0x7a, 0x72, 0x82, 0x54, 0x0c, 0x50, 0xed, - 0x9f, 0x3e, 0x3f, 0xec, 0x59, 0xa8, 0xc2, 0xd6, 0x83, 0x43, 0xb3, 0x77, 0x34, 0x46, 0x55, 0xb6, - 0x1e, 0x8d, 0x2d, 0xa3, 0xff, 0x04, 0xd5, 0x4c, 0x55, 0x53, 0x50, 0xc9, 0x54, 0xb5, 0x12, 0x2a, - 0x8b, 0xee, 0x5a, 0x0c, 0x66, 0x18, 0xdd, 0x35, 0x55, 0xed, 0x2e, 0xda, 0x36, 0x55, 0xed, 0xe7, - 0x48, 0x37, 0x55, 0xed, 0x43, 0xf4, 0x91, 0xa9, 0x6a, 0x1f, 0xa1, 0xfb, 0xa6, 0xaa, 0xdd, 0x47, - 0x0f, 0x4c, 0x55, 0x7b, 0x80, 0xda, 0xa6, 0xaa, 0x7d, 0x82, 0x1e, 0x9a, 0xaa, 0xf6, 0x10, 0x3d, - 0x32, 0x55, 0xed, 0x11, 0xea, 0xb4, 0xff, 0xa6, 0x40, 0x79, 0xec, 0xcc, 0x36, 0x78, 0xa9, 0x6e, - 0x5c, 0x32, 0xe5, 0xb7, 0x7f, 0xc9, 0x88, 0x10, 0xdb, 0xff, 0x51, 0xe0, 0xee, 0x9a, 0xcf, 0x02, - 0x3c, 0x2d, 0x8c, 0x30, 0x0a, 0x1f, 0x61, 0xcc, 0x37, 0xf9, 0xcc, 0x58, 0xf0, 0xc4, 0x94, 0xb5, - 0x1c, 0x68, 0x52, 0x68, 0xae, 0x88, 0xd6, 0xcc, 0x33, 0xcf, 0x57, 0xe7, 0x99, 0xdf, 0xdc, 0xda, - 0x0f, 0xf9, 0x95, 0x57, 0x98, 0xd7, 0xff, 0x59, 0x81, 0xd6, 0xaa, 0x14, 0x0f, 0x65, 0x25, 0xb3, - 0x8d, 0x5b, 0xaf, 0x31, 0xaf, 0x09, 0x98, 0x0e, 0x2b, 0x4f, 0x51, 0xbc, 0x1b, 0x9c, 0x73, 0xfe, - 0xc6, 0x96, 0x0b, 0x6f, 0xac, 0x09, 0x25, 0x8f, 0xf2, 0xb1, 0xa3, 0x75, 0xf0, 0xe5, 0xeb, 0x7a, - 0x61, 0x50, 0xab, 0xe4, 0x51, 0x16, 0xd3, 0xd4, 0x0f, 0x2f, 0xf9, 0x7d, 0xff, 0x06, 0x31, 0x7d, - 0xe5, 0x87, 0x97, 0x16, 0x47, 0x62, 0x37, 0xaa, 0x93, 0xa5, 0xe7, 0x61, 0xec, 0xfd, 0x49, 0xcc, - 0xf4, 0xec, 0x09, 0x17, 0x4f, 0x06, 0x5a, 0x11, 0x9c, 0xc6, 0x3e, 0xbb, 0xdc, 0xd2, 0xf0, 0x15, - 0x11, 0x4a, 0xe2, 0xe5, 0xd0, 0x38, 0x83, 0x09, 0xf9, 0x8c, 0x18, 0x46, 0x24, 0xe1, 0xef, 0xc6, - 0xed, 0x66, 0x44, 0x66, 0x66, 0x49, 0xf3, 0xf6, 0x33, 0x50, 0x59, 0xd2, 0x31, 0x82, 0xad, 0xf1, - 0x8b, 0x61, 0xcf, 0x36, 0xfa, 0x5f, 0x77, 0x4f, 0x8c, 0x63, 0xf4, 0x1e, 0x6e, 0x01, 0x70, 0xce, - 0x61, 0x77, 0x64, 0x1c, 0x21, 0x65, 0xa1, 0xd1, 0x1d, 0x1a, 0xf6, 0xb3, 0xde, 0x0b, 0x54, 0xc2, - 0xef, 0x43, 0x83, 0x73, 0x06, 0xdd, 0xd3, 0xf1, 0xd3, 0x03, 0x54, 0x6e, 0x7f, 0x06, 0x25, 0x83, - 0x32, 0x43, 0xa3, 0x5f, 0x00, 0xda, 0x02, 0xcd, 0xe8, 0xdb, 0x7f, 0x38, 0xed, 0x59, 0xec, 0x8e, - 0x69, 0x42, 0xdd, 0xe8, 0xdb, 0x4f, 0x7b, 0xdd, 0xe3, 0x9e, 0x85, 0x4a, 0xed, 0xef, 0x40, 0x65, - 0x09, 0x62, 0xe8, 0x5f, 0x9d, 0x0c, 0xce, 0x0a, 0x66, 0x77, 0xa0, 0x29, 0x38, 0xcf, 0x87, 0x27, - 0xc6, 0x91, 0x31, 0x46, 0xca, 0x82, 0x35, 0xec, 0x8e, 0x46, 0x67, 0x03, 0xeb, 0x18, 0x95, 0xf0, - 0x36, 0x20, 0xce, 0xea, 0x0e, 0x99, 0x56, 0x77, 0x6c, 0x0c, 0xfa, 0xa8, 0xbc, 0xe4, 0x1e, 0x1d, - 0xf5, 0x46, 0x23, 0xfb, 0x68, 0x70, 0xdc, 0x43, 0x6a, 0xfb, 0xdf, 0xa5, 0x65, 0xb7, 0x16, 0x3e, - 0x10, 0xf0, 0x5f, 0x95, 0xc2, 0x3f, 0x04, 0xf1, 0x52, 0x20, 0x5b, 0xf7, 0xf4, 0x4d, 0xbe, 0x3e, - 0xd6, 0xf1, 0x44, 0x17, 0x2f, 0xfe, 0x3a, 0x28, 0x48, 0x76, 0x3e, 0x05, 0x7d, 0x8d, 0xc1, 0xd7, - 0xac, 0xf5, 0xd8, 0x1b, 0xc2, 0x0f, 0x4d, 0x7e, 0xc3, 0x0a, 0x62, 0xe7, 0x07, 0x65, 0xad, 0xc9, - 0x8f, 0x5d, 0x07, 0xaf, 0x56, 0xaf, 0x83, 0xb7, 0x1e, 0x1b, 0x77, 0xb5, 0x78, 0x59, 0xfc, 0x5d, - 0x61, 0x63, 0x29, 0xab, 0x35, 0x3c, 0x2c, 0x06, 0xd0, 0xb8, 0x4d, 0x7f, 0x72, 0x7b, 0xf1, 0x23, - 0x92, 0x27, 0x83, 0xff, 0x02, 0x60, 0xc9, 0x5c, 0x13, 0xed, 0x76, 0x31, 0xda, 0x7a, 0xc1, 0xad, - 0xc3, 0xa3, 0x3f, 0x76, 0x67, 0x5e, 0x7a, 0x9e, 0xbd, 0xec, 0xb8, 0x61, 0xb0, 0xcf, 0x1c, 0x79, - 0x4c, 0xdc, 0x30, 0x99, 0x27, 0x29, 0x91, 0xa4, 0xf4, 0x6b, 0xff, 0xc7, 0xff, 0x38, 0x7c, 0x59, - 0xe5, 0xb2, 0xcf, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb3, 0xec, 0xbb, 0xdf, 0x5d, 0x14, 0x00, - 0x00, + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_7182f700aabb5117) +} + +var fileDescriptor_openapiv2_7182f700aabb5117 = []byte{ + // 1884 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x5b, 0x73, 0xdb, 0xc6, + 0xf5, 0x0f, 0x48, 0x90, 0x04, 0x0f, 0x45, 0x7a, 0xbd, 0x96, 0xf3, 0x47, 0x18, 0xdb, 0x7f, 0x85, + 0x4d, 0xa7, 0x1a, 0xbb, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0x6f, 0x94, 0xc4, 0xc8, 0x80, 0x65, + 0x92, 0x05, 0xa9, 0x28, 0xee, 0x8c, 0x07, 0x85, 0xc0, 0x25, 0x85, 0x18, 0x17, 0x06, 0x17, 0x49, + 0xec, 0x27, 0xe8, 0x73, 0xa7, 0xaf, 0xf9, 0x1e, 0x9d, 0x69, 0x9f, 0xfa, 0x09, 0xfa, 0x59, 0xda, + 0xe9, 0x7b, 0x67, 0x2f, 0x20, 0x41, 0x91, 0xf1, 0x90, 0x72, 0x3c, 0x79, 0xe8, 0x13, 0xf7, 0xdc, + 0x7e, 0xbb, 0x7b, 0xce, 0x9e, 0x0b, 0x08, 0x8f, 0x27, 0x61, 0x10, 0x07, 0xf6, 0xd3, 0x31, 0xf1, + 0x9f, 0x46, 0x57, 0xd6, 0x78, 0x4c, 0xc2, 0xbd, 0x60, 0x12, 0x3b, 0x81, 0x1f, 0xed, 0x05, 0x13, + 0xe2, 0x5b, 0x13, 0xe7, 0x72, 0xbf, 0xc9, 0x94, 0xf0, 0xcf, 0xc6, 0xe1, 0xc4, 0x6e, 0x8e, 0xad, + 0x98, 0x5c, 0x59, 0x53, 0xce, 0xb3, 0xcd, 0x31, 0xf1, 0x4d, 0x61, 0xd8, 0x14, 0x86, 0xf5, 0x0f, + 0xc6, 0x41, 0x30, 0x76, 0xc9, 0x1e, 0x53, 0x39, 0x4f, 0x46, 0x7b, 0x96, 0x2f, 0xf4, 0xeb, 0x0f, + 0x6e, 0x8a, 0xa2, 0x38, 0x4c, 0xec, 0x98, 0x4b, 0x1b, 0x7f, 0x55, 0xa0, 0xd4, 0xe7, 0x60, 0x58, + 0x85, 0x92, 0xc0, 0x55, 0xa5, 0x1d, 0x69, 0xb7, 0x6c, 0xa4, 0x24, 0x6e, 0x81, 0xec, 0xf8, 0xa3, + 0x40, 0xcd, 0xed, 0x48, 0xbb, 0x95, 0xfd, 0xa7, 0xcd, 0x35, 0x8f, 0xd5, 0xd4, 0xfc, 0x51, 0x60, + 0x30, 0x53, 0x8c, 0x41, 0xbe, 0x08, 0xa2, 0x58, 0xcd, 0x33, 0x64, 0xb6, 0xc6, 0x1f, 0x42, 0xf9, + 0xdc, 0x8a, 0x88, 0x39, 0xb1, 0xe2, 0x0b, 0x55, 0x66, 0x02, 0x85, 0x32, 0x7a, 0x56, 0x7c, 0x81, + 0xbf, 0x86, 0x52, 0x64, 0x5f, 0x10, 0x8f, 0x44, 0x6a, 0x61, 0x27, 0xbf, 0x5b, 0xdb, 0xff, 0xf5, + 0xda, 0xdb, 0x8a, 0x0b, 0xa5, 0xbf, 0x7d, 0x06, 0x63, 0xa4, 0x70, 0xb8, 0x0e, 0x8a, 0x1d, 0xf8, + 0x51, 0x42, 0xa1, 0x8b, 0x3b, 0x79, 0xba, 0x6b, 0x4a, 0x53, 0xd9, 0x24, 0x0c, 0x86, 0x89, 0x4d, + 0x22, 0xb5, 0xc4, 0x65, 0x29, 0x8d, 0x5f, 0x41, 0x39, 0x24, 0xd1, 0x24, 0xf0, 0x23, 0x12, 0xa9, + 0xb0, 0x93, 0xdf, 0xad, 0xec, 0xff, 0x66, 0xe3, 0x33, 0x19, 0x29, 0x42, 0xdb, 0x8f, 0xc3, 0xa9, + 0x31, 0x47, 0xc4, 0x01, 0x6c, 0x47, 0xc4, 0x4e, 0x42, 0x27, 0x9e, 0x9a, 0x43, 0x32, 0x72, 0x7c, + 0x87, 0x59, 0xaa, 0x15, 0xe6, 0xf4, 0x5f, 0xae, 0xbf, 0x93, 0x00, 0x39, 0x9a, 0x63, 0x18, 0xf7, + 0xa2, 0x65, 0x26, 0xfe, 0x1a, 0x94, 0x94, 0xad, 0x6e, 0xb1, 0xeb, 0x6c, 0xbe, 0x89, 0x41, 0xbe, + 0x4d, 0x9c, 0x90, 0x78, 0xc4, 0x8f, 0x8d, 0x19, 0x1a, 0xb6, 0xa1, 0x4a, 0xae, 0x63, 0x12, 0xfa, + 0x96, 0x6b, 0x0e, 0x03, 0x3b, 0x52, 0x6b, 0xec, 0x0e, 0xeb, 0x47, 0xb0, 0x2d, 0xac, 0x8f, 0x02, + 0x3b, 0xa1, 0xd8, 0x16, 0x65, 0x1b, 0x5b, 0x64, 0xce, 0x8e, 0xf0, 0x1f, 0x00, 0x28, 0xed, 0x47, + 0xcc, 0x4b, 0x77, 0xd8, 0x05, 0x7e, 0xbb, 0x71, 0x3c, 0xda, 0x33, 0x08, 0x1e, 0x90, 0x0c, 0x66, + 0x3d, 0x80, 0xda, 0x62, 0xb8, 0x30, 0x82, 0xfc, 0x6b, 0x32, 0x15, 0xe9, 0x41, 0x97, 0xf8, 0x18, + 0x0a, 0x97, 0x96, 0x9b, 0x10, 0x91, 0x1b, 0x9f, 0xae, 0x7d, 0x80, 0x14, 0xd9, 0xe0, 0xf6, 0x5f, + 0xe4, 0x3e, 0x97, 0xea, 0xa7, 0x70, 0xe7, 0xc6, 0x79, 0x56, 0xec, 0xf8, 0xf3, 0xc5, 0x1d, 0xdf, + 0x6f, 0xf2, 0x04, 0x6f, 0xa6, 0x09, 0xde, 0xfc, 0x8a, 0x4a, 0x33, 0xb0, 0x8d, 0x03, 0xa8, 0x2e, + 0xa4, 0x02, 0xae, 0x40, 0xe9, 0xb4, 0xf3, 0xbc, 0xd3, 0x3d, 0xeb, 0xa0, 0xf7, 0xb0, 0x02, 0xf2, + 0xb3, 0xc1, 0xa0, 0x87, 0x24, 0x5c, 0x86, 0x02, 0x5d, 0xf5, 0x51, 0x0e, 0x17, 0x21, 0x77, 0xd6, + 0x47, 0x79, 0x5c, 0x82, 0xfc, 0x59, 0xbf, 0x8f, 0x64, 0x5d, 0x56, 0x14, 0x54, 0xd6, 0x65, 0xa5, + 0x8c, 0x40, 0x97, 0x95, 0x2a, 0xaa, 0x35, 0xfe, 0x51, 0x84, 0x72, 0x77, 0x42, 0x42, 0x16, 0x1b, + 0x9a, 0xdf, 0xb1, 0x35, 0x8e, 0x54, 0x89, 0x25, 0x0d, 0x5b, 0xb3, 0x82, 0x92, 0x78, 0x9e, 0x15, + 0x4e, 0xd9, 0x59, 0x69, 0x41, 0xe1, 0x24, 0xde, 0x81, 0xca, 0x90, 0x44, 0x76, 0xe8, 0x30, 0x67, + 0x88, 0xa2, 0x90, 0x65, 0x2d, 0x3f, 0x21, 0xf9, 0x1d, 0x3c, 0xa1, 0x8f, 0x60, 0x2b, 0x48, 0x6f, + 0x60, 0x3a, 0x43, 0xb5, 0xc0, 0xcf, 0x31, 0xe3, 0x69, 0xc3, 0x5b, 0x17, 0x0b, 0x33, 0x5b, 0x2c, + 0xca, 0xec, 0x71, 0xb6, 0xd6, 0x3e, 0xfb, 0xcc, 0xad, 0x6f, 0x28, 0x17, 0xea, 0xbc, 0x3e, 0x02, + 0xdb, 0x7b, 0x56, 0xdf, 0x1e, 0x01, 0x0c, 0xc9, 0x24, 0x24, 0xb6, 0x15, 0x93, 0x21, 0x2b, 0x1f, + 0x8a, 0x91, 0xe1, 0xbc, 0xc3, 0xbc, 0x3f, 0x5f, 0x48, 0xc9, 0x2a, 0xc3, 0x3e, 0xb8, 0xc5, 0xad, + 0xff, 0x07, 0x92, 0x92, 0x27, 0x54, 0xe3, 0x6f, 0x39, 0x50, 0xd2, 0x4d, 0x6f, 0x66, 0x85, 0xb4, + 0x9c, 0x15, 0xc7, 0x50, 0x64, 0x51, 0xb6, 0xc4, 0x3e, 0x7b, 0xeb, 0x07, 0x8e, 0x99, 0x19, 0xc2, + 0x1c, 0x5b, 0x0b, 0x91, 0x2a, 0x6c, 0xf8, 0x3e, 0xd3, 0x13, 0xbf, 0x31, 0x50, 0xef, 0xcc, 0x6f, + 0x79, 0x56, 0x8e, 0x64, 0x54, 0x68, 0xfc, 0x33, 0x0f, 0x32, 0x9d, 0x31, 0xf0, 0x36, 0x14, 0x62, + 0x27, 0x76, 0x89, 0x80, 0xe6, 0xc4, 0x4d, 0x7f, 0xe6, 0x96, 0xfd, 0xb9, 0x0b, 0x28, 0x26, 0xa1, + 0x17, 0x99, 0xc1, 0xc8, 0x8c, 0x48, 0x78, 0xe9, 0xd8, 0x44, 0x14, 0xa3, 0x1a, 0xe3, 0x77, 0x47, + 0x7d, 0xce, 0xc5, 0x3a, 0x94, 0xec, 0xc0, 0x8f, 0x2d, 0x3b, 0x16, 0x95, 0xe8, 0x93, 0xb5, 0xbd, + 0x75, 0xc8, 0xed, 0x8c, 0x14, 0x80, 0x62, 0xb9, 0x8e, 0x4d, 0xfc, 0x88, 0xb0, 0x8a, 0xb3, 0x09, + 0xd6, 0x09, 0xb7, 0x33, 0x52, 0x00, 0x5a, 0x06, 0x2e, 0x49, 0x48, 0x7d, 0xac, 0x16, 0x79, 0x8d, + 0x15, 0x24, 0x7e, 0xb5, 0x10, 0xe2, 0x12, 0x0b, 0xf1, 0xaf, 0x36, 0x1a, 0xdd, 0x7e, 0x84, 0xf0, + 0x36, 0xda, 0x50, 0x12, 0xfe, 0xa2, 0x2d, 0xc5, 0xb7, 0xbc, 0x34, 0xa6, 0x6c, 0x4d, 0xb7, 0x48, + 0x42, 0x57, 0x84, 0x92, 0x2e, 0x69, 0xe8, 0x89, 0x67, 0x39, 0xae, 0x88, 0x1b, 0x27, 0x1a, 0x7b, + 0x50, 0x12, 0xae, 0x5a, 0x0f, 0xa6, 0xf1, 0x1c, 0xee, 0xaf, 0xec, 0x18, 0x6b, 0x24, 0xe5, 0x32, + 0xd8, 0xdf, 0x73, 0x50, 0xe4, 0x09, 0x87, 0x07, 0x50, 0xf9, 0x26, 0x0a, 0x7c, 0x53, 0xa4, 0xad, + 0xc4, 0xfc, 0xf0, 0xd9, 0xda, 0x61, 0xd0, 0xfb, 0xdd, 0x8e, 0x48, 0x5d, 0xa0, 0x38, 0x02, 0xf5, + 0x63, 0xa8, 0x0e, 0x1d, 0x7a, 0x02, 0xcf, 0xf1, 0xad, 0x38, 0x08, 0xc5, 0xe6, 0x8b, 0x4c, 0x3a, + 0x5f, 0x87, 0xc4, 0x1a, 0x9a, 0x81, 0xef, 0x4e, 0x99, 0x7b, 0x14, 0x43, 0xa1, 0x8c, 0xae, 0xef, + 0xae, 0x98, 0xd1, 0x0a, 0xef, 0xa0, 0xc1, 0x36, 0xa1, 0x44, 0xae, 0x2d, 0x6f, 0xe2, 0x12, 0xf6, + 0x3a, 0x2b, 0xfb, 0xdb, 0x4b, 0x2f, 0xa0, 0xe5, 0x4f, 0x8d, 0x54, 0x49, 0xa4, 0xf5, 0x77, 0x25, + 0x80, 0xf9, 0xc5, 0xa9, 0x7f, 0x43, 0x32, 0x12, 0xf1, 0xa5, 0xcb, 0x79, 0xba, 0x17, 0xde, 0x90, + 0xee, 0xc5, 0xe5, 0x48, 0xa9, 0x50, 0x1a, 0x92, 0x91, 0x95, 0xb8, 0xb1, 0x5a, 0xe2, 0xc9, 0x22, + 0xc8, 0x45, 0x57, 0x29, 0x37, 0x5c, 0xf5, 0xff, 0x50, 0xf1, 0x12, 0x37, 0x76, 0x26, 0x2e, 0x31, + 0x83, 0x91, 0x0a, 0x3b, 0xd2, 0xae, 0x64, 0x40, 0xca, 0xea, 0x8e, 0x28, 0xae, 0x67, 0x5d, 0x3b, + 0x5e, 0xe2, 0xb1, 0x76, 0x2b, 0x19, 0x29, 0x89, 0x9f, 0xc0, 0x5d, 0x72, 0x6d, 0xbb, 0x49, 0xe4, + 0x5c, 0x12, 0x33, 0xd5, 0xd9, 0x62, 0xf8, 0x68, 0x26, 0x78, 0x21, 0x94, 0x29, 0x8c, 0xe3, 0x33, + 0x95, 0xaa, 0x80, 0xe1, 0xe4, 0x0d, 0x18, 0xa1, 0x53, 0xbb, 0x09, 0x23, 0x94, 0x1f, 0x02, 0x78, + 0xd6, 0xb5, 0xe9, 0x12, 0x7f, 0x1c, 0x5f, 0xa8, 0x77, 0x76, 0xa4, 0x5d, 0xd9, 0x28, 0x7b, 0xd6, + 0xf5, 0x09, 0x63, 0x30, 0xb1, 0xe3, 0xa7, 0x62, 0x24, 0xc4, 0x8e, 0x2f, 0xc4, 0x2a, 0x94, 0x26, + 0x56, 0x4c, 0x63, 0xa8, 0xde, 0xe5, 0x3e, 0x12, 0x24, 0xf5, 0x11, 0xc5, 0x75, 0x62, 0xe2, 0x45, + 0xea, 0x36, 0xb3, 0x53, 0x3c, 0xeb, 0x5a, 0xa3, 0x34, 0x13, 0x3a, 0xbe, 0x10, 0xde, 0x17, 0x42, + 0xc7, 0xe7, 0xc2, 0x8f, 0x60, 0x2b, 0xf1, 0x9d, 0x6f, 0x13, 0x22, 0xe4, 0xef, 0xb3, 0x93, 0x57, + 0x38, 0x8f, 0xab, 0xfc, 0x14, 0x6a, 0x14, 0x7c, 0x12, 0xd2, 0xe1, 0x2b, 0x76, 0x48, 0xa4, 0xaa, + 0x0c, 0xa4, 0xea, 0x59, 0xd7, 0xbd, 0x19, 0x93, 0xa9, 0x39, 0x7e, 0x56, 0xed, 0x03, 0xa1, 0xe6, + 0xf8, 0x19, 0xb5, 0x3a, 0x28, 0x21, 0x9f, 0x50, 0x86, 0x6a, 0x9d, 0x4f, 0x66, 0x29, 0x4d, 0x1f, + 0x8f, 0x15, 0x86, 0xd6, 0x54, 0x6d, 0x30, 0x01, 0x27, 0xf0, 0x2b, 0x90, 0xe3, 0xe9, 0x84, 0xa8, + 0x3f, 0x61, 0xdf, 0x9a, 0xda, 0x2d, 0x12, 0x34, 0xb3, 0xec, 0x3b, 0xf4, 0x35, 0x0f, 0xa6, 0x13, + 0x12, 0x19, 0x0c, 0xb6, 0x71, 0x05, 0xf7, 0x57, 0x8a, 0x17, 0x47, 0xf1, 0x32, 0x14, 0x5a, 0x86, + 0xd1, 0x7a, 0x89, 0x24, 0xca, 0x3f, 0xe8, 0x76, 0x4f, 0xda, 0xad, 0x0e, 0xca, 0x51, 0x42, 0xeb, + 0x0c, 0xda, 0xc7, 0x6d, 0x03, 0xe5, 0xe9, 0xbc, 0xde, 0x39, 0x3d, 0x39, 0x41, 0x32, 0x06, 0x28, + 0x76, 0x4e, 0x5f, 0x1c, 0xb4, 0x0d, 0x54, 0xa0, 0xeb, 0xee, 0x81, 0xde, 0x3e, 0x1c, 0xa0, 0x22, + 0x5d, 0xf7, 0x07, 0x86, 0xd6, 0x39, 0x46, 0x25, 0x5d, 0x56, 0x24, 0x94, 0xd3, 0x65, 0x25, 0x87, + 0xf2, 0x3c, 0xbb, 0x66, 0x33, 0x3c, 0x46, 0xf7, 0x74, 0x59, 0xb9, 0x87, 0xb6, 0x75, 0x59, 0xf9, + 0x3f, 0xa4, 0xea, 0xb2, 0xf2, 0x21, 0x7a, 0xa0, 0xcb, 0xca, 0x03, 0xf4, 0x50, 0x97, 0x95, 0x87, + 0xe8, 0x91, 0x2e, 0x2b, 0x8f, 0x50, 0x43, 0x97, 0x95, 0x8f, 0xd1, 0x63, 0x5d, 0x56, 0x1e, 0xa3, + 0x27, 0xba, 0xac, 0x3c, 0x41, 0xcd, 0xc6, 0x9f, 0x25, 0xc8, 0x0f, 0xac, 0xf1, 0x1a, 0xfd, 0x75, + 0xa9, 0xc8, 0xe4, 0x7f, 0xf8, 0x22, 0xc3, 0xaf, 0xd8, 0xf8, 0xb7, 0x04, 0xf7, 0x56, 0x7c, 0xfa, + 0xe2, 0x51, 0x66, 0xda, 0x95, 0x58, 0x13, 0xd4, 0xdf, 0xe6, 0x53, 0x7a, 0xc6, 0xe3, 0x1d, 0x71, + 0x86, 0x5d, 0x8f, 0xa1, 0xba, 0x20, 0x5a, 0xd1, 0x0d, 0x5f, 0x2c, 0x76, 0xc3, 0x5f, 0x6c, 0x7c, + 0x0e, 0xf1, 0x4f, 0x46, 0xa6, 0x5d, 0xfe, 0xa7, 0x08, 0xb5, 0x45, 0x29, 0xee, 0x89, 0x97, 0x4c, + 0x37, 0xae, 0xdd, 0x62, 0xb4, 0xe7, 0x30, 0x4d, 0xfa, 0x3c, 0xf9, 0xe3, 0x5d, 0x23, 0xce, 0x69, + 0x8f, 0xcd, 0x67, 0x7a, 0xac, 0x0e, 0x39, 0xc7, 0x67, 0xc3, 0x52, 0x6d, 0xff, 0x8b, 0xdb, 0x9e, + 0x42, 0xf3, 0x8d, 0x9c, 0xe3, 0xd3, 0x3b, 0x8d, 0xdc, 0xe0, 0x8a, 0xd5, 0xfb, 0xb7, 0xb8, 0xd3, + 0x97, 0x6e, 0x70, 0x65, 0x30, 0x24, 0x5a, 0x51, 0xad, 0x24, 0xbe, 0x08, 0x42, 0xe7, 0x8f, 0xfc, + 0xf3, 0x8f, 0xb6, 0x70, 0xde, 0x32, 0xd0, 0x82, 0xe0, 0x34, 0x74, 0x69, 0x71, 0x8b, 0x83, 0xd7, + 0x84, 0x2b, 0xf1, 0xce, 0xa1, 0x30, 0x06, 0x15, 0xb2, 0x99, 0x3c, 0x98, 0x90, 0x88, 0xf5, 0x8d, + 0xcd, 0x66, 0x72, 0x6a, 0x66, 0x08, 0x73, 0x3c, 0x5e, 0x18, 0xd8, 0xf8, 0x37, 0xe3, 0xf1, 0x6d, + 0xaf, 0xfa, 0x23, 0x8c, 0x6e, 0xcf, 0x41, 0xa6, 0x8f, 0x06, 0x23, 0xd8, 0x1a, 0xbc, 0xec, 0xb5, + 0x4d, 0xad, 0xf3, 0x55, 0xeb, 0x44, 0x3b, 0x42, 0xef, 0xe1, 0x1a, 0x00, 0xe3, 0x1c, 0xb4, 0xfa, + 0xda, 0x21, 0x92, 0x66, 0x1a, 0xad, 0x9e, 0x66, 0x3e, 0x6f, 0xbf, 0x44, 0x39, 0x7c, 0x07, 0x2a, + 0x8c, 0xd3, 0x6d, 0x9d, 0x0e, 0x9e, 0xed, 0xa3, 0x7c, 0xe3, 0x53, 0xc8, 0x69, 0x3e, 0x35, 0xd4, + 0x3a, 0x19, 0xa0, 0x2d, 0x50, 0xb4, 0x8e, 0xf9, 0xbb, 0xd3, 0xb6, 0x41, 0x6b, 0x64, 0x15, 0xca, + 0x5a, 0xc7, 0x7c, 0xd6, 0x6e, 0x1d, 0xb5, 0x0d, 0x94, 0x6b, 0x7c, 0x03, 0x32, 0x0d, 0x30, 0x45, + 0xff, 0xf2, 0xa4, 0x7b, 0x96, 0x31, 0xbb, 0x0b, 0x55, 0xce, 0x79, 0xd1, 0x3b, 0xd1, 0x0e, 0xb5, + 0x01, 0x92, 0x66, 0xac, 0x5e, 0xab, 0xdf, 0x3f, 0xeb, 0x1a, 0x47, 0x28, 0x87, 0xb7, 0x01, 0x31, + 0x56, 0xab, 0x47, 0xb5, 0x5a, 0x03, 0xad, 0xdb, 0x41, 0xf9, 0x39, 0xf7, 0xf0, 0xb0, 0xdd, 0xef, + 0x9b, 0x87, 0xdd, 0xa3, 0x36, 0x92, 0x1b, 0xff, 0xca, 0xcd, 0xab, 0x4d, 0xe6, 0x5b, 0x18, 0xff, + 0x49, 0xca, 0xfc, 0x8b, 0x17, 0xce, 0x05, 0xa2, 0xf4, 0x9c, 0xbe, 0xcd, 0x87, 0xf6, 0x2a, 0x1e, + 0x0f, 0xee, 0xec, 0xef, 0xbd, 0x8c, 0xa4, 0xfe, 0x09, 0xa8, 0x2b, 0x0c, 0x58, 0xd4, 0x68, 0x0f, + 0x64, 0x8f, 0x4e, 0xfc, 0x5d, 0xc3, 0x89, 0xfa, 0x77, 0xd2, 0x4a, 0x93, 0xef, 0x7b, 0x21, 0xaf, + 0x17, 0x5f, 0xc8, 0x0f, 0x7e, 0xb7, 0xa5, 0x07, 0xf6, 0x17, 0x89, 0x8e, 0xd5, 0x2c, 0x57, 0x7a, + 0xd9, 0x0b, 0x54, 0x36, 0xa9, 0x2f, 0xcc, 0x9e, 0xff, 0x70, 0xe7, 0x89, 0xcb, 0x7f, 0x0e, 0x30, + 0x67, 0xae, 0xb8, 0xed, 0x76, 0xf6, 0xb6, 0xe5, 0xcc, 0xb1, 0x0e, 0x0e, 0x7f, 0xdf, 0x1a, 0x3b, + 0xf1, 0x45, 0x72, 0xde, 0xb4, 0x03, 0x6f, 0x8f, 0x1e, 0xe4, 0x29, 0xb1, 0x83, 0x68, 0x1a, 0xc5, + 0x44, 0x90, 0xe2, 0x5c, 0x7b, 0xdf, 0xff, 0xd7, 0xff, 0x79, 0x91, 0xc9, 0x3e, 0xfb, 0x6f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x29, 0x5a, 0xd3, 0x93, 0x1f, 0x18, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 1fb248ca144..83cb564fa58 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -5,6 +5,7 @@ package grpc.gateway.protoc_gen_swagger.options; option go_package = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"; import "google/protobuf/any.proto"; +import "google/protobuf/struct.proto"; // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. // @@ -45,6 +46,7 @@ message Swagger { // service objects into OpenAPI v2 Tag objects. reserved 13; ExternalDocumentation external_docs = 14; + map extensions = 15; } // `Operation` is a representation of OpenAPI v2 specification's Operation object. @@ -66,6 +68,7 @@ message Operation { repeated string schemes = 10; bool deprecated = 11; repeated SecurityRequirement security = 12; + map extensions = 13; } // `Response` is a representation of OpenAPI v2 specification's Response object. @@ -83,6 +86,7 @@ message Response { reserved 3; // field 3 is reserved for 'example'. reserved 4; + map extensions = 5; } // `Info` is a representation of OpenAPI v2 specification's Info object. @@ -97,6 +101,7 @@ message Info { Contact contact = 4; License license = 5; string version = 6; + map extensions = 7; } // `Contact` is a representation of OpenAPI v2 specification's Contact object. @@ -334,6 +339,7 @@ message SecurityScheme { // // Valid for oauth2. Scopes scopes = 8; + map extensions = 9; } // `SecurityRequirement` is a representation of OpenAPI v2 specification's From 2dfdd971e2e70fb436ffcdf845b7313c43606848 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 20 Sep 2019 09:37:01 +0100 Subject: [PATCH 0218/1518] Generate changelog for 1.11.2 --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c39858b0b2..686e4934ca6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,38 @@ # Change Log +## [v1.11.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.2) (2019-09-20) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.1...v1.11.2) + +**Implemented enhancements:** + +- Support specifying servers in the swagger generator [\#891](https://github.com/grpc-ecosystem/grpc-gateway/issues/891) + +**Fixed bugs:** + +- Make protoc-gen-swagger build on 1.11 [\#1044](https://github.com/grpc-ecosystem/grpc-gateway/issues/1044) +- jsonpb panics when using numbers for parsing timestamps [\#1025](https://github.com/grpc-ecosystem/grpc-gateway/issues/1025) + +**Closed issues:** + +- Interceptors not called when using new RegisterHandler function [\#1043](https://github.com/grpc-ecosystem/grpc-gateway/issues/1043) +- How to use -grpc-gateway\_out sp that the result is in a specific folder? [\#1042](https://github.com/grpc-ecosystem/grpc-gateway/issues/1042) +- Is there any way to let json int32 can not accept string in grpc-gateway? [\#1029](https://github.com/grpc-ecosystem/grpc-gateway/issues/1029) +- Go integration tests are somewhat flaky [\#992](https://github.com/grpc-ecosystem/grpc-gateway/issues/992) + +**Merged pull requests:** + +- examples/integration: wait for secondary gateway [\#1039](https://github.com/grpc-ecosystem/grpc-gateway/pull/1039) ([srenatus](https://github.com/srenatus)) +- Update README.md [\#1038](https://github.com/grpc-ecosystem/grpc-gateway/pull/1038) ([piengeng](https://github.com/piengeng)) +- Configure stale\[bot\] [\#1036](https://github.com/grpc-ecosystem/grpc-gateway/pull/1036) ([achew22](https://github.com/achew22)) +- added additional info for custom http headers [\#1035](https://github.com/grpc-ecosystem/grpc-gateway/pull/1035) ([cemenson](https://github.com/cemenson)) +- protoc-gen-swagger: add support for arbitrary extensions [\#1033](https://github.com/grpc-ecosystem/grpc-gateway/pull/1033) ([srenatus](https://github.com/srenatus)) +- nitpick spacing in other proto files [\#1032](https://github.com/grpc-ecosystem/grpc-gateway/pull/1032) ([srenatus](https://github.com/srenatus)) +- nitpick a\_bit\_of\_everything.proto [\#1030](https://github.com/grpc-ecosystem/grpc-gateway/pull/1030) ([srenatus](https://github.com/srenatus)) +- runtime: stop using nil ponters with Unmarshal [\#1028](https://github.com/grpc-ecosystem/grpc-gateway/pull/1028) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Small performance fix [\#1027](https://github.com/grpc-ecosystem/grpc-gateway/pull/1027) ([freedemster](https://github.com/freedemster)) +- docs need type assertion on proto.Message [\#1026](https://github.com/grpc-ecosystem/grpc-gateway/pull/1026) ([zachgersh](https://github.com/zachgersh)) +- Update ISSUE\_TEMPLATE.md [\#1014](https://github.com/grpc-ecosystem/grpc-gateway/pull/1014) ([prologic](https://github.com/prologic)) + ## [v1.11.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.1) (2019-09-02) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.0...v1.11.1) @@ -15,6 +48,7 @@ **Merged pull requests:** +- Generate changelog for 1.11.1 [\#1024](https://github.com/grpc-ecosystem/grpc-gateway/pull/1024) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Fuzzit: use go-fuzz with go-modules support [\#1022](https://github.com/grpc-ecosystem/grpc-gateway/pull/1022) ([yevgenypats](https://github.com/yevgenypats)) - invoke in process server need attach md to incoming context [\#1021](https://github.com/grpc-ecosystem/grpc-gateway/pull/1021) ([hb-chen](https://github.com/hb-chen)) diff --git a/Makefile b/Makefile index f1af53985ce..f39f9d597e7 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.11.1 + --future-release=v1.11.2 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 6527435ba8b22462597eda661d39ac0a3eeed369 Mon Sep 17 00:00:00 2001 From: mnito Date: Sun, 22 Sep 2019 16:30:52 -0400 Subject: [PATCH 0219/1518] Pass nested enum values through properly when used as url parameters Template for generating code needed to handle the case of a nested proto that also references an enum value --- .../abe/a_bit_of_everything_service_api.go | 146 +++++ examples/integration/integration_test.go | 8 + .../proto/examplepb/a_bit_of_everything.pb.go | 501 ++++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 123 +++++ .../proto/examplepb/a_bit_of_everything.proto | 5 + .../a_bit_of_everything.swagger.json | 309 +++++++++++ examples/server/a_bit_of_everything.go | 4 + .../gengateway/template.go | 6 + 8 files changed, 869 insertions(+), 233 deletions(-) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 31a5b3c9c1c..731c8146d9f 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -184,6 +184,152 @@ func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, return successPayload, localVarAPIResponse, err } +/** + * + * + * @param singleNestedOk DeepEnum description. + * @param floatValue Float value field + * @param singleNestedName name is nested field. + * @param singleNestedAmount + * @param uuid + * @param doubleValue + * @param int64Value + * @param uint64Value + * @param int32Value + * @param fixed64Value + * @param fixed32Value + * @param boolValue + * @param stringValue + * @param bytesValue + * @param uint32Value + * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param pathEnumValue + * @param nestedPathEnumValue + * @param sfixed32Value + * @param sfixed64Value + * @param sint32Value + * @param sint64Value + * @param repeatedStringValue + * @param oneofString + * @param nonConventionalNameValue + * @param timestampValue + * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param repeatedStringAnnotation Repeated string title. Repeated string description. + * @param nestedAnnotationName name is nested field. + * @param nestedAnnotationAmount + * @param int64OverrideType + * @return *ExamplepbABitOfEverything + */ +func (a ABitOfEverythingServiceApi) CheckNestedEnumGetQueryParams(singleNestedOk string, floatValue float32, singleNestedName string, singleNestedAmount int64, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, int64OverrideType int64) (*ExamplepbABitOfEverything, *APIResponse, error) { + + var localVarHttpMethod = strings.ToUpper("Get") + // create path and map variables + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.ok"+"}", fmt.Sprintf("%v", singleNestedOk), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := make(map[string]string) + var localVarPostBody interface{} + var localVarFileName string + var localVarFileBytes []byte + // authentication '(OAuth2)' required + // oauth required + if a.Configuration.AccessToken != ""{ + localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken + } + // authentication '(BasicAuth)' required + // http basic authentication required + if a.Configuration.Username != "" || a.Configuration.Password != ""{ + localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() + } + // authentication '(ApiKeyAuth)' required + // set key with prefix in header + localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") + // add default headers if any + for key := range a.Configuration.DefaultHeader { + localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] + } + localVarQueryParams.Add("single_nested.name", a.Configuration.APIClient.ParameterToString(singleNestedName, "")) + localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) + localVarQueryParams.Add("uuid", a.Configuration.APIClient.ParameterToString(uuid, "")) + localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) + localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) + localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) + localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) + localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) + localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) + localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) + localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) + localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) + localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) + localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) + localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) + localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) + localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) + localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) + localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) + localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) + localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) + var repeatedStringValueCollectionFormat = "multi" + localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) + + localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) + localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) + localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) + var repeatedEnumValueCollectionFormat = "multi" + localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) + + var repeatedEnumAnnotationCollectionFormat = "multi" + localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) + + localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) + var repeatedStringAnnotationCollectionFormat = "multi" + localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) + + localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) + localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) + localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) + + // to determine the Content-Type header + localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } + + // set Content-Type header + localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + // to determine the Accept header + localVarHttpHeaderAccepts := []string{ + "application/json", + "application/x-foo-mime", + } + + // set Accept header + localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + var successPayload = new(ExamplepbABitOfEverything) + localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + + var localVarURL, _ = url.Parse(localVarPath) + localVarURL.RawQuery = localVarQueryParams.Encode() + var localVarAPIResponse = &APIResponse{Operation: "CheckNestedEnumGetQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + if localVarHttpResponse != nil { + localVarAPIResponse.Response = localVarHttpResponse.RawResponse + localVarAPIResponse.Payload = localVarHttpResponse.Body() + } + + if err != nil { + return successPayload, localVarAPIResponse, err + } + err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) + return successPayload, localVarAPIResponse, err +} + /** * * diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 49ed02ac957..e7cb6e71016 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1556,6 +1556,14 @@ func TestRequestQueryParams(t *testing.T) { apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), wantContent: `{"single_nested":{"name":"foo"},"double_value":1234.56,"bool_value":true}`, }, + { + name: "get nested enum url parameter", + httpMethod: "GET", + contentType: "application/json", + // If nested_enum.OK were FALSE, the content of single_nested would be {} due to how 0 values are serialized + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/nested_enum/TRUE", port), + wantContent: `{"single_nested":{"ok":"TRUE"}}`, + }, { name: "post url query values", httpMethod: "POST", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index b16115fdfce..7fd9e28a3e7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -520,7 +520,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{0, 0} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -589,7 +589,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{1} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -732,7 +732,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{2} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -771,7 +771,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{3} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -818,7 +818,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_eb14258081b6c54b, []int{4} + return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -905,6 +905,7 @@ type ABitOfEverythingServiceClient interface { GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) } @@ -1069,6 +1070,15 @@ func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, return out, nil } +func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) @@ -1107,6 +1117,7 @@ type ABitOfEverythingServiceServer interface { GetMessageWithBody(context.Context, *MessageWithBody) (*empty.Empty, error) PostWithEmptyBody(context.Context, *Body) (*empty.Empty, error) CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) } @@ -1420,6 +1431,24 @@ func _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{}, ctx c return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ABitOfEverything) if err := dec(in); err != nil { @@ -1510,6 +1539,10 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "CheckGetQueryParams", Handler: _ABitOfEverythingService_CheckGetQueryParams_Handler, }, + { + MethodName: "CheckNestedEnumGetQueryParams", + Handler: _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler, + }, { MethodName: "CheckPostQueryParams", Handler: _ABitOfEverythingService_CheckPostQueryParams_Handler, @@ -1648,229 +1681,231 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_eb14258081b6c54b) -} - -var fileDescriptor_a_bit_of_everything_eb14258081b6c54b = []byte{ - // 3520 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7a, 0x4b, 0x70, 0x1b, 0x47, - 0x7a, 0x3f, 0x07, 0xc3, 0x67, 0xf3, 0x05, 0x36, 0x45, 0x09, 0x82, 0xb8, 0x66, 0x0b, 0x92, 0xd7, - 0x23, 0xac, 0x80, 0x21, 0x87, 0xb4, 0x2d, 0xc1, 0xff, 0xb5, 0x3d, 0x20, 0x29, 0x99, 0x92, 0x4d, - 0xd1, 0x23, 0x59, 0x7f, 0x47, 0x6b, 0x2d, 0xd3, 0x00, 0x1a, 0xc4, 0x88, 0x98, 0xc7, 0xce, 0xf4, - 0x50, 0x84, 0x18, 0x24, 0x5b, 0x49, 0x2a, 0xa9, 0xca, 0xde, 0xb0, 0x49, 0xe5, 0xb1, 0xa9, 0x5c, - 0x52, 0xb9, 0xa4, 0x72, 0x4a, 0x55, 0x2a, 0x87, 0x54, 0x25, 0x39, 0xe4, 0x96, 0x43, 0x52, 0x4e, - 0x55, 0x4e, 0xc9, 0x29, 0x39, 0xe7, 0x92, 0x2a, 0x57, 0xe5, 0x90, 0x47, 0x75, 0xcf, 0x0c, 0x30, - 0x33, 0x00, 0x44, 0x41, 0xda, 0xb2, 0x0f, 0xd6, 0x74, 0xf7, 0xf7, 0xf8, 0x7d, 0xdd, 0x5f, 0x7f, - 0x8f, 0x06, 0x81, 0x42, 0x4e, 0xb1, 0x61, 0x37, 0x89, 0x2b, 0xdb, 0x8e, 0x45, 0x2d, 0x39, 0x18, - 0xda, 0x15, 0x19, 0x1f, 0x56, 0x74, 0x7a, 0x68, 0xd5, 0x0f, 0xc9, 0x09, 0x71, 0x5a, 0xb4, 0xa1, - 0x9b, 0x47, 0x45, 0x4e, 0x03, 0xd7, 0x8e, 0x1c, 0xbb, 0x5a, 0x3c, 0xc2, 0x94, 0x3c, 0xc7, 0xad, - 0x62, 0x28, 0xa0, 0xd8, 0x65, 0xcd, 0xae, 0x1e, 0x59, 0xd6, 0x51, 0x93, 0xc8, 0xd8, 0xd6, 0x65, - 0x6c, 0x9a, 0x16, 0xc5, 0x54, 0xb7, 0x4c, 0xd7, 0x67, 0xcf, 0xa2, 0x60, 0x95, 0x8f, 0x2a, 0x5e, - 0x5d, 0xae, 0xeb, 0xa4, 0x59, 0x3b, 0x34, 0xb0, 0x7b, 0x1c, 0x50, 0x5c, 0x49, 0x52, 0x10, 0xc3, - 0xa6, 0xad, 0x60, 0xf1, 0xad, 0xe4, 0x62, 0xcd, 0x73, 0xb8, 0xfc, 0x60, 0xfd, 0x9d, 0x84, 0x45, - 0x36, 0xa6, 0x0d, 0x62, 0x7a, 0x06, 0xff, 0x38, 0x64, 0x5f, 0x21, 0x8e, 0x04, 0xa1, 0xeb, 0x55, - 0x64, 0x83, 0xb8, 0x2e, 0x3e, 0x22, 0x01, 0xc5, 0xd5, 0x7e, 0x0a, 0x25, 0x41, 0xb2, 0x96, 0x44, - 0x43, 0x75, 0x83, 0xb8, 0x14, 0x1b, 0x76, 0x40, 0x70, 0x93, 0xff, 0x53, 0x2d, 0x1c, 0x11, 0xb3, - 0xe0, 0x3e, 0xc7, 0x47, 0x47, 0xc4, 0x91, 0x2d, 0x9b, 0xef, 0x47, 0xff, 0xde, 0xe4, 0xfe, 0xf1, - 0x0a, 0x48, 0xab, 0x65, 0x9d, 0x3e, 0xa8, 0xef, 0x76, 0x77, 0x1d, 0x3e, 0x05, 0xf3, 0xae, 0x6e, - 0x1e, 0x35, 0xc9, 0xa1, 0x49, 0x5c, 0x4a, 0x6a, 0x99, 0xcb, 0x48, 0x90, 0x66, 0x95, 0x5b, 0xc5, - 0x73, 0xce, 0xa1, 0x98, 0x94, 0x54, 0xdc, 0xe7, 0xfc, 0xda, 0x9c, 0x2f, 0xce, 0x1f, 0xc1, 0x06, - 0x18, 0xf7, 0x3c, 0xbd, 0x96, 0x11, 0x90, 0x20, 0xcd, 0x94, 0x1f, 0x75, 0xd4, 0xcf, 0x7f, 0x2c, - 0x08, 0xbf, 0x25, 0xdc, 0xff, 0x01, 0x2e, 0xd4, 0xd5, 0xc2, 0x9d, 0xf5, 0xc2, 0xed, 0xa7, 0x67, - 0xb7, 0xda, 0x85, 0xe8, 0x70, 0x6b, 0x94, 0xe1, 0x86, 0xd2, 0xd6, 0xb8, 0x06, 0x78, 0x00, 0x26, - 0x03, 0x0b, 0x52, 0x48, 0x7c, 0x23, 0x0b, 0x02, 0x39, 0xf0, 0x1e, 0x98, 0xad, 0x37, 0x2d, 0x4c, - 0x0f, 0x4f, 0x70, 0xd3, 0x23, 0x19, 0x11, 0x09, 0x52, 0xaa, 0x7c, 0xa3, 0xa3, 0x7e, 0x57, 0x59, - 0xba, 0xc3, 0xe6, 0x11, 0x9f, 0x47, 0xdc, 0xc3, 0x4a, 0xe2, 0x7a, 0x51, 0xf9, 0x5a, 0x88, 0x32, - 0x68, 0x80, 0x0f, 0x1e, 0xb3, 0x6f, 0x78, 0x15, 0xcc, 0xd5, 0x2c, 0xaf, 0xd2, 0x24, 0x81, 0xb0, - 0x71, 0x24, 0x48, 0x82, 0x36, 0xeb, 0xcf, 0xf9, 0x24, 0x6b, 0x60, 0x56, 0x37, 0xe9, 0x7b, 0x5b, - 0x01, 0xc5, 0x04, 0x12, 0x24, 0x51, 0x03, 0x7c, 0xaa, 0x2b, 0xc3, 0x8b, 0x52, 0x4c, 0x22, 0x41, - 0x1a, 0xd7, 0x66, 0xbd, 0x08, 0x89, 0x2f, 0x63, 0x53, 0x09, 0x28, 0xa6, 0x90, 0x20, 0x4d, 0x70, - 0x19, 0x9b, 0x8a, 0x4f, 0x70, 0x0d, 0xcc, 0xd7, 0xf5, 0x53, 0x52, 0xeb, 0x0a, 0x99, 0x46, 0x82, - 0x34, 0xa9, 0xcd, 0x05, 0x93, 0x71, 0xa2, 0xae, 0x9c, 0x19, 0x24, 0x48, 0x53, 0x01, 0x51, 0x28, - 0xe9, 0x3b, 0x00, 0x54, 0x2c, 0xab, 0x19, 0x50, 0x00, 0x24, 0x48, 0xd3, 0xda, 0x0c, 0x9b, 0xe9, - 0x82, 0x75, 0xa9, 0xa3, 0x9b, 0x47, 0x01, 0xc1, 0x2c, 0x73, 0x00, 0x6d, 0xd6, 0x9f, 0xeb, 0x82, - 0xad, 0xb4, 0x28, 0x71, 0x03, 0x8a, 0xef, 0x20, 0x41, 0x9a, 0xd3, 0x00, 0x9f, 0x8a, 0x19, 0xdc, - 0x85, 0x31, 0x8f, 0x04, 0x69, 0xde, 0x37, 0x38, 0x44, 0x71, 0x1f, 0x00, 0x76, 0xeb, 0x02, 0x82, - 0x05, 0x24, 0x48, 0x0b, 0xca, 0xcd, 0x73, 0x4f, 0x7e, 0xdf, 0x33, 0x88, 0xa3, 0x57, 0x77, 0x4d, - 0xcf, 0xd0, 0x66, 0x18, 0xbf, 0x2f, 0xec, 0x00, 0x2c, 0x76, 0xef, 0x71, 0x20, 0xf1, 0x2d, 0x2e, - 0x51, 0x1a, 0x22, 0x31, 0xbc, 0xfe, 0xc5, 0x03, 0x4c, 0x1b, 0x5c, 0xda, 0xbc, 0x1d, 0x7c, 0xf9, - 0x12, 0x5d, 0x70, 0xd1, 0x77, 0xa6, 0xc3, 0xa4, 0xe0, 0x35, 0x2e, 0xf8, 0xc3, 0xf3, 0x04, 0x7f, - 0xe6, 0x07, 0x84, 0x50, 0x7e, 0xe0, 0xa2, 0x5d, 0x75, 0xcb, 0x66, 0x6c, 0xec, 0x2b, 0x7d, 0x1b, - 0x2c, 0xb8, 0xf1, 0xf3, 0x5b, 0x44, 0x82, 0xb4, 0xa8, 0xcd, 0xbb, 0xb1, 0x03, 0xec, 0x92, 0x75, - 0x7d, 0x21, 0x8d, 0x04, 0x29, 0x1d, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x12, 0x12, 0xa4, - 0x25, 0x6d, 0xd6, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x95, 0x03, 0x91, 0x20, 0x41, 0x9f, 0x24, 0x94, - 0xa2, 0x80, 0x15, 0x87, 0xd8, 0x04, 0xb3, 0xad, 0x88, 0xf9, 0xc5, 0x32, 0x12, 0xa5, 0x19, 0x6d, - 0x39, 0x5c, 0x7c, 0x18, 0xf1, 0x8f, 0xdb, 0x60, 0xd6, 0x32, 0x09, 0x4b, 0x12, 0x2c, 0x42, 0x67, - 0x2e, 0xf0, 0xc0, 0x74, 0xb1, 0xe8, 0x07, 0xc5, 0x62, 0x18, 0x14, 0x8b, 0xbb, 0x6c, 0xf5, 0x93, - 0x31, 0x0d, 0x70, 0x62, 0x3e, 0x82, 0xd7, 0xc0, 0x9c, 0xcf, 0xea, 0xeb, 0xca, 0xac, 0x30, 0xef, - 0xfb, 0x64, 0x4c, 0xf3, 0x05, 0xfa, 0x4a, 0xe0, 0x57, 0x60, 0xc6, 0xc0, 0x76, 0x80, 0xe3, 0x22, - 0x0f, 0x1a, 0x1f, 0x8d, 0x1e, 0x34, 0x3e, 0xc3, 0x36, 0x87, 0xbb, 0x6b, 0x52, 0xa7, 0xa5, 0x4d, - 0x1b, 0xc1, 0x10, 0x9e, 0x82, 0x65, 0x03, 0xdb, 0x76, 0xd2, 0xde, 0x4b, 0x5c, 0xcf, 0x27, 0xaf, - 0xa5, 0xc7, 0x8e, 0xed, 0x8f, 0xaf, 0x70, 0xc9, 0x48, 0xce, 0x47, 0x34, 0x07, 0xbe, 0xe7, 0x6b, - 0xce, 0xbc, 0x99, 0x66, 0xdf, 0xf3, 0xfa, 0x35, 0x47, 0xe6, 0x61, 0x09, 0x64, 0x4c, 0xcb, 0xdc, - 0xb6, 0xcc, 0x13, 0x62, 0xb2, 0xcc, 0x83, 0x9b, 0xfb, 0xd8, 0xf0, 0xc3, 0x5b, 0x26, 0xcb, 0x03, - 0xc0, 0xd0, 0x75, 0xb8, 0x0d, 0x16, 0xbb, 0xe9, 0x2d, 0x40, 0x7c, 0x85, 0x9f, 0x78, 0xb6, 0xef, - 0xc4, 0x1f, 0x85, 0x74, 0xda, 0x42, 0x97, 0xc5, 0x17, 0xf2, 0x15, 0xe8, 0x7a, 0x52, 0xf4, 0xb2, - 0xad, 0x22, 0x71, 0xe4, 0xb8, 0xb0, 0x14, 0x0a, 0xea, 0x5d, 0xac, 0x3f, 0x13, 0x40, 0x26, 0x2e, - 0xbe, 0x97, 0x64, 0x33, 0x68, 0x74, 0x1d, 0xe5, 0x9d, 0x8e, 0xaa, 0xe6, 0xaf, 0x68, 0x81, 0x48, - 0x64, 0xfa, 0x4b, 0x88, 0x89, 0x46, 0x54, 0xa7, 0x4d, 0xa2, 0xe4, 0x06, 0x2f, 0xd6, 0x88, 0x5b, - 0x75, 0x74, 0x9e, 0xe9, 0x8b, 0xda, 0xc5, 0x28, 0x52, 0xb5, 0x8b, 0x08, 0xfe, 0xb6, 0x00, 0x56, - 0x7a, 0x9b, 0x10, 0xc5, 0x7a, 0x75, 0xf4, 0x38, 0x59, 0x56, 0x3a, 0xaa, 0x9c, 0x87, 0xfb, 0xfd, - 0x10, 0x2f, 0xef, 0x0f, 0x45, 0xb6, 0xdc, 0x8d, 0xad, 0x11, 0x58, 0x27, 0x20, 0x9b, 0x0c, 0x05, - 0x11, 0x68, 0x39, 0x16, 0x0f, 0xca, 0xb7, 0x3a, 0xea, 0xbb, 0xf9, 0x95, 0xae, 0xed, 0x3e, 0x59, - 0xa0, 0x6f, 0x35, 0x39, 0x1d, 0x53, 0x99, 0x89, 0x47, 0x92, 0x88, 0xde, 0xbf, 0x16, 0x22, 0x8a, - 0x83, 0x9b, 0x11, 0x51, 0x7c, 0xed, 0xcd, 0xaa, 0x86, 0xf2, 0x9d, 0x8e, 0xba, 0x9d, 0xef, 0x61, - 0xf3, 0x15, 0x20, 0xab, 0xf2, 0x8c, 0x54, 0x69, 0x80, 0xfc, 0xda, 0x90, 0xd5, 0xc1, 0x06, 0xf8, - 0x72, 0x23, 0x06, 0xfc, 0x4c, 0x00, 0x4b, 0xfd, 0xb8, 0xaf, 0xbf, 0x59, 0xbd, 0x56, 0xde, 0xea, - 0xa8, 0x1b, 0xf9, 0xe5, 0xfd, 0x01, 0x70, 0xb3, 0xfb, 0xc3, 0x51, 0xa6, 0xcd, 0x24, 0xba, 0xf7, - 0xc1, 0xb2, 0x9f, 0x03, 0xac, 0x13, 0xe2, 0x38, 0x7a, 0x8d, 0x1c, 0xd2, 0x96, 0x4d, 0x32, 0x6f, - 0xb3, 0x32, 0xa6, 0x3c, 0xd5, 0x51, 0xc7, 0xff, 0x20, 0x25, 0x88, 0xda, 0x12, 0xa7, 0x79, 0x10, - 0x90, 0x3c, 0x6a, 0xd9, 0x24, 0xfb, 0xaf, 0x02, 0x98, 0x0c, 0xaa, 0x45, 0x08, 0xc6, 0x4d, 0x6c, - 0x10, 0xbf, 0x5a, 0xd4, 0xf8, 0x37, 0xbc, 0x08, 0x26, 0xb1, 0x61, 0x79, 0x26, 0xcd, 0xa4, 0x78, - 0xfa, 0x0f, 0x46, 0xd0, 0x00, 0x29, 0xeb, 0x98, 0x17, 0x65, 0x0b, 0x8a, 0xfa, 0xba, 0xd6, 0x17, - 0x77, 0x08, 0xb1, 0xb9, 0x7b, 0x67, 0x3b, 0xea, 0x25, 0x65, 0x25, 0x1c, 0xc6, 0x8d, 0x4d, 0x59, - 0xc7, 0xb9, 0x35, 0x30, 0x1d, 0x2e, 0xc2, 0x19, 0x30, 0x71, 0x47, 0xfd, 0xf4, 0xe1, 0x6e, 0x7a, - 0x0c, 0x4e, 0x83, 0xf1, 0x47, 0xda, 0x17, 0xbb, 0x69, 0xa1, 0x74, 0xa9, 0xa3, 0x5e, 0x50, 0x20, - 0x4c, 0x9f, 0xa1, 0x9c, 0x75, 0x9c, 0x2b, 0xa1, 0x1c, 0x9b, 0xcf, 0xa1, 0x76, 0x56, 0x07, 0xf3, - 0xb1, 0x1c, 0x01, 0xd3, 0x40, 0x3c, 0x26, 0xad, 0xc0, 0x48, 0xf6, 0x09, 0xcb, 0x60, 0xc2, 0x0f, - 0x54, 0xa9, 0xd7, 0x28, 0x60, 0x7c, 0xd6, 0x52, 0xea, 0x96, 0x90, 0xdd, 0x01, 0x17, 0x07, 0xa7, - 0x89, 0x01, 0x3a, 0x2f, 0x44, 0x75, 0xce, 0x44, 0xa5, 0xfc, 0x72, 0x28, 0x25, 0x19, 0xf2, 0x07, - 0x48, 0xd9, 0x8f, 0x4a, 0x79, 0x93, 0xa2, 0xbb, 0xa7, 0xbf, 0xf4, 0xfb, 0xa9, 0x8e, 0xfa, 0x3b, - 0x29, 0xf0, 0xeb, 0x42, 0x7e, 0x59, 0x45, 0x15, 0x9d, 0x22, 0xab, 0x8e, 0x7a, 0x7d, 0xa2, 0xb2, - 0xb7, 0x67, 0xd2, 0x30, 0x7d, 0xb4, 0x50, 0xd5, 0x32, 0xec, 0xa6, 0x5e, 0xe5, 0xb7, 0x2a, 0xe8, - 0x9e, 0x10, 0x73, 0x3c, 0x44, 0x2d, 0x54, 0x65, 0xae, 0x88, 0x0c, 0x6c, 0xb6, 0x50, 0x9d, 0x60, - 0xea, 0x39, 0xc4, 0x65, 0xb2, 0x0e, 0xc2, 0x3c, 0xf2, 0xb5, 0xc0, 0x5b, 0x87, 0xaf, 0x85, 0x68, - 0xe1, 0xfd, 0xb5, 0x10, 0xab, 0xd4, 0xf3, 0x8f, 0xc1, 0xf5, 0x3b, 0xba, 0x59, 0x43, 0x96, 0x47, - 0x91, 0x61, 0x39, 0x04, 0xe1, 0x0a, 0xfb, 0xec, 0x6b, 0xa4, 0x8a, 0x0d, 0x4a, 0x6d, 0xb7, 0x24, - 0xcb, 0x47, 0x3a, 0x6d, 0x78, 0x95, 0x62, 0xd5, 0x32, 0x64, 0xb6, 0x19, 0x05, 0x52, 0xb5, 0xdc, - 0x96, 0x4b, 0x49, 0x30, 0x0c, 0xf6, 0x46, 0xd9, 0x82, 0xca, 0x19, 0xca, 0x31, 0xfd, 0xcc, 0x59, - 0xd6, 0xab, 0xf5, 0xcd, 0xf7, 0x36, 0xc8, 0x46, 0x61, 0xab, 0xb2, 0xb5, 0x55, 0xd8, 0xba, 0xb5, - 0x59, 0x2b, 0xe0, 0x8d, 0x77, 0x6f, 0x17, 0xde, 0xdd, 0xaa, 0xe1, 0x4a, 0xad, 0xfe, 0x3e, 0xb9, - 0xb5, 0xb1, 0x95, 0x43, 0xed, 0xf2, 0x7c, 0x58, 0x13, 0x71, 0x70, 0xb9, 0xff, 0x99, 0x06, 0x99, - 0x24, 0x92, 0x30, 0xc8, 0xc0, 0xdb, 0xe0, 0x32, 0xaf, 0x3a, 0xbb, 0x41, 0x2f, 0xda, 0xcd, 0x08, - 0x48, 0x94, 0x52, 0xda, 0x45, 0x46, 0x10, 0x32, 0xdc, 0xe9, 0xb5, 0x2b, 0x1f, 0x80, 0x6c, 0x9c, - 0x35, 0xd6, 0xbc, 0xb0, 0x06, 0x4b, 0xd0, 0x2e, 0x45, 0x79, 0x77, 0x22, 0x8d, 0x4c, 0x9f, 0xde, - 0x68, 0x6d, 0x28, 0x22, 0x51, 0x12, 0xe3, 0x7a, 0xf7, 0x7a, 0x65, 0x62, 0x9f, 0xde, 0x58, 0xc3, - 0x33, 0x8e, 0x44, 0x69, 0x3c, 0xae, 0xf7, 0x8b, 0x48, 0x8d, 0x39, 0x48, 0x6f, 0xb7, 0x6c, 0x9d, - 0x40, 0xa2, 0x34, 0xd1, 0xa7, 0x37, 0xac, 0x60, 0xbf, 0x0f, 0xae, 0x24, 0xb6, 0x2a, 0x56, 0x18, - 0x4f, 0x22, 0x51, 0x9a, 0xd4, 0x32, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0x83, 0xd9, 0x23, 0x6d, 0x98, - 0x28, 0x4d, 0x0d, 0x60, 0x0f, 0xb5, 0xbf, 0x0f, 0x32, 0x71, 0xf6, 0x48, 0x63, 0x35, 0x8d, 0x44, - 0x69, 0x5a, 0x5b, 0x89, 0xf2, 0x96, 0xbb, 0x4d, 0x56, 0xdf, 0x76, 0xc5, 0x4a, 0xcd, 0x19, 0x5e, - 0x5a, 0xc7, 0xb6, 0x2b, 0x5e, 0x5e, 0x27, 0xb6, 0x2b, 0xda, 0x8c, 0x01, 0x24, 0x4a, 0x73, 0xf1, - 0xed, 0x2a, 0xf7, 0x1a, 0xb3, 0x81, 0xc7, 0xd4, 0x35, 0x77, 0x16, 0x89, 0xd2, 0x7c, 0xff, 0x31, - 0x85, 0xd6, 0x92, 0xa4, 0xb5, 0x91, 0x42, 0x6d, 0xee, 0x35, 0x0a, 0xb5, 0xd8, 0xde, 0xf4, 0x8a, - 0xb5, 0x8f, 0xc0, 0x6a, 0x62, 0x6f, 0xe2, 0x87, 0x32, 0x8f, 0x44, 0x69, 0x51, 0xbb, 0x1c, 0xdb, - 0x9d, 0x58, 0x7f, 0x34, 0x44, 0x40, 0xd7, 0x29, 0x16, 0x90, 0x28, 0xa5, 0x07, 0x09, 0x18, 0xea, - 0xcc, 0xb1, 0x3e, 0x6a, 0x11, 0x89, 0xd2, 0x52, 0xe2, 0x74, 0x22, 0xbb, 0x34, 0x90, 0x39, 0xd2, - 0xa9, 0x89, 0x12, 0xec, 0x67, 0x0e, 0x34, 0x97, 0x1a, 0x1d, 0x95, 0x28, 0x55, 0x88, 0xcf, 0x50, - 0x6e, 0x98, 0x63, 0xe5, 0x4a, 0xe8, 0x07, 0xd4, 0xf1, 0xc8, 0x4d, 0xe4, 0xff, 0xbf, 0x8e, 0x9b, - 0x6e, 0x30, 0x78, 0x7a, 0x33, 0xc9, 0x16, 0xc1, 0xcd, 0xf8, 0x36, 0x6e, 0x22, 0xe5, 0x26, 0xda, - 0x7c, 0x8a, 0xda, 0xb9, 0x2c, 0x18, 0x2f, 0x5b, 0xb5, 0xd6, 0xa0, 0xcc, 0x9d, 0xfb, 0x0a, 0x2c, - 0x06, 0xed, 0xeb, 0xff, 0xd7, 0x69, 0x83, 0x93, 0x2d, 0x80, 0x54, 0xf8, 0x18, 0xa4, 0xa5, 0x74, - 0x16, 0xa2, 0xc6, 0x6b, 0x98, 0xe2, 0x20, 0x7b, 0xbc, 0x7d, 0xee, 0xb9, 0x33, 0x21, 0x1a, 0x67, - 0xc9, 0xfd, 0x54, 0x00, 0x8b, 0x5f, 0xd8, 0x35, 0x4c, 0xc9, 0x63, 0x45, 0x23, 0x3f, 0xf2, 0x88, - 0x4b, 0xe1, 0x36, 0x10, 0x71, 0xc5, 0x07, 0x31, 0xab, 0x6c, 0x8c, 0x9c, 0x8b, 0x34, 0xc6, 0x0d, - 0x3f, 0x00, 0xb3, 0x1e, 0x97, 0xcb, 0x5f, 0x0d, 0x03, 0x68, 0xfd, 0x4d, 0xc8, 0x1d, 0x9d, 0x34, - 0x6b, 0x9f, 0x61, 0xf7, 0x58, 0x03, 0x3e, 0x39, 0xfb, 0xce, 0x23, 0x30, 0x1b, 0xf1, 0x4d, 0x56, - 0x1e, 0x3c, 0xd9, 0xd5, 0x1e, 0xa4, 0xc7, 0xe0, 0x14, 0x10, 0x1f, 0xec, 0xef, 0xa6, 0x05, 0xe5, - 0x2f, 0x11, 0xb8, 0x94, 0x54, 0xfc, 0x90, 0x38, 0x27, 0x7a, 0x95, 0xc0, 0xff, 0x10, 0xc1, 0xe4, - 0xb6, 0xc3, 0xf6, 0x1c, 0x8e, 0x8e, 0x3e, 0x3b, 0x3a, 0x4b, 0xee, 0xbf, 0x53, 0xbf, 0xfa, 0x4f, - 0xff, 0xfe, 0xd3, 0xd4, 0x37, 0xa9, 0xdc, 0x7f, 0xa6, 0xe4, 0x93, 0x8d, 0xf0, 0x85, 0x76, 0xd0, - 0xfb, 0xac, 0x7c, 0x16, 0x49, 0x1f, 0x6d, 0xf9, 0x2c, 0x9a, 0x11, 0xda, 0xf2, 0x59, 0xc4, 0x3b, - 0xdb, 0xb2, 0x4b, 0x6c, 0xec, 0x60, 0x6a, 0x39, 0xf2, 0x99, 0x17, 0x5b, 0x38, 0x8b, 0x78, 0x52, - 0x5b, 0x3e, 0x8b, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xb9, 0x6b, 0x5b, 0x3e, 0x8b, 0xc6, 0xb6, - 0xef, 0xbb, 0xd4, 0xb1, 0x1d, 0x52, 0xd7, 0x4f, 0xe5, 0x7c, 0xdb, 0x57, 0x12, 0x61, 0x73, 0x93, - 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xac, 0x47, 0x6d, 0xcb, 0x67, 0xbd, 0x58, - 0xd5, 0x96, 0xcf, 0x12, 0x6f, 0x3a, 0x8c, 0x73, 0xe0, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, 0xb7, - 0xe1, 0x1f, 0x09, 0x00, 0xf8, 0x07, 0xce, 0xaf, 0xc7, 0xb7, 0x73, 0xe8, 0x79, 0x7e, 0xe6, 0xd7, - 0x73, 0x6b, 0xe7, 0x9c, 0x78, 0x49, 0xc8, 0xc3, 0x5f, 0x02, 0x93, 0x9f, 0x5a, 0xd6, 0xb1, 0x67, - 0xc3, 0xc5, 0xa2, 0xeb, 0x55, 0x94, 0xe2, 0x5e, 0x2d, 0xb8, 0xd3, 0xaf, 0xa3, 0xb9, 0xc8, 0x35, - 0x4b, 0xf0, 0xbb, 0xe7, 0xfa, 0x1a, 0xab, 0x8b, 0xda, 0xf0, 0x37, 0x04, 0x30, 0xe9, 0xdf, 0xf1, - 0xd7, 0xd9, 0x9a, 0x21, 0x4f, 0x45, 0xb9, 0x0d, 0x8e, 0xe2, 0x7b, 0xd9, 0x57, 0x44, 0xc1, 0xb6, - 0xe1, 0x6f, 0x05, 0x30, 0x1d, 0x06, 0x1b, 0xb8, 0x7e, 0x2e, 0x94, 0x44, 0x5c, 0x1a, 0x8a, 0xe4, - 0x19, 0x47, 0x52, 0xcb, 0xe6, 0xe5, 0x13, 0xe5, 0xe5, 0x48, 0x70, 0x85, 0x14, 0x7d, 0x34, 0x2c, - 0x46, 0x3d, 0xd9, 0x50, 0x46, 0x65, 0x81, 0x7f, 0x28, 0x80, 0xcc, 0x01, 0xa6, 0xd5, 0x06, 0x0b, - 0xc6, 0xdd, 0xe0, 0xb5, 0x67, 0x72, 0xc7, 0xfb, 0xf9, 0x99, 0xf4, 0x1e, 0x37, 0x69, 0x5d, 0xf9, - 0x9e, 0x7c, 0xa2, 0xe0, 0x57, 0x05, 0x28, 0xe4, 0xe1, 0x9f, 0x08, 0x60, 0x72, 0x87, 0x34, 0x09, - 0x25, 0xfd, 0x9e, 0x36, 0x4c, 0x97, 0xd3, 0x51, 0xd5, 0xca, 0x0d, 0xb0, 0x00, 0x80, 0x6a, 0xeb, - 0xf7, 0x49, 0x4b, 0xf5, 0x68, 0x03, 0x8e, 0x81, 0x4b, 0x60, 0xf2, 0x01, 0xfb, 0x54, 0xe0, 0x3c, - 0x18, 0x77, 0x08, 0xae, 0x81, 0x89, 0xe7, 0x8e, 0x4e, 0xc9, 0xb3, 0x0b, 0x60, 0xe1, 0xb4, 0xa0, - 0x3b, 0x0e, 0x03, 0xe1, 0xea, 0x95, 0x26, 0x81, 0x29, 0x24, 0xf8, 0x2e, 0x99, 0x7f, 0x55, 0x97, - 0xfc, 0x37, 0x01, 0x4c, 0xdf, 0x25, 0xf4, 0x73, 0x8f, 0x38, 0xad, 0x9f, 0xa7, 0x53, 0xfe, 0x44, - 0xe8, 0xa8, 0x8f, 0x72, 0xfb, 0x60, 0x75, 0x50, 0xb3, 0xd1, 0x55, 0x38, 0x62, 0x93, 0xf1, 0xa5, - 0x50, 0x19, 0xe3, 0xf6, 0x15, 0xe1, 0xcd, 0xf3, 0xec, 0xfb, 0x11, 0x53, 0x10, 0x5a, 0xf9, 0x93, - 0x09, 0x90, 0xbe, 0x4b, 0x68, 0x58, 0x5b, 0xf8, 0xca, 0x6f, 0x8f, 0x9e, 0x50, 0x03, 0xfe, 0xec, - 0xeb, 0xb3, 0xe6, 0x7e, 0x3c, 0xce, 0x2d, 0xf8, 0x2f, 0x11, 0x7e, 0x23, 0x9e, 0x63, 0x43, 0xb7, - 0x60, 0x09, 0x42, 0xf3, 0xa0, 0xc6, 0xa7, 0x9d, 0x5c, 0x4b, 0xe4, 0xb1, 0xa1, 0x9d, 0x4b, 0xdf, - 0x9a, 0xf7, 0xb2, 0xc5, 0x78, 0x7e, 0x79, 0x49, 0x6f, 0x31, 0x78, 0x75, 0x28, 0x6f, 0x2c, 0x23, - 0x0e, 0xaf, 0xfd, 0xfb, 0xf9, 0x7a, 0xb5, 0xfd, 0x40, 0x43, 0x86, 0x2a, 0xec, 0x4f, 0x78, 0x43, - 0x0a, 0xea, 0x21, 0xcb, 0x43, 0xed, 0x74, 0x5f, 0xa6, 0x35, 0x96, 0x90, 0xe1, 0xbf, 0x88, 0x60, - 0x7c, 0xb7, 0xda, 0xb0, 0xe0, 0xb0, 0xdf, 0x61, 0x5c, 0xaf, 0x52, 0xf4, 0x5b, 0x9b, 0x30, 0x64, - 0xbc, 0x32, 0x65, 0xee, 0x7f, 0x53, 0x1d, 0xf5, 0xf7, 0x52, 0x60, 0x8e, 0x54, 0x1b, 0x16, 0x72, - 0xfd, 0x42, 0x0c, 0x4c, 0xf3, 0x91, 0x63, 0x57, 0xe1, 0xd2, 0x43, 0xcf, 0x30, 0xb0, 0xd3, 0x2a, - 0xa1, 0xdd, 0x60, 0x2a, 0x9b, 0xde, 0xe9, 0x3d, 0x0e, 0xf1, 0xd9, 0xdc, 0x0e, 0x80, 0xf1, 0x6b, - 0xcb, 0xd1, 0x8e, 0x78, 0x59, 0xef, 0x3d, 0x06, 0xe2, 0xbb, 0xeb, 0x9b, 0xf0, 0x01, 0x78, 0x4f, - 0x23, 0xd4, 0x73, 0x4c, 0x52, 0x43, 0xcf, 0x1b, 0xc4, 0x44, 0xb4, 0x41, 0x90, 0x43, 0x5c, 0xcb, - 0x73, 0xaa, 0x04, 0xe9, 0x2e, 0xa2, 0xc4, 0xb0, 0x2d, 0x07, 0x3b, 0x7a, 0xb3, 0x85, 0x3c, 0x13, - 0x9f, 0x60, 0xbd, 0x89, 0x2b, 0x4d, 0x52, 0xcc, 0xaf, 0x80, 0xe9, 0xd3, 0x82, 0xe9, 0x19, 0x15, - 0xe2, 0xc0, 0x99, 0xa5, 0x31, 0xfe, 0xdf, 0x2f, 0x7c, 0x7c, 0xef, 0x03, 0x20, 0x6e, 0xad, 0x6f, - 0xc1, 0x2d, 0x90, 0x7f, 0x89, 0xdc, 0x9a, 0x45, 0x5c, 0x64, 0x5a, 0x14, 0x91, 0x53, 0xdd, 0xa5, - 0x45, 0x38, 0x09, 0xf8, 0x83, 0x1d, 0xbf, 0x7b, 0x4f, 0xcf, 0x8f, 0x1e, 0x6c, 0xbf, 0xe4, 0x33, - 0xff, 0xbc, 0x9e, 0x5c, 0xce, 0xa5, 0xa3, 0xd9, 0x89, 0xad, 0x95, 0xfc, 0xf7, 0x9d, 0x27, 0x10, - 0xf6, 0x2d, 0xc1, 0xbf, 0x10, 0xc0, 0xdc, 0x0e, 0x21, 0x36, 0xff, 0x15, 0x8b, 0x4d, 0x7c, 0x3b, - 0x65, 0xd0, 0x47, 0xdc, 0xb6, 0xdb, 0xb9, 0xad, 0x73, 0x23, 0x7f, 0xec, 0x07, 0xf2, 0x22, 0xeb, - 0x6d, 0x78, 0xca, 0x52, 0x01, 0xd8, 0xb7, 0xca, 0xba, 0x59, 0xd3, 0xcd, 0x23, 0x17, 0x5e, 0xee, - 0x0b, 0xec, 0x3b, 0xc1, 0xdf, 0x0e, 0x0c, 0x8d, 0xf9, 0x63, 0xf0, 0x31, 0x98, 0x7a, 0xa4, 0x1b, - 0xc4, 0xf2, 0x28, 0x1c, 0x42, 0x34, 0x94, 0xf9, 0x0a, 0x87, 0xbf, 0x02, 0x97, 0xa3, 0xfb, 0x49, - 0x03, 0x61, 0x0d, 0x90, 0xde, 0x75, 0x1c, 0xcb, 0x61, 0xb9, 0x7e, 0x87, 0x50, 0xac, 0x37, 0xdd, - 0x91, 0x15, 0x5c, 0xe7, 0x0a, 0xde, 0x82, 0xab, 0xb1, 0x03, 0x63, 0x52, 0x9f, 0xeb, 0xb4, 0x51, - 0x0b, 0xa4, 0xfe, 0xa6, 0x00, 0xe0, 0x5d, 0x42, 0x93, 0x8d, 0xde, 0xf9, 0x05, 0x45, 0x82, 0x63, - 0x28, 0x8c, 0x77, 0x38, 0x8c, 0xab, 0xb9, 0xcb, 0x51, 0x18, 0x0c, 0x41, 0xc5, 0xaa, 0xb5, 0xe4, - 0x33, 0x56, 0x3e, 0xf0, 0x86, 0x10, 0xfe, 0x9a, 0x00, 0x96, 0x0e, 0x2c, 0x97, 0x32, 0x89, 0x9c, - 0x95, 0x03, 0x79, 0xb5, 0x9e, 0x72, 0xa8, 0x76, 0x99, 0x6b, 0xbf, 0x91, 0xbb, 0x1e, 0xd5, 0x6e, - 0x5b, 0x2e, 0x65, 0x08, 0xf8, 0xef, 0x92, 0x3e, 0x8c, 0xae, 0x53, 0xfc, 0x9d, 0x00, 0x96, 0xb7, - 0x1b, 0xa4, 0x7a, 0x1c, 0xe6, 0xec, 0x03, 0xec, 0x60, 0xc3, 0xfd, 0x96, 0x7c, 0xfa, 0x2e, 0x87, - 0xab, 0xc2, 0x8f, 0xce, 0xf3, 0x69, 0x9b, 0xa3, 0x92, 0x8f, 0x08, 0x1d, 0xe8, 0xde, 0xf0, 0x1f, - 0x04, 0x70, 0x81, 0x9b, 0xc1, 0x76, 0xf4, 0xdb, 0xb7, 0xe3, 0x73, 0x6e, 0xc7, 0xfd, 0x5c, 0xe9, - 0x15, 0xed, 0x60, 0x27, 0x12, 0xef, 0x10, 0xdb, 0xa5, 0xf8, 0xdf, 0xb5, 0x64, 0xff, 0x46, 0xe8, - 0xa8, 0x7f, 0x25, 0xc0, 0xfa, 0x90, 0xde, 0x3b, 0xfa, 0xe2, 0x8f, 0x0a, 0x05, 0xf4, 0xbc, 0xa1, - 0x57, 0x1b, 0xc8, 0x6d, 0x58, 0x5e, 0xb3, 0xc6, 0xe3, 0x62, 0x85, 0x20, 0xcf, 0x25, 0x35, 0xa4, - 0x9b, 0xc8, 0x6e, 0xe2, 0x2a, 0x41, 0x56, 0x9d, 0x47, 0xd0, 0x9a, 0x55, 0xf5, 0x0c, 0x62, 0xfa, - 0x1d, 0x1d, 0xaa, 0x5a, 0x06, 0x1b, 0x5c, 0xcd, 0x7e, 0x0e, 0xd6, 0x06, 0x55, 0x72, 0x2c, 0xbe, - 0x85, 0xdd, 0xfe, 0xa8, 0x2f, 0xc6, 0xcf, 0xc0, 0x85, 0x2a, 0x36, 0x48, 0x73, 0x1b, 0xbb, 0x24, - 0x90, 0xc1, 0x5a, 0x53, 0xa8, 0x81, 0x09, 0xff, 0x57, 0xef, 0x51, 0x6f, 0xf8, 0x65, 0xbe, 0xcb, - 0xcb, 0x70, 0x29, 0x76, 0xc3, 0xd9, 0x92, 0xf2, 0x43, 0xb0, 0xaa, 0x9a, 0x16, 0x6d, 0x10, 0x27, - 0xd0, 0xc4, 0x6e, 0x55, 0x24, 0xda, 0x7d, 0x18, 0x8b, 0x7d, 0xa3, 0x2a, 0x1e, 0x2b, 0xff, 0xf9, - 0x4c, 0x47, 0xfd, 0xe3, 0x19, 0xf8, 0x8d, 0x00, 0x96, 0x55, 0x54, 0xf6, 0xdf, 0xf8, 0x23, 0xe7, - 0xff, 0x25, 0xb8, 0x70, 0xa4, 0x1d, 0x6c, 0x17, 0xee, 0xfa, 0xa6, 0x23, 0xdb, 0xb1, 0x9e, 0x91, - 0x2a, 0x1d, 0x75, 0xcb, 0xb2, 0x69, 0xd3, 0x32, 0xc9, 0xc7, 0x81, 0x69, 0x8c, 0x3a, 0xff, 0x43, - 0x70, 0xa1, 0xfc, 0x70, 0x07, 0x6d, 0x16, 0xb6, 0x9b, 0xd8, 0x73, 0x09, 0xfa, 0x54, 0xaf, 0x12, - 0xd3, 0x25, 0xf0, 0xce, 0x68, 0x92, 0xe5, 0x4a, 0xd3, 0xaa, 0xc8, 0x06, 0x76, 0x29, 0x71, 0xe4, - 0x4f, 0xf7, 0xb6, 0x77, 0xf7, 0x1f, 0xee, 0x16, 0xe9, 0x29, 0x55, 0xc4, 0x8d, 0xe2, 0x7a, 0x09, - 0x81, 0x95, 0xd3, 0x82, 0x6b, 0x19, 0x84, 0x5b, 0xd3, 0xfb, 0x82, 0x53, 0xd9, 0x89, 0x16, 0xae, - 0xd5, 0x70, 0x5e, 0x14, 0x52, 0xe3, 0x4a, 0x1a, 0xdb, 0xfe, 0x6f, 0x17, 0xba, 0x65, 0xca, 0xcf, - 0x5c, 0xcb, 0x54, 0x2e, 0x46, 0x67, 0x4e, 0x0b, 0x75, 0xcb, 0x2a, 0x18, 0xba, 0x41, 0x4a, 0x7d, - 0x94, 0xa5, 0x21, 0x94, 0xda, 0x01, 0x4b, 0xf6, 0x9b, 0x70, 0x0f, 0xdc, 0xed, 0x4f, 0xf6, 0x9e, - 0x4b, 0x9c, 0x5e, 0xa2, 0x6f, 0xe0, 0x13, 0x82, 0x6c, 0xe2, 0x18, 0xba, 0xeb, 0x32, 0xd7, 0xa5, - 0x16, 0xc2, 0xd5, 0x2a, 0x71, 0xdd, 0x58, 0x61, 0x50, 0xd4, 0xde, 0xa0, 0x7c, 0x98, 0xd2, 0x3e, - 0x01, 0xe2, 0xd6, 0xc6, 0x2d, 0xa8, 0x82, 0xf9, 0xbd, 0x77, 0x0c, 0x84, 0x11, 0x25, 0xd8, 0xb6, - 0x68, 0x11, 0xae, 0x83, 0x62, 0x76, 0xa4, 0x67, 0xde, 0x27, 0xbf, 0x2b, 0x82, 0x45, 0x30, 0x53, - 0xc6, 0xae, 0x5e, 0xe5, 0x7d, 0x5e, 0x6a, 0x5a, 0x00, 0x7f, 0x2a, 0xc4, 0x5a, 0xbf, 0x9f, 0x09, - 0xd3, 0xa9, 0xec, 0xcc, 0x97, 0x05, 0xf5, 0x60, 0xaf, 0x70, 0x9f, 0xb4, 0x50, 0xea, 0x9e, 0x04, - 0x56, 0x4f, 0x0b, 0xd8, 0xc0, 0x2f, 0x2c, 0xb3, 0x80, 0x6d, 0x3d, 0x50, 0x55, 0xc0, 0x1e, 0x6d, - 0xd0, 0x96, 0x4d, 0xe0, 0x74, 0x76, 0xd2, 0x62, 0x03, 0xe5, 0xde, 0x2f, 0x82, 0xb7, 0x86, 0x51, - 0x5a, 0x8e, 0xfe, 0x82, 0x38, 0xf0, 0xc3, 0xfc, 0xff, 0x03, 0x8b, 0x60, 0x9c, 0xf3, 0x4d, 0x65, - 0x27, 0xa8, 0x75, 0x4c, 0x4c, 0x70, 0x03, 0xac, 0xf6, 0x48, 0x34, 0xe2, 0x7a, 0x4d, 0xfa, 0x88, - 0x36, 0xf7, 0xcc, 0x87, 0xa4, 0x6a, 0x99, 0x35, 0xb7, 0x5b, 0x86, 0xed, 0x7f, 0x0c, 0xfe, 0x59, - 0xe8, 0xf6, 0xa5, 0x7f, 0x2f, 0x4c, 0x8b, 0xd2, 0xb8, 0x72, 0x2d, 0xf4, 0xb9, 0x88, 0x83, 0xca, - 0x1c, 0x8f, 0xdc, 0x15, 0x5a, 0x5a, 0x1b, 0x4e, 0xc4, 0x21, 0x94, 0x7f, 0x05, 0x64, 0xfd, 0x36, - 0x17, 0xc2, 0xbb, 0x0e, 0x36, 0xa9, 0x8b, 0xd8, 0x20, 0x38, 0x4b, 0xb0, 0x1a, 0x34, 0xbf, 0x70, - 0x39, 0x58, 0xe4, 0xa3, 0x70, 0x75, 0x1b, 0x4c, 0xe0, 0x9a, 0xa1, 0x9b, 0xb0, 0x14, 0x63, 0x35, - 0x6b, 0x31, 0x32, 0xee, 0x1a, 0x8c, 0x4c, 0x77, 0x29, 0x2b, 0x69, 0x4e, 0x08, 0xd2, 0xcd, 0xba, - 0xe5, 0x18, 0xdc, 0xfb, 0x2a, 0x6b, 0x60, 0x3e, 0x7a, 0x30, 0x63, 0xc9, 0x86, 0xbc, 0x72, 0x63, - 0x68, 0x4b, 0x9e, 0x24, 0x75, 0xf6, 0xc0, 0xa5, 0xcf, 0x7a, 0xd1, 0x32, 0x1a, 0x03, 0x46, 0xbd, - 0xfb, 0x2f, 0xae, 0x00, 0x78, 0x5a, 0x88, 0xce, 0xb0, 0x4b, 0x02, 0x27, 0xb2, 0x62, 0x05, 0x3b, - 0x2f, 0x24, 0x70, 0x29, 0xb1, 0x58, 0xc1, 0x2f, 0x0a, 0x4d, 0xdd, 0xa5, 0x70, 0x5e, 0x99, 0x05, - 0x13, 0x59, 0xd1, 0x32, 0x09, 0x48, 0x21, 0xe1, 0xc9, 0x4c, 0xd7, 0x1d, 0x2b, 0x93, 0x3c, 0x8c, - 0x6d, 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x94, 0x65, 0x6b, 0xb3, 0xd8, 0x2a, 0x00, 0x00, + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71) +} + +var fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71 = []byte{ + // 3551 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, + 0x7e, 0xd7, 0x72, 0x25, 0x59, 0x1a, 0x7d, 0x8f, 0x2c, 0x5b, 0xa6, 0x95, 0x68, 0x4c, 0x3b, 0x2f, + 0x6b, 0x3e, 0x93, 0x2b, 0xad, 0x94, 0xc4, 0x66, 0xfa, 0x92, 0x90, 0x92, 0xec, 0xc8, 0x4e, 0x64, + 0x65, 0xed, 0xb8, 0xa9, 0x5f, 0xfc, 0xd4, 0x21, 0x39, 0x14, 0xd7, 0xe2, 0xee, 0xec, 0xdb, 0x9d, + 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0x2d, 0xfa, 0xf1, 0x8a, 0x5e, + 0x8a, 0x5e, 0x8a, 0x9e, 0x0a, 0xf4, 0x54, 0xa0, 0xed, 0xa1, 0xb7, 0x1e, 0x5a, 0xa4, 0x40, 0xd1, + 0x43, 0x7b, 0x6a, 0xcf, 0xbd, 0x14, 0x08, 0xd0, 0x43, 0xdb, 0x87, 0x99, 0xdd, 0x25, 0x77, 0x97, + 0xa4, 0x65, 0xda, 0x0f, 0x49, 0x0e, 0xf1, 0xce, 0xcc, 0xff, 0xe3, 0xf7, 0x9f, 0xf9, 0xcf, 0xff, + 0x63, 0x28, 0xa0, 0x91, 0x13, 0x6c, 0xda, 0x0d, 0xe2, 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa1, + 0x5d, 0x56, 0xf1, 0x41, 0xd9, 0x60, 0x07, 0xb4, 0x76, 0x40, 0x8e, 0x89, 0xd3, 0x64, 0x75, 0xc3, + 0x3a, 0xcc, 0x0b, 0x1a, 0xb8, 0x7a, 0xe8, 0xd8, 0x95, 0xfc, 0x21, 0x66, 0xe4, 0x19, 0x6e, 0xe6, + 0x43, 0x01, 0xf9, 0x0e, 0x6b, 0x7a, 0xe5, 0x90, 0xd2, 0xc3, 0x06, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, + 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xb3, 0xa7, 0x51, 0xb0, 0x2a, 0x46, 0x65, 0xaf, 0xa6, + 0xd6, 0x0c, 0xd2, 0xa8, 0x1e, 0x98, 0xd8, 0x3d, 0x0a, 0x28, 0x2e, 0x27, 0x29, 0x88, 0x69, 0xb3, + 0x66, 0xb0, 0xf8, 0x66, 0x72, 0xb1, 0xea, 0x39, 0x42, 0x7e, 0xb0, 0xfe, 0x76, 0xc2, 0x22, 0x1b, + 0xb3, 0x3a, 0xb1, 0x3c, 0x53, 0x7c, 0x1c, 0xf0, 0xaf, 0x10, 0x47, 0x82, 0xd0, 0xf5, 0xca, 0xaa, + 0x49, 0x5c, 0x17, 0x1f, 0x92, 0x80, 0xe2, 0x4a, 0x2f, 0x85, 0x96, 0x20, 0x59, 0x4d, 0xa2, 0x61, + 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x20, 0xb8, 0x21, 0xfe, 0xa9, 0xe4, 0x0e, 0x89, 0x95, 0x73, + 0x9f, 0xe1, 0xc3, 0x43, 0xe2, 0xa8, 0xd4, 0x16, 0xfb, 0xd1, 0xbb, 0x37, 0x99, 0x7f, 0xba, 0x0c, + 0xe6, 0x8b, 0x25, 0x83, 0xdd, 0xaf, 0xed, 0x74, 0x76, 0x1d, 0x3e, 0x01, 0x33, 0xae, 0x61, 0x1d, + 0x36, 0xc8, 0x81, 0x45, 0x5c, 0x46, 0xaa, 0xcb, 0x97, 0x90, 0xa4, 0x4c, 0x69, 0x37, 0xf3, 0x67, + 0x9c, 0x43, 0x3e, 0x29, 0x29, 0xbf, 0x27, 0xf8, 0xf5, 0x69, 0x5f, 0x9c, 0x3f, 0x82, 0x75, 0x30, + 0xea, 0x79, 0x46, 0x75, 0x59, 0x42, 0x92, 0x32, 0x59, 0x7a, 0xd8, 0x2e, 0x7e, 0xf6, 0x23, 0x49, + 0xfa, 0x1d, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, + 0xb3, 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, + 0xb0, 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xa9, 0x5a, 0x83, 0x62, 0x76, + 0x70, 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, + 0xb7, 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, + 0x1d, 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0xe9, 0x2a, 0xf5, 0xca, 0x0d, 0x12, 0x08, 0x1b, + 0x45, 0x92, 0x22, 0xe9, 0x53, 0xfe, 0x9c, 0x4f, 0xb2, 0x0a, 0xa6, 0x0c, 0x8b, 0xbd, 0xbb, 0x19, + 0x50, 0x8c, 0x21, 0x49, 0x91, 0x75, 0x20, 0xa6, 0x3a, 0x32, 0xbc, 0x28, 0xc5, 0x38, 0x92, 0x94, + 0x51, 0x7d, 0xca, 0x8b, 0x90, 0xf8, 0x32, 0x36, 0xb4, 0x80, 0xe2, 0x1c, 0x92, 0x94, 0x31, 0x21, + 0x63, 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x13, 0x48, 0x52, + 0xc6, 0xf5, 0xe9, 0x60, 0x32, 0x4e, 0xd4, 0x91, 0x33, 0x89, 0x24, 0xe5, 0x5c, 0x40, 0x14, 0x4a, + 0x7a, 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd0, 0x27, 0xf9, 0x4c, 0x07, + 0xac, 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb8, 0x03, 0xe8, 0x53, 0xfe, 0x5c, 0x07, 0x6c, + 0xb9, 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0x65, 0x5a, 0x07, 0x62, 0x2a, 0x66, 0x70, 0x07, + 0xc6, 0x0c, 0x92, 0x94, 0x19, 0xdf, 0xe0, 0x10, 0xc5, 0x3d, 0x00, 0xf8, 0xad, 0x0b, 0x08, 0x66, + 0x91, 0xa4, 0xcc, 0x6a, 0x37, 0xce, 0x3c, 0xf9, 0x3d, 0xcf, 0x24, 0x8e, 0x51, 0xd9, 0xb1, 0x3c, + 0x53, 0x9f, 0xe4, 0xfc, 0xbe, 0xb0, 0x7d, 0x30, 0xd7, 0xb9, 0xc7, 0x81, 0xc4, 0x37, 0x85, 0x44, + 0x65, 0x80, 0xc4, 0xf0, 0xfa, 0xe7, 0xf7, 0x31, 0xab, 0x0b, 0x69, 0x33, 0x76, 0xf0, 0xe5, 0x4b, + 0x74, 0xc1, 0x05, 0xdf, 0x99, 0x0e, 0x92, 0x82, 0x57, 0x85, 0xe0, 0x0f, 0xce, 0x12, 0xfc, 0xa9, + 0x1f, 0x10, 0x42, 0xf9, 0x81, 0x8b, 0x76, 0xd4, 0x2d, 0x5a, 0xb1, 0xb1, 0xaf, 0xf4, 0x2d, 0x30, + 0xeb, 0xc6, 0xcf, 0x6f, 0x0e, 0x49, 0xca, 0x9c, 0x3e, 0xe3, 0xc6, 0x0e, 0xb0, 0x43, 0xd6, 0xf1, + 0x85, 0x79, 0x24, 0x29, 0xf3, 0x21, 0x59, 0xc4, 0xeb, 0xdc, 0xe8, 0x21, 0x2c, 0x20, 0x49, 0x59, + 0xd0, 0xa7, 0xdc, 0xc8, 0x21, 0x04, 0x24, 0x1d, 0x39, 0x10, 0x49, 0x0a, 0xf4, 0x49, 0x42, 0x29, + 0x1a, 0x58, 0x72, 0x88, 0x4d, 0x30, 0xdf, 0x8a, 0x98, 0x5f, 0x2c, 0x22, 0x59, 0x99, 0xd4, 0x17, + 0xc3, 0xc5, 0x07, 0x11, 0xff, 0xb8, 0x05, 0xa6, 0xa8, 0x45, 0x78, 0x92, 0xe0, 0x11, 0x7a, 0xf9, + 0xbc, 0x08, 0x4c, 0x17, 0xf2, 0x7e, 0x50, 0xcc, 0x87, 0x41, 0x31, 0xbf, 0xc3, 0x57, 0x3f, 0x1e, + 0xd1, 0x81, 0x20, 0x16, 0x23, 0x78, 0x15, 0x4c, 0xfb, 0xac, 0xbe, 0xae, 0xe5, 0x25, 0xee, 0x7d, + 0x1f, 0x8f, 0xe8, 0xbe, 0x40, 0x5f, 0x09, 0xfc, 0x12, 0x4c, 0x9a, 0xd8, 0x0e, 0x70, 0x5c, 0x10, + 0x41, 0xe3, 0xc3, 0xe1, 0x83, 0xc6, 0xa7, 0xd8, 0x16, 0x70, 0x77, 0x2c, 0xe6, 0x34, 0xf5, 0x09, + 0x33, 0x18, 0xc2, 0x13, 0xb0, 0x68, 0x62, 0xdb, 0x4e, 0xda, 0x7b, 0x51, 0xe8, 0xf9, 0xf8, 0x95, + 0xf4, 0xd8, 0xb1, 0xfd, 0xf1, 0x15, 0x2e, 0x98, 0xc9, 0xf9, 0x88, 0xe6, 0xc0, 0xf7, 0x7c, 0xcd, + 0xcb, 0xaf, 0xa7, 0xd9, 0xf7, 0xbc, 0x5e, 0xcd, 0x91, 0x79, 0x58, 0x00, 0xcb, 0x16, 0xb5, 0xb6, + 0xa8, 0x75, 0x4c, 0x2c, 0x9e, 0x79, 0x70, 0x63, 0x0f, 0x9b, 0x7e, 0x78, 0x5b, 0x4e, 0x8b, 0x00, + 0x30, 0x70, 0x1d, 0x6e, 0x81, 0xb9, 0x4e, 0x7a, 0x0b, 0x10, 0x5f, 0x16, 0x27, 0x9e, 0xee, 0x39, + 0xf1, 0x87, 0x21, 0x9d, 0x3e, 0xdb, 0x61, 0xf1, 0x85, 0x7c, 0x09, 0x3a, 0x9e, 0x14, 0xbd, 0x6c, + 0x2b, 0x48, 0x1e, 0x3a, 0x2e, 0x2c, 0x84, 0x82, 0xba, 0x17, 0xeb, 0x2f, 0x24, 0xb0, 0x1c, 0x17, + 0xdf, 0x4d, 0xb2, 0xcb, 0x68, 0x78, 0x1d, 0xa5, 0xed, 0x76, 0xb1, 0x98, 0xbd, 0xac, 0x07, 0x22, + 0x91, 0xe5, 0x2f, 0x21, 0x2e, 0x1a, 0x31, 0x83, 0x35, 0x88, 0x96, 0xe9, 0xbf, 0x58, 0x25, 0x6e, + 0xc5, 0x31, 0x44, 0xa6, 0xcf, 0xeb, 0x17, 0xa2, 0x48, 0x8b, 0x1d, 0x44, 0xf0, 0x77, 0x25, 0xb0, + 0xd4, 0xdd, 0x84, 0x28, 0xd6, 0x2b, 0xc3, 0xc7, 0xc9, 0x92, 0xd6, 0x2e, 0xaa, 0x59, 0xb8, 0xd7, + 0x0b, 0xf1, 0xd2, 0xde, 0x40, 0x64, 0x8b, 0x9d, 0xd8, 0x1a, 0x81, 0x75, 0x0c, 0xd2, 0xc9, 0x50, + 0x10, 0x81, 0x96, 0xe1, 0xf1, 0xa0, 0x74, 0xb3, 0x5d, 0x7c, 0x27, 0xbb, 0xd4, 0xb1, 0xdd, 0x27, + 0x0b, 0xf4, 0xad, 0x24, 0xa7, 0x63, 0x2a, 0x97, 0xe3, 0x91, 0x24, 0xa2, 0xf7, 0x6f, 0xa4, 0x88, + 0xe2, 0xe0, 0x66, 0x44, 0x14, 0x5f, 0x7d, 0xbd, 0xaa, 0xa1, 0x74, 0xbb, 0x5d, 0xdc, 0xca, 0x76, + 0xb1, 0xf9, 0x0a, 0x10, 0x2d, 0x3f, 0x25, 0x15, 0x16, 0x20, 0xbf, 0x3a, 0x60, 0xb5, 0xbf, 0x01, + 0xbe, 0xdc, 0x88, 0x01, 0x3f, 0x95, 0xc0, 0x42, 0x2f, 0xee, 0x6b, 0xaf, 0x57, 0xaf, 0x95, 0x36, + 0xdb, 0xc5, 0xf5, 0xec, 0xe2, 0x5e, 0x1f, 0xb8, 0xe9, 0xbd, 0xc1, 0x28, 0xe7, 0xad, 0x24, 0xba, + 0xf7, 0xc0, 0xa2, 0x9f, 0x03, 0xe8, 0x31, 0x71, 0x1c, 0xa3, 0x4a, 0x0e, 0x58, 0xd3, 0x26, 0xcb, + 0x6f, 0xf1, 0x32, 0xa6, 0x74, 0xae, 0x5d, 0x1c, 0xfd, 0xa3, 0x94, 0x24, 0xeb, 0x0b, 0x82, 0xe6, + 0x7e, 0x40, 0xf2, 0xb0, 0x69, 0x93, 0xf4, 0xbf, 0x4b, 0x60, 0x3c, 0xa8, 0x16, 0x21, 0x18, 0xb5, + 0xb0, 0x49, 0xfc, 0x6a, 0x51, 0x17, 0xdf, 0xf0, 0x02, 0x18, 0xc7, 0x26, 0xf5, 0x2c, 0xb6, 0x9c, + 0x12, 0xe9, 0x3f, 0x18, 0x41, 0x13, 0xa4, 0xe8, 0x91, 0x28, 0xca, 0x66, 0xb5, 0xe2, 0xab, 0x5a, + 0x9f, 0xdf, 0x26, 0xc4, 0x16, 0xee, 0x9d, 0x6e, 0x17, 0x2f, 0x6a, 0x4b, 0xe1, 0x30, 0x6e, 0x6c, + 0x8a, 0x1e, 0x65, 0x56, 0xc1, 0x44, 0xb8, 0x08, 0x27, 0xc1, 0xd8, 0xed, 0xe2, 0x27, 0x0f, 0x76, + 0xe6, 0x47, 0xe0, 0x04, 0x18, 0x7d, 0xa8, 0x7f, 0xbe, 0x33, 0x2f, 0x15, 0x2e, 0xb6, 0x8b, 0xe7, + 0x35, 0x08, 0xe7, 0x4f, 0x51, 0x86, 0x1e, 0x65, 0x0a, 0x28, 0xc3, 0xe7, 0x33, 0xa8, 0x95, 0x36, + 0xc0, 0x4c, 0x2c, 0x47, 0xc0, 0x79, 0x20, 0x1f, 0x91, 0x66, 0x60, 0x24, 0xff, 0x84, 0x25, 0x30, + 0xe6, 0x07, 0xaa, 0xd4, 0x2b, 0x14, 0x30, 0x3e, 0x6b, 0x21, 0x75, 0x53, 0x4a, 0x6f, 0x83, 0x0b, + 0xfd, 0xd3, 0x44, 0x1f, 0x9d, 0xe7, 0xa3, 0x3a, 0x27, 0xa3, 0x52, 0x7e, 0x35, 0x94, 0x92, 0x0c, + 0xf9, 0x7d, 0xa4, 0xec, 0x45, 0xa5, 0xbc, 0x4e, 0xd1, 0xdd, 0xd5, 0x5f, 0xf8, 0xc3, 0x54, 0xbb, + 0xf8, 0x7b, 0x29, 0xf0, 0x9b, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, + 0xa2, 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, + 0x15, 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, + 0x23, 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, + 0x29, 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, + 0xf5, 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, + 0x0b, 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, + 0x75, 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, + 0x67, 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, + 0xe6, 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, + 0xe4, 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x6f, 0x02, + 0x2c, 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, + 0x46, 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, + 0xe3, 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, + 0xf4, 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, + 0x1a, 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, + 0xeb, 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, + 0xc2, 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, + 0x86, 0xc9, 0xca, 0xb9, 0x3e, 0xec, 0xa1, 0xf6, 0xf7, 0xc0, 0x72, 0x9c, 0x3d, 0xd2, 0x58, 0x4d, + 0x20, 0x59, 0x99, 0xd0, 0x97, 0xa2, 0xbc, 0xa5, 0x4e, 0x93, 0xd5, 0xb3, 0x5d, 0xb1, 0x52, 0x73, + 0x52, 0x94, 0xd6, 0xb1, 0xed, 0x8a, 0x97, 0xd7, 0x89, 0xed, 0x8a, 0x36, 0x63, 0x00, 0xc9, 0xca, + 0x74, 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x42, 0xb2, 0x32, 0xd3, + 0x7b, 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x9b, 0x7e, 0x85, 0x42, 0x2d, 0xb6, 0x37, + 0xdd, 0x62, 0xed, 0x43, 0xb0, 0x92, 0xd8, 0x9b, 0xf8, 0xa1, 0xcc, 0x20, 0x59, 0x99, 0xd3, 0x2f, + 0xc5, 0x76, 0x27, 0xd6, 0x1f, 0x0d, 0x10, 0xd0, 0x71, 0x8a, 0x59, 0x24, 0x2b, 0xf3, 0xfd, 0x04, + 0x0c, 0x74, 0xe6, 0x58, 0x1f, 0x35, 0x87, 0x64, 0x65, 0x21, 0x71, 0x3a, 0x91, 0x5d, 0xea, 0xcb, + 0x1c, 0xe9, 0xd4, 0x64, 0x05, 0xf6, 0x32, 0x07, 0x9a, 0x0b, 0xf5, 0x76, 0x91, 0x68, 0x15, 0x88, + 0x4f, 0x51, 0x66, 0x90, 0x63, 0x65, 0x0a, 0xe8, 0xfb, 0xcc, 0xf1, 0xc8, 0x0d, 0xe4, 0xff, 0xbf, + 0x86, 0x1b, 0x6e, 0x30, 0x78, 0x72, 0x23, 0xc9, 0x16, 0xc1, 0xcd, 0xf9, 0xd6, 0x6f, 0x20, 0xed, + 0x06, 0xda, 0x78, 0x82, 0x5a, 0x99, 0x34, 0x18, 0x2d, 0xd1, 0x6a, 0xb3, 0x5f, 0xe6, 0xce, 0x7c, + 0x09, 0xe6, 0x82, 0xf6, 0xf5, 0x17, 0x0d, 0x56, 0x17, 0x64, 0xb3, 0x20, 0x15, 0x3e, 0x06, 0xe9, + 0x29, 0x83, 0x87, 0xa8, 0xd1, 0x2a, 0x66, 0x38, 0xc8, 0x1e, 0x6f, 0x9d, 0x79, 0xee, 0x5c, 0x88, + 0x2e, 0x58, 0x32, 0x3f, 0x91, 0xc0, 0xdc, 0xe7, 0x76, 0x15, 0x33, 0xf2, 0x48, 0xd3, 0xc9, 0x0f, + 0x3d, 0xe2, 0x32, 0xb8, 0x05, 0x64, 0x5c, 0xf6, 0x41, 0x4c, 0x69, 0xeb, 0x43, 0xe7, 0x22, 0x9d, + 0x73, 0xc3, 0xf7, 0xc1, 0x94, 0x27, 0xe4, 0x8a, 0x57, 0xc3, 0x00, 0x5a, 0x6f, 0x13, 0x72, 0xdb, + 0x20, 0x8d, 0xea, 0xa7, 0xd8, 0x3d, 0xd2, 0x81, 0x4f, 0xce, 0xbf, 0xb3, 0x08, 0x4c, 0x45, 0x7c, + 0x93, 0x97, 0x07, 0x8f, 0x77, 0xf4, 0xfb, 0xf3, 0x23, 0xf0, 0x1c, 0x90, 0xef, 0xef, 0xed, 0xcc, + 0x4b, 0x5a, 0x3b, 0x03, 0x2e, 0x26, 0x15, 0x3f, 0x20, 0xce, 0xb1, 0x51, 0x21, 0xf0, 0xbf, 0x64, + 0x30, 0xbe, 0xe5, 0xf0, 0x3d, 0x87, 0xc3, 0xa3, 0x4f, 0x0f, 0xcf, 0x92, 0xf9, 0xdf, 0xd4, 0xaf, + 0xff, 0xf3, 0x7f, 0xfe, 0x24, 0xf5, 0x75, 0x2a, 0xf3, 0xdf, 0x29, 0xf5, 0x78, 0x3d, 0x7c, 0xa1, + 0xed, 0xf7, 0x3e, 0xab, 0x9e, 0x46, 0xd2, 0x47, 0x4b, 0x3d, 0x8d, 0x66, 0x84, 0x96, 0x7a, 0x1a, + 0xf1, 0xce, 0x96, 0xea, 0x12, 0x1b, 0x3b, 0x98, 0x51, 0x47, 0x3d, 0xf5, 0x62, 0x0b, 0xa7, 0x11, + 0x4f, 0x6a, 0xa9, 0xa7, 0xb1, 0x0b, 0x15, 0x8e, 0x23, 0xeb, 0x5d, 0x77, 0x6d, 0xa9, 0xa7, 0xd1, + 0xd8, 0xf6, 0x3d, 0x97, 0x39, 0xb6, 0x43, 0x6a, 0xc6, 0x89, 0x9a, 0x6d, 0xf9, 0x4a, 0x22, 0x6c, + 0x6e, 0x52, 0x8e, 0x9b, 0x54, 0xe4, 0x26, 0x18, 0xe2, 0x20, 0x07, 0xf5, 0xa8, 0x2d, 0xf5, 0xb4, + 0x1b, 0xab, 0x5a, 0xea, 0x69, 0xe2, 0x4d, 0x87, 0x73, 0xf6, 0x7d, 0xec, 0x89, 0xf1, 0x45, 0x6a, + 0xf7, 0x16, 0xfc, 0x13, 0x09, 0x00, 0xff, 0xc0, 0xc5, 0xf5, 0xf8, 0x66, 0x0e, 0x3d, 0x2b, 0xce, + 0xfc, 0x5a, 0x66, 0xf5, 0x8c, 0x13, 0x2f, 0x48, 0x59, 0xf8, 0x2b, 0x60, 0xfc, 0x13, 0x4a, 0x8f, + 0x3c, 0x1b, 0xce, 0xe5, 0x5d, 0xaf, 0xac, 0xe5, 0x77, 0xab, 0xc1, 0x9d, 0x7e, 0x15, 0xcd, 0x79, + 0xa1, 0x59, 0x81, 0xdf, 0x39, 0xd3, 0xd7, 0x78, 0x5d, 0xd4, 0x82, 0xbf, 0x25, 0x81, 0x71, 0xff, + 0x8e, 0xbf, 0xca, 0xd6, 0x0c, 0x78, 0x2a, 0xca, 0xac, 0x0b, 0x14, 0xdf, 0x4d, 0xbf, 0x24, 0x0a, + 0xbe, 0x0d, 0x7f, 0x27, 0x81, 0x89, 0x30, 0xd8, 0xc0, 0xb5, 0x33, 0xa1, 0x24, 0xe2, 0xd2, 0x40, + 0x24, 0x4f, 0x05, 0x92, 0x6a, 0x3a, 0xab, 0x1e, 0x6b, 0x2f, 0x46, 0x82, 0xcb, 0x24, 0xef, 0xa3, + 0xe1, 0x31, 0xea, 0xf1, 0xba, 0x36, 0x2c, 0x0b, 0xfc, 0x63, 0x09, 0x2c, 0xef, 0x63, 0x56, 0xa9, + 0xf3, 0x60, 0xdc, 0x09, 0x5e, 0xbb, 0x96, 0x70, 0xbc, 0x9f, 0x9f, 0x49, 0xef, 0x0a, 0x93, 0xd6, + 0xb4, 0xef, 0xaa, 0xc7, 0x1a, 0x7e, 0x59, 0x80, 0x52, 0x16, 0xfe, 0x99, 0x04, 0xc6, 0xb7, 0x49, + 0x83, 0x30, 0xd2, 0xeb, 0x69, 0x83, 0x74, 0x39, 0xed, 0x62, 0xb1, 0x7c, 0x1d, 0xcc, 0x02, 0x50, + 0xb4, 0x8d, 0x7b, 0xa4, 0x59, 0xf4, 0x58, 0x1d, 0x8e, 0x80, 0x8b, 0x60, 0xfc, 0x3e, 0xff, 0xd4, + 0xe0, 0x0c, 0x18, 0x75, 0x08, 0xae, 0x82, 0xb1, 0x67, 0x8e, 0xc1, 0xc8, 0xd3, 0xf3, 0x60, 0xf6, + 0x24, 0x67, 0x38, 0x0e, 0x07, 0xe1, 0x1a, 0xe5, 0x06, 0x81, 0x29, 0x24, 0xf9, 0x2e, 0x99, 0x7d, + 0x59, 0x97, 0xfc, 0x0f, 0x09, 0x4c, 0xdc, 0x21, 0xec, 0x33, 0x8f, 0x38, 0xcd, 0x9f, 0xa7, 0x53, + 0xfe, 0x58, 0x6a, 0x17, 0x1f, 0x66, 0xf6, 0xc0, 0x4a, 0xbf, 0x66, 0xa3, 0xa3, 0x70, 0xc8, 0x26, + 0xe3, 0x0b, 0xa9, 0x3c, 0x22, 0xec, 0xcb, 0xc3, 0x1b, 0x67, 0xd9, 0xf7, 0x43, 0xae, 0x20, 0xb4, + 0xf2, 0xc7, 0x63, 0x60, 0xfe, 0x0e, 0x61, 0x61, 0x6d, 0xe1, 0x2b, 0xbf, 0x35, 0x7c, 0x42, 0x0d, + 0xf8, 0xd3, 0xaf, 0xce, 0x9a, 0xf9, 0xd1, 0xa8, 0xb0, 0xe0, 0x7f, 0x64, 0xf8, 0xb5, 0x7c, 0x86, + 0x0d, 0x9d, 0x82, 0x25, 0x08, 0xcd, 0xfd, 0x1a, 0x9f, 0x56, 0x72, 0x2d, 0x91, 0xc7, 0x06, 0x76, + 0x2e, 0x3d, 0x6b, 0xde, 0x8b, 0x16, 0xe3, 0xf9, 0xe5, 0x05, 0xbd, 0x45, 0xff, 0xd5, 0x81, 0xbc, + 0xb1, 0x8c, 0x38, 0xb8, 0xf6, 0xef, 0xe5, 0xeb, 0xd6, 0xf6, 0x7d, 0x0d, 0x19, 0xa8, 0xb0, 0x37, + 0xe1, 0x0d, 0x28, 0xa8, 0x07, 0x2c, 0x0f, 0xb4, 0xd3, 0x7d, 0x91, 0xd6, 0x58, 0x42, 0x86, 0xff, + 0x26, 0x83, 0xd1, 0x9d, 0x4a, 0x9d, 0xc2, 0x41, 0xbf, 0xc3, 0xb8, 0x5e, 0x39, 0xef, 0xb7, 0x36, + 0x61, 0xc8, 0x78, 0x69, 0xca, 0xcc, 0xff, 0xa7, 0xda, 0xc5, 0x3f, 0x48, 0x81, 0x69, 0x52, 0xa9, + 0x53, 0xe4, 0xfa, 0x85, 0x18, 0x98, 0x10, 0x23, 0xc7, 0xae, 0xc0, 0x85, 0x07, 0x9e, 0x69, 0x62, + 0xa7, 0x59, 0x40, 0x3b, 0xc1, 0x54, 0x7a, 0x7e, 0xbb, 0xfb, 0x38, 0x24, 0x66, 0x33, 0xdb, 0x00, + 0xc6, 0xaf, 0xad, 0x40, 0x3b, 0xe4, 0x65, 0xbd, 0xfb, 0x08, 0xc8, 0xef, 0xac, 0x6d, 0xc0, 0xfb, + 0xe0, 0x5d, 0x9d, 0x30, 0xcf, 0xb1, 0x48, 0x15, 0x3d, 0xab, 0x13, 0x0b, 0xb1, 0x3a, 0x41, 0x0e, + 0x71, 0xa9, 0xe7, 0x54, 0x08, 0x32, 0x5c, 0xc4, 0x88, 0x69, 0x53, 0x07, 0x3b, 0x46, 0xa3, 0x89, + 0x3c, 0x0b, 0x1f, 0x63, 0xa3, 0x81, 0xcb, 0x0d, 0x92, 0xcf, 0x2e, 0x81, 0x89, 0x93, 0x9c, 0xe5, + 0x99, 0x65, 0xe2, 0xc0, 0xc9, 0x85, 0x11, 0xf1, 0xdf, 0x2f, 0x7d, 0x74, 0xf7, 0x7d, 0x20, 0x6f, + 0xae, 0x6d, 0xc2, 0x4d, 0x90, 0x7d, 0x81, 0xdc, 0x2a, 0x25, 0x2e, 0xb2, 0x28, 0x43, 0xe4, 0xc4, + 0x70, 0x59, 0x1e, 0x8e, 0x03, 0xf1, 0x60, 0x27, 0xee, 0xde, 0x93, 0xb3, 0xa3, 0x07, 0xdf, 0x2f, + 0xf5, 0xd4, 0x3f, 0xaf, 0xc7, 0x97, 0x32, 0xf3, 0xd1, 0xec, 0xc4, 0xd7, 0x0a, 0xfe, 0xfb, 0xce, + 0x63, 0x08, 0x7b, 0x96, 0xe0, 0x5f, 0x49, 0x60, 0x7a, 0x9b, 0x10, 0x5b, 0xfc, 0x8a, 0xc5, 0x27, + 0xbe, 0x99, 0x32, 0xe8, 0x43, 0x61, 0xdb, 0xad, 0xcc, 0xe6, 0x99, 0x91, 0x3f, 0xf6, 0x03, 0x79, + 0x9e, 0xf7, 0x36, 0x22, 0x65, 0x15, 0x01, 0xd8, 0xa3, 0x25, 0xc3, 0xaa, 0x1a, 0xd6, 0xa1, 0x0b, + 0x2f, 0xf5, 0x04, 0xf6, 0xed, 0xe0, 0x6f, 0x07, 0x06, 0xc6, 0xfc, 0x11, 0xf8, 0x08, 0x9c, 0x7b, + 0x68, 0x98, 0x84, 0x7a, 0x0c, 0x0e, 0x20, 0x1a, 0xc8, 0x7c, 0x59, 0xc0, 0x5f, 0x82, 0x8b, 0xd1, + 0xfd, 0x64, 0x81, 0xb0, 0x3a, 0x98, 0xdf, 0x71, 0x1c, 0xea, 0xf0, 0x5c, 0xbf, 0x4d, 0x18, 0x36, + 0x1a, 0xee, 0xd0, 0x0a, 0xae, 0x09, 0x05, 0x6f, 0xc2, 0x95, 0xd8, 0x81, 0x71, 0xa9, 0xcf, 0x0c, + 0x56, 0xaf, 0x06, 0x52, 0x7f, 0x5b, 0x02, 0xf0, 0x0e, 0x61, 0xc9, 0x46, 0xef, 0xec, 0x82, 0x22, + 0xc1, 0x31, 0x10, 0xc6, 0xdb, 0x02, 0xc6, 0x95, 0xcc, 0xa5, 0x28, 0x0c, 0x8e, 0xa0, 0x4c, 0xab, + 0x4d, 0xf5, 0x94, 0x97, 0x0f, 0xa2, 0x21, 0x84, 0xbf, 0x21, 0x81, 0x85, 0x7d, 0xea, 0x32, 0x2e, + 0x51, 0xb0, 0x0a, 0x20, 0x2f, 0xd7, 0x53, 0x0e, 0xd4, 0xae, 0x0a, 0xed, 0xd7, 0x33, 0xd7, 0xa2, + 0xda, 0x6d, 0xea, 0x32, 0x8e, 0x40, 0xfc, 0x2e, 0xe9, 0xc3, 0xe8, 0x38, 0xc5, 0xdf, 0x4b, 0x60, + 0x71, 0xab, 0x4e, 0x2a, 0x47, 0x61, 0xce, 0xde, 0xc7, 0x0e, 0x36, 0xdd, 0x6f, 0xc8, 0xa7, 0xef, + 0x08, 0xb8, 0x45, 0xf8, 0xe1, 0x59, 0x3e, 0x6d, 0x0b, 0x54, 0xea, 0x21, 0x61, 0x7d, 0xdd, 0x1b, + 0xfe, 0xab, 0x04, 0xde, 0x10, 0x66, 0xf8, 0xcf, 0xb3, 0xbc, 0x99, 0xfd, 0x56, 0x0c, 0xfa, 0x4c, + 0x18, 0x74, 0x0f, 0xee, 0x0e, 0x61, 0x50, 0xd0, 0x84, 0x89, 0xbf, 0xcb, 0x49, 0x18, 0x47, 0x8f, + 0x5a, 0xf0, 0x1f, 0x25, 0x70, 0x5e, 0x98, 0xc6, 0x9d, 0xe5, 0x5b, 0xb3, 0x28, 0x53, 0x78, 0x49, + 0x8b, 0xb8, 0xb3, 0xc5, 0x9b, 0xdf, 0x56, 0x21, 0xfe, 0x27, 0x3b, 0xe9, 0xbf, 0x95, 0xda, 0xc5, + 0xbf, 0x96, 0x60, 0x6d, 0xc0, 0xb3, 0x42, 0xf4, 0xc7, 0x0c, 0x94, 0xcb, 0xa1, 0x67, 0x75, 0xa3, + 0x52, 0x47, 0x6e, 0x9d, 0x7a, 0x8d, 0xaa, 0x08, 0xf9, 0x65, 0x82, 0x3c, 0x97, 0x54, 0x91, 0x61, + 0x21, 0xbb, 0x81, 0x2b, 0x04, 0xd1, 0x9a, 0x48, 0x0e, 0x55, 0x5a, 0xf1, 0x4c, 0x62, 0xf9, 0xcd, + 0x2a, 0xaa, 0x50, 0x93, 0x0f, 0xae, 0xa4, 0x3f, 0x03, 0xab, 0xfd, 0x8a, 0x54, 0x1e, 0xba, 0xc3, + 0x87, 0x8c, 0x61, 0x1f, 0xc3, 0x9f, 0x82, 0xf3, 0x15, 0x6c, 0x92, 0xc6, 0x16, 0x76, 0x49, 0x20, + 0x83, 0x77, 0xdd, 0x50, 0x07, 0x63, 0xfe, 0x0f, 0xfa, 0xc3, 0x06, 0xaf, 0x4b, 0x62, 0x97, 0x17, + 0xe1, 0x42, 0x2c, 0x78, 0xf1, 0x25, 0xed, 0x07, 0x60, 0xa5, 0x68, 0x51, 0x56, 0x27, 0x4e, 0xa0, + 0x89, 0x07, 0x8c, 0x48, 0x20, 0xff, 0x20, 0x16, 0xd6, 0x87, 0x55, 0x3c, 0x52, 0xfa, 0xcb, 0xc9, + 0x76, 0xf1, 0x4f, 0x27, 0xe1, 0xd7, 0x12, 0x58, 0x2c, 0xa2, 0x92, 0xff, 0xf3, 0x45, 0xe4, 0xfc, + 0xbf, 0x00, 0xe7, 0x0f, 0xf5, 0xfd, 0xad, 0xdc, 0x1d, 0xdf, 0x74, 0x64, 0x3b, 0xf4, 0x29, 0xa9, + 0xb0, 0x61, 0xb7, 0x2c, 0x3d, 0x6f, 0x51, 0x8b, 0x7c, 0x14, 0x98, 0xc6, 0xa9, 0xb3, 0x3f, 0x00, + 0xe7, 0x4b, 0x0f, 0xb6, 0xd1, 0x46, 0x6e, 0xab, 0x81, 0x3d, 0x97, 0xa0, 0x4f, 0x8c, 0x0a, 0xb1, + 0x5c, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0x2d, 0x37, 0x68, 0x59, 0x35, 0xb1, 0xcb, 0x88, 0xa3, 0x7e, + 0xb2, 0xbb, 0xb5, 0xb3, 0xf7, 0x60, 0x27, 0xcf, 0x4e, 0x98, 0x26, 0xaf, 0xe7, 0xd7, 0x0a, 0x08, + 0x2c, 0x9d, 0xe4, 0x5c, 0x6a, 0x12, 0x61, 0x4d, 0xf7, 0x0b, 0x9e, 0x4b, 0x8f, 0x35, 0x71, 0xb5, + 0x8a, 0xb3, 0xb2, 0x94, 0x1a, 0xd5, 0xe6, 0xb1, 0xed, 0xff, 0x2c, 0x63, 0x50, 0x4b, 0x7d, 0xea, + 0x52, 0x4b, 0xbb, 0x10, 0x9d, 0x39, 0xc9, 0xd5, 0x28, 0xcd, 0x99, 0x86, 0x49, 0x0a, 0x3d, 0x94, + 0x85, 0x01, 0x94, 0xfa, 0x3e, 0xaf, 0x63, 0x36, 0xe0, 0x2e, 0xb8, 0xd3, 0x5b, 0xc7, 0x78, 0x2e, + 0x71, 0xba, 0x35, 0x4c, 0x1d, 0x1f, 0x13, 0x64, 0x13, 0xc7, 0x34, 0x5c, 0x97, 0xbb, 0x2e, 0xa3, + 0x08, 0x57, 0x2a, 0xc4, 0x75, 0x63, 0x35, 0x4f, 0x5e, 0x7f, 0x8d, 0xca, 0xe8, 0x9c, 0xfe, 0x31, + 0x90, 0x37, 0xd7, 0x6f, 0xc2, 0x22, 0x98, 0xd9, 0x7d, 0xdb, 0x44, 0x18, 0x31, 0x82, 0x6d, 0xca, + 0xf2, 0x70, 0x0d, 0xe4, 0xd3, 0x43, 0xbd, 0x60, 0x3f, 0xfe, 0x7d, 0x19, 0xcc, 0x81, 0xc9, 0x12, + 0x76, 0x8d, 0x8a, 0x68, 0x61, 0x53, 0x13, 0x12, 0xf8, 0x73, 0x29, 0xd6, 0xd5, 0xfe, 0x54, 0x9a, + 0x48, 0xa5, 0x27, 0xbf, 0xc8, 0x15, 0xf7, 0x77, 0x73, 0xf7, 0x48, 0x13, 0xa5, 0xee, 0x2a, 0x60, + 0xe5, 0x24, 0x87, 0x4d, 0xfc, 0x9c, 0x5a, 0x39, 0x6c, 0x1b, 0x81, 0xaa, 0x1c, 0xf6, 0x58, 0x9d, + 0x35, 0x6d, 0x02, 0x27, 0xd2, 0xe3, 0x94, 0x0f, 0xb4, 0xbb, 0xbf, 0x0c, 0xde, 0x1c, 0x44, 0x49, + 0x1d, 0xe3, 0x39, 0x71, 0xe0, 0x07, 0xd9, 0x5f, 0x00, 0x73, 0x60, 0x54, 0xf0, 0x9d, 0x4b, 0x8f, + 0x31, 0x7a, 0x44, 0x2c, 0x70, 0x1d, 0xac, 0x74, 0x49, 0x74, 0xe2, 0x7a, 0x0d, 0xf6, 0x90, 0x35, + 0x76, 0xad, 0x07, 0xa4, 0x42, 0xad, 0xaa, 0xdb, 0xa9, 0x30, 0xf7, 0x3e, 0x02, 0xff, 0x22, 0x75, + 0x5a, 0xee, 0x7f, 0x90, 0x26, 0x64, 0x65, 0x54, 0xbb, 0x1a, 0xfa, 0x5c, 0xc4, 0x41, 0x55, 0x81, + 0x47, 0xed, 0x08, 0x2d, 0xac, 0x0e, 0x26, 0x12, 0x10, 0x4a, 0xbf, 0x06, 0xd2, 0x7e, 0x07, 0x0f, + 0xe1, 0x1d, 0x07, 0x5b, 0xcc, 0x45, 0x7c, 0x10, 0x9c, 0x25, 0x58, 0x09, 0xfa, 0x7a, 0xb8, 0x18, + 0x2c, 0x8a, 0x51, 0xb8, 0xba, 0x05, 0xc6, 0x70, 0xd5, 0x34, 0x2c, 0x58, 0x88, 0xb1, 0x5a, 0xd5, + 0x18, 0x99, 0x70, 0x0d, 0x4e, 0x66, 0xb8, 0x8c, 0x57, 0x6b, 0xc7, 0x04, 0x19, 0x56, 0x8d, 0x3a, + 0xa6, 0xf0, 0xbe, 0xf2, 0x2a, 0x98, 0x89, 0x1e, 0xcc, 0x48, 0xf2, 0xad, 0xa1, 0x7c, 0x7d, 0xe0, + 0x6b, 0x43, 0x92, 0xd4, 0xd9, 0x05, 0x17, 0x3f, 0xed, 0x46, 0xcb, 0x68, 0x0c, 0x18, 0xf6, 0xee, + 0x3f, 0xbf, 0x0c, 0xe0, 0x49, 0x2e, 0x3a, 0xc3, 0x2f, 0x09, 0x1c, 0x4b, 0xcb, 0x65, 0xec, 0x3c, + 0x57, 0xc0, 0xc5, 0xc4, 0x62, 0x19, 0x3f, 0xcf, 0x35, 0x0c, 0x97, 0xc1, 0x19, 0x6d, 0x0a, 0x8c, + 0xa5, 0x65, 0x6a, 0x11, 0x90, 0x42, 0xd2, 0xe3, 0xc9, 0x8e, 0x3b, 0x96, 0xc7, 0x45, 0x18, 0xdb, + 0xf8, 0x59, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0xbe, 0x1f, 0x2b, 0xb3, 0x2b, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 11bb93e3bca..5724b0525de 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -1894,6 +1894,85 @@ func local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Con } +var ( + filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "ok": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} +) + +func request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.ok"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.ok") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.ok", val) + + e, err = runtime.Enum(val, ABitOfEverything_Nested_DeepEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.ok", err) + } + + protoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e) + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CheckNestedEnumGetQueryParams(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["single_nested.ok"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "single_nested.ok") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "single_nested.ok", val) + + e, err = runtime.Enum(val, ABitOfEverything_Nested_DeepEnum_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.ok", err) + } + + protoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e) + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CheckNestedEnumGetQueryParams(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_ABitOfEverythingService_CheckPostQueryParams_0 = &utilities.DoubleArray{Encoding: map[string]int{"single_nested": 0, "string_value": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) @@ -2382,6 +2461,26 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2851,6 +2950,26 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_ABitOfEverythingService_CheckPostQueryParams_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2913,6 +3032,8 @@ var ( pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "nested_enum", "single_nested.ok"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "", runtime.AssumeColonVerbOpt(true))) ) @@ -2955,6 +3076,8 @@ var ( forward_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.ForwardResponseMessage ) diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 767e492e261..37a928f09e0 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -506,6 +506,11 @@ service ABitOfEverythingService { get: "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" }; } + rpc CheckNestedEnumGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" + }; + } rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { post: "/v1/example/a_bit_of_everything/params/post/{string_value}" diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 58c1b34c74e..b74fac63962 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -124,6 +124,315 @@ } } }, + "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}": { + "get": { + "operationId": "CheckNestedEnumGetQueryParams", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + } + }, + "parameters": [ + { + "name": "single_nested.ok", + "description": "DeepEnum description.", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ] + }, + { + "name": "single_nested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "single_nested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "uuid", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "float_value", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "double_value", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64_value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64_value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "bool_value", + "in": "query", + "required": false, + "type": "boolean", + "format": "boolean" + }, + { + "name": "string_value", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytes_value", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enum_value", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nested_path_enum_value", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32_value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64_value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeated_string_value", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneof_string", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestamp_value", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeated_enum_value", + "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeated_enum_annotation", + "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enum_value_annotation", + "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeated_string_annotation", + "description": "Repeated string title. Repeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nested_annotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nested_annotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64_override_type", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/a_bit_of_everything/params/get/{single_nested.name}": { "get": { "operationId": "CheckGetQueryParams", diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index b2bcf41994d..c37fa47fe10 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -324,6 +324,10 @@ func (s *_ABitOfEverythingServer) CheckGetQueryParams(ctx context.Context, msg * return msg, nil } +func (s *_ABitOfEverythingServer) CheckNestedEnumGetQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + return msg, nil +} + func (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { return msg, nil } diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index 4dcc9637d5d..ceb3dda1110 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -348,6 +348,9 @@ var ( } {{if $param.IsNestedProto3}} err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) + {{if $enum}} + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) + {{end}} {{else if $enum}} e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) {{else}} @@ -508,6 +511,9 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct } {{if $param.IsNestedProto3}} err = runtime.PopulateFieldFromPath(&protoReq, {{$param | printf "%q"}}, val) + {{if $enum}} + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) + {{end}} {{else if $enum}} e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Target.Message.File.GoPkg.Path}}_value) {{else}} From a8afee113cc8a93a2b595aadece61b1c97d93e96 Mon Sep 17 00:00:00 2001 From: Will Plano <51954103+william-plano-oxb@users.noreply.github.com> Date: Fri, 27 Sep 2019 15:04:38 +0100 Subject: [PATCH 0220/1518] Fix auto generated fieldmask case in patch requests (#1049) * Fix fieldmask case Fix up tests to check expected behaviour Fix up documentation to match new behaviour * Remove PatchWithFieldMaskInBody Replaced with an additional binding to UpdateV2 * Regenerated code * `bazel run :gazelle` * Added tests for proto file with non snake_case field names * tabs -> spaces * Update patch documentation Add benchmark for patching ABE * Apply suggestions from code review Co-Authored-By: Johan Brandhorst * Move benchmark to fieldmask_test and just measure the FieldMaskFromRequestBody method * Apply suggestions from code review Fix typos (again) Co-Authored-By: Johan Brandhorst * Add more representative benchmark --- Makefile | 1 + docs/_docs/patch.md | 20 +- .../abe/a_bit_of_everything_service_api.go | 60 +- examples/gateway/gateway.go | 1 + examples/integration/integration_test.go | 86 ++- examples/proto/examplepb/BUILD.bazel | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 490 +++++++------- .../examplepb/a_bit_of_everything.pb.gw.go | 38 +- .../proto/examplepb/a_bit_of_everything.proto | 21 +- .../a_bit_of_everything.swagger.json | 2 +- .../proto/examplepb/non_standard_names.pb.go | 634 ++++++++++++++++++ .../examplepb/non_standard_names.pb.gw.go | 296 ++++++++ .../proto/examplepb/non_standard_names.proto | 75 +++ examples/server/BUILD.bazel | 2 + examples/server/a_bit_of_everything.go | 19 +- examples/server/fieldmask_helper.go | 3 +- examples/server/fieldmask_helper_test.go | 48 +- examples/server/main.go | 1 + examples/server/non_standard_names.go | 40 ++ .../gengateway/template.go | 18 +- .../gengateway/template_test.go | 7 +- runtime/BUILD.bazel | 1 - runtime/fieldmask.go | 23 +- runtime/fieldmask_test.go | 102 ++- 24 files changed, 1560 insertions(+), 430 deletions(-) create mode 100644 examples/proto/examplepb/non_standard_names.pb.go create mode 100644 examples/proto/examplepb/non_standard_names.pb.gw.go create mode 100644 examples/proto/examplepb/non_standard_names.proto create mode 100644 examples/server/non_standard_names.go diff --git a/Makefile b/Makefile index f39f9d597e7..f166c512fdf 100644 --- a/Makefile +++ b/Makefile @@ -70,6 +70,7 @@ EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/a_bit_of_everything.proto \ examples/proto/examplepb/stream.proto \ examples/proto/examplepb/flow_combination.proto \ + examples/proto/examplepb/non_standard_names.proto \ examples/proto/examplepb/wrappers.proto \ examples/proto/examplepb/unannotated_echo_service.proto \ examples/proto/examplepb/response_body_service.proto diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md index c395b7f61c2..42b96eab25f 100644 --- a/docs/_docs/patch.md +++ b/docs/_docs/patch.md @@ -3,20 +3,20 @@ category: documentation --- # Patch Feature -The HTTP PATCH method allows a resource to be partially updated. +The HTTP PATCH method allows a resource to be partially updated. The idea, If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. -This handles two scenarios: -- The FieldMask is hidden from the REST request (as in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L286) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. -- The FieldMask is exposed to the REST request (as in the [PatchWithFieldMaskInBody](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L295) example). For this case, a check is made as to whether the FieldMask is nil/empty prior to populating with the request body. +There are two scenarios: +- The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. -If it's not nil, then it converts the FieldMask paths from the REST (snake_case) to gRPC (PascalCase) format. Otherwise, it acts like the previous case. +Currently this feature is not compatible with using the JSON marshaller option to use json names in the http request/response described [here](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html#using-camelcase-for-json). If you want to use json names then you may with to disable this feature with the command line option `-allow_patch_feature=false` ## Example Usage -1. Create PATCH request. +1. Create PATCH request. The PATCH request needs to include the message and the update mask. -```golang +```golang // UpdateV2Request request for update includes the message and the update mask message UpdateV2Request { ABitOfEverything abe = 1; @@ -40,10 +40,10 @@ rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { } ``` -If you want to use PATCH wtih fieldmask exposed to the REST request then include the entire request message. +If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. ```golang -rpc PatchWithFieldMaskInBody(UpdateV2Request) returns (google.protobuf.Empty) { +rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { option (google.api.http) = { patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" body: "*" @@ -63,4 +63,4 @@ curl --data '{"string_value": "strprefix/foo"}' -X PATCH http://address:port/v2/ If we know what fields we want to update then we can use PATCH with field mask approach. For this we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask. ``` curl --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' -X PATCH http://address:port/v2a/example/a_bit_of_everything/1 -``` \ No newline at end of file +``` diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go index 731c8146d9f..ec3f4c49886 100644 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ b/examples/clients/abe/a_bit_of_everything_service_api.go @@ -1204,16 +1204,16 @@ func (a ABitOfEverythingServiceApi) Lookup(uuid string) (*ExamplepbABitOfEveryth /** * * - * @param abeUuid + * @param name * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, body ExamplepbUpdateV2Request) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*interface{}, *APIResponse, error) { - var localVarHttpMethod = strings.ToUpper("Patch") + var localVarHttpMethod = strings.ToUpper("Post") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + localVarPath := a.Configuration.BasePath + "/v2/example/postwithemptybody/{name}" + localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1265,7 +1265,7 @@ func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, bod var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "PatchWithFieldMaskInBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "PostWithEmptyBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() @@ -1281,16 +1281,13 @@ func (a ABitOfEverythingServiceApi) PatchWithFieldMaskInBody(abeUuid string, bod /** * * - * @param name - * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error) { - var localVarHttpMethod = strings.ToUpper("Post") + var localVarHttpMethod = strings.ToUpper("Get") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/postwithemptybody/{name}" - localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) + localVarPath := a.Configuration.BasePath + "/v2/example/timeout" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1335,14 +1332,12 @@ func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body Examplep if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - // body params - localVarPostBody = &body var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "PostWithEmptyBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "Timeout", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() @@ -1358,13 +1353,16 @@ func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body Examplep /** * * + * @param uuid + * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { - var localVarHttpMethod = strings.ToUpper("Get") + var localVarHttpMethod = strings.ToUpper("Put") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/timeout" + localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1409,12 +1407,14 @@ func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } + // body params + localVarPostBody = &body var successPayload = new(interface{}) localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Timeout", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "Update", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() @@ -1430,16 +1430,16 @@ func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error /** * * - * @param uuid + * @param abeUuid * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Put") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1491,7 +1491,7 @@ func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEver var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Update", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "UpdateV2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() @@ -1511,9 +1511,9 @@ func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEver * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { - var localVarHttpMethod = strings.ToUpper("Put") + var localVarHttpMethod = strings.ToUpper("Patch") // create path and map variables localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) @@ -1568,7 +1568,7 @@ func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitO var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "UpdateV2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "UpdateV22", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() @@ -1588,11 +1588,11 @@ func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitO * @param body * @return *interface{} */ -func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { +func (a ABitOfEverythingServiceApi) UpdateV23(abeUuid string, body ExamplepbUpdateV2Request) (*interface{}, *APIResponse, error) { var localVarHttpMethod = strings.ToUpper("Patch") // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath := a.Configuration.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) localVarHeaderParams := make(map[string]string) @@ -1645,7 +1645,7 @@ func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABit var localVarURL, _ = url.Parse(localVarPath) localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "UpdateV22", Method: localVarHttpMethod, RequestURL: localVarURL.String()} + var localVarAPIResponse = &APIResponse{Operation: "UpdateV23", Method: localVarHttpMethod, RequestURL: localVarURL.String()} if localVarHttpResponse != nil { localVarAPIResponse.Response = localVarHttpResponse.RawResponse localVarAPIResponse.Payload = localVarHttpResponse.Body() diff --git a/examples/gateway/gateway.go b/examples/gateway/gateway.go index 297ebe63d8b..5fccade22ce 100644 --- a/examples/gateway/gateway.go +++ b/examples/gateway/gateway.go @@ -22,6 +22,7 @@ func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.Ser examplepb.RegisterStreamServiceHandler, examplepb.RegisterABitOfEverythingServiceHandler, examplepb.RegisterFlowCombinationHandler, + examplepb.RegisterNonStandardServiceHandler, examplepb.RegisterResponseBodyServiceHandler, } { if err := f(ctx, mux, conn); err != nil { diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index e7cb6e71016..939fecde84a 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -707,6 +707,7 @@ func TestABEPatch(t *testing.T) { } // TestABEPatchBody demonstrates the ability to specify an update mask within the request body. +// This binding does not use an automatically generated update_mask. func TestABEPatchBody(t *testing.T) { port := 8080 @@ -719,6 +720,7 @@ func TestABEPatchBody(t *testing.T) { { name: "with fieldmask provided", originalValue: gw.ABitOfEverything{ + Int32Value: 42, StringValue: "rabbit", SingleNested: &gw.ABitOfEverything_Nested{Name: "some value that will get overwritten", Amount: 345}, }, @@ -726,11 +728,17 @@ func TestABEPatchBody(t *testing.T) { StringValue: "some value that won't get updated because it's not in the field mask", SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, }, UpdateMask: &field_mask.FieldMask{Paths: []string{"single_nested"}}}, - want: gw.ABitOfEverything{StringValue: "rabbit", SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}}, + want: gw.ABitOfEverything{ + Int32Value: 42, + StringValue: "rabbit", + SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + }, }, { + // N.B. This case passes the empty field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with empty fieldmask", originalValue: gw.ABitOfEverything{ + Int32Value: 42, StringValue: "some value that will get overwritten", SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 345}, }, @@ -744,8 +752,10 @@ func TestABEPatchBody(t *testing.T) { }, }, { + // N.B. This case passes the nil field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with nil fieldmask", originalValue: gw.ABitOfEverything{ + Int32Value: 42, StringValue: "some value that will get overwritten", SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 123}, }, @@ -1617,3 +1627,77 @@ func TestRequestQueryParams(t *testing.T) { }) } } + +func TestNonStandardNames(t *testing.T) { + ctx := context.Background() + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + go func() { + if err := runGateway( + ctx, + ":8081", + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}), + ); err != nil { + t.Errorf("runGateway() failed with %v; want success", err) + return + } + }() + + if err := waitForGateway(ctx, 8081); err != nil { + t.Errorf("waitForGateway(ctx, 8081) failed with %v; want success", err) + } + + for _, tc := range []struct { + name string + port int + method string + jsonBody string + }{ + { + "Test standard update method", + 8081, + "update", + `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, + }, + { + "Test update method using json_names in message", + 8081, + "update_with_json_names", + // N.B. json_names have no effect if not using OrigName: false + `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, + }, + } { + t.Run(tc.name, func(t *testing.T) { + testNonStandardNames(t, tc.port, tc.method, tc.jsonBody) + }) + } +} + +func testNonStandardNames(t *testing.T, port int, method string, jsonBody string) { + req, err := http.NewRequest( + http.MethodPatch, + fmt.Sprintf("http://localhost:%d/v1/example/non_standard/%s", port, method), + strings.NewReader(jsonBody), + ) + if err != nil { + t.Fatalf("http.NewRequest(PATCH) failed with %v; want success", err) + } + patchResp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("failed to issue PATCH request: %v", err) + } + + body, err := ioutil.ReadAll(patchResp.Body) + if err != nil { + t.Errorf("patchResp body couldn't be read: %v", err) + } + + if got, want := patchResp.StatusCode, http.StatusOK; got != want { + t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) + } + + if got, want := string(body), jsonBody; got != want { + t.Errorf("got %q; want %q", got, want) + } +} diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index dd7a2d45c3c..4888a802ff9 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -7,6 +7,7 @@ package(default_visibility = ["//visibility:public"]) # gazelle:exclude a_bit_of_everything.pb.gw.go # gazelle:exclude echo_service.pb.gw.go # gazelle:exclude flow_combination.pb.gw.go +# gazelle:exclude non_standard_names.pb.gw.go # gazelle:exclude stream.pb.gw.go # gazelle:exclude wrappers.pb.gw.go # gazelle:exclude response_body_service.pb.gw.go @@ -17,6 +18,7 @@ proto_library( "a_bit_of_everything.proto", "echo_service.proto", "flow_combination.proto", + "non_standard_names.proto", "response_body_service.proto", "stream.proto", "unannotated_echo_service.proto", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 7fd9e28a3e7..7cc2c7209a7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -55,7 +55,7 @@ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0} } // DeepEnum is one or zero. @@ -81,7 +81,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0, 0, 0} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. @@ -139,7 +139,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) @@ -520,7 +520,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{0, 0} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) @@ -589,7 +589,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{1} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) @@ -732,7 +732,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{2} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) @@ -771,7 +771,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{3} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) @@ -818,7 +818,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71, []int{4} + return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) @@ -886,7 +886,6 @@ type ABitOfEverythingServiceClient interface { Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) - PatchWithFieldMaskInBody(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) @@ -962,15 +961,6 @@ func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *Update return out, nil } -func (c *aBitOfEverythingServiceClient) PatchWithFieldMaskInBody(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PatchWithFieldMaskInBody", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) @@ -1098,7 +1088,6 @@ type ABitOfEverythingServiceServer interface { Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) Update(context.Context, *ABitOfEverything) (*empty.Empty, error) UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) - PatchWithFieldMaskInBody(context.Context, *UpdateV2Request) (*empty.Empty, error) Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) @@ -1215,24 +1204,6 @@ func _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } -func _ABitOfEverythingService_PatchWithFieldMaskInBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateV2Request) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ABitOfEverythingServiceServer).PatchWithFieldMaskInBody(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PatchWithFieldMaskInBody", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).PatchWithFieldMaskInBody(ctx, req.(*UpdateV2Request)) - } - return interceptor(ctx, in, info, handler) -} - func _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sub2.IdMessage) if err := dec(in); err != nil { @@ -1491,10 +1462,6 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateV2", Handler: _ABitOfEverythingService_UpdateV2_Handler, }, - { - MethodName: "PatchWithFieldMaskInBody", - Handler: _ABitOfEverythingService_PatchWithFieldMaskInBody_Handler, - }, { MethodName: "Delete", Handler: _ABitOfEverythingService_Delete_Handler, @@ -1681,231 +1648,230 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71) + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_e0089283b92675c0) } -var fileDescriptor_a_bit_of_everything_4e4f16ccb3b71c71 = []byte{ - // 3551 bytes of a gzipped FileDescriptorProto +var fileDescriptor_a_bit_of_everything_e0089283b92675c0 = []byte{ + // 3529 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, 0x7e, 0xd7, 0x72, 0x25, 0x59, 0x1a, 0x7d, 0x8f, 0x2c, 0x5b, 0xa6, 0x95, 0x68, 0x4c, 0x3b, 0x2f, 0x6b, 0x3e, 0x93, 0x2b, 0xad, 0x94, 0xc4, 0x66, 0xfa, 0x92, 0x90, 0x92, 0xec, 0xc8, 0x4e, 0x64, 0x65, 0xed, 0xb8, 0xa9, 0x5f, 0xfc, 0xd4, 0x21, 0x39, 0x14, 0xd7, 0xe2, 0xee, 0xec, 0xdb, 0x9d, - 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0x2d, 0xfa, 0xf1, 0x8a, 0x5e, - 0x8a, 0x5e, 0x8a, 0x9e, 0x0a, 0xf4, 0x54, 0xa0, 0xed, 0xa1, 0xb7, 0x1e, 0x5a, 0xa4, 0x40, 0xd1, - 0x43, 0x7b, 0x6a, 0xcf, 0xbd, 0x14, 0x08, 0xd0, 0x43, 0xdb, 0x87, 0x99, 0xdd, 0x25, 0x77, 0x97, - 0xa4, 0x65, 0xda, 0x0f, 0x49, 0x0e, 0xf1, 0xce, 0xcc, 0xff, 0xe3, 0xf7, 0x9f, 0xf9, 0xcf, 0xff, - 0x63, 0x28, 0xa0, 0x91, 0x13, 0x6c, 0xda, 0x0d, 0xe2, 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa1, - 0x5d, 0x56, 0xf1, 0x41, 0xd9, 0x60, 0x07, 0xb4, 0x76, 0x40, 0x8e, 0x89, 0xd3, 0x64, 0x75, 0xc3, - 0x3a, 0xcc, 0x0b, 0x1a, 0xb8, 0x7a, 0xe8, 0xd8, 0x95, 0xfc, 0x21, 0x66, 0xe4, 0x19, 0x6e, 0xe6, - 0x43, 0x01, 0xf9, 0x0e, 0x6b, 0x7a, 0xe5, 0x90, 0xd2, 0xc3, 0x06, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, - 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xb3, 0xa7, 0x51, 0xb0, 0x2a, 0x46, 0x65, 0xaf, 0xa6, - 0xd6, 0x0c, 0xd2, 0xa8, 0x1e, 0x98, 0xd8, 0x3d, 0x0a, 0x28, 0x2e, 0x27, 0x29, 0x88, 0x69, 0xb3, - 0x66, 0xb0, 0xf8, 0x66, 0x72, 0xb1, 0xea, 0x39, 0x42, 0x7e, 0xb0, 0xfe, 0x76, 0xc2, 0x22, 0x1b, - 0xb3, 0x3a, 0xb1, 0x3c, 0x53, 0x7c, 0x1c, 0xf0, 0xaf, 0x10, 0x47, 0x82, 0xd0, 0xf5, 0xca, 0xaa, - 0x49, 0x5c, 0x17, 0x1f, 0x92, 0x80, 0xe2, 0x4a, 0x2f, 0x85, 0x96, 0x20, 0x59, 0x4d, 0xa2, 0x61, - 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x20, 0xb8, 0x21, 0xfe, 0xa9, 0xe4, 0x0e, 0x89, 0x95, 0x73, - 0x9f, 0xe1, 0xc3, 0x43, 0xe2, 0xa8, 0xd4, 0x16, 0xfb, 0xd1, 0xbb, 0x37, 0x99, 0x7f, 0xba, 0x0c, - 0xe6, 0x8b, 0x25, 0x83, 0xdd, 0xaf, 0xed, 0x74, 0x76, 0x1d, 0x3e, 0x01, 0x33, 0xae, 0x61, 0x1d, - 0x36, 0xc8, 0x81, 0x45, 0x5c, 0x46, 0xaa, 0xcb, 0x97, 0x90, 0xa4, 0x4c, 0x69, 0x37, 0xf3, 0x67, - 0x9c, 0x43, 0x3e, 0x29, 0x29, 0xbf, 0x27, 0xf8, 0xf5, 0x69, 0x5f, 0x9c, 0x3f, 0x82, 0x75, 0x30, - 0xea, 0x79, 0x46, 0x75, 0x59, 0x42, 0x92, 0x32, 0x59, 0x7a, 0xd8, 0x2e, 0x7e, 0xf6, 0x23, 0x49, - 0xfa, 0x1d, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, - 0xb3, 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, - 0xb0, 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xa9, 0x5a, 0x83, 0x62, 0x76, - 0x70, 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, - 0xb7, 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, - 0x1d, 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0xe9, 0x2a, 0xf5, 0xca, 0x0d, 0x12, 0x08, 0x1b, - 0x45, 0x92, 0x22, 0xe9, 0x53, 0xfe, 0x9c, 0x4f, 0xb2, 0x0a, 0xa6, 0x0c, 0x8b, 0xbd, 0xbb, 0x19, - 0x50, 0x8c, 0x21, 0x49, 0x91, 0x75, 0x20, 0xa6, 0x3a, 0x32, 0xbc, 0x28, 0xc5, 0x38, 0x92, 0x94, - 0x51, 0x7d, 0xca, 0x8b, 0x90, 0xf8, 0x32, 0x36, 0xb4, 0x80, 0xe2, 0x1c, 0x92, 0x94, 0x31, 0x21, - 0x63, 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x13, 0x48, 0x52, - 0xc6, 0xf5, 0xe9, 0x60, 0x32, 0x4e, 0xd4, 0x91, 0x33, 0x89, 0x24, 0xe5, 0x5c, 0x40, 0x14, 0x4a, - 0x7a, 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd0, 0x27, 0xf9, 0x4c, 0x07, - 0xac, 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb8, 0x03, 0xe8, 0x53, 0xfe, 0x5c, 0x07, 0x6c, - 0xb9, 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0x65, 0x5a, 0x07, 0x62, 0x2a, 0x66, 0x70, 0x07, - 0xc6, 0x0c, 0x92, 0x94, 0x19, 0xdf, 0xe0, 0x10, 0xc5, 0x3d, 0x00, 0xf8, 0xad, 0x0b, 0x08, 0x66, - 0x91, 0xa4, 0xcc, 0x6a, 0x37, 0xce, 0x3c, 0xf9, 0x3d, 0xcf, 0x24, 0x8e, 0x51, 0xd9, 0xb1, 0x3c, - 0x53, 0x9f, 0xe4, 0xfc, 0xbe, 0xb0, 0x7d, 0x30, 0xd7, 0xb9, 0xc7, 0x81, 0xc4, 0x37, 0x85, 0x44, - 0x65, 0x80, 0xc4, 0xf0, 0xfa, 0xe7, 0xf7, 0x31, 0xab, 0x0b, 0x69, 0x33, 0x76, 0xf0, 0xe5, 0x4b, - 0x74, 0xc1, 0x05, 0xdf, 0x99, 0x0e, 0x92, 0x82, 0x57, 0x85, 0xe0, 0x0f, 0xce, 0x12, 0xfc, 0xa9, - 0x1f, 0x10, 0x42, 0xf9, 0x81, 0x8b, 0x76, 0xd4, 0x2d, 0x5a, 0xb1, 0xb1, 0xaf, 0xf4, 0x2d, 0x30, - 0xeb, 0xc6, 0xcf, 0x6f, 0x0e, 0x49, 0xca, 0x9c, 0x3e, 0xe3, 0xc6, 0x0e, 0xb0, 0x43, 0xd6, 0xf1, - 0x85, 0x79, 0x24, 0x29, 0xf3, 0x21, 0x59, 0xc4, 0xeb, 0xdc, 0xe8, 0x21, 0x2c, 0x20, 0x49, 0x59, - 0xd0, 0xa7, 0xdc, 0xc8, 0x21, 0x04, 0x24, 0x1d, 0x39, 0x10, 0x49, 0x0a, 0xf4, 0x49, 0x42, 0x29, - 0x1a, 0x58, 0x72, 0x88, 0x4d, 0x30, 0xdf, 0x8a, 0x98, 0x5f, 0x2c, 0x22, 0x59, 0x99, 0xd4, 0x17, - 0xc3, 0xc5, 0x07, 0x11, 0xff, 0xb8, 0x05, 0xa6, 0xa8, 0x45, 0x78, 0x92, 0xe0, 0x11, 0x7a, 0xf9, - 0xbc, 0x08, 0x4c, 0x17, 0xf2, 0x7e, 0x50, 0xcc, 0x87, 0x41, 0x31, 0xbf, 0xc3, 0x57, 0x3f, 0x1e, - 0xd1, 0x81, 0x20, 0x16, 0x23, 0x78, 0x15, 0x4c, 0xfb, 0xac, 0xbe, 0xae, 0xe5, 0x25, 0xee, 0x7d, - 0x1f, 0x8f, 0xe8, 0xbe, 0x40, 0x5f, 0x09, 0xfc, 0x12, 0x4c, 0x9a, 0xd8, 0x0e, 0x70, 0x5c, 0x10, - 0x41, 0xe3, 0xc3, 0xe1, 0x83, 0xc6, 0xa7, 0xd8, 0x16, 0x70, 0x77, 0x2c, 0xe6, 0x34, 0xf5, 0x09, - 0x33, 0x18, 0xc2, 0x13, 0xb0, 0x68, 0x62, 0xdb, 0x4e, 0xda, 0x7b, 0x51, 0xe8, 0xf9, 0xf8, 0x95, - 0xf4, 0xd8, 0xb1, 0xfd, 0xf1, 0x15, 0x2e, 0x98, 0xc9, 0xf9, 0x88, 0xe6, 0xc0, 0xf7, 0x7c, 0xcd, - 0xcb, 0xaf, 0xa7, 0xd9, 0xf7, 0xbc, 0x5e, 0xcd, 0x91, 0x79, 0x58, 0x00, 0xcb, 0x16, 0xb5, 0xb6, - 0xa8, 0x75, 0x4c, 0x2c, 0x9e, 0x79, 0x70, 0x63, 0x0f, 0x9b, 0x7e, 0x78, 0x5b, 0x4e, 0x8b, 0x00, - 0x30, 0x70, 0x1d, 0x6e, 0x81, 0xb9, 0x4e, 0x7a, 0x0b, 0x10, 0x5f, 0x16, 0x27, 0x9e, 0xee, 0x39, - 0xf1, 0x87, 0x21, 0x9d, 0x3e, 0xdb, 0x61, 0xf1, 0x85, 0x7c, 0x09, 0x3a, 0x9e, 0x14, 0xbd, 0x6c, - 0x2b, 0x48, 0x1e, 0x3a, 0x2e, 0x2c, 0x84, 0x82, 0xba, 0x17, 0xeb, 0x2f, 0x24, 0xb0, 0x1c, 0x17, - 0xdf, 0x4d, 0xb2, 0xcb, 0x68, 0x78, 0x1d, 0xa5, 0xed, 0x76, 0xb1, 0x98, 0xbd, 0xac, 0x07, 0x22, - 0x91, 0xe5, 0x2f, 0x21, 0x2e, 0x1a, 0x31, 0x83, 0x35, 0x88, 0x96, 0xe9, 0xbf, 0x58, 0x25, 0x6e, - 0xc5, 0x31, 0x44, 0xa6, 0xcf, 0xeb, 0x17, 0xa2, 0x48, 0x8b, 0x1d, 0x44, 0xf0, 0x77, 0x25, 0xb0, - 0xd4, 0xdd, 0x84, 0x28, 0xd6, 0x2b, 0xc3, 0xc7, 0xc9, 0x92, 0xd6, 0x2e, 0xaa, 0x59, 0xb8, 0xd7, - 0x0b, 0xf1, 0xd2, 0xde, 0x40, 0x64, 0x8b, 0x9d, 0xd8, 0x1a, 0x81, 0x75, 0x0c, 0xd2, 0xc9, 0x50, - 0x10, 0x81, 0x96, 0xe1, 0xf1, 0xa0, 0x74, 0xb3, 0x5d, 0x7c, 0x27, 0xbb, 0xd4, 0xb1, 0xdd, 0x27, - 0x0b, 0xf4, 0xad, 0x24, 0xa7, 0x63, 0x2a, 0x97, 0xe3, 0x91, 0x24, 0xa2, 0xf7, 0x6f, 0xa4, 0x88, - 0xe2, 0xe0, 0x66, 0x44, 0x14, 0x5f, 0x7d, 0xbd, 0xaa, 0xa1, 0x74, 0xbb, 0x5d, 0xdc, 0xca, 0x76, - 0xb1, 0xf9, 0x0a, 0x10, 0x2d, 0x3f, 0x25, 0x15, 0x16, 0x20, 0xbf, 0x3a, 0x60, 0xb5, 0xbf, 0x01, - 0xbe, 0xdc, 0x88, 0x01, 0x3f, 0x95, 0xc0, 0x42, 0x2f, 0xee, 0x6b, 0xaf, 0x57, 0xaf, 0x95, 0x36, - 0xdb, 0xc5, 0xf5, 0xec, 0xe2, 0x5e, 0x1f, 0xb8, 0xe9, 0xbd, 0xc1, 0x28, 0xe7, 0xad, 0x24, 0xba, - 0xf7, 0xc0, 0xa2, 0x9f, 0x03, 0xe8, 0x31, 0x71, 0x1c, 0xa3, 0x4a, 0x0e, 0x58, 0xd3, 0x26, 0xcb, - 0x6f, 0xf1, 0x32, 0xa6, 0x74, 0xae, 0x5d, 0x1c, 0xfd, 0xa3, 0x94, 0x24, 0xeb, 0x0b, 0x82, 0xe6, - 0x7e, 0x40, 0xf2, 0xb0, 0x69, 0x93, 0xf4, 0xbf, 0x4b, 0x60, 0x3c, 0xa8, 0x16, 0x21, 0x18, 0xb5, - 0xb0, 0x49, 0xfc, 0x6a, 0x51, 0x17, 0xdf, 0xf0, 0x02, 0x18, 0xc7, 0x26, 0xf5, 0x2c, 0xb6, 0x9c, - 0x12, 0xe9, 0x3f, 0x18, 0x41, 0x13, 0xa4, 0xe8, 0x91, 0x28, 0xca, 0x66, 0xb5, 0xe2, 0xab, 0x5a, - 0x9f, 0xdf, 0x26, 0xc4, 0x16, 0xee, 0x9d, 0x6e, 0x17, 0x2f, 0x6a, 0x4b, 0xe1, 0x30, 0x6e, 0x6c, - 0x8a, 0x1e, 0x65, 0x56, 0xc1, 0x44, 0xb8, 0x08, 0x27, 0xc1, 0xd8, 0xed, 0xe2, 0x27, 0x0f, 0x76, - 0xe6, 0x47, 0xe0, 0x04, 0x18, 0x7d, 0xa8, 0x7f, 0xbe, 0x33, 0x2f, 0x15, 0x2e, 0xb6, 0x8b, 0xe7, - 0x35, 0x08, 0xe7, 0x4f, 0x51, 0x86, 0x1e, 0x65, 0x0a, 0x28, 0xc3, 0xe7, 0x33, 0xa8, 0x95, 0x36, - 0xc0, 0x4c, 0x2c, 0x47, 0xc0, 0x79, 0x20, 0x1f, 0x91, 0x66, 0x60, 0x24, 0xff, 0x84, 0x25, 0x30, - 0xe6, 0x07, 0xaa, 0xd4, 0x2b, 0x14, 0x30, 0x3e, 0x6b, 0x21, 0x75, 0x53, 0x4a, 0x6f, 0x83, 0x0b, - 0xfd, 0xd3, 0x44, 0x1f, 0x9d, 0xe7, 0xa3, 0x3a, 0x27, 0xa3, 0x52, 0x7e, 0x35, 0x94, 0x92, 0x0c, - 0xf9, 0x7d, 0xa4, 0xec, 0x45, 0xa5, 0xbc, 0x4e, 0xd1, 0xdd, 0xd5, 0x5f, 0xf8, 0xc3, 0x54, 0xbb, - 0xf8, 0x7b, 0x29, 0xf0, 0x9b, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, - 0xa2, 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, - 0x15, 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, - 0x23, 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, - 0x29, 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, - 0xf5, 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, - 0x0b, 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, - 0x75, 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, - 0x67, 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, - 0xe6, 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, - 0xe4, 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x6f, 0x02, - 0x2c, 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, - 0x46, 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, - 0xe3, 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, - 0xf4, 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, - 0x1a, 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, - 0xeb, 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, - 0xc2, 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, - 0x86, 0xc9, 0xca, 0xb9, 0x3e, 0xec, 0xa1, 0xf6, 0xf7, 0xc0, 0x72, 0x9c, 0x3d, 0xd2, 0x58, 0x4d, - 0x20, 0x59, 0x99, 0xd0, 0x97, 0xa2, 0xbc, 0xa5, 0x4e, 0x93, 0xd5, 0xb3, 0x5d, 0xb1, 0x52, 0x73, - 0x52, 0x94, 0xd6, 0xb1, 0xed, 0x8a, 0x97, 0xd7, 0x89, 0xed, 0x8a, 0x36, 0x63, 0x00, 0xc9, 0xca, - 0x74, 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x42, 0xb2, 0x32, 0xd3, - 0x7b, 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x9b, 0x7e, 0x85, 0x42, 0x2d, 0xb6, 0x37, - 0xdd, 0x62, 0xed, 0x43, 0xb0, 0x92, 0xd8, 0x9b, 0xf8, 0xa1, 0xcc, 0x20, 0x59, 0x99, 0xd3, 0x2f, - 0xc5, 0x76, 0x27, 0xd6, 0x1f, 0x0d, 0x10, 0xd0, 0x71, 0x8a, 0x59, 0x24, 0x2b, 0xf3, 0xfd, 0x04, - 0x0c, 0x74, 0xe6, 0x58, 0x1f, 0x35, 0x87, 0x64, 0x65, 0x21, 0x71, 0x3a, 0x91, 0x5d, 0xea, 0xcb, - 0x1c, 0xe9, 0xd4, 0x64, 0x05, 0xf6, 0x32, 0x07, 0x9a, 0x0b, 0xf5, 0x76, 0x91, 0x68, 0x15, 0x88, - 0x4f, 0x51, 0x66, 0x90, 0x63, 0x65, 0x0a, 0xe8, 0xfb, 0xcc, 0xf1, 0xc8, 0x0d, 0xe4, 0xff, 0xbf, - 0x86, 0x1b, 0x6e, 0x30, 0x78, 0x72, 0x23, 0xc9, 0x16, 0xc1, 0xcd, 0xf9, 0xd6, 0x6f, 0x20, 0xed, - 0x06, 0xda, 0x78, 0x82, 0x5a, 0x99, 0x34, 0x18, 0x2d, 0xd1, 0x6a, 0xb3, 0x5f, 0xe6, 0xce, 0x7c, - 0x09, 0xe6, 0x82, 0xf6, 0xf5, 0x17, 0x0d, 0x56, 0x17, 0x64, 0xb3, 0x20, 0x15, 0x3e, 0x06, 0xe9, - 0x29, 0x83, 0x87, 0xa8, 0xd1, 0x2a, 0x66, 0x38, 0xc8, 0x1e, 0x6f, 0x9d, 0x79, 0xee, 0x5c, 0x88, - 0x2e, 0x58, 0x32, 0x3f, 0x91, 0xc0, 0xdc, 0xe7, 0x76, 0x15, 0x33, 0xf2, 0x48, 0xd3, 0xc9, 0x0f, - 0x3d, 0xe2, 0x32, 0xb8, 0x05, 0x64, 0x5c, 0xf6, 0x41, 0x4c, 0x69, 0xeb, 0x43, 0xe7, 0x22, 0x9d, - 0x73, 0xc3, 0xf7, 0xc1, 0x94, 0x27, 0xe4, 0x8a, 0x57, 0xc3, 0x00, 0x5a, 0x6f, 0x13, 0x72, 0xdb, - 0x20, 0x8d, 0xea, 0xa7, 0xd8, 0x3d, 0xd2, 0x81, 0x4f, 0xce, 0xbf, 0xb3, 0x08, 0x4c, 0x45, 0x7c, - 0x93, 0x97, 0x07, 0x8f, 0x77, 0xf4, 0xfb, 0xf3, 0x23, 0xf0, 0x1c, 0x90, 0xef, 0xef, 0xed, 0xcc, - 0x4b, 0x5a, 0x3b, 0x03, 0x2e, 0x26, 0x15, 0x3f, 0x20, 0xce, 0xb1, 0x51, 0x21, 0xf0, 0xbf, 0x64, - 0x30, 0xbe, 0xe5, 0xf0, 0x3d, 0x87, 0xc3, 0xa3, 0x4f, 0x0f, 0xcf, 0x92, 0xf9, 0xdf, 0xd4, 0xaf, - 0xff, 0xf3, 0x7f, 0xfe, 0x24, 0xf5, 0x75, 0x2a, 0xf3, 0xdf, 0x29, 0xf5, 0x78, 0x3d, 0x7c, 0xa1, - 0xed, 0xf7, 0x3e, 0xab, 0x9e, 0x46, 0xd2, 0x47, 0x4b, 0x3d, 0x8d, 0x66, 0x84, 0x96, 0x7a, 0x1a, - 0xf1, 0xce, 0x96, 0xea, 0x12, 0x1b, 0x3b, 0x98, 0x51, 0x47, 0x3d, 0xf5, 0x62, 0x0b, 0xa7, 0x11, - 0x4f, 0x6a, 0xa9, 0xa7, 0xb1, 0x0b, 0x15, 0x8e, 0x23, 0xeb, 0x5d, 0x77, 0x6d, 0xa9, 0xa7, 0xd1, - 0xd8, 0xf6, 0x3d, 0x97, 0x39, 0xb6, 0x43, 0x6a, 0xc6, 0x89, 0x9a, 0x6d, 0xf9, 0x4a, 0x22, 0x6c, - 0x6e, 0x52, 0x8e, 0x9b, 0x54, 0xe4, 0x26, 0x18, 0xe2, 0x20, 0x07, 0xf5, 0xa8, 0x2d, 0xf5, 0xb4, - 0x1b, 0xab, 0x5a, 0xea, 0x69, 0xe2, 0x4d, 0x87, 0x73, 0xf6, 0x7d, 0xec, 0x89, 0xf1, 0x45, 0x6a, - 0xf7, 0x16, 0xfc, 0x13, 0x09, 0x00, 0xff, 0xc0, 0xc5, 0xf5, 0xf8, 0x66, 0x0e, 0x3d, 0x2b, 0xce, - 0xfc, 0x5a, 0x66, 0xf5, 0x8c, 0x13, 0x2f, 0x48, 0x59, 0xf8, 0x2b, 0x60, 0xfc, 0x13, 0x4a, 0x8f, - 0x3c, 0x1b, 0xce, 0xe5, 0x5d, 0xaf, 0xac, 0xe5, 0x77, 0xab, 0xc1, 0x9d, 0x7e, 0x15, 0xcd, 0x79, - 0xa1, 0x59, 0x81, 0xdf, 0x39, 0xd3, 0xd7, 0x78, 0x5d, 0xd4, 0x82, 0xbf, 0x25, 0x81, 0x71, 0xff, - 0x8e, 0xbf, 0xca, 0xd6, 0x0c, 0x78, 0x2a, 0xca, 0xac, 0x0b, 0x14, 0xdf, 0x4d, 0xbf, 0x24, 0x0a, - 0xbe, 0x0d, 0x7f, 0x27, 0x81, 0x89, 0x30, 0xd8, 0xc0, 0xb5, 0x33, 0xa1, 0x24, 0xe2, 0xd2, 0x40, - 0x24, 0x4f, 0x05, 0x92, 0x6a, 0x3a, 0xab, 0x1e, 0x6b, 0x2f, 0x46, 0x82, 0xcb, 0x24, 0xef, 0xa3, - 0xe1, 0x31, 0xea, 0xf1, 0xba, 0x36, 0x2c, 0x0b, 0xfc, 0x63, 0x09, 0x2c, 0xef, 0x63, 0x56, 0xa9, - 0xf3, 0x60, 0xdc, 0x09, 0x5e, 0xbb, 0x96, 0x70, 0xbc, 0x9f, 0x9f, 0x49, 0xef, 0x0a, 0x93, 0xd6, - 0xb4, 0xef, 0xaa, 0xc7, 0x1a, 0x7e, 0x59, 0x80, 0x52, 0x16, 0xfe, 0x99, 0x04, 0xc6, 0xb7, 0x49, - 0x83, 0x30, 0xd2, 0xeb, 0x69, 0x83, 0x74, 0x39, 0xed, 0x62, 0xb1, 0x7c, 0x1d, 0xcc, 0x02, 0x50, - 0xb4, 0x8d, 0x7b, 0xa4, 0x59, 0xf4, 0x58, 0x1d, 0x8e, 0x80, 0x8b, 0x60, 0xfc, 0x3e, 0xff, 0xd4, - 0xe0, 0x0c, 0x18, 0x75, 0x08, 0xae, 0x82, 0xb1, 0x67, 0x8e, 0xc1, 0xc8, 0xd3, 0xf3, 0x60, 0xf6, - 0x24, 0x67, 0x38, 0x0e, 0x07, 0xe1, 0x1a, 0xe5, 0x06, 0x81, 0x29, 0x24, 0xf9, 0x2e, 0x99, 0x7d, - 0x59, 0x97, 0xfc, 0x0f, 0x09, 0x4c, 0xdc, 0x21, 0xec, 0x33, 0x8f, 0x38, 0xcd, 0x9f, 0xa7, 0x53, - 0xfe, 0x58, 0x6a, 0x17, 0x1f, 0x66, 0xf6, 0xc0, 0x4a, 0xbf, 0x66, 0xa3, 0xa3, 0x70, 0xc8, 0x26, - 0xe3, 0x0b, 0xa9, 0x3c, 0x22, 0xec, 0xcb, 0xc3, 0x1b, 0x67, 0xd9, 0xf7, 0x43, 0xae, 0x20, 0xb4, - 0xf2, 0xc7, 0x63, 0x60, 0xfe, 0x0e, 0x61, 0x61, 0x6d, 0xe1, 0x2b, 0xbf, 0x35, 0x7c, 0x42, 0x0d, - 0xf8, 0xd3, 0xaf, 0xce, 0x9a, 0xf9, 0xd1, 0xa8, 0xb0, 0xe0, 0x7f, 0x64, 0xf8, 0xb5, 0x7c, 0x86, - 0x0d, 0x9d, 0x82, 0x25, 0x08, 0xcd, 0xfd, 0x1a, 0x9f, 0x56, 0x72, 0x2d, 0x91, 0xc7, 0x06, 0x76, - 0x2e, 0x3d, 0x6b, 0xde, 0x8b, 0x16, 0xe3, 0xf9, 0xe5, 0x05, 0xbd, 0x45, 0xff, 0xd5, 0x81, 0xbc, - 0xb1, 0x8c, 0x38, 0xb8, 0xf6, 0xef, 0xe5, 0xeb, 0xd6, 0xf6, 0x7d, 0x0d, 0x19, 0xa8, 0xb0, 0x37, - 0xe1, 0x0d, 0x28, 0xa8, 0x07, 0x2c, 0x0f, 0xb4, 0xd3, 0x7d, 0x91, 0xd6, 0x58, 0x42, 0x86, 0xff, - 0x26, 0x83, 0xd1, 0x9d, 0x4a, 0x9d, 0xc2, 0x41, 0xbf, 0xc3, 0xb8, 0x5e, 0x39, 0xef, 0xb7, 0x36, - 0x61, 0xc8, 0x78, 0x69, 0xca, 0xcc, 0xff, 0xa7, 0xda, 0xc5, 0x3f, 0x48, 0x81, 0x69, 0x52, 0xa9, - 0x53, 0xe4, 0xfa, 0x85, 0x18, 0x98, 0x10, 0x23, 0xc7, 0xae, 0xc0, 0x85, 0x07, 0x9e, 0x69, 0x62, - 0xa7, 0x59, 0x40, 0x3b, 0xc1, 0x54, 0x7a, 0x7e, 0xbb, 0xfb, 0x38, 0x24, 0x66, 0x33, 0xdb, 0x00, - 0xc6, 0xaf, 0xad, 0x40, 0x3b, 0xe4, 0x65, 0xbd, 0xfb, 0x08, 0xc8, 0xef, 0xac, 0x6d, 0xc0, 0xfb, - 0xe0, 0x5d, 0x9d, 0x30, 0xcf, 0xb1, 0x48, 0x15, 0x3d, 0xab, 0x13, 0x0b, 0xb1, 0x3a, 0x41, 0x0e, - 0x71, 0xa9, 0xe7, 0x54, 0x08, 0x32, 0x5c, 0xc4, 0x88, 0x69, 0x53, 0x07, 0x3b, 0x46, 0xa3, 0x89, - 0x3c, 0x0b, 0x1f, 0x63, 0xa3, 0x81, 0xcb, 0x0d, 0x92, 0xcf, 0x2e, 0x81, 0x89, 0x93, 0x9c, 0xe5, - 0x99, 0x65, 0xe2, 0xc0, 0xc9, 0x85, 0x11, 0xf1, 0xdf, 0x2f, 0x7d, 0x74, 0xf7, 0x7d, 0x20, 0x6f, - 0xae, 0x6d, 0xc2, 0x4d, 0x90, 0x7d, 0x81, 0xdc, 0x2a, 0x25, 0x2e, 0xb2, 0x28, 0x43, 0xe4, 0xc4, - 0x70, 0x59, 0x1e, 0x8e, 0x03, 0xf1, 0x60, 0x27, 0xee, 0xde, 0x93, 0xb3, 0xa3, 0x07, 0xdf, 0x2f, - 0xf5, 0xd4, 0x3f, 0xaf, 0xc7, 0x97, 0x32, 0xf3, 0xd1, 0xec, 0xc4, 0xd7, 0x0a, 0xfe, 0xfb, 0xce, - 0x63, 0x08, 0x7b, 0x96, 0xe0, 0x5f, 0x49, 0x60, 0x7a, 0x9b, 0x10, 0x5b, 0xfc, 0x8a, 0xc5, 0x27, - 0xbe, 0x99, 0x32, 0xe8, 0x43, 0x61, 0xdb, 0xad, 0xcc, 0xe6, 0x99, 0x91, 0x3f, 0xf6, 0x03, 0x79, - 0x9e, 0xf7, 0x36, 0x22, 0x65, 0x15, 0x01, 0xd8, 0xa3, 0x25, 0xc3, 0xaa, 0x1a, 0xd6, 0xa1, 0x0b, - 0x2f, 0xf5, 0x04, 0xf6, 0xed, 0xe0, 0x6f, 0x07, 0x06, 0xc6, 0xfc, 0x11, 0xf8, 0x08, 0x9c, 0x7b, - 0x68, 0x98, 0x84, 0x7a, 0x0c, 0x0e, 0x20, 0x1a, 0xc8, 0x7c, 0x59, 0xc0, 0x5f, 0x82, 0x8b, 0xd1, - 0xfd, 0x64, 0x81, 0xb0, 0x3a, 0x98, 0xdf, 0x71, 0x1c, 0xea, 0xf0, 0x5c, 0xbf, 0x4d, 0x18, 0x36, - 0x1a, 0xee, 0xd0, 0x0a, 0xae, 0x09, 0x05, 0x6f, 0xc2, 0x95, 0xd8, 0x81, 0x71, 0xa9, 0xcf, 0x0c, - 0x56, 0xaf, 0x06, 0x52, 0x7f, 0x5b, 0x02, 0xf0, 0x0e, 0x61, 0xc9, 0x46, 0xef, 0xec, 0x82, 0x22, - 0xc1, 0x31, 0x10, 0xc6, 0xdb, 0x02, 0xc6, 0x95, 0xcc, 0xa5, 0x28, 0x0c, 0x8e, 0xa0, 0x4c, 0xab, - 0x4d, 0xf5, 0x94, 0x97, 0x0f, 0xa2, 0x21, 0x84, 0xbf, 0x21, 0x81, 0x85, 0x7d, 0xea, 0x32, 0x2e, - 0x51, 0xb0, 0x0a, 0x20, 0x2f, 0xd7, 0x53, 0x0e, 0xd4, 0xae, 0x0a, 0xed, 0xd7, 0x33, 0xd7, 0xa2, - 0xda, 0x6d, 0xea, 0x32, 0x8e, 0x40, 0xfc, 0x2e, 0xe9, 0xc3, 0xe8, 0x38, 0xc5, 0xdf, 0x4b, 0x60, - 0x71, 0xab, 0x4e, 0x2a, 0x47, 0x61, 0xce, 0xde, 0xc7, 0x0e, 0x36, 0xdd, 0x6f, 0xc8, 0xa7, 0xef, - 0x08, 0xb8, 0x45, 0xf8, 0xe1, 0x59, 0x3e, 0x6d, 0x0b, 0x54, 0xea, 0x21, 0x61, 0x7d, 0xdd, 0x1b, - 0xfe, 0xab, 0x04, 0xde, 0x10, 0x66, 0xf8, 0xcf, 0xb3, 0xbc, 0x99, 0xfd, 0x56, 0x0c, 0xfa, 0x4c, - 0x18, 0x74, 0x0f, 0xee, 0x0e, 0x61, 0x50, 0xd0, 0x84, 0x89, 0xbf, 0xcb, 0x49, 0x18, 0x47, 0x8f, - 0x5a, 0xf0, 0x1f, 0x25, 0x70, 0x5e, 0x98, 0xc6, 0x9d, 0xe5, 0x5b, 0xb3, 0x28, 0x53, 0x78, 0x49, - 0x8b, 0xb8, 0xb3, 0xc5, 0x9b, 0xdf, 0x56, 0x21, 0xfe, 0x27, 0x3b, 0xe9, 0xbf, 0x95, 0xda, 0xc5, - 0xbf, 0x96, 0x60, 0x6d, 0xc0, 0xb3, 0x42, 0xf4, 0xc7, 0x0c, 0x94, 0xcb, 0xa1, 0x67, 0x75, 0xa3, - 0x52, 0x47, 0x6e, 0x9d, 0x7a, 0x8d, 0xaa, 0x08, 0xf9, 0x65, 0x82, 0x3c, 0x97, 0x54, 0x91, 0x61, - 0x21, 0xbb, 0x81, 0x2b, 0x04, 0xd1, 0x9a, 0x48, 0x0e, 0x55, 0x5a, 0xf1, 0x4c, 0x62, 0xf9, 0xcd, - 0x2a, 0xaa, 0x50, 0x93, 0x0f, 0xae, 0xa4, 0x3f, 0x03, 0xab, 0xfd, 0x8a, 0x54, 0x1e, 0xba, 0xc3, - 0x87, 0x8c, 0x61, 0x1f, 0xc3, 0x9f, 0x82, 0xf3, 0x15, 0x6c, 0x92, 0xc6, 0x16, 0x76, 0x49, 0x20, - 0x83, 0x77, 0xdd, 0x50, 0x07, 0x63, 0xfe, 0x0f, 0xfa, 0xc3, 0x06, 0xaf, 0x4b, 0x62, 0x97, 0x17, - 0xe1, 0x42, 0x2c, 0x78, 0xf1, 0x25, 0xed, 0x07, 0x60, 0xa5, 0x68, 0x51, 0x56, 0x27, 0x4e, 0xa0, - 0x89, 0x07, 0x8c, 0x48, 0x20, 0xff, 0x20, 0x16, 0xd6, 0x87, 0x55, 0x3c, 0x52, 0xfa, 0xcb, 0xc9, - 0x76, 0xf1, 0x4f, 0x27, 0xe1, 0xd7, 0x12, 0x58, 0x2c, 0xa2, 0x92, 0xff, 0xf3, 0x45, 0xe4, 0xfc, - 0xbf, 0x00, 0xe7, 0x0f, 0xf5, 0xfd, 0xad, 0xdc, 0x1d, 0xdf, 0x74, 0x64, 0x3b, 0xf4, 0x29, 0xa9, - 0xb0, 0x61, 0xb7, 0x2c, 0x3d, 0x6f, 0x51, 0x8b, 0x7c, 0x14, 0x98, 0xc6, 0xa9, 0xb3, 0x3f, 0x00, - 0xe7, 0x4b, 0x0f, 0xb6, 0xd1, 0x46, 0x6e, 0xab, 0x81, 0x3d, 0x97, 0xa0, 0x4f, 0x8c, 0x0a, 0xb1, - 0x5c, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0x2d, 0x37, 0x68, 0x59, 0x35, 0xb1, 0xcb, 0x88, 0xa3, 0x7e, - 0xb2, 0xbb, 0xb5, 0xb3, 0xf7, 0x60, 0x27, 0xcf, 0x4e, 0x98, 0x26, 0xaf, 0xe7, 0xd7, 0x0a, 0x08, - 0x2c, 0x9d, 0xe4, 0x5c, 0x6a, 0x12, 0x61, 0x4d, 0xf7, 0x0b, 0x9e, 0x4b, 0x8f, 0x35, 0x71, 0xb5, - 0x8a, 0xb3, 0xb2, 0x94, 0x1a, 0xd5, 0xe6, 0xb1, 0xed, 0xff, 0x2c, 0x63, 0x50, 0x4b, 0x7d, 0xea, - 0x52, 0x4b, 0xbb, 0x10, 0x9d, 0x39, 0xc9, 0xd5, 0x28, 0xcd, 0x99, 0x86, 0x49, 0x0a, 0x3d, 0x94, - 0x85, 0x01, 0x94, 0xfa, 0x3e, 0xaf, 0x63, 0x36, 0xe0, 0x2e, 0xb8, 0xd3, 0x5b, 0xc7, 0x78, 0x2e, - 0x71, 0xba, 0x35, 0x4c, 0x1d, 0x1f, 0x13, 0x64, 0x13, 0xc7, 0x34, 0x5c, 0x97, 0xbb, 0x2e, 0xa3, - 0x08, 0x57, 0x2a, 0xc4, 0x75, 0x63, 0x35, 0x4f, 0x5e, 0x7f, 0x8d, 0xca, 0xe8, 0x9c, 0xfe, 0x31, - 0x90, 0x37, 0xd7, 0x6f, 0xc2, 0x22, 0x98, 0xd9, 0x7d, 0xdb, 0x44, 0x18, 0x31, 0x82, 0x6d, 0xca, - 0xf2, 0x70, 0x0d, 0xe4, 0xd3, 0x43, 0xbd, 0x60, 0x3f, 0xfe, 0x7d, 0x19, 0xcc, 0x81, 0xc9, 0x12, - 0x76, 0x8d, 0x8a, 0x68, 0x61, 0x53, 0x13, 0x12, 0xf8, 0x73, 0x29, 0xd6, 0xd5, 0xfe, 0x54, 0x9a, - 0x48, 0xa5, 0x27, 0xbf, 0xc8, 0x15, 0xf7, 0x77, 0x73, 0xf7, 0x48, 0x13, 0xa5, 0xee, 0x2a, 0x60, - 0xe5, 0x24, 0x87, 0x4d, 0xfc, 0x9c, 0x5a, 0x39, 0x6c, 0x1b, 0x81, 0xaa, 0x1c, 0xf6, 0x58, 0x9d, - 0x35, 0x6d, 0x02, 0x27, 0xd2, 0xe3, 0x94, 0x0f, 0xb4, 0xbb, 0xbf, 0x0c, 0xde, 0x1c, 0x44, 0x49, - 0x1d, 0xe3, 0x39, 0x71, 0xe0, 0x07, 0xd9, 0x5f, 0x00, 0x73, 0x60, 0x54, 0xf0, 0x9d, 0x4b, 0x8f, - 0x31, 0x7a, 0x44, 0x2c, 0x70, 0x1d, 0xac, 0x74, 0x49, 0x74, 0xe2, 0x7a, 0x0d, 0xf6, 0x90, 0x35, - 0x76, 0xad, 0x07, 0xa4, 0x42, 0xad, 0xaa, 0xdb, 0xa9, 0x30, 0xf7, 0x3e, 0x02, 0xff, 0x22, 0x75, - 0x5a, 0xee, 0x7f, 0x90, 0x26, 0x64, 0x65, 0x54, 0xbb, 0x1a, 0xfa, 0x5c, 0xc4, 0x41, 0x55, 0x81, - 0x47, 0xed, 0x08, 0x2d, 0xac, 0x0e, 0x26, 0x12, 0x10, 0x4a, 0xbf, 0x06, 0xd2, 0x7e, 0x07, 0x0f, - 0xe1, 0x1d, 0x07, 0x5b, 0xcc, 0x45, 0x7c, 0x10, 0x9c, 0x25, 0x58, 0x09, 0xfa, 0x7a, 0xb8, 0x18, - 0x2c, 0x8a, 0x51, 0xb8, 0xba, 0x05, 0xc6, 0x70, 0xd5, 0x34, 0x2c, 0x58, 0x88, 0xb1, 0x5a, 0xd5, - 0x18, 0x99, 0x70, 0x0d, 0x4e, 0x66, 0xb8, 0x8c, 0x57, 0x6b, 0xc7, 0x04, 0x19, 0x56, 0x8d, 0x3a, - 0xa6, 0xf0, 0xbe, 0xf2, 0x2a, 0x98, 0x89, 0x1e, 0xcc, 0x48, 0xf2, 0xad, 0xa1, 0x7c, 0x7d, 0xe0, - 0x6b, 0x43, 0x92, 0xd4, 0xd9, 0x05, 0x17, 0x3f, 0xed, 0x46, 0xcb, 0x68, 0x0c, 0x18, 0xf6, 0xee, - 0x3f, 0xbf, 0x0c, 0xe0, 0x49, 0x2e, 0x3a, 0xc3, 0x2f, 0x09, 0x1c, 0x4b, 0xcb, 0x65, 0xec, 0x3c, - 0x57, 0xc0, 0xc5, 0xc4, 0x62, 0x19, 0x3f, 0xcf, 0x35, 0x0c, 0x97, 0xc1, 0x19, 0x6d, 0x0a, 0x8c, - 0xa5, 0x65, 0x6a, 0x11, 0x90, 0x42, 0xd2, 0xe3, 0xc9, 0x8e, 0x3b, 0x96, 0xc7, 0x45, 0x18, 0xdb, - 0xf8, 0x59, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0xbe, 0x1f, 0x2b, 0xb3, 0x2b, 0x00, 0x00, + 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0xfd, 0x7e, 0x68, 0x2f, 0x45, + 0x51, 0xa0, 0xe8, 0xa9, 0x40, 0x4f, 0x05, 0xda, 0x4b, 0x6f, 0x3d, 0xb4, 0x48, 0x81, 0xa2, 0x87, + 0xf6, 0xd4, 0x9e, 0x7b, 0x69, 0x11, 0xa0, 0x87, 0x7e, 0x60, 0x66, 0x77, 0xc9, 0xdd, 0x25, 0x69, + 0x99, 0x76, 0x91, 0xe4, 0x10, 0xef, 0xcc, 0xfc, 0x3f, 0x7e, 0xff, 0x99, 0xff, 0xfc, 0x3f, 0x86, + 0x02, 0x1a, 0x39, 0xc1, 0xa6, 0xdd, 0x20, 0xae, 0x6a, 0x3b, 0x94, 0x51, 0x35, 0x18, 0xda, 0x65, + 0x15, 0x1f, 0x94, 0x0d, 0x76, 0x40, 0x6b, 0x07, 0xe4, 0x98, 0x38, 0x4d, 0x56, 0x37, 0xac, 0xc3, + 0xbc, 0xa0, 0x81, 0xab, 0x87, 0x8e, 0x5d, 0xc9, 0x1f, 0x62, 0x46, 0x9e, 0xe1, 0x66, 0x3e, 0x14, + 0x90, 0xef, 0xb0, 0xa6, 0x57, 0x0e, 0x29, 0x3d, 0x6c, 0x10, 0x15, 0xdb, 0x86, 0x8a, 0x2d, 0x8b, + 0x32, 0xcc, 0x0c, 0x6a, 0xb9, 0x3e, 0x7b, 0x1a, 0x05, 0xab, 0x62, 0x54, 0xf6, 0x6a, 0x6a, 0xcd, + 0x20, 0x8d, 0xea, 0x81, 0x89, 0xdd, 0xa3, 0x80, 0xe2, 0x72, 0x92, 0x82, 0x98, 0x36, 0x6b, 0x06, + 0x8b, 0x6f, 0x26, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x07, 0xeb, 0x6f, 0x27, 0x2c, 0xb2, 0x31, 0xab, + 0x13, 0xcb, 0x33, 0xc5, 0xc7, 0x01, 0xff, 0x0a, 0x71, 0x24, 0x08, 0x5d, 0xaf, 0xac, 0x9a, 0xc4, + 0x75, 0xf1, 0x21, 0x09, 0x28, 0xae, 0xf4, 0x52, 0x68, 0x09, 0x92, 0xd5, 0x24, 0x1a, 0x66, 0x98, + 0xc4, 0x65, 0xd8, 0xb4, 0x03, 0x82, 0x1b, 0xe2, 0x9f, 0x4a, 0xee, 0x90, 0x58, 0x39, 0xf7, 0x19, + 0x3e, 0x3c, 0x24, 0x8e, 0x4a, 0x6d, 0xb1, 0x1f, 0xbd, 0x7b, 0x93, 0xf9, 0xfb, 0xcb, 0x60, 0xbe, + 0x58, 0x32, 0xd8, 0xfd, 0xda, 0x4e, 0x67, 0xd7, 0xe1, 0x13, 0x30, 0xe3, 0x1a, 0xd6, 0x61, 0x83, + 0x1c, 0x58, 0xc4, 0x65, 0xa4, 0xba, 0x7c, 0x09, 0x49, 0xca, 0x94, 0x76, 0x33, 0x7f, 0xc6, 0x39, + 0xe4, 0x93, 0x92, 0xf2, 0x7b, 0x82, 0x5f, 0x9f, 0xf6, 0xc5, 0xf9, 0x23, 0x58, 0x07, 0xa3, 0x9e, + 0x67, 0x54, 0x97, 0x25, 0x24, 0x29, 0x93, 0xa5, 0x87, 0xed, 0xe2, 0x67, 0x3f, 0x92, 0xa4, 0xdf, + 0x90, 0xee, 0x7d, 0x1f, 0xe7, 0x6a, 0xc5, 0xdc, 0xed, 0xb5, 0xdc, 0xad, 0x27, 0xa7, 0x37, 0x5b, + 0xb9, 0xe8, 0x70, 0x73, 0x98, 0xe1, 0xba, 0xd6, 0xd2, 0x85, 0x06, 0xb8, 0x0f, 0xc6, 0x03, 0x0b, + 0x52, 0x48, 0x7e, 0x2d, 0x0b, 0x02, 0x39, 0xf0, 0x2e, 0x98, 0xaa, 0x35, 0x28, 0x66, 0x07, 0xc7, + 0xb8, 0xe1, 0x91, 0x65, 0x19, 0x49, 0x4a, 0xaa, 0x74, 0xbd, 0x5d, 0xfc, 0x8e, 0xb6, 0x70, 0x9b, + 0xcf, 0x23, 0x31, 0x8f, 0x84, 0x87, 0x15, 0xe4, 0xb5, 0xbc, 0xf6, 0x95, 0x14, 0x65, 0xd0, 0x81, + 0x18, 0x3c, 0xe2, 0xdf, 0xf0, 0x0a, 0x98, 0xae, 0x52, 0xaf, 0xdc, 0x20, 0x81, 0xb0, 0x51, 0x24, + 0x29, 0x92, 0x3e, 0xe5, 0xcf, 0xf9, 0x24, 0xab, 0x60, 0xca, 0xb0, 0xd8, 0xbb, 0x9b, 0x01, 0xc5, + 0x18, 0x92, 0x14, 0x59, 0x07, 0x62, 0xaa, 0x23, 0xc3, 0x8b, 0x52, 0x8c, 0x23, 0x49, 0x19, 0xd5, + 0xa7, 0xbc, 0x08, 0x89, 0x2f, 0x63, 0x43, 0x0b, 0x28, 0xce, 0x21, 0x49, 0x19, 0x13, 0x32, 0x36, + 0x34, 0x9f, 0xe0, 0x2a, 0x98, 0xa9, 0x19, 0x27, 0xa4, 0xda, 0x11, 0x32, 0x81, 0x24, 0x65, 0x5c, + 0x9f, 0x0e, 0x26, 0xe3, 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xce, 0x05, 0x44, 0xa1, 0xa4, 0x37, + 0x00, 0x28, 0x53, 0xda, 0x08, 0x28, 0x00, 0x92, 0x94, 0x09, 0x7d, 0x92, 0xcf, 0x74, 0xc0, 0xba, + 0xcc, 0x31, 0xac, 0xc3, 0x80, 0x60, 0x8a, 0x3b, 0x80, 0x3e, 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, + 0x8c, 0xb8, 0x01, 0xc5, 0x1b, 0x48, 0x52, 0xa6, 0x75, 0x20, 0xa6, 0x62, 0x06, 0x77, 0x60, 0xcc, + 0x20, 0x49, 0x99, 0xf1, 0x0d, 0x0e, 0x51, 0xdc, 0x03, 0x80, 0xdf, 0xba, 0x80, 0x60, 0x16, 0x49, + 0xca, 0xac, 0x76, 0xe3, 0xcc, 0x93, 0xdf, 0xf3, 0x4c, 0xe2, 0x18, 0x95, 0x1d, 0xcb, 0x33, 0xf5, + 0x49, 0xce, 0xef, 0x0b, 0xdb, 0x07, 0x73, 0x9d, 0x7b, 0x1c, 0x48, 0x7c, 0x53, 0x48, 0x54, 0x06, + 0x48, 0x0c, 0xaf, 0x7f, 0x7e, 0x1f, 0xb3, 0xba, 0x90, 0x36, 0x63, 0x07, 0x5f, 0xbe, 0x44, 0x17, + 0x5c, 0xf0, 0x9d, 0xe9, 0x20, 0x29, 0x78, 0x55, 0x08, 0xfe, 0xe0, 0x2c, 0xc1, 0x9f, 0xfa, 0x01, + 0x21, 0x94, 0x1f, 0xb8, 0x68, 0x47, 0xdd, 0xa2, 0x15, 0x1b, 0xfb, 0x4a, 0xdf, 0x02, 0xb3, 0x6e, + 0xfc, 0xfc, 0xe6, 0x90, 0xa4, 0xcc, 0xe9, 0x33, 0x6e, 0xec, 0x00, 0x3b, 0x64, 0x1d, 0x5f, 0x98, + 0x47, 0x92, 0x32, 0x1f, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x02, 0x92, 0x94, 0x05, 0x7d, + 0xca, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x91, 0x03, 0x91, 0xa4, 0x40, 0x9f, 0x24, 0x94, 0xa2, 0x81, + 0x25, 0x87, 0xd8, 0x04, 0xf3, 0xad, 0x88, 0xf9, 0xc5, 0x22, 0x92, 0x95, 0x49, 0x7d, 0x31, 0x5c, + 0x7c, 0x10, 0xf1, 0x8f, 0x5b, 0x60, 0x8a, 0x5a, 0x84, 0x27, 0x09, 0x1e, 0xa1, 0x97, 0xcf, 0x8b, + 0xc0, 0x74, 0x21, 0xef, 0x07, 0xc5, 0x7c, 0x18, 0x14, 0xf3, 0x3b, 0x7c, 0xf5, 0xe3, 0x11, 0x1d, + 0x08, 0x62, 0x31, 0x82, 0x57, 0xc1, 0xb4, 0xcf, 0xea, 0xeb, 0x5a, 0x5e, 0xe2, 0xde, 0xf7, 0xf1, + 0x88, 0xee, 0x0b, 0xf4, 0x95, 0xc0, 0x2f, 0xc1, 0xa4, 0x89, 0xed, 0x00, 0xc7, 0x05, 0x11, 0x34, + 0x3e, 0x1c, 0x3e, 0x68, 0x7c, 0x8a, 0x6d, 0x01, 0x77, 0xc7, 0x62, 0x4e, 0x53, 0x9f, 0x30, 0x83, + 0x21, 0x3c, 0x01, 0x8b, 0x26, 0xb6, 0xed, 0xa4, 0xbd, 0x17, 0x85, 0x9e, 0x8f, 0x5f, 0x49, 0x8f, + 0x1d, 0xdb, 0x1f, 0x5f, 0xe1, 0x82, 0x99, 0x9c, 0x8f, 0x68, 0x0e, 0x7c, 0xcf, 0xd7, 0xbc, 0xfc, + 0x7a, 0x9a, 0x7d, 0xcf, 0xeb, 0xd5, 0x1c, 0x99, 0x87, 0x05, 0xb0, 0x6c, 0x51, 0x6b, 0x8b, 0x5a, + 0xc7, 0xc4, 0xe2, 0x99, 0x07, 0x37, 0xf6, 0xb0, 0xe9, 0x87, 0xb7, 0xe5, 0xb4, 0x08, 0x00, 0x03, + 0xd7, 0xe1, 0x16, 0x98, 0xeb, 0xa4, 0xb7, 0x00, 0xf1, 0x65, 0x71, 0xe2, 0xe9, 0x9e, 0x13, 0x7f, + 0x18, 0xd2, 0xe9, 0xb3, 0x1d, 0x16, 0x5f, 0xc8, 0x97, 0xa0, 0xe3, 0x49, 0xd1, 0xcb, 0xb6, 0x82, + 0xe4, 0xa1, 0xe3, 0xc2, 0x42, 0x28, 0xa8, 0x7b, 0xb1, 0xfe, 0x4c, 0x02, 0xcb, 0x71, 0xf1, 0xdd, + 0x24, 0xbb, 0x8c, 0x86, 0xd7, 0x51, 0xda, 0x6e, 0x17, 0x8b, 0xd9, 0xcb, 0x7a, 0x20, 0x12, 0x59, + 0xfe, 0x12, 0xe2, 0xa2, 0x11, 0x33, 0x58, 0x83, 0x68, 0x99, 0xfe, 0x8b, 0x55, 0xe2, 0x56, 0x1c, + 0x43, 0x64, 0xfa, 0xbc, 0x7e, 0x21, 0x8a, 0xb4, 0xd8, 0x41, 0x04, 0x7f, 0x53, 0x02, 0x4b, 0xdd, + 0x4d, 0x88, 0x62, 0xbd, 0x32, 0x7c, 0x9c, 0x2c, 0x69, 0xed, 0xa2, 0x9a, 0x85, 0x7b, 0xbd, 0x10, + 0x2f, 0xed, 0x0d, 0x44, 0xb6, 0xd8, 0x89, 0xad, 0x11, 0x58, 0xc7, 0x20, 0x9d, 0x0c, 0x05, 0x11, + 0x68, 0x19, 0x1e, 0x0f, 0x4a, 0x37, 0xdb, 0xc5, 0x77, 0xb2, 0x4b, 0x1d, 0xdb, 0x7d, 0xb2, 0x40, + 0xdf, 0x4a, 0x72, 0x3a, 0xa6, 0x72, 0x39, 0x1e, 0x49, 0x22, 0x7a, 0xff, 0x4a, 0x8a, 0x28, 0x0e, + 0x6e, 0x46, 0x44, 0xf1, 0xd5, 0xd7, 0xab, 0x1a, 0x4a, 0xb7, 0xdb, 0xc5, 0xad, 0x6c, 0x17, 0x9b, + 0xaf, 0x00, 0xd1, 0xf2, 0x53, 0x52, 0x61, 0x01, 0xf2, 0xab, 0x03, 0x56, 0xfb, 0x1b, 0xe0, 0xcb, + 0x8d, 0x18, 0xf0, 0x53, 0x09, 0x2c, 0xf4, 0xe2, 0xbe, 0xf6, 0x7a, 0xf5, 0x5a, 0x69, 0xb3, 0x5d, + 0x5c, 0xcf, 0x2e, 0xee, 0xf5, 0x81, 0x9b, 0xde, 0x1b, 0x8c, 0x72, 0xde, 0x4a, 0xa2, 0x7b, 0x0f, + 0x2c, 0xfa, 0x39, 0x80, 0x1e, 0x13, 0xc7, 0x31, 0xaa, 0xe4, 0x80, 0x35, 0x6d, 0xb2, 0xfc, 0x16, + 0x2f, 0x63, 0x4a, 0xe7, 0xda, 0xc5, 0xd1, 0xdf, 0x4f, 0x49, 0xb2, 0xbe, 0x20, 0x68, 0xee, 0x07, + 0x24, 0x0f, 0x9b, 0x36, 0x49, 0xff, 0x8b, 0x04, 0xc6, 0x83, 0x6a, 0x11, 0x82, 0x51, 0x0b, 0x9b, + 0xc4, 0xaf, 0x16, 0x75, 0xf1, 0x0d, 0x2f, 0x80, 0x71, 0x6c, 0x52, 0xcf, 0x62, 0xcb, 0x29, 0x91, + 0xfe, 0x83, 0x11, 0x34, 0x41, 0x8a, 0x1e, 0x89, 0xa2, 0x6c, 0x56, 0x2b, 0xbe, 0xaa, 0xf5, 0xf9, + 0x6d, 0x42, 0x6c, 0xe1, 0xde, 0xe9, 0x76, 0xf1, 0xa2, 0xb6, 0x14, 0x0e, 0xe3, 0xc6, 0xa6, 0xe8, + 0x51, 0x66, 0x15, 0x4c, 0x84, 0x8b, 0x70, 0x12, 0x8c, 0xdd, 0x2e, 0x7e, 0xf2, 0x60, 0x67, 0x7e, + 0x04, 0x4e, 0x80, 0xd1, 0x87, 0xfa, 0xe7, 0x3b, 0xf3, 0x52, 0xe1, 0x62, 0xbb, 0x78, 0x5e, 0x83, + 0x70, 0xfe, 0x14, 0x65, 0xe8, 0x51, 0xa6, 0x80, 0x32, 0x7c, 0x3e, 0x83, 0x5a, 0x69, 0x03, 0xcc, + 0xc4, 0x72, 0x04, 0x9c, 0x07, 0xf2, 0x11, 0x69, 0x06, 0x46, 0xf2, 0x4f, 0x58, 0x02, 0x63, 0x7e, + 0xa0, 0x4a, 0xbd, 0x42, 0x01, 0xe3, 0xb3, 0x16, 0x52, 0x37, 0xa5, 0xf4, 0x36, 0xb8, 0xd0, 0x3f, + 0x4d, 0xf4, 0xd1, 0x79, 0x3e, 0xaa, 0x73, 0x32, 0x2a, 0xe5, 0x17, 0x43, 0x29, 0xc9, 0x90, 0xdf, + 0x47, 0xca, 0x5e, 0x54, 0xca, 0xeb, 0x14, 0xdd, 0x5d, 0xfd, 0x85, 0xdf, 0x4b, 0xb5, 0x8b, 0xbf, + 0x95, 0x02, 0xbf, 0x2a, 0x65, 0x17, 0x8b, 0xa8, 0x6c, 0x30, 0x44, 0x6b, 0xa8, 0xdb, 0x27, 0x6a, + 0xbb, 0xbb, 0x16, 0x0b, 0xd3, 0x47, 0x13, 0x55, 0xa8, 0x69, 0x37, 0x8c, 0x8a, 0xb8, 0x55, 0x41, + 0xf7, 0x84, 0xb8, 0xe3, 0x21, 0x46, 0x51, 0x85, 0xbb, 0x22, 0x32, 0xb1, 0xd5, 0x44, 0x35, 0x82, + 0x99, 0xe7, 0x10, 0x97, 0xcb, 0xda, 0x0f, 0xf3, 0xc8, 0x57, 0x92, 0x68, 0x1d, 0xbe, 0x92, 0xa2, + 0x85, 0xf7, 0x57, 0x52, 0xac, 0x52, 0xcf, 0x3e, 0x02, 0xd7, 0x6e, 0x1b, 0x56, 0x15, 0x51, 0x8f, + 0x21, 0x93, 0x3a, 0x04, 0xe1, 0x32, 0xff, 0xec, 0x69, 0xa4, 0xf2, 0x75, 0xc6, 0x6c, 0xb7, 0xa0, + 0xaa, 0x87, 0x06, 0xab, 0x7b, 0xe5, 0x7c, 0x85, 0x9a, 0x2a, 0xdf, 0x8c, 0x1c, 0xa9, 0x50, 0xb7, + 0xe9, 0x32, 0x12, 0x0c, 0x83, 0xbd, 0xd1, 0x36, 0xa1, 0x76, 0x8a, 0x32, 0x5c, 0x3f, 0x77, 0x96, + 0xb5, 0x4a, 0x6d, 0xe3, 0xdd, 0x75, 0xb2, 0x9e, 0xdb, 0x2c, 0x6f, 0x6e, 0xe6, 0x36, 0x6f, 0x6e, + 0x54, 0x73, 0x78, 0xfd, 0x9d, 0x5b, 0xb9, 0x77, 0x36, 0xab, 0xb8, 0x5c, 0xad, 0xbd, 0x47, 0x6e, + 0xae, 0x6f, 0x66, 0x50, 0xab, 0x34, 0x13, 0xd6, 0x44, 0x02, 0x5c, 0xe6, 0x7f, 0x26, 0xc0, 0x72, + 0x12, 0x49, 0x18, 0x64, 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xed, 0x66, 0x24, + 0x24, 0x2b, 0x29, 0xfd, 0x02, 0x27, 0x08, 0x19, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x3a, 0xce, + 0x1a, 0x6b, 0x5e, 0x78, 0x83, 0x25, 0xe9, 0x17, 0xa3, 0xbc, 0xdb, 0x91, 0x46, 0xa6, 0x47, 0x6f, + 0xb4, 0x36, 0x94, 0x91, 0xac, 0xc8, 0x71, 0xbd, 0xbb, 0xdd, 0x32, 0xb1, 0x47, 0x6f, 0xac, 0xe1, + 0x19, 0x45, 0xb2, 0x32, 0x1a, 0xd7, 0xfb, 0x79, 0xa4, 0xc6, 0xec, 0xa7, 0xb7, 0x53, 0xb6, 0x8e, + 0x21, 0x59, 0x19, 0xeb, 0xd1, 0x1b, 0x56, 0xb0, 0xdf, 0x03, 0x97, 0x13, 0x5b, 0x15, 0x2b, 0x8c, + 0xc7, 0x91, 0xac, 0x8c, 0xeb, 0xcb, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0xfd, 0xd9, 0x23, 0x6d, 0x98, + 0xac, 0x9c, 0xeb, 0xc3, 0x1e, 0x6a, 0x7f, 0x0f, 0x2c, 0xc7, 0xd9, 0x23, 0x8d, 0xd5, 0x04, 0x92, + 0x95, 0x09, 0x7d, 0x29, 0xca, 0x5b, 0xea, 0x34, 0x59, 0x3d, 0xdb, 0x15, 0x2b, 0x35, 0x27, 0x45, + 0x69, 0x1d, 0xdb, 0xae, 0x78, 0x79, 0x9d, 0xd8, 0xae, 0x68, 0x33, 0x06, 0x90, 0xac, 0x4c, 0xc7, + 0xb7, 0xab, 0xd4, 0x6d, 0xcc, 0xfa, 0x1e, 0x53, 0xc7, 0xdc, 0x29, 0x24, 0x2b, 0x33, 0xbd, 0xc7, + 0x14, 0x5a, 0x4b, 0x92, 0xd6, 0x46, 0x0a, 0xb5, 0xe9, 0x57, 0x28, 0xd4, 0x62, 0x7b, 0xd3, 0x2d, + 0xd6, 0x3e, 0x04, 0x2b, 0x89, 0xbd, 0x89, 0x1f, 0xca, 0x0c, 0x92, 0x95, 0x39, 0xfd, 0x52, 0x6c, + 0x77, 0x62, 0xfd, 0xd1, 0x00, 0x01, 0x1d, 0xa7, 0x98, 0x45, 0xb2, 0x32, 0xdf, 0x4f, 0xc0, 0x40, + 0x67, 0x8e, 0xf5, 0x51, 0x73, 0x48, 0x56, 0x16, 0x12, 0xa7, 0x13, 0xd9, 0xa5, 0xbe, 0xcc, 0x91, + 0x4e, 0x4d, 0x56, 0x60, 0x2f, 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0x89, 0x56, 0x81, 0xf8, 0x14, + 0x65, 0x06, 0x39, 0x56, 0xa6, 0x80, 0xbe, 0xcf, 0x1c, 0x8f, 0xdc, 0x40, 0xfe, 0xff, 0x6b, 0xb8, + 0xe1, 0x06, 0x83, 0x27, 0x37, 0x92, 0x6c, 0x11, 0xdc, 0x9c, 0x6f, 0xfd, 0x06, 0xd2, 0x6e, 0xa0, + 0x8d, 0x27, 0xa8, 0x95, 0x49, 0x83, 0xd1, 0x12, 0xad, 0x36, 0xfb, 0x65, 0xee, 0xcc, 0x97, 0x60, + 0x2e, 0x68, 0x5f, 0x7f, 0xd6, 0x60, 0x75, 0x41, 0x36, 0x0b, 0x52, 0xe1, 0x63, 0x90, 0x9e, 0x32, + 0x78, 0x88, 0x1a, 0xad, 0x62, 0x86, 0x83, 0xec, 0xf1, 0xd6, 0x99, 0xe7, 0xce, 0x85, 0xe8, 0x82, + 0x25, 0xf3, 0x13, 0x09, 0xcc, 0x7d, 0x6e, 0x57, 0x31, 0x23, 0x8f, 0x34, 0x9d, 0xfc, 0xd0, 0x23, + 0x2e, 0x83, 0x5b, 0x40, 0xc6, 0x65, 0x1f, 0xc4, 0x94, 0xb6, 0x3e, 0x74, 0x2e, 0xd2, 0x39, 0x37, + 0x7c, 0x1f, 0x4c, 0x79, 0x42, 0xae, 0x78, 0x35, 0x0c, 0xa0, 0xf5, 0x36, 0x21, 0xb7, 0x0d, 0xd2, + 0xa8, 0x7e, 0x8a, 0xdd, 0x23, 0x1d, 0xf8, 0xe4, 0xfc, 0x3b, 0x8b, 0xc0, 0x54, 0xc4, 0x37, 0x79, + 0x79, 0xf0, 0x78, 0x47, 0xbf, 0x3f, 0x3f, 0x02, 0xcf, 0x01, 0xf9, 0xfe, 0xde, 0xce, 0xbc, 0xa4, + 0xfd, 0xc9, 0x15, 0x70, 0x31, 0xa9, 0xf8, 0x01, 0x71, 0x8e, 0x8d, 0x0a, 0x81, 0xff, 0x2e, 0x83, + 0xf1, 0x2d, 0x87, 0xef, 0x39, 0x1c, 0x1e, 0x7d, 0x7a, 0x78, 0x96, 0xcc, 0x7f, 0xa7, 0x7e, 0xf9, + 0x1f, 0xfe, 0xed, 0x27, 0xa9, 0xaf, 0x53, 0x99, 0xff, 0x48, 0xa9, 0xc7, 0xeb, 0xe1, 0x0b, 0x6d, + 0xbf, 0xf7, 0x59, 0xf5, 0x34, 0x92, 0x3e, 0x5a, 0xea, 0x69, 0x34, 0x23, 0xb4, 0xd4, 0xd3, 0x88, + 0x77, 0xb6, 0x54, 0x97, 0xd8, 0xd8, 0xc1, 0x8c, 0x3a, 0xea, 0xa9, 0x17, 0x5b, 0x38, 0x8d, 0x78, + 0x52, 0x4b, 0x3d, 0x8d, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xba, 0x6b, 0x4b, 0x3d, 0x8d, 0xc6, + 0xb6, 0xef, 0xb9, 0xcc, 0xb1, 0x1d, 0x52, 0x33, 0x4e, 0xd4, 0x6c, 0xcb, 0x57, 0x12, 0x61, 0x73, + 0x93, 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xa8, 0x47, 0x6d, 0xa9, 0xa7, 0xdd, + 0x58, 0xd5, 0x52, 0x4f, 0x13, 0x6f, 0x3a, 0x9c, 0xb3, 0xef, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, + 0xb7, 0xe0, 0x1f, 0x4a, 0x00, 0xf8, 0x07, 0x2e, 0xae, 0xc7, 0x37, 0x73, 0xe8, 0x59, 0x71, 0xe6, + 0xd7, 0x32, 0xab, 0x67, 0x9c, 0x78, 0x41, 0xca, 0xc2, 0x5f, 0x00, 0xe3, 0x9f, 0x50, 0x7a, 0xe4, + 0xd9, 0x70, 0x2e, 0xef, 0x7a, 0x65, 0x2d, 0xbf, 0x5b, 0x0d, 0xee, 0xf4, 0xab, 0x68, 0xce, 0x0b, + 0xcd, 0x0a, 0xfc, 0xce, 0x99, 0xbe, 0xc6, 0xeb, 0xa2, 0x16, 0xfc, 0x35, 0x09, 0x8c, 0xfb, 0x77, + 0xfc, 0x55, 0xb6, 0x66, 0xc0, 0x53, 0x51, 0x66, 0x5d, 0xa0, 0xf8, 0x6e, 0xfa, 0x25, 0x51, 0xf0, + 0x6d, 0xf8, 0x4f, 0x09, 0x4c, 0x84, 0xc1, 0x06, 0xae, 0x9d, 0x09, 0x25, 0x11, 0x97, 0x06, 0x22, + 0xf9, 0x03, 0x49, 0x40, 0xf9, 0x6d, 0x29, 0x9d, 0x55, 0x8f, 0xb5, 0x17, 0x63, 0xc1, 0x65, 0x92, + 0xf7, 0xf1, 0xf0, 0x28, 0xf5, 0x78, 0x5d, 0x1b, 0x9a, 0x65, 0x4d, 0xfb, 0xae, 0x7a, 0xac, 0xe1, + 0x97, 0xe5, 0x91, 0xb2, 0xf0, 0x8f, 0x25, 0x30, 0xbe, 0x4d, 0x1a, 0x84, 0x91, 0xde, 0xe3, 0x1f, + 0x64, 0x93, 0xd3, 0x2e, 0x16, 0xcb, 0xd7, 0xc1, 0x2c, 0x00, 0x45, 0xdb, 0xb8, 0x47, 0x9a, 0x45, + 0x8f, 0xd5, 0xe1, 0x08, 0xb8, 0x08, 0xc6, 0xef, 0xf3, 0x4f, 0x0d, 0xce, 0x80, 0x51, 0x87, 0xe0, + 0x2a, 0x18, 0x7b, 0xe6, 0x18, 0x8c, 0x3c, 0x3d, 0x0f, 0x66, 0x4f, 0x72, 0x86, 0xe3, 0x70, 0x10, + 0xae, 0x51, 0x6e, 0x10, 0x98, 0x42, 0xfe, 0xb6, 0x28, 0xd9, 0x97, 0xf5, 0x93, 0x7f, 0x95, 0xc0, + 0xc4, 0x1d, 0xc2, 0x3e, 0xf3, 0x88, 0xd3, 0xfc, 0xff, 0xf4, 0x94, 0x1f, 0x4b, 0xed, 0xe2, 0xc3, + 0xcc, 0x1e, 0x58, 0xe9, 0xd7, 0x01, 0x74, 0x14, 0x0e, 0x59, 0xf9, 0x7f, 0x21, 0x95, 0x47, 0x84, + 0x7d, 0x79, 0x78, 0xe3, 0x2c, 0xfb, 0x7e, 0xc8, 0x15, 0x84, 0x56, 0xfe, 0x78, 0x0c, 0xcc, 0xdf, + 0x21, 0x2c, 0x4c, 0xf8, 0xbe, 0xf2, 0x5b, 0xc3, 0x67, 0xb9, 0x80, 0x3f, 0xfd, 0xea, 0xac, 0x99, + 0x1f, 0x8d, 0x0a, 0x0b, 0xfe, 0x4b, 0x86, 0x5f, 0xcb, 0x67, 0xd8, 0xd0, 0xa9, 0x22, 0x82, 0x78, + 0xd9, 0xaf, 0x1b, 0x69, 0x25, 0xd7, 0x12, 0xc9, 0x65, 0x60, 0x3b, 0xd1, 0xb3, 0xe6, 0xbd, 0x68, + 0x31, 0x1e, 0xf4, 0x5f, 0x50, 0xf0, 0xf7, 0x5f, 0x1d, 0xc8, 0x1b, 0x4b, 0x53, 0x83, 0x0b, 0xf2, + 0x5e, 0xbe, 0x6e, 0xc1, 0xdd, 0xd7, 0x90, 0x81, 0x0a, 0x7b, 0xb3, 0xd0, 0x80, 0x2a, 0x77, 0xc0, + 0xf2, 0x40, 0x3b, 0xdd, 0x17, 0x69, 0x8d, 0x65, 0x49, 0xf8, 0xcf, 0x32, 0x18, 0xdd, 0xa9, 0xd4, + 0x29, 0x1c, 0xf4, 0xe3, 0x88, 0xeb, 0x95, 0xf3, 0x7e, 0xbf, 0x11, 0x86, 0x8c, 0x97, 0xa6, 0xcc, + 0xfc, 0x6f, 0xaa, 0x5d, 0xfc, 0xdd, 0x14, 0x98, 0x26, 0x95, 0x3a, 0x45, 0xae, 0x5f, 0x1d, 0x81, + 0x09, 0x31, 0x72, 0xec, 0x0a, 0x5c, 0x78, 0xe0, 0x99, 0x26, 0x76, 0x9a, 0x05, 0xb4, 0x13, 0x4c, + 0xa5, 0xe7, 0xb7, 0xbb, 0x2f, 0x36, 0x62, 0x36, 0xb3, 0x0d, 0x60, 0xfc, 0xda, 0x0a, 0xb4, 0x43, + 0x5e, 0xd6, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, 0x1c, + 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xab, 0x13, 0xe4, 0x10, 0x97, 0x7a, 0x4e, 0x85, 0x20, + 0xc3, 0x45, 0x8c, 0x98, 0x36, 0x75, 0xb0, 0x63, 0x34, 0x9a, 0xc8, 0xb3, 0xf0, 0x31, 0x36, 0x1a, + 0xb8, 0xdc, 0x20, 0xf9, 0xec, 0x12, 0x98, 0x38, 0xc9, 0x59, 0x9e, 0x59, 0x26, 0x0e, 0x9c, 0x5c, + 0x18, 0x11, 0xff, 0xfd, 0xdc, 0x47, 0x77, 0xdf, 0x07, 0xf2, 0xe6, 0xda, 0x26, 0xdc, 0x04, 0xd9, + 0x17, 0xc8, 0xad, 0x52, 0xe2, 0x22, 0x8b, 0x32, 0x44, 0x4e, 0x0c, 0x97, 0xe5, 0xe1, 0x38, 0x10, + 0xaf, 0x68, 0xe2, 0xee, 0x3d, 0x39, 0x3b, 0x7a, 0xf0, 0xfd, 0x52, 0x4f, 0xfd, 0xf3, 0x7a, 0x7c, + 0x29, 0x33, 0x1f, 0x4d, 0x18, 0x7c, 0xad, 0xe0, 0x3f, 0xba, 0x3c, 0x86, 0xb0, 0x67, 0x09, 0xfe, + 0x85, 0x04, 0xa6, 0xb7, 0x09, 0xb1, 0xc5, 0x4f, 0x4b, 0x7c, 0xe2, 0x9b, 0xa9, 0x4d, 0x3e, 0x14, + 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x19, 0xf9, 0x63, 0xbf, 0x5a, 0xe7, 0x79, 0xc3, 0x21, 0x52, 0x56, + 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x60, 0xdf, 0x0e, + 0x7e, 0xd0, 0x1f, 0x18, 0xf3, 0x47, 0xe0, 0x23, 0x70, 0xee, 0xa1, 0x61, 0x12, 0xea, 0x31, 0x38, + 0x80, 0x68, 0x20, 0xf3, 0x65, 0x01, 0x7f, 0x09, 0x2e, 0x46, 0xf7, 0x93, 0x05, 0xc2, 0xea, 0x60, + 0x7e, 0xc7, 0x71, 0xa8, 0xc3, 0xbb, 0xa1, 0x6d, 0xc2, 0xb0, 0xd1, 0x70, 0x87, 0x56, 0x70, 0x4d, + 0x28, 0x78, 0x13, 0xae, 0xc4, 0x0e, 0x8c, 0x4b, 0x7d, 0x66, 0xb0, 0x7a, 0x35, 0x90, 0xfa, 0xeb, + 0x12, 0x80, 0x77, 0x08, 0x4b, 0x76, 0x5f, 0x67, 0x17, 0x2e, 0x09, 0x8e, 0x81, 0x30, 0xde, 0x16, + 0x30, 0xae, 0x64, 0x2e, 0x45, 0x61, 0x70, 0x04, 0x65, 0x5a, 0x6d, 0xaa, 0xa7, 0xbc, 0x7c, 0x10, + 0x5d, 0x1a, 0xfc, 0x15, 0x09, 0x2c, 0xec, 0x53, 0x97, 0x71, 0x89, 0x82, 0x55, 0x00, 0x79, 0xb9, + 0x46, 0x6f, 0xa0, 0x76, 0x55, 0x68, 0xbf, 0x9e, 0xb9, 0x16, 0xd5, 0x6e, 0x53, 0x97, 0x71, 0x04, + 0xe2, 0xc7, 0x42, 0x1f, 0x46, 0xc7, 0x29, 0xfe, 0x46, 0x02, 0x8b, 0x5b, 0x75, 0x52, 0x39, 0x0a, + 0x73, 0xf6, 0x3e, 0x76, 0xb0, 0xe9, 0x7e, 0x43, 0x3e, 0x7d, 0x47, 0xc0, 0x2d, 0xc2, 0x0f, 0xcf, + 0xf2, 0x69, 0x5b, 0xa0, 0x52, 0x0f, 0x09, 0xeb, 0xeb, 0xde, 0xf0, 0x9f, 0x24, 0xf0, 0x86, 0x30, + 0xc3, 0x7f, 0x33, 0xe5, 0x1d, 0xe6, 0xb7, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x77, 0x08, + 0x83, 0x82, 0xce, 0x48, 0xfc, 0xb1, 0x4c, 0xc2, 0x38, 0x7a, 0xd4, 0x82, 0x7f, 0x27, 0x81, 0xf3, + 0xc2, 0x34, 0xee, 0x2c, 0xdf, 0x9a, 0x45, 0x99, 0xc2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xde, 0x91, + 0xb6, 0x0a, 0xf1, 0xbf, 0xa3, 0x49, 0xff, 0xb5, 0xd4, 0x2e, 0xfe, 0xa5, 0x04, 0x6b, 0x03, 0x7a, + 0xfd, 0xe8, 0x2f, 0x0c, 0x28, 0x97, 0x43, 0xcf, 0xea, 0x46, 0xa5, 0x8e, 0xdc, 0x3a, 0xf5, 0x1a, + 0x55, 0x11, 0xf2, 0xcb, 0x04, 0x79, 0x2e, 0xa9, 0x22, 0xc3, 0x42, 0x76, 0x03, 0x57, 0x08, 0xa2, + 0x35, 0x91, 0x1c, 0xaa, 0xb4, 0xe2, 0x99, 0xc4, 0xf2, 0x3b, 0x48, 0x54, 0xa1, 0x26, 0x1f, 0x5c, + 0x49, 0x7f, 0x06, 0x56, 0xfb, 0x15, 0xa9, 0x3c, 0x74, 0x87, 0xaf, 0x0b, 0xc3, 0xbe, 0x50, 0x3f, + 0x05, 0xe7, 0x2b, 0xd8, 0x24, 0x8d, 0x2d, 0xec, 0x92, 0x40, 0x06, 0x6f, 0x85, 0xa1, 0x0e, 0xc6, + 0xfc, 0x5f, 0xd9, 0x87, 0x0d, 0x5e, 0x97, 0xc4, 0x2e, 0x2f, 0xc2, 0x85, 0x58, 0xf0, 0xe2, 0x4b, + 0xda, 0x0f, 0xc0, 0x4a, 0xd1, 0xa2, 0xac, 0x4e, 0x9c, 0x40, 0x13, 0x0f, 0x18, 0x91, 0x40, 0xfe, + 0x41, 0x2c, 0xac, 0x0f, 0xab, 0x78, 0xa4, 0xf4, 0xe7, 0x93, 0xed, 0xe2, 0x1f, 0x4d, 0xc2, 0xaf, + 0x25, 0xb0, 0x58, 0x44, 0x25, 0xff, 0x37, 0x85, 0xc8, 0xf9, 0x7f, 0x01, 0xce, 0x1f, 0xea, 0xfb, + 0x5b, 0xb9, 0x3b, 0xbe, 0xe9, 0xc8, 0x76, 0xe8, 0x53, 0x52, 0x61, 0xc3, 0x6e, 0x59, 0x7a, 0xde, + 0xa2, 0x16, 0xf9, 0x28, 0x30, 0x8d, 0x53, 0x67, 0x7f, 0x00, 0xce, 0x97, 0x1e, 0x6c, 0xa3, 0x8d, + 0xdc, 0x56, 0x03, 0x7b, 0x2e, 0x41, 0x9f, 0x18, 0x15, 0x62, 0xb9, 0x04, 0xde, 0x1e, 0x4e, 0xb2, + 0x5a, 0x6e, 0xd0, 0xb2, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xfd, 0x64, 0x77, 0x6b, 0x67, 0xef, 0xc1, + 0x4e, 0x9e, 0x9d, 0x30, 0x4d, 0x5e, 0xcf, 0xaf, 0x15, 0x10, 0x58, 0x3a, 0xc9, 0xb9, 0xd4, 0x24, + 0xc2, 0x9a, 0xee, 0x17, 0x3c, 0x97, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, + 0xcd, 0x63, 0xdb, 0xff, 0xad, 0xc4, 0xa0, 0x96, 0xfa, 0xd4, 0xa5, 0x96, 0x76, 0x21, 0x3a, 0x73, + 0x92, 0xab, 0x51, 0x9a, 0x33, 0x0d, 0x93, 0x14, 0x7a, 0x28, 0x0b, 0x03, 0x28, 0xf5, 0x7d, 0x5e, + 0xc7, 0x6c, 0xc0, 0x5d, 0x70, 0xa7, 0xb7, 0x8e, 0xf1, 0x5c, 0xe2, 0x74, 0x6b, 0x98, 0x3a, 0x3e, + 0x26, 0xc8, 0x26, 0x8e, 0x69, 0xb8, 0x2e, 0x77, 0x5d, 0x46, 0x11, 0xae, 0x54, 0x88, 0xeb, 0xc6, + 0x6a, 0x9e, 0xbc, 0xfe, 0x1a, 0x95, 0xd1, 0x39, 0xfd, 0x63, 0x20, 0x6f, 0xae, 0xdf, 0x84, 0x45, + 0x30, 0xb3, 0xfb, 0xb6, 0x89, 0x30, 0x62, 0x04, 0xdb, 0x94, 0xe5, 0xe1, 0x1a, 0xc8, 0xa7, 0x87, + 0x7a, 0x56, 0x7e, 0xfc, 0x3b, 0x32, 0x98, 0x03, 0x93, 0x25, 0xec, 0x1a, 0x15, 0xd1, 0xc2, 0xa6, + 0x26, 0x24, 0xf0, 0xa7, 0x52, 0xac, 0xab, 0xfd, 0xa9, 0x34, 0x91, 0x4a, 0x4f, 0x7e, 0x91, 0x2b, + 0xee, 0xef, 0xe6, 0xee, 0x91, 0x26, 0x4a, 0xdd, 0x55, 0xc0, 0xca, 0x49, 0x0e, 0x9b, 0xf8, 0x39, + 0xb5, 0x72, 0xd8, 0x36, 0x02, 0x55, 0x39, 0xec, 0xb1, 0x3a, 0x6b, 0xda, 0x04, 0x4e, 0xa4, 0xc7, + 0x29, 0x1f, 0x68, 0x77, 0x7f, 0x1e, 0xbc, 0x39, 0x88, 0x92, 0x3a, 0xc6, 0x73, 0xe2, 0xc0, 0x0f, + 0xb2, 0x3f, 0x03, 0xe6, 0xc0, 0xa8, 0xe0, 0x3b, 0x97, 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, + 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, + 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x51, 0xea, 0xb4, 0xdc, 0x7f, 0x2b, 0x4d, 0xc8, + 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, + 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x09, 0xa4, 0xfd, 0x0e, 0x1e, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, + 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0xf4, 0xf5, 0x70, 0x31, 0x58, 0x14, 0xa3, 0x70, 0x75, 0x0b, + 0x8c, 0xe1, 0xaa, 0x69, 0x58, 0xb0, 0x10, 0x63, 0xb5, 0xaa, 0x31, 0x32, 0xe1, 0x1a, 0x9c, 0xcc, + 0x70, 0x19, 0xaf, 0xd6, 0x8e, 0x09, 0x32, 0xac, 0x1a, 0x75, 0x4c, 0xe1, 0x7d, 0xe5, 0x55, 0x30, + 0x13, 0x3d, 0x98, 0x91, 0xe4, 0x5b, 0x43, 0xf9, 0xfa, 0xc0, 0xd7, 0x86, 0x24, 0xa9, 0xb3, 0x0b, + 0x2e, 0x7e, 0xda, 0x8d, 0x96, 0xd1, 0x18, 0x30, 0xec, 0xdd, 0x7f, 0x7e, 0x19, 0xc0, 0x93, 0x5c, + 0x74, 0x86, 0x5f, 0x12, 0x38, 0x96, 0x96, 0xcb, 0xd8, 0x79, 0xae, 0x80, 0x8b, 0x89, 0xc5, 0x32, + 0x7e, 0x9e, 0x6b, 0x18, 0x2e, 0x83, 0x33, 0xda, 0x14, 0x18, 0x4b, 0xcb, 0xd4, 0x22, 0x20, 0x85, + 0xa4, 0xc7, 0x93, 0x1d, 0x77, 0x2c, 0x8f, 0x8b, 0x30, 0xb6, 0xf1, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xe2, 0x53, 0xfe, 0x7f, 0x48, 0x2b, 0x00, 0x00, } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index 5724b0525de..c6aa89f505c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -773,9 +773,7 @@ func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler r if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) - } else { + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { @@ -824,9 +822,7 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Abe); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) - } else { + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { @@ -861,7 +857,7 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh } -func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_ABitOfEverythingService_UpdateV2_2(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq UpdateV2Request var metadata runtime.ServerMetadata @@ -872,9 +868,6 @@ func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Cont if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) - } var ( val string @@ -894,12 +887,12 @@ func request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Cont return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - msg, err := client.PatchWithFieldMaskInBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.UpdateV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func local_request_ABitOfEverythingService_UpdateV2_2(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq UpdateV2Request var metadata runtime.ServerMetadata @@ -910,9 +903,6 @@ func local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx contex if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.UpdateMask) - } var ( val string @@ -932,7 +922,7 @@ func local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx contex return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - msg, err := server.PatchWithFieldMaskInBody(ctx, &protoReq) + msg, err := server.UpdateV2(ctx, &protoReq) return msg, metadata, err } @@ -2201,7 +2191,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) - mux.Handle("PATCH", pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateV2_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -2210,14 +2200,14 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(rctx, inboundMarshaler, server, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2690,7 +2680,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) - mux.Handle("PATCH", pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateV2_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -2699,14 +2689,14 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_PatchWithFieldMaskInBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_UpdateV2_2(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3006,7 +2996,7 @@ var ( pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_UpdateV2_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) @@ -3050,7 +3040,7 @@ var ( forward_ABitOfEverythingService_UpdateV2_1 = runtime.ForwardResponseMessage - forward_ABitOfEverythingService_PatchWithFieldMaskInBody_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_UpdateV2_2 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_Delete_0 = runtime.ForwardResponseMessage diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 37a928f09e0..6a7a75c2447 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -362,18 +362,19 @@ service ABitOfEverythingService { option (google.api.http) = { put: "/v2/example/a_bit_of_everything/{abe.uuid}" body: "abe" - additional_bindings { - patch: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - } - }; - } - rpc PatchWithFieldMaskInBody(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" - body: "*" + additional_bindings: [ + { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + }, + { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + } + ] }; } + rpc Delete(sub2.IdMessage) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1/example/a_bit_of_everything/{uuid}" diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index b74fac63962..41a60607f7d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -2128,7 +2128,7 @@ }, "/v2a/example/a_bit_of_everything/{abe.uuid}": { "patch": { - "operationId": "PatchWithFieldMaskInBody", + "operationId": "UpdateV23", "responses": { "200": { "description": "A successful response.", diff --git a/examples/proto/examplepb/non_standard_names.pb.go b/examples/proto/examplepb/non_standard_names.pb.go new file mode 100644 index 00000000000..839f5537820 --- /dev/null +++ b/examples/proto/examplepb/non_standard_names.pb.go @@ -0,0 +1,634 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: examples/proto/examplepb/non_standard_names.proto + +package examplepb + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" +import field_mask "google.golang.org/genproto/protobuf/field_mask" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// NonStandardMessage has oddly named fields. +type NonStandardMessage struct { + // Id represents the message identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=enGB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,proto3" json:"no,omitempty"` + Thing *NonStandardMessage_Thing `protobuf:"bytes,8,opt,name=thing,proto3" json:"thing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessage) Reset() { *m = NonStandardMessage{} } +func (m *NonStandardMessage) String() string { return proto.CompactTextString(m) } +func (*NonStandardMessage) ProtoMessage() {} +func (*NonStandardMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0} +} +func (m *NonStandardMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessage.Unmarshal(m, b) +} +func (m *NonStandardMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessage.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage.Merge(dst, src) +} +func (m *NonStandardMessage) XXX_Size() int { + return xxx_messageInfo_NonStandardMessage.Size(m) +} +func (m *NonStandardMessage) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessage proto.InternalMessageInfo + +func (m *NonStandardMessage) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *NonStandardMessage) GetNum() int64 { + if m != nil { + return m.Num + } + return 0 +} + +func (m *NonStandardMessage) GetLineNum() int64 { + if m != nil { + return m.LineNum + } + return 0 +} + +func (m *NonStandardMessage) GetLangIdent() string { + if m != nil { + return m.LangIdent + } + return "" +} + +func (m *NonStandardMessage) GetSTATUS() string { + if m != nil { + return m.STATUS + } + return "" +} + +func (m *NonStandardMessage) GetEn_GB() int64 { + if m != nil { + return m.En_GB + } + return 0 +} + +func (m *NonStandardMessage) GetNo() string { + if m != nil { + return m.No + } + return "" +} + +func (m *NonStandardMessage) GetThing() *NonStandardMessage_Thing { + if m != nil { + return m.Thing + } + return nil +} + +type NonStandardMessage_Thing struct { + SubThing *NonStandardMessage_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,proto3" json:"subThing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessage_Thing) Reset() { *m = NonStandardMessage_Thing{} } +func (m *NonStandardMessage_Thing) String() string { return proto.CompactTextString(m) } +func (*NonStandardMessage_Thing) ProtoMessage() {} +func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0, 0} +} +func (m *NonStandardMessage_Thing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessage_Thing.Unmarshal(m, b) +} +func (m *NonStandardMessage_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessage_Thing.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessage_Thing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage_Thing.Merge(dst, src) +} +func (m *NonStandardMessage_Thing) XXX_Size() int { + return xxx_messageInfo_NonStandardMessage_Thing.Size(m) +} +func (m *NonStandardMessage_Thing) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessage_Thing.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessage_Thing proto.InternalMessageInfo + +func (m *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing { + if m != nil { + return m.SubThing + } + return nil +} + +type NonStandardMessage_Thing_SubThing struct { + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=subValue,proto3" json:"sub_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessage_Thing_SubThing) Reset() { *m = NonStandardMessage_Thing_SubThing{} } +func (m *NonStandardMessage_Thing_SubThing) String() string { return proto.CompactTextString(m) } +func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} +func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0, 0, 0} +} +func (m *NonStandardMessage_Thing_SubThing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Unmarshal(m, b) +} +func (m *NonStandardMessage_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessage_Thing_SubThing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage_Thing_SubThing.Merge(dst, src) +} +func (m *NonStandardMessage_Thing_SubThing) XXX_Size() int { + return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Size(m) +} +func (m *NonStandardMessage_Thing_SubThing) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessage_Thing_SubThing.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessage_Thing_SubThing proto.InternalMessageInfo + +func (m *NonStandardMessage_Thing_SubThing) GetSubValue() string { + if m != nil { + return m.SubValue + } + return "" +} + +type NonStandardUpdateRequest struct { + Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardUpdateRequest) Reset() { *m = NonStandardUpdateRequest{} } +func (m *NonStandardUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*NonStandardUpdateRequest) ProtoMessage() {} +func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{1} +} +func (m *NonStandardUpdateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardUpdateRequest.Unmarshal(m, b) +} +func (m *NonStandardUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardUpdateRequest.Marshal(b, m, deterministic) +} +func (dst *NonStandardUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardUpdateRequest.Merge(dst, src) +} +func (m *NonStandardUpdateRequest) XXX_Size() int { + return xxx_messageInfo_NonStandardUpdateRequest.Size(m) +} +func (m *NonStandardUpdateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardUpdateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardUpdateRequest proto.InternalMessageInfo + +func (m *NonStandardUpdateRequest) GetBody() *NonStandardMessage { + if m != nil { + return m.Body + } + return nil +} + +func (m *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. +type NonStandardMessageWithJSONNames struct { + // Id represents the message identifier. + Id string `protobuf:"bytes,1,opt,name=id,json=ID,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=LineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,json=status,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=En_GB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,json=yes,proto3" json:"no,omitempty"` + Thing *NonStandardMessageWithJSONNames_Thing `protobuf:"bytes,8,opt,name=thing,json=Thingy,proto3" json:"thing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessageWithJSONNames) Reset() { *m = NonStandardMessageWithJSONNames{} } +func (m *NonStandardMessageWithJSONNames) String() string { return proto.CompactTextString(m) } +func (*NonStandardMessageWithJSONNames) ProtoMessage() {} +func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2} +} +func (m *NonStandardMessageWithJSONNames) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessageWithJSONNames.Unmarshal(m, b) +} +func (m *NonStandardMessageWithJSONNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessageWithJSONNames.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessageWithJSONNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames.Merge(dst, src) +} +func (m *NonStandardMessageWithJSONNames) XXX_Size() int { + return xxx_messageInfo_NonStandardMessageWithJSONNames.Size(m) +} +func (m *NonStandardMessageWithJSONNames) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessageWithJSONNames.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessageWithJSONNames proto.InternalMessageInfo + +func (m *NonStandardMessageWithJSONNames) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *NonStandardMessageWithJSONNames) GetNum() int64 { + if m != nil { + return m.Num + } + return 0 +} + +func (m *NonStandardMessageWithJSONNames) GetLineNum() int64 { + if m != nil { + return m.LineNum + } + return 0 +} + +func (m *NonStandardMessageWithJSONNames) GetLangIdent() string { + if m != nil { + return m.LangIdent + } + return "" +} + +func (m *NonStandardMessageWithJSONNames) GetSTATUS() string { + if m != nil { + return m.STATUS + } + return "" +} + +func (m *NonStandardMessageWithJSONNames) GetEn_GB() int64 { + if m != nil { + return m.En_GB + } + return 0 +} + +func (m *NonStandardMessageWithJSONNames) GetNo() string { + if m != nil { + return m.No + } + return "" +} + +func (m *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing { + if m != nil { + return m.Thing + } + return nil +} + +type NonStandardMessageWithJSONNames_Thing struct { + SubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,json=SubThing,proto3" json:"subThing,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessageWithJSONNames_Thing) Reset() { *m = NonStandardMessageWithJSONNames_Thing{} } +func (m *NonStandardMessageWithJSONNames_Thing) String() string { return proto.CompactTextString(m) } +func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} +func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2, 0} +} +func (m *NonStandardMessageWithJSONNames_Thing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Unmarshal(m, b) +} +func (m *NonStandardMessageWithJSONNames_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessageWithJSONNames_Thing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Merge(dst, src) +} +func (m *NonStandardMessageWithJSONNames_Thing) XXX_Size() int { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Size(m) +} +func (m *NonStandardMessageWithJSONNames_Thing) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessageWithJSONNames_Thing proto.InternalMessageInfo + +func (m *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing { + if m != nil { + return m.SubThing + } + return nil +} + +type NonStandardMessageWithJSONNames_Thing_SubThing struct { + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=sub_Value,proto3" json:"sub_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() { + *m = NonStandardMessageWithJSONNames_Thing_SubThing{} +} +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { + return proto.CompactTextString(m) +} +func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} +func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2, 0, 0} +} +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Unmarshal(m, b) +} +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Marshal(b, m, deterministic) +} +func (dst *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Merge(dst, src) +} +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Size() int { + return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Size(m) +} +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing proto.InternalMessageInfo + +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string { + if m != nil { + return m.SubValue + } + return "" +} + +type NonStandardWithJSONNamesUpdateRequest struct { + Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NonStandardWithJSONNamesUpdateRequest) Reset() { *m = NonStandardWithJSONNamesUpdateRequest{} } +func (m *NonStandardWithJSONNamesUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} +func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{3} +} +func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Unmarshal(m, b) +} +func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Marshal(b, m, deterministic) +} +func (dst *NonStandardWithJSONNamesUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Merge(dst, src) +} +func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Size() int { + return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Size(m) +} +func (m *NonStandardWithJSONNamesUpdateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest proto.InternalMessageInfo + +func (m *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames { + if m != nil { + return m.Body + } + return nil +} + +func (m *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if m != nil { + return m.UpdateMask + } + return nil +} + +func init() { + proto.RegisterType((*NonStandardMessage)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage") + proto.RegisterType((*NonStandardMessage_Thing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage.Thing") + proto.RegisterType((*NonStandardMessage_Thing_SubThing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage.Thing.SubThing") + proto.RegisterType((*NonStandardUpdateRequest)(nil), "grpc.gateway.examples.examplepb.NonStandardUpdateRequest") + proto.RegisterType((*NonStandardMessageWithJSONNames)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames") + proto.RegisterType((*NonStandardMessageWithJSONNames_Thing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames.Thing") + proto.RegisterType((*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing") + proto.RegisterType((*NonStandardWithJSONNamesUpdateRequest)(nil), "grpc.gateway.examples.examplepb.NonStandardWithJSONNamesUpdateRequest") +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// NonStandardServiceClient is the client API for NonStandardService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type NonStandardServiceClient interface { + // Apply field mask to empty NonStandardMessage and return result. + Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) +} + +type nonStandardServiceClient struct { + cc *grpc.ClientConn +} + +func NewNonStandardServiceClient(cc *grpc.ClientConn) NonStandardServiceClient { + return &nonStandardServiceClient{cc} +} + +func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) { + out := new(NonStandardMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.NonStandardService/Update", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) { + out := new(NonStandardMessageWithJSONNames) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NonStandardServiceServer is the server API for NonStandardService service. +type NonStandardServiceServer interface { + // Apply field mask to empty NonStandardMessage and return result. + Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) +} + +func RegisterNonStandardServiceServer(s *grpc.Server, srv NonStandardServiceServer) { + s.RegisterService(&_NonStandardService_serviceDesc, srv) +} + +func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NonStandardUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NonStandardServiceServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.NonStandardService/Update", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NonStandardWithJSONNamesUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.NonStandardService/UpdateWithJSONNames", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _NonStandardService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.examplepb.NonStandardService", + HandlerType: (*NonStandardServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Update", + Handler: _NonStandardService_Update_Handler, + }, + { + MethodName: "UpdateWithJSONNames", + Handler: _NonStandardService_UpdateWithJSONNames_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/proto/examplepb/non_standard_names.proto", +} + +func init() { + proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_non_standard_names_1ed497ab0876ca64) +} + +var fileDescriptor_non_standard_names_1ed497ab0876ca64 = []byte{ + // 626 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x41, 0x6f, 0xd3, 0x3c, + 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0x7a, 0x5f, 0xe4, 0x21, 0x14, 0xc2, 0xa4, 0x56, 0x95, + 0xd0, 0x7a, 0x21, 0xd1, 0xb2, 0x03, 0x02, 0x84, 0x04, 0x15, 0xac, 0x1a, 0x62, 0xad, 0x94, 0x74, + 0x20, 0x21, 0x41, 0xe4, 0x2c, 0x5e, 0x1a, 0x9a, 0xda, 0xa1, 0x76, 0x3a, 0x7a, 0xe5, 0x13, 0x4c, + 0xe2, 0x0e, 0xdc, 0xf8, 0x0e, 0xf0, 0x31, 0xb8, 0x73, 0xe2, 0x83, 0xa0, 0xd8, 0x69, 0xa9, 0x55, + 0xa1, 0xb1, 0x6e, 0xa7, 0xfa, 0x79, 0x6c, 0xff, 0x9f, 0xe7, 0x6f, 0xff, 0xe2, 0x82, 0x5d, 0xfc, + 0x1e, 0x8d, 0xd3, 0x04, 0x33, 0x3b, 0x9d, 0x50, 0x4e, 0xed, 0x22, 0x4c, 0x03, 0x9b, 0x50, 0xe2, + 0x33, 0x8e, 0x48, 0x88, 0x26, 0xa1, 0x4f, 0xd0, 0x18, 0x33, 0x4b, 0x2c, 0x81, 0x8d, 0x68, 0x92, + 0x1e, 0x5b, 0x11, 0xe2, 0xf8, 0x14, 0xcd, 0xac, 0xf9, 0x7e, 0x6b, 0xb1, 0xd3, 0xdc, 0x8e, 0x28, + 0x8d, 0x12, 0x6c, 0xa3, 0x34, 0xb6, 0x11, 0x21, 0x94, 0x23, 0x1e, 0x53, 0x52, 0x6c, 0x37, 0x9b, + 0xc5, 0xac, 0x88, 0x82, 0xec, 0xc4, 0x3e, 0x89, 0x71, 0x12, 0xfa, 0x63, 0xc4, 0x46, 0x72, 0x45, + 0xeb, 0x4c, 0x07, 0xb0, 0x47, 0x89, 0x57, 0x14, 0x3f, 0xc4, 0x8c, 0xa1, 0x08, 0xc3, 0xff, 0x40, + 0x29, 0x0e, 0x0d, 0xad, 0xa9, 0xb5, 0x6b, 0x6e, 0x29, 0x0e, 0xe1, 0x35, 0xa0, 0xf7, 0xb2, 0xb1, + 0x51, 0x6a, 0x6a, 0x6d, 0xdd, 0xcd, 0x87, 0xf0, 0x26, 0xa8, 0x26, 0x31, 0xc1, 0x3e, 0xc9, 0xc6, + 0x86, 0x2e, 0xd2, 0x9b, 0x79, 0x9c, 0x4f, 0x6d, 0x83, 0x5a, 0x82, 0x48, 0x74, 0x10, 0x62, 0xc2, + 0x8d, 0x0d, 0xa1, 0xf1, 0x27, 0x01, 0x6f, 0x80, 0x8a, 0x37, 0x78, 0x3c, 0x38, 0xf2, 0x8c, 0xb2, + 0x98, 0x2a, 0x22, 0xb8, 0x05, 0xca, 0x98, 0xf8, 0xdd, 0x8e, 0x51, 0x11, 0x6a, 0x1b, 0x98, 0x74, + 0x3b, 0x79, 0x1f, 0x84, 0x1a, 0x9b, 0xb2, 0x0f, 0x42, 0x61, 0x1f, 0x94, 0xf9, 0x30, 0x26, 0x91, + 0x51, 0x6d, 0x6a, 0xed, 0xba, 0x73, 0xcf, 0x3a, 0xe7, 0x7c, 0xac, 0x55, 0x6f, 0xd6, 0x20, 0x17, + 0x70, 0xa5, 0x8e, 0x79, 0xa6, 0x81, 0xb2, 0x48, 0xc0, 0x37, 0xa0, 0xca, 0xb2, 0x40, 0x8c, 0x85, + 0xf1, 0xba, 0xd3, 0x59, 0x5b, 0xdd, 0xf2, 0x0a, 0x25, 0x77, 0xa1, 0x69, 0xee, 0x80, 0xea, 0x3c, + 0x0b, 0x6f, 0x81, 0x1a, 0xcb, 0x02, 0x7f, 0x8a, 0x92, 0x0c, 0x17, 0xa7, 0x9c, 0x2f, 0x7c, 0x91, + 0xc7, 0xad, 0x2f, 0x1a, 0x30, 0x96, 0x84, 0x8f, 0xd2, 0x10, 0x71, 0xec, 0xe2, 0x77, 0x19, 0x66, + 0x1c, 0x76, 0xc1, 0x46, 0x40, 0xc3, 0x59, 0xd1, 0xe1, 0xde, 0x1a, 0x1d, 0xba, 0x42, 0x00, 0x3e, + 0x00, 0xf5, 0x4c, 0x28, 0x0b, 0x1a, 0xc4, 0xcd, 0xd6, 0x1d, 0xd3, 0x92, 0xc0, 0x58, 0x73, 0x60, + 0xac, 0xfd, 0x1c, 0x98, 0x43, 0xc4, 0x46, 0x2e, 0x90, 0xcb, 0xf3, 0x71, 0xeb, 0xbb, 0x0e, 0x1a, + 0xab, 0xca, 0x2f, 0x63, 0x3e, 0x7c, 0xe6, 0xf5, 0x7b, 0xbd, 0x1c, 0x60, 0x15, 0xa1, 0x83, 0x27, + 0xff, 0x86, 0xd0, 0xf3, 0xf5, 0x10, 0x62, 0x1c, 0xf1, 0x8c, 0xc1, 0xeb, 0x2a, 0x42, 0xe5, 0xa7, + 0x79, 0x00, 0xff, 0x5f, 0x62, 0x48, 0x9f, 0x61, 0x06, 0x5f, 0xab, 0x10, 0xed, 0xaf, 0x71, 0x88, + 0x8a, 0xd5, 0x82, 0xa8, 0x8a, 0xf8, 0x99, 0x99, 0x9f, 0x16, 0x48, 0x8d, 0x56, 0x90, 0xea, 0x5f, + 0x4d, 0xad, 0x25, 0xbe, 0xe6, 0x23, 0xb3, 0xbd, 0xc4, 0xd7, 0xf6, 0x2a, 0x5f, 0x22, 0x21, 0x01, + 0xfb, 0xa6, 0x81, 0xdb, 0x4b, 0x65, 0x14, 0x7d, 0x95, 0xb6, 0x81, 0x42, 0xdb, 0xa3, 0xcb, 0x36, + 0x7f, 0x05, 0xe8, 0x39, 0x9f, 0xd5, 0x07, 0xcb, 0xc3, 0x93, 0x69, 0x7c, 0x8c, 0xe1, 0x57, 0x0d, + 0x54, 0x64, 0xef, 0xf0, 0x42, 0x8f, 0x82, 0xe2, 0xd7, 0x5c, 0xe7, 0x7b, 0x6a, 0xdd, 0xf9, 0xf0, + 0xe3, 0xd7, 0xc7, 0xd2, 0x8e, 0xd3, 0xb0, 0xa7, 0xbb, 0xf3, 0x37, 0x5d, 0x79, 0xd1, 0x6d, 0xd9, + 0xfe, 0x7d, 0xe9, 0xfe, 0xa7, 0x06, 0xb6, 0x64, 0x55, 0xf5, 0x7b, 0xb9, 0x10, 0x86, 0x7f, 0xbf, + 0x33, 0xf3, 0xd2, 0xb7, 0xd4, 0x7a, 0x28, 0x0c, 0xdd, 0x75, 0xec, 0x73, 0x0c, 0xf9, 0xa7, 0x31, + 0x1f, 0xfa, 0x6f, 0x19, 0x25, 0xf2, 0x3f, 0x4b, 0x1a, 0xec, 0xd4, 0x5f, 0xd5, 0x16, 0xb5, 0x82, + 0x8a, 0xb8, 0xce, 0xbd, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x18, 0x50, 0x51, 0xb2, 0xfc, 0x06, + 0x00, 0x00, +} diff --git a/examples/proto/examplepb/non_standard_names.pb.gw.go b/examples/proto/examplepb/non_standard_names.pb.gw.go new file mode 100644 index 00000000000..606554372cf --- /dev/null +++ b/examples/proto/examplepb/non_standard_names.pb.gw.go @@ -0,0 +1,296 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/proto/examplepb/non_standard_names.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray + +var ( + filter_NonStandardService_Update_0 = &utilities.DoubleArray{Encoding: map[string]int{"body": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_NonStandardService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client NonStandardServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonStandardUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_Update_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NonStandardService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server NonStandardServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonStandardUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_Update_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_NonStandardService_UpdateWithJSONNames_0 = &utilities.DoubleArray{Encoding: map[string]int{"body": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marshaler runtime.Marshaler, client NonStandardServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonStandardWithJSONNamesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_UpdateWithJSONNames_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateWithJSONNames(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marshaler runtime.Marshaler, server NonStandardServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq NonStandardWithJSONNamesUpdateRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_UpdateWithJSONNames_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateWithJSONNames(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterNonStandardServiceHandlerServer registers the http handlers for service NonStandardService to "mux". +// UnaryRPC :call NonStandardServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server NonStandardServiceServer) error { + + mux.Handle("PATCH", pattern_NonStandardService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NonStandardService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NonStandardService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_NonStandardService_UpdateWithJSONNames_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NonStandardService_UpdateWithJSONNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterNonStandardServiceHandlerFromEndpoint is same as RegisterNonStandardServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterNonStandardServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterNonStandardServiceHandler(ctx, mux, conn) +} + +// RegisterNonStandardServiceHandler registers the http handlers for service NonStandardService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterNonStandardServiceHandlerClient(ctx, mux, NewNonStandardServiceClient(conn)) +} + +// RegisterNonStandardServiceHandlerClient registers the http handlers for service NonStandardService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "NonStandardServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "NonStandardServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "NonStandardServiceClient" to call the correct interceptors. +func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client NonStandardServiceClient) error { + + mux.Handle("PATCH", pattern_NonStandardService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NonStandardService_Update_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NonStandardService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_NonStandardService_UpdateWithJSONNames_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_NonStandardService_UpdateWithJSONNames_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_NonStandardService_UpdateWithJSONNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_NonStandardService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_NonStandardService_UpdateWithJSONNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update_with_json_names"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_NonStandardService_Update_0 = runtime.ForwardResponseMessage + + forward_NonStandardService_UpdateWithJSONNames_0 = runtime.ForwardResponseMessage +) diff --git a/examples/proto/examplepb/non_standard_names.proto b/examples/proto/examplepb/non_standard_names.proto new file mode 100644 index 00000000000..0bf130239a4 --- /dev/null +++ b/examples/proto/examplepb/non_standard_names.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; +option go_package = "examplepb"; +package grpc.gateway.examples.examplepb; + +import "google/api/annotations.proto"; +import "google/protobuf/field_mask.proto"; + +// NonStandardMessage has oddly named fields. +message NonStandardMessage { + // Id represents the message identifier. + string id = 1; + int64 Num = 2; + int64 line_num = 3; + string langIdent = 4; + string STATUS = 5; + int64 en_GB = 6; + string no = 7; + + message Thing { + message SubThing { + string sub_value = 1; + } + SubThing subThing = 1; + } + Thing thing = 8; +} + +message NonStandardUpdateRequest { + NonStandardMessage body = 1; + google.protobuf.FieldMask update_mask = 2; +} + +// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. +message NonStandardMessageWithJSONNames { + // Id represents the message identifier. + string id = 1 [json_name="ID"]; + int64 Num = 2 [json_name="Num"]; + int64 line_num = 3 [json_name="LineNum"]; + string langIdent = 4 [json_name="langIdent"]; + string STATUS = 5 [json_name="status"]; + int64 en_GB = 6 [json_name="En_GB"]; + string no = 7 [json_name="yes"]; + + message Thing { + message SubThing { + string sub_value = 1 [json_name="sub_Value"]; + } + SubThing subThing = 1 [json_name="SubThing"]; + } + Thing thing = 8 [json_name="Thingy"]; +} + +message NonStandardWithJSONNamesUpdateRequest { + NonStandardMessageWithJSONNames body = 1; + google.protobuf.FieldMask update_mask = 2; +} + +// NonStandardService responds to incoming messages, applies a field mask and returns the masked response. +service NonStandardService { + // Apply field mask to empty NonStandardMessage and return result. + rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update" + body: "body" + }; + } + + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update_with_json_names" + body: "body" + }; + } +} diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index 6a35faff50c..61d14a2fde6 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -10,6 +10,7 @@ go_library( "fieldmask_helper.go", "flow_combination.go", "main.go", + "non_standard_names.go", "responsebody.go", "unannotatedecho.go", ], @@ -20,6 +21,7 @@ go_library( "//examples/proto/sub2:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@com_github_rogpeppe_fastuuid//:go_default_library", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index c37fa47fe10..892802fe3fc 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "io" - "strings" "sync" "github.com/golang/glog" @@ -83,7 +82,7 @@ func (s *_ABitOfEverythingServer) BulkCreate(stream examples.StreamService_BulkC return err } count++ - glog.Error(msg) + glog.Info(msg) if _, err = s.Create(ctx, msg); err != nil { return err } @@ -186,22 +185,6 @@ func (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.Up return new(empty.Empty), nil } -// PatchWithFieldMaskInBody differs from UpdateV2 only in that this method exposes the field mask in the request body, -// so that clients can specify their mask explicitly -func (s *_ABitOfEverythingServer) PatchWithFieldMaskInBody(ctx context.Context, request *examples.UpdateV2Request) (*empty.Empty, error) { - // low-effort attempt to modify the field mask to only include paths for the ABE struct. Since this is only for the - // integration tests, this narrow implementaion is fine. - if request.UpdateMask != nil { - var shifted []string - for _, path := range request.UpdateMask.GetPaths() { - shifted = append(shifted, strings.TrimPrefix(path, "Abe.")) - } - request.UpdateMask.Paths = shifted - } - - return s.UpdateV2(ctx, request) -} - func (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessage) (*empty.Empty, error) { s.m.Lock() defer s.m.Unlock() diff --git a/examples/server/fieldmask_helper.go b/examples/server/fieldmask_helper.go index d0cac43c58f..516f19a1628 100644 --- a/examples/server/fieldmask_helper.go +++ b/examples/server/fieldmask_helper.go @@ -5,6 +5,7 @@ import ( "reflect" "strings" + "github.com/golang/protobuf/protoc-gen-go/generator" "google.golang.org/genproto/protobuf/field_mask" ) @@ -39,7 +40,7 @@ func getField(obj interface{}, path string) (val reflect.Value) { if v.Kind() == reflect.Ptr { v = reflect.Indirect(v) } - v = v.FieldByName(s) + v = v.FieldByName(generator.CamelCase(s)) } return v diff --git a/examples/server/fieldmask_helper_test.go b/examples/server/fieldmask_helper_test.go index c735fdd7aca..9ad6584ae21 100644 --- a/examples/server/fieldmask_helper_test.go +++ b/examples/server/fieldmask_helper_test.go @@ -17,9 +17,21 @@ func TestApplyFieldMask(t *testing.T) { }{ {"nil fieldMask", &a{E: 64}, &a{E: 42}, nil, &a{E: 64}}, {"empty paths", &a{E: 63}, &a{E: 42}, &field_mask.FieldMask{}, &a{E: 63}}, - {"simple path", &a{E: 23, F: "test"}, &a{B: &b{}, E: 42}, &field_mask.FieldMask{Paths: []string{"E"}}, &a{E: 42, F: "test"}}, - {"nested", &a{B: &b{C: 85}}, &a{B: &b{C: 58, D: nil}}, &field_mask.FieldMask{Paths: []string{"B.C"}}, &a{B: &b{C: 58}}}, - {"multiple paths", &a{B: &b{C: 40, D: []int{1, 2, 3}}, E: 34, F: "catapult"}, &a{B: &b{C: 56}, F: "lettuce"}, &field_mask.FieldMask{Paths: []string{"B.C", "F"}}, &a{B: &b{C: 56, D: []int{1, 2, 3}}, E: 34, F: "lettuce"}}, + {"simple path", + &a{E: 23, Foo: "test"}, + &a{BeefCake: &b{}, E: 42}, + &field_mask.FieldMask{Paths: []string{"e"}}, + &a{E: 42, Foo: "test"}}, + {"nested", + &a{BeefCake: &b{CowCount: 85}}, + &a{BeefCake: &b{CowCount: 58, Data: nil}}, + &field_mask.FieldMask{Paths: []string{"beef_cake.cow_count"}}, + &a{BeefCake: &b{CowCount: 58}}}, + {"multiple paths", + &a{BeefCake: &b{CowCount: 40, Data: []int{1, 2, 3}}, E: 34, Foo: "catapult"}, + &a{BeefCake: &b{CowCount: 56}, Foo: "lettuce"}, + &field_mask.FieldMask{Paths: []string{"beef_cake.cow_count", "foo"}}, + &a{BeefCake: &b{CowCount: 56, Data: []int{1, 2, 3}}, E: 34, Foo: "lettuce"}}, } { t.Run(test.name, func(t *testing.T) { applyFieldMask(test.patchee, test.patcher, test.fieldMask) @@ -37,15 +49,15 @@ func TestGetValue(t *testing.T) { path string expected interface{} }{ - {"empty", &a{E: 45, F: "test"}, "", &a{E: 45, F: "test"}}, + {"empty", &a{E: 45, Foo: "test"}, "", &a{E: 45, Foo: "test"}}, {"pointer-simple", &a{E: 45}, "E", 45}, - {"pointer-nested", &a{B: &b{C: 42}}, "B.C", 42}, - {"pointer-complex type", &a{B: &b{D: []int{1, 2}}}, "B.D", []int{1, 2}}, - {"pointer-invalid path", &a{F: "test"}, "X.Y", nil}, + {"pointer-nested", &a{BeefCake: &b{CowCount: 42}}, "beef_cake.cow_count", 42}, + {"pointer-complex type", &a{BeefCake: &b{Data: []int{1, 2}}}, "beef_cake.data", []int{1, 2}}, + {"pointer-invalid path", &a{Foo: "test"}, "x.y", nil}, {"simple", a{E: 45}, "E", 45}, - {"nested", a{B: &b{C: 42}}, "B.C", 42}, - {"complex type", a{B: &b{D: []int{1, 2}}}, "B.D", []int{1, 2}}, - {"invalid path", a{F: "test"}, "X.Y", nil}, + {"nested", a{BeefCake: &b{CowCount: 42}}, "beef_cake.cow_count", 42}, + {"complex type", a{BeefCake: &b{Data: []int{1, 2}}}, "beef_cake.data", []int{1, 2}}, + {"invalid path", a{Foo: "test"}, "X.Y", nil}, } { t.Run(test.name, func(t *testing.T) { if actual := getField(test.input, test.path); actual.IsValid() { @@ -67,9 +79,9 @@ func TestSetValue(t *testing.T) { path string expected interface{} }{ - {"simple", &a{E: 45}, 34, "E", 34}, - {"nested", &a{B: &b{C: 54}}, 43, "B.C", 43}, - {"complex type", &a{B: &b{D: []int{1, 2}}}, []int{3, 4}, "B.D", []int{3, 4}}, + {"simple", &a{E: 45}, 34, "e", 34}, + {"nested", &a{BeefCake: &b{CowCount: 54}}, 43, "beef_cake.cow_count", 43}, + {"complex type", &a{BeefCake: &b{Data: []int{1, 2}}}, []int{3, 4}, "beef_cake.data", []int{3, 4}}, } { t.Run(test.name, func(t *testing.T) { setValue(test.obj, reflect.ValueOf(test.newValue), test.path) @@ -81,12 +93,12 @@ func TestSetValue(t *testing.T) { } type a struct { - B *b - E int - F string + BeefCake *b + E int + Foo string } type b struct { - C int - D []int + CowCount int + Data []int } diff --git a/examples/server/main.go b/examples/server/main.go index 179485a3601..d595c367613 100644 --- a/examples/server/main.go +++ b/examples/server/main.go @@ -25,6 +25,7 @@ func Run(ctx context.Context, network, address string) error { s := grpc.NewServer() examples.RegisterEchoServiceServer(s, newEchoServer()) examples.RegisterFlowCombinationServer(s, newFlowCombinationServer()) + examples.RegisterNonStandardServiceServer(s, newNonStandardServer()) abe := newABitOfEverythingServer() examples.RegisterABitOfEverythingServiceServer(s, abe) diff --git a/examples/server/non_standard_names.go b/examples/server/non_standard_names.go new file mode 100644 index 00000000000..c448259a909 --- /dev/null +++ b/examples/server/non_standard_names.go @@ -0,0 +1,40 @@ +package server + +import ( + "context" + + "github.com/golang/glog" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" +) + +// Implements NonStandardServiceServer + +type nonStandardServer struct{} + +func newNonStandardServer() examples.NonStandardServiceServer { + return new(nonStandardServer) +} + +func (s *nonStandardServer) Update(ctx context.Context, msg *examples.NonStandardUpdateRequest) (*examples.NonStandardMessage, error) { + glog.Info(msg) + + newMsg := &examples.NonStandardMessage{ + Thing: &examples.NonStandardMessage_Thing{SubThing: &examples.NonStandardMessage_Thing_SubThing{}}, // The fieldmask_helper doesn't generate nested structs if they are nil + } + applyFieldMask(newMsg, msg.Body, msg.UpdateMask) + + glog.Info(newMsg) + return newMsg, nil +} + +func (s *nonStandardServer) UpdateWithJSONNames(ctx context.Context, msg *examples.NonStandardWithJSONNamesUpdateRequest) (*examples.NonStandardMessageWithJSONNames, error) { + glog.Info(msg) + + newMsg := &examples.NonStandardMessageWithJSONNames{ + Thing: &examples.NonStandardMessageWithJSONNames_Thing{SubThing: &examples.NonStandardMessageWithJSONNames_Thing_SubThing{}}, // The fieldmask_helper doesn't generate nested structs if they are nil + } + applyFieldMask(newMsg, msg.Body, msg.UpdateMask) + + glog.Info(newMsg) + return newMsg, nil +} diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index ceb3dda1110..cd6b1f9e850 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -314,16 +314,14 @@ var ( if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} - if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) - } {{if not (eq "*" .GetBodyFieldPath)}} else { + {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} + if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask } - } {{end}} + } {{end}} {{end}} {{if .PathParams}} @@ -477,16 +475,14 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - {{- if and $AllowPatchFeature (and (eq (.HTTPMethod) "PATCH") (.FieldMaskField))}} - if protoReq.{{.FieldMaskField}} != nil && len(protoReq.{{.FieldMaskField}}.GetPaths()) > 0 { - runtime.CamelCaseFieldMask(protoReq.{{.FieldMaskField}}) - } {{if not (eq "*" .GetBodyFieldPath)}} else { + {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} + if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask - } - } {{end}} + } + } {{end}} {{end}} {{if .PathParams}} diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/gengateway/template_test.go index eca95556c9a..69809792b4c 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/gengateway/template_test.go @@ -628,7 +628,10 @@ func TestAllowPatchFeature(t *testing.T) { Bindings: []*descriptor.Binding{ { HTTPMethod: "PATCH", - Body: &descriptor.Body{FieldPath: nil}, + Body: &descriptor.Body{FieldPath: descriptor.FieldPath{descriptor.FieldPathComponent{ + Name: "abe", + Target: msg.Fields[0], + }}}, }, }, }, @@ -636,7 +639,7 @@ func TestAllowPatchFeature(t *testing.T) { }, }, } - want := "if protoReq.UpdateMask != nil && len(protoReq.UpdateMask.GetPaths()) > 0 {\n" + want := "if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 {\n" for _, allowPatchFeature := range []bool{true, false} { got, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: allowPatchFeature}, descriptor.NewRegistry()) if err != nil { diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index d03ca5c97a2..2462dc053f7 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -29,7 +29,6 @@ go_library( "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index e1cf7a91461..d3eb5782b70 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -5,7 +5,6 @@ import ( "io" "strings" - "github.com/golang/protobuf/protoc-gen-go/generator" "google.golang.org/genproto/protobuf/field_mask" ) @@ -29,7 +28,7 @@ func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) { if m, ok := item.node.(map[string]interface{}); ok { // if the item is an object, then enqueue all of its children for k, v := range m { - queue = append(queue, fieldMaskPathItem{path: append(item.path, generator.CamelCase(k)), node: v}) + queue = append(queue, fieldMaskPathItem{path: append(item.path, k), node: v}) } } else if len(item.path) > 0 { // otherwise, it's a leaf node so print its path @@ -48,23 +47,3 @@ type fieldMaskPathItem struct { // a generic decoded json object the current item to inspect for further path extraction node interface{} } - -// CamelCaseFieldMask updates the given FieldMask by converting all of its paths to CamelCase, using the same heuristic -// that's used for naming protobuf fields in Go. -func CamelCaseFieldMask(mask *field_mask.FieldMask) { - if mask == nil || mask.Paths == nil { - return - } - - var newPaths []string - for _, path := range mask.Paths { - lowerCasedParts := strings.Split(path, ".") - var camelCasedParts []string - for _, part := range lowerCasedParts { - camelCasedParts = append(camelCasedParts, generator.CamelCase(part)) - } - newPaths = append(newPaths, strings.Join(camelCasedParts, ".")) - } - - mask.Paths = newPaths -} diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index 3c097878aa0..dae968b8284 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -51,9 +51,9 @@ func TestFieldMaskFromRequestBody(t *testing.T) { expectedErr error }{ {name: "empty", expected: newFieldMask()}, - {name: "simple", input: `{"foo":1, "bar":"baz"}`, expected: newFieldMask("Foo", "Bar")}, - {name: "nested", input: `{"foo": {"bar":1, "baz": 2}, "qux": 3}`, expected: newFieldMask("Foo.Bar", "Foo.Baz", "Qux")}, - {name: "canonical", input: `{"f": {"b": {"d": 1, "x": 2}, "c": 1}}`, expected: newFieldMask("F.B.D", "F.B.X", "F.C")}, + {name: "simple", input: `{"foo":1, "bar":"baz"}`, expected: newFieldMask("foo", "bar")}, + {name: "nested", input: `{"foo": {"bar":1, "baz": 2}, "qux": 3}`, expected: newFieldMask("foo.bar", "foo.baz", "qux")}, + {name: "canonical", input: `{"f": {"b": {"d": 1, "x": 2}, "c": 1}}`, expected: newFieldMask("f.b.d", "f.b.x", "f.c")}, } { t.Run(tc.name, func(t *testing.T) { actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input))) @@ -67,21 +67,85 @@ func TestFieldMaskFromRequestBody(t *testing.T) { } } -func TestCamelCaseFieldMask(t *testing.T) { - for _, tc := range []struct { - name string - input *field_mask.FieldMask - expected *field_mask.FieldMask - }{ - {"nil", nil, nil}, - {"empty", &field_mask.FieldMask{Paths: nil}, &field_mask.FieldMask{Paths: nil}}, - {"main usage", newFieldMask("a", "a.b", "some_field.some_sub_field"), newFieldMask("A", "A.B", "SomeField.SomeSubField")}, - } { - t.Run(tc.name, func(t *testing.T) { - CamelCaseFieldMask(tc.input) - if expected, actual := tc.expected, tc.input; !fieldMasksEqual(expected, actual) { - t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) - } - }) +// avoid compiler optimising benchmark away +var result *field_mask.FieldMask + +func BenchmarkABEFieldMaskFromRequestBody(b *testing.B) { + input := `{` + + `"single_nested": {"name": "bar",` + + ` "amount": 10,` + + ` "ok": "TRUE"},` + + `"uuid": "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7",` + + `"nested": [{"name": "bar",` + + ` "amount": 10},` + + ` {"name": "baz",` + + ` "amount": 20}],` + + `"float_value": 1.5,` + + `"double_value": 2.5,` + + `"int64_value": 4294967296,` + + `"uint64_value": 9223372036854775807,` + + `"int32_value": -2147483648,` + + `"fixed64_value": 9223372036854775807,` + + `"fixed32_value": 4294967295,` + + `"bool_value": true,` + + `"string_value": "strprefix/foo",` + + `"bytes_value": "132456",` + + `"uint32_value": 4294967295,` + + `"enum_value": "ONE",` + + `"path_enum_value": "DEF",` + + `"nested_path_enum_value": "JKL",` + + `"sfixed32_value": 2147483647,` + + `"sfixed64_value": -4611686018427387904,` + + `"sint32_value": 2147483647,` + + `"sint64_value": 4611686018427387903,` + + `"repeated_string_value": ["a", "b", "c"],` + + `"oneof_value": {"oneof_string":"x"},` + + `"map_value": {"a": "ONE",` + + ` "b": "ZERO"},` + + `"mapped_string_value": {"a": "x",` + + ` "b": "y"},` + + `"mapped_nested_value": {"a": {"name": "x", "amount": 1},` + + ` "b": {"name": "y", "amount": 2}},` + + `"nonConventionalNameValue": "camelCase",` + + `"timestamp_value": "2016-05-10T10:19:13.123Z",` + + `"repeated_enum_value": ["ONE", "ZERO"],` + + `"repeated_enum_annotation": ["ONE", "ZERO"],` + + `"enum_value_annotation": "ONE",` + + `"repeated_string_annotation": ["a", "b"],` + + `"repeated_nested_annotation": [{"name": "hoge",` + + ` "amount": 10},` + + ` {"name": "fuga",` + + ` "amount": 20}],` + + `"nested_annotation": {"name": "hoge",` + + ` "amount": 10},` + + `"int64_override_type": 12345` + + `}` + var r *field_mask.FieldMask + var err error + for i := 0; i < b.N; i++ { + r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input))) + } + if err != nil { + b.Error(err) + } + result = r +} + +func BenchmarkNonStandardFieldMaskFromRequestBody(b *testing.B) { + input := `{` + + `"id": "foo",` + + `"Num": 2,` + + `"line_num": 3,` + + `"langIdent": "bar",` + + `"STATUS": "baz"` + + `}` + var r *field_mask.FieldMask + var err error + for i := 0; i < b.N; i++ { + r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input))) + } + if err != nil { + b.Error(err) } + result = r } From 8eb1d0f0d6826c96871697a7e68b50746edd275d Mon Sep 17 00:00:00 2001 From: Will Plano <51954103+william-plano-oxb@users.noreply.github.com> Date: Mon, 30 Sep 2019 10:34:02 +0100 Subject: [PATCH 0221/1518] Support json names in field mask generation (#1050) * Support json names in field mask generation Added tests for using jsonpb with OrigName: false Added benchmarks for FieldMaskFromRequestBody called with a message descriptor * Add descriptor dependency to go_proto_library --- docs/_docs/patch.md | 2 - examples/integration/BUILD.bazel | 2 + examples/integration/fieldmask_test.go | 163 ++++++++++++++++++ examples/integration/integration_test.go | 25 +++ examples/proto/examplepb/BUILD.bazel | 2 + .../examplepb/a_bit_of_everything.pb.gw.go | 9 +- .../proto/examplepb/echo_service.pb.gw.go | 3 + .../proto/examplepb/flow_combination.pb.gw.go | 3 + .../examplepb/non_standard_names.pb.gw.go | 15 +- .../examplepb/response_body_service.pb.gw.go | 3 + examples/proto/examplepb/stream.pb.gw.go | 3 + .../unannotated_echo_service.pb.gw.go | 3 + examples/proto/examplepb/wrappers.pb.gw.go | 3 + .../gengateway/generator.go | 1 + .../gengateway/template.go | 17 +- runtime/BUILD.bazel | 2 + runtime/fieldmask.go | 39 ++++- runtime/fieldmask_test.go | 6 +- 18 files changed, 285 insertions(+), 16 deletions(-) create mode 100644 examples/integration/fieldmask_test.go diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md index 42b96eab25f..2eaac3b0166 100644 --- a/docs/_docs/patch.md +++ b/docs/_docs/patch.md @@ -10,8 +10,6 @@ There are two scenarios: - The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. - The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. -Currently this feature is not compatible with using the JSON marshaller option to use json names in the http request/response described [here](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html#using-camelcase-for-json). If you want to use json names then you may with to disable this feature with the command line option `-allow_patch_feature=false` - ## Example Usage 1. Create PATCH request. diff --git a/examples/integration/BUILD.bazel b/examples/integration/BUILD.bazel index b37ad78ec78..cee9f33f7f8 100644 --- a/examples/integration/BUILD.bazel +++ b/examples/integration/BUILD.bazel @@ -4,6 +4,7 @@ go_test( name = "go_default_test", srcs = [ "client_test.go", + "fieldmask_test.go", "integration_test.go", "main_test.go", "proto_error_test.go", @@ -19,6 +20,7 @@ go_test( "//examples/server:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/rpc:status_go_proto", diff --git a/examples/integration/fieldmask_test.go b/examples/integration/fieldmask_test.go new file mode 100644 index 00000000000..2ebe44ff05c --- /dev/null +++ b/examples/integration/fieldmask_test.go @@ -0,0 +1,163 @@ +package integration_test + +import ( + "bytes" + "fmt" + "testing" + + "github.com/golang/protobuf/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "google.golang.org/genproto/protobuf/field_mask" +) + +func fieldMasksEqual(fm1, fm2 *field_mask.FieldMask) bool { + if fm1 == nil && fm2 == nil { + return true + } + if fm1 == nil || fm2 == nil { + return false + } + if len(fm1.GetPaths()) != len(fm2.GetPaths()) { + return false + } + + paths := make(map[string]bool) + for _, path := range fm1.GetPaths() { + paths[path] = true + } + for _, path := range fm2.GetPaths() { + if _, ok := paths[path]; !ok { + return false + } + } + + return true +} + +func newFieldMask(paths ...string) *field_mask.FieldMask { + return &field_mask.FieldMask{Paths: paths} +} + +func fieldMaskString(fm *field_mask.FieldMask) string { + if fm == nil { + return "" + } + return fmt.Sprintf("%v", fm.GetPaths()) +} + +// N.B. These tests are here rather than in the runtime package because they need +// to import examplepb for the descriptor, which would result in a circular +// dependency since examplepb imports runtime from the pb.gw.go files +func TestFieldMaskFromRequestBodyWithDescriptor(t *testing.T) { + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) + jsonInput := `{"id":"foo", "thing":{"subThing":{"sub_value":"bar"}}}` + expected := newFieldMask("id", "thing.subThing.sub_value") + + actual, err := runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(jsonInput)), md) + if !fieldMasksEqual(actual, expected) { + t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) + } + if err != nil { + t.Errorf("err %v", err) + } +} + +func TestFieldMaskFromRequestBodyWithJsonNames(t *testing.T) { + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessageWithJSONNames)) + jsonInput := `{"ID":"foo", "Thingy":{"SubThing":{"sub_Value":"bar"}}}` + expected := newFieldMask("id", "thing.subThing.sub_value") + + actual, err := runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(jsonInput)), md) + if !fieldMasksEqual(actual, expected) { + t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) + } + if err != nil { + t.Errorf("err %v", err) + } +} + +// avoid compiler optimising benchmark away +var result *field_mask.FieldMask + +func BenchmarkABEFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { + _, md := descriptor.ForMessage(new(examplepb.ABitOfEverything)) + input := `{` + + `"single_nested": {"name": "bar",` + + ` "amount": 10,` + + ` "ok": "TRUE"},` + + `"uuid": "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7",` + + `"nested": [{"name": "bar",` + + ` "amount": 10},` + + ` {"name": "baz",` + + ` "amount": 20}],` + + `"float_value": 1.5,` + + `"double_value": 2.5,` + + `"int64_value": 4294967296,` + + `"uint64_value": 9223372036854775807,` + + `"int32_value": -2147483648,` + + `"fixed64_value": 9223372036854775807,` + + `"fixed32_value": 4294967295,` + + `"bool_value": true,` + + `"string_value": "strprefix/foo",` + + `"bytes_value": "132456",` + + `"uint32_value": 4294967295,` + + `"enum_value": "ONE",` + + `"path_enum_value": "DEF",` + + `"nested_path_enum_value": "JKL",` + + `"sfixed32_value": 2147483647,` + + `"sfixed64_value": -4611686018427387904,` + + `"sint32_value": 2147483647,` + + `"sint64_value": 4611686018427387903,` + + `"repeated_string_value": ["a", "b", "c"],` + + `"oneof_value": {"oneof_string":"x"},` + + `"map_value": {"a": "ONE",` + + ` "b": "ZERO"},` + + `"mapped_string_value": {"a": "x",` + + ` "b": "y"},` + + `"mapped_nested_value": {"a": {"name": "x", "amount": 1},` + + ` "b": {"name": "y", "amount": 2}},` + + `"nonConventionalNameValue": "camelCase",` + + `"timestamp_value": "2016-05-10T10:19:13.123Z",` + + `"repeated_enum_value": ["ONE", "ZERO"],` + + `"repeated_enum_annotation": ["ONE", "ZERO"],` + + `"enum_value_annotation": "ONE",` + + `"repeated_string_annotation": ["a", "b"],` + + `"repeated_nested_annotation": [{"name": "hoge",` + + ` "amount": 10},` + + ` {"name": "fuga",` + + ` "amount": 20}],` + + `"nested_annotation": {"name": "hoge",` + + ` "amount": 10},` + + `"int64_override_type": 12345` + + `}` + var r *field_mask.FieldMask + var err error + for i := 0; i < b.N; i++ { + r, err = runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), md) + } + if err != nil { + b.Error(err) + } + result = r +} + +func BenchmarkNonStandardFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) + input := `{` + + `"id": "foo",` + + `"Num": 2,` + + `"line_num": 3,` + + `"langIdent": "bar",` + + `"STATUS": "baz"` + + `}` + var r *field_mask.FieldMask + var err error + for i := 0; i < b.N; i++ { + r, err = runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), md) + } + if err != nil { + b.Error(err) + } + result = r +} diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index 939fecde84a..febbb75b023 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -1643,10 +1643,23 @@ func TestNonStandardNames(t *testing.T) { return } }() + go func() { + if err := runGateway( + ctx, + ":8082", + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: false, EmitDefaults: true}), + ); err != nil { + t.Errorf("runGateway() failed with %v; want success", err) + return + } + }() if err := waitForGateway(ctx, 8081); err != nil { t.Errorf("waitForGateway(ctx, 8081) failed with %v; want success", err) } + if err := waitForGateway(ctx, 8082); err != nil { + t.Errorf("waitForGateway(ctx, 8082) failed with %v; want success", err) + } for _, tc := range []struct { name string @@ -1667,6 +1680,18 @@ func TestNonStandardNames(t *testing.T) { // N.B. json_names have no effect if not using OrigName: false `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, }, + { + "Test standard update method with OrigName: false marshaller option", + 8082, + "update", + `{"id":"foo","Num":"1","lineNum":"42","langIdent":"English","STATUS":"good","enGB":"1","no":"yes","thing":{"subThing":{"subValue":"hi"}}}`, + }, + { + "Test update method using json_names in message with OrigName: false marshaller option", + 8082, + "update_with_json_names", + `{"ID":"foo","Num":"1","LineNum":"42","langIdent":"English","status":"good","En_GB":"1","yes":"no","Thingy":{"SubThing":{"sub_Value":"hi"}}}`, + }, } { t.Run(tc.name, func(t *testing.T) { testNonStandardNames(t, tc.port, tc.method, tc.jsonBody) diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 4888a802ff9..62a3a147115 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -51,6 +51,7 @@ go_proto_library( "//examples/proto/sub:go_default_library", "//examples/proto/sub2:go_default_library", "//protoc-gen-swagger/options:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", ], ) @@ -63,6 +64,7 @@ go_library( deps = [ "//runtime:go_default_library", "//utilities:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index c6aa89f505c..eaa39346919 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" @@ -26,11 +27,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}} @@ -774,7 +777,8 @@ func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Abe) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -823,7 +827,8 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Abe) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/proto/examplepb/echo_service.pb.gw.go index a0445e04929..001f9661119 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/proto/examplepb/echo_service.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" @@ -22,11 +23,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_EchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/proto/examplepb/flow_combination.pb.gw.go index c69b4f1daae..14599e7a759 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/proto/examplepb/flow_combination.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" @@ -22,11 +23,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage func request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq EmptyProto diff --git a/examples/proto/examplepb/non_standard_names.pb.gw.go b/examples/proto/examplepb/non_standard_names.pb.gw.go index 606554372cf..11cb0b98adc 100644 --- a/examples/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/proto/examplepb/non_standard_names.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" @@ -22,11 +23,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_NonStandardService_Update_0 = &utilities.DoubleArray{Encoding: map[string]int{"body": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} @@ -44,7 +47,8 @@ func request_NonStandardService_Update_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Body) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -75,7 +79,8 @@ func local_request_NonStandardService_Update_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Body) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -107,7 +112,8 @@ func request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Body) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -138,7 +144,8 @@ func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.Body) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/proto/examplepb/response_body_service.pb.gw.go index e90bba3f44c..86d9c4ed9be 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/proto/examplepb/response_body_service.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" @@ -22,11 +23,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage func request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ResponseBodyIn diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/proto/examplepb/stream.pb.gw.go index b2629f9a564..8b33ff5c40a 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/proto/examplepb/stream.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" @@ -24,11 +25,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go index e92b4af943c..27258d252ad 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" @@ -22,11 +23,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/proto/examplepb/wrappers.pb.gw.go index 57ff5f69962..edb9b10a020 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/proto/examplepb/wrappers.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" @@ -24,11 +25,13 @@ import ( "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage func request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq Wrappers diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/gengateway/generator.go index 43943f95643..0b6bfbd2b93 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/gengateway/generator.go @@ -44,6 +44,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p "net/http", "github.com/grpc-ecosystem/grpc-gateway/runtime", "github.com/grpc-ecosystem/grpc-gateway/utilities", + "github.com/golang/protobuf/descriptor", "github.com/golang/protobuf/proto", "google.golang.org/grpc", "google.golang.org/grpc/codes", diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/gengateway/template.go index cd6b1f9e850..1d3d3ca8f19 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/gengateway/template.go @@ -2,6 +2,7 @@ package gengateway import ( "bytes" + "errors" "fmt" "strings" "text/template" @@ -34,6 +35,14 @@ func (b binding) GetBodyFieldPath() string { return "*" } +// GetBodyFieldPath returns the binding body's struct field name. +func (b binding) GetBodyFieldStructName() (string, error) { + if b.Body != nil && len(b.Body.FieldPath) != 0 { + return generator2.CamelCase(b.Body.FieldPath.String()), nil + } + return "", errors.New("No body field found") +} + // HasQueryParam determines if the binding needs parameters in query string. // // It sometimes returns true even though actually the binding does not need. @@ -224,11 +233,13 @@ import ( {{range $i := .Imports}}{{if not $i.Standard}}{{$i | printf "%s\n"}}{{end}}{{end}} ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage `)) handlerTemplate = template.Must(template.New("handler").Parse(` @@ -316,7 +327,8 @@ var ( } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.{{.GetBodyFieldStructName}}) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask @@ -477,7 +489,8 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader()); err != nil { + _, md := descriptor.ForMessage(protoReq.{{.GetBodyFieldStructName}}) + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 2462dc053f7..819c45a7657 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -27,10 +27,12 @@ go_library( deps = [ "//internal:go_default_library", "//utilities:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", + "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index d3eb5782b70..341aad5a3ea 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -5,11 +5,37 @@ import ( "io" "strings" + descriptor2 "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/protoc-gen-go/descriptor" "google.golang.org/genproto/protobuf/field_mask" ) +func translateName(name string, md *descriptor.DescriptorProto) (string, *descriptor.DescriptorProto) { + // TODO - should really gate this with a test that the marshaller has used json names + if md != nil { + for _, f := range md.Field { + if f.JsonName != nil && f.Name != nil && *f.JsonName == name { + var subType *descriptor.DescriptorProto + + // If the field has a TypeName then we retrieve the nested type for translating the embedded message names. + if f.TypeName != nil { + typeSplit := strings.Split(*f.TypeName, ".") + typeName := typeSplit[len(typeSplit)-1] + for _, t := range md.NestedType { + if typeName == *t.Name { + subType = t + } + } + } + return *f.Name, subType + } + } + } + return name, nil +} + // FieldMaskFromRequestBody creates a FieldMask printing all complete paths from the JSON body. -func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) { +func FieldMaskFromRequestBody(r io.Reader, md *descriptor.DescriptorProto) (*field_mask.FieldMask, error) { fm := &field_mask.FieldMask{} var root interface{} if err := json.NewDecoder(r).Decode(&root); err != nil { @@ -19,7 +45,7 @@ func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) { return nil, err } - queue := []fieldMaskPathItem{{node: root}} + queue := []fieldMaskPathItem{{node: root, md: md}} for len(queue) > 0 { // dequeue an item item := queue[0] @@ -28,7 +54,11 @@ func FieldMaskFromRequestBody(r io.Reader) (*field_mask.FieldMask, error) { if m, ok := item.node.(map[string]interface{}); ok { // if the item is an object, then enqueue all of its children for k, v := range m { - queue = append(queue, fieldMaskPathItem{path: append(item.path, k), node: v}) + protoName, subMd := translateName(k, item.md) + if subMsg, ok := v.(descriptor2.Message); ok { + _, subMd = descriptor2.ForMessage(subMsg) + } + queue = append(queue, fieldMaskPathItem{path: append(item.path, protoName), node: v, md: subMd}) } } else if len(item.path) > 0 { // otherwise, it's a leaf node so print its path @@ -46,4 +76,7 @@ type fieldMaskPathItem struct { // a generic decoded json object the current item to inspect for further path extraction node interface{} + + // descriptor for parent message + md *descriptor.DescriptorProto } diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index dae968b8284..7a5ddaae957 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -56,7 +56,7 @@ func TestFieldMaskFromRequestBody(t *testing.T) { {name: "canonical", input: `{"f": {"b": {"d": 1, "x": 2}, "c": 1}}`, expected: newFieldMask("f.b.d", "f.b.x", "f.c")}, } { t.Run(tc.name, func(t *testing.T) { - actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input))) + actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), nil) if !fieldMasksEqual(actual, tc.expected) { t.Errorf("want %v; got %v", fieldMaskString(tc.expected), fieldMaskString(actual)) } @@ -123,7 +123,7 @@ func BenchmarkABEFieldMaskFromRequestBody(b *testing.B) { var r *field_mask.FieldMask var err error for i := 0; i < b.N; i++ { - r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input))) + r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), nil) } if err != nil { b.Error(err) @@ -142,7 +142,7 @@ func BenchmarkNonStandardFieldMaskFromRequestBody(b *testing.B) { var r *field_mask.FieldMask var err error for i := 0; i < b.N; i++ { - r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input))) + r, err = FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), nil) } if err != nil { b.Error(err) From ece8fdf051b731392b407fdb9a9b1b9ffb6f9793 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 30 Sep 2019 10:37:36 +0100 Subject: [PATCH 0222/1518] Generate chagenlog for 1.11.3 --- CHANGELOG.md | 16 ++++++++++++++++ Makefile | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 686e4934ca6..492ee9f74d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Change Log +## [v1.11.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.3) (2019-09-30) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.2...v1.11.3) + +**Closed issues:** + +- json Custom output support \(with examples\) [\#1051](https://github.com/grpc-ecosystem/grpc-gateway/issues/1051) +- Question: Override TransientFailure error with friendlier response [\#1047](https://github.com/grpc-ecosystem/grpc-gateway/issues/1047) +- Wrong codes generated when nested enum in path [\#1017](https://github.com/grpc-ecosystem/grpc-gateway/issues/1017) + +**Merged pull requests:** + +- Support json names in field mask generation [\#1050](https://github.com/grpc-ecosystem/grpc-gateway/pull/1050) ([william-plano-oxb](https://github.com/william-plano-oxb)) +- Fix auto generated fieldmask case in patch requests [\#1049](https://github.com/grpc-ecosystem/grpc-gateway/pull/1049) ([william-plano-oxb](https://github.com/william-plano-oxb)) +- Pass nested enum values through properly when used as url parameters [\#1048](https://github.com/grpc-ecosystem/grpc-gateway/pull/1048) ([mnito](https://github.com/mnito)) + ## [v1.11.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.2) (2019-09-20) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.1...v1.11.2) @@ -21,6 +36,7 @@ **Merged pull requests:** +- Generate changelog for 1.11.2 [\#1045](https://github.com/grpc-ecosystem/grpc-gateway/pull/1045) ([johanbrandhorst](https://github.com/johanbrandhorst)) - examples/integration: wait for secondary gateway [\#1039](https://github.com/grpc-ecosystem/grpc-gateway/pull/1039) ([srenatus](https://github.com/srenatus)) - Update README.md [\#1038](https://github.com/grpc-ecosystem/grpc-gateway/pull/1038) ([piengeng](https://github.com/piengeng)) - Configure stale\[bot\] [\#1036](https://github.com/grpc-ecosystem/grpc-gateway/pull/1036) ([achew22](https://github.com/achew22)) diff --git a/Makefile b/Makefile index f166c512fdf..556da62ddf3 100644 --- a/Makefile +++ b/Makefile @@ -195,7 +195,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.11.2 + --future-release=v1.11.3 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 78dc1a3aee7dec9c657e99eef91e7bc00b77dfe5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 2 Oct 2019 09:21:18 +0100 Subject: [PATCH 0223/1518] Bump generators Dockerfile to 1.13.1 --- .circleci/Dockerfile | 13 ++++++------ .circleci/README.md | 2 +- .circleci/config.yml | 12 +++++------ CONTRIBUTING.md | 2 +- Makefile | 3 +-- .../proto/examplepb/non_standard_names.pb.go | 20 +++++++++---------- go.mod | 2 ++ 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 1343053c0e6..5e555123263 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,18 +1,18 @@ -FROM golang:1.12 +FROM golang:1.13.1 ## Warm apt cache RUN apt-get update # Install swagger-codegen ENV SWAGGER_CODEGEN_VERSION=2.2.2 -RUN apt-get install -y openjdk-8-jre wget && \ +RUN apt-get install -y openjdk-11-jre wget && \ wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ -O /usr/local/bin/swagger-codegen-cli.jar && \ apt-get remove -y wget ENV SWAGGER_CODEGEN="java -jar /usr/local/bin/swagger-codegen-cli.jar" # Install protoc -ENV PROTOC_VERSION=3.7.0 +ENV PROTOC_VERSION=3.9.2 RUN apt-get install -y wget unzip && \ wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ @@ -20,10 +20,11 @@ RUN apt-get install -y wget unzip && \ rm -f /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ apt-get remove -y unzip wget -# Install node -ENV NODE_VERSION=v10.15.2 +# Install node, used by NVM +ENV NODE_VERSION=v10.16.3 +ENV NVM_VERSION=v0.35.0 RUN apt-get install -y wget bzip2 && \ - wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && \ + wget -qO- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash && \ apt-get remove -y wget # Clean up diff --git a/.circleci/README.md b/.circleci/README.md index 4aa13589bed..aff8c5cf78c 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -7,7 +7,7 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. Great, it should be as simple as thus (run from the root of the directory): ```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.12 \ +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' diff --git a/.circleci/config.yml b/.circleci/config.yml index f4332817307..5d2cddb6c26 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,14 @@ version: 2 jobs: build: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway environment: GLOG_logtostderr: '1' @@ -19,7 +19,7 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway steps: - checkout @@ -32,7 +32,7 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway steps: - checkout @@ -42,7 +42,7 @@ jobs: - run: git diff --exit-code lint: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway steps: - checkout @@ -84,7 +84,7 @@ jobs: when: always release: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.12 + - image: jfbrandhorst/grpc-gateway-build-env:1.13 working_directory: /src/grpc-gateway steps: - checkout diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c2ac49c2bb1..fc945f7906c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,7 +24,7 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.12 \ +docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' diff --git a/Makefile b/Makefile index 556da62ddf3..0ea0a74908d 100644 --- a/Makefile +++ b/Makefile @@ -129,8 +129,7 @@ $(GO_PLUGIN): go build -o $(GO_PLUGIN) $(GO_PLUGIN_PKG) $(RUNTIME_GO): $(RUNTIME_PROTO) $(GO_PLUGIN) - go mod vendor - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I ./vendor/$(GO_PTYPES_ANY_PKG) -I. --go_out=$(PKGMAP),paths=source_relative:. $(RUNTIME_PROTO) + protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(RUNTIME_PROTO) $(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(OPENAPIV2_PROTO) diff --git a/examples/proto/examplepb/non_standard_names.pb.go b/examples/proto/examplepb/non_standard_names.pb.go index 839f5537820..7637cf515fe 100644 --- a/examples/proto/examplepb/non_standard_names.pb.go +++ b/examples/proto/examplepb/non_standard_names.pb.go @@ -45,7 +45,7 @@ func (m *NonStandardMessage) Reset() { *m = NonStandardMessage{} } func (m *NonStandardMessage) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage) ProtoMessage() {} func (*NonStandardMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0} } func (m *NonStandardMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage.Unmarshal(m, b) @@ -132,7 +132,7 @@ func (m *NonStandardMessage_Thing) Reset() { *m = NonStandardMessage_Thi func (m *NonStandardMessage_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing) ProtoMessage() {} func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0, 0} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0, 0} } func (m *NonStandardMessage_Thing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage_Thing.Unmarshal(m, b) @@ -170,7 +170,7 @@ func (m *NonStandardMessage_Thing_SubThing) Reset() { *m = NonStandardMe func (m *NonStandardMessage_Thing_SubThing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{0, 0, 0} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0, 0, 0} } func (m *NonStandardMessage_Thing_SubThing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Unmarshal(m, b) @@ -209,7 +209,7 @@ func (m *NonStandardUpdateRequest) Reset() { *m = NonStandardUpdateReque func (m *NonStandardUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardUpdateRequest) ProtoMessage() {} func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{1} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{1} } func (m *NonStandardUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardUpdateRequest.Unmarshal(m, b) @@ -263,7 +263,7 @@ func (m *NonStandardMessageWithJSONNames) Reset() { *m = NonStandardMess func (m *NonStandardMessageWithJSONNames) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames) ProtoMessage() {} func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2} } func (m *NonStandardMessageWithJSONNames) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames.Unmarshal(m, b) @@ -350,7 +350,7 @@ func (m *NonStandardMessageWithJSONNames_Thing) Reset() { *m = NonStanda func (m *NonStandardMessageWithJSONNames_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2, 0} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2, 0} } func (m *NonStandardMessageWithJSONNames_Thing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Unmarshal(m, b) @@ -392,7 +392,7 @@ func (m *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { } func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{2, 0, 0} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2, 0, 0} } func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Unmarshal(m, b) @@ -431,7 +431,7 @@ func (m *NonStandardWithJSONNamesUpdateRequest) Reset() { *m = NonStanda func (m *NonStandardWithJSONNamesUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_1ed497ab0876ca64, []int{3} + return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{3} } func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Unmarshal(m, b) @@ -586,10 +586,10 @@ var _NonStandardService_serviceDesc = grpc.ServiceDesc{ } func init() { - proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_non_standard_names_1ed497ab0876ca64) + proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_non_standard_names_33e1f510ac1f389a) } -var fileDescriptor_non_standard_names_1ed497ab0876ca64 = []byte{ +var fileDescriptor_non_standard_names_33e1f510ac1f389a = []byte{ // 626 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x41, 0x6f, 0xd3, 0x3c, 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0x7a, 0x5f, 0xe4, 0x21, 0x14, 0xc2, 0xa4, 0x56, 0x95, diff --git a/go.mod b/go.mod index e63e264f1b9..c83df465786 100644 --- a/go.mod +++ b/go.mod @@ -14,3 +14,5 @@ require ( gopkg.in/resty.v1 v1.12.0 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect ) + +go 1.13 From 5d50197e43a67566132ae7425a4b4ffbf906ee33 Mon Sep 17 00:00:00 2001 From: Zach Gershman Date: Wed, 2 Oct 2019 08:32:02 -0700 Subject: [PATCH 0224/1518] Update dependencies (#1053) * makefile now actually tests correctly - sed was removed as it was slow and not the canonical way to implement a replace of a go package now that modules have been introduced - go test commands were correct as the elipsis was not testing the right thing - test.Short was added to the rest of the integration tests just in case users wanted to use the -short directive and skip those (matching the style throughout the rest of the integrations * fixing the bazel bits * re-run generation with newer circle dockerfile * updates contributing to note usage of go.mod - gazelle has a slightly different command you need to use based on us using the go.mod to manage our dependencies * move backwards to resty 1.8.0 - stops all the go.mod craziness since they've switched between gopkg.in and github as their module name. - need to upgrade this to v2 in reality but that will depend on what swagger codegen is doing --- CONTRIBUTING.md | 2 +- Makefile | 5 +- WORKSPACE | 6 +- examples/clients/abe/BUILD.bazel | 2 +- examples/clients/abe/api_client.go | 2 +- examples/clients/echo/BUILD.bazel | 2 +- examples/clients/echo/api_client.go | 2 +- examples/clients/responsebody/BUILD.bazel | 2 +- examples/clients/responsebody/api_client.go | 2 +- examples/clients/unannotatedecho/BUILD.bazel | 2 +- .../clients/unannotatedecho/api_client.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 686 +++++++++--------- examples/proto/examplepb/echo_service.pb.go | 298 ++------ .../proto/examplepb/flow_combination.pb.go | 183 +++-- .../proto/examplepb/non_standard_names.pb.go | 180 +++-- .../examplepb/response_body_service.pb.go | 149 ++-- examples/proto/examplepb/stream.pb.go | 89 ++- .../examplepb/unannotated_echo_service.pb.go | 104 +-- examples/proto/examplepb/wrappers.pb.go | 154 ++-- examples/proto/pathenum/path_enum.pb.go | 33 +- examples/proto/sub/message.pb.go | 23 +- examples/proto/sub2/message.pb.go | 25 +- go.mod | 21 +- go.sum | 55 +- internal/stream_chunk.pb.go | 25 +- protoc-gen-swagger/options/annotations.pb.go | 28 +- protoc-gen-swagger/options/openapiv2.pb.go | 157 ++-- repositories.bzl | 69 +- 28 files changed, 1208 insertions(+), 1100 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc945f7906c..ecab022c28f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env: make realclean && \ make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle; bazel run :buildifier' + l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. diff --git a/Makefile b/Makefile index 0ea0a74908d..0ee29234c36 100644 --- a/Makefile +++ b/Makefile @@ -177,10 +177,9 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) - find . -type f -name *.go -exec sed -s -i 's;github.com/go-resty/resty;gopkg.in/resty.v1;g' {} + test: examples - go test -race ... - go test -race examples/integration -args -network=unix -endpoint=test.sock + go test -short -race ./... + go test -race ./examples/integration -args -network=unix -endpoint=test.sock changelog: docker run --rm \ --interactive \ diff --git a/WORKSPACE b/WORKSPACE index 79e4cd83235..280712e741b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -19,10 +19,10 @@ go_register_toolchains() http_archive( name = "bazel_gazelle", - sha256 = "be9296bfd64882e3c08e3283c58fcb461fa6dd3c171764fcc4cf322f60615a9b", + sha256 = "7fc87f4170011201b1690326e8c16c5d802836e3a0d617d8f75c3af2b23180c4", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/0.18.1/bazel-gazelle-0.18.1.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.18.1/bazel-gazelle-0.18.1.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", ], ) diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 4c28ed28d6a..4d3c3546e93 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -30,6 +30,6 @@ go_library( "//examples/proto/examplepb:go_default_library", "//examples/proto/pathenum:go_default_library", "//runtime:go_default_library", - "@in_gopkg_resty_v1//:go_default_library", + "@com_github_go_resty_resty//:go_default_library", ], ) diff --git a/examples/clients/abe/api_client.go b/examples/clients/abe/api_client.go index d6bc762e9bd..bf3e21a9fb1 100644 --- a/examples/clients/abe/api_client.go +++ b/examples/clients/abe/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "gopkg.in/resty.v1" + "github.com/go-resty/resty" ) type APIClient struct { diff --git a/examples/clients/echo/BUILD.bazel b/examples/clients/echo/BUILD.bazel index 97f3f317ba5..090b56aafab 100644 --- a/examples/clients/echo/BUILD.bazel +++ b/examples/clients/echo/BUILD.bazel @@ -13,5 +13,5 @@ go_library( "examplepb_simple_message.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo", - deps = ["@in_gopkg_resty_v1//:go_default_library"], + deps = ["@com_github_go_resty_resty//:go_default_library"], ) diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go index d3facaa4633..7a517148026 100644 --- a/examples/clients/echo/api_client.go +++ b/examples/clients/echo/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "gopkg.in/resty.v1" + "github.com/go-resty/resty" ) type APIClient struct { diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index 0f7ce09fc40..e621bea6960 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -19,5 +19,5 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", visibility = ["//visibility:public"], - deps = ["@in_gopkg_resty_v1//:go_default_library"], + deps = ["@com_github_go_resty_resty//:go_default_library"], ) diff --git a/examples/clients/responsebody/api_client.go b/examples/clients/responsebody/api_client.go index 1ac422ec895..1f7354b61dc 100644 --- a/examples/clients/responsebody/api_client.go +++ b/examples/clients/responsebody/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "gopkg.in/resty.v1" + "github.com/go-resty/resty" ) type APIClient struct { diff --git a/examples/clients/unannotatedecho/BUILD.bazel b/examples/clients/unannotatedecho/BUILD.bazel index c7c60503b9c..611c6c7052d 100644 --- a/examples/clients/unannotatedecho/BUILD.bazel +++ b/examples/clients/unannotatedecho/BUILD.bazel @@ -12,5 +12,5 @@ go_library( "unannotated_echo_service_api.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho", - deps = ["@in_gopkg_resty_v1//:go_default_library"], + deps = ["@com_github_go_resty_resty//:go_default_library"], ) diff --git a/examples/clients/unannotatedecho/api_client.go b/examples/clients/unannotatedecho/api_client.go index c898727e74b..aa4c1f14e42 100644 --- a/examples/clients/unannotatedecho/api_client.go +++ b/examples/clients/unannotatedecho/api_client.go @@ -18,7 +18,7 @@ import ( "strings" "net/url" "io/ioutil" - "gopkg.in/resty.v1" + "github.com/go-resty/resty" ) type APIClient struct { diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 7cc2c7209a7..e8df7423c79 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -3,22 +3,23 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import duration "github.com/golang/protobuf/ptypes/duration" -import empty "github.com/golang/protobuf/ptypes/empty" -import timestamp "github.com/golang/protobuf/ptypes/timestamp" -import pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" -import sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" -import sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" -import _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import field_mask "google.golang.org/genproto/protobuf/field_mask" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + empty "github.com/golang/protobuf/ptypes/empty" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" + sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + _ "google.golang.org/genproto/googleapis/api/annotations" + field_mask "google.golang.org/genproto/protobuf/field_mask" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -30,7 +31,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // NumericEnum is one or zero. type NumericEnum int32 @@ -46,6 +47,7 @@ var NumericEnum_name = map[int32]string{ 0: "ZERO", 1: "ONE", } + var NumericEnum_value = map[string]int32{ "ZERO": 0, "ONE": 1, @@ -54,8 +56,9 @@ var NumericEnum_value = map[string]int32{ func (x NumericEnum) String() string { return proto.EnumName(NumericEnum_name, int32(x)) } + func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0} + return fileDescriptor_3978364c010e812a, []int{0} } // DeepEnum is one or zero. @@ -72,6 +75,7 @@ var ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ 0: "FALSE", 1: "TRUE", } + var ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ "FALSE": 0, "TRUE": 1, @@ -80,8 +84,9 @@ var ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ func (x ABitOfEverything_Nested_DeepEnum) String() string { return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) } + func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0, 0, 0} + return fileDescriptor_3978364c010e812a, []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. @@ -139,16 +144,17 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0} + return fileDescriptor_3978364c010e812a, []int{0} } + func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) } func (m *ABitOfEverything) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ABitOfEverything.Marshal(b, m, deterministic) } -func (dst *ABitOfEverything) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything.Merge(dst, src) +func (m *ABitOfEverything) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverything.Merge(m, src) } func (m *ABitOfEverything) XXX_Size() int { return xxx_messageInfo_ABitOfEverything.Size(m) @@ -434,76 +440,14 @@ func (m *ABitOfEverything) GetInt64OverrideType() int64 { return 0 } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*ABitOfEverything) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _ABitOfEverything_OneofMarshaler, _ABitOfEverything_OneofUnmarshaler, _ABitOfEverything_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ABitOfEverything) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*ABitOfEverything_OneofEmpty)(nil), (*ABitOfEverything_OneofString)(nil), } } -func _ABitOfEverything_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*ABitOfEverything) - // oneof_value - switch x := m.OneofValue.(type) { - case *ABitOfEverything_OneofEmpty: - b.EncodeVarint(20<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.OneofEmpty); err != nil { - return err - } - case *ABitOfEverything_OneofString: - b.EncodeVarint(21<<3 | proto.WireBytes) - b.EncodeStringBytes(x.OneofString) - case nil: - default: - return fmt.Errorf("ABitOfEverything.OneofValue has unexpected type %T", x) - } - return nil -} - -func _ABitOfEverything_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*ABitOfEverything) - switch tag { - case 20: // oneof_value.oneof_empty - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(empty.Empty) - err := b.DecodeMessage(msg) - m.OneofValue = &ABitOfEverything_OneofEmpty{msg} - return true, err - case 21: // oneof_value.oneof_string - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.OneofValue = &ABitOfEverything_OneofString{x} - return true, err - default: - return false, nil - } -} - -func _ABitOfEverything_OneofSizer(msg proto.Message) (n int) { - m := msg.(*ABitOfEverything) - // oneof_value - switch x := m.OneofValue.(type) { - case *ABitOfEverything_OneofEmpty: - s := proto.Size(x.OneofEmpty) - n += 2 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *ABitOfEverything_OneofString: - n += 2 // tag and wire - n += proto.SizeVarint(uint64(len(x.OneofString))) - n += len(x.OneofString) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - // Nested is nested type. type ABitOfEverything_Nested struct { // name is nested field. @@ -520,16 +464,17 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{0, 0} + return fileDescriptor_3978364c010e812a, []int{0, 0} } + func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) } func (m *ABitOfEverything_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ABitOfEverything_Nested.Marshal(b, m, deterministic) } -func (dst *ABitOfEverything_Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything_Nested.Merge(dst, src) +func (m *ABitOfEverything_Nested) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverything_Nested.Merge(m, src) } func (m *ABitOfEverything_Nested) XXX_Size() int { return xxx_messageInfo_ABitOfEverything_Nested.Size(m) @@ -589,16 +534,17 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{1} + return fileDescriptor_3978364c010e812a, []int{1} } + func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) } func (m *ABitOfEverythingRepeated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ABitOfEverythingRepeated.Marshal(b, m, deterministic) } -func (dst *ABitOfEverythingRepeated) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverythingRepeated.Merge(dst, src) +func (m *ABitOfEverythingRepeated) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverythingRepeated.Merge(m, src) } func (m *ABitOfEverythingRepeated) XXX_Size() int { return xxx_messageInfo_ABitOfEverythingRepeated.Size(m) @@ -732,16 +678,17 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{2} + return fileDescriptor_3978364c010e812a, []int{2} } + func (m *Body) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Body.Unmarshal(m, b) } func (m *Body) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Body.Marshal(b, m, deterministic) } -func (dst *Body) XXX_Merge(src proto.Message) { - xxx_messageInfo_Body.Merge(dst, src) +func (m *Body) XXX_Merge(src proto.Message) { + xxx_messageInfo_Body.Merge(m, src) } func (m *Body) XXX_Size() int { return xxx_messageInfo_Body.Size(m) @@ -771,16 +718,17 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{3} + return fileDescriptor_3978364c010e812a, []int{3} } + func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) } func (m *MessageWithBody) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessageWithBody.Marshal(b, m, deterministic) } -func (dst *MessageWithBody) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageWithBody.Merge(dst, src) +func (m *MessageWithBody) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageWithBody.Merge(m, src) } func (m *MessageWithBody) XXX_Size() int { return xxx_messageInfo_MessageWithBody.Size(m) @@ -818,16 +766,17 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_a_bit_of_everything_e0089283b92675c0, []int{4} + return fileDescriptor_3978364c010e812a, []int{4} } + func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) } func (m *UpdateV2Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UpdateV2Request.Marshal(b, m, deterministic) } -func (dst *UpdateV2Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateV2Request.Merge(dst, src) +func (m *UpdateV2Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateV2Request.Merge(m, src) } func (m *UpdateV2Request) XXX_Size() int { return xxx_messageInfo_UpdateV2Request.Size(m) @@ -853,6 +802,8 @@ func (m *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { } func init() { + proto.RegisterEnum("grpc.gateway.examples.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) + proto.RegisterEnum("grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything") proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MapValueEntry") proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MappedNestedValueEntry") @@ -862,8 +813,235 @@ func init() { proto.RegisterType((*Body)(nil), "grpc.gateway.examples.examplepb.Body") proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.examplepb.MessageWithBody") proto.RegisterType((*UpdateV2Request)(nil), "grpc.gateway.examples.examplepb.UpdateV2Request") - proto.RegisterEnum("grpc.gateway.examples.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) - proto.RegisterEnum("grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) +} + +func init() { + proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_3978364c010e812a) +} + +var fileDescriptor_3978364c010e812a = []byte{ + // 3529 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, + 0x7e, 0xd7, 0x72, 0x25, 0x59, 0x1a, 0x7d, 0x8f, 0x2c, 0x5b, 0xa6, 0x95, 0x68, 0x4c, 0x3b, 0x2f, + 0x6b, 0x3e, 0x93, 0x2b, 0xad, 0x94, 0xc4, 0x66, 0xfa, 0x92, 0x90, 0x92, 0xec, 0xc8, 0x4e, 0x64, + 0x65, 0xed, 0xb8, 0xa9, 0x5f, 0xfc, 0xd4, 0x21, 0x39, 0x14, 0xd7, 0xe2, 0xee, 0xec, 0xdb, 0x9d, + 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0xfd, 0x7e, 0x68, 0x2f, 0x45, + 0x51, 0xa0, 0xe8, 0xa9, 0x40, 0x4f, 0x05, 0xda, 0x4b, 0x6f, 0x3d, 0xb4, 0x48, 0x81, 0xa2, 0x87, + 0xf6, 0xd4, 0x9e, 0x7b, 0x69, 0x11, 0xa0, 0x87, 0x7e, 0x60, 0x66, 0x77, 0xc9, 0xdd, 0x25, 0x69, + 0x99, 0x76, 0x91, 0xe4, 0x10, 0xef, 0xcc, 0xfc, 0x3f, 0x7e, 0xff, 0x99, 0xff, 0xfc, 0x3f, 0x86, + 0x02, 0x1a, 0x39, 0xc1, 0xa6, 0xdd, 0x20, 0xae, 0x6a, 0x3b, 0x94, 0x51, 0x35, 0x18, 0xda, 0x65, + 0x15, 0x1f, 0x94, 0x0d, 0x76, 0x40, 0x6b, 0x07, 0xe4, 0x98, 0x38, 0x4d, 0x56, 0x37, 0xac, 0xc3, + 0xbc, 0xa0, 0x81, 0xab, 0x87, 0x8e, 0x5d, 0xc9, 0x1f, 0x62, 0x46, 0x9e, 0xe1, 0x66, 0x3e, 0x14, + 0x90, 0xef, 0xb0, 0xa6, 0x57, 0x0e, 0x29, 0x3d, 0x6c, 0x10, 0x15, 0xdb, 0x86, 0x8a, 0x2d, 0x8b, + 0x32, 0xcc, 0x0c, 0x6a, 0xb9, 0x3e, 0x7b, 0x1a, 0x05, 0xab, 0x62, 0x54, 0xf6, 0x6a, 0x6a, 0xcd, + 0x20, 0x8d, 0xea, 0x81, 0x89, 0xdd, 0xa3, 0x80, 0xe2, 0x72, 0x92, 0x82, 0x98, 0x36, 0x6b, 0x06, + 0x8b, 0x6f, 0x26, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x07, 0xeb, 0x6f, 0x27, 0x2c, 0xb2, 0x31, 0xab, + 0x13, 0xcb, 0x33, 0xc5, 0xc7, 0x01, 0xff, 0x0a, 0x71, 0x24, 0x08, 0x5d, 0xaf, 0xac, 0x9a, 0xc4, + 0x75, 0xf1, 0x21, 0x09, 0x28, 0xae, 0xf4, 0x52, 0x68, 0x09, 0x92, 0xd5, 0x24, 0x1a, 0x66, 0x98, + 0xc4, 0x65, 0xd8, 0xb4, 0x03, 0x82, 0x1b, 0xe2, 0x9f, 0x4a, 0xee, 0x90, 0x58, 0x39, 0xf7, 0x19, + 0x3e, 0x3c, 0x24, 0x8e, 0x4a, 0x6d, 0xb1, 0x1f, 0xbd, 0x7b, 0x93, 0xf9, 0xfb, 0xcb, 0x60, 0xbe, + 0x58, 0x32, 0xd8, 0xfd, 0xda, 0x4e, 0x67, 0xd7, 0xe1, 0x13, 0x30, 0xe3, 0x1a, 0xd6, 0x61, 0x83, + 0x1c, 0x58, 0xc4, 0x65, 0xa4, 0xba, 0x7c, 0x09, 0x49, 0xca, 0x94, 0x76, 0x33, 0x7f, 0xc6, 0x39, + 0xe4, 0x93, 0x92, 0xf2, 0x7b, 0x82, 0x5f, 0x9f, 0xf6, 0xc5, 0xf9, 0x23, 0x58, 0x07, 0xa3, 0x9e, + 0x67, 0x54, 0x97, 0x25, 0x24, 0x29, 0x93, 0xa5, 0x87, 0xed, 0xe2, 0x67, 0x3f, 0x92, 0xa4, 0xdf, + 0x90, 0xee, 0x7d, 0x1f, 0xe7, 0x6a, 0xc5, 0xdc, 0xed, 0xb5, 0xdc, 0xad, 0x27, 0xa7, 0x37, 0x5b, + 0xb9, 0xe8, 0x70, 0x73, 0x98, 0xe1, 0xba, 0xd6, 0xd2, 0x85, 0x06, 0xb8, 0x0f, 0xc6, 0x03, 0x0b, + 0x52, 0x48, 0x7e, 0x2d, 0x0b, 0x02, 0x39, 0xf0, 0x2e, 0x98, 0xaa, 0x35, 0x28, 0x66, 0x07, 0xc7, + 0xb8, 0xe1, 0x91, 0x65, 0x19, 0x49, 0x4a, 0xaa, 0x74, 0xbd, 0x5d, 0xfc, 0x8e, 0xb6, 0x70, 0x9b, + 0xcf, 0x23, 0x31, 0x8f, 0x84, 0x87, 0x15, 0xe4, 0xb5, 0xbc, 0xf6, 0x95, 0x14, 0x65, 0xd0, 0x81, + 0x18, 0x3c, 0xe2, 0xdf, 0xf0, 0x0a, 0x98, 0xae, 0x52, 0xaf, 0xdc, 0x20, 0x81, 0xb0, 0x51, 0x24, + 0x29, 0x92, 0x3e, 0xe5, 0xcf, 0xf9, 0x24, 0xab, 0x60, 0xca, 0xb0, 0xd8, 0xbb, 0x9b, 0x01, 0xc5, + 0x18, 0x92, 0x14, 0x59, 0x07, 0x62, 0xaa, 0x23, 0xc3, 0x8b, 0x52, 0x8c, 0x23, 0x49, 0x19, 0xd5, + 0xa7, 0xbc, 0x08, 0x89, 0x2f, 0x63, 0x43, 0x0b, 0x28, 0xce, 0x21, 0x49, 0x19, 0x13, 0x32, 0x36, + 0x34, 0x9f, 0xe0, 0x2a, 0x98, 0xa9, 0x19, 0x27, 0xa4, 0xda, 0x11, 0x32, 0x81, 0x24, 0x65, 0x5c, + 0x9f, 0x0e, 0x26, 0xe3, 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xce, 0x05, 0x44, 0xa1, 0xa4, 0x37, + 0x00, 0x28, 0x53, 0xda, 0x08, 0x28, 0x00, 0x92, 0x94, 0x09, 0x7d, 0x92, 0xcf, 0x74, 0xc0, 0xba, + 0xcc, 0x31, 0xac, 0xc3, 0x80, 0x60, 0x8a, 0x3b, 0x80, 0x3e, 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, + 0x8c, 0xb8, 0x01, 0xc5, 0x1b, 0x48, 0x52, 0xa6, 0x75, 0x20, 0xa6, 0x62, 0x06, 0x77, 0x60, 0xcc, + 0x20, 0x49, 0x99, 0xf1, 0x0d, 0x0e, 0x51, 0xdc, 0x03, 0x80, 0xdf, 0xba, 0x80, 0x60, 0x16, 0x49, + 0xca, 0xac, 0x76, 0xe3, 0xcc, 0x93, 0xdf, 0xf3, 0x4c, 0xe2, 0x18, 0x95, 0x1d, 0xcb, 0x33, 0xf5, + 0x49, 0xce, 0xef, 0x0b, 0xdb, 0x07, 0x73, 0x9d, 0x7b, 0x1c, 0x48, 0x7c, 0x53, 0x48, 0x54, 0x06, + 0x48, 0x0c, 0xaf, 0x7f, 0x7e, 0x1f, 0xb3, 0xba, 0x90, 0x36, 0x63, 0x07, 0x5f, 0xbe, 0x44, 0x17, + 0x5c, 0xf0, 0x9d, 0xe9, 0x20, 0x29, 0x78, 0x55, 0x08, 0xfe, 0xe0, 0x2c, 0xc1, 0x9f, 0xfa, 0x01, + 0x21, 0x94, 0x1f, 0xb8, 0x68, 0x47, 0xdd, 0xa2, 0x15, 0x1b, 0xfb, 0x4a, 0xdf, 0x02, 0xb3, 0x6e, + 0xfc, 0xfc, 0xe6, 0x90, 0xa4, 0xcc, 0xe9, 0x33, 0x6e, 0xec, 0x00, 0x3b, 0x64, 0x1d, 0x5f, 0x98, + 0x47, 0x92, 0x32, 0x1f, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x02, 0x92, 0x94, 0x05, 0x7d, + 0xca, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x91, 0x03, 0x91, 0xa4, 0x40, 0x9f, 0x24, 0x94, 0xa2, 0x81, + 0x25, 0x87, 0xd8, 0x04, 0xf3, 0xad, 0x88, 0xf9, 0xc5, 0x22, 0x92, 0x95, 0x49, 0x7d, 0x31, 0x5c, + 0x7c, 0x10, 0xf1, 0x8f, 0x5b, 0x60, 0x8a, 0x5a, 0x84, 0x27, 0x09, 0x1e, 0xa1, 0x97, 0xcf, 0x8b, + 0xc0, 0x74, 0x21, 0xef, 0x07, 0xc5, 0x7c, 0x18, 0x14, 0xf3, 0x3b, 0x7c, 0xf5, 0xe3, 0x11, 0x1d, + 0x08, 0x62, 0x31, 0x82, 0x57, 0xc1, 0xb4, 0xcf, 0xea, 0xeb, 0x5a, 0x5e, 0xe2, 0xde, 0xf7, 0xf1, + 0x88, 0xee, 0x0b, 0xf4, 0x95, 0xc0, 0x2f, 0xc1, 0xa4, 0x89, 0xed, 0x00, 0xc7, 0x05, 0x11, 0x34, + 0x3e, 0x1c, 0x3e, 0x68, 0x7c, 0x8a, 0x6d, 0x01, 0x77, 0xc7, 0x62, 0x4e, 0x53, 0x9f, 0x30, 0x83, + 0x21, 0x3c, 0x01, 0x8b, 0x26, 0xb6, 0xed, 0xa4, 0xbd, 0x17, 0x85, 0x9e, 0x8f, 0x5f, 0x49, 0x8f, + 0x1d, 0xdb, 0x1f, 0x5f, 0xe1, 0x82, 0x99, 0x9c, 0x8f, 0x68, 0x0e, 0x7c, 0xcf, 0xd7, 0xbc, 0xfc, + 0x7a, 0x9a, 0x7d, 0xcf, 0xeb, 0xd5, 0x1c, 0x99, 0x87, 0x05, 0xb0, 0x6c, 0x51, 0x6b, 0x8b, 0x5a, + 0xc7, 0xc4, 0xe2, 0x99, 0x07, 0x37, 0xf6, 0xb0, 0xe9, 0x87, 0xb7, 0xe5, 0xb4, 0x08, 0x00, 0x03, + 0xd7, 0xe1, 0x16, 0x98, 0xeb, 0xa4, 0xb7, 0x00, 0xf1, 0x65, 0x71, 0xe2, 0xe9, 0x9e, 0x13, 0x7f, + 0x18, 0xd2, 0xe9, 0xb3, 0x1d, 0x16, 0x5f, 0xc8, 0x97, 0xa0, 0xe3, 0x49, 0xd1, 0xcb, 0xb6, 0x82, + 0xe4, 0xa1, 0xe3, 0xc2, 0x42, 0x28, 0xa8, 0x7b, 0xb1, 0xfe, 0x4c, 0x02, 0xcb, 0x71, 0xf1, 0xdd, + 0x24, 0xbb, 0x8c, 0x86, 0xd7, 0x51, 0xda, 0x6e, 0x17, 0x8b, 0xd9, 0xcb, 0x7a, 0x20, 0x12, 0x59, + 0xfe, 0x12, 0xe2, 0xa2, 0x11, 0x33, 0x58, 0x83, 0x68, 0x99, 0xfe, 0x8b, 0x55, 0xe2, 0x56, 0x1c, + 0x43, 0x64, 0xfa, 0xbc, 0x7e, 0x21, 0x8a, 0xb4, 0xd8, 0x41, 0x04, 0x7f, 0x53, 0x02, 0x4b, 0xdd, + 0x4d, 0x88, 0x62, 0xbd, 0x32, 0x7c, 0x9c, 0x2c, 0x69, 0xed, 0xa2, 0x9a, 0x85, 0x7b, 0xbd, 0x10, + 0x2f, 0xed, 0x0d, 0x44, 0xb6, 0xd8, 0x89, 0xad, 0x11, 0x58, 0xc7, 0x20, 0x9d, 0x0c, 0x05, 0x11, + 0x68, 0x19, 0x1e, 0x0f, 0x4a, 0x37, 0xdb, 0xc5, 0x77, 0xb2, 0x4b, 0x1d, 0xdb, 0x7d, 0xb2, 0x40, + 0xdf, 0x4a, 0x72, 0x3a, 0xa6, 0x72, 0x39, 0x1e, 0x49, 0x22, 0x7a, 0xff, 0x4a, 0x8a, 0x28, 0x0e, + 0x6e, 0x46, 0x44, 0xf1, 0xd5, 0xd7, 0xab, 0x1a, 0x4a, 0xb7, 0xdb, 0xc5, 0xad, 0x6c, 0x17, 0x9b, + 0xaf, 0x00, 0xd1, 0xf2, 0x53, 0x52, 0x61, 0x01, 0xf2, 0xab, 0x03, 0x56, 0xfb, 0x1b, 0xe0, 0xcb, + 0x8d, 0x18, 0xf0, 0x53, 0x09, 0x2c, 0xf4, 0xe2, 0xbe, 0xf6, 0x7a, 0xf5, 0x5a, 0x69, 0xb3, 0x5d, + 0x5c, 0xcf, 0x2e, 0xee, 0xf5, 0x81, 0x9b, 0xde, 0x1b, 0x8c, 0x72, 0xde, 0x4a, 0xa2, 0x7b, 0x0f, + 0x2c, 0xfa, 0x39, 0x80, 0x1e, 0x13, 0xc7, 0x31, 0xaa, 0xe4, 0x80, 0x35, 0x6d, 0xb2, 0xfc, 0x16, + 0x2f, 0x63, 0x4a, 0xe7, 0xda, 0xc5, 0xd1, 0xdf, 0x4f, 0x49, 0xb2, 0xbe, 0x20, 0x68, 0xee, 0x07, + 0x24, 0x0f, 0x9b, 0x36, 0x49, 0xff, 0x8b, 0x04, 0xc6, 0x83, 0x6a, 0x11, 0x82, 0x51, 0x0b, 0x9b, + 0xc4, 0xaf, 0x16, 0x75, 0xf1, 0x0d, 0x2f, 0x80, 0x71, 0x6c, 0x52, 0xcf, 0x62, 0xcb, 0x29, 0x91, + 0xfe, 0x83, 0x11, 0x34, 0x41, 0x8a, 0x1e, 0x89, 0xa2, 0x6c, 0x56, 0x2b, 0xbe, 0xaa, 0xf5, 0xf9, + 0x6d, 0x42, 0x6c, 0xe1, 0xde, 0xe9, 0x76, 0xf1, 0xa2, 0xb6, 0x14, 0x0e, 0xe3, 0xc6, 0xa6, 0xe8, + 0x51, 0x66, 0x15, 0x4c, 0x84, 0x8b, 0x70, 0x12, 0x8c, 0xdd, 0x2e, 0x7e, 0xf2, 0x60, 0x67, 0x7e, + 0x04, 0x4e, 0x80, 0xd1, 0x87, 0xfa, 0xe7, 0x3b, 0xf3, 0x52, 0xe1, 0x62, 0xbb, 0x78, 0x5e, 0x83, + 0x70, 0xfe, 0x14, 0x65, 0xe8, 0x51, 0xa6, 0x80, 0x32, 0x7c, 0x3e, 0x83, 0x5a, 0x69, 0x03, 0xcc, + 0xc4, 0x72, 0x04, 0x9c, 0x07, 0xf2, 0x11, 0x69, 0x06, 0x46, 0xf2, 0x4f, 0x58, 0x02, 0x63, 0x7e, + 0xa0, 0x4a, 0xbd, 0x42, 0x01, 0xe3, 0xb3, 0x16, 0x52, 0x37, 0xa5, 0xf4, 0x36, 0xb8, 0xd0, 0x3f, + 0x4d, 0xf4, 0xd1, 0x79, 0x3e, 0xaa, 0x73, 0x32, 0x2a, 0xe5, 0x17, 0x43, 0x29, 0xc9, 0x90, 0xdf, + 0x47, 0xca, 0x5e, 0x54, 0xca, 0xeb, 0x14, 0xdd, 0x5d, 0xfd, 0x85, 0xdf, 0x4b, 0xb5, 0x8b, 0xbf, + 0x95, 0x02, 0xbf, 0x2a, 0x65, 0x17, 0x8b, 0xa8, 0x6c, 0x30, 0x44, 0x6b, 0xa8, 0xdb, 0x27, 0x6a, + 0xbb, 0xbb, 0x16, 0x0b, 0xd3, 0x47, 0x13, 0x55, 0xa8, 0x69, 0x37, 0x8c, 0x8a, 0xb8, 0x55, 0x41, + 0xf7, 0x84, 0xb8, 0xe3, 0x21, 0x46, 0x51, 0x85, 0xbb, 0x22, 0x32, 0xb1, 0xd5, 0x44, 0x35, 0x82, + 0x99, 0xe7, 0x10, 0x97, 0xcb, 0xda, 0x0f, 0xf3, 0xc8, 0x57, 0x92, 0x68, 0x1d, 0xbe, 0x92, 0xa2, + 0x85, 0xf7, 0x57, 0x52, 0xac, 0x52, 0xcf, 0x3e, 0x02, 0xd7, 0x6e, 0x1b, 0x56, 0x15, 0x51, 0x8f, + 0x21, 0x93, 0x3a, 0x04, 0xe1, 0x32, 0xff, 0xec, 0x69, 0xa4, 0xf2, 0x75, 0xc6, 0x6c, 0xb7, 0xa0, + 0xaa, 0x87, 0x06, 0xab, 0x7b, 0xe5, 0x7c, 0x85, 0x9a, 0x2a, 0xdf, 0x8c, 0x1c, 0xa9, 0x50, 0xb7, + 0xe9, 0x32, 0x12, 0x0c, 0x83, 0xbd, 0xd1, 0x36, 0xa1, 0x76, 0x8a, 0x32, 0x5c, 0x3f, 0x77, 0x96, + 0xb5, 0x4a, 0x6d, 0xe3, 0xdd, 0x75, 0xb2, 0x9e, 0xdb, 0x2c, 0x6f, 0x6e, 0xe6, 0x36, 0x6f, 0x6e, + 0x54, 0x73, 0x78, 0xfd, 0x9d, 0x5b, 0xb9, 0x77, 0x36, 0xab, 0xb8, 0x5c, 0xad, 0xbd, 0x47, 0x6e, + 0xae, 0x6f, 0x66, 0x50, 0xab, 0x34, 0x13, 0xd6, 0x44, 0x02, 0x5c, 0xe6, 0x7f, 0x26, 0xc0, 0x72, + 0x12, 0x49, 0x18, 0x64, 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xed, 0x66, 0x24, + 0x24, 0x2b, 0x29, 0xfd, 0x02, 0x27, 0x08, 0x19, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x3a, 0xce, + 0x1a, 0x6b, 0x5e, 0x78, 0x83, 0x25, 0xe9, 0x17, 0xa3, 0xbc, 0xdb, 0x91, 0x46, 0xa6, 0x47, 0x6f, + 0xb4, 0x36, 0x94, 0x91, 0xac, 0xc8, 0x71, 0xbd, 0xbb, 0xdd, 0x32, 0xb1, 0x47, 0x6f, 0xac, 0xe1, + 0x19, 0x45, 0xb2, 0x32, 0x1a, 0xd7, 0xfb, 0x79, 0xa4, 0xc6, 0xec, 0xa7, 0xb7, 0x53, 0xb6, 0x8e, + 0x21, 0x59, 0x19, 0xeb, 0xd1, 0x1b, 0x56, 0xb0, 0xdf, 0x03, 0x97, 0x13, 0x5b, 0x15, 0x2b, 0x8c, + 0xc7, 0x91, 0xac, 0x8c, 0xeb, 0xcb, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0xfd, 0xd9, 0x23, 0x6d, 0x98, + 0xac, 0x9c, 0xeb, 0xc3, 0x1e, 0x6a, 0x7f, 0x0f, 0x2c, 0xc7, 0xd9, 0x23, 0x8d, 0xd5, 0x04, 0x92, + 0x95, 0x09, 0x7d, 0x29, 0xca, 0x5b, 0xea, 0x34, 0x59, 0x3d, 0xdb, 0x15, 0x2b, 0x35, 0x27, 0x45, + 0x69, 0x1d, 0xdb, 0xae, 0x78, 0x79, 0x9d, 0xd8, 0xae, 0x68, 0x33, 0x06, 0x90, 0xac, 0x4c, 0xc7, + 0xb7, 0xab, 0xd4, 0x6d, 0xcc, 0xfa, 0x1e, 0x53, 0xc7, 0xdc, 0x29, 0x24, 0x2b, 0x33, 0xbd, 0xc7, + 0x14, 0x5a, 0x4b, 0x92, 0xd6, 0x46, 0x0a, 0xb5, 0xe9, 0x57, 0x28, 0xd4, 0x62, 0x7b, 0xd3, 0x2d, + 0xd6, 0x3e, 0x04, 0x2b, 0x89, 0xbd, 0x89, 0x1f, 0xca, 0x0c, 0x92, 0x95, 0x39, 0xfd, 0x52, 0x6c, + 0x77, 0x62, 0xfd, 0xd1, 0x00, 0x01, 0x1d, 0xa7, 0x98, 0x45, 0xb2, 0x32, 0xdf, 0x4f, 0xc0, 0x40, + 0x67, 0x8e, 0xf5, 0x51, 0x73, 0x48, 0x56, 0x16, 0x12, 0xa7, 0x13, 0xd9, 0xa5, 0xbe, 0xcc, 0x91, + 0x4e, 0x4d, 0x56, 0x60, 0x2f, 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0x89, 0x56, 0x81, 0xf8, 0x14, + 0x65, 0x06, 0x39, 0x56, 0xa6, 0x80, 0xbe, 0xcf, 0x1c, 0x8f, 0xdc, 0x40, 0xfe, 0xff, 0x6b, 0xb8, + 0xe1, 0x06, 0x83, 0x27, 0x37, 0x92, 0x6c, 0x11, 0xdc, 0x9c, 0x6f, 0xfd, 0x06, 0xd2, 0x6e, 0xa0, + 0x8d, 0x27, 0xa8, 0x95, 0x49, 0x83, 0xd1, 0x12, 0xad, 0x36, 0xfb, 0x65, 0xee, 0xcc, 0x97, 0x60, + 0x2e, 0x68, 0x5f, 0x7f, 0xd6, 0x60, 0x75, 0x41, 0x36, 0x0b, 0x52, 0xe1, 0x63, 0x90, 0x9e, 0x32, + 0x78, 0x88, 0x1a, 0xad, 0x62, 0x86, 0x83, 0xec, 0xf1, 0xd6, 0x99, 0xe7, 0xce, 0x85, 0xe8, 0x82, + 0x25, 0xf3, 0x13, 0x09, 0xcc, 0x7d, 0x6e, 0x57, 0x31, 0x23, 0x8f, 0x34, 0x9d, 0xfc, 0xd0, 0x23, + 0x2e, 0x83, 0x5b, 0x40, 0xc6, 0x65, 0x1f, 0xc4, 0x94, 0xb6, 0x3e, 0x74, 0x2e, 0xd2, 0x39, 0x37, + 0x7c, 0x1f, 0x4c, 0x79, 0x42, 0xae, 0x78, 0x35, 0x0c, 0xa0, 0xf5, 0x36, 0x21, 0xb7, 0x0d, 0xd2, + 0xa8, 0x7e, 0x8a, 0xdd, 0x23, 0x1d, 0xf8, 0xe4, 0xfc, 0x3b, 0x8b, 0xc0, 0x54, 0xc4, 0x37, 0x79, + 0x79, 0xf0, 0x78, 0x47, 0xbf, 0x3f, 0x3f, 0x02, 0xcf, 0x01, 0xf9, 0xfe, 0xde, 0xce, 0xbc, 0xa4, + 0xfd, 0xc9, 0x15, 0x70, 0x31, 0xa9, 0xf8, 0x01, 0x71, 0x8e, 0x8d, 0x0a, 0x81, 0xff, 0x2e, 0x83, + 0xf1, 0x2d, 0x87, 0xef, 0x39, 0x1c, 0x1e, 0x7d, 0x7a, 0x78, 0x96, 0xcc, 0x7f, 0xa7, 0x7e, 0xf9, + 0x1f, 0xfe, 0xed, 0x27, 0xa9, 0xaf, 0x53, 0x99, 0xff, 0x48, 0xa9, 0xc7, 0xeb, 0xe1, 0x0b, 0x6d, + 0xbf, 0xf7, 0x59, 0xf5, 0x34, 0x92, 0x3e, 0x5a, 0xea, 0x69, 0x34, 0x23, 0xb4, 0xd4, 0xd3, 0x88, + 0x77, 0xb6, 0x54, 0x97, 0xd8, 0xd8, 0xc1, 0x8c, 0x3a, 0xea, 0xa9, 0x17, 0x5b, 0x38, 0x8d, 0x78, + 0x52, 0x4b, 0x3d, 0x8d, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xba, 0x6b, 0x4b, 0x3d, 0x8d, 0xc6, + 0xb6, 0xef, 0xb9, 0xcc, 0xb1, 0x1d, 0x52, 0x33, 0x4e, 0xd4, 0x6c, 0xcb, 0x57, 0x12, 0x61, 0x73, + 0x93, 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xa8, 0x47, 0x6d, 0xa9, 0xa7, 0xdd, + 0x58, 0xd5, 0x52, 0x4f, 0x13, 0x6f, 0x3a, 0x9c, 0xb3, 0xef, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, + 0xb7, 0xe0, 0x1f, 0x4a, 0x00, 0xf8, 0x07, 0x2e, 0xae, 0xc7, 0x37, 0x73, 0xe8, 0x59, 0x71, 0xe6, + 0xd7, 0x32, 0xab, 0x67, 0x9c, 0x78, 0x41, 0xca, 0xc2, 0x5f, 0x00, 0xe3, 0x9f, 0x50, 0x7a, 0xe4, + 0xd9, 0x70, 0x2e, 0xef, 0x7a, 0x65, 0x2d, 0xbf, 0x5b, 0x0d, 0xee, 0xf4, 0xab, 0x68, 0xce, 0x0b, + 0xcd, 0x0a, 0xfc, 0xce, 0x99, 0xbe, 0xc6, 0xeb, 0xa2, 0x16, 0xfc, 0x35, 0x09, 0x8c, 0xfb, 0x77, + 0xfc, 0x55, 0xb6, 0x66, 0xc0, 0x53, 0x51, 0x66, 0x5d, 0xa0, 0xf8, 0x6e, 0xfa, 0x25, 0x51, 0xf0, + 0x6d, 0xf8, 0x4f, 0x09, 0x4c, 0x84, 0xc1, 0x06, 0xae, 0x9d, 0x09, 0x25, 0x11, 0x97, 0x06, 0x22, + 0xf9, 0x03, 0x49, 0x40, 0xf9, 0x6d, 0x29, 0x9d, 0x55, 0x8f, 0xb5, 0x17, 0x63, 0xc1, 0x65, 0x92, + 0xf7, 0xf1, 0xf0, 0x28, 0xf5, 0x78, 0x5d, 0x1b, 0x9a, 0x65, 0x4d, 0xfb, 0xae, 0x7a, 0xac, 0xe1, + 0x97, 0xe5, 0x91, 0xb2, 0xf0, 0x8f, 0x25, 0x30, 0xbe, 0x4d, 0x1a, 0x84, 0x91, 0xde, 0xe3, 0x1f, + 0x64, 0x93, 0xd3, 0x2e, 0x16, 0xcb, 0xd7, 0xc1, 0x2c, 0x00, 0x45, 0xdb, 0xb8, 0x47, 0x9a, 0x45, + 0x8f, 0xd5, 0xe1, 0x08, 0xb8, 0x08, 0xc6, 0xef, 0xf3, 0x4f, 0x0d, 0xce, 0x80, 0x51, 0x87, 0xe0, + 0x2a, 0x18, 0x7b, 0xe6, 0x18, 0x8c, 0x3c, 0x3d, 0x0f, 0x66, 0x4f, 0x72, 0x86, 0xe3, 0x70, 0x10, + 0xae, 0x51, 0x6e, 0x10, 0x98, 0x42, 0xfe, 0xb6, 0x28, 0xd9, 0x97, 0xf5, 0x93, 0x7f, 0x95, 0xc0, + 0xc4, 0x1d, 0xc2, 0x3e, 0xf3, 0x88, 0xd3, 0xfc, 0xff, 0xf4, 0x94, 0x1f, 0x4b, 0xed, 0xe2, 0xc3, + 0xcc, 0x1e, 0x58, 0xe9, 0xd7, 0x01, 0x74, 0x14, 0x0e, 0x59, 0xf9, 0x7f, 0x21, 0x95, 0x47, 0x84, + 0x7d, 0x79, 0x78, 0xe3, 0x2c, 0xfb, 0x7e, 0xc8, 0x15, 0x84, 0x56, 0xfe, 0x78, 0x0c, 0xcc, 0xdf, + 0x21, 0x2c, 0x4c, 0xf8, 0xbe, 0xf2, 0x5b, 0xc3, 0x67, 0xb9, 0x80, 0x3f, 0xfd, 0xea, 0xac, 0x99, + 0x1f, 0x8d, 0x0a, 0x0b, 0xfe, 0x4b, 0x86, 0x5f, 0xcb, 0x67, 0xd8, 0xd0, 0xa9, 0x22, 0x82, 0x78, + 0xd9, 0xaf, 0x1b, 0x69, 0x25, 0xd7, 0x12, 0xc9, 0x65, 0x60, 0x3b, 0xd1, 0xb3, 0xe6, 0xbd, 0x68, + 0x31, 0x1e, 0xf4, 0x5f, 0x50, 0xf0, 0xf7, 0x5f, 0x1d, 0xc8, 0x1b, 0x4b, 0x53, 0x83, 0x0b, 0xf2, + 0x5e, 0xbe, 0x6e, 0xc1, 0xdd, 0xd7, 0x90, 0x81, 0x0a, 0x7b, 0xb3, 0xd0, 0x80, 0x2a, 0x77, 0xc0, + 0xf2, 0x40, 0x3b, 0xdd, 0x17, 0x69, 0x8d, 0x65, 0x49, 0xf8, 0xcf, 0x32, 0x18, 0xdd, 0xa9, 0xd4, + 0x29, 0x1c, 0xf4, 0xe3, 0x88, 0xeb, 0x95, 0xf3, 0x7e, 0xbf, 0x11, 0x86, 0x8c, 0x97, 0xa6, 0xcc, + 0xfc, 0x6f, 0xaa, 0x5d, 0xfc, 0xdd, 0x14, 0x98, 0x26, 0x95, 0x3a, 0x45, 0xae, 0x5f, 0x1d, 0x81, + 0x09, 0x31, 0x72, 0xec, 0x0a, 0x5c, 0x78, 0xe0, 0x99, 0x26, 0x76, 0x9a, 0x05, 0xb4, 0x13, 0x4c, + 0xa5, 0xe7, 0xb7, 0xbb, 0x2f, 0x36, 0x62, 0x36, 0xb3, 0x0d, 0x60, 0xfc, 0xda, 0x0a, 0xb4, 0x43, + 0x5e, 0xd6, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, 0x1c, + 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xab, 0x13, 0xe4, 0x10, 0x97, 0x7a, 0x4e, 0x85, 0x20, + 0xc3, 0x45, 0x8c, 0x98, 0x36, 0x75, 0xb0, 0x63, 0x34, 0x9a, 0xc8, 0xb3, 0xf0, 0x31, 0x36, 0x1a, + 0xb8, 0xdc, 0x20, 0xf9, 0xec, 0x12, 0x98, 0x38, 0xc9, 0x59, 0x9e, 0x59, 0x26, 0x0e, 0x9c, 0x5c, + 0x18, 0x11, 0xff, 0xfd, 0xdc, 0x47, 0x77, 0xdf, 0x07, 0xf2, 0xe6, 0xda, 0x26, 0xdc, 0x04, 0xd9, + 0x17, 0xc8, 0xad, 0x52, 0xe2, 0x22, 0x8b, 0x32, 0x44, 0x4e, 0x0c, 0x97, 0xe5, 0xe1, 0x38, 0x10, + 0xaf, 0x68, 0xe2, 0xee, 0x3d, 0x39, 0x3b, 0x7a, 0xf0, 0xfd, 0x52, 0x4f, 0xfd, 0xf3, 0x7a, 0x7c, + 0x29, 0x33, 0x1f, 0x4d, 0x18, 0x7c, 0xad, 0xe0, 0x3f, 0xba, 0x3c, 0x86, 0xb0, 0x67, 0x09, 0xfe, + 0x85, 0x04, 0xa6, 0xb7, 0x09, 0xb1, 0xc5, 0x4f, 0x4b, 0x7c, 0xe2, 0x9b, 0xa9, 0x4d, 0x3e, 0x14, + 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x19, 0xf9, 0x63, 0xbf, 0x5a, 0xe7, 0x79, 0xc3, 0x21, 0x52, 0x56, + 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x60, 0xdf, 0x0e, + 0x7e, 0xd0, 0x1f, 0x18, 0xf3, 0x47, 0xe0, 0x23, 0x70, 0xee, 0xa1, 0x61, 0x12, 0xea, 0x31, 0x38, + 0x80, 0x68, 0x20, 0xf3, 0x65, 0x01, 0x7f, 0x09, 0x2e, 0x46, 0xf7, 0x93, 0x05, 0xc2, 0xea, 0x60, + 0x7e, 0xc7, 0x71, 0xa8, 0xc3, 0xbb, 0xa1, 0x6d, 0xc2, 0xb0, 0xd1, 0x70, 0x87, 0x56, 0x70, 0x4d, + 0x28, 0x78, 0x13, 0xae, 0xc4, 0x0e, 0x8c, 0x4b, 0x7d, 0x66, 0xb0, 0x7a, 0x35, 0x90, 0xfa, 0xeb, + 0x12, 0x80, 0x77, 0x08, 0x4b, 0x76, 0x5f, 0x67, 0x17, 0x2e, 0x09, 0x8e, 0x81, 0x30, 0xde, 0x16, + 0x30, 0xae, 0x64, 0x2e, 0x45, 0x61, 0x70, 0x04, 0x65, 0x5a, 0x6d, 0xaa, 0xa7, 0xbc, 0x7c, 0x10, + 0x5d, 0x1a, 0xfc, 0x15, 0x09, 0x2c, 0xec, 0x53, 0x97, 0x71, 0x89, 0x82, 0x55, 0x00, 0x79, 0xb9, + 0x46, 0x6f, 0xa0, 0x76, 0x55, 0x68, 0xbf, 0x9e, 0xb9, 0x16, 0xd5, 0x6e, 0x53, 0x97, 0x71, 0x04, + 0xe2, 0xc7, 0x42, 0x1f, 0x46, 0xc7, 0x29, 0xfe, 0x46, 0x02, 0x8b, 0x5b, 0x75, 0x52, 0x39, 0x0a, + 0x73, 0xf6, 0x3e, 0x76, 0xb0, 0xe9, 0x7e, 0x43, 0x3e, 0x7d, 0x47, 0xc0, 0x2d, 0xc2, 0x0f, 0xcf, + 0xf2, 0x69, 0x5b, 0xa0, 0x52, 0x0f, 0x09, 0xeb, 0xeb, 0xde, 0xf0, 0x9f, 0x24, 0xf0, 0x86, 0x30, + 0xc3, 0x7f, 0x33, 0xe5, 0x1d, 0xe6, 0xb7, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x77, 0x08, + 0x83, 0x82, 0xce, 0x48, 0xfc, 0xb1, 0x4c, 0xc2, 0x38, 0x7a, 0xd4, 0x82, 0x7f, 0x27, 0x81, 0xf3, + 0xc2, 0x34, 0xee, 0x2c, 0xdf, 0x9a, 0x45, 0x99, 0xc2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xde, 0x91, + 0xb6, 0x0a, 0xf1, 0xbf, 0xa3, 0x49, 0xff, 0xb5, 0xd4, 0x2e, 0xfe, 0xa5, 0x04, 0x6b, 0x03, 0x7a, + 0xfd, 0xe8, 0x2f, 0x0c, 0x28, 0x97, 0x43, 0xcf, 0xea, 0x46, 0xa5, 0x8e, 0xdc, 0x3a, 0xf5, 0x1a, + 0x55, 0x11, 0xf2, 0xcb, 0x04, 0x79, 0x2e, 0xa9, 0x22, 0xc3, 0x42, 0x76, 0x03, 0x57, 0x08, 0xa2, + 0x35, 0x91, 0x1c, 0xaa, 0xb4, 0xe2, 0x99, 0xc4, 0xf2, 0x3b, 0x48, 0x54, 0xa1, 0x26, 0x1f, 0x5c, + 0x49, 0x7f, 0x06, 0x56, 0xfb, 0x15, 0xa9, 0x3c, 0x74, 0x87, 0xaf, 0x0b, 0xc3, 0xbe, 0x50, 0x3f, + 0x05, 0xe7, 0x2b, 0xd8, 0x24, 0x8d, 0x2d, 0xec, 0x92, 0x40, 0x06, 0x6f, 0x85, 0xa1, 0x0e, 0xc6, + 0xfc, 0x5f, 0xd9, 0x87, 0x0d, 0x5e, 0x97, 0xc4, 0x2e, 0x2f, 0xc2, 0x85, 0x58, 0xf0, 0xe2, 0x4b, + 0xda, 0x0f, 0xc0, 0x4a, 0xd1, 0xa2, 0xac, 0x4e, 0x9c, 0x40, 0x13, 0x0f, 0x18, 0x91, 0x40, 0xfe, + 0x41, 0x2c, 0xac, 0x0f, 0xab, 0x78, 0xa4, 0xf4, 0xe7, 0x93, 0xed, 0xe2, 0x1f, 0x4d, 0xc2, 0xaf, + 0x25, 0xb0, 0x58, 0x44, 0x25, 0xff, 0x37, 0x85, 0xc8, 0xf9, 0x7f, 0x01, 0xce, 0x1f, 0xea, 0xfb, + 0x5b, 0xb9, 0x3b, 0xbe, 0xe9, 0xc8, 0x76, 0xe8, 0x53, 0x52, 0x61, 0xc3, 0x6e, 0x59, 0x7a, 0xde, + 0xa2, 0x16, 0xf9, 0x28, 0x30, 0x8d, 0x53, 0x67, 0x7f, 0x00, 0xce, 0x97, 0x1e, 0x6c, 0xa3, 0x8d, + 0xdc, 0x56, 0x03, 0x7b, 0x2e, 0x41, 0x9f, 0x18, 0x15, 0x62, 0xb9, 0x04, 0xde, 0x1e, 0x4e, 0xb2, + 0x5a, 0x6e, 0xd0, 0xb2, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xfd, 0x64, 0x77, 0x6b, 0x67, 0xef, 0xc1, + 0x4e, 0x9e, 0x9d, 0x30, 0x4d, 0x5e, 0xcf, 0xaf, 0x15, 0x10, 0x58, 0x3a, 0xc9, 0xb9, 0xd4, 0x24, + 0xc2, 0x9a, 0xee, 0x17, 0x3c, 0x97, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, + 0xcd, 0x63, 0xdb, 0xff, 0xad, 0xc4, 0xa0, 0x96, 0xfa, 0xd4, 0xa5, 0x96, 0x76, 0x21, 0x3a, 0x73, + 0x92, 0xab, 0x51, 0x9a, 0x33, 0x0d, 0x93, 0x14, 0x7a, 0x28, 0x0b, 0x03, 0x28, 0xf5, 0x7d, 0x5e, + 0xc7, 0x6c, 0xc0, 0x5d, 0x70, 0xa7, 0xb7, 0x8e, 0xf1, 0x5c, 0xe2, 0x74, 0x6b, 0x98, 0x3a, 0x3e, + 0x26, 0xc8, 0x26, 0x8e, 0x69, 0xb8, 0x2e, 0x77, 0x5d, 0x46, 0x11, 0xae, 0x54, 0x88, 0xeb, 0xc6, + 0x6a, 0x9e, 0xbc, 0xfe, 0x1a, 0x95, 0xd1, 0x39, 0xfd, 0x63, 0x20, 0x6f, 0xae, 0xdf, 0x84, 0x45, + 0x30, 0xb3, 0xfb, 0xb6, 0x89, 0x30, 0x62, 0x04, 0xdb, 0x94, 0xe5, 0xe1, 0x1a, 0xc8, 0xa7, 0x87, + 0x7a, 0x56, 0x7e, 0xfc, 0x3b, 0x32, 0x98, 0x03, 0x93, 0x25, 0xec, 0x1a, 0x15, 0xd1, 0xc2, 0xa6, + 0x26, 0x24, 0xf0, 0xa7, 0x52, 0xac, 0xab, 0xfd, 0xa9, 0x34, 0x91, 0x4a, 0x4f, 0x7e, 0x91, 0x2b, + 0xee, 0xef, 0xe6, 0xee, 0x91, 0x26, 0x4a, 0xdd, 0x55, 0xc0, 0xca, 0x49, 0x0e, 0x9b, 0xf8, 0x39, + 0xb5, 0x72, 0xd8, 0x36, 0x02, 0x55, 0x39, 0xec, 0xb1, 0x3a, 0x6b, 0xda, 0x04, 0x4e, 0xa4, 0xc7, + 0x29, 0x1f, 0x68, 0x77, 0x7f, 0x1e, 0xbc, 0x39, 0x88, 0x92, 0x3a, 0xc6, 0x73, 0xe2, 0xc0, 0x0f, + 0xb2, 0x3f, 0x03, 0xe6, 0xc0, 0xa8, 0xe0, 0x3b, 0x97, 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, + 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, + 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x51, 0xea, 0xb4, 0xdc, 0x7f, 0x2b, 0x4d, 0xc8, + 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, + 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x09, 0xa4, 0xfd, 0x0e, 0x1e, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, + 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0xf4, 0xf5, 0x70, 0x31, 0x58, 0x14, 0xa3, 0x70, 0x75, 0x0b, + 0x8c, 0xe1, 0xaa, 0x69, 0x58, 0xb0, 0x10, 0x63, 0xb5, 0xaa, 0x31, 0x32, 0xe1, 0x1a, 0x9c, 0xcc, + 0x70, 0x19, 0xaf, 0xd6, 0x8e, 0x09, 0x32, 0xac, 0x1a, 0x75, 0x4c, 0xe1, 0x7d, 0xe5, 0x55, 0x30, + 0x13, 0x3d, 0x98, 0x91, 0xe4, 0x5b, 0x43, 0xf9, 0xfa, 0xc0, 0xd7, 0x86, 0x24, 0xa9, 0xb3, 0x0b, + 0x2e, 0x7e, 0xda, 0x8d, 0x96, 0xd1, 0x18, 0x30, 0xec, 0xdd, 0x7f, 0x7e, 0x19, 0xc0, 0x93, 0x5c, + 0x74, 0x86, 0x5f, 0x12, 0x38, 0x96, 0x96, 0xcb, 0xd8, 0x79, 0xae, 0x80, 0x8b, 0x89, 0xc5, 0x32, + 0x7e, 0x9e, 0x6b, 0x18, 0x2e, 0x83, 0x33, 0xda, 0x14, 0x18, 0x4b, 0xcb, 0xd4, 0x22, 0x20, 0x85, + 0xa4, 0xc7, 0x93, 0x1d, 0x77, 0x2c, 0x8f, 0x8b, 0x30, 0xb6, 0xf1, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xe2, 0x53, 0xfe, 0x7f, 0x48, 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1110,6 +1288,65 @@ type ABitOfEverythingServiceServer interface { CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) } +// UnimplementedABitOfEverythingServiceServer can be embedded to have forward compatible implementations. +type UnimplementedABitOfEverythingServiceServer struct { +} + +func (*UnimplementedABitOfEverythingServiceServer) Create(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) CreateBody(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateBody not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) Lookup(ctx context.Context, req *sub2.IdMessage) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) Update(ctx context.Context, req *ABitOfEverything) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) UpdateV2(ctx context.Context, req *UpdateV2Request) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateV2 not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) Delete(ctx context.Context, req *sub2.IdMessage) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) GetQuery(ctx context.Context, req *ABitOfEverything) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetQuery not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(ctx context.Context, req *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRepeatedQuery not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) Echo(ctx context.Context, req *sub.StringMessage) (*sub.StringMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) DeepPathEcho(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeepPathEcho not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) NoBindings(ctx context.Context, req *duration.Duration) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) Timeout(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Timeout not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ErrorWithDetails not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(ctx context.Context, req *MessageWithBody) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMessageWithBody not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(ctx context.Context, req *Body) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostWithEmptyBody not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckGetQueryParams not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckNestedEnumGetQueryParams not implemented") +} +func (*UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckPostQueryParams not implemented") +} + func RegisterABitOfEverythingServiceServer(s *grpc.Server, srv ABitOfEverythingServiceServer) { s.RegisterService(&_ABitOfEverythingService_serviceDesc, srv) } @@ -1548,6 +1785,14 @@ type CamelCaseServiceNameServer interface { Empty(context.Context, *empty.Empty) (*empty.Empty, error) } +// UnimplementedCamelCaseServiceNameServer can be embedded to have forward compatible implementations. +type UnimplementedCamelCaseServiceNameServer struct { +} + +func (*UnimplementedCamelCaseServiceNameServer) Empty(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Empty not implemented") +} + func RegisterCamelCaseServiceNameServer(s *grpc.Server, srv CamelCaseServiceNameServer) { s.RegisterService(&_CamelCaseServiceName_serviceDesc, srv) } @@ -1612,6 +1857,14 @@ type AnotherServiceWithNoBindingsServer interface { NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) } +// UnimplementedAnotherServiceWithNoBindingsServer can be embedded to have forward compatible implementations. +type UnimplementedAnotherServiceWithNoBindingsServer struct { +} + +func (*UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") +} + func RegisterAnotherServiceWithNoBindingsServer(s *grpc.Server, srv AnotherServiceWithNoBindingsServer) { s.RegisterService(&_AnotherServiceWithNoBindings_serviceDesc, srv) } @@ -1646,232 +1899,3 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_a_bit_of_everything_e0089283b92675c0) -} - -var fileDescriptor_a_bit_of_everything_e0089283b92675c0 = []byte{ - // 3529 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, - 0x7e, 0xd7, 0x72, 0x25, 0x59, 0x1a, 0x7d, 0x8f, 0x2c, 0x5b, 0xa6, 0x95, 0x68, 0x4c, 0x3b, 0x2f, - 0x6b, 0x3e, 0x93, 0x2b, 0xad, 0x94, 0xc4, 0x66, 0xfa, 0x92, 0x90, 0x92, 0xec, 0xc8, 0x4e, 0x64, - 0x65, 0xed, 0xb8, 0xa9, 0x5f, 0xfc, 0xd4, 0x21, 0x39, 0x14, 0xd7, 0xe2, 0xee, 0xec, 0xdb, 0x9d, - 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0xfd, 0x7e, 0x68, 0x2f, 0x45, - 0x51, 0xa0, 0xe8, 0xa9, 0x40, 0x4f, 0x05, 0xda, 0x4b, 0x6f, 0x3d, 0xb4, 0x48, 0x81, 0xa2, 0x87, - 0xf6, 0xd4, 0x9e, 0x7b, 0x69, 0x11, 0xa0, 0x87, 0x7e, 0x60, 0x66, 0x77, 0xc9, 0xdd, 0x25, 0x69, - 0x99, 0x76, 0x91, 0xe4, 0x10, 0xef, 0xcc, 0xfc, 0x3f, 0x7e, 0xff, 0x99, 0xff, 0xfc, 0x3f, 0x86, - 0x02, 0x1a, 0x39, 0xc1, 0xa6, 0xdd, 0x20, 0xae, 0x6a, 0x3b, 0x94, 0x51, 0x35, 0x18, 0xda, 0x65, - 0x15, 0x1f, 0x94, 0x0d, 0x76, 0x40, 0x6b, 0x07, 0xe4, 0x98, 0x38, 0x4d, 0x56, 0x37, 0xac, 0xc3, - 0xbc, 0xa0, 0x81, 0xab, 0x87, 0x8e, 0x5d, 0xc9, 0x1f, 0x62, 0x46, 0x9e, 0xe1, 0x66, 0x3e, 0x14, - 0x90, 0xef, 0xb0, 0xa6, 0x57, 0x0e, 0x29, 0x3d, 0x6c, 0x10, 0x15, 0xdb, 0x86, 0x8a, 0x2d, 0x8b, - 0x32, 0xcc, 0x0c, 0x6a, 0xb9, 0x3e, 0x7b, 0x1a, 0x05, 0xab, 0x62, 0x54, 0xf6, 0x6a, 0x6a, 0xcd, - 0x20, 0x8d, 0xea, 0x81, 0x89, 0xdd, 0xa3, 0x80, 0xe2, 0x72, 0x92, 0x82, 0x98, 0x36, 0x6b, 0x06, - 0x8b, 0x6f, 0x26, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x07, 0xeb, 0x6f, 0x27, 0x2c, 0xb2, 0x31, 0xab, - 0x13, 0xcb, 0x33, 0xc5, 0xc7, 0x01, 0xff, 0x0a, 0x71, 0x24, 0x08, 0x5d, 0xaf, 0xac, 0x9a, 0xc4, - 0x75, 0xf1, 0x21, 0x09, 0x28, 0xae, 0xf4, 0x52, 0x68, 0x09, 0x92, 0xd5, 0x24, 0x1a, 0x66, 0x98, - 0xc4, 0x65, 0xd8, 0xb4, 0x03, 0x82, 0x1b, 0xe2, 0x9f, 0x4a, 0xee, 0x90, 0x58, 0x39, 0xf7, 0x19, - 0x3e, 0x3c, 0x24, 0x8e, 0x4a, 0x6d, 0xb1, 0x1f, 0xbd, 0x7b, 0x93, 0xf9, 0xfb, 0xcb, 0x60, 0xbe, - 0x58, 0x32, 0xd8, 0xfd, 0xda, 0x4e, 0x67, 0xd7, 0xe1, 0x13, 0x30, 0xe3, 0x1a, 0xd6, 0x61, 0x83, - 0x1c, 0x58, 0xc4, 0x65, 0xa4, 0xba, 0x7c, 0x09, 0x49, 0xca, 0x94, 0x76, 0x33, 0x7f, 0xc6, 0x39, - 0xe4, 0x93, 0x92, 0xf2, 0x7b, 0x82, 0x5f, 0x9f, 0xf6, 0xc5, 0xf9, 0x23, 0x58, 0x07, 0xa3, 0x9e, - 0x67, 0x54, 0x97, 0x25, 0x24, 0x29, 0x93, 0xa5, 0x87, 0xed, 0xe2, 0x67, 0x3f, 0x92, 0xa4, 0xdf, - 0x90, 0xee, 0x7d, 0x1f, 0xe7, 0x6a, 0xc5, 0xdc, 0xed, 0xb5, 0xdc, 0xad, 0x27, 0xa7, 0x37, 0x5b, - 0xb9, 0xe8, 0x70, 0x73, 0x98, 0xe1, 0xba, 0xd6, 0xd2, 0x85, 0x06, 0xb8, 0x0f, 0xc6, 0x03, 0x0b, - 0x52, 0x48, 0x7e, 0x2d, 0x0b, 0x02, 0x39, 0xf0, 0x2e, 0x98, 0xaa, 0x35, 0x28, 0x66, 0x07, 0xc7, - 0xb8, 0xe1, 0x91, 0x65, 0x19, 0x49, 0x4a, 0xaa, 0x74, 0xbd, 0x5d, 0xfc, 0x8e, 0xb6, 0x70, 0x9b, - 0xcf, 0x23, 0x31, 0x8f, 0x84, 0x87, 0x15, 0xe4, 0xb5, 0xbc, 0xf6, 0x95, 0x14, 0x65, 0xd0, 0x81, - 0x18, 0x3c, 0xe2, 0xdf, 0xf0, 0x0a, 0x98, 0xae, 0x52, 0xaf, 0xdc, 0x20, 0x81, 0xb0, 0x51, 0x24, - 0x29, 0x92, 0x3e, 0xe5, 0xcf, 0xf9, 0x24, 0xab, 0x60, 0xca, 0xb0, 0xd8, 0xbb, 0x9b, 0x01, 0xc5, - 0x18, 0x92, 0x14, 0x59, 0x07, 0x62, 0xaa, 0x23, 0xc3, 0x8b, 0x52, 0x8c, 0x23, 0x49, 0x19, 0xd5, - 0xa7, 0xbc, 0x08, 0x89, 0x2f, 0x63, 0x43, 0x0b, 0x28, 0xce, 0x21, 0x49, 0x19, 0x13, 0x32, 0x36, - 0x34, 0x9f, 0xe0, 0x2a, 0x98, 0xa9, 0x19, 0x27, 0xa4, 0xda, 0x11, 0x32, 0x81, 0x24, 0x65, 0x5c, - 0x9f, 0x0e, 0x26, 0xe3, 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xce, 0x05, 0x44, 0xa1, 0xa4, 0x37, - 0x00, 0x28, 0x53, 0xda, 0x08, 0x28, 0x00, 0x92, 0x94, 0x09, 0x7d, 0x92, 0xcf, 0x74, 0xc0, 0xba, - 0xcc, 0x31, 0xac, 0xc3, 0x80, 0x60, 0x8a, 0x3b, 0x80, 0x3e, 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, - 0x8c, 0xb8, 0x01, 0xc5, 0x1b, 0x48, 0x52, 0xa6, 0x75, 0x20, 0xa6, 0x62, 0x06, 0x77, 0x60, 0xcc, - 0x20, 0x49, 0x99, 0xf1, 0x0d, 0x0e, 0x51, 0xdc, 0x03, 0x80, 0xdf, 0xba, 0x80, 0x60, 0x16, 0x49, - 0xca, 0xac, 0x76, 0xe3, 0xcc, 0x93, 0xdf, 0xf3, 0x4c, 0xe2, 0x18, 0x95, 0x1d, 0xcb, 0x33, 0xf5, - 0x49, 0xce, 0xef, 0x0b, 0xdb, 0x07, 0x73, 0x9d, 0x7b, 0x1c, 0x48, 0x7c, 0x53, 0x48, 0x54, 0x06, - 0x48, 0x0c, 0xaf, 0x7f, 0x7e, 0x1f, 0xb3, 0xba, 0x90, 0x36, 0x63, 0x07, 0x5f, 0xbe, 0x44, 0x17, - 0x5c, 0xf0, 0x9d, 0xe9, 0x20, 0x29, 0x78, 0x55, 0x08, 0xfe, 0xe0, 0x2c, 0xc1, 0x9f, 0xfa, 0x01, - 0x21, 0x94, 0x1f, 0xb8, 0x68, 0x47, 0xdd, 0xa2, 0x15, 0x1b, 0xfb, 0x4a, 0xdf, 0x02, 0xb3, 0x6e, - 0xfc, 0xfc, 0xe6, 0x90, 0xa4, 0xcc, 0xe9, 0x33, 0x6e, 0xec, 0x00, 0x3b, 0x64, 0x1d, 0x5f, 0x98, - 0x47, 0x92, 0x32, 0x1f, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x02, 0x92, 0x94, 0x05, 0x7d, - 0xca, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x91, 0x03, 0x91, 0xa4, 0x40, 0x9f, 0x24, 0x94, 0xa2, 0x81, - 0x25, 0x87, 0xd8, 0x04, 0xf3, 0xad, 0x88, 0xf9, 0xc5, 0x22, 0x92, 0x95, 0x49, 0x7d, 0x31, 0x5c, - 0x7c, 0x10, 0xf1, 0x8f, 0x5b, 0x60, 0x8a, 0x5a, 0x84, 0x27, 0x09, 0x1e, 0xa1, 0x97, 0xcf, 0x8b, - 0xc0, 0x74, 0x21, 0xef, 0x07, 0xc5, 0x7c, 0x18, 0x14, 0xf3, 0x3b, 0x7c, 0xf5, 0xe3, 0x11, 0x1d, - 0x08, 0x62, 0x31, 0x82, 0x57, 0xc1, 0xb4, 0xcf, 0xea, 0xeb, 0x5a, 0x5e, 0xe2, 0xde, 0xf7, 0xf1, - 0x88, 0xee, 0x0b, 0xf4, 0x95, 0xc0, 0x2f, 0xc1, 0xa4, 0x89, 0xed, 0x00, 0xc7, 0x05, 0x11, 0x34, - 0x3e, 0x1c, 0x3e, 0x68, 0x7c, 0x8a, 0x6d, 0x01, 0x77, 0xc7, 0x62, 0x4e, 0x53, 0x9f, 0x30, 0x83, - 0x21, 0x3c, 0x01, 0x8b, 0x26, 0xb6, 0xed, 0xa4, 0xbd, 0x17, 0x85, 0x9e, 0x8f, 0x5f, 0x49, 0x8f, - 0x1d, 0xdb, 0x1f, 0x5f, 0xe1, 0x82, 0x99, 0x9c, 0x8f, 0x68, 0x0e, 0x7c, 0xcf, 0xd7, 0xbc, 0xfc, - 0x7a, 0x9a, 0x7d, 0xcf, 0xeb, 0xd5, 0x1c, 0x99, 0x87, 0x05, 0xb0, 0x6c, 0x51, 0x6b, 0x8b, 0x5a, - 0xc7, 0xc4, 0xe2, 0x99, 0x07, 0x37, 0xf6, 0xb0, 0xe9, 0x87, 0xb7, 0xe5, 0xb4, 0x08, 0x00, 0x03, - 0xd7, 0xe1, 0x16, 0x98, 0xeb, 0xa4, 0xb7, 0x00, 0xf1, 0x65, 0x71, 0xe2, 0xe9, 0x9e, 0x13, 0x7f, - 0x18, 0xd2, 0xe9, 0xb3, 0x1d, 0x16, 0x5f, 0xc8, 0x97, 0xa0, 0xe3, 0x49, 0xd1, 0xcb, 0xb6, 0x82, - 0xe4, 0xa1, 0xe3, 0xc2, 0x42, 0x28, 0xa8, 0x7b, 0xb1, 0xfe, 0x4c, 0x02, 0xcb, 0x71, 0xf1, 0xdd, - 0x24, 0xbb, 0x8c, 0x86, 0xd7, 0x51, 0xda, 0x6e, 0x17, 0x8b, 0xd9, 0xcb, 0x7a, 0x20, 0x12, 0x59, - 0xfe, 0x12, 0xe2, 0xa2, 0x11, 0x33, 0x58, 0x83, 0x68, 0x99, 0xfe, 0x8b, 0x55, 0xe2, 0x56, 0x1c, - 0x43, 0x64, 0xfa, 0xbc, 0x7e, 0x21, 0x8a, 0xb4, 0xd8, 0x41, 0x04, 0x7f, 0x53, 0x02, 0x4b, 0xdd, - 0x4d, 0x88, 0x62, 0xbd, 0x32, 0x7c, 0x9c, 0x2c, 0x69, 0xed, 0xa2, 0x9a, 0x85, 0x7b, 0xbd, 0x10, - 0x2f, 0xed, 0x0d, 0x44, 0xb6, 0xd8, 0x89, 0xad, 0x11, 0x58, 0xc7, 0x20, 0x9d, 0x0c, 0x05, 0x11, - 0x68, 0x19, 0x1e, 0x0f, 0x4a, 0x37, 0xdb, 0xc5, 0x77, 0xb2, 0x4b, 0x1d, 0xdb, 0x7d, 0xb2, 0x40, - 0xdf, 0x4a, 0x72, 0x3a, 0xa6, 0x72, 0x39, 0x1e, 0x49, 0x22, 0x7a, 0xff, 0x4a, 0x8a, 0x28, 0x0e, - 0x6e, 0x46, 0x44, 0xf1, 0xd5, 0xd7, 0xab, 0x1a, 0x4a, 0xb7, 0xdb, 0xc5, 0xad, 0x6c, 0x17, 0x9b, - 0xaf, 0x00, 0xd1, 0xf2, 0x53, 0x52, 0x61, 0x01, 0xf2, 0xab, 0x03, 0x56, 0xfb, 0x1b, 0xe0, 0xcb, - 0x8d, 0x18, 0xf0, 0x53, 0x09, 0x2c, 0xf4, 0xe2, 0xbe, 0xf6, 0x7a, 0xf5, 0x5a, 0x69, 0xb3, 0x5d, - 0x5c, 0xcf, 0x2e, 0xee, 0xf5, 0x81, 0x9b, 0xde, 0x1b, 0x8c, 0x72, 0xde, 0x4a, 0xa2, 0x7b, 0x0f, - 0x2c, 0xfa, 0x39, 0x80, 0x1e, 0x13, 0xc7, 0x31, 0xaa, 0xe4, 0x80, 0x35, 0x6d, 0xb2, 0xfc, 0x16, - 0x2f, 0x63, 0x4a, 0xe7, 0xda, 0xc5, 0xd1, 0xdf, 0x4f, 0x49, 0xb2, 0xbe, 0x20, 0x68, 0xee, 0x07, - 0x24, 0x0f, 0x9b, 0x36, 0x49, 0xff, 0x8b, 0x04, 0xc6, 0x83, 0x6a, 0x11, 0x82, 0x51, 0x0b, 0x9b, - 0xc4, 0xaf, 0x16, 0x75, 0xf1, 0x0d, 0x2f, 0x80, 0x71, 0x6c, 0x52, 0xcf, 0x62, 0xcb, 0x29, 0x91, - 0xfe, 0x83, 0x11, 0x34, 0x41, 0x8a, 0x1e, 0x89, 0xa2, 0x6c, 0x56, 0x2b, 0xbe, 0xaa, 0xf5, 0xf9, - 0x6d, 0x42, 0x6c, 0xe1, 0xde, 0xe9, 0x76, 0xf1, 0xa2, 0xb6, 0x14, 0x0e, 0xe3, 0xc6, 0xa6, 0xe8, - 0x51, 0x66, 0x15, 0x4c, 0x84, 0x8b, 0x70, 0x12, 0x8c, 0xdd, 0x2e, 0x7e, 0xf2, 0x60, 0x67, 0x7e, - 0x04, 0x4e, 0x80, 0xd1, 0x87, 0xfa, 0xe7, 0x3b, 0xf3, 0x52, 0xe1, 0x62, 0xbb, 0x78, 0x5e, 0x83, - 0x70, 0xfe, 0x14, 0x65, 0xe8, 0x51, 0xa6, 0x80, 0x32, 0x7c, 0x3e, 0x83, 0x5a, 0x69, 0x03, 0xcc, - 0xc4, 0x72, 0x04, 0x9c, 0x07, 0xf2, 0x11, 0x69, 0x06, 0x46, 0xf2, 0x4f, 0x58, 0x02, 0x63, 0x7e, - 0xa0, 0x4a, 0xbd, 0x42, 0x01, 0xe3, 0xb3, 0x16, 0x52, 0x37, 0xa5, 0xf4, 0x36, 0xb8, 0xd0, 0x3f, - 0x4d, 0xf4, 0xd1, 0x79, 0x3e, 0xaa, 0x73, 0x32, 0x2a, 0xe5, 0x17, 0x43, 0x29, 0xc9, 0x90, 0xdf, - 0x47, 0xca, 0x5e, 0x54, 0xca, 0xeb, 0x14, 0xdd, 0x5d, 0xfd, 0x85, 0xdf, 0x4b, 0xb5, 0x8b, 0xbf, - 0x95, 0x02, 0xbf, 0x2a, 0x65, 0x17, 0x8b, 0xa8, 0x6c, 0x30, 0x44, 0x6b, 0xa8, 0xdb, 0x27, 0x6a, - 0xbb, 0xbb, 0x16, 0x0b, 0xd3, 0x47, 0x13, 0x55, 0xa8, 0x69, 0x37, 0x8c, 0x8a, 0xb8, 0x55, 0x41, - 0xf7, 0x84, 0xb8, 0xe3, 0x21, 0x46, 0x51, 0x85, 0xbb, 0x22, 0x32, 0xb1, 0xd5, 0x44, 0x35, 0x82, - 0x99, 0xe7, 0x10, 0x97, 0xcb, 0xda, 0x0f, 0xf3, 0xc8, 0x57, 0x92, 0x68, 0x1d, 0xbe, 0x92, 0xa2, - 0x85, 0xf7, 0x57, 0x52, 0xac, 0x52, 0xcf, 0x3e, 0x02, 0xd7, 0x6e, 0x1b, 0x56, 0x15, 0x51, 0x8f, - 0x21, 0x93, 0x3a, 0x04, 0xe1, 0x32, 0xff, 0xec, 0x69, 0xa4, 0xf2, 0x75, 0xc6, 0x6c, 0xb7, 0xa0, - 0xaa, 0x87, 0x06, 0xab, 0x7b, 0xe5, 0x7c, 0x85, 0x9a, 0x2a, 0xdf, 0x8c, 0x1c, 0xa9, 0x50, 0xb7, - 0xe9, 0x32, 0x12, 0x0c, 0x83, 0xbd, 0xd1, 0x36, 0xa1, 0x76, 0x8a, 0x32, 0x5c, 0x3f, 0x77, 0x96, - 0xb5, 0x4a, 0x6d, 0xe3, 0xdd, 0x75, 0xb2, 0x9e, 0xdb, 0x2c, 0x6f, 0x6e, 0xe6, 0x36, 0x6f, 0x6e, - 0x54, 0x73, 0x78, 0xfd, 0x9d, 0x5b, 0xb9, 0x77, 0x36, 0xab, 0xb8, 0x5c, 0xad, 0xbd, 0x47, 0x6e, - 0xae, 0x6f, 0x66, 0x50, 0xab, 0x34, 0x13, 0xd6, 0x44, 0x02, 0x5c, 0xe6, 0x7f, 0x26, 0xc0, 0x72, - 0x12, 0x49, 0x18, 0x64, 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xed, 0x66, 0x24, - 0x24, 0x2b, 0x29, 0xfd, 0x02, 0x27, 0x08, 0x19, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x3a, 0xce, - 0x1a, 0x6b, 0x5e, 0x78, 0x83, 0x25, 0xe9, 0x17, 0xa3, 0xbc, 0xdb, 0x91, 0x46, 0xa6, 0x47, 0x6f, - 0xb4, 0x36, 0x94, 0x91, 0xac, 0xc8, 0x71, 0xbd, 0xbb, 0xdd, 0x32, 0xb1, 0x47, 0x6f, 0xac, 0xe1, - 0x19, 0x45, 0xb2, 0x32, 0x1a, 0xd7, 0xfb, 0x79, 0xa4, 0xc6, 0xec, 0xa7, 0xb7, 0x53, 0xb6, 0x8e, - 0x21, 0x59, 0x19, 0xeb, 0xd1, 0x1b, 0x56, 0xb0, 0xdf, 0x03, 0x97, 0x13, 0x5b, 0x15, 0x2b, 0x8c, - 0xc7, 0x91, 0xac, 0x8c, 0xeb, 0xcb, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0xfd, 0xd9, 0x23, 0x6d, 0x98, - 0xac, 0x9c, 0xeb, 0xc3, 0x1e, 0x6a, 0x7f, 0x0f, 0x2c, 0xc7, 0xd9, 0x23, 0x8d, 0xd5, 0x04, 0x92, - 0x95, 0x09, 0x7d, 0x29, 0xca, 0x5b, 0xea, 0x34, 0x59, 0x3d, 0xdb, 0x15, 0x2b, 0x35, 0x27, 0x45, - 0x69, 0x1d, 0xdb, 0xae, 0x78, 0x79, 0x9d, 0xd8, 0xae, 0x68, 0x33, 0x06, 0x90, 0xac, 0x4c, 0xc7, - 0xb7, 0xab, 0xd4, 0x6d, 0xcc, 0xfa, 0x1e, 0x53, 0xc7, 0xdc, 0x29, 0x24, 0x2b, 0x33, 0xbd, 0xc7, - 0x14, 0x5a, 0x4b, 0x92, 0xd6, 0x46, 0x0a, 0xb5, 0xe9, 0x57, 0x28, 0xd4, 0x62, 0x7b, 0xd3, 0x2d, - 0xd6, 0x3e, 0x04, 0x2b, 0x89, 0xbd, 0x89, 0x1f, 0xca, 0x0c, 0x92, 0x95, 0x39, 0xfd, 0x52, 0x6c, - 0x77, 0x62, 0xfd, 0xd1, 0x00, 0x01, 0x1d, 0xa7, 0x98, 0x45, 0xb2, 0x32, 0xdf, 0x4f, 0xc0, 0x40, - 0x67, 0x8e, 0xf5, 0x51, 0x73, 0x48, 0x56, 0x16, 0x12, 0xa7, 0x13, 0xd9, 0xa5, 0xbe, 0xcc, 0x91, - 0x4e, 0x4d, 0x56, 0x60, 0x2f, 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0x89, 0x56, 0x81, 0xf8, 0x14, - 0x65, 0x06, 0x39, 0x56, 0xa6, 0x80, 0xbe, 0xcf, 0x1c, 0x8f, 0xdc, 0x40, 0xfe, 0xff, 0x6b, 0xb8, - 0xe1, 0x06, 0x83, 0x27, 0x37, 0x92, 0x6c, 0x11, 0xdc, 0x9c, 0x6f, 0xfd, 0x06, 0xd2, 0x6e, 0xa0, - 0x8d, 0x27, 0xa8, 0x95, 0x49, 0x83, 0xd1, 0x12, 0xad, 0x36, 0xfb, 0x65, 0xee, 0xcc, 0x97, 0x60, - 0x2e, 0x68, 0x5f, 0x7f, 0xd6, 0x60, 0x75, 0x41, 0x36, 0x0b, 0x52, 0xe1, 0x63, 0x90, 0x9e, 0x32, - 0x78, 0x88, 0x1a, 0xad, 0x62, 0x86, 0x83, 0xec, 0xf1, 0xd6, 0x99, 0xe7, 0xce, 0x85, 0xe8, 0x82, - 0x25, 0xf3, 0x13, 0x09, 0xcc, 0x7d, 0x6e, 0x57, 0x31, 0x23, 0x8f, 0x34, 0x9d, 0xfc, 0xd0, 0x23, - 0x2e, 0x83, 0x5b, 0x40, 0xc6, 0x65, 0x1f, 0xc4, 0x94, 0xb6, 0x3e, 0x74, 0x2e, 0xd2, 0x39, 0x37, - 0x7c, 0x1f, 0x4c, 0x79, 0x42, 0xae, 0x78, 0x35, 0x0c, 0xa0, 0xf5, 0x36, 0x21, 0xb7, 0x0d, 0xd2, - 0xa8, 0x7e, 0x8a, 0xdd, 0x23, 0x1d, 0xf8, 0xe4, 0xfc, 0x3b, 0x8b, 0xc0, 0x54, 0xc4, 0x37, 0x79, - 0x79, 0xf0, 0x78, 0x47, 0xbf, 0x3f, 0x3f, 0x02, 0xcf, 0x01, 0xf9, 0xfe, 0xde, 0xce, 0xbc, 0xa4, - 0xfd, 0xc9, 0x15, 0x70, 0x31, 0xa9, 0xf8, 0x01, 0x71, 0x8e, 0x8d, 0x0a, 0x81, 0xff, 0x2e, 0x83, - 0xf1, 0x2d, 0x87, 0xef, 0x39, 0x1c, 0x1e, 0x7d, 0x7a, 0x78, 0x96, 0xcc, 0x7f, 0xa7, 0x7e, 0xf9, - 0x1f, 0xfe, 0xed, 0x27, 0xa9, 0xaf, 0x53, 0x99, 0xff, 0x48, 0xa9, 0xc7, 0xeb, 0xe1, 0x0b, 0x6d, - 0xbf, 0xf7, 0x59, 0xf5, 0x34, 0x92, 0x3e, 0x5a, 0xea, 0x69, 0x34, 0x23, 0xb4, 0xd4, 0xd3, 0x88, - 0x77, 0xb6, 0x54, 0x97, 0xd8, 0xd8, 0xc1, 0x8c, 0x3a, 0xea, 0xa9, 0x17, 0x5b, 0x38, 0x8d, 0x78, - 0x52, 0x4b, 0x3d, 0x8d, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xba, 0x6b, 0x4b, 0x3d, 0x8d, 0xc6, - 0xb6, 0xef, 0xb9, 0xcc, 0xb1, 0x1d, 0x52, 0x33, 0x4e, 0xd4, 0x6c, 0xcb, 0x57, 0x12, 0x61, 0x73, - 0x93, 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xa8, 0x47, 0x6d, 0xa9, 0xa7, 0xdd, - 0x58, 0xd5, 0x52, 0x4f, 0x13, 0x6f, 0x3a, 0x9c, 0xb3, 0xef, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, - 0xb7, 0xe0, 0x1f, 0x4a, 0x00, 0xf8, 0x07, 0x2e, 0xae, 0xc7, 0x37, 0x73, 0xe8, 0x59, 0x71, 0xe6, - 0xd7, 0x32, 0xab, 0x67, 0x9c, 0x78, 0x41, 0xca, 0xc2, 0x5f, 0x00, 0xe3, 0x9f, 0x50, 0x7a, 0xe4, - 0xd9, 0x70, 0x2e, 0xef, 0x7a, 0x65, 0x2d, 0xbf, 0x5b, 0x0d, 0xee, 0xf4, 0xab, 0x68, 0xce, 0x0b, - 0xcd, 0x0a, 0xfc, 0xce, 0x99, 0xbe, 0xc6, 0xeb, 0xa2, 0x16, 0xfc, 0x35, 0x09, 0x8c, 0xfb, 0x77, - 0xfc, 0x55, 0xb6, 0x66, 0xc0, 0x53, 0x51, 0x66, 0x5d, 0xa0, 0xf8, 0x6e, 0xfa, 0x25, 0x51, 0xf0, - 0x6d, 0xf8, 0x4f, 0x09, 0x4c, 0x84, 0xc1, 0x06, 0xae, 0x9d, 0x09, 0x25, 0x11, 0x97, 0x06, 0x22, - 0xf9, 0x03, 0x49, 0x40, 0xf9, 0x6d, 0x29, 0x9d, 0x55, 0x8f, 0xb5, 0x17, 0x63, 0xc1, 0x65, 0x92, - 0xf7, 0xf1, 0xf0, 0x28, 0xf5, 0x78, 0x5d, 0x1b, 0x9a, 0x65, 0x4d, 0xfb, 0xae, 0x7a, 0xac, 0xe1, - 0x97, 0xe5, 0x91, 0xb2, 0xf0, 0x8f, 0x25, 0x30, 0xbe, 0x4d, 0x1a, 0x84, 0x91, 0xde, 0xe3, 0x1f, - 0x64, 0x93, 0xd3, 0x2e, 0x16, 0xcb, 0xd7, 0xc1, 0x2c, 0x00, 0x45, 0xdb, 0xb8, 0x47, 0x9a, 0x45, - 0x8f, 0xd5, 0xe1, 0x08, 0xb8, 0x08, 0xc6, 0xef, 0xf3, 0x4f, 0x0d, 0xce, 0x80, 0x51, 0x87, 0xe0, - 0x2a, 0x18, 0x7b, 0xe6, 0x18, 0x8c, 0x3c, 0x3d, 0x0f, 0x66, 0x4f, 0x72, 0x86, 0xe3, 0x70, 0x10, - 0xae, 0x51, 0x6e, 0x10, 0x98, 0x42, 0xfe, 0xb6, 0x28, 0xd9, 0x97, 0xf5, 0x93, 0x7f, 0x95, 0xc0, - 0xc4, 0x1d, 0xc2, 0x3e, 0xf3, 0x88, 0xd3, 0xfc, 0xff, 0xf4, 0x94, 0x1f, 0x4b, 0xed, 0xe2, 0xc3, - 0xcc, 0x1e, 0x58, 0xe9, 0xd7, 0x01, 0x74, 0x14, 0x0e, 0x59, 0xf9, 0x7f, 0x21, 0x95, 0x47, 0x84, - 0x7d, 0x79, 0x78, 0xe3, 0x2c, 0xfb, 0x7e, 0xc8, 0x15, 0x84, 0x56, 0xfe, 0x78, 0x0c, 0xcc, 0xdf, - 0x21, 0x2c, 0x4c, 0xf8, 0xbe, 0xf2, 0x5b, 0xc3, 0x67, 0xb9, 0x80, 0x3f, 0xfd, 0xea, 0xac, 0x99, - 0x1f, 0x8d, 0x0a, 0x0b, 0xfe, 0x4b, 0x86, 0x5f, 0xcb, 0x67, 0xd8, 0xd0, 0xa9, 0x22, 0x82, 0x78, - 0xd9, 0xaf, 0x1b, 0x69, 0x25, 0xd7, 0x12, 0xc9, 0x65, 0x60, 0x3b, 0xd1, 0xb3, 0xe6, 0xbd, 0x68, - 0x31, 0x1e, 0xf4, 0x5f, 0x50, 0xf0, 0xf7, 0x5f, 0x1d, 0xc8, 0x1b, 0x4b, 0x53, 0x83, 0x0b, 0xf2, - 0x5e, 0xbe, 0x6e, 0xc1, 0xdd, 0xd7, 0x90, 0x81, 0x0a, 0x7b, 0xb3, 0xd0, 0x80, 0x2a, 0x77, 0xc0, - 0xf2, 0x40, 0x3b, 0xdd, 0x17, 0x69, 0x8d, 0x65, 0x49, 0xf8, 0xcf, 0x32, 0x18, 0xdd, 0xa9, 0xd4, - 0x29, 0x1c, 0xf4, 0xe3, 0x88, 0xeb, 0x95, 0xf3, 0x7e, 0xbf, 0x11, 0x86, 0x8c, 0x97, 0xa6, 0xcc, - 0xfc, 0x6f, 0xaa, 0x5d, 0xfc, 0xdd, 0x14, 0x98, 0x26, 0x95, 0x3a, 0x45, 0xae, 0x5f, 0x1d, 0x81, - 0x09, 0x31, 0x72, 0xec, 0x0a, 0x5c, 0x78, 0xe0, 0x99, 0x26, 0x76, 0x9a, 0x05, 0xb4, 0x13, 0x4c, - 0xa5, 0xe7, 0xb7, 0xbb, 0x2f, 0x36, 0x62, 0x36, 0xb3, 0x0d, 0x60, 0xfc, 0xda, 0x0a, 0xb4, 0x43, - 0x5e, 0xd6, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, 0x1c, - 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xab, 0x13, 0xe4, 0x10, 0x97, 0x7a, 0x4e, 0x85, 0x20, - 0xc3, 0x45, 0x8c, 0x98, 0x36, 0x75, 0xb0, 0x63, 0x34, 0x9a, 0xc8, 0xb3, 0xf0, 0x31, 0x36, 0x1a, - 0xb8, 0xdc, 0x20, 0xf9, 0xec, 0x12, 0x98, 0x38, 0xc9, 0x59, 0x9e, 0x59, 0x26, 0x0e, 0x9c, 0x5c, - 0x18, 0x11, 0xff, 0xfd, 0xdc, 0x47, 0x77, 0xdf, 0x07, 0xf2, 0xe6, 0xda, 0x26, 0xdc, 0x04, 0xd9, - 0x17, 0xc8, 0xad, 0x52, 0xe2, 0x22, 0x8b, 0x32, 0x44, 0x4e, 0x0c, 0x97, 0xe5, 0xe1, 0x38, 0x10, - 0xaf, 0x68, 0xe2, 0xee, 0x3d, 0x39, 0x3b, 0x7a, 0xf0, 0xfd, 0x52, 0x4f, 0xfd, 0xf3, 0x7a, 0x7c, - 0x29, 0x33, 0x1f, 0x4d, 0x18, 0x7c, 0xad, 0xe0, 0x3f, 0xba, 0x3c, 0x86, 0xb0, 0x67, 0x09, 0xfe, - 0x85, 0x04, 0xa6, 0xb7, 0x09, 0xb1, 0xc5, 0x4f, 0x4b, 0x7c, 0xe2, 0x9b, 0xa9, 0x4d, 0x3e, 0x14, - 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x19, 0xf9, 0x63, 0xbf, 0x5a, 0xe7, 0x79, 0xc3, 0x21, 0x52, 0x56, - 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x60, 0xdf, 0x0e, - 0x7e, 0xd0, 0x1f, 0x18, 0xf3, 0x47, 0xe0, 0x23, 0x70, 0xee, 0xa1, 0x61, 0x12, 0xea, 0x31, 0x38, - 0x80, 0x68, 0x20, 0xf3, 0x65, 0x01, 0x7f, 0x09, 0x2e, 0x46, 0xf7, 0x93, 0x05, 0xc2, 0xea, 0x60, - 0x7e, 0xc7, 0x71, 0xa8, 0xc3, 0xbb, 0xa1, 0x6d, 0xc2, 0xb0, 0xd1, 0x70, 0x87, 0x56, 0x70, 0x4d, - 0x28, 0x78, 0x13, 0xae, 0xc4, 0x0e, 0x8c, 0x4b, 0x7d, 0x66, 0xb0, 0x7a, 0x35, 0x90, 0xfa, 0xeb, - 0x12, 0x80, 0x77, 0x08, 0x4b, 0x76, 0x5f, 0x67, 0x17, 0x2e, 0x09, 0x8e, 0x81, 0x30, 0xde, 0x16, - 0x30, 0xae, 0x64, 0x2e, 0x45, 0x61, 0x70, 0x04, 0x65, 0x5a, 0x6d, 0xaa, 0xa7, 0xbc, 0x7c, 0x10, - 0x5d, 0x1a, 0xfc, 0x15, 0x09, 0x2c, 0xec, 0x53, 0x97, 0x71, 0x89, 0x82, 0x55, 0x00, 0x79, 0xb9, - 0x46, 0x6f, 0xa0, 0x76, 0x55, 0x68, 0xbf, 0x9e, 0xb9, 0x16, 0xd5, 0x6e, 0x53, 0x97, 0x71, 0x04, - 0xe2, 0xc7, 0x42, 0x1f, 0x46, 0xc7, 0x29, 0xfe, 0x46, 0x02, 0x8b, 0x5b, 0x75, 0x52, 0x39, 0x0a, - 0x73, 0xf6, 0x3e, 0x76, 0xb0, 0xe9, 0x7e, 0x43, 0x3e, 0x7d, 0x47, 0xc0, 0x2d, 0xc2, 0x0f, 0xcf, - 0xf2, 0x69, 0x5b, 0xa0, 0x52, 0x0f, 0x09, 0xeb, 0xeb, 0xde, 0xf0, 0x9f, 0x24, 0xf0, 0x86, 0x30, - 0xc3, 0x7f, 0x33, 0xe5, 0x1d, 0xe6, 0xb7, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x77, 0x08, - 0x83, 0x82, 0xce, 0x48, 0xfc, 0xb1, 0x4c, 0xc2, 0x38, 0x7a, 0xd4, 0x82, 0x7f, 0x27, 0x81, 0xf3, - 0xc2, 0x34, 0xee, 0x2c, 0xdf, 0x9a, 0x45, 0x99, 0xc2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xde, 0x91, - 0xb6, 0x0a, 0xf1, 0xbf, 0xa3, 0x49, 0xff, 0xb5, 0xd4, 0x2e, 0xfe, 0xa5, 0x04, 0x6b, 0x03, 0x7a, - 0xfd, 0xe8, 0x2f, 0x0c, 0x28, 0x97, 0x43, 0xcf, 0xea, 0x46, 0xa5, 0x8e, 0xdc, 0x3a, 0xf5, 0x1a, - 0x55, 0x11, 0xf2, 0xcb, 0x04, 0x79, 0x2e, 0xa9, 0x22, 0xc3, 0x42, 0x76, 0x03, 0x57, 0x08, 0xa2, - 0x35, 0x91, 0x1c, 0xaa, 0xb4, 0xe2, 0x99, 0xc4, 0xf2, 0x3b, 0x48, 0x54, 0xa1, 0x26, 0x1f, 0x5c, - 0x49, 0x7f, 0x06, 0x56, 0xfb, 0x15, 0xa9, 0x3c, 0x74, 0x87, 0xaf, 0x0b, 0xc3, 0xbe, 0x50, 0x3f, - 0x05, 0xe7, 0x2b, 0xd8, 0x24, 0x8d, 0x2d, 0xec, 0x92, 0x40, 0x06, 0x6f, 0x85, 0xa1, 0x0e, 0xc6, - 0xfc, 0x5f, 0xd9, 0x87, 0x0d, 0x5e, 0x97, 0xc4, 0x2e, 0x2f, 0xc2, 0x85, 0x58, 0xf0, 0xe2, 0x4b, - 0xda, 0x0f, 0xc0, 0x4a, 0xd1, 0xa2, 0xac, 0x4e, 0x9c, 0x40, 0x13, 0x0f, 0x18, 0x91, 0x40, 0xfe, - 0x41, 0x2c, 0xac, 0x0f, 0xab, 0x78, 0xa4, 0xf4, 0xe7, 0x93, 0xed, 0xe2, 0x1f, 0x4d, 0xc2, 0xaf, - 0x25, 0xb0, 0x58, 0x44, 0x25, 0xff, 0x37, 0x85, 0xc8, 0xf9, 0x7f, 0x01, 0xce, 0x1f, 0xea, 0xfb, - 0x5b, 0xb9, 0x3b, 0xbe, 0xe9, 0xc8, 0x76, 0xe8, 0x53, 0x52, 0x61, 0xc3, 0x6e, 0x59, 0x7a, 0xde, - 0xa2, 0x16, 0xf9, 0x28, 0x30, 0x8d, 0x53, 0x67, 0x7f, 0x00, 0xce, 0x97, 0x1e, 0x6c, 0xa3, 0x8d, - 0xdc, 0x56, 0x03, 0x7b, 0x2e, 0x41, 0x9f, 0x18, 0x15, 0x62, 0xb9, 0x04, 0xde, 0x1e, 0x4e, 0xb2, - 0x5a, 0x6e, 0xd0, 0xb2, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xfd, 0x64, 0x77, 0x6b, 0x67, 0xef, 0xc1, - 0x4e, 0x9e, 0x9d, 0x30, 0x4d, 0x5e, 0xcf, 0xaf, 0x15, 0x10, 0x58, 0x3a, 0xc9, 0xb9, 0xd4, 0x24, - 0xc2, 0x9a, 0xee, 0x17, 0x3c, 0x97, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, - 0xcd, 0x63, 0xdb, 0xff, 0xad, 0xc4, 0xa0, 0x96, 0xfa, 0xd4, 0xa5, 0x96, 0x76, 0x21, 0x3a, 0x73, - 0x92, 0xab, 0x51, 0x9a, 0x33, 0x0d, 0x93, 0x14, 0x7a, 0x28, 0x0b, 0x03, 0x28, 0xf5, 0x7d, 0x5e, - 0xc7, 0x6c, 0xc0, 0x5d, 0x70, 0xa7, 0xb7, 0x8e, 0xf1, 0x5c, 0xe2, 0x74, 0x6b, 0x98, 0x3a, 0x3e, - 0x26, 0xc8, 0x26, 0x8e, 0x69, 0xb8, 0x2e, 0x77, 0x5d, 0x46, 0x11, 0xae, 0x54, 0x88, 0xeb, 0xc6, - 0x6a, 0x9e, 0xbc, 0xfe, 0x1a, 0x95, 0xd1, 0x39, 0xfd, 0x63, 0x20, 0x6f, 0xae, 0xdf, 0x84, 0x45, - 0x30, 0xb3, 0xfb, 0xb6, 0x89, 0x30, 0x62, 0x04, 0xdb, 0x94, 0xe5, 0xe1, 0x1a, 0xc8, 0xa7, 0x87, - 0x7a, 0x56, 0x7e, 0xfc, 0x3b, 0x32, 0x98, 0x03, 0x93, 0x25, 0xec, 0x1a, 0x15, 0xd1, 0xc2, 0xa6, - 0x26, 0x24, 0xf0, 0xa7, 0x52, 0xac, 0xab, 0xfd, 0xa9, 0x34, 0x91, 0x4a, 0x4f, 0x7e, 0x91, 0x2b, - 0xee, 0xef, 0xe6, 0xee, 0x91, 0x26, 0x4a, 0xdd, 0x55, 0xc0, 0xca, 0x49, 0x0e, 0x9b, 0xf8, 0x39, - 0xb5, 0x72, 0xd8, 0x36, 0x02, 0x55, 0x39, 0xec, 0xb1, 0x3a, 0x6b, 0xda, 0x04, 0x4e, 0xa4, 0xc7, - 0x29, 0x1f, 0x68, 0x77, 0x7f, 0x1e, 0xbc, 0x39, 0x88, 0x92, 0x3a, 0xc6, 0x73, 0xe2, 0xc0, 0x0f, - 0xb2, 0x3f, 0x03, 0xe6, 0xc0, 0xa8, 0xe0, 0x3b, 0x97, 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, - 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, - 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x51, 0xea, 0xb4, 0xdc, 0x7f, 0x2b, 0x4d, 0xc8, - 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, - 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x09, 0xa4, 0xfd, 0x0e, 0x1e, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, - 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0xf4, 0xf5, 0x70, 0x31, 0x58, 0x14, 0xa3, 0x70, 0x75, 0x0b, - 0x8c, 0xe1, 0xaa, 0x69, 0x58, 0xb0, 0x10, 0x63, 0xb5, 0xaa, 0x31, 0x32, 0xe1, 0x1a, 0x9c, 0xcc, - 0x70, 0x19, 0xaf, 0xd6, 0x8e, 0x09, 0x32, 0xac, 0x1a, 0x75, 0x4c, 0xe1, 0x7d, 0xe5, 0x55, 0x30, - 0x13, 0x3d, 0x98, 0x91, 0xe4, 0x5b, 0x43, 0xf9, 0xfa, 0xc0, 0xd7, 0x86, 0x24, 0xa9, 0xb3, 0x0b, - 0x2e, 0x7e, 0xda, 0x8d, 0x96, 0xd1, 0x18, 0x30, 0xec, 0xdd, 0x7f, 0x7e, 0x19, 0xc0, 0x93, 0x5c, - 0x74, 0x86, 0x5f, 0x12, 0x38, 0x96, 0x96, 0xcb, 0xd8, 0x79, 0xae, 0x80, 0x8b, 0x89, 0xc5, 0x32, - 0x7e, 0x9e, 0x6b, 0x18, 0x2e, 0x83, 0x33, 0xda, 0x14, 0x18, 0x4b, 0xcb, 0xd4, 0x22, 0x20, 0x85, - 0xa4, 0xc7, 0x93, 0x1d, 0x77, 0x2c, 0x8f, 0x8b, 0x30, 0xb6, 0xf1, 0x7f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xe2, 0x53, 0xfe, 0x7f, 0x48, 0x2b, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/proto/examplepb/echo_service.pb.go index 5c1500fb2e5..b9f5743303b 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/proto/examplepb/echo_service.pb.go @@ -1,23 +1,22 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: examples/proto/examplepb/echo_service.proto -package examplepb - -/* -Echo Service - -Echo Service API consists of a single service which returns -a message. -*/ +// Echo Service +// +// Echo Service API consists of a single service which returns +// a message. -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" +package examplepb import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -29,7 +28,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // Embedded represents a message embedded in SimpleMessage. type Embedded struct { @@ -46,16 +45,17 @@ func (m *Embedded) Reset() { *m = Embedded{} } func (m *Embedded) String() string { return proto.CompactTextString(m) } func (*Embedded) ProtoMessage() {} func (*Embedded) Descriptor() ([]byte, []int) { - return fileDescriptor_echo_service_8fe0ac1ad649faf8, []int{0} + return fileDescriptor_01041da8d77029c8, []int{0} } + func (m *Embedded) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Embedded.Unmarshal(m, b) } func (m *Embedded) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Embedded.Marshal(b, m, deterministic) } -func (dst *Embedded) XXX_Merge(src proto.Message) { - xxx_messageInfo_Embedded.Merge(dst, src) +func (m *Embedded) XXX_Merge(src proto.Message) { + xxx_messageInfo_Embedded.Merge(m, src) } func (m *Embedded) XXX_Size() int { return xxx_messageInfo_Embedded.Size(m) @@ -103,71 +103,14 @@ func (m *Embedded) GetNote() string { return "" } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*Embedded) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _Embedded_OneofMarshaler, _Embedded_OneofUnmarshaler, _Embedded_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Embedded) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*Embedded_Progress)(nil), (*Embedded_Note)(nil), } } -func _Embedded_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*Embedded) - // mark - switch x := m.Mark.(type) { - case *Embedded_Progress: - b.EncodeVarint(1<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.Progress)) - case *Embedded_Note: - b.EncodeVarint(2<<3 | proto.WireBytes) - b.EncodeStringBytes(x.Note) - case nil: - default: - return fmt.Errorf("Embedded.Mark has unexpected type %T", x) - } - return nil -} - -func _Embedded_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*Embedded) - switch tag { - case 1: // mark.progress - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Mark = &Embedded_Progress{int64(x)} - return true, err - case 2: // mark.note - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Mark = &Embedded_Note{x} - return true, err - default: - return false, nil - } -} - -func _Embedded_OneofSizer(msg proto.Message) (n int) { - m := msg.(*Embedded) - // mark - switch x := m.Mark.(type) { - case *Embedded_Progress: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.Progress)) - case *Embedded_Note: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Note))) - n += len(x.Note) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - // SimpleMessage represents a simple message sent to the Echo service. type SimpleMessage struct { // Id represents the message identifier. @@ -191,16 +134,17 @@ func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } func (*SimpleMessage) ProtoMessage() {} func (*SimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_echo_service_8fe0ac1ad649faf8, []int{1} + return fileDescriptor_01041da8d77029c8, []int{1} } + func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SimpleMessage.Unmarshal(m, b) } func (m *SimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SimpleMessage.Marshal(b, m, deterministic) } -func (dst *SimpleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleMessage.Merge(dst, src) +func (m *SimpleMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleMessage.Merge(m, src) } func (m *SimpleMessage) XXX_Size() int { return xxx_messageInfo_SimpleMessage.Size(m) @@ -306,9 +250,9 @@ func (m *SimpleMessage) GetNo() *Embedded { return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*SimpleMessage) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _SimpleMessage_OneofMarshaler, _SimpleMessage_OneofUnmarshaler, _SimpleMessage_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*SimpleMessage) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*SimpleMessage_LineNum)(nil), (*SimpleMessage_Lang)(nil), (*SimpleMessage_En)(nil), @@ -316,109 +260,47 @@ func (*SimpleMessage) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) } } -func _SimpleMessage_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*SimpleMessage) - // code - switch x := m.Code.(type) { - case *SimpleMessage_LineNum: - b.EncodeVarint(3<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.LineNum)) - case *SimpleMessage_Lang: - b.EncodeVarint(4<<3 | proto.WireBytes) - b.EncodeStringBytes(x.Lang) - case nil: - default: - return fmt.Errorf("SimpleMessage.Code has unexpected type %T", x) - } - // ext - switch x := m.Ext.(type) { - case *SimpleMessage_En: - b.EncodeVarint(6<<3 | proto.WireVarint) - b.EncodeVarint(uint64(x.En)) - case *SimpleMessage_No: - b.EncodeVarint(7<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.No); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("SimpleMessage.Ext has unexpected type %T", x) - } - return nil -} - -func _SimpleMessage_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*SimpleMessage) - switch tag { - case 3: // code.line_num - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Code = &SimpleMessage_LineNum{int64(x)} - return true, err - case 4: // code.lang - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.Code = &SimpleMessage_Lang{x} - return true, err - case 6: // ext.en - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.Ext = &SimpleMessage_En{int64(x)} - return true, err - case 7: // ext.no - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(Embedded) - err := b.DecodeMessage(msg) - m.Ext = &SimpleMessage_No{msg} - return true, err - default: - return false, nil - } +func init() { + proto.RegisterType((*Embedded)(nil), "grpc.gateway.examples.examplepb.Embedded") + proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.examples.examplepb.SimpleMessage") } -func _SimpleMessage_OneofSizer(msg proto.Message) (n int) { - m := msg.(*SimpleMessage) - // code - switch x := m.Code.(type) { - case *SimpleMessage_LineNum: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.LineNum)) - case *SimpleMessage_Lang: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(len(x.Lang))) - n += len(x.Lang) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - // ext - switch x := m.Ext.(type) { - case *SimpleMessage_En: - n += 1 // tag and wire - n += proto.SizeVarint(uint64(x.En)) - case *SimpleMessage_No: - s := proto.Size(x.No) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n +func init() { + proto.RegisterFile("examples/proto/examplepb/echo_service.proto", fileDescriptor_01041da8d77029c8) } -func init() { - proto.RegisterType((*Embedded)(nil), "grpc.gateway.examples.examplepb.Embedded") - proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.examples.examplepb.SimpleMessage") +var fileDescriptor_01041da8d77029c8 = []byte{ + // 470 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, + 0x14, 0xef, 0xd9, 0x6e, 0x9a, 0xbc, 0x08, 0x54, 0x9d, 0x40, 0x98, 0xb4, 0xa8, 0x91, 0xc5, 0x10, + 0x8a, 0xe4, 0x53, 0xc2, 0x06, 0x13, 0x11, 0x45, 0x5d, 0x60, 0x70, 0xb7, 0x2c, 0xd1, 0xc5, 0xf7, + 0xe4, 0x5a, 0xd8, 0x77, 0x96, 0x7d, 0x29, 0x8d, 0xac, 0x2c, 0x48, 0x6c, 0x30, 0xb1, 0xf3, 0x11, + 0xd8, 0xf8, 0x18, 0x4c, 0x7c, 0x05, 0x3e, 0x08, 0xba, 0x4b, 0x1c, 0x09, 0x5a, 0xb5, 0xea, 0x90, + 0xcd, 0xef, 0xcf, 0xef, 0xfd, 0x7e, 0xf7, 0x7b, 0xcf, 0xf0, 0x1c, 0x2f, 0x79, 0x5e, 0x64, 0x58, + 0xb1, 0xa2, 0x54, 0x5a, 0xb1, 0x75, 0x58, 0xcc, 0x18, 0xc6, 0xe7, 0x6a, 0x5a, 0x61, 0x79, 0x91, + 0xc6, 0x18, 0xda, 0x22, 0x3d, 0x4a, 0xca, 0x22, 0x0e, 0x13, 0xae, 0xf1, 0x23, 0x5f, 0x84, 0x0d, + 0x32, 0xdc, 0x60, 0x7a, 0x87, 0x89, 0x52, 0x49, 0x86, 0x8c, 0x17, 0x29, 0xe3, 0x52, 0x2a, 0xcd, + 0x75, 0xaa, 0x64, 0xb5, 0x82, 0x07, 0x6f, 0xa1, 0x7d, 0x92, 0xcf, 0x50, 0x08, 0x14, 0xf4, 0x10, + 0xda, 0x45, 0xa9, 0x92, 0x12, 0xab, 0xca, 0x27, 0x7d, 0x32, 0x70, 0x4f, 0x77, 0xa2, 0x4d, 0x86, + 0x3e, 0x00, 0x4f, 0x2a, 0x8d, 0xbe, 0xd3, 0x27, 0x83, 0xce, 0xe9, 0x4e, 0x64, 0xa3, 0x71, 0x0b, + 0xbc, 0x9c, 0x97, 0x1f, 0x82, 0xcf, 0x0e, 0xdc, 0x3b, 0x4b, 0x0d, 0xe5, 0x3b, 0xac, 0x2a, 0x9e, + 0x20, 0xbd, 0x0f, 0x4e, 0x2a, 0xec, 0x9c, 0x4e, 0xe4, 0xa4, 0x82, 0xee, 0x83, 0x2b, 0xe7, 0xb9, + 0x85, 0xbb, 0x91, 0xf9, 0xa4, 0x07, 0xd0, 0xce, 0x52, 0x89, 0x53, 0x93, 0x76, 0xd7, 0x7c, 0x7b, + 0x26, 0xf3, 0x7e, 0x9e, 0x1b, 0xba, 0x8c, 0xcb, 0xc4, 0xf7, 0x1a, 0x3a, 0x13, 0xd1, 0xd7, 0xd0, + 0xaa, 0x34, 0xd7, 0xf3, 0xca, 0xdf, 0xed, 0x93, 0x41, 0x77, 0xf4, 0x2c, 0xbc, 0xe5, 0xf9, 0x61, + 0xf3, 0xba, 0x68, 0x0d, 0xa4, 0xfb, 0xe0, 0xa0, 0xf4, 0x5b, 0x96, 0x8f, 0x44, 0x0e, 0x4a, 0xfa, + 0x0a, 0x1c, 0xa9, 0xfc, 0xbd, 0x3b, 0x0e, 0x34, 0x60, 0xa9, 0x8c, 0x01, 0xb1, 0x12, 0x38, 0xde, + 0x05, 0x17, 0x2f, 0xf5, 0xe8, 0x97, 0x07, 0xdd, 0x93, 0xf8, 0x5c, 0x9d, 0xad, 0x96, 0x44, 0xbf, + 0x3b, 0xe0, 0x99, 0x98, 0x86, 0xb7, 0x0e, 0xfe, 0xc7, 0xbe, 0xde, 0x1d, 0xfb, 0x83, 0x9f, 0xe4, + 0xd3, 0xef, 0x3f, 0xdf, 0x9c, 0x1f, 0x24, 0x78, 0xc8, 0x2e, 0x86, 0xcd, 0xcd, 0xd8, 0x8b, 0x61, + 0x75, 0x2a, 0x96, 0x93, 0x27, 0xf4, 0xe0, 0xda, 0x02, 0xab, 0xe5, 0x3c, 0x5f, 0x4e, 0x9e, 0xd2, + 0xe0, 0x86, 0x32, 0xab, 0x8d, 0xfd, 0xcb, 0xc9, 0x90, 0xb2, 0xff, 0xbb, 0x86, 0xeb, 0xb6, 0x66, + 0x95, 0x4b, 0x56, 0xaf, 0x9c, 0x0e, 0xcd, 0x81, 0x5c, 0xcb, 0x3b, 0x62, 0xb5, 0x54, 0xab, 0x32, + 0xfd, 0x42, 0xa0, 0x6d, 0x0c, 0x1a, 0x2b, 0xb1, 0xd8, 0xba, 0x49, 0x7d, 0xeb, 0x51, 0xef, 0xaa, + 0x45, 0xd3, 0x99, 0x12, 0x8b, 0x97, 0xe4, 0x98, 0x7e, 0x25, 0x00, 0x46, 0xce, 0x1b, 0xcc, 0x50, + 0xe3, 0xd6, 0x05, 0x1d, 0x59, 0x41, 0x8f, 0x8f, 0x1f, 0x5d, 0x11, 0x24, 0xac, 0x80, 0x71, 0x77, + 0xd2, 0xd9, 0x60, 0x67, 0x2d, 0xfb, 0xcf, 0xbe, 0xf8, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xdb, + 0x6f, 0x39, 0x21, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -492,6 +374,20 @@ type EchoServiceServer interface { EchoDelete(context.Context, *SimpleMessage) (*SimpleMessage, error) } +// UnimplementedEchoServiceServer can be embedded to have forward compatible implementations. +type UnimplementedEchoServiceServer struct { +} + +func (*UnimplementedEchoServiceServer) Echo(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") +} +func (*UnimplementedEchoServiceServer) EchoBody(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoBody not implemented") +} +func (*UnimplementedEchoServiceServer) EchoDelete(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoDelete not implemented") +} + func RegisterEchoServiceServer(s *grpc.Server, srv EchoServiceServer) { s.RegisterService(&_EchoService_serviceDesc, srv) } @@ -570,41 +466,3 @@ var _EchoService_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/echo_service.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/echo_service.proto", fileDescriptor_echo_service_8fe0ac1ad649faf8) -} - -var fileDescriptor_echo_service_8fe0ac1ad649faf8 = []byte{ - // 470 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xef, 0xd9, 0x6e, 0x9a, 0xbc, 0x08, 0x54, 0x9d, 0x40, 0x98, 0xb4, 0xa8, 0x91, 0xc5, 0x10, - 0x8a, 0xe4, 0x53, 0xc2, 0x06, 0x13, 0x11, 0x45, 0x5d, 0x60, 0x70, 0xb7, 0x2c, 0xd1, 0xc5, 0xf7, - 0xe4, 0x5a, 0xd8, 0x77, 0x96, 0x7d, 0x29, 0x8d, 0xac, 0x2c, 0x48, 0x6c, 0x30, 0xb1, 0xf3, 0x11, - 0xd8, 0xf8, 0x18, 0x4c, 0x7c, 0x05, 0x3e, 0x08, 0xba, 0x4b, 0x1c, 0x09, 0x5a, 0xb5, 0xea, 0x90, - 0xcd, 0xef, 0xcf, 0xef, 0xfd, 0x7e, 0xf7, 0x7b, 0xcf, 0xf0, 0x1c, 0x2f, 0x79, 0x5e, 0x64, 0x58, - 0xb1, 0xa2, 0x54, 0x5a, 0xb1, 0x75, 0x58, 0xcc, 0x18, 0xc6, 0xe7, 0x6a, 0x5a, 0x61, 0x79, 0x91, - 0xc6, 0x18, 0xda, 0x22, 0x3d, 0x4a, 0xca, 0x22, 0x0e, 0x13, 0xae, 0xf1, 0x23, 0x5f, 0x84, 0x0d, - 0x32, 0xdc, 0x60, 0x7a, 0x87, 0x89, 0x52, 0x49, 0x86, 0x8c, 0x17, 0x29, 0xe3, 0x52, 0x2a, 0xcd, - 0x75, 0xaa, 0x64, 0xb5, 0x82, 0x07, 0x6f, 0xa1, 0x7d, 0x92, 0xcf, 0x50, 0x08, 0x14, 0xf4, 0x10, - 0xda, 0x45, 0xa9, 0x92, 0x12, 0xab, 0xca, 0x27, 0x7d, 0x32, 0x70, 0x4f, 0x77, 0xa2, 0x4d, 0x86, - 0x3e, 0x00, 0x4f, 0x2a, 0x8d, 0xbe, 0xd3, 0x27, 0x83, 0xce, 0xe9, 0x4e, 0x64, 0xa3, 0x71, 0x0b, - 0xbc, 0x9c, 0x97, 0x1f, 0x82, 0xcf, 0x0e, 0xdc, 0x3b, 0x4b, 0x0d, 0xe5, 0x3b, 0xac, 0x2a, 0x9e, - 0x20, 0xbd, 0x0f, 0x4e, 0x2a, 0xec, 0x9c, 0x4e, 0xe4, 0xa4, 0x82, 0xee, 0x83, 0x2b, 0xe7, 0xb9, - 0x85, 0xbb, 0x91, 0xf9, 0xa4, 0x07, 0xd0, 0xce, 0x52, 0x89, 0x53, 0x93, 0x76, 0xd7, 0x7c, 0x7b, - 0x26, 0xf3, 0x7e, 0x9e, 0x1b, 0xba, 0x8c, 0xcb, 0xc4, 0xf7, 0x1a, 0x3a, 0x13, 0xd1, 0xd7, 0xd0, - 0xaa, 0x34, 0xd7, 0xf3, 0xca, 0xdf, 0xed, 0x93, 0x41, 0x77, 0xf4, 0x2c, 0xbc, 0xe5, 0xf9, 0x61, - 0xf3, 0xba, 0x68, 0x0d, 0xa4, 0xfb, 0xe0, 0xa0, 0xf4, 0x5b, 0x96, 0x8f, 0x44, 0x0e, 0x4a, 0xfa, - 0x0a, 0x1c, 0xa9, 0xfc, 0xbd, 0x3b, 0x0e, 0x34, 0x60, 0xa9, 0x8c, 0x01, 0xb1, 0x12, 0x38, 0xde, - 0x05, 0x17, 0x2f, 0xf5, 0xe8, 0x97, 0x07, 0xdd, 0x93, 0xf8, 0x5c, 0x9d, 0xad, 0x96, 0x44, 0xbf, - 0x3b, 0xe0, 0x99, 0x98, 0x86, 0xb7, 0x0e, 0xfe, 0xc7, 0xbe, 0xde, 0x1d, 0xfb, 0x83, 0x9f, 0xe4, - 0xd3, 0xef, 0x3f, 0xdf, 0x9c, 0x1f, 0x24, 0x78, 0xc8, 0x2e, 0x86, 0xcd, 0xcd, 0xd8, 0x8b, 0x61, - 0x75, 0x2a, 0x96, 0x93, 0x27, 0xf4, 0xe0, 0xda, 0x02, 0xab, 0xe5, 0x3c, 0x5f, 0x4e, 0x9e, 0xd2, - 0xe0, 0x86, 0x32, 0xab, 0x8d, 0xfd, 0xcb, 0xc9, 0x90, 0xb2, 0xff, 0xbb, 0x86, 0xeb, 0xb6, 0x66, - 0x95, 0x4b, 0x56, 0xaf, 0x9c, 0x0e, 0xcd, 0x81, 0x5c, 0xcb, 0x3b, 0x62, 0xb5, 0x54, 0xab, 0x32, - 0xfd, 0x42, 0xa0, 0x6d, 0x0c, 0x1a, 0x2b, 0xb1, 0xd8, 0xba, 0x49, 0x7d, 0xeb, 0x51, 0xef, 0xaa, - 0x45, 0xd3, 0x99, 0x12, 0x8b, 0x97, 0xe4, 0x98, 0x7e, 0x25, 0x00, 0x46, 0xce, 0x1b, 0xcc, 0x50, - 0xe3, 0xd6, 0x05, 0x1d, 0x59, 0x41, 0x8f, 0x8f, 0x1f, 0x5d, 0x11, 0x24, 0xac, 0x80, 0x71, 0x77, - 0xd2, 0xd9, 0x60, 0x67, 0x2d, 0xfb, 0xcf, 0xbe, 0xf8, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xdb, - 0x6f, 0x39, 0x21, 0x04, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/proto/examplepb/flow_combination.pb.go index f50fe51ba5c..fb214da5738 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/proto/examplepb/flow_combination.pb.go @@ -3,14 +3,15 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -22,7 +23,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type EmptyProto struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -34,16 +35,17 @@ func (m *EmptyProto) Reset() { *m = EmptyProto{} } func (m *EmptyProto) String() string { return proto.CompactTextString(m) } func (*EmptyProto) ProtoMessage() {} func (*EmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{0} + return fileDescriptor_53e866bab3f236bf, []int{0} } + func (m *EmptyProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_EmptyProto.Unmarshal(m, b) } func (m *EmptyProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_EmptyProto.Marshal(b, m, deterministic) } -func (dst *EmptyProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EmptyProto.Merge(dst, src) +func (m *EmptyProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EmptyProto.Merge(m, src) } func (m *EmptyProto) XXX_Size() int { return xxx_messageInfo_EmptyProto.Size(m) @@ -67,16 +69,17 @@ func (m *NonEmptyProto) Reset() { *m = NonEmptyProto{} } func (m *NonEmptyProto) String() string { return proto.CompactTextString(m) } func (*NonEmptyProto) ProtoMessage() {} func (*NonEmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{1} + return fileDescriptor_53e866bab3f236bf, []int{1} } + func (m *NonEmptyProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonEmptyProto.Unmarshal(m, b) } func (m *NonEmptyProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonEmptyProto.Marshal(b, m, deterministic) } -func (dst *NonEmptyProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonEmptyProto.Merge(dst, src) +func (m *NonEmptyProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonEmptyProto.Merge(m, src) } func (m *NonEmptyProto) XXX_Size() int { return xxx_messageInfo_NonEmptyProto.Size(m) @@ -119,16 +122,17 @@ func (m *UnaryProto) Reset() { *m = UnaryProto{} } func (m *UnaryProto) String() string { return proto.CompactTextString(m) } func (*UnaryProto) ProtoMessage() {} func (*UnaryProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{2} + return fileDescriptor_53e866bab3f236bf, []int{2} } + func (m *UnaryProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnaryProto.Unmarshal(m, b) } func (m *UnaryProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UnaryProto.Marshal(b, m, deterministic) } -func (dst *UnaryProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnaryProto.Merge(dst, src) +func (m *UnaryProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_UnaryProto.Merge(m, src) } func (m *UnaryProto) XXX_Size() int { return xxx_messageInfo_UnaryProto.Size(m) @@ -159,16 +163,17 @@ func (m *NestedProto) Reset() { *m = NestedProto{} } func (m *NestedProto) String() string { return proto.CompactTextString(m) } func (*NestedProto) ProtoMessage() {} func (*NestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{3} + return fileDescriptor_53e866bab3f236bf, []int{3} } + func (m *NestedProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NestedProto.Unmarshal(m, b) } func (m *NestedProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NestedProto.Marshal(b, m, deterministic) } -func (dst *NestedProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_NestedProto.Merge(dst, src) +func (m *NestedProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_NestedProto.Merge(m, src) } func (m *NestedProto) XXX_Size() int { return xxx_messageInfo_NestedProto.Size(m) @@ -211,16 +216,17 @@ func (m *SingleNestedProto) Reset() { *m = SingleNestedProto{} } func (m *SingleNestedProto) String() string { return proto.CompactTextString(m) } func (*SingleNestedProto) ProtoMessage() {} func (*SingleNestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_flow_combination_63ace3110e4bd00b, []int{4} + return fileDescriptor_53e866bab3f236bf, []int{4} } + func (m *SingleNestedProto) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SingleNestedProto.Unmarshal(m, b) } func (m *SingleNestedProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SingleNestedProto.Marshal(b, m, deterministic) } -func (dst *SingleNestedProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_SingleNestedProto.Merge(dst, src) +func (m *SingleNestedProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_SingleNestedProto.Merge(m, src) } func (m *SingleNestedProto) XXX_Size() int { return xxx_messageInfo_SingleNestedProto.Size(m) @@ -246,6 +252,55 @@ func init() { proto.RegisterType((*SingleNestedProto)(nil), "grpc.gateway.examples.examplepb.SingleNestedProto") } +func init() { + proto.RegisterFile("examples/proto/examplepb/flow_combination.proto", fileDescriptor_53e866bab3f236bf) +} + +var fileDescriptor_53e866bab3f236bf = []byte{ + // 655 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xbf, 0x8f, 0x12, 0x41, + 0x14, 0xc7, 0xf3, 0xb8, 0xc4, 0xe4, 0x86, 0xfb, 0xc1, 0x2d, 0x06, 0x81, 0xc3, 0xe3, 0x6e, 0xbc, + 0x44, 0xe2, 0x8f, 0x5d, 0x82, 0xd5, 0x51, 0x9e, 0xd1, 0x92, 0x5c, 0xb8, 0xd8, 0x6c, 0x63, 0x66, + 0x87, 0x15, 0x48, 0x60, 0x67, 0x6e, 0x77, 0x0d, 0x5e, 0x08, 0x31, 0xb1, 0xb1, 0xb4, 0xf0, 0x0f, + 0xb0, 0xb4, 0xf2, 0x1f, 0xb0, 0xb3, 0xb2, 0x31, 0xb1, 0x30, 0xb1, 0xb3, 0xb3, 0xf3, 0x9f, 0x30, + 0xfb, 0xf6, 0xc7, 0xb0, 0x0a, 0x6e, 0x30, 0x62, 0xb7, 0x6f, 0xe6, 0xbd, 0x37, 0x9f, 0xf9, 0xce, + 0xf7, 0x11, 0x88, 0x61, 0x3f, 0x63, 0x63, 0x39, 0xb2, 0x3d, 0x43, 0xba, 0xc2, 0x17, 0x71, 0x28, + 0x2d, 0xe3, 0xc9, 0x48, 0x4c, 0x1e, 0x73, 0x31, 0xb6, 0x86, 0x0e, 0xf3, 0x87, 0xc2, 0xd1, 0x31, + 0x41, 0xab, 0xf7, 0x5d, 0xc9, 0xf5, 0x3e, 0xf3, 0xed, 0x09, 0xbb, 0xd4, 0xe3, 0x6a, 0x3d, 0xa9, + 0xab, 0xd6, 0xfa, 0x42, 0xf4, 0x47, 0xb6, 0xc1, 0xe4, 0xd0, 0x60, 0x8e, 0x23, 0x7c, 0xac, 0xf6, + 0xc2, 0x72, 0xba, 0x45, 0xc8, 0x83, 0xb1, 0xf4, 0x2f, 0xcf, 0x30, 0x3a, 0x21, 0xdb, 0x1d, 0xe1, + 0xa8, 0x05, 0x6d, 0x8b, 0x00, 0x2b, 0xc3, 0x21, 0x34, 0x36, 0xbb, 0xc0, 0x82, 0xc8, 0x2a, 0xe7, + 0xc2, 0xc8, 0x0a, 0x22, 0x5e, 0xde, 0x08, 0x23, 0x4e, 0x0f, 0x08, 0x79, 0xe4, 0x30, 0x37, 0xaa, + 0x2b, 0x90, 0x0d, 0xcf, 0x77, 0xa3, 0xca, 0xe0, 0x93, 0xf6, 0x48, 0xbe, 0x63, 0x7b, 0xbe, 0xdd, + 0x0b, 0x13, 0x4e, 0xe2, 0xc6, 0xf9, 0xd6, 0x6d, 0x3d, 0xe3, 0x0a, 0xba, 0x6a, 0x9c, 0x45, 0xd1, + 0x21, 0x7b, 0xe7, 0x43, 0xa7, 0x3f, 0xb2, 0xff, 0xcd, 0x59, 0xad, 0x4f, 0xbb, 0x64, 0xf7, 0xe1, + 0x48, 0x4c, 0xee, 0x2b, 0xdd, 0xb5, 0xe7, 0x24, 0xdf, 0x95, 0x1c, 0x45, 0xea, 0x4a, 0xae, 0x65, + 0xb7, 0x54, 0x7a, 0x56, 0x57, 0x49, 0xa6, 0xa5, 0x17, 0x5f, 0xbe, 0xbf, 0xce, 0x15, 0xe8, 0x8e, + 0xe1, 0x4a, 0x6e, 0xd8, 0xc1, 0x46, 0xf0, 0xa5, 0xbd, 0x04, 0xb2, 0x13, 0x13, 0x9c, 0xfb, 0xae, + 0xcd, 0xc6, 0x6b, 0x84, 0xa8, 0x20, 0x44, 0x91, 0xee, 0xcd, 0x41, 0x78, 0x78, 0x68, 0x13, 0x90, + 0x24, 0x24, 0xf8, 0x0f, 0x72, 0x28, 0x92, 0xf0, 0x7c, 0xa5, 0x48, 0x03, 0xb4, 0x57, 0x40, 0xf6, + 0xe6, 0x48, 0xd6, 0x2e, 0x4b, 0x0d, 0x61, 0x4a, 0xf4, 0x6a, 0x1a, 0x26, 0x0c, 0x1a, 0xd0, 0x04, + 0xed, 0x5d, 0x8e, 0x90, 0xae, 0xe4, 0xa7, 0xa2, 0x87, 0xba, 0xe8, 0x99, 0xdd, 0x53, 0x93, 0xb7, + 0x1a, 0xcd, 0x07, 0x40, 0x9c, 0xf7, 0x40, 0xb7, 0xf1, 0x99, 0x2c, 0xd1, 0x43, 0x61, 0xda, 0x70, + 0xcb, 0xdc, 0xa7, 0x15, 0x5c, 0x93, 0xcc, 0x1f, 0x18, 0x53, 0x36, 0x33, 0xa6, 0xd6, 0xcc, 0x98, + 0xf2, 0x59, 0xb0, 0x68, 0xc6, 0xe6, 0xba, 0x78, 0x6a, 0xbb, 0x58, 0x61, 0xd6, 0x69, 0x55, 0xb5, + 0x48, 0xd5, 0x60, 0x3f, 0x6e, 0x96, 0x69, 0x51, 0x25, 0x24, 0x75, 0xc1, 0xce, 0x11, 0xad, 0x2d, + 0x28, 0x4d, 0xa5, 0x54, 0xe8, 0xb5, 0x34, 0x4c, 0xb2, 0xab, 0xbd, 0x01, 0x52, 0xea, 0x4a, 0x7e, + 0xc6, 0xfc, 0xc1, 0xfc, 0x08, 0x07, 0xda, 0xb5, 0x32, 0xb5, 0xf8, 0x6d, 0xe8, 0x57, 0xd3, 0xef, + 0x18, 0xe5, 0x3b, 0x88, 0xf8, 0x03, 0xb8, 0xbb, 0x0e, 0xf6, 0x32, 0xa6, 0x4c, 0xf7, 0x7c, 0x17, + 0x2f, 0xaf, 0x7d, 0x03, 0x52, 0x88, 0x08, 0x15, 0xdb, 0x9d, 0xec, 0x77, 0xfd, 0x5b, 0x2a, 0x07, + 0xa9, 0x06, 0xf4, 0x70, 0x29, 0xd5, 0xdc, 0xb3, 0x64, 0xc0, 0x27, 0x8f, 0xb3, 0x64, 0xbf, 0x0d, + 0x5c, 0xfb, 0x98, 0x23, 0xdb, 0x91, 0x63, 0xa3, 0xf9, 0x59, 0xab, 0x69, 0xbf, 0x86, 0xa6, 0xfd, + 0x0c, 0xb4, 0xa0, 0x6c, 0x13, 0x0e, 0x50, 0xe0, 0xdb, 0xf9, 0x0b, 0xa5, 0x7c, 0x1b, 0xa6, 0x98, + 0xf1, 0x4f, 0x52, 0xe8, 0xa0, 0x68, 0x91, 0xd2, 0xeb, 0x4b, 0xdc, 0x1b, 0x37, 0xe6, 0xe6, 0x3e, + 0x2d, 0xfd, 0x6a, 0x60, 0xb5, 0x79, 0x4c, 0xeb, 0x4b, 0x3d, 0xac, 0xb2, 0x6a, 0xd1, 0x90, 0x2c, + 0x4c, 0x68, 0x82, 0xf6, 0x16, 0x48, 0x65, 0x81, 0x97, 0x23, 0x55, 0xd7, 0x6e, 0xe7, 0x9b, 0x28, + 0xec, 0x51, 0x74, 0x95, 0x45, 0x2f, 0x9e, 0x90, 0xfe, 0x00, 0x52, 0x4c, 0x79, 0x3a, 0x62, 0x5c, + 0xa3, 0xad, 0x27, 0x48, 0x77, 0x41, 0x6f, 0xfc, 0xd1, 0xd6, 0x4a, 0xec, 0xec, 0x7b, 0x24, 0xaf, + 0xb6, 0x3c, 0xa5, 0x0d, 0xbc, 0x09, 0xa7, 0x79, 0x73, 0x33, 0x41, 0xb2, 0xae, 0xe0, 0x3f, 0xa0, + 0x7b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x36, 0xcd, 0x7d, 0x1f, 0x73, 0x09, 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -521,6 +576,41 @@ type FlowCombinationServer interface { RpcPathNestedStream(*NestedProto, FlowCombination_RpcPathNestedStreamServer) error } +// UnimplementedFlowCombinationServer can be embedded to have forward compatible implementations. +type UnimplementedFlowCombinationServer struct { +} + +func (*UnimplementedFlowCombinationServer) RpcEmptyRpc(ctx context.Context, req *EmptyProto) (*EmptyProto, error) { + return nil, status.Errorf(codes.Unimplemented, "method RpcEmptyRpc not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcEmptyStream(req *EmptyProto, srv FlowCombination_RpcEmptyStreamServer) error { + return status.Errorf(codes.Unimplemented, "method RpcEmptyStream not implemented") +} +func (*UnimplementedFlowCombinationServer) StreamEmptyRpc(srv FlowCombination_StreamEmptyRpcServer) error { + return status.Errorf(codes.Unimplemented, "method StreamEmptyRpc not implemented") +} +func (*UnimplementedFlowCombinationServer) StreamEmptyStream(srv FlowCombination_StreamEmptyStreamServer) error { + return status.Errorf(codes.Unimplemented, "method StreamEmptyStream not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcBodyRpc(ctx context.Context, req *NonEmptyProto) (*EmptyProto, error) { + return nil, status.Errorf(codes.Unimplemented, "method RpcBodyRpc not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedRpc(ctx context.Context, req *SingleNestedProto) (*EmptyProto, error) { + return nil, status.Errorf(codes.Unimplemented, "method RpcPathSingleNestedRpc not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcPathNestedRpc(ctx context.Context, req *NestedProto) (*EmptyProto, error) { + return nil, status.Errorf(codes.Unimplemented, "method RpcPathNestedRpc not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcBodyStream(req *NonEmptyProto, srv FlowCombination_RpcBodyStreamServer) error { + return status.Errorf(codes.Unimplemented, "method RpcBodyStream not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedStream(req *SingleNestedProto, srv FlowCombination_RpcPathSingleNestedStreamServer) error { + return status.Errorf(codes.Unimplemented, "method RpcPathSingleNestedStream not implemented") +} +func (*UnimplementedFlowCombinationServer) RpcPathNestedStream(req *NestedProto, srv FlowCombination_RpcPathNestedStreamServer) error { + return status.Errorf(codes.Unimplemented, "method RpcPathNestedStream not implemented") +} + func RegisterFlowCombinationServer(s *grpc.Server, srv FlowCombinationServer) { s.RegisterService(&_FlowCombination_serviceDesc, srv) } @@ -789,52 +879,3 @@ var _FlowCombination_serviceDesc = grpc.ServiceDesc{ }, Metadata: "examples/proto/examplepb/flow_combination.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/flow_combination.proto", fileDescriptor_flow_combination_63ace3110e4bd00b) -} - -var fileDescriptor_flow_combination_63ace3110e4bd00b = []byte{ - // 655 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xbf, 0x8f, 0x12, 0x41, - 0x14, 0xc7, 0xf3, 0xb8, 0xc4, 0xe4, 0x86, 0xfb, 0xc1, 0x2d, 0x06, 0x81, 0xc3, 0xe3, 0x6e, 0xbc, - 0x44, 0xe2, 0x8f, 0x5d, 0x82, 0xd5, 0x51, 0x9e, 0xd1, 0x92, 0x5c, 0xb8, 0xd8, 0x6c, 0x63, 0x66, - 0x87, 0x15, 0x48, 0x60, 0x67, 0x6e, 0x77, 0x0d, 0x5e, 0x08, 0x31, 0xb1, 0xb1, 0xb4, 0xf0, 0x0f, - 0xb0, 0xb4, 0xf2, 0x1f, 0xb0, 0xb3, 0xb2, 0x31, 0xb1, 0x30, 0xb1, 0xb3, 0xb3, 0xf3, 0x9f, 0x30, - 0xfb, 0xf6, 0xc7, 0xb0, 0x0a, 0x6e, 0x30, 0x62, 0xb7, 0x6f, 0xe6, 0xbd, 0x37, 0x9f, 0xf9, 0xce, - 0xf7, 0x11, 0x88, 0x61, 0x3f, 0x63, 0x63, 0x39, 0xb2, 0x3d, 0x43, 0xba, 0xc2, 0x17, 0x71, 0x28, - 0x2d, 0xe3, 0xc9, 0x48, 0x4c, 0x1e, 0x73, 0x31, 0xb6, 0x86, 0x0e, 0xf3, 0x87, 0xc2, 0xd1, 0x31, - 0x41, 0xab, 0xf7, 0x5d, 0xc9, 0xf5, 0x3e, 0xf3, 0xed, 0x09, 0xbb, 0xd4, 0xe3, 0x6a, 0x3d, 0xa9, - 0xab, 0xd6, 0xfa, 0x42, 0xf4, 0x47, 0xb6, 0xc1, 0xe4, 0xd0, 0x60, 0x8e, 0x23, 0x7c, 0xac, 0xf6, - 0xc2, 0x72, 0xba, 0x45, 0xc8, 0x83, 0xb1, 0xf4, 0x2f, 0xcf, 0x30, 0x3a, 0x21, 0xdb, 0x1d, 0xe1, - 0xa8, 0x05, 0x6d, 0x8b, 0x00, 0x2b, 0xc3, 0x21, 0x34, 0x36, 0xbb, 0xc0, 0x82, 0xc8, 0x2a, 0xe7, - 0xc2, 0xc8, 0x0a, 0x22, 0x5e, 0xde, 0x08, 0x23, 0x4e, 0x0f, 0x08, 0x79, 0xe4, 0x30, 0x37, 0xaa, - 0x2b, 0x90, 0x0d, 0xcf, 0x77, 0xa3, 0xca, 0xe0, 0x93, 0xf6, 0x48, 0xbe, 0x63, 0x7b, 0xbe, 0xdd, - 0x0b, 0x13, 0x4e, 0xe2, 0xc6, 0xf9, 0xd6, 0x6d, 0x3d, 0xe3, 0x0a, 0xba, 0x6a, 0x9c, 0x45, 0xd1, - 0x21, 0x7b, 0xe7, 0x43, 0xa7, 0x3f, 0xb2, 0xff, 0xcd, 0x59, 0xad, 0x4f, 0xbb, 0x64, 0xf7, 0xe1, - 0x48, 0x4c, 0xee, 0x2b, 0xdd, 0xb5, 0xe7, 0x24, 0xdf, 0x95, 0x1c, 0x45, 0xea, 0x4a, 0xae, 0x65, - 0xb7, 0x54, 0x7a, 0x56, 0x57, 0x49, 0xa6, 0xa5, 0x17, 0x5f, 0xbe, 0xbf, 0xce, 0x15, 0xe8, 0x8e, - 0xe1, 0x4a, 0x6e, 0xd8, 0xc1, 0x46, 0xf0, 0xa5, 0xbd, 0x04, 0xb2, 0x13, 0x13, 0x9c, 0xfb, 0xae, - 0xcd, 0xc6, 0x6b, 0x84, 0xa8, 0x20, 0x44, 0x91, 0xee, 0xcd, 0x41, 0x78, 0x78, 0x68, 0x13, 0x90, - 0x24, 0x24, 0xf8, 0x0f, 0x72, 0x28, 0x92, 0xf0, 0x7c, 0xa5, 0x48, 0x03, 0xb4, 0x57, 0x40, 0xf6, - 0xe6, 0x48, 0xd6, 0x2e, 0x4b, 0x0d, 0x61, 0x4a, 0xf4, 0x6a, 0x1a, 0x26, 0x0c, 0x1a, 0xd0, 0x04, - 0xed, 0x5d, 0x8e, 0x90, 0xae, 0xe4, 0xa7, 0xa2, 0x87, 0xba, 0xe8, 0x99, 0xdd, 0x53, 0x93, 0xb7, - 0x1a, 0xcd, 0x07, 0x40, 0x9c, 0xf7, 0x40, 0xb7, 0xf1, 0x99, 0x2c, 0xd1, 0x43, 0x61, 0xda, 0x70, - 0xcb, 0xdc, 0xa7, 0x15, 0x5c, 0x93, 0xcc, 0x1f, 0x18, 0x53, 0x36, 0x33, 0xa6, 0xd6, 0xcc, 0x98, - 0xf2, 0x59, 0xb0, 0x68, 0xc6, 0xe6, 0xba, 0x78, 0x6a, 0xbb, 0x58, 0x61, 0xd6, 0x69, 0x55, 0xb5, - 0x48, 0xd5, 0x60, 0x3f, 0x6e, 0x96, 0x69, 0x51, 0x25, 0x24, 0x75, 0xc1, 0xce, 0x11, 0xad, 0x2d, - 0x28, 0x4d, 0xa5, 0x54, 0xe8, 0xb5, 0x34, 0x4c, 0xb2, 0xab, 0xbd, 0x01, 0x52, 0xea, 0x4a, 0x7e, - 0xc6, 0xfc, 0xc1, 0xfc, 0x08, 0x07, 0xda, 0xb5, 0x32, 0xb5, 0xf8, 0x6d, 0xe8, 0x57, 0xd3, 0xef, - 0x18, 0xe5, 0x3b, 0x88, 0xf8, 0x03, 0xb8, 0xbb, 0x0e, 0xf6, 0x32, 0xa6, 0x4c, 0xf7, 0x7c, 0x17, - 0x2f, 0xaf, 0x7d, 0x03, 0x52, 0x88, 0x08, 0x15, 0xdb, 0x9d, 0xec, 0x77, 0xfd, 0x5b, 0x2a, 0x07, - 0xa9, 0x06, 0xf4, 0x70, 0x29, 0xd5, 0xdc, 0xb3, 0x64, 0xc0, 0x27, 0x8f, 0xb3, 0x64, 0xbf, 0x0d, - 0x5c, 0xfb, 0x98, 0x23, 0xdb, 0x91, 0x63, 0xa3, 0xf9, 0x59, 0xab, 0x69, 0xbf, 0x86, 0xa6, 0xfd, - 0x0c, 0xb4, 0xa0, 0x6c, 0x13, 0x0e, 0x50, 0xe0, 0xdb, 0xf9, 0x0b, 0xa5, 0x7c, 0x1b, 0xa6, 0x98, - 0xf1, 0x4f, 0x52, 0xe8, 0xa0, 0x68, 0x91, 0xd2, 0xeb, 0x4b, 0xdc, 0x1b, 0x37, 0xe6, 0xe6, 0x3e, - 0x2d, 0xfd, 0x6a, 0x60, 0xb5, 0x79, 0x4c, 0xeb, 0x4b, 0x3d, 0xac, 0xb2, 0x6a, 0xd1, 0x90, 0x2c, - 0x4c, 0x68, 0x82, 0xf6, 0x16, 0x48, 0x65, 0x81, 0x97, 0x23, 0x55, 0xd7, 0x6e, 0xe7, 0x9b, 0x28, - 0xec, 0x51, 0x74, 0x95, 0x45, 0x2f, 0x9e, 0x90, 0xfe, 0x00, 0x52, 0x4c, 0x79, 0x3a, 0x62, 0x5c, - 0xa3, 0xad, 0x27, 0x48, 0x77, 0x41, 0x6f, 0xfc, 0xd1, 0xd6, 0x4a, 0xec, 0xec, 0x7b, 0x24, 0xaf, - 0xb6, 0x3c, 0xa5, 0x0d, 0xbc, 0x09, 0xa7, 0x79, 0x73, 0x33, 0x41, 0xb2, 0xae, 0xe0, 0x3f, 0xa0, - 0x7b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x36, 0xcd, 0x7d, 0x1f, 0x73, 0x09, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/non_standard_names.pb.go b/examples/proto/examplepb/non_standard_names.pb.go index 7637cf515fe..2858e1e82d1 100644 --- a/examples/proto/examplepb/non_standard_names.pb.go +++ b/examples/proto/examplepb/non_standard_names.pb.go @@ -3,15 +3,16 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" -import field_mask "google.golang.org/genproto/protobuf/field_mask" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + field_mask "google.golang.org/genproto/protobuf/field_mask" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -23,7 +24,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // NonStandardMessage has oddly named fields. type NonStandardMessage struct { @@ -45,16 +46,17 @@ func (m *NonStandardMessage) Reset() { *m = NonStandardMessage{} } func (m *NonStandardMessage) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage) ProtoMessage() {} func (*NonStandardMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0} + return fileDescriptor_fa36ad8828f19375, []int{0} } + func (m *NonStandardMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage.Unmarshal(m, b) } func (m *NonStandardMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessage.Marshal(b, m, deterministic) } -func (dst *NonStandardMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage.Merge(dst, src) +func (m *NonStandardMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage.Merge(m, src) } func (m *NonStandardMessage) XXX_Size() int { return xxx_messageInfo_NonStandardMessage.Size(m) @@ -132,16 +134,17 @@ func (m *NonStandardMessage_Thing) Reset() { *m = NonStandardMessage_Thi func (m *NonStandardMessage_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing) ProtoMessage() {} func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0, 0} + return fileDescriptor_fa36ad8828f19375, []int{0, 0} } + func (m *NonStandardMessage_Thing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage_Thing.Unmarshal(m, b) } func (m *NonStandardMessage_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessage_Thing.Marshal(b, m, deterministic) } -func (dst *NonStandardMessage_Thing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage_Thing.Merge(dst, src) +func (m *NonStandardMessage_Thing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage_Thing.Merge(m, src) } func (m *NonStandardMessage_Thing) XXX_Size() int { return xxx_messageInfo_NonStandardMessage_Thing.Size(m) @@ -170,16 +173,17 @@ func (m *NonStandardMessage_Thing_SubThing) Reset() { *m = NonStandardMe func (m *NonStandardMessage_Thing_SubThing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{0, 0, 0} + return fileDescriptor_fa36ad8828f19375, []int{0, 0, 0} } + func (m *NonStandardMessage_Thing_SubThing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Unmarshal(m, b) } func (m *NonStandardMessage_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Marshal(b, m, deterministic) } -func (dst *NonStandardMessage_Thing_SubThing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage_Thing_SubThing.Merge(dst, src) +func (m *NonStandardMessage_Thing_SubThing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessage_Thing_SubThing.Merge(m, src) } func (m *NonStandardMessage_Thing_SubThing) XXX_Size() int { return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Size(m) @@ -209,16 +213,17 @@ func (m *NonStandardUpdateRequest) Reset() { *m = NonStandardUpdateReque func (m *NonStandardUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardUpdateRequest) ProtoMessage() {} func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{1} + return fileDescriptor_fa36ad8828f19375, []int{1} } + func (m *NonStandardUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardUpdateRequest.Unmarshal(m, b) } func (m *NonStandardUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardUpdateRequest.Marshal(b, m, deterministic) } -func (dst *NonStandardUpdateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardUpdateRequest.Merge(dst, src) +func (m *NonStandardUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardUpdateRequest.Merge(m, src) } func (m *NonStandardUpdateRequest) XXX_Size() int { return xxx_messageInfo_NonStandardUpdateRequest.Size(m) @@ -263,16 +268,17 @@ func (m *NonStandardMessageWithJSONNames) Reset() { *m = NonStandardMess func (m *NonStandardMessageWithJSONNames) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames) ProtoMessage() {} func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2} + return fileDescriptor_fa36ad8828f19375, []int{2} } + func (m *NonStandardMessageWithJSONNames) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames.Unmarshal(m, b) } func (m *NonStandardMessageWithJSONNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessageWithJSONNames.Marshal(b, m, deterministic) } -func (dst *NonStandardMessageWithJSONNames) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames.Merge(dst, src) +func (m *NonStandardMessageWithJSONNames) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames.Merge(m, src) } func (m *NonStandardMessageWithJSONNames) XXX_Size() int { return xxx_messageInfo_NonStandardMessageWithJSONNames.Size(m) @@ -350,16 +356,17 @@ func (m *NonStandardMessageWithJSONNames_Thing) Reset() { *m = NonStanda func (m *NonStandardMessageWithJSONNames_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2, 0} + return fileDescriptor_fa36ad8828f19375, []int{2, 0} } + func (m *NonStandardMessageWithJSONNames_Thing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Unmarshal(m, b) } func (m *NonStandardMessageWithJSONNames_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Marshal(b, m, deterministic) } -func (dst *NonStandardMessageWithJSONNames_Thing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Merge(dst, src) +func (m *NonStandardMessageWithJSONNames_Thing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Merge(m, src) } func (m *NonStandardMessageWithJSONNames_Thing) XXX_Size() int { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Size(m) @@ -392,16 +399,17 @@ func (m *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { } func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{2, 0, 0} + return fileDescriptor_fa36ad8828f19375, []int{2, 0, 0} } + func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Unmarshal(m, b) } func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Marshal(b, m, deterministic) } -func (dst *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Merge(dst, src) +func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Merge(m, src) } func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Size() int { return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Size(m) @@ -431,16 +439,17 @@ func (m *NonStandardWithJSONNamesUpdateRequest) Reset() { *m = NonStanda func (m *NonStandardWithJSONNamesUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_non_standard_names_33e1f510ac1f389a, []int{3} + return fileDescriptor_fa36ad8828f19375, []int{3} } + func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Unmarshal(m, b) } func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Marshal(b, m, deterministic) } -func (dst *NonStandardWithJSONNamesUpdateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Merge(dst, src) +func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Merge(m, src) } func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Size() int { return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Size(m) @@ -476,6 +485,54 @@ func init() { proto.RegisterType((*NonStandardWithJSONNamesUpdateRequest)(nil), "grpc.gateway.examples.examplepb.NonStandardWithJSONNamesUpdateRequest") } +func init() { + proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_fa36ad8828f19375) +} + +var fileDescriptor_fa36ad8828f19375 = []byte{ + // 626 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x41, 0x6f, 0xd3, 0x3c, + 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0x7a, 0x5f, 0xe4, 0x21, 0x14, 0xc2, 0xa4, 0x56, 0x95, + 0xd0, 0x7a, 0x21, 0xd1, 0xb2, 0x03, 0x02, 0x84, 0x04, 0x15, 0xac, 0x1a, 0x62, 0xad, 0x94, 0x74, + 0x20, 0x21, 0x41, 0xe4, 0x2c, 0x5e, 0x1a, 0x9a, 0xda, 0xa1, 0x76, 0x3a, 0x7a, 0xe5, 0x13, 0x4c, + 0xe2, 0x0e, 0xdc, 0xf8, 0x0e, 0xf0, 0x31, 0xb8, 0x73, 0xe2, 0x83, 0xa0, 0xd8, 0x69, 0xa9, 0x55, + 0xa1, 0xb1, 0x6e, 0xa7, 0xfa, 0x79, 0x6c, 0xff, 0x9f, 0xe7, 0x6f, 0xff, 0xe2, 0x82, 0x5d, 0xfc, + 0x1e, 0x8d, 0xd3, 0x04, 0x33, 0x3b, 0x9d, 0x50, 0x4e, 0xed, 0x22, 0x4c, 0x03, 0x9b, 0x50, 0xe2, + 0x33, 0x8e, 0x48, 0x88, 0x26, 0xa1, 0x4f, 0xd0, 0x18, 0x33, 0x4b, 0x2c, 0x81, 0x8d, 0x68, 0x92, + 0x1e, 0x5b, 0x11, 0xe2, 0xf8, 0x14, 0xcd, 0xac, 0xf9, 0x7e, 0x6b, 0xb1, 0xd3, 0xdc, 0x8e, 0x28, + 0x8d, 0x12, 0x6c, 0xa3, 0x34, 0xb6, 0x11, 0x21, 0x94, 0x23, 0x1e, 0x53, 0x52, 0x6c, 0x37, 0x9b, + 0xc5, 0xac, 0x88, 0x82, 0xec, 0xc4, 0x3e, 0x89, 0x71, 0x12, 0xfa, 0x63, 0xc4, 0x46, 0x72, 0x45, + 0xeb, 0x4c, 0x07, 0xb0, 0x47, 0x89, 0x57, 0x14, 0x3f, 0xc4, 0x8c, 0xa1, 0x08, 0xc3, 0xff, 0x40, + 0x29, 0x0e, 0x0d, 0xad, 0xa9, 0xb5, 0x6b, 0x6e, 0x29, 0x0e, 0xe1, 0x35, 0xa0, 0xf7, 0xb2, 0xb1, + 0x51, 0x6a, 0x6a, 0x6d, 0xdd, 0xcd, 0x87, 0xf0, 0x26, 0xa8, 0x26, 0x31, 0xc1, 0x3e, 0xc9, 0xc6, + 0x86, 0x2e, 0xd2, 0x9b, 0x79, 0x9c, 0x4f, 0x6d, 0x83, 0x5a, 0x82, 0x48, 0x74, 0x10, 0x62, 0xc2, + 0x8d, 0x0d, 0xa1, 0xf1, 0x27, 0x01, 0x6f, 0x80, 0x8a, 0x37, 0x78, 0x3c, 0x38, 0xf2, 0x8c, 0xb2, + 0x98, 0x2a, 0x22, 0xb8, 0x05, 0xca, 0x98, 0xf8, 0xdd, 0x8e, 0x51, 0x11, 0x6a, 0x1b, 0x98, 0x74, + 0x3b, 0x79, 0x1f, 0x84, 0x1a, 0x9b, 0xb2, 0x0f, 0x42, 0x61, 0x1f, 0x94, 0xf9, 0x30, 0x26, 0x91, + 0x51, 0x6d, 0x6a, 0xed, 0xba, 0x73, 0xcf, 0x3a, 0xe7, 0x7c, 0xac, 0x55, 0x6f, 0xd6, 0x20, 0x17, + 0x70, 0xa5, 0x8e, 0x79, 0xa6, 0x81, 0xb2, 0x48, 0xc0, 0x37, 0xa0, 0xca, 0xb2, 0x40, 0x8c, 0x85, + 0xf1, 0xba, 0xd3, 0x59, 0x5b, 0xdd, 0xf2, 0x0a, 0x25, 0x77, 0xa1, 0x69, 0xee, 0x80, 0xea, 0x3c, + 0x0b, 0x6f, 0x81, 0x1a, 0xcb, 0x02, 0x7f, 0x8a, 0x92, 0x0c, 0x17, 0xa7, 0x9c, 0x2f, 0x7c, 0x91, + 0xc7, 0xad, 0x2f, 0x1a, 0x30, 0x96, 0x84, 0x8f, 0xd2, 0x10, 0x71, 0xec, 0xe2, 0x77, 0x19, 0x66, + 0x1c, 0x76, 0xc1, 0x46, 0x40, 0xc3, 0x59, 0xd1, 0xe1, 0xde, 0x1a, 0x1d, 0xba, 0x42, 0x00, 0x3e, + 0x00, 0xf5, 0x4c, 0x28, 0x0b, 0x1a, 0xc4, 0xcd, 0xd6, 0x1d, 0xd3, 0x92, 0xc0, 0x58, 0x73, 0x60, + 0xac, 0xfd, 0x1c, 0x98, 0x43, 0xc4, 0x46, 0x2e, 0x90, 0xcb, 0xf3, 0x71, 0xeb, 0xbb, 0x0e, 0x1a, + 0xab, 0xca, 0x2f, 0x63, 0x3e, 0x7c, 0xe6, 0xf5, 0x7b, 0xbd, 0x1c, 0x60, 0x15, 0xa1, 0x83, 0x27, + 0xff, 0x86, 0xd0, 0xf3, 0xf5, 0x10, 0x62, 0x1c, 0xf1, 0x8c, 0xc1, 0xeb, 0x2a, 0x42, 0xe5, 0xa7, + 0x79, 0x00, 0xff, 0x5f, 0x62, 0x48, 0x9f, 0x61, 0x06, 0x5f, 0xab, 0x10, 0xed, 0xaf, 0x71, 0x88, + 0x8a, 0xd5, 0x82, 0xa8, 0x8a, 0xf8, 0x99, 0x99, 0x9f, 0x16, 0x48, 0x8d, 0x56, 0x90, 0xea, 0x5f, + 0x4d, 0xad, 0x25, 0xbe, 0xe6, 0x23, 0xb3, 0xbd, 0xc4, 0xd7, 0xf6, 0x2a, 0x5f, 0x22, 0x21, 0x01, + 0xfb, 0xa6, 0x81, 0xdb, 0x4b, 0x65, 0x14, 0x7d, 0x95, 0xb6, 0x81, 0x42, 0xdb, 0xa3, 0xcb, 0x36, + 0x7f, 0x05, 0xe8, 0x39, 0x9f, 0xd5, 0x07, 0xcb, 0xc3, 0x93, 0x69, 0x7c, 0x8c, 0xe1, 0x57, 0x0d, + 0x54, 0x64, 0xef, 0xf0, 0x42, 0x8f, 0x82, 0xe2, 0xd7, 0x5c, 0xe7, 0x7b, 0x6a, 0xdd, 0xf9, 0xf0, + 0xe3, 0xd7, 0xc7, 0xd2, 0x8e, 0xd3, 0xb0, 0xa7, 0xbb, 0xf3, 0x37, 0x5d, 0x79, 0xd1, 0x6d, 0xd9, + 0xfe, 0x7d, 0xe9, 0xfe, 0xa7, 0x06, 0xb6, 0x64, 0x55, 0xf5, 0x7b, 0xb9, 0x10, 0x86, 0x7f, 0xbf, + 0x33, 0xf3, 0xd2, 0xb7, 0xd4, 0x7a, 0x28, 0x0c, 0xdd, 0x75, 0xec, 0x73, 0x0c, 0xf9, 0xa7, 0x31, + 0x1f, 0xfa, 0x6f, 0x19, 0x25, 0xf2, 0x3f, 0x4b, 0x1a, 0xec, 0xd4, 0x5f, 0xd5, 0x16, 0xb5, 0x82, + 0x8a, 0xb8, 0xce, 0xbd, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x18, 0x50, 0x51, 0xb2, 0xfc, 0x06, + 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -528,6 +585,17 @@ type NonStandardServiceServer interface { UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) } +// UnimplementedNonStandardServiceServer can be embedded to have forward compatible implementations. +type UnimplementedNonStandardServiceServer struct { +} + +func (*UnimplementedNonStandardServiceServer) Update(ctx context.Context, req *NonStandardUpdateRequest) (*NonStandardMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (*UnimplementedNonStandardServiceServer) UpdateWithJSONNames(ctx context.Context, req *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateWithJSONNames not implemented") +} + func RegisterNonStandardServiceServer(s *grpc.Server, srv NonStandardServiceServer) { s.RegisterService(&_NonStandardService_serviceDesc, srv) } @@ -584,51 +652,3 @@ var _NonStandardService_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/non_standard_names.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_non_standard_names_33e1f510ac1f389a) -} - -var fileDescriptor_non_standard_names_33e1f510ac1f389a = []byte{ - // 626 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x41, 0x6f, 0xd3, 0x3c, - 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0x7a, 0x5f, 0xe4, 0x21, 0x14, 0xc2, 0xa4, 0x56, 0x95, - 0xd0, 0x7a, 0x21, 0xd1, 0xb2, 0x03, 0x02, 0x84, 0x04, 0x15, 0xac, 0x1a, 0x62, 0xad, 0x94, 0x74, - 0x20, 0x21, 0x41, 0xe4, 0x2c, 0x5e, 0x1a, 0x9a, 0xda, 0xa1, 0x76, 0x3a, 0x7a, 0xe5, 0x13, 0x4c, - 0xe2, 0x0e, 0xdc, 0xf8, 0x0e, 0xf0, 0x31, 0xb8, 0x73, 0xe2, 0x83, 0xa0, 0xd8, 0x69, 0xa9, 0x55, - 0xa1, 0xb1, 0x6e, 0xa7, 0xfa, 0x79, 0x6c, 0xff, 0x9f, 0xe7, 0x6f, 0xff, 0xe2, 0x82, 0x5d, 0xfc, - 0x1e, 0x8d, 0xd3, 0x04, 0x33, 0x3b, 0x9d, 0x50, 0x4e, 0xed, 0x22, 0x4c, 0x03, 0x9b, 0x50, 0xe2, - 0x33, 0x8e, 0x48, 0x88, 0x26, 0xa1, 0x4f, 0xd0, 0x18, 0x33, 0x4b, 0x2c, 0x81, 0x8d, 0x68, 0x92, - 0x1e, 0x5b, 0x11, 0xe2, 0xf8, 0x14, 0xcd, 0xac, 0xf9, 0x7e, 0x6b, 0xb1, 0xd3, 0xdc, 0x8e, 0x28, - 0x8d, 0x12, 0x6c, 0xa3, 0x34, 0xb6, 0x11, 0x21, 0x94, 0x23, 0x1e, 0x53, 0x52, 0x6c, 0x37, 0x9b, - 0xc5, 0xac, 0x88, 0x82, 0xec, 0xc4, 0x3e, 0x89, 0x71, 0x12, 0xfa, 0x63, 0xc4, 0x46, 0x72, 0x45, - 0xeb, 0x4c, 0x07, 0xb0, 0x47, 0x89, 0x57, 0x14, 0x3f, 0xc4, 0x8c, 0xa1, 0x08, 0xc3, 0xff, 0x40, - 0x29, 0x0e, 0x0d, 0xad, 0xa9, 0xb5, 0x6b, 0x6e, 0x29, 0x0e, 0xe1, 0x35, 0xa0, 0xf7, 0xb2, 0xb1, - 0x51, 0x6a, 0x6a, 0x6d, 0xdd, 0xcd, 0x87, 0xf0, 0x26, 0xa8, 0x26, 0x31, 0xc1, 0x3e, 0xc9, 0xc6, - 0x86, 0x2e, 0xd2, 0x9b, 0x79, 0x9c, 0x4f, 0x6d, 0x83, 0x5a, 0x82, 0x48, 0x74, 0x10, 0x62, 0xc2, - 0x8d, 0x0d, 0xa1, 0xf1, 0x27, 0x01, 0x6f, 0x80, 0x8a, 0x37, 0x78, 0x3c, 0x38, 0xf2, 0x8c, 0xb2, - 0x98, 0x2a, 0x22, 0xb8, 0x05, 0xca, 0x98, 0xf8, 0xdd, 0x8e, 0x51, 0x11, 0x6a, 0x1b, 0x98, 0x74, - 0x3b, 0x79, 0x1f, 0x84, 0x1a, 0x9b, 0xb2, 0x0f, 0x42, 0x61, 0x1f, 0x94, 0xf9, 0x30, 0x26, 0x91, - 0x51, 0x6d, 0x6a, 0xed, 0xba, 0x73, 0xcf, 0x3a, 0xe7, 0x7c, 0xac, 0x55, 0x6f, 0xd6, 0x20, 0x17, - 0x70, 0xa5, 0x8e, 0x79, 0xa6, 0x81, 0xb2, 0x48, 0xc0, 0x37, 0xa0, 0xca, 0xb2, 0x40, 0x8c, 0x85, - 0xf1, 0xba, 0xd3, 0x59, 0x5b, 0xdd, 0xf2, 0x0a, 0x25, 0x77, 0xa1, 0x69, 0xee, 0x80, 0xea, 0x3c, - 0x0b, 0x6f, 0x81, 0x1a, 0xcb, 0x02, 0x7f, 0x8a, 0x92, 0x0c, 0x17, 0xa7, 0x9c, 0x2f, 0x7c, 0x91, - 0xc7, 0xad, 0x2f, 0x1a, 0x30, 0x96, 0x84, 0x8f, 0xd2, 0x10, 0x71, 0xec, 0xe2, 0x77, 0x19, 0x66, - 0x1c, 0x76, 0xc1, 0x46, 0x40, 0xc3, 0x59, 0xd1, 0xe1, 0xde, 0x1a, 0x1d, 0xba, 0x42, 0x00, 0x3e, - 0x00, 0xf5, 0x4c, 0x28, 0x0b, 0x1a, 0xc4, 0xcd, 0xd6, 0x1d, 0xd3, 0x92, 0xc0, 0x58, 0x73, 0x60, - 0xac, 0xfd, 0x1c, 0x98, 0x43, 0xc4, 0x46, 0x2e, 0x90, 0xcb, 0xf3, 0x71, 0xeb, 0xbb, 0x0e, 0x1a, - 0xab, 0xca, 0x2f, 0x63, 0x3e, 0x7c, 0xe6, 0xf5, 0x7b, 0xbd, 0x1c, 0x60, 0x15, 0xa1, 0x83, 0x27, - 0xff, 0x86, 0xd0, 0xf3, 0xf5, 0x10, 0x62, 0x1c, 0xf1, 0x8c, 0xc1, 0xeb, 0x2a, 0x42, 0xe5, 0xa7, - 0x79, 0x00, 0xff, 0x5f, 0x62, 0x48, 0x9f, 0x61, 0x06, 0x5f, 0xab, 0x10, 0xed, 0xaf, 0x71, 0x88, - 0x8a, 0xd5, 0x82, 0xa8, 0x8a, 0xf8, 0x99, 0x99, 0x9f, 0x16, 0x48, 0x8d, 0x56, 0x90, 0xea, 0x5f, - 0x4d, 0xad, 0x25, 0xbe, 0xe6, 0x23, 0xb3, 0xbd, 0xc4, 0xd7, 0xf6, 0x2a, 0x5f, 0x22, 0x21, 0x01, - 0xfb, 0xa6, 0x81, 0xdb, 0x4b, 0x65, 0x14, 0x7d, 0x95, 0xb6, 0x81, 0x42, 0xdb, 0xa3, 0xcb, 0x36, - 0x7f, 0x05, 0xe8, 0x39, 0x9f, 0xd5, 0x07, 0xcb, 0xc3, 0x93, 0x69, 0x7c, 0x8c, 0xe1, 0x57, 0x0d, - 0x54, 0x64, 0xef, 0xf0, 0x42, 0x8f, 0x82, 0xe2, 0xd7, 0x5c, 0xe7, 0x7b, 0x6a, 0xdd, 0xf9, 0xf0, - 0xe3, 0xd7, 0xc7, 0xd2, 0x8e, 0xd3, 0xb0, 0xa7, 0xbb, 0xf3, 0x37, 0x5d, 0x79, 0xd1, 0x6d, 0xd9, - 0xfe, 0x7d, 0xe9, 0xfe, 0xa7, 0x06, 0xb6, 0x64, 0x55, 0xf5, 0x7b, 0xb9, 0x10, 0x86, 0x7f, 0xbf, - 0x33, 0xf3, 0xd2, 0xb7, 0xd4, 0x7a, 0x28, 0x0c, 0xdd, 0x75, 0xec, 0x73, 0x0c, 0xf9, 0xa7, 0x31, - 0x1f, 0xfa, 0x6f, 0x19, 0x25, 0xf2, 0x3f, 0x4b, 0x1a, 0xec, 0xd4, 0x5f, 0xd5, 0x16, 0xb5, 0x82, - 0x8a, 0xb8, 0xce, 0xbd, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x18, 0x50, 0x51, 0xb2, 0xfc, 0x06, - 0x00, 0x00, -} diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/proto/examplepb/response_body_service.pb.go index ae80ec69077..879091d3e74 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/proto/examplepb/response_body_service.pb.go @@ -3,14 +3,15 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import _ "google.golang.org/genproto/googleapis/api/annotations" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -22,7 +23,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type RepeatedResponseBodyOut_Response_ResponseType int32 @@ -40,6 +41,7 @@ var RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ 1: "A", 2: "B", } + var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ "UNKNOWN": 0, "A": 1, @@ -49,8 +51,9 @@ var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) } + func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2, 0, 0} + return fileDescriptor_df4b27f252df323f, []int{2, 0, 0} } type ResponseBodyIn struct { @@ -64,16 +67,17 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{0} + return fileDescriptor_df4b27f252df323f, []int{0} } + func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) } func (m *ResponseBodyIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ResponseBodyIn.Marshal(b, m, deterministic) } -func (dst *ResponseBodyIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyIn.Merge(dst, src) +func (m *ResponseBodyIn) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyIn.Merge(m, src) } func (m *ResponseBodyIn) XXX_Size() int { return xxx_messageInfo_ResponseBodyIn.Size(m) @@ -102,16 +106,17 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{1} + return fileDescriptor_df4b27f252df323f, []int{1} } + func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) } func (m *ResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ResponseBodyOut.Marshal(b, m, deterministic) } -func (dst *ResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut.Merge(dst, src) +func (m *ResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut.Merge(m, src) } func (m *ResponseBodyOut) XXX_Size() int { return xxx_messageInfo_ResponseBodyOut.Size(m) @@ -140,16 +145,17 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{1, 0} + return fileDescriptor_df4b27f252df323f, []int{1, 0} } + func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) } func (m *ResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ResponseBodyOut_Response.Marshal(b, m, deterministic) } -func (dst *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut_Response.Merge(dst, src) +func (m *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut_Response.Merge(m, src) } func (m *ResponseBodyOut_Response) XXX_Size() int { return xxx_messageInfo_ResponseBodyOut_Response.Size(m) @@ -178,16 +184,17 @@ func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut) ProtoMessage() {} func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2} + return fileDescriptor_df4b27f252df323f, []int{2} } + func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) } func (m *RepeatedResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RepeatedResponseBodyOut.Marshal(b, m, deterministic) } -func (dst *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut.Merge(dst, src) +func (m *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut.Merge(m, src) } func (m *RepeatedResponseBodyOut) XXX_Size() int { return xxx_messageInfo_RepeatedResponseBodyOut.Size(m) @@ -217,16 +224,17 @@ func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedRespon func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{2, 0} + return fileDescriptor_df4b27f252df323f, []int{2, 0} } + func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) } func (m *RepeatedResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Marshal(b, m, deterministic) } -func (dst *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(dst, src) +func (m *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(m, src) } func (m *RepeatedResponseBodyOut_Response) XXX_Size() int { return xxx_messageInfo_RepeatedResponseBodyOut_Response.Size(m) @@ -262,16 +270,17 @@ func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseStrings) ProtoMessage() {} func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_response_body_service_dd1070a6693ff118, []int{3} + return fileDescriptor_df4b27f252df323f, []int{3} } + func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) } func (m *RepeatedResponseStrings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RepeatedResponseStrings.Marshal(b, m, deterministic) } -func (dst *RepeatedResponseStrings) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseStrings.Merge(dst, src) +func (m *RepeatedResponseStrings) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseStrings.Merge(m, src) } func (m *RepeatedResponseStrings) XXX_Size() int { return xxx_messageInfo_RepeatedResponseStrings.Size(m) @@ -290,13 +299,49 @@ func (m *RepeatedResponseStrings) GetValues() []string { } func init() { + proto.RegisterEnum("grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.examplepb.ResponseBodyIn") proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut") proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut.Response") proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut") proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut.Response") proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseStrings") - proto.RegisterEnum("grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) +} + +func init() { + proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_df4b27f252df323f) +} + +var fileDescriptor_df4b27f252df323f = []byte{ + // 441 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, + 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, + 0xd1, 0xb8, 0x49, 0x34, 0xba, 0xd0, 0x65, 0xbb, 0x91, 0xa2, 0xa4, 0x90, 0x5a, 0x04, 0x41, 0xca, + 0xa4, 0x39, 0x84, 0x40, 0xcd, 0x0c, 0x99, 0x69, 0x35, 0x88, 0x1b, 0x57, 0x2e, 0xdc, 0xb9, 0xf5, + 0x01, 0x74, 0xe1, 0xd3, 0xf8, 0x0a, 0x3e, 0x88, 0x34, 0x4d, 0x86, 0x58, 0x83, 0x5a, 0x05, 0x57, + 0x99, 0x33, 0x7f, 0xbe, 0xf3, 0xe3, 0x7c, 0xe7, 0x04, 0xdf, 0x83, 0x57, 0xec, 0x85, 0x58, 0x82, + 0xf4, 0x44, 0xce, 0x15, 0xf7, 0xaa, 0x50, 0x44, 0x5e, 0x0e, 0x52, 0xf0, 0x4c, 0xc2, 0x3c, 0xe2, + 0x71, 0x31, 0x97, 0x90, 0xaf, 0xd3, 0x05, 0xb8, 0xe5, 0x2d, 0x72, 0x35, 0xc9, 0xc5, 0xc2, 0x4d, + 0x98, 0x82, 0x97, 0xac, 0x70, 0x6b, 0x09, 0x57, 0x3f, 0x1e, 0x5c, 0x4e, 0x38, 0x4f, 0x96, 0xe0, + 0x31, 0x91, 0x7a, 0x2c, 0xcb, 0xb8, 0x62, 0x2a, 0xe5, 0x99, 0xdc, 0x3e, 0xa7, 0xd7, 0xf1, 0x51, + 0x58, 0xa9, 0x8f, 0x78, 0x5c, 0x8c, 0x33, 0x42, 0x70, 0x37, 0x66, 0x8a, 0x59, 0xc8, 0x46, 0x4e, + 0x2f, 0x2c, 0xd7, 0xf4, 0x1d, 0xc2, 0xc7, 0xcd, 0x6b, 0x93, 0x95, 0x22, 0x33, 0x7c, 0x58, 0x73, + 0x59, 0x86, 0x8d, 0x1c, 0xd3, 0x7f, 0xe0, 0xfe, 0x86, 0xc5, 0xdd, 0xd1, 0xd0, 0x71, 0xa8, 0xa5, + 0x06, 0x57, 0xf0, 0x61, 0xbd, 0xdb, 0x8a, 0xf2, 0xc9, 0xc0, 0x67, 0x21, 0x08, 0x60, 0x0a, 0xe2, + 0x5d, 0xa4, 0xe7, 0x3f, 0x20, 0x75, 0x1c, 0xd3, 0x1f, 0xfe, 0x01, 0x52, 0xab, 0x56, 0x1b, 0xda, + 0x17, 0xf4, 0x6b, 0x36, 0x12, 0xe1, 0xae, 0x2a, 0x04, 0x58, 0x1d, 0x1b, 0x39, 0x47, 0x7e, 0xf0, + 0xcf, 0xb9, 0xf5, 0xe2, 0x49, 0x21, 0x20, 0x2c, 0xb5, 0xe9, 0x2d, 0x7c, 0xb1, 0xb9, 0x4b, 0x4c, + 0x7c, 0x61, 0x16, 0x3c, 0x0a, 0x26, 0x4f, 0x83, 0xfe, 0x39, 0x72, 0x1e, 0xa3, 0x61, 0x1f, 0x6d, + 0x3e, 0xa3, 0xbe, 0x41, 0xef, 0xfc, 0x5c, 0xa9, 0xa9, 0xca, 0xd3, 0x2c, 0x91, 0xe4, 0x14, 0x1f, + 0xac, 0xd9, 0x72, 0x05, 0xd2, 0x42, 0x76, 0xc7, 0xe9, 0x85, 0x55, 0xe4, 0xbf, 0xef, 0xe2, 0x93, + 0x26, 0xcd, 0x74, 0xdb, 0x6b, 0xe4, 0x23, 0xc2, 0xc7, 0x0f, 0x41, 0x35, 0x8f, 0x88, 0xb7, 0x97, + 0xdd, 0xe3, 0x6c, 0x70, 0x7b, 0xdf, 0xfe, 0xa0, 0x37, 0xde, 0x7e, 0xfd, 0xf6, 0xc1, 0xb0, 0xc9, + 0x25, 0x3d, 0x02, 0x9b, 0x09, 0xf0, 0x5e, 0x6f, 0xaa, 0xfd, 0x26, 0xd2, 0xce, 0x90, 0xcf, 0x08, + 0x93, 0xc7, 0xa9, 0x6c, 0xf2, 0xa5, 0x20, 0xf7, 0x27, 0xbc, 0xff, 0xb7, 0x96, 0x51, 0xa7, 0x24, + 0xa5, 0xe4, 0xb4, 0x49, 0x9a, 0x82, 0x6c, 0x65, 0x3d, 0x69, 0xb2, 0xd6, 0x96, 0xfc, 0x07, 0xd8, + 0x2a, 0x15, 0xbd, 0x59, 0xc2, 0x5e, 0x23, 0x67, 0x1a, 0x56, 0x6e, 0x4f, 0x6a, 0xda, 0xaa, 0x1d, + 0x46, 0xe6, 0xb3, 0x9e, 0x56, 0x8b, 0x0e, 0xca, 0x3f, 0xc6, 0xdd, 0xef, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x07, 0xc9, 0xea, 0x62, 0xa8, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -358,6 +403,20 @@ type ResponseBodyServiceServer interface { ListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error) } +// UnimplementedResponseBodyServiceServer can be embedded to have forward compatible implementations. +type UnimplementedResponseBodyServiceServer struct { +} + +func (*UnimplementedResponseBodyServiceServer) GetResponseBody(ctx context.Context, req *ResponseBodyIn) (*ResponseBodyOut, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetResponseBody not implemented") +} +func (*UnimplementedResponseBodyServiceServer) ListResponseBodies(ctx context.Context, req *ResponseBodyIn) (*RepeatedResponseBodyOut, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListResponseBodies not implemented") +} +func (*UnimplementedResponseBodyServiceServer) ListResponseStrings(ctx context.Context, req *ResponseBodyIn) (*RepeatedResponseStrings, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListResponseStrings not implemented") +} + func RegisterResponseBodyServiceServer(s *grpc.Server, srv ResponseBodyServiceServer) { s.RegisterService(&_ResponseBodyService_serviceDesc, srv) } @@ -436,39 +495,3 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/response_body_service.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_response_body_service_dd1070a6693ff118) -} - -var fileDescriptor_response_body_service_dd1070a6693ff118 = []byte{ - // 441 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, - 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, - 0xd1, 0xb8, 0x49, 0x34, 0xba, 0xd0, 0x65, 0xbb, 0x91, 0xa2, 0xa4, 0x90, 0x5a, 0x04, 0x41, 0xca, - 0xa4, 0x39, 0x84, 0x40, 0xcd, 0x0c, 0x99, 0x69, 0x35, 0x88, 0x1b, 0x57, 0x2e, 0xdc, 0xb9, 0xf5, - 0x01, 0x74, 0xe1, 0xd3, 0xf8, 0x0a, 0x3e, 0x88, 0x34, 0x4d, 0x86, 0x58, 0x83, 0x5a, 0x05, 0x57, - 0x99, 0x33, 0x7f, 0xbe, 0xf3, 0xe3, 0x7c, 0xe7, 0x04, 0xdf, 0x83, 0x57, 0xec, 0x85, 0x58, 0x82, - 0xf4, 0x44, 0xce, 0x15, 0xf7, 0xaa, 0x50, 0x44, 0x5e, 0x0e, 0x52, 0xf0, 0x4c, 0xc2, 0x3c, 0xe2, - 0x71, 0x31, 0x97, 0x90, 0xaf, 0xd3, 0x05, 0xb8, 0xe5, 0x2d, 0x72, 0x35, 0xc9, 0xc5, 0xc2, 0x4d, - 0x98, 0x82, 0x97, 0xac, 0x70, 0x6b, 0x09, 0x57, 0x3f, 0x1e, 0x5c, 0x4e, 0x38, 0x4f, 0x96, 0xe0, - 0x31, 0x91, 0x7a, 0x2c, 0xcb, 0xb8, 0x62, 0x2a, 0xe5, 0x99, 0xdc, 0x3e, 0xa7, 0xd7, 0xf1, 0x51, - 0x58, 0xa9, 0x8f, 0x78, 0x5c, 0x8c, 0x33, 0x42, 0x70, 0x37, 0x66, 0x8a, 0x59, 0xc8, 0x46, 0x4e, - 0x2f, 0x2c, 0xd7, 0xf4, 0x1d, 0xc2, 0xc7, 0xcd, 0x6b, 0x93, 0x95, 0x22, 0x33, 0x7c, 0x58, 0x73, - 0x59, 0x86, 0x8d, 0x1c, 0xd3, 0x7f, 0xe0, 0xfe, 0x86, 0xc5, 0xdd, 0xd1, 0xd0, 0x71, 0xa8, 0xa5, - 0x06, 0x57, 0xf0, 0x61, 0xbd, 0xdb, 0x8a, 0xf2, 0xc9, 0xc0, 0x67, 0x21, 0x08, 0x60, 0x0a, 0xe2, - 0x5d, 0xa4, 0xe7, 0x3f, 0x20, 0x75, 0x1c, 0xd3, 0x1f, 0xfe, 0x01, 0x52, 0xab, 0x56, 0x1b, 0xda, - 0x17, 0xf4, 0x6b, 0x36, 0x12, 0xe1, 0xae, 0x2a, 0x04, 0x58, 0x1d, 0x1b, 0x39, 0x47, 0x7e, 0xf0, - 0xcf, 0xb9, 0xf5, 0xe2, 0x49, 0x21, 0x20, 0x2c, 0xb5, 0xe9, 0x2d, 0x7c, 0xb1, 0xb9, 0x4b, 0x4c, - 0x7c, 0x61, 0x16, 0x3c, 0x0a, 0x26, 0x4f, 0x83, 0xfe, 0x39, 0x72, 0x1e, 0xa3, 0x61, 0x1f, 0x6d, - 0x3e, 0xa3, 0xbe, 0x41, 0xef, 0xfc, 0x5c, 0xa9, 0xa9, 0xca, 0xd3, 0x2c, 0x91, 0xe4, 0x14, 0x1f, - 0xac, 0xd9, 0x72, 0x05, 0xd2, 0x42, 0x76, 0xc7, 0xe9, 0x85, 0x55, 0xe4, 0xbf, 0xef, 0xe2, 0x93, - 0x26, 0xcd, 0x74, 0xdb, 0x6b, 0xe4, 0x23, 0xc2, 0xc7, 0x0f, 0x41, 0x35, 0x8f, 0x88, 0xb7, 0x97, - 0xdd, 0xe3, 0x6c, 0x70, 0x7b, 0xdf, 0xfe, 0xa0, 0x37, 0xde, 0x7e, 0xfd, 0xf6, 0xc1, 0xb0, 0xc9, - 0x25, 0x3d, 0x02, 0x9b, 0x09, 0xf0, 0x5e, 0x6f, 0xaa, 0xfd, 0x26, 0xd2, 0xce, 0x90, 0xcf, 0x08, - 0x93, 0xc7, 0xa9, 0x6c, 0xf2, 0xa5, 0x20, 0xf7, 0x27, 0xbc, 0xff, 0xb7, 0x96, 0x51, 0xa7, 0x24, - 0xa5, 0xe4, 0xb4, 0x49, 0x9a, 0x82, 0x6c, 0x65, 0x3d, 0x69, 0xb2, 0xd6, 0x96, 0xfc, 0x07, 0xd8, - 0x2a, 0x15, 0xbd, 0x59, 0xc2, 0x5e, 0x23, 0x67, 0x1a, 0x56, 0x6e, 0x4f, 0x6a, 0xda, 0xaa, 0x1d, - 0x46, 0xe6, 0xb3, 0x9e, 0x56, 0x8b, 0x0e, 0xca, 0x3f, 0xc6, 0xdd, 0xef, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x07, 0xc9, 0xea, 0x62, 0xa8, 0x04, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/stream.pb.go b/examples/proto/examplepb/stream.pb.go index 8c1cd2e920b..993391ebea5 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/proto/examplepb/stream.pb.go @@ -3,16 +3,17 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import empty "github.com/golang/protobuf/ptypes/empty" -import sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" -import _ "google.golang.org/genproto/googleapis/api/annotations" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" + sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,7 +25,35 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +func init() { + proto.RegisterFile("examples/proto/examplepb/stream.proto", fileDescriptor_a31ab0177843ce10) +} + +var fileDescriptor_a31ab0177843ce10 = []byte{ + // 319 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xb1, 0x4e, 0xc3, 0x30, + 0x10, 0x86, 0x15, 0x40, 0x08, 0x8c, 0x58, 0x3c, 0x30, 0x04, 0xa4, 0x42, 0x05, 0xa2, 0x30, 0xd8, + 0x6d, 0xd9, 0xd8, 0x28, 0xea, 0x06, 0x62, 0xe8, 0xc6, 0x52, 0xd9, 0xd1, 0xd5, 0xb5, 0x9a, 0xc4, + 0x96, 0x7d, 0x29, 0x54, 0x62, 0x62, 0x64, 0xed, 0x8b, 0xf0, 0x2e, 0xbc, 0x02, 0x0f, 0x82, 0xea, + 0xa4, 0x1d, 0x10, 0x51, 0xcb, 0x78, 0xbe, 0xff, 0xf7, 0xfd, 0xdf, 0x4f, 0x2e, 0xe0, 0x55, 0x64, + 0x36, 0x05, 0xcf, 0xad, 0x33, 0x68, 0x78, 0x35, 0x5a, 0xc9, 0x3d, 0x3a, 0x10, 0x19, 0x0b, 0xcf, + 0xb4, 0xa1, 0x9c, 0x4d, 0x98, 0x12, 0x08, 0x2f, 0x62, 0xc6, 0x96, 0x1e, 0xb6, 0x52, 0xc7, 0x27, + 0xca, 0x18, 0x95, 0x02, 0x17, 0x56, 0x73, 0x91, 0xe7, 0x06, 0x05, 0x6a, 0x93, 0xfb, 0xd2, 0x1e, + 0x1f, 0x57, 0xdb, 0x30, 0xc9, 0x62, 0xc4, 0x21, 0xb3, 0x38, 0xab, 0x96, 0xdd, 0xda, 0x08, 0x62, + 0x28, 0x35, 0x0e, 0xcd, 0x68, 0x08, 0x53, 0x70, 0x33, 0x1c, 0xeb, 0x5c, 0x55, 0x9e, 0xd3, 0x5f, + 0x1e, 0x5f, 0x48, 0x9e, 0x81, 0xf7, 0x42, 0x41, 0xa9, 0xe8, 0x7e, 0x6e, 0x93, 0xc3, 0x41, 0x40, + 0x18, 0x80, 0x9b, 0xea, 0x04, 0xe8, 0x47, 0x44, 0x48, 0xaf, 0x48, 0x27, 0xf7, 0x0e, 0x04, 0x02, + 0xed, 0xb0, 0x35, 0x4c, 0xec, 0xae, 0xa7, 0xf1, 0x69, 0xd4, 0x5f, 0xdd, 0x8e, 0x8f, 0x58, 0xc9, + 0xc1, 0x96, 0x1c, 0xac, 0xbf, 0xe0, 0x68, 0xf2, 0xf7, 0xaf, 0xef, 0xf9, 0xd6, 0x55, 0xf3, 0x9c, + 0x4f, 0x3b, 0xcb, 0xf8, 0x7f, 0x85, 0xe7, 0xb2, 0x48, 0x27, 0xb7, 0xd1, 0x75, 0x2b, 0xa2, 0x6f, + 0x64, 0xe7, 0x41, 0x7b, 0xa4, 0x35, 0x5f, 0xc6, 0xff, 0x4f, 0xd7, 0xbc, 0x0c, 0x29, 0xce, 0x68, + 0x63, 0x4d, 0x8a, 0x76, 0x44, 0xe7, 0x11, 0xd9, 0x5b, 0x54, 0xd1, 0x4f, 0xc6, 0x86, 0xb6, 0x6a, + 0x4e, 0xf9, 0x42, 0xb2, 0x01, 0x3a, 0x9d, 0xab, 0xc7, 0xb2, 0xd9, 0x78, 0x63, 0xe5, 0xe6, 0x8d, + 0x40, 0x32, 0x36, 0xa1, 0x91, 0x76, 0xd4, 0x3b, 0x78, 0xde, 0x5f, 0xe1, 0xc9, 0xdd, 0x50, 0xc8, + 0xcd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x63, 0x7a, 0xd9, 0xa1, 0x02, 0x00, 0x00, +} // Reference imports to suppress errors if they are not otherwise used. var _ context.Context @@ -155,6 +184,20 @@ type StreamServiceServer interface { BulkEcho(StreamService_BulkEchoServer) error } +// UnimplementedStreamServiceServer can be embedded to have forward compatible implementations. +type UnimplementedStreamServiceServer struct { +} + +func (*UnimplementedStreamServiceServer) BulkCreate(srv StreamService_BulkCreateServer) error { + return status.Errorf(codes.Unimplemented, "method BulkCreate not implemented") +} +func (*UnimplementedStreamServiceServer) List(req *empty.Empty, srv StreamService_ListServer) error { + return status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (*UnimplementedStreamServiceServer) BulkEcho(srv StreamService_BulkEchoServer) error { + return status.Errorf(codes.Unimplemented, "method BulkEcho not implemented") +} + func RegisterStreamServiceServer(s *grpc.Server, srv StreamServiceServer) { s.RegisterService(&_StreamService_serviceDesc, srv) } @@ -256,31 +299,3 @@ var _StreamService_serviceDesc = grpc.ServiceDesc{ }, Metadata: "examples/proto/examplepb/stream.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/stream.proto", fileDescriptor_stream_44f32a4fe5bf6004) -} - -var fileDescriptor_stream_44f32a4fe5bf6004 = []byte{ - // 319 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xb1, 0x4e, 0xc3, 0x30, - 0x10, 0x86, 0x15, 0x40, 0x08, 0x8c, 0x58, 0x3c, 0x30, 0x04, 0xa4, 0x42, 0x05, 0xa2, 0x30, 0xd8, - 0x6d, 0xd9, 0xd8, 0x28, 0xea, 0x06, 0x62, 0xe8, 0xc6, 0x52, 0xd9, 0xd1, 0xd5, 0xb5, 0x9a, 0xc4, - 0x96, 0x7d, 0x29, 0x54, 0x62, 0x62, 0x64, 0xed, 0x8b, 0xf0, 0x2e, 0xbc, 0x02, 0x0f, 0x82, 0xea, - 0xa4, 0x1d, 0x10, 0x51, 0xcb, 0x78, 0xbe, 0xff, 0xf7, 0xfd, 0xdf, 0x4f, 0x2e, 0xe0, 0x55, 0x64, - 0x36, 0x05, 0xcf, 0xad, 0x33, 0x68, 0x78, 0x35, 0x5a, 0xc9, 0x3d, 0x3a, 0x10, 0x19, 0x0b, 0xcf, - 0xb4, 0xa1, 0x9c, 0x4d, 0x98, 0x12, 0x08, 0x2f, 0x62, 0xc6, 0x96, 0x1e, 0xb6, 0x52, 0xc7, 0x27, - 0xca, 0x18, 0x95, 0x02, 0x17, 0x56, 0x73, 0x91, 0xe7, 0x06, 0x05, 0x6a, 0x93, 0xfb, 0xd2, 0x1e, - 0x1f, 0x57, 0xdb, 0x30, 0xc9, 0x62, 0xc4, 0x21, 0xb3, 0x38, 0xab, 0x96, 0xdd, 0xda, 0x08, 0x62, - 0x28, 0x35, 0x0e, 0xcd, 0x68, 0x08, 0x53, 0x70, 0x33, 0x1c, 0xeb, 0x5c, 0x55, 0x9e, 0xd3, 0x5f, - 0x1e, 0x5f, 0x48, 0x9e, 0x81, 0xf7, 0x42, 0x41, 0xa9, 0xe8, 0x7e, 0x6e, 0x93, 0xc3, 0x41, 0x40, - 0x18, 0x80, 0x9b, 0xea, 0x04, 0xe8, 0x47, 0x44, 0x48, 0xaf, 0x48, 0x27, 0xf7, 0x0e, 0x04, 0x02, - 0xed, 0xb0, 0x35, 0x4c, 0xec, 0xae, 0xa7, 0xf1, 0x69, 0xd4, 0x5f, 0xdd, 0x8e, 0x8f, 0x58, 0xc9, - 0xc1, 0x96, 0x1c, 0xac, 0xbf, 0xe0, 0x68, 0xf2, 0xf7, 0xaf, 0xef, 0xf9, 0xd6, 0x55, 0xf3, 0x9c, - 0x4f, 0x3b, 0xcb, 0xf8, 0x7f, 0x85, 0xe7, 0xb2, 0x48, 0x27, 0xb7, 0xd1, 0x75, 0x2b, 0xa2, 0x6f, - 0x64, 0xe7, 0x41, 0x7b, 0xa4, 0x35, 0x5f, 0xc6, 0xff, 0x4f, 0xd7, 0xbc, 0x0c, 0x29, 0xce, 0x68, - 0x63, 0x4d, 0x8a, 0x76, 0x44, 0xe7, 0x11, 0xd9, 0x5b, 0x54, 0xd1, 0x4f, 0xc6, 0x86, 0xb6, 0x6a, - 0x4e, 0xf9, 0x42, 0xb2, 0x01, 0x3a, 0x9d, 0xab, 0xc7, 0xb2, 0xd9, 0x78, 0x63, 0xe5, 0xe6, 0x8d, - 0x40, 0x32, 0x36, 0xa1, 0x91, 0x76, 0xd4, 0x3b, 0x78, 0xde, 0x5f, 0xe1, 0xc9, 0xdd, 0x50, 0xc8, - 0xcd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x63, 0x7a, 0xd9, 0xa1, 0x02, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/proto/examplepb/unannotated_echo_service.pb.go index 73699e5c602..ba678e9a081 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/proto/examplepb/unannotated_echo_service.pb.go @@ -1,26 +1,25 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: examples/proto/examplepb/unannotated_echo_service.proto -package examplepb - -/* -Unannotated Echo Service -Similar to echo_service.proto but without annotations. See -unannotated_echo_service.yaml for the equivalent of the annotations in -gRPC API configuration format. - -Echo Service API consists of a single service which returns -a message. -*/ +// Unannotated Echo Service +// Similar to echo_service.proto but without annotations. See +// unannotated_echo_service.yaml for the equivalent of the annotations in +// gRPC API configuration format. +// +// Echo Service API consists of a single service which returns +// a message. -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import duration "github.com/golang/protobuf/ptypes/duration" +package examplepb import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -32,7 +31,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { @@ -49,16 +48,17 @@ func (m *UnannotatedSimpleMessage) Reset() { *m = UnannotatedSimpleMessa func (m *UnannotatedSimpleMessage) String() string { return proto.CompactTextString(m) } func (*UnannotatedSimpleMessage) ProtoMessage() {} func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_unannotated_echo_service_ca2b904682e29806, []int{0} + return fileDescriptor_a57876726ab5dd80, []int{0} } + func (m *UnannotatedSimpleMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UnannotatedSimpleMessage.Unmarshal(m, b) } func (m *UnannotatedSimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UnannotatedSimpleMessage.Marshal(b, m, deterministic) } -func (dst *UnannotatedSimpleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnannotatedSimpleMessage.Merge(dst, src) +func (m *UnannotatedSimpleMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_UnannotatedSimpleMessage.Merge(m, src) } func (m *UnannotatedSimpleMessage) XXX_Size() int { return xxx_messageInfo_UnannotatedSimpleMessage.Size(m) @@ -94,6 +94,31 @@ func init() { proto.RegisterType((*UnannotatedSimpleMessage)(nil), "grpc.gateway.examples.examplepb.UnannotatedSimpleMessage") } +func init() { + proto.RegisterFile("examples/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_a57876726ab5dd80) +} + +var fileDescriptor_a57876726ab5dd80 = []byte{ + // 268 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, + 0x4b, 0xf3, 0x12, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x52, 0x53, 0xe2, 0x53, 0x93, 0x33, 0xf2, + 0xe3, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0xc0, 0x0a, 0x85, 0xe4, 0xd3, 0x8b, 0x0a, + 0x92, 0xf5, 0xd2, 0x13, 0x4b, 0x52, 0xcb, 0x13, 0x2b, 0xf5, 0x60, 0xa6, 0xe8, 0xc1, 0xf5, 0x4b, + 0xc9, 0xa5, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0x42, 0xcc, 0x4d, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, + 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x18, 0xa0, 0x54, 0xcc, 0x25, 0x11, 0x8a, 0xb0, 0x22, 0x38, + 0x13, 0xa4, 0xcd, 0x37, 0xb5, 0xb8, 0x38, 0x31, 0x3d, 0x55, 0x88, 0x8f, 0x8b, 0x29, 0x33, 0x45, + 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x88, 0x29, 0x33, 0x45, 0x48, 0x80, 0x8b, 0x39, 0xaf, 0x34, + 0x57, 0x82, 0x49, 0x81, 0x51, 0x83, 0x39, 0x08, 0xc4, 0x14, 0x32, 0xe5, 0xe2, 0x80, 0x99, 0x27, + 0xc1, 0xac, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa9, 0x07, 0xb1, 0x50, 0x0f, 0x66, 0xa1, 0x9e, 0x0b, + 0x54, 0x41, 0x10, 0x5c, 0xa9, 0xd1, 0x3c, 0x66, 0x2e, 0x31, 0x24, 0x5b, 0x5d, 0x93, 0x33, 0xf2, + 0x83, 0x21, 0xde, 0x12, 0xaa, 0xe1, 0x62, 0x01, 0x71, 0x85, 0x2c, 0xf5, 0x08, 0xf8, 0x4c, 0x0f, + 0x97, 0xb3, 0xa5, 0xc8, 0xd7, 0x2a, 0xd4, 0xc0, 0xc8, 0xc5, 0x01, 0xb2, 0xde, 0x29, 0x3f, 0xa5, + 0x72, 0x80, 0x9c, 0xd0, 0xc4, 0xc8, 0xc5, 0x05, 0x72, 0x82, 0x4b, 0x6a, 0x4e, 0x6a, 0x49, 0xea, + 0xc0, 0x38, 0xc2, 0x89, 0x3b, 0x8a, 0x13, 0xae, 0x2a, 0x89, 0x0d, 0x1c, 0x95, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x9a, 0xa7, 0x7c, 0x41, 0xa5, 0x02, 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -165,6 +190,20 @@ type UnannotatedEchoServiceServer interface { EchoDelete(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) } +// UnimplementedUnannotatedEchoServiceServer can be embedded to have forward compatible implementations. +type UnimplementedUnannotatedEchoServiceServer struct { +} + +func (*UnimplementedUnannotatedEchoServiceServer) Echo(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") +} +func (*UnimplementedUnannotatedEchoServiceServer) EchoBody(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoBody not implemented") +} +func (*UnimplementedUnannotatedEchoServiceServer) EchoDelete(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoDelete not implemented") +} + func RegisterUnannotatedEchoServiceServer(s *grpc.Server, srv UnannotatedEchoServiceServer) { s.RegisterService(&_UnannotatedEchoService_serviceDesc, srv) } @@ -243,28 +282,3 @@ var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/unannotated_echo_service.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_unannotated_echo_service_ca2b904682e29806) -} - -var fileDescriptor_unannotated_echo_service_ca2b904682e29806 = []byte{ - // 268 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, - 0x4b, 0xf3, 0x12, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x52, 0x53, 0xe2, 0x53, 0x93, 0x33, 0xf2, - 0xe3, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0xc0, 0x0a, 0x85, 0xe4, 0xd3, 0x8b, 0x0a, - 0x92, 0xf5, 0xd2, 0x13, 0x4b, 0x52, 0xcb, 0x13, 0x2b, 0xf5, 0x60, 0xa6, 0xe8, 0xc1, 0xf5, 0x4b, - 0xc9, 0xa5, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0x42, 0xcc, 0x4d, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, - 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x18, 0xa0, 0x54, 0xcc, 0x25, 0x11, 0x8a, 0xb0, 0x22, 0x38, - 0x13, 0xa4, 0xcd, 0x37, 0xb5, 0xb8, 0x38, 0x31, 0x3d, 0x55, 0x88, 0x8f, 0x8b, 0x29, 0x33, 0x45, - 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x88, 0x29, 0x33, 0x45, 0x48, 0x80, 0x8b, 0x39, 0xaf, 0x34, - 0x57, 0x82, 0x49, 0x81, 0x51, 0x83, 0x39, 0x08, 0xc4, 0x14, 0x32, 0xe5, 0xe2, 0x80, 0x99, 0x27, - 0xc1, 0xac, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa9, 0x07, 0xb1, 0x50, 0x0f, 0x66, 0xa1, 0x9e, 0x0b, - 0x54, 0x41, 0x10, 0x5c, 0xa9, 0xd1, 0x3c, 0x66, 0x2e, 0x31, 0x24, 0x5b, 0x5d, 0x93, 0x33, 0xf2, - 0x83, 0x21, 0xde, 0x12, 0xaa, 0xe1, 0x62, 0x01, 0x71, 0x85, 0x2c, 0xf5, 0x08, 0xf8, 0x4c, 0x0f, - 0x97, 0xb3, 0xa5, 0xc8, 0xd7, 0x2a, 0xd4, 0xc0, 0xc8, 0xc5, 0x01, 0xb2, 0xde, 0x29, 0x3f, 0xa5, - 0x72, 0x80, 0x9c, 0xd0, 0xc4, 0xc8, 0xc5, 0x05, 0x72, 0x82, 0x4b, 0x6a, 0x4e, 0x6a, 0x49, 0xea, - 0xc0, 0x38, 0xc2, 0x89, 0x3b, 0x8a, 0x13, 0xae, 0x2a, 0x89, 0x0d, 0x1c, 0x95, 0xc6, 0x80, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x9a, 0xa7, 0x7c, 0x41, 0xa5, 0x02, 0x00, 0x00, -} diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/proto/examplepb/wrappers.pb.go index c0a52fe21bc..fa9e68e2d30 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/proto/examplepb/wrappers.pb.go @@ -3,16 +3,17 @@ package examplepb -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import empty "github.com/golang/protobuf/ptypes/empty" -import wrappers "github.com/golang/protobuf/ptypes/wrappers" -import _ "google.golang.org/genproto/googleapis/api/annotations" - import ( - context "golang.org/x/net/context" + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" ) // Reference imports to suppress errors if they are not otherwise used. @@ -24,7 +25,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type Wrappers struct { StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` @@ -45,16 +46,17 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_wrappers_357c0312be7b0bb0, []int{0} + return fileDescriptor_aa1e7ec5682437b9, []int{0} } + func (m *Wrappers) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Wrappers.Unmarshal(m, b) } func (m *Wrappers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Wrappers.Marshal(b, m, deterministic) } -func (dst *Wrappers) XXX_Merge(src proto.Message) { - xxx_messageInfo_Wrappers.Merge(dst, src) +func (m *Wrappers) XXX_Merge(src proto.Message) { + xxx_messageInfo_Wrappers.Merge(m, src) } func (m *Wrappers) XXX_Size() int { return xxx_messageInfo_Wrappers.Size(m) @@ -132,6 +134,51 @@ func init() { proto.RegisterType((*Wrappers)(nil), "grpc.gateway.examples.examplepb.Wrappers") } +func init() { + proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_aa1e7ec5682437b9) +} + +var fileDescriptor_aa1e7ec5682437b9 = []byte{ + // 578 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, + 0x8b, 0x44, 0x74, 0x55, 0x25, 0x26, 0x24, 0xa4, 0xf2, 0x21, 0x71, 0xcb, 0x34, 0x26, 0x71, 0x83, + 0xec, 0xcd, 0x8d, 0x82, 0xb2, 0x38, 0x4a, 0x9c, 0x8e, 0x5e, 0x21, 0xf1, 0x0a, 0x3c, 0x00, 0xcf, + 0xc2, 0x33, 0xf0, 0x0a, 0x3c, 0x08, 0xf2, 0x57, 0x3e, 0x9a, 0xe5, 0xc0, 0x9d, 0x9d, 0xff, 0xf9, + 0x9d, 0x7f, 0x7d, 0x7c, 0x8e, 0x8b, 0x9e, 0xf0, 0xaf, 0xf4, 0x32, 0x4b, 0x78, 0x11, 0x66, 0xb9, + 0x90, 0x22, 0xb4, 0xdb, 0x8c, 0x85, 0x57, 0x39, 0xcd, 0x32, 0x9e, 0x17, 0x81, 0x16, 0xf0, 0x41, + 0x94, 0x67, 0xe7, 0x41, 0x44, 0x25, 0xbf, 0xa2, 0xcb, 0xc0, 0x51, 0x41, 0x15, 0x4f, 0xf6, 0x23, + 0x21, 0xa2, 0x84, 0x87, 0x34, 0x8b, 0x43, 0x9a, 0xa6, 0x42, 0x52, 0x19, 0x8b, 0xd4, 0xe2, 0xe4, + 0x91, 0x55, 0xf5, 0x8e, 0x95, 0xf3, 0x95, 0xf4, 0x64, 0x6f, 0x55, 0xe7, 0x97, 0x99, 0x5c, 0x1a, + 0xd1, 0xff, 0xb5, 0x8e, 0x36, 0xce, 0x6c, 0x3c, 0x7e, 0x85, 0x36, 0x0b, 0x99, 0xc7, 0x69, 0xf4, + 0x79, 0x41, 0x93, 0x92, 0xef, 0x0c, 0x1e, 0x0f, 0x9e, 0x7a, 0xe3, 0xfd, 0xc0, 0x24, 0x08, 0x5c, + 0x82, 0xe0, 0x44, 0x07, 0x7d, 0x54, 0x31, 0x1f, 0xbc, 0xa2, 0xde, 0xe0, 0x97, 0xc8, 0x8b, 0x53, + 0x79, 0x34, 0xb6, 0xfc, 0x9a, 0xe6, 0xf7, 0x3a, 0xfc, 0x7b, 0x15, 0x63, 0x70, 0x14, 0x57, 0x6b, + 0x4b, 0x4f, 0x27, 0x96, 0xbe, 0xd1, 0x4f, 0x4f, 0x27, 0x35, 0x6d, 0xd7, 0x8a, 0x9e, 0x27, 0x82, + 0x4a, 0x4b, 0xaf, 0xf7, 0xd0, 0xef, 0x54, 0x8c, 0xa5, 0xe7, 0xd5, 0x5a, 0x1d, 0xfd, 0x42, 0x94, + 0x2c, 0xe1, 0x16, 0xbf, 0xd9, 0x73, 0xf4, 0x37, 0x3a, 0xc8, 0x1e, 0xfd, 0xa2, 0xde, 0xe0, 0x17, + 0x08, 0x31, 0x21, 0x12, 0x8b, 0x0f, 0x35, 0x4e, 0x3a, 0xf8, 0x4c, 0x88, 0xc4, 0xc0, 0x23, 0xe6, + 0x96, 0xca, 0xbb, 0x6c, 0x96, 0xed, 0x56, 0x8f, 0xf7, 0x69, 0xa3, 0x6e, 0x5e, 0xd9, 0x28, 0x9c, + 0x4d, 0x50, 0x55, 0x6e, 0x03, 0x48, 0xe0, 0x4a, 0xe7, 0x95, 0xed, 0xda, 0xb1, 0xa5, 0xe4, 0x85, + 0xe5, 0x47, 0x3d, 0xb5, 0x9b, 0xa9, 0x18, 0x5b, 0x3b, 0x56, 0xad, 0xc7, 0x3f, 0x47, 0x68, 0xcb, + 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, 0xc7, 0xdf, 0xd0, 0xf0, 0x75, 0xce, 0xa9, 0xe4, 0xf8, + 0x59, 0xf0, 0x8f, 0xf6, 0x0e, 0x1c, 0x4b, 0xfe, 0x3f, 0xd4, 0x3f, 0xf8, 0xfe, 0xfb, 0xcf, 0x8f, + 0xb5, 0x5d, 0xff, 0x7e, 0xb8, 0x78, 0xee, 0x26, 0xab, 0x6a, 0xfc, 0xe3, 0xc1, 0x21, 0xfe, 0x82, + 0xb6, 0xcd, 0x0f, 0x68, 0x34, 0x2b, 0x06, 0x5b, 0x99, 0x80, 0xaa, 0xbf, 0xab, 0x1d, 0xef, 0xf9, + 0x77, 0x94, 0xa3, 0xe4, 0x85, 0x34, 0xa2, 0xf2, 0x9a, 0xa3, 0xbb, 0xc6, 0xab, 0xbe, 0x20, 0x0c, + 0x75, 0x3d, 0x81, 0x44, 0x7f, 0x47, 0x1b, 0x61, 0xff, 0xb6, 0x33, 0xd2, 0xda, 0xaa, 0x8f, 0xbb, + 0x3a, 0x68, 0x3e, 0x08, 0x24, 0x5e, 0xeb, 0x33, 0x9d, 0xb4, 0x7c, 0xea, 0x61, 0xc1, 0xd0, 0x24, + 0x11, 0x48, 0xec, 0xfa, 0x68, 0xad, 0x75, 0x47, 0x8d, 0xa9, 0xc2, 0xe0, 0xcc, 0x11, 0x50, 0xed, + 0xde, 0x91, 0x11, 0x95, 0x17, 0x43, 0x5b, 0xc6, 0xab, 0x1a, 0x41, 0x0c, 0x8c, 0x27, 0x01, 0x34, + 0xff, 0xa1, 0x76, 0xd9, 0xf6, 0x37, 0x9d, 0x8b, 0x92, 0x5a, 0xe7, 0x69, 0x4c, 0x2a, 0x06, 0xe7, + 0x98, 0x80, 0x6a, 0xf7, 0x3c, 0xa7, 0xb1, 0xeb, 0x85, 0x96, 0x97, 0x6b, 0x06, 0x70, 0xe4, 0x09, + 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, 0xf5, 0x03, 0x80, 0xa1, 0xd7, 0x81, 0x40, 0x62, 0xb7, 0x1f, + 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, 0x7c, 0xde, 0xaa, 0x7f, 0x28, 0xfc, 0xa0, 0x93, 0x45, 0x7f, + 0x27, 0x3d, 0xdf, 0xbb, 0x89, 0xf5, 0xe7, 0xe3, 0xc1, 0xe1, 0xcc, 0xfb, 0x34, 0xaa, 0xde, 0x10, + 0x36, 0xd4, 0xd8, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x83, 0xaf, 0x71, 0xa0, 0x07, + 0x00, 0x00, +} + // Reference imports to suppress errors if they are not otherwise used. var _ context.Context var _ grpc.ClientConn @@ -279,6 +326,44 @@ type WrappersServiceServer interface { CreateEmpty(context.Context, *empty.Empty) (*empty.Empty, error) } +// UnimplementedWrappersServiceServer can be embedded to have forward compatible implementations. +type UnimplementedWrappersServiceServer struct { +} + +func (*UnimplementedWrappersServiceServer) Create(ctx context.Context, req *Wrappers) (*Wrappers, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateStringValue(ctx context.Context, req *wrappers.StringValue) (*wrappers.StringValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateStringValue not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateInt32Value(ctx context.Context, req *wrappers.Int32Value) (*wrappers.Int32Value, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateInt32Value not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateInt64Value(ctx context.Context, req *wrappers.Int64Value) (*wrappers.Int64Value, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateInt64Value not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateFloatValue(ctx context.Context, req *wrappers.FloatValue) (*wrappers.FloatValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateFloatValue not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateDoubleValue(ctx context.Context, req *wrappers.DoubleValue) (*wrappers.DoubleValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDoubleValue not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateBoolValue(ctx context.Context, req *wrappers.BoolValue) (*wrappers.BoolValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateBoolValue not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateUInt32Value(ctx context.Context, req *wrappers.UInt32Value) (*wrappers.UInt32Value, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateUInt32Value not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateUInt64Value(ctx context.Context, req *wrappers.UInt64Value) (*wrappers.UInt64Value, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateUInt64Value not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateBytesValue(ctx context.Context, req *wrappers.BytesValue) (*wrappers.BytesValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateBytesValue not implemented") +} +func (*UnimplementedWrappersServiceServer) CreateEmpty(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateEmpty not implemented") +} + func RegisterWrappersServiceServer(s *grpc.Server, srv WrappersServiceServer) { s.RegisterService(&_WrappersService_serviceDesc, srv) } @@ -533,48 +618,3 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/wrappers.proto", } - -func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_wrappers_357c0312be7b0bb0) -} - -var fileDescriptor_wrappers_357c0312be7b0bb0 = []byte{ - // 578 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, - 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, - 0x8b, 0x44, 0x74, 0x55, 0x25, 0x26, 0x24, 0xa4, 0xf2, 0x21, 0x71, 0xcb, 0x34, 0x26, 0x71, 0x83, - 0xec, 0xcd, 0x8d, 0x82, 0xb2, 0x38, 0x4a, 0x9c, 0x8e, 0x5e, 0x21, 0xf1, 0x0a, 0x3c, 0x00, 0xcf, - 0xc2, 0x33, 0xf0, 0x0a, 0x3c, 0x08, 0xf2, 0x57, 0x3e, 0x9a, 0xe5, 0xc0, 0x9d, 0x9d, 0xff, 0xf9, - 0x9d, 0x7f, 0x7d, 0x7c, 0x8e, 0x8b, 0x9e, 0xf0, 0xaf, 0xf4, 0x32, 0x4b, 0x78, 0x11, 0x66, 0xb9, - 0x90, 0x22, 0xb4, 0xdb, 0x8c, 0x85, 0x57, 0x39, 0xcd, 0x32, 0x9e, 0x17, 0x81, 0x16, 0xf0, 0x41, - 0x94, 0x67, 0xe7, 0x41, 0x44, 0x25, 0xbf, 0xa2, 0xcb, 0xc0, 0x51, 0x41, 0x15, 0x4f, 0xf6, 0x23, - 0x21, 0xa2, 0x84, 0x87, 0x34, 0x8b, 0x43, 0x9a, 0xa6, 0x42, 0x52, 0x19, 0x8b, 0xd4, 0xe2, 0xe4, - 0x91, 0x55, 0xf5, 0x8e, 0x95, 0xf3, 0x95, 0xf4, 0x64, 0x6f, 0x55, 0xe7, 0x97, 0x99, 0x5c, 0x1a, - 0xd1, 0xff, 0xb5, 0x8e, 0x36, 0xce, 0x6c, 0x3c, 0x7e, 0x85, 0x36, 0x0b, 0x99, 0xc7, 0x69, 0xf4, - 0x79, 0x41, 0x93, 0x92, 0xef, 0x0c, 0x1e, 0x0f, 0x9e, 0x7a, 0xe3, 0xfd, 0xc0, 0x24, 0x08, 0x5c, - 0x82, 0xe0, 0x44, 0x07, 0x7d, 0x54, 0x31, 0x1f, 0xbc, 0xa2, 0xde, 0xe0, 0x97, 0xc8, 0x8b, 0x53, - 0x79, 0x34, 0xb6, 0xfc, 0x9a, 0xe6, 0xf7, 0x3a, 0xfc, 0x7b, 0x15, 0x63, 0x70, 0x14, 0x57, 0x6b, - 0x4b, 0x4f, 0x27, 0x96, 0xbe, 0xd1, 0x4f, 0x4f, 0x27, 0x35, 0x6d, 0xd7, 0x8a, 0x9e, 0x27, 0x82, - 0x4a, 0x4b, 0xaf, 0xf7, 0xd0, 0xef, 0x54, 0x8c, 0xa5, 0xe7, 0xd5, 0x5a, 0x1d, 0xfd, 0x42, 0x94, - 0x2c, 0xe1, 0x16, 0xbf, 0xd9, 0x73, 0xf4, 0x37, 0x3a, 0xc8, 0x1e, 0xfd, 0xa2, 0xde, 0xe0, 0x17, - 0x08, 0x31, 0x21, 0x12, 0x8b, 0x0f, 0x35, 0x4e, 0x3a, 0xf8, 0x4c, 0x88, 0xc4, 0xc0, 0x23, 0xe6, - 0x96, 0xca, 0xbb, 0x6c, 0x96, 0xed, 0x56, 0x8f, 0xf7, 0x69, 0xa3, 0x6e, 0x5e, 0xd9, 0x28, 0x9c, - 0x4d, 0x50, 0x55, 0x6e, 0x03, 0x48, 0xe0, 0x4a, 0xe7, 0x95, 0xed, 0xda, 0xb1, 0xa5, 0xe4, 0x85, - 0xe5, 0x47, 0x3d, 0xb5, 0x9b, 0xa9, 0x18, 0x5b, 0x3b, 0x56, 0xad, 0xc7, 0x3f, 0x47, 0x68, 0xcb, - 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, 0xc7, 0xdf, 0xd0, 0xf0, 0x75, 0xce, 0xa9, 0xe4, 0xf8, - 0x59, 0xf0, 0x8f, 0xf6, 0x0e, 0x1c, 0x4b, 0xfe, 0x3f, 0xd4, 0x3f, 0xf8, 0xfe, 0xfb, 0xcf, 0x8f, - 0xb5, 0x5d, 0xff, 0x7e, 0xb8, 0x78, 0xee, 0x26, 0xab, 0x6a, 0xfc, 0xe3, 0xc1, 0x21, 0xfe, 0x82, - 0xb6, 0xcd, 0x0f, 0x68, 0x34, 0x2b, 0x06, 0x5b, 0x99, 0x80, 0xaa, 0xbf, 0xab, 0x1d, 0xef, 0xf9, - 0x77, 0x94, 0xa3, 0xe4, 0x85, 0x34, 0xa2, 0xf2, 0x9a, 0xa3, 0xbb, 0xc6, 0xab, 0xbe, 0x20, 0x0c, - 0x75, 0x3d, 0x81, 0x44, 0x7f, 0x47, 0x1b, 0x61, 0xff, 0xb6, 0x33, 0xd2, 0xda, 0xaa, 0x8f, 0xbb, - 0x3a, 0x68, 0x3e, 0x08, 0x24, 0x5e, 0xeb, 0x33, 0x9d, 0xb4, 0x7c, 0xea, 0x61, 0xc1, 0xd0, 0x24, - 0x11, 0x48, 0xec, 0xfa, 0x68, 0xad, 0x75, 0x47, 0x8d, 0xa9, 0xc2, 0xe0, 0xcc, 0x11, 0x50, 0xed, - 0xde, 0x91, 0x11, 0x95, 0x17, 0x43, 0x5b, 0xc6, 0xab, 0x1a, 0x41, 0x0c, 0x8c, 0x27, 0x01, 0x34, - 0xff, 0xa1, 0x76, 0xd9, 0xf6, 0x37, 0x9d, 0x8b, 0x92, 0x5a, 0xe7, 0x69, 0x4c, 0x2a, 0x06, 0xe7, - 0x98, 0x80, 0x6a, 0xf7, 0x3c, 0xa7, 0xb1, 0xeb, 0x85, 0x96, 0x97, 0x6b, 0x06, 0x70, 0xe4, 0x09, - 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, 0xf5, 0x03, 0x80, 0xa1, 0xd7, 0x81, 0x40, 0x62, 0xb7, 0x1f, - 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, 0x7c, 0xde, 0xaa, 0x7f, 0x28, 0xfc, 0xa0, 0x93, 0x45, 0x7f, - 0x27, 0x3d, 0xdf, 0xbb, 0x89, 0xf5, 0xe7, 0xe3, 0xc1, 0xe1, 0xcc, 0xfb, 0x34, 0xaa, 0xde, 0x10, - 0x36, 0xd4, 0xd8, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x83, 0xaf, 0x71, 0xa0, 0x07, - 0x00, 0x00, -} diff --git a/examples/proto/pathenum/path_enum.pb.go b/examples/proto/pathenum/path_enum.pb.go index a3daa1953d4..2a2e6a5e96e 100644 --- a/examples/proto/pathenum/path_enum.pb.go +++ b/examples/proto/pathenum/path_enum.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: examples/proto/pathenum/path_enum.proto -package pathenum // import "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" +package pathenum -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +18,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type PathEnum int32 @@ -29,6 +31,7 @@ var PathEnum_name = map[int32]string{ 0: "ABC", 1: "DEF", } + var PathEnum_value = map[string]int32{ "ABC": 0, "DEF": 1, @@ -37,8 +40,9 @@ var PathEnum_value = map[string]int32{ func (x PathEnum) String() string { return proto.EnumName(PathEnum_name, int32(x)) } + func (PathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_path_enum_802d5f52757a97bd, []int{0} + return fileDescriptor_dfe1d80fc8dac3c4, []int{0} } type MessagePathEnum_NestedPathEnum int32 @@ -52,6 +56,7 @@ var MessagePathEnum_NestedPathEnum_name = map[int32]string{ 0: "GHI", 1: "JKL", } + var MessagePathEnum_NestedPathEnum_value = map[string]int32{ "GHI": 0, "JKL": 1, @@ -60,8 +65,9 @@ var MessagePathEnum_NestedPathEnum_value = map[string]int32{ func (x MessagePathEnum_NestedPathEnum) String() string { return proto.EnumName(MessagePathEnum_NestedPathEnum_name, int32(x)) } + func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_path_enum_802d5f52757a97bd, []int{0, 0} + return fileDescriptor_dfe1d80fc8dac3c4, []int{0, 0} } type MessagePathEnum struct { @@ -74,16 +80,17 @@ func (m *MessagePathEnum) Reset() { *m = MessagePathEnum{} } func (m *MessagePathEnum) String() string { return proto.CompactTextString(m) } func (*MessagePathEnum) ProtoMessage() {} func (*MessagePathEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_path_enum_802d5f52757a97bd, []int{0} + return fileDescriptor_dfe1d80fc8dac3c4, []int{0} } + func (m *MessagePathEnum) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MessagePathEnum.Unmarshal(m, b) } func (m *MessagePathEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MessagePathEnum.Marshal(b, m, deterministic) } -func (dst *MessagePathEnum) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessagePathEnum.Merge(dst, src) +func (m *MessagePathEnum) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessagePathEnum.Merge(m, src) } func (m *MessagePathEnum) XXX_Size() int { return xxx_messageInfo_MessagePathEnum.Size(m) @@ -95,16 +102,16 @@ func (m *MessagePathEnum) XXX_DiscardUnknown() { var xxx_messageInfo_MessagePathEnum proto.InternalMessageInfo func init() { - proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.pathenum.MessagePathEnum") proto.RegisterEnum("grpc.gateway.examples.pathenum.PathEnum", PathEnum_name, PathEnum_value) proto.RegisterEnum("grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum", MessagePathEnum_NestedPathEnum_name, MessagePathEnum_NestedPathEnum_value) + proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.pathenum.MessagePathEnum") } func init() { - proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_path_enum_802d5f52757a97bd) + proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_dfe1d80fc8dac3c4) } -var fileDescriptor_path_enum_802d5f52757a97bd = []byte{ +var fileDescriptor_dfe1d80fc8dac3c4 = []byte{ // 175 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4f, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, diff --git a/examples/proto/sub/message.pb.go b/examples/proto/sub/message.pb.go index cc5381674f7..093f92acf00 100644 --- a/examples/proto/sub/message.pb.go +++ b/examples/proto/sub/message.pb.go @@ -3,9 +3,11 @@ package sub -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +18,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type StringMessage struct { Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` @@ -29,16 +31,17 @@ func (m *StringMessage) Reset() { *m = StringMessage{} } func (m *StringMessage) String() string { return proto.CompactTextString(m) } func (*StringMessage) ProtoMessage() {} func (*StringMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_message_6a35c3d524a65df7, []int{0} + return fileDescriptor_fcc527d41fdbced2, []int{0} } + func (m *StringMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StringMessage.Unmarshal(m, b) } func (m *StringMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_StringMessage.Marshal(b, m, deterministic) } -func (dst *StringMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringMessage.Merge(dst, src) +func (m *StringMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringMessage.Merge(m, src) } func (m *StringMessage) XXX_Size() int { return xxx_messageInfo_StringMessage.Size(m) @@ -60,11 +63,9 @@ func init() { proto.RegisterType((*StringMessage)(nil), "grpc.gateway.examples.sub.StringMessage") } -func init() { - proto.RegisterFile("examples/proto/sub/message.proto", fileDescriptor_message_6a35c3d524a65df7) -} +func init() { proto.RegisterFile("examples/proto/sub/message.proto", fileDescriptor_fcc527d41fdbced2) } -var fileDescriptor_message_6a35c3d524a65df7 = []byte{ +var fileDescriptor_fcc527d41fdbced2 = []byte{ // 114 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0xd2, 0xcf, diff --git a/examples/proto/sub2/message.pb.go b/examples/proto/sub2/message.pb.go index 586c6440b98..afda91bd768 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/proto/sub2/message.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: examples/proto/sub2/message.proto -package sub2 // import "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" +package sub2 -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +18,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type IdMessage struct { Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` @@ -29,16 +31,17 @@ func (m *IdMessage) Reset() { *m = IdMessage{} } func (m *IdMessage) String() string { return proto.CompactTextString(m) } func (*IdMessage) ProtoMessage() {} func (*IdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_message_9619dbc3ad374621, []int{0} + return fileDescriptor_3490899b8414eb79, []int{0} } + func (m *IdMessage) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_IdMessage.Unmarshal(m, b) } func (m *IdMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_IdMessage.Marshal(b, m, deterministic) } -func (dst *IdMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_IdMessage.Merge(dst, src) +func (m *IdMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_IdMessage.Merge(m, src) } func (m *IdMessage) XXX_Size() int { return xxx_messageInfo_IdMessage.Size(m) @@ -60,11 +63,9 @@ func init() { proto.RegisterType((*IdMessage)(nil), "sub2.IdMessage") } -func init() { - proto.RegisterFile("examples/proto/sub2/message.proto", fileDescriptor_message_9619dbc3ad374621) -} +func init() { proto.RegisterFile("examples/proto/sub2/message.proto", fileDescriptor_3490899b8414eb79) } -var fileDescriptor_message_9619dbc3ad374621 = []byte{ +var fileDescriptor_3490899b8414eb79 = []byte{ // 130 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, diff --git a/go.mod b/go.mod index c83df465786..73fe8d8d48b 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,15 @@ module github.com/grpc-ecosystem/grpc-gateway +go 1.13 + require ( github.com/ghodss/yaml v1.0.0 + github.com/go-resty/resty v1.8.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.2.0 - github.com/kr/pretty v0.1.0 // indirect - github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af - golang.org/x/net v0.0.0-20181220203305-927f97764cc3 - golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 // indirect - google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 - google.golang.org/grpc v1.19.0 - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect - gopkg.in/resty.v1 v1.12.0 - gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 // indirect + github.com/golang/protobuf v1.3.2 + github.com/rogpeppe/fastuuid v1.2.0 + golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 + google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c + google.golang.org/grpc v1.24.0 + gopkg.in/yaml.v2 v2.2.3 // indirect ) - -go 1.13 diff --git a/go.sum b/go.sum index 186bc4101fc..50fdb09d1b5 100644 --- a/go.sum +++ b/go.sum @@ -3,40 +3,53 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-resty/resty v1.8.0 h1:vbNCxbHOWCototzwxf3L63PQCKx6xgT6v8SHfoqkp6U= +github.com/go-resty/resty v1.8.0/go.mod h1:n37daLLGIHq2FFYHxg+FYQiwA95FpfNI+A9uxoIYGRk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8 h1:YoY1wS6JYVRpIfFngRf2HHo9R9dAne3xbkGOQ5rJXjU= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7 h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/stream_chunk.pb.go b/internal/stream_chunk.pb.go index 8858f069046..1eca68e3350 100644 --- a/internal/stream_chunk.pb.go +++ b/internal/stream_chunk.pb.go @@ -3,10 +3,12 @@ package internal -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import any "github.com/golang/protobuf/ptypes/any" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -17,7 +19,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package // StreamError is a response type which is returned when // streaming rpc returns an error. @@ -36,16 +38,17 @@ func (m *StreamError) Reset() { *m = StreamError{} } func (m *StreamError) String() string { return proto.CompactTextString(m) } func (*StreamError) ProtoMessage() {} func (*StreamError) Descriptor() ([]byte, []int) { - return fileDescriptor_stream_chunk_a2afb657504565d7, []int{0} + return fileDescriptor_9d15b670e96bbb5a, []int{0} } + func (m *StreamError) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_StreamError.Unmarshal(m, b) } func (m *StreamError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_StreamError.Marshal(b, m, deterministic) } -func (dst *StreamError) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamError.Merge(dst, src) +func (m *StreamError) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamError.Merge(m, src) } func (m *StreamError) XXX_Size() int { return xxx_messageInfo_StreamError.Size(m) @@ -95,11 +98,9 @@ func init() { proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError") } -func init() { - proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_stream_chunk_a2afb657504565d7) -} +func init() { proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_9d15b670e96bbb5a) } -var fileDescriptor_stream_chunk_a2afb657504565d7 = []byte{ +var fileDescriptor_9d15b670e96bbb5a = []byte{ // 223 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x41, 0x4e, 0xc3, 0x30, 0x10, 0x45, 0x15, 0x4a, 0x69, 0x3b, 0xd9, 0x45, 0x5d, 0x18, 0xba, 0x20, 0x62, 0x95, 0x95, 0x23, diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index 9fc282bb7bd..851af51231a 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -1,12 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: protoc-gen-swagger/options/annotations.proto -package options // import "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" +package options -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -17,14 +19,14 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package var E_Openapiv2Swagger = &proto.ExtensionDesc{ ExtendedType: (*descriptor.FileOptions)(nil), ExtensionType: (*Swagger)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger", - Tag: "bytes,1042,opt,name=openapiv2_swagger,json=openapiv2Swagger", + Tag: "bytes,1042,opt,name=openapiv2_swagger", Filename: "protoc-gen-swagger/options/annotations.proto", } @@ -33,7 +35,7 @@ var E_Openapiv2Operation = &proto.ExtensionDesc{ ExtensionType: (*Operation)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_operation", - Tag: "bytes,1042,opt,name=openapiv2_operation,json=openapiv2Operation", + Tag: "bytes,1042,opt,name=openapiv2_operation", Filename: "protoc-gen-swagger/options/annotations.proto", } @@ -42,7 +44,7 @@ var E_Openapiv2Schema = &proto.ExtensionDesc{ ExtensionType: (*Schema)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_schema", - Tag: "bytes,1042,opt,name=openapiv2_schema,json=openapiv2Schema", + Tag: "bytes,1042,opt,name=openapiv2_schema", Filename: "protoc-gen-swagger/options/annotations.proto", } @@ -51,7 +53,7 @@ var E_Openapiv2Tag = &proto.ExtensionDesc{ ExtensionType: (*Tag)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_tag", - Tag: "bytes,1042,opt,name=openapiv2_tag,json=openapiv2Tag", + Tag: "bytes,1042,opt,name=openapiv2_tag", Filename: "protoc-gen-swagger/options/annotations.proto", } @@ -60,7 +62,7 @@ var E_Openapiv2Field = &proto.ExtensionDesc{ ExtensionType: (*JSONSchema)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_field", - Tag: "bytes,1042,opt,name=openapiv2_field,json=openapiv2Field", + Tag: "bytes,1042,opt,name=openapiv2_field", Filename: "protoc-gen-swagger/options/annotations.proto", } @@ -73,10 +75,10 @@ func init() { } func init() { - proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_annotations_8378bd63c2853a5a) + proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_a6a34ca6badab664) } -var fileDescriptor_annotations_8378bd63c2853a5a = []byte{ +var fileDescriptor_a6a34ca6badab664 = []byte{ // 346 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xea, 0x40, 0x14, 0xc5, 0xc3, 0xe6, 0xe5, 0xa5, 0xef, 0xa9, 0x58, 0x37, 0x86, 0xf8, 0x87, 0x9d, 0xc6, 0xc0, diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 6720071bde0..727ca52783c 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1,13 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: protoc-gen-swagger/options/openapiv2.proto -package options // import "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import any "github.com/golang/protobuf/ptypes/any" -import _struct "github.com/golang/protobuf/ptypes/struct" +package options + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + _struct "github.com/golang/protobuf/ptypes/struct" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -18,7 +20,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type Swagger_SwaggerScheme int32 @@ -37,6 +39,7 @@ var Swagger_SwaggerScheme_name = map[int32]string{ 3: "WS", 4: "WSS", } + var Swagger_SwaggerScheme_value = map[string]int32{ "UNKNOWN": 0, "HTTP": 1, @@ -48,8 +51,9 @@ var Swagger_SwaggerScheme_value = map[string]int32{ func (x Swagger_SwaggerScheme) String() string { return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) } + func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{0, 0} + return fileDescriptor_ba35ad8af024fb48, []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -75,6 +79,7 @@ var JSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{ 6: "OBJECT", 7: "STRING", } + var JSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{ "UNKNOWN": 0, "ARRAY": 1, @@ -89,8 +94,9 @@ var JSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) } + func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{8, 0} + return fileDescriptor_ba35ad8af024fb48, []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -110,6 +116,7 @@ var SecurityScheme_Type_name = map[int32]string{ 2: "TYPE_API_KEY", 3: "TYPE_OAUTH2", } + var SecurityScheme_Type_value = map[string]int32{ "TYPE_INVALID": 0, "TYPE_BASIC": 1, @@ -120,8 +127,9 @@ var SecurityScheme_Type_value = map[string]int32{ func (x SecurityScheme_Type) String() string { return proto.EnumName(SecurityScheme_Type_name, int32(x)) } + func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 0} + return fileDescriptor_ba35ad8af024fb48, []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -138,6 +146,7 @@ var SecurityScheme_In_name = map[int32]string{ 1: "IN_QUERY", 2: "IN_HEADER", } + var SecurityScheme_In_value = map[string]int32{ "IN_INVALID": 0, "IN_QUERY": 1, @@ -147,8 +156,9 @@ var SecurityScheme_In_value = map[string]int32{ func (x SecurityScheme_In) String() string { return proto.EnumName(SecurityScheme_In_name, int32(x)) } + func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 1} + return fileDescriptor_ba35ad8af024fb48, []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -170,6 +180,7 @@ var SecurityScheme_Flow_name = map[int32]string{ 3: "FLOW_APPLICATION", 4: "FLOW_ACCESS_CODE", } + var SecurityScheme_Flow_value = map[string]int32{ "FLOW_INVALID": 0, "FLOW_IMPLICIT": 1, @@ -181,8 +192,9 @@ var SecurityScheme_Flow_value = map[string]int32{ func (x SecurityScheme_Flow) String() string { return proto.EnumName(SecurityScheme_Flow_name, int32(x)) } + func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{11, 2} + return fileDescriptor_ba35ad8af024fb48, []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -218,16 +230,17 @@ func (m *Swagger) Reset() { *m = Swagger{} } func (m *Swagger) String() string { return proto.CompactTextString(m) } func (*Swagger) ProtoMessage() {} func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{0} + return fileDescriptor_ba35ad8af024fb48, []int{0} } + func (m *Swagger) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Swagger.Unmarshal(m, b) } func (m *Swagger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Swagger.Marshal(b, m, deterministic) } -func (dst *Swagger) XXX_Merge(src proto.Message) { - xxx_messageInfo_Swagger.Merge(dst, src) +func (m *Swagger) XXX_Merge(src proto.Message) { + xxx_messageInfo_Swagger.Merge(m, src) } func (m *Swagger) XXX_Size() int { return xxx_messageInfo_Swagger.Size(m) @@ -349,16 +362,17 @@ func (m *Operation) Reset() { *m = Operation{} } func (m *Operation) String() string { return proto.CompactTextString(m) } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{1} + return fileDescriptor_ba35ad8af024fb48, []int{1} } + func (m *Operation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Operation.Unmarshal(m, b) } func (m *Operation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Operation.Marshal(b, m, deterministic) } -func (dst *Operation) XXX_Merge(src proto.Message) { - xxx_messageInfo_Operation.Merge(dst, src) +func (m *Operation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Operation.Merge(m, src) } func (m *Operation) XXX_Size() int { return xxx_messageInfo_Operation.Size(m) @@ -474,16 +488,17 @@ func (m *Response) Reset() { *m = Response{} } func (m *Response) String() string { return proto.CompactTextString(m) } func (*Response) ProtoMessage() {} func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{2} + return fileDescriptor_ba35ad8af024fb48, []int{2} } + func (m *Response) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Response.Unmarshal(m, b) } func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Response.Marshal(b, m, deterministic) } -func (dst *Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_Response.Merge(dst, src) +func (m *Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_Response.Merge(m, src) } func (m *Response) XXX_Size() int { return xxx_messageInfo_Response.Size(m) @@ -537,16 +552,17 @@ func (m *Info) Reset() { *m = Info{} } func (m *Info) String() string { return proto.CompactTextString(m) } func (*Info) ProtoMessage() {} func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{3} + return fileDescriptor_ba35ad8af024fb48, []int{3} } + func (m *Info) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Info.Unmarshal(m, b) } func (m *Info) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Info.Marshal(b, m, deterministic) } -func (dst *Info) XXX_Merge(src proto.Message) { - xxx_messageInfo_Info.Merge(dst, src) +func (m *Info) XXX_Merge(src proto.Message) { + xxx_messageInfo_Info.Merge(m, src) } func (m *Info) XXX_Size() int { return xxx_messageInfo_Info.Size(m) @@ -624,16 +640,17 @@ func (m *Contact) Reset() { *m = Contact{} } func (m *Contact) String() string { return proto.CompactTextString(m) } func (*Contact) ProtoMessage() {} func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{4} + return fileDescriptor_ba35ad8af024fb48, []int{4} } + func (m *Contact) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Contact.Unmarshal(m, b) } func (m *Contact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Contact.Marshal(b, m, deterministic) } -func (dst *Contact) XXX_Merge(src proto.Message) { - xxx_messageInfo_Contact.Merge(dst, src) +func (m *Contact) XXX_Merge(src proto.Message) { + xxx_messageInfo_Contact.Merge(m, src) } func (m *Contact) XXX_Size() int { return xxx_messageInfo_Contact.Size(m) @@ -683,16 +700,17 @@ func (m *License) Reset() { *m = License{} } func (m *License) String() string { return proto.CompactTextString(m) } func (*License) ProtoMessage() {} func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{5} + return fileDescriptor_ba35ad8af024fb48, []int{5} } + func (m *License) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_License.Unmarshal(m, b) } func (m *License) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_License.Marshal(b, m, deterministic) } -func (dst *License) XXX_Merge(src proto.Message) { - xxx_messageInfo_License.Merge(dst, src) +func (m *License) XXX_Merge(src proto.Message) { + xxx_messageInfo_License.Merge(m, src) } func (m *License) XXX_Size() int { return xxx_messageInfo_License.Size(m) @@ -735,16 +753,17 @@ func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } func (*ExternalDocumentation) ProtoMessage() {} func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{6} + return fileDescriptor_ba35ad8af024fb48, []int{6} } + func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) } func (m *ExternalDocumentation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_ExternalDocumentation.Marshal(b, m, deterministic) } -func (dst *ExternalDocumentation) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExternalDocumentation.Merge(dst, src) +func (m *ExternalDocumentation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExternalDocumentation.Merge(m, src) } func (m *ExternalDocumentation) XXX_Size() int { return xxx_messageInfo_ExternalDocumentation.Size(m) @@ -789,16 +808,17 @@ func (m *Schema) Reset() { *m = Schema{} } func (m *Schema) String() string { return proto.CompactTextString(m) } func (*Schema) ProtoMessage() {} func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{7} + return fileDescriptor_ba35ad8af024fb48, []int{7} } + func (m *Schema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Schema.Unmarshal(m, b) } func (m *Schema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Schema.Marshal(b, m, deterministic) } -func (dst *Schema) XXX_Merge(src proto.Message) { - xxx_messageInfo_Schema.Merge(dst, src) +func (m *Schema) XXX_Merge(src proto.Message) { + xxx_messageInfo_Schema.Merge(m, src) } func (m *Schema) XXX_Size() int { return xxx_messageInfo_Schema.Size(m) @@ -893,16 +913,17 @@ func (m *JSONSchema) Reset() { *m = JSONSchema{} } func (m *JSONSchema) String() string { return proto.CompactTextString(m) } func (*JSONSchema) ProtoMessage() {} func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{8} + return fileDescriptor_ba35ad8af024fb48, []int{8} } + func (m *JSONSchema) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JSONSchema.Unmarshal(m, b) } func (m *JSONSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_JSONSchema.Marshal(b, m, deterministic) } -func (dst *JSONSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_JSONSchema.Merge(dst, src) +func (m *JSONSchema) XXX_Merge(src proto.Message) { + xxx_messageInfo_JSONSchema.Merge(m, src) } func (m *JSONSchema) XXX_Size() int { return xxx_messageInfo_JSONSchema.Size(m) @@ -1079,16 +1100,17 @@ func (m *Tag) Reset() { *m = Tag{} } func (m *Tag) String() string { return proto.CompactTextString(m) } func (*Tag) ProtoMessage() {} func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{9} + return fileDescriptor_ba35ad8af024fb48, []int{9} } + func (m *Tag) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Tag.Unmarshal(m, b) } func (m *Tag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Tag.Marshal(b, m, deterministic) } -func (dst *Tag) XXX_Merge(src proto.Message) { - xxx_messageInfo_Tag.Merge(dst, src) +func (m *Tag) XXX_Merge(src proto.Message) { + xxx_messageInfo_Tag.Merge(m, src) } func (m *Tag) XXX_Size() int { return xxx_messageInfo_Tag.Size(m) @@ -1133,16 +1155,17 @@ func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } func (*SecurityDefinitions) ProtoMessage() {} func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{10} + return fileDescriptor_ba35ad8af024fb48, []int{10} } + func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) } func (m *SecurityDefinitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SecurityDefinitions.Marshal(b, m, deterministic) } -func (dst *SecurityDefinitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityDefinitions.Merge(dst, src) +func (m *SecurityDefinitions) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityDefinitions.Merge(m, src) } func (m *SecurityDefinitions) XXX_Size() int { return xxx_messageInfo_SecurityDefinitions.Size(m) @@ -1212,16 +1235,17 @@ func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } func (*SecurityScheme) ProtoMessage() {} func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{11} + return fileDescriptor_ba35ad8af024fb48, []int{11} } + func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) } func (m *SecurityScheme) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SecurityScheme.Marshal(b, m, deterministic) } -func (dst *SecurityScheme) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityScheme.Merge(dst, src) +func (m *SecurityScheme) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityScheme.Merge(m, src) } func (m *SecurityScheme) XXX_Size() int { return xxx_messageInfo_SecurityScheme.Size(m) @@ -1321,16 +1345,17 @@ func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } func (*SecurityRequirement) ProtoMessage() {} func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{12} + return fileDescriptor_ba35ad8af024fb48, []int{12} } + func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) } func (m *SecurityRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SecurityRequirement.Marshal(b, m, deterministic) } -func (dst *SecurityRequirement) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityRequirement.Merge(dst, src) +func (m *SecurityRequirement) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityRequirement.Merge(m, src) } func (m *SecurityRequirement) XXX_Size() int { return xxx_messageInfo_SecurityRequirement.Size(m) @@ -1366,16 +1391,17 @@ func (m *SecurityRequirement_SecurityRequirementValue) String() string { } func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{12, 0} + return fileDescriptor_ba35ad8af024fb48, []int{12, 0} } + func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Marshal(b, m, deterministic) } -func (dst *SecurityRequirement_SecurityRequirementValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Merge(dst, src) +func (m *SecurityRequirement_SecurityRequirementValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Merge(m, src) } func (m *SecurityRequirement_SecurityRequirementValue) XXX_Size() int { return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Size(m) @@ -1411,16 +1437,17 @@ func (m *Scopes) Reset() { *m = Scopes{} } func (m *Scopes) String() string { return proto.CompactTextString(m) } func (*Scopes) ProtoMessage() {} func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_openapiv2_7182f700aabb5117, []int{13} + return fileDescriptor_ba35ad8af024fb48, []int{13} } + func (m *Scopes) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Scopes.Unmarshal(m, b) } func (m *Scopes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Scopes.Marshal(b, m, deterministic) } -func (dst *Scopes) XXX_Merge(src proto.Message) { - xxx_messageInfo_Scopes.Merge(dst, src) +func (m *Scopes) XXX_Merge(src proto.Message) { + xxx_messageInfo_Scopes.Merge(m, src) } func (m *Scopes) XXX_Size() int { return xxx_messageInfo_Scopes.Size(m) @@ -1439,6 +1466,11 @@ func (m *Scopes) GetScope() map[string]string { } func init() { + proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme", Swagger_SwaggerScheme_name, Swagger_SwaggerScheme_value) + proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes", JSONSchema_JSONSchemaSimpleTypes_name, JSONSchema_JSONSchemaSimpleTypes_value) + proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type", SecurityScheme_Type_name, SecurityScheme_Type_value) + proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In", SecurityScheme_In_name, SecurityScheme_In_value) + proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow", SecurityScheme_Flow_name, SecurityScheme_Flow_value) proto.RegisterType((*Swagger)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger") proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry") proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry") @@ -1464,18 +1496,13 @@ func init() { proto.RegisterType((*SecurityRequirement_SecurityRequirementValue)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementValue") proto.RegisterType((*Scopes)(nil), "grpc.gateway.protoc_gen_swagger.options.Scopes") proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.protoc_gen_swagger.options.Scopes.ScopeEntry") - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme", Swagger_SwaggerScheme_name, Swagger_SwaggerScheme_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes", JSONSchema_JSONSchemaSimpleTypes_name, JSONSchema_JSONSchemaSimpleTypes_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type", SecurityScheme_Type_name, SecurityScheme_Type_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In", SecurityScheme_In_name, SecurityScheme_In_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow", SecurityScheme_Flow_name, SecurityScheme_Flow_value) } func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_openapiv2_7182f700aabb5117) + proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_ba35ad8af024fb48) } -var fileDescriptor_openapiv2_7182f700aabb5117 = []byte{ +var fileDescriptor_ba35ad8af024fb48 = []byte{ // 1884 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x5b, 0x73, 0xdb, 0xc6, 0xf5, 0x0f, 0x48, 0x90, 0x04, 0x0f, 0x45, 0x7a, 0xbd, 0x96, 0xf3, 0x47, 0x18, 0xdb, 0x7f, 0x85, diff --git a/repositories.bzl b/repositories.bzl index 9477332b07a..2ea561e1faf 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -4,8 +4,8 @@ def go_repositories(): go_repository( name = "co_honnef_go_tools", importpath = "honnef.co/go/tools", - sum = "h1:XJP7lxbSxWLOMNdBE4B/STaqVy6L73o0knwj2vIlxnw=", - version = "v0.0.0-20190102054323-c2f93a96b099", + sum = "h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=", + version = "v0.0.0-20190523083050-ea95bdfd59fc", ) go_repository( name = "com_github_burntsushi_toml", @@ -40,8 +40,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=", - version = "v1.2.0", + sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=", + version = "v1.3.2", ) go_repository( name = "com_github_kr_pretty", @@ -94,32 +94,32 @@ def go_repositories(): go_repository( name = "org_golang_google_appengine", importpath = "google.golang.org/appengine", - sum = "h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs=", - version = "v1.1.0", + sum = "h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=", + version = "v1.4.0", ) go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=", - version = "v0.0.0-20180817151627-c66870c02cf8", + sum = "h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo=", + version = "v0.0.0-20190927181202-20e1ac93f88c", ) go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=", - version = "v1.19.0", + sum = "h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s=", + version = "v1.24.0", ) go_repository( name = "org_golang_x_lint", importpath = "golang.org/x/lint", - sum = "h1:x/bBzNauLQAlE3fLku/xy92Y8QwKX5HZymrMz2IiKFc=", - version = "v0.0.0-20181026193005-c67002cb31c3", + sum = "h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=", + version = "v0.0.0-20190313153728-d0100b6bd8b3", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=", - version = "v0.0.0-20181220203305-927f97764cc3", + sum = "h1:6KET3Sqa7fkVfD63QnAM81ZeYg5n4HwApOJkufONnHA=", + version = "v0.0.0-20190930134127-c5a3c61f89f3", ) go_repository( name = "org_golang_x_oauth2", @@ -130,24 +130,49 @@ def go_repositories(): go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=", - version = "v0.0.0-20180314180146-1d60e4601c6f", + sum = "h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=", + version = "v0.0.0-20190423024810-112230192c58", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:YoY1wS6JYVRpIfFngRf2HHo9R9dAne3xbkGOQ5rJXjU=", - version = "v0.0.0-20181107165924-66b7b1311ac8", + sum = "h1:q9u40nxWT5zRClI/uU9dHCiYGottAg6Nzz4YUQyHxdA=", + version = "v0.0.0-20190927073244-c990c680b611", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", - version = "v0.3.0", + sum = "h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=", + version = "v0.3.2", ) go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:qMK98NmNCRVDIYFycQ5yVRkvgDUFfdP8Ip4KqmDEB7g=", - version = "v0.0.0-20190114222345-bf090417da8b", + sum = "h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=", + version = "v0.0.0-20190524140312-2c0ae7006135", + ) + go_repository( + name = "com_github_go_resty_resty", + importpath = "github.com/go-resty/resty", + replace = "gopkg.in/resty.v1", + sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", + version = "v1.12.0", + ) + go_repository( + name = "com_github_google_go_cmp", + importpath = "github.com/google/go-cmp", + sum = "h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=", + version = "v0.2.0", + ) + go_repository( + name = "org_golang_x_crypto", + importpath = "golang.org/x/crypto", + sum = "h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=", + version = "v0.0.0-20190308221718-c2843e01d9a2", + ) + go_repository( + name = "org_golang_x_exp", + importpath = "golang.org/x/exp", + sum = "h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=", + version = "v0.0.0-20190121172915-509febef88a4", ) From 39c06ec18fd8fafc358f0c0ac1bd2788ce1787ad Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 11 Sep 2019 10:58:11 +0100 Subject: [PATCH 0225/1518] Remove "make test" recommendation from CONTRIBUTING.md This is not even how we run tests in CI anymore. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ecab022c28f..09951e3c4f9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ Here's the recommended process of contribution. 4. Make sure that your change follows best practices in Go * [Effective Go](https://golang.org/doc/effective_go.html) * [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) -5. Make sure that `make test` passes. (use swagger-codegen 2.2.2, not newer versions) +5. Make sure that `go test ./...` passes. 6. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) 7. Open a pull request in Github From 28a1cae139f48b8e04667c61606bd82b0c82bbb8 Mon Sep 17 00:00:00 2001 From: Zach Gershman Date: Wed, 2 Oct 2019 08:46:38 -0700 Subject: [PATCH 0226/1518] Align bazel deps with mod file (#1057) --- repositories.bzl | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/repositories.bzl b/repositories.bzl index 2ea561e1faf..2d83853dfc7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -64,8 +64,8 @@ def go_repositories(): go_repository( name = "com_github_rogpeppe_fastuuid", importpath = "github.com/rogpeppe/fastuuid", - sum = "h1:gu+uRPtBe88sKxUCEXRoeCvVG90TJmwhiqRpvdhQFng=", - version = "v0.0.0-20150106093220-6724a57986af", + sum = "h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s=", + version = "v1.2.0", ) go_repository( name = "com_google_cloud_go", @@ -76,8 +76,8 @@ def go_repositories(): go_repository( name = "in_gopkg_check_v1", importpath = "gopkg.in/check.v1", - sum = "h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=", - version = "v1.0.0-20180628173108-788fd7840127", + sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=", + version = "v0.0.0-20161208181325-20d25e280405", ) go_repository( name = "in_gopkg_resty_v1", @@ -88,8 +88,8 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:+t9dhfO+GNOIGJof6kPOAenx7YgrZMTdRPV+EsnPabk=", - version = "v2.0.0-20170812160011-eb3733d160e7", + sum = "h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=", + version = "v2.2.3", ) go_repository( name = "org_golang_google_appengine", @@ -118,8 +118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:6KET3Sqa7fkVfD63QnAM81ZeYg5n4HwApOJkufONnHA=", - version = "v0.0.0-20190930134127-c5a3c61f89f3", + sum = "h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs=", + version = "v0.0.0-20191002035440-2ec189313ef0", ) go_repository( name = "org_golang_x_oauth2", @@ -136,14 +136,14 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:q9u40nxWT5zRClI/uU9dHCiYGottAg6Nzz4YUQyHxdA=", - version = "v0.0.0-20190927073244-c990c680b611", + sum = "h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=", + version = "v0.0.0-20190215142949-d0b11bdaac8a", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=", - version = "v0.3.2", + sum = "h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=", + version = "v0.3.0", ) go_repository( name = "org_golang_x_tools", @@ -154,9 +154,8 @@ def go_repositories(): go_repository( name = "com_github_go_resty_resty", importpath = "github.com/go-resty/resty", - replace = "gopkg.in/resty.v1", - sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", - version = "v1.12.0", + sum = "h1:vbNCxbHOWCototzwxf3L63PQCKx6xgT6v8SHfoqkp6U=", + version = "v1.8.0", ) go_repository( name = "com_github_google_go_cmp", From c677e419aa5ce4a305e17248df3c91b6a3955081 Mon Sep 17 00:00:00 2001 From: Zach Gershman Date: Fri, 4 Oct 2019 08:05:33 -0700 Subject: [PATCH 0227/1518] Update test swagger generator to 2.4.8 (#1058) * generate files with swagger-codegen 2.4.8 * swagger-codegen 2.4.8 is now the base requirement - had to update the makefile as the generated file names have all moved around a little bit - moved bazel forward to use go 1.13.1 as well - test that was using a deep reflect to do equality has changed to be per struct field equality (deep reflect no longer works with the enum types). * remove need for env var * adds -e plus refactors tools to top * Update .circleci/Dockerfile Co-Authored-By: Johan Brandhorst --- .circleci/Dockerfile | 33 +- .circleci/config.yml | 2 +- Makefile | 58 +- WORKSPACE | 6 +- examples/clients/abe/.swagger-codegen/VERSION | 1 + examples/clients/abe/BUILD.bazel | 36 +- .../abe/a_bit_of_everything_service_api.go | 1660 --------- examples/clients/abe/api/swagger.yaml | 2202 ++++++++++++ .../abe/api_a_bit_of_everything_service.go | 3054 +++++++++++++++++ .../abe/api_camel_case_service_name.go | 159 + examples/clients/abe/api_client.go | 164 - examples/clients/abe/api_echo_rpc.go | 475 +++ .../abe/camel_case_service_name_api.go | 111 - examples/clients/abe/client.go | 471 +++ examples/clients/abe/configuration.go | 72 +- examples/clients/abe/echo_rpc_api.go | 265 -- examples/clients/abe/echo_service_api.go | 265 -- .../clients/abe/examplepb_numeric_enum.go | 15 - .../abe/examplepb_update_v2_request.go | 18 - .../abe/message_path_enum_nested_path_enum.go | 14 - ...go => model_a_bit_of_everything_nested.go} | 11 +- ...=> model_examplepb_a_bit_of_everything.go} | 56 +- ...examplepb_a_bit_of_everything_repeated.go} | 22 +- ...mplepb_body.go => model_examplepb_body.go} | 7 +- .../abe/model_examplepb_numeric_enum.go | 19 + .../abe/model_examplepb_update_v2_request.go | 16 + ...odel_message_path_enum_nested_path_enum.go | 19 + .../clients/abe/model_nested_deep_enum.go | 19 + .../clients/abe/model_pathenum_path_enum.go | 19 + ...d_mask.go => model_protobuf_field_mask.go} | 7 +- ...message.go => model_sub_string_message.go} | 7 +- examples/clients/abe/nested_deep_enum.go | 15 - examples/clients/abe/pathenum_path_enum.go | 14 - .../abe/{api_response.go => response.go} | 14 +- .../clients/echo/.swagger-codegen/VERSION | 1 + examples/clients/echo/BUILD.bazel | 15 +- examples/clients/echo/api/swagger.yaml | 441 +++ examples/clients/echo/api_client.go | 164 - examples/clients/echo/api_echo_service.go | 852 +++++ examples/clients/echo/client.go | 464 +++ examples/clients/echo/configuration.go | 73 +- examples/clients/echo/echo_service_api.go | 541 --- ...mbedded.go => model_examplepb_embedded.go} | 9 +- ...e.go => model_examplepb_simple_message.go} | 18 +- .../echo/{api_response.go => response.go} | 15 +- .../responsebody/.swagger-codegen/VERSION | 1 + examples/clients/responsebody/BUILD.bazel | 23 +- .../clients/responsebody/api/swagger.yaml | 110 + examples/clients/responsebody/api_client.go | 164 - .../responsebody/api_response_body_service.go | 290 ++ examples/clients/responsebody/client.go | 464 +++ .../clients/responsebody/configuration.go | 73 +- ...xamplepbRepeatedResponseBodyOutResponse.md | 2 +- .../docs/ExamplepbResponseBodyOut.md | 2 +- .../docs/ResponseBodyServiceApi.md | 27 +- .../examplepb_response_body_message.go | 18 - ...xamplepb_response_body_message_response.go | 16 - .../examplepb_response_body_req.go | 16 - ...l_examplepb_repeated_response_body_out.go} | 8 +- ...pb_repeated_response_body_out_response.go} | 11 +- ...el_examplepb_repeated_response_strings.go} | 8 +- ...o => model_examplepb_response_body_out.go} | 10 +- ...l_examplepb_response_body_out_response.go} | 8 +- .../model_response_response_type.go | 19 + .../{api_response.go => response.go} | 15 +- .../responsebody/response_body_service_api.go | 219 -- .../responsebody/response_response_type.go | 14 - .../unannotatedecho/.swagger-codegen/VERSION | 1 + examples/clients/unannotatedecho/BUILD.bazel | 13 +- .../clients/unannotatedecho/api/swagger.yaml | 135 + .../clients/unannotatedecho/api_client.go | 164 - .../api_unannotated_echo_service.go | 412 +++ examples/clients/unannotatedecho/client.go | 464 +++ .../clients/unannotatedecho/configuration.go | 73 +- ...l_examplepb_unannotated_simple_message.go} | 10 +- .../{api_response.go => response.go} | 15 +- .../unannotated_echo_service_api.go | 290 -- examples/integration/client_test.go | 176 +- examples/integration/fieldmask_test.go | 20 + examples/integration/integration_test.go | 55 + examples/integration/proto_error_test.go | 15 + .../proto/examplepb/a_bit_of_everything.pb.go | 442 +-- .../proto/examplepb/a_bit_of_everything.proto | 1 - .../a_bit_of_everything.swagger.json | 3 - go.mod | 3 +- go.sum | 7 +- repositories.bzl | 39 +- 87 files changed, 10880 insertions(+), 4895 deletions(-) create mode 100644 examples/clients/abe/.swagger-codegen/VERSION delete mode 100644 examples/clients/abe/a_bit_of_everything_service_api.go create mode 100644 examples/clients/abe/api/swagger.yaml create mode 100644 examples/clients/abe/api_a_bit_of_everything_service.go create mode 100644 examples/clients/abe/api_camel_case_service_name.go delete mode 100644 examples/clients/abe/api_client.go create mode 100644 examples/clients/abe/api_echo_rpc.go delete mode 100644 examples/clients/abe/camel_case_service_name_api.go create mode 100644 examples/clients/abe/client.go delete mode 100644 examples/clients/abe/echo_rpc_api.go delete mode 100644 examples/clients/abe/echo_service_api.go delete mode 100644 examples/clients/abe/examplepb_numeric_enum.go delete mode 100644 examples/clients/abe/examplepb_update_v2_request.go delete mode 100644 examples/clients/abe/message_path_enum_nested_path_enum.go rename examples/clients/abe/{a_bit_of_everything_nested.go => model_a_bit_of_everything_nested.go} (71%) rename examples/clients/abe/{examplepb_a_bit_of_everything.go => model_examplepb_a_bit_of_everything.go} (77%) rename examples/clients/abe/{examplepb_a_bit_of_everything_repeated.go => model_examplepb_a_bit_of_everything_repeated.go} (92%) rename examples/clients/abe/{examplepb_body.go => model_examplepb_body.go} (69%) create mode 100644 examples/clients/abe/model_examplepb_numeric_enum.go create mode 100644 examples/clients/abe/model_examplepb_update_v2_request.go create mode 100644 examples/clients/abe/model_message_path_enum_nested_path_enum.go create mode 100644 examples/clients/abe/model_nested_deep_enum.go create mode 100644 examples/clients/abe/model_pathenum_path_enum.go rename examples/clients/abe/{protobuf_field_mask.go => model_protobuf_field_mask.go} (98%) rename examples/clients/abe/{sub_string_message.go => model_sub_string_message.go} (69%) delete mode 100644 examples/clients/abe/nested_deep_enum.go delete mode 100644 examples/clients/abe/pathenum_path_enum.go rename examples/clients/abe/{api_response.go => response.go} (77%) create mode 100644 examples/clients/echo/.swagger-codegen/VERSION create mode 100644 examples/clients/echo/api/swagger.yaml delete mode 100644 examples/clients/echo/api_client.go create mode 100644 examples/clients/echo/api_echo_service.go create mode 100644 examples/clients/echo/client.go delete mode 100644 examples/clients/echo/echo_service_api.go rename examples/clients/echo/{examplepb_embedded.go => model_examplepb_embedded.go} (70%) rename examples/clients/echo/{examplepb_simple_message.go => model_examplepb_simple_message.go} (67%) rename examples/clients/echo/{api_response.go => response.go} (75%) create mode 100644 examples/clients/responsebody/.swagger-codegen/VERSION create mode 100644 examples/clients/responsebody/api/swagger.yaml delete mode 100644 examples/clients/responsebody/api_client.go create mode 100644 examples/clients/responsebody/api_response_body_service.go create mode 100644 examples/clients/responsebody/client.go delete mode 100644 examples/clients/responsebody/examplepb_response_body_message.go delete mode 100644 examples/clients/responsebody/examplepb_response_body_message_response.go delete mode 100644 examples/clients/responsebody/examplepb_response_body_req.go rename examples/clients/responsebody/{examplepb_repeated_response_body_out.go => model_examplepb_repeated_response_body_out.go} (72%) rename examples/clients/responsebody/{examplepb_repeated_response_body_out_response.go => model_examplepb_repeated_response_body_out_response.go} (62%) rename examples/clients/responsebody/{examplepb_repeated_response_strings.go => model_examplepb_repeated_response_strings.go} (70%) rename examples/clients/responsebody/{examplepb_response_body_out.go => model_examplepb_response_body_out.go} (54%) rename examples/clients/responsebody/{examplepb_response_body_out_response.go => model_examplepb_response_body_out_response.go} (69%) create mode 100644 examples/clients/responsebody/model_response_response_type.go rename examples/clients/responsebody/{api_response.go => response.go} (76%) delete mode 100644 examples/clients/responsebody/response_body_service_api.go delete mode 100644 examples/clients/responsebody/response_response_type.go create mode 100644 examples/clients/unannotatedecho/.swagger-codegen/VERSION create mode 100644 examples/clients/unannotatedecho/api/swagger.yaml delete mode 100644 examples/clients/unannotatedecho/api_client.go create mode 100644 examples/clients/unannotatedecho/api_unannotated_echo_service.go create mode 100644 examples/clients/unannotatedecho/client.go rename examples/clients/unannotatedecho/{examplepb_unannotated_simple_message.go => model_examplepb_unannotated_simple_message.go} (84%) rename examples/clients/unannotatedecho/{api_response.go => response.go} (79%) delete mode 100644 examples/clients/unannotatedecho/unannotated_echo_service_api.go diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 5e555123263..a6a2f688857 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,32 +1,35 @@ FROM golang:1.13.1 -## Warm apt cache -RUN apt-get update +# Warm apt cache +RUN apt-get update && \ + apt-get install -y wget unzip \ + openjdk-11-jre \ + bzip2 # Install swagger-codegen -ENV SWAGGER_CODEGEN_VERSION=2.2.2 -RUN apt-get install -y openjdk-11-jre wget && \ - wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ - -O /usr/local/bin/swagger-codegen-cli.jar && \ - apt-get remove -y wget -ENV SWAGGER_CODEGEN="java -jar /usr/local/bin/swagger-codegen-cli.jar" +ENV SWAGGER_CODEGEN_VERSION=2.4.8 +RUN wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ + -O /usr/local/bin/swagger-codegen-cli.jar + +# Wrap the jar for swagger-codgen +RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ + chmod +x /usr/local/bin/swagger-codegen # Install protoc ENV PROTOC_VERSION=3.9.2 -RUN apt-get install -y wget unzip && \ - wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ +RUN wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ - rm -f /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ - apt-get remove -y unzip wget + rm -f /protoc-${PROTOC_VERSION}-linux-x86_64.zip # Install node, used by NVM ENV NODE_VERSION=v10.16.3 ENV NVM_VERSION=v0.35.0 -RUN apt-get install -y wget bzip2 && \ - wget -qO- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash && \ - apt-get remove -y wget +RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash # Clean up RUN apt-get autoremove -y && \ + apt-get remove -y wget \ + unzip \ + bzip2 && \ rm -rf /var/lib/apt/lists/* diff --git a/.circleci/config.yml b/.circleci/config.yml index 5d2cddb6c26..f9554d0dc95 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -37,7 +37,7 @@ jobs: steps: - checkout - run: make realclean - - run: make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}" # Set in Docker image + - run: make examples - run: go mod tidy - run: git diff --exit-code lint: diff --git a/Makefile b/Makefile index 0ee29234c36..a591c77baaa 100644 --- a/Makefile +++ b/Makefile @@ -83,38 +83,46 @@ EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) EXAMPLE_CLIENT_DIR=examples/clients ECHO_EXAMPLE_SPEC=examples/proto/examplepb/echo_service.swagger.json -ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/api_client.go \ - $(EXAMPLE_CLIENT_DIR)/echo/api_response.go \ +ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \ + $(EXAMPLE_CLIENT_DIR)/echo/response.go \ $(EXAMPLE_CLIENT_DIR)/echo/configuration.go \ - $(EXAMPLE_CLIENT_DIR)/echo/echo_service_api.go \ - $(EXAMPLE_CLIENT_DIR)/echo/examplepb_simple_message.go \ - $(EXAMPLE_CLIENT_DIR)/echo/examplepb_embedded.go + $(EXAMPLE_CLIENT_DIR)/echo/api_echo_service.go \ + $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_simple_message.go \ + $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_embedded.go ABE_EXAMPLE_SPEC=examples/proto/examplepb/a_bit_of_everything.swagger.json -ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/a_bit_of_everything_nested.go \ - $(EXAMPLE_CLIENT_DIR)/abe/a_bit_of_everything_service_api.go \ - $(EXAMPLE_CLIENT_DIR)/abe/api_client.go \ - $(EXAMPLE_CLIENT_DIR)/abe/api_response.go \ - $(EXAMPLE_CLIENT_DIR)/abe/camel_case_service_name_api.go \ +ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/model_a_bit_of_everything_nested.go \ + $(EXAMPLE_CLIENT_DIR)/abe/api_a_bit_of_everything_service.go \ + $(EXAMPLE_CLIENT_DIR)/abe/client.go \ + $(EXAMPLE_CLIENT_DIR)/abe/api_camel_case_service_name.go \ $(EXAMPLE_CLIENT_DIR)/abe/configuration.go \ - $(EXAMPLE_CLIENT_DIR)/abe/echo_rpc_api.go \ - $(EXAMPLE_CLIENT_DIR)/abe/echo_service_api.go \ - $(EXAMPLE_CLIENT_DIR)/abe/examplepb_a_bit_of_everything.go \ - $(EXAMPLE_CLIENT_DIR)/abe/examplepb_body.go \ - $(EXAMPLE_CLIENT_DIR)/abe/examplepb_numeric_enum.go \ - $(EXAMPLE_CLIENT_DIR)/abe/nested_deep_enum.go \ - $(EXAMPLE_CLIENT_DIR)/abe/sub_string_message.go + $(EXAMPLE_CLIENT_DIR)/abe/api_echo_rpc.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_a_bit_of_everything_repeated.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_body.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_numeric_enum.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_examplepb_update_v2_request.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_message_path_enum_nested_path_enum.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_nested_deep_enum.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_pathenum_path_enum.go \ + $(EXAMPLE_CLIENT_DIR)/abe/model_protobuf_field_mask.go \ + $(EXAMPLE_CLIENT_DIR)/abe/response.go UNANNOTATED_ECHO_EXAMPLE_SPEC=examples/proto/examplepb/unannotated_echo_service.swagger.json -UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_client.go \ - $(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_response.go \ +UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/client.go \ + $(EXAMPLE_CLIENT_DIR)/unannotatedecho/response.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/configuration.go \ - $(EXAMPLE_CLIENT_DIR)/unannotatedecho/examplepb_unannotated_simple_message.go \ - $(EXAMPLE_CLIENT_DIR)/unannotatedecho/unannotated_echo_service_api.go + $(EXAMPLE_CLIENT_DIR)/unannotatedecho/model_examplepb_unannotated_simple_message.go \ + $(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_unannotated_echo_service.go RESPONSE_BODY_EXAMPLE_SPEC=examples/proto/examplepb/response_body_service.swagger.json -RESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/api_client.go \ - $(EXAMPLE_CLIENT_DIR)/responsebody/api_response.go \ +RESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/client.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/response.go \ $(EXAMPLE_CLIENT_DIR)/responsebody/configuration.go \ - $(EXAMPLE_CLIENT_DIR)/responsebody/examplepb_response_body.go \ - $(EXAMPLE_CLIENT_DIR)/responsebody/response_body_service_api.go + $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_body_out_response.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_repeated_response_strings.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/model_examplepb_response_body_out_response.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/model_response_response_type.go \ + $(EXAMPLE_CLIENT_DIR)/responsebody/api_response_body_service.go EXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) SWAGGER_CODEGEN=swagger-codegen diff --git a/WORKSPACE b/WORKSPACE index 280712e741b..7430c6bc260 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -4,10 +4,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "8df59f11fb697743cbb3f26cfb8750395f30471e9eabde0d174c3aebc7a1cd39", + sha256 = "513c12397db1bc9aa46dd62f02dd94b49a9b5d17444d49b5a04c5a89f3053c1c", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/0.19.1/rules_go-0.19.1.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/0.19.1/rules_go-0.19.1.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.19.5/rules_go-v0.19.5.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.19.5/rules_go-v0.19.5.tar.gz", ], ) diff --git a/examples/clients/abe/.swagger-codegen/VERSION b/examples/clients/abe/.swagger-codegen/VERSION new file mode 100644 index 00000000000..752a79ef362 --- /dev/null +++ b/examples/clients/abe/.swagger-codegen/VERSION @@ -0,0 +1 @@ +2.4.8 \ No newline at end of file diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index 4d3c3546e93..d64c856782d 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -5,31 +5,31 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = [ - "a_bit_of_everything_nested.go", - "a_bit_of_everything_service_api.go", - "api_client.go", - "api_response.go", - "camel_case_service_name_api.go", + "api_a_bit_of_everything_service.go", + "api_camel_case_service_name.go", + "api_echo_rpc.go", + "client.go", "configuration.go", - "echo_rpc_api.go", - "echo_service_api.go", "enum_helper.go", - "examplepb_a_bit_of_everything.go", - "examplepb_a_bit_of_everything_repeated.go", - "examplepb_body.go", - "examplepb_numeric_enum.go", - "examplepb_update_v2_request.go", - "message_path_enum_nested_path_enum.go", - "nested_deep_enum.go", - "pathenum_path_enum.go", - "protobuf_field_mask.go", - "sub_string_message.go", + "model_a_bit_of_everything_nested.go", + "model_examplepb_a_bit_of_everything.go", + "model_examplepb_a_bit_of_everything_repeated.go", + "model_examplepb_body.go", + "model_examplepb_numeric_enum.go", + "model_examplepb_update_v2_request.go", + "model_message_path_enum_nested_path_enum.go", + "model_nested_deep_enum.go", + "model_pathenum_path_enum.go", + "model_protobuf_field_mask.go", + "model_sub_string_message.go", + "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe", deps = [ "//examples/proto/examplepb:go_default_library", "//examples/proto/pathenum:go_default_library", "//runtime:go_default_library", - "@com_github_go_resty_resty//:go_default_library", + "@com_github_antihax_optional//:go_default_library", + "@org_golang_x_oauth2//:go_default_library", ], ) diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go deleted file mode 100644 index ec3f4c49886..00000000000 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ /dev/null @@ -1,1660 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "net/url" - "strings" - "time" - "encoding/json" - "fmt" -) - -type ABitOfEverythingServiceApi struct { - Configuration *Configuration -} - -func NewABitOfEverythingServiceApi() *ABitOfEverythingServiceApi { - configuration := NewConfiguration() - return &ABitOfEverythingServiceApi{ - Configuration: configuration, - } -} - -func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythingServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &ABitOfEverythingServiceApi{ - Configuration: configuration, - } -} - -/** - * - * - * @param singleNestedName name is nested field. - * @param floatValue Float value field - * @param singleNestedAmount - * @param singleNestedOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param uuid - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param bytesValue - * @param uint32Value - * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param pathEnumValue - * @param nestedPathEnumValue - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param repeatedStringValue - * @param oneofString - * @param nonConventionalNameValue - * @param timestampValue - * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedStringAnnotation Repeated string title. Repeated string description. - * @param nestedAnnotationAmount - * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param int64OverrideType - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) CheckGetQueryParams(singleNestedName string, floatValue float32, singleNestedAmount int64, singleNestedOk string, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationAmount int64, nestedAnnotationOk string, int64OverrideType int64) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) - localVarQueryParams.Add("single_nested.ok", a.Configuration.APIClient.ParameterToString(singleNestedOk, "")) - localVarQueryParams.Add("uuid", a.Configuration.APIClient.ParameterToString(uuid, "")) - localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) - localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) - localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) - localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) - localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) - localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) - localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) - localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) - localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) - localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) - localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) - localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) - localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) - localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) - localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) - localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) - localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) - localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) - - localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) - localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) - localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - - var repeatedEnumAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) - - localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) - - localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) - localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) - localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "CheckGetQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param singleNestedOk DeepEnum description. - * @param floatValue Float value field - * @param singleNestedName name is nested field. - * @param singleNestedAmount - * @param uuid - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param bytesValue - * @param uint32Value - * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param pathEnumValue - * @param nestedPathEnumValue - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param repeatedStringValue - * @param oneofString - * @param nonConventionalNameValue - * @param timestampValue - * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedStringAnnotation Repeated string title. Repeated string description. - * @param nestedAnnotationName name is nested field. - * @param nestedAnnotationAmount - * @param int64OverrideType - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) CheckNestedEnumGetQueryParams(singleNestedOk string, floatValue float32, singleNestedName string, singleNestedAmount int64, uuid string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, int64OverrideType int64) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.ok"+"}", fmt.Sprintf("%v", singleNestedOk), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("single_nested.name", a.Configuration.APIClient.ParameterToString(singleNestedName, "")) - localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) - localVarQueryParams.Add("uuid", a.Configuration.APIClient.ParameterToString(uuid, "")) - localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) - localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) - localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) - localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) - localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) - localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) - localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) - localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) - localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) - localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) - localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) - localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) - localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) - localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) - localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) - localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) - localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) - localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) - - localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) - localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) - localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - - var repeatedEnumAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) - - localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) - - localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) - localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) - localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "CheckNestedEnumGetQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param stringValue - * @param body - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) CheckPostQueryParams(stringValue string, body ABitOfEverythingNested) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/params/post/{string_value}" - localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "CheckPostQueryParams", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Create a new ABitOfEverything - * This API creates a new ABitOfEverything - * - * @param floatValue Float value field - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param uint32Value - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param nonConventionalNameValue - * @param enumValue - * @param pathEnumValue - * @param nestedPathEnumValue - * @param enumValueAnnotation Numeric enum description. - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" - localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint64_value"+"}", fmt.Sprintf("%v", uint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int32_value"+"}", fmt.Sprintf("%v", int32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed64_value"+"}", fmt.Sprintf("%v", fixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed32_value"+"}", fmt.Sprintf("%v", fixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"bool_value"+"}", fmt.Sprintf("%v", boolValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint32_value"+"}", fmt.Sprintf("%v", uint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed32_value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed64_value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Create", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param body - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) CreateBody(body ExamplepbABitOfEverything) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "CreateBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param singleNestedName name is nested field. - * @param body - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) DeepPathEcho(singleNestedName string, body ExamplepbABitOfEverything) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{single_nested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "DeepPathEcho", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) Delete(uuid string) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Delete") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Delete", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/errorwithdetails" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "ErrorWithDetails", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param id - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body ExamplepbBody) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/withbody/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetMessageWithBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @param floatValue Float value field - * @param singleNestedName name is nested field. - * @param singleNestedAmount - * @param singleNestedOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param bytesValue - * @param uint32Value - * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param pathEnumValue - * @param nestedPathEnumValue - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param repeatedStringValue - * @param oneofString - * @param nonConventionalNameValue - * @param timestampValue - * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedEnumAnnotation Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param enumValueAnnotation Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param repeatedStringAnnotation Repeated string title. Repeated string description. - * @param nestedAnnotationName name is nested field. - * @param nestedAnnotationAmount - * @param nestedAnnotationOk DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param int64OverrideType - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, floatValue float32, singleNestedName string, singleNestedAmount int64, singleNestedOk string, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, pathEnumValue string, nestedPathEnumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string, repeatedEnumAnnotation []string, enumValueAnnotation string, repeatedStringAnnotation []string, nestedAnnotationName string, nestedAnnotationAmount int64, nestedAnnotationOk string, int64OverrideType int64) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/query/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("single_nested.name", a.Configuration.APIClient.ParameterToString(singleNestedName, "")) - localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) - localVarQueryParams.Add("single_nested.ok", a.Configuration.APIClient.ParameterToString(singleNestedOk, "")) - localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) - localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) - localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) - localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) - localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) - localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) - localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) - localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) - localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) - localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) - localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) - localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) - localVarQueryParams.Add("path_enum_value", a.Configuration.APIClient.ParameterToString(pathEnumValue, "")) - localVarQueryParams.Add("nested_path_enum_value", a.Configuration.APIClient.ParameterToString(nestedPathEnumValue, "")) - localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) - localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) - localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) - localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) - - localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) - localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) - localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - - var repeatedEnumAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_enum_annotation", a.Configuration.APIClient.ParameterToString(repeatedEnumAnnotation, repeatedEnumAnnotationCollectionFormat)) - - localVarQueryParams.Add("enum_value_annotation", a.Configuration.APIClient.ParameterToString(enumValueAnnotation, "")) - var repeatedStringAnnotationCollectionFormat = "multi" - localVarQueryParams.Add("repeated_string_annotation", a.Configuration.APIClient.ParameterToString(repeatedStringAnnotation, repeatedStringAnnotationCollectionFormat)) - - localVarQueryParams.Add("nested_annotation.name", a.Configuration.APIClient.ParameterToString(nestedAnnotationName, "")) - localVarQueryParams.Add("nested_annotation.amount", a.Configuration.APIClient.ParameterToString(nestedAnnotationAmount, "")) - localVarQueryParams.Add("nested_annotation.ok", a.Configuration.APIClient.ParameterToString(nestedAnnotationOk, "")) - localVarQueryParams.Add("int64_override_type", a.Configuration.APIClient.ParameterToString(int64OverrideType, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetQuery", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param pathRepeatedFloatValue repeated values. they are comma-separated in path - * @param pathRepeatedDoubleValue - * @param pathRepeatedInt64Value - * @param pathRepeatedUint64Value - * @param pathRepeatedInt32Value - * @param pathRepeatedFixed64Value - * @param pathRepeatedFixed32Value - * @param pathRepeatedBoolValue - * @param pathRepeatedStringValue - * @param pathRepeatedBytesValue - * @param pathRepeatedUint32Value - * @param pathRepeatedEnumValue - * @param pathRepeatedSfixed32Value - * @param pathRepeatedSfixed64Value - * @param pathRepeatedSint32Value - * @param pathRepeatedSint64Value - * @return *ExamplepbABitOfEverythingRepeated - */ -func (a ABitOfEverythingServiceApi) GetRepeatedQuery(pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (*ExamplepbABitOfEverythingRepeated, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_float_value"+"}", fmt.Sprintf("%v", pathRepeatedFloatValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_double_value"+"}", fmt.Sprintf("%v", pathRepeatedDoubleValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int64_value"+"}", fmt.Sprintf("%v", pathRepeatedInt64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint64_value"+"}", fmt.Sprintf("%v", pathRepeatedUint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int32_value"+"}", fmt.Sprintf("%v", pathRepeatedInt32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bool_value"+"}", fmt.Sprintf("%v", pathRepeatedBoolValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_string_value"+"}", fmt.Sprintf("%v", pathRepeatedStringValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bytes_value"+"}", fmt.Sprintf("%v", pathRepeatedBytesValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint32_value"+"}", fmt.Sprintf("%v", pathRepeatedUint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_enum_value"+"}", fmt.Sprintf("%v", pathRepeatedEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint32_value"+"}", fmt.Sprintf("%v", pathRepeatedSint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint64_value"+"}", fmt.Sprintf("%v", pathRepeatedSint64Value), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverythingRepeated) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetRepeatedQuery", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) Lookup(uuid string) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Lookup", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param name - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/postwithemptybody/{name}" - localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "PostWithEmptyBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) Timeout() (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/timeout" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Timeout", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Put") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Update", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param abeUuid - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) UpdateV2(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Put") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "UpdateV2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param abeUuid - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) UpdateV22(abeUuid string, body ExamplepbABitOfEverything) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Patch") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "UpdateV22", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param abeUuid - * @param body - * @return *interface{} - */ -func (a ABitOfEverythingServiceApi) UpdateV23(abeUuid string, body ExamplepbUpdateV2Request) (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Patch") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "UpdateV23", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml new file mode 100644 index 00000000000..bcb92338096 --- /dev/null +++ b/examples/clients/abe/api/swagger.yaml @@ -0,0 +1,2202 @@ +--- +swagger: "2.0" +info: + version: "1.0" + title: "A Bit of Everything" + contact: + name: "gRPC-Gateway project" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + email: "none@example.com" + license: + name: "BSD 3-Clause License" + url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt" + x-something-something: "yadda" +schemes: +- "http" +- "https" +- "wss" +consumes: +- "application/json" +- "application/x-foo-mime" +produces: +- "application/json" +- "application/x-foo-mime" +security: +- ApiKeyAuth: [] + BasicAuth: [] +- ApiKeyAuth: [] + OAuth2: + - "read" + - "write" +paths: + /v1/example/a_bit_of_everything: + post: + tags: + - "ABitOfEverythingService" + operationId: "CreateBody" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/echo/{value}: + get: + tags: + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo" + parameters: + - name: "value" + in: "path" + required: true + type: "string" + x-exportParamName: "Value" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/subStringMessage" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "integer" + format: "integer" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 503: + description: "Returned when the resource is temporarily unavailable." + schema: {} + x-number: 100 + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + /v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}: + get: + tags: + - "ABitOfEverythingService" + operationId: "CheckNestedEnumGetQueryParams" + parameters: + - name: "single_nested.ok" + in: "path" + description: "DeepEnum description." + required: true + type: "string" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + - name: "single_nested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "single_nested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "uuid" + in: "query" + required: false + type: "string" + x-exportParamName: "Uuid" + x-optionalDataType: "String" + - name: "float_value" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "double_value" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "bool_value" + in: "query" + required: false + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "string_value" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytes_value" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enum_value" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "path_enum_value" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nested_path_enum_value" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeated_string_value" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneof_string" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestamp_value" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeated_enum_value" + in: "query" + description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeated_enum_annotation" + in: "query" + description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enum_value_annotation" + in: "query" + description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ + \ means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeated_string_annotation" + in: "query" + description: "Repeated string title. Repeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nested_annotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nested_annotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "int64_override_type" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/params/get/{single_nested.name}: + get: + tags: + - "ABitOfEverythingService" + operationId: "CheckGetQueryParams" + parameters: + - name: "single_nested.name" + in: "path" + description: "name is nested field." + required: true + type: "string" + x-exportParamName: "SingleNestedName" + - name: "single_nested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "single_nested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "uuid" + in: "query" + required: false + type: "string" + x-exportParamName: "Uuid" + x-optionalDataType: "String" + - name: "float_value" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "double_value" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "bool_value" + in: "query" + required: false + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "string_value" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytes_value" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enum_value" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "path_enum_value" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nested_path_enum_value" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeated_string_value" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneof_string" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestamp_value" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeated_enum_value" + in: "query" + description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeated_enum_annotation" + in: "query" + description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enum_value_annotation" + in: "query" + description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ + \ means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeated_string_annotation" + in: "query" + description: "Repeated string title. Repeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nested_annotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nested_annotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64_override_type" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/params/post/{string_value}: + post: + tags: + - "ABitOfEverythingService" + operationId: "CheckPostQueryParams" + parameters: + - name: "string_value" + in: "path" + required: true + type: "string" + x-exportParamName: "StringValue" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/ABitOfEverythingNested" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/query/{uuid}: + get: + tags: + - "ABitOfEverythingService" + operationId: "GetQuery" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + - name: "single_nested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "single_nested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "single_nested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "float_value" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "double_value" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64_value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "bool_value" + in: "query" + required: false + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "string_value" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytes_value" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32_value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enum_value" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "path_enum_value" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nested_path_enum_value" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32_value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64_value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeated_string_value" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneof_string" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestamp_value" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeated_enum_value" + in: "query" + description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeated_enum_annotation" + in: "query" + description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enum_value_annotation" + in: "query" + description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ + \ means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeated_string_annotation" + in: "query" + description: "Repeated string title. Repeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nested_annotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nested_annotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nested_annotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64_override_type" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + security: [] + externalDocs: + description: "Find out more about GetQuery" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + deprecated: true + ? /v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation} + : post: + tags: + - "ABitOfEverythingService" + summary: "Create a new ABitOfEverything" + description: "This API creates a new ABitOfEverything" + operationId: "Create" + parameters: + - name: "float_value" + in: "path" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "double_value" + in: "path" + required: true + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + - name: "int64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + - name: "uint64_value" + in: "path" + required: true + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + - name: "int32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + - name: "fixed64_value" + in: "path" + required: true + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + - name: "fixed32_value" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + - name: "bool_value" + in: "path" + required: true + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + - name: "string_value" + in: "path" + required: true + type: "string" + x-exportParamName: "StringValue" + - name: "uint32_value" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + - name: "sfixed32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + - name: "sfixed64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + - name: "sint32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + - name: "sint64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + - name: "nonConventionalNameValue" + in: "path" + required: true + type: "string" + x-exportParamName: "NonConventionalNameValue" + - name: "enum_value" + in: "path" + required: true + type: "string" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + - name: "path_enum_value" + in: "path" + required: true + type: "string" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + - name: "nested_path_enum_value" + in: "path" + required: true + type: "string" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + - name: "enum_value_annotation" + in: "path" + description: "Numeric enum description." + required: true + type: "string" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/{single_nested.name}: + post: + tags: + - "ABitOfEverythingService" + operationId: "DeepPathEcho" + parameters: + - name: "single_nested.name" + in: "path" + description: "name is nested field." + required: true + type: "string" + x-exportParamName: "SingleNestedName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v1/example/a_bit_of_everything/{uuid}: + get: + tags: + - "ABitOfEverythingService" + operationId: "Lookup" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + put: + tags: + - "ABitOfEverythingService" + operationId: "Update" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + delete: + tags: + - "ABitOfEverythingService" + operationId: "Delete" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + security: + - ApiKeyAuth: [] + OAuth2: + - "read" + - "write" + x-irreversible: true + ? /v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value} + : get: + tags: + - "ABitOfEverythingService" + operationId: "GetRepeatedQuery" + parameters: + - name: "path_repeated_float_value" + in: "path" + description: "repeated values. they are comma-separated in path" + required: true + type: "array" + items: + type: "number" + format: "float" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedFloatValue" + - name: "path_repeated_double_value" + in: "path" + required: true + type: "array" + items: + type: "number" + format: "double" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedDoubleValue" + - name: "path_repeated_int64_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "int64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedInt64Value" + - name: "path_repeated_uint64_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "uint64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedUint64Value" + - name: "path_repeated_int32_value" + in: "path" + required: true + type: "array" + items: + type: "integer" + format: "int32" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedInt32Value" + - name: "path_repeated_fixed64_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "uint64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedFixed64Value" + - name: "path_repeated_fixed32_value" + in: "path" + required: true + type: "array" + items: + type: "integer" + format: "int64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedFixed32Value" + - name: "path_repeated_bool_value" + in: "path" + required: true + type: "array" + items: + type: "boolean" + format: "boolean" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedBoolValue" + - name: "path_repeated_string_value" + in: "path" + required: true + type: "array" + items: + type: "string" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedStringValue" + - name: "path_repeated_bytes_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedBytesValue" + - name: "path_repeated_uint32_value" + in: "path" + required: true + type: "array" + items: + type: "integer" + format: "int64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedUint32Value" + - name: "path_repeated_enum_value" + in: "path" + required: true + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedEnumValue" + - name: "path_repeated_sfixed32_value" + in: "path" + required: true + type: "array" + items: + type: "integer" + format: "int32" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedSfixed32Value" + - name: "path_repeated_sfixed64_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "int64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedSfixed64Value" + - name: "path_repeated_sint32_value" + in: "path" + required: true + type: "array" + items: + type: "integer" + format: "int32" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedSint32Value" + - name: "path_repeated_sint64_value" + in: "path" + required: true + type: "array" + items: + type: "string" + format: "int64" + collectionFormat: "csv" + minItems: 1 + x-exportParamName: "PathRepeatedSint64Value" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverythingRepeated" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/a_bit_of_everything/{abe.uuid}: + put: + tags: + - "ABitOfEverythingService" + operationId: "UpdateV2" + parameters: + - name: "abe.uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "AbeUuid" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + patch: + tags: + - "ABitOfEverythingService" + operationId: "UpdateV22" + parameters: + - name: "abe.uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "AbeUuid" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/echo: + get: + tags: + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo3" + parameters: + - name: "value" + in: "query" + required: false + type: "string" + x-exportParamName: "Value" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/subStringMessage" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "integer" + format: "integer" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 503: + description: "Returned when the resource is temporarily unavailable." + schema: {} + x-number: 100 + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + post: + tags: + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo2" + parameters: + - in: "body" + name: "body" + required: true + schema: + type: "string" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/subStringMessage" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "integer" + format: "integer" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 503: + description: "Returned when the resource is temporarily unavailable." + schema: {} + x-number: 100 + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + /v2/example/empty: + get: + tags: + - "camelCaseServiceName" + summary: "Create a new ABitOfEverything" + description: "This API creates a new ABitOfEverything" + operationId: "Empty" + parameters: [] + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/errorwithdetails: + get: + tags: + - "ABitOfEverythingService" + operationId: "ErrorWithDetails" + parameters: [] + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/postwithemptybody/{name}: + post: + tags: + - "ABitOfEverythingService" + operationId: "PostWithEmptyBody" + parameters: + - name: "name" + in: "path" + required: true + type: "string" + x-exportParamName: "Name" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbBody" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/timeout: + get: + tags: + - "ABitOfEverythingService" + operationId: "Timeout" + parameters: [] + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2/example/withbody/{id}: + post: + tags: + - "ABitOfEverythingService" + operationId: "GetMessageWithBody" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + x-exportParamName: "Id" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbBody" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + /v2a/example/a_bit_of_everything/{abe.uuid}: + patch: + tags: + - "ABitOfEverythingService" + operationId: "UpdateV23" + parameters: + - name: "abe.uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "AbeUuid" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbUpdateV2Request" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" +securityDefinitions: + ApiKeyAuth: + type: "apiKey" + name: "X-API-Key" + in: "header" + x-amazon-apigateway-authorizer: + authorizerResultTtlInSeconds: 60 + type: "token" + x-amazon-apigateway-authtype: "oauth2" + BasicAuth: + type: "basic" + OAuth2: + type: "oauth2" + authorizationUrl: "https://example.com/oauth/authorize" + tokenUrl: "https://example.com/oauth/token" + flow: "accessCode" + scopes: + admin: "Grants read and write access to administrative information" + read: "Grants read access" + write: "Grants write access" +definitions: + ABitOfEverythingNested: + type: "object" + properties: + name: + type: "string" + description: "name is nested field." + amount: + type: "integer" + format: "int64" + ok: + description: "DeepEnum description." + $ref: "#/definitions/NestedDeepEnum" + description: "Nested is nested type." + example: + ok: "TRUE" + MessagePathEnumNestedPathEnum: + type: "string" + enum: + - "GHI" + - "JKL" + default: "GHI" + NestedDeepEnum: + type: "string" + description: "DeepEnum is one or zero.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + enum: + - "FALSE" + - "TRUE" + default: "FALSE" + examplepbABitOfEverything: + type: "object" + required: + - "double_value" + - "int64_value" + - "uuid" + properties: + single_nested: + $ref: "#/definitions/ABitOfEverythingNested" + uuid: + type: "string" + minLength: 1 + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + float_value: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + double_value: + type: "number" + format: "double" + int64_value: + type: "string" + format: "int64" + uint64_value: + type: "string" + format: "uint64" + int32_value: + type: "integer" + format: "int32" + fixed64_value: + type: "string" + format: "uint64" + fixed32_value: + type: "integer" + format: "int64" + bool_value: + type: "boolean" + format: "boolean" + string_value: + type: "string" + bytes_value: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32_value: + type: "integer" + format: "int64" + enum_value: + $ref: "#/definitions/examplepbNumericEnum" + path_enum_value: + $ref: "#/definitions/pathenumPathEnum" + nested_path_enum_value: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32_value: + type: "integer" + format: "int32" + sfixed64_value: + type: "string" + format: "int64" + sint32_value: + type: "integer" + format: "int32" + sint64_value: + type: "string" + format: "int64" + repeated_string_value: + type: "array" + items: + type: "string" + oneof_empty: + type: "object" + properties: {} + oneof_string: + type: "string" + map_value: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mapped_string_value: + type: "object" + additionalProperties: + type: "string" + mapped_nested_value: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestamp_value: + type: "string" + format: "date-time" + repeated_enum_value: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeated_enum_annotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enum_value_annotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeated_string_annotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeated_nested_annotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nested_annotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64_override_type: + type: "integer" + format: "int64" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "A bit of everything" + description: "Intentionaly complicated message type to cover many features of\ + \ Protobuf." + example: + uuid: "0cf361e1-4b44-483d-a159-54dabdf7e814" + examplepbABitOfEverythingRepeated: + type: "object" + properties: + path_repeated_float_value: + type: "array" + title: "repeated values. they are comma-separated in path" + items: + type: "number" + format: "float" + path_repeated_double_value: + type: "array" + items: + type: "number" + format: "double" + path_repeated_int64_value: + type: "array" + items: + type: "string" + format: "int64" + path_repeated_uint64_value: + type: "array" + items: + type: "string" + format: "uint64" + path_repeated_int32_value: + type: "array" + items: + type: "integer" + format: "int32" + path_repeated_fixed64_value: + type: "array" + items: + type: "string" + format: "uint64" + path_repeated_fixed32_value: + type: "array" + items: + type: "integer" + format: "int64" + path_repeated_bool_value: + type: "array" + items: + type: "boolean" + format: "boolean" + path_repeated_string_value: + type: "array" + items: + type: "string" + path_repeated_bytes_value: + type: "array" + items: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + path_repeated_uint32_value: + type: "array" + items: + type: "integer" + format: "int64" + path_repeated_enum_value: + type: "array" + items: + $ref: "#/definitions/examplepbNumericEnum" + path_repeated_sfixed32_value: + type: "array" + items: + type: "integer" + format: "int32" + path_repeated_sfixed64_value: + type: "array" + items: + type: "string" + format: "int64" + path_repeated_sint32_value: + type: "array" + items: + type: "integer" + format: "int32" + path_repeated_sint64_value: + type: "array" + items: + type: "string" + format: "int64" + title: "ABitOfEverythingRepeated is used to validate repeated path parameter functionality" + example: + path_repeated_bool_value: + - true + - true + - false + - true + path_repeated_int32_value: + - 1 + - 2 + - 3 + examplepbBody: + type: "object" + properties: + name: + type: "string" + examplepbNumericEnum: + type: "string" + description: "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE\ + \ means 1" + enum: + - "ZERO" + - "ONE" + default: "ZERO" + examplepbUpdateV2Request: + type: "object" + properties: + abe: + $ref: "#/definitions/examplepbABitOfEverything" + update_mask: + $ref: "#/definitions/protobufFieldMask" + title: "UpdateV2Request request for update includes the message and the update\ + \ mask" + pathenumPathEnum: + type: "string" + enum: + - "ABC" + - "DEF" + default: "ABC" + protobufFieldMask: + type: "object" + properties: + paths: + type: "array" + description: "The set of field mask paths." + items: + type: "string" + title: "`FieldMask` represents a set of symbolic field paths, for example:" + description: "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field\ + \ in some root message, `a` and `b`\nfields in the message found in `f`, and\ + \ `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify\ + \ a subset of fields that should be\nreturned by a get operation or modified\ + \ by an update operation.\nField masks also have a custom JSON encoding (see\ + \ below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection,\ + \ a response message or\nsub-message is filtered by the API to only contain\ + \ those fields as\nspecified in the mask. For example, if the mask in the previous\n\ + example is applied to a response message as follows:\n\n f {\n a : 22\n\ + \ b {\n d : 1\n x : 2\n }\n y : 13\n }\n \ + \ z: 8\n\nThe result will not contain specific values for fields x,y and z\n\ + (their value will be set to the default, and omitted in proto text\noutput):\n\ + \n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated\ + \ field is not allowed except at the last position of a\npaths string.\n\nIf\ + \ a FieldMask object is not present in a get operation, the\noperation applies\ + \ to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote\ + \ that a field mask does not necessarily apply to the\ntop-level response message.\ + \ In case of a REST get operation, the\nfield mask applies directly to the response,\ + \ but in case of a REST\nlist operation, the mask instead applies to each individual\ + \ message\nin the returned resource list. In case of a REST custom method,\n\ + other definitions may be used. Where the mask applies will be\nclearly documented\ + \ together with its declaration in the API. In\nany case, the effect on the\ + \ returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks\ + \ in Update Operations\n\nA field mask in update operations specifies which\ + \ fields of the\ntargeted resource are going to be updated. The API is required\n\ + to only change the values of the fields as specified in the mask\nand leave\ + \ the others untouched. If a resource is passed in to\ndescribe the updated\ + \ values, the API ignores the values of all\nfields not covered by the mask.\n\ + \nIf a repeated field is specified for an update operation, new values will\n\ + be appended to the existing repeated field in the target resource. Note that\n\ + a repeated field is only allowed in the last position of a `paths` string.\n\ + \nIf a sub-message is specified in the last position of the field mask for an\n\ + update operation, then new value will be merged into the existing sub-message\n\ + in the target resource.\n\nFor example, given the target message:\n\n f {\n\ + \ b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd\ + \ an update message:\n\n f {\n b {\n d: 10\n }\n c:\ + \ [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n\ + then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n\ + \ }\n c: [1, 2]\n }\n\nAn implementation may provide options to\ + \ override this default behavior for\nrepeated and message fields.\n\nIn order\ + \ to reset a field's value to the default, the field must\nbe in the mask and\ + \ set to the default value in the provided resource.\nHence, in order to reset\ + \ all fields of a resource, provide a default\ninstance of the resource and\ + \ set all fields in the mask, or do\nnot provide a mask as described below.\n\ + \nIf a field mask is not present on update, the operation applies to\nall fields\ + \ (as if a field mask of all fields has been specified).\nNote that in the presence\ + \ of schema evolution, this may mean that\nfields the client does not know and\ + \ has therefore not filled into\nthe request will be reset to their default.\ + \ If this is unwanted\nbehavior, a specific service may require a client to\ + \ always specify\na field mask, producing an error if not.\n\nAs with get operations,\ + \ the location of the resource which\ndescribes the updated values in the request\ + \ message depends on the\noperation kind. In any case, the effect of the field\ + \ mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP\ + \ REST\n\nThe HTTP kind of an update operation which uses a field mask must\n\ + be set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must\ + \ only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON,\ + \ a field mask is encoded as a single string where paths are\nseparated by a\ + \ comma. Fields name in each path are converted\nto/from lower-camel naming\ + \ conventions.\n\nAs an example, consider the following message declarations:\n\ + \n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n\ + \ message User {\n string display_name = 1;\n string address =\ + \ 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n \ + \ mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\ + \nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\ + \n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs\ + \ just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage\ + \ {\n oneof test_oneof {\n string name = 4;\n SubMessage\ + \ sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n\ + \ paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\ + \n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be\ + \ used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any\ + \ API method which has a FieldMask type field in the\nrequest should verify\ + \ the included field paths, and return an\n`INVALID_ARGUMENT` error if any path\ + \ is duplicated or unmappable." + subStringMessage: + type: "object" + properties: + value: + type: "string" + example: + value: "value" +externalDocs: + description: "More about gRPC-Gateway" + url: "https://github.com/grpc-ecosystem/grpc-gateway" +x-grpc-gateway-baz-list: +- "one" +- true +x-grpc-gateway-foo: "bar" diff --git a/examples/clients/abe/api_a_bit_of_everything_service.go b/examples/clients/abe/api_a_bit_of_everything_service.go new file mode 100644 index 00000000000..2bd1d972c20 --- /dev/null +++ b/examples/clients/abe/api_a_bit_of_everything_service.go @@ -0,0 +1,3054 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" + "github.com/antihax/optional" +) + +// Linger please +var ( + _ context.Context +) + +type ABitOfEverythingServiceApiService service + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param singleNestedName name is nested field. + * @param floatValue Float value field + * @param optional nil or *CheckGetQueryParamsOpts - Optional Parameters: + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Uuid" (optional.String) - + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + +@return ExamplepbABitOfEverything +*/ + +type CheckGetQueryParamsOpts struct { + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + Uuid optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 +} + +func (a *ABitOfEverythingServiceApiService) CheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, localVarOptionals *CheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("single_nested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { + localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) + } + localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nested_annotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param singleNestedOk DeepEnum description. + * @param floatValue Float value field + * @param optional nil or *CheckNestedEnumGetQueryParamsOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "Uuid" (optional.String) - + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "Int64OverrideType" (optional.Int64) - + +@return ExamplepbABitOfEverything +*/ + +type CheckNestedEnumGetQueryParamsOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + Uuid optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + Int64OverrideType optional.Int64 +} + +func (a *ABitOfEverythingServiceApiService) CheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, localVarOptionals *CheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.ok"+"}", fmt.Sprintf("%v", singleNestedOk), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("single_nested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { + localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) + } + localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nested_annotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param stringValue + * @param body + +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) CheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/post/{string_value}" + localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService Create a new ABitOfEverything +This API creates a new ABitOfEverything + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param floatValue Float value field + * @param doubleValue + * @param int64Value + * @param uint64Value + * @param int32Value + * @param fixed64Value + * @param fixed32Value + * @param boolValue + * @param stringValue + * @param uint32Value + * @param sfixed32Value + * @param sfixed64Value + * @param sint32Value + * @param sint64Value + * @param nonConventionalNameValue + * @param enumValue + * @param pathEnumValue + * @param nestedPathEnumValue + * @param enumValueAnnotation Numeric enum description. + +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) Create(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" + localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint64_value"+"}", fmt.Sprintf("%v", uint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int32_value"+"}", fmt.Sprintf("%v", int32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed64_value"+"}", fmt.Sprintf("%v", fixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed32_value"+"}", fmt.Sprintf("%v", fixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"bool_value"+"}", fmt.Sprintf("%v", boolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint32_value"+"}", fmt.Sprintf("%v", uint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed32_value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed64_value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) CreateBody(ctx context.Context, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param singleNestedName name is nested field. + * @param body + +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) DeepPathEcho(ctx context.Context, singleNestedName string, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{single_nested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuid + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) Delete(ctx context.Context, uuid string) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) ErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/errorwithdetails" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) GetMessageWithBody(ctx context.Context, id string, body ExamplepbBody) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/withbody/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuid + * @param floatValue Float value field + * @param optional nil or *GetQueryOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + +@return interface{} +*/ + +type GetQueryOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 +} + +func (a *ABitOfEverythingServiceApiService) GetQuery(ctx context.Context, uuid string, floatValue float32, localVarOptionals *GetQueryOpts) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/query/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("single_nested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("single_nested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nested_annotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nested_annotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param pathRepeatedFloatValue repeated values. they are comma-separated in path + * @param pathRepeatedDoubleValue + * @param pathRepeatedInt64Value + * @param pathRepeatedUint64Value + * @param pathRepeatedInt32Value + * @param pathRepeatedFixed64Value + * @param pathRepeatedFixed32Value + * @param pathRepeatedBoolValue + * @param pathRepeatedStringValue + * @param pathRepeatedBytesValue + * @param pathRepeatedUint32Value + * @param pathRepeatedEnumValue + * @param pathRepeatedSfixed32Value + * @param pathRepeatedSfixed64Value + * @param pathRepeatedSint32Value + * @param pathRepeatedSint64Value + +@return ExamplepbABitOfEverythingRepeated +*/ +func (a *ABitOfEverythingServiceApiService) GetRepeatedQuery(ctx context.Context, pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (ExamplepbABitOfEverythingRepeated, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverythingRepeated + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_float_value"+"}", fmt.Sprintf("%v", pathRepeatedFloatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_double_value"+"}", fmt.Sprintf("%v", pathRepeatedDoubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int64_value"+"}", fmt.Sprintf("%v", pathRepeatedInt64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint64_value"+"}", fmt.Sprintf("%v", pathRepeatedUint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int32_value"+"}", fmt.Sprintf("%v", pathRepeatedInt32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bool_value"+"}", fmt.Sprintf("%v", pathRepeatedBoolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_string_value"+"}", fmt.Sprintf("%v", pathRepeatedStringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bytes_value"+"}", fmt.Sprintf("%v", pathRepeatedBytesValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint32_value"+"}", fmt.Sprintf("%v", pathRepeatedUint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_enum_value"+"}", fmt.Sprintf("%v", pathRepeatedEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint32_value"+"}", fmt.Sprintf("%v", pathRepeatedSint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint64_value"+"}", fmt.Sprintf("%v", pathRepeatedSint64Value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if len(pathRepeatedFloatValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedFloatValue must have at least 1 elements") + } + if len(pathRepeatedDoubleValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedDoubleValue must have at least 1 elements") + } + if len(pathRepeatedInt64Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedInt64Value must have at least 1 elements") + } + if len(pathRepeatedUint64Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedUint64Value must have at least 1 elements") + } + if len(pathRepeatedInt32Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedInt32Value must have at least 1 elements") + } + if len(pathRepeatedFixed64Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedFixed64Value must have at least 1 elements") + } + if len(pathRepeatedFixed32Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedFixed32Value must have at least 1 elements") + } + if len(pathRepeatedBoolValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedBoolValue must have at least 1 elements") + } + if len(pathRepeatedStringValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedStringValue must have at least 1 elements") + } + if len(pathRepeatedBytesValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedBytesValue must have at least 1 elements") + } + if len(pathRepeatedUint32Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedUint32Value must have at least 1 elements") + } + if len(pathRepeatedEnumValue) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedEnumValue must have at least 1 elements") + } + if len(pathRepeatedSfixed32Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedSfixed32Value must have at least 1 elements") + } + if len(pathRepeatedSfixed64Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedSfixed64Value must have at least 1 elements") + } + if len(pathRepeatedSint32Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedSint32Value must have at least 1 elements") + } + if len(pathRepeatedSint64Value) < 1 { + return localVarReturnValue, nil, reportError("pathRepeatedSint64Value must have at least 1 elements") + } + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverythingRepeated + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuid + +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) Lookup(ctx context.Context, uuid string) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param name + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) PostWithEmptyBody(ctx context.Context, name string, body ExamplepbBody) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/postwithemptybody/{name}" + localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) Timeout(ctx context.Context) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/timeout" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuid + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) Update(ctx context.Context, uuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param abeUuid + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) UpdateV2(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param abeUuid + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) UpdateV22(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Patch") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param abeUuid + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) UpdateV23(ctx context.Context, abeUuid string, body ExamplepbUpdateV2Request) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Patch") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/abe/api_camel_case_service_name.go b/examples/clients/abe/api_camel_case_service_name.go new file mode 100644 index 00000000000..f5835bbe031 --- /dev/null +++ b/examples/clients/abe/api_camel_case_service_name.go @@ -0,0 +1,159 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" +) + +// Linger please +var ( + _ context.Context +) + +type CamelCaseServiceNameApiService service + +/* +CamelCaseServiceNameApiService Create a new ABitOfEverything +This API creates a new ABitOfEverything + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + +@return interface{} +*/ +func (a *CamelCaseServiceNameApiService) Empty(ctx context.Context) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/empty" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/abe/api_client.go b/examples/clients/abe/api_client.go deleted file mode 100644 index bf3e21a9fb1..00000000000 --- a/examples/clients/abe/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { - delimiter := "" - switch collectionFormat { - case "pipes": - delimiter = "|" - case "ssv": - delimiter = " " - case "tsv": - delimiter = "\t" - case "csv": - delimiter = "," - } - - if reflect.TypeOf(obj).Kind() == reflect.Slice { - return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") - } - - return fmt.Sprintf("%v", obj) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/abe/api_echo_rpc.go b/examples/clients/abe/api_echo_rpc.go new file mode 100644 index 00000000000..1dab0dc55f0 --- /dev/null +++ b/examples/clients/abe/api_echo_rpc.go @@ -0,0 +1,475 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" + "github.com/antihax/optional" +) + +// Linger please +var ( + _ context.Context +) + +type EchoRpcApiService service + +/* +EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param value + +@return SubStringMessage +*/ +func (a *EchoRpcApiService) Echo(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" + localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v SubStringMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v int32 + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 503 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return SubStringMessage +*/ +func (a *EchoRpcApiService) Echo2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v SubStringMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v int32 + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 503 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *Echo3Opts - Optional Parameters: + * @param "Value" (optional.String) - + +@return SubStringMessage +*/ + +type Echo3Opts struct { + Value optional.String +} + +func (a *EchoRpcApiService) Echo3(ctx context.Context, localVarOptionals *Echo3Opts) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Value.IsSet() { + localVarQueryParams.Add("value", parameterToString(localVarOptionals.Value.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v SubStringMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v int32 + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 503 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/abe/camel_case_service_name_api.go b/examples/clients/abe/camel_case_service_name_api.go deleted file mode 100644 index cb8cb48fd99..00000000000 --- a/examples/clients/abe/camel_case_service_name_api.go +++ /dev/null @@ -1,111 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "net/url" - "strings" - "encoding/json" -) - -type CamelCaseServiceNameApi struct { - Configuration *Configuration -} - -func NewCamelCaseServiceNameApi() *CamelCaseServiceNameApi { - configuration := NewConfiguration() - return &CamelCaseServiceNameApi{ - Configuration: configuration, - } -} - -func NewCamelCaseServiceNameApiWithBasePath(basePath string) *CamelCaseServiceNameApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &CamelCaseServiceNameApi{ - Configuration: configuration, - } -} - -/** - * Create a new ABitOfEverything - * This API creates a new ABitOfEverything - * - * @return *interface{} - */ -func (a CamelCaseServiceNameApi) Empty() (*interface{}, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/empty" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(interface{}) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Empty", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/abe/client.go b/examples/clients/abe/client.go new file mode 100644 index 00000000000..1bf9497bd2d --- /dev/null +++ b/examples/clients/abe/client.go @@ -0,0 +1,471 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "bytes" + "context" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the A Bit of Everything API v1.0 +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + ABitOfEverythingServiceApi *ABitOfEverythingServiceApiService + + CamelCaseServiceNameApi *CamelCaseServiceNameApiService + + EchoRpcApi *EchoRpcApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.ABitOfEverythingServiceApi = (*ABitOfEverythingServiceApiService)(&c.common) + c.CamelCaseServiceNameApi = (*CamelCaseServiceNameApiService)(&c.common) + c.EchoRpcApi = (*EchoRpcApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return fmt.Sprintf("%v", obj) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { + if strings.Contains(contentType, "application/xml") { + if err = xml.Unmarshal(b, v); err != nil { + return err + } + return nil + } else if strings.Contains(contentType, "application/json") { + if err = json.Unmarshal(b, v); err != nil { + return err + } + return nil + } + return errors.New("undefined response type") +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if s, ok := body.(*string); ok { + _, err = bodyBuf.WriteString(*s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} + +// GenericSwaggerError Provides access to the body, error and model on returned errors. +type GenericSwaggerError struct { + body []byte + error string + model interface{} +} + +// Error returns non-empty string if there was an error. +func (e GenericSwaggerError) Error() string { + return e.error +} + +// Body returns the raw bytes of the response +func (e GenericSwaggerError) Body() []byte { + return e.body +} + +// Model returns the unpacked model of the error +func (e GenericSwaggerError) Model() interface{} { + return e.model +} \ No newline at end of file diff --git a/examples/clients/abe/configuration.go b/examples/clients/abe/configuration.go index ccc319c34aa..3e85ff02f0f 100644 --- a/examples/clients/abe/configuration.go +++ b/examples/clients/abe/configuration.go @@ -1,67 +1,73 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/abe/echo_rpc_api.go b/examples/clients/abe/echo_rpc_api.go deleted file mode 100644 index 8afbbdd437f..00000000000 --- a/examples/clients/abe/echo_rpc_api.go +++ /dev/null @@ -1,265 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type EchoRpcApi struct { - Configuration *Configuration -} - -func NewEchoRpcApi() *EchoRpcApi { - configuration := NewConfiguration() - return &EchoRpcApi{ - Configuration: configuration, - } -} - -func NewEchoRpcApiWithBasePath(basePath string) *EchoRpcApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &EchoRpcApi{ - Configuration: configuration, - } -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param value - * @return *SubStringMessage - */ -func (a EchoRpcApi) Echo(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" - localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param body - * @return *SubStringMessage - */ -func (a EchoRpcApi) Echo2(body string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param value - * @return *SubStringMessage - */ -func (a EchoRpcApi) Echo3(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("value", a.Configuration.APIClient.ParameterToString(value, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo3", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/abe/echo_service_api.go b/examples/clients/abe/echo_service_api.go deleted file mode 100644 index 568177715d2..00000000000 --- a/examples/clients/abe/echo_service_api.go +++ /dev/null @@ -1,265 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type EchoServiceApi struct { - Configuration *Configuration -} - -func NewEchoServiceApi() *EchoServiceApi { - configuration := NewConfiguration() - return &EchoServiceApi{ - Configuration: configuration, - } -} - -func NewEchoServiceApiWithBasePath(basePath string) *EchoServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &EchoServiceApi{ - Configuration: configuration, - } -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param value - * @return *SubStringMessage - */ -func (a EchoServiceApi) Echo(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" - localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param body - * @return *SubStringMessage - */ -func (a EchoServiceApi) Echo2(body string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Summary: Echo rpc - * Description Echo - * - * @param value - * @return *SubStringMessage - */ -func (a EchoServiceApi) Echo3(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // authentication '(OAuth2)' required - // oauth required - if a.Configuration.AccessToken != ""{ - localVarHeaderParams["Authorization"] = "Bearer " + a.Configuration.AccessToken - } - // authentication '(BasicAuth)' required - // http basic authentication required - if a.Configuration.Username != "" || a.Configuration.Password != ""{ - localVarHeaderParams["Authorization"] = "Basic " + a.Configuration.GetBasicAuthEncodedString() - } - // authentication '(ApiKeyAuth)' required - // set key with prefix in header - localVarHeaderParams["X-API-Key"] = a.Configuration.GetAPIKeyWithPrefix("X-API-Key") - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("value", a.Configuration.APIClient.ParameterToString(value, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo3", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/abe/examplepb_numeric_enum.go b/examples/clients/abe/examplepb_numeric_enum.go deleted file mode 100644 index e953bbe34e8..00000000000 --- a/examples/clients/abe/examplepb_numeric_enum.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -// NumericEnum is one or zero. - ZERO: ZERO means 0 - ONE: ONE means 1 -type ExamplepbNumericEnum struct { -} diff --git a/examples/clients/abe/examplepb_update_v2_request.go b/examples/clients/abe/examplepb_update_v2_request.go deleted file mode 100644 index 9d021f8241c..00000000000 --- a/examples/clients/abe/examplepb_update_v2_request.go +++ /dev/null @@ -1,18 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -type ExamplepbUpdateV2Request struct { - - Abe ExamplepbABitOfEverything `json:"abe,omitempty"` - - UpdateMask ProtobufFieldMask `json:"update_mask,omitempty"` -} diff --git a/examples/clients/abe/message_path_enum_nested_path_enum.go b/examples/clients/abe/message_path_enum_nested_path_enum.go deleted file mode 100644 index a6d9a579f6c..00000000000 --- a/examples/clients/abe/message_path_enum_nested_path_enum.go +++ /dev/null @@ -1,14 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -type MessagePathEnumNestedPathEnum struct { -} diff --git a/examples/clients/abe/a_bit_of_everything_nested.go b/examples/clients/abe/model_a_bit_of_everything_nested.go similarity index 71% rename from examples/clients/abe/a_bit_of_everything_nested.go rename to examples/clients/abe/model_a_bit_of_everything_nested.go index c5b1dc53c75..586778feaaa 100644 --- a/examples/clients/abe/a_bit_of_everything_nested.go +++ b/examples/clients/abe/model_a_bit_of_everything_nested.go @@ -1,23 +1,20 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe // Nested is nested type. type ABitOfEverythingNested struct { - // name is nested field. Name string `json:"name,omitempty"` - Amount int64 `json:"amount,omitempty"` - // DeepEnum description. - Ok NestedDeepEnum `json:"ok,omitempty"` + Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/model_examplepb_a_bit_of_everything.go similarity index 77% rename from examples/clients/abe/examplepb_a_bit_of_everything.go rename to examples/clients/abe/model_examplepb_a_bit_of_everything.go index f14edb018dd..d97adde4a02 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ b/examples/clients/abe/model_examplepb_a_bit_of_everything.go @@ -1,11 +1,11 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe @@ -16,82 +16,46 @@ import ( // Intentionaly complicated message type to cover many features of Protobuf. type ExamplepbABitOfEverything struct { - - SingleNested ABitOfEverythingNested `json:"single_nested,omitempty"` - + SingleNested *ABitOfEverythingNested `json:"single_nested,omitempty"` Uuid string `json:"uuid"` - Nested []ABitOfEverythingNested `json:"nested,omitempty"` - // Float value field FloatValue float32 `json:"float_value,omitempty"` - DoubleValue float64 `json:"double_value"` - Int64Value string `json:"int64_value"` - Uint64Value string `json:"uint64_value,omitempty"` - Int32Value int32 `json:"int32_value,omitempty"` - Fixed64Value string `json:"fixed64_value,omitempty"` - Fixed32Value int64 `json:"fixed32_value,omitempty"` - BoolValue bool `json:"bool_value,omitempty"` - StringValue string `json:"string_value,omitempty"` - BytesValue string `json:"bytes_value,omitempty"` - Uint32Value int64 `json:"uint32_value,omitempty"` - - EnumValue ExamplepbNumericEnum `json:"enum_value,omitempty"` - - PathEnumValue PathenumPathEnum `json:"path_enum_value,omitempty"` - - NestedPathEnumValue MessagePathEnumNestedPathEnum `json:"nested_path_enum_value,omitempty"` - + EnumValue *ExamplepbNumericEnum `json:"enum_value,omitempty"` + PathEnumValue *PathenumPathEnum `json:"path_enum_value,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nested_path_enum_value,omitempty"` Sfixed32Value int32 `json:"sfixed32_value,omitempty"` - Sfixed64Value string `json:"sfixed64_value,omitempty"` - Sint32Value int32 `json:"sint32_value,omitempty"` - Sint64Value string `json:"sint64_value,omitempty"` - RepeatedStringValue []string `json:"repeated_string_value,omitempty"` - - OneofEmpty interface{} `json:"oneof_empty,omitempty"` - + OneofEmpty *interface{} `json:"oneof_empty,omitempty"` OneofString string `json:"oneof_string,omitempty"` - MapValue map[string]ExamplepbNumericEnum `json:"map_value,omitempty"` - MappedStringValue map[string]string `json:"mapped_string_value,omitempty"` - MappedNestedValue map[string]ABitOfEverythingNested `json:"mapped_nested_value,omitempty"` - NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` - TimestampValue time.Time `json:"timestamp_value,omitempty"` - RepeatedEnumValue []ExamplepbNumericEnum `json:"repeated_enum_value,omitempty"` - // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeated_enum_annotation,omitempty"` - // Numeric enum description. - EnumValueAnnotation ExamplepbNumericEnum `json:"enum_value_annotation,omitempty"` - + EnumValueAnnotation *ExamplepbNumericEnum `json:"enum_value_annotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeated_string_annotation,omitempty"` - // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeated_nested_annotation,omitempty"` - // Nested object description. - NestedAnnotation ABitOfEverythingNested `json:"nested_annotation,omitempty"` - + NestedAnnotation *ABitOfEverythingNested `json:"nested_annotation,omitempty"` Int64OverrideType int64 `json:"int64_override_type,omitempty"` } diff --git a/examples/clients/abe/examplepb_a_bit_of_everything_repeated.go b/examples/clients/abe/model_examplepb_a_bit_of_everything_repeated.go similarity index 92% rename from examples/clients/abe/examplepb_a_bit_of_everything_repeated.go rename to examples/clients/abe/model_examplepb_a_bit_of_everything_repeated.go index 35f588ccf3d..3bde251e8d5 100644 --- a/examples/clients/abe/examplepb_a_bit_of_everything_repeated.go +++ b/examples/clients/abe/model_examplepb_a_bit_of_everything_repeated.go @@ -1,46 +1,30 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe type ExamplepbABitOfEverythingRepeated struct { - PathRepeatedFloatValue []float32 `json:"path_repeated_float_value,omitempty"` - PathRepeatedDoubleValue []float64 `json:"path_repeated_double_value,omitempty"` - PathRepeatedInt64Value []string `json:"path_repeated_int64_value,omitempty"` - PathRepeatedUint64Value []string `json:"path_repeated_uint64_value,omitempty"` - PathRepeatedInt32Value []int32 `json:"path_repeated_int32_value,omitempty"` - PathRepeatedFixed64Value []string `json:"path_repeated_fixed64_value,omitempty"` - PathRepeatedFixed32Value []int64 `json:"path_repeated_fixed32_value,omitempty"` - PathRepeatedBoolValue []bool `json:"path_repeated_bool_value,omitempty"` - PathRepeatedStringValue []string `json:"path_repeated_string_value,omitempty"` - PathRepeatedBytesValue []string `json:"path_repeated_bytes_value,omitempty"` - PathRepeatedUint32Value []int64 `json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []ExamplepbNumericEnum `json:"path_repeated_enum_value,omitempty"` - PathRepeatedSfixed32Value []int32 `json:"path_repeated_sfixed32_value,omitempty"` - PathRepeatedSfixed64Value []string `json:"path_repeated_sfixed64_value,omitempty"` - PathRepeatedSint32Value []int32 `json:"path_repeated_sint32_value,omitempty"` - PathRepeatedSint64Value []string `json:"path_repeated_sint64_value,omitempty"` } diff --git a/examples/clients/abe/examplepb_body.go b/examples/clients/abe/model_examplepb_body.go similarity index 69% rename from examples/clients/abe/examplepb_body.go rename to examples/clients/abe/model_examplepb_body.go index 13f4c2dc1e1..0c3d9c9b5b1 100644 --- a/examples/clients/abe/examplepb_body.go +++ b/examples/clients/abe/model_examplepb_body.go @@ -1,16 +1,15 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe type ExamplepbBody struct { - Name string `json:"name,omitempty"` } diff --git a/examples/clients/abe/model_examplepb_numeric_enum.go b/examples/clients/abe/model_examplepb_numeric_enum.go new file mode 100644 index 00000000000..ab6cd12909d --- /dev/null +++ b/examples/clients/abe/model_examplepb_numeric_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// ExamplepbNumericEnum : NumericEnum is one or zero. - ZERO: ZERO means 0 - ONE: ONE means 1 +type ExamplepbNumericEnum string + +// List of examplepbNumericEnum +const ( + ZERO_ExamplepbNumericEnum ExamplepbNumericEnum = "ZERO" + ONE_ExamplepbNumericEnum ExamplepbNumericEnum = "ONE" +) diff --git a/examples/clients/abe/model_examplepb_update_v2_request.go b/examples/clients/abe/model_examplepb_update_v2_request.go new file mode 100644 index 00000000000..544c83ad794 --- /dev/null +++ b/examples/clients/abe/model_examplepb_update_v2_request.go @@ -0,0 +1,16 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbUpdateV2Request struct { + Abe *ExamplepbABitOfEverything `json:"abe,omitempty"` + UpdateMask *ProtobufFieldMask `json:"update_mask,omitempty"` +} diff --git a/examples/clients/abe/model_message_path_enum_nested_path_enum.go b/examples/clients/abe/model_message_path_enum_nested_path_enum.go new file mode 100644 index 00000000000..ef64b6b71e8 --- /dev/null +++ b/examples/clients/abe/model_message_path_enum_nested_path_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type MessagePathEnumNestedPathEnum string + +// List of MessagePathEnumNestedPathEnum +const ( + GHI_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = "GHI" + JKL_MessagePathEnumNestedPathEnum MessagePathEnumNestedPathEnum = "JKL" +) diff --git a/examples/clients/abe/model_nested_deep_enum.go b/examples/clients/abe/model_nested_deep_enum.go new file mode 100644 index 00000000000..da1c7e372ec --- /dev/null +++ b/examples/clients/abe/model_nested_deep_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// NestedDeepEnum : DeepEnum is one or zero. - FALSE: FALSE is false. - TRUE: TRUE is true. +type NestedDeepEnum string + +// List of NestedDeepEnum +const ( + FALSE_NestedDeepEnum NestedDeepEnum = "FALSE" + TRUE_NestedDeepEnum NestedDeepEnum = "TRUE" +) diff --git a/examples/clients/abe/model_pathenum_path_enum.go b/examples/clients/abe/model_pathenum_path_enum.go new file mode 100644 index 00000000000..810e1abe1a7 --- /dev/null +++ b/examples/clients/abe/model_pathenum_path_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type PathenumPathEnum string + +// List of pathenumPathEnum +const ( + ABC_PathenumPathEnum PathenumPathEnum = "ABC" + DEF_PathenumPathEnum PathenumPathEnum = "DEF" +) diff --git a/examples/clients/abe/protobuf_field_mask.go b/examples/clients/abe/model_protobuf_field_mask.go similarity index 98% rename from examples/clients/abe/protobuf_field_mask.go rename to examples/clients/abe/model_protobuf_field_mask.go index 2e21bc72874..9de81c0d600 100644 --- a/examples/clients/abe/protobuf_field_mask.go +++ b/examples/clients/abe/model_protobuf_field_mask.go @@ -1,18 +1,17 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe // paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is duplicated or unmappable. type ProtobufFieldMask struct { - // The set of field mask paths. Paths []string `json:"paths,omitempty"` } diff --git a/examples/clients/abe/sub_string_message.go b/examples/clients/abe/model_sub_string_message.go similarity index 69% rename from examples/clients/abe/sub_string_message.go rename to examples/clients/abe/model_sub_string_message.go index 2a0874fc5fa..d4dcf4ebf16 100644 --- a/examples/clients/abe/sub_string_message.go +++ b/examples/clients/abe/model_sub_string_message.go @@ -1,16 +1,15 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe type SubStringMessage struct { - Value string `json:"value,omitempty"` } diff --git a/examples/clients/abe/nested_deep_enum.go b/examples/clients/abe/nested_deep_enum.go deleted file mode 100644 index e5fc17d50a4..00000000000 --- a/examples/clients/abe/nested_deep_enum.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -// DeepEnum is one or zero. - FALSE: FALSE is false. - TRUE: TRUE is true. -type NestedDeepEnum struct { -} diff --git a/examples/clients/abe/pathenum_path_enum.go b/examples/clients/abe/pathenum_path_enum.go deleted file mode 100644 index 76e4f87650d..00000000000 --- a/examples/clients/abe/pathenum_path_enum.go +++ /dev/null @@ -1,14 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -type PathenumPathEnum struct { -} diff --git a/examples/clients/abe/api_response.go b/examples/clients/abe/response.go similarity index 77% rename from examples/clients/abe/api_response.go rename to examples/clients/abe/response.go index ee1315f513c..a42d47cd7ab 100644 --- a/examples/clients/abe/api_response.go +++ b/examples/clients/abe/response.go @@ -1,11 +1,11 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe @@ -16,15 +16,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/clients/echo/.swagger-codegen/VERSION b/examples/clients/echo/.swagger-codegen/VERSION new file mode 100644 index 00000000000..752a79ef362 --- /dev/null +++ b/examples/clients/echo/.swagger-codegen/VERSION @@ -0,0 +1 @@ +2.4.8 \ No newline at end of file diff --git a/examples/clients/echo/BUILD.bazel b/examples/clients/echo/BUILD.bazel index 090b56aafab..31ac6d56986 100644 --- a/examples/clients/echo/BUILD.bazel +++ b/examples/clients/echo/BUILD.bazel @@ -5,13 +5,16 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = [ - "api_client.go", - "api_response.go", + "api_echo_service.go", + "client.go", "configuration.go", - "echo_service_api.go", - "examplepb_embedded.go", - "examplepb_simple_message.go", + "model_examplepb_embedded.go", + "model_examplepb_simple_message.go", + "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo", - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = [ + "@com_github_antihax_optional//:go_default_library", + "@org_golang_x_oauth2//:go_default_library", + ], ) diff --git a/examples/clients/echo/api/swagger.yaml b/examples/clients/echo/api/swagger.yaml new file mode 100644 index 00000000000..884e7ad6bfb --- /dev/null +++ b/examples/clients/echo/api/swagger.yaml @@ -0,0 +1,441 @@ +--- +swagger: "2.0" +info: + description: "Echo Service API consists of a single service which returns\na message." + version: "version not set" + title: "Echo Service" +schemes: +- "http" +- "https" +consumes: +- "application/json" +produces: +- "application/json" +paths: + /v1/example/echo/{id}: + post: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo/{id}/{num}: + get: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo2" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + - name: "num" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Num" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo/{id}/{num}/{lang}: + get: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo3" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + - name: "num" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Num" + - name: "lang" + in: "path" + required: true + type: "string" + x-exportParamName: "Lang" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo1/{id}/{line_num}/{status.note}: + get: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo4" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + - name: "line_num" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "LineNum" + - name: "status.note" + in: "path" + required: true + type: "string" + x-exportParamName: "StatusNote" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo2/{no.note}: + get: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo5" + parameters: + - name: "no.note" + in: "path" + required: true + type: "string" + x-exportParamName: "NoNote" + - name: "id" + in: "query" + description: "Id represents the message identifier." + required: false + type: "string" + x-exportParamName: "Id" + x-optionalDataType: "String" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo_body: + post: + tags: + - "EchoService" + summary: "EchoBody method receives a simple message and returns it." + operationId: "EchoBody" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbSimpleMessage" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo_delete: + delete: + tags: + - "EchoService" + summary: "EchoDelete method receives a simple message and returns it." + operationId: "EchoDelete" + parameters: + - name: "id" + in: "query" + description: "Id represents the message identifier." + required: false + type: "string" + x-exportParamName: "Id" + x-optionalDataType: "String" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" +definitions: + examplepbEmbedded: + type: "object" + properties: + progress: + type: "string" + format: "int64" + note: + type: "string" + description: "Embedded represents a message embedded in SimpleMessage." + example: + note: "note" + progress: "progress" + examplepbSimpleMessage: + type: "object" + properties: + id: + type: "string" + description: "Id represents the message identifier." + num: + type: "string" + format: "int64" + line_num: + type: "string" + format: "int64" + lang: + type: "string" + status: + $ref: "#/definitions/examplepbEmbedded" + en: + type: "string" + format: "int64" + "no": + $ref: "#/definitions/examplepbEmbedded" + description: "SimpleMessage represents a simple message sent to the Echo service." + example: + "no": + note: "note" + progress: "progress" + line_num: "line_num" + num: "num" + en: "en" + id: "id" + lang: "lang" + status: + note: "note" + progress: "progress" diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go deleted file mode 100644 index 7a517148026..00000000000 --- a/examples/clients/echo/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Echo Service - * - * Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package echo - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { - delimiter := "" - switch collectionFormat { - case "pipes": - delimiter = "|" - case "ssv": - delimiter = " " - case "tsv": - delimiter = "\t" - case "csv": - delimiter = "," - } - - if reflect.TypeOf(obj).Kind() == reflect.Slice { - return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") - } - - return fmt.Sprintf("%v", obj) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/echo/api_echo_service.go b/examples/clients/echo/api_echo_service.go new file mode 100644 index 00000000000..5e5b44b450d --- /dev/null +++ b/examples/clients/echo/api_echo_service.go @@ -0,0 +1,852 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" + "github.com/antihax/optional" +) + +// Linger please +var ( + _ context.Context +) + +type EchoServiceApiService service + +/* +EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + +@return ExamplepbSimpleMessage +*/ +func (a *EchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + * @param num + * @param optional nil or *Echo2Opts - Optional Parameters: + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type Echo2Opts struct { + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *EchoServiceApiService) Echo2(ctx context.Context, id string, num string, localVarOptionals *Echo2Opts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}/{num}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + * @param num + * @param lang + * @param optional nil or *Echo3Opts - Optional Parameters: + * @param "LineNum" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type Echo3Opts struct { + LineNum optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *EchoServiceApiService) Echo3(ctx context.Context, id string, num string, lang string, localVarOptionals *Echo3Opts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}/{num}/{lang}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) + localVarPath = strings.Replace(localVarPath, "{"+"lang"+"}", fmt.Sprintf("%v", lang), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + * @param lineNum + * @param statusNote + * @param optional nil or *Echo4Opts - Optional Parameters: + * @param "Num" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type Echo4Opts struct { + Num optional.String + Lang optional.String + StatusProgress optional.String + En optional.String + NoProgress optional.String +} + +func (a *EchoServiceApiService) Echo4(ctx context.Context, id string, lineNum string, statusNote string, localVarOptionals *Echo4Opts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo1/{id}/{line_num}/{status.note}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath = strings.Replace(localVarPath, "{"+"line_num"+"}", fmt.Sprintf("%v", lineNum), -1) + localVarPath = strings.Replace(localVarPath, "{"+"status.note"+"}", fmt.Sprintf("%v", statusNote), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param noNote + * @param optional nil or *Echo5Opts - Optional Parameters: + * @param "Id" (optional.String) - Id represents the message identifier. + * @param "Num" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type Echo5Opts struct { + Id optional.String + Num optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + En optional.String + NoProgress optional.String +} + +func (a *EchoServiceApiService) Echo5(ctx context.Context, noNote string, localVarOptionals *Echo5Opts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo2/{no.note}" + localVarPath = strings.Replace(localVarPath, "{"+"no.note"+"}", fmt.Sprintf("%v", noNote), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Id.IsSet() { + localVarQueryParams.Add("id", parameterToString(localVarOptionals.Id.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService EchoBody method receives a simple message and returns it. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return ExamplepbSimpleMessage +*/ +func (a *EchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbSimpleMessage) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_body" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +EchoServiceApiService EchoDelete method receives a simple message and returns it. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *EchoDeleteOpts - Optional Parameters: + * @param "Id" (optional.String) - Id represents the message identifier. + * @param "Num" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type EchoDeleteOpts struct { + Id optional.String + Num optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *EchoServiceApiService) EchoDelete(ctx context.Context, localVarOptionals *EchoDeleteOpts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_delete" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Id.IsSet() { + localVarQueryParams.Add("id", parameterToString(localVarOptionals.Id.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/echo/client.go b/examples/clients/echo/client.go new file mode 100644 index 00000000000..d0e2045800c --- /dev/null +++ b/examples/clients/echo/client.go @@ -0,0 +1,464 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +import ( + "bytes" + "context" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the Echo Service API vversion not set +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + EchoServiceApi *EchoServiceApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.EchoServiceApi = (*EchoServiceApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return fmt.Sprintf("%v", obj) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { + if strings.Contains(contentType, "application/xml") { + if err = xml.Unmarshal(b, v); err != nil { + return err + } + return nil + } else if strings.Contains(contentType, "application/json") { + if err = json.Unmarshal(b, v); err != nil { + return err + } + return nil + } + return errors.New("undefined response type") +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if s, ok := body.(*string); ok { + _, err = bodyBuf.WriteString(*s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} + +// GenericSwaggerError Provides access to the body, error and model on returned errors. +type GenericSwaggerError struct { + body []byte + error string + model interface{} +} + +// Error returns non-empty string if there was an error. +func (e GenericSwaggerError) Error() string { + return e.error +} + +// Body returns the raw bytes of the response +func (e GenericSwaggerError) Body() []byte { + return e.body +} + +// Model returns the unpacked model of the error +func (e GenericSwaggerError) Model() interface{} { + return e.model +} \ No newline at end of file diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 9a75a30aeec..5f730c12ab7 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,67 +1,72 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go deleted file mode 100644 index 6ae7cf85a32..00000000000 --- a/examples/clients/echo/echo_service_api.go +++ /dev/null @@ -1,541 +0,0 @@ -/* - * Echo Service - * - * Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package echo - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type EchoServiceApi struct { - Configuration *Configuration -} - -func NewEchoServiceApi() *EchoServiceApi { - configuration := NewConfiguration() - return &EchoServiceApi{ - Configuration: configuration, - } -} - -func NewEchoServiceApiWithBasePath(basePath string) *EchoServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &EchoServiceApi{ - Configuration: configuration, - } -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo(id string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @param num - * @param lineNum - * @param lang - * @param statusProgress - * @param statusNote - * @param en - * @param noProgress - * @param noNote - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo2(id string, num string, lineNum string, lang string, statusProgress string, statusNote string, en string, noProgress string, noNote string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}/{num}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("line_num", a.Configuration.APIClient.ParameterToString(lineNum, "")) - localVarQueryParams.Add("lang", a.Configuration.APIClient.ParameterToString(lang, "")) - localVarQueryParams.Add("status.progress", a.Configuration.APIClient.ParameterToString(statusProgress, "")) - localVarQueryParams.Add("status.note", a.Configuration.APIClient.ParameterToString(statusNote, "")) - localVarQueryParams.Add("en", a.Configuration.APIClient.ParameterToString(en, "")) - localVarQueryParams.Add("no.progress", a.Configuration.APIClient.ParameterToString(noProgress, "")) - localVarQueryParams.Add("no.note", a.Configuration.APIClient.ParameterToString(noNote, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @param num - * @param lang - * @param lineNum - * @param statusProgress - * @param statusNote - * @param en - * @param noProgress - * @param noNote - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo3(id string, num string, lang string, lineNum string, statusProgress string, statusNote string, en string, noProgress string, noNote string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}/{num}/{lang}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) - localVarPath = strings.Replace(localVarPath, "{"+"lang"+"}", fmt.Sprintf("%v", lang), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("line_num", a.Configuration.APIClient.ParameterToString(lineNum, "")) - localVarQueryParams.Add("status.progress", a.Configuration.APIClient.ParameterToString(statusProgress, "")) - localVarQueryParams.Add("status.note", a.Configuration.APIClient.ParameterToString(statusNote, "")) - localVarQueryParams.Add("en", a.Configuration.APIClient.ParameterToString(en, "")) - localVarQueryParams.Add("no.progress", a.Configuration.APIClient.ParameterToString(noProgress, "")) - localVarQueryParams.Add("no.note", a.Configuration.APIClient.ParameterToString(noNote, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo3", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @param lineNum - * @param statusNote - * @param num - * @param lang - * @param statusProgress - * @param en - * @param noProgress - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo4(id string, lineNum string, statusNote string, num string, lang string, statusProgress string, en string, noProgress string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo1/{id}/{line_num}/{status.note}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"line_num"+"}", fmt.Sprintf("%v", lineNum), -1) - localVarPath = strings.Replace(localVarPath, "{"+"status.note"+"}", fmt.Sprintf("%v", statusNote), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("num", a.Configuration.APIClient.ParameterToString(num, "")) - localVarQueryParams.Add("lang", a.Configuration.APIClient.ParameterToString(lang, "")) - localVarQueryParams.Add("status.progress", a.Configuration.APIClient.ParameterToString(statusProgress, "")) - localVarQueryParams.Add("en", a.Configuration.APIClient.ParameterToString(en, "")) - localVarQueryParams.Add("no.progress", a.Configuration.APIClient.ParameterToString(noProgress, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo4", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param noNote - * @param id Id represents the message identifier. - * @param num - * @param lineNum - * @param lang - * @param statusProgress - * @param en - * @param noProgress - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo5(noNote string, id string, num string, lineNum string, lang string, statusProgress string, en string, noProgress string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo2/{no.note}" - localVarPath = strings.Replace(localVarPath, "{"+"no.note"+"}", fmt.Sprintf("%v", noNote), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("id", a.Configuration.APIClient.ParameterToString(id, "")) - localVarQueryParams.Add("num", a.Configuration.APIClient.ParameterToString(num, "")) - localVarQueryParams.Add("line_num", a.Configuration.APIClient.ParameterToString(lineNum, "")) - localVarQueryParams.Add("lang", a.Configuration.APIClient.ParameterToString(lang, "")) - localVarQueryParams.Add("status.progress", a.Configuration.APIClient.ParameterToString(statusProgress, "")) - localVarQueryParams.Add("en", a.Configuration.APIClient.ParameterToString(en, "")) - localVarQueryParams.Add("no.progress", a.Configuration.APIClient.ParameterToString(noProgress, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo5", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * EchoBody method receives a simple message and returns it. - * - * @param body - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) EchoBody(body ExamplepbSimpleMessage) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo_body" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "EchoBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * EchoDelete method receives a simple message and returns it. - * - * @param id Id represents the message identifier. - * @param num - * @param lineNum - * @param lang - * @param statusProgress - * @param statusNote - * @param en - * @param noProgress - * @param noNote - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) EchoDelete(id string, num string, lineNum string, lang string, statusProgress string, statusNote string, en string, noProgress string, noNote string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Delete") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo_delete" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("id", a.Configuration.APIClient.ParameterToString(id, "")) - localVarQueryParams.Add("num", a.Configuration.APIClient.ParameterToString(num, "")) - localVarQueryParams.Add("line_num", a.Configuration.APIClient.ParameterToString(lineNum, "")) - localVarQueryParams.Add("lang", a.Configuration.APIClient.ParameterToString(lang, "")) - localVarQueryParams.Add("status.progress", a.Configuration.APIClient.ParameterToString(statusProgress, "")) - localVarQueryParams.Add("status.note", a.Configuration.APIClient.ParameterToString(statusNote, "")) - localVarQueryParams.Add("en", a.Configuration.APIClient.ParameterToString(en, "")) - localVarQueryParams.Add("no.progress", a.Configuration.APIClient.ParameterToString(noProgress, "")) - localVarQueryParams.Add("no.note", a.Configuration.APIClient.ParameterToString(noNote, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "EchoDelete", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/echo/examplepb_embedded.go b/examples/clients/echo/model_examplepb_embedded.go similarity index 70% rename from examples/clients/echo/examplepb_embedded.go rename to examples/clients/echo/model_examplepb_embedded.go index 4b5fe265ac9..7f6ff8a7848 100644 --- a/examples/clients/echo/examplepb_embedded.go +++ b/examples/clients/echo/model_examplepb_embedded.go @@ -1,19 +1,16 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo // Embedded represents a message embedded in SimpleMessage. type ExamplepbEmbedded struct { - Progress string `json:"progress,omitempty"` - Note string `json:"note,omitempty"` } diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/model_examplepb_simple_message.go similarity index 67% rename from examples/clients/echo/examplepb_simple_message.go rename to examples/clients/echo/model_examplepb_simple_message.go index 366a6876665..d0c0d90e9eb 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/model_examplepb_simple_message.go @@ -1,30 +1,22 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo // SimpleMessage represents a simple message sent to the Echo service. type ExamplepbSimpleMessage struct { - // Id represents the message identifier. Id string `json:"id,omitempty"` - Num string `json:"num,omitempty"` - LineNum string `json:"line_num,omitempty"` - Lang string `json:"lang,omitempty"` - - Status ExamplepbEmbedded `json:"status,omitempty"` - + Status *ExamplepbEmbedded `json:"status,omitempty"` En string `json:"en,omitempty"` - - No ExamplepbEmbedded `json:"no,omitempty"` + No *ExamplepbEmbedded `json:"no,omitempty"` } diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/response.go similarity index 75% rename from examples/clients/echo/api_response.go rename to examples/clients/echo/response.go index 8b0d07c4a13..a82295589de 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/response.go @@ -1,11 +1,10 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo @@ -16,15 +15,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/clients/responsebody/.swagger-codegen/VERSION b/examples/clients/responsebody/.swagger-codegen/VERSION new file mode 100644 index 00000000000..752a79ef362 --- /dev/null +++ b/examples/clients/responsebody/.swagger-codegen/VERSION @@ -0,0 +1 @@ +2.4.8 \ No newline at end of file diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index e621bea6960..f5fb6a134ad 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -3,21 +3,18 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = [ - "api_client.go", - "api_response.go", + "api_response_body_service.go", + "client.go", "configuration.go", - "examplepb_repeated_response_body_out.go", - "examplepb_repeated_response_body_out_response.go", - "examplepb_repeated_response_strings.go", - "examplepb_response_body_message.go", - "examplepb_response_body_message_response.go", - "examplepb_response_body_out.go", - "examplepb_response_body_out_response.go", - "examplepb_response_body_req.go", - "response_body_service_api.go", - "response_response_type.go", + "model_examplepb_repeated_response_body_out.go", + "model_examplepb_repeated_response_body_out_response.go", + "model_examplepb_repeated_response_strings.go", + "model_examplepb_response_body_out.go", + "model_examplepb_response_body_out_response.go", + "model_response_response_type.go", + "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", visibility = ["//visibility:public"], - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = ["@org_golang_x_oauth2//:go_default_library"], ) diff --git a/examples/clients/responsebody/api/swagger.yaml b/examples/clients/responsebody/api/swagger.yaml new file mode 100644 index 00000000000..ca61b71ad42 --- /dev/null +++ b/examples/clients/responsebody/api/swagger.yaml @@ -0,0 +1,110 @@ +--- +swagger: "2.0" +info: + version: "version not set" + title: "examples/proto/examplepb/response_body_service.proto" +schemes: +- "http" +- "https" +consumes: +- "application/json" +produces: +- "application/json" +paths: + /responsebodies/{data}: + get: + tags: + - "ResponseBodyService" + operationId: "ListResponseBodies" + parameters: + - name: "data" + in: "path" + required: true + type: "string" + x-exportParamName: "Data" + responses: + 200: + description: "" + schema: + type: "array" + items: + $ref: "#/definitions/examplepbRepeatedResponseBodyOutResponse" + /responsebody/{data}: + get: + tags: + - "ResponseBodyService" + operationId: "GetResponseBody" + parameters: + - name: "data" + in: "path" + required: true + type: "string" + x-exportParamName: "Data" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbResponseBodyOutResponse" + /responsestrings/{data}: + get: + tags: + - "ResponseBodyService" + operationId: "ListResponseStrings" + parameters: + - name: "data" + in: "path" + required: true + type: "string" + x-exportParamName: "Data" + responses: + 200: + description: "" + schema: + type: "array" + items: + type: "string" +definitions: + ResponseResponseType: + type: "string" + title: "- UNKNOWN: UNKNOWN\n - A: A is 1\n - B: B is 2" + enum: + - "UNKNOWN" + - "A" + - "B" + default: "UNKNOWN" + examplepbRepeatedResponseBodyOut: + type: "object" + properties: + response: + type: "array" + items: + $ref: "#/definitions/examplepbRepeatedResponseBodyOutResponse" + examplepbRepeatedResponseBodyOutResponse: + type: "object" + properties: + data: + type: "string" + type: + $ref: "#/definitions/ResponseResponseType" + example: + data: "data" + type: {} + examplepbRepeatedResponseStrings: + type: "object" + properties: + values: + type: "array" + items: + type: "string" + examplepbResponseBodyOut: + type: "object" + properties: + response: + $ref: "#/definitions/examplepbResponseBodyOutResponse" + examplepbResponseBodyOutResponse: + type: "object" + properties: + data: + type: "string" + example: + data: "data" diff --git a/examples/clients/responsebody/api_client.go b/examples/clients/responsebody/api_client.go deleted file mode 100644 index 1f7354b61dc..00000000000 --- a/examples/clients/responsebody/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { - delimiter := "" - switch collectionFormat { - case "pipes": - delimiter = "|" - case "ssv": - delimiter = " " - case "tsv": - delimiter = "\t" - case "csv": - delimiter = "," - } - - if reflect.TypeOf(obj).Kind() == reflect.Slice { - return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") - } - - return fmt.Sprintf("%v", obj) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/responsebody/api_response_body_service.go b/examples/clients/responsebody/api_response_body_service.go new file mode 100644 index 00000000000..4d534a3867e --- /dev/null +++ b/examples/clients/responsebody/api_response_body_service.go @@ -0,0 +1,290 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type ResponseBodyServiceApiService service + +/* +ResponseBodyServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param data + +@return ExamplepbResponseBodyOutResponse +*/ +func (a *ResponseBodyServiceApiService) GetResponseBody(ctx context.Context, data string) (ExamplepbResponseBodyOutResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbResponseBodyOutResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/responsebody/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbResponseBodyOutResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ResponseBodyServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param data + +@return []ExamplepbRepeatedResponseBodyOutResponse +*/ +func (a *ResponseBodyServiceApiService) ListResponseBodies(ctx context.Context, data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue []ExamplepbRepeatedResponseBodyOutResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/responsebodies/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v []ExamplepbRepeatedResponseBodyOutResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ResponseBodyServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param data + +@return []string +*/ +func (a *ResponseBodyServiceApiService) ListResponseStrings(ctx context.Context, data string) ([]string, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue []string + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/responsestrings/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v []string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/responsebody/client.go b/examples/clients/responsebody/client.go new file mode 100644 index 00000000000..e728fd1eecd --- /dev/null +++ b/examples/clients/responsebody/client.go @@ -0,0 +1,464 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +import ( + "bytes" + "context" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the examples/proto/examplepb/response_body_service.proto API vversion not set +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + ResponseBodyServiceApi *ResponseBodyServiceApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.ResponseBodyServiceApi = (*ResponseBodyServiceApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return fmt.Sprintf("%v", obj) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { + if strings.Contains(contentType, "application/xml") { + if err = xml.Unmarshal(b, v); err != nil { + return err + } + return nil + } else if strings.Contains(contentType, "application/json") { + if err = json.Unmarshal(b, v); err != nil { + return err + } + return nil + } + return errors.New("undefined response type") +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if s, ok := body.(*string); ok { + _, err = bodyBuf.WriteString(*s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} + +// GenericSwaggerError Provides access to the body, error and model on returned errors. +type GenericSwaggerError struct { + body []byte + error string + model interface{} +} + +// Error returns non-empty string if there was an error. +func (e GenericSwaggerError) Error() string { + return e.error +} + +// Body returns the raw bytes of the response +func (e GenericSwaggerError) Body() []byte { + return e.body +} + +// Model returns the unpacked model of the error +func (e GenericSwaggerError) Model() interface{} { + return e.model +} \ No newline at end of file diff --git a/examples/clients/responsebody/configuration.go b/examples/clients/responsebody/configuration.go index 0ffa917b424..6a98b8dcfe0 100644 --- a/examples/clients/responsebody/configuration.go +++ b/examples/clients/responsebody/configuration.go @@ -1,67 +1,72 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md index 64153cb125c..f7169959b1b 100644 --- a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md +++ b/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md @@ -4,7 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **Data** | **string** | | [optional] [default to null] -**Type_** | [**ResponseResponseType**](ResponseResponseType.md) | | [optional] [default to null] +**Type_** | [***ResponseResponseType**](ResponseResponseType.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md b/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md index a26ce7530d0..5a7146581bf 100644 --- a/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md +++ b/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**Response** | [**ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) | | [optional] [default to null] +**Response** | [***ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md index 458725faa9b..7645bba50b5 100644 --- a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md +++ b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -10,16 +10,15 @@ Method | HTTP request | Description # **GetResponseBody** -> ExamplepbResponseBodyOutResponse GetResponseBody($data) +> ExamplepbResponseBodyOutResponse GetResponseBody(ctx, data) - - -### Parameters +### Required Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **data** | **string**| | + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **data** | **string**| | ### Return type @@ -37,16 +36,15 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **ListResponseBodies** -> []ExamplepbRepeatedResponseBodyOutResponse ListResponseBodies($data) - +> []ExamplepbRepeatedResponseBodyOutResponse ListResponseBodies(ctx, data) - -### Parameters +### Required Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **data** | **string**| | + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **data** | **string**| | ### Return type @@ -64,16 +62,15 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **ListResponseStrings** -> []string ListResponseStrings($data) - - +> []string ListResponseStrings(ctx, data) -### Parameters +### Required Parameters Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **data** | **string**| | + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **data** | **string**| | ### Return type diff --git a/examples/clients/responsebody/examplepb_response_body_message.go b/examples/clients/responsebody/examplepb_response_body_message.go deleted file mode 100644 index 6dfcea3835c..00000000000 --- a/examples/clients/responsebody/examplepb_response_body_message.go +++ /dev/null @@ -1,18 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -type ExamplepbResponseBodyMessage struct { - - Request string `json:"request,omitempty"` - - Response ExamplepbResponseBodyMessageResponse `json:"response,omitempty"` -} diff --git a/examples/clients/responsebody/examplepb_response_body_message_response.go b/examples/clients/responsebody/examplepb_response_body_message_response.go deleted file mode 100644 index 436f1dff6cb..00000000000 --- a/examples/clients/responsebody/examplepb_response_body_message_response.go +++ /dev/null @@ -1,16 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -type ExamplepbResponseBodyMessageResponse struct { - - Data string `json:"data,omitempty"` -} diff --git a/examples/clients/responsebody/examplepb_response_body_req.go b/examples/clients/responsebody/examplepb_response_body_req.go deleted file mode 100644 index 5d9a56d9546..00000000000 --- a/examples/clients/responsebody/examplepb_response_body_req.go +++ /dev/null @@ -1,16 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -type ExamplepbResponseBodyReq struct { - - Data string `json:"data,omitempty"` -} diff --git a/examples/clients/responsebody/examplepb_repeated_response_body_out.go b/examples/clients/responsebody/model_examplepb_repeated_response_body_out.go similarity index 72% rename from examples/clients/responsebody/examplepb_repeated_response_body_out.go rename to examples/clients/responsebody/model_examplepb_repeated_response_body_out.go index 18977ab5732..8ca6f95e154 100644 --- a/examples/clients/responsebody/examplepb_repeated_response_body_out.go +++ b/examples/clients/responsebody/model_examplepb_repeated_response_body_out.go @@ -1,16 +1,14 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody type ExamplepbRepeatedResponseBodyOut struct { - Response []ExamplepbRepeatedResponseBodyOutResponse `json:"response,omitempty"` } diff --git a/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go b/examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go similarity index 62% rename from examples/clients/responsebody/examplepb_repeated_response_body_out_response.go rename to examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go index 8c5c20bac24..9b15a6a5b2c 100644 --- a/examples/clients/responsebody/examplepb_repeated_response_body_out_response.go +++ b/examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go @@ -1,18 +1,15 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody type ExamplepbRepeatedResponseBodyOutResponse struct { - Data string `json:"data,omitempty"` - - Type_ ResponseResponseType `json:"type,omitempty"` + Type_ *ResponseResponseType `json:"type,omitempty"` } diff --git a/examples/clients/responsebody/examplepb_repeated_response_strings.go b/examples/clients/responsebody/model_examplepb_repeated_response_strings.go similarity index 70% rename from examples/clients/responsebody/examplepb_repeated_response_strings.go rename to examples/clients/responsebody/model_examplepb_repeated_response_strings.go index 94a35e877ab..f25b08479ba 100644 --- a/examples/clients/responsebody/examplepb_repeated_response_strings.go +++ b/examples/clients/responsebody/model_examplepb_repeated_response_strings.go @@ -1,16 +1,14 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody type ExamplepbRepeatedResponseStrings struct { - Values []string `json:"values,omitempty"` } diff --git a/examples/clients/responsebody/examplepb_response_body_out.go b/examples/clients/responsebody/model_examplepb_response_body_out.go similarity index 54% rename from examples/clients/responsebody/examplepb_response_body_out.go rename to examples/clients/responsebody/model_examplepb_response_body_out.go index 72fae8bd52a..4775292258a 100644 --- a/examples/clients/responsebody/examplepb_response_body_out.go +++ b/examples/clients/responsebody/model_examplepb_response_body_out.go @@ -1,16 +1,14 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody type ExamplepbResponseBodyOut struct { - - Response ExamplepbResponseBodyOutResponse `json:"response,omitempty"` + Response *ExamplepbResponseBodyOutResponse `json:"response,omitempty"` } diff --git a/examples/clients/responsebody/examplepb_response_body_out_response.go b/examples/clients/responsebody/model_examplepb_response_body_out_response.go similarity index 69% rename from examples/clients/responsebody/examplepb_response_body_out_response.go rename to examples/clients/responsebody/model_examplepb_response_body_out_response.go index ca14fa3e6a1..8ef1dd1469e 100644 --- a/examples/clients/responsebody/examplepb_response_body_out_response.go +++ b/examples/clients/responsebody/model_examplepb_response_body_out_response.go @@ -1,16 +1,14 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody type ExamplepbResponseBodyOutResponse struct { - Data string `json:"data,omitempty"` } diff --git a/examples/clients/responsebody/model_response_response_type.go b/examples/clients/responsebody/model_response_response_type.go new file mode 100644 index 00000000000..4db9360c72f --- /dev/null +++ b/examples/clients/responsebody/model_response_response_type.go @@ -0,0 +1,19 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +type ResponseResponseType string + +// List of ResponseResponseType +const ( + UNKNOWN_ResponseResponseType ResponseResponseType = "UNKNOWN" + A_ResponseResponseType ResponseResponseType = "A" + B_ResponseResponseType ResponseResponseType = "B" +) diff --git a/examples/clients/responsebody/api_response.go b/examples/clients/responsebody/response.go similarity index 76% rename from examples/clients/responsebody/api_response.go rename to examples/clients/responsebody/response.go index 225d12176b3..1fdaa337c51 100644 --- a/examples/clients/responsebody/api_response.go +++ b/examples/clients/responsebody/response.go @@ -1,11 +1,10 @@ -/* +/* * examples/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package responsebody @@ -16,15 +15,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/clients/responsebody/response_body_service_api.go b/examples/clients/responsebody/response_body_service_api.go deleted file mode 100644 index 000cecd6ddd..00000000000 --- a/examples/clients/responsebody/response_body_service_api.go +++ /dev/null @@ -1,219 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type ResponseBodyServiceApi struct { - Configuration *Configuration -} - -func NewResponseBodyServiceApi() *ResponseBodyServiceApi { - configuration := NewConfiguration() - return &ResponseBodyServiceApi{ - Configuration: configuration, - } -} - -func NewResponseBodyServiceApiWithBasePath(basePath string) *ResponseBodyServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &ResponseBodyServiceApi{ - Configuration: configuration, - } -} - -/** - * - * - * @param data - * @return *ExamplepbResponseBodyOutResponse - */ -func (a ResponseBodyServiceApi) GetResponseBody(data string) (*ExamplepbResponseBodyOutResponse, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/responsebody/{data}" - localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbResponseBodyOutResponse) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetResponseBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param data - * @return []ExamplepbRepeatedResponseBodyOutResponse - */ -func (a ResponseBodyServiceApi) ListResponseBodies(data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/responsebodies/{data}" - localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new([]ExamplepbRepeatedResponseBodyOutResponse) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "ListResponseBodies", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return *successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return *successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param data - * @return []string - */ -func (a ResponseBodyServiceApi) ListResponseStrings(data string) ([]string, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/responsestrings/{data}" - localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new([]string) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "ListResponseStrings", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return *successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return *successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/responsebody/response_response_type.go b/examples/clients/responsebody/response_response_type.go deleted file mode 100644 index 1c986fb7f92..00000000000 --- a/examples/clients/responsebody/response_response_type.go +++ /dev/null @@ -1,14 +0,0 @@ -/* - * examples/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package responsebody - -type ResponseResponseType struct { -} diff --git a/examples/clients/unannotatedecho/.swagger-codegen/VERSION b/examples/clients/unannotatedecho/.swagger-codegen/VERSION new file mode 100644 index 00000000000..752a79ef362 --- /dev/null +++ b/examples/clients/unannotatedecho/.swagger-codegen/VERSION @@ -0,0 +1 @@ +2.4.8 \ No newline at end of file diff --git a/examples/clients/unannotatedecho/BUILD.bazel b/examples/clients/unannotatedecho/BUILD.bazel index 611c6c7052d..06348263dc7 100644 --- a/examples/clients/unannotatedecho/BUILD.bazel +++ b/examples/clients/unannotatedecho/BUILD.bazel @@ -5,12 +5,15 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = [ - "api_client.go", - "api_response.go", + "api_unannotated_echo_service.go", + "client.go", "configuration.go", - "examplepb_unannotated_simple_message.go", - "unannotated_echo_service_api.go", + "model_examplepb_unannotated_simple_message.go", + "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho", - deps = ["@com_github_go_resty_resty//:go_default_library"], + deps = [ + "@com_github_antihax_optional//:go_default_library", + "@org_golang_x_oauth2//:go_default_library", + ], ) diff --git a/examples/clients/unannotatedecho/api/swagger.yaml b/examples/clients/unannotatedecho/api/swagger.yaml new file mode 100644 index 00000000000..ca2d21a58b6 --- /dev/null +++ b/examples/clients/unannotatedecho/api/swagger.yaml @@ -0,0 +1,135 @@ +--- +swagger: "2.0" +info: + description: "Unannotated Echo Service\nSimilar to echo_service.proto but without\ + \ annotations. See\nunannotated_echo_service.yaml for the equivalent of the annotations\ + \ in\ngRPC API configuration format.\n\nEcho Service API consists of a single\ + \ service which returns\na message." + version: "version not set" + title: "examples/proto/examplepb/unannotated_echo_service.proto" +schemes: +- "http" +- "https" +consumes: +- "application/json" +produces: +- "application/json" +paths: + /v1/example/echo/{id}: + post: + tags: + - "UnannotatedEchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + /v1/example/echo/{id}/{num}: + get: + tags: + - "UnannotatedEchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo2" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + - name: "num" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Num" + - name: "duration" + in: "query" + required: false + type: "string" + x-exportParamName: "Duration" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + /v1/example/echo_body: + post: + tags: + - "UnannotatedEchoService" + summary: "EchoBody method receives a simple message and returns it." + operationId: "EchoBody" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + /v1/example/echo_delete: + delete: + tags: + - "UnannotatedEchoService" + summary: "EchoDelete method receives a simple message and returns it." + operationId: "EchoDelete" + parameters: + - name: "id" + in: "query" + description: "Id represents the message identifier." + required: false + type: "string" + x-exportParamName: "Id" + x-optionalDataType: "String" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "duration" + in: "query" + required: false + type: "string" + x-exportParamName: "Duration" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbUnannotatedSimpleMessage" +definitions: + examplepbUnannotatedSimpleMessage: + type: "object" + properties: + id: + type: "string" + description: "Id represents the message identifier." + num: + type: "string" + format: "int64" + duration: + type: "string" + description: "UnannotatedSimpleMessage represents a simple message sent to the\ + \ unannotated Echo service." + example: + duration: "duration" + num: "num" + id: "id" diff --git a/examples/clients/unannotatedecho/api_client.go b/examples/clients/unannotatedecho/api_client.go deleted file mode 100644 index aa4c1f14e42..00000000000 --- a/examples/clients/unannotatedecho/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * examples/proto/examplepb/unannotated_echo_service.proto - * - * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package unannotatedecho - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { - delimiter := "" - switch collectionFormat { - case "pipes": - delimiter = "|" - case "ssv": - delimiter = " " - case "tsv": - delimiter = "\t" - case "csv": - delimiter = "," - } - - if reflect.TypeOf(obj).Kind() == reflect.Slice { - return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") - } - - return fmt.Sprintf("%v", obj) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/clients/unannotatedecho/api_unannotated_echo_service.go new file mode 100644 index 00000000000..7bbd4f9e92f --- /dev/null +++ b/examples/clients/unannotatedecho/api_unannotated_echo_service.go @@ -0,0 +1,412 @@ +/* + * examples/proto/examplepb/unannotated_echo_service.proto + * + * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package unannotatedecho + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" + "github.com/antihax/optional" +) + +// Linger please +var ( + _ context.Context +) + +type UnannotatedEchoServiceApiService service + +/* +UnannotatedEchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + +@return ExamplepbUnannotatedSimpleMessage +*/ +func (a *UnannotatedEchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbUnannotatedSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbUnannotatedSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +UnannotatedEchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + * @param num + * @param optional nil or *Echo2Opts - Optional Parameters: + * @param "Duration" (optional.String) - + +@return ExamplepbUnannotatedSimpleMessage +*/ + +type Echo2Opts struct { + Duration optional.String +} + +func (a *UnannotatedEchoServiceApiService) Echo2(ctx context.Context, id string, num string, localVarOptionals *Echo2Opts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbUnannotatedSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}/{num}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Duration.IsSet() { + localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbUnannotatedSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +UnannotatedEchoServiceApiService EchoBody method receives a simple message and returns it. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return ExamplepbUnannotatedSimpleMessage +*/ +func (a *UnannotatedEchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbUnannotatedSimpleMessage) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbUnannotatedSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_body" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbUnannotatedSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +UnannotatedEchoServiceApiService EchoDelete method receives a simple message and returns it. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *EchoDeleteOpts - Optional Parameters: + * @param "Id" (optional.String) - Id represents the message identifier. + * @param "Num" (optional.String) - + * @param "Duration" (optional.String) - + +@return ExamplepbUnannotatedSimpleMessage +*/ + +type EchoDeleteOpts struct { + Id optional.String + Num optional.String + Duration optional.String +} + +func (a *UnannotatedEchoServiceApiService) EchoDelete(ctx context.Context, localVarOptionals *EchoDeleteOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbUnannotatedSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_delete" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Id.IsSet() { + localVarQueryParams.Add("id", parameterToString(localVarOptionals.Id.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Duration.IsSet() { + localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbUnannotatedSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/clients/unannotatedecho/client.go b/examples/clients/unannotatedecho/client.go new file mode 100644 index 00000000000..a7cdc750e4e --- /dev/null +++ b/examples/clients/unannotatedecho/client.go @@ -0,0 +1,464 @@ +/* + * examples/proto/examplepb/unannotated_echo_service.proto + * + * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package unannotatedecho + +import ( + "bytes" + "context" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the examples/proto/examplepb/unannotated_echo_service.proto API vversion not set +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + UnannotatedEchoServiceApi *UnannotatedEchoServiceApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.UnannotatedEchoServiceApi = (*UnannotatedEchoServiceApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return fmt.Sprintf("%v", obj) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { + if strings.Contains(contentType, "application/xml") { + if err = xml.Unmarshal(b, v); err != nil { + return err + } + return nil + } else if strings.Contains(contentType, "application/json") { + if err = json.Unmarshal(b, v); err != nil { + return err + } + return nil + } + return errors.New("undefined response type") +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if s, ok := body.(*string); ok { + _, err = bodyBuf.WriteString(*s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} + +// GenericSwaggerError Provides access to the body, error and model on returned errors. +type GenericSwaggerError struct { + body []byte + error string + model interface{} +} + +// Error returns non-empty string if there was an error. +func (e GenericSwaggerError) Error() string { + return e.error +} + +// Body returns the raw bytes of the response +func (e GenericSwaggerError) Body() []byte { + return e.body +} + +// Model returns the unpacked model of the error +func (e GenericSwaggerError) Model() interface{} { + return e.model +} \ No newline at end of file diff --git a/examples/clients/unannotatedecho/configuration.go b/examples/clients/unannotatedecho/configuration.go index d8ed5f04501..1d0dadff96c 100644 --- a/examples/clients/unannotatedecho/configuration.go +++ b/examples/clients/unannotatedecho/configuration.go @@ -1,67 +1,72 @@ -/* +/* * examples/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package unannotatedecho import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/unannotatedecho/examplepb_unannotated_simple_message.go b/examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go similarity index 84% rename from examples/clients/unannotatedecho/examplepb_unannotated_simple_message.go rename to examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go index 7791baa682b..c400daa0b55 100644 --- a/examples/clients/unannotatedecho/examplepb_unannotated_simple_message.go +++ b/examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go @@ -1,22 +1,18 @@ -/* +/* * examples/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package unannotatedecho // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type ExamplepbUnannotatedSimpleMessage struct { - // Id represents the message identifier. Id string `json:"id,omitempty"` - Num string `json:"num,omitempty"` - Duration string `json:"duration,omitempty"` } diff --git a/examples/clients/unannotatedecho/api_response.go b/examples/clients/unannotatedecho/response.go similarity index 79% rename from examples/clients/unannotatedecho/api_response.go rename to examples/clients/unannotatedecho/response.go index 8d7af71022e..3121acc8950 100644 --- a/examples/clients/unannotatedecho/api_response.go +++ b/examples/clients/unannotatedecho/response.go @@ -1,11 +1,10 @@ -/* +/* * examples/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package unannotatedecho @@ -16,15 +15,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/clients/unannotatedecho/unannotated_echo_service_api.go b/examples/clients/unannotatedecho/unannotated_echo_service_api.go deleted file mode 100644 index cb3efdde4d4..00000000000 --- a/examples/clients/unannotatedecho/unannotated_echo_service_api.go +++ /dev/null @@ -1,290 +0,0 @@ -/* - * examples/proto/examplepb/unannotated_echo_service.proto - * - * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package unannotatedecho - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type UnannotatedEchoServiceApi struct { - Configuration *Configuration -} - -func NewUnannotatedEchoServiceApi() *UnannotatedEchoServiceApi { - configuration := NewConfiguration() - return &UnannotatedEchoServiceApi{ - Configuration: configuration, - } -} - -func NewUnannotatedEchoServiceApiWithBasePath(basePath string) *UnannotatedEchoServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &UnannotatedEchoServiceApi{ - Configuration: configuration, - } -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @return *ExamplepbUnannotatedSimpleMessage - */ -func (a UnannotatedEchoServiceApi) Echo(id string) (*ExamplepbUnannotatedSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbUnannotatedSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id Id represents the message identifier. - * @param num - * @param duration - * @return *ExamplepbUnannotatedSimpleMessage - */ -func (a UnannotatedEchoServiceApi) Echo2(id string, num string, duration string) (*ExamplepbUnannotatedSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}/{num}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("duration", a.Configuration.APIClient.ParameterToString(duration, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbUnannotatedSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * EchoBody method receives a simple message and returns it. - * - * @param body - * @return *ExamplepbUnannotatedSimpleMessage - */ -func (a UnannotatedEchoServiceApi) EchoBody(body ExamplepbUnannotatedSimpleMessage) (*ExamplepbUnannotatedSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo_body" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbUnannotatedSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "EchoBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * EchoDelete method receives a simple message and returns it. - * - * @param id Id represents the message identifier. - * @param num - * @param duration - * @return *ExamplepbUnannotatedSimpleMessage - */ -func (a UnannotatedEchoServiceApi) EchoDelete(id string, num string, duration string) (*ExamplepbUnannotatedSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Delete") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo_delete" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("id", a.Configuration.APIClient.ParameterToString(id, "")) - localVarQueryParams.Add("num", a.Configuration.APIClient.ParameterToString(num, "")) - localVarQueryParams.Add("duration", a.Configuration.APIClient.ParameterToString(duration, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbUnannotatedSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "EchoDelete", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/integration/client_test.go b/examples/integration/client_test.go index 90431625380..8ca2807d97b 100644 --- a/examples/integration/client_test.go +++ b/examples/integration/client_test.go @@ -1,7 +1,7 @@ package integration_test import ( - "reflect" + "context" "testing" "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe" @@ -9,19 +9,19 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho" ) -func TestClientIntegration(t *testing.T) { -} - func TestEchoClient(t *testing.T) { if testing.Short() { t.Skip() return } - cl := echo.NewEchoServiceApiWithBasePath("http://localhost:8080") - resp, _, err := cl.Echo("foo") + cfg := echo.NewConfiguration() + cfg.BasePath = "http://localhost:8080" + + cl := echo.NewAPIClient(cfg) + resp, _, err := cl.EchoServiceApi.Echo(context.Background(), "foo") if err != nil { - t.Errorf(`cl.Echo("foo") failed with %v; want success`, err) + t.Errorf(`cl.EchoServiceApi.Echo("foo") failed with %v; want success`, err) } if got, want := resp.Id, "foo"; got != want { t.Errorf("resp.Id = %q; want %q", got, want) @@ -34,9 +34,12 @@ func TestEchoBodyClient(t *testing.T) { return } - cl := echo.NewEchoServiceApiWithBasePath("http://localhost:8080") + cfg := echo.NewConfiguration() + cfg.BasePath = "http://localhost:8080" + + cl := echo.NewAPIClient(cfg) req := echo.ExamplepbSimpleMessage{Id: "foo"} - resp, _, err := cl.EchoBody(req) + resp, _, err := cl.EchoServiceApi.EchoBody(context.Background(), req) if err != nil { t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) } @@ -51,12 +54,19 @@ func TestAbitOfEverythingClient(t *testing.T) { return } - cl := abe.NewABitOfEverythingServiceApiWithBasePath("http://localhost:8080") + cfg := abe.NewConfiguration() + cfg.BasePath = "http://localhost:8080" + + cl := abe.NewAPIClient(cfg) + testABEClientCreate(t, cl) - testABEClientCreateBody(t, cl) } -func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { +func testABEClientCreate(t *testing.T, cl *abe.APIClient) { + enumZero := abe.ZERO_ExamplepbNumericEnum + enumPath := abe.ABC_PathenumPathEnum + messagePath := abe.JKL_MessagePathEnumNestedPathEnum + want := &abe.ExamplepbABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -73,12 +83,13 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { Sint32Value: 2147483647, Sint64Value: "4611686018427387903", NonConventionalNameValue: "camelCase", - EnumValue: abe.ExamplepbNumericEnum{}, - PathEnumValue: abe.PathenumPathEnum{}, - NestedPathEnumValue: abe.MessagePathEnumNestedPathEnum{}, - EnumValueAnnotation: abe.ExamplepbNumericEnum{}, + EnumValue: &enumZero, + PathEnumValue: &enumPath, + NestedPathEnumValue: &messagePath, + EnumValueAnnotation: &enumZero, } - resp, _, err := cl.Create( + resp, _, err := cl.ABitOfEverythingServiceApi.Create( + context.Background(), want.FloatValue, want.DoubleValue, want.Int64Value, @@ -106,70 +117,63 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { t.Errorf("resp.Uuid is empty; want not empty") } resp.Uuid = "" - if got := resp; !reflect.DeepEqual(got, want) { - t.Errorf("resp = %#v; want %#v", got, want) - } -} -func testABEClientCreateBody(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { - t.Log("TODO: support enum") - return - - want := abe.ExamplepbABitOfEverything{ - FloatValue: 1.5, - DoubleValue: 2.5, - Int64Value: "4294967296", - Uint64Value: "9223372036854775807", - Int32Value: -2147483648, - Fixed64Value: "9223372036854775807", - Fixed32Value: 4294967295, - BoolValue: true, - StringValue: "strprefix/foo", - Uint32Value: 4294967295, - Sfixed32Value: 2147483647, - Sfixed64Value: "-4611686018427387904", - Sint32Value: 2147483647, - Sint64Value: "4611686018427387903", - NonConventionalNameValue: "camelCase", - EnumValue: abe.ExamplepbNumericEnum{}, - PathEnumValue: abe.PathenumPathEnum{}, - NestedPathEnumValue: abe.MessagePathEnumNestedPathEnum{}, - - Nested: []abe.ABitOfEverythingNested{ - { - Name: "bar", - Amount: 10, - }, - { - Name: "baz", - Amount: 20, - }, - }, - RepeatedStringValue: []string{"a", "b", "c"}, - OneofString: "x", - MapValue: map[string]abe.ExamplepbNumericEnum{ - // "a": abe.ExamplepbNumericEnum_ONE, - // "b": abe.ExamplepbNumericEnum_ZERO, - }, - MappedStringValue: map[string]string{ - "a": "x", - "b": "y", - }, - MappedNestedValue: map[string]abe.ABitOfEverythingNested{ - "a": {Name: "x", Amount: 1}, - "b": {Name: "y", Amount: 2}, - }, - } - resp, _, err := cl.CreateBody(want) - if err != nil { - t.Errorf("cl.CreateBody(%#v) failed with %v; want success", want, err) + if resp.FloatValue != want.FloatValue { + t.Error("float") } - if resp.Uuid == "" { - t.Errorf("resp.Uuid is empty; want not empty") + if resp.DoubleValue != want.DoubleValue { + t.Error("double") } - resp.Uuid = "" - if got := resp; !reflect.DeepEqual(got, want) { - t.Errorf("resp = %#v; want %#v", got, want) + if resp.Int64Value != want.Int64Value { + t.Error("double") + } + if resp.Uint64Value != want.Uint64Value { + t.Error("double") + } + if resp.Int32Value != want.Int32Value { + t.Error("double") + } + if resp.Fixed32Value != want.Fixed32Value { + t.Error("bool") + } + if resp.Fixed64Value != want.Fixed64Value { + t.Error("bool") + } + if resp.BoolValue != want.BoolValue { + t.Error("bool") + } + if resp.StringValue != want.StringValue { + t.Error("bool") + } + if resp.Uint32Value != want.Uint32Value { + t.Error("bool") + } + if resp.Sfixed32Value != want.Sfixed32Value { + t.Error("bool") + } + if resp.Sfixed64Value != want.Sfixed64Value { + t.Error("bool") + } + if resp.Sint32Value != want.Sint32Value { + t.Error("bool") + } + if resp.Sint64Value != want.Sint64Value { + t.Error("enum") + } + if resp.NonConventionalNameValue != want.NonConventionalNameValue { + t.Error("enum") + } + if resp.EnumValue.String() != want.EnumValue.String() { + t.Error("enum") + } + if resp.PathEnumValue.String() != want.PathEnumValue.String() { + t.Error("path enum") + } + if resp.NestedPathEnumValue.String() != want.NestedPathEnumValue.String() { + t.Error("nested path enum") + } + if resp.NestedPathEnumValue.String() != want.NestedPathEnumValue.String() { + t.Error("nested path enum") } } @@ -179,8 +183,12 @@ func TestUnannotatedEchoClient(t *testing.T) { return } - cl := unannotatedecho.NewUnannotatedEchoServiceApiWithBasePath("http://localhost:8080") - resp, _, err := cl.Echo("foo") + cfg := unannotatedecho.NewConfiguration() + cfg.BasePath = "http://localhost:8080" + + cl := unannotatedecho.NewAPIClient(cfg) + + resp, _, err := cl.UnannotatedEchoServiceApi.Echo(context.Background(), "foo") if err != nil { t.Errorf(`cl.Echo("foo") failed with %v; want success`, err) } @@ -195,9 +203,13 @@ func TestUnannotatedEchoBodyClient(t *testing.T) { return } - cl := unannotatedecho.NewUnannotatedEchoServiceApiWithBasePath("http://localhost:8080") + cfg := unannotatedecho.NewConfiguration() + cfg.BasePath = "http://localhost:8080" + + cl := unannotatedecho.NewAPIClient(cfg) + req := unannotatedecho.ExamplepbUnannotatedSimpleMessage{Id: "foo"} - resp, _, err := cl.EchoBody(req) + resp, _, err := cl.UnannotatedEchoServiceApi.EchoBody(context.Background(), req) if err != nil { t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) } diff --git a/examples/integration/fieldmask_test.go b/examples/integration/fieldmask_test.go index 2ebe44ff05c..94131079cea 100644 --- a/examples/integration/fieldmask_test.go +++ b/examples/integration/fieldmask_test.go @@ -50,6 +50,11 @@ func fieldMaskString(fm *field_mask.FieldMask) string { // to import examplepb for the descriptor, which would result in a circular // dependency since examplepb imports runtime from the pb.gw.go files func TestFieldMaskFromRequestBodyWithDescriptor(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) jsonInput := `{"id":"foo", "thing":{"subThing":{"sub_value":"bar"}}}` expected := newFieldMask("id", "thing.subThing.sub_value") @@ -64,6 +69,11 @@ func TestFieldMaskFromRequestBodyWithDescriptor(t *testing.T) { } func TestFieldMaskFromRequestBodyWithJsonNames(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessageWithJSONNames)) jsonInput := `{"ID":"foo", "Thingy":{"SubThing":{"sub_Value":"bar"}}}` expected := newFieldMask("id", "thing.subThing.sub_value") @@ -81,6 +91,11 @@ func TestFieldMaskFromRequestBodyWithJsonNames(t *testing.T) { var result *field_mask.FieldMask func BenchmarkABEFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { + if testing.Short() { + b.Skip() + return + } + _, md := descriptor.ForMessage(new(examplepb.ABitOfEverything)) input := `{` + `"single_nested": {"name": "bar",` + @@ -143,6 +158,11 @@ func BenchmarkABEFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { } func BenchmarkNonStandardFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { + if testing.Short() { + b.Skip() + return + } + _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) input := `{` + `"id": "foo",` + diff --git a/examples/integration/integration_test.go b/examples/integration/integration_test.go index febbb75b023..bdc5fd23777 100644 --- a/examples/integration/integration_test.go +++ b/examples/integration/integration_test.go @@ -48,6 +48,11 @@ func TestEcho(t *testing.T) { } func TestForwardResponseOption(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -670,6 +675,11 @@ func testABELookup(t *testing.T, port int) { // Then, issue a PATCH request updating only the string_value // Then, GET the resource and verify that string_value is changed, but int32_value isn't func TestABEPatch(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + port := 8080 // create a record with a known string_value and int32_value @@ -709,6 +719,11 @@ func TestABEPatch(t *testing.T) { // TestABEPatchBody demonstrates the ability to specify an update mask within the request body. // This binding does not use an automatically generated update_mask. func TestABEPatchBody(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + port := 8080 for _, tc := range []struct { @@ -1264,6 +1279,11 @@ func testABERepeated(t *testing.T, port int) { } func TestTimeout(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080/v2/example/timeout" req, err := http.NewRequest("GET", apiURL, nil) if err != nil { @@ -1284,6 +1304,11 @@ func TestTimeout(t *testing.T) { } func TestErrorWithDetails(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080/v2/example/errorwithdetails" resp, err := http.Get(apiURL) if err != nil { @@ -1344,6 +1369,11 @@ func TestErrorWithDetails(t *testing.T) { } func TestPostWithEmptyBody(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080/v2/example/postwithemptybody/name" rep, err := http.Post(apiURL, "application/json", nil) @@ -1360,6 +1390,11 @@ func TestPostWithEmptyBody(t *testing.T) { } func TestUnknownPath(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080" resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { @@ -1380,6 +1415,11 @@ func TestUnknownPath(t *testing.T) { } func TestMethodNotAllowed(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080/v1/example/echo/myid" resp, err := http.Get(apiURL) if err != nil { @@ -1400,6 +1440,11 @@ func TestMethodNotAllowed(t *testing.T) { } func TestInvalidArgument(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8080/v1/example/echo/myid/not_int64" resp, err := http.Get(apiURL) if err != nil { @@ -1544,6 +1589,11 @@ func testResponseStrings(t *testing.T, port int) { } func TestRequestQueryParams(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + port := 8080 formValues := url.Values{} @@ -1629,6 +1679,11 @@ func TestRequestQueryParams(t *testing.T) { } func TestNonStandardNames(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() diff --git a/examples/integration/proto_error_test.go b/examples/integration/proto_error_test.go index 5aa263b3df4..80b92638199 100644 --- a/examples/integration/proto_error_test.go +++ b/examples/integration/proto_error_test.go @@ -23,6 +23,11 @@ func runServer(ctx context.Context, t *testing.T, port uint16) { } func TestWithProtoErrorHandler(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -114,6 +119,11 @@ func testABELookupNotFoundWithProtoError(t *testing.T, port uint16) { } func TestUnknownPathWithProtoError(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -160,6 +170,11 @@ func TestUnknownPathWithProtoError(t *testing.T) { } func TestMethodNotAllowedWithProtoError(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index e8df7423c79..bbfbc52d053 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -820,228 +820,228 @@ func init() { } var fileDescriptor_3978364c010e812a = []byte{ - // 3529 bytes of a gzipped FileDescriptorProto + // 3523 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, - 0x7e, 0xd7, 0x72, 0x25, 0x59, 0x1a, 0x7d, 0x8f, 0x2c, 0x5b, 0xa6, 0x95, 0x68, 0x4c, 0x3b, 0x2f, - 0x6b, 0x3e, 0x93, 0x2b, 0xad, 0x94, 0xc4, 0x66, 0xfa, 0x92, 0x90, 0x92, 0xec, 0xc8, 0x4e, 0x64, - 0x65, 0xed, 0xb8, 0xa9, 0x5f, 0xfc, 0xd4, 0x21, 0x39, 0x14, 0xd7, 0xe2, 0xee, 0xec, 0xdb, 0x9d, - 0x95, 0x45, 0xab, 0x6c, 0x1f, 0xda, 0xa2, 0x05, 0xfa, 0x6e, 0x7c, 0xfd, 0x7e, 0x68, 0x2f, 0x45, - 0x51, 0xa0, 0xe8, 0xa9, 0x40, 0x4f, 0x05, 0xda, 0x4b, 0x6f, 0x3d, 0xb4, 0x48, 0x81, 0xa2, 0x87, - 0xf6, 0xd4, 0x9e, 0x7b, 0x69, 0x11, 0xa0, 0x87, 0x7e, 0x60, 0x66, 0x77, 0xc9, 0xdd, 0x25, 0x69, - 0x99, 0x76, 0x91, 0xe4, 0x10, 0xef, 0xcc, 0xfc, 0x3f, 0x7e, 0xff, 0x99, 0xff, 0xfc, 0x3f, 0x86, - 0x02, 0x1a, 0x39, 0xc1, 0xa6, 0xdd, 0x20, 0xae, 0x6a, 0x3b, 0x94, 0x51, 0x35, 0x18, 0xda, 0x65, - 0x15, 0x1f, 0x94, 0x0d, 0x76, 0x40, 0x6b, 0x07, 0xe4, 0x98, 0x38, 0x4d, 0x56, 0x37, 0xac, 0xc3, - 0xbc, 0xa0, 0x81, 0xab, 0x87, 0x8e, 0x5d, 0xc9, 0x1f, 0x62, 0x46, 0x9e, 0xe1, 0x66, 0x3e, 0x14, - 0x90, 0xef, 0xb0, 0xa6, 0x57, 0x0e, 0x29, 0x3d, 0x6c, 0x10, 0x15, 0xdb, 0x86, 0x8a, 0x2d, 0x8b, - 0x32, 0xcc, 0x0c, 0x6a, 0xb9, 0x3e, 0x7b, 0x1a, 0x05, 0xab, 0x62, 0x54, 0xf6, 0x6a, 0x6a, 0xcd, - 0x20, 0x8d, 0xea, 0x81, 0x89, 0xdd, 0xa3, 0x80, 0xe2, 0x72, 0x92, 0x82, 0x98, 0x36, 0x6b, 0x06, - 0x8b, 0x6f, 0x26, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x07, 0xeb, 0x6f, 0x27, 0x2c, 0xb2, 0x31, 0xab, - 0x13, 0xcb, 0x33, 0xc5, 0xc7, 0x01, 0xff, 0x0a, 0x71, 0x24, 0x08, 0x5d, 0xaf, 0xac, 0x9a, 0xc4, - 0x75, 0xf1, 0x21, 0x09, 0x28, 0xae, 0xf4, 0x52, 0x68, 0x09, 0x92, 0xd5, 0x24, 0x1a, 0x66, 0x98, - 0xc4, 0x65, 0xd8, 0xb4, 0x03, 0x82, 0x1b, 0xe2, 0x9f, 0x4a, 0xee, 0x90, 0x58, 0x39, 0xf7, 0x19, - 0x3e, 0x3c, 0x24, 0x8e, 0x4a, 0x6d, 0xb1, 0x1f, 0xbd, 0x7b, 0x93, 0xf9, 0xfb, 0xcb, 0x60, 0xbe, - 0x58, 0x32, 0xd8, 0xfd, 0xda, 0x4e, 0x67, 0xd7, 0xe1, 0x13, 0x30, 0xe3, 0x1a, 0xd6, 0x61, 0x83, - 0x1c, 0x58, 0xc4, 0x65, 0xa4, 0xba, 0x7c, 0x09, 0x49, 0xca, 0x94, 0x76, 0x33, 0x7f, 0xc6, 0x39, - 0xe4, 0x93, 0x92, 0xf2, 0x7b, 0x82, 0x5f, 0x9f, 0xf6, 0xc5, 0xf9, 0x23, 0x58, 0x07, 0xa3, 0x9e, - 0x67, 0x54, 0x97, 0x25, 0x24, 0x29, 0x93, 0xa5, 0x87, 0xed, 0xe2, 0x67, 0x3f, 0x92, 0xa4, 0xdf, - 0x90, 0xee, 0x7d, 0x1f, 0xe7, 0x6a, 0xc5, 0xdc, 0xed, 0xb5, 0xdc, 0xad, 0x27, 0xa7, 0x37, 0x5b, - 0xb9, 0xe8, 0x70, 0x73, 0x98, 0xe1, 0xba, 0xd6, 0xd2, 0x85, 0x06, 0xb8, 0x0f, 0xc6, 0x03, 0x0b, - 0x52, 0x48, 0x7e, 0x2d, 0x0b, 0x02, 0x39, 0xf0, 0x2e, 0x98, 0xaa, 0x35, 0x28, 0x66, 0x07, 0xc7, - 0xb8, 0xe1, 0x91, 0x65, 0x19, 0x49, 0x4a, 0xaa, 0x74, 0xbd, 0x5d, 0xfc, 0x8e, 0xb6, 0x70, 0x9b, - 0xcf, 0x23, 0x31, 0x8f, 0x84, 0x87, 0x15, 0xe4, 0xb5, 0xbc, 0xf6, 0x95, 0x14, 0x65, 0xd0, 0x81, - 0x18, 0x3c, 0xe2, 0xdf, 0xf0, 0x0a, 0x98, 0xae, 0x52, 0xaf, 0xdc, 0x20, 0x81, 0xb0, 0x51, 0x24, - 0x29, 0x92, 0x3e, 0xe5, 0xcf, 0xf9, 0x24, 0xab, 0x60, 0xca, 0xb0, 0xd8, 0xbb, 0x9b, 0x01, 0xc5, - 0x18, 0x92, 0x14, 0x59, 0x07, 0x62, 0xaa, 0x23, 0xc3, 0x8b, 0x52, 0x8c, 0x23, 0x49, 0x19, 0xd5, - 0xa7, 0xbc, 0x08, 0x89, 0x2f, 0x63, 0x43, 0x0b, 0x28, 0xce, 0x21, 0x49, 0x19, 0x13, 0x32, 0x36, - 0x34, 0x9f, 0xe0, 0x2a, 0x98, 0xa9, 0x19, 0x27, 0xa4, 0xda, 0x11, 0x32, 0x81, 0x24, 0x65, 0x5c, - 0x9f, 0x0e, 0x26, 0xe3, 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xce, 0x05, 0x44, 0xa1, 0xa4, 0x37, - 0x00, 0x28, 0x53, 0xda, 0x08, 0x28, 0x00, 0x92, 0x94, 0x09, 0x7d, 0x92, 0xcf, 0x74, 0xc0, 0xba, - 0xcc, 0x31, 0xac, 0xc3, 0x80, 0x60, 0x8a, 0x3b, 0x80, 0x3e, 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, - 0x8c, 0xb8, 0x01, 0xc5, 0x1b, 0x48, 0x52, 0xa6, 0x75, 0x20, 0xa6, 0x62, 0x06, 0x77, 0x60, 0xcc, - 0x20, 0x49, 0x99, 0xf1, 0x0d, 0x0e, 0x51, 0xdc, 0x03, 0x80, 0xdf, 0xba, 0x80, 0x60, 0x16, 0x49, - 0xca, 0xac, 0x76, 0xe3, 0xcc, 0x93, 0xdf, 0xf3, 0x4c, 0xe2, 0x18, 0x95, 0x1d, 0xcb, 0x33, 0xf5, - 0x49, 0xce, 0xef, 0x0b, 0xdb, 0x07, 0x73, 0x9d, 0x7b, 0x1c, 0x48, 0x7c, 0x53, 0x48, 0x54, 0x06, - 0x48, 0x0c, 0xaf, 0x7f, 0x7e, 0x1f, 0xb3, 0xba, 0x90, 0x36, 0x63, 0x07, 0x5f, 0xbe, 0x44, 0x17, - 0x5c, 0xf0, 0x9d, 0xe9, 0x20, 0x29, 0x78, 0x55, 0x08, 0xfe, 0xe0, 0x2c, 0xc1, 0x9f, 0xfa, 0x01, - 0x21, 0x94, 0x1f, 0xb8, 0x68, 0x47, 0xdd, 0xa2, 0x15, 0x1b, 0xfb, 0x4a, 0xdf, 0x02, 0xb3, 0x6e, - 0xfc, 0xfc, 0xe6, 0x90, 0xa4, 0xcc, 0xe9, 0x33, 0x6e, 0xec, 0x00, 0x3b, 0x64, 0x1d, 0x5f, 0x98, - 0x47, 0x92, 0x32, 0x1f, 0x92, 0x45, 0xbc, 0xce, 0x8d, 0x1e, 0xc2, 0x02, 0x92, 0x94, 0x05, 0x7d, - 0xca, 0x8d, 0x1c, 0x42, 0x40, 0xd2, 0x91, 0x03, 0x91, 0xa4, 0x40, 0x9f, 0x24, 0x94, 0xa2, 0x81, - 0x25, 0x87, 0xd8, 0x04, 0xf3, 0xad, 0x88, 0xf9, 0xc5, 0x22, 0x92, 0x95, 0x49, 0x7d, 0x31, 0x5c, - 0x7c, 0x10, 0xf1, 0x8f, 0x5b, 0x60, 0x8a, 0x5a, 0x84, 0x27, 0x09, 0x1e, 0xa1, 0x97, 0xcf, 0x8b, - 0xc0, 0x74, 0x21, 0xef, 0x07, 0xc5, 0x7c, 0x18, 0x14, 0xf3, 0x3b, 0x7c, 0xf5, 0xe3, 0x11, 0x1d, - 0x08, 0x62, 0x31, 0x82, 0x57, 0xc1, 0xb4, 0xcf, 0xea, 0xeb, 0x5a, 0x5e, 0xe2, 0xde, 0xf7, 0xf1, - 0x88, 0xee, 0x0b, 0xf4, 0x95, 0xc0, 0x2f, 0xc1, 0xa4, 0x89, 0xed, 0x00, 0xc7, 0x05, 0x11, 0x34, - 0x3e, 0x1c, 0x3e, 0x68, 0x7c, 0x8a, 0x6d, 0x01, 0x77, 0xc7, 0x62, 0x4e, 0x53, 0x9f, 0x30, 0x83, - 0x21, 0x3c, 0x01, 0x8b, 0x26, 0xb6, 0xed, 0xa4, 0xbd, 0x17, 0x85, 0x9e, 0x8f, 0x5f, 0x49, 0x8f, - 0x1d, 0xdb, 0x1f, 0x5f, 0xe1, 0x82, 0x99, 0x9c, 0x8f, 0x68, 0x0e, 0x7c, 0xcf, 0xd7, 0xbc, 0xfc, - 0x7a, 0x9a, 0x7d, 0xcf, 0xeb, 0xd5, 0x1c, 0x99, 0x87, 0x05, 0xb0, 0x6c, 0x51, 0x6b, 0x8b, 0x5a, - 0xc7, 0xc4, 0xe2, 0x99, 0x07, 0x37, 0xf6, 0xb0, 0xe9, 0x87, 0xb7, 0xe5, 0xb4, 0x08, 0x00, 0x03, - 0xd7, 0xe1, 0x16, 0x98, 0xeb, 0xa4, 0xb7, 0x00, 0xf1, 0x65, 0x71, 0xe2, 0xe9, 0x9e, 0x13, 0x7f, - 0x18, 0xd2, 0xe9, 0xb3, 0x1d, 0x16, 0x5f, 0xc8, 0x97, 0xa0, 0xe3, 0x49, 0xd1, 0xcb, 0xb6, 0x82, - 0xe4, 0xa1, 0xe3, 0xc2, 0x42, 0x28, 0xa8, 0x7b, 0xb1, 0xfe, 0x4c, 0x02, 0xcb, 0x71, 0xf1, 0xdd, - 0x24, 0xbb, 0x8c, 0x86, 0xd7, 0x51, 0xda, 0x6e, 0x17, 0x8b, 0xd9, 0xcb, 0x7a, 0x20, 0x12, 0x59, - 0xfe, 0x12, 0xe2, 0xa2, 0x11, 0x33, 0x58, 0x83, 0x68, 0x99, 0xfe, 0x8b, 0x55, 0xe2, 0x56, 0x1c, - 0x43, 0x64, 0xfa, 0xbc, 0x7e, 0x21, 0x8a, 0xb4, 0xd8, 0x41, 0x04, 0x7f, 0x53, 0x02, 0x4b, 0xdd, - 0x4d, 0x88, 0x62, 0xbd, 0x32, 0x7c, 0x9c, 0x2c, 0x69, 0xed, 0xa2, 0x9a, 0x85, 0x7b, 0xbd, 0x10, - 0x2f, 0xed, 0x0d, 0x44, 0xb6, 0xd8, 0x89, 0xad, 0x11, 0x58, 0xc7, 0x20, 0x9d, 0x0c, 0x05, 0x11, - 0x68, 0x19, 0x1e, 0x0f, 0x4a, 0x37, 0xdb, 0xc5, 0x77, 0xb2, 0x4b, 0x1d, 0xdb, 0x7d, 0xb2, 0x40, - 0xdf, 0x4a, 0x72, 0x3a, 0xa6, 0x72, 0x39, 0x1e, 0x49, 0x22, 0x7a, 0xff, 0x4a, 0x8a, 0x28, 0x0e, - 0x6e, 0x46, 0x44, 0xf1, 0xd5, 0xd7, 0xab, 0x1a, 0x4a, 0xb7, 0xdb, 0xc5, 0xad, 0x6c, 0x17, 0x9b, - 0xaf, 0x00, 0xd1, 0xf2, 0x53, 0x52, 0x61, 0x01, 0xf2, 0xab, 0x03, 0x56, 0xfb, 0x1b, 0xe0, 0xcb, - 0x8d, 0x18, 0xf0, 0x53, 0x09, 0x2c, 0xf4, 0xe2, 0xbe, 0xf6, 0x7a, 0xf5, 0x5a, 0x69, 0xb3, 0x5d, - 0x5c, 0xcf, 0x2e, 0xee, 0xf5, 0x81, 0x9b, 0xde, 0x1b, 0x8c, 0x72, 0xde, 0x4a, 0xa2, 0x7b, 0x0f, - 0x2c, 0xfa, 0x39, 0x80, 0x1e, 0x13, 0xc7, 0x31, 0xaa, 0xe4, 0x80, 0x35, 0x6d, 0xb2, 0xfc, 0x16, - 0x2f, 0x63, 0x4a, 0xe7, 0xda, 0xc5, 0xd1, 0xdf, 0x4f, 0x49, 0xb2, 0xbe, 0x20, 0x68, 0xee, 0x07, - 0x24, 0x0f, 0x9b, 0x36, 0x49, 0xff, 0x8b, 0x04, 0xc6, 0x83, 0x6a, 0x11, 0x82, 0x51, 0x0b, 0x9b, - 0xc4, 0xaf, 0x16, 0x75, 0xf1, 0x0d, 0x2f, 0x80, 0x71, 0x6c, 0x52, 0xcf, 0x62, 0xcb, 0x29, 0x91, - 0xfe, 0x83, 0x11, 0x34, 0x41, 0x8a, 0x1e, 0x89, 0xa2, 0x6c, 0x56, 0x2b, 0xbe, 0xaa, 0xf5, 0xf9, - 0x6d, 0x42, 0x6c, 0xe1, 0xde, 0xe9, 0x76, 0xf1, 0xa2, 0xb6, 0x14, 0x0e, 0xe3, 0xc6, 0xa6, 0xe8, - 0x51, 0x66, 0x15, 0x4c, 0x84, 0x8b, 0x70, 0x12, 0x8c, 0xdd, 0x2e, 0x7e, 0xf2, 0x60, 0x67, 0x7e, - 0x04, 0x4e, 0x80, 0xd1, 0x87, 0xfa, 0xe7, 0x3b, 0xf3, 0x52, 0xe1, 0x62, 0xbb, 0x78, 0x5e, 0x83, - 0x70, 0xfe, 0x14, 0x65, 0xe8, 0x51, 0xa6, 0x80, 0x32, 0x7c, 0x3e, 0x83, 0x5a, 0x69, 0x03, 0xcc, - 0xc4, 0x72, 0x04, 0x9c, 0x07, 0xf2, 0x11, 0x69, 0x06, 0x46, 0xf2, 0x4f, 0x58, 0x02, 0x63, 0x7e, - 0xa0, 0x4a, 0xbd, 0x42, 0x01, 0xe3, 0xb3, 0x16, 0x52, 0x37, 0xa5, 0xf4, 0x36, 0xb8, 0xd0, 0x3f, - 0x4d, 0xf4, 0xd1, 0x79, 0x3e, 0xaa, 0x73, 0x32, 0x2a, 0xe5, 0x17, 0x43, 0x29, 0xc9, 0x90, 0xdf, - 0x47, 0xca, 0x5e, 0x54, 0xca, 0xeb, 0x14, 0xdd, 0x5d, 0xfd, 0x85, 0xdf, 0x4b, 0xb5, 0x8b, 0xbf, - 0x95, 0x02, 0xbf, 0x2a, 0x65, 0x17, 0x8b, 0xa8, 0x6c, 0x30, 0x44, 0x6b, 0xa8, 0xdb, 0x27, 0x6a, - 0xbb, 0xbb, 0x16, 0x0b, 0xd3, 0x47, 0x13, 0x55, 0xa8, 0x69, 0x37, 0x8c, 0x8a, 0xb8, 0x55, 0x41, - 0xf7, 0x84, 0xb8, 0xe3, 0x21, 0x46, 0x51, 0x85, 0xbb, 0x22, 0x32, 0xb1, 0xd5, 0x44, 0x35, 0x82, - 0x99, 0xe7, 0x10, 0x97, 0xcb, 0xda, 0x0f, 0xf3, 0xc8, 0x57, 0x92, 0x68, 0x1d, 0xbe, 0x92, 0xa2, - 0x85, 0xf7, 0x57, 0x52, 0xac, 0x52, 0xcf, 0x3e, 0x02, 0xd7, 0x6e, 0x1b, 0x56, 0x15, 0x51, 0x8f, - 0x21, 0x93, 0x3a, 0x04, 0xe1, 0x32, 0xff, 0xec, 0x69, 0xa4, 0xf2, 0x75, 0xc6, 0x6c, 0xb7, 0xa0, - 0xaa, 0x87, 0x06, 0xab, 0x7b, 0xe5, 0x7c, 0x85, 0x9a, 0x2a, 0xdf, 0x8c, 0x1c, 0xa9, 0x50, 0xb7, - 0xe9, 0x32, 0x12, 0x0c, 0x83, 0xbd, 0xd1, 0x36, 0xa1, 0x76, 0x8a, 0x32, 0x5c, 0x3f, 0x77, 0x96, - 0xb5, 0x4a, 0x6d, 0xe3, 0xdd, 0x75, 0xb2, 0x9e, 0xdb, 0x2c, 0x6f, 0x6e, 0xe6, 0x36, 0x6f, 0x6e, - 0x54, 0x73, 0x78, 0xfd, 0x9d, 0x5b, 0xb9, 0x77, 0x36, 0xab, 0xb8, 0x5c, 0xad, 0xbd, 0x47, 0x6e, - 0xae, 0x6f, 0x66, 0x50, 0xab, 0x34, 0x13, 0xd6, 0x44, 0x02, 0x5c, 0xe6, 0x7f, 0x26, 0xc0, 0x72, - 0x12, 0x49, 0x18, 0x64, 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xed, 0x66, 0x24, - 0x24, 0x2b, 0x29, 0xfd, 0x02, 0x27, 0x08, 0x19, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x3a, 0xce, - 0x1a, 0x6b, 0x5e, 0x78, 0x83, 0x25, 0xe9, 0x17, 0xa3, 0xbc, 0xdb, 0x91, 0x46, 0xa6, 0x47, 0x6f, - 0xb4, 0x36, 0x94, 0x91, 0xac, 0xc8, 0x71, 0xbd, 0xbb, 0xdd, 0x32, 0xb1, 0x47, 0x6f, 0xac, 0xe1, - 0x19, 0x45, 0xb2, 0x32, 0x1a, 0xd7, 0xfb, 0x79, 0xa4, 0xc6, 0xec, 0xa7, 0xb7, 0x53, 0xb6, 0x8e, - 0x21, 0x59, 0x19, 0xeb, 0xd1, 0x1b, 0x56, 0xb0, 0xdf, 0x03, 0x97, 0x13, 0x5b, 0x15, 0x2b, 0x8c, - 0xc7, 0x91, 0xac, 0x8c, 0xeb, 0xcb, 0xb1, 0xcd, 0x8a, 0xd6, 0xc8, 0xfd, 0xd9, 0x23, 0x6d, 0x98, - 0xac, 0x9c, 0xeb, 0xc3, 0x1e, 0x6a, 0x7f, 0x0f, 0x2c, 0xc7, 0xd9, 0x23, 0x8d, 0xd5, 0x04, 0x92, - 0x95, 0x09, 0x7d, 0x29, 0xca, 0x5b, 0xea, 0x34, 0x59, 0x3d, 0xdb, 0x15, 0x2b, 0x35, 0x27, 0x45, - 0x69, 0x1d, 0xdb, 0xae, 0x78, 0x79, 0x9d, 0xd8, 0xae, 0x68, 0x33, 0x06, 0x90, 0xac, 0x4c, 0xc7, - 0xb7, 0xab, 0xd4, 0x6d, 0xcc, 0xfa, 0x1e, 0x53, 0xc7, 0xdc, 0x29, 0x24, 0x2b, 0x33, 0xbd, 0xc7, - 0x14, 0x5a, 0x4b, 0x92, 0xd6, 0x46, 0x0a, 0xb5, 0xe9, 0x57, 0x28, 0xd4, 0x62, 0x7b, 0xd3, 0x2d, - 0xd6, 0x3e, 0x04, 0x2b, 0x89, 0xbd, 0x89, 0x1f, 0xca, 0x0c, 0x92, 0x95, 0x39, 0xfd, 0x52, 0x6c, - 0x77, 0x62, 0xfd, 0xd1, 0x00, 0x01, 0x1d, 0xa7, 0x98, 0x45, 0xb2, 0x32, 0xdf, 0x4f, 0xc0, 0x40, - 0x67, 0x8e, 0xf5, 0x51, 0x73, 0x48, 0x56, 0x16, 0x12, 0xa7, 0x13, 0xd9, 0xa5, 0xbe, 0xcc, 0x91, - 0x4e, 0x4d, 0x56, 0x60, 0x2f, 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0x89, 0x56, 0x81, 0xf8, 0x14, - 0x65, 0x06, 0x39, 0x56, 0xa6, 0x80, 0xbe, 0xcf, 0x1c, 0x8f, 0xdc, 0x40, 0xfe, 0xff, 0x6b, 0xb8, - 0xe1, 0x06, 0x83, 0x27, 0x37, 0x92, 0x6c, 0x11, 0xdc, 0x9c, 0x6f, 0xfd, 0x06, 0xd2, 0x6e, 0xa0, - 0x8d, 0x27, 0xa8, 0x95, 0x49, 0x83, 0xd1, 0x12, 0xad, 0x36, 0xfb, 0x65, 0xee, 0xcc, 0x97, 0x60, - 0x2e, 0x68, 0x5f, 0x7f, 0xd6, 0x60, 0x75, 0x41, 0x36, 0x0b, 0x52, 0xe1, 0x63, 0x90, 0x9e, 0x32, - 0x78, 0x88, 0x1a, 0xad, 0x62, 0x86, 0x83, 0xec, 0xf1, 0xd6, 0x99, 0xe7, 0xce, 0x85, 0xe8, 0x82, - 0x25, 0xf3, 0x13, 0x09, 0xcc, 0x7d, 0x6e, 0x57, 0x31, 0x23, 0x8f, 0x34, 0x9d, 0xfc, 0xd0, 0x23, - 0x2e, 0x83, 0x5b, 0x40, 0xc6, 0x65, 0x1f, 0xc4, 0x94, 0xb6, 0x3e, 0x74, 0x2e, 0xd2, 0x39, 0x37, - 0x7c, 0x1f, 0x4c, 0x79, 0x42, 0xae, 0x78, 0x35, 0x0c, 0xa0, 0xf5, 0x36, 0x21, 0xb7, 0x0d, 0xd2, - 0xa8, 0x7e, 0x8a, 0xdd, 0x23, 0x1d, 0xf8, 0xe4, 0xfc, 0x3b, 0x8b, 0xc0, 0x54, 0xc4, 0x37, 0x79, - 0x79, 0xf0, 0x78, 0x47, 0xbf, 0x3f, 0x3f, 0x02, 0xcf, 0x01, 0xf9, 0xfe, 0xde, 0xce, 0xbc, 0xa4, - 0xfd, 0xc9, 0x15, 0x70, 0x31, 0xa9, 0xf8, 0x01, 0x71, 0x8e, 0x8d, 0x0a, 0x81, 0xff, 0x2e, 0x83, - 0xf1, 0x2d, 0x87, 0xef, 0x39, 0x1c, 0x1e, 0x7d, 0x7a, 0x78, 0x96, 0xcc, 0x7f, 0xa7, 0x7e, 0xf9, - 0x1f, 0xfe, 0xed, 0x27, 0xa9, 0xaf, 0x53, 0x99, 0xff, 0x48, 0xa9, 0xc7, 0xeb, 0xe1, 0x0b, 0x6d, - 0xbf, 0xf7, 0x59, 0xf5, 0x34, 0x92, 0x3e, 0x5a, 0xea, 0x69, 0x34, 0x23, 0xb4, 0xd4, 0xd3, 0x88, - 0x77, 0xb6, 0x54, 0x97, 0xd8, 0xd8, 0xc1, 0x8c, 0x3a, 0xea, 0xa9, 0x17, 0x5b, 0x38, 0x8d, 0x78, - 0x52, 0x4b, 0x3d, 0x8d, 0x5d, 0xa8, 0x70, 0x1c, 0x59, 0xef, 0xba, 0x6b, 0x4b, 0x3d, 0x8d, 0xc6, - 0xb6, 0xef, 0xb9, 0xcc, 0xb1, 0x1d, 0x52, 0x33, 0x4e, 0xd4, 0x6c, 0xcb, 0x57, 0x12, 0x61, 0x73, - 0x93, 0x72, 0xdc, 0xa4, 0x22, 0x37, 0xc1, 0x10, 0x07, 0x39, 0xa8, 0x47, 0x6d, 0xa9, 0xa7, 0xdd, - 0x58, 0xd5, 0x52, 0x4f, 0x13, 0x6f, 0x3a, 0x9c, 0xb3, 0xef, 0x63, 0x4f, 0x8c, 0x2f, 0x52, 0xbb, - 0xb7, 0xe0, 0x1f, 0x4a, 0x00, 0xf8, 0x07, 0x2e, 0xae, 0xc7, 0x37, 0x73, 0xe8, 0x59, 0x71, 0xe6, - 0xd7, 0x32, 0xab, 0x67, 0x9c, 0x78, 0x41, 0xca, 0xc2, 0x5f, 0x00, 0xe3, 0x9f, 0x50, 0x7a, 0xe4, - 0xd9, 0x70, 0x2e, 0xef, 0x7a, 0x65, 0x2d, 0xbf, 0x5b, 0x0d, 0xee, 0xf4, 0xab, 0x68, 0xce, 0x0b, - 0xcd, 0x0a, 0xfc, 0xce, 0x99, 0xbe, 0xc6, 0xeb, 0xa2, 0x16, 0xfc, 0x35, 0x09, 0x8c, 0xfb, 0x77, - 0xfc, 0x55, 0xb6, 0x66, 0xc0, 0x53, 0x51, 0x66, 0x5d, 0xa0, 0xf8, 0x6e, 0xfa, 0x25, 0x51, 0xf0, - 0x6d, 0xf8, 0x4f, 0x09, 0x4c, 0x84, 0xc1, 0x06, 0xae, 0x9d, 0x09, 0x25, 0x11, 0x97, 0x06, 0x22, - 0xf9, 0x03, 0x49, 0x40, 0xf9, 0x6d, 0x29, 0x9d, 0x55, 0x8f, 0xb5, 0x17, 0x63, 0xc1, 0x65, 0x92, - 0xf7, 0xf1, 0xf0, 0x28, 0xf5, 0x78, 0x5d, 0x1b, 0x9a, 0x65, 0x4d, 0xfb, 0xae, 0x7a, 0xac, 0xe1, - 0x97, 0xe5, 0x91, 0xb2, 0xf0, 0x8f, 0x25, 0x30, 0xbe, 0x4d, 0x1a, 0x84, 0x91, 0xde, 0xe3, 0x1f, - 0x64, 0x93, 0xd3, 0x2e, 0x16, 0xcb, 0xd7, 0xc1, 0x2c, 0x00, 0x45, 0xdb, 0xb8, 0x47, 0x9a, 0x45, - 0x8f, 0xd5, 0xe1, 0x08, 0xb8, 0x08, 0xc6, 0xef, 0xf3, 0x4f, 0x0d, 0xce, 0x80, 0x51, 0x87, 0xe0, - 0x2a, 0x18, 0x7b, 0xe6, 0x18, 0x8c, 0x3c, 0x3d, 0x0f, 0x66, 0x4f, 0x72, 0x86, 0xe3, 0x70, 0x10, - 0xae, 0x51, 0x6e, 0x10, 0x98, 0x42, 0xfe, 0xb6, 0x28, 0xd9, 0x97, 0xf5, 0x93, 0x7f, 0x95, 0xc0, - 0xc4, 0x1d, 0xc2, 0x3e, 0xf3, 0x88, 0xd3, 0xfc, 0xff, 0xf4, 0x94, 0x1f, 0x4b, 0xed, 0xe2, 0xc3, - 0xcc, 0x1e, 0x58, 0xe9, 0xd7, 0x01, 0x74, 0x14, 0x0e, 0x59, 0xf9, 0x7f, 0x21, 0x95, 0x47, 0x84, - 0x7d, 0x79, 0x78, 0xe3, 0x2c, 0xfb, 0x7e, 0xc8, 0x15, 0x84, 0x56, 0xfe, 0x78, 0x0c, 0xcc, 0xdf, - 0x21, 0x2c, 0x4c, 0xf8, 0xbe, 0xf2, 0x5b, 0xc3, 0x67, 0xb9, 0x80, 0x3f, 0xfd, 0xea, 0xac, 0x99, - 0x1f, 0x8d, 0x0a, 0x0b, 0xfe, 0x4b, 0x86, 0x5f, 0xcb, 0x67, 0xd8, 0xd0, 0xa9, 0x22, 0x82, 0x78, - 0xd9, 0xaf, 0x1b, 0x69, 0x25, 0xd7, 0x12, 0xc9, 0x65, 0x60, 0x3b, 0xd1, 0xb3, 0xe6, 0xbd, 0x68, - 0x31, 0x1e, 0xf4, 0x5f, 0x50, 0xf0, 0xf7, 0x5f, 0x1d, 0xc8, 0x1b, 0x4b, 0x53, 0x83, 0x0b, 0xf2, - 0x5e, 0xbe, 0x6e, 0xc1, 0xdd, 0xd7, 0x90, 0x81, 0x0a, 0x7b, 0xb3, 0xd0, 0x80, 0x2a, 0x77, 0xc0, - 0xf2, 0x40, 0x3b, 0xdd, 0x17, 0x69, 0x8d, 0x65, 0x49, 0xf8, 0xcf, 0x32, 0x18, 0xdd, 0xa9, 0xd4, - 0x29, 0x1c, 0xf4, 0xe3, 0x88, 0xeb, 0x95, 0xf3, 0x7e, 0xbf, 0x11, 0x86, 0x8c, 0x97, 0xa6, 0xcc, - 0xfc, 0x6f, 0xaa, 0x5d, 0xfc, 0xdd, 0x14, 0x98, 0x26, 0x95, 0x3a, 0x45, 0xae, 0x5f, 0x1d, 0x81, - 0x09, 0x31, 0x72, 0xec, 0x0a, 0x5c, 0x78, 0xe0, 0x99, 0x26, 0x76, 0x9a, 0x05, 0xb4, 0x13, 0x4c, - 0xa5, 0xe7, 0xb7, 0xbb, 0x2f, 0x36, 0x62, 0x36, 0xb3, 0x0d, 0x60, 0xfc, 0xda, 0x0a, 0xb4, 0x43, - 0x5e, 0xd6, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, 0x1c, - 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xab, 0x13, 0xe4, 0x10, 0x97, 0x7a, 0x4e, 0x85, 0x20, - 0xc3, 0x45, 0x8c, 0x98, 0x36, 0x75, 0xb0, 0x63, 0x34, 0x9a, 0xc8, 0xb3, 0xf0, 0x31, 0x36, 0x1a, - 0xb8, 0xdc, 0x20, 0xf9, 0xec, 0x12, 0x98, 0x38, 0xc9, 0x59, 0x9e, 0x59, 0x26, 0x0e, 0x9c, 0x5c, - 0x18, 0x11, 0xff, 0xfd, 0xdc, 0x47, 0x77, 0xdf, 0x07, 0xf2, 0xe6, 0xda, 0x26, 0xdc, 0x04, 0xd9, - 0x17, 0xc8, 0xad, 0x52, 0xe2, 0x22, 0x8b, 0x32, 0x44, 0x4e, 0x0c, 0x97, 0xe5, 0xe1, 0x38, 0x10, - 0xaf, 0x68, 0xe2, 0xee, 0x3d, 0x39, 0x3b, 0x7a, 0xf0, 0xfd, 0x52, 0x4f, 0xfd, 0xf3, 0x7a, 0x7c, - 0x29, 0x33, 0x1f, 0x4d, 0x18, 0x7c, 0xad, 0xe0, 0x3f, 0xba, 0x3c, 0x86, 0xb0, 0x67, 0x09, 0xfe, - 0x85, 0x04, 0xa6, 0xb7, 0x09, 0xb1, 0xc5, 0x4f, 0x4b, 0x7c, 0xe2, 0x9b, 0xa9, 0x4d, 0x3e, 0x14, - 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x19, 0xf9, 0x63, 0xbf, 0x5a, 0xe7, 0x79, 0xc3, 0x21, 0x52, 0x56, - 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x60, 0xdf, 0x0e, - 0x7e, 0xd0, 0x1f, 0x18, 0xf3, 0x47, 0xe0, 0x23, 0x70, 0xee, 0xa1, 0x61, 0x12, 0xea, 0x31, 0x38, - 0x80, 0x68, 0x20, 0xf3, 0x65, 0x01, 0x7f, 0x09, 0x2e, 0x46, 0xf7, 0x93, 0x05, 0xc2, 0xea, 0x60, - 0x7e, 0xc7, 0x71, 0xa8, 0xc3, 0xbb, 0xa1, 0x6d, 0xc2, 0xb0, 0xd1, 0x70, 0x87, 0x56, 0x70, 0x4d, - 0x28, 0x78, 0x13, 0xae, 0xc4, 0x0e, 0x8c, 0x4b, 0x7d, 0x66, 0xb0, 0x7a, 0x35, 0x90, 0xfa, 0xeb, - 0x12, 0x80, 0x77, 0x08, 0x4b, 0x76, 0x5f, 0x67, 0x17, 0x2e, 0x09, 0x8e, 0x81, 0x30, 0xde, 0x16, - 0x30, 0xae, 0x64, 0x2e, 0x45, 0x61, 0x70, 0x04, 0x65, 0x5a, 0x6d, 0xaa, 0xa7, 0xbc, 0x7c, 0x10, - 0x5d, 0x1a, 0xfc, 0x15, 0x09, 0x2c, 0xec, 0x53, 0x97, 0x71, 0x89, 0x82, 0x55, 0x00, 0x79, 0xb9, - 0x46, 0x6f, 0xa0, 0x76, 0x55, 0x68, 0xbf, 0x9e, 0xb9, 0x16, 0xd5, 0x6e, 0x53, 0x97, 0x71, 0x04, - 0xe2, 0xc7, 0x42, 0x1f, 0x46, 0xc7, 0x29, 0xfe, 0x46, 0x02, 0x8b, 0x5b, 0x75, 0x52, 0x39, 0x0a, - 0x73, 0xf6, 0x3e, 0x76, 0xb0, 0xe9, 0x7e, 0x43, 0x3e, 0x7d, 0x47, 0xc0, 0x2d, 0xc2, 0x0f, 0xcf, - 0xf2, 0x69, 0x5b, 0xa0, 0x52, 0x0f, 0x09, 0xeb, 0xeb, 0xde, 0xf0, 0x9f, 0x24, 0xf0, 0x86, 0x30, - 0xc3, 0x7f, 0x33, 0xe5, 0x1d, 0xe6, 0xb7, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x77, 0x08, - 0x83, 0x82, 0xce, 0x48, 0xfc, 0xb1, 0x4c, 0xc2, 0x38, 0x7a, 0xd4, 0x82, 0x7f, 0x27, 0x81, 0xf3, - 0xc2, 0x34, 0xee, 0x2c, 0xdf, 0x9a, 0x45, 0x99, 0xc2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xde, 0x91, - 0xb6, 0x0a, 0xf1, 0xbf, 0xa3, 0x49, 0xff, 0xb5, 0xd4, 0x2e, 0xfe, 0xa5, 0x04, 0x6b, 0x03, 0x7a, - 0xfd, 0xe8, 0x2f, 0x0c, 0x28, 0x97, 0x43, 0xcf, 0xea, 0x46, 0xa5, 0x8e, 0xdc, 0x3a, 0xf5, 0x1a, - 0x55, 0x11, 0xf2, 0xcb, 0x04, 0x79, 0x2e, 0xa9, 0x22, 0xc3, 0x42, 0x76, 0x03, 0x57, 0x08, 0xa2, - 0x35, 0x91, 0x1c, 0xaa, 0xb4, 0xe2, 0x99, 0xc4, 0xf2, 0x3b, 0x48, 0x54, 0xa1, 0x26, 0x1f, 0x5c, - 0x49, 0x7f, 0x06, 0x56, 0xfb, 0x15, 0xa9, 0x3c, 0x74, 0x87, 0xaf, 0x0b, 0xc3, 0xbe, 0x50, 0x3f, - 0x05, 0xe7, 0x2b, 0xd8, 0x24, 0x8d, 0x2d, 0xec, 0x92, 0x40, 0x06, 0x6f, 0x85, 0xa1, 0x0e, 0xc6, - 0xfc, 0x5f, 0xd9, 0x87, 0x0d, 0x5e, 0x97, 0xc4, 0x2e, 0x2f, 0xc2, 0x85, 0x58, 0xf0, 0xe2, 0x4b, - 0xda, 0x0f, 0xc0, 0x4a, 0xd1, 0xa2, 0xac, 0x4e, 0x9c, 0x40, 0x13, 0x0f, 0x18, 0x91, 0x40, 0xfe, - 0x41, 0x2c, 0xac, 0x0f, 0xab, 0x78, 0xa4, 0xf4, 0xe7, 0x93, 0xed, 0xe2, 0x1f, 0x4d, 0xc2, 0xaf, - 0x25, 0xb0, 0x58, 0x44, 0x25, 0xff, 0x37, 0x85, 0xc8, 0xf9, 0x7f, 0x01, 0xce, 0x1f, 0xea, 0xfb, - 0x5b, 0xb9, 0x3b, 0xbe, 0xe9, 0xc8, 0x76, 0xe8, 0x53, 0x52, 0x61, 0xc3, 0x6e, 0x59, 0x7a, 0xde, - 0xa2, 0x16, 0xf9, 0x28, 0x30, 0x8d, 0x53, 0x67, 0x7f, 0x00, 0xce, 0x97, 0x1e, 0x6c, 0xa3, 0x8d, - 0xdc, 0x56, 0x03, 0x7b, 0x2e, 0x41, 0x9f, 0x18, 0x15, 0x62, 0xb9, 0x04, 0xde, 0x1e, 0x4e, 0xb2, - 0x5a, 0x6e, 0xd0, 0xb2, 0x6a, 0x62, 0x97, 0x11, 0x47, 0xfd, 0x64, 0x77, 0x6b, 0x67, 0xef, 0xc1, - 0x4e, 0x9e, 0x9d, 0x30, 0x4d, 0x5e, 0xcf, 0xaf, 0x15, 0x10, 0x58, 0x3a, 0xc9, 0xb9, 0xd4, 0x24, - 0xc2, 0x9a, 0xee, 0x17, 0x3c, 0x97, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, - 0xcd, 0x63, 0xdb, 0xff, 0xad, 0xc4, 0xa0, 0x96, 0xfa, 0xd4, 0xa5, 0x96, 0x76, 0x21, 0x3a, 0x73, - 0x92, 0xab, 0x51, 0x9a, 0x33, 0x0d, 0x93, 0x14, 0x7a, 0x28, 0x0b, 0x03, 0x28, 0xf5, 0x7d, 0x5e, - 0xc7, 0x6c, 0xc0, 0x5d, 0x70, 0xa7, 0xb7, 0x8e, 0xf1, 0x5c, 0xe2, 0x74, 0x6b, 0x98, 0x3a, 0x3e, - 0x26, 0xc8, 0x26, 0x8e, 0x69, 0xb8, 0x2e, 0x77, 0x5d, 0x46, 0x11, 0xae, 0x54, 0x88, 0xeb, 0xc6, - 0x6a, 0x9e, 0xbc, 0xfe, 0x1a, 0x95, 0xd1, 0x39, 0xfd, 0x63, 0x20, 0x6f, 0xae, 0xdf, 0x84, 0x45, - 0x30, 0xb3, 0xfb, 0xb6, 0x89, 0x30, 0x62, 0x04, 0xdb, 0x94, 0xe5, 0xe1, 0x1a, 0xc8, 0xa7, 0x87, - 0x7a, 0x56, 0x7e, 0xfc, 0x3b, 0x32, 0x98, 0x03, 0x93, 0x25, 0xec, 0x1a, 0x15, 0xd1, 0xc2, 0xa6, - 0x26, 0x24, 0xf0, 0xa7, 0x52, 0xac, 0xab, 0xfd, 0xa9, 0x34, 0x91, 0x4a, 0x4f, 0x7e, 0x91, 0x2b, - 0xee, 0xef, 0xe6, 0xee, 0x91, 0x26, 0x4a, 0xdd, 0x55, 0xc0, 0xca, 0x49, 0x0e, 0x9b, 0xf8, 0x39, - 0xb5, 0x72, 0xd8, 0x36, 0x02, 0x55, 0x39, 0xec, 0xb1, 0x3a, 0x6b, 0xda, 0x04, 0x4e, 0xa4, 0xc7, - 0x29, 0x1f, 0x68, 0x77, 0x7f, 0x1e, 0xbc, 0x39, 0x88, 0x92, 0x3a, 0xc6, 0x73, 0xe2, 0xc0, 0x0f, - 0xb2, 0x3f, 0x03, 0xe6, 0xc0, 0xa8, 0xe0, 0x3b, 0x97, 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, - 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, - 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x51, 0xea, 0xb4, 0xdc, 0x7f, 0x2b, 0x4d, 0xc8, - 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, - 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x09, 0xa4, 0xfd, 0x0e, 0x1e, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, - 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0xf4, 0xf5, 0x70, 0x31, 0x58, 0x14, 0xa3, 0x70, 0x75, 0x0b, - 0x8c, 0xe1, 0xaa, 0x69, 0x58, 0xb0, 0x10, 0x63, 0xb5, 0xaa, 0x31, 0x32, 0xe1, 0x1a, 0x9c, 0xcc, - 0x70, 0x19, 0xaf, 0xd6, 0x8e, 0x09, 0x32, 0xac, 0x1a, 0x75, 0x4c, 0xe1, 0x7d, 0xe5, 0x55, 0x30, - 0x13, 0x3d, 0x98, 0x91, 0xe4, 0x5b, 0x43, 0xf9, 0xfa, 0xc0, 0xd7, 0x86, 0x24, 0xa9, 0xb3, 0x0b, - 0x2e, 0x7e, 0xda, 0x8d, 0x96, 0xd1, 0x18, 0x30, 0xec, 0xdd, 0x7f, 0x7e, 0x19, 0xc0, 0x93, 0x5c, - 0x74, 0x86, 0x5f, 0x12, 0x38, 0x96, 0x96, 0xcb, 0xd8, 0x79, 0xae, 0x80, 0x8b, 0x89, 0xc5, 0x32, - 0x7e, 0x9e, 0x6b, 0x18, 0x2e, 0x83, 0x33, 0xda, 0x14, 0x18, 0x4b, 0xcb, 0xd4, 0x22, 0x20, 0x85, - 0xa4, 0xc7, 0x93, 0x1d, 0x77, 0x2c, 0x8f, 0x8b, 0x30, 0xb6, 0xf1, 0x7f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0xe2, 0x53, 0xfe, 0x7f, 0x48, 0x2b, 0x00, 0x00, + 0x7e, 0xd7, 0x72, 0xf5, 0x39, 0xb2, 0xbe, 0x46, 0x96, 0x2d, 0xd3, 0x4a, 0x34, 0xa6, 0x9d, 0x97, + 0x35, 0x9f, 0xc9, 0x95, 0x56, 0x4a, 0x62, 0x33, 0x7d, 0x49, 0x48, 0x49, 0x76, 0x64, 0x27, 0xb2, + 0xb2, 0x76, 0xdc, 0xd4, 0x2f, 0x7e, 0xea, 0x90, 0x1c, 0x8a, 0x6b, 0x71, 0x77, 0xf6, 0xed, 0xce, + 0xca, 0xa2, 0x55, 0xb6, 0x0f, 0x6d, 0xd1, 0x02, 0xef, 0xdd, 0xf8, 0xfa, 0x81, 0xd7, 0x87, 0xf6, + 0x52, 0xf4, 0x52, 0xf4, 0x54, 0xa0, 0xa7, 0x02, 0xed, 0xa5, 0xb7, 0x02, 0x6d, 0x91, 0x02, 0x45, + 0x2f, 0x3d, 0xb5, 0xe7, 0x02, 0x45, 0x8b, 0x00, 0x3d, 0xb4, 0x28, 0x66, 0x76, 0x97, 0xdc, 0x5d, + 0x92, 0x96, 0x69, 0x17, 0x49, 0x0e, 0xf1, 0xce, 0xcc, 0xff, 0xe3, 0xf7, 0x9f, 0xf9, 0xcf, 0xff, + 0x63, 0x28, 0xa0, 0x91, 0x13, 0x6c, 0xda, 0x0d, 0xe2, 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa1, + 0x5d, 0x56, 0xf1, 0x41, 0xd9, 0x60, 0x07, 0xb4, 0x76, 0x40, 0x8e, 0x89, 0xd3, 0x64, 0x75, 0xc3, + 0x3a, 0xcc, 0x0b, 0x1a, 0xb8, 0x7a, 0xe8, 0xd8, 0x95, 0xfc, 0x21, 0x66, 0xe4, 0x19, 0x6e, 0xe6, + 0x43, 0x01, 0xf9, 0x0e, 0x6b, 0x7a, 0xe5, 0x90, 0xd2, 0xc3, 0x06, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, + 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xb3, 0xa7, 0x51, 0xb0, 0x2a, 0x46, 0x65, 0xaf, 0xa6, + 0xd6, 0x0c, 0xd2, 0xa8, 0x1e, 0x98, 0xd8, 0x3d, 0x0a, 0x28, 0x2e, 0x27, 0x29, 0x88, 0x69, 0xb3, + 0x66, 0xb0, 0xf8, 0x66, 0x72, 0xb1, 0xea, 0x39, 0x42, 0x7e, 0xb0, 0xfe, 0x76, 0xc2, 0x22, 0x1b, + 0xb3, 0x3a, 0xb1, 0x3c, 0x53, 0x7c, 0x1c, 0xf0, 0xaf, 0x10, 0x47, 0x82, 0xd0, 0xf5, 0xca, 0xaa, + 0x49, 0x5c, 0x17, 0x1f, 0x92, 0x80, 0xe2, 0x4a, 0x2f, 0x85, 0x96, 0x20, 0x59, 0x4d, 0xa2, 0x61, + 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x20, 0xb8, 0x21, 0xfe, 0xa9, 0xe4, 0x0e, 0x89, 0x95, 0x73, + 0x9f, 0xe1, 0xc3, 0x43, 0xe2, 0xa8, 0xd4, 0x16, 0xfb, 0xd1, 0xbb, 0x37, 0x99, 0x7f, 0xb8, 0x0c, + 0xe6, 0x8b, 0x25, 0x83, 0xdd, 0xaf, 0xed, 0x74, 0x76, 0x1d, 0x3e, 0x01, 0x33, 0xae, 0x61, 0x1d, + 0x36, 0xc8, 0x81, 0x45, 0x5c, 0x46, 0xaa, 0xcb, 0x97, 0x90, 0xa4, 0x4c, 0x6b, 0x37, 0xf3, 0x67, + 0x9c, 0x43, 0x3e, 0x29, 0x29, 0xbf, 0x27, 0xf8, 0xf5, 0x73, 0xbe, 0x38, 0x7f, 0x04, 0xeb, 0x60, + 0xd4, 0xf3, 0x8c, 0xea, 0xb2, 0x84, 0x24, 0x65, 0xaa, 0xf4, 0xb0, 0x5d, 0xfc, 0xec, 0x47, 0x92, + 0xf4, 0x63, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, + 0xb3, 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, + 0xb0, 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xe9, 0x5a, 0x83, 0x62, 0x76, + 0x70, 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, + 0xb7, 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, + 0x1d, 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0x73, 0x55, 0xea, 0x95, 0x1b, 0x24, 0x10, 0x36, + 0x8a, 0x24, 0x45, 0xd2, 0xa7, 0xfd, 0x39, 0x9f, 0x64, 0x15, 0x4c, 0x1b, 0x16, 0x7b, 0x77, 0x33, + 0xa0, 0x18, 0x43, 0x92, 0x22, 0xeb, 0x40, 0x4c, 0x75, 0x64, 0x78, 0x51, 0x8a, 0x71, 0x24, 0x29, + 0xa3, 0xfa, 0xb4, 0x17, 0x21, 0xf1, 0x65, 0x6c, 0x68, 0x01, 0xc5, 0x04, 0x92, 0x94, 0x31, 0x21, + 0x63, 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x93, 0x48, 0x52, + 0xc6, 0xf5, 0x73, 0xc1, 0x64, 0x9c, 0xa8, 0x23, 0x67, 0x0a, 0x49, 0xca, 0x44, 0x40, 0x14, 0x4a, + 0x7a, 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd4, 0xa7, 0xf8, 0x4c, 0x07, + 0xac, 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb9, 0x03, 0xe8, 0xd3, 0xfe, 0x5c, 0x07, 0x6c, + 0xb9, 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0xe5, 0x9c, 0x0e, 0xc4, 0x54, 0xcc, 0xe0, 0x0e, + 0x8c, 0x19, 0x24, 0x29, 0x33, 0xbe, 0xc1, 0x21, 0x8a, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x10, 0xcc, + 0x22, 0x49, 0x99, 0xd5, 0x6e, 0x9c, 0x79, 0xf2, 0x7b, 0x9e, 0x49, 0x1c, 0xa3, 0xb2, 0x63, 0x79, + 0xa6, 0x3e, 0xc5, 0xf9, 0x7d, 0x61, 0xfb, 0x60, 0xae, 0x73, 0x8f, 0x03, 0x89, 0x6f, 0x0a, 0x89, + 0xca, 0x00, 0x89, 0xe1, 0xf5, 0xcf, 0xef, 0x63, 0x56, 0x17, 0xd2, 0x66, 0xec, 0xe0, 0xcb, 0x97, + 0xe8, 0x82, 0x0b, 0xbe, 0x33, 0x1d, 0x24, 0x05, 0xaf, 0x0a, 0xc1, 0x1f, 0x9c, 0x25, 0xf8, 0x53, + 0x3f, 0x20, 0x84, 0xf2, 0x03, 0x17, 0xed, 0xa8, 0x5b, 0xb4, 0x62, 0x63, 0x5f, 0xe9, 0x5b, 0x60, + 0xd6, 0x8d, 0x9f, 0xdf, 0x1c, 0x92, 0x94, 0x39, 0x7d, 0xc6, 0x8d, 0x1d, 0x60, 0x87, 0xac, 0xe3, + 0x0b, 0xf3, 0x48, 0x52, 0xe6, 0x43, 0xb2, 0x88, 0xd7, 0xb9, 0xd1, 0x43, 0x58, 0x40, 0x92, 0xb2, + 0xa0, 0x4f, 0xbb, 0x91, 0x43, 0x08, 0x48, 0x3a, 0x72, 0x20, 0x92, 0x14, 0xe8, 0x93, 0x84, 0x52, + 0x34, 0xb0, 0xe4, 0x10, 0x9b, 0x60, 0xbe, 0x15, 0x31, 0xbf, 0x58, 0x44, 0xb2, 0x32, 0xa5, 0x2f, + 0x86, 0x8b, 0x0f, 0x22, 0xfe, 0x71, 0x0b, 0x4c, 0x53, 0x8b, 0xf0, 0x24, 0xc1, 0x23, 0xf4, 0xf2, + 0x79, 0x11, 0x98, 0x2e, 0xe4, 0xfd, 0xa0, 0x98, 0x0f, 0x83, 0x62, 0x7e, 0x87, 0xaf, 0x7e, 0x3c, + 0xa2, 0x03, 0x41, 0x2c, 0x46, 0xf0, 0x2a, 0x38, 0xe7, 0xb3, 0xfa, 0xba, 0x96, 0x97, 0xb8, 0xf7, + 0x7d, 0x3c, 0xa2, 0xfb, 0x02, 0x7d, 0x25, 0xf0, 0x4b, 0x30, 0x65, 0x62, 0x3b, 0xc0, 0x71, 0x41, + 0x04, 0x8d, 0x0f, 0x87, 0x0f, 0x1a, 0x9f, 0x62, 0x5b, 0xc0, 0xdd, 0xb1, 0x98, 0xd3, 0xd4, 0x27, + 0xcd, 0x60, 0x08, 0x4f, 0xc0, 0xa2, 0x89, 0x6d, 0x3b, 0x69, 0xef, 0x45, 0xa1, 0xe7, 0xe3, 0x57, + 0xd2, 0x63, 0xc7, 0xf6, 0xc7, 0x57, 0xb8, 0x60, 0x26, 0xe7, 0x23, 0x9a, 0x03, 0xdf, 0xf3, 0x35, + 0x2f, 0xbf, 0x9e, 0x66, 0xdf, 0xf3, 0x7a, 0x35, 0x47, 0xe6, 0x61, 0x01, 0x2c, 0x5b, 0xd4, 0xda, + 0xa2, 0xd6, 0x31, 0xb1, 0x78, 0xe6, 0xc1, 0x8d, 0x3d, 0x6c, 0xfa, 0xe1, 0x6d, 0x39, 0x2d, 0x02, + 0xc0, 0xc0, 0x75, 0xb8, 0x05, 0xe6, 0x3a, 0xe9, 0x2d, 0x40, 0x7c, 0x59, 0x9c, 0x78, 0xba, 0xe7, + 0xc4, 0x1f, 0x86, 0x74, 0xfa, 0x6c, 0x87, 0xc5, 0x17, 0xf2, 0x25, 0xe8, 0x78, 0x52, 0xf4, 0xb2, + 0xad, 0x20, 0x79, 0xe8, 0xb8, 0xb0, 0x10, 0x0a, 0xea, 0x5e, 0xac, 0x3f, 0x93, 0xc0, 0x72, 0x5c, + 0x7c, 0x37, 0xc9, 0x2e, 0xa3, 0xe1, 0x75, 0x94, 0xb6, 0xdb, 0xc5, 0x62, 0xf6, 0xb2, 0x1e, 0x88, + 0x44, 0x96, 0xbf, 0x84, 0xb8, 0x68, 0xc4, 0x0c, 0xd6, 0x20, 0x5a, 0xa6, 0xff, 0x62, 0x95, 0xb8, + 0x15, 0xc7, 0x10, 0x99, 0x3e, 0xaf, 0x5f, 0x88, 0x22, 0x2d, 0x76, 0x10, 0xc1, 0xdf, 0x91, 0xc0, + 0x52, 0x77, 0x13, 0xa2, 0x58, 0xaf, 0x0c, 0x1f, 0x27, 0x4b, 0x5a, 0xbb, 0xa8, 0x66, 0xe1, 0x5e, + 0x2f, 0xc4, 0x4b, 0x7b, 0x03, 0x91, 0x2d, 0x76, 0x62, 0x6b, 0x04, 0xd6, 0x31, 0x48, 0x27, 0x43, + 0x41, 0x04, 0x5a, 0x86, 0xc7, 0x83, 0xd2, 0xcd, 0x76, 0xf1, 0x9d, 0xec, 0x52, 0xc7, 0x76, 0x9f, + 0x2c, 0xd0, 0xb7, 0x92, 0x9c, 0x8e, 0xa9, 0x5c, 0x8e, 0x47, 0x92, 0x88, 0xde, 0xbf, 0x92, 0x22, + 0x8a, 0x83, 0x9b, 0x11, 0x51, 0x7c, 0xf5, 0xf5, 0xaa, 0x86, 0xd2, 0xed, 0x76, 0x71, 0x2b, 0xdb, + 0xc5, 0xe6, 0x2b, 0x40, 0xb4, 0xfc, 0x94, 0x54, 0x58, 0x80, 0xfc, 0xea, 0x80, 0xd5, 0xfe, 0x06, + 0xf8, 0x72, 0x23, 0x06, 0xfc, 0x5c, 0x02, 0x0b, 0xbd, 0xb8, 0xaf, 0xbd, 0x5e, 0xbd, 0x56, 0xda, + 0x6c, 0x17, 0xd7, 0xb3, 0x8b, 0x7b, 0x7d, 0xe0, 0xa6, 0xf7, 0x06, 0xa3, 0x9c, 0xb7, 0x92, 0xe8, + 0xde, 0x03, 0x8b, 0x7e, 0x0e, 0xa0, 0xc7, 0xc4, 0x71, 0x8c, 0x2a, 0x39, 0x60, 0x4d, 0x9b, 0x2c, + 0xbf, 0xc5, 0xcb, 0x98, 0xd2, 0x44, 0xbb, 0x38, 0xfa, 0x07, 0x29, 0x49, 0xd6, 0x17, 0x04, 0xcd, + 0xfd, 0x80, 0xe4, 0x61, 0xd3, 0x26, 0xe9, 0x7f, 0x91, 0xc0, 0x78, 0x50, 0x2d, 0x42, 0x30, 0x6a, + 0x61, 0x93, 0xf8, 0xd5, 0xa2, 0x2e, 0xbe, 0xe1, 0x05, 0x30, 0x8e, 0x4d, 0xea, 0x59, 0x6c, 0x39, + 0x25, 0xd2, 0x7f, 0x30, 0x82, 0x26, 0x48, 0xd1, 0x23, 0x51, 0x94, 0xcd, 0x6a, 0xc5, 0x57, 0xb5, + 0x3e, 0xbf, 0x4d, 0x88, 0x2d, 0xdc, 0x3b, 0xdd, 0x2e, 0x5e, 0xd4, 0x96, 0xc2, 0x61, 0xdc, 0xd8, + 0x14, 0x3d, 0xca, 0xac, 0x82, 0xc9, 0x70, 0x11, 0x4e, 0x81, 0xb1, 0xdb, 0xc5, 0x4f, 0x1e, 0xec, + 0xcc, 0x8f, 0xc0, 0x49, 0x30, 0xfa, 0x50, 0xff, 0x7c, 0x67, 0x5e, 0x2a, 0x5c, 0x6c, 0x17, 0xcf, + 0x6b, 0x10, 0xce, 0x9f, 0xa2, 0x0c, 0x3d, 0xca, 0x14, 0x50, 0x86, 0xcf, 0x67, 0x50, 0x2b, 0x6d, + 0x80, 0x99, 0x58, 0x8e, 0x80, 0xf3, 0x40, 0x3e, 0x22, 0xcd, 0xc0, 0x48, 0xfe, 0x09, 0x4b, 0x60, + 0xcc, 0x0f, 0x54, 0xa9, 0x57, 0x28, 0x60, 0x7c, 0xd6, 0x42, 0xea, 0xa6, 0x94, 0xde, 0x06, 0x17, + 0xfa, 0xa7, 0x89, 0x3e, 0x3a, 0xcf, 0x47, 0x75, 0x4e, 0x45, 0xa5, 0xfc, 0x6a, 0x28, 0x25, 0x19, + 0xf2, 0xfb, 0x48, 0xd9, 0x8b, 0x4a, 0x79, 0x9d, 0xa2, 0xbb, 0xab, 0xbf, 0xf0, 0xb3, 0x54, 0xbb, + 0xf8, 0xbb, 0x29, 0xf0, 0x9b, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, + 0xa2, 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, + 0x15, 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, + 0x23, 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, + 0x29, 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, + 0xf5, 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, + 0x0b, 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, + 0x75, 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, + 0x67, 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, + 0xe6, 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, + 0xe4, 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x77, 0x12, + 0x2c, 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, + 0x46, 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, + 0xe3, 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, + 0xf4, 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, + 0x1a, 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, + 0xeb, 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, + 0xc2, 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, + 0x86, 0xc9, 0xca, 0x44, 0x1f, 0xf6, 0x50, 0xfb, 0x7b, 0x60, 0x39, 0xce, 0x1e, 0x69, 0xac, 0x26, + 0x91, 0xac, 0x4c, 0xea, 0x4b, 0x51, 0xde, 0x52, 0xa7, 0xc9, 0xea, 0xd9, 0xae, 0x58, 0xa9, 0x39, + 0x25, 0x4a, 0xeb, 0xd8, 0x76, 0xc5, 0xcb, 0xeb, 0xc4, 0x76, 0x45, 0x9b, 0x31, 0x80, 0x64, 0xe5, + 0x5c, 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x46, 0xb2, 0x32, 0xd3, + 0x7b, 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x3b, 0xf7, 0x0a, 0x85, 0x5a, 0x6c, 0x6f, + 0xba, 0xc5, 0xda, 0x87, 0x60, 0x25, 0xb1, 0x37, 0xf1, 0x43, 0x99, 0x41, 0xb2, 0x32, 0xa7, 0x5f, + 0x8a, 0xed, 0x4e, 0xac, 0x3f, 0x1a, 0x20, 0xa0, 0xe3, 0x14, 0xb3, 0x48, 0x56, 0xe6, 0xfb, 0x09, + 0x18, 0xe8, 0xcc, 0xb1, 0x3e, 0x6a, 0x0e, 0xc9, 0xca, 0x42, 0xe2, 0x74, 0x22, 0xbb, 0xd4, 0x97, + 0x39, 0xd2, 0xa9, 0xc9, 0x0a, 0xec, 0x65, 0x0e, 0x34, 0x17, 0xea, 0xed, 0x22, 0xd1, 0x2a, 0x10, + 0x9f, 0xa2, 0xcc, 0x20, 0xc7, 0xca, 0x14, 0xd0, 0xf7, 0x99, 0xe3, 0x91, 0x1b, 0xc8, 0xff, 0x7f, + 0x0d, 0x37, 0xdc, 0x60, 0xf0, 0xe4, 0x46, 0x92, 0x2d, 0x82, 0x9b, 0xf3, 0xad, 0xdf, 0x40, 0xda, + 0x0d, 0xb4, 0xf1, 0x04, 0xb5, 0x32, 0x69, 0x30, 0x5a, 0xa2, 0xd5, 0x66, 0xbf, 0xcc, 0x9d, 0xf9, + 0x12, 0xcc, 0x05, 0xed, 0xeb, 0x2f, 0x1a, 0xac, 0x2e, 0xc8, 0x66, 0x41, 0x2a, 0x7c, 0x0c, 0xd2, + 0x53, 0x06, 0x0f, 0x51, 0xa3, 0x55, 0xcc, 0x70, 0x90, 0x3d, 0xde, 0x3a, 0xf3, 0xdc, 0xb9, 0x10, + 0x5d, 0xb0, 0x64, 0x7e, 0x2a, 0x81, 0xb9, 0xcf, 0xed, 0x2a, 0x66, 0xe4, 0x91, 0xa6, 0x93, 0x1f, + 0x7a, 0xc4, 0x65, 0x70, 0x0b, 0xc8, 0xb8, 0xec, 0x83, 0x98, 0xd6, 0xd6, 0x87, 0xce, 0x45, 0x3a, + 0xe7, 0x86, 0xef, 0x83, 0x69, 0x4f, 0xc8, 0x15, 0xaf, 0x86, 0x01, 0xb4, 0xde, 0x26, 0xe4, 0xb6, + 0x41, 0x1a, 0xd5, 0x4f, 0xb1, 0x7b, 0xa4, 0x03, 0x9f, 0x9c, 0x7f, 0x67, 0x11, 0x98, 0x8e, 0xf8, + 0x26, 0x2f, 0x0f, 0x1e, 0xef, 0xe8, 0xf7, 0xe7, 0x47, 0xe0, 0x04, 0x90, 0xef, 0xef, 0xed, 0xcc, + 0x4b, 0xda, 0xcf, 0xae, 0x80, 0x8b, 0x49, 0xc5, 0x0f, 0x88, 0x73, 0x6c, 0x54, 0x08, 0xfc, 0x77, + 0x19, 0x8c, 0x6f, 0x39, 0x7c, 0xcf, 0xe1, 0xf0, 0xe8, 0xd3, 0xc3, 0xb3, 0x64, 0xfe, 0x27, 0xf5, + 0xeb, 0xff, 0xf8, 0x6f, 0x3f, 0x4d, 0x7d, 0x9d, 0xca, 0xfc, 0x67, 0x4a, 0x3d, 0x5e, 0x0f, 0x5f, + 0x68, 0xfb, 0xbd, 0xcf, 0xaa, 0xa7, 0x91, 0xf4, 0xd1, 0x52, 0x4f, 0xa3, 0x19, 0xa1, 0xa5, 0x9e, + 0x46, 0xbc, 0xb3, 0xa5, 0xba, 0xc4, 0xc6, 0x0e, 0x66, 0xd4, 0x51, 0x4f, 0xbd, 0xd8, 0xc2, 0x69, + 0xc4, 0x93, 0x5a, 0xea, 0x69, 0xec, 0x42, 0x85, 0xe3, 0xc8, 0x7a, 0xd7, 0x5d, 0x5b, 0xea, 0x69, + 0x34, 0xb6, 0x7d, 0xcf, 0x65, 0x8e, 0xed, 0x90, 0x9a, 0x71, 0xa2, 0x66, 0x5b, 0xbe, 0x92, 0x08, + 0x9b, 0x9b, 0x94, 0xe3, 0x26, 0x15, 0xb9, 0x09, 0x86, 0x38, 0xc8, 0x41, 0x3d, 0x6a, 0x4b, 0x3d, + 0xed, 0xc6, 0xaa, 0x96, 0x7a, 0x9a, 0x78, 0xd3, 0xe1, 0x9c, 0x7d, 0x1f, 0x7b, 0x62, 0x7c, 0x91, + 0xda, 0xbd, 0x05, 0xff, 0x48, 0x02, 0xc0, 0x3f, 0x70, 0x71, 0x3d, 0xbe, 0x99, 0x43, 0xcf, 0x8a, + 0x33, 0xbf, 0x96, 0x59, 0x3d, 0xe3, 0xc4, 0x0b, 0x52, 0x16, 0xfe, 0x0a, 0x18, 0xff, 0x84, 0xd2, + 0x23, 0xcf, 0x86, 0x73, 0x79, 0xd7, 0x2b, 0x6b, 0xf9, 0xdd, 0x6a, 0x70, 0xa7, 0x5f, 0x45, 0x73, + 0x5e, 0x68, 0x56, 0xe0, 0x77, 0xce, 0xf4, 0x35, 0x5e, 0x17, 0xb5, 0xe0, 0x6f, 0x49, 0x60, 0xdc, + 0xbf, 0xe3, 0xaf, 0xb2, 0x35, 0x03, 0x9e, 0x8a, 0x32, 0xeb, 0x02, 0xc5, 0x77, 0xd3, 0x2f, 0x89, + 0x82, 0x6f, 0xc3, 0x7f, 0x49, 0x60, 0x32, 0x0c, 0x36, 0x70, 0xed, 0x4c, 0x28, 0x89, 0xb8, 0x34, + 0x10, 0xc9, 0x1f, 0x4a, 0x02, 0xca, 0xef, 0x49, 0xe9, 0xac, 0x7a, 0xac, 0xbd, 0x18, 0x0b, 0x2e, + 0x93, 0xbc, 0x8f, 0x87, 0x47, 0xa9, 0xc7, 0xeb, 0xda, 0xd0, 0x2c, 0x6b, 0xda, 0x77, 0xd5, 0x63, + 0x0d, 0xbf, 0x2c, 0x8f, 0x94, 0x85, 0x7f, 0x22, 0x81, 0xf1, 0x6d, 0xd2, 0x20, 0x8c, 0xf4, 0x1e, + 0xff, 0x20, 0x9b, 0x9c, 0x76, 0xb1, 0x58, 0xbe, 0x0e, 0x66, 0x01, 0x28, 0xda, 0xc6, 0x3d, 0xd2, + 0x2c, 0x7a, 0xac, 0x0e, 0x47, 0xc0, 0x45, 0x30, 0x7e, 0x9f, 0x7f, 0x6a, 0x70, 0x06, 0x8c, 0x3a, + 0x04, 0x57, 0xc1, 0xd8, 0x33, 0xc7, 0x60, 0xe4, 0xe9, 0x79, 0x30, 0x7b, 0x92, 0x33, 0x1c, 0x87, + 0x83, 0x70, 0x8d, 0x72, 0x83, 0xc0, 0x14, 0xf2, 0xb7, 0x45, 0xc9, 0xbe, 0xac, 0x9f, 0xfc, 0xab, + 0x04, 0x26, 0xef, 0x10, 0xf6, 0x99, 0x47, 0x9c, 0xe6, 0xff, 0xa7, 0xa7, 0xfc, 0x44, 0x6a, 0x17, + 0x1f, 0x66, 0xf6, 0xc0, 0x4a, 0xbf, 0x0e, 0xa0, 0xa3, 0x70, 0xc8, 0xca, 0xff, 0x0b, 0xa9, 0x3c, + 0x22, 0xec, 0xcb, 0xc3, 0x1b, 0x67, 0xd9, 0xf7, 0x43, 0xae, 0x20, 0xb4, 0xf2, 0x27, 0x63, 0x60, + 0xfe, 0x0e, 0x61, 0x61, 0xc2, 0xf7, 0x95, 0xdf, 0x1a, 0x3e, 0xcb, 0x05, 0xfc, 0xe9, 0x57, 0x67, + 0xcd, 0xfc, 0x68, 0x54, 0x58, 0xf0, 0xdf, 0x32, 0xfc, 0x5a, 0x3e, 0xc3, 0x86, 0x4e, 0x15, 0x11, + 0xc4, 0xcb, 0x7e, 0xdd, 0x48, 0x2b, 0xb9, 0x96, 0x48, 0x2e, 0x03, 0xdb, 0x89, 0x9e, 0x35, 0xef, + 0x45, 0x8b, 0xf1, 0xa0, 0xff, 0x82, 0x82, 0xbf, 0xff, 0xea, 0x40, 0xde, 0x58, 0x9a, 0x1a, 0x5c, + 0x90, 0xf7, 0xf2, 0x75, 0x0b, 0xee, 0xbe, 0x86, 0x0c, 0x54, 0xd8, 0x9b, 0x85, 0x06, 0x54, 0xb9, + 0x03, 0x96, 0x07, 0xda, 0xe9, 0xbe, 0x48, 0x6b, 0x2c, 0x4b, 0xc2, 0xbf, 0x93, 0xc1, 0xe8, 0x4e, + 0xa5, 0x4e, 0xe1, 0xa0, 0x1f, 0x47, 0x5c, 0xaf, 0x9c, 0xf7, 0xfb, 0x8d, 0x30, 0x64, 0xbc, 0x34, + 0x65, 0xe6, 0x3f, 0x52, 0xed, 0xe2, 0x8f, 0x53, 0x60, 0x92, 0x54, 0xea, 0x14, 0x39, 0x76, 0x05, + 0x2e, 0x3c, 0xf0, 0x4c, 0x13, 0x3b, 0xcd, 0x02, 0xda, 0x09, 0xa6, 0xd2, 0xf3, 0xdb, 0xdd, 0x37, + 0x1a, 0x31, 0x9b, 0xd9, 0x06, 0x30, 0x7e, 0x51, 0x05, 0xbe, 0x21, 0xaf, 0xe7, 0xdd, 0x47, 0x40, + 0x7e, 0x67, 0x6d, 0x03, 0xde, 0x07, 0xef, 0xea, 0x84, 0x79, 0x8e, 0x45, 0xaa, 0xe8, 0x59, 0x9d, + 0x58, 0x88, 0xd5, 0x09, 0x72, 0x88, 0x4b, 0x3d, 0xa7, 0x42, 0x90, 0xe1, 0x22, 0x46, 0x4c, 0x9b, + 0x3a, 0xd8, 0x31, 0x1a, 0x4d, 0xe4, 0x59, 0xf8, 0x18, 0x1b, 0x0d, 0x5c, 0x6e, 0x90, 0x7c, 0x76, + 0x09, 0x4c, 0x9e, 0xe4, 0x2c, 0xcf, 0x2c, 0x13, 0x07, 0x4e, 0x2d, 0x8c, 0x88, 0xff, 0x7e, 0xe9, + 0xa3, 0xbb, 0xef, 0x03, 0x79, 0x73, 0x6d, 0x13, 0x6e, 0x82, 0xec, 0x0b, 0xe4, 0x56, 0x29, 0x71, + 0x91, 0x45, 0x19, 0x22, 0x27, 0x86, 0xcb, 0xf2, 0x70, 0x1c, 0x88, 0x77, 0x33, 0x71, 0xdb, 0x9e, + 0x9c, 0x1d, 0x2f, 0xf8, 0x7e, 0xa9, 0xa7, 0xfe, 0x09, 0x3d, 0xbe, 0x94, 0x99, 0x8f, 0xa6, 0x08, + 0xbe, 0x56, 0xf0, 0x9f, 0x59, 0x1e, 0x43, 0xd8, 0xb3, 0x04, 0xff, 0x42, 0x02, 0xe7, 0xb6, 0x09, + 0xb1, 0xc5, 0x8f, 0x49, 0x7c, 0xe2, 0x9b, 0xa9, 0x46, 0x3e, 0x14, 0xb6, 0xdd, 0xca, 0x6c, 0x9e, + 0x19, 0xeb, 0x63, 0xbf, 0x53, 0xe7, 0x79, 0x8b, 0x21, 0x92, 0x54, 0x11, 0x80, 0x3d, 0x5a, 0x32, + 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x28, 0xdf, 0x0e, 0x7e, 0xc2, 0x1f, 0x18, 0xe5, + 0x47, 0xe0, 0x23, 0x30, 0xf1, 0xd0, 0x30, 0x09, 0xf5, 0x18, 0x1c, 0x40, 0x34, 0x90, 0xf9, 0xb2, + 0x80, 0xbf, 0x04, 0x17, 0xa3, 0xfb, 0xc9, 0x02, 0x61, 0x75, 0x30, 0xbf, 0xe3, 0x38, 0xd4, 0xe1, + 0xfd, 0xcf, 0x36, 0x61, 0xd8, 0x68, 0xb8, 0x43, 0x2b, 0xb8, 0x26, 0x14, 0xbc, 0x09, 0x57, 0x62, + 0x07, 0xc6, 0xa5, 0x3e, 0x33, 0x58, 0xbd, 0x1a, 0x48, 0xfd, 0x6d, 0x09, 0xc0, 0x3b, 0x84, 0x25, + 0xfb, 0xad, 0xb3, 0x4b, 0x95, 0x04, 0xc7, 0x40, 0x18, 0x6f, 0x0b, 0x18, 0x57, 0x32, 0x97, 0xa2, + 0x30, 0x38, 0x82, 0x32, 0xad, 0x36, 0xd5, 0x53, 0x5e, 0x30, 0x88, 0xbe, 0x0c, 0xfe, 0x86, 0x04, + 0x16, 0xf6, 0xa9, 0xcb, 0xb8, 0x44, 0xc1, 0x2a, 0x80, 0xbc, 0x5c, 0x6b, 0x37, 0x50, 0xbb, 0x2a, + 0xb4, 0x5f, 0xcf, 0x5c, 0x8b, 0x6a, 0xb7, 0xa9, 0xcb, 0x38, 0x02, 0xf1, 0xf3, 0xa0, 0x0f, 0xa3, + 0xe3, 0x14, 0x7f, 0x23, 0x81, 0xc5, 0xad, 0x3a, 0xa9, 0x1c, 0x85, 0x59, 0x7a, 0x1f, 0x3b, 0xd8, + 0x74, 0xbf, 0x21, 0x9f, 0xbe, 0x23, 0xe0, 0x16, 0xe1, 0x87, 0x67, 0xf9, 0xb4, 0x2d, 0x50, 0xa9, + 0x87, 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0xcf, 0x12, 0x78, 0x43, 0x98, 0xe1, 0xbf, 0x92, 0xf2, 0x9e, + 0xf2, 0x5b, 0x31, 0xe8, 0x33, 0x61, 0xd0, 0x3d, 0xb8, 0x3b, 0x84, 0x41, 0x41, 0x2f, 0x24, 0xfe, + 0x3c, 0x26, 0x61, 0x1c, 0x3d, 0x6a, 0xc1, 0xbf, 0x97, 0xc0, 0x79, 0x61, 0x1a, 0x77, 0x96, 0x6f, + 0xcd, 0xa2, 0x4c, 0xe1, 0x25, 0x2d, 0xe2, 0xce, 0x16, 0xef, 0x41, 0x5b, 0x85, 0xf8, 0x5f, 0xce, + 0xa4, 0xff, 0x5a, 0x6a, 0x17, 0xff, 0x52, 0x82, 0xb5, 0x01, 0xdd, 0x7d, 0xf4, 0x37, 0x05, 0x94, + 0xcb, 0xa1, 0x67, 0x75, 0xa3, 0x52, 0x47, 0x6e, 0x9d, 0x7a, 0x8d, 0xaa, 0x08, 0xf9, 0x65, 0x82, + 0x3c, 0x97, 0x54, 0x91, 0x61, 0x21, 0xbb, 0x81, 0x2b, 0x04, 0xd1, 0x9a, 0x48, 0x0e, 0x55, 0x5a, + 0xf1, 0x4c, 0x62, 0xf9, 0x3d, 0x23, 0xaa, 0x50, 0x93, 0x0f, 0xae, 0xa4, 0x3f, 0x03, 0xab, 0xfd, + 0xca, 0x52, 0x1e, 0xba, 0xc3, 0xf7, 0x84, 0x61, 0xdf, 0xa4, 0x9f, 0x82, 0xf3, 0x15, 0x6c, 0x92, + 0xc6, 0x16, 0x76, 0x49, 0x20, 0x83, 0x37, 0xbf, 0x50, 0x07, 0x63, 0xfe, 0xef, 0xea, 0xc3, 0x06, + 0xaf, 0x4b, 0x62, 0x97, 0x17, 0xe1, 0x42, 0x2c, 0x78, 0xf1, 0x25, 0xed, 0x07, 0x60, 0xa5, 0x68, + 0x51, 0x56, 0x27, 0x4e, 0xa0, 0x89, 0x07, 0x8c, 0x48, 0x20, 0xff, 0x20, 0x16, 0xd6, 0x87, 0x55, + 0x3c, 0x52, 0xfa, 0xf3, 0xa9, 0x76, 0xf1, 0x8f, 0xa7, 0xe0, 0xd7, 0x12, 0x58, 0x2c, 0xa2, 0x92, + 0xff, 0x2b, 0x42, 0xe4, 0xfc, 0xbf, 0x00, 0xe7, 0x0f, 0xf5, 0xfd, 0xad, 0xdc, 0x1d, 0xdf, 0x74, + 0x64, 0x3b, 0xf4, 0x29, 0xa9, 0xb0, 0x61, 0xb7, 0x2c, 0x3d, 0x6f, 0x51, 0x8b, 0x7c, 0x14, 0x98, + 0xc6, 0xa9, 0xb3, 0x3f, 0x00, 0xe7, 0x4b, 0x0f, 0xb6, 0xd1, 0x46, 0x6e, 0xab, 0x81, 0x3d, 0x97, + 0xa0, 0x4f, 0x8c, 0x0a, 0xb1, 0x5c, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0x2d, 0x37, 0x68, 0x59, 0x35, + 0xb1, 0xcb, 0x88, 0xa3, 0x7e, 0xb2, 0xbb, 0xb5, 0xb3, 0xf7, 0x60, 0x27, 0xcf, 0x4e, 0x98, 0x26, + 0xaf, 0xe7, 0xd7, 0x0a, 0x08, 0x2c, 0x9d, 0xe4, 0x5c, 0x6a, 0x12, 0x61, 0x4d, 0xf7, 0x0b, 0x4e, + 0xa4, 0xc7, 0x9a, 0xb8, 0x5a, 0xc5, 0x59, 0x59, 0x4a, 0x8d, 0x6a, 0xf3, 0xd8, 0xf6, 0x7f, 0x1d, + 0x31, 0xa8, 0xa5, 0x3e, 0x75, 0xa9, 0xa5, 0x5d, 0x88, 0xce, 0x9c, 0xe4, 0x6a, 0x94, 0xe6, 0x4c, + 0xc3, 0x24, 0x85, 0x1e, 0xca, 0xc2, 0x00, 0x4a, 0x7d, 0x9f, 0xd7, 0x31, 0x1b, 0x70, 0x17, 0xdc, + 0xe9, 0xad, 0x63, 0x3c, 0x97, 0x38, 0xdd, 0x1a, 0xa6, 0x8e, 0x8f, 0x09, 0xb2, 0x89, 0x63, 0x1a, + 0xae, 0xcb, 0x5d, 0x97, 0x51, 0x84, 0x2b, 0x15, 0xe2, 0xba, 0xb1, 0x9a, 0x27, 0xaf, 0xbf, 0x46, + 0x65, 0x34, 0xa1, 0x7f, 0x0c, 0xe4, 0xcd, 0xf5, 0x9b, 0xb0, 0x08, 0x66, 0x76, 0xdf, 0x36, 0x11, + 0x46, 0x8c, 0x60, 0x9b, 0xb2, 0x3c, 0x5c, 0x03, 0xf9, 0xf4, 0x50, 0x0f, 0xc9, 0x8f, 0x7f, 0x5f, + 0x06, 0x73, 0x60, 0xaa, 0x84, 0x5d, 0xa3, 0x22, 0x9a, 0xd6, 0xd4, 0xa4, 0x04, 0xfe, 0x54, 0x8a, + 0xf5, 0xb1, 0x3f, 0x97, 0x26, 0x53, 0xe9, 0xa9, 0x2f, 0x72, 0xc5, 0xfd, 0xdd, 0xdc, 0x3d, 0xd2, + 0x44, 0xa9, 0xbb, 0x0a, 0x58, 0x39, 0xc9, 0x61, 0x13, 0x3f, 0xa7, 0x56, 0x0e, 0xdb, 0x46, 0xa0, + 0x2a, 0x87, 0x3d, 0x56, 0x67, 0x4d, 0x9b, 0xc0, 0xc9, 0xf4, 0x38, 0xe5, 0x03, 0xed, 0xee, 0x2f, + 0x83, 0x37, 0x07, 0x51, 0x52, 0xc7, 0x78, 0x4e, 0x1c, 0xf8, 0x41, 0xf6, 0x17, 0xc0, 0x1c, 0x18, + 0x15, 0x7c, 0x13, 0xe9, 0x31, 0x46, 0x8f, 0x88, 0x05, 0xae, 0x83, 0x95, 0x2e, 0x89, 0x4e, 0x5c, + 0xaf, 0xc1, 0x1e, 0xb2, 0xc6, 0xae, 0xf5, 0x80, 0x54, 0xa8, 0x55, 0x75, 0x3b, 0x15, 0xe6, 0xde, + 0x47, 0xe0, 0x9f, 0xa4, 0x4e, 0x93, 0xfd, 0xb7, 0xd2, 0xa4, 0xac, 0x8c, 0x6a, 0x57, 0x43, 0x9f, + 0x8b, 0x38, 0xa8, 0x2a, 0xf0, 0xa8, 0x1d, 0xa1, 0x85, 0xd5, 0xc1, 0x44, 0x02, 0x42, 0xe9, 0xd7, + 0x40, 0xda, 0xef, 0xd9, 0x21, 0xbc, 0xe3, 0x60, 0x8b, 0xb9, 0x88, 0x0f, 0x82, 0xb3, 0x04, 0x2b, + 0x41, 0x27, 0x0f, 0x17, 0x83, 0x45, 0x31, 0x0a, 0x57, 0xb7, 0xc0, 0x18, 0xae, 0x9a, 0x86, 0x05, + 0x0b, 0x31, 0x56, 0xab, 0x1a, 0x23, 0x13, 0xae, 0xc1, 0xc9, 0x0c, 0x97, 0xf1, 0x6a, 0xed, 0x98, + 0x20, 0xc3, 0xaa, 0x51, 0xc7, 0x14, 0xde, 0x57, 0x5e, 0x05, 0x33, 0xd1, 0x83, 0x19, 0x49, 0xbe, + 0x2e, 0x94, 0xaf, 0x0f, 0x7c, 0x5f, 0x48, 0x92, 0x3a, 0xbb, 0xe0, 0xe2, 0xa7, 0xdd, 0x68, 0x19, + 0x8d, 0x01, 0xc3, 0xde, 0xfd, 0xe7, 0x97, 0x01, 0x3c, 0xc9, 0x45, 0x67, 0xf8, 0x25, 0x81, 0x63, + 0x69, 0xb9, 0x8c, 0x9d, 0xe7, 0x0a, 0xb8, 0x98, 0x58, 0x2c, 0xe3, 0xe7, 0xb9, 0x86, 0xe1, 0x32, + 0x38, 0xa3, 0x4d, 0x83, 0xb1, 0xb4, 0x4c, 0x2d, 0x02, 0x52, 0x48, 0x7a, 0x3c, 0xd5, 0x71, 0xc7, + 0xf2, 0xb8, 0x08, 0x63, 0x1b, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x12, 0xd7, 0x52, 0x3a, + 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 6a7a75c2447..e7328ca4804 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -441,7 +441,6 @@ service ABitOfEverythingService { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { description: "Description Echo"; summary: "Summary: Echo rpc"; - tags: "echo service"; tags: "echo rpc"; external_docs: { url: "https://github.com/grpc-ecosystem/grpc-gateway"; diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 41a60607f7d..e357ff5ffd7 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -115,7 +115,6 @@ } ], "tags": [ - "echo service", "echo rpc" ], "externalDocs": { @@ -1865,7 +1864,6 @@ } ], "tags": [ - "echo service", "echo rpc" ], "externalDocs": { @@ -1918,7 +1916,6 @@ } ], "tags": [ - "echo service", "echo rpc" ], "externalDocs": { diff --git a/go.mod b/go.mod index 73fe8d8d48b..23003a8626f 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,13 @@ module github.com/grpc-ecosystem/grpc-gateway go 1.13 require ( + github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 github.com/ghodss/yaml v1.0.0 - github.com/go-resty/resty v1.8.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.3.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 + golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c google.golang.org/grpc v1.24.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 50fdb09d1b5..20a620a8700 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-resty/resty v1.8.0 h1:vbNCxbHOWCototzwxf3L63PQCKx6xgT6v8SHfoqkp6U= -github.com/go-resty/resty v1.8.0/go.mod h1:n37daLLGIHq2FFYHxg+FYQiwA95FpfNI+A9uxoIYGRk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -19,13 +19,13 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -40,6 +40,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= diff --git a/repositories.bzl b/repositories.bzl index 2d83853dfc7..477883cfad3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -43,24 +43,7 @@ def go_repositories(): sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=", version = "v1.3.2", ) - go_repository( - name = "com_github_kr_pretty", - importpath = "github.com/kr/pretty", - sum = "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=", - version = "v0.1.0", - ) - go_repository( - name = "com_github_kr_pty", - importpath = "github.com/kr/pty", - sum = "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=", - version = "v1.1.1", - ) - go_repository( - name = "com_github_kr_text", - importpath = "github.com/kr/text", - sum = "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=", - version = "v0.1.0", - ) + go_repository( name = "com_github_rogpeppe_fastuuid", importpath = "github.com/rogpeppe/fastuuid", @@ -79,12 +62,7 @@ def go_repositories(): sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=", version = "v0.0.0-20161208181325-20d25e280405", ) - go_repository( - name = "in_gopkg_resty_v1", - importpath = "gopkg.in/resty.v1", - sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", - version = "v1.12.0", - ) + go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", @@ -151,12 +129,7 @@ def go_repositories(): sum = "h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=", version = "v0.0.0-20190524140312-2c0ae7006135", ) - go_repository( - name = "com_github_go_resty_resty", - importpath = "github.com/go-resty/resty", - sum = "h1:vbNCxbHOWCototzwxf3L63PQCKx6xgT6v8SHfoqkp6U=", - version = "v1.8.0", - ) + go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", @@ -175,3 +148,9 @@ def go_repositories(): sum = "h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=", version = "v0.0.0-20190121172915-509febef88a4", ) + go_repository( + name = "com_github_antihax_optional", + importpath = "github.com/antihax/optional", + sum = "h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA=", + version = "v0.0.0-20180407024304-ca021399b1a6", + ) From e652ba06e9067ef41c199af59b9c6c67724850d4 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 9 Oct 2019 10:11:42 +0100 Subject: [PATCH 0228/1518] Add back bzip2 to image This is required by node_tests --- .circleci/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index a6a2f688857..c6cf118fc18 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,6 +1,7 @@ FROM golang:1.13.1 -# Warm apt cache +# Warm apt cache and install dependencies +# bzip2 is required by the node_tests (to extract its dependencies). RUN apt-get update && \ apt-get install -y wget unzip \ openjdk-11-jre \ @@ -30,6 +31,5 @@ RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/in # Clean up RUN apt-get autoremove -y && \ apt-get remove -y wget \ - unzip \ - bzip2 && \ + unzip && \ rm -rf /var/lib/apt/lists/* From 8115cdbcfe0a56abf367bbb9372a1dd2a7f2f8ab Mon Sep 17 00:00:00 2001 From: Marcus Low Junxiang Date: Mon, 14 Oct 2019 15:43:21 +0800 Subject: [PATCH 0229/1518] Fix building for Go 1.11 (#1062) * adding build-scoping for builds on earlier go versions (<1.12) * updating `BUILD.bazel` --- protoc-gen-swagger/genswagger/BUILD.bazel | 2 ++ protoc-gen-swagger/genswagger/generator.go | 4 ---- protoc-gen-swagger/genswagger/helpers.go | 9 +++++++++ protoc-gen-swagger/genswagger/helpers_go111_old.go | 9 +++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 protoc-gen-swagger/genswagger/helpers.go create mode 100644 protoc-gen-swagger/genswagger/helpers_go111_old.go diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 929d0cf11d5..c89eb04477d 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -7,6 +7,8 @@ go_library( srcs = [ "doc.go", "generator.go", + "helpers.go", + "helpers_go111_old.go", "template.go", "types.go", ], diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 31409ac4c19..61c5a537661 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -67,10 +67,6 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { return mergedTarget } -func fieldName(k string) string { - return strings.ReplaceAll(strings.Title(k), "-", "_") -} - // Q: What's up with the alias types here? // A: We don't want to completely override how these structs are marshaled into // JSON, we only want to add fields (see below, extensionMarshalJSON). diff --git a/protoc-gen-swagger/genswagger/helpers.go b/protoc-gen-swagger/genswagger/helpers.go new file mode 100644 index 00000000000..3615596f7c1 --- /dev/null +++ b/protoc-gen-swagger/genswagger/helpers.go @@ -0,0 +1,9 @@ +//+build go1.12 + +package genswagger + +import "strings" + +func fieldName(k string) string { + return strings.ReplaceAll(strings.Title(k), "-", "_") +} diff --git a/protoc-gen-swagger/genswagger/helpers_go111_old.go b/protoc-gen-swagger/genswagger/helpers_go111_old.go new file mode 100644 index 00000000000..8e9458dd8d6 --- /dev/null +++ b/protoc-gen-swagger/genswagger/helpers_go111_old.go @@ -0,0 +1,9 @@ +//+build !go1.12 + +package genswagger + +import "strings" + +func fieldName(k string) string { + return strings.Replace(strings.Title(k), "-", "_", -1) +} From c3787b4d95d15f4c89484b44e108a6640c1943ca Mon Sep 17 00:00:00 2001 From: Jeremy <45685728+Jeremytjuh@users.noreply.github.com> Date: Mon, 21 Oct 2019 15:11:33 +0200 Subject: [PATCH 0230/1518] Use Go templates in protofile comments (#1056) * use GO templates in protofile comments * Added support for the other swagger documentation fields * Added feature for Go templates in imported files * Fixed typo in main.go Co-Authored-By: Johan Brandhorst * Added Go template example * Added Go template documentation * Generated examples using build image * Generated bazel files using build image * Added use_go_templates.pb.gw.go in build file * Enhanced documentation * Fixed indents * Edited Go template bazel test * Excluded use_go_template.pb.gw.go in buildfile --- Makefile | 4 +- docs/_docs/usegotemplates.md | 93 ++++ docs/_imgs/gotemplates/postman.png | Bin 0 -> 51699 bytes docs/_imgs/gotemplates/swaggerui.png | Bin 0 -> 30963 bytes examples/proto/examplepb/BUILD.bazel | 2 + .../proto/examplepb/use_go_template.pb.go | 440 ++++++++++++++++++ .../proto/examplepb/use_go_template.pb.gw.go | 241 ++++++++++ .../proto/examplepb/use_go_template.proto | 85 ++++ .../examplepb/use_go_template.swagger.json | 135 ++++++ .../descriptor/registry.go | 14 + protoc-gen-swagger/defs.bzl | 5 +- protoc-gen-swagger/genswagger/template.go | 84 +++- .../genswagger/template_test.go | 165 ++++++- protoc-gen-swagger/main.go | 2 + 14 files changed, 1247 insertions(+), 23 deletions(-) create mode 100644 docs/_docs/usegotemplates.md create mode 100644 docs/_imgs/gotemplates/postman.png create mode 100644 docs/_imgs/gotemplates/swaggerui.png create mode 100644 examples/proto/examplepb/use_go_template.pb.go create mode 100644 examples/proto/examplepb/use_go_template.pb.gw.go create mode 100644 examples/proto/examplepb/use_go_template.proto create mode 100644 examples/proto/examplepb/use_go_template.swagger.json diff --git a/Makefile b/Makefile index a591c77baaa..608d9028129 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,7 @@ SWAGGER_EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/wrappers.proto \ examples/proto/examplepb/stream.proto \ examples/proto/examplepb/unannotated_echo_service.proto \ + examples/proto/examplepb/use_go_template.proto \ examples/proto/examplepb/response_body_service.proto EXAMPLES=examples/proto/examplepb/echo_service.proto \ @@ -73,6 +74,7 @@ EXAMPLES=examples/proto/examplepb/echo_service.proto \ examples/proto/examplepb/non_standard_names.proto \ examples/proto/examplepb/wrappers.proto \ examples/proto/examplepb/unannotated_echo_service.proto \ + examples/proto/examplepb/use_go_template.proto \ examples/proto/examplepb/response_body_service.proto EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) @@ -161,7 +163,7 @@ $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ diff --git a/docs/_docs/usegotemplates.md b/docs/_docs/usegotemplates.md new file mode 100644 index 00000000000..69dfa9474a7 --- /dev/null +++ b/docs/_docs/usegotemplates.md @@ -0,0 +1,93 @@ +| Title | Category | +| -------------------------------------- | ------------- | +| Use go templates in protofile comments | Documentation | + +# Use go templates in protofile comments + +Use [Go templates](https://golang.org/pkg/text/template/ "Package template") in your protofile comments to allow more advanced documentation such as: +* Documentation about fields in the proto objects. +* Import the content of external files (such as [Markdown](https://en.wikipedia.org/wiki/Markdown "Markdown Github")). + +## How to use it + +By default this function is turned off, so if you want to use it you have to set the `use_go_templates` flag to true inside of the `swagger_out` flag. +```bash +--swagger_out=use_go_templates=true:. +``` + +### Example script + +Example of a bash script with the `use_go_templates` flag set to true: + +```bash +protoc -I/usr/local/include -I. \ + -I$GOPATH/src \ + -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ + -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway \ + --go_out=plugins=grpc:. \ + --grpc-gateway_out=logtostderr=true:. \ + --swagger_out=logtostderr=true,use_go_templates=true:. \ + *.proto +``` + +### Example proto file + +Example of a protofile with Go templates. This proto file imports documentation from another file, `tables.md`: +```protobuf +service LoginService { + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // {{import "tables.md"}} + rpc Login (LoginRequest) returns (LoginReply) { + option (google.api.http) = { + post: "/v1/example/login" + body: "*" + }; + } +} + +message LoginRequest { + // The entered username + string username = 1; + // The entered password + string password = 2; +} + +message LoginReply { + // Whether you have access or not + bool access = 1; +} +``` + +The content of `tables.md`: + +```markdown +## {{.RequestType.Name}} +| Field ID | Name | Type | Description | +| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} +| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + +## {{.ResponseType.Name}} +| Field ID | Name | Type | Description | +| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} +| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} +``` + +## Swagger output + +### SwaggerUI + +This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/ "SwaggerUI site") + +![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png "SwaggerUI") + +### Postman + +This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/ "Postman site") + +![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png "Postman") + +For a more detailed example of a protofile that has Go templates enabled, [click here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/use_go_template.proto "Example protofile with Go template"). diff --git a/docs/_imgs/gotemplates/postman.png b/docs/_imgs/gotemplates/postman.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6fb7fb9c6e289f01b568f6f9ba6a1a158561ff GIT binary patch literal 51699 zcmdqIbx>Ww^Ct=+!CiuTa0u>j(ctdEF9ZngZo!?4ySrNma*-SKCO~l4T-@Dt^V@H- zyRYiKKek?Ny{b1=r%uf|Q!_n%y8F{-x;siuMHT~<1QiYr4ntl}S_2O5wH6#4{1!6e zpC?P26%2oF@U9xNl5lmSWP5))udO7MCE(y1L1>S_H-GvlPI4bz;ova){_BE=I#zsw zgZmjNFD;?vWqi1TB#tk;hIksm98HcESyT`i9r=ZXmGSzmc^sX(xsMWORM`%R$6i`EmzYsnY?S?FSO4Yc%N zn|_6j^Pi?(`jPns_g{yOvp`b%KkXAeqE_VJHq!qE_3x0xOd>UEn*TJeDJf#L1;J|a z#c$bRxkEd`Ouk1fyYug{FN#xN{~ZH95y@fGnzn&KIxbpvNv^+{T4-W@t7by^yNugf zqna-MN4a~{IkP}*0Hd9LZ&43R!!j(|BuJA}Pi)Ho$;4>_aV_9-l8s%aN;-|G=k|AA-Z<1Umj{1^VV&=5&XT z6>P>&JI<_1IU(H&i@CIjuA$_Pz(POz{}5XApiE~_Q4u7R3|zP*(Bs?3K>H+_D@tBP zeo+W6`h;UqFWVCiU{qN{c6VmeoBm9T!MKX$em~5(cui7gMaYu*Mz>e3?Eqz2po6j@ z?LvRvI6}x#&|%XEf7Tq0aX2B|=38iHXp^4c!K4jO``F@w9!JJsR=ed_e?m(&F@<%b z%?P(6qexzpRg2GNH{2Ri^WfuxUAe z@a0!_g!e`FciXOd)0J2#$LCpcauWD`*bjud({I zNzdOJl4&Uic3Kr)^mziLZTvN|gllqyP+r~^ZTbbLm~HXMp+;0_u1UcrlGS3y)Y^4F z)$}aao53C@&1&w>tz(Hqh(f}Ey%Dwz4mwzdhN4Ii*`Wux^cLXOI=7Smo@nPvy=YEu zE^Ijf8E}95vCVKHxXpY<9mt+v#5$ed{F((YVK65fXsScWtHBpaqw-VcuSR+1-@&Jn z>N?YIu~%rAhhqIQooGl+sd=xI^c<#*ac6>8Q#I_Z?x*}b=S^m}823uSOx@)(9O|rC zNN)z?GRK7Zw#slkY7f8*I6`GIPx4xdb=+@S0KHW-<_fkBz|Ii_*}*6wv*ep&B)qnT zn9)wGv>)UdL0A+Rc2>=Gh@aPfqWus6p(*^c7%Tp%m=zVt59^Dlo`wc1ICD3FuiWMB z^_rhCJRD>kk2qs^Yr1xd?tjlTxa`9(&&MTg%C~g`nd{1Tn7ohUo1490FH7G)c#lTG zXIna5!JVt*B)wv)umFL3#h_gAG5KzF#)EV~1=*W41xauHo_4NZ z?|H(S$6Srs4*(;7`GC$M#8w^=(7NL5xjMV8P%IqXv&-#!u*j zaR{~rZWZk}f*AdHcqG)%9iT=knm6rX%$wyOOnc@av`{N%nO!ll^uLQ8`~KOc9*+;I z2fX7Csq(yrI@{BDQoXqo>ZfYJSF8d0{IH~0(gia@VqrbL)0AX%J-C+l4M&1VIx}IQ zxjr=)nLHQ%=Fc#?#}`f_exbw)71$?SwN`Cz0eKX6?Az!3j44{;m^{jGI1|TPkT)f# z!`Ft*o1YvrKf?Y|V8Z{Twy2?xskOR(ff9XvC=nH)_QB8oyt{pULl^F$6}X~sOs|#X zj!!o@rr4gu26==|qNQPMmUQ&|giyY++c?_^|DnNV!8KdoJ6Htvs>z;YmUUt>V|qJy z-Pf6ml$en4C3KhL@#-g|S4_`86!0m~G7^7tTrukn&sv32{86>o$=(s)?g=@}fKsaG zUi`ldRCPeZ{$t5Cn>c?`1lrxBll=xBBk~hw*i!!YZ*1&ECHz-{Ll*sl;M)oucr53*+i;rpf5ht??~~C_VsyCC zBvi|}b_XlPJFw4nK`uA*vH90fE^B*FWj<6!p-U_(RqYxh-`luh!m#U@eKte4kI z5@H2e$;Z?!I`JpHMLGxtPGZvwXzEG6=oOskX{!dNb3c`Tx_3weCocCgjBVy4KUsq@ z7FC`JUf2Q%jXwtdPEKb4PP(1|dn|eH1Hq`aRyQFbDXOziXV#}fx8$l1Em9pG;6lx@ z^3#uMi%%CKM1O&?Dj`h2AU0iU#7xB%O*4koHo)~fdW0a@+E48ywDe{M1lKqhY|Q;<$E#&X(PAJEaok6rFR`Y9muR)+-dy}R{6EK z3M4Ir;|Dfmey7Ka(H?fe&67Yyqk~VoZ%F05t!Q<`enF@H8f8)Bs+Qp~DJHb?_)7Jq zZp%H>Xz|pfD14YnIbz(_|AcbR0+(UGaaT9mPmj->+consp*5_ZqNIl4L+ftQ@#y_S z-sO9qP8J9$1pGt)wZ>spZ8Zy8n_r;Yy;dWEoLr{r2ey0-ImtYQ6#)J1v<6*3enbEh+6%o z3KA0VRod0`82_lo;!0Hrvz@EcCemW!FL2o&A=aul&h5ef%MYK=hL8Xw)G7fXA!er1 z)Ccs`q$J$=`FY0tzpF%2_?h)3MN{}{z@)6%SXomz|8Wxcj7{v{D*vx|Gi09}ONYl` zCf{^E!P?5j{tq-AS{VwGI$z`YZ&OL%F)A2y;Q(AOHHY4ELCX(2sa=0_JEI)O=!NLl z#%d)!w`2;}Gp(P;b|d|z5A5DbSCB+T97;=zFm7Ix0^uo_cU_`8~S}dd+_ET1dmVG)5 zh{H4JW)h)CnLP4eDGGCXg``USi+@6AS^kp8U%ZdNta18@3cNq?rvEJq5o1f|Zrqnd zS#11DLIq?LDA)s`HOY!%gbP&6!_w9$^fqgm`7*iuRXCqa=WLJFo`Lp<+&1*6WLivf;KI?CY2# zTZ6(+F~?0Ii*^l%nrw=AI1By5D*i;CmCLWH{lAAVOZeS~twkv*53G3R`J|{_2h9Qw zycIJ0xzLu%P=17taOyc6b|$KU@Xv=xZRcHgfA~EjHqJzAAcolg#fhS!s`D=jKcepx zPNivIyCmgI`u4g}F=~*0$L?s4^>JuQS}Qs)eLS>GGnX= zYx6^lVvG2}&#$MJlWs~mx18I)BT!j?H$@M}+DzFWbM90kscs8$uP@WeKkD&Fp{er9 zpl;dLZl2(A3>63`?PTMP8)RBe_;BTMV-m@yyjQ&+=A6fpS+W$jYoElNVz^WvDzVEJ zLe83r+?r6rdqzm&a+b_88_~R_a9etBuQWGN-4yILU`7SR(H#v6XooZ*L(KVNn1Dgfa zfAqCzsRR{)nI2sGj=jf`UcaDi7>9tBiNKC22G~j+H9ctouw)l4oLl)ol=73>wST92 zq<8ZtCGj6h;yl>0tS=(!cx(#I>fB+Hd-#*r(JMBwQnW7E*3XBf0)-|zl@0VQzr-D1 z$0~e(Bmi6GMq-`h*88i(&EF3o{L(*2Q~b-2R^6F5T1svPiTcJ$`D)-d(GQGv<&*iq6)QJ$xsu=SPfWZq~=iTb**3L=qbYW4om&NCmh*yfD7-8r0Ko)q(|Nk^DeA7ankE(+3@~lP$(MV z`|m%0%HL_}rvju(FR?C~f|-h%LYQba;cx}Wm#&+oeH=~&dinMmut)BK<8KL5?~c2aOW#L7Oo7Hf4ZVE;CNRkJWQT! zg&{qz_jC*}$Ki3}O-r4N_y9@nD{uclj6u`~Z zo9Jr%BaXswU|>LlwSRO}MV|B5|A6p1Rg05t5*bA z0d;;g8Zv8~D@7e`VkZw9IlH5ae@>4ESMtzUCXV`SMOS!c?;_=NfZ|)X>&~A&h3nt8 z`!;y3%Dk&e8RMt+95WkP%7`@3>(4FJk*bZ2p6=aYR{!a*r+rY}#b&M(z+5#%o%0^wQb z4-t5tLCYN|S4XMx<-+>oE*iX4y^(aStD31s0<8tW?kSLq_?3HDWoGuD-$r|_H#Z0v zd#k(-jcUg2lfEa9^ALZioptNO{G=wVUH^kt)VzQr=ZHuS#_p(?^ULlN74De&UPil- z!*)mda7D+nhjeRzDsVfR2xxr+;ex~n?*`OQEu)B74XN!N97FRJgPkrr&+q60YMNWVy%7{e_$}t@0Kd%3rXChi?kLvDLp87G+JJG_VL z(7rdyp%e7)DJslOq*Mr(S5cq5$uRVT#cs-(^I0Saq8!URW5(&(Vd=llJ-hGH7l<}3 zK>7-4OGT*1NF?7vH}sBXU)S}%WVKa>J^33bI)qmVSh9?r&R31_o*kR;54%4z2B$ru zxMEtF^M;!D^?eY+gRQG0fi=(g<~$wFJ9Mj;Hjb`(-Nj&3G@kZ@>?f_VL+N9%kQriy z_y_50o6gUd8y$xy>j9pSxqS4qoOW$qQxhn{`Fpn@S#n?Mut*AgPsp(9&K|PpEv<|& zQ@*3*&R(Iw?Z)TjUYcV^nFlq3uUNwDtM}w}RcWqsn=;gPH%6=w8;04(lUIXc0Ax%B zjRm`L^W9I=4^~VqT27GGhK4U;_T&OB`$6T92mIu^dU3TBGWwr-+=M0;fN;m>TVz_{ zZ^2)`e&uMEEKj5a{!&$?x~K*IXbkXAmEM8X@$6vdV^HlwJq$pMvga#xVm~^N3e{=lS4)pHZ`O#@YT-L z9zj58c{V89^(y5FtYSug`#qk=-+>A%q9CoGs2<-5_mOUlbhB-;Ry*pq)fI^jVoY#|9LG4f|R1f?z8`h1ndtS!)=*old~>vjL)$ zyTGsHu#TKz87B_`=R^4d$7nivw4N!1JV@h-W0d)WI%l>bSKa`8 z6&47|JAl0-?gEAtN<8$}K#D6dJEPi%)&3K|=R8e;P8Clww?jS&Ic`0)$zZ^g$48v< zF+)$HNt+_V0+ThYMzphAn^41NXP-b9Hojeb|3Od&V_HL#-<`W8(j>iejJFltVF&oHNyj~h~ zvO_HSl#34_gN|N3{N}Zwx#vw_IQV+RN5L-YLS#U@`DAKgACq%g8Zzh8*4 z!JD)5<_mMx*tq~4GeRPmZxoXiB-(;tI|Z}4sbUiQazS%C1?7UT9csd8(LRFdAfj z$@D&_$tX^Ufp}L|1IAZ5nDrvuAd5_F=K5l1LcEx30Ssg}s`c0{3i+tM%}Wk$BdF-{ zw0k}m7#_o<)~lR4d8l8z_aTxV?jh{XC*l5*lTZE*;Og(4iWZE zdp*<3cCPwd%PVL1Byi8qB&biqbzI%IhkIqKOsn+-b@ZWWw0!r?)A&uFk@%x75w&vi z2}bJkdoB;NXT@Ul>#hKQ@$S`r)3Ks-4lT_Vu7l!r=Q1T##urRR5BE$uvVP8(^1}SK zljbXqKJ%8T@$?2prDGj~?LR>oU92;on%1>ca~kzW0Q3hml&6*ps!(~q$Jlw<=a5nN zY-zgln9iZ_(#;h(Cgnbw5~!SXk_+^fM7;3AlP&>Ml)Qdk|AyFPSexg|v1tUiQ z>6VlBC0E0)D_E8jm^;v-b^!%-;**r1>ZOt8LO-swlIH^yNB1$}gK61|x@yI`ol1~H zW-Z0`P3S$S_=84#=P&N*RVje(iJ)%LdnP7zlQI43yjfu6eR&Aoq#N+fK6GhB%XY58 zybP?2BzCpCVBj|VXqC0N=3C{XoR$QQlpwwt)%Ls!RDE*1=e72q8>Oo@zox6Y*sLtw z96+q}?9bOU!8=bgRMdTW$b&2z=%pF@n1hev#zr+whKF?+WGQvZSu}@Dbdv5t(4~rR z9g|)iS13!r*CaB^n51W!uP&aYrllS!bzc%oN-A%vcJ3dlca8~UFw*F1g!SeldUs44 z$=0dp6}^Qj9y-B>i9<@QTeT?~HptF->Z zuye1^$5W*%AP&h!&T(-m}q3{p56R?*#~#=>`DVf8h_E2;0>8$W{sDJH?hb zs*mAsXIF`SX9m>G>{U;*dwHs<-m>W|%A7r{a(bpLwuT%F$3F#p0sm?abYEf(0NGRO zvPY-R`5FlXtkaq`LqUw6JR+LL_|KNT9<9I{tAEqhnnpBJ|X z$)BWdS376?O&;XCXwNi=p`8`$TSHKDBx=xgfp)#ms)^{QNXWhOiUdpTnhD@D#%M%R zlBqX&&yXh_rJY6|roXW^J1B9i`oOz!e~sQv?Pij~u57d#bHBU(xlq($vJXNqc^tH1 zNadI=_Yow$47uNFq23d?$t!pUh!`y*%}w^r1S%a>9@E)fdNV<(uT-VFX4qL(Q{!2j zvu^^0rB{H1mRBDv=!7j>CLSnKo)&MkuPA;0h?9=o)Y05UuZZZ3{i95^m=R&|D5F}^ zxARc*Z|N|>CWmlv`HjKig=Xjb2P|JDQJ<<)qjy$S+}vZ;XeGAU$7E?__wu48zb^K* z*Y_BXJXhS+TaSM3yUx{Bj#&&=W6=+B>$*M1xIO6cTgnMIblg|3J?O4t(anukCYxVZ zrfO?-VxHxYas8Qj+U_dN%bE1+OnRto--Ugs?=rPu%sa=gJ~BvKKK6bi3edz>pWYkT z{wJ7ThsS$O@<6qAtCfCE%O9unT>i>DT9$bwqWf%|mFHI~x83H1qIC|!I-a7FcK3?3Vc#G+jry zv*i~1B-M137we)-h8=lg)0)25xZR3(O8B6y!d3Q)^m5dlP&bhy-9X`z5TC*An4x=z zZ66Cie?~Q{!#m@)w^#Ue4~q!jf;Zk7b?v`#bdNxRRGJT5Xd8~jkIjHkZa7w+1~1)L z8!+`IyiHc`w2A=q?-l1E(0=R1C*wg+piNO6yoRw~|G{yLQs+{~)-qtZ??q955 zwcT8-8b#$LfHwH3LT3kG${}q|*0m zQ%^pl$ir+mStT{C%IvWFKEygU;8|%L{7Dp4)Q}A5Qf%7H;NiB^aF3*lf?ETA3hS}4O3&D%LXCQ zck{sqU{s;)wMcqLnD*0JVY~P5)~6(8o2Yn}V~3D-}(rOnSppL^k> zsu&q0G|o5=-WG5Peo5##)!^^rc2t$}By<*?fdL%w!wtu<mo+WRd$DxSSEx(f0n1|o0zjBUT^~QKoq->tNDUSWImb#k0#d*f7 zbecTIvLpl`;#$Yai4xKn1)P6Rt{1Hpbujda?aTP$yCE=VpZ@GKL`%67XPh5qEoxZe zueMT(loxP9*L=HU^~gf7Mb@OL-?uiVEmYTUe|)$VQPl7DDdj6Jh{2?9YQ=q+jGtcI z5h7G@a%g|+8IP5;4T%hTUN_lpSr6UDnplv~>+U6WM46L3668AnsO0g4MS95xILQ%P zy;Zq=uOGD%PG&mij!n;xF<6JZViJZW`xr4&NXyZn731K&bY$YEI)AP6S*=TmM4&ao zlk_aM>h_Uvj}KBq?o1wbj)5?{-d(*4R~!0}+8nJ=hfsON>GLd0v~0XABRlOu9El^v zeP+@Rq(k@<{v-^}Rv9d)QwXNm6KD#=IZ-|c(&=r~=?dar^c}vb$?ix?Q}%t7heqw0 zH;jnXc9=If#mdhK!yc~pxQULi^81-Anhp_h(?vk?kh$-|F_vZt$&*5=on?9Xv90Cq z5sL1>0GQ8$|Gp+sPSfipny@{~)mBCBogBhF`*e>G7Ao?KxYPR@>)k@5u_>>U(zmxe zJAqpl+lG7^`VW0$+5!yy{<>Yo_X1WEWvm{oYQ@Nk ztNtPCH>%~Otl=ek^-9KP=nAy|{^@k~A=&Baq;}q@s%RR1h0;FymqdqqZ2-4qBi$oT z?BSCB^B)KFzq^UgPKxlU8&I=^9aywwi$ZWeqVZ8jfgH*^9*4tMOXfcp%gU>A@X5rs z!gYT2dpKHPr&sRLQR6&NFc%Y`_`N}+6pIoBUH6`*Z<{{_X@a*GN-Gjtd^s%vyvR>r z_t4w7F%p!HI%TQ!j`a-snVn*ptu-zSZjw9SMf%C`95K_e@o?hdSHL|GSE}nUX?cRX zlv~D6uRUZKLY}k|`JB}24!9Tu1el90nF0l6L7@msYaev?WXjNsAw8U%u&T+}E}jjG z=>14GTKAG2>d$0homq8YcjUfZ$9R;~#A=1~FHK(GXHMag5ip{M$mXmW)Qo`eVhi@&0v z@_i-(h%RF&cwsKK9^Yz{#q#o6ac~lsPFFH$Sbd$bjk_u%S{4eDo&2^3$dZ}m)6HnG z0R^PsJ5QP4-Pm$n85-+2sW_3N+vLrX&KOwedkaKc;B=6y>rbdRDPb|fa4CkL5zm^t zlt6oK?-{-_M-6sFGN`A;-jydEkgWp?AYiUKmICyfbllLm3@9~&a-*P#{$X;?bh02S zvZXTz-7b4aev1B9Bc+H08to>d5=XAKY~%%I~(;L=s9lb6}!h` z=Wjjfyg3Ixv~GPOs?J%yz0ydJkuW2KZxmh_hEU08mN_%s;we3uQ9c?!Ae%4kjk@k- zWi=wJ?mI@@WY1ICK~rrd5x*WUm1)fgnqcl_5YB4uYh8vZcH-*U?7nW*geDg4@u_(c z{e;?0w0O5$nb8d$hk2GD+0mPx1anp-e~is?00-m}P%v0CgqlyZ9rAs)^y{mV3)}Jc z-kGXZFFhJu&r}7fK^%7H8%ggm?uklm^n7mkqLLBZI=C>-?U$Ug?X%iRR-wwL`&(9C zY@z|^oZiHGmnF{ur-Rv~p-)ugRU9^mq^NwUx(E#v0@`eTmuqWpG@F$W*Lu6p3{WyoJS>^K4EUZ)W2CiS0 zLi)ONWxmlL?*6JKL`d`j_+?(7?g2NRB2r5HMuk2gbeWdIglgr7Tc0|aC>T|hbT!*y zVFT@Qjv8Gy?5f6Ru|dO~&JRsMHXb=6>w|#1VYwd#9Kb9St7qXM`QuWE)_~eJ< z9Ztl5&x3jGHam-x)ia}L_oe7Xm&Bh~PB;sReS@BL(j?4qd}Hs;?cUYwJli9-76sa; zG@)EDEfoM4DQv^_CjN+Myq;lydM_#fp?{Wnq0Q|QZv7RwcuLfFd^J?qEhoJmA@9M5 z#AWAFVlFQv)OG-FLmd@%ZalzMQxNC$t_^vT>} z4(`-{ZxQWvX$onu?pQTp`sL0}W*$KZt8|9I?l&$PY-F3=ju!4W&`JX$w+q<2jYJ4C zFS=zD&fJw>7E96B&$v431scz9j(qhac22LF4M+B-2t>mut3;7T`pz2;(H-8SDZa{Jl=o5`KHmW~YfQ5}n^ub$M10scLmT5!yVvcdUlb1ba@F|v z-l-597HUO`HBq+M8~$eY9}!=s@Ey^kU|xpn!+v{B2q4>Jer)c{?WeD=+vPczszH7t z!27xbqdWq^6>X0eDOyTfbS;mYnAfKpSvq?+u)oWP6#=;^QH>c z88n~6bB&S!yfob33i{Ma?ejZH$S9Q6-IYr-nq2+Ky7Oe-wqFegiRk>k`2{`=b4J6} z99o^7-4#B^>3?Y-`II0-&N}JC@+S-Ui_6)UM%7J$A#l zi1S!o=M9`M{sJxqZPP8fZC47V+>A5?zLImr*P#--!1M6&SL@c6LgISgb|CZaJ>RC} z{Mu;nAu1z-B75P^Xa@~@K@xa28*8Wjau_SYr|`v`C9x0<*dFcI8 zaJdSSm=2tqa9sXWs#vXe9MTrXTy1@GDyZ3RtFiY0Vy1g@)?)vg=IJ}94w5Jm=7-5y zWHK>|pjvq;&W1n6?_)^hv3n|71-`M2j!s&SlgwfDxcloeABX-Ntl5o>Y0pCJa*u$R zdYxJ5S6bg8iR4%>=~6!Fr$L1mIbfTsR$ES1Xn#)GXFU`7$tk5r*XN+8c{W~N{2_`) zxV5KLT2-FX2M&>?OG;~BJQuXEk1mO+PDId9lMzeyYMNT%q6kISfCn~w_@`GXl!Ypj zUb~JjeE=xMuHNj)x@Fxdu7lZ64KWr1ErrrqJN|aE@*q`HNtjvZO=44i=u={L>X+PX z8uu~sHVYM^+y2-1?*p(XYgNB=lAJxvM=2)`=^Gl259-VjNNO)&RP;Nqa5=qxwf-FO z<{;HUIIJAIaaXry!j^e)^#W)9SXKHX=(#=58(H4E<@2QYRR5+x{J((`Fl5s3}h0T6>GOQEBI6T&R!~IG<$#l)Y$-?C$y5NOZ48h&(~Z7l7l3o3 zOZv%pQXPm|TQDhMBLS-*Z$8!p7-pxP7m>!f;R-8&$i8i>e*v|egz z9|qOC*6*Bb#4EF}+2qsR&iYIPs#YYOr~d$iTw;^Md<9x4^8E<)@1ceLh)49J{Ve+@ zr`I%F?7i!}GgerD+(u*^>pRJ;bECR7l$B&lo*{_innxAO4{iahFp1@xNzOpTHUCaH z91UGmASq_u_w<*TzAy41CW%w8{;YrR*&%mBe5*@|Y@yO!KFK z;H|2e3Vc0?c9+Js6kP%fnSk_qDe!C~c}PRvObl7kfGM@#7c}i5TprAgnP#-;9E#7A zBnO%V&sEphg;&qrc9SWl`${oqA7l zEAja2KXf*bzjsykTN~!c{7)c@n$qn!8#FyFJFa>$to3_yjTBH>`Qv2i;}7-lSrBmXBJI|; zNo~->=uA5$$)PUWNF`Ui6LRhw+g)&2?$Ny~yzTy&>SXj&jd%ZbHz;)tG#EB8R$O0y z>aVy4H5soPEMuVenG?e`;is?$Ac}T{nS;lw^$ZSp zAJ?3`n|_ofi`|#irqLW~Gy1Cgg4 zzDGwtoLPvVih#!>Y|WQ!)zIY21X?R>tbA!-KcduOKz0mE00tTn>iVZi6J`Q{zq-Q1^J)Q7SIWy)rLSf0Qr z2v*J%J~tom)Sdp^#7MaVFL!HK((Kszpwy?cgVg{#04_q-?-1iZOpGOmZ5X=dcHPaj z44-3P4QCTEq|kmhxqYU{jy5@$S>H)LkqRg?A%EQs!CeD&e;F9NNgdi+@1!)>cO#09qUhxt1VJOuZDuh0POrk-Ph-6)%^$m9M`HM@fh3sLEG*8k zl{3uvge;WI8kx35Q6hZ)CeYsU_b@1@8L^Q0I8=7xCD6n)l1q_k-F-I(Yhv?;|14_S zP^G&pV4er}1awB2R_&L*lw#s!x!mg5VJ-%Y?(t?sUsJRy@*6>V_xo$&dI0v2pgl{D z*!-9J2RnqV9y#b=k?&m{FiV-o4S72 zUe4J%bIML|3-zE_{hIYK3aE>l5M=yFu`yuYbwSnne$)FT2AaB86g~QIKE{xphj$8` zlgeP4O%?)xhSri8);B<+*Z?CD`lUjsqOJPDH%iW5BdBS^^J8aADY&cwW#w*mH{RNY zqc0LCEk@S03@`C?lzbmb-0X2%w1pg7_ku;rj#*Sdu-tag`ufdAssEh!_<`QisVLFm zx&byo^+MkjczPT{*wSHo+`FSBl3&S7AMnU2(pz2(QoHsLHBQ=R7t899;ys4CmKE71 zl^{#yQN&N*ffU9V&dK?ZpbvpDVrz$0)w0CN`V7XsVlO$px9~%hX)HzEnA#TgFljf{ zCTx?d;@ETvHm&&-b^m+yPt+j+Z#jEeh2!Z|yT6DcKzedu7DS7DwsXL zFRbKw_6j!6y+^h7B}#^D0K-d~AEi(4O~)96$P0lR>G z$5y6wk3BXMYWw_E7wOV;x-pi?l5E5L1fA;uf|XvEejW=gjZq&Zwy7K*|L`gIt+|@D zPj{t$y>1~NF@{ZiD2m-ooiKq&P;|K)qUMIcOqNWyZ^nuZ z6p`lT19Jg!Kf;nZrnWVu(V)q3&h5(f5fcGyM)WH@xt^s(^T?gj)`X(w zkX3^naM>$cAys*#ICf}rD{^QRT1xDwxo3|bc`#|>S-R_33@{RmyV#xeMJaR*->}Wj zynViN_{`Lu^}%k!O$Zl_;aBLd@`;Qo-CJ)9t-7I}KLoa-NAd*vcDnoc|`o}cx0uzS5f{YtxGByw|xK6T8LB81?e)Hd0z-_1hn6Gy$g%&@N9uBRRJw!BM@h3v z3u18C7UP9A65Rs6<}eR~av(xFme)QAlw;HlDSB^XT{mkmU)ACkc?;%9CUu3!V4KMInOpMRz!qb1s+At%N`X=uk;+t5PaQ!Vhozgz z-qqaXp_Jr&Qx77(1crv z8}QGw%d$*a$IL8mj5O*pmSP`;`tnN`g`El7ZA}?PZbO|vIbAAqW9-TkkJTKb^+2u_ zQ{%2Jg^(me#E?#xXbC}PSw~{T5U!7A0?IoSB34Sj%EXN1Cz(?{Py>TUA-Ww3(6RUG6{G3UCojQ7jm12)!4&+ZhT!F9UQZlqE5?5dJZZI5J(QOuOk z*}z~&Nrdqe9k2_oXaYsEYZ-QV%V^*7Z`o5VZ~u=`yFr>!@5Nf_`F%J651YD&LWxLc z?FKFG*#%PhR%hod=D$z0Dp$j#rM2G9$lE>Gyakw0hFnZe5!e<;kc!26J+mp1AI9%% z(9?idv=~}p)gSZC{YSj-B+7Y73gXs~MP6pL&^;hGqx~B(%5Hbm;E>}LSDE@@RSOkR z?$`0-Z-J%;|0;c-Tp)iXwXKu__`J>Lu-j%42bHCfGD$RvIuOenxybA8QDs&;>}Q-HB{I1-uHz{`Flth?Ooq5u6Y@MkBXJ?H?`oap4&!*@hWhVQm_cw z5?-9<8*zWo^Qo(PQq+HPkSSiJ+7!|Z8g5F+w^bWXOh9-K`_*lcn%&(~H5^kNNUtJZ z846{GB9Oj?91k$Kn!Q0$H!C4|5qBW^n?h?2<&rOKX)G@4%*j!+w_TWEK_)_=JFSa|X zQ;#{|Gg`X2i~>-d%pPoNmcJp%SGKq5qw6gRfB)r+EhBnI1QsAhlF<6G`ojKf+=>yA z@>tgF^{6al$bTLq1@iX|DNrSl$zFCVX|*^A6%G#}2pT9PAh8Y_Xn^$o>~3*gdM zfZT+W{N$o`q2d9x5T(7+kgS~gY|^!r#x0uAT@~CkMggWU{x%Q zOKyosZbO1S-`al@B2 z!raI8gdMDDm1@u2rLF+3oKJViI@8i#NA)|sC)9hJ7I?tsLwvBcy~XLw z`#f)%9*fTV7BSxknB8Qqp1LOH`OrK%jrCtU5(2B~#|uz<0&P`(h#l4%m>pULn(s|+ z-TGc5Hz#l*lTi+IKmwxDefiXJnLQjF88Hbm^dP^@c75z>?bdQTB}?5EtPz*==SXSG z{DUdGv!bjJa!czZ_hVqU))P9P&6&@#8})zG19#RLQfmzikPI=gpwx6-3Kd1COS;w0 zlB~(enYR`z8Q}i@rKG9rX+iZ?oLh?E=Mq7%QI@4ZJZODj zjxwy?SF`!#34fJn?SnU;5~gGkrkr`3v(!UZp#xs?$pq!o!wqyCr5-q11UY@eGd|}b z6r=7!$g;Vi8*eDh(IxX~PAvLYae~!cg;DXTlb?Rs|BYO8 z6NFSYV+(xz-Pyonh#;Z`>D9i8oLZT+HwIKQWUEer#$7^)Mu+`7l4f2nso0@-)-~{7 z385P)g@P@8wgb_N9o*(Mx%E89f&8BAOLD%0Iv6_r;rpigE^FKx%8+ex$2Xm!*Z3w~ z@YVW@E$_>$LpaWz>L=K<_ts~^UeGSio*wWfR+LZNC-z^JoZRD_jI4e^{~ss<)cppZ znl*E!|IzUKe=nVFfHnJs2!$zql)W@d|-nVA_&Y%w!*`JBDa z?H8|a!+rg_JEHYZ6{XOunrqFKIWotWB>B8N8p*WeMj$W8)9rP|0x^&&7&(D-%zV#h z7Wo=4Jt@x%F)5pEe%xo#c48OibM$9t4_8h(ibd^q)EY>6p3UXMqe!ZwCAYu!olmMO zBL#foYf!13nYJx*XFP*#5^{EQWeVGPb%v3*>a^1m6G@3d>M>plM;s&q?(fD4wU~c1 zV%d7%fcw07QGzusIvXjHSP9r=T>Jg~$osQc(zESSZx%U_UO^bWF>Iuw6SJM8O{6qg zx|s;R{@zRO96GY7Q}(0JBs9jhuF!~c@q)-yaaJ&G(KQ#^#WZwjy%jj!nUI(v zVjYv3M@nU>z#`H_gLnFmK89GZ&uNkQSJSt4jC(L-XS_T?kNF;F!jl*LZh`hogc>2N zovW&(<}XHe<;zYhfgj($e*MX%1xanCP<-~O{c@iRBj25#eiERFd6Cv>AMp0~(gB8d zHT;-tG!GE|F2wxrG&+Hnrb>uiw)pp$FcQt16W5X9i~CWJJ?@9T(Sbh&2xz45#$M?FD5J)14=vw^-JBMrsV#Zi4$PE3V0!ar zb3&vh3=tl>lcg{>AFPn$q<#v$ z@A$%0h&iXq23x3ly|LRL)wBvxo47iAe`9Lk$(cYY)$CYlV9g7I1)FcNh~Ma|0Ow&v z=tebs`;3zEky0xTS*KD!I0-0-o)11U4-1Xl>2zK!R*eBXg)%mjNaIMxfEy0dta73J( zns{*deWi73^5y7z)fUI$oEiW@%z~d#m6==wR(jM(vIlvURdmP3rbK$WDx}mgIX#vEkA6bzMCFx_vlPVrl*Y(Q z?u6Lr5f*)QU9TOGT;OAUG27+Ur^`nWfmW~r{RA@fBIJtQ#O>_!sMk#|tF~XV&Z<6ocfgL`R!!Y}t;pD^xCU1@F*66>@egi)!Pdk^Q?Oc-ZFfBMziD7! zQCDXo?i=N_1J~^NR_Mp7_|9ys`G{stiBW$nA)oNV7a_AB6po8 zW+NlfTX$UlQ0rh@z@Sl5Q|&kmF#CPLL~HwW19{t2IPU^+TWpy!T0Ff~tf(P)V6^9N z$B{drKK`cqVNe5=?`+m25U)FOXP)pr>GUF&J#wLH(7t|s{Wsl#oN_@>#USw}SMr>`-uR_;njkD5hM%cqFq#JLcj4EGoy6={;;WueSLHd+Ba0T^q zK>`wtIeZ=MUQlmdiA8KNJziP z2;fy&j`IyHfvL3%Y3GOiVgRo6-v;!TQ5~DyJTaI8@_f!<8dW@})~X%As?A@n<(G*L zc;n6H1gfT@1~|yMt^TBJUST}nQ?hN&>#1m{LK!SU4 zj7uQ2(*o1sHO1e zyrlMEQzcE7f+_hzfC+cR{aXdbUMVgr^mAh2OmEr-xZxu5yX3E|lKm9i1nNj~V+QfL zn#QsaQJU2p$BWIQ8ktzL=+fF~ zp}de3j>Gi(G+nTe$@ohP4Yn_Y9^X>DV>;oFozpDSjpwr504tj%$|}t`lm_WtD2*)z zt>~hiOi;K9PK1QNuuwN5Y?Po;EteO{!_roB(|!`#Vf!Bzb%Z8wrD%`nk7nj2EN!BZ z1fj<|QzK#fzN2czsf;=iDuw^VX@Q31mJa=uk!THj#?vp`>IYGNR&UN?RgoY}NNDt6 z(=lm1?3i-DGv;Pg+tQQZC0w2o;_iFO-x^0)d*zE`+x|*eBx6J$6nbRSEb|#v?KX`8 zl&QYY%t^6mdBIV*PxC=@48E}4wj<`DC`MqZXu&VeF;uq;(f+kYnp8#189*=K!+jr| znG_#dGRl1M5P6R`JEkJxbXF+iS)}Jk5*s?a+@W1nC&V)pOy5T7Wx^MY*X2*O6mBOZ z5x0_~DkL^vr^E|X)o_jf1ZQ;nqlr|rdLVybDhW{9(u41P8stAfHNSe~md2HnxIAf8 z<7oBO>KA9~hQ@m?8t#WjE!Q%AF#yD}J6$tcG&kqhJO-eqhQdqre4YPM=ZfCEggi&P zeVL@9-swTq7$W?Q_6*8GT}SwN1*AI{6{JJ5LPK4eyH}AGg2=;|Db_@#0#TE-6PPuo zHfv@?#9?i0FC_Rvddr6mxm9R3B*-P&BaXbl6P4w_t$MKbKQXxv^EqO=Z1!F$$)uEX z6x~Mm%_)2sZWPHZx6)v=3HBl2xkC)mY38P;Go20yNpaBm*IEG_-070&v|=jS1Q8LF zgQ@Om?S|LG`I0N+Cu1&$zwD`V^yF*c4vQI!9Kz3Z^u6B5Bw^x%JtPQe!RF~ zvWAH4Skd^pvBpk8)I7Z$c2xgvJ(7h zCx=!%gd-zRso4z9wKPA`<$>Jzm1-%fPoi0K4Zebw>ftT}>qwObQ7XB-d+;p8exeY% zoDkix=eh!7tX8Sg)Ntv3tA_TP+k(Type=#z3*rlseW!<1y|p6l6Xe?E!>TuXg(B!z z4R#!~;Oc6k+3WTAB%?;V31}_{SX!NR0+o0bQ+xU&{BqqU%(Z^&h~HdM7;o8NGrnvs0;$?ZBGdjLwa>tE))mDcL88nqq2Y7g9 zE5l$jBKkUS`PC;K~%kI5w zpt`XtEX{=rC9yq`lC` zc^1M)XuL1^mmXto-7cRc2De>cLcBOnfx)+r8hMrY?i2XRlq$bN$Oy=>S@opc%wzza z3vm~CeL3V#bfut|fk@Zlyru}Z6DoegIJdZro_8UMUb37kBIL`R{;OX1 zXC$x&)FkaVKcbhrY*l_?_~7u1Z1gJK#N)J*-yj#AMD)hTZEmK|Wp3kg?X_kH;5eKk z4@a06KB2Ay=OP|cr9+9@+LrT}eOVrub49R1Vk9f|Nb^eP54IgFP@6jrfiG`Yk50_z zj4(W!$0!$*7$ERhh8jPAq|gVX zflFF=816;7G6-Q5IVGa2C&ULZn@5I*QaYrAP>RAARusAC<;2cg?V*GbiHN^mIFfw2 z!6q!U^oEoy;7YBr(q<=%VX>XTbV#0gHd|GHkJV(c;kS0!5DvETdhXVHwoi%xHE2_K zj#;712#4!g9k`)a^D=I>i=>ND&{Wc)>s4`=R)CL6AN75z{XPBVx~|})r=g+kwQstm z@e*0FAOoAt`5l3W-RhOITZx+@Jnp9x|JMaS<>4z7*Jdd`4<{U*RcKeJ*mEBRhj(s8 zdnD7kf*5w>r*sEA@8}Pt!gwk67??j_`U6qEhYrbk_C!bfwBU1u1fjpr6PDiVBbz_+ zWCZ5zf$I+~t$jS2>N1tFZ$GJIZMQrjytJ5wJ3JZ^I4w0S^30))HCVIkl>JE#X}^yV zB|2YI?@4Jo)*qFZ&r~vLlE-9@a@e8}+pK@VO|Y75NHm)skRsh&mJk*$S}*z$J|ko< zW{D@Em6T@odkg;U852%-B4NaJ^>;iw$=g9gP(HHWn8bc*OjgHhAZ5J#*RjyvO6fjw zQJ;A}bu^ri+d8)C?y_Vj?U$y6)vOf#UmVpW)RbOhyI;e^k#?x6&3};k%RN}qz=fLCYMsn=pyVvIX|3yTKVcQV}$lAddlKkm>pFr;m%KXz}x^>F#xN4x%Z^;hT z#2+}N-TZye4xTDhQiY?sd8{5|F^Ef|Kk3YWi$~BV49a6fF&7$y8-aEbM1_`6ZfyL3 z^4dO`lP4F3WE4a*IM3s&aoEpRXSSv7OzVOKPt*=h>nn3cF5P|#Sp=lp9vEz{i$IJe z6mMq4L!`68Z+Tro9=z8=hD<^xULVWMyv_8G>(G!fnt*2WzW?-i$1s;KOY(}_A2hhh zrn)+e+0r-aZJ^}5`p0vl+YC?ElLWoR@V2&w>{VL3S&C8caukx&~ke0&aZgI%2-cHbkMm?r@OqPTSKV2g=)nFew^*H7QvP-jSwM2{lQvD zP0x|fKM$g?1;Rh;L=Iq;p1<%}G2ERt4t7jSJQK+w#x;)jX&dm3XEuG6*tx4|CF8tf zyxRsc0b4axZraY#nqfWgl%73vC3K`vGG)XR6*(u-HFAB*OvuX+^BlWoFm@IoToy^l zTQwoZ24nPJ$!+(akl6Aug48Ovf7#X5G}s0n@Om@2uhtzM+AJd{l}O)t<|W^b;tMsr zz2w-YgH<xjarF{);HVu zdG$8?2Y~mQrPC$(%FX7xTD`^hh`4s@0^-7NC)cpcT&y9;p05ZSA(WMW9<=qg(-={| z61Npqq2d&4?FMRT(;i`ZmfsEW@vt9Zvi$*>>G_p*R}`%tU)3s;x*KC}XtbGdwin8n zGOVG49Fn_RT^yb8c(LA?(V4S(F}6t-$@*I_P*L*0EKshSaYx{EKv z2UQE@tLiXZw=l@ldIAgJBGmIB#_b8Gr&i21>ljICCc(n+7*`ms4sq#oNHb^7Ym-fZ zuqjOkKQ9A{zdpCWqkz=U+$mdWG^5P4{CMfsaO>5RAkBN}?X!=G?!8_S5Dy0Bl=DCp zdOYGK%=47|D>ppib@}YMi$uUW*yLm%ugCI_3au0PKUh%@xlX5#LO#K&c9OAnY?h&u zpFcNE-^Kq)D2KWKa3E*AOPepDDp7!+U4ZJ=>lG8mP|5v|KF}Hf1W$UDTwziQyTVPe z5i){TVFHu8rav$I^`jE`AErkt1y#xXg`p<&z({;p-TRX=W3vVSGiBaJfPZ5$ofIEp zN8Iq?-U=PYX*U6`b%S&>!iFMe=jdqo2NciGejz?Gvf_2*z|ddOZgPMpQQ^b^OE5&l z4QpV+_P+v~>2X|MHCYsZ@8c!+?QI`D^@B{ecR8JwR_1O#OzB#bI# zMhzCJtRY@Zqt|6!swsw@)9mDC$H#*L1p|_xP#dzVEX9=@8eq`;g@g)U+U$78zZ}OC z#@&+o)ha@i=TLUDr>us~p19?biiD2oltAix@Cjyi06u z7#*y!mC$pR18pY7ChGp#BSq8NBq38k+Vnxn%#$#uu{K|5D4qjwE6REQ2qoGr4qsU; z7nzB2@_JVS(rdh&sU?q>1hN{CK|0bX=R(hUb{KTaRB85+5jSKHGHhYf8UF3*jfd0OlJ{hpbAof86tBSr;uybRJ)^!j-fAAR9=J$E*QupnJ^d`OIM=q1@582P% zFL1ql9X`LjvGQvTG7p8^iYdp^HM`J;ZBB`N3n|Nu*sLw=DMQ6ME9;Teura6XulPU} zNR67dUN(a{q8;Bo339ts>01 zg8fs$8s>Jn!zo0Io7Fd^DNyf|1%i%_7p{e~E6MxTv{vs$T(G!Y^9(9EVYm-y4Vi+Of;q^#FSXC#hUGg)X+r<`Rc*z zq;h-BeAM_{Qu`8xonx~$U>!$aXtD}^T~ZWR;)NCxA~@T0{v7sOW0W0uL(BbY4wB@l zzrGR}16yoPX~z$NPOlDv+L#-+%_U@Q`oO(%3HI$lOvj=NrB#T2fM#zuMpdm`3Cz*S zg#ad{eG)Cz7Mox)77+0RHXxQsMo)t@%a};f!-3K$OE$1-fc6>clZ!nMJI*Fhsig9O z#-G&7Kt)4bvME4ir%S!zfX@p3kjDur*|NF2qvl%e`1Q-FdL7yctF2IV_4(zn5WD-v z=PVnzYrWO{BqNt2jpb~J-dg9;=OAP4sx^!jPc_4a`gMBY{=(c6KeBZkX5UuU^`g+` z?|T|-0qJ$#9KJndjNjj%iiRV_)S;$FkE%u&(pGn`a}kKOle9{;Lzg2zYSWFnmuV%- zplet{?B3m6{mx@LRmr9K0{d1LX7VDqjuS0DD{4H6hjD~bx1phah_pmrC);=vwua9y zV`NmF(a6zidkFh9Tg{q^1JA>A%_;v4gs8d6i%)Qj0hWQHqU7U znQZ6^Q`_t4x(6tjfL=<(qi_QG|B}YveWK`+E|8}W}vby!!IlPe1VX65h?lX8p_z4G+5#-cT1R9h#`C2 zmduWh!5!@k>W{9B#~hh`(IisUE?S{>-l(IB#KmhGBs*J-U3Ff>r|JO>C#*(V)zwz! zAG#p{#n^imk?Wbi)n|-_EAn+yyiekPJdR(pp z&?toin{}4GhOu~+HV4Z!>Mqa6cBhLY$TX$y!n{uP+CV&^)(mg!;ptBT*e;t*8S*|f zg6ulFnDt~g{b9ozrr$=;uXZ8=W)vi*c&c$j%HQaH2C2tA9ynmET)xh%3EHctMz1a? zRJnf|?0C+qK8L>?G_q+%LJZtiHf|+1rpu$j@A+cKYd8d!76-dW>W2N1ad;A^go(uk#tFC{*6;LMrYwX zY( zd36D=8R#{e^iu9VO2+3MMaR%U`NeP`ORyf72Npkc?Xj6GJpZGIQbuI=7Os55?bDJb zPcT~`p^{RG+*p7(%^#n&iwRI2s(yf9yU+7)>VK5H}zAL=D!!c|5dO~pPXQj)= zX85e%LBXkOmrZ~{{jp%-`Q!J3Y8pDj>dNbYGr^8g+xExIj)+4r*1klujtiIug$`ZE zFOi<87m#D`+fhT?E+ilVV2Rlgp&Oo9G{NESyxsG;=go*8_&!f$i1#{)j54=D*1c#} zv!`T^f36~OV8KCoL3w~2?Y*Wx?!&}Nt?KKlXA_dmgFn-YJ$Wg?s~A{b;_~Zq5t`;# zmjKgDW}G!&(NQ|e)`LKs_>k_Vpk?J2y!sB%;|8H^1U>dJNEg}5GvN6LRr|BFf~mQu zO3afvK8$#J_tww(**Itz7ji9J5HOD zMc>+(m;@>bk=eb~_#!r%%}iBjy6V;kq;&c^bQJAr-=JRSAUa=VZ&v&PnCk7~+mqL; z<2)Wu5qFG0V(9&HGd#bo?Y8`|3vn`{lAn+cv!W=;td{Kfnrt4p6i+=g&L_IktxUJ< z)4;{(ufvKq1*Z4-f{H@EkuX+YpIA4b{5H51$j&fsZRRu+C-kaxz6C#WN<27nk?A?v z&VBi+kxKpoQ@-BOGOC|TrQ|PqMV{+-Bj(D?zx69$#mJt*Xf?r2s3>^nrYszMdMGwZrXy6Ra@IH zdP@Yi;*IhX^5VV>ll;R?t@zA!rgUQCBHJD_DkSkaEfHa+{1C@WY_DY=yJ^*Gq9o{X z2(9O8)G2J}*%R+Dj)xU}1iM}A3&=kDiJC4f%f}yZ4YkucIEr<#N={!x7LSsj9KRGp zIA`abNRsBY4PbWQT?H2M)oc)ifLBJgOOV z0HfB#P&0^AZBPC6dDpASTSy2qJ2V3+G<_LujTu-ar<1JtmCqte6$(Q$^CPz5u-qYF zy*HXL{*7cOJjkMQHh3^TipX;r8?T~kC&HUP@6YNUmW^e5E4ym%!jwWSq0P!B7cNyE36?HNd7D7aVH$eOM zbD#{-d_~TK;Zs_^?Z|iaYXV@{ zdaZQsO6npd3#AjHhd$o7K4r37*K$)`sk~o&>-z1NN!f?KEw=jc8zbX`I9bm+(c?o^Vkp&p?=X7NZl4DJ&IV@w zwzm{2F)X-KmU8R37Y*kIw3WqbE|x{E36B!0{hN^*J6REL*k@cAJyvbh{x0o%jE6Y8 zNj)*c*@=dAhm$Q-Yv|n?zH9$DMMzd&41^;;%bK2L^Vi~YQRkovzJR)CotyqHEGqcl z30a9!!i6pH%N1F}ZqP#xO@nr(tv7f03d!KvQgwwK98H=CNTd?5U zH~iwnDWnAv?UwS$bbXc9Yod8B+LY$T<=m_gKD_j6(ju^VA;nXlf<9Q;=*HoR$!6H4 zJmmtDy}q7&$ zf=12x>5Jgfh1da2_CD|Boq1?^=)xo0JxV`X`>(OXpDx5G3Sp9Hc`up_P>v2i^Z7E` zv=3qsH3)l~PJ3dR2`&c4n!RM%V;;);&xNU)+Zq(EQ>I$f$m&Hv2x0Jw)MKA7@#jG+ z58(-T#U$d`^VRg#m`9-o^YB%Hhe}$#PI8c?tgI~3_2|=;@NKol`T#Z_8&b8mF?k%V zq^r3$%4BlMhW+e~SY&GYR=r7y-WF0a-FHB_8$h8n@MLOY(-S*Cq6yrF*lK8Wns`{G zH8i7u{8W_^YobFlf21W~8PP*flNPEDv5f<3WCwJ6bh5YN8EnNrd@X!)CY#m|s^Okx>92?l-Z1lI=Br2rq&Neqr4J|q@#8$i) z+m34`kw2H;(Vxpt%IFqj8r>#{L7mr?)x@_2;RJ4pKYR0h)Jb4m)9Yq{OwxC4sz%?M z(&7O(pl8;$eD#RY0}8Bxwm;Vynn7)t$rWH|g+$3=_;o*N`O#<^K@MerHa_WPzxP{) zJ$}@t%4NovCV{E#E1L#8PB+K{Us~RX9rW_m#7L=8r@WUniNLp4CZ9!o)u7!3#s=yo z*&)N5Ey2yNHw+)eTQvlY2o!!*!Z_st~~>w2Fuoy*$yYJeLv4-KIbo2 zE`Ra8PN+FL&xjF9Pue-m4y>hp#O$Ko4BSnknHiPv$)rG}uyE};q6nC7y+l}~$)H*v zIyB6+>+H{@*rm0$@rk$EUTUGrm<%$AwTpS%dqDUOS<2>lQL$mnTm)kg)hl#TEni+X zt`jGDdz+a=?^IK1R*xWxhwgOB!&FJa3XAJ;Zps`5o0;rCcY8owN>PK zA`+4Ot-t+$8eH=Ctg8Piq@9uiYRr_bKS_C?2oZ7Sjo29)ZBmzZeWIius8X_HkF_{T zN^I03)U_Cemcaar^AGHGfsq=M9Mn+;7Ke#3V(rb@wbWtMmqd}PvM}CK@Q4+WY&ohGL`mlh8X3US1GP` zonsXy+y7Qo@};^y$Qu-$oAFX&SvXP8=fSTIIG1DBIa#HX+bQkt%WEO`jyp!+ZPMG- zPQQ)lgX%vuuq382=7)nmOm^P}2tkRUyw!Zac<@&+c%kG$2i82#D2^qVE3u3JlKdsk z+jz}sfaVG_BUGB_8M`p_M+~M?tIRQ(Nc%IiNpUo}(~;txYvEH23`PJ${>x4*DJ2d( z{Ggu{?a_{|+=z(N1wzb~W`hMqc8M3TX=2Pj(-r;FsVLoG@@X;09J~Hv88VX-QfLC2 z{iiN`hb~Ttz>cZG<*_>c*AUm;l9@LWzE{0+K0qLEyhl!0qTBev|1M!{T3NHIS%xgu zlL8w3S3{86+_B=XQ^L3hd{KjVegYkdR=ZD@K6+up(6E4oGB&V>bJ~insfy3xRj7Tr z0oYiH9kIf$i5yFjY0;HtOFe45hiM!9$2BKrOgj`X7bMw^x)nGEzBCI*UahVfD_2zS z+^QF}i^($DeBura?tF0QtODQu+6D#S=mm4$ZIbr8Q=`j=5^%2N9Mv-ZFZHhcHmmjp zRPI1!oYGKj3Nbo*^uJFrLpqm$)#`Q~{(fui2`VuZ!(S-PpxemITu#!2Kru)0{Sc+Q z;l}Lta(evm^Va)Y0UADP(w3}lcr@-YM%7lQ7 z5f+R_&EQVUjlNFad=11^uXDj=wS^w6oVF9j;|x22%d&GsU@Eb*xWJ;;>qOLY3H~OX z!gp{afwFKf8Ubc3N43(00DX_ryHw2aOTv;P>g?kMZ7i>{r!azRugko&+I6K^J#!Ud zW0l$ecwV<$qZ0>vz#&*fU(b-0Itbr;g86HdX7oy1RbId|y(+a%m~X(Y{e*~>pP_nm zsCU?KW4Rx8DY|?njq(v`s&6L+<1S(nNIm0onL|U-Jy62@0-3z8N{LR$y4!VnfI;6F zF?-yrTt-QSQiR_NI6XEa$YLwh{GqJMt7r&EI94e#;HyBJ|5~V(9a>4q!U}d6QGLSlNrutY$XC|d$^5XOzJLL!^QPKaZTR3-3S|kpicx^hc<&cgVa~ccBHl$_ zsEs};cP&bMsnQJiXbkzreT^WiTlpFNVQ{+sfw9>&{NZujaNg!D9L&&aKJfZx>@N5_ z7Zve)8}>T@noP5u8?2?|9d2-9NGlAC{eRwEu?`iGI*X`T; z55StSf~2>ItkRiIu$)?PowALX_O_U25RQDnQb=FPV;2oqqY03_`;vPb-N?~C}@ryGxSs#RIG#M zA3Hj29z4wO7$Is~=|LL!?S4b+mEQ=-)!B)@nD$oFJmRGBa>C+6-1uG&I%3?1!msm; zW*;2vL9C5S<1Cc#NfXY}EsCCv?YI{e03d2*SMuB)VYX8x>}Do==II)8 z%WfV}fyKJ7Pj^{rY4ajPUqah2qb5Qo%X(9qIp_ASv`181P3HiIxGI-$v_7`(YTiP< zR#T#g)j}uUYUQ*>BIm9lq|YH#tSZZMQn}tU`!>t+qaQzeypkOhEyt<9v|`?=x!{H3C?OS3|hDZgvuEc-w# z`s^lp^!>jjv}BFmTaD41bj7BM{-XL;h?MKbpYOC;zZVcv*WL#gjb;T&lH;57g$!w& ze6K|Sc)S?6LG`b1mNkZQ1gp_#CrG`lyysy%N50jR+7vUtan;+dK2^haFpF_MJnFEzkn+#P!gZkTY2)~f)f2OE~{HB+NCOZJa~{OCeoRF@}BTk}+B z(X1lksub+oSa*Lmz!$aCSmjsq(8Zht&}LQ4F!XwSm<++@Vi7%-5 z*b$$gSf#UtxV0cZtPK*OUHZJj8o#{hC$~dVH4$5$nD=H0T_?ecmoMPTb&{X9_3UJE zMd4bq?Q}P&x}8SB(_0>-W2_xu?NF^V2;b7TMe)Tb_Xb&D?@)8)+uE7}Ptcz2Y2HtM zic75BlOy;!lm7)A`;^;xv)g7Cm!wuy8Hz>{PN;)Je8Ss;r91AT_DA zAyw!Fbp`F_XX#LUfZ14gAjVsnVn>d!Ov99W_LY!Pmb@V~(5V2OO>FMI_x3I1r*a>B zfaqhd1TDE&2#ny+>PTqVtfz{c4~ttQR+W>M8F?ZHEd}DzhUd-|p6o2^>il*8kIgfA zIj=O58J_;ZDlSeglW*5Cnc^tX4?ljajwZ}1C(8lEFC9*0OJQy4@JUn>B6C*i7_@BF z)x(xF7Jw5<=SUv}^Pyj=uac{-24c#p4+~oSP&=G`dGSAR8pL8Kri|oC@_1O!L8sTS z*->h7M_TnDgK>`YVi_r8HysQ&U66Rxk8^dlKe`-kfon?54;dx0m(&HWJn(umYXJF0Wp z_W#uFAnyWlvmAItO7I`yFJRQn!}hDKAh&Wm%}8y@xxr!m^!liAxC&OnS1(Tw;Nc79 z@-vm>>MeBrq0#qfBZ2c`03S34BrK(MLLF#lfDOq`lVl(iIE@v3w7l$f`@1TWlTQH$ ztx3iY?H37t4-ba4h(vtzuKhgYDYDzfE^yHYyP-nRnN|<1aJz|8Y*P3u5$GDN6!n8! zH=LL?ED%vM;&cv_i$#7;{^%Ro@WTT111ZUxwEtz(cncV3lX!A!^my>ob znOOtx}38%Mws5F?oFcZPHV2s z!!9~np!Gf5wWPn(${76>gN#m~+t@{*-{DDOU)A2~;hbP(F zF}{6k6Pb2DTEgGzY7)4u)zQ6sy3f$d^U4`sNtt@9%-Ut&kz4aFDI+lvnzv#$-Km{$g`?#=ZZQW(Y#z%e3SoXgy6uZ zD450l$Y5A2XJ@Dd3SrwP?1%&J06N~MFM3`~@CIc25_z^^S?p0BNw)y8@& zb5_%`B}*v#-=%trUkj9m9qa`{?qz0fr8$xIN8xKLA+iTXW9qk#b1Mx540g{U#5z3E zN?Iba4S2|2KqeD8d99{PdU1t>;p^5AYB+ z?*awin{$kZR!cT&NVIEZ3E!o8XX~bNfrM=WvYEcVq9WX1xo8%POy&GzIMeQNr1IAU zo0-qVU`{2^*zu2Qzwvf;1@#_I#HDB7?v`cjvq$Keni28eeu}Vw4!&x z`Y3Hv&@nif+Ai09_;gh@3Y!?>Bsn!ok~g~!ZV^z{3Q$SFG-YA)E&Q$5bsH?%-l^ur z;#vAc>4Ex6Ga~kQ%~!Kq59+~vL%EsFfqc=$(noKnwFRHA>kd6fdLPtA`8nMuJ>vzESSIoU)(_QU&lS}>mkkE5~O864( z&}VSpbBZ4q!y`vSMHII`TJ3r+lOrf^Kqj>o#okQ#EiAyUak;1ek{!7NwB415D)G2q z@%s|kiV1UckqjSBI-tuU&7(Fl06!B0`j=6@n^D3y@JyFWpvjWp37ZswW^C+{p|!AD z5TebOa9o*ZOtyf8w1Q=Rifqmm0F~12beOrM+bq73dB7(l41)c&vMHF*I|#qQ#YMDJ2q>kL;+j<~y7e*Xlvb(*$-;J9uIVjh7z9)}rFqK(hO zjf*&iah%ds8y4ZTYF$X{F7*-0HH@orN>(VL-5E7DZl^}Sv0JP*{NZ>Qk-#~ikReGW z;8-Of=}M^p;!vBYK!ZJRv54oltJ|a1x3*((`}s(4+F0816wEY)dXIRJkR%^6Z6p!@ zcZ{?~F_Jw!6EfVS&Gijd;hPJhd+^sFN)B)iNuCO6*}EC}lHYsS=NQ`Mc0<4dMY$v> zC3;@cZj(;(jL$TGeN|#a1`c4S5C*+$+ud9E0ZdAp8_WL;GP!V6(%>HNwT=l<)p|{G z!X|y83Vtl2IF_16N+4*AOt8ks*Cdrp%i!KVW1=ar!}~XBVPR1Vi`ZP6DFS+O7-^;M zXkQj~-&g}A<1XB{Hc=&JwfEQg<_I?KO5E;7*qWc3lfP(*3|?4qxDWl|-uFMEMu+lg z%H!@09IaUQG~~WH4H;y#$z*;BJFhfEIo_x$0AzUiB-0=QwC=aX(|$he7;Ez;2Ndv7 z)o{%~o!eL^a346HFF;xc;S(VC3{J?5D&fBecy!;r67(OEOCXuvLY;<-YV@ez_E84n zNyImvT#MLa$NwDKf)Fkgf0)FET<&Bd41T_&v40Xw z!l{-A%BC^!Ufx)QRE8|?Q9LBhA1XS$A@xMLp^^!Qj1>&6Zl2qsy)NZ2GI1wcK-){K;>3RE~0mkN22=Xn)OQ3n`fe9x^;vDXB{yd`8ry_<>RgE#ciiGD&TVqVl5%3^c ztwjdd7aOe9!VgBC`g^GMN-WG{vN*yUOvzp)jv)3%ZNhc-aeWG*&Fy^T?7PK%+&x5n zRP!p-SH~dSbyVncM8G>a^grI0iC^4;_^M&Rp0NUf8+;#_eocFww%`zpk?LP|9;2_! zMaEH+#>BmDxou^|?%x`YLDFi29JCELa<%M}al+{>DABjcBkb*-vKl{m}O>UW~qc1UsNR#RMYnk2ol^6yk< z+|iJSu5R;qrxB6D-){*rhRggKLGgz2eeM#MFsR1et!opJacndC&xf7V-JWvXbM3Pj z8%sTym{p1ip9}0V%?sPMG&!1k#&jOHh zwfnZ;ErSMKC^NV*{BXGh5q#P)Y%(=_8xqm6w#0h?m-MF)hkM3-Z_nB|5Y2i3Rg%8g|=!QH*^=V z;+*LgGR}GS;IX^W65uGEj-x=@C|RSWU>OLgjfh<}tX|hkaTq6bOY*zvJY9x3_|v3D zpwXAHlI<)gOV;$K!Hni=6N6<}kDlc~s{%%EAg6>wEHa1~H&`~O>b@*83+1rjGC-R7 zm>z}4IT3%4RFrW47Z)Dp0-WR-_+9^-YC@p*T9agz4BCm}!WwLEvw`mDgW900|Eis1 zMTnGy!g7NS`PjKx0SafnX$Tg(OADS}y7cYOUq`zCviju%$5>a_?`0SM{-e*z%BE@A z85bCi^%f4FFheIE^-2qSjPq@U9vKW;4)PEKZ8byl0|jf(IB39rO}W3le1A-J)7vzd z&wbbAB*=eA89epNfVd~S7CUH#(!Bfe;EQ_foFNYi#VG6 z)9rY$%>wNEI%oaQ-|;^-+gll+<@2|>5KnZ!W50O)Uoa%Z#KC{_gZ}?7HUD!N|C5CG z|F|KN^#35=Ywe!`$jjgr%SVWuD*k|qC3>XSi>35+jY1K3XtdG5?Zc&9+H2{M=5QyI+7cR9B4h|5aRY)dL!o&3wkUu)7X*{yPv%iE-(FT}XH)4*(`*t7(_@ zWc5xP+{KD_RJunsXIK1xm$~%Uzr4Nt^@vG1q_#cbswU(UDE6tSB0D-9AE599c}>k| zzmi8>a$;b?uzPj$v(07z{qe}q^uP!^M4sUNyYJOQt2KMU9$VqSuAbq0;37mS9~9py zgLHhTj_c-&7csS~HF@bQ=1&#B##)G1uOX$d z9#}fh(?d}CKEh~1WTDrrU_DK3VN!2l2A%BvE8T`_b|zeFG=biW?)tlwO(QxqUf|Tb zks$x68(;l{?bd5>3A{$1YZ#xXc)pbfUvR17=P~@hzRaVfjbJp&Lqx_8)b=_vP&neu zimmoVwO}D`$ zZOHSHCK_!-yaq{7$c-tR6Z{@4A}%MXZV(NdOC_J?*<+g#x4J$G|89#2FkWP{?URJi$Tb(%Gvv@#g3SdBn z#IDY(^mg{MWD)|yGuN=gg}#z5(lukW;%QN>xsp}Mn`bJf^)xQt4ThR$Z--Qw?5yyc zmX`f|He~nFtVbp7BMRw7Oj855ZX4N%SmiY1MAs31Je~+u<4rXQu<3a2Q+NvO1Fw;z z%ZqEe_y$L{Yj+z`mCX3}O{S6;{!gyakD{UIp?tYQKOUF2mP63heEmwLyGCzPzob=d%S_xI7+tM zC?sXwpT`YQ|JK3ij#DK4fmH@iA;Z_d$TXKV{gn)+u>q8mH}3-m`5%BHTOgpQAQI~` zSgtB~_00${i~7F0;fPA{n_|>WqkXz9+aw?y5wl6mWC_!Qh|K>Ta0I^i!u z6>Rwy#hfLcBHm++yJ>U9;!Z}=X3ZZ|J6)9%Gm6-r5JGlde$1M7`tbJ|aiV^$)-$80 z%|EW5PkLq71Peh%>m&j{h!-dQ-1f_+7;-B%yDSlzI1?(Xgq+}+(>0tAQP?rtFj3BiLq!QI{6-3u+; z>B@cXeQuBLKVN^N-~Q42XN{^FRp+d;_nLFAHJ30aTiVVNq(lr_GDHMwfo{FDm8-kz zKaOz4BWvLiGwH*H1OvhZADaE7@wvvl)!=0W9*?nykVF9FCRensDFYXf`}M=?dJGoe z(N!CPnoRckIJ0%4xL!>Z>5$|(F;}O_WvV=`A0ne;rl7qAUR#5Kn18!6l>WzUDAyM9 z3s`FG)6FNtmYi6)(=zevi7aSAY7?_S^o}V=s?+}kw;{6!CtU`49lBpLWhsjly)EqF z$JCn~epq49RR_bt+vn4#nOAd?B=40o5KjI3{Z!@RVj1X4HRr*BT_eJMsekW5^i`k` zQC#U(f40ej3=N|knY=|UK}SPR$?^R_xUMgD?IP?AjL^Z&g5mVVB(VlZ8-4G)cQNYv zaE~un$zQ?jEp*H2%9gxY;~8NjQ((dGX>DAK5tEkLJk#r{h*U@i(1>sanO!ZRMac>a5 z$=DboE9tzR&+5FBMUIo*>6{k9^(@2$rCx2e#1q-gvAw+eU2iXbo&Ekt zt=AkK3zS3N5f?*Mvx)4rK8C9m3F%e`9(=H(no^0pf%uXIaU7-wUrvPjaHWB`aJN$u z<8MBYSHL6g%#3~yVDW%RdAnf}@_N;610}KbqeL2whw3er!u@a$KHc=REWY8Rk=(AU zdcMTcjm-TZBScCRd2SO&U*r))sAc}%<^!yJndid~Gxc~Udu9*XN8Od7jLtpzPx={C`ahE z9{=gDsER{sy>I-Wy~?+z#D4mup79&HvwRBD!*z9~$d6;LAqkzzy`Es_eYF*%skG9^ zcuV+)1oaP;>)6OZSlXRfXGFGmYjZmVUq$sKE|$iq=G#IqKOda(pLHcA zaArH@qNvHTP@iSni6IYn8&(i7Jc!b4@NXUd6N4^yE3>@i?F$?4?F%cr zVkx`zP=29Oc9vU<0lqM!uSENsL#UR!mRtMpK(;sgh7@~w@PoW-xDoK(Y7+%hfxlzy zC=t&s05u^WZ%o~mGaic^nVF$8Inq3O$Wc?y=`z5sE0xzi(2LgS`K+qisSS_M3~VI) zgy(Vj0=TR@FH%;!Aw-IDNsny6pa`g+sPw}cWJ%m~2k2EEzTI_Zh`hGmJQ0K6-XIGe zw*Dr#usc0k;XrUC@x*ayW#YbU_?R%P7VP&9bbO#U_H_)QdcWpq<62?{HD&*`^6N$G zRgQ5D>N``V1P_yFJW7YUyx7vn;bD8xH)~i`er}qS^RE#yY96x=q_JJ;(_Q9xWoFKP zJXc%%B6!=Gk;7r=Ih@p@s(j(tk=4RPp?o51Pps%LaM7y_z(;)uc!zcj zNJpH_L#U~dognEQ4Rb#aR@FuX4M||?(M-mCsq89rH%9!ut6nA$k+G@m8A1oeGJzM zf z2iWvBeIn5>4f4Xf(TM7X!uP%Y+-#SWome*?JN~JUL29R=$r1be>T@ax9Q+H4dQtuq z6#ZxEnThrO#c4cXx5-Y-M=p=In%#BGWk^h!i>8Algn%hs8H?ix6h#e|L)6w zog?hsw`*u=ja>YFv_xhx-`(9^wQfKo7B8)=n9UWdUSa0Zh`YIc#DoufiTdnmCPa<@ z=1B-b$#Di|g6}F|SU^fq=?GAP)G+zM_!~Rdv{RR_0_O{m2h>i8-wa)Ph)4H7cnSU2 z0_EJmJ05l|?cR9ct&y(kzzWE})K-rjoJBH!r?FPSZ8uDlPGe!$%=#;4R$4k`mDK46HDljqTF6hDJM`mrP@C#%q6PEF%|S}S11U-c;X zrS-PdPY}aZA*v(Y5|3f|e)Vxob7=S#6c;tLfmns*eh6s9S9`>Lfg_c!rlT7%)z*q> z0-B08lw5<@u#S6v$6OULS-DVl>jUN^Yt3n&%2<>OXyVei&(6;Fl_5^XNWdY;5?=I% zC@g1aRHcd4M+qc^!OyOorG?HAu34scbL{={fjSEupLI8((MJU6<2&52 zw)|4S8ll(Ru7H5pCEjO5Ln81F->I=h47tOe)7~T7pW3|ias?yyK`I~#&we@3)_K2M z)q_#TpEw<8us7b4s1Xp|35qmsi@WW7LNYQ1`RGJSeU-*kaURS-BB;*2u7^+B#}r54 zUrH0QW)j|e^}FzU8Ej=SNuR~dd4--qArzyoYL))ZW**wfg#Xo#3vIttR-(7>Q#pWE zT^qVbEZs7wE4h7CmmHsX?J#oi+{g1>c%vU-HiH%VtSQm|Lqt|!5{jQX!ICcSNH%mC zzV)WDsQRpZ-9{3P8*5!)X58_vqaSE*=L~gyS10YfC@3kBZMo*PnWOa@`2axp>Rtlw zVFFck`GIFRi9gEFUns7xrVk$1y|6Lo=tfB5Oepjy2`HnWB&wxK5o^$vi(2KU8h+Ym zTO5K$2qC`BWGFeet#(5!;qL-FxI0OD?Tr!ZdZKFJ0#kh@<|$IegitmtwNuZx9klm754*lH_S;fp0~TlphrNB8MG~AGftr zfy(?8SsZdV=q#N{k@Y(i;r8pLln1AsAlB!JQ4w7i0-M!1Rzn%ogn^X2*(IEMf{4B+ zN;X|SErK|MtqML_vGsz_r%`}n<&q_FE^b_s_!m^&Jy0ec)xJPP;BSI#S3_!YvS z7}Zj*q&}C1*6OS4Kus59vyP1jmwmZ49J!)sd9n2$X_2FihNu9;Oy=Z#g3@W zGkAx()t*tW@|*R7%H{VZmhxWoaHv7l`g>S2WvVTO12;}Qk5_2W36?M-a{H3NPg?;U z#%8=#mgH4z%@I zs0>hJ99LAewdob}(0ZK64?-gY*0eD5GXNY3aiSRX^!Q-vFrMCgusDTG#m(uVj`x(m zR-L@h7M-rjcns{>0~2$JrxpTtZp4>rDDZh3T}^3~Y#sZ@+md+vTlDnu$?QqoiRGl7 zLpq$m&mc&&IqK&3$Q%x}WzZ+9qlhDg#HgQ2f@$Z&hK@f6Yoe=X#9|q(Y9y(h+BmkGvhO;EJue#spy4 z9<5b~?h_g6xa)V|*?SMLvavzx0dlzqR27ofyXGkpdD8tbD$c}YO&u7N7t6`1;HR4v zSy|abvs60Q>4icdBG_}=W)Tar64!30K5(7)yuly3RW1z7d^hqw|5-!4;-E>&??B_8 zb+i#)ch^I<-Bv}&q~=AXRo~-yxejMwV*2McE>pl4W0GolvnRX&u7~-53=Opfx##ZO z8ood;R2apjE_Q-OHQ%p<+kLVsJpfeVE^E_=T7&{tXut`$9J+ii-tk@bT8ShefI6%Y z{%VuijD3UF{=PvSn`SRN>zih~t5v)Esm6o)E`kNeXIS%1)a@svdlE&>p6Wvp1RH+D zU^{0brh2POCguJYf@A@ey__Yjp8WKs{mA?CGNU7dMBABW0C}DFD;tnJ42}Ja4_o_v z>x*8a(xJo(9tpTGU8m+RmH1-J1FTYLc$XhxANq3 z`J+(}pJRVscj9VJ=&0Fz<0nCZTRZQfBwu1%($541N!qOJW9WH70rjSF%sXwKDjy*Y z`tRPyYux=BZRF=aFTEw79K`&7WX-f^SaSz$!snKwkCwU3=KqGR&@66YE&v%;3UVdT z=FFI@tW1|aW3^*y<&|ps&PK2OA{hZo>!gruN!*NgKc>trlABvsX?Jn^39flzB+o;q zK>?2#=hIZ>yvj*_1hf5vbzauwEKDMcxZETRC;X9I27)iHaHeRJvd%I&X6I9 zhrM=5x^llwX2gVlztR|2-`c{W%`dGDiRt|A5=K4;S4v(-#O(+#uc-xB@H^)tjySb_1K5G_s|9{U1MoIm{4&?+y5e zzds$ZJn%8Ya2N2lq%>Y#CZA9S<etP$Bf;qf zp$iN@PN_suUn2fYc)V`y1cz>ty&C$CldAy`{q%wVStx5(p*Ma1low?5QkP14tD$?3 z(AV=>f>=h>s2^p@14Vs*Fv|UlnPW;y`*q|*anPVx&CezN$%wex6!j?LSlu*XU&K)E z`miDSj#yt{u=pU-uFpD^gLv7JMyW7$7VJr)^x-5**Dif}lvKkP%n~Ib6B8?x+w}fE z^~#tz;~Cj+6qfBzT>g(QoUx4@(0YzLHr|XKD{f+CL5oad^`06o`ekz?SJD<1@o)U( zf7BylPyn&Z5Z_f}D8D!pjIed2v6)L9GPv$YczSeZ($_{5!~qQ5G^LH-_`YkRjN{TX zCFAjU9%TTO%72i&gyau%?s%GXBMMtPje~kC)?0ydYie$Zfi#7cMx^`F#xX*Ay4K@F z4alV)jnY3TG?*qQVSmuZ6^Y%b+|cyQsz(>+u$D>SUrP`6Lj<+|*20pz-apWFvrxgx z<*RPELyflNFOIgP8h9w(pT^5g+p-#N!Ejs6j(=nWQ8nU{b{=i;mpS zcBxs#B1U7D=lLz)PQpBf>@);tr~me1do%S>7Gk3gN z$aKbqpXOdFH?8TaA+G7FBTmcr!I0>&?>Eu?v%S;u?YfP8Wsc4YH&t}i_hNuCgg&i7 zKR0N@RBjj~P!UB94zUZ({46c|f^4^3gQ2R*Ut_+C?fWu}X7K$GFo6ZOOPEjOIJA;b zq2Fk_nnEPQs9qqHMo#IlO6_*BbhV83DJs)@kjHf3n^i7XC`BCWljtO=0zOY3j0;9H zFYsf=+p6{h;9A&J`b$455hHvk^pi{wA>I4iql+)rEtb%`D}&He6-(k6+t=e31g*r` z8rk=HlHDYVba_ki86(v^C*;~&iWk#SE1qvu@pRnKN*pO$x{rGlv^=n-;%vnHp)Q%3 zs;W!P;yjkZZ;&&&I_a@2jW1~WLYnhbtvlD#l+3h^N3d5wO~K@{JAu3ghyDh8Gs9~< zv)`JT!Nid|%rE;Cc32bh?tQ5;Oag-sPq0?5;M!1j1w68X?039 zDV;!s$5c#Ronr;bZu@~XInD|fJC-Bl${k_F712b{AIwM(oASa1HA@%wgDnJ6UCgR2 zSZwT*=Sae?Z+TMZPotl#jxGc@V??OcCPWM4R{WrrCwyY5b)2CKpOW(OP_f*=_zClb zR#Z2N14SPnFG!s{Q^558E;QxqwQ?j2*jTVpAHV$k$_kd0`E#Y~T+d&KG)>?~B=Oj+ z8VQz^<6z~DUY8FVSB2>?$gx&AA_(C1$FWul*Fuz?IXUuTY>PLZ2*stn^aiQSRA_g?T@Hxt*rLDq5<&Do#7P|HncSL#jZ|4Y9$_$fwS(r7cr26TUo6Y( zHZDCUqcb8FK3rNtRJbtlAn0WZoWcK+CirIm`_v1xuN^xmB>$}G+2YPYY7|@*Ra#8k zk2c>0!j6C#wV+bK`tRIP;T#9%dD{ttY@qiIQ7v4fV5!v9)|!iiWzm|YRFswixXm$; zV9fAFL9|5MzqABz_&3ZlBeYQDi$CR!w=45ns-srOlH=s; zW7OBwgz^F1aro&=%9NUriNUbxr49z7`l~@BMuV*{RgfO9{z2T>d?Of|_-YiuR8N!h zszuV%XBoSArmyOd-XKHJ+kw6QN%NN44$cx*Z+`cJ`;Bk&-|IaYdc@!Ib=M1adEBWn z7H##WsC^eW>H^O~bv=QPtvoHf*f#p--G2fp$bQoPzCNIl+GC!j=YEw?A8``u1bF2t zKVOGDbK#DV6y{d8D8(dMgyu&M0rm0rGnxmcH)~yWn0^!wU*xlDB5fd1V{t>5Be2*LNb0cAlzV{t0iqp5*$nf|yZbe1KePxN> zB(2A#KIC%@YI4u3PYPM5u|8p5P5l16MuuF{4~z;wdEkVe_GS3A!>5D5obZ`gA_V&U ze}*=6CF=-vBhrpa?Jy~qzn-1wuu(wzI~;s&_9q^;#$tuPjQCY;;3taD9EaThgo9JI zz|;xec4{J^r)^XPy-#zgsX=}I$lUe&@Q_?V$1=E@!ow6gK--un?tYNc%aGa)N5zg! z+MZx{+manRZl@v6%6v8;0B_qg2=~G?;_kPLj6y~C(iB`Z4j0Rrag4b3E4hDBp5BX! zYQ%I$j|a)GbjA`Ek(B~$o=}9@0ysI$jHM`+UsYm*F7OA;I+4q!J9jj&oy&%GxJ@R( zwU_*8Na!aNATBD=HpkmPvi0RVImIrufL2?WZnV!8CpqY-ek!c4sZG*DT3P-fW=z}e z7HVBO*)uwT*-(2(+E@4CP#I?g0nAO7Zb zxgHGe?{;cZ4;xYQYN5^|OEdd|Bs(}eMXEeg%!*uNWwTwkb@=c&^W)OvWT}JT#Y&3Q zEIoYluiZu_gv=q=46G`L)Kl-|wj)G_GqkRqg4PXf$X3#P1niU-Jw_eQ%8B`&dVnWR z>}^{xlFwBkEhYAQh90ihV^8iba^r7It9vQ(D-}+qftX{9&m06W9%KnI9xd{d=aQfH z$Rx63rOm#;PXri;YSoG~>E5SOGwNkUzxv$mIw{0fZ%AbDrpEj<7ua5{*=~`K+`tHH z-|XLYy`sxNKS*3~?tq4#rRfq)r^5HiyW5dDrK8Lkmgr^@$iuC_}h(pcLZA=x%O zt#%5`Le{#N9ibnxhAyU98X}}e+@py2>d1+4BJ4?W5pc=h#ybebNA0ik+Z2mBrWSL66foqL zHmMg8fV0pEJajQp#}27V*pDi?!Q?>r8G;%Eo=>@#D*$BtjTUKL>l4c`lk^+95#VNG zzyAI}3jq%=I<#aP`Fx5%sMH=URS(UABDd^`1;>V0{2K_GKI*Q#=mUlgNkB%k&A<0~ z&7F+COwY8y37r4-&p9^T3(^9zh_&9*u+E`s7K1y^C>5@%!4<$+t-M%I`#Ye+&pihw ziO%BUn&>8sGsDY$2|_DiBU06Ar7jSkBHzETM^Q&Or-xgMH;g zyh){IzwW(ZCDD=bBSbV6UPY)pb1P12;arn2H|NJ>CQ~tlKIvVM1d9pxUiI;YrFb#L{&nj7{V z@+7BmMpQ7-t52$;j9iWz<##LbN0nI;>Bl}4JGZx<{=vx6J08193Gbnq(>SWX>`f%? zS4sS@m^!$#qTH%j2D-M1{XAJRVnjZXy?F)!aOb*aem|$HQOtK*QL619gF;9`;??xe zMFL?cmLVwu5x*BXKcaf^ykcl9TG5y67Gt~2Dwy*IE{MwOYLjrd%JbE5CjJhox+kK? zw;9Nh8CQvbc8Jvm|4`wVZ3?^flt^-3r0VdJ5@dkGUasU*xrCx55&k%%i8;By*1Cn` z$Vyp*aZi}l+Q*!FERO<ap^l3ZnU|v&vkn&Jyp8DNUsE_9T30eD=+H`rP z;1c6k08tx`=`3{(l;+?G6XInc36`I}LbOgqfY19TaMa3g>g^Tn#r_cP`{;1UO!HZN zniq~S+jCrDfW!FQi@7d3S(c9oA}tZ*YL+iTMP=q`R#(sZdYDp}#!<_*utW zPq#-U7Bl^aTYa>e)ki2>{;M$<0^q?Uw%N{y_TV}z*yk`7^% zWsp~`6vivt^g#hJQGEm4#(l1b@%lH!)r}k?_7-q;O#_tP0a%7QC+8+=z2yS3I?kw#8^7oA*us^gC{P-gNL(8$z>TMaf^ zvXa(N_yf4Tr3ntmqTQm^B|IUH$W}QTr}FuBeQ_tLiC@zhCPi<)uIQ;~YR;dznFp#` zmdz@WGE*3*-9zIOoT$19LQG5dgINf&PH1My+Qz4GEaMFEhBO5YIH_9Uh4*u;J997) zXkJk!E)m&eZ3=#pc*Qd&RFdqtYzGj8?Mgqqd%Hojj{TLM<{$yhlUgrphHq%CpVQS z4ZP40AfQ8YVf*%`rOFZ65mmlBbwaW57}vfMWb zisv(n=20JoxSC;(mxhM>!w_&<+Tm9<5;V`{T^^w_WO+hn=}LHhenI}xystuEXu2;y z*(L5f(}ZtN{IlHFF~UbuR)&r^ERa;Y?k1xs;evBu8SWloR`n)?s%>wO8bN)V)fC-8 ziaYm84u66=Q(R6Ceum`}S*JIq-GG;Q52SW{fmq1EAoX7oBE0? zNL{TqeFsNJ7G*qBc=OBmyOf^Y<^43a4d}urInIsZ{@c0sCF9eedPhmb9cvm+!bpqL z$nil5Ww`$UkVTPO0SJ1|)7YCpInx{W)0U5TKNoIrjkpd;8;BfwIW9Us+!n3QTz-6E z?t@2b_rsa7-A`DLgy3;e`Q-idmrpC_7mzqiF(HFe%t;v#C0ul5zR{9x(o$iAishV< zoCdME9esx0b}fbq{S2w={TnD2`}tw_PulzM2S2zqVfx_$bqkv2SD1Ylf`V#38c-|s z1~(^>4(fb{+zP{;z8u_513jX9pz}#8BauWUw+M=*FY+H8_2+Mp{QQ$j|5^Vl67@_V z7?$$~m5vAR8KeJvN+Mx4Q2Fs60oEH|aLzml3m(eVb%`S~i_uqsDh_gNP@JjMnQCA1^Fo}LAQBpl&{v^rHTg zOGEB1|GeBZMwV`>^VeTv;E(8=!;eME{NQ5^xX1e7)z7XW!q~==-im z=33x%iYU8LIS@7JK|V>2X;@@oF{D%;Xqxj>msr5akA@W125p-{)AI(aFfGb8)XtbTS?-;gnqOHO>2@;l3L^d(G+}*2_j0&f42qs=qS#6Hx@=EPU`S2=5-c)VZM%Lo zI-t=WHcTpWa{n(PoBy;Qh7s9m8BE7u)IGzRJ#qUS%G7Tw{1Yt378ogOuQDF{r7v4S zI_VI++>i)4fZHn|^ftWe4J+k=iwx9AjOH3b>Ww+Jm0vBUE?KhTrAih(n!a^@2=i-) z-5{kXnmHBg*ZMNp+tp!&R%*-+{G;HsOi!DlM8fdb29;@vmf2;ym}*p%w4vEZ;*|o+tFzYTkI* z5RWm;^%mVFyEeJtHfp8bL|@rlv9P4oVcd?8yo}VXaiuHi(h>GhGQc{9p$|TTaKC4Kx5t-Gg4`2Q3QiN+Z016|FNW zKJUo%%v9uTY-p*DF-(y^3$W>bVR?M@_vA(MCXOSqBdS9*!7<8CoNH3&AQe_Ana!e$Y#!oS=51h%%GUx=bF#FWsg>b#%H2r z@M{_TgR&7p$lUDzc8LHl zN_?8;PnMGLn=38OC89n{z=s=Yh_?pk`7R(Ljc5BF`(Tp31%W{r#g((+#P7`s$s;p( zyMzyj`$=!IQ$1l*d+Ge~B4)}48@4g4)31@!Il@~dW#@E5MuIr{{H49+P_l+W7d@S3 zW3XTy#HsQiFRS^VsItcdv{oUQ6#tCr^|{+Q0(#E#>it49Xu~pO!kP~-1_~&=UU-yL zwTF06Y295RDqyU6h91)RKJKUFrj0!!pm&5wI@VH?UNy-%U$ zJPbmy2DY*{EfH|C7%pc@4_O(8AR4&bajls4R)c2lu(~Zbjw`G&ln-9@XL~;nAl+u*s0*+Vj?gYwq zm++Mt^#tKE4|~(Wkw<*Fs7d%b71bOnPKal z7MZ6HBpDhWX&sQYYmhkX2ptsdF4eQa>f}C(!C4|TWqm;#Z@A*ZQ^_Uyu`pOu;WVB4 zg;+RkJTbm8JXWG_-FYDIvP8uCo71#)1pt{6O3$H}?d3^&f=laHl`GxvH5oaTMeE_3$o9S zp-&l*87+CM%Sb9~6CXX@ShD{r>VZOjh1B?R<EWhTG}Z~l;Udk*X92|mDu zdsFC&3q++56lamlFbl8KsiG2vC}h&56_u3mPA7~&ka4_jGrH+cMU-Td2$b76mq{h3 z|459|OSRTPJBJ`p7f)Mh>fV%2c7%~@-Q|WE4LK_i>fwwya;=$_7_MU9De>$Ug09zC(REwQ>m)JTbFgzTf%^k71s3hrQQ}QOz#B z_!&bmE-X=HaDKjK76l0>tGeD++DkJ2(kSX;bi`zThl-HoDQ)XCc-5l6$D-z|nnnmc z22GPYzs4Gyg>ITbDqfF&A&bDxh>C8$98s|nAmRDD1*{7f)}5Gv1GTT zM-^H}F|Rr#tI#vbfl2uK<1#hC(NA5tq~FedQ5KHf){xa+lE*i6b9!nH+Tl&8l-)I_ z?(I#9$zCiT;|MUiS|6nB6lk;jHsf8YB(BwgCWg%-U2P*?jS}CrBWp>^lTE*GoD3a% zryDiTp=rqfe9mPP1h7O)`^w1gyMOh!V8H!+7`$I zNd*P6i9Alrgx6ZqU9DADNk@ZfsR^O4*}Jp$`j>;_0eva<&xx8WMR1w{7McupHFlHNYufPpU*8FTg(qmMA z>+r^kyf_uDRgYB$F8+!Os>hLp>rlq($SD?p37bd0gvU&!7gG!iH(#DcbEh`s79su~ z)@*pc+*iMrI6z3glMS&Bs*`TkeHq{^i`T54D@aef-hDXh0^DL3uz0c_Iv_W z#6e5$#HaS{Dg!!|_q^s1I=#zOGH$gZUP50VUS{o=t_H^+c2n$^Hr>?np4yr0wu*Bf zh*>K-JCjZX7}HFH%br8e&L8lnOSGq#*j%*&tOc>=bHG!MUWD5O zy3vsi%=621Ruxzz6zTK!Oi$!9z)DKoqzMH7k%p`~`_JdNAgdnWdLG(7d7oZ6J&e+R zYJf87XW8tB`6<*jfW&~tBT*sRFFowud5LLki%Lzc7jCj&wb{GMG8xjy4kP{6ffNu& zr?L(OV2L}*)#*{ObGElEeB2qZfnRXnn@8c=8P8_w>yy^dBG7B<4(K+6T-Bmr(e^c{ zt#vXg5Aoin)NwJ=&MQBsb`4FkvI739Xm*k_iV)gm+2?kuotJCE{Vt4w1OcxNqXTMB z0*0Ak_F`4~e+mA9l0j6en(>nkN;)Hh`o?CT?W_MuenhU3Lvj1U=Xx{gP(>$EP|Z#W zmbmExmPYG?Ooae(S@pPXINb4SE2qP!>U#RlfS5d2XQa$fO6dz1>q00$dlD_%BDLq|gbs}HbJz%B4 z{K%uWKzX~!{`FOlTLm8t?bc!lg5IrU)9mn=AJzy6e^6@;F9-*ZpgLm$l|4)}o)3j& zQCz9nj@1gGtAFnnv>1@yo(X2dARju~{&v(mw@k9l@`iuGbS>%f1XW+S2zr9zFvo2? zYHrbXb|Knr@gf0tVq_|~)3QgG=$D{2xcq+7;bUtbr6;k!pkG17~ zxl?@g1vfQt6kFS)xlOUS@Y~y;TuYrvxnVaN^==n!QM%ZVLo(_<*j547L~HijIb>6Y zMn++U{;i*daF6dR%94Ve3`bOr<{=rRW}}YS2xbE13~eai{7cc^VsN@Q>##L7H8ZQc z?<{i$`Nk33S$wn#+rC!;{`(a(VRLLp&JS!p~ z2P^jD`MU5x6qv2*SWq|^bjF6x8CbWk!&>(z*EiXl&9y$O1XxQXi0jKYvK#oWAJx8k zZ0Z53C@A=dQ*Fn$4vv`=XHkA6G-oM-Y9?6-mByv#kvzCcNG2hWNAmkIvP z_%wb;c!kP-Q*8}!W@8*clGG#5>a{lE7;zlkbxXozuscX0JN3b0AoI?9=pDZ0l9RLX zsTTuYIt2~ip3t(@1huCyaYL6U;H9Q<(x@U0qe@g3h4LW6t|eP0rR`7%t&h@%NJxLc)aRNCIXIG-?<{ zLoDPex{3Z_a%*JH6w9sFSliFqRKmC=R0bdAW;8qH{~?L#H7&zsjU1X(8NZ7!B5n(I z{L)RVKFkfeY^FIaQ<2)2w@^d?lwBpJf2S+2r)f?$@&eN^&PCJ4KqjqtmW2aXfd7g~ zS5;L&tohj7RLVzpOrzM^sV={dHOG0>wbbNslJ+(e$`UJ*z1oE8f{Lf+VPVS8JBa22 zgf^fKH!a>>ow@LN1~)^t6sd2P0ukNa{RGTuONng6oQ@c1g88cVP*=}J^b8ESDzuy% zNJkZ@)2kk2?F?NTaZ5!;t(LhGei+w-P!=fdv)g-M6hg+7m{H}=QYz|70gb43p z=v9@zbV4>)PQKW3j`ewlgC7PeXRGg$owhNn-s@7@JWpekdvDXRBYVdHczRv#GvI9< zLpX=`_L6J&BYeXdro{Pm^i>>e|?NhJ7z|bDN)jOK?6F|4Ye6j#AnhHf39{z=&6HpVUzVcg#kYIM;pd? zqyF5jMbDGo5>40*&kxv92HK|q2Tsy9nVi0bgsk3?FS^lf1c=(_e~ufh1f;coY%XIy zsZv5`@kLPbjr(;NJv~(j(O;*1InW~~;UI)^UBBL1B(vXDF>E-fC{Mg|-%p`z%L`feCHp59FUd4qCI znI}$Fe$F2UI6bMKK)z^(?++a4aR@T_Q~g227n4z{uhw2^Zh~lAwXE})q;hPK`?CdM zsq>lVi$m!IUHRa+Xs9{ao952^txrsXun=KFxtgD2S=WQy61N%r?ni)2!1{Zf9UKoR_W&06t+=qipjpK)#C*ni2V2H z02Hil=E_fY{s7zy#+^n(lNsCcS&umM025k!&1YKZ4oZAW9TMv*vPb!s$2KVc ztBDzZ;uBD}_RYf|VjW%C#G2CNKdnTzMFm%!cNfvpE|-(QrBo-M)3hl80x11`p4k?+5s}cj7@u1G&HU1X>zh=wdxkd`lT|zkJkR9T~pa?%Ne0! zVqIZ z%T8#krcu))J@H<6Pd({OkB)Sas^>8P5^% zX5g<=1JJ&VJ-^PY|Hq91*@Lg$33JB|)P z$%CAM;s};gs%1y)>NBZV>@2`=?Yd%EGX1aV<{kkab+l~Q5Rq6SZ4~ddxiS^(<&DqQ zE$hk9EX&Qk3ME5QCA0zE@7$Q}n|it{$>6y+l)w(N}$o4lZev;KDyBSVAuLXVe2tE$=Fay}T{by( zby+y#UgR4k+xgA5t+^t`h--!ca&~v^yzV8G)4UJ)O?=TBoiWwKSy+!J8X!MjSPmwK z$I<2HZt4z(dEy%ya)`o`gRVQ?i|iLT_)o!n+Hs5eB6ANE)hZJLifW%sr*p^H8r`G6 zJxyDEgW#Myn%2!Kqafy37E*(~Al&?r-CEJQu7uAsW%nOiyI;w!Ryp*nOji4>+B&hEcaC zjy+H7U6>TscXf9*TFZ;oFT$}YFHw;fQNK(}n!e1@fNVkTV1Us*xCl#EtiH$-r;iV? z>=idm>Lv-2!(JI7>~HRUQ-mu;u%o3+C2U*?m$GW%4y)Sg5iC6k*q2bM^!of$VeD;$ z*eS)MqY5_9DZ@bt4GZD8x@Gi2K%Rv~PIZ>yR2cknXyS+Cwh?R0oC~`Zu^%-zZ~Kk) z6(@vm{k|qdeDgGC?v1kkiG5M2vWr91AmX7J1UWCEsiZr;J|7XRYafC+;fzS2KtI8# znrzF+y0KH%FeGJ)@g+y6P!>=0pB#F)MPj11->rq&W#KZ4JTkG~@Tgw0^EJh=gCG9{7*~?kAVfOYMDl z6JAzYnGNR5E}}P|w%>(MI$DgHP7lt(brQeAn6bg$Mr4S~!*DyB8KKA}Iday8-vhMc z&x=E6MbIt?JK|>3ax{YgYrGq(czashE17;5iq;=^@pKh z5k8m#DL4ajl_%u(cObSIL<`A=T}#+^iVU`V+-rz!9(n5WaaD1wdP+tylIfV~S7#K- zq@nQ4V}4RUbz6mcOz=u?fdTSTUh}k+E?wP^wnfgcNfgP&I;eBxtTM0Zhv2(_5fepQ zcVDx&w6SZ@4{`m;CDVTB(Zvo-u6Aa}LWsxahKI~W-__WhT@wgIqK_IrVGjSk3+`7$ zyx?n6o(1c}b0j(S^j$`8tZ{@+VFGR*9!A>g^Cj7-O&Ud%Bel}|vmJd9XlEj22?HKH zO4{v~wg}l?Dxj_27!wY0Ez)<&;b8CT1DH;Q$J+iBBOmb&ShC@SrXDU>9D=c#YYr>M zfPg>$RqTY7{h2fe?vxU_=IOc5A=fPZ*O(cbTvKQLPdjgSsZ)*eu7-;?%W4@My6;*0 z&mz?`K8p6cC$PSxtcGo0y1)Hv<%kQ`z=!!3WKKW_%k<5)^bT+shP?zqZSQEV)s?&q zznGM})3DY+l+w>$YI3zMv>P@5DN>$9QK2inwLe9A6LDyNpzCS8V;S^^UG8I%h|AjY z#bLLlaj2~O69%j)R$^X*Zu=0{B;iL_w{uVyWrLrizuQ3q;U-^536E92_N7$tn<`F5 zAz-VO#sI&R`C6T~e`GB?Hf&0;+eO!~l$<#u-Sneknz;GGGt5w@2{`Aa=$bML>7Gc@ z``ID42todz;^1odTSBa{=1z;q9P^-RY-4c~2Vm_p*+YP(Hxt+?lq309^%0C6f~mxV z-j`u#ckAfcd|j1xW>tEH@ET&i6LW zdtOML)x||3{X)P6KH!d|j*w}2PAqF(2l1QL_lW|Nt$xm0ecyIrvkiCv5M{WLk95U3 zO5t!8q7ljVv2Su|tL}l{B9^tyq$47S!*j9^&|_sSrSL?QlcJwj3P7|dFKg%__MX-=(U z6mLbaKQ=vDiXgLdVQY2v_#n`)W%uM%t(&|14-b;Aw?1q`$8#&}6Q7F^v7Y_o`;la`9O)jLWlzWK8Avg&t!7-9Zp8)`nzf1Mfj z;~|vqDs`zL?c1y?0%sKIyUkwel^Vzy8k4kpvy2O~jD(P|Tdg7D4-~@&gC&eB2uB@L zzT0ub2&+wfctME3pKl`TEW{Vt5niV}!g_Ng zhKwRL(M^yM&xSCJc2kuLVr^>`38oZ~7R5PgjuG?DVee{235tl1yEhda zmi^(&$aDkba_N_>tu9A|e2r9RP*>LamxEuFN?{ok5tmONGS)`MUTEfTj6oxPG9l{C ztLw8!snxwbt^ZZv>1vbBz*!&c#B~m);c$ep6r7Z?8siIE3Vfrs(*y1|(ud_Vuyp_` z^Nx?_b?5597)l`gx#%Ck6lN>hkH8ztu>20mJ>yedJY(&Ea)Cm}iRNz~9jk$l9u9Y+>xcBmzcIu|x^4@P8X&6|wD
{% endif %} - + + diff --git a/docs/_imgs/gotemplates/postman.png b/docs/assets/images/gotemplates/postman.png similarity index 100% rename from docs/_imgs/gotemplates/postman.png rename to docs/assets/images/gotemplates/postman.png diff --git a/docs/_imgs/gotemplates/swaggerui.png b/docs/assets/images/gotemplates/swaggerui.png similarity index 100% rename from docs/_imgs/gotemplates/swaggerui.png rename to docs/assets/images/gotemplates/swaggerui.png diff --git a/docs/_docs/aws.md b/docs/docs/aws.md similarity index 95% rename from docs/_docs/aws.md rename to docs/docs/aws.md index 33d3a51cbf6..8771304558e 100644 --- a/docs/_docs/aws.md +++ b/docs/docs/aws.md @@ -1,10 +1,13 @@ --- -category: documentation +layout: default +title: AWS +nav_order: 2 --- # AWS ## Import OpenAPI documentation into AWS API Gateway + The AWS API gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html). Here are some tips to consider when importing the documentation: diff --git a/docs/_docs/background.md b/docs/docs/background.md similarity index 93% rename from docs/_docs/background.md rename to docs/docs/background.md index 63463a1ba0f..6a066610f7a 100644 --- a/docs/_docs/background.md +++ b/docs/docs/background.md @@ -1,5 +1,7 @@ --- -category: documentation +layout: default +title: Background +nav_order: 3 --- # Background @@ -8,4 +10,3 @@ gRPC is great -- it generates API clients and server stubs in many programming l However, you might still want to provide a traditional RESTful API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by gRPC to simply maintaining the aesthetics and tooling involved with a RESTful architecture. This project aims to provide that HTTP+JSON interface to your gRPC service. A small amount of configuration in your service to attach HTTP semantics is all that's needed to generate a reverse-proxy with this library. - diff --git a/docs/_docs/customizingyourgateway.md b/docs/docs/customizingyourgateway.md similarity index 91% rename from docs/_docs/customizingyourgateway.md rename to docs/docs/customizingyourgateway.md index 2be1b795ee8..f1f31d722ab 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/docs/customizingyourgateway.md @@ -1,25 +1,26 @@ --- +layout: default title: Customizing your gateway -category: documentation -order: 101 +nav_order: 4 --- # Customizing your gateway ## Message serialization + ### Custom serializer You might want to serialize request/response messages in MessagePack instead of JSON, for example. 1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) 2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) - e.g. - ```go - var m your.MsgPackMarshaler - mux := runtime.NewServeMux( - runtime.WithMarshalerOption("application/x-msgpack", m), - ) - ``` + e.g. + ```go + var m your.MsgPackMarshaler + mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/x-msgpack", m), + ) + ``` You can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/marshal_jsonpb.go) for reference. @@ -27,6 +28,7 @@ You can see [the default implementation for JSON](https://github.com/grpc-ecosys The protocol buffer compiler generates camelCase JSON tags that are used by default. If you want to use the exact case used in the proto files, set `UseProtoNames: true`: + ```go mux := runtime.NewServeMux( runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ @@ -45,7 +47,7 @@ mux := runtime.NewServeMux( You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows: 1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) - that translates the provided query parameter into a custom `Accept` header, and + that translates the provided query parameter into a custom `Accept` header, and 2. Register a pretty-printing marshaler for that MIME code. For example: @@ -97,28 +99,30 @@ mux := runtime.NewServeMux( ``` ## Mapping from HTTP request headers to gRPC client metadata + You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. 1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). 2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) - e.g. - ```go - func CustomMatcher(key string) (string, bool) { - switch key { - case "X-Custom-Header1": - return key, true - case "X-Custom-Header2": - return "custom-header2", true - default: - return key, false - } - } - - mux := runtime.NewServeMux( - runtime.WithIncomingHeaderMatcher(CustomMatcher), - ) - ``` + e.g. + + ```go + func CustomMatcher(key string) (string, bool) { + switch key { + case "X-Custom-Header1": + return key, true + case "X-Custom-Header2": + return "custom-header2", true + default: + return key, false + } + } + + mux := runtime.NewServeMux( + runtime.WithIncomingHeaderMatcher(CustomMatcher), + ) + ``` To keep the [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write: @@ -132,16 +136,21 @@ func CustomMatcher(key string) (string, bool) { } } ``` + It will work with both: ```shell $ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` + and: + ```shell $ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` + To access this header on gRPC server side use: + ```go userID := "" if md, ok := metadata.FromIncomingContext(ctx); ok { @@ -152,9 +161,11 @@ if md, ok := metadata.FromIncomingContext(ctx); ok { ``` ## Mapping from gRPC server metadata to HTTP response headers + ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) for more info on sending / receiving gRPC metadata, e.g. + ```go if appendCustomHeader { grpc.SendHeader(ctx, metadata.New(map[string]string{ @@ -164,7 +175,9 @@ if appendCustomHeader { ``` ## Mutate response messages or set response headers + ### Set HTTP headers + You might want to return a subset of response fields as HTTP response headers; You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. @@ -181,15 +194,19 @@ func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) er return nil } ``` + 2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) e.g. + ```go mux := runtime.NewServeMux( runtime.WithForwardResponseOption(myFilter), ) ``` + ### Controlling HTTP response status codes + To have the most control over the HTTP response status codes, you can use custom metadata. While handling the rpc, set the intended status code: @@ -198,10 +215,11 @@ While handling the rpc, set the intended status code: grpc.SetHeader(ctx, metadata.Pairs("x-http-code", "401")) ``` -Now, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found. +Now, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found. To do so, create a function and hook it into the grpc-gateway as a Forward Response Option. The function looks like this: + ```go func httpResponseModifier(ctx context.Context, w http.ResponseWriter, p proto.Message) error { md, ok := runtime.ServerMetadataFromContext(ctx) @@ -234,6 +252,7 @@ gwMux := runtime.NewServeMux( ``` ## Error handler + To override error handling for a `*runtime.ServeMux`, use the `runtime.WithErrorHandler` option. This will configure all unary error responses to pass through this error handler. @@ -244,6 +263,7 @@ the v1 release of the gateway, and you no longer assign to `HTTPError` to configure an error handler. ## Stream Error Handler + The error handler described in the previous section applies only to RPC methods that have a unary response. @@ -272,6 +292,7 @@ can choose to omit some fields and can filter/transform the original error, such as stripping stack traces from error messages. Here's an example custom handler: + ```go // handleStreamError overrides default behavior for computing an error // message for a server stream. @@ -305,15 +326,17 @@ if the error being reported includes them. If the error does not have these attributes, a gRPC code of `Unknown` (2) is reported. ## Routing Error handler -To override the error behavior when `*runtime.ServeMux` was not -able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option. + +To override the error behavior when `*runtime.ServeMux` was not +able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option. This will configure all HTTP routing errors to pass through this error handler. Default behavior is to map HTTP error codes to gRPC errors. -HTTP statuses and their mappings to gRPC statuses: -* HTTP `404 Not Found` -> gRPC `5 NOT_FOUND` -* HTTP `405 Method Not Allowed` -> gRPC `12 UNIMPLEMENTED` -* HTTP `400 Bad Request` -> gRPC `3 INVALID_ARGUMENT` +HTTP statuses and their mappings to gRPC statuses: + +- HTTP `404 Not Found` -> gRPC `5 NOT_FOUND` +- HTTP `405 Method Not Allowed` -> gRPC `12 UNIMPLEMENTED` +- HTTP `400 Bad Request` -> gRPC `3 INVALID_ARGUMENT` This method is not used outside of the initial routing. diff --git a/docs/_docs/cygwin.md b/docs/docs/cygwin.md similarity index 99% rename from docs/_docs/cygwin.md rename to docs/docs/cygwin.md index 3963698c8c1..697fe7ba832 100644 --- a/docs/_docs/cygwin.md +++ b/docs/docs/cygwin.md @@ -1,7 +1,7 @@ --- -category: documentation +layout: default title: Installation for Cygwin -order: 1000 +nav_order: 5 --- # Installation for Cygwin diff --git a/docs/_docs/examples.md b/docs/docs/examples.md similarity index 81% rename from docs/_docs/examples.md rename to docs/docs/examples.md index cf22cc3d7ec..cfa70cbb066 100644 --- a/docs/_docs/examples.md +++ b/docs/docs/examples.md @@ -1,27 +1,30 @@ --- -category: documentation +layout: default +title: Examples +nav_order: 6 --- # Examples Examples are available under `examples/internal` directory. -* [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), + +- [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.proto), [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto): protobuf service definitions. -* [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), +- [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): generated Go service stubs and types. -* [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), +- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): generated gRPC-gateway clients. - * [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): - gRPC API Configuration for `unannotated_echo_service.proto`. -* [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): + - [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): + gRPC API Configuration for `unannotated_echo_service.proto`. +- [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): service implementation. -* [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/gateway/main.go): +- [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/gateway/main.go): entrypoint of the generated reverse proxy. To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), @@ -29,5 +32,3 @@ gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) - - diff --git a/docs/_docs/faq.md b/docs/docs/faq.md similarity index 98% rename from docs/_docs/faq.md rename to docs/docs/faq.md index 30e34011428..5457f350e04 100644 --- a/docs/_docs/faq.md +++ b/docs/docs/faq.md @@ -1,11 +1,13 @@ --- -category: documentation +layout: default title: FAQ +nav_order: 7 --- # FAQ ## How can I write the annotations which grpc-gateway requires? + The gRPC-Gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), so first check out the documentation if it is feasible in the spec. @@ -14,6 +16,7 @@ See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44 in the grpc-io mailing list. ## I want to support a certain style of HTTP request but the code generated by grpc-gateway does not. How can I support this style? + See the question above at first. The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but diff --git a/docs/_docs/grpcapiconfiguration.md b/docs/docs/grpcapiconfiguration.md similarity index 52% rename from docs/_docs/grpcapiconfiguration.md rename to docs/docs/grpcapiconfiguration.md index fbb51920869..2195a7cb995 100644 --- a/docs/_docs/grpcapiconfiguration.md +++ b/docs/docs/grpcapiconfiguration.md @@ -1,29 +1,31 @@ --- -title: Usage without annotations -category: documentation -order: 100 +layout: default +title: gRPC API Configuration +nav_order: 8 --- # gRPC API Configuration + In some situations annotating the .proto file of a service is not an option. For example, you might not have control over the .proto file, or you might want to expose the same gRPC API multiple times in completely different ways. `grpc-gateway` supports 2 ways of dealing with these situations: -* [use the `generate_unbound_methods` option](#generate_unbound_methods) -* [provide an external configuration file](#using-an-external-configuration-file) (gRPC API Configuration) +- [use the `generate_unbound_methods` option](#generate_unbound_methods) +- [provide an external configuration file](#using-an-external-configuration-file) (gRPC API Configuration) ## `generate_unbound_methods` Providing this parameter to the protoc plugin will make it produce the HTTP mapping even for methods without any `HttpRule` annotation. This is similar to how [Cloud Endpoints behaves](https://cloud.google.com/endpoints/docs/grpc/transcoding#where_to_configure_transcoding) and uses the way [gRPC itself](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) maps to HTTP/2: -* HTTP method is `POST` -* URI path is built from the service's name and method: `//` (e.g.: `/my.package.EchoService/Echo`) -* HTTP body is the serialized protobuf message. +- HTTP method is `POST` +- URI path is built from the service's name and method: `//` (e.g.: `/my.package.EchoService/Echo`) +- HTTP body is the serialized protobuf message. NOTE: the same option is also supported by the `gen-openapiv2` plugin. ## Using an external configuration file + Google Cloud Platform offers a way to do this for services hosted with them called ["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). It can be used to define the behavior of a gRPC API service without modifications to the service itself in the form of [YAML](https://en.wikipedia.org/wiki/YAML) configuration files. grpc-gateway generators implement the [HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) of this specification. This allows you to take a completely unannotated service proto file, add a YAML file describing its HTTP endpoints and use them together like a annotated proto file with the grpc-gateway generators. @@ -31,90 +33,94 @@ grpc-gateway generators implement the [HTTP rules part](https://cloud.google.com OpenAPI options may also be configured via ["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files. ### Usage of gRPC API Configuration YAML files + The following is equivalent to the basic [usage example](usage.html) but without direct annotation for grpc-gateway in the .proto file. Only some steps require minor changes to use a gRPC API Configuration YAML file instead: 1. Define your service in gRPC as usual - your_service.proto: - ```protobuf - syntax = "proto3"; - package your.service.v1; - option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; - message StringMessage { - string value = 1; - } + your_service.proto: - service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} - } - ``` + ```protobuf + syntax = "proto3"; + package your.service.v1; + option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + message StringMessage { + string value = 1; + } + + service YourService { + rpc Echo(StringMessage) returns (StringMessage) {} + } + ``` 2. Instead of annotating the .proto file in this step leave it untouched and create a `your_service.yaml` with the following content: - ```yaml - type: google.api.Service - config_version: 3 - - http: - rules: - - selector: your.service.v1.YourService.Echo - post: /v1/example/echo - body: "*" - ``` - Use a [linter](http://www.yamllint.com/) to validate your YAML. + + ```yaml + type: google.api.Service + config_version: 3 + + http: + rules: + - selector: your.service.v1.YourService.Echo + post: /v1/example/echo + body: "*" + ``` + + Use a [linter](http://www.yamllint.com/) to validate your YAML. 3. Generate gRPC stub as before - ```sh - protoc -I . \ - --go_out ./gen/go/ \ - --go_opt paths=source_relative \ - --go-grpc_out ./gen/go/ \ - --go-grpc_opt paths=source_relative \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . \ + --go_out ./gen/go/ \ + --go_opt paths=source_relative \ + --go-grpc_out ./gen/go/ \ + --go-grpc_opt paths=source_relative \ + your/service/v1/your_service.proto + ``` - It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`. +It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`. 4. Implement your service in gRPC as usual 5. Generate the reverse-proxy. Here we have to pass the path to - the `your_service.yaml` in addition to the .proto file: + the `your_service.yaml` in addition to the .proto file: - ```sh - protoc -I . \ - --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - --grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . \ + --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \ + your/service/v1/your_service.proto + ``` This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. 6. Generate the optional your_service.swagger.json - ```sh - protoc -I . --openapiv2_out ./gen/go \ - --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ - your/service/v1/your_service.proto - ``` - - or using an OpenAPI configuration file - - ```sh - protoc -I . --openapiv2_out ./gen/go \ - --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ - --openapiv2_opt openapi_configuration=path/to/your_service_swagger.yaml \ - your/service/v1/your_service.proto - ``` - - For an example of an OpenAPI configuration file, see [unannotated_echo_service.swagger.yaml](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml), which adds OpenAPI options to [unannotated_echo_service.proto](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto). - - ```sh - protoc -I . --openapiv2_out ./gen/go \ - --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ - your/service/v1/your_service.proto - ``` - + ```sh + protoc -I . --openapiv2_out ./gen/go \ + --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ + your/service/v1/your_service.proto + ``` + + or using an OpenAPI configuration file + + ```sh + protoc -I . --openapiv2_out ./gen/go \ + --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ + --openapiv2_opt openapi_configuration=path/to/your_service_swagger.yaml \ + your/service/v1/your_service.proto + ``` + + For an example of an OpenAPI configuration file, see [unannotated_echo_service.swagger.yaml](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml), which adds OpenAPI options to [unannotated_echo_service.proto](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto). + + ```sh + protoc -I . --openapiv2_out ./gen/go \ + --openapiv2_opt grpc_api_configuration=path/to/your_service.yaml \ + your/service/v1/your_service.proto + ``` + All other steps work as before. If you want you can remove the googleapis include path in step 3 and 4 as the unannotated proto no longer requires them. diff --git a/docs/_docs/healthcheck.md b/docs/docs/healthcheck.md similarity index 94% rename from docs/_docs/healthcheck.md rename to docs/docs/healthcheck.md index 7dd54e9f60e..8dea546298f 100644 --- a/docs/_docs/healthcheck.md +++ b/docs/docs/healthcheck.md @@ -1,5 +1,7 @@ --- -category: documentation +layout: default +title: Health Check +nav_order: 9 --- # Health check @@ -23,7 +25,7 @@ func (s *serviceServer) Check(ctx context.Context, in *health.HealthCheckRequest } ``` -2. Watch method +2. Watch method ``` func (s *serviceServer) Watch(in *health.HealthCheckRequest, _ health.Health_WatchServer) error { diff --git a/docs/_docs/httpbody.md b/docs/docs/httpbody.md similarity index 96% rename from docs/_docs/httpbody.md rename to docs/docs/httpbody.md index 62ebf49179d..c948f185d1d 100644 --- a/docs/_docs/httpbody.md +++ b/docs/docs/httpbody.md @@ -1,5 +1,7 @@ --- -category: documentation +layout: default +title: HttpBody messages +nav_order: 10 --- # HttpBody messages diff --git a/docs/_docs/inject_router.md b/docs/docs/inject_router.md similarity index 97% rename from docs/_docs/inject_router.md rename to docs/docs/inject_router.md index a3420e92c3e..cc9532acd6c 100644 --- a/docs/_docs/inject_router.md +++ b/docs/docs/inject_router.md @@ -1,6 +1,7 @@ --- -category: documentation +layout: default title: Adding custom routes to the mux +nav_order: 11 --- # Adding custom routes to the mux @@ -15,7 +16,7 @@ package main import ( "context" "net/http" - + pb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) @@ -41,7 +42,7 @@ func main() { // GreeterServer is the server API for Greeter service. type GreeterServer struct { - + } // SayHello implement to say hello @@ -50,4 +51,4 @@ func (h *GreeterServer) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb Message: "hello " + req.Name, }, nil } -``` \ No newline at end of file +``` diff --git a/docs/docs/patch.md b/docs/docs/patch.md new file mode 100644 index 00000000000..7a880e60c1d --- /dev/null +++ b/docs/docs/patch.md @@ -0,0 +1,99 @@ +--- +layout: default +title: Patch Feature +nav_order: 12 +--- + +# Patch Feature + +The HTTP PATCH method allows a resource to be partially updated. + +If a binding is mapped to patch and the request message has exactly one +FieldMask message in it, additional code is rendered for the gateway +handler that will populate the FieldMask based on the request body. + +There are two scenarios: + +- The FieldMask is hidden from the REST request as per the + [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) + (as in the first additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) + example). + In this case, the FieldMask is updated from the request body and + set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second + additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) + example). + For this case, the field mask is left untouched by the gateway. + +## Example Usage + +1. Create PATCH request. + + The PATCH request needs to include the message and the update mask. + + ```protobuf + // UpdateV2Request request for update includes the message and the update mask + message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; + } + ``` + +2. Define your service in gRPC + + If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. + + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; + } + ``` + + If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. + + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; + } + ``` + +3. Generate gRPC and reverse-proxy stubs and implement your service. + +## Curl examples + +In the example below we will partially update our ABitOfEverything +resource by passing only the field we want to change. Since we are +using the endpoint with field mask hidden we only need to pass the +field we want to change ("string_value") and it will keep everything +else in our resource the same. + +```shell +$ curl \ + --data '{"string_value": "strprefix/foo"}' \ + -X PATCH \ + http://address:port/v2/example/a_bit_of_everything/1 +``` + +If we know what fields we want to update then we can use PATCH with +field mask approach. For this we need to pass the resource and the +update_mask. Below only the "single_nested" will get updated because +that is what we specify in the field_mask. + +```shell +$ curl \ + --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' \ + -X PATCH \ + http://address:port/v2a/example/a_bit_of_everything/1 +``` diff --git a/docs/_docs/season_of_docs.md b/docs/docs/season_of_docs.md similarity index 59% rename from docs/_docs/season_of_docs.md rename to docs/docs/season_of_docs.md index 4e8afcb9e90..6515d7a8078 100644 --- a/docs/_docs/season_of_docs.md +++ b/docs/docs/season_of_docs.md @@ -1,6 +1,7 @@ --- -category: documentation -name: 2020 Season of Docs +layout: default +title: 2020 Season of Docs +nav_order: 13 --- # 2020 Season of Docs @@ -12,18 +13,18 @@ We're excited to see what contributions this will bring to our documentation. ## Project details - - Organization name: **gRPC-Gateway** - - Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several - common use cases: - - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API - to old users. - - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - - When quickly iterating on a JSON/HTTP API design. - - Website: https://grpc-ecosystem.github.io/grpc-gateway - - Repo: https://github.com/grpc-ecosystem/grpc-gateway - - Project administrators and mentors: - - Johan Brandhorst (@johanbrandhorst) - - Andrew Z Allen (@achew22) +- Organization name: **gRPC-Gateway** +- Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several + common use cases: + - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. + - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. + - When quickly iterating on a JSON/HTTP API design. +- Website: https://grpc-ecosystem.github.io/grpc-gateway +- Repo: https://github.com/grpc-ecosystem/grpc-gateway +- Project administrators and mentors: + - Johan Brandhorst (@johanbrandhorst) + - Andrew Z Allen (@achew22) ## Project Ideas @@ -42,11 +43,12 @@ try to use the current material and note anything that was unclear and that they easily find with our existing docs. Material: - - [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) - - [Jekyll](https://jekyllrb.com/) which powers the site now. - - [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. - - [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which - contains an intro to the project. + +- [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) +- [Jekyll](https://jekyllrb.com/) which powers the site now. +- [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. +- [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which + contains an intro to the project. ### Rewrite the README with a better intro and examples @@ -54,25 +56,26 @@ The README has evolved since the start of the project and could do with a rewrit first principles. The README is the first thing our prospective users see, and it should quickly and concisely answer the most important questions for our users. - - What problems can the gRPC-Gateway solve? - - How do I use the gRPC-Gateway? - - What does a complete example look like? - - Where can I find more information about using it? - - Where can I learn more about the technologies the gRPC-Gateway is built on? - - How do I submit an issue report or get help? +- What problems can the gRPC-Gateway solve? +- How do I use the gRPC-Gateway? +- What does a complete example look like? +- Where can I find more information about using it? +- Where can I learn more about the technologies the gRPC-Gateway is built on? +- How do I submit an issue report or get help? Material: - - [The current README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md). + +- [The current README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md). ### Create a tutorial for the docs site We'd like to be able to point to a tutorial for one of the common use cases of the project. The ones mentioned in the project details are the primary use cases we advertise: - - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API - to old users. - - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - - When quickly iterating on an JSON/HTTP API design. +- When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. +- When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. +- When quickly iterating on an JSON/HTTP API design. It could be a single or several blog posts on our docs site, or another site, like Medium. @@ -84,7 +87,8 @@ to have a look over this and add detail where possible and generally structure i a bit better. Maybe it could be rewritten as a FAQ that details solutions to common issues? Material: - - [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) + +- [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) ### Improve the contributor's guide @@ -94,8 +98,9 @@ and the [issue templates](https://github.com/grpc-ecosystem/grpc-gateway/tree/ma Both of these are a little ad-hoc and could do with a fresh pair of eyes. Material: - - [Current CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md) - - [Current issue templates](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/.github/ISSUE_TEMPLATE) + +- [Current CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md) +- [Current issue templates](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/.github/ISSUE_TEMPLATE) ### Write a v2.0.0 migration guide @@ -104,11 +109,12 @@ We need to write a migration guide so that users know what to expect when upgrad This should include: - - A list of all the breaking changes and their consequences for the user. - - For each breaking change, a guide to how their systems may need to be changed. +- A list of all the breaking changes and their consequences for the user. +- For each breaking change, a guide to how their systems may need to be changed. Currently, the scope of the v2 release is not entirely known, as it is still in progress, but we will endeavour not to make too many breaking changes as that will discourage users from upgrading. Material: - - [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) + +- [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) diff --git a/docs/_docs/tracing.md b/docs/docs/tracing.md similarity index 98% rename from docs/_docs/tracing.md rename to docs/docs/tracing.md index b6a641c20ed..58183065dac 100644 --- a/docs/_docs/tracing.md +++ b/docs/docs/tracing.md @@ -1,5 +1,7 @@ --- -category: documentation +layout: default +title: Tracing +nav_order: 14 --- # Tracing @@ -8,7 +10,7 @@ category: documentation #### Adding tracing using AWS-Xray as the exporter -This example uses the AWS-Xray exporter with a global trace setting. Note that AWS X-ray exporter does not handle any metrics only tracing. +This example uses the AWS-Xray exporter with a global trace setting. Note that AWS X-ray exporter does not handle any metrics only tracing. 1. Add the following imports @@ -57,6 +59,7 @@ conn, err := grpc.DialContext( ``` 5. Wrap the gateway mux with the OpenCensus HTTP handler + ```go gwmux := runtime.NewServeMux() @@ -97,8 +100,8 @@ openCensusHandler := &ochttp.Handler{ 4. No global configuration means we have to use the [per span sampler](https://opencensus.io/tracing/sampling/#per-span-sampler) - ##### A method we want to trace + ```go func (s *service) Name(ctx context.Context, req *pb.Request) (*pb.Response, error) { // Here we add the span ourselves. @@ -111,6 +114,7 @@ func (s *service) Name(ctx context.Context, req *pb.Request) (*pb.Response, erro ``` ##### A method we do not wish to trace + ```go func (s *service) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) { // Note no span here. @@ -174,4 +178,4 @@ opts := []grpc.DialOption{ if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opts); err != nil { log.Fatalf("could not register HTTP service: %v", err) } -``` \ No newline at end of file +``` diff --git a/docs/_docs/usage.md b/docs/docs/usage.md similarity index 66% rename from docs/_docs/usage.md rename to docs/docs/usage.md index 949daf88d87..4d63ed62016 100644 --- a/docs/_docs/usage.md +++ b/docs/docs/usage.md @@ -1,5 +1,7 @@ --- -category: documentation +layout: default +title: How do I use this? +nav_order: 15 --- # How do I use this? diff --git a/docs/_docs/usegotemplates.md b/docs/docs/usegotemplates.md similarity index 83% rename from docs/_docs/usegotemplates.md rename to docs/docs/usegotemplates.md index 2ed630201be..009f082a2af 100644 --- a/docs/_docs/usegotemplates.md +++ b/docs/docs/usegotemplates.md @@ -1,16 +1,20 @@ --- -category: documentation -name: Use go templates in protofile comments +layout: default +title: Use go templates in protofile comments +nav_order: 16 --- +{% raw %} + # Use go templates in protofile comments Use [Go templates](https://golang.org/pkg/text/template/) in your protofile comments to allow more advanced documentation such -as: -* Documentation about fields in the proto objects. -* Import the content of external files (such as - [Markdown](https://en.wikipedia.org/wiki/Markdown)). +as: + +- Documentation about fields in the proto objects. +- Import the content of external files (such as + [Markdown](https://en.wikipedia.org/wiki/Markdown)). ## How to use it @@ -38,16 +42,17 @@ $ protoc -I. \ --openapiv2_out . \ --openapiv2_opt logtostderr=true \ --openapiv2_opt use_go_templates=true \ - path/to/my/proto/v1/myproto.proto + path/to/my/proto/v1/myproto.proto ``` ### Example proto file Example of a protofile with Go templates. This proto file imports documentation from another file, `tables.md`: + ```protobuf service LoginService { // Login - // + // // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". // @@ -61,7 +66,7 @@ service LoginService { } message LoginRequest { - // The entered username + // The entered username string username = 1; // The entered password string password = 2; @@ -93,13 +98,15 @@ The content of `tables.md`: This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) -![Screenshot OpenAPI file in SwaggerUI](https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/docs/_imgs/gotemplates/swaggerui.png) +![Screenshot OpenAPI file in SwaggerUI](../assets/images/gotemplates/swaggerui.png) ### Postman This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) -![Screenshot OpenAPI file in Postman](https://raw.githubusercontent.com/grpc-ecosystem/grpc-gateway/master/docs/_imgs/gotemplates/postman.png) +![Screenshot OpenAPI file in Postman](../assets/images/gotemplates/postman.png) For a more detailed example of a protofile that has Go templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). + +{% endraw %} diff --git a/docs/_docs/v2-migration.md b/docs/docs/v2-migration.md similarity index 98% rename from docs/_docs/v2-migration.md rename to docs/docs/v2-migration.md index 35d72e2498f..22e704c91c0 100644 --- a/docs/_docs/v2-migration.md +++ b/docs/docs/v2-migration.md @@ -1,6 +1,7 @@ --- -title: v2 migration guide -category: documentation +layout: default +title: gRPC-Gateway v2 migration guide +nav_order: 17 --- # gRPC-Gateway v2 migration guide @@ -21,15 +22,21 @@ difference to users will be a slightly different proto annotation: ```protobuf import "protoc-gen-openapiv2/options/annotations.proto"; ``` + instead of + ```protobuf import "protoc-gen-swagger/options/annotations.proto"; ``` + and + ```protobuf option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { ``` + instead of + ```protobuf option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { ``` @@ -58,6 +65,7 @@ example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}" See `a_bit_of_everything.proto` in the example protos for more examples. ## We now use the camelCase JSON names by default + See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) and @@ -66,6 +74,7 @@ for more information. If you want to revert to the old behaviour, configure a custom marshaler with `UseProtoNames: true`: + ```go mux := runtime.NewServeMux( runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{ @@ -97,6 +106,7 @@ for more information. If you want to revert to the old behaviour, configure a custom marshaler with `EmitUnpopulated: false`: + ```go mux := runtime.NewServeMux( runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.HTTPBodyMarshaler{ @@ -169,5 +179,5 @@ services. `runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the use of gRPCs Status types. If you wish to configure how the gateway handles errors, please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. -To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use +To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use `runtime.WithRoutingErrorHandler`. diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d52f5093085d6fc008a43165b9a32c6988fb71db GIT binary patch literal 15406 zcmeHNS#wlH6uy@J0DSO0PZlqX;DV^Apa>`~sHLdjQfgVafm@XeqKNu{7M5C27A0^&Fs?JMH|EVVxJ)oM-e4Gu4Z}!CF#pfL(J+4Jx`hkF-)}aIf}0FuKDXg6+{3Kr z!t$5Ae*x*|TIj$=#d+^hcG?q^?O02Wqf042>s89jc#%>L+#)*8bv;i7IU6nYjrzLk zzp10`6rDf&BjsnmM$HX&YWAj*{m|{)$3~s)#quBHmlk{$8Rx|Dr|IH_KdAilw-jhU zE&Y9s4mwltDfzr*=78qFe~AP3gNx)`zZ5u24Hplx&vK8Pt*yLoQW_31KdUn#p_y~DxkI?8y7d6!fCNBWIUnJWCWwa(A`x*{e2DMYlK1*lg!iGrHYzLHO2?1gM%E4R3*GxIEh(<@d#cxu2Qe{TUDr&4dMve7Jf)_p> ze61dq6D_~1(<5_e3j2weKPyB0Iry6JBctWR$E~l~C*xurCniS4pHp&G2_FyN&<6Ta z@`0zOa&Kh*mjWJH8?0%Ody~u`@_k+h_4U?q-xf+ebcg64^N*H~u`ox>RmoK)d`ajA zI%UObfruCuqp*f&AFk22x z7Z;c-^@x*jh}L+89~~#r`)9WMN4M9U(Hzhm&>YYl&>YYl&>Wb%97yH+0ElxV7mm9C zh{GyAI1`tXJN*UDv9F2LIgZ{fb=i(5B~FMEZB)Ed^^GnaNABX>`v#FAvEJ|ot=rx_>M%rv~lwN z04of*H-LB~;;dt%y)@Y0#BtFtE!$f4pRNw^O2m~p5YFRvbG+P3^4P;e!J{3Xb)2taK~KkC)5648*b#SGU5SX0Pdhl?|10N{7RNmY+&KX^@PNa>i+wQ3x(Tq3t?*ZrelP2V z924>dGvS9`M>rQXJme3@m~CNB`Z>3e$TDoQcY@5TvC$sBr}O&k@H6i*c6QoY6Tfqv ztZks<^kw*=n*iVW86O{_(!wnwJ0ASVr6ISHkz&Tkk?XMY+>xJvjxa8G(AQJTZB|Pi z>a8AdEInl~Z7?F}}i&{DnJX zJ^x=3!vW}jD*m)1OClJ6Ba>tQLxZiH8>^B2R=81zd}dQa3eUA!<_q2+p9KA%%zT+T z{002pA^ez%f1LLma(LkFAmh(*J{yCdJBg0L_3o}pf{lV5z8t?zax%zKLg(rUv5lAs zKXijOXp4SU_|@mC_5kv+3cunH_K~tL z7tjAjY0TGH{0q1)mOmnsIX#p8#NNOjfsV0f#Qsd#zp(GPTL-;G)<@@n_`UW z%01Etb>crvjIh7K{sY^*nefi^9rKCDe}nIZ2Q~|~)y?-{v4+ZjQ{Q1@k z>=f>#;+yzyY-@10btY`_e!r6c> +{% for contributor in site.github.contributors %} +
  • + {{ contributor.login }} +
  • +{% endfor %} + From a77077ed14675db83797785dead8e319b2319e95 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 3 Nov 2020 17:15:24 +0000 Subject: [PATCH 0715/1518] Update google.golang.org/genproto commit hash to 415bd0c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4298d9e2cd4..a2e7c4ecd6b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 - google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0 + google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 google.golang.org/grpc v1.33.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 8e66d144f12..a53416d3177 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0 h1:d0rYPqjQfVuFe+tZgv4PHt2hNxK79MRXX7PaD/A5ynA= -google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 h1:rMoZiLTOobSD3eg30lPMcFkBFNSyKUQQIQlw/hsAXME= +google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 05a7e2c4014..afbfa25b604 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:d0rYPqjQfVuFe+tZgv4PHt2hNxK79MRXX7PaD/A5ynA=", - version = "v0.0.0-20201102152239-715cce707fb0", + sum = "h1:rMoZiLTOobSD3eg30lPMcFkBFNSyKUQQIQlw/hsAXME=", + version = "v0.0.0-20201103154000-415bd0cd5df6", ) go_repository( name = "org_golang_google_grpc", From d6db09e11a2c6e08a9aea753f18a6aa4218f8818 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Nov 2020 16:14:21 +0000 Subject: [PATCH 0716/1518] Update google.golang.org/genproto commit hash to 2e45c02 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a2e7c4ecd6b..ae0725db7d0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 - google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 + google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c google.golang.org/grpc v1.33.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index a53416d3177..bfd37460fb3 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6 h1:rMoZiLTOobSD3eg30lPMcFkBFNSyKUQQIQlw/hsAXME= -google.golang.org/genproto v0.0.0-20201103154000-415bd0cd5df6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c h1:ahjoEe3C676yt02IE7UtXiitMY2+aTBrJbFF2BIsGmw= +google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index afbfa25b604..7e4878f443c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:rMoZiLTOobSD3eg30lPMcFkBFNSyKUQQIQlw/hsAXME=", - version = "v0.0.0-20201103154000-415bd0cd5df6", + sum = "h1:ahjoEe3C676yt02IE7UtXiitMY2+aTBrJbFF2BIsGmw=", + version = "v0.0.0-20201104152603-2e45c02ce95c", ) go_repository( name = "org_golang_google_grpc", From 5c12567dde08a13c76918051a58557f22ae6dad0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 Nov 2020 15:46:11 +0000 Subject: [PATCH 0717/1518] Update google.golang.org/genproto commit hash to 9d023cd --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ae0725db7d0..3fbd63b4e2b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 - google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c + google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72 google.golang.org/grpc v1.33.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index bfd37460fb3..37f9cbafd8d 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c h1:ahjoEe3C676yt02IE7UtXiitMY2+aTBrJbFF2BIsGmw= -google.golang.org/genproto v0.0.0-20201104152603-2e45c02ce95c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72 h1:y5Oh0goCgfBLNYTXMIwrAWyOECSQLVdZ51A14It40OI= +google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7e4878f443c..15a5e326c9a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ahjoEe3C676yt02IE7UtXiitMY2+aTBrJbFF2BIsGmw=", - version = "v0.0.0-20201104152603-2e45c02ce95c", + sum = "h1:y5Oh0goCgfBLNYTXMIwrAWyOECSQLVdZ51A14It40OI=", + version = "v0.0.0-20201105153401-9d023cd09d72", ) go_repository( name = "org_golang_google_grpc", From 3408ed963478516f09ef5287479762f948c14c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Thu, 5 Nov 2020 17:44:20 +0100 Subject: [PATCH 0718/1518] generate_unbound_methods expose in the rule (#1793) --- protoc-gen-openapiv2/defs.bzl | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index e56660b988c..6441472055c 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -54,7 +54,8 @@ def _run_proto_gen_openapi( grpc_api_configuration, single_output, json_names_for_fields, - fqn_for_openapi_name): + fqn_for_openapi_name, + generate_unbound_methods): args = actions.args() args.add("--plugin", "protoc-gen-openapiv2=%s" % protoc_gen_openapiv2.path) @@ -73,6 +74,9 @@ def _run_proto_gen_openapi( if fqn_for_openapi_name: args.add("--openapi_opt", "fqn_for_openapi_name=true") + if generate_unbound_methods: + args.add("--openapiv2_opt", "generate_unbound_methods=true") + proto_file_infos = _direct_source_infos(proto_info) # TODO(yannic): Use |proto_info.transitive_descriptor_sets| when @@ -158,6 +162,7 @@ def _proto_gen_openapi_impl(ctx): single_output = ctx.attr.single_output, json_names_for_fields = ctx.attr.json_names_for_fields, fqn_for_openapi_name = ctx.attr.fqn_for_openapi_name, + generate_unbound_methods = ctx.attr.generate_unbound_methods, ), ), ), @@ -185,6 +190,10 @@ protoc_gen_openapiv2 = rule( default = False, mandatory = False, ), + "generate_unbound_methods": attr.bool( + default = False, + mandatory = False, + ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, From 044568f4457b4264493dd7279a757aee93ddba20 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Thu, 5 Nov 2020 10:35:38 -0700 Subject: [PATCH 0719/1518] Fix typo in flag name for Bazel (#1795) Co-authored-by: Johan Brandhorst-Satzkorn --- protoc-gen-openapiv2/defs.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 6441472055c..638171647ab 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -72,7 +72,7 @@ def _run_proto_gen_openapi( args.add("--openapiv2_opt", "json_names_for_fields=false") if fqn_for_openapi_name: - args.add("--openapi_opt", "fqn_for_openapi_name=true") + args.add("--openapiv2_opt", "fqn_for_openapi_name=true") if generate_unbound_methods: args.add("--openapiv2_opt", "generate_unbound_methods=true") From b0cc6574afb85b62ba66e75cc0ce95ad7ef2941e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 6 Nov 2020 16:44:15 +0000 Subject: [PATCH 0720/1518] Update google.golang.org/genproto commit hash to f9bfe23 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3fbd63b4e2b..776526e29fd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 - google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72 + google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba google.golang.org/grpc v1.33.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 37f9cbafd8d..c985f1b9164 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72 h1:y5Oh0goCgfBLNYTXMIwrAWyOECSQLVdZ51A14It40OI= -google.golang.org/genproto v0.0.0-20201105153401-9d023cd09d72/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba h1:HocWKLuilwaaLY56cHV38rw84wJ1nscA0Rs7OnO8mm8= +google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 15a5e326c9a..9ce6963ea8d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:y5Oh0goCgfBLNYTXMIwrAWyOECSQLVdZ51A14It40OI=", - version = "v0.0.0-20201105153401-9d023cd09d72", + sum = "h1:HocWKLuilwaaLY56cHV38rw84wJ1nscA0Rs7OnO8mm8=", + version = "v0.0.0-20201106154455-f9bfe239b0ba", ) go_repository( name = "org_golang_google_grpc", From ee9ae32556b073e9898cd677e1866d09b44ecf25 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 6 Nov 2020 19:10:54 +0000 Subject: [PATCH 0721/1518] Update golang Docker tag to v1.15.4 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 0c649ac9ddf..91faf333010 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.3 +FROM golang:1.15.4 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From ce5c70e86a2d284727d9691cbf03f330865aec39 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 6 Nov 2020 19:11:18 +0000 Subject: [PATCH 0722/1518] Update module google.golang.org/grpc to v1.33.2 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 776526e29fd..ea87c3b2557 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba - google.golang.org/grpc v1.33.1 + google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index c985f1b9164..dbe374eba55 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1 h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 9ce6963ea8d..637980ba989 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -365,8 +365,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc=", - version = "v1.33.1", + sum = "h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=", + version = "v1.33.2", ) go_repository( From 19d6674bb11b368fa6248bf7adf56d9ba69cc247 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 7 Nov 2020 12:04:00 +0000 Subject: [PATCH 0723/1518] Disable gRPC updates on v1 (#1802) The grpc-go project has switched to using google.golang.org/protobuf as their generator base, which means depending on v1.4.x of golang/protobuf, which we can't support. --- renovate.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index b2051cbbcba..b731f05d871 100644 --- a/renovate.json +++ b/renovate.json @@ -27,7 +27,8 @@ "github.com/golang/protobuf", "google.golang.org/genproto", "io_bazel_rules_go", - "golang.org/x/oauth2" + "golang.org/x/oauth2", + "google.golang.org/grpc" ], "enabled": false }, From 8a9769f98c11512b1b4aae1592dcf7c37b17c7b8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 9 Nov 2020 20:46:13 +0000 Subject: [PATCH 0724/1518] Update golang.org/x/oauth2 commit hash to 9fd6049 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ea87c3b2557..5742472cbbc 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 + golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index dbe374eba55..dbb87a307f3 100644 --- a/go.sum +++ b/go.sum @@ -204,8 +204,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 637980ba989..a0d3a56a58c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:ld7aEMNHoBnnDAX15v1T6z31v8HwR2A9FYOuAhWqkwc=", - version = "v0.0.0-20200902213428-5d25da1a8d43", + sum = "h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo=", + version = "v0.0.0-20201109201403-9fd604954f58", ) go_repository( name = "org_golang_x_sync", From 0c8514ccae09178c3ca4c38e91f4c34a2f43be57 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 9 Nov 2020 22:56:06 +0000 Subject: [PATCH 0725/1518] Update google.golang.org/genproto commit hash to 2640f1f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5742472cbbc..7228f095de7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba + google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index dbb87a307f3..0ca925bf8e1 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba h1:HocWKLuilwaaLY56cHV38rw84wJ1nscA0Rs7OnO8mm8= -google.golang.org/genproto v0.0.0-20201106154455-f9bfe239b0ba/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb h1:MoNcrN5yaH+35Ge8RUwFbL7ekwq9ED2fiDpgWKrR29w= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a0d3a56a58c..1f75bdb03ef 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:HocWKLuilwaaLY56cHV38rw84wJ1nscA0Rs7OnO8mm8=", - version = "v0.0.0-20201106154455-f9bfe239b0ba", + sum = "h1:MoNcrN5yaH+35Ge8RUwFbL7ekwq9ED2fiDpgWKrR29w=", + version = "v0.0.0-20201109203340-2640f1f9cdfb", ) go_repository( name = "org_golang_google_grpc", From 2d3186a5de4536dac68d4867f44d9633179c0b7d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 10 Nov 2020 16:17:28 +0000 Subject: [PATCH 0726/1518] Update google.golang.org/genproto commit hash to 8816d57 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7228f095de7..0d9bee6a37e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb + google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 0ca925bf8e1..09d2752f9db 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb h1:MoNcrN5yaH+35Ge8RUwFbL7ekwq9ED2fiDpgWKrR29w= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= +google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1f75bdb03ef..7667220866f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:MoNcrN5yaH+35Ge8RUwFbL7ekwq9ED2fiDpgWKrR29w=", - version = "v0.0.0-20201109203340-2640f1f9cdfb", + sum = "h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8=", + version = "v0.0.0-20201110150050-8816d57aaa9a", ) go_repository( name = "org_golang_google_grpc", From 86eb5eb18b19bfe5fd95d6afebad0710534aa28a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 11 Nov 2020 15:39:02 +0000 Subject: [PATCH 0727/1518] Update google.golang.org/genproto commit hash to ac7456d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0d9bee6a37e..63cc2a60695 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a + google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6 google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 09d2752f9db..038fc1e4478 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6 h1:iRN4+t0lvZX/l9gH14ARF9i58tsVa5a97k6aH95rC3Y= +google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7667220866f..a28745522a4 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8=", - version = "v0.0.0-20201110150050-8816d57aaa9a", + sum = "h1:iRN4+t0lvZX/l9gH14ARF9i58tsVa5a97k6aH95rC3Y=", + version = "v0.0.0-20201111145450-ac7456db90a6", ) go_repository( name = "org_golang_google_grpc", From 49347f4d12e829ff18d688bdb2b367adb903a939 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Nov 2020 12:09:10 +0000 Subject: [PATCH 0728/1518] Update google.golang.org/genproto commit hash to 2985b7a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 63cc2a60695..5f53b11b584 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6 + google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 038fc1e4478..3295187ff5a 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6 h1:iRN4+t0lvZX/l9gH14ARF9i58tsVa5a97k6aH95rC3Y= -google.golang.org/genproto v0.0.0-20201111145450-ac7456db90a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de h1:CX+Qqbzx3Yphy3fo9WOQIac7DqeBhqCWeSqSuH8ddL0= +google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a28745522a4..d57412a4eba 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iRN4+t0lvZX/l9gH14ARF9i58tsVa5a97k6aH95rC3Y=", - version = "v0.0.0-20201111145450-ac7456db90a6", + sum = "h1:CX+Qqbzx3Yphy3fo9WOQIac7DqeBhqCWeSqSuH8ddL0=", + version = "v0.0.0-20201112120144-2985b7af83de", ) go_repository( name = "org_golang_google_grpc", From 8fc9a8bcea728fcb91a2f083a082f886035be2b6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Nov 2020 20:34:54 +0000 Subject: [PATCH 0729/1518] Update module google/go-cmp to v0.5.3 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5f53b11b584..8ae7b04c3cb 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.2 + github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de diff --git a/go.sum b/go.sum index 3295187ff5a..ac131d6b480 100644 --- a/go.sum +++ b/go.sum @@ -93,8 +93,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/repositories.bzl b/repositories.bzl index d57412a4eba..4b0de05dee6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -137,8 +137,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=", - version = "v0.5.2", + sum = "h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=", + version = "v0.5.3", ) go_repository( From 08f922ae656d7361981af20309297135b8580cbc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Nov 2020 23:14:08 +0000 Subject: [PATCH 0730/1518] Update golang Docker tag to v1.15.5 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 91faf333010..5d8871f2acc 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.4 +FROM golang:1.15.5 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From 07adad476f95c9aba982d4d9839b069b48c1c452 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 13 Nov 2020 10:36:26 +0000 Subject: [PATCH 0731/1518] Add ci linter (#1817) * Replace staticcheck with golangci-lint action About time we checked for more things than just staticcheck (like formatting). * Fix lint errors --- .circleci/config.yml | 31 +- .github/workflows/golangci-lint.yml | 19 ++ .../descriptor/grpc_api_configuration_test.go | 298 +++++++++--------- .../descriptor/openapi_configuration_test.go | 228 +++++++------- internal/httprule/parse_test.go | 10 +- .../internal/gengateway/generator.go | 5 +- .../internal/genopenapi/generator.go | 2 +- .../internal/genopenapi/template_test.go | 56 +++- runtime/context.go | 1 + runtime/pattern.go | 1 - 10 files changed, 345 insertions(+), 306 deletions(-) create mode 100644 .github/workflows/golangci-lint.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 3702a2160f8..1f764bbaeab 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,10 +36,10 @@ commands: executors: build-env: environment: - ## Split key to avoid github revoking it - password0: '99544cdcb19ad4e3fd64' - password1: '3ec86b2e5a431be2d72c' - GLOG_logtostderr: '1' + ## Split key to avoid github revoking it + password0: "99544cdcb19ad4e3fd64" + password1: "3ec86b2e5a431be2d72c" + GLOG_logtostderr: "1" docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.15 auth: @@ -79,27 +79,6 @@ jobs: - checkout - generate - run: git diff --exit-code - lint: - executor: build-env - working_directory: /src/grpc-gateway - steps: - - checkout - - restore_cache: - keys: - - v1-staticcheck-cache-{{ checksum "go.sum" }} - - v1-staticcheck-cache- - - run: - name: Install staticcheck outside local module - command: | - cd $(mktemp -d) && - go mod init tmp && - go get honnef.co/go/tools/cmd/staticcheck - - run: staticcheck ./... - - save_cache: - key: v1-staticcheck-cache-{{ checksum "go.sum" }} - paths: - - /root/.cache/go-build - - /root/.cache/staticcheck fuzzit: docker: - image: fuzzitdev/fuzzit:golang1.12-stretch-llvm9 @@ -190,7 +169,6 @@ workflows: - fuzzit - node_test - generate - - lint - bazel - gorelease - release: @@ -215,4 +193,3 @@ workflows: only: /renovate\/master-.+/ tags: ignore: /.*/ - diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 00000000000..908efb58188 --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,19 @@ +name: golangci-lint +on: + push: + tags: + - v* + branches: + - master + pull_request: +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: golangci-lint + uses: golangci/golangci-lint-action@v2 + with: + version: v1.32 + args: --enable goimports diff --git a/internal/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go index e6ac3d10aa3..09cf0a80c53 100644 --- a/internal/descriptor/grpc_api_configuration_test.go +++ b/internal/descriptor/grpc_api_configuration_test.go @@ -1,149 +1,149 @@ -package descriptor - -import ( - "strings" - "testing" -) - -func TestLoadGrpcAPIServiceFromYAMLInvalidType(t *testing.T) { - // Ideally this would fail but for now this test documents that it doesn't - service, err := loadGrpcAPIServiceFromYAML([]byte(`type: not.the.right.type`), "invalidtype") - if err != nil { - t.Fatal(err) - } - - if service == nil { - t.Fatal("No service returned") - } -} - -func TestLoadGrpcAPIServiceFromYAMLSingleRule(t *testing.T) { - service, err := loadGrpcAPIServiceFromYAML([]byte(` -type: google.api.Service -config_version: 3 - -http: - rules: - - selector: grpctest.YourService.Echo - post: /v1/myecho - body: "*" -`), "example") - if err != nil { - t.Fatal(err) - } - - if service.Http == nil { - t.Fatal("HTTP is empty") - } - - if len(service.Http.GetRules()) != 1 { - t.Fatalf("Have %v rules instead of one. Got: %v", len(service.Http.GetRules()), service.Http.GetRules()) - } - - rule := service.Http.GetRules()[0] - if rule.GetSelector() != "grpctest.YourService.Echo" { - t.Errorf("Rule has unexpected selector '%v'", rule.GetSelector()) - } - if rule.GetPost() != "/v1/myecho" { - t.Errorf("Rule has unexpected post '%v'", rule.GetPost()) - } - if rule.GetBody() != "*" { - t.Errorf("Rule has unexpected body '%v'", rule.GetBody()) - } -} - -func TestLoadGrpcAPIServiceFromYAMLRejectInvalidYAML(t *testing.T) { - service, err := loadGrpcAPIServiceFromYAML([]byte(` -type: google.api.Service -config_version: 3 - -http: - rules: - - selector: grpctest.YourService.Echo - - post: thislinebreakstheselectorblockabovewiththeleadingdash - body: "*" -`), "invalidyaml") - if err == nil { - t.Fatal(err) - } - - if !strings.Contains(err.Error(), "line 7") { - t.Errorf("Expected yaml error to be detected in line 7. Got other error: %v", err) - } - - if service != nil { - t.Fatal("Service returned") - } -} - -func TestLoadGrpcAPIServiceFromYAMLMultipleWithAdditionalBindings(t *testing.T) { - service, err := loadGrpcAPIServiceFromYAML([]byte(` -type: google.api.Service -config_version: 3 - -http: - rules: - - selector: first.selector - post: /my/post/path - body: "*" - additional_bindings: - - post: /additional/post/path - - put: /additional/put/{value}/path - - delete: "{value}" - - patch: "/additional/patch/{value}" - - selector: some.other.service - delete: foo -`), "example") - if err != nil { - t.Fatalf("Failed to load service description from YAML: %v", err) - } - - if service == nil { - t.Fatal("No service returned") - } - - if service.Http == nil { - t.Fatal("HTTP is empty") - } - - if len(service.Http.GetRules()) != 2 { - t.Fatalf("%v service(s) returned when two were expected. Got: %v", len(service.Http.GetRules()), service.Http) - } - - first := service.Http.GetRules()[0] - if first.GetSelector() != "first.selector" { - t.Errorf("first.selector has unexpected selector '%v'", first.GetSelector()) - } - if first.GetBody() != "*" { - t.Errorf("first.selector has unexpected body '%v'", first.GetBody()) - } - if first.GetPost() != "/my/post/path" { - t.Errorf("first.selector has unexpected post '%v'", first.GetPost()) - } - if len(first.GetAdditionalBindings()) != 4 { - t.Fatalf("first.selector has unexpected number of bindings %v instead of four. Got: %v", len(first.GetAdditionalBindings()), first.GetAdditionalBindings()) - } - if first.GetAdditionalBindings()[0].GetPost() != "/additional/post/path" { - t.Errorf("first.selector additional binding 0 has unexpected post '%v'", first.GetAdditionalBindings()[0].GetPost()) - } - if first.GetAdditionalBindings()[1].GetPut() != "/additional/put/{value}/path" { - t.Errorf("first.selector additional binding 1 has unexpected put '%v'", first.GetAdditionalBindings()[0].GetPost()) - } - if first.GetAdditionalBindings()[2].GetDelete() != "{value}" { - t.Errorf("first.selector additional binding 2 has unexpected delete '%v'", first.GetAdditionalBindings()[0].GetPost()) - } - if first.GetAdditionalBindings()[3].GetPatch() != "/additional/patch/{value}" { - t.Errorf("first.selector additional binding 3 has unexpected patch '%v'", first.GetAdditionalBindings()[0].GetPost()) - } - - second := service.Http.GetRules()[1] - if second.GetSelector() != "some.other.service" { - t.Errorf("some.other.service has unexpected selector '%v'", second.GetSelector()) - } - if second.GetDelete() != "foo" { - t.Errorf("some.other.service has unexpected delete '%v'", second.GetDelete()) - } - if len(second.GetAdditionalBindings()) != 0 { - t.Errorf("some.other.service has %v additional bindings when it should not have any. Got: %v", len(second.GetAdditionalBindings()), second.GetAdditionalBindings()) - } -} +package descriptor + +import ( + "strings" + "testing" +) + +func TestLoadGrpcAPIServiceFromYAMLInvalidType(t *testing.T) { + // Ideally this would fail but for now this test documents that it doesn't + service, err := loadGrpcAPIServiceFromYAML([]byte(`type: not.the.right.type`), "invalidtype") + if err != nil { + t.Fatal(err) + } + + if service == nil { + t.Fatal("No service returned") + } +} + +func TestLoadGrpcAPIServiceFromYAMLSingleRule(t *testing.T) { + service, err := loadGrpcAPIServiceFromYAML([]byte(` +type: google.api.Service +config_version: 3 + +http: + rules: + - selector: grpctest.YourService.Echo + post: /v1/myecho + body: "*" +`), "example") + if err != nil { + t.Fatal(err) + } + + if service.Http == nil { + t.Fatal("HTTP is empty") + } + + if len(service.Http.GetRules()) != 1 { + t.Fatalf("Have %v rules instead of one. Got: %v", len(service.Http.GetRules()), service.Http.GetRules()) + } + + rule := service.Http.GetRules()[0] + if rule.GetSelector() != "grpctest.YourService.Echo" { + t.Errorf("Rule has unexpected selector '%v'", rule.GetSelector()) + } + if rule.GetPost() != "/v1/myecho" { + t.Errorf("Rule has unexpected post '%v'", rule.GetPost()) + } + if rule.GetBody() != "*" { + t.Errorf("Rule has unexpected body '%v'", rule.GetBody()) + } +} + +func TestLoadGrpcAPIServiceFromYAMLRejectInvalidYAML(t *testing.T) { + service, err := loadGrpcAPIServiceFromYAML([]byte(` +type: google.api.Service +config_version: 3 + +http: + rules: + - selector: grpctest.YourService.Echo + - post: thislinebreakstheselectorblockabovewiththeleadingdash + body: "*" +`), "invalidyaml") + if err == nil { + t.Fatal(err) + } + + if !strings.Contains(err.Error(), "line 7") { + t.Errorf("Expected yaml error to be detected in line 7. Got other error: %v", err) + } + + if service != nil { + t.Fatal("Service returned") + } +} + +func TestLoadGrpcAPIServiceFromYAMLMultipleWithAdditionalBindings(t *testing.T) { + service, err := loadGrpcAPIServiceFromYAML([]byte(` +type: google.api.Service +config_version: 3 + +http: + rules: + - selector: first.selector + post: /my/post/path + body: "*" + additional_bindings: + - post: /additional/post/path + - put: /additional/put/{value}/path + - delete: "{value}" + - patch: "/additional/patch/{value}" + - selector: some.other.service + delete: foo +`), "example") + if err != nil { + t.Fatalf("Failed to load service description from YAML: %v", err) + } + + if service == nil { + t.Fatal("No service returned") + } + + if service.Http == nil { + t.Fatal("HTTP is empty") + } + + if len(service.Http.GetRules()) != 2 { + t.Fatalf("%v service(s) returned when two were expected. Got: %v", len(service.Http.GetRules()), service.Http) + } + + first := service.Http.GetRules()[0] + if first.GetSelector() != "first.selector" { + t.Errorf("first.selector has unexpected selector '%v'", first.GetSelector()) + } + if first.GetBody() != "*" { + t.Errorf("first.selector has unexpected body '%v'", first.GetBody()) + } + if first.GetPost() != "/my/post/path" { + t.Errorf("first.selector has unexpected post '%v'", first.GetPost()) + } + if len(first.GetAdditionalBindings()) != 4 { + t.Fatalf("first.selector has unexpected number of bindings %v instead of four. Got: %v", len(first.GetAdditionalBindings()), first.GetAdditionalBindings()) + } + if first.GetAdditionalBindings()[0].GetPost() != "/additional/post/path" { + t.Errorf("first.selector additional binding 0 has unexpected post '%v'", first.GetAdditionalBindings()[0].GetPost()) + } + if first.GetAdditionalBindings()[1].GetPut() != "/additional/put/{value}/path" { + t.Errorf("first.selector additional binding 1 has unexpected put '%v'", first.GetAdditionalBindings()[0].GetPost()) + } + if first.GetAdditionalBindings()[2].GetDelete() != "{value}" { + t.Errorf("first.selector additional binding 2 has unexpected delete '%v'", first.GetAdditionalBindings()[0].GetPost()) + } + if first.GetAdditionalBindings()[3].GetPatch() != "/additional/patch/{value}" { + t.Errorf("first.selector additional binding 3 has unexpected patch '%v'", first.GetAdditionalBindings()[0].GetPost()) + } + + second := service.Http.GetRules()[1] + if second.GetSelector() != "some.other.service" { + t.Errorf("some.other.service has unexpected selector '%v'", second.GetSelector()) + } + if second.GetDelete() != "foo" { + t.Errorf("some.other.service has unexpected delete '%v'", second.GetDelete()) + } + if len(second.GetAdditionalBindings()) != 0 { + t.Errorf("some.other.service has %v additional bindings when it should not have any. Got: %v", len(second.GetAdditionalBindings()), second.GetAdditionalBindings()) + } +} diff --git a/internal/descriptor/openapi_configuration_test.go b/internal/descriptor/openapi_configuration_test.go index e61b0d1ef0b..977d7e94e1c 100644 --- a/internal/descriptor/openapi_configuration_test.go +++ b/internal/descriptor/openapi_configuration_test.go @@ -1,114 +1,114 @@ -package descriptor - -import ( - "strings" - "testing" - - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" -) - -func TestLoadOpenAPIConfigFromYAMLRejectInvalidYAML(t *testing.T) { - config, err := loadOpenAPIConfigFromYAML([]byte(` -openapiOptions: -file: -- file: test.proto - - option: - schemes: - - HTTP - - HTTPS - - WSS - securityDefinitions: - security: - ApiKeyAuth: - type: TYPE_API_KEY - in: IN_HEADER - name: "X-API-Key" -`), "invalidyaml") - if err == nil { - t.Fatal(err) - } - - if !strings.Contains(err.Error(), "line 4") { - t.Errorf("Expected yaml error to be detected in line 4. Got other error: %v", err) - } - - if config != nil { - t.Fatal("Config returned") - } -} - -func TestLoadOpenAPIConfigFromYAML(t *testing.T) { - config, err := loadOpenAPIConfigFromYAML([]byte(` -openapiOptions: - file: - - file: test.proto - option: - schemes: - - HTTP - - HTTPS - - WSS - securityDefinitions: - security: - ApiKeyAuth: - type: TYPE_API_KEY - in: IN_HEADER - name: "X-API-Key" -`), "openapi_options") - if err != nil { - t.Fatal(err) - } - - if config.OpenapiOptions == nil { - t.Fatal("OpenAPIOptions is empty") - } - - opts := config.OpenapiOptions - if numFileOpts := len(opts.File); numFileOpts != 1 { - t.Fatalf("expected 1 file option but got %d", numFileOpts) - } - - fileOpt := opts.File[0] - - if fileOpt.File != "test.proto" { - t.Fatalf("file option has unexpected binding %s", fileOpt.File) - } - - swaggerOpt := fileOpt.Option - - if swaggerOpt == nil { - t.Fatal("expected option to be set") - } - - if numSchemes := len(swaggerOpt.Schemes); numSchemes != 3 { - t.Fatalf("expected 3 schemes but got %d", numSchemes) - } - if swaggerOpt.Schemes[0] != options.Scheme_HTTP { - t.Fatalf("expected first scheme to be HTTP but got %s", swaggerOpt.Schemes[0]) - } - if swaggerOpt.Schemes[1] != options.Scheme_HTTPS { - t.Fatalf("expected second scheme to be HTTPS but got %s", swaggerOpt.Schemes[1]) - } - if swaggerOpt.Schemes[2] != options.Scheme_WSS { - t.Fatalf("expected third scheme to be WSS but got %s", swaggerOpt.Schemes[2]) - } - - if swaggerOpt.SecurityDefinitions == nil { - t.Fatal("expected securityDefinitions to be set") - } - if numSecOpts := len(swaggerOpt.SecurityDefinitions.Security); numSecOpts != 1 { - t.Fatalf("expected 1 security option but got %d", numSecOpts) - } - secOpt, ok := swaggerOpt.SecurityDefinitions.Security["ApiKeyAuth"] - if !ok { - t.Fatal("no SecurityScheme for key \"ApiKeyAuth\"") - } - if secOpt.Type != options.SecurityScheme_TYPE_API_KEY { - t.Fatalf("expected scheme type to be TYPE_API_KEY but got %s", secOpt.Type) - } - if secOpt.In != options.SecurityScheme_IN_HEADER { - t.Fatalf("expected scheme in to be IN_HEADER but got %s", secOpt.In) - } - if secOpt.Name != "X-API-Key" { - t.Fatalf("expected name to be X-API-Key but got %s", secOpt.Name) - } -} +package descriptor + +import ( + "strings" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" +) + +func TestLoadOpenAPIConfigFromYAMLRejectInvalidYAML(t *testing.T) { + config, err := loadOpenAPIConfigFromYAML([]byte(` +openapiOptions: +file: +- file: test.proto + - option: + schemes: + - HTTP + - HTTPS + - WSS + securityDefinitions: + security: + ApiKeyAuth: + type: TYPE_API_KEY + in: IN_HEADER + name: "X-API-Key" +`), "invalidyaml") + if err == nil { + t.Fatal(err) + } + + if !strings.Contains(err.Error(), "line 4") { + t.Errorf("Expected yaml error to be detected in line 4. Got other error: %v", err) + } + + if config != nil { + t.Fatal("Config returned") + } +} + +func TestLoadOpenAPIConfigFromYAML(t *testing.T) { + config, err := loadOpenAPIConfigFromYAML([]byte(` +openapiOptions: + file: + - file: test.proto + option: + schemes: + - HTTP + - HTTPS + - WSS + securityDefinitions: + security: + ApiKeyAuth: + type: TYPE_API_KEY + in: IN_HEADER + name: "X-API-Key" +`), "openapi_options") + if err != nil { + t.Fatal(err) + } + + if config.OpenapiOptions == nil { + t.Fatal("OpenAPIOptions is empty") + } + + opts := config.OpenapiOptions + if numFileOpts := len(opts.File); numFileOpts != 1 { + t.Fatalf("expected 1 file option but got %d", numFileOpts) + } + + fileOpt := opts.File[0] + + if fileOpt.File != "test.proto" { + t.Fatalf("file option has unexpected binding %s", fileOpt.File) + } + + swaggerOpt := fileOpt.Option + + if swaggerOpt == nil { + t.Fatal("expected option to be set") + } + + if numSchemes := len(swaggerOpt.Schemes); numSchemes != 3 { + t.Fatalf("expected 3 schemes but got %d", numSchemes) + } + if swaggerOpt.Schemes[0] != options.Scheme_HTTP { + t.Fatalf("expected first scheme to be HTTP but got %s", swaggerOpt.Schemes[0]) + } + if swaggerOpt.Schemes[1] != options.Scheme_HTTPS { + t.Fatalf("expected second scheme to be HTTPS but got %s", swaggerOpt.Schemes[1]) + } + if swaggerOpt.Schemes[2] != options.Scheme_WSS { + t.Fatalf("expected third scheme to be WSS but got %s", swaggerOpt.Schemes[2]) + } + + if swaggerOpt.SecurityDefinitions == nil { + t.Fatal("expected securityDefinitions to be set") + } + if numSecOpts := len(swaggerOpt.SecurityDefinitions.Security); numSecOpts != 1 { + t.Fatalf("expected 1 security option but got %d", numSecOpts) + } + secOpt, ok := swaggerOpt.SecurityDefinitions.Security["ApiKeyAuth"] + if !ok { + t.Fatal("no SecurityScheme for key \"ApiKeyAuth\"") + } + if secOpt.Type != options.SecurityScheme_TYPE_API_KEY { + t.Fatalf("expected scheme type to be TYPE_API_KEY but got %s", secOpt.Type) + } + if secOpt.In != options.SecurityScheme_IN_HEADER { + t.Fatalf("expected scheme in to be IN_HEADER but got %s", secOpt.In) + } + if secOpt.Name != "X-API-Key" { + t.Fatalf("expected name to be X-API-Key but got %s", secOpt.Name) + } +} diff --git a/internal/httprule/parse_test.go b/internal/httprule/parse_test.go index 6508e820c5a..711ac25e6de 100644 --- a/internal/httprule/parse_test.go +++ b/internal/httprule/parse_test.go @@ -102,7 +102,10 @@ func TestTokenize(t *testing.T) { } func TestParseSegments(t *testing.T) { - flag.Set("v", "3") + err := flag.Set("v", "3") + if err != nil { + t.Fatalf("failed to set flag: %v", err) + } for _, spec := range []struct { tokens []string want []segment @@ -247,7 +250,10 @@ func TestParseSegments(t *testing.T) { } func TestParseSegmentsWithErrors(t *testing.T) { - flag.Set("v", "3") + err := flag.Set("v", "3") + if err != nil { + t.Fatalf("failed to set flag: %v", err) + } for _, spec := range []struct { tokens []string }{ diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 2367217dfa6..08efcc0b2c0 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -3,13 +3,14 @@ package gengateway import ( "errors" "fmt" + "go/format" + "path" + "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" - "go/format" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/pluginpb" - "path" ) var ( diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index cfc4cb056b8..65a2b6a223d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -19,7 +19,7 @@ import ( "google.golang.org/protobuf/types/descriptorpb" "google.golang.org/protobuf/types/pluginpb" - //lint:ignore SA1019 known issue, will be replaced when possible + //nolint:staticcheck // Known issue, will be replaced when possible legacydescriptor "github.com/golang/protobuf/descriptor" ) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index ae1da8585e2..cb5746feeb8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -214,9 +214,12 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } message, err := reg.LookupMsg("", ".example."+test.Message) if err != nil { @@ -394,9 +397,12 @@ func TestMessageToQueryParameters(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } message, err := reg.LookupMsg("", ".example."+test.Message) if err != nil { @@ -513,9 +519,12 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } message, err := reg.LookupMsg("", ".example."+test.Message) if err != nil { @@ -632,9 +641,12 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } message, err := reg.LookupMsg("", ".example."+test.Message) if err != nil { @@ -739,9 +751,12 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } message, err := reg.LookupMsg("", ".example."+test.Message) if err != nil { @@ -1542,7 +1557,12 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -1700,7 +1720,12 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -1860,7 +1885,12 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -3156,9 +3186,12 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } msgMap := map[string]*descriptor.Message{} for _, d := range test.msgDescs { @@ -3487,9 +3520,12 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { }, Messages: msgs, } - reg.Load(&pluginpb.CodeGeneratorRequest{ + err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } msgMap := map[string]*descriptor.Message{} for _, d := range test.msgDescs { diff --git a/runtime/context.go b/runtime/context.go index 2c249eb9abe..f42243a0061 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -135,6 +135,7 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM } if timeout != 0 { + //nolint:govet // The context outlives this function ctx, _ = context.WithTimeout(ctx, timeout) } if len(pairs) == 0 { diff --git a/runtime/pattern.go b/runtime/pattern.go index f31966410d6..14c06dcc3f6 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -154,7 +154,6 @@ func (p Pattern) Match(components []string, verb string) (map[string]string, err components = append([]string{}, components...) components[len(components)-1] += ":" + verb } - verb = "" } var pos int From 3d22f27a70490faeeccf5566cba42c870d9cecdf Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 13 Nov 2020 11:26:06 +0000 Subject: [PATCH 0732/1518] Fix openapiv2 panic (#1818) * Fix panic when SecurityRequirement is missing value Fixes #1811 * Fix test warnings These were just annoying me --- .../internal/genopenapi/template.go | 3 + .../internal/genopenapi/template_test.go | 95 ++++++++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 299f5fa626c..f9b31fc3c2d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1355,6 +1355,9 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { for _, secReq := range spb.Security { newSecReq := openapiSecurityRequirementObject{} for secReqKey, secReqValue := range secReq.SecurityRequirement { + if secReqValue == nil { + return nil, fmt.Errorf("malformed security requirement spec for key %q; value is required", secReqKey) + } newSecReqValue := make([]string, len(secReqValue.Scope)) copy(newSecReqValue, secReqValue.Scope) newSecReq[secReqKey] = newSecReqValue diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index cb5746feeb8..de8a3ab4195 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -207,6 +207,9 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { Dependency: []string{}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -390,6 +393,9 @@ func TestMessageToQueryParameters(t *testing.T) { Dependency: []string{}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -512,6 +518,9 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { Dependency: []string{}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -634,6 +643,9 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { Dependency: []string{}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -744,6 +756,9 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { Dependency: []string{}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -864,6 +879,9 @@ func TestMessageToQueryParametersWellKnownTypes(t *testing.T) { Dependency: []string{}, MessageType: test.WellKnownMsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("google/well_known"), + }, }, { SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, @@ -872,6 +890,9 @@ func TestMessageToQueryParametersWellKnownTypes(t *testing.T) { Dependency: []string{"google/well_known.proto"}, MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("acme/example"), + }, }, }, }) @@ -916,6 +937,9 @@ func TestApplyTemplateSimple(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1016,6 +1040,9 @@ func TestApplyTemplateMultiService(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1125,6 +1152,9 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1242,7 +1272,9 @@ func TestApplyTemplateExtensions(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, - Options: &descriptorpb.FileOptions{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1496,6 +1528,9 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1659,6 +1694,9 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1823,6 +1861,9 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{reqdesc, respdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1989,6 +2030,9 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { Name: proto.String("book.proto"), MessageType: []*descriptorpb.DescriptorProto{bookDesc, createDesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/book.pb", @@ -2861,6 +2905,9 @@ func TestSchemaOfField(t *testing.T) { { Name: proto.String("third_party/google.proto"), Package: proto.String("google.protobuf"), + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("third_party/google"), + }, MessageType: []*descriptorpb.DescriptorProto{ protodesc.ToDescriptorProto((&structpb.Struct{}).ProtoReflect().Descriptor()), protodesc.ToDescriptorProto((&structpb.Value{}).ProtoReflect().Descriptor()), @@ -2887,6 +2934,9 @@ func TestSchemaOfField(t *testing.T) { Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"third_party/google.proto"}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, MessageType: []*descriptorpb.DescriptorProto{ { Name: proto.String("Message"), @@ -3183,6 +3233,9 @@ func TestRenderMessagesAsDefinition(t *testing.T) { MessageType: test.msgDescs, EnumType: []*descriptorpb.EnumDescriptorProto{}, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, Messages: msgs, } @@ -3517,6 +3570,9 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { MessageType: test.msgDescs, EnumType: []*descriptorpb.EnumDescriptorProto{}, Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, Messages: msgs, } @@ -3584,6 +3640,9 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { Package: proto.String("example"), MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -3732,3 +3791,37 @@ func Test_getReservedJsonName(t *testing.T) { }) } } + +func TestParseIncompleteSecurityRequirement(t *testing.T) { + swagger := openapi_options.Swagger{ + Security: []*openapi_options.SecurityRequirement{ + { + SecurityRequirement: map[string]*openapi_options.SecurityRequirement_SecurityRequirementValue{ + "key": nil, + }, + }, + }, + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, + }, + } + proto.SetExtension(proto.Message(file.FileDescriptorProto.Options), openapi_options.E_Openapiv2Swagger, &swagger) + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Errorf("failed to reg.Load(): %v", err) + return + } + _, err = applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err == nil { + t.Errorf("applyTemplate(%#v) did not error as expected", file) + return + } +} From 1f6e7b0f18462fe7ae91a9b319c09771faec437f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Nov 2020 14:00:16 +0000 Subject: [PATCH 0733/1518] Update google.golang.org/genproto commit hash to ce600e9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8ae7b04c3cb..722bd43ae05 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de + google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ac131d6b480..5ea0a946ed0 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de h1:CX+Qqbzx3Yphy3fo9WOQIac7DqeBhqCWeSqSuH8ddL0= -google.golang.org/genproto v0.0.0-20201112120144-2985b7af83de/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e h1:jRAe+6EDD0LNrVzmjx7FxBivivOZTKnXMbH5lvmxLP8= +google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4b0de05dee6..e001fdb0416 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:CX+Qqbzx3Yphy3fo9WOQIac7DqeBhqCWeSqSuH8ddL0=", - version = "v0.0.0-20201112120144-2985b7af83de", + sum = "h1:jRAe+6EDD0LNrVzmjx7FxBivivOZTKnXMbH5lvmxLP8=", + version = "v0.0.0-20201113130914-ce600e9a6f9e", ) go_repository( name = "org_golang_google_grpc", From 58f6debe4ba85a4f4f8004e90f081d76cba0baea Mon Sep 17 00:00:00 2001 From: Eric Hauser Date: Sat, 14 Nov 2020 03:44:10 -0800 Subject: [PATCH 0734/1518] add support for field_behavior options on swagger plugin (#1806) * add support for field_behavior optons on swagger plugin * fix lint errors * remove extra whitespace * add examples for google.api.field_behavior * update examples for field_behavior * honor camelcase for required array and add required properties to object level array * regenerate example proto * cleanup tests; add note on supported INPUT_ONLY at a later date * address code review comment * run go fmt --- .../internal/clients/abe/api/swagger.yaml | 63 + .../abe/api_a_bit_of_everything_service.go | 36 +- .../model_examplepb_a_bit_of_everything.go | 8 +- .../clients/unannotatedecho/api/swagger.yaml | 1 + ...el_examplepb_unannotated_simple_message.go | 2 +- examples/internal/integration/client_test.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1557 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 7 + .../a_bit_of_everything.swagger.json | 74 +- .../proto/examplepb/stream.swagger.json | 18 +- .../unannotated_echo_service.swagger.json | 3 +- .../internal/genopenapi/BUILD.bazel | 2 + .../internal/genopenapi/template.go | 71 + .../internal/genopenapi/template_test.go | 172 +- .../google/api/field_behavior.proto | 78 + 15 files changed, 1315 insertions(+), 779 deletions(-) create mode 100644 third_party/googleapis/google/api/field_behavior.proto diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 80a0ea203e2..b98557969a3 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -373,6 +373,19 @@ paths: format: "int64" x-exportParamName: "Int64OverrideType" x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition." + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition." + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -667,6 +680,19 @@ paths: format: "int64" x-exportParamName: "Int64OverrideType" x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition." + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition." + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -948,6 +974,19 @@ paths: format: "int64" x-exportParamName: "Int64OverrideType" x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition." + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition." + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1249,6 +1288,19 @@ paths: format: "int64" x-exportParamName: "Int64OverrideType" x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition." + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition." + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2340,6 +2392,10 @@ definitions: examplepbABitOfEverything: type: "object" required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" - "uuid" properties: singleNested: @@ -2464,6 +2520,13 @@ definitions: int64OverrideType: type: "integer" format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index c51a3ab96ad..3c0168f725f 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -177,6 +177,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedName name is nested field. * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. @@ -209,6 +210,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. @return ExamplepbABitOfEverything */ @@ -245,9 +247,10 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { NestedAnnotationAmount optional.Int64 NestedAnnotationOk optional.String Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -358,6 +361,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -484,6 +491,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedOk DeepEnum description. * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -516,6 +524,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationName" (optional.String) - name is nested field. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. @return ExamplepbABitOfEverything */ @@ -552,9 +561,10 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { NestedAnnotationName optional.String NestedAnnotationAmount optional.Int64 Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -665,6 +675,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -792,6 +806,7 @@ ABitOfEverythingServiceApiService * @param stringValue * @param body * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters: * @param "Uuid" (optional.String) - * @param "DoubleValue" (optional.Float64) - @@ -822,6 +837,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. @return ExamplepbABitOfEverything */ @@ -856,9 +872,10 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { NestedAnnotationAmount optional.Int64 NestedAnnotationOk optional.String Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -963,6 +980,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2304,6 +2325,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuid * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2337,6 +2359,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. @return interface{} */ @@ -2374,9 +2397,10 @@ type ABitOfEverythingServiceGetQueryOpts struct { NestedAnnotationAmount optional.Int64 NestedAnnotationOk optional.String Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2490,6 +2514,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index c2705f70237..5a258c2aa31 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -20,9 +20,9 @@ type ExamplepbABitOfEverything struct { Uuid string `json:"uuid"` Nested []ABitOfEverythingNested `json:"nested,omitempty"` // Float value field - FloatValue float32 `json:"floatValue,omitempty"` - DoubleValue float64 `json:"doubleValue,omitempty"` - Int64Value string `json:"int64Value,omitempty"` + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` Uint64Value string `json:"uint64Value,omitempty"` Int32Value int32 `json:"int32Value,omitempty"` Fixed64Value string `json:"fixed64Value,omitempty"` @@ -58,4 +58,6 @@ type ExamplepbABitOfEverything struct { // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` } diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index b344b67d739..17bbc115235 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -349,6 +349,7 @@ definitions: type: "object" required: - "id" + - "num" properties: id: type: "string" diff --git a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go index 13ee07cae2b..07045bc1dbc 100644 --- a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go +++ b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go @@ -15,7 +15,7 @@ type ExamplepbUnannotatedSimpleMessage struct { // Id represents the message identifier. Id string `json:"id"` // Int value field - Num string `json:"num,omitempty"` + Num string `json:"num"` Duration string `json:"duration,omitempty"` LineNum string `json:"lineNum,omitempty"` Lang string `json:"lang,omitempty"` diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index a4304ccd644..b856843fcc0 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -208,7 +208,7 @@ func TestUnannotatedEchoBodyClient(t *testing.T) { cl := unannotatedecho.NewAPIClient(cfg) - req := unannotatedecho.ExamplepbUnannotatedSimpleMessage{Id: "foo"} + req := unannotatedecho.ExamplepbUnannotatedSimpleMessage{Id: "foo", Num: "1"} resp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEchoBody(context.Background(), req) if err != nil { t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 7d8784bb04f..0a081081d5c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -184,6 +184,10 @@ type ABitOfEverything struct { // nested object comments (This comment is overridden by the field annotation) NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` + // mark a field as required in Open API definition + RequiredStringViaFieldBehaviorAnnotation string `protobuf:"bytes,38,opt,name=required_string_via_field_behavior_annotation,json=requiredStringViaFieldBehaviorAnnotation,proto3" json:"required_string_via_field_behavior_annotation,omitempty"` + // mark a field as readonly in Open API definition + OutputOnlyStringViaFieldBehaviorAnnotation string `protobuf:"bytes,39,opt,name=output_only_string_via_field_behavior_annotation,json=outputOnlyStringViaFieldBehaviorAnnotation,proto3" json:"output_only_string_via_field_behavior_annotation,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -477,6 +481,20 @@ func (x *ABitOfEverything) GetInt64OverrideType() int64 { return 0 } +func (x *ABitOfEverything) GetRequiredStringViaFieldBehaviorAnnotation() string { + if x != nil { + return x.RequiredStringViaFieldBehaviorAnnotation + } + return "" +} + +func (x *ABitOfEverything) GetOutputOnlyStringViaFieldBehaviorAnnotation() string { + if x != nil { + return x.OutputOnlyStringViaFieldBehaviorAnnotation + } + return "" +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1096,815 +1114,830 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaf, 0x1d, - 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, - 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, - 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, + 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, - 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, - 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, - 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, - 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, - 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, - 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, + 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x54, 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, + 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, - 0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, - 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, - 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, - 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, - 0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, - 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xe8, 0x01, - 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, + 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, + 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, + 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, + 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, + 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, - 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, - 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, - 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, - 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, - 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, - 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, + 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, + 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, + 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, - 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, - 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, - 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, - 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, - 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, - 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, - 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, - 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xe4, 0x2a, 0x0a, 0x17, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, + 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, + 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, + 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x26, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, + 0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, + 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, - 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, - 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, - 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, + 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, + 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, + 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, + 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, + 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x32, 0x30, 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, + 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, + 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, + 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, + 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, + 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, + 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, + 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, - 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, + 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, + 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xe4, 0x2a, 0x0a, 0x17, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, + 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, + 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, - 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, + 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, - 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, - 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, - 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, - 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, - 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, - 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, - 0x01, 0x03, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, + 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, + 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, + 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, + 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, + 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, + 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, + 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, + 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, + 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, + 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, + 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, + 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, + 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, + 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, + 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, + 0x9a, 0x02, 0x01, 0x03, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, - 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, - 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, - 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, + 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, + 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, - 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, - 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, - 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, + 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, + 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, - 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, - 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, + 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, + 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, - 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, - 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, - 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, - 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, - 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x83, 0x0a, 0x5a, 0x4b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xb2, 0x09, 0x12, - 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, - 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, - 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, - 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, - 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, - 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, - 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, - 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, - 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, - 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, - 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, - 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, - 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, - 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, - 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, - 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, - 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, - 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, - 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, - 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, - 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, - 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, - 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, + 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, + 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, + 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, + 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, + 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, + 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, + 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, + 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x83, 0x0a, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xb2, + 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, + 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, + 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, + 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, + 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, + 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, + 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, + 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, 0x03, 0x0a, 0x0f, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, + 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, + 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, + 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, + 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, + 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, + 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, + 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, + 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index f28ee5fe0cc..1d58b3f2dc1 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -3,6 +3,7 @@ option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; +import "google/api/field_behavior.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; @@ -272,6 +273,12 @@ message ABitOfEverything { Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Nested object title", description: "Nested object description."}]; int64 int64_override_type = 37 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {type: INTEGER}]; + + // mark a field as required in Open API definition + string required_string_via_field_behavior_annotation = 38 [(google.api.field_behavior) = REQUIRED]; + + // mark a field as readonly in Open API definition + string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index ede085b3308..c1396315335 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -447,6 +447,20 @@ "required": false, "type": "integer", "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -767,6 +781,20 @@ "required": false, "type": "integer", "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1076,6 +1104,20 @@ "required": false, "type": "integer", "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1403,6 +1445,20 @@ "required": false, "type": "integer", "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -2998,6 +3054,18 @@ "int64OverrideType": { "type": "integer", "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "required_string_via_field_behavior_annotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", @@ -3008,8 +3076,10 @@ }, "required": [ "uuid", - "int64_value", - "double_value" + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" ] }, "examplepbABitOfEverythingRepeated": { diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 0acbb997786..1d5d518e195 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -383,6 +383,18 @@ "int64OverrideType": { "type": "integer", "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "required_string_via_field_behavior_annotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", @@ -393,8 +405,10 @@ }, "required": [ "uuid", - "int64_value", - "double_value" + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" ] }, "examplepbNumericEnum": { diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 2ff178505ff..cf92646c793 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -449,7 +449,8 @@ "url": "https://github.com/grpc-ecosystem/grpc-gateway" }, "required": [ - "id" + "id", + "num" ] }, "protobufAny": { diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 283682c6d60..5442a8d2691 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//protoc-gen-openapiv2/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", + "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:struct_go_proto", @@ -42,6 +43,7 @@ go_test( "//protoc-gen-openapiv2/options:go_default_library", "//runtime:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//reflect/protodesc:go_default_library", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index f9b31fc3c2d..ee2c8973dbf 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -19,6 +19,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" openapi_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" + "google.golang.org/genproto/googleapis/api/annotations" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/descriptorpb" @@ -408,6 +409,20 @@ func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, panic(err) } + if requiredIdx := find(schema.Required, *f.Name); requiredIdx != -1 && reg.GetUseJSONNamesForFields() { + schema.Required[requiredIdx] = f.GetJsonName() + } + + if fieldValue.Required != nil { + for _, req := range fieldValue.Required { + if reg.GetUseJSONNamesForFields() { + schema.Required = append(schema.Required, f.GetJsonName()) + } else { + schema.Required = append(schema.Required, req) + } + } + } + kv := keyVal{Value: fieldValue} if reg.GetUseJSONNamesForFields() { kv.Key = f.GetJsonName() @@ -505,6 +520,10 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o updateswaggerObjectFromJSONSchema(&ret, j, reg, f) } + if j, err := getFieldBehaviorOption(reg, f); err == nil { + updateSwaggerObjectFromFieldBehavior(&ret, j, f) + } + return ret } @@ -1794,6 +1813,21 @@ func extractJSONSchemaFromFieldDescriptor(fd *descriptorpb.FieldDescriptorProto) return opts, nil } +func extractFieldBehaviorFromFieldDescriptor(fd *descriptorpb.FieldDescriptorProto) ([]annotations.FieldBehavior, error) { + if fd.Options == nil { + return nil, nil + } + if !proto.HasExtension(fd.Options, annotations.E_FieldBehavior) { + return nil, nil + } + ext := proto.GetExtension(fd.Options, annotations.E_FieldBehavior) + opts, ok := ext.([]annotations.FieldBehavior) + if !ok { + return nil, fmt.Errorf("extension is %T; want a []FieldBehavior object", ext) + } + return opts, nil +} + func getMethodOpenAPIOption(reg *descriptor.Registry, meth *descriptor.Method) (*openapi_options.Operation, error) { opts, err := extractOperationOptionFromMethodDescriptor(meth.MethodDescriptorProto) if err != nil { @@ -1854,6 +1888,17 @@ func getFieldOpenAPIOption(reg *descriptor.Registry, fd *descriptor.Field) (*ope return opts, nil } +func getFieldBehaviorOption(reg *descriptor.Registry, fd *descriptor.Field) ([]annotations.FieldBehavior, error) { + opts, err := extractFieldBehaviorFromFieldDescriptor(fd.FieldDescriptorProto) + if err != nil { + return nil, err + } + if opts != nil { + return opts, nil + } + return opts, nil +} + func protoJSONSchemaToOpenAPISchemaCore(j *openapi_options.JSONSchema, reg *descriptor.Registry, refs refMap) schemaCore { ret := schemaCore{} @@ -1905,6 +1950,22 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option } } +func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, field *descriptor.Field) { + for _, fb := range j { + switch fb { + case annotations.FieldBehavior_REQUIRED: + s.Required = append(s.Required, *field.Name) + case annotations.FieldBehavior_OUTPUT_ONLY: + s.ReadOnly = true + case annotations.FieldBehavior_FIELD_BEHAVIOR_UNSPECIFIED: + case annotations.FieldBehavior_OPTIONAL: + case annotations.FieldBehavior_INPUT_ONLY: + // OpenAPI v3 supports a writeOnly property, but this is not supported in Open API v2 + case annotations.FieldBehavior_IMMUTABLE: + } + } +} + func openapiSchemaFromProtoSchema(s *openapi_options.Schema, reg *descriptor.Registry, refs refMap, data interface{}) openapiSchemaObject { ret := openapiSchemaObject{ ExternalDocs: protoExternalDocumentationToOpenAPIExternalDocumentation(s.GetExternalDocs(), reg, data), @@ -2077,3 +2138,13 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } + +func find(a []string, x string) int { + // This is a linear search but we are dealing with a small number of fields + for i, n := range a { + if x == n { + return i + } + } + return -1 +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index de8a3ab4195..799d9f317b2 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -14,6 +14,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" openapi_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "google.golang.org/genproto/googleapis/api/annotations" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" @@ -454,7 +455,7 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { // } { MsgDescs: []*descriptorpb.DescriptorProto{ - &descriptorpb.DescriptorProto{ + { Name: proto.String("QueryMessage"), Field: []*descriptorpb.FieldDescriptorProto{ { @@ -470,7 +471,7 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { }, }, }, - &descriptorpb.DescriptorProto{ + { Name: proto.String("BaseMessage"), Field: []*descriptorpb.FieldDescriptorProto{ { @@ -488,7 +489,7 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { }, }, // Note there is no recursive nature to this message - &descriptorpb.DescriptorProto{ + { Name: proto.String("NonRecursiveMessage"), Field: []*descriptorpb.FieldDescriptorProto{ { @@ -2390,6 +2391,14 @@ func TestSchemaOfField(t *testing.T) { var fieldOptions = new(descriptorpb.FieldOptions) proto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema) + var requiredField = []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED} + var requiredFieldOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, requiredField) + + var outputOnlyField = []annotations.FieldBehavior{annotations.FieldBehavior_OUTPUT_ONLY} + var outputOnlyOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(outputOnlyOptions, annotations.E_FieldBehavior, outputOnlyField) + tests := []test{ { field: &descriptor.Field{ @@ -2897,6 +2906,38 @@ func TestSchemaOfField(t *testing.T) { Description: "field description", }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("required_via_field_behavior_field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Options: requiredFieldOptions, + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Required: []string{"required_via_field_behavior_field"}, + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("readonly_via_field_behavior_field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Options: outputOnlyOptions, + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + ReadOnly: true, + }, + }, } for _, test := range tests { reg := descriptor.NewRegistry() @@ -3024,6 +3065,22 @@ func TestSchemaOfField(t *testing.T) { } func TestRenderMessagesAsDefinition(t *testing.T) { + jsonSchema := &openapi_options.JSONSchema{ + Title: "field title", + Description: "field description", + Required: []string{"aRequiredField"}, + } + + var requiredField = new(descriptorpb.FieldOptions) + proto.SetExtension(requiredField, openapi_options.E_Openapiv2Field, jsonSchema) + + var fieldBehaviorRequired = []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED} + var requiredFieldOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, fieldBehaviorRequired) + + var fieldBehaviorOutputOnlyField = []annotations.FieldBehavior{annotations.FieldBehavior_OUTPUT_ONLY} + var fieldBehaviorOutputOnlyOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(fieldBehaviorOutputOnlyOptions, annotations.E_FieldBehavior, fieldBehaviorOutputOnlyField) tests := []struct { descr string @@ -3212,6 +3269,115 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, + { + descr: "JSONSchema with required properties", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("aRequiredField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + Options: requiredField, + }, + }, + }, + }, + schema: map[string]openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + Required: []string{"req"}, + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"req", "aRequiredField"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "aRequiredField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Description: "field description", + Title: "field title", + Required: []string{"aRequiredField"}, + }, + }, + }, + }, + }, + }, + { + descr: "JSONSchema with required properties via field_behavior", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("aRequiredField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + Options: requiredFieldOptions, + }, + { + Name: proto.String("aOutputOnlyField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + Options: fieldBehaviorOutputOnlyOptions, + }, + }, + }, + }, + schema: map[string]openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + Required: []string{"req"}, + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"req", "aRequiredField"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "aRequiredField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Required: []string{"aRequiredField"}, + }, + }, + { + Key: "aOutputOnlyField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + ReadOnly: true, + }, + }, + }, + }, + }, + }, } for _, test := range tests { diff --git a/third_party/googleapis/google/api/field_behavior.proto b/third_party/googleapis/google/api/field_behavior.proto new file mode 100644 index 00000000000..aa7127bf871 --- /dev/null +++ b/third_party/googleapis/google/api/field_behavior.proto @@ -0,0 +1,78 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; +} From 5bac8f1d64c5b37a5ad14e10380c91caef5c6e92 Mon Sep 17 00:00:00 2001 From: Eric Hauser Date: Sat, 14 Nov 2020 03:46:55 -0800 Subject: [PATCH 0735/1518] reorganize docs; add page for customizing gateway output (#1822) --- docs/docs/contributing/contributing.md | 9 + docs/docs/contributing/index.md | 6 + .../docs/{ => contributing}/season_of_docs.md | 2 +- docs/docs/{ => development}/cygwin.md | 3 +- docs/docs/development/index.md | 6 + docs/docs/{ => development}/v2-migration.md | 3 +- docs/docs/mapping/customizingopenapioutput.md | 203 ++++++++++++++++++ .../{ => mapping}/customizingyourgateway.md | 3 +- docs/docs/{ => mapping}/examples.md | 3 +- .../{ => mapping}/grpcapiconfiguration.md | 3 +- docs/docs/{ => mapping}/httpbody.md | 3 +- docs/docs/mapping/index.md | 6 + docs/docs/{ => mapping}/patch.md | 3 +- docs/docs/{ => operations}/aws.md | 5 +- docs/docs/{ => operations}/healthcheck.md | 3 +- docs/docs/operations/index.md | 6 + docs/docs/{ => operations}/inject_router.md | 3 +- docs/docs/{ => operations}/tracing.md | 3 +- docs/docs/{ => overview}/background.md | 2 +- docs/docs/overview/index.md | 6 + docs/docs/{ => overview}/usage.md | 2 +- docs/docs/usegotemplates.md | 112 ---------- docs/index.md | 2 +- 23 files changed, 269 insertions(+), 128 deletions(-) create mode 100644 docs/docs/contributing/contributing.md create mode 100644 docs/docs/contributing/index.md rename docs/docs/{ => contributing}/season_of_docs.md (99%) rename docs/docs/{ => development}/cygwin.md (99%) create mode 100644 docs/docs/development/index.md rename docs/docs/{ => development}/v2-migration.md (99%) create mode 100644 docs/docs/mapping/customizingopenapioutput.md rename docs/docs/{ => mapping}/customizingyourgateway.md (99%) rename docs/docs/{ => mapping}/examples.md (98%) rename docs/docs/{ => mapping}/grpcapiconfiguration.md (99%) rename docs/docs/{ => mapping}/httpbody.md (98%) create mode 100644 docs/docs/mapping/index.md rename docs/docs/{ => mapping}/patch.md (99%) rename docs/docs/{ => operations}/aws.md (93%) rename docs/docs/{ => operations}/healthcheck.md (97%) create mode 100644 docs/docs/operations/index.md rename docs/docs/{ => operations}/inject_router.md (97%) rename docs/docs/{ => operations}/tracing.md (99%) rename docs/docs/{ => overview}/background.md (97%) create mode 100644 docs/docs/overview/index.md rename docs/docs/{ => overview}/usage.md (89%) delete mode 100644 docs/docs/usegotemplates.md diff --git a/docs/docs/contributing/contributing.md b/docs/docs/contributing/contributing.md new file mode 100644 index 00000000000..a529b436112 --- /dev/null +++ b/docs/docs/contributing/contributing.md @@ -0,0 +1,9 @@ +--- +layout: default +title: Getting Started +parent: Contributing +--- + +# How do I contribute + +See CONTRIBUTING in [the repo](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). diff --git a/docs/docs/contributing/index.md b/docs/docs/contributing/index.md new file mode 100644 index 00000000000..4241bd25bc4 --- /dev/null +++ b/docs/docs/contributing/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Contributing +nav_order: 5 +has_children: true +--- diff --git a/docs/docs/season_of_docs.md b/docs/docs/contributing/season_of_docs.md similarity index 99% rename from docs/docs/season_of_docs.md rename to docs/docs/contributing/season_of_docs.md index 6515d7a8078..f116a513c94 100644 --- a/docs/docs/season_of_docs.md +++ b/docs/docs/contributing/season_of_docs.md @@ -1,7 +1,7 @@ --- layout: default title: 2020 Season of Docs -nav_order: 13 +parent: Contributing --- # 2020 Season of Docs diff --git a/docs/docs/cygwin.md b/docs/docs/development/cygwin.md similarity index 99% rename from docs/docs/cygwin.md rename to docs/docs/development/cygwin.md index 697fe7ba832..bf351c84772 100644 --- a/docs/docs/cygwin.md +++ b/docs/docs/development/cygwin.md @@ -1,7 +1,8 @@ --- layout: default title: Installation for Cygwin -nav_order: 5 +parent: Developing +nav_order: 2 --- # Installation for Cygwin diff --git a/docs/docs/development/index.md b/docs/docs/development/index.md new file mode 100644 index 00000000000..1af2329bca5 --- /dev/null +++ b/docs/docs/development/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Developing +nav_order: 4 +has_children: true +--- diff --git a/docs/docs/v2-migration.md b/docs/docs/development/v2-migration.md similarity index 99% rename from docs/docs/v2-migration.md rename to docs/docs/development/v2-migration.md index 22e704c91c0..893a7dca126 100644 --- a/docs/docs/v2-migration.md +++ b/docs/docs/development/v2-migration.md @@ -1,7 +1,8 @@ --- layout: default title: gRPC-Gateway v2 migration guide -nav_order: 17 +parent: Developing +nav_order: 1 --- # gRPC-Gateway v2 migration guide diff --git a/docs/docs/mapping/customizingopenapioutput.md b/docs/docs/mapping/customizingopenapioutput.md new file mode 100644 index 00000000000..1650c62182f --- /dev/null +++ b/docs/docs/mapping/customizingopenapioutput.md @@ -0,0 +1,203 @@ +--- +layout: default +title: Customizing OpenAPI Ouptut +parent: Mapping +nav_order: 5 +--- + +{% raw %} + +# In proto comments + +You can provide comments directly in your Protocol Buffer defintions and they will be translated into comments in the generated OpenAPI definitions: + +```protobuf +message MyMessage { + // This comment will end up direcly in your Open API definition + string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The UUID field."}]; +} +``` + +# Using proto options + +You can define options on your Protocol Buffer services, operations, messages, and field definitions to customize your Open API output. For instance, to customize the [OpenAPI Schema Object](https://swagger.io/specification/v2/#schemaObject) for messages and fields: + +```protobuf +import "protoc-gen-openapiv2/options/annotations.proto"; + +message ABitOfEverything { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "A bit of everything" + description: "Intentionaly complicated message type to cover many features of Protobuf." + required: ["uuid", "int64_value", "double_value"] + } + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more about ABitOfEverything"; + } + example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}" + }; + + string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The UUID field."}]; +} +``` + +Operations can also be customized: + +```protobuf +service ABitOfEverythingService { + rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/example/a_bit_of_everything/{uuid}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + security: { + security_requirement: { + key: "ApiKeyAuth"; + value: {} + } + security_requirement: { + key: "OAuth2"; + value: { + scope: "read"; + scope: "write"; + } + } + } + extensions: { + key: "x-irreversible"; + value { + bool_value: true; + } + } + }; + } +} +``` + +Please see this [example](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of the options being used. + +# Using google.api.field_behavior + +Google provides an [field option](https://github.com/googleapis/googleapis/blob/master/google/api/field_behavior.proto) for defining the behavior of fields that is also supported: + +```protobuf +import "google/api/field_behavior.proto"; + +message MyMessage { + string a_required_field = 1 [(google.api.field_behavior) = REQUIRED]; +} +``` + +The following options are used in the Open API output: + +* `REQUIRED` - marks a field as required +* `OUTPUT_ONLY` - marks a field as readonly + +Google defines a couple other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` - that are not currently used. `OPTIONAL` support is currently under discussion in [this issue](https://github.com/grpc-ec system/grpc-gateway/issues/669). For `IMMUTABLE` and `INPUT_ONLY` fields, there is an [open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) in the Open API specification for adding functionality for write once or immutable fields to the spec. + +# Using go templates in protofile comments + +Use [Go templates](https://golang.org/pkg/text/template/) +in your protofile comments to allow more advanced documentation such +as: + +- Documentation about fields in the proto objects. +- Import the content of external files (such as + [Markdown](https://en.wikipedia.org/wiki/Markdown)). + +## How to use it + +By default this function is turned off, so if you want to use it you +have to add the `use_go_templates` option: + +```shell +--openapiv2_out . --openapiv2_opt use_go_templates=true +``` + +or: + +```shell +--openapiv2_out=use_go_templates=true:. +``` + +### Example script + +Example of a bash script with the `use_go_templates` flag set to true: + +```shell +$ protoc -I. \ + --go_out . --go-grpc_out . \ + --grpc-gateway_out . --grpc-gateway_opt logtostderr=true \ + --openapiv2_out . \ + --openapiv2_opt logtostderr=true \ + --openapiv2_opt use_go_templates=true \ + path/to/my/proto/v1/myproto.proto +``` + +### Example proto file + +Example of a protofile with Go templates. This proto file imports documentation from another file, `tables.md`: + +```protobuf +service LoginService { + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // {{import "tables.md"}} + rpc Login (LoginRequest) returns (LoginReply) { + option (google.api.http) = { + post: "/v1/example/login" + body: "*" + }; + } +} + +message LoginRequest { + // The entered username + string username = 1; + // The entered password + string password = 2; +} + +message LoginReply { + // Whether you have access or not + bool access = 1; +} +``` + +The content of `tables.md`: + +```markdown +## {{.RequestType.Name}} +| Field ID | Name | Type | Description | +| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} +| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + +## {{.ResponseType.Name}} +| Field ID | Name | Type | Description | +| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} +| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} +``` + +## OpenAPI output + +### SwaggerUI + +This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) + +![Screenshot OpenAPI file in SwaggerUI](../assets/images/gotemplates/swaggerui.png) + +### Postman + +This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) + +![Screenshot OpenAPI file in Postman](../assets/images/gotemplates/postman.png) + +For a more detailed example of a protofile that has Go templates enabled, +[see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). + +{% endraw %} diff --git a/docs/docs/customizingyourgateway.md b/docs/docs/mapping/customizingyourgateway.md similarity index 99% rename from docs/docs/customizingyourgateway.md rename to docs/docs/mapping/customizingyourgateway.md index f1f31d722ab..a4f4e4732d6 100644 --- a/docs/docs/customizingyourgateway.md +++ b/docs/docs/mapping/customizingyourgateway.md @@ -1,7 +1,8 @@ --- layout: default title: Customizing your gateway -nav_order: 4 +parent: Mapping +nav_order: 10 --- # Customizing your gateway diff --git a/docs/docs/examples.md b/docs/docs/mapping/examples.md similarity index 98% rename from docs/docs/examples.md rename to docs/docs/mapping/examples.md index cfa70cbb066..3528336c5fa 100644 --- a/docs/docs/examples.md +++ b/docs/docs/mapping/examples.md @@ -1,7 +1,8 @@ --- layout: default title: Examples -nav_order: 6 +parent: Mapping +nav_order: 1 --- # Examples diff --git a/docs/docs/grpcapiconfiguration.md b/docs/docs/mapping/grpcapiconfiguration.md similarity index 99% rename from docs/docs/grpcapiconfiguration.md rename to docs/docs/mapping/grpcapiconfiguration.md index 2195a7cb995..b6a33f329f3 100644 --- a/docs/docs/grpcapiconfiguration.md +++ b/docs/docs/mapping/grpcapiconfiguration.md @@ -1,7 +1,8 @@ --- layout: default title: gRPC API Configuration -nav_order: 8 +parent: Mapping +nav_order: 4 --- # gRPC API Configuration diff --git a/docs/docs/httpbody.md b/docs/docs/mapping/httpbody.md similarity index 98% rename from docs/docs/httpbody.md rename to docs/docs/mapping/httpbody.md index c948f185d1d..409ad9a4b68 100644 --- a/docs/docs/httpbody.md +++ b/docs/docs/mapping/httpbody.md @@ -1,7 +1,8 @@ --- layout: default title: HttpBody messages -nav_order: 10 +parent: Mapping +nav_order: 2 --- # HttpBody messages diff --git a/docs/docs/mapping/index.md b/docs/docs/mapping/index.md new file mode 100644 index 00000000000..88e1a943f5d --- /dev/null +++ b/docs/docs/mapping/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Mapping +nav_order: 2 +has_children: true +--- diff --git a/docs/docs/patch.md b/docs/docs/mapping/patch.md similarity index 99% rename from docs/docs/patch.md rename to docs/docs/mapping/patch.md index 7a880e60c1d..77b5e805fd8 100644 --- a/docs/docs/patch.md +++ b/docs/docs/mapping/patch.md @@ -1,7 +1,8 @@ --- layout: default title: Patch Feature -nav_order: 12 +parent: Mapping +nav_order: 3 --- # Patch Feature diff --git a/docs/docs/aws.md b/docs/docs/operations/aws.md similarity index 93% rename from docs/docs/aws.md rename to docs/docs/operations/aws.md index 8771304558e..615be257c5f 100644 --- a/docs/docs/aws.md +++ b/docs/docs/operations/aws.md @@ -1,7 +1,8 @@ --- layout: default -title: AWS -nav_order: 2 +title: AWS Gateway Integration +parent: Operations +nav_order: 5 --- # AWS diff --git a/docs/docs/healthcheck.md b/docs/docs/operations/healthcheck.md similarity index 97% rename from docs/docs/healthcheck.md rename to docs/docs/operations/healthcheck.md index 8dea546298f..15e204a49fc 100644 --- a/docs/docs/healthcheck.md +++ b/docs/docs/operations/healthcheck.md @@ -1,7 +1,8 @@ --- layout: default title: Health Check -nav_order: 9 +parent: Operations +nav_order: 3 --- # Health check diff --git a/docs/docs/operations/index.md b/docs/docs/operations/index.md new file mode 100644 index 00000000000..9ec5ab4b6fe --- /dev/null +++ b/docs/docs/operations/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Operations +nav_order: 3 +has_children: true +--- diff --git a/docs/docs/inject_router.md b/docs/docs/operations/inject_router.md similarity index 97% rename from docs/docs/inject_router.md rename to docs/docs/operations/inject_router.md index cc9532acd6c..e6f6ec1dfb0 100644 --- a/docs/docs/inject_router.md +++ b/docs/docs/operations/inject_router.md @@ -1,7 +1,8 @@ --- layout: default title: Adding custom routes to the mux -nav_order: 11 +parent: Operations +nav_order: 2 --- # Adding custom routes to the mux diff --git a/docs/docs/tracing.md b/docs/docs/operations/tracing.md similarity index 99% rename from docs/docs/tracing.md rename to docs/docs/operations/tracing.md index 58183065dac..c695d76b9cd 100644 --- a/docs/docs/tracing.md +++ b/docs/docs/operations/tracing.md @@ -1,7 +1,8 @@ --- layout: default title: Tracing -nav_order: 14 +parent: Operations +nav_order: 4 --- # Tracing diff --git a/docs/docs/background.md b/docs/docs/overview/background.md similarity index 97% rename from docs/docs/background.md rename to docs/docs/overview/background.md index 6a066610f7a..3e23722ebf1 100644 --- a/docs/docs/background.md +++ b/docs/docs/overview/background.md @@ -1,7 +1,7 @@ --- layout: default title: Background -nav_order: 3 +parent: Overview --- # Background diff --git a/docs/docs/overview/index.md b/docs/docs/overview/index.md new file mode 100644 index 00000000000..481fbe842c2 --- /dev/null +++ b/docs/docs/overview/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Overview +nav_order: 1 +has_children: true +--- diff --git a/docs/docs/usage.md b/docs/docs/overview/usage.md similarity index 89% rename from docs/docs/usage.md rename to docs/docs/overview/usage.md index 4d63ed62016..473f3656cf7 100644 --- a/docs/docs/usage.md +++ b/docs/docs/overview/usage.md @@ -1,7 +1,7 @@ --- layout: default title: How do I use this? -nav_order: 15 +parent: Overview --- # How do I use this? diff --git a/docs/docs/usegotemplates.md b/docs/docs/usegotemplates.md deleted file mode 100644 index 009f082a2af..00000000000 --- a/docs/docs/usegotemplates.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: default -title: Use go templates in protofile comments -nav_order: 16 ---- - -{% raw %} - -# Use go templates in protofile comments - -Use [Go templates](https://golang.org/pkg/text/template/) -in your protofile comments to allow more advanced documentation such -as: - -- Documentation about fields in the proto objects. -- Import the content of external files (such as - [Markdown](https://en.wikipedia.org/wiki/Markdown)). - -## How to use it - -By default this function is turned off, so if you want to use it you -have to add the `use_go_templates` option: - -```shell ---openapiv2_out . --openapiv2_opt use_go_templates=true -``` - -or: - -```shell ---openapiv2_out=use_go_templates=true:. -``` - -### Example script - -Example of a bash script with the `use_go_templates` flag set to true: - -```shell -$ protoc -I. \ - --go_out . --go-grpc_out . \ - --grpc-gateway_out . --grpc-gateway_opt logtostderr=true \ - --openapiv2_out . \ - --openapiv2_opt logtostderr=true \ - --openapiv2_opt use_go_templates=true \ - path/to/my/proto/v1/myproto.proto -``` - -### Example proto file - -Example of a protofile with Go templates. This proto file imports documentation from another file, `tables.md`: - -```protobuf -service LoginService { - // Login - // - // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. - // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". - // - // {{import "tables.md"}} - rpc Login (LoginRequest) returns (LoginReply) { - option (google.api.http) = { - post: "/v1/example/login" - body: "*" - }; - } -} - -message LoginRequest { - // The entered username - string username = 1; - // The entered password - string password = 2; -} - -message LoginReply { - // Whether you have access or not - bool access = 1; -} -``` - -The content of `tables.md`: - -```markdown -## {{.RequestType.Name}} -| Field ID | Name | Type | Description | -| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} -| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} - -## {{.ResponseType.Name}} -| Field ID | Name | Type | Description | -| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} -| {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} -``` - -## OpenAPI output - -### SwaggerUI - -This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) - -![Screenshot OpenAPI file in SwaggerUI](../assets/images/gotemplates/swaggerui.png) - -### Postman - -This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) - -![Screenshot OpenAPI file in Postman](../assets/images/gotemplates/postman.png) - -For a more detailed example of a protofile that has Go templates enabled, -[see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). - -{% endraw %} diff --git a/docs/index.md b/docs/index.md index 1eb66f086fd..397dd66dedb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,7 @@ --- layout: default title: gRPC-Gateway -nav_order: 1 +nav_order: 0 description: "Documentation site for the gRPC-Gateway" permalink: / --- From 3dfe4c59d32ef036b92c76242dececbcb9fa3759 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Nov 2020 13:07:28 +0000 Subject: [PATCH 0736/1518] Update google.golang.org/genproto commit hash to bf037d7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 722bd43ae05..cc06ed7e831 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e + google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1 google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 5ea0a946ed0..2f05b5be8d6 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e h1:jRAe+6EDD0LNrVzmjx7FxBivivOZTKnXMbH5lvmxLP8= -google.golang.org/genproto v0.0.0-20201113130914-ce600e9a6f9e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1 h1:KOf1oTHwGQGxeRpLSgmeQsE4QtOoULhft9DBO5Lcdx0= +google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e001fdb0416..4671c2181e2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:jRAe+6EDD0LNrVzmjx7FxBivivOZTKnXMbH5lvmxLP8=", - version = "v0.0.0-20201113130914-ce600e9a6f9e", + sum = "h1:KOf1oTHwGQGxeRpLSgmeQsE4QtOoULhft9DBO5Lcdx0=", + version = "v0.0.0-20201116123041-bf037d74fda1", ) go_repository( name = "org_golang_google_grpc", From c6041b626d23530651375f525c6ece7412729924 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Nov 2020 21:36:05 +0000 Subject: [PATCH 0737/1518] Update google.golang.org/genproto commit hash to 79184cf --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cc06ed7e831..becbe27eff6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1 + google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 2f05b5be8d6..d723914ca82 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1 h1:KOf1oTHwGQGxeRpLSgmeQsE4QtOoULhft9DBO5Lcdx0= -google.golang.org/genproto v0.0.0-20201116123041-bf037d74fda1/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe h1:4zuxUDBUB7MD0/Nb3BD2e2+YHXs2BQxZ9ivB5RJd7ng= +google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4671c2181e2..3a0c70fca79 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:KOf1oTHwGQGxeRpLSgmeQsE4QtOoULhft9DBO5Lcdx0=", - version = "v0.0.0-20201116123041-bf037d74fda1", + sum = "h1:4zuxUDBUB7MD0/Nb3BD2e2+YHXs2BQxZ9ivB5RJd7ng=", + version = "v0.0.0-20201116205149-79184cff4dfe", ) go_repository( name = "org_golang_google_grpc", From f74aadc07fb748c209ff7a2b0f9272382737c4f0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 17 Nov 2020 12:47:10 +0000 Subject: [PATCH 0738/1518] Update google.golang.org/genproto commit hash to 62d171c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index becbe27eff6..4b0b8f33e10 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe + google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1 google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index d723914ca82..382d86bc39a 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe h1:4zuxUDBUB7MD0/Nb3BD2e2+YHXs2BQxZ9ivB5RJd7ng= -google.golang.org/genproto v0.0.0-20201116205149-79184cff4dfe/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1 h1:EVow1AaDgdoMjdO64/fntn4+RGTVor8YE/mkmIYsqFM= +google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3a0c70fca79..8e1b684faf0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4zuxUDBUB7MD0/Nb3BD2e2+YHXs2BQxZ9ivB5RJd7ng=", - version = "v0.0.0-20201116205149-79184cff4dfe", + sum = "h1:EVow1AaDgdoMjdO64/fntn4+RGTVor8YE/mkmIYsqFM=", + version = "v0.0.0-20201117123952-62d171c70ae1", ) go_repository( name = "org_golang_google_grpc", From bdca7898faa629a1a83488e368fd426908192c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Tue, 17 Nov 2020 17:25:08 +0100 Subject: [PATCH 0739/1518] Change FieldMask OpenAPI type to string. (#1820) * Chage FieldMAsk OpenAPI type to string. * WiP: Update examples * Update patch.md * REVIEW: change case of all of the fileds in the patch.md --- docs/docs/mapping/patch.md | 4 ++-- examples/internal/clients/abe/api/swagger.yaml | 16 +++++----------- .../abe/api_a_bit_of_everything_service.go | 12 ++++++------ .../abe/model_examplepb_update_v2_request.go | 2 +- examples/internal/clients/echo/api/swagger.yaml | 14 ++++---------- .../internal/clients/echo/api_echo_service.go | 6 +++--- .../model_examplepb_dynamic_message_update.go | 2 +- .../examplepb/a_bit_of_everything.swagger.json | 17 +++-------------- .../proto/examplepb/echo_service.swagger.json | 11 ++--------- .../internal/genopenapi/template.go | 5 +---- .../internal/genopenapi/template_test.go | 11 ++--------- 11 files changed, 30 insertions(+), 70 deletions(-) diff --git a/docs/docs/mapping/patch.md b/docs/docs/mapping/patch.md index 77b5e805fd8..bac4ae85f51 100644 --- a/docs/docs/mapping/patch.md +++ b/docs/docs/mapping/patch.md @@ -82,7 +82,7 @@ else in our resource the same. ```shell $ curl \ - --data '{"string_value": "strprefix/foo"}' \ + --data '{"stringValue": "strprefix/foo"}' \ -X PATCH \ http://address:port/v2/example/a_bit_of_everything/1 ``` @@ -94,7 +94,7 @@ that is what we specify in the field_mask. ```shell $ curl \ - --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' \ + --data '{"abe":{"singleNested":{"amount":457},"stringValue":"some value that will not get updated because not in the field mask"},"updateMask":"singleNested"}}' \ -X PATCH \ http://address:port/v2a/example/a_bit_of_everything/1 ``` diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index b98557969a3..ae436d26464 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1916,11 +1916,9 @@ paths: in: "query" description: "The paths to update." required: false - type: "array" - items: - type: "string" - collectionFormat: "multi" + type: "string" x-exportParamName: "UpdateMask" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1962,11 +1960,9 @@ paths: in: "query" description: "The paths to update." required: false - type: "array" - items: - type: "string" - collectionFormat: "multi" + type: "string" x-exportParamName: "UpdateMask" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2683,10 +2679,8 @@ definitions: abe: $ref: "#/definitions/examplepbABitOfEverything" updateMask: - type: "array" + type: "string" description: "The paths to update." - items: - type: "string" title: "UpdateV2Request request for update includes the message and the update\ \ mask" pathenumPathEnum: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 3c0168f725f..80e0e1453cb 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -3582,13 +3582,13 @@ ABitOfEverythingServiceApiService * @param abeUuid * @param body * @param optional nil or *ABitOfEverythingServiceUpdateV2Opts - Optional Parameters: - * @param "UpdateMask" (optional.Interface of []string) - The paths to update. + * @param "UpdateMask" (optional.String) - The paths to update. @return interface{} */ type ABitOfEverythingServiceUpdateV2Opts struct { - UpdateMask optional.Interface + UpdateMask optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) { @@ -3609,7 +3609,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.UpdateMask.IsSet() { - localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "multi")) + localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3740,13 +3740,13 @@ ABitOfEverythingServiceApiService * @param abeUuid * @param body * @param optional nil or *ABitOfEverythingServiceUpdateV22Opts - Optional Parameters: - * @param "UpdateMask" (optional.Interface of []string) - The paths to update. + * @param "UpdateMask" (optional.String) - The paths to update. @return interface{} */ type ABitOfEverythingServiceUpdateV22Opts struct { - UpdateMask optional.Interface + UpdateMask optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything, localVarOptionals *ABitOfEverythingServiceUpdateV22Opts) (interface{}, *http.Response, error) { @@ -3767,7 +3767,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.UpdateMask.IsSet() { - localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "multi")) + localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_examplepb_update_v2_request.go b/examples/internal/clients/abe/model_examplepb_update_v2_request.go index 2c867a542d0..dab839628b5 100644 --- a/examples/internal/clients/abe/model_examplepb_update_v2_request.go +++ b/examples/internal/clients/abe/model_examplepb_update_v2_request.go @@ -13,5 +13,5 @@ package abe type ExamplepbUpdateV2Request struct { Abe *ExamplepbABitOfEverything `json:"abe,omitempty"` // The paths to update. - UpdateMask []string `json:"updateMask,omitempty"` + UpdateMask string `json:"updateMask,omitempty"` } diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index c4221e8b272..cbda5f0f24b 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -433,11 +433,9 @@ paths: - name: "updateMask" in: "query" required: false - type: "array" - items: - type: "string" - collectionFormat: "multi" + type: "string" x-exportParamName: "UpdateMask" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -468,16 +466,12 @@ definitions: body: $ref: "#/definitions/examplepbDynamicMessage" updateMask: - type: "array" - items: - type: "string" + type: "string" example: body: structField: "{}" valueField: "{}" - updateMask: - - "updateMask" - - "updateMask" + updateMask: "updateMask" examplepbEmbedded: type: "object" properties: diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index 0944bc92be4..1bcf461f765 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -933,13 +933,13 @@ EchoServiceApiService EchoPatch method receives a NonStandardUpdateRequest and r * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param body * @param optional nil or *EchoServiceEchoPatchOpts - Optional Parameters: - * @param "UpdateMask" (optional.Interface of []string) - + * @param "UpdateMask" (optional.String) - @return ExamplepbDynamicMessageUpdate */ type EchoServiceEchoPatchOpts struct { - UpdateMask optional.Interface + UpdateMask optional.String } func (a *EchoServiceApiService) EchoServiceEchoPatch(ctx context.Context, body ExamplepbDynamicMessage, localVarOptionals *EchoServiceEchoPatchOpts) (ExamplepbDynamicMessageUpdate, *http.Response, error) { @@ -959,7 +959,7 @@ func (a *EchoServiceApiService) EchoServiceEchoPatch(ctx context.Context, body E localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.UpdateMask.IsSet() { - localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "multi")) + localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} diff --git a/examples/internal/clients/echo/model_examplepb_dynamic_message_update.go b/examples/internal/clients/echo/model_examplepb_dynamic_message_update.go index cc7fb56195c..086ab7c045e 100644 --- a/examples/internal/clients/echo/model_examplepb_dynamic_message_update.go +++ b/examples/internal/clients/echo/model_examplepb_dynamic_message_update.go @@ -11,5 +11,5 @@ package echo type ExamplepbDynamicMessageUpdate struct { Body *ExamplepbDynamicMessage `json:"body,omitempty"` - UpdateMask []string `json:"updateMask,omitempty"` + UpdateMask string `json:"updateMask,omitempty"` } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index c1396315335..6bfcff12adf 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2264,11 +2264,7 @@ "description": "The paths to update.", "in": "query", "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" + "type": "string" } ], "tags": [ @@ -2328,11 +2324,7 @@ "description": "The paths to update.", "in": "query", "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" + "type": "string" } ], "tags": [ @@ -3264,10 +3256,7 @@ "$ref": "#/definitions/examplepbABitOfEverything" }, "updateMask": { - "type": "array", - "items": { - "type": "string" - }, + "type": "string", "description": "The paths to update." } }, diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 501cfc86152..80deb2a9a29 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -526,11 +526,7 @@ "name": "updateMask", "in": "query", "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" + "type": "string" } ], "tags": [ @@ -559,10 +555,7 @@ "$ref": "#/definitions/examplepbDynamicMessage" }, "updateMask": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } }, diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index ee2c8973dbf..86ad6661871 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -30,10 +30,7 @@ import ( // https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/encoding/protojson/well_known_types.go var wktSchemas = map[string]schemaCore{ ".google.protobuf.FieldMask": { - Type: "array", - Items: (*openapiItemsObject)(&schemaCore{ - Type: "string", - }), + Type: "string", }, ".google.protobuf.Timestamp": { Type: "string", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 799d9f317b2..34125584cbf 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -851,11 +851,7 @@ func TestMessageToQueryParametersWellKnownTypes(t *testing.T) { Name: "a_field_mask", In: "query", Required: false, - Type: "array", - Items: &openapiItemsObject{ - Type: "string", - }, - CollectionFormat: "multi", + Type: "string", }, { Name: "a_timestamp", @@ -2443,10 +2439,7 @@ func TestSchemaOfField(t *testing.T) { refs: make(refMap), expected: openapiSchemaObject{ schemaCore: schemaCore{ - Type: "array", - Items: &openapiItemsObject{ - Type: "string", - }, + Type: "string", }, }, }, From 1a00d192a78b49a599319d47fc0e4984506a136e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Nov 2020 13:31:51 +0000 Subject: [PATCH 0740/1518] Update google.golang.org/genproto commit hash to 9b1e624 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4b0b8f33e10..e41c0da1aea 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1 + google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 382d86bc39a..c2bf7588985 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1 h1:EVow1AaDgdoMjdO64/fntn4+RGTVor8YE/mkmIYsqFM= -google.golang.org/genproto v0.0.0-20201117123952-62d171c70ae1/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 h1:Rt0FRalMgdSlXAVJvX4pr65KfqaxHXSLkSJRD9pw6g0= +google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8e1b684faf0..a2f17397d21 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:EVow1AaDgdoMjdO64/fntn4+RGTVor8YE/mkmIYsqFM=", - version = "v0.0.0-20201117123952-62d171c70ae1", + sum = "h1:Rt0FRalMgdSlXAVJvX4pr65KfqaxHXSLkSJRD9pw6g0=", + version = "v0.0.0-20201119123407-9b1e624d6bc4", ) go_repository( name = "org_golang_google_grpc", From 370d869f65d1ffb3d07187fb0db238eca2371ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Sat, 21 Nov 2020 14:25:11 +0100 Subject: [PATCH 0741/1518] Rest protoc-gen-openapiv2 flags as rule attrs (#1832) * Rest protoc-gen-openapiv2 flags as rule attrs Exposes rest of the protoc-gen-openapiv2 flags as attributes in the Baze rule. Additionaly: - sorts atttributes according to the order how flags in tha main are defined - adds docs to the attrributes Fixes #1831 * Apply suggestions from code review Co-authored-by: Johan Brandhorst-Satzkorn * REVIEW: change ovelooked copy cat error in the condition * REVIEW: adjust json_names_for_fields doc Co-authored-by: Johan Brandhorst-Satzkorn --- protoc-gen-openapiv2/defs.bzl | 105 ++++++++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 5 deletions(-) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 638171647ab..4b255fd3082 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -51,10 +51,18 @@ def _run_proto_gen_openapi( transitive_proto_srcs, protoc, protoc_gen_openapiv2, - grpc_api_configuration, single_output, + allow_delete_body, + grpc_api_configuration, json_names_for_fields, + repeated_path_param_separator, + include_package_in_tags, fqn_for_openapi_name, + use_go_templates, + disable_default_errors, + enums_as_ints, + simple_operation_ids, + openapi_configuration, generate_unbound_methods): args = actions.args() @@ -68,6 +76,10 @@ def _run_proto_gen_openapi( extra_inputs.append(grpc_api_configuration) args.add("--openapiv2_opt", "grpc_api_configuration=%s" % grpc_api_configuration.path) + if openapi_configuration: + extra_inputs.append(openapi_configuration) + args.add("--openapiv2_opt", "openapi_configuration=%s" % openapi_configuration.path) + if not json_names_for_fields: args.add("--openapiv2_opt", "json_names_for_fields=false") @@ -77,6 +89,26 @@ def _run_proto_gen_openapi( if generate_unbound_methods: args.add("--openapiv2_opt", "generate_unbound_methods=true") + if simple_operation_ids: + args.add("--openapiv2_opt", "simple_operation_ids=true") + + if allow_delete_body: + args.add("--openapiv2_opt", "allow_delete_body=true") + + if include_package_in_tags: + args.add("--openapiv2_opt", "include_package_in_tags=true") + + if use_go_templates: + args.add("--openapiv2_opt", "use_go_templates=true") + + if disable_default_errors: + args.add("--openapiv2_opt", "disable_default_errors=true") + + if enums_as_ints: + args.add("--openapiv2_opt", "enums_as_ints=true") + + args.add("--openapiv2_opt", "repeated_path_param_separator=%s" % repeated_path_param_separator) + proto_file_infos = _direct_source_infos(proto_info) # TODO(yannic): Use |proto_info.transitive_descriptor_sets| when @@ -158,10 +190,18 @@ def _proto_gen_openapi_impl(ctx): ), protoc = ctx.executable._protoc, protoc_gen_openapiv2 = ctx.executable._protoc_gen_openapi, - grpc_api_configuration = ctx.file.grpc_api_configuration, single_output = ctx.attr.single_output, + allow_delete_body = ctx.attr.allow_delete_body, + grpc_api_configuration = ctx.file.grpc_api_configuration, json_names_for_fields = ctx.attr.json_names_for_fields, + repeated_path_param_separator = ctx.attr.repeated_path_param_separator, + include_package_in_tags = ctx.attr.include_package_in_tags, fqn_for_openapi_name = ctx.attr.fqn_for_openapi_name, + use_go_templates = ctx.attr.use_go_templates, + disable_default_errors = ctx.attr.disable_default_errors, + enums_as_ints = ctx.attr.enums_as_ints, + simple_operation_ids = ctx.attr.simple_operation_ids, + openapi_configuration = ctx.attr.openapi_configuration, generate_unbound_methods = ctx.attr.generate_unbound_methods, ), ), @@ -174,25 +214,80 @@ protoc_gen_openapiv2 = rule( mandatory = True, providers = [ProtoInfo], ), - "grpc_api_configuration": attr.label( - allow_single_file = True, + "single_output": attr.bool( + default = False, mandatory = False, + doc = "if set, the rule will generate a single OpenAPI file", ), - "single_output": attr.bool( + "allow_delete_body": attr.bool( default = False, mandatory = False, + doc = "unless set, HTTP DELETE methods may not have a body", + ), + "grpc_api_configuration": attr.label( + allow_single_file = True, + mandatory = False, + doc = "path to file which describes the gRPC API Configuration in YAML format", ), "json_names_for_fields": attr.bool( default = True, mandatory = False, + doc = "if disabled, the original proto name will be used for generating OpenAPI definitions", + ), + "repeated_path_param_separator": attr.string( + default = "csv", + mandatory = False, + values = ["csv", "pipes", "ssv", "tsv"], + doc = "configures how repeated fields should be split." + + " Allowed values are `csv`, `pipes`, `ssv` and `tsv`", + ), + "include_package_in_tags": attr.bool( + default = False, + mandatory = False, + doc = "if unset, the gRPC service name is added to the `Tags`" + + " field of each operation. If set and the `package` directive" + + " is shown in the proto file, the package name will be " + + " prepended to the service name", ), "fqn_for_openapi_name": attr.bool( default = False, mandatory = False, + doc = "if set, the object's OpenAPI names will use the fully" + + " qualified names from the proto definition" + + " (ie my.package.MyMessage.MyInnerMessage", + ), + "use_go_templates": attr.bool( + default = False, + mandatory = False, + doc = "if set, you can use Go templates in protofile comments", + ), + "disable_default_errors": attr.bool( + default = False, + mandatory = False, + doc = "if set, disables generation of default errors." + + " This is useful if you have defined custom error handling", + ), + "enums_as_ints": attr.bool( + default = False, + mandatory = False, + doc = "whether to render enum values as integers, as opposed to string values", + ), + "simple_operation_ids": attr.bool( + default = False, + mandatory = False, + doc = "whether to remove the service prefix in the operationID" + + " generation. Can introduce duplicate operationIDs, use with caution.", + ), + "openapi_configuration": attr.label( + allow_single_file = True, + mandatory = False, + doc = "path to file which describes the OpenAPI Configuration in YAML format", ), "generate_unbound_methods": attr.bool( default = False, mandatory = False, + doc = "generate swagger metadata even for RPC methods that have" + + " no HttpRule annotation", ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", From a3b1578b4683297d9fe0fdd34ce0c10b157f7762 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 23 Nov 2020 12:54:28 +0000 Subject: [PATCH 0742/1518] Fix some broken docs links (#1839) Fixes #1836 --- docs/docs/mapping/customizingopenapioutput.md | 14 +++++++--- docs/docs/mapping/customizingyourgateway.md | 5 ---- docs/docs/mapping/grpcapiconfiguration.md | 27 ++++++++++++++----- docs/docs/mapping/patch.md | 4 +-- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/docs/docs/mapping/customizingopenapioutput.md b/docs/docs/mapping/customizingopenapioutput.md index 1650c62182f..5dedd90c10e 100644 --- a/docs/docs/mapping/customizingopenapioutput.md +++ b/docs/docs/mapping/customizingopenapioutput.md @@ -46,7 +46,7 @@ message ABitOfEverything { Operations can also be customized: ```protobuf -service ABitOfEverythingService { +service ABitOfEverythingService { rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1/example/a_bit_of_everything/{uuid}" @@ -95,7 +95,13 @@ The following options are used in the Open API output: * `REQUIRED` - marks a field as required * `OUTPUT_ONLY` - marks a field as readonly -Google defines a couple other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` - that are not currently used. `OPTIONAL` support is currently under discussion in [this issue](https://github.com/grpc-ec system/grpc-gateway/issues/669). For `IMMUTABLE` and `INPUT_ONLY` fields, there is an [open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) in the Open API specification for adding functionality for write once or immutable fields to the spec. +Google defines a couple other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` - +that are not currently used. `OPTIONAL` support is currently under discussion +in [this issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/669). +For `IMMUTABLE` and `INPUT_ONLY` fields, there is an +[open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) +in the Open API specification for adding functionality for write once or +immutable fields to the spec. # Using go templates in protofile comments @@ -189,13 +195,13 @@ The content of `tables.md`: This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) -![Screenshot OpenAPI file in SwaggerUI](../assets/images/gotemplates/swaggerui.png) +![Screenshot OpenAPI file in SwaggerUI](../../assets/images/gotemplates/swaggerui.png) ### Postman This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) -![Screenshot OpenAPI file in Postman](../assets/images/gotemplates/postman.png) +![Screenshot OpenAPI file in Postman](../../assets/images/gotemplates/postman.png) For a more detailed example of a protofile that has Go templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). diff --git a/docs/docs/mapping/customizingyourgateway.md b/docs/docs/mapping/customizingyourgateway.md index a4f4e4732d6..19236ce76ee 100644 --- a/docs/docs/mapping/customizingyourgateway.md +++ b/docs/docs/mapping/customizingyourgateway.md @@ -258,11 +258,6 @@ To override error handling for a `*runtime.ServeMux`, use the `runtime.WithErrorHandler` option. This will configure all unary error responses to pass through this error handler. -See https://mycodesmells.com/post/grpc-gateway-error-handler for an example -of writing a custom error handler function. Note that this post targets -the v1 release of the gateway, and you no longer assign to `HTTPError` to -configure an error handler. - ## Stream Error Handler The error handler described in the previous section applies only diff --git a/docs/docs/mapping/grpcapiconfiguration.md b/docs/docs/mapping/grpcapiconfiguration.md index b6a33f329f3..06bfc6cf69b 100644 --- a/docs/docs/mapping/grpcapiconfiguration.md +++ b/docs/docs/mapping/grpcapiconfiguration.md @@ -27,15 +27,30 @@ NOTE: the same option is also supported by the `gen-openapiv2` plugin. ## Using an external configuration file -Google Cloud Platform offers a way to do this for services hosted with them called ["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). It can be used to define the behavior of a gRPC API service without modifications to the service itself in the form of [YAML](https://en.wikipedia.org/wiki/YAML) configuration files. - -grpc-gateway generators implement the [HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) of this specification. This allows you to take a completely unannotated service proto file, add a YAML file describing its HTTP endpoints and use them together like a annotated proto file with the grpc-gateway generators. - -OpenAPI options may also be configured via ["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files. +Google Cloud Platform offers a way to do this for services +hosted with them called +["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). +It can be used to define the behavior of a gRPC API service +without modifications to the service itself in the form of +[YAML](https://en.wikipedia.org/wiki/YAML) configuration files. + +grpc-gateway generators implement the +[HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) +of this specification. This allows you to take a completely +unannotated service proto file, add a YAML file describing +its HTTP endpoints and use them together like a annotated +proto file with the grpc-gateway generators. + +OpenAPI options may also be configured via +["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files. ### Usage of gRPC API Configuration YAML files -The following is equivalent to the basic [usage example](usage.html) but without direct annotation for grpc-gateway in the .proto file. Only some steps require minor changes to use a gRPC API Configuration YAML file instead: +The following is equivalent to the basic +[`README.md`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md#usage) +example but without direct +annotation for grpc-gateway in the .proto file. Only some steps require minor +changes to use a gRPC API Configuration YAML file instead: 1. Define your service in gRPC as usual diff --git a/docs/docs/mapping/patch.md b/docs/docs/mapping/patch.md index bac4ae85f51..38ad134a0b0 100644 --- a/docs/docs/mapping/patch.md +++ b/docs/docs/mapping/patch.md @@ -18,13 +18,13 @@ There are two scenarios: - The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the - [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L428-L431) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. - The FieldMask is exposed to the REST request (as in the second additional binding in the - [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L432-L435) example). For this case, the field mask is left untouched by the gateway. From ff93fab0103ee2a4f957c77ccf9d139305b19cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Tue, 24 Nov 2020 10:35:22 +0100 Subject: [PATCH 0743/1518] Sets proper target type for openapi_configuration attr. (#1837) --- protoc-gen-openapiv2/defs.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 4b255fd3082..ea3226762a5 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -201,7 +201,7 @@ def _proto_gen_openapi_impl(ctx): disable_default_errors = ctx.attr.disable_default_errors, enums_as_ints = ctx.attr.enums_as_ints, simple_operation_ids = ctx.attr.simple_operation_ids, - openapi_configuration = ctx.attr.openapi_configuration, + openapi_configuration = ctx.file.openapi_configuration, generate_unbound_methods = ctx.attr.generate_unbound_methods, ), ), From 757a7e0295d0c309eb24ed60dc9f2492001d1838 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 24 Nov 2020 19:20:58 +0000 Subject: [PATCH 0744/1518] Update module google/go-cmp to v0.5.4 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e41c0da1aea..19226315115 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.3 + github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 diff --git a/go.sum b/go.sum index c2bf7588985..98a7fbf0003 100644 --- a/go.sum +++ b/go.sum @@ -93,8 +93,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/repositories.bzl b/repositories.bzl index a2f17397d21..74d3d0b6b0d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -137,8 +137,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=", - version = "v0.5.3", + sum = "h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=", + version = "v0.5.4", ) go_repository( From 865774a90ce89b9df9ed9a58e79df76cc4f591b7 Mon Sep 17 00:00:00 2001 From: Elijah Roberts Date: Wed, 25 Nov 2020 04:21:43 -0700 Subject: [PATCH 0745/1518] Implement openapi response headers annotations (#1841) * Update v1 renovate config (#1738) Not even sure if renovate cares to check this branch but it can't hurt. * Update gorelease base for v1 (#1748) * feat: protoc-gen-swagger: Implement Response Header(s) object, Implement Field Enum,Example&Format attributes #1729 * fix: resolve linting errors * fix: running per CI * fix: Resolve PR requests * a bunch of whitespace/format changes... have since added this to my IDE * remove any.Any objects, and convert them to string * move runtime regex strings to global variables * update examples * update tests * fix: Running go mode tidy to cleanup go.mod and go.sum * fix: Resolving PR comments * remove regex logic, and update functions to use simple booleans * cleanup example proto * enforce CanonicalMIMEHeaderKey for header name * Update protoc-gen-swagger/genswagger/template.go simplifying string check Co-authored-by: Johan Brandhorst-Satzkorn * Update protoc-gen-swagger/genswagger/template.go fix: remove string comparisons Co-authored-by: Johan Brandhorst-Satzkorn * fix: resolving MR requests * fix: unqouting error * Update protoc-gen-swagger/genswagger/template.go Co-authored-by: Johan Brandhorst-Satzkorn * Update protoc-gen-swagger/genswagger/template.go Co-authored-by: Johan Brandhorst-Satzkorn * fix: adding requested changes * parse unsigned ints with strconv.ParseUint * update unqoute logic * Updating integer switch * Minor nits * Remove extra newlines * Pulling in changes for v2 Co-authored-by: Johan Brandhorst-Satzkorn --- examples/internal/clients/abe/BUILD.bazel | 2 + .../internal/clients/abe/api/swagger.yaml | 129 ++ .../abe/api_a_bit_of_everything_service.go | 242 ++ .../abe/api_camel_case_service_name.go | 11 + examples/internal/clients/abe/api_echo_rpc.go | 33 + .../abe/model_examplepb_error_object.go | 18 + .../abe/model_examplepb_error_response.go | 17 + .../proto/examplepb/a_bit_of_everything.pb.go | 1984 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 46 + .../a_bit_of_everything.swagger.json | 190 ++ .../internal/genopenapi/template.go | 192 ++ .../internal/genopenapi/template_test.go | 566 +++++ .../internal/genopenapi/types.go | 12 + protoc-gen-openapiv2/options/openapiv2.pb.go | 588 +++-- protoc-gen-openapiv2/options/openapiv2.proto | 66 +- 15 files changed, 2984 insertions(+), 1112 deletions(-) create mode 100644 examples/internal/clients/abe/model_examplepb_error_object.go create mode 100644 examples/internal/clients/abe/model_examplepb_error_response.go diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index eb9cf65c140..360e81c4f02 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -17,6 +17,8 @@ go_library( "model_examplepb_body.go", "model_examplepb_book.go", "model_examplepb_check_status_response.go", + "model_examplepb_error_object.go", + "model_examplepb_error_response.go", "model_examplepb_numeric_enum.go", "model_examplepb_update_v2_request.go", "model_message_path_enum_nested_path_enum.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index ae436d26464..4b13f6e3ec8 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -59,6 +59,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -97,6 +101,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" 503: description: "Returned when the resource is temporarily unavailable." schema: {} @@ -404,6 +412,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -711,6 +723,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1005,6 +1021,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1318,6 +1338,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1475,6 +1499,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1508,6 +1536,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1545,6 +1577,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1576,6 +1612,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1772,6 +1812,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1800,6 +1844,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1840,6 +1888,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1891,6 +1943,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1936,6 +1992,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -1980,6 +2040,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2019,6 +2083,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" 503: description: "Returned when the resource is temporarily unavailable." schema: {} @@ -2064,6 +2132,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" 503: description: "Returned when the resource is temporarily unavailable." schema: {} @@ -2098,6 +2170,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2125,6 +2201,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2155,6 +2235,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2193,6 +2277,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2220,6 +2308,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2258,6 +2350,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2293,6 +2389,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2331,6 +2431,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" default: description: "An unexpected error response." schema: @@ -2665,6 +2769,31 @@ definitions: - typeUrl: "typeUrl" value: "value" message: "message" + examplepbErrorObject: + type: "object" + properties: + code: + type: "integer" + format: "integer" + description: "Response code" + title: "code" + message: + type: "string" + description: "Response message" + title: "message" + pattern: "^[a-zA-Z0-9]{1, 32}$" + examplepbErrorResponse: + type: "object" + properties: + correlationId: + type: "string" + format: "uuid" + example: "2438ac3c-37eb-4902-adef-ed16b4431030" + description: "Unique event identifier for server requests" + title: "x-correlation-id" + pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" + error: + $ref: "#/definitions/examplepbErrorObject" examplepbNumericEnum: type: "string" description: "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE\ diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 80e0e1453cb..777a981ef34 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -155,6 +155,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckExternal return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -469,6 +480,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -783,6 +805,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1090,6 +1123,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1233,6 +1277,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckStatus(c return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1415,6 +1470,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1561,6 +1627,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBody(ct return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1719,6 +1796,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ct return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -1867,6 +1955,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2012,6 +2111,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx co return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2155,6 +2265,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDeta return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2303,6 +2424,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWit return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2609,6 +2741,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2832,6 +2975,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetRepeatedQu return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -2977,6 +3131,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceLookup(ctx co return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3120,6 +3285,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceOverwriteResp return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3268,6 +3444,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostWithEmpty return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3411,6 +3598,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceTimeout(ctx c return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3559,6 +3757,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx co return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3717,6 +3926,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -3875,6 +4095,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -4023,6 +4254,17 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); diff --git a/examples/internal/clients/abe/api_camel_case_service_name.go b/examples/internal/clients/abe/api_camel_case_service_name.go index 9a71f70e61e..ea4269f06b4 100644 --- a/examples/internal/clients/abe/api_camel_case_service_name.go +++ b/examples/internal/clients/abe/api_camel_case_service_name.go @@ -151,6 +151,17 @@ func (a *CamelCaseServiceNameApiService) CamelCaseServiceNameEmpty(ctx context.C return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); diff --git a/examples/internal/clients/abe/api_echo_rpc.go b/examples/internal/clients/abe/api_echo_rpc.go index 3abd88ac7f4..f79c8a61b37 100644 --- a/examples/internal/clients/abe/api_echo_rpc.go +++ b/examples/internal/clients/abe/api_echo_rpc.go @@ -156,6 +156,17 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Context, val return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 503 { var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -314,6 +325,17 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, bo return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 503 { var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -479,6 +501,17 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho3(ctx context.Context, lo return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + if localVarHttpResponse.StatusCode == 503 { var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); diff --git a/examples/internal/clients/abe/model_examplepb_error_object.go b/examples/internal/clients/abe/model_examplepb_error_object.go new file mode 100644 index 00000000000..b41c68fa852 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_error_object.go @@ -0,0 +1,18 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbErrorObject struct { + // Response code + Code int32 `json:"code,omitempty"` + // Response message + Message string `json:"message,omitempty"` +} diff --git a/examples/internal/clients/abe/model_examplepb_error_response.go b/examples/internal/clients/abe/model_examplepb_error_response.go new file mode 100644 index 00000000000..55e17df4a48 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_error_response.go @@ -0,0 +1,17 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbErrorResponse struct { + // Unique event identifier for server requests + CorrelationId string `json:"correlationId,omitempty"` + Error_ *ExamplepbErrorObject `json:"error,omitempty"` +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 0a081081d5c..dcc2804f964 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -131,7 +131,117 @@ func (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber { // Deprecated: Use ABitOfEverything_Nested_DeepEnum.Descriptor instead. func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0, 0, 0} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2, 0, 0} +} + +type ErrorResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CorrelationId string `protobuf:"bytes,1,opt,name=correlationId,proto3" json:"correlationId,omitempty"` + Error *ErrorObject `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` +} + +func (x *ErrorResponse) Reset() { + *x = ErrorResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ErrorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ErrorResponse) ProtoMessage() {} + +func (x *ErrorResponse) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead. +func (*ErrorResponse) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0} +} + +func (x *ErrorResponse) GetCorrelationId() string { + if x != nil { + return x.CorrelationId + } + return "" +} + +func (x *ErrorResponse) GetError() *ErrorObject { + if x != nil { + return x.Error + } + return nil +} + +type ErrorObject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *ErrorObject) Reset() { + *x = ErrorObject{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ErrorObject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ErrorObject) ProtoMessage() {} + +func (x *ErrorObject) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ErrorObject.ProtoReflect.Descriptor instead. +func (*ErrorObject) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1} +} + +func (x *ErrorObject) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *ErrorObject) GetMessage() string { + if x != nil { + return x.Message + } + return "" } // Intentionally complicated message type to cover many features of Protobuf. @@ -193,7 +303,7 @@ type ABitOfEverything struct { func (x *ABitOfEverything) Reset() { *x = ABitOfEverything{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -206,7 +316,7 @@ func (x *ABitOfEverything) String() string { func (*ABitOfEverything) ProtoMessage() {} func (x *ABitOfEverything) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -219,7 +329,7 @@ func (x *ABitOfEverything) ProtoReflect() protoreflect.Message { // Deprecated: Use ABitOfEverything.ProtoReflect.Descriptor instead. func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2} } func (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { @@ -539,7 +649,7 @@ type ABitOfEverythingRepeated struct { func (x *ABitOfEverythingRepeated) Reset() { *x = ABitOfEverythingRepeated{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -552,7 +662,7 @@ func (x *ABitOfEverythingRepeated) String() string { func (*ABitOfEverythingRepeated) ProtoMessage() {} func (x *ABitOfEverythingRepeated) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -565,7 +675,7 @@ func (x *ABitOfEverythingRepeated) ProtoReflect() protoreflect.Message { // Deprecated: Use ABitOfEverythingRepeated.ProtoReflect.Descriptor instead. func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{3} } func (x *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float32 { @@ -691,7 +801,7 @@ type CheckStatusResponse struct { func (x *CheckStatusResponse) Reset() { *x = CheckStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -704,7 +814,7 @@ func (x *CheckStatusResponse) String() string { func (*CheckStatusResponse) ProtoMessage() {} func (x *CheckStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -717,7 +827,7 @@ func (x *CheckStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckStatusResponse.ProtoReflect.Descriptor instead. func (*CheckStatusResponse) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{4} } func (x *CheckStatusResponse) GetStatus() *status.Status { @@ -738,7 +848,7 @@ type Body struct { func (x *Body) Reset() { *x = Body{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -751,7 +861,7 @@ func (x *Body) String() string { func (*Body) ProtoMessage() {} func (x *Body) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -764,7 +874,7 @@ func (x *Body) ProtoReflect() protoreflect.Message { // Deprecated: Use Body.ProtoReflect.Descriptor instead. func (*Body) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{3} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{5} } func (x *Body) GetName() string { @@ -786,7 +896,7 @@ type MessageWithBody struct { func (x *MessageWithBody) Reset() { *x = MessageWithBody{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +909,7 @@ func (x *MessageWithBody) String() string { func (*MessageWithBody) ProtoMessage() {} func (x *MessageWithBody) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +922,7 @@ func (x *MessageWithBody) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageWithBody.ProtoReflect.Descriptor instead. func (*MessageWithBody) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{4} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{6} } func (x *MessageWithBody) GetId() string { @@ -843,7 +953,7 @@ type UpdateV2Request struct { func (x *UpdateV2Request) Reset() { *x = UpdateV2Request{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -856,7 +966,7 @@ func (x *UpdateV2Request) String() string { func (*UpdateV2Request) ProtoMessage() {} func (x *UpdateV2Request) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -869,7 +979,7 @@ func (x *UpdateV2Request) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateV2Request.ProtoReflect.Descriptor instead. func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{5} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{7} } func (x *UpdateV2Request) GetAbe() *ABitOfEverything { @@ -910,7 +1020,7 @@ type Book struct { func (x *Book) Reset() { *x = Book{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -923,7 +1033,7 @@ func (x *Book) String() string { func (*Book) ProtoMessage() {} func (x *Book) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -936,7 +1046,7 @@ func (x *Book) ProtoReflect() protoreflect.Message { // Deprecated: Use Book.ProtoReflect.Descriptor instead. func (*Book) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{6} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{8} } func (x *Book) GetName() string { @@ -987,7 +1097,7 @@ type CreateBookRequest struct { func (x *CreateBookRequest) Reset() { *x = CreateBookRequest{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1000,7 +1110,7 @@ func (x *CreateBookRequest) String() string { func (*CreateBookRequest) ProtoMessage() {} func (x *CreateBookRequest) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1013,7 +1123,7 @@ func (x *CreateBookRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBookRequest.ProtoReflect.Descriptor instead. func (*CreateBookRequest) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{7} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{9} } func (x *CreateBookRequest) GetParent() string { @@ -1053,7 +1163,7 @@ type ABitOfEverything_Nested struct { func (x *ABitOfEverything_Nested) Reset() { *x = ABitOfEverything_Nested{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1066,7 +1176,7 @@ func (x *ABitOfEverything_Nested) String() string { func (*ABitOfEverything_Nested) ProtoMessage() {} func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1079,7 +1189,7 @@ func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { // Deprecated: Use ABitOfEverything_Nested.ProtoReflect.Descriptor instead. func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0, 0} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2, 0} } func (x *ABitOfEverything_Nested) GetName() string { @@ -1139,372 +1249,602 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, - 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x54, 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, - 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, - 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, - 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, + 0x02, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xba, 0x01, 0x92, 0x41, 0xb6, 0x01, 0x2a, + 0x10, 0x78, 0x2d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x69, + 0x64, 0x32, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x4a, 0x26, + 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, + 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, + 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x8a, 0x01, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, + 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, + 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0xa2, 0x02, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x2c, 0x92, 0x41, 0x29, 0x2a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x32, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x8a, + 0x01, 0x07, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x24, 0xa2, 0x02, 0x07, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x65, 0x72, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x92, 0x41, 0x32, 0x2a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, + 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x1f, 0x0a, 0x10, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, + 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x68, 0x0a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0x92, 0x41, 0x51, + 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, + 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, + 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, + 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, + 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, + 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, + 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, + 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, - 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, - 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, - 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, - 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, + 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, + 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, + 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, + 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, + 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, + 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, + 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xe8, 0x01, 0x0a, 0x06, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, + 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, + 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, + 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, + 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, - 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, - 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, - 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, 0x84, 0x01, + 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, 0x7b, 0x22, + 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, 0x65, 0x31, + 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, 0x39, 0x2d, + 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, 0x42, 0x0d, + 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, + 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, + 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, + 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, + 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, + 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, + 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, - 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, - 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, + 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, + 0x6f, 0x6b, 0x49, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xe4, 0x2a, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, - 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, - 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, - 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x26, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, - 0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, - 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, - 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, - 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, - 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, - 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, - 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, + 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, + 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, + 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, + 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, + 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, + 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, + 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, + 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x32, 0x30, 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, - 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, - 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, - 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, - 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, - 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, - 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, - 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, - 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, - 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, - 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, - 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xe4, 0x2a, 0x0a, 0x17, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, + 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, 0x03, 0x35, + 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, + 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, + 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, + 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, @@ -1512,432 +1852,251 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, - 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, - 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, - 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, - 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, - 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, + 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, - 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, - 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, - 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, - 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, + 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, - 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, - 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, - 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, - 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, - 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, - 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, - 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, - 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, - 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, - 0x9a, 0x02, 0x01, 0x03, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, + 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, + 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, + 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, + 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, - 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, + 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, + 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, - 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, - 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, - 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, - 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, - 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, + 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, + 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, + 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, + 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, + 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, + 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, + 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, + 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, - 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, - 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, - 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, - 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, - 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, - 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, - 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, - 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, - 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x83, 0x0a, - 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xb2, - 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, - 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, - 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, - 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, - 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, - 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, - 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, 0x03, 0x0a, 0x0f, - 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, - 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, - 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, - 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, + 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, + 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, + 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, + 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, + 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, - 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, - 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, - 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, - 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, + 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, + 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, + 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, + 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, + 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, + 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, + 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1953,116 +2112,119 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZI } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ (NumericEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - (*ABitOfEverything)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - (*ABitOfEverythingRepeated)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - (*CheckStatusResponse)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - (*Body)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.Body - (*MessageWithBody)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - (*UpdateV2Request)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - (*Book)(nil), // 8: grpc.gateway.examples.internal.proto.examplepb.Book - (*CreateBookRequest)(nil), // 9: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - (*ABitOfEverything_Nested)(nil), // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - nil, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - nil, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - (pathenum.PathEnum)(0), // 14: grpc.gateway.examples.internal.pathenum.PathEnum - (pathenum.MessagePathEnum_NestedPathEnum)(0), // 15: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*empty.Empty)(nil), // 16: google.protobuf.Empty - (*timestamp.Timestamp)(nil), // 17: google.protobuf.Timestamp - (*status.Status)(nil), // 18: google.rpc.Status - (*field_mask.FieldMask)(nil), // 19: google.protobuf.FieldMask - (*sub2.IdMessage)(nil), // 20: grpc.gateway.examples.internal.proto.sub2.IdMessage - (*sub.StringMessage)(nil), // 21: grpc.gateway.examples.internal.proto.sub.StringMessage - (*duration.Duration)(nil), // 22: google.protobuf.Duration - (*pathenum.MessageWithPathEnum)(nil), // 23: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - (*pathenum.MessageWithNestedPathEnum)(nil), // 24: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*wrappers.StringValue)(nil), // 25: google.protobuf.StringValue + (*ErrorResponse)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse + (*ErrorObject)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.ErrorObject + (*ABitOfEverything)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + (*ABitOfEverythingRepeated)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + (*CheckStatusResponse)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + (*Body)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.Body + (*MessageWithBody)(nil), // 8: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + (*UpdateV2Request)(nil), // 9: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + (*Book)(nil), // 10: grpc.gateway.examples.internal.proto.examplepb.Book + (*CreateBookRequest)(nil), // 11: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + (*ABitOfEverything_Nested)(nil), // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + nil, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + nil, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + (pathenum.PathEnum)(0), // 16: grpc.gateway.examples.internal.pathenum.PathEnum + (pathenum.MessagePathEnum_NestedPathEnum)(0), // 17: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*empty.Empty)(nil), // 18: google.protobuf.Empty + (*timestamp.Timestamp)(nil), // 19: google.protobuf.Timestamp + (*status.Status)(nil), // 20: google.rpc.Status + (*field_mask.FieldMask)(nil), // 21: google.protobuf.FieldMask + (*sub2.IdMessage)(nil), // 22: grpc.gateway.examples.internal.proto.sub2.IdMessage + (*sub.StringMessage)(nil), // 23: grpc.gateway.examples.internal.proto.sub.StringMessage + (*duration.Duration)(nil), // 24: google.protobuf.Duration + (*pathenum.MessageWithPathEnum)(nil), // 25: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + (*pathenum.MessageWithNestedPathEnum)(nil), // 26: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + (*wrappers.StringValue)(nil), // 27: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ - 10, // 0: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 10, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 0, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 14, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 15, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - 16, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 11, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - 12, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - 13, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - 17, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp - 0, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 10, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 10, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 0, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 18, // 16: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status - 5, // 17: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body - 2, // 18: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask - 17, // 20: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp - 8, // 21: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book - 1, // 22: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 10, // 24: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 2, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 9, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - 20, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 2, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 7, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 20, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 2, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 3, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 21, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 2, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 22, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 16, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 16, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 6, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 5, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 2, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 16, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 23, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 24, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 16, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 16, // 48: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 16, // 49: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 2, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 8, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 2, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 16, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 16, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 16, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 16, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 3, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 21, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 2, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 16, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 16, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 16, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 16, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 16, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 2, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 2, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 25, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 16, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 16, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 4, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 16, // 73: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 16, // 74: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 50, // [50:75] is the sub-list for method output_type - 25, // [25:50] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 3, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject + 12, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 12, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 0, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 16, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 17, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 18, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 13, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + 14, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + 15, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + 19, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 0, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 12, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 12, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 0, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 20, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status + 7, // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body + 4, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 21, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 19, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp + 10, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book + 1, // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 24: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 12, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 4, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 11, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + 22, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 9, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 22, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 5, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 23, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 24, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 18, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 18, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 8, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 7, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 4, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 18, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 25, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 26, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 18, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 18, // 49: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 18, // 50: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 4, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 10, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 18, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 18, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 18, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 18, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 5, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 23, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 18, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 18, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 18, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 18, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 18, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 4, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 27, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 18, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 18, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 6, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 18, // 74: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 18, // 75: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 51, // [51:76] is the sub-list for method output_type + 26, // [26:51] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() } @@ -2072,7 +2234,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } if !protoimpl.UnsafeEnabled { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ABitOfEverything); i { + switch v := v.(*ErrorResponse); i { case 0: return &v.state case 1: @@ -2084,7 +2246,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ABitOfEverythingRepeated); i { + switch v := v.(*ErrorObject); i { case 0: return &v.state case 1: @@ -2096,7 +2258,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckStatusResponse); i { + switch v := v.(*ABitOfEverything); i { case 0: return &v.state case 1: @@ -2108,7 +2270,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Body); i { + switch v := v.(*ABitOfEverythingRepeated); i { case 0: return &v.state case 1: @@ -2120,7 +2282,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageWithBody); i { + switch v := v.(*CheckStatusResponse); i { case 0: return &v.state case 1: @@ -2132,7 +2294,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateV2Request); i { + switch v := v.(*Body); i { case 0: return &v.state case 1: @@ -2144,7 +2306,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Book); i { + switch v := v.(*MessageWithBody); i { case 0: return &v.state case 1: @@ -2156,7 +2318,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateBookRequest); i { + switch v := v.(*UpdateV2Request); i { case 0: return &v.state case 1: @@ -2168,6 +2330,30 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Book); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateBookRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ABitOfEverything_Nested); i { case 0: return &v.state @@ -2180,7 +2366,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } } - file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2].OneofWrappers = []interface{}{ (*ABitOfEverything_OneofEmpty)(nil), (*ABitOfEverything_OneofString)(nil), } @@ -2190,7 +2376,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc, NumEnums: 2, - NumMessages: 12, + NumMessages: 14, NumExtensions: 0, NumServices: 3, }, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 1d58b3f2dc1..2bc25d92fdb 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -162,6 +162,27 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { } } } + responses: { + key: "500"; + value: { + description: "Server error"; + headers: { + key: "X-Correlation-Id" + value: { + description: "Unique event identifier for server requests" + type: "string" + format: "uuid" + default: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" + pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" + } + }; + schema: { + json_schema: { + ref: ".grpc.gateway.examples.internal.proto.examplepb.ErrorResponse"; + } + } + } + } extensions: { key: "x-grpc-gateway-foo"; value { @@ -183,6 +204,31 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { } }; +message ErrorResponse{ + string correlationId = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", + title: "x-correlation-id", + description: "Unique event identifier for server requests", + format: "uuid", + example: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" + }]; + ErrorObject error = 2; +} + +message ErrorObject{ + int32 code = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[0-9]$", + title: "code", + description: "Response code", + format: "integer" + }]; + string message = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[a-zA-Z0-9]{1, 32}$", + title: "message", + description: "Response message" + }]; +} + // Intentionally complicated message type to cover many features of Protobuf. message ABitOfEverything { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 6bfcff12adf..0c4845e849a 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -55,6 +55,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -111,6 +117,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "503": { "description": "Returned when the resource is temporarily unavailable.", "schema": {}, @@ -167,6 +179,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -495,6 +513,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -829,6 +853,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1152,6 +1182,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1501,6 +1537,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1687,6 +1729,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1732,6 +1780,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1787,6 +1841,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -1842,6 +1902,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2077,6 +2143,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2116,6 +2188,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2173,6 +2251,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2237,6 +2321,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2297,6 +2387,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2366,6 +2462,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "503": { "description": "Returned when the resource is temporarily unavailable.", "schema": {}, @@ -2427,6 +2529,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "503": { "description": "Returned when the resource is temporarily unavailable.", "schema": {}, @@ -2485,6 +2593,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2524,6 +2638,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2563,6 +2683,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2605,6 +2731,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2660,6 +2792,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2699,6 +2837,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2754,6 +2898,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -2805,6 +2955,12 @@ "$ref": "#/definitions/examplepbNumericEnum" } }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, "default": { "description": "An unexpected error response.", "schema": { @@ -3240,6 +3396,40 @@ } } }, + "examplepbErrorObject": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "integer", + "description": "Response code", + "title": "code", + "pattern": "^[0-9]$" + }, + "message": { + "type": "string", + "description": "Response message", + "title": "message", + "pattern": "^[a-zA-Z0-9]{1, 32}$" + } + } + }, + "examplepbErrorResponse": { + "type": "object", + "properties": { + "correlationId": { + "type": "string", + "format": "uuid", + "example": "2438ac3c-37eb-4902-adef-ed16b4431030", + "description": "Unique event identifier for server requests", + "title": "x-correlation-id", + "pattern": "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" + }, + "error": { + "$ref": "#/definitions/examplepbErrorObject" + } + } + }, "examplepbNumericEnum": { "type": "string", "enum": [ diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 86ad6661871..cf476e1fe4f 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -5,6 +5,8 @@ import ( "encoding/json" "fmt" "io/ioutil" + "math" + "net/textproto" "os" "reflect" "regexp" @@ -13,6 +15,7 @@ import ( "strings" "sync" "text/template" + "time" "github.com/golang/glog" structpb "github.com/golang/protobuf/ptypes/struct" @@ -1020,6 +1023,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re "200": openapiResponseObject{ Description: desc, Schema: responseSchema, + Headers: openapiHeadersObject{}, }, }, } @@ -1116,6 +1120,13 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re if resp.Examples != nil { respObj.Examples = openapiExamplesFromProtoExamples(resp.Examples) } + if resp.Headers != nil { + hdrs, err := processHeaders(resp.Headers) + if err != nil { + return err + } + respObj.Headers = hdrs + } if resp.Extensions != nil { exts, err := processExtensions(resp.Extensions) if err != nil { @@ -1455,6 +1466,180 @@ func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error return exts, nil } +func validateHeaderTypeAndFormat(headerType string, format string) error { + // The type of the object. The value MUST be one of "string", "number", "integer", "boolean", or "array" + // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject + // Note: currently not implementing array as we are only implementing this in the operation response context + switch headerType { + // the format property is an open string-valued property, and can have any value to support documentation needs + // primary check for format is to ensure that the number/integer formats are extensions of the specified type + // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#dataTypeFormat + case "string": + return nil + case "number": + switch format { + case "uint", + "uint8", + "uint16", + "uint32", + "uint64", + "int", + "int8", + "int16", + "int32", + "int64", + "float", + "float32", + "float64", + "complex64", + "complex128", + "double", + "byte", + "rune", + "uintptr", + "": + return nil + default: + return fmt.Errorf("the provided format %q is not a valid extension of the type %q", format, headerType) + } + case "integer": + switch format { + case "uint", + "uint8", + "uint16", + "uint32", + "uint64", + "int", + "int8", + "int16", + "int32", + "int64", + "": + return nil + default: + return fmt.Errorf("the provided format %q is not a valid extension of the type %q", format, headerType) + } + case "boolean": + return nil + } + return fmt.Errorf("the provided header type %q is not supported", headerType) +} + +func validateDefaultValueTypeAndFormat(headerType string, defaultValue string, format string) error { + switch headerType { + case "string": + if !isQuotedString(defaultValue) { + return fmt.Errorf("the provided default value %q does not match provider type %q, or is not properly quoted with escaped quotations", defaultValue, headerType) + } + switch format { + case "date-time": + unquoteTime := strings.Trim(defaultValue, `"`) + _, err := time.Parse(time.RFC3339, unquoteTime) + if err != nil { + return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue) + } + case "date": + const ( + layoutRFC3339Date = "2006-01-02" + ) + unquoteDate := strings.Trim(defaultValue, `"`) + _, err := time.Parse(layoutRFC3339Date, unquoteDate) + if err != nil { + return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue) + } + } + case "number": + err := isJSONNumber(defaultValue, headerType) + if err != nil { + return err + } + case "integer": + switch format { + case "int32": + _, err := strconv.ParseInt(defaultValue, 0, 32) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) + } + case "uint32": + _, err := strconv.ParseUint(defaultValue, 0, 32) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) + } + case "int64": + _, err := strconv.ParseInt(defaultValue, 0, 64) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) + } + case "uint64": + _, err := strconv.ParseUint(defaultValue, 0, 64) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) + } + default: + _, err := strconv.ParseInt(defaultValue, 0, 64) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provided type %q", defaultValue, headerType) + } + } + case "boolean": + if !isBool(defaultValue) { + return fmt.Errorf("the provided default value %q does not match provider type %q", defaultValue, headerType) + } + } + return nil +} + +func isQuotedString(s string) bool { + return len(s) >= 2 && s[0] == '"' && s[len(s)-1] == '"' +} + +func isJSONNumber(s string, t string) error { + val, err := strconv.ParseFloat(s, 64) + if err != nil { + return fmt.Errorf("the provided default value %q does not match provider type %q", s, t) + } + // Floating point values that cannot be represented as sequences of digits (such as Infinity and NaN) are not permitted. + // See: https://tools.ietf.org/html/rfc4627#section-2.4 + if math.IsInf(val, 0) || math.IsNaN(val) { + return fmt.Errorf("the provided number %q is not a valid JSON number", s) + } + + return nil +} + +func isBool(s string) bool { + // Unable to use strconv.ParseBool because it returns truthy values https://golang.org/pkg/strconv/#example_ParseBool + // per https://swagger.io/specification/v2/#data-types + // type: boolean represents two values: true and false. Note that truthy and falsy values such as "true", "", 0 or null are not considered boolean values. + return s == "true" || s == "false" +} + +func processHeaders(inputHdrs map[string]*openapi_options.Header) (openapiHeadersObject, error) { + hdrs := map[string]openapiHeaderObject{} + for k, v := range inputHdrs { + header := textproto.CanonicalMIMEHeaderKey(k) + ret := openapiHeaderObject{ + Description: v.Description, + Format: v.Format, + Pattern: v.Pattern, + } + err := validateHeaderTypeAndFormat(v.Type, v.Format) + if err != nil { + return nil, err + } + ret.Type = v.Type + if v.Default != "" { + err := validateDefaultValueTypeAndFormat(v.Type, v.Default, v.Format) + if err != nil { + return nil, err + } + ret.Default = json.RawMessage(v.Default) + } + hdrs[header] = ret + } + return hdrs, nil +} + // updateOpenAPIDataFromComments updates a OpenAPI object based on a comment // from the proto file. // @@ -1942,9 +2127,16 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option s.MaxProperties = j.GetMaxProperties() s.MinProperties = j.GetMinProperties() s.Required = j.GetRequired() + s.Enum = j.GetEnum() if overrideType := j.GetType(); len(overrideType) > 0 { s.Type = strings.ToLower(overrideType[0].String()) } + if j != nil && j.GetExample() != "" { + s.Example = json.RawMessage(j.GetExample()) + } + if j != nil && j.GetFormat() != "" { + s.Format = j.GetFormat() + } } func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, field *descriptor.Field) { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 34125584cbf..2188e7396be 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "reflect" "strings" "testing" @@ -1456,6 +1457,571 @@ func TestApplyTemplateExtensions(t *testing.T) { }) } +func TestApplyTemplateHeaders(t *testing.T) { + newFile := func() *descriptor.File { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + Options: &descriptorpb.MethodOptions{}, + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + return &descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(".;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", // TODO(achew22): Figure out what this should really be + }, + }, + }, + }, + }, + }, + }, + } + } + openapiOperation := openapi_options.Operation{ + Responses: map[string]*openapi_options.Response{ + "200": &openapi_options.Response{ + Description: "Testing Headers", + Headers: map[string]*openapi_options.Header{ + "string": { + Description: "string header description", + Type: "string", + Format: "uuid", + Pattern: "", + }, + "boolean": { + Description: "boolean header description", + Type: "boolean", + Default: "true", + Pattern: "^true|false$", + }, + "integer": { + Description: "integer header description", + Type: "integer", + Default: "0", + Pattern: "^[0-9]$", + }, + "number": { + Description: "number header description", + Type: "number", + Default: "1.2", + Pattern: "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", + }, + }, + }, + }, + } + verifyTemplateHeaders := func(t *testing.T, reg *descriptor.Registry, file *descriptor.File, + opts *openapiconfig.OpenAPIOptions) { + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } + fileCL := crossLinkFixture(file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + if opts != nil { + if err := reg.RegisterOpenAPIOptions(opts); err != nil { + t.Fatalf("failed to register OpenAPI annotations: %s", err) + } + } + result, err := applyTemplate(param{File: fileCL, reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if want, is, name := "2.0", result.Swagger, "Swagger"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + var response openapiResponseObject + for _, v := range result.Paths { + response = v.Get.Responses["200"] + } + if want, is, name := []openapiHeadersObject{ + { + "String": openapiHeaderObject{ + Description: "string header description", + Type: "string", + Format: "uuid", + Pattern: "", + }, + "Boolean": openapiHeaderObject{ + Description: "boolean header description", + Type: "boolean", + Default: json.RawMessage("true"), + Pattern: "^true|false$", + }, + "Integer": openapiHeaderObject{ + Description: "integer header description", + Type: "integer", + Default: json.RawMessage("0"), + Pattern: "^[0-9]$", + }, + "Number": openapiHeaderObject{ + Description: "number header description", + Type: "number", + Default: json.RawMessage("1.2"), + Pattern: "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", + }, + }, + }[0], response.Headers, "response.Headers"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + } + t.Run("verify template options set via proto options", func(t *testing.T) { + file := newFile() + proto.SetExtension(proto.Message(file.Services[0].Methods[0].Options), openapi_options.E_Openapiv2Operation, &openapiOperation) + reg := descriptor.NewRegistry() + verifyTemplateHeaders(t, reg, file, nil) + }) +} + +func TestValidateHeaderType(t *testing.T) { + type test struct { + Type string + Format string + expectedError error + } + tests := []test{ + { + "string", + "date-time", + nil, + }, + { + "boolean", + "", + nil, + }, + { + "integer", + "uint", + nil, + }, + { + "integer", + "uint8", + nil, + }, + { + "integer", + "uint16", + nil, + }, + { + "integer", + "uint32", + nil, + }, + { + "integer", + "uint64", + nil, + }, + { + "integer", + "int", + nil, + }, + { + "integer", + "int8", + nil, + }, + { + "integer", + "int16", + nil, + }, + { + "integer", + "int32", + nil, + }, + { + "integer", + "int64", + nil, + }, + { + "integer", + "float64", + errors.New("the provided format \"float64\" is not a valid extension of the type \"integer\""), + }, + { + "integer", + "uuid", + errors.New("the provided format \"uuid\" is not a valid extension of the type \"integer\""), + }, + { + "number", + "uint", + nil, + }, + { + "number", + "uint8", + nil, + }, + { + "number", + "uint16", + nil, + }, + { + "number", + "uint32", + nil, + }, + { + "number", + "uint64", + nil, + }, + { + "number", + "int", + nil, + }, + { + "number", + "int8", + nil, + }, + { + "number", + "int16", + nil, + }, + { + "number", + "int32", + nil, + }, + { + "number", + "int64", + nil, + }, + { + "number", + "float", + nil, + }, + { + "number", + "float32", + nil, + }, + { + "number", + "float64", + nil, + }, + { + "number", + "complex64", + nil, + }, + { + "number", + "complex128", + nil, + }, + { + "number", + "double", + nil, + }, + { + "number", + "byte", + nil, + }, + { + "number", + "rune", + nil, + }, + { + "number", + "uintptr", + nil, + }, + { + "number", + "date", + errors.New("the provided format \"date\" is not a valid extension of the type \"number\""), + }, + { + "array", + "", + errors.New("the provided header type \"array\" is not supported"), + }, + { + "foo", + "", + errors.New("the provided header type \"foo\" is not supported"), + }, + } + for _, v := range tests { + err := validateHeaderTypeAndFormat(v.Type, v.Format) + + if v.expectedError == nil { + if err != nil { + t.Errorf("unexpected error %v", err) + } + } else { + if err == nil { + t.Fatal("expected header error not returned") + } + if err.Error() != v.expectedError.Error() { + t.Errorf("expected error malformed, expected %q, got %q", v.expectedError.Error(), err.Error()) + } + } + } + +} + +func TestValidateDefaultValueType(t *testing.T) { + type test struct { + Type string + Value string + Format string + expectedError error + } + tests := []test{ + { + "string", + `"string"`, + "", + nil, + }, + { + "string", + "\"2012-11-01T22:08:41+00:00\"", + "date-time", + nil, + }, + { + "string", + "\"2012-11-01\"", + "date", + nil, + }, + { + "string", + "0", + "", + errors.New("the provided default value \"0\" does not match provider type \"string\", or is not properly quoted with escaped quotations"), + }, + { + "string", + "false", + "", + errors.New("the provided default value \"false\" does not match provider type \"string\", or is not properly quoted with escaped quotations"), + }, + { + "boolean", + "true", + "", + nil, + }, + { + "boolean", + "0", + "", + errors.New("the provided default value \"0\" does not match provider type \"boolean\""), + }, + { + "boolean", + `"string"`, + "", + errors.New("the provided default value \"\\\"string\\\"\" does not match provider type \"boolean\""), + }, + { + "number", + "1.2", + "", + nil, + }, + { + "number", + "123", + "", + nil, + }, + { + "number", + "nan", + "", + errors.New("the provided number \"nan\" is not a valid JSON number"), + }, + { + "number", + "NaN", + "", + errors.New("the provided number \"NaN\" is not a valid JSON number"), + }, + { + "number", + "-459.67", + "", + nil, + }, + { + "number", + "inf", + "", + errors.New("the provided number \"inf\" is not a valid JSON number"), + }, + { + "number", + "infinity", + "", + errors.New("the provided number \"infinity\" is not a valid JSON number"), + }, + { + "number", + "Inf", + "", + errors.New("the provided number \"Inf\" is not a valid JSON number"), + }, + { + "number", + "Infinity", + "", + errors.New("the provided number \"Infinity\" is not a valid JSON number"), + }, + { + "number", + "false", + "", + errors.New("the provided default value \"false\" does not match provider type \"number\""), + }, + { + "number", + `"string"`, + "", + errors.New("the provided default value \"\\\"string\\\"\" does not match provider type \"number\""), + }, + { + "integer", + "2", + "", + nil, + }, + { + "integer", + fmt.Sprint(math.MaxInt32), + "int32", + nil, + }, + { + "integer", + fmt.Sprint(math.MaxInt32 + 1), + "int32", + errors.New("the provided default value \"2147483648\" does not match provided format \"int32\""), + }, + { + "integer", + fmt.Sprint(math.MaxInt64), + "int64", + nil, + }, + { + "integer", + "9223372036854775808", + "int64", + errors.New("the provided default value \"9223372036854775808\" does not match provided format \"int64\""), + }, + { + "integer", + "18446744073709551615", + "uint64", + nil, + }, + { + "integer", + "false", + "", + errors.New("the provided default value \"false\" does not match provided type \"integer\""), + }, + { + "integer", + "1.2", + "", + errors.New("the provided default value \"1.2\" does not match provided type \"integer\""), + }, + { + "integer", + `"string"`, + "", + errors.New("the provided default value \"\\\"string\\\"\" does not match provided type \"integer\""), + }, + } + for _, v := range tests { + err := validateDefaultValueTypeAndFormat(v.Type, v.Value, v.Format) + + if v.expectedError == nil { + if err != nil { + t.Errorf("unexpected error '%v'", err) + } + } else { + if err == nil { + t.Error("expected update error not returned") + } + if err.Error() != v.expectedError.Error() { + t.Errorf("expected error malformed, expected %q, got %q", v.expectedError.Error(), err.Error()) + } + } + } + +} + func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 9c11ffd5adc..8b5d6a59588 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -177,10 +177,22 @@ type openapiResponseObject struct { Description string `json:"description"` Schema openapiSchemaObject `json:"schema"` Examples map[string]interface{} `json:"examples,omitempty"` + Headers openapiHeadersObject `json:"headers,omitempty"` extensions []extension } +type openapiHeadersObject map[string]openapiHeaderObject + +// http://swagger.io/specification/#headerObject +type openapiHeaderObject struct { + Description string `json:"description,omitempty"` + Type string `json:"type,omitempty"` + Format string `json:"format,omitempty"` + Default json.RawMessage `json:"default,omitempty"` + Pattern string `json:"pattern,omitempty"` +} + type keyVal struct { Key string Value interface{} diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index e894e905d88..e3ef175d0b0 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -144,7 +144,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber { // Deprecated: Use JSONSchema_JSONSchemaSimpleTypes.Descriptor instead. func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9, 0} } // The type of the security scheme. Valid values are "basic", @@ -198,7 +198,7 @@ func (x SecurityScheme_Type) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_Type.Descriptor instead. func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 0} } // The location of the API key. Valid values are "query" or "header". @@ -248,7 +248,7 @@ func (x SecurityScheme_In) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_In.Descriptor instead. func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11, 1} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 1} } // The flow used by the OAuth2 security scheme. Valid values are @@ -305,7 +305,7 @@ func (x SecurityScheme_Flow) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_Flow.Descriptor instead. func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11, 2} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -693,6 +693,96 @@ func (x *Operation) GetExtensions() map[string]*_struct.Value { return nil } +// `Header` is a representation of OpenAPI v2 specification's Header object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject +// +type Header struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // `Description` is a short description of the header. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // The type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // `Format` The extending format for the previously mentioned type. + Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"` + // `Default` Declares the value of the header that the server will use if none is provided. + // See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. + // Unlike JSON Schema this value MUST conform to the defined type for the header. + Default string `protobuf:"bytes,6,opt,name=default,proto3" json:"default,omitempty"` + // 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. + Pattern string `protobuf:"bytes,13,opt,name=pattern,proto3" json:"pattern,omitempty"` +} + +func (x *Header) Reset() { + *x = Header{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Header) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Header) ProtoMessage() {} + +func (x *Header) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Header.ProtoReflect.Descriptor instead. +func (*Header) Descriptor() ([]byte, []int) { + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{2} +} + +func (x *Header) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Header) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Header) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Header) GetDefault() string { + if x != nil { + return x.Default + } + return "" +} + +func (x *Header) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + // `Response` is a representation of OpenAPI v2 specification's Response object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject @@ -708,6 +798,10 @@ type Response struct { // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + // `Headers` A list of headers that are sent with the response. + // `Header` name is expected to be a string in the canonical format of the MIME header key + // See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey + Headers map[string]*Header `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -717,7 +811,7 @@ type Response struct { func (x *Response) Reset() { *x = Response{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -730,7 +824,7 @@ func (x *Response) String() string { func (*Response) ProtoMessage() {} func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -743,7 +837,7 @@ func (x *Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Response.ProtoReflect.Descriptor instead. func (*Response) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{2} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3} } func (x *Response) GetDescription() string { @@ -760,6 +854,13 @@ func (x *Response) GetSchema() *Schema { return nil } +func (x *Response) GetHeaders() map[string]*Header { + if x != nil { + return x.Headers + } + return nil +} + func (x *Response) GetExamples() map[string]string { if x != nil { return x.Examples @@ -823,7 +924,7 @@ type Info struct { func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -836,7 +937,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -849,7 +950,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{4} } func (x *Info) GetTitle() string { @@ -938,7 +1039,7 @@ type Contact struct { func (x *Contact) Reset() { *x = Contact{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -951,7 +1052,7 @@ func (x *Contact) String() string { func (*Contact) ProtoMessage() {} func (x *Contact) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -964,7 +1065,7 @@ func (x *Contact) ProtoReflect() protoreflect.Message { // Deprecated: Use Contact.ProtoReflect.Descriptor instead. func (*Contact) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{4} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{5} } func (x *Contact) GetName() string { @@ -1020,7 +1121,7 @@ type License struct { func (x *License) Reset() { *x = License{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +1134,7 @@ func (x *License) String() string { func (*License) ProtoMessage() {} func (x *License) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +1147,7 @@ func (x *License) ProtoReflect() protoreflect.Message { // Deprecated: Use License.ProtoReflect.Descriptor instead. func (*License) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{5} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{6} } func (x *License) GetName() string { @@ -1095,7 +1196,7 @@ type ExternalDocumentation struct { func (x *ExternalDocumentation) Reset() { *x = ExternalDocumentation{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1108,7 +1209,7 @@ func (x *ExternalDocumentation) String() string { func (*ExternalDocumentation) ProtoMessage() {} func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1121,7 +1222,7 @@ func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalDocumentation.ProtoReflect.Descriptor instead. func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{6} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{7} } func (x *ExternalDocumentation) GetDescription() string { @@ -1170,7 +1271,7 @@ type Schema struct { func (x *Schema) Reset() { *x = Schema{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1183,7 +1284,7 @@ func (x *Schema) String() string { func (*Schema) ProtoMessage() {} func (x *Schema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1196,7 +1297,7 @@ func (x *Schema) ProtoReflect() protoreflect.Message { // Deprecated: Use Schema.ProtoReflect.Descriptor instead. func (*Schema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{7} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8} } func (x *Schema) GetJsonSchema() *JSONSchema { @@ -1277,10 +1378,14 @@ type JSONSchema struct { // The title of the schema. Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` // A short description of the schema. - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` - ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + // A free-form property to include a JSON example of this field. This is copied + // verbatim to the output swagger.json. Quotes must be escaped. + // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject + Example string `protobuf:"bytes,9,opt,name=example,proto3" json:"example,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` // Maximum represents an inclusive upper limit for a numeric instance. The // value of MUST be a number, Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` @@ -1301,12 +1406,16 @@ type JSONSchema struct { // Items in 'array' must be unique. Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` + // `Format` + Format string `protobuf:"bytes,36,opt,name=format,proto3" json:"format,omitempty"` + // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 + Enum []string `protobuf:"bytes,46,rep,name=enum,proto3" json:"enum,omitempty"` } func (x *JSONSchema) Reset() { *x = JSONSchema{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1319,7 +1428,7 @@ func (x *JSONSchema) String() string { func (*JSONSchema) ProtoMessage() {} func (x *JSONSchema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1332,7 +1441,7 @@ func (x *JSONSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use JSONSchema.ProtoReflect.Descriptor instead. func (*JSONSchema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9} } func (x *JSONSchema) GetRef() string { @@ -1370,6 +1479,13 @@ func (x *JSONSchema) GetReadOnly() bool { return false } +func (x *JSONSchema) GetExample() string { + if x != nil { + return x.Example + } + return "" +} + func (x *JSONSchema) GetMultipleOf() float64 { if x != nil { return x.MultipleOf @@ -1482,6 +1598,20 @@ func (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { return nil } +func (x *JSONSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *JSONSchema) GetEnum() []string { + if x != nil { + return x.Enum + } + return nil +} + // `Tag` is a representation of OpenAPI v2 specification's Tag object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject @@ -1501,7 +1631,7 @@ type Tag struct { func (x *Tag) Reset() { *x = Tag{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1514,7 +1644,7 @@ func (x *Tag) String() string { func (*Tag) ProtoMessage() {} func (x *Tag) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1527,7 +1657,7 @@ func (x *Tag) ProtoReflect() protoreflect.Message { // Deprecated: Use Tag.ProtoReflect.Descriptor instead. func (*Tag) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} } func (x *Tag) GetDescription() string { @@ -1565,7 +1695,7 @@ type SecurityDefinitions struct { func (x *SecurityDefinitions) Reset() { *x = SecurityDefinitions{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1578,7 +1708,7 @@ func (x *SecurityDefinitions) String() string { func (*SecurityDefinitions) ProtoMessage() {} func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1591,7 +1721,7 @@ func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityDefinitions.ProtoReflect.Descriptor instead. func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11} } func (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { @@ -1648,7 +1778,7 @@ type SecurityScheme struct { func (x *SecurityScheme) Reset() { *x = SecurityScheme{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1661,7 +1791,7 @@ func (x *SecurityScheme) String() string { func (*SecurityScheme) ProtoMessage() {} func (x *SecurityScheme) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1674,7 +1804,7 @@ func (x *SecurityScheme) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityScheme.ProtoReflect.Descriptor instead. func (*SecurityScheme) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12} } func (x *SecurityScheme) GetType() SecurityScheme_Type { @@ -1766,7 +1896,7 @@ type SecurityRequirement struct { func (x *SecurityRequirement) Reset() { *x = SecurityRequirement{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1779,7 +1909,7 @@ func (x *SecurityRequirement) String() string { func (*SecurityRequirement) ProtoMessage() {} func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1792,7 +1922,7 @@ func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityRequirement.ProtoReflect.Descriptor instead. func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13} } func (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue { @@ -1820,7 +1950,7 @@ type Scopes struct { func (x *Scopes) Reset() { *x = Scopes{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1833,7 +1963,7 @@ func (x *Scopes) String() string { func (*Scopes) ProtoMessage() {} func (x *Scopes) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1846,7 +1976,7 @@ func (x *Scopes) ProtoReflect() protoreflect.Message { // Deprecated: Use Scopes.ProtoReflect.Descriptor instead. func (*Scopes) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14} } func (x *Scopes) GetScope() map[string]string { @@ -1870,7 +2000,7 @@ type SecurityRequirement_SecurityRequirementValue struct { func (x *SecurityRequirement_SecurityRequirementValue) Reset() { *x = SecurityRequirement_SecurityRequirementValue{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1883,7 +2013,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) String() string { func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1896,7 +2026,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protorefle // Deprecated: Use SecurityRequirement_SecurityRequirementValue.ProtoReflect.Descriptor instead. func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13, 0} } func (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string { @@ -2036,36 +2166,62 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, - 0x09, 0x22, 0xd5, 0x03, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5d, 0x0a, 0x08, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, + 0x09, 0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, + 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, + 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, + 0x08, 0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, + 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, + 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, @@ -2126,7 +2282,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x22, 0x9f, 0x07, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, + 0x08, 0x04, 0x10, 0x05, 0x22, 0xdf, 0x07, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, @@ -2135,55 +2291,59 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, - 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, - 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, - 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, - 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, - 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, - 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, - 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, - 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, - 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, + 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, + 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, + 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, + 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, + 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, + 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, + 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, + 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, + 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, + 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, + 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, + 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, - 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x24, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, + 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x94, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, @@ -2323,7 +2483,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { } var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes @@ -2332,77 +2492,81 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (SecurityScheme_Flow)(0), // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation - (*Response)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Response - (*Info)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Info - (*Contact)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.Contact - (*License)(nil), // 10: grpc.gateway.protoc_gen_openapiv2.options.License - (*ExternalDocumentation)(nil), // 11: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - (*Schema)(nil), // 12: grpc.gateway.protoc_gen_openapiv2.options.Schema - (*JSONSchema)(nil), // 13: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - (*Tag)(nil), // 14: grpc.gateway.protoc_gen_openapiv2.options.Tag - (*SecurityDefinitions)(nil), // 15: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - (*SecurityScheme)(nil), // 16: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - (*SecurityRequirement)(nil), // 17: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - (*Scopes)(nil), // 18: grpc.gateway.protoc_gen_openapiv2.options.Scopes - nil, // 19: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - nil, // 20: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - nil, // 21: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry - nil, // 22: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - nil, // 23: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - nil, // 24: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*_struct.Value)(nil), // 31: google.protobuf.Value + (*Header)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Header + (*Response)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Response + (*Info)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.Info + (*Contact)(nil), // 10: grpc.gateway.protoc_gen_openapiv2.options.Contact + (*License)(nil), // 11: grpc.gateway.protoc_gen_openapiv2.options.License + (*ExternalDocumentation)(nil), // 12: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + (*Schema)(nil), // 13: grpc.gateway.protoc_gen_openapiv2.options.Schema + (*JSONSchema)(nil), // 14: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + (*Tag)(nil), // 15: grpc.gateway.protoc_gen_openapiv2.options.Tag + (*SecurityDefinitions)(nil), // 16: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions + (*SecurityScheme)(nil), // 17: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + (*SecurityRequirement)(nil), // 18: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + (*Scopes)(nil), // 19: grpc.gateway.protoc_gen_openapiv2.options.Scopes + nil, // 20: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry + nil, // 21: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry + nil, // 22: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry + nil, // 23: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry + nil, // 24: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry + nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry + nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry + nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry + nil, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*_struct.Value)(nil), // 33: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ - 8, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info + 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info 0, // 1: grpc.gateway.protoc_gen_openapiv2.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 19, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - 15, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - 17, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 11, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 20, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - 11, // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 21, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry + 20, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry + 16, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions + 18, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + 12, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 21, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry + 12, // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 22, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry 0, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 17, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 22, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - 12, // 12: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema - 23, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - 24, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - 9, // 15: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact - 10, // 16: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License - 25, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - 13, // 18: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - 11, // 19: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 1, // 20: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - 11, // 21: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 26, // 22: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 23: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 18, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 27, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 29, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 30, // 29: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 7, // 30: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 31, // 31: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 32: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 31, // 33: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 31, // 34: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 31, // 35: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 16, // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 31, // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 28, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 39, // [39:39] is the sub-list for method output_type - 39, // [39:39] is the sub-list for method input_type - 39, // [39:39] is the sub-list for extension type_name - 39, // [39:39] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 18, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + 23, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry + 13, // 12: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema + 24, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry + 25, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry + 26, // 15: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry + 10, // 16: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact + 11, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License + 27, // 18: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry + 14, // 19: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + 12, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 1, // 21: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes + 12, // 22: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 2, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 3, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 4, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 19, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 29, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 31, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 32, // 30: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 8, // 31: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 33, // 32: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 8, // 33: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 33, // 34: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 35: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 33, // 36: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 33, // 37: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 17, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 33, // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 30, // 40: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 41, // [41:41] is the sub-list for method output_type + 41, // [41:41] is the sub-list for method input_type + 41, // [41:41] is the sub-list for extension type_name + 41, // [41:41] is the sub-list for extension extendee + 0, // [0:41] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } @@ -2436,7 +2600,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Response); i { + switch v := v.(*Header); i { case 0: return &v.state case 1: @@ -2448,7 +2612,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info); i { + switch v := v.(*Response); i { case 0: return &v.state case 1: @@ -2460,7 +2624,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Contact); i { + switch v := v.(*Info); i { case 0: return &v.state case 1: @@ -2472,7 +2636,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*License); i { + switch v := v.(*Contact); i { case 0: return &v.state case 1: @@ -2484,7 +2648,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternalDocumentation); i { + switch v := v.(*License); i { case 0: return &v.state case 1: @@ -2496,7 +2660,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema); i { + switch v := v.(*ExternalDocumentation); i { case 0: return &v.state case 1: @@ -2508,7 +2672,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JSONSchema); i { + switch v := v.(*Schema); i { case 0: return &v.state case 1: @@ -2520,7 +2684,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tag); i { + switch v := v.(*JSONSchema); i { case 0: return &v.state case 1: @@ -2532,7 +2696,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityDefinitions); i { + switch v := v.(*Tag); i { case 0: return &v.state case 1: @@ -2544,7 +2708,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityScheme); i { + switch v := v.(*SecurityDefinitions); i { case 0: return &v.state case 1: @@ -2556,7 +2720,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityRequirement); i { + switch v := v.(*SecurityScheme); i { case 0: return &v.state case 1: @@ -2568,6 +2732,18 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Scopes); i { case 0: return &v.state @@ -2579,7 +2755,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { case 0: return &v.state @@ -2598,7 +2774,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, NumEnums: 5, - NumMessages: 26, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index b229f99b700..7be1fb572c7 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -172,6 +172,51 @@ message Operation { map extensions = 13; } +// `Header` is a representation of OpenAPI v2 specification's Header object. +// +// See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject +// +message Header { + // `Description` is a short description of the header. + string description = 1; + // The type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. + string type = 2; + // `Format` The extending format for the previously mentioned type. + string format = 3; + // field 4 is reserved for 'items', but in OpenAPI-specific way. + reserved 4; + // field 5 is reserved `Collection Format` Determines the format of the array if type array is used. + reserved 5; + // `Default` Declares the value of the header that the server will use if none is provided. + // See: https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-6.2. + // Unlike JSON Schema this value MUST conform to the defined type for the header. + string default = 6; + // field 7 is reserved for 'maximum'. + reserved 7; + // field 8 is reserved for 'exclusiveMaximum'. + reserved 8; + // field 9 is reserved for 'minimum'. + reserved 9; + // field 10 is reserved for 'exclusiveMinimum'. + reserved 10; + // field 11 is reserved for 'maxLength'. + reserved 11; + // field 12 is reserved for 'minLength'. + reserved 12; + // 'Pattern' See https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. + string pattern = 13; + // field 14 is reserved for 'maxItems'. + reserved 14; + // field 15 is reserved for 'minItems'. + reserved 15; + // field 16 is reserved for 'uniqueItems'. + reserved 16; + // field 17 is reserved for 'enum'. + reserved 17; + // field 18 is reserved for 'multipleOf'. + reserved 18; +} + // `Response` is a representation of OpenAPI v2 specification's Response object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject @@ -183,8 +228,10 @@ message Response { // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. Schema schema = 2; - // field 3 is reserved for 'headers'. - reserved 3; + // `Headers` A list of headers that are sent with the response. + // `Header` name is expected to be a string in the canonical format of the MIME header key + // See: https://golang.org/pkg/net/textproto/#CanonicalMIMEHeaderKey + map headers = 3; // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object map examples = 4; @@ -388,9 +435,10 @@ message JSONSchema { string description = 6; string default = 7; bool read_only = 8; - // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in - // favor of 'example' field. - reserved 9; + // A free-form property to include a JSON example of this field. This is copied + // verbatim to the output swagger.json. Quotes must be escaped. + // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject + string example = 9; double multiple_of = 10; // Maximum represents an inclusive upper limit for a numeric instance. The // value of MUST be a number, @@ -443,9 +491,11 @@ message JSONSchema { } repeated JSONSchemaSimpleTypes type = 35; + // `Format` + string format = 36; // following fields are reserved, as the properties have been omitted from - // OpenAPI v2: format, contentMediaType, contentEncoding, if, then, else - reserved 36 to 41; + // OpenAPI v2: contentMediaType, contentEncoding, if, then, else + reserved 37 to 41; // field 42 is reserved for 'allOf', but in OpenAPI-specific way. // TODO(ivucica): add 'allOf'? reserved 42; @@ -453,6 +503,8 @@ message JSONSchema { // OpenAPI v2: // anyOf, oneOf, not reserved 43 to 45; + // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 + repeated string enum = 46; } // `Tag` is a representation of OpenAPI v2 specification's Tag object. From 87286d1354972c05bd83610e11ecc8b00b74005b Mon Sep 17 00:00:00 2001 From: Bang Date: Sat, 28 Nov 2020 21:06:40 +0900 Subject: [PATCH 0746/1518] Fix broken example (#1843) * Fix broken example add missing errdetails import so that protojson can translate errdetails as google.protobuf.Any fix #1842 * Regenerated bazel files --- examples/internal/gateway/BUILD.bazel | 1 + examples/internal/gateway/gateway.go | 1 + 2 files changed, 2 insertions(+) diff --git a/examples/internal/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel index 2c239f0a24c..5656e532591 100644 --- a/examples/internal/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//examples/internal/proto/standalone:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", + "@go_googleapis//google/rpc:errdetails_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//connectivity:go_default_library", ], diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index 66287b57e62..b82089d60fe 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -9,6 +9,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" standalone "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone" gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + _ "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" ) From b9462a0f74d530ef8b91d9b7caafaeb807e47b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Sat, 28 Nov 2020 13:54:42 +0100 Subject: [PATCH 0747/1518] Adjust protoc-gen-openapiv2/main.go flags docs as suggested during #1832 review (#1833) * Adjust flags docs as suggested for the bazel rule in the PR #1832 * REVIEW: fix messed flag doc --- protoc-gen-openapiv2/main.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index ebcae17d004..ea3d82a7773 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -18,20 +18,20 @@ var ( importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") file = flag.String("file", "-", "where to load data from") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to file which describes the gRPC API Configuration in YAML format") allowMerge = flag.Bool("allow_merge", false, "if set, generation one OpenAPI file out of multiple protos") mergeFileName = flag.String("merge_file_name", "apidocs", "target OpenAPI file name prefix after merge") useJSONNamesForFields = flag.Bool("json_names_for_fields", true, "if disabled, the original proto name will be used for generating OpenAPI definitions") - repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") + repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`") versionFlag = flag.Bool("version", false, "print the current version") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") - includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") - useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") + includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") + useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage") useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") - openAPIConfiguration = flag.String("openapi_configuration", "", "path to OpenAPI Configuration in YAML format") + openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") ) From c30b098d643d7c9e59d4dc6d16786d77fd6c788a Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Sun, 29 Nov 2020 19:44:08 +0530 Subject: [PATCH 0748/1518] [GSoD] Added new architecture introduction diagram for gRPC-Gateway (#1845) * updated diagram and badges * added diagram and updated docs --- README.md | 260 +++++++++--------- .../architecture_introduction_diagram.svg | 1 + docs/index.md | 4 +- 3 files changed, 141 insertions(+), 124 deletions(-) create mode 100644 docs/assets/images/architecture_introduction_diagram.svg diff --git a/README.md b/README.md index 87f1ea732ef..916cbfa4291 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # grpc-gateway -[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) -[![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) -[![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) -[![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) -[![Slack](https://img.shields.io/badge/slack-%23grpc--gateway-brightgreen?style=flat-square)](https://join.slack.com/t/gophers/shared_invite/zt-gmw97q11-1OWgj2Dqsc13eqoSPwvNDQ) +[![circleci](https://img.shields.io/circleci/build/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=circleci&logoColor=ffffff&style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) +[![codecov](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=codecov&logoColor=ffffff&style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) +[![slack](https://img.shields.io/badge/slack-grpc--gateway-379c9c?logo=slack&logoColor=ffffff&style=flat-square)](https://app.slack.com/client/T029RQSE6/CBATURP1D) +[![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) +[![release](https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?color=379c9c&logoColor=ffffff&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) +[![stars](https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/stargazers) The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). @@ -15,19 +16,22 @@ annotations in your service definitions. This helps you provide your APIs in both gRPC and RESTful style at the same time. -![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) +
    + +
    ## Testimonials - > We use the gRPC-Gateway to serve millions of API requests per day, - and have been since 2018, and through all of that, - we have never had any issues with it. +> We use the gRPC-Gateway to serve millions of API requests per day, +> and have been since 2018, and through all of that, +> we have never had any issues with it. > > _- William Mill, [Ad Hoc](http://adhocteam.us/)_ ## Check out our [documentation](https://grpc-ecosystem.github.io/grpc-gateway/)! ## Background + gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. However, you might still want to provide a traditional @@ -79,18 +83,19 @@ $ go install \ This will place four binaries in your `$GOBIN`; -* `protoc-gen-grpc-gateway` -* `protoc-gen-openapiv2` -* `protoc-gen-go` -* `protoc-gen-go-grpc` +- `protoc-gen-grpc-gateway` +- `protoc-gen-openapiv2` +- `protoc-gen-go` +- `protoc-gen-go-grpc` Make sure that your `$GOBIN` is in your `$PATH`. ## Usage -1. Define your [gRPC](https://grpc.io/docs/) service using protocol buffers +1. Define your [gRPC](https://grpc.io/docs/) service using protocol buffers `your_service.proto`: + ```protobuf syntax = "proto3"; package your.service.v1; @@ -106,63 +111,66 @@ Make sure that your `$GOBIN` is in your `$PATH`. 2. Generate gRPC stubs - This step generates the gRPC stubs that you can use to implement the service and consume from clients: + This step generates the gRPC stubs that you can use to implement the service and consume from clients: - Here's an example of what a `protoc` command might look like to generate Go stubs: + Here's an example of what a `protoc` command might look like to generate Go stubs: - ```sh - protoc -I . \ - --go_out ./gen/go/ --go_opt paths=source_relative \ - --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . \ + --go_out ./gen/go/ --go_opt paths=source_relative \ + --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \ + your/service/v1/your_service.proto + ``` 3. Implement your service in gRPC as usual 1. (Optional) Generate gRPC stub in the [other programming languages](https://grpc.io/docs/). - For example, the following generates gRPC code for Ruby based on `your/service/v1/your_service.proto`: - ```sh - protoc -I . --ruby_out ./gen/ruby your/service/v1/your_service.proto + For example, the following generates gRPC code for Ruby based on `your/service/v1/your_service.proto`: + + ```sh + protoc -I . --ruby_out ./gen/ruby your/service/v1/your_service.proto + + protoc -I . --grpc-ruby_out ./gen/ruby your/service/v1/your_service.proto + ``` - protoc -I . --grpc-ruby_out ./gen/ruby your/service/v1/your_service.proto - ``` 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. 3. Implement your gRPC service stubs 4. Generate reverse-proxy using `protoc-gen-grpc-gateway` - At this point, you have 3 options: + At this point, you have 3 options: - * no further modifications, use the default mapping to HTTP semantics (method, path, etc.) - * this will work on any `.proto` file, but will not allow setting HTTP paths, request parameters or similar - * additional `.proto` modifications to use a custom mapping - * relies on parameters in the `.proto` file to set custom HTTP mappings - * no `.proto` modifications, but use an external configuration file - * relies on an external configuration file to set custom HTTP mappings - * mostly useful when the source proto file isn't under your control + - no further modifications, use the default mapping to HTTP semantics (method, path, etc.) + - this will work on any `.proto` file, but will not allow setting HTTP paths, request parameters or similar + - additional `.proto` modifications to use a custom mapping + - relies on parameters in the `.proto` file to set custom HTTP mappings + - no `.proto` modifications, but use an external configuration file + - relies on an external configuration file to set custom HTTP mappings + - mostly useful when the source proto file isn't under your control - 1. Using the default mapping + 1. Using the default mapping - This requires no additional modification to the `.proto` file, but does require enabling a specific option when executing the plugin. - The `generate_unbound_methods` should be enabled. + This requires no additional modification to the `.proto` file, but does require enabling a specific option when executing the plugin. + The `generate_unbound_methods` should be enabled. - Here's what a `protoc` execution might look like with this option enabled: + Here's what a `protoc` execution might look like with this option enabled: - ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - --grpc-gateway_opt generate_unbound_methods=true \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt generate_unbound_methods=true \ + your/service/v1/your_service.proto + ``` - 2. With custom annotations + 2. With custom annotations - Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) - annotation to your .proto file + Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) + annotation to your .proto file `your_service.proto`: + ```diff syntax = "proto3"; package your.service.v1; @@ -185,70 +193,70 @@ Make sure that your `$GOBIN` is in your `$PATH`. } ``` - >You will need to provide the required third party protobuf files to the `protoc` compiler. - >They are included in this repo under the `third_party/googleapis` folder, and we recommend copying - >them into your `protoc` generation file structure. If you've structured your proto files according - >to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), - >you could copy the files into a top-level `./google` folder. + > You will need to provide the required third party protobuf files to the `protoc` compiler. + > They are included in this repo under the `third_party/googleapis` folder, and we recommend copying + > them into your `protoc` generation file structure. If you've structured your proto files according + > to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), + > you could copy the files into a top-level `./google` folder. See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated OpenAPI output. - + Here's what a `protoc` execution might look like: - ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + your/service/v1/your_service.proto + ``` - 3. External configuration - If you do not want to (or cannot) modify the proto file for use with grpc-gateway you can - alternatively use an external - [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. - [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) - for more information. + 3. External configuration + If you do not want to (or cannot) modify the proto file for use with grpc-gateway you can + alternatively use an external + [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. + [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) + for more information. Here's what a `protoc` execution might look like with this option enabled: - ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - --grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \ + your/service/v1/your_service.proto + ``` 5. Write an entrypoint for the HTTP reverse-proxy server ```go package main - + import ( "context" "flag" "net/http" - + "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update ) - + var ( // command-line options: // gRPC server endpoint grpcServerEndpoint = flag.String("grpc-server-endpoint", "localhost:9090", "gRPC server endpoint") ) - + func run() error { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() - + // Register gRPC server endpoint // Note: Make sure the gRPC server is running properly and accessible mux := runtime.NewServeMux() @@ -257,15 +265,15 @@ Make sure that your `$GOBIN` is in your `$PATH`. if err != nil { return err } - + // Start HTTP server (and proxy calls to gRPC server endpoint) return http.ListenAndServe(":8081", mux) } - + func main() { flag.Parse() defer glog.Flush() - + if err := run(); err != nil { glog.Fatal(err) } @@ -294,14 +302,14 @@ https://github.com/johanbrandhorst/grpc-gateway-boilerplate. During code generation with `protoc`, flags to grpc-gateway tools must be passed through protoc using one of 2 patterns: -* as part of the `--_out` `protoc` parameter: `--_out=:` +- as part of the `--_out` `protoc` parameter: `--_out=:` ```sh --grpc-gateway_out=logtostderr=true,repeated_path_param_separator=ssv:. --openapiv2_out=logtostderr=true,repeated_path_param_separator=ssv:. ``` -* using additional `--_opt` parameters: `--_opt=[,]*` +- using additional `--_opt` parameters: `--_opt=[,]*` ```sh --grpc-gateway_opt logtostderr=true,repeated_path_param_separator=ssv @@ -335,13 +343,15 @@ files with options from for examples. ## More Examples + More examples are available under `examples` directory. -* `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition - * `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service - * `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service - * `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for ```unannotated_echo_service.proto``` -* `server/main.go`: service implementation -* `main.go`: entrypoint of the generated reverse proxy + +- `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition + - `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service + - `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service + - `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for `unannotated_echo_service.proto` +- `server/main.go`: service implementation +- `main.go`: entrypoint of the generated reverse proxy To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see @@ -352,49 +362,53 @@ gRPC-gateway, and a gRPC server, see ### Supported -* Generating JSON API handlers. -* Method parameters in the request body. -* Method parameters in the request path. -* Method parameters in query string. -* Enum fields in the path parameter (including repeated enum fields). -* Mapping streaming APIs to newline-delimited JSON streams. -* Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) -* Optionally emitting API definitions for -[OpenAPI (Swagger) v2](https://swagger.io/docs/specification/2-0/basic-structure/). -* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests) -through inbound HTTP `Grpc-Timeout` header. -* Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) -files as an alternative to annotation. -* Automatically translating PATCH requests into Field Mask gRPC requests. See -[the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/patch.html) -for more information. +- Generating JSON API handlers. +- Method parameters in the request body. +- Method parameters in the request path. +- Method parameters in query string. +- Enum fields in the path parameter (including repeated enum fields). +- Mapping streaming APIs to newline-delimited JSON streams. +- Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) +- Optionally emitting API definitions for + [OpenAPI (Swagger) v2](https://swagger.io/docs/specification/2-0/basic-structure/). +- Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests) + through inbound HTTP `Grpc-Timeout` header. +- Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) + files as an alternative to annotation. +- Automatically translating PATCH requests into Field Mask gRPC requests. See + [the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/patch.html) + for more information. ### No plan to support + But patch is welcome. -* Method parameters in HTTP headers. -* Handling trailer metadata. -* Encoding request/response body in XML. -* True bi-directional streaming. + +- Method parameters in HTTP headers. +- Handling trailer metadata. +- Encoding request/response body in XML. +- True bi-directional streaming. # Mapping gRPC to HTTP -* [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15). -* HTTP request source IP is added as `X-Forwarded-For` gRPC request header. -* HTTP request host is added as `X-Forwarded-Host` gRPC request header. -* HTTP `Authorization` header is added as `authorization` gRPC request header. -* Remaining Permanent HTTP header keys (as specified by the IANA -[here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) -are prefixed with `grpcgateway-` and added with their values to gRPC request -header. -* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata -(prefixed with `grpcgateway-`). -* While configurable, the default {un,}marshaling uses -[jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with -`OrigName: true`. +- [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15). +- HTTP request source IP is added as `X-Forwarded-For` gRPC request header. +- HTTP request host is added as `X-Forwarded-Host` gRPC request header. +- HTTP `Authorization` header is added as `authorization` gRPC request header. +- Remaining Permanent HTTP header keys (as specified by the IANA + [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) + are prefixed with `grpcgateway-` and added with their values to gRPC request + header. +- HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata + (prefixed with `grpcgateway-`). +- While configurable, the default {un,}marshaling uses + [jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with + `OrigName: true`. # Contribution + See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). # License + grpc-gateway is licensed under the BSD 3-Clause License. See [LICENSE.txt](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) for more details. diff --git a/docs/assets/images/architecture_introduction_diagram.svg b/docs/assets/images/architecture_introduction_diagram.svg new file mode 100644 index 00000000000..3c9347e31a2 --- /dev/null +++ b/docs/assets/images/architecture_introduction_diagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 397dd66dedb..c43932d6058 100644 --- a/docs/index.md +++ b/docs/index.md @@ -35,7 +35,9 @@ This server is generated according to [custom options](https://cloud.google.com/ It helps you to provide your APIs in both gRPC and RESTful style at the same time. -![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) +
    + +
    To learn more about us check out our documentation. From 0096364c8efeba0afbc1c4dfe71b3446391af387 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Mon, 30 Nov 2020 17:34:56 +0530 Subject: [PATCH 0749/1518] [GSoD] Added more faq for gRPC-Gateway (#1844) * added more faq * updated faq * updated faq --- docs/docs/faq.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 5457f350e04..2e973a922c6 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -31,7 +31,7 @@ you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with exis libraries in Go. e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/gateway/main.go -## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? +## My gRPC server is written in (Scala or C++ or Ruby or Haskell...). Is there a (Scala or C++ or Ruby or Haskell...) version of grpc-gateway? AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. @@ -48,3 +48,27 @@ When a message is added which happens to conflict with another message it will break code that is very far away from the code that changed. This is in an effort to adhere to the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). + +## What is the difference between the grpc-gateway and grpc-httpjson-transcoding? + +The grpc-gateway is a generator that generates a Go implementation of a JSON/HTTP-gRPC reverse proxy based on annotations in your proto file, while the [grpc-httpjson-transcoding](https://github.com/grpc-ecosystem/grpc-httpjson-transcoding) library doesn't require the generation step, it uses protobuf descriptors as config. It can be used as a component of an existing proxy. Google Cloud Endpoints and the gRPC-JSON transcoder filter in Envoy are using this. + +## What is the difference between the grpc-gateway and grpc-web? + +### Usage + +In the grpc-gateway, we generate a reverse-proxy from the proto file annotations. In the front-end, we call directly through REST APIs. We can generate an OpenAPI v2 specification that may further be used to generate the frontend client from using `protoc-gen-openapiv2`. + +In grpc-web, the client code is generated directly from the proto files and can be used in the frontend. + +### Performance + +The grpc-gateway parses JSON to the protobuf binary format before sending it to the gRPC server. It then has to parse the reply back from the protobuf binary format to JSON again. The parsing overhead has a negative impact on performance. + +In grpc-web, the message is sent in the protobuf binary format already, so there is no additional parsing cost on the proxy side. + +### Maintenance + +With the grpc-gateway, if your proto file changes, we have to regenerate the gateway reverse proxy code. If you are using the HTTP/JSON interface you probably have to change the front-end too, which means making changes in two places. + +In grpc-web, regenerating the files from the proto file will automatically update the front-end client. From 806c563e5ac7f946747d25fde5cedfb25e6eb7cd Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 1 Dec 2020 17:58:27 +0530 Subject: [PATCH 0750/1518] [GSoD] Added tutorials directory on gRPC-Gateway (#1829) * added tutorials directory on grpc-gateway * refactored badges and links * added requested changes * updated tutorials directory on grpc-gateway * updated tutorials directory on grpc-gateway * updated tutorials directory on grpc-gateway * updated tutorials * updated tutorials * updated tutorials * updated tutorials * updated headings and added next button for tutorials * updated next buttons * updated tutorials * updated tutorials * updated tutorials * updated tutorials * updated tutorials * updated tutorials * added helloworld link --- docs/docs/faq.md | 2 +- docs/docs/tutorials/adding_annotations.md | 200 ++++++++++++++++++ docs/docs/tutorials/creating_main.go.md | 56 +++++ docs/docs/tutorials/generating_stubs/index.md | 9 + .../tutorials/generating_stubs/using_buf.md | 49 +++++ .../generating_stubs/using_protoc.md | 24 +++ docs/docs/tutorials/index.md | 6 + docs/docs/tutorials/introduction.md | 52 +++++ docs/docs/tutorials/learn_more.md | 20 ++ docs/docs/tutorials/simple_hello_world.md | 40 ++++ docs/index.md | 6 +- 11 files changed, 460 insertions(+), 4 deletions(-) create mode 100644 docs/docs/tutorials/adding_annotations.md create mode 100644 docs/docs/tutorials/creating_main.go.md create mode 100644 docs/docs/tutorials/generating_stubs/index.md create mode 100644 docs/docs/tutorials/generating_stubs/using_buf.md create mode 100644 docs/docs/tutorials/generating_stubs/using_protoc.md create mode 100644 docs/docs/tutorials/index.md create mode 100644 docs/docs/tutorials/introduction.md create mode 100644 docs/docs/tutorials/learn_more.md create mode 100644 docs/docs/tutorials/simple_hello_world.md diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 2e973a922c6..f8fc0d49cc5 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -1,7 +1,7 @@ --- layout: default title: FAQ -nav_order: 7 +nav_order: 8 --- # FAQ diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md new file mode 100644 index 00000000000..dbf1668edb2 --- /dev/null +++ b/docs/docs/tutorials/adding_annotations.md @@ -0,0 +1,200 @@ +--- +layout: default +title: Adding the grpc-gateway annotations to an existing protobuf file +parent: Tutorials +nav_order: 5 +--- + +# Adding the grpc-gateway annotations to an existing protobuf file + +Now that we've got a working Go gRPC server, we need to add the grpc-gateway annotations. + +The annotations define how gRPC services map to the JSON request and response. When using protocol buffers, each RPC must define the HTTP method and path using the `google.api.http` annotation. + +So we will need to add the `google/api/http.proto` import to the proto file. We also need to add the HTTP->gRPC mapping we want. In this case, we're mapping `POST /v1/example/echo` to our `SayHello` rpc. + +```proto +syntax = "proto3"; + +package helloworld; + +import "google/api/annotations.proto"; + +// Here is the overall greeting service definition where we define all our endpoints +service Greeter { + // Sends a greeting + rpc SayHello (HelloRequest) returns (HelloReply) { + option (google.api.http) = { + post: "/v1/example/echo" + body: "*" + }; + } +} + +// The request message containing the user's name +message HelloRequest { + string name = 1; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} +``` + +See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior. + +## Generating the grpc-gateway stubs + +Now that we've got the grpc-gateway annotations added to the proto file, we need to use the grpc-gateway generator to generate the stubs. + +Before we can do that, we need to copy some dependencies into our protofile structure. Copy the `third_party/googleapis` folder from the grpc-gateway repository to your local protofile structure. It should look like this afterwards: + +``` +proto +ā”œā”€ā”€ google +│ └── api +│ ā”œā”€ā”€ annotations.proto +│ └── http.proto +└── helloworld + └── hello_world.proto +``` + +### Using buf + +We'll need to add the grpc-gateway generator to the generation configuration: + +```yml +version: v1beta1 +plugins: + - name: go + out: proto + opt: paths=source_relative + - name: go-grpc + out: proto + opt: paths=source_relative,require_unimplemented_servers=false + - name: grpc-gateway + out: proto + opt: paths=source_relative +``` + +And that's it! Now if you run: + +```sh +$ buf generate +``` + +It should produce a `*.gw.pb.go` file. + +### Using protoc + +Now we need to add the grpc-gateway generator to the protoc invocation: + +```sh +$ protoc -I ./proto \ + --go_out ./proto --go_opt paths=source_relative \ + --go-grpc_out ./proto --go-grpc_opt paths=source_relative \ + --grpc-gateway_out ./proto --grpc-gateway_opt paths=source_relative \ + ./proto/helloworld/hello_world.proto +``` + +This should generate a `*.gw.pb.go` file. + +We also need to add and serve the gRPC-gateway mux in our `main.go` file. + +```go +package main + +import ( + "context" + "log" + "net" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "google.golang.org/grpc" + + helloworldpb "github.com/myuser/myrepo/proto/helloworld" +) + +type server struct{} + +func NewServer() *server { + return &server{} +} + +func (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) { + return &helloworldpb.HelloReply{Message: in.Name + " World"}, nil +} + +func main() { + // Create a listener on TCP port + lis, err := net.Listen("tcp", ":8080") + if err != nil { + log.Fatalln("Failed to listen:", err) + } + + // Create a gRPC server object + s := grpc.NewServer() + // Attach the Greeter service to the server + helloworldpb.RegisterGreeterServer(s, &server{}) + // Serve gRPC Server + log.Println("Serving gRPC on 0.0.0.0:8080") + go func() { + log.Fatalln(s.Serve(lis)) + }() + + // Create a client connection to the gRPC Server we just started + // This is where the gRPC-Gateway proxies the requests + conn, err := grpc.DialContext( + context.Background(), + "0.0.0.0:8080", + grpc.WithBlock(), + grpc.WithInsecure(), + ) + if err != nil { + log.Fatalln("Failed to dial server:", err) + } + + gwmux := runtime.NewServeMux() + // Register Greeter + err = helloworldpb.RegisterGreeterHandler(context.Background(), gwmux, conn) + if err != nil { + log.Fatalln("Failed to register gateway:", err) + } + + gwServer := &http.Server{ + Addr: ":8090", + Handler: gwmux, + } + + log.Println("Serving gRPC-Gateway on http://0.0.0.0:8090") + log.Fatalln(gwServer.ListenAndServe()) +} +``` + +For more examples, please refer to [our boilerplate repository](https://github.com/johanbrandhorst/grpc-gateway-boilerplate). + +## Testing the gRPC-Gateway + +Now we can start the server: + +```sh +$ go run main.go +``` + +Then we use cURL to send HTTP requests: + +```sh +$ curl -X POST -k http://localhost:8090/v1/example/echo -d '{"name": " Hello"}' +``` + +``` +{"message":"Hello World"} +``` + +Hopefully, that gives a bit of understanding of how to use the gRPC-Gateway. + +Full source code of hello world can be found here [helloworld-grpc-gateway](https://github.com/iamrajiv/helloworld-grpc-gateway) + +[Next](learn_more.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/creating_main.go.md b/docs/docs/tutorials/creating_main.go.md new file mode 100644 index 00000000000..669dfac31e5 --- /dev/null +++ b/docs/docs/tutorials/creating_main.go.md @@ -0,0 +1,56 @@ +--- +layout: default +title: Creating main.go +parent: Tutorials +nav_order: 4 +--- + +# Creating main.go + +Before creating `main.go` file we are assuming that the user has created a `go.mod` with the name `github.com/myuser/myrepo`, if not please refer to [Creating go.mod file](introduction.md#creating-gomod-file). The import here is using the path to the generated files in `proto/helloworld` relative to the root of the repository. + +```go +package main + +import ( + "context" + "log" + "net" + + "google.golang.org/grpc" + + helloworldpb "github.com/myuser/myrepo/proto/helloworld" +) + +type server struct{} + +func NewServer() *server { + return &server{} +} + +func (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) { + return &helloworldpb.HelloReply{Message: in.Name + " World"}, nil +} + +func main() { + // Create a listener on TCP port + lis, err := net.Listen("tcp", ":8080") + if err != nil { + log.Fatalln("Failed to listen:", err) + } + + // Create a gRPC server object + s := grpc.NewServer() + // Attach the Greeter service to the server + helloworldpb.RegisterGreeterServer(s, &server{}) + // Serve gRPC Server + log.Println("Serving gRPC on 0.0.0.0:8080") + log.Fatal(s.Serve(lis)) +} +``` + +## Read More + +For more refer to gRPC docs [https://grpc.io/docs/languages/go/](https://grpc.io/docs/languages/go/). + +[Next](adding_annotations.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/generating_stubs/index.md b/docs/docs/tutorials/generating_stubs/index.md new file mode 100644 index 00000000000..172467df30f --- /dev/null +++ b/docs/docs/tutorials/generating_stubs/index.md @@ -0,0 +1,9 @@ +--- +layout: default +title: Generating stubs +parent: Tutorials +nav_order: 3 +has_children: true +--- + +For generating the stubs, we have two alternatives: `protoc` and `buf`. `protoc` is the more classic generation experience that is used widely in the industry, but it has a pretty steep learning curve. `buf` is a newer tool that is built with user experience and speed in mind. It also offers linting and breaking change detection, something `protoc` doesn't offer. We offer instructions for both here. diff --git a/docs/docs/tutorials/generating_stubs/using_buf.md b/docs/docs/tutorials/generating_stubs/using_buf.md new file mode 100644 index 00000000000..392c5470ca2 --- /dev/null +++ b/docs/docs/tutorials/generating_stubs/using_buf.md @@ -0,0 +1,49 @@ +--- +layout: default +title: Generating stubs using buf +parent: Generating stubs +grand_parent: Tutorials +nav_order: 1 +--- + +# Generating stubs using buf + +[Buf](https://github.com/bufbuild/buf) is a tool that provides various protobuf utilities such as linting, breaking change detection and generation. Please find installation instructions on [https://docs.buf.build/installation/](https://docs.buf.build/installation/). + +It is configured through a `buf.yaml` file that should be checked in to the root of your repository. Buf will automatically read this file if present. Configuration can also be provided via the command-line flag `--config`, which accepts a path to a `.json` or `.yaml` file, or direct JSON or YAML data. + +All Buf operations that use your local `.proto` files as input rely on a valid build configuration. This configuration tells Buf where to search for `.proto` files, and how to handle imports. As opposed to `protoc`, where all `.proto` files are manually specified on the command-line, buf operates by recursively discovering all `.proto` files under configuration and building them. + +The following is an example of a valid configuration, assuming you have your `.proto` files rooted in the `proto` folder relative to the root of your repository. + +```yml +version: v1beta1 +build: + roots: + - proto +``` + +To generate type and gRPC stubs for Go, create the file `buf.gen.yaml` at the root of the repository: + +```yml +version: v1beta1 +plugins: + - name: go + out: proto + opt: paths=source_relative + - name: go-grpc + out: proto + opt: paths=source_relative +``` + +We use the `go` and `go-grpc` plugins to generate Go types and gRPC service definitions. We're outputting the generated files relative to the `proto` folder, and we're using the `paths=source_relative` option, which means that the generated files will appear in the same directory as the source `.proto` file. + +Then run + +```sh +$ buf generate +``` + +This will have generated a `*.pb.go` and a `*_grpc.pb.go` file for each protobuf package in our `proto` file hierarchy. + +[Next](../creating_main.go.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/generating_stubs/using_protoc.md b/docs/docs/tutorials/generating_stubs/using_protoc.md new file mode 100644 index 00000000000..240fe0e4689 --- /dev/null +++ b/docs/docs/tutorials/generating_stubs/using_protoc.md @@ -0,0 +1,24 @@ +--- +layout: default +title: Generating stubs using protoc +parent: Generating stubs +grand_parent: Tutorials +nav_order: 2 +--- + +# Generating stubs using protoc + +Here's an example of what a `protoc` command might look like to generate Go stubs, assuming that you're at the root of your repository and you have your proto files in a directory called `proto`: + +```sh +$ protoc -I ./proto \ + --go_out ./proto --go_opt paths=source_relative \ + --go-grpc_out ./proto --go-grpc_opt paths=source_relative \ + ./proto/helloworld/hello_world.proto +``` + +We use the `go` and `go-grpc` plugins to generate Go types and gRPC service definitions. We're outputting the generated files relative to the `proto` folder, and we're using the `paths=source_relative` option, which means that the generated files will appear in the same directory as the source `.proto` file. + +This will have generated a `*.pb.go` and a `*_grpc.pb.go` file for `proto/helloworld/hello_world.proto`. + +[Next](../creating_main.go.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/index.md b/docs/docs/tutorials/index.md new file mode 100644 index 00000000000..af5856ec9e3 --- /dev/null +++ b/docs/docs/tutorials/index.md @@ -0,0 +1,6 @@ +--- +layout: default +title: Tutorials +nav_order: 7 +has_children: true +--- diff --git a/docs/docs/tutorials/introduction.md b/docs/docs/tutorials/introduction.md new file mode 100644 index 00000000000..4d838329187 --- /dev/null +++ b/docs/docs/tutorials/introduction.md @@ -0,0 +1,52 @@ +--- +layout: default +title: Introduction to the gRPC-Gateway +parent: Tutorials +nav_order: 1 +--- + +# Introduction to the gRPC-Gateway + +We all know that gRPC is not a tool for everything. There are cases where we still want to provide a traditional HTTP/JSON API. The reasons can range from maintaining backward-compatibility to supporting programming languages or clients not well supported by gRPC. But writing another service just to expose an HTTP/JSON API is quite a time consuming and tedious task. + +So is there any way to code just once, but provide APIs in both gRPC and HTTP/JSON at the same time? + +The answer is Yes. + +The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. + +This helps you provide your APIs in both gRPC and HTTP/JSON format at the same time. + +![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) + +## Prerequisites + +Before we start coding, we have to install some tools. + +We will be using a Go gRPC server in the examples, so please install Go first from [https://golang.org/dl/](https://golang.org/dl/). + +After installing Go, use `go get` to download the following packages: + +```sh +$ go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway +$ go get google.golang.org/protobuf/cmd/protoc-gen-go +$ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc +``` + +This installs the protoc generator plugins we need to generate the stubs. Make sure to add `$GOPATH/bin` to your `$PATH` so that executables installed via `go get` are available on your `$PATH`. +We will be working in a new module for this tutorial, so go ahead and create that in a folder of your choosing now: + +### Creating go.mod file + +Start your module using the [go mod init command](https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory) to create a go.mod file. + +Run the `go mod init` command, giving it the path of the module your code will be in. Here, use github.com/myuser/myrepo for the module path -- in production code, this would be the URL from which your module can be downloaded. + +```sh +$ go mod init github.com/myuser/myrepo +go: creating new go.mod: module github.com/myuser/myrepo +``` + +The `go mod init` command creates a go.mod file that identifies your code as a module that might be used from other code. The file you just created includes only the name of your module and the Go version your code supports. But as you add dependencies -- meaning packages from other modules -- the go.mod file will list the specific module versions to use. This keeps builds reproducible and gives you direct control over which module versions to use. + +[Next](simple_hello_world.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/learn_more.md b/docs/docs/tutorials/learn_more.md new file mode 100644 index 00000000000..c912c7c1ccc --- /dev/null +++ b/docs/docs/tutorials/learn_more.md @@ -0,0 +1,20 @@ +--- +layout: default +title: Learn More +parent: Tutorials +nav_order: 6 +--- + +# Learn More + +## How it works + +When the HTTP request arrives at the gRPC-gateway, it parses the JSON data into a protobuf message. It then makes a normal Go gRPC client request using the parsed protobuf message. The Go gRPC client encodes the protobuf structure into the protobuf binary format and sends it to the gRPC server. The gRPC Server handles the request and returns the response in the protobuf binary format. The Go gRPC client parses it into a protobuf message and returns it to the gRPC-gateway, which encodes the protobuf message to JSON and returns it to the original client. + +## google.api.http + +Read more about `google.api.http` on [https://github.com/googleapis/googleapis/blob/master/google/api/http.proto](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto) + +## HTTP and gRPC Transcoding + +Read more about HTTP and gRPC Transcoding on [https://google.aip.dev/127](https://google.aip.dev/127) diff --git a/docs/docs/tutorials/simple_hello_world.md b/docs/docs/tutorials/simple_hello_world.md new file mode 100644 index 00000000000..7347a534687 --- /dev/null +++ b/docs/docs/tutorials/simple_hello_world.md @@ -0,0 +1,40 @@ +--- +layout: default +title: Creating a simple hello world with gRPC +parent: Tutorials +nav_order: 2 +--- + +# Creating a simple hello world with gRPC + +To understand the gRPC-Gateway we are going to first make a hello world gRPC service. + +## Defining your gRPC service using protocol buffers + +Before we create a gRPC service, we should create a proto file to define what we need, here we create a file named `hello_world.proto` in the directory `proto/helloworld/hello_world.proto`. + +The gRPC service is defined using [Google Protocol Buffers](https://developers.google.com/protocol-buffers). To learn more about how to define a service in a `.proto` file see their [Basics tutorial](https://grpc.io/docs/languages/go/basics/). For now, all you need to know is that both the server and the client stub have a `SayHello()` RPC method that takes a `HelloRequest` parameter from the client and returns a `HelloReply` from the server, and that the method is defined like this: + +```proto +syntax = "proto3"; + +package helloworld; + +// The greeting service definition +service Greeter { + // Sends a greeting + rpc SayHello (HelloRequest) returns (HelloReply) {} +} + +// The request message containing the user's name +message HelloRequest { + string name = 1; +} + +// The response message containing the greetings +message HelloReply { + string message = 1; +} +``` + +[Next](generating_stubs/index.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/index.md b/docs/index.md index c43932d6058..5c70838822e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,13 +19,13 @@ This server is generated according to [custom options](https://cloud.google.com/ --- -## About +## Getting started [![circleci](https://img.shields.io/circleci/build/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=circleci&logoColor=ffffff&style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![codecov](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=codecov&logoColor=ffffff&style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) -[![forks](https://img.shields.io/github/forks/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/network/members) -[![issues](https://img.shields.io/github/issues/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/issues) +[![slack](https://img.shields.io/badge/slack-grpc--gateway-379c9c?logo=slack&logoColor=ffffff&style=flat-square)](https://app.slack.com/client/T029RQSE6/CBATURP1D) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) +[![release](https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?color=379c9c&logoColor=ffffff&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![stars](https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/stargazers) grpc-gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). From 34c88e92b78674de67b19dabd29298e15b10518b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Dec 2020 15:26:43 +0000 Subject: [PATCH 0751/1518] Update google.golang.org/genproto commit hash to b05cb90 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 19226315115..bd316c414da 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 + google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 98a7fbf0003..025b7eefd3d 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4 h1:Rt0FRalMgdSlXAVJvX4pr65KfqaxHXSLkSJRD9pw6g0= -google.golang.org/genproto v0.0.0-20201119123407-9b1e624d6bc4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e h1:wYR00/Ht+i/79g/gzhdehBgLIJCklKoc8Q/NebdzzpY= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 74d3d0b6b0d..92752274ef1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Rt0FRalMgdSlXAVJvX4pr65KfqaxHXSLkSJRD9pw6g0=", - version = "v0.0.0-20201119123407-9b1e624d6bc4", + sum = "h1:wYR00/Ht+i/79g/gzhdehBgLIJCklKoc8Q/NebdzzpY=", + version = "v0.0.0-20201201144952-b05cb90ed32e", ) go_repository( name = "org_golang_google_grpc", From e78203fd687e67182c5fb047dd7960f00338f031 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Dec 2020 14:48:49 +0000 Subject: [PATCH 0752/1518] Update rules_proto commit hash to 84ba6ec --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 64bde3c04c9..4227519ad2f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -17,11 +17,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208", - strip_prefix = "rules_proto-97d8af4dc474595af3900dd85cb3a29ad28cc313", + sha256 = "3bce0e2fcf502619119c7cac03613fb52ce3034b2159dd3ae9d35f7339558aa3", + strip_prefix = "rules_proto-84ba6ec814eebbf5312b2cc029256097ae0042c3", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/84ba6ec814eebbf5312b2cc029256097ae0042c3.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/84ba6ec814eebbf5312b2cc029256097ae0042c3.tar.gz", ], ) From 1f99f394af15cca33dec534bbacbb459429c7984 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Dec 2020 15:22:10 +0000 Subject: [PATCH 0753/1518] Update google.golang.org/genproto commit hash to 55d61f9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bd316c414da..150756456c6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 - google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e + google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce google.golang.org/grpc v1.33.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 025b7eefd3d..6f84d1806c4 100644 --- a/go.sum +++ b/go.sum @@ -353,8 +353,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e h1:wYR00/Ht+i/79g/gzhdehBgLIJCklKoc8Q/NebdzzpY= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce h1:iS2R2xZpNiQFZrGqWisFYEYzOyKzvz07am2h/QXKqoY= +google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 92752274ef1..a5cd9d6188e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:wYR00/Ht+i/79g/gzhdehBgLIJCklKoc8Q/NebdzzpY=", - version = "v0.0.0-20201201144952-b05cb90ed32e", + sum = "h1:iS2R2xZpNiQFZrGqWisFYEYzOyKzvz07am2h/QXKqoY=", + version = "v0.0.0-20201202151023-55d61f90c1ce", ) go_repository( name = "org_golang_google_grpc", From 097b22756c49315c574e599c7e7bf32002bdfe02 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Dec 2020 22:42:02 +0000 Subject: [PATCH 0754/1518] Update module google.golang.org/grpc to v1.34.0 --- go.mod | 2 +- go.sum | 7 +++++-- repositories.bzl | 16 ++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 150756456c6..e5975ceba62 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce - google.golang.org/grpc v1.33.2 + google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 6f84d1806c4..aeb0be7cfd8 100644 --- a/go.sum +++ b/go.sum @@ -41,10 +41,12 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -126,6 +128,7 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -367,8 +370,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index a5cd9d6188e..5c8a7ba9412 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -61,8 +61,8 @@ def go_repositories(): go_repository( name = "com_github_cncf_udpa_go", importpath = "github.com/cncf/udpa/go", - sum = "h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU=", - version = "v0.0.0-20191209042840-269d4d468f6f", + sum = "h1:9kRtNpqLHbZVO/NNxhHp2ymxFxsHOe3x2efJGn//Tas=", + version = "v0.0.0-20200629203442-efcf912fb354", ) go_repository( @@ -74,8 +74,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E=", - version = "v0.9.4", + sum = "h1:EARl0OvqMoxq/UMgMSCLnXzkaXbxzskluEBlMQCJPms=", + version = "v0.9.7", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -254,8 +254,8 @@ def go_repositories(): go_repository( name = "com_github_stretchr_testify", importpath = "github.com/stretchr/testify", - sum = "h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=", - version = "v1.4.0", + sum = "h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=", + version = "v1.5.1", ) go_repository( name = "com_github_yuin_goldmark", @@ -365,8 +365,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=", - version = "v1.33.2", + sum = "h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=", + version = "v1.34.0", ) go_repository( From 3928df9ba5b5d15e6992567a69b6afb2c37318fc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Dec 2020 00:27:00 +0000 Subject: [PATCH 0755/1518] Update golang.org/x/oauth2 commit hash to 0b49973 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e5975ceba62..9149ab7d749 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 + golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index aeb0be7cfd8..5e9ee9c5362 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58 h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA= +golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 5c8a7ba9412..fa075b82013 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:Mj83v+wSRNEar42a/MQgxk9X42TdEmrOl9i+y8WbxLo=", - version = "v0.0.0-20201109201403-9fd604954f58", + sum = "h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA=", + version = "v0.0.0-20201203001011-0b49973bad19", ) go_repository( name = "org_golang_x_sync", From 283a152e4ef30ee3bced837e9e8dddd51e800c3a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Dec 2020 02:06:13 +0000 Subject: [PATCH 0756/1518] Update google.golang.org/genproto commit hash to 6486ece --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9149ab7d749..c365c741978 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 - google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce + google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 5e9ee9c5362..7b7ca824af2 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce h1:iS2R2xZpNiQFZrGqWisFYEYzOyKzvz07am2h/QXKqoY= -google.golang.org/genproto v0.0.0-20201202151023-55d61f90c1ce/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 h1:jDYzwXmX9tLnuG4sL85HPmE1ruErXOopALp2i/0AHnI= +google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fa075b82013..ebe60f5bc0e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iS2R2xZpNiQFZrGqWisFYEYzOyKzvz07am2h/QXKqoY=", - version = "v0.0.0-20201202151023-55d61f90c1ce", + sum = "h1:jDYzwXmX9tLnuG4sL85HPmE1ruErXOopALp2i/0AHnI=", + version = "v0.0.0-20201203001206-6486ece9c497", ) go_repository( name = "org_golang_google_grpc", From 1fdec7891312749bfb3c2994df154a0db4623e67 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Thu, 3 Dec 2020 18:04:11 +0530 Subject: [PATCH 0757/1518] [GSoD] Refactoring the documentation files of gRPC-Gateway (#1851) * fixed edit this page broken links * refactored md files * refactored documentation files * refactored documentation files * added requested changes * added requested changes --- ADOPTERS.md | 16 ++--- CONTRIBUTING.md | 24 ++++---- README.md | 58 ++++++++++--------- docs/_config.yml | 8 +-- docs/docs/contributing/contributing.md | 9 --- docs/docs/contributing/getting_started.md | 9 +++ docs/docs/tutorials/adding_annotations.md | 28 ++++----- docs/docs/tutorials/creating_main.go.md | 2 +- docs/docs/tutorials/generating_stubs/index.md | 2 +- .../tutorials/generating_stubs/using_buf.md | 6 +- .../generating_stubs/using_protoc.md | 2 +- docs/docs/tutorials/index.md | 2 +- docs/docs/tutorials/introduction.md | 11 ++-- docs/docs/tutorials/learn_more.md | 8 +-- docs/docs/tutorials/simple_hello_world.md | 4 +- docs/index.md | 20 +++---- 16 files changed, 108 insertions(+), 101 deletions(-) delete mode 100644 docs/docs/contributing/contributing.md create mode 100644 docs/docs/contributing/getting_started.md diff --git a/ADOPTERS.md b/ADOPTERS.md index 83d86c954e1..171c2a8afd3 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -3,14 +3,14 @@ This is a list of organizations that have spoken publicly about their adoption or production users that have added themselves (in alphabetical order): -* [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of - API requests per day. -* [Chef](https://www.chef.io/) uses gRPC-Gateway to provide the user-facing - API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated - OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). - The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). -* [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to - serve millions of API requests per day [1]. +- [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of + API requests per day. +- [Chef](https://www.chef.io/) uses gRPC-Gateway to provide the user-facing + API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated + OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). + The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). +- [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to + serve millions of API requests per day [1]. If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 31e60f2baa2..87ff509ac11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # How to contribute -Thank you for your contribution to grpc-gateway. +Thank you for your contribution to gRPC-Gateway. Here's the recommended process of contribution. 1. `go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` @@ -16,13 +16,13 @@ Here's the recommended process of contribution. When you work on a larger contribution, it is also recommended that you get in touch with us through the issue tracker. -### Code reviews +## Code reviews All submissions, including submissions by project members, require review. -### I want to regenerate the files after making changes +## I want to regenerate the files after making changes -#### Using Docker +### Using Docker It should be as simple as this (run from the root of the repository): @@ -42,7 +42,7 @@ docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --r You may need to authenticate with GitHub to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. You can do this by following the steps on the [GitHub Package docs](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages). -#### Using Visual Studio Code dev containers +### Using Visual Studio Code dev containers This repo contains a `devcontainer.json` configuration that sets up the build environment in a container using [VS Code dev containers](https://code.visualstudio.com/docs/remote/containers). If you're using the dev container, @@ -58,22 +58,22 @@ $ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bz bazel run :buildifier ``` -Note that the above listed docker commands will not work in the dev container, since volume mounts from -nested docker container are not possible. +Note that the above-listed docker commands will not work in the dev container, since volume mounts from +nested docker container is not possible. If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. -### Making a release +## Making a release To make a release, follow these steps: 1. Decide on a release version. The `gorelease` job can - recommend whether the new release should be a patch or minor release. - See [CircleCI](https://app.circleci.com/pipelines/github/grpc-ecosystem/grpc-gateway/126/workflows/255a8a04-de9c-46a9-a66b-f107d2b39439/jobs/6428) - for an example. + recommend whether the new release should be a patch or minor release. + See [CircleCI](https://app.circleci.com/pipelines/github/grpc-ecosystem/grpc-gateway/126/workflows/255a8a04-de9c-46a9-a66b-f107d2b39439/jobs/6428) + for an example. 1. Generate a GitHub token with `repo` access. 1. Create a new branch and edit the Makefile `changelog` job, settings - the `future-release=` variable to the name of the version you plan to release + the `future-release=` variable to the name of the version you plan to release 1. Run `CHANGELOG_GITHUB_TOKEN= make changelog` 1. Commit the `Makefile` and `CHANGELOG.md` changes. 1. Open a PR and check that everything looks right. diff --git a/README.md b/README.md index 916cbfa4291..e40353b26ad 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,19 @@ -# grpc-gateway +
    +

    gRPC-Gateway

    +

    grpc-gateway +gRPC to JSON proxy generator following the gRPC HTTP spec +

    + + + + + + +
    -[![circleci](https://img.shields.io/circleci/build/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=circleci&logoColor=ffffff&style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) -[![codecov](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=codecov&logoColor=ffffff&style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) -[![slack](https://img.shields.io/badge/slack-grpc--gateway-379c9c?logo=slack&logoColor=ffffff&style=flat-square)](https://app.slack.com/client/T029RQSE6/CBATURP1D) -[![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) -[![release](https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?color=379c9c&logoColor=ffffff&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) -[![stars](https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/stargazers) +## About -The grpc-gateway is a plugin of the Google protocol buffers compiler +The gRPC-Gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the @@ -23,13 +29,11 @@ This helps you provide your APIs in both gRPC and RESTful style at the same time ## Testimonials > We use the gRPC-Gateway to serve millions of API requests per day, -> and have been since 2018, and through all of that, +> and have been since 2018 and through all of that, > we have never had any issues with it. > > _- William Mill, [Ad Hoc](http://adhocteam.us/)_ -## Check out our [documentation](https://grpc-ecosystem.github.io/grpc-gateway/)! - ## Background gRPC is great -- it generates API clients and server stubs in many programming @@ -46,7 +50,7 @@ that's needed to generate a reverse-proxy with this library. ## Installation -The grpc-gateway requires a local installation of the Google protocol buffers +The gRPC-Gateway requires a local installation of the Google protocol buffers compiler `protoc` v3.0.0 or above. Please install this via your local package manager or by downloading one of the releases from the official repository: @@ -151,7 +155,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. 1. Using the default mapping - This requires no additional modification to the `.proto` file, but does require enabling a specific option when executing the plugin. + This requires no additional modification to the `.proto` file but does require enabling a specific option when executing the plugin. The `generate_unbound_methods` should be enabled. Here's what a `protoc` execution might look like with this option enabled: @@ -213,7 +217,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. ``` 3. External configuration - If you do not want to (or cannot) modify the proto file for use with grpc-gateway you can + If you do not want to (or cannot) modify the proto file for use with gRPC-Gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) @@ -292,15 +296,15 @@ Make sure that your `$GOBIN` is in your `$PATH`. This GopherCon UK 2019 presentation from our maintainer [@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to -using the grpc-gateway. It uses the following boilerplate repo as a base: +using the gRPC-Gateway. It uses the following boilerplate repo as a base: https://github.com/johanbrandhorst/grpc-gateway-boilerplate. [![gRPC-Gateway presentation](https://img.youtube.com/vi/Pq1paKC-fXk/0.jpg)](https://www.youtube.com/watch?v=Pq1paKC-fXk) ## Parameters and flags -During code generation with `protoc`, flags to grpc-gateway tools must be passed -through protoc using one of 2 patterns: +During code generation with `protoc`, flags to gRPC-Gateway tools must be passed +through `protoc` using one of 2 patterns: - as part of the `--_out` `protoc` parameter: `--_out=:` @@ -325,12 +329,12 @@ through protoc using one of 2 patterns: Golang import paths. They are compatible with [the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). -In addition we also support the `request_context` parameter in order to use the +In addition, we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). This parameter can be useful to pass the request-scoped context between the gateway and the gRPC service. `protoc-gen-grpc-gateway` also supports some more command line flags to control -logging. You can give these flags together with parameters above. Run +logging. You can give these flags together with the parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. Similarly, `protoc-gen-openapiv2` supports command-line flags to control OpenAPI @@ -342,9 +346,9 @@ files with options from [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. -## More Examples +## More examples -More examples are available under `examples` directory. +More examples are available under the `examples` directory. - `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition - `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service @@ -365,7 +369,7 @@ gRPC-gateway, and a gRPC server, see - Generating JSON API handlers. - Method parameters in the request body. - Method parameters in the request path. -- Method parameters in query string. +- Method parameters in the query string. - Enum fields in the path parameter (including repeated enum fields). - Mapping streaming APIs to newline-delimited JSON streams. - Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) @@ -381,14 +385,14 @@ gRPC-gateway, and a gRPC server, see ### No plan to support -But patch is welcome. +But patches are welcome. - Method parameters in HTTP headers. - Handling trailer metadata. - Encoding request/response body in XML. - True bi-directional streaming. -# Mapping gRPC to HTTP +## Mapping gRPC to HTTP - [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15). - HTTP request source IP is added as `X-Forwarded-For` gRPC request header. @@ -404,11 +408,11 @@ But patch is welcome. [jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with `OrigName: true`. -# Contribution +## Contribution See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). -# License +## License -grpc-gateway is licensed under the BSD 3-Clause License. +gRPC-Gateway is licensed under the BSD 3-Clause License. See [LICENSE.txt](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) for more details. diff --git a/docs/_config.yml b/docs/_config.yml index fce681afb3f..b24108b0a14 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -77,7 +77,7 @@ gh_edit_link: true # show or hide edit this page link gh_edit_link_text: "Edit this page on GitHub" gh_edit_repository: "https://github.com/grpc-ecosystem/grpc-gateway" # the github URL for your repo gh_edit_branch: "master" # the branch that your docs is served from -# gh_edit_source: docs # the source that your files originate from +gh_edit_source: docs # the source that your files originate from gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately # Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define @@ -85,9 +85,9 @@ color_scheme: nil # Disqus Comments # disqus: - # Leave shortname blank to disable comments site-wide. - # Enable comments for any post by adding `comments: true` to that post's YAML Front Matter. - # shortname: +# Leave shortname blank to disable comments site-wide. +# Enable comments for any post by adding `comments: true` to that post's YAML Front Matter. +# shortname: # Google Analytics Tracking # e.g, UA-1234567-89 diff --git a/docs/docs/contributing/contributing.md b/docs/docs/contributing/contributing.md deleted file mode 100644 index a529b436112..00000000000 --- a/docs/docs/contributing/contributing.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Getting Started -parent: Contributing ---- - -# How do I contribute - -See CONTRIBUTING in [the repo](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). diff --git a/docs/docs/contributing/getting_started.md b/docs/docs/contributing/getting_started.md new file mode 100644 index 00000000000..c9bd862fddb --- /dev/null +++ b/docs/docs/contributing/getting_started.md @@ -0,0 +1,9 @@ +--- +layout: default +title: Getting Started +parent: Contributing +--- + +# How to contribute + +See CONTRIBUTING in [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index dbf1668edb2..2d6d80c2c49 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -1,19 +1,19 @@ --- layout: default -title: Adding the grpc-gateway annotations to an existing protobuf file +title: Adding gRPC-Gateway annotations to an existing proto file +nav_order: 4 parent: Tutorials -nav_order: 5 --- -# Adding the grpc-gateway annotations to an existing protobuf file +# Adding gRPC-Gateway annotations to an existing proto file -Now that we've got a working Go gRPC server, we need to add the grpc-gateway annotations. +Now that we've got a working Go gRPC server, we need to add the gRPC-Gateway annotations. The annotations define how gRPC services map to the JSON request and response. When using protocol buffers, each RPC must define the HTTP method and path using the `google.api.http` annotation. -So we will need to add the `google/api/http.proto` import to the proto file. We also need to add the HTTP->gRPC mapping we want. In this case, we're mapping `POST /v1/example/echo` to our `SayHello` rpc. +So we will need to add the `google/api/http.proto` import to the proto file. We also need to add the HTTP->gRPC mapping we want. In this case, we're mapping `POST /v1/example/echo` to our `SayHello` RPC. -```proto +```protobuf syntax = "proto3"; package helloworld; @@ -44,11 +44,11 @@ message HelloReply { See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior. -## Generating the grpc-gateway stubs +## Generating the gRPC-Gateway stubs -Now that we've got the grpc-gateway annotations added to the proto file, we need to use the grpc-gateway generator to generate the stubs. +Now that we've got the gRPC-Gateway annotations added to the proto file, we need to use the gRPC-Gateway generator to generate the stubs. -Before we can do that, we need to copy some dependencies into our protofile structure. Copy the `third_party/googleapis` folder from the grpc-gateway repository to your local protofile structure. It should look like this afterwards: +Before we can do that, we need to copy some dependencies into our proto file structure. Copy the `third_party/googleapis` folder from the gRPC-Gateway repository to your local proto file structure. It should look like this afterwards: ``` proto @@ -62,9 +62,9 @@ proto ### Using buf -We'll need to add the grpc-gateway generator to the generation configuration: +We'll need to add the gRPC-Gateway generator to the generation configuration: -```yml +```yaml version: v1beta1 plugins: - name: go @@ -86,9 +86,9 @@ $ buf generate It should produce a `*.gw.pb.go` file. -### Using protoc +### Using `protoc` -Now we need to add the grpc-gateway generator to the protoc invocation: +Now we need to add the gRPC-Gateway generator to the `protoc` invocation: ```sh $ protoc -I ./proto \ @@ -100,7 +100,7 @@ $ protoc -I ./proto \ This should generate a `*.gw.pb.go` file. -We also need to add and serve the gRPC-gateway mux in our `main.go` file. +We also need to add and serve the gRPC-Gateway mux in our `main.go` file. ```go package main diff --git a/docs/docs/tutorials/creating_main.go.md b/docs/docs/tutorials/creating_main.go.md index 669dfac31e5..6232b05ea8b 100644 --- a/docs/docs/tutorials/creating_main.go.md +++ b/docs/docs/tutorials/creating_main.go.md @@ -1,8 +1,8 @@ --- layout: default title: Creating main.go +nav_order: 3 parent: Tutorials -nav_order: 4 --- # Creating main.go diff --git a/docs/docs/tutorials/generating_stubs/index.md b/docs/docs/tutorials/generating_stubs/index.md index 172467df30f..ec873a6a5d3 100644 --- a/docs/docs/tutorials/generating_stubs/index.md +++ b/docs/docs/tutorials/generating_stubs/index.md @@ -2,7 +2,7 @@ layout: default title: Generating stubs parent: Tutorials -nav_order: 3 +nav_order: 2 has_children: true --- diff --git a/docs/docs/tutorials/generating_stubs/using_buf.md b/docs/docs/tutorials/generating_stubs/using_buf.md index 392c5470ca2..953cfcb76f4 100644 --- a/docs/docs/tutorials/generating_stubs/using_buf.md +++ b/docs/docs/tutorials/generating_stubs/using_buf.md @@ -1,9 +1,9 @@ --- layout: default title: Generating stubs using buf +nav_order: 0 parent: Generating stubs grand_parent: Tutorials -nav_order: 1 --- # Generating stubs using buf @@ -16,7 +16,7 @@ All Buf operations that use your local `.proto` files as input rely on a valid b The following is an example of a valid configuration, assuming you have your `.proto` files rooted in the `proto` folder relative to the root of your repository. -```yml +```yaml version: v1beta1 build: roots: @@ -25,7 +25,7 @@ build: To generate type and gRPC stubs for Go, create the file `buf.gen.yaml` at the root of the repository: -```yml +```yaml version: v1beta1 plugins: - name: go diff --git a/docs/docs/tutorials/generating_stubs/using_protoc.md b/docs/docs/tutorials/generating_stubs/using_protoc.md index 240fe0e4689..b72eeb1120d 100644 --- a/docs/docs/tutorials/generating_stubs/using_protoc.md +++ b/docs/docs/tutorials/generating_stubs/using_protoc.md @@ -1,9 +1,9 @@ --- layout: default title: Generating stubs using protoc +nav_order: 1 parent: Generating stubs grand_parent: Tutorials -nav_order: 2 --- # Generating stubs using protoc diff --git a/docs/docs/tutorials/index.md b/docs/docs/tutorials/index.md index af5856ec9e3..ad3f51c5163 100644 --- a/docs/docs/tutorials/index.md +++ b/docs/docs/tutorials/index.md @@ -1,6 +1,6 @@ --- layout: default title: Tutorials -nav_order: 7 +nav_order: 6 has_children: true --- diff --git a/docs/docs/tutorials/introduction.md b/docs/docs/tutorials/introduction.md index 4d838329187..d179c94a22d 100644 --- a/docs/docs/tutorials/introduction.md +++ b/docs/docs/tutorials/introduction.md @@ -1,8 +1,8 @@ --- layout: default title: Introduction to the gRPC-Gateway +nav_order: 0 parent: Tutorials -nav_order: 1 --- # Introduction to the gRPC-Gateway @@ -13,11 +13,13 @@ So is there any way to code just once, but provide APIs in both gRPC and HTTP/JS The answer is Yes. -The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. +The gRPC-Gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. This helps you provide your APIs in both gRPC and HTTP/JSON format at the same time. -![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) +
    + +
    ## Prerequisites @@ -33,7 +35,8 @@ $ go get google.golang.org/protobuf/cmd/protoc-gen-go $ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc ``` -This installs the protoc generator plugins we need to generate the stubs. Make sure to add `$GOPATH/bin` to your `$PATH` so that executables installed via `go get` are available on your `$PATH`. +This installs the `protoc` generator plugins we need to generate the stubs. Make sure to add `$GOPATH/bin` to your `$PATH` so that executables installed via `go get` are available on your `$PATH`. + We will be working in a new module for this tutorial, so go ahead and create that in a folder of your choosing now: ### Creating go.mod file diff --git a/docs/docs/tutorials/learn_more.md b/docs/docs/tutorials/learn_more.md index c912c7c1ccc..b9d950da28e 100644 --- a/docs/docs/tutorials/learn_more.md +++ b/docs/docs/tutorials/learn_more.md @@ -1,20 +1,20 @@ --- layout: default title: Learn More +nav_order: 5 parent: Tutorials -nav_order: 6 --- # Learn More ## How it works -When the HTTP request arrives at the gRPC-gateway, it parses the JSON data into a protobuf message. It then makes a normal Go gRPC client request using the parsed protobuf message. The Go gRPC client encodes the protobuf structure into the protobuf binary format and sends it to the gRPC server. The gRPC Server handles the request and returns the response in the protobuf binary format. The Go gRPC client parses it into a protobuf message and returns it to the gRPC-gateway, which encodes the protobuf message to JSON and returns it to the original client. +When the HTTP request arrives at the gRPC-Gateway, it parses the JSON data into a protobuf message. It then makes a normal Go gRPC client request using the parsed protobuf message. The Go gRPC client encodes the protobuf structure into the protobuf binary format and sends it to the gRPC server. The gRPC Server handles the request and returns the response in the protobuf binary format. The Go gRPC client parses it into a protobuf message and returns it to the gRPC-Gateway, which encodes the protobuf message to JSON and returns it to the original client. ## google.api.http -Read more about `google.api.http` on [https://github.com/googleapis/googleapis/blob/master/google/api/http.proto](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto) +Read more about `google.api.http` in [the source file documentation](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto). ## HTTP and gRPC Transcoding -Read more about HTTP and gRPC Transcoding on [https://google.aip.dev/127](https://google.aip.dev/127) +Read more about HTTP and gRPC Transcoding on [AIP 127](https://google.aip.dev/127). diff --git a/docs/docs/tutorials/simple_hello_world.md b/docs/docs/tutorials/simple_hello_world.md index 7347a534687..71251833251 100644 --- a/docs/docs/tutorials/simple_hello_world.md +++ b/docs/docs/tutorials/simple_hello_world.md @@ -1,8 +1,8 @@ --- layout: default title: Creating a simple hello world with gRPC +nav_order: 1 parent: Tutorials -nav_order: 2 --- # Creating a simple hello world with gRPC @@ -15,7 +15,7 @@ Before we create a gRPC service, we should create a proto file to define what we The gRPC service is defined using [Google Protocol Buffers](https://developers.google.com/protocol-buffers). To learn more about how to define a service in a `.proto` file see their [Basics tutorial](https://grpc.io/docs/languages/go/basics/). For now, all you need to know is that both the server and the client stub have a `SayHello()` RPC method that takes a `HelloRequest` parameter from the client and returns a `HelloReply` from the server, and that the method is defined like this: -```proto +```protobuf syntax = "proto3"; package helloworld; diff --git a/docs/index.md b/docs/index.md index 5c70838822e..3bf0923687f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,14 +21,14 @@ This server is generated according to [custom options](https://cloud.google.com/ ## Getting started -[![circleci](https://img.shields.io/circleci/build/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=circleci&logoColor=ffffff&style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) -[![codecov](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway?color=379c9c&logo=codecov&logoColor=ffffff&style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) -[![slack](https://img.shields.io/badge/slack-grpc--gateway-379c9c?logo=slack&logoColor=ffffff&style=flat-square)](https://app.slack.com/client/T029RQSE6/CBATURP1D) -[![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) -[![release](https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?color=379c9c&logoColor=ffffff&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) -[![stars](https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?color=379c9c&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/stargazers) - -grpc-gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). + + + + + + + +gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). It reads a [gRPC](https://grpc.io) service definition, and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition. @@ -47,10 +47,10 @@ See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/master/ ## License -grpc-gateway is licensed under the BSD 3-Clause License. +gRPC-Gateway is licensed under the BSD 3-Clause License. See [LICENSE.txt](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) for more details. -#### Thank you to the contributors of gRPC-Gateway! +### Thank you to the contributors of gRPC-Gateway
      {% for contributor in site.github.contributors %} From 27e11a3be9620c1ecabcbf6823da1b393cb25f13 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Dec 2020 00:40:51 +0000 Subject: [PATCH 0758/1518] Update golang Docker tag to v1.15.6 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 5d8871f2acc..d8979b23b39 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.5 +FROM golang:1.15.6 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From f7caef79c027006b7345f5f428ccd3604dcd9d6e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Dec 2020 17:29:12 +0000 Subject: [PATCH 0759/1518] Update google.golang.org/genproto commit hash to 06b3db8 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c365c741978..1723f088727 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 - google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 + google.golang.org/genproto v0.0.0-20201204160425-06b3db808446 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 7b7ca824af2..f6b0621eef7 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497 h1:jDYzwXmX9tLnuG4sL85HPmE1ruErXOopALp2i/0AHnI= -google.golang.org/genproto v0.0.0-20201203001206-6486ece9c497/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201204160425-06b3db808446 h1:65ppmIPdaZE+BO34gntwqexoTYr30IRNGmS0OGOHu3A= +google.golang.org/genproto v0.0.0-20201204160425-06b3db808446/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ebe60f5bc0e..1756333d460 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:jDYzwXmX9tLnuG4sL85HPmE1ruErXOopALp2i/0AHnI=", - version = "v0.0.0-20201203001206-6486ece9c497", + sum = "h1:65ppmIPdaZE+BO34gntwqexoTYr30IRNGmS0OGOHu3A=", + version = "v0.0.0-20201204160425-06b3db808446", ) go_repository( name = "org_golang_google_grpc", From b4d54a0e3d1ea061661de197ce13e09e27ba8c41 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Mon, 7 Dec 2020 00:46:38 +0530 Subject: [PATCH 0760/1518] Refactored the documentation files of gRPC-Gateway (#1860) * refactored documentation files * refactored documentation files * refactored documentation files * refactored documentation files * refactored documentation files * refactored documentation files * added requested changes * added requested changes * added requested changes --- .github/ISSUE_TEMPLATE.md | 12 +-- .github/PULL_REQUEST_TEMPLATE.md | 2 +- CONTRIBUTING.md | 4 +- Makefile | 2 +- README.md | 15 +-- docs/docs/contributing/getting_started.md | 5 +- docs/docs/contributing/season_of_docs.md | 25 ++--- ....md => grpc-gateway_v2_migration_guide.md} | 50 +++------ docs/docs/development/index.md | 2 +- .../{cygwin.md => installation_for_cygwin.md} | 21 ++-- docs/docs/faq.md | 56 ++++------ ...utput.md => customizing_openapi_output.md} | 50 ++++----- ...gateway.md => customizing_your_gateway.md} | 77 +++++--------- docs/docs/mapping/examples.md | 26 ++--- ...iguration.md => grpc_api_configuration.md} | 42 +++----- .../{httpbody.md => httpbody_messages.md} | 8 +- docs/docs/mapping/patch.md | 100 ------------------ docs/docs/mapping/patch_feature.md | 83 +++++++++++++++ .../{aws.md => aws_gateway_integration.md} | 9 +- .../{healthcheck.md => health_check.md} | 18 ++-- docs/docs/operations/inject_router.md | 5 +- docs/docs/operations/tracing.md | 22 ++-- docs/docs/overview/background.md | 4 +- docs/docs/overview/usage.md | 3 +- docs/docs/tutorials/adding_annotations.md | 12 +-- docs/docs/tutorials/creating_main.go.md | 2 +- docs/index.md | 25 ++--- examples/internal/browser/README.md | 6 +- examples/internal/browser/bower.json | 2 +- examples/internal/browser/package.json | 2 +- examples/internal/gateway/doc.go | 2 +- examples/internal/gateway/main.go | 2 +- internal/descriptor/registry.go | 2 +- internal/descriptor/types.go | 2 +- .../internal/genopenapi/template.go | 2 +- .../options/annotations.pb.go | 10 +- .../options/annotations.proto | 10 +- 37 files changed, 311 insertions(+), 409 deletions(-) rename docs/docs/development/{v2-migration.md => grpc-gateway_v2_migration_guide.md} (69%) rename docs/docs/development/{cygwin.md => installation_for_cygwin.md} (85%) rename docs/docs/mapping/{customizingopenapioutput.md => customizing_openapi_output.md} (80%) rename docs/docs/mapping/{customizingyourgateway.md => customizing_your_gateway.md} (79%) rename docs/docs/mapping/{grpcapiconfiguration.md => grpc_api_configuration.md} (61%) rename docs/docs/mapping/{httpbody.md => httpbody_messages.md} (75%) delete mode 100644 docs/docs/mapping/patch.md create mode 100644 docs/docs/mapping/patch_feature.md rename docs/docs/operations/{aws.md => aws_gateway_integration.md} (86%) rename docs/docs/operations/{healthcheck.md => health_check.md} (75%) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index bc2066336a8..a24c8afffcb 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -6,22 +6,22 @@ ```sh go get github.com/grpc-ecosystem/grpc-gateway/v2@latest ``` -- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-openapiv2` binary from your `PATH`, - and reinstall the latest versions: +- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-openapiv2` binary from your `PATH`, and reinstall the latest versions: + ```sh go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 ``` - + ## I still have a problem! - + Please consider reaching out for help on a chat forum, such as [Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway). It's much easier to help with common debugging steps in a chat, and some of the maintainers are reading the channel regularly. If you submit an issue which is clearly an environment setup problem, or it's obvious you haven't tried seeking help somewhere else first, we may close your issue. - + ## I still have a problem! Please follow these steps to submit a bug report: @@ -58,7 +58,7 @@ Your answer here. ```html ``` diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a11d1705de9..2a60298cd1a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -3,7 +3,7 @@ Thank you for sending the PR! We appreciate you spending the time to work on the Help us understand your motivation by explaining why you decided to make this change. -You can learn more about contributing to grpc-gateway here: https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md +You can learn more about contributing to gRPC-Gateway here: https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md Happy contributing! diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 87ff509ac11..4961ede3ca0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,11 +48,11 @@ This repo contains a `devcontainer.json` configuration that sets up the build en [VS Code dev containers](https://code.visualstudio.com/docs/remote/containers). If you're using the dev container, you can run the commands directly in your terminal: -```shell +```sh $ make realclean && make examples && make testproto ``` -```shell +```sh $ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \ bazel run :gazelle && \ bazel run :buildifier diff --git a/Makefile b/Makefile index da225ece5a4..7917abb56ac 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # This is a Makefile which maintains files automatically generated but to be # shipped together with other files. # You don't have to rebuild these targets by yourself unless you develop -# grpc-gateway itself. +# gRPC-Gateway itself. GO_PLUGIN=bin/protoc-gen-go GO_PLUGIN_PKG=google.golang.org/protobuf/cmd/protoc-gen-go diff --git a/README.md b/README.md index e40353b26ad..6070077c7ba 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

      gRPC-Gateway

      -

      grpc-gateway +

      gRPC to JSON proxy generator following the gRPC HTTP spec

      @@ -294,12 +294,13 @@ Make sure that your `$GOBIN` is in your `$PATH`. ## Video intro -This GopherCon UK 2019 presentation from our maintainer -[@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to -using the gRPC-Gateway. It uses the following boilerplate repo as a base: -https://github.com/johanbrandhorst/grpc-gateway-boilerplate. +This GopherCon UK 2019 presentation from our maintainer [@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to using the gRPC-Gateway. It uses the following boilerplate repo as a base: https://github.com/johanbrandhorst/grpc-gateway-boilerplate. -[![gRPC-Gateway presentation](https://img.youtube.com/vi/Pq1paKC-fXk/0.jpg)](https://www.youtube.com/watch?v=Pq1paKC-fXk) +
      + + + +
      ## Parameters and flags @@ -358,7 +359,7 @@ More examples are available under the `examples` directory. - `main.go`: entrypoint of the generated reverse proxy To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), -gRPC-gateway, and a gRPC server, see +gRPC-Gateway, and a gRPC server, see [this example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)). diff --git a/docs/docs/contributing/getting_started.md b/docs/docs/contributing/getting_started.md index c9bd862fddb..f2b52520136 100644 --- a/docs/docs/contributing/getting_started.md +++ b/docs/docs/contributing/getting_started.md @@ -1,9 +1,10 @@ --- layout: default -title: Getting Started +title: Getting started +nav_order: 0 parent: Contributing --- # How to contribute -See CONTRIBUTING in [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). +See [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). diff --git a/docs/docs/contributing/season_of_docs.md b/docs/docs/contributing/season_of_docs.md index f116a513c94..024578527fd 100644 --- a/docs/docs/contributing/season_of_docs.md +++ b/docs/docs/contributing/season_of_docs.md @@ -1,30 +1,32 @@ --- layout: default -title: 2020 Season of Docs +title: Season of Docs +nav_order: 1 parent: Contributing --- -# 2020 Season of Docs +# Season of Docs -![Google Season of Docs](https://developers.google.com/season-of-docs/images/logo/SeasonofDocs_Logo_SecondaryGrey_300ppi.png "Season of Docs") +
      + +
      -This year the gRPC-Gateway is participating in the [Google Season of Docs](https://g.co/seasonofdocs). -We're excited to see what contributions this will bring to our documentation. +This year the gRPC-Gateway is participating in the [Google Season of Docs](https://g.co/seasonofdocs). We're excited to see what contributions this will bring to our documentation. ## Project details - Organization name: **gRPC-Gateway** - Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several common use cases: - - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + - When a user wants to migrate an API to gRPC but needs to expose a JSON/HTTP API to old users. - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - When quickly iterating on a JSON/HTTP API design. - Website: https://grpc-ecosystem.github.io/grpc-gateway - Repo: https://github.com/grpc-ecosystem/grpc-gateway - Project administrators and mentors: - - Johan Brandhorst (@johanbrandhorst) - - Andrew Z Allen (@achew22) + - Johan Brandhorst [@johanbrandhorst](https://github.com/johanbrandhorst) + - Andrew Z Allen [@achew22](https://github.com/achew22) ## Project Ideas @@ -47,8 +49,7 @@ Material: - [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) - [Jekyll](https://jekyllrb.com/) which powers the site now. - [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. -- [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which - contains an intro to the project. +- [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which contains an intro to the project. ### Rewrite the README with a better intro and examples @@ -75,7 +76,7 @@ The ones mentioned in the project details are the primary use cases we advertise - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API to old users. - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. -- When quickly iterating on an JSON/HTTP API design. +- When quickly iterating on a JSON/HTTP API design. It could be a single or several blog posts on our docs site, or another site, like Medium. @@ -88,7 +89,7 @@ a bit better. Maybe it could be rewritten as a FAQ that details solutions to com Material: -- [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) +- [Customizing your gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizing_your_gateway.html) ### Improve the contributor's guide diff --git a/docs/docs/development/v2-migration.md b/docs/docs/development/grpc-gateway_v2_migration_guide.md similarity index 69% rename from docs/docs/development/v2-migration.md rename to docs/docs/development/grpc-gateway_v2_migration_guide.md index 893a7dca126..9fb10dd87e5 100644 --- a/docs/docs/development/v2-migration.md +++ b/docs/docs/development/grpc-gateway_v2_migration_guide.md @@ -1,24 +1,20 @@ --- layout: default title: gRPC-Gateway v2 migration guide -parent: Developing -nav_order: 1 +nav_order: 0 +parent: Development --- # gRPC-Gateway v2 migration guide -This guide is supposed to help users of the gateway migrate from v1 to v2. -See https://github.com/grpc-ecosystem/grpc-gateway/issues/1223 for detailed -information on all changes that were made specifically to v2. +This guide is supposed to help users of the gateway migrate from v1 to v2. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) for detailed information on all changes that were made specifically to v2. The following behavioural defaults have been changed: ## protoc-gen-swagger has been renamed protoc-gen-openapiv2 -See -[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/675) -for more information. Apart from the new name, the only real -difference to users will be a slightly different proto annotation: +See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/675) +for more information. Apart from the new name, the only real difference to users will be a slightly different proto annotation: ```protobuf import "protoc-gen-openapiv2/options/annotations.proto"; @@ -42,14 +38,11 @@ instead of option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { ``` -The bazel rule has been renamed `protoc_gen_openapiv2`. +The Bazel rule has been renamed `protoc_gen_openapiv2`. ## The example field in the OpenAPI annotations is now a string -This was a `google.protobuf.Any` type, but it was only used for the JSON -representation, and it was breaking some tools and it was generally unclear to the user -how it works. It is now a string instead. The value is copied verbatim to -the output OpenAPI file. Remember to escape any quotes in the strings. +This was a `google.protobuf.Any` type, but it was only used for the JSON representation, and it was breaking some tools and it was generally unclear to the user how it works. It is now a string instead. The value is copied verbatim to the output OpenAPI file. Remember to escape any quotes in the strings. For example, if you had an example that looked like this: @@ -63,18 +56,14 @@ It would now look like this: example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}" ``` -See `a_bit_of_everything.proto` in the example protos for more examples. +See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) in the example protos for more examples. ## We now use the camelCase JSON names by default -See -[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) -and -[original pull request](https://github.com/grpc-ecosystem/grpc-gateway/pull/540) -for more information. +See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) and +[original pull request](https://github.com/grpc-ecosystem/grpc-gateway/pull/540) for more information. -If you want to revert to the old behaviour, configure a custom marshaler with -`UseProtoNames: true`: +If you want to revert to the old behaviour, configure a custom marshaler with `UseProtoNames: true`: ```go mux := runtime.NewServeMux( @@ -94,7 +83,7 @@ mux := runtime.NewServeMux( To change the OpenAPI generator behaviour to match, set `json_names_for_fields=false` when generating: -```shell +```sh --openapiv2_out=json_names_for_fields=false:./gen/openapiv2 path/to/my/proto/v1/myproto.proto ``` @@ -166,19 +155,10 @@ mux := runtime.NewServeMux( ## WithLastMatchWins and allow_colon_final_segments=true is now default behaviour If you were previously specifying these, please remove them, as this is now -the default behaviour. See -[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) -for more information. +the default behaviour. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) for more information. -There is no workaround for this, as we considered it a correct interpretation of the spec. -If this breaks your application, carefully consider the order in which you define your -services. +There is no workaround for this, as we considered it a correct interpretation of the spec. If this breaks your application, carefully consider the order in which you define your services. ## Error handling configuration has been overhauled -`runtime.HTTPError`, `runtime.OtherErrorHandler`, `runtime.GlobalHTTPErrorHandler`, -`runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the -use of gRPCs Status types. If you wish to configure how the gateway handles errors, -please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. -To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use -`runtime.WithRoutingErrorHandler`. +`runtime.HTTPError`, `runtime.OtherErrorHandler`, `runtime.GlobalHTTPErrorHandler`, `runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the use of gRPCs Status types. If you wish to configure how the gateway handles errors, please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use `runtime.WithRoutingErrorHandler`. diff --git a/docs/docs/development/index.md b/docs/docs/development/index.md index 1af2329bca5..f953f4bafc2 100644 --- a/docs/docs/development/index.md +++ b/docs/docs/development/index.md @@ -1,6 +1,6 @@ --- layout: default -title: Developing +title: Development nav_order: 4 has_children: true --- diff --git a/docs/docs/development/cygwin.md b/docs/docs/development/installation_for_cygwin.md similarity index 85% rename from docs/docs/development/cygwin.md rename to docs/docs/development/installation_for_cygwin.md index bf351c84772..12fece03d98 100644 --- a/docs/docs/development/cygwin.md +++ b/docs/docs/development/installation_for_cygwin.md @@ -1,27 +1,29 @@ --- layout: default title: Installation for Cygwin -parent: Developing -nav_order: 2 +nav_order: 1 +parent: Development --- # Installation for Cygwin -![cygwin-logo](https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Cygwin_logo.svg/145px-Cygwin_logo.svg.png) +
      + +
      ## Installation -First you need to install the [Go language](https://golang.org/dl/). Please install the latest version, not the one that is listed here. +First, you need to install the [Go language](https://golang.org/dl/). Please install the latest version, not the one that is listed here. wget -N https://storage.googleapis.com/golang/go1.8.1.windows-amd64.msi msiexec /i go1.8.1.windows-amd64.msi /passive /promptrestart -Then you need to install [ProtocolBuffers 3.0.0-beta-3](https://github.com/google/protobuf/releases) or later. Use the Windows release as no native Cygwin protoc with version 3 is available yet. +Then you need to install [ProtocolBuffers 3.0.0-beta-3](https://github.com/google/protobuf/releases) or later. Use the Windows release as no native Cygwin `protoc` with version 3 is available yet. wget -N https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-win32.zip` 7z x protoc-3.2.0-win32.zip -o/usr/local/ -Then you need to setup your Go workspace. Create the workspace dir. +Then you need to set up your Go workspace. Create the workspace dir. mkdir /home/user/go mkdir /home/user/go/bin @@ -49,8 +51,7 @@ This will probably fail with a similar output to this: fatal: Invalid path '/home/user/go/C:\path\to\your\cygwin\home\user\go\src\github.com\grpc-ecosystem\grpc-gateway': No such file or directory package github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway: exit status 128 -To fix this you need to run the `go get -u -v` commands and look for all lines starting with `# cd .;`. -Copy and paste these lines into your shell and change the clone destination directories. +To fix this you need to run the `go get -u -v` commands and look for all lines starting with `# cd .;`. Copy and paste these lines into your shell and change the clone destination directories. git clone https://github.com/grpc-ecosystem/grpc-gateway $(cygpath -u $GOPATH)/src/github.com/grpc-ecosystem/grpc-gateway git clone https://github.com/golang/glog $(cygpath -u $GOPATH)/src/github.com/golang/glog @@ -63,7 +64,7 @@ Once the clone operations are finished the `go get -u -v` commands shouldn't giv Follow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) in the [README](https://github.com/grpc-ecosystem/grpc-gateway#readme). -Adjust steps 3, 5 and 7 like this. protoc expects native Windows paths. +Adjust steps 3, 5 and 7 like this. `protoc` expects native Windows paths. protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=. --go-grpc_out=. ./path/to/your_service.proto protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --grpc-gateway_out=logtostderr=true:. ./path/to/your_service.proto @@ -85,4 +86,4 @@ Then run: go install -This will compile and install your grpc-gateway service into `$GOPATH/bin`. +This will compile and install your gRPC-Gateway service into `$GOPATH/bin`. diff --git a/docs/docs/faq.md b/docs/docs/faq.md index f8fc0d49cc5..907ffb0943f 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -1,74 +1,58 @@ --- layout: default title: FAQ -nav_order: 8 +nav_order: 7 --- # FAQ -## How can I write the annotations which grpc-gateway requires? +## How can I write the annotations which gRPC-Gateway requires? -The gRPC-Gateway follows the spec of -[`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), -so first check out the documentation if it is feasible in the spec. +The gRPC-Gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), so first check out the documentation if it is feasible in the spec. -See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) -in the grpc-io mailing list. +See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in the grpc-io mailing list. -## I want to support a certain style of HTTP request but the code generated by grpc-gateway does not. How can I support this style? +## I want to support a certain style of HTTP request but the code generated by gRPC-Gateway does not. How can I support this style? See the question above at first. -The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but -complicated annotations. So the gateway itself does not always cover all the use cases you -have by design. In other words, the gateway automates typical boring boilerplate mapping -between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. +The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So the gateway itself does not always cover all the use cases you have by design. In other words, the gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. On the other hand, you can still add whatever you want as a middleware which wraps -[`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). -Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), -you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party -libraries in Go. -e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/gateway/main.go +[`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go (e.g. [gateway main.go program](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/gateway/main.go). -## My gRPC server is written in (Scala or C++ or Ruby or Haskell...). Is there a (Scala or C++ or Ruby or Haskell...) version of grpc-gateway? +## My gRPC server is written in (Scala or C++ or Ruby or Haskell etc). Is there a (Scala or C++ or Ruby or Haskell etc) version of gRPC-Gateway? -AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates -usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. +As of now, No. But it should not be a big issue because the reverse-proxy which gRPC-Gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a Unix domain sockets (Unix systems only). ## Why are the models in the OpenAPI specification prefixed with the last part of the proto package name? -The reason to generate the prefixes is that we don't have a guaranteed unique namespace. -If two packages produce different Foo messages then we will have trouble. +The reason to generate the prefixes is that we don't have a guaranteed unique namespace. If two packages produce different `Foo` messages then we will have trouble. ## Why not strip the prefix? -When a message is added which happens to conflict with another message -(e.g. by importing a message with the same name from a different package) -it will break code that is very far away from the code that changed. -This is in an effort to adhere to the -[principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). +When a message is added which happens to conflict with another message (e.g. by importing a message with the same name from a different package) it will break code that is very far away from the code that changed. This is in an effort to adhere to the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). -## What is the difference between the grpc-gateway and grpc-httpjson-transcoding? +## What is the difference between the gRPC-Gateway and grpc-httpjson-transcoding? -The grpc-gateway is a generator that generates a Go implementation of a JSON/HTTP-gRPC reverse proxy based on annotations in your proto file, while the [grpc-httpjson-transcoding](https://github.com/grpc-ecosystem/grpc-httpjson-transcoding) library doesn't require the generation step, it uses protobuf descriptors as config. It can be used as a component of an existing proxy. Google Cloud Endpoints and the gRPC-JSON transcoder filter in Envoy are using this. +The gRPC-Gateway is a generator that generates a Go implementation of a JSON/HTTP-gRPC reverse proxy based on annotations in your proto file, while the [grpc-httpjson-transcoding](https://github.com/grpc-ecosystem/grpc-httpjson-transcoding) library doesn't require the generation step, it uses protobuf descriptors as config. It can be used as a component of an existing proxy. Google Cloud Endpoints and the gRPC-JSON transcoder filter in Envoy are using this. -## What is the difference between the grpc-gateway and grpc-web? +## What is the difference between the gRPC-Gateway and gRPC-web? ### Usage -In the grpc-gateway, we generate a reverse-proxy from the proto file annotations. In the front-end, we call directly through REST APIs. We can generate an OpenAPI v2 specification that may further be used to generate the frontend client from using `protoc-gen-openapiv2`. +In the gRPC-Gateway, we generate a reverse-proxy from the proto file annotations. In the front-end, we call directly through REST APIs. We can generate an OpenAPI v2 specification that may further be used to generate the frontend client from using `protoc-gen-openapiv2`. -In grpc-web, the client code is generated directly from the proto files and can be used in the frontend. +In gRPC-web, the client code is generated directly from the proto files and can be used in the frontend. ### Performance -The grpc-gateway parses JSON to the protobuf binary format before sending it to the gRPC server. It then has to parse the reply back from the protobuf binary format to JSON again. The parsing overhead has a negative impact on performance. +The gRPC-Gateway parses JSON to the protobuf binary format before sending it to the gRPC server. It then has to parse the reply back from the protobuf binary format to JSON again The parsing overhead has a negative impact on performance. -In grpc-web, the message is sent in the protobuf binary format already, so there is no additional parsing cost on the proxy side. +In gRPC-web, the message is sent in the protobuf binary format already, so there is no additional parsing cost on the proxy side. ### Maintenance -With the grpc-gateway, if your proto file changes, we have to regenerate the gateway reverse proxy code. If you are using the HTTP/JSON interface you probably have to change the front-end too, which means making changes in two places. +With the gRPC-Gateway, if your proto file changes, we have to regenerate the gateway reverse proxy code. If you are using the HTTP/JSON interface you probably have to change the front-end too, which means making changes in two places. -In grpc-web, regenerating the files from the proto file will automatically update the front-end client. +In gRPC-web, regenerating the files from the proto file will automatically update the front-end client. diff --git a/docs/docs/mapping/customizingopenapioutput.md b/docs/docs/mapping/customizing_openapi_output.md similarity index 80% rename from docs/docs/mapping/customizingopenapioutput.md rename to docs/docs/mapping/customizing_openapi_output.md index 5dedd90c10e..e1d8184d852 100644 --- a/docs/docs/mapping/customizingopenapioutput.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -1,13 +1,15 @@ --- layout: default -title: Customizing OpenAPI Ouptut +title: Customizing OpenAPI Output +nav_order: 4 parent: Mapping -nav_order: 5 --- {% raw %} -# In proto comments +# Customizing OpenAPI Output + +## In proto comments You can provide comments directly in your Protocol Buffer defintions and they will be translated into comments in the generated OpenAPI definitions: @@ -18,7 +20,7 @@ message MyMessage { } ``` -# Using proto options +## Using proto options You can define options on your Protocol Buffer services, operations, messages, and field definitions to customize your Open API output. For instance, to customize the [OpenAPI Schema Object](https://swagger.io/specification/v2/#schemaObject) for messages and fields: @@ -76,9 +78,9 @@ service ABitOfEverythingService { } ``` -Please see this [example](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of the options being used. +Please see this [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of the options being used. -# Using google.api.field_behavior +## Using google.api.field_behavior Google provides an [field option](https://github.com/googleapis/googleapis/blob/master/google/api/field_behavior.proto) for defining the behavior of fields that is also supported: @@ -92,22 +94,18 @@ message MyMessage { The following options are used in the Open API output: -* `REQUIRED` - marks a field as required -* `OUTPUT_ONLY` - marks a field as readonly +- `REQUIRED` - marks a field as required +- `OUTPUT_ONLY` - marks a field as readonly -Google defines a couple other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` - +Google defines a couple of other options - `OPTIONAL`, `IMMUTABLE`, `INPUT_ONLY` - that are not currently used. `OPTIONAL` support is currently under discussion in [this issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/669). -For `IMMUTABLE` and `INPUT_ONLY` fields, there is an -[open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) -in the Open API specification for adding functionality for write once or -immutable fields to the spec. -# Using go templates in protofile comments +For `IMMUTABLE` and `INPUT_ONLY` fields, there is an [open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) in the Open API specification for adding functionality for write-once or immutable fields to the spec. + +## Using go templates in proto file comments -Use [Go templates](https://golang.org/pkg/text/template/) -in your protofile comments to allow more advanced documentation such -as: +Use [Go templates](https://golang.org/pkg/text/template/) in your proto file comments to allow more advanced documentation such as: - Documentation about fields in the proto objects. - Import the content of external files (such as @@ -115,16 +113,15 @@ as: ## How to use it -By default this function is turned off, so if you want to use it you -have to add the `use_go_templates` option: +By default this function is turned off, so if you want to use it you have to add the `use_go_templates` option: -```shell +```sh --openapiv2_out . --openapiv2_opt use_go_templates=true ``` or: -```shell +```sh --openapiv2_out=use_go_templates=true:. ``` @@ -132,7 +129,7 @@ or: Example of a bash script with the `use_go_templates` flag set to true: -```shell +```sh $ protoc -I. \ --go_out . --go-grpc_out . \ --grpc-gateway_out . --grpc-gateway_opt logtostderr=true \ @@ -144,7 +141,7 @@ $ protoc -I. \ ### Example proto file -Example of a protofile with Go templates. This proto file imports documentation from another file, `tables.md`: +Example of a proto file with Go templates. This proto file imports documentation from another file, `tables.md`: ```protobuf service LoginService { @@ -193,17 +190,16 @@ The content of `tables.md`: ### SwaggerUI -This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) +This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/). ![Screenshot OpenAPI file in SwaggerUI](../../assets/images/gotemplates/swaggerui.png) ### Postman -This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) +This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/). ![Screenshot OpenAPI file in Postman](../../assets/images/gotemplates/postman.png) -For a more detailed example of a protofile that has Go templates enabled, -[see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). +For a more detailed example of a proto file that has Go, templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). {% endraw %} diff --git a/docs/docs/mapping/customizingyourgateway.md b/docs/docs/mapping/customizing_your_gateway.md similarity index 79% rename from docs/docs/mapping/customizingyourgateway.md rename to docs/docs/mapping/customizing_your_gateway.md index 19236ce76ee..979c234e74c 100644 --- a/docs/docs/mapping/customizingyourgateway.md +++ b/docs/docs/mapping/customizing_your_gateway.md @@ -1,8 +1,8 @@ --- layout: default title: Customizing your gateway +nav_order: 5 parent: Mapping -nav_order: 10 --- # Customizing your gateway @@ -11,11 +11,14 @@ nav_order: 10 ### Custom serializer -You might want to serialize request/response messages in MessagePack instead of JSON, for example. +You might want to serialize request/response messages in MessagePack instead of JSON, for example: + +1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler). + +2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption). -1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) -2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) e.g. + ```go var m your.MsgPackMarshaler mux := runtime.NewServeMux( @@ -47,8 +50,8 @@ mux := runtime.NewServeMux( You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows: -1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) - that translates the provided query parameter into a custom `Accept` header, and +1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) that translates the provided query parameter into a custom `Accept` header. + 2. Register a pretty-printing marshaler for that MIME code. For example: @@ -78,16 +81,13 @@ prettier := func(h http.Handler) http.Handler { http.ListenAndServe(":8080", prettier(mux)) ``` -Now, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to -your HTTP endpoints, the response will be pretty-printed. +Now, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to your HTTP endpoints, the response will be pretty-printed. -Note that this will conflict with any methods having input messages with fields named `pretty`; -also, this example code does not remove the query parameter `pretty` from further processing. +Note that this will conflict with any methods having input messages with fields named `pretty`; also, this example code does not remove the query parameter `pretty` from further processing. ## Customize unmarshaling per Content-Type -Having different unmarshaling options per Content-Type is as easy as -configuring a custom marshaler: +Having different unmarshaling options per Content-Type is as easy as configuring a custom marshaler: ```go mux := runtime.NewServeMux( @@ -101,9 +101,10 @@ mux := runtime.NewServeMux( ## Mapping from HTTP request headers to gRPC client metadata -You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. +You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example: 1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). + 2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) e.g. @@ -140,13 +141,13 @@ func CustomMatcher(key string) (string, bool) { It will work with both: -```shell +```sh $ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` -and: +and -```shell +```sh $ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` @@ -163,9 +164,7 @@ if md, ok := metadata.FromIncomingContext(ctx); ok { ## Mapping from gRPC server metadata to HTTP response headers -ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). -See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) -for more info on sending / receiving gRPC metadata, e.g. +Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) for more info on sending / receiving gRPC metadata, for example: ```go if appendCustomHeader { @@ -179,9 +178,7 @@ if appendCustomHeader { ### Set HTTP headers -You might want to return a subset of response fields as HTTP response headers; -You might want to simply set an application-specific token in a header. -Or you might want to mutate the response messages to be returned. +You might want to return a subset of response fields as HTTP response headers; You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. 1. Write a filter function. @@ -217,7 +214,7 @@ grpc.SetHeader(ctx, metadata.Pairs("x-http-code", "401")) ``` Now, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found. -To do so, create a function and hook it into the grpc-gateway as a Forward Response Option. +To do so, create a function and hook it into the gRPC-Gateway as a Forward Response Option. The function looks like this: @@ -244,7 +241,7 @@ func httpResponseModifier(ctx context.Context, w http.ResponseWriter, p proto.Me } ``` -And it gets hooked into the grpc-gateway with: +And it gets hooked into the gRPC-Gateway with: ```go gwMux := runtime.NewServeMux( @@ -260,18 +257,11 @@ responses to pass through this error handler. ## Stream Error Handler -The error handler described in the previous section applies only -to RPC methods that have a unary response. +The error handler described in the previous section applies only to RPC methods that have a unary response. -When the method has a streaming response, grpc-gateway handles -that by emitting a newline-separated stream of "chunks". Each -chunk is an envelope that can contain either a response message -or an error. Only the last chunk will include an error, and only -when the RPC handler ends abnormally (i.e. with an error code). +When the method has a streaming response, gRPC-Gateway handles that by emitting a newline-separated stream of "chunks". Each chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, and only when the RPC handler ends abnormally (i.e. with an error code). -Because of the way the errors are included in the response body, -the other error handler signature is insufficient. So for server -streams, you must install a _different_ error handler: +Because of the way the errors are included in the response body, the other error handler signature is insufficient. So for server streams, you must install a _different_ error handler: ```go mux := runtime.NewServeMux( @@ -279,13 +269,9 @@ mux := runtime.NewServeMux( ) ``` -The signature of the handler is much more rigid because we need -to know the structure of the error payload to properly -encode the "chunk" schema into an OpenAPI spec. +The signature of the handler is much more rigid because we need to know the structure of the error payload to properly encode the "chunk" schema into an OpenAPI spec. -So the function must return a `*runtime.StreamError`. The handler -can choose to omit some fields and can filter/transform the original -error, such as stripping stack traces from error messages. +So the function must return a `*runtime.StreamError`. The handler can choose to omit some fields and can filter/transform the original error, such as stripping stack traces from error messages. Here's an example custom handler: @@ -316,18 +302,13 @@ func handleStreamError(ctx context.Context, err error) *status.Status { } ``` -If no custom handler is provided, the default stream error handler -will include any gRPC error attributes (code, message, detail messages), -if the error being reported includes them. If the error does not have -these attributes, a gRPC code of `Unknown` (2) is reported. +If no custom handler is provided, the default stream error handler will include any gRPC error attributes (code, message, detail messages), if the error being reported includes them. If the error does not have these attributes, a gRPC code of `Unknown` (2) is reported. ## Routing Error handler -To override the error behavior when `*runtime.ServeMux` was not -able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option. +To override the error behavior when `*runtime.ServeMux` was not able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option. -This will configure all HTTP routing errors to pass through this error handler. -Default behavior is to map HTTP error codes to gRPC errors. +This will configure all HTTP routing errors to pass through this error handler. The default behavior is to map HTTP error codes to gRPC errors. HTTP statuses and their mappings to gRPC statuses: diff --git a/docs/docs/mapping/examples.md b/docs/docs/mapping/examples.md index 3528336c5fa..2559a24542d 100644 --- a/docs/docs/mapping/examples.md +++ b/docs/docs/mapping/examples.md @@ -1,35 +1,27 @@ --- layout: default title: Examples +nav_order: 0 parent: Mapping -nav_order: 1 --- # Examples Examples are available under `examples/internal` directory. -- [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), - [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.proto), - [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto): +- [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.proto), [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto): protobuf service definitions. -- [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), - [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), - [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): +- [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): generated Go service stubs and types. -- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), - [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), - [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): - generated gRPC-gateway clients. - - [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): - gRPC API Configuration for `unannotated_echo_service.proto`. +- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): + generated gRPC-Gateway clients. +- [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): + gRPC API Configuration for `unannotated_echo_service.proto`. - [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): service implementation. - [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/gateway/main.go): entrypoint of the generated reverse proxy. To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), -gRPC-gateway, and a gRPC server, see -[this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) -(and its accompanying -[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) +gRPC-Gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and it's accompanying +[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)). diff --git a/docs/docs/mapping/grpcapiconfiguration.md b/docs/docs/mapping/grpc_api_configuration.md similarity index 61% rename from docs/docs/mapping/grpcapiconfiguration.md rename to docs/docs/mapping/grpc_api_configuration.md index 06bfc6cf69b..a6912f58b8c 100644 --- a/docs/docs/mapping/grpcapiconfiguration.md +++ b/docs/docs/mapping/grpc_api_configuration.md @@ -1,23 +1,22 @@ --- layout: default title: gRPC API Configuration +nav_order: 3 parent: Mapping -nav_order: 4 --- # gRPC API Configuration -In some situations annotating the .proto file of a service is not an option. For example, you might not have control over the .proto file, or you might want to expose the same gRPC API multiple times in completely different ways. +In some situations annotating the proto file of service is not an option. For example, you might not have control over the proto file, or you might want to expose the same gRPC API multiple times in completely different ways. -`grpc-gateway` supports 2 ways of dealing with these situations: +gRPC-Gateway supports 2 ways of dealing with these situations: - [use the `generate_unbound_methods` option](#generate_unbound_methods) - [provide an external configuration file](#using-an-external-configuration-file) (gRPC API Configuration) ## `generate_unbound_methods` -Providing this parameter to the protoc plugin will make it produce the HTTP mapping even for methods without any `HttpRule` annotation. -This is similar to how [Cloud Endpoints behaves](https://cloud.google.com/endpoints/docs/grpc/transcoding#where_to_configure_transcoding) and uses the way [gRPC itself](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) maps to HTTP/2: +Providing this parameter to the `protoc` plugin will make it produce the HTTP mapping even for methods without any `HttpRule` annotation. This is similar to how [Cloud Endpoints behaves](https://cloud.google.com/endpoints/docs/grpc/transcoding#where_to_configure_transcoding) and uses the way [gRPC itself](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) maps to HTTP/2: - HTTP method is `POST` - URI path is built from the service's name and method: `//` (e.g.: `/my.package.EchoService/Echo`) @@ -28,29 +27,16 @@ NOTE: the same option is also supported by the `gen-openapiv2` plugin. ## Using an external configuration file Google Cloud Platform offers a way to do this for services -hosted with them called -["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). -It can be used to define the behavior of a gRPC API service -without modifications to the service itself in the form of -[YAML](https://en.wikipedia.org/wiki/YAML) configuration files. - -grpc-gateway generators implement the -[HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) -of this specification. This allows you to take a completely -unannotated service proto file, add a YAML file describing -its HTTP endpoints and use them together like a annotated -proto file with the grpc-gateway generators. - -OpenAPI options may also be configured via -["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files. +hosted with them called ["gRPC API Configuration"](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config). It can be used to define the behavior of a gRPC API service without modifications to the service itself in the form of [YAML](https://en.wikipedia.org/wiki/YAML) configuration files. + +gRPC-Gateway generators implement the [HTTP rules part](https://cloud.google.com/endpoints/docs/grpc-service-config/reference/rpc/google.api#httprule) of this specification. This allows you to take a completely unannotated service proto file, add a YAML file describing its HTTP endpoints and use them together like an annotated proto file with the gRPC-Gateway generators. + +OpenAPI options may also be configured via ["OpenAPI Configuration"](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/internal/descriptor/openapiconfig/openapiconfig.proto) in the form of YAML configuration files. ### Usage of gRPC API Configuration YAML files -The following is equivalent to the basic -[`README.md`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md#usage) -example but without direct -annotation for grpc-gateway in the .proto file. Only some steps require minor -changes to use a gRPC API Configuration YAML file instead: +The following is equivalent to the basic [`README.md`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md#usage) example but without direct +annotation for gRPC-Gateway in the proto file. Only some steps require minor changes to use a gRPC API Configuration YAML file instead: 1. Define your service in gRPC as usual @@ -69,7 +55,7 @@ changes to use a gRPC API Configuration YAML file instead: } ``` -2. Instead of annotating the .proto file in this step leave it untouched +2. Instead of annotating the proto file in this step leave it untouched and create a `your_service.yaml` with the following content: ```yaml @@ -101,7 +87,7 @@ It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb 4. Implement your service in gRPC as usual 5. Generate the reverse-proxy. Here we have to pass the path to - the `your_service.yaml` in addition to the .proto file: + the `your_service.yaml` in addition to the proto file: ```sh protoc -I . \ @@ -139,4 +125,4 @@ It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb your/service/v1/your_service.proto ``` -All other steps work as before. If you want you can remove the googleapis include path in step 3 and 4 as the unannotated proto no longer requires them. +All other steps work as before. If you want you can remove the `googleapis` include path in step 3 and 4 as the unannotated proto no longer requires them. diff --git a/docs/docs/mapping/httpbody.md b/docs/docs/mapping/httpbody_messages.md similarity index 75% rename from docs/docs/mapping/httpbody.md rename to docs/docs/mapping/httpbody_messages.md index 409ad9a4b68..4a3623b69bc 100644 --- a/docs/docs/mapping/httpbody.md +++ b/docs/docs/mapping/httpbody_messages.md @@ -1,13 +1,13 @@ --- layout: default -title: HttpBody messages +title: HttpBody Messages +nav_order: 1 parent: Mapping -nav_order: 2 --- -# HttpBody messages +# HttpBody Messages -The [HTTP Body](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! +The [HTTPBody](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allow a response message to be specified with custom data content and a custom content-type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! ## Example Usage diff --git a/docs/docs/mapping/patch.md b/docs/docs/mapping/patch.md deleted file mode 100644 index 38ad134a0b0..00000000000 --- a/docs/docs/mapping/patch.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -layout: default -title: Patch Feature -parent: Mapping -nav_order: 3 ---- - -# Patch Feature - -The HTTP PATCH method allows a resource to be partially updated. - -If a binding is mapped to patch and the request message has exactly one -FieldMask message in it, additional code is rendered for the gateway -handler that will populate the FieldMask based on the request body. - -There are two scenarios: - -- The FieldMask is hidden from the REST request as per the - [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) - (as in the first additional binding in the - [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L428-L431) - example). - In this case, the FieldMask is updated from the request body and - set in the gRPC request message. -- The FieldMask is exposed to the REST request (as in the second - additional binding in the - [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L432-L435) - example). - For this case, the field mask is left untouched by the gateway. - -## Example Usage - -1. Create PATCH request. - - The PATCH request needs to include the message and the update mask. - - ```protobuf - // UpdateV2Request request for update includes the message and the update mask - message UpdateV2Request { - ABitOfEverything abe = 1; - google.protobuf.FieldMask update_mask = 2; - } - ``` - -2. Define your service in gRPC - - If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. - - ```protobuf - rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - put: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - additional_bindings { - patch: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - } - }; - } - ``` - - If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. - - ```protobuf - rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" - body: "*" - }; - } - ``` - -3. Generate gRPC and reverse-proxy stubs and implement your service. - -## Curl examples - -In the example below we will partially update our ABitOfEverything -resource by passing only the field we want to change. Since we are -using the endpoint with field mask hidden we only need to pass the -field we want to change ("string_value") and it will keep everything -else in our resource the same. - -```shell -$ curl \ - --data '{"stringValue": "strprefix/foo"}' \ - -X PATCH \ - http://address:port/v2/example/a_bit_of_everything/1 -``` - -If we know what fields we want to update then we can use PATCH with -field mask approach. For this we need to pass the resource and the -update_mask. Below only the "single_nested" will get updated because -that is what we specify in the field_mask. - -```shell -$ curl \ - --data '{"abe":{"singleNested":{"amount":457},"stringValue":"some value that will not get updated because not in the field mask"},"updateMask":"singleNested"}}' \ - -X PATCH \ - http://address:port/v2a/example/a_bit_of_everything/1 -``` diff --git a/docs/docs/mapping/patch_feature.md b/docs/docs/mapping/patch_feature.md new file mode 100644 index 00000000000..7655f999e0f --- /dev/null +++ b/docs/docs/mapping/patch_feature.md @@ -0,0 +1,83 @@ +--- +layout: default +title: Patch feature +nav_order: 2 +parent: Mapping +--- + +# Patch feature + +The HTTP PATCH method allows a resource to be partially updated. + +If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. + +There are two scenarios: + +- The FieldMask is hidden from the REST request as per the + [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L428-L431) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/370d869f65d1ffb3d07187fb0db238eca2371ce3/examples/internal/proto/examplepb/a_bit_of_everything.proto#L432-L435) example). For this case, the field mask is left untouched by the gateway. + +## Example Usage + +1. Create a PATCH request. + + The PATCH request needs to include the message and the update mask. + + ```protobuf + // UpdateV2Request request for update includes the message and the update mask + message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; + } + ``` + +2. Define your service in gRPC + + If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. + + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; + } + ``` + + If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. + + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; + } + ``` + +3. Generate gRPC and reverse-proxy stubs and implement your service. + +## cURL examples + +In the example below, we will partially update our ABitOfEverything resource by passing only the field we want to change. Since we are using the endpoint with field mask hidden we only need to pass the field we want to change ("string_value") and it will keep everything else in our resource the same. + +```sh +$ curl \ + --data '{"stringValue": "strprefix/foo"}' \ + -X PATCH \ + http://address:port/v2/example/a_bit_of_everything/1 +``` + +If we know what fields we want to update then we can use PATCH with field mask approach. For this, we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask. + +```sh +$ curl \ + --data '{"abe":{"singleNested":{"amount":457},"stringValue":"some value that will not get updated because not in the field mask"},"updateMask":"singleNested"}}' \ + -X PATCH \ + http://address:port/v2a/example/a_bit_of_everything/1 +``` diff --git a/docs/docs/operations/aws.md b/docs/docs/operations/aws_gateway_integration.md similarity index 86% rename from docs/docs/operations/aws.md rename to docs/docs/operations/aws_gateway_integration.md index 615be257c5f..0544512fdec 100644 --- a/docs/docs/operations/aws.md +++ b/docs/docs/operations/aws_gateway_integration.md @@ -1,15 +1,16 @@ --- layout: default -title: AWS Gateway Integration +title: AWS gateway integration +nav_order: 3 parent: Operations -nav_order: 5 --- -# AWS +# AWS gateway integration ## Import OpenAPI documentation into AWS API Gateway -The AWS API gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html). +The AWS API Gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html). + Here are some tips to consider when importing the documentation: 1. Remove any circular dependencies (these aren't supported by the parser). diff --git a/docs/docs/operations/healthcheck.md b/docs/docs/operations/health_check.md similarity index 75% rename from docs/docs/operations/healthcheck.md rename to docs/docs/operations/health_check.md index 15e204a49fc..df332804f51 100644 --- a/docs/docs/operations/healthcheck.md +++ b/docs/docs/operations/health_check.md @@ -1,26 +1,26 @@ --- layout: default -title: Health Check +title: Health check +nav_order: 1 parent: Operations -nav_order: 3 --- # Health check -## With the [GRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) +## With the [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) -To use the GRPC health checking protocol you must add the two health checking methods, `Watch` and `Check`. +To use the gRPC health checking protocol you must add the two health checking methods, `Watch` and `Check`. -#### Registering the health server +## Registering the health server 1. Add `google.golang.org/grpc/health/grpc_health_v1` to your imports 2. Register the health server with `grpc_health_v1.RegisterHealthServer(grpcServer, yourService)` -#### Adding the health check methods +## Adding the health check methods 1. Check method -``` +```go func (s *serviceServer) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) { return &health.HealthCheckResponse{Status: health.HealthCheckResponse_SERVING}, nil } @@ -28,11 +28,11 @@ func (s *serviceServer) Check(ctx context.Context, in *health.HealthCheckRequest 2. Watch method -``` +```go func (s *serviceServer) Watch(in *health.HealthCheckRequest, _ health.Health_WatchServer) error { // Example of how to register both methods but only implement the Check method. return status.Error(codes.Unimplemented, "unimplemented") } ``` -3. You can test the functionality with [GRPC health probe](https://github.com/grpc-ecosystem/grpc-health-probe) +3. You can test the functionality with [GRPC health probe](https://github.com/grpc-ecosystem/grpc-health-probe). diff --git a/docs/docs/operations/inject_router.md b/docs/docs/operations/inject_router.md index e6f6ec1dfb0..d3969b653d9 100644 --- a/docs/docs/operations/inject_router.md +++ b/docs/docs/operations/inject_router.md @@ -1,13 +1,13 @@ --- layout: default title: Adding custom routes to the mux +nav_order: 0 parent: Operations -nav_order: 2 --- # Adding custom routes to the mux -The gRPC-gateway allows you to add custom routes to the serve mux, for example if you want to support a use case that isn't supported by the grpc-gateway, like file uploads. +The gRPC-Gateway allows you to add custom routes to the serve mux, for example, if you want to support a use case that isn't supported by the gRPC-Gateway, like file uploads. ## Example @@ -40,7 +40,6 @@ func main() { http.ListenAndServe(":8080", mux) } - // GreeterServer is the server API for Greeter service. type GreeterServer struct { diff --git a/docs/docs/operations/tracing.md b/docs/docs/operations/tracing.md index c695d76b9cd..219d6a859cf 100644 --- a/docs/docs/operations/tracing.md +++ b/docs/docs/operations/tracing.md @@ -1,15 +1,15 @@ --- layout: default title: Tracing +nav_order: 2 parent: Operations -nav_order: 4 --- # Tracing -## With [OpenCensus.io](https://opencenus.io) and [AWS X-ray](https://aws.amazon.com/xray/) +## With [OpenCensus.io](https://opencensus.io/) and [AWS X-ray](https://aws.amazon.com/xray/) -#### Adding tracing using AWS-Xray as the exporter +### Adding tracing using AWS-Xray as the exporter This example uses the AWS-Xray exporter with a global trace setting. Note that AWS X-ray exporter does not handle any metrics only tracing. @@ -48,7 +48,7 @@ trace.RegisterExporter(xrayExporter) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) ``` -4. Add `ocgrpc.ClientHandler` for tracing the grpc client calls +4. Add `ocgrpc.ClientHandler` for tracing the gRPC client calls ```go // Example using DialContext @@ -75,13 +75,13 @@ gwServer := &http.Server{ } ``` -#### Without a global configuration +### Without a global configuration -In this example we have added the [GRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) and we do not wish to trace any health checks. +In this example we have added the [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md) and we do not wish to trace any health checks. -1. Follow step `1`, `2` and `4` from the previous section +1. Follow step `1`, `2` and `4` from the previous section. -2. Since we are not using a global configuration we can decide what paths we want to trace +2. Since we are not using a global configuration we can decide what paths we want to trace. ```go gwmux := runtime.NewServeMux() @@ -99,9 +99,9 @@ openCensusHandler := &ochttp.Handler{ } ``` -4. No global configuration means we have to use the [per span sampler](https://opencensus.io/tracing/sampling/#per-span-sampler) +4. No global configuration means we have to use the [per span sampler](https://opencensus.io/tracing/sampling/#per-span-sampler). -##### A method we want to trace +#### A method we want to trace ```go func (s *service) Name(ctx context.Context, req *pb.Request) (*pb.Response, error) { @@ -114,7 +114,7 @@ func (s *service) Name(ctx context.Context, req *pb.Request) (*pb.Response, erro } ``` -##### A method we do not wish to trace +#### A method we do not wish to trace ```go func (s *service) Check(ctx context.Context, in *health.HealthCheckRequest) (*health.HealthCheckResponse, error) { diff --git a/docs/docs/overview/background.md b/docs/docs/overview/background.md index 3e23722ebf1..9e0fbc84c65 100644 --- a/docs/docs/overview/background.md +++ b/docs/docs/overview/background.md @@ -1,12 +1,12 @@ --- layout: default title: Background +nav_order: 0 parent: Overview --- # Background -gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. -However, you might still want to provide a traditional RESTful API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by gRPC to simply maintaining the aesthetics and tooling involved with a RESTful architecture. +gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. However, you might still want to provide a traditional RESTful API as well. Reasons can range from maintaining backwards-compatibility, supporting languages or clients not well supported by gRPC to simply maintaining the aesthetics and tooling involved with a RESTful architecture. This project aims to provide that HTTP+JSON interface to your gRPC service. A small amount of configuration in your service to attach HTTP semantics is all that's needed to generate a reverse-proxy with this library. diff --git a/docs/docs/overview/usage.md b/docs/docs/overview/usage.md index 473f3656cf7..d9e7b0545d5 100644 --- a/docs/docs/overview/usage.md +++ b/docs/docs/overview/usage.md @@ -1,9 +1,10 @@ --- layout: default title: How do I use this? +nav_order: 1 parent: Overview --- # How do I use this? -See the README in [the repo](https://github.com/grpc-ecosystem/grpc-gateway/). +Follow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) in the [README](https://github.com/grpc-ecosystem/grpc-gateway#readme). diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index 2d6d80c2c49..bce9c86791c 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -124,7 +124,7 @@ func NewServer() *server { } func (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) { - return &helloworldpb.HelloReply{Message: in.Name + " World"}, nil + return &helloworldpb.HelloReply{Message: in.Name + " world"}, nil } func main() { @@ -138,13 +138,13 @@ func main() { s := grpc.NewServer() // Attach the Greeter service to the server helloworldpb.RegisterGreeterServer(s, &server{}) - // Serve gRPC Server + // Serve gRPC server log.Println("Serving gRPC on 0.0.0.0:8080") go func() { log.Fatalln(s.Serve(lis)) }() - // Create a client connection to the gRPC Server we just started + // Create a client connection to the gRPC server we just started // This is where the gRPC-Gateway proxies the requests conn, err := grpc.DialContext( context.Background(), @@ -186,15 +186,15 @@ $ go run main.go Then we use cURL to send HTTP requests: ```sh -$ curl -X POST -k http://localhost:8090/v1/example/echo -d '{"name": " Hello"}' +$ curl -X POST -k http://localhost:8090/v1/example/echo -d '{"name": " hello"}' ``` ``` -{"message":"Hello World"} +{"message":"hello world"} ``` Hopefully, that gives a bit of understanding of how to use the gRPC-Gateway. -Full source code of hello world can be found here [helloworld-grpc-gateway](https://github.com/iamrajiv/helloworld-grpc-gateway) +Full source code of hello world program can be found here [helloworld-grpc-gateway](https://github.com/iamrajiv/helloworld-grpc-gateway). [Next](learn_more.md){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/tutorials/creating_main.go.md b/docs/docs/tutorials/creating_main.go.md index 6232b05ea8b..880277bff42 100644 --- a/docs/docs/tutorials/creating_main.go.md +++ b/docs/docs/tutorials/creating_main.go.md @@ -29,7 +29,7 @@ func NewServer() *server { } func (s *server) SayHello(ctx context.Context, in *helloworldpb.HelloRequest) (*helloworldpb.HelloReply, error) { - return &helloworldpb.HelloReply{Message: in.Name + " World"}, nil + return &helloworldpb.HelloReply{Message: in.Name + " world"}, nil } func main() { diff --git a/docs/index.md b/docs/index.md index 3bf0923687f..5139b2fd3c7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,13 +9,10 @@ permalink: / # gRPC-Gateway {: .fs-9 } -gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). -It reads a [gRPC](https://grpc.io) service definition, -and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. -This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition. +gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). It reads a [gRPC](https://grpc.io/) service definition and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition. {: .fs-6 .fw-300 } -[Get started now](#getting-started){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/grpc-ecosystem/grpc-gateway){: .btn .fs-5 .mb-4 .mb-md-0 } +[Get started](#getting-started){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } [View it on GitHub](https://github.com/grpc-ecosystem/grpc-gateway){: .btn .fs-5 .mb-4 .mb-md-0 } --- @@ -28,34 +25,30 @@ This server is generated according to [custom options](https://cloud.google.com/ -gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). -It reads a [gRPC](https://grpc.io) service definition, -and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. -This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition. - -It helps you to provide your APIs in both gRPC and RESTful style at the same time. +gRPC-Gateway helps you to provide your APIs in both gRPC and RESTful style at the same time.
      -To learn more about us check out our documentation. +To learn more about gRPC-Gateway check out the documentation. ## Contribution -See [CONTRIBUTING.md](http://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). +See [CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md). ## License gRPC-Gateway is licensed under the BSD 3-Clause License. + See [LICENSE.txt](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt) for more details. ### Thank you to the contributors of gRPC-Gateway
        {% for contributor in site.github.contributors %} -
      • - {{ contributor.login }} -
      • +
      • +{{ contributor.login }} +
      • {% endfor %}
      diff --git a/examples/internal/browser/README.md b/examples/internal/browser/README.md index be4fbd31141..24f0fd1eb59 100644 --- a/examples/internal/browser/README.md +++ b/examples/internal/browser/README.md @@ -1,6 +1,6 @@ # Browser example -This directory contains an example use of grpc-gateway with web browsers. +This directory contains an example use of gRPC-Gateway with web browsers. The following commands automatically runs integration tests with phantomjs. ```shell-session @@ -12,7 +12,9 @@ $ gulp ## Other examples ### Very simple example + Run + ```shell-session $ gulp bower $ gulp backends @@ -20,10 +22,10 @@ $ gulp backends then, open `index.html`. - ### Integration test with your browser Run + ```shell-session $ gulp serve ``` diff --git a/examples/internal/browser/bower.json b/examples/internal/browser/bower.json index 2454691ae08..f5a96c5931e 100644 --- a/examples/internal/browser/bower.json +++ b/examples/internal/browser/bower.json @@ -1,6 +1,6 @@ { "name": "grpc-gateway-example-browser", - "description": "Example use of grpc-gateway from browser", + "description": "Example use of gRPC-Gateway from browser", "main": "index.js", "authors": [ "Yuki Yugui Sonoda " diff --git a/examples/internal/browser/package.json b/examples/internal/browser/package.json index 8771fa5f03a..6704265ba27 100644 --- a/examples/internal/browser/package.json +++ b/examples/internal/browser/package.json @@ -1,7 +1,7 @@ { "name": "grpc-gateway-example", "version": "1.0.0", - "description": "Example use of grpc-gateway from browser", + "description": "Example use of gRPC-Gateway from browser", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/examples/internal/gateway/doc.go b/examples/internal/gateway/doc.go index a9ca836960e..06c4fc247eb 100644 --- a/examples/internal/gateway/doc.go +++ b/examples/internal/gateway/doc.go @@ -1,2 +1,2 @@ -// Package gateway is an example of grpc-gateway server +// Package gateway is an example of gRPC-Gateway server package gateway diff --git a/examples/internal/gateway/main.go b/examples/internal/gateway/main.go index 0d17efde2ea..cacd2e4072b 100644 --- a/examples/internal/gateway/main.go +++ b/examples/internal/gateway/main.go @@ -25,7 +25,7 @@ type Options struct { // serves OpenAPI specs. OpenAPIDir string - // Mux is a list of options to be passed to the grpc-gateway multiplexer + // Mux is a list of options to be passed to the gRPC-Gateway multiplexer Mux []gwruntime.ServeMuxOption } diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index ed9b8bed293..7f8abb8080b 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -57,7 +57,7 @@ type Registry struct { // useJSONNamesForFields if true json tag name is used for generating fields in OpenAPI definitions, // otherwise the original proto name is used. It's helpful for synchronizing the OpenAPI definition - // with grpc-gateway response, if it uses json tags for marshaling. + // with gRPC-Gateway response, if it uses json tags for marshaling. useJSONNamesForFields bool // useFQNForOpenAPIName if true OpenAPI names will use the full qualified name (FQN) from proto definition, diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index d4d7217ab94..8e80b7cd59d 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -22,7 +22,7 @@ type GoPackage struct { Path string // Name is the package name of the package Name string - // Alias is an alias of the package unique within the current invocation of grpc-gateway generator. + // Alias is an alias of the package unique within the current invocation of gRPC-Gateway generator. Alias string } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index cf476e1fe4f..ed70ac898a0 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -705,7 +705,7 @@ func resolveFullyQualifiedNameToOpenAPINames(messages []string, useFQNForOpenAPI var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") -// OpenAPI expects paths of the form /path/{string_value} but grpc-gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. +// OpenAPI expects paths of the form /path/{string_value} but gRPC-Gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) string { // It seems like the right thing to do here is to just use // strings.Split(path, "/") but that breaks badly when you hit a url like diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 0f22fb2f338..dbe5351688b 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -70,7 +70,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E // Extension fields to descriptor.FileOptions. var ( - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. @@ -81,7 +81,7 @@ var ( // Extension fields to descriptor.MethodOptions. var ( - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. @@ -92,7 +92,7 @@ var ( // Extension fields to descriptor.MessageOptions. var ( - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. @@ -103,7 +103,7 @@ var ( // Extension fields to descriptor.ServiceOptions. var ( - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. @@ -114,7 +114,7 @@ var ( // Extension fields to descriptor.FieldOptions. var ( - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. diff --git a/protoc-gen-openapiv2/options/annotations.proto b/protoc-gen-openapiv2/options/annotations.proto index 72bf818a70c..1c189e2065c 100644 --- a/protoc-gen-openapiv2/options/annotations.proto +++ b/protoc-gen-openapiv2/options/annotations.proto @@ -8,35 +8,35 @@ import "google/protobuf/descriptor.proto"; import "protoc-gen-openapiv2/options/openapiv2.proto"; extend google.protobuf.FileOptions { - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. Swagger openapiv2_swagger = 1042; } extend google.protobuf.MethodOptions { - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. Operation openapiv2_operation = 1042; } extend google.protobuf.MessageOptions { - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. Schema openapiv2_schema = 1042; } extend google.protobuf.ServiceOptions { - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. Tag openapiv2_tag = 1042; } extend google.protobuf.FieldOptions { - // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // // All IDs are the same, as assigned. It is okay that they are the same, as they extend // different descriptor messages. From fff04bad86923d24f0e83f2de04bc5b9160a4e38 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 6 Dec 2020 20:56:17 +0000 Subject: [PATCH 0761/1518] Update Season of Docs page (#1861) --- docs/docs/contributing/2020_season_of_docs.md | 17 +++ docs/docs/contributing/season_of_docs.md | 121 ------------------ 2 files changed, 17 insertions(+), 121 deletions(-) create mode 100644 docs/docs/contributing/2020_season_of_docs.md delete mode 100644 docs/docs/contributing/season_of_docs.md diff --git a/docs/docs/contributing/2020_season_of_docs.md b/docs/docs/contributing/2020_season_of_docs.md new file mode 100644 index 00000000000..649dcb427bb --- /dev/null +++ b/docs/docs/contributing/2020_season_of_docs.md @@ -0,0 +1,17 @@ +--- +layout: default +title: Google Season of Docs +nav_order: 1 +parent: Contributing +--- + +# 2020 Season of Docs + +
      + +
      + +The gRPC-Gateway participated in the 2020 [Google Season of Docs](https://g.co/seasonofdocs). +The project was completed by [@iamrajiv](https://github.com/iamrajiv). A summary of the project +work can be found in the +[project report](https://github.com/iamrajiv/GSoD-2020/blob/master/GSoD_2020_Project_Report.md). diff --git a/docs/docs/contributing/season_of_docs.md b/docs/docs/contributing/season_of_docs.md deleted file mode 100644 index 024578527fd..00000000000 --- a/docs/docs/contributing/season_of_docs.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -layout: default -title: Season of Docs -nav_order: 1 -parent: Contributing ---- - -# Season of Docs - -
      - -
      - -This year the gRPC-Gateway is participating in the [Google Season of Docs](https://g.co/seasonofdocs). We're excited to see what contributions this will bring to our documentation. - -## Project details - -- Organization name: **gRPC-Gateway** -- Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several - common use cases: - - When a user wants to migrate an API to gRPC but needs to expose a JSON/HTTP API - to old users. - - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - - When quickly iterating on a JSON/HTTP API design. -- Website: https://grpc-ecosystem.github.io/grpc-gateway -- Repo: https://github.com/grpc-ecosystem/grpc-gateway -- Project administrators and mentors: - - Johan Brandhorst [@johanbrandhorst](https://github.com/johanbrandhorst) - - Andrew Z Allen [@achew22](https://github.com/achew22) - -## Project Ideas - -### Refactor the existing docs site - -Our existing docs site (this site!) is decidedly starting to look a bit dated. We'd love to -have a new version with some updated styling and a better structure. The existing content -could be preserved and just reused with a fresh new look, or we could rewrite much of it. - -It's currently rendered from Markdown using [Jekyll](https://jekyllrb.com/). -[The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) -for the site is part of the main repo. - -We the best way to do this would be to have someone who is unfamiliar with the project -try to use the current material and note anything that was unclear and that they couldn't -easily find with our existing docs. - -Material: - -- [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) -- [Jekyll](https://jekyllrb.com/) which powers the site now. -- [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. -- [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which contains an intro to the project. - -### Rewrite the README with a better intro and examples - -The README has evolved since the start of the project and could do with a rewrite from -first principles. The README is the first thing our prospective users see, and it should -quickly and concisely answer the most important questions for our users. - -- What problems can the gRPC-Gateway solve? -- How do I use the gRPC-Gateway? -- What does a complete example look like? -- Where can I find more information about using it? -- Where can I learn more about the technologies the gRPC-Gateway is built on? -- How do I submit an issue report or get help? - -Material: - -- [The current README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md). - -### Create a tutorial for the docs site - -We'd like to be able to point to a tutorial for one of the common use cases of the project. -The ones mentioned in the project details are the primary use cases we advertise: - -- When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API - to old users. -- When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. -- When quickly iterating on a JSON/HTTP API design. - -It could be a single or several blog posts on our docs site, or another site, like Medium. - -### Improve the "customize your gateway" section of the docs - -This is where we've collected a lot of the little tips we've developed with -users that don't quite fit in the main README or documentation. It would be great -to have a look over this and add detail where possible and generally structure it -a bit better. Maybe it could be rewritten as a FAQ that details solutions to common issues? - -Material: - -- [Customizing your gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizing_your_gateway.html) - -### Improve the contributor's guide - -This is currently split between -[CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md) -and the [issue templates](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/.github/ISSUE_TEMPLATE). -Both of these are a little ad-hoc and could do with a fresh pair of eyes. - -Material: - -- [Current CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md) -- [Current issue templates](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/.github/ISSUE_TEMPLATE) - -### Write a v2.0.0 migration guide - -We're planning on making a v2 release of the project, which will have some backwards-compatibility breaking changes. -We need to write a migration guide so that users know what to expect when upgrading their deployments. - -This should include: - -- A list of all the breaking changes and their consequences for the user. -- For each breaking change, a guide to how their systems may need to be changed. - -Currently, the scope of the v2 release is not entirely known, as it is still in progress, but we will -endeavour not to make too many breaking changes as that will discourage users from upgrading. - -Material: - -- [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) From 1290571e309621076fffad76123ac25207533575 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Dec 2020 16:05:47 +0000 Subject: [PATCH 0762/1518] Update google.golang.org/genproto commit hash to 9ee31aa --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1723f088727..21e6e2ce089 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 - google.golang.org/genproto v0.0.0-20201204160425-06b3db808446 + google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index f6b0621eef7..ea9f00f3c96 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201204160425-06b3db808446 h1:65ppmIPdaZE+BO34gntwqexoTYr30IRNGmS0OGOHu3A= -google.golang.org/genproto v0.0.0-20201204160425-06b3db808446/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 h1:MrlntRhz7JNWmR2J5pRYZFgfR0IuuhELDhxo2aBZVsg= +google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1756333d460..999d2226ecb 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:65ppmIPdaZE+BO34gntwqexoTYr30IRNGmS0OGOHu3A=", - version = "v0.0.0-20201204160425-06b3db808446", + sum = "h1:MrlntRhz7JNWmR2J5pRYZFgfR0IuuhELDhxo2aBZVsg=", + version = "v0.0.0-20201207150747-9ee31aac76e7", ) go_repository( name = "org_golang_google_grpc", From 7a336d35d1e2fcff564283fe90abc70ff26073e3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Dec 2020 17:33:28 +0000 Subject: [PATCH 0763/1518] Update golang.org/x/oauth2 commit hash to 9317641 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 21e6e2ce089..1b0bc255a0f 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 + golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index ea9f00f3c96..302a6309280 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19 h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA= -golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f h1:bGuVhRryQ3m1t3U3cQOa4TdSuMIXKrTrvmdJjQLbMKc= +golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 999d2226ecb..8fa8432f318 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:ZD+2Sd/BnevwJp8PSli8WgGAGzb9IZtxBsv1iZMYeEA=", - version = "v0.0.0-20201203001011-0b49973bad19", + sum = "h1:bGuVhRryQ3m1t3U3cQOa4TdSuMIXKrTrvmdJjQLbMKc=", + version = "v0.0.0-20201207163604-931764155e3f", ) go_repository( name = "org_golang_x_sync", From 94f7f11856689a12ba0ecc78ddca19d418df70a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Dec 2020 10:18:17 +0000 Subject: [PATCH 0764/1518] Update golang.org/x/oauth2 commit hash to 08078c5 (#1867) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1b0bc255a0f..731f5bc1aa6 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f + golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 302a6309280..41b332b7737 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f h1:bGuVhRryQ3m1t3U3cQOa4TdSuMIXKrTrvmdJjQLbMKc= -golang.org/x/oauth2 v0.0.0-20201207163604-931764155e3f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 8fa8432f318..cfe8268cc16 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:bGuVhRryQ3m1t3U3cQOa4TdSuMIXKrTrvmdJjQLbMKc=", - version = "v0.0.0-20201207163604-931764155e3f", + sum = "h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4=", + version = "v0.0.0-20201208152858-08078c50e5b5", ) go_repository( name = "org_golang_x_sync", From 82c9623c93340cb9eeb5565ee0e742f2cacbec17 Mon Sep 17 00:00:00 2001 From: rcgoodfellow Date: Wed, 9 Dec 2020 02:28:08 -0800 Subject: [PATCH 0765/1518] protoc-gen-openapiv2: Add openapiv2_tag support (#1866) * protoc-gen-openapiv2: support for openapiv2_tag Fixes https://github.com/grpc-ecosystem/grpc-gateway/issues/690 Signed-off-by: Ryan Goodfellow * more consistent with rest of codebase Signed-off-by: Ryan Goodfellow * update example specs, revert protoc version change Signed-off-by: Ryan Goodfellow * Address review comments - Factor service tag rendering out of service rendering function - Add omitempty tags where applicable Signed-off-by: Ryan Goodfellow * remove extraneous newline Signed-off-by: Ryan Goodfellow * renderServices call to previous form Signed-off-by: Ryan Goodfellow --- .../internal/clients/abe/api/swagger.yaml | 9 ++++++ .../internal/clients/echo/api/swagger.yaml | 2 ++ .../generateunboundmethods/api/swagger.yaml | 2 ++ .../clients/responsebody/api/swagger.yaml | 2 ++ .../clients/unannotatedecho/api/swagger.yaml | 2 ++ .../a_bit_of_everything.swagger.json | 16 +++++++++++ .../proto/examplepb/echo_service.swagger.json | 5 ++++ .../generate_unbound_methods.swagger.json | 5 ++++ .../examplepb/openapi_merge.swagger.json | 11 ++++++++ .../response_body_service.swagger.json | 5 ++++ .../proto/examplepb/stream.swagger.json | 5 ++++ .../unannotated_echo_service.swagger.json | 5 ++++ .../examplepb/use_go_template.swagger.json | 5 ++++ .../proto/examplepb/wrappers.swagger.json | 5 ++++ .../internal/genopenapi/template.go | 28 +++++++++++++++++++ .../internal/genopenapi/types.go | 8 ++++++ 16 files changed, 115 insertions(+) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 4b13f6e3ec8..4fb27195667 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -11,6 +11,15 @@ info: name: "BSD 3-Clause License" url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt" x-something-something: "yadda" +tags: +- name: "ABitOfEverythingService" + description: "ABitOfEverythingService description -- which should not be used in\ + \ place of the documentation comment!" + externalDocs: + description: "Find out more about EchoService" + url: "https://github.com/grpc-ecosystem/grpc-gateway" +- name: "camelCaseServiceName" +- name: "AnotherServiceWithNoBindings" schemes: - "http" - "https" diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index cbda5f0f24b..5e6fe7beead 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -4,6 +4,8 @@ info: description: "Echo Service API consists of a single service which returns\na message." version: "version not set" title: "Echo Service" +tags: +- name: "EchoService" consumes: - "application/json" produces: diff --git a/examples/internal/clients/generateunboundmethods/api/swagger.yaml b/examples/internal/clients/generateunboundmethods/api/swagger.yaml index 1bc4221a97f..c64662ab118 100644 --- a/examples/internal/clients/generateunboundmethods/api/swagger.yaml +++ b/examples/internal/clients/generateunboundmethods/api/swagger.yaml @@ -6,6 +6,8 @@ info: \ Methods Echo Service API consists of a single service which returns\na message." version: "version not set" title: "examples/internal/proto/examplepb/generate_unbound_methods.proto" +tags: +- name: "GenerateUnboundMethodsEchoService" consumes: - "application/json" produces: diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 187a8ba5c1c..b1dd9042485 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -3,6 +3,8 @@ swagger: "2.0" info: version: "version not set" title: "examples/internal/proto/examplepb/response_body_service.proto" +tags: +- name: "ResponseBodyService" consumes: - "application/json" produces: diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index 17bbc115235..efbd60c6f3b 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -15,6 +15,8 @@ info: name: "BSD 3-Clause License" url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt" x-something-something: "yadda" +tags: +- name: "UnannotatedEchoService" schemes: - "http" - "https" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 0c4845e849a..abc379edaa0 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -14,6 +14,22 @@ }, "x-something-something": "yadda" }, + "tags": [ + { + "name": "ABitOfEverythingService", + "description": "ABitOfEverythingService description -- which should not be used in place of the documentation comment!", + "externalDocs": { + "description": "Find out more about EchoService", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + } + }, + { + "name": "camelCaseServiceName" + }, + { + "name": "AnotherServiceWithNoBindings" + } + ], "schemes": [ "http", "https", diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 80deb2a9a29..e9f9bc7a501 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -5,6 +5,11 @@ "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, + "tags": [ + { + "name": "EchoService" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json index 4dd494af6bd..4adb8a74a2a 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json +++ b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json @@ -5,6 +5,11 @@ "description": "Generate Unannotated Methods Echo Service\nSimilar to echo_service.proto but without annotations and without external configuration.\n\nGenerate Unannotated Methods Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, + "tags": [ + { + "name": "GenerateUnboundMethodsEchoService" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/openapi_merge.swagger.json b/examples/internal/proto/examplepb/openapi_merge.swagger.json index abb0ce7e5ba..9b504281867 100644 --- a/examples/internal/proto/examplepb/openapi_merge.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge.swagger.json @@ -5,6 +5,17 @@ "description": "This is an example of merging two proto files.", "version": "version not set" }, + "tags": [ + { + "name": "ServiceA" + }, + { + "name": "ServiceC" + }, + { + "name": "ServiceB" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 60c3c7b5e16..76adbe8d61a 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -4,6 +4,11 @@ "title": "examples/internal/proto/examplepb/response_body_service.proto", "version": "version not set" }, + "tags": [ + { + "name": "ResponseBodyService" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 1d5d518e195..95e5f6adbff 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -4,6 +4,11 @@ "title": "examples/internal/proto/examplepb/stream.proto", "version": "version not set" }, + "tags": [ + { + "name": "StreamService" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index cf92646c793..727dfc149ce 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -15,6 +15,11 @@ }, "x-something-something": "yadda" }, + "tags": [ + { + "name": "UnannotatedEchoService" + } + ], "schemes": [ "http", "https", diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 0cb788b68fc..21b322bab2e 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -4,6 +4,11 @@ "title": "examples/internal/proto/examplepb/use_go_template.proto", "version": "version not set" }, + "tags": [ + { + "name": "LoginService" + } + ], "consumes": [ "application/json" ], diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index 153034cd21c..adf850c9c38 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -4,6 +4,11 @@ "title": "examples/internal/proto/examplepb/wrappers.proto", "version": "version not set" }, + "tags": [ + { + "name": "WrappersService" + } + ], "consumes": [ "application/json" ], diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index ed70ac898a0..1c0793917b8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -782,6 +782,33 @@ func isResourceName(prefix string) bool { return field == "parent" || field == "name" } +func renderServiceTags(services []*descriptor.Service) []openapiTagObject { + var tags []openapiTagObject + for _, svc := range services { + tag := openapiTagObject{ + Name: *svc.Name, + } + if proto.HasExtension(svc.Options, openapi_options.E_Openapiv2Tag) { + ext := proto.GetExtension(svc.Options, openapi_options.E_Openapiv2Tag) + opts, ok := ext.(*openapi_options.Tag) + if !ok { + glog.Errorf("extension is %T; want an OpenAPI Tag object", ext) + return nil + } + + tag.Description = opts.Description + if opts.ExternalDocs != nil { + tag.ExternalDocs = &openapiExternalDocumentationObject{ + Description: opts.ExternalDocs.Description, + URL: opts.ExternalDocs.Url, + } + } + } + tags = append(tags, tag) + } + return tags +} + func renderServices(services []*descriptor.Service, paths openapiPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap, msgs []*descriptor.Message) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. svcBaseIdx := 0 @@ -1199,6 +1226,7 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs, p.Messages); err != nil { panic(err) } + s.Tags = append(s.Tags, renderServiceTags(p.Services)...) messages := messageMap{} streamingMessages := messageMap{} diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 8b5d6a59588..505cfc686e8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -26,6 +26,13 @@ type openapiInfoObject struct { extensions []extension } +// https://swagger.io/specification/#tagObject +type openapiTagObject struct { + Name string `json:"name"` + Description string `json:"description,omitempty"` + ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty"` +} + // http://swagger.io/specification/#contactObject type openapiContactObject struct { Name string `json:"name,omitempty"` @@ -54,6 +61,7 @@ type extension struct { type openapiSwaggerObject struct { Swagger string `json:"swagger"` Info openapiInfoObject `json:"info"` + Tags []openapiTagObject `json:"tags,omitempty"` Host string `json:"host,omitempty"` BasePath string `json:"basePath,omitempty"` Schemes []string `json:"schemes,omitempty"` From b9e53fb4c49ae0409d11aca4e80e24b79726d2a9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Dec 2020 13:09:48 +0000 Subject: [PATCH 0766/1518] Update google.golang.org/genproto commit hash to f927205 (#1869) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 731f5bc1aa6..0ba0d834238 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 + google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 41b332b7737..764ba4ceb0c 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7 h1:MrlntRhz7JNWmR2J5pRYZFgfR0IuuhELDhxo2aBZVsg= -google.golang.org/genproto v0.0.0-20201207150747-9ee31aac76e7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4 h1:J4dpx/41slnq1aogzUSTuBuvD7VXz7ZLkVpr32YgSlg= +google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cfe8268cc16..61e0c22b43b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:MrlntRhz7JNWmR2J5pRYZFgfR0IuuhELDhxo2aBZVsg=", - version = "v0.0.0-20201207150747-9ee31aac76e7", + sum = "h1:J4dpx/41slnq1aogzUSTuBuvD7VXz7ZLkVpr32YgSlg=", + version = "v0.0.0-20201209185603-f92720507ed4", ) go_repository( name = "org_golang_google_grpc", From fae9f17690363789e774e755994d74707450f2f7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 10 Dec 2020 14:29:51 +0000 Subject: [PATCH 0767/1518] Update google.golang.org/genproto commit hash to e3217be --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0ba0d834238..165f318d8ee 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4 + google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 764ba4ceb0c..017619a4a18 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4 h1:J4dpx/41slnq1aogzUSTuBuvD7VXz7ZLkVpr32YgSlg= -google.golang.org/genproto v0.0.0-20201209185603-f92720507ed4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 61e0c22b43b..2efc8d16b40 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:J4dpx/41slnq1aogzUSTuBuvD7VXz7ZLkVpr32YgSlg=", - version = "v0.0.0-20201209185603-f92720507ed4", + sum = "h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc=", + version = "v0.0.0-20201210142538-e3217bee35cc", ) go_repository( name = "org_golang_google_grpc", From 61c450dafdf16d00afa600698c5e648e50e2771e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Dec 2020 15:38:09 +0000 Subject: [PATCH 0768/1518] Update google.golang.org/genproto commit hash to 40ec1c2 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 165f318d8ee..eab54472fb2 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc + google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 017619a4a18..503751930b2 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M= +google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2efc8d16b40..917ad00cd5c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:BgQmMjmd7K1zov8j8lYULHW0WnmBGUIMp6+VDwlGErc=", - version = "v0.0.0-20201210142538-e3217bee35cc", + sum = "h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M=", + version = "v0.0.0-20201211151036-40ec1c210f7a", ) go_repository( name = "org_golang_google_grpc", From e268c33a8c7d06cd0d9ddb9a22af62aaca8e8df5 Mon Sep 17 00:00:00 2001 From: Alex Rebert Date: Sun, 13 Dec 2020 05:33:18 -0500 Subject: [PATCH 0769/1518] Fix link to "gRPC API configuration" in README (#1873) https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html leads to a 404. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6070077c7ba..b6a1e10e3b5 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. If you do not want to (or cannot) modify the proto file for use with gRPC-Gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. - [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html) + [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/) for more information. Here's what a `protoc` execution might look like with this option enabled: From e7dd2dbd8fd2da014e3e9e4bb60f63feddfcae29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Dec 2020 11:32:38 +0000 Subject: [PATCH 0770/1518] Update google.golang.org/genproto commit hash to 8c77b98 (#1874) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index eab54472fb2..635480110e8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a + google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 503751930b2..7e8f8f1b538 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M= -google.golang.org/genproto v0.0.0-20201211151036-40ec1c210f7a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 917ad00cd5c..e1ff42bdc05 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:GnJAhasbD8HiT8DZMvsEx3QLVy/X0icq/MGr0MqRJ2M=", - version = "v0.0.0-20201211151036-40ec1c210f7a", + sum = "h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes=", + version = "v0.0.0-20201214200347-8c77b98c765d", ) go_repository( name = "org_golang_google_grpc", From bef6e3c5d71fe511207efe865a34a0b9f5c45f80 Mon Sep 17 00:00:00 2001 From: Adolfo Martinelli <659782+adolfo@users.noreply.github.com> Date: Tue, 29 Dec 2020 03:57:57 -0800 Subject: [PATCH 0771/1518] Fix broken documentation link (#1883) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6a1e10e3b5..4d06bdfefaa 100644 --- a/README.md +++ b/README.md @@ -381,7 +381,7 @@ gRPC-Gateway, and a gRPC server, see - Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) files as an alternative to annotation. - Automatically translating PATCH requests into Field Mask gRPC requests. See - [the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/patch.html) + [the docs](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/patch_feature/) for more information. ### No plan to support From c02dbaf5825d43823517b54c0cee7d215d3e4311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Garcia?= Date: Wed, 30 Dec 2020 13:12:56 -0300 Subject: [PATCH 0772/1518] Add a ## Docs section to highlight the docs URL (#1884) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 4d06bdfefaa..448e55706f3 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,12 @@ This helps you provide your APIs in both gRPC and RESTful style at the same time
      +## Docs + +You can read our docs at: + +- https://grpc-ecosystem.github.io/grpc-gateway/ + ## Testimonials > We use the gRPC-Gateway to serve millions of API requests per day, From 33a6dd0f66d9a80c3d175e66db0103eb9fcdeabf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Jan 2021 11:28:01 +0000 Subject: [PATCH 0773/1518] Update google.golang.org/genproto commit hash to 07624b5 (#1885) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 635480110e8..fa7902a34e7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d + google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 7e8f8f1b538..cf451f0253a 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc= +google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e1ff42bdc05..0f078c081ec 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes=", - version = "v0.0.0-20201214200347-8c77b98c765d", + sum = "h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc=", + version = "v0.0.0-20210106152847-07624b53cd92", ) go_repository( name = "org_golang_google_grpc", From 968f19c97760a33bca9b4e1bc9ba606febf5fd13 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 7 Jan 2021 11:45:12 +0000 Subject: [PATCH 0774/1518] Remove fuzzit It seems this service has been shut down and migrated to GitLab. --- .circleci/config.yml | 9 --------- fuzzit.sh | 25 ------------------------- 2 files changed, 34 deletions(-) delete mode 100755 fuzzit.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 1f764bbaeab..045553bbf44 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -79,14 +79,6 @@ jobs: - checkout - generate - run: git diff --exit-code - fuzzit: - docker: - - image: fuzzitdev/fuzzit:golang1.12-stretch-llvm9 - working_directory: /src/grpc-gateway - steps: - - checkout - - setup_remote_docker - - run: ./fuzzit.sh bazel: executor: build-env working_directory: /src/grpc-gateway @@ -166,7 +158,6 @@ workflows: jobs: - build - test - - fuzzit - node_test - generate - bazel diff --git a/fuzzit.sh b/fuzzit.sh deleted file mode 100755 index 43c0f23918b..00000000000 --- a/fuzzit.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -set -xe - -# We use fuzzit fork until go-fuzz will support go-modules -mkdir -p /go/src/github.com/dvyukov -cd /go/src/github.com/dvyukov -git clone https://github.com/fuzzitdev/go-fuzz -cd go-fuzz -go get ./... -go build ./... - -#go get -v -u ./internal/httprule -cd /src/grpc-gateway -go-fuzz-build -libfuzzer -o parse-http-rule.a ./internal/httprule -clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule - -wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 -chmod a+x fuzzit - -if [ -z "CIRCLE_PULL_REQUEST" ]; then - TYPE="fuzzing" -else - TYPE="local-regression" -fi -./fuzzit create job --type ${TYPE} grpc-gateway/parse-http-rule parse-http-rule From c989b80aa09256bdcbffd03cc2c99f6aadf44e34 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 7 Jan 2021 11:45:34 +0000 Subject: [PATCH 0775/1518] Generate changelog for v2.1.0 (#1887) --- CHANGELOG.md | 132 ++++++++++++++++++++++++++++++++++++++++++++++++--- Makefile | 2 +- 2 files changed, 127 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c491b45f3a..1473f286954 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,124 @@ # Change Log +## [v2.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.1.0) (2021-01-07) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.16.0...v2.1.0) + +**Implemented enhancements:** + +- protoc-gen-grpc-gateway: can't generate gateway stubs for multiple packages in one go [\#1612](https://github.com/grpc-ecosystem/grpc-gateway/issues/1612) +- Addition of Prettier GitHub action to prettified the markdown files [\#1575](https://github.com/grpc-ecosystem/grpc-gateway/issues/1575) +- add support for field\_behavior options on swagger plugin [\#1806](https://github.com/grpc-ecosystem/grpc-gateway/pull/1806) ([ewhauser](https://github.com/ewhauser)) + +**Fixed bugs:** + +- The "Use go templates" page is missing its actual go templates [\#1773](https://github.com/grpc-ecosystem/grpc-gateway/issues/1773) +- FieldMask Generation causes a 400 when a google.protobuf.Struct field has populated values [\#1570](https://github.com/grpc-ecosystem/grpc-gateway/issues/1570) +- Support openapiv2\_tag option in swagger generator [\#690](https://github.com/grpc-ecosystem/grpc-gateway/issues/690) + +**Closed issues:** + +- Ignore some fields in HTTP Response and OpenAPI [\#1886](https://github.com/grpc-ecosystem/grpc-gateway/issues/1886) +- Using runtime.WithMarshalerOption\(\) breaks swagger docs [\#1882](https://github.com/grpc-ecosystem/grpc-gateway/issues/1882) +- Data is Getting Encoded while returning response as HTML [\#1880](https://github.com/grpc-ecosystem/grpc-gateway/issues/1880) +- jsonPB is not supporting in grpc gateway v2 migration [\#1878](https://github.com/grpc-ecosystem/grpc-gateway/issues/1878) +- Move generator and descriptor packages into the public API [\#1877](https://github.com/grpc-ecosystem/grpc-gateway/issues/1877) +- Add -module flag to protoc-gen-openapiv2 plugin [\#1876](https://github.com/grpc-ecosystem/grpc-gateway/issues/1876) +- Load Balancing with multiple instances of a grpc-server. [\#1875](https://github.com/grpc-ecosystem/grpc-gateway/issues/1875) +- Building with Bazel not compatible when using Gazelle and disable\_global [\#1847](https://github.com/grpc-ecosystem/grpc-gateway/issues/1847) +- Unexpected response on /v2/example/errorwithdetails [\#1842](https://github.com/grpc-ecosystem/grpc-gateway/issues/1842) +- openapi\_configuration option in protoc\_gen\_openapiv2 Bazel rule fails. [\#1838](https://github.com/grpc-ecosystem/grpc-gateway/issues/1838) +- Link to v2 migration guide broken [\#1836](https://github.com/grpc-ecosystem/grpc-gateway/issues/1836) +- add header in http.Handler,but not take effect [\#1835](https://github.com/grpc-ecosystem/grpc-gateway/issues/1835) +- `protoc-gen-openapiv2 ` rule should expose all of the relevant flags available [\#1831](https://github.com/grpc-ecosystem/grpc-gateway/issues/1831) +- if there a flag set the metadata first letter not change to uppower [\#1830](https://github.com/grpc-ecosystem/grpc-gateway/issues/1830) +- Clarification about return Access-Control-Allow-Origin header [\#1827](https://github.com/grpc-ecosystem/grpc-gateway/issues/1827) +- `generate\_unbound\_methods` option and FieldMask fields don't work together. [\#1816](https://github.com/grpc-ecosystem/grpc-gateway/issues/1816) +- openapiv2: panic when SecurityRequirement is missing a value [\#1811](https://github.com/grpc-ecosystem/grpc-gateway/issues/1811) +- Cannot resolve import 'google/api/http.proto' [\#1809](https://github.com/grpc-ecosystem/grpc-gateway/issues/1809) +- add version information at compile-time [\#1803](https://github.com/grpc-ecosystem/grpc-gateway/issues/1803) +- šŸš€ `protoc\_gen\_openapiv2` should allow to pass `generate\_unbound\_methods` option [\#1792](https://github.com/grpc-ecosystem/grpc-gateway/issues/1792) +- Can't generate python client [\#1785](https://github.com/grpc-ecosystem/grpc-gateway/issues/1785) +- Issue with converting to the bytes data type [\#1781](https://github.com/grpc-ecosystem/grpc-gateway/issues/1781) +- Possible way to access request header key,value [\#1780](https://github.com/grpc-ecosystem/grpc-gateway/issues/1780) +- Run demo failed! [\#1777](https://github.com/grpc-ecosystem/grpc-gateway/issues/1777) +- protoc-gen-swagger: Implement Response Header\(s\) object, Implement Field Enum,Example&Format attributes [\#1729](https://github.com/grpc-ecosystem/grpc-gateway/issues/1729) + +**Merged pull requests:** + +- Update google.golang.org/genproto commit hash to 07624b5 \(master\) [\#1885](https://github.com/grpc-ecosystem/grpc-gateway/pull/1885) ([renovate[bot]](https://github.com/apps/renovate)) +- Add a \#\# Docs section to highlight the docs URL [\#1884](https://github.com/grpc-ecosystem/grpc-gateway/pull/1884) ([VinGarcia](https://github.com/VinGarcia)) +- Fix broken 'Field Mask' documentation link [\#1883](https://github.com/grpc-ecosystem/grpc-gateway/pull/1883) ([adolfo](https://github.com/adolfo)) +- Update google.golang.org/genproto commit hash to 8c77b98 \(master\) [\#1874](https://github.com/grpc-ecosystem/grpc-gateway/pull/1874) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix link to "gRPC API configuration" in README [\#1873](https://github.com/grpc-ecosystem/grpc-gateway/pull/1873) ([alpire](https://github.com/alpire)) +- Update google.golang.org/genproto commit hash to 40ec1c2 \(master\) [\#1872](https://github.com/grpc-ecosystem/grpc-gateway/pull/1872) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to e3217be \(master\) [\#1870](https://github.com/grpc-ecosystem/grpc-gateway/pull/1870) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to f927205 \(master\) [\#1869](https://github.com/grpc-ecosystem/grpc-gateway/pull/1869) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 08078c5 \(master\) [\#1867](https://github.com/grpc-ecosystem/grpc-gateway/pull/1867) ([renovate[bot]](https://github.com/apps/renovate)) +- protoc-gen-openapiv2: Add openapiv2\_tag support [\#1866](https://github.com/grpc-ecosystem/grpc-gateway/pull/1866) ([rcgoodfellow](https://github.com/rcgoodfellow)) +- Update golang.org/x/oauth2 commit hash to 9317641 \(master\) [\#1864](https://github.com/grpc-ecosystem/grpc-gateway/pull/1864) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 9ee31aa \(master\) [\#1862](https://github.com/grpc-ecosystem/grpc-gateway/pull/1862) ([renovate[bot]](https://github.com/apps/renovate)) +- Update Season of Docs page [\#1861](https://github.com/grpc-ecosystem/grpc-gateway/pull/1861) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Refactored the documentation files of gRPC-Gateway [\#1860](https://github.com/grpc-ecosystem/grpc-gateway/pull/1860) ([iamrajiv](https://github.com/iamrajiv)) +- Update google.golang.org/genproto commit hash to 06b3db8 \(master\) [\#1858](https://github.com/grpc-ecosystem/grpc-gateway/pull/1858) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang Docker tag to v1.15.6 \(master\) [\#1857](https://github.com/grpc-ecosystem/grpc-gateway/pull/1857) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 6486ece \(master\) [\#1854](https://github.com/grpc-ecosystem/grpc-gateway/pull/1854) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 0b49973 \(master\) [\#1853](https://github.com/grpc-ecosystem/grpc-gateway/pull/1853) ([renovate[bot]](https://github.com/apps/renovate)) +- Update module google.golang.org/grpc to v1.34.0 \(master\) [\#1852](https://github.com/grpc-ecosystem/grpc-gateway/pull/1852) ([renovate[bot]](https://github.com/apps/renovate)) +- \[GSoD\] Refactored the documentation files of gRPC-Gateway [\#1851](https://github.com/grpc-ecosystem/grpc-gateway/pull/1851) ([iamrajiv](https://github.com/iamrajiv)) +- Update google.golang.org/genproto commit hash to 55d61f9 \(master\) [\#1850](https://github.com/grpc-ecosystem/grpc-gateway/pull/1850) ([renovate[bot]](https://github.com/apps/renovate)) +- Update rules\_proto commit hash to 84ba6ec \(master\) [\#1849](https://github.com/grpc-ecosystem/grpc-gateway/pull/1849) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to b05cb90 \(master\) [\#1846](https://github.com/grpc-ecosystem/grpc-gateway/pull/1846) ([renovate[bot]](https://github.com/apps/renovate)) +- \[GSoD\] Added new architecture introduction diagram for gRPC-Gateway [\#1845](https://github.com/grpc-ecosystem/grpc-gateway/pull/1845) ([iamrajiv](https://github.com/iamrajiv)) +- \[GSoD\] Added more faq for gRPC-Gateway [\#1844](https://github.com/grpc-ecosystem/grpc-gateway/pull/1844) ([iamrajiv](https://github.com/iamrajiv)) +- Fix broken example [\#1843](https://github.com/grpc-ecosystem/grpc-gateway/pull/1843) ([isbang](https://github.com/isbang)) +- Feature/implement response headers v2 [\#1841](https://github.com/grpc-ecosystem/grpc-gateway/pull/1841) ([elijah-roberts](https://github.com/elijah-roberts)) +- Update module google/go-cmp to v0.5.4 \(master\) [\#1840](https://github.com/grpc-ecosystem/grpc-gateway/pull/1840) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix some broken docs links [\#1839](https://github.com/grpc-ecosystem/grpc-gateway/pull/1839) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Sets proper context property for openapi\_configuration option [\#1837](https://github.com/grpc-ecosystem/grpc-gateway/pull/1837) ([zoido](https://github.com/zoido)) +- Adjust protoc-gen-openapiv2/main.go flags docs as suggested during \#1832 review [\#1833](https://github.com/grpc-ecosystem/grpc-gateway/pull/1833) ([zoido](https://github.com/zoido)) +- Rest protoc-gen-openapiv2 flags as rule attrs [\#1832](https://github.com/grpc-ecosystem/grpc-gateway/pull/1832) ([zoido](https://github.com/zoido)) +- \[GSoD\] Added tutorials directory on gRPC-Gateway [\#1829](https://github.com/grpc-ecosystem/grpc-gateway/pull/1829) ([iamrajiv](https://github.com/iamrajiv)) +- Update google.golang.org/genproto commit hash to 9b1e624 \(master\) [\#1828](https://github.com/grpc-ecosystem/grpc-gateway/pull/1828) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 62d171c \(master\) [\#1825](https://github.com/grpc-ecosystem/grpc-gateway/pull/1825) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 79184cf \(master\) [\#1824](https://github.com/grpc-ecosystem/grpc-gateway/pull/1824) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to bf037d7 \(master\) [\#1823](https://github.com/grpc-ecosystem/grpc-gateway/pull/1823) ([renovate[bot]](https://github.com/apps/renovate)) +- reorganize docs; add page for customizing gateway output [\#1822](https://github.com/grpc-ecosystem/grpc-gateway/pull/1822) ([ewhauser](https://github.com/ewhauser)) +- Change FieldMask OpenAPI type to string. [\#1820](https://github.com/grpc-ecosystem/grpc-gateway/pull/1820) ([zoido](https://github.com/zoido)) +- Update google.golang.org/genproto commit hash to ce600e9 \(master\) [\#1819](https://github.com/grpc-ecosystem/grpc-gateway/pull/1819) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix openapiv2 panic [\#1818](https://github.com/grpc-ecosystem/grpc-gateway/pull/1818) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add ci linter [\#1817](https://github.com/grpc-ecosystem/grpc-gateway/pull/1817) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update golang Docker tag to v1.15.5 \(master\) [\#1814](https://github.com/grpc-ecosystem/grpc-gateway/pull/1814) ([renovate[bot]](https://github.com/apps/renovate)) +- Update module google/go-cmp to v0.5.3 \(master\) [\#1812](https://github.com/grpc-ecosystem/grpc-gateway/pull/1812) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 2985b7a \(master\) [\#1810](https://github.com/grpc-ecosystem/grpc-gateway/pull/1810) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to ac7456d \(master\) [\#1808](https://github.com/grpc-ecosystem/grpc-gateway/pull/1808) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 8816d57 \(master\) [\#1807](https://github.com/grpc-ecosystem/grpc-gateway/pull/1807) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 2640f1f \(master\) [\#1805](https://github.com/grpc-ecosystem/grpc-gateway/pull/1805) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 9fd6049 \(master\) [\#1804](https://github.com/grpc-ecosystem/grpc-gateway/pull/1804) ([renovate[bot]](https://github.com/apps/renovate)) +- Disable gRPC updates on v1 [\#1802](https://github.com/grpc-ecosystem/grpc-gateway/pull/1802) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update module google.golang.org/grpc to v1.33.2 \(master\) [\#1800](https://github.com/grpc-ecosystem/grpc-gateway/pull/1800) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang Docker tag to v1.15.4 \(master\) [\#1799](https://github.com/grpc-ecosystem/grpc-gateway/pull/1799) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to f9bfe23 \(master\) [\#1796](https://github.com/grpc-ecosystem/grpc-gateway/pull/1796) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix typo in flag name for Bazel [\#1795](https://github.com/grpc-ecosystem/grpc-gateway/pull/1795) ([achew22](https://github.com/achew22)) +- Update google.golang.org/genproto commit hash to 9d023cd \(master\) [\#1794](https://github.com/grpc-ecosystem/grpc-gateway/pull/1794) ([renovate[bot]](https://github.com/apps/renovate)) +- Exposes `generate\_unbound\_methods` as `protoc\_gen\_openapiv2` rule attr [\#1793](https://github.com/grpc-ecosystem/grpc-gateway/pull/1793) ([zoido](https://github.com/zoido)) +- Update google.golang.org/genproto commit hash to 2e45c02 \(master\) [\#1789](https://github.com/grpc-ecosystem/grpc-gateway/pull/1789) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 415bd0c \(master\) [\#1788](https://github.com/grpc-ecosystem/grpc-gateway/pull/1788) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 715cce7 \(master\) [\#1787](https://github.com/grpc-ecosystem/grpc-gateway/pull/1787) ([renovate[bot]](https://github.com/apps/renovate)) +- \[GSoD\] Added new documentation website for gRPC-Gateway [\#1786](https://github.com/grpc-ecosystem/grpc-gateway/pull/1786) ([iamrajiv](https://github.com/iamrajiv)) +- Update google.golang.org/genproto commit hash to 24207fd \(master\) [\#1784](https://github.com/grpc-ecosystem/grpc-gateway/pull/1784) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 8ce4113 \(master\) [\#1782](https://github.com/grpc-ecosystem/grpc-gateway/pull/1782) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to c77dae4 \(master\) [\#1778](https://github.com/grpc-ecosystem/grpc-gateway/pull/1778) ([renovate[bot]](https://github.com/apps/renovate)) + +## [v1.16.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.16.0) (2020-10-28) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.15.1...v1.16.0) + +**Merged pull requests:** + +- Update dependency io\_bazel\_rules\_go to v0.24.5 \(master\) [\#1775](https://github.com/grpc-ecosystem/grpc-gateway/pull/1775) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to d4b8fe4 \(master\) [\#1774](https://github.com/grpc-ecosystem/grpc-gateway/pull/1774) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 0ff5f38 \(master\) [\#1772](https://github.com/grpc-ecosystem/grpc-gateway/pull/1772) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 0d71844 \(master\) [\#1771](https://github.com/grpc-ecosystem/grpc-gateway/pull/1771) ([renovate[bot]](https://github.com/apps/renovate)) + ## [v2.0.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.1) (2020-10-21) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0...v2.0.1) @@ -11,6 +130,7 @@ **Merged pull requests:** +- Generate changelog for v2.0.1 [\#1770](https://github.com/grpc-ecosystem/grpc-gateway/pull/1770) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update module google.golang.org/grpc to v1.33.1 \(master\) [\#1768](https://github.com/grpc-ecosystem/grpc-gateway/pull/1768) ([renovate[bot]](https://github.com/apps/renovate)) - Update google.golang.org/genproto commit hash to 1ed22bb \(master\) [\#1764](https://github.com/grpc-ecosystem/grpc-gateway/pull/1764) ([renovate[bot]](https://github.com/apps/renovate)) - Update dependency io\_bazel\_rules\_go to v0.24.4 \(master\) [\#1762](https://github.com/grpc-ecosystem/grpc-gateway/pull/1762) ([renovate[bot]](https://github.com/apps/renovate)) @@ -224,13 +344,13 @@ - Adding docs about controlling http response status codes [\#1391](https://github.com/grpc-ecosystem/grpc-gateway/pull/1391) ([zhughes3](https://github.com/zhughes3)) ## [v2.0.0-beta.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.3) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.6...v2.0.0-beta.3) - -## [v1.14.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.6) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.2...v1.14.6) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.2...v2.0.0-beta.3) ## [v2.0.0-beta.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.2) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.1...v2.0.0-beta.2) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.6...v2.0.0-beta.2) + +## [v1.14.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.6) (2020-05-25) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.1...v1.14.6) ## [v2.0.0-beta.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.1) (2020-05-25) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.5...v2.0.0-beta.1) @@ -1747,4 +1867,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/Makefile b/Makefile index 7917abb56ac..b788816f977 100644 --- a/Makefile +++ b/Makefile @@ -258,7 +258,7 @@ changelog: --github-site=https://github.com \ --unreleased-label "**Next release**" \ --release-branch=master \ - --future-release=v2.0.1 + --future-release=v2.1.0 clean: rm -f $(GATEWAY_PLUGIN) $(OPENAPI_PLUGIN) From 26952cf09377c833093f03bb5dffe688edbecd9e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 Jan 2021 21:09:36 +0000 Subject: [PATCH 0776/1518] Update google.golang.org/genproto commit hash to ffc7fda --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index fa7902a34e7..411265be822 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 + google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7 google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index cf451f0253a..ea656122356 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc= -google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7 h1:n7yjMkxUgbEahYENvAGVlxMUW8TF/KEavLez31znfDw= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0f078c081ec..e8598d3ff0d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc=", - version = "v0.0.0-20210106152847-07624b53cd92", + sum = "h1:n7yjMkxUgbEahYENvAGVlxMUW8TF/KEavLez31znfDw=", + version = "v0.0.0-20210108203827-ffc7fda8c3d7", ) go_repository( name = "org_golang_google_grpc", From 3558113147c17877ea69f81beb2975599706db45 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 11 Jan 2021 18:06:56 +0000 Subject: [PATCH 0777/1518] Update google.golang.org/genproto commit hash to c7d5778 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 411265be822..7f2f6f9e901 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7 + google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c google.golang.org/grpc v1.34.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ea656122356..9c17c5e9ef9 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7 h1:n7yjMkxUgbEahYENvAGVlxMUW8TF/KEavLez31znfDw= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c h1:3+BbAkihopYFEy1pP3PTu180hJeYUD1Sy3SzfLRgemY= +google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e8598d3ff0d..55affb9a485 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:n7yjMkxUgbEahYENvAGVlxMUW8TF/KEavLez31znfDw=", - version = "v0.0.0-20210108203827-ffc7fda8c3d7", + sum = "h1:3+BbAkihopYFEy1pP3PTu180hJeYUD1Sy3SzfLRgemY=", + version = "v0.0.0-20210111173611-c7d5778d165c", ) go_repository( name = "org_golang_google_grpc", From 852b196e6ea50f6c64a776b1c4a67cb2feae27a1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 11 Jan 2021 20:15:28 +0000 Subject: [PATCH 0778/1518] Update module google.golang.org/grpc to v1.34.1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7f2f6f9e901..f10444ada56 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c - google.golang.org/grpc v1.34.0 + google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 9c17c5e9ef9..8d290bf4fb0 100644 --- a/go.sum +++ b/go.sum @@ -370,8 +370,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.34.1 h1:ugq+9++ZQPFzM2pKUMCIK8gj9M0pFyuUWO9Q8kwEDQw= +google.golang.org/grpc v1.34.1/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 55affb9a485..7bb3141cadd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -365,8 +365,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=", - version = "v1.34.0", + sum = "h1:ugq+9++ZQPFzM2pKUMCIK8gj9M0pFyuUWO9Q8kwEDQw=", + version = "v1.34.1", ) go_repository( From 7de9baef435722693de2649f1f558c7bb2893c7f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Jan 2021 00:29:31 +0000 Subject: [PATCH 0779/1518] Update google.golang.org/genproto commit hash to 22ae2b1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f10444ada56..bded80fec83 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 - google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c + google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 8d290bf4fb0..93e0675c5fb 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c h1:3+BbAkihopYFEy1pP3PTu180hJeYUD1Sy3SzfLRgemY= -google.golang.org/genproto v0.0.0-20210111173611-c7d5778d165c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 h1:R2owLnwrU3BdTJ5R9cnHDNsnEmBQ7n5lZjKShnbISe4= +google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7bb3141cadd..fb399b1a71d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:3+BbAkihopYFEy1pP3PTu180hJeYUD1Sy3SzfLRgemY=", - version = "v0.0.0-20210111173611-c7d5778d165c", + sum = "h1:R2owLnwrU3BdTJ5R9cnHDNsnEmBQ7n5lZjKShnbISe4=", + version = "v0.0.0-20210111234610-22ae2b108f89", ) go_repository( name = "org_golang_google_grpc", From f8df812596c8d5662837db7d1681a492146bd9a3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Jan 2021 20:44:48 +0000 Subject: [PATCH 0780/1518] Update golang.org/x/oauth2 commit hash to 01de73c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bded80fec83..803d25e7044 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 + golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 93e0675c5fb..0e14ead890e 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5 h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd h1:0n2rzLq6xLtV9OFaT0BF2syUkjOwRrJ1zvXY5hH7Kkc= +golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index fb399b1a71d..0ad955a6271 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:Lm4OryKCca1vehdsWogr9N4t7NfZxLbJoc/H0w4K4S4=", - version = "v0.0.0-20201208152858-08078c50e5b5", + sum = "h1:0n2rzLq6xLtV9OFaT0BF2syUkjOwRrJ1zvXY5hH7Kkc=", + version = "v0.0.0-20210112200429-01de73cf58bd", ) go_repository( name = "org_golang_x_sync", From dbe03a83f56fcf0e35e06982d3711cfff7a3ec8f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Jan 2021 17:06:26 +0000 Subject: [PATCH 0781/1518] Update golang.org/x/oauth2 commit hash to 8b1d76f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 803d25e7044..eee66c964e4 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd + golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423 google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 0e14ead890e..2fb0ac7bc19 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd h1:0n2rzLq6xLtV9OFaT0BF2syUkjOwRrJ1zvXY5hH7Kkc= -golang.org/x/oauth2 v0.0.0-20210112200429-01de73cf58bd/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423 h1:/hEknzWkMPCjTo7StMHRrBRa8YBbXuBWfck8680k3RE= +golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 0ad955a6271..d69beefa84d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:0n2rzLq6xLtV9OFaT0BF2syUkjOwRrJ1zvXY5hH7Kkc=", - version = "v0.0.0-20210112200429-01de73cf58bd", + sum = "h1:/hEknzWkMPCjTo7StMHRrBRa8YBbXuBWfck8680k3RE=", + version = "v0.0.0-20210113160501-8b1d76fa0423", ) go_repository( name = "org_golang_x_sync", From 80c00b04d4555851b7cfc95aa6aad35d6d66690c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Jan 2021 20:55:45 +0000 Subject: [PATCH 0782/1518] Update google.golang.org/genproto commit hash to ae06605 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index eee66c964e4..9858875acf1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423 - google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 + google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 2fb0ac7bc19..417cd82f0e4 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89 h1:R2owLnwrU3BdTJ5R9cnHDNsnEmBQ7n5lZjKShnbISe4= -google.golang.org/genproto v0.0.0-20210111234610-22ae2b108f89/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 h1:x7nk+/4+SvuTDI4wnzQUlhvi+DTpyfncXBo3QWTFs7U= +google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d69beefa84d..b599af9b679 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:R2owLnwrU3BdTJ5R9cnHDNsnEmBQ7n5lZjKShnbISe4=", - version = "v0.0.0-20210111234610-22ae2b108f89", + sum = "h1:x7nk+/4+SvuTDI4wnzQUlhvi+DTpyfncXBo3QWTFs7U=", + version = "v0.0.0-20210113195801-ae06605f4595", ) go_repository( name = "org_golang_google_grpc", From 3f1aa174dcc14514a69dc9c365ff14b66f0548d4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Jan 2021 21:55:58 +0000 Subject: [PATCH 0783/1518] Update golang.org/x/oauth2 commit hash to d3ed898 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9858875acf1..2c5ef5e9250 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423 + golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 google.golang.org/grpc v1.34.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 417cd82f0e4..646831d37fc 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423 h1:/hEknzWkMPCjTo7StMHRrBRa8YBbXuBWfck8680k3RE= -golang.org/x/oauth2 v0.0.0-20210113160501-8b1d76fa0423/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 h1:BaN3BAqnopnKjvl+15DYP6LLrbBHfbfmlFYzmFj/Q9Q= +golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index b599af9b679..4a74f592120 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:/hEknzWkMPCjTo7StMHRrBRa8YBbXuBWfck8680k3RE=", - version = "v0.0.0-20210113160501-8b1d76fa0423", + sum = "h1:BaN3BAqnopnKjvl+15DYP6LLrbBHfbfmlFYzmFj/Q9Q=", + version = "v0.0.0-20210113205817-d3ed898aa8a3", ) go_repository( name = "org_golang_x_sync", From fd3fcb32e8b5c0a9645f8db44793e09e4f0b6bd0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Jan 2021 03:13:25 +0000 Subject: [PATCH 0784/1518] Update module google.golang.org/grpc to v1.35.0 --- go.mod | 2 +- go.sum | 8 ++++---- repositories.bzl | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 2c5ef5e9250..2a3652d4cca 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 - google.golang.org/grpc v1.34.1 + google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 646831d37fc..38f693b224d 100644 --- a/go.sum +++ b/go.sum @@ -41,12 +41,12 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -370,8 +370,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.34.1 h1:ugq+9++ZQPFzM2pKUMCIK8gj9M0pFyuUWO9Q8kwEDQw= -google.golang.org/grpc v1.34.1/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 4a74f592120..70545d2fc96 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -61,8 +61,8 @@ def go_repositories(): go_repository( name = "com_github_cncf_udpa_go", importpath = "github.com/cncf/udpa/go", - sum = "h1:9kRtNpqLHbZVO/NNxhHp2ymxFxsHOe3x2efJGn//Tas=", - version = "v0.0.0-20200629203442-efcf912fb354", + sum = "h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=", + version = "v0.0.0-20201120205902-5459f2c99403", ) go_repository( @@ -74,8 +74,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:EARl0OvqMoxq/UMgMSCLnXzkaXbxzskluEBlMQCJPms=", - version = "v0.9.7", + sum = "h1:EmNYJhPYy0pOFjCx2PrgtaBXmee0iUX9hLlxE1xHOJE=", + version = "v0.9.9-0.20201210154907-fd9021fe5dad", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -365,8 +365,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:ugq+9++ZQPFzM2pKUMCIK8gj9M0pFyuUWO9Q8kwEDQw=", - version = "v1.34.1", + sum = "h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=", + version = "v1.35.0", ) go_repository( From b77b7adf5ef12c682fe6d84060f06e1a14003a01 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Jan 2021 11:05:55 +0000 Subject: [PATCH 0785/1518] Update google.golang.org/genproto commit hash to 6edceaf (#1903) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2a3652d4cca..2df43abf5b1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 - google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 + google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 38f693b224d..56af06ae823 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595 h1:x7nk+/4+SvuTDI4wnzQUlhvi+DTpyfncXBo3QWTFs7U= -google.golang.org/genproto v0.0.0-20210113195801-ae06605f4595/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f h1:izedQ6yVIc5mZsRuXzmSreCOlzI0lCU1HpG8yEdMiKw= +google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 70545d2fc96..7d16eb81572 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:x7nk+/4+SvuTDI4wnzQUlhvi+DTpyfncXBo3QWTFs7U=", - version = "v0.0.0-20210113195801-ae06605f4595", + sum = "h1:izedQ6yVIc5mZsRuXzmSreCOlzI0lCU1HpG8yEdMiKw=", + version = "v0.0.0-20210114201628-6edceaf6022f", ) go_repository( name = "org_golang_google_grpc", From 711609b5e42db9645bc3af5d9f9975f2ce8915bd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 15 Jan 2021 11:15:42 +0000 Subject: [PATCH 0786/1518] Remove jsonpb reference (#1904) jsonpb has been replaced with protojson since v2 --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 448e55706f3..7917849f132 100644 --- a/README.md +++ b/README.md @@ -412,8 +412,7 @@ But patches are welcome. - HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`). - While configurable, the default {un,}marshaling uses - [jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with - `OrigName: true`. + [protojson](https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson). ## Contribution From a4aeb8c3131e8e4ef7fc821d0ca64a9ce9fb8575 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Jan 2021 12:26:27 +0000 Subject: [PATCH 0787/1518] Update rules_proto commit hash to cfdc2fa --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 4227519ad2f..adc115615b8 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -17,11 +17,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "3bce0e2fcf502619119c7cac03613fb52ce3034b2159dd3ae9d35f7339558aa3", - strip_prefix = "rules_proto-84ba6ec814eebbf5312b2cc029256097ae0042c3", + sha256 = "d8992e6eeec276d49f1d4e63cfa05bbed6d4a26cfe6ca63c972827a0d141ea3b", + strip_prefix = "rules_proto-cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/84ba6ec814eebbf5312b2cc029256097ae0042c3.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/84ba6ec814eebbf5312b2cc029256097ae0042c3.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2.tar.gz", ], ) From 8c9d75e9bbefa32da8d112b2fcb0c08cb9f219bb Mon Sep 17 00:00:00 2001 From: Brian Conway <630723+bconway@users.noreply.github.com> Date: Sat, 16 Jan 2021 03:19:16 -0600 Subject: [PATCH 0788/1518] Update docs for bug fix and expanding HTTP status codes in Customizing your gateway (#1907) - Calls to `ResponseWriter.Header()` should be after `delete()`. Per `Header()`: ``` // Changing the header map after a call to WriteHeader (or // Write) has no effect unless the modified headers are // trailers. ``` - Include a section on modeling responses in proto definitions that most closely resemble the default style. DELETE is a little off due to hard-coded behavior for `google.protobuf.Empty` in `genopenapi/template.go`, but it's close. - Drop a small hint that `grpc.SetHeader()` has an error to be considered. --- .../mapping/customizing_openapi_output.md | 2 +- docs/docs/mapping/customizing_your_gateway.md | 47 +++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index e1d8184d852..132c6675417 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -11,7 +11,7 @@ parent: Mapping ## In proto comments -You can provide comments directly in your Protocol Buffer defintions and they will be translated into comments in the generated OpenAPI definitions: +You can provide comments directly in your Protocol Buffer definitions and they will be translated into comments in the generated OpenAPI definitions: ```protobuf message MyMessage { diff --git a/docs/docs/mapping/customizing_your_gateway.md b/docs/docs/mapping/customizing_your_gateway.md index 979c234e74c..4651194e542 100644 --- a/docs/docs/mapping/customizing_your_gateway.md +++ b/docs/docs/mapping/customizing_your_gateway.md @@ -210,7 +210,7 @@ To have the most control over the HTTP response status codes, you can use custom While handling the rpc, set the intended status code: ```go -grpc.SetHeader(ctx, metadata.Pairs("x-http-code", "401")) +_ = grpc.SetHeader(ctx, metadata.Pairs("x-http-code", "401")) ``` Now, before sending the HTTP response, we need to check for this metadata pair and explicitly set the status code for the response if found. @@ -231,10 +231,10 @@ func httpResponseModifier(ctx context.Context, w http.ResponseWriter, p proto.Me if err != nil { return err } - w.WriteHeader(code) - // delete the headers to not expose any grpc-metadata in http response + // delete the headers to not expose any grpc-metadata in http response delete(md.HeaderMD, "x-http-code") delete(w.Header(), "Grpc-Metadata-X-Http-Code") + w.WriteHeader(code) } return nil @@ -249,6 +249,47 @@ gwMux := runtime.NewServeMux( ) ``` +Additional responses can be added to the Protocol Buffer definitions to match the new status codes: + +```protobuf +service Greeter { + rpc SayHello (HelloRequest) returns (HelloReply) { + option (google.api.http) = { + post: "/v1/example/echo" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + responses: { + key: "201" + value: { + description: "A successful response." + schema: { + json_schema: { + ref: ".mypackage.HelloReply" + } + } + } + } + }; + } + + rpc SayGoodbye (GoodbyeRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/example/echo/{id}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + responses: { + key: "204" + value: { + description: "A successful response." + schema: {} + } + } + }; + } +} +``` + ## Error handler To override error handling for a `*runtime.ServeMux`, use the From a9a27c40fdd61996d21093766b09087c99cf4f5d Mon Sep 17 00:00:00 2001 From: Gunadhya <6939749+gunadhya@users.noreply.github.com> Date: Mon, 18 Jan 2021 17:35:53 +0530 Subject: [PATCH 0789/1518] Reworked Error message in newParam() in services.go (#1894) * Reworked Error message for newParam() in services.go * Added Test error case for PathParam --- internal/descriptor/services.go | 2 +- internal/descriptor/services_test.go | 49 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go index cf7ba78c5ae..4679aed2218 100644 --- a/internal/descriptor/services.go +++ b/internal/descriptor/services.go @@ -248,7 +248,7 @@ func (r *Registry) newParam(meth *Method, path string) (Parameter, error) { if IsWellKnownType(*target.TypeName) { glog.V(2).Infoln("found well known aggregate type:", target) } else { - return Parameter{}, fmt.Errorf("aggregate type %s in parameter of %s.%s: %s", target.Type, meth.Service.GetName(), meth.GetName(), path) + return Parameter{}, fmt.Errorf("%s.%s: %s is a protobuf message type. Protobuf message types cannot be used as path parameters, use a scalar value type (such as string) instead", meth.Service.GetName(), meth.GetName(), path) } } return Parameter{ diff --git a/internal/descriptor/services_test.go b/internal/descriptor/services_test.go index 6214fcc9c5f..cb9768c049a 100644 --- a/internal/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -1347,3 +1347,52 @@ func TestExtractServicesWithDeleteBody(t *testing.T) { t.Log(err) } } + +func TestCauseErrorWithPathParam(t *testing.T) { + src := ` + name: "path/to/example.proto", + package: "example" + message_type < + name: "TypeMessage" + field < + name: "message" + type: TYPE_MESSAGE + type_name: 'ExampleMessage' + number: 1, + label: LABEL_OPTIONAL + > + > + service < + name: "ExampleService" + method < + name: "Echo" + input_type: "TypeMessage" + output_type: "TypeMessage" + options < + [google.api.http] < + get: "/v1/example/echo/{message=*}" + > + > + > + > + ` + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { + t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) + } + target := "path/to/example.proto" + reg := NewRegistry() + input := []*descriptorpb.FileDescriptorProto{&fd} + reg.loadFile(fd.GetName(), &protogen.File{ + Proto: &fd, + }) + // switch this field to see the error + wantErr := true + err := reg.loadServices(reg.files[target]) + if got, want := err != nil, wantErr; got != want { + if want { + t.Errorf("loadServices(%q, %q) succeeded; want an error", target, input) + } + t.Errorf("loadServices(%q, %q) failed with %v; want success", target, input, err) + } +} From 414070512005d8748d9bdda63b584d2a7d2c2af5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 Jan 2021 18:40:46 +0000 Subject: [PATCH 0790/1518] Update google.golang.org/genproto commit hash to e258113 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2df43abf5b1..28efb7b2adc 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 - google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f + google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 56af06ae823..835beb7a027 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f h1:izedQ6yVIc5mZsRuXzmSreCOlzI0lCU1HpG8yEdMiKw= -google.golang.org/genproto v0.0.0-20210114201628-6edceaf6022f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc h1:tsmkSntchraIEmbGgYaZGZ8LVIidKCWEmPwEnSQSalA= +google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7d16eb81572..458217490f4 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:izedQ6yVIc5mZsRuXzmSreCOlzI0lCU1HpG8yEdMiKw=", - version = "v0.0.0-20210114201628-6edceaf6022f", + sum = "h1:tsmkSntchraIEmbGgYaZGZ8LVIidKCWEmPwEnSQSalA=", + version = "v0.0.0-20210119180700-e258113e47cc", ) go_repository( name = "org_golang_google_grpc", From 07057451bc9cfa4632d7e5b7e4dbcf9965718a40 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Jan 2021 00:55:28 +0000 Subject: [PATCH 0791/1518] Update golang Docker tag to v1.15.7 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index d8979b23b39..c2eb698e172 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.6 +FROM golang:1.15.7 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From d498b2b430945eba907b7ec6efb0f954e5c13f3a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Jan 2021 17:18:10 +0000 Subject: [PATCH 0792/1518] Update google.golang.org/genproto commit hash to f5e8c5e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 28efb7b2adc..98967396830 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 - google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc + google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 835beb7a027..414129c7fe2 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc h1:tsmkSntchraIEmbGgYaZGZ8LVIidKCWEmPwEnSQSalA= -google.golang.org/genproto v0.0.0-20210119180700-e258113e47cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2 h1:5SVh73Qofuzb+K5wbIiNyDFK6+hjPfVD9DStL2dAiDM= +google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 458217490f4..f67e6d72483 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:tsmkSntchraIEmbGgYaZGZ8LVIidKCWEmPwEnSQSalA=", - version = "v0.0.0-20210119180700-e258113e47cc", + sum = "h1:5SVh73Qofuzb+K5wbIiNyDFK6+hjPfVD9DStL2dAiDM=", + version = "v0.0.0-20210120162456-f5e8c5e2aaf2", ) go_repository( name = "org_golang_google_grpc", From f08642bbd702a5fdb7c87c575e669a687941169e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Jan 2021 17:22:59 +0000 Subject: [PATCH 0793/1518] Update google.golang.org/genproto commit hash to fc48d45 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 98967396830..8fd4c151dcd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 - google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2 + google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 414129c7fe2..5b085219651 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2 h1:5SVh73Qofuzb+K5wbIiNyDFK6+hjPfVD9DStL2dAiDM= -google.golang.org/genproto v0.0.0-20210120162456-f5e8c5e2aaf2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7 h1:qASDKT3A5nK4pOvujHZbhHKjYHsJ8aLQqjWY5re11nk= +google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f67e6d72483..df834bbc8a6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5SVh73Qofuzb+K5wbIiNyDFK6+hjPfVD9DStL2dAiDM=", - version = "v0.0.0-20210120162456-f5e8c5e2aaf2", + sum = "h1:qASDKT3A5nK4pOvujHZbhHKjYHsJ8aLQqjWY5re11nk=", + version = "v0.0.0-20210121164019-fc48d45331c7", ) go_repository( name = "org_golang_google_grpc", From c94a79d830df5380bf0bd833fc8937ec935bbd08 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Jan 2021 16:50:08 +0000 Subject: [PATCH 0794/1518] Update google.golang.org/genproto commit hash to 8081c04 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8fd4c151dcd..dd85cca197a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 - google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7 + google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 5b085219651..f3872cc74eb 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7 h1:qASDKT3A5nK4pOvujHZbhHKjYHsJ8aLQqjWY5re11nk= -google.golang.org/genproto v0.0.0-20210121164019-fc48d45331c7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579 h1:Iwh0ba2kTgq2Q6mJiXhzrrjD7h11nEVnbMHFmp0/HsQ= +google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index df834bbc8a6..4bb11fdee6c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:qASDKT3A5nK4pOvujHZbhHKjYHsJ8aLQqjWY5re11nk=", - version = "v0.0.0-20210121164019-fc48d45331c7", + sum = "h1:Iwh0ba2kTgq2Q6mJiXhzrrjD7h11nEVnbMHFmp0/HsQ=", + version = "v0.0.0-20210122163508-8081c04a3579", ) go_repository( name = "org_golang_google_grpc", From 4cade91c9a2f16f64e5c846be0b5014a46d5458b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Jan 2021 20:52:24 +0000 Subject: [PATCH 0795/1518] Update golang.org/x/oauth2 commit hash to af13f52 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dd85cca197a..dfc6d2d0c1c 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 + golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index f3872cc74eb..ac1a432f538 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 h1:BaN3BAqnopnKjvl+15DYP6LLrbBHfbfmlFYzmFj/Q9Q= -golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 h1:w0u30BeG/TALEc6xVf1Klaz2+etRR4K6jxhRkWCqt4g= +golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 4bb11fdee6c..fca9824591a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:BaN3BAqnopnKjvl+15DYP6LLrbBHfbfmlFYzmFj/Q9Q=", - version = "v0.0.0-20210113205817-d3ed898aa8a3", + sum = "h1:w0u30BeG/TALEc6xVf1Klaz2+etRR4K6jxhRkWCqt4g=", + version = "v0.0.0-20210125201302-af13f521f196", ) go_repository( name = "org_golang_x_sync", From d899983595def59a8e1c1a479d8f126c9ea0d38b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Jan 2021 22:27:56 +0000 Subject: [PATCH 0796/1518] Update google.golang.org/genproto commit hash to f46fe6c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dfc6d2d0c1c..31a7560f6b8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 - google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579 + google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ac1a432f538..ceb05191143 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579 h1:Iwh0ba2kTgq2Q6mJiXhzrrjD7h11nEVnbMHFmp0/HsQ= -google.golang.org/genproto v0.0.0-20210122163508-8081c04a3579/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a h1:saU7DnDEFfQGANZBjmYsLFeK8n/pkJbDZsVGCiw2MPQ= +google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fca9824591a..040327848ca 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Iwh0ba2kTgq2Q6mJiXhzrrjD7h11nEVnbMHFmp0/HsQ=", - version = "v0.0.0-20210122163508-8081c04a3579", + sum = "h1:saU7DnDEFfQGANZBjmYsLFeK8n/pkJbDZsVGCiw2MPQ=", + version = "v0.0.0-20210125195502-f46fe6c6624a", ) go_repository( name = "org_golang_google_grpc", From 012d4ae0b8b9068aad6aee9dec16ff89912b2a54 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Jan 2021 16:25:51 +0000 Subject: [PATCH 0797/1518] Update google.golang.org/genproto commit hash to 44e461b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 31a7560f6b8..0c18944cd2c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 - google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a + google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ceb05191143..98ad1e14f04 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a h1:saU7DnDEFfQGANZBjmYsLFeK8n/pkJbDZsVGCiw2MPQ= -google.golang.org/genproto v0.0.0-20210125195502-f46fe6c6624a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 h1:uLBY0yHDCj2PMQ98KWDSIDFwn9zK2zh+tgWtbvPPBjI= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 040327848ca..3410d3ea73e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:saU7DnDEFfQGANZBjmYsLFeK8n/pkJbDZsVGCiw2MPQ=", - version = "v0.0.0-20210125195502-f46fe6c6624a", + sum = "h1:uLBY0yHDCj2PMQ98KWDSIDFwn9zK2zh+tgWtbvPPBjI=", + version = "v0.0.0-20210126160654-44e461bb6506", ) go_repository( name = "org_golang_google_grpc", From 162328d724e9712c2e8fd982179fc4ecadf3d2f1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Jan 2021 16:26:14 +0000 Subject: [PATCH 0798/1518] Update rules_proto commit hash to a0761ed --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index adc115615b8..f4d15793a02 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -17,11 +17,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "d8992e6eeec276d49f1d4e63cfa05bbed6d4a26cfe6ca63c972827a0d141ea3b", - strip_prefix = "rules_proto-cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2", + sha256 = "2a20fd8af3cad3fbab9fd3aec4a137621e0c31f858af213a7ae0f997723fc4a9", + strip_prefix = "rules_proto-a0761ed101b939e19d83b2da5f59034bffc19c12", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/cfdc2fa31879c0aebe31ce7702b1a9c8a4be02d2.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/a0761ed101b939e19d83b2da5f59034bffc19c12.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/a0761ed101b939e19d83b2da5f59034bffc19c12.tar.gz", ], ) From 61fef09c495cc1feea6a911803be76dafa35d072 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Jan 2021 19:57:56 +0000 Subject: [PATCH 0799/1518] Update golang.org/x/oauth2 commit hash to f9ce19e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0c18944cd2c..bffe1373bf5 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 + golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 98ad1e14f04..c1e1c30f0e3 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196 h1:w0u30BeG/TALEc6xVf1Klaz2+etRR4K6jxhRkWCqt4g= -golang.org/x/oauth2 v0.0.0-20210125201302-af13f521f196/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 h1:55H5j7lotzuFCEOKDsMch+fRNUQ9DgtyHOUP31FNqKc= +golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 3410d3ea73e..2f31643514d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:w0u30BeG/TALEc6xVf1Klaz2+etRR4K6jxhRkWCqt4g=", - version = "v0.0.0-20210125201302-af13f521f196", + sum = "h1:55H5j7lotzuFCEOKDsMch+fRNUQ9DgtyHOUP31FNqKc=", + version = "v0.0.0-20210126194326-f9ce19ea3013", ) go_repository( name = "org_golang_x_sync", From 57c8d7bfcebe4e236e67b9863810c48f91a51b32 Mon Sep 17 00:00:00 2001 From: Christopher Cantrell Date: Thu, 28 Jan 2021 04:04:21 -0600 Subject: [PATCH 0800/1518] Multiple repeated fields are allowed (#1921) * Multiple repeated fields are allowed The protobuffer comments have been corrected here: https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto#L85-L86 The restriction was intended for the path string itself and not the entire mask. There can be only one repeated field in a path string, and when we get to it, the path string is done. * Fixed test * more test fixes * fixed test * fixed spaces/tabs * Update fieldmask_test.go Testing multiple repeated fields * Update fieldmask_test.go fixed test * Update fieldmask_test.go fixed indents * Update fieldmask_test.go * Update fieldmask_test.go * Update fieldmask_test.go * Update fieldmask_test.go * Update fieldmask_test.go --- runtime/fieldmask.go | 18 +++--------------- runtime/fieldmask_test.go | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index bdaa79da22c..7249988e640 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -32,7 +32,6 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field } queue := []fieldMaskPathItem{{node: root, msg: msg.ProtoReflect()}} - var repeatedChild *fieldMaskPathItem for len(queue) > 0 { // dequeue an item item := queue[0] @@ -74,14 +73,9 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field switch { case fd.IsList(), fd.IsMap(): - if repeatedChild != nil { - // This is implied by the rule that any repeated fields must be - // last in the paths. - // Ref: https://github.com/protocolbuffers/protobuf/blob/6b0ff74ecf63e26c7315f6745de36aff66deb59d/src/google/protobuf/field_mask.proto#L85-L86 - return nil, fmt.Errorf("only one repeated value is allowed per field_mask") - } - repeatedChild = &child - // Don't add to paths until the end + // As per: https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto#L85-L86 + // Do not recurse into repeated fields. The repeated field goes on the end of the path and we stop. + fm.Paths = append(fm.Paths, child.path) case fd.Message() != nil: child.msg = item.msg.Get(fd).Message() fallthrough @@ -95,12 +89,6 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field } } - // Add any repeated fields last, as per - // https://github.com/protocolbuffers/protobuf/blob/6b0ff74ecf63e26c7315f6745de36aff66deb59d/src/google/protobuf/field_mask.proto#L85-L86 - if repeatedChild != nil { - fm.Paths = append(fm.Paths, repeatedChild.path) - } - return fm, nil } diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index 06900dbb21c..2535ac811a3 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -182,11 +182,12 @@ func TestFieldMaskRepeatedFieldsLast(t *testing.T) { }{ { name: "map", - input: `{"mapped_string_value": {"a": "x"}, "uuid":"1234"}`, + input: `{"mapped_string_value": {"a": "x"}, "repeated_string_value": {"b": "y"}, "uuid":"1234"}`, expected: &field_mask.FieldMask{ Paths: []string{ - "uuid", "mapped_string_value", + "repeated_string_value", + "uuid", }, }, }, @@ -204,12 +205,23 @@ func TestFieldMaskRepeatedFieldsLast(t *testing.T) { "amount": 20 } ], + "nested_annotation": [ + { + "name": "foo", + "amount": 100 + }, + { + "name": "widget", + "amount": 200 + } + ], "uuid":"1234" }`, expected: &field_mask.FieldMask{ Paths: []string{ - "uuid", "nested", + "nested_annotation", + "uuid", }, }, }, From a03993b8a24d1df11b97e7fddb595e614d0cfb40 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Feb 2021 15:54:53 +0000 Subject: [PATCH 0801/1518] Update google.golang.org/genproto commit hash to 94839c0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bffe1373bf5..c67fc08994d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 - google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 + google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index c1e1c30f0e3..7d15f5824aa 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506 h1:uLBY0yHDCj2PMQ98KWDSIDFwn9zK2zh+tgWtbvPPBjI= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 h1:HPkKL4eEh/nemF/FRzYMrFsAh1ZPm5t8NqKBI/Ejlg0= +google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2f31643514d..4ff789d6926 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:uLBY0yHDCj2PMQ98KWDSIDFwn9zK2zh+tgWtbvPPBjI=", - version = "v0.0.0-20210126160654-44e461bb6506", + sum = "h1:HPkKL4eEh/nemF/FRzYMrFsAh1ZPm5t8NqKBI/Ejlg0=", + version = "v0.0.0-20210201151548-94839c025ad4", ) go_repository( name = "org_golang_google_grpc", From d435f39c10717a23ce8d98adc667341995a664e4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Feb 2021 17:04:04 +0000 Subject: [PATCH 0802/1518] Update golang.org/x/oauth2 commit hash to 0101308 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c67fc08994d..0757de4dc9d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 + golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 7d15f5824aa..2c2eef662d9 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013 h1:55H5j7lotzuFCEOKDsMch+fRNUQ9DgtyHOUP31FNqKc= -golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c h1:HiAZXo96zOhVhtFHchj/ojzoxCFiPrp9/j0GtS38V3g= +golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 4ff789d6926..b063cd3aa69 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:55H5j7lotzuFCEOKDsMch+fRNUQ9DgtyHOUP31FNqKc=", - version = "v0.0.0-20210126194326-f9ce19ea3013", + sum = "h1:HiAZXo96zOhVhtFHchj/ojzoxCFiPrp9/j0GtS38V3g=", + version = "v0.0.0-20210201163806-010130855d6c", ) go_repository( name = "org_golang_x_sync", From 7c4f9060fe35c8fb5cf165a3d9ce11a56ec8b88c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Feb 2021 19:18:29 +0000 Subject: [PATCH 0803/1518] Update google.golang.org/genproto commit hash to 646a494 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0757de4dc9d..d8ca2d5d7d6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c - google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 + google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 2c2eef662d9..ab9a431d1f3 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 h1:HPkKL4eEh/nemF/FRzYMrFsAh1ZPm5t8NqKBI/Ejlg0= -google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea h1:B/tOZ5zKaomKBjKJJMjuqwmIc3YNX10q5DcCt8xLYY4= +google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b063cd3aa69..30ef17beebe 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:HPkKL4eEh/nemF/FRzYMrFsAh1ZPm5t8NqKBI/Ejlg0=", - version = "v0.0.0-20210201151548-94839c025ad4", + sum = "h1:B/tOZ5zKaomKBjKJJMjuqwmIc3YNX10q5DcCt8xLYY4=", + version = "v0.0.0-20210201184850-646a494a81ea", ) go_repository( name = "org_golang_google_grpc", From 6736afe45f0774437bd058b29db62487705864fd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Feb 2021 16:55:36 +0000 Subject: [PATCH 0804/1518] Update google.golang.org/genproto commit hash to 3206188 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d8ca2d5d7d6..7853085b5dc 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c - google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea + google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index ab9a431d1f3..421804c3b54 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea h1:B/tOZ5zKaomKBjKJJMjuqwmIc3YNX10q5DcCt8xLYY4= -google.golang.org/genproto v0.0.0-20210201184850-646a494a81ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba h1:np3A9jnmE/eMtrOwwvUycmQ1XoLyj5nqZ41bAyYLqJ0= +google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 30ef17beebe..fb88a8ef208 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:B/tOZ5zKaomKBjKJJMjuqwmIc3YNX10q5DcCt8xLYY4=", - version = "v0.0.0-20210201184850-646a494a81ea", + sum = "h1:np3A9jnmE/eMtrOwwvUycmQ1XoLyj5nqZ41bAyYLqJ0=", + version = "v0.0.0-20210203152818-3206188e46ba", ) go_repository( name = "org_golang_google_grpc", From d25e2bd536eea3509bb848d1f9d6247a16b966d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Feb 2021 11:44:45 +0000 Subject: [PATCH 0805/1518] Update dependency com_github_bazelbuild_buildtools to v4 (#1939) Co-authored-by: Renovate Bot --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f4d15793a02..4d99d05e96d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -81,9 +81,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "a02ba93b96a8151b5d8d3466580f6c1f7e77212c4eb181cba53eb2cae7752a23", - strip_prefix = "buildtools-3.5.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/3.5.0.tar.gz"], + sha256 = "0d3ca4ed434958dda241fb129f77bd5ef0ce246250feed2d5a5470c6f29a77fa", + strip_prefix = "buildtools-4.0.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.0.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 481026848a9d98c6853418dcb860229abcf3b086 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Feb 2021 16:12:27 +0000 Subject: [PATCH 0806/1518] Update google.golang.org/genproto commit hash to deb8283 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7853085b5dc..5b25485a0d3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c - google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba + google.golang.org/genproto v0.0.0-20210204154452-deb828366460 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 421804c3b54..64b91b28d74 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba h1:np3A9jnmE/eMtrOwwvUycmQ1XoLyj5nqZ41bAyYLqJ0= -google.golang.org/genproto v0.0.0-20210203152818-3206188e46ba/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210204154452-deb828366460 h1:pvsg2TgyP8bWrYqyL10tbNHu5KypD5DWJPrCjaTkwZA= +google.golang.org/genproto v0.0.0-20210204154452-deb828366460/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fb88a8ef208..4ae944c1106 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:np3A9jnmE/eMtrOwwvUycmQ1XoLyj5nqZ41bAyYLqJ0=", - version = "v0.0.0-20210203152818-3206188e46ba", + sum = "h1:pvsg2TgyP8bWrYqyL10tbNHu5KypD5DWJPrCjaTkwZA=", + version = "v0.0.0-20210204154452-deb828366460", ) go_repository( name = "org_golang_google_grpc", From 69552d673bdb86dc61ed922bab88195eb3800c4d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 5 Feb 2021 11:16:48 +0000 Subject: [PATCH 0807/1518] Make fieldmask output deterministic (#1950) The repeated paths parsing that was introduced in #1921 was causing tests to fail sporadically as the output of the parser was not deterministic. Sort the paths after parsing for deterministic output. --- runtime/fieldmask.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 7249988e640..0445fda2853 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "sort" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/proto" @@ -89,6 +90,10 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field } } + // Sort for deterministic output in the presence + // of repeated fields. + sort.Strings(fm.Paths) + return fm, nil } From b700e0d229025d007915416fb1144fd8043e5c12 Mon Sep 17 00:00:00 2001 From: Gregory Ganley Date: Fri, 5 Feb 2021 09:06:51 -0500 Subject: [PATCH 0808/1518] Fix malformed Schema Reference during field_behavior generation (#1944) * Fix malformed Schema Reference during field_behavior generation * remove unnecessary third_party proto files bump third_part proto files to same revision * add context for not adding field_behavior if schema is a reference * correct typo: Referene -> Reference :facepalm: Co-authored-by: Johan Brandhorst-Satzkorn Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/abe/api/swagger.yaml | 62 + .../abe/api_a_bit_of_everything_service.go | 174 +++ .../proto/examplepb/a_bit_of_everything.pb.go | 1154 +++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 147 +++ .../proto/examplepb/a_bit_of_everything.proto | 25 + .../a_bit_of_everything.swagger.json | 77 ++ .../examplepb/a_bit_of_everything_grpc.pb.go | 36 + .../internal/server/a_bit_of_everything.go | 4 + .../internal/genopenapi/template.go | 6 + .../internal/genopenapi/template_test.go | 16 + third_party/googleapis/README.grpc-gateway | 3 +- third_party/googleapis/google/api/http.proto | 295 +++-- .../googleapis/google/api/httpbody.proto | 3 +- 13 files changed, 1360 insertions(+), 642 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 4fb27195667..fb5b578359d 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1905,6 +1905,68 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/{book.name=publishers/*/books/*}: + patch: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_UpdateBook" + parameters: + - name: "book.name" + in: "path" + description: "The resource name of the book.\n\nFormat: `publishers/{publisher}/books/{book}`\n\ + \nExample: `publishers/1257894000000000000/books/my-book`" + required: true + type: "string" + x-exportParamName: "BookName" + - in: "body" + name: "body" + description: "The book to update.\n\nThe book's `name` field is used to identify\ + \ the book to be updated.\nFormat: publishers/{publisher}/books/{book}" + required: true + schema: + $ref: "#/definitions/examplepbBook" + x-exportParamName: "Body" + - name: "updateMask" + in: "query" + description: "The list of fields to be updated." + required: false + type: "string" + x-exportParamName: "UpdateMask" + x-optionalDataType: "String" + - name: "allowMissing" + in: "query" + description: "If set to true, and the book is not found, a new book will be\ + \ created.\nIn this situation, `update_mask` is ignored." + required: false + type: "boolean" + x-exportParamName: "AllowMissing" + x-optionalDataType: "Bool" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbBook" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/{parent=publishers/*}/books: post: tags: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 777a981ef34..ee352dd6af3 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -3785,6 +3785,180 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx co return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param bookName The resource name of the book. Format: `publishers/{publisher}/books/{book}` Example: `publishers/1257894000000000000/books/my-book` + * @param body The book to update. The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book} + * @param optional nil or *ABitOfEverythingServiceUpdateBookOpts - Optional Parameters: + * @param "UpdateMask" (optional.String) - The list of fields to be updated. + * @param "AllowMissing" (optional.Bool) - If set to true, and the book is not found, a new book will be created. In this situation, `update_mask` is ignored. + +@return ExamplepbBook +*/ + +type ABitOfEverythingServiceUpdateBookOpts struct { + UpdateMask optional.String + AllowMissing optional.Bool +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ctx context.Context, bookName string, body ExamplepbBook, localVarOptionals *ABitOfEverythingServiceUpdateBookOpts) (ExamplepbBook, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Patch") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbBook + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/{book.name=publishers/*/books/*}" + localVarPath = strings.Replace(localVarPath, "{"+"book.name"+"}", fmt.Sprintf("%v", bookName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.UpdateMask.IsSet() { + localVarQueryParams.Add("updateMask", parameterToString(localVarOptionals.UpdateMask.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.AllowMissing.IsSet() { + localVarQueryParams.Add("allowMissing", parameterToString(localVarOptionals.AllowMissing.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbBook + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index dcc2804f964..224ab9b82e3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1147,6 +1147,79 @@ func (x *CreateBookRequest) GetBookId() string { return "" } +// A standard Update message from AIP-134 +// +// See: https://google.aip.dev/134#request-message +type UpdateBookRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The book to update. + // + // The book's `name` field is used to identify the book to be updated. + // Format: publishers/{publisher}/books/{book} + Book *Book `protobuf:"bytes,1,opt,name=book,proto3" json:"book,omitempty"` + // The list of fields to be updated. + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + // If set to true, and the book is not found, a new book will be created. + // In this situation, `update_mask` is ignored. + AllowMissing bool `protobuf:"varint,3,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"` +} + +func (x *UpdateBookRequest) Reset() { + *x = UpdateBookRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateBookRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateBookRequest) ProtoMessage() {} + +func (x *UpdateBookRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateBookRequest.ProtoReflect.Descriptor instead. +func (*UpdateBookRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{10} +} + +func (x *UpdateBookRequest) GetBook() *Book { + if x != nil { + return x.Book + } + return nil +} + +func (x *UpdateBookRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +func (x *UpdateBookRequest) GetAllowMissing() bool { + if x != nil { + return x.AllowMissing + } + return false +} + // Nested is nested type. type ABitOfEverything_Nested struct { state protoimpl.MessageState @@ -1163,7 +1236,7 @@ type ABitOfEverything_Nested struct { func (x *ABitOfEverything_Nested) Reset() { *x = ABitOfEverything_Nested{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1176,7 +1249,7 @@ func (x *ABitOfEverything_Nested) String() string { func (*ABitOfEverything_Nested) ProtoMessage() {} func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1640,463 +1713,487 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, - 0x6f, 0x6b, 0x49, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, - 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xe4, 0x2a, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, + 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, + 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, + 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, + 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, + 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, + 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, + 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, + 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, - 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, - 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, - 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, - 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, - 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, + 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, + 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, + 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, + 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, + 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, - 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, - 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, - 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, - 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, + 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, - 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, - 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, - 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, 0x03, 0x35, - 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, - 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, - 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, - 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, + 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, + 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, + 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, + 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, + 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, + 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, + 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, + 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, + 0x02, 0x01, 0x03, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, + 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, + 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, + 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, - 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, - 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, + 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, - 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, + 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, + 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, + 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, + 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, + 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, - 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, - 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, - 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, + 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, + 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, + 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, + 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, + 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, - 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, - 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, - 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, - 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, - 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, - 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, + 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, - 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, - 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, - 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, - 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, - 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, - 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, - 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, - 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, - 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, - 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, - 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, - 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, - 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, - 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, - 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, - 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, - 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, - 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, - 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, - 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, + 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, + 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, + 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, + 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, + 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, + 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, + 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, + 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, + 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, + 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, + 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, + 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, + 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, + 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, + 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, + 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, + 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, + 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, + 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, + 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, + 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, + 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, + 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, + 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, + 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, + 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, + 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, + 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, + 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, + 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, + 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2112,7 +2209,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZI } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ (NumericEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum @@ -2126,105 +2223,110 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = [ (*UpdateV2Request)(nil), // 9: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request (*Book)(nil), // 10: grpc.gateway.examples.internal.proto.examplepb.Book (*CreateBookRequest)(nil), // 11: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - (*ABitOfEverything_Nested)(nil), // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - nil, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - nil, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - (pathenum.PathEnum)(0), // 16: grpc.gateway.examples.internal.pathenum.PathEnum - (pathenum.MessagePathEnum_NestedPathEnum)(0), // 17: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*empty.Empty)(nil), // 18: google.protobuf.Empty - (*timestamp.Timestamp)(nil), // 19: google.protobuf.Timestamp - (*status.Status)(nil), // 20: google.rpc.Status - (*field_mask.FieldMask)(nil), // 21: google.protobuf.FieldMask - (*sub2.IdMessage)(nil), // 22: grpc.gateway.examples.internal.proto.sub2.IdMessage - (*sub.StringMessage)(nil), // 23: grpc.gateway.examples.internal.proto.sub.StringMessage - (*duration.Duration)(nil), // 24: google.protobuf.Duration - (*pathenum.MessageWithPathEnum)(nil), // 25: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - (*pathenum.MessageWithNestedPathEnum)(nil), // 26: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*wrappers.StringValue)(nil), // 27: google.protobuf.StringValue + (*UpdateBookRequest)(nil), // 12: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest + (*ABitOfEverything_Nested)(nil), // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + nil, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + nil, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + (pathenum.PathEnum)(0), // 17: grpc.gateway.examples.internal.pathenum.PathEnum + (pathenum.MessagePathEnum_NestedPathEnum)(0), // 18: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*empty.Empty)(nil), // 19: google.protobuf.Empty + (*timestamp.Timestamp)(nil), // 20: google.protobuf.Timestamp + (*status.Status)(nil), // 21: google.rpc.Status + (*field_mask.FieldMask)(nil), // 22: google.protobuf.FieldMask + (*sub2.IdMessage)(nil), // 23: grpc.gateway.examples.internal.proto.sub2.IdMessage + (*sub.StringMessage)(nil), // 24: grpc.gateway.examples.internal.proto.sub.StringMessage + (*duration.Duration)(nil), // 25: google.protobuf.Duration + (*pathenum.MessageWithPathEnum)(nil), // 26: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + (*pathenum.MessageWithNestedPathEnum)(nil), // 27: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + (*wrappers.StringValue)(nil), // 28: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ 3, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject - 12, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 12, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 13, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 13, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 16, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 17, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - 18, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 13, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - 14, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - 15, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - 19, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 17, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 18, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 19, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 14, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + 15, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + 16, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + 20, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 12, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 12, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 13, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 13, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 20, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status + 21, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status 7, // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body 4, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 21, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask - 19, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp + 22, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 20, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp 10, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book - 1, // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 24: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 12, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 4, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 11, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - 22, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 9, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 22, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 5, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 23, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 24, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 18, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 18, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 8, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 7, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 4, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 18, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 25, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 26, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 18, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 18, // 49: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 18, // 50: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 4, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 10, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 18, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 18, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 18, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 18, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 5, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 23, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 18, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 18, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 18, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 18, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 18, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 4, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 27, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 18, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 18, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 6, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 18, // 74: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 18, // 75: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 51, // [51:76] is the sub-list for method output_type - 26, // [26:51] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 10, // 23: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book + 22, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask + 1, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 13, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 4, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 11, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + 12, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest + 23, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 9, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 23, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 5, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 25, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 19, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 19, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 8, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 7, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 4, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 26, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 27, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 19, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 19, // 52: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 19, // 53: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 10, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 10, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 19, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 19, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 19, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 5, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 19, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 19, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 4, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 28, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 19, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 6, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 19, // 78: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 19, // 79: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 54, // [54:80] is the sub-list for method output_type + 28, // [28:54] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() } @@ -2354,6 +2456,18 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateBookRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ABitOfEverything_Nested); i { case 0: return &v.state @@ -2376,7 +2490,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc, NumEnums: 2, - NumMessages: 14, + NumMessages: 15, NumExtensions: 0, NumServices: 3, }, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 07b6218f6d4..25a9a60c826 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -603,6 +603,106 @@ func local_request_ABitOfEverythingService_CreateBook_0(ctx context.Context, mar } +var ( + filter_ABitOfEverythingService_UpdateBook_0 = &utilities.DoubleArray{Encoding: map[string]int{"book": 0, "name": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} +) + +func request_ABitOfEverythingService_UpdateBook_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateBookRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Book); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Book); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["book.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "book.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "book.name", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "book.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateBook_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateBook(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_UpdateBook_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateBookRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Book); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Book); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["book.name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "book.name") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "book.name", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "book.name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateBook_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateBook(ctx, &protoReq) + return msg, metadata, err + +} + func request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq sub2.IdMessage var metadata runtime.ServerMetadata @@ -2314,6 +2414,29 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2976,6 +3099,26 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("PATCH", pattern_ABitOfEverythingService_UpdateBook_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_UpdateBook_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_UpdateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ABitOfEverythingService_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3446,6 +3589,8 @@ var ( pattern_ABitOfEverythingService_CreateBook_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 2, 5, 2, 2, 3}, []string{"v1", "publishers", "parent", "books"}, "")) + pattern_ABitOfEverythingService_UpdateBook_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 2, 2, 1, 0, 4, 4, 5, 3}, []string{"v1", "publishers", "books", "book.name"}, "")) + pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) @@ -3500,6 +3645,8 @@ var ( forward_ABitOfEverythingService_CreateBook_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_UpdateBook_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Lookup_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_Update_0 = runtime.ForwardResponseMessage diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2bc25d92fdb..e7559540c0a 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -422,6 +422,25 @@ message CreateBookRequest { string book_id = 3; } +// A standard Update message from AIP-134 +// +// See: https://google.aip.dev/134#request-message +message UpdateBookRequest { + // The book to update. + // + // The book's `name` field is used to identify the book to be updated. + // Format: publishers/{publisher}/books/{book} + Book book = 1 [(google.api.field_behavior) = REQUIRED]; + + // The list of fields to be updated. + google.protobuf.FieldMask update_mask = 2; + + // If set to true, and the book is not found, a new book will be created. + // In this situation, `update_mask` is ignored. + bool allow_missing = 3; + +} + // ABitOfEverything service is used to validate that APIs with complicated // proto messages and URL templates are still processed correctly. service ABitOfEverythingService { @@ -455,6 +474,12 @@ service ABitOfEverythingService { body: "book" }; } + rpc UpdateBook(UpdateBookRequest) returns (Book) { + option (google.api.http) = { + patch: "/v1/{book.name=publishers/*/books/*}" + body: "book" + }; + } rpc Lookup(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (ABitOfEverything) { option (google.api.http) = { get: "/v1/example/a_bit_of_everything/{uuid}" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index abc379edaa0..b6e64512d5c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2239,6 +2239,83 @@ ] } }, + "/v1/{book.name=publishers/*/books/*}": { + "patch": { + "operationId": "ABitOfEverythingService_UpdateBook", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbBook" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "book.name", + "description": "The resource name of the book.\n\nFormat: `publishers/{publisher}/books/{book}`\n\nExample: `publishers/1257894000000000000/books/my-book`", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "description": "The book to update.\n\nThe book's `name` field is used to identify the book to be updated.\nFormat: publishers/{publisher}/books/{book}", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbBook" + } + }, + { + "name": "updateMask", + "description": "The list of fields to be updated.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "allowMissing", + "description": "If set to true, and the book is not found, a new book will be created.\nIn this situation, `update_mask` is ignored.", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/{parent=publishers/*}/books": { "post": { "summary": "Create a book.", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index b456802c36c..dd4d017c60a 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -30,6 +30,7 @@ type ABitOfEverythingServiceClient interface { CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) // Create a book. CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) + UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) @@ -94,6 +95,15 @@ func (c *aBitOfEverythingServiceClient) CreateBook(ctx context.Context, in *Crea return out, nil } +func (c *aBitOfEverythingServiceClient) UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) { + out := new(Book) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) @@ -285,6 +295,7 @@ type ABitOfEverythingServiceServer interface { CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) // Create a book. CreateBook(context.Context, *CreateBookRequest) (*Book, error) + UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) Update(context.Context, *ABitOfEverything) (*empty.Empty, error) UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) @@ -327,6 +338,9 @@ func (UnimplementedABitOfEverythingServiceServer) CreateBody(context.Context, *A func (UnimplementedABitOfEverythingServiceServer) CreateBook(context.Context, *CreateBookRequest) (*Book, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBook not implemented") } +func (UnimplementedABitOfEverythingServiceServer) UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateBook not implemented") +} func (UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") } @@ -453,6 +467,24 @@ func _ABitOfEverythingService_CreateBook_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_UpdateBook_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateBookRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).UpdateBook(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).UpdateBook(ctx, req.(*UpdateBookRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(sub2.IdMessage) if err := dec(in); err != nil { @@ -829,6 +861,10 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateBook", Handler: _ABitOfEverythingService_CreateBook_Handler, }, + { + MethodName: "UpdateBook", + Handler: _ABitOfEverythingService_UpdateBook_Handler, + }, { MethodName: "Lookup", Handler: _ABitOfEverythingService_Lookup_Handler, diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 4b218880d4f..628bb0c9321 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -71,6 +71,10 @@ func (s *_ABitOfEverythingServer) CreateBook(ctx context.Context, req *examples. return &examples.Book{}, nil } +func (s *_ABitOfEverythingServer) UpdateBook(ctx context.Context, req *examples.UpdateBookRequest) (*examples.Book, error) { + return &examples.Book{}, nil +} + func (s *_ABitOfEverythingServer) BulkCreate(stream examples.StreamService_BulkCreateServer) error { ctx := stream.Context() diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 1c0793917b8..fb8fa9fe055 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -2168,6 +2168,12 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option } func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, field *descriptor.Field) { + // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. + // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 + if s.Ref != "" { + return + } + for _, fb := range j { switch fb { case annotations.FieldBehavior_REQUIRED: diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 2188e7396be..db0db41e593 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3497,6 +3497,22 @@ func TestSchemaOfField(t *testing.T) { ReadOnly: true, }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("message_field"), + TypeName: proto.String(".example.Message"), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Options: requiredFieldOptions, + }, + }, + refs: refMap{".example.Message": struct{}{}}, + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Ref: "#/definitions/exampleMessage", + }, + }, + }, } for _, test := range tests { reg := descriptor.NewRegistry() diff --git a/third_party/googleapis/README.grpc-gateway b/third_party/googleapis/README.grpc-gateway index b7d1bea36cd..a143d031e6b 100644 --- a/third_party/googleapis/README.grpc-gateway +++ b/third_party/googleapis/README.grpc-gateway @@ -3,7 +3,7 @@ Google APIs Project: Google APIs URL: https://github.com/google/googleapis -Revision: 3544ab16c3342d790b00764251e348705991ea4b +Revision: ca1372c6d7bcb199638ebfdb40d2b2660bab7b88 License: Apache License 2.0 @@ -11,6 +11,7 @@ Imported Files --------------- - google/api/annotations.proto +- google/api/field_behavior.proto - google/api/http.proto - google/api/httpbody.proto diff --git a/third_party/googleapis/google/api/http.proto b/third_party/googleapis/google/api/http.proto index 2bd3a19bfa5..69460cf791d 100644 --- a/third_party/googleapis/google/api/http.proto +++ b/third_party/googleapis/google/api/http.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ option java_outer_classname = "HttpProto"; option java_package = "com.google.api"; option objc_class_prefix = "GAPI"; - // Defines the HTTP configuration for an API service. It contains a list of // [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method // to one or more HTTP REST API methods. @@ -33,7 +32,7 @@ message Http { // **NOTE:** All service configuration rules follow "last one wins" order. repeated HttpRule rules = 1; - // When set to true, URL path parmeters will be fully URI-decoded except in + // When set to true, URL path parameters will be fully URI-decoded except in // cases of single segment matches in reserved expansion, where "%2F" will be // left encoded. // @@ -42,94 +41,94 @@ message Http { bool fully_decode_reserved_expansion = 2; } -// `HttpRule` defines the mapping of an RPC method to one or more HTTP -// REST API methods. The mapping specifies how different portions of the RPC -// request message are mapped to URL path, URL query parameters, and -// HTTP request body. The mapping is typically specified as an -// `google.api.http` annotation on the RPC method, -// see "google/api/annotations.proto" for details. -// -// The mapping consists of a field specifying the path template and -// method kind. The path template can refer to fields in the request -// message, as in the example below which describes a REST GET -// operation on a resource collection of messages: -// +// # gRPC Transcoding +// +// gRPC Transcoding is a feature for mapping between a gRPC method and one or +// more HTTP REST endpoints. It allows developers to build a single API service +// that supports both gRPC APIs and REST APIs. Many systems, including [Google +// APIs](https://github.com/googleapis/googleapis), +// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC +// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), +// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature +// and use it for large scale production services. +// +// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies +// how different portions of the gRPC request message are mapped to the URL +// path, URL query parameters, and HTTP request body. It also controls how the +// gRPC response message is mapped to the HTTP response body. `HttpRule` is +// typically specified as an `google.api.http` annotation on the gRPC method. +// +// Each mapping specifies a URL path template and an HTTP method. The path +// template may refer to one or more fields in the gRPC request message, as long +// as each field is a non-repeated field with a primitive (non-message) type. +// The path template controls how fields of the request message are mapped to +// the URL path. +// +// Example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}"; +// option (google.api.http) = { +// get: "/v1/{name=messages/*}" +// }; // } // } // message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // mapped to the URL -// SubMessage sub = 2; // `sub.subfield` is url-mapped +// string name = 1; // Mapped to URL path. // } // message Message { -// string text = 1; // content of the resource +// string text = 1; // The resource content. // } // -// The same http annotation can alternatively be expressed inside the -// `GRPC API Configuration` YAML file. +// This enables an HTTP REST to gRPC mapping as below: // -// http: -// rules: -// - selector: .Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// This definition enables an automatic, bidrectional mapping of HTTP -// JSON to RPC. Example: -// -// HTTP | RPC +// HTTP | gRPC // -----|----- -// `GET /v1/messages/123456/foo` | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))` -// -// In general, not only fields but also field paths can be referenced -// from a path pattern. Fields mapped to the path pattern cannot be -// repeated and must have a primitive (non-message) type. -// -// Any fields in the request message which are not bound by the path -// pattern automatically become (optional) HTTP query -// parameters. Assume the following definition of the request message: +// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` // +// Any fields in the request message which are not bound by the path template +// automatically become HTTP query parameters if there is no HTTP request body. +// For example: // // service Messaging { // rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http).get = "/v1/messages/{message_id}"; +// option (google.api.http) = { +// get:"/v1/messages/{message_id}" +// }; // } // } // message GetMessageRequest { // message SubMessage { // string subfield = 1; // } -// string message_id = 1; // mapped to the URL -// int64 revision = 2; // becomes a parameter -// SubMessage sub = 3; // `sub.subfield` becomes a parameter +// string message_id = 1; // Mapped to URL path. +// int64 revision = 2; // Mapped to URL query parameter `revision`. +// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. // } // -// // This enables a HTTP JSON to RPC mapping as below: // -// HTTP | RPC +// HTTP | gRPC // -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))` -// -// Note that fields which are mapped to HTTP parameters must have a -// primitive type or a repeated primitive type. Message types are not -// allowed. In the case of a repeated type, the parameter can be -// repeated in the URL, as in `...?param=A¶m=B`. -// -// For HTTP method kinds which allow a request body, the `body` field +// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | +// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: +// "foo"))` +// +// Note that fields which are mapped to URL query parameters must have a +// primitive type or a repeated primitive type or a non-repeated message type. +// In the case of a repeated type, the parameter can be repeated in the URL +// as `...?param=A¶m=B`. In the case of a message type, each field of the +// message is mapped to a separate parameter, such as +// `...?foo.a=A&foo.b=B&foo.c=C`. +// +// For HTTP methods that allow a request body, the `body` field // specifies the mapping. Consider a REST update method on the // message resource collection: // -// // service Messaging { // rpc UpdateMessage(UpdateMessageRequest) returns (Message) { // option (google.api.http) = { -// put: "/v1/messages/{message_id}" +// patch: "/v1/messages/{message_id}" // body: "message" // }; // } @@ -139,14 +138,14 @@ message Http { // Message message = 2; // mapped to the body // } // -// // The following HTTP JSON to RPC mapping is enabled, where the // representation of the JSON in the request body is determined by // protos JSON encoding: // -// HTTP | RPC +// HTTP | gRPC // -----|----- -// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })` +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" message { text: "Hi!" })` // // The special name `*` can be used in the body mapping to define that // every field not bound by the path template should be mapped to the @@ -156,7 +155,7 @@ message Http { // service Messaging { // rpc UpdateMessage(Message) returns (Message) { // option (google.api.http) = { -// put: "/v1/messages/{message_id}" +// patch: "/v1/messages/{message_id}" // body: "*" // }; // } @@ -169,13 +168,14 @@ message Http { // // The following HTTP JSON to RPC mapping is enabled: // -// HTTP | RPC +// HTTP | gRPC // -----|----- -// `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")` +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" text: "Hi!")` // // Note that when using `*` in the body mapping, it is not possible to // have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice of +// the body. This makes this option more rarely used in practice when // defining REST APIs. The common usage of `*` is in custom methods // which don't use the URL at all for transferring data. // @@ -197,32 +197,31 @@ message Http { // string user_id = 2; // } // +// This enables the following two alternative HTTP JSON to RPC mappings: // -// This enables the following two alternative HTTP JSON to RPC -// mappings: -// -// HTTP | RPC +// HTTP | gRPC // -----|----- // `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")` -// -// # Rules for HTTP mapping -// -// The rules for mapping HTTP path, query parameters, and body fields -// to the request message are as follows: -// -// 1. The `body` field specifies either `*` or a field path, or is -// omitted. If omitted, it indicates there is no HTTP request body. -// 2. Leaf fields (recursive expansion of nested messages in the -// request) can be classified into three types: -// (a) Matched in the URL template. -// (b) Covered by body (if body is `*`, everything except (a) fields; -// else everything under the body field) -// (c) All other fields. -// 3. URL query parameters found in the HTTP request are mapped to (c) fields. -// 4. Any body sent with an HTTP request can contain only (b) fields. -// -// The syntax of the path template is as follows: +// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: +// "123456")` +// +// ## Rules for HTTP mapping +// +// 1. Leaf request fields (recursive expansion nested messages in the request +// message) are classified into three categories: +// - Fields referred by the path template. They are passed via the URL path. +// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP +// request body. +// - All other fields are passed via the URL query parameters, and the +// parameter name is the field path in the request message. A repeated +// field can be represented as multiple query parameters under the same +// name. +// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields +// are passed via URL path and HTTP request body. +// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all +// fields are passed via URL path and URL query parameters. +// +// ### Path template syntax // // Template = "/" Segments [ Verb ] ; // Segments = Segment { "/" Segment } ; @@ -231,36 +230,88 @@ message Http { // FieldPath = IDENT { "." IDENT } ; // Verb = ":" LITERAL ; // -// The syntax `*` matches a single path segment. The syntax `**` matches zero -// or more path segments, which must be the last part of the path except the -// `Verb`. The syntax `LITERAL` matches literal text in the path. +// The syntax `*` matches a single URL path segment. The syntax `**` matches +// zero or more URL path segments, which must be the last part of the URL path +// except the `Verb`. // // The syntax `Variable` matches part of the URL path as specified by its // template. A variable template must not contain other variables. If a variable // matches a single path segment, its template may be omitted, e.g. `{var}` // is equivalent to `{var=*}`. // +// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` +// contains any reserved character, such characters should be percent-encoded +// before the matching. +// // If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path, all characters -// except `[-_.~0-9a-zA-Z]` are percent-encoded. Such variables show up in the -// Discovery Document as `{var}`. -// -// If a variable contains one or more path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path, all -// characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. Such variables -// show up in the Discovery Document as `{+var}`. -// -// NOTE: While the single segment variable matches the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 -// Simple String Expansion, the multi segment variable **does not** match -// RFC 6570 Reserved Expansion. The reason is that the Reserved Expansion +// `"{var=*}"`, when such a variable is expanded into a URL path on the client +// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The +// server side does the reverse decoding. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{var}`. +// +// If a variable contains multiple path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path on the +// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. +// The server side does the reverse decoding, except "%2F" and "%2f" are left +// unchanged. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{+var}`. +// +// ## Using gRPC API Service Configuration +// +// gRPC API Service Configuration (service config) is a configuration language +// for configuring a gRPC service to become a user-facing product. The +// service config is simply the YAML representation of the `google.api.Service` +// proto message. +// +// As an alternative to annotating your proto file, you can configure gRPC +// transcoding in your service config YAML files. You do this by specifying a +// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same +// effect as the proto annotation. This can be particularly useful if you +// have a proto that is reused in multiple services. Note that any transcoding +// specified in the service config will override any matching transcoding +// configuration in the proto. +// +// Example: +// +// http: +// rules: +// # Selects a gRPC method and applies HttpRule to it. +// - selector: example.v1.Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// ## Special notes +// +// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the +// proto to JSON conversion must follow the [proto3 +// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). +// +// While the single segment variable follows the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String +// Expansion, the multi segment variable **does not** follow RFC 6570 Section +// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion // does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. +// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding +// for multi segment variables. // -// NOTE: the field paths in variables and in the `body` must not refer to -// repeated fields or map fields. +// The path variables **must not** refer to any repeated or mapped field, +// because client libraries are not capable of handling such variable expansion. +// +// The path variables **must not** capture the leading "/" character. The reason +// is that the most common use case "{var}" does not capture the leading "/" +// character. For consistency, all path variables must share the same behavior. +// +// Repeated message fields must not be mapped to URL query parameters, because +// no client library can support such complicated mapping. +// +// If an API needs to use a JSON array for request or response body, it can map +// the request or response body to a repeated field. However, some gRPC +// Transcoding implementations may not support this feature. message HttpRule { - // Selects methods to which this rule applies. + // Selects a method to which this rule applies. // // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. string selector = 1; @@ -269,19 +320,20 @@ message HttpRule { // used with any of the {get|put|post|delete|patch} methods. A custom method // can be defined using the 'custom' field. oneof pattern { - // Used for listing and getting information about resources. + // Maps to HTTP GET. Used for listing and getting information about + // resources. string get = 2; - // Used for updating a resource. + // Maps to HTTP PUT. Used for replacing a resource. string put = 3; - // Used for creating a resource. + // Maps to HTTP POST. Used for creating a resource or performing an action. string post = 4; - // Used for deleting a resource. + // Maps to HTTP DELETE. Used for deleting a resource. string delete = 5; - // Used for updating a resource. + // Maps to HTTP PATCH. Used for updating a resource. string patch = 6; // The custom pattern is used for specifying an HTTP method that is not @@ -291,15 +343,20 @@ message HttpRule { CustomHttpPattern custom = 8; } - // The name of the request field whose value is mapped to the HTTP body, or - // `*` for mapping all fields not captured by the path pattern to the HTTP - // body. NOTE: the referred field must not be a repeated field and must be - // present at the top-level of request message type. + // The name of the request field whose value is mapped to the HTTP request + // body, or `*` for mapping all request fields not captured by the path + // pattern to the HTTP body, or omitted for not having any HTTP request body. + // + // NOTE: the referred field must be present at the top-level of the request + // message type. string body = 7; // Optional. The name of the response field whose value is mapped to the HTTP - // body of response. Other response fields are ignored. When - // not set, the response message will be used as HTTP body of response. + // response body. When omitted, the entire response message will be used + // as the HTTP response body. + // + // NOTE: The referred field must be present at the top-level of the response + // message type. string response_body = 12; // Additional HTTP bindings for the selector. Nested bindings must diff --git a/third_party/googleapis/google/api/httpbody.proto b/third_party/googleapis/google/api/httpbody.proto index 4428515c120..bc5ea4478cc 100644 --- a/third_party/googleapis/google/api/httpbody.proto +++ b/third_party/googleapis/google/api/httpbody.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; From 308c3b6af0d63553cda33c6ad3e6ab999582294c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Feb 2021 14:08:24 +0000 Subject: [PATCH 0809/1518] Update golang Docker tag to v1.15.8 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c2eb698e172..e425f65e88c 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.7 +FROM golang:1.15.8 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From b55d46204c580e46b6cb95c17f421763e47ac8b4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 7 Feb 2021 03:40:17 +0000 Subject: [PATCH 0810/1518] Update google.golang.org/genproto commit hash to bba0dbe --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5b25485a0d3..e6697528d94 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c - google.golang.org/genproto v0.0.0-20210204154452-deb828366460 + google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 64b91b28d74..215c827fd4c 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210204154452-deb828366460 h1:pvsg2TgyP8bWrYqyL10tbNHu5KypD5DWJPrCjaTkwZA= -google.golang.org/genproto v0.0.0-20210204154452-deb828366460/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea h1:N98SvVh7Hdle2lgUVFuIkf0B3u29CUakMUQa7Hwz8Wc= +google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4ae944c1106..918bc03938b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:pvsg2TgyP8bWrYqyL10tbNHu5KypD5DWJPrCjaTkwZA=", - version = "v0.0.0-20210204154452-deb828366460", + sum = "h1:N98SvVh7Hdle2lgUVFuIkf0B3u29CUakMUQa7Hwz8Wc=", + version = "v0.0.0-20210207032614-bba0dbe2a9ea", ) go_repository( name = "org_golang_google_grpc", From 3c4b5a09b00a2e5bee612c8a9641794ba71435fb Mon Sep 17 00:00:00 2001 From: Dylan Parker Date: Tue, 9 Feb 2021 03:22:30 -0600 Subject: [PATCH 0811/1518] add documenation for standalone gateway generation (#1955) --- docs/docs/faq.md | 2 ++ docs/docs/mapping/grpc_api_configuration.md | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index 907ffb0943f..e670a9cabd1 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -10,6 +10,8 @@ nav_order: 7 The gRPC-Gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), so first check out the documentation if it is feasible in the spec. +For situations where annotating the proto file is not an option please reference the documentation on [gRPC API Configuration](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/) + See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in the grpc-io mailing list. ## I want to support a certain style of HTTP request but the code generated by gRPC-Gateway does not. How can I support this style? diff --git a/docs/docs/mapping/grpc_api_configuration.md b/docs/docs/mapping/grpc_api_configuration.md index a6912f58b8c..6d69bbcc60f 100644 --- a/docs/docs/mapping/grpc_api_configuration.md +++ b/docs/docs/mapping/grpc_api_configuration.md @@ -11,8 +11,10 @@ In some situations annotating the proto file of service is not an option. For ex gRPC-Gateway supports 2 ways of dealing with these situations: -- [use the `generate_unbound_methods` option](#generate_unbound_methods) -- [provide an external configuration file](#using-an-external-configuration-file) (gRPC API Configuration) +- [gRPC API Configuration](#grpc-api-configuration) + - [`generate_unbound_methods`](#generate_unbound_methods) + - [Using an external configuration file](#using-an-external-configuration-file) + - [Usage of gRPC API Configuration YAML files](#usage-of-grpc-api-configuration-yaml-files) ## `generate_unbound_methods` @@ -100,6 +102,18 @@ It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. + In situations where you only need the reverse-proxy you can use the `standalone=true` option when generating the code. This will ensure the `types` used within `your_service.pb.gw.go` reference the external source appropriately. + + ``` + protoc -I . \ + --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt standalone=true \ + --grpc-gateway_opt grpc_api_configuration=path/to/your_service.yaml \ + your/service/v1/your_service.proto + ``` + 6. Generate the optional your_service.swagger.json ```sh From 519e7f45f48e3e378e3341d076579f3ce52aa717 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Tue, 9 Feb 2021 09:46:42 -0500 Subject: [PATCH 0812/1518] Fix verb parsing (#1947) * Start variable/verb fix * Add tests for parser side * Update test * Adjust runtime logic to use the verb in the pattern * Remove now-unneeded test --- internal/httprule/parse.go | 28 ++++++++++++++--- internal/httprule/parse_test.go | 53 ++++++++++++++++++++++++++------- runtime/mux.go | 40 +++++++++++++++++-------- runtime/mux_test.go | 23 +++++++++++++- 4 files changed, 116 insertions(+), 28 deletions(-) diff --git a/internal/httprule/parse.go b/internal/httprule/parse.go index d42f1e2a227..7c7140f1948 100644 --- a/internal/httprule/parse.go +++ b/internal/httprule/parse.go @@ -45,9 +45,7 @@ func tokenize(path string) (tokens []string, verb string) { field nested ) - var ( - st = init - ) + st := init for path != "" { var idx int switch st { @@ -80,8 +78,30 @@ func tokenize(path string) (tokens []string, verb string) { } l := len(tokens) + // See + // https://github.com/grpc-ecosystem/grpc-gateway/pull/1947#issuecomment-774523693 ; + // although normal and backwards-compat logic here is to use the last index + // of a colon, if the final segment is a variable followed by a colon, the + // part following the colon must be a verb. Hence if the previous token is + // an end var marker, we switch the index we're looking for to Index instead + // of LastIndex, so that we correctly grab the remaining part of the path as + // the verb. + var penultimateTokenIsEndVar bool + switch l { + case 0, 1: + // Not enough to be variable so skip this logic and don't result in an + // invalid index + default: + penultimateTokenIsEndVar = tokens[l-2] == "}" + } t := tokens[l-1] - if idx := strings.LastIndex(t, ":"); idx == 0 { + var idx int + if penultimateTokenIsEndVar { + idx = strings.Index(t, ":") + } else { + idx = strings.LastIndex(t, ":") + } + if idx == 0 { tokens, verb = tokens[:l-1], t[1:] } else if idx > 0 { tokens[l-1], verb = t[:idx], t[idx+1:] diff --git a/internal/httprule/parse_test.go b/internal/httprule/parse_test.go index 711ac25e6de..df525dc580e 100644 --- a/internal/httprule/parse_test.go +++ b/internal/httprule/parse_test.go @@ -13,6 +13,7 @@ func TestTokenize(t *testing.T) { for _, spec := range []struct { src string tokens []string + verb string }{ { src: "", @@ -81,22 +82,51 @@ func TestTokenize(t *testing.T) { eof, }, }, + { + src: "v1/a/{endpoint}:a", + tokens: []string{ + "v1", "/", + "a", "/", + "{", "endpoint", "}", + eof, + }, + verb: "a", + }, + { + src: "v1/a/{endpoint}:b:c", + tokens: []string{ + "v1", "/", + "a", "/", + "{", "endpoint", "}", + eof, + }, + verb: "b:c", + }, } { tokens, verb := tokenize(spec.src) if got, want := tokens, spec.tokens; !reflect.DeepEqual(got, want) { t.Errorf("tokenize(%q) = %q, _; want %q, _", spec.src, got, want) } - if got, want := verb, ""; got != want { - t.Errorf("tokenize(%q) = _, %q; want _, %q", spec.src, got, want) - } - src := fmt.Sprintf("%s:%s", spec.src, "LOCK") - tokens, verb = tokenize(src) - if got, want := tokens, spec.tokens; !reflect.DeepEqual(got, want) { - t.Errorf("tokenize(%q) = %q, _; want %q, _", src, got, want) - } - if got, want := verb, "LOCK"; got != want { - t.Errorf("tokenize(%q) = _, %q; want _, %q", src, got, want) + switch { + case spec.verb != "": + if got, want := verb, spec.verb; !reflect.DeepEqual(got, want) { + t.Errorf("tokenize(%q) = %q, _; want %q, _", spec.src, got, want) + } + + default: + if got, want := verb, ""; got != want { + t.Errorf("tokenize(%q) = _, %q; want _, %q", spec.src, got, want) + } + + src := fmt.Sprintf("%s:%s", spec.src, "LOCK") + tokens, verb = tokenize(src) + if got, want := tokens, spec.tokens; !reflect.DeepEqual(got, want) { + t.Errorf("tokenize(%q) = %q, _; want %q, _", src, got, want) + } + if got, want := verb, "LOCK"; got != want { + t.Errorf("tokenize(%q) = _, %q; want _, %q", src, got, want) + } } } } @@ -209,7 +239,8 @@ func TestParseSegments(t *testing.T) { "a", "/", "b", "/", "*", "/", "c", "}", "/", "**", - eof}, + eof, + }, want: []segment{ literal("v1"), variable{ diff --git a/runtime/mux.go b/runtime/mux.go index cad67407b5f..10fd357b1e3 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -205,18 +205,6 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { } components := strings.Split(path[1:], "/") - l := len(components) - var verb string - idx := strings.LastIndex(components[l-1], ":") - if idx == 0 { - _, outboundMarshaler := MarshalerForRequest(s, r) - s.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound) - return - } - if idx > 0 { - c := components[l-1] - components[l-1], verb = c[:idx], c[idx+1:] - } if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { r.Method = strings.ToUpper(override) @@ -227,7 +215,35 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } } + + // Verb out here is to memoize for the fallback case below + var verb string + for _, h := range s.handlers[r.Method] { + // If the pattern has a verb, explicitly look for a suffix in the last + // component that matches a colon plus the verb. This allows us to + // handle some cases that otherwise can't be correctly handled by the + // former LastIndex case, such as when the verb literal itself contains + // a colon. This should work for all cases that have run through the + // parser because we know what verb we're looking for, however, there + // are still some cases that the parser itself cannot disambiguate. See + // the comment there if interested. + patVerb := h.pat.Verb() + l := len(components) + lastComponent := components[l-1] + var idx int = -1 + if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) { + idx = len(lastComponent) - len(patVerb) - 1 + } + if idx == 0 { + _, outboundMarshaler := MarshalerForRequest(s, r) + s.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound) + return + } + if idx > 0 { + components[l-1], verb = lastComponent[:idx], lastComponent[idx+1:] + } + pathParams, err := h.pat.Match(components, verb) if err != nil { continue diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 1b0ff1b0a86..d5aa7c759b0 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -308,6 +308,28 @@ func TestMuxServeHTTP(t *testing.T) { }, respStatus: http.StatusBadRequest, }, + { + patterns: []stubPattern{ + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + }, + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + verb: "verb:subverb", + }, + }, + reqMethod: "POST", + reqPath: "/foo/bar:verb:subverb", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + respContent: "POST /foo/{id=*}:verb:subverb", + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { var opts []runtime.ServeMuxOption @@ -437,5 +459,4 @@ func TestServeMux_HandlePath(t *testing.T) { } }) } - } From a1186eb0bffefdb8ec5e0809f0ed099dda0953f4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 9 Feb 2021 15:31:27 +0000 Subject: [PATCH 0813/1518] Update rules_proto commit hash to f7a30f6 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 4d99d05e96d..f6742925ea4 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -17,11 +17,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "2a20fd8af3cad3fbab9fd3aec4a137621e0c31f858af213a7ae0f997723fc4a9", - strip_prefix = "rules_proto-a0761ed101b939e19d83b2da5f59034bffc19c12", + sha256 = "9fc210a34f0f9e7cc31598d109b5d069ef44911a82f507d5a88716db171615a8", + strip_prefix = "rules_proto-f7a30f6f80006b591fa7c437fe5a951eb10bcbcf", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/a0761ed101b939e19d83b2da5f59034bffc19c12.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/a0761ed101b939e19d83b2da5f59034bffc19c12.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/f7a30f6f80006b591fa7c437fe5a951eb10bcbcf.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/f7a30f6f80006b591fa7c437fe5a951eb10bcbcf.tar.gz", ], ) From c961cad1c3ba826b233e3fba73ef27024b918137 Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Tue, 9 Feb 2021 17:40:56 +0100 Subject: [PATCH 0814/1518] release: generate changelog for v2.2.0 --- CHANGELOG.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++---- Makefile | 2 +- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1473f286954..9b1a48bbbb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,68 @@ # Change Log +## [v2.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.2.0) (2021-02-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.1.0...v2.2.0) + +**Fixed bugs:** + +- \[protoc-gen-openapiv2\] \[BUG\] Incorrect handling of non-wildcard google.api.http.body when using field\_behaviour annotation [\#1937](https://github.com/grpc-ecosystem/grpc-gateway/issues/1937) +- Duplicate tags seen in Swagger Specification [\#1913](https://github.com/grpc-ecosystem/grpc-gateway/issues/1913) +- Poor error message when using message in path parameter [\#1863](https://github.com/grpc-ecosystem/grpc-gateway/issues/1863) + +**Closed issues:** + +- can we add HTTPStatusFromCode to mux? [\#1954](https://github.com/grpc-ecosystem/grpc-gateway/issues/1954) +- Missing types in generated gw.go file for C++ server [\#1942](https://github.com/grpc-ecosystem/grpc-gateway/issues/1942) +- What is the recommend way to bind 3rd party APIs \(e.g. Health/Check to /healthzf [\#1931](https://github.com/grpc-ecosystem/grpc-gateway/issues/1931) +- Patch request with field\_masks [\#1930](https://github.com/grpc-ecosystem/grpc-gateway/issues/1930) +- Working from the helloworld example but getting an error on HTTP requests: grpc: the client connection is closing. Would like to improve the docs. [\#1924](https://github.com/grpc-ecosystem/grpc-gateway/issues/1924) +- Action Required: Fix Renovate Configuration [\#1918](https://github.com/grpc-ecosystem/grpc-gateway/issues/1918) +- F [\#1917](https://github.com/grpc-ecosystem/grpc-gateway/issues/1917) +- Is any method to access the raw request body in metadata? [\#1908](https://github.com/grpc-ecosystem/grpc-gateway/issues/1908) +- Custom incoming header matcher isn't working as expected [\#1902](https://github.com/grpc-ecosystem/grpc-gateway/issues/1902) +- README.md links to https://pkg.go.dev/github.com/golang/protobuf/jsonpb which does not exist [\#1901](https://github.com/grpc-ecosystem/grpc-gateway/issues/1901) +- Is it possible to setup CORS? [\#1889](https://github.com/grpc-ecosystem/grpc-gateway/issues/1889) + +**Merged pull requests:** + +- Add documenation for standalone gateway generation [\#1955](https://github.com/grpc-ecosystem/grpc-gateway/pull/1955) ([dgparker](https://github.com/dgparker)) +- Update google.golang.org/genproto commit hash to bba0dbe \(master\) [\#1953](https://github.com/grpc-ecosystem/grpc-gateway/pull/1953) ([renovate[bot]](https://github.com/apps/renovate)) +- Make fieldmask parser output deterministic [\#1950](https://github.com/grpc-ecosystem/grpc-gateway/pull/1950) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update golang Docker tag to v1.15.8 \(master\) [\#1949](https://github.com/grpc-ecosystem/grpc-gateway/pull/1949) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix verb parsing [\#1947](https://github.com/grpc-ecosystem/grpc-gateway/pull/1947) ([jefferai](https://github.com/jefferai)) +- Update google.golang.org/genproto commit hash to deb8283 \(master\) [\#1945](https://github.com/grpc-ecosystem/grpc-gateway/pull/1945) ([renovate[bot]](https://github.com/apps/renovate)) +- Fix malformed Schema Reference during field\_behavior generation [\#1944](https://github.com/grpc-ecosystem/grpc-gateway/pull/1944) ([gganley](https://github.com/gganley)) +- Update dependency com\_github\_bazelbuild\_buildtools to v4 \(master\) [\#1939](https://github.com/grpc-ecosystem/grpc-gateway/pull/1939) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 3206188 \(master\) [\#1936](https://github.com/grpc-ecosystem/grpc-gateway/pull/1936) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 646a494 \(master\) [\#1934](https://github.com/grpc-ecosystem/grpc-gateway/pull/1934) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 0101308 \(master\) [\#1933](https://github.com/grpc-ecosystem/grpc-gateway/pull/1933) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 94839c0 \(master\) [\#1932](https://github.com/grpc-ecosystem/grpc-gateway/pull/1932) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to f9ce19e \(master\) [\#1928](https://github.com/grpc-ecosystem/grpc-gateway/pull/1928) ([renovate[bot]](https://github.com/apps/renovate)) +- Update rules\_proto commit hash to a0761ed \(master\) [\#1927](https://github.com/grpc-ecosystem/grpc-gateway/pull/1927) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to 44e461b \(master\) [\#1926](https://github.com/grpc-ecosystem/grpc-gateway/pull/1926) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to f46fe6c \(master\) [\#1923](https://github.com/grpc-ecosystem/grpc-gateway/pull/1923) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to af13f52 \(master\) [\#1922](https://github.com/grpc-ecosystem/grpc-gateway/pull/1922) ([renovate[bot]](https://github.com/apps/renovate)) +- Multiple repeated fields are allowed [\#1921](https://github.com/grpc-ecosystem/grpc-gateway/pull/1921) ([topherCantrell](https://github.com/topherCantrell)) +- Update google.golang.org/genproto commit hash to 8081c04 \(master\) [\#1920](https://github.com/grpc-ecosystem/grpc-gateway/pull/1920) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to fc48d45 \(master\) [\#1919](https://github.com/grpc-ecosystem/grpc-gateway/pull/1919) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to f5e8c5e \(master\) [\#1915](https://github.com/grpc-ecosystem/grpc-gateway/pull/1915) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang Docker tag to v1.15.7 \(master\) [\#1912](https://github.com/grpc-ecosystem/grpc-gateway/pull/1912) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to e258113 \(master\) [\#1910](https://github.com/grpc-ecosystem/grpc-gateway/pull/1910) ([renovate[bot]](https://github.com/apps/renovate)) +- Update docs for bug fix and expanding HTTP status codes in Customizing your gateway [\#1907](https://github.com/grpc-ecosystem/grpc-gateway/pull/1907) ([bconway](https://github.com/bconway)) +- Update rules\_proto commit hash to cfdc2fa \(master\) [\#1906](https://github.com/grpc-ecosystem/grpc-gateway/pull/1906) ([renovate[bot]](https://github.com/apps/renovate)) +- Remove jsonpb reference [\#1904](https://github.com/grpc-ecosystem/grpc-gateway/pull/1904) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update google.golang.org/genproto commit hash to 6edceaf \(master\) [\#1903](https://github.com/grpc-ecosystem/grpc-gateway/pull/1903) ([renovate[bot]](https://github.com/apps/renovate)) +- Update module google.golang.org/grpc to v1.35.0 \(master\) [\#1899](https://github.com/grpc-ecosystem/grpc-gateway/pull/1899) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to d3ed898 \(master\) [\#1898](https://github.com/grpc-ecosystem/grpc-gateway/pull/1898) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to ae06605 \(master\) [\#1897](https://github.com/grpc-ecosystem/grpc-gateway/pull/1897) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 8b1d76f \(master\) [\#1896](https://github.com/grpc-ecosystem/grpc-gateway/pull/1896) ([renovate[bot]](https://github.com/apps/renovate)) +- Update golang.org/x/oauth2 commit hash to 01de73c \(master\) [\#1895](https://github.com/grpc-ecosystem/grpc-gateway/pull/1895) ([renovate[bot]](https://github.com/apps/renovate)) +- Reworked Error message in newParam\(\) in services.go [\#1894](https://github.com/grpc-ecosystem/grpc-gateway/pull/1894) ([gunadhya](https://github.com/gunadhya)) +- Update google.golang.org/genproto commit hash to 22ae2b1 \(master\) [\#1893](https://github.com/grpc-ecosystem/grpc-gateway/pull/1893) ([renovate[bot]](https://github.com/apps/renovate)) +- Update module google.golang.org/grpc to v1.34.1 \(master\) [\#1891](https://github.com/grpc-ecosystem/grpc-gateway/pull/1891) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to c7d5778 \(master\) [\#1890](https://github.com/grpc-ecosystem/grpc-gateway/pull/1890) ([renovate[bot]](https://github.com/apps/renovate)) +- Update google.golang.org/genproto commit hash to ffc7fda \(master\) [\#1888](https://github.com/grpc-ecosystem/grpc-gateway/pull/1888) ([renovate[bot]](https://github.com/apps/renovate)) + ## [v2.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.1.0) (2021-01-07) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.16.0...v2.1.0) @@ -7,7 +70,6 @@ - protoc-gen-grpc-gateway: can't generate gateway stubs for multiple packages in one go [\#1612](https://github.com/grpc-ecosystem/grpc-gateway/issues/1612) - Addition of Prettier GitHub action to prettified the markdown files [\#1575](https://github.com/grpc-ecosystem/grpc-gateway/issues/1575) -- add support for field\_behavior options on swagger plugin [\#1806](https://github.com/grpc-ecosystem/grpc-gateway/pull/1806) ([ewhauser](https://github.com/ewhauser)) **Fixed bugs:** @@ -45,6 +107,7 @@ **Merged pull requests:** +- Generate changelog for v2.1.0 [\#1887](https://github.com/grpc-ecosystem/grpc-gateway/pull/1887) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update google.golang.org/genproto commit hash to 07624b5 \(master\) [\#1885](https://github.com/grpc-ecosystem/grpc-gateway/pull/1885) ([renovate[bot]](https://github.com/apps/renovate)) - Add a \#\# Docs section to highlight the docs URL [\#1884](https://github.com/grpc-ecosystem/grpc-gateway/pull/1884) ([VinGarcia](https://github.com/VinGarcia)) - Fix broken 'Field Mask' documentation link [\#1883](https://github.com/grpc-ecosystem/grpc-gateway/pull/1883) ([adolfo](https://github.com/adolfo)) @@ -92,6 +155,7 @@ - Update google.golang.org/genproto commit hash to 2985b7a \(master\) [\#1810](https://github.com/grpc-ecosystem/grpc-gateway/pull/1810) ([renovate[bot]](https://github.com/apps/renovate)) - Update google.golang.org/genproto commit hash to ac7456d \(master\) [\#1808](https://github.com/grpc-ecosystem/grpc-gateway/pull/1808) ([renovate[bot]](https://github.com/apps/renovate)) - Update google.golang.org/genproto commit hash to 8816d57 \(master\) [\#1807](https://github.com/grpc-ecosystem/grpc-gateway/pull/1807) ([renovate[bot]](https://github.com/apps/renovate)) +- add support for field\_behavior options on swagger plugin [\#1806](https://github.com/grpc-ecosystem/grpc-gateway/pull/1806) ([ewhauser](https://github.com/ewhauser)) - Update google.golang.org/genproto commit hash to 2640f1f \(master\) [\#1805](https://github.com/grpc-ecosystem/grpc-gateway/pull/1805) ([renovate[bot]](https://github.com/apps/renovate)) - Update golang.org/x/oauth2 commit hash to 9fd6049 \(master\) [\#1804](https://github.com/grpc-ecosystem/grpc-gateway/pull/1804) ([renovate[bot]](https://github.com/apps/renovate)) - Disable gRPC updates on v1 [\#1802](https://github.com/grpc-ecosystem/grpc-gateway/pull/1802) ([johanbrandhorst](https://github.com/johanbrandhorst)) @@ -346,11 +410,11 @@ ## [v2.0.0-beta.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.3) (2020-05-25) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.2...v2.0.0-beta.3) -## [v2.0.0-beta.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.2) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.6...v2.0.0-beta.2) - ## [v1.14.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.6) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.1...v1.14.6) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.5...v1.14.6) + +## [v2.0.0-beta.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.2) (2020-05-25) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.1...v2.0.0-beta.2) ## [v2.0.0-beta.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.1) (2020-05-25) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.5...v2.0.0-beta.1) diff --git a/Makefile b/Makefile index b788816f977..9c30d517976 100644 --- a/Makefile +++ b/Makefile @@ -258,7 +258,7 @@ changelog: --github-site=https://github.com \ --unreleased-label "**Next release**" \ --release-branch=master \ - --future-release=v2.1.0 + --future-release=v2.2.0 clean: rm -f $(GATEWAY_PLUGIN) $(OPENAPI_PLUGIN) From 406954da6fd525662d9f845f6eb12f40c75c8114 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 10 Feb 2021 20:26:00 +0000 Subject: [PATCH 0815/1518] chore(deps): update golang.org/x/oauth2 commit hash to 6667018 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e6697528d94..cad4f4925de 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c + golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 215c827fd4c..94f691c96a5 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c h1:HiAZXo96zOhVhtFHchj/ojzoxCFiPrp9/j0GtS38V3g= -golang.org/x/oauth2 v0.0.0-20210201163806-010130855d6c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd h1:2arJsLyTCJGek+eeptQ3z49Rqndm0f+zvvpwNIXWNIA= +golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 918bc03938b..10b0cdad1e8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:HiAZXo96zOhVhtFHchj/ojzoxCFiPrp9/j0GtS38V3g=", - version = "v0.0.0-20210201163806-010130855d6c", + sum = "h1:2arJsLyTCJGek+eeptQ3z49Rqndm0f+zvvpwNIXWNIA=", + version = "v0.0.0-20210210192628-66670185b0cd", ) go_repository( name = "org_golang_x_sync", From f700373096aeb5b55ea37335fe21b478c637b87f Mon Sep 17 00:00:00 2001 From: Rodolfo P A Date: Thu, 11 Feb 2021 07:52:25 -0300 Subject: [PATCH 0816/1518] FAQ Adding related projects to the documentation (#1946) * Adding related project * Creating related_projects.md page. * Moving related projects information. * Adding other projects. * Update docs/docs/related_projects.md Co-authored-by: Johan Brandhorst-Satzkorn * Review. Co-authored-by: Johan Brandhorst-Satzkorn --- docs/docs/related_projects.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/docs/related_projects.md diff --git a/docs/docs/related_projects.md b/docs/docs/related_projects.md new file mode 100644 index 00000000000..0d691d52d8f --- /dev/null +++ b/docs/docs/related_projects.md @@ -0,0 +1,15 @@ +--- +layout: default +title: Related projects +nav_order: 8 +--- + +# Related projects +- [grps-dynamic-gateway](https://github.com/konsumer/grpc-dynamic-gateway) + A dynamically configured alternative to the grpc-gateway written in Node. +- [rest2grpc](https://www.npmjs.com/package/rest2grpc) + A statically configured alternative to the grpc-gateway written in Node. +- The Envoy proxy [gRPC-JSON transcoder](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter) + An Envoy proxy filter that translates incoming JSON requests to gRPC and back. +- Google Cloud Platform [HTTP/JSON gRPC transcoding](https://cloud.google.com/endpoints/docs/grpc/transcoding) + A GCP product that behaves like the grpc-gateway. From dc3dc93598f0f87fa5d65cced27b898b4e8f5ec3 Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Tue, 9 Feb 2021 19:07:48 +0100 Subject: [PATCH 0817/1518] Update CONTRIBUTING.md on release description --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4961ede3ca0..9dafe73fd13 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -83,5 +83,6 @@ To make a release, follow these steps: UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new). 1. If you create a release using the web UI you can publish it as a draft and have it reviewed by another maintainer. + 1. Update the release description with the generated changelog. 1. (Optional) Delete your GitHub token again. 1. (Required) Sit back and pat yourself on the back for a job well done :clap:. From 5dca2109a103b92aff88f15f64b7300da96f14e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Vu=C4=8Dica?= Date: Thu, 11 Feb 2021 17:06:30 +0000 Subject: [PATCH 0818/1518] docs/Gemfile.lock: Fix dependabot security warning Quoting: > 1 nokogiri vulnerability found in docs/Gemfile.lock on Dec 31, 2020 > > ## Remediation > > Upgrade nokogiri to version 1.11.0 or later. For example: > > ``` > gem "nokogiri", ">= 1.11.0" > ``` > > Always verify the validity and compatibility of suggestions with your codebase. > > Details > > - GHSA-vr8q-g5c7-m54m > - low severity > - Vulnerable versions: <= 1.10.10 > -Patched version: 1.11.0 > > ## Severity > > Nokogiri maintainers have evaluated this as Low Severity (CVSS3 2.6). --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index b7d0c789c99..852dc6b4d7a 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -73,7 +73,7 @@ GEM liquid (= 4.0.3) mercenary (~> 0.3) minima (= 2.5.1) - nokogiri (>= 1.10.4, < 2.0) + nokogiri (>= 1.11.0, < 2.0) rouge (= 3.23.0) terminal-table (~> 1.4) github-pages-health-check (1.16.1) From c6fe0172781f7f0f319a63a750f68b30227e1c1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Feb 2021 18:26:22 +0000 Subject: [PATCH 0819/1518] chore(deps): update google.golang.org/genproto commit hash to 3a9a48d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cad4f4925de..a6d4a2317ba 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd - google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea + google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 94f691c96a5..0676d249a04 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea h1:N98SvVh7Hdle2lgUVFuIkf0B3u29CUakMUQa7Hwz8Wc= -google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c h1:SuFk+jAP52y1mif4Oh4KvO6pTPvrgWW7BYj6XMOsjVM= +google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 10b0cdad1e8..fdb073d258a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:N98SvVh7Hdle2lgUVFuIkf0B3u29CUakMUQa7Hwz8Wc=", - version = "v0.0.0-20210207032614-bba0dbe2a9ea", + sum = "h1:SuFk+jAP52y1mif4Oh4KvO6pTPvrgWW7BYj6XMOsjVM=", + version = "v0.0.0-20210211154401-3a9a48ddfd6c", ) go_repository( name = "org_golang_google_grpc", From 06a75ec63b4e0ef5a4dc8f8927dc976ccc7a8375 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Feb 2021 22:41:16 +0000 Subject: [PATCH 0820/1518] chore(deps): update google.golang.org/genproto commit hash to 4ccc9a5 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a6d4a2317ba..cbaafaaf439 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd - google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c + google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 0676d249a04..e45879e8f2c 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c h1:SuFk+jAP52y1mif4Oh4KvO6pTPvrgWW7BYj6XMOsjVM= -google.golang.org/genproto v0.0.0-20210211154401-3a9a48ddfd6c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183 h1:5YmF1NDDcUX9p0CJqW+GQiLW0HHe7ZW5K6lsFk6mJeA= +google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fdb073d258a..efd9b4ceb9f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SuFk+jAP52y1mif4Oh4KvO6pTPvrgWW7BYj6XMOsjVM=", - version = "v0.0.0-20210211154401-3a9a48ddfd6c", + sum = "h1:5YmF1NDDcUX9p0CJqW+GQiLW0HHe7ZW5K6lsFk6mJeA=", + version = "v0.0.0-20210211221406-4ccc9a5e4183", ) go_repository( name = "org_golang_google_grpc", From 0751a68280841d6b7dee1476e8380423d7acee8f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 12 Feb 2021 18:16:38 +0000 Subject: [PATCH 0821/1518] chore(deps): update google.golang.org/genproto commit hash to e7f2df4 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cbaafaaf439..7c770511e48 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd - google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183 + google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index e45879e8f2c..6bcd421fa2b 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183 h1:5YmF1NDDcUX9p0CJqW+GQiLW0HHe7ZW5K6lsFk6mJeA= -google.golang.org/genproto v0.0.0-20210211221406-4ccc9a5e4183/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d h1:Edhcm0CKDPLQIecHCp5Iz57Lo7MfT6zUFBAlocmOjcY= +google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index efd9b4ceb9f..580427324ed 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5YmF1NDDcUX9p0CJqW+GQiLW0HHe7ZW5K6lsFk6mJeA=", - version = "v0.0.0-20210211221406-4ccc9a5e4183", + sum = "h1:Edhcm0CKDPLQIecHCp5Iz57Lo7MfT6zUFBAlocmOjcY=", + version = "v0.0.0-20210212180131-e7f2df4ecc2d", ) go_repository( name = "org_golang_google_grpc", From 40d8c9e39c25c9e9e7fc9e06e769072191298e48 Mon Sep 17 00:00:00 2001 From: Adam Liddell Date: Mon, 15 Feb 2021 20:59:53 +0000 Subject: [PATCH 0822/1518] [Bazel] Update protobuf, rules_go and gazelle (#1972) * Remove com_google_protobuf that was never used The version of com_google_protobuf in rules_proto will have taken precedence over this one, making this repo rule pointless * Add early load of com_google_protobuf * Update rules_go and gazelle * Update proto deps * Apply buildifier --- BUILD | 33 +++------------------------------ WORKSPACE | 31 +++++++++++++++---------------- 2 files changed, 18 insertions(+), 46 deletions(-) diff --git a/BUILD b/BUILD index b8731f8737f..3c8da9c9c0f 100644 --- a/BUILD +++ b/BUILD @@ -1,6 +1,7 @@ load("@bazel_gazelle//:def.bzl", "gazelle") load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier") load("@io_bazel_rules_go//proto:compiler.bzl", "go_proto_compiler") +load("@io_bazel_rules_go//proto/wkt:well_known_types.bzl", "PROTO_RUNTIME_DEPS", "WELL_KNOWN_TYPES_APIV2") buildifier( name = "buildifier", @@ -35,23 +36,7 @@ go_proto_compiler( plugin = "@org_golang_google_protobuf//cmd/protoc-gen-go", suffix = ".pb.go", visibility = ["//visibility:public"], - deps = [ - "@com_github_golang_protobuf//proto:go_default_library", - "@io_bazel_rules_go//proto/wkt:any_go_proto", - "@io_bazel_rules_go//proto/wkt:api_go_proto", - "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", - "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", - "@io_bazel_rules_go//proto/wkt:duration_go_proto", - "@io_bazel_rules_go//proto/wkt:empty_go_proto", - "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@io_bazel_rules_go//proto/wkt:source_context_go_proto", - "@io_bazel_rules_go//proto/wkt:struct_go_proto", - "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", - "@io_bazel_rules_go//proto/wkt:type_go_proto", - "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", - "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", - "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", - ], + deps = PROTO_RUNTIME_DEPS + WELL_KNOWN_TYPES_APIV2, ) go_proto_compiler( @@ -63,19 +48,7 @@ go_proto_compiler( plugin = "@org_golang_google_grpc_cmd_protoc_gen_go_grpc//:protoc-gen-go-grpc", suffix = "_grpc.pb.go", visibility = ["//visibility:public"], - deps = [ - "@io_bazel_rules_go//proto/wkt:any_go_proto", - "@io_bazel_rules_go//proto/wkt:api_go_proto", - "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", - "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", - "@io_bazel_rules_go//proto/wkt:duration_go_proto", - "@io_bazel_rules_go//proto/wkt:empty_go_proto", - "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@io_bazel_rules_go//proto/wkt:source_context_go_proto", - "@io_bazel_rules_go//proto/wkt:struct_go_proto", - "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", - "@io_bazel_rules_go//proto/wkt:type_go_proto", - "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", + deps = PROTO_RUNTIME_DEPS + [ "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//status:go_default_library", diff --git a/WORKSPACE b/WORKSPACE index f6742925ea4..66bf5e9060d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -2,6 +2,14 @@ workspace(name = "grpc_ecosystem_grpc_gateway") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +# Define before rules_proto, otherwise we receive the version of com_google_protobuf from there +http_archive( + name = "com_google_protobuf", + sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", + strip_prefix = "protobuf-3.14.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz"], +) + http_archive( name = "bazel_skylib", sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c", @@ -33,19 +41,19 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "d1ffd055969c8f8d431e2d439813e42326961d0942bdf734d2c95dc30c369566", + sha256 = "7904dbecbaffd068651916dce77ff3437679f9d20e1a7956bff43826e7645fcc", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.24.5/rules_go-v0.24.5.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.24.5/rules_go-v0.24.5.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", ], ) http_archive( name = "bazel_gazelle", - sha256 = "b85f48fa105c4403326e9525ad2b2cc437babaa6e15a3fc0b1dbab0ab064bc7c", + sha256 = "222e49f034ca7a1d1231422cdb67066b885819885c356673cb1f72f748a3c9d4", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.2/bazel-gazelle-v0.22.2.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.2/bazel-gazelle-v0.22.2.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz", ], ) @@ -53,7 +61,7 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe go_rules_dependencies() -go_register_toolchains() +go_register_toolchains(version = "1.15.5") load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") @@ -66,15 +74,6 @@ load("//:repositories.bzl", "go_repositories") go_repositories() -load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") - -git_repository( - name = "com_google_protobuf", - commit = "09745575a923640154bcf307fba8aedff47f240a", - remote = "https://github.com/protocolbuffers/protobuf", - shallow_since = "1558721209 -0700", -) - load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() From bce65a94915545f43eda3dac578cb58e96114b0f Mon Sep 17 00:00:00 2001 From: Andrew Bridges <6173988+nwandabridges@users.noreply.github.com> Date: Tue, 16 Feb 2021 12:54:22 -0700 Subject: [PATCH 0823/1518] adding UnimplementedGreeterServer to server struct (#1973) The compiler produces an error without this. The error is: ``` cannot use &server literal (type *server) as type helloworld.GreeterServer in argument to helloworld.RegisterGreeterServer: *server does not implement helloworld.GreeterServer (missing helloworld.mustEmbedUnimplementedGreeterServer method) ``` --- docs/docs/tutorials/adding_annotations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index bce9c86791c..dc5d6956881 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -117,7 +117,9 @@ import ( helloworldpb "github.com/myuser/myrepo/proto/helloworld" ) -type server struct{} +type server struct{ + helloworldpb.UnimplementedGreeterServer +} func NewServer() *server { return &server{} From 13ed163226df36f1b7bdb43dbf7a7f09a0b2fca2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 16 Feb 2021 20:26:43 +0000 Subject: [PATCH 0824/1518] chore(deps): update golang.org/x/oauth2 commit hash to 16ff188 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7c770511e48..01493edcc9a 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd + golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 6bcd421fa2b..829a50f7e2b 100644 --- a/go.sum +++ b/go.sum @@ -207,8 +207,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd h1:2arJsLyTCJGek+eeptQ3z49Rqndm0f+zvvpwNIXWNIA= -golang.org/x/oauth2 v0.0.0-20210210192628-66670185b0cd/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e h1:xxTKAjlluPXFVQnUNoBO7OvmNNE/RpmyUeLVFSYiQQ0= +golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 580427324ed..e42a4f9abbe 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -428,8 +428,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:2arJsLyTCJGek+eeptQ3z49Rqndm0f+zvvpwNIXWNIA=", - version = "v0.0.0-20210210192628-66670185b0cd", + sum = "h1:xxTKAjlluPXFVQnUNoBO7OvmNNE/RpmyUeLVFSYiQQ0=", + version = "v0.0.0-20210216194517-16ff1888fd2e", ) go_repository( name = "org_golang_x_sync", From 6ef52a1a5bb2b80867c6b069363741d22ccdbe87 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 17 Feb 2021 03:09:14 +0000 Subject: [PATCH 0825/1518] chore(deps): update golang docker tag to v1.16.0 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index e425f65e88c..98813bf1880 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.15.8 +FROM golang:1.16.0 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From cc01a282127b54a81f92d6b8e8fb8971dab8be9b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 17 Feb 2021 22:11:35 +0000 Subject: [PATCH 0826/1518] chore(deps): update google.golang.org/genproto commit hash to c185827 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 01493edcc9a..1dedf8c7822 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e - google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d + google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 829a50f7e2b..413f6fb5397 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d h1:Edhcm0CKDPLQIecHCp5Iz57Lo7MfT6zUFBAlocmOjcY= -google.golang.org/genproto v0.0.0-20210212180131-e7f2df4ecc2d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 h1:pkt4FLyKaqUuYonDpjdYNhcyWRKxn9Fs8cttR9ldTHA= +google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e42a4f9abbe..fc8fd275d8c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -359,8 +359,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Edhcm0CKDPLQIecHCp5Iz57Lo7MfT6zUFBAlocmOjcY=", - version = "v0.0.0-20210212180131-e7f2df4ecc2d", + sum = "h1:pkt4FLyKaqUuYonDpjdYNhcyWRKxn9Fs8cttR9ldTHA=", + version = "v0.0.0-20210217220511-c18582744cc2", ) go_repository( name = "org_golang_google_grpc", From d66fee7c768506471e92563582c5d8778136ccf8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 18 Feb 2021 09:04:49 +0000 Subject: [PATCH 0827/1518] Migrate generation, linting to buf (#1971) * Migrate to buf Migrate to buf for generation, linting and breaking change detection. Removes much of the complicated Makefile logic and the need for protoc in favour of buf generate. * Regenerate files with buf * Remove local googleapis copy This is no longer needed since we can depend on googleapis from the BSR * Update README to be in line with local practices * Update the docs for BSR availability * Exclude bazel directory The generated, hidden bazel directory will mess up buf's generation if it exists, so we ignore it. --- .circleci/Dockerfile | 7 - .circleci/config.yml | 26 +- BUILD | 1 - CONTRIBUTING.md | 10 +- Makefile | 221 +-- README.md | 255 +++- buf.gen.yaml | 20 + buf.lock | 9 + buf.yaml | 169 +++ .../development/installation_for_cygwin.md | 6 +- docs/docs/tutorials/adding_annotations.md | 39 +- .../tutorials/generating_stubs/using_buf.md | 1 + .../internal/clients/abe/api/swagger.yaml | 39 +- .../internal/clients/abe/model_rpc_status.go | 2 +- .../internal/clients/echo/api/swagger.yaml | 39 +- .../internal/clients/echo/model_rpc_status.go | 2 +- .../clients/responsebody/api/swagger.yaml | 39 +- .../clients/responsebody/model_rpc_status.go | 2 +- .../clients/unannotatedecho/api/swagger.yaml | 112 -- .../api_unannotated_echo_service.go | 44 - .../unannotatedecho/model_protobuf_any.go | 3 - .../unannotatedecho/model_rpc_status.go | 4 - examples/internal/helloworld/helloworld.pb.go | 9 +- .../helloworld/helloworld.swagger.json | 970 +++++++++++++ examples/internal/proto/examplepb/BUILD.bazel | 21 + .../proto/examplepb/a_bit_of_everything.pb.go | 1223 ++++++++--------- .../a_bit_of_everything.swagger.json | 3 +- .../proto/examplepb/echo_service.pb.go | 9 +- .../proto/examplepb/echo_service.swagger.json | 3 +- .../proto/examplepb/flow_combination.pb.go | 9 +- .../examplepb/flow_combination.swagger.json | 963 +++++++++++++ .../generate_unbound_methods.buf.gen.yaml | 11 + .../examplepb/generate_unbound_methods.pb.go | 9 +- .../examplepb/generated_input.swagger.json | 347 +++++ .../proto/examplepb/non_standard_names.pb.go | 9 +- .../examplepb/non_standard_names.swagger.json | 237 ++++ .../examplepb/openapi_merge.buf.gen.yaml | 7 + .../proto/examplepb/openapi_merge_a.pb.go | 335 +++++ .../proto/examplepb/openapi_merge_a.pb.gw.go | 464 +++++++ .../examplepb/openapi_merge_a.swagger.json | 232 ++++ .../examplepb/openapi_merge_a_grpc.pb.go | 272 ++++ .../proto/examplepb/openapi_merge_b.pb.go | 247 ++++ .../proto/examplepb/openapi_merge_b.pb.gw.go | 248 ++++ .../examplepb/openapi_merge_b.swagger.json | 151 ++ .../examplepb/openapi_merge_b_grpc.pb.go | 143 ++ .../examplepb/response_body_service.pb.go | 9 +- .../response_body_service.swagger.json | 3 +- .../standalone_echo_service.buf.gen.yaml | 8 + .../internal/proto/examplepb/stream.pb.go | 9 +- .../proto/examplepb/stream.swagger.json | 3 +- .../unannotated_echo_service.buf.gen.yaml | 12 + .../examplepb/unannotated_echo_service.pb.go | 9 +- .../unannotated_echo_service.swagger.json | 55 +- .../unannotated_echo_service.swagger.yaml | 59 +- .../examplepb/use_go_template.buf.gen.yaml | 6 + .../proto/examplepb/use_go_template.pb.go | 9 +- .../examplepb/use_go_template.swagger.json | 22 +- .../internal/proto/examplepb/wrappers.pb.go | 9 +- .../proto/examplepb/wrappers.swagger.json | 3 +- .../internal/proto/pathenum/path_enum.pb.go | 9 +- .../proto/pathenum/path_enum.swagger.json | 46 + examples/internal/proto/sub/message.pb.go | 9 +- .../internal/proto/sub/message.swagger.json | 46 + examples/internal/proto/sub2/message.pb.go | 9 +- .../internal/proto/sub2/message.swagger.json | 46 + go.mod | 4 +- go.sum | 216 ++- internal/codegenerator/parse_req_test.go | 19 +- internal/descriptor/apiconfig/apiconfig.pb.go | 9 +- .../apiconfig/apiconfig.swagger.json | 46 + .../openapiconfig/openapiconfig.pb.go | 9 +- .../openapiconfig/openapiconfig.swagger.json | 46 + protoc-gen-openapiv2/main_test.go | 8 +- .../options/annotations.pb.go | 9 +- .../options/annotations.swagger.json | 46 + protoc-gen-openapiv2/options/openapiv2.pb.go | 9 +- .../options/openapiv2.swagger.json | 46 + repositories.bzl | 757 +++++++++- runtime/internal/examplepb/example.pb.go | 9 +- .../internal/examplepb/example.swagger.json | 46 + runtime/internal/examplepb/example_grpc.pb.go | 86 -- .../examplepb/non_standard_names.pb.go | 9 +- .../examplepb/non_standard_names.swagger.json | 250 ++++ runtime/internal/examplepb/proto2.pb.go | 9 +- .../internal/examplepb/proto2.swagger.json | 46 + runtime/internal/examplepb/proto3.pb.go | 9 +- .../internal/examplepb/proto3.swagger.json | 46 + third_party/googleapis/LICENSE | 201 --- third_party/googleapis/README.grpc-gateway | 24 - .../googleapis/google/api/annotations.proto | 31 - .../google/api/field_behavior.proto | 78 -- third_party/googleapis/google/api/http.proto | 375 ----- .../googleapis/google/api/httpbody.proto | 77 -- third_party/googleapis/google/rpc/code.proto | 186 --- .../googleapis/google/rpc/error_details.proto | 200 --- .../googleapis/google/rpc/status.proto | 92 -- tools.go | 2 + 97 files changed, 7561 insertions(+), 2792 deletions(-) create mode 100644 buf.gen.yaml create mode 100644 buf.lock create mode 100644 buf.yaml create mode 100644 examples/internal/helloworld/helloworld.swagger.json create mode 100644 examples/internal/proto/examplepb/flow_combination.swagger.json create mode 100644 examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/generated_input.swagger.json create mode 100644 examples/internal/proto/examplepb/non_standard_names.swagger.json create mode 100644 examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/openapi_merge_a.pb.go create mode 100644 examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go create mode 100644 examples/internal/proto/examplepb/openapi_merge_a.swagger.json create mode 100644 examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go create mode 100644 examples/internal/proto/examplepb/openapi_merge_b.pb.go create mode 100644 examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go create mode 100644 examples/internal/proto/examplepb/openapi_merge_b.swagger.json create mode 100644 examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go create mode 100644 examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/use_go_template.buf.gen.yaml create mode 100644 examples/internal/proto/pathenum/path_enum.swagger.json create mode 100644 examples/internal/proto/sub/message.swagger.json create mode 100644 examples/internal/proto/sub2/message.swagger.json create mode 100644 internal/descriptor/apiconfig/apiconfig.swagger.json create mode 100644 internal/descriptor/openapiconfig/openapiconfig.swagger.json create mode 100644 protoc-gen-openapiv2/options/annotations.swagger.json create mode 100644 protoc-gen-openapiv2/options/openapiv2.swagger.json create mode 100644 runtime/internal/examplepb/example.swagger.json delete mode 100644 runtime/internal/examplepb/example_grpc.pb.go create mode 100644 runtime/internal/examplepb/non_standard_names.swagger.json create mode 100644 runtime/internal/examplepb/proto2.swagger.json create mode 100644 runtime/internal/examplepb/proto3.swagger.json delete mode 100644 third_party/googleapis/LICENSE delete mode 100644 third_party/googleapis/README.grpc-gateway delete mode 100644 third_party/googleapis/google/api/annotations.proto delete mode 100644 third_party/googleapis/google/api/field_behavior.proto delete mode 100644 third_party/googleapis/google/api/http.proto delete mode 100644 third_party/googleapis/google/api/httpbody.proto delete mode 100644 third_party/googleapis/google/rpc/code.proto delete mode 100644 third_party/googleapis/google/rpc/error_details.proto delete mode 100644 third_party/googleapis/google/rpc/status.proto diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 98813bf1880..dde48795f22 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -18,13 +18,6 @@ RUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ chmod +x /usr/local/bin/swagger-codegen -# Install protoc -ENV PROTOC_VERSION=3.12.0 -RUN wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ - -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ - unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ - rm -f /protoc-${PROTOC_VERSION}-linux-x86_64.zip - # Install node, used by NVM ENV NODE_VERSION=v10.16.3 ENV NVM_VERSION=v0.35.0 diff --git a/.circleci/config.yml b/.circleci/config.yml index 045553bbf44..a65338ee237 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,9 +16,9 @@ commands: EOF generate: steps: - - run: make realclean - - run: make examples - - run: make testproto + - run: make install + - run: make clean + - run: make generate - run: go mod tidy renovate_git_amend_push: description: Git amend and push changes @@ -123,6 +123,21 @@ jobs: go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - run: gorelease -base=v2.0.0 + proto_lint: + docker: + - image: bufbuild/buf:0.37.0 + steps: + - checkout + - run: buf build + - run: buf lint + - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' + proto_push: + docker: + - image: bufbuild/buf:0.37.0 + steps: + - checkout + - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc + - run: buf beta push release: executor: build-env working_directory: /src/grpc-gateway @@ -162,6 +177,11 @@ workflows: - generate - bazel - gorelease + - proto_lint + - proto_push: + filters: + branches: + only: /^master$/ - release: filters: branches: diff --git a/BUILD b/BUILD index 3c8da9c9c0f..bfcd639e9a5 100644 --- a/BUILD +++ b/BUILD @@ -12,7 +12,6 @@ buildifier( mode = "check", ) -# gazelle:exclude third_party # gazelle:exclude _output # gazelle:prefix github.com/grpc-ecosystem/grpc-gateway/v2 # gazelle:go_proto_compilers //:go_apiv2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9dafe73fd13..092c71f8abc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,11 +29,11 @@ It should be as simple as this (run from the root of the repository): ```bash docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.15 \ /bin/bash -c 'cd /src/grpc-gateway && \ - make realclean && \ - make examples && \ - make testproto' + make install && \ + make clean && \ + make generate' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c '\ + l.gcr.io/google/bazel:3.5.0 -c '\ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \ bazel run :gazelle && \ bazel run :buildifier' @@ -49,7 +49,7 @@ This repo contains a `devcontainer.json` configuration that sets up the build en you can run the commands directly in your terminal: ```sh -$ make realclean && make examples && make testproto +$ make install && make clean && make generate ``` ```sh diff --git a/Makefile b/Makefile index 9c30d517976..177dde470ea 100644 --- a/Makefile +++ b/Makefile @@ -3,105 +3,6 @@ # You don't have to rebuild these targets by yourself unless you develop # gRPC-Gateway itself. -GO_PLUGIN=bin/protoc-gen-go -GO_PLUGIN_PKG=google.golang.org/protobuf/cmd/protoc-gen-go -GO_GRPC_PLUGIN=bin/protoc-gen-go-grpc -GO_GRPC_PLUGIN_PKG=google.golang.org/grpc/cmd/protoc-gen-go-grpc -OPENAPI_PLUGIN=bin/protoc-gen-openapiv2 -OPENAPI_PLUGIN_SRC= ./utilities/doc.go \ - ./utilities/pattern.go \ - ./utilities/trie.go \ - protoc-gen-openapiv2/internal/genopenapi/generator.go \ - protoc-gen-openapiv2/internal/genopenapi/template.go \ - protoc-gen-openapiv2/main.go -OPENAPI_PLUGIN_PKG=./protoc-gen-openapiv2 -GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway -GATEWAY_PLUGIN_PKG=./protoc-gen-grpc-gateway -GATEWAY_PLUGIN_SRC= ./utilities/doc.go \ - ./utilities/pattern.go \ - ./utilities/trie.go \ - ./internal/descriptor \ - ./internal/descriptor/registry.go \ - ./internal/descriptor/services.go \ - ./internal/descriptor/types.go \ - ./internal/descriptor/grpc_api_configuration.go \ - ./internal/generator \ - ./internal/generator/generator.go \ - protoc-gen-grpc-gateway \ - protoc-gen-grpc-gateway/internal/gengateway \ - protoc-gen-grpc-gateway/internal/gengateway/doc.go \ - protoc-gen-grpc-gateway/internal/gengateway/generator.go \ - protoc-gen-grpc-gateway/internal/gengateway/template.go \ - internal/httprule \ - internal/httprule/compile.go \ - internal/httprule/parse.go \ - internal/httprule/types.go \ - protoc-gen-grpc-gateway/main.go -GATEWAY_PLUGIN_FLAGS?= -OPENAPI_PLUGIN_FLAGS?= - -GOOGLEAPIS_DIR=third_party/googleapis - -OPENAPIV2_PROTO=protoc-gen-openapiv2/options/openapiv2.proto protoc-gen-openapiv2/options/annotations.proto -OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) - -ADDITIONAL_GW_FLAGS= -ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" - ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) -endif -ADDITIONAL_SWG_FLAGS= -ifneq "$(OPENAPI_PLUGIN_FLAGS)" "" - ADDITIONAL_SWG_FLAGS=,$(OPENAPI_PLUGIN_FLAGS) -endif -OPENAPI_EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ - examples/internal/proto/examplepb/a_bit_of_everything.proto \ - examples/internal/proto/examplepb/wrappers.proto \ - examples/internal/proto/examplepb/stream.proto \ - examples/internal/proto/examplepb/unannotated_echo_service.proto \ - examples/internal/proto/examplepb/use_go_template.proto \ - examples/internal/proto/examplepb/response_body_service.proto -OPENAPIMERGE_EXAMPLES=examples/internal/proto/examplepb/openapi_merge_a.proto \ - examples/internal/proto/examplepb/openapi_merge_b.proto - -EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ - examples/internal/proto/examplepb/a_bit_of_everything.proto \ - examples/internal/proto/examplepb/stream.proto \ - examples/internal/proto/examplepb/flow_combination.proto \ - examples/internal/proto/examplepb/non_standard_names.proto \ - examples/internal/proto/examplepb/wrappers.proto \ - examples/internal/proto/examplepb/unannotated_echo_service.proto \ - examples/internal/proto/examplepb/use_go_template.proto \ - examples/internal/proto/examplepb/response_body_service.proto - -STANDALONE_EXAMPLES=examples/internal/proto/examplepb/unannotated_echo_service.proto -GENERATE_UNBOUND_METHODS_EXAMPLE=examples/internal/proto/examplepb/generate_unbound_methods.proto - -HELLOWORLD=examples/internal/helloworld/helloworld.proto - -EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) -EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) -EXAMPLE_OPENAPISRCS=$(OPENAPI_EXAMPLES:.proto=.swagger.json) -EXAMPLE_OPENAPIMERGESRCS=examples/internal/proto/examplepb/openapi_merge.swagger.json -EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/proto/sub/message.proto examples/internal/proto/sub2/message.proto -EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) - -GENERATE_UNBOUND_METHODS_EXAMPLE_OPENAPISRCS=$(GENERATE_UNBOUND_METHODS_EXAMPLE:.proto=.swagger.json) -GENERATE_UNBOUND_METHODS_EXAMPLE_SVCSRCS=$(GENERATE_UNBOUND_METHODS_EXAMPLE:.proto=.pb.go) -GENERATE_UNBOUND_METHODS_EXAMPLE_GWSRCS=$(GENERATE_UNBOUND_METHODS_EXAMPLE:.proto=.pb.gw.go) - -HELLOWORLD_SVCSRCS=$(HELLOWORLD:.proto=.pb.go) -HELLOWORLD_GWSRCS=$(HELLOWORLD:.proto=.pb.gw.go) - -RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto \ - runtime/internal/examplepb/proto2.proto \ - runtime/internal/examplepb/proto3.proto \ - runtime/internal/examplepb/non_standard_names.proto -RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) - -APICONFIG_PROTO=internal/descriptor/apiconfig/apiconfig.proto \ - internal/descriptor/openapiconfig/openapiconfig.proto -APICONFIG_SRCS=$(APICONFIG_PROTO:.proto=.pb.go) - EXAMPLE_CLIENT_DIR=examples/internal/clients ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \ @@ -154,65 +55,6 @@ GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/generateunboundmetho EXAMPLE_CLIENT_SRCS=$(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS) SWAGGER_CODEGEN=swagger-codegen -PROTOC_INC_PATH=$(dir $(shell which protoc))/../include - -.SUFFIXES: .go .proto - -$(GO_PLUGIN): - go build -o $(GO_PLUGIN) $(GO_PLUGIN_PKG) - -$(GO_GRPC_PLUGIN): - go build -o $(GO_GRPC_PLUGIN) $(GO_GRPC_PLUGIN_PKG) - -$(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=paths=source_relative:. $(OPENAPIV2_PROTO) - -$(GATEWAY_PLUGIN): $(GATEWAY_PLUGIN_SRC) $(OPENAPIV2_GO) - go build -o $@ $(GATEWAY_PLUGIN_PKG) - -$(OPENAPI_PLUGIN): $(OPENAPI_PLUGIN_SRC) $(OPENAPIV2_GO) - go build -o $@ $(OPENAPI_PLUGIN_PKG) - -$(EXAMPLE_SVCSRCS): $(GO_PLUGIN) $(GO_GRPC_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --plugin=$(GO_GRPC_PLUGIN) --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative,require_unimplemented_servers=false:. $(EXAMPLES) -$(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(GO_GRPC_PLUGIN) $(EXAMPLE_DEPS) - protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --plugin=$(GO_GRPC_PLUGIN) --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative,require_unimplemented_servers=false:. $(@:.pb.go=.proto) - -$(RUNTIME_TEST_SRCS): $(GO_PLUGIN) $(GO_GRPC_PLUGIN) $(RUNTIME_TEST_PROTO) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --plugin=$(GO_GRPC_PLUGIN) --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative,require_unimplemented_servers=false:. $(RUNTIME_TEST_PROTO) - -$(APICONFIG_SRCS): $(GO_PLUGIN) $(APICONFIG_PROTO) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=paths=source_relative:. $(APICONFIG_PROTO) - -$(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml -$(EXAMPLE_GWSRCS): ADDITIONAL_SA_FLAGS:=,standalone=true,grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml -$(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_SA_FLAGS):. $(STANDALONE_EXAMPLES) - mv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/ - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) - - -$(EXAMPLE_OPENAPISRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml,openapi_configuration=examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml -$(EXAMPLE_OPENAPISRCS): $(OPENAPI_PLUGIN) $(OPENAPI_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(OPENAPI_PLUGIN) --openapiv2_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true$(ADDITIONAL_SWG_FLAGS):. $(OPENAPI_EXAMPLES) - -$(EXAMPLE_OPENAPIMERGESRCS): $(OPENAPI_PLUGIN) $(OPENAPIMERGE_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(OPENAPI_PLUGIN) --openapiv2_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,allow_merge=true,merge_file_name=$(EXAMPLE_OPENAPIMERGESRCS:.swagger.json=):. $(OPENAPIMERGE_EXAMPLES) - -$(GENERATE_UNBOUND_METHODS_EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(GENERATE_UNBOUND_METHODS_EXAMPLE) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,paths=source_relative,allow_repeated_fields_in_body=true,generate_unbound_methods=true$(ADDITIONAL_GW_FLAGS):. $(GENERATE_UNBOUND_METHODS_EXAMPLE) -$(GENERATE_UNBOUND_METHODS_EXAMPLE_SVCSRCS): $(GO_PLUGIN) $(GENERATE_UNBOUND_METHODS_EXAMPLE) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --plugin=$(GO_GRPC_PLUGIN) --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative,require_unimplemented_servers=false:. $(GENERATE_UNBOUND_METHODS_EXAMPLE) -$(GENERATE_UNBOUND_METHODS_EXAMPLE_OPENAPISRCS): $(OPENAPI_PLUGIN) $(GENERATE_UNBOUND_METHODS_EXAMPLE) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(OPENAPI_PLUGIN) --openapiv2_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,generate_unbound_methods=true:. $(GENERATE_UNBOUND_METHODS_EXAMPLE) - -$(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(GO_GRPC_PLUGIN) $(HELLOWORLD) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --plugin=$(GO_GRPC_PLUGIN) --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative,require_unimplemented_servers=false:. $(HELLOWORLD) - -$(HELLOWORLD_GWSRCS): -$(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) - $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ -l go -o examples/internal/clients/echo --additional-properties packageName=echo @@ -239,11 +81,49 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE @rm -f $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/README.md \ $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh -examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_OPENAPISRCS) $(EXAMPLE_OPENAPIMERGESRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_GWSRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SVCSRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_OPENAPISRCS) -testproto: $(RUNTIME_TEST_SRCS) $(APICONFIG_SRCS) -test: examples testproto +install: + go install \ + google.golang.org/grpc/cmd/protoc-gen-go-grpc \ + google.golang.org/protobuf/cmd/protoc-gen-go \ + github.com/bufbuild/buf/cmd/buf \ + ./protoc-gen-openapiv2 \ + ./protoc-gen-grpc-gateway + +proto: + # These generation steps are run in order so that later steps can + # overwrite files produced by previous steps, if necessary. + buf generate + # Remove generated gateway in runtime tests, causes import cycle + rm ./runtime/internal/examplepb/non_standard_names.pb.gw.go + # Remove generated_input.proto files, bazel genrule relies on these + # *not* being generated (to avoid conflicts). + rm ./examples/internal/proto/examplepb/generated_input.pb.go + rm ./examples/internal/proto/examplepb/generated_input_grpc.pb.go + rm ./examples/internal/proto/examplepb/generated_input.pb.gw.go + buf generate \ + --template ./examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml \ + --path ./examples/internal/proto/examplepb/openapi_merge_a.proto \ + --path ./examples/internal/proto/examplepb/openapi_merge_b.proto + buf generate \ + --template ./examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/unannotated_echo_service.proto + mv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/ + buf generate \ + --template ./examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/unannotated_echo_service.proto + buf generate \ + --template ./examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml \ + --path examples/internal/proto/examplepb/generate_unbound_methods.proto + buf generate \ + --template ./examples/internal/proto/examplepb/use_go_template.buf.gen.yaml \ + --path examples/internal/proto/examplepb/use_go_template.proto + +generate: proto $(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS) + +test: proto go test -short -race ./... go test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock + changelog: docker run --rm \ --interactive \ @@ -261,20 +141,9 @@ changelog: --future-release=v2.2.0 clean: - rm -f $(GATEWAY_PLUGIN) $(OPENAPI_PLUGIN) -distclean: clean - rm -f $(GO_PLUGIN) -realclean: distclean - rm -f $(EXAMPLE_SVCSRCS) $(EXAMPLE_DEPSRCS) - rm -f $(EXAMPLE_GWSRCS) - rm -f $(EXAMPLE_OPENAPISRCS) + find . -type f -name '*.pb.go' -delete + find . -type f -name '*.swagger.json' -delete + find . -type f -name '*.pb.gw.go' -delete rm -f $(EXAMPLE_CLIENT_SRCS) - rm -f $(GENERATE_UNBOUND_METHODS_EXAMPLE_GWSRCS) - rm -f $(GENERATE_UNBOUND_METHODS_EXAMPLE_SVCSRCS) - rm -f $(GENERATE_UNBOUND_METHODS_EXAMPLE_OPENAPISRCS) - rm -f $(HELLOWORLD_SVCSRCS) - rm -f $(HELLOWORLD_GWSRCS) - rm -f $(OPENAPIV2_GO) - rm -f $(RUNTIME_TEST_SRCS) -.PHONY: generate examples test lint clean distclean realclean +.PHONY: generate test clean proto install diff --git a/README.md b/README.md index 7917849f132..8ed4f63bdb8 100644 --- a/README.md +++ b/README.md @@ -56,12 +56,6 @@ that's needed to generate a reverse-proxy with this library. ## Installation -The gRPC-Gateway requires a local installation of the Google protocol buffers -compiler `protoc` v3.0.0 or above. Please install this via your local package -manager or by downloading one of the releases from the official repository: - -https://github.com/protocolbuffers/protobuf/releases - The following instructions assume you are using [Go Modules](https://github.com/golang/go/wiki/Modules) for dependency management. Use a @@ -110,6 +104,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. syntax = "proto3"; package your.service.v1; option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + message StringMessage { string value = 1; } @@ -123,29 +118,39 @@ Make sure that your `$GOBIN` is in your `$PATH`. This step generates the gRPC stubs that you can use to implement the service and consume from clients: - Here's an example of what a `protoc` command might look like to generate Go stubs: - - ```sh - protoc -I . \ - --go_out ./gen/go/ --go_opt paths=source_relative \ - --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \ - your/service/v1/your_service.proto + Here's an example `buf.gen.yaml` you can use to generate the stubs with [buf](https://github.com/bufbuild/buf): + + ```yaml + version: v1beta1 + plugins: + - name: go + out: gen/go + opt: + - paths=source_relative + - name: go-grpc + out: gen/go + opt: + - paths=source_relative ``` -3. Implement your service in gRPC as usual + With this file in place, you can generate your files using `buf generate`. - 1. (Optional) Generate gRPC stub in the [other programming languages](https://grpc.io/docs/). + > For a complete example of using `buf generate` to generate protobuf stubs, see + > [the boilerplate repo](https://github.com/johanbrandhorst/grpc-gateway-boilerplate). + > For more information on generating the stubs with buf, see + > [the official documentation](https://docs.buf.build/generate-usage). - For example, the following generates gRPC code for Ruby based on `your/service/v1/your_service.proto`: + If you are using `protoc` to generate stubs, here's an example of what a command + might look like: ```sh - protoc -I . --ruby_out ./gen/ruby your/service/v1/your_service.proto - - protoc -I . --grpc-ruby_out ./gen/ruby your/service/v1/your_service.proto + protoc -I . \ + --go_out ./gen/go/ --go_opt paths=source_relative \ + --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \ + your/service/v1/your_service.proto ``` - 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. - 3. Implement your gRPC service stubs +3. Implement your service in gRPC as usual. 4. Generate reverse-proxy using `protoc-gen-grpc-gateway` @@ -164,14 +169,34 @@ Make sure that your `$GOBIN` is in your `$PATH`. This requires no additional modification to the `.proto` file but does require enabling a specific option when executing the plugin. The `generate_unbound_methods` should be enabled. - Here's what a `protoc` execution might look like with this option enabled: + Here's what a `buf.gen.yaml` file might look like with this option enabled: + + ```yaml + version: v1beta1 + plugins: + - name: go + out: gen/go + opt: + - paths=source_relative + - name: go-grpc + out: gen/go + opt: + - paths=source_relative + - name: grpc-gateway + out: gen/go + opt: + - paths=source_relative + - generate_unbound_methods=true + ``` + + With `protoc` (just the grpc-gateway stubs): ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - --grpc-gateway_opt generate_unbound_methods=true \ - your/service/v1/your_service.proto + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt generate_unbound_methods=true \ + your/service/v1/your_service.proto ``` 2. With custom annotations @@ -203,23 +228,61 @@ Make sure that your `$GOBIN` is in your `$PATH`. } ``` - > You will need to provide the required third party protobuf files to the `protoc` compiler. - > They are included in this repo under the `third_party/googleapis` folder, and we recommend copying - > them into your `protoc` generation file structure. If you've structured your proto files according - > to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), - > you could copy the files into a top-level `./google` folder. + > You will need to provide the required third party protobuf files to the protobuf compiler. + > If you are using [buf](https://github.com/buf/bufbuild), this dependency can + > be added to the `deps` array in your `buf.yaml` under the name + > `buf.build/beta/googleapis`: + > ```yaml + > version: v1beta1 + > name: buf.build/yourorg/myprotos + > deps: + > - buf.build/beta/googleapis + > ``` + > Always run `buf beta mod update` after adding a dependency to your `buf.yaml`. See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated OpenAPI output. + Here's what a `buf.gen.yaml` file might look like: + + ```yaml + version: v1beta1 + plugins: + - name: go + out: gen/go + opt: + - paths=source_relative + - name: go-grpc + out: gen/go + opt: + - paths=source_relative + - name: grpc-gateway + out: gen/go + opt: + - paths=source_relative + ``` + + If you are using `protoc` to generate stubs, you need to ensure the required + dependencies are available to the compiler at compile time. These can be found + by manually cloning and copying the relevant files from the + [googleapis repository](https://github.com/googleapis/googleapis), and providing + them to `protoc` when running. The files you will need are: + + ``` + google/api/annotations.proto + google/api/field_behaviour.proto + google/api/http.proto + google/api/httbody.proto + ``` + Here's what a `protoc` execution might look like: ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - your/service/v1/your_service.proto + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + your/service/v1/your_service.proto ``` 3. External configuration @@ -227,16 +290,40 @@ Make sure that your `$GOBIN` is in your `$PATH`. alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/grpc_api_configuration/) - for more information. + for more information. This is best combined with the `standalone=true` option + to generate a file that can live in its own package, separate from the files + generated by the source protobuf file. + + Here's what a `buf.gen.yaml` file might look like with this option enabled: + + ```yaml + version: v1beta1 + plugins: + - name: go + out: gen/go + opt: + - paths=source_relative + - name: go-grpc + out: gen/go + opt: + - paths=source_relative + - name: grpc-gateway + out: gen/go + opt: + - paths=source_relative + - grpc_api_configuration=path/to/config.yaml + - standalone=true + ``` - Here's what a `protoc` execution might look like with this option enabled: + With `protoc` (just the grpc-gateway stubs): ```sh - protoc -I . --grpc-gateway_out ./gen/go \ - --grpc-gateway_opt logtostderr=true \ - --grpc-gateway_opt paths=source_relative \ - --grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \ - your/service/v1/your_service.proto + protoc -I . --grpc-gateway_out ./gen/go \ + --grpc-gateway_opt logtostderr=true \ + --grpc-gateway_opt paths=source_relative \ + --grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \ + --grpc-gateway_opt standalone=true \ + your/service/v1/your_service.proto ``` 5. Write an entrypoint for the HTTP reverse-proxy server @@ -292,11 +379,53 @@ Make sure that your `$GOBIN` is in your `$PATH`. 6. (Optional) Generate OpenAPI definitions using `protoc-gen-openapiv2` + Here's what a `buf.gen.yaml` file might look like: + + ```yaml + version: v1beta1 + plugins: + - name: go + out: gen/go + opt: + - paths=source_relative + - name: go-grpc + out: gen/go + opt: + - paths=source_relative + - name: grpc-gateway + out: gen/go + opt: + - paths=source_relative + - name: openapiv2 + out: gen/openapiv2 + ``` + + To use the custom protobuf annotations supported by `protoc-gen-openapiv2`, we need + another dependency added to our protobuf generation step. If you are using + `buf`, you can add the `buf.build/grpc-ecosystem/grpc-gateway` dependency + to your `deps` array: + ```yaml + version: v1beta1 + name: buf.build/yourorg/myprotos + deps: + - buf.build/beta/googleapis + - buf.build/grpc-ecosystem/grpc-gateway + ``` + + With `protoc` (just the swagger file): + ```sh - protoc -I . --openapiv2_out ./gen/openapiv2 --openapiv2_opt logtostderr=true your/service/v1/your_service.proto + protoc -I . --openapiv2_out ./gen/openapiv2 \ + --openapiv2_opt logtostderr=true \ + your/service/v1/your_service.proto ``` - Note that this plugin also supports generating OpenAPI definitions for unannotated methods; use the `generate_unbound_methods` option to enable this. + If you are using `protoc` to generate stubs, you will need to copy the protobuf + files from the `protoc-gen-openapiv2/options` directory of this repository, + and providing them to `protoc` when running. + + Note that this plugin also supports generating OpenAPI definitions for unannotated methods; + use the `generate_unbound_methods` option to enable this. ## Video intro @@ -310,6 +439,20 @@ This GopherCon UK 2019 presentation from our maintainer [@JohanBrandhorst](https ## Parameters and flags +When using `buf` to generate stubs, flags and parameters are passed through +the `opt` field in your `buf.gen.yaml` file, for example: + +```yaml +version: v1beta1 +plugins: + - name: grpc-gateway + out: gen/go + opt: + - paths=source_relative + - grpc_api_configuration=path/to/config.yaml + - standalone=true +``` + During code generation with `protoc`, flags to gRPC-Gateway tools must be passed through `protoc` using one of 2 patterns: @@ -326,33 +469,11 @@ through `protoc` using one of 2 patterns: --grpc-gateway_opt logtostderr=true,repeated_path_param_separator=ssv # or separately --grpc-gateway_opt logtostderr=true --grpc-gateway_opt repeated_path_param_separator=ssv - --openapiv2_opt logtostderr=true,repeated_path_param_separator=ssv # or separately --openapiv2_opt logtostderr=true --openapiv2_opt repeated_path_param_separator=ssv ``` -`protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to -Golang import paths. They are compatible with -[the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). - -In addition, we also support the `request_context` parameter in order to use the -`http.Request`'s Context (only for Go 1.7 and above). This parameter can be -useful to pass the request-scoped context between the gateway and the gRPC service. - -`protoc-gen-grpc-gateway` also supports some more command line flags to control -logging. You can give these flags together with the parameters above. Run -`protoc-gen-grpc-gateway --help` for more details about the flags. - -Similarly, `protoc-gen-openapiv2` supports command-line flags to control OpenAPI -output (for example, `json_names_for_fields` to output JSON names for fields -instead of protobuf names). Run `protoc-gen-openapiv2 --help` for more flag -details. Further OpenAPI customization is possible by annotating your `.proto` -files with options from -[openapiv2.proto](protoc-gen-openapiv2/options/openapiv2.proto) - see -[a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) -for examples. - ## More examples More examples are available under the `examples` directory. diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 00000000000..008a5e702d7 --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,20 @@ +version: v1beta1 +plugins: + - name: go + out: . + opt: + - paths=source_relative + - name: go-grpc + out: . + opt: + - paths=source_relative + - require_unimplemented_servers=false + - name: grpc-gateway + out: . + opt: + - paths=source_relative + - allow_repeated_fields_in_body=true + - name: openapiv2 + out: . + opt: + - allow_repeated_fields_in_body=true diff --git a/buf.lock b/buf.lock new file mode 100644 index 00000000000..ad040755ff0 --- /dev/null +++ b/buf.lock @@ -0,0 +1,9 @@ +# Generated by buf. DO NOT EDIT. +deps: + - remote: buf.build + owner: beta + repository: googleapis + branch: main + commit: 1dc4674e3cb949b388204fa2dc321be7 + digest: b1-Ta7Phbh_og5qghBtkK8kIVfexZ5MWk0gb3eG0kp3Qx0= + create_time: 2021-02-09T19:58:07.142147Z diff --git a/buf.yaml b/buf.yaml new file mode 100644 index 00000000000..c2a6eb4f1e1 --- /dev/null +++ b/buf.yaml @@ -0,0 +1,169 @@ +version: v1beta1 +name: buf.build/grpc-ecosystem/grpc-gateway +deps: + - buf.build/beta/googleapis +build: + roots: + - . + excludes: + - bazel-grpc-gateway +lint: + use: + - DEFAULT + ignore_only: + DIRECTORY_SAME_PACKAGE: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/use_go_template.proto + - examples/internal/proto/examplepb/wrappers.proto + ENUM_VALUE_PREFIX: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/pathenum/path_enum.proto + - protoc-gen-openapiv2/options/openapiv2.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/proto3.proto + ENUM_ZERO_VALUE_SUFFIX: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/pathenum/path_enum.proto + - protoc-gen-openapiv2/options/openapiv2.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/proto3.proto + FIELD_LOWER_SNAKE_CASE: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/non_standard_names.proto + PACKAGE_DIRECTORY_MATCH: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/use_go_template.proto + - examples/internal/proto/examplepb/wrappers.proto + - examples/internal/proto/pathenum/path_enum.proto + - examples/internal/proto/sub/message.proto + - examples/internal/proto/sub2/message.proto + - internal/descriptor/apiconfig/apiconfig.proto + - internal/descriptor/openapiconfig/openapiconfig.proto + - protoc-gen-openapiv2/options/annotations.proto + - protoc-gen-openapiv2/options/openapiv2.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/non_standard_names.proto + - runtime/internal/examplepb/proto2.proto + - runtime/internal/examplepb/proto3.proto + PACKAGE_SAME_GO_PACKAGE: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/use_go_template.proto + - examples/internal/proto/examplepb/wrappers.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/non_standard_names.proto + - runtime/internal/examplepb/proto2.proto + - runtime/internal/examplepb/proto3.proto + PACKAGE_VERSION_SUFFIX: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/use_go_template.proto + - examples/internal/proto/examplepb/wrappers.proto + - examples/internal/proto/pathenum/path_enum.proto + - examples/internal/proto/sub/message.proto + - examples/internal/proto/sub2/message.proto + - internal/descriptor/apiconfig/apiconfig.proto + - internal/descriptor/openapiconfig/openapiconfig.proto + - protoc-gen-openapiv2/options/annotations.proto + - protoc-gen-openapiv2/options/openapiv2.proto + - runtime/internal/examplepb/example.proto + - runtime/internal/examplepb/non_standard_names.proto + - runtime/internal/examplepb/proto2.proto + - runtime/internal/examplepb/proto3.proto + RPC_REQUEST_RESPONSE_UNIQUE: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/wrappers.proto + RPC_REQUEST_STANDARD_NAME: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/wrappers.proto + - runtime/internal/examplepb/non_standard_names.proto + RPC_RESPONSE_STANDARD_NAME: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/echo_service.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/generate_unbound_methods.proto + - examples/internal/proto/examplepb/generated_input.proto + - examples/internal/proto/examplepb/non_standard_names.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto + - examples/internal/proto/examplepb/response_body_service.proto + - examples/internal/proto/examplepb/stream.proto + - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/use_go_template.proto + - examples/internal/proto/examplepb/wrappers.proto + - runtime/internal/examplepb/non_standard_names.proto + SERVICE_PASCAL_CASE: + - examples/internal/proto/examplepb/a_bit_of_everything.proto + SERVICE_SUFFIX: + - examples/internal/helloworld/helloworld.proto + - examples/internal/proto/examplepb/a_bit_of_everything.proto + - examples/internal/proto/examplepb/flow_combination.proto + - examples/internal/proto/examplepb/openapi_merge_a.proto + - examples/internal/proto/examplepb/openapi_merge_b.proto +breaking: + use: + - FILE diff --git a/docs/docs/development/installation_for_cygwin.md b/docs/docs/development/installation_for_cygwin.md index 12fece03d98..2ed9ed8aefa 100644 --- a/docs/docs/development/installation_for_cygwin.md +++ b/docs/docs/development/installation_for_cygwin.md @@ -66,9 +66,9 @@ Follow the [instructions](https://github.com/grpc-ecosystem/grpc-gateway#usage) Adjust steps 3, 5 and 7 like this. `protoc` expects native Windows paths. - protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=. --go-grpc_out=. ./path/to/your_service.proto - protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --grpc-gateway_out=logtostderr=true:. ./path/to/your_service.proto - protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --openapiv2_out=logtostderr=true:. ./path/to/your_service.proto + protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src --go_out=. --go-grpc_out=. ./path/to/your_service.proto + protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src --grpc-gateway_out=logtostderr=true:. ./path/to/your_service.proto + protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src --openapiv2_out=logtostderr=true:. ./path/to/your_service.proto Then `cd` into the directory where your entry-point `main.go` file is located and run: diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index dc5d6956881..d93476ad1f5 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -48,18 +48,6 @@ See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/b Now that we've got the gRPC-Gateway annotations added to the proto file, we need to use the gRPC-Gateway generator to generate the stubs. -Before we can do that, we need to copy some dependencies into our proto file structure. Copy the `third_party/googleapis` folder from the gRPC-Gateway repository to your local proto file structure. It should look like this afterwards: - -``` -proto -ā”œā”€ā”€ google -│ └── api -│ ā”œā”€ā”€ annotations.proto -│ └── http.proto -└── helloworld - └── hello_world.proto -``` - ### Using buf We'll need to add the gRPC-Gateway generator to the generation configuration: @@ -78,6 +66,20 @@ plugins: opt: paths=source_relative ``` +We'll also need to add the `googleapis` dependency to our `buf.yaml` file: + +```yaml +version: v1beta1 +name: buf.build/myuser/myrepo +deps: + - buf.build/beta/googleapis +build: + roots: + - proto +``` + +Then we need to run `buf beta mod update` to select a version of the dependency to use. + And that's it! Now if you run: ```sh @@ -88,6 +90,19 @@ It should produce a `*.gw.pb.go` file. ### Using `protoc` +Before we can generate the stubs with `protoc`, we need to copy some dependencies into our proto file structure. Copy a subset of the `googleapis` +from the [official repository](https://github.com/googleapis/googleapis) to your local proto file structure. It should look like this afterwards: + +``` +proto +ā”œā”€ā”€ google +│ └── api +│ ā”œā”€ā”€ annotations.proto +│ └── http.proto +└── helloworld + └── hello_world.proto +``` + Now we need to add the gRPC-Gateway generator to the `protoc` invocation: ```sh diff --git a/docs/docs/tutorials/generating_stubs/using_buf.md b/docs/docs/tutorials/generating_stubs/using_buf.md index 953cfcb76f4..2c2aabb76d5 100644 --- a/docs/docs/tutorials/generating_stubs/using_buf.md +++ b/docs/docs/tutorials/generating_stubs/using_buf.md @@ -18,6 +18,7 @@ The following is an example of a valid configuration, assuming you have your `.p ```yaml version: v1beta1 +name: buf.build/myuser/myrepo build: roots: - proto diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index fb5b578359d..dfc2f8b71ea 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2968,39 +2968,12 @@ definitions: \ common set of\nmessage types for APIs to use." items: $ref: "#/definitions/protobufAny" - title: "The `Status` type defines a logical error model that is suitable for different\n\ - programming environments, including REST APIs and RPC APIs. It is used by\n\ - [gRPC](https://github.com/grpc). The error model is designed to be:" - description: "- Simple to use and understand for most users\n- Flexible enough\ - \ to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three\ - \ pieces of data: error code, error message,\nand error details. The error code\ - \ should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may\ - \ accept additional error codes if needed. The\nerror message should be a developer-facing\ - \ English message that helps\ndevelopers *understand* and *resolve* the error.\ - \ If a localized user-facing\nerror message is needed, put the localized message\ - \ in the error details or\nlocalize it in the client. The optional error details\ - \ may contain arbitrary\ninformation about the error. There is a predefined\ - \ set of error detail types\nin the package `google.rpc` that can be used for\ - \ common error conditions.\n\n# Language mapping\n\nThe `Status` message is\ - \ the logical representation of the error model, but it\nis not necessarily\ - \ the actual wire format. When the `Status` message is\nexposed in different\ - \ client libraries and different wire protocols, it can be\nmapped differently.\ - \ For example, it will likely be mapped to some exceptions\nin Java, but more\ - \ likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model\ - \ and the `Status` message can be used in a variety of\nenvironments, either\ - \ with or without APIs, to provide a\nconsistent developer experience across\ - \ different environments.\n\nExample uses of this error model include:\n\n-\ - \ Partial errors. If a service needs to return partial errors to the client,\n\ - \ it may embed the `Status` in the normal response to indicate the partial\n\ - \ errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each\ - \ step may\n have a `Status` message for error reporting.\n\n- Batch operations.\ - \ If a client uses batch request and batch response, the\n `Status` message\ - \ should be used directly inside batch response, one for\n each error sub-response.\n\ - \n- Asynchronous operations. If an API call embeds asynchronous operation\n\ - \ results in its response, the status of those operations should be\n \ - \ represented directly using the `Status` message.\n\n- Logging. If some API\ - \ errors are stored in logs, the message `Status` could\n be used directly\ - \ after any stripping needed for security/privacy reasons." + description: "The `Status` type defines a logical error model that is suitable\ + \ for\ndifferent programming environments, including REST APIs and RPC APIs.\ + \ It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\n\ + three pieces of data: error code, error message, and error details.\n\nYou can\ + \ find out more about this error model and how to work with it in the\n[API\ + \ Design Guide](https://cloud.google.com/apis/design/errors)." example: code: 0 details: diff --git a/examples/internal/clients/abe/model_rpc_status.go b/examples/internal/clients/abe/model_rpc_status.go index 442947c22b0..0bda0e2a94e 100644 --- a/examples/internal/clients/abe/model_rpc_status.go +++ b/examples/internal/clients/abe/model_rpc_status.go @@ -10,7 +10,7 @@ package abe -// - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` that can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. +// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). type RpcStatus struct { // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. Code int32 `json:"code,omitempty"` diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 5e6fe7beead..905cda4bb73 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -604,36 +604,9 @@ definitions: \ common set of\nmessage types for APIs to use." items: $ref: "#/definitions/protobufAny" - title: "The `Status` type defines a logical error model that is suitable for different\n\ - programming environments, including REST APIs and RPC APIs. It is used by\n\ - [gRPC](https://github.com/grpc). The error model is designed to be:" - description: "- Simple to use and understand for most users\n- Flexible enough\ - \ to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three\ - \ pieces of data: error code, error message,\nand error details. The error code\ - \ should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may\ - \ accept additional error codes if needed. The\nerror message should be a developer-facing\ - \ English message that helps\ndevelopers *understand* and *resolve* the error.\ - \ If a localized user-facing\nerror message is needed, put the localized message\ - \ in the error details or\nlocalize it in the client. The optional error details\ - \ may contain arbitrary\ninformation about the error. There is a predefined\ - \ set of error detail types\nin the package `google.rpc` that can be used for\ - \ common error conditions.\n\n# Language mapping\n\nThe `Status` message is\ - \ the logical representation of the error model, but it\nis not necessarily\ - \ the actual wire format. When the `Status` message is\nexposed in different\ - \ client libraries and different wire protocols, it can be\nmapped differently.\ - \ For example, it will likely be mapped to some exceptions\nin Java, but more\ - \ likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model\ - \ and the `Status` message can be used in a variety of\nenvironments, either\ - \ with or without APIs, to provide a\nconsistent developer experience across\ - \ different environments.\n\nExample uses of this error model include:\n\n-\ - \ Partial errors. If a service needs to return partial errors to the client,\n\ - \ it may embed the `Status` in the normal response to indicate the partial\n\ - \ errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each\ - \ step may\n have a `Status` message for error reporting.\n\n- Batch operations.\ - \ If a client uses batch request and batch response, the\n `Status` message\ - \ should be used directly inside batch response, one for\n each error sub-response.\n\ - \n- Asynchronous operations. If an API call embeds asynchronous operation\n\ - \ results in its response, the status of those operations should be\n \ - \ represented directly using the `Status` message.\n\n- Logging. If some API\ - \ errors are stored in logs, the message `Status` could\n be used directly\ - \ after any stripping needed for security/privacy reasons." + description: "The `Status` type defines a logical error model that is suitable\ + \ for\ndifferent programming environments, including REST APIs and RPC APIs.\ + \ It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\n\ + three pieces of data: error code, error message, and error details.\n\nYou can\ + \ find out more about this error model and how to work with it in the\n[API\ + \ Design Guide](https://cloud.google.com/apis/design/errors)." diff --git a/examples/internal/clients/echo/model_rpc_status.go b/examples/internal/clients/echo/model_rpc_status.go index b0ef00885e2..f87184fd029 100644 --- a/examples/internal/clients/echo/model_rpc_status.go +++ b/examples/internal/clients/echo/model_rpc_status.go @@ -9,7 +9,7 @@ package echo -// - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` that can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. +// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). type RpcStatus struct { // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. Code int32 `json:"code,omitempty"` diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index b1dd9042485..6bbce165148 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -224,39 +224,12 @@ definitions: \ common set of\nmessage types for APIs to use." items: $ref: "#/definitions/protobufAny" - title: "The `Status` type defines a logical error model that is suitable for different\n\ - programming environments, including REST APIs and RPC APIs. It is used by\n\ - [gRPC](https://github.com/grpc). The error model is designed to be:" - description: "- Simple to use and understand for most users\n- Flexible enough\ - \ to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three\ - \ pieces of data: error code, error message,\nand error details. The error code\ - \ should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may\ - \ accept additional error codes if needed. The\nerror message should be a developer-facing\ - \ English message that helps\ndevelopers *understand* and *resolve* the error.\ - \ If a localized user-facing\nerror message is needed, put the localized message\ - \ in the error details or\nlocalize it in the client. The optional error details\ - \ may contain arbitrary\ninformation about the error. There is a predefined\ - \ set of error detail types\nin the package `google.rpc` that can be used for\ - \ common error conditions.\n\n# Language mapping\n\nThe `Status` message is\ - \ the logical representation of the error model, but it\nis not necessarily\ - \ the actual wire format. When the `Status` message is\nexposed in different\ - \ client libraries and different wire protocols, it can be\nmapped differently.\ - \ For example, it will likely be mapped to some exceptions\nin Java, but more\ - \ likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model\ - \ and the `Status` message can be used in a variety of\nenvironments, either\ - \ with or without APIs, to provide a\nconsistent developer experience across\ - \ different environments.\n\nExample uses of this error model include:\n\n-\ - \ Partial errors. If a service needs to return partial errors to the client,\n\ - \ it may embed the `Status` in the normal response to indicate the partial\n\ - \ errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each\ - \ step may\n have a `Status` message for error reporting.\n\n- Batch operations.\ - \ If a client uses batch request and batch response, the\n `Status` message\ - \ should be used directly inside batch response, one for\n each error sub-response.\n\ - \n- Asynchronous operations. If an API call embeds asynchronous operation\n\ - \ results in its response, the status of those operations should be\n \ - \ represented directly using the `Status` message.\n\n- Logging. If some API\ - \ errors are stored in logs, the message `Status` could\n be used directly\ - \ after any stripping needed for security/privacy reasons." + description: "The `Status` type defines a logical error model that is suitable\ + \ for\ndifferent programming environments, including REST APIs and RPC APIs.\ + \ It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\n\ + three pieces of data: error code, error message, and error details.\n\nYou can\ + \ find out more about this error model and how to work with it in the\n[API\ + \ Design Guide](https://cloud.google.com/apis/design/errors)." example: code: 0 details: diff --git a/examples/internal/clients/responsebody/model_rpc_status.go b/examples/internal/clients/responsebody/model_rpc_status.go index cbc18bcdb88..9ad2f03a053 100644 --- a/examples/internal/clients/responsebody/model_rpc_status.go +++ b/examples/internal/clients/responsebody/model_rpc_status.go @@ -9,7 +9,7 @@ package responsebody -// - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` that can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. +// The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). type RpcStatus struct { // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. Code int32 `json:"code,omitempty"` diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index efbd60c6f3b..a0ca2163b3e 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -66,10 +66,6 @@ paths: schema: type: "integer" format: "integer" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" 503: description: "Returned when the resource is temporarily unavailable." schema: {} @@ -172,10 +168,6 @@ paths: schema: type: "integer" format: "integer" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" 503: description: "Returned when the resource is temporarily unavailable." schema: {} @@ -214,10 +206,6 @@ paths: schema: type: "string" format: "string" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" default: description: "An unexpected error response." schema: @@ -310,10 +298,6 @@ paths: schema: type: "string" format: "string" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" default: description: "An unexpected error response." schema: @@ -330,14 +314,6 @@ securityDefinitions: BasicAuth: type: "basic" definitions: - examplepbNumericEnum: - type: "string" - description: "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE\ - \ means 1" - enum: - - "ZERO" - - "ONE" - default: "ZERO" examplepbUnannotatedEmbedded: type: "object" properties: @@ -387,110 +363,22 @@ definitions: properties: typeUrl: type: "string" - description: "A URL/resource name that uniquely identifies the type of the\ - \ serialized\nprotocol buffer message. This string must contain at least\n\ - one \"/\" character. The last segment of the URL's path must represent\n\ - the fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\ - \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\ - \nIn practice, teams usually precompile into the binary all types that they\n\ - expect it to use in the context of Any. However, for URLs which use the\n\ - scheme `http`, `https`, or no scheme, one can optionally set up a type\n\ - server that maps type URLs to message definitions as follows:\n\n* If no\ - \ scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must\ - \ yield a [google.protobuf.Type][]\n value in binary format, or produce\ - \ an error.\n* Applications are allowed to cache lookup results based on\ - \ the\n URL, or have them precompiled into a binary to avoid any\n lookup.\ - \ Therefore, binary compatibility needs to be preserved\n on changes to\ - \ types. (Use versioned type names to manage\n breaking changes.)\n\nNote:\ - \ this functionality is not currently available in the official\nprotobuf\ - \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ - \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ - \ with implementation specific semantics." value: type: "string" format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified\ - \ type." pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" - description: "`Any` contains an arbitrary serialized protocol buffer message along\ - \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ - \ library provides support to pack/unpack Any values in the form\nof utility\ - \ functions or additional generated methods of the Any type.\n\nExample 1: Pack\ - \ and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n\ - \ ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack\ - \ and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n\ - \ ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n\ - \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ - \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ - \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ - \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ - \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ - \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ - \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ - \ URL and the unpack\nmethods only use the fully qualified type name after the\ - \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ - name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ - \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ - additional field `@type` which contains the type URL. Example:\n\n package\ - \ google.profile;\n message Person {\n string first_name = 1;\n \ - \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ - ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ - \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ - \ that representation will be embedded adding a field\n`value` which holds the\ - \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ - \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ - \ \"value\": \"1.212s\"\n }" rpcStatus: type: "object" properties: code: type: "integer" format: "int32" - description: "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." message: type: "string" - description: "A developer-facing error message, which should be in English.\ - \ Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details]\ - \ field, or localized by the client." details: type: "array" - description: "A list of messages that carry the error details. There is a\ - \ common set of\nmessage types for APIs to use." items: $ref: "#/definitions/protobufAny" - title: "The `Status` type defines a logical error model that is suitable for different\n\ - programming environments, including REST APIs and RPC APIs. It is used by\n\ - [gRPC](https://github.com/grpc). The error model is designed to be:" - description: "- Simple to use and understand for most users\n- Flexible enough\ - \ to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three\ - \ pieces of data: error code, error message,\nand error details. The error code\ - \ should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may\ - \ accept additional error codes if needed. The\nerror message should be a developer-facing\ - \ English message that helps\ndevelopers *understand* and *resolve* the error.\ - \ If a localized user-facing\nerror message is needed, put the localized message\ - \ in the error details or\nlocalize it in the client. The optional error details\ - \ may contain arbitrary\ninformation about the error. There is a predefined\ - \ set of error detail types\nin the package `google.rpc` that can be used for\ - \ common error conditions.\n\n# Language mapping\n\nThe `Status` message is\ - \ the logical representation of the error model, but it\nis not necessarily\ - \ the actual wire format. When the `Status` message is\nexposed in different\ - \ client libraries and different wire protocols, it can be\nmapped differently.\ - \ For example, it will likely be mapped to some exceptions\nin Java, but more\ - \ likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model\ - \ and the `Status` message can be used in a variety of\nenvironments, either\ - \ with or without APIs, to provide a\nconsistent developer experience across\ - \ different environments.\n\nExample uses of this error model include:\n\n-\ - \ Partial errors. If a service needs to return partial errors to the client,\n\ - \ it may embed the `Status` in the normal response to indicate the partial\n\ - \ errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each\ - \ step may\n have a `Status` message for error reporting.\n\n- Batch operations.\ - \ If a client uses batch request and batch response, the\n `Status` message\ - \ should be used directly inside batch response, one for\n each error sub-response.\n\ - \n- Asynchronous operations. If an API call embeds asynchronous operation\n\ - \ results in its response, the status of those operations should be\n \ - \ represented directly using the `Status` message.\n\n- Logging. If some API\ - \ errors are stored in logs, the message `Status` could\n be used directly\ - \ after any stripping needed for security/privacy reasons." externalDocs: description: "More about gRPC-Gateway" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index a9359ada8a8..ed62777fb30 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -145,17 +145,6 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx contex return localVarReturnValue, localVarHttpResponse, newErr } - if localVarHttpResponse.StatusCode == 418 { - var v ExamplepbNumericEnum - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - if localVarHttpResponse.StatusCode == 503 { var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -349,17 +338,6 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx conte return localVarReturnValue, localVarHttpResponse, newErr } - if localVarHttpResponse.StatusCode == 418 { - var v ExamplepbNumericEnum - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - if localVarHttpResponse.StatusCode == 503 { var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -506,17 +484,6 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoBody(ctx co return localVarReturnValue, localVarHttpResponse, newErr } - if localVarHttpResponse.StatusCode == 418 { - var v ExamplepbNumericEnum - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); @@ -701,17 +668,6 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx return localVarReturnValue, localVarHttpResponse, newErr } - if localVarHttpResponse.StatusCode == 418 { - var v ExamplepbNumericEnum - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); diff --git a/examples/internal/clients/unannotatedecho/model_protobuf_any.go b/examples/internal/clients/unannotatedecho/model_protobuf_any.go index 6ffa3a72d3e..c1893febf6f 100644 --- a/examples/internal/clients/unannotatedecho/model_protobuf_any.go +++ b/examples/internal/clients/unannotatedecho/model_protobuf_any.go @@ -10,10 +10,7 @@ package unannotatedecho -// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { - // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. TypeUrl string `json:"typeUrl,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. Value string `json:"value,omitempty"` } diff --git a/examples/internal/clients/unannotatedecho/model_rpc_status.go b/examples/internal/clients/unannotatedecho/model_rpc_status.go index f65371a49ae..d97aeea06d4 100644 --- a/examples/internal/clients/unannotatedecho/model_rpc_status.go +++ b/examples/internal/clients/unannotatedecho/model_rpc_status.go @@ -10,12 +10,8 @@ package unannotatedecho -// - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` that can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. type RpcStatus struct { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. Code int32 `json:"code,omitempty"` - // A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. Message string `json:"message,omitempty"` - // A list of messages that carry the error details. There is a common set of message types for APIs to use. Details []ProtobufAny `json:"details,omitempty"` } diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 95441f8ed23..3e693b64364 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/helloworld/helloworld.proto package helloworld import ( - proto "github.com/golang/protobuf/proto" wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -23,10 +22,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type HelloRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/helloworld/helloworld.swagger.json b/examples/internal/helloworld/helloworld.swagger.json new file mode 100644 index 00000000000..b33e770ceda --- /dev/null +++ b/examples/internal/helloworld/helloworld.swagger.json @@ -0,0 +1,970 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/helloworld/helloworld.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "Greeter" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/say/boolval/{boolVal}": { + "get": { + "operationId": "Greeter_SayHello5", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "boolVal", + "in": "path", + "required": true, + "type": "boolean" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/bytesval/{bytesVal}": { + "get": { + "operationId": "Greeter_SayHello6", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "bytesVal", + "in": "path", + "required": true, + "type": "string", + "format": "byte" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/doubleval/{doubleVal}": { + "get": { + "operationId": "Greeter_SayHello4", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "doubleVal", + "in": "path", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/floatval/{floatVal}": { + "get": { + "operationId": "Greeter_SayHello3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "floatVal", + "in": "path", + "required": true, + "type": "number", + "format": "float" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/int32val/{int32Val}": { + "get": { + "operationId": "Greeter_SayHello7", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "int32Val", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/int64val/{int64Val}": { + "get": { + "operationId": "Greeter_SayHello9", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "int64Val", + "in": "path", + "required": true, + "type": "string", + "format": "int64" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/strval/{strVal}": { + "get": { + "operationId": "Greeter_SayHello2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "strVal", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/uint32val/{uint32Val}": { + "get": { + "operationId": "Greeter_SayHello8", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uint32Val", + "in": "path", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/uint64val/{uint64Val}": { + "get": { + "operationId": "Greeter_SayHello10", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uint64Val", + "in": "path", + "required": true, + "type": "string", + "format": "uint64" + }, + { + "name": "name", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + } + ], + "tags": [ + "Greeter" + ] + } + }, + "/say/{name}": { + "get": { + "operationId": "Greeter_SayHello", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/helloworldHelloReply" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "strVal", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "floatVal", + "in": "query", + "required": false, + "type": "number", + "format": "float" + }, + { + "name": "doubleVal", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "boolVal", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "bytesVal", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "int32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "uint32Val", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "int64Val", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Val", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + } + ], + "tags": [ + "Greeter" + ] + } + } + }, + "definitions": { + "helloworldHelloReply": { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index 841d5b44cd0..1abcb8bfedd 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -108,8 +108,29 @@ go_proto_library( go_library( name = "go_default_library", + srcs = [ + "openapi_merge_a.pb.go", + "openapi_merge_a.pb.gw.go", + "openapi_merge_a_grpc.pb.go", + "openapi_merge_b.pb.go", + "openapi_merge_b.pb.gw.go", + "openapi_merge_b_grpc.pb.go", + ], embed = [":examplepb_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", + deps = [ + "//runtime:go_default_library", + "//utilities:go_default_library", + "@go_googleapis//google/api:annotations_go_proto", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//grpclog:go_default_library", + "@org_golang_google_grpc//metadata:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", + "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", + ], ) protoc_gen_openapiv2( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 224ab9b82e3..2ed3b356810 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" @@ -32,10 +31,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // NumericEnum is one or zero. type NumericEnum int32 @@ -1353,7 +1348,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x82, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1534,236 +1529,203 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xe8, 0x01, 0x0a, 0x06, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, - 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, - 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, - 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, - 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, - 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, 0x84, 0x01, - 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, 0x7b, 0x22, - 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, 0x65, 0x31, - 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, 0x39, 0x2d, - 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, 0x42, 0x0d, - 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, - 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, - 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, - 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, - 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, - 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, - 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, - 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, - 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, - 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, - 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x6a, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, + 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, + 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xe8, 0x01, + 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, + 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, + 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, + 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, + 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, + 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, + 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, - 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, - 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, + 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, + 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, + 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, + 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, + 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, + 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, + 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, + 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, + 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, + 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, + 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, + 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, + 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, + 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, + 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, + 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, + 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, @@ -1771,155 +1733,182 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, + 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, - 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, - 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, + 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, + 0x6b, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, - 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2c, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, + 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, + 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, - 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, + 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, + 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, + 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, + 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, + 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, + 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, - 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, - 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, - 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, + 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, - 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, + 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, @@ -1930,270 +1919,276 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, - 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, - 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, - 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, - 0x02, 0x01, 0x03, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, + 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, + 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, + 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, + 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, + 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, - 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, - 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, - 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, - 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, + 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, + 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, - 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, + 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, - 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, + 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, + 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, + 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, - 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, - 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, + 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, + 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, - 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, - 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, - 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, - 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, - 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, - 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, - 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, + 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, - 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, - 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, - 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, - 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, - 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, - 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, - 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, - 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, - 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, - 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, - 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, - 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, - 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, - 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, - 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, - 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, - 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, - 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, - 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, - 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, - 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, - 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, - 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, - 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, - 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, - 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, + 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, + 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, + 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, + 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, + 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, + 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, + 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, + 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, + 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, + 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, + 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, + 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, + 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, + 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, + 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, + 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, + 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, + 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, + 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, + 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, + 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, + 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, + 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, + 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index b6e64512d5c..bc10d99e414 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -3588,8 +3588,7 @@ "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." } }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." }, "subStringMessage": { "type": "object", diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 466d884e257..1ad8ccc0353 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service @@ -12,7 +12,6 @@ package examplepb import ( - proto "github.com/golang/protobuf/proto" _struct "github.com/golang/protobuf/ptypes/struct" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" @@ -29,10 +28,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // Embedded represents a message embedded in SimpleMessage. type Embedded struct { state protoimpl.MessageState diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index e9f9bc7a501..56d237f68ef 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -651,8 +651,7 @@ "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." } }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." } } } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 691031f8b52..a092b0bee3c 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type EmptyProto struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json new file mode 100644 index 00000000000..128107a8e82 --- /dev/null +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -0,0 +1,963 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/flow_combination.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "FlowCombination" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/rpc/body/path/{a}/query/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc6", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/path/{a}/query/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream6", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/path/{a}/{b}/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc4", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/path/{a}/{b}/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream4", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/query/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc5", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "a", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/query/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream5", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "a", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonEmptyProto" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/body/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonEmptyProto" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/empty/rpc": { + "post": { + "operationId": "FlowCombination_RpcEmptyRpc", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/empty/stream": { + "post": { + "operationId": "FlowCombination_RpcEmptyStream", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/rpc": { + "post": { + "operationId": "FlowCombination_RpcPathNestedRpc3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a.str", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/stream": { + "post": { + "operationId": "FlowCombination_RpcPathNestedStream3", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a.str", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/{b}/rpc": { + "post": { + "operationId": "FlowCombination_RpcPathNestedRpc", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a.str", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/{b}/stream": { + "post": { + "operationId": "FlowCombination_RpcPathNestedStream", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a.str", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path/{a}/query/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc7", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path/{a}/query/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream7", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path/{a}/{b}/{c}/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "c", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path/{a}/{b}/{c}/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream2", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "a", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "c", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/query/rpc": { + "post": { + "operationId": "FlowCombination_RpcBodyRpc3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/query/stream": { + "post": { + "operationId": "FlowCombination_RpcBodyStream3", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + }, + "/stream/empty/rpc": { + "post": { + "operationId": "FlowCombination_StreamEmptyRpc", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + }, + "/stream/empty/stream": { + "post": { + "operationId": "FlowCombination_StreamEmptyStream", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "FlowCombination" + ] + } + } + }, + "definitions": { + "examplepbEmptyProto": { + "type": "object" + }, + "examplepbNonEmptyProto": { + "type": "object", + "properties": { + "a": { + "type": "string" + }, + "b": { + "type": "string" + }, + "c": { + "type": "string" + } + } + }, + "examplepbUnaryProto": { + "type": "object", + "properties": { + "str": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml b/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml new file mode 100644 index 00000000000..3964e3681c3 --- /dev/null +++ b/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml @@ -0,0 +1,11 @@ +version: v1beta1 +plugins: + - name: grpc-gateway + out: . + opt: + - paths=source_relative + - generate_unbound_methods=true + - name: openapiv2 + out: . + opt: + - generate_unbound_methods=true diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index 34b1f55652d..4573aeb432b 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service @@ -13,7 +13,6 @@ package examplepb import ( - proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -28,10 +27,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. type GenerateUnboundMethodsSimpleMessage struct { state protoimpl.MessageState diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json new file mode 100644 index 00000000000..77058bbc9af --- /dev/null +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -0,0 +1,347 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/generated_input.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "GeneratedService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/a_bit_of_everything/generated_create": { + "post": { + "operationId": "GeneratedService_Create", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + } + ], + "tags": [ + "GeneratedService" + ] + } + } + }, + "definitions": { + "ABitOfEverythingNested": { + "type": "object", + "example": { + "ok": "TRUE" + }, + "properties": { + "name": { + "type": "string", + "description": "name is nested field." + }, + "amount": { + "type": "integer", + "format": "int64" + }, + "ok": { + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." + } + }, + "description": "Nested is nested type." + }, + "MessagePathEnumNestedPathEnum": { + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + "NestedDeepEnum": { + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE", + "description": "DeepEnum is one or zero.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true." + }, + "examplepbABitOfEverything": { + "type": "object", + "example": { + "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + }, + "properties": { + "singleNested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "uuid": { + "type": "string", + "minLength": 1, + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "float_value" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "required_string_via_field_behavior_annotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + } + }, + "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "uuid", + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "examplepbNumericEnum": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO", + "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" + }, + "pathenumPathEnum": { + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 436dae726ff..052efa1de8e 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -23,10 +22,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // NonStandardMessage has oddly named fields. type NonStandardMessage struct { state protoimpl.MessageState diff --git a/examples/internal/proto/examplepb/non_standard_names.swagger.json b/examples/internal/proto/examplepb/non_standard_names.swagger.json new file mode 100644 index 00000000000..bc44971a5cb --- /dev/null +++ b/examples/internal/proto/examplepb/non_standard_names.swagger.json @@ -0,0 +1,237 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/non_standard_names.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "NonStandardService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/non_standard/update": { + "patch": { + "summary": "Apply field mask to empty NonStandardMessage and return result.", + "operationId": "NonStandardService_Update", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessage" + } + }, + { + "name": "updateMask", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "NonStandardService" + ] + } + }, + "/v1/example/non_standard/update_with_json_names": { + "patch": { + "summary": "Apply field mask to empty NonStandardMessageWithJSONNames and return result.", + "operationId": "NonStandardService_UpdateWithJSONNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNames" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNames" + } + }, + { + "name": "updateMask", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "NonStandardService" + ] + } + } + }, + "definitions": { + "examplepbNonStandardMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "Num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "langIdent": { + "type": "string" + }, + "STATUS": { + "type": "string" + }, + "enGB": { + "type": "string", + "format": "int64" + }, + "no": { + "type": "string" + }, + "thing": { + "$ref": "#/definitions/examplepbNonStandardMessageThing" + } + }, + "description": "NonStandardMessage has oddly named fields." + }, + "examplepbNonStandardMessageThing": { + "type": "object", + "properties": { + "subThing": { + "$ref": "#/definitions/examplepbNonStandardMessageThingSubThing" + } + } + }, + "examplepbNonStandardMessageThingSubThing": { + "type": "object", + "properties": { + "subValue": { + "type": "string" + } + } + }, + "examplepbNonStandardMessageWithJSONNames": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Id represents the message identifier." + }, + "Num": { + "type": "string", + "format": "int64" + }, + "LineNum": { + "type": "string", + "format": "int64" + }, + "langIdent": { + "type": "string" + }, + "status": { + "type": "string" + }, + "En_GB": { + "type": "string", + "format": "int64" + }, + "yes": { + "type": "string" + }, + "Thingy": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNamesThing" + } + }, + "description": "NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion." + }, + "examplepbNonStandardMessageWithJSONNamesThing": { + "type": "object", + "properties": { + "SubThing": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNamesThingSubThing" + } + } + }, + "examplepbNonStandardMessageWithJSONNamesThingSubThing": { + "type": "object", + "properties": { + "sub_Value": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml b/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml new file mode 100644 index 00000000000..c2fa05fa045 --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml @@ -0,0 +1,7 @@ +version: v1beta1 +plugins: + - name: openapiv2 + out: . + opt: + - allow_merge=true + - merge_file_name=examples/internal/proto/examplepb/openapi_merge diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go new file mode 100644 index 00000000000..12a39d09308 --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -0,0 +1,335 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: examples/internal/proto/examplepb/openapi_merge_a.proto + +// Merging Services +// +// This is an example of merging two proto files. + +package examplepb + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// InMessageA represents a message to ServiceA and ServiceC. +type InMessageA struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Here is the explanation about InMessageA.values + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *InMessageA) Reset() { + *x = InMessageA{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InMessageA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InMessageA) ProtoMessage() {} + +func (x *InMessageA) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InMessageA.ProtoReflect.Descriptor instead. +func (*InMessageA) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{0} +} + +func (x *InMessageA) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// OutMessageA represents a message returned from ServiceA. +type OutMessageA struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Here is the explanation about OutMessageA.value + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *OutMessageA) Reset() { + *x = OutMessageA{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OutMessageA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutMessageA) ProtoMessage() {} + +func (x *OutMessageA) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OutMessageA.ProtoReflect.Descriptor instead. +func (*OutMessageA) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{1} +} + +func (x *OutMessageA) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// OutMessageC represents a message returned from ServiceC. +type OutMessageC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Here is the explanation about OutMessageC.value + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *OutMessageC) Reset() { + *x = OutMessageC{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OutMessageC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutMessageC) ProtoMessage() {} + +func (x *OutMessageC) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OutMessageC.ProtoReflect.Descriptor instead. +func (*OutMessageC) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP(), []int{2} +} + +func (x *OutMessageC) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +var File_examples_internal_proto_examplepb_openapi_merge_a_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byte{ + 0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x6d, 0x65, 0x72, 0x67, + 0x65, 0x5f, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x24, 0x0a, 0x0a, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x12, + 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x23, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, 0x0b, + 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0xb8, 0x02, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x12, 0x94, + 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x41, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x2f, 0x31, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x54, 0x77, 0x6f, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, + 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x32, 0xb8, 0x02, 0x0a, + 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x35, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x43, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x31, 0x3a, 0x01, 0x2a, + 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x41, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x63, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData = file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes = []interface{}{ + (*InMessageA)(nil), // 0: grpc.gateway.examples.internal.examplepb.InMessageA + (*OutMessageA)(nil), // 1: grpc.gateway.examples.internal.examplepb.OutMessageA + (*OutMessageC)(nil), // 2: grpc.gateway.examples.internal.examplepb.OutMessageC +} +var file_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.examplepb.ServiceA.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageA + 1, // 1: grpc.gateway.examples.internal.examplepb.ServiceA.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageA + 0, // 2: grpc.gateway.examples.internal.examplepb.ServiceC.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageA + 1, // 3: grpc.gateway.examples.internal.examplepb.ServiceC.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageA + 1, // 4: grpc.gateway.examples.internal.examplepb.ServiceA.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageA + 0, // 5: grpc.gateway.examples.internal.examplepb.ServiceA.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageA + 2, // 6: grpc.gateway.examples.internal.examplepb.ServiceC.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageC + 0, // 7: grpc.gateway.examples.internal.examplepb.ServiceC.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageA + 4, // [4:8] is the sub-list for method output_type + 0, // [0:4] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_openapi_merge_a_proto_init() } +func file_examples_internal_proto_examplepb_openapi_merge_a_proto_init() { + if File_examples_internal_proto_examplepb_openapi_merge_a_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InMessageA); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutMessageA); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutMessageC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 2, + }, + GoTypes: file_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_openapi_merge_a_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_openapi_merge_a_proto = out.File + file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = nil + file_examples_internal_proto_examplepb_openapi_merge_a_proto_goTypes = nil + file_examples_internal_proto_examplepb_openapi_merge_a_proto_depIdxs = nil +} diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go new file mode 100644 index 00000000000..f0d18addafa --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -0,0 +1,464 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/internal/proto/examplepb/openapi_merge_a.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_ServiceA_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceAClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceA_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceAServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodOne(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ServiceA_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceAClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceA_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceAServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodTwo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ServiceC_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceCClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceC_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceCServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodOne(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ServiceC_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceCClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceC_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceCServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageA + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodTwo(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterServiceAHandlerServer registers the http handlers for service ServiceA to "mux". +// UnaryRPC :call ServiceAServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceAHandlerFromEndpoint instead. +func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceAServer) error { + + mux.Handle("POST", pattern_ServiceA_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceA_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceA_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceA_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceA_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceA_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterServiceCHandlerServer registers the http handlers for service ServiceC to "mux". +// UnaryRPC :call ServiceCServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceCHandlerFromEndpoint instead. +func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceCServer) error { + + mux.Handle("POST", pattern_ServiceC_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceC_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceC_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceC_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceC_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceC_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterServiceAHandlerFromEndpoint is same as RegisterServiceAHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterServiceAHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterServiceAHandler(ctx, mux, conn) +} + +// RegisterServiceAHandler registers the http handlers for service ServiceA to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterServiceAHandlerClient(ctx, mux, NewServiceAClient(conn)) +} + +// RegisterServiceAHandlerClient registers the http handlers for service ServiceA +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ServiceAClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ServiceAClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ServiceAClient" to call the correct interceptors. +func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceAClient) error { + + mux.Handle("POST", pattern_ServiceA_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceA_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceA_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceA_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceA_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceA_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_ServiceA_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a", "1"}, "")) + + pattern_ServiceA_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a", "2"}, "")) +) + +var ( + forward_ServiceA_MethodOne_0 = runtime.ForwardResponseMessage + + forward_ServiceA_MethodTwo_0 = runtime.ForwardResponseMessage +) + +// RegisterServiceCHandlerFromEndpoint is same as RegisterServiceCHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterServiceCHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterServiceCHandler(ctx, mux, conn) +} + +// RegisterServiceCHandler registers the http handlers for service ServiceC to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterServiceCHandlerClient(ctx, mux, NewServiceCClient(conn)) +} + +// RegisterServiceCHandlerClient registers the http handlers for service ServiceC +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ServiceCClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ServiceCClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ServiceCClient" to call the correct interceptors. +func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceCClient) error { + + mux.Handle("POST", pattern_ServiceC_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceC_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceC_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceC_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceC_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceC_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_ServiceC_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "c", "1"}, "")) + + pattern_ServiceC_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "c", "2"}, "")) +) + +var ( + forward_ServiceC_MethodOne_0 = runtime.ForwardResponseMessage + + forward_ServiceC_MethodTwo_0 = runtime.ForwardResponseMessage +) diff --git a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json new file mode 100644 index 00000000000..242824822e9 --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json @@ -0,0 +1,232 @@ +{ + "swagger": "2.0", + "info": { + "title": "Merging Services", + "description": "This is an example of merging two proto files.", + "version": "version not set" + }, + "tags": [ + { + "name": "ServiceA" + }, + { + "name": "ServiceC" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/a/1": { + "post": { + "summary": "ServiceA.MethodOne receives InMessageA and returns OutMessageA", + "description": "Here is the detail explanation about ServiceA.MethodOne.", + "operationId": "ServiceA_MethodOne", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbOutMessageA" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbInMessageA" + } + } + ], + "tags": [ + "ServiceA" + ] + } + }, + "/v1/example/a/2": { + "post": { + "summary": "ServiceA.MethodTwo receives OutMessageA and returns InMessageA", + "description": "Here is the detail explanation about ServiceA.MethodTwo.", + "operationId": "ServiceA_MethodTwo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbInMessageA" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbOutMessageA" + } + } + ], + "tags": [ + "ServiceA" + ] + } + }, + "/v1/example/c/1": { + "post": { + "summary": "ServiceC.MethodOne receives InMessageA and returns OutMessageC", + "description": "Here is the detail explanation about ServiceC.MethodOne.", + "operationId": "ServiceC_MethodOne", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbOutMessageC" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbInMessageA" + } + } + ], + "tags": [ + "ServiceC" + ] + } + }, + "/v1/example/c/2": { + "post": { + "summary": "ServiceC.MethodTwo receives OutMessageA and returns InMessageA", + "description": "Here is the detail explanation about ServiceC.MethodTwo.", + "operationId": "ServiceC_MethodTwo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbInMessageA" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbOutMessageA" + } + } + ], + "tags": [ + "ServiceC" + ] + } + } + }, + "definitions": { + "examplepbInMessageA": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Here is the explanation about InMessageA.values" + } + }, + "description": "InMessageA represents a message to ServiceA and ServiceC." + }, + "examplepbOutMessageA": { + "type": "object", + "properties": { + "value": { + "type": "string", + "title": "Here is the explanation about OutMessageA.value" + } + }, + "description": "OutMessageA represents a message returned from ServiceA." + }, + "examplepbOutMessageC": { + "type": "object", + "properties": { + "value": { + "type": "string", + "title": "Here is the explanation about OutMessageC.value" + } + }, + "description": "OutMessageC represents a message returned from ServiceC." + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go b/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go new file mode 100644 index 00000000000..9ce0b09c4da --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go @@ -0,0 +1,272 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package examplepb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion7 + +// ServiceAClient is the client API for ServiceA service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ServiceAClient interface { + // ServiceA.MethodOne receives InMessageA and returns OutMessageA + // + // Here is the detail explanation about ServiceA.MethodOne. + MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageA, error) + // ServiceA.MethodTwo receives OutMessageA and returns InMessageA + // + // Here is the detail explanation about ServiceA.MethodTwo. + MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) +} + +type serviceAClient struct { + cc grpc.ClientConnInterface +} + +func NewServiceAClient(cc grpc.ClientConnInterface) ServiceAClient { + return &serviceAClient{cc} +} + +func (c *serviceAClient) MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageA, error) { + out := new(OutMessageA) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceAClient) MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) { + out := new(InMessageA) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ServiceAServer is the server API for ServiceA service. +// All implementations should embed UnimplementedServiceAServer +// for forward compatibility +type ServiceAServer interface { + // ServiceA.MethodOne receives InMessageA and returns OutMessageA + // + // Here is the detail explanation about ServiceA.MethodOne. + MethodOne(context.Context, *InMessageA) (*OutMessageA, error) + // ServiceA.MethodTwo receives OutMessageA and returns InMessageA + // + // Here is the detail explanation about ServiceA.MethodTwo. + MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) +} + +// UnimplementedServiceAServer should be embedded to have forward compatible implementations. +type UnimplementedServiceAServer struct { +} + +func (UnimplementedServiceAServer) MethodOne(context.Context, *InMessageA) (*OutMessageA, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodOne not implemented") +} +func (UnimplementedServiceAServer) MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodTwo not implemented") +} + +// UnsafeServiceAServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ServiceAServer will +// result in compilation errors. +type UnsafeServiceAServer interface { + mustEmbedUnimplementedServiceAServer() +} + +func RegisterServiceAServer(s *grpc.Server, srv ServiceAServer) { + s.RegisterService(&_ServiceA_serviceDesc, srv) +} + +func _ServiceA_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InMessageA) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceAServer).MethodOne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceAServer).MethodOne(ctx, req.(*InMessageA)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceA_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OutMessageA) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceAServer).MethodTwo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceAServer).MethodTwo(ctx, req.(*OutMessageA)) + } + return interceptor(ctx, in, info, handler) +} + +var _ServiceA_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceA", + HandlerType: (*ServiceAServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MethodOne", + Handler: _ServiceA_MethodOne_Handler, + }, + { + MethodName: "MethodTwo", + Handler: _ServiceA_MethodTwo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/openapi_merge_a.proto", +} + +// ServiceCClient is the client API for ServiceC service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ServiceCClient interface { + // ServiceC.MethodOne receives InMessageA and returns OutMessageC + // + // Here is the detail explanation about ServiceC.MethodOne. + MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageC, error) + // ServiceC.MethodTwo receives OutMessageA and returns InMessageA + // + // Here is the detail explanation about ServiceC.MethodTwo. + MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) +} + +type serviceCClient struct { + cc grpc.ClientConnInterface +} + +func NewServiceCClient(cc grpc.ClientConnInterface) ServiceCClient { + return &serviceCClient{cc} +} + +func (c *serviceCClient) MethodOne(ctx context.Context, in *InMessageA, opts ...grpc.CallOption) (*OutMessageC, error) { + out := new(OutMessageC) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceCClient) MethodTwo(ctx context.Context, in *OutMessageA, opts ...grpc.CallOption) (*InMessageA, error) { + out := new(InMessageA) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ServiceCServer is the server API for ServiceC service. +// All implementations should embed UnimplementedServiceCServer +// for forward compatibility +type ServiceCServer interface { + // ServiceC.MethodOne receives InMessageA and returns OutMessageC + // + // Here is the detail explanation about ServiceC.MethodOne. + MethodOne(context.Context, *InMessageA) (*OutMessageC, error) + // ServiceC.MethodTwo receives OutMessageA and returns InMessageA + // + // Here is the detail explanation about ServiceC.MethodTwo. + MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) +} + +// UnimplementedServiceCServer should be embedded to have forward compatible implementations. +type UnimplementedServiceCServer struct { +} + +func (UnimplementedServiceCServer) MethodOne(context.Context, *InMessageA) (*OutMessageC, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodOne not implemented") +} +func (UnimplementedServiceCServer) MethodTwo(context.Context, *OutMessageA) (*InMessageA, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodTwo not implemented") +} + +// UnsafeServiceCServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ServiceCServer will +// result in compilation errors. +type UnsafeServiceCServer interface { + mustEmbedUnimplementedServiceCServer() +} + +func RegisterServiceCServer(s *grpc.Server, srv ServiceCServer) { + s.RegisterService(&_ServiceC_serviceDesc, srv) +} + +func _ServiceC_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InMessageA) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceCServer).MethodOne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceCServer).MethodOne(ctx, req.(*InMessageA)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceC_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OutMessageA) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceCServer).MethodTwo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceCServer).MethodTwo(ctx, req.(*OutMessageA)) + } + return interceptor(ctx, in, info, handler) +} + +var _ServiceC_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceC", + HandlerType: (*ServiceCServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MethodOne", + Handler: _ServiceC_MethodOne_Handler, + }, + { + MethodName: "MethodTwo", + Handler: _ServiceC_MethodTwo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/openapi_merge_a.proto", +} diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go new file mode 100644 index 00000000000..8d39870604b --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -0,0 +1,247 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: examples/internal/proto/examplepb/openapi_merge_b.proto + +// Merging Services +// +// This is an example of merging two proto files. + +package examplepb + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// InMessageB represents a message to ServiceB. +type InMessageB struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Here is the explanation about InMessageB.values + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *InMessageB) Reset() { + *x = InMessageB{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InMessageB) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InMessageB) ProtoMessage() {} + +func (x *InMessageB) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InMessageB.ProtoReflect.Descriptor instead. +func (*InMessageB) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP(), []int{0} +} + +func (x *InMessageB) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// OutMessageB represents a message returned from ServiceB. +type OutMessageB struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Here is the explanation about OutMessageB.value + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *OutMessageB) Reset() { + *x = OutMessageB{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OutMessageB) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutMessageB) ProtoMessage() {} + +func (x *OutMessageB) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OutMessageB.ProtoReflect.Descriptor instead. +func (*OutMessageB) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP(), []int{1} +} + +func (x *OutMessageB) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +var File_examples_internal_proto_examplepb_openapi_merge_b_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = []byte{ + 0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x6d, 0x65, 0x72, 0x67, + 0x65, 0x5f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x22, 0x0a, 0x0a, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x32, 0xb8, 0x02, 0x0a, + 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x1a, 0x35, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x31, 0x3a, 0x01, 0x2a, + 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x42, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x62, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData = file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes = []interface{}{ + (*InMessageB)(nil), // 0: grpc.gateway.examples.internal.examplepb.InMessageB + (*OutMessageB)(nil), // 1: grpc.gateway.examples.internal.examplepb.OutMessageB +} +var file_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.examplepb.ServiceB.MethodOne:input_type -> grpc.gateway.examples.internal.examplepb.InMessageB + 1, // 1: grpc.gateway.examples.internal.examplepb.ServiceB.MethodTwo:input_type -> grpc.gateway.examples.internal.examplepb.OutMessageB + 1, // 2: grpc.gateway.examples.internal.examplepb.ServiceB.MethodOne:output_type -> grpc.gateway.examples.internal.examplepb.OutMessageB + 0, // 3: grpc.gateway.examples.internal.examplepb.ServiceB.MethodTwo:output_type -> grpc.gateway.examples.internal.examplepb.InMessageB + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_openapi_merge_b_proto_init() } +func file_examples_internal_proto_examplepb_openapi_merge_b_proto_init() { + if File_examples_internal_proto_examplepb_openapi_merge_b_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InMessageB); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutMessageB); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_openapi_merge_b_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_openapi_merge_b_proto = out.File + file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = nil + file_examples_internal_proto_examplepb_openapi_merge_b_proto_goTypes = nil + file_examples_internal_proto_examplepb_openapi_merge_b_proto_depIdxs = nil +} diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go new file mode 100644 index 00000000000..ff1431529fd --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -0,0 +1,248 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/internal/proto/examplepb/openapi_merge_b.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_ServiceB_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceBClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageB + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodOne(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceB_MethodOne_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceBServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq InMessageB + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodOne(ctx, &protoReq) + return msg, metadata, err + +} + +func request_ServiceB_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceBClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageB + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MethodTwo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ServiceB_MethodTwo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceBServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq OutMessageB + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.MethodTwo(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterServiceBHandlerServer registers the http handlers for service ServiceB to "mux". +// UnaryRPC :call ServiceBServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceBHandlerFromEndpoint instead. +func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceBServer) error { + + mux.Handle("POST", pattern_ServiceB_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceB_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceB_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceB_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ServiceB_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceB_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterServiceBHandlerFromEndpoint is same as RegisterServiceBHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterServiceBHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterServiceBHandler(ctx, mux, conn) +} + +// RegisterServiceBHandler registers the http handlers for service ServiceB to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterServiceBHandlerClient(ctx, mux, NewServiceBClient(conn)) +} + +// RegisterServiceBHandlerClient registers the http handlers for service ServiceB +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ServiceBClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ServiceBClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ServiceBClient" to call the correct interceptors. +func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceBClient) error { + + mux.Handle("POST", pattern_ServiceB_MethodOne_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceB_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceB_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_ServiceB_MethodTwo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ServiceB_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ServiceB_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_ServiceB_MethodOne_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "b", "1"}, "")) + + pattern_ServiceB_MethodTwo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "b", "2"}, "")) +) + +var ( + forward_ServiceB_MethodOne_0 = runtime.ForwardResponseMessage + + forward_ServiceB_MethodTwo_0 = runtime.ForwardResponseMessage +) diff --git a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json new file mode 100644 index 00000000000..f9f2d99230c --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json @@ -0,0 +1,151 @@ +{ + "swagger": "2.0", + "info": { + "title": "Merging Services", + "description": "This is an example of merging two proto files.", + "version": "version not set" + }, + "tags": [ + { + "name": "ServiceB" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/b/1": { + "post": { + "summary": "ServiceB.MethodOne receives InMessageB and returns OutMessageB", + "description": "Here is the detail explanation about ServiceB.MethodOne.", + "operationId": "ServiceB_MethodOne", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbOutMessageB" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbInMessageB" + } + } + ], + "tags": [ + "ServiceB" + ] + } + }, + "/v1/example/b/2": { + "post": { + "summary": "ServiceB.MethodTwo receives OutMessageB and returns InMessageB", + "description": "Here is the detail explanation about ServiceB.MethodTwo.", + "operationId": "ServiceB_MethodTwo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbInMessageB" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbOutMessageB" + } + } + ], + "tags": [ + "ServiceB" + ] + } + } + }, + "definitions": { + "examplepbInMessageB": { + "type": "object", + "properties": { + "value": { + "type": "string", + "title": "Here is the explanation about InMessageB.values" + } + }, + "description": "InMessageB represents a message to ServiceB." + }, + "examplepbOutMessageB": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Here is the explanation about OutMessageB.value" + } + }, + "description": "OutMessageB represents a message returned from ServiceB." + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go b/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go new file mode 100644 index 00000000000..f04585c0beb --- /dev/null +++ b/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go @@ -0,0 +1,143 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package examplepb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion7 + +// ServiceBClient is the client API for ServiceB service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ServiceBClient interface { + // ServiceB.MethodOne receives InMessageB and returns OutMessageB + // + // Here is the detail explanation about ServiceB.MethodOne. + MethodOne(ctx context.Context, in *InMessageB, opts ...grpc.CallOption) (*OutMessageB, error) + // ServiceB.MethodTwo receives OutMessageB and returns InMessageB + // + // Here is the detail explanation about ServiceB.MethodTwo. + MethodTwo(ctx context.Context, in *OutMessageB, opts ...grpc.CallOption) (*InMessageB, error) +} + +type serviceBClient struct { + cc grpc.ClientConnInterface +} + +func NewServiceBClient(cc grpc.ClientConnInterface) ServiceBClient { + return &serviceBClient{cc} +} + +func (c *serviceBClient) MethodOne(ctx context.Context, in *InMessageB, opts ...grpc.CallOption) (*OutMessageB, error) { + out := new(OutMessageB) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceBClient) MethodTwo(ctx context.Context, in *OutMessageB, opts ...grpc.CallOption) (*InMessageB, error) { + out := new(InMessageB) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ServiceBServer is the server API for ServiceB service. +// All implementations should embed UnimplementedServiceBServer +// for forward compatibility +type ServiceBServer interface { + // ServiceB.MethodOne receives InMessageB and returns OutMessageB + // + // Here is the detail explanation about ServiceB.MethodOne. + MethodOne(context.Context, *InMessageB) (*OutMessageB, error) + // ServiceB.MethodTwo receives OutMessageB and returns InMessageB + // + // Here is the detail explanation about ServiceB.MethodTwo. + MethodTwo(context.Context, *OutMessageB) (*InMessageB, error) +} + +// UnimplementedServiceBServer should be embedded to have forward compatible implementations. +type UnimplementedServiceBServer struct { +} + +func (UnimplementedServiceBServer) MethodOne(context.Context, *InMessageB) (*OutMessageB, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodOne not implemented") +} +func (UnimplementedServiceBServer) MethodTwo(context.Context, *OutMessageB) (*InMessageB, error) { + return nil, status.Errorf(codes.Unimplemented, "method MethodTwo not implemented") +} + +// UnsafeServiceBServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ServiceBServer will +// result in compilation errors. +type UnsafeServiceBServer interface { + mustEmbedUnimplementedServiceBServer() +} + +func RegisterServiceBServer(s *grpc.Server, srv ServiceBServer) { + s.RegisterService(&_ServiceB_serviceDesc, srv) +} + +func _ServiceB_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InMessageB) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceBServer).MethodOne(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceBServer).MethodOne(ctx, req.(*InMessageB)) + } + return interceptor(ctx, in, info, handler) +} + +func _ServiceB_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OutMessageB) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceBServer).MethodTwo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceBServer).MethodTwo(ctx, req.(*OutMessageB)) + } + return interceptor(ctx, in, info, handler) +} + +var _ServiceB_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceB", + HandlerType: (*ServiceBServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MethodOne", + Handler: _ServiceB_MethodOne_Handler, + }, + { + MethodName: "MethodTwo", + Handler: _ServiceB_MethodTwo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/openapi_merge_b.proto", +} diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index a52c5dc7fa8..7d47f0e4abe 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type RepeatedResponseBodyOut_Response_ResponseType int32 const ( diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 76adbe8d61a..ce1e5e19d60 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -247,8 +247,7 @@ "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." } }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." } } } diff --git a/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..561551b399b --- /dev/null +++ b/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml @@ -0,0 +1,8 @@ +version: v1beta1 +plugins: + - name: grpc-gateway + out: . + opt: + - paths=source_relative + - standalone=true + - grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index c6619d78fdc..7fc63896d5a 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/stream.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -24,10 +23,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - var File_examples_internal_proto_examplepb_stream_proto protoreflect.FileDescriptor var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 95e5f6adbff..2f3ef5004fa 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -468,8 +468,7 @@ "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." } }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." }, "subStringMessage": { "type": "object", diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..ffed173013a --- /dev/null +++ b/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml @@ -0,0 +1,12 @@ +version: v1beta1 +plugins: + - name: grpc-gateway + out: . + opt: + - paths=source_relative + - grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml + - name: openapiv2 + out: . + opt: + - grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml + - openapi_configuration=examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index d4b19e873f8..525686903b3 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service @@ -15,7 +15,6 @@ package examplepb import ( - proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -30,10 +29,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // Embedded represents a message embedded in SimpleMessage. type UnannotatedEmbedded struct { state protoimpl.MessageState diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 727dfc149ce..83eacefc671 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -62,12 +62,6 @@ "format": "integer" } }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, "503": { "description": "Returned when the resource is temporarily unavailable.", "schema": {}, @@ -126,12 +120,6 @@ "format": "integer" } }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, "503": { "description": "Returned when the resource is temporarily unavailable.", "schema": {}, @@ -245,12 +233,6 @@ "format": "string" } }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, "default": { "description": "An unexpected error response.", "schema": { @@ -295,12 +277,6 @@ "format": "string" } }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, "default": { "description": "An unexpected error response.", "schema": { @@ -385,15 +361,6 @@ } }, "definitions": { - "examplepbNumericEnum": { - "type": "string", - "enum": [ - "ZERO", - "ONE" - ], - "default": "ZERO", - "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" - }, "examplepbUnannotatedEmbedded": { "type": "object", "properties": { @@ -462,39 +429,31 @@ "type": "object", "properties": { "typeUrl": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "type": "string" }, "value": { "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." + "format": "byte" } - }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } }, "rpcStatus": { "type": "object", "properties": { "code": { "type": "integer", - "format": "int32", - "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + "format": "int32" }, "message": { - "type": "string", - "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + "type": "string" }, "details": { "type": "array", "items": { "$ref": "#/definitions/protobufAny" - }, - "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } } - }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + } } }, "securityDefinitions": { diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml index 125de1d5a75..6329dad9472 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml @@ -12,33 +12,28 @@ openapiOptions: license: name: BSD 3-Clause License url: https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt - version: '1.0' + version: "1.0" extensions: x-something-something: yadda schemes: - - HTTP - - HTTPS - - WSS + - HTTP + - HTTPS + - WSS consumes: - - application/json - - application/x-foo-mime + - application/json + - application/x-foo-mime produces: - - application/json - - application/x-foo-mime + - application/json + - application/x-foo-mime responses: - '403': + "403": description: Returned when the user does not have permission to access the resource. - '404': + "404": description: Returned when the resource does not exist. schema: jsonSchema: type: - - STRING - '418': - description: I'm a teapot. - schema: - jsonSchema: - ref: ".grpc.gateway.examples.internal.proto.examplepb.NumericEnum" + - STRING securityDefinitions: security: ApiKeyAuth: @@ -53,22 +48,22 @@ openapiOptions: BasicAuth: type: TYPE_BASIC security: - - securityRequirement: - ApiKeyAuth: {} - BasicAuth: {} - - securityRequirement: - ApiKeyAuth: {} - OAuth2: - scope: - - read - - write + - securityRequirement: + ApiKeyAuth: {} + BasicAuth: {} + - securityRequirement: + ApiKeyAuth: {} + OAuth2: + scope: + - read + - write externalDocs: description: More about gRPC-Gateway url: https://github.com/grpc-ecosystem/grpc-gateway extensions: x-grpc-gateway-baz-list: - - one - - true + - one + - true x-grpc-gateway-foo: bar service: - service: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService @@ -86,14 +81,14 @@ openapiOptions: url: "https://github.com/grpc-ecosystem/grpc-gateway" description: "Find out more Echo" responses: - '200': + "200": examples: "application/json": '{"value": "the input value"}' - '503': + "503": description: Returned when the resource is temporarily unavailable. extensions: x-number: 100 - '404': + "404": description: Returned when the resource does not exist. schema: jsonSchema: @@ -108,10 +103,10 @@ openapiOptions: external_docs: url: "https://github.com/grpc-ecosystem/grpc-gateway" description: "Find out more about UnannotatedSimpleMessage" - example: "{\"id\": \"myid\"}" + example: '{"id": "myid"}' field: - field: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.num option: description: "Int value field" default: "42" - required: ['num'] + required: ["num"] diff --git a/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml b/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml new file mode 100644 index 00000000000..029ebddc595 --- /dev/null +++ b/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml @@ -0,0 +1,6 @@ +version: v1beta1 +plugins: + - name: openapiv2 + out: . + opt: + - use_go_templates=true diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 476eb27dded..cdfa13fa31b 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type LoginRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 21b322bab2e..18975ccfad1 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -147,39 +147,31 @@ "type": "object", "properties": { "typeUrl": { - "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "type": "string" }, "value": { "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." + "format": "byte" } - }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + } }, "rpcStatus": { "type": "object", "properties": { "code": { "type": "integer", - "format": "int32", - "description": "The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]." + "format": "int32" }, "message": { - "type": "string", - "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client." + "type": "string" }, "details": { "type": "array", "items": { "$ref": "#/definitions/protobufAny" - }, - "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } } - }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + } } } } diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 908f41c2d15..7ba7a6f1069 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -24,10 +23,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type Wrappers struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index adf850c9c38..ca05367e616 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -458,8 +458,7 @@ "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." } }, - "description": "- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\n[google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n it may embed the `Status` in the normal response to indicate the partial\n errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n `Status` message should be used directly inside batch response, one for\n each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n results in its response, the status of those operations should be\n represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n be used directly after any stripping needed for security/privacy reasons.", - "title": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:" + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." } } } diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 3066ca8b21a..3f7a02104ec 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type PathEnum int32 const ( diff --git a/examples/internal/proto/pathenum/path_enum.swagger.json b/examples/internal/proto/pathenum/path_enum.swagger.json new file mode 100644 index 00000000000..bb34b61b522 --- /dev/null +++ b/examples/internal/proto/pathenum/path_enum.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/pathenum/path_enum.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 86e48cb0b31..7b52c6f92b5 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/sub/message.proto package sub import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type StringMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/proto/sub/message.swagger.json b/examples/internal/proto/sub/message.swagger.json new file mode 100644 index 00000000000..590b213747f --- /dev/null +++ b/examples/internal/proto/sub/message.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/sub/message.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 73432a462f4..88ea3f41166 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: examples/internal/proto/sub2/message.proto package sub2 import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type IdMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/examples/internal/proto/sub2/message.swagger.json b/examples/internal/proto/sub2/message.swagger.json new file mode 100644 index 00000000000..090bc92d0c3 --- /dev/null +++ b/examples/internal/proto/sub2/message.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/sub2/message.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/go.mod b/go.mod index 1dedf8c7822..225d6b28dd2 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.14 require ( github.com/antihax/optional v1.0.0 + github.com/bufbuild/buf v0.37.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.3 @@ -13,6 +14,5 @@ require ( google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 - google.golang.org/protobuf v1.25.0 - gopkg.in/yaml.v2 v2.2.3 // indirect + google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 ) diff --git a/go.sum b/go.sum index 413f6fb5397..94f8337824b 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,7 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -31,32 +32,72 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bufbuild/buf v0.37.0 h1:11zJVA0D4uJVGOC9h+oOVHrKKoBgMYIqJJ0d1Xt6oeQ= +github.com/bufbuild/buf v0.37.0/go.mod h1:lQ1m2HkIaGOFba6w/aC3KYBHhKEOESP3gaAEpS3dAFM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= +github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -95,6 +136,7 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -110,33 +152,157 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0 h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jhump/protoreflect v1.8.1 h1:z7Ciiz3Bz37zSd485fbiTW8ABafIasyOWZI0N9EUUdo= +github.com/jhump/protoreflect v1.8.1/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug= +github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7 h1:O63eWlXlvyw4YdsuatjRIU6emvJ2fqz+PTdMEoxIT2s= +github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/twitchtv/twirp v7.1.0+incompatible h1:3fNSDoSPyq+fTrifIvGue9XM/tptzuhiGY83rxPVNUg= +github.com/twitchtv/twirp v7.1.0+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.6 h1:BdkrbWrzDlV9dnbzoP7sfN+dHheJ4J9JOaYxcUDL+ok= +go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -164,6 +330,7 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -172,9 +339,14 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -200,6 +372,9 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -217,7 +392,12 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -245,6 +425,11 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -252,15 +437,19 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A= @@ -271,6 +460,9 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -292,9 +484,12 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -356,6 +551,7 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 h1:pkt4FLyKaqUuYonDpjdYNhcyWRKxn9Fs8cttR9ldTHA= google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -370,6 +566,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= @@ -383,21 +581,33 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 h1:4RrxbALcCPvUQHPa4l06Wap5rBGTS6aTQIYrO3Ebdk8= +google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8/go.mod h1:hFxJC2f0epmp1elRCiEGJTKAWbwxZ2nvqZdHl3FQXCY= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/internal/codegenerator/parse_req_test.go b/internal/codegenerator/parse_req_test.go index 9463986513f..3c0c7971ab6 100644 --- a/internal/codegenerator/parse_req_test.go +++ b/internal/codegenerator/parse_req_test.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "io" - "reflect" "strings" "testing" @@ -16,28 +15,28 @@ import ( ) var parseReqTests = []struct { - name string - in io.Reader - out *pluginpb.CodeGeneratorRequest - err error + name string + in io.Reader + out *pluginpb.CodeGeneratorRequest + expectErr bool }{ { "Empty input should produce empty output", mustGetReader(&pluginpb.CodeGeneratorRequest{}), &pluginpb.CodeGeneratorRequest{}, - nil, + false, }, { "Invalid reader should produce error", &invalidReader{}, nil, - fmt.Errorf("failed to read code generator request: invalid reader"), + true, }, { "Invalid proto message should produce error", strings.NewReader("{}"), nil, - fmt.Errorf("failed to unmarshal code generator request: unexpected EOF"), + true, }, } @@ -45,8 +44,8 @@ func TestParseRequest(t *testing.T) { for _, tt := range parseReqTests { t.Run(tt.name, func(t *testing.T) { out, err := codegenerator.ParseRequest(tt.in) - if !reflect.DeepEqual(err, tt.err) { - t.Errorf("got %v, want %v", err, tt.err) + if tt.expectErr && err == nil { + t.Error("did not error as expected") } if diff := cmp.Diff(out, tt.out, protocmp.Transform()); diff != "" { t.Errorf(diff) diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index b4271c1e3a2..dbae4de1674 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig import ( - proto "github.com/golang/protobuf/proto" annotations "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // GrpcAPIService represents a stripped down version of google.api.Service . // Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto // The original imports 23 other protobuf files we are not interested in. If a significant diff --git a/internal/descriptor/apiconfig/apiconfig.swagger.json b/internal/descriptor/apiconfig/apiconfig.swagger.json new file mode 100644 index 00000000000..685eb474e49 --- /dev/null +++ b/internal/descriptor/apiconfig/apiconfig.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "internal/descriptor/apiconfig/apiconfig.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index 887d429fd3e..02605ed4ecd 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig import ( - proto "github.com/golang/protobuf/proto" options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // OpenAPIFileOption represents OpenAPI options on a file type OpenAPIFileOption struct { state protoimpl.MessageState diff --git a/internal/descriptor/openapiconfig/openapiconfig.swagger.json b/internal/descriptor/openapiconfig/openapiconfig.swagger.json new file mode 100644 index 00000000000..c5388481f9c --- /dev/null +++ b/internal/descriptor/openapiconfig/openapiconfig.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "internal/descriptor/openapiconfig/openapiconfig.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/protoc-gen-openapiv2/main_test.go b/protoc-gen-openapiv2/main_test.go index 514840a2faa..80feea35d0d 100644 --- a/protoc-gen-openapiv2/main_test.go +++ b/protoc-gen-openapiv2/main_test.go @@ -35,15 +35,15 @@ func TestParseReqParam(t *testing.T) { }, { name: "Test 1", - expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, - request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "apidocs", }, { name: "Test 2", - expected: map[string]string{"google/api/annotations.proto": "github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api"}, - request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis/google/api", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "test_name", }, diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index dbe5351688b..a6b02064a57 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: protoc-gen-openapiv2/options/annotations.proto package options import ( - proto "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*descriptor.FileOptions)(nil), diff --git a/protoc-gen-openapiv2/options/annotations.swagger.json b/protoc-gen-openapiv2/options/annotations.swagger.json new file mode 100644 index 00000000000..e1c57d8cbba --- /dev/null +++ b/protoc-gen-openapiv2/options/annotations.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "protoc-gen-openapiv2/options/annotations.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index e3ef175d0b0..f393af01cb8 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: protoc-gen-openapiv2/options/openapiv2.proto package options import ( - proto "github.com/golang/protobuf/proto" _struct "github.com/golang/protobuf/ptypes/struct" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,10 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // Scheme describes the schemes supported by the OpenAPI Swagger // and Operation objects. type Scheme int32 diff --git a/protoc-gen-openapiv2/options/openapiv2.swagger.json b/protoc-gen-openapiv2/options/openapiv2.swagger.json new file mode 100644 index 00000000000..c6aad71c90e --- /dev/null +++ b/protoc-gen-openapiv2/options/openapiv2.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "protoc-gen-openapiv2/options/openapiv2.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/repositories.bzl b/repositories.bzl index fc8fd275d8c..fc7ad176c07 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -7,12 +7,74 @@ def go_repositories(): sum = "h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=", version = "v0.0.1-2020.1.4", ) + go_repository( + name = "com_github_alecthomas_template", + importpath = "github.com/alecthomas/template", + sum = "h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=", + version = "v0.0.0-20160405071501-a0175ee3bccc", + ) + go_repository( + name = "com_github_alecthomas_units", + importpath = "github.com/alecthomas/units", + sum = "h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=", + version = "v0.0.0-20151022065526-2efee857e7cf", + ) + go_repository( name = "com_github_antihax_optional", importpath = "github.com/antihax/optional", sum = "h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=", version = "v1.0.0", ) + go_repository( + name = "com_github_armon_circbuf", + importpath = "github.com/armon/circbuf", + sum = "h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA=", + version = "v0.0.0-20150827004946-bbbad097214e", + ) + go_repository( + name = "com_github_armon_go_metrics", + importpath = "github.com/armon/go-metrics", + sum = "h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=", + version = "v0.0.0-20180917152333-f0300d1749da", + ) + go_repository( + name = "com_github_armon_go_radix", + importpath = "github.com/armon/go-radix", + sum = "h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=", + version = "v0.0.0-20180808171621-7fddfc383310", + ) + go_repository( + name = "com_github_beorn7_perks", + importpath = "github.com/beorn7/perks", + sum = "h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_bgentry_go_netrc", + importpath = "github.com/bgentry/go-netrc", + sum = "h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=", + version = "v0.0.0-20140422174119-9fd32a8b3d3d", + ) + go_repository( + name = "com_github_bgentry_speakeasy", + importpath = "github.com/bgentry/speakeasy", + sum = "h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_bketelsen_crypt", + importpath = "github.com/bketelsen/crypt", + sum = "h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc=", + version = "v0.0.3-0.20200106085610-5cbc8cc4026c", + ) + go_repository( + name = "com_github_bufbuild_buf", + importpath = "github.com/bufbuild/buf", + sum = "h1:11zJVA0D4uJVGOC9h+oOVHrKKoBgMYIqJJ0d1Xt6oeQ=", + version = "v0.37.0", + ) + go_repository( name = "com_github_burntsushi_toml", importpath = "github.com/BurntSushi/toml", @@ -32,6 +94,12 @@ def go_repositories(): sum = "h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=", version = "v0.2.1", ) + go_repository( + name = "com_github_cespare_xxhash", + importpath = "github.com/cespare/xxhash", + sum = "h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=", + version = "v1.1.0", + ) go_repository( name = "com_github_chzyer_logex", @@ -64,13 +132,62 @@ def go_repositories(): sum = "h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=", version = "v0.0.0-20201120205902-5459f2c99403", ) + go_repository( + name = "com_github_coreos_bbolt", + importpath = "github.com/coreos/bbolt", + sum = "h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=", + version = "v1.3.2", + ) + go_repository( + name = "com_github_coreos_etcd", + importpath = "github.com/coreos/etcd", + sum = "h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=", + version = "v3.3.13+incompatible", + ) + go_repository( + name = "com_github_coreos_go_semver", + importpath = "github.com/coreos/go-semver", + sum = "h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=", + version = "v0.3.0", + ) + go_repository( + name = "com_github_coreos_go_systemd", + importpath = "github.com/coreos/go-systemd", + sum = "h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=", + version = "v0.0.0-20190321100706-95778dfbb74e", + ) + go_repository( + name = "com_github_coreos_pkg", + importpath = "github.com/coreos/pkg", + sum = "h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=", + version = "v0.0.0-20180928190104-399ea9e2e55f", + ) + go_repository( + name = "com_github_cpuguy83_go_md2man_v2", + importpath = "github.com/cpuguy83/go-md2man/v2", + sum = "h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=", + version = "v2.0.0", + ) go_repository( name = "com_github_davecgh_go_spew", importpath = "github.com/davecgh/go-spew", - sum = "h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=", - version = "v1.1.0", + sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", + version = "v1.1.1", ) + go_repository( + name = "com_github_dgrijalva_jwt_go", + importpath = "github.com/dgrijalva/jwt-go", + sum = "h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=", + version = "v3.2.0+incompatible", + ) + go_repository( + name = "com_github_dgryski_go_sip13", + importpath = "github.com/dgryski/go-sip13", + sum = "h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4=", + version = "v0.0.0-20181026042036-e10d5fee7954", + ) + go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", @@ -83,6 +200,19 @@ def go_repositories(): sum = "h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=", version = "v0.1.0", ) + go_repository( + name = "com_github_fatih_color", + importpath = "github.com/fatih/color", + sum = "h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=", + version = "v1.7.0", + ) + go_repository( + name = "com_github_fsnotify_fsnotify", + importpath = "github.com/fsnotify/fsnotify", + sum = "h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=", + version = "v1.4.7", + ) + go_repository( name = "com_github_ghodss_yaml", importpath = "github.com/ghodss/yaml", @@ -102,6 +232,43 @@ def go_repositories(): sum = "h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I=", version = "v0.0.0-20200222043503-6f7a984d4dc4", ) + go_repository( + name = "com_github_go_kit_kit", + importpath = "github.com/go-kit/kit", + sum = "h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=", + version = "v0.8.0", + ) + go_repository( + name = "com_github_go_logfmt_logfmt", + importpath = "github.com/go-logfmt/logfmt", + sum = "h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_go_stack_stack", + importpath = "github.com/go-stack/stack", + sum = "h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=", + version = "v1.8.0", + ) + go_repository( + name = "com_github_gofrs_flock", + importpath = "github.com/gofrs/flock", + sum = "h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY=", + version = "v0.8.0", + ) + go_repository( + name = "com_github_gofrs_uuid", + importpath = "github.com/gofrs/uuid", + sum = "h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=", + version = "v4.0.0+incompatible", + ) + go_repository( + name = "com_github_gogo_protobuf", + importpath = "github.com/gogo/protobuf", + sum = "h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=", + version = "v1.2.1", + ) + go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", @@ -178,30 +345,239 @@ def go_repositories(): sum = "h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=", version = "v2.0.5", ) + go_repository( + name = "com_github_gopherjs_gopherjs", + importpath = "github.com/gopherjs/gopherjs", + sum = "h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=", + version = "v0.0.0-20181017120253-0766667cb4d1", + ) + go_repository( + name = "com_github_gordonklaus_ineffassign", + importpath = "github.com/gordonklaus/ineffassign", + sum = "h1:vc7Dmrk4JwS0ZPS6WZvWlwDflgDTA26jItmbSj83nug=", + version = "v0.0.0-20200309095847-7953dde2c7bf", + ) + go_repository( + name = "com_github_gorilla_websocket", + importpath = "github.com/gorilla/websocket", + sum = "h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=", + version = "v1.4.2", + ) + go_repository( + name = "com_github_grpc_ecosystem_go_grpc_middleware", + importpath = "github.com/grpc-ecosystem/go-grpc-middleware", + sum = "h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_grpc_ecosystem_go_grpc_prometheus", + importpath = "github.com/grpc-ecosystem/go-grpc-prometheus", + sum = "h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_grpc_ecosystem_grpc_gateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway", + sum = "h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI=", + version = "v1.9.0", + ) + go_repository( + name = "com_github_hashicorp_consul_api", + importpath = "github.com/hashicorp/consul/api", + sum = "h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_hashicorp_consul_sdk", + importpath = "github.com/hashicorp/consul/sdk", + sum = "h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY=", + version = "v0.1.1", + ) + go_repository( + name = "com_github_hashicorp_errwrap", + importpath = "github.com/hashicorp/errwrap", + sum = "h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_cleanhttp", + importpath = "github.com/hashicorp/go-cleanhttp", + sum = "h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=", + version = "v0.5.1", + ) + go_repository( + name = "com_github_hashicorp_go_immutable_radix", + importpath = "github.com/hashicorp/go-immutable-radix", + sum = "h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_msgpack", + importpath = "github.com/hashicorp/go-msgpack", + sum = "h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=", + version = "v0.5.3", + ) + go_repository( + name = "com_github_hashicorp_go_multierror", + importpath = "github.com/hashicorp/go-multierror", + sum = "h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_net", + importpath = "github.com/hashicorp/go.net", + sum = "h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw=", + version = "v0.0.1", + ) + go_repository( + name = "com_github_hashicorp_go_rootcerts", + importpath = "github.com/hashicorp/go-rootcerts", + sum = "h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_sockaddr", + importpath = "github.com/hashicorp/go-sockaddr", + sum = "h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_syslog", + importpath = "github.com/hashicorp/go-syslog", + sum = "h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_uuid", + importpath = "github.com/hashicorp/go-uuid", + sum = "h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=", + version = "v1.0.1", + ) + go_repository( name = "com_github_hashicorp_golang_lru", importpath = "github.com/hashicorp/golang-lru", sum = "h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=", version = "v0.5.1", ) + go_repository( + name = "com_github_hashicorp_hcl", + importpath = "github.com/hashicorp/hcl", + sum = "h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_logutils", + importpath = "github.com/hashicorp/logutils", + sum = "h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_mdns", + importpath = "github.com/hashicorp/mdns", + sum = "h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_memberlist", + importpath = "github.com/hashicorp/memberlist", + sum = "h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M=", + version = "v0.1.3", + ) + go_repository( + name = "com_github_hashicorp_serf", + importpath = "github.com/hashicorp/serf", + sum = "h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0=", + version = "v0.8.2", + ) + go_repository( name = "com_github_ianlancetaylor_demangle", importpath = "github.com/ianlancetaylor/demangle", sum = "h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c=", version = "v0.0.0-20181102032728-5e5cf60278f6", ) + go_repository( + name = "com_github_inconshreveable_mousetrap", + importpath = "github.com/inconshreveable/mousetrap", + sum = "h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_jhump_protoreflect", + importpath = "github.com/jhump/protoreflect", + sum = "h1:z7Ciiz3Bz37zSd485fbiTW8ABafIasyOWZI0N9EUUdo=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_jonboulle_clockwork", + importpath = "github.com/jonboulle/clockwork", + sum = "h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_json_iterator_go", + importpath = "github.com/json-iterator/go", + sum = "h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=", + version = "v1.1.6", + ) + go_repository( name = "com_github_jstemmer_go_junit_report", importpath = "github.com/jstemmer/go-junit-report", sum = "h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=", version = "v0.9.1", ) + go_repository( + name = "com_github_jtolds_gls", + importpath = "github.com/jtolds/gls", + sum = "h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=", + version = "v4.20.0+incompatible", + ) + go_repository( + name = "com_github_julienschmidt_httprouter", + importpath = "github.com/julienschmidt/httprouter", + sum = "h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_kisielk_errcheck", + importpath = "github.com/kisielk/errcheck", + sum = "h1:ZqfnKyx9KGpRcW04j5nnPDgRgoXUeLh2YFBeFzphcA0=", + version = "v1.1.0", + ) + go_repository( name = "com_github_kisielk_gotool", importpath = "github.com/kisielk/gotool", sum = "h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=", version = "v1.0.0", ) + go_repository( + name = "com_github_klauspost_compress", + importpath = "github.com/klauspost/compress", + sum = "h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg=", + version = "v1.11.7", + ) + go_repository( + name = "com_github_klauspost_pgzip", + importpath = "github.com/klauspost/pgzip", + sum = "h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=", + version = "v1.2.5", + ) + go_repository( + name = "com_github_konsorten_go_windows_terminal_sequences", + importpath = "github.com/konsorten/go-windows-terminal-sequences", + sum = "h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_kr_logfmt", + importpath = "github.com/kr/logfmt", + sum = "h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=", + version = "v0.0.0-20140226030751-b84e30acd515", + ) + go_repository( name = "com_github_kr_pretty", importpath = "github.com/kr/pretty", @@ -220,18 +596,177 @@ def go_repositories(): sum = "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=", version = "v0.1.0", ) + go_repository( + name = "com_github_magiconair_properties", + importpath = "github.com/magiconair/properties", + sum = "h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=", + version = "v1.8.1", + ) + go_repository( + name = "com_github_mattn_go_colorable", + importpath = "github.com/mattn/go-colorable", + sum = "h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=", + version = "v0.0.9", + ) + go_repository( + name = "com_github_mattn_go_isatty", + importpath = "github.com/mattn/go-isatty", + sum = "h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=", + version = "v0.0.3", + ) + go_repository( + name = "com_github_matttproud_golang_protobuf_extensions", + importpath = "github.com/matttproud/golang_protobuf_extensions", + sum = "h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_miekg_dns", + importpath = "github.com/miekg/dns", + sum = "h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=", + version = "v1.0.14", + ) + go_repository( + name = "com_github_mitchellh_cli", + importpath = "github.com/mitchellh/cli", + sum = "h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_go_homedir", + importpath = "github.com/mitchellh/go-homedir", + sum = "h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=", + version = "v1.1.0", + ) + go_repository( + name = "com_github_mitchellh_go_testing_interface", + importpath = "github.com/mitchellh/go-testing-interface", + sum = "h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_gox", + importpath = "github.com/mitchellh/gox", + sum = "h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_mitchellh_iochan", + importpath = "github.com/mitchellh/iochan", + sum = "h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_mitchellh_mapstructure", + importpath = "github.com/mitchellh/mapstructure", + sum = "h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=", + version = "v1.1.2", + ) + go_repository( + name = "com_github_modern_go_concurrent", + importpath = "github.com/modern-go/concurrent", + sum = "h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=", + version = "v0.0.0-20180306012644-bacd9c7ef1dd", + ) + go_repository( + name = "com_github_modern_go_reflect2", + importpath = "github.com/modern-go/reflect2", + sum = "h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=", + version = "v1.0.1", + ) + go_repository( + name = "com_github_mwitkow_go_conntrack", + importpath = "github.com/mwitkow/go-conntrack", + sum = "h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc=", + version = "v0.0.0-20161129095857-cc309e4a2223", + ) + go_repository( + name = "com_github_nishanths_predeclared", + importpath = "github.com/nishanths/predeclared", + sum = "h1:3f0nxAmdj/VoCGN/ijdMy7bj6SBagaqYg1B0hu8clMA=", + version = "v0.0.0-20200524104333-86fad755b4d3", + ) + go_repository( + name = "com_github_oklog_ulid", + importpath = "github.com/oklog/ulid", + sum = "h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=", + version = "v1.3.1", + ) + go_repository( + name = "com_github_oneofone_xxhash", + importpath = "github.com/OneOfOne/xxhash", + sum = "h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=", + version = "v1.2.2", + ) + go_repository( + name = "com_github_pascaldekloe_goe", + importpath = "github.com/pascaldekloe/goe", + sum = "h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=", + version = "v0.0.0-20180627143212-57f6aae5913c", + ) + go_repository( + name = "com_github_pelletier_go_toml", + importpath = "github.com/pelletier/go-toml", + sum = "h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_pkg_errors", + importpath = "github.com/pkg/errors", + sum = "h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=", + version = "v0.9.1", + ) + go_repository( + name = "com_github_pkg_profile", + importpath = "github.com/pkg/profile", + sum = "h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug=", + version = "v1.5.0", + ) + go_repository( name = "com_github_pmezard_go_difflib", importpath = "github.com/pmezard/go-difflib", sum = "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=", version = "v1.0.0", ) + go_repository( + name = "com_github_posener_complete", + importpath = "github.com/posener/complete", + sum = "h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w=", + version = "v1.1.1", + ) + go_repository( + name = "com_github_prometheus_client_golang", + importpath = "github.com/prometheus/client_golang", + sum = "h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8=", + version = "v0.9.3", + ) + go_repository( name = "com_github_prometheus_client_model", importpath = "github.com/prometheus/client_model", sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", version = "v0.0.0-20190812154241-14fe0d1b01d4", ) + go_repository( + name = "com_github_prometheus_common", + importpath = "github.com/prometheus/common", + sum = "h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=", + version = "v0.4.0", + ) + go_repository( + name = "com_github_prometheus_procfs", + importpath = "github.com/prometheus/procfs", + sum = "h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY=", + version = "v0.0.0-20190507164030-5867b95ac084", + ) + go_repository( + name = "com_github_prometheus_tsdb", + importpath = "github.com/prometheus/tsdb", + sum = "h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=", + version = "v0.7.1", + ) + go_repository( name = "com_github_rogpeppe_fastuuid", importpath = "github.com/rogpeppe/fastuuid", @@ -245,18 +780,134 @@ def go_repositories(): sum = "h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=", version = "v1.3.0", ) + go_repository( + name = "com_github_russross_blackfriday_v2", + importpath = "github.com/russross/blackfriday/v2", + sum = "h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=", + version = "v2.0.1", + ) + go_repository( + name = "com_github_ryanuber_columnize", + importpath = "github.com/ryanuber/columnize", + sum = "h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M=", + version = "v0.0.0-20160712163229-9b3edd62028f", + ) + go_repository( + name = "com_github_sean_seed", + importpath = "github.com/sean-/seed", + sum = "h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=", + version = "v0.0.0-20170313163322-e2103e2c3529", + ) + go_repository( + name = "com_github_shurcool_sanitized_anchor_name", + importpath = "github.com/shurcooL/sanitized_anchor_name", + sum = "h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_sirupsen_logrus", + importpath = "github.com/sirupsen/logrus", + sum = "h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_smartystreets_assertions", + importpath = "github.com/smartystreets/assertions", + sum = "h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=", + version = "v0.0.0-20180927180507-b2de0cb4f26d", + ) + go_repository( + name = "com_github_smartystreets_goconvey", + importpath = "github.com/smartystreets/goconvey", + sum = "h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=", + version = "v1.6.4", + ) + go_repository( + name = "com_github_soheilhy_cmux", + importpath = "github.com/soheilhy/cmux", + sum = "h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=", + version = "v0.1.4", + ) + go_repository( + name = "com_github_spaolacci_murmur3", + importpath = "github.com/spaolacci/murmur3", + sum = "h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=", + version = "v0.0.0-20180118202830-f09979ecbc72", + ) + go_repository( + name = "com_github_spf13_afero", + importpath = "github.com/spf13/afero", + sum = "h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=", + version = "v1.1.2", + ) + go_repository( + name = "com_github_spf13_cast", + importpath = "github.com/spf13/cast", + sum = "h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=", + version = "v1.3.0", + ) + go_repository( + name = "com_github_spf13_cobra", + importpath = "github.com/spf13/cobra", + sum = "h1:O63eWlXlvyw4YdsuatjRIU6emvJ2fqz+PTdMEoxIT2s=", + version = "v1.0.1-0.20201006035406-b97b5ead31f7", + ) + go_repository( + name = "com_github_spf13_jwalterweatherman", + importpath = "github.com/spf13/jwalterweatherman", + sum = "h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_spf13_pflag", + importpath = "github.com/spf13/pflag", + sum = "h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=", + version = "v1.0.5", + ) + go_repository( + name = "com_github_spf13_viper", + importpath = "github.com/spf13/viper", + sum = "h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=", + version = "v1.7.0", + ) + go_repository( name = "com_github_stretchr_objx", importpath = "github.com/stretchr/objx", - sum = "h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=", - version = "v0.1.0", + sum = "h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=", + version = "v0.1.1", ) go_repository( name = "com_github_stretchr_testify", importpath = "github.com/stretchr/testify", - sum = "h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=", - version = "v1.5.1", + sum = "h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=", + version = "v1.7.0", ) + go_repository( + name = "com_github_subosito_gotenv", + importpath = "github.com/subosito/gotenv", + sum = "h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=", + version = "v1.2.0", + ) + go_repository( + name = "com_github_tmc_grpc_websocket_proxy", + importpath = "github.com/tmc/grpc-websocket-proxy", + sum = "h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=", + version = "v0.0.0-20190109142713-0ad062ec5ee5", + ) + go_repository( + name = "com_github_twitchtv_twirp", + importpath = "github.com/twitchtv/twirp", + sum = "h1:3fNSDoSPyq+fTrifIvGue9XM/tptzuhiGY83rxPVNUg=", + version = "v7.1.0+incompatible", + ) + go_repository( + name = "com_github_xiang90_probing", + importpath = "github.com/xiang90/probing", + sum = "h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=", + version = "v0.0.0-20190116061207-43a291ad63a2", + ) + go_repository( name = "com_github_yuin_goldmark", importpath = "github.com/yuin/goldmark", @@ -282,6 +933,13 @@ def go_repositories(): sum = "h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=", version = "v1.1.0", ) + go_repository( + name = "com_google_cloud_go_firestore", + importpath = "cloud.google.com/go/firestore", + sum = "h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY=", + version = "v1.1.0", + ) + go_repository( name = "com_google_cloud_go_pubsub", importpath = "cloud.google.com/go/pubsub", @@ -300,6 +958,13 @@ def go_repositories(): sum = "h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=", version = "v0.0.0-20190408044501-666a987793e9", ) + go_repository( + name = "in_gopkg_alecthomas_kingpin_v2", + importpath = "gopkg.in/alecthomas/kingpin.v2", + sum = "h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=", + version = "v2.2.6", + ) + go_repository( name = "in_gopkg_check_v1", importpath = "gopkg.in/check.v1", @@ -313,18 +978,43 @@ def go_repositories(): sum = "h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=", version = "v2.1.0", ) + go_repository( + name = "in_gopkg_ini_v1", + importpath = "gopkg.in/ini.v1", + sum = "h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=", + version = "v1.51.0", + ) + go_repository( + name = "in_gopkg_resty_v1", + importpath = "gopkg.in/resty.v1", + sum = "h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=", + version = "v1.12.0", + ) + go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=", - version = "v2.2.3", + sum = "h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=", + version = "v2.3.0", + ) + go_repository( + name = "in_gopkg_yaml_v3", + importpath = "gopkg.in/yaml.v3", + sum = "h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=", + version = "v3.0.0-20210107192922-496545a6307b", + ) + go_repository( + name = "io_etcd_go_bbolt", + importpath = "go.etcd.io/bbolt", + sum = "h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=", + version = "v1.3.2", ) go_repository( name = "io_opencensus_go", importpath = "go.opencensus.io", - sum = "h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=", - version = "v0.22.4", + sum = "h1:BdkrbWrzDlV9dnbzoP7sfN+dHheJ4J9JOaYxcUDL+ok=", + version = "v0.22.6", ) go_repository( name = "io_rsc_binaryregexp", @@ -378,8 +1068,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=", - version = "v1.25.0", + sum = "h1:4RrxbALcCPvUQHPa4l06Wap5rBGTS6aTQIYrO3Ebdk8=", + version = "v1.25.1-0.20201208041424-160c7477e0e8", ) go_repository( name = "org_golang_x_crypto", @@ -422,8 +1112,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=", - version = "v0.0.0-20200822124328-c89045814202", + sum = "h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=", + version = "v0.0.0-20210119194325-5f4716e94777", ) go_repository( name = "org_golang_x_oauth2", @@ -440,14 +1130,21 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw=", - version = "v0.0.0-20200803210538-64077c9b5642", + sum = "h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=", + version = "v0.0.0-20210124154548-22da62e12c0c", + ) + go_repository( + name = "org_golang_x_term", + importpath = "golang.org/x/term", + sum = "h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=", + version = "v0.0.0-20201126162022-7de9c90e9dd1", ) + go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=", - version = "v0.3.3", + sum = "h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=", + version = "v0.3.5", ) go_repository( @@ -469,3 +1166,27 @@ def go_repositories(): sum = "h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=", version = "v0.0.0-20200804184101-5ec99f83aff1", ) + go_repository( + name = "org_uber_go_atomic", + importpath = "go.uber.org/atomic", + sum = "h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=", + version = "v1.7.0", + ) + go_repository( + name = "org_uber_go_multierr", + importpath = "go.uber.org/multierr", + sum = "h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=", + version = "v1.6.0", + ) + go_repository( + name = "org_uber_go_tools", + importpath = "go.uber.org/tools", + sum = "h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=", + version = "v0.0.0-20190618225709-2cfd321de3ee", + ) + go_repository( + name = "org_uber_go_zap", + importpath = "go.uber.org/zap", + sum = "h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=", + version = "v1.16.0", + ) diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 4efdec8b77a..ba89b67181d 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: runtime/internal/examplepb/example.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" field_mask "google.golang.org/genproto/protobuf/field_mask" @@ -24,10 +23,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // NumericEnum is one or zero. type NumericEnum int32 diff --git a/runtime/internal/examplepb/example.swagger.json b/runtime/internal/examplepb/example.swagger.json new file mode 100644 index 00000000000..fd91266af80 --- /dev/null +++ b/runtime/internal/examplepb/example.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "runtime/internal/examplepb/example.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/runtime/internal/examplepb/example_grpc.pb.go b/runtime/internal/examplepb/example_grpc.pb.go deleted file mode 100644 index fbeca54dff9..00000000000 --- a/runtime/internal/examplepb/example_grpc.pb.go +++ /dev/null @@ -1,86 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. - -package examplepb - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// NestedServiceClient is the client API for NestedService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type NestedServiceClient interface { - Update(ctx context.Context, in *UpdateNestedRequest, opts ...grpc.CallOption) (*NestedOuter, error) -} - -type nestedServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewNestedServiceClient(cc grpc.ClientConnInterface) NestedServiceClient { - return &nestedServiceClient{cc} -} - -func (c *nestedServiceClient) Update(ctx context.Context, in *UpdateNestedRequest, opts ...grpc.CallOption) (*NestedOuter, error) { - out := new(NestedOuter) - err := c.cc.Invoke(ctx, "/grpc.gateway.runtime.internal.examplepb.NestedService/Update", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// NestedServiceServer is the server API for NestedService service. -type NestedServiceServer interface { - Update(context.Context, *UpdateNestedRequest) (*NestedOuter, error) -} - -// UnimplementedNestedServiceServer can be embedded to have forward compatible implementations. -type UnimplementedNestedServiceServer struct { -} - -func (*UnimplementedNestedServiceServer) Update(context.Context, *UpdateNestedRequest) (*NestedOuter, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} - -func RegisterNestedServiceServer(s *grpc.Server, srv NestedServiceServer) { - s.RegisterService(&_NestedService_serviceDesc, srv) -} - -func _NestedService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateNestedRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NestedServiceServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/grpc.gateway.runtime.internal.examplepb.NestedService/Update", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NestedServiceServer).Update(ctx, req.(*UpdateNestedRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _NestedService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.runtime.internal.examplepb.NestedService", - HandlerType: (*NestedServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Update", - Handler: _NestedService_Update_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "runtime/internal/examplepb/example.proto", -} diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 6c3317863a2..26c90ede41e 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" _struct "github.com/golang/protobuf/ptypes/struct" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" @@ -24,10 +23,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // NonStandardMessage has oddly named fields. type NonStandardMessage struct { state protoimpl.MessageState diff --git a/runtime/internal/examplepb/non_standard_names.swagger.json b/runtime/internal/examplepb/non_standard_names.swagger.json new file mode 100644 index 00000000000..119e1c861d3 --- /dev/null +++ b/runtime/internal/examplepb/non_standard_names.swagger.json @@ -0,0 +1,250 @@ +{ + "swagger": "2.0", + "info": { + "title": "runtime/internal/examplepb/non_standard_names.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "NonStandardService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/non_standard/update": { + "patch": { + "summary": "Apply field mask to empty NonStandardMessage and return result.", + "operationId": "NonStandardService_Update", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessage" + } + }, + { + "name": "updateMask", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "NonStandardService" + ] + } + }, + "/v1/example/non_standard/update_with_json_names": { + "patch": { + "summary": "Apply field mask to empty NonStandardMessageWithJSONNames and return result.", + "operationId": "NonStandardService_UpdateWithJSONNames", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNames" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNames" + } + }, + { + "name": "updateMask", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "NonStandardService" + ] + } + } + }, + "definitions": { + "examplepbNonStandardMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "Num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "langIdent": { + "type": "string" + }, + "STATUS": { + "type": "string" + }, + "enGB": { + "type": "string", + "format": "int64" + }, + "no": { + "type": "string" + }, + "thing": { + "$ref": "#/definitions/examplepbNonStandardMessageThing" + }, + "structField": { + "type": "object" + }, + "valueField": { + "type": "object" + } + }, + "description": "NonStandardMessage has oddly named fields." + }, + "examplepbNonStandardMessageThing": { + "type": "object", + "properties": { + "subThing": { + "$ref": "#/definitions/examplepbNonStandardMessageThingSubThing" + } + } + }, + "examplepbNonStandardMessageThingSubThing": { + "type": "object", + "properties": { + "subValue": { + "type": "string" + } + } + }, + "examplepbNonStandardMessageWithJSONNames": { + "type": "object", + "properties": { + "ID": { + "type": "string", + "description": "Id represents the message identifier." + }, + "Num": { + "type": "string", + "format": "int64" + }, + "LineNum": { + "type": "string", + "format": "int64" + }, + "langIdent": { + "type": "string" + }, + "status": { + "type": "string" + }, + "En_GB": { + "type": "string", + "format": "int64" + }, + "yes": { + "type": "string" + }, + "Thingy": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNamesThing" + }, + "StructField": { + "type": "object" + }, + "ValueField": { + "type": "object" + } + }, + "description": "NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion." + }, + "examplepbNonStandardMessageWithJSONNamesThing": { + "type": "object", + "properties": { + "SubThing": { + "$ref": "#/definitions/examplepbNonStandardMessageWithJSONNamesThingSubThing" + } + } + }, + "examplepbNonStandardMessageWithJSONNamesThingSubThing": { + "type": "object", + "properties": { + "sub_Value": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "protobufNullValue": { + "type": "string", + "enum": [ + "NULL_VALUE" + ], + "default": "NULL_VALUE", + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 695f633aade..90a86a4669d 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: runtime/internal/examplepb/proto2.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -21,10 +20,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type Proto2Message struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/runtime/internal/examplepb/proto2.swagger.json b/runtime/internal/examplepb/proto2.swagger.json new file mode 100644 index 00000000000..eabea27dacb --- /dev/null +++ b/runtime/internal/examplepb/proto2.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "runtime/internal/examplepb/proto2.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 5e1cbd641d5..e31cf97de6b 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,13 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0 -// protoc v3.12.0 +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 // source: runtime/internal/examplepb/proto3.proto package examplepb import ( - proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" timestamp "github.com/golang/protobuf/ptypes/timestamp" wrappers "github.com/golang/protobuf/ptypes/wrappers" @@ -25,10 +24,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type EnumValue int32 const ( diff --git a/runtime/internal/examplepb/proto3.swagger.json b/runtime/internal/examplepb/proto3.swagger.json new file mode 100644 index 00000000000..8481190f97d --- /dev/null +++ b/runtime/internal/examplepb/proto3.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "runtime/internal/examplepb/proto3.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "typeUrl": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/third_party/googleapis/LICENSE b/third_party/googleapis/LICENSE deleted file mode 100644 index 261eeb9e9f8..00000000000 --- a/third_party/googleapis/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/third_party/googleapis/README.grpc-gateway b/third_party/googleapis/README.grpc-gateway deleted file mode 100644 index a143d031e6b..00000000000 --- a/third_party/googleapis/README.grpc-gateway +++ /dev/null @@ -1,24 +0,0 @@ -Google APIs -============ - -Project: Google APIs -URL: https://github.com/google/googleapis -Revision: ca1372c6d7bcb199638ebfdb40d2b2660bab7b88 -License: Apache License 2.0 - - -Imported Files ---------------- - -- google/api/annotations.proto -- google/api/field_behavior.proto -- google/api/http.proto -- google/api/httpbody.proto - - -Generated Files ----------------- - -They are generated from the .proto files by protoc-gen-go. -- google/api/annotations.pb.go -- google/api/http.pb.go diff --git a/third_party/googleapis/google/api/annotations.proto b/third_party/googleapis/google/api/annotations.proto deleted file mode 100644 index 85c361b47fe..00000000000 --- a/third_party/googleapis/google/api/annotations.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2015, Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/api/http.proto"; -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "AnnotationsProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // See `HttpRule`. - HttpRule http = 72295728; -} diff --git a/third_party/googleapis/google/api/field_behavior.proto b/third_party/googleapis/google/api/field_behavior.proto deleted file mode 100644 index aa7127bf871..00000000000 --- a/third_party/googleapis/google/api/field_behavior.proto +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "FieldBehaviorProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // A designation of a specific field behavior (required, output only, etc.) - // in protobuf messages. - // - // Examples: - // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; - repeated google.api.FieldBehavior field_behavior = 1052; -} - -// An indicator of the behavior of a given field (for example, that a field -// is required in requests, or given as output but ignored as input). -// This **does not** change the behavior in protocol buffers itself; it only -// denotes the behavior and may affect how API tooling handles the field. -// -// Note: This enum **may** receive new values in the future. -enum FieldBehavior { - // Conventional default for enums. Do not use this. - FIELD_BEHAVIOR_UNSPECIFIED = 0; - - // Specifically denotes a field as optional. - // While all fields in protocol buffers are optional, this may be specified - // for emphasis if appropriate. - OPTIONAL = 1; - - // Denotes a field as required. - // This indicates that the field **must** be provided as part of the request, - // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). - REQUIRED = 2; - - // Denotes a field as output only. - // This indicates that the field is provided in responses, but including the - // field in a request does nothing (the server *must* ignore it and - // *must not* throw an error as a result of the field's presence). - OUTPUT_ONLY = 3; - - // Denotes a field as input only. - // This indicates that the field is provided in requests, and the - // corresponding field is not included in output. - INPUT_ONLY = 4; - - // Denotes a field as immutable. - // This indicates that the field may be set once in a request to create a - // resource, but may not be changed thereafter. - IMMUTABLE = 5; -} diff --git a/third_party/googleapis/google/api/http.proto b/third_party/googleapis/google/api/http.proto deleted file mode 100644 index 69460cf791d..00000000000 --- a/third_party/googleapis/google/api/http.proto +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "HttpProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -message Http { - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - repeated HttpRule rules = 1; - - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - bool fully_decode_reserved_expansion = 2; -} - -// # gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | -// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: -// "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: -// "123456")` -// -// ## Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all -// fields are passed via URL path and URL query parameters. -// -// ### Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// ## Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// Example: -// -// http: -// rules: -// # Selects a gRPC method and applies HttpRule to it. -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// ## Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -message HttpRule { - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - string selector = 1; - - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - oneof pattern { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - string get = 2; - - // Maps to HTTP PUT. Used for replacing a resource. - string put = 3; - - // Maps to HTTP POST. Used for creating a resource or performing an action. - string post = 4; - - // Maps to HTTP DELETE. Used for deleting a resource. - string delete = 5; - - // Maps to HTTP PATCH. Used for updating a resource. - string patch = 6; - - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - CustomHttpPattern custom = 8; - } - - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - string body = 7; - - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - string response_body = 12; - - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - repeated HttpRule additional_bindings = 11; -} - -// A custom pattern is used for defining custom HTTP verb. -message CustomHttpPattern { - // The name of this custom HTTP verb. - string kind = 1; - - // The path matched by this custom verb. - string path = 2; -} diff --git a/third_party/googleapis/google/api/httpbody.proto b/third_party/googleapis/google/api/httpbody.proto deleted file mode 100644 index bc5ea4478cc..00000000000 --- a/third_party/googleapis/google/api/httpbody.proto +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/any.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; -option java_multiple_files = true; -option java_outer_classname = "HttpBodyProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Message that represents an arbitrary HTTP body. It should only be used for -// payload formats that can't be represented as JSON, such as raw binary or -// an HTML page. -// -// -// This message can be used both in streaming and non-streaming API methods in -// the request as well as the response. -// -// It can be used as a top-level request field, which is convenient if one -// wants to extract parameters from either the URL or HTTP template into the -// request fields and also want access to the raw HTTP body. -// -// Example: -// -// message GetResourceRequest { -// // A unique request id. -// string request_id = 1; -// -// // The raw HTTP body is bound to this field. -// google.api.HttpBody http_body = 2; -// } -// -// service ResourceService { -// rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); -// rpc UpdateResource(google.api.HttpBody) returns -// (google.protobuf.Empty); -// } -// -// Example with streaming methods: -// -// service CaldavService { -// rpc GetCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// rpc UpdateCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// } -// -// Use of this type only changes how the request and response bodies are -// handled, all other features will continue to work unchanged. -message HttpBody { - // The HTTP Content-Type header value specifying the content type of the body. - string content_type = 1; - - // The HTTP request/response body as raw binary. - bytes data = 2; - - // Application specific response metadata. Must be set in the first response - // for streaming APIs. - repeated google.protobuf.Any extensions = 3; -} \ No newline at end of file diff --git a/third_party/googleapis/google/rpc/code.proto b/third_party/googleapis/google/rpc/code.proto deleted file mode 100644 index 8fef411705b..00000000000 --- a/third_party/googleapis/google/rpc/code.proto +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -option go_package = "google.golang.org/genproto/googleapis/rpc/code;code"; -option java_multiple_files = true; -option java_outer_classname = "CodeProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - - -// The canonical error codes for Google APIs. -// -// -// Sometimes multiple error codes may apply. Services should return -// the most specific error code that applies. For example, prefer -// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. -// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`. -enum Code { - // Not an error; returned on success - // - // HTTP Mapping: 200 OK - OK = 0; - - // The operation was cancelled, typically by the caller. - // - // HTTP Mapping: 499 Client Closed Request - CANCELLED = 1; - - // Unknown error. For example, this error may be returned when - // a `Status` value received from another address space belongs to - // an error space that is not known in this address space. Also - // errors raised by APIs that do not return enough error information - // may be converted to this error. - // - // HTTP Mapping: 500 Internal Server Error - UNKNOWN = 2; - - // The client specified an invalid argument. Note that this differs - // from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments - // that are problematic regardless of the state of the system - // (e.g., a malformed file name). - // - // HTTP Mapping: 400 Bad Request - INVALID_ARGUMENT = 3; - - // The deadline expired before the operation could complete. For operations - // that change the state of the system, this error may be returned - // even if the operation has completed successfully. For example, a - // successful response from a server could have been delayed long - // enough for the deadline to expire. - // - // HTTP Mapping: 504 Gateway Timeout - DEADLINE_EXCEEDED = 4; - - // Some requested entity (e.g., file or directory) was not found. - // - // Note to server developers: if a request is denied for an entire class - // of users, such as gradual feature rollout or undocumented whitelist, - // `NOT_FOUND` may be used. If a request is denied for some users within - // a class of users, such as user-based access control, `PERMISSION_DENIED` - // must be used. - // - // HTTP Mapping: 404 Not Found - NOT_FOUND = 5; - - // The entity that a client attempted to create (e.g., file or directory) - // already exists. - // - // HTTP Mapping: 409 Conflict - ALREADY_EXISTS = 6; - - // The caller does not have permission to execute the specified - // operation. `PERMISSION_DENIED` must not be used for rejections - // caused by exhausting some resource (use `RESOURCE_EXHAUSTED` - // instead for those errors). `PERMISSION_DENIED` must not be - // used if the caller can not be identified (use `UNAUTHENTICATED` - // instead for those errors). This error code does not imply the - // request is valid or the requested entity exists or satisfies - // other pre-conditions. - // - // HTTP Mapping: 403 Forbidden - PERMISSION_DENIED = 7; - - // The request does not have valid authentication credentials for the - // operation. - // - // HTTP Mapping: 401 Unauthorized - UNAUTHENTICATED = 16; - - // Some resource has been exhausted, perhaps a per-user quota, or - // perhaps the entire file system is out of space. - // - // HTTP Mapping: 429 Too Many Requests - RESOURCE_EXHAUSTED = 8; - - // The operation was rejected because the system is not in a state - // required for the operation's execution. For example, the directory - // to be deleted is non-empty, an rmdir operation is applied to - // a non-directory, etc. - // - // Service implementors can use the following guidelines to decide - // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: - // (a) Use `UNAVAILABLE` if the client can retry just the failing call. - // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., when a client-specified test-and-set fails, indicating the - // client should restart a read-modify-write sequence). - // (c) Use `FAILED_PRECONDITION` if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" - // fails because the directory is non-empty, `FAILED_PRECONDITION` - // should be returned since the client should not retry unless - // the files are deleted from the directory. - // - // HTTP Mapping: 400 Bad Request - FAILED_PRECONDITION = 9; - - // The operation was aborted, typically due to a concurrency issue such as - // a sequencer check failure or transaction abort. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 409 Conflict - ABORTED = 10; - - // The operation was attempted past the valid range. E.g., seeking or - // reading past end-of-file. - // - // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may - // be fixed if the system state changes. For example, a 32-bit file - // system will generate `INVALID_ARGUMENT` if asked to read at an - // offset that is not in the range [0,2^32-1], but it will generate - // `OUT_OF_RANGE` if asked to read from an offset past the current - // file size. - // - // There is a fair bit of overlap between `FAILED_PRECONDITION` and - // `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific - // error) when it applies so that callers who are iterating through - // a space can easily look for an `OUT_OF_RANGE` error to detect when - // they are done. - // - // HTTP Mapping: 400 Bad Request - OUT_OF_RANGE = 11; - - // The operation is not implemented or is not supported/enabled in this - // service. - // - // HTTP Mapping: 501 Not Implemented - UNIMPLEMENTED = 12; - - // Internal errors. This means that some invariants expected by the - // underlying system have been broken. This error code is reserved - // for serious errors. - // - // HTTP Mapping: 500 Internal Server Error - INTERNAL = 13; - - // The service is currently unavailable. This is most likely a - // transient condition, which can be corrected by retrying with - // a backoff. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 503 Service Unavailable - UNAVAILABLE = 14; - - // Unrecoverable data loss or corruption. - // - // HTTP Mapping: 500 Internal Server Error - DATA_LOSS = 15; -} diff --git a/third_party/googleapis/google/rpc/error_details.proto b/third_party/googleapis/google/rpc/error_details.proto deleted file mode 100644 index f24ae00999b..00000000000 --- a/third_party/googleapis/google/rpc/error_details.proto +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -import "google/protobuf/duration.proto"; - -option go_package = "google.golang.org/genproto/googleapis/rpc/errdetails;errdetails"; -option java_multiple_files = true; -option java_outer_classname = "ErrorDetailsProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - - -// Describes when the clients can retry a failed request. Clients could ignore -// the recommendation here or retry when this information is missing from error -// responses. -// -// It's always recommended that clients should use exponential backoff when -// retrying. -// -// Clients should wait until `retry_delay` amount of time has passed since -// receiving the error response before retrying. If retrying requests also -// fail, clients should use an exponential backoff scheme to gradually increase -// the delay between retries based on `retry_delay`, until either a maximum -// number of retires have been reached or a maximum retry delay cap has been -// reached. -message RetryInfo { - // Clients should wait at least this long between retrying the same request. - google.protobuf.Duration retry_delay = 1; -} - -// Describes additional debugging info. -message DebugInfo { - // The stack trace entries indicating where the error occurred. - repeated string stack_entries = 1; - - // Additional debugging information provided by the server. - string detail = 2; -} - -// Describes how a quota check failed. -// -// For example if a daily limit was exceeded for the calling project, -// a service could respond with a QuotaFailure detail containing the project -// id and the description of the quota limit that was exceeded. If the -// calling project hasn't enabled the service in the developer console, then -// a service could respond with the project id and set `service_disabled` -// to true. -// -// Also see RetryDetail and Help types for other details about handling a -// quota failure. -message QuotaFailure { - // A message type used to describe a single quota violation. For example, a - // daily quota or a custom quota that was exceeded. - message Violation { - // The subject on which the quota check failed. - // For example, "clientip:" or "project:". - string subject = 1; - - // A description of how the quota check failed. Clients can use this - // description to find more about the quota configuration in the service's - // public documentation, or find the relevant quota limit to adjust through - // developer console. - // - // For example: "Service disabled" or "Daily Limit for read operations - // exceeded". - string description = 2; - } - - // Describes all quota violations. - repeated Violation violations = 1; -} - -// Describes what preconditions have failed. -// -// For example, if an RPC failed because it required the Terms of Service to be -// acknowledged, it could list the terms of service violation in the -// PreconditionFailure message. -message PreconditionFailure { - // A message type used to describe a single precondition failure. - message Violation { - // The type of PreconditionFailure. We recommend using a service-specific - // enum type to define the supported precondition violation types. For - // example, "TOS" for "Terms of Service violation". - string type = 1; - - // The subject, relative to the type, that failed. - // For example, "google.com/cloud" relative to the "TOS" type would - // indicate which terms of service is being referenced. - string subject = 2; - - // A description of how the precondition failed. Developers can use this - // description to understand how to fix the failure. - // - // For example: "Terms of service not accepted". - string description = 3; - } - - // Describes all precondition violations. - repeated Violation violations = 1; -} - -// Describes violations in a client request. This error type focuses on the -// syntactic aspects of the request. -message BadRequest { - // A message type used to describe a single bad request field. - message FieldViolation { - // A path leading to a field in the request body. The value will be a - // sequence of dot-separated identifiers that identify a protocol buffer - // field. E.g., "field_violations.field" would identify this field. - string field = 1; - - // A description of why the request element is bad. - string description = 2; - } - - // Describes all violations in a client request. - repeated FieldViolation field_violations = 1; -} - -// Contains metadata about the request that clients can attach when filing a bug -// or providing other forms of feedback. -message RequestInfo { - // An opaque string that should only be interpreted by the service generating - // it. For example, it can be used to identify requests in the service's logs. - string request_id = 1; - - // Any data that was used to serve this request. For example, an encrypted - // stack trace that can be sent back to the service provider for debugging. - string serving_data = 2; -} - -// Describes the resource that is being accessed. -message ResourceInfo { - // A name for the type of resource being accessed, e.g. "sql table", - // "cloud storage bucket", "file", "Google calendar"; or the type URL - // of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic". - string resource_type = 1; - - // The name of the resource being accessed. For example, a shared calendar - // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current - // error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED]. - string resource_name = 2; - - // The owner of the resource (optional). - // For example, "user:" or "project:". - string owner = 3; - - // Describes what error is encountered when accessing this resource. - // For example, updating a cloud project may require the `writer` permission - // on the developer console project. - string description = 4; -} - -// Provides links to documentation or for performing an out of band action. -// -// For example, if a quota check failed with an error indicating the calling -// project hasn't enabled the accessed service, this can contain a URL pointing -// directly to the right place in the developer console to flip the bit. -message Help { - // Describes a URL link. - message Link { - // Describes what the link offers. - string description = 1; - - // The URL of the link. - string url = 2; - } - - // URL(s) pointing to additional information on handling the current error. - repeated Link links = 1; -} - -// Provides a localized error message that is safe to return to the user -// which can be attached to an RPC error. -message LocalizedMessage { - // The locale used following the specification defined at - // http://www.rfc-editor.org/rfc/bcp/bcp47.txt. - // Examples are: "en-US", "fr-CH", "es-MX" - string locale = 1; - - // The localized error message in the above locale. - string message = 2; -} diff --git a/third_party/googleapis/google/rpc/status.proto b/third_party/googleapis/google/rpc/status.proto deleted file mode 100644 index 0839ee9666a..00000000000 --- a/third_party/googleapis/google/rpc/status.proto +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2017 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -import "google/protobuf/any.proto"; - -option go_package = "google.golang.org/genproto/googleapis/rpc/status;status"; -option java_multiple_files = true; -option java_outer_classname = "StatusProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - - -// The `Status` type defines a logical error model that is suitable for different -// programming environments, including REST APIs and RPC APIs. It is used by -// [gRPC](https://github.com/grpc). The error model is designed to be: -// -// - Simple to use and understand for most users -// - Flexible enough to meet unexpected needs -// -// # Overview -// -// The `Status` message contains three pieces of data: error code, error message, -// and error details. The error code should be an enum value of -// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The -// error message should be a developer-facing English message that helps -// developers *understand* and *resolve* the error. If a localized user-facing -// error message is needed, put the localized message in the error details or -// localize it in the client. The optional error details may contain arbitrary -// information about the error. There is a predefined set of error detail types -// in the package `google.rpc` that can be used for common error conditions. -// -// # Language mapping -// -// The `Status` message is the logical representation of the error model, but it -// is not necessarily the actual wire format. When the `Status` message is -// exposed in different client libraries and different wire protocols, it can be -// mapped differently. For example, it will likely be mapped to some exceptions -// in Java, but more likely mapped to some error codes in C. -// -// # Other uses -// -// The error model and the `Status` message can be used in a variety of -// environments, either with or without APIs, to provide a -// consistent developer experience across different environments. -// -// Example uses of this error model include: -// -// - Partial errors. If a service needs to return partial errors to the client, -// it may embed the `Status` in the normal response to indicate the partial -// errors. -// -// - Workflow errors. A typical workflow has multiple steps. Each step may -// have a `Status` message for error reporting. -// -// - Batch operations. If a client uses batch request and batch response, the -// `Status` message should be used directly inside batch response, one for -// each error sub-response. -// -// - Asynchronous operations. If an API call embeds asynchronous operation -// results in its response, the status of those operations should be -// represented directly using the `Status` message. -// -// - Logging. If some API errors are stored in logs, the message `Status` could -// be used directly after any stripping needed for security/privacy reasons. -message Status { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - int32 code = 1; - - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - string message = 2; - - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - repeated google.protobuf.Any details = 3; -} diff --git a/tools.go b/tools.go index 829cc6ffae4..eaaaa57619e 100644 --- a/tools.go +++ b/tools.go @@ -3,5 +3,7 @@ package tools import ( + _ "github.com/bufbuild/buf/cmd/buf" _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" + _ "google.golang.org/protobuf/cmd/protoc-gen-go" ) From a8496b14e7b9155302616e494abfaa95b9d23540 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Feb 2021 09:05:42 +0000 Subject: [PATCH 0828/1518] Bump nokogiri from 1.10.10 to 1.11.1 in /docs (#1967) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.10 to 1.11.1. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.10...v1.11.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 852dc6b4d7a..c08c1592a11 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -209,21 +209,23 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.4.0) + mini_portile2 (2.5.0) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) minitest (5.14.2) multipart-post (2.1.1) - nokogiri (1.10.10) - mini_portile2 (~> 2.4.0) + nokogiri (1.11.1) + mini_portile2 (~> 2.5.0) + racc (~> 1.4) octokit (4.19.0) faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (3.1.1) + racc (1.5.2) rake (13.0.1) rb-fsevent (0.10.4) rb-inotify (0.10.1) From 62529fa973f43917f4593adbff75f6112b3a743e Mon Sep 17 00:00:00 2001 From: tvoll <44767796+tvoll@users.noreply.github.com> Date: Thu, 18 Feb 2021 11:24:20 +0100 Subject: [PATCH 0829/1518] Use base64.URLEncoding for []byte parameters in query (#1978) --- runtime/query.go | 4 ++-- runtime/query_test.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/runtime/query.go b/runtime/query.go index 9a9f3d3987c..1365a4dd9f0 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -233,7 +233,7 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro case protoreflect.StringKind: return protoreflect.ValueOfString(value), nil case protoreflect.BytesKind: - v, err := base64.StdEncoding.DecodeString(value) + v, err := base64.URLEncoding.DecodeString(value) if err != nil { return protoreflect.Value{}, err } @@ -314,7 +314,7 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p case "google.protobuf.StringValue": msg = &wrapperspb.StringValue{Value: value} case "google.protobuf.BytesValue": - v, err := base64.StdEncoding.DecodeString(value) + v, err := base64.URLEncoding.DecodeString(value) if err != nil { return protoreflect.Value{}, err } diff --git a/runtime/query_test.go b/runtime/query_test.go index 26e5baee243..bfab6c2b454 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -113,7 +113,7 @@ func TestPopulateParameters(t *testing.T) { "uint32_value": {"4"}, "bool_value": {"true"}, "string_value": {"str"}, - "bytes_value": {"Ynl0ZXM="}, + "bytes_value": {"YWJjMTIzIT8kKiYoKSctPUB-"}, "repeated_value": {"a", "b", "c"}, "repeated_message": {"1", "2", "3"}, "enum_value": {"1"}, @@ -129,7 +129,7 @@ func TestPopulateParameters(t *testing.T) { "wrapper_u_int32_value": {"4"}, "wrapper_bool_value": {"true"}, "wrapper_string_value": {"str"}, - "wrapper_bytes_value": {"Ynl0ZXM="}, + "wrapper_bytes_value": {"YWJjMTIzIT8kKiYoKSctPUB-"}, "map_value[key]": {"value"}, "map_value[second]": {"bar"}, "map_value[third]": {"zzz"}, @@ -161,7 +161,7 @@ func TestPopulateParameters(t *testing.T) { Uint32Value: 4, BoolValue: true, StringValue: "str", - BytesValue: []byte("bytes"), + BytesValue: []byte("abc123!?$*&()'-=@~"), RepeatedValue: []string{"a", "b", "c"}, RepeatedMessage: []*wrapperspb.UInt64Value{{Value: 1}, {Value: 2}, {Value: 3}}, EnumValue: examplepb.EnumValue_Y, @@ -177,7 +177,7 @@ func TestPopulateParameters(t *testing.T) { WrapperUInt32Value: &wrapperspb.UInt32Value{Value: 4}, WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, - WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("bytes")}, + WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("abc123!?$*&()'-=@~")}, MapValue: map[string]string{ "key": "value", "second": "bar", From 610a365f686b294ad51c1663bd628294461ee48e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Feb 2021 15:53:18 +0000 Subject: [PATCH 0830/1518] fix(deps): update google.golang.org/genproto commit hash to fe80b38 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 225d6b28dd2..f0fb8f92864 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e - google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 + google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 94f8337824b..bf407777702 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2 h1:pkt4FLyKaqUuYonDpjdYNhcyWRKxn9Fs8cttR9ldTHA= -google.golang.org/genproto v0.0.0-20210217220511-c18582744cc2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06 h1:Px6YyLaNKEo5eoniIBAv6Es0jbvyEmSYqOac64iS2Rs= +google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fc7ad176c07..ec44031c078 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:pkt4FLyKaqUuYonDpjdYNhcyWRKxn9Fs8cttR9ldTHA=", - version = "v0.0.0-20210217220511-c18582744cc2", + sum = "h1:Px6YyLaNKEo5eoniIBAv6Es0jbvyEmSYqOac64iS2Rs=", + version = "v0.0.0-20210218151259-fe80b386bf06", ) go_repository( name = "org_golang_google_grpc", From f074be9a7617a8eac2e282a28b4176cdfd13aec8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Feb 2021 21:32:12 +0000 Subject: [PATCH 0831/1518] fix(deps): update golang.org/x/oauth2 commit hash to ba52d33 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f0fb8f92864..9a757522ca8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e + golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99 google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index bf407777702..4b62013a56b 100644 --- a/go.sum +++ b/go.sum @@ -382,8 +382,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e h1:xxTKAjlluPXFVQnUNoBO7OvmNNE/RpmyUeLVFSYiQQ0= -golang.org/x/oauth2 v0.0.0-20210216194517-16ff1888fd2e/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99 h1:5vD4XjIc0X5+kHZjx4UecYdjA6mJo+XXNoaW0EjU5Os= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index ec44031c078..f040ee2b0f5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:xxTKAjlluPXFVQnUNoBO7OvmNNE/RpmyUeLVFSYiQQ0=", - version = "v0.0.0-20210216194517-16ff1888fd2e", + sum = "h1:5vD4XjIc0X5+kHZjx4UecYdjA6mJo+XXNoaW0EjU5Os=", + version = "v0.0.0-20210218202405-ba52d332ba99", ) go_repository( name = "org_golang_x_sync", From c80ca545d56e5ab04799f2b19b154d8b1560b173 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Feb 2021 23:00:16 +0000 Subject: [PATCH 0832/1518] chore(deps): update dependency com_google_protobuf to v3.15.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 66bf5e9060d..ad4977dfd1b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "d0f5f605d0d656007ce6c8b5a82df3037e1d8fe8b121ed42e536f569dec16113", - strip_prefix = "protobuf-3.14.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.14.0.tar.gz"], + sha256 = "6aff9834fd7c540875e1836967c8d14c6897e3785a2efac629f69860fb7834ff", + strip_prefix = "protobuf-3.15.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.0.tar.gz"], ) http_archive( From c1b86cf5bf99437910ef454a80142338fe666149 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 19 Feb 2021 17:56:51 +0000 Subject: [PATCH 0833/1518] fix(deps): update google.golang.org/genproto commit hash to d891e3c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9a757522ca8..80ae7c240a8 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99 - google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06 + google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 4b62013a56b..4e00c112d7e 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06 h1:Px6YyLaNKEo5eoniIBAv6Es0jbvyEmSYqOac64iS2Rs= -google.golang.org/genproto v0.0.0-20210218151259-fe80b386bf06/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b h1:zTeTu5p/EXQSqNJboHUw32wdNFYQTT9vSc+ibSpCoLk= +google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f040ee2b0f5..fca74d58ffd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Px6YyLaNKEo5eoniIBAv6Es0jbvyEmSYqOac64iS2Rs=", - version = "v0.0.0-20210218151259-fe80b386bf06", + sum = "h1:zTeTu5p/EXQSqNJboHUw32wdNFYQTT9vSc+ibSpCoLk=", + version = "v0.0.0-20210219173056-d891e3cb3b5b", ) go_repository( name = "org_golang_google_grpc", From 99f7ddd878e843be797ac96c7f6d8fcfed17d72f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 20 Feb 2021 01:32:35 +0000 Subject: [PATCH 0834/1518] fix(deps): update golang.org/x/oauth2 commit hash to 9bb9049 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 80ae7c240a8..751f328ea6b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99 + golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 4e00c112d7e..eeb78b76ae0 100644 --- a/go.sum +++ b/go.sum @@ -382,8 +382,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99 h1:5vD4XjIc0X5+kHZjx4UecYdjA6mJo+XXNoaW0EjU5Os= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 h1:alLDrZkL34Y2bnGHfvC1CYBRBXCXgx8AC2vY4MRtYX4= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index fca74d58ffd..61cd362b7d2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:5vD4XjIc0X5+kHZjx4UecYdjA6mJo+XXNoaW0EjU5Os=", - version = "v0.0.0-20210218202405-ba52d332ba99", + sum = "h1:alLDrZkL34Y2bnGHfvC1CYBRBXCXgx8AC2vY4MRtYX4=", + version = "v0.0.0-20210220000619-9bb904979d93", ) go_repository( name = "org_golang_x_sync", From 59d931924cf748cbceb1b752a08997de61f49073 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 20 Feb 2021 04:57:37 +0000 Subject: [PATCH 0835/1518] chore(deps): update dependency com_google_protobuf to v3.15.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ad4977dfd1b..e54b3ae04bd 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "6aff9834fd7c540875e1836967c8d14c6897e3785a2efac629f69860fb7834ff", - strip_prefix = "protobuf-3.15.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.0.tar.gz"], + sha256 = "f18a40816260a9a3190a94efb0fc26270b244a2436681602f0a944739095d632", + strip_prefix = "protobuf-3.15.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.1.tar.gz"], ) http_archive( From 0cc2680a4990244dcc7602bad34fef935310c0e8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Feb 2021 16:43:54 +0000 Subject: [PATCH 0836/1518] fix(deps): update google.golang.org/genproto commit hash to aa3ee6e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 751f328ea6b..1b9f92593a3 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b + google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index eeb78b76ae0..364e98b8b56 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b h1:zTeTu5p/EXQSqNJboHUw32wdNFYQTT9vSc+ibSpCoLk= -google.golang.org/genproto v0.0.0-20210219173056-d891e3cb3b5b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c h1:7A9LQhrZmuCPI79/sYSbscFqBp4XFYf6oaIQuV1xji4= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 61cd362b7d2..a6f1478fb6d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:zTeTu5p/EXQSqNJboHUw32wdNFYQTT9vSc+ibSpCoLk=", - version = "v0.0.0-20210219173056-d891e3cb3b5b", + sum = "h1:7A9LQhrZmuCPI79/sYSbscFqBp4XFYf6oaIQuV1xji4=", + version = "v0.0.0-20210222152913-aa3ee6e6a81c", ) go_repository( name = "org_golang_google_grpc", From 1ae6b3cdb14b220773ada65b9ce392644feedf07 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Feb 2021 21:59:41 +0000 Subject: [PATCH 0837/1518] fix(deps): update google.golang.org/genproto commit hash to 3e1e516 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1b9f92593a3..30f90978f48 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c + google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 364e98b8b56..60771a86eb3 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c h1:7A9LQhrZmuCPI79/sYSbscFqBp4XFYf6oaIQuV1xji4= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db h1:SHQi2osmct8Y+ngNVppVlyB/WdW+XA9gHs8wPEE2xFY= +google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a6f1478fb6d..3e735e7a8dc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:7A9LQhrZmuCPI79/sYSbscFqBp4XFYf6oaIQuV1xji4=", - version = "v0.0.0-20210222152913-aa3ee6e6a81c", + sum = "h1:SHQi2osmct8Y+ngNVppVlyB/WdW+XA9gHs8wPEE2xFY=", + version = "v0.0.0-20210222212404-3e1e516060db", ) go_repository( name = "org_golang_google_grpc", From cb5d06eadd8333ea5f52ab12124b909c21dd0b9b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Feb 2021 16:11:40 +0000 Subject: [PATCH 0838/1518] fix(deps): update google.golang.org/genproto commit hash to 22b48be --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 30f90978f48..fe558aaeb0a 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db + google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 60771a86eb3..3a878ef0122 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db h1:SHQi2osmct8Y+ngNVppVlyB/WdW+XA9gHs8wPEE2xFY= -google.golang.org/genproto v0.0.0-20210222212404-3e1e516060db/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b h1:GXCSqFSSKq+L4Pi31A2Ba7j8BZCwHN8oJkREab1VokI= +google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3e735e7a8dc..ace5b53b20d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SHQi2osmct8Y+ngNVppVlyB/WdW+XA9gHs8wPEE2xFY=", - version = "v0.0.0-20210222212404-3e1e516060db", + sum = "h1:GXCSqFSSKq+L4Pi31A2Ba7j8BZCwHN8oJkREab1VokI=", + version = "v0.0.0-20210223151946-22b48be4551b", ) go_repository( name = "org_golang_google_grpc", From 870f2d3cdf7051281a3dbd8d2a0d7f85efacb2e9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Feb 2021 22:00:40 +0000 Subject: [PATCH 0839/1518] chore(deps): update bufbuild/buf docker tag to v0.37.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a65338ee237..9c409cf6b6c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.0.0 proto_lint: docker: - - image: bufbuild/buf:0.37.0 + - image: bufbuild/buf:0.37.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.37.0 + - image: bufbuild/buf:0.37.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From a996d7ad1f816e24944a1661e67c9e4e1ac056ef Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 24 Feb 2021 00:45:31 +0000 Subject: [PATCH 0840/1518] chore(deps): update dependency com_google_protobuf to v3.15.2 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index e54b3ae04bd..44e3a955cad 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "f18a40816260a9a3190a94efb0fc26270b244a2436681602f0a944739095d632", - strip_prefix = "protobuf-3.15.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.1.tar.gz"], + sha256 = "3c85fdac243dab1f6cd725eb58e361cdbb3ec4480052ac90b1ab55c608112cd0", + strip_prefix = "protobuf-3.15.2", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.2.tar.gz"], ) http_archive( From 4717692ad213d90b8fa63c21be7fcd6cd99692b6 Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Fri, 5 Feb 2021 16:31:40 +0100 Subject: [PATCH 0841/1518] gen-grpc-gateway, gen-openapiv2: add support for proto3 optional --- .../internal/clients/abe/api/swagger.yaml | 26 ++++++++++++++++++ .../abe/api_a_bit_of_everything_service.go | 20 ++++++++++++++ .../model_examplepb_a_bit_of_everything.go | 1 + .../proto/examplepb/a_bit_of_everything.proto | 2 ++ .../a_bit_of_everything.swagger.json | 27 +++++++++++++++++++ .../examplepb/generated_input.swagger.json | 3 +++ .../proto/examplepb/stream.swagger.json | 3 +++ internal/codegenerator/BUILD.bazel | 2 ++ internal/codegenerator/supported_features.go | 24 +++++++++++++++++ internal/descriptor/BUILD.bazel | 1 + internal/descriptor/registry.go | 5 ++++ protoc-gen-grpc-gateway/BUILD.bazel | 1 + protoc-gen-grpc-gateway/main.go | 3 +++ protoc-gen-openapiv2/main.go | 4 ++- 14 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 internal/codegenerator/supported_features.go diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index dfc2f8b71ea..741db2d21e7 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -403,6 +403,12 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" + - name: "optionalString" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalString" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -714,6 +720,12 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" + - name: "optionalString" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalString" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1012,6 +1024,12 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" + - name: "optionalString" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalString" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1330,6 +1348,12 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" + - name: "optionalString" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalString" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2698,6 +2722,8 @@ definitions: type: "string" title: "mark a field as readonly in Open API definition" readOnly: true + optionalString: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index ee352dd6af3..75d821e23ae 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -222,6 +222,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OptionalString" (optional.String) - @return ExamplepbABitOfEverything */ @@ -259,6 +260,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalString optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -376,6 +378,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { + localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -547,6 +552,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationAmount" (optional.Int64) - * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OptionalString" (optional.String) - @return ExamplepbABitOfEverything */ @@ -584,6 +590,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { NestedAnnotationAmount optional.Int64 Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalString optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -701,6 +708,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { + localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -871,6 +881,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OptionalString" (optional.String) - @return ExamplepbABitOfEverything */ @@ -906,6 +917,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalString optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1017,6 +1029,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { + localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2492,6 +2507,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OptionalString" (optional.String) - @return interface{} */ @@ -2530,6 +2546,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalString optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { @@ -2650,6 +2667,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { + localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index 5a258c2aa31..5fd34717af7 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -60,4 +60,5 @@ type ExamplepbABitOfEverything struct { Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalString string `json:"optionalString,omitempty"` } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index e7559540c0a..542cc217308 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -325,6 +325,8 @@ message ABitOfEverything { // mark a field as readonly in Open API definition string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; + + optional string optional_string = 40; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index bc10d99e414..83b9b46015f 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -495,6 +495,12 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "optionalString", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -835,6 +841,12 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "optionalString", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1164,6 +1176,12 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "optionalString", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1511,6 +1529,12 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "optionalString", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3307,6 +3331,9 @@ "type": "string", "title": "mark a field as readonly in Open API definition", "readOnly": true + }, + "optionalString": { + "type": "string" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 77058bbc9af..eb3be65a6ff 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -273,6 +273,9 @@ "type": "string", "title": "mark a field as readonly in Open API definition", "readOnly": true + }, + "optionalString": { + "type": "string" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 2f3ef5004fa..b4bebc83b5c 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -400,6 +400,9 @@ "type": "string", "title": "mark a field as readonly in Open API definition", "readOnly": true + }, + "optionalString": { + "type": "string" } }, "description": "Intentionaly complicated message type to cover many features of Protobuf.", diff --git a/internal/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel index 65dd4e50d15..473f329a6c2 100644 --- a/internal/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -7,9 +7,11 @@ go_library( srcs = [ "doc.go", "parse_req.go", + "supported_features.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator", deps = [ + "@org_golang_google_protobuf//compiler/protogen:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//types/pluginpb:go_default_library", ], diff --git a/internal/codegenerator/supported_features.go b/internal/codegenerator/supported_features.go new file mode 100644 index 00000000000..18c6cf07183 --- /dev/null +++ b/internal/codegenerator/supported_features.go @@ -0,0 +1,24 @@ +package codegenerator + +import ( + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/types/pluginpb" +) + +func supportedCodeGeneratorFeatures() uint64 { + // Enable support for optional keyword in proto3. + return uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) +} + +// SetSupportedFeaturesOnPluginGen sets supported proto3 features +// on protogen.Plugin. +func SetSupportedFeaturesOnPluginGen(gen *protogen.Plugin) { + gen.SupportedFeatures = supportedCodeGeneratorFeatures() +} + +// SetSupportedFeaturesOnCodeGeneratorResponse sets supported proto3 features +// on pluginpb.CodeGeneratorResponse. +func SetSupportedFeaturesOnCodeGeneratorResponse(resp *pluginpb.CodeGeneratorResponse) { + sf := supportedCodeGeneratorFeatures() + resp.SupportedFeatures = &sf +} diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index 201b9c96095..672d67451a3 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -14,6 +14,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor", deps = [ "//internal/casing:go_default_library", + "//internal/codegenerator:go_default_library", "//internal/descriptor/apiconfig:go_default_library", "//internal/descriptor/openapiconfig:go_default_library", "//internal/httprule:go_default_library", diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 7f8abb8080b..64245835abc 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/golang/glog" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" "google.golang.org/genproto/googleapis/api/annotations" @@ -142,6 +143,10 @@ func (r *Registry) Load(req *pluginpb.CodeGeneratorRequest) error { if err != nil { return err } + // Note: keep in mind that this might be not enough because + // protogen.Plugin is used only to load files here. + // The support for features must be set on the pluginpb.CodeGeneratorResponse. + codegenerator.SetSupportedFeaturesOnPluginGen(gen) return r.load(gen) } diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 5aa586cbe56..34f26313acb 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -8,6 +8,7 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway", deps = [ + "//internal/codegenerator:go_default_library", "//internal/descriptor:go_default_library", "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index b838d50fbe7..a8a7c8760e3 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -15,6 +15,7 @@ import ( "strings" "github.com/golang/glog" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway" "google.golang.org/protobuf/compiler/protogen" @@ -61,6 +62,8 @@ func main() { return err } + codegenerator.SetSupportedFeaturesOnPluginGen(gen) + generator := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *allowPatchFeature, *standalone) glog.V(1).Infof("Parsing code generator request") diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index ea3d82a7773..2b8a6f77316 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -146,7 +146,9 @@ func emitFiles(out []*descriptor.ResponseFile) { for idx, item := range out { files[idx] = item.CodeGeneratorResponse_File } - emitResp(&pluginpb.CodeGeneratorResponse{File: files}) + resp := &pluginpb.CodeGeneratorResponse{File: files} + codegenerator.SetSupportedFeaturesOnCodeGeneratorResponse(resp) + emitResp(resp) } func emitError(err error) { From e5848b742f3d2e1c9ca2f87f7c90675910edf95f Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Thu, 11 Feb 2021 18:21:23 +0100 Subject: [PATCH 0842/1518] internal/descriptor: add support for proto3 optional --- .../internal/clients/abe/api/swagger.yaml | 25 +- .../abe/api_a_bit_of_everything_service.go | 38 +- .../model_examplepb_a_bit_of_everything.go | 2 +- examples/internal/integration/client_test.go | 1 + .../internal/integration/integration_test.go | 31 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1227 +++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 24 +- .../proto/examplepb/a_bit_of_everything.proto | 4 +- .../a_bit_of_everything.swagger.json | 18 +- .../examplepb/generated_input.swagger.json | 2 +- .../proto/examplepb/stream.swagger.json | 2 +- internal/descriptor/types.go | 28 +- runtime/query_test.go | 1 + 13 files changed, 743 insertions(+), 660 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 741db2d21e7..bacb9b3c420 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -403,11 +403,11 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" - - name: "optionalString" + - name: "optionalStringValue" in: "query" required: false type: "string" - x-exportParamName: "OptionalString" + x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" responses: 200: @@ -720,11 +720,11 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" - - name: "optionalString" + - name: "optionalStringValue" in: "query" required: false type: "string" - x-exportParamName: "OptionalString" + x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" responses: 200: @@ -1024,11 +1024,11 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" - - name: "optionalString" + - name: "optionalStringValue" in: "query" required: false type: "string" - x-exportParamName: "OptionalString" + x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" responses: 200: @@ -1348,11 +1348,11 @@ paths: type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" x-optionalDataType: "String" - - name: "optionalString" + - name: "optionalStringValue" in: "query" required: false type: "string" - x-exportParamName: "OptionalString" + x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" responses: 200: @@ -1384,7 +1384,7 @@ paths: description: "Find out more about GetQuery" url: "https://github.com/grpc-ecosystem/grpc-gateway" deprecated: true - ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation} + ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue} : post: tags: - "ABitOfEverythingService" @@ -1514,6 +1514,11 @@ paths: - "ZERO" - "ONE" x-exportParamName: "EnumValueAnnotation" + - name: "optionalStringValue" + in: "path" + required: true + type: "string" + x-exportParamName: "OptionalStringValue" responses: 200: description: "A successful response." @@ -2722,7 +2727,7 @@ definitions: type: "string" title: "mark a field as readonly in Open API definition" readOnly: true - optionalString: + optionalStringValue: type: "string" externalDocs: description: "Find out more about ABitOfEverything" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 75d821e23ae..899135bcf1a 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -222,7 +222,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. - * @param "OptionalString" (optional.String) - + * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything */ @@ -260,7 +260,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String - OptionalString optional.String + OptionalStringValue optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -378,8 +378,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { - localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -552,7 +552,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationAmount" (optional.Int64) - * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. - * @param "OptionalString" (optional.String) - + * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything */ @@ -590,7 +590,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { NestedAnnotationAmount optional.Int64 Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String - OptionalString optional.String + OptionalStringValue optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -708,8 +708,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { - localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -881,7 +881,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. - * @param "OptionalString" (optional.String) - + * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything */ @@ -917,7 +917,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String - OptionalString optional.String + OptionalStringValue optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1029,8 +1029,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { - localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1343,10 +1343,11 @@ This API creates a new ABitOfEverything * @param pathEnumValue * @param nestedPathEnumValue * @param enumValueAnnotation Numeric enum description. + * @param optionalStringValue @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, optionalStringValue string) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1356,7 +1357,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}" + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue}" localVarPath = strings.Replace(localVarPath, "{"+"floatValue"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"doubleValue"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64Value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -1376,6 +1377,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co localVarPath = strings.Replace(localVarPath, "{"+"pathEnumValue"+"}", fmt.Sprintf("%v", pathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"nestedPathEnumValue"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"enumValueAnnotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) + localVarPath = strings.Replace(localVarPath, "{"+"optionalStringValue"+"}", fmt.Sprintf("%v", optionalStringValue), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -2507,7 +2509,7 @@ ABitOfEverythingServiceApiService * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. - * @param "OptionalString" (optional.String) - + * @param "OptionalStringValue" (optional.String) - @return interface{} */ @@ -2546,7 +2548,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { NestedAnnotationOk optional.String Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String - OptionalString optional.String + OptionalStringValue optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { @@ -2667,8 +2669,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.OptionalString.IsSet() { - localVarQueryParams.Add("optionalString", parameterToString(localVarOptionals.OptionalString.Value(), "")) + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index 5fd34717af7..13e68e74443 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -60,5 +60,5 @@ type ExamplepbABitOfEverything struct { Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` - OptionalString string `json:"optionalString,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` } diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index b856843fcc0..3360add9eea 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -109,6 +109,7 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.PathEnumValue.String(), want.NestedPathEnumValue.String(), want.EnumValueAnnotation.String(), + want.OptionalStringValue, ) if err != nil { t.Fatalf("cl.Create(%#v) failed with %v; want success", want, err) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index a432ba6f878..d00e5b97d7e 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -62,15 +62,13 @@ func TestEchoPatch(t *testing.T) { sent := examplepb.DynamicMessage{ StructField: &structpb.Struct{Fields: map[string]*structpb.Value{ - "struct_key": {Kind: &structpb.Value_StructValue{ - StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ - "layered_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "struct_val"}}, - }}, - }}}}, - ValueField: &structpb.Value{Kind: &structpb.Value_StructValue{StructValue: - &structpb.Struct{Fields: map[string]*structpb.Value{ - "value_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "value_struct_val"}, - }}}, + "struct_key": {Kind: &structpb.Value_StructValue{ + StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ + "layered_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "struct_val"}}, + }}, + }}}}, + ValueField: &structpb.Value{Kind: &structpb.Value_StructValue{StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ + "value_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "value_struct_val"}}}}, }}, } payload, err := protojson.MarshalOptions{UseProtoNames: true}.Marshal(&sent) @@ -351,6 +349,7 @@ func TestABE(t *testing.T) { } func testABECreate(t *testing.T, port int) { + optionalStrVal := "optional-str" want := &examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -371,8 +370,9 @@ func testABECreate(t *testing.T, port int) { PathEnumValue: pathenum.PathEnum_DEF, NestedPathEnumValue: pathenum.MessagePathEnum_JKL, EnumValueAnnotation: examplepb.NumericEnum_ONE, + OptionalStringValue: &optionalStrVal, } - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation, *want.OptionalStringValue) resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { @@ -406,6 +406,7 @@ func testABECreate(t *testing.T, port int) { } func testABECreateBody(t *testing.T, port int) { + optionalStrVal := "optional-str" want := &examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -475,6 +476,7 @@ func testABECreateBody(t *testing.T, port int) { Name: "hoge", Amount: 10, }, + OptionalStringValue: &optionalStrVal, } apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) payload, err := marshaler.Marshal(want) @@ -525,6 +527,7 @@ func testABEBulkCreate(t *testing.T, port int) { for _, val := range []string{ "foo", "bar", "baz", "qux", "quux", } { + strVal := fmt.Sprintf("strprefix/%s", val) want := &examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -534,7 +537,7 @@ func testABEBulkCreate(t *testing.T, port int) { Fixed64Value: 9223372036854775807, Fixed32Value: 4294967295, BoolValue: true, - StringValue: fmt.Sprintf("strprefix/%s", val), + StringValue: strVal, Uint32Value: 4294967295, Sfixed32Value: 2147483647, Sfixed64Value: -4611686018427387904, @@ -578,6 +581,7 @@ func testABEBulkCreate(t *testing.T, port int) { Name: "hoge", Amount: 10, }, + OptionalStringValue: &strVal, } out, err := marshaler.Marshal(want) if err != nil { @@ -1837,6 +1841,7 @@ func testRequestQueryParams(t *testing.T, port int) { formValues.Set("string_value", "hello-world") formValues.Add("repeated_string_value", "demo1") formValues.Add("repeated_string_value", "demo2") + formValues.Add("optional_string_value", "optional-val") testCases := []struct { name string @@ -1900,6 +1905,10 @@ func testRequestQueryParams(t *testing.T, port int) { BoolValue: true, StringValue: "hello-world", RepeatedStringValue: []string{"demo1", "demo2"}, + OptionalStringValue: func() *string { + val := formValues.Get("optional_string_value") + return &val + }(), }, requestContent: strings.NewReader(formValues.Encode()), }, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 2ed3b356810..1109b612b05 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -292,7 +292,8 @@ type ABitOfEverything struct { // mark a field as required in Open API definition RequiredStringViaFieldBehaviorAnnotation string `protobuf:"bytes,38,opt,name=required_string_via_field_behavior_annotation,json=requiredStringViaFieldBehaviorAnnotation,proto3" json:"required_string_via_field_behavior_annotation,omitempty"` // mark a field as readonly in Open API definition - OutputOnlyStringViaFieldBehaviorAnnotation string `protobuf:"bytes,39,opt,name=output_only_string_via_field_behavior_annotation,json=outputOnlyStringViaFieldBehaviorAnnotation,proto3" json:"output_only_string_via_field_behavior_annotation,omitempty"` + OutputOnlyStringViaFieldBehaviorAnnotation string `protobuf:"bytes,39,opt,name=output_only_string_via_field_behavior_annotation,json=outputOnlyStringViaFieldBehaviorAnnotation,proto3" json:"output_only_string_via_field_behavior_annotation,omitempty"` + OptionalStringValue *string `protobuf:"bytes,40,opt,name=optional_string_value,json=optionalStringValue,proto3,oneof" json:"optional_string_value,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -600,6 +601,13 @@ func (x *ABitOfEverything) GetOutputOnlyStringViaFieldBehaviorAnnotation() strin return "" } +func (x *ABitOfEverything) GetOptionalStringValue() string { + if x != nil && x.OptionalStringValue != nil { + return *x.OptionalStringValue + } + return "" +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1348,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x82, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd5, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1542,223 +1550,195 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xe8, 0x01, - 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, - 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, - 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, - 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, - 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, - 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, - 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, - 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, - 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, - 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, - 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, + 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, + 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, + 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, + 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, + 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, + 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, + 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, + 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, + 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, + 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, + 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, + 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, + 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, + 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, + 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, + 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, - 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, + 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, + 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, + 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, + 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, + 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, + 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, - 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, + 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, + 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, - 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, - 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, - 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, - 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, - 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, + 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, + 0x45, 0x10, 0x01, 0x32, 0xb8, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0xa4, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, @@ -1766,177 +1746,275 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x95, + 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8e, 0x03, 0x22, 0x8b, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, + 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x7b, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, 0x0a, + 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, + 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, + 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, + 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, - 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, - 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, - 0x6b, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, + 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, + 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, + 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, + 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2c, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, - 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, + 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, - 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, + 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, - 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, - 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, - 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, - 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, - 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, + 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, + 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, + 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, + 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, + 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, + 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, + 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, + 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, + 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, - 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, - 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, - 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, - 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, - 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, - 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, - 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, + 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, @@ -1944,251 +2022,188 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, - 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, - 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, + 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, + 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, + 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, + 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, - 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, - 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, + 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, + 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, + 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, + 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, - 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, - 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, - 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, - 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, - 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, - 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, + 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, + 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, + 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, + 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, + 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, + 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, + 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, + 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, + 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, + 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, + 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, + 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, + 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, + 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, - 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, - 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, - 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, - 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, - 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, - 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, - 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, - 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, - 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, - 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, - 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, - 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, - 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, - 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, - 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, - 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, - 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, - 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, - 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, - 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, - 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, - 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, - 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, - 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, - 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, + 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, + 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, + 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, + 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, + 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, + 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, + 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, + 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, + 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, - 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, - 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, - 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, + 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, + 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, + 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, + 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 25a9a60c826..38e6630dbc8 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -36,7 +36,7 @@ var _ = utilities.NewDoubleArray var _ = metadata.Join var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18, "optional_string_value": 19}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -249,6 +249,16 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.EnumValueAnnotation = NumericEnum(e) + val, ok = pathParams["optional_string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "optional_string_value") + } + + protoReq.OptionalStringValue, err = runtime.StringP(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "optional_string_value", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -471,6 +481,16 @@ func local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshal protoReq.EnumValueAnnotation = NumericEnum(e) + val, ok = pathParams["optional_string_value"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "optional_string_value") + } + + protoReq.OptionalStringValue, err = runtime.StringP(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "optional_string_value", err) + } + if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -3583,7 +3603,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation", "optional_string_value"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 542cc217308..3a5522869fe 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -326,7 +326,7 @@ message ABitOfEverything { // mark a field as readonly in Open API definition string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; - optional string optional_string = 40; + optional string optional_string_value = 40; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality @@ -460,7 +460,7 @@ service ABitOfEverythingService { // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}/{optional_string_value}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 83b9b46015f..b9709c2735c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -497,7 +497,7 @@ "type": "string" }, { - "name": "optionalString", + "name": "optionalStringValue", "in": "query", "required": false, "type": "string" @@ -843,7 +843,7 @@ "type": "string" }, { - "name": "optionalString", + "name": "optionalStringValue", "in": "query", "required": false, "type": "string" @@ -1178,7 +1178,7 @@ "type": "string" }, { - "name": "optionalString", + "name": "optionalStringValue", "in": "query", "required": false, "type": "string" @@ -1531,7 +1531,7 @@ "type": "string" }, { - "name": "optionalString", + "name": "optionalStringValue", "in": "query", "required": false, "type": "string" @@ -1548,7 +1548,7 @@ } } }, - "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}": { + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -1735,6 +1735,12 @@ "ZERO", "ONE" ] + }, + { + "name": "optionalStringValue", + "in": "path", + "required": true, + "type": "string" } ], "tags": [ @@ -3332,7 +3338,7 @@ "title": "mark a field as readonly in Open API definition", "readOnly": true }, - "optionalString": { + "optionalStringValue": { "type": "string" } }, diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index eb3be65a6ff..7d76834895b 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -274,7 +274,7 @@ "title": "mark a field as readonly in Open API definition", "readOnly": true }, - "optionalString": { + "optionalStringValue": { "type": "string" } }, diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index b4bebc83b5c..7f17f28580e 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -401,7 +401,7 @@ "title": "mark a field as readonly in Open API definition", "readOnly": true }, - "optionalString": { + "optionalStringValue": { "type": "string" } }, diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index 8e80b7cd59d..9b046edbd55 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -280,6 +280,8 @@ func (p Parameter) ConvertFuncExpr() (string, error) { tbl := proto3ConvertFuncs if !p.IsProto2() && p.IsRepeated() { tbl = proto3RepeatedConvertFuncs + } else if !p.IsProto2() && p.IsOptionalProto3() { + tbl = proto3OptionalConvertFuncs } else if p.IsProto2() && !p.IsRepeated() { tbl = proto2ConvertFuncs } else if p.IsProto2() && p.IsRepeated() { @@ -345,6 +347,14 @@ func (p FieldPath) IsNestedProto3() bool { return false } +// IsOptionalProto3 indicates whether the FieldPath is a proto3 optional field. +func (p FieldPath) IsOptionalProto3() bool { + if len(p) == 0 { + return false + } + return p[0].Target.GetProto3Optional() +} + // AssignableExpr is an assignable expression in Go to be used to assign a value to the target field. // It starts with "msgExpr", which is the go expression of the method request object. func (p FieldPath) AssignableExpr(msgExpr string) string { @@ -356,8 +366,10 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { var preparations []string components := msgExpr for i, c := range p { - // Check if it is a oneOf field. - if c.Target.OneofIndex != nil { + if c.Target.GetProto3Optional() { + // Continue as a proto3 optional field does not need a special treatment. + // This condition is required as otherwise it is matched by `c.Target.OneofIndex != nil`. + } else if c.Target.OneofIndex != nil { // check if it is a oneOf field index := c.Target.OneofIndex msg := c.Target.Message oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) @@ -433,6 +445,18 @@ var ( descriptorpb.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64", } + proto3OptionalConvertFuncs = func() map[descriptorpb.FieldDescriptorProto_Type]string { + result := make(map[descriptorpb.FieldDescriptorProto_Type]string) + for typ, converter := range proto3ConvertFuncs { + // TODO: this will use convert functions from proto2. + // The converters returning pointers should be moved + // to a more generic file. + result[typ] = converter + "P" + } + return result + }() + + // TODO: replace it with a IIFE proto3RepeatedConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{ descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", descriptorpb.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", diff --git a/runtime/query_test.go b/runtime/query_test.go index bfab6c2b454..d74a52e878d 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -44,6 +44,7 @@ func BenchmarkPopulateQueryParameters(b *testing.B) { "timestamp_value": {timeStr}, "duration_value": {durationStr}, "fieldmask_value": {fieldmaskStr}, + "optional_string_value": {"optional-str"}, "wrapper_float_value": {"1.5"}, "wrapper_double_value": {"2.5"}, "wrapper_int64_value": {"-1"}, From 0bbdda9185908c0efd505b75569c800455c47652 Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Fri, 12 Feb 2021 22:16:07 +0100 Subject: [PATCH 0843/1518] internal/descriptor: forbid proto3 optional fields from URL path --- .../internal/clients/abe/api/swagger.yaml | 7 +- .../abe/api_a_bit_of_everything_service.go | 6 +- examples/internal/integration/client_test.go | 1 - .../internal/integration/integration_test.go | 4 +- .../proto/examplepb/a_bit_of_everything.pb.go | 836 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 24 +- .../proto/examplepb/a_bit_of_everything.proto | 6 +- .../a_bit_of_everything.swagger.json | 8 +- internal/descriptor/services.go | 3 + internal/descriptor/services_test.go | 49 + internal/descriptor/types.go | 8 +- 11 files changed, 483 insertions(+), 469 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index bacb9b3c420..89dd9680d43 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1384,7 +1384,7 @@ paths: description: "Find out more about GetQuery" url: "https://github.com/grpc-ecosystem/grpc-gateway" deprecated: true - ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue} + ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation} : post: tags: - "ABitOfEverythingService" @@ -1514,11 +1514,6 @@ paths: - "ZERO" - "ONE" x-exportParamName: "EnumValueAnnotation" - - name: "optionalStringValue" - in: "path" - required: true - type: "string" - x-exportParamName: "OptionalStringValue" responses: 200: description: "A successful response." diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 899135bcf1a..f83145c9432 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -1343,11 +1343,10 @@ This API creates a new ABitOfEverything * @param pathEnumValue * @param nestedPathEnumValue * @param enumValueAnnotation Numeric enum description. - * @param optionalStringValue @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, optionalStringValue string) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1357,7 +1356,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue}" + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}" localVarPath = strings.Replace(localVarPath, "{"+"floatValue"+"}", fmt.Sprintf("%v", floatValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"doubleValue"+"}", fmt.Sprintf("%v", doubleValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"int64Value"+"}", fmt.Sprintf("%v", int64Value), -1) @@ -1377,7 +1376,6 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co localVarPath = strings.Replace(localVarPath, "{"+"pathEnumValue"+"}", fmt.Sprintf("%v", pathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"nestedPathEnumValue"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) localVarPath = strings.Replace(localVarPath, "{"+"enumValueAnnotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) - localVarPath = strings.Replace(localVarPath, "{"+"optionalStringValue"+"}", fmt.Sprintf("%v", optionalStringValue), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 3360add9eea..b856843fcc0 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -109,7 +109,6 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.PathEnumValue.String(), want.NestedPathEnumValue.String(), want.EnumValueAnnotation.String(), - want.OptionalStringValue, ) if err != nil { t.Fatalf("cl.Create(%#v) failed with %v; want success", want, err) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index d00e5b97d7e..051ce2dbafa 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -349,7 +349,6 @@ func TestABE(t *testing.T) { } func testABECreate(t *testing.T, port int) { - optionalStrVal := "optional-str" want := &examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -370,9 +369,8 @@ func testABECreate(t *testing.T, port int) { PathEnumValue: pathenum.PathEnum_DEF, NestedPathEnumValue: pathenum.MessagePathEnum_JKL, EnumValueAnnotation: examplepb.NumericEnum_ONE, - OptionalStringValue: &optionalStrVal, } - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation, *want.OptionalStringValue) + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 1109b612b05..8045c1cf620 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1736,9 +1736,9 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, - 0x45, 0x10, 0x01, 0x32, 0xb8, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xa4, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, @@ -1746,8 +1746,8 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x95, - 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8e, 0x03, 0x22, 0x8b, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, + 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, @@ -1770,440 +1770,438 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x7b, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, - 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, 0x0a, - 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, + 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, + 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, + 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, + 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, 0x76, - 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, - 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, - 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, - 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, - 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, - 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, + 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, - 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, - 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, - 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, - 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, - 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, - 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, - 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, - 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, - 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, + 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, + 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, + 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, + 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, + 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, - 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, - 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, - 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, - 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, + 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, + 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, + 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, + 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, + 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, + 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, + 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, + 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, + 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, + 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, - 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, - 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, + 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, - 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, - 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, - 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, - 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, - 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, - 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, - 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, - 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, - 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, + 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, + 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, + 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, + 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, + 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, + 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, + 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, + 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, + 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, - 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, - 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, - 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, - 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, - 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, - 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, - 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, - 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, - 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, - 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, - 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, - 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, - 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, - 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, - 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, - 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, - 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, - 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, - 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, - 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, - 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, - 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, + 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, + 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, + 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, + 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, + 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, + 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, + 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, + 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, + 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, + 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, + 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, + 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, + 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, + 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, + 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, + 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, + 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, + 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, + 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, + 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, + 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, + 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, + 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, + 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, + 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, + 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, + 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, + 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, + 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 38e6630dbc8..25a9a60c826 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -36,7 +36,7 @@ var _ = utilities.NewDoubleArray var _ = metadata.Join var ( - filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18, "optional_string_value": 19}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}} + filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}} ) func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -249,16 +249,6 @@ func request_ABitOfEverythingService_Create_0(ctx context.Context, marshaler run protoReq.EnumValueAnnotation = NumericEnum(e) - val, ok = pathParams["optional_string_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "optional_string_value") - } - - protoReq.OptionalStringValue, err = runtime.StringP(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "optional_string_value", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -481,16 +471,6 @@ func local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshal protoReq.EnumValueAnnotation = NumericEnum(e) - val, ok = pathParams["optional_string_value"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "optional_string_value") - } - - protoReq.OptionalStringValue, err = runtime.StringP(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "optional_string_value", err) - } - if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -3603,7 +3583,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23, 1, 0, 4, 1, 5, 24}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation", "optional_string_value"}, "")) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "")) pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 3a5522869fe..b5fee5532bc 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -433,14 +433,14 @@ message UpdateBookRequest { // The book's `name` field is used to identify the book to be updated. // Format: publishers/{publisher}/books/{book} Book book = 1 [(google.api.field_behavior) = REQUIRED]; - + // The list of fields to be updated. google.protobuf.FieldMask update_mask = 2; // If set to true, and the book is not found, a new book will be created. // In this situation, `update_mask` is ignored. bool allow_missing = 3; - + } // ABitOfEverything service is used to validate that APIs with complicated @@ -460,7 +460,7 @@ service ABitOfEverythingService { // This API creates a new ABitOfEverything rpc Create(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}/{optional_string_value}" + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" }; } rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index b9709c2735c..5750fc6e491 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1548,7 +1548,7 @@ } } }, - "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}/{optionalStringValue}": { + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -1735,12 +1735,6 @@ "ZERO", "ONE" ] - }, - { - "name": "optionalStringValue", - "in": "path", - "required": true, - "type": "string" } ], "tags": [ diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go index 4679aed2218..f0a96623d00 100644 --- a/internal/descriptor/services.go +++ b/internal/descriptor/services.go @@ -328,6 +328,9 @@ func (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) if !(isPathParam || r.allowRepeatedFieldsInBody) && f.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED { return nil, fmt.Errorf("repeated field not allowed in field path: %s in %s", f.GetName(), path) } + if isPathParam && f.GetProto3Optional() { + return nil, fmt.Errorf("optional field not allowed in field path: %s in %s", f.GetName(), path) + } result = append(result, FieldPathComponent{Name: c, Target: f}) } return result, nil diff --git a/internal/descriptor/services_test.go b/internal/descriptor/services_test.go index cb9768c049a..8ce91f13476 100644 --- a/internal/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -2,6 +2,7 @@ package descriptor import ( "reflect" + "strings" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" @@ -1396,3 +1397,51 @@ func TestCauseErrorWithPathParam(t *testing.T) { t.Errorf("loadServices(%q, %q) failed with %v; want success", target, input, err) } } + +func TestOptionalProto3URLPathMappingError(t *testing.T) { + src := ` + name: "path/to/example.proto" + package: "example" + message_type < + name: "StringMessage" + field < + name: "field1" + number: 1 + type: TYPE_STRING + proto3_optional: true + > + > + service < + name: "ExampleService" + method < + name: "Echo" + input_type: "StringMessage" + output_type: "StringMessage" + options < + [google.api.http] < + get: "/v1/example/echo/{field1=*}" + > + > + > + > + ` + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { + t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) + } + target := "path/to/example.proto" + reg := NewRegistry() + input := []*descriptorpb.FileDescriptorProto{&fd} + reg.loadFile(fd.GetName(), &protogen.File{ + Proto: &fd, + }) + wantErrMsg := "field not allowed in field path: field1 in field1" + err := reg.loadServices(reg.files[target]) + if err != nil { + if !strings.Contains(err.Error(), wantErrMsg) { + t.Errorf("loadServices(%q, %q) failed with %v; want %s", target, input, err, wantErrMsg) + } + } else { + t.Errorf("loadServices(%q, %q) expcted an error %s, got nil", target, input, wantErrMsg) + } +} diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index 9b046edbd55..38223c3c3c0 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -366,10 +366,10 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { var preparations []string components := msgExpr for i, c := range p { - if c.Target.GetProto3Optional() { - // Continue as a proto3 optional field does not need a special treatment. - // This condition is required as otherwise it is matched by `c.Target.OneofIndex != nil`. - } else if c.Target.OneofIndex != nil { // check if it is a oneOf field + // We need to check if the target is not proto3_optional first. + // Under the hood, proto3_optional uses oneof to signal to old proto3 clients + // that presence is tracked for this field. This oneof is known as a "synthetic" oneof. + if !c.Target.GetProto3Optional() && c.Target.OneofIndex != nil { index := c.Target.OneofIndex msg := c.Target.Message oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) From a6d5d1c35fb28cb705cecbae7bd222bfa8fc0e0f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 24 Feb 2021 17:39:24 +0000 Subject: [PATCH 0844/1518] fix(deps): update google.golang.org/genproto commit hash to 063164c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index fe558aaeb0a..0443d7190bd 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b + google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 google.golang.org/grpc v1.35.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 3a878ef0122..c17fdc30365 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b h1:GXCSqFSSKq+L4Pi31A2Ba7j8BZCwHN8oJkREab1VokI= -google.golang.org/genproto v0.0.0-20210223151946-22b48be4551b/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 h1:bXUwz2WkXXrXgiLxww3vWmoSHLOGv4ipdPdTvKymcKw= +google.golang.org/genproto v0.0.0-20210224155714-063164c882e6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ace5b53b20d..894bdcc211a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:GXCSqFSSKq+L4Pi31A2Ba7j8BZCwHN8oJkREab1VokI=", - version = "v0.0.0-20210223151946-22b48be4551b", + sum = "h1:bXUwz2WkXXrXgiLxww3vWmoSHLOGv4ipdPdTvKymcKw=", + version = "v0.0.0-20210224155714-063164c882e6", ) go_repository( name = "org_golang_google_grpc", From 630c857c8c206cffcb85cb05979ce6158015da1c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 25 Feb 2021 00:00:40 +0000 Subject: [PATCH 0845/1518] fix(deps): update module google.golang.org/grpc to v1.36.0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0443d7190bd..6aef819a4aa 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 - google.golang.org/grpc v1.35.0 + google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 ) diff --git a/go.sum b/go.sum index c17fdc30365..b8f99efa038 100644 --- a/go.sum +++ b/go.sum @@ -568,8 +568,8 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 894bdcc211a..12563604815 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1055,8 +1055,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=", - version = "v1.35.0", + sum = "h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As=", + version = "v1.36.0", ) go_repository( From bcc34ef50bda81faae5d4bbfca2e7ea8fe4700c8 Mon Sep 17 00:00:00 2001 From: Adam Babik Date: Thu, 25 Feb 2021 19:18:25 +0100 Subject: [PATCH 0846/1518] release: prepare release v2.3.0 --- CHANGELOG.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b1a48bbbb1..fe06980b956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,58 @@ # Change Log +## [v2.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.3.0) (2021-02-25) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.2.0...v2.3.0) + +**Implemented enhancements:** + +- Support optional annotation in proto3 files in generators [\#1278](https://github.com/grpc-ecosystem/grpc-gateway/issues/1278) + +**Fixed bugs:** + +- grpc-gateway v2 misreads grpc protobuf field\_mask behavior, breaks existing valid behavior [\#1766](https://github.com/grpc-ecosystem/grpc-gateway/issues/1766) + +**Closed issues:** + +- grpc-gateway service run error [\#1996](https://github.com/grpc-ecosystem/grpc-gateway/issues/1996) +- ../proto/api/proto/service.pb.gw.go:129:95: cannot use \*StringMessage value as type protoreflect.ProtoMessage in return argument: \*StringMessage does not implement protoreflect.ProtoMessage \(missing ProtoReflect method\) [\#1989](https://github.com/grpc-ecosystem/grpc-gateway/issues/1989) +- Grpc healthcheck docs are unclear [\#1977](https://github.com/grpc-ecosystem/grpc-gateway/issues/1977) +- Gateway protoc does not generate protoreflect.ProtoMessage messages [\#1959](https://github.com/grpc-ecosystem/grpc-gateway/issues/1959) +- \[bazel\] Got "missing strict dependencies" when use protoc-gen-grpc-gateway as bazel-gazelle grpc compiler [\#1941](https://github.com/grpc-ecosystem/grpc-gateway/issues/1941) +- Non official implementation [\#1940](https://github.com/grpc-ecosystem/grpc-gateway/issues/1940) +- Empty fields included in response. [\#1871](https://github.com/grpc-ecosystem/grpc-gateway/issues/1871) + +**Merged pull requests:** + +- fix\(deps\): update module google.golang.org/grpc to v1.36.0 \(master\) [\#1999](https://github.com/grpc-ecosystem/grpc-gateway/pull/1999) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to 063164c \(master\) [\#1998](https://github.com/grpc-ecosystem/grpc-gateway/pull/1998) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update dependency com\_google\_protobuf to v3.15.2 \(master\) [\#1995](https://github.com/grpc-ecosystem/grpc-gateway/pull/1995) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update bufbuild/buf docker tag to v0.37.1 \(master\) [\#1994](https://github.com/grpc-ecosystem/grpc-gateway/pull/1994) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to 22b48be \(master\) [\#1993](https://github.com/grpc-ecosystem/grpc-gateway/pull/1993) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to 3e1e516 \(master\) [\#1991](https://github.com/grpc-ecosystem/grpc-gateway/pull/1991) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to aa3ee6e \(master\) [\#1990](https://github.com/grpc-ecosystem/grpc-gateway/pull/1990) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update dependency com\_google\_protobuf to v3.15.1 \(master\) [\#1987](https://github.com/grpc-ecosystem/grpc-gateway/pull/1987) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update golang.org/x/oauth2 commit hash to 9bb9049 \(master\) [\#1986](https://github.com/grpc-ecosystem/grpc-gateway/pull/1986) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to d891e3c \(master\) [\#1985](https://github.com/grpc-ecosystem/grpc-gateway/pull/1985) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update dependency com\_google\_protobuf to v3.15.0 \(master\) [\#1984](https://github.com/grpc-ecosystem/grpc-gateway/pull/1984) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update golang.org/x/oauth2 commit hash to ba52d33 \(master\) [\#1983](https://github.com/grpc-ecosystem/grpc-gateway/pull/1983) ([renovate[bot]](https://github.com/apps/renovate)) +- fix\(deps\): update google.golang.org/genproto commit hash to fe80b38 \(master\) [\#1982](https://github.com/grpc-ecosystem/grpc-gateway/pull/1982) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update google.golang.org/genproto commit hash to c185827 \(master\) [\#1979](https://github.com/grpc-ecosystem/grpc-gateway/pull/1979) ([renovate[bot]](https://github.com/apps/renovate)) +- Use base64.URLEncoding for \[\]byte parameters in query [\#1978](https://github.com/grpc-ecosystem/grpc-gateway/pull/1978) ([tvoll](https://github.com/tvoll)) +- chore\(deps\): update golang docker tag to v1.16.0 \(master\) [\#1976](https://github.com/grpc-ecosystem/grpc-gateway/pull/1976) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update golang.org/x/oauth2 commit hash to 16ff188 \(master\) [\#1974](https://github.com/grpc-ecosystem/grpc-gateway/pull/1974) ([renovate[bot]](https://github.com/apps/renovate)) +- adding UnimplementedGreeterServer to server struct [\#1973](https://github.com/grpc-ecosystem/grpc-gateway/pull/1973) ([nwandabridges](https://github.com/nwandabridges)) +- \[Bazel\] Update protobuf, rules\_go and gazelle [\#1972](https://github.com/grpc-ecosystem/grpc-gateway/pull/1972) ([aaliddell](https://github.com/aaliddell)) +- Migrate generation, linting to buf [\#1971](https://github.com/grpc-ecosystem/grpc-gateway/pull/1971) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- chore\(deps\): update google.golang.org/genproto commit hash to e7f2df4 \(master\) [\#1970](https://github.com/grpc-ecosystem/grpc-gateway/pull/1970) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update google.golang.org/genproto commit hash to 4ccc9a5 \(master\) [\#1969](https://github.com/grpc-ecosystem/grpc-gateway/pull/1969) ([renovate[bot]](https://github.com/apps/renovate)) +- Bump nokogiri from 1.10.10 to 1.11.1 in /docs [\#1967](https://github.com/grpc-ecosystem/grpc-gateway/pull/1967) ([dependabot[bot]](https://github.com/apps/dependabot)) +- docs/Gemfile.lock: Fix dependabot security warning [\#1966](https://github.com/grpc-ecosystem/grpc-gateway/pull/1966) ([ivucica](https://github.com/ivucica)) +- chore\(deps\): update google.golang.org/genproto commit hash to 3a9a48d \(master\) [\#1965](https://github.com/grpc-ecosystem/grpc-gateway/pull/1965) ([renovate[bot]](https://github.com/apps/renovate)) +- chore\(deps\): update golang.org/x/oauth2 commit hash to 6667018 \(master\) [\#1964](https://github.com/grpc-ecosystem/grpc-gateway/pull/1964) ([renovate[bot]](https://github.com/apps/renovate)) +- Update CONTRIBUTING.md on release description [\#1960](https://github.com/grpc-ecosystem/grpc-gateway/pull/1960) ([adambabik](https://github.com/adambabik)) +- gen-grpc-gateway, gen-openapiv2: add support for proto3 optional [\#1951](https://github.com/grpc-ecosystem/grpc-gateway/pull/1951) ([adambabik](https://github.com/adambabik)) +- FAQ Adding related projects to the documentation [\#1946](https://github.com/grpc-ecosystem/grpc-gateway/pull/1946) ([rodoufu](https://github.com/rodoufu)) + ## [v2.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.2.0) (2021-02-09) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.1.0...v2.2.0) diff --git a/Makefile b/Makefile index 177dde470ea..0e1f7dc23a9 100644 --- a/Makefile +++ b/Makefile @@ -138,7 +138,7 @@ changelog: --github-site=https://github.com \ --unreleased-label "**Next release**" \ --release-branch=master \ - --future-release=v2.2.0 + --future-release=v2.3.0 clean: find . -type f -name '*.pb.go' -delete From 4e7d187c3c5ee2153ba894072b5f70662b81e76d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 25 Feb 2021 22:05:24 +0000 Subject: [PATCH 0847/1518] fix(deps): update google.golang.org/genproto commit hash to ad91960 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6aef819a4aa..f57f205e566 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 + google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index b8f99efa038..c49574507e2 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210224155714-063164c882e6 h1:bXUwz2WkXXrXgiLxww3vWmoSHLOGv4ipdPdTvKymcKw= -google.golang.org/genproto v0.0.0-20210224155714-063164c882e6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274 h1:FuPOK/iY40x3uIBIXNuscnO3K7FMO8DfPyK1RTefJIY= +google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 12563604815..6531f69ec8a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:bXUwz2WkXXrXgiLxww3vWmoSHLOGv4ipdPdTvKymcKw=", - version = "v0.0.0-20210224155714-063164c882e6", + sum = "h1:FuPOK/iY40x3uIBIXNuscnO3K7FMO8DfPyK1RTefJIY=", + version = "v0.0.0-20210225212918-ad91960f0274", ) go_repository( name = "org_golang_google_grpc", From c2d2063a648d3fa94ddcf1ef15bdb9ed6bccf06d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 25 Feb 2021 23:10:02 +0000 Subject: [PATCH 0848/1518] chore(deps): update bufbuild/buf docker tag to v0.38.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9c409cf6b6c..d7742770e41 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.0.0 proto_lint: docker: - - image: bufbuild/buf:0.37.1 + - image: bufbuild/buf:0.38.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.37.1 + - image: bufbuild/buf:0.38.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From c6ff5e309731fb1feaaa91908328416f22119224 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 26 Feb 2021 00:21:47 +0000 Subject: [PATCH 0849/1518] chore(deps): update dependency com_google_protobuf to v3.15.3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 44e3a955cad..f189a620c10 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "3c85fdac243dab1f6cd725eb58e361cdbb3ec4480052ac90b1ab55c608112cd0", - strip_prefix = "protobuf-3.15.2", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.2.tar.gz"], + sha256 = "b10bf4e2d1a7586f54e64a5d9e7837e5188fc75ae69e36f215eb01def4f9721b", + strip_prefix = "protobuf-3.15.3", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.3.tar.gz"], ) http_archive( From 0b58d808e990e6cba3540daeded22761402bc8e2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 26 Feb 2021 18:03:55 +0000 Subject: [PATCH 0850/1518] fix(deps): update google.golang.org/genproto commit hash to ab064af --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f57f205e566..f1994d348a3 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274 + google.golang.org/genproto v0.0.0-20210226172003-ab064af71705 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index c49574507e2..4656e91b699 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274 h1:FuPOK/iY40x3uIBIXNuscnO3K7FMO8DfPyK1RTefJIY= -google.golang.org/genproto v0.0.0-20210225212918-ad91960f0274/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705 h1:PYBmACG+YEv8uQPW0r1kJj8tR+gkF0UWq7iFdUezwEw= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6531f69ec8a..ae5625c0f26 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:FuPOK/iY40x3uIBIXNuscnO3K7FMO8DfPyK1RTefJIY=", - version = "v0.0.0-20210225212918-ad91960f0274", + sum = "h1:PYBmACG+YEv8uQPW0r1kJj8tR+gkF0UWq7iFdUezwEw=", + version = "v0.0.0-20210226172003-ab064af71705", ) go_repository( name = "org_golang_google_grpc", From 1e4416e32e0f26aacc40397d17215772478c093e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 26 Feb 2021 20:43:55 +0000 Subject: [PATCH 0851/1518] Fix buf reference in README (#2008) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ed4f63bdb8..9aa159da99a 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. ``` > You will need to provide the required third party protobuf files to the protobuf compiler. - > If you are using [buf](https://github.com/buf/bufbuild), this dependency can + > If you are using [buf](https://github.com/bufbuild/buf), this dependency can > be added to the `deps` array in your `buf.yaml` under the name > `buf.build/beta/googleapis`: > ```yaml From 6c38bb6b46811a6331a287355d2e5548457a5809 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Mar 2021 11:15:49 +0000 Subject: [PATCH 0852/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.0.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f189a620c10..17e363c4d44 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -80,9 +80,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "0d3ca4ed434958dda241fb129f77bd5ef0ce246250feed2d5a5470c6f29a77fa", - strip_prefix = "buildtools-4.0.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.0.0.tar.gz"], + sha256 = "c28eef4d30ba1a195c6837acf6c75a4034981f5b4002dda3c5aa6e48ce023cf1", + strip_prefix = "buildtools-4.0.1", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.0.1.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 4a022995b8a6d9091ef3099c0a9c22bb6a8b50bb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 2 Mar 2021 18:30:22 +0000 Subject: [PATCH 0853/1518] fix(deps): update google.golang.org/genproto commit hash to 5ede27f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f1994d348a3..3c552feb359 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210226172003-ab064af71705 + google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 4656e91b699..cf3987024c1 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705 h1:PYBmACG+YEv8uQPW0r1kJj8tR+gkF0UWq7iFdUezwEw= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881 h1:SYuy3hIRsBIROE0aZwsJZOEJNC/n9/p0FmLEU9C31AE= +google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ae5625c0f26..afa845c4cfe 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:PYBmACG+YEv8uQPW0r1kJj8tR+gkF0UWq7iFdUezwEw=", - version = "v0.0.0-20210226172003-ab064af71705", + sum = "h1:SYuy3hIRsBIROE0aZwsJZOEJNC/n9/p0FmLEU9C31AE=", + version = "v0.0.0-20210302174412-5ede27ff9881", ) go_repository( name = "org_golang_google_grpc", From 113d709f4d8d6d8b6d54b40fc228e310bec745ee Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Mar 2021 16:32:06 +0000 Subject: [PATCH 0854/1518] fix(deps): update google.golang.org/genproto commit hash to 9728d6b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3c552feb359..c16b36da04e 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.4 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881 + google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index cf3987024c1..a3dbb9fef41 100644 --- a/go.sum +++ b/go.sum @@ -552,8 +552,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881 h1:SYuy3hIRsBIROE0aZwsJZOEJNC/n9/p0FmLEU9C31AE= -google.golang.org/genproto v0.0.0-20210302174412-5ede27ff9881/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb h1:hcskBH5qZCOa7WpTUFUFvoebnSFZBYpjykLtjIp9DVk= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index afa845c4cfe..0b5c1b4c3c7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SYuy3hIRsBIROE0aZwsJZOEJNC/n9/p0FmLEU9C31AE=", - version = "v0.0.0-20210302174412-5ede27ff9881", + sum = "h1:hcskBH5qZCOa7WpTUFUFvoebnSFZBYpjykLtjIp9DVk=", + version = "v0.0.0-20210303154014-9728d6b83eeb", ) go_repository( name = "org_golang_google_grpc", From 6f693f21717d50f086db0e5507db7ae9c0765c62 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Mar 2021 23:25:42 +0000 Subject: [PATCH 0855/1518] chore(deps): update dependency com_google_protobuf to v3.15.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 17e363c4d44..12cf49df73b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "b10bf4e2d1a7586f54e64a5d9e7837e5188fc75ae69e36f215eb01def4f9721b", - strip_prefix = "protobuf-3.15.3", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.3.tar.gz"], + sha256 = "07f8a02afc14a657f727ed89a8ec5627b9ecc47116d60acaabaa1da233bd2e8f", + strip_prefix = "protobuf-3.15.4", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.4.tar.gz"], ) http_archive( From 87b094fe5796393d9b67202218078cbd7d2dc707 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Mar 2021 17:28:29 +0000 Subject: [PATCH 0856/1518] chore(deps): update bufbuild/buf docker tag to v0.39.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d7742770e41..47e471175b1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.0.0 proto_lint: docker: - - image: bufbuild/buf:0.38.0 + - image: bufbuild/buf:0.39.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.38.0 + - image: bufbuild/buf:0.39.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 33284e1c90db298913274c67149d32343354b09e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Mar 2021 19:34:44 +0000 Subject: [PATCH 0857/1518] fix(deps): update module github.com/google/go-cmp to v0.5.5 --- go.mod | 2 +- go.sum | 2 ++ repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c16b36da04e..b554cb18b42 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.4 + github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb diff --git a/go.sum b/go.sum index a3dbb9fef41..4a363e19914 100644 --- a/go.sum +++ b/go.sum @@ -139,6 +139,8 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/repositories.bzl b/repositories.bzl index 0b5c1b4c3c7..39568e26189 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -304,8 +304,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=", - version = "v0.5.4", + sum = "h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=", + version = "v0.5.5", ) go_repository( From 6adc4fec51270fe3bc042fd14e4af8700ef6e624 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Mar 2021 01:24:37 +0000 Subject: [PATCH 0858/1518] chore(deps): update dependency com_google_protobuf to v3.15.5 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 12cf49df73b..bf9f8ce7172 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "07f8a02afc14a657f727ed89a8ec5627b9ecc47116d60acaabaa1da233bd2e8f", - strip_prefix = "protobuf-3.15.4", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.4.tar.gz"], + sha256 = "bc3dbf1f09dba1b2eb3f2f70352ee97b9049066c9040ce0c9b67fb3294e91e4b", + strip_prefix = "protobuf-3.15.5", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.5.tar.gz"], ) http_archive( From 7c9107a6930a58c9151007a58fb520cae37fb668 Mon Sep 17 00:00:00 2001 From: Drew Wells Date: Tue, 9 Mar 2021 06:44:47 -0600 Subject: [PATCH 0859/1518] Remove ban on recursive query parameters (#2022) * implements a max recursive depth check * bazel is just at root and update build.bazel * review comments --- .gitignore | 2 +- internal/descriptor/registry.go | 14 ++++ .../internal/genopenapi/BUILD.bazel | 5 +- .../internal/genopenapi/cycle_test.go | 41 +++++++++++ .../internal/genopenapi/generator.go | 5 ++ .../internal/genopenapi/template.go | 71 +++++++++++++++---- protoc-gen-openapiv2/main.go | 2 + 7 files changed, 124 insertions(+), 16 deletions(-) create mode 100644 protoc-gen-openapiv2/internal/genopenapi/cycle_test.go diff --git a/.gitignore b/.gitignore index 9a034ffff8c..74f5e82f1bf 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ bazel-genfiles bazel-grpc-gateway bazel-out bazel-testlogs -.bazelrc +/.bazelrc # Go vendor directory vendor diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 64245835abc..21e4e3e2f99 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -109,6 +109,9 @@ type Registry struct { // omitPackageDoc, if false, causes a package comment to be included in the generated code. omitPackageDoc bool + + // recursiveDepth sets the maximum depth of a field parameter + recursiveDepth int } type repeatedFieldSeparator struct { @@ -134,6 +137,7 @@ func NewRegistry() *Registry { messageOptions: make(map[string]*options.Schema), serviceOptions: make(map[string]*options.Tag), fieldOptions: make(map[string]*options.JSONSchema), + recursiveDepth: 1000, } } @@ -356,6 +360,16 @@ func (r *Registry) SetStandalone(standalone bool) { r.standalone = standalone } +// SetRecursiveDepth records the max recursion count +func (r *Registry) SetRecursiveDepth(count int) { + r.recursiveDepth = count +} + +// GetRecursiveDepth returns the max recursion count +func (r *Registry) GetRecursiveDepth() int { + return r.recursiveDepth +} + // ReserveGoPackageAlias reserves the unique alias of go package. // If succeeded, the alias will be never used for other packages in generated go files. // If failed, the alias is already taken by another package, so you need to use another diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 5442a8d2691..a1687d00bfe 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -34,7 +34,10 @@ go_library( go_test( name = "go_default_test", size = "small", - srcs = ["template_test.go"], + srcs = [ + "cycle_test.go", + "template_test.go", + ], embed = [":go_default_library"], deps = [ "//internal/descriptor:go_default_library", diff --git a/protoc-gen-openapiv2/internal/genopenapi/cycle_test.go b/protoc-gen-openapiv2/internal/genopenapi/cycle_test.go new file mode 100644 index 00000000000..88613155610 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/cycle_test.go @@ -0,0 +1,41 @@ +package genopenapi + +import ( + "testing" +) + +func TestCycle(t *testing.T) { + for _, tt := range []struct { + max int + attempt int + e bool + }{ + { + max: 3, + attempt: 3, + e: true, + }, + { + max: 5, + attempt: 6, + }, + { + max: 1000, + attempt: 1001, + }, + } { + + c := newCycleChecker(tt.max) + var final bool + for i := 0; i < tt.attempt; i++ { + final = c.Check("a") + if !final { + break + } + } + + if final != tt.e { + t.Errorf("got: %t wanted: %t", final, tt.e) + } + } +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 65a2b6a223d..0848b400505 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -36,6 +36,11 @@ type wrapper struct { swagger *openapiSwaggerObject } +type GeneratorOptions struct { + Registry *descriptor.Registry + RecursiveDepth int +} + // New returns a new generator which generates grpc gateway files. func New(reg *descriptor.Registry) gen.Generator { return &generator{reg: reg} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index fb8fa9fe055..e7b0492ce2b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -120,7 +120,7 @@ func getEnumDefault(enum *descriptor.Enum) string { // messageToQueryParameters converts a message to a list of OpenAPI query parameters. func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body) (params []openapiParameterObject, err error) { for _, field := range message.Fields { - p, err := queryParams(message, field, "", reg, pathParams, body) + p, err := queryParams(message, field, "", reg, pathParams, body, reg.GetRecursiveDepth()) if err != nil { return nil, err } @@ -130,17 +130,64 @@ func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Regis } // queryParams converts a field to a list of OpenAPI query parameters recursively through the use of nestedQueryParams. -func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body) (params []openapiParameterObject, err error) { - return nestedQueryParams(message, field, prefix, reg, pathParams, body, map[string]bool{}) +func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, recursiveCount int) (params []openapiParameterObject, err error) { + return nestedQueryParams(message, field, prefix, reg, pathParams, body, newCycleChecker(recursiveCount)) +} + +type cycleChecker struct { + m map[string]int + count int +} + +func newCycleChecker(recursive int) *cycleChecker { + return &cycleChecker{ + m: make(map[string]int), + count: recursive, + } +} + +// Check returns whether name is still within recursion +// toleration +func (c *cycleChecker) Check(name string) bool { + count, ok := c.m[name] + count = count + 1 + isCycle := count > c.count + + if isCycle { + return false + } + + // provision map entry if not available + if !ok { + c.m[name] = 1 + return true + } + + c.m[name] = count + + return true +} + +func (c *cycleChecker) Branch() *cycleChecker { + copy := &cycleChecker{ + count: c.count, + m: map[string]int{}, + } + + for k, v := range c.m { + copy.m[k] = v + } + + return copy } // nestedQueryParams converts a field to a list of OpenAPI query parameters recursively. // This function is a helper function for queryParams, that keeps track of cyclical message references // through the use of -// touched map[string]bool -// If a cycle is discovered, an error is returned, as cyclical data structures aren't allowed +// touched map[string]int +// If a cycle is discovered, an error is returned, as cyclical data structures are dangerous // in query parameters. -func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, touchedIn map[string]bool) (params []openapiParameterObject, err error) { +func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, cycle *cycleChecker) (params []openapiParameterObject, err error) { // make sure the parameter is not already listed as a path parameter for _, pathParam := range pathParams { if pathParam.Target == field { @@ -248,19 +295,15 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre } // Check for cyclical message reference: - isCycle := touchedIn[*msg.Name] - if isCycle { - return nil, fmt.Errorf("recursive types are not allowed for query parameters, cycle found on %q", fieldType) + isOK := cycle.Check(*msg.Name) + if !isOK { + return nil, fmt.Errorf("exceeded recursive count (%d) for query parameter %q", cycle.count, fieldType) } // Construct a new map with the message name so a cycle further down the recursive path can be detected. // Do not keep anything in the original touched reference and do not pass that reference along. This will // prevent clobbering adjacent records while recursing. - touchedOut := make(map[string]bool) - for k, v := range touchedIn { - touchedOut[k] = v - } - touchedOut[*msg.Name] = true + touchedOut := cycle.Branch() for _, nestedField := range msg.Fields { var fieldName string diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 2b8a6f77316..b05af0e879d 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -33,6 +33,7 @@ var ( simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") + recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") ) // Variables set by goreleaser at build time @@ -89,6 +90,7 @@ func main() { reg.SetDisableDefaultErrors(*disableDefaultErrors) reg.SetSimpleOperationIDs(*simpleOperationIDs) reg.SetGenerateUnboundMethods(*generateUnboundMethods) + reg.SetRecursiveDepth(*recursiveDepth) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From 3b6dc7d203e4311b5be8fc065d2ec978cd5de160 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 9 Mar 2021 21:07:30 +0000 Subject: [PATCH 0860/1518] fix(deps): update google.golang.org/genproto commit hash to 1aeedc1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b554cb18b42..01a09b31510 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb + google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 4a363e19914..5557e23f9fe 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb h1:hcskBH5qZCOa7WpTUFUFvoebnSFZBYpjykLtjIp9DVk= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d h1:sWOBy5pWexdIILaM1hND+dymU2yY4yvDUbUTQJdek6Q= +google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 39568e26189..1500eff7251 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hcskBH5qZCOa7WpTUFUFvoebnSFZBYpjykLtjIp9DVk=", - version = "v0.0.0-20210303154014-9728d6b83eeb", + sum = "h1:sWOBy5pWexdIILaM1hND+dymU2yY4yvDUbUTQJdek6Q=", + version = "v0.0.0-20210309190941-1aeedc14537d", ) go_repository( name = "org_golang_google_grpc", From 344ef53acdd66f62d3e2611c8c3532f3e64ac293 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 10 Mar 2021 17:37:14 +0000 Subject: [PATCH 0861/1518] fix(deps): update google.golang.org/genproto commit hash to 4ce2db9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 01a09b31510..b9f31130bdc 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d + google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 5557e23f9fe..993d22e80ca 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d h1:sWOBy5pWexdIILaM1hND+dymU2yY4yvDUbUTQJdek6Q= -google.golang.org/genproto v0.0.0-20210309190941-1aeedc14537d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e h1:ajd1UAja5y1pRx7xOU6R6faEHLKigztzPRvZ+mpE1Fo= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1500eff7251..0b49eb15aa5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:sWOBy5pWexdIILaM1hND+dymU2yY4yvDUbUTQJdek6Q=", - version = "v0.0.0-20210309190941-1aeedc14537d", + sum = "h1:ajd1UAja5y1pRx7xOU6R6faEHLKigztzPRvZ+mpE1Fo=", + version = "v0.0.0-20210310155132-4ce2db91004e", ) go_repository( name = "org_golang_google_grpc", From a4769bd1cf2afed4056eaf88169a0ada768e573d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 10 Mar 2021 19:09:38 +0000 Subject: [PATCH 0862/1518] chore(deps): update golang docker tag to v1.16.1 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index dde48795f22..cb17e64f3e2 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.0 +FROM golang:1.16.1 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From 6d14a180e7768e4c9acb52f10addbe2dd5af381b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Mar 2021 15:43:57 +0000 Subject: [PATCH 0863/1518] fix(deps): update google.golang.org/genproto commit hash to e297927 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b9f31130bdc..00ac3905ecf 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 - google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e + google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 993d22e80ca..824ad3285c9 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e h1:ajd1UAja5y1pRx7xOU6R6faEHLKigztzPRvZ+mpE1Fo= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde h1:ZC8QEWwnT4z5oijBVf++MV+RKH6uYcT6zORNP014fi8= +google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0b49eb15aa5..e62ba70a19a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ajd1UAja5y1pRx7xOU6R6faEHLKigztzPRvZ+mpE1Fo=", - version = "v0.0.0-20210310155132-4ce2db91004e", + sum = "h1:ZC8QEWwnT4z5oijBVf++MV+RKH6uYcT6zORNP014fi8=", + version = "v0.0.0-20210311153111-e2979279ddde", ) go_repository( name = "org_golang_google_grpc", From d65f0871b745402e22c9fd2d2ca6078617cfab3c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Mar 2021 17:52:16 +0000 Subject: [PATCH 0864/1518] fix(deps): update golang.org/x/oauth2 commit hash to 5366d9d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 00ac3905ecf..978e247a326 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 + golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934 google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 824ad3285c9..ea897c6ff33 100644 --- a/go.sum +++ b/go.sum @@ -384,8 +384,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93 h1:alLDrZkL34Y2bnGHfvC1CYBRBXCXgx8AC2vY4MRtYX4= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934 h1:Y2nxrNrrWOZn5yjDEEVU3R7V9HGW5SWsw6B6YL/ZRFw= +golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index e62ba70a19a..3eb6a7cc7b6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:alLDrZkL34Y2bnGHfvC1CYBRBXCXgx8AC2vY4MRtYX4=", - version = "v0.0.0-20210220000619-9bb904979d93", + sum = "h1:Y2nxrNrrWOZn5yjDEEVU3R7V9HGW5SWsw6B6YL/ZRFw=", + version = "v0.0.0-20210311163135-5366d9dc1934", ) go_repository( name = "org_golang_x_sync", From 389fe980dae648e2f748833d5eb4d5158860fc79 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 11 Mar 2021 21:51:37 +0000 Subject: [PATCH 0865/1518] chore(deps): update dependency com_google_protobuf to v3.15.6 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index bf9f8ce7172..7052f401660 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "bc3dbf1f09dba1b2eb3f2f70352ee97b9049066c9040ce0c9b67fb3294e91e4b", - strip_prefix = "protobuf-3.15.5", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.5.tar.gz"], + sha256 = "65e020a42bdab44a66664d34421995829e9e79c60e5adaa08282fd14ca552f57", + strip_prefix = "protobuf-3.15.6", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.6.tar.gz"], ) http_archive( From 01b82f0c8f67d564b6fd224a5ea5bec4fb7afad5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 12 Mar 2021 00:11:30 +0000 Subject: [PATCH 0866/1518] chore(deps): update golang docker tag to v1.16.2 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index cb17e64f3e2..58a9cab45ec 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.1 +FROM golang:1.16.2 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From 7822c276bb869e1e1c0cb171f22bd3615ca279f5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 12 Mar 2021 15:38:07 +0000 Subject: [PATCH 0867/1518] fix(deps): update google.golang.org/genproto commit hash to fc591d9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 978e247a326..ee42bb84f97 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934 - google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde + google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index ea897c6ff33..d55ed5146b0 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde h1:ZC8QEWwnT4z5oijBVf++MV+RKH6uYcT6zORNP014fi8= -google.golang.org/genproto v0.0.0-20210311153111-e2979279ddde/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f h1:YRBxgxUW6GFi+AKsn8WGA9k1SZohK+gGuEqdeT5aoNQ= +google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3eb6a7cc7b6..47906db529b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ZC8QEWwnT4z5oijBVf++MV+RKH6uYcT6zORNP014fi8=", - version = "v0.0.0-20210311153111-e2979279ddde", + sum = "h1:YRBxgxUW6GFi+AKsn8WGA9k1SZohK+gGuEqdeT5aoNQ=", + version = "v0.0.0-20210312152112-fc591d9ea70f", ) go_repository( name = "org_golang_google_grpc", From 0b91555910c1bea014b20ab8f8ad0ff5ccc320c5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 13 Mar 2021 20:21:36 +0000 Subject: [PATCH 0868/1518] fix(deps): update golang.org/x/oauth2 commit hash to cd4f82c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ee42bb84f97..5d84ea308c6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934 + golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index d55ed5146b0..8dbe4b4a76e 100644 --- a/go.sum +++ b/go.sum @@ -384,8 +384,8 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934 h1:Y2nxrNrrWOZn5yjDEEVU3R7V9HGW5SWsw6B6YL/ZRFw= -golang.org/x/oauth2 v0.0.0-20210311163135-5366d9dc1934/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 47906db529b..47dfc84b7e5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:Y2nxrNrrWOZn5yjDEEVU3R7V9HGW5SWsw6B6YL/ZRFw=", - version = "v0.0.0-20210311163135-5366d9dc1934", + sum = "h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q=", + version = "v0.0.0-20210313182246-cd4f82c27b84", ) go_repository( name = "org_golang_x_sync", From 7203903545b4bd4003d91a41752f6986fe438d75 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 15 Mar 2021 18:59:12 +0000 Subject: [PATCH 0869/1518] fix(deps): update google.golang.org/genproto commit hash to 2651cd4 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5d84ea308c6..1a4e12e4d94 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f + google.golang.org/genproto v0.0.0-20210315173758-2651cd453018 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 8dbe4b4a76e..6b56108930c 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f h1:YRBxgxUW6GFi+AKsn8WGA9k1SZohK+gGuEqdeT5aoNQ= -google.golang.org/genproto v0.0.0-20210312152112-fc591d9ea70f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210315173758-2651cd453018 h1:ZH67MZWSz0sEGHWoYAO1ysjL0yWEXTQ7gOxytol4KAk= +google.golang.org/genproto v0.0.0-20210315173758-2651cd453018/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 47dfc84b7e5..a311e510451 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:YRBxgxUW6GFi+AKsn8WGA9k1SZohK+gGuEqdeT5aoNQ=", - version = "v0.0.0-20210312152112-fc591d9ea70f", + sum = "h1:ZH67MZWSz0sEGHWoYAO1ysjL0yWEXTQ7gOxytol4KAk=", + version = "v0.0.0-20210315173758-2651cd453018", ) go_repository( name = "org_golang_google_grpc", From 73fea10cae6b4cf1f1c49c908c81781bbc6d8cc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Mar 2021 10:57:36 +0000 Subject: [PATCH 0870/1518] chore(deps): update bufbuild/buf docker tag to v0.40.0 (#2040) Co-authored-by: Renovate Bot --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 47e471175b1..4df991b2a34 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.0.0 proto_lint: docker: - - image: bufbuild/buf:0.39.1 + - image: bufbuild/buf:0.40.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.39.1 + - image: bufbuild/buf:0.40.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 9814f850088dcaaa6018446a366d8337f396aacb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 17 Mar 2021 19:26:34 +0000 Subject: [PATCH 0871/1518] fix(deps): update google.golang.org/genproto commit hash to 75c7a85 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1a4e12e4d94..e3dde93280b 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210315173758-2651cd453018 + google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 diff --git a/go.sum b/go.sum index 6b56108930c..5c8f827beb2 100644 --- a/go.sum +++ b/go.sum @@ -554,8 +554,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210315173758-2651cd453018 h1:ZH67MZWSz0sEGHWoYAO1ysjL0yWEXTQ7gOxytol4KAk= -google.golang.org/genproto v0.0.0-20210315173758-2651cd453018/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 h1:JowEPt070nS2MN3bNBrZ/uvaG66qMfcSgPTKXR273ho= +google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a311e510451..9c7766e24fd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ZH67MZWSz0sEGHWoYAO1ysjL0yWEXTQ7gOxytol4KAk=", - version = "v0.0.0-20210315173758-2651cd453018", + sum = "h1:JowEPt070nS2MN3bNBrZ/uvaG66qMfcSgPTKXR273ho=", + version = "v0.0.0-20210317182105-75c7a8546eb9", ) go_repository( name = "org_golang_google_grpc", From 99d31f39318e3942bceb646900b7139bb2541ed3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Mar 2021 11:49:12 +0000 Subject: [PATCH 0872/1518] Update google.golang.org/protobuf dependency (#2044) * fix(deps): update golang/protobuf * Remove golang/protobuf uses * Fix test Co-authored-by: Renovate Bot Co-authored-by: Johan Brandhorst --- examples/internal/helloworld/helloworld.pb.go | 2 +- examples/internal/integration/BUILD.bazel | 2 +- .../internal/integration/integration_test.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 2 +- .../proto/examplepb/echo_service.pb.go | 2 +- .../proto/examplepb/flow_combination.pb.go | 2 +- .../examplepb/generate_unbound_methods.pb.go | 2 +- .../proto/examplepb/non_standard_names.pb.go | 2 +- .../proto/examplepb/openapi_merge_a.pb.go | 2 +- .../proto/examplepb/openapi_merge_b.pb.go | 2 +- .../examplepb/response_body_service.pb.go | 2 +- .../internal/proto/examplepb/stream.pb.go | 2 +- .../examplepb/unannotated_echo_service.pb.go | 2 +- .../proto/examplepb/use_go_template.pb.go | 2 +- .../internal/proto/examplepb/wrappers.pb.go | 2 +- .../internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- examples/internal/server/BUILD.bazel | 6 +- .../internal/server/a_bit_of_everything.go | 6 +- go.mod | 4 +- go.sum | 28 +---- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- .../openapiconfig/openapiconfig.pb.go | 2 +- internal/descriptor/registry_test.go | 117 ++++-------------- .../internal/genopenapi/BUILD.bazel | 2 +- .../internal/genopenapi/template.go | 2 +- .../internal/genopenapi/template_test.go | 38 +++--- .../options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- repositories.bzl | 8 +- runtime/BUILD.bazel | 18 ++- runtime/convert.go | 6 +- runtime/convert_test.go | 4 +- runtime/internal/examplepb/example.pb.go | 2 +- .../examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- runtime/marshal_json_test.go | 6 +- runtime/marshal_jsonpb_test.go | 10 +- runtime/marshal_proto_test.go | 2 +- runtime/query.go | 12 +- runtime/query_test.go | 12 +- 43 files changed, 124 insertions(+), 209 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 3e693b64364..c6fc1f07757 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/helloworld/helloworld.proto diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index 0f2e3f2f862..3aab0e53439 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -20,12 +20,12 @@ go_test( "@com_github_golang_glog//:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", "@go_googleapis//google/rpc:status_go_proto", - "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", + "@org_golang_google_protobuf//types/known/emptypb:go_default_library", "@org_golang_google_protobuf//types/known/structpb:go_default_library", ], ) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 051ce2dbafa..3bd1c8f14c1 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -18,7 +18,6 @@ import ( "testing" "time" - emptypb "github.com/golang/protobuf/ptypes/empty" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" @@ -30,6 +29,7 @@ import ( "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/structpb" ) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 8045c1cf620..b2dc069c316 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 1ad8ccc0353..b5d81c5cb09 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/echo_service.proto diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index a092b0bee3c..30b7bc2a2c7 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/flow_combination.proto diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index 4573aeb432b..305c44ec563 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 052efa1de8e..df9b59aa799 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/non_standard_names.proto diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index 12a39d09308..102000eb7d6 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/openapi_merge_a.proto diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 8d39870604b..2fd9abaca8b 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/openapi_merge_b.proto diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 7d47f0e4abe..8b38a963961 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/response_body_service.proto diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 7fc63896d5a..8c80c6c67d5 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/stream.proto diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 525686903b3..9ec779f6dbb 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index cdfa13fa31b..acba76527a7 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/use_go_template.proto diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 7ba7a6f1069..f2329b424da 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/examplepb/wrappers.proto diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 3f7a02104ec..5ccaef4948d 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/pathenum/path_enum.proto diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 7b52c6f92b5..27dbfacbe7d 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/sub/message.proto diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 88ea3f41166..e30c70aca37 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: examples/internal/proto/sub2/message.proto diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index dfdf1ff4f7e..7bcde5f579b 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -27,15 +27,15 @@ go_library( "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", - "@io_bazel_rules_go//proto/wkt:duration_go_proto", - "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/emptypb:go_default_library", + "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", ], ) diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 628bb0c9321..0870594d2f1 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -8,9 +8,6 @@ import ( "time" "github.com/golang/glog" - durationpb "github.com/golang/protobuf/ptypes/duration" - emptypb "github.com/golang/protobuf/ptypes/empty" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" @@ -23,6 +20,9 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/wrapperspb" ) // Implements of ABitOfEverythingServiceServer diff --git a/go.mod b/go.mod index e3dde93280b..98bd1032bc9 100644 --- a/go.mod +++ b/go.mod @@ -7,12 +7,12 @@ require ( github.com/bufbuild/buf v0.37.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.4.3 + github.com/golang/protobuf v1.5.1 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 - google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 + google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 5c8f827beb2..db4b36c076f 100644 --- a/go.sum +++ b/go.sum @@ -108,7 +108,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= @@ -117,27 +116,23 @@ github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -310,7 +305,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -372,17 +366,14 @@ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -400,7 +391,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -409,7 +399,6 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 h1:R8bzl0244nw47n1xKs1MUMAaTNgjavKcN/aX2Ss3+Fo= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -425,7 +414,6 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -433,11 +421,9 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbq golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -454,7 +440,6 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135 h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -495,7 +480,6 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFG golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -516,7 +500,6 @@ google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -547,7 +530,6 @@ google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -585,8 +567,10 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8 h1:4RrxbALcCPvUQHPa4l06Wap5rBGTS6aTQIYrO3Ebdk8= google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8/go.mod h1:hFxJC2f0epmp1elRCiEGJTKAWbwxZ2nvqZdHl3FQXCY= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index dbae4de1674..125c5340631 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: internal/descriptor/apiconfig/apiconfig.proto diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index 02605ed4ecd..e0b1010b855 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: internal/descriptor/openapiconfig/openapiconfig.proto diff --git a/internal/descriptor/registry_test.go b/internal/descriptor/registry_test.go index 92cc352e538..fc99d071ebb 100644 --- a/internal/descriptor/registry_test.go +++ b/internal/descriptor/registry_test.go @@ -24,6 +24,7 @@ func newGeneratorFromSources(req *pluginpb.CodeGeneratorRequest, sources ...stri } func loadFileWithCodeGeneratorRequest(t *testing.T, reg *Registry, req *pluginpb.CodeGeneratorRequest, sources ...string) []*descriptorpb.FileDescriptorProto { + t.Helper() plugin, err := newGeneratorFromSources(req, sources...) if err != nil { t.Fatalf("failed to create a generator: %v", err) @@ -36,6 +37,7 @@ func loadFileWithCodeGeneratorRequest(t *testing.T, reg *Registry, req *pluginpb } func loadFile(t *testing.T, reg *Registry, src string) *descriptorpb.FileDescriptorProto { + t.Helper() fds := loadFileWithCodeGeneratorRequest(t, reg, &pluginpb.CodeGeneratorRequest{}, src) return fds[0] } @@ -45,6 +47,7 @@ func TestLoadFile(t *testing.T) { fd := loadFile(t, reg, ` name: 'example.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > message_type < name: 'ExampleMessage' field < @@ -61,7 +64,7 @@ func TestLoadFile(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "example.proto") return } - wantPkg := GoPackage{Path: ".", Name: "example"} + wantPkg := GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example", Name: "example"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -101,6 +104,7 @@ func TestLoadFileNestedPackage(t *testing.T) { loadFile(t, reg, ` name: 'example.proto' package: 'example.nested.nested2' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.nested.nested2' > `) file := reg.files["example.proto"] @@ -108,7 +112,7 @@ func TestLoadFileNestedPackage(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "example.proto") return } - wantPkg := GoPackage{Path: ".", Name: "example_nested_nested2"} + wantPkg := GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.nested.nested2", Name: "example_nested_nested2"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -119,6 +123,7 @@ func TestLoadFileWithDir(t *testing.T) { loadFile(t, reg, ` name: 'path/to/example.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `) file := reg.files["path/to/example.proto"] @@ -126,7 +131,7 @@ func TestLoadFileWithDir(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "example.proto") return } - wantPkg := GoPackage{Path: "path/to", Name: "example"} + wantPkg := GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example", Name: "example"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -136,6 +141,7 @@ func TestLoadFileWithoutPackage(t *testing.T) { reg := NewRegistry() loadFile(t, reg, ` name: 'path/to/example_file.proto' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example_file' > `) file := reg.files["path/to/example_file.proto"] @@ -143,7 +149,7 @@ func TestLoadFileWithoutPackage(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "example.proto") return } - wantPkg := GoPackage{Path: "path/to", Name: "example_file"} + wantPkg := GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example_file", Name: "example_file"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -156,6 +162,7 @@ func TestLoadFileWithMapping(t *testing.T) { }, ` name: 'path/to/example.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `) file := reg.files["path/to/example.proto"] @@ -174,10 +181,12 @@ func TestLoadFileWithPackageNameCollision(t *testing.T) { loadFile(t, reg, ` name: 'path/to/another.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `) loadFile(t, reg, ` name: 'path/to/example.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `) if err := reg.ReserveGoPackageAlias("ioutil", "io/ioutil"); err != nil { t.Fatalf("reg.ReserveGoPackageAlias(%q) failed with %v; want success", "ioutil", err) @@ -185,6 +194,7 @@ func TestLoadFileWithPackageNameCollision(t *testing.T) { loadFile(t, reg, ` name: 'path/to/ioutil.proto' package: 'ioutil' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/ioutil' > `) file := reg.files["path/to/another.proto"] @@ -192,7 +202,7 @@ func TestLoadFileWithPackageNameCollision(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "path/to/another.proto") return } - wantPkg := GoPackage{Path: "path/to", Name: "example"} + wantPkg := GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example", Name: "example"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -202,7 +212,7 @@ func TestLoadFileWithPackageNameCollision(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "path/to/example.proto") return } - wantPkg = GoPackage{Path: "path/to", Name: "example", Alias: ""} + wantPkg = GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example", Name: "example", Alias: ""} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -212,7 +222,7 @@ func TestLoadFileWithPackageNameCollision(t *testing.T) { t.Errorf("reg.files[%q] = nil; want non-nil", "path/to/ioutil.proto") return } - wantPkg = GoPackage{Path: "path/to", Name: "ioutil", Alias: "ioutil_0"} + wantPkg = GoPackage{Path: "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/ioutil", Name: "ioutil", Alias: "ioutil_0"} if got, want := file.GoPkg, wantPkg; got != want { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } @@ -225,9 +235,11 @@ func TestLoadFileWithIdenticalGoPkg(t *testing.T) { }, ` name: 'path/to/another.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `, ` name: 'path/to/example.proto' package: 'example' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > `) file := reg.files["path/to/example.proto"] @@ -258,6 +270,7 @@ func TestLookupMsgWithoutPackage(t *testing.T) { reg := NewRegistry() fd := loadFile(t, reg, ` name: 'example.proto' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > message_type < name: 'ExampleMessage' field < @@ -284,6 +297,7 @@ func TestLookupMsgWithNestedPackage(t *testing.T) { fd := loadFile(t, reg, ` name: 'example.proto' package: 'nested.nested2.mypackage' + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > message_type < name: 'ExampleMessage' field < @@ -358,84 +372,6 @@ func TestLoadWithInconsistentTargetPackage(t *testing.T) { req string consistent bool }{ - // root package, no explicit go package - { - req: ` - file_to_generate: 'a.proto' - file_to_generate: 'b.proto' - proto_file < - name: 'a.proto' - message_type < name: 'A' > - service < - name: "AService" - method < - name: "Meth" - input_type: "A" - output_type: "A" - options < - [google.api.http] < post: "/v1/a" body: "*" > - > - > - > - > - proto_file < - name: 'b.proto' - message_type < name: 'B' > - service < - name: "BService" - method < - name: "Meth" - input_type: "B" - output_type: "B" - options < - [google.api.http] < post: "/v1/b" body: "*" > - > - > - > - > - `, - consistent: false, - }, - // named package, no explicit go package - { - req: ` - file_to_generate: 'a.proto' - file_to_generate: 'b.proto' - proto_file < - name: 'a.proto' - package: 'example.foo' - message_type < name: 'A' > - service < - name: "AService" - method < - name: "Meth" - input_type: "A" - output_type: "A" - options < - [google.api.http] < post: "/v1/a" body: "*" > - > - > - > - > - proto_file < - name: 'b.proto' - package: 'example.foo' - message_type < name: 'B' > - service < - name: "BService" - method < - name: "Meth" - input_type: "B" - output_type: "B" - options < - [google.api.http] < post: "/v1/b" body: "*" > - > - > - > - > - `, - consistent: true, - }, // root package, explicit go package { req: ` @@ -443,7 +379,7 @@ func TestLoadWithInconsistentTargetPackage(t *testing.T) { file_to_generate: 'b.proto' proto_file < name: 'a.proto' - options < go_package: 'foo' > + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' > message_type < name: 'A' > service < name: "AService" @@ -459,7 +395,7 @@ func TestLoadWithInconsistentTargetPackage(t *testing.T) { > proto_file < name: 'b.proto' - options < go_package: 'foo' > + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' > message_type < name: 'B' > service < name: "BService" @@ -484,7 +420,7 @@ func TestLoadWithInconsistentTargetPackage(t *testing.T) { proto_file < name: 'a.proto' package: 'example.foo' - options < go_package: 'foo' > + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' > message_type < name: 'A' > service < name: "AService" @@ -501,7 +437,7 @@ func TestLoadWithInconsistentTargetPackage(t *testing.T) { proto_file < name: 'b.proto' package: 'example.foo' - options < go_package: 'foo' > + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example.foo' > message_type < name: 'B' > service < name: "BService" @@ -579,6 +515,7 @@ func TestUnboundExternalHTTPRules(t *testing.T) { loadFile(t, reg, ` name: "path/to/example.proto", package: "example" + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > message_type < name: "StringMessage" field < @@ -605,7 +542,7 @@ func TestRegisterOpenAPIOptions(t *testing.T) { proto_file < name: 'a.proto' package: 'example.foo' - options < go_package: 'foo' > + options < go_package: 'github.com/grpc-ecosystem/grpc-gateway/runtime/internal/example' > message_type < name: 'ExampleMessage' field < diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index a1687d00bfe..b9c06bc9ec5 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -23,10 +23,10 @@ go_library( "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", - "@io_bazel_rules_go//proto/wkt:struct_go_proto", "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//types/descriptorpb:go_default_library", + "@org_golang_google_protobuf//types/known/structpb:go_default_library", "@org_golang_google_protobuf//types/pluginpb:go_default_library", ], ) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index e7b0492ce2b..be4bad0327d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -18,7 +18,6 @@ import ( "time" "github.com/golang/glog" - structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" openapi_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" @@ -26,6 +25,7 @@ import ( "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/known/structpb" ) // wktSchemas are the schemas of well-known-types. diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index db0db41e593..05d51c04b3d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -210,7 +210,7 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -396,7 +396,7 @@ func TestMessageToQueryParameters(t *testing.T) { MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -521,7 +521,7 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -646,7 +646,7 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -759,7 +759,7 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { MessageType: test.MsgDescs, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -936,7 +936,7 @@ func TestApplyTemplateSimple(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -1039,7 +1039,7 @@ func TestApplyTemplateMultiService(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -1151,7 +1151,7 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -1271,7 +1271,7 @@ func TestApplyTemplateExtensions(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -1483,7 +1483,7 @@ func TestApplyTemplateHeaders(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -2092,7 +2092,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -2258,7 +2258,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -2425,7 +2425,7 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{reqdesc, respdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -2594,7 +2594,7 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{bookDesc, createDesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -3551,7 +3551,7 @@ func TestSchemaOfField(t *testing.T) { Package: proto.String("example"), Dependency: []string{"third_party/google.proto"}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, MessageType: []*descriptorpb.DescriptorProto{ { @@ -3975,7 +3975,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { EnumType: []*descriptorpb.EnumDescriptorProto{}, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, Messages: msgs, @@ -4312,7 +4312,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { EnumType: []*descriptorpb.EnumDescriptorProto{}, Service: []*descriptorpb.ServiceDescriptorProto{}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, Messages: msgs, @@ -4382,7 +4382,7 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { MessageType: []*descriptorpb.DescriptorProto{msgdesc}, Service: []*descriptorpb.ServiceDescriptorProto{svc}, Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, GoPkg: descriptor.GoPackage{ @@ -4549,7 +4549,7 @@ func TestParseIncompleteSecurityRequirement(t *testing.T) { Name: proto.String("example.proto"), Package: proto.String("example"), Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(".;example"), + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), }, }, } diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index a6b02064a57..5508a0a2966 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: protoc-gen-openapiv2/options/annotations.proto diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index f393af01cb8..806c77a9cbe 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: protoc-gen-openapiv2/options/openapiv2.proto diff --git a/repositories.bzl b/repositories.bzl index 9c7766e24fd..648e5baf7b7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -291,8 +291,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=", - version = "v1.4.3", + sum = "h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc=", + version = "v1.5.1", ) go_repository( @@ -1068,8 +1068,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:4RrxbALcCPvUQHPa4l06Wap5rBGTS6aTQIYrO3Ebdk8=", - version = "v1.25.1-0.20201208041424-160c7477e0e8", + sum = "h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=", + version = "v1.26.0", ) go_repository( name = "org_golang_x_crypto", diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 68e5f440854..53022768b3e 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -26,12 +26,8 @@ go_library( deps = [ "//internal/httprule:go_default_library", "//utilities:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@go_googleapis//google/api:httpbody_go_proto", - "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", - "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", @@ -40,6 +36,9 @@ go_library( "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", "@org_golang_google_protobuf//reflect/protoregistry:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", + "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", ], ) @@ -65,23 +64,22 @@ go_test( deps = [ "//runtime/internal/examplepb:go_default_library", "//utilities:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_google_go_cmp//cmp:go_default_library", "@com_github_google_go_cmp//cmp/cmpopts:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", - "@io_bazel_rules_go//proto/wkt:duration_go_proto", - "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@io_bazel_rules_go//proto/wkt:struct_go_proto", - "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", - "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", + "@org_golang_google_protobuf//types/known/durationpb:go_default_library", + "@org_golang_google_protobuf//types/known/emptypb:go_default_library", + "@org_golang_google_protobuf//types/known/structpb:go_default_library", + "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", + "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", ], ) diff --git a/runtime/convert.go b/runtime/convert.go index e122dd33949..2deef8b481e 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -6,10 +6,10 @@ import ( "strconv" "strings" - durationpb "github.com/golang/protobuf/ptypes/duration" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) // String just returns the given string. diff --git a/runtime/convert_test.go b/runtime/convert_test.go index a4148c7aedc..d7d970db427 100644 --- a/runtime/convert_test.go +++ b/runtime/convert_test.go @@ -3,10 +3,10 @@ package runtime_test import ( "testing" - durationpb "github.com/golang/protobuf/ptypes/duration" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" ) func TestConvertTimestamp(t *testing.T) { diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index ba89b67181d..309d83e2eb7 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: runtime/internal/examplepb/example.proto diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 26c90ede41e..57eb7ddc6ed 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: runtime/internal/examplepb/non_standard_names.proto diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 90a86a4669d..e297db629c5 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: runtime/internal/examplepb/proto2.proto diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index e31cf97de6b..3306210cbf9 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.25.0-devel +// protoc-gen-go v1.26.0 // protoc v3.13.0 // source: runtime/internal/examplepb/proto3.proto diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index f13c0b1cdb0..490e66bab83 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -7,14 +7,14 @@ import ( "strings" "testing" - emptypb "github.com/golang/protobuf/ptypes/empty" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) func TestJSONBuiltinMarshal(t *testing.T) { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index e5085625a9e..df5f1817f48 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -7,17 +7,17 @@ import ( "strings" "testing" - durationpb "github.com/golang/protobuf/ptypes/duration" - emptypb "github.com/golang/protobuf/ptypes/empty" - structpb "github.com/golang/protobuf/ptypes/struct" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/structpb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) func TestJSONPbMarshal(t *testing.T) { diff --git a/runtime/marshal_proto_test.go b/runtime/marshal_proto_test.go index df156ac0b16..637e13aec19 100644 --- a/runtime/marshal_proto_test.go +++ b/runtime/marshal_proto_test.go @@ -4,10 +4,10 @@ import ( "bytes" "testing" - timestamppb "github.com/golang/protobuf/ptypes/timestamp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" ) var message = &examplepb.ABitOfEverything{ diff --git a/runtime/query.go b/runtime/query.go index 1365a4dd9f0..fb0c84ef0cd 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -10,14 +10,15 @@ import ( "strings" "time" - "github.com/golang/protobuf/ptypes" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/grpclog" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) var valuesKeyRegexp = regexp.MustCompile(`^(.*)\[(.*)\]$`) @@ -256,10 +257,7 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p if err != nil { return protoreflect.Value{}, err } - msg, err = ptypes.TimestampProto(t) - if err != nil { - return protoreflect.Value{}, err - } + msg = timestamppb.New(t) case "google.protobuf.Duration": if value == "null" { break @@ -268,7 +266,7 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p if err != nil { return protoreflect.Value{}, err } - msg = ptypes.DurationProto(d) + msg = durationpb.New(d) case "google.protobuf.DoubleValue": v, err := strconv.ParseFloat(value, 64) if err != nil { diff --git a/runtime/query_test.go b/runtime/query_test.go index d74a52e878d..1ee46a09f96 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -7,8 +7,6 @@ import ( "testing" "time" - "github.com/golang/protobuf/ptypes" - wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" @@ -16,6 +14,9 @@ import ( "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) func BenchmarkPopulateQueryParameters(b *testing.B) { @@ -86,14 +87,11 @@ func BenchmarkPopulateQueryParameters(b *testing.B) { func TestPopulateParameters(t *testing.T) { timeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC) timeStr := timeT.Format(time.RFC3339Nano) - timePb, err := ptypes.TimestampProto(timeT) - if err != nil { - t.Fatalf("Couldn't setup timestamp in Protobuf format: %v", err) - } + timePb := timestamppb.New(timeT) durationT := 13 * time.Hour durationStr := durationT.String() - durationPb := ptypes.DurationProto(durationT) + durationPb := durationpb.New(durationT) fieldmaskStr := "float_value,double_value" fieldmaskPb := &field_mask.FieldMask{Paths: []string{"float_value", "double_value"}} From 7e4826ab203bdd1268a473e44cbe34c51aa1b658 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Mar 2021 15:43:00 +0000 Subject: [PATCH 0873/1518] fix(deps): update google.golang.org/genproto commit hash to 90b20ab --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 98bd1032bc9..ddfd55a2d22 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 + google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index db4b36c076f..e9c80649af8 100644 --- a/go.sum +++ b/go.sum @@ -536,8 +536,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9 h1:JowEPt070nS2MN3bNBrZ/uvaG66qMfcSgPTKXR273ho= -google.golang.org/genproto v0.0.0-20210317182105-75c7a8546eb9/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860 h1:/u8n534a0fs4pq+41+yGfyD5HoUFPhaeVB9wb6xvNJQ= +google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 648e5baf7b7..48a8662f3b7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:JowEPt070nS2MN3bNBrZ/uvaG66qMfcSgPTKXR273ho=", - version = "v0.0.0-20210317182105-75c7a8546eb9", + sum = "h1:/u8n534a0fs4pq+41+yGfyD5HoUFPhaeVB9wb6xvNJQ=", + version = "v0.0.0-20210318145829-90b20ab00860", ) go_repository( name = "org_golang_google_grpc", From 0187078b871ee3f1d01d259a72f8df485606e52c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 19 Mar 2021 16:13:01 +0000 Subject: [PATCH 0874/1518] fix(deps): update google.golang.org/genproto commit hash to 93e7006 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ddfd55a2d22..5ba886d9972 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860 + google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index e9c80649af8..9b9e1f89923 100644 --- a/go.sum +++ b/go.sum @@ -536,8 +536,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860 h1:/u8n534a0fs4pq+41+yGfyD5HoUFPhaeVB9wb6xvNJQ= -google.golang.org/genproto v0.0.0-20210318145829-90b20ab00860/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6 h1:4Xw2NwItrJOFR5s6PnK98PI6Bgw1LhMP1j/rO5WP0S4= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 48a8662f3b7..a4f311ced9d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:/u8n534a0fs4pq+41+yGfyD5HoUFPhaeVB9wb6xvNJQ=", - version = "v0.0.0-20210318145829-90b20ab00860", + sum = "h1:4Xw2NwItrJOFR5s6PnK98PI6Bgw1LhMP1j/rO5WP0S4=", + version = "v0.0.0-20210319143718-93e7006c17a6", ) go_repository( name = "org_golang_google_grpc", From 6023c377b6b351c545b81cb423ce2018ff8c5b8c Mon Sep 17 00:00:00 2001 From: Xiuming Chen Date: Sat, 20 Mar 2021 22:09:23 -0700 Subject: [PATCH 0875/1518] Fix typo in README.md (#2047) `httbody.proto` -> `httpbody.proto` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9aa159da99a..471fdc3014c 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. google/api/annotations.proto google/api/field_behaviour.proto google/api/http.proto - google/api/httbody.proto + google/api/httpbody.proto ``` Here's what a `protoc` execution might look like: From 5746a239d9aa89eb880b265ca590c05bf82e8dca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 22 Mar 2021 20:14:14 +0000 Subject: [PATCH 0876/1518] fix(deps): update google.golang.org/genproto commit hash to 5f0e893 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5ba886d9972..08bf01c7c6d 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6 + google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 9b9e1f89923..b557d0063e5 100644 --- a/go.sum +++ b/go.sum @@ -536,8 +536,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6 h1:4Xw2NwItrJOFR5s6PnK98PI6Bgw1LhMP1j/rO5WP0S4= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a h1:qPl5LrjqtjpIzdHXcRiB3Uls67pHK2yRx/feFB/ILrw= +google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a4f311ced9d..576def09f45 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4Xw2NwItrJOFR5s6PnK98PI6Bgw1LhMP1j/rO5WP0S4=", - version = "v0.0.0-20210319143718-93e7006c17a6", + sum = "h1:qPl5LrjqtjpIzdHXcRiB3Uls67pHK2yRx/feFB/ILrw=", + version = "v0.0.0-20210322173543-5f0e89347f5a", ) go_repository( name = "org_golang_google_grpc", From c6329006ed6b39c01979073323b3fa443c4af9b3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Mar 2021 16:29:57 +0000 Subject: [PATCH 0877/1518] fix(deps): update google.golang.org/genproto commit hash to e668133 --- go.mod | 2 +- go.sum | 17 +++++++++++++++-- repositories.bzl | 28 ++++++++++++++-------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 08bf01c7c6d..642de03fac8 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a + google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index b557d0063e5..ae406a11adf 100644 --- a/go.sum +++ b/go.sum @@ -278,6 +278,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -328,6 +329,8 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -367,9 +370,12 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -385,6 +391,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -417,8 +424,12 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -478,6 +489,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -536,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a h1:qPl5LrjqtjpIzdHXcRiB3Uls67pHK2yRx/feFB/ILrw= -google.golang.org/genproto v0.0.0-20210322173543-5f0e89347f5a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a h1:XVaQ1+BDKvrRcgppHhtAaniHCKyV5xJAvymwsPHHFaE= +google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 576def09f45..2eee773104d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -911,8 +911,8 @@ def go_repositories(): go_repository( name = "com_github_yuin_goldmark", importpath = "github.com/yuin/goldmark", - sum = "h1:5tjfNdR2ki3yYQ842+eX2sQHeiwpKJ0RnHO4IYOc4V8=", - version = "v1.1.32", + sum = "h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=", + version = "v1.2.1", ) go_repository( name = "com_google_cloud_go", @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:qPl5LrjqtjpIzdHXcRiB3Uls67pHK2yRx/feFB/ILrw=", - version = "v0.0.0-20210322173543-5f0e89347f5a", + sum = "h1:XVaQ1+BDKvrRcgppHhtAaniHCKyV5xJAvymwsPHHFaE=", + version = "v0.0.0-20210323160006-e668133fea6a", ) go_repository( name = "org_golang_google_grpc", @@ -1093,8 +1093,8 @@ def go_repositories(): go_repository( name = "org_golang_x_lint", importpath = "golang.org/x/lint", - sum = "h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=", - version = "v0.0.0-20200302205851-738671d3881b", + sum = "h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI=", + version = "v0.0.0-20201208152925-83fdc39ff7b5", ) go_repository( @@ -1112,8 +1112,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=", - version = "v0.0.0-20210119194325-5f4716e94777", + sum = "h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E=", + version = "v0.0.0-20210316092652-d523dce5a7f4", ) go_repository( name = "org_golang_x_oauth2", @@ -1124,14 +1124,14 @@ def go_repositories(): go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=", - version = "v0.0.0-20200625203802-6e8e738ad208", + sum = "h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=", + version = "v0.0.0-20201020160332-67f06af15bc9", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=", - version = "v0.0.0-20210124154548-22da62e12c0c", + sum = "h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc=", + version = "v0.0.0-20210320140829-1e4c9ba3b0c4", ) go_repository( name = "org_golang_x_term", @@ -1156,8 +1156,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k=", - version = "v0.0.0-20200825202427-b303f430e36d", + sum = "h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=", + version = "v0.1.0", ) go_repository( From 9bb406d3dbd50ea86490b1af9a62f76ec49d93b4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 23 Mar 2021 19:34:35 +0000 Subject: [PATCH 0878/1518] fix(deps): update golang.org/x/oauth2 commit hash to 22b0ada --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 642de03fac8..5cfd61a6bca 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.1 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 + golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index ae406a11adf..1d04f6ab994 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 h1:D7nTwh4J0i+5mW4Zjzn5omvlr6YBcWywE6KOcatyNxY= +golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 2eee773104d..88b672251c8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q=", - version = "v0.0.0-20210313182246-cd4f82c27b84", + sum = "h1:D7nTwh4J0i+5mW4Zjzn5omvlr6YBcWywE6KOcatyNxY=", + version = "v0.0.0-20210323180902-22b0adad7558", ) go_repository( name = "org_golang_x_sync", From 321bc485eec06aef0b8d55c9289dda033d5d59cc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 24 Mar 2021 15:49:58 +0000 Subject: [PATCH 0879/1518] fix(deps): update google.golang.org/genproto commit hash to 3032e8f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5cfd61a6bca..409e22fe53f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a + google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 1d04f6ab994..0763c1cd223 100644 --- a/go.sum +++ b/go.sum @@ -549,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a h1:XVaQ1+BDKvrRcgppHhtAaniHCKyV5xJAvymwsPHHFaE= -google.golang.org/genproto v0.0.0-20210323160006-e668133fea6a/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= +google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e h1:IYrHTUywwtorLXynts01yby09nLqYNNnnveUnnLzaYA= +google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 88b672251c8..14d31ecc0aa 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XVaQ1+BDKvrRcgppHhtAaniHCKyV5xJAvymwsPHHFaE=", - version = "v0.0.0-20210323160006-e668133fea6a", + sum = "h1:IYrHTUywwtorLXynts01yby09nLqYNNnnveUnnLzaYA=", + version = "v0.0.0-20210324141432-3032e8ff099e", ) go_repository( name = "org_golang_google_grpc", From 071d07d5677d9b623d6b6a77742ee8ad468796b3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 25 Mar 2021 17:31:05 +0000 Subject: [PATCH 0880/1518] fix(deps): update google.golang.org/genproto commit hash to 5636347 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 409e22fe53f..22509c6a427 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e + google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 0763c1cd223..5f58aa65e87 100644 --- a/go.sum +++ b/go.sum @@ -549,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e h1:IYrHTUywwtorLXynts01yby09nLqYNNnnveUnnLzaYA= -google.golang.org/genproto v0.0.0-20210324141432-3032e8ff099e/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= +google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 h1:0VNRpy5TroA/6mYt3pPEq+E3oomxLJ+FUit3+oIsUy4= +google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 14d31ecc0aa..2cfdf43540f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:IYrHTUywwtorLXynts01yby09nLqYNNnnveUnnLzaYA=", - version = "v0.0.0-20210324141432-3032e8ff099e", + sum = "h1:0VNRpy5TroA/6mYt3pPEq+E3oomxLJ+FUit3+oIsUy4=", + version = "v0.0.0-20210325141258-5636347f2b14", ) go_repository( name = "org_golang_google_grpc", From c9883e78bc096ce88653802ee0f4a27b7b7e1ce7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 25 Mar 2021 22:49:36 +0000 Subject: [PATCH 0881/1518] fix(deps): update google.golang.org/genproto commit hash to eed09b1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 22509c6a427..b8187b6ede4 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 + google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210 google.golang.org/grpc v1.36.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 5f58aa65e87..8ad7c27c309 100644 --- a/go.sum +++ b/go.sum @@ -549,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 h1:0VNRpy5TroA/6mYt3pPEq+E3oomxLJ+FUit3+oIsUy4= -google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= +google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210 h1:fFxjezD+ZiiYJ6zyfH738tgcWOqfzWl9I1GoepZzrI4= +google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2cfdf43540f..449689e68ae 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0VNRpy5TroA/6mYt3pPEq+E3oomxLJ+FUit3+oIsUy4=", - version = "v0.0.0-20210325141258-5636347f2b14", + sum = "h1:fFxjezD+ZiiYJ6zyfH738tgcWOqfzWl9I1GoepZzrI4=", + version = "v0.0.0-20210325224202-eed09b1b5210", ) go_repository( name = "org_golang_google_grpc", From b19e0532f0a0909809b3d67804a713aa5e1ca038 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 26 Mar 2021 00:40:25 +0000 Subject: [PATCH 0882/1518] fix(deps): update module google.golang.org/grpc to v1.36.1 --- go.mod | 2 +- go.sum | 2 ++ repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b8187b6ede4..1c6b19ee744 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210 - google.golang.org/grpc v1.36.0 + google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 8ad7c27c309..1e7aef85300 100644 --- a/go.sum +++ b/go.sum @@ -567,6 +567,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 449689e68ae..29e719069c6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1055,8 +1055,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As=", - version = "v1.36.0", + sum = "h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY=", + version = "v1.36.1", ) go_repository( From dd08a7b35f3472272bc0c90aae16fb9b00996c9c Mon Sep 17 00:00:00 2001 From: Jonathan Bunde-Pedersen Date: Sat, 27 Mar 2021 18:22:15 +0100 Subject: [PATCH 0883/1518] Add doc with info about binary upload a custom route, for #500 (#2063) * Add doc with info about binary upload a custom route, for #500 * Add missing return statement --- docs/docs/mapping/binary_file_uploads.md | 54 ++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/docs/mapping/binary_file_uploads.md diff --git a/docs/docs/mapping/binary_file_uploads.md b/docs/docs/mapping/binary_file_uploads.md new file mode 100644 index 00000000000..145609ec588 --- /dev/null +++ b/docs/docs/mapping/binary_file_uploads.md @@ -0,0 +1,54 @@ +--- +layout: default +title: Binary file uploads +nav_order: 2 +parent: Mapping +--- + +# Binary file uploads + +If you need to do a binary file upload, e.g. via; + +```sh +curl -X POST -F "attachment=@/tmp/somefile.txt" http://localhost:9090/v1/files +``` + +then your request will contain the binary data directly and there is no way to model this using gRPC. + +What you can do instead is to add a custom route directly on the `mux` instance. + +## Custom route on a mux instance + +Here we'll setup a handler (`handleBinaryFileUpload`) for `POST` requests: + +```go +// Create a mux instance +mux := runtime.NewServeMux() + +// Attachment upload from http/s handled manually +mux.HandlePath("POST", "/v1/files", handleBinaryFileUpload) +``` + +And then in your handler you can do something like: + +```go +func handleBinaryFileUpload(w http.ResponseWriter, rq *http.Request, params map[string]string) { + err := r.ParseForm() + if err != nil { + http.Error(w, fmt.Sprintf("failed to parse form: %s", err.Error()), http.StatusBadRequest) + return + } + + f, header, err := rq.FormFile("attachment") + if err != nil { + http.Error(w, fmt.Sprintf("failed to get file 'attachment': %s", err.Error()), http.StatusBadRequest) + return + } + defer f.Close() + + // + // Now do something with the io.Reader in `f`, i.e. read it into a buffer or stream it to a gRPC client side stream. + // Also `header` will contain the filename, size etc of the original file. + // +} +``` From 46c196b9b4806f7bdf018da1e389bdf39ba5733e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 29 Mar 2021 20:57:43 +0000 Subject: [PATCH 0884/1518] fix(deps): update google.golang.org/genproto commit hash to 679c6ae --- go.mod | 2 +- go.sum | 6 ++---- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 1c6b19ee744..c6066e501f2 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210 + google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 1e7aef85300..a79780b9e95 100644 --- a/go.sum +++ b/go.sum @@ -549,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210 h1:fFxjezD+ZiiYJ6zyfH738tgcWOqfzWl9I1GoepZzrI4= -google.golang.org/genproto v0.0.0-20210325224202-eed09b1b5210/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee h1:vVeMwkgjjF0rgUTvAJkHJC5hUf50yFdZFDpBgK2kVXI= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -565,8 +565,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= diff --git a/repositories.bzl b/repositories.bzl index 29e719069c6..45a267dc321 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fFxjezD+ZiiYJ6zyfH738tgcWOqfzWl9I1GoepZzrI4=", - version = "v0.0.0-20210325224202-eed09b1b5210", + sum = "h1:vVeMwkgjjF0rgUTvAJkHJC5hUf50yFdZFDpBgK2kVXI=", + version = "v0.0.0-20210329143202-679c6ae281ee", ) go_repository( name = "org_golang_google_grpc", From cf9139436c7ad36b93f4b36fef1275f7ff1e053a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Mar 2021 04:35:12 +0000 Subject: [PATCH 0885/1518] fix(deps): update module github.com/golang/protobuf to v1.5.2 --- go.mod | 2 +- go.sum | 2 ++ repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c6066e501f2..160cc65dfa5 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/bufbuild/buf v0.37.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.5.1 + github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 diff --git a/go.sum b/go.sum index a79780b9e95..1fa54844031 100644 --- a/go.sum +++ b/go.sum @@ -123,6 +123,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= diff --git a/repositories.bzl b/repositories.bzl index 45a267dc321..39f8c700acc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -291,8 +291,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc=", - version = "v1.5.1", + sum = "h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=", + version = "v1.5.2", ) go_repository( From 14abf78dfe8d54eb29fd1662fa43da69d4108b97 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 30 Mar 2021 18:34:43 +0000 Subject: [PATCH 0886/1518] fix(deps): update google.golang.org/genproto commit hash to 2295ebb --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 160cc65dfa5..07e0654a5f7 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee + google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 1fa54844031..8df162137ea 100644 --- a/go.sum +++ b/go.sum @@ -551,8 +551,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee h1:vVeMwkgjjF0rgUTvAJkHJC5hUf50yFdZFDpBgK2kVXI= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6 h1:F+kz69Q2lpqBTskKa73+uBMwi7PBQRQEUBqHt0oc1K8= +google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 39f8c700acc..31aed13a86a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:vVeMwkgjjF0rgUTvAJkHJC5hUf50yFdZFDpBgK2kVXI=", - version = "v0.0.0-20210329143202-679c6ae281ee", + sum = "h1:F+kz69Q2lpqBTskKa73+uBMwi7PBQRQEUBqHt0oc1K8=", + version = "v0.0.0-20210330181207-2295ebbda0c6", ) go_repository( name = "org_golang_google_grpc", From 5f64681589f0d6c31895905578d3266c3dc6ef20 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 31 Mar 2021 16:34:00 +0000 Subject: [PATCH 0887/1518] fix(deps): update google.golang.org/genproto commit hash to b751324 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 07e0654a5f7..d14cd3a2887 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6 + google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 8df162137ea..8c2e6f0f83e 100644 --- a/go.sum +++ b/go.sum @@ -551,8 +551,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6 h1:F+kz69Q2lpqBTskKa73+uBMwi7PBQRQEUBqHt0oc1K8= -google.golang.org/genproto v0.0.0-20210330181207-2295ebbda0c6/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba h1:tRxOO808//a0cjdmwKb31i0XLNU1ZkJK1IilAAjD8Tg= +google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 31aed13a86a..5422e941ee8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:F+kz69Q2lpqBTskKa73+uBMwi7PBQRQEUBqHt0oc1K8=", - version = "v0.0.0-20210330181207-2295ebbda0c6", + sum = "h1:tRxOO808//a0cjdmwKb31i0XLNU1ZkJK1IilAAjD8Tg=", + version = "v0.0.0-20210331142528-b7513248f0ba", ) go_repository( name = "org_golang_google_grpc", From d39ff59175c32b7903835ad98e4769ce5356372a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 1 Apr 2021 14:38:00 +0000 Subject: [PATCH 0888/1518] fix(deps): update google.golang.org/genproto commit hash to 865547b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d14cd3a2887..93c06913c5a 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba + google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 8c2e6f0f83e..a24edab4ef5 100644 --- a/go.sum +++ b/go.sum @@ -551,8 +551,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba h1:tRxOO808//a0cjdmwKb31i0XLNU1ZkJK1IilAAjD8Tg= -google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2 h1:vAXehPdSJwEE7hh/kh9WnAVuJsfl6IUYudW5IOnwpvw= +google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5422e941ee8..8d4327a5af8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:tRxOO808//a0cjdmwKb31i0XLNU1ZkJK1IilAAjD8Tg=", - version = "v0.0.0-20210331142528-b7513248f0ba", + sum = "h1:vAXehPdSJwEE7hh/kh9WnAVuJsfl6IUYudW5IOnwpvw=", + version = "v0.0.0-20210401141331-865547bb08e2", ) go_repository( name = "org_golang_google_grpc", From 4be4e04f5da8fa1ce27eda9a79750090c14718ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 1 Apr 2021 21:31:26 +0000 Subject: [PATCH 0889/1518] chore(deps): update bufbuild/buf docker tag to v0.41.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4df991b2a34..3bddf4939a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.0.0 proto_lint: docker: - - image: bufbuild/buf:0.40.0 + - image: bufbuild/buf:0.41.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.40.0 + - image: bufbuild/buf:0.41.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 162dd0cbe66c438ee2bcee0c1bfda00cbf61acaa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 2 Apr 2021 01:46:58 +0000 Subject: [PATCH 0890/1518] chore(deps): update golang docker tag to v1.16.3 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 58a9cab45ec..2320bbf3d5f 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.2 +FROM golang:1.16.3 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From 8e738c719b1c29c918d1ac704192900e631f243c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 2 Apr 2021 15:08:59 +0000 Subject: [PATCH 0891/1518] fix(deps): update google.golang.org/genproto commit hash to 6c239bb --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 93c06913c5a..96deb1a3409 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 - google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2 + google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index a24edab4ef5..9074b04dd15 100644 --- a/go.sum +++ b/go.sum @@ -551,8 +551,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2 h1:vAXehPdSJwEE7hh/kh9WnAVuJsfl6IUYudW5IOnwpvw= -google.golang.org/genproto v0.0.0-20210401141331-865547bb08e2/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8d4327a5af8..cd9434f0590 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:vAXehPdSJwEE7hh/kh9WnAVuJsfl6IUYudW5IOnwpvw=", - version = "v0.0.0-20210401141331-865547bb08e2", + sum = "h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8=", + version = "v0.0.0-20210402141018-6c239bbf2bb1", ) go_repository( name = "org_golang_google_grpc", From cf86ae1b72f547e8a0160334b20771784e0ecccb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 2 Apr 2021 17:13:15 +0000 Subject: [PATCH 0892/1518] fix(deps): update golang.org/x/oauth2 commit hash to 2e8d934 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 96deb1a3409..82106d3c819 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 + golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 9074b04dd15..002e3fbaf57 100644 --- a/go.sum +++ b/go.sum @@ -383,8 +383,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558 h1:D7nTwh4J0i+5mW4Zjzn5omvlr6YBcWywE6KOcatyNxY= -golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index cd9434f0590..76aee299904 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:D7nTwh4J0i+5mW4Zjzn5omvlr6YBcWywE6KOcatyNxY=", - version = "v0.0.0-20210323180902-22b0adad7558", + sum = "h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=", + version = "v0.0.0-20210402161424-2e8d93401602", ) go_repository( name = "org_golang_x_sync", From 24434e22fb9734f1a62c81c4ea246125d7844645 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 2 Apr 2021 22:19:13 +0000 Subject: [PATCH 0893/1518] chore(deps): update dependency com_google_protobuf to v3.15.7 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 7052f401660..42da41f87a1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "65e020a42bdab44a66664d34421995829e9e79c60e5adaa08282fd14ca552f57", - strip_prefix = "protobuf-3.15.6", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.6.tar.gz"], + sha256 = "efdd6b932a2c0a88a90c4c80f88e4b2e1bf031e7514dbb5a5db5d0bf4f295504", + strip_prefix = "protobuf-3.15.7", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.7.tar.gz"], ) http_archive( From 4ab0e4228c026567ef33ff31191c9113172c7044 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 5 Apr 2021 18:14:34 +0000 Subject: [PATCH 0894/1518] fix(deps): update google.golang.org/genproto commit hash to a39eb2f --- go.mod | 2 +- go.sum | 6 ++---- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 82106d3c819..8e8f5f9823f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 - google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 + google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 002e3fbaf57..701c836882e 100644 --- a/go.sum +++ b/go.sum @@ -121,8 +121,6 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -551,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9 h1:Uga0hMhZnzB159cnlmhVPgEmZTwoZqwOb7e0pu+rlNI= +google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 76aee299904..b7d218abfbb 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:E7wSQBXkH3T3diucK+9Z1kjn4+/9tNG7lZLr75oOhh8=", - version = "v0.0.0-20210402141018-6c239bbf2bb1", + sum = "h1:Uga0hMhZnzB159cnlmhVPgEmZTwoZqwOb7e0pu+rlNI=", + version = "v0.0.0-20210405174219-a39eb2f71cb9", ) go_repository( name = "org_golang_google_grpc", From d1169e8d70ea7f472e060f113dd8f02e5940df11 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 6 Apr 2021 15:38:22 +0000 Subject: [PATCH 0895/1518] fix(deps): update google.golang.org/genproto commit hash to e86de6b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8e8f5f9823f..c8a3886a06f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 - google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9 + google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 google.golang.org/grpc v1.36.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 701c836882e..ea0bde71260 100644 --- a/go.sum +++ b/go.sum @@ -549,8 +549,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9 h1:Uga0hMhZnzB159cnlmhVPgEmZTwoZqwOb7e0pu+rlNI= -google.golang.org/genproto v0.0.0-20210405174219-a39eb2f71cb9/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 h1:f4STrQZf8jaowsiUitigvrqMCCM4QJH1A2JCSI7U1ow= +google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b7d218abfbb..03ea0d298a1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Uga0hMhZnzB159cnlmhVPgEmZTwoZqwOb7e0pu+rlNI=", - version = "v0.0.0-20210405174219-a39eb2f71cb9", + sum = "h1:f4STrQZf8jaowsiUitigvrqMCCM4QJH1A2JCSI7U1ow=", + version = "v0.0.0-20210406143921-e86de6bf7a46", ) go_repository( name = "org_golang_google_grpc", From 0a9acf6a7e6399acd4da6a2d24880bab0390f233 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 7 Apr 2021 18:56:14 +0000 Subject: [PATCH 0896/1518] fix(deps): update module google.golang.org/grpc to v1.37.0 --- go.mod | 2 +- go.sum | 3 +++ repositories.bzl | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c8a3886a06f..e654a64fa4a 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 - google.golang.org/grpc v1.36.1 + google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index ea0bde71260..3f34306fc69 100644 --- a/go.sum +++ b/go.sum @@ -74,6 +74,7 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -567,6 +568,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 03ea0d298a1..962e3a8d103 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -191,8 +191,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:EmNYJhPYy0pOFjCx2PrgtaBXmee0iUX9hLlxE1xHOJE=", - version = "v0.9.9-0.20201210154907-fd9021fe5dad", + sum = "h1:QyzYnTnPE15SQyUeqU6qLbWxMkwyAyu+vGksa0b7j00=", + version = "v0.9.9-0.20210217033140-668b12f5399d", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -1055,8 +1055,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY=", - version = "v1.36.1", + sum = "h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=", + version = "v1.37.0", ) go_repository( From 0d1e09abe96d420211a4b7c24bbc0a537501592e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 8 Apr 2021 17:51:54 +0000 Subject: [PATCH 0897/1518] chore(deps): update dependency com_google_protobuf to v3.15.8 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 42da41f87a1..6fe9e44a6fc 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "efdd6b932a2c0a88a90c4c80f88e4b2e1bf031e7514dbb5a5db5d0bf4f295504", - strip_prefix = "protobuf-3.15.7", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.7.tar.gz"], + sha256 = "0cbdc9adda01f6d2facc65a22a2be5cecefbefe5a09e5382ee8879b522c04441", + strip_prefix = "protobuf-3.15.8", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.8.tar.gz"], ) http_archive( From 6634a6641de82a3ced9f519358c8afe7a5248d43 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 13 Apr 2021 14:04:45 +0000 Subject: [PATCH 0898/1518] fix(deps): update golang.org/x/oauth2 commit hash to 5e61552 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e654a64fa4a..a746d4342bd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 + golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 3f34306fc69..c148e0c2bdf 100644 --- a/go.sum +++ b/go.sum @@ -382,8 +382,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ= +golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 962e3a8d103..ef85d13e953 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=", - version = "v0.0.0-20210402161424-2e8d93401602", + sum = "h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ=", + version = "v0.0.0-20210413134643-5e61552d6c78", ) go_repository( name = "org_golang_x_sync", From 1d5e3a3b6a0e4afd1d98dfba98fb31280ae5c343 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 13 Apr 2021 17:28:35 +0000 Subject: [PATCH 0899/1518] fix(deps): update google.golang.org/genproto commit hash to c14fb6e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a746d4342bd..89ec53146fd 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 + google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index c148e0c2bdf..6d19ae6fe16 100644 --- a/go.sum +++ b/go.sum @@ -550,8 +550,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46 h1:f4STrQZf8jaowsiUitigvrqMCCM4QJH1A2JCSI7U1ow= -google.golang.org/genproto v0.0.0-20210406143921-e86de6bf7a46/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3 h1:K+7Ig5hjiLVA/i1UFUUbCGimWz5/Ey0lAQjT3QiLaPY= +google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ef85d13e953..933c7fd4533 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:f4STrQZf8jaowsiUitigvrqMCCM4QJH1A2JCSI7U1ow=", - version = "v0.0.0-20210406143921-e86de6bf7a46", + sum = "h1:K+7Ig5hjiLVA/i1UFUUbCGimWz5/Ey0lAQjT3QiLaPY=", + version = "v0.0.0-20210413151531-c14fb6ef47c3", ) go_repository( name = "org_golang_google_grpc", From 649c7190248b3ced1f28692b184ce194fd8b575d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 14 Apr 2021 18:25:02 +0000 Subject: [PATCH 0900/1518] fix(deps): update google.golang.org/genproto commit hash to 9228244 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 89ec53146fd..2a27710b9cc 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3 + google.golang.org/genproto v0.0.0-20210414175830-92282443c685 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 6d19ae6fe16..2059ba3efae 100644 --- a/go.sum +++ b/go.sum @@ -550,8 +550,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3 h1:K+7Ig5hjiLVA/i1UFUUbCGimWz5/Ey0lAQjT3QiLaPY= -google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210414175830-92282443c685 h1:haf+Lo6ErjmEGRdEPFhwbQAiOoq7s+7xKIMfxOzmoSs= +google.golang.org/genproto v0.0.0-20210414175830-92282443c685/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 933c7fd4533..b7770312eca 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:K+7Ig5hjiLVA/i1UFUUbCGimWz5/Ey0lAQjT3QiLaPY=", - version = "v0.0.0-20210413151531-c14fb6ef47c3", + sum = "h1:haf+Lo6ErjmEGRdEPFhwbQAiOoq7s+7xKIMfxOzmoSs=", + version = "v0.0.0-20210414175830-92282443c685", ) go_repository( name = "org_golang_google_grpc", From 805b5778ede8d82680dbf4a777607985809e4e15 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 15 Apr 2021 15:47:15 +0000 Subject: [PATCH 0901/1518] fix(deps): update google.golang.org/genproto commit hash to 64678f1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2a27710b9cc..69416131e93 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210414175830-92282443c685 + google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 2059ba3efae..f1fa757155c 100644 --- a/go.sum +++ b/go.sum @@ -550,8 +550,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210414175830-92282443c685 h1:haf+Lo6ErjmEGRdEPFhwbQAiOoq7s+7xKIMfxOzmoSs= -google.golang.org/genproto v0.0.0-20210414175830-92282443c685/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5 h1:MSDsGZzppeaFIEzKO8W4ONBHajeQ0fMfwcQev1Z3T0o= +google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b7770312eca..72ed89163e8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:haf+Lo6ErjmEGRdEPFhwbQAiOoq7s+7xKIMfxOzmoSs=", - version = "v0.0.0-20210414175830-92282443c685", + sum = "h1:MSDsGZzppeaFIEzKO8W4ONBHajeQ0fMfwcQev1Z3T0o=", + version = "v0.0.0-20210415145412-64678f1ae2d5", ) go_repository( name = "org_golang_google_grpc", From 7db4bb76f873892a9bb21f01355df7b019606c42 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 16 Apr 2021 16:37:03 +0000 Subject: [PATCH 0902/1518] fix(deps): update google.golang.org/genproto commit hash to 9910b6c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 69416131e93..72fedab057c 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5 + google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index f1fa757155c..b7fd5c2c5e4 100644 --- a/go.sum +++ b/go.sum @@ -550,8 +550,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5 h1:MSDsGZzppeaFIEzKO8W4ONBHajeQ0fMfwcQev1Z3T0o= -google.golang.org/genproto v0.0.0-20210415145412-64678f1ae2d5/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg= +google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 72ed89163e8..365106f2b8d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:MSDsGZzppeaFIEzKO8W4ONBHajeQ0fMfwcQev1Z3T0o=", - version = "v0.0.0-20210415145412-64678f1ae2d5", + sum = "h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg=", + version = "v0.0.0-20210416161957-9910b6c460de", ) go_repository( name = "org_golang_google_grpc", From 52b7bf69641d083a051c5615ce2655f65fc57c90 Mon Sep 17 00:00:00 2001 From: Stijn De Haes Date: Wed, 21 Apr 2021 02:32:41 +0200 Subject: [PATCH 0903/1518] Fix path params being in the body (#2078) * Fix path params being in the body * Return an error when trying to add an empty body * Change the example of a bit of everything * Reverted changes to allow empty body with post again --- examples/internal/clients/abe/BUILD.bazel | 1 + .../internal/clients/abe/api/swagger.yaml | 151 ++- .../abe/api_a_bit_of_everything_service.go | 4 +- .../clients/abe/model_a_bit_of_everything.go | 63 + .../proto/examplepb/a_bit_of_everything.pb.go | 1116 ++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 203 ++- .../examplepb/generated_input.swagger.json | 3 +- .../proto/examplepb/stream.swagger.json | 3 +- internal/descriptor/registry.go | 7 + .../internal/genopenapi/template.go | 222 ++-- .../internal/genopenapi/template_test.go | 69 +- 12 files changed, 1177 insertions(+), 667 deletions(-) create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything.go diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 360e81c4f02..7d459a7dbd6 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -11,6 +11,7 @@ go_library( "client.go", "configuration.go", "enum_helper.go", + "model_a_bit_of_everything.go", "model_a_bit_of_everything_nested.go", "model_examplepb_a_bit_of_everything.go", "model_examplepb_a_bit_of_everything_repeated.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 89dd9680d43..4450f3e0c6b 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1591,7 +1591,7 @@ paths: name: "body" required: true schema: - $ref: "#/definitions/examplepbABitOfEverything" + $ref: "#/definitions/A bit of everything" x-exportParamName: "Body" responses: 200: @@ -2353,7 +2353,7 @@ paths: name: "body" required: true schema: - $ref: "#/definitions/examplepbBody" + type: "object" x-exportParamName: "Body" responses: 200: @@ -2731,7 +2731,8 @@ definitions: description: "Intentionaly complicated message type to cover many features of\ \ Protobuf." example: - uuid: "0cf361e1-4b44-483d-a159-54dabdf7e814" + int64_value: 12 + double_value: 12.3 examplepbABitOfEverythingRepeated: type: "object" properties: @@ -3013,6 +3014,150 @@ definitions: properties: value: type: "string" + A bit of everything: + type: "object" + required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" + properties: + singleNested: + $ref: "#/definitions/ABitOfEverythingNested" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + pathEnumValue: + $ref: "#/definitions/pathenumPathEnum" + nestedPathEnumValue: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + type: "object" + properties: {} + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeatedEnumAnnotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeatedStringAnnotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeatedNestedAnnotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nestedAnnotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64OverrideType: + type: "integer" + format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true + optionalStringValue: + type: "string" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "A bit of everything" + description: "Intentionaly complicated message type to cover many features of\ + \ Protobuf." + example: + int64_value: 12 + double_value: 12.3 externalDocs: description: "More about gRPC-Gateway" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index f83145c9432..1f48a76229f 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -3341,7 +3341,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostWithEmptyBody(ctx context.Context, name string, body ExamplepbBody) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostWithEmptyBody(ctx context.Context, name string, body interface{}) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -3654,7 +3654,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuid string, body ABitOfEverything) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go new file mode 100644 index 00000000000..1f9f5392a48 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -0,0 +1,63 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// Intentionaly complicated message type to cover many features of Protobuf. +type ABitOfEverything struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index b2dc069c316..8fbf7fedefc 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1356,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd5, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xce, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1590,7 +1590,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x3a, 0x95, 0x02, 0x92, 0x41, 0x91, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, + 0x01, 0x3a, 0x8e, 0x02, 0x92, 0x41, 0x8a, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, @@ -1604,604 +1604,604 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x30, 0x7b, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, - 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, - 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, - 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, + 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, - 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, - 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, - 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, - 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, - 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, - 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, - 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, - 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, - 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, - 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, - 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, - 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, - 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, + 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, + 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, + 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, - 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, - 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, - 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, - 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, - 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, - 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, + 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2, 0x41, + 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, + 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, + 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, + 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, - 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, + 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, + 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, + 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, + 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, + 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, + 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, + 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, + 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, + 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, + 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, + 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, + 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, - 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, - 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, - 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, - 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, - 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, + 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, - 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, + 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, - 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, - 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, - 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, - 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, - 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, - 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, - 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, + 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, + 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, + 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, + 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, + 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, + 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, + 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, + 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, - 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, - 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, - 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, + 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, + 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, + 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, - 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, - 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, - 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, + 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, + 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, + 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, + 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, + 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, + 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, - 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, - 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, - 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, - 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, + 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, + 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, + 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, + 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, - 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, + 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, - 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, - 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, - 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, - 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, - 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, - 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, - 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, - 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, - 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, - 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, - 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, - 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, - 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, - 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, - 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, - 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, - 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, - 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, - 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, - 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, - 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, - 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, - 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, - 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, - 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, + 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, - 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, - 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, - 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, + 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, + 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, + 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, + 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, + 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, + 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, + 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, + 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, + 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, + 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, + 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, + 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, + 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, + 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, + 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, + 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, + 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, + 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, + 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, + 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, + 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, + 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, + 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, + 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, + 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, + 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, + 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, + 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, + 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index b5fee5532bc..965eae5be59 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -242,7 +242,7 @@ message ABitOfEverything { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more about ABitOfEverything"; } - example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}" + example: "{\"int64_value\": 12, \"double_value\": 12.3}" }; // Nested is nested type. diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 5750fc6e491..8fa007da96c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1906,7 +1906,203 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" + "type": "object", + "example": { + "int64_value": 12, + "double_value": 12.3 + }, + "properties": { + "singleNested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "float_value" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "required_string_via_field_behavior_annotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + }, + "optionalStringValue": { + "type": "string" + } + }, + "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] } } ], @@ -2873,7 +3069,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbBody" + "type": "object" } } ], @@ -3149,7 +3345,8 @@ "examplepbABitOfEverything": { "type": "object", "example": { - "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + "int64_value": 12, + "double_value": 12.3 }, "properties": { "singleNested": { diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 7d76834895b..7c199c35036 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -91,7 +91,8 @@ "examplepbABitOfEverything": { "type": "object", "example": { - "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + "int64_value": 12, + "double_value": 12.3 }, "properties": { "singleNested": { diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 7f17f28580e..57fa9ffc806 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -218,7 +218,8 @@ "examplepbABitOfEverything": { "type": "object", "example": { - "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" + "int64_value": 12, + "double_value": 12.3 }, "properties": { "singleNested": { diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 21e4e3e2f99..e6f78482ef1 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -663,3 +663,10 @@ func (r *Registry) GetOpenAPIFieldOption(qualifiedField string) (*options.JSONSc opt, ok := r.fieldOptions[qualifiedField] return opt, ok } + +func (r *Registry) FieldName(f *Field) string { + if r.useJSONNamesForFields { + return f.GetJsonName() + } + return f.GetName() +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index be4bad0327d..0ac0d64495c 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -250,11 +250,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre param.CollectionFormat = "multi" } - if reg.GetUseJSONNamesForFields() { - param.Name = prefix + field.GetJsonName() - } else { - param.Name = prefix + field.GetName() - } + param.Name = prefix + reg.FieldName(field) if isEnum { enum, err := reg.LookupEnum("", fieldType) @@ -306,12 +302,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre touchedOut := cycle.Branch() for _, nestedField := range msg.Fields { - var fieldName string - if reg.GetUseJSONNamesForFields() { - fieldName = field.GetJsonName() - } else { - fieldName = field.GetName() - } + fieldName := reg.FieldName(field) p, err := nestedQueryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams, body, touchedOut) if err != nil { return nil, err @@ -384,7 +375,92 @@ func skipRenderingRef(refName string) bool { return ok } -func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap) { +func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry, customRefs refMap, excludeFields []*descriptor.Field) openapiSchemaObject { + schema := openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + } + msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) + if err := updateOpenAPIDataFromComments(reg, &schema, msg, msgComments, false); err != nil { + panic(err) + } + opts, err := getMessageOpenAPIOption(reg, msg) + if err != nil { + panic(err) + } + if opts != nil { + protoSchema := openapiSchemaFromProtoSchema(opts, reg, customRefs, msg) + + // Warning: Make sure not to overwrite any fields already set on the schema type. + schema.ExternalDocs = protoSchema.ExternalDocs + schema.ReadOnly = protoSchema.ReadOnly + schema.MultipleOf = protoSchema.MultipleOf + schema.Maximum = protoSchema.Maximum + schema.ExclusiveMaximum = protoSchema.ExclusiveMaximum + schema.Minimum = protoSchema.Minimum + schema.ExclusiveMinimum = protoSchema.ExclusiveMinimum + schema.MaxLength = protoSchema.MaxLength + schema.MinLength = protoSchema.MinLength + schema.Pattern = protoSchema.Pattern + schema.Default = protoSchema.Default + schema.MaxItems = protoSchema.MaxItems + schema.MinItems = protoSchema.MinItems + schema.UniqueItems = protoSchema.UniqueItems + schema.MaxProperties = protoSchema.MaxProperties + schema.MinProperties = protoSchema.MinProperties + schema.Required = protoSchema.Required + if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { + schema.schemaCore = protoSchema.schemaCore + } + if protoSchema.Title != "" { + schema.Title = protoSchema.Title + } + if protoSchema.Description != "" { + schema.Description = protoSchema.Description + } + if protoSchema.Example != nil { + schema.Example = protoSchema.Example + } + } + + schema.Required = filterOutExcludedFields(schema.Required, excludeFields, reg) + + for _, f := range msg.Fields { + if shouldExcludeField(reg.FieldName(f), excludeFields, reg) { + continue + } + fieldValue := schemaOfField(f, reg, customRefs) + comments := fieldProtoComments(reg, msg, f) + if err := updateOpenAPIDataFromComments(reg, &fieldValue, f, comments, false); err != nil { + panic(err) + } + + if requiredIdx := find(schema.Required, *f.Name); requiredIdx != -1 && reg.GetUseJSONNamesForFields() { + schema.Required[requiredIdx] = f.GetJsonName() + } + + if fieldValue.Required != nil { + for _, req := range fieldValue.Required { + if reg.GetUseJSONNamesForFields() { + schema.Required = append(schema.Required, f.GetJsonName()) + } else { + schema.Required = append(schema.Required, req) + } + } + } + + kv := keyVal{Value: fieldValue} + kv.Key = reg.FieldName(f) + if schema.Properties == nil { + schema.Properties = &openapiSchemaObjectProperties{} + } + *schema.Properties = append(*schema.Properties, kv) + } + return schema +} + +func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap, excludeFields []*descriptor.Field) { for name, msg := range messages { swgName, ok := fullyQualifiedNameToOpenAPIName(msg.FQMN(), reg) if !ok { @@ -397,88 +473,26 @@ func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, if opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { continue } - schema := openapiSchemaObject{ - schemaCore: schemaCore{ - Type: "object", - }, - } - msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) - if err := updateOpenAPIDataFromComments(reg, &schema, msg, msgComments, false); err != nil { - panic(err) - } - opts, err := getMessageOpenAPIOption(reg, msg) - if err != nil { - panic(err) - } - if opts != nil { - protoSchema := openapiSchemaFromProtoSchema(opts, reg, customRefs, msg) - - // Warning: Make sure not to overwrite any fields already set on the schema type. - schema.ExternalDocs = protoSchema.ExternalDocs - schema.ReadOnly = protoSchema.ReadOnly - schema.MultipleOf = protoSchema.MultipleOf - schema.Maximum = protoSchema.Maximum - schema.ExclusiveMaximum = protoSchema.ExclusiveMaximum - schema.Minimum = protoSchema.Minimum - schema.ExclusiveMinimum = protoSchema.ExclusiveMinimum - schema.MaxLength = protoSchema.MaxLength - schema.MinLength = protoSchema.MinLength - schema.Pattern = protoSchema.Pattern - schema.Default = protoSchema.Default - schema.MaxItems = protoSchema.MaxItems - schema.MinItems = protoSchema.MinItems - schema.UniqueItems = protoSchema.UniqueItems - schema.MaxProperties = protoSchema.MaxProperties - schema.MinProperties = protoSchema.MinProperties - schema.Required = protoSchema.Required - if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { - schema.schemaCore = protoSchema.schemaCore - } - if protoSchema.Title != "" { - schema.Title = protoSchema.Title - } - if protoSchema.Description != "" { - schema.Description = protoSchema.Description - } - if protoSchema.Example != nil { - schema.Example = protoSchema.Example - } - } - - for _, f := range msg.Fields { - fieldValue := schemaOfField(f, reg, customRefs) - comments := fieldProtoComments(reg, msg, f) - if err := updateOpenAPIDataFromComments(reg, &fieldValue, f, comments, false); err != nil { - panic(err) - } - - if requiredIdx := find(schema.Required, *f.Name); requiredIdx != -1 && reg.GetUseJSONNamesForFields() { - schema.Required[requiredIdx] = f.GetJsonName() - } - - if fieldValue.Required != nil { - for _, req := range fieldValue.Required { - if reg.GetUseJSONNamesForFields() { - schema.Required = append(schema.Required, f.GetJsonName()) - } else { - schema.Required = append(schema.Required, req) - } - } - } + d[swgName] = renderMessageAsDefinition(msg, reg, customRefs, excludeFields) + } +} - kv := keyVal{Value: fieldValue} - if reg.GetUseJSONNamesForFields() { - kv.Key = f.GetJsonName() - } else { - kv.Key = f.GetName() - } - if schema.Properties == nil { - schema.Properties = &openapiSchemaObjectProperties{} - } - *schema.Properties = append(*schema.Properties, kv) +func shouldExcludeField(name string, excluded []*descriptor.Field, reg *descriptor.Registry) bool { + for _, f := range excluded { + if name == reg.FieldName(f) { + return true + } + } + return false +} +func filterOutExcludedFields(fields []string, excluded []*descriptor.Field, reg *descriptor.Registry) []string { + var filtered []string + for _, f := range fields { + if !shouldExcludeField(f, excluded, reg) { + filtered = append(filtered, f) } - d[swgName] = schema } + return filtered } // schemaOfField returns a OpenAPI Schema Object for a protobuf field. @@ -962,9 +976,25 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re wknSchemaCore, isWkn := wktSchemas[meth.RequestType.FQMN()] if !isWkn { - err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) - if err != nil { - return err + var bodyExcludedFields []*descriptor.Field + if len(b.PathParams) != 0 { + for _, p := range b.PathParams { + // We only support excluding top-level fields captured by path parameters. + if len(p.FieldPath) == 1 { + bodyExcludedFields = append(bodyExcludedFields, p.FieldPath[0].Target) + } + } + } + if len(bodyExcludedFields) != 0 { + schema = renderMessageAsDefinition(meth.RequestType, reg, customRefs, bodyExcludedFields) + if schema.Properties == nil || len(*schema.Properties) == 0 { + glog.Errorf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) + } + } else { + err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) + if err != nil { + return err + } } } else { schema.schemaCore = wknSchemaCore @@ -1289,7 +1319,7 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { // Find all the service's messages and enumerations that are defined (recursively) // and write request, response and other custom (but referenced) types out as definition objects. findServicesMessagesAndEnumerations(p.Services, p.reg, messages, streamingMessages, enums, requestResponseRefs) - renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs) + renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs, nil) renderEnumerationsAsDefinition(enums, s.Definitions, p.reg) // File itself might have some comments and metadata. @@ -2346,7 +2376,7 @@ func addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs re // ?? Should be either enum or msg } - renderMessagesAsDefinition(msgMap, d, reg, refs) + renderMessagesAsDefinition(msgMap, d, reg, refs, nil) renderEnumerationsAsDefinition(enumMap, d, reg) // Run again in case any new refs were added diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 05d51c04b3d..29d018d9856 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3663,6 +3663,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { schema map[string]openapi_options.Schema // per-message schema to add defs openapiDefinitionsObject openAPIOptions *openapiconfig.OpenAPIOptions + excludedFields []*descriptor.Field }{ { descr: "no OpenAPI options", @@ -3892,6 +3893,66 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, + { + descr: "JSONSchema with excluded fields", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("aRequiredField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + Options: requiredField, + }, + { + Name: proto.String("anExcludedField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + }, + }, + }, + }, + schema: map[string]openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + Required: []string{"req"}, + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"req", "aRequiredField"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "aRequiredField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Description: "field description", + Title: "field title", + Required: []string{"aRequiredField"}, + }, + }, + }, + }, + }, + excludedFields: []*descriptor.Field{ + { + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: strPtr("anExcludedField"), + }, + }, + }, + }, { descr: "JSONSchema with required properties via field_behavior", msgDescs: []*descriptorpb.DescriptorProto{ @@ -4009,7 +4070,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { refs := make(refMap) actual := make(openapiDefinitionsObject) - renderMessagesAsDefinition(msgMap, actual, reg, refs) + renderMessagesAsDefinition(msgMap, actual, reg, refs, test.excludedFields) if !reflect.DeepEqual(actual, test.defs) { t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) @@ -4018,6 +4079,10 @@ func TestRenderMessagesAsDefinition(t *testing.T) { } } +func strPtr(s string) *string { + return &s +} + func TestUpdateOpenAPIDataFromComments(t *testing.T) { tests := []struct { @@ -4346,7 +4411,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { refs := make(refMap) actual := make(openapiDefinitionsObject) - renderMessagesAsDefinition(msgMap, actual, reg, refs) + renderMessagesAsDefinition(msgMap, actual, reg, refs, nil) if !reflect.DeepEqual(actual, test.defs) { t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) From a8ef0443c2ff5787a021417036a3d0ae12416899 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 20 Apr 2021 20:37:54 -0400 Subject: [PATCH 0904/1518] Update CI to use 1.16 and latest release (#2099) * Update CI to 1.16 and latest release * Tidy module --- .circleci/config.yml | 4 ++-- go.sum | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3bddf4939a4..431fe7aff1e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -41,7 +41,7 @@ executors: password1: "3ec86b2e5a431be2d72c" GLOG_logtostderr: "1" docker: - - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.15 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.16 auth: username: gateway-ci-user password: ${password0}${password1} @@ -122,7 +122,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.0.0 + - run: gorelease -base=v2.3.0 proto_lint: docker: - image: bufbuild/buf:0.41.0 diff --git a/go.sum b/go.sum index b7fd5c2c5e4..494de7150eb 100644 --- a/go.sum +++ b/go.sum @@ -328,7 +328,6 @@ golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= @@ -373,7 +372,6 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -426,7 +424,6 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= @@ -488,7 +485,6 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -566,7 +562,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1 h1:cmUfbeGKnz9+2DD/UYsMQXeqbHZqZDs4eQwW0sFOpBY= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= From 09aa3b50039d42fbc3001f77a0d37043f5861434 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 21 Apr 2021 00:39:26 +0000 Subject: [PATCH 0905/1518] fix(deps): update google.golang.org/genproto commit hash to 3c870d7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 72fedab057c..0f4ae191430 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de + google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 494de7150eb..a413b2d071d 100644 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg= -google.golang.org/genproto v0.0.0-20210416161957-9910b6c460de/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2 h1:g2sJMUGCpeHZqTx8p3wsAWRS64nFq20i4dvJWcKGqvY= +google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 365106f2b8d..7a8ee889034 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:+nG/xknR+Gc5ByHOtK1dT0Pl3LYo8NLR+Jz3XeBeGEg=", - version = "v0.0.0-20210416161957-9910b6c460de", + sum = "h1:g2sJMUGCpeHZqTx8p3wsAWRS64nFq20i4dvJWcKGqvY=", + version = "v0.0.0-20210420162539-3c870d7478d2", ) go_repository( name = "org_golang_google_grpc", From 992aeeb1879c2b5c2b84494da0a15444b033e04a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 22 Apr 2021 17:02:07 +0000 Subject: [PATCH 0906/1518] fix(deps): update google.golang.org/genproto commit hash to 2279cbc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0f4ae191430..7ad1611352e 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2 + google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index a413b2d071d..cccae606fe0 100644 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2 h1:g2sJMUGCpeHZqTx8p3wsAWRS64nFq20i4dvJWcKGqvY= -google.golang.org/genproto v0.0.0-20210420162539-3c870d7478d2/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62 h1:T+FUWTu3APzbXjK+kXH0xGm+CcCBQo6u5IKpH3i1NiQ= +google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7a8ee889034..4fbeade1cf8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:g2sJMUGCpeHZqTx8p3wsAWRS64nFq20i4dvJWcKGqvY=", - version = "v0.0.0-20210420162539-3c870d7478d2", + sum = "h1:T+FUWTu3APzbXjK+kXH0xGm+CcCBQo6u5IKpH3i1NiQ=", + version = "v0.0.0-20210422153429-2279cbceda62", ) go_repository( name = "org_golang_google_grpc", From 4e36178a48d6fd958b03bd898caa293827922cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Veith=20Z=C3=A4ch?= Date: Fri, 23 Apr 2021 01:15:50 +0200 Subject: [PATCH 0907/1518] Patcher for fields of type google.protobuf.Any (#2103) * test type any * feat: Patcher for type google.protobuf.Any * feat: Patcher for type google.protobuf.Any * feat: Patcher for type google.protobuf.Any * fix: add propper error message if someone sends only parts of a google.protobuf.Any message * Rerun generation * Rerun Bazel generation too Co-authored-by: Johan Brandhorst --- runtime/fieldmask.go | 15 + runtime/fieldmask_test.go | 7 + runtime/internal/examplepb/BUILD.bazel | 1 + runtime/internal/examplepb/example.pb.go | 514 +++++++++--------- runtime/internal/examplepb/example.proto | 2 + .../internal/examplepb/example.swagger.json | 9 +- .../examplepb/non_standard_names.swagger.json | 9 +- .../internal/examplepb/proto2.swagger.json | 9 +- .../internal/examplepb/proto3.swagger.json | 9 +- 9 files changed, 314 insertions(+), 261 deletions(-) diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 0445fda2853..0138ed2f769 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -63,6 +63,17 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field continue } + if isProtobufAnyMessage(fd.Message()) { + _, hasTypeField := v.(map[string]interface{})["@type"] + if hasTypeField { + queue = append(queue, fieldMaskPathItem{path: k}) + continue + } else { + return nil, fmt.Errorf("could not find field @type in %q in message %q", k, item.msg.Descriptor().FullName()) + } + + } + child := fieldMaskPathItem{ node: v, } @@ -97,6 +108,10 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field return fm, nil } +func isProtobufAnyMessage(md protoreflect.MessageDescriptor) bool { + return md != nil && (md.FullName() == "google.protobuf.Any") +} + func isDynamicProtoMessage(md protoreflect.MessageDescriptor) bool { return md != nil && (md.FullName() == "google.protobuf.Struct" || md.FullName() == "google.protobuf.Value") } diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index 2535ac811a3..e458211a48e 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -159,6 +159,13 @@ func TestFieldMaskFromRequestBody(t *testing.T) { "nested", ), }, + + { + name: "protobuf-any", + msg: &examplepb.ABitOfEverything{}, + input: `{"anytype":{"@type": "xx.xx/examplepb.NestedOuter", "one":{"two":{"three":{"a":true, "b":false}}}}}`, + expected: newFieldMask("anytype"), //going deeper makes no sense + }, } { t.Run(tc.name, func(t *testing.T) { actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), tc.msg) diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel index 5fee49c88e3..7aebca0827b 100644 --- a/runtime/internal/examplepb/BUILD.bazel +++ b/runtime/internal/examplepb/BUILD.bazel @@ -15,6 +15,7 @@ proto_library( "proto3.proto", ], deps = [ + "@com_google_protobuf//:any_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:field_mask_proto", diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 309d83e2eb7..1aecff19649 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -7,6 +7,7 @@ package examplepb import ( + any "github.com/golang/protobuf/ptypes/any" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" field_mask "google.golang.org/genproto/protobuf/field_mask" @@ -271,6 +272,7 @@ type ABitOfEverything struct { // nested object comments (This comment is overridden by the field annotation) NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` + Anytype *any.Any `protobuf:"bytes,38,opt,name=anytype,proto3" json:"anytype,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -550,6 +552,13 @@ func (x *ABitOfEverything) GetInt64OverrideType() int64 { return 0 } +func (x *ABitOfEverything) GetAnytype() *any.Any { + if x != nil { + return x.Anytype + } + return nil +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1148,252 +1157,257 @@ var file_runtime_internal_examplepb_example_proto_rawDesc = []byte{ 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0xeb, 0x14, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, - 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, - 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f, + 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x9b, 0x15, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x64, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, - 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, - 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x7e, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, + 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, + 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, + 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x6d, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, - 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xb0, - 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, - 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, - 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, - 0x01, 0x1a, 0x71, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, - 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, - 0x74, 0x12, 0x65, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, + 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x13, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, + 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1a, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x1a, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x11, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x61, 0x6e, 0x79, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x61, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xb0, 0x01, 0x0a, 0x06, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x1a, 0x71, 0x0a, 0x0d, + 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, + 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x90, 0x01, + 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, + 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, - 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x65, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, + 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x05, 0x0a, + 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0xb6, 0x01, 0x0a, 0x0d, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x68, 0x0a, 0x13, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, - 0x22, 0xb6, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, - 0x68, 0x0a, 0x13, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x61, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x53, 0x0a, 0x0b, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x22, 0x51, - 0x0a, 0x09, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x03, 0x74, - 0x77, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x52, 0x10, 0x61, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x53, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x75, + 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x4f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x22, 0x51, 0x0a, 0x09, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x44, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x57, 0x0a, 0x09, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x4a, 0x0a, 0x05, 0x74, 0x68, 0x72, + 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, - 0x6f, 0x22, 0x57, 0x0a, 0x09, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x4a, - 0x0a, 0x05, 0x74, 0x68, 0x72, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x68, - 0x72, 0x65, 0x65, 0x52, 0x05, 0x74, 0x68, 0x72, 0x65, 0x65, 0x22, 0x29, 0x0a, 0x0b, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x54, 0x68, 0x72, 0x65, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x01, 0x62, 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, - 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x75, - 0x74, 0x65, 0x72, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, - 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x68, 0x72, 0x65, 0x65, 0x52, 0x05, + 0x74, 0x68, 0x72, 0x65, 0x65, 0x22, 0x29, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, + 0x68, 0x72, 0x65, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x01, 0x62, + 0x22, 0xa0, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x52, 0x06, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x61, 0x73, 0x6b, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, + 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, + 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1432,7 +1446,8 @@ var file_runtime_internal_examplepb_example_proto_goTypes = []interface{}{ (*RepeatedResponseBodyOut_Response)(nil), // 18: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response (*empty.Empty)(nil), // 19: google.protobuf.Empty (*timestamp.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*field_mask.FieldMask)(nil), // 21: google.protobuf.FieldMask + (*any.Any)(nil), // 21: google.protobuf.Any + (*field_mask.FieldMask)(nil), // 22: google.protobuf.FieldMask } var file_runtime_internal_examplepb_example_proto_depIdxs = []int32{ 13, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested @@ -1448,24 +1463,25 @@ var file_runtime_internal_examplepb_example_proto_depIdxs = []int32{ 0, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum 13, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested 13, // 12: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 17, // 13: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response - 18, // 14: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response - 21, // 15: grpc.gateway.runtime.internal.examplepb.UpdateMessage.update_mask:type_name -> google.protobuf.FieldMask - 4, // 16: grpc.gateway.runtime.internal.examplepb.UpdateMessage.a_bit_of_everything:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything - 9, // 17: grpc.gateway.runtime.internal.examplepb.NestedOuter.one:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOne - 10, // 18: grpc.gateway.runtime.internal.examplepb.NestedOne.two:type_name -> grpc.gateway.runtime.internal.examplepb.NestedTwo - 11, // 19: grpc.gateway.runtime.internal.examplepb.NestedTwo.three:type_name -> grpc.gateway.runtime.internal.examplepb.NestedThree - 8, // 20: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.nested:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOuter - 21, // 21: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.update_mask:type_name -> google.protobuf.FieldMask - 1, // 22: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 23: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum - 13, // 24: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 2, // 25: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType - 26, // [26:26] is the sub-list for method output_type - 26, // [26:26] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 21, // 13: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.anytype:type_name -> google.protobuf.Any + 17, // 14: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response + 18, // 15: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response + 22, // 16: grpc.gateway.runtime.internal.examplepb.UpdateMessage.update_mask:type_name -> google.protobuf.FieldMask + 4, // 17: grpc.gateway.runtime.internal.examplepb.UpdateMessage.a_bit_of_everything:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything + 9, // 18: grpc.gateway.runtime.internal.examplepb.NestedOuter.one:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOne + 10, // 19: grpc.gateway.runtime.internal.examplepb.NestedOne.two:type_name -> grpc.gateway.runtime.internal.examplepb.NestedTwo + 11, // 20: grpc.gateway.runtime.internal.examplepb.NestedTwo.three:type_name -> grpc.gateway.runtime.internal.examplepb.NestedThree + 8, // 21: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.nested:type_name -> grpc.gateway.runtime.internal.examplepb.NestedOuter + 22, // 22: grpc.gateway.runtime.internal.examplepb.UpdateNestedRequest.update_mask:type_name -> google.protobuf.FieldMask + 1, // 23: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 24: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 13, // 25: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 2, // 26: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + 27, // [27:27] is the sub-list for method output_type + 27, // [27:27] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_runtime_internal_examplepb_example_proto_init() } diff --git a/runtime/internal/examplepb/example.proto b/runtime/internal/examplepb/example.proto index d1c049d73d3..e851fed6380 100644 --- a/runtime/internal/examplepb/example.proto +++ b/runtime/internal/examplepb/example.proto @@ -5,6 +5,7 @@ package grpc.gateway.runtime.internal.examplepb; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/field_mask.proto"; +import "google/protobuf/any.proto"; // SimpleMessage represents a simple message sent to the Echo service. message SimpleMessage { @@ -72,6 +73,7 @@ message ABitOfEverything { // nested object comments (This comment is overridden by the field annotation) Nested nested_annotation = 36; int64 int64_override_type = 37; + google.protobuf.Any anytype = 38; } // NumericEnum is one or zero. diff --git a/runtime/internal/examplepb/example.swagger.json b/runtime/internal/examplepb/example.swagger.json index fd91266af80..6aaff876287 100644 --- a/runtime/internal/examplepb/example.swagger.json +++ b/runtime/internal/examplepb/example.swagger.json @@ -16,13 +16,16 @@ "type": "object", "properties": { "typeUrl": { - "type": "string" + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, "value": { "type": "string", - "format": "byte" + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." } - } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/runtime/internal/examplepb/non_standard_names.swagger.json b/runtime/internal/examplepb/non_standard_names.swagger.json index 119e1c861d3..f27b8fb9c89 100644 --- a/runtime/internal/examplepb/non_standard_names.swagger.json +++ b/runtime/internal/examplepb/non_standard_names.swagger.json @@ -212,13 +212,16 @@ "type": "object", "properties": { "typeUrl": { - "type": "string" + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, "value": { "type": "string", - "format": "byte" + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." } - } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "protobufNullValue": { "type": "string", diff --git a/runtime/internal/examplepb/proto2.swagger.json b/runtime/internal/examplepb/proto2.swagger.json index eabea27dacb..4d5edadd07d 100644 --- a/runtime/internal/examplepb/proto2.swagger.json +++ b/runtime/internal/examplepb/proto2.swagger.json @@ -16,13 +16,16 @@ "type": "object", "properties": { "typeUrl": { - "type": "string" + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, "value": { "type": "string", - "format": "byte" + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." } - } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/runtime/internal/examplepb/proto3.swagger.json b/runtime/internal/examplepb/proto3.swagger.json index 8481190f97d..084374e18a7 100644 --- a/runtime/internal/examplepb/proto3.swagger.json +++ b/runtime/internal/examplepb/proto3.swagger.json @@ -16,13 +16,16 @@ "type": "object", "properties": { "typeUrl": { - "type": "string" + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, "value": { "type": "string", - "format": "byte" + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." } - } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", From a8ae46551bc238a50ef3c89a3b67ad939fe9e2e4 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 26 Apr 2021 11:18:17 -0400 Subject: [PATCH 0908/1518] Update googleapis buf dependency (#2107) The new version of googleapis has been modified to account for some irregularities. Make sure it still works for us. --- buf.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buf.lock b/buf.lock index ad040755ff0..f546ab308c8 100644 --- a/buf.lock +++ b/buf.lock @@ -4,6 +4,6 @@ deps: owner: beta repository: googleapis branch: main - commit: 1dc4674e3cb949b388204fa2dc321be7 - digest: b1-Ta7Phbh_og5qghBtkK8kIVfexZ5MWk0gb3eG0kp3Qx0= - create_time: 2021-02-09T19:58:07.142147Z + commit: 2e73676eef8642dfba4ed782b7c8d6fe + digest: b1-vB11w98W2vFtEP4Veknm56Pi6DU6MpOuocESiOzvbqw= + create_time: 2021-04-26T14:55:30.644663Z From 39f5920ee07f0392bb66b78ff03358a6b1a6e596 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 20:09:03 +0100 Subject: [PATCH 0909/1518] fix(deps): update google.golang.org/genproto commit hash to 3a41ef9 (#2106) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7ad1611352e..5ce41ac905a 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62 + google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index cccae606fe0..a81f6969591 100644 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62 h1:T+FUWTu3APzbXjK+kXH0xGm+CcCBQo6u5IKpH3i1NiQ= -google.golang.org/genproto v0.0.0-20210422153429-2279cbceda62/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b h1:Rt15zyw7G2yfLqmsjEa1xICjWEw+topkn7vEAR6bVPk= +google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4fbeade1cf8..4fb26ca5e56 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:T+FUWTu3APzbXjK+kXH0xGm+CcCBQo6u5IKpH3i1NiQ=", - version = "v0.0.0-20210422153429-2279cbceda62", + sum = "h1:Rt15zyw7G2yfLqmsjEa1xICjWEw+topkn7vEAR6bVPk=", + version = "v0.0.0-20210423144448-3a41ef94ed2b", ) go_repository( name = "org_golang_google_grpc", From 43cbfd2803552bbabc95546840751a82b604bf70 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 26 Apr 2021 20:56:48 +0000 Subject: [PATCH 0910/1518] fix(deps): update google.golang.org/genproto commit hash to eac7f76 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5ce41ac905a..9d3164128a9 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 - google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b + google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index a81f6969591..65d04407971 100644 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b h1:Rt15zyw7G2yfLqmsjEa1xICjWEw+topkn7vEAR6bVPk= -google.golang.org/genproto v0.0.0-20210423144448-3a41ef94ed2b/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 h1:KMgpo2lWy1vfrYjtxPAzR0aNWeAR1UdQykt6sj/hpBY= +google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4fb26ca5e56..c1158053091 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Rt15zyw7G2yfLqmsjEa1xICjWEw+topkn7vEAR6bVPk=", - version = "v0.0.0-20210423144448-3a41ef94ed2b", + sum = "h1:KMgpo2lWy1vfrYjtxPAzR0aNWeAR1UdQykt6sj/hpBY=", + version = "v0.0.0-20210426193834-eac7f76ac494", ) go_repository( name = "org_golang_google_grpc", From 995534df2026cbdf7d7403f1ba03d2dbf8a6581f Mon Sep 17 00:00:00 2001 From: Darragh Bailey Date: Tue, 27 Apr 2021 17:59:58 +0100 Subject: [PATCH 0911/1518] Handle custom status code mappings for routing errors (#2101) * Handle custom status code mappings for routing errors Not all gRPC error codes and http status codes can have a one to one mapping. Http can have both a path and a method component, while gRPC will just have a function that is specific to the combination of method and path when translating between the two. That means that for gRPC a missing function simply means "unimplemented", while for the equivalent REST API it is common to distinguish an unhandled method request on a known resource as "Method Not Allowed" with the response code 405. This may not be the only place where expectations of response codes needed may not align with what is provided by the current mapping chain http.Status* -> gRPC code.Codes -> http.Status*, where some information may be lost in the double conversion. As the error handler accepts an 'error' interface, it should be possible to provide a custom error structure that can contain the http Status code to wrap the original error to allow for the expected response code to be provided without impacting the current function signatures. * update with goimports * Restore DefaultRoutingErrorHandler and tests, and update doc strings Remove the customization from the DefaultRoutingErrorHandler as this is what should be done by consumers, consequently remove the modifications to tests affected. Update doc strings as requested. * Rename StatusHTTP to HTTPStatus * Update names and docstrings * Update customizing your gateway docs * rework example * remove newline --- docs/docs/mapping/customizing_your_gateway.md | 28 +++++++++++++++++++ runtime/errors.go | 25 +++++++++++++++++ runtime/errors_test.go | 10 +++++++ 3 files changed, 63 insertions(+) diff --git a/docs/docs/mapping/customizing_your_gateway.md b/docs/docs/mapping/customizing_your_gateway.md index 4651194e542..2100a0539be 100644 --- a/docs/docs/mapping/customizing_your_gateway.md +++ b/docs/docs/mapping/customizing_your_gateway.md @@ -358,3 +358,31 @@ HTTP statuses and their mappings to gRPC statuses: - HTTP `400 Bad Request` -> gRPC `3 INVALID_ARGUMENT` This method is not used outside of the initial routing. + +### Customizing Routing Errors + +If you want to retain HTTP `405 Method Not Allowed` instead of allowing it to be converted to the equivalent of the gRPC `12 UNIMPLEMENTED`, which is HTTP `501 Not Implmented` you can use the following example: + +```go +func handleRoutingError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, httpStatus int) { + if httpStatus != http.StatusMethodNotAllowed { + runtime.DefaultRoutingErrorHandler(ctx, mux, marshaler, writer, request, httpStatus) + return + } + + // Use HTTPStatusError to customize the DefaultHTTPErrorHandler status code + err := &HTTPStatusError{ + HTTPStatus: httpStatus + Err: status.Error(codes.Unimplemented, http.StatusText(httpStatus)) + } + + runtime.DefaultHTTPErrorHandler(ctx, mux, marshaler, w , r, err) +} +``` + +To use this routing error handler, construct the mux as follows: +```go +mux := runtime.NewServeMux( + runtime.WithRoutingErrorHandler(handleRoutingError), +) +``` diff --git a/runtime/errors.go b/runtime/errors.go index 9f207453395..83902994d89 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -2,6 +2,7 @@ package runtime import ( "context" + "errors" "io" "net/http" "strings" @@ -20,6 +21,17 @@ type StreamErrorHandlerFunc func(context.Context, error) *status.Status // RoutingErrorHandlerFunc is the signature used to configure error handling for routing errors. type RoutingErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, int) +// HTTPStatusError is the error to use when needing to provide a different HTTP status code for an error +// passed to the DefaultRoutingErrorHandler. +type HTTPStatusError struct { + HTTPStatus int + Err error +} + +func (e *HTTPStatusError) Error() string { + return e.Err.Error() +} + // HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. // See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto func HTTPStatusFromCode(code codes.Code) int { @@ -72,6 +84,10 @@ func HTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.R // DefaultHTTPErrorHandler is the default error handler. // If "err" is a gRPC Status, the function replies with the status code mapped by HTTPStatusFromCode. +// If "err" is a HTTPStatusError, the function replies with the status code provide by that struct. This is +// intended to allow passing through of specific statuses via the function set via WithRoutingErrorHandler +// for the ServeMux constructor to handle edge cases which the standard mappings in HTTPStatusFromCode +// are insufficient for. // If otherwise, it replies with http.StatusInternalServerError. // // The response body written by this function is a Status message marshaled by the Marshaler. @@ -79,6 +95,11 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh // return Internal when Marshal failed const fallback = `{"code": 13, "message": "failed to marshal error message"}` + var customStatus *HTTPStatusError + if errors.As(err, &customStatus) { + err = customStatus.Err + } + s := status.Convert(err) pb := s.Proto() @@ -119,6 +140,10 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh } st := HTTPStatusFromCode(s.Code()) + if customStatus != nil { + st = customStatus.HTTPStatus + } + w.WriteHeader(st) if _, err := w.Write(buf); err != nil { grpclog.Infof("Failed to write response: %v", err) diff --git a/runtime/errors_test.go b/runtime/errors_test.go index 02463ee8483..b340343239e 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -60,6 +60,16 @@ func TestDefaultHTTPError(t *testing.T) { contentType: "Custom-Content-Type", msg: "example error", }, + { + err: &runtime.HTTPStatusError{ + HTTPStatus: http.StatusMethodNotAllowed, + Err: status.Error(codes.Unimplemented, http.StatusText(http.StatusMethodNotAllowed)), + }, + status: http.StatusMethodNotAllowed, + marshaler: &runtime.JSONPb{}, + contentType: "application/json", + msg: "Method Not Allowed", + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { w := httptest.NewRecorder() From aa221b917568c3e788946a1f2f3cf52726326ef6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Apr 2021 00:47:20 +0100 Subject: [PATCH 0912/1518] fix(deps): update golang.org/x/oauth2 commit hash to 81ed05c (#2109) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9d3164128a9..677dc123ddf 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 + golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 diff --git a/go.sum b/go.sum index 65d04407971..70355c01b0f 100644 --- a/go.sum +++ b/go.sum @@ -380,8 +380,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ= -golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c h1:SgVl/sCtkicsS7psKkje4H9YtjdEl3xsYh7N+5TDHqY= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index c1158053091..7af5b5f8c0e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ=", - version = "v0.0.0-20210413134643-5e61552d6c78", + sum = "h1:SgVl/sCtkicsS7psKkje4H9YtjdEl3xsYh7N+5TDHqY=", + version = "v0.0.0-20210427180440-81ed05c6b58c", ) go_repository( name = "org_golang_x_sync", From dd671e545af70dfbcfc3e4fc3d6392e28cda99ae Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 27 Apr 2021 19:49:52 -0400 Subject: [PATCH 0913/1518] Update contribution guide image version (#2105) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 092c71f8abc..3a640e086da 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ All submissions, including submissions by project members, require review. It should be as simple as this (run from the root of the repository): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.15 \ +docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.16 \ /bin/bash -c 'cd /src/grpc-gateway && \ make install && \ make clean && \ From 74ecd1deffacf97bcbee90e81c631ef6a3c275f2 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 27 Apr 2021 20:03:55 -0400 Subject: [PATCH 0914/1518] Remove the changelog, simplify releases (#2111) --- .circleci/config.yml | 2 +- CHANGELOG.md | 1987 ------------------------------------------ CONTRIBUTING.md | 15 +- Makefile | 16 - 4 files changed, 5 insertions(+), 2015 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/.circleci/config.yml b/.circleci/config.yml index 431fe7aff1e..a66077dc7cf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -122,7 +122,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.3.0 + - run: gorelease -base=$(git describe --abbrev=0) proto_lint: docker: - image: bufbuild/buf:0.41.0 diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index fe06980b956..00000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1987 +0,0 @@ -# Change Log - -## [v2.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.3.0) (2021-02-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.2.0...v2.3.0) - -**Implemented enhancements:** - -- Support optional annotation in proto3 files in generators [\#1278](https://github.com/grpc-ecosystem/grpc-gateway/issues/1278) - -**Fixed bugs:** - -- grpc-gateway v2 misreads grpc protobuf field\_mask behavior, breaks existing valid behavior [\#1766](https://github.com/grpc-ecosystem/grpc-gateway/issues/1766) - -**Closed issues:** - -- grpc-gateway service run error [\#1996](https://github.com/grpc-ecosystem/grpc-gateway/issues/1996) -- ../proto/api/proto/service.pb.gw.go:129:95: cannot use \*StringMessage value as type protoreflect.ProtoMessage in return argument: \*StringMessage does not implement protoreflect.ProtoMessage \(missing ProtoReflect method\) [\#1989](https://github.com/grpc-ecosystem/grpc-gateway/issues/1989) -- Grpc healthcheck docs are unclear [\#1977](https://github.com/grpc-ecosystem/grpc-gateway/issues/1977) -- Gateway protoc does not generate protoreflect.ProtoMessage messages [\#1959](https://github.com/grpc-ecosystem/grpc-gateway/issues/1959) -- \[bazel\] Got "missing strict dependencies" when use protoc-gen-grpc-gateway as bazel-gazelle grpc compiler [\#1941](https://github.com/grpc-ecosystem/grpc-gateway/issues/1941) -- Non official implementation [\#1940](https://github.com/grpc-ecosystem/grpc-gateway/issues/1940) -- Empty fields included in response. [\#1871](https://github.com/grpc-ecosystem/grpc-gateway/issues/1871) - -**Merged pull requests:** - -- fix\(deps\): update module google.golang.org/grpc to v1.36.0 \(master\) [\#1999](https://github.com/grpc-ecosystem/grpc-gateway/pull/1999) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to 063164c \(master\) [\#1998](https://github.com/grpc-ecosystem/grpc-gateway/pull/1998) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update dependency com\_google\_protobuf to v3.15.2 \(master\) [\#1995](https://github.com/grpc-ecosystem/grpc-gateway/pull/1995) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update bufbuild/buf docker tag to v0.37.1 \(master\) [\#1994](https://github.com/grpc-ecosystem/grpc-gateway/pull/1994) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to 22b48be \(master\) [\#1993](https://github.com/grpc-ecosystem/grpc-gateway/pull/1993) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to 3e1e516 \(master\) [\#1991](https://github.com/grpc-ecosystem/grpc-gateway/pull/1991) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to aa3ee6e \(master\) [\#1990](https://github.com/grpc-ecosystem/grpc-gateway/pull/1990) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update dependency com\_google\_protobuf to v3.15.1 \(master\) [\#1987](https://github.com/grpc-ecosystem/grpc-gateway/pull/1987) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update golang.org/x/oauth2 commit hash to 9bb9049 \(master\) [\#1986](https://github.com/grpc-ecosystem/grpc-gateway/pull/1986) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to d891e3c \(master\) [\#1985](https://github.com/grpc-ecosystem/grpc-gateway/pull/1985) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update dependency com\_google\_protobuf to v3.15.0 \(master\) [\#1984](https://github.com/grpc-ecosystem/grpc-gateway/pull/1984) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update golang.org/x/oauth2 commit hash to ba52d33 \(master\) [\#1983](https://github.com/grpc-ecosystem/grpc-gateway/pull/1983) ([renovate[bot]](https://github.com/apps/renovate)) -- fix\(deps\): update google.golang.org/genproto commit hash to fe80b38 \(master\) [\#1982](https://github.com/grpc-ecosystem/grpc-gateway/pull/1982) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update google.golang.org/genproto commit hash to c185827 \(master\) [\#1979](https://github.com/grpc-ecosystem/grpc-gateway/pull/1979) ([renovate[bot]](https://github.com/apps/renovate)) -- Use base64.URLEncoding for \[\]byte parameters in query [\#1978](https://github.com/grpc-ecosystem/grpc-gateway/pull/1978) ([tvoll](https://github.com/tvoll)) -- chore\(deps\): update golang docker tag to v1.16.0 \(master\) [\#1976](https://github.com/grpc-ecosystem/grpc-gateway/pull/1976) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update golang.org/x/oauth2 commit hash to 16ff188 \(master\) [\#1974](https://github.com/grpc-ecosystem/grpc-gateway/pull/1974) ([renovate[bot]](https://github.com/apps/renovate)) -- adding UnimplementedGreeterServer to server struct [\#1973](https://github.com/grpc-ecosystem/grpc-gateway/pull/1973) ([nwandabridges](https://github.com/nwandabridges)) -- \[Bazel\] Update protobuf, rules\_go and gazelle [\#1972](https://github.com/grpc-ecosystem/grpc-gateway/pull/1972) ([aaliddell](https://github.com/aaliddell)) -- Migrate generation, linting to buf [\#1971](https://github.com/grpc-ecosystem/grpc-gateway/pull/1971) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- chore\(deps\): update google.golang.org/genproto commit hash to e7f2df4 \(master\) [\#1970](https://github.com/grpc-ecosystem/grpc-gateway/pull/1970) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update google.golang.org/genproto commit hash to 4ccc9a5 \(master\) [\#1969](https://github.com/grpc-ecosystem/grpc-gateway/pull/1969) ([renovate[bot]](https://github.com/apps/renovate)) -- Bump nokogiri from 1.10.10 to 1.11.1 in /docs [\#1967](https://github.com/grpc-ecosystem/grpc-gateway/pull/1967) ([dependabot[bot]](https://github.com/apps/dependabot)) -- docs/Gemfile.lock: Fix dependabot security warning [\#1966](https://github.com/grpc-ecosystem/grpc-gateway/pull/1966) ([ivucica](https://github.com/ivucica)) -- chore\(deps\): update google.golang.org/genproto commit hash to 3a9a48d \(master\) [\#1965](https://github.com/grpc-ecosystem/grpc-gateway/pull/1965) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update golang.org/x/oauth2 commit hash to 6667018 \(master\) [\#1964](https://github.com/grpc-ecosystem/grpc-gateway/pull/1964) ([renovate[bot]](https://github.com/apps/renovate)) -- Update CONTRIBUTING.md on release description [\#1960](https://github.com/grpc-ecosystem/grpc-gateway/pull/1960) ([adambabik](https://github.com/adambabik)) -- gen-grpc-gateway, gen-openapiv2: add support for proto3 optional [\#1951](https://github.com/grpc-ecosystem/grpc-gateway/pull/1951) ([adambabik](https://github.com/adambabik)) -- FAQ Adding related projects to the documentation [\#1946](https://github.com/grpc-ecosystem/grpc-gateway/pull/1946) ([rodoufu](https://github.com/rodoufu)) - -## [v2.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.2.0) (2021-02-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.1.0...v2.2.0) - -**Fixed bugs:** - -- \[protoc-gen-openapiv2\] \[BUG\] Incorrect handling of non-wildcard google.api.http.body when using field\_behaviour annotation [\#1937](https://github.com/grpc-ecosystem/grpc-gateway/issues/1937) -- Duplicate tags seen in Swagger Specification [\#1913](https://github.com/grpc-ecosystem/grpc-gateway/issues/1913) -- Poor error message when using message in path parameter [\#1863](https://github.com/grpc-ecosystem/grpc-gateway/issues/1863) - -**Closed issues:** - -- can we add HTTPStatusFromCode to mux? [\#1954](https://github.com/grpc-ecosystem/grpc-gateway/issues/1954) -- Missing types in generated gw.go file for C++ server [\#1942](https://github.com/grpc-ecosystem/grpc-gateway/issues/1942) -- What is the recommend way to bind 3rd party APIs \(e.g. Health/Check to /healthzf [\#1931](https://github.com/grpc-ecosystem/grpc-gateway/issues/1931) -- Patch request with field\_masks [\#1930](https://github.com/grpc-ecosystem/grpc-gateway/issues/1930) -- Working from the helloworld example but getting an error on HTTP requests: grpc: the client connection is closing. Would like to improve the docs. [\#1924](https://github.com/grpc-ecosystem/grpc-gateway/issues/1924) -- Action Required: Fix Renovate Configuration [\#1918](https://github.com/grpc-ecosystem/grpc-gateway/issues/1918) -- F [\#1917](https://github.com/grpc-ecosystem/grpc-gateway/issues/1917) -- Is any method to access the raw request body in metadata? [\#1908](https://github.com/grpc-ecosystem/grpc-gateway/issues/1908) -- Custom incoming header matcher isn't working as expected [\#1902](https://github.com/grpc-ecosystem/grpc-gateway/issues/1902) -- README.md links to https://pkg.go.dev/github.com/golang/protobuf/jsonpb which does not exist [\#1901](https://github.com/grpc-ecosystem/grpc-gateway/issues/1901) -- Is it possible to setup CORS? [\#1889](https://github.com/grpc-ecosystem/grpc-gateway/issues/1889) - -**Merged pull requests:** - -- Add documenation for standalone gateway generation [\#1955](https://github.com/grpc-ecosystem/grpc-gateway/pull/1955) ([dgparker](https://github.com/dgparker)) -- Update google.golang.org/genproto commit hash to bba0dbe \(master\) [\#1953](https://github.com/grpc-ecosystem/grpc-gateway/pull/1953) ([renovate[bot]](https://github.com/apps/renovate)) -- Make fieldmask parser output deterministic [\#1950](https://github.com/grpc-ecosystem/grpc-gateway/pull/1950) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update golang Docker tag to v1.15.8 \(master\) [\#1949](https://github.com/grpc-ecosystem/grpc-gateway/pull/1949) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix verb parsing [\#1947](https://github.com/grpc-ecosystem/grpc-gateway/pull/1947) ([jefferai](https://github.com/jefferai)) -- Update google.golang.org/genproto commit hash to deb8283 \(master\) [\#1945](https://github.com/grpc-ecosystem/grpc-gateway/pull/1945) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix malformed Schema Reference during field\_behavior generation [\#1944](https://github.com/grpc-ecosystem/grpc-gateway/pull/1944) ([gganley](https://github.com/gganley)) -- Update dependency com\_github\_bazelbuild\_buildtools to v4 \(master\) [\#1939](https://github.com/grpc-ecosystem/grpc-gateway/pull/1939) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 3206188 \(master\) [\#1936](https://github.com/grpc-ecosystem/grpc-gateway/pull/1936) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 646a494 \(master\) [\#1934](https://github.com/grpc-ecosystem/grpc-gateway/pull/1934) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 0101308 \(master\) [\#1933](https://github.com/grpc-ecosystem/grpc-gateway/pull/1933) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 94839c0 \(master\) [\#1932](https://github.com/grpc-ecosystem/grpc-gateway/pull/1932) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to f9ce19e \(master\) [\#1928](https://github.com/grpc-ecosystem/grpc-gateway/pull/1928) ([renovate[bot]](https://github.com/apps/renovate)) -- Update rules\_proto commit hash to a0761ed \(master\) [\#1927](https://github.com/grpc-ecosystem/grpc-gateway/pull/1927) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 44e461b \(master\) [\#1926](https://github.com/grpc-ecosystem/grpc-gateway/pull/1926) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to f46fe6c \(master\) [\#1923](https://github.com/grpc-ecosystem/grpc-gateway/pull/1923) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to af13f52 \(master\) [\#1922](https://github.com/grpc-ecosystem/grpc-gateway/pull/1922) ([renovate[bot]](https://github.com/apps/renovate)) -- Multiple repeated fields are allowed [\#1921](https://github.com/grpc-ecosystem/grpc-gateway/pull/1921) ([topherCantrell](https://github.com/topherCantrell)) -- Update google.golang.org/genproto commit hash to 8081c04 \(master\) [\#1920](https://github.com/grpc-ecosystem/grpc-gateway/pull/1920) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to fc48d45 \(master\) [\#1919](https://github.com/grpc-ecosystem/grpc-gateway/pull/1919) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to f5e8c5e \(master\) [\#1915](https://github.com/grpc-ecosystem/grpc-gateway/pull/1915) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang Docker tag to v1.15.7 \(master\) [\#1912](https://github.com/grpc-ecosystem/grpc-gateway/pull/1912) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to e258113 \(master\) [\#1910](https://github.com/grpc-ecosystem/grpc-gateway/pull/1910) ([renovate[bot]](https://github.com/apps/renovate)) -- Update docs for bug fix and expanding HTTP status codes in Customizing your gateway [\#1907](https://github.com/grpc-ecosystem/grpc-gateway/pull/1907) ([bconway](https://github.com/bconway)) -- Update rules\_proto commit hash to cfdc2fa \(master\) [\#1906](https://github.com/grpc-ecosystem/grpc-gateway/pull/1906) ([renovate[bot]](https://github.com/apps/renovate)) -- Remove jsonpb reference [\#1904](https://github.com/grpc-ecosystem/grpc-gateway/pull/1904) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update google.golang.org/genproto commit hash to 6edceaf \(master\) [\#1903](https://github.com/grpc-ecosystem/grpc-gateway/pull/1903) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.35.0 \(master\) [\#1899](https://github.com/grpc-ecosystem/grpc-gateway/pull/1899) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to d3ed898 \(master\) [\#1898](https://github.com/grpc-ecosystem/grpc-gateway/pull/1898) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to ae06605 \(master\) [\#1897](https://github.com/grpc-ecosystem/grpc-gateway/pull/1897) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 8b1d76f \(master\) [\#1896](https://github.com/grpc-ecosystem/grpc-gateway/pull/1896) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 01de73c \(master\) [\#1895](https://github.com/grpc-ecosystem/grpc-gateway/pull/1895) ([renovate[bot]](https://github.com/apps/renovate)) -- Reworked Error message in newParam\(\) in services.go [\#1894](https://github.com/grpc-ecosystem/grpc-gateway/pull/1894) ([gunadhya](https://github.com/gunadhya)) -- Update google.golang.org/genproto commit hash to 22ae2b1 \(master\) [\#1893](https://github.com/grpc-ecosystem/grpc-gateway/pull/1893) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.34.1 \(master\) [\#1891](https://github.com/grpc-ecosystem/grpc-gateway/pull/1891) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to c7d5778 \(master\) [\#1890](https://github.com/grpc-ecosystem/grpc-gateway/pull/1890) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to ffc7fda \(master\) [\#1888](https://github.com/grpc-ecosystem/grpc-gateway/pull/1888) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v2.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.1.0) (2021-01-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.16.0...v2.1.0) - -**Implemented enhancements:** - -- protoc-gen-grpc-gateway: can't generate gateway stubs for multiple packages in one go [\#1612](https://github.com/grpc-ecosystem/grpc-gateway/issues/1612) -- Addition of Prettier GitHub action to prettified the markdown files [\#1575](https://github.com/grpc-ecosystem/grpc-gateway/issues/1575) - -**Fixed bugs:** - -- The "Use go templates" page is missing its actual go templates [\#1773](https://github.com/grpc-ecosystem/grpc-gateway/issues/1773) -- FieldMask Generation causes a 400 when a google.protobuf.Struct field has populated values [\#1570](https://github.com/grpc-ecosystem/grpc-gateway/issues/1570) -- Support openapiv2\_tag option in swagger generator [\#690](https://github.com/grpc-ecosystem/grpc-gateway/issues/690) - -**Closed issues:** - -- Ignore some fields in HTTP Response and OpenAPI [\#1886](https://github.com/grpc-ecosystem/grpc-gateway/issues/1886) -- Using runtime.WithMarshalerOption\(\) breaks swagger docs [\#1882](https://github.com/grpc-ecosystem/grpc-gateway/issues/1882) -- Data is Getting Encoded while returning response as HTML [\#1880](https://github.com/grpc-ecosystem/grpc-gateway/issues/1880) -- jsonPB is not supporting in grpc gateway v2 migration [\#1878](https://github.com/grpc-ecosystem/grpc-gateway/issues/1878) -- Move generator and descriptor packages into the public API [\#1877](https://github.com/grpc-ecosystem/grpc-gateway/issues/1877) -- Add -module flag to protoc-gen-openapiv2 plugin [\#1876](https://github.com/grpc-ecosystem/grpc-gateway/issues/1876) -- Load Balancing with multiple instances of a grpc-server. [\#1875](https://github.com/grpc-ecosystem/grpc-gateway/issues/1875) -- Building with Bazel not compatible when using Gazelle and disable\_global [\#1847](https://github.com/grpc-ecosystem/grpc-gateway/issues/1847) -- Unexpected response on /v2/example/errorwithdetails [\#1842](https://github.com/grpc-ecosystem/grpc-gateway/issues/1842) -- openapi\_configuration option in protoc\_gen\_openapiv2 Bazel rule fails. [\#1838](https://github.com/grpc-ecosystem/grpc-gateway/issues/1838) -- Link to v2 migration guide broken [\#1836](https://github.com/grpc-ecosystem/grpc-gateway/issues/1836) -- add header in http.Handler,but not take effect [\#1835](https://github.com/grpc-ecosystem/grpc-gateway/issues/1835) -- `protoc-gen-openapiv2 ` rule should expose all of the relevant flags available [\#1831](https://github.com/grpc-ecosystem/grpc-gateway/issues/1831) -- if there a flag set the metadata first letter not change to uppower [\#1830](https://github.com/grpc-ecosystem/grpc-gateway/issues/1830) -- Clarification about return Access-Control-Allow-Origin header [\#1827](https://github.com/grpc-ecosystem/grpc-gateway/issues/1827) -- `generate\_unbound\_methods` option and FieldMask fields don't work together. [\#1816](https://github.com/grpc-ecosystem/grpc-gateway/issues/1816) -- openapiv2: panic when SecurityRequirement is missing a value [\#1811](https://github.com/grpc-ecosystem/grpc-gateway/issues/1811) -- Cannot resolve import 'google/api/http.proto' [\#1809](https://github.com/grpc-ecosystem/grpc-gateway/issues/1809) -- add version information at compile-time [\#1803](https://github.com/grpc-ecosystem/grpc-gateway/issues/1803) -- šŸš€ `protoc\_gen\_openapiv2` should allow to pass `generate\_unbound\_methods` option [\#1792](https://github.com/grpc-ecosystem/grpc-gateway/issues/1792) -- Can't generate python client [\#1785](https://github.com/grpc-ecosystem/grpc-gateway/issues/1785) -- Issue with converting to the bytes data type [\#1781](https://github.com/grpc-ecosystem/grpc-gateway/issues/1781) -- Possible way to access request header key,value [\#1780](https://github.com/grpc-ecosystem/grpc-gateway/issues/1780) -- Run demo failed! [\#1777](https://github.com/grpc-ecosystem/grpc-gateway/issues/1777) -- protoc-gen-swagger: Implement Response Header\(s\) object, Implement Field Enum,Example&Format attributes [\#1729](https://github.com/grpc-ecosystem/grpc-gateway/issues/1729) - -**Merged pull requests:** - -- Generate changelog for v2.1.0 [\#1887](https://github.com/grpc-ecosystem/grpc-gateway/pull/1887) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update google.golang.org/genproto commit hash to 07624b5 \(master\) [\#1885](https://github.com/grpc-ecosystem/grpc-gateway/pull/1885) ([renovate[bot]](https://github.com/apps/renovate)) -- Add a \#\# Docs section to highlight the docs URL [\#1884](https://github.com/grpc-ecosystem/grpc-gateway/pull/1884) ([VinGarcia](https://github.com/VinGarcia)) -- Fix broken 'Field Mask' documentation link [\#1883](https://github.com/grpc-ecosystem/grpc-gateway/pull/1883) ([adolfo](https://github.com/adolfo)) -- Update google.golang.org/genproto commit hash to 8c77b98 \(master\) [\#1874](https://github.com/grpc-ecosystem/grpc-gateway/pull/1874) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix link to "gRPC API configuration" in README [\#1873](https://github.com/grpc-ecosystem/grpc-gateway/pull/1873) ([alpire](https://github.com/alpire)) -- Update google.golang.org/genproto commit hash to 40ec1c2 \(master\) [\#1872](https://github.com/grpc-ecosystem/grpc-gateway/pull/1872) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to e3217be \(master\) [\#1870](https://github.com/grpc-ecosystem/grpc-gateway/pull/1870) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to f927205 \(master\) [\#1869](https://github.com/grpc-ecosystem/grpc-gateway/pull/1869) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 08078c5 \(master\) [\#1867](https://github.com/grpc-ecosystem/grpc-gateway/pull/1867) ([renovate[bot]](https://github.com/apps/renovate)) -- protoc-gen-openapiv2: Add openapiv2\_tag support [\#1866](https://github.com/grpc-ecosystem/grpc-gateway/pull/1866) ([rcgoodfellow](https://github.com/rcgoodfellow)) -- Update golang.org/x/oauth2 commit hash to 9317641 \(master\) [\#1864](https://github.com/grpc-ecosystem/grpc-gateway/pull/1864) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 9ee31aa \(master\) [\#1862](https://github.com/grpc-ecosystem/grpc-gateway/pull/1862) ([renovate[bot]](https://github.com/apps/renovate)) -- Update Season of Docs page [\#1861](https://github.com/grpc-ecosystem/grpc-gateway/pull/1861) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Refactored the documentation files of gRPC-Gateway [\#1860](https://github.com/grpc-ecosystem/grpc-gateway/pull/1860) ([iamrajiv](https://github.com/iamrajiv)) -- Update google.golang.org/genproto commit hash to 06b3db8 \(master\) [\#1858](https://github.com/grpc-ecosystem/grpc-gateway/pull/1858) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang Docker tag to v1.15.6 \(master\) [\#1857](https://github.com/grpc-ecosystem/grpc-gateway/pull/1857) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 6486ece \(master\) [\#1854](https://github.com/grpc-ecosystem/grpc-gateway/pull/1854) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 0b49973 \(master\) [\#1853](https://github.com/grpc-ecosystem/grpc-gateway/pull/1853) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.34.0 \(master\) [\#1852](https://github.com/grpc-ecosystem/grpc-gateway/pull/1852) ([renovate[bot]](https://github.com/apps/renovate)) -- \[GSoD\] Refactored the documentation files of gRPC-Gateway [\#1851](https://github.com/grpc-ecosystem/grpc-gateway/pull/1851) ([iamrajiv](https://github.com/iamrajiv)) -- Update google.golang.org/genproto commit hash to 55d61f9 \(master\) [\#1850](https://github.com/grpc-ecosystem/grpc-gateway/pull/1850) ([renovate[bot]](https://github.com/apps/renovate)) -- Update rules\_proto commit hash to 84ba6ec \(master\) [\#1849](https://github.com/grpc-ecosystem/grpc-gateway/pull/1849) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to b05cb90 \(master\) [\#1846](https://github.com/grpc-ecosystem/grpc-gateway/pull/1846) ([renovate[bot]](https://github.com/apps/renovate)) -- \[GSoD\] Added new architecture introduction diagram for gRPC-Gateway [\#1845](https://github.com/grpc-ecosystem/grpc-gateway/pull/1845) ([iamrajiv](https://github.com/iamrajiv)) -- \[GSoD\] Added more faq for gRPC-Gateway [\#1844](https://github.com/grpc-ecosystem/grpc-gateway/pull/1844) ([iamrajiv](https://github.com/iamrajiv)) -- Fix broken example [\#1843](https://github.com/grpc-ecosystem/grpc-gateway/pull/1843) ([isbang](https://github.com/isbang)) -- Feature/implement response headers v2 [\#1841](https://github.com/grpc-ecosystem/grpc-gateway/pull/1841) ([elijah-roberts](https://github.com/elijah-roberts)) -- Update module google/go-cmp to v0.5.4 \(master\) [\#1840](https://github.com/grpc-ecosystem/grpc-gateway/pull/1840) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix some broken docs links [\#1839](https://github.com/grpc-ecosystem/grpc-gateway/pull/1839) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Sets proper context property for openapi\_configuration option [\#1837](https://github.com/grpc-ecosystem/grpc-gateway/pull/1837) ([zoido](https://github.com/zoido)) -- Adjust protoc-gen-openapiv2/main.go flags docs as suggested during \#1832 review [\#1833](https://github.com/grpc-ecosystem/grpc-gateway/pull/1833) ([zoido](https://github.com/zoido)) -- Rest protoc-gen-openapiv2 flags as rule attrs [\#1832](https://github.com/grpc-ecosystem/grpc-gateway/pull/1832) ([zoido](https://github.com/zoido)) -- \[GSoD\] Added tutorials directory on gRPC-Gateway [\#1829](https://github.com/grpc-ecosystem/grpc-gateway/pull/1829) ([iamrajiv](https://github.com/iamrajiv)) -- Update google.golang.org/genproto commit hash to 9b1e624 \(master\) [\#1828](https://github.com/grpc-ecosystem/grpc-gateway/pull/1828) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 62d171c \(master\) [\#1825](https://github.com/grpc-ecosystem/grpc-gateway/pull/1825) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 79184cf \(master\) [\#1824](https://github.com/grpc-ecosystem/grpc-gateway/pull/1824) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to bf037d7 \(master\) [\#1823](https://github.com/grpc-ecosystem/grpc-gateway/pull/1823) ([renovate[bot]](https://github.com/apps/renovate)) -- reorganize docs; add page for customizing gateway output [\#1822](https://github.com/grpc-ecosystem/grpc-gateway/pull/1822) ([ewhauser](https://github.com/ewhauser)) -- Change FieldMask OpenAPI type to string. [\#1820](https://github.com/grpc-ecosystem/grpc-gateway/pull/1820) ([zoido](https://github.com/zoido)) -- Update google.golang.org/genproto commit hash to ce600e9 \(master\) [\#1819](https://github.com/grpc-ecosystem/grpc-gateway/pull/1819) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix openapiv2 panic [\#1818](https://github.com/grpc-ecosystem/grpc-gateway/pull/1818) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add ci linter [\#1817](https://github.com/grpc-ecosystem/grpc-gateway/pull/1817) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update golang Docker tag to v1.15.5 \(master\) [\#1814](https://github.com/grpc-ecosystem/grpc-gateway/pull/1814) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google/go-cmp to v0.5.3 \(master\) [\#1812](https://github.com/grpc-ecosystem/grpc-gateway/pull/1812) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 2985b7a \(master\) [\#1810](https://github.com/grpc-ecosystem/grpc-gateway/pull/1810) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to ac7456d \(master\) [\#1808](https://github.com/grpc-ecosystem/grpc-gateway/pull/1808) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 8816d57 \(master\) [\#1807](https://github.com/grpc-ecosystem/grpc-gateway/pull/1807) ([renovate[bot]](https://github.com/apps/renovate)) -- add support for field\_behavior options on swagger plugin [\#1806](https://github.com/grpc-ecosystem/grpc-gateway/pull/1806) ([ewhauser](https://github.com/ewhauser)) -- Update google.golang.org/genproto commit hash to 2640f1f \(master\) [\#1805](https://github.com/grpc-ecosystem/grpc-gateway/pull/1805) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang.org/x/oauth2 commit hash to 9fd6049 \(master\) [\#1804](https://github.com/grpc-ecosystem/grpc-gateway/pull/1804) ([renovate[bot]](https://github.com/apps/renovate)) -- Disable gRPC updates on v1 [\#1802](https://github.com/grpc-ecosystem/grpc-gateway/pull/1802) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update module google.golang.org/grpc to v1.33.2 \(master\) [\#1800](https://github.com/grpc-ecosystem/grpc-gateway/pull/1800) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang Docker tag to v1.15.4 \(master\) [\#1799](https://github.com/grpc-ecosystem/grpc-gateway/pull/1799) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to f9bfe23 \(master\) [\#1796](https://github.com/grpc-ecosystem/grpc-gateway/pull/1796) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix typo in flag name for Bazel [\#1795](https://github.com/grpc-ecosystem/grpc-gateway/pull/1795) ([achew22](https://github.com/achew22)) -- Update google.golang.org/genproto commit hash to 9d023cd \(master\) [\#1794](https://github.com/grpc-ecosystem/grpc-gateway/pull/1794) ([renovate[bot]](https://github.com/apps/renovate)) -- Exposes `generate\_unbound\_methods` as `protoc\_gen\_openapiv2` rule attr [\#1793](https://github.com/grpc-ecosystem/grpc-gateway/pull/1793) ([zoido](https://github.com/zoido)) -- Update google.golang.org/genproto commit hash to 2e45c02 \(master\) [\#1789](https://github.com/grpc-ecosystem/grpc-gateway/pull/1789) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 415bd0c \(master\) [\#1788](https://github.com/grpc-ecosystem/grpc-gateway/pull/1788) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 715cce7 \(master\) [\#1787](https://github.com/grpc-ecosystem/grpc-gateway/pull/1787) ([renovate[bot]](https://github.com/apps/renovate)) -- \[GSoD\] Added new documentation website for gRPC-Gateway [\#1786](https://github.com/grpc-ecosystem/grpc-gateway/pull/1786) ([iamrajiv](https://github.com/iamrajiv)) -- Update google.golang.org/genproto commit hash to 24207fd \(master\) [\#1784](https://github.com/grpc-ecosystem/grpc-gateway/pull/1784) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 8ce4113 \(master\) [\#1782](https://github.com/grpc-ecosystem/grpc-gateway/pull/1782) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to c77dae4 \(master\) [\#1778](https://github.com/grpc-ecosystem/grpc-gateway/pull/1778) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v1.16.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.16.0) (2020-10-28) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.15.1...v1.16.0) - -**Merged pull requests:** - -- Update dependency io\_bazel\_rules\_go to v0.24.5 \(master\) [\#1775](https://github.com/grpc-ecosystem/grpc-gateway/pull/1775) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to d4b8fe4 \(master\) [\#1774](https://github.com/grpc-ecosystem/grpc-gateway/pull/1774) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 0ff5f38 \(master\) [\#1772](https://github.com/grpc-ecosystem/grpc-gateway/pull/1772) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 0d71844 \(master\) [\#1771](https://github.com/grpc-ecosystem/grpc-gateway/pull/1771) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v2.0.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.1) (2020-10-21) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0...v2.0.1) - -**Closed issues:** - -- why was swagger removed [\#1765](https://github.com/grpc-ecosystem/grpc-gateway/issues/1765) -- Option -module does not work anymore for protoc-gen-grpc-gateway v2 [\#1753](https://github.com/grpc-ecosystem/grpc-gateway/issues/1753) -- grpc-gateway\_out Cannot set flag [\#1751](https://github.com/grpc-ecosystem/grpc-gateway/issues/1751) - -**Merged pull requests:** - -- Generate changelog for v2.0.1 [\#1770](https://github.com/grpc-ecosystem/grpc-gateway/pull/1770) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update module google.golang.org/grpc to v1.33.1 \(master\) [\#1768](https://github.com/grpc-ecosystem/grpc-gateway/pull/1768) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 1ed22bb \(master\) [\#1764](https://github.com/grpc-ecosystem/grpc-gateway/pull/1764) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency io\_bazel\_rules\_go to v0.24.4 \(master\) [\#1762](https://github.com/grpc-ecosystem/grpc-gateway/pull/1762) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 32ed001 \(master\) [\#1761](https://github.com/grpc-ecosystem/grpc-gateway/pull/1761) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module golang/protobuf to v1.4.3 \(master\) [\#1760](https://github.com/grpc-ecosystem/grpc-gateway/pull/1760) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang Docker tag to v1.15.3 \(master\) [\#1759](https://github.com/grpc-ecosystem/grpc-gateway/pull/1759) ([renovate[bot]](https://github.com/apps/renovate)) -- fix import alias issue with protoc-gen-grpc-gateway [\#1757](https://github.com/grpc-ecosystem/grpc-gateway/pull/1757) ([danielhochman](https://github.com/danielhochman)) -- Refactor registry and generator to use protogen [\#1756](https://github.com/grpc-ecosystem/grpc-gateway/pull/1756) ([adambabik](https://github.com/adambabik)) -- Adapt usage instructions to use protoc-gen-go-grpc [\#1755](https://github.com/grpc-ecosystem/grpc-gateway/pull/1755) ([olivierlemasle](https://github.com/olivierlemasle)) -- Fix -module option for protoc-gen-grpc-gateway [\#1754](https://github.com/grpc-ecosystem/grpc-gateway/pull/1754) ([olivierlemasle](https://github.com/olivierlemasle)) -- fix empty parameter fatal in protoc-gen-grpc-gateway [\#1752](https://github.com/grpc-ecosystem/grpc-gateway/pull/1752) ([danielhochman](https://github.com/danielhochman)) -- Update google.golang.org/genproto commit hash to 03b6142 \(master\) [\#1750](https://github.com/grpc-ecosystem/grpc-gateway/pull/1750) ([renovate[bot]](https://github.com/apps/renovate)) -- Update Readme + remove duplicated paragraph [\#1749](https://github.com/grpc-ecosystem/grpc-gateway/pull/1749) ([olivierlemasle](https://github.com/olivierlemasle)) -- Update gorelease base for master [\#1747](https://github.com/grpc-ecosystem/grpc-gateway/pull/1747) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update google.golang.org/genproto commit hash to 7f9ee70 \(master\) [\#1745](https://github.com/grpc-ecosystem/grpc-gateway/pull/1745) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v2.0.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0) (2020-10-14) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.15.1...v2.0.0) - -**Closed issues:** - -- protoc-gen-swagger: support a header parameter [\#1737](https://github.com/grpc-ecosystem/grpc-gateway/issues/1737) -- Cannot unmarshal list [\#1736](https://github.com/grpc-ecosystem/grpc-gateway/issues/1736) -- https://github.com/grpc-ecosystem/grpc-gateway/issues/1723 [\#1724](https://github.com/grpc-ecosystem/grpc-gateway/issues/1724) -- too many arguments in call to runtime.NewPattern and undefined: runtime.AssumeColonVerbOpt [\#1723](https://github.com/grpc-ecosystem/grpc-gateway/issues/1723) -- v2 release planning [\#1223](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) - -**Merged pull requests:** - -- Generate changelog for v2.0.0 [\#1744](https://github.com/grpc-ecosystem/grpc-gateway/pull/1744) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Disable renovate automerge while master is frozen [\#1739](https://github.com/grpc-ecosystem/grpc-gateway/pull/1739) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Merge v2 into master [\#1731](https://github.com/grpc-ecosystem/grpc-gateway/pull/1731) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.15.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.15.1) (2020-10-02) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.15.2...v1.15.1) - -## [v1.15.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.15.2) (2020-10-02) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.5...v1.15.2) - -**Closed issues:** - -- Error when trying to call endpoint with empty parameter of Enum array [\#1711](https://github.com/grpc-ecosystem/grpc-gateway/issues/1711) -- Add option to remove \(or remove\) package comment in generated .pb.gw.go files [\#1701](https://github.com/grpc-ecosystem/grpc-gateway/issues/1701) -- Can't import googleapis [\#1698](https://github.com/grpc-ecosystem/grpc-gateway/issues/1698) - -**Merged pull requests:** - -- Update dependency bazel\_gazelle to v0.22.2 \(master\) [\#1717](https://github.com/grpc-ecosystem/grpc-gateway/pull/1717) ([renovate[bot]](https://github.com/apps/renovate)) -- Add Slack badge, remove fuzzit badge \(\#1712\) [\#1713](https://github.com/grpc-ecosystem/grpc-gateway/pull/1713) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add --omit\_package\_doc flag [\#1702](https://github.com/grpc-ecosystem/grpc-gateway/pull/1702) ([olivierlemasle](https://github.com/olivierlemasle)) -- Install "patch" command in CircleCI build-env image [\#1699](https://github.com/grpc-ecosystem/grpc-gateway/pull/1699) ([jasonewang](https://github.com/jasonewang)) - -## [v2.0.0-beta.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.5) (2020-09-24) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.15.0...v2.0.0-beta.5) - -**Closed issues:** - -- Sending NULL for int64/uint64 types calls gRPC server with zero-value [\#1681](https://github.com/grpc-ecosystem/grpc-gateway/issues/1681) -- protoc-gen-swagger: allow `-output` dir [\#1679](https://github.com/grpc-ecosystem/grpc-gateway/issues/1679) - -**Merged pull requests:** - -- Add devcontainer.json \(master\) \(\#1687\) [\#1691](https://github.com/grpc-ecosystem/grpc-gateway/pull/1691) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update dependency com\_github\_bazelbuild\_buildtools to v3.5.0 \(master\) [\#1689](https://github.com/grpc-ecosystem/grpc-gateway/pull/1689) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency bazel\_gazelle to v0.22.1 \(master\) [\#1325](https://github.com/grpc-ecosystem/grpc-gateway/pull/1325) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v1.15.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.15.0) (2020-09-18) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.8...v1.15.0) - -**Implemented enhancements:** - -- YAML support for Swagger annotations [\#701](https://github.com/grpc-ecosystem/grpc-gateway/issues/701) - -**Closed issues:** - -- Empty json array is passed as nil [\#1673](https://github.com/grpc-ecosystem/grpc-gateway/issues/1673) -- Lightweight support for custom protobuf annotations on RPCs [\#1666](https://github.com/grpc-ecosystem/grpc-gateway/issues/1666) -- undefined: runtime.ServerTransportStream [\#1664](https://github.com/grpc-ecosystem/grpc-gateway/issues/1664) -- Merge swagger definitions generated by swaggo/swag init and protoc --swagger\_out command [\#1651](https://github.com/grpc-ecosystem/grpc-gateway/issues/1651) -- Add base\_path as constant in generated gateway files [\#1650](https://github.com/grpc-ecosystem/grpc-gateway/issues/1650) -- Support service definitions without any annotations. [\#1649](https://github.com/grpc-ecosystem/grpc-gateway/issues/1649) -- proto directory names preclude using protos in python code [\#1647](https://github.com/grpc-ecosystem/grpc-gateway/issues/1647) - -**Merged pull requests:** - -- Regenerate files [\#1676](https://github.com/grpc-ecosystem/grpc-gateway/pull/1676) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Generate changelog for 1.15.0 [\#1675](https://github.com/grpc-ecosystem/grpc-gateway/pull/1675) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- End default response desc with period [\#1663](https://github.com/grpc-ecosystem/grpc-gateway/pull/1663) ([rubda](https://github.com/rubda)) -- Update golang Docker tag to v1.15.2 \(master\) [\#1657](https://github.com/grpc-ecosystem/grpc-gateway/pull/1657) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.32.0 \(master\) [\#1653](https://github.com/grpc-ecosystem/grpc-gateway/pull/1653) ([renovate[bot]](https://github.com/apps/renovate)) -- Generate unbound methods [\#1652](https://github.com/grpc-ecosystem/grpc-gateway/pull/1652) ([plaflamme](https://github.com/plaflamme)) -- Deprecate example field [\#1637](https://github.com/grpc-ecosystem/grpc-gateway/pull/1637) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.14.8](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.8) (2020-09-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.7...v1.14.8) - -**Closed issues:** - -- Generated files contain calls to methods that don't exist [\#1643](https://github.com/grpc-ecosystem/grpc-gateway/issues/1643) -- TestConvertDuration/invalid\_duration failure [\#1630](https://github.com/grpc-ecosystem/grpc-gateway/issues/1630) -- `runtime.WithForwardResponseOption\(\)` is not respected [\#1625](https://github.com/grpc-ecosystem/grpc-gateway/issues/1625) -- same field in params [\#1621](https://github.com/grpc-ecosystem/grpc-gateway/issues/1621) -- Use grpc gateway to create rest API whose body is a list [\#1617](https://github.com/grpc-ecosystem/grpc-gateway/issues/1617) -- grpc-gateway equivalent in the grpc python package [\#1613](https://github.com/grpc-ecosystem/grpc-gateway/issues/1613) -- Migrate away from importing `github.com/golang/protobuf/{descriptor,proto}` in generated code \(similar to \#1260\). [\#1608](https://github.com/grpc-ecosystem/grpc-gateway/issues/1608) -- runtime.WithForwardResponseOption compile error [\#1607](https://github.com/grpc-ecosystem/grpc-gateway/issues/1607) -- Apply FiedMask to the GET \(and LIST\) returns [\#1605](https://github.com/grpc-ecosystem/grpc-gateway/issues/1605) -- code: 32603, message `types.Coin` is neither a v1 or v2 Message [\#1603](https://github.com/grpc-ecosystem/grpc-gateway/issues/1603) -- protoc-gen-swagger map type filed doesn't support options.openapiv2\_field [\#1601](https://github.com/grpc-ecosystem/grpc-gateway/issues/1601) -- šŸ›HttpRule is stated in unannotated\_echo\_service.yaml, but warning is still issued [\#1578](https://github.com/grpc-ecosystem/grpc-gateway/issues/1578) - -**Merged pull requests:** - -- Generate changelog for 1.14.8 [\#1646](https://github.com/grpc-ecosystem/grpc-gateway/pull/1646) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add ignore for golang.org/x/oauth2 [\#1644](https://github.com/grpc-ecosystem/grpc-gateway/pull/1644) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- fix SendHeader/SetTrailer when use grpc-gateway standalone server \(master\) [\#1639](https://github.com/grpc-ecosystem/grpc-gateway/pull/1639) ([ghostiam](https://github.com/ghostiam)) -- Update golang Docker tag to v1.15.1 \(master\) [\#1634](https://github.com/grpc-ecosystem/grpc-gateway/pull/1634) ([renovate[bot]](https://github.com/apps/renovate)) -- runtime: fix duration test [\#1631](https://github.com/grpc-ecosystem/grpc-gateway/pull/1631) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update dependency bazel\_skylib to v1.0.3 \(master\) [\#1618](https://github.com/grpc-ecosystem/grpc-gateway/pull/1618) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.31.1 \(master\) [\#1614](https://github.com/grpc-ecosystem/grpc-gateway/pull/1614) ([renovate[bot]](https://github.com/apps/renovate)) -- Control warning behavior on unbound methods using a flag [\#1606](https://github.com/grpc-ecosystem/grpc-gateway/pull/1606) ([yousseftelda](https://github.com/yousseftelda)) -- protoc-gen-swagger: fix map field options \(\#1601\) [\#1602](https://github.com/grpc-ecosystem/grpc-gateway/pull/1602) ([yangxikun](https://github.com/yangxikun)) -- protoc-gen-swagger: remove boolean format [\#1597](https://github.com/grpc-ecosystem/grpc-gateway/pull/1597) ([algas](https://github.com/algas)) -- document optional swagger plugin for unannotated grpc\_api\_configuration [\#1588](https://github.com/grpc-ecosystem/grpc-gateway/pull/1588) ([piengeng](https://github.com/piengeng)) - -## [v1.14.7](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.7) (2020-08-12) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.4...v1.14.7) - -**Closed issues:** - -- CVE-2020-14001: Unintended read access in kramdown gem [\#1579](https://github.com/grpc-ecosystem/grpc-gateway/issues/1579) - -**Merged pull requests:** - -- Generate changelog for 1.14.7 [\#1587](https://github.com/grpc-ecosystem/grpc-gateway/pull/1587) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- chore\(deps\): update golang docker tag to v1.15.0 \(master\) [\#1585](https://github.com/grpc-ecosystem/grpc-gateway/pull/1585) ([renovate[bot]](https://github.com/apps/renovate)) -- Update github-pages [\#1581](https://github.com/grpc-ecosystem/grpc-gateway/pull/1581) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v2.0.0-beta.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.4) (2020-08-10) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.3...v2.0.0-beta.4) - -**Fixed bugs:** - -- Flaky Timeout test [\#1258](https://github.com/grpc-ecosystem/grpc-gateway/issues/1258) -- `protoc-gen-swagger` does not parse query params of a DELETE HTTP rpc definition into swagger.json file [\#559](https://github.com/grpc-ecosystem/grpc-gateway/issues/559) - -**Closed issues:** - -- \[v2\] expose defaultHTTPErrorHandler \(and perhaps defaultStreamErrorHandler\) [\#1576](https://github.com/grpc-ecosystem/grpc-gateway/issues/1576) -- protoc-gen-swagger: Add prefix to all paths [\#1567](https://github.com/grpc-ecosystem/grpc-gateway/issues/1567) -- Generate Swagger description using proto comments. [\#1552](https://github.com/grpc-ecosystem/grpc-gateway/issues/1552) -- incorrect field mask generated for deeply nested struct [\#1549](https://github.com/grpc-ecosystem/grpc-gateway/issues/1549) -- connection error occurs if the grpc server restarts [\#1547](https://github.com/grpc-ecosystem/grpc-gateway/issues/1547) -- Log spam during attempt to append remote address to the XFF header when the transport is a unix domain socket [\#1538](https://github.com/grpc-ecosystem/grpc-gateway/issues/1538) -- Can not use evans cli or other grpc gui tool when using http annotations [\#1535](https://github.com/grpc-ecosystem/grpc-gateway/issues/1535) -- reverse gateway file not getting generated \(.pb.gw.go\) not getting generated no error just warning [\#1530](https://github.com/grpc-ecosystem/grpc-gateway/issues/1530) -- does this support grpc-node? [\#1525](https://github.com/grpc-ecosystem/grpc-gateway/issues/1525) -- With v2 we should be able to detect real NotFound responses from gRPC service NotFound responses [\#1513](https://github.com/grpc-ecosystem/grpc-gateway/issues/1513) -- runtime.MarshalerForRequest: Content-Type should have been parsed before querying mimeMap [\#1505](https://github.com/grpc-ecosystem/grpc-gateway/issues/1505) -- Invalid test cases for runtime.Marshaler [\#1501](https://github.com/grpc-ecosystem/grpc-gateway/issues/1501) -- Need help in enabling log in grpc-gateway application [\#1495](https://github.com/grpc-ecosystem/grpc-gateway/issues/1495) -- WithForwardResponseOption can't cast proto.Message when response\_body is defined on the rpc method [\#1493](https://github.com/grpc-ecosystem/grpc-gateway/issues/1493) -- should it support jsonp? [\#1480](https://github.com/grpc-ecosystem/grpc-gateway/issues/1480) -- Any option to set per route middleware instead of using the global route/handler/mux middleware? [\#1473](https://github.com/grpc-ecosystem/grpc-gateway/issues/1473) -- How to JSON Transcode Protos With Naming Equal to Generated Typescript Repeated Fields [\#1465](https://github.com/grpc-ecosystem/grpc-gateway/issues/1465) -- Boolean type should not have a format \(OAS\) [\#1463](https://github.com/grpc-ecosystem/grpc-gateway/issues/1463) -- Performance implications of using the grpc-gateway for a REST API [\#1458](https://github.com/grpc-ecosystem/grpc-gateway/issues/1458) -- Trying to generate properties using the camelCase from underscores [\#1426](https://github.com/grpc-ecosystem/grpc-gateway/issues/1426) -- question: tensorflow serving [\#1425](https://github.com/grpc-ecosystem/grpc-gateway/issues/1425) -- Documentation: clarify RegisterXXXHandlerServer compromises [\#1398](https://github.com/grpc-ecosystem/grpc-gateway/issues/1398) -- errors when building with bazel [\#1392](https://github.com/grpc-ecosystem/grpc-gateway/issues/1392) -- Enums from other packages as path parameters is missing package name in front of enumValMap. [\#1203](https://github.com/grpc-ecosystem/grpc-gateway/issues/1203) -- Reference not imported properly [\#1190](https://github.com/grpc-ecosystem/grpc-gateway/issues/1190) -- Merging swagger specs fails to use rpc comments [\#664](https://github.com/grpc-ecosystem/grpc-gateway/issues/664) - -**Merged pull requests:** - -- chore\(deps\): update golang docker tag to v1.14.7 \(master\) [\#1571](https://github.com/grpc-ecosystem/grpc-gateway/pull/1571) ([renovate[bot]](https://github.com/apps/renovate)) -- Only canonicalize header key once in each iteration [\#1564](https://github.com/grpc-ecosystem/grpc-gateway/pull/1564) ([ziyi-yan](https://github.com/ziyi-yan)) -- chore\(deps\): update module google.golang.org/grpc to v1.31.0 \(master\) [\#1561](https://github.com/grpc-ecosystem/grpc-gateway/pull/1561) ([renovate[bot]](https://github.com/apps/renovate)) -- fix slice appendings in generating field mask paths [\#1555](https://github.com/grpc-ecosystem/grpc-gateway/pull/1555) ([houz42](https://github.com/houz42)) -- chore\(deps\): update dependency com\_github\_bazelbuild\_buildtools to v3.4.0 \(master\) [\#1544](https://github.com/grpc-ecosystem/grpc-gateway/pull/1544) ([renovate[bot]](https://github.com/apps/renovate)) -- Eliminate log messages resulting from requests being sent over a Unix Domain Socket [\#1543](https://github.com/grpc-ecosystem/grpc-gateway/pull/1543) ([janzantinge](https://github.com/janzantinge)) -- docs: fix broken screenshot paths [\#1540](https://github.com/grpc-ecosystem/grpc-gateway/pull/1540) ([dufcrule](https://github.com/dufcrule)) -- Update golang Docker tag to v1.14.6 \(master\) [\#1531](https://github.com/grpc-ecosystem/grpc-gateway/pull/1531) ([renovate[bot]](https://github.com/apps/renovate)) -- Adds fqn\_for\_swagger\_name to bazel defs [\#1528](https://github.com/grpc-ecosystem/grpc-gateway/pull/1528) ([chriserickson](https://github.com/chriserickson)) -- Update golang Docker tag to v1.14.5 \(master\) [\#1521](https://github.com/grpc-ecosystem/grpc-gateway/pull/1521) ([renovate[bot]](https://github.com/apps/renovate)) -- protoc-gen-swagger: add example similar to AIP-133 [\#1514](https://github.com/grpc-ecosystem/grpc-gateway/pull/1514) ([jonathaningram](https://github.com/jonathaningram)) -- Parse media type for inbound marshaler [\#1506](https://github.com/grpc-ecosystem/grpc-gateway/pull/1506) ([movsb](https://github.com/movsb)) -- Corrects an invalid test [\#1502](https://github.com/grpc-ecosystem/grpc-gateway/pull/1502) ([yugui](https://github.com/yugui)) -- forward trailers on error only if client send TE header [\#1499](https://github.com/grpc-ecosystem/grpc-gateway/pull/1499) ([strobil](https://github.com/strobil)) -- docs: fix broken season of docs links [\#1497](https://github.com/grpc-ecosystem/grpc-gateway/pull/1497) ([dufcrule](https://github.com/dufcrule)) -- docs: clean up cygwin instructions [\#1490](https://github.com/grpc-ecosystem/grpc-gateway/pull/1490) ([dufcrule](https://github.com/dufcrule)) -- Add `descriptor` to `deps` of `go\_gen\_grpc\_gateway`. [\#1487](https://github.com/grpc-ecosystem/grpc-gateway/pull/1487) ([bartle-stripe](https://github.com/bartle-stripe)) -- Update dependency com\_github\_bazelbuild\_buildtools to v3.3.0 \(master\) [\#1481](https://github.com/grpc-ecosystem/grpc-gateway/pull/1481) ([renovate[bot]](https://github.com/apps/renovate)) -- Standardize way GitHub is written in CONTRIBUTING.md [\#1479](https://github.com/grpc-ecosystem/grpc-gateway/pull/1479) ([dufcrule](https://github.com/dufcrule)) -- Update module google.golang.org/grpc to v1.30.0 \(master\) [\#1476](https://github.com/grpc-ecosystem/grpc-gateway/pull/1476) ([renovate[bot]](https://github.com/apps/renovate)) -- protoc-gen-swagger: Update internal mapping for boolean type [\#1466](https://github.com/grpc-ecosystem/grpc-gateway/pull/1466) ([ozraza](https://github.com/ozraza)) -- Update dependency com\_github\_bazelbuild\_buildtools to v3.2.1 \(master\) [\#1460](https://github.com/grpc-ecosystem/grpc-gateway/pull/1460) ([renovate[bot]](https://github.com/apps/renovate)) -- Fix for referenced enums in field params [\#1453](https://github.com/grpc-ecosystem/grpc-gateway/pull/1453) ([sgtsquiggs](https://github.com/sgtsquiggs)) -- fix rpc comment generation against allow\_merge [\#1445](https://github.com/grpc-ecosystem/grpc-gateway/pull/1445) ([kentdotn](https://github.com/kentdotn)) -- protoc-gen-swagger: Fix message recursion detection [\#1437](https://github.com/grpc-ecosystem/grpc-gateway/pull/1437) ([doylezdead](https://github.com/doylezdead)) -- chore\(deps\): update dependency com\_github\_bazelbuild\_buildtools to v3.2.0 \(master\) [\#1434](https://github.com/grpc-ecosystem/grpc-gateway/pull/1434) ([renovate[bot]](https://github.com/apps/renovate)) -- chore\(deps\): update golang docker tag to v1.14.4 \(master\) [\#1430](https://github.com/grpc-ecosystem/grpc-gateway/pull/1430) ([renovate[bot]](https://github.com/apps/renovate)) -- Add openapi protobuf documentation examples [\#1427](https://github.com/grpc-ecosystem/grpc-gateway/pull/1427) ([bvwells](https://github.com/bvwells)) -- Enable auto merge and automate updates [\#1416](https://github.com/grpc-ecosystem/grpc-gateway/pull/1416) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- added issue template of various forms [\#1411](https://github.com/grpc-ecosystem/grpc-gateway/pull/1411) ([iamrajiv](https://github.com/iamrajiv)) -- fix documentation error introduced by \#1399 [\#1402](https://github.com/grpc-ecosystem/grpc-gateway/pull/1402) ([joesonw](https://github.com/joesonw)) -- Add module generator option [\#1400](https://github.com/grpc-ecosystem/grpc-gateway/pull/1400) ([Humpheh](https://github.com/Humpheh)) -- Fixes 1398: deprecate Regiter\_XXX\_HandlerServer [\#1399](https://github.com/grpc-ecosystem/grpc-gateway/pull/1399) ([joesonw](https://github.com/joesonw)) -- Adding docs about controlling http response status codes [\#1391](https://github.com/grpc-ecosystem/grpc-gateway/pull/1391) ([zhughes3](https://github.com/zhughes3)) - -## [v2.0.0-beta.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.3) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.2...v2.0.0-beta.3) - -## [v1.14.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.6) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.5...v1.14.6) - -## [v2.0.0-beta.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.2) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-beta.1...v2.0.0-beta.2) - -## [v2.0.0-beta.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-beta.1) (2020-05-25) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.5...v2.0.0-beta.1) - -**Implemented enhancements:** - -- Feature request: support of go protocol buffer v2 [\#1147](https://github.com/grpc-ecosystem/grpc-gateway/issues/1147) - -**Fixed bugs:** - -- Bazel tests are flaky [\#968](https://github.com/grpc-ecosystem/grpc-gateway/issues/968) - -**Closed issues:** - -- Merging swagger specs \(for multiple protos belonging to same package\) fails to emit summary for some RPCs [\#1387](https://github.com/grpc-ecosystem/grpc-gateway/issues/1387) -- Remove result/error envelope in streaming RPC response [\#1254](https://github.com/grpc-ecosystem/grpc-gateway/issues/1254) -- cleanup: rename 'swagger' references to 'openapi' [\#675](https://github.com/grpc-ecosystem/grpc-gateway/issues/675) -- Swagger: JSON definitions aren't CamelCased [\#375](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) -- Support emitting default values in JSON [\#233](https://github.com/grpc-ecosystem/grpc-gateway/issues/233) - -**Merged pull requests:** - -- Generate changelog for 1.14.6 [\#1394](https://github.com/grpc-ecosystem/grpc-gateway/pull/1394) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Tidy up docs [\#1389](https://github.com/grpc-ecosystem/grpc-gateway/pull/1389) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix various misspellings [\#1381](https://github.com/grpc-ecosystem/grpc-gateway/pull/1381) ([bvwells](https://github.com/bvwells)) -- Remove usage of deprecated grpc.Errorf API [\#1380](https://github.com/grpc-ecosystem/grpc-gateway/pull/1380) ([bvwells](https://github.com/bvwells)) -- Add missing documentation for openapiv2 proto definition [\#1375](https://github.com/grpc-ecosystem/grpc-gateway/pull/1375) ([bvwells](https://github.com/bvwells)) -- deleted ISSUE\_TEMPLATE.md file from \_docs which was left by mistake [\#1368](https://github.com/grpc-ecosystem/grpc-gateway/pull/1368) ([iamrajiv](https://github.com/iamrajiv)) -- added Pull Request Template for grpc-gateway [\#1366](https://github.com/grpc-ecosystem/grpc-gateway/pull/1366) ([iamrajiv](https://github.com/iamrajiv)) -- Improve comments, fix indentation and add new line [\#1362](https://github.com/grpc-ecosystem/grpc-gateway/pull/1362) ([amanjain97](https://github.com/amanjain97)) -- Improve README.md [\#1361](https://github.com/grpc-ecosystem/grpc-gateway/pull/1361) ([amanjain97](https://github.com/amanjain97)) -- Fix typo in CONTRIBUTING.md [\#1360](https://github.com/grpc-ecosystem/grpc-gateway/pull/1360) ([amanjain97](https://github.com/amanjain97)) -- improved customizingyourgateway.md [\#1359](https://github.com/grpc-ecosystem/grpc-gateway/pull/1359) ([iamrajiv](https://github.com/iamrajiv)) -- Update golang Docker tag to v1.14.3 \(master\) [\#1354](https://github.com/grpc-ecosystem/grpc-gateway/pull/1354) ([renovate[bot]](https://github.com/apps/renovate)) -- Globally ignore jekyll updates [\#1347](https://github.com/grpc-ecosystem/grpc-gateway/pull/1347) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Further renovate tweaks [\#1345](https://github.com/grpc-ecosystem/grpc-gateway/pull/1345) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Attempt to ignore golang/protobuf updates on master [\#1338](https://github.com/grpc-ecosystem/grpc-gateway/pull/1338) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- docs: add example customizing unmarshal options [\#1335](https://github.com/grpc-ecosystem/grpc-gateway/pull/1335) ([srenatus](https://github.com/srenatus)) -- Renovate: run go mod tidy after updates [\#1323](https://github.com/grpc-ecosystem/grpc-gateway/pull/1323) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update google.golang.org/genproto commit hash to 09dca8e \(master\) [\#1321](https://github.com/grpc-ecosystem/grpc-gateway/pull/1321) ([renovate[bot]](https://github.com/apps/renovate)) -- fixed typo and grammar in docs/\_docs/usage.md [\#1318](https://github.com/grpc-ecosystem/grpc-gateway/pull/1318) ([iamrajiv](https://github.com/iamrajiv)) -- improved docs/\_docs/season\_of\_docs.md [\#1317](https://github.com/grpc-ecosystem/grpc-gateway/pull/1317) ([iamrajiv](https://github.com/iamrajiv)) -- Add bazel CI caching [\#1312](https://github.com/grpc-ecosystem/grpc-gateway/pull/1312) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update module antihax/optional to v1 \(master\) [\#1296](https://github.com/grpc-ecosystem/grpc-gateway/pull/1296) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency com\_github\_bazelbuild\_buildtools to v3 \(master\) [\#1295](https://github.com/grpc-ecosystem/grpc-gateway/pull/1295) ([renovate[bot]](https://github.com/apps/renovate)) -- Update module google.golang.org/grpc to v1.29.1 \(master\) [\#1294](https://github.com/grpc-ecosystem/grpc-gateway/pull/1294) ([renovate[bot]](https://github.com/apps/renovate)) -- Update golang Docker tag to v1.14.2 \(master\) [\#1292](https://github.com/grpc-ecosystem/grpc-gateway/pull/1292) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency io\_bazel\_rules\_go to v0.22.4 \(master\) [\#1288](https://github.com/grpc-ecosystem/grpc-gateway/pull/1288) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency com\_github\_bazelbuild\_buildtools to v0.29.0 \(master\) [\#1287](https://github.com/grpc-ecosystem/grpc-gateway/pull/1287) ([renovate[bot]](https://github.com/apps/renovate)) -- Update dependency bazel\_gazelle to v0.20.0 \(master\) [\#1286](https://github.com/grpc-ecosystem/grpc-gateway/pull/1286) ([renovate[bot]](https://github.com/apps/renovate)) -- Update google.golang.org/genproto commit hash to 43844f6 \(master\) [\#1285](https://github.com/grpc-ecosystem/grpc-gateway/pull/1285) ([renovate[bot]](https://github.com/apps/renovate)) -- Move renovate.json back to root [\#1284](https://github.com/grpc-ecosystem/grpc-gateway/pull/1284) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Configure Renovate to run on master and v2 [\#1281](https://github.com/grpc-ecosystem/grpc-gateway/pull/1281) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update golang.org/x/oauth2 commit hash to bf48bf1 [\#1279](https://github.com/grpc-ecosystem/grpc-gateway/pull/1279) ([renovate[bot]](https://github.com/apps/renovate)) -- Add more instructions on the GitHub releases UI [\#1276](https://github.com/grpc-ecosystem/grpc-gateway/pull/1276) ([achew22](https://github.com/achew22)) -- Configure Renovate [\#1275](https://github.com/grpc-ecosystem/grpc-gateway/pull/1275) ([renovate[bot]](https://github.com/apps/renovate)) - -## [v1.14.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.5) (2020-05-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-alpha.2...v1.14.5) - -**Fixed bugs:** - -- Regeneration commands don't regenerate all files [\#1229](https://github.com/grpc-ecosystem/grpc-gateway/issues/1229) - -**Closed issues:** - -- bug in protoc-gen-swagger with put method and field\_mask [\#1271](https://github.com/grpc-ecosystem/grpc-gateway/issues/1271) -- How to change title and version in generated swagger json file [\#1269](https://github.com/grpc-ecosystem/grpc-gateway/issues/1269) -- Error when using oneof name in response body selector [\#1264](https://github.com/grpc-ecosystem/grpc-gateway/issues/1264) -- httpbody.proto has incorrect go\_package [\#1263](https://github.com/grpc-ecosystem/grpc-gateway/issues/1263) -- How to implement field validation for optional parameter [\#1256](https://github.com/grpc-ecosystem/grpc-gateway/issues/1256) -- HTTP GET with query params error [\#1245](https://github.com/grpc-ecosystem/grpc-gateway/issues/1245) -- how to get customezing header [\#1244](https://github.com/grpc-ecosystem/grpc-gateway/issues/1244) -- proto function not define in yaml then grpc-gateway\_out err [\#1233](https://github.com/grpc-ecosystem/grpc-gateway/issues/1233) -- ll [\#1232](https://github.com/grpc-ecosystem/grpc-gateway/issues/1232) -- Add WithUnmarshaler NewServeMux option. [\#1226](https://github.com/grpc-ecosystem/grpc-gateway/issues/1226) -- Feature request: Reject call if there are parameters/fields that don't exist in the protobuf [\#1210](https://github.com/grpc-ecosystem/grpc-gateway/issues/1210) -- Migrate away from using the protoc-gen-go/generator package [\#1209](https://github.com/grpc-ecosystem/grpc-gateway/issues/1209) -- Swagger doc generation got stuck for infinite time if a message refers itself. [\#1167](https://github.com/grpc-ecosystem/grpc-gateway/issues/1167) -- Remove "error" field from errors. [\#1098](https://github.com/grpc-ecosystem/grpc-gateway/issues/1098) - -**Merged pull requests:** - -- Generate release notes for 1.14.5 [\#1270](https://github.com/grpc-ecosystem/grpc-gateway/pull/1270) ([achew22](https://github.com/achew22)) -- protoc-gen-swagger, Fix for infinite loop on circular references in query parameters [\#1266](https://github.com/grpc-ecosystem/grpc-gateway/pull/1266) ([Romeren](https://github.com/Romeren)) -- Remove uses of protoc-gen-go/generator [\#1260](https://github.com/grpc-ecosystem/grpc-gateway/pull/1260) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Use public key to authenticate for docker registry [\#1259](https://github.com/grpc-ecosystem/grpc-gateway/pull/1259) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add Chef and Scaleway to ADOPTERS.md [\#1255](https://github.com/grpc-ecosystem/grpc-gateway/pull/1255) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add user testimonials and ADOPTERS.md [\#1250](https://github.com/grpc-ecosystem/grpc-gateway/pull/1250) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Remove duplicate regeneration documentation [\#1248](https://github.com/grpc-ecosystem/grpc-gateway/pull/1248) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Change build env to git repo package [\#1246](https://github.com/grpc-ecosystem/grpc-gateway/pull/1246) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Move section about google protobufs [\#1241](https://github.com/grpc-ecosystem/grpc-gateway/pull/1241) ([thecodejunkie](https://github.com/thecodejunkie)) -- Fix generating helloworld.proto [\#1230](https://github.com/grpc-ecosystem/grpc-gateway/pull/1230) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix testproto generation, add to CI [\#1221](https://github.com/grpc-ecosystem/grpc-gateway/pull/1221) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- docs: fix some broken links and change godoc.org links to pkg.go.dev [\#1219](https://github.com/grpc-ecosystem/grpc-gateway/pull/1219) ([AyushG3112](https://github.com/AyushG3112)) -- Add season of docs project ideas page [\#1214](https://github.com/grpc-ecosystem/grpc-gateway/pull/1214) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/generator [\#1213](https://github.com/grpc-ecosystem/grpc-gateway/pull/1213) ([yinzara](https://github.com/yinzara)) -- fix query params for invoked in-process local request [\#1212](https://github.com/grpc-ecosystem/grpc-gateway/pull/1212) ([hb-chen](https://github.com/hb-chen)) - -## [v2.0.0-alpha.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-alpha.2) (2020-04-18) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) - -## [v2.0.0-alpha.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-alpha.1) (2020-04-18) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.4...v2.0.0-alpha.1) - -## [v1.14.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4) (2020-04-18) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.4-rc.1...v1.14.4) - -**Closed issues:** - -- custom unmarshal response error [\#1211](https://github.com/grpc-ecosystem/grpc-gateway/issues/1211) -- api annotation placeholder character case [\#1207](https://github.com/grpc-ecosystem/grpc-gateway/issues/1207) -- response\_body of http rule is ignored in case of server streaming [\#1202](https://github.com/grpc-ecosystem/grpc-gateway/issues/1202) -- Go gRPC Gateway - Type of one field in JSON is not same as in proto [\#1201](https://github.com/grpc-ecosystem/grpc-gateway/issues/1201) -- 1.14 breaks protoc-gen-go-json [\#1199](https://github.com/grpc-ecosystem/grpc-gateway/issues/1199) -- Use different field name in gateway [\#1197](https://github.com/grpc-ecosystem/grpc-gateway/issues/1197) -- No longer generate register...Server function in pb.gw.go? [\#1195](https://github.com/grpc-ecosystem/grpc-gateway/issues/1195) -- Support for source\_relative argument [\#1180](https://github.com/grpc-ecosystem/grpc-gateway/issues/1180) - -**Merged pull requests:** - -- Generate changelog for 1.14.4 [\#1217](https://github.com/grpc-ecosystem/grpc-gateway/pull/1217) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add option to disable new operationID generation [\#1216](https://github.com/grpc-ecosystem/grpc-gateway/pull/1216) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Misc docs changes [\#1215](https://github.com/grpc-ecosystem/grpc-gateway/pull/1215) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- http rule's response\_body support to stream rpc [\#1208](https://github.com/grpc-ecosystem/grpc-gateway/pull/1208) ([adasari](https://github.com/adasari)) -- Add GopherCon UK link to README [\#1204](https://github.com/grpc-ecosystem/grpc-gateway/pull/1204) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Move codegenerator back to public namespace [\#1200](https://github.com/grpc-ecosystem/grpc-gateway/pull/1200) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.14.4-rc.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4-rc.1) (2020-04-01) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.3...v1.14.4-rc.1) - -**Implemented enhancements:** - -- proto-gen-\* --version [\#649](https://github.com/grpc-ecosystem/grpc-gateway/issues/649) - -**Closed issues:** - -- protoc-gen-swagger: json\_names\_for\_fields=true does not respect json\_name for \*nested\* path parameters [\#1187](https://github.com/grpc-ecosystem/grpc-gateway/issues/1187) -- protoc-gen-grpc-gateway-ts plugin for generating Typescript types [\#1182](https://github.com/grpc-ecosystem/grpc-gateway/issues/1182) -- protoc-gen-swagger: support outputting enum parameters as integers [\#1177](https://github.com/grpc-ecosystem/grpc-gateway/issues/1177) -- protoc-gen-grpc-gateway should warn or fail if a selector does not exist [\#1175](https://github.com/grpc-ecosystem/grpc-gateway/issues/1175) -- Enum string values not supported by grpc gateway [\#1171](https://github.com/grpc-ecosystem/grpc-gateway/issues/1171) -- Swagger definition is broken if there's no default error response set [\#1162](https://github.com/grpc-ecosystem/grpc-gateway/issues/1162) -- Using golang/protobuf v1.4.0-rc.3 locks up generators [\#1158](https://github.com/grpc-ecosystem/grpc-gateway/issues/1158) - -**Merged pull requests:** - -- Generate changelog for 1.14.4-rc.1 [\#1194](https://github.com/grpc-ecosystem/grpc-gateway/pull/1194) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Generate Swagger with Unique Operation IDs [\#1193](https://github.com/grpc-ecosystem/grpc-gateway/pull/1193) ([dadgar](https://github.com/dadgar)) -- Xin/support deep levels reserved json name [\#1191](https://github.com/grpc-ecosystem/grpc-gateway/pull/1191) ([xin-au](https://github.com/xin-au)) -- feat: add enumAsInts flag [\#1186](https://github.com/grpc-ecosystem/grpc-gateway/pull/1186) ([rowe0x](https://github.com/rowe0x)) -- Use 8088 instead of 8080 in integration test. [\#1184](https://github.com/grpc-ecosystem/grpc-gateway/pull/1184) ([drigz](https://github.com/drigz)) -- Limit Bazel memory usage in CI. [\#1183](https://github.com/grpc-ecosystem/grpc-gateway/pull/1183) ([drigz](https://github.com/drigz)) -- fix version spelling [\#1181](https://github.com/grpc-ecosystem/grpc-gateway/pull/1181) ([seriousben](https://github.com/seriousben)) -- Emit error on HTTP rules without a matching selector and log warning on unbound methods [\#1178](https://github.com/grpc-ecosystem/grpc-gateway/pull/1178) ([andrascz](https://github.com/andrascz)) -- genswagger: don't emit default response if there's no Error definition [\#1166](https://github.com/grpc-ecosystem/grpc-gateway/pull/1166) ([utrack](https://github.com/utrack)) - -## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) - -**Closed issues:** - -- Missing httprule breaks our module [\#1168](https://github.com/grpc-ecosystem/grpc-gateway/issues/1168) - -**Merged pull requests:** - -- Generate changelog for 1.14.3 [\#1170](https://github.com/grpc-ecosystem/grpc-gateway/pull/1170) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) - -**Closed issues:** - -- 1.14.x breaks clay [\#1161](https://github.com/grpc-ecosystem/grpc-gateway/issues/1161) -- Enum string values not supported by grpc gateway [\#1159](https://github.com/grpc-ecosystem/grpc-gateway/issues/1159) -- Path parameters visible in the body of the request [\#1157](https://github.com/grpc-ecosystem/grpc-gateway/issues/1157) -- 1.14.0 breaks existing pipelines [\#1154](https://github.com/grpc-ecosystem/grpc-gateway/issues/1154) - -**Merged pull requests:** - -- Generate changelog for 1.14.2 [\#1164](https://github.com/grpc-ecosystem/grpc-gateway/pull/1164) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.14.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.1) (2020-03-05) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.0...v1.14.1) - -**Merged pull requests:** - -- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1156) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Move generator and descriptor back to public API [\#1155](https://github.com/grpc-ecosystem/grpc-gateway/pull/1155) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update build environment to 1.14 [\#1153](https://github.com/grpc-ecosystem/grpc-gateway/pull/1153) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add gorelease CI step [\#1152](https://github.com/grpc-ecosystem/grpc-gateway/pull/1152) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.14.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.0) (2020-03-04) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.13.0...v1.14.0) - -**Closed issues:** - -- Swagger Codegen With Multiple Additional Bindings is resulting in missing Documentation [\#1149](https://github.com/grpc-ecosystem/grpc-gateway/issues/1149) -- google.api.http option not picked up/mapped correctly? [\#1148](https://github.com/grpc-ecosystem/grpc-gateway/issues/1148) -- cannot use multiple different error handlers in one gateway binary [\#1143](https://github.com/grpc-ecosystem/grpc-gateway/issues/1143) -- Is grpc-gateway a stateless application? [\#1139](https://github.com/grpc-ecosystem/grpc-gateway/issues/1139) -- Support for custom query parameters parsers [\#1128](https://github.com/grpc-ecosystem/grpc-gateway/issues/1128) - -**Merged pull requests:** - -- Generate changelog for 1.14.0 [\#1151](https://github.com/grpc-ecosystem/grpc-gateway/pull/1151) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Use an interface for ContentTypeFromMessage [\#1150](https://github.com/grpc-ecosystem/grpc-gateway/pull/1150) ([wtlangford](https://github.com/wtlangford)) -- Minimize API surface in anticipation of gorelease [\#1146](https://github.com/grpc-ecosystem/grpc-gateway/pull/1146) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix \#1143: Support multiple error handlers. [\#1144](https://github.com/grpc-ecosystem/grpc-gateway/pull/1144) ([jgiles](https://github.com/jgiles)) -- Fix customizing your gateway documentation CustomMatcher example [\#1142](https://github.com/grpc-ecosystem/grpc-gateway/pull/1142) ([wiliamsouza](https://github.com/wiliamsouza)) -- protoc-gen-swagger: add flag to disable default errors [\#1141](https://github.com/grpc-ecosystem/grpc-gateway/pull/1141) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Bump nokogiri from 1.10.4 to 1.10.8 in /docs [\#1140](https://github.com/grpc-ecosystem/grpc-gateway/pull/1140) ([dependabot[bot]](https://github.com/apps/dependabot)) -- Configurable query parameters parser [\#1138](https://github.com/grpc-ecosystem/grpc-gateway/pull/1138) ([wp0pw](https://github.com/wp0pw)) -- Improve installation instructions [\#1132](https://github.com/grpc-ecosystem/grpc-gateway/pull/1132) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add bazel gazelle to CONTRIBUTING [\#1131](https://github.com/grpc-ecosystem/grpc-gateway/pull/1131) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Configure response content type at the method level [\#1130](https://github.com/grpc-ecosystem/grpc-gateway/pull/1130) ([nboukeffa](https://github.com/nboukeffa)) - -## [v1.13.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.13.0) (2020-02-11) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.2...v1.13.0) - -**Implemented enhancements:** - -- \[Feature Request\] Custom Type conversion [\#754](https://github.com/grpc-ecosystem/grpc-gateway/issues/754) -- protoc-gen-swagger: add default error response [\#1127](https://github.com/grpc-ecosystem/grpc-gateway/pull/1127) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -**Closed issues:** - -- swagger: Prefix used in nested-field GET params does not respect json\_names\_for\_fields [\#1125](https://github.com/grpc-ecosystem/grpc-gateway/issues/1125) -- Generated spec missing grpc errors [\#1122](https://github.com/grpc-ecosystem/grpc-gateway/issues/1122) -- protoc-gen-swagger: Support for repeated custom message in url params [\#1119](https://github.com/grpc-ecosystem/grpc-gateway/issues/1119) -- protoc-gen-swagger: Support Response-specific examples [\#1117](https://github.com/grpc-ecosystem/grpc-gateway/issues/1117) - -**Merged pull requests:** - -- Generate changelog for 1.13.0 [\#1129](https://github.com/grpc-ecosystem/grpc-gateway/pull/1129) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix \#1125: JSON-prefix nested-field params. [\#1126](https://github.com/grpc-ecosystem/grpc-gateway/pull/1126) ([jgiles](https://github.com/jgiles)) -- Fix \#1117: Support response examples. [\#1124](https://github.com/grpc-ecosystem/grpc-gateway/pull/1124) ([jgiles](https://github.com/jgiles)) - -## [v1.12.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.2) (2020-01-22) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.1...v1.12.2) - -**Fixed bugs:** - -- Gateway does not parse oneof types correctly when using camelCase [\#1113](https://github.com/grpc-ecosystem/grpc-gateway/issues/1113) - -**Closed issues:** - -- all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp \[::1\]:50051: connect: connection refused\" [\#1111](https://github.com/grpc-ecosystem/grpc-gateway/issues/1111) -- Streaming responses are put in `x-stream-definitions` rather than `/components/schema`, which tools do not support [\#1109](https://github.com/grpc-ecosystem/grpc-gateway/issues/1109) -- Why is metadataAnnotators not \[\]func\(metadata.MD, \*http.Request\) [\#1107](https://github.com/grpc-ecosystem/grpc-gateway/issues/1107) -- protoc\_gen\_swagger: Why `protobufListValue` type is represented as object? [\#1106](https://github.com/grpc-ecosystem/grpc-gateway/issues/1106) -- The metadata of local\_request function's return is always nil [\#1105](https://github.com/grpc-ecosystem/grpc-gateway/issues/1105) -- protoc-gen-swagger: support multiple files [\#1104](https://github.com/grpc-ecosystem/grpc-gateway/issues/1104) -- grpc-gateway is incompatible with --incompatible\_load\_proto\_rules\_from\_bzl [\#1101](https://github.com/grpc-ecosystem/grpc-gateway/issues/1101) -- Any example or doc of sending large data from Postman \(json\) to the server using client side streaming? [\#1100](https://github.com/grpc-ecosystem/grpc-gateway/issues/1100) -- Generate java grpc gateway code. [\#1097](https://github.com/grpc-ecosystem/grpc-gateway/issues/1097) -- protoc-gen-swagger gen unsupport http post in query, only support http get in query? [\#1096](https://github.com/grpc-ecosystem/grpc-gateway/issues/1096) -- Cannot generate swagger with generated protobuf [\#1094](https://github.com/grpc-ecosystem/grpc-gateway/issues/1094) -- genswagger fails on Ubuntu on Windows \(WSL\): value of type genswagger.alias is not assignable to type genswagger.alias [\#1092](https://github.com/grpc-ecosystem/grpc-gateway/issues/1092) -- protoc-gen-swagger: should use json\_name values for generating properties in swagger doc [\#1090](https://github.com/grpc-ecosystem/grpc-gateway/issues/1090) -- protoc-gen-swagger: json\_names\_for\_fields=true does not respect json\_name for path parameters [\#1084](https://github.com/grpc-ecosystem/grpc-gateway/issues/1084) -- extract protoc-gen-swagger to separate repo [\#1083](https://github.com/grpc-ecosystem/grpc-gateway/issues/1083) -- How do I load balance call grpc service? [\#1081](https://github.com/grpc-ecosystem/grpc-gateway/issues/1081) - -**Merged pull requests:** - -- Generate changelog for 1.12.2 [\#1120](https://github.com/grpc-ecosystem/grpc-gateway/pull/1120) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- docs: require Jekyll Github Token to be set [\#1118](https://github.com/grpc-ecosystem/grpc-gateway/pull/1118) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- fix: protoc-gen-swagger: get wrong second services method comments [\#1116](https://github.com/grpc-ecosystem/grpc-gateway/pull/1116) ([chinaran](https://github.com/chinaran)) -- Bump rubyzip from 1.2.3 to 2.0.0 in /docs [\#1115](https://github.com/grpc-ecosystem/grpc-gateway/pull/1115) ([dependabot[bot]](https://github.com/apps/dependabot)) -- \#1113 Fix broken parsing of camelCase oneof [\#1114](https://github.com/grpc-ecosystem/grpc-gateway/pull/1114) ([seanlaff](https://github.com/seanlaff)) -- \#1109 Inline streamingDefinitions in generated swagger to better support codegen tools [\#1112](https://github.com/grpc-ecosystem/grpc-gateway/pull/1112) ([seanlaff](https://github.com/seanlaff)) -- Explicitly load rules\_proto rules [\#1102](https://github.com/grpc-ecosystem/grpc-gateway/pull/1102) ([achew22](https://github.com/achew22)) -- \[bazel\] Correctly handle proto files under \_virtual\_imports [\#1095](https://github.com/grpc-ecosystem/grpc-gateway/pull/1095) ([Yannic](https://github.com/Yannic)) -- Override operation\_id when available [\#1091](https://github.com/grpc-ecosystem/grpc-gateway/pull/1091) ([guilherme-santos](https://github.com/guilherme-santos)) -- Support reserved json name and add tests [\#1085](https://github.com/grpc-ecosystem/grpc-gateway/pull/1085) ([xin-au](https://github.com/xin-au)) - -## [v1.12.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.1) (2019-11-06) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.0...v1.12.1) - -**Closed issues:** - -- Unable to create HTTP mapping with "/parent" [\#1079](https://github.com/grpc-ecosystem/grpc-gateway/issues/1079) - -**Merged pull requests:** - -- Generate changelog for 1.12.1 [\#1080](https://github.com/grpc-ecosystem/grpc-gateway/pull/1080) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Revert "Fix templateToSwaggerPath generates invalid path" [\#1078](https://github.com/grpc-ecosystem/grpc-gateway/pull/1078) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Support json\_names\_for\_fields in starlark rule protoc\_gen\_swagger [\#1077](https://github.com/grpc-ecosystem/grpc-gateway/pull/1077) ([prestonvanloon](https://github.com/prestonvanloon)) - -## [v1.12.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.0) (2019-11-04) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.3...v1.12.0) - -**Implemented enhancements:** - -- protoc-gen-swagger: support generating a Swagger definition with no schemes [\#1069](https://github.com/grpc-ecosystem/grpc-gateway/issues/1069) - -**Fixed bugs:** - -- "make test" fails with go mod error [\#895](https://github.com/grpc-ecosystem/grpc-gateway/issues/895) - -**Closed issues:** - -- jfbrandhorst/grpc-gateway-build-env image can't run on Windows [\#1073](https://github.com/grpc-ecosystem/grpc-gateway/issues/1073) -- EOF is received after one request [\#1071](https://github.com/grpc-ecosystem/grpc-gateway/issues/1071) -- grpc-ecosystem/grpc-gateway/third\_party/googleapis: warning: directory does not exist. [\#1068](https://github.com/grpc-ecosystem/grpc-gateway/issues/1068) -- third\_party/googleapis is missing from package [\#1065](https://github.com/grpc-ecosystem/grpc-gateway/issues/1065) -- handleForwardResponseOptions not called by DefaultHTTPError [\#1064](https://github.com/grpc-ecosystem/grpc-gateway/issues/1064) -- why marshal enum to json using string but received it with int . [\#1063](https://github.com/grpc-ecosystem/grpc-gateway/issues/1063) -- protoc-gen-swagger/genswagger does not build on go1.11 and earlier versions [\#1061](https://github.com/grpc-ecosystem/grpc-gateway/issues/1061) -- How to support custom output, implementation [\#1055](https://github.com/grpc-ecosystem/grpc-gateway/issues/1055) - -**Merged pull requests:** - -- Generate changelog for 1.12.0 [\#1076](https://github.com/grpc-ecosystem/grpc-gateway/pull/1076) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Support creating a Swagger def with no schemes [\#1075](https://github.com/grpc-ecosystem/grpc-gateway/pull/1075) ([ailurarctos](https://github.com/ailurarctos)) -- Update dockerfile and regenerate files [\#1074](https://github.com/grpc-ecosystem/grpc-gateway/pull/1074) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- annotations: Sort import order. [\#1072](https://github.com/grpc-ecosystem/grpc-gateway/pull/1072) ([someone1](https://github.com/someone1)) -- fix\(protoc-gen-swagger\): Windows compatibility [\#1070](https://github.com/grpc-ecosystem/grpc-gateway/pull/1070) ([mrmeku](https://github.com/mrmeku)) -- adding build-scoping for builds on earlier go versions \(\<1.12\) [\#1062](https://github.com/grpc-ecosystem/grpc-gateway/pull/1062) ([marcusljx](https://github.com/marcusljx)) -- Add back bzip2 to image [\#1060](https://github.com/grpc-ecosystem/grpc-gateway/pull/1060) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Swagger 2.4.8 [\#1058](https://github.com/grpc-ecosystem/grpc-gateway/pull/1058) ([zachgersh](https://github.com/zachgersh)) -- get bazel deps back in right spot [\#1057](https://github.com/grpc-ecosystem/grpc-gateway/pull/1057) ([zachgersh](https://github.com/zachgersh)) -- use Go templates in protofile comments [\#1056](https://github.com/grpc-ecosystem/grpc-gateway/pull/1056) ([Jeremytjuh](https://github.com/Jeremytjuh)) -- Bump generators Dockerfile to 1.13.1 [\#1054](https://github.com/grpc-ecosystem/grpc-gateway/pull/1054) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Updates grpc proto deps [\#1053](https://github.com/grpc-ecosystem/grpc-gateway/pull/1053) ([zachgersh](https://github.com/zachgersh)) - -## [v1.11.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.3) (2019-09-30) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.2...v1.11.3) - -**Closed issues:** - -- json Custom output support \(with examples\) [\#1051](https://github.com/grpc-ecosystem/grpc-gateway/issues/1051) -- Question: Override TransientFailure error with friendlier response [\#1047](https://github.com/grpc-ecosystem/grpc-gateway/issues/1047) -- Wrong codes generated when nested enum in path [\#1017](https://github.com/grpc-ecosystem/grpc-gateway/issues/1017) - -**Merged pull requests:** - -- Generate changelog for 1.11.3 [\#1052](https://github.com/grpc-ecosystem/grpc-gateway/pull/1052) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Support json names in field mask generation [\#1050](https://github.com/grpc-ecosystem/grpc-gateway/pull/1050) ([william-plano-oxb](https://github.com/william-plano-oxb)) -- Fix auto generated fieldmask case in patch requests [\#1049](https://github.com/grpc-ecosystem/grpc-gateway/pull/1049) ([william-plano-oxb](https://github.com/william-plano-oxb)) -- Pass nested enum values through properly when used as url parameters [\#1048](https://github.com/grpc-ecosystem/grpc-gateway/pull/1048) ([mnito](https://github.com/mnito)) - -## [v1.11.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.2) (2019-09-20) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.1...v1.11.2) - -**Implemented enhancements:** - -- Support specifying servers in the swagger generator [\#891](https://github.com/grpc-ecosystem/grpc-gateway/issues/891) - -**Fixed bugs:** - -- Make protoc-gen-swagger build on 1.11 [\#1044](https://github.com/grpc-ecosystem/grpc-gateway/issues/1044) -- jsonpb panics when using numbers for parsing timestamps [\#1025](https://github.com/grpc-ecosystem/grpc-gateway/issues/1025) - -**Closed issues:** - -- Interceptors not called when using new RegisterHandler function [\#1043](https://github.com/grpc-ecosystem/grpc-gateway/issues/1043) -- How to use -grpc-gateway\_out sp that the result is in a specific folder? [\#1042](https://github.com/grpc-ecosystem/grpc-gateway/issues/1042) -- Is there any way to let json int32 can not accept string in grpc-gateway? [\#1029](https://github.com/grpc-ecosystem/grpc-gateway/issues/1029) -- Go integration tests are somewhat flaky [\#992](https://github.com/grpc-ecosystem/grpc-gateway/issues/992) - -**Merged pull requests:** - -- Generate changelog for 1.11.2 [\#1045](https://github.com/grpc-ecosystem/grpc-gateway/pull/1045) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Remove "make test" recommendation from CONTRIBUTING.md [\#1040](https://github.com/grpc-ecosystem/grpc-gateway/pull/1040) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- examples/integration: wait for secondary gateway [\#1039](https://github.com/grpc-ecosystem/grpc-gateway/pull/1039) ([srenatus](https://github.com/srenatus)) -- Update README.md [\#1038](https://github.com/grpc-ecosystem/grpc-gateway/pull/1038) ([piengeng](https://github.com/piengeng)) -- Configure stale\[bot\] [\#1036](https://github.com/grpc-ecosystem/grpc-gateway/pull/1036) ([achew22](https://github.com/achew22)) -- added additional info for custom http headers [\#1035](https://github.com/grpc-ecosystem/grpc-gateway/pull/1035) ([cemenson](https://github.com/cemenson)) -- protoc-gen-swagger: add support for arbitrary extensions [\#1033](https://github.com/grpc-ecosystem/grpc-gateway/pull/1033) ([srenatus](https://github.com/srenatus)) -- nitpick spacing in other proto files [\#1032](https://github.com/grpc-ecosystem/grpc-gateway/pull/1032) ([srenatus](https://github.com/srenatus)) -- nitpick a\_bit\_of\_everything.proto [\#1030](https://github.com/grpc-ecosystem/grpc-gateway/pull/1030) ([srenatus](https://github.com/srenatus)) -- runtime: stop using nil ponters with Unmarshal [\#1028](https://github.com/grpc-ecosystem/grpc-gateway/pull/1028) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Small performance fix [\#1027](https://github.com/grpc-ecosystem/grpc-gateway/pull/1027) ([dshemin](https://github.com/dshemin)) -- docs need type assertion on proto.Message [\#1026](https://github.com/grpc-ecosystem/grpc-gateway/pull/1026) ([zachgersh](https://github.com/zachgersh)) -- Update ISSUE\_TEMPLATE.md [\#1014](https://github.com/grpc-ecosystem/grpc-gateway/pull/1014) ([prologic](https://github.com/prologic)) - -## [v1.11.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.1) (2019-09-02) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.0...v1.11.1) - -**Fixed bugs:** - -- protoc\_gen\_swagger openapiv2\_field definition ignores the type option [\#1002](https://github.com/grpc-ecosystem/grpc-gateway/issues/1002) - -**Closed issues:** - -- AnnotateIncomingContext not declared by package runtime [\#1023](https://github.com/grpc-ecosystem/grpc-gateway/issues/1023) -- Fuzzit CI job is failing unexpectedly [\#1019](https://github.com/grpc-ecosystem/grpc-gateway/issues/1019) -- Bazel Rule? [\#1010](https://github.com/grpc-ecosystem/grpc-gateway/issues/1010) - -**Merged pull requests:** - -- Generate changelog for 1.11.1 [\#1024](https://github.com/grpc-ecosystem/grpc-gateway/pull/1024) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fuzzit: use go-fuzz with go-modules support [\#1022](https://github.com/grpc-ecosystem/grpc-gateway/pull/1022) ([yevgenypats](https://github.com/yevgenypats)) -- invoke in process server need attach md to incoming context [\#1021](https://github.com/grpc-ecosystem/grpc-gateway/pull/1021) ([hb-chen](https://github.com/hb-chen)) - -## [v1.11.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.0) (2019-08-30) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.10.0...v1.11.0) - -**Fixed bugs:** - -- protoc-gen-grpc-gateway fails silently after release 1.10 [\#1013](https://github.com/grpc-ecosystem/grpc-gateway/issues/1013) - -**Closed issues:** - -- protoc-gen-swagger does not generate parameters other than body and path parameters. [\#1012](https://github.com/grpc-ecosystem/grpc-gateway/issues/1012) - -**Merged pull requests:** - -- Generate changelog for 1.11.0 [\#1020](https://github.com/grpc-ecosystem/grpc-gateway/pull/1020) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- remove template func RegisterXXXServer\(\) unused param opts \[\]grpc.DialOption [\#1018](https://github.com/grpc-ecosystem/grpc-gateway/pull/1018) ([hb-chen](https://github.com/hb-chen)) -- Fix hand-crafted protobuf message [\#1016](https://github.com/grpc-ecosystem/grpc-gateway/pull/1016) ([dsnet](https://github.com/dsnet)) -- Bump ffi from 1.9.23 to 1.11.1 in /docs [\#1009](https://github.com/grpc-ecosystem/grpc-gateway/pull/1009) ([dependabot[bot]](https://github.com/apps/dependabot)) -- Bump rubyzip from 1.2.1 to 1.2.3 in /docs [\#1008](https://github.com/grpc-ecosystem/grpc-gateway/pull/1008) ([dependabot[bot]](https://github.com/apps/dependabot)) -- Bump nokogiri from 1.8.2 to 1.10.4 in /docs [\#1007](https://github.com/grpc-ecosystem/grpc-gateway/pull/1007) ([dependabot[bot]](https://github.com/apps/dependabot)) - -## [v1.10.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.10.0) (2019-08-28) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.6...v1.10.0) - -**Implemented enhancements:** - -- allow protobuf well known types in params [\#400](https://github.com/grpc-ecosystem/grpc-gateway/issues/400) -- Add a register, so that the gRPC service can be invoked in-process to provide a HTTP server. [\#947](https://github.com/grpc-ecosystem/grpc-gateway/pull/947) ([hb-chen](https://github.com/hb-chen)) - -**Fixed bugs:** - -- grpc-gateway don't work well when using github.com/golang/protobuf/ptypes/struct with streaming [\#999](https://github.com/grpc-ecosystem/grpc-gateway/issues/999) - -**Closed issues:** - -- Allow final url path parameter to be optional [\#1005](https://github.com/grpc-ecosystem/grpc-gateway/issues/1005) -- Update integration test dependencies [\#1004](https://github.com/grpc-ecosystem/grpc-gateway/issues/1004) -- Suggestion: Continuous Fuzzing [\#998](https://github.com/grpc-ecosystem/grpc-gateway/issues/998) -- Why grpc gateway does not call grpc callback directly? [\#952](https://github.com/grpc-ecosystem/grpc-gateway/issues/952) - -**Merged pull requests:** - -- Generate changelog for 1.10.0 [\#1011](https://github.com/grpc-ecosystem/grpc-gateway/pull/1011) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix templateToSwaggerPath generates invalid path [\#1006](https://github.com/grpc-ecosystem/grpc-gateway/pull/1006) ([ch3rub1m](https://github.com/ch3rub1m)) -- Allow overriding the primitive type of fields [\#1003](https://github.com/grpc-ecosystem/grpc-gateway/pull/1003) ([snowzach](https://github.com/snowzach)) -- Add Continuous Fuzzing Integration via fuzzit.dev [\#1001](https://github.com/grpc-ecosystem/grpc-gateway/pull/1001) ([yevgenypats](https://github.com/yevgenypats)) - -## [v1.9.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.6) (2019-08-16) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.5...v1.9.6) - -**Closed issues:** - -- Returning a primitive type as a response instead of proto messages [\#994](https://github.com/grpc-ecosystem/grpc-gateway/issues/994) -- protoc-gen-swagger: fix description of google/protobuf/struct.proto types [\#989](https://github.com/grpc-ecosystem/grpc-gateway/issues/989) -- Swagger generator does not convert parameters in URLs to camel case when `json\_names\_for\_fields` is enable. [\#986](https://github.com/grpc-ecosystem/grpc-gateway/issues/986) -- The release upload job is broken [\#981](https://github.com/grpc-ecosystem/grpc-gateway/issues/981) -- Schema and field name questions from a front end developer [\#980](https://github.com/grpc-ecosystem/grpc-gateway/issues/980) -- undefined: runtime.AssumeColonVerbOpt [\#978](https://github.com/grpc-ecosystem/grpc-gateway/issues/978) -- I want to know how to transfer http+proto to grpc. [\#977](https://github.com/grpc-ecosystem/grpc-gateway/issues/977) -- Is it possible to use protoc-gen-swagger options in my own protos? [\#976](https://github.com/grpc-ecosystem/grpc-gateway/issues/976) - -**Merged pull requests:** - -- Disable Windows CI Bazel [\#996](https://github.com/grpc-ecosystem/grpc-gateway/pull/996) ([achew22](https://github.com/achew22)) -- Correct HTTPBody doc [\#995](https://github.com/grpc-ecosystem/grpc-gateway/pull/995) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Generate changelog for 1.9.6 [\#993](https://github.com/grpc-ecosystem/grpc-gateway/pull/993) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- protoc-gen-swagger: correctly type struct.proto types [\#990](https://github.com/grpc-ecosystem/grpc-gateway/pull/990) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Camel case backward compatible in Swagger doc [\#988](https://github.com/grpc-ecosystem/grpc-gateway/pull/988) ([xin-au](https://github.com/xin-au)) -- Add doc for opentracing support [\#987](https://github.com/grpc-ecosystem/grpc-gateway/pull/987) ([vthiery](https://github.com/vthiery)) -- Use json camel case when GetUseJSONNamesForFields is enabled [\#985](https://github.com/grpc-ecosystem/grpc-gateway/pull/985) ([xin-au](https://github.com/xin-au)) -- Create presubmit.yaml which configures CI [\#983](https://github.com/grpc-ecosystem/grpc-gateway/pull/983) ([achew22](https://github.com/achew22)) -- Fix release script [\#982](https://github.com/grpc-ecosystem/grpc-gateway/pull/982) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Upgrade to the latest rules\_go [\#979](https://github.com/grpc-ecosystem/grpc-gateway/pull/979) ([achew22](https://github.com/achew22)) - -## [v1.9.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.5) (2019-07-22) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.4...v1.9.5) - -**Fixed bugs:** - -- Non-standard use of 412 HTTP Status Code [\#972](https://github.com/grpc-ecosystem/grpc-gateway/issues/972) - -**Closed issues:** - -- why response use enum's name [\#970](https://github.com/grpc-ecosystem/grpc-gateway/issues/970) - -**Merged pull requests:** - -- Generate changelog for 1.9.5 [\#975](https://github.com/grpc-ecosystem/grpc-gateway/pull/975) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix HTTP Status Code returned for a `Failed Precondition` error [\#974](https://github.com/grpc-ecosystem/grpc-gateway/pull/974) ([cjcormack](https://github.com/cjcormack)) -- Examples fix: Support preflight of auth libraries in js [\#973](https://github.com/grpc-ecosystem/grpc-gateway/pull/973) ([GhiaC](https://github.com/GhiaC)) - -## [v1.9.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.4) (2019-07-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.3...v1.9.4) - -**Closed issues:** - -- Read the Http Post Body [\#921](https://github.com/grpc-ecosystem/grpc-gateway/issues/921) -- Swagger document generation, required field is invalid [\#665](https://github.com/grpc-ecosystem/grpc-gateway/issues/665) - -**Merged pull requests:** - -- Generate changelog for 1.9.4 [\#969](https://github.com/grpc-ecosystem/grpc-gateway/pull/969) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Fix query.go to avoid invalid protobuf assumptions [\#967](https://github.com/grpc-ecosystem/grpc-gateway/pull/967) ([dsnet](https://github.com/dsnet)) -- doc\(readme\): fix typo [\#965](https://github.com/grpc-ecosystem/grpc-gateway/pull/965) ([franxois](https://github.com/franxois)) -- Added comments to base\_path to explain behavior [\#919](https://github.com/grpc-ecosystem/grpc-gateway/pull/919) ([nu11ptr](https://github.com/nu11ptr)) - -## [v1.9.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.3) (2019-06-28) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.2...v1.9.3) - -**Fixed bugs:** - -- EOF when calling Send for client streams [\#961](https://github.com/grpc-ecosystem/grpc-gateway/issues/961) - -**Closed issues:** - -- Please make a new release! [\#963](https://github.com/grpc-ecosystem/grpc-gateway/issues/963) -- application/x-www-form-urlencoded support. [\#960](https://github.com/grpc-ecosystem/grpc-gateway/issues/960) -- Bazel files are out of date [\#955](https://github.com/grpc-ecosystem/grpc-gateway/issues/955) -- Configurable AllowUnknownFields in jsonpb? [\#448](https://github.com/grpc-ecosystem/grpc-gateway/issues/448) - -**Merged pull requests:** - -- Generate changelog for 1.9.3 [\#964](https://github.com/grpc-ecosystem/grpc-gateway/pull/964) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- EOF on send [\#962](https://github.com/grpc-ecosystem/grpc-gateway/pull/962) ([gustavocovas](https://github.com/gustavocovas)) -- Add new option for the decoder - to disallow unknown fields [\#959](https://github.com/grpc-ecosystem/grpc-gateway/pull/959) ([vsaveliev](https://github.com/vsaveliev)) -- Update to rules\_go and buildtools [\#956](https://github.com/grpc-ecosystem/grpc-gateway/pull/956) ([drigz](https://github.com/drigz)) -- docs/customizingyourgateway: add ?pretty example [\#954](https://github.com/grpc-ecosystem/grpc-gateway/pull/954) ([srenatus](https://github.com/srenatus)) -- protoc\_gen\_swagger: Add attr for allow\_merge [\#944](https://github.com/grpc-ecosystem/grpc-gateway/pull/944) ([prestonvanloon](https://github.com/prestonvanloon)) - -## [v1.9.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.2) (2019-06-17) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.1...v1.9.2) - -**Fixed bugs:** - -- 404s using colons in the middle of the last path segment [\#224](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) - -**Merged pull requests:** - -- Generate changelog for 1.9.2 [\#953](https://github.com/grpc-ecosystem/grpc-gateway/pull/953) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Improve README file [\#950](https://github.com/grpc-ecosystem/grpc-gateway/pull/950) ([charleswhchan](https://github.com/charleswhchan)) -- Support colon in final path segment, last match wins behavior \(behind flags\) [\#949](https://github.com/grpc-ecosystem/grpc-gateway/pull/949) ([jfhamlin](https://github.com/jfhamlin)) - -## [v1.9.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.1) (2019-06-13) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.9.0...v1.9.1) - -**Closed issues:** - -- grpc: received message larger than max [\#943](https://github.com/grpc-ecosystem/grpc-gateway/issues/943) -- json 1.1 api support for grpc-ecosystem to use queryparams with filter [\#938](https://github.com/grpc-ecosystem/grpc-gateway/issues/938) -- i import a new gateway.Endpoint without recompile [\#937](https://github.com/grpc-ecosystem/grpc-gateway/issues/937) -- all SubConns are in TransientFailure [\#936](https://github.com/grpc-ecosystem/grpc-gateway/issues/936) -- Merging swagger specs fails to use rpc comments \(again\) [\#923](https://github.com/grpc-ecosystem/grpc-gateway/issues/923) - -**Merged pull requests:** - -- Generate changelog for 1.9.1 [\#946](https://github.com/grpc-ecosystem/grpc-gateway/pull/946) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Revert "protoc-gen-swagger: check typeIndex when typeName is Method" [\#945](https://github.com/grpc-ecosystem/grpc-gateway/pull/945) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- fix query params not populate if method is post [\#939](https://github.com/grpc-ecosystem/grpc-gateway/pull/939) ([mingqing](https://github.com/mingqing)) -- Fix make test on MacOS [\#935](https://github.com/grpc-ecosystem/grpc-gateway/pull/935) ([emilaasa](https://github.com/emilaasa)) - -## [v1.9.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.9.0) (2019-05-14) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.6...v1.9.0) - -**Closed issues:** - -- Errors in response streams do not go through the registered error handler [\#584](https://github.com/grpc-ecosystem/grpc-gateway/issues/584) - -**Merged pull requests:** - -- Generate changelog for 1.9.0 [\#933](https://github.com/grpc-ecosystem/grpc-gateway/pull/933) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- use error value for bad URI so custom error handler could treat it special [\#932](https://github.com/grpc-ecosystem/grpc-gateway/pull/932) ([jhump](https://github.com/jhump)) -- newline between JSON messages [\#931](https://github.com/grpc-ecosystem/grpc-gateway/pull/931) ([jhump](https://github.com/jhump)) -- ability to customize stream errors [\#930](https://github.com/grpc-ecosystem/grpc-gateway/pull/930) ([jhump](https://github.com/jhump)) - -## [v1.8.6](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.6) (2019-05-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.5...v1.8.6) - -**Fixed bugs:** - -- can't specify an empty path? [\#414](https://github.com/grpc-ecosystem/grpc-gateway/issues/414) - -**Closed issues:** - -- JSON stream response not available [\#926](https://github.com/grpc-ecosystem/grpc-gateway/issues/926) -- why google/api/http.proto annotations.proto Field Numbers is 72295728 ? [\#925](https://github.com/grpc-ecosystem/grpc-gateway/issues/925) -- Documentation: 'base\_path' Swagger attribute confuses users [\#918](https://github.com/grpc-ecosystem/grpc-gateway/issues/918) -- go get: error loading module requirements go 1.11 [\#915](https://github.com/grpc-ecosystem/grpc-gateway/issues/915) -- gateway generation issue on windows [\#911](https://github.com/grpc-ecosystem/grpc-gateway/issues/911) - -**Merged pull requests:** - -- Generate correct changelog version [\#929](https://github.com/grpc-ecosystem/grpc-gateway/pull/929) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Generate changelog for 1.8.6 [\#928](https://github.com/grpc-ecosystem/grpc-gateway/pull/928) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Use proto gen swagger with protos from external repository [\#924](https://github.com/grpc-ecosystem/grpc-gateway/pull/924) ([elenadeneva92](https://github.com/elenadeneva92)) -- Delete redundant load statement [\#922](https://github.com/grpc-ecosystem/grpc-gateway/pull/922) ([pcj](https://github.com/pcj)) -- Make gazelle diffs fail the build [\#916](https://github.com/grpc-ecosystem/grpc-gateway/pull/916) ([achew22](https://github.com/achew22)) -- Fixed empty path bug [\#913](https://github.com/grpc-ecosystem/grpc-gateway/pull/913) ([brycematheson1234](https://github.com/brycematheson1234)) - -## [v1.8.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.5) (2019-03-15) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.4...v1.8.5) - -**Closed issues:** - -- Swagger get query param documentation shows repeated fields incorrectly [\#756](https://github.com/grpc-ecosystem/grpc-gateway/issues/756) - -**Merged pull requests:** - -- Generate changelog for 1.8.5 [\#910](https://github.com/grpc-ecosystem/grpc-gateway/pull/910) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- CollectionFormat multi for query params of repeated fields 2 [\#909](https://github.com/grpc-ecosystem/grpc-gateway/pull/909) ([bmperrea](https://github.com/bmperrea)) - -## [v1.8.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.4) (2019-03-13) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.3...v1.8.4) - -**Closed issues:** - -- Invalid swagger generated for bodies with repeated fields [\#906](https://github.com/grpc-ecosystem/grpc-gateway/issues/906) - -**Merged pull requests:** - -- Generate changelog for 1.8.4 [\#908](https://github.com/grpc-ecosystem/grpc-gateway/pull/908) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Revert "Use collectionFormat multi for query params of repeated fields \(\#902\)" [\#907](https://github.com/grpc-ecosystem/grpc-gateway/pull/907) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- New proposal: support for the google.api.HttpBody [\#904](https://github.com/grpc-ecosystem/grpc-gateway/pull/904) ([wimspaargaren](https://github.com/wimspaargaren)) - -## [v1.8.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.3) (2019-03-11) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.2...v1.8.3) - -**Implemented enhancements:** - -- Feature request from openapi 3: Allow apiKey in cookie [\#900](https://github.com/grpc-ecosystem/grpc-gateway/issues/900) - -**Fixed bugs:** - -- Error while defining enum comments [\#897](https://github.com/grpc-ecosystem/grpc-gateway/issues/897) - -**Closed issues:** - -- Its impossible to send response with non 200 status code [\#901](https://github.com/grpc-ecosystem/grpc-gateway/issues/901) - -**Merged pull requests:** - -- Regenerate changelog for 1.8.3 [\#903](https://github.com/grpc-ecosystem/grpc-gateway/pull/903) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Use collectionFormat multi for query params of repeated fields [\#902](https://github.com/grpc-ecosystem/grpc-gateway/pull/902) ([bmperrea](https://github.com/bmperrea)) - -## [v1.8.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.2) (2019-03-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.1...v1.8.2) - -**Implemented enhancements:** - -- Update the build environment Dockerfile to Go 1.12 [\#885](https://github.com/grpc-ecosystem/grpc-gateway/issues/885) - -**Fixed bugs:** - -- Change in behavior of streaming request body \(1.4.1 vs 1.8.1\) [\#894](https://github.com/grpc-ecosystem/grpc-gateway/issues/894) -- Cannot download 1.8.0 with modules [\#886](https://github.com/grpc-ecosystem/grpc-gateway/issues/886) - -**Closed issues:** - -- Description and title ignored when field is not a scaler value type [\#892](https://github.com/grpc-ecosystem/grpc-gateway/issues/892) - -**Merged pull requests:** - -- Regenerate changelog for 1.8.2 [\#899](https://github.com/grpc-ecosystem/grpc-gateway/pull/899) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- 897 fixing problem while generating swagger documentation for enum messages [\#898](https://github.com/grpc-ecosystem/grpc-gateway/pull/898) ([fahernandez](https://github.com/fahernandez)) -- bugfix: disable IOReaderFactory for streaming requests [\#896](https://github.com/grpc-ecosystem/grpc-gateway/pull/896) ([happyalu](https://github.com/happyalu)) -- bazel: Use new ProtoInfo provider [\#893](https://github.com/grpc-ecosystem/grpc-gateway/pull/893) ([drigz](https://github.com/drigz)) -- README: Add some nicer looking badges [\#890](https://github.com/grpc-ecosystem/grpc-gateway/pull/890) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Upgrade generator and runtime versions [\#889](https://github.com/grpc-ecosystem/grpc-gateway/pull/889) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.8.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.1) (2019-03-02) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.1-pre1...v1.8.1) - -**Merged pull requests:** - -- Generate changelog for v1.8.1 [\#887](https://github.com/grpc-ecosystem/grpc-gateway/pull/887) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.8.1-pre1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.1-pre1) (2019-03-01) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.8.0...v1.8.1-pre1) - -**Merged pull requests:** - -- CI: fix release builds [\#884](https://github.com/grpc-ecosystem/grpc-gateway/pull/884) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.8.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.8.0) (2019-03-01) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.7.0...v1.8.0) - -**Implemented enhancements:** - -- Support swagger annotations for default and required fields [\#851](https://github.com/grpc-ecosystem/grpc-gateway/issues/851) -- Support go modules [\#755](https://github.com/grpc-ecosystem/grpc-gateway/issues/755) - -**Fixed bugs:** - -- inconsistent identifier capitalization between protoc-gen-go and protoc-gen-grpc-gateway [\#683](https://github.com/grpc-ecosystem/grpc-gateway/issues/683) - -**Closed issues:** - -- Bazel incompatible changes [\#873](https://github.com/grpc-ecosystem/grpc-gateway/issues/873) -- Swagger has not existed for four years [\#872](https://github.com/grpc-ecosystem/grpc-gateway/issues/872) -- Improve README with AWS API Gateway findings [\#868](https://github.com/grpc-ecosystem/grpc-gateway/issues/868) -- swagger error [\#867](https://github.com/grpc-ecosystem/grpc-gateway/issues/867) -- A question about generating file protoc-gen-grpc-gateway/gengateway/template.go [\#864](https://github.com/grpc-ecosystem/grpc-gateway/issues/864) -- Repeated field documentation is overwritten by fields comments [\#863](https://github.com/grpc-ecosystem/grpc-gateway/issues/863) -- Using dep to depend on specific revision of golang/protobuf is causing transative dependency problems for users [\#829](https://github.com/grpc-ecosystem/grpc-gateway/issues/829) -- Mac OS X - Note about your tutorial [\#787](https://github.com/grpc-ecosystem/grpc-gateway/issues/787) -- Returning 302 redirect as response [\#607](https://github.com/grpc-ecosystem/grpc-gateway/issues/607) - -**Merged pull requests:** - -- Generate changelog for 1.8.0 [\#883](https://github.com/grpc-ecosystem/grpc-gateway/pull/883) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Read only support [\#882](https://github.com/grpc-ecosystem/grpc-gateway/pull/882) ([hypnoce](https://github.com/hypnoce)) -- Add fqn\_for\_swagger\_name option [\#881](https://github.com/grpc-ecosystem/grpc-gateway/pull/881) ([hypnoce](https://github.com/hypnoce)) -- go.mod: update grpc from v1.16.0 to v1.17.0 [\#880](https://github.com/grpc-ecosystem/grpc-gateway/pull/880) ([klim0v](https://github.com/klim0v)) -- Fix parameter names when using JSON names. [\#879](https://github.com/grpc-ecosystem/grpc-gateway/pull/879) ([brocaar](https://github.com/brocaar)) -- protoc-gen-swagger: return error when encoding swagger file [\#878](https://github.com/grpc-ecosystem/grpc-gateway/pull/878) ([elliots](https://github.com/elliots)) -- protoc-gen-grpc-gateway: use context package from stdlib [\#876](https://github.com/grpc-ecosystem/grpc-gateway/pull/876) ([simonpasquier](https://github.com/simonpasquier)) -- Run buildifer on WORKSPACE [\#875](https://github.com/grpc-ecosystem/grpc-gateway/pull/875) ([achew22](https://github.com/achew22)) -- Upgrade to rules\_go 0.17.0 [\#874](https://github.com/grpc-ecosystem/grpc-gateway/pull/874) ([achew22](https://github.com/achew22)) -- Switch to go modules [\#870](https://github.com/grpc-ecosystem/grpc-gateway/pull/870) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- 868 improving README with AWS API gateway findings [\#869](https://github.com/grpc-ecosystem/grpc-gateway/pull/869) ([fahernandez](https://github.com/fahernandez)) -- Updated Service, Method, Message Identifiers to be CamelCased [\#866](https://github.com/grpc-ecosystem/grpc-gateway/pull/866) ([waveywaves](https://github.com/waveywaves)) -- 863 adding swagger annotation support for enum and nested objects [\#865](https://github.com/grpc-ecosystem/grpc-gateway/pull/865) ([fahernandez](https://github.com/fahernandez)) -- Update CI badge link in documentation [\#862](https://github.com/grpc-ecosystem/grpc-gateway/pull/862) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- protoc-gen-swagger: add the package name to the tags field of each endpoint if the package name exists in the proto file [\#860](https://github.com/grpc-ecosystem/grpc-gateway/pull/860) ([zwcn](https://github.com/zwcn)) - -## [v1.7.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.7.0) (2019-01-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.4...v1.7.0) - -**Closed issues:** - -- Error to build project with go module [\#846](https://github.com/grpc-ecosystem/grpc-gateway/issues/846) -- Result of gateway's Stream response is wrapped with "result" [\#579](https://github.com/grpc-ecosystem/grpc-gateway/issues/579) - -**Merged pull requests:** - -- Generate changelog for 1.7.0 [\#858](https://github.com/grpc-ecosystem/grpc-gateway/pull/858) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Use github.com/golang/protobuf/descriptor ForMessage and fix CI from not rebasing [\#857](https://github.com/grpc-ecosystem/grpc-gateway/pull/857) ([mechinn](https://github.com/mechinn)) -- marshal\_jsonpb: add check for slice sub types implementing proto.Message [\#856](https://github.com/grpc-ecosystem/grpc-gateway/pull/856) ([abice](https://github.com/abice)) -- Added WithDisablePathLengthFallback option \(to fix issue \#447\) [\#855](https://github.com/grpc-ecosystem/grpc-gateway/pull/855) ([UladzimirTrehubenka](https://github.com/UladzimirTrehubenka)) -- marshal\_jsonpb: Added nil slice default value [\#854](https://github.com/grpc-ecosystem/grpc-gateway/pull/854) ([abice](https://github.com/abice)) -- Add flag 'allow\_repeated\_fields\_in\_body' to protoc-gen-swagger [\#853](https://github.com/grpc-ecosystem/grpc-gateway/pull/853) ([abice](https://github.com/abice)) -- Adding support for default and required swagger annotation fields. [\#852](https://github.com/grpc-ecosystem/grpc-gateway/pull/852) ([fahernandez](https://github.com/fahernandez)) -- make generated swagger json match gateway behavior for server streams [\#850](https://github.com/grpc-ecosystem/grpc-gateway/pull/850) ([mechinn](https://github.com/mechinn)) -- test: "fill attributes of swagger schema if provided for messages" [\#849](https://github.com/grpc-ecosystem/grpc-gateway/pull/849) ([srenatus](https://github.com/srenatus)) -- Fix the generated URL in the changelog [\#845](https://github.com/grpc-ecosystem/grpc-gateway/pull/845) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.6.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.4) (2019-01-08) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.3...v1.6.4) - -**Closed issues:** - -- feature request: opt-out fieldmask behaviour in patch [\#839](https://github.com/grpc-ecosystem/grpc-gateway/issues/839) -- gRPC streaming keepAlive doesn't work with docker swarm [\#838](https://github.com/grpc-ecosystem/grpc-gateway/issues/838) - -**Merged pull requests:** - -- Generate changelog for 1.6.4 [\#843](https://github.com/grpc-ecosystem/grpc-gateway/pull/843) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update bazel dependencies [\#841](https://github.com/grpc-ecosystem/grpc-gateway/pull/841) ([achew22](https://github.com/achew22)) -- gengateway: allow opting out patch feature [\#840](https://github.com/grpc-ecosystem/grpc-gateway/pull/840) ([glerchundi](https://github.com/glerchundi)) -- Fix the url of gRPC timeouts on README.md [\#836](https://github.com/grpc-ecosystem/grpc-gateway/pull/836) ([royeo](https://github.com/royeo)) - -## [v1.6.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.3) (2018-12-21) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.2...v1.6.3) - -**Closed issues:** - -- Issue with google.protobuf.Empty representation in swagger file [\#831](https://github.com/grpc-ecosystem/grpc-gateway/issues/831) - -**Merged pull requests:** - -- Regenerate changelog for 1.6.3 [\#835](https://github.com/grpc-ecosystem/grpc-gateway/pull/835) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- protoc-gen-swagger: check typeIndex when typeName is Method [\#833](https://github.com/grpc-ecosystem/grpc-gateway/pull/833) ([hexfusion](https://github.com/hexfusion)) -- Replace complicated circle CI release with goreleaser. [\#828](https://github.com/grpc-ecosystem/grpc-gateway/pull/828) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Stop the publishing recursion [\#827](https://github.com/grpc-ecosystem/grpc-gateway/pull/827) ([achew22](https://github.com/achew22)) - -## [v1.6.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.2) (2018-12-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.0...v1.6.2) - -## [v1.6.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.0) (2018-12-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.6.1...v1.6.0) - -## [v1.6.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.6.1) (2018-12-07) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.5.1...v1.6.1) - -**Implemented enhancements:** - -- Add 'License' message to the annotation proto. [\#644](https://github.com/grpc-ecosystem/grpc-gateway/pull/644) ([ensonic](https://github.com/ensonic)) - -**Fixed bugs:** - -- Cannot return HTTP header using "Grpc-Metadata-" prefix [\#782](https://github.com/grpc-ecosystem/grpc-gateway/issues/782) -- protoc-gen-swagger throws the error: Any JSON doesn't have '@type' [\#771](https://github.com/grpc-ecosystem/grpc-gateway/issues/771) -- proto-gen-swagger: provide default description for HTTP 200 responses [\#766](https://github.com/grpc-ecosystem/grpc-gateway/issues/766) - -**Closed issues:** - -- Please release the repo, IOReaderFactory is not available on the latest release! [\#823](https://github.com/grpc-ecosystem/grpc-gateway/issues/823) -- Bazel CI breaks frequently [\#817](https://github.com/grpc-ecosystem/grpc-gateway/issues/817) -- Unable to add protobuf wrappers in url template option [\#808](https://github.com/grpc-ecosystem/grpc-gateway/issues/808) -- Class 'GPBMetadata\ProtocGenSwagger\Options\Annotations' not found [\#794](https://github.com/grpc-ecosystem/grpc-gateway/issues/794) -- REST gateway over RPCS? [\#789](https://github.com/grpc-ecosystem/grpc-gateway/issues/789) -- Why the rctx is substituted by a new empty context? [\#788](https://github.com/grpc-ecosystem/grpc-gateway/issues/788) -- grpc gateway intercepter [\#785](https://github.com/grpc-ecosystem/grpc-gateway/issues/785) -- "error" and "message" fields in error response [\#768](https://github.com/grpc-ecosystem/grpc-gateway/issues/768) -- Go1.11: http.CloseNotifier is deprecated [\#736](https://github.com/grpc-ecosystem/grpc-gateway/issues/736) -- Access to raw post body [\#652](https://github.com/grpc-ecosystem/grpc-gateway/issues/652) - -**Merged pull requests:** - -- Write version to intermediate file for release publish [\#826](https://github.com/grpc-ecosystem/grpc-gateway/pull/826) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Check out code before calling ghr [\#825](https://github.com/grpc-ecosystem/grpc-gateway/pull/825) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Generate changelog for 1.6.0 [\#824](https://github.com/grpc-ecosystem/grpc-gateway/pull/824) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add filegroup for options proto files [\#821](https://github.com/grpc-ecosystem/grpc-gateway/pull/821) ([kellycampbell](https://github.com/kellycampbell)) -- Added support for more WKT [\#816](https://github.com/grpc-ecosystem/grpc-gateway/pull/816) ([mayankcpdixit](https://github.com/mayankcpdixit)) -- Fix protobuf repository's owner name on README.md [\#814](https://github.com/grpc-ecosystem/grpc-gateway/pull/814) ([micnncim](https://github.com/micnncim)) -- Revert "Adding support for more well known types in descriptor" [\#813](https://github.com/grpc-ecosystem/grpc-gateway/pull/813) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Feature/patch2 rebased [\#812](https://github.com/grpc-ecosystem/grpc-gateway/pull/812) ([razamiDev](https://github.com/razamiDev)) -- Correct wellKnownTypeConv function references [\#811](https://github.com/grpc-ecosystem/grpc-gateway/pull/811) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Adding support for more well known types in descriptor [\#809](https://github.com/grpc-ecosystem/grpc-gateway/pull/809) ([mayankcpdixit](https://github.com/mayankcpdixit)) -- Make Bazel CI failures clearer [\#807](https://github.com/grpc-ecosystem/grpc-gateway/pull/807) ([drigz](https://github.com/drigz)) -- fix bug: the resource name of custom method doesn't be retained [\#805](https://github.com/grpc-ecosystem/grpc-gateway/pull/805) ([ch3rub1m](https://github.com/ch3rub1m)) -- Update rules\_go and gazelle [\#802](https://github.com/grpc-ecosystem/grpc-gateway/pull/802) ([drigz](https://github.com/drigz)) -- Properly omit wrappers and google.protobuf.empty from swagger definitions [\#801](https://github.com/grpc-ecosystem/grpc-gateway/pull/801) ([birdayz](https://github.com/birdayz)) -- protoc-gen-swagger: honor example field of message option [\#799](https://github.com/grpc-ecosystem/grpc-gateway/pull/799) ([birdayz](https://github.com/birdayz)) -- Use newer Bazel repo rules [\#798](https://github.com/grpc-ecosystem/grpc-gateway/pull/798) ([drigz](https://github.com/drigz)) -- Run buildifer on Bazel files [\#797](https://github.com/grpc-ecosystem/grpc-gateway/pull/797) ([drigz](https://github.com/drigz)) -- protoc-gen-swagger: Fix formatting of license field definition. [\#796](https://github.com/grpc-ecosystem/grpc-gateway/pull/796) ([ivucica](https://github.com/ivucica)) -- Remove http.CloseNotifier code from Go \>= 1.7 builds [\#795](https://github.com/grpc-ecosystem/grpc-gateway/pull/795) ([SpikesDivZero](https://github.com/SpikesDivZero)) -- ci: add job for building binaries for releases [\#793](https://github.com/grpc-ecosystem/grpc-gateway/pull/793) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add documentation to the rest of methods on the examples [\#791](https://github.com/grpc-ecosystem/grpc-gateway/pull/791) ([rvegas](https://github.com/rvegas)) -- fix \#782 Cannot return HTTP header using "Grpc-Metadata-" prefix [\#784](https://github.com/grpc-ecosystem/grpc-gateway/pull/784) ([joelclouddistrict](https://github.com/joelclouddistrict)) -- Fix CircleCI configuration [\#777](https://github.com/grpc-ecosystem/grpc-gateway/pull/777) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- tests: s/iotuil/ioutil/ typo [\#775](https://github.com/grpc-ecosystem/grpc-gateway/pull/775) ([srenatus](https://github.com/srenatus)) -- Replace travis with CircleCI for easier testing [\#772](https://github.com/grpc-ecosystem/grpc-gateway/pull/772) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.5.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.5.1) (2018-10-02) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.5.0...v1.5.1) - -**Implemented enhancements:** - -- protobuf well known types aren't represented in swagger output correctly [\#160](https://github.com/grpc-ecosystem/grpc-gateway/issues/160) - -**Fixed bugs:** - -- URLs using verb no longer work after upgrading to v1.5.0 [\#760](https://github.com/grpc-ecosystem/grpc-gateway/issues/760) -- protoc-gen-swagger doesn't generate any request objects for GET/DELETE [\#747](https://github.com/grpc-ecosystem/grpc-gateway/issues/747) - -**Closed issues:** - -- how to get proper fields name for method [\#745](https://github.com/grpc-ecosystem/grpc-gateway/issues/745) -- Make a new release [\#733](https://github.com/grpc-ecosystem/grpc-gateway/issues/733) -- how to provide interface type inside proto for grpc-gateway [\#723](https://github.com/grpc-ecosystem/grpc-gateway/issues/723) -- Is there any way we can remove fields from the response json in grpc-gateway? [\#710](https://github.com/grpc-ecosystem/grpc-gateway/issues/710) -- How to write tests for the gateway? [\#699](https://github.com/grpc-ecosystem/grpc-gateway/issues/699) -- protoc-gen-swagger: No comments for path parameters [\#694](https://github.com/grpc-ecosystem/grpc-gateway/issues/694) -- Can you differentiate between an empty map vs field not provided? [\#552](https://github.com/grpc-ecosystem/grpc-gateway/issues/552) -- import\_path option not working as intended [\#536](https://github.com/grpc-ecosystem/grpc-gateway/issues/536) - -**Merged pull requests:** - -- Add default value for swagger 200 response [\#767](https://github.com/grpc-ecosystem/grpc-gateway/pull/767) ([johnchildren](https://github.com/johnchildren)) -- Generate changelog for release v1.5.1 [\#764](https://github.com/grpc-ecosystem/grpc-gateway/pull/764) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Revert \#708 since it breaks backwards compatibility [\#761](https://github.com/grpc-ecosystem/grpc-gateway/pull/761) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Update README.md [\#757](https://github.com/grpc-ecosystem/grpc-gateway/pull/757) ([wora](https://github.com/wora)) -- Added camelCase Example [\#751](https://github.com/grpc-ecosystem/grpc-gateway/pull/751) ([srikrsna](https://github.com/srikrsna)) -- Add more guidance to issue template [\#750](https://github.com/grpc-ecosystem/grpc-gateway/pull/750) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.5.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.5.0) (2018-09-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.4.1...v1.5.0) - -**Fixed bugs:** - -- forwarding binary metadata is broken [\#218](https://github.com/grpc-ecosystem/grpc-gateway/issues/218) - -**Closed issues:** - -- something wrong with service [\#748](https://github.com/grpc-ecosystem/grpc-gateway/issues/748) -- Support for repeated path parameters [\#741](https://github.com/grpc-ecosystem/grpc-gateway/issues/741) -- Uint64 is represented as type:"string" in the swagger docs. [\#735](https://github.com/grpc-ecosystem/grpc-gateway/issues/735) -- autoregister all provided services [\#732](https://github.com/grpc-ecosystem/grpc-gateway/issues/732) -- `go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` fails on clean environment [\#731](https://github.com/grpc-ecosystem/grpc-gateway/issues/731) -- format tool [\#729](https://github.com/grpc-ecosystem/grpc-gateway/issues/729) -- how to do tls auth in grpc+grpc-gateway [\#727](https://github.com/grpc-ecosystem/grpc-gateway/issues/727) -- Let service choose it's own marshaller [\#725](https://github.com/grpc-ecosystem/grpc-gateway/issues/725) -- why gateway proxy can not distribute the http request to local server? prompt 404 [\#722](https://github.com/grpc-ecosystem/grpc-gateway/issues/722) -- enc.SetIndent undefined \(type \*json.Encoder has no field or method SetIndent\) [\#717](https://github.com/grpc-ecosystem/grpc-gateway/issues/717) -- Travis CI fails on master branch [\#714](https://github.com/grpc-ecosystem/grpc-gateway/issues/714) -- google/protobuf/descriptor.proto: File not found. ? [\#713](https://github.com/grpc-ecosystem/grpc-gateway/issues/713) -- APIs with grpc-gateway \(S3,WebDav\) [\#709](https://github.com/grpc-ecosystem/grpc-gateway/issues/709) -- FR: Promote a field in the returned JSON message to a top-level returned value [\#707](https://github.com/grpc-ecosystem/grpc-gateway/issues/707) -- Does grpc-gateway support the HTTP 2.0 protocol? [\#703](https://github.com/grpc-ecosystem/grpc-gateway/issues/703) -- The swagger plugin couldn’t distinguish two rpcs if we use the resource name design style. [\#702](https://github.com/grpc-ecosystem/grpc-gateway/issues/702) -- Handling of optional parameters [\#697](https://github.com/grpc-ecosystem/grpc-gateway/issues/697) -- Vendor dependencies [\#689](https://github.com/grpc-ecosystem/grpc-gateway/issues/689) -- Output swagger seems incorrect [\#688](https://github.com/grpc-ecosystem/grpc-gateway/issues/688) -- how to use this in java? [\#685](https://github.com/grpc-ecosystem/grpc-gateway/issues/685) -- r [\#684](https://github.com/grpc-ecosystem/grpc-gateway/issues/684) -- url query parameters should support semicolon in value field [\#680](https://github.com/grpc-ecosystem/grpc-gateway/issues/680) -- how to install swagger-codegen@2.2.2? [\#670](https://github.com/grpc-ecosystem/grpc-gateway/issues/670) -- Impossible to use gogo/protobuf registered types in gRPC Status errors [\#576](https://github.com/grpc-ecosystem/grpc-gateway/issues/576) -- Path parameters can't have URL encoded values [\#566](https://github.com/grpc-ecosystem/grpc-gateway/issues/566) -- docs: show example of tracing over http-\>grpc boundary [\#348](https://github.com/grpc-ecosystem/grpc-gateway/issues/348) -- Response codes and descriptions in Swagger docs [\#304](https://github.com/grpc-ecosystem/grpc-gateway/issues/304) - -**Merged pull requests:** - -- Generate release notes for v1.5.0 [\#749](https://github.com/grpc-ecosystem/grpc-gateway/pull/749) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Add missing modules to browser example [\#743](https://github.com/grpc-ecosystem/grpc-gateway/pull/743) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Added support for path param repeated fields [\#742](https://github.com/grpc-ecosystem/grpc-gateway/pull/742) ([maros7](https://github.com/maros7)) -- Add support for enum path parameters [\#738](https://github.com/grpc-ecosystem/grpc-gateway/pull/738) ([maros7](https://github.com/maros7)) -- Add support to forward grpc binary metadata [\#737](https://github.com/grpc-ecosystem/grpc-gateway/pull/737) ([timonwong](https://github.com/timonwong)) -- Lock versions to tags where possible [\#724](https://github.com/grpc-ecosystem/grpc-gateway/pull/724) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- install-protoc was checking version from wrong executable path [\#721](https://github.com/grpc-ecosystem/grpc-gateway/pull/721) ([temoto](https://github.com/temoto)) -- Fix naming convention of JSON Schema didn't matched with the spec [\#719](https://github.com/grpc-ecosystem/grpc-gateway/pull/719) ([co3k](https://github.com/co3k)) -- Add message field to the error message emitted by grpc-gateway [\#718](https://github.com/grpc-ecosystem/grpc-gateway/pull/718) ([ffredsh](https://github.com/ffredsh)) -- Fix up examples [\#715](https://github.com/grpc-ecosystem/grpc-gateway/pull/715) ([achew22](https://github.com/achew22)) -- Support HttpRule with field response [\#712](https://github.com/grpc-ecosystem/grpc-gateway/pull/712) ([doroginin](https://github.com/doroginin)) -- Make support paths option [\#711](https://github.com/grpc-ecosystem/grpc-gateway/pull/711) ([izumin5210](https://github.com/izumin5210)) -- Add test case and proposed fix for path component with trailing colon \(and string\) [\#708](https://github.com/grpc-ecosystem/grpc-gateway/pull/708) ([jfhamlin](https://github.com/jfhamlin)) -- add OpenTracing support to docs [\#705](https://github.com/grpc-ecosystem/grpc-gateway/pull/705) ([theRealWardo](https://github.com/theRealWardo)) -- add support for resource name in swagger plugin \(\#702\) [\#704](https://github.com/grpc-ecosystem/grpc-gateway/pull/704) ([ch3rub1m](https://github.com/ch3rub1m)) -- Add explicit dependency versions [\#696](https://github.com/grpc-ecosystem/grpc-gateway/pull/696) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- protoc-gen-swagger: support all well-known wrapper types [\#695](https://github.com/grpc-ecosystem/grpc-gateway/pull/695) ([jriecken](https://github.com/jriecken)) -- runtime: add support for time types in query parameters [\#693](https://github.com/grpc-ecosystem/grpc-gateway/pull/693) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Populate swagger method parameter description from message comments [\#692](https://github.com/grpc-ecosystem/grpc-gateway/pull/692) ([co3k](https://github.com/co3k)) -- Updated doc and comments to reflect Permanent HTTP header keys prefixing [\#691](https://github.com/grpc-ecosystem/grpc-gateway/pull/691) ([crozzy](https://github.com/crozzy)) -- protoc-gen-swagger: support JSON Schema Validation properties and add openapiv2\_field option [\#687](https://github.com/grpc-ecosystem/grpc-gateway/pull/687) ([co3k](https://github.com/co3k)) -- Bazel expose protoc-gen-grpc-gateway [\#668](https://github.com/grpc-ecosystem/grpc-gateway/pull/668) ([emcfarlane](https://github.com/emcfarlane)) -- Fix protoc-gen-swagger to output gRPC method summary and descriptions as Swagger's them [\#667](https://github.com/grpc-ecosystem/grpc-gateway/pull/667) ([co3k](https://github.com/co3k)) -- Allow explicit empty security definition to overwrite existing definitions [\#666](https://github.com/grpc-ecosystem/grpc-gateway/pull/666) ([co3k](https://github.com/co3k)) -- protoc-gen-swagger: Add ability to specify custom response objects [\#663](https://github.com/grpc-ecosystem/grpc-gateway/pull/663) ([johanbrandhorst](https://github.com/johanbrandhorst)) - -## [v1.4.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.4.1) (2018-05-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.4.0...v1.4.1) - -**Closed issues:** - -- Next release ? [\#605](https://github.com/grpc-ecosystem/grpc-gateway/issues/605) - -**Merged pull requests:** - -- Generate release notes for v1.4.1 [\#659](https://github.com/grpc-ecosystem/grpc-gateway/pull/659) ([achew22](https://github.com/achew22)) -- Translate gRPC FailedPrecondition as HTTP PreconditionFailed [\#657](https://github.com/grpc-ecosystem/grpc-gateway/pull/657) ([slomek](https://github.com/slomek)) - -## [v1.4.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.4.0) (2018-05-20) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.1...v1.4.0) - -**Implemented enhancements:** - -- customize the error return [\#405](https://github.com/grpc-ecosystem/grpc-gateway/issues/405) -- Support map type in query string [\#316](https://github.com/grpc-ecosystem/grpc-gateway/issues/316) -- gRPC gateway Bazel build rules [\#66](https://github.com/grpc-ecosystem/grpc-gateway/issues/66) -- Support bytes fields in path parameter [\#5](https://github.com/grpc-ecosystem/grpc-gateway/issues/5) - -**Closed issues:** - -- the protoc\_gen\_swagger bazel rule generates non working import path. [\#633](https://github.com/grpc-ecosystem/grpc-gateway/issues/633) -- code.NotFound should return a 404 instead of a 405 [\#630](https://github.com/grpc-ecosystem/grpc-gateway/issues/630) -- field in query path not found [\#629](https://github.com/grpc-ecosystem/grpc-gateway/issues/629) -- how to use client pool in the gateway? [\#612](https://github.com/grpc-ecosystem/grpc-gateway/issues/612) -- pass http request uri to grpc server [\#587](https://github.com/grpc-ecosystem/grpc-gateway/issues/587) -- bidi streams have racy read caused by goroutine that closes over local variable [\#583](https://github.com/grpc-ecosystem/grpc-gateway/issues/583) -- Streamed response is not valid json \(or: is this the expected format?\) [\#581](https://github.com/grpc-ecosystem/grpc-gateway/issues/581) -- Import "google/api/annotations.proto" was not found or had errors. [\#574](https://github.com/grpc-ecosystem/grpc-gateway/issues/574) -- is there has a way to let grpc-gateway server support multiple endpoints [\#573](https://github.com/grpc-ecosystem/grpc-gateway/issues/573) -- would it be possible to avoid vendoring "third\_party/googleapis/" [\#572](https://github.com/grpc-ecosystem/grpc-gateway/issues/572) -- Is there anyway to output the access log of grpc gateway [\#556](https://github.com/grpc-ecosystem/grpc-gateway/issues/556) -- proto: no slice oenc for \*reflect.rtype = \[\]\*reflect.rtype [\#551](https://github.com/grpc-ecosystem/grpc-gateway/issues/551) -- autoreconf not found [\#549](https://github.com/grpc-ecosystem/grpc-gateway/issues/549) -- \[feature\]combine expvar into grpc-gateway [\#542](https://github.com/grpc-ecosystem/grpc-gateway/issues/542) -- Source code still imports "golang.org/x/net/context" [\#533](https://github.com/grpc-ecosystem/grpc-gateway/issues/533) -- Incorrect error message when execute protoc-gen-grpc-gateway to HTTP GET method with BODY [\#531](https://github.com/grpc-ecosystem/grpc-gateway/issues/531) -- add support for the google.api.HttpBody proto as a request [\#528](https://github.com/grpc-ecosystem/grpc-gateway/issues/528) -- Prefixed model names in generated swagger spec [\#525](https://github.com/grpc-ecosystem/grpc-gateway/issues/525) -- Better format for error.message in stream [\#519](https://github.com/grpc-ecosystem/grpc-gateway/issues/519) -- Getting this on go get . in the src directory: HelloService.pb.go:20:8 - no Go files in \go\src\google\api [\#518](https://github.com/grpc-ecosystem/grpc-gateway/issues/518) -- ci: set up codecov [\#513](https://github.com/grpc-ecosystem/grpc-gateway/issues/513) -- protoc-gen-swagger not using description field of info swagger object [\#511](https://github.com/grpc-ecosystem/grpc-gateway/issues/511) -- Cut a minor release for https://github.com/grpc-ecosystem/grpc-gateway/issues/495 [\#506](https://github.com/grpc-ecosystem/grpc-gateway/issues/506) -- bug: uncapitalized service name causes runtime error unknown function in service.pb.gw.go [\#484](https://github.com/grpc-ecosystem/grpc-gateway/issues/484) -- RESOURCE\_EXHAUSTED -\> 503 [\#431](https://github.com/grpc-ecosystem/grpc-gateway/issues/431) -- Adding authentication definitions to generated swagger files [\#428](https://github.com/grpc-ecosystem/grpc-gateway/issues/428) -- Move to stdlib context over x/net/context [\#326](https://github.com/grpc-ecosystem/grpc-gateway/issues/326) -- deprecate 1.6 and embrace \(\*http.Request\).Context by default [\#313](https://github.com/grpc-ecosystem/grpc-gateway/issues/313) - -**Merged pull requests:** - -- Generate a single swagger definition on demand [\#658](https://github.com/grpc-ecosystem/grpc-gateway/pull/658) ([achew22](https://github.com/achew22)) -- Regenerate example files [\#656](https://github.com/grpc-ecosystem/grpc-gateway/pull/656) ([achew22](https://github.com/achew22)) -- Add v1.4.0 changelog [\#655](https://github.com/grpc-ecosystem/grpc-gateway/pull/655) ([achew22](https://github.com/achew22)) -- Replace the deprecated grpclog.Printf with grpclog.Infof [\#654](https://github.com/grpc-ecosystem/grpc-gateway/pull/654) ([a-robinson](https://github.com/a-robinson)) -- Add README.md for examples [\#645](https://github.com/grpc-ecosystem/grpc-gateway/pull/645) ([liukgg](https://github.com/liukgg)) -- JSONPb marshaler panics if input is nil interface [\#639](https://github.com/grpc-ecosystem/grpc-gateway/pull/639) ([jhump](https://github.com/jhump)) -- provide access to underlying \*json.Decoder from JSONPb.NewDecoder [\#637](https://github.com/grpc-ecosystem/grpc-gateway/pull/637) ([jhump](https://github.com/jhump)) -- fix compile errors caused by protobuf finally merging their dev branch to master [\#636](https://github.com/grpc-ecosystem/grpc-gateway/pull/636) ([jhump](https://github.com/jhump)) -- Generate import mappings. [\#635](https://github.com/grpc-ecosystem/grpc-gateway/pull/635) ([ensonic](https://github.com/ensonic)) -- Add support for the grpc\_api\_configuration option in the bazel rule. [\#632](https://github.com/grpc-ecosystem/grpc-gateway/pull/632) ([ensonic](https://github.com/ensonic)) -- Use repo relative labels in protoc-gen-swagger [\#631](https://github.com/grpc-ecosystem/grpc-gateway/pull/631) ([achew22](https://github.com/achew22)) -- Correct dependencies in Makefile [\#626](https://github.com/grpc-ecosystem/grpc-gateway/pull/626) ([yugui](https://github.com/yugui)) -- Avoid timing issues in the integration tests [\#624](https://github.com/grpc-ecosystem/grpc-gateway/pull/624) ([yugui](https://github.com/yugui)) -- Fix typos in gRPC API Configuration usage documentation [\#623](https://github.com/grpc-ecosystem/grpc-gateway/pull/623) ([hacst](https://github.com/hacst)) -- Skip unnecessary steps in USE\_BAZEL builds on TravisCI [\#622](https://github.com/grpc-ecosystem/grpc-gateway/pull/622) ([yugui](https://github.com/yugui)) -- Support param for field from Oneof definition. [\#621](https://github.com/grpc-ecosystem/grpc-gateway/pull/621) ([bonafideyan](https://github.com/bonafideyan)) -- Fixes file integrity errors on TravisCI [\#619](https://github.com/grpc-ecosystem/grpc-gateway/pull/619) ([yugui](https://github.com/yugui)) -- Reorganize examples [\#618](https://github.com/grpc-ecosystem/grpc-gateway/pull/618) ([yugui](https://github.com/yugui)) -- Update dependency declarations in the Makefile [\#617](https://github.com/grpc-ecosystem/grpc-gateway/pull/617) ([yugui](https://github.com/yugui)) -- Support delete method in swagger generator [\#616](https://github.com/grpc-ecosystem/grpc-gateway/pull/616) ([beerose](https://github.com/beerose)) -- feat\(bazel\): Add rule for generating .swagger.json files [\#613](https://github.com/grpc-ecosystem/grpc-gateway/pull/613) ([mrmeku](https://github.com/mrmeku)) -- Support UNIX domain socket in the example servers [\#609](https://github.com/grpc-ecosystem/grpc-gateway/pull/609) ([yugui](https://github.com/yugui)) -- misspelling [\#601](https://github.com/grpc-ecosystem/grpc-gateway/pull/601) ([chemidy](https://github.com/chemidy)) -- Pulled out parseReq func into a generic package + tests [\#600](https://github.com/grpc-ecosystem/grpc-gateway/pull/600) ([f0rmiga](https://github.com/f0rmiga)) -- Added Bazel support [\#599](https://github.com/grpc-ecosystem/grpc-gateway/pull/599) ([f0rmiga](https://github.com/f0rmiga)) -- Add basic docs section [\#597](https://github.com/grpc-ecosystem/grpc-gateway/pull/597) ([achew22](https://github.com/achew22)) -- Upgrade to go1.10 and regenerate [\#596](https://github.com/grpc-ecosystem/grpc-gateway/pull/596) ([achew22](https://github.com/achew22)) -- Support cases where the request is done with transfer-encoding chunked [\#589](https://github.com/grpc-ecosystem/grpc-gateway/pull/589) ([jacksontj](https://github.com/jacksontj)) -- Support multiple metadata annotators [\#586](https://github.com/grpc-ecosystem/grpc-gateway/pull/586) ([dmacthedestroyer](https://github.com/dmacthedestroyer)) -- Changed to use more appropriate http status code for ResourceExhausted [\#580](https://github.com/grpc-ecosystem/grpc-gateway/pull/580) ([eleniums](https://github.com/eleniums)) -- Stop marshalling any.Any types unnecessarily. [\#577](https://github.com/grpc-ecosystem/grpc-gateway/pull/577) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- fix racy access of err variable [\#575](https://github.com/grpc-ecosystem/grpc-gateway/pull/575) ([jhump](https://github.com/jhump)) -- option to tweak generated Register\* function names [\#571](https://github.com/grpc-ecosystem/grpc-gateway/pull/571) ([jhump](https://github.com/jhump)) -- runtime: return 503 not 403 with ResourceExhausted. [\#569](https://github.com/grpc-ecosystem/grpc-gateway/pull/569) ([hexfusion](https://github.com/hexfusion)) -- \[\]byte in query now uses base64.StdEncoding [\#565](https://github.com/grpc-ecosystem/grpc-gateway/pull/565) ([lucasvo](https://github.com/lucasvo)) -- Add 3rd party rpc protos in order to have access to status and error [\#563](https://github.com/grpc-ecosystem/grpc-gateway/pull/563) ([rvegas](https://github.com/rvegas)) -- Add details to stream error response [\#561](https://github.com/grpc-ecosystem/grpc-gateway/pull/561) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- fix noenc error by fixing Details error field [\#557](https://github.com/grpc-ecosystem/grpc-gateway/pull/557) ([srenatus](https://github.com/srenatus)) -- error details: add @type key by switching to any.Any [\#553](https://github.com/grpc-ecosystem/grpc-gateway/pull/553) ([srenatus](https://github.com/srenatus)) -- Add a FAQ [\#550](https://github.com/grpc-ecosystem/grpc-gateway/pull/550) ([achew22](https://github.com/achew22)) -- Add security fields support to protoc-gen-swagger [\#547](https://github.com/grpc-ecosystem/grpc-gateway/pull/547) ([ivucica](https://github.com/ivucica)) -- Omit well-known type definitions from swagger output [\#541](https://github.com/grpc-ecosystem/grpc-gateway/pull/541) ([alexleigh](https://github.com/alexleigh)) -- Use importPath to set package name rather than package path. [\#537](https://github.com/grpc-ecosystem/grpc-gateway/pull/537) ([rwlincoln](https://github.com/rwlincoln)) -- Support for map type in query string [\#535](https://github.com/grpc-ecosystem/grpc-gateway/pull/535) ([adamstruck](https://github.com/adamstruck)) -- Fix error message in protoc-gen-grpc-gateway \(for \#531\) [\#532](https://github.com/grpc-ecosystem/grpc-gateway/pull/532) ([budougumi0617](https://github.com/budougumi0617)) -- runtime: support FieldMask as query param [\#529](https://github.com/grpc-ecosystem/grpc-gateway/pull/529) ([glerchundi](https://github.com/glerchundi)) -- Fix decoding empty request body [\#527](https://github.com/grpc-ecosystem/grpc-gateway/pull/527) ([syhpoon](https://github.com/syhpoon)) -- Add description, summary and tags fields in operationObject \(swagger\) [\#526](https://github.com/grpc-ecosystem/grpc-gateway/pull/526) ([devnull-](https://github.com/devnull-)) -- Converts the first letter of service name to uppercase [\#522](https://github.com/grpc-ecosystem/grpc-gateway/pull/522) ([thurt](https://github.com/thurt)) -- Add support for basic gRPC API Configuration YAML files [\#521](https://github.com/grpc-ecosystem/grpc-gateway/pull/521) ([hacst](https://github.com/hacst)) -- Fix travis to only difftest on go 1.9 [\#520](https://github.com/grpc-ecosystem/grpc-gateway/pull/520) ([achew22](https://github.com/achew22)) -- add error details to error json [\#515](https://github.com/grpc-ecosystem/grpc-gateway/pull/515) ([srenatus](https://github.com/srenatus)) -- ci: add codecov [\#514](https://github.com/grpc-ecosystem/grpc-gateway/pull/514) ([tmc](https://github.com/tmc)) -- Generate "Description" and "TermsOfService" fields [\#512](https://github.com/grpc-ecosystem/grpc-gateway/pull/512) ([lukasmalkmus](https://github.com/lukasmalkmus)) -- Release 1.3.1 [\#509](https://github.com/grpc-ecosystem/grpc-gateway/pull/509) ([tmc](https://github.com/tmc)) -- Support mapping bytes to \[\]byte [\#489](https://github.com/grpc-ecosystem/grpc-gateway/pull/489) ([loderunner](https://github.com/loderunner)) -- properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) - -## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) - -**Implemented enhancements:** - -- Support import\_path? [\#443](https://github.com/grpc-ecosystem/grpc-gateway/issues/443) - -**Closed issues:** - -- protoc-gen-swagger missing definition issue [\#504](https://github.com/grpc-ecosystem/grpc-gateway/issues/504) -- Backwards incompatible change to chunked encoding [\#495](https://github.com/grpc-ecosystem/grpc-gateway/issues/495) -- Map of list [\#493](https://github.com/grpc-ecosystem/grpc-gateway/issues/493) -- How to run `makefile` for this repo? [\#491](https://github.com/grpc-ecosystem/grpc-gateway/issues/491) -- all SubConns are in TransientFailure [\#490](https://github.com/grpc-ecosystem/grpc-gateway/issues/490) -- Appengine Standard Environment: "not an Appengine context" [\#487](https://github.com/grpc-ecosystem/grpc-gateway/issues/487) -- Enum Path Parameter to Swagger [\#486](https://github.com/grpc-ecosystem/grpc-gateway/issues/486) -- Should v1.3 be also tagged as v1.3.0? [\#483](https://github.com/grpc-ecosystem/grpc-gateway/issues/483) -- HTTP response is not correct json encoded if the grpc return stream of objects. [\#481](https://github.com/grpc-ecosystem/grpc-gateway/issues/481) -- Support JSON-RPCv2 [\#477](https://github.com/grpc-ecosystem/grpc-gateway/issues/477) -- Naming convention? [\#475](https://github.com/grpc-ecosystem/grpc-gateway/issues/475) -- Request context not being used [\#470](https://github.com/grpc-ecosystem/grpc-gateway/issues/470) -- Generate Swagger documentation [\#469](https://github.com/grpc-ecosystem/grpc-gateway/issues/469) -- Support Request | make: swagger-codegen: Command not found [\#468](https://github.com/grpc-ecosystem/grpc-gateway/issues/468) -- How do you generate a swagger yaml file instead of json? [\#467](https://github.com/grpc-ecosystem/grpc-gateway/issues/467) -- Add default support for proto over http [\#465](https://github.com/grpc-ecosystem/grpc-gateway/issues/465) -- Allow compiling the gateway code to a different go package [\#463](https://github.com/grpc-ecosystem/grpc-gateway/issues/463) -- support google.api.HttpBody [\#457](https://github.com/grpc-ecosystem/grpc-gateway/issues/457) -- \[swagger bug\] with google/protobuf/wrappers.proto [\#453](https://github.com/grpc-ecosystem/grpc-gateway/issues/453) -- The tensorflow serving support RESTful api:{"error":"json: cannot unmarshal object into Go value of type \[\]json.RawMessage","code":3} [\#444](https://github.com/grpc-ecosystem/grpc-gateway/issues/444) -- choose some return fields omit or not omit by configure [\#439](https://github.com/grpc-ecosystem/grpc-gateway/issues/439) -- swagger title and version hardcoded [\#437](https://github.com/grpc-ecosystem/grpc-gateway/issues/437) -- Change the path though http header [\#424](https://github.com/grpc-ecosystem/grpc-gateway/issues/424) -- google/protobuf/descriptor.proto: File not found [\#422](https://github.com/grpc-ecosystem/grpc-gateway/issues/422) -- Output file will not compile if the .proto file does not contain a service with parameters in the url path [\#389](https://github.com/grpc-ecosystem/grpc-gateway/issues/389) -- Scaling support [\#381](https://github.com/grpc-ecosystem/grpc-gateway/issues/381) -- I cannot get the default value from client side [\#380](https://github.com/grpc-ecosystem/grpc-gateway/issues/380) -- Problem with Generated annotations.proto file [\#377](https://github.com/grpc-ecosystem/grpc-gateway/issues/377) -- Release 1.3.0 [\#357](https://github.com/grpc-ecosystem/grpc-gateway/issues/357) -- swagger: Unclear comments' parser behaviour [\#352](https://github.com/grpc-ecosystem/grpc-gateway/issues/352) -- Support semicolon syntax in go\_package protobuf option [\#341](https://github.com/grpc-ecosystem/grpc-gateway/issues/341) -- Add SOAP proxy [\#339](https://github.com/grpc-ecosystem/grpc-gateway/issues/339) -- Support combination of query params and body for POSTs with body: "\*" [\#234](https://github.com/grpc-ecosystem/grpc-gateway/issues/234) -- Interceptor [\#221](https://github.com/grpc-ecosystem/grpc-gateway/issues/221) - -**Merged pull requests:** - -- Add support for --Import\_path [\#507](https://github.com/grpc-ecosystem/grpc-gateway/pull/507) ([achew22](https://github.com/achew22)) -- Fix \#504 Missing Definitions [\#505](https://github.com/grpc-ecosystem/grpc-gateway/pull/505) ([warmans](https://github.com/warmans)) -- Maintain default delimiter of newline [\#497](https://github.com/grpc-ecosystem/grpc-gateway/pull/497) ([jacksontj](https://github.com/jacksontj)) -- Fix gen-swagger to support more well known types [\#496](https://github.com/grpc-ecosystem/grpc-gateway/pull/496) ([shouichi](https://github.com/shouichi)) -- Use golang/protobuf instead of gogo/protobuf [\#494](https://github.com/grpc-ecosystem/grpc-gateway/pull/494) ([shouichi](https://github.com/shouichi)) -- Fix stream delimiters [\#488](https://github.com/grpc-ecosystem/grpc-gateway/pull/488) ([emcfarlane](https://github.com/emcfarlane)) -- ForwardResponseStream status code errors [\#482](https://github.com/grpc-ecosystem/grpc-gateway/pull/482) ([emcfarlane](https://github.com/emcfarlane)) -- protoc-gen-grpc-gateway: flip request\_context default to true [\#474](https://github.com/grpc-ecosystem/grpc-gateway/pull/474) ([srenatus](https://github.com/srenatus)) -- grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) -- Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) - -## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) - -## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) - -**Closed issues:** - -- Extract basic auth from URL [\#480](https://github.com/grpc-ecosystem/grpc-gateway/issues/480) -- Lack of "google/protobuf/descriptor.proto" [\#476](https://github.com/grpc-ecosystem/grpc-gateway/issues/476) -- question: how to indicate whether call is through grpc gateway [\#456](https://github.com/grpc-ecosystem/grpc-gateway/issues/456) -- How to define this restful api using pb? [\#452](https://github.com/grpc-ecosystem/grpc-gateway/issues/452) -- how to output field as an array of json values? [\#449](https://github.com/grpc-ecosystem/grpc-gateway/issues/449) -- How do I override maxMsgSize? [\#445](https://github.com/grpc-ecosystem/grpc-gateway/issues/445) -- OpenAPI spec is generated with duplicated operation IDs. [\#442](https://github.com/grpc-ecosystem/grpc-gateway/issues/442) -- This process seems to generate conflicting code with go-micro [\#440](https://github.com/grpc-ecosystem/grpc-gateway/issues/440) -- any way to let int64 marshal to int not string? [\#438](https://github.com/grpc-ecosystem/grpc-gateway/issues/438) -- Support streaming [\#435](https://github.com/grpc-ecosystem/grpc-gateway/issues/435) -- Update DO NOT EDIT header in generated files [\#433](https://github.com/grpc-ecosystem/grpc-gateway/issues/433) -- generate code use context not "golang.org/x/net/context" [\#430](https://github.com/grpc-ecosystem/grpc-gateway/issues/430) -- Replace \n with spaces in swagger definitions [\#426](https://github.com/grpc-ecosystem/grpc-gateway/issues/426) -- \[question\]Is there any example for http headers process? [\#420](https://github.com/grpc-ecosystem/grpc-gateway/issues/420) -- Is there any way to support a multipart form request? [\#410](https://github.com/grpc-ecosystem/grpc-gateway/issues/410) -- Not able to pass allow\_delete\_body to protoc-gen-grpc-gateway. [\#402](https://github.com/grpc-ecosystem/grpc-gateway/issues/402) -- returned errors should conform to google.rpc.Status [\#399](https://github.com/grpc-ecosystem/grpc-gateway/issues/399) -- Is there any way to generate python gateway code? [\#398](https://github.com/grpc-ecosystem/grpc-gateway/issues/398) -- how to handle arbitrary \(json\) structs [\#395](https://github.com/grpc-ecosystem/grpc-gateway/issues/395) -- \[question\]can give a url with query sting demo? [\#394](https://github.com/grpc-ecosystem/grpc-gateway/issues/394) -- \[question\]the swagger url generated is what? [\#393](https://github.com/grpc-ecosystem/grpc-gateway/issues/393) -- \[Question\] How do I use semantic versions? [\#392](https://github.com/grpc-ecosystem/grpc-gateway/issues/392) -- \[question\]how to run examples? [\#391](https://github.com/grpc-ecosystem/grpc-gateway/issues/391) -- Why does gateway use ServerMetadata? [\#388](https://github.com/grpc-ecosystem/grpc-gateway/issues/388) -- Can't generate code with last version [\#384](https://github.com/grpc-ecosystem/grpc-gateway/issues/384) -- is it ready for production use? [\#382](https://github.com/grpc-ecosystem/grpc-gateway/issues/382) -- Support Google Flatbuffers [\#376](https://github.com/grpc-ecosystem/grpc-gateway/issues/376) -- calling Enum by string name in requests using gogo/protobuf results in error. [\#372](https://github.com/grpc-ecosystem/grpc-gateway/issues/372) -- Definitions containing URLs with trailing slashes won't compile [\#370](https://github.com/grpc-ecosystem/grpc-gateway/issues/370) -- Should metadata annotator include the headers from incoming matcher? [\#368](https://github.com/grpc-ecosystem/grpc-gateway/issues/368) -- metadata.NewOutgoingContext is undefined [\#364](https://github.com/grpc-ecosystem/grpc-gateway/issues/364) -- Why does not gateway forward headers as-is? [\#311](https://github.com/grpc-ecosystem/grpc-gateway/issues/311) -- Question: Why passing context to RegisterMyServiceHandler is required? [\#301](https://github.com/grpc-ecosystem/grpc-gateway/issues/301) -- Allow whitelisting of particular HTTP headers to map to metadata. [\#253](https://github.com/grpc-ecosystem/grpc-gateway/issues/253) -- Swagger definitions don't handle parameters that are not explicitly required in the url [\#159](https://github.com/grpc-ecosystem/grpc-gateway/issues/159) - -**Merged pull requests:** - -- Fix wrong method names [\#603](https://github.com/grpc-ecosystem/grpc-gateway/pull/603) ([yugui](https://github.com/yugui)) -- Streaming forward handler fix chunk encoding [\#479](https://github.com/grpc-ecosystem/grpc-gateway/pull/479) ([emcfarlane](https://github.com/emcfarlane)) -- Fix logic handling primitive wrapper in URL params [\#478](https://github.com/grpc-ecosystem/grpc-gateway/pull/478) ([tgeng](https://github.com/tgeng)) -- runtime: use r.Context\(\) [\#473](https://github.com/grpc-ecosystem/grpc-gateway/pull/473) ([srenatus](https://github.com/srenatus)) -- Optional SourceCodeInfo [\#466](https://github.com/grpc-ecosystem/grpc-gateway/pull/466) ([emcfarlane](https://github.com/emcfarlane)) -- Some steps to fix Travis CI [\#461](https://github.com/grpc-ecosystem/grpc-gateway/pull/461) ([AlekSi](https://github.com/AlekSi)) -- fix 2 typos in Registry.SetPrefix's comment [\#455](https://github.com/grpc-ecosystem/grpc-gateway/pull/455) ([hectorj](https://github.com/hectorj)) -- Add Handler method to pass in client [\#454](https://github.com/grpc-ecosystem/grpc-gateway/pull/454) ([jacksontj](https://github.com/jacksontj)) -- Fallback to JSON name when matching URL parameter. [\#450](https://github.com/grpc-ecosystem/grpc-gateway/pull/450) ([tgeng](https://github.com/tgeng)) -- Update DO NOT EDIT template. [\#434](https://github.com/grpc-ecosystem/grpc-gateway/pull/434) ([AlekSi](https://github.com/AlekSi)) -- Memoise calls to fullyQualifiedNameToSwaggerName to speed it up for large registries [\#421](https://github.com/grpc-ecosystem/grpc-gateway/pull/421) ([peterebden](https://github.com/peterebden)) -- Update Swagger Codegen from 2.1.6 to 2.2.2 [\#415](https://github.com/grpc-ecosystem/grpc-gateway/pull/415) ([yugui](https://github.com/yugui)) -- Return codes.InvalidArgument to rather return HTTP 400 instead of HTTP 500 [\#409](https://github.com/grpc-ecosystem/grpc-gateway/pull/409) ([vaporz](https://github.com/vaporz)) -- improve {incoming,outgoing}HeaderMatcher logic [\#408](https://github.com/grpc-ecosystem/grpc-gateway/pull/408) ([flisky](https://github.com/flisky)) -- improve WKT handling in gateway and openapi output [\#404](https://github.com/grpc-ecosystem/grpc-gateway/pull/404) ([tmc](https://github.com/tmc)) -- Return if runtime.AnnotateContext gave error [\#403](https://github.com/grpc-ecosystem/grpc-gateway/pull/403) ([tamalsaha](https://github.com/tamalsaha)) -- jsonpb: update tests to reflect new jsonpb behavior [\#401](https://github.com/grpc-ecosystem/grpc-gateway/pull/401) ([tmc](https://github.com/tmc)) -- Reference import grpc Status to suppress unused errors. [\#387](https://github.com/grpc-ecosystem/grpc-gateway/pull/387) ([tamalsaha](https://github.com/tamalsaha)) -- ci: regen with current protoc-gen-go [\#385](https://github.com/grpc-ecosystem/grpc-gateway/pull/385) ([tmc](https://github.com/tmc)) -- Use status package for error and introduce WithProtoErrorHandler option [\#378](https://github.com/grpc-ecosystem/grpc-gateway/pull/378) ([kazegusuri](https://github.com/kazegusuri)) -- Return response headers from grpc server [\#374](https://github.com/grpc-ecosystem/grpc-gateway/pull/374) ([tamalsaha](https://github.com/tamalsaha)) -- Skip unreferenced messages in definitions. [\#371](https://github.com/grpc-ecosystem/grpc-gateway/pull/371) ([lantame](https://github.com/lantame)) -- Use canonical header form in default header matcher. [\#369](https://github.com/grpc-ecosystem/grpc-gateway/pull/369) ([tamalsaha](https://github.com/tamalsaha)) -- support allow\_delete\_body for protoc-gen-grpc-gateway [\#318](https://github.com/grpc-ecosystem/grpc-gateway/pull/318) ([flisky](https://github.com/flisky)) -- fixes package name override doesn't work [\#277](https://github.com/grpc-ecosystem/grpc-gateway/pull/277) ([favadi](https://github.com/favadi)) -- add custom options to allow more control of swagger/openapi output [\#145](https://github.com/grpc-ecosystem/grpc-gateway/pull/145) ([ivucica](https://github.com/ivucica)) - -## [v1.2.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.2) (2017-04-17) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.1...v1.2.2) - -**Merged pull requests:** - -- Add changelog for 1.2.2 [\#363](https://github.com/grpc-ecosystem/grpc-gateway/pull/363) ([tmc](https://github.com/tmc)) -- metadata: fix properly and change to Outgoing [\#361](https://github.com/grpc-ecosystem/grpc-gateway/pull/361) ([tmc](https://github.com/tmc)) - -## [v1.2.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.1) (2017-04-17) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.0...v1.2.1) - -**Fixed bugs:** - -- reflect upstream grpc metadata api change [\#358](https://github.com/grpc-ecosystem/grpc-gateway/issues/358) - -**Closed issues:** - -- Empty value omitted [\#355](https://github.com/grpc-ecosystem/grpc-gateway/issues/355) -- Release 1.2.0 [\#340](https://github.com/grpc-ecosystem/grpc-gateway/issues/340) -- Cut another release [\#278](https://github.com/grpc-ecosystem/grpc-gateway/issues/278) - -**Merged pull requests:** - -- Add changelog for 1.2.1 [\#360](https://github.com/grpc-ecosystem/grpc-gateway/pull/360) ([tmc](https://github.com/tmc)) -- bugfix: reflect upstream api change. [\#359](https://github.com/grpc-ecosystem/grpc-gateway/pull/359) ([tmc](https://github.com/tmc)) - -## [v1.2.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0) (2017-03-31) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.0.rc1...v1.2.0) - -**Closed issues:** - -- Problem with \*.proto as "no buildable Go source files" [\#338](https://github.com/grpc-ecosystem/grpc-gateway/issues/338) -- Invalid import during code generation [\#337](https://github.com/grpc-ecosystem/grpc-gateway/issues/337) - -**Merged pull requests:** - -- Add changelog for 1.2.0 [\#342](https://github.com/grpc-ecosystem/grpc-gateway/pull/342) ([tmc](https://github.com/tmc)) - -## [v1.2.0.rc1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.2.0.rc1) (2017-03-24) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.1.0...v1.2.0.rc1) - -**Implemented enhancements:** - -- Support for Any types [\#80](https://github.com/grpc-ecosystem/grpc-gateway/issues/80) -- improve\(genswagger:template\):added support for google.protobuf.Timestamp [\#209](https://github.com/grpc-ecosystem/grpc-gateway/pull/209) ([EranAvidor](https://github.com/EranAvidor)) - -**Fixed bugs:** - -- Support for multi-segment elements [\#122](https://github.com/grpc-ecosystem/grpc-gateway/issues/122) - -**Closed issues:** - -- Go get breaks with autogenerated code [\#331](https://github.com/grpc-ecosystem/grpc-gateway/issues/331) -- Fresh install no longer generates necessary `google/api/annotations.pb.go` & `google/api/http.pb.go` files. [\#327](https://github.com/grpc-ecosystem/grpc-gateway/issues/327) -- Panic with query parameters [\#324](https://github.com/grpc-ecosystem/grpc-gateway/issues/324) -- Swagger-UI query parameters for enum types are sent as strings [\#320](https://github.com/grpc-ecosystem/grpc-gateway/issues/320) -- hide the object name in the response [\#317](https://github.com/grpc-ecosystem/grpc-gateway/issues/317) -- Package imported but not used [\#310](https://github.com/grpc-ecosystem/grpc-gateway/issues/310) -- Authorization headers aren't specified in Swagger.json [\#309](https://github.com/grpc-ecosystem/grpc-gateway/issues/309) -- Generating swagger version, contact name etc in generated docs [\#303](https://github.com/grpc-ecosystem/grpc-gateway/issues/303) -- Feature request: custom content type per service and rpc [\#302](https://github.com/grpc-ecosystem/grpc-gateway/issues/302) -- Reference: another RESTful api-gateway [\#299](https://github.com/grpc-ecosystem/grpc-gateway/issues/299) -- Integration with other languages is partially broken [\#298](https://github.com/grpc-ecosystem/grpc-gateway/issues/298) -- jsonpb convert int64 to integer instead of string [\#296](https://github.com/grpc-ecosystem/grpc-gateway/issues/296) -- default enum value is omitted [\#294](https://github.com/grpc-ecosystem/grpc-gateway/issues/294) -- Advice: could we simplify the flow as the below [\#292](https://github.com/grpc-ecosystem/grpc-gateway/issues/292) -- examples/browser test failure: TypeError: undefined is not a function \(evaluating 'window.location.protocol.startsWith\('chrome-extension'\)'\) [\#287](https://github.com/grpc-ecosystem/grpc-gateway/issues/287) -- ./entrypoint.go:25: undefined: api.RegisterYourServiceHandlerFromEndpoint [\#285](https://github.com/grpc-ecosystem/grpc-gateway/issues/285) -- Query params not handled in swagger file [\#284](https://github.com/grpc-ecosystem/grpc-gateway/issues/284) -- Please help: google/api/annotations.proto: File not found. [\#283](https://github.com/grpc-ecosystem/grpc-gateway/issues/283) -- Option to Allow Swagger for DELETEs with a body [\#279](https://github.com/grpc-ecosystem/grpc-gateway/issues/279) -- client declared and not used compilation error, after recent upgrade [\#276](https://github.com/grpc-ecosystem/grpc-gateway/issues/276) -- feature request / idea: generating JSONRPC2 client proxies from GRPC [\#272](https://github.com/grpc-ecosystem/grpc-gateway/issues/272) -- protoc-swagger-generator messes up the comments if there is rpc method that does not have rest [\#263](https://github.com/grpc-ecosystem/grpc-gateway/issues/263) -- Swagger Gen: underscores -\> lowerCamelCase field names and refs [\#261](https://github.com/grpc-ecosystem/grpc-gateway/issues/261) -- Timestamp as URL param causes bad request error [\#260](https://github.com/grpc-ecosystem/grpc-gateway/issues/260) -- "proto: no coders for int" printed whenever a gRPC error is returned over grpc-gateway. [\#259](https://github.com/grpc-ecosystem/grpc-gateway/issues/259) -- Compatibility with grpc.SupportPackageIsVersion4 [\#258](https://github.com/grpc-ecosystem/grpc-gateway/issues/258) -- How to use circuit breaker in this grpc gateway? [\#257](https://github.com/grpc-ecosystem/grpc-gateway/issues/257) -- cannot use example code to generate [\#255](https://github.com/grpc-ecosystem/grpc-gateway/issues/255) -- tests fail on go tip due to importing of main packages in test [\#250](https://github.com/grpc-ecosystem/grpc-gateway/issues/250) -- Add NGINX support [\#249](https://github.com/grpc-ecosystem/grpc-gateway/issues/249) -- Error when reverse proxy to gRPC server \(which is impl with Node.js\) [\#246](https://github.com/grpc-ecosystem/grpc-gateway/issues/246) -- Error output titlecase instead of lowercase [\#243](https://github.com/grpc-ecosystem/grpc-gateway/issues/243) -- Option field "\(google.api.http\)" is not a field or extension of message "ServiceOptions" [\#241](https://github.com/grpc-ecosystem/grpc-gateway/issues/241) -- Implement credentials handler in-box [\#238](https://github.com/grpc-ecosystem/grpc-gateway/issues/238) -- Proposal: Support WKT structs for URL params [\#237](https://github.com/grpc-ecosystem/grpc-gateway/issues/237) -- Example of /} in path template [\#232](https://github.com/grpc-ecosystem/grpc-gateway/issues/232) -- Serving swagger.json from runtime mux? [\#230](https://github.com/grpc-ecosystem/grpc-gateway/issues/230) -- ETCDclientv3 build error with the latest changes - github.com/grpc-ecosystem/grpc-gateway/runtime/marshal\_jsonpb.go:114: undefined: jsonpb.Unmarshaler [\#226](https://github.com/grpc-ecosystem/grpc-gateway/issues/226) -- Map in GET request [\#223](https://github.com/grpc-ecosystem/grpc-gateway/issues/223) -- HTTPS no longer works [\#220](https://github.com/grpc-ecosystem/grpc-gateway/issues/220) -- --swagger\_out plugin translates proto type int64 to string in Swagger specification [\#219](https://github.com/grpc-ecosystem/grpc-gateway/issues/219) -- Response body as a single field [\#217](https://github.com/grpc-ecosystem/grpc-gateway/issues/217) -- documentation of semantics of endpoint declarations [\#212](https://github.com/grpc-ecosystem/grpc-gateway/issues/212) -- gen-swagger does not generate PATCH method endpoints [\#211](https://github.com/grpc-ecosystem/grpc-gateway/issues/211) -- protoc-gen-grpc-gateway doesn't work correctly with option go\_package [\#207](https://github.com/grpc-ecosystem/grpc-gateway/issues/207) -- Browser Side Streaming Best Practices [\#206](https://github.com/grpc-ecosystem/grpc-gateway/issues/206) -- Does grpc-gateway support App Engine? [\#204](https://github.com/grpc-ecosystem/grpc-gateway/issues/204) -- "use of internal package" error, after moving to grpc-ecosystem [\#203](https://github.com/grpc-ecosystem/grpc-gateway/issues/203) -- Move to google.golang.org/genproto instead of shipping annotations.proto. [\#202](https://github.com/grpc-ecosystem/grpc-gateway/issues/202) -- Release v1.1.0 [\#196](https://github.com/grpc-ecosystem/grpc-gateway/issues/196) -- marshaler runtime.Marshaler does not handle io.EOF when decoding [\#195](https://github.com/grpc-ecosystem/grpc-gateway/issues/195) -- protobuf enumerated values now returned as strings instead of numbers. [\#186](https://github.com/grpc-ecosystem/grpc-gateway/issues/186) -- support annotating fields as required \(in swagger/oapi generation\)? [\#175](https://github.com/grpc-ecosystem/grpc-gateway/issues/175) -- architectural question: Can i codegen the client code for talking to the server ? [\#167](https://github.com/grpc-ecosystem/grpc-gateway/issues/167) -- Passing ENUM value as URL parameter throws error [\#166](https://github.com/grpc-ecosystem/grpc-gateway/issues/166) -- Support specifying which schemes should be output in swagger.json [\#161](https://github.com/grpc-ecosystem/grpc-gateway/issues/161) -- Use headers for routing [\#157](https://github.com/grpc-ecosystem/grpc-gateway/issues/157) -- ENUM in swagger.json makes client code failed to parse response from gateway [\#153](https://github.com/grpc-ecosystem/grpc-gateway/issues/153) -- Support map types [\#140](https://github.com/grpc-ecosystem/grpc-gateway/issues/140) -- generate OpenAPI/swagger documentation at run time? [\#138](https://github.com/grpc-ecosystem/grpc-gateway/issues/138) -- After the 1.7 release, update .travis.yaml to check the compiled proto output [\#137](https://github.com/grpc-ecosystem/grpc-gateway/issues/137) -- Getting parsed runtime.Pattern from server mux [\#127](https://github.com/grpc-ecosystem/grpc-gateway/issues/127) -- REST API without proxying [\#46](https://github.com/grpc-ecosystem/grpc-gateway/issues/46) - -**Merged pull requests:** - -- Remove an obsolete custom option [\#604](https://github.com/grpc-ecosystem/grpc-gateway/pull/604) ([yugui](https://github.com/yugui)) -- Support user configurable header forwarding & context metadata [\#336](https://github.com/grpc-ecosystem/grpc-gateway/pull/336) ([tamalsaha](https://github.com/tamalsaha)) -- Update go\_out parameter to remove comma [\#333](https://github.com/grpc-ecosystem/grpc-gateway/pull/333) ([tmc](https://github.com/tmc)) -- Update stale path in README [\#332](https://github.com/grpc-ecosystem/grpc-gateway/pull/332) ([tmc](https://github.com/tmc)) -- improve documentation regarding external dependencies [\#330](https://github.com/grpc-ecosystem/grpc-gateway/pull/330) ([CaptTofu](https://github.com/CaptTofu)) -- Return an error on invalid nested query parameters. [\#329](https://github.com/grpc-ecosystem/grpc-gateway/pull/329) ([fische](https://github.com/fische)) -- Update upstream proto files and add google.golang.org/genproto support. [\#325](https://github.com/grpc-ecosystem/grpc-gateway/pull/325) ([tmc](https://github.com/tmc)) -- Support oneof fields in query params [\#321](https://github.com/grpc-ecosystem/grpc-gateway/pull/321) ([nilium](https://github.com/nilium)) -- Do not ignore the error coming from http.ListenAndServe in examples [\#319](https://github.com/grpc-ecosystem/grpc-gateway/pull/319) ([campoy](https://github.com/campoy)) -- Look up enum value maps by their proto name [\#315](https://github.com/grpc-ecosystem/grpc-gateway/pull/315) ([nilium](https://github.com/nilium)) -- enable parsing enums from query parameters [\#314](https://github.com/grpc-ecosystem/grpc-gateway/pull/314) ([tzneal](https://github.com/tzneal)) -- Do not add imports from methods with no bindings. [\#312](https://github.com/grpc-ecosystem/grpc-gateway/pull/312) ([fische](https://github.com/fische)) -- Convert the first letter of method name to upper [\#300](https://github.com/grpc-ecosystem/grpc-gateway/pull/300) ([lipixun](https://github.com/lipixun)) -- write query parameters to swagger definition [\#297](https://github.com/grpc-ecosystem/grpc-gateway/pull/297) ([t-yuki](https://github.com/t-yuki)) -- Bump swagger-client to 2.1.28 for examples/browser [\#290](https://github.com/grpc-ecosystem/grpc-gateway/pull/290) ([tmc](https://github.com/tmc)) -- pin to version before es6ism [\#289](https://github.com/grpc-ecosystem/grpc-gateway/pull/289) ([tmc](https://github.com/tmc)) -- Prevent lack of http bindings from generating non-building output [\#286](https://github.com/grpc-ecosystem/grpc-gateway/pull/286) ([tmc](https://github.com/tmc)) -- Added support for Timestamp in URL. [\#281](https://github.com/grpc-ecosystem/grpc-gateway/pull/281) ([johansja](https://github.com/johansja)) -- add plugin param 'allow\_delete\_body' [\#280](https://github.com/grpc-ecosystem/grpc-gateway/pull/280) ([msample](https://github.com/msample)) -- Fix ruby gen command [\#275](https://github.com/grpc-ecosystem/grpc-gateway/pull/275) ([bluehallu](https://github.com/bluehallu)) -- Make grpc-gateway support enum fields in path parameter [\#273](https://github.com/grpc-ecosystem/grpc-gateway/pull/273) ([linuxerwang](https://github.com/linuxerwang)) -- remove unnecessary make\(\) [\#271](https://github.com/grpc-ecosystem/grpc-gateway/pull/271) ([tmc](https://github.com/tmc)) -- preserve field order in swagger spec [\#270](https://github.com/grpc-ecosystem/grpc-gateway/pull/270) ([tmc](https://github.com/tmc)) -- Merge \#228 [\#268](https://github.com/grpc-ecosystem/grpc-gateway/pull/268) ([tmc](https://github.com/tmc)) -- Handle methods with no bindings more carefully [\#267](https://github.com/grpc-ecosystem/grpc-gateway/pull/267) ([tmc](https://github.com/tmc)) -- describe default marshaler in README.md [\#266](https://github.com/grpc-ecosystem/grpc-gateway/pull/266) ([tmc](https://github.com/tmc)) -- Add request\_context flag to utilize \(\*http.Request\).Context\(\) in handlers [\#265](https://github.com/grpc-ecosystem/grpc-gateway/pull/265) ([tmc](https://github.com/tmc)) -- Regenerate examples [\#264](https://github.com/grpc-ecosystem/grpc-gateway/pull/264) ([tmc](https://github.com/tmc)) -- Correct runtime.errorBody protobuf field tag [\#256](https://github.com/grpc-ecosystem/grpc-gateway/pull/256) ([tmc](https://github.com/tmc)) -- Pass permanent HTTP request headers [\#252](https://github.com/grpc-ecosystem/grpc-gateway/pull/252) ([tmc](https://github.com/tmc)) -- regenerate examples, fix tests for go tip [\#248](https://github.com/grpc-ecosystem/grpc-gateway/pull/248) ([tmc](https://github.com/tmc)) -- Render the swagger request body properly [\#247](https://github.com/grpc-ecosystem/grpc-gateway/pull/247) ([dprotaso](https://github.com/dprotaso)) -- Error output should have lowercase attribute names [\#244](https://github.com/grpc-ecosystem/grpc-gateway/pull/244) ([nathanborror](https://github.com/nathanborror)) -- runtime - export prefix constants [\#236](https://github.com/grpc-ecosystem/grpc-gateway/pull/236) ([philipithomas](https://github.com/philipithomas)) -- README - Add CoreOS example [\#231](https://github.com/grpc-ecosystem/grpc-gateway/pull/231) ([philipithomas](https://github.com/philipithomas)) -- Docs - Add section about how HTTP maps to gRPC [\#227](https://github.com/grpc-ecosystem/grpc-gateway/pull/227) ([philipithomas](https://github.com/philipithomas)) -- readme: added links to additional documentation [\#222](https://github.com/grpc-ecosystem/grpc-gateway/pull/222) ([sdemos](https://github.com/sdemos)) -- Use a released version of protoc [\#216](https://github.com/grpc-ecosystem/grpc-gateway/pull/216) ([yugui](https://github.com/yugui)) -- Add contribution guideline [\#210](https://github.com/grpc-ecosystem/grpc-gateway/pull/210) ([yugui](https://github.com/yugui)) -- Allowing unknown fields to be dropped instead of returning error from… [\#208](https://github.com/grpc-ecosystem/grpc-gateway/pull/208) ([sriniven](https://github.com/sriniven)) -- Avoid Internal Server Error on zero-length input for bidi streaming [\#200](https://github.com/grpc-ecosystem/grpc-gateway/pull/200) ([yugui](https://github.com/yugui)) - -## [v1.1.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.1.0) (2016-07-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.0.0...v1.1.0) - -**Implemented enhancements:** - -- Support oneof types of fields [\#82](https://github.com/grpc-ecosystem/grpc-gateway/issues/82) -- allow use of jsonpb for marshaling [\#79](https://github.com/grpc-ecosystem/grpc-gateway/issues/79) - -**Closed issues:** - -- Generating a gRPC stub using Gateway generates a gRPC internal error [\#198](https://github.com/grpc-ecosystem/grpc-gateway/issues/198) -- Build fails with error: use of internal package not allowed [\#197](https://github.com/grpc-ecosystem/grpc-gateway/issues/197) -- google/protobuf/descriptor.proto: File not found. [\#194](https://github.com/grpc-ecosystem/grpc-gateway/issues/194) -- please tag releases [\#189](https://github.com/grpc-ecosystem/grpc-gateway/issues/189) -- Support for path collapsing for embedded structs? [\#187](https://github.com/grpc-ecosystem/grpc-gateway/issues/187) -- \[ACTION Required\] Moving to grpc-ecosystem [\#179](https://github.com/grpc-ecosystem/grpc-gateway/issues/179) -- Ading grpc-timeout support [\#107](https://github.com/grpc-ecosystem/grpc-gateway/issues/107) -- Generation of one swagger file out of multiple protos? [\#99](https://github.com/grpc-ecosystem/grpc-gateway/issues/99) - -**Merged pull requests:** - -- Rename packages to follow the repository transfer [\#192](https://github.com/grpc-ecosystem/grpc-gateway/pull/192) ([yugui](https://github.com/yugui)) -- return err early if EOF to prevent logging in normal conditions [\#191](https://github.com/grpc-ecosystem/grpc-gateway/pull/191) ([tmc](https://github.com/tmc)) -- send Trailer header on error [\#188](https://github.com/grpc-ecosystem/grpc-gateway/pull/188) ([kazegusuri](https://github.com/kazegusuri)) -- generate swagger output for streaming endpoints with a basic note [\#183](https://github.com/grpc-ecosystem/grpc-gateway/pull/183) ([tmc](https://github.com/tmc)) - -## [v1.0.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.0.0) (2016-06-15) -**Implemented enhancements:** - -- support protobuf-over-HTTP [\#124](https://github.com/grpc-ecosystem/grpc-gateway/issues/124) -- Static mapping from proto field names to golang field names [\#86](https://github.com/grpc-ecosystem/grpc-gateway/issues/86) -- Format Errors to JSON [\#25](https://github.com/grpc-ecosystem/grpc-gateway/issues/25) -- Emit API definition in Swagger schema format [\#9](https://github.com/grpc-ecosystem/grpc-gateway/issues/9) -- Method parameter in query string [\#6](https://github.com/grpc-ecosystem/grpc-gateway/issues/6) -- Integrate authentication [\#4](https://github.com/grpc-ecosystem/grpc-gateway/issues/4) -- Add swagger support [\#68](https://github.com/grpc-ecosystem/grpc-gateway/pull/68) ([achew22](https://github.com/achew22)) -- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([bufdev](https://github.com/bufdev)) - -**Fixed bugs:** - -- recent annotation change requires req.RemoteAddr to be populated [\#177](https://github.com/grpc-ecosystem/grpc-gateway/issues/177) -- Runtime panic with CloseNotify [\#115](https://github.com/grpc-ecosystem/grpc-gateway/issues/115) -- Gateway code generation broken when rpc method with a streaming response has an input paramter [\#35](https://github.com/grpc-ecosystem/grpc-gateway/issues/35) -- URL usage of nested messages causes nil pointer in proto3 [\#32](https://github.com/grpc-ecosystem/grpc-gateway/issues/32) -- Multiple .proto files generates invalid import statements. [\#22](https://github.com/grpc-ecosystem/grpc-gateway/issues/22) - -**Closed issues:** - -- remote peer address is lost in ctx - always resolves to localhost [\#173](https://github.com/grpc-ecosystem/grpc-gateway/issues/173) -- Bidirectional streams don't concurrently Send and Recv [\#169](https://github.com/grpc-ecosystem/grpc-gateway/issues/169) -- Error: failed to import google/api/annotations.proto [\#165](https://github.com/grpc-ecosystem/grpc-gateway/issues/165) -- Test datarace in controlapi [\#163](https://github.com/grpc-ecosystem/grpc-gateway/issues/163) -- not enough arguments in call to runtime.HTTPError [\#162](https://github.com/grpc-ecosystem/grpc-gateway/issues/162) -- String-values for Enums in request object are not recognized. [\#150](https://github.com/grpc-ecosystem/grpc-gateway/issues/150) -- Handling of import public "file.proto" [\#139](https://github.com/grpc-ecosystem/grpc-gateway/issues/139) -- Does grpc-gateway support http middleware? [\#132](https://github.com/grpc-ecosystem/grpc-gateway/issues/132) -- push to web clients using WS or SSE ? [\#131](https://github.com/grpc-ecosystem/grpc-gateway/issues/131) -- protoc-gen-swagger comment parsing for documentation gen [\#128](https://github.com/grpc-ecosystem/grpc-gateway/issues/128) -- generated code has a data race [\#123](https://github.com/grpc-ecosystem/grpc-gateway/issues/123) -- panic: net/http: CloseNotify called after ServeHTTP finished [\#121](https://github.com/grpc-ecosystem/grpc-gateway/issues/121) -- CloseNotify race with ServeHTTP [\#119](https://github.com/grpc-ecosystem/grpc-gateway/issues/119) -- echo service example does not compile [\#117](https://github.com/grpc-ecosystem/grpc-gateway/issues/117) -- go vet issues in template\_test.go [\#113](https://github.com/grpc-ecosystem/grpc-gateway/issues/113) -- undefined: proto.SizeVarint [\#103](https://github.com/grpc-ecosystem/grpc-gateway/issues/103) -- Closing the HTTP connection does not cancel the Context [\#101](https://github.com/grpc-ecosystem/grpc-gateway/issues/101) -- Logging [\#92](https://github.com/grpc-ecosystem/grpc-gateway/issues/92) -- Missing default values in JSON output? [\#91](https://github.com/grpc-ecosystem/grpc-gateway/issues/91) -- Better grpc error strings [\#87](https://github.com/grpc-ecosystem/grpc-gateway/issues/87) -- Fields aren't named in the same manner as golang/protobuf [\#84](https://github.com/grpc-ecosystem/grpc-gateway/issues/84) -- Header Forwarding from server. [\#73](https://github.com/grpc-ecosystem/grpc-gateway/issues/73) -- No pattern specified in google.api.HttpRule [\#70](https://github.com/grpc-ecosystem/grpc-gateway/issues/70) -- cannot find package "google/api" [\#67](https://github.com/grpc-ecosystem/grpc-gateway/issues/67) -- Generated .pb.go with services no longer works with latest version of grpc-go. [\#62](https://github.com/grpc-ecosystem/grpc-gateway/issues/62) -- JavaScript Proxy [\#61](https://github.com/grpc-ecosystem/grpc-gateway/issues/61) -- Add HTTP error code, error status to responseStreamChunk Error [\#58](https://github.com/grpc-ecosystem/grpc-gateway/issues/58) -- Reverse the code gen idea [\#44](https://github.com/grpc-ecosystem/grpc-gateway/issues/44) -- array of maps in json [\#43](https://github.com/grpc-ecosystem/grpc-gateway/issues/43) -- Examples break with 1.5 because of import of "main" examples package [\#37](https://github.com/grpc-ecosystem/grpc-gateway/issues/37) -- Breaks with 1.5rc1 due to "internal" package name. [\#36](https://github.com/grpc-ecosystem/grpc-gateway/issues/36) -- Feature Request: Support for non-nullable nested messages. [\#20](https://github.com/grpc-ecosystem/grpc-gateway/issues/20) -- Is PascalFromSnake the right conversion to be doing? [\#19](https://github.com/grpc-ecosystem/grpc-gateway/issues/19) -- Infinite loop in generator when package name conflicts [\#17](https://github.com/grpc-ecosystem/grpc-gateway/issues/17) -- google.api.http options in multi-line format not supported [\#16](https://github.com/grpc-ecosystem/grpc-gateway/issues/16) -- Is there any plan to developing a C++ version? [\#15](https://github.com/grpc-ecosystem/grpc-gateway/issues/15) - -**Merged pull requests:** - -- Regenerate files with the latest protoc-gen-go [\#185](https://github.com/grpc-ecosystem/grpc-gateway/pull/185) ([yugui](https://github.com/yugui)) -- Add browser examples [\#184](https://github.com/grpc-ecosystem/grpc-gateway/pull/184) ([yugui](https://github.com/yugui)) -- Fix golint and go vet errors [\#182](https://github.com/grpc-ecosystem/grpc-gateway/pull/182) ([yugui](https://github.com/yugui)) -- Add integration with clients generated by swagger-codegen [\#181](https://github.com/grpc-ecosystem/grpc-gateway/pull/181) ([yugui](https://github.com/yugui)) -- Simplify example services [\#180](https://github.com/grpc-ecosystem/grpc-gateway/pull/180) ([yugui](https://github.com/yugui)) -- Avoid errors when req.RemoteAddr is empty [\#178](https://github.com/grpc-ecosystem/grpc-gateway/pull/178) ([yugui](https://github.com/yugui)) -- Feature/headers [\#176](https://github.com/grpc-ecosystem/grpc-gateway/pull/176) ([yugui](https://github.com/yugui)) -- Include HTTP req.remoteAddr in gRPC ctx [\#174](https://github.com/grpc-ecosystem/grpc-gateway/pull/174) ([mikeatlas](https://github.com/mikeatlas)) -- Update dependencies [\#171](https://github.com/grpc-ecosystem/grpc-gateway/pull/171) ([yugui](https://github.com/yugui)) -- Add bidirectional streaming support by running Send\(\) and Recv\(\) concurrently [\#170](https://github.com/grpc-ecosystem/grpc-gateway/pull/170) ([tmc](https://github.com/tmc)) -- make Authorization header check case-insensitive to comply with RFC 2616 4.2 [\#164](https://github.com/grpc-ecosystem/grpc-gateway/pull/164) ([tmc](https://github.com/tmc)) -- jsonpb: avoid duplicating upstream's struct [\#158](https://github.com/grpc-ecosystem/grpc-gateway/pull/158) ([tamird](https://github.com/tamird)) -- Generate Swagger description for service methods using proto comments. [\#156](https://github.com/grpc-ecosystem/grpc-gateway/pull/156) ([t-yuki](https://github.com/t-yuki)) -- Implement gRPC timeout support for inbound HTTP headers [\#155](https://github.com/grpc-ecosystem/grpc-gateway/pull/155) ([mwitkow](https://github.com/mwitkow)) -- Add more examples to marshalers [\#154](https://github.com/grpc-ecosystem/grpc-gateway/pull/154) ([yugui](https://github.com/yugui)) -- custom marshaler: handle `Accept` headers correctly [\#152](https://github.com/grpc-ecosystem/grpc-gateway/pull/152) ([tamird](https://github.com/tamird)) -- Simplify custom marshaler API [\#151](https://github.com/grpc-ecosystem/grpc-gateway/pull/151) ([yugui](https://github.com/yugui)) -- Fix camel case path parameter handling in swagger [\#149](https://github.com/grpc-ecosystem/grpc-gateway/pull/149) ([yugui](https://github.com/yugui)) -- Swagger dot in path template [\#148](https://github.com/grpc-ecosystem/grpc-gateway/pull/148) ([yugui](https://github.com/yugui)) -- Support map types in swagger generator [\#147](https://github.com/grpc-ecosystem/grpc-gateway/pull/147) ([yugui](https://github.com/yugui)) -- Cleanup custom marshaler [\#146](https://github.com/grpc-ecosystem/grpc-gateway/pull/146) ([yugui](https://github.com/yugui)) -- Implement custom Marshaler support, add jsonpb implemention. [\#144](https://github.com/grpc-ecosystem/grpc-gateway/pull/144) ([tmc](https://github.com/tmc)) -- Allow period in path URL templates when generating Swagger templates. [\#143](https://github.com/grpc-ecosystem/grpc-gateway/pull/143) ([ivucica](https://github.com/ivucica)) -- Link to LICENSE.txt [\#142](https://github.com/grpc-ecosystem/grpc-gateway/pull/142) ([sunkuet02](https://github.com/sunkuet02)) -- Support map types in swagger generator [\#141](https://github.com/grpc-ecosystem/grpc-gateway/pull/141) ([t-yuki](https://github.com/t-yuki)) -- Conditionally stops checking if generated file are up-to-date [\#136](https://github.com/grpc-ecosystem/grpc-gateway/pull/136) ([yugui](https://github.com/yugui)) -- Generate Swagger description for service methods using proto comments. [\#134](https://github.com/grpc-ecosystem/grpc-gateway/pull/134) ([ivucica](https://github.com/ivucica)) -- Swagger definitions now have `type` set to `object`. [\#133](https://github.com/grpc-ecosystem/grpc-gateway/pull/133) ([ivucica](https://github.com/ivucica)) -- go\_package option as go import path [\#129](https://github.com/grpc-ecosystem/grpc-gateway/pull/129) ([kazegusuri](https://github.com/kazegusuri)) -- Fix govet errors [\#126](https://github.com/grpc-ecosystem/grpc-gateway/pull/126) ([yugui](https://github.com/yugui)) -- Fix data-race in generated codes [\#125](https://github.com/grpc-ecosystem/grpc-gateway/pull/125) ([yugui](https://github.com/yugui)) -- Fix \#119 - CloseNotify race with ServeHTTP [\#120](https://github.com/grpc-ecosystem/grpc-gateway/pull/120) ([cuongdo](https://github.com/cuongdo)) -- Replace glog with grpclog [\#118](https://github.com/grpc-ecosystem/grpc-gateway/pull/118) ([cuongdo](https://github.com/cuongdo)) -- Fix a goroutine-leak in HTTP keep-alive [\#116](https://github.com/grpc-ecosystem/grpc-gateway/pull/116) ([yugui](https://github.com/yugui)) -- Fix camel case path parameter handling in swagger [\#114](https://github.com/grpc-ecosystem/grpc-gateway/pull/114) ([t-yuki](https://github.com/t-yuki)) -- gofmt -s [\#112](https://github.com/grpc-ecosystem/grpc-gateway/pull/112) ([shawnps](https://github.com/shawnps)) -- fix typo [\#111](https://github.com/grpc-ecosystem/grpc-gateway/pull/111) ([shawnps](https://github.com/shawnps)) -- fix typo [\#110](https://github.com/grpc-ecosystem/grpc-gateway/pull/110) ([shawnps](https://github.com/shawnps)) -- fixes missing swagger operation objects [\#109](https://github.com/grpc-ecosystem/grpc-gateway/pull/109) ([t-yuki](https://github.com/t-yuki)) -- Add parser and swagger support for enum, no gengateway yet [\#108](https://github.com/grpc-ecosystem/grpc-gateway/pull/108) ([t-yuki](https://github.com/t-yuki)) -- README: add protoc-gen-swagger too [\#105](https://github.com/grpc-ecosystem/grpc-gateway/pull/105) ([philips](https://github.com/philips)) -- README: Suggest go get -u by default. [\#104](https://github.com/grpc-ecosystem/grpc-gateway/pull/104) ([dmitshur](https://github.com/dmitshur)) -- Cancel context when HTTP connection is closed [\#102](https://github.com/grpc-ecosystem/grpc-gateway/pull/102) ([floridoo](https://github.com/floridoo)) -- wait test server up [\#100](https://github.com/grpc-ecosystem/grpc-gateway/pull/100) ([kazegusuri](https://github.com/kazegusuri)) -- Fix the swagger section of the README.md [\#98](https://github.com/grpc-ecosystem/grpc-gateway/pull/98) ([naibaf0](https://github.com/naibaf0)) -- Add documentation for using Swagger [\#97](https://github.com/grpc-ecosystem/grpc-gateway/pull/97) ([achew22](https://github.com/achew22)) -- Better compatibility to field names generated by protoc-gen-go [\#96](https://github.com/grpc-ecosystem/grpc-gateway/pull/96) ([yugui](https://github.com/yugui)) -- Update protoc from 3.0.0-beta1 to 3.0.0-beta2 [\#95](https://github.com/grpc-ecosystem/grpc-gateway/pull/95) ([yugui](https://github.com/yugui)) -- Better grpc error strings [\#94](https://github.com/grpc-ecosystem/grpc-gateway/pull/94) ([floridoo](https://github.com/floridoo)) -- make available header and trailer metadata [\#93](https://github.com/grpc-ecosystem/grpc-gateway/pull/93) ([kazegusuri](https://github.com/kazegusuri)) -- make grpc.DialOption configurable [\#89](https://github.com/grpc-ecosystem/grpc-gateway/pull/89) ([kazegusuri](https://github.com/kazegusuri)) -- Add request in error handlers [\#88](https://github.com/grpc-ecosystem/grpc-gateway/pull/88) ([daniellowtw](https://github.com/daniellowtw)) -- Improve PascalFromSnake behavior [\#85](https://github.com/grpc-ecosystem/grpc-gateway/pull/85) ([tmc](https://github.com/tmc)) -- Typo grcp -\> grpc [\#81](https://github.com/grpc-ecosystem/grpc-gateway/pull/81) ([daniellowtw](https://github.com/daniellowtw)) -- Add abstraction of code generator implementation [\#78](https://github.com/grpc-ecosystem/grpc-gateway/pull/78) ([yugui](https://github.com/yugui)) -- Support multivalue of metadata [\#77](https://github.com/grpc-ecosystem/grpc-gateway/pull/77) ([yugui](https://github.com/yugui)) -- Fix broken test [\#76](https://github.com/grpc-ecosystem/grpc-gateway/pull/76) ([yugui](https://github.com/yugui)) -- Added missing instruction line in README [\#75](https://github.com/grpc-ecosystem/grpc-gateway/pull/75) ([betrcode](https://github.com/betrcode)) -- Fix a complie error in generated go files [\#71](https://github.com/grpc-ecosystem/grpc-gateway/pull/71) ([yugui](https://github.com/yugui)) -- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([bufdev](https://github.com/bufdev)) -- Bugfix/handling headers for `Authorization` and `Host` [\#65](https://github.com/grpc-ecosystem/grpc-gateway/pull/65) ([mwitkow](https://github.com/mwitkow)) -- Fix `error` field always in chunk response [\#64](https://github.com/grpc-ecosystem/grpc-gateway/pull/64) ([mwitkow](https://github.com/mwitkow)) -- Update .pb.go to latest version. [\#63](https://github.com/grpc-ecosystem/grpc-gateway/pull/63) ([johansja](https://github.com/johansja)) -- Run more tests in Travis CI [\#60](https://github.com/grpc-ecosystem/grpc-gateway/pull/60) ([yugui](https://github.com/yugui)) -- Added http error code and error status for responseStreamChunk error [\#59](https://github.com/grpc-ecosystem/grpc-gateway/pull/59) ([kdima](https://github.com/kdima)) -- Fix parsing of verb and final path component. [\#55](https://github.com/grpc-ecosystem/grpc-gateway/pull/55) ([hbchai](https://github.com/hbchai)) -- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([bufdev](https://github.com/bufdev)) -- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([bufdev](https://github.com/bufdev)) -- Fix a build error with the latest protoc-gen-go [\#50](https://github.com/grpc-ecosystem/grpc-gateway/pull/50) ([yugui](https://github.com/yugui)) -- Configure Travis CI [\#49](https://github.com/grpc-ecosystem/grpc-gateway/pull/49) ([yugui](https://github.com/yugui)) -- Follow a change of go package name convention in protoc-gen-go [\#48](https://github.com/grpc-ecosystem/grpc-gateway/pull/48) ([yugui](https://github.com/yugui)) -- Consider tail segments after deep wildcard [\#47](https://github.com/grpc-ecosystem/grpc-gateway/pull/47) ([yugui](https://github.com/yugui)) -- Fix typo in README [\#45](https://github.com/grpc-ecosystem/grpc-gateway/pull/45) ([jonboulle](https://github.com/jonboulle)) -- Fix undefined variable error in generated codes [\#42](https://github.com/grpc-ecosystem/grpc-gateway/pull/42) ([yugui](https://github.com/yugui)) -- Follow changes in protoc-gen-go and grpc-go [\#41](https://github.com/grpc-ecosystem/grpc-gateway/pull/41) ([yugui](https://github.com/yugui)) -- Fixes \#4 [\#40](https://github.com/grpc-ecosystem/grpc-gateway/pull/40) ([AmandaCameron](https://github.com/AmandaCameron)) -- fix examples to work with go1.5 [\#39](https://github.com/grpc-ecosystem/grpc-gateway/pull/39) ([tmc](https://github.com/tmc)) -- rename internal to utilties for 1.5 compatibility [\#38](https://github.com/grpc-ecosystem/grpc-gateway/pull/38) ([tmc](https://github.com/tmc)) -- Reflection fix of proto3 nested messages. [\#34](https://github.com/grpc-ecosystem/grpc-gateway/pull/34) ([mwitkow](https://github.com/mwitkow)) -- \[Experimental\] Make the response forwarder function customizable [\#31](https://github.com/grpc-ecosystem/grpc-gateway/pull/31) ([yugui](https://github.com/yugui)) -- Add f.Flush\(\) to runtime.ForwardResponseStream [\#30](https://github.com/grpc-ecosystem/grpc-gateway/pull/30) ([vvakame](https://github.com/vvakame)) -- Format error message in JSON [\#29](https://github.com/grpc-ecosystem/grpc-gateway/pull/29) ([yugui](https://github.com/yugui)) -- Update examples with HTTP header context annotation [\#28](https://github.com/grpc-ecosystem/grpc-gateway/pull/28) ([yugui](https://github.com/yugui)) -- Report semantic errors in the source to protoc [\#27](https://github.com/grpc-ecosystem/grpc-gateway/pull/27) ([yugui](https://github.com/yugui)) -- Add support for non-nullable nested messages. [\#21](https://github.com/grpc-ecosystem/grpc-gateway/pull/21) ([dmitshur](https://github.com/dmitshur)) -- Receive GRPC metadata from HTTP headers. [\#18](https://github.com/grpc-ecosystem/grpc-gateway/pull/18) ([crast](https://github.com/crast)) -- Implement detailed specs of google.api.http [\#14](https://github.com/grpc-ecosystem/grpc-gateway/pull/14) ([yugui](https://github.com/yugui)) -- Configure travis CI [\#13](https://github.com/grpc-ecosystem/grpc-gateway/pull/13) ([yugui](https://github.com/yugui)) -- Replace our own custom option with the one defined by Google [\#12](https://github.com/grpc-ecosystem/grpc-gateway/pull/12) ([yugui](https://github.com/yugui)) -- Remove useless context setup [\#11](https://github.com/grpc-ecosystem/grpc-gateway/pull/11) ([iamqizhao](https://github.com/iamqizhao)) -- Fix typo, path, missing semicolon. [\#10](https://github.com/grpc-ecosystem/grpc-gateway/pull/10) ([dmitshur](https://github.com/dmitshur)) -- Use a globally unique id for the custom option [\#3](https://github.com/grpc-ecosystem/grpc-gateway/pull/3) ([yugui](https://github.com/yugui)) -- implement ABitOfEverythingService [\#2](https://github.com/grpc-ecosystem/grpc-gateway/pull/2) ([mattn](https://github.com/mattn)) -- support streaming API calls [\#1](https://github.com/grpc-ecosystem/grpc-gateway/pull/1) ([yugui](https://github.com/yugui)) - - - -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3a640e086da..b320bc383e6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,18 +71,11 @@ To make a release, follow these steps: recommend whether the new release should be a patch or minor release. See [CircleCI](https://app.circleci.com/pipelines/github/grpc-ecosystem/grpc-gateway/126/workflows/255a8a04-de9c-46a9-a66b-f107d2b39439/jobs/6428) for an example. -1. Generate a GitHub token with `repo` access. -1. Create a new branch and edit the Makefile `changelog` job, settings - the `future-release=` variable to the name of the version you plan to release -1. Run `CHANGELOG_GITHUB_TOKEN= make changelog` -1. Commit the `Makefile` and `CHANGELOG.md` changes. -1. Open a PR and check that everything looks right. -1. Merge the PR. -1. Tag the release on `master`, the tag should be made against the commit you just merged. +1. Tag the release on `master`. 1. The release can be created using the command line, or also through GitHub's [releases UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new). 1. If you create a release using the web UI you can publish it as a draft and have it reviewed by another maintainer. - 1. Update the release description with the generated changelog. -1. (Optional) Delete your GitHub token again. -1. (Required) Sit back and pat yourself on the back for a job well done :clap:. + 1. Update the release description. Try to include some of the highlights of this release, + ideally with links to the PRs and crediting the contributors. +1. Sit back and pat yourself on the back for a job well done :clap:. diff --git a/Makefile b/Makefile index 0e1f7dc23a9..5d538701de4 100644 --- a/Makefile +++ b/Makefile @@ -124,22 +124,6 @@ test: proto go test -short -race ./... go test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock -changelog: - docker run --rm \ - --interactive \ - --tty \ - -e "CHANGELOG_GITHUB_TOKEN=${CHANGELOG_GITHUB_TOKEN}" \ - -v "$(PWD):/usr/local/src/your-app" \ - ferrarimarco/github-changelog-generator:1.14.3 \ - -u grpc-ecosystem \ - -p grpc-gateway \ - --author \ - --compare-link \ - --github-site=https://github.com \ - --unreleased-label "**Next release**" \ - --release-branch=master \ - --future-release=v2.3.0 - clean: find . -type f -name '*.pb.go' -delete find . -type f -name '*.swagger.json' -delete From d0b84deaa7ce74c84bc069d55a724418ec936be1 Mon Sep 17 00:00:00 2001 From: Torkel Rogstad Date: Fri, 30 Apr 2021 16:25:25 +0200 Subject: [PATCH 0915/1518] unmarshal: avoid dereferencing nil pointers (#2112) --- runtime/marshal_jsonpb.go | 4 ++++ runtime/marshal_jsonpb_test.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 38ac3ddff58..43116241b1a 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -237,6 +237,10 @@ func decodeNonProtoField(d *json.Decoder, unmarshaler protojson.UnmarshalOptions } bk := result[0] bv := reflect.New(rv.Type().Elem()) + if v == nil { + null := json.RawMessage("null") + v = &null + } if err := unmarshalJSONPb([]byte(*v), unmarshaler, bv.Interface()); err != nil { return err } diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index df5f1817f48..0a9af2779a5 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -648,6 +648,24 @@ var ( } ) +func TestJSONPbUnmarshalNullField(t *testing.T) { + var out map[string]interface{} + + const json = `{"foo": null}` + marshaler := &runtime.JSONPb{} + if err := marshaler.Unmarshal([]byte(json), &out); err != nil { + t.Fatalf("unexpected error: %v", err) + } + + value, hasKey := out["foo"] + if !hasKey { + t.Fatalf("unmarshaled map did not have key 'foo'") + } + if value != nil { + t.Fatalf("unexpected value: %v", value) + } +} + func TestJSONPbMarshalResponseBodies(t *testing.T) { marshaler := &runtime.JSONPb{} for i, spec := range []struct { From da162e873b3619e42bfdcb4265a33f9fe81376b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 May 2021 00:04:07 +0100 Subject: [PATCH 0916/1518] chore(deps): bump rexml from 3.2.4 to 3.2.5 in /docs (#2118) Bumps [rexml](https://github.com/ruby/rexml) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.2.4...v3.2.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index c08c1592a11..f62f18197ee 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -230,7 +230,7 @@ GEM rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.4) + rexml (3.2.5) rouge (3.23.0) ruby-enum (0.8.0) i18n From 93f6eff6f3fbe44cbe1df930438749093dac8b1e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 30 Apr 2021 19:08:09 -0400 Subject: [PATCH 0917/1518] Manually set gorelease base (#2119) --- .circleci/config.yml | 2 +- CONTRIBUTING.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a66077dc7cf..f0f551be37d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -122,7 +122,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=$(git describe --abbrev=0) + - run: gorelease -base=v2.4.0 proto_lint: docker: - image: bufbuild/buf:0.41.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b320bc383e6..a37cd8239af 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -78,4 +78,5 @@ To make a release, follow these steps: reviewed by another maintainer. 1. Update the release description. Try to include some of the highlights of this release, ideally with links to the PRs and crediting the contributors. +1. Update the gorelease job in .circleci/config.yaml to point to the new release version. 1. Sit back and pat yourself on the back for a job well done :clap:. From aea98f75b98f75636b6bb18bbfaa9c2f28a202ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 May 2021 00:19:32 +0100 Subject: [PATCH 0918/1518] fix(deps): update google.golang.org/genproto commit hash to 86c259c (#2116) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 677dc123ddf..e716082466a 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 + google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 70355c01b0f..f87c5941b27 100644 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 h1:KMgpo2lWy1vfrYjtxPAzR0aNWeAR1UdQykt6sj/hpBY= -google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab h1:dkb90hr43A2Q5as5ZBphcOF2II0+EqfCBqGp7qFSpN4= +google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7af5b5f8c0e..713515005c1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:KMgpo2lWy1vfrYjtxPAzR0aNWeAR1UdQykt6sj/hpBY=", - version = "v0.0.0-20210426193834-eac7f76ac494", + sum = "h1:dkb90hr43A2Q5as5ZBphcOF2II0+EqfCBqGp7qFSpN4=", + version = "v0.0.0-20210429181445-86c259c2b4ab", ) go_repository( name = "org_golang_google_grpc", From 47d40227ba9b2accee5e30bab6a250994874fb27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 May 2021 00:29:19 +0100 Subject: [PATCH 0919/1518] fix(deps): update github.com/golang/glog commit hash to 424d233 (#2114) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index e716082466a..a1ac7235bf1 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v1.0.0 github.com/bufbuild/buf v0.37.0 github.com/ghodss/yaml v1.0.0 - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b + github.com/golang/glog v0.0.0-20210429001901-424d2337a529 github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 diff --git a/go.sum b/go.sum index f87c5941b27..4409420c898 100644 --- a/go.sum +++ b/go.sum @@ -93,8 +93,9 @@ github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPh github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= +github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= diff --git a/repositories.bzl b/repositories.bzl index 713515005c1..cf6802f6a7a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -272,8 +272,8 @@ def go_repositories(): go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", - sum = "h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=", - version = "v0.0.0-20160126235308-23def4e6c14b", + sum = "h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU=", + version = "v0.0.0-20210429001901-424d2337a529", ) go_repository( From 5ed4a057c46146f7c8160dcb073db09b6e926b77 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 3 May 2021 17:52:57 +0000 Subject: [PATCH 0920/1518] fix(deps): update google.golang.org/genproto commit hash to b96a976 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a1ac7235bf1..6c1e40b89f9 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab + google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 4409420c898..5df293beaac 100644 --- a/go.sum +++ b/go.sum @@ -547,8 +547,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab h1:dkb90hr43A2Q5as5ZBphcOF2II0+EqfCBqGp7qFSpN4= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 h1:ov60aCaYZRD4c3+rjbtkVMhj/5CGviXVJqMCOrQSO3I= +google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cf6802f6a7a..c77c6676673 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:dkb90hr43A2Q5as5ZBphcOF2II0+EqfCBqGp7qFSpN4=", - version = "v0.0.0-20210429181445-86c259c2b4ab", + sum = "h1:ov60aCaYZRD4c3+rjbtkVMhj/5CGviXVJqMCOrQSO3I=", + version = "v0.0.0-20210503173045-b96a97608f20", ) go_repository( name = "org_golang_google_grpc", From 4192d5eaafc29bec897fc567583308541d9106ee Mon Sep 17 00:00:00 2001 From: Mitch Date: Tue, 4 May 2021 15:11:52 +0200 Subject: [PATCH 0921/1518] Move to tmp directory to fetch tools (#2121) The tools.go file can cause fake dependencies in go.sum. This will move to a temporary directory and fetch the tools so that it does not add to the go.mod and go.sum. --- Makefile | 11 +- .../internal/clients/abe/api/swagger.yaml | 22 +- .../clients/abe/model_protobuf_any.go | 2 +- .../internal/clients/echo/api/swagger.yaml | 22 +- .../clients/echo/model_protobuf_any.go | 2 +- .../clients/responsebody/api/swagger.yaml | 22 +- .../responsebody/model_protobuf_any.go | 2 +- examples/internal/helloworld/helloworld.pb.go | 64 +++--- .../internal/helloworld/helloworld_grpc.pb.go | 10 +- .../proto/examplepb/a_bit_of_everything.pb.go | 42 ++-- .../examplepb/a_bit_of_everything.pb.gw.go | 22 +- .../a_bit_of_everything.swagger.json | 2 +- .../examplepb/a_bit_of_everything_grpc.pb.go | 210 +++++++++--------- .../proto/examplepb/echo_service.pb.go | 34 +-- .../proto/examplepb/echo_service.swagger.json | 2 +- .../proto/examplepb/echo_service_grpc.pb.go | 10 +- .../proto/examplepb/flow_combination.pb.go | 2 +- .../examplepb/flow_combination.swagger.json | 2 +- .../examplepb/flow_combination_grpc.pb.go | 22 +- .../examplepb/generate_unbound_methods.pb.go | 14 +- .../generate_unbound_methods_grpc.pb.go | 10 +- .../examplepb/generated_input.swagger.json | 2 +- .../proto/examplepb/non_standard_names.pb.go | 16 +- .../examplepb/non_standard_names.swagger.json | 2 +- .../examplepb/non_standard_names_grpc.pb.go | 10 +- .../proto/examplepb/openapi_merge_a.pb.go | 2 +- .../examplepb/openapi_merge_a.swagger.json | 2 +- .../examplepb/openapi_merge_a_grpc.pb.go | 19 +- .../proto/examplepb/openapi_merge_b.pb.go | 2 +- .../examplepb/openapi_merge_b.swagger.json | 2 +- .../examplepb/openapi_merge_b_grpc.pb.go | 10 +- .../examplepb/response_body_service.pb.go | 2 +- .../response_body_service.swagger.json | 2 +- .../response_body_service_grpc.pb.go | 12 +- .../internal/proto/examplepb/stream.pb.go | 6 +- .../internal/proto/examplepb/stream.pb.gw.go | 6 +- .../proto/examplepb/stream.swagger.json | 2 +- .../proto/examplepb/stream_grpc.pb.go | 50 +++-- .../examplepb/unannotated_echo_service.pb.go | 14 +- .../unannotated_echo_service_grpc.pb.go | 10 +- .../proto/examplepb/use_go_template.pb.go | 2 +- .../examplepb/use_go_template_grpc.pb.go | 10 +- .../internal/proto/examplepb/wrappers.pb.go | 64 +++--- .../proto/examplepb/wrappers.pb.gw.go | 44 ++-- .../proto/examplepb/wrappers.swagger.json | 2 +- .../proto/examplepb/wrappers_grpc.pb.go | 154 ++++++------- .../internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- go.mod | 2 - go.sum | 210 +----------------- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- .../openapiconfig/openapiconfig.pb.go | 2 +- .../options/annotations.pb.go | 44 ++-- protoc-gen-openapiv2/options/openapiv2.pb.go | 40 ++-- repositories.bzl | 20 +- runtime/internal/examplepb/example.pb.go | 42 ++-- .../internal/examplepb/example.swagger.json | 2 +- .../examplepb/non_standard_names.pb.go | 38 ++-- .../examplepb/non_standard_names.swagger.json | 2 +- .../examplepb/non_standard_names_grpc.pb.go | 10 +- runtime/internal/examplepb/proto2.pb.go | 2 +- .../internal/examplepb/proto2.swagger.json | 2 +- runtime/internal/examplepb/proto3.pb.go | 176 +++++++-------- .../internal/examplepb/proto3.swagger.json | 2 +- tools.go | 9 - 66 files changed, 719 insertions(+), 868 deletions(-) delete mode 100644 tools.go diff --git a/Makefile b/Makefile index 5d538701de4..b5771c8ccfb 100644 --- a/Makefile +++ b/Makefile @@ -81,11 +81,16 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE @rm -f $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/README.md \ $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh +TMP_INSTALL_DIR := $(shell mktemp -d) install: + @mkdir -p ${TMP_INSTALL_DIR} + cd ${TMP_INSTALL_DIR} && go get \ + google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 \ + google.golang.org/protobuf/cmd/protoc-gen-go@v1.26.0 \ + github.com/bufbuild/buf/cmd/buf@v0.41.0 + @rmdir ${TMP_INSTALL_DIR} + go install \ - google.golang.org/grpc/cmd/protoc-gen-go-grpc \ - google.golang.org/protobuf/cmd/protoc-gen-go \ - github.com/bufbuild/buf/cmd/buf \ ./protoc-gen-openapiv2 \ ./protoc-gen-grpc-gateway diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 4450f3e0c6b..13e1de24603 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2957,17 +2957,17 @@ definitions: \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ - \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ - \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ - \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ - \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ - \ URL and the unpack\nmethods only use the fully qualified type name after the\ - \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ - name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ - \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ - additional field `@type` which contains the type URL. Example:\n\n package\ - \ google.profile;\n message Person {\n string first_name = 1;\n \ - \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err\ + \ != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err\ + \ := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods\ + \ provided by protobuf library will by default use\n'type.googleapis.com/full.type.name'\ + \ as the type URL and the unpack\nmethods only use the fully qualified type\ + \ name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\"\ + \ will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of\ + \ an `Any` value uses the regular\nrepresentation of the deserialized, embedded\ + \ message, with an\nadditional field `@type` which contains the type URL. Example:\n\ + \n package google.profile;\n message Person {\n string first_name\ + \ = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ \ that representation will be embedded adding a field\n`value` which holds the\ diff --git a/examples/internal/clients/abe/model_protobuf_any.go b/examples/internal/clients/abe/model_protobuf_any.go index f0b26154ef9..b5a16c530f3 100644 --- a/examples/internal/clients/abe/model_protobuf_any.go +++ b/examples/internal/clients/abe/model_protobuf_any.go @@ -10,7 +10,7 @@ package abe -// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. TypeUrl string `json:"typeUrl,omitempty"` diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 905cda4bb73..2e57756aa29 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -561,17 +561,17 @@ definitions: \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ - \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ - \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ - \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ - \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ - \ URL and the unpack\nmethods only use the fully qualified type name after the\ - \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ - name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ - \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ - additional field `@type` which contains the type URL. Example:\n\n package\ - \ google.profile;\n message Person {\n string first_name = 1;\n \ - \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err\ + \ != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err\ + \ := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods\ + \ provided by protobuf library will by default use\n'type.googleapis.com/full.type.name'\ + \ as the type URL and the unpack\nmethods only use the fully qualified type\ + \ name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\"\ + \ will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of\ + \ an `Any` value uses the regular\nrepresentation of the deserialized, embedded\ + \ message, with an\nadditional field `@type` which contains the type URL. Example:\n\ + \n package google.profile;\n message Person {\n string first_name\ + \ = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ \ that representation will be embedded adding a field\n`value` which holds the\ diff --git a/examples/internal/clients/echo/model_protobuf_any.go b/examples/internal/clients/echo/model_protobuf_any.go index eca688d5411..90c6c3f3d8f 100644 --- a/examples/internal/clients/echo/model_protobuf_any.go +++ b/examples/internal/clients/echo/model_protobuf_any.go @@ -9,7 +9,7 @@ package echo -// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. TypeUrl string `json:"typeUrl,omitempty"` diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 6bbce165148..d01d8183daf 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -186,17 +186,17 @@ definitions: \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ - \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ - \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ - \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ - \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ - \ URL and the unpack\nmethods only use the fully qualified type name after the\ - \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ - name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ - \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ - additional field `@type` which contains the type URL. Example:\n\n package\ - \ google.profile;\n message Person {\n string first_name = 1;\n \ - \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err\ + \ != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err\ + \ := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods\ + \ provided by protobuf library will by default use\n'type.googleapis.com/full.type.name'\ + \ as the type URL and the unpack\nmethods only use the fully qualified type\ + \ name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\"\ + \ will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of\ + \ an `Any` value uses the regular\nrepresentation of the deserialized, embedded\ + \ message, with an\nadditional field `@type` which contains the type URL. Example:\n\ + \n package google.profile;\n message Person {\n string first_name\ + \ = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ \ that representation will be embedded adding a field\n`value` which holds the\ diff --git a/examples/internal/clients/responsebody/model_protobuf_any.go b/examples/internal/clients/responsebody/model_protobuf_any.go index 37441229127..a337ce42454 100644 --- a/examples/internal/clients/responsebody/model_protobuf_any.go +++ b/examples/internal/clients/responsebody/model_protobuf_any.go @@ -9,7 +9,7 @@ package responsebody -// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. TypeUrl string `json:"typeUrl,omitempty"` diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index c6fc1f07757..de4212a8eab 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,16 +1,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/helloworld/helloworld.proto package helloworld import ( - wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -27,16 +27,16 @@ type HelloRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - StrVal *wrappers.StringValue `protobuf:"bytes,2,opt,name=strVal,proto3" json:"strVal,omitempty"` - FloatVal *wrappers.FloatValue `protobuf:"bytes,3,opt,name=floatVal,proto3" json:"floatVal,omitempty"` - DoubleVal *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=doubleVal,proto3" json:"doubleVal,omitempty"` - BoolVal *wrappers.BoolValue `protobuf:"bytes,5,opt,name=boolVal,proto3" json:"boolVal,omitempty"` - BytesVal *wrappers.BytesValue `protobuf:"bytes,6,opt,name=bytesVal,proto3" json:"bytesVal,omitempty"` - Int32Val *wrappers.Int32Value `protobuf:"bytes,7,opt,name=int32Val,proto3" json:"int32Val,omitempty"` - Uint32Val *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=uint32Val,proto3" json:"uint32Val,omitempty"` - Int64Val *wrappers.Int64Value `protobuf:"bytes,9,opt,name=int64Val,proto3" json:"int64Val,omitempty"` - Uint64Val *wrappers.UInt64Value `protobuf:"bytes,10,opt,name=uint64Val,proto3" json:"uint64Val,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + StrVal *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=strVal,proto3" json:"strVal,omitempty"` + FloatVal *wrapperspb.FloatValue `protobuf:"bytes,3,opt,name=floatVal,proto3" json:"floatVal,omitempty"` + DoubleVal *wrapperspb.DoubleValue `protobuf:"bytes,4,opt,name=doubleVal,proto3" json:"doubleVal,omitempty"` + BoolVal *wrapperspb.BoolValue `protobuf:"bytes,5,opt,name=boolVal,proto3" json:"boolVal,omitempty"` + BytesVal *wrapperspb.BytesValue `protobuf:"bytes,6,opt,name=bytesVal,proto3" json:"bytesVal,omitempty"` + Int32Val *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=int32Val,proto3" json:"int32Val,omitempty"` + Uint32Val *wrapperspb.UInt32Value `protobuf:"bytes,8,opt,name=uint32Val,proto3" json:"uint32Val,omitempty"` + Int64Val *wrapperspb.Int64Value `protobuf:"bytes,9,opt,name=int64Val,proto3" json:"int64Val,omitempty"` + Uint64Val *wrapperspb.UInt64Value `protobuf:"bytes,10,opt,name=uint64Val,proto3" json:"uint64Val,omitempty"` } func (x *HelloRequest) Reset() { @@ -78,63 +78,63 @@ func (x *HelloRequest) GetName() string { return "" } -func (x *HelloRequest) GetStrVal() *wrappers.StringValue { +func (x *HelloRequest) GetStrVal() *wrapperspb.StringValue { if x != nil { return x.StrVal } return nil } -func (x *HelloRequest) GetFloatVal() *wrappers.FloatValue { +func (x *HelloRequest) GetFloatVal() *wrapperspb.FloatValue { if x != nil { return x.FloatVal } return nil } -func (x *HelloRequest) GetDoubleVal() *wrappers.DoubleValue { +func (x *HelloRequest) GetDoubleVal() *wrapperspb.DoubleValue { if x != nil { return x.DoubleVal } return nil } -func (x *HelloRequest) GetBoolVal() *wrappers.BoolValue { +func (x *HelloRequest) GetBoolVal() *wrapperspb.BoolValue { if x != nil { return x.BoolVal } return nil } -func (x *HelloRequest) GetBytesVal() *wrappers.BytesValue { +func (x *HelloRequest) GetBytesVal() *wrapperspb.BytesValue { if x != nil { return x.BytesVal } return nil } -func (x *HelloRequest) GetInt32Val() *wrappers.Int32Value { +func (x *HelloRequest) GetInt32Val() *wrapperspb.Int32Value { if x != nil { return x.Int32Val } return nil } -func (x *HelloRequest) GetUint32Val() *wrappers.UInt32Value { +func (x *HelloRequest) GetUint32Val() *wrapperspb.UInt32Value { if x != nil { return x.Uint32Val } return nil } -func (x *HelloRequest) GetInt64Val() *wrappers.Int64Value { +func (x *HelloRequest) GetInt64Val() *wrapperspb.Int64Value { if x != nil { return x.Int64Val } return nil } -func (x *HelloRequest) GetUint64Val() *wrappers.UInt64Value { +func (x *HelloRequest) GetUint64Val() *wrapperspb.UInt64Value { if x != nil { return x.Uint64Val } @@ -285,17 +285,17 @@ func file_examples_internal_helloworld_helloworld_proto_rawDescGZIP() []byte { var file_examples_internal_helloworld_helloworld_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_examples_internal_helloworld_helloworld_proto_goTypes = []interface{}{ - (*HelloRequest)(nil), // 0: grpc.gateway.examples.internal.helloworld.HelloRequest - (*HelloReply)(nil), // 1: grpc.gateway.examples.internal.helloworld.HelloReply - (*wrappers.StringValue)(nil), // 2: google.protobuf.StringValue - (*wrappers.FloatValue)(nil), // 3: google.protobuf.FloatValue - (*wrappers.DoubleValue)(nil), // 4: google.protobuf.DoubleValue - (*wrappers.BoolValue)(nil), // 5: google.protobuf.BoolValue - (*wrappers.BytesValue)(nil), // 6: google.protobuf.BytesValue - (*wrappers.Int32Value)(nil), // 7: google.protobuf.Int32Value - (*wrappers.UInt32Value)(nil), // 8: google.protobuf.UInt32Value - (*wrappers.Int64Value)(nil), // 9: google.protobuf.Int64Value - (*wrappers.UInt64Value)(nil), // 10: google.protobuf.UInt64Value + (*HelloRequest)(nil), // 0: grpc.gateway.examples.internal.helloworld.HelloRequest + (*HelloReply)(nil), // 1: grpc.gateway.examples.internal.helloworld.HelloReply + (*wrapperspb.StringValue)(nil), // 2: google.protobuf.StringValue + (*wrapperspb.FloatValue)(nil), // 3: google.protobuf.FloatValue + (*wrapperspb.DoubleValue)(nil), // 4: google.protobuf.DoubleValue + (*wrapperspb.BoolValue)(nil), // 5: google.protobuf.BoolValue + (*wrapperspb.BytesValue)(nil), // 6: google.protobuf.BytesValue + (*wrapperspb.Int32Value)(nil), // 7: google.protobuf.Int32Value + (*wrapperspb.UInt32Value)(nil), // 8: google.protobuf.UInt32Value + (*wrapperspb.Int64Value)(nil), // 9: google.protobuf.Int64Value + (*wrapperspb.UInt64Value)(nil), // 10: google.protobuf.UInt64Value } var file_examples_internal_helloworld_helloworld_proto_depIdxs = []int32{ 2, // 0: grpc.gateway.examples.internal.helloworld.HelloRequest.strVal:type_name -> google.protobuf.StringValue diff --git a/examples/internal/helloworld/helloworld_grpc.pb.go b/examples/internal/helloworld/helloworld_grpc.pb.go index 66bef337188..e2604a3a6d3 100644 --- a/examples/internal/helloworld/helloworld_grpc.pb.go +++ b/examples/internal/helloworld/helloworld_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // GreeterClient is the client API for Greeter service. @@ -59,8 +60,8 @@ type UnsafeGreeterServer interface { mustEmbedUnimplementedGreeterServer() } -func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { - s.RegisterService(&_Greeter_serviceDesc, srv) +func RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer) { + s.RegisterService(&Greeter_ServiceDesc, srv) } func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -81,7 +82,10 @@ func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -var _Greeter_serviceDesc = grpc.ServiceDesc{ +// Greeter_ServiceDesc is the grpc.ServiceDesc for Greeter service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Greeter_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.helloworld.Greeter", HandlerType: (*GreeterServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 8fbf7fedefc..128682cfc32 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,25 +1,25 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb import ( - duration "github.com/golang/protobuf/ptypes/duration" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" - wrappers "github.com/golang/protobuf/ptypes/wrappers" pathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" sub2 "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" _ "google.golang.org/genproto/googleapis/api/annotations" status "google.golang.org/genproto/googleapis/rpc/status" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -275,7 +275,7 @@ type ABitOfEverything struct { MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` // repeated numeric enum comment (This comment is overridden by the field annotation) @@ -489,7 +489,7 @@ func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { return nil } -func (x *ABitOfEverything) GetOneofEmpty() *empty.Empty { +func (x *ABitOfEverything) GetOneofEmpty() *emptypb.Empty { if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty } @@ -531,7 +531,7 @@ func (x *ABitOfEverything) GetNonConventionalNameValue() string { return "" } -func (x *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { +func (x *ABitOfEverything) GetTimestampValue() *timestamppb.Timestamp { if x != nil { return x.TimestampValue } @@ -613,7 +613,7 @@ type isABitOfEverything_OneofValue interface { } type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` + OneofEmpty *emptypb.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` } type ABitOfEverything_OneofString struct { @@ -950,7 +950,7 @@ type UpdateV2Request struct { Abe *ABitOfEverything `protobuf:"bytes,1,opt,name=abe,proto3" json:"abe,omitempty"` // The paths to update. - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *UpdateV2Request) Reset() { @@ -992,7 +992,7 @@ func (x *UpdateV2Request) GetAbe() *ABitOfEverything { return nil } -func (x *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { +func (x *UpdateV2Request) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -1017,7 +1017,7 @@ type Book struct { // Output only. The book's ID. Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` // Output only. Creation time of the book. - CreateTime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + CreateTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` } func (x *Book) Reset() { @@ -1066,7 +1066,7 @@ func (x *Book) GetId() string { return "" } -func (x *Book) GetCreateTime() *timestamp.Timestamp { +func (x *Book) GetCreateTime() *timestamppb.Timestamp { if x != nil { return x.CreateTime } @@ -1164,7 +1164,7 @@ type UpdateBookRequest struct { // Format: publishers/{publisher}/books/{book} Book *Book `protobuf:"bytes,1,opt,name=book,proto3" json:"book,omitempty"` // The list of fields to be updated. - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` // If set to true, and the book is not found, a new book will be created. // In this situation, `update_mask` is ignored. AllowMissing bool `protobuf:"varint,3,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"` @@ -1209,7 +1209,7 @@ func (x *UpdateBookRequest) GetBook() *Book { return nil } -func (x *UpdateBookRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *UpdateBookRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -2238,16 +2238,16 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = [ nil, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry (pathenum.PathEnum)(0), // 17: grpc.gateway.examples.internal.pathenum.PathEnum (pathenum.MessagePathEnum_NestedPathEnum)(0), // 18: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*empty.Empty)(nil), // 19: google.protobuf.Empty - (*timestamp.Timestamp)(nil), // 20: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 19: google.protobuf.Empty + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp (*status.Status)(nil), // 21: google.rpc.Status - (*field_mask.FieldMask)(nil), // 22: google.protobuf.FieldMask + (*fieldmaskpb.FieldMask)(nil), // 22: google.protobuf.FieldMask (*sub2.IdMessage)(nil), // 23: grpc.gateway.examples.internal.proto.sub2.IdMessage (*sub.StringMessage)(nil), // 24: grpc.gateway.examples.internal.proto.sub.StringMessage - (*duration.Duration)(nil), // 25: google.protobuf.Duration + (*durationpb.Duration)(nil), // 25: google.protobuf.Duration (*pathenum.MessageWithPathEnum)(nil), // 26: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum (*pathenum.MessageWithNestedPathEnum)(nil), // 27: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*wrappers.StringValue)(nil), // 28: google.protobuf.StringValue + (*wrapperspb.StringValue)(nil), // 28: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ 3, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 25a9a60c826..d7f11e68ca0 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -25,6 +24,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -1756,7 +1756,7 @@ func local_request_ABitOfEverythingService_DeepPathEcho_0(ctx context.Context, m } func request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.Timeout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -1765,7 +1765,7 @@ func request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler ru } func local_request_ABitOfEverythingService_Timeout_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.Timeout(ctx, &protoReq) @@ -1774,7 +1774,7 @@ func local_request_ABitOfEverythingService_Timeout_0(ctx context.Context, marsha } func request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.ErrorWithDetails(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -1783,7 +1783,7 @@ func request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, mar } func local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.ErrorWithDetails(ctx, &protoReq) @@ -2170,7 +2170,7 @@ func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Co } func request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.OverwriteResponseContentType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -2179,7 +2179,7 @@ func request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context. } func local_request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.OverwriteResponseContentType(ctx, &protoReq) @@ -2304,7 +2304,7 @@ func local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx con } func request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.CheckStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -2313,7 +2313,7 @@ func request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, marshale } func local_request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.CheckStatus(ctx, &protoReq) @@ -2322,7 +2322,7 @@ func local_request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, ma } func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.Empty(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -2331,7 +2331,7 @@ func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime } func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, server CamelCaseServiceNameServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.Empty(ctx, &protoReq) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 8fa007da96c..7e284e79496 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -3790,7 +3790,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index dd4d017c60a..c6c4df94993 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -4,19 +4,20 @@ package examplepb import ( context "context" - duration "github.com/golang/protobuf/ptypes/duration" - empty "github.com/golang/protobuf/ptypes/empty" - wrappers "github.com/golang/protobuf/ptypes/wrappers" pathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" sub2 "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + durationpb "google.golang.org/protobuf/types/known/durationpb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" ) // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. @@ -32,10 +33,10 @@ type ABitOfEverythingServiceClient interface { CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) - Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) - UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) - Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) - GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) + Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) + UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error) + Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) + GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) // Echo allows posting a StringMessage value. // @@ -46,18 +47,18 @@ type ABitOfEverythingServiceClient interface { // defined as additional_bindings in the proto. Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) - NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) - Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) - ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) - GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) - PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) + NoBindings(ctx context.Context, in *durationpb.Duration, opts ...grpc.CallOption) (*emptypb.Empty, error) + Timeout(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) + ErrorWithDetails(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) + GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*emptypb.Empty, error) + PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) - OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) - CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*empty.Empty, error) - CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*empty.Empty, error) - CheckStatus(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) + OverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) + CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) + CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) + CheckStatus(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) } type aBitOfEverythingServiceClient struct { @@ -113,8 +114,8 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM return out, nil } -func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", in, out, opts...) if err != nil { return nil, err @@ -122,8 +123,8 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv return out, nil } -func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) if err != nil { return nil, err @@ -131,8 +132,8 @@ func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *Update return out, nil } -func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", in, out, opts...) if err != nil { return nil, err @@ -140,8 +141,8 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM return out, nil } -func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) if err != nil { return nil, err @@ -176,8 +177,8 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB return out, nil } -func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *durationpb.Duration, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) if err != nil { return nil, err @@ -185,8 +186,8 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura return out, nil } -func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) if err != nil { return nil, err @@ -194,8 +195,8 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E return out, nil } -func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) if err != nil { return nil, err @@ -203,8 +204,8 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in return out, nil } -func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) if err != nil { return nil, err @@ -212,8 +213,8 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, return out, nil } -func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) if err != nil { return nil, err @@ -248,8 +249,8 @@ func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context return out, nil } -func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) { - out := new(wrappers.StringValue) +func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) { + out := new(wrapperspb.StringValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) if err != nil { return nil, err @@ -257,8 +258,8 @@ func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context return out, nil } -func (c *aBitOfEverythingServiceClient) CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", in, out, opts...) if err != nil { return nil, err @@ -266,8 +267,8 @@ func (c *aBitOfEverythingServiceClient) CheckExternalPathEnum(ctx context.Contex return out, nil } -func (c *aBitOfEverythingServiceClient) CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *aBitOfEverythingServiceClient) CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", in, out, opts...) if err != nil { return nil, err @@ -275,7 +276,7 @@ func (c *aBitOfEverythingServiceClient) CheckExternalNestedPathEnum(ctx context. return out, nil } -func (c *aBitOfEverythingServiceClient) CheckStatus(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) { +func (c *aBitOfEverythingServiceClient) CheckStatus(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) { out := new(CheckStatusResponse) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", in, out, opts...) if err != nil { @@ -297,10 +298,10 @@ type ABitOfEverythingServiceServer interface { CreateBook(context.Context, *CreateBookRequest) (*Book, error) UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) - Update(context.Context, *ABitOfEverything) (*empty.Empty, error) - UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) - Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) - GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) + Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) + UpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error) + Delete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error) + GetQuery(context.Context, *ABitOfEverything) (*emptypb.Empty, error) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) // Echo allows posting a StringMessage value. // @@ -311,18 +312,18 @@ type ABitOfEverythingServiceServer interface { // defined as additional_bindings in the proto. Echo(context.Context, *sub.StringMessage) (*sub.StringMessage, error) DeepPathEcho(context.Context, *ABitOfEverything) (*ABitOfEverything, error) - NoBindings(context.Context, *duration.Duration) (*empty.Empty, error) - Timeout(context.Context, *empty.Empty) (*empty.Empty, error) - ErrorWithDetails(context.Context, *empty.Empty) (*empty.Empty, error) - GetMessageWithBody(context.Context, *MessageWithBody) (*empty.Empty, error) - PostWithEmptyBody(context.Context, *Body) (*empty.Empty, error) + NoBindings(context.Context, *durationpb.Duration) (*emptypb.Empty, error) + Timeout(context.Context, *emptypb.Empty) (*emptypb.Empty, error) + ErrorWithDetails(context.Context, *emptypb.Empty) (*emptypb.Empty, error) + GetMessageWithBody(context.Context, *MessageWithBody) (*emptypb.Empty, error) + PostWithEmptyBody(context.Context, *Body) (*emptypb.Empty, error) CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) - OverwriteResponseContentType(context.Context, *empty.Empty) (*wrappers.StringValue, error) - CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*empty.Empty, error) - CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*empty.Empty, error) - CheckStatus(context.Context, *empty.Empty) (*CheckStatusResponse, error) + OverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error) + CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) + CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) + CheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error) } // UnimplementedABitOfEverythingServiceServer should be embedded to have forward compatible implementations. @@ -344,16 +345,16 @@ func (UnimplementedABitOfEverythingServiceServer) UpdateBook(context.Context, *U func (UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") } -func (UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } -func (UnimplementedABitOfEverythingServiceServer) UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) UpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateV2 not implemented") } -func (UnimplementedABitOfEverythingServiceServer) Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) Delete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") } -func (UnimplementedABitOfEverythingServiceServer) GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) GetQuery(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method GetQuery not implemented") } func (UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) { @@ -365,19 +366,19 @@ func (UnimplementedABitOfEverythingServiceServer) Echo(context.Context, *sub.Str func (UnimplementedABitOfEverythingServiceServer) DeepPathEcho(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method DeepPathEcho not implemented") } -func (UnimplementedABitOfEverythingServiceServer) NoBindings(context.Context, *duration.Duration) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) NoBindings(context.Context, *durationpb.Duration) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") } -func (UnimplementedABitOfEverythingServiceServer) Timeout(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) Timeout(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Timeout not implemented") } -func (UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ErrorWithDetails not implemented") } -func (UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(context.Context, *MessageWithBody) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(context.Context, *MessageWithBody) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMessageWithBody not implemented") } -func (UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(context.Context, *Body) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(context.Context, *Body) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method PostWithEmptyBody not implemented") } func (UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { @@ -389,16 +390,16 @@ func (UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams( func (UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckPostQueryParams not implemented") } -func (UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(context.Context, *empty.Empty) (*wrappers.StringValue, error) { +func (UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error) { return nil, status.Errorf(codes.Unimplemented, "method OverwriteResponseContentType not implemented") } -func (UnimplementedABitOfEverythingServiceServer) CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckExternalPathEnum not implemented") } -func (UnimplementedABitOfEverythingServiceServer) CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*empty.Empty, error) { +func (UnimplementedABitOfEverythingServiceServer) CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckExternalNestedPathEnum not implemented") } -func (UnimplementedABitOfEverythingServiceServer) CheckStatus(context.Context, *empty.Empty) (*CheckStatusResponse, error) { +func (UnimplementedABitOfEverythingServiceServer) CheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckStatus not implemented") } @@ -409,8 +410,8 @@ type UnsafeABitOfEverythingServiceServer interface { mustEmbedUnimplementedABitOfEverythingServiceServer() } -func RegisterABitOfEverythingServiceServer(s *grpc.Server, srv ABitOfEverythingServiceServer) { - s.RegisterService(&_ABitOfEverythingService_serviceDesc, srv) +func RegisterABitOfEverythingServiceServer(s grpc.ServiceRegistrar, srv ABitOfEverythingServiceServer) { + s.RegisterService(&ABitOfEverythingService_ServiceDesc, srv) } func _ABitOfEverythingService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -630,7 +631,7 @@ func _ABitOfEverythingService_DeepPathEcho_Handler(srv interface{}, ctx context. } func _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(duration.Duration) + in := new(durationpb.Duration) if err := dec(in); err != nil { return nil, err } @@ -642,13 +643,13 @@ func _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx context.Co FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).NoBindings(ctx, req.(*duration.Duration)) + return srv.(ABitOfEverythingServiceServer).NoBindings(ctx, req.(*durationpb.Duration)) } return interceptor(ctx, in, info, handler) } func _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -660,13 +661,13 @@ func _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx context.Conte FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).Timeout(ctx, req.(*empty.Empty)) + return srv.(ABitOfEverythingServiceServer).Timeout(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } func _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -678,7 +679,7 @@ func _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ctx cont FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, req.(*empty.Empty)) + return srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } @@ -774,7 +775,7 @@ func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx } func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -786,7 +787,7 @@ func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*empty.Empty)) + return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } @@ -828,7 +829,7 @@ func _ABitOfEverythingService_CheckExternalNestedPathEnum_Handler(srv interface{ } func _ABitOfEverythingService_CheckStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -840,12 +841,15 @@ func _ABitOfEverythingService_CheckStatus_Handler(srv interface{}, ctx context.C FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ABitOfEverythingServiceServer).CheckStatus(ctx, req.(*empty.Empty)) + return srv.(ABitOfEverythingServiceServer).CheckStatus(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } -var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ +// ABitOfEverythingService_ServiceDesc is the grpc.ServiceDesc for ABitOfEverythingService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService", HandlerType: (*ABitOfEverythingServiceServer)(nil), Methods: []grpc.MethodDesc{ @@ -954,7 +958,7 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type CamelCaseServiceNameClient interface { - Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + Empty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) } type camelCaseServiceNameClient struct { @@ -965,8 +969,8 @@ func NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCaseService return &camelCaseServiceNameClient{cc} } -func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName/Empty", in, out, opts...) if err != nil { return nil, err @@ -978,14 +982,14 @@ func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, // All implementations should embed UnimplementedCamelCaseServiceNameServer // for forward compatibility type CamelCaseServiceNameServer interface { - Empty(context.Context, *empty.Empty) (*empty.Empty, error) + Empty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) } // UnimplementedCamelCaseServiceNameServer should be embedded to have forward compatible implementations. type UnimplementedCamelCaseServiceNameServer struct { } -func (UnimplementedCamelCaseServiceNameServer) Empty(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedCamelCaseServiceNameServer) Empty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Empty not implemented") } @@ -996,12 +1000,12 @@ type UnsafeCamelCaseServiceNameServer interface { mustEmbedUnimplementedCamelCaseServiceNameServer() } -func RegisterCamelCaseServiceNameServer(s *grpc.Server, srv CamelCaseServiceNameServer) { - s.RegisterService(&_CamelCaseServiceName_serviceDesc, srv) +func RegisterCamelCaseServiceNameServer(s grpc.ServiceRegistrar, srv CamelCaseServiceNameServer) { + s.RegisterService(&CamelCaseServiceName_ServiceDesc, srv) } func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -1013,12 +1017,15 @@ func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, d FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName/Empty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CamelCaseServiceNameServer).Empty(ctx, req.(*empty.Empty)) + return srv.(CamelCaseServiceNameServer).Empty(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } -var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ +// CamelCaseServiceName_ServiceDesc is the grpc.ServiceDesc for CamelCaseServiceName service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var CamelCaseServiceName_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName", HandlerType: (*CamelCaseServiceNameServer)(nil), Methods: []grpc.MethodDesc{ @@ -1035,7 +1042,7 @@ var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AnotherServiceWithNoBindingsClient interface { - NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + NoBindings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) } type anotherServiceWithNoBindingsClient struct { @@ -1046,8 +1053,8 @@ func NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) AnotherS return &anotherServiceWithNoBindingsClient{cc} } -func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) if err != nil { return nil, err @@ -1059,14 +1066,14 @@ func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in // All implementations should embed UnimplementedAnotherServiceWithNoBindingsServer // for forward compatibility type AnotherServiceWithNoBindingsServer interface { - NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) + NoBindings(context.Context, *emptypb.Empty) (*emptypb.Empty, error) } // UnimplementedAnotherServiceWithNoBindingsServer should be embedded to have forward compatible implementations. type UnimplementedAnotherServiceWithNoBindingsServer struct { } -func (UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") } @@ -1077,12 +1084,12 @@ type UnsafeAnotherServiceWithNoBindingsServer interface { mustEmbedUnimplementedAnotherServiceWithNoBindingsServer() } -func RegisterAnotherServiceWithNoBindingsServer(s *grpc.Server, srv AnotherServiceWithNoBindingsServer) { - s.RegisterService(&_AnotherServiceWithNoBindings_serviceDesc, srv) +func RegisterAnotherServiceWithNoBindingsServer(s grpc.ServiceRegistrar, srv AnotherServiceWithNoBindingsServer) { + s.RegisterService(&AnotherServiceWithNoBindings_ServiceDesc, srv) } func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -1094,12 +1101,15 @@ func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx conte FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, req.(*empty.Empty)) + return srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } -var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ +// AnotherServiceWithNoBindings_ServiceDesc is the grpc.ServiceDesc for AnotherServiceWithNoBindings service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var AnotherServiceWithNoBindings_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings", HandlerType: (*AnotherServiceWithNoBindingsServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index b5d81c5cb09..59d5eea2443 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service @@ -12,11 +12,11 @@ package examplepb import ( - _struct "github.com/golang/protobuf/ptypes/struct" _ "google.golang.org/genproto/googleapis/api/annotations" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -263,8 +263,8 @@ type DynamicMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - StructField *_struct.Struct `protobuf:"bytes,1,opt,name=struct_field,json=structField,proto3" json:"struct_field,omitempty"` - ValueField *_struct.Value `protobuf:"bytes,2,opt,name=value_field,json=valueField,proto3" json:"value_field,omitempty"` + StructField *structpb.Struct `protobuf:"bytes,1,opt,name=struct_field,json=structField,proto3" json:"struct_field,omitempty"` + ValueField *structpb.Value `protobuf:"bytes,2,opt,name=value_field,json=valueField,proto3" json:"value_field,omitempty"` } func (x *DynamicMessage) Reset() { @@ -299,14 +299,14 @@ func (*DynamicMessage) Descriptor() ([]byte, []int) { return file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{2} } -func (x *DynamicMessage) GetStructField() *_struct.Struct { +func (x *DynamicMessage) GetStructField() *structpb.Struct { if x != nil { return x.StructField } return nil } -func (x *DynamicMessage) GetValueField() *_struct.Value { +func (x *DynamicMessage) GetValueField() *structpb.Value { if x != nil { return x.ValueField } @@ -318,8 +318,8 @@ type DynamicMessageUpdate struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Body *DynamicMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + Body *DynamicMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *DynamicMessageUpdate) Reset() { @@ -361,7 +361,7 @@ func (x *DynamicMessageUpdate) GetBody() *DynamicMessage { return nil } -func (x *DynamicMessageUpdate) GetUpdateMask() *field_mask.FieldMask { +func (x *DynamicMessageUpdate) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -502,13 +502,13 @@ func file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP() []b var file_examples_internal_proto_examplepb_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_examples_internal_proto_examplepb_echo_service_proto_goTypes = []interface{}{ - (*Embedded)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Embedded - (*SimpleMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage - (*DynamicMessage)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.DynamicMessage - (*DynamicMessageUpdate)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate - (*_struct.Struct)(nil), // 4: google.protobuf.Struct - (*_struct.Value)(nil), // 5: google.protobuf.Value - (*field_mask.FieldMask)(nil), // 6: google.protobuf.FieldMask + (*Embedded)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Embedded + (*SimpleMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + (*DynamicMessage)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.DynamicMessage + (*DynamicMessageUpdate)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate + (*structpb.Struct)(nil), // 4: google.protobuf.Struct + (*structpb.Value)(nil), // 5: google.protobuf.Value + (*fieldmaskpb.FieldMask)(nil), // 6: google.protobuf.FieldMask } var file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = []int32{ 0, // 0: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.Embedded diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 56d237f68ef..69c4fe2a44f 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -621,7 +621,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "protobufNullValue": { "type": "string", diff --git a/examples/internal/proto/examplepb/echo_service_grpc.pb.go b/examples/internal/proto/examplepb/echo_service_grpc.pb.go index 36e2c2e74f6..5bd5a273cd4 100644 --- a/examples/internal/proto/examplepb/echo_service_grpc.pb.go +++ b/examples/internal/proto/examplepb/echo_service_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // EchoServiceClient is the client API for EchoService service. @@ -115,8 +116,8 @@ type UnsafeEchoServiceServer interface { mustEmbedUnimplementedEchoServiceServer() } -func RegisterEchoServiceServer(s *grpc.Server, srv EchoServiceServer) { - s.RegisterService(&_EchoService_serviceDesc, srv) +func RegisterEchoServiceServer(s grpc.ServiceRegistrar, srv EchoServiceServer) { + s.RegisterService(&EchoService_ServiceDesc, srv) } func _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -191,7 +192,10 @@ func _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } -var _EchoService_serviceDesc = grpc.ServiceDesc{ +// EchoService_ServiceDesc is the grpc.ServiceDesc for EchoService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var EchoService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.EchoService", HandlerType: (*EchoServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 30b7bc2a2c7..04e5bbb5872 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json index 128107a8e82..51ed6f2af58 100644 --- a/examples/internal/proto/examplepb/flow_combination.swagger.json +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -935,7 +935,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/flow_combination_grpc.pb.go b/examples/internal/proto/examplepb/flow_combination_grpc.pb.go index 7d3775ecdf9..e1bb90a95c9 100644 --- a/examples/internal/proto/examplepb/flow_combination_grpc.pb.go +++ b/examples/internal/proto/examplepb/flow_combination_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // FlowCombinationClient is the client API for FlowCombination service. @@ -47,7 +48,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -79,7 +80,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -113,7 +114,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -171,7 +172,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -203,7 +204,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[4], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -235,7 +236,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &FlowCombination_ServiceDesc.Streams[5], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -324,8 +325,8 @@ type UnsafeFlowCombinationServer interface { mustEmbedUnimplementedFlowCombinationServer() } -func RegisterFlowCombinationServer(s *grpc.Server, srv FlowCombinationServer) { - s.RegisterService(&_FlowCombination_serviceDesc, srv) +func RegisterFlowCombinationServer(s grpc.ServiceRegistrar, srv FlowCombinationServer) { + s.RegisterService(&FlowCombination_ServiceDesc, srv) } func _FlowCombination_RpcEmptyRpc_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -536,7 +537,10 @@ func (x *flowCombinationRpcPathNestedStreamServer) Send(m *EmptyProto) error { return x.ServerStream.SendMsg(m) } -var _FlowCombination_serviceDesc = grpc.ServiceDesc{ +// FlowCombination_ServiceDesc is the grpc.ServiceDesc for FlowCombination service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var FlowCombination_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.FlowCombination", HandlerType: (*FlowCombinationServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index 305c44ec563..c35c8561d0a 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service @@ -13,9 +13,9 @@ package examplepb import ( - duration "github.com/golang/protobuf/ptypes/duration" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" reflect "reflect" sync "sync" ) @@ -34,9 +34,9 @@ type GenerateUnboundMethodsSimpleMessage struct { unknownFields protoimpl.UnknownFields // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Duration *durationpb.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` } func (x *GenerateUnboundMethodsSimpleMessage) Reset() { @@ -85,7 +85,7 @@ func (x *GenerateUnboundMethodsSimpleMessage) GetNum() int64 { return 0 } -func (x *GenerateUnboundMethodsSimpleMessage) GetDuration() *duration.Duration { +func (x *GenerateUnboundMethodsSimpleMessage) GetDuration() *durationpb.Duration { if x != nil { return x.Duration } @@ -172,7 +172,7 @@ func file_examples_internal_proto_examplepb_generate_unbound_methods_proto_rawDe var file_examples_internal_proto_examplepb_generate_unbound_methods_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_examples_internal_proto_examplepb_generate_unbound_methods_proto_goTypes = []interface{}{ (*GenerateUnboundMethodsSimpleMessage)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage - (*duration.Duration)(nil), // 1: google.protobuf.Duration + (*durationpb.Duration)(nil), // 1: google.protobuf.Duration } var file_examples_internal_proto_examplepb_generate_unbound_methods_proto_depIdxs = []int32{ 1, // 0: grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsSimpleMessage.duration:type_name -> google.protobuf.Duration diff --git a/examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go index cf2fd9fc3b4..3ee17a66351 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // GenerateUnboundMethodsEchoServiceClient is the client API for GenerateUnboundMethodsEchoService service. @@ -99,8 +100,8 @@ type UnsafeGenerateUnboundMethodsEchoServiceServer interface { mustEmbedUnimplementedGenerateUnboundMethodsEchoServiceServer() } -func RegisterGenerateUnboundMethodsEchoServiceServer(s *grpc.Server, srv GenerateUnboundMethodsEchoServiceServer) { - s.RegisterService(&_GenerateUnboundMethodsEchoService_serviceDesc, srv) +func RegisterGenerateUnboundMethodsEchoServiceServer(s grpc.ServiceRegistrar, srv GenerateUnboundMethodsEchoServiceServer) { + s.RegisterService(&GenerateUnboundMethodsEchoService_ServiceDesc, srv) } func _GenerateUnboundMethodsEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -157,7 +158,10 @@ func _GenerateUnboundMethodsEchoService_EchoDelete_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } -var _GenerateUnboundMethodsEchoService_serviceDesc = grpc.ServiceDesc{ +// GenerateUnboundMethodsEchoService_ServiceDesc is the grpc.ServiceDesc for GenerateUnboundMethodsEchoService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var GenerateUnboundMethodsEchoService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService", HandlerType: (*GenerateUnboundMethodsEchoServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 7c199c35036..a6ad8dcbe81 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -323,7 +323,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index df9b59aa799..d8fceb290a8 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,16 +1,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb import ( _ "google.golang.org/genproto/googleapis/api/annotations" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" reflect "reflect" sync "sync" ) @@ -132,8 +132,8 @@ type NonStandardUpdateRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *NonStandardUpdateRequest) Reset() { @@ -175,7 +175,7 @@ func (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage { return nil } -func (x *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *NonStandardUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -293,7 +293,7 @@ type NonStandardWithJSONNamesUpdateRequest struct { unknownFields protoimpl.UnknownFields Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *NonStandardWithJSONNamesUpdateRequest) Reset() { @@ -335,7 +335,7 @@ func (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWit return nil } -func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -684,7 +684,7 @@ var file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = [] (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.SubThing (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing - (*field_mask.FieldMask)(nil), // 8: google.protobuf.FieldMask + (*fieldmaskpb.FieldMask)(nil), // 8: google.protobuf.FieldMask } var file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = []int32{ 4, // 0: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing diff --git a/examples/internal/proto/examplepb/non_standard_names.swagger.json b/examples/internal/proto/examplepb/non_standard_names.swagger.json index bc44971a5cb..335bddb6a0f 100644 --- a/examples/internal/proto/examplepb/non_standard_names.swagger.json +++ b/examples/internal/proto/examplepb/non_standard_names.swagger.json @@ -209,7 +209,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/non_standard_names_grpc.pb.go b/examples/internal/proto/examplepb/non_standard_names_grpc.pb.go index 4bac30b23cb..0b561dbdb51 100644 --- a/examples/internal/proto/examplepb/non_standard_names_grpc.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // NonStandardServiceClient is the client API for NonStandardService service. @@ -77,8 +78,8 @@ type UnsafeNonStandardServiceServer interface { mustEmbedUnimplementedNonStandardServiceServer() } -func RegisterNonStandardServiceServer(s *grpc.Server, srv NonStandardServiceServer) { - s.RegisterService(&_NonStandardService_serviceDesc, srv) +func RegisterNonStandardServiceServer(s grpc.ServiceRegistrar, srv NonStandardServiceServer) { + s.RegisterService(&NonStandardService_ServiceDesc, srv) } func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -117,7 +118,10 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex return interceptor(ctx, in, info, handler) } -var _NonStandardService_serviceDesc = grpc.ServiceDesc{ +// NonStandardService_ServiceDesc is the grpc.ServiceDesc for NonStandardService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var NonStandardService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.NonStandardService", HandlerType: (*NonStandardServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index 102000eb7d6..458798d300a 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json index 242824822e9..0c61dc9f619 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json @@ -204,7 +204,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go b/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go index 9ce0b09c4da..bd17301ea02 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // ServiceAClient is the client API for ServiceA service. @@ -85,8 +86,8 @@ type UnsafeServiceAServer interface { mustEmbedUnimplementedServiceAServer() } -func RegisterServiceAServer(s *grpc.Server, srv ServiceAServer) { - s.RegisterService(&_ServiceA_serviceDesc, srv) +func RegisterServiceAServer(s grpc.ServiceRegistrar, srv ServiceAServer) { + s.RegisterService(&ServiceA_ServiceDesc, srv) } func _ServiceA_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -125,7 +126,10 @@ func _ServiceA_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } -var _ServiceA_serviceDesc = grpc.ServiceDesc{ +// ServiceA_ServiceDesc is the grpc.ServiceDesc for ServiceA service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ServiceA_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceA", HandlerType: (*ServiceAServer)(nil), Methods: []grpc.MethodDesc{ @@ -214,8 +218,8 @@ type UnsafeServiceCServer interface { mustEmbedUnimplementedServiceCServer() } -func RegisterServiceCServer(s *grpc.Server, srv ServiceCServer) { - s.RegisterService(&_ServiceC_serviceDesc, srv) +func RegisterServiceCServer(s grpc.ServiceRegistrar, srv ServiceCServer) { + s.RegisterService(&ServiceC_ServiceDesc, srv) } func _ServiceC_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -254,7 +258,10 @@ func _ServiceC_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } -var _ServiceC_serviceDesc = grpc.ServiceDesc{ +// ServiceC_ServiceDesc is the grpc.ServiceDesc for ServiceC service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ServiceC_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceC", HandlerType: (*ServiceCServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 2fd9abaca8b..0adf0d6cf01 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json index f9f2d99230c..7311ba27083 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json @@ -123,7 +123,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go b/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go index f04585c0beb..50db8acff29 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // ServiceBClient is the client API for ServiceB service. @@ -85,8 +86,8 @@ type UnsafeServiceBServer interface { mustEmbedUnimplementedServiceBServer() } -func RegisterServiceBServer(s *grpc.Server, srv ServiceBServer) { - s.RegisterService(&_ServiceB_serviceDesc, srv) +func RegisterServiceBServer(s grpc.ServiceRegistrar, srv ServiceBServer) { + s.RegisterService(&ServiceB_ServiceDesc, srv) } func _ServiceB_MethodOne_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -125,7 +126,10 @@ func _ServiceB_MethodTwo_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } -var _ServiceB_serviceDesc = grpc.ServiceDesc{ +// ServiceB_ServiceDesc is the grpc.ServiceDesc for ServiceB service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ServiceB_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.examplepb.ServiceB", HandlerType: (*ServiceBServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 8b38a963961..6e403b0903f 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index ce1e5e19d60..3136337cfc0 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -225,7 +225,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/response_body_service_grpc.pb.go b/examples/internal/proto/examplepb/response_body_service_grpc.pb.go index 946c1fb338e..162063d7768 100644 --- a/examples/internal/proto/examplepb/response_body_service_grpc.pb.go +++ b/examples/internal/proto/examplepb/response_body_service_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // ResponseBodyServiceClient is the client API for ResponseBodyService service. @@ -59,7 +60,7 @@ func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in } func (c *responseBodyServiceClient) GetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (ResponseBodyService_GetResponseBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_ResponseBodyService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &ResponseBodyService_ServiceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", opts...) if err != nil { return nil, err } @@ -124,8 +125,8 @@ type UnsafeResponseBodyServiceServer interface { mustEmbedUnimplementedResponseBodyServiceServer() } -func RegisterResponseBodyServiceServer(s *grpc.Server, srv ResponseBodyServiceServer) { - s.RegisterService(&_ResponseBodyService_serviceDesc, srv) +func RegisterResponseBodyServiceServer(s grpc.ServiceRegistrar, srv ResponseBodyServiceServer) { + s.RegisterService(&ResponseBodyService_ServiceDesc, srv) } func _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -203,7 +204,10 @@ func (x *responseBodyServiceGetResponseBodyStreamServer) Send(m *ResponseBodyOut return x.ServerStream.SendMsg(m) } -var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ +// ResponseBodyService_ServiceDesc is the grpc.ServiceDesc for ResponseBodyService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var ResponseBodyService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService", HandlerType: (*ResponseBodyServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 8c80c6c67d5..552817a23fc 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,18 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/stream.proto package examplepb import ( - empty "github.com/golang/protobuf/ptypes/empty" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" _ "google.golang.org/genproto/googleapis/api/annotations" httpbody "google.golang.org/genproto/googleapis/api/httpbody" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" reflect "reflect" ) @@ -90,7 +90,7 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ var file_examples_internal_proto_examplepb_stream_proto_goTypes = []interface{}{ (*ABitOfEverything)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - (*empty.Empty)(nil), // 1: google.protobuf.Empty + (*emptypb.Empty)(nil), // 1: google.protobuf.Empty (*sub.StringMessage)(nil), // 2: grpc.gateway.examples.internal.proto.sub.StringMessage (*httpbody.HttpBody)(nil), // 3: google.api.HttpBody } diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 6654f7366ca..c8db72b7384 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" @@ -23,6 +22,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -78,7 +78,7 @@ func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.M } func request_StreamService_List_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_ListClient, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata stream, err := client.List(ctx, &protoReq) @@ -147,7 +147,7 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar } func request_StreamService_Download_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_DownloadClient, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata stream, err := client.Download(ctx, &protoReq) diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 57fa9ffc806..0aa911abcf4 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -450,7 +450,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/stream_grpc.pb.go b/examples/internal/proto/examplepb/stream_grpc.pb.go index 42cb72643eb..0d1d1670f2f 100644 --- a/examples/internal/proto/examplepb/stream_grpc.pb.go +++ b/examples/internal/proto/examplepb/stream_grpc.pb.go @@ -4,16 +4,17 @@ package examplepb import ( context "context" - empty "github.com/golang/protobuf/ptypes/empty" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" httpbody "google.golang.org/genproto/googleapis/api/httpbody" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // StreamServiceClient is the client API for StreamService service. @@ -21,9 +22,9 @@ const _ = grpc.SupportPackageIsVersion7 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type StreamServiceClient interface { BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) - List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) + List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) - Download(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) + Download(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) } type streamServiceClient struct { @@ -35,7 +36,7 @@ func NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", opts...) + stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -45,7 +46,7 @@ func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallO type StreamService_BulkCreateClient interface { Send(*ABitOfEverything) error - CloseAndRecv() (*empty.Empty, error) + CloseAndRecv() (*emptypb.Empty, error) grpc.ClientStream } @@ -57,19 +58,19 @@ func (x *streamServiceBulkCreateClient) Send(m *ABitOfEverything) error { return x.ClientStream.SendMsg(m) } -func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { +func (x *streamServiceBulkCreateClient) CloseAndRecv() (*emptypb.Empty, error) { if err := x.ClientStream.CloseSend(); err != nil { return nil, err } - m := new(empty.Empty) + m := new(emptypb.Empty) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } return m, nil } -func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", opts...) +func (c *streamServiceClient) List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { + stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -101,7 +102,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", opts...) + stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -131,8 +132,8 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { return m, nil } -func (c *streamServiceClient) Download(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", opts...) +func (c *streamServiceClient) Download(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) { + stream, err := c.cc.NewStream(ctx, &StreamService_ServiceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", opts...) if err != nil { return nil, err } @@ -168,9 +169,9 @@ func (x *streamServiceDownloadClient) Recv() (*httpbody.HttpBody, error) { // for forward compatibility type StreamServiceServer interface { BulkCreate(StreamService_BulkCreateServer) error - List(*empty.Empty, StreamService_ListServer) error + List(*emptypb.Empty, StreamService_ListServer) error BulkEcho(StreamService_BulkEchoServer) error - Download(*empty.Empty, StreamService_DownloadServer) error + Download(*emptypb.Empty, StreamService_DownloadServer) error } // UnimplementedStreamServiceServer should be embedded to have forward compatible implementations. @@ -180,13 +181,13 @@ type UnimplementedStreamServiceServer struct { func (UnimplementedStreamServiceServer) BulkCreate(StreamService_BulkCreateServer) error { return status.Errorf(codes.Unimplemented, "method BulkCreate not implemented") } -func (UnimplementedStreamServiceServer) List(*empty.Empty, StreamService_ListServer) error { +func (UnimplementedStreamServiceServer) List(*emptypb.Empty, StreamService_ListServer) error { return status.Errorf(codes.Unimplemented, "method List not implemented") } func (UnimplementedStreamServiceServer) BulkEcho(StreamService_BulkEchoServer) error { return status.Errorf(codes.Unimplemented, "method BulkEcho not implemented") } -func (UnimplementedStreamServiceServer) Download(*empty.Empty, StreamService_DownloadServer) error { +func (UnimplementedStreamServiceServer) Download(*emptypb.Empty, StreamService_DownloadServer) error { return status.Errorf(codes.Unimplemented, "method Download not implemented") } @@ -197,8 +198,8 @@ type UnsafeStreamServiceServer interface { mustEmbedUnimplementedStreamServiceServer() } -func RegisterStreamServiceServer(s *grpc.Server, srv StreamServiceServer) { - s.RegisterService(&_StreamService_serviceDesc, srv) +func RegisterStreamServiceServer(s grpc.ServiceRegistrar, srv StreamServiceServer) { + s.RegisterService(&StreamService_ServiceDesc, srv) } func _StreamService_BulkCreate_Handler(srv interface{}, stream grpc.ServerStream) error { @@ -206,7 +207,7 @@ func _StreamService_BulkCreate_Handler(srv interface{}, stream grpc.ServerStream } type StreamService_BulkCreateServer interface { - SendAndClose(*empty.Empty) error + SendAndClose(*emptypb.Empty) error Recv() (*ABitOfEverything, error) grpc.ServerStream } @@ -215,7 +216,7 @@ type streamServiceBulkCreateServer struct { grpc.ServerStream } -func (x *streamServiceBulkCreateServer) SendAndClose(m *empty.Empty) error { +func (x *streamServiceBulkCreateServer) SendAndClose(m *emptypb.Empty) error { return x.ServerStream.SendMsg(m) } @@ -228,7 +229,7 @@ func (x *streamServiceBulkCreateServer) Recv() (*ABitOfEverything, error) { } func _StreamService_List_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(empty.Empty) + m := new(emptypb.Empty) if err := stream.RecvMsg(m); err != nil { return err } @@ -275,7 +276,7 @@ func (x *streamServiceBulkEchoServer) Recv() (*sub.StringMessage, error) { } func _StreamService_Download_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(empty.Empty) + m := new(emptypb.Empty) if err := stream.RecvMsg(m); err != nil { return err } @@ -295,7 +296,10 @@ func (x *streamServiceDownloadServer) Send(m *httpbody.HttpBody) error { return x.ServerStream.SendMsg(m) } -var _StreamService_serviceDesc = grpc.ServiceDesc{ +// StreamService_ServiceDesc is the grpc.ServiceDesc for StreamService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var StreamService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.StreamService", HandlerType: (*StreamServiceServer)(nil), Methods: []grpc.MethodDesc{}, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 9ec779f6dbb..fb205ef749e 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service @@ -15,9 +15,9 @@ package examplepb import ( - duration "github.com/golang/protobuf/ptypes/duration" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" reflect "reflect" sync "sync" ) @@ -117,9 +117,9 @@ type UnannotatedSimpleMessage struct { unknownFields protoimpl.UnknownFields // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Duration *durationpb.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` // Types that are assignable to Code: // *UnannotatedSimpleMessage_LineNum // *UnannotatedSimpleMessage_Lang @@ -177,7 +177,7 @@ func (x *UnannotatedSimpleMessage) GetNum() int64 { return 0 } -func (x *UnannotatedSimpleMessage) GetDuration() *duration.Duration { +func (x *UnannotatedSimpleMessage) GetDuration() *durationpb.Duration { if x != nil { return x.Duration } @@ -362,7 +362,7 @@ var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTyp var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = []interface{}{ (*UnannotatedEmbedded)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded (*UnannotatedSimpleMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage - (*duration.Duration)(nil), // 2: google.protobuf.Duration + (*durationpb.Duration)(nil), // 2: google.protobuf.Duration } var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = []int32{ 2, // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration diff --git a/examples/internal/proto/examplepb/unannotated_echo_service_grpc.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service_grpc.pb.go index 80166f65c93..ac3b18f18c3 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service_grpc.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. @@ -99,8 +100,8 @@ type UnsafeUnannotatedEchoServiceServer interface { mustEmbedUnimplementedUnannotatedEchoServiceServer() } -func RegisterUnannotatedEchoServiceServer(s *grpc.Server, srv UnannotatedEchoServiceServer) { - s.RegisterService(&_UnannotatedEchoService_serviceDesc, srv) +func RegisterUnannotatedEchoServiceServer(s grpc.ServiceRegistrar, srv UnannotatedEchoServiceServer) { + s.RegisterService(&UnannotatedEchoService_ServiceDesc, srv) } func _UnannotatedEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -157,7 +158,10 @@ func _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ +// UnannotatedEchoService_ServiceDesc is the grpc.ServiceDesc for UnannotatedEchoService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var UnannotatedEchoService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService", HandlerType: (*UnannotatedEchoServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index acba76527a7..c3d685d9c3f 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/use_go_template_grpc.pb.go b/examples/internal/proto/examplepb/use_go_template_grpc.pb.go index 49e7a11e1ec..e4bea74ce31 100644 --- a/examples/internal/proto/examplepb/use_go_template_grpc.pb.go +++ b/examples/internal/proto/examplepb/use_go_template_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // LoginServiceClient is the client API for LoginService service. @@ -129,8 +130,8 @@ type UnsafeLoginServiceServer interface { mustEmbedUnimplementedLoginServiceServer() } -func RegisterLoginServiceServer(s *grpc.Server, srv LoginServiceServer) { - s.RegisterService(&_LoginService_serviceDesc, srv) +func RegisterLoginServiceServer(s grpc.ServiceRegistrar, srv LoginServiceServer) { + s.RegisterService(&LoginService_ServiceDesc, srv) } func _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -169,7 +170,10 @@ func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } -var _LoginService_serviceDesc = grpc.ServiceDesc{ +// LoginService_ServiceDesc is the grpc.ServiceDesc for LoginService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var LoginService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.LoginService", HandlerType: (*LoginServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index f2329b424da..33bf194ed01 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,17 +1,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb import ( - empty "github.com/golang/protobuf/ptypes/empty" - wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -28,15 +28,15 @@ type Wrappers struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + StringValue *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + Int32Value *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Int64Value *wrapperspb.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + FloatValue *wrapperspb.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue *wrapperspb.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + BoolValue *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + Uint32Value *wrapperspb.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + Uint64Value *wrapperspb.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + BytesValue *wrapperspb.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` } func (x *Wrappers) Reset() { @@ -71,63 +71,63 @@ func (*Wrappers) Descriptor() ([]byte, []int) { return file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP(), []int{0} } -func (x *Wrappers) GetStringValue() *wrappers.StringValue { +func (x *Wrappers) GetStringValue() *wrapperspb.StringValue { if x != nil { return x.StringValue } return nil } -func (x *Wrappers) GetInt32Value() *wrappers.Int32Value { +func (x *Wrappers) GetInt32Value() *wrapperspb.Int32Value { if x != nil { return x.Int32Value } return nil } -func (x *Wrappers) GetInt64Value() *wrappers.Int64Value { +func (x *Wrappers) GetInt64Value() *wrapperspb.Int64Value { if x != nil { return x.Int64Value } return nil } -func (x *Wrappers) GetFloatValue() *wrappers.FloatValue { +func (x *Wrappers) GetFloatValue() *wrapperspb.FloatValue { if x != nil { return x.FloatValue } return nil } -func (x *Wrappers) GetDoubleValue() *wrappers.DoubleValue { +func (x *Wrappers) GetDoubleValue() *wrapperspb.DoubleValue { if x != nil { return x.DoubleValue } return nil } -func (x *Wrappers) GetBoolValue() *wrappers.BoolValue { +func (x *Wrappers) GetBoolValue() *wrapperspb.BoolValue { if x != nil { return x.BoolValue } return nil } -func (x *Wrappers) GetUint32Value() *wrappers.UInt32Value { +func (x *Wrappers) GetUint32Value() *wrapperspb.UInt32Value { if x != nil { return x.Uint32Value } return nil } -func (x *Wrappers) GetUint64Value() *wrappers.UInt64Value { +func (x *Wrappers) GetUint64Value() *wrapperspb.UInt64Value { if x != nil { return x.Uint64Value } return nil } -func (x *Wrappers) GetBytesValue() *wrappers.BytesValue { +func (x *Wrappers) GetBytesValue() *wrapperspb.BytesValue { if x != nil { return x.BytesValue } @@ -283,17 +283,17 @@ func file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP() []byte var file_examples_internal_proto_examplepb_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_examples_internal_proto_examplepb_wrappers_proto_goTypes = []interface{}{ - (*Wrappers)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers - (*wrappers.StringValue)(nil), // 1: google.protobuf.StringValue - (*wrappers.Int32Value)(nil), // 2: google.protobuf.Int32Value - (*wrappers.Int64Value)(nil), // 3: google.protobuf.Int64Value - (*wrappers.FloatValue)(nil), // 4: google.protobuf.FloatValue - (*wrappers.DoubleValue)(nil), // 5: google.protobuf.DoubleValue - (*wrappers.BoolValue)(nil), // 6: google.protobuf.BoolValue - (*wrappers.UInt32Value)(nil), // 7: google.protobuf.UInt32Value - (*wrappers.UInt64Value)(nil), // 8: google.protobuf.UInt64Value - (*wrappers.BytesValue)(nil), // 9: google.protobuf.BytesValue - (*empty.Empty)(nil), // 10: google.protobuf.Empty + (*Wrappers)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers + (*wrapperspb.StringValue)(nil), // 1: google.protobuf.StringValue + (*wrapperspb.Int32Value)(nil), // 2: google.protobuf.Int32Value + (*wrapperspb.Int64Value)(nil), // 3: google.protobuf.Int64Value + (*wrapperspb.FloatValue)(nil), // 4: google.protobuf.FloatValue + (*wrapperspb.DoubleValue)(nil), // 5: google.protobuf.DoubleValue + (*wrapperspb.BoolValue)(nil), // 6: google.protobuf.BoolValue + (*wrapperspb.UInt32Value)(nil), // 7: google.protobuf.UInt32Value + (*wrapperspb.UInt64Value)(nil), // 8: google.protobuf.UInt64Value + (*wrapperspb.BytesValue)(nil), // 9: google.protobuf.BytesValue + (*emptypb.Empty)(nil), // 10: google.protobuf.Empty } var file_examples_internal_proto_examplepb_wrappers_proto_depIdxs = []int32{ 1, // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers.string_value:type_name -> google.protobuf.StringValue diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 33470d816c0..f482d4eea1c 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -13,8 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/ptypes/empty" - "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" @@ -23,6 +21,8 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/wrapperspb" ) // Suppress "imported and not used" errors @@ -68,7 +68,7 @@ func local_request_WrappersService_Create_0(ctx context.Context, marshaler runti } func request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.StringValue + var protoReq wrapperspb.StringValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -85,7 +85,7 @@ func request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler } func local_request_WrappersService_CreateStringValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.StringValue + var protoReq wrapperspb.StringValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -102,7 +102,7 @@ func local_request_WrappersService_CreateStringValue_0(ctx context.Context, mars } func request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.Int32Value + var protoReq wrapperspb.Int32Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -119,7 +119,7 @@ func request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler r } func local_request_WrappersService_CreateInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.Int32Value + var protoReq wrapperspb.Int32Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -136,7 +136,7 @@ func local_request_WrappersService_CreateInt32Value_0(ctx context.Context, marsh } func request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.Int64Value + var protoReq wrapperspb.Int64Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -153,7 +153,7 @@ func request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler r } func local_request_WrappersService_CreateInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.Int64Value + var protoReq wrapperspb.Int64Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -170,7 +170,7 @@ func local_request_WrappersService_CreateInt64Value_0(ctx context.Context, marsh } func request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.FloatValue + var protoReq wrapperspb.FloatValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -187,7 +187,7 @@ func request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler r } func local_request_WrappersService_CreateFloatValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.FloatValue + var protoReq wrapperspb.FloatValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -204,7 +204,7 @@ func local_request_WrappersService_CreateFloatValue_0(ctx context.Context, marsh } func request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.DoubleValue + var protoReq wrapperspb.DoubleValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -221,7 +221,7 @@ func request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler } func local_request_WrappersService_CreateDoubleValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.DoubleValue + var protoReq wrapperspb.DoubleValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -238,7 +238,7 @@ func local_request_WrappersService_CreateDoubleValue_0(ctx context.Context, mars } func request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.BoolValue + var protoReq wrapperspb.BoolValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -255,7 +255,7 @@ func request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler ru } func local_request_WrappersService_CreateBoolValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.BoolValue + var protoReq wrapperspb.BoolValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -272,7 +272,7 @@ func local_request_WrappersService_CreateBoolValue_0(ctx context.Context, marsha } func request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.UInt32Value + var protoReq wrapperspb.UInt32Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -289,7 +289,7 @@ func request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler } func local_request_WrappersService_CreateUInt32Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.UInt32Value + var protoReq wrapperspb.UInt32Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -306,7 +306,7 @@ func local_request_WrappersService_CreateUInt32Value_0(ctx context.Context, mars } func request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.UInt64Value + var protoReq wrapperspb.UInt64Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -323,7 +323,7 @@ func request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler } func local_request_WrappersService_CreateUInt64Value_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.UInt64Value + var protoReq wrapperspb.UInt64Value var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -340,7 +340,7 @@ func local_request_WrappersService_CreateUInt64Value_0(ctx context.Context, mars } func request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.BytesValue + var protoReq wrapperspb.BytesValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -357,7 +357,7 @@ func request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler r } func local_request_WrappersService_CreateBytesValue_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq wrappers.BytesValue + var protoReq wrapperspb.BytesValue var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -374,7 +374,7 @@ func local_request_WrappersService_CreateBytesValue_0(ctx context.Context, marsh } func request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -391,7 +391,7 @@ func request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtim } func local_request_WrappersService_CreateEmpty_0(ctx context.Context, marshaler runtime.Marshaler, server WrappersServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index ca05367e616..b406df1c403 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -436,7 +436,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/wrappers_grpc.pb.go b/examples/internal/proto/examplepb/wrappers_grpc.pb.go index 3e3b7965bcf..6f3aa5f33ee 100644 --- a/examples/internal/proto/examplepb/wrappers_grpc.pb.go +++ b/examples/internal/proto/examplepb/wrappers_grpc.pb.go @@ -4,15 +4,16 @@ package examplepb import ( context "context" - empty "github.com/golang/protobuf/ptypes/empty" - wrappers "github.com/golang/protobuf/ptypes/wrappers" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" ) // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // WrappersServiceClient is the client API for WrappersService service. @@ -20,16 +21,16 @@ const _ = grpc.SupportPackageIsVersion7 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type WrappersServiceClient interface { Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) - CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) - CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) - CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) - CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) - CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) - CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) - CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) - CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) - CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) - CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + CreateStringValue(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) + CreateInt32Value(ctx context.Context, in *wrapperspb.Int32Value, opts ...grpc.CallOption) (*wrapperspb.Int32Value, error) + CreateInt64Value(ctx context.Context, in *wrapperspb.Int64Value, opts ...grpc.CallOption) (*wrapperspb.Int64Value, error) + CreateFloatValue(ctx context.Context, in *wrapperspb.FloatValue, opts ...grpc.CallOption) (*wrapperspb.FloatValue, error) + CreateDoubleValue(ctx context.Context, in *wrapperspb.DoubleValue, opts ...grpc.CallOption) (*wrapperspb.DoubleValue, error) + CreateBoolValue(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) + CreateUInt32Value(ctx context.Context, in *wrapperspb.UInt32Value, opts ...grpc.CallOption) (*wrapperspb.UInt32Value, error) + CreateUInt64Value(ctx context.Context, in *wrapperspb.UInt64Value, opts ...grpc.CallOption) (*wrapperspb.UInt64Value, error) + CreateBytesValue(ctx context.Context, in *wrapperspb.BytesValue, opts ...grpc.CallOption) (*wrapperspb.BytesValue, error) + CreateEmpty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) } type wrappersServiceClient struct { @@ -49,8 +50,8 @@ func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts . return out, nil } -func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) { - out := new(wrappers.StringValue) +func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrapperspb.StringValue, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) { + out := new(wrapperspb.StringValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", in, out, opts...) if err != nil { return nil, err @@ -58,8 +59,8 @@ func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrapp return out, nil } -func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) { - out := new(wrappers.Int32Value) +func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrapperspb.Int32Value, opts ...grpc.CallOption) (*wrapperspb.Int32Value, error) { + out := new(wrapperspb.Int32Value) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", in, out, opts...) if err != nil { return nil, err @@ -67,8 +68,8 @@ func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappe return out, nil } -func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) { - out := new(wrappers.Int64Value) +func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrapperspb.Int64Value, opts ...grpc.CallOption) (*wrapperspb.Int64Value, error) { + out := new(wrapperspb.Int64Value) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", in, out, opts...) if err != nil { return nil, err @@ -76,8 +77,8 @@ func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappe return out, nil } -func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) { - out := new(wrappers.FloatValue) +func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrapperspb.FloatValue, opts ...grpc.CallOption) (*wrapperspb.FloatValue, error) { + out := new(wrapperspb.FloatValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", in, out, opts...) if err != nil { return nil, err @@ -85,8 +86,8 @@ func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappe return out, nil } -func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) { - out := new(wrappers.DoubleValue) +func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrapperspb.DoubleValue, opts ...grpc.CallOption) (*wrapperspb.DoubleValue, error) { + out := new(wrapperspb.DoubleValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) if err != nil { return nil, err @@ -94,8 +95,8 @@ func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrapp return out, nil } -func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) { - out := new(wrappers.BoolValue) +func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrapperspb.BoolValue, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) { + out := new(wrapperspb.BoolValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", in, out, opts...) if err != nil { return nil, err @@ -103,8 +104,8 @@ func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrapper return out, nil } -func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) { - out := new(wrappers.UInt32Value) +func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrapperspb.UInt32Value, opts ...grpc.CallOption) (*wrapperspb.UInt32Value, error) { + out := new(wrapperspb.UInt32Value) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) if err != nil { return nil, err @@ -112,8 +113,8 @@ func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrapp return out, nil } -func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) { - out := new(wrappers.UInt64Value) +func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrapperspb.UInt64Value, opts ...grpc.CallOption) (*wrapperspb.UInt64Value, error) { + out := new(wrapperspb.UInt64Value) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) if err != nil { return nil, err @@ -121,8 +122,8 @@ func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrapp return out, nil } -func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) { - out := new(wrappers.BytesValue) +func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrapperspb.BytesValue, opts ...grpc.CallOption) (*wrapperspb.BytesValue, error) { + out := new(wrapperspb.BytesValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", in, out, opts...) if err != nil { return nil, err @@ -130,8 +131,8 @@ func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappe return out, nil } -func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", in, out, opts...) if err != nil { return nil, err @@ -144,16 +145,16 @@ func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *empty.Empty // for forward compatibility type WrappersServiceServer interface { Create(context.Context, *Wrappers) (*Wrappers, error) - CreateStringValue(context.Context, *wrappers.StringValue) (*wrappers.StringValue, error) - CreateInt32Value(context.Context, *wrappers.Int32Value) (*wrappers.Int32Value, error) - CreateInt64Value(context.Context, *wrappers.Int64Value) (*wrappers.Int64Value, error) - CreateFloatValue(context.Context, *wrappers.FloatValue) (*wrappers.FloatValue, error) - CreateDoubleValue(context.Context, *wrappers.DoubleValue) (*wrappers.DoubleValue, error) - CreateBoolValue(context.Context, *wrappers.BoolValue) (*wrappers.BoolValue, error) - CreateUInt32Value(context.Context, *wrappers.UInt32Value) (*wrappers.UInt32Value, error) - CreateUInt64Value(context.Context, *wrappers.UInt64Value) (*wrappers.UInt64Value, error) - CreateBytesValue(context.Context, *wrappers.BytesValue) (*wrappers.BytesValue, error) - CreateEmpty(context.Context, *empty.Empty) (*empty.Empty, error) + CreateStringValue(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error) + CreateInt32Value(context.Context, *wrapperspb.Int32Value) (*wrapperspb.Int32Value, error) + CreateInt64Value(context.Context, *wrapperspb.Int64Value) (*wrapperspb.Int64Value, error) + CreateFloatValue(context.Context, *wrapperspb.FloatValue) (*wrapperspb.FloatValue, error) + CreateDoubleValue(context.Context, *wrapperspb.DoubleValue) (*wrapperspb.DoubleValue, error) + CreateBoolValue(context.Context, *wrapperspb.BoolValue) (*wrapperspb.BoolValue, error) + CreateUInt32Value(context.Context, *wrapperspb.UInt32Value) (*wrapperspb.UInt32Value, error) + CreateUInt64Value(context.Context, *wrapperspb.UInt64Value) (*wrapperspb.UInt64Value, error) + CreateBytesValue(context.Context, *wrapperspb.BytesValue) (*wrapperspb.BytesValue, error) + CreateEmpty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) } // UnimplementedWrappersServiceServer should be embedded to have forward compatible implementations. @@ -163,34 +164,34 @@ type UnimplementedWrappersServiceServer struct { func (UnimplementedWrappersServiceServer) Create(context.Context, *Wrappers) (*Wrappers, error) { return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") } -func (UnimplementedWrappersServiceServer) CreateStringValue(context.Context, *wrappers.StringValue) (*wrappers.StringValue, error) { +func (UnimplementedWrappersServiceServer) CreateStringValue(context.Context, *wrapperspb.StringValue) (*wrapperspb.StringValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateStringValue not implemented") } -func (UnimplementedWrappersServiceServer) CreateInt32Value(context.Context, *wrappers.Int32Value) (*wrappers.Int32Value, error) { +func (UnimplementedWrappersServiceServer) CreateInt32Value(context.Context, *wrapperspb.Int32Value) (*wrapperspb.Int32Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateInt32Value not implemented") } -func (UnimplementedWrappersServiceServer) CreateInt64Value(context.Context, *wrappers.Int64Value) (*wrappers.Int64Value, error) { +func (UnimplementedWrappersServiceServer) CreateInt64Value(context.Context, *wrapperspb.Int64Value) (*wrapperspb.Int64Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateInt64Value not implemented") } -func (UnimplementedWrappersServiceServer) CreateFloatValue(context.Context, *wrappers.FloatValue) (*wrappers.FloatValue, error) { +func (UnimplementedWrappersServiceServer) CreateFloatValue(context.Context, *wrapperspb.FloatValue) (*wrapperspb.FloatValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFloatValue not implemented") } -func (UnimplementedWrappersServiceServer) CreateDoubleValue(context.Context, *wrappers.DoubleValue) (*wrappers.DoubleValue, error) { +func (UnimplementedWrappersServiceServer) CreateDoubleValue(context.Context, *wrapperspb.DoubleValue) (*wrapperspb.DoubleValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateDoubleValue not implemented") } -func (UnimplementedWrappersServiceServer) CreateBoolValue(context.Context, *wrappers.BoolValue) (*wrappers.BoolValue, error) { +func (UnimplementedWrappersServiceServer) CreateBoolValue(context.Context, *wrapperspb.BoolValue) (*wrapperspb.BoolValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBoolValue not implemented") } -func (UnimplementedWrappersServiceServer) CreateUInt32Value(context.Context, *wrappers.UInt32Value) (*wrappers.UInt32Value, error) { +func (UnimplementedWrappersServiceServer) CreateUInt32Value(context.Context, *wrapperspb.UInt32Value) (*wrapperspb.UInt32Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateUInt32Value not implemented") } -func (UnimplementedWrappersServiceServer) CreateUInt64Value(context.Context, *wrappers.UInt64Value) (*wrappers.UInt64Value, error) { +func (UnimplementedWrappersServiceServer) CreateUInt64Value(context.Context, *wrapperspb.UInt64Value) (*wrapperspb.UInt64Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateUInt64Value not implemented") } -func (UnimplementedWrappersServiceServer) CreateBytesValue(context.Context, *wrappers.BytesValue) (*wrappers.BytesValue, error) { +func (UnimplementedWrappersServiceServer) CreateBytesValue(context.Context, *wrapperspb.BytesValue) (*wrapperspb.BytesValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBytesValue not implemented") } -func (UnimplementedWrappersServiceServer) CreateEmpty(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedWrappersServiceServer) CreateEmpty(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateEmpty not implemented") } @@ -201,8 +202,8 @@ type UnsafeWrappersServiceServer interface { mustEmbedUnimplementedWrappersServiceServer() } -func RegisterWrappersServiceServer(s *grpc.Server, srv WrappersServiceServer) { - s.RegisterService(&_WrappersService_serviceDesc, srv) +func RegisterWrappersServiceServer(s grpc.ServiceRegistrar, srv WrappersServiceServer) { + s.RegisterService(&WrappersService_ServiceDesc, srv) } func _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -224,7 +225,7 @@ func _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec f } func _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.StringValue) + in := new(wrapperspb.StringValue) if err := dec(in); err != nil { return nil, err } @@ -236,13 +237,13 @@ func _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Con FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrappers.StringValue)) + return srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrapperspb.StringValue)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.Int32Value) + in := new(wrapperspb.Int32Value) if err := dec(in); err != nil { return nil, err } @@ -254,13 +255,13 @@ func _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Cont FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrappers.Int32Value)) + return srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrapperspb.Int32Value)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.Int64Value) + in := new(wrapperspb.Int64Value) if err := dec(in); err != nil { return nil, err } @@ -272,13 +273,13 @@ func _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Cont FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrappers.Int64Value)) + return srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrapperspb.Int64Value)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.FloatValue) + in := new(wrapperspb.FloatValue) if err := dec(in); err != nil { return nil, err } @@ -290,13 +291,13 @@ func _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Cont FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrappers.FloatValue)) + return srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrapperspb.FloatValue)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.DoubleValue) + in := new(wrapperspb.DoubleValue) if err := dec(in); err != nil { return nil, err } @@ -308,13 +309,13 @@ func _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Con FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrappers.DoubleValue)) + return srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrapperspb.DoubleValue)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.BoolValue) + in := new(wrapperspb.BoolValue) if err := dec(in); err != nil { return nil, err } @@ -326,13 +327,13 @@ func _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Conte FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrappers.BoolValue)) + return srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrapperspb.BoolValue)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.UInt32Value) + in := new(wrapperspb.UInt32Value) if err := dec(in); err != nil { return nil, err } @@ -344,13 +345,13 @@ func _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Con FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrappers.UInt32Value)) + return srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrapperspb.UInt32Value)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.UInt64Value) + in := new(wrapperspb.UInt64Value) if err := dec(in); err != nil { return nil, err } @@ -362,13 +363,13 @@ func _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Con FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrappers.UInt64Value)) + return srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrapperspb.UInt64Value)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(wrappers.BytesValue) + in := new(wrapperspb.BytesValue) if err := dec(in); err != nil { return nil, err } @@ -380,13 +381,13 @@ func _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Cont FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrappers.BytesValue)) + return srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrapperspb.BytesValue)) } return interceptor(ctx, in, info, handler) } func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -398,12 +399,15 @@ func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*empty.Empty)) + return srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } -var _WrappersService_serviceDesc = grpc.ServiceDesc{ +// WrappersService_ServiceDesc is the grpc.ServiceDesc for WrappersService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WrappersService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.proto.examplepb.WrappersService", HandlerType: (*WrappersServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 5ccaef4948d..c38da12a833 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 27dbfacbe7d..a24ffae22a1 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index e30c70aca37..eecbfcdf0c1 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/go.mod b/go.mod index 6c1e40b89f9..b81c0dfbffe 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.14 require ( github.com/antihax/optional v1.0.0 - github.com/bufbuild/buf v0.37.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20210429001901-424d2337a529 github.com/golang/protobuf v1.5.2 @@ -13,6 +12,5 @@ require ( golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 google.golang.org/grpc v1.37.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 5df293beaac..0c87a8c9cff 100644 --- a/go.sum +++ b/go.sum @@ -21,7 +21,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -32,74 +31,34 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/bufbuild/buf v0.37.0 h1:11zJVA0D4uJVGOC9h+oOVHrKKoBgMYIqJJ0d1Xt6oeQ= -github.com/bufbuild/buf v0.37.0/go.mod h1:lQ1m2HkIaGOFba6w/aC3KYBHhKEOESP3gaAEpS3dAFM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= -github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -121,7 +80,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -134,8 +92,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -151,158 +107,34 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0 h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jhump/protoreflect v1.8.1 h1:z7Ciiz3Bz37zSd485fbiTW8ABafIasyOWZI0N9EUUdo= -github.com/jhump/protoreflect v1.8.1/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug= -github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7 h1:O63eWlXlvyw4YdsuatjRIU6emvJ2fqz+PTdMEoxIT2s= -github.com/spf13/cobra v1.0.1-0.20201006035406-b97b5ead31f7/go.mod h1:yk5b0mALVusDL5fMM6Rd1wgnoO5jUPhwsQ6LQAJTidQ= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/twitchtv/twirp v7.1.0+incompatible h1:3fNSDoSPyq+fTrifIvGue9XM/tptzuhiGY83rxPVNUg= -github.com/twitchtv/twirp v7.1.0+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.6 h1:BdkrbWrzDlV9dnbzoP7sfN+dHheJ4J9JOaYxcUDL+ok= -go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -330,7 +162,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -339,14 +170,9 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -372,8 +198,6 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -392,12 +216,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -425,7 +244,6 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -440,14 +258,12 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -457,9 +273,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -481,13 +294,10 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -546,7 +356,6 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 h1:ov60aCaYZRD4c3+rjbtkVMhj/5CGviXVJqMCOrQSO3I= google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -561,13 +370,9 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.35.0-dev.0.20201218190559-666aea1fb34c/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0 h1:lQ+dE99pFsb8osbJB3oRfE5eW4Hx6a/lZQr8Jh+eoT4= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -578,34 +383,21 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.25.1-0.20201208041424-160c7477e0e8/go.mod h1:hFxJC2f0epmp1elRCiEGJTKAWbwxZ2nvqZdHl3FQXCY= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index 125c5340631..cdefa1bb0e3 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index e0b1010b855..0fc71232b07 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 5508a0a2966..6166aaae4e1 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: protoc-gen-openapiv2/options/annotations.proto package options import ( - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" ) @@ -22,7 +22,7 @@ const ( var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ { - ExtendedType: (*descriptor.FileOptions)(nil), + ExtendedType: (*descriptorpb.FileOptions)(nil), ExtensionType: (*Swagger)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger", @@ -30,7 +30,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E Filename: "protoc-gen-openapiv2/options/annotations.proto", }, { - ExtendedType: (*descriptor.MethodOptions)(nil), + ExtendedType: (*descriptorpb.MethodOptions)(nil), ExtensionType: (*Operation)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation", @@ -38,7 +38,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E Filename: "protoc-gen-openapiv2/options/annotations.proto", }, { - ExtendedType: (*descriptor.MessageOptions)(nil), + ExtendedType: (*descriptorpb.MessageOptions)(nil), ExtensionType: (*Schema)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema", @@ -46,7 +46,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E Filename: "protoc-gen-openapiv2/options/annotations.proto", }, { - ExtendedType: (*descriptor.ServiceOptions)(nil), + ExtendedType: (*descriptorpb.ServiceOptions)(nil), ExtensionType: (*Tag)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag", @@ -54,7 +54,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E Filename: "protoc-gen-openapiv2/options/annotations.proto", }, { - ExtendedType: (*descriptor.FieldOptions)(nil), + ExtendedType: (*descriptorpb.FieldOptions)(nil), ExtensionType: (*JSONSchema)(nil), Field: 1042, Name: "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field", @@ -63,7 +63,7 @@ var file_protoc_gen_openapiv2_options_annotations_proto_extTypes = []protoimpl.E }, } -// Extension fields to descriptor.FileOptions. +// Extension fields to descriptorpb.FileOptions. var ( // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // @@ -74,7 +74,7 @@ var ( E_Openapiv2Swagger = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[0] ) -// Extension fields to descriptor.MethodOptions. +// Extension fields to descriptorpb.MethodOptions. var ( // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // @@ -85,7 +85,7 @@ var ( E_Openapiv2Operation = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[1] ) -// Extension fields to descriptor.MessageOptions. +// Extension fields to descriptorpb.MessageOptions. var ( // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // @@ -96,7 +96,7 @@ var ( E_Openapiv2Schema = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[2] ) -// Extension fields to descriptor.ServiceOptions. +// Extension fields to descriptorpb.ServiceOptions. var ( // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // @@ -107,7 +107,7 @@ var ( E_Openapiv2Tag = &file_protoc_gen_openapiv2_options_annotations_proto_extTypes[3] ) -// Extension fields to descriptor.FieldOptions. +// Extension fields to descriptorpb.FieldOptions. var ( // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // @@ -180,16 +180,16 @@ var file_protoc_gen_openapiv2_options_annotations_proto_rawDesc = []byte{ } var file_protoc_gen_openapiv2_options_annotations_proto_goTypes = []interface{}{ - (*descriptor.FileOptions)(nil), // 0: google.protobuf.FileOptions - (*descriptor.MethodOptions)(nil), // 1: google.protobuf.MethodOptions - (*descriptor.MessageOptions)(nil), // 2: google.protobuf.MessageOptions - (*descriptor.ServiceOptions)(nil), // 3: google.protobuf.ServiceOptions - (*descriptor.FieldOptions)(nil), // 4: google.protobuf.FieldOptions - (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger - (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation - (*Schema)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Schema - (*Tag)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Tag - (*JSONSchema)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + (*descriptorpb.FileOptions)(nil), // 0: google.protobuf.FileOptions + (*descriptorpb.MethodOptions)(nil), // 1: google.protobuf.MethodOptions + (*descriptorpb.MessageOptions)(nil), // 2: google.protobuf.MessageOptions + (*descriptorpb.ServiceOptions)(nil), // 3: google.protobuf.ServiceOptions + (*descriptorpb.FieldOptions)(nil), // 4: google.protobuf.FieldOptions + (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger + (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation + (*Schema)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Schema + (*Tag)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Tag + (*JSONSchema)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema } var file_protoc_gen_openapiv2_options_annotations_proto_depIdxs = []int32{ 0, // 0: grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger:extendee -> google.protobuf.FileOptions diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 806c77a9cbe..ddd736d7cc4 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: protoc-gen-openapiv2/options/openapiv2.proto package options import ( - _struct "github.com/golang/protobuf/ptypes/struct" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -379,8 +379,8 @@ type Swagger struct { // Individual operations can override this definition. Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` // Additional external documentation. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Extensions map[string]*structpb.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Swagger) Reset() { @@ -492,7 +492,7 @@ func (x *Swagger) GetExternalDocs() *ExternalDocumentation { return nil } -func (x *Swagger) GetExtensions() map[string]*_struct.Value { +func (x *Swagger) GetExtensions() map[string]*structpb.Value { if x != nil { return x.Extensions } @@ -568,8 +568,8 @@ type Operation struct { // (that is, there is a logical OR between the security requirements). This // definition overrides any declared top-level security. To remove a top-level // security declaration, an empty array can be used. - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Extensions map[string]*structpb.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Operation) Reset() { @@ -681,7 +681,7 @@ func (x *Operation) GetSecurity() []*SecurityRequirement { return nil } -func (x *Operation) GetExtensions() map[string]*_struct.Value { +func (x *Operation) GetExtensions() map[string]*structpb.Value { if x != nil { return x.Extensions } @@ -799,8 +799,8 @@ type Response struct { Headers map[string]*Header `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object - Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Extensions map[string]*structpb.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Response) Reset() { @@ -863,7 +863,7 @@ func (x *Response) GetExamples() map[string]string { return nil } -func (x *Response) GetExtensions() map[string]*_struct.Value { +func (x *Response) GetExtensions() map[string]*structpb.Value { if x != nil { return x.Extensions } @@ -912,8 +912,8 @@ type Info struct { License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` // Provides the version of the application API (not to be confused // with the specification version). - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Extensions map[string]*structpb.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Info) Reset() { @@ -990,7 +990,7 @@ func (x *Info) GetVersion() string { return "" } -func (x *Info) GetExtensions() map[string]*_struct.Value { +func (x *Info) GetExtensions() map[string]*structpb.Value { if x != nil { return x.Extensions } @@ -1766,8 +1766,8 @@ type SecurityScheme struct { TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` // The available scopes for the OAuth2 security scheme. // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + Extensions map[string]*structpb.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *SecurityScheme) Reset() { @@ -1858,7 +1858,7 @@ func (x *SecurityScheme) GetScopes() *Scopes { return nil } -func (x *SecurityScheme) GetExtensions() map[string]*_struct.Value { +func (x *SecurityScheme) GetExtensions() map[string]*structpb.Value { if x != nil { return x.Extensions } @@ -2511,9 +2511,9 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ nil, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry (*SecurityRequirement_SecurityRequirementValue)(nil), // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*_struct.Value)(nil), // 33: google.protobuf.Value + nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*structpb.Value)(nil), // 33: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info diff --git a/repositories.bzl b/repositories.bzl index c77c6676673..ae4b52350fc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -172,8 +172,8 @@ def go_repositories(): go_repository( name = "com_github_davecgh_go_spew", importpath = "github.com/davecgh/go-spew", - sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", - version = "v1.1.1", + sum = "h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=", + version = "v1.1.0", ) go_repository( name = "com_github_dgrijalva_jwt_go", @@ -874,14 +874,14 @@ def go_repositories(): go_repository( name = "com_github_stretchr_objx", importpath = "github.com/stretchr/objx", - sum = "h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=", - version = "v0.1.1", + sum = "h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=", + version = "v0.1.0", ) go_repository( name = "com_github_stretchr_testify", importpath = "github.com/stretchr/testify", - sum = "h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=", - version = "v1.7.0", + sum = "h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=", + version = "v1.5.1", ) go_repository( name = "com_github_subosito_gotenv", @@ -994,8 +994,8 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=", - version = "v2.3.0", + sum = "h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=", + version = "v2.2.2", ) go_repository( name = "in_gopkg_yaml_v3", @@ -1013,8 +1013,8 @@ def go_repositories(): go_repository( name = "io_opencensus_go", importpath = "go.opencensus.io", - sum = "h1:BdkrbWrzDlV9dnbzoP7sfN+dHheJ4J9JOaYxcUDL+ok=", - version = "v0.22.6", + sum = "h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=", + version = "v0.22.4", ) go_repository( name = "io_rsc_binaryregexp", diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 1aecff19649..eef49eeb086 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,18 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: runtime/internal/examplepb/example.proto package examplepb import ( - any "github.com/golang/protobuf/ptypes/any" - empty "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -255,7 +255,7 @@ type ABitOfEverything struct { MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` // repeated numeric enum comment (This comment is overridden by the field @@ -272,7 +272,7 @@ type ABitOfEverything struct { // nested object comments (This comment is overridden by the field annotation) NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` - Anytype *any.Any `protobuf:"bytes,38,opt,name=anytype,proto3" json:"anytype,omitempty"` + Anytype *anypb.Any `protobuf:"bytes,38,opt,name=anytype,proto3" json:"anytype,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -454,7 +454,7 @@ func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { return nil } -func (x *ABitOfEverything) GetOneofEmpty() *empty.Empty { +func (x *ABitOfEverything) GetOneofEmpty() *emptypb.Empty { if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty } @@ -496,7 +496,7 @@ func (x *ABitOfEverything) GetNonConventionalNameValue() string { return "" } -func (x *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { +func (x *ABitOfEverything) GetTimestampValue() *timestamppb.Timestamp { if x != nil { return x.TimestampValue } @@ -552,7 +552,7 @@ func (x *ABitOfEverything) GetInt64OverrideType() int64 { return 0 } -func (x *ABitOfEverything) GetAnytype() *any.Any { +func (x *ABitOfEverything) GetAnytype() *anypb.Any { if x != nil { return x.Anytype } @@ -564,7 +564,7 @@ type isABitOfEverything_OneofValue interface { } type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` + OneofEmpty *emptypb.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` } type ABitOfEverything_OneofString struct { @@ -674,8 +674,8 @@ type UpdateMessage struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UpdateMask *field_mask.FieldMask `protobuf:"bytes,1,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - ABitOfEverything *ABitOfEverything `protobuf:"bytes,2,opt,name=a_bit_of_everything,json=aBitOfEverything,proto3" json:"a_bit_of_everything,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,1,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + ABitOfEverything *ABitOfEverything `protobuf:"bytes,2,opt,name=a_bit_of_everything,json=aBitOfEverything,proto3" json:"a_bit_of_everything,omitempty"` } func (x *UpdateMessage) Reset() { @@ -710,7 +710,7 @@ func (*UpdateMessage) Descriptor() ([]byte, []int) { return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{4} } -func (x *UpdateMessage) GetUpdateMask() *field_mask.FieldMask { +func (x *UpdateMessage) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -925,8 +925,8 @@ type UpdateNestedRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nested *NestedOuter `protobuf:"bytes,1,opt,name=nested,proto3" json:"nested,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + Nested *NestedOuter `protobuf:"bytes,1,opt,name=nested,proto3" json:"nested,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *UpdateNestedRequest) Reset() { @@ -968,7 +968,7 @@ func (x *UpdateNestedRequest) GetNested() *NestedOuter { return nil } -func (x *UpdateNestedRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *UpdateNestedRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -1444,10 +1444,10 @@ var file_runtime_internal_examplepb_example_proto_goTypes = []interface{}{ nil, // 16: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry (*ResponseBodyOut_Response)(nil), // 17: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response (*RepeatedResponseBodyOut_Response)(nil), // 18: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response - (*empty.Empty)(nil), // 19: google.protobuf.Empty - (*timestamp.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*any.Any)(nil), // 21: google.protobuf.Any - (*field_mask.FieldMask)(nil), // 22: google.protobuf.FieldMask + (*emptypb.Empty)(nil), // 19: google.protobuf.Empty + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (*anypb.Any)(nil), // 21: google.protobuf.Any + (*fieldmaskpb.FieldMask)(nil), // 22: google.protobuf.FieldMask } var file_runtime_internal_examplepb_example_proto_depIdxs = []int32{ 13, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested diff --git a/runtime/internal/examplepb/example.swagger.json b/runtime/internal/examplepb/example.swagger.json index 6aaff876287..0890b6c5f44 100644 --- a/runtime/internal/examplepb/example.swagger.json +++ b/runtime/internal/examplepb/example.swagger.json @@ -25,7 +25,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 57eb7ddc6ed..97c57e732f6 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,17 +1,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb import ( - _struct "github.com/golang/protobuf/ptypes/struct" _ "google.golang.org/genproto/googleapis/api/annotations" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -38,8 +38,8 @@ type NonStandardMessage struct { En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=enGB,proto3" json:"en_GB,omitempty"` No string `protobuf:"bytes,7,opt,name=no,proto3" json:"no,omitempty"` Thing *NonStandardMessage_Thing `protobuf:"bytes,8,opt,name=thing,proto3" json:"thing,omitempty"` - StructField *_struct.Struct `protobuf:"bytes,9,opt,name=struct_field,json=structField,proto3" json:"struct_field,omitempty"` - ValueField *_struct.Value `protobuf:"bytes,10,opt,name=value_field,json=valueField,proto3" json:"value_field,omitempty"` + StructField *structpb.Struct `protobuf:"bytes,9,opt,name=struct_field,json=structField,proto3" json:"struct_field,omitempty"` + ValueField *structpb.Value `protobuf:"bytes,10,opt,name=value_field,json=valueField,proto3" json:"value_field,omitempty"` } func (x *NonStandardMessage) Reset() { @@ -130,14 +130,14 @@ func (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing { return nil } -func (x *NonStandardMessage) GetStructField() *_struct.Struct { +func (x *NonStandardMessage) GetStructField() *structpb.Struct { if x != nil { return x.StructField } return nil } -func (x *NonStandardMessage) GetValueField() *_struct.Value { +func (x *NonStandardMessage) GetValueField() *structpb.Value { if x != nil { return x.ValueField } @@ -149,8 +149,8 @@ type NonStandardUpdateRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *NonStandardUpdateRequest) Reset() { @@ -192,7 +192,7 @@ func (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage { return nil } -func (x *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *NonStandardUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -214,8 +214,8 @@ type NonStandardMessageWithJSONNames struct { En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=En_GB,proto3" json:"en_GB,omitempty"` No string `protobuf:"bytes,7,opt,name=no,json=yes,proto3" json:"no,omitempty"` Thing *NonStandardMessageWithJSONNames_Thing `protobuf:"bytes,8,opt,name=thing,json=Thingy,proto3" json:"thing,omitempty"` - StructField *_struct.Struct `protobuf:"bytes,9,opt,name=struct_field,json=StructField,proto3" json:"struct_field,omitempty"` - ValueField *_struct.Value `protobuf:"bytes,10,opt,name=value_field,json=ValueField,proto3" json:"value_field,omitempty"` + StructField *structpb.Struct `protobuf:"bytes,9,opt,name=struct_field,json=StructField,proto3" json:"struct_field,omitempty"` + ValueField *structpb.Value `protobuf:"bytes,10,opt,name=value_field,json=ValueField,proto3" json:"value_field,omitempty"` } func (x *NonStandardMessageWithJSONNames) Reset() { @@ -306,14 +306,14 @@ func (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSON return nil } -func (x *NonStandardMessageWithJSONNames) GetStructField() *_struct.Struct { +func (x *NonStandardMessageWithJSONNames) GetStructField() *structpb.Struct { if x != nil { return x.StructField } return nil } -func (x *NonStandardMessageWithJSONNames) GetValueField() *_struct.Value { +func (x *NonStandardMessageWithJSONNames) GetValueField() *structpb.Value { if x != nil { return x.ValueField } @@ -326,7 +326,7 @@ type NonStandardWithJSONNamesUpdateRequest struct { unknownFields protoimpl.UnknownFields Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } func (x *NonStandardWithJSONNamesUpdateRequest) Reset() { @@ -368,7 +368,7 @@ func (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWit return nil } -func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { +func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { if x != nil { return x.UpdateMask } @@ -728,9 +728,9 @@ var file_runtime_internal_examplepb_non_standard_names_proto_goTypes = []interfa (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.SubThing (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing - (*_struct.Struct)(nil), // 8: google.protobuf.Struct - (*_struct.Value)(nil), // 9: google.protobuf.Value - (*field_mask.FieldMask)(nil), // 10: google.protobuf.FieldMask + (*structpb.Struct)(nil), // 8: google.protobuf.Struct + (*structpb.Value)(nil), // 9: google.protobuf.Value + (*fieldmaskpb.FieldMask)(nil), // 10: google.protobuf.FieldMask } var file_runtime_internal_examplepb_non_standard_names_proto_depIdxs = []int32{ 4, // 0: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing diff --git a/runtime/internal/examplepb/non_standard_names.swagger.json b/runtime/internal/examplepb/non_standard_names.swagger.json index f27b8fb9c89..ba6625c4853 100644 --- a/runtime/internal/examplepb/non_standard_names.swagger.json +++ b/runtime/internal/examplepb/non_standard_names.swagger.json @@ -221,7 +221,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "protobufNullValue": { "type": "string", diff --git a/runtime/internal/examplepb/non_standard_names_grpc.pb.go b/runtime/internal/examplepb/non_standard_names_grpc.pb.go index 0a7d9adb7c1..545ead36357 100644 --- a/runtime/internal/examplepb/non_standard_names_grpc.pb.go +++ b/runtime/internal/examplepb/non_standard_names_grpc.pb.go @@ -11,6 +11,7 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 // NonStandardServiceClient is the client API for NonStandardService service. @@ -77,8 +78,8 @@ type UnsafeNonStandardServiceServer interface { mustEmbedUnimplementedNonStandardServiceServer() } -func RegisterNonStandardServiceServer(s *grpc.Server, srv NonStandardServiceServer) { - s.RegisterService(&_NonStandardService_serviceDesc, srv) +func RegisterNonStandardServiceServer(s grpc.ServiceRegistrar, srv NonStandardServiceServer) { + s.RegisterService(&NonStandardService_ServiceDesc, srv) } func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -117,7 +118,10 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex return interceptor(ctx, in, info, handler) } -var _NonStandardService_serviceDesc = grpc.ServiceDesc{ +// NonStandardService_ServiceDesc is the grpc.ServiceDesc for NonStandardService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var NonStandardService_ServiceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.runtime.internal.examplepb.NonStandardService", HandlerType: (*NonStandardServiceServer)(nil), Methods: []grpc.MethodDesc{ diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index e297db629c5..e625ed9df09 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.swagger.json b/runtime/internal/examplepb/proto2.swagger.json index 4d5edadd07d..9afd057a50a 100644 --- a/runtime/internal/examplepb/proto2.swagger.json +++ b/runtime/internal/examplepb/proto2.swagger.json @@ -25,7 +25,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 3306210cbf9..581923ebdd8 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,18 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 -// protoc v3.13.0 +// protoc v3.15.2 // source: runtime/internal/examplepb/proto3.proto package examplepb import ( - duration "github.com/golang/protobuf/ptypes/duration" - timestamp "github.com/golang/protobuf/ptypes/timestamp" - wrappers "github.com/golang/protobuf/ptypes/wrappers" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -79,50 +79,50 @@ type Proto3Message struct { unknownFields protoimpl.UnknownFields // Next number: 46 - Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - Int32Value int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - BoolValue bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,8,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` - RepeatedMessage []*wrappers.UInt64Value `protobuf:"bytes,44,rep,name=repeated_message,json=repeatedMessage,proto3" json:"repeated_message,omitempty"` - EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"enum_value,omitempty"` - RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"repeated_enum,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` - DurationValue *duration.Duration `protobuf:"bytes,14,opt,name=duration_value,json=durationValue,proto3" json:"duration_value,omitempty"` - FieldmaskValue *field_mask.FieldMask `protobuf:"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3" json:"fieldmask_value,omitempty"` + Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Int32Value int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + BoolValue bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,8,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` + RepeatedMessage []*wrapperspb.UInt64Value `protobuf:"bytes,44,rep,name=repeated_message,json=repeatedMessage,proto3" json:"repeated_message,omitempty"` + EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"enum_value,omitempty"` + RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"repeated_enum,omitempty"` + TimestampValue *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + DurationValue *durationpb.Duration `protobuf:"bytes,14,opt,name=duration_value,json=durationValue,proto3" json:"duration_value,omitempty"` + FieldmaskValue *fieldmaskpb.FieldMask `protobuf:"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3" json:"fieldmask_value,omitempty"` // Types that are assignable to OneofValue: // *Proto3Message_OneofBoolValue // *Proto3Message_OneofStringValue - OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` - WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` - WrapperFloatValue *wrappers.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` - WrapperInt64Value *wrappers.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` - WrapperInt32Value *wrappers.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3" json:"wrapper_int32_value,omitempty"` - WrapperUInt64Value *wrappers.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3" json:"wrapper_u_int64_value,omitempty"` - WrapperUInt32Value *wrappers.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3" json:"wrapper_u_int32_value,omitempty"` - WrapperBoolValue *wrappers.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3" json:"wrapper_bool_value,omitempty"` - WrapperStringValue *wrappers.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3" json:"wrapper_string_value,omitempty"` - WrapperBytesValue *wrappers.BytesValue `protobuf:"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3" json:"wrapper_bytes_value,omitempty"` - MapValue map[string]string `protobuf:"bytes,26,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue2 map[string]int32 `protobuf:"bytes,27,rep,name=map_value2,json=mapValue2,proto3" json:"map_value2,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue3 map[int32]string `protobuf:"bytes,28,rep,name=map_value3,json=mapValue3,proto3" json:"map_value3,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue4 map[string]int64 `protobuf:"bytes,29,rep,name=map_value4,json=mapValue4,proto3" json:"map_value4,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue5 map[int64]string `protobuf:"bytes,30,rep,name=map_value5,json=mapValue5,proto3" json:"map_value5,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue6 map[string]uint32 `protobuf:"bytes,31,rep,name=map_value6,json=mapValue6,proto3" json:"map_value6,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue7 map[uint32]string `protobuf:"bytes,32,rep,name=map_value7,json=mapValue7,proto3" json:"map_value7,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue8 map[string]uint64 `protobuf:"bytes,33,rep,name=map_value8,json=mapValue8,proto3" json:"map_value8,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue9 map[uint64]string `protobuf:"bytes,34,rep,name=map_value9,json=mapValue9,proto3" json:"map_value9,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue10 map[string]float32 `protobuf:"bytes,35,rep,name=map_value10,json=mapValue10,proto3" json:"map_value10,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` - MapValue12 map[string]float64 `protobuf:"bytes,37,rep,name=map_value12,json=mapValue12,proto3" json:"map_value12,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` - MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue16 map[string]*wrappers.UInt64Value `protobuf:"bytes,45,rep,name=map_value16,json=mapValue16,proto3" json:"map_value16,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` + WrapperDoubleValue *wrapperspb.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` + WrapperFloatValue *wrapperspb.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` + WrapperInt64Value *wrapperspb.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` + WrapperInt32Value *wrapperspb.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3" json:"wrapper_int32_value,omitempty"` + WrapperUInt64Value *wrapperspb.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3" json:"wrapper_u_int64_value,omitempty"` + WrapperUInt32Value *wrapperspb.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3" json:"wrapper_u_int32_value,omitempty"` + WrapperBoolValue *wrapperspb.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3" json:"wrapper_bool_value,omitempty"` + WrapperStringValue *wrapperspb.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3" json:"wrapper_string_value,omitempty"` + WrapperBytesValue *wrapperspb.BytesValue `protobuf:"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3" json:"wrapper_bytes_value,omitempty"` + MapValue map[string]string `protobuf:"bytes,26,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue2 map[string]int32 `protobuf:"bytes,27,rep,name=map_value2,json=mapValue2,proto3" json:"map_value2,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue3 map[int32]string `protobuf:"bytes,28,rep,name=map_value3,json=mapValue3,proto3" json:"map_value3,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue4 map[string]int64 `protobuf:"bytes,29,rep,name=map_value4,json=mapValue4,proto3" json:"map_value4,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue5 map[int64]string `protobuf:"bytes,30,rep,name=map_value5,json=mapValue5,proto3" json:"map_value5,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue6 map[string]uint32 `protobuf:"bytes,31,rep,name=map_value6,json=mapValue6,proto3" json:"map_value6,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue7 map[uint32]string `protobuf:"bytes,32,rep,name=map_value7,json=mapValue7,proto3" json:"map_value7,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue8 map[string]uint64 `protobuf:"bytes,33,rep,name=map_value8,json=mapValue8,proto3" json:"map_value8,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue9 map[uint64]string `protobuf:"bytes,34,rep,name=map_value9,json=mapValue9,proto3" json:"map_value9,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue10 map[string]float32 `protobuf:"bytes,35,rep,name=map_value10,json=mapValue10,proto3" json:"map_value10,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` + MapValue12 map[string]float64 `protobuf:"bytes,37,rep,name=map_value12,json=mapValue12,proto3" json:"map_value12,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue16 map[string]*wrapperspb.UInt64Value `protobuf:"bytes,45,rep,name=map_value16,json=mapValue16,proto3" json:"map_value16,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Proto3Message) Reset() { @@ -234,7 +234,7 @@ func (x *Proto3Message) GetRepeatedValue() []string { return nil } -func (x *Proto3Message) GetRepeatedMessage() []*wrappers.UInt64Value { +func (x *Proto3Message) GetRepeatedMessage() []*wrapperspb.UInt64Value { if x != nil { return x.RepeatedMessage } @@ -255,21 +255,21 @@ func (x *Proto3Message) GetRepeatedEnum() []EnumValue { return nil } -func (x *Proto3Message) GetTimestampValue() *timestamp.Timestamp { +func (x *Proto3Message) GetTimestampValue() *timestamppb.Timestamp { if x != nil { return x.TimestampValue } return nil } -func (x *Proto3Message) GetDurationValue() *duration.Duration { +func (x *Proto3Message) GetDurationValue() *durationpb.Duration { if x != nil { return x.DurationValue } return nil } -func (x *Proto3Message) GetFieldmaskValue() *field_mask.FieldMask { +func (x *Proto3Message) GetFieldmaskValue() *fieldmaskpb.FieldMask { if x != nil { return x.FieldmaskValue } @@ -297,63 +297,63 @@ func (x *Proto3Message) GetOneofStringValue() string { return "" } -func (x *Proto3Message) GetWrapperDoubleValue() *wrappers.DoubleValue { +func (x *Proto3Message) GetWrapperDoubleValue() *wrapperspb.DoubleValue { if x != nil { return x.WrapperDoubleValue } return nil } -func (x *Proto3Message) GetWrapperFloatValue() *wrappers.FloatValue { +func (x *Proto3Message) GetWrapperFloatValue() *wrapperspb.FloatValue { if x != nil { return x.WrapperFloatValue } return nil } -func (x *Proto3Message) GetWrapperInt64Value() *wrappers.Int64Value { +func (x *Proto3Message) GetWrapperInt64Value() *wrapperspb.Int64Value { if x != nil { return x.WrapperInt64Value } return nil } -func (x *Proto3Message) GetWrapperInt32Value() *wrappers.Int32Value { +func (x *Proto3Message) GetWrapperInt32Value() *wrapperspb.Int32Value { if x != nil { return x.WrapperInt32Value } return nil } -func (x *Proto3Message) GetWrapperUInt64Value() *wrappers.UInt64Value { +func (x *Proto3Message) GetWrapperUInt64Value() *wrapperspb.UInt64Value { if x != nil { return x.WrapperUInt64Value } return nil } -func (x *Proto3Message) GetWrapperUInt32Value() *wrappers.UInt32Value { +func (x *Proto3Message) GetWrapperUInt32Value() *wrapperspb.UInt32Value { if x != nil { return x.WrapperUInt32Value } return nil } -func (x *Proto3Message) GetWrapperBoolValue() *wrappers.BoolValue { +func (x *Proto3Message) GetWrapperBoolValue() *wrapperspb.BoolValue { if x != nil { return x.WrapperBoolValue } return nil } -func (x *Proto3Message) GetWrapperStringValue() *wrappers.StringValue { +func (x *Proto3Message) GetWrapperStringValue() *wrapperspb.StringValue { if x != nil { return x.WrapperStringValue } return nil } -func (x *Proto3Message) GetWrapperBytesValue() *wrappers.BytesValue { +func (x *Proto3Message) GetWrapperBytesValue() *wrapperspb.BytesValue { if x != nil { return x.WrapperBytesValue } @@ -451,7 +451,7 @@ func (x *Proto3Message) GetMapValue15() map[bool]string { return nil } -func (x *Proto3Message) GetMapValue16() map[string]*wrappers.UInt64Value { +func (x *Proto3Message) GetMapValue16() map[string]*wrapperspb.UInt64Value { if x != nil { return x.MapValue16 } @@ -768,34 +768,34 @@ func file_runtime_internal_examplepb_proto3_proto_rawDescGZIP() []byte { var file_runtime_internal_examplepb_proto3_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_runtime_internal_examplepb_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_runtime_internal_examplepb_proto3_proto_goTypes = []interface{}{ - (EnumValue)(0), // 0: grpc.gateway.runtime.internal.examplepb.EnumValue - (*Proto3Message)(nil), // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message - nil, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry - nil, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry - nil, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry - nil, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry - nil, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry - nil, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry - nil, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry - nil, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry - nil, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry - nil, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry - nil, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry - nil, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry - nil, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry - nil, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry - (*wrappers.UInt64Value)(nil), // 16: google.protobuf.UInt64Value - (*timestamp.Timestamp)(nil), // 17: google.protobuf.Timestamp - (*duration.Duration)(nil), // 18: google.protobuf.Duration - (*field_mask.FieldMask)(nil), // 19: google.protobuf.FieldMask - (*wrappers.DoubleValue)(nil), // 20: google.protobuf.DoubleValue - (*wrappers.FloatValue)(nil), // 21: google.protobuf.FloatValue - (*wrappers.Int64Value)(nil), // 22: google.protobuf.Int64Value - (*wrappers.Int32Value)(nil), // 23: google.protobuf.Int32Value - (*wrappers.UInt32Value)(nil), // 24: google.protobuf.UInt32Value - (*wrappers.BoolValue)(nil), // 25: google.protobuf.BoolValue - (*wrappers.StringValue)(nil), // 26: google.protobuf.StringValue - (*wrappers.BytesValue)(nil), // 27: google.protobuf.BytesValue + (EnumValue)(0), // 0: grpc.gateway.runtime.internal.examplepb.EnumValue + (*Proto3Message)(nil), // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message + nil, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry + nil, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry + nil, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry + nil, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry + nil, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry + nil, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry + nil, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry + nil, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry + nil, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry + nil, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry + nil, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry + nil, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry + nil, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry + nil, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry + (*wrapperspb.UInt64Value)(nil), // 16: google.protobuf.UInt64Value + (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 18: google.protobuf.Duration + (*fieldmaskpb.FieldMask)(nil), // 19: google.protobuf.FieldMask + (*wrapperspb.DoubleValue)(nil), // 20: google.protobuf.DoubleValue + (*wrapperspb.FloatValue)(nil), // 21: google.protobuf.FloatValue + (*wrapperspb.Int64Value)(nil), // 22: google.protobuf.Int64Value + (*wrapperspb.Int32Value)(nil), // 23: google.protobuf.Int32Value + (*wrapperspb.UInt32Value)(nil), // 24: google.protobuf.UInt32Value + (*wrapperspb.BoolValue)(nil), // 25: google.protobuf.BoolValue + (*wrapperspb.StringValue)(nil), // 26: google.protobuf.StringValue + (*wrapperspb.BytesValue)(nil), // 27: google.protobuf.BytesValue } var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ 1, // 0: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message diff --git a/runtime/internal/examplepb/proto3.swagger.json b/runtime/internal/examplepb/proto3.swagger.json index 084374e18a7..e8d44736043 100644 --- a/runtime/internal/examplepb/proto3.swagger.json +++ b/runtime/internal/examplepb/proto3.swagger.json @@ -25,7 +25,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { "type": "object", diff --git a/tools.go b/tools.go deleted file mode 100644 index eaaaa57619e..00000000000 --- a/tools.go +++ /dev/null @@ -1,9 +0,0 @@ -//+build tools - -package tools - -import ( - _ "github.com/bufbuild/buf/cmd/buf" - _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" - _ "google.golang.org/protobuf/cmd/protoc-gen-go" -) From 3f38fdfb017f34e8f31d6800893da5a8879138e6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 4 May 2021 16:02:16 +0000 Subject: [PATCH 0922/1518] fix(deps): update google.golang.org/genproto commit hash to 3b2ad6c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b81c0dfbffe..06dde478ede 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 + google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450 google.golang.org/grpc v1.37.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 0c87a8c9cff..7ac90c5714a 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20 h1:ov60aCaYZRD4c3+rjbtkVMhj/5CGviXVJqMCOrQSO3I= -google.golang.org/genproto v0.0.0-20210503173045-b96a97608f20/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450 h1:iSifhRHb9+Pi325BWlAfpJbuG2YXlBoHE2aEFJY/Pg8= +google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ae4b52350fc..0adb35b9906 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ov60aCaYZRD4c3+rjbtkVMhj/5CGviXVJqMCOrQSO3I=", - version = "v0.0.0-20210503173045-b96a97608f20", + sum = "h1:iSifhRHb9+Pi325BWlAfpJbuG2YXlBoHE2aEFJY/Pg8=", + version = "v0.0.0-20210504143626-3b2ad6ccc450", ) go_repository( name = "org_golang_google_grpc", From a67c710624919696e83b57d1c847c843abab7015 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 5 May 2021 15:30:31 +0000 Subject: [PATCH 0923/1518] fix(deps): update google.golang.org/genproto commit hash to a42aa05 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 06dde478ede..4cb3018e830 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450 + google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76 google.golang.org/grpc v1.37.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 7ac90c5714a..ae9edf50e9c 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450 h1:iSifhRHb9+Pi325BWlAfpJbuG2YXlBoHE2aEFJY/Pg8= -google.golang.org/genproto v0.0.0-20210504143626-3b2ad6ccc450/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76 h1:0pBp6vCQyvmttnWa4c74n/y2U7bAQeIUVyVvZpb7Fyo= +google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0adb35b9906..4d585fc769a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iSifhRHb9+Pi325BWlAfpJbuG2YXlBoHE2aEFJY/Pg8=", - version = "v0.0.0-20210504143626-3b2ad6ccc450", + sum = "h1:0pBp6vCQyvmttnWa4c74n/y2U7bAQeIUVyVvZpb7Fyo=", + version = "v0.0.0-20210505142820-a42aa055cf76", ) go_repository( name = "org_golang_google_grpc", From 5152b13588c25df0baf4b95811a153ada8d8a2da Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 6 May 2021 21:22:30 +0000 Subject: [PATCH 0924/1518] chore(deps): update golang docker tag to v1.16.4 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 2320bbf3d5f..29034662793 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.3 +FROM golang:1.16.4 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From 9acc39a4a85e3267a953f207bdd7525aaf89e9ab Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 7 May 2021 01:22:11 +0000 Subject: [PATCH 0925/1518] chore(deps): update dependency com_google_protobuf to v3.16.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 6fe9e44a6fc..092736430ae 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "0cbdc9adda01f6d2facc65a22a2be5cecefbefe5a09e5382ee8879b522c04441", - strip_prefix = "protobuf-3.15.8", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.15.8.tar.gz"], + sha256 = "7892a35d979304a404400a101c46ce90e85ec9e2a766a86041bb361f626247f5", + strip_prefix = "protobuf-3.16.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.16.0.tar.gz"], ) http_archive( From 317b2dcf4fd267d60cd69e56ff29a92695a97b8c Mon Sep 17 00:00:00 2001 From: Tanya Bouman Date: Fri, 7 May 2021 18:43:55 -0400 Subject: [PATCH 0926/1518] support new naming convention for go_library targets (#2134) --- BUILD | 1 + examples/internal/clients/abe/BUILD.bazel | 18 +++-- examples/internal/clients/echo/BUILD.bazel | 12 +++- .../generateunboundmethods/BUILD.bazel | 10 ++- .../internal/clients/responsebody/BUILD.bazel | 10 ++- .../clients/unannotatedecho/BUILD.bazel | 12 +++- .../cmd/example-gateway-server/BUILD.bazel | 8 +-- .../cmd/example-grpc-server/BUILD.bazel | 8 +-- examples/internal/gateway/BUILD.bazel | 18 +++-- examples/internal/helloworld/BUILD.bazel | 8 ++- examples/internal/integration/BUILD.bazel | 36 +++++----- examples/internal/proto/examplepb/BUILD.bazel | 34 ++++++---- examples/internal/proto/pathenum/BUILD.bazel | 8 ++- .../internal/proto/standalone/BUILD.bazel | 24 ++++--- examples/internal/proto/sub/BUILD.bazel | 8 ++- examples/internal/proto/sub2/BUILD.bazel | 8 ++- examples/internal/server/BUILD.bazel | 40 ++++++----- internal/casing/BUILD.bazel | 8 ++- internal/codegenerator/BUILD.bazel | 26 ++++--- internal/descriptor/BUILD.bazel | 54 ++++++++------- internal/descriptor/apiconfig/BUILD.bazel | 8 ++- internal/descriptor/openapiconfig/BUILD.bazel | 10 ++- internal/generator/BUILD.bazel | 10 ++- internal/httprule/BUILD.bazel | 18 +++-- protoc-gen-grpc-gateway/BUILD.bazel | 20 +++--- .../internal/gengateway/BUILD.bazel | 34 ++++++---- protoc-gen-openapiv2/BUILD.bazel | 20 +++--- .../internal/genopenapi/BUILD.bazel | 60 ++++++++-------- protoc-gen-openapiv2/options/BUILD.bazel | 8 ++- runtime/BUILD.bazel | 68 ++++++++++--------- runtime/internal/examplepb/BUILD.bazel | 8 ++- utilities/BUILD.bazel | 12 +++- 32 files changed, 392 insertions(+), 235 deletions(-) diff --git a/BUILD b/BUILD index bfcd639e9a5..f2d42e92631 100644 --- a/BUILD +++ b/BUILD @@ -16,6 +16,7 @@ buildifier( # gazelle:prefix github.com/grpc-ecosystem/grpc-gateway/v2 # gazelle:go_proto_compilers //:go_apiv2 # gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc +# gazelle:go_naming_convention import_alias gazelle(name = "gazelle") diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 7d459a7dbd6..9da0e266b76 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "abe", srcs = [ "api_a_bit_of_everything_service.go", "api_camel_case_service_name.go", @@ -32,10 +32,16 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe", deps = [ - "//examples/internal/proto/examplepb:go_default_library", - "//examples/internal/proto/pathenum:go_default_library", - "//runtime:go_default_library", - "@com_github_antihax_optional//:go_default_library", - "@org_golang_x_oauth2//:go_default_library", + "//examples/internal/proto/examplepb", + "//examples/internal/proto/pathenum", + "//runtime", + "@com_github_antihax_optional//:optional", + "@org_golang_x_oauth2//:oauth2", ], ) + +alias( + name = "go_default_library", + actual = ":abe", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/clients/echo/BUILD.bazel b/examples/internal/clients/echo/BUILD.bazel index ec37262987f..5c62a33e1f8 100644 --- a/examples/internal/clients/echo/BUILD.bazel +++ b/examples/internal/clients/echo/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "echo", srcs = [ "api_echo_service.go", "client.go", @@ -19,7 +19,13 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo", deps = [ - "@com_github_antihax_optional//:go_default_library", - "@org_golang_x_oauth2//:go_default_library", + "@com_github_antihax_optional//:optional", + "@org_golang_x_oauth2//:oauth2", ], ) + +alias( + name = "go_default_library", + actual = ":echo", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/clients/generateunboundmethods/BUILD.bazel b/examples/internal/clients/generateunboundmethods/BUILD.bazel index 4f1928e62c5..ce2fed06823 100644 --- a/examples/internal/clients/generateunboundmethods/BUILD.bazel +++ b/examples/internal/clients/generateunboundmethods/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( - name = "go_default_library", + name = "generateunboundmethods", srcs = [ "api_generate_unbound_methods_echo_service.go", "client.go", @@ -14,5 +14,11 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/generateunboundmethods", visibility = ["//examples:__subpackages__"], - deps = ["@org_golang_x_oauth2//:go_default_library"], + deps = ["@org_golang_x_oauth2//:oauth2"], +) + +alias( + name = "go_default_library", + actual = ":generateunboundmethods", + visibility = ["//examples:__subpackages__"], ) diff --git a/examples/internal/clients/responsebody/BUILD.bazel b/examples/internal/clients/responsebody/BUILD.bazel index 524400360f2..9d76d60e947 100644 --- a/examples/internal/clients/responsebody/BUILD.bazel +++ b/examples/internal/clients/responsebody/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( - name = "go_default_library", + name = "responsebody", srcs = [ "api_response_body_service.go", "client.go", @@ -19,5 +19,11 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/responsebody", visibility = ["//visibility:public"], - deps = ["@org_golang_x_oauth2//:go_default_library"], + deps = ["@org_golang_x_oauth2//:oauth2"], +) + +alias( + name = "go_default_library", + actual = ":responsebody", + visibility = ["//examples:__subpackages__"], ) diff --git a/examples/internal/clients/unannotatedecho/BUILD.bazel b/examples/internal/clients/unannotatedecho/BUILD.bazel index 574f2eaf0d5..af3361e0a84 100644 --- a/examples/internal/clients/unannotatedecho/BUILD.bazel +++ b/examples/internal/clients/unannotatedecho/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "unannotatedecho", srcs = [ "api_unannotated_echo_service.go", "client.go", @@ -17,7 +17,13 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho", deps = [ - "@com_github_antihax_optional//:go_default_library", - "@org_golang_x_oauth2//:go_default_library", + "@com_github_antihax_optional//:optional", + "@org_golang_x_oauth2//:oauth2", ], ) + +alias( + name = "go_default_library", + actual = ":unannotatedecho", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/cmd/example-gateway-server/BUILD.bazel b/examples/internal/cmd/example-gateway-server/BUILD.bazel index a111605039b..a56015d065c 100644 --- a/examples/internal/cmd/example-gateway-server/BUILD.bazel +++ b/examples/internal/cmd/example-gateway-server/BUILD.bazel @@ -1,18 +1,18 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") go_library( - name = "go_default_library", + name = "example-gateway-server_lib", srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-gateway-server", visibility = ["//visibility:private"], deps = [ - "//examples/internal/gateway:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//examples/internal/gateway", + "@com_github_golang_glog//:glog", ], ) go_binary( name = "example-gateway-server", - embed = [":go_default_library"], + embed = [":example-gateway-server_lib"], visibility = ["//visibility:public"], ) diff --git a/examples/internal/cmd/example-grpc-server/BUILD.bazel b/examples/internal/cmd/example-grpc-server/BUILD.bazel index 6f19a9bd106..7f216a10520 100644 --- a/examples/internal/cmd/example-grpc-server/BUILD.bazel +++ b/examples/internal/cmd/example-grpc-server/BUILD.bazel @@ -3,17 +3,17 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") package(default_visibility = ["//visibility:private"]) go_library( - name = "go_default_library", + name = "example-grpc-server_lib", srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-grpc-server", deps = [ - "//examples/internal/server:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//examples/internal/server", + "@com_github_golang_glog//:glog", ], ) go_binary( name = "example-server", - embed = [":go_default_library"], + embed = [":example-grpc-server_lib"], visibility = ["//visibility:public"], ) diff --git a/examples/internal/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel index 5656e532591..989177fc7ad 100644 --- a/examples/internal/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( - name = "go_default_library", + name = "gateway", srcs = [ "doc.go", "gateway.go", @@ -11,12 +11,18 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway", visibility = ["//visibility:public"], deps = [ - "//examples/internal/proto/examplepb:go_default_library", - "//examples/internal/proto/standalone:go_default_library", - "//runtime:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//examples/internal/proto/examplepb", + "//examples/internal/proto/standalone", + "//runtime", + "@com_github_golang_glog//:glog", "@go_googleapis//google/rpc:errdetails_go_proto", "@org_golang_google_grpc//:go_default_library", - "@org_golang_google_grpc//connectivity:go_default_library", + "@org_golang_google_grpc//connectivity", ], ) + +alias( + name = "go_default_library", + actual = ":gateway", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index c93b8bbc2d3..2b1e974df45 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -33,8 +33,14 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "helloworld", embed = [":helloworld_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld", visibility = ["//examples:__subpackages__"], ) + +alias( + name = "go_default_library", + actual = ":helloworld", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index 3aab0e53439..385f2242f92 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -1,31 +1,31 @@ load("@io_bazel_rules_go//go:def.bzl", "go_test") go_test( - name = "go_default_test", + name = "integration_test", srcs = [ "client_test.go", "integration_test.go", "main_test.go", ], deps = [ - "//examples/internal/clients/abe:go_default_library", - "//examples/internal/clients/echo:go_default_library", - "//examples/internal/clients/unannotatedecho:go_default_library", - "//examples/internal/gateway:go_default_library", - "//examples/internal/proto/examplepb:go_default_library", - "//examples/internal/proto/pathenum:go_default_library", - "//examples/internal/proto/sub:go_default_library", - "//examples/internal/server:go_default_library", - "//runtime:go_default_library", - "@com_github_golang_glog//:go_default_library", - "@com_github_google_go_cmp//cmp:go_default_library", + "//examples/internal/clients/abe", + "//examples/internal/clients/echo", + "//examples/internal/clients/unannotatedecho", + "//examples/internal/gateway", + "//examples/internal/proto/examplepb", + "//examples/internal/proto/pathenum", + "//examples/internal/proto/sub", + "//examples/internal/server", + "//runtime", + "@com_github_golang_glog//:glog", + "@com_github_google_go_cmp//cmp", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_protobuf//encoding/protojson:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//testing/protocmp:go_default_library", - "@org_golang_google_protobuf//types/known/emptypb:go_default_library", - "@org_golang_google_protobuf//types/known/structpb:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//testing/protocmp", + "@org_golang_google_protobuf//types/known/emptypb", + "@org_golang_google_protobuf//types/known/structpb", ], ) diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index 1abcb8bfedd..ed37a7a0e61 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -94,10 +94,10 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", proto = ":examplepb_proto", deps = [ - "//examples/internal/proto/pathenum:go_default_library", - "//examples/internal/proto/sub:go_default_library", - "//examples/internal/proto/sub2:go_default_library", - "//protoc-gen-openapiv2/options:go_default_library", + "//examples/internal/proto/pathenum", + "//examples/internal/proto/sub", + "//examples/internal/proto/sub2", + "//protoc-gen-openapiv2/options", "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/api:httpbody_go_proto", @@ -107,7 +107,7 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "examplepb", srcs = [ "openapi_merge_a.pb.go", "openapi_merge_a.pb.gw.go", @@ -119,17 +119,17 @@ go_library( embed = [":examplepb_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", deps = [ - "//runtime:go_default_library", - "//utilities:go_default_library", + "//runtime", + "//utilities", "@go_googleapis//google/api:annotations_go_proto", "@org_golang_google_grpc//:go_default_library", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_grpc//grpclog:go_default_library", - "@org_golang_google_grpc//metadata:go_default_library", - "@org_golang_google_grpc//status:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", - "@org_golang_google_protobuf//runtime/protoimpl:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//grpclog", + "@org_golang_google_grpc//metadata", + "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//reflect/protoreflect", + "@org_golang_google_protobuf//runtime/protoimpl", ], ) @@ -149,3 +149,9 @@ protoc_gen_openapiv2( proto = ":openapi_merge_proto", single_output = True, # Outputs a single swagger.json file. ) + +alias( + name = "go_default_library", + actual = ":examplepb", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/proto/pathenum/BUILD.bazel b/examples/internal/proto/pathenum/BUILD.bazel index 5f33fab0cf7..4af5489a080 100644 --- a/examples/internal/proto/pathenum/BUILD.bazel +++ b/examples/internal/proto/pathenum/BUILD.bazel @@ -17,7 +17,13 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "pathenum", embed = [":pathenum_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum", ) + +alias( + name = "go_default_library", + actual = ":pathenum", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/proto/standalone/BUILD.bazel b/examples/internal/proto/standalone/BUILD.bazel index f9db127384f..11e664f7c41 100644 --- a/examples/internal/proto/standalone/BUILD.bazel +++ b/examples/internal/proto/standalone/BUILD.bazel @@ -1,19 +1,25 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( - name = "go_default_library", + name = "standalone", srcs = ["unannotated_echo_service.pb.gw.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone", visibility = ["//examples:__subpackages__"], deps = [ - "//examples/internal/proto/examplepb:go_default_library", - "//runtime:go_default_library", - "//utilities:go_default_library", + "//examples/internal/proto/examplepb", + "//runtime", + "//utilities", "@org_golang_google_grpc//:go_default_library", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_grpc//grpclog:go_default_library", - "@org_golang_google_grpc//metadata:go_default_library", - "@org_golang_google_grpc//status:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//grpclog", + "@org_golang_google_grpc//metadata", + "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//proto", ], ) + +alias( + name = "go_default_library", + actual = ":standalone", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/proto/sub/BUILD.bazel b/examples/internal/proto/sub/BUILD.bazel index 6c74d3680fe..5fc4f9ea1dd 100644 --- a/examples/internal/proto/sub/BUILD.bazel +++ b/examples/internal/proto/sub/BUILD.bazel @@ -17,7 +17,13 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "sub", embed = [":sub_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub", ) + +alias( + name = "go_default_library", + actual = ":sub", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/proto/sub2/BUILD.bazel b/examples/internal/proto/sub2/BUILD.bazel index a970fa2dd90..3aa08a47522 100644 --- a/examples/internal/proto/sub2/BUILD.bazel +++ b/examples/internal/proto/sub2/BUILD.bazel @@ -17,7 +17,13 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "sub2", embed = [":sub2_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2", ) + +alias( + name = "go_default_library", + actual = ":sub2", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 7bcde5f579b..e990dbcedc7 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "server", srcs = [ "a_bit_of_everything.go", "echo.go", @@ -16,26 +16,32 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server", deps = [ - "//examples/internal/proto/examplepb:go_default_library", - "//examples/internal/proto/pathenum:go_default_library", - "//examples/internal/proto/standalone:go_default_library", - "//examples/internal/proto/sub:go_default_library", - "//examples/internal/proto/sub2:go_default_library", - "//runtime:go_default_library", - "@com_github_golang_glog//:go_default_library", - "@com_github_rogpeppe_fastuuid//:go_default_library", + "//examples/internal/proto/examplepb", + "//examples/internal/proto/pathenum", + "//examples/internal/proto/standalone", + "//examples/internal/proto/sub", + "//examples/internal/proto/sub2", + "//runtime", + "@com_github_golang_glog//:glog", + "@com_github_rogpeppe_fastuuid//:fastuuid", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//:go_default_library", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_grpc//metadata:go_default_library", - "@org_golang_google_grpc//status:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", - "@org_golang_google_protobuf//types/known/durationpb:go_default_library", - "@org_golang_google_protobuf//types/known/emptypb:go_default_library", - "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//metadata", + "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//reflect/protoreflect", + "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/emptypb", + "@org_golang_google_protobuf//types/known/wrapperspb", ], ) + +alias( + name = "go_default_library", + actual = ":server", + visibility = ["//examples:__subpackages__"], +) diff --git a/internal/casing/BUILD.bazel b/internal/casing/BUILD.bazel index 31481939d36..672b3564762 100644 --- a/internal/casing/BUILD.bazel +++ b/internal/casing/BUILD.bazel @@ -1,8 +1,14 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( - name = "go_default_library", + name = "casing", srcs = ["camel.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing", visibility = ["//:__subpackages__"], ) + +alias( + name = "go_default_library", + actual = ":casing", + visibility = ["//:__subpackages__"], +) diff --git a/internal/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel index 473f329a6c2..679fa47678c 100644 --- a/internal/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "codegenerator", srcs = [ "doc.go", "parse_req.go", @@ -11,20 +11,26 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator", deps = [ - "@org_golang_google_protobuf//compiler/protogen:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "@org_golang_google_protobuf//compiler/protogen", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/pluginpb", ], ) go_test( - name = "go_default_test", + name = "codegenerator_test", srcs = ["parse_req_test.go"], - embed = [":go_default_library"], + embed = [":codegenerator"], deps = [ - "@com_github_google_go_cmp//cmp:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//testing/protocmp:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "@com_github_google_go_cmp//cmp", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//testing/protocmp", + "@org_golang_google_protobuf//types/pluginpb", ], ) + +alias( + name = "go_default_library", + actual = ":codegenerator", + visibility = ["//:__subpackages__"], +) diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index 672d67451a3..b9473e24f2a 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "descriptor", srcs = [ "grpc_api_configuration.go", "openapi_configuration.go", @@ -13,25 +13,25 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor", deps = [ - "//internal/casing:go_default_library", - "//internal/codegenerator:go_default_library", - "//internal/descriptor/apiconfig:go_default_library", - "//internal/descriptor/openapiconfig:go_default_library", - "//internal/httprule:go_default_library", - "//protoc-gen-openapiv2/options:go_default_library", - "@com_github_ghodss_yaml//:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//internal/casing", + "//internal/codegenerator", + "//internal/descriptor/apiconfig", + "//internal/descriptor/openapiconfig", + "//internal/httprule", + "//protoc-gen-openapiv2/options", + "@com_github_ghodss_yaml//:yaml", + "@com_github_golang_glog//:glog", "@go_googleapis//google/api:annotations_go_proto", - "@org_golang_google_protobuf//compiler/protogen:go_default_library", - "@org_golang_google_protobuf//encoding/protojson:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/descriptorpb:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "@org_golang_google_protobuf//compiler/protogen", + "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/pluginpb", ], ) go_test( - name = "go_default_test", + name = "descriptor_test", size = "small", srcs = [ "grpc_api_configuration_test.go", @@ -40,15 +40,21 @@ go_test( "services_test.go", "types_test.go", ], - embed = [":go_default_library"], + embed = [":descriptor"], deps = [ - "//internal/descriptor/openapiconfig:go_default_library", - "//internal/httprule:go_default_library", - "//protoc-gen-openapiv2/options:go_default_library", - "@org_golang_google_protobuf//compiler/protogen:go_default_library", - "@org_golang_google_protobuf//encoding/prototext:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/descriptorpb:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "//internal/descriptor/openapiconfig", + "//internal/httprule", + "//protoc-gen-openapiv2/options", + "@org_golang_google_protobuf//compiler/protogen", + "@org_golang_google_protobuf//encoding/prototext", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/pluginpb", ], ) + +alias( + name = "go_default_library", + actual = ":descriptor", + visibility = ["//:__subpackages__"], +) diff --git a/internal/descriptor/apiconfig/BUILD.bazel b/internal/descriptor/apiconfig/BUILD.bazel index 80dc57a2e3c..9fe7533ca2f 100644 --- a/internal/descriptor/apiconfig/BUILD.bazel +++ b/internal/descriptor/apiconfig/BUILD.bazel @@ -23,7 +23,13 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "apiconfig", embed = [":apiconfig_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig", ) + +alias( + name = "go_default_library", + actual = ":apiconfig", + visibility = ["//:__subpackages__"], +) diff --git a/internal/descriptor/openapiconfig/BUILD.bazel b/internal/descriptor/openapiconfig/BUILD.bazel index 29156c84612..6289833967e 100644 --- a/internal/descriptor/openapiconfig/BUILD.bazel +++ b/internal/descriptor/openapiconfig/BUILD.bazel @@ -15,12 +15,18 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig", proto = ":openapiconfig_proto", visibility = ["//:__subpackages__"], - deps = ["//protoc-gen-openapiv2/options:go_default_library"], + deps = ["//protoc-gen-openapiv2/options"], ) go_library( - name = "go_default_library", + name = "openapiconfig", embed = [":openapiconfig_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig", visibility = ["//:__subpackages__"], ) + +alias( + name = "go_default_library", + actual = ":openapiconfig", + visibility = ["//:__subpackages__"], +) diff --git a/internal/generator/BUILD.bazel b/internal/generator/BUILD.bazel index 93027afe242..23727ccf564 100644 --- a/internal/generator/BUILD.bazel +++ b/internal/generator/BUILD.bazel @@ -3,8 +3,14 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "generator", srcs = ["generator.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator", - deps = ["//internal/descriptor:go_default_library"], + deps = ["//internal/descriptor"], +) + +alias( + name = "go_default_library", + actual = ":generator", + visibility = ["//:__subpackages__"], ) diff --git a/internal/httprule/BUILD.bazel b/internal/httprule/BUILD.bazel index 5a718b38405..f694f3c0d03 100644 --- a/internal/httprule/BUILD.bazel +++ b/internal/httprule/BUILD.bazel @@ -3,27 +3,33 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "httprule", srcs = [ "compile.go", "parse.go", "types.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule", - deps = ["//utilities:go_default_library"], + deps = ["//utilities"], ) go_test( - name = "go_default_test", + name = "httprule_test", size = "small", srcs = [ "compile_test.go", "parse_test.go", "types_test.go", ], - embed = [":go_default_library"], + embed = [":httprule"], deps = [ - "//utilities:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//utilities", + "@com_github_golang_glog//:glog", ], ) + +alias( + name = "go_default_library", + actual = ":httprule", + visibility = ["//:__subpackages__"], +) diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 34f26313acb..aa7ba0752c2 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -4,21 +4,21 @@ load("@io_bazel_rules_go//proto:compiler.bzl", "go_proto_compiler") package(default_visibility = ["//visibility:private"]) go_library( - name = "go_default_library", + name = "protoc-gen-grpc-gateway_lib", srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway", deps = [ - "//internal/codegenerator:go_default_library", - "//internal/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", - "@com_github_golang_glog//:go_default_library", - "@org_golang_google_protobuf//compiler/protogen:go_default_library", + "//internal/codegenerator", + "//internal/descriptor", + "//protoc-gen-grpc-gateway/internal/gengateway", + "@com_github_golang_glog//:glog", + "@org_golang_google_protobuf//compiler/protogen", ], ) go_binary( name = "protoc-gen-grpc-gateway", - embed = [":go_default_library"], + embed = [":protoc-gen-grpc-gateway_lib"], visibility = ["//visibility:public"], ) @@ -44,8 +44,8 @@ go_proto_compiler( ) go_test( - name = "go_default_test", + name = "protoc-gen-grpc-gateway_test", srcs = ["main_test.go"], - embed = [":go_default_library"], - deps = ["//internal/descriptor:go_default_library"], + embed = [":protoc-gen-grpc-gateway_lib"], + deps = ["//internal/descriptor"], ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 4c9445ab4ce..31ecb812a63 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//protoc-gen-grpc-gateway:__subpackages__"]) go_library( - name = "go_default_library", + name = "gengateway", srcs = [ "doc.go", "generator.go", @@ -11,28 +11,34 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway", deps = [ - "//internal/casing:go_default_library", - "//internal/descriptor:go_default_library", - "//internal/generator:go_default_library", - "//utilities:go_default_library", - "@com_github_golang_glog//:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "//internal/casing", + "//internal/descriptor", + "//internal/generator", + "//utilities", + "@com_github_golang_glog//:glog", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/pluginpb", ], ) go_test( - name = "go_default_test", + name = "gengateway_test", size = "small", srcs = [ "generator_test.go", "template_test.go", ], - embed = [":go_default_library"], + embed = [":gengateway"], deps = [ - "//internal/descriptor:go_default_library", - "//internal/httprule:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/descriptorpb:go_default_library", + "//internal/descriptor", + "//internal/httprule", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/descriptorpb", ], ) + +alias( + name = "go_default_library", + actual = ":gengateway", + visibility = ["//protoc-gen-grpc-gateway:__subpackages__"], +) diff --git a/protoc-gen-openapiv2/BUILD.bazel b/protoc-gen-openapiv2/BUILD.bazel index 90e711b18d9..56afabe05af 100644 --- a/protoc-gen-openapiv2/BUILD.bazel +++ b/protoc-gen-openapiv2/BUILD.bazel @@ -3,28 +3,28 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test") package(default_visibility = ["//visibility:private"]) go_library( - name = "go_default_library", + name = "protoc-gen-openapiv2_lib", srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2", deps = [ - "//internal/codegenerator:go_default_library", - "//internal/descriptor:go_default_library", - "//protoc-gen-openapiv2/internal/genopenapi:go_default_library", - "@com_github_golang_glog//:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "//internal/codegenerator", + "//internal/descriptor", + "//protoc-gen-openapiv2/internal/genopenapi", + "@com_github_golang_glog//:glog", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/pluginpb", ], ) go_binary( name = "protoc-gen-openapiv2", - embed = [":go_default_library"], + embed = [":protoc-gen-openapiv2_lib"], visibility = ["//visibility:public"], ) go_test( - name = "go_default_test", + name = "protoc-gen-openapiv2_test", size = "small", srcs = ["main_test.go"], - embed = [":go_default_library"], + embed = [":protoc-gen-openapiv2_lib"], ) diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index b9c06bc9ec5..7b449d3b85f 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//protoc-gen-openapiv2:__subpackages__"]) go_library( - name = "go_default_library", + name = "genopenapi", srcs = [ "doc.go", "generator.go", @@ -14,47 +14,53 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi", deps = [ - "//internal/casing:go_default_library", - "//internal/descriptor:go_default_library", - "//internal/generator:go_default_library", - "//protoc-gen-openapiv2/options:go_default_library", - "@com_github_golang_glog//:go_default_library", + "//internal/casing", + "//internal/descriptor", + "//internal/generator", + "//protoc-gen-openapiv2/options", + "@com_github_golang_glog//:glog", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", - "@org_golang_google_protobuf//encoding/protojson:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//types/descriptorpb:go_default_library", - "@org_golang_google_protobuf//types/known/structpb:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/known/structpb", + "@org_golang_google_protobuf//types/pluginpb", ], ) go_test( - name = "go_default_test", + name = "genopenapi_test", size = "small", srcs = [ "cycle_test.go", "template_test.go", ], - embed = [":go_default_library"], + embed = [":genopenapi"], deps = [ - "//internal/descriptor:go_default_library", - "//internal/descriptor/openapiconfig:go_default_library", - "//internal/httprule:go_default_library", - "//protoc-gen-openapiv2/options:go_default_library", - "//runtime:go_default_library", - "@com_github_google_go_cmp//cmp:go_default_library", + "//internal/descriptor", + "//internal/descriptor/openapiconfig", + "//internal/httprule", + "//protoc-gen-openapiv2/options", + "//runtime", + "@com_github_google_go_cmp//cmp", "@go_googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//reflect/protodesc:go_default_library", - "@org_golang_google_protobuf//types/descriptorpb:go_default_library", - "@org_golang_google_protobuf//types/known/durationpb:go_default_library", - "@org_golang_google_protobuf//types/known/structpb:go_default_library", - "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", - "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", - "@org_golang_google_protobuf//types/pluginpb:go_default_library", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//reflect/protodesc", + "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/structpb", + "@org_golang_google_protobuf//types/known/timestamppb", + "@org_golang_google_protobuf//types/known/wrapperspb", + "@org_golang_google_protobuf//types/pluginpb", ], ) + +alias( + name = "go_default_library", + actual = ":genopenapi", + visibility = ["//protoc-gen-openapiv2:__subpackages__"], +) diff --git a/protoc-gen-openapiv2/options/BUILD.bazel b/protoc-gen-openapiv2/options/BUILD.bazel index 36369994172..1ae1c003c01 100644 --- a/protoc-gen-openapiv2/options/BUILD.bazel +++ b/protoc-gen-openapiv2/options/BUILD.bazel @@ -13,7 +13,7 @@ filegroup( ) go_library( - name = "go_default_library", + name = "options", embed = [":options_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options", ) @@ -36,3 +36,9 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options", proto = ":options_proto", ) + +alias( + name = "go_default_library", + actual = ":options", + visibility = ["//visibility:public"], +) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 53022768b3e..95f867a5286 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "runtime", srcs = [ "context.go", "convert.go", @@ -24,26 +24,26 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ - "//internal/httprule:go_default_library", - "//utilities:go_default_library", + "//internal/httprule", + "//utilities", "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_grpc//grpclog:go_default_library", - "@org_golang_google_grpc//metadata:go_default_library", - "@org_golang_google_grpc//status:go_default_library", - "@org_golang_google_protobuf//encoding/protojson:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", - "@org_golang_google_protobuf//reflect/protoregistry:go_default_library", - "@org_golang_google_protobuf//types/known/durationpb:go_default_library", - "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", - "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//grpclog", + "@org_golang_google_grpc//metadata", + "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//reflect/protoreflect", + "@org_golang_google_protobuf//reflect/protoregistry", + "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/timestamppb", + "@org_golang_google_protobuf//types/known/wrapperspb", ], ) go_test( - name = "go_default_test", + name = "runtime_test", size = "small", srcs = [ "context_test.go", @@ -60,26 +60,32 @@ go_test( "pattern_test.go", "query_test.go", ], - embed = [":go_default_library"], + embed = [":runtime"], deps = [ - "//runtime/internal/examplepb:go_default_library", - "//utilities:go_default_library", - "@com_github_google_go_cmp//cmp:go_default_library", - "@com_github_google_go_cmp//cmp/cmpopts:go_default_library", + "//runtime/internal/examplepb", + "//utilities", + "@com_github_google_go_cmp//cmp", + "@com_github_google_go_cmp//cmp/cmpopts", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", - "@org_golang_google_grpc//codes:go_default_library", - "@org_golang_google_grpc//metadata:go_default_library", - "@org_golang_google_grpc//status:go_default_library", - "@org_golang_google_protobuf//encoding/protojson:go_default_library", - "@org_golang_google_protobuf//proto:go_default_library", - "@org_golang_google_protobuf//testing/protocmp:go_default_library", - "@org_golang_google_protobuf//types/known/durationpb:go_default_library", - "@org_golang_google_protobuf//types/known/emptypb:go_default_library", - "@org_golang_google_protobuf//types/known/structpb:go_default_library", - "@org_golang_google_protobuf//types/known/timestamppb:go_default_library", - "@org_golang_google_protobuf//types/known/wrapperspb:go_default_library", + "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//metadata", + "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//testing/protocmp", + "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/emptypb", + "@org_golang_google_protobuf//types/known/structpb", + "@org_golang_google_protobuf//types/known/timestamppb", + "@org_golang_google_protobuf//types/known/wrapperspb", ], ) + +alias( + name = "go_default_library", + actual = ":runtime", + visibility = ["//visibility:public"], +) diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel index 7aebca0827b..cfed28fa74f 100644 --- a/runtime/internal/examplepb/BUILD.bazel +++ b/runtime/internal/examplepb/BUILD.bazel @@ -38,7 +38,13 @@ go_proto_library( ) go_library( - name = "go_default_library", + name = "examplepb", embed = [":examplepb_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb", ) + +alias( + name = "go_default_library", + actual = ":examplepb", + visibility = ["//runtime:__subpackages__"], +) diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index 6bb7df467fb..f118ab323ad 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") package(default_visibility = ["//visibility:public"]) go_library( - name = "go_default_library", + name = "utilities", srcs = [ "doc.go", "pattern.go", @@ -14,8 +14,14 @@ go_library( ) go_test( - name = "go_default_test", + name = "utilities_test", size = "small", srcs = ["trie_test.go"], - embed = [":go_default_library"], + embed = [":utilities"], +) + +alias( + name = "go_default_library", + actual = ":utilities", + visibility = ["//visibility:public"], ) From 696384e3afef1536de45d19e27d4e5ed267f028b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 10 May 2021 23:01:51 +0000 Subject: [PATCH 0927/1518] fix(deps): update google.golang.org/genproto commit hash to fb37daa --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4cb3018e830..c1d40dd6468 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76 + google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a google.golang.org/grpc v1.37.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index ae9edf50e9c..f553431f0b6 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76 h1:0pBp6vCQyvmttnWa4c74n/y2U7bAQeIUVyVvZpb7Fyo= -google.golang.org/genproto v0.0.0-20210505142820-a42aa055cf76/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a h1:tzkHckzMzgPr8SC4taTC3AldLr4+oJivSoq1xf/nhsc= +google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4d585fc769a..9f78dde1f45 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0pBp6vCQyvmttnWa4c74n/y2U7bAQeIUVyVvZpb7Fyo=", - version = "v0.0.0-20210505142820-a42aa055cf76", + sum = "h1:tzkHckzMzgPr8SC4taTC3AldLr4+oJivSoq1xf/nhsc=", + version = "v0.0.0-20210510173355-fb37daa5cd7a", ) go_repository( name = "org_golang_google_grpc", From b912036ab2cbbc7cd31ff95c51f0e527475f10bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 22:04:10 -0400 Subject: [PATCH 0928/1518] fix(deps): update module google.golang.org/grpc to v1.37.1 (#2137) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c1d40dd6468..c9e387687a2 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a - google.golang.org/grpc v1.37.0 + google.golang.org/grpc v1.37.1 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index f553431f0b6..300703fd1e5 100644 --- a/go.sum +++ b/go.sum @@ -371,8 +371,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1 h1:ARnQJNWxGyYJpdf/JXscNlQr/uv607ZPU9Z7ogHi+iI= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index 9f78dde1f45..f3cee483b23 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1055,8 +1055,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=", - version = "v1.37.0", + sum = "h1:ARnQJNWxGyYJpdf/JXscNlQr/uv607ZPU9Z7ogHi+iI=", + version = "v1.37.1", ) go_repository( From 7af5b89faa347bffa9e59d226f6c50085c4561db Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 13 May 2021 01:47:40 +0000 Subject: [PATCH 0929/1518] chore(deps): update dependency com_google_protobuf to v3.17.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 092736430ae..8e4f75c7f8b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "7892a35d979304a404400a101c46ce90e85ec9e2a766a86041bb361f626247f5", - strip_prefix = "protobuf-3.16.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.16.0.tar.gz"], + sha256 = "eaba1dd133ac5167e8b08bc3268b2d33c6e9f2dcb14ec0f97f3d3eed9b395863", + strip_prefix = "protobuf-3.17.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.0.tar.gz"], ) http_archive( From d49d2d167efe42c75700998a424f6da58874c6d7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 13 May 2021 21:51:28 +0000 Subject: [PATCH 0930/1518] fix(deps): update google.golang.org/genproto commit hash to bf773b8 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c9e387687a2..b04726313de 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c - google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a + google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 google.golang.org/grpc v1.37.1 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 300703fd1e5..cf673fc32d2 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a h1:tzkHckzMzgPr8SC4taTC3AldLr4+oJivSoq1xf/nhsc= -google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 h1:z+j74wi4yV+P7EtK9gPLGukOk7mFOy9wMQaC0wNb7eY= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f3cee483b23..bf369914fd1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:tzkHckzMzgPr8SC4taTC3AldLr4+oJivSoq1xf/nhsc=", - version = "v0.0.0-20210510173355-fb37daa5cd7a", + sum = "h1:z+j74wi4yV+P7EtK9gPLGukOk7mFOy9wMQaC0wNb7eY=", + version = "v0.0.0-20210513213006-bf773b8c8384", ) go_repository( name = "org_golang_google_grpc", From aa46d2963d008912bfea268707f95c685b46f358 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 14 May 2021 17:08:25 +0000 Subject: [PATCH 0931/1518] fix(deps): update golang.org/x/oauth2 commit hash to f6687ab --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b04726313de..a2c2017c200 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c + golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 google.golang.org/grpc v1.37.1 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index cf673fc32d2..c21fcff2c80 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c h1:SgVl/sCtkicsS7psKkje4H9YtjdEl3xsYh7N+5TDHqY= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index bf369914fd1..c9aaf485353 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:SgVl/sCtkicsS7psKkje4H9YtjdEl3xsYh7N+5TDHqY=", - version = "v0.0.0-20210427180440-81ed05c6b58c", + sum = "h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI=", + version = "v0.0.0-20210514164344-f6687ab2804c", ) go_repository( name = "org_golang_x_sync", From ccd151f046bd8a1ebf73e953c4ecc2648692a71e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 17 May 2021 17:04:02 +0000 Subject: [PATCH 0932/1518] fix(deps): update google.golang.org/genproto commit hash to 5e02360 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a2c2017c200..09363b2fa0c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 + google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a google.golang.org/grpc v1.37.1 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index c21fcff2c80..505e55d5aa9 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 h1:z+j74wi4yV+P7EtK9gPLGukOk7mFOy9wMQaC0wNb7eY= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a h1:VA0wtJaR+W1I11P2f535J7D/YxyvEFMTMvcmyeZ9FBE= +google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c9aaf485353..ddad3b7bf84 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:z+j74wi4yV+P7EtK9gPLGukOk7mFOy9wMQaC0wNb7eY=", - version = "v0.0.0-20210513213006-bf773b8c8384", + sum = "h1:VA0wtJaR+W1I11P2f535J7D/YxyvEFMTMvcmyeZ9FBE=", + version = "v0.0.0-20210517163617-5e0236093d7a", ) go_repository( name = "org_golang_google_grpc", From 55106f11a69edae8826b6c5861af16decab9406b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 18 May 2021 16:39:09 +0000 Subject: [PATCH 0933/1518] fix(deps): update google.golang.org/genproto commit hash to ec7691c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 09363b2fa0c..b1d67d1c7be 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a + google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d google.golang.org/grpc v1.37.1 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 505e55d5aa9..6735aa3a5aa 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a h1:VA0wtJaR+W1I11P2f535J7D/YxyvEFMTMvcmyeZ9FBE= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d h1:bRz6UmsZEz/CzoTjUDp4ZcdguhSWi6CyU299wMQBpZU= +google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ddad3b7bf84..bac3e09a7ea 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:VA0wtJaR+W1I11P2f535J7D/YxyvEFMTMvcmyeZ9FBE=", - version = "v0.0.0-20210517163617-5e0236093d7a", + sum = "h1:bRz6UmsZEz/CzoTjUDp4ZcdguhSWi6CyU299wMQBpZU=", + version = "v0.0.0-20210518161634-ec7691c0a37d", ) go_repository( name = "org_golang_google_grpc", From ea9e1d66bc81377eb9f8fa961d169ce2a0765abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Pokorn=C3=BD?= Date: Wed, 19 May 2021 00:53:22 +0200 Subject: [PATCH 0934/1518] Send trailers only when `TE: trailers` is set (#2124) * Do not send trailers without TE: Using the code from the errors.go * Having tests passing. * branch tests trailers on/off * Fix metadata heades in branch. * REVIEW: Do not initialize client in tests. Also changed in the `testABELookupNotFound` * REVIEW: extract `requestAcceptsTrailers` --- .../internal/integration/integration_test.go | 77 ++++++++++++++----- runtime/errors.go | 8 +- runtime/handler.go | 23 +++++- 3 files changed, 83 insertions(+), 25 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 3bd1c8f14c1..1865dd2cf51 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -47,9 +47,11 @@ func TestEcho(t *testing.T) { testEchoOneof(t, 8088, apiPrefix, "application/json") testEchoOneof1(t, 8088, apiPrefix, "application/json") testEchoOneof2(t, 8088, apiPrefix, "application/json") - testEchoBody(t, 8088, apiPrefix) + testEchoBody(t, 8088, apiPrefix, true) + testEchoBody(t, 8088, apiPrefix, false) // Use SendHeader/SetTrailer without gRPC server https://github.com/grpc-ecosystem/grpc-gateway/issues/517#issuecomment-684625645 - testEchoBody(t, 8089, apiPrefix) + testEchoBody(t, 8089, apiPrefix, true) + testEchoBody(t, 8089, apiPrefix, false) }) } } @@ -278,7 +280,7 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string } } -func testEchoBody(t *testing.T, port int, apiPrefix string) { +func testEchoBody(t *testing.T, port int, apiPrefix string, useTrailers bool) { sent := examplepb.UnannotatedSimpleMessage{Id: "example"} payload, err := marshaler.Marshal(&sent) if err != nil { @@ -286,9 +288,19 @@ func testEchoBody(t *testing.T, port int, apiPrefix string) { } apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo_body", port, apiPrefix) - resp, err := http.Post(apiURL, "", bytes.NewReader(payload)) + + req, err := http.NewRequest("POST", apiURL, bytes.NewReader(payload)) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) + t.Errorf("http.NewRequest() failed with %v; want success", err) + return + } + if useTrailers { + req.Header.Set("TE", "trailers") + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Errorf("client.Do(%v) failed with %v; want success", req, err) return } defer resp.Body.Close() @@ -319,11 +331,18 @@ func testEchoBody(t *testing.T, port int, apiPrefix string) { t.Errorf("Grpc-Metadata-Bar was %q, wanted %q", got, want) } - if got, want := resp.Trailer.Get("Grpc-Trailer-Foo"), "foo2"; got != want { - t.Errorf("Grpc-Trailer-Foo was %q, wanted %q", got, want) + wantedTrailers := map[bool]map[string]string{ + true: { + "Grpc-Trailer-Foo": "foo2", + "Grpc-Trailer-Bar": "bar2", + }, + false: {}, } - if got, want := resp.Trailer.Get("Grpc-Trailer-Bar"), "bar2"; got != want { - t.Errorf("Grpc-Trailer-Bar was %q, wanted %q", got, want) + + for trailer, want := range wantedTrailers[useTrailers] { + if got := resp.Trailer.Get(trailer); got != want { + t.Errorf("%s was %q, wanted %q", trailer, got, want) + } } } @@ -335,7 +354,8 @@ func TestABE(t *testing.T) { testABECreate(t, 8088) testABECreateBody(t, 8088) - testABEBulkCreate(t, 8088) + testABEBulkCreate(t, 8088, true) + testABEBulkCreate(t, 8088, false) testABEBulkCreateWithError(t, 8088) testABELookup(t, 8088) testABELookupNotFound(t, 8088, true) @@ -513,7 +533,7 @@ func testABECreateBody(t *testing.T, port int) { } } -func testABEBulkCreate(t *testing.T, port int) { +func testABEBulkCreate(t *testing.T, port int, useTrailers bool) { count := 0 r, w := io.Pipe() go func(w io.WriteCloser) { @@ -598,11 +618,24 @@ func testABEBulkCreate(t *testing.T, port int) { } }(w) apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/bulk", port) - resp, err := http.Post(apiURL, "application/json", r) + + req, err := http.NewRequest("POST", apiURL, r) if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) + t.Errorf("http.NewRequest() failed with %v; want success", err) + return + } + req.Header.Set("Content-Type", "application/json") + + if useTrailers { + req.Header.Set("TE", "trailers") + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Errorf("client.Do(%v) failed with %v; want success", req, err) return } + defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { @@ -625,11 +658,18 @@ func testABEBulkCreate(t *testing.T, port int) { t.Errorf("Grpc-Metadata-Count was %q, wanted %q", got, want) } - if got, want := resp.Trailer.Get("Grpc-Trailer-Foo"), "foo2"; got != want { - t.Errorf("Grpc-Trailer-Foo was %q, wanted %q", got, want) + wantedTrailers := map[bool]map[string]string{ + true: { + "Grpc-Trailer-Foo": "foo2", + "Grpc-Trailer-Bar": "bar2", + }, + false: {}, } - if got, want := resp.Trailer.Get("Grpc-Trailer-Bar"), "bar2"; got != want { - t.Errorf("Grpc-Trailer-Bar was %q, wanted %q", got, want) + + for trailer, want := range wantedTrailers[useTrailers] { + if got := resp.Trailer.Get(trailer); got != want { + t.Errorf("%s was %q, wanted %q", trailer, got, want) + } } } @@ -994,7 +1034,6 @@ func testABELookupNotFound(t *testing.T, port int, useTrailers bool) { uuid := "not_exist" apiURL = fmt.Sprintf("%s/%s", apiURL, uuid) - client := &http.Client{} req, err := http.NewRequest("GET", apiURL, nil) if err != nil { t.Errorf("http.NewRequest() failed with %v; want success", err) @@ -1005,7 +1044,7 @@ func testABELookupNotFound(t *testing.T, port int, useTrailers bool) { req.Header.Set("TE", "trailers") } - resp, err := client.Do(req) + resp, err := http.DefaultClient.Do(req) if err != nil { t.Errorf("client.Do(%v) failed with %v; want success", req, err) return diff --git a/runtime/errors.go b/runtime/errors.go index 83902994d89..d644c0257a2 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -5,7 +5,6 @@ import ( "errors" "io" "net/http" - "strings" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -131,10 +130,9 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh // is acceptable, as described in Section 4.3, a server SHOULD NOT // generate trailer fields that it believes are necessary for the user // agent to receive. - var wantsTrailers bool + doForwardTrailers := requestAcceptsTrailers(r) - if te := r.Header.Get("TE"); strings.Contains(strings.ToLower(te), "trailers") { - wantsTrailers = true + if doForwardTrailers { handleForwardResponseTrailerHeader(w, md) w.Header().Set("Transfer-Encoding", "chunked") } @@ -149,7 +147,7 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh grpclog.Infof("Failed to write response: %v", err) } - if wantsTrailers { + if doForwardTrailers { handleForwardResponseTrailer(w, md) } } diff --git a/runtime/handler.go b/runtime/handler.go index 2628c2b1c72..3960231b885 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "net/textproto" + "strings" "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/grpc/codes" @@ -137,6 +138,19 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha } handleForwardResponseServerMetadata(w, mux, md) + + // RFC 7230 https://tools.ietf.org/html/rfc7230#section-4.1.2 + // Unless the request includes a TE header field indicating "trailers" + // is acceptable, as described in Section 4.3, a server SHOULD NOT + // generate trailer fields that it believes are necessary for the user + // agent to receive. + doForwardTrailers := requestAcceptsTrailers(req) + + if doForwardTrailers { + handleForwardResponseTrailerHeader(w, md) + w.Header().Set("Transfer-Encoding", "chunked") + } + handleForwardResponseTrailerHeader(w, md) contentType := marshaler.ContentType(resp) @@ -163,7 +177,14 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha grpclog.Infof("Failed to write response: %v", err) } - handleForwardResponseTrailer(w, md) + if doForwardTrailers { + handleForwardResponseTrailer(w, md) + } +} + +func requestAcceptsTrailers(req *http.Request) bool { + te := req.Header.Get("TE") + return strings.Contains(strings.ToLower(te), "trailers") } func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, resp proto.Message, opts []func(context.Context, http.ResponseWriter, proto.Message) error) error { From 0bd92bd060aa09d31b9a7ff48815e3326c57f0b7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 19 May 2021 22:46:02 +0000 Subject: [PATCH 0935/1518] fix(deps): update module google.golang.org/grpc to v1.38.0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b1d67d1c7be..08faf054b0b 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d - google.golang.org/grpc v1.37.1 + google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 6735aa3a5aa..73997c03b5c 100644 --- a/go.sum +++ b/go.sum @@ -371,8 +371,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.1 h1:ARnQJNWxGyYJpdf/JXscNlQr/uv607ZPU9Z7ogHi+iI= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index bac3e09a7ea..21920bfbe64 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1055,8 +1055,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:ARnQJNWxGyYJpdf/JXscNlQr/uv607ZPU9Z7ogHi+iI=", - version = "v1.37.1", + sum = "h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=", + version = "v1.38.0", ) go_repository( From a915248a9d31db7d540f9c7bebe214eaa27a922e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 20 May 2021 16:40:00 +0000 Subject: [PATCH 0936/1518] fix(deps): update google.golang.org/genproto commit hash to 290a1ae --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 08faf054b0b..f933cac290e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d + google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 73997c03b5c..b730ebb8a20 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d h1:bRz6UmsZEz/CzoTjUDp4ZcdguhSWi6CyU299wMQBpZU= -google.golang.org/genproto v0.0.0-20210518161634-ec7691c0a37d/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05 h1:Lb3hmnBVH6xhQyLob0UoHqbUpLJw0i8UXwi2nFTv8xA= +google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 21920bfbe64..d03bd2f552b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:bRz6UmsZEz/CzoTjUDp4ZcdguhSWi6CyU299wMQBpZU=", - version = "v0.0.0-20210518161634-ec7691c0a37d", + sum = "h1:Lb3hmnBVH6xhQyLob0UoHqbUpLJw0i8UXwi2nFTv8xA=", + version = "v0.0.0-20210520160233-290a1ae68a05", ) go_repository( name = "org_golang_google_grpc", From 43c1c3af312a53c17755c03a9800e43f358a6332 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 20 May 2021 21:35:39 +0000 Subject: [PATCH 0937/1518] chore(deps): update bufbuild/buf docker tag to v0.42.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f0f551be37d..fb2e0e93fcf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.4.0 proto_lint: docker: - - image: bufbuild/buf:0.41.0 + - image: bufbuild/buf:0.42.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.41.0 + - image: bufbuild/buf:0.42.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From e9339472cc0c959f3ebcc480658ccd0496b293ac Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 21 May 2021 00:41:44 +0000 Subject: [PATCH 0938/1518] chore(deps): update bufbuild/buf docker tag to v0.42.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fb2e0e93fcf..ccc4b20c407 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.4.0 proto_lint: docker: - - image: bufbuild/buf:0.42.0 + - image: bufbuild/buf:0.42.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.42.0 + - image: bufbuild/buf:0.42.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From c34c08da2a879030582fc013477196fe58bc9186 Mon Sep 17 00:00:00 2001 From: Dmitry Gridnev <33265875+FlymeDllVa@users.noreply.github.com> Date: Fri, 21 May 2021 15:40:17 +0300 Subject: [PATCH 0939/1518] Update HandlePath example url (#2153) --- runtime/mux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/mux.go b/runtime/mux.go index 10fd357b1e3..cfbe2306af1 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -178,7 +178,7 @@ func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { } // HandlePath allows users to configure custom path handlers. -// refer: https://grpc-ecosystem.github.io/grpc-gateway/docs/inject_router.html +// refer: https://grpc-ecosystem.github.io/grpc-gateway/docs/operations/inject_router/ func (s *ServeMux) HandlePath(meth string, pathPattern string, h HandlerFunc) error { compiler, err := httprule.Parse(pathPattern) if err != nil { From 3be9af220f90fe4b58a11aae50f4e2d3710f42e9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 21 May 2021 18:23:00 +0000 Subject: [PATCH 0940/1518] fix(deps): update google.golang.org/genproto commit hash to 5ccab8a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f933cac290e..309c3c7c670 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05 + google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index b730ebb8a20..5eefc9aadab 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05 h1:Lb3hmnBVH6xhQyLob0UoHqbUpLJw0i8UXwi2nFTv8xA= -google.golang.org/genproto v0.0.0-20210520160233-290a1ae68a05/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a h1:FaCiYXNZoBH/gnmVjMAHgOgdmpVVROBYOA+qCOHh6Hc= +google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d03bd2f552b..94ab7f54e71 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Lb3hmnBVH6xhQyLob0UoHqbUpLJw0i8UXwi2nFTv8xA=", - version = "v0.0.0-20210520160233-290a1ae68a05", + sum = "h1:FaCiYXNZoBH/gnmVjMAHgOgdmpVVROBYOA+qCOHh6Hc=", + version = "v0.0.0-20210521181308-5ccab8a35a9a", ) go_repository( name = "org_golang_google_grpc", From aeaf233f9bc5b908371d77a00e35ba0032de657a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 24 May 2021 15:20:17 +0000 Subject: [PATCH 0941/1518] fix(deps): update google.golang.org/genproto commit hash to 3e3a603 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 309c3c7c670..025c4708710 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a + google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 5eefc9aadab..21876fcba39 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a h1:FaCiYXNZoBH/gnmVjMAHgOgdmpVVROBYOA+qCOHh6Hc= -google.golang.org/genproto v0.0.0-20210521181308-5ccab8a35a9a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83 h1:1RnejfrmpVDN9Cq4r1SXBxk74lYLP/w6wOu6NbETf0Y= +google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 94ab7f54e71..6d2692940d8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:FaCiYXNZoBH/gnmVjMAHgOgdmpVVROBYOA+qCOHh6Hc=", - version = "v0.0.0-20210521181308-5ccab8a35a9a", + sum = "h1:1RnejfrmpVDN9Cq4r1SXBxk74lYLP/w6wOu6NbETf0Y=", + version = "v0.0.0-20210524142926-3e3a6030be83", ) go_repository( name = "org_golang_google_grpc", From 941d51bde55a6fd2242aebc21514f221f7fb154f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 24 May 2021 18:24:01 +0000 Subject: [PATCH 0942/1518] fix(deps): update google.golang.org/genproto commit hash to 6691572 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 025c4708710..0d9a500c03f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.5 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83 + google.golang.org/genproto v0.0.0-20210524171403-669157292da3 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 21876fcba39..21c68274710 100644 --- a/go.sum +++ b/go.sum @@ -356,8 +356,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83 h1:1RnejfrmpVDN9Cq4r1SXBxk74lYLP/w6wOu6NbETf0Y= -google.golang.org/genproto v0.0.0-20210524142926-3e3a6030be83/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210524171403-669157292da3 h1:xFyh6GBb+NO1L0xqb978I3sBPQpk6FrKO0jJGRvdj/0= +google.golang.org/genproto v0.0.0-20210524171403-669157292da3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6d2692940d8..0b958ab6614 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:1RnejfrmpVDN9Cq4r1SXBxk74lYLP/w6wOu6NbETf0Y=", - version = "v0.0.0-20210524142926-3e3a6030be83", + sum = "h1:xFyh6GBb+NO1L0xqb978I3sBPQpk6FrKO0jJGRvdj/0=", + version = "v0.0.0-20210524171403-669157292da3", ) go_repository( name = "org_golang_google_grpc", From 0eb2956757f73f71611db3450cd84e564992d730 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 24 May 2021 20:22:31 +0000 Subject: [PATCH 0943/1518] chore(deps): update dependency com_google_protobuf to v3.17.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8e4f75c7f8b..d7699fc8d54 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "eaba1dd133ac5167e8b08bc3268b2d33c6e9f2dcb14ec0f97f3d3eed9b395863", - strip_prefix = "protobuf-3.17.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.0.tar.gz"], + sha256 = "036d66d6eec216160dd898cfb162e9d82c1904627642667cc32b104d407bb411", + strip_prefix = "protobuf-3.17.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.1.tar.gz"], ) http_archive( From 6c45dabb5464e284d2cc85269c65150a6b1a6b71 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 25 May 2021 04:11:38 +0000 Subject: [PATCH 0944/1518] fix(deps): update module github.com/google/go-cmp to v0.5.6 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 0d9a500c03f..100e75f257d 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20210429001901-424d2337a529 github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.5 + github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c google.golang.org/genproto v0.0.0-20210524171403-669157292da3 diff --git a/go.sum b/go.sum index 21c68274710..563080e8670 100644 --- a/go.sum +++ b/go.sum @@ -92,8 +92,9 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/repositories.bzl b/repositories.bzl index 0b958ab6614..d9ef1f58723 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -304,8 +304,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=", - version = "v0.5.5", + sum = "h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=", + version = "v0.5.6", ) go_repository( From aa2ca2e30c36211f73731a07b2fec553b4ffb9ff Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 28 May 2021 22:50:55 +0000 Subject: [PATCH 0945/1518] chore(deps): update bufbuild/buf docker tag to v0.43.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ccc4b20c407..60b97872bf4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.4.0 proto_lint: docker: - - image: bufbuild/buf:0.42.1 + - image: bufbuild/buf:0.43.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.42.1 + - image: bufbuild/buf:0.43.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 9f29462311efebda32dfbba90afe20c05e88fe52 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 31 May 2021 21:00:57 +0000 Subject: [PATCH 0946/1518] chore(deps): update bufbuild/buf docker tag to v0.43.2 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 60b97872bf4..a31466e4a86 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.4.0 proto_lint: docker: - - image: bufbuild/buf:0.43.1 + - image: bufbuild/buf:0.43.2 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.43.1 + - image: bufbuild/buf:0.43.2 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 50752e78bb3bb86c9428312f18b7da66237e48ab Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Jun 2021 17:16:35 +0000 Subject: [PATCH 0947/1518] fix(deps): update google.golang.org/genproto commit hash to 0befbe3 --- go.mod | 2 +- go.sum | 28 ++++++++++++---------------- repositories.bzl | 32 ++++++++++++++++---------------- 3 files changed, 29 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index 100e75f257d..1ec9e59aadb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210524171403-669157292da3 + google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 563080e8670..66c72f40ac1 100644 --- a/go.sum +++ b/go.sum @@ -46,7 +46,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -130,7 +129,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -163,7 +162,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -172,6 +171,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -198,9 +198,8 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4 h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -216,7 +215,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -242,12 +241,10 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4 h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -299,7 +296,7 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -357,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210524171403-669157292da3 h1:xFyh6GBb+NO1L0xqb978I3sBPQpk6FrKO0jJGRvdj/0= -google.golang.org/genproto v0.0.0-20210524171403-669157292da3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2 h1:B3cXl/cusGVj0XfjU8MmdxJIScbkwvlmYyxKL3vz7yo= +google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -371,7 +368,6 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index d9ef1f58723..f32d22a246d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -911,8 +911,8 @@ def go_repositories(): go_repository( name = "com_github_yuin_goldmark", importpath = "github.com/yuin/goldmark", - sum = "h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=", - version = "v1.2.1", + sum = "h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs=", + version = "v1.3.5", ) go_repository( name = "com_google_cloud_go", @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:xFyh6GBb+NO1L0xqb978I3sBPQpk6FrKO0jJGRvdj/0=", - version = "v0.0.0-20210524171403-669157292da3", + sum = "h1:B3cXl/cusGVj0XfjU8MmdxJIScbkwvlmYyxKL3vz7yo=", + version = "v0.0.0-20210601170153-0befbe3492e2", ) go_repository( name = "org_golang_google_grpc", @@ -1093,8 +1093,8 @@ def go_repositories(): go_repository( name = "org_golang_x_lint", importpath = "golang.org/x/lint", - sum = "h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI=", - version = "v0.0.0-20201208152925-83fdc39ff7b5", + sum = "h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=", + version = "v0.0.0-20210508222113-6edffad5e616", ) go_repository( @@ -1106,14 +1106,14 @@ def go_repositories(): go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=", - version = "v0.3.0", + sum = "h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=", + version = "v0.4.2", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:b0LrWgu8+q7z4J+0Y3Umo5q1dL7NXBkKBWkaVkAq17E=", - version = "v0.0.0-20210316092652-d523dce5a7f4", + sum = "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=", + version = "v0.0.0-20210405180319-a5a99cb37ef4", ) go_repository( name = "org_golang_x_oauth2", @@ -1124,14 +1124,14 @@ def go_repositories(): go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=", - version = "v0.0.0-20201020160332-67f06af15bc9", + sum = "h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=", + version = "v0.0.0-20210220032951-036812b2e83c", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:EZ2mChiOa8udjfp6rRmswTbtZN/QzUQp4ptM4rnjHvc=", - version = "v0.0.0-20210320140829-1e4c9ba3b0c4", + sum = "h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=", + version = "v0.0.0-20210510120138-977fb7262007", ) go_repository( name = "org_golang_x_term", @@ -1156,8 +1156,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=", - version = "v0.1.0", + sum = "h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA=", + version = "v0.1.2", ) go_repository( From cf08a41463fcf80e084f2f1ec3ca4303a6f2692b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Jun 2021 14:11:41 +0000 Subject: [PATCH 0948/1518] fix(deps): update google.golang.org/genproto commit hash to f16073e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1ec9e59aadb..c5316e1f4fc 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2 + google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 66c72f40ac1..0880322ce5f 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2 h1:B3cXl/cusGVj0XfjU8MmdxJIScbkwvlmYyxKL3vz7yo= -google.golang.org/genproto v0.0.0-20210601170153-0befbe3492e2/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f32d22a246d..b33bda8b88c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:B3cXl/cusGVj0XfjU8MmdxJIScbkwvlmYyxKL3vz7yo=", - version = "v0.0.0-20210601170153-0befbe3492e2", + sum = "h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=", + version = "v0.0.0-20210602131652-f16073e35f0c", ) go_repository( name = "org_golang_google_grpc", From 64bfdd6b280cfc1889af8aa52a36f8b8badaa14b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Jun 2021 22:05:56 +0000 Subject: [PATCH 0949/1518] chore(deps): update dependency com_google_protobuf to v3.17.2 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index d7699fc8d54..04d813b9954 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "036d66d6eec216160dd898cfb162e9d82c1904627642667cc32b104d407bb411", - strip_prefix = "protobuf-3.17.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.1.tar.gz"], + sha256 = "36f81e03a0702f8f935fffd5a486dac1c0fc6d4bae1cd02c7a32448ad6e63bcb", + strip_prefix = "protobuf-3.17.2", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.2.tar.gz"], ) http_archive( From 3f9cde7e1c631f5a53bbd8ec05660e001343950c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Jun 2021 18:37:12 +0000 Subject: [PATCH 0950/1518] fix(deps): update google.golang.org/genproto commit hash to 58e84a5 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c5316e1f4fc..442650184d9 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c + google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 0880322ce5f..d0c3deb8f57 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf h1:3oVOonZQld/0ddUsMXCnkhem95RnnQEUMZQLJP1s3jQ= +google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b33bda8b88c..24b9b526f57 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=", - version = "v0.0.0-20210602131652-f16073e35f0c", + sum = "h1:3oVOonZQld/0ddUsMXCnkhem95RnnQEUMZQLJP1s3jQ=", + version = "v0.0.0-20210603172842-58e84a565dcf", ) go_repository( name = "org_golang_google_grpc", From 8bf3dd856e9ec2f33be353ea16d469eef928837a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Jun 2021 00:12:55 +0000 Subject: [PATCH 0951/1518] chore(deps): update golang docker tag to v1.16.5 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 29034662793..c256330e5ee 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.4 +FROM golang:1.16.5 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From d5b7ed198a96e792fb48bddec5fc91136e7af802 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Jun 2021 15:15:08 +0000 Subject: [PATCH 0952/1518] fix(deps): update google.golang.org/genproto commit hash to 392c879 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 442650184d9..47d63254d79 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf + google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index d0c3deb8f57..b10f5d81092 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf h1:3oVOonZQld/0ddUsMXCnkhem95RnnQEUMZQLJP1s3jQ= -google.golang.org/genproto v0.0.0-20210603172842-58e84a565dcf/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08 h1:pc16UedxnxXXtGxHCSUhafAoVHQZ0yXl8ZelMH4EETc= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 24b9b526f57..b6cc9e6c513 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:3oVOonZQld/0ddUsMXCnkhem95RnnQEUMZQLJP1s3jQ=", - version = "v0.0.0-20210603172842-58e84a565dcf", + sum = "h1:pc16UedxnxXXtGxHCSUhafAoVHQZ0yXl8ZelMH4EETc=", + version = "v0.0.0-20210604141403-392c879c8b08", ) go_repository( name = "org_golang_google_grpc", From 283c8b5102896c77a24c5688a25d76934e96b876 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Jun 2021 15:01:18 +0000 Subject: [PATCH 0953/1518] fix(deps): update google.golang.org/genproto commit hash to 00d4fb2 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 47d63254d79..34ded921e88 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08 + google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index b10f5d81092..54318cf1472 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08 h1:pc16UedxnxXXtGxHCSUhafAoVHQZ0yXl8ZelMH4EETc= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae h1:2dB4bZ/B7RJdKuvHk3mKTzL2xwrikb+Y/QQy7WdyBPk= +google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b6cc9e6c513..e4d79994f16 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:pc16UedxnxXXtGxHCSUhafAoVHQZ0yXl8ZelMH4EETc=", - version = "v0.0.0-20210604141403-392c879c8b08", + sum = "h1:2dB4bZ/B7RJdKuvHk3mKTzL2xwrikb+Y/QQy7WdyBPk=", + version = "v0.0.0-20210607140030-00d4fb20b1ae", ) go_repository( name = "org_golang_google_grpc", From 8f7d393f1971fe3159c55f1ffea74f5feef43c8e Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Mon, 7 Jun 2021 17:54:24 +0200 Subject: [PATCH 0954/1518] Export LICENSE.txt (#2170) By exporting `LICENSE.txt`, Bazel projects depending on grpc-gateway can easily access its license. --- BUILD | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BUILD b/BUILD index f2d42e92631..90805c1af99 100644 --- a/BUILD +++ b/BUILD @@ -3,6 +3,8 @@ load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier") load("@io_bazel_rules_go//proto:compiler.bzl", "go_proto_compiler") load("@io_bazel_rules_go//proto/wkt:well_known_types.bzl", "PROTO_RUNTIME_DEPS", "WELL_KNOWN_TYPES_APIV2") +exports_files(["LICENSE.txt"]) + buildifier( name = "buildifier", ) From 0601767cadec1432e1faa4eaf93b6aed7914e7c1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Jun 2021 16:09:32 +0000 Subject: [PATCH 0955/1518] chore(deps): update dependency com_google_protobuf to v3.17.3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 04d813b9954..1946ff76c6c 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "36f81e03a0702f8f935fffd5a486dac1c0fc6d4bae1cd02c7a32448ad6e63bcb", - strip_prefix = "protobuf-3.17.2", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.2.tar.gz"], + sha256 = "c6003e1d2e7fefa78a3039f19f383b4f3a61e81be8c19356f85b6461998ad3db", + strip_prefix = "protobuf-3.17.3", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.3.tar.gz"], ) http_archive( From b198f7a59b36a5dfcb1ae58ed1b482e2fa24d79f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Jun 2021 18:42:59 +0000 Subject: [PATCH 0956/1518] fix(deps): update google.golang.org/genproto commit hash to d8f7434 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 34ded921e88..7ef74fa89b6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae + google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 54318cf1472..919811fb977 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae h1:2dB4bZ/B7RJdKuvHk3mKTzL2xwrikb+Y/QQy7WdyBPk= -google.golang.org/genproto v0.0.0-20210607140030-00d4fb20b1ae/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428 h1:ITsjBuiO/w/WrKEnQQNVf771ttSDxvlH3cfVloxqKXA= +google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e4d79994f16..5b7d988a51c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:2dB4bZ/B7RJdKuvHk3mKTzL2xwrikb+Y/QQy7WdyBPk=", - version = "v0.0.0-20210607140030-00d4fb20b1ae", + sum = "h1:ITsjBuiO/w/WrKEnQQNVf771ttSDxvlH3cfVloxqKXA=", + version = "v0.0.0-20210608175058-d8f7434f6428", ) go_repository( name = "org_golang_google_grpc", From a1902721a191140680ff3168354f8005382fa6d9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Jun 2021 22:01:42 +0000 Subject: [PATCH 0957/1518] fix(deps): update google.golang.org/genproto commit hash to b6d2f5b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7ef74fa89b6..c5f7331b162 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428 + google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 919811fb977..c6defdcfc62 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428 h1:ITsjBuiO/w/WrKEnQQNVf771ttSDxvlH3cfVloxqKXA= -google.golang.org/genproto v0.0.0-20210608175058-d8f7434f6428/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d h1:KzwjikDymrEmYYbdyfievTwjEeGlu+OM6oiKBkF3Jfg= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5b7d988a51c..56fad9b31a6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ITsjBuiO/w/WrKEnQQNVf771ttSDxvlH3cfVloxqKXA=", - version = "v0.0.0-20210608175058-d8f7434f6428", + sum = "h1:KzwjikDymrEmYYbdyfievTwjEeGlu+OM6oiKBkF3Jfg=", + version = "v0.0.0-20210608205507-b6d2f5bf0d7d", ) go_repository( name = "org_golang_google_grpc", From dca405c2636cb6315ff4e6a169d2cf2249a17fdc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 10 Jun 2021 14:48:11 +0000 Subject: [PATCH 0958/1518] fix(deps): update google.golang.org/genproto commit hash to e7a9b78 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c5f7331b162..8ea4f5e635b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d + google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index c6defdcfc62..fd401ad9580 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d h1:KzwjikDymrEmYYbdyfievTwjEeGlu+OM6oiKBkF3Jfg= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4 h1:Kgs5nmbQVuUAug2PXQ27hu9MSCv8uJTnrmxZj9Lj5lc= +google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 56fad9b31a6..7a4941a77d2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:KzwjikDymrEmYYbdyfievTwjEeGlu+OM6oiKBkF3Jfg=", - version = "v0.0.0-20210608205507-b6d2f5bf0d7d", + sum = "h1:Kgs5nmbQVuUAug2PXQ27hu9MSCv8uJTnrmxZj9Lj5lc=", + version = "v0.0.0-20210610141715-e7a9b787a5a4", ) go_repository( name = "org_golang_google_grpc", From b57d070895e96c6abdef372f4da5b75975ced4d9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Jun 2021 15:45:31 +0000 Subject: [PATCH 0959/1518] fix(deps): update google.golang.org/genproto commit hash to 798beca --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8ea4f5e635b..8d944a95e2c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4 + google.golang.org/genproto v0.0.0-20210611144927-798beca9d670 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index fd401ad9580..59ee53aff4e 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4 h1:Kgs5nmbQVuUAug2PXQ27hu9MSCv8uJTnrmxZj9Lj5lc= -google.golang.org/genproto v0.0.0-20210610141715-e7a9b787a5a4/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210611144927-798beca9d670 h1:M9c2dapWGIISuWaz5vr/RUk5Qn2Hs8DZ9CJb5aH266Q= +google.golang.org/genproto v0.0.0-20210611144927-798beca9d670/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7a4941a77d2..f86e2dbf5ed 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Kgs5nmbQVuUAug2PXQ27hu9MSCv8uJTnrmxZj9Lj5lc=", - version = "v0.0.0-20210610141715-e7a9b787a5a4", + sum = "h1:M9c2dapWGIISuWaz5vr/RUk5Qn2Hs8DZ9CJb5aH266Q=", + version = "v0.0.0-20210611144927-798beca9d670", ) go_repository( name = "org_golang_google_grpc", From 71a4aeccb2d70130a84864c927599abe67d679cc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 14 Jun 2021 19:24:09 +0000 Subject: [PATCH 0960/1518] fix(deps): update google.golang.org/genproto commit hash to 5b3b54c --- go.mod | 2 +- go.sum | 6 +++--- repositories.bzl | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 8d944a95e2c..2b4d7001b07 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c - google.golang.org/genproto v0.0.0-20210611144927-798beca9d670 + google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 59ee53aff4e..356c01bbc10 100644 --- a/go.sum +++ b/go.sum @@ -296,7 +296,7 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210611144927-798beca9d670 h1:M9c2dapWGIISuWaz5vr/RUk5Qn2Hs8DZ9CJb5aH266Q= -google.golang.org/genproto v0.0.0-20210611144927-798beca9d670/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159 h1:7TIh9IZzwv/Gxqf+uYm45KzZTG1BlkZzb3yOa9GqgVE= +google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f86e2dbf5ed..126e0d8fc91 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:M9c2dapWGIISuWaz5vr/RUk5Qn2Hs8DZ9CJb5aH266Q=", - version = "v0.0.0-20210611144927-798beca9d670", + sum = "h1:7TIh9IZzwv/Gxqf+uYm45KzZTG1BlkZzb3yOa9GqgVE=", + version = "v0.0.0-20210614182748-5b3b54cad159", ) go_repository( name = "org_golang_google_grpc", @@ -1156,8 +1156,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA=", - version = "v0.1.2", + sum = "h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8=", + version = "v0.1.3", ) go_repository( From 6ca1f93930d1fb9b3c2351d1f35255f39f155988 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 15 Jun 2021 19:53:11 +0000 Subject: [PATCH 0961/1518] fix(deps): update golang.org/x/oauth2 commit hash to d040287 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2b4d7001b07..f3087489b96 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c + golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index 356c01bbc10..27fff0a79c1 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= +golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 126e0d8fc91..c8e3ddcfd86 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI=", - version = "v0.0.0-20210514164344-f6687ab2804c", + sum = "h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns=", + version = "v0.0.0-20210615190721-d04028783cf1", ) go_repository( name = "org_golang_x_sync", From cb8ae9ea33e6eaaf4e98a6cb7490fadd063799ed Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 17 Jun 2021 18:52:47 +0000 Subject: [PATCH 0962/1518] fix(deps): update google.golang.org/genproto commit hash to b9e0b31 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f3087489b96..961240cf66f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 - google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159 + google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 27fff0a79c1..fdac47c7b99 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159 h1:7TIh9IZzwv/Gxqf+uYm45KzZTG1BlkZzb3yOa9GqgVE= -google.golang.org/genproto v0.0.0-20210614182748-5b3b54cad159/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus= +google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c8e3ddcfd86..8f7ec7374e2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:7TIh9IZzwv/Gxqf+uYm45KzZTG1BlkZzb3yOa9GqgVE=", - version = "v0.0.0-20210614182748-5b3b54cad159", + sum = "h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus=", + version = "v0.0.0-20210617175327-b9e0b3197ced", ) go_repository( name = "org_golang_google_grpc", From 8c750382d75742913aa981c0e1b4098246bfc53e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 17 Jun 2021 19:57:47 +0000 Subject: [PATCH 0963/1518] chore(deps): update rules_proto commit hash to c0b62f2 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 1946ff76c6c..e580195f65b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "9fc210a34f0f9e7cc31598d109b5d069ef44911a82f507d5a88716db171615a8", - strip_prefix = "rules_proto-f7a30f6f80006b591fa7c437fe5a951eb10bcbcf", + sha256 = "e0cab008a9cdc2400a1d6572167bf9c5afc72e19ee2b862d18581051efab42c9", + strip_prefix = "rules_proto-c0b62f2f46c85c16cb3b5e9e921f0d00e3101934", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/f7a30f6f80006b591fa7c437fe5a951eb10bcbcf.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/f7a30f6f80006b591fa7c437fe5a951eb10bcbcf.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/c0b62f2f46c85c16cb3b5e9e921f0d00e3101934.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/c0b62f2f46c85c16cb3b5e9e921f0d00e3101934.tar.gz", ], ) From f238f782038e2f05e1c238868b07db477fdf3782 Mon Sep 17 00:00:00 2001 From: 0daryo <38380837+0daryo@users.noreply.github.com> Date: Tue, 22 Jun 2021 10:46:54 +0900 Subject: [PATCH 0964/1518] Add http path defined in proto to annotated context (#2195) * fix: http path option in annotator * fix: generated * fix: template test * fix: name WithPattern to WithHTTPPathPattern * refactor: descriptions * refactor: mutate context directly --- .../internal/helloworld/helloworld.pb.gw.go | 40 +++---- .../examplepb/a_bit_of_everything.pb.gw.go | 112 +++++++++--------- .../proto/examplepb/echo_service.pb.gw.go | 32 ++--- .../proto/examplepb/flow_combination.pb.gw.go | 76 ++++++------ .../generate_unbound_methods.pb.gw.go | 12 +- .../examplepb/non_standard_names.pb.gw.go | 8 +- .../proto/examplepb/openapi_merge_a.pb.gw.go | 16 +-- .../proto/examplepb/openapi_merge_b.pb.gw.go | 8 +- .../examplepb/response_body_service.pb.gw.go | 14 +-- .../internal/proto/examplepb/stream.pb.gw.go | 8 +- .../unannotated_echo_service.pb.gw.go | 16 +-- .../proto/examplepb/use_go_template.pb.gw.go | 8 +- .../proto/examplepb/wrappers.pb.gw.go | 44 +++---- .../unannotated_echo_service.pb.gw.go | 28 ++--- .../internal/gengateway/template.go | 8 ++ .../internal/gengateway/template_test.go | 7 +- runtime/context.go | 44 ++++++- runtime/context_test.go | 31 +++-- 18 files changed, 284 insertions(+), 228 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 8dccd650f28..a9de3f25404 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -743,7 +743,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -766,7 +766,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -789,7 +789,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -812,7 +812,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -835,7 +835,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -858,7 +858,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -881,7 +881,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -904,7 +904,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -927,7 +927,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -950,7 +950,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1012,7 +1012,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1032,7 +1032,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1052,7 +1052,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1072,7 +1072,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1092,7 +1092,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1112,7 +1112,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1132,7 +1132,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1152,7 +1152,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1172,7 +1172,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1192,7 +1192,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index d7f11e68ca0..c886e3f8274 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2351,7 +2351,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2374,7 +2374,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2397,7 +2397,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2420,7 +2420,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2443,7 +2443,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2466,7 +2466,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2489,7 +2489,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2512,7 +2512,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2535,7 +2535,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2558,7 +2558,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2581,7 +2581,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2604,7 +2604,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2627,7 +2627,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2650,7 +2650,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2673,7 +2673,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2696,7 +2696,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2719,7 +2719,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2742,7 +2742,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2765,7 +2765,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2788,7 +2788,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2811,7 +2811,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2834,7 +2834,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2857,7 +2857,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2880,7 +2880,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2903,7 +2903,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2926,7 +2926,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2949,7 +2949,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2981,7 +2981,7 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3043,7 +3043,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3063,7 +3063,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3083,7 +3083,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3103,7 +3103,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3123,7 +3123,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3143,7 +3143,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3163,7 +3163,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3183,7 +3183,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3203,7 +3203,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3223,7 +3223,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3243,7 +3243,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3263,7 +3263,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3283,7 +3283,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3303,7 +3303,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3323,7 +3323,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3343,7 +3343,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3363,7 +3363,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3383,7 +3383,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3403,7 +3403,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3423,7 +3423,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3443,7 +3443,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3463,7 +3463,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3483,7 +3483,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3503,7 +3503,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3523,7 +3523,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3543,7 +3543,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3563,7 +3563,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3736,7 +3736,7 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 7208f20b55d..b406e8355af 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -649,7 +649,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -672,7 +672,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -695,7 +695,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -718,7 +718,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -741,7 +741,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -764,7 +764,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -787,7 +787,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -810,7 +810,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -872,7 +872,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -892,7 +892,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -912,7 +912,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -932,7 +932,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -952,7 +952,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -972,7 +972,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -992,7 +992,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1012,7 +1012,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index ee9e1158fdc..c5ebd97ec58 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1463,7 +1463,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1507,7 +1507,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1530,7 +1530,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1553,7 +1553,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1576,7 +1576,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1599,7 +1599,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1622,7 +1622,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1645,7 +1645,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1668,7 +1668,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1691,7 +1691,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1714,7 +1714,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1737,7 +1737,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1876,7 +1876,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1896,7 +1896,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", runtime.WithHTTPPathPattern("/rpc/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1916,7 +1916,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", runtime.WithHTTPPathPattern("/stream/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1936,7 +1936,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", runtime.WithHTTPPathPattern("/stream/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1956,7 +1956,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1976,7 +1976,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1996,7 +1996,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2016,7 +2016,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2036,7 +2036,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2056,7 +2056,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2076,7 +2076,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2096,7 +2096,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2116,7 +2116,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2136,7 +2136,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2156,7 +2156,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2176,7 +2176,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2196,7 +2196,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2216,7 +2216,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2236,7 +2236,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2256,7 +2256,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2276,7 +2276,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2296,7 +2296,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2316,7 +2316,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2336,7 +2336,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2356,7 +2356,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2376,7 +2376,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go index 092073963d5..6f9a3127109 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go @@ -145,7 +145,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -168,7 +168,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -191,7 +191,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -253,7 +253,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -273,7 +273,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -293,7 +293,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 50fae892a29..5895118af26 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -175,7 +175,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -198,7 +198,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -260,7 +260,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -280,7 +280,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go index f0d18addafa..88e1cfaf461 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -179,7 +179,7 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -202,7 +202,7 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -234,7 +234,7 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -257,7 +257,7 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -319,7 +319,7 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -339,7 +339,7 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -412,7 +412,7 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -432,7 +432,7 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go index ff1431529fd..a9d82480425 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -111,7 +111,7 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -134,7 +134,7 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -196,7 +196,7 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -216,7 +216,7 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 95f549313c0..e64358861f0 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -233,7 +233,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -256,7 +256,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -279,7 +279,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -348,7 +348,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -368,7 +368,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -388,7 +388,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -408,7 +408,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", runtime.WithHTTPPathPattern("/responsebody/stream/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index c8db72b7384..e920c207c5a 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -242,7 +242,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/bulk")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -262,7 +262,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -282,7 +282,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -302,7 +302,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", runtime.WithHTTPPathPattern("/v1/example/download")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 8670a575b47..d0299af3c16 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -273,7 +273,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -296,7 +296,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -319,7 +319,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -342,7 +342,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -404,7 +404,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -424,7 +424,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -444,7 +444,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -464,7 +464,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 1eaccc6201f..8b1f23855a4 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -111,7 +111,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -134,7 +134,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -196,7 +196,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -216,7 +216,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index f482d4eea1c..70142211250 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -419,7 +419,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -442,7 +442,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -465,7 +465,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -488,7 +488,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -511,7 +511,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -534,7 +534,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -557,7 +557,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -580,7 +580,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -603,7 +603,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -626,7 +626,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -649,7 +649,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -711,7 +711,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -731,7 +731,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -751,7 +751,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -771,7 +771,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -791,7 +791,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -811,7 +811,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -831,7 +831,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -851,7 +851,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -871,7 +871,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -891,7 +891,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -911,7 +911,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index d05cbaef6b4..f086e9b4e20 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -584,7 +584,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -607,7 +607,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -630,7 +630,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -653,7 +653,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -676,7 +676,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -699,7 +699,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -722,7 +722,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -784,7 +784,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -804,7 +804,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -824,7 +824,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -844,7 +844,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -864,7 +864,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -884,7 +884,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -904,7 +904,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 028761ffa5a..4f9ca65b157 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -600,7 +600,11 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + {{- if $b.PathTmpl }} + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + {{- else -}} rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -676,7 +680,11 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, {{- end }} defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + {{- if $b.PathTmpl }} + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + {{- else -}} rctx, err := runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 48ed03239e9..aaa92cfd940 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -185,8 +185,9 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { { HTTPMethod: "POST", PathTmpl: httprule.Template{ - Version: 1, - OpCodes: []int{0, 0}, + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1", }, PathParams: []descriptor.Parameter{ { @@ -245,7 +246,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `rctx, err := runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo")`; !strings.Contains(got, want) { + if want := `rctx, err := runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo", runtime.WithHTTPPathPattern("/v1"))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } diff --git a/runtime/context.go b/runtime/context.go index f42243a0061..fb57b9366ea 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -41,7 +41,18 @@ var ( DefaultContextTimeout = 0 * time.Second ) -type rpcMethodKey struct{} +type ( + rpcMethodKey struct{} + httpPathPatternKey struct{} + + AnnotateContextOption func(ctx context.Context) context.Context +) + +func WithHTTPPathPattern(pattern string) AnnotateContextOption { + return func(ctx context.Context) context.Context { + return withHTTPPathPattern(ctx, pattern) + } +} func decodeBinHeader(v string) ([]byte, error) { if len(v)%4 == 0 { @@ -58,8 +69,8 @@ At a minimum, the RemoteAddr is included in the fashion of "X-Forwarded-For", except that the forwarded destination is not another HTTP service but rather a gRPC service. */ -func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, error) { - ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName) +func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName, options...) if err != nil { return nil, err } @@ -72,8 +83,8 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM // AnnotateIncomingContext adds context information such as metadata from the request. // Attach metadata as incoming context. -func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, error) { - ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName) +func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName, options...) if err != nil { return nil, err } @@ -84,8 +95,11 @@ func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Reque return metadata.NewIncomingContext(ctx, md), nil } -func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, metadata.MD, error) { +func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string, options ...AnnotateContextOption) (context.Context, metadata.MD, error) { ctx = withRPCMethod(ctx, rpcMethodName) + for _, o := range options { + ctx = o(ctx) + } var pairs []string timeout := DefaultContextTimeout if tm := req.Header.Get(metadataGrpcTimeout); tm != "" { @@ -311,3 +325,21 @@ func RPCMethod(ctx context.Context) (string, bool) { func withRPCMethod(ctx context.Context, rpcMethodName string) context.Context { return context.WithValue(ctx, rpcMethodKey{}, rpcMethodName) } + +// HTTPPathPattern returns the HTTP path pattern string relating to the HTTP handler, if one exists. +// The format of the returned string is defined by the google.api.http path template type. +func HTTPPathPattern(ctx context.Context) (string, bool) { + m := ctx.Value(httpPathPatternKey{}) + if m == nil { + return "", false + } + ms, ok := m.(string) + if !ok { + return "", false + } + return ms, true +} + +func withHTTPPathPattern(ctx context.Context, httpPathPattern string) context.Context { + return context.WithValue(ctx, httpPathPatternKey{}, httpPathPattern) +} diff --git a/runtime/context_test.go b/runtime/context_test.go index f9ff345a829..c53b6f00d3d 100644 --- a/runtime/context_test.go +++ b/runtime/context_test.go @@ -19,12 +19,13 @@ const ( func TestAnnotateContext_WorksWithEmpty(t *testing.T) { ctx := context.Background() expectedRPCName := "/example.Example/Example" - request, err := http.NewRequest("GET", "http://www.example.com", nil) + expectedHTTPPathPattern := "/v1" + request, err := http.NewRequest("GET", "http://www.example.com/v1", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } request.Header.Add("Some-Irrelevant-Header", "some value") - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern)) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -38,7 +39,8 @@ func TestAnnotateContext_WorksWithEmpty(t *testing.T) { func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { ctx := context.Background() expectedRPCName := "/example.Example/Example" - request, err := http.NewRequest("GET", "http://www.example.com", nil) + expectedHTTPPathPattern := "/v1" + request, err := http.NewRequest("GET", "http://www.example.com/v1", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } @@ -47,7 +49,7 @@ func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { request.Header.Add("Grpc-Metadata-Foo-BAZ", "Value2") request.Header.Add("Grpc-Metadata-foo-bAz", "Value3") request.Header.Add("Authorization", "Token 1234567890") - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern)) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -73,6 +75,12 @@ func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { } else if m != expectedRPCName { t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) } + + if m, ok := runtime.HTTPPathPattern(annotated); !ok { + t.Errorf("runtime.HTTPPathPattern(annotated) failed with no value; want %s", expectedHTTPPathPattern) + } else if m != expectedHTTPPathPattern { + t.Errorf("runtime.HTTPPathPattern(annotated) failed with %s; want %s", m, expectedHTTPPathPattern) + } } func TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) { @@ -249,12 +257,13 @@ func TestAnnotateContext_SupportsCustomAnnotators(t *testing.T) { func TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) { ctx := context.Background() expectedRPCName := "/example.Example/Example" - request, err := http.NewRequest("GET", "http://www.example.com", nil) + expectedHTTPPathPattern := "/v1" + request, err := http.NewRequest("GET", "http://www.example.com/v1", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } request.Header.Add("Some-Irrelevant-Header", "some value") - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern)) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -273,7 +282,8 @@ func TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) { func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { ctx := context.Background() expectedRPCName := "/example.Example/Example" - request, err := http.NewRequest("GET", "http://www.example.com", nil) + expectedHTTPPathPattern := "/v1" + request, err := http.NewRequest("GET", "http://www.example.com/v1", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } @@ -282,7 +292,7 @@ func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { request.Header.Add("Grpc-Metadata-Foo-BAZ", "Value2") request.Header.Add("Grpc-Metadata-foo-bAz", "Value3") request.Header.Add("Authorization", "Token 1234567890") - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName, runtime.WithHTTPPathPattern(expectedHTTPPathPattern)) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -308,6 +318,11 @@ func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { } else if m != expectedRPCName { t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) } + if m, ok := runtime.HTTPPathPattern(annotated); !ok { + t.Errorf("runtime.HTTPPathPattern(annotated) failed with no value; want %s", expectedHTTPPathPattern) + } else if m != expectedHTTPPathPattern { + t.Errorf("runtime.HTTPPathPattern(annotated) failed with %s; want %s", m, expectedHTTPPathPattern) + } } func TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) { From ac171153339e611c9f2122997c378d3a2c308c49 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 21 Jun 2021 22:04:26 -0400 Subject: [PATCH 0965/1518] Bump gorelease base to v2.5.0 (#2197) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a31466e4a86..08baf61aa84 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -122,7 +122,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.4.0 + - run: gorelease -base=v2.5.0 proto_lint: docker: - image: bufbuild/buf:0.43.2 From 36c4fa0c750765176b2dd1036724341864feec6b Mon Sep 17 00:00:00 2001 From: Derrick Laird Date: Mon, 21 Jun 2021 20:04:35 -0600 Subject: [PATCH 0966/1518] Update template.go (#2196) Fix typo and method name in comment. --- protoc-gen-grpc-gateway/internal/gengateway/template.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 4f9ca65b157..578bb3541f0 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -28,7 +28,7 @@ type binding struct { AllowPatchFeature bool } -// GetBodyFieldPath returns the binding body's fieldpath. +// GetBodyFieldPath returns the binding body's field path. func (b binding) GetBodyFieldPath() string { if b.Body != nil && len(b.Body.FieldPath) != 0 { return b.Body.FieldPath.String() @@ -36,7 +36,7 @@ func (b binding) GetBodyFieldPath() string { return "*" } -// GetBodyFieldPath returns the binding body's struct field name. +// GetBodyFieldStructName returns the binding body's struct field name. func (b binding) GetBodyFieldStructName() (string, error) { if b.Body != nil && len(b.Body.FieldPath) != 0 { return casing.Camel(b.Body.FieldPath.String()), nil From 7bee021ea1e6c3a62138683159a9242ffb180565 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Jun 2021 17:22:36 +0000 Subject: [PATCH 0967/1518] fix(deps): update golang.org/x/oauth2 commit hash to 14747e6 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 961240cf66f..416d4f3cfee 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 + golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690 google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index fdac47c7b99..c51ce6a2011 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= -golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690 h1:CumsZJtggBHMuGYO/Pnf0VisrfI80IpCueqWTDj+jXM= +golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 8f7ec7374e2..8efd71665ee 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns=", - version = "v0.0.0-20210615190721-d04028783cf1", + sum = "h1:CumsZJtggBHMuGYO/Pnf0VisrfI80IpCueqWTDj+jXM=", + version = "v0.0.0-20210622165204-14747e66f690", ) go_repository( name = "org_golang_x_sync", From e8f809a196247e79db56c95d9ca87cee8663abb3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Jun 2021 20:09:53 +0000 Subject: [PATCH 0968/1518] fix(deps): update golang.org/x/oauth2 commit hash to bce0382 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 416d4f3cfee..0ea409b94cc 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690 + golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22 google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index c51ce6a2011..c6266aee35d 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690 h1:CumsZJtggBHMuGYO/Pnf0VisrfI80IpCueqWTDj+jXM= -golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22 h1:YgVHL+41eV49pteYu9PQEn7BhKUnN2Eq6TOBoy+3kao= +golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 8efd71665ee..d9835351982 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:CumsZJtggBHMuGYO/Pnf0VisrfI80IpCueqWTDj+jXM=", - version = "v0.0.0-20210622165204-14747e66f690", + sum = "h1:YgVHL+41eV49pteYu9PQEn7BhKUnN2Eq6TOBoy+3kao=", + version = "v0.0.0-20210622190553-bce0382f6c22", ) go_repository( name = "org_golang_x_sync", From cd07ded1fb8680346f7b55ca8dc158f102a1dd71 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Jun 2021 22:21:36 +0000 Subject: [PATCH 0969/1518] fix(deps): update golang.org/x/oauth2 commit hash to a8dc77f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0ea409b94cc..98dfd25f47a 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22 + golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 diff --git a/go.sum b/go.sum index c6266aee35d..7bb2791c54d 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22 h1:YgVHL+41eV49pteYu9PQEn7BhKUnN2Eq6TOBoy+3kao= -golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 h1:pERGha6IgvMUdN6oJbwjZTt1ai5/O855Qmv1Bsc0v18= +golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index d9835351982..b5dc62c25c8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:YgVHL+41eV49pteYu9PQEn7BhKUnN2Eq6TOBoy+3kao=", - version = "v0.0.0-20210622190553-bce0382f6c22", + sum = "h1:pERGha6IgvMUdN6oJbwjZTt1ai5/O855Qmv1Bsc0v18=", + version = "v0.0.0-20210622215436-a8dc77f794b6", ) go_repository( name = "org_golang_x_sync", From 36cf0683f12631d0b6aafec45831f1e58b8ef0b0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 24 Jun 2021 18:58:29 +0000 Subject: [PATCH 0970/1518] fix(deps): update google.golang.org/genproto commit hash to c5cf324 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 98dfd25f47a..679328ca73f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 - google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced + google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index 7bb2791c54d..c0ad6f04e38 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus= -google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a h1:b5Bhxmy6Tppar7Yl4J6c6xF33YSBhkm2FtV9/ZQuBkQ= +google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b5dc62c25c8..b7354e09bbb 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus=", - version = "v0.0.0-20210617175327-b9e0b3197ced", + sum = "h1:b5Bhxmy6Tppar7Yl4J6c6xF33YSBhkm2FtV9/ZQuBkQ=", + version = "v0.0.0-20210624174822-c5cf32407d0a", ) go_repository( name = "org_golang_google_grpc", From d48bfd8c7c15df6cf2c14bb3059e526e70eb5ba1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 24 Jun 2021 20:58:57 +0000 Subject: [PATCH 0971/1518] fix(deps): update google.golang.org/genproto commit hash to 8bfb893 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 679328ca73f..62186a08df2 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 - google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a + google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.26.0 ) diff --git a/go.sum b/go.sum index c0ad6f04e38..42f5f810a52 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a h1:b5Bhxmy6Tppar7Yl4J6c6xF33YSBhkm2FtV9/ZQuBkQ= -google.golang.org/genproto v0.0.0-20210624174822-c5cf32407d0a/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 h1:R1r5J0u6Cx+RNl/6mezTw6oA14cmKC96FeUwL6A9bd4= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b7354e09bbb..fc9c389e214 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:b5Bhxmy6Tppar7Yl4J6c6xF33YSBhkm2FtV9/ZQuBkQ=", - version = "v0.0.0-20210624174822-c5cf32407d0a", + sum = "h1:R1r5J0u6Cx+RNl/6mezTw6oA14cmKC96FeUwL6A9bd4=", + version = "v0.0.0-20210624195500-8bfb893ecb84", ) go_repository( name = "org_golang_google_grpc", From 192884bdc6324b3f04934f58e49c108297194f7f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Jun 2021 23:35:03 +0000 Subject: [PATCH 0972/1518] fix(deps): update module google.golang.org/protobuf to v1.27.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 62186a08df2..290a6d4f13d 100644 --- a/go.mod +++ b/go.mod @@ -12,5 +12,5 @@ require ( golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 google.golang.org/grpc v1.38.0 - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.0 ) diff --git a/go.sum b/go.sum index 42f5f810a52..8a7d07ffee6 100644 --- a/go.sum +++ b/go.sum @@ -381,8 +381,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0 h1:KhgSLlr/moiqjv0qUsSnLvdUL7NH7PHW8aZGn7Jpjko= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index fc9c389e214..535119a89a8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1068,8 +1068,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=", - version = "v1.26.0", + sum = "h1:KhgSLlr/moiqjv0qUsSnLvdUL7NH7PHW8aZGn7Jpjko=", + version = "v1.27.0", ) go_repository( name = "org_golang_x_crypto", From 19ec7178f3ef8d42347cb8aeaf14f2f122dceb68 Mon Sep 17 00:00:00 2001 From: Shivam Rathore Date: Mon, 28 Jun 2021 04:01:19 +0530 Subject: [PATCH 0973/1518] fix: adding root '/' path in custom route handler (#2202) --- internal/httprule/compile.go | 4 ++++ internal/httprule/compile_test.go | 7 +++++++ internal/httprule/parse.go | 4 ++++ internal/httprule/parse_test.go | 18 ++++++++++++++---- runtime/mux_test.go | 6 ++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/internal/httprule/compile.go b/internal/httprule/compile.go index 162319d3f3b..3cd9372959d 100644 --- a/internal/httprule/compile.go +++ b/internal/httprule/compile.go @@ -96,6 +96,10 @@ func (t template) Compile() Template { if op.str == "" { ops = append(ops, op.num) } else { + // eof segment literal represents the "/" path pattern + if op.str == eof { + op.str = "" + } if _, ok := consts[op.str]; !ok { consts[op.str] = len(pool) pool = append(pool, op.str) diff --git a/internal/httprule/compile_test.go b/internal/httprule/compile_test.go index 2996b99e613..31c38dde045 100644 --- a/internal/httprule/compile_test.go +++ b/internal/httprule/compile_test.go @@ -21,6 +21,13 @@ func TestCompile(t *testing.T) { fields []string }{ {}, + { + segs: []segment{ + literal(eof), + }, + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{""}, + }, { segs: []segment{ wildcard{}, diff --git a/internal/httprule/parse.go b/internal/httprule/parse.go index 7c7140f1948..5edd784e62a 100644 --- a/internal/httprule/parse.go +++ b/internal/httprule/parse.go @@ -118,6 +118,10 @@ type parser struct { // topLevelSegments is the target of this parser. func (p *parser) topLevelSegments() ([]segment, error) { + if _, err := p.accept(typeEOF); err == nil { + p.tokens = p.tokens[:0] + return []segment{literal(eof)}, nil + } segs, err := p.segments() if err != nil { return nil, err diff --git a/internal/httprule/parse_test.go b/internal/httprule/parse_test.go index df525dc580e..dd1dd7907a0 100644 --- a/internal/httprule/parse_test.go +++ b/internal/httprule/parse_test.go @@ -140,6 +140,20 @@ func TestParseSegments(t *testing.T) { tokens []string want []segment }{ + { + tokens: []string{eof}, + want: []segment{ + literal(eof), + }, + }, + { + // Note: this case will never arise as tokenize() will never return such a sequence of tokens + // and even if it does it will be treated as [eof] + tokens: []string{eof, "v1", eof}, + want: []segment{ + literal(eof), + }, + }, { tokens: []string{"v1", eof}, want: []segment{ @@ -308,10 +322,6 @@ func TestParseSegmentsWithErrors(t *testing.T) { // invalid percent-encoding tokens: []string{"a%2z", eof}, }, - { - // empty segments - tokens: []string{eof}, - }, { // unterminated variable tokens: []string{"{", "name", eof}, diff --git a/runtime/mux_test.go b/runtime/mux_test.go index d5aa7c759b0..13a6aff7fee 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -418,6 +418,12 @@ var defaultRouteMatcherTests = []struct { path string valid bool }{ + { + "Test route /", + "GET", + "/", + true, + }, { "Simple Endpoint", "GET", From 4d1d2e642e5ad56c989e7145e0063d02525cd2f5 Mon Sep 17 00:00:00 2001 From: 0daryo <38380837+0daryo@users.noreply.github.com> Date: Mon, 28 Jun 2021 11:42:38 +0900 Subject: [PATCH 0974/1518] Add document of extracting http path from context (#2201) * add md * refactor: document * refactor: microservice document * fix: nav_order * refactor: description of extracting http path pattern --- docs/docs/operations/annotated_context.md | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 docs/docs/operations/annotated_context.md diff --git a/docs/docs/operations/annotated_context.md b/docs/docs/operations/annotated_context.md new file mode 100644 index 00000000000..1eaaddac0b6 --- /dev/null +++ b/docs/docs/operations/annotated_context.md @@ -0,0 +1,52 @@ +--- +layout: default +title: Extracting the HTTP path pattern for a request +nav_order: 4 +parent: Operations +--- + +# Extracting the HTTP path pattern for a request + +It is often interesting to know what [HTTP path pattern](https://github.com/googleapis/googleapis/blob/869d32e2f0af2748ab530646053b23a2b80d9ca5/google/api/http.proto#L61-L87) was matched for a specific request, for example for metrics. This article explains how to extract the HTTP path pattern from the request context. + +## Get HTTP Path pattern +1. Define the HTTP path in the proto annotation. For example: + +```proto +syntax = "proto3"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; + +import "google/api/annotations.proto"; + +service LoginService { + rpc Login (LoginRequest) returns (LoginReply) { + option (google.api.http) = { + post: "/v1/example/login" + body: "*" + }; + } +} + +message LoginRequest {} + +message LoginReply {} +``` + +2. At runtime, get the HTTP path pattern from the annotated context, for example using the `WithMetadata` function. +You can pass data to your backend by adding them to the gRPC metadata or push them to a metrics server. + +```go +mux := runtime.NewServeMux( + runtime.WithMetadata(func(ctx context.Context, r *http.Request) metadata.MD { + md := make(map[string]string) + if method, ok := runtime.RPCMethod(ctx); ok { + md["method"] = method // /grpc.gateway.examples.internal.proto.examplepb.LoginService/Login + } + if pattern, ok := runtime.HTTPPathPattern(ctx); ok { + md["pattern"] = pattern // /v1/example/login + } + return metadata.New(md) + }), +) +``` \ No newline at end of file From 30407d09b3c89dd394be8c5f442421bee54ef029 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Jun 2021 19:01:04 +0000 Subject: [PATCH 0975/1518] fix(deps): update golang.org/x/oauth2 commit hash to a41e5a7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 290a6d4f13d..08b3bdf5e58 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 + golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.27.0 diff --git a/go.sum b/go.sum index 8a7d07ffee6..c1c081f5248 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 h1:pERGha6IgvMUdN6oJbwjZTt1ai5/O855Qmv1Bsc0v18= -golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 535119a89a8..94e9962a865 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1118,8 +1118,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:pERGha6IgvMUdN6oJbwjZTt1ai5/O855Qmv1Bsc0v18=", - version = "v0.0.0-20210622215436-a8dc77f794b6", + sum = "h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8=", + version = "v0.0.0-20210628180205-a41e5a781914", ) go_repository( name = "org_golang_x_sync", From 4bb7a7e2aae2e86f7a95b29288ab1232597b35a7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Jun 2021 20:25:41 +0000 Subject: [PATCH 0976/1518] fix(deps): update module google.golang.org/protobuf to v1.27.1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 08b3bdf5e58..9b58ea42b9c 100644 --- a/go.mod +++ b/go.mod @@ -12,5 +12,5 @@ require ( golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 google.golang.org/grpc v1.38.0 - google.golang.org/protobuf v1.27.0 + google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c1c081f5248..a8ab8879e10 100644 --- a/go.sum +++ b/go.sum @@ -382,8 +382,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0 h1:KhgSLlr/moiqjv0qUsSnLvdUL7NH7PHW8aZGn7Jpjko= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index 94e9962a865..67594a01a9d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1068,8 +1068,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:KhgSLlr/moiqjv0qUsSnLvdUL7NH7PHW8aZGn7Jpjko=", - version = "v1.27.0", + sum = "h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=", + version = "v1.27.1", ) go_repository( name = "org_golang_x_crypto", From 12c7503837de717b8b7689878c5eb8133a97510c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 29 Jun 2021 14:55:21 +0000 Subject: [PATCH 0977/1518] fix(deps): update google.golang.org/genproto commit hash to 364e77e --- go.mod | 2 +- go.sum | 6 +++--- repositories.bzl | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 9b58ea42b9c..79bf4fa51c1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 + google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index a8ab8879e10..aa43ddd3458 100644 --- a/go.sum +++ b/go.sum @@ -296,7 +296,7 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 h1:R1r5J0u6Cx+RNl/6mezTw6oA14cmKC96FeUwL6A9bd4= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d h1:CVnSaMZbVB1sj+XNAi+b9GOCEbf2jlCiGbDW6QpA4B0= +google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 67594a01a9d..420381517bc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:R1r5J0u6Cx+RNl/6mezTw6oA14cmKC96FeUwL6A9bd4=", - version = "v0.0.0-20210624195500-8bfb893ecb84", + sum = "h1:CVnSaMZbVB1sj+XNAi+b9GOCEbf2jlCiGbDW6QpA4B0=", + version = "v0.0.0-20210629135825-364e77e5a69d", ) go_repository( name = "org_golang_google_grpc", @@ -1156,8 +1156,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8=", - version = "v0.1.3", + sum = "h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs=", + version = "v0.1.4", ) go_repository( From 38531e0e989f74ef6c9f566a2109dd2babd9c144 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 29 Jun 2021 20:06:05 +0000 Subject: [PATCH 0978/1518] fix(deps): update google.golang.org/genproto commit hash to 84d6f60 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 79bf4fa51c1..cccd2459a64 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d + google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151 google.golang.org/grpc v1.38.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index aa43ddd3458..4d954ddee65 100644 --- a/go.sum +++ b/go.sum @@ -354,8 +354,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d h1:CVnSaMZbVB1sj+XNAi+b9GOCEbf2jlCiGbDW6QpA4B0= -google.golang.org/genproto v0.0.0-20210629135825-364e77e5a69d/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151 h1:H/uPzsolsGjhl3CVT6Wb7bK+mf+hmkEvUVu+FBKyNlc= +google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 420381517bc..b153f1f4906 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1049,8 +1049,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:CVnSaMZbVB1sj+XNAi+b9GOCEbf2jlCiGbDW6QpA4B0=", - version = "v0.0.0-20210629135825-364e77e5a69d", + sum = "h1:H/uPzsolsGjhl3CVT6Wb7bK+mf+hmkEvUVu+FBKyNlc=", + version = "v0.0.0-20210629200056-84d6f6074151", ) go_repository( name = "org_golang_google_grpc", From 83d0cf2246d64b4b73fe8160a4a2083c4b7787a9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 29 Jun 2021 20:49:13 +0000 Subject: [PATCH 0979/1518] fix(deps): update module google.golang.org/grpc to v1.39.0 --- go.mod | 2 +- go.sum | 16 ++++++++++++++-- repositories.bzl | 30 ++++++++++++++++++++++-------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index cccd2459a64..66b7b6ff4f1 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151 - google.golang.org/grpc v1.38.0 + google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 4d954ddee65..2dcb70910aa 100644 --- a/go.sum +++ b/go.sum @@ -42,11 +42,14 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -79,6 +82,7 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -107,6 +111,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -135,6 +141,7 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -348,6 +355,7 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -368,8 +376,11 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -388,8 +399,9 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/repositories.bzl b/repositories.bzl index b153f1f4906..fb93ffa6877 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -132,6 +132,13 @@ def go_repositories(): sum = "h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=", version = "v0.0.0-20201120205902-5459f2c99403", ) + go_repository( + name = "com_github_cncf_xds_go", + importpath = "github.com/cncf/xds/go", + sum = "h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c=", + version = "v0.0.0-20210312221358-fbca930ec8ed", + ) + go_repository( name = "com_github_coreos_bbolt", importpath = "github.com/coreos/bbolt", @@ -191,8 +198,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:QyzYnTnPE15SQyUeqU6qLbWxMkwyAyu+vGksa0b7j00=", - version = "v0.9.9-0.20210217033140-668b12f5399d", + sum = "h1:dulLQAYQFYtG5MTplgNGHWuV2D+OBD+Z8lmDBmbLg+s=", + version = "v0.9.9-0.20210512163311-63b5d3c536b0", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -378,8 +385,8 @@ def go_repositories(): go_repository( name = "com_github_grpc_ecosystem_grpc_gateway", importpath = "github.com/grpc-ecosystem/grpc-gateway", - sum = "h1:bM6ZAFZmc/wPFaRDi0d5L7hGEZEx/2u+Tmr2evNHDiI=", - version = "v1.9.0", + sum = "h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=", + version = "v1.16.0", ) go_repository( name = "com_github_hashicorp_consul_api", @@ -994,8 +1001,8 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=", - version = "v2.2.2", + sum = "h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=", + version = "v2.2.3", ) go_repository( name = "in_gopkg_yaml_v3", @@ -1016,6 +1023,13 @@ def go_repositories(): sum = "h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=", version = "v0.22.4", ) + go_repository( + name = "io_opentelemetry_go_proto_otlp", + importpath = "go.opentelemetry.io/proto/otlp", + sum = "h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=", + version = "v0.7.0", + ) + go_repository( name = "io_rsc_binaryregexp", importpath = "rsc.io/binaryregexp", @@ -1055,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=", - version = "v1.38.0", + sum = "h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI=", + version = "v1.39.0", ) go_repository( From c6787fca427e5f78e87767d83f774aae02280a89 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 30 Jun 2021 20:08:03 +0000 Subject: [PATCH 0980/1518] fix(deps): update google.golang.org/genproto commit hash to d20f26d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 66b7b6ff4f1..cdf7bb37997 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151 + google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 2dcb70910aa..37a1220775f 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151 h1:H/uPzsolsGjhl3CVT6Wb7bK+mf+hmkEvUVu+FBKyNlc= -google.golang.org/genproto v0.0.0-20210629200056-84d6f6074151/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79 h1:s1jFTXJryg4a1mew7xv03VZD8N9XjxFhk1o4Js4WvPQ= +google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fb93ffa6877..5c391e2921e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:H/uPzsolsGjhl3CVT6Wb7bK+mf+hmkEvUVu+FBKyNlc=", - version = "v0.0.0-20210629200056-84d6f6074151", + sum = "h1:s1jFTXJryg4a1mew7xv03VZD8N9XjxFhk1o4Js4WvPQ=", + version = "v0.0.0-20210630183607-d20f26d13c79", ) go_repository( name = "org_golang_google_grpc", From d9d28ab164d9f7093fb2386136c25962f5a3e7b2 Mon Sep 17 00:00:00 2001 From: Philipp Wollermann Date: Thu, 1 Jul 2021 03:48:29 +0200 Subject: [PATCH 0981/1518] Remove ubuntu1604 from presubmit.yml (#2214) Ubuntu 16.04 is end-of-life, we're going to remove it from Bazel CI. If you like you can add testing on `ubuntu2004` platform which we also support. --- .bazelci/presubmit.yml | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index a0da2fcc0bc..58e328a0198 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -4,29 +4,19 @@ platforms: build_flags: - "--build_tag_filters=-nolinux" build_targets: - - "..." + - "//..." test_flags: - "--features=race" - "--test_tag_filters=-nolinux" test_targets: - - "..." - ubuntu1604: - build_flags: - - "--build_tag_filters=-nolinux" - build_targets: - - "..." - test_flags: - - "--features=race" - - "--test_tag_filters=-nolinux" - test_targets: - - "..." + - "//..." macos: build_flags: - "--build_tag_filters=-nomacos" build_targets: - - "..." + - "//..." test_flags: - "--features=race" - "--test_tag_filters=-nomacos" test_targets: - - "..." + - "//..." From 4ec349e7d2901ebe162b8711e762a24d26a1e4d1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 1 Jul 2021 06:57:13 +0000 Subject: [PATCH 0982/1518] chore(deps): update rules_proto commit hash to af64819 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index e580195f65b..8d6b5999bd1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "e0cab008a9cdc2400a1d6572167bf9c5afc72e19ee2b862d18581051efab42c9", - strip_prefix = "rules_proto-c0b62f2f46c85c16cb3b5e9e921f0d00e3101934", + sha256 = "bc12122a5ae4b517fa423ea03a8d82ea6352d5127ea48cb54bc324e8ab78493c", + strip_prefix = "rules_proto-af6481970a34554c6942d993e194a9aed7987780", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/c0b62f2f46c85c16cb3b5e9e921f0d00e3101934.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/c0b62f2f46c85c16cb3b5e9e921f0d00e3101934.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/af6481970a34554c6942d993e194a9aed7987780.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/af6481970a34554c6942d993e194a9aed7987780.tar.gz", ], ) From b102f1d0732ad87679f5db5fc4feda607ba269f6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 1 Jul 2021 13:59:30 +0000 Subject: [PATCH 0983/1518] fix(deps): update google.golang.org/genproto commit hash to 6b8dcf5 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cdf7bb37997..d5dbf6870ac 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79 + google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 37a1220775f..e1df394d303 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79 h1:s1jFTXJryg4a1mew7xv03VZD8N9XjxFhk1o4Js4WvPQ= -google.golang.org/genproto v0.0.0-20210630183607-d20f26d13c79/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95 h1:xyRjacsGcaSoZ2fTcaLCSzh2JEceLLOT4X8k32Q0xAQ= +google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5c391e2921e..8daace3ceb9 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:s1jFTXJryg4a1mew7xv03VZD8N9XjxFhk1o4Js4WvPQ=", - version = "v0.0.0-20210630183607-d20f26d13c79", + sum = "h1:xyRjacsGcaSoZ2fTcaLCSzh2JEceLLOT4X8k32Q0xAQ=", + version = "v0.0.0-20210701133433-6b8dcf568a95", ) go_repository( name = "org_golang_google_grpc", From bf1ad781ff075bc96f5bb6f622ec101278d43821 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 1 Jul 2021 19:52:15 +0000 Subject: [PATCH 0984/1518] fix(deps): update google.golang.org/genproto commit hash to 46259e6 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d5dbf6870ac..eb45d9729b7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95 + google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index e1df394d303..290c5531875 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95 h1:xyRjacsGcaSoZ2fTcaLCSzh2JEceLLOT4X8k32Q0xAQ= -google.golang.org/genproto v0.0.0-20210701133433-6b8dcf568a95/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9 h1:HBPuvo39L0DgfVn9eHR3ki/RjZoUFWa+em77e7KFDfs= +google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8daace3ceb9..e69ecc9f486 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:xyRjacsGcaSoZ2fTcaLCSzh2JEceLLOT4X8k32Q0xAQ=", - version = "v0.0.0-20210701133433-6b8dcf568a95", + sum = "h1:HBPuvo39L0DgfVn9eHR3ki/RjZoUFWa+em77e7KFDfs=", + version = "v0.0.0-20210701191553-46259e63a0a9", ) go_repository( name = "org_golang_google_grpc", From 42c494ffc589302ad9f70deb400faf72c3010de4 Mon Sep 17 00:00:00 2001 From: Ken Brownfield <12721455+irridia@users.noreply.github.com> Date: Fri, 2 Jul 2021 14:32:29 -0700 Subject: [PATCH 0985/1518] Add optional_nullable option (default: off) to mark Proto3 Optional fields as x-nullable (#2215) * feat: Add an option (default: off) to protoc-gen-openapiv2 to mark Proto3 Optional fields as x-nullable * PR feedback: Naming change; use Proto3Optional getter; missing comma in defs.bzl * Update documentation on x-nullable; change variable name given its future as v3 nullable --- internal/descriptor/registry.go | 13 +++++++++++++ protoc-gen-openapiv2/defs.bzl | 10 ++++++++++ .../internal/genopenapi/template.go | 5 +++++ .../internal/genopenapi/types.go | 16 +++++++++++----- protoc-gen-openapiv2/main.go | 2 ++ 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index e6f78482ef1..3a35dea6229 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -87,6 +87,9 @@ type Registry struct { // has no HttpRule annotation. warnOnUnboundMethods bool + // proto3OptionalNullable specifies whether Proto3 Optional fields should be marked as x-nullable. + proto3OptionalNullable bool + // fileOptions is a mapping of file name to additional OpenAPI file options fileOptions map[string]*options.Swagger @@ -568,6 +571,16 @@ func (r *Registry) GetOmitPackageDoc() bool { return r.omitPackageDoc } +// SetProto3OptionalNullable set proto3OtionalNullable +func (r *Registry) SetProto3OptionalNullable(proto3OtionalNullable bool) { + r.proto3OptionalNullable = proto3OtionalNullable +} + +// GetProto3OptionalNullable returns proto3OtionalNullable +func (r *Registry) GetProto3OptionalNullable() bool { + return r.proto3OptionalNullable +} + // RegisterOpenAPIOptions registers OpenAPI options func (r *Registry) RegisterOpenAPIOptions(opts *openapiconfig.OpenAPIOptions) error { if opts == nil { diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index ea3226762a5..43596664d55 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -62,6 +62,7 @@ def _run_proto_gen_openapi( disable_default_errors, enums_as_ints, simple_operation_ids, + proto3_optional_nullable, openapi_configuration, generate_unbound_methods): args = actions.args() @@ -107,6 +108,9 @@ def _run_proto_gen_openapi( if enums_as_ints: args.add("--openapiv2_opt", "enums_as_ints=true") + if proto3_optional_nullable: + args.add("--openapiv2_opt", "proto3_optional_nullable=true") + args.add("--openapiv2_opt", "repeated_path_param_separator=%s" % repeated_path_param_separator) proto_file_infos = _direct_source_infos(proto_info) @@ -201,6 +205,7 @@ def _proto_gen_openapi_impl(ctx): disable_default_errors = ctx.attr.disable_default_errors, enums_as_ints = ctx.attr.enums_as_ints, simple_operation_ids = ctx.attr.simple_operation_ids, + proto3_optional_nullable = ctx.attr.proto3_optional_nullable, openapi_configuration = ctx.file.openapi_configuration, generate_unbound_methods = ctx.attr.generate_unbound_methods, ), @@ -278,6 +283,11 @@ protoc_gen_openapiv2 = rule( doc = "whether to remove the service prefix in the operationID" + " generation. Can introduce duplicate operationIDs, use with caution.", ), + "proto3_optional_nullable": attr.bool( + default = False, + mandatory = False, + doc = "whether Proto3 Optional fields should be marked as x-nullable", + ), "openapi_configuration": attr.label( allow_single_file = True, mandatory = False, diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 0ac0d64495c..ff0ef171d18 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -410,6 +410,7 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry schema.MaxProperties = protoSchema.MaxProperties schema.MinProperties = protoSchema.MinProperties schema.Required = protoSchema.Required + schema.XNullable = protoSchema.XNullable if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { schema.schemaCore = protoSchema.schemaCore } @@ -581,6 +582,10 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o updateSwaggerObjectFromFieldBehavior(&ret, j, f) } + if reg.GetProto3OptionalNullable() && f.GetProto3Optional() { + ret.XNullable = true + } + return ret } diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 505cfc686e8..861c4c73338 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -150,12 +150,18 @@ type openapiParameterObject struct { } // core part of schema, which is common to itemsObject and schemaObject. -// http://swagger.io/specification/#itemsObject +// http://swagger.io/specification/v2/#itemsObject +// The OAS3 spec (https://swagger.io/specification/#schemaObject) defines the +// `nullable` field as part of a Schema Object. This behavior has been +// "back-ported" to OAS2 as the Specification Extension `x-nullable`, and is +// supported by generation tools such as swagger-codegen and go-swagger. +// For protoc-gen-openapiv3, we'd want to add `nullable` instead. type schemaCore struct { - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Ref string `json:"$ref,omitempty"` - Example json.RawMessage `json:"example,omitempty"` + Type string `json:"type,omitempty"` + Format string `json:"format,omitempty"` + Ref string `json:"$ref,omitempty"` + XNullable bool `json:"x-nullable,omitempty"` + Example json.RawMessage `json:"example,omitempty"` Items *openapiItemsObject `json:"items,omitempty"` diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index b05af0e879d..ff104d9f842 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -31,6 +31,7 @@ var ( disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") + proto3OptionalNullable = flag.Bool("proto3_optional_nullable", false, "whether Proto3 Optional fields should be marked as x-nullable") openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") @@ -89,6 +90,7 @@ func main() { reg.SetEnumsAsInts(*enumsAsInts) reg.SetDisableDefaultErrors(*disableDefaultErrors) reg.SetSimpleOperationIDs(*simpleOperationIDs) + reg.SetProto3OptionalNullable(*proto3OptionalNullable) reg.SetGenerateUnboundMethods(*generateUnboundMethods) reg.SetRecursiveDepth(*recursiveDepth) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { From 3a3607abb28a37be93fe1ecf6a3c9f5cd58177b9 Mon Sep 17 00:00:00 2001 From: Amit Zarfati Date: Wed, 7 Jul 2021 10:20:04 +0300 Subject: [PATCH 0986/1518] Now supporting a scenario where proto_library is being used withour srcs. (#2219) --- protoc-gen-openapiv2/defs.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 43596664d55..36864a280bf 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -27,12 +27,12 @@ def _direct_source_infos(proto_info, provided_sources = []): source_root = proto_info.proto_source_root if "." == source_root: - return [struct(file = src, import_path = src.path) for src in proto_info.direct_sources] + return [struct(file = src, import_path = src.path) for src in proto_info.check_deps_sources.to_list()] offset = len(source_root) + 1 # + '/'. infos = [] - for src in proto_info.direct_sources: + for src in proto_info.check_deps_sources.to_list(): # TODO(yannic): Remove this hack when we drop support for Bazel < 1.0. local_offset = offset if src.root.path and not source_root.startswith(src.root.path): From 4112a4657d06c8e82bf22f2f2abdb555b6317ef5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 7 Jul 2021 17:51:12 +0000 Subject: [PATCH 0987/1518] fix(deps): update google.golang.org/genproto commit hash to 8c882eb --- go.mod | 2 +- go.sum | 6 ++---- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index eb45d9729b7..6cdf600862e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9 + google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 290c5531875..4ab9d2680ad 100644 --- a/go.sum +++ b/go.sum @@ -48,7 +48,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -362,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9 h1:HBPuvo39L0DgfVn9eHR3ki/RjZoUFWa+em77e7KFDfs= -google.golang.org/genproto v0.0.0-20210701191553-46259e63a0a9/go.mod h1:yiaVoXHpRzHGyxV3o4DktVWY4mSUErTKaeEOq6C3t3U= +google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba h1:7ajVqfUjhvVuXCb+sdXdKsOD53caRpfMofvihWF1314= +google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -378,7 +377,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index e69ecc9f486..7c37c24f2f6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:HBPuvo39L0DgfVn9eHR3ki/RjZoUFWa+em77e7KFDfs=", - version = "v0.0.0-20210701191553-46259e63a0a9", + sum = "h1:7ajVqfUjhvVuXCb+sdXdKsOD53caRpfMofvihWF1314=", + version = "v0.0.0-20210707164411-8c882eb9abba", ) go_repository( name = "org_golang_google_grpc", From dce2498e6a6be9f294ead0a79de0b0a69781b936 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 8 Jul 2021 14:59:20 +0000 Subject: [PATCH 0988/1518] fix(deps): update google.golang.org/genproto commit hash to e76da96 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6cdf600862e..50e01194c4e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba + google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 4ab9d2680ad..c50b52297a1 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba h1:7ajVqfUjhvVuXCb+sdXdKsOD53caRpfMofvihWF1314= -google.golang.org/genproto v0.0.0-20210707164411-8c882eb9abba/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f h1:khwpF3oSk7GIab/7DDMDyE8cPQEO6FAfOcWHIRAhO20= +google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7c37c24f2f6..5bcd7150cb1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:7ajVqfUjhvVuXCb+sdXdKsOD53caRpfMofvihWF1314=", - version = "v0.0.0-20210707164411-8c882eb9abba", + sum = "h1:khwpF3oSk7GIab/7DDMDyE8cPQEO6FAfOcWHIRAhO20=", + version = "v0.0.0-20210708141623-e76da96a951f", ) go_repository( name = "org_golang_google_grpc", From 23f619f32f8f72a7c8cdfde5d092d0b51182f4c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 8 Jul 2021 20:26:06 +0000 Subject: [PATCH 0989/1518] chore(deps): update bufbuild/buf docker tag to v0.44.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 08baf61aa84..85b2f8c645d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.43.2 + - image: bufbuild/buf:0.44.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.43.2 + - image: bufbuild/buf:0.44.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From c94081aaefd7099bb31e147d88dac19ca1a827c1 Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 9 Jul 2021 05:41:18 +0300 Subject: [PATCH 0990/1518] Support first message coming from server in bi-di stream * No need to block on first handleSend * Fixed tests Co-authored-by: Pavel Pushkarev --- .../internal/proto/examplepb/flow_combination.pb.gw.go | 9 --------- examples/internal/proto/examplepb/stream.pb.gw.go | 9 --------- protoc-gen-grpc-gateway/internal/gengateway/template.go | 9 --------- 3 files changed, 27 deletions(-) diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index c5ebd97ec58..41c89bd195c 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -134,15 +134,6 @@ func request_FlowCombination_StreamEmptyStream_0(ctx context.Context, marshaler } return nil } - if err := handleSend(); err != nil { - if cerr := stream.CloseSend(); cerr != nil { - grpclog.Infof("Failed to terminate client stream: %v", cerr) - } - if err == io.EOF { - return stream, metadata, nil - } - return nil, metadata, err - } go func() { for { if err := handleSend(); err != nil { diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index e920c207c5a..a760748726d 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -118,15 +118,6 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar } return nil } - if err := handleSend(); err != nil { - if cerr := stream.CloseSend(); cerr != nil { - grpclog.Infof("Failed to terminate client stream: %v", cerr) - } - if err == io.EOF { - return stream, metadata, nil - } - return nil, metadata, err - } go func() { for { if err := handleSend(); err != nil { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 578bb3541f0..85606fbd514 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -435,15 +435,6 @@ var ( } return nil } - if err := handleSend(); err != nil { - if cerr := stream.CloseSend(); cerr != nil { - grpclog.Infof("Failed to terminate client stream: %v", cerr) - } - if err == io.EOF { - return stream, metadata, nil - } - return nil, metadata, err - } go func() { for { if err := handleSend(); err != nil { From 4798dbf39ba9f1fcb450c566687e8e54e5e340bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 12 Jul 2021 17:44:14 +0000 Subject: [PATCH 0991/1518] fix(deps): update google.golang.org/genproto commit hash to 5404628 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 50e01194c4e..68639e95bdb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f + google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c50b52297a1..3e7f79e6665 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f h1:khwpF3oSk7GIab/7DDMDyE8cPQEO6FAfOcWHIRAhO20= -google.golang.org/genproto v0.0.0-20210708141623-e76da96a951f/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 h1:C+heNsV69Z0EjfRnhU7mg6EX5zz5l7x7hhTil+Ayj8g= +google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5bcd7150cb1..f784e991030 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:khwpF3oSk7GIab/7DDMDyE8cPQEO6FAfOcWHIRAhO20=", - version = "v0.0.0-20210708141623-e76da96a951f", + sum = "h1:C+heNsV69Z0EjfRnhU7mg6EX5zz5l7x7hhTil+Ayj8g=", + version = "v0.0.0-20210712171009-5404628d0f46", ) go_repository( name = "org_golang_google_grpc", From c94279387c19d00b53d11c90401d953c28f12e2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 20:58:53 -0400 Subject: [PATCH 0992/1518] chore(deps): bump addressable from 2.7.0 to 2.8.0 in /docs (#2230) Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.7.0 to 2.8.0. - [Release notes](https://github.com/sporkmonger/addressable/releases) - [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md) - [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.7.0...addressable-2.8.0) --- updated-dependencies: - dependency-name: addressable dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index f62f18197ee..f0c7fe77d2d 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -7,7 +7,7 @@ GEM minitest (~> 5.1) tzinfo (~> 1.1) zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.7.0) + addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) coffee-script (2.4.1) coffee-script-source From af390fc09aecbd4c60f0cbffe824e47504a924e6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 13 Jul 2021 01:41:43 +0000 Subject: [PATCH 0993/1518] fix(deps): update google.golang.org/genproto commit hash to d411969 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 68639e95bdb..e4e548bb350 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 + google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 3e7f79e6665..1d8427b8c2d 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46 h1:C+heNsV69Z0EjfRnhU7mg6EX5zz5l7x7hhTil+Ayj8g= -google.golang.org/genproto v0.0.0-20210712171009-5404628d0f46/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a h1:89EorDSnBRFywcvGsJvpxw2IsiDMI+DeM7iZOaunfHs= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f784e991030..1fe40e54c0b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:C+heNsV69Z0EjfRnhU7mg6EX5zz5l7x7hhTil+Ayj8g=", - version = "v0.0.0-20210712171009-5404628d0f46", + sum = "h1:89EorDSnBRFywcvGsJvpxw2IsiDMI+DeM7iZOaunfHs=", + version = "v0.0.0-20210713002101-d411969a0d9a", ) go_repository( name = "org_golang_google_grpc", From 98dac8d6c79e812e3d4b24acbf280a130e8a396f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 13 Jul 2021 02:39:14 +0000 Subject: [PATCH 0994/1518] chore(deps): update golang docker tag to v1.16.6 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c256330e5ee..dcee3550299 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.5 +FROM golang:1.16.6 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From b538ec0d12e4a74252fcbff37c12add42310f232 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 14 Jul 2021 03:55:49 +0000 Subject: [PATCH 0995/1518] fix(deps): update google.golang.org/genproto commit hash to 0440280 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e4e548bb350..83050d84f60 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a + google.golang.org/genproto v0.0.0-20210714021259-044028024a4f google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 1d8427b8c2d..aba59911b89 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a h1:89EorDSnBRFywcvGsJvpxw2IsiDMI+DeM7iZOaunfHs= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210714021259-044028024a4f h1:UUQZ0BNnLgSI3v/uqq0hjdxwctexOPwnvKA5AA/Aze4= +google.golang.org/genproto v0.0.0-20210714021259-044028024a4f/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1fe40e54c0b..543324c302b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:89EorDSnBRFywcvGsJvpxw2IsiDMI+DeM7iZOaunfHs=", - version = "v0.0.0-20210713002101-d411969a0d9a", + sum = "h1:UUQZ0BNnLgSI3v/uqq0hjdxwctexOPwnvKA5AA/Aze4=", + version = "v0.0.0-20210714021259-044028024a4f", ) go_repository( name = "org_golang_google_grpc", From 5eda782402c24e14000c50ea59c19e05a5bffee6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 15 Jul 2021 15:14:40 +0000 Subject: [PATCH 0996/1518] fix(deps): update google.golang.org/genproto commit hash to 324b959 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 83050d84f60..ba29c07acc3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210714021259-044028024a4f + google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index aba59911b89..5db26fede47 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210714021259-044028024a4f h1:UUQZ0BNnLgSI3v/uqq0hjdxwctexOPwnvKA5AA/Aze4= -google.golang.org/genproto v0.0.0-20210714021259-044028024a4f/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22 h1:jcklN/lATdu/CSsNEOLujIgfvY7IMQpRq6HNaPZuVIc= +google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 543324c302b..2475556760a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:UUQZ0BNnLgSI3v/uqq0hjdxwctexOPwnvKA5AA/Aze4=", - version = "v0.0.0-20210714021259-044028024a4f", + sum = "h1:jcklN/lATdu/CSsNEOLujIgfvY7IMQpRq6HNaPZuVIc=", + version = "v0.0.0-20210715145939-324b959e9c22", ) go_repository( name = "org_golang_google_grpc", From e2854f5e47862dee81899502ad8a3070a701bc73 Mon Sep 17 00:00:00 2001 From: Nguyen Xuan Dung Date: Fri, 16 Jul 2021 08:44:02 +0700 Subject: [PATCH 0997/1518] marshalNonProtoField slice of enums (#2236) --- runtime/marshal_jsonpb.go | 33 +++++++++++++++++++++++++++++++++ runtime/marshal_jsonpb_test.go | 20 +++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 43116241b1a..7387c8e3976 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "reflect" + "strconv" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" @@ -113,6 +114,36 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { return buf.Bytes(), nil } + + if rv.Type().Elem().Implements(typeProtoEnum) { + var buf bytes.Buffer + err := buf.WriteByte('[') + if err != nil { + return nil, err + } + for i := 0; i < rv.Len(); i++ { + if i != 0 { + err = buf.WriteByte(',') + if err != nil { + return nil, err + } + } + if j.UseEnumNumbers { + _, err = buf.WriteString(strconv.FormatInt(rv.Index(i).Int(), 10)) + } else { + _, err = buf.WriteString("\"" + rv.Index(i).Interface().(protoEnum).String() + "\"") + } + if err != nil { + return nil, err + } + } + err = buf.WriteByte(']') + if err != nil { + return nil, err + } + + return buf.Bytes(), nil + } } if rv.Kind() == reflect.Map { @@ -289,6 +320,8 @@ type protoEnum interface { EnumDescriptor() ([]byte, []int) } +var typeProtoEnum = reflect.TypeOf((*protoEnum)(nil)).Elem() + var typeProtoMessage = reflect.TypeOf((*proto.Message)(nil)).Elem() // Delimiter for newline encoded JSON streams. diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 0a9af2779a5..2d5f8bedd4c 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -142,14 +142,32 @@ func TestJSONPbMarshalFields(t *testing.T) { } } + nums := []examplepb.NumericEnum{examplepb.NumericEnum_ZERO, examplepb.NumericEnum_ONE} + + buf, err := m.Marshal(nums) + if err != nil { + t.Errorf("m.Marshal(%#v) failed with %v; want success", nums, err) + } + if got, want := string(buf), `[0,1]`; got != want { + t.Errorf("m.Marshal(%#v) = %q; want %q", nums, got, want) + } + m.UseEnumNumbers = false - buf, err := m.Marshal(examplepb.NumericEnum_ONE) + buf, err = m.Marshal(examplepb.NumericEnum_ONE) if err != nil { t.Errorf("m.Marshal(%#v) failed with %v; want success", examplepb.NumericEnum_ONE, err) } if got, want := string(buf), `"ONE"`; got != want { t.Errorf("m.Marshal(%#v) = %q; want %q", examplepb.NumericEnum_ONE, got, want) } + + buf, err = m.Marshal(nums) + if err != nil { + t.Errorf("m.Marshal(%#v) failed with %v; want success", nums, err) + } + if got, want := string(buf), `["ZERO","ONE"]`; got != want { + t.Errorf("m.Marshal(%#v) = %q; want %q", nums, got, want) + } } func TestJSONPbUnmarshal(t *testing.T) { From 6ac7368b9c6272ec4eb4f3dd1d44936f3a72c190 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 16 Jul 2021 15:25:39 +0000 Subject: [PATCH 0998/1518] fix(deps): update google.golang.org/genproto commit hash to ce7ef5c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ba29c07acc3..d75e65cb053 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22 + google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 5db26fede47..5e43b021d85 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22 h1:jcklN/lATdu/CSsNEOLujIgfvY7IMQpRq6HNaPZuVIc= -google.golang.org/genproto v0.0.0-20210715145939-324b959e9c22/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea h1:8ZyCcgugUqamxp/vZSEJw9CMy7VZlSWYJLLJPi/dSDA= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2475556760a..7e69a99b2e7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:jcklN/lATdu/CSsNEOLujIgfvY7IMQpRq6HNaPZuVIc=", - version = "v0.0.0-20210715145939-324b959e9c22", + sum = "h1:8ZyCcgugUqamxp/vZSEJw9CMy7VZlSWYJLLJPi/dSDA=", + version = "v0.0.0-20210716133855-ce7ef5c701ea", ) go_repository( name = "org_golang_google_grpc", From 735f30d659ec4daca869cf3668bb3bcbf93d7ca2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 19 Jul 2021 14:56:25 +0000 Subject: [PATCH 0999/1518] fix(deps): update google.golang.org/genproto commit hash to 1d5a45f --- go.mod | 2 +- go.sum | 6 +++--- repositories.bzl | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index d75e65cb053..178a832d519 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea + google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 5e43b021d85..c722560d86c 100644 --- a/go.sum +++ b/go.sum @@ -302,7 +302,7 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea h1:8ZyCcgugUqamxp/vZSEJw9CMy7VZlSWYJLLJPi/dSDA= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492 h1:7yQQsvnwjfEahbNNEKcBHv3mR+HnB1ctGY/z1JXzx8M= +google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7e69a99b2e7..8a5601d3056 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:8ZyCcgugUqamxp/vZSEJw9CMy7VZlSWYJLLJPi/dSDA=", - version = "v0.0.0-20210716133855-ce7ef5c701ea", + sum = "h1:7yQQsvnwjfEahbNNEKcBHv3mR+HnB1ctGY/z1JXzx8M=", + version = "v0.0.0-20210719143636-1d5a45f8e492", ) go_repository( name = "org_golang_google_grpc", @@ -1170,8 +1170,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:cVngSRcfgyZCzys3KYOpCFa+4dqX/Oub9tAq00ttGVs=", - version = "v0.1.4", + sum = "h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=", + version = "v0.1.5", ) go_repository( From 0b3096604d04d5e1eb09e4eae2b0ca8484d26995 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 21 Jul 2021 17:00:45 +0000 Subject: [PATCH 1000/1518] fix(deps): update google.golang.org/genproto commit hash to f1cecdd --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 178a832d519..098bab6dbb0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492 + google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c722560d86c..8c1ea4961d2 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492 h1:7yQQsvnwjfEahbNNEKcBHv3mR+HnB1ctGY/z1JXzx8M= -google.golang.org/genproto v0.0.0-20210719143636-1d5a45f8e492/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a h1:17YmRUuEF4d+t2ygJZaDPhqNL2Hf17832xWKcMU7r2I= +google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8a5601d3056..6ae77ca788b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:7yQQsvnwjfEahbNNEKcBHv3mR+HnB1ctGY/z1JXzx8M=", - version = "v0.0.0-20210719143636-1d5a45f8e492", + sum = "h1:17YmRUuEF4d+t2ygJZaDPhqNL2Hf17832xWKcMU7r2I=", + version = "v0.0.0-20210721163202-f1cecdd8b78a", ) go_repository( name = "org_golang_google_grpc", From 3f3f6857d2adbb14841a5c30ba442dc110e2b29b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 22 Jul 2021 14:07:21 +0000 Subject: [PATCH 1001/1518] fix(deps): update google.golang.org/genproto commit hash to 667f2b7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 098bab6dbb0..d6aadb3700c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a + google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 8c1ea4961d2..95c3be403d5 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a h1:17YmRUuEF4d+t2ygJZaDPhqNL2Hf17832xWKcMU7r2I= -google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ= +google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6ae77ca788b..ae466870e4f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:17YmRUuEF4d+t2ygJZaDPhqNL2Hf17832xWKcMU7r2I=", - version = "v0.0.0-20210721163202-f1cecdd8b78a", + sum = "h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ=", + version = "v0.0.0-20210722135532-667f2b7c528f", ) go_repository( name = "org_golang_google_grpc", From 43268c14f0f0ba40d2a5209f5e7c2b30c7d17ee1 Mon Sep 17 00:00:00 2001 From: Tamiraltshuler <45828846+Tamiraltshuler@users.noreply.github.com> Date: Sun, 25 Jul 2021 04:46:45 +0300 Subject: [PATCH 1002/1518] fix(integ-test): timeout test is now consistent (#2247) --- examples/internal/server/a_bit_of_everything.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 0870594d2f1..aa9efc8a770 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -308,7 +308,7 @@ func (s *_ABitOfEverythingServer) NoBindings(ctx context.Context, msg *durationp func (s *_ABitOfEverythingServer) Timeout(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) { <-ctx.Done() - return nil, ctx.Err() + return nil, status.FromContextError(ctx.Err()).Err() } func (s *_ABitOfEverythingServer) ErrorWithDetails(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) { From 89d11fed1442e090cba22961b6b28822eba0fc37 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 26 Jul 2021 14:48:13 +0000 Subject: [PATCH 1003/1518] fix(deps): update google.golang.org/genproto commit hash to b02e899 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d6aadb3700c..a0068d0f418 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f + google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 95c3be403d5..72767b75a57 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ= -google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0 h1:tcs4DyF9LYv8cynRAbX8JeBpuezJLaK6RfiATAsGwnY= +google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ae466870e4f..68bef500b41 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:YORWxaStkWBnWgELOHTmDrqNlFXuVGEbhwbB5iK94bQ=", - version = "v0.0.0-20210722135532-667f2b7c528f", + sum = "h1:tcs4DyF9LYv8cynRAbX8JeBpuezJLaK6RfiATAsGwnY=", + version = "v0.0.0-20210726143408-b02e89920bf0", ) go_repository( name = "org_golang_google_grpc", From ab5d15b15bfec4d0d73bc02fd14bd0d82f9dd002 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 26 Jul 2021 19:09:34 +0000 Subject: [PATCH 1004/1518] chore(deps): update bufbuild/buf docker tag to v0.45.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 85b2f8c645d..ed318984ea3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.44.0 + - image: bufbuild/buf:0.45.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.44.0 + - image: bufbuild/buf:0.45.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 743a28bea16b6676378bb34db5315d2576bd0b26 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 26 Jul 2021 20:18:14 +0000 Subject: [PATCH 1005/1518] fix(deps): update google.golang.org/genproto commit hash to e7812ac --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a0068d0f418..89667ded10d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0 + google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 72767b75a57..b68833da934 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0 h1:tcs4DyF9LYv8cynRAbX8JeBpuezJLaK6RfiATAsGwnY= -google.golang.org/genproto v0.0.0-20210726143408-b02e89920bf0/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0 h1:VpRFBmFg/ol+rqJnkKLPjVebPNFbSxuj17B7bH1xMc8= +google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 68bef500b41..d8dd8db8f72 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:tcs4DyF9LYv8cynRAbX8JeBpuezJLaK6RfiATAsGwnY=", - version = "v0.0.0-20210726143408-b02e89920bf0", + sum = "h1:VpRFBmFg/ol+rqJnkKLPjVebPNFbSxuj17B7bH1xMc8=", + version = "v0.0.0-20210726200206-e7812ac95cc0", ) go_repository( name = "org_golang_google_grpc", From 5fdb0faf2438594846f87946cf2731d1bd26903b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 27 Jul 2021 20:03:47 +0000 Subject: [PATCH 1006/1518] chore(deps): update bufbuild/buf docker tag to v0.46.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ed318984ea3..ef705191b7f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.45.0 + - image: bufbuild/buf:0.46.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.45.0 + - image: bufbuild/buf:0.46.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From a7133a3d52bf7df43283d78ab1b7d5b1b9a8690a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 28 Jul 2021 22:28:52 +0000 Subject: [PATCH 1007/1518] fix(deps): update google.golang.org/genproto commit hash to 7823e68 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 89667ded10d..9770551d164 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0 + google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index b68833da934..45afca282df 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0 h1:VpRFBmFg/ol+rqJnkKLPjVebPNFbSxuj17B7bH1xMc8= -google.golang.org/genproto v0.0.0-20210726200206-e7812ac95cc0/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f h1:4m1jFN3fHeKo0UvpraW2ipO2O0rgp5w2ugXeggtecAk= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d8dd8db8f72..b6bb4f60be6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:VpRFBmFg/ol+rqJnkKLPjVebPNFbSxuj17B7bH1xMc8=", - version = "v0.0.0-20210726200206-e7812ac95cc0", + sum = "h1:4m1jFN3fHeKo0UvpraW2ipO2O0rgp5w2ugXeggtecAk=", + version = "v0.0.0-20210728212813-7823e685a01f", ) go_repository( name = "org_golang_google_grpc", From caebc5b11f4f55f46be17b06606b27aa6e35a957 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 29 Jul 2021 15:35:07 +0000 Subject: [PATCH 1008/1518] fix(deps): update google.golang.org/genproto commit hash to df9385d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9770551d164..2b1914140db 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f + google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 45afca282df..87c3a3687f6 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f h1:4m1jFN3fHeKo0UvpraW2ipO2O0rgp5w2ugXeggtecAk= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM= +google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b6bb4f60be6..984e546be49 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4m1jFN3fHeKo0UvpraW2ipO2O0rgp5w2ugXeggtecAk=", - version = "v0.0.0-20210728212813-7823e685a01f", + sum = "h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM=", + version = "v0.0.0-20210729151513-df9385d47c1b", ) go_repository( name = "org_golang_google_grpc", From 457fc2b6e5dbd65d0a5d8d110fe0cd4778e816d0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 29 Jul 2021 17:09:50 +0000 Subject: [PATCH 1009/1518] chore(deps): update bufbuild/buf docker tag to v0.47.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ef705191b7f..e5700a87064 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.46.0 + - image: bufbuild/buf:0.47.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.46.0 + - image: bufbuild/buf:0.47.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From a3b617d5779b5978604acf2f8d4de76ffe193a09 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 29 Jul 2021 23:05:33 +0000 Subject: [PATCH 1010/1518] chore(deps): update bufbuild/buf docker tag to v0.48.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e5700a87064..066aa6301cd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.47.0 + - image: bufbuild/buf:0.48.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.47.0 + - image: bufbuild/buf:0.48.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 7efa8b3f451e2120fe90784ae4b5854661a08afe Mon Sep 17 00:00:00 2001 From: 0daryo <38380837+0daryo@users.noreply.github.com> Date: Fri, 30 Jul 2021 21:48:01 +0900 Subject: [PATCH 1011/1518] fix: typo of binary file update (#2258) --- docs/docs/mapping/binary_file_uploads.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/mapping/binary_file_uploads.md b/docs/docs/mapping/binary_file_uploads.md index 145609ec588..1a378cf8fe0 100644 --- a/docs/docs/mapping/binary_file_uploads.md +++ b/docs/docs/mapping/binary_file_uploads.md @@ -32,14 +32,14 @@ mux.HandlePath("POST", "/v1/files", handleBinaryFileUpload) And then in your handler you can do something like: ```go -func handleBinaryFileUpload(w http.ResponseWriter, rq *http.Request, params map[string]string) { +func handleBinaryFileUpload(w http.ResponseWriter, r *http.Request, params map[string]string) { err := r.ParseForm() if err != nil { http.Error(w, fmt.Sprintf("failed to parse form: %s", err.Error()), http.StatusBadRequest) return } - f, header, err := rq.FormFile("attachment") + f, header, err := r.FormFile("attachment") if err != nil { http.Error(w, fmt.Sprintf("failed to get file 'attachment': %s", err.Error()), http.StatusBadRequest) return From dafcb953013ae1f3c613699c35ef4a97fce39eb2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 30 Jul 2021 14:46:06 +0000 Subject: [PATCH 1012/1518] chore(deps): update bufbuild/buf docker tag to v0.48.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 066aa6301cd..77f9d27bea4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.48.0 + - image: bufbuild/buf:0.48.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.48.0 + - image: bufbuild/buf:0.48.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 4cdcd103d45e9ac938930a9c60c58fc4b17bd7e2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 30 Jul 2021 20:41:50 +0000 Subject: [PATCH 1013/1518] chore(deps): update bufbuild/buf docker tag to v0.48.2 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 77f9d27bea4..d5c1c49949c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.48.1 + - image: bufbuild/buf:0.48.2 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.48.1 + - image: bufbuild/buf:0.48.2 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From c4dfa5447798a7ab60c0cc59c6e88c312f8a1817 Mon Sep 17 00:00:00 2001 From: Dane David Date: Sun, 1 Aug 2021 06:43:30 +0530 Subject: [PATCH 1014/1518] fix(protoc-gen-grpc-gateway): error if identical annotations are provided (#2246) * Add failing test to check for errors with duplicate annotions * Add map to descriptor.Registry & check for duplicate annotations * Fix broken tests * Update annotationMap to use struct{} * Rename breaking annotations in examples --- .../internal/clients/abe/api/swagger.yaml | 45 ++++- .../abe/api_a_bit_of_everything_service.go | 156 +++++++++++++++ .../proto/examplepb/a_bit_of_everything.pb.go | 2 +- .../examplepb/a_bit_of_everything.pb.gw.go | 6 +- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 63 +++++- .../proto/examplepb/flow_combination.pb.go | 124 ++++++------ .../proto/examplepb/flow_combination.pb.gw.go | 20 +- .../proto/examplepb/flow_combination.proto | 8 +- .../examplepb/flow_combination.swagger.json | 186 +++++++++++++++--- internal/descriptor/registry.go | 19 ++ .../internal/gengateway/generator_test.go | 1 + .../internal/gengateway/template.go | 4 + .../internal/gengateway/template_test.go | 90 ++++++++- 14 files changed, 612 insertions(+), 114 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 13e1de24603..a637ecd176d 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2457,15 +2457,15 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "ABitOfEverythingService_CheckExternalNestedPathEnum" + operationId: "ABitOfEverythingService_CheckExternalPathEnum" parameters: - name: "value" in: "path" required: true type: "string" enum: - - "GHI" - - "JKL" + - "ABC" + - "DEF" x-exportParamName: "Value" responses: 200: @@ -2534,6 +2534,45 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v3/{value}:check: + get: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_CheckExternalNestedPathEnum" + parameters: + - name: "value" + in: "path" + required: true + type: "string" + enum: + - "GHI" + - "JKL" + x-exportParamName: "Value" + responses: + 200: + description: "A successful response." + schema: {} + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" securityDefinitions: ApiKeyAuth: type: "apiKey" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 1f48a76229f..465540e0c2e 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -43,6 +43,162 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckExternal localVarReturnValue interface{} ) + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v3/{value}:check" + localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param value + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckExternalPathEnum(ctx context.Context, value string) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + // create path and map variables localVarPath := a.client.cfg.BasePath + "/v2/{value}:check" localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 128682cfc32..7e67dd907d1 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -2068,7 +2068,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, + 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index c886e3f8274..d138698e894 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2926,7 +2926,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3543,7 +3543,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3633,7 +3633,7 @@ var ( pattern_ABitOfEverythingService_CheckExternalPathEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"v2", "value"}, "check")) - pattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"v2", "value"}, "check")) + pattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"v3", "value"}, "check")) pattern_ABitOfEverythingService_CheckStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "checkStatus"}, "")) ) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 965eae5be59..dac64845b22 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -676,7 +676,7 @@ service ABitOfEverythingService { } rpc CheckExternalNestedPathEnum(pathenum.MessageWithNestedPathEnum) returns (google.protobuf.Empty) { option (google.api.http) = { - get: "/v2/{value}:check" + get: "/v3/{value}:check" }; } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 7e284e79496..9941f56d676 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -3186,7 +3186,7 @@ }, "/v2/{value}:check": { "get": { - "operationId": "ABitOfEverythingService_CheckExternalNestedPathEnum", + "operationId": "ABitOfEverythingService_CheckExternalPathEnum", "responses": { "200": { "description": "A successful response.", @@ -3231,8 +3231,8 @@ "required": true, "type": "string", "enum": [ - "GHI", - "JKL" + "ABC", + "DEF" ] } ], @@ -3301,6 +3301,63 @@ "ABitOfEverythingService" ] } + }, + "/v3/{value}:check": { + "get": { + "operationId": "ABitOfEverythingService_CheckExternalNestedPathEnum", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "value", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "GHI", + "JKL" + ] + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } } }, "definitions": { diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 04e5bbb5872..c1c10f13d68 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -310,7 +310,7 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x52, 0x01, 0x61, 0x32, 0xf9, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, + 0x74, 0x6f, 0x52, 0x01, 0x61, 0x32, 0xfd, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9d, 0x01, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, @@ -386,7 +386,7 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, - 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xfb, 0x01, 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50, + 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xfd, 0x01, 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x70, 0x63, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, @@ -395,71 +395,71 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x22, 0x20, 0x2f, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, - 0x01, 0x63, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, - 0x70, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, - 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, 0x6f, 0x64, - 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, 0x2f, 0x72, - 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, - 0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, - 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, - 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, - 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, 0x2f, 0x72, - 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, - 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1c, 0x22, - 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xc5, 0x01, - 0x0a, 0x19, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x41, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x89, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, - 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x2e, + 0x01, 0x63, 0x5a, 0x1f, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, + 0x72, 0x70, 0x63, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, + 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, + 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, + 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x3a, 0x01, 0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, + 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, + 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, + 0x1c, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, + 0xc5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x22, 0x23, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x8b, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, + 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, + 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x22, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, + 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x25, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, - 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, - 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, - 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x30, - 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x3a, 0x01, 0x63, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 41c89bd195c..1dcfbc106f9 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1705,7 +1705,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1728,7 +1728,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2127,7 +2127,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2147,7 +2147,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2347,7 +2347,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2367,7 +2367,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2413,9 +2413,9 @@ var ( pattern_FlowCombination_RpcPathNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{"rpc", "path-nested", "a.str", "b"}, "")) - pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) + pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested1", "a.str"}, "")) - pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) + pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested2", "a.str"}, "")) pattern_FlowCombination_RpcBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "body", "stream"}, "")) @@ -2435,9 +2435,9 @@ var ( pattern_FlowCombination_RpcPathNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"rpc", "path-nested", "a.str", "b", "stream"}, "")) - pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) + pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested1", "a.str", "stream"}, "")) - pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) + pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested2", "a.str", "stream"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/flow_combination.proto b/examples/internal/proto/examplepb/flow_combination.proto index 2375ec75f08..bb5fc0a2287 100644 --- a/examples/internal/proto/examplepb/flow_combination.proto +++ b/examples/internal/proto/examplepb/flow_combination.proto @@ -97,11 +97,11 @@ service FlowCombination { // w/o body; w/ path (IsNestedProto3); w/ query additional_bindings { - post: "/rpc/path-nested/{a.str}/rpc" + post: "/rpc/path-nested1/{a.str}/rpc" } // w/ body; w/ path (IsNestedProto3); w/ query additional_bindings { - post: "/rpc/path-nested/{a.str}/rpc" + post: "/rpc/path-nested2/{a.str}/rpc" body: "c" } }; @@ -156,11 +156,11 @@ service FlowCombination { // w/o body; w/ path (IsNestedProto3); w/ query additional_bindings { - post: "/rpc/path-nested/{a.str}/stream" + post: "/rpc/path-nested1/{a.str}/stream" } // w/ body; w/ path (IsNestedProto3); w/ query additional_bindings { - post: "/rpc/path-nested/{a.str}/stream" + post: "/rpc/path-nested2/{a.str}/stream" body: "c" } }; diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json index 51ed6f2af58..24ce34d3e87 100644 --- a/examples/internal/proto/examplepb/flow_combination.swagger.json +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -435,7 +435,7 @@ }, "/rpc/path-nested/{a.str}/rpc": { "post": { - "operationId": "FlowCombination_RpcPathNestedRpc3", + "operationId": "FlowCombination_RpcPathSingleNestedRpc", "responses": { "200": { "description": "A successful response.", @@ -456,20 +456,89 @@ "in": "path", "required": true, "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/stream": { + "post": { + "operationId": "FlowCombination_RpcPathSingleNestedStream", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" + } }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ { - "name": "body", - "in": "body", + "name": "a.str", + "in": "path", "required": true, + "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested/{a.str}/{b}/rpc": { + "post": { + "operationId": "FlowCombination_RpcPathNestedRpc", + "responses": { + "200": { + "description": "A successful response.", "schema": { - "type": "string" + "$ref": "#/definitions/examplepbEmptyProto" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" } + } + }, + "parameters": [ + { + "name": "a.str", + "in": "path", + "required": true, + "type": "string" }, { "name": "b", - "in": "query", - "required": false, + "in": "path", + "required": true, "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string" + } } ], "tags": [ @@ -477,9 +546,9 @@ ] } }, - "/rpc/path-nested/{a.str}/stream": { + "/rpc/path-nested/{a.str}/{b}/stream": { "post": { - "operationId": "FlowCombination_RpcPathNestedStream3", + "operationId": "FlowCombination_RpcPathNestedStream", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -510,6 +579,12 @@ "required": true, "type": "string" }, + { + "name": "b", + "in": "path", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", @@ -517,11 +592,35 @@ "schema": { "type": "string" } + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested1/{a.str}/rpc": { + "post": { + "operationId": "FlowCombination_RpcPathNestedRpc2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ { - "name": "b", - "in": "query", - "required": false, + "name": "a.str", + "in": "path", + "required": true, "type": "string" } ], @@ -530,14 +629,23 @@ ] } }, - "/rpc/path-nested/{a.str}/{b}/rpc": { + "/rpc/path-nested1/{a.str}/stream": { "post": { - "operationId": "FlowCombination_RpcPathNestedRpc", + "operationId": "FlowCombination_RpcPathNestedStream2", "responses": { "200": { - "description": "A successful response.", + "description": "A successful response.(streaming responses)", "schema": { - "$ref": "#/definitions/examplepbEmptyProto" + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbEmptyProto" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of examplepbEmptyProto" } }, "default": { @@ -553,9 +661,33 @@ "in": "path", "required": true, "type": "string" + } + ], + "tags": [ + "FlowCombination" + ] + } + }, + "/rpc/path-nested2/{a.str}/rpc": { + "post": { + "operationId": "FlowCombination_RpcPathNestedRpc3", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbEmptyProto" + } }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ { - "name": "b", + "name": "a.str", "in": "path", "required": true, "type": "string" @@ -567,6 +699,12 @@ "schema": { "type": "string" } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -574,9 +712,9 @@ ] } }, - "/rpc/path-nested/{a.str}/{b}/stream": { + "/rpc/path-nested2/{a.str}/stream": { "post": { - "operationId": "FlowCombination_RpcPathNestedStream", + "operationId": "FlowCombination_RpcPathNestedStream3", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -607,12 +745,6 @@ "required": true, "type": "string" }, - { - "name": "b", - "in": "path", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", @@ -620,6 +752,12 @@ "schema": { "type": "string" } + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 3a35dea6229..ff6e9542a77 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -115,6 +115,9 @@ type Registry struct { // recursiveDepth sets the maximum depth of a field parameter recursiveDepth int + + // annotationMap is used to check for duplicate HTTP annotations + annotationMap map[annotationIdentifier]struct{} } type repeatedFieldSeparator struct { @@ -122,6 +125,11 @@ type repeatedFieldSeparator struct { sep rune } +type annotationIdentifier struct { + method string + pathTemplate string +} + // NewRegistry returns a new Registry. func NewRegistry() *Registry { return &Registry{ @@ -140,6 +148,7 @@ func NewRegistry() *Registry { messageOptions: make(map[string]*options.Schema), serviceOptions: make(map[string]*options.Tag), fieldOptions: make(map[string]*options.JSONSchema), + annotationMap: make(map[annotationIdentifier]struct{}), recursiveDepth: 1000, } } @@ -683,3 +692,13 @@ func (r *Registry) FieldName(f *Field) string { } return f.GetName() } + +func (r *Registry) CheckDuplicateAnnotation(httpMethod string, httpTemplate string) error { + a := annotationIdentifier{method: httpMethod, pathTemplate: httpTemplate} + _, ok := r.annotationMap[a] + if ok { + return fmt.Errorf("duplicate annotation: method=%s, template=%s", httpMethod, httpTemplate) + } + r.annotationMap[a] = struct{}{} + return nil +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index baa35ee7203..2c5fe023293 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -77,6 +77,7 @@ func newExampleFileDescriptorWithGoPkg(gp *descriptor.GoPackage, filenamePrefix func TestGenerator_Generate(t *testing.T) { g := new(generator) + g.reg = descriptor.NewRegistry() result, err := g.Generate([]*descriptor.File{ crossLinkFixture(newExampleFileDescriptorWithGoPkg(&descriptor.GoPackage{ Path: "example.com/path/to/example", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 85606fbd514..871b3d84ffa 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -170,6 +170,10 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { methName := casing.Camel(*meth.Name) meth.Name = &methName for _, b := range meth.Bindings { + if err := reg.CheckDuplicateAnnotation(b.HTTPMethod, b.PathTmpl.Template); err != nil { + return "", err + } + methodWithBindingsSeen = true if err := handlerTemplate.Execute(w, binding{ Binding: b, diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index aaa92cfd940..89634269f43 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -29,6 +29,14 @@ func crossLinkFixture(f *descriptor.File) *descriptor.File { return f } +func compilePath(t *testing.T, path string) httprule.Template { + parsed, err := httprule.Parse(path) + if err != nil { + t.Fatalf("httprule.Parse(%q) failed with %v; want success", path, err) + } + return parsed.Compile() +} + func TestApplyTemplateHeader(t *testing.T) { msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), @@ -675,7 +683,7 @@ func TestIdentifierCapitalization(t *testing.T) { OutputType: proto.String("example_response"), } meth2 := &descriptorpb.MethodDescriptorProto{ - Name: proto.String("Exampl_eGet"), + Name: proto.String("Exampl_ePost"), InputType: proto.String("Exam_pleRequest"), OutputType: proto.String("example_response"), } @@ -728,7 +736,7 @@ func TestIdentifierCapitalization(t *testing.T) { ResponseType: msg2, Bindings: []*descriptor.Binding{ { - HTTPMethod: "GET", + HTTPMethod: "POST", Body: &descriptor.Body{FieldPath: nil}, }, }, @@ -746,7 +754,7 @@ func TestIdentifierCapitalization(t *testing.T) { if want := `msg, err := client.ExampleGe2T(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `msg, err := client.ExamplEGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) { + if want := `msg, err := client.ExamplEPost(ctx, &protoReq, grpc.Header(&metadata.HeaderMD)`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `var protoReq ExamPleRequest`; !strings.Contains(got, want) { @@ -756,3 +764,79 @@ func TestIdentifierCapitalization(t *testing.T) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } + +func TestDuplicatePaths(t *testing.T) { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + TypeName: proto.String(".google.protobuf.StringValue"), + Number: proto.Int32(1), + }, + }, + } + meth1 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Echo"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + meth2 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Echo2"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + binding := &descriptor.Binding{ + Index: 1, + PathTmpl: compilePath(t, "/v1/example/echo"), + HTTPMethod: "GET", + PathParams: nil, + Body: nil, + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth1, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{binding}, + }, + { + MethodDescriptorProto: meth2, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{binding}, + }, + }, + }, + }, + } + _, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) + if err == nil { + t.Errorf("applyTemplate(%#v) succeeded; want an error", file) + return + } +} From 313ce407d82fae34811ce7a3a61cf8c3112b8bd8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Aug 2021 07:02:45 +0000 Subject: [PATCH 1015/1518] chore(deps): update rules_proto commit hash to fcad468 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8d6b5999bd1..2164c16b675 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "bc12122a5ae4b517fa423ea03a8d82ea6352d5127ea48cb54bc324e8ab78493c", - strip_prefix = "rules_proto-af6481970a34554c6942d993e194a9aed7987780", + sha256 = "36476f17a78a4c495b9a9e70bd92d182e6e78db476d90c74bac1f5f19f0d6d04", + strip_prefix = "rules_proto-fcad4680fee127dbd8344e6a961a28eef5820ef4", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/af6481970a34554c6942d993e194a9aed7987780.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/af6481970a34554c6942d993e194a9aed7987780.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/fcad4680fee127dbd8344e6a961a28eef5820ef4.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/fcad4680fee127dbd8344e6a961a28eef5820ef4.tar.gz", ], ) From 8c441d31cda61356371617a9c709fe2af97a8250 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Aug 2021 08:10:58 +0000 Subject: [PATCH 1016/1518] fix(deps): update google.golang.org/genproto commit hash to 70bd63a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2b1914140db..5e3f2902160 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b + google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 87c3a3687f6..93dbb614605 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM= -google.golang.org/genproto v0.0.0-20210729151513-df9385d47c1b/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2 h1:0XmXV/Hi77Rbsx0ADebP/Epagwtf9/OP4FKpu6yZcjU= +google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 984e546be49..84c9d530df3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4xoALQmXxqVdDdLimpPyPeDdsJzo+nFTJw9euAMpqgM=", - version = "v0.0.0-20210729151513-df9385d47c1b", + sum = "h1:0XmXV/Hi77Rbsx0ADebP/Epagwtf9/OP4FKpu6yZcjU=", + version = "v0.0.0-20210803142424-70bd63adacf2", ) go_repository( name = "org_golang_google_grpc", From feb20eacc614111091ef7e6404bd6df907e65a6c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 Aug 2021 22:39:26 +0000 Subject: [PATCH 1017/1518] fix(deps): update google.golang.org/genproto commit hash to f1db76f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5e3f2902160..1a78a62ce3b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 - google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2 + google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 93dbb614605..2f73dff29fe 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2 h1:0XmXV/Hi77Rbsx0ADebP/Epagwtf9/OP4FKpu6yZcjU= -google.golang.org/genproto v0.0.0-20210803142424-70bd63adacf2/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d h1:Y9fT4WNRxuD0qofEPeWJwNC5kYLBcSXx0m91zyCMzYY= +google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 84c9d530df3..97d026991a1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0XmXV/Hi77Rbsx0ADebP/Epagwtf9/OP4FKpu6yZcjU=", - version = "v0.0.0-20210803142424-70bd63adacf2", + sum = "h1:Y9fT4WNRxuD0qofEPeWJwNC5kYLBcSXx0m91zyCMzYY=", + version = "v0.0.0-20210804223703-f1db76f3300d", ) go_repository( name = "org_golang_google_grpc", From ff140cde8a0401becda2aae363fc19ebd302d5ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 Aug 2021 14:10:38 +0000 Subject: [PATCH 1018/1518] fix(deps): update golang.org/x/oauth2 commit hash to 6f1e639 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1a78a62ce3b..1d3cd508a48 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 + golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index 2f73dff29fe..817ff940d92 100644 --- a/go.sum +++ b/go.sum @@ -211,8 +211,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 97d026991a1..5a292f7a672 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8=", - version = "v0.0.0-20210628180205-a41e5a781914", + sum = "h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww=", + version = "v0.0.0-20210805134026-6f1e6394065a", ) go_repository( name = "org_golang_x_sync", From 989cc030d594397e58a9b7f68170b5b26be62877 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 Aug 2021 20:47:02 +0000 Subject: [PATCH 1019/1518] fix(deps): update google.golang.org/genproto commit hash to 89edb61 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1d3cd508a48..360b775aa29 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a - google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d + google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 google.golang.org/grpc v1.39.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 817ff940d92..e64d987607c 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d h1:Y9fT4WNRxuD0qofEPeWJwNC5kYLBcSXx0m91zyCMzYY= -google.golang.org/genproto v0.0.0-20210804223703-f1db76f3300d/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 h1:VmMSf20ssFK0+u1dscyTH9bU4/M4y+X/xNfkvD6kGtM= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5a292f7a672..a506ec1f214 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Y9fT4WNRxuD0qofEPeWJwNC5kYLBcSXx0m91zyCMzYY=", - version = "v0.0.0-20210804223703-f1db76f3300d", + sum = "h1:VmMSf20ssFK0+u1dscyTH9bU4/M4y+X/xNfkvD6kGtM=", + version = "v0.0.0-20210805201207-89edb61ffb67", ) go_repository( name = "org_golang_google_grpc", From eaa97b4fef9b1c61b4ed1e6b83278eb2c321f4a9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 Aug 2021 21:21:33 +0000 Subject: [PATCH 1020/1518] fix(deps): update module google.golang.org/grpc to v1.39.1 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 360b775aa29..0cd9dcf0877 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 - google.golang.org/grpc v1.39.0 + google.golang.org/grpc v1.39.1 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index e64d987607c..a3f230229bb 100644 --- a/go.sum +++ b/go.sum @@ -377,8 +377,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1 h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index a506ec1f214..b107ea6c2f7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI=", - version = "v1.39.0", + sum = "h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E=", + version = "v1.39.1", ) go_repository( From ea2ba07b655ffddd964195da4c8b8c3f2991e0f5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 Aug 2021 23:17:07 +0000 Subject: [PATCH 1021/1518] chore(deps): update golang docker tag to v1.16.7 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index dcee3550299..be1af09689a 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.6 +FROM golang:1.16.7 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From c7a5614200a14423b825436b7af9df646439373b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 9 Aug 2021 14:44:21 +0000 Subject: [PATCH 1022/1518] fix(deps): update google.golang.org/genproto commit hash to 0135a39 --- go.mod | 2 +- go.sum | 5 ++--- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 0cd9dcf0877..48e21a67a3a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a - google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 + google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737 google.golang.org/grpc v1.39.1 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index a3f230229bb..7d0e30014b5 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67 h1:VmMSf20ssFK0+u1dscyTH9bU4/M4y+X/xNfkvD6kGtM= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737 h1:Moip0fL+OCinHcDkf5I8SnDySKoj58/LsVYUidA6GEM= +google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -377,7 +377,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1 h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index b107ea6c2f7..8451bc887f7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:VmMSf20ssFK0+u1dscyTH9bU4/M4y+X/xNfkvD6kGtM=", - version = "v0.0.0-20210805201207-89edb61ffb67", + sum = "h1:Moip0fL+OCinHcDkf5I8SnDySKoj58/LsVYUidA6GEM=", + version = "v0.0.0-20210809142519-0135a39c2737", ) go_repository( name = "org_golang_google_grpc", From 4a1ee95c02e26c58d5f30f7b1963d2d4b9310994 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 10 Aug 2021 22:57:25 +0000 Subject: [PATCH 1023/1518] fix(deps): update google.golang.org/genproto commit hash to 07d9e28 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 48e21a67a3a..09b8fbb191b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a - google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737 + google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8 google.golang.org/grpc v1.39.1 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 7d0e30014b5..cfc0d7ccc01 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737 h1:Moip0fL+OCinHcDkf5I8SnDySKoj58/LsVYUidA6GEM= -google.golang.org/genproto v0.0.0-20210809142519-0135a39c2737/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8 h1:P/69uwobdm0l+HaOPZLrBZASZY+1nOVlqYjUhumChaA= +google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8451bc887f7..21f6bbfb435 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Moip0fL+OCinHcDkf5I8SnDySKoj58/LsVYUidA6GEM=", - version = "v0.0.0-20210809142519-0135a39c2737", + sum = "h1:P/69uwobdm0l+HaOPZLrBZASZY+1nOVlqYjUhumChaA=", + version = "v0.0.0-20210810220042-07d9e28b16a8", ) go_repository( name = "org_golang_google_grpc", From 05a3e3acb060b64380bbc65db05da9d122503a0b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 10 Aug 2021 23:49:04 +0000 Subject: [PATCH 1024/1518] fix(deps): update golang.org/x/oauth2 commit hash to faf39c7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 09b8fbb191b..2f0226f64fe 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a + golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8 google.golang.org/grpc v1.39.1 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index cfc0d7ccc01..eb255104a05 100644 --- a/go.sum +++ b/go.sum @@ -211,8 +211,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 h1:Ati8dO7+U7mxpkPSxBZQEvzHVUYB/MqCklCN8ig5w/o= +golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 21f6bbfb435..0a85dfee9d1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:4Kd8OPUx1xgUwrHDaviWZO8MsgoZTZYC3g+8m16RBww=", - version = "v0.0.0-20210805134026-6f1e6394065a", + sum = "h1:Ati8dO7+U7mxpkPSxBZQEvzHVUYB/MqCklCN8ig5w/o=", + version = "v0.0.0-20210810183815-faf39c7919d5", ) go_repository( name = "org_golang_x_sync", From 442d77684e70a97d84652dc38f81364dfd445185 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 11 Aug 2021 02:42:55 +0000 Subject: [PATCH 1025/1518] fix(deps): update google.golang.org/genproto commit hash to ddbe55d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2f0226f64fe..cd1db9f3bd6 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 - google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8 + google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216 google.golang.org/grpc v1.39.1 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index eb255104a05..a3441e771ad 100644 --- a/go.sum +++ b/go.sum @@ -361,8 +361,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8 h1:P/69uwobdm0l+HaOPZLrBZASZY+1nOVlqYjUhumChaA= -google.golang.org/genproto v0.0.0-20210810220042-07d9e28b16a8/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216 h1:qnrhhl4uoNFepTqE28u11llFcDH07Z6r/cQxpGR97A4= +google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0a85dfee9d1..ab55cdcee17 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:P/69uwobdm0l+HaOPZLrBZASZY+1nOVlqYjUhumChaA=", - version = "v0.0.0-20210810220042-07d9e28b16a8", + sum = "h1:qnrhhl4uoNFepTqE28u11llFcDH07Z6r/cQxpGR97A4=", + version = "v0.0.0-20210811021853-ddbe55d93216", ) go_repository( name = "org_golang_google_grpc", From cf9ff6fc5468f19ea767c87c7d263b475a43b34e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Aug 2021 00:50:45 +0000 Subject: [PATCH 1026/1518] fix(deps): update module google.golang.org/grpc to v1.40.0 --- go.mod | 2 +- go.sum | 6 +++++- repositories.bzl | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index cd1db9f3bd6..80872b406a9 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216 - google.golang.org/grpc v1.39.1 + google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index a3441e771ad..26b7a969c00 100644 --- a/go.sum +++ b/go.sum @@ -33,9 +33,11 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -128,6 +130,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -377,8 +380,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.39.1 h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index ab55cdcee17..9aa40e17089 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E=", - version = "v1.39.1", + sum = "h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=", + version = "v1.40.0", ) go_repository( From 4aa2c48ad2562e87e9df704ab4c6ffa2319d1425 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Aug 2021 22:39:41 +0000 Subject: [PATCH 1027/1518] chore(deps): update bufbuild/buf docker tag to v0.50.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5c1c49949c..759ac95f4c1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.48.2 + - image: bufbuild/buf:0.50.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.48.2 + - image: bufbuild/buf:0.50.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 1d7d2d8cef6509cce21ea1200889ee247eb6fe95 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Aug 2021 17:47:23 +0000 Subject: [PATCH 1028/1518] fix(deps): update google.golang.org/genproto commit hash to db860fe --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 80872b406a9..d583ab01e8e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 - google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216 + google.golang.org/genproto v0.0.0-20210813162853-db860fec028c google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 26b7a969c00..71861ffd45e 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216 h1:qnrhhl4uoNFepTqE28u11llFcDH07Z6r/cQxpGR97A4= -google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c h1:iLQakcwWG3k/++1q/46apVb1sUQ3IqIdn9yUE6eh/xA= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 9aa40e17089..3b2d16eca89 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:qnrhhl4uoNFepTqE28u11llFcDH07Z6r/cQxpGR97A4=", - version = "v0.0.0-20210811021853-ddbe55d93216", + sum = "h1:iLQakcwWG3k/++1q/46apVb1sUQ3IqIdn9yUE6eh/xA=", + version = "v0.0.0-20210813162853-db860fec028c", ) go_repository( name = "org_golang_google_grpc", From cc77dc66c790e837b10460c151de7684547740c2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Aug 2021 23:18:45 +0000 Subject: [PATCH 1029/1518] chore(deps): update bufbuild/buf docker tag to v0.51.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 759ac95f4c1..aecbd5cb8ba 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.50.0 + - image: bufbuild/buf:0.51.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.50.0 + - image: bufbuild/buf:0.51.0 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From 3f19de19d1352b6b27e9abdf117d61fd3e9cae1b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Aug 2021 15:42:54 +0000 Subject: [PATCH 1030/1518] fix(deps): update google.golang.org/genproto commit hash to e15ff19 --- go.mod | 2 +- go.sum | 5 ++--- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index d583ab01e8e..376ad74067b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 - google.golang.org/genproto v0.0.0-20210813162853-db860fec028c + google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 71861ffd45e..b248096f117 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c h1:iLQakcwWG3k/++1q/46apVb1sUQ3IqIdn9yUE6eh/xA= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d h1:fPtHPeysWvGVJwQFKu3B7H2DB2sOEsW7UTayKkWESKw= +google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -380,7 +380,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 3b2d16eca89..df272d6667e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iLQakcwWG3k/++1q/46apVb1sUQ3IqIdn9yUE6eh/xA=", - version = "v0.0.0-20210813162853-db860fec028c", + sum = "h1:fPtHPeysWvGVJwQFKu3B7H2DB2sOEsW7UTayKkWESKw=", + version = "v0.0.0-20210816143620-e15ff196659d", ) go_repository( name = "org_golang_google_grpc", From b096c23d734907fad1f3ca55a5b29c2c4b673696 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Aug 2021 19:43:44 +0000 Subject: [PATCH 1031/1518] chore(deps): update bufbuild/buf docker tag to v0.51.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aecbd5cb8ba..edf96188d9c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.51.0 + - image: bufbuild/buf:0.51.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.51.0 + - image: bufbuild/buf:0.51.1 steps: - checkout - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc From d37d6baf3f38053efbdea03a7124afd2c9695fd2 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 16 Aug 2021 22:43:49 -0400 Subject: [PATCH 1032/1518] Update buf, googleapis, generator versions (#2286) * Update buf version, googleapis dependency, generator versions * Update documentation * Use correct version --- .circleci/config.yml | 4 ++-- Makefile | 4 ++-- README.md | 8 ++++---- buf.lock | 9 +++++---- buf.yaml | 2 +- docs/docs/tutorials/adding_annotations.md | 4 ++-- examples/internal/helloworld/helloworld.pb.go | 4 ++-- .../internal/proto/examplepb/a_bit_of_everything.pb.go | 8 ++++---- examples/internal/proto/examplepb/echo_service.pb.go | 4 ++-- examples/internal/proto/examplepb/flow_combination.pb.go | 4 ++-- .../proto/examplepb/generate_unbound_methods.pb.go | 4 ++-- .../internal/proto/examplepb/non_standard_names.pb.go | 4 ++-- examples/internal/proto/examplepb/openapi_merge_a.pb.go | 4 ++-- examples/internal/proto/examplepb/openapi_merge_b.pb.go | 4 ++-- .../internal/proto/examplepb/response_body_service.pb.go | 4 ++-- examples/internal/proto/examplepb/stream.pb.go | 4 ++-- .../proto/examplepb/unannotated_echo_service.pb.go | 4 ++-- examples/internal/proto/examplepb/use_go_template.pb.go | 4 ++-- examples/internal/proto/examplepb/wrappers.pb.go | 4 ++-- examples/internal/proto/pathenum/path_enum.pb.go | 4 ++-- examples/internal/proto/sub/message.pb.go | 4 ++-- examples/internal/proto/sub2/message.pb.go | 4 ++-- internal/descriptor/apiconfig/apiconfig.pb.go | 4 ++-- internal/descriptor/openapiconfig/openapiconfig.pb.go | 4 ++-- protoc-gen-openapiv2/options/annotations.pb.go | 4 ++-- protoc-gen-openapiv2/options/openapiv2.pb.go | 4 ++-- runtime/internal/examplepb/example.pb.go | 4 ++-- runtime/internal/examplepb/non_standard_names.pb.go | 4 ++-- runtime/internal/examplepb/proto2.pb.go | 4 ++-- runtime/internal/examplepb/proto3.pb.go | 4 ++-- 30 files changed, 66 insertions(+), 65 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index edf96188d9c..dc9dc88edaa 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -136,8 +136,8 @@ jobs: - image: bufbuild/buf:0.51.1 steps: - checkout - - run: echo -e "machine buf.build\npassword ${BUF_API_TOKEN}" >> ~/.netrc - - run: buf beta push + - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin + - run: buf push --tag "$CIRCLE_SHA1" release: executor: build-env working_directory: /src/grpc-gateway diff --git a/Makefile b/Makefile index b5771c8ccfb..d3409852057 100644 --- a/Makefile +++ b/Makefile @@ -86,8 +86,8 @@ install: @mkdir -p ${TMP_INSTALL_DIR} cd ${TMP_INSTALL_DIR} && go get \ google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 \ - google.golang.org/protobuf/cmd/protoc-gen-go@v1.26.0 \ - github.com/bufbuild/buf/cmd/buf@v0.41.0 + google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1 \ + github.com/bufbuild/buf/cmd/buf@v0.51.1 @rmdir ${TMP_INSTALL_DIR} go install \ diff --git a/README.md b/README.md index 471fdc3014c..492990fef07 100644 --- a/README.md +++ b/README.md @@ -231,14 +231,14 @@ Make sure that your `$GOBIN` is in your `$PATH`. > You will need to provide the required third party protobuf files to the protobuf compiler. > If you are using [buf](https://github.com/bufbuild/buf), this dependency can > be added to the `deps` array in your `buf.yaml` under the name - > `buf.build/beta/googleapis`: + > `buf.build/googleapis/googleapis`: > ```yaml > version: v1beta1 > name: buf.build/yourorg/myprotos > deps: - > - buf.build/beta/googleapis + > - buf.build/googleapis/googleapis > ``` - > Always run `buf beta mod update` after adding a dependency to your `buf.yaml`. + > Always run `buf mod update` after adding a dependency to your `buf.yaml`. See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior @@ -408,7 +408,7 @@ Make sure that your `$GOBIN` is in your `$PATH`. version: v1beta1 name: buf.build/yourorg/myprotos deps: - - buf.build/beta/googleapis + - buf.build/googleapis/googleapis - buf.build/grpc-ecosystem/grpc-gateway ``` diff --git a/buf.lock b/buf.lock index f546ab308c8..8f0d541192d 100644 --- a/buf.lock +++ b/buf.lock @@ -1,9 +1,10 @@ # Generated by buf. DO NOT EDIT. +version: v1 deps: - remote: buf.build - owner: beta + owner: googleapis repository: googleapis branch: main - commit: 2e73676eef8642dfba4ed782b7c8d6fe - digest: b1-vB11w98W2vFtEP4Veknm56Pi6DU6MpOuocESiOzvbqw= - create_time: 2021-04-26T14:55:30.644663Z + commit: 6358935a97044c1494fe13d369ac2f3b + digest: b1-4hxgpEmLuajuxqkZd7NMVnKipt3zqnXaTHsBEKtUOsM= + create_time: 2021-08-13T15:04:04.653816Z diff --git a/buf.yaml b/buf.yaml index c2a6eb4f1e1..1291c02d83e 100644 --- a/buf.yaml +++ b/buf.yaml @@ -1,7 +1,7 @@ version: v1beta1 name: buf.build/grpc-ecosystem/grpc-gateway deps: - - buf.build/beta/googleapis + - buf.build/googleapis/googleapis build: roots: - . diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index d93476ad1f5..706158aad39 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -72,13 +72,13 @@ We'll also need to add the `googleapis` dependency to our `buf.yaml` file: version: v1beta1 name: buf.build/myuser/myrepo deps: - - buf.build/beta/googleapis + - buf.build/googleapis/googleapis build: roots: - proto ``` -Then we need to run `buf beta mod update` to select a version of the dependency to use. +Then we need to run `buf mod update` to select a version of the dependency to use. And that's it! Now if you run: diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index de4212a8eab..5b119a1dd3a 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 7e67dd907d1..52dc83b5cfe 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb @@ -437,14 +437,14 @@ func (x *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum { if x != nil { return x.PathEnumValue } - return pathenum.PathEnum_ABC + return pathenum.PathEnum(0) } func (x *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePathEnum_NestedPathEnum { if x != nil { return x.NestedPathEnumValue } - return pathenum.MessagePathEnum_GHI + return pathenum.MessagePathEnum_NestedPathEnum(0) } func (x *ABitOfEverything) GetSfixed32Value() int32 { diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 59d5eea2443..8cf913b89e1 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index c1c10f13d68..6124f71de75 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index c35c8561d0a..adc726c18be 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index d8fceb290a8..708878dd7db 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index 458798d300a..692c4e835f1 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 0adf0d6cf01..50a5b8b7dad 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 6e403b0903f..b86aa06bbfc 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 552817a23fc..25923b133e5 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index fb205ef749e..7e6f77da02f 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index c3d685d9c3f..63d35d588af 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 33bf194ed01..3475c44f414 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index c38da12a833..bf382ae95e6 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index a24ffae22a1..90eb27fa0fd 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index eecbfcdf0c1..699f7bd5714 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index cdefa1bb0e3..c13ec108e38 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index 0fc71232b07..9c0fa7fbc26 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 6166aaae4e1..c6b16fc6015 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index ddd736d7cc4..06c6c56ea62 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index eef49eeb086..440e049053e 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 97c57e732f6..c05eb5597b7 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index e625ed9df09..2ce424af39e 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 581923ebdd8..1300d4aea58 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.15.2 +// protoc-gen-go v1.27.1 +// protoc v3.17.3 // source: runtime/internal/examplepb/proto3.proto package examplepb From 62e2e178a36fa9a3a77358927ac5c414e9efa10b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 17 Aug 2021 04:00:11 +0000 Subject: [PATCH 1033/1518] chore(deps): update golang docker tag to v1.17.0 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index be1af09689a..f600552ae0e 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.16.7 +FROM golang:1.17.0 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From e2eecb9e737b97d1a08da504ba93592cf77d2521 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 00:02:54 +0000 Subject: [PATCH 1034/1518] fix(deps): update golang.org/x/oauth2 commit hash to 7df4dd6 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 376ad74067b..8a7c4008167 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 + golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index b248096f117..309df6bb0ce 100644 --- a/go.sum +++ b/go.sum @@ -214,8 +214,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 h1:Ati8dO7+U7mxpkPSxBZQEvzHVUYB/MqCklCN8ig5w/o= -golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab h1:llrcWN/wOwO+6gAyfBzxb5hZ+c3mriU/0+KNgYu6adA= +golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index df272d6667e..c32d164c0c7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:Ati8dO7+U7mxpkPSxBZQEvzHVUYB/MqCklCN8ig5w/o=", - version = "v0.0.0-20210810183815-faf39c7919d5", + sum = "h1:llrcWN/wOwO+6gAyfBzxb5hZ+c3mriU/0+KNgYu6adA=", + version = "v0.0.0-20210817223510-7df4dd6e12ab", ) go_repository( name = "org_golang_x_sync", From 64a5e7e549955157bea8c560e23b614b6ee0ee23 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Aug 2021 23:16:58 +0000 Subject: [PATCH 1035/1518] fix(deps): update google.golang.org/genproto commit hash to 27ea9cc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8a7c4008167..833a7bc4520 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab - google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d + google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 309df6bb0ce..56667bda656 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d h1:fPtHPeysWvGVJwQFKu3B7H2DB2sOEsW7UTayKkWESKw= -google.golang.org/genproto v0.0.0-20210816143620-e15ff196659d/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f h1:enWPderunHptc5pzJkSYGx0olpF8goXzG0rY3kL0eSg= +google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c32d164c0c7..fedb8bbb5b1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fPtHPeysWvGVJwQFKu3B7H2DB2sOEsW7UTayKkWESKw=", - version = "v0.0.0-20210816143620-e15ff196659d", + sum = "h1:enWPderunHptc5pzJkSYGx0olpF8goXzG0rY3kL0eSg=", + version = "v0.0.0-20210818220304-27ea9cc85d9f", ) go_repository( name = "org_golang_google_grpc", From 5a0b719dd0c26d4d160df0ea2b441b6d594f4286 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 16:48:08 +0000 Subject: [PATCH 1036/1518] fix(deps): update google.golang.org/genproto commit hash to bb2f42d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 833a7bc4520..d58dda8edc5 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab - google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f + google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 56667bda656..85ca97c3b5f 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f h1:enWPderunHptc5pzJkSYGx0olpF8goXzG0rY3kL0eSg= -google.golang.org/genproto v0.0.0-20210818220304-27ea9cc85d9f/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9 h1:MdJH3KjoUNISwgBrVaW47FOcXXWs9C+idH3DJ0yWyUI= +google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fedb8bbb5b1..5c69ff64c70 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:enWPderunHptc5pzJkSYGx0olpF8goXzG0rY3kL0eSg=", - version = "v0.0.0-20210818220304-27ea9cc85d9f", + sum = "h1:MdJH3KjoUNISwgBrVaW47FOcXXWs9C+idH3DJ0yWyUI=", + version = "v0.0.0-20210819152826-bb2f42df81c9", ) go_repository( name = "org_golang_google_grpc", From 2f5f261d339cf5c237172a84ff8292da94c4e3e1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 18:44:31 +0000 Subject: [PATCH 1037/1518] chore(deps): update bufbuild/buf docker tag to v0.52.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dc9dc88edaa..93e74d00e7f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.51.1 + - image: bufbuild/buf:0.52.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.51.1 + - image: bufbuild/buf:0.52.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin From fb14b2000f1a83b1ea97011bfd9e860879c8b315 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 Aug 2021 20:14:16 +0000 Subject: [PATCH 1038/1518] fix(deps): update golang.org/x/oauth2 commit hash to 2bc19b1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d58dda8edc5..3f6aae244e0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index 85ca97c3b5f..dc658005889 100644 --- a/go.sum +++ b/go.sum @@ -214,8 +214,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab h1:llrcWN/wOwO+6gAyfBzxb5hZ+c3mriU/0+KNgYu6adA= -golang.org/x/oauth2 v0.0.0-20210817223510-7df4dd6e12ab/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 5c69ff64c70..c916b780ba5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:llrcWN/wOwO+6gAyfBzxb5hZ+c3mriU/0+KNgYu6adA=", - version = "v0.0.0-20210817223510-7df4dd6e12ab", + sum = "h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=", + version = "v0.0.0-20210819190943-2bc19b11175f", ) go_repository( name = "org_golang_x_sync", From 87798fa16a976ed1c290b9515855b2cb8a41682e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Aug 2021 02:03:40 +0000 Subject: [PATCH 1039/1518] fix(deps): update google.golang.org/genproto commit hash to 43fce44 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3f6aae244e0..28a9f0f8a78 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9 + google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index dc658005889..af37d062bdd 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9 h1:MdJH3KjoUNISwgBrVaW47FOcXXWs9C+idH3DJ0yWyUI= -google.golang.org/genproto v0.0.0-20210819152826-bb2f42df81c9/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1 h1:F0WcJZXJRyfaWMXUBAGq7Ba4MWDn+yeACpeEkDUkJ1A= +google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c916b780ba5..fe1c6d5e318 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:MdJH3KjoUNISwgBrVaW47FOcXXWs9C+idH3DJ0yWyUI=", - version = "v0.0.0-20210819152826-bb2f42df81c9", + sum = "h1:F0WcJZXJRyfaWMXUBAGq7Ba4MWDn+yeACpeEkDUkJ1A=", + version = "v0.0.0-20210820002220-43fce44e7af1", ) go_repository( name = "org_golang_google_grpc", From fe44e40bcaf758c0b43193af31fbf152bdf8fda8 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Sat, 21 Aug 2021 04:27:34 +0200 Subject: [PATCH 1040/1518] docs/related_projects.md: fix typo, add whitespace (#2291) Signed-off-by: Stephan Renatus --- docs/docs/related_projects.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/docs/related_projects.md b/docs/docs/related_projects.md index 0d691d52d8f..e9600bb9bd9 100644 --- a/docs/docs/related_projects.md +++ b/docs/docs/related_projects.md @@ -5,11 +5,19 @@ nav_order: 8 --- # Related projects -- [grps-dynamic-gateway](https://github.com/konsumer/grpc-dynamic-gateway) + +- [grpc-dynamic-gateway](https://github.com/konsumer/grpc-dynamic-gateway) + A dynamically configured alternative to the grpc-gateway written in Node. + - [rest2grpc](https://www.npmjs.com/package/rest2grpc) + A statically configured alternative to the grpc-gateway written in Node. + - The Envoy proxy [gRPC-JSON transcoder](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter) + An Envoy proxy filter that translates incoming JSON requests to gRPC and back. + - Google Cloud Platform [HTTP/JSON gRPC transcoding](https://cloud.google.com/endpoints/docs/grpc/transcoding) + A GCP product that behaves like the grpc-gateway. From e7e4a841bfa409d8f094048625b381ae589154ca Mon Sep 17 00:00:00 2001 From: Dan <5727701+dan-j@users.noreply.github.com> Date: Sat, 21 Aug 2021 04:17:27 +0100 Subject: [PATCH 1041/1518] fix: output protobufAny definition using correct JSON schema (#2292) * wip: add failing tests with google.protobuf.Any JSON marshalling * fix: output protobufAny definition using correct JSON schema * chore: regenerate files after code changes for google.protobuf.Any fixes * Goimports format test file Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/abe/api/swagger.yaml | 24 +- .../clients/abe/model_protobuf_any.go | 4 +- .../internal/clients/echo/api/swagger.yaml | 9 +- .../clients/echo/model_protobuf_any.go | 4 +- .../generateunboundmethods/api/swagger.yaml | 7 +- .../docs/ProtobufAny.md | 3 +- .../model_protobuf_any.go | 3 +- .../clients/responsebody/api/swagger.yaml | 24 +- .../clients/responsebody/docs/ProtobufAny.md | 3 +- .../responsebody/model_protobuf_any.go | 4 +- .../clients/unannotatedecho/api/swagger.yaml | 7 +- .../unannotatedecho/model_protobuf_any.go | 3 +- .../helloworld/helloworld.swagger.json | 9 +- .../a_bit_of_everything.swagger.json | 8 +- .../proto/examplepb/echo_service.swagger.json | 8 +- .../examplepb/flow_combination.swagger.json | 8 +- .../generate_unbound_methods.swagger.json | 9 +- .../examplepb/generated_input.swagger.json | 8 +- .../examplepb/non_standard_names.swagger.json | 8 +- .../examplepb/openapi_merge.swagger.json | 9 +- .../examplepb/openapi_merge_a.swagger.json | 8 +- .../examplepb/openapi_merge_b.swagger.json | 8 +- .../response_body_service.swagger.json | 8 +- .../proto/examplepb/stream.swagger.json | 8 +- .../unannotated_echo_service.swagger.json | 9 +- .../examplepb/use_go_template.swagger.json | 9 +- .../proto/examplepb/wrappers.swagger.json | 8 +- .../proto/pathenum/path_enum.swagger.json | 9 +- .../internal/proto/sub/message.swagger.json | 9 +- .../internal/proto/sub2/message.swagger.json | 9 +- .../apiconfig/apiconfig.swagger.json | 9 +- .../openapiconfig/openapiconfig.swagger.json | 9 +- .../internal/genopenapi/BUILD.bazel | 1 + .../internal/genopenapi/template.go | 28 +++ .../internal/genopenapi/template_test.go | 209 ++++++++++++++++++ .../options/annotations.swagger.json | 9 +- .../options/openapiv2.swagger.json | 9 +- .../internal/examplepb/example.swagger.json | 8 +- .../examplepb/non_standard_names.swagger.json | 8 +- .../internal/examplepb/proto2.swagger.json | 8 +- .../internal/examplepb/proto3.swagger.json | 8 +- 41 files changed, 329 insertions(+), 224 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index a637ecd176d..9ffa0667532 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2901,10 +2901,8 @@ definitions: status: code: 0 details: - - typeUrl: "typeUrl" - value: "value" - - typeUrl: "typeUrl" - value: "value" + - '@type': "@type" + - '@type': "@type" message: "message" examplepbErrorObject: type: "object" @@ -2958,7 +2956,7 @@ definitions: protobufAny: type: "object" properties: - typeUrl: + '@type': type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ @@ -2979,12 +2977,6 @@ definitions: \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ \ with implementation specific semantics." - value: - type: "string" - format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified\ - \ type." - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" description: "`Any` contains an arbitrary serialized protocol buffer message along\ \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ \ library provides support to pack/unpack Any values in the form\nof utility\ @@ -3014,8 +3006,8 @@ definitions: \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" example: - typeUrl: "typeUrl" - value: "value" + '@type': "@type" + additionalProperties: {} rpcStatus: type: "object" properties: @@ -3043,10 +3035,8 @@ definitions: example: code: 0 details: - - typeUrl: "typeUrl" - value: "value" - - typeUrl: "typeUrl" - value: "value" + - '@type': "@type" + - '@type': "@type" message: "message" subStringMessage: type: "object" diff --git a/examples/internal/clients/abe/model_protobuf_any.go b/examples/internal/clients/abe/model_protobuf_any.go index b5a16c530f3..59d98beccd8 100644 --- a/examples/internal/clients/abe/model_protobuf_any.go +++ b/examples/internal/clients/abe/model_protobuf_any.go @@ -13,7 +13,5 @@ package abe // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"typeUrl,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value string `json:"value,omitempty"` + Type_ string `json:"@type,omitempty"` } diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 2e57756aa29..1018d8da082 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -523,7 +523,7 @@ definitions: protobufAny: type: "object" properties: - typeUrl: + '@type': type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ @@ -544,12 +544,6 @@ definitions: \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ \ with implementation specific semantics." - value: - type: "string" - format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified\ - \ type." - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" description: "`Any` contains an arbitrary serialized protocol buffer message along\ \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ \ library provides support to pack/unpack Any values in the form\nof utility\ @@ -578,6 +572,7 @@ definitions: \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" + additionalProperties: {} protobufNullValue: type: "string" description: "`NullValue` is a singleton enumeration to represent the null value\ diff --git a/examples/internal/clients/echo/model_protobuf_any.go b/examples/internal/clients/echo/model_protobuf_any.go index 90c6c3f3d8f..a51f1e596c7 100644 --- a/examples/internal/clients/echo/model_protobuf_any.go +++ b/examples/internal/clients/echo/model_protobuf_any.go @@ -12,7 +12,5 @@ package echo // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"typeUrl,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value string `json:"value,omitempty"` + Type_ string `json:"@type,omitempty"` } diff --git a/examples/internal/clients/generateunboundmethods/api/swagger.yaml b/examples/internal/clients/generateunboundmethods/api/swagger.yaml index c64662ab118..2ff23c532ec 100644 --- a/examples/internal/clients/generateunboundmethods/api/swagger.yaml +++ b/examples/internal/clients/generateunboundmethods/api/swagger.yaml @@ -101,12 +101,9 @@ definitions: protobufAny: type: "object" properties: - typeUrl: + '@type': type: "string" - value: - type: "string" - format: "byte" - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + additionalProperties: {} rpcStatus: type: "object" properties: diff --git a/examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md b/examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md index 8305460df3c..029c2d3cceb 100644 --- a/examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md +++ b/examples/internal/clients/generateunboundmethods/docs/ProtobufAny.md @@ -3,8 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**TypeUrl** | **string** | | [optional] [default to null] -**Value** | **string** | | [optional] [default to null] +**Type_** | **string** | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/internal/clients/generateunboundmethods/model_protobuf_any.go b/examples/internal/clients/generateunboundmethods/model_protobuf_any.go index 21871e3df35..f8c0bf0d876 100644 --- a/examples/internal/clients/generateunboundmethods/model_protobuf_any.go +++ b/examples/internal/clients/generateunboundmethods/model_protobuf_any.go @@ -10,6 +10,5 @@ package generateunboundmethods type ProtobufAny struct { - TypeUrl string `json:"typeUrl,omitempty"` - Value string `json:"value,omitempty"` + Type_ string `json:"@type,omitempty"` } diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index d01d8183daf..bd7a206dbc1 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -148,7 +148,7 @@ definitions: protobufAny: type: "object" properties: - typeUrl: + '@type': type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ @@ -169,12 +169,6 @@ definitions: \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ \ with implementation specific semantics." - value: - type: "string" - format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified\ - \ type." - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" description: "`Any` contains an arbitrary serialized protocol buffer message along\ \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ \ library provides support to pack/unpack Any values in the form\nof utility\ @@ -204,8 +198,8 @@ definitions: \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" example: - typeUrl: "typeUrl" - value: "value" + '@type': "@type" + additionalProperties: {} rpcStatus: type: "object" properties: @@ -233,10 +227,8 @@ definitions: example: code: 0 details: - - typeUrl: "typeUrl" - value: "value" - - typeUrl: "typeUrl" - value: "value" + - '@type': "@type" + - '@type': "@type" message: "message" Stream result of examplepbResponseBodyOut: properties: @@ -250,8 +242,6 @@ definitions: error: code: 0 details: - - typeUrl: "typeUrl" - value: "value" - - typeUrl: "typeUrl" - value: "value" + - '@type': "@type" + - '@type': "@type" message: "message" diff --git a/examples/internal/clients/responsebody/docs/ProtobufAny.md b/examples/internal/clients/responsebody/docs/ProtobufAny.md index 50aaf9e772b..b70aaa32cf8 100644 --- a/examples/internal/clients/responsebody/docs/ProtobufAny.md +++ b/examples/internal/clients/responsebody/docs/ProtobufAny.md @@ -3,8 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**TypeUrl** | **string** | A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. | [optional] [default to null] -**Value** | **string** | Must be a valid serialized protocol buffer of the above specified type. | [optional] [default to null] +**Type_** | **string** | A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/internal/clients/responsebody/model_protobuf_any.go b/examples/internal/clients/responsebody/model_protobuf_any.go index a337ce42454..3b1831bcd74 100644 --- a/examples/internal/clients/responsebody/model_protobuf_any.go +++ b/examples/internal/clients/responsebody/model_protobuf_any.go @@ -12,7 +12,5 @@ package responsebody // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"typeUrl,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value string `json:"value,omitempty"` + Type_ string `json:"@type,omitempty"` } diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index a0ca2163b3e..f6ab2d13e99 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -361,12 +361,9 @@ definitions: protobufAny: type: "object" properties: - typeUrl: + '@type': type: "string" - value: - type: "string" - format: "byte" - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + additionalProperties: {} rpcStatus: type: "object" properties: diff --git a/examples/internal/clients/unannotatedecho/model_protobuf_any.go b/examples/internal/clients/unannotatedecho/model_protobuf_any.go index c1893febf6f..6697363afa8 100644 --- a/examples/internal/clients/unannotatedecho/model_protobuf_any.go +++ b/examples/internal/clients/unannotatedecho/model_protobuf_any.go @@ -11,6 +11,5 @@ package unannotatedecho type ProtobufAny struct { - TypeUrl string `json:"typeUrl,omitempty"` - Value string `json:"value,omitempty"` + Type_ string `json:"@type,omitempty"` } diff --git a/examples/internal/helloworld/helloworld.swagger.json b/examples/internal/helloworld/helloworld.swagger.json index b33e770ceda..26bb6f53c36 100644 --- a/examples/internal/helloworld/helloworld.swagger.json +++ b/examples/internal/helloworld/helloworld.swagger.json @@ -939,14 +939,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 9941f56d676..2dc248e56a1 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -3837,16 +3837,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 69c4fe2a44f..012bda34146 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -611,16 +611,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "protobufNullValue": { diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json index 24ce34d3e87..a59e8ffe4e9 100644 --- a/examples/internal/proto/examplepb/flow_combination.swagger.json +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -1063,16 +1063,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json index 4adb8a74a2a..b23bd6bbc1c 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json +++ b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json @@ -139,14 +139,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index a6ad8dcbe81..a8eed1b13b4 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -313,16 +313,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/non_standard_names.swagger.json b/examples/internal/proto/examplepb/non_standard_names.swagger.json index 335bddb6a0f..5531792f4b9 100644 --- a/examples/internal/proto/examplepb/non_standard_names.swagger.json +++ b/examples/internal/proto/examplepb/non_standard_names.swagger.json @@ -199,16 +199,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/openapi_merge.swagger.json b/examples/internal/proto/examplepb/openapi_merge.swagger.json index 9b504281867..dbcaee8b96e 100644 --- a/examples/internal/proto/examplepb/openapi_merge.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge.swagger.json @@ -288,14 +288,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json index 0c61dc9f619..1b85e701852 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json @@ -194,16 +194,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json index 7311ba27083..49e68479ca9 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json @@ -113,16 +113,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 3136337cfc0..12c5022f1d2 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -215,16 +215,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 0aa911abcf4..fba2820fa01 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -440,16 +440,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 83eacefc671..25c886dc8c3 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -428,14 +428,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 18975ccfad1..90881b9ffc5 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -146,14 +146,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index b406df1c403..d898f99d6cb 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -426,16 +426,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/examples/internal/proto/pathenum/path_enum.swagger.json b/examples/internal/proto/pathenum/path_enum.swagger.json index bb34b61b522..3359b9828e3 100644 --- a/examples/internal/proto/pathenum/path_enum.swagger.json +++ b/examples/internal/proto/pathenum/path_enum.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/sub/message.swagger.json b/examples/internal/proto/sub/message.swagger.json index 590b213747f..9f88abdcd60 100644 --- a/examples/internal/proto/sub/message.swagger.json +++ b/examples/internal/proto/sub/message.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/examples/internal/proto/sub2/message.swagger.json b/examples/internal/proto/sub2/message.swagger.json index 090bc92d0c3..52762d9a71a 100644 --- a/examples/internal/proto/sub2/message.swagger.json +++ b/examples/internal/proto/sub2/message.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/internal/descriptor/apiconfig/apiconfig.swagger.json b/internal/descriptor/apiconfig/apiconfig.swagger.json index 685eb474e49..4ce32e78e84 100644 --- a/internal/descriptor/apiconfig/apiconfig.swagger.json +++ b/internal/descriptor/apiconfig/apiconfig.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/internal/descriptor/openapiconfig/openapiconfig.swagger.json b/internal/descriptor/openapiconfig/openapiconfig.swagger.json index c5388481f9c..a48ccf64974 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.swagger.json +++ b/internal/descriptor/openapiconfig/openapiconfig.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 7b449d3b85f..c2768a5fd64 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -51,6 +51,7 @@ go_test( "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//reflect/protodesc", "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/durationpb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index ff0ef171d18..d9cfcd303c8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -458,9 +458,37 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry } *schema.Properties = append(*schema.Properties, kv) } + + if msg.FQMN() == ".google.protobuf.Any" { + transformAnyForJSON(&schema, reg.GetUseJSONNamesForFields()) + } + return schema } +// transformAnyForJSON should be called when the schema object represents a google.protobuf.Any, and will replace the +// Properties slice with a single value for '@type'. We mutate the incorrectly named field so that we inherit the same +// documentation as specified on the original field in the protobuf descriptors. +func transformAnyForJSON(schema *openapiSchemaObject, useJSONNames bool) { + var typeFieldName string + if useJSONNames { + typeFieldName = "typeUrl" + } else { + typeFieldName = "type_url" + } + + for _, property := range *schema.Properties { + if property.Key == typeFieldName { + schema.AdditionalProperties = &openapiSchemaObject{} + schema.Properties = &openapiSchemaObjectProperties{keyVal{ + Key: "@type", + Value: property.Value, + }} + break + } + } +} + func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap, excludeFields []*descriptor.Field) { for name, msg := range messages { swgName, ok := fullyQualifiedNameToOpenAPIName(msg.FQMN(), reg) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 29d018d9856..b95f1a52ea0 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -20,6 +20,7 @@ import ( "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" @@ -2694,6 +2695,214 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { } } +// TestApplyTemplateProtobufAny tests that the protobufAny definition is correctly rendered with the @type field and +// allowing additional properties. +func TestApplyTemplateProtobufAny(t *testing.T) { + // checkProtobufAnyFormat verifies the only property should be @type and additional properties are allowed + checkProtobufAnyFormat := func(t *testing.T, protobufAny openapiSchemaObject) { + anyPropsJSON, err := protobufAny.Properties.MarshalJSON() + if err != nil { + t.Errorf("protobufAny.Properties.MarshalJSON(), got error = %v", err) + } + var anyPropsMap map[string]interface{} + if err := json.Unmarshal(anyPropsJSON, &anyPropsMap); err != nil { + t.Errorf("json.Unmarshal(), got error = %v", err) + } + + // @type should exist + if _, ok := anyPropsMap["@type"]; !ok { + t.Errorf("protobufAny.Properties missing key, \"@type\". got = %#v", anyPropsMap) + } + + // and @type should be the only property + if len(anyPropsMap) > 1 { + t.Errorf("len(protobufAny.Properties) = %v, want = %v", len(anyPropsMap), 1) + } + + // protobufAny should have additionalProperties allowed + if protobufAny.AdditionalProperties == nil { + t.Errorf("protobufAny.AdditionalProperties = nil, want not-nil") + } + } + + type args struct { + regConfig func(registry *descriptor.Registry) + msgContainsAny bool + } + tests := []struct { + name string + args args + wantNumDefinitions int + }{ + { + // our proto schema doesn't directly use protobufAny, but it is implicitly used by rpcStatus being + // automatically rendered + name: "default_protobufAny_from_rpcStatus", + args: args{ + msgContainsAny: false, + }, + wantNumDefinitions: 4, + }, + { + // we have a protobufAny in a message, it should contain a ref inside the custom message + name: "protobufAny_referenced_in_message", + args: args{ + msgContainsAny: true, + }, + wantNumDefinitions: 4, + }, + { + // we have a protobufAny in a message but with automatic rendering of rpcStatus disabled + name: "protobufAny_referenced_in_message_with_default_errors_disabled", + args: args{ + msgContainsAny: true, + regConfig: func(reg *descriptor.Registry) { + reg.SetDisableDefaultErrors(true) + }, + }, + wantNumDefinitions: 3, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + reqdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("name"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + respdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("EmptyMessage"), + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("EmptyMessage"), + ClientStreaming: proto.Bool(false), + ServerStreaming: proto.Bool(false), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + + req := &descriptor.Message{ + DescriptorProto: reqdesc, + } + resp := &descriptor.Message{ + DescriptorProto: respdesc, + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{reqdesc, respdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{req, resp}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: req, + ResponseType: resp, + }, + }, + }, + }, + } + + reg := descriptor.NewRegistry() + reg.SetGenerateUnboundMethods(true) + + if tt.args.regConfig != nil { + tt.args.regConfig(reg) + } + + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } + + protoFiles := []*descriptorpb.FileDescriptorProto{ + file.FileDescriptorProto, + } + + if tt.args.msgContainsAny { + // add an Any field to the request message + reqdesc.Field = append(reqdesc.Field, &descriptorpb.FieldDescriptorProto{ + Name: proto.String("any_value"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".google.protobuf.Any"), + Number: proto.Int32(2), + }) + + // update the dependencies to import it + file.Dependency = append(file.Dependency, "google/protobuf/any.proto") + + anyDescriptorProto := protodesc.ToFileDescriptorProto((&anypb.Any{}).ProtoReflect().Descriptor().ParentFile()) + anyDescriptorProto.SourceCodeInfo = &descriptorpb.SourceCodeInfo{} + + // prepend the anyDescriptorProto to the protoFiles slice so that the dependency can be resolved + protoFiles = append(append(make([]*descriptorpb.FileDescriptorProto, 0, len(protoFiles)+1), anyDescriptorProto), protoFiles[0:]...) + } + + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: protoFiles, + FileToGenerate: []string{file.GetName()}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } + + target, err := reg.LookupFile(file.GetName()) + if err != nil { + t.Fatalf("failed to lookup file from reg: %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(target), reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + if want, got, name := tt.wantNumDefinitions, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + } + + protobufAny, ok := result.Definitions["protobufAny"] + if !ok { + t.Error("expecting Definitions to contain protobufAny") + } + + checkProtobufAnyFormat(t, protobufAny) + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", file) + resultJSON, _ := json.Marshal(result) + t.Errorf("got: %s", resultJSON) + } + }) + } +} + func generateFieldsForJSONReservedName() []*descriptor.Field { fields := make([]*descriptor.Field, 0) fieldName := string("json_name") diff --git a/protoc-gen-openapiv2/options/annotations.swagger.json b/protoc-gen-openapiv2/options/annotations.swagger.json index e1c57d8cbba..c08c00fb1ce 100644 --- a/protoc-gen-openapiv2/options/annotations.swagger.json +++ b/protoc-gen-openapiv2/options/annotations.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/protoc-gen-openapiv2/options/openapiv2.swagger.json b/protoc-gen-openapiv2/options/openapiv2.swagger.json index c6aad71c90e..3f4f97c2da4 100644 --- a/protoc-gen-openapiv2/options/openapiv2.swagger.json +++ b/protoc-gen-openapiv2/options/openapiv2.swagger.json @@ -15,14 +15,11 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string" - }, - "value": { - "type": "string", - "format": "byte" } - } + }, + "additionalProperties": {} }, "rpcStatus": { "type": "object", diff --git a/runtime/internal/examplepb/example.swagger.json b/runtime/internal/examplepb/example.swagger.json index 0890b6c5f44..30ad9b68321 100644 --- a/runtime/internal/examplepb/example.swagger.json +++ b/runtime/internal/examplepb/example.swagger.json @@ -15,16 +15,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/runtime/internal/examplepb/non_standard_names.swagger.json b/runtime/internal/examplepb/non_standard_names.swagger.json index ba6625c4853..8ebf47dffbb 100644 --- a/runtime/internal/examplepb/non_standard_names.swagger.json +++ b/runtime/internal/examplepb/non_standard_names.swagger.json @@ -211,16 +211,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "protobufNullValue": { diff --git a/runtime/internal/examplepb/proto2.swagger.json b/runtime/internal/examplepb/proto2.swagger.json index 9afd057a50a..4b74065b8c6 100644 --- a/runtime/internal/examplepb/proto2.swagger.json +++ b/runtime/internal/examplepb/proto2.swagger.json @@ -15,16 +15,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { diff --git a/runtime/internal/examplepb/proto3.swagger.json b/runtime/internal/examplepb/proto3.swagger.json index e8d44736043..f05b4c7c57b 100644 --- a/runtime/internal/examplepb/proto3.swagger.json +++ b/runtime/internal/examplepb/proto3.swagger.json @@ -15,16 +15,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { From 0fb3fd04db628467e73153d9d27f75f1f9172538 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Aug 2021 18:26:45 +0000 Subject: [PATCH 1042/1518] fix(deps): update google.golang.org/genproto commit hash to 241b8fc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 28a9f0f8a78..dd27a7301e0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1 + google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index af37d062bdd..71c144c178e 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1 h1:F0WcJZXJRyfaWMXUBAGq7Ba4MWDn+yeACpeEkDUkJ1A= -google.golang.org/genproto v0.0.0-20210820002220-43fce44e7af1/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8 h1:XosVttQUxX8erNhEruTu053/VchgYuksoS9Bj/OITjU= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fe1c6d5e318..6854a2fb78c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:F0WcJZXJRyfaWMXUBAGq7Ba4MWDn+yeACpeEkDUkJ1A=", - version = "v0.0.0-20210820002220-43fce44e7af1", + sum = "h1:XosVttQUxX8erNhEruTu053/VchgYuksoS9Bj/OITjU=", + version = "v0.0.0-20210821163610-241b8fcbd6c8", ) go_repository( name = "org_golang_google_grpc", From ea7167f90a6974a0b736e69f6e03f97df1eacc7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 22 Aug 2021 17:16:29 -0400 Subject: [PATCH 1043/1518] fix(deps): update module github.com/golang/glog to v1 (#2299) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dd27a7301e0..42e5c7e2bb9 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.14 require ( github.com/antihax/optional v1.0.0 github.com/ghodss/yaml v1.0.0 - github.com/golang/glog v0.0.0-20210429001901-424d2337a529 + github.com/golang/glog v1.0.0 github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 diff --git a/go.sum b/go.sum index 71c144c178e..cb210f65cd1 100644 --- a/go.sum +++ b/go.sum @@ -58,8 +58,8 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529 h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU= -github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= diff --git a/repositories.bzl b/repositories.bzl index 6854a2fb78c..213d816a154 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -279,8 +279,8 @@ def go_repositories(): go_repository( name = "com_github_golang_glog", importpath = "github.com/golang/glog", - sum = "h1:2voWjNECnrZRbfwXxHB1/j8wa6xdKn85B5NzgVL/pTU=", - version = "v0.0.0-20210429001901-424d2337a529", + sum = "h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=", + version = "v1.0.0", ) go_repository( From 4cc45694e3f802aca8d5cb73dbef2c3ee493c006 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 24 Aug 2021 19:38:56 +0000 Subject: [PATCH 1044/1518] fix(deps): update google.golang.org/genproto commit hash to a4879c3 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 42e5c7e2bb9..9d7026f7394 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8 + google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index cb210f65cd1..cf0a9fed8d2 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8 h1:XosVttQUxX8erNhEruTu053/VchgYuksoS9Bj/OITjU= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89 h1:x1dY+qZWu7fKPOOo4mM9kMcUfVVlDvHreE17KGDho00= +google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 213d816a154..fe198a0ca6f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XosVttQUxX8erNhEruTu053/VchgYuksoS9Bj/OITjU=", - version = "v0.0.0-20210821163610-241b8fcbd6c8", + sum = "h1:x1dY+qZWu7fKPOOo4mM9kMcUfVVlDvHreE17KGDho00=", + version = "v0.0.0-20210824181836-a4879c3d0e89", ) go_repository( name = "org_golang_google_grpc", From 0fa52df62f825faebf50fd741bdfa9200c0a4b16 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 25 Aug 2021 19:34:14 +0000 Subject: [PATCH 1045/1518] chore(deps): update bufbuild/buf docker tag to v0.53.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 93e74d00e7f..fc1cca7730e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.52.0 + - image: bufbuild/buf:0.53.0 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.52.0 + - image: bufbuild/buf:0.53.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin From 1036e8758d4cbbf57b74aefa17646b9a3dadab3e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 25 Aug 2021 21:32:32 +0000 Subject: [PATCH 1046/1518] fix(deps): update google.golang.org/genproto commit hash to de86158 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9d7026f7394..c21463c8aa1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89 + google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index cf0a9fed8d2..05882e6b4f4 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89 h1:x1dY+qZWu7fKPOOo4mM9kMcUfVVlDvHreE17KGDho00= -google.golang.org/genproto v0.0.0-20210824181836-a4879c3d0e89/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A= +google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fe198a0ca6f..b6e26cbb61e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:x1dY+qZWu7fKPOOo4mM9kMcUfVVlDvHreE17KGDho00=", - version = "v0.0.0-20210824181836-a4879c3d0e89", + sum = "h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A=", + version = "v0.0.0-20210825212027-de86158e7fda", ) go_repository( name = "org_golang_google_grpc", From 77176e34405cdbf4e8fe7c925f2f37c25aff0d77 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 27 Aug 2021 22:20:58 +0000 Subject: [PATCH 1047/1518] fix(deps): update google.golang.org/genproto commit hash to 25e5f79 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c21463c8aa1..e60800e8c44 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda + google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 05882e6b4f4..a2b51c294c0 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A= -google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06 h1:Ogdiaj9EMVKYHnDsESxwlTr/k5eqCdwoQVJEcdg0NbE= +google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b6e26cbb61e..8fd5c5dcc21 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iT5uhT54PtbqUsWddv/nnEWdE5e/MTr+Nv3vjxlBP1A=", - version = "v0.0.0-20210825212027-de86158e7fda", + sum = "h1:Ogdiaj9EMVKYHnDsESxwlTr/k5eqCdwoQVJEcdg0NbE=", + version = "v0.0.0-20210827211047-25e5f791fe06", ) go_repository( name = "org_golang_google_grpc", From dbe2d42a054ca87837229deb159476c45c79353b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 28 Aug 2021 16:11:46 +0000 Subject: [PATCH 1048/1518] fix(deps): update google.golang.org/genproto commit hash to 66f60bf --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e60800e8c44..b3c4605c289 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06 + google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index a2b51c294c0..35610c87dca 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06 h1:Ogdiaj9EMVKYHnDsESxwlTr/k5eqCdwoQVJEcdg0NbE= -google.golang.org/genproto v0.0.0-20210827211047-25e5f791fe06/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8fd5c5dcc21..11c296b8b54 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Ogdiaj9EMVKYHnDsESxwlTr/k5eqCdwoQVJEcdg0NbE=", - version = "v0.0.0-20210827211047-25e5f791fe06", + sum = "h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs=", + version = "v0.0.0-20210828152312-66f60bf46e71", ) go_repository( name = "org_golang_google_grpc", From 378519cbdc61896716d6741bf779131d69ea8e4a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 30 Aug 2021 19:32:52 +0000 Subject: [PATCH 1049/1518] chore(deps): update bufbuild/buf docker tag to v0.54.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fc1cca7730e..f06a7ddddac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -125,7 +125,7 @@ jobs: - run: gorelease -base=v2.5.0 proto_lint: docker: - - image: bufbuild/buf:0.53.0 + - image: bufbuild/buf:0.54.1 steps: - checkout - run: buf build @@ -133,7 +133,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.53.0 + - image: bufbuild/buf:0.54.1 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin From f81c435e72054a3fd141c7c9a9d64de291f363de Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 30 Aug 2021 20:43:31 +0000 Subject: [PATCH 1050/1518] fix(deps): update google.golang.org/genproto commit hash to 0bac4d2 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b3c4605c289..399f54ae018 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 + google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 35610c87dca..90e9af308df 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea h1:5eMUso2GVOxypVH1fR4oKgDobrvi4DHctJ4fVk66s/4= +google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 11c296b8b54..c7d952ba7f8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:z+ErRPu0+KS02Td3fOAgdX+lnPDh/VyaABEJPD4JRQs=", - version = "v0.0.0-20210828152312-66f60bf46e71", + sum = "h1:5eMUso2GVOxypVH1fR4oKgDobrvi4DHctJ4fVk66s/4=", + version = "v0.0.0-20210830153122-0bac4d21c8ea", ) go_repository( name = "org_golang_google_grpc", From 455f2e3fa7ceae87732ecef79b70602d975b7a84 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 31 Aug 2021 03:55:23 +0000 Subject: [PATCH 1051/1518] fix(deps): update google.golang.org/genproto commit hash to fe13028 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 399f54ae018..53fdb66881c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea + google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 90e9af308df..61f09dedee5 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea h1:5eMUso2GVOxypVH1fR4oKgDobrvi4DHctJ4fVk66s/4= -google.golang.org/genproto v0.0.0-20210830153122-0bac4d21c8ea/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c7d952ba7f8..31201465ebc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5eMUso2GVOxypVH1fR4oKgDobrvi4DHctJ4fVk66s/4=", - version = "v0.0.0-20210830153122-0bac4d21c8ea", + sum = "h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8=", + version = "v0.0.0-20210831024726-fe130286e0e2", ) go_repository( name = "org_golang_google_grpc", From 9185677c9fd11e0e18ae55eff719bb3f6ddbca3e Mon Sep 17 00:00:00 2001 From: Vegard Solheim Theriault Date: Wed, 1 Sep 2021 03:28:28 +0200 Subject: [PATCH 1052/1518] fix: Set Content-Type from marshaler on stream error (#2313) The marshaler was used to marshal the body of a stream error, but the content type was not used, leaving it as `text/plain; charset=utf-8`. This uses the content type as defined by the marshaler if the headers have not already been written. --- runtime/handler.go | 4 +++- runtime/handler_test.go | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/runtime/handler.go b/runtime/handler.go index 3960231b885..d1e21df4810 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -202,10 +202,12 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error) { st := mux.streamErrorHandler(ctx, err) + msg := errorChunk(st) if !wroteHeader { + w.Header().Set("Content-Type", marshaler.ContentType(msg)) w.WriteHeader(HTTPStatusFromCode(st.Code())) } - buf, merr := marshaler.Marshal(errorChunk(st)) + buf, merr := marshaler.Marshal(msg) if merr != nil { grpclog.Infof("Failed to marshal an error: %v", merr) return diff --git a/runtime/handler_test.go b/runtime/handler_test.go index d227c57f176..98af7fe7ec3 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -109,6 +109,9 @@ func TestForwardResponseStream(t *testing.T) { t.Errorf("Failed to read response body with %v", err) } w.Body.Close() + if len(body) > 0 && w.Header.Get("Content-Type") != "application/json" { + t.Errorf("Content-Type %s want application/json", w.Header.Get("Content-Type")) + } var want []byte for i, msg := range tt.msgs { @@ -239,6 +242,9 @@ func TestForwardResponseStreamCustomMarshaler(t *testing.T) { t.Errorf("Failed to read response body with %v", err) } w.Body.Close() + if len(body) > 0 && w.Header.Get("Content-Type") != "Custom-Content-Type" { + t.Errorf("Content-Type %s want Custom-Content-Type", w.Header.Get("Content-Type")) + } var want []byte for _, msg := range tt.msgs { From e257a356cb69ada9b82b5c4bfe7a53372e84666b Mon Sep 17 00:00:00 2001 From: alperengozeten <70811258+alperengozeten@users.noreply.github.com> Date: Fri, 3 Sep 2021 03:18:02 +0300 Subject: [PATCH 1053/1518] Naming strategy (#2310) * naming-strategy start * main_test change * main_test make it more readable * bazel build * Regenerate files Co-authored-by: Johan Brandhorst-Satzkorn --- internal/descriptor/registry.go | 43 +++- protoc-gen-openapiv2/defs.bzl | 14 ++ .../internal/genopenapi/BUILD.bazel | 2 + .../internal/genopenapi/naming.go | 110 +++++++++ .../internal/genopenapi/naming_test.go | 53 ++++ .../internal/genopenapi/template.go | 60 +---- .../internal/genopenapi/template_test.go | 49 +++- protoc-gen-openapiv2/main.go | 21 +- protoc-gen-openapiv2/main_test.go | 229 ++++++++++++------ 9 files changed, 435 insertions(+), 146 deletions(-) create mode 100644 protoc-gen-openapiv2/internal/genopenapi/naming.go create mode 100644 protoc-gen-openapiv2/internal/genopenapi/naming_test.go diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index ff6e9542a77..7576e06026b 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -61,11 +61,15 @@ type Registry struct { // with gRPC-Gateway response, if it uses json tags for marshaling. useJSONNamesForFields bool - // useFQNForOpenAPIName if true OpenAPI names will use the full qualified name (FQN) from proto definition, - // and generate a dot-separated OpenAPI name concatenating all elements from the proto FQN. - // If false, the default behavior is to concat the last 2 elements of the FQN if they are unique, otherwise concat - // all the elements of the FQN without any separator - useFQNForOpenAPIName bool + // openAPINamingStrategy is the naming strategy to use for assigning OpenAPI field and parameter names. This can be one of the following: + // - `legacy`: use the legacy naming strategy from protoc-gen-swagger, that generates unique but not necessarily + // maximally concise names. Components are concatenated directly, e.g., `MyOuterMessageMyNestedMessage`. + // - `simple`: use a simple heuristic for generating unique and concise names. Components are concatenated using + // dots as a separator, e.g., `MyOuterMesage.MyNestedMessage` (if `MyNestedMessage` alone is unique, + // `MyNestedMessage` will be used as the OpenAPI name). + // - `fqn`: always use the fully-qualified name of the proto message (leading dot removed) as the OpenAPI + // name. + openAPINamingStrategy string // useGoTemplate determines whether you want to use GO templates // in your protofile comments @@ -133,12 +137,13 @@ type annotationIdentifier struct { // NewRegistry returns a new Registry. func NewRegistry() *Registry { return &Registry{ - msgs: make(map[string]*Message), - enums: make(map[string]*Enum), - files: make(map[string]*File), - pkgMap: make(map[string]string), - pkgAliases: make(map[string]string), - externalHTTPRules: make(map[string][]*annotations.HttpRule), + msgs: make(map[string]*Message), + enums: make(map[string]*Enum), + files: make(map[string]*File), + pkgMap: make(map[string]string), + pkgAliases: make(map[string]string), + externalHTTPRules: make(map[string][]*annotations.HttpRule), + openAPINamingStrategy: "legacy", repeatedPathParamSeparator: repeatedFieldSeparator{ name: "csv", sep: ',', @@ -506,13 +511,15 @@ func (r *Registry) GetUseJSONNamesForFields() bool { } // SetUseFQNForOpenAPIName sets useFQNForOpenAPIName +// Deprecated: use SetOpenAPINamingStrategy instead. func (r *Registry) SetUseFQNForOpenAPIName(use bool) { - r.useFQNForOpenAPIName = use + r.openAPINamingStrategy = "fqn" } // GetUseFQNForOpenAPIName returns useFQNForOpenAPIName +// Deprecated: Use GetOpenAPINamingStrategy(). func (r *Registry) GetUseFQNForOpenAPIName() bool { - return r.useFQNForOpenAPIName + return r.openAPINamingStrategy == "fqn" } // GetMergeFileName return the target merge OpenAPI file name @@ -520,6 +527,16 @@ func (r *Registry) GetMergeFileName() string { return r.mergeFileName } +// SetOpenAPINamingStrategy sets the naming strategy to be used. +func (r *Registry) SetOpenAPINamingStrategy(strategy string) { + r.openAPINamingStrategy = strategy +} + +// GetOpenAPINamingStrategy retrieves the naming strategy that is in use. +func (r *Registry) GetOpenAPINamingStrategy() string { + return r.openAPINamingStrategy +} + // SetUseGoTemplate sets useGoTemplate func (r *Registry) SetUseGoTemplate(use bool) { r.useGoTemplate = use diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 36864a280bf..c8668f220fe 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -58,6 +58,7 @@ def _run_proto_gen_openapi( repeated_path_param_separator, include_package_in_tags, fqn_for_openapi_name, + openapi_naming_strategy, use_go_templates, disable_default_errors, enums_as_ints, @@ -87,6 +88,9 @@ def _run_proto_gen_openapi( if fqn_for_openapi_name: args.add("--openapiv2_opt", "fqn_for_openapi_name=true") + if openapi_naming_strategy: + args.add("--openapiv2_opt", "openapi_naming_strategy=%s" % openapi_naming_strategy) + if generate_unbound_methods: args.add("--openapiv2_opt", "generate_unbound_methods=true") @@ -201,6 +205,7 @@ def _proto_gen_openapi_impl(ctx): repeated_path_param_separator = ctx.attr.repeated_path_param_separator, include_package_in_tags = ctx.attr.include_package_in_tags, fqn_for_openapi_name = ctx.attr.fqn_for_openapi_name, + openapi_naming_strategy = ctx.attr.openapi_naming_strategy, use_go_templates = ctx.attr.use_go_templates, disable_default_errors = ctx.attr.disable_default_errors, enums_as_ints = ctx.attr.enums_as_ints, @@ -261,6 +266,15 @@ protoc_gen_openapiv2 = rule( " qualified names from the proto definition" + " (ie my.package.MyMessage.MyInnerMessage", ), + "openapi_naming_strategy": attr.string( + default = "", + mandatory = False, + values = ["", "simple", "legacy", "fqn"], + doc = "configures how OpenAPI names are determined." + + " Allowed values are `` (empty), `simple`, `legacy` and `fqn`." + + " If unset, either `legacy` or `fqn` are selected, depending" + + " on the value of the `fqn_for_openapi_name` setting", + ), "use_go_templates": attr.bool( default = False, mandatory = False, diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index c2768a5fd64..ee267caab1a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -9,6 +9,7 @@ go_library( "generator.go", "helpers.go", "helpers_go111_old.go", + "naming.go", "template.go", "types.go", ], @@ -36,6 +37,7 @@ go_test( size = "small", srcs = [ "cycle_test.go", + "naming_test.go", "template_test.go", ], embed = [":genopenapi"], diff --git a/protoc-gen-openapiv2/internal/genopenapi/naming.go b/protoc-gen-openapiv2/internal/genopenapi/naming.go new file mode 100644 index 00000000000..338ea2dcd0f --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/naming.go @@ -0,0 +1,110 @@ +package genopenapi + +import ( + "reflect" + "strings" +) + +// LookupNamingStrategy looks up the given naming strategy and returns the naming +// strategy function for it. The naming strategy function takes in the list of all +// fully-qualified proto message names, and returns a mapping from fully-qualified +// name to OpenAPI name. +func LookupNamingStrategy(strategyName string) func([]string) map[string]string { + switch strings.ToLower(strategyName) { + case "fqn": + return resolveNamesFQN + case "legacy": + return resolveNamesLegacy + case "simple": + return resolveNamesSimple + } + return nil +} + +// resolveNamesFQN uses the fully-qualified proto message name as the +// OpenAPI name, stripping the leading dot. +func resolveNamesFQN(messages []string) map[string]string { + uniqueNames := make(map[string]string, len(messages)) + for _, p := range messages { + // strip leading dot from proto fqn + uniqueNames[p] = p[1:] + } + return uniqueNames +} + +// resolveNamesLegacy takes the names of all proto messages and generates unique references by +// applying the legacy heuristics for deriving unique names: starting from the bottom of the name hierarchy, it +// determines the minimum number of components necessary to yield a unique name, adds one +// to that number, and then concatenates those last components with no separator in between +// to form a unique name. +// +// E.g., if the fully qualified name is `.a.b.C.D`, and there are other messages with fully +// qualified names ending in `.D` but not in `.C.D`, it assigns the unique name `bCD`. +func resolveNamesLegacy(messages []string) map[string]string { + return resolveNamesUniqueWithContext(messages, 1, "") +} + +// resolveNamesSimple takes the names of all proto messages and generates unique references by using a simple +// heuristic: starting from the bottom of the name hierarchy, it determines the minimum +// number of components necessary to yield a unique name, and then concatenates those last +// components with a "." separator in between to form a unique name. +// +// E.g., if the fully qualified name is `.a.b.C.D`, and there are other messages with +// fully qualified names ending in `.D` but not in `.C.D`, it assigns the unique name `C.D`. +func resolveNamesSimple(messages []string) map[string]string { + return resolveNamesUniqueWithContext(messages, 0, ".") +} + +// Take the names of every proto message and generates a unique reference by: +// first, separating each message name into its components by splitting at dots. Then, +// take the shortest suffix slice from each components slice that is unique among all +// messages, and convert it into a component name by taking extraContext additional +// components into consideration and joining all components with componentSeparator. +func resolveNamesUniqueWithContext(messages []string, extraContext int, componentSeparator string) map[string]string { + packagesByDepth := make(map[int][][]string) + uniqueNames := make(map[string]string) + + hierarchy := func(pkg string) []string { + return strings.Split(pkg, ".") + } + + for _, p := range messages { + h := hierarchy(p) + for depth := range h { + if _, ok := packagesByDepth[depth]; !ok { + packagesByDepth[depth] = make([][]string, 0) + } + packagesByDepth[depth] = append(packagesByDepth[depth], h[len(h)-depth:]) + } + } + + count := func(list [][]string, item []string) int { + i := 0 + for _, element := range list { + if reflect.DeepEqual(element, item) { + i++ + } + } + return i + } + + for _, p := range messages { + h := hierarchy(p) + depth := 0 + for ; depth < len(h); depth++ { + // depth + extraContext > 0 ensures that we only break for values of depth when the + // resulting slice of name components is non-empty. Otherwise, we would return the + // empty string as the concise unique name is len(messages) == 1 (which is + // technically correct). + if depth+extraContext > 0 && count(packagesByDepth[depth], h[len(h)-depth:]) == 1 { + break + } + } + start := len(h) - depth - extraContext + if start < 0 { + start = 0 + } + uniqueNames[p] = strings.Join(h[start:], componentSeparator) + } + return uniqueNames +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/naming_test.go b/protoc-gen-openapiv2/internal/genopenapi/naming_test.go new file mode 100644 index 00000000000..c039510fc60 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/naming_test.go @@ -0,0 +1,53 @@ +package genopenapi + +import "testing" + +func TestNaming(t *testing.T) { + type expectedNames struct { + fqn, legacy, simple string + } + messageNameToExpected := map[string]expectedNames{ + ".A": {"A", "A", "A"}, + ".a.B.C": {"a.B.C", "aBC", "B.C"}, + ".a.D.C": {"a.D.C", "aDC", "D.C"}, + ".a.E.F": {"a.E.F", "aEF", "a.E.F"}, + ".b.E.F": {"b.E.F", "bEF", "b.E.F"}, + ".c.G.H": {"c.G.H", "GH", "H"}, + } + + allMessageNames := make([]string, 0, len(messageNameToExpected)) + for msgName := range messageNameToExpected { + allMessageNames = append(allMessageNames, msgName) + } + + t.Run("fqn", func(t *testing.T) { + uniqueNames := resolveNamesFQN(allMessageNames) + for _, msgName := range allMessageNames { + expected := messageNameToExpected[msgName].fqn + actual := uniqueNames[msgName] + if expected != actual { + t.Errorf("fqn unique name %q does not match expected name %q", actual, expected) + } + } + }) + t.Run("legacy", func(t *testing.T) { + uniqueNames := resolveNamesLegacy(allMessageNames) + for _, msgName := range allMessageNames { + expected := messageNameToExpected[msgName].legacy + actual := uniqueNames[msgName] + if expected != actual { + t.Errorf("legacy unique name %q does not match expected name %q", actual, expected) + } + } + }) + t.Run("simple", func(t *testing.T) { + uniqueNames := resolveNamesSimple(allMessageNames) + for _, msgName := range allMessageNames { + expected := messageNameToExpected[msgName].simple + actual := uniqueNames[msgName] + if expected != actual { + t.Errorf("simple unique name %q does not match expected name %q", actual, expected) + } + } + }) +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index d9cfcd303c8..19487b13cea 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -713,7 +713,7 @@ func fullyQualifiedNameToOpenAPIName(fqn string, reg *descriptor.Registry) (stri ret, ok := mapping[fqn] return ret, ok } - mapping := resolveFullyQualifiedNameToOpenAPINames(append(reg.GetAllFQMNs(), reg.GetAllFQENs()...), reg.GetUseFQNForOpenAPIName()) + mapping := resolveFullyQualifiedNameToOpenAPINames(append(reg.GetAllFQMNs(), reg.GetAllFQENs()...), reg.GetOpenAPINamingStrategy()) registriesSeen[reg] = mapping ret, ok := mapping[fqn] return ret, ok @@ -738,59 +738,13 @@ func lookupMsgAndOpenAPIName(location, name string, reg *descriptor.Registry) (* var registriesSeen = map[*descriptor.Registry]map[string]string{} var registriesSeenMutex sync.Mutex -// Take the names of every proto and "uniq-ify" them. The idea is to produce a -// set of names that meet a couple of conditions. They must be stable, they -// must be unique, and they must be shorter than the FQN. -// -// This likely could be made better. This will always generate the same names -// but may not always produce optimal names. This is a reasonably close -// approximation of what they should look like in most cases. -func resolveFullyQualifiedNameToOpenAPINames(messages []string, useFQNForOpenAPIName bool) map[string]string { - packagesByDepth := make(map[int][][]string) - uniqueNames := make(map[string]string) - - hierarchy := func(pkg string) []string { - return strings.Split(pkg, ".") - } - - for _, p := range messages { - h := hierarchy(p) - for depth := range h { - if _, ok := packagesByDepth[depth]; !ok { - packagesByDepth[depth] = make([][]string, 0) - } - packagesByDepth[depth] = append(packagesByDepth[depth], h[len(h)-depth:]) - } - } - - count := func(list [][]string, item []string) int { - i := 0 - for _, element := range list { - if reflect.DeepEqual(element, item) { - i++ - } - } - return i - } - - for _, p := range messages { - if useFQNForOpenAPIName { - // strip leading dot from proto fqn - uniqueNames[p] = p[1:] - } else { - h := hierarchy(p) - for depth := 0; depth < len(h); depth++ { - if count(packagesByDepth[depth], h[len(h)-depth:]) == 1 { - uniqueNames[p] = strings.Join(h[len(h)-depth-1:], "") - break - } - if depth == len(h)-1 { - uniqueNames[p] = strings.Join(h, "") - } - } - } +// Take the names of every proto message and generate a unique reference for each, according to the given strategy. +func resolveFullyQualifiedNameToOpenAPINames(messages []string, namingStrategy string) map[string]string { + strategyFn := LookupNamingStrategy(namingStrategy) + if strategyFn == nil { + return nil } - return uniqueNames + return strategyFn(messages) } var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index b95f1a52ea0..a62b6cb4406 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3063,10 +3063,10 @@ func BenchmarkTemplateToOpenAPIPath(b *testing.B) { func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { var tests = []struct { - input string - output string - listOfFQMNs []string - useFQNForOpenAPIName bool + input string + output string + listOfFQMNs []string + namingStrategy string }{ { ".a.b.C", @@ -3074,7 +3074,15 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { []string{ ".a.b.C", }, - false, + "legacy", + }, + { + ".a.b.C", + "C", + []string{ + ".a.b.C", + }, + "simple", }, { ".a.b.C", @@ -3083,7 +3091,16 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { ".a.C", ".a.b.C", }, - false, + "legacy", + }, + { + ".a.b.C", + "b.C", + []string{ + ".a.C", + ".a.b.C", + }, + "simple", }, { ".a.b.C", @@ -3093,7 +3110,17 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { ".a.C", ".a.b.C", }, - false, + "legacy", + }, + { + ".a.b.C", + "b.C", + []string{ + ".C", + ".a.C", + ".a.b.C", + }, + "simple", }, { ".a.b.C", @@ -3103,16 +3130,16 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { ".a.C", ".a.b.C", }, - true, + "fqn", }, } for _, data := range tests { - names := resolveFullyQualifiedNameToOpenAPINames(data.listOfFQMNs, data.useFQNForOpenAPIName) + names := resolveFullyQualifiedNameToOpenAPINames(data.listOfFQMNs, data.namingStrategy) output := names[data.input] if output != data.output { - t.Errorf("Expected fullyQualifiedNameToOpenAPIName(%v) to be %s but got %s", - data.input, data.output, output) + t.Errorf("Expected fullyQualifiedNameToOpenAPIName(%v, %s) to be %s but got %s", + data.input, data.namingStrategy, data.output, output) } } } diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index ff104d9f842..66811110e59 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -26,7 +26,8 @@ var ( versionFlag = flag.Bool("version", false, "print the current version") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") - useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage") + useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage). DEPRECATED: prefer `openapi_naming_strategy=fqn`") + openAPINamingStrategy = flag.String("openapi_naming_strategy", "", "use the given OpenAPI naming strategy. Allowed values are `legacy`, `fqn`, `simple`. If unset, either `legacy` or `fqn` are selected, depending on the value of the `fqn_for_openapi_name` flag") useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") @@ -85,7 +86,25 @@ func main() { reg.SetUseJSONNamesForFields(*useJSONNamesForFields) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) reg.SetIncludePackageInTags(*includePackageInTags) + reg.SetUseFQNForOpenAPIName(*useFQNForOpenAPIName) + // Set the naming strategy either directly from the flag, or via the value of the legacy fqn_for_openapi_name + // flag. + namingStrategy := *openAPINamingStrategy + if *useFQNForOpenAPIName { + if namingStrategy != "" { + glog.Fatal("The deprecated `fqn_for_openapi_name` flag must remain unset if `openapi_naming_strategy` is set.") + } + glog.Warning("The `fqn_for_openapi_name` flag is deprecated. Please use `openapi_naming_strategy=fqn` instead.") + namingStrategy = "fqn" + } else if namingStrategy == "" { + namingStrategy = "legacy" + } + if strategyFn := genopenapi.LookupNamingStrategy(namingStrategy); strategyFn == nil { + emitError(fmt.Errorf("invalid naming strategy %q", namingStrategy)) + return + } + reg.SetOpenAPINamingStrategy(namingStrategy) reg.SetUseGoTemplate(*useGoTemplate) reg.SetEnumsAsInts(*enumsAsInts) reg.SetDisableDefaultErrors(*disableDefaultErrors) diff --git a/protoc-gen-openapiv2/main_test.go b/protoc-gen-openapiv2/main_test.go index 80feea35d0d..e1b9a1f9e63 100644 --- a/protoc-gen-openapiv2/main_test.go +++ b/protoc-gen-openapiv2/main_test.go @@ -22,98 +22,175 @@ func TestParseReqParam(t *testing.T) { importPathV string mergeFileNameV string useFQNForOpenAPINameV bool + openAPINamingStrategyV string }{ { // this one must be first - with no leading clearFlags call it // verifies our expectation of default values as we reset by // clearFlags - name: "Test 0", - expected: map[string]string{}, - request: "", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "-", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 0", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "-", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 1", - expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, - request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, - fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "apidocs", + name: "Test 1", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", + allowDeleteBodyV: true, + allowMergeV: true, + allowRepeatedFieldsInBodyV: true, + includePackageInTagsV: true, + fileV: "./foo.pb", + importPathV: "/bar/baz", + mergeFileNameV: "apidocs", }, { - name: "Test 2", - expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, - request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, - fileV: "./foo.pb", importPathV: "/bar/baz", mergeFileNameV: "test_name", + name: "Test 2", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", + allowDeleteBodyV: true, + allowMergeV: true, + allowRepeatedFieldsInBodyV: true, + includePackageInTagsV: true, + fileV: "./foo.pb", + importPathV: "/bar/baz", + mergeFileNameV: "test_name", }, { - name: "Test 3", - expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, - request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 3", + expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, + request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 4", - expected: map[string]string{}, - request: "", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 4", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 5", - expected: map[string]string{}, - request: "unknown_param=17", - expectedError: errors.New("cannot set flag unknown_param=17: no such flag -unknown_param"), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 5", + expected: map[string]string{}, + request: "unknown_param=17", + expectedError: errors.New("cannot set flag unknown_param=17: no such flag -unknown_param"), + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 6", - expected: map[string]string{}, - request: "Mfoo", - expectedError: errors.New("cannot set flag Mfoo: no such flag -Mfoo"), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 6", + expected: map[string]string{}, + request: "Mfoo", + expectedError: errors.New("cannot set flag Mfoo: no such flag -Mfoo"), + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 7", - expected: map[string]string{}, - request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name", - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: true, includePackageInTagsV: true, - fileV: "", importPathV: "", mergeFileNameV: "", + name: "Test 7", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name", + allowDeleteBodyV: true, + allowMergeV: true, + allowRepeatedFieldsInBodyV: true, + includePackageInTagsV: true, + fileV: "", + importPathV: "", + mergeFileNameV: "", }, { - name: "Test 8", - expected: map[string]string{}, - request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", - expectedError: errors.New(`cannot set flag allow_repeated_fields_in_body=3: parse error`), - allowDeleteBodyV: true, allowMergeV: true, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 8", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", + expectedError: errors.New(`cannot set flag allow_repeated_fields_in_body=3: parse error`), + allowDeleteBodyV: true, + allowMergeV: true, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 9", - expected: map[string]string{}, - request: "include_package_in_tags=3", - expectedError: errors.New(`cannot set flag include_package_in_tags=3: parse error`), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 9", + expected: map[string]string{}, + request: "include_package_in_tags=3", + expectedError: errors.New(`cannot set flag include_package_in_tags=3: parse error`), + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 10", - expected: map[string]string{}, - request: "fqn_for_openapi_name=3", - expectedError: errors.New(`cannot set flag fqn_for_openapi_name=3: parse error`), - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, useFQNForOpenAPINameV: false, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 10", + expected: map[string]string{}, + request: "fqn_for_openapi_name=3", + expectedError: errors.New(`cannot set flag fqn_for_openapi_name=3: parse error`), + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 11", - expected: map[string]string{}, - request: "fqn_for_openapi_name=true", - allowDeleteBodyV: false, allowMergeV: false, allowRepeatedFieldsInBodyV: false, includePackageInTagsV: false, useFQNForOpenAPINameV: true, - fileV: "stdin", importPathV: "", mergeFileNameV: "apidocs", + name: "Test 11", + expected: map[string]string{}, + request: "fqn_for_openapi_name=true", + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: true, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", + }, + { + name: "Test 12", + expected: map[string]string{}, + request: "openapi_naming_strategy=simple", + allowDeleteBodyV: false, + allowMergeV: false, + allowRepeatedFieldsInBodyV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: false, + openAPINamingStrategyV: "simple", + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, } @@ -140,15 +217,26 @@ func TestParseReqParam(t *testing.T) { tt.Errorf("expected error malformed, expected %q, got %q", tc.expectedError.Error(), err.Error()) } } - checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.useFQNForOpenAPINameV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) + checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.useFQNForOpenAPINameV, tc.openAPINamingStrategyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) clearFlags() }) } - } -func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePackageInTagsV bool, useFQNForOpenAPINameV bool, fileV, importPathV, mergeFileNameV string, t *testing.T, tid int) { +func checkFlags( + allowDeleteV, + allowMergeV, + allowRepeatedFieldsInBodyV, + includePackageInTagsV bool, + useFQNForOpenAPINameV bool, + openAPINamingStrategyV, + fileV, + importPathV, + mergeFileNameV string, + t *testing.T, + tid int, +) { if *importPrefix != importPathV { t.Errorf("Test %v: import_prefix misparsed, expected '%v', got '%v'", tid, importPathV, *importPrefix) } @@ -173,6 +261,9 @@ func checkFlags(allowDeleteV, allowMergeV, allowRepeatedFieldsInBodyV, includePa if *useFQNForOpenAPIName != useFQNForOpenAPINameV { t.Errorf("Test %v: fqn_for_openapi_name misparsed, expected '%v', got '%v'", tid, useFQNForOpenAPINameV, *useFQNForOpenAPIName) } + if *openAPINamingStrategy != openAPINamingStrategyV { + t.Errorf("Test %v: openapi_naming_strategy misparsed, expected '%v', got '%v'", tid, openAPINamingStrategyV, *openAPINamingStrategy) + } } func clearFlags() { @@ -183,4 +274,6 @@ func clearFlags() { *allowRepeatedFieldsInBody = false *includePackageInTags = false *mergeFileName = "apidocs" + *useFQNForOpenAPIName = false + *openAPINamingStrategy = "" } From 359dc57fe1d88e50d1c6686b97c0dfdddc7f3eb7 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 2 Sep 2021 21:32:32 -0400 Subject: [PATCH 1054/1518] Update devcontainer and build env (#2320) * Update outdated devcontainer settings * Add Docker images for plugins These will be used to push the plugins to the BSR to allow users to perform remote generation. * Update Dockerfile This is much nicer for Codespaces development * Update references to Github Docker registry * Switch to new image * Change working directory for new image * Flush bazel cache * Use vscode home directory for bazel cache --- .circleci/Dockerfile | 63 +++++++++++++++++++----------- .circleci/README.md | 2 +- .circleci/config.yml | 35 ++++++++--------- .devcontainer/devcontainer.json | 18 +++++---- CONTRIBUTING.md | 21 +--------- Makefile | 10 ++--- protoc-gen-grpc-gateway/Dockerfile | 13 ++++++ protoc-gen-openapiv2/Dockerfile | 13 ++++++ 8 files changed, 100 insertions(+), 75 deletions(-) create mode 100644 protoc-gen-grpc-gateway/Dockerfile create mode 100644 protoc-gen-openapiv2/Dockerfile diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index f600552ae0e..7b004bff8e0 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,34 +1,53 @@ FROM golang:1.17.0 -# Warm apt cache and install dependencies -# bzip2 is required by the node_tests (to extract its dependencies). -# patch is required by bazel tests +ENV NVM_DIR="/usr/local/share/nvm" +ENV NVM_SYMLINK_CURRENT=true \ + PATH=${NVM_DIR}/current/bin:${PATH} + +ARG VSCODE_SCRIPTS_VERSION="v0.193.0" +ARG NODE_VERSION="10" +# Run some common installation scripts for a nicer dev environment. In order: +# Used to create non-root user and update system packages +# https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/common.md +# We use this to install Go tools used by gopls +# https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/go.md +# We use this to install Node +# https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/node.md RUN apt-get update && \ - apt-get install -y wget unzip \ - openjdk-11-jre \ - bzip2 \ - patch + wget "https://raw.githubusercontent.com/microsoft/vscode-dev-containers/${VSCODE_SCRIPTS_VERSION}/script-library/common-debian.sh" && \ + chmod +x ./common-debian.sh && \ + ./common-debian.sh false vscode automatic automatic true false && \ + wget "https://raw.githubusercontent.com/microsoft/vscode-dev-containers/${VSCODE_SCRIPTS_VERSION}/script-library/go-debian.sh" && \ + chmod +x ./go-debian.sh && \ + ./go-debian.sh none /usr/local/go /go vscode false true && \ + wget "https://raw.githubusercontent.com/microsoft/vscode-dev-containers/${VSCODE_SCRIPTS_VERSION}/script-library/node-debian.sh" && \ + chmod +x ./node-debian.sh && \ + ./node-debian.sh "${NVM_DIR}" "${NODE_VERSION}" vscode true && \ + rm common-debian.sh go-debian.sh node-debian.sh && \ + DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ + wget \ + unzip \ + openjdk-11-jre \ + bzip2 \ + patch && \ + apt-get clean -y && \ + rm -rf /var/lib/apt/lists/* # Install swagger-codegen ENV SWAGGER_CODEGEN_VERSION=2.4.8 RUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ - -O /usr/local/bin/swagger-codegen-cli.jar - -# Wrap the jar for swagger-codgen -RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ + -O /usr/local/bin/swagger-codegen-cli.jar && \ + echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ chmod +x /usr/local/bin/swagger-codegen -# Install node, used by NVM -ENV NODE_VERSION=v10.16.3 -ENV NVM_VERSION=v0.35.0 -RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash - # Install Bazelisk as bazel to manage Bazel -RUN go get github.com/bazelbuild/bazelisk && \ +RUN go install github.com/bazelbuild/bazelisk@latest && \ mv $(which bazelisk) /usr/local/bin/bazel -# Clean up -RUN apt-get autoremove -y && \ - apt-get remove -y wget \ - unzip && \ - rm -rf /var/lib/apt/lists/* +# Install buildifier for bazel formatting +RUN go install github.com/bazelbuild/buildtools/buildifier@latest + +# Give vscode ownership of GOPATH +RUN chown -R vscode: /go + +USER vscode diff --git a/.circleci/README.md b/.circleci/README.md index 1338f0078a6..fee06d429fe 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -5,4 +5,4 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. ### Whats up with the Dockerfile? The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md). -The canonical repository for this Dockerfile is `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. +The canonical repository for this Dockerfile is `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`. diff --git a/.circleci/config.yml b/.circleci/config.yml index f06a7ddddac..24864058297 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ commands: steps: - run: | cat > .bazelrc \<< EOF - startup --output_base /root/.cache/_grpc_gateway_bazel + startup --output_base /home/vscode/.cache/_grpc_gateway_bazel build --test_output errors build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 @@ -41,7 +41,7 @@ executors: password1: "3ec86b2e5a431be2d72c" GLOG_logtostderr: "1" docker: - - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.16 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 auth: username: gateway-ci-user password: ${password0}${password1} @@ -49,45 +49,44 @@ executors: jobs: build: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - run: go build ./... test: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - run: go test -race -coverprofile=coverage.txt ./... - run: bash <(curl -s https://codecov.io/bash) node_test: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - run: go mod vendor - run: > - . $HOME/.nvm/nvm.sh && cd examples/internal/browser && npm install gulp-cli && npm install && ./node_modules/.bin/gulp generate: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - generate - run: git diff --exit-code bazel: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - restore_cache: keys: - - v2-bazel-cache-{{ checksum "repositories.bzl" }} - - v2-bazel-cache- + - v3-bazel-cache-{{ checksum "repositories.bzl" }} + - v3-bazel-cache- - configure_bazel - run: name: Check that Bazel BUILD files are up-to-date @@ -108,12 +107,12 @@ jobs: name: Run tests with Bazel command: bazel test //... - save_cache: - key: v2-bazel-cache-{{ checksum "repositories.bzl" }} + key: v3-bazel-cache-{{ checksum "repositories.bzl" }} paths: - - /root/.cache/_grpc_gateway_bazel + - /home/vscode/.cache/_grpc_gateway_bazel gorelease: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - run: @@ -140,20 +139,20 @@ jobs: - run: buf push --tag "$CIRCLE_SHA1" release: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - run: go mod vendor - run: curl -sL https://git.io/goreleaser | bash update-repositoriesbzl: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - restore_cache: keys: - - v2-bazel-cache-{{ checksum "repositories.bzl" }} - - v2-bazel-cache- + - v3-bazel-cache-{{ checksum "repositories.bzl" }} + - v3-bazel-cache- - configure_bazel - run: name: Update repositories.bzl @@ -162,7 +161,7 @@ jobs: - renovate_git_amend_push regenerate: executor: build-env - working_directory: /src/grpc-gateway + working_directory: /home/vscode/src/grpc-gateway steps: - checkout - generate diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5c8a07c69c5..f3396ccee96 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,23 +1,25 @@ +// For format details, see https://aka.ms/devcontainer.json. { - "dockerFile": "../.circleci/Dockerfile", - "overrideCommand": true, - // Set *default* container specific settings.json values on container create. + "name": "Go", + "build": { + "dockerfile": "../Dockerfile", + "args": { + "NODE_VERSION": "10" + } + }, "settings": { "editor.formatOnSave": true, - "terminal.integrated.shell.linux": "/bin/bash", - "go.useGoProxyToCheckForToolUpdates": true, + "go.toolsManagement.checkForUpdates": "local", "go.useLanguageServer": true, "go.gopath": "/go", "go.goroot": "/usr/local/go", - "go.toolsGopath": "/go/bin", "bazel.buildifierExecutable": "/go/bin/buildifier", "bazel.buildifierFixOnFormat": true, "bazel.enableCodeLens": true, }, - // Add the IDs of extensions you want installed when the container is created. "extensions": [ "golang.Go", "bazelbuild.vscode-bazel", ], - "postCreateCommand": "cd $(mktemp -d) && GO111MODULE=on go get golang.org/x/tools/gopls@latest github.com/bazelbuild/buildtools/buildifier@latest && cd -", + "remoteUser": "vscode" } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a37cd8239af..13dc5260a34 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,21 +1,5 @@ # How to contribute -Thank you for your contribution to gRPC-Gateway. -Here's the recommended process of contribution. - -1. `go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` -1. `cd $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway` -1. hack, hack, hack... -1. Make sure that your change follows best practices in Go - - [Effective Go](https://golang.org/doc/effective_go.html) - - [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) -1. Make sure that `go test ./...` passes. -1. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) -1. Open a pull request in GitHub - -When you work on a larger contribution, it is also recommended that you get in touch -with us through the issue tracker. - ## Code reviews All submissions, including submissions by project members, require review. @@ -27,9 +11,8 @@ All submissions, including submissions by project members, require review. It should be as simple as this (run from the root of the repository): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.16 \ - /bin/bash -c 'cd /src/grpc-gateway && \ - make install && \ +docker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/grpc-gateway/build-env:1.16 \ + /bin/bash -c 'make install && \ make clean && \ make generate' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ diff --git a/Makefile b/Makefile index d3409852057..398a4eba185 100644 --- a/Makefile +++ b/Makefile @@ -81,14 +81,10 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE @rm -f $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/README.md \ $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh -TMP_INSTALL_DIR := $(shell mktemp -d) install: - @mkdir -p ${TMP_INSTALL_DIR} - cd ${TMP_INSTALL_DIR} && go get \ - google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 \ - google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1 \ - github.com/bufbuild/buf/cmd/buf@v0.51.1 - @rmdir ${TMP_INSTALL_DIR} + go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 + go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1 + go install github.com/bufbuild/buf/cmd/buf@v0.51.1 go install \ ./protoc-gen-openapiv2 \ diff --git a/protoc-gen-grpc-gateway/Dockerfile b/protoc-gen-grpc-gateway/Dockerfile new file mode 100644 index 00000000000..b71c63cea76 --- /dev/null +++ b/protoc-gen-grpc-gateway/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.17.0 as builder + +ARG RELEASE_VERSION + +# Buf plugins must be built for linux/amd64 +ENV GOOS=linux GOARCH=amd64 CGO_ENABLED=0 +RUN go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@${RELEASE_VERSION} + +FROM scratch + +COPY --from=builder /go/bin/protoc-gen-grpc-gateway /usr/local/bin/protoc-gen-grpc-gateway + +ENTRYPOINT ["/usr/local/bin/protoc-gen-grpc-gateway"] diff --git a/protoc-gen-openapiv2/Dockerfile b/protoc-gen-openapiv2/Dockerfile new file mode 100644 index 00000000000..33458702a1c --- /dev/null +++ b/protoc-gen-openapiv2/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.17.0 as builder + +ARG RELEASE_VERSION + +# Buf plugins must be built for linux/amd64 +ENV GOOS=linux GOARCH=amd64 CGO_ENABLED=0 +RUN go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@${RELEASE_VERSION} + +FROM scratch + +COPY --from=builder /go/bin/protoc-gen-openapiv2 /usr/local/bin/protoc-gen-openapiv2 + +ENTRYPOINT ["/usr/local/bin/protoc-gen-openapiv2"] From e6fb3d972f9667f5e6b3ae62f447041cee4bd8e5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 2 Sep 2021 22:52:09 -0400 Subject: [PATCH 1055/1518] Add job to push plugins to BSR on release (#2321) --- .circleci/config.yml | 21 +++++++++++++++++++ .../protoc-gen-grpc-gateway}/Dockerfile | 0 .../plugins/protoc-gen-openapiv2}/Dockerfile | 0 3 files changed, 21 insertions(+) rename {protoc-gen-grpc-gateway => .circleci/plugins/protoc-gen-grpc-gateway}/Dockerfile (100%) rename {protoc-gen-openapiv2 => .circleci/plugins/protoc-gen-openapiv2}/Dockerfile (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 24864058297..1ae6c5ac90d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -122,6 +122,21 @@ jobs: go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - run: gorelease -base=v2.5.0 + push_bsr_plugins: + docker: + - image: circleci/golang + steps: + - setup_remote_docker + - checkout + - run: echo "${BUF_API_TOKEN}" | docker login --username grpcgatewaybot --password-stdin plugins.buf.build + - run: | + cd .circleci/plugins/protoc-gen-grpc-gateway && + docker build -t plugins.buf.build/grpc-ecosystem/grpc-gateway:${CIRCLE_TAG}-1 --build-arg=RELEASE_VERSION=${CIRCLE_TAG} . && + docker push plugins.buf.build/grpc-ecosystem/grpc-gateway:${CIRCLE_TAG}-1 + - run: | + cd .circleci/plugins/protoc-gen-openapiv2 && + docker build -t plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 --build-arg=RELEASE_VERSION=${CIRCLE_TAG} . && + docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - image: bufbuild/buf:0.54.1 @@ -187,6 +202,12 @@ workflows: ignore: /.*/ tags: only: /v[0-9]+(\.[0-9]+)*(-.*)*/ + - push_bsr_plugins: + filters: + branches: + ignore: /.*/ + tags: + only: /v[0-9]+(\.[0-9]+)*(-.*)*/ - update-repositoriesbzl: filters: branches: diff --git a/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile similarity index 100% rename from protoc-gen-grpc-gateway/Dockerfile rename to .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile diff --git a/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile similarity index 100% rename from protoc-gen-openapiv2/Dockerfile rename to .circleci/plugins/protoc-gen-openapiv2/Dockerfile From dd65ce21df86a7fcfc9cc179922144662a5aad74 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 Sep 2021 16:49:38 +0000 Subject: [PATCH 1056/1518] fix(deps): update google.golang.org/genproto commit hash to d08c68a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 53fdb66881c..1453e408985 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 + google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 61f09dedee5..5b89465b3b5 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2 h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 31201465ebc..f3b88408ea0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:NHN4wOCScVzKhPenJ2dt+BTs3X/XkBVI/Rh4iDt55T8=", - version = "v0.0.0-20210831024726-fe130286e0e2", + sum = "h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg=", + version = "v0.0.0-20210903162649-d08c68adba83", ) go_repository( name = "org_golang_google_grpc", From a46e1d40fb9d55a2f2ec906352212886836e5fe3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Sep 2021 12:07:51 +0000 Subject: [PATCH 1057/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 2164c16b675..c20e17c6203 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -80,9 +80,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "c28eef4d30ba1a195c6837acf6c75a4034981f5b4002dda3c5aa6e48ce023cf1", - strip_prefix = "buildtools-4.0.1", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.0.1.tar.gz"], + sha256 = "d49976b0b1e81146d79072f10cabe6634afcd318b1bd86b0102d5967121c43c1", + strip_prefix = "buildtools-4.2.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From a6d7bf31f1e90c2cdd9a0af17abc9afe0d4f6394 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 7 Sep 2021 20:58:25 +0000 Subject: [PATCH 1058/1518] chore(deps): update bufbuild/buf docker tag to v0.55.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1ae6c5ac90d..f7654e2d937 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:0.54.1 + - image: bufbuild/buf:0.55.0 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.54.1 + - image: bufbuild/buf:0.55.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin From 84787028f3ac8864c0ea0f4640e799ee932a6a83 Mon Sep 17 00:00:00 2001 From: momom-i <51011095+momom-i@users.noreply.github.com> Date: Wed, 8 Sep 2021 08:42:27 +0900 Subject: [PATCH 1059/1518] add nested oneof test (#2323) --- runtime/internal/examplepb/proto3.pb.go | 467 +++++++++++++----------- runtime/internal/examplepb/proto3.proto | 5 +- runtime/query_test.go | 15 + 3 files changed, 271 insertions(+), 216 deletions(-) diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 1300d4aea58..6c6bef7f7b3 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -78,7 +78,7 @@ type Proto3Message struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Next number: 46 + // Next number: 47 Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` @@ -99,7 +99,10 @@ type Proto3Message struct { // Types that are assignable to OneofValue: // *Proto3Message_OneofBoolValue // *Proto3Message_OneofStringValue - OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` + OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` + // Types that are assignable to NestedOneofValue: + // *Proto3Message_NestedOneofValueOne + NestedOneofValue isProto3Message_NestedOneofValue `protobuf_oneof:"nested_oneof_value"` WrapperDoubleValue *wrapperspb.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` WrapperFloatValue *wrapperspb.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` WrapperInt64Value *wrapperspb.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` @@ -297,6 +300,20 @@ func (x *Proto3Message) GetOneofStringValue() string { return "" } +func (m *Proto3Message) GetNestedOneofValue() isProto3Message_NestedOneofValue { + if m != nil { + return m.NestedOneofValue + } + return nil +} + +func (x *Proto3Message) GetNestedOneofValueOne() *Proto3Message { + if x, ok := x.GetNestedOneofValue().(*Proto3Message_NestedOneofValueOne); ok { + return x.NestedOneofValueOne + } + return nil +} + func (x *Proto3Message) GetWrapperDoubleValue() *wrapperspb.DoubleValue { if x != nil { return x.WrapperDoubleValue @@ -474,6 +491,16 @@ func (*Proto3Message_OneofBoolValue) isProto3Message_OneofValue() {} func (*Proto3Message_OneofStringValue) isProto3Message_OneofValue() {} +type isProto3Message_NestedOneofValue interface { + isProto3Message_NestedOneofValue() +} + +type Proto3Message_NestedOneofValueOne struct { + NestedOneofValueOne *Proto3Message `protobuf:"bytes,46,opt,name=nested_oneof_value_one,json=nestedOneofValueOne,proto3,oneof"` +} + +func (*Proto3Message_NestedOneofValueOne) isProto3Message_NestedOneofValue() {} + var File_runtime_internal_examplepb_proto3_proto protoreflect.FileDescriptor var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ @@ -490,7 +517,7 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x1f, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x20, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, @@ -551,206 +578,214 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6d, 0x0a, 0x16, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x01, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x6f, + 0x66, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x6e, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, - 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, - 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, - 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, 0x70, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x0a, + 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x33, + 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, 0x64, + 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, + 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, 0x21, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, 0x0b, + 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x33, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, - 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, 0x67, + 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, - 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x37, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, - 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, + 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x18, + 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, - 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, - 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, - 0x35, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, - 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, - 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, + 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, + 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, - 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, - 0x20, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0x0a, 0x01, - 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, 0x10, - 0x02, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, + 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, + 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, + 0x0a, 0x12, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x20, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x05, 0x0a, 0x01, 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, + 0x05, 0x0a, 0x01, 0x5a, 0x10, 0x02, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -805,35 +840,36 @@ var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ 17, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.timestamp_value:type_name -> google.protobuf.Timestamp 18, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.duration_value:type_name -> google.protobuf.Duration 19, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.fieldmask_value:type_name -> google.protobuf.FieldMask - 20, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue - 21, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue - 22, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value - 23, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value - 16, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value - 24, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value - 25, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue - 26, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue - 27, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue - 2, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry - 3, // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry - 4, // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry - 5, // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry - 6, // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry - 7, // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry - 8, // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry - 9, // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry - 10, // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry - 11, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry - 12, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry - 13, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry - 14, // 28: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry - 15, // 29: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value16:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry - 16, // 30: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 1, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested_oneof_value_one:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message + 20, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue + 21, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue + 22, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value + 23, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value + 16, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value + 24, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value + 25, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue + 26, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue + 27, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue + 2, // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry + 3, // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry + 4, // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry + 5, // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry + 6, // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry + 7, // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry + 8, // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry + 9, // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry + 10, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry + 11, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry + 12, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry + 13, // 28: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry + 14, // 29: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry + 15, // 30: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value16:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry + 16, // 31: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value + 32, // [32:32] is the sub-list for method output_type + 32, // [32:32] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_runtime_internal_examplepb_proto3_proto_init() } @@ -858,6 +894,7 @@ func file_runtime_internal_examplepb_proto3_proto_init() { file_runtime_internal_examplepb_proto3_proto_msgTypes[0].OneofWrappers = []interface{}{ (*Proto3Message_OneofBoolValue)(nil), (*Proto3Message_OneofStringValue)(nil), + (*Proto3Message_NestedOneofValueOne)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/runtime/internal/examplepb/proto3.proto b/runtime/internal/examplepb/proto3.proto index f2c71287a17..2b6d077c95f 100644 --- a/runtime/internal/examplepb/proto3.proto +++ b/runtime/internal/examplepb/proto3.proto @@ -10,7 +10,7 @@ import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; message Proto3Message { - // Next number: 46 + // Next number: 47 Proto3Message nested = 41; float float_value = 42; double double_value = 43; @@ -32,6 +32,9 @@ message Proto3Message { bool oneof_bool_value = 1; string oneof_string_value = 2; } + oneof nested_oneof_value { + Proto3Message nested_oneof_value_one = 46; + } google.protobuf.DoubleValue wrapper_double_value = 17; google.protobuf.FloatValue wrapper_float_value = 18; google.protobuf.Int64Value wrapper_int64_value = 19; diff --git a/runtime/query_test.go b/runtime/query_test.go index 1ee46a09f96..512e5f75856 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -375,6 +375,21 @@ func TestPopulateParameters(t *testing.T) { }, }, }, + { + values: url.Values{ + "nested_oneof_value_one.int64Value": {"-1"}, + "nested_oneof_value_one.string_value": {"foo"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{ + NestedOneofValue: &examplepb.Proto3Message_NestedOneofValueOne{ + NestedOneofValueOne: &examplepb.Proto3Message{ + Int64Value: -1, + StringValue: "foo", + }, + }, + }, + }, { // Don't allow setting a oneof more than once values: url.Values{ From f60dfa5c7b5fc2ce944f7625b551a63f8c4ea93e Mon Sep 17 00:00:00 2001 From: momom-i <51011095+momom-i@users.noreply.github.com> Date: Wed, 8 Sep 2021 09:32:15 +0900 Subject: [PATCH 1060/1518] Add www-Authenticate header (#2314) * add www authenticate header * Update examples/internal/proto/examplepb/echo_service.proto Co-authored-by: Johan Brandhorst-Satzkorn * implement add www-authenticate header * regenerate Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/echo/api/swagger.yaml | 78 ++++++++++ .../internal/clients/echo/api_echo_service.go | 147 ++++++++++++++++++ .../internal/integration/integration_test.go | 33 +++- .../proto/examplepb/echo_service.pb.go | 41 +++-- .../proto/examplepb/echo_service.pb.gw.go | 83 ++++++++++ .../proto/examplepb/echo_service.proto | 8 + .../proto/examplepb/echo_service.swagger.json | 85 ++++++++++ .../proto/examplepb/echo_service_grpc.pb.go | 42 +++++ examples/internal/server/echo.go | 7 + runtime/errors.go | 4 + 10 files changed, 513 insertions(+), 15 deletions(-) diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 1018d8da082..821caf5c6c7 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -447,6 +447,84 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/echo_unauthorized: + get: + tags: + - "EchoService" + summary: "EchoUnauthorized method receives a simple message and returns it.\ + \ It must\nalways return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP\ + \ Status code\nof 401." + operationId: "EchoService_EchoUnauthorized" + parameters: + - name: "id" + in: "query" + description: "Id represents the message identifier." + required: false + type: "string" + x-exportParamName: "Id" + x-optionalDataType: "String" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "lineNum" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" definitions: examplepbDynamicMessage: type: "object" diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index 1bcf461f765..11a09ea49aa 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -1037,3 +1037,150 @@ func (a *EchoServiceApiService) EchoServiceEchoPatch(ctx context.Context, body E return localVarReturnValue, localVarHttpResponse, nil } + +/* +EchoServiceApiService EchoUnauthorized method receives a simple message and returns it. It must always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code of 401. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param optional nil or *EchoServiceEchoUnauthorizedOpts - Optional Parameters: + * @param "Id" (optional.String) - Id represents the message identifier. + * @param "Num" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type EchoServiceEchoUnauthorizedOpts struct { + Id optional.String + Num optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *EchoServiceApiService) EchoServiceEchoUnauthorized(ctx context.Context, localVarOptionals *EchoServiceEchoUnauthorizedOpts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_unauthorized" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Id.IsSet() { + localVarQueryParams.Add("id", parameterToString(localVarOptionals.Id.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 1865dd2cf51..0af113e8909 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -56,6 +56,38 @@ func TestEcho(t *testing.T) { } } +func TestEchoUnauthorized(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + apiURL := "http://localhost:8088/v1/example/echo_unauthorized" + resp, err := http.Get(apiURL) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + msg := new(statuspb.Status) + if err := marshaler.Unmarshal(buf, msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, msg) failed with %v; want success", buf, err) + return + } + + if got, want := resp.StatusCode, http.StatusUnauthorized; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + } + + if value := resp.Header.Get("WWW-Authenticate"); value == "" { + t.Errorf("WWW-Authenticate header should not be empty") + } +} + func TestEchoPatch(t *testing.T) { if testing.Short() { t.Skip() @@ -1566,7 +1598,6 @@ func TestNotImplemented(t *testing.T) { t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) return } - if got, want := resp.StatusCode, http.StatusNotImplemented; got != want { t.Errorf("resp.StatusCode = %d; want %d", got, want) t.Logf("%s", buf) diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 8cf913b89e1..535e3df9761 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -425,7 +425,7 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xe7, 0x06, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, + 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xa1, 0x08, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbc, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, @@ -479,13 +479,24 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x4d, - 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xb7, + 0x01, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x75, 0x6e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -521,12 +532,14 @@ var file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = []int32{ 1, // 7: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage 1, // 8: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage 3, // 9: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoPatch:input_type -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate - 1, // 10: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage - 1, // 11: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage - 1, // 12: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage - 3, // 13: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoPatch:output_type -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate - 10, // [10:14] is the sub-list for method output_type - 6, // [6:10] is the sub-list for method input_type + 1, // 10: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoUnauthorized:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 11: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 12: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 13: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 3, // 14: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoPatch:output_type -> grpc.gateway.examples.internal.proto.examplepb.DynamicMessageUpdate + 1, // 15: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoUnauthorized:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 11, // [11:16] is the sub-list for method output_type + 6, // [6:11] is the sub-list for method input_type 6, // [6:6] is the sub-list for extension type_name 6, // [6:6] is the sub-list for extension extendee 0, // [0:6] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index b406e8355af..4600a75bfbf 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -637,6 +637,42 @@ func local_request_EchoService_EchoPatch_0(ctx context.Context, marshaler runtim } +var ( + filter_EchoService_EchoUnauthorized_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_EchoService_EchoUnauthorized_0(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoUnauthorized_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoUnauthorized(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_EchoService_EchoUnauthorized_0(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoUnauthorized_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoUnauthorized(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterEchoServiceHandlerServer registers the http handlers for service EchoService to "mux". // UnaryRPC :call EchoServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -827,6 +863,29 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("GET", pattern_EchoService_EchoUnauthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_EchoUnauthorized_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoUnauthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1028,6 +1087,26 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("GET", pattern_EchoService_EchoUnauthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EchoService_EchoUnauthorized_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoUnauthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1047,6 +1126,8 @@ var ( pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) pattern_EchoService_EchoPatch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_patch"}, "")) + + pattern_EchoService_EchoUnauthorized_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_unauthorized"}, "")) ) var ( @@ -1065,4 +1146,6 @@ var ( forward_EchoService_EchoDelete_0 = runtime.ForwardResponseMessage forward_EchoService_EchoPatch_0 = runtime.ForwardResponseMessage + + forward_EchoService_EchoUnauthorized_0 = runtime.ForwardResponseMessage ) diff --git a/examples/internal/proto/examplepb/echo_service.proto b/examples/internal/proto/examplepb/echo_service.proto index cf0e8567412..88ae6d8bbc3 100644 --- a/examples/internal/proto/examplepb/echo_service.proto +++ b/examples/internal/proto/examplepb/echo_service.proto @@ -90,4 +90,12 @@ service EchoService { body: "body" }; } + // EchoUnauthorized method receives a simple message and returns it. It must + // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code + // of 401. + rpc EchoUnauthorized(SimpleMessage) returns (SimpleMessage) { + option (google.api.http) = { + get: "/v1/example/echo_unauthorized" + }; + } } diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 012bda34146..b6b1e06d2ea 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -538,6 +538,91 @@ "EchoService" ] } + }, + "/v1/example/echo_unauthorized": { + "get": { + "summary": "EchoUnauthorized method receives a simple message and returns it. It must\nalways return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code\nof 401.", + "operationId": "EchoService_EchoUnauthorized", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "EchoService" + ] + } } }, "definitions": { diff --git a/examples/internal/proto/examplepb/echo_service_grpc.pb.go b/examples/internal/proto/examplepb/echo_service_grpc.pb.go index 5bd5a273cd4..fe72dad84c8 100644 --- a/examples/internal/proto/examplepb/echo_service_grpc.pb.go +++ b/examples/internal/proto/examplepb/echo_service_grpc.pb.go @@ -29,6 +29,10 @@ type EchoServiceClient interface { EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) // EchoPatch method receives a NonStandardUpdateRequest and returns it. EchoPatch(ctx context.Context, in *DynamicMessageUpdate, opts ...grpc.CallOption) (*DynamicMessageUpdate, error) + // EchoUnauthorized method receives a simple message and returns it. It must + // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code + // of 401. + EchoUnauthorized(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) } type echoServiceClient struct { @@ -75,6 +79,15 @@ func (c *echoServiceClient) EchoPatch(ctx context.Context, in *DynamicMessageUpd return out, nil } +func (c *echoServiceClient) EchoUnauthorized(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { + out := new(SimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // EchoServiceServer is the server API for EchoService service. // All implementations should embed UnimplementedEchoServiceServer // for forward compatibility @@ -90,6 +103,10 @@ type EchoServiceServer interface { EchoDelete(context.Context, *SimpleMessage) (*SimpleMessage, error) // EchoPatch method receives a NonStandardUpdateRequest and returns it. EchoPatch(context.Context, *DynamicMessageUpdate) (*DynamicMessageUpdate, error) + // EchoUnauthorized method receives a simple message and returns it. It must + // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code + // of 401. + EchoUnauthorized(context.Context, *SimpleMessage) (*SimpleMessage, error) } // UnimplementedEchoServiceServer should be embedded to have forward compatible implementations. @@ -108,6 +125,9 @@ func (UnimplementedEchoServiceServer) EchoDelete(context.Context, *SimpleMessage func (UnimplementedEchoServiceServer) EchoPatch(context.Context, *DynamicMessageUpdate) (*DynamicMessageUpdate, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoPatch not implemented") } +func (UnimplementedEchoServiceServer) EchoUnauthorized(context.Context, *SimpleMessage) (*SimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoUnauthorized not implemented") +} // UnsafeEchoServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to EchoServiceServer will @@ -192,6 +212,24 @@ func _EchoService_EchoPatch_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _EchoService_EchoUnauthorized_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EchoServiceServer).EchoUnauthorized(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EchoServiceServer).EchoUnauthorized(ctx, req.(*SimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + // EchoService_ServiceDesc is the grpc.ServiceDesc for EchoService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -215,6 +253,10 @@ var EchoService_ServiceDesc = grpc.ServiceDesc{ MethodName: "EchoPatch", Handler: _EchoService_EchoPatch_Handler, }, + { + MethodName: "EchoUnauthorized", + Handler: _EchoService_EchoUnauthorized_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/internal/proto/examplepb/echo_service.proto", diff --git a/examples/internal/server/echo.go b/examples/internal/server/echo.go index 58501aa31e7..0f795ce52ad 100644 --- a/examples/internal/server/echo.go +++ b/examples/internal/server/echo.go @@ -6,7 +6,9 @@ import ( "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" ) // Implements of EchoServiceServer @@ -44,3 +46,8 @@ func (s *echoServer) EchoPatch(ctx context.Context, msg *examples.DynamicMessage glog.Info(msg) return msg, nil } + +func (s *echoServer) EchoUnauthorized(ctx context.Context, msg *examples.SimpleMessage) (*examples.SimpleMessage, error) { + glog.Info(msg) + return nil, status.Error(codes.Unauthenticated, "unauthorized err") +} diff --git a/runtime/errors.go b/runtime/errors.go index d644c0257a2..d9e0013c439 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -108,6 +108,10 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh contentType := marshaler.ContentType(pb) w.Header().Set("Content-Type", contentType) + if s.Code() == codes.Unauthenticated { + w.Header().Set("WWW-Authenticate", s.Message()) + } + buf, merr := marshaler.Marshal(pb) if merr != nil { grpclog.Infof("Failed to marshal error message %q: %v", s, merr) From 72d4dc003cfb5e12002b12e8caa19c70b7aa59e6 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 7 Sep 2021 21:26:47 -0400 Subject: [PATCH 1061/1518] Update gorelease reference (#2328) * Fix devcontainer Dockerfile reference * Update gorelease base --- .circleci/config.yml | 2 +- .devcontainer/devcontainer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f7654e2d937..1fdfb246845 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.5.0 + - run: gorelease -base=v2.6.0 push_bsr_plugins: docker: - image: circleci/golang diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f3396ccee96..0386e5f372c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ { "name": "Go", "build": { - "dockerfile": "../Dockerfile", + "dockerfile": "../.circleci/Dockerfile", "args": { "NODE_VERSION": "10" } From ed61ca1f85825a55c2177b5d36ccc17a28c79673 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 7 Sep 2021 22:05:07 -0400 Subject: [PATCH 1062/1518] Add note about using remote plugins (#2329) * Add note about using remote plugins * Extra note about versioning --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README.md b/README.md index 492990fef07..efdecbbb394 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,8 @@ This will place four binaries in your `$GOBIN`; Make sure that your `$GOBIN` is in your `$PATH`. +Alternatively, see the section on remotely managed plugin versions below. + ## Usage 1. Define your [gRPC](https://grpc.io/docs/) service using protocol buffers @@ -427,6 +429,41 @@ Make sure that your `$GOBIN` is in your `$PATH`. Note that this plugin also supports generating OpenAPI definitions for unannotated methods; use the `generate_unbound_methods` option to enable this. +## Usage with remote plugins + +As an alternative to all of the above, you can use `buf` with +[remote plugins](https://docs.buf.build/configuration/v1/buf-gen-yaml#name-or-remote) +to manage plugin versions and generation. An example `buf.gen.yaml` using remote +plugin generation looks like this: + +```yaml +version: v1 +plugins: + - remote: buf.build/library/plugins/go:v1.27.1-1 + out: gen/go + opt: + - paths=source_relative + - remote: buf.build/library/plugins/go-grpc:v1.1.0-2 + out: gen/go + opt: + - paths=source_relative + - remote: buf.build/grpc-ecosystem/plugins/grpc-gateway:v2.6.0-1 + out: gen/go + opt: + - paths=source_relative + - remote: buf.build/grpc-ecosystem/plugins/openapiv2:v2.6.0-1 + out: gen/openapiv2 +``` + +This requires no local installation of any plugins. Be careful to use the same +version of the generator as the runtime library, i.e. if using `v2.6.0-1`, run + +```shell +$ go get github.com/grpc-ecosystem/grpc-gateway/v2@v2.6.0 +``` + +To get the same version of the runtime in your `go.mod`. + ## Video intro This GopherCon UK 2019 presentation from our maintainer [@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to using the gRPC-Gateway. It uses the following boilerplate repo as a base: https://github.com/johanbrandhorst/grpc-gateway-boilerplate. From 8dbf8f279f669e687f90dddb200d4135e83365c0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Sep 2021 19:04:11 +0000 Subject: [PATCH 1063/1518] chore(deps): update bufbuild/buf docker tag to v0.56.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1fdfb246845..ae7cc99cb14 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:0.55.0 + - image: bufbuild/buf:0.56.0 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.55.0 + - image: bufbuild/buf:0.56.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin From 21f5decaf465560c4cb1cb7382c16973ab7aabae Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Sep 2021 15:59:43 +0000 Subject: [PATCH 1064/1518] fix(deps): update google.golang.org/genproto commit hash to af19c3c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1453e408985..ff489e8918d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 + google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 5b89465b3b5..0ad6bf2add4 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83 h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7 h1:DidVan5b3Gj3HYPFKn8ZipDwwRygcjYE6d0IEqStfRs= +google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f3b88408ea0..64dd11c9bc7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:3V2dxSZpz4zozWWUq36vUxXEKnSYitEH2LdsAx+RUmg=", - version = "v0.0.0-20210903162649-d08c68adba83", + sum = "h1:DidVan5b3Gj3HYPFKn8ZipDwwRygcjYE6d0IEqStfRs=", + version = "v0.0.0-20210909144509-af19c3c38cb7", ) go_repository( name = "org_golang_google_grpc", From 87a80305a7822a001eb4f4f3f90a0d25dabfb07f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Sep 2021 20:50:17 +0000 Subject: [PATCH 1065/1518] chore(deps): update golang docker tag to v1.17.1 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 7b004bff8e0..2dbbd88528e 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.0 +FROM golang:1.17.1 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index b71c63cea76..ffe31fbcbe3 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.0 as builder +FROM golang:1.17.1 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 33458702a1c..63c8cb66078 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.0 as builder +FROM golang:1.17.1 as builder ARG RELEASE_VERSION From 93a4e333643e8da174be060adda069e7ae36c13d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Sep 2021 22:18:34 +0000 Subject: [PATCH 1066/1518] fix(deps): update google.golang.org/genproto commit hash to a8c4777 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ff489e8918d..ade017f3c84 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7 + google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 0ad6bf2add4..5ad2251267e 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7 h1:DidVan5b3Gj3HYPFKn8ZipDwwRygcjYE6d0IEqStfRs= -google.golang.org/genproto v0.0.0-20210909144509-af19c3c38cb7/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af h1:aLMMXFYqw01RA6XJim5uaN+afqNNjc9P8HPAbnpnc5s= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 64dd11c9bc7..4391f81127c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:DidVan5b3Gj3HYPFKn8ZipDwwRygcjYE6d0IEqStfRs=", - version = "v0.0.0-20210909144509-af19c3c38cb7", + sum = "h1:aLMMXFYqw01RA6XJim5uaN+afqNNjc9P8HPAbnpnc5s=", + version = "v0.0.0-20210909211513-a8c4777a87af", ) go_repository( name = "org_golang_google_grpc", From f046a4ebdc9be76e11c6239eaeba4e30e9e2444e Mon Sep 17 00:00:00 2001 From: Jonathan Howard Date: Fri, 10 Sep 2021 11:37:49 -0700 Subject: [PATCH 1067/1518] Decode path-encoded URL components (#2332) * Decode path-encoded URL components This change causes pct-encoded characters passed via path parameters to be correctly decoded as described in google.api.http (see: path template syntax) and as implemented in grpc-http-json-transcoding. A new configuration option is introduced, `WithDecodeMode()`, which understands several modes. Backwards compatibility is maintained, with the hope of UnescapingModeAllExceptReserved becoming the default mode in V3. * Add tests for URL path unescaping * Improve error handling for unescaping * docs: path parameter unescaping --- docs/docs/faq.md | 4 + docs/docs/mapping/customizing_your_gateway.md | 24 +++ runtime/mux.go | 61 ++++++- runtime/mux_test.go | 66 +++++++- runtime/pattern.go | 157 +++++++++++++++++- runtime/pattern_test.go | 47 +++++- 6 files changed, 350 insertions(+), 9 deletions(-) diff --git a/docs/docs/faq.md b/docs/docs/faq.md index e670a9cabd1..3d05c861a44 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -39,6 +39,10 @@ When a message is added which happens to conflict with another message (e.g. by The gRPC-Gateway is a generator that generates a Go implementation of a JSON/HTTP-gRPC reverse proxy based on annotations in your proto file, while the [grpc-httpjson-transcoding](https://github.com/grpc-ecosystem/grpc-httpjson-transcoding) library doesn't require the generation step, it uses protobuf descriptors as config. It can be used as a component of an existing proxy. Google Cloud Endpoints and the gRPC-JSON transcoder filter in Envoy are using this. + +**Behavior differences:** +- By default, gRPC-Gateway does not escape path parameters in the same way. [This can be configured.](../mapping/customizing_your_gateway.md#Controlling-path-parameter-unescaping) + ## What is the difference between the gRPC-Gateway and gRPC-web? ### Usage diff --git a/docs/docs/mapping/customizing_your_gateway.md b/docs/docs/mapping/customizing_your_gateway.md index 2100a0539be..ca09c8c9d21 100644 --- a/docs/docs/mapping/customizing_your_gateway.md +++ b/docs/docs/mapping/customizing_your_gateway.md @@ -345,6 +345,30 @@ func handleStreamError(ctx context.Context, err error) *status.Status { If no custom handler is provided, the default stream error handler will include any gRPC error attributes (code, message, detail messages), if the error being reported includes them. If the error does not have these attributes, a gRPC code of `Unknown` (2) is reported. +## Controlling path parameter unescaping + + + +By default, gRPC-Gateway unescapes the entire URL path string attempting to route a request. This causes routing errors when the path parameter contains an illegal character such as `/`. + +To replicate the behavior described in [google.api.http](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L224), use [runtime.WithUnescapingMode()](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithUnescapingMode) to configure the unescaping behavior, as in the example below: + +```go +mux := runtime.NewServeMux( + runtime.WithUnescapingMode(runtime.UnescapingModeAllExceptReserved), +) +``` + +For multi-segment parameters (e.g. `{id=**}`) [RFC 6570](https://tools.ietf.org/html/rfc6570) Reserved Expansion characters are left escaped and the gRPC API will need to unescape them. + +To replicate the default V2 escaping behavior but also allow passing pct-encoded `/` characters, the ServeMux can be configured as in the example below: + +```go +mux := runtime.NewServeMux( + runtime.WithUnescapingMode(runtime.UnescapingModeAllCharacters), +) +``` + ## Routing Error handler To override the error behavior when `*runtime.ServeMux` was not able to serve the request due to routing issues, use the `runtime.WithRoutingErrorHandler` option. diff --git a/runtime/mux.go b/runtime/mux.go index cfbe2306af1..46a4aabaf95 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -2,6 +2,7 @@ package runtime import ( "context" + "errors" "fmt" "net/http" "net/textproto" @@ -14,6 +15,31 @@ import ( "google.golang.org/protobuf/proto" ) +// UnescapingMode defines the behavior of ServeMux when unescaping path parameters. +type UnescapingMode int + +const ( + // UnescapingModeLegacy is the default V2 behavior, which escapes the entire + // path string before doing any routing. + UnescapingModeLegacy UnescapingMode = iota + + // EscapingTypeExceptReserved unescapes all path parameters except RFC 6570 + // reserved characters. + UnescapingModeAllExceptReserved + + // EscapingTypeExceptSlash unescapes URL path parameters except path + // seperators, which will be left as "%2F". + UnescapingModeAllExceptSlash + + // URL path parameters will be fully decoded. + UnescapingModeAllCharacters + + // UnescapingModeDefault is the default escaping type. + // TODO(v3): default this to UnescapingModeAllExceptReserved per grpc-httpjson-transcoding's + // reference implementation + UnescapingModeDefault = UnescapingModeLegacy +) + // A HandlerFunc handles a specific pair of path pattern and HTTP method. type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) @@ -31,6 +57,7 @@ type ServeMux struct { streamErrorHandler StreamErrorHandlerFunc routingErrorHandler RoutingErrorHandlerFunc disablePathLengthFallback bool + unescapingMode UnescapingMode } // ServeMuxOption is an option that can be given to a ServeMux on construction. @@ -48,6 +75,14 @@ func WithForwardResponseOption(forwardResponseOption func(context.Context, http. } } +// WithEscapingType sets the escaping type. See the definitions of UnescapingMode +// for more information. +func WithUnescapingMode(mode UnescapingMode) ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.unescapingMode = mode + } +} + // SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters. // Configuring this will mean the generated OpenAPI output is no longer correct, and it should be // done with careful consideration. @@ -153,6 +188,7 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { errorHandler: DefaultHTTPErrorHandler, streamErrorHandler: DefaultStreamErrorHandler, routingErrorHandler: DefaultRoutingErrorHandler, + unescapingMode: UnescapingModeDefault, } for _, opt := range opts { @@ -204,6 +240,11 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + // TODO(v3): remove UnescapingModeLegacy + if s.unescapingMode != UnescapingModeLegacy && r.URL.RawPath != "" { + path = r.URL.RawPath + } + components := strings.Split(path[1:], "/") if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { @@ -244,8 +285,16 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { components[l-1], verb = lastComponent[:idx], lastComponent[idx+1:] } - pathParams, err := h.pat.Match(components, verb) + pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) if err != nil { + var mse MalformedSequenceError + if ok := errors.As(err, &mse); ok { + _, outboundMarshaler := MarshalerForRequest(s, r) + s.errorHandler(ctx, s, outboundMarshaler, w, r, &HTTPStatusError{ + HTTPStatus: http.StatusBadRequest, + Err: mse, + }) + } continue } h.h(w, r, pathParams) @@ -259,8 +308,16 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { continue } for _, h := range handlers { - pathParams, err := h.pat.Match(components, verb) + pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) if err != nil { + var mse MalformedSequenceError + if ok := errors.As(err, &mse); ok { + _, outboundMarshaler := MarshalerForRequest(s, r) + s.errorHandler(ctx, s, outboundMarshaler, w, r, &HTTPStatusError{ + HTTPStatus: http.StatusBadRequest, + Err: mse, + }) + } continue } // X-HTTP-Method-Override is optional. Always allow fallback to POST. diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 13a6aff7fee..a1b75588143 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -30,6 +30,7 @@ func TestMuxServeHTTP(t *testing.T) { respContent string disablePathLengthFallback bool + unescapingMode runtime.UnescapingMode }{ { patterns: nil, @@ -330,11 +331,74 @@ func TestMuxServeHTTP(t *testing.T) { respStatus: http.StatusOK, respContent: "POST /foo/{id=*}:verb:subverb", }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 1, int(utilities.OpCapture), 1, int(utilities.OpLitPush), 2}, + pool: []string{"foo", "id", "bar"}, + }, + }, + reqMethod: "POST", + reqPath: "/foo/404%2fwith%2Fspace/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusNotFound, + unescapingMode: runtime.UnescapingModeLegacy, + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPush), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + int(utilities.OpLitPush), 2}, + pool: []string{"foo", "id", "bar"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/success%2fwith%2Fspace/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + unescapingMode: runtime.UnescapingModeAllExceptReserved, + respContent: "GET /foo/{id=*}/bar", + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPushM), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + }, + pool: []string{"foo", "id", "bar"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/success%2fwith%2Fspace", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + unescapingMode: runtime.UnescapingModeAllExceptReserved, + respContent: "GET /foo/{id=**}", + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { var opts []runtime.ServeMuxOption + opts = append(opts, runtime.WithUnescapingMode(spec.unescapingMode)) if spec.disablePathLengthFallback { - opts = append(opts, runtime.WithDisablePathLengthFallback()) + opts = append(opts, + runtime.WithDisablePathLengthFallback(), + ) } mux := runtime.NewServeMux(opts...) for _, p := range spec.patterns { diff --git a/runtime/pattern.go b/runtime/pattern.go index 14c06dcc3f6..df7cb81426a 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -3,6 +3,7 @@ package runtime import ( "errors" "fmt" + "strconv" "strings" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" @@ -14,8 +15,16 @@ var ( ErrNotMatch = errors.New("not match to the path pattern") // ErrInvalidPattern indicates that the given definition of Pattern is not valid. ErrInvalidPattern = errors.New("invalid pattern") + // ErrMalformedSequence indicates that an escape sequence was malformed. + ErrMalformedSequence = errors.New("malformed escape sequence") ) +type MalformedSequenceError string + +func (e MalformedSequenceError) Error() string { + return "malformed path escape " + strconv.Quote(string(e)) +} + type op struct { code utilities.OpCode operand int @@ -140,10 +149,11 @@ func MustPattern(p Pattern, err error) Pattern { return p } -// Match examines components if it matches to the Pattern. -// If it matches, the function returns a mapping from field paths to their captured values. -// If otherwise, the function returns an error. -func (p Pattern) Match(components []string, verb string) (map[string]string, error) { +// MatchAndEscape examines components to determine if they match to a Pattern. +// MatchAndEscape will return an error if no Patterns matched or if a pattern +// matched but contained malformed escape sequences. If successful, the function +// returns a mapping from field paths to their captured values. +func (p Pattern) MatchAndEscape(components []string, verb string, unescapingMode UnescapingMode) (map[string]string, error) { if p.verb != verb { if p.verb != "" { return nil, ErrNotMatch @@ -161,6 +171,8 @@ func (p Pattern) Match(components []string, verb string) (map[string]string, err captured := make([]string, len(p.vars)) l := len(components) for _, op := range p.ops { + var err error + switch op.code { case utilities.OpNop: continue @@ -173,6 +185,10 @@ func (p Pattern) Match(components []string, verb string) (map[string]string, err if lit := p.pool[op.operand]; c != lit { return nil, ErrNotMatch } + } else if op.code == utilities.OpPush { + if c, err = unescape(c, unescapingMode, false); err != nil { + return nil, err + } } stack = append(stack, c) pos++ @@ -182,7 +198,11 @@ func (p Pattern) Match(components []string, verb string) (map[string]string, err return nil, ErrNotMatch } end -= p.tailLen - stack = append(stack, strings.Join(components[pos:end], "/")) + c := strings.Join(components[pos:end], "/") + if c, err = unescape(c, unescapingMode, true); err != nil { + return nil, err + } + stack = append(stack, c) pos = end case utilities.OpConcatN: n := op.operand @@ -204,6 +224,16 @@ func (p Pattern) Match(components []string, verb string) (map[string]string, err return bindings, nil } +// MatchAndEscape examines components to determine if they match to a Pattern. +// It will never perform per-component unescaping (see: UnescapingModeLegacy). +// MatchAndEscape will return an error if no Patterns matched. If successful, +// the function returns a mapping from field paths to their captured values. +// +// Deprecated: Use MatchAndEscape. +func (p Pattern) Match(components []string, verb string) (map[string]string, error) { + return p.MatchAndEscape(components, verb, UnescapingModeDefault) +} + // Verb returns the verb part of the Pattern. func (p Pattern) Verb() string { return p.verb } @@ -234,3 +264,120 @@ func (p Pattern) String() string { } return "/" + segs } + +/* + * The following code is adopted and modified from Go's standard library + * and carries the attached license. + * + * Copyright 2009 The Go Authors. All rights reserved. + * Use of this source code is governed by a BSD-style + * license that can be found in the LICENSE file. + */ + +// ishex returns whether or not the given byte is a valid hex character +func ishex(c byte) bool { + switch { + case '0' <= c && c <= '9': + return true + case 'a' <= c && c <= 'f': + return true + case 'A' <= c && c <= 'F': + return true + } + return false +} + +func isRFC6570Reserved(c byte) bool { + switch c { + case '!', '#', '$', '&', '\'', '(', ')', '*', + '+', ',', '/', ':', ';', '=', '?', '@', '[', ']': + return true + default: + return false + } +} + +// unhex converts a hex point to the bit representation +func unhex(c byte) byte { + switch { + case '0' <= c && c <= '9': + return c - '0' + case 'a' <= c && c <= 'f': + return c - 'a' + 10 + case 'A' <= c && c <= 'F': + return c - 'A' + 10 + } + return 0 +} + +// shouldUnescapeWithMode returns true if the character is escapable with the +// given mode +func shouldUnescapeWithMode(c byte, mode UnescapingMode) bool { + switch mode { + case UnescapingModeAllExceptReserved: + if isRFC6570Reserved(c) { + return false + } + case UnescapingModeAllExceptSlash: + if c == '/' { + return false + } + case UnescapingModeAllCharacters: + return true + } + return true +} + +// unescape unescapes a path string using the provided mode +func unescape(s string, mode UnescapingMode, multisegment bool) (string, error) { + // TODO(v3): remove UnescapingModeLegacy + if mode == UnescapingModeLegacy { + return s, nil + } + + if !multisegment { + mode = UnescapingModeAllCharacters + } + + // Count %, check that they're well-formed. + n := 0 + for i := 0; i < len(s); { + if s[i] == '%' { + n++ + if i+2 >= len(s) || !ishex(s[i+1]) || !ishex(s[i+2]) { + s = s[i:] + if len(s) > 3 { + s = s[:3] + } + + return "", MalformedSequenceError(s) + } + i += 3 + } else { + i++ + } + } + + if n == 0 { + return s, nil + } + + var t strings.Builder + t.Grow(len(s)) + for i := 0; i < len(s); i++ { + switch s[i] { + case '%': + c := unhex(s[i+1])<<4 | unhex(s[i+2]) + if shouldUnescapeWithMode(c, mode) { + t.WriteByte(c) + i += 2 + continue + } + fallthrough + default: + t.WriteByte(s[i]) + } + } + + return t.String(), nil +} diff --git a/runtime/pattern_test.go b/runtime/pattern_test.go index 1b856a512a4..1fa2c6796be 100644 --- a/runtime/pattern_test.go +++ b/runtime/pattern_test.go @@ -367,6 +367,7 @@ func TestMatchWithBinding(t *testing.T) { pool []string path string verb string + mode UnescapingMode want map[string]string }{ @@ -477,6 +478,49 @@ func TestMatchWithBinding(t *testing.T) { "oname": "obj", }, }, + { + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPush), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + int(utilities.OpLitPush), 2, + }, + pool: []string{"foo", "id", "bar"}, + path: "foo/part1%2Fpart2/bar", + want: map[string]string{ + "id": "part1/part2", + }, + mode: UnescapingModeAllExceptReserved, + }, + { + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPushM), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + }, + pool: []string{"foo", "id"}, + path: "foo/test%2Fbar", + want: map[string]string{ + "id": "test%2Fbar", + }, + mode: UnescapingModeAllExceptReserved, + }, + { + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPushM), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + }, + pool: []string{"foo", "id"}, + path: "foo/test%2Fbar", + want: map[string]string{ + "id": "test/bar", + }, + mode: UnescapingModeAllCharacters, + }, } { pat, err := NewPattern(validVersion, spec.ops, spec.pool, spec.verb) if err != nil { @@ -484,7 +528,8 @@ func TestMatchWithBinding(t *testing.T) { continue } - got, err := pat.Match(segments(spec.path)) + components, verb := segments(spec.path) + got, err := pat.MatchAndEscape(components, verb, spec.mode) if err != nil { t.Errorf("pat.Match(%q) failed with %v; want success; pattern = (%v, %q)", spec.path, err, spec.ops, spec.pool) } From fbb11e42d2b0a6e8da52de238be394166cf31e30 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 11 Sep 2021 01:54:34 +0000 Subject: [PATCH 1068/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index c20e17c6203..36065f76044 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -80,9 +80,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "d49976b0b1e81146d79072f10cabe6634afcd318b1bd86b0102d5967121c43c1", - strip_prefix = "buildtools-4.2.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.0.tar.gz"], + sha256 = "b8b69615e8d9ade79f3612311b8d0c4dfe01017420c90eed11db15e9e7c9ff3c", + strip_prefix = "buildtools-4.2.1", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.1.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 959d5b00f096efda296810979474a825c13e38c7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 15 Sep 2021 17:16:32 +0000 Subject: [PATCH 1069/1518] chore(deps): update dependency com_google_protobuf to v3.18.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 36065f76044..391c85ab58a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "c6003e1d2e7fefa78a3039f19f383b4f3a61e81be8c19356f85b6461998ad3db", - strip_prefix = "protobuf-3.17.3", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.17.3.tar.gz"], + sha256 = "14e8042b5da37652c92ef6a2759e7d2979d295f60afd7767825e3de68c856c54", + strip_prefix = "protobuf-3.18.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.18.0.tar.gz"], ) http_archive( From b96f2ac28bfb8ba2ce50e7a76d85cfce8561c4d6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 15 Sep 2021 23:21:49 +0000 Subject: [PATCH 1070/1518] fix(deps): update google.golang.org/genproto commit hash to 86cf123 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ade017f3c84..9ae36d50167 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af + google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 5ad2251267e..7da61d03cce 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af h1:aLMMXFYqw01RA6XJim5uaN+afqNNjc9P8HPAbnpnc5s= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46 h1:dUeqvtUQy6Xh63UIs6Jgkj/97+qWYZ+Gf52HXC0rojE= +google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4391f81127c..8cb86bcceb9 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:aLMMXFYqw01RA6XJim5uaN+afqNNjc9P8HPAbnpnc5s=", - version = "v0.0.0-20210909211513-a8c4777a87af", + sum = "h1:dUeqvtUQy6Xh63UIs6Jgkj/97+qWYZ+Gf52HXC0rojE=", + version = "v0.0.0-20210915214522-86cf1236ec46", ) go_repository( name = "org_golang_google_grpc", From ee0c8fdf53b5efb676a54f1922ba1c9acb04014c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Sep 2021 11:27:11 +0000 Subject: [PATCH 1071/1518] chore(deps): update rules_proto commit hash to b22f786 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 391c85ab58a..ddfd0ebb8ff 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "36476f17a78a4c495b9a9e70bd92d182e6e78db476d90c74bac1f5f19f0d6d04", - strip_prefix = "rules_proto-fcad4680fee127dbd8344e6a961a28eef5820ef4", + sha256 = "83c8798f5a4fe1f6a13b5b6ae4267695b71eed7af6fbf2b6ec73a64cf01239ab", + strip_prefix = "rules_proto-b22f78685bf62775b80738e766081b9e4366cdf0", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/fcad4680fee127dbd8344e6a961a28eef5820ef4.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/fcad4680fee127dbd8344e6a961a28eef5820ef4.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/b22f78685bf62775b80738e766081b9e4366cdf0.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/b22f78685bf62775b80738e766081b9e4366cdf0.tar.gz", ], ) From fb3283aee3fabf946c56909e5cb04906bbf857f6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Sep 2021 15:22:03 +0000 Subject: [PATCH 1072/1518] fix(deps): update google.golang.org/genproto commit hash to 3192f97 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9ae36d50167..1598e8bc89b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46 + google.golang.org/genproto v0.0.0-20210916144049-3192f974c780 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 7da61d03cce..61c25d5c7e7 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46 h1:dUeqvtUQy6Xh63UIs6Jgkj/97+qWYZ+Gf52HXC0rojE= -google.golang.org/genproto v0.0.0-20210915214522-86cf1236ec46/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210916144049-3192f974c780 h1:RE6jTVCXBKZ7U9atSg8N3bsjRvvUujhEPspbEhdyy8s= +google.golang.org/genproto v0.0.0-20210916144049-3192f974c780/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8cb86bcceb9..49894d2c8ad 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:dUeqvtUQy6Xh63UIs6Jgkj/97+qWYZ+Gf52HXC0rojE=", - version = "v0.0.0-20210915214522-86cf1236ec46", + sum = "h1:RE6jTVCXBKZ7U9atSg8N3bsjRvvUujhEPspbEhdyy8s=", + version = "v0.0.0-20210916144049-3192f974c780", ) go_repository( name = "org_golang_google_grpc", From 9ff80703892f2823d3b995758b8838ed1effff6b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 17 Sep 2021 15:51:04 +0000 Subject: [PATCH 1073/1518] fix(deps): update google.golang.org/genproto commit hash to b395a37 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1598e8bc89b..dc6aa936b97 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210916144049-3192f974c780 + google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 61c25d5c7e7..f857d21c3a9 100644 --- a/go.sum +++ b/go.sum @@ -364,8 +364,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210916144049-3192f974c780 h1:RE6jTVCXBKZ7U9atSg8N3bsjRvvUujhEPspbEhdyy8s= -google.golang.org/genproto v0.0.0-20210916144049-3192f974c780/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 49894d2c8ad..42625563fc8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:RE6jTVCXBKZ7U9atSg8N3bsjRvvUujhEPspbEhdyy8s=", - version = "v0.0.0-20210916144049-3192f974c780", + sum = "h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w=", + version = "v0.0.0-20210917145530-b395a37504d4", ) go_repository( name = "org_golang_google_grpc", From 48624549b85a8676d1e90d0a7516f1b038fcb1d3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 20 Sep 2021 16:26:51 +0000 Subject: [PATCH 1074/1518] fix(deps): update google.golang.org/genproto commit hash to 26f343e --- go.mod | 2 +- go.sum | 9 ++------- repositories.bzl | 24 ++++++++++++------------ 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index dc6aa936b97..715f4d98312 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 + google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index f857d21c3a9..ea5904f7512 100644 --- a/go.sum +++ b/go.sum @@ -137,7 +137,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -171,7 +170,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -180,7 +178,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -224,7 +221,6 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -305,7 +301,6 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -364,8 +359,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215 h1:bdVWLCdfDvdxf+qXZp5iip6vl2zJGgzhkULcsAiBNmE= +google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 42625563fc8..c88307b0620 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -918,8 +918,8 @@ def go_repositories(): go_repository( name = "com_github_yuin_goldmark", importpath = "github.com/yuin/goldmark", - sum = "h1:dPmz1Snjq0kmkz159iL7S6WzdahUTHnHB5M56WFVifs=", - version = "v1.3.5", + sum = "h1:5tjfNdR2ki3yYQ842+eX2sQHeiwpKJ0RnHO4IYOc4V8=", + version = "v1.1.32", ) go_repository( name = "com_google_cloud_go", @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ysnBoUyeL/H6RCvNRhWHjKoDEmguI+mPU+qHgK8qv/w=", - version = "v0.0.0-20210917145530-b395a37504d4", + sum = "h1:bdVWLCdfDvdxf+qXZp5iip6vl2zJGgzhkULcsAiBNmE=", + version = "v0.0.0-20210920155426-26f343e4c215", ) go_repository( name = "org_golang_google_grpc", @@ -1107,8 +1107,8 @@ def go_repositories(): go_repository( name = "org_golang_x_lint", importpath = "golang.org/x/lint", - sum = "h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=", - version = "v0.0.0-20210508222113-6edffad5e616", + sum = "h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=", + version = "v0.0.0-20200302205851-738671d3881b", ) go_repository( @@ -1120,8 +1120,8 @@ def go_repositories(): go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=", - version = "v0.4.2", + sum = "h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=", + version = "v0.3.0", ) go_repository( name = "org_golang_x_net", @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=", - version = "v0.0.0-20210220032951-036812b2e83c", + sum = "h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=", + version = "v0.0.0-20200625203802-6e8e738ad208", ) go_repository( name = "org_golang_x_sys", @@ -1170,8 +1170,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=", - version = "v0.1.5", + sum = "h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k=", + version = "v0.0.0-20200825202427-b303f430e36d", ) go_repository( From 3103d3ec84771f4af981e1d4b9309e7bde33f845 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Sep 2021 14:39:39 +0000 Subject: [PATCH 1075/1518] fix(deps): update google.golang.org/genproto commit hash to 181ce0d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 715f4d98312..4058dd658b1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215 + google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index ea5904f7512..ff4c83894d9 100644 --- a/go.sum +++ b/go.sum @@ -359,8 +359,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215 h1:bdVWLCdfDvdxf+qXZp5iip6vl2zJGgzhkULcsAiBNmE= -google.golang.org/genproto v0.0.0-20210920155426-26f343e4c215/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 h1:2ncG/LajxmrclaZH+ppVi02rQxz4eXYJzGHdFN4Y9UA= +google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c88307b0620..78aacab0aa1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:bdVWLCdfDvdxf+qXZp5iip6vl2zJGgzhkULcsAiBNmE=", - version = "v0.0.0-20210920155426-26f343e4c215", + sum = "h1:2ncG/LajxmrclaZH+ppVi02rQxz4eXYJzGHdFN4Y9UA=", + version = "v0.0.0-20210921142501-181ce0d877f6", ) go_repository( name = "org_golang_google_grpc", From 46dda80f691867db09783e50f4b90edac7799ad0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 23 Sep 2021 15:04:32 +0000 Subject: [PATCH 1076/1518] fix(deps): update google.golang.org/genproto commit hash to 385e58f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4058dd658b1..8a11b35d2f3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 + google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index ff4c83894d9..db99bcd069e 100644 --- a/go.sum +++ b/go.sum @@ -359,8 +359,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 h1:2ncG/LajxmrclaZH+ppVi02rQxz4eXYJzGHdFN4Y9UA= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555 h1:QZGi7hlBNKN/+08ep63ZSadfgg9ADIBryU4qjYLSx5Y= +google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 78aacab0aa1..2436ccec678 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:2ncG/LajxmrclaZH+ppVi02rQxz4eXYJzGHdFN4Y9UA=", - version = "v0.0.0-20210921142501-181ce0d877f6", + sum = "h1:QZGi7hlBNKN/+08ep63ZSadfgg9ADIBryU4qjYLSx5Y=", + version = "v0.0.0-20210923133937-385e58f4e555", ) go_repository( name = "org_golang_google_grpc", From 59342c79d2a16569e6741a4e053110873ab79674 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Sep 2021 00:30:24 +0000 Subject: [PATCH 1077/1518] fix(deps): update google.golang.org/genproto commit hash to 3dee208 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8a11b35d2f3..7dc07de316d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555 + google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index db99bcd069e..3e75b64013b 100644 --- a/go.sum +++ b/go.sum @@ -359,8 +359,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555 h1:QZGi7hlBNKN/+08ep63ZSadfgg9ADIBryU4qjYLSx5Y= -google.golang.org/genproto v0.0.0-20210923133937-385e58f4e555/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 h1:5Tbluzus3QxoAJx4IefGt1W0HQZW4nuMrVk684jI74Q= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2436ccec678..05f7c23e7e6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1063,8 +1063,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:QZGi7hlBNKN/+08ep63ZSadfgg9ADIBryU4qjYLSx5Y=", - version = "v0.0.0-20210923133937-385e58f4e555", + sum = "h1:5Tbluzus3QxoAJx4IefGt1W0HQZW4nuMrVk684jI74Q=", + version = "v0.0.0-20210924002016-3dee208752a0", ) go_repository( name = "org_golang_google_grpc", From cc31c42e834bf19dc111359f6f6dbca9c95c7d3c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Sep 2021 21:16:41 +0000 Subject: [PATCH 1078/1518] fix(deps): update module google.golang.org/grpc to v1.41.0 --- go.mod | 2 +- go.sum | 8 +++++++- repositories.bzl | 26 ++++++++++++++++---------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 7dc07de316d..4face469d51 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 - google.golang.org/grpc v1.40.0 + google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 3e75b64013b..c332927fa94 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,7 @@ github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwc github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -45,12 +46,14 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -134,6 +137,7 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -375,8 +379,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -398,6 +403,7 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/repositories.bzl b/repositories.bzl index 05f7c23e7e6..81b35a442d7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -100,6 +100,12 @@ def go_repositories(): sum = "h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=", version = "v1.1.0", ) + go_repository( + name = "com_github_cespare_xxhash_v2", + importpath = "github.com/cespare/xxhash/v2", + sum = "h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=", + version = "v2.1.1", + ) go_repository( name = "com_github_chzyer_logex", @@ -135,8 +141,8 @@ def go_repositories(): go_repository( name = "com_github_cncf_xds_go", importpath = "github.com/cncf/xds/go", - sum = "h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c=", - version = "v0.0.0-20210312221358-fbca930ec8ed", + sum = "h1:CevA8fI91PAnP8vpnXuB8ZYAZ5wqY86nAbxfgK8tWO4=", + version = "v0.0.0-20210805033703-aa0b78936158", ) go_repository( @@ -198,8 +204,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:dulLQAYQFYtG5MTplgNGHWuV2D+OBD+Z8lmDBmbLg+s=", - version = "v0.9.9-0.20210512163311-63b5d3c536b0", + sum = "h1:fP+fF0up6oPY49OrjPrhIJ8yQfdIM85NXMLkMg1EXVs=", + version = "v0.9.10-0.20210907150352-cf90f659a021", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -887,8 +893,8 @@ def go_repositories(): go_repository( name = "com_github_stretchr_testify", importpath = "github.com/stretchr/testify", - sum = "h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=", - version = "v1.5.1", + sum = "h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=", + version = "v1.7.0", ) go_repository( name = "com_github_subosito_gotenv", @@ -1007,8 +1013,8 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v3", importpath = "gopkg.in/yaml.v3", - sum = "h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=", - version = "v3.0.0-20210107192922-496545a6307b", + sum = "h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=", + version = "v3.0.0-20200313102051-9f266ea9e77c", ) go_repository( name = "io_etcd_go_bbolt", @@ -1069,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=", - version = "v1.40.0", + sum = "h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E=", + version = "v1.41.0", ) go_repository( From bb2225c08f5f8ff7ed3935b68cfcbb1538af6475 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 25 Sep 2021 16:22:05 -0400 Subject: [PATCH 1079/1518] Use remote plugins, migrate config files (#2347) * Upgrade buf version, use remote plugins Removes the need to depend on protoc-gen-go and protoc-gen-go-grpc * Migrate to v1 of buf.gen.yaml * Migrate buf.yaml to v1 * Update CONTRIBUTING.md references * Regenerate files with latest buf --- CONTRIBUTING.md | 4 +- Makefile | 5 +- README.md | 16 +- buf.gen.yaml | 6 +- buf.yaml | 10 +- docs/docs/tutorials/adding_annotations.md | 7 +- .../tutorials/generating_stubs/using_buf.md | 15 +- examples/internal/helloworld/helloworld.pb.go | 38 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1204 ++++++++--------- .../proto/examplepb/echo_service.pb.go | 34 +- .../proto/examplepb/flow_combination.pb.go | 84 +- .../generate_unbound_methods.buf.gen.yaml | 2 +- .../examplepb/generate_unbound_methods.pb.go | 2 +- .../proto/examplepb/non_standard_names.pb.go | 20 +- .../examplepb/openapi_merge.buf.gen.yaml | 2 +- .../proto/examplepb/openapi_merge_a.pb.go | 18 +- .../proto/examplepb/openapi_merge_b.pb.go | 10 +- .../examplepb/response_body_service.pb.go | 26 +- .../standalone_echo_service.buf.gen.yaml | 2 +- .../internal/proto/examplepb/stream.pb.go | 14 +- .../unannotated_echo_service.buf.gen.yaml | 2 +- .../examplepb/unannotated_echo_service.pb.go | 2 +- .../examplepb/use_go_template.buf.gen.yaml | 2 +- .../proto/examplepb/use_go_template.pb.go | 10 +- .../internal/proto/examplepb/wrappers.pb.go | 54 +- .../internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- .../openapiconfig/openapiconfig.pb.go | 2 +- .../options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- runtime/internal/examplepb/example.pb.go | 2 +- .../examplepb/non_standard_names.pb.go | 16 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 36 files changed, 806 insertions(+), 819 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 13dc5260a34..3d08516dcc5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ All submissions, including submissions by project members, require review. It should be as simple as this (run from the root of the repository): ```bash -docker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/grpc-gateway/build-env:1.16 \ +docker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/grpc-gateway/build-env:1.17 \ /bin/bash -c 'make install && \ make clean && \ make generate' @@ -22,7 +22,7 @@ docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --r bazel run :buildifier' ``` -You may need to authenticate with GitHub to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. +You may need to authenticate with GitHub to pull `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`. You can do this by following the steps on the [GitHub Package docs](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages). ### Using Visual Studio Code dev containers diff --git a/Makefile b/Makefile index 398a4eba185..5a7e3b42441 100644 --- a/Makefile +++ b/Makefile @@ -82,10 +82,7 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh install: - go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0 - go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1 - go install github.com/bufbuild/buf/cmd/buf@v0.51.1 - + go install github.com/bufbuild/buf/cmd/buf@v1.0.0-rc2 go install \ ./protoc-gen-openapiv2 \ ./protoc-gen-grpc-gateway diff --git a/README.md b/README.md index efdecbbb394..7fa417076a1 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ Alternatively, see the section on remotely managed plugin versions below. Here's an example `buf.gen.yaml` you can use to generate the stubs with [buf](https://github.com/bufbuild/buf): ```yaml - version: v1beta1 + version: v1 plugins: - name: go out: gen/go @@ -174,7 +174,7 @@ Alternatively, see the section on remotely managed plugin versions below. Here's what a `buf.gen.yaml` file might look like with this option enabled: ```yaml - version: v1beta1 + version: v1 plugins: - name: go out: gen/go @@ -235,7 +235,7 @@ Alternatively, see the section on remotely managed plugin versions below. > be added to the `deps` array in your `buf.yaml` under the name > `buf.build/googleapis/googleapis`: > ```yaml - > version: v1beta1 + > version: v1 > name: buf.build/yourorg/myprotos > deps: > - buf.build/googleapis/googleapis @@ -249,7 +249,7 @@ Alternatively, see the section on remotely managed plugin versions below. Here's what a `buf.gen.yaml` file might look like: ```yaml - version: v1beta1 + version: v1 plugins: - name: go out: gen/go @@ -299,7 +299,7 @@ Alternatively, see the section on remotely managed plugin versions below. Here's what a `buf.gen.yaml` file might look like with this option enabled: ```yaml - version: v1beta1 + version: v1 plugins: - name: go out: gen/go @@ -384,7 +384,7 @@ Alternatively, see the section on remotely managed plugin versions below. Here's what a `buf.gen.yaml` file might look like: ```yaml - version: v1beta1 + version: v1 plugins: - name: go out: gen/go @@ -407,7 +407,7 @@ Alternatively, see the section on remotely managed plugin versions below. `buf`, you can add the `buf.build/grpc-ecosystem/grpc-gateway` dependency to your `deps` array: ```yaml - version: v1beta1 + version: v1 name: buf.build/yourorg/myprotos deps: - buf.build/googleapis/googleapis @@ -480,7 +480,7 @@ When using `buf` to generate stubs, flags and parameters are passed through the `opt` field in your `buf.gen.yaml` file, for example: ```yaml -version: v1beta1 +version: v1 plugins: - name: grpc-gateway out: gen/go diff --git a/buf.gen.yaml b/buf.gen.yaml index 008a5e702d7..3d3011103d3 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -1,10 +1,10 @@ -version: v1beta1 +version: v1 plugins: - - name: go + - remote: buf.build/library/plugins/go:v1.27.1-1 out: . opt: - paths=source_relative - - name: go-grpc + - remote: buf.build/library/plugins/go-grpc:v1.1.0-2 out: . opt: - paths=source_relative diff --git a/buf.yaml b/buf.yaml index 1291c02d83e..c3b872a9f15 100644 --- a/buf.yaml +++ b/buf.yaml @@ -1,12 +1,13 @@ -version: v1beta1 +version: v1 name: buf.build/grpc-ecosystem/grpc-gateway deps: - buf.build/googleapis/googleapis build: - roots: - - . excludes: - bazel-grpc-gateway +breaking: + use: + - FILE lint: use: - DEFAULT @@ -164,6 +165,3 @@ lint: - examples/internal/proto/examplepb/flow_combination.proto - examples/internal/proto/examplepb/openapi_merge_a.proto - examples/internal/proto/examplepb/openapi_merge_b.proto -breaking: - use: - - FILE diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index 706158aad39..9c2e6ea0e8c 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -53,7 +53,7 @@ Now that we've got the gRPC-Gateway annotations added to the proto file, we need We'll need to add the gRPC-Gateway generator to the generation configuration: ```yaml -version: v1beta1 +version: v1 plugins: - name: go out: proto @@ -69,13 +69,10 @@ plugins: We'll also need to add the `googleapis` dependency to our `buf.yaml` file: ```yaml -version: v1beta1 +version: v1 name: buf.build/myuser/myrepo deps: - buf.build/googleapis/googleapis -build: - roots: - - proto ``` Then we need to run `buf mod update` to select a version of the dependency to use. diff --git a/docs/docs/tutorials/generating_stubs/using_buf.md b/docs/docs/tutorials/generating_stubs/using_buf.md index 2c2aabb76d5..f7d657fb4b9 100644 --- a/docs/docs/tutorials/generating_stubs/using_buf.md +++ b/docs/docs/tutorials/generating_stubs/using_buf.md @@ -10,24 +10,19 @@ grand_parent: Tutorials [Buf](https://github.com/bufbuild/buf) is a tool that provides various protobuf utilities such as linting, breaking change detection and generation. Please find installation instructions on [https://docs.buf.build/installation/](https://docs.buf.build/installation/). -It is configured through a `buf.yaml` file that should be checked in to the root of your repository. Buf will automatically read this file if present. Configuration can also be provided via the command-line flag `--config`, which accepts a path to a `.json` or `.yaml` file, or direct JSON or YAML data. +It is configured through a `buf.yaml` file that should be checked in to the root of your Protobuf file hierarchy. Buf will automatically read this file if present. Configuration can also be provided via the command-line flag `--config`, which accepts a path to a `.json` or `.yaml` file, or direct JSON or YAML data. As opposed to `protoc`, where all `.proto` files are manually specified on the command-line, buf operates by recursively discovering all `.proto` files under configuration and building them. -All Buf operations that use your local `.proto` files as input rely on a valid build configuration. This configuration tells Buf where to search for `.proto` files, and how to handle imports. As opposed to `protoc`, where all `.proto` files are manually specified on the command-line, buf operates by recursively discovering all `.proto` files under configuration and building them. - -The following is an example of a valid configuration, assuming you have your `.proto` files rooted in the `proto` folder relative to the root of your repository. +The following is an example of a valid configuration, and you would put it in the root of your Protobuf file hierarchy, e.g. in `proto/buf.yaml` relative to the root of your repository. ```yaml -version: v1beta1 +version: v1 name: buf.build/myuser/myrepo -build: - roots: - - proto ``` -To generate type and gRPC stubs for Go, create the file `buf.gen.yaml` at the root of the repository: +To generate type and gRPC stubs for Go, create the file `buf.gen.yaml`: ```yaml -version: v1beta1 +version: v1 plugins: - name: go out: proto diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 5b119a1dd3a..1382c2225c4 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/helloworld/helloworld.proto package helloworld @@ -246,24 +246,24 @@ var file_examples_internal_helloworld_helloworld_proto_rawDesc = []byte{ 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x12, 0x0b, 0x2f, 0x73, - 0x61, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5a, 0x16, 0x12, 0x14, 0x2f, 0x73, 0x61, - 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, - 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x76, - 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, - 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76, 0x61, 0x6c, 0x2f, - 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18, 0x12, 0x16, 0x2f, - 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, - 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, - 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, - 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, - 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, - 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x5a, 0x16, 0x12, 0x14, + 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d, + 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18, + 0x12, 0x16, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, + 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, + 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, + 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, + 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, + 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x12, 0x0b, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 52dc83b5cfe..5c79d6ac81a 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb @@ -1356,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xce, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xcc, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1537,208 +1537,241 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x65, 0x0a, 0x2d, 0x72, 0x65, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x6a, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, - 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, - 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, - 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, - 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, - 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, - 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x3a, 0x8e, 0x02, 0x92, 0x41, 0x8a, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, - 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, - 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, - 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, - 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, + 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, + 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, + 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, + 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, + 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, - 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, - 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, + 0x8e, 0x02, 0x92, 0x41, 0x8a, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, + 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, + 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, + 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, + 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, + 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, + 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, + 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, + 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, + 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, - 0x49, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, - 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, - 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, + 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, + 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, + 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, @@ -1746,182 +1779,155 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, - 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, + 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, - 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb9, 0x01, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, + 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x32, 0x24, 0x2f, - 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, - 0x2f, 0x2a, 0x7d, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, - 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, + 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, + 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, + 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, - 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, - 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, - 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, + 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, + 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, + 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, + 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, - 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, + 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, @@ -1941,267 +1947,261 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, - 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, - 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, - 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, - 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, - 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, - 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, + 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, + 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, + 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, + 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, + 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, - 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, - 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, - 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, + 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, - 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, - 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, + 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, - 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, - 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, - 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, + 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, + 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, + 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, + 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, + 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, + 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, + 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, + 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, - 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, - 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, - 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, - 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, - 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, - 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, - 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, - 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, - 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, - 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, - 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, - 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, - 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, - 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, - 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, - 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, - 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, - 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, - 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, - 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, - 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, - 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, - 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, - 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, - 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, - 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, + 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, + 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, + 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, + 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, + 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, + 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, + 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, + 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, + 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, + 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, + 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, + 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, + 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, + 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, + 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, + 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, + 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, + 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, + 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 535e3df9761..c25a94dd37a 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service @@ -435,18 +435,18 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, - 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, - 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, - 0x74, 0x65, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, + 0xe4, 0x93, 0x02, 0xae, 0x01, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, + 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, + 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, + 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, + 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x22, 0x15, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, @@ -455,8 +455,8 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x20, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01, 0x2a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xab, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, @@ -478,8 +478,8 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xb7, + 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 6124f71de75..c0046712935 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb @@ -362,19 +362,19 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x22, 0x0d, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x2a, 0x5a, - 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, - 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, 0x22, 0x0e, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x1f, - 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, - 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, - 0x18, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x19, 0x22, 0x17, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xbd, 0x01, 0x0a, 0x16, 0x52, 0x70, 0x63, 0x50, + 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x3a, 0x01, 0x2a, + 0x5a, 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, + 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, 0x22, + 0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, + 0x1f, 0x3a, 0x01, 0x63, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, + 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, + 0x5a, 0x18, 0x3a, 0x01, 0x63, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x21, 0x3a, 0x01, 0x63, 0x22, + 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, + 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x19, 0x22, + 0x17, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x22, 0x0d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xbd, 0x01, 0x0a, 0x16, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x70, 0x63, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, @@ -395,14 +395,14 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x22, 0x20, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, - 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, - 0x01, 0x63, 0x5a, 0x1f, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, - 0x72, 0x70, 0x63, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, - 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, - 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x3a, 0x01, 0x63, + 0x5a, 0x1f, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, + 0x63, 0x5a, 0x22, 0x3a, 0x01, 0x63, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, + 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, + 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, + 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, + 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, @@ -411,20 +411,20 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x3a, 0x01, 0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, - 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, - 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x3a, 0x01, + 0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, + 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x3a, 0x01, 0x63, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, - 0x1c, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, + 0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x1b, 0x3a, 0x01, 0x63, 0x22, + 0x16, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x24, 0x3a, 0x01, 0x63, 0x22, 0x1f, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x1c, 0x22, + 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x10, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xc5, 0x01, 0x0a, 0x19, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, @@ -447,14 +447,14 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, - 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x22, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, - 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x25, 0x22, 0x20, + 0x3a, 0x01, 0x63, 0x5a, 0x22, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, + 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x31, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, + 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x25, 0x3a, 0x01, 0x63, 0x22, 0x20, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x32, 0x2f, + 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x32, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x3a, 0x01, 0x63, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml b/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml index 3964e3681c3..1809d1fab0b 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml +++ b/examples/internal/proto/examplepb/generate_unbound_methods.buf.gen.yaml @@ -1,4 +1,4 @@ -version: v1beta1 +version: v1 plugins: - name: grpc-gateway out: . diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index adc726c18be..2e0e37bb487 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 708878dd7db..2b274d45490 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb @@ -635,10 +635,10 @@ var file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = [] 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x32, - 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, - 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x55, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, @@ -650,11 +650,11 @@ var file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = [] 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, - 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x32, 0x2f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, diff --git a/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml b/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml index c2fa05fa045..042a099fdfd 100644 --- a/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml +++ b/examples/internal/proto/examplepb/openapi_merge.buf.gen.yaml @@ -1,4 +1,4 @@ -version: v1beta1 +version: v1 plugins: - name: openapiv2 out: . diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index 692c4e835f1..e0118b45636 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services @@ -199,8 +199,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byt 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x2f, 0x31, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x2f, 0x31, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, @@ -208,8 +208,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byt 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, - 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x32, 0xb8, 0x02, 0x0a, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x2f, 0x32, 0x32, 0xb8, 0x02, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, @@ -218,8 +218,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byt 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x43, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x31, 0x3a, 0x01, 0x2a, + 0x61, 0x67, 0x65, 0x43, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, + 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x31, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, @@ -228,8 +228,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_a_proto_rawDesc = []byt 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x22, 0x1a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x63, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x2f, 0x32, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 50a5b8b7dad..bf7e934a8b3 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services @@ -147,8 +147,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = []byt 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4f, 0x75, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x31, 0x3a, 0x01, 0x2a, + 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, + 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x31, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x77, 0x6f, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, @@ -157,8 +157,8 @@ var file_examples_internal_proto_examplepb_openapi_merge_b_proto_rawDesc = []byt 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x49, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x22, 0x1a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x14, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x62, 0x2f, 0x32, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x93, 0x02, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x62, 0x2f, 0x32, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index b86aa06bbfc..f0f77c708b6 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb @@ -421,9 +421,9 @@ var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x14, - 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, - 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xc7, + 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x62, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x12, 0xc7, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, @@ -434,9 +434,9 @@ var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x28, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x16, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xc7, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x69, 0x65, + 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x12, 0xc7, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, @@ -447,9 +447,9 @@ var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x21, 0x12, 0x17, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x06, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x21, 0x62, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x17, 0x2f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, + 0x61, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, @@ -459,9 +459,9 @@ var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x2d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x1b, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, - 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x4d, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1b, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, diff --git a/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml index 561551b399b..867387579ee 100644 --- a/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml +++ b/examples/internal/proto/examplepb/standalone_echo_service.buf.gen.yaml @@ -1,4 +1,4 @@ -version: v1beta1 +version: v1 plugins: - name: grpc-gateway out: . diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 25923b133e5..2fc498cac49 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/stream.proto package examplepb @@ -52,9 +52,9 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x8b, 0x01, 0x0a, + 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x28, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, @@ -72,9 +72,9 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, 0x12, 0x58, + 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x28, 0x01, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml index ffed173013a..6ec699a9736 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml +++ b/examples/internal/proto/examplepb/unannotated_echo_service.buf.gen.yaml @@ -1,4 +1,4 @@ -version: v1beta1 +version: v1 plugins: - name: grpc-gateway out: . diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 7e6f77da02f..e5212650c40 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml b/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml index 029ebddc595..cfbdaa9d272 100644 --- a/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml +++ b/examples/internal/proto/examplepb/use_go_template.buf.gen.yaml @@ -1,4 +1,4 @@ -version: v1beta1 +version: v1 plugins: - name: openapiv2 out: . diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 63d35d588af..6d0a92d1fca 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb @@ -296,8 +296,8 @@ var file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = []byt 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xa3, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, + 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, @@ -306,8 +306,8 @@ var file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = []byt 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 3475c44f414..a79ac23fc93 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb @@ -194,74 +194,74 @@ var file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = []byte{ 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x65, 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, + 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x01, - 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, + 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, - 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, - 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, + 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x65, 0x73, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, - 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, + 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, - 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, + 0x2a, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x65, 0x73, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, - 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x3a, - 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index bf382ae95e6..9612abc1528 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 90eb27fa0fd..7fabded9a23 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 699f7bd5714..9db01b2fb5c 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index c13ec108e38..1c37871865e 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index 9c0fa7fbc26..be646f7356b 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index c6b16fc6015..51f619ab218 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 06c6c56ea62..ff00480c13c 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 440e049053e..4411ff3651f 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index c05eb5597b7..43ec1325e48 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb @@ -681,9 +681,9 @@ var file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = []byte{ 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x27, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, - 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xee, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, + 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0xee, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, @@ -695,10 +695,10 @@ var file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = []byte{ 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x37, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, + 0x02, 0x37, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, + 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, + 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 2ce424af39e..118821e812d 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 6c6bef7f7b3..26d438d352d 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.18.0 // source: runtime/internal/examplepb/proto3.proto package examplepb From 1d4438ad05dc9579054fe45153c4985be6ed0e3b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Sep 2021 16:27:00 +0000 Subject: [PATCH 1080/1518] fix(deps): update google.golang.org/genproto commit hash to 433400c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4face469d51..8627b1a0a20 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 + google.golang.org/genproto v0.0.0-20210927142257-433400c27d05 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c332927fa94..fda6c9879b3 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 h1:5Tbluzus3QxoAJx4IefGt1W0HQZW4nuMrVk684jI74Q= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210927142257-433400c27d05 h1:6/1QShroBaS9sY9NbPquolxRETG6PZhfv8ohdbLieBg= +google.golang.org/genproto v0.0.0-20210927142257-433400c27d05/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 81b35a442d7..d150c34bf77 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5Tbluzus3QxoAJx4IefGt1W0HQZW4nuMrVk684jI74Q=", - version = "v0.0.0-20210924002016-3dee208752a0", + sum = "h1:6/1QShroBaS9sY9NbPquolxRETG6PZhfv8ohdbLieBg=", + version = "v0.0.0-20210927142257-433400c27d05", ) go_repository( name = "org_golang_google_grpc", From 01b365b2122763dfec831649278cc4110fa9081c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Sep 2021 18:09:48 +0000 Subject: [PATCH 1081/1518] chore(deps): update dependency bazel_skylib to v1.1.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ddfd0ebb8ff..996a43cf546 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -12,10 +12,10 @@ http_archive( http_archive( name = "bazel_skylib", - sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c", + sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz", ], ) From c90e886dd6700845012613236177e9eac8a9a38e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 21:28:34 -0400 Subject: [PATCH 1082/1518] chore(deps): bump nokogiri from 1.11.1 to 1.12.5 in /docs (#2360) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.11.1 to 1.12.5. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.11.1...v1.12.5) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index f0c7fe77d2d..7d27ebd9310 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -209,15 +209,15 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.5.0) + mini_portile2 (2.6.1) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) minitest (5.14.2) multipart-post (2.1.1) - nokogiri (1.11.1) - mini_portile2 (~> 2.5.0) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) racc (~> 1.4) octokit (4.19.0) faraday (>= 0.9) From ece6fbbd7ed5ab750ebce98554b1d9098a17076e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 28 Sep 2021 15:28:37 +0000 Subject: [PATCH 1083/1518] fix(deps): update google.golang.org/genproto commit hash to c7af6a1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8627b1a0a20..520ec58c548 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210927142257-433400c27d05 + google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index fda6c9879b3..d47203ac3f3 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210927142257-433400c27d05 h1:6/1QShroBaS9sY9NbPquolxRETG6PZhfv8ohdbLieBg= -google.golang.org/genproto v0.0.0-20210927142257-433400c27d05/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9 h1:XTH066D35LyHehRwlYhoK3qA+Hcgvg5xREG4kFQEW1Y= +google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d150c34bf77..c688a95af24 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:6/1QShroBaS9sY9NbPquolxRETG6PZhfv8ohdbLieBg=", - version = "v0.0.0-20210927142257-433400c27d05", + sum = "h1:XTH066D35LyHehRwlYhoK3qA+Hcgvg5xREG4kFQEW1Y=", + version = "v0.0.0-20210928142010-c7af6a1a74c9", ) go_repository( name = "org_golang_google_grpc", From dd60b3de15781cc238d90bf14862c6af61d98da7 Mon Sep 17 00:00:00 2001 From: Anthony Lee Date: Tue, 28 Sep 2021 22:14:44 -0500 Subject: [PATCH 1084/1518] Add docs for merging OpenAPI into a single file (#2354) * Add docs for merging OpenAPI into a single file * Fix go.mod --- .../mapping/customizing_openapi_output.md | 59 ++++++++++++++++--- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 132c6675417..48f5628a41e 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -102,7 +102,6 @@ that are not currently used. `OPTIONAL` support is currently under discussion in [this issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/669). For `IMMUTABLE` and `INPUT_ONLY` fields, there is an [open issue](https://github.com/OAI/OpenAPI-Specification/issues/1497) in the Open API specification for adding functionality for write-once or immutable fields to the spec. - ## Using go templates in proto file comments Use [Go templates](https://golang.org/pkg/text/template/) in your proto file comments to allow more advanced documentation such as: @@ -111,7 +110,7 @@ Use [Go templates](https://golang.org/pkg/text/template/) in your proto file com - Import the content of external files (such as [Markdown](https://en.wikipedia.org/wiki/Markdown)). -## How to use it +### How to use it By default this function is turned off, so if you want to use it you have to add the `use_go_templates` option: @@ -125,7 +124,7 @@ or: --openapiv2_out=use_go_templates=true:. ``` -### Example script +#### Example script Example of a bash script with the `use_go_templates` flag set to true: @@ -139,7 +138,7 @@ $ protoc -I. \ path/to/my/proto/v1/myproto.proto ``` -### Example proto file +#### Example proto file Example of a proto file with Go templates. This proto file imports documentation from another file, `tables.md`: @@ -186,15 +185,15 @@ The content of `tables.md`: | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} ``` -## OpenAPI output +### OpenAPI output -### SwaggerUI +#### SwaggerUI This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/). ![Screenshot OpenAPI file in SwaggerUI](../../assets/images/gotemplates/swaggerui.png) -### Postman +#### Postman This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/). @@ -202,4 +201,50 @@ This is how the OpenAPI file would be rendered in [Postman](https://www.getpostm For a more detailed example of a proto file that has Go, templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). +## Other plugin options + +A comprehensive list of OpenAPI plugin options can be found [here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/protoc-gen-openapiv2/main.go). Options can be passed via `protoc` CLI: + +```sh +--openapiv2_out . --openapiv2_opt bar=baz,color=red +``` + +Or, with `buf` in `buf.gen.yaml`: + +```yaml + - name: openapiv2 + out: foo + opt: bar=baz,color=red +``` + +### Merging output + +If your protobuf definitions are spread across multiple files, the OpenAPI plugin will create a file for each `.proto` input. This may make sense for Go bindings, since they still share a package space, but fragmenting OpenAPI specifications across multiple files changes the schema itself. + +To merge disparate `.proto` inputs into a single OpenAPI file, use the `allow_merge` and `merge_file_name` options. + + +`opt: allow_merge=true,merge_file_name=foo` will result in a single `foo.swagger.json`. + +### Enums as integers + +To generate enums as integers instead of strings, use `enums_as_ints`. + +`opt: enums_as_ints=true` will result in: + + +```json +{ + "name": "enumValue", + "description": " - Example enums", + "in": "query", + "required": false, + "type": "int", + "enum": [ + 0, + 1 + ], + "default": 0 +}, +``` {% endraw %} From d1101ef4170877237996548b42db58e708234772 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 29 Sep 2021 22:21:04 +0000 Subject: [PATCH 1085/1518] fix(deps): update google.golang.org/genproto commit hash to 896c89f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 520ec58c548..201594fa459 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9 + google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index d47203ac3f3..203662694b8 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9 h1:XTH066D35LyHehRwlYhoK3qA+Hcgvg5xREG4kFQEW1Y= -google.golang.org/genproto v0.0.0-20210928142010-c7af6a1a74c9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2 h1:G7kbolbig6UyfoRItVUeBGV/38VzxjAZYTavVGbYYss= +google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c688a95af24..ec1f6815582 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XTH066D35LyHehRwlYhoK3qA+Hcgvg5xREG4kFQEW1Y=", - version = "v0.0.0-20210928142010-c7af6a1a74c9", + sum = "h1:G7kbolbig6UyfoRItVUeBGV/38VzxjAZYTavVGbYYss=", + version = "v0.0.0-20210929214142-896c89f843d2", ) go_repository( name = "org_golang_google_grpc", From 4e480b3bfad64c14965f021fa24475f982e158ec Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 30 Sep 2021 15:53:45 +0000 Subject: [PATCH 1086/1518] fix(deps): update google.golang.org/genproto commit hash to 2e2e100 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 201594fa459..a44ceb94994 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2 + google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 203662694b8..319e7b543ec 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2 h1:G7kbolbig6UyfoRItVUeBGV/38VzxjAZYTavVGbYYss= -google.golang.org/genproto v0.0.0-20210929214142-896c89f843d2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3 h1:+F3FcO6LTrzNq5wp1Z6JtoBvnJzX6euyN70FoyMDXy4= +google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ec1f6815582..1ff418d0bca 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:G7kbolbig6UyfoRItVUeBGV/38VzxjAZYTavVGbYYss=", - version = "v0.0.0-20210929214142-896c89f843d2", + sum = "h1:+F3FcO6LTrzNq5wp1Z6JtoBvnJzX6euyN70FoyMDXy4=", + version = "v0.0.0-20210930144712-2e2e1008e8a3", ) go_repository( name = "org_golang_google_grpc", From 9adcc61f6626371766da7c03bd1e574d970e8514 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 1 Oct 2021 16:23:48 -0400 Subject: [PATCH 1087/1518] Add strategy: all suggestion to openapiv2 merge docs (#2368) --- docs/docs/mapping/customizing_openapi_output.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 48f5628a41e..a0ff6211c98 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -223,8 +223,15 @@ If your protobuf definitions are spread across multiple files, the OpenAPI plugi To merge disparate `.proto` inputs into a single OpenAPI file, use the `allow_merge` and `merge_file_name` options. +`opt: allow_merge=true,merge_file_name=foo` will result in a single `foo.swagger.json`. Note that you may need to set +the [generation strategy](https://docs.buf.build/configuration/v1/buf-gen-yaml/#strategy) to `all` when merging many files: -`opt: allow_merge=true,merge_file_name=foo` will result in a single `foo.swagger.json`. +```yaml + - name: openapiv2 + out: foo + strategy: all + opt: allow_merge=true,merge_file_name=foo +``` ### Enums as integers From d57cffa4da9765253ea3e1f1238ac5317b3c5597 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 1 Oct 2021 23:53:28 +0000 Subject: [PATCH 1088/1518] fix(deps): update google.golang.org/genproto commit hash to bfb93cc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a44ceb94994..4995a2c4e62 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3 + google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 319e7b543ec..8d1e1063829 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3 h1:+F3FcO6LTrzNq5wp1Z6JtoBvnJzX6euyN70FoyMDXy4= -google.golang.org/genproto v0.0.0-20210930144712-2e2e1008e8a3/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9 h1:eF1wcrhdz56Vugf8qNX5dD93ItkrhothojQyHXqloe0= +google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1ff418d0bca..b37630b9dde 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:+F3FcO6LTrzNq5wp1Z6JtoBvnJzX6euyN70FoyMDXy4=", - version = "v0.0.0-20210930144712-2e2e1008e8a3", + sum = "h1:eF1wcrhdz56Vugf8qNX5dD93ItkrhothojQyHXqloe0=", + version = "v0.0.0-20211001223012-bfb93cce50d9", ) go_repository( name = "org_golang_google_grpc", From 117c4e1a6223f4755b2891e69db05fe5ac41eb82 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 5 Oct 2021 16:32:00 +0000 Subject: [PATCH 1089/1518] fix(deps): update google.golang.org/genproto commit hash to c76a74d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4995a2c4e62..41dd0ba1b9b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9 + google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 8d1e1063829..132f982ab59 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9 h1:eF1wcrhdz56Vugf8qNX5dD93ItkrhothojQyHXqloe0= -google.golang.org/genproto v0.0.0-20211001223012-bfb93cce50d9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e h1:Im71rbA1N3CbIag/PumYhQcNR8bLNmuOtRIyOnnLsT8= +google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b37630b9dde..1edb7766aec 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:eF1wcrhdz56Vugf8qNX5dD93ItkrhothojQyHXqloe0=", - version = "v0.0.0-20211001223012-bfb93cce50d9", + sum = "h1:Im71rbA1N3CbIag/PumYhQcNR8bLNmuOtRIyOnnLsT8=", + version = "v0.0.0-20211005153810-c76a74d43a8e", ) go_repository( name = "org_golang_google_grpc", From f36865e0148de27784bf2a6a92e8a3efac5cf13b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 5 Oct 2021 18:57:34 +0000 Subject: [PATCH 1090/1518] fix(deps): update golang.org/x/oauth2 commit hash to 6b3c2da --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 41dd0ba1b9b..027c2232764 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f + golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index 132f982ab59..661594ac630 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 1edb7766aec..a9f4a5594a5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=", - version = "v0.0.0-20210819190943-2bc19b11175f", + sum = "h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE=", + version = "v0.0.0-20211005180243-6b3c2da341f1", ) go_repository( name = "org_golang_x_sync", From f03b690c5597f3b4fa4b54ab5415584379d205b8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 5 Oct 2021 20:21:51 +0000 Subject: [PATCH 1091/1518] chore(deps): update dependency com_google_protobuf to v3.18.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 996a43cf546..39bbc370912 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "14e8042b5da37652c92ef6a2759e7d2979d295f60afd7767825e3de68c856c54", - strip_prefix = "protobuf-3.18.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.18.0.tar.gz"], + sha256 = "9111bf0b542b631165fadbd80aa60e7fb25b25311c532139ed2089d76ddf6dd7", + strip_prefix = "protobuf-3.18.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.18.1.tar.gz"], ) http_archive( From a7db293010edc2ffe2a855163affcf6353b13297 Mon Sep 17 00:00:00 2001 From: momom-i <51011095+momom-i@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:24:13 +0900 Subject: [PATCH 1092/1518] fix to convert timestamp string without double quotation (#2367) --- runtime/convert.go | 2 ++ runtime/convert_test.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/runtime/convert.go b/runtime/convert.go index 2deef8b481e..e6bc4e6ceec 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -207,6 +207,7 @@ func BytesSlice(val, sep string) ([][]byte, error) { // Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp. func Timestamp(val string) (*timestamppb.Timestamp, error) { var r timestamppb.Timestamp + val = strconv.Quote(strings.Trim(val, `"`)) unmarshaler := &protojson.UnmarshalOptions{} err := unmarshaler.Unmarshal([]byte(val), &r) if err != nil { @@ -218,6 +219,7 @@ func Timestamp(val string) (*timestamppb.Timestamp, error) { // Duration converts the given string into a timestamp.Duration. func Duration(val string) (*durationpb.Duration, error) { var r durationpb.Duration + val = strconv.Quote(strings.Trim(val, `"`)) unmarshaler := &protojson.UnmarshalOptions{} err := unmarshaler.Unmarshal([]byte(val), &r) if err != nil { diff --git a/runtime/convert_test.go b/runtime/convert_test.go index d7d970db427..d8f8ec1a634 100644 --- a/runtime/convert_test.go +++ b/runtime/convert_test.go @@ -25,6 +25,15 @@ func TestConvertTimestamp(t *testing.T) { }, wanterr: false, }, + { + name: "a valid RFC3339 timestamp without double quotation", + input: "2016-05-10T10:19:13.123Z", + output: ×tamppb.Timestamp{ + Seconds: 1462875553, + Nanos: 123000000, + }, + wanterr: false, + }, { name: "invalid timestamp", input: `"05-10-2016T10:19:13.123Z"`, @@ -81,6 +90,15 @@ func TestConvertDuration(t *testing.T) { }, wanterr: false, }, + { + name: "a valid duration without double quotation", + input: "123.456s", + output: &durationpb.Duration{ + Seconds: 123, + Nanos: 456000000, + }, + wanterr: false, + }, { name: "invalid duration", input: `"123years"`, From a6177804564d90e167fb639ea3d37e50dd141c79 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Oct 2021 14:03:41 +0000 Subject: [PATCH 1093/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.2 --- WORKSPACE | 6 +++--- examples/internal/helloworld/helloworld.pb.go | 2 +- examples/internal/proto/examplepb/a_bit_of_everything.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.go | 2 +- .../internal/proto/examplepb/generate_unbound_methods.pb.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_a.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_b.pb.go | 2 +- .../internal/proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../internal/proto/examplepb/unannotated_echo_service.pb.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- internal/descriptor/openapiconfig/openapiconfig.pb.go | 2 +- protoc-gen-openapiv2/options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 25 files changed, 27 insertions(+), 27 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 39bbc370912..ba313095119 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -80,9 +80,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "b8b69615e8d9ade79f3612311b8d0c4dfe01017420c90eed11db15e9e7c9ff3c", - strip_prefix = "buildtools-4.2.1", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.1.tar.gz"], + sha256 = "ae34c344514e08c23e90da0e2d6cb700fcd28e80c02e23e4d5715dddcb42f7b3", + strip_prefix = "buildtools-4.2.2", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.2.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 1382c2225c4..78b00fdd3ca 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 5c79d6ac81a..0aed3d96719 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index c25a94dd37a..e5b5ebf9d36 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index c0046712935..1610fcd774c 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index 2e0e37bb487..2fc7f195564 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 2b274d45490..240b5a31434 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index e0118b45636..9498e38f3ec 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index bf7e934a8b3..ad80ed1fff5 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index f0f77c708b6..73471d2279d 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 2fc498cac49..a024a6acf46 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index e5212650c40..3ce8d0a28a7 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 6d0a92d1fca..a81dd608bf0 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index a79ac23fc93..72de8e91337 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 9612abc1528..a281df9d4c0 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 7fabded9a23..6bd214f8a76 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 9db01b2fb5c..77319365a63 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index 1c37871865e..029622f4ee1 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index be646f7356b..d4add30fd00 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 51f619ab218..8f1dc3a8095 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index ff00480c13c..a5417c17c1a 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 4411ff3651f..970f0ee7fff 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 43ec1325e48..81a3ee5312e 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 118821e812d..ab4a14bd5e3 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 26d438d352d..d57532ddb7a 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.0 +// protoc v3.18.1 // source: runtime/internal/examplepb/proto3.proto package examplepb From 87585600586ce239aa15b1b1c60653d8d640b1ea Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Oct 2021 17:18:58 +0000 Subject: [PATCH 1094/1518] fix(deps): update google.golang.org/genproto commit hash to 82e0270 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 027c2232764..9cdc1c5cb10 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e + google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 661594ac630..39018751ccf 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e h1:Im71rbA1N3CbIag/PumYhQcNR8bLNmuOtRIyOnnLsT8= -google.golang.org/genproto v0.0.0-20211005153810-c76a74d43a8e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 h1:YXPV/eKW0ZWRdB5tyI6aPoaa2Wxb4OSlFrTREMdwn64= +google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a9f4a5594a5..c7f284636ab 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Im71rbA1N3CbIag/PumYhQcNR8bLNmuOtRIyOnnLsT8=", - version = "v0.0.0-20211005153810-c76a74d43a8e", + sum = "h1:YXPV/eKW0ZWRdB5tyI6aPoaa2Wxb4OSlFrTREMdwn64=", + version = "v0.0.0-20211007155348-82e027067bd4", ) go_repository( name = "org_golang_google_grpc", From 5fdd81c05a7dc2fe7456841f87accaa91b5afdaa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 Oct 2021 00:37:57 +0000 Subject: [PATCH 1095/1518] chore(deps): update golang docker tag to v1.17.2 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 2dbbd88528e..5e5a9ed09c3 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.1 +FROM golang:1.17.2 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index ffe31fbcbe3..1e1ea215335 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.1 as builder +FROM golang:1.17.2 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 63c8cb66078..2a69be49112 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.1 as builder +FROM golang:1.17.2 as builder ARG RELEASE_VERSION From 2ab24be0630519357150058273df3c7ab212f69c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 Oct 2021 15:05:09 +0000 Subject: [PATCH 1096/1518] fix(deps): update google.golang.org/genproto commit hash to 270636b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9cdc1c5cb10..15ac1381998 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 + google.golang.org/genproto v0.0.0-20211008145708-270636b82663 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 39018751ccf..c2b6221a9ef 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 h1:YXPV/eKW0ZWRdB5tyI6aPoaa2Wxb4OSlFrTREMdwn64= -google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663 h1:33YYJanAOLxgS7pGjzC1IUrFLpwN//bbgtnKYikOmQU= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c7f284636ab..21b1331a974 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:YXPV/eKW0ZWRdB5tyI6aPoaa2Wxb4OSlFrTREMdwn64=", - version = "v0.0.0-20211007155348-82e027067bd4", + sum = "h1:33YYJanAOLxgS7pGjzC1IUrFLpwN//bbgtnKYikOmQU=", + version = "v0.0.0-20211008145708-270636b82663", ) go_repository( name = "org_golang_google_grpc", From 9ec62387b4d04e454fcc84ab8f7d0d0c11dddde1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 11 Oct 2021 17:47:04 +0000 Subject: [PATCH 1097/1518] fix(deps): update google.golang.org/genproto commit hash to a5fb325 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 15ac1381998..a875a00f44d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211008145708-270636b82663 + google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c2b6221a9ef..2cd4ca014c9 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663 h1:33YYJanAOLxgS7pGjzC1IUrFLpwN//bbgtnKYikOmQU= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI= +google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 21b1331a974..a0d5d41b4b6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:33YYJanAOLxgS7pGjzC1IUrFLpwN//bbgtnKYikOmQU=", - version = "v0.0.0-20211008145708-270636b82663", + sum = "h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI=", + version = "v0.0.0-20211011165927-a5fb3255271e", ) go_repository( name = "org_golang_google_grpc", From bd6eb4923020763699838b7ac022ac374f6fa9bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Oct 2021 15:02:56 +0000 Subject: [PATCH 1098/1518] fix(deps): update google.golang.org/genproto commit hash to e1d23e1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a875a00f44d..0b32ec010d8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e + google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 2cd4ca014c9..1fa853bf3cc 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI= -google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178 h1:sjksfRCbEowdKjfEEAUtbT/Ji7rS6z/Rr/075r57JLQ= +google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a0d5d41b4b6..b17002f730a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI=", - version = "v0.0.0-20211011165927-a5fb3255271e", + sum = "h1:sjksfRCbEowdKjfEEAUtbT/Ji7rS6z/Rr/075r57JLQ=", + version = "v0.0.0-20211012143446-e1d23e1da178", ) go_repository( name = "org_golang_google_grpc", From ad1ba549fb43ac54fc44b45029cb79b110c1d0e1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Oct 2021 03:13:15 +0000 Subject: [PATCH 1099/1518] fix(deps): update google.golang.org/genproto commit hash to ce87815 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0b32ec010d8..d88ce6a9595 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178 + google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 1fa853bf3cc..fda8c77b8c7 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178 h1:sjksfRCbEowdKjfEEAUtbT/Ji7rS6z/Rr/075r57JLQ= -google.golang.org/genproto v0.0.0-20211012143446-e1d23e1da178/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4 h1:NBxB1XxiWpGqkPUiJ9PoBXkHV5A9+GohMOA+EmWoPbU= +google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b17002f730a..450fd4e4a9a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:sjksfRCbEowdKjfEEAUtbT/Ji7rS6z/Rr/075r57JLQ=", - version = "v0.0.0-20211012143446-e1d23e1da178", + sum = "h1:NBxB1XxiWpGqkPUiJ9PoBXkHV5A9+GohMOA+EmWoPbU=", + version = "v0.0.0-20211013025323-ce878158c4d4", ) go_repository( name = "org_golang_google_grpc", From 1dd92c92ad0d0f78c750d0e41f8ff91edad99cc2 Mon Sep 17 00:00:00 2001 From: JP Roemer Date: Thu, 14 Oct 2021 03:54:15 +0200 Subject: [PATCH 1100/1518] Fix typo in openapiv2.proto example (#2386) --- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index a5417c17c1a..66395e0295f 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1354,7 +1354,7 @@ func (x *Schema) GetExample() string { // // Id represents the message identifier. // string id = 1; [ // (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { -// {description: "The unique identifier of the simple message." +// description: "The unique identifier of the simple message." // }]; // } // diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 7be1fb572c7..1a4a1845e72 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -411,7 +411,7 @@ message Schema { // // Id represents the message identifier. // string id = 1; [ // (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { -// {description: "The unique identifier of the simple message." +// description: "The unique identifier of the simple message." // }]; // } // From 7d38f8f6718a649611da33df451b2be8138c7e71 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Oct 2021 14:42:39 +0000 Subject: [PATCH 1101/1518] fix(deps): update google.golang.org/genproto commit hash to 485ec31 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d88ce6a9595..1dd7b448350 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4 + google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index fda8c77b8c7..318b28d7199 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4 h1:NBxB1XxiWpGqkPUiJ9PoBXkHV5A9+GohMOA+EmWoPbU= -google.golang.org/genproto v0.0.0-20211013025323-ce878158c4d4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e h1:8QimPqBPS4AUoLliaTHdC00MiGVe4csovJUlesHP9Mw= +google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 450fd4e4a9a..5e4b007f645 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:NBxB1XxiWpGqkPUiJ9PoBXkHV5A9+GohMOA+EmWoPbU=", - version = "v0.0.0-20211013025323-ce878158c4d4", + sum = "h1:8QimPqBPS4AUoLliaTHdC00MiGVe4csovJUlesHP9Mw=", + version = "v0.0.0-20211015135405-485ec31e706e", ) go_repository( name = "org_golang_google_grpc", From a119b6cfa8fad4392211888b307802295ee49bc6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Oct 2021 02:15:27 +0000 Subject: [PATCH 1102/1518] fix(deps): update google.golang.org/genproto commit hash to 37fc393 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1dd7b448350..63d1cf0c5fb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e + google.golang.org/genproto v0.0.0-20211016002631-37fc39342514 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 318b28d7199..6e682018e36 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e h1:8QimPqBPS4AUoLliaTHdC00MiGVe4csovJUlesHP9Mw= -google.golang.org/genproto v0.0.0-20211015135405-485ec31e706e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211016002631-37fc39342514 h1:Rp1vYDPD4TdkMH5S/bZbopsGCsWhPcrLBUwOVhAQCxM= +google.golang.org/genproto v0.0.0-20211016002631-37fc39342514/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5e4b007f645..28cef416917 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:8QimPqBPS4AUoLliaTHdC00MiGVe4csovJUlesHP9Mw=", - version = "v0.0.0-20211015135405-485ec31e706e", + sum = "h1:Rp1vYDPD4TdkMH5S/bZbopsGCsWhPcrLBUwOVhAQCxM=", + version = "v0.0.0-20211016002631-37fc39342514", ) go_repository( name = "org_golang_google_grpc", From 87e59f11348da7a29c575bd552ee8528e8f6d86d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 16 Oct 2021 13:57:30 -0400 Subject: [PATCH 1103/1518] Upgrade bazel toolchain (#2390) * chore(deps): update dependency bazel_gazelle to v0.24.0 * Upgrade bazel toolchain Co-authored-by: Renovate Bot --- .bazelversion | 2 +- WORKSPACE | 20 +++++++++++--------- internal/codegenerator/BUILD.bazel | 2 +- utilities/BUILD.bazel | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.bazelversion b/.bazelversion index 1545d966571..fae6e3d04b2 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -3.5.0 +4.2.1 diff --git a/WORKSPACE b/WORKSPACE index ba313095119..96d4bc2fb4b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -41,19 +41,19 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "7904dbecbaffd068651916dce77ff3437679f9d20e1a7956bff43826e7645fcc", + sha256 = "2b1641428dff9018f9e85c0384f03ec6c10660d935b750e3fa1492a281a53b0f", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.25.1/rules_go-v0.25.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip", ], ) http_archive( name = "bazel_gazelle", - sha256 = "222e49f034ca7a1d1231422cdb67066b885819885c356673cb1f72f748a3c9d4", + sha256 = "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.3/bazel-gazelle-v0.22.3.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", ], ) @@ -61,12 +61,10 @@ load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_depe go_rules_dependencies() -go_register_toolchains(version = "1.15.5") +go_register_toolchains(version = "1.17.2") load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") -gazelle_dependencies() - # Use gazelle to declare Go dependencies in Bazel. # gazelle:repository_macro repositories.bzl%go_repositories @@ -74,6 +72,10 @@ load("//:repositories.bzl", "go_repositories") go_repositories() +# This must be invoked after our explicit dependencies +# See https://github.com/bazelbuild/bazel-gazelle/issues/1115. +gazelle_dependencies() + load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") protobuf_deps() diff --git a/internal/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel index 679fa47678c..8766d38f5eb 100644 --- a/internal/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -20,8 +20,8 @@ go_library( go_test( name = "codegenerator_test", srcs = ["parse_req_test.go"], - embed = [":codegenerator"], deps = [ + ":codegenerator", "@com_github_google_go_cmp//cmp", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//testing/protocmp", diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index f118ab323ad..5d8d12bc421 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -17,7 +17,7 @@ go_test( name = "utilities_test", size = "small", srcs = ["trie_test.go"], - embed = [":utilities"], + deps = [":utilities"], ) alias( From e05ccc4e178a791060c9b83aac93960a16068d7d Mon Sep 17 00:00:00 2001 From: winterjung Date: Sun, 17 Oct 2021 03:47:38 +0900 Subject: [PATCH 1104/1518] Log zero property as warning instead of error (#2387) For prudent design, warning may be more appropriate than error. --- protoc-gen-openapiv2/internal/genopenapi/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 19487b13cea..6c36dca2a04 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -975,7 +975,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re if len(bodyExcludedFields) != 0 { schema = renderMessageAsDefinition(meth.RequestType, reg, customRefs, bodyExcludedFields) if schema.Properties == nil || len(*schema.Properties) == 0 { - glog.Errorf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) + glog.Warningf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) } } else { err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) From daf9396fceb73149e1d68ee814f4edb2fcae956d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Oct 2021 05:08:33 +0000 Subject: [PATCH 1105/1518] fix(deps): update google.golang.org/genproto commit hash to 63b7e35 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 63d1cf0c5fb..172fa3d69e1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211016002631-37fc39342514 + google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 6e682018e36..448beb3ea98 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211016002631-37fc39342514 h1:Rp1vYDPD4TdkMH5S/bZbopsGCsWhPcrLBUwOVhAQCxM= -google.golang.org/genproto v0.0.0-20211016002631-37fc39342514/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404 h1:ZB48alYoIN+Soc1OcXirVKYOhOOf6Pek+iN+L+pzQI4= +google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 28cef416917..fbda4328182 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Rp1vYDPD4TdkMH5S/bZbopsGCsWhPcrLBUwOVhAQCxM=", - version = "v0.0.0-20211016002631-37fc39342514", + sum = "h1:ZB48alYoIN+Soc1OcXirVKYOhOOf6Pek+iN+L+pzQI4=", + version = "v0.0.0-20211019152133-63b7e35f4404", ) go_repository( name = "org_golang_google_grpc", From 1a640ca16a00e2976bcbdacb1b7d96aa45d52264 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Oct 2021 15:27:34 +0000 Subject: [PATCH 1106/1518] fix(deps): update google.golang.org/genproto commit hash to b7c3a96 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 172fa3d69e1..67abe67bb09 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404 + google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 448beb3ea98..30adb49d72d 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404 h1:ZB48alYoIN+Soc1OcXirVKYOhOOf6Pek+iN+L+pzQI4= -google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a h1:8maMHMQp9NroHXhc3HelFX9Ay2lWlXLcdH5mw5Biz0s= +google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fbda4328182..cafe7a6016c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ZB48alYoIN+Soc1OcXirVKYOhOOf6Pek+iN+L+pzQI4=", - version = "v0.0.0-20211019152133-63b7e35f4404", + sum = "h1:8maMHMQp9NroHXhc3HelFX9Ay2lWlXLcdH5mw5Biz0s=", + version = "v0.0.0-20211020151524-b7c3a969101a", ) go_repository( name = "org_golang_google_grpc", From f4c465f2b33eda6f3d63b015da7f8fa0abfd31ac Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Oct 2021 21:40:13 +0000 Subject: [PATCH 1107/1518] chore(deps): update dependency com_google_protobuf to v3.19.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 96d4bc2fb4b..28d835c8443 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "9111bf0b542b631165fadbd80aa60e7fb25b25311c532139ed2089d76ddf6dd7", - strip_prefix = "protobuf-3.18.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.18.1.tar.gz"], + sha256 = "4a045294ec76cb6eae990a21adb5d8b3c78be486f1507faa601541d1ccefbd6b", + strip_prefix = "protobuf-3.19.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.0.tar.gz"], ) http_archive( From 8857147978c9e9c9835bdbe441337ffce8a2a806 Mon Sep 17 00:00:00 2001 From: Defoo Li Date: Sat, 23 Oct 2021 22:10:01 +0800 Subject: [PATCH 1108/1518] support grpc.ClientConnInterface in RegisterXXXHandler (#2398) * support grpc.ClientConnInterface * Add generated files * Fix build failed --- examples/internal/gateway/gateway.go | 2 +- examples/internal/helloworld/helloworld.pb.go | 2 +- examples/internal/helloworld/helloworld.pb.gw.go | 2 +- examples/internal/proto/examplepb/a_bit_of_everything.pb.go | 2 +- .../internal/proto/examplepb/a_bit_of_everything.pb.gw.go | 4 ++-- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.gw.go | 2 +- .../internal/proto/examplepb/generate_unbound_methods.pb.go | 2 +- .../proto/examplepb/generate_unbound_methods.pb.gw.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.gw.go | 2 +- examples/internal/proto/examplepb/openapi_merge_a.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go | 4 ++-- examples/internal/proto/examplepb/openapi_merge_b.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go | 2 +- examples/internal/proto/examplepb/response_body_service.pb.go | 2 +- .../internal/proto/examplepb/response_body_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.gw.go | 2 +- .../internal/proto/examplepb/unannotated_echo_service.pb.go | 2 +- .../proto/examplepb/unannotated_echo_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.gw.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.gw.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- .../proto/standalone/unannotated_echo_service.pb.gw.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- internal/descriptor/openapiconfig/openapiconfig.pb.go | 2 +- protoc-gen-grpc-gateway/internal/gengateway/template.go | 2 +- protoc-gen-grpc-gateway/internal/gengateway/template_test.go | 4 ++-- protoc-gen-openapiv2/options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 41 files changed, 44 insertions(+), 44 deletions(-) diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index b82089d60fe..fb6d9b861fb 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -18,7 +18,7 @@ func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.Ser mux := gwruntime.NewServeMux(opts...) - for _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{ + for _, f := range []func(context.Context, *gwruntime.ServeMux, grpc.ClientConnInterface) error{ examplepb.RegisterEchoServiceHandler, standalone.RegisterUnannotatedEchoServiceHandler, examplepb.RegisterStreamServiceHandler, diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 78b00fdd3ca..60c26109da0 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index a9de3f25404..2850c3e97b7 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -997,7 +997,7 @@ func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeM // RegisterGreeterHandler registers the http handlers for service Greeter to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterGreeterHandlerClient(ctx, mux, NewGreeterClient(conn)) } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 0aed3d96719..26f503d844d 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index d138698e894..f27eeeaff09 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -3028,7 +3028,7 @@ func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterABitOfEverythingServiceHandler registers the http handlers for service ABitOfEverythingService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterABitOfEverythingServiceHandlerClient(ctx, mux, NewABitOfEverythingServiceClient(conn)) } @@ -3721,7 +3721,7 @@ func RegisterCamelCaseServiceNameHandlerFromEndpoint(ctx context.Context, mux *r // RegisterCamelCaseServiceNameHandler registers the http handlers for service CamelCaseServiceName to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterCamelCaseServiceNameHandlerClient(ctx, mux, NewCamelCaseServiceNameClient(conn)) } diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index e5b5ebf9d36..83aa2bd7bcb 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 4600a75bfbf..31f60175673 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -916,7 +916,7 @@ func RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se // RegisterEchoServiceHandler registers the http handlers for service EchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterEchoServiceHandlerClient(ctx, mux, NewEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 1610fcd774c..5a78f8fd495 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 1dcfbc106f9..8ed367aa558 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1852,7 +1852,7 @@ func RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux *runtim // RegisterFlowCombinationHandler registers the http handlers for service FlowCombination to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterFlowCombinationHandlerClient(ctx, mux, NewFlowCombinationClient(conn)) } diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index 2fc7f195564..a2f427bab70 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go index 6f9a3127109..19a8e2bd371 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go @@ -238,7 +238,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint(ctx context.Co // RegisterGenerateUnboundMethodsEchoServiceHandler registers the http handlers for service GenerateUnboundMethodsEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx, mux, NewGenerateUnboundMethodsEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 240b5a31434..91ffe374f47 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 5895118af26..0a621d49243 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -245,7 +245,7 @@ func RegisterNonStandardServiceHandlerFromEndpoint(ctx context.Context, mux *run // RegisterNonStandardServiceHandler registers the http handlers for service NonStandardService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterNonStandardServiceHandlerClient(ctx, mux, NewNonStandardServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index 9498e38f3ec..d4cda6cea54 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go index 88e1cfaf461..ba0db6ea65f 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -304,7 +304,7 @@ func RegisterServiceAHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceAHandler registers the http handlers for service ServiceA to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterServiceAHandlerClient(ctx, mux, NewServiceAClient(conn)) } @@ -397,7 +397,7 @@ func RegisterServiceCHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceCHandler registers the http handlers for service ServiceC to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterServiceCHandlerClient(ctx, mux, NewServiceCClient(conn)) } diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index ad80ed1fff5..3d6bb6b0ac2 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go index a9d82480425..31d615b26c7 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -181,7 +181,7 @@ func RegisterServiceBHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceBHandler registers the http handlers for service ServiceB to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterServiceBHandlerClient(ctx, mux, NewServiceBClient(conn)) } diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 73471d2279d..b6204216332 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index e64358861f0..22c78b39c63 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -333,7 +333,7 @@ func RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *ru // RegisterResponseBodyServiceHandler registers the http handlers for service ResponseBodyService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterResponseBodyServiceHandlerClient(ctx, mux, NewResponseBodyServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index a024a6acf46..bfbb5e1ebbe 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index a760748726d..daf6f244b56 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -218,7 +218,7 @@ func RegisterStreamServiceHandlerFromEndpoint(ctx context.Context, mux *runtime. // RegisterStreamServiceHandler registers the http handlers for service StreamService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterStreamServiceHandlerClient(ctx, mux, NewStreamServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 3ce8d0a28a7..9a8f89ab7d2 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index d0299af3c16..14c981d887a 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -389,7 +389,7 @@ func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, NewUnannotatedEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index a81dd608bf0..7b7d33b71e7 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 8b1f23855a4..079c362304e 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -181,7 +181,7 @@ func RegisterLoginServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.S // RegisterLoginServiceHandler registers the http handlers for service LoginService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterLoginServiceHandlerClient(ctx, mux, NewLoginServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 72de8e91337..58e916afdf4 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 70142211250..1f72a54a665 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -696,7 +696,7 @@ func RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtim // RegisterWrappersServiceHandler registers the http handlers for service WrappersService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterWrappersServiceHandlerClient(ctx, mux, NewWrappersServiceClient(conn)) } diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index a281df9d4c0..e7df4b3433f 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index f086e9b4e20..89705ffc7ba 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -769,7 +769,7 @@ func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, extExamplepb.NewUnannotatedEchoServiceClient(conn)) } diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 6bd214f8a76..27d7999845e 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 77319365a63..004b6c38f5a 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index 029622f4ee1..cea995a454f 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index d4add30fd00..978cadab263 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 871b3d84ffa..30fd0352fd1 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -655,7 +655,7 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}FromEndpoint(ctx context.Co // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}} registers the http handlers for service {{$svc.GetName}} to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx, mux, {{$svc.ClientConstructorName}}(conn)) } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 89634269f43..c186e629c01 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -248,7 +248,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `protoReq.GetNested().Int32, err = runtime.Int32P(val)`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { + if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { @@ -403,7 +403,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := spec.sigWant; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { + if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 8f1dc3a8095..dc9e87e4ec1 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 66395e0295f..59409aeef61 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 970f0ee7fff..3cd5077e26d 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 81a3ee5312e..f3a38e48a5b 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index ab4a14bd5e3..8d8f0254951 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index d57532ddb7a..203f429ae64 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.19.0 // source: runtime/internal/examplepb/proto3.proto package examplepb From 1e93c833319afcc55833885ad18df17ad60ddeda Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 23 Oct 2021 12:26:35 -0400 Subject: [PATCH 1109/1518] Limit pushes to the BSR to protoc-gen-openapiv2 files (#2397) --- .circleci/config.yml | 5 ++++- buf.yaml | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ae7cc99cb14..3b896ccdbea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -144,13 +144,16 @@ jobs: - checkout - run: buf build - run: buf lint - - run: buf breaking --path protoc-gen-openapiv2/options/annotations.proto --path protoc-gen-openapiv2/options/openapiv2.proto --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' + - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - image: bufbuild/buf:0.56.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin + # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. + # It excludes all the files that we don't want to publish, just for the push step. + - run: echo -e " - examples\n - internal\n - runtime" >> buf.yaml - run: buf push --tag "$CIRCLE_SHA1" release: executor: build-env diff --git a/buf.yaml b/buf.yaml index c3b872a9f15..d5574ead8ab 100644 --- a/buf.yaml +++ b/buf.yaml @@ -2,9 +2,6 @@ version: v1 name: buf.build/grpc-ecosystem/grpc-gateway deps: - buf.build/googleapis/googleapis -build: - excludes: - - bazel-grpc-gateway breaking: use: - FILE @@ -165,3 +162,8 @@ lint: - examples/internal/proto/examplepb/flow_combination.proto - examples/internal/proto/examplepb/openapi_merge_a.proto - examples/internal/proto/examplepb/openapi_merge_b.proto +# Note: the build configuration goes last in this +# files so we can append excludes at push time. +build: + excludes: + - bazel-grpc-gateway From b5cd496c648a3394eacb65d9e2f6f07adb2449df Mon Sep 17 00:00:00 2001 From: Anthony Lee Date: Sat, 23 Oct 2021 11:43:26 -0500 Subject: [PATCH 1110/1518] Allow OpenAPI query parameters to be generated for all HTTP methods, regardless of body (#2402) * Allow query parameters to be generated for all HTTP methods for OpenAPI. * Regenerate * Fix tests Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/abe/api/swagger.yaml | 147 +++++++++++++ .../abe/api_a_bit_of_everything_service.go | 94 +++++++- .../internal/clients/echo/api/swagger.yaml | 53 +++++ .../internal/clients/echo/api_echo_service.go | 47 +++- .../clients/unannotatedecho/api/swagger.yaml | 60 ++++++ .../api_unannotated_echo_service.go | 49 ++++- examples/internal/integration/client_test.go | 6 +- .../a_bit_of_everything.swagger.json | 156 ++++++++++++++ .../proto/examplepb/echo_service.swagger.json | 53 +++++ .../examplepb/flow_combination.swagger.json | 88 ++++++++ .../unannotated_echo_service.swagger.json | 61 ++++++ .../internal/genopenapi/template.go | 20 +- .../internal/genopenapi/template_test.go | 202 ++++++++++-------- 13 files changed, 934 insertions(+), 102 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 9ffa0667532..c9f96ecf811 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1514,6 +1514,153 @@ paths: - "ZERO" - "ONE" x-exportParamName: "EnumValueAnnotation" + - name: "singleNested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "singleNested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "singleNested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "uuid" + in: "query" + required: false + type: "string" + x-exportParamName: "Uuid" + x-optionalDataType: "String" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeatedEnumAnnotation" + in: "query" + description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "repeatedStringAnnotation" + in: "query" + description: "Repeated string title. Repeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nestedAnnotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nestedAnnotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nestedAnnotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64OverrideType" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition." + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition." + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" + - name: "optionalStringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalStringValue" + x-optionalDataType: "String" responses: 200: description: "A successful response." diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 465540e0c2e..45e6cde0b5c 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -1499,10 +1499,50 @@ This API creates a new ABitOfEverything * @param pathEnumValue * @param nestedPathEnumValue * @param enumValueAnnotation Numeric enum description. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Uuid" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { + +type ABitOfEverythingServiceCreateOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + Uuid optional.String + BytesValue optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalStringValue optional.String +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1537,6 +1577,58 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { + localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 821caf5c6c7..950c4482401 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -25,6 +25,59 @@ paths: required: true type: "string" x-exportParamName: "Id" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "lineNum" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" responses: 200: description: "A successful response." diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index 11a09ea49aa..0347477d8b7 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -31,10 +31,31 @@ EchoServiceApiService Echo method receives a simple message and returns it. The message posted as the id parameter will also be returned. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param id Id represents the message identifier. + * @param optional nil or *EchoServiceEchoOpts - Optional Parameters: + * @param "Num" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - @return ExamplepbSimpleMessage */ -func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string) (ExamplepbSimpleMessage, *http.Response, error) { + +type EchoServiceEchoOpts struct { + Num optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string, localVarOptionals *EchoServiceEchoOpts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -51,6 +72,30 @@ func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index f6ab2d13e99..4dbe262b630 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -49,6 +49,66 @@ paths: required: true type: "string" x-exportParamName: "Id" + - name: "num" + in: "query" + description: "Int value field" + required: true + type: "string" + default: "42" + format: "int64" + x-exportParamName: "Num" + - name: "duration" + in: "query" + required: false + type: "string" + x-exportParamName: "Duration" + x-optionalDataType: "String" + - name: "lineNum" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" responses: 200: description: "A successful response." diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index ed62777fb30..6bef548aed3 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -32,10 +32,32 @@ UnannotatedEchoServiceApiService Summary: Echo rpc Description Echo * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param id Id represents the message identifier. + * @param num Int value field + * @param optional nil or *UnannotatedEchoServiceEchoOpts - Optional Parameters: + * @param "Duration" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - @return ExamplepbUnannotatedSimpleMessage */ -func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx context.Context, id string) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { + +type UnannotatedEchoServiceEchoOpts struct { + Duration optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String +} + +func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx context.Context, id string, num string, localVarOptionals *UnannotatedEchoServiceEchoOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -52,6 +74,31 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx contex localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + localVarQueryParams.Add("num", parameterToString(num, "")) + if localVarOptionals != nil && localVarOptionals.Duration.IsSet() { + localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index b856843fcc0..f0bca312320 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -19,7 +19,7 @@ func TestEchoClient(t *testing.T) { cfg.BasePath = "http://localhost:8088" cl := echo.NewAPIClient(cfg) - resp, _, err := cl.EchoServiceApi.EchoServiceEcho(context.Background(), "foo") + resp, _, err := cl.EchoServiceApi.EchoServiceEcho(context.Background(), "foo", nil) if err != nil { t.Errorf(`cl.EchoServiceApi.Echo("foo") failed with %v; want success`, err) } @@ -109,6 +109,8 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.PathEnumValue.String(), want.NestedPathEnumValue.String(), want.EnumValueAnnotation.String(), + want.RequiredStringViaFieldBehaviorAnnotation, + nil, ) if err != nil { t.Fatalf("cl.Create(%#v) failed with %v; want success", want, err) @@ -188,7 +190,7 @@ func TestUnannotatedEchoClient(t *testing.T) { cl := unannotatedecho.NewAPIClient(cfg) - resp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEcho(context.Background(), "foo") + resp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEcho(context.Background(), "foo", "1", nil) if err != nil { t.Errorf(`cl.Echo("foo") failed with %v; want success`, err) } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 2dc248e56a1..673736534b5 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1735,6 +1735,162 @@ "ZERO", "ONE" ] + }, + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "singleNested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "singleNested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "uuid", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytesValue", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "repeatedStringValue", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneofString", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestampValue", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeatedEnumValue", + "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedEnumAnnotation", + "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedStringAnnotation", + "description": "Repeated string title. Repeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nestedAnnotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nestedAnnotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nestedAnnotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "int64OverrideType", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition.", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "optionalStringValue", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index b6b1e06d2ea..3d506edd570 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -43,6 +43,59 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json index a59e8ffe4e9..27fe73b8e58 100644 --- a/examples/internal/proto/examplepb/flow_combination.swagger.json +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -622,6 +622,18 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -661,6 +673,18 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -788,6 +812,18 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -827,6 +863,18 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -944,6 +992,26 @@ } } }, + "parameters": [ + { + "name": "a", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" + } + ], "tags": [ "FlowCombination" ] @@ -975,6 +1043,26 @@ } } }, + "parameters": [ + { + "name": "a", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "b", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "c", + "in": "query", + "required": false, + "type": "string" + } + ], "tags": [ "FlowCombination" ] diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 25c886dc8c3..aaee88ebef0 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -81,6 +81,67 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "num", + "description": "Int value field", + "in": "query", + "required": true, + "type": "string", + "format": "int64", + "default": "42" + }, + { + "name": "duration", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 6c36dca2a04..b9350b70a3e 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1011,21 +1011,15 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re Required: true, Schema: &schema, }) - // add the parameters to the query string - queryParams, err := messageToQueryParameters(meth.RequestType, reg, b.PathParams, b.Body) - if err != nil { - return err - } - parameters = append(parameters, queryParams...) - } else if b.HTTPMethod == "GET" || b.HTTPMethod == "DELETE" { - // add the parameters to the query string - queryParams, err := messageToQueryParameters(meth.RequestType, reg, b.PathParams, b.Body) - if err != nil { - return err - } - parameters = append(parameters, queryParams...) } + // add the parameters to the query string + queryParams, err := messageToQueryParameters(meth.RequestType, reg, b.PathParams, b.Body) + if err != nil { + return err + } + parameters = append(parameters, queryParams...) + pathItemObject, ok := paths[templateToOpenAPIPath(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)] if !ok { pathItemObject = openapiPathItemObject{} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index a62b6cb4406..a32b13ae4bb 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -2588,111 +2588,145 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { createMsg.Fields = []*descriptor.Field{parentField, bookField, bookIDField} - file := descriptor.File{ - FileDescriptorProto: &descriptorpb.FileDescriptorProto{ - SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, - Name: proto.String("book.proto"), - MessageType: []*descriptorpb.DescriptorProto{bookDesc, createDesc}, - Service: []*descriptorpb.ServiceDescriptorProto{svc}, - Options: &descriptorpb.FileOptions{ - GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + newFile := func() descriptor.File { + return descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("book.proto"), + MessageType: []*descriptorpb.DescriptorProto{bookDesc, createDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, }, - }, - GoPkg: descriptor.GoPackage{ - Path: "example.com/path/to/book.pb", - Name: "book_pb", - }, - Messages: []*descriptor.Message{bookMsg, createMsg}, - Services: []*descriptor.Service{ - { - ServiceDescriptorProto: svc, - Methods: []*descriptor.Method{ - { - MethodDescriptorProto: meth, - RequestType: createMsg, - ResponseType: bookMsg, - Bindings: []*descriptor.Binding{ - { - HTTPMethod: "POST", - PathTmpl: httprule.Template{ - Version: 1, - OpCodes: []int{0, 0}, - Template: "/v1/{parent=publishers/*}/books", - }, - PathParams: []descriptor.Parameter{ - { + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/book.pb", + Name: "book_pb", + }, + Messages: []*descriptor.Message{bookMsg, createMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: createMsg, + ResponseType: bookMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{parent=publishers/*}/books", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "parent", + Target: parentField, + }, + }), + Target: parentField, + }, + }, + Body: &descriptor.Body{ FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ { - Name: "parent", - Target: parentField, + Name: "book", + Target: bookField, }, }), - Target: parentField, }, }, - Body: &descriptor.Body{ - FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ - { - Name: "book", - Target: bookField, - }, - }), - }, }, }, }, }, }, - }, + } } - reg := descriptor.NewRegistry() - if err := AddErrorDefs(reg); err != nil { - t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) - return + type args struct { + file descriptor.File } - err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) - if err != nil { - t.Errorf("Registry.Load() failed with %v; want success", err) - return + type paramOut struct { + Name string + In string + Required bool } - result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) - if err != nil { - t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) - return + tests := []struct { + name string + args args + want []paramOut + }{ + { + name: "book_in_body", + args: args{file: newFile()}, + want: []paramOut{ + {"parent", "path", true}, + {"body", "body", true}, + {"book_id", "query", false}, + }, + }, + { + name: "book_in_query", + args: args{file: func() descriptor.File { + f := newFile() + f.Services[0].Methods[0].Bindings[0].Body = nil + return f + }()}, + want: []paramOut{ + {"parent", "path", true}, + {"book", "query", false}, + {"book_id", "query", false}, + }, + }, } - if _, ok := result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]; !ok { - t.Errorf("applyTemplate(%#v).%s = expected 200 response to be defined", file, `result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]`) - } else { - if want, got, name := 3, len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters), `len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters)`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) - } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{tt.args.file.FileDescriptorProto}}) + if err != nil { + t.Errorf("Registry.Load() failed with %v; want success", err) + return + } + result, err := applyTemplate(param{File: crossLinkFixture(&tt.args.file), reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", tt.args.file, err) + return + } - type param struct { - Name string - In string - Required bool - } + if _, ok := result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]; !ok { + t.Errorf("applyTemplate(%#v).%s = expected 200 response to be defined", tt.args.file, `result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]`) + } else { - p0 := result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[0] - if want, got, name := (param{"parent", "path", true}), (param{p0.Name, p0.In, p0.Required}), `result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[0]`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %v want to be %v", file, name, got, want) - } - p1 := result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[1] - if want, got, name := (param{"body", "body", true}), (param{p1.Name, p1.In, p1.Required}), `result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[1]`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %v want to be %v", file, name, got, want) - } - p2 := result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[2] - if want, got, name := (param{"book_id", "query", false}), (param{p2.Name, p2.In, p2.Required}), `result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[1]`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %v want to be %v", file, name, got, want) - } - } + if want, got, name := 3, len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters), `len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters)`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %d want to be %d", tt.args.file, name, got, want) + } - // If there was a failure, print out the input and the json result for debugging. - if t.Failed() { - t.Errorf("had: %s", file) - t.Errorf("got: %s", fmt.Sprint(result)) + for i, want := range tt.want { + p := result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[i] + if got, name := (paramOut{p.Name, p.In, p.Required}), `result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[0]`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %v want to be %v", tt.args.file, name, got, want) + } + } + + } + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", tt.args.file) + t.Errorf("got: %s", fmt.Sprint(result)) + } + }) } + } // TestApplyTemplateProtobufAny tests that the protobufAny definition is correctly rendered with the @type field and From 180a9ff18266e81894393bda22529d6bd8d50606 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 23 Oct 2021 14:44:18 -0400 Subject: [PATCH 1111/1518] fix(deps): update google.golang.org/genproto commit hash to 2b14602 (#2399) Co-authored-by: Johan Brandhorst-Satzkorn --- go.mod | 2 +- go.sum | 21 ++++----------------- repositories.bzl | 16 ++++++++-------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/go.mod b/go.mod index 67abe67bb09..155802a05d0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a + google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 30adb49d72d..92818211aec 100644 --- a/go.sum +++ b/go.sum @@ -33,11 +33,9 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -45,14 +43,12 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -133,7 +129,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -207,9 +202,8 @@ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -249,19 +243,14 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -362,9 +351,8 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a h1:8maMHMQp9NroHXhc3HelFX9Ay2lWlXLcdH5mw5Biz0s= -google.golang.org/genproto v0.0.0-20211020151524-b7c3a969101a/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -379,7 +367,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index cafe7a6016c..60a501e053a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:8maMHMQp9NroHXhc3HelFX9Ay2lWlXLcdH5mw5Biz0s=", - version = "v0.0.0-20211020151524-b7c3a969101a", + sum = "h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8=", + version = "v0.0.0-20200825200019-8632dd797987", ) go_repository( name = "org_golang_google_grpc", @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=", - version = "v0.0.0-20210405180319-a5a99cb37ef4", + sum = "h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=", + version = "v0.0.0-20200822124328-c89045814202", ) go_repository( name = "org_golang_x_oauth2", @@ -1150,8 +1150,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=", - version = "v0.0.0-20210510120138-977fb7262007", + sum = "h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw=", + version = "v0.0.0-20200803210538-64077c9b5642", ) go_repository( name = "org_golang_x_term", @@ -1163,8 +1163,8 @@ def go_repositories(): go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=", - version = "v0.3.5", + sum = "h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=", + version = "v0.3.3", ) go_repository( From ac034aa90ab6a39073be17f404614bea65b143e4 Mon Sep 17 00:00:00 2001 From: Defoo Li Date: Sun, 24 Oct 2021 10:40:42 +0800 Subject: [PATCH 1112/1518] Fix wrong bazel version (#2404) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3d08516dcc5..23e2237ead1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ docker run -v $(pwd):/grpc-gateway -w /grpc-gateway --rm ghcr.io/grpc-ecosystem/ make clean && \ make generate' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel:3.5.0 -c '\ + ghcr.io/grpc-ecosystem/grpc-gateway/build-env:1.17 -c '\ bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \ bazel run :gazelle && \ bazel run :buildifier' From f118d351553e0215891922519831e96c9fe2d50e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Oct 2021 16:45:53 +0000 Subject: [PATCH 1113/1518] fix(deps): update google.golang.org/genproto commit hash to 4688e4c --- go.mod | 2 +- go.sum | 21 +++++++++++++++++---- repositories.bzl | 16 ++++++++-------- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 155802a05d0..fe936dca045 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 - google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 + google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 google.golang.org/grpc v1.41.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 92818211aec..d6425f74e8a 100644 --- a/go.sum +++ b/go.sum @@ -33,9 +33,11 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -43,12 +45,14 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -129,6 +133,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -202,8 +207,9 @@ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -243,14 +249,19 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -351,8 +362,9 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 h1:aePO4E0x+Urj9V5NQHjqOpaNG4oMeHQq0l2ob05z5tI= +google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -367,6 +379,7 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 60a501e053a..9ab581e848c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8=", - version = "v0.0.0-20200825200019-8632dd797987", + sum = "h1:aePO4E0x+Urj9V5NQHjqOpaNG4oMeHQq0l2ob05z5tI=", + version = "v0.0.0-20211026145609-4688e4c4e024", ) go_repository( name = "org_golang_google_grpc", @@ -1132,8 +1132,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=", - version = "v0.0.0-20200822124328-c89045814202", + sum = "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=", + version = "v0.0.0-20210405180319-a5a99cb37ef4", ) go_repository( name = "org_golang_x_oauth2", @@ -1150,8 +1150,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw=", - version = "v0.0.0-20200803210538-64077c9b5642", + sum = "h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=", + version = "v0.0.0-20210510120138-977fb7262007", ) go_repository( name = "org_golang_x_term", @@ -1163,8 +1163,8 @@ def go_repositories(): go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=", - version = "v0.3.3", + sum = "h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=", + version = "v0.3.5", ) go_repository( From 502089679d7ef18dbc04687ef16024583be55dc1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Oct 2021 17:59:37 +0000 Subject: [PATCH 1114/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 28d835c8443..11ed951c07d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,9 +82,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "ae34c344514e08c23e90da0e2d6cb700fcd28e80c02e23e4d5715dddcb42f7b3", - strip_prefix = "buildtools-4.2.2", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.2.tar.gz"], + sha256 = "614c84128ddb86aab4e1f25ba2e027d32fd5c6da302ae30685b9d7973b13da1b", + strip_prefix = "buildtools-4.2.3", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.3.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 4c07824f73cd4acbc91015f2ea336690a83f7068 Mon Sep 17 00:00:00 2001 From: AdamKorcz <44787359+AdamKorcz@users.noreply.github.com> Date: Wed, 27 Oct 2021 03:36:26 +0100 Subject: [PATCH 1115/1518] Add CIFuzz (#2405) --- .github/workflows/cifuzz.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/cifuzz.yml diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml new file mode 100644 index 00000000000..1c6375180b6 --- /dev/null +++ b/.github/workflows/cifuzz.yml @@ -0,0 +1,26 @@ +name: CIFuzz +on: [pull_request] +jobs: + Fuzzing: + runs-on: ubuntu-latest + steps: + - name: Build Fuzzers + id: build + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + with: + oss-fuzz-project-name: 'grpc-gateway' + dry-run: false + language: go + - name: Run Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + with: + oss-fuzz-project-name: 'grpc-gateway' + fuzz-seconds: 600 + dry-run: false + language: go + - name: Upload Crash + uses: actions/upload-artifact@v1 + if: failure() && steps.build.outcome == 'success' + with: + name: artifacts + path: ./out/artifacts From 6964da53662fc600e88bbc4225d6a7d2323a804a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Oct 2021 01:11:17 +0000 Subject: [PATCH 1116/1518] chore(deps): update dependency com_google_protobuf to v3.19.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 11ed951c07d..85bcd05d9d5 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "4a045294ec76cb6eae990a21adb5d8b3c78be486f1507faa601541d1ccefbd6b", - strip_prefix = "protobuf-3.19.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.0.tar.gz"], + sha256 = "87407cd28e7a9c95d9f61a098a53cf031109d451a7763e7dd1253abf8b4df422", + strip_prefix = "protobuf-3.19.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.1.tar.gz"], ) http_archive( From 5b7fcacf20fdb1c5823b161704f737233686e040 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Tue, 2 Nov 2021 16:59:28 -0400 Subject: [PATCH 1117/1518] ADOPTERS: add SpiceDB usage (#2413) * ADOPTERS: add SpiceDB usage Signed-off-by: Jimmy Zelinskie --- ADOPTERS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 171c2a8afd3..676c0c74b71 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -5,12 +5,15 @@ production users that have added themselves (in alphabetical order): - [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of API requests per day. -- [Chef](https://www.chef.io/) uses gRPC-Gateway to provide the user-facing +- [Chef](https://www.chef.io/) uses the gRPC-Gateway to provide the user-facing API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). - [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to serve millions of API requests per day [1]. +- [SpiceDB](https://github.com/authzed/spicedb) uses the gRPC-Gateway to handle + requests for security-critical permissions checks in environments where gRPC + is unavailable. If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. From 4d72d81885e0d4bb3d30cf1f1b4069c9f2a407a5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 2 Nov 2021 21:43:42 +0000 Subject: [PATCH 1118/1518] fix(deps): update module google.golang.org/grpc to v1.42.0 --- examples/internal/helloworld/helloworld.pb.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- .../internal/proto/examplepb/flow_combination.pb.go | 2 +- .../proto/examplepb/generate_unbound_methods.pb.go | 2 +- .../proto/examplepb/non_standard_names.pb.go | 2 +- .../internal/proto/examplepb/openapi_merge_a.pb.go | 2 +- .../internal/proto/examplepb/openapi_merge_b.pb.go | 2 +- .../proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../proto/examplepb/unannotated_echo_service.pb.go | 2 +- .../internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- go.mod | 2 +- go.sum | 7 +++++-- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- .../descriptor/openapiconfig/openapiconfig.pb.go | 2 +- protoc-gen-openapiv2/options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- repositories.bzl | 12 ++++++------ runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 27 files changed, 36 insertions(+), 33 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 60c26109da0..b7cc84a2915 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 26f503d844d..f9e4801e3ec 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 83aa2bd7bcb..5b55dd6c6be 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 5a78f8fd495..ffb1ecb1bf2 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index a2f427bab70..f3c772e8696 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 91ffe374f47..608c487201d 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index d4cda6cea54..a5df158d8cc 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 3d6bb6b0ac2..6a722e5f818 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index b6204216332..6c4be2ac64a 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index bfbb5e1ebbe..6e9caa1a217 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 9a8f89ab7d2..bae3f7dc314 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 7b7d33b71e7..048836f6b89 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 58e916afdf4..c409ef3e03b 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index e7df4b3433f..bcdf479759a 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 27d7999845e..09e0f19f946 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 004b6c38f5a..099e046027f 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/go.mod b/go.mod index fe936dca045..a85ac5668d5 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 - google.golang.org/grpc v1.41.0 + google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index d6425f74e8a..7d3afc712fd 100644 --- a/go.sum +++ b/go.sum @@ -45,8 +45,11 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -380,8 +383,8 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index cea995a454f..d307157cc92 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index 978cadab263..aedb5bf2b97 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index dc9e87e4ec1..4359896f43e 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 59409aeef61..26f33a91dc8 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/repositories.bzl b/repositories.bzl index 9ab581e848c..00364c6105f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -135,14 +135,14 @@ def go_repositories(): go_repository( name = "com_github_cncf_udpa_go", importpath = "github.com/cncf/udpa/go", - sum = "h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=", - version = "v0.0.0-20201120205902-5459f2c99403", + sum = "h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI=", + version = "v0.0.0-20210930031921-04548b0d99d4", ) go_repository( name = "com_github_cncf_xds_go", importpath = "github.com/cncf/xds/go", - sum = "h1:CevA8fI91PAnP8vpnXuB8ZYAZ5wqY86nAbxfgK8tWO4=", - version = "v0.0.0-20210805033703-aa0b78936158", + sum = "h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw=", + version = "v0.0.0-20211011173535-cb28da3451f1", ) go_repository( @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E=", - version = "v1.41.0", + sum = "h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A=", + version = "v1.42.0", ) go_repository( diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 3cd5077e26d..88b40df0b01 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index f3a38e48a5b..0e7ebdb556f 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 8d8f0254951..9a40b0e5c5a 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 203f429ae64..97065e39cfc 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.0 +// protoc v3.19.1 // source: runtime/internal/examplepb/proto3.proto package examplepb From ea49a09b13bb5ad29aa6cd3a65359326421d4e2f Mon Sep 17 00:00:00 2001 From: Aron Richter <44870496+aronrichter@users.noreply.github.com> Date: Wed, 3 Nov 2021 22:27:40 -0300 Subject: [PATCH 1119/1518] fix(protoc-gen-grpc-gateway): error if identical annotations are provided just in the same service (#2412) * fix(protoc-gen-grpc-gateway): error if identical annotations are provided just in the same service * Format files * Regenerate files Co-authored-by: Johan Brandhorst-Satzkorn --- internal/descriptor/registry.go | 5 +- .../internal/gengateway/template.go | 2 +- .../internal/gengateway/template_test.go | 87 ++++++++++++++++++- 3 files changed, 90 insertions(+), 4 deletions(-) diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 7576e06026b..ed70292fc37 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -132,6 +132,7 @@ type repeatedFieldSeparator struct { type annotationIdentifier struct { method string pathTemplate string + service *Service } // NewRegistry returns a new Registry. @@ -710,8 +711,8 @@ func (r *Registry) FieldName(f *Field) string { return f.GetName() } -func (r *Registry) CheckDuplicateAnnotation(httpMethod string, httpTemplate string) error { - a := annotationIdentifier{method: httpMethod, pathTemplate: httpTemplate} +func (r *Registry) CheckDuplicateAnnotation(httpMethod string, httpTemplate string, svc *Service) error { + a := annotationIdentifier{method: httpMethod, pathTemplate: httpTemplate, service: svc} _, ok := r.annotationMap[a] if ok { return fmt.Errorf("duplicate annotation: method=%s, template=%s", httpMethod, httpTemplate) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 30fd0352fd1..e51fdc0448a 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -170,7 +170,7 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { methName := casing.Camel(*meth.Name) meth.Name = &methName for _, b := range meth.Bindings { - if err := reg.CheckDuplicateAnnotation(b.HTTPMethod, b.PathTmpl.Template); err != nil { + if err := reg.CheckDuplicateAnnotation(b.HTTPMethod, b.PathTmpl.Template, svc); err != nil { return "", err } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index c186e629c01..61fd9dfc092 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -765,7 +765,7 @@ func TestIdentifierCapitalization(t *testing.T) { } } -func TestDuplicatePaths(t *testing.T) { +func TestDuplicatePathsInSameService(t *testing.T) { msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), Field: []*descriptorpb.FieldDescriptorProto{ @@ -840,3 +840,88 @@ func TestDuplicatePaths(t *testing.T) { return } } + +func TestDuplicatePathsInDifferentService(t *testing.T) { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + TypeName: proto.String(".google.protobuf.StringValue"), + Number: proto.Int32(1), + }, + }, + } + meth1 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Echo"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + meth2 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Echo2"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleServiceNumberOne"), + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, + } + svc2 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleServiceNumberTwo"), + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + binding := &descriptor.Binding{ + Index: 1, + PathTmpl: compilePath(t, "/v1/example/echo"), + HTTPMethod: "GET", + PathParams: nil, + Body: nil, + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1, svc2}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth1, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{binding}, + }, + }, + }, + { + ServiceDescriptorProto: svc2, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth2, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{binding}, + }, + }, + }, + }, + } + _, err := applyTemplate(param{File: crossLinkFixture(&file), RegisterFuncSuffix: "Handler", AllowPatchFeature: true}, descriptor.NewRegistry()) + if err != nil { + t.Errorf("applyTemplate(%#v) failed; want success", file) + return + } +} From 791ac8c572c65408d0aaa6ea8681f3f05f994d62 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Nov 2021 21:13:44 +0000 Subject: [PATCH 1120/1518] chore(deps): update golang docker tag to v1.17.3 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 5e5a9ed09c3..d36f5933157 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.2 +FROM golang:1.17.3 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 1e1ea215335..1416f1e24e8 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.2 as builder +FROM golang:1.17.3 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 2a69be49112..e6b1ac6204f 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.2 as builder +FROM golang:1.17.3 as builder ARG RELEASE_VERSION From 185126621f298395754503abc6460e5d9e1f62b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 9 Nov 2021 10:13:48 +0000 Subject: [PATCH 1121/1518] chore(deps): update rules_proto commit hash to 9e4c622 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 85bcd05d9d5..c06e743a2f2 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "83c8798f5a4fe1f6a13b5b6ae4267695b71eed7af6fbf2b6ec73a64cf01239ab", - strip_prefix = "rules_proto-b22f78685bf62775b80738e766081b9e4366cdf0", + sha256 = "c2182b2d8894b43dc30afbdc2ce44a216e7c6c933ed34e216bfbf86e2f4e1e48", + strip_prefix = "rules_proto-9e4c622ba8c2178b71420ed3d14fb8874beee3a5", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/b22f78685bf62775b80738e766081b9e4366cdf0.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/b22f78685bf62775b80738e766081b9e4366cdf0.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/9e4c622ba8c2178b71420ed3d14fb8874beee3a5.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/9e4c622ba8c2178b71420ed3d14fb8874beee3a5.tar.gz", ], ) From 8d2a2a7581c102e39b3ae1e29362357088397312 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 15 Nov 2021 09:38:54 +0000 Subject: [PATCH 1122/1518] fix(deps): update golang.org/x/oauth2 commit hash to d3ed0bb --- examples/internal/helloworld/helloworld.pb.go | 2 +- examples/internal/proto/examplepb/a_bit_of_everything.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.go | 2 +- .../internal/proto/examplepb/generate_unbound_methods.pb.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_a.pb.go | 2 +- examples/internal/proto/examplepb/openapi_merge_b.pb.go | 2 +- examples/internal/proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../internal/proto/examplepb/unannotated_echo_service.pb.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- internal/descriptor/openapiconfig/openapiconfig.pb.go | 2 +- protoc-gen-openapiv2/options/annotations.pb.go | 2 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 2 +- repositories.bzl | 4 ++-- runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 27 files changed, 29 insertions(+), 29 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index b7cc84a2915..998896d85ca 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index f9e4801e3ec..cd744337cc3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 5b55dd6c6be..a846d8135f0 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index ffb1ecb1bf2..60e754b45fc 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go index f3c772e8696..7f75a15a9d0 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/generate_unbound_methods.proto // Generate Unannotated Methods Echo Service diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 608c487201d..fa5d46f8f36 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.go index a5df158d8cc..fd1b30f0bbb 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/openapi_merge_a.proto // Merging Services diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.go index 6a722e5f818..07e6dda7d59 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/openapi_merge_b.proto // Merging Services diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 6c4be2ac64a..c6e9e822459 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 6e9caa1a217..6d1c2ef1750 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index bae3f7dc314..1197b91c9dd 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 048836f6b89..3d341d14048 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index c409ef3e03b..aef3c3ac2d7 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index bcdf479759a..75f94ed9067 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 09e0f19f946..fa726581f22 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 099e046027f..55f7be3e102 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/go.mod b/go.mod index a85ac5668d5..892b332b76d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index 7d3afc712fd..5a67c16e55c 100644 --- a/go.sum +++ b/go.sum @@ -218,8 +218,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index d307157cc92..80506dc612e 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/internal/descriptor/openapiconfig/openapiconfig.pb.go b/internal/descriptor/openapiconfig/openapiconfig.pb.go index aedb5bf2b97..7394255290d 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.pb.go +++ b/internal/descriptor/openapiconfig/openapiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: internal/descriptor/openapiconfig/openapiconfig.proto package openapiconfig diff --git a/protoc-gen-openapiv2/options/annotations.pb.go b/protoc-gen-openapiv2/options/annotations.pb.go index 4359896f43e..0ef620d6a0f 100644 --- a/protoc-gen-openapiv2/options/annotations.pb.go +++ b/protoc-gen-openapiv2/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: protoc-gen-openapiv2/options/annotations.proto package options diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 26f33a91dc8..48cb5ca9ae1 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: protoc-gen-openapiv2/options/openapiv2.proto package options diff --git a/repositories.bzl b/repositories.bzl index 00364c6105f..aa332ecd3c3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE=", - version = "v0.0.0-20211005180243-6b3c2da341f1", + sum = "h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=", + version = "v0.0.0-20211104180415-d3ed0bb246c8", ) go_repository( name = "org_golang_x_sync", diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 88b40df0b01..855bcb326ac 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 0e7ebdb556f..024be966b0c 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 9a40b0e5c5a..7a103287f42 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 97065e39cfc..ac30c27dd9c 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.19.1 +// protoc (unknown) // source: runtime/internal/examplepb/proto3.proto package examplepb From 00b7a0d26a650cfa957b59d8fba41f94e30c2095 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 15 Nov 2021 11:51:00 +0000 Subject: [PATCH 1123/1518] fix(deps): update google.golang.org/genproto commit hash to 271947f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 892b332b76d..744ea256140 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 + google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 5a67c16e55c..97470ad7a36 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024 h1:aePO4E0x+Urj9V5NQHjqOpaNG4oMeHQq0l2ob05z5tI= -google.golang.org/genproto v0.0.0-20211026145609-4688e4c4e024/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd h1:8jqRgiTTWyKMDOM2AvhjA5dZLBSKXg1yFupPRBV/4fQ= +google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index aa332ecd3c3..d68d00a2538 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:aePO4E0x+Urj9V5NQHjqOpaNG4oMeHQq0l2ob05z5tI=", - version = "v0.0.0-20211026145609-4688e4c4e024", + sum = "h1:8jqRgiTTWyKMDOM2AvhjA5dZLBSKXg1yFupPRBV/4fQ=", + version = "v0.0.0-20211112145013-271947fe86fd", ) go_repository( name = "org_golang_google_grpc", From 75881093d39a78abd58fbf6f56a881ee9512973c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 15 Nov 2021 17:08:06 +0000 Subject: [PATCH 1124/1518] fix(deps): update google.golang.org/genproto commit hash to a5da725 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 744ea256140..78d5d55634b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd + google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 97470ad7a36..eee544f4a71 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd h1:8jqRgiTTWyKMDOM2AvhjA5dZLBSKXg1yFupPRBV/4fQ= -google.golang.org/genproto v0.0.0-20211112145013-271947fe86fd/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7 h1:0LoCYJF53PEqtJOntKxGD72X/c8Xto5EZ4HLrt9D80I= +google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d68d00a2538..8d7df36f753 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:8jqRgiTTWyKMDOM2AvhjA5dZLBSKXg1yFupPRBV/4fQ=", - version = "v0.0.0-20211112145013-271947fe86fd", + sum = "h1:0LoCYJF53PEqtJOntKxGD72X/c8Xto5EZ4HLrt9D80I=", + version = "v0.0.0-20211115160612-a5da7257a6f7", ) go_repository( name = "org_golang_google_grpc", From da3d6c331a8d8228d531b9f0ad9d404b7140e2ef Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 16 Nov 2021 11:50:29 +0000 Subject: [PATCH 1125/1518] chore(deps): update rules_proto commit hash to 11bf7c2 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index c06e743a2f2..31e9d08c3d2 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "c2182b2d8894b43dc30afbdc2ce44a216e7c6c933ed34e216bfbf86e2f4e1e48", - strip_prefix = "rules_proto-9e4c622ba8c2178b71420ed3d14fb8874beee3a5", + sha256 = "20b240eba17a36be4b0b22635aca63053913d5c1ee36e16be36499d167a2f533", + strip_prefix = "rules_proto-11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/9e4c622ba8c2178b71420ed3d14fb8874beee3a5.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/9e4c622ba8c2178b71420ed3d14fb8874beee3a5.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8.tar.gz", ], ) From e376d72414eef2d61aae49b3b064a192a74fff59 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 16 Nov 2021 19:28:00 +0000 Subject: [PATCH 1126/1518] fix(deps): update google.golang.org/genproto commit hash to e63d96a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 78d5d55634b..a69349154da 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7 + google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index eee544f4a71..6d38219f90e 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7 h1:0LoCYJF53PEqtJOntKxGD72X/c8Xto5EZ4HLrt9D80I= -google.golang.org/genproto v0.0.0-20211115160612-a5da7257a6f7/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4 h1:nPiLDJ9/wsay2NDshdJ1B24frx+butTxmaVaCxDBChY= +google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8d7df36f753..284c46ad8a6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0LoCYJF53PEqtJOntKxGD72X/c8Xto5EZ4HLrt9D80I=", - version = "v0.0.0-20211115160612-a5da7257a6f7", + sum = "h1:nPiLDJ9/wsay2NDshdJ1B24frx+butTxmaVaCxDBChY=", + version = "v0.0.0-20211116182654-e63d96a377c4", ) go_repository( name = "org_golang_google_grpc", From de1f784e923a8b7b48619ca1fe694765316f71f5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 17 Nov 2021 17:48:57 +0000 Subject: [PATCH 1127/1518] fix(deps): update google.golang.org/genproto commit hash to 120650a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a69349154da..67882129a63 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4 + google.golang.org/genproto v0.0.0-20211117155847-120650a500bb google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index 6d38219f90e..f6bdbb4a4f9 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4 h1:nPiLDJ9/wsay2NDshdJ1B24frx+butTxmaVaCxDBChY= -google.golang.org/genproto v0.0.0-20211116182654-e63d96a377c4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211117155847-120650a500bb h1:B1cc9lxfg3Zd0zoHxwyckY7YPprzkXKNWw9sxJ3/obk= +google.golang.org/genproto v0.0.0-20211117155847-120650a500bb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 284c46ad8a6..71ea80cbb19 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:nPiLDJ9/wsay2NDshdJ1B24frx+butTxmaVaCxDBChY=", - version = "v0.0.0-20211116182654-e63d96a377c4", + sum = "h1:B1cc9lxfg3Zd0zoHxwyckY7YPprzkXKNWw9sxJ3/obk=", + version = "v0.0.0-20211117155847-120650a500bb", ) go_repository( name = "org_golang_google_grpc", From 9bff7b14fab8aace99d7febe4ae1ee4fac526eca Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 18 Nov 2021 18:26:36 +0000 Subject: [PATCH 1128/1518] fix(deps): update google.golang.org/genproto commit hash to 81c1377 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 67882129a63..fca705d1540 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211117155847-120650a500bb + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index f6bdbb4a4f9..9d29f8b3c2f 100644 --- a/go.sum +++ b/go.sum @@ -366,8 +366,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211117155847-120650a500bb h1:B1cc9lxfg3Zd0zoHxwyckY7YPprzkXKNWw9sxJ3/obk= -google.golang.org/genproto v0.0.0-20211117155847-120650a500bb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 71ea80cbb19..8fe2dde3a2f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:B1cc9lxfg3Zd0zoHxwyckY7YPprzkXKNWw9sxJ3/obk=", - version = "v0.0.0-20211117155847-120650a500bb", + sum = "h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE=", + version = "v0.0.0-20211118181313-81c1377c94b1", ) go_repository( name = "org_golang_google_grpc", From c3842b6ac6b105798f84af1377b8d907b1613183 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 23 Nov 2021 20:54:15 -0500 Subject: [PATCH 1129/1518] Update goreleaser job (#2437) * Update gorelease reference * Update buf to 1.0.0-rc8 --- .circleci/config.yml | 6 +++--- Makefile | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3b896ccdbea..3f13695c711 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.6.0 + - run: gorelease -base=v2.7.0 push_bsr_plugins: docker: - image: circleci/golang @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:0.56.0 + - image: bufbuild/buf:1.0.0-rc8 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:0.56.0 + - image: bufbuild/buf:1.0.0-rc8 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin diff --git a/Makefile b/Makefile index 5a7e3b42441..f6afd4de3b0 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh install: - go install github.com/bufbuild/buf/cmd/buf@v1.0.0-rc2 + go install github.com/bufbuild/buf/cmd/buf@v1.0.0-rc8 go install \ ./protoc-gen-openapiv2 \ ./protoc-gen-grpc-gateway From fe8b2691e12e1086c867bb0e690787fd166e784a Mon Sep 17 00:00:00 2001 From: Mik Date: Thu, 25 Nov 2021 03:15:52 +0100 Subject: [PATCH 1130/1518] Replace "github.com/ghodss/yaml" with "sigs.k8s.io/yaml" (#2436) --- go.mod | 2 +- go.sum | 8 ++++++-- internal/descriptor/BUILD.bazel | 2 +- internal/descriptor/grpc_api_configuration.go | 2 +- internal/descriptor/openapi_configuration.go | 2 +- repositories.bzl | 14 ++++++++++---- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index fca705d1540..d3930c49238 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.14 require ( github.com/antihax/optional v1.0.0 - github.com/ghodss/yaml v1.0.0 github.com/golang/glog v1.0.0 github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 @@ -13,4 +12,5 @@ require ( google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 + sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index 9d29f8b3c2f..7a320d379bd 100644 --- a/go.sum +++ b/go.sum @@ -51,6 +51,8 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -58,7 +60,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -404,8 +405,9 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -417,3 +419,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index b9473e24f2a..76304bec147 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -19,9 +19,9 @@ go_library( "//internal/descriptor/openapiconfig", "//internal/httprule", "//protoc-gen-openapiv2/options", - "@com_github_ghodss_yaml//:yaml", "@com_github_golang_glog//:glog", "@go_googleapis//google/api:annotations_go_proto", + "@io_k8s_sigs_yaml//:yaml", "@org_golang_google_protobuf//compiler/protogen", "@org_golang_google_protobuf//encoding/protojson", "@org_golang_google_protobuf//proto", diff --git a/internal/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go index c369f93406f..2e90e46a1a0 100644 --- a/internal/descriptor/grpc_api_configuration.go +++ b/internal/descriptor/grpc_api_configuration.go @@ -5,9 +5,9 @@ import ( "io/ioutil" "strings" - "github.com/ghodss/yaml" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig" "google.golang.org/protobuf/encoding/protojson" + "sigs.k8s.io/yaml" ) func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*apiconfig.GrpcAPIService, error) { diff --git a/internal/descriptor/openapi_configuration.go b/internal/descriptor/openapi_configuration.go index 3b5f74965a3..bce5bc52a0f 100644 --- a/internal/descriptor/openapi_configuration.go +++ b/internal/descriptor/openapi_configuration.go @@ -4,9 +4,9 @@ import ( "fmt" "io/ioutil" - "github.com/ghodss/yaml" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig" "google.golang.org/protobuf/encoding/protojson" + "sigs.k8s.io/yaml" ) func loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*openapiconfig.OpenAPIConfig, error) { diff --git a/repositories.bzl b/repositories.bzl index 8fe2dde3a2f..358c1020f0f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -185,8 +185,8 @@ def go_repositories(): go_repository( name = "com_github_davecgh_go_spew", importpath = "github.com/davecgh/go-spew", - sum = "h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=", - version = "v1.1.0", + sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", + version = "v1.1.1", ) go_repository( name = "com_github_dgrijalva_jwt_go", @@ -1007,8 +1007,8 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=", - version = "v2.2.3", + sum = "h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=", + version = "v2.4.0", ) go_repository( name = "in_gopkg_yaml_v3", @@ -1022,6 +1022,12 @@ def go_repositories(): sum = "h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=", version = "v1.3.2", ) + go_repository( + name = "io_k8s_sigs_yaml", + importpath = "sigs.k8s.io/yaml", + sum = "h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=", + version = "v1.3.0", + ) go_repository( name = "io_opencensus_go", From e2eda248cfd6511609c2d68073b772a624e333b5 Mon Sep 17 00:00:00 2001 From: Eng Zer Jun Date: Fri, 26 Nov 2021 11:13:31 +0800 Subject: [PATCH 1131/1518] build: upgrade `go` directive in `go.mod` to 1.17 (#2443) This commit enables support for module graph pruning and lazy module loading for projects that are at Go 1.17 or higher. Reference: https://go.dev/ref/mod#go-mod-file-go Reference: https://go.dev/ref/mod#graph-pruning Reference: https://go.dev/ref/mod#lazy-loading Signed-off-by: Eng Zer Jun --- go.mod | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index d3930c49238..992828d6282 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/grpc-ecosystem/grpc-gateway/v2 -go 1.14 +go 1.17 require ( github.com/antihax/optional v1.0.0 @@ -14,3 +14,12 @@ require ( google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 ) + +require ( + golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect + golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect + golang.org/x/text v0.3.5 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/appengine v1.6.6 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) From 770a3b9c1a0132c8df58d3fac3df70d2d11220fa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 29 Nov 2021 17:51:27 +0000 Subject: [PATCH 1132/1518] fix(deps): update google.golang.org/genproto commit hash to f09f9a1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 992828d6282..aeb02984981 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 + google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 7a320d379bd..ab378d77c10 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12 h1:DN5b3HU13J4sMd/QjDx34U6afpaexKTDdop+26pdjdk= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 358c1020f0f..ddaa4507cfc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE=", - version = "v0.0.0-20211118181313-81c1377c94b1", + sum = "h1:DN5b3HU13J4sMd/QjDx34U6afpaexKTDdop+26pdjdk=", + version = "v0.0.0-20211129164237-f09f9a12af12", ) go_repository( name = "org_golang_google_grpc", From 432b7f7c97da72ef5a9156c79cf4493a340f3ffd Mon Sep 17 00:00:00 2001 From: Shane Kerr Date: Thu, 2 Dec 2021 04:29:31 +0100 Subject: [PATCH 1133/1518] Revert "support grpc.ClientConnInterface in RegisterXXXHandler (#2398)" (#2444) This reverts commit 8857147978c9e9c9835bdbe441337ffce8a2a806. --- examples/internal/gateway/gateway.go | 2 +- examples/internal/helloworld/helloworld.pb.gw.go | 2 +- .../internal/proto/examplepb/a_bit_of_everything.pb.gw.go | 4 ++-- examples/internal/proto/examplepb/echo_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.gw.go | 2 +- .../proto/examplepb/generate_unbound_methods.pb.gw.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.gw.go | 2 +- examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go | 4 ++-- examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go | 2 +- .../internal/proto/examplepb/response_body_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/stream.pb.gw.go | 2 +- .../proto/examplepb/unannotated_echo_service.pb.gw.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.gw.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.gw.go | 2 +- .../proto/standalone/unannotated_echo_service.pb.gw.go | 2 +- protoc-gen-grpc-gateway/internal/gengateway/template.go | 2 +- protoc-gen-grpc-gateway/internal/gengateway/template_test.go | 4 ++-- 17 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index fb6d9b861fb..b82089d60fe 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -18,7 +18,7 @@ func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.Ser mux := gwruntime.NewServeMux(opts...) - for _, f := range []func(context.Context, *gwruntime.ServeMux, grpc.ClientConnInterface) error{ + for _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{ examplepb.RegisterEchoServiceHandler, standalone.RegisterUnannotatedEchoServiceHandler, examplepb.RegisterStreamServiceHandler, diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 2850c3e97b7..a9de3f25404 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -997,7 +997,7 @@ func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeM // RegisterGreeterHandler registers the http handlers for service Greeter to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterGreeterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterGreeterHandlerClient(ctx, mux, NewGreeterClient(conn)) } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index f27eeeaff09..d138698e894 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -3028,7 +3028,7 @@ func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterABitOfEverythingServiceHandler registers the http handlers for service ABitOfEverythingService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterABitOfEverythingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterABitOfEverythingServiceHandlerClient(ctx, mux, NewABitOfEverythingServiceClient(conn)) } @@ -3721,7 +3721,7 @@ func RegisterCamelCaseServiceNameHandlerFromEndpoint(ctx context.Context, mux *r // RegisterCamelCaseServiceNameHandler registers the http handlers for service CamelCaseServiceName to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterCamelCaseServiceNameHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterCamelCaseServiceNameHandlerClient(ctx, mux, NewCamelCaseServiceNameClient(conn)) } diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 31f60175673..4600a75bfbf 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -916,7 +916,7 @@ func RegisterEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.Se // RegisterEchoServiceHandler registers the http handlers for service EchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterEchoServiceHandlerClient(ctx, mux, NewEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 8ed367aa558..1dcfbc106f9 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1852,7 +1852,7 @@ func RegisterFlowCombinationHandlerFromEndpoint(ctx context.Context, mux *runtim // RegisterFlowCombinationHandler registers the http handlers for service FlowCombination to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterFlowCombinationHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterFlowCombinationHandlerClient(ctx, mux, NewFlowCombinationClient(conn)) } diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go index 19a8e2bd371..6f9a3127109 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go @@ -238,7 +238,7 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerFromEndpoint(ctx context.Co // RegisterGenerateUnboundMethodsEchoServiceHandler registers the http handlers for service GenerateUnboundMethodsEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterGenerateUnboundMethodsEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx, mux, NewGenerateUnboundMethodsEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 0a621d49243..5895118af26 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -245,7 +245,7 @@ func RegisterNonStandardServiceHandlerFromEndpoint(ctx context.Context, mux *run // RegisterNonStandardServiceHandler registers the http handlers for service NonStandardService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterNonStandardServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterNonStandardServiceHandlerClient(ctx, mux, NewNonStandardServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go index ba0db6ea65f..88e1cfaf461 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -304,7 +304,7 @@ func RegisterServiceAHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceAHandler registers the http handlers for service ServiceA to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterServiceAHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterServiceAHandlerClient(ctx, mux, NewServiceAClient(conn)) } @@ -397,7 +397,7 @@ func RegisterServiceCHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceCHandler registers the http handlers for service ServiceC to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterServiceCHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterServiceCHandlerClient(ctx, mux, NewServiceCClient(conn)) } diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go index 31d615b26c7..a9d82480425 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -181,7 +181,7 @@ func RegisterServiceBHandlerFromEndpoint(ctx context.Context, mux *runtime.Serve // RegisterServiceBHandler registers the http handlers for service ServiceB to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterServiceBHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterServiceBHandlerClient(ctx, mux, NewServiceBClient(conn)) } diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 22c78b39c63..e64358861f0 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -333,7 +333,7 @@ func RegisterResponseBodyServiceHandlerFromEndpoint(ctx context.Context, mux *ru // RegisterResponseBodyServiceHandler registers the http handlers for service ResponseBodyService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterResponseBodyServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterResponseBodyServiceHandlerClient(ctx, mux, NewResponseBodyServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index daf6f244b56..a760748726d 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -218,7 +218,7 @@ func RegisterStreamServiceHandlerFromEndpoint(ctx context.Context, mux *runtime. // RegisterStreamServiceHandler registers the http handlers for service StreamService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterStreamServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterStreamServiceHandlerClient(ctx, mux, NewStreamServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 14c981d887a..d0299af3c16 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -389,7 +389,7 @@ func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, NewUnannotatedEchoServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 079c362304e..8b1f23855a4 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -181,7 +181,7 @@ func RegisterLoginServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.S // RegisterLoginServiceHandler registers the http handlers for service LoginService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterLoginServiceHandlerClient(ctx, mux, NewLoginServiceClient(conn)) } diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 1f72a54a665..70142211250 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -696,7 +696,7 @@ func RegisterWrappersServiceHandlerFromEndpoint(ctx context.Context, mux *runtim // RegisterWrappersServiceHandler registers the http handlers for service WrappersService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterWrappersServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterWrappersServiceHandlerClient(ctx, mux, NewWrappersServiceClient(conn)) } diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index 89705ffc7ba..f086e9b4e20 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -769,7 +769,7 @@ func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux // RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, extExamplepb.NewUnannotatedEchoServiceClient(conn)) } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index e51fdc0448a..d07dc67144b 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -655,7 +655,7 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}FromEndpoint(ctx context.Co // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}} registers the http handlers for service {{$svc.GetName}} to "mux". // The handlers forward requests to the grpc endpoint over "conn". -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx, mux, {{$svc.ClientConstructorName}}(conn)) } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 61fd9dfc092..2da7e8bbba3 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -248,7 +248,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `protoReq.GetNested().Int32, err = runtime.Int32P(val)`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error {`; !strings.Contains(got, want) { + if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { @@ -403,7 +403,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := spec.sigWant; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn grpc.ClientConnInterface) error {`; !strings.Contains(got, want) { + if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { From 85b90ba6e0d39433640c42810a5730382881285a Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 1 Dec 2021 22:33:58 -0500 Subject: [PATCH 1134/1518] Update gorelease base (#2448) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3f13695c711..5fca452705e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.7.0 + - run: gorelease -base=v2.7.1 push_bsr_plugins: docker: - image: circleci/golang From f8ef17c1dce6002c03285c3a0cf8dacf5e3604c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 Dec 2021 11:08:57 +0000 Subject: [PATCH 1135/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 31e9d08c3d2..f6932a0c76f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,9 +82,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "614c84128ddb86aab4e1f25ba2e027d32fd5c6da302ae30685b9d7973b13da1b", - strip_prefix = "buildtools-4.2.3", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.3.tar.gz"], + sha256 = "44a6e5acc007e197d45ac3326e7f993f0160af9a58e8777ca7701e00501c0857", + strip_prefix = "buildtools-4.2.4", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.4.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From abc011150e4cc051a93a658b22f4704142a6d697 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 Dec 2021 20:36:36 +0000 Subject: [PATCH 1136/1518] fix(deps): update google.golang.org/genproto commit hash to 54befc3 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index aeb02984981..05529f27694 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12 + google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index ab378d77c10..8483c545c71 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12 h1:DN5b3HU13J4sMd/QjDx34U6afpaexKTDdop+26pdjdk= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9 h1:fU3FNfL/oBU2D5DvGqiuyVqqn40DdxvaTFHq7aivA3k= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ddaa4507cfc..d5a0c63a539 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:DN5b3HU13J4sMd/QjDx34U6afpaexKTDdop+26pdjdk=", - version = "v0.0.0-20211129164237-f09f9a12af12", + sum = "h1:fU3FNfL/oBU2D5DvGqiuyVqqn40DdxvaTFHq7aivA3k=", + version = "v0.0.0-20211203200212-54befc351ae9", ) go_repository( name = "org_golang_google_grpc", From 2472bd3fe60fbcc931c1220a7ccfe9b3ec13b665 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 4 Dec 2021 01:06:23 +0000 Subject: [PATCH 1137/1518] chore(deps): update golang docker tag to v1.17.4 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index d36f5933157..c2d08cd1c35 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.3 +FROM golang:1.17.4 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 1416f1e24e8..04584161d47 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.3 as builder +FROM golang:1.17.4 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index e6b1ac6204f..267fd8e0677 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.3 as builder +FROM golang:1.17.4 as builder ARG RELEASE_VERSION From dd31895639315e26ba59c70a54654002bdbe52fa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Dec 2021 17:38:45 +0000 Subject: [PATCH 1138/1518] fix(deps): update google.golang.org/genproto commit hash to 862468c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 05529f27694..fbddaeb238d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9 + google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 8483c545c71..b996a024ef4 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9 h1:fU3FNfL/oBU2D5DvGqiuyVqqn40DdxvaTFHq7aivA3k= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d5a0c63a539..6b89ad9c959 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fU3FNfL/oBU2D5DvGqiuyVqqn40DdxvaTFHq7aivA3k=", - version = "v0.0.0-20211203200212-54befc351ae9", + sum = "h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28=", + version = "v0.0.0-20211206160659-862468c7d6e0", ) go_repository( name = "org_golang_google_grpc", From c77c77c1e4faeff06b0b7263c736572bf5ccc3da Mon Sep 17 00:00:00 2001 From: Makdon Date: Tue, 7 Dec 2021 09:02:54 +0800 Subject: [PATCH 1139/1518] Log warning if HeaderMatcherFunc passes malformed HTTP headers to grpc server (#2455) Co-authored-by: Johan Brandhorst-Satzkorn --- runtime/BUILD.bazel | 1 + runtime/context.go | 13 ++++++++ runtime/mux.go | 20 +++++++++++++ runtime/mux_internal_test.go | 58 ++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 runtime/mux_internal_test.go diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 95f867a5286..a7a039816ea 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -56,6 +56,7 @@ go_test( "marshal_jsonpb_test.go", "marshal_proto_test.go", "marshaler_registry_test.go", + "mux_internal_test.go", "mux_test.go", "pattern_test.go", "query_test.go", diff --git a/runtime/context.go b/runtime/context.go index fb57b9366ea..b5d1e6cf81b 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -41,6 +41,12 @@ var ( DefaultContextTimeout = 0 * time.Second ) +// malformedHTTPHeaders lists the headers that the gRPC server may reject outright as malformed. +// See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more context. +var malformedHTTPHeaders = map[string]struct{}{ + "connection": {}, +} + type ( rpcMethodKey struct{} httpPathPatternKey struct{} @@ -308,6 +314,13 @@ func isPermanentHTTPHeader(hdr string) bool { return false } +// isMalformedHTTPHeader checks whether header belongs to the list of +// "malformed headers" and would be rejected by the gRPC server. +func isMalformedHTTPHeader(header string) bool { + _, isMalformed := malformedHTTPHeaders[strings.ToLower(header)] + return isMalformed +} + // RPCMethod returns the method string for the server context. The returned // string is in the format of "/package.service/method". func RPCMethod(ctx context.Context) (string, bool) { diff --git a/runtime/mux.go b/runtime/mux.go index 46a4aabaf95..f2698776f20 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -10,6 +10,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" @@ -113,11 +114,30 @@ func DefaultHeaderMatcher(key string) (string, bool) { // This matcher will be called with each header in http.Request. If matcher returns true, that header will be // passed to gRPC context. To transform the header before passing to gRPC context, matcher should return modified header. func WithIncomingHeaderMatcher(fn HeaderMatcherFunc) ServeMuxOption { + for _, header := range fn.matchedMalformedHeaders() { + grpclog.Warningf("The configured forwarding filter would allow %q to be sent to the gRPC server, which will likely cause errors. See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more information.", header) + } + return func(mux *ServeMux) { mux.incomingHeaderMatcher = fn } } +// matchedMalformedHeaders returns the malformed headers that would be forwarded to gRPC server. +func (fn HeaderMatcherFunc) matchedMalformedHeaders() []string { + if fn == nil { + return nil + } + headers := make([]string, 0) + for header := range malformedHTTPHeaders { + out, accept := fn(header) + if accept && isMalformedHTTPHeader(out) { + headers = append(headers, out) + } + } + return headers +} + // WithOutgoingHeaderMatcher returns a ServeMuxOption representing a headerMatcher for outgoing response from gateway. // // This matcher will be called with each header in response header metadata. If matcher returns true, that header will be diff --git a/runtime/mux_internal_test.go b/runtime/mux_internal_test.go new file mode 100644 index 00000000000..4c73d05222d --- /dev/null +++ b/runtime/mux_internal_test.go @@ -0,0 +1,58 @@ +package runtime + +import ( + "sort" + "testing" +) + +func TestWithIncomingHeaderMatcher_matchedMalformedHeaders(t *testing.T) { + tests := []struct { + name string + matcher HeaderMatcherFunc + want []string + }{ + { + "nil matcher returns nothing", + nil, + nil, + }, + { + "default matcher returns nothing", + DefaultHeaderMatcher, + nil, + }, + { + "passthrough matcher returns all malformed headers", + func(s string) (string, bool) { + return s, true + }, + []string{"connection"}, + }, + } + + sliceEqual := func(a, b []string) bool { + if len(a) != len(b) { + return false + } + sort.Slice(a, func(i, j int) bool { + return a[i] < a[j] + }) + sort.Slice(b, func(i, j int) bool { + return a[i] < a[j] + }) + for idx := range a { + if a[idx] != b[idx] { + return false + } + } + return true + } + + for _, tt := range tests { + out := tt.matcher.matchedMalformedHeaders() + if !sliceEqual(tt.want, out) { + t.Errorf("matchedMalformedHeaders not match; Want %v; got %v", + tt.want, out) + } + } +} From 006f898cea24795388d7968c0d367db6cb9fa8c4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 7 Dec 2021 01:38:13 +0000 Subject: [PATCH 1140/1518] fix(deps): update google.golang.org/genproto commit hash to 3cb0678 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index fbddaeb238d..5246ea3ab91 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 + google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b996a024ef4..1078b24723f 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0 h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f h1:QH7+Ym+7e2XV1dZIHapkXoeqHyNaCzn6MNp3JBaYYUc= +google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6b89ad9c959..089ff947afc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:c7yRRmuQiVMo+YppNj5MUREXUyc2lPo3DrtYMwaWQ28=", - version = "v0.0.0-20211206160659-862468c7d6e0", + sum = "h1:QH7+Ym+7e2XV1dZIHapkXoeqHyNaCzn6MNp3JBaYYUc=", + version = "v0.0.0-20211206220100-3cb06788ce7f", ) go_repository( name = "org_golang_google_grpc", From 27297c3b8ae1d1533dc4a19dec472952c476546e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 7 Dec 2021 16:58:40 +0000 Subject: [PATCH 1141/1518] fix(deps): update google.golang.org/genproto commit hash to 918901c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5246ea3ab91..f2928a9d14a 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f + google.golang.org/genproto v0.0.0-20211207154714-918901c715cf google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 1078b24723f..f0dac067407 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f h1:QH7+Ym+7e2XV1dZIHapkXoeqHyNaCzn6MNp3JBaYYUc= -google.golang.org/genproto v0.0.0-20211206220100-3cb06788ce7f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211207154714-918901c715cf h1:PSEM+IQFb9xdsj2CGhfqUTfsZvF8DScCVP1QZb2IiTQ= +google.golang.org/genproto v0.0.0-20211207154714-918901c715cf/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 089ff947afc..a500b558a80 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:QH7+Ym+7e2XV1dZIHapkXoeqHyNaCzn6MNp3JBaYYUc=", - version = "v0.0.0-20211206220100-3cb06788ce7f", + sum = "h1:PSEM+IQFb9xdsj2CGhfqUTfsZvF8DScCVP1QZb2IiTQ=", + version = "v0.0.0-20211207154714-918901c715cf", ) go_repository( name = "org_golang_google_grpc", From ab27c44b7b4b549ebab80ce015a77fb3e196fd4d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Dec 2021 23:33:18 +0000 Subject: [PATCH 1142/1518] fix(deps): update google.golang.org/genproto commit hash to 3a66f56 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f2928a9d14a..95082fe8acb 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211207154714-918901c715cf + google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index f0dac067407..5bec745b1bd 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211207154714-918901c715cf h1:PSEM+IQFb9xdsj2CGhfqUTfsZvF8DScCVP1QZb2IiTQ= -google.golang.org/genproto v0.0.0-20211207154714-918901c715cf/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a500b558a80..93284892d54 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:PSEM+IQFb9xdsj2CGhfqUTfsZvF8DScCVP1QZb2IiTQ=", - version = "v0.0.0-20211207154714-918901c715cf", + sum = "h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0=", + version = "v0.0.0-20211208223120-3a66f561d7aa", ) go_repository( name = "org_golang_google_grpc", From 65c058513d2b4fbbe452539d23c9ca10c1e140e1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Dec 2021 18:18:42 +0000 Subject: [PATCH 1143/1518] chore(deps): update golang docker tag to v1.17.5 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c2d08cd1c35..02d2d8bd9f6 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.4 +FROM golang:1.17.5 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 04584161d47..fd8af0821bc 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.4 as builder +FROM golang:1.17.5 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 267fd8e0677..6a7c8c7675d 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.4 as builder +FROM golang:1.17.5 as builder ARG RELEASE_VERSION From 58634e4f66ed8ad83c0a66649fe0197ab4698e76 Mon Sep 17 00:00:00 2001 From: Matthew Vance <92820658+betmix-matt@users.noreply.github.com> Date: Tue, 14 Dec 2021 18:02:36 -0800 Subject: [PATCH 1144/1518] Fixes #407 and #1700 - google.api.http path parameter constraints and multiple HTTP path/method endpoint support (#2461) * Support standard OpenAPI paths for all valid path params for gRPC endpoints in protoc-gen-openapiv2 (#407) * Fix issue with URL encoded path segments not being split when unescaping mode is legacy, default or all characters * Adding docs for path template syntax and new functionality (#1700) * Removed unused old code * Additional tests for regular expressions * Formatting code * Fix lint error * Removing duplicate test * Adding additional test for path escaping * Fix failing test because of path change * Fix failing tests in code coverage * Change determination of unescaping by supporting default mode change * Regenerated files from changes * Remove unused parameters in test * Remove code warnings in test * Implement changes from PR #2461 comments * Correcting incorrect documentation * Adding test case to show change in docs is warranted --- README.md | 17 +- .../internal/clients/abe/api/swagger.yaml | 11 +- .../abe/api_a_bit_of_everything_service.go | 4 +- .../a_bit_of_everything.swagger.json | 25 +- .../internal/genopenapi/template.go | 144 ++++- .../internal/genopenapi/template_test.go | 538 +++++++++++++++++- .../internal/genopenapi/types.go | 1 + runtime/mux.go | 24 +- runtime/mux_test.go | 76 ++- 9 files changed, 779 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 7fa417076a1..4175d4716b8 100644 --- a/README.md +++ b/README.md @@ -429,6 +429,19 @@ Alternatively, see the section on remotely managed plugin versions below. Note that this plugin also supports generating OpenAPI definitions for unannotated methods; use the `generate_unbound_methods` option to enable this. + It is possible with the HTTP mapping for a gRPC service method to create duplicate mappings + with the only difference being constraints on the path parameter. + + `/v1/{name=projects/*}` and `/v1/{name=organizations/*}` both become `/v1/{name}`. When + this occurs the plugin will rename the path parameter with a "_1" (or "_2" etc) suffix + to differentiate the different operations. So in the above example, the 2nd path would become + `/v1/{name_1=organizations/*}`. This can also cause OpenAPI clients to URL encode the "/" that is + part of the path parameter as that is what OpenAPI defines in the specification. To allow gRPC gateway to + accept the URL encoded slash and still route the request, use the UnescapingModeAllCharacters or + UnescapingModeLegacy (which is the default currently though may change in future versions). See + [Customizing Your Gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/) + for more information. + ## Usage with remote plugins As an alternative to all of the above, you can use `buf` with @@ -564,13 +577,15 @@ But patches are welcome. - HTTP request host is added as `X-Forwarded-Host` gRPC request header. - HTTP `Authorization` header is added as `authorization` gRPC request header. - Remaining Permanent HTTP header keys (as specified by the IANA - [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) + [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml)) are prefixed with `grpcgateway-` and added with their values to gRPC request header. - HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`). - While configurable, the default {un,}marshaling uses [protojson](https://pkg.go.dev/google.golang.org/protobuf/encoding/protojson). +- The path template used to map gRPC service methods to HTTP endpoints supports the [google.api.http](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto) + path template syntax. For example, `/api/v1/{name=projects/*/topics/*}` or `/prefix/{path=organizations/**}`. ## Contribution diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index c9f96ecf811..d32665ec21a 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -158,6 +158,7 @@ paths: in: "query" required: false type: "string" + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -470,6 +471,7 @@ paths: in: "query" required: false type: "string" + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -773,6 +775,7 @@ paths: in: "query" required: false type: "string" + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -1445,6 +1448,7 @@ paths: in: "path" required: true type: "string" + pattern: "strprefix/[^/]+" x-exportParamName: "StringValue" - name: "uint32Value" in: "path" @@ -1544,6 +1548,7 @@ paths: in: "query" required: false type: "string" + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "bytesValue" @@ -2076,7 +2081,7 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v1/{book.name=publishers/*/books/*}: + /v1/{book.name}: patch: tags: - "ABitOfEverythingService" @@ -2088,6 +2093,7 @@ paths: \nExample: `publishers/1257894000000000000/books/my-book`" required: true type: "string" + pattern: "publishers/[^/]+/books/[^/]+" x-exportParamName: "BookName" - in: "body" name: "body" @@ -2138,7 +2144,7 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v1/{parent=publishers/*}/books: + /v1/{parent}/books: post: tags: - "ABitOfEverythingService" @@ -2151,6 +2157,7 @@ paths: \nExample: `publishers/1257894000000000000`" required: true type: "string" + pattern: "publishers/[^/]+" x-exportParamName: "Parent" - in: "body" name: "body" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 45e6cde0b5c..bda25866910 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -1943,7 +1943,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ct ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/{parent=publishers/*}/books" + localVarPath := a.client.cfg.BasePath + "/v1/{parent}/books" localVarPath = strings.Replace(localVarPath, "{"+"parent"+"}", fmt.Sprintf("%v", parent), -1) localVarHeaderParams := make(map[string]string) @@ -4080,7 +4080,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ct ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/{book.name=publishers/*/books/*}" + localVarPath := a.client.cfg.BasePath + "/v1/{book.name}" localVarPath = strings.Replace(localVarPath, "{"+"book.name"+"}", fmt.Sprintf("%v", bookName), -1) localVarHeaderParams := make(map[string]string) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 673736534b5..28a81dff4cd 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -238,7 +238,8 @@ "name": "uuid", "in": "query", "required": false, - "type": "string" + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, { "name": "floatValue", @@ -579,7 +580,8 @@ "name": "uuid", "in": "query", "required": false, - "type": "string" + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, { "name": "floatValue", @@ -913,7 +915,8 @@ "name": "uuid", "in": "query", "required": false, - "type": "string" + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, { "name": "floatValue", @@ -1652,7 +1655,8 @@ "name": "stringValue", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": "strprefix/[^/]+" }, { "name": "uint32Value", @@ -1766,7 +1770,8 @@ "name": "uuid", "in": "query", "required": false, - "type": "string" + "type": "string", + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" }, { "name": "bytesValue", @@ -2615,7 +2620,7 @@ ] } }, - "/v1/{book.name=publishers/*/books/*}": { + "/v1/{book.name}": { "patch": { "operationId": "ABitOfEverythingService_UpdateBook", "responses": { @@ -2661,7 +2666,8 @@ "description": "The resource name of the book.\n\nFormat: `publishers/{publisher}/books/{book}`\n\nExample: `publishers/1257894000000000000/books/my-book`", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": "publishers/[^/]+/books/[^/]+" }, { "name": "body", @@ -2692,7 +2698,7 @@ ] } }, - "/v1/{parent=publishers/*}/books": { + "/v1/{parent}/books": { "post": { "summary": "Create a book.", "operationId": "ABitOfEverythingService_CreateBook", @@ -2739,7 +2745,8 @@ "description": "The publisher in which to create the book.\n\nFormat: `publishers/{publisher}`\n\nExample: `publishers/1257894000000000000`", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": "publishers/[^/]+" }, { "name": "body", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index b9350b70a3e..54067999309 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -28,6 +28,15 @@ import ( "google.golang.org/protobuf/types/known/structpb" ) +// The OpenAPI specification does not allow for more than one endpoint with the same HTTP method and path. +// This prevents multiple gRPC service methods from sharing the same stripped version of the path and method. +// For example: `GET /v1/{name=organizations/*}/roles` and `GET /v1/{name=users/*}/roles` both get stripped to `GET /v1/{name}/roles`. +// We must make the URL unique by adding a suffix and an incrementing index to each path parameter +// to differentiate the endpoints. +// Since path parameter names do not affect the request contents (i.e. they're replaced in the path) +// this will be hidden from the real grpc gateway consumer. +const pathParamUniqueSuffixDeliminator = "_" + // wktSchemas are the schemas of well-known-types. // The schemas must match with the behavior of the JSON unmarshaler in // https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/encoding/protojson/well_known_types.go @@ -244,6 +253,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre Type: schema.Type, Items: schema.Items, Format: schema.Format, + Pattern: schema.Pattern, Required: required, } if param.Type == "array" { @@ -747,10 +757,11 @@ func resolveFullyQualifiedNameToOpenAPINames(messages []string, namingStrategy s return strategyFn(messages) } -var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") +var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*)([^}]*)}") -// OpenAPI expects paths of the form /path/{string_value} but gRPC-Gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. -func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) string { +// templateToParts will split a URL template as defined by https://github.com/googleapis/googleapis/blob/master/google/api/http.proto +// into a string slice with each part as an element of the slice for use by `partsToOpenAPIPath` and `partsToRegexpMap`. +func templateToParts(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) []string { // It seems like the right thing to do here is to just use // strings.Split(path, "/") but that breaks badly when you hit a url like // /{my_field=prefix/*}/ and end up with 2 sections representing my_field. @@ -802,28 +813,51 @@ func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*desc // Now append the last element to parts parts = append(parts, buffer) - // Parts is now an array of segments of the path. Interestingly, since the - // syntax for this subsection CAN be handled by a regexp since it has no - // memory. + return parts +} + +// partsToOpenAPIPath converts each path part of the form /path/{string_value=strprefix/*} which is defined in +// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto to the OpenAPI expected form /path/{string_value}. +// For example this would replace the path segment of "{foo=bar/*}" with "{foo}" or "prefix{bang=bash/**}" with "prefix{bang}". +// OpenAPI 2 only allows simple path parameters with the constraints on that parameter specified in the OpenAPI +// schema's "pattern" instead of in the path parameter itself. +func partsToOpenAPIPath(parts []string) string { for index, part := range parts { - // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. - prefix := canRegexp.ReplaceAllString(part, "$1") - if isResourceName(prefix) { - continue - } parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } - return strings.Join(parts, "/") } -func isResourceName(prefix string) bool { - words := strings.Split(prefix, ".") - l := len(words) - field := words[l-1] - words = strings.Split(field, ":") - field = words[0] - return field == "parent" || field == "name" +// partsToRegexpMap returns a map of parameter name to ECMA 262 patterns +// which is what the "pattern" field on an OpenAPI parameter expects. +// See https://swagger.io/specification/v2/ (Parameter Object) and +// https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.2.3. +// The expression is generated based on expressions defined by https://github.com/googleapis/googleapis/blob/master/google/api/http.proto +// "Path Template Syntax" section which allow for a "param_name=foobar/*/bang/**" style expressions inside +// the path parameter placeholders that indicate constraints on the values of those parameters. +// This function will scan the split parts of a path template for parameters and +// outputs a map of the name of the parameter to a ECMA regular expression. See the http.proto file for descriptions +// of the supported syntax. This function will ignore any path parameters that don't contain a "=" after the +// parameter name. For supported parameters, we assume "*" represent all characters except "/" as it's +// intended to match a single path element and we assume "**" matches any character as it's intended to match multiple +// path elements. +// For example "{name=organizations/*/roles/*}" would produce the regular expression for the "name" parameter of +// "organizations/[^/]+/roles/[^/]+" or "{bar=bing/*/bang/**}" would produce the regular expression for the "bar" +// parameter of "bing/[^/]+/bang/.+". +func partsToRegexpMap(parts []string) map[string]string { + regExps := make(map[string]string) + for _, part := range parts { + if submatch := canRegexp.FindStringSubmatch(part); len(submatch) > 2 { + if strings.HasPrefix(submatch[2], "=") { // this part matches the standard and should be made into a regular expression + // assume the string's characters other than "**" and "*" are literals (not necessarily a good assumption 100% of the times, but it will support most use cases) + regex := submatch[2][1:] + regex = strings.ReplaceAll(regex, "**", ".+") // ** implies any character including "/" + regex = strings.ReplaceAll(regex, "*", "[^/]+") // * implies any character except "/" + regExps[submatch[1]] = regex + } + } + } + return regExps } func renderServiceTags(services []*descriptor.Service) []openapiTagObject { @@ -864,8 +898,13 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } for methIdx, meth := range svc.Methods { for bIdx, b := range meth.Bindings { + operationFunc := operationForMethod(b.HTTPMethod) // Iterate over all the OpenAPI parameters parameters := openapiParametersObject{} + // split the path template into its parts + parts := templateToParts(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs) + // extract any constraints specified in the path placeholders into ECMA regular expressions + pathParamRegexpMap := partsToRegexpMap(parts) for _, parameter := range b.PathParams { var paramType, paramFormat, desc, collectionFormat, defaultValue string @@ -936,6 +975,10 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re if reg.GetUseJSONNamesForFields() { parameterString = lowerCamelCase(parameterString, meth.RequestType.Fields, msgs) } + var pattern string + if regExp, ok := pathParamRegexpMap[parameterString]; ok { + pattern = regExp + } parameters = append(parameters, openapiParameterObject{ Name: parameterString, Description: desc, @@ -949,6 +992,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re Items: items, CollectionFormat: collectionFormat, MinItems: minItems, + Pattern: pattern, }) } // Now check if there is a body parameter @@ -1020,9 +1064,50 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } parameters = append(parameters, queryParams...) - pathItemObject, ok := paths[templateToOpenAPIPath(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)] + path := partsToOpenAPIPath(parts) + pathItemObject, ok := paths[path] if !ok { pathItemObject = openapiPathItemObject{} + } else { + // handle case where we have an existing mapping for the same path and method + existingOperationObject := operationFunc(&pathItemObject) + if existingOperationObject != nil { + var firstPathParameter *openapiParameterObject + var firstParamIndex int + for index, param := range parameters { + if param.In == "path" { + firstPathParameter = ¶m + firstParamIndex = index + break + } + } + if firstPathParameter == nil { + // Without a path parameter, there is nothing to vary to support multiple mappings of the same path/method. + // Previously this did not log an error and only overwrote the mapping, we now log the error but + // still overwrite the mapping + glog.Errorf("Duplicate mapping for path %s %s", b.HTTPMethod, path) + } else { + newPathCount := 0 + var newPath string + var newPathElement string + // Iterate until there is not an existing operation that matches the same escaped path. + // Most of the time this will only be a single iteration, but a large API could technically have + // a pretty large amount of these if it used similar patterns for all its functions. + for existingOperationObject != nil { + newPathCount += 1 + newPathElement = firstPathParameter.Name + pathParamUniqueSuffixDeliminator + strconv.Itoa(newPathCount) + newPath = strings.ReplaceAll(path, "{"+firstPathParameter.Name+"}", "{"+newPathElement+"}") + if newPathItemObject, ok := paths[newPath]; ok { + existingOperationObject = operationFunc(&newPathItemObject) + } else { + existingOperationObject = nil + } + } + firstPathParameter.Name = newPathElement + path = newPath + parameters[firstParamIndex] = *firstPathParameter + } + } } methProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.ServiceDescriptorProto)(nil)), "Method") @@ -1247,7 +1332,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re case "PATCH": pathItemObject.Patch = operationObject } - paths[templateToOpenAPIPath(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)] = pathItemObject + paths[path] = pathItemObject } } } @@ -1256,6 +1341,23 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re return nil } +func operationForMethod(httpMethod string) func(*openapiPathItemObject) *openapiOperationObject { + switch httpMethod { + case "GET": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Get } + case "POST": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Post } + case "PUT": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Put } + case "DELETE": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Delete } + case "PATCH": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Patch } + default: + return nil + } +} + // This function is called with a param which contains the entire definition of a method. func applyTemplate(p param) (*openapiSwaggerObject, error) { // Create the basic template object. This is the object that everything is diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index a32b13ae4bb..8f655e05269 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1,10 +1,13 @@ package genopenapi import ( + "bytes" "encoding/json" "errors" "fmt" + "io" "math" + "os" "reflect" "strings" "testing" @@ -58,6 +61,33 @@ func reqFromFile(f *descriptor.File) *pluginpb.CodeGeneratorRequest { } } +// captureStderr executes the given function and returns the full string of what +// was written to os.Stderr during execution and any error the function may have returned +func captureStderr(f func() error) (string, error) { + old := os.Stderr // keep backup of the real stderr + r, w, err := os.Pipe() + if err != nil { + return "", err + } + os.Stderr = w + + outC := make(chan string) + // copy the output in a separate goroutine so printing can't block indefinitely + go func() { + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + outC <- buf.String() + }() + + // calling function which stderr we are going to capture: + err = f() + + // back to normal state + _ = w.Close() + os.Stderr = old // restoring the real stderr + return <-outC, err +} + func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { type test struct { MsgDescs []*descriptorpb.DescriptorProto @@ -198,7 +228,7 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { for _, test := range tests { reg := descriptor.NewRegistry() reg.SetEnumsAsInts(true) - msgs := []*descriptor.Message{} + var msgs []*descriptor.Message for _, msgdesc := range test.MsgDescs { msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } @@ -1519,7 +1549,7 @@ func TestApplyTemplateHeaders(t *testing.T) { } openapiOperation := openapi_options.Operation{ Responses: map[string]*openapi_options.Response{ - "200": &openapi_options.Response{ + "200": { Description: "Testing Headers", Headers: map[string]*openapi_options.Header{ "string": { @@ -2702,17 +2732,17 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { return } - if _, ok := result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]; !ok { - t.Errorf("applyTemplate(%#v).%s = expected 200 response to be defined", tt.args.file, `result.Paths["/v1/{parent=publishers/*}/books"].Post.Responses["200"]`) + if _, ok := result.Paths["/v1/{parent}/books"].Post.Responses["200"]; !ok { + t.Errorf("applyTemplate(%#v).%s = expected 200 response to be defined", tt.args.file, `result.Paths["/v1/{parent}/books"].Post.Responses["200"]`) } else { - if want, got, name := 3, len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters), `len(result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters)`; !reflect.DeepEqual(got, want) { + if want, got, name := 3, len(result.Paths["/v1/{parent}/books"].Post.Parameters), `len(result.Paths["/v1/{parent}/books"].Post.Parameters)`; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", tt.args.file, name, got, want) } for i, want := range tt.want { - p := result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[i] - if got, name := (paramOut{p.Name, p.In, p.Required}), `result.Paths["/v1/{parent=publishers/*}/books"].Post.Parameters[0]`; !reflect.DeepEqual(got, want) { + p := result.Paths["/v1/{parent}/books"].Post.Parameters[i] + if got, name := (paramOut{p.Name, p.In, p.Required}), `result.Paths["/v1/{parent}/books"].Post.Parameters[0]`; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %v want to be %v", tt.args.file, name, got, want) } } @@ -3045,16 +3075,16 @@ func TestTemplateToOpenAPIPath(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, - {"/{name=prefix/*}", "/{name=prefix/*}"}, - {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1/*/prefix2/*}"}, - {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, - {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, - {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, - {"/{name=prefix/*}:customMethod", "/{name=prefix/*}:customMethod"}, - {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1/*/prefix2/*}:customMethod"}, - {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix/*}:customMethod"}, - {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, - {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, + {"/{name=prefix/*}", "/{name}"}, + {"/{name=prefix1/*/prefix2/*}", "/{name}"}, + {"/{user.name=prefix/*}", "/{user.name}"}, + {"/{user.name=prefix1/*/prefix2/*}", "/{user.name}"}, + {"/{parent=prefix/*}/children", "/{parent}/children"}, + {"/{name=prefix/*}:customMethod", "/{name}:customMethod"}, + {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name}:customMethod"}, + {"/{user.name=prefix/*}:customMethod", "/{user.name}:customMethod"}, + {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name}:customMethod"}, + {"/{parent=prefix/*}/children:customMethod", "/{parent}/children:customMethod"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) @@ -3178,6 +3208,38 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { } } +func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) string { + return partsToOpenAPIPath(templateToParts(path, reg, fields, msgs)) +} + +func templateToRegexpMap(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) map[string]string { + return partsToRegexpMap(templateToParts(path, reg, fields, msgs)) +} + +func TestFQMNToRegexpMap(t *testing.T) { + var tests = []struct { + input string + expected map[string]string + }{ + {"/test", map[string]string{}}, + {"/{test}", map[string]string{}}, + {"/{test" + pathParamUniqueSuffixDeliminator + "1=prefix/*}", map[string]string{"test" + pathParamUniqueSuffixDeliminator + "1": "prefix/[^/]+"}}, + {"/{test=prefix/that/has/multiple/parts/to/it/**}", map[string]string{"test": "prefix/that/has/multiple/parts/to/it/.+"}}, + {"/{test1=organizations/*}/{test2=divisions/*}", map[string]string{ + "test1": "organizations/[^/]+", + "test2": "divisions/[^/]+", + }}, + {"/v1/{name=projects/*/topics/*}:delete", map[string]string{"name": "projects/[^/]+/topics/[^/]+"}}, + } + reg := descriptor.NewRegistry() + for _, data := range tests { + actual := templateToRegexpMap(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + if !reflect.DeepEqual(data.expected, actual) { + t.Errorf("Expected partsToRegexpMap(%v) = %v, actual: %v", data.input, data.expected, actual) + } + } +} + func TestFQMNtoOpenAPIName(t *testing.T) { var tests = []struct { input string @@ -3189,6 +3251,7 @@ func TestFQMNtoOpenAPIName(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, + {"/v1/{name=tests/*}/tests", "/v1/{name}/tests"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) @@ -4779,6 +4842,447 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { } } +func TestTemplateWithInvalidDuplicateOperations(t *testing.T) { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{}, + } + meth1 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method1"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + meth2 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method2"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service1"), + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, + } + + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("service1.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth1, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=organizations/*}/roles", + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: meth2, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=users/*}/roles", + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Errorf("failed to reg.Load(): %v", err) + return + } + if stdErr, err := captureStderr(func() error { + swagger, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if opid := swagger.Paths["/v1/{name}/roles"].Get.OperationID; opid != "Service1_Method2" { + t.Errorf("Swagger should use last in wins for the service methods: %s", opid) + } + return err + }); !strings.Contains(stdErr, "Duplicate mapping for path GET /v1/{name}/roles") { + t.Errorf("Error for duplicate mapping was incorrect: %s", stdErr) + } else if err != nil { + t.Error(err) + } +} + +func TestTemplateWithDuplicateHttp1Operations(t *testing.T) { + fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING + field1 := &descriptorpb.FieldDescriptorProto{ + Name: proto.String("name"), + Number: proto.Int32(1), + Type: &fieldType, + } + field2 := &descriptorpb.FieldDescriptorProto{ + Name: proto.String("role"), + Number: proto.Int32(2), + Type: &fieldType, + } + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + field2, + }, + } + meth1 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method1"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + meth2 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method2"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service1"), + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, + } + meth3 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method3"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + meth4 := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Method4"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc2 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service2"), + Method: []*descriptorpb.MethodDescriptorProto{meth3, meth4}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("service1.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1, svc2}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth1, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=organizations/*}/{role=roles/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + { + Target: &descriptor.Field{ + FieldDescriptorProto: field2, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "role", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: meth2, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=users/*}/{role=roles/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + { + Target: &descriptor.Field{ + FieldDescriptorProto: field2, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "role", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + { + ServiceDescriptorProto: svc2, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth3, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=users/*}/roles", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: meth4, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=groups/*}/{role=roles/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + { + Target: &descriptor.Field{ + FieldDescriptorProto: field2, + Message: msg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "role", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + if got, want := len(result.Paths), 4; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + firstOp := result.Paths["/v1/{name}/{role}"].Get + if got, want := firstOp.OperationID, "Service1_Method1"; got != want { + t.Fatalf("First operation id differed, got %s want %s", got, want) + } + if got, want := len(firstOp.Parameters), 3; got != want { + t.Fatalf("First operation params length differed, got %d want %d", got, want) + } + if got, want := firstOp.Parameters[0].Name, "name"; got != want { + t.Fatalf("First operation first param name differed, got %s want %s", got, want) + } + if got, want := firstOp.Parameters[0].Pattern, "organizations/[^/]+"; got != want { + t.Fatalf("First operation first param pattern differed, got %s want %s", got, want) + } + if got, want := firstOp.Parameters[1].Name, "role"; got != want { + t.Fatalf("First operation second param name differed, got %s want %s", got, want) + } + if got, want := firstOp.Parameters[1].Pattern, "roles/[^/]+"; got != want { + t.Fatalf("First operation second param pattern differed, got %s want %s", got, want) + } + if got, want := firstOp.Parameters[2].In, "body"; got != want { + t.Fatalf("First operation third param 'in' differed, got %s want %s", got, want) + } + + secondOp := result.Paths["/v1/{name"+pathParamUniqueSuffixDeliminator+"1}/{role}"].Get + if got, want := secondOp.OperationID, "Service1_Method2"; got != want { + t.Fatalf("Second operation id differed, got %s want %s", got, want) + } + if got, want := len(secondOp.Parameters), 3; got != want { + t.Fatalf("Second operation params length differed, got %d want %d", got, want) + } + if got, want := secondOp.Parameters[0].Name, "name"+pathParamUniqueSuffixDeliminator+"1"; got != want { + t.Fatalf("Second operation first param name differed, got %s want %s", got, want) + } + if got, want := secondOp.Parameters[0].Pattern, "users/[^/]+"; got != want { + t.Fatalf("Second operation first param pattern differed, got %s want %s", got, want) + } + if got, want := secondOp.Parameters[1].Name, "role"; got != want { + t.Fatalf("Second operation second param name differed, got %s want %s", got, want) + } + if got, want := secondOp.Parameters[1].Pattern, "roles/[^/]+"; got != want { + t.Fatalf("Second operation second param pattern differed, got %s want %s", got, want) + } + if got, want := secondOp.Parameters[2].In, "body"; got != want { + t.Fatalf("Second operation third param 'in' differed, got %s want %s", got, want) + } + + thirdOp := result.Paths["/v1/{name}/roles"].Get + if got, want := thirdOp.OperationID, "Service2_Method3"; got != want { + t.Fatalf("Third operation id differed, got %s want %s", got, want) + } + if got, want := len(thirdOp.Parameters), 2; got != want { + t.Fatalf("Third operation params length differed, got %d want %d", got, want) + } + if got, want := thirdOp.Parameters[0].Name, "name"; got != want { + t.Fatalf("Third operation first param name differed, got %s want %s", got, want) + } + if got, want := thirdOp.Parameters[0].Pattern, "users/[^/]+"; got != want { + t.Fatalf("Third operation first param pattern differed, got %s want %s", got, want) + } + if got, want := thirdOp.Parameters[1].In, "body"; got != want { + t.Fatalf("Third operation second param 'in' differed, got %s want %s", got, want) + } + + forthOp := result.Paths["/v1/{name"+pathParamUniqueSuffixDeliminator+"2}/{role}"].Get + if got, want := forthOp.OperationID, "Service2_Method4"; got != want { + t.Fatalf("Fourth operation id differed, got %s want %s", got, want) + } + if got, want := len(forthOp.Parameters), 3; got != want { + t.Fatalf("Fourth operation params length differed, got %d want %d", got, want) + } + if got, want := forthOp.Parameters[0].Name, "name"+pathParamUniqueSuffixDeliminator+"2"; got != want { + t.Fatalf("Fourth operation first param name differed, got %s want %s", got, want) + } + if got, want := forthOp.Parameters[0].Pattern, "groups/[^/]+"; got != want { + t.Fatalf("Fourth operation first param pattern differed, got %s want %s", got, want) + } + if got, want := forthOp.Parameters[1].Name, "role"; got != want { + t.Fatalf("Fourth operation second param name differed, got %s want %s", got, want) + } + if got, want := forthOp.Parameters[1].Pattern, "roles/[^/]+"; got != want { + t.Fatalf("Fourth operation second param pattern differed, got %s want %s", got, want) + } + if got, want := forthOp.Parameters[2].In, "body"; got != want { + t.Fatalf("Fourth operation second param 'in' differed, got %s want %s", got, want) + } +} + func Test_getReservedJsonName(t *testing.T) { type args struct { fieldName string diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 861c4c73338..2769053e615 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -143,6 +143,7 @@ type openapiParameterObject struct { CollectionFormat string `json:"collectionFormat,omitempty"` Default string `json:"default,omitempty"` MinItems *int `json:"minItems,omitempty"` + Pattern string `json:"pattern,omitempty"` // Or you can explicitly refer to another type. If this is defined all // other fields should be empty diff --git a/runtime/mux.go b/runtime/mux.go index f2698776f20..e7c75dc8763 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -6,6 +6,7 @@ import ( "fmt" "net/http" "net/textproto" + "regexp" "strings" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" @@ -24,15 +25,15 @@ const ( // path string before doing any routing. UnescapingModeLegacy UnescapingMode = iota - // EscapingTypeExceptReserved unescapes all path parameters except RFC 6570 + // UnescapingModeAllExceptReserved unescapes all path parameters except RFC 6570 // reserved characters. UnescapingModeAllExceptReserved - // EscapingTypeExceptSlash unescapes URL path parameters except path - // seperators, which will be left as "%2F". + // UnescapingModeAllExceptSlash unescapes URL path parameters except path + // separators, which will be left as "%2F". UnescapingModeAllExceptSlash - // URL path parameters will be fully decoded. + // UnescapingModeAllCharacters unescapes all URL path parameters. UnescapingModeAllCharacters // UnescapingModeDefault is the default escaping type. @@ -41,6 +42,10 @@ const ( UnescapingModeDefault = UnescapingModeLegacy ) +var ( + encodedPathSplitter = regexp.MustCompile("(/|%2F)") +) + // A HandlerFunc handles a specific pair of path pattern and HTTP method. type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) @@ -265,7 +270,16 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { path = r.URL.RawPath } - components := strings.Split(path[1:], "/") + var components []string + // since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on "%2F" + // in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the + // path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default + // behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved + if s.unescapingMode == UnescapingModeAllCharacters { + components = encodedPathSplitter.Split(path[1:], -1) + } else { + components = strings.Split(path[1:], "/") + } if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { r.Method = strings.ToUpper(override) diff --git a/runtime/mux_test.go b/runtime/mux_test.go index a1b75588143..0bdc72c2e23 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "net/http/httptest" + "net/url" "strconv" "testing" @@ -369,6 +370,48 @@ func TestMuxServeHTTP(t *testing.T) { unescapingMode: runtime.UnescapingModeAllExceptReserved, respContent: "GET /foo/{id=*}/bar", }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPush), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + int(utilities.OpLitPush), 2}, + pool: []string{"foo", "id", "bar"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/success%2fwith%2Fspace/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusNotFound, + unescapingMode: runtime.UnescapingModeAllCharacters, + }, + { + patterns: []stubPattern{ + { + method: "GET", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpPush), 0, + int(utilities.OpConcatN), 1, + int(utilities.OpCapture), 1, + int(utilities.OpLitPush), 2}, + pool: []string{"foo", "id", "bar"}, + }, + }, + reqMethod: "GET", + reqPath: "/foo/success%2fwith%2Fspace/bar", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusNotFound, + unescapingMode: runtime.UnescapingModeLegacy, + }, { patterns: []stubPattern{ { @@ -391,6 +434,31 @@ func TestMuxServeHTTP(t *testing.T) { unescapingMode: runtime.UnescapingModeAllExceptReserved, respContent: "GET /foo/{id=**}", }, + { + patterns: []stubPattern{ + { + method: "POST", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpLitPush), 1, + int(utilities.OpLitPush), 2, + int(utilities.OpPush), 0, + int(utilities.OpConcatN), 2, + int(utilities.OpCapture), 3, + }, + pool: []string{"api", "v1", "organizations", "name"}, + verb: "action", + }, + }, + reqMethod: "POST", + reqPath: "/api/v1/" + url.QueryEscape("organizations/foo") + ":action", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + unescapingMode: runtime.UnescapingModeAllCharacters, + respContent: "POST /api/v1/{name=organizations/*}:action", + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { var opts []runtime.ServeMuxOption @@ -408,15 +476,15 @@ func TestMuxServeHTTP(t *testing.T) { t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) } mux.Handle(p.method, pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { - fmt.Fprintf(w, "%s %s", p.method, pat.String()) + _, _ = fmt.Fprintf(w, "%s %s", p.method, pat.String()) }) }(p) } - url := fmt.Sprintf("http://host.example%s", spec.reqPath) - r, err := http.NewRequest(spec.reqMethod, url, bytes.NewReader(nil)) + reqUrl := fmt.Sprintf("https://host.example%s", spec.reqPath) + r, err := http.NewRequest(spec.reqMethod, reqUrl, bytes.NewReader(nil)) if err != nil { - t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", spec.reqMethod, url, err) + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", spec.reqMethod, reqUrl, err) } for name, value := range spec.headers { r.Header.Set(name, value) From cc3812281996663de96010ec11bb807af13be3e7 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 14 Dec 2021 21:42:49 -0500 Subject: [PATCH 1145/1518] Use correct buf login command (#2466) This was moved to buf registry login in the v1.0.0 release candidates --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fca452705e..a8fd2cbfd96 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -150,7 +150,7 @@ jobs: - image: bufbuild/buf:1.0.0-rc8 steps: - checkout - - run: echo "${BUF_API_TOKEN}" | buf login --username grpcgatewaybot --token-stdin + - run: echo "${BUF_API_TOKEN}" | buf registry login --username grpcgatewaybot --token-stdin # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. # It excludes all the files that we don't want to publish, just for the push step. - run: echo -e " - examples\n - internal\n - runtime" >> buf.yaml From 9ee0d1f1c18823adaa5fa058199461a7af16972d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 15 Dec 2021 03:19:12 +0000 Subject: [PATCH 1146/1518] fix(deps): update module google.golang.org/grpc to v1.43.0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 95082fe8acb..aebb8c33eae 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa - google.golang.org/grpc v1.42.0 + google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index 5bec745b1bd..7efce234640 100644 --- a/go.sum +++ b/go.sum @@ -384,8 +384,8 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index 93284892d54..4d267b27e95 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A=", - version = "v1.42.0", + sum = "h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=", + version = "v1.43.0", ) go_repository( From 71a544628daba2f0909584e29f4dcb58ecbd2c52 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 15 Dec 2021 20:24:42 -0500 Subject: [PATCH 1147/1518] Update gorelease base to v2.7.2 (#2467) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a8fd2cbfd96..5c807dfa7ff 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.7.1 + - run: gorelease -base=v2.7.2 push_bsr_plugins: docker: - image: circleci/golang From bbf7dcf184c373cb0f1cdd7ac13279acf757a7e9 Mon Sep 17 00:00:00 2001 From: Witold Baryluk Date: Mon, 20 Dec 2021 18:51:09 +0000 Subject: [PATCH 1148/1518] Fix README typo about manuall generation (#2471) `field_behaviour.proto` file does not exist in the googleapis repo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4175d4716b8..ff798c206b8 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ Alternatively, see the section on remotely managed plugin versions below. ``` google/api/annotations.proto - google/api/field_behaviour.proto + google/api/field_behavior.proto google/api/http.proto google/api/httpbody.proto ``` From 03c3ab4e6f160b4059055e47df9a4388ea8c4148 Mon Sep 17 00:00:00 2001 From: jxlwqq Date: Tue, 21 Dec 2021 22:13:11 +0800 Subject: [PATCH 1149/1518] Use insecure.NewCredentials instead of grpc.WithInsecure (#2470) * Use insecure.NewCredentials instead of grpc.WithInsecure * Fix bazel build failed --- README.md | 3 ++- docs/docs/tutorials/adding_annotations.md | 3 ++- examples/internal/gateway/BUILD.bazel | 1 + examples/internal/gateway/gateway.go | 5 +++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ff798c206b8..f40e29fff57 100644 --- a/README.md +++ b/README.md @@ -341,6 +341,7 @@ Alternatively, see the section on remotely managed plugin versions below. "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update ) @@ -359,7 +360,7 @@ Alternatively, see the section on remotely managed plugin versions below. // Register gRPC server endpoint // Note: Make sure the gRPC server is running properly and accessible mux := runtime.NewServeMux() - opts := []grpc.DialOption{grpc.WithInsecure()} + opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts) if err != nil { return err diff --git a/docs/docs/tutorials/adding_annotations.md b/docs/docs/tutorials/adding_annotations.md index 9c2e6ea0e8c..bf0b13d7a23 100644 --- a/docs/docs/tutorials/adding_annotations.md +++ b/docs/docs/tutorials/adding_annotations.md @@ -125,6 +125,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" helloworldpb "github.com/myuser/myrepo/proto/helloworld" ) @@ -164,7 +165,7 @@ func main() { context.Background(), "0.0.0.0:8080", grpc.WithBlock(), - grpc.WithInsecure(), + grpc.WithTransportCredentials(insecure.NewCredentials()), ) if err != nil { log.Fatalln("Failed to dial server:", err) diff --git a/examples/internal/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel index 989177fc7ad..13dba37441b 100644 --- a/examples/internal/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -18,6 +18,7 @@ go_library( "@go_googleapis//google/rpc:errdetails_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//connectivity", + "@org_golang_google_grpc//credentials/insecure", ], ) diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index b82089d60fe..7dd07bac578 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -3,6 +3,7 @@ package gateway import ( "context" "fmt" + "google.golang.org/grpc/credentials/insecure" "net" "net/http" @@ -48,7 +49,7 @@ func dial(ctx context.Context, network, addr string) (*grpc.ClientConn, error) { // dialTCP creates a client connection via TCP. // "addr" must be a valid TCP address with a port number. func dialTCP(ctx context.Context, addr string) (*grpc.ClientConn, error) { - return grpc.DialContext(ctx, addr, grpc.WithInsecure()) + return grpc.DialContext(ctx, addr, grpc.WithTransportCredentials(insecure.NewCredentials())) } // dialUnix creates a client connection via a unix domain socket. @@ -57,5 +58,5 @@ func dialUnix(ctx context.Context, addr string) (*grpc.ClientConn, error) { d := func(ctx context.Context, addr string) (net.Conn, error) { return (&net.Dialer{}).DialContext(ctx, "unix", addr) } - return grpc.DialContext(ctx, addr, grpc.WithInsecure(), grpc.WithContextDialer(d)) + return grpc.DialContext(ctx, addr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(d)) } From 50e34917eabf6fbcd764887fc5f1e74df45b0de2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Dec 2021 20:57:55 +0000 Subject: [PATCH 1150/1518] fix(deps): update google.golang.org/genproto commit hash to 429b39d --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index aebb8c33eae..ec7517dad64 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa + google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 7efce234640..42cd7617852 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c h1:c5afAQ+F8m49fzDEIKvD7o/D350YjVseBMjtoKL1xsg= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4d267b27e95..720f6dc76a2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0=", - version = "v0.0.0-20211208223120-3a66f561d7aa", + sum = "h1:c5afAQ+F8m49fzDEIKvD7o/D350YjVseBMjtoKL1xsg=", + version = "v0.0.0-20211221195035-429b39de9b1c", ) go_repository( name = "org_golang_google_grpc", From 362e02fc45091e5873ccc9451f60cbee7bcc788b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 22 Dec 2021 00:33:08 +0000 Subject: [PATCH 1151/1518] fix(deps): update google.golang.org/genproto commit hash to d629cc9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ec7517dad64..fe3ed9b1a8e 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c + google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 42cd7617852..ed90cd43997 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c h1:c5afAQ+F8m49fzDEIKvD7o/D350YjVseBMjtoKL1xsg= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5 h1:v7aOwCaINsgis88/5e6DEZ6TlP7vXueAw/Ftqd5rm+w= +google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 720f6dc76a2..0adee0d77e8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:c5afAQ+F8m49fzDEIKvD7o/D350YjVseBMjtoKL1xsg=", - version = "v0.0.0-20211221195035-429b39de9b1c", + sum = "h1:v7aOwCaINsgis88/5e6DEZ6TlP7vXueAw/Ftqd5rm+w=", + version = "v0.0.0-20211221231510-d629cc9a93d5", ) go_repository( name = "org_golang_google_grpc", From a01da0fd8002f8573705cced975d9633583939a9 Mon Sep 17 00:00:00 2001 From: Haiker Sun Date: Wed, 22 Dec 2021 22:22:24 +0800 Subject: [PATCH 1152/1518] fix typos (#2474) fix typos `for` --- runtime/convert.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/convert.go b/runtime/convert.go index e6bc4e6ceec..cfa540787fd 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -265,7 +265,7 @@ func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) { } /* - Support fot google.protobuf.wrappers on top of primitive types + Support for google.protobuf.wrappers on top of primitive types */ // StringValue well-known type support as wrapper around string type From 8e26377f14ce86921163bea85e33d9674da9c3b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 22 Dec 2021 16:38:12 +0000 Subject: [PATCH 1153/1518] fix(deps): update google.golang.org/genproto commit hash to 9823f7b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index fe3ed9b1a8e..6b7894188b7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5 + google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index ed90cd43997..a46adcb4cd5 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5 h1:v7aOwCaINsgis88/5e6DEZ6TlP7vXueAw/Ftqd5rm+w= -google.golang.org/genproto v0.0.0-20211221231510-d629cc9a93d5/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562 h1:sZWkpp+mMCIr/XzilKM5CjCxqe2o7SyJ+kz097OkcNM= +google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0adee0d77e8..4824ead30c6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:v7aOwCaINsgis88/5e6DEZ6TlP7vXueAw/Ftqd5rm+w=", - version = "v0.0.0-20211221231510-d629cc9a93d5", + sum = "h1:sZWkpp+mMCIr/XzilKM5CjCxqe2o7SyJ+kz097OkcNM=", + version = "v0.0.0-20211222154725-9823f7ba7562", ) go_repository( name = "org_golang_google_grpc", From 910891b83e0aa7dd389f6deab9f81ad49a324e36 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 23 Dec 2021 19:30:49 +0000 Subject: [PATCH 1154/1518] fix(deps): update google.golang.org/genproto commit hash to 3ac035c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6b7894188b7..8947a577dea 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562 + google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index a46adcb4cd5..7ac7a6c7a5d 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562 h1:sZWkpp+mMCIr/XzilKM5CjCxqe2o7SyJ+kz097OkcNM= -google.golang.org/genproto v0.0.0-20211222154725-9823f7ba7562/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb h1:ZrsicilzPCS/Xr8qtBZZLpy4P9TYXAfl49ctG1/5tgw= +google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4824ead30c6..4050045559f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:sZWkpp+mMCIr/XzilKM5CjCxqe2o7SyJ+kz097OkcNM=", - version = "v0.0.0-20211222154725-9823f7ba7562", + sum = "h1:ZrsicilzPCS/Xr8qtBZZLpy4P9TYXAfl49ctG1/5tgw=", + version = "v0.0.0-20211223182754-3ac035c7e7cb", ) go_repository( name = "org_golang_google_grpc", From 2ee9ba58097ac79e34f3e63beef9358d4f24d2fd Mon Sep 17 00:00:00 2001 From: Hamza Ali Date: Mon, 27 Dec 2021 03:35:59 +0700 Subject: [PATCH 1155/1518] docs: specify invalid cases for FieldMask (#2477) Specify that FieldMask is treated as a regular field in the scenario where the gateway' HTTP method is not PATCH, or if Body is `"*"`. --- docs/docs/mapping/patch_feature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/mapping/patch_feature.md b/docs/docs/mapping/patch_feature.md index 7655f999e0f..61cb8d24380 100644 --- a/docs/docs/mapping/patch_feature.md +++ b/docs/docs/mapping/patch_feature.md @@ -9,7 +9,7 @@ parent: Mapping The HTTP PATCH method allows a resource to be partially updated. -If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. +If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. FieldMask is treated as a regular field by the gateway if the request method is not PATCH, or if the HttpRule body is `"*"` There are two scenarios: From c52fba18f5ef3b6961c80879bdfdad1b6f5f7334 Mon Sep 17 00:00:00 2001 From: Sajeev Saluja Date: Sat, 1 Jan 2022 08:29:27 -0800 Subject: [PATCH 1156/1518] typo in mux.go (#2479) --- runtime/mux.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/mux.go b/runtime/mux.go index e7c75dc8763..a282169e621 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -254,7 +254,7 @@ func (s *ServeMux) HandlePath(meth string, pathPattern string, h HandlerFunc) er return nil } -// ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path. +// ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.URL.Path. func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx := r.Context() From 28ac4e39d02ee97c022b93154c04e1fc853a6a1b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 5 Jan 2022 22:13:47 +0000 Subject: [PATCH 1157/1518] chore(deps): update dependency com_google_protobuf to v3.19.2 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f6932a0c76f..512067df349 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "87407cd28e7a9c95d9f61a098a53cf031109d451a7763e7dd1253abf8b4df422", - strip_prefix = "protobuf-3.19.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.1.tar.gz"], + sha256 = "4dd35e788944b7686aac898f77df4e9a54da0ca694b8801bd6b2a9ffc1b3085e", + strip_prefix = "protobuf-3.19.2", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.2.tar.gz"], ) http_archive( From 2b08fa6955ec71c1162e23f11e20e802d9de9073 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 6 Jan 2022 20:16:01 +0000 Subject: [PATCH 1158/1518] fix(deps): update google.golang.org/genproto commit hash to 4b6d468 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8947a577dea..6cf74ab41e2 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb + google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 7ac7a6c7a5d..e161dfb9257 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb h1:ZrsicilzPCS/Xr8qtBZZLpy4P9TYXAfl49ctG1/5tgw= -google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f h1:WNKU7UnZ/38XgsuerGDMsLpi7sjUTvAe9obsduTWXjo= +google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 4050045559f..445f5ae9f85 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ZrsicilzPCS/Xr8qtBZZLpy4P9TYXAfl49ctG1/5tgw=", - version = "v0.0.0-20211223182754-3ac035c7e7cb", + sum = "h1:WNKU7UnZ/38XgsuerGDMsLpi7sjUTvAe9obsduTWXjo=", + version = "v0.0.0-20220106181925-4b6d468c965f", ) go_repository( name = "org_golang_google_grpc", From fbc80e66cff42b8b918ab80b9121a8c3d5801e1e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 7 Jan 2022 00:39:39 +0000 Subject: [PATCH 1159/1518] chore(deps): update golang docker tag to v1.17.6 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 02d2d8bd9f6..a67756f3c41 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.5 +FROM golang:1.17.6 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index fd8af0821bc..c738de5a04c 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.5 as builder +FROM golang:1.17.6 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 6a7c8c7675d..579a34c4a4a 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.5 as builder +FROM golang:1.17.6 as builder ARG RELEASE_VERSION From f9167a60f321a6cdd426b5ea917feb7f57de2014 Mon Sep 17 00:00:00 2001 From: hiroyoshii <40140638+hiroyoshii@users.noreply.github.com> Date: Fri, 7 Jan 2022 12:21:51 +0900 Subject: [PATCH 1160/1518] Add omit-enum-default-value option to protoc-gen-openapiv2 (#2480) * add omit-enum-default-value option to protoc-gen-openapiv2 * keep the new line on last line * add omit_enum_default_value option to protoc-gen-openapiv2/defs.bzl --- internal/descriptor/registry.go | 13 ++ protoc-gen-openapiv2/defs.bzl | 10 + .../internal/genopenapi/template.go | 44 +++-- .../internal/genopenapi/template_test.go | 186 ++++++++++++++++++ protoc-gen-openapiv2/main.go | 2 + 5 files changed, 238 insertions(+), 17 deletions(-) diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index ed70292fc37..80e8eb378b3 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -78,6 +78,9 @@ type Registry struct { // enumsAsInts render enum as integer, as opposed to string enumsAsInts bool + // omitEnumDefaultValue omits default value of enum + omitEnumDefaultValue bool + // disableDefaultErrors disables the generation of the default error types. // This is useful for users who have defined custom error handling. disableDefaultErrors bool @@ -558,6 +561,16 @@ func (r *Registry) GetEnumsAsInts() bool { return r.enumsAsInts } +// SetOmitEnumDefaultValue sets omitEnumDefaultValue +func (r *Registry) SetOmitEnumDefaultValue(omit bool) { + r.omitEnumDefaultValue = omit +} + +// GetOmitEnumDefaultValue returns omitEnumDefaultValue +func (r *Registry) GetOmitEnumDefaultValue() bool { + return r.omitEnumDefaultValue +} + // SetDisableDefaultErrors sets disableDefaultErrors func (r *Registry) SetDisableDefaultErrors(use bool) { r.disableDefaultErrors = use diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index c8668f220fe..acc703ae509 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -62,6 +62,7 @@ def _run_proto_gen_openapi( use_go_templates, disable_default_errors, enums_as_ints, + omit_enum_default_value, simple_operation_ids, proto3_optional_nullable, openapi_configuration, @@ -112,6 +113,9 @@ def _run_proto_gen_openapi( if enums_as_ints: args.add("--openapiv2_opt", "enums_as_ints=true") + if omit_enum_default_value: + args.add("--openapiv2_opt", "omit_enum_default_value=true") + if proto3_optional_nullable: args.add("--openapiv2_opt", "proto3_optional_nullable=true") @@ -209,6 +213,7 @@ def _proto_gen_openapi_impl(ctx): use_go_templates = ctx.attr.use_go_templates, disable_default_errors = ctx.attr.disable_default_errors, enums_as_ints = ctx.attr.enums_as_ints, + omit_enum_default_value = ctx.attr.omit_enum_default_value, simple_operation_ids = ctx.attr.simple_operation_ids, proto3_optional_nullable = ctx.attr.proto3_optional_nullable, openapi_configuration = ctx.file.openapi_configuration, @@ -291,6 +296,11 @@ protoc_gen_openapiv2 = rule( mandatory = False, doc = "whether to render enum values as integers, as opposed to string values", ), + "omit_enum_default_value": attr.bool( + default = False, + mandatory = False, + doc = "if set, omit default enum value", + ), "simple_operation_ids": attr.bool( default = False, mandatory = False, diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 54067999309..9ff0b4de6db 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -103,24 +103,32 @@ var wktSchemas = map[string]schemaCore{ }, } -func listEnumNames(enum *descriptor.Enum) (names []string) { +func listEnumNames(reg *descriptor.Registry, enum *descriptor.Enum) (names []string) { for _, value := range enum.GetValue() { + if reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 { + continue + } names = append(names, value.GetName()) } return names } -func listEnumNumbers(enum *descriptor.Enum) (numbers []string) { +func listEnumNumbers(reg *descriptor.Registry, enum *descriptor.Enum) (numbers []string) { for _, value := range enum.GetValue() { + if reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 { + continue + } numbers = append(numbers, strconv.Itoa(int(value.GetNumber()))) } return } -func getEnumDefault(enum *descriptor.Enum) string { - for _, value := range enum.GetValue() { - if value.GetNumber() == 0 { - return value.GetName() +func getEnumDefault(reg *descriptor.Registry, enum *descriptor.Enum) string { + if !reg.GetOmitEnumDefaultValue() { + for _, value := range enum.GetValue() { + if value.GetNumber() == 0 { + return value.GetName() + } } } return "" @@ -270,20 +278,22 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre if items != nil { // array param.Items = &openapiItemsObject{ Type: "string", - Enum: listEnumNames(enum), + Enum: listEnumNames(reg, enum), } if reg.GetEnumsAsInts() { param.Items.Type = "integer" - param.Items.Enum = listEnumNumbers(enum) + param.Items.Enum = listEnumNumbers(reg, enum) } } else { param.Type = "string" - param.Enum = listEnumNames(enum) - param.Default = getEnumDefault(enum) + param.Enum = listEnumNames(reg, enum) + param.Default = getEnumDefault(reg, enum) if reg.GetEnumsAsInts() { param.Type = "integer" - param.Enum = listEnumNumbers(enum) - param.Default = "0" + param.Enum = listEnumNumbers(reg, enum) + if !reg.GetOmitEnumDefaultValue() { + param.Default = "0" + } } } valueComments := enumValueProtoComments(reg, enum) @@ -687,8 +697,8 @@ func renderEnumerationsAsDefinition(enums enumMap, d openapiDefinitionsObject, r enumComments := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index)) // it may be necessary to sort the result of the GetValue function. - enumNames := listEnumNames(enum) - defaultValue := getEnumDefault(enum) + enumNames := listEnumNames(reg, enum) + defaultValue := getEnumDefault(reg, enum) valueComments := enumValueProtoComments(reg, enum) if valueComments != "" { enumComments = strings.TrimLeft(enumComments+"\n\n "+valueComments, "\n") @@ -704,7 +714,7 @@ func renderEnumerationsAsDefinition(enums enumMap, d openapiDefinitionsObject, r enumSchemaObject.Type = "integer" enumSchemaObject.Format = "int32" enumSchemaObject.Default = "0" - enumSchemaObject.Enum = listEnumNumbers(enum) + enumSchemaObject.Enum = listEnumNumbers(reg, enum) } if err := updateOpenAPIDataFromComments(reg, &enumSchemaObject, enum, enumComments, false); err != nil { panic(err) @@ -932,11 +942,11 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } paramType = "string" paramFormat = "" - enumNames = listEnumNames(enum) + enumNames = listEnumNames(reg, enum) if reg.GetEnumsAsInts() { paramType = "integer" paramFormat = "" - enumNames = listEnumNumbers(enum) + enumNames = listEnumNumbers(reg, enum) } schema := schemaOfField(parameter.Target, reg, customRefs) desc = schema.Description diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 8f655e05269..ec60a3ff9c7 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -275,6 +275,192 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { } } +func TestMessageToQueryParametersWithOmitEnumDefaultValue(t *testing.T) { + type test struct { + MsgDescs []*descriptorpb.DescriptorProto + Message string + Params []openapiParameterObject + } + + tests := []test{ + { + MsgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("a"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("b"), + Type: descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Number: proto.Int32(2), + }, + { + Name: proto.String("c"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Number: proto.Int32(3), + }, + }, + }, + }, + Message: "ExampleMessage", + Params: []openapiParameterObject{ + { + Name: "a", + In: "query", + Required: false, + Type: "string", + }, + { + Name: "b", + In: "query", + Required: false, + Type: "number", + Format: "double", + }, + { + Name: "c", + In: "query", + Required: false, + Type: "array", + CollectionFormat: "multi", + }, + }, + }, + { + MsgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.Nested"), + Number: proto.Int32(1), + }, + }, + }, + { + Name: proto.String("Nested"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("a"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("deep"), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.Nested.DeepNested"), + Number: proto.Int32(2), + }, + }, + NestedType: []*descriptorpb.DescriptorProto{{ + Name: proto.String("DeepNested"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("b"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("c"), + Type: descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(), + TypeName: proto.String(".example.Nested.DeepNested.DeepEnum"), + Number: proto.Int32(2), + }, + }, + EnumType: []*descriptorpb.EnumDescriptorProto{ + { + Name: proto.String("DeepEnum"), + Value: []*descriptorpb.EnumValueDescriptorProto{ + {Name: proto.String("FALSE"), Number: proto.Int32(0)}, + {Name: proto.String("TRUE"), Number: proto.Int32(1)}, + }, + }, + }, + }}, + }, + }, + Message: "ExampleMessage", + Params: []openapiParameterObject{ + { + Name: "nested.a", + In: "query", + Required: false, + Type: "string", + }, + { + Name: "nested.deep.b", + In: "query", + Required: false, + Type: "string", + }, + { + Name: "nested.deep.c", + In: "query", + Required: false, + Type: "string", + Enum: []string{"TRUE"}, + }, + }, + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + reg.SetOmitEnumDefaultValue(true) + var msgs []*descriptor.Message + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + params, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil) + if err != nil { + t.Fatalf("failed to convert message to query parameters: %s", err) + } + // avoid checking Items for array types + for i := range params { + params[i].Items = nil + } + if !reflect.DeepEqual(params, test.Params) { + t.Errorf("expected %v, got %v", test.Params, params) + } + } +} + func TestMessageToQueryParameters(t *testing.T) { type test struct { MsgDescs []*descriptorpb.DescriptorProto diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 66811110e59..6fb450aa8e9 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -36,6 +36,7 @@ var ( openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") + omitEnumDefaultValue = flag.Bool("omit_enum_default_value", false, "if set, omit default enum value") ) // Variables set by goreleaser at build time @@ -112,6 +113,7 @@ func main() { reg.SetProto3OptionalNullable(*proto3OptionalNullable) reg.SetGenerateUnboundMethods(*generateUnboundMethods) reg.SetRecursiveDepth(*recursiveDepth) + reg.SetOmitEnumDefaultValue(*omitEnumDefaultValue) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From b0abe4d0913f61c881054ddbaea4008432c6734a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 7 Jan 2022 19:09:45 +0000 Subject: [PATCH 1161/1518] fix(deps): update google.golang.org/genproto commit hash to 42d7afd --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6cf74ab41e2..51e57cab104 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f + google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index e161dfb9257..b685c6f157a 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f h1:WNKU7UnZ/38XgsuerGDMsLpi7sjUTvAe9obsduTWXjo= -google.golang.org/genproto v0.0.0-20220106181925-4b6d468c965f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 445f5ae9f85..cfeab8d3bc2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:WNKU7UnZ/38XgsuerGDMsLpi7sjUTvAe9obsduTWXjo=", - version = "v0.0.0-20220106181925-4b6d468c965f", + sum = "h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA=", + version = "v0.0.0-20220107163113-42d7afdf6368", ) go_repository( name = "org_golang_google_grpc", From ed57696c86e12e5fba7ff23b18cd930083887d38 Mon Sep 17 00:00:00 2001 From: hiroyoshii <40140638+hiroyoshii@users.noreply.github.com> Date: Mon, 10 Jan 2022 00:50:36 +0900 Subject: [PATCH 1162/1518] update plugin option docs of customizing_openapi_output (#2490) --- .../mapping/customizing_openapi_output.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index a0ff6211c98..2f8b83c6407 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -254,4 +254,33 @@ To generate enums as integers instead of strings, use `enums_as_ints`. "default": 0 }, ``` + +### Omitting the default value of enums + +If you define enum types with non default value such as declaring 0 value with UNKNOWN and want to omit the default value from generated swagger file, use `omit_enum_default_value`. +This option also applies if enums_as_ints option is enalbled to generate enums as integer. + +`opt: omit_enum_default_value=true` will result in: + +Input Example: +``` +enum enumValue { + UNKNOWN = 0; + FOO = 1; +} +``` + +Output json: +```json +{ + "name": "enumValue", + "description": " - Example enums", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FOO" + ] +}, +``` {% endraw %} From ce884cc64fb37b7e8a4ee8b9f1c64beb32bb7991 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Jan 2022 17:25:16 +0000 Subject: [PATCH 1163/1518] fix(deps): update google.golang.org/genproto commit hash to 67b88f2 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 51e57cab104..209844f5841 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 + google.golang.org/genproto v0.0.0-20220111164026-67b88f271998 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b685c6f157a..b97a4b6a720 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220111164026-67b88f271998 h1:g/x+MYjJYDEP3OBCYYmwIbt4x6k3gryb+ohyOR7PXfI= +google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cfeab8d3bc2..04ae298e65a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Et6SkiuvnBn+SgrSYXs/BrUpGB4mbdwt4R3vaPIlicA=", - version = "v0.0.0-20220107163113-42d7afdf6368", + sum = "h1:g/x+MYjJYDEP3OBCYYmwIbt4x6k3gryb+ohyOR7PXfI=", + version = "v0.0.0-20220111164026-67b88f271998", ) go_repository( name = "org_golang_google_grpc", From a45306961c99e843a6dee6ed76675148c9e00c48 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Jan 2022 19:43:53 +0000 Subject: [PATCH 1164/1518] chore(deps): update dependency com_google_protobuf to v3.19.3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 512067df349..db643841d71 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "4dd35e788944b7686aac898f77df4e9a54da0ca694b8801bd6b2a9ffc1b3085e", - strip_prefix = "protobuf-3.19.2", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.2.tar.gz"], + sha256 = "390191a0d7884b3e52bb812c440ad1497b9d484241f37bb8e2ccc8c2b72d6c36", + strip_prefix = "protobuf-3.19.3", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.3.tar.gz"], ) http_archive( From dcca50ab0a6aac7cbddad905ee3b68a9ba37c841 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 12 Jan 2022 23:31:25 +0000 Subject: [PATCH 1165/1518] fix(deps): update google.golang.org/genproto commit hash to a9c7c0a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 209844f5841..5cf9949dcae 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220111164026-67b88f271998 + google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b97a4b6a720..75cf64dd8bd 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220111164026-67b88f271998 h1:g/x+MYjJYDEP3OBCYYmwIbt4x6k3gryb+ohyOR7PXfI= -google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg= +google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 04ae298e65a..bc03201d923 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:g/x+MYjJYDEP3OBCYYmwIbt4x6k3gryb+ohyOR7PXfI=", - version = "v0.0.0-20220111164026-67b88f271998", + sum = "h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg=", + version = "v0.0.0-20220112215332-a9c7c0acf9f2", ) go_repository( name = "org_golang_google_grpc", From 4fdd9cef3c63030204f35523cfffc49ba8d11a25 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 13 Jan 2022 14:28:36 +0000 Subject: [PATCH 1166/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v4.2.5 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index db643841d71..4368cba99af 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,9 +82,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "44a6e5acc007e197d45ac3326e7f993f0160af9a58e8777ca7701e00501c0857", - strip_prefix = "buildtools-4.2.4", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.4.tar.gz"], + sha256 = "d368c47bbfc055010f118efb2962987475418737e901f7782d2a966d1dc80296", + strip_prefix = "buildtools-4.2.5", + urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.5.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From dabfa9b982168ea6cb7b26714967b774bae16449 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 14 Jan 2022 17:45:08 +0000 Subject: [PATCH 1167/1518] fix(deps): update google.golang.org/genproto commit hash to 44263ff --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5cf9949dcae..67d677a31fe 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 + google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 75cf64dd8bd..751751af9f8 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2 h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg= -google.golang.org/genproto v0.0.0-20220112215332-a9c7c0acf9f2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1 h1:urkRJha5HC5u/IDXqy212/tSzWXRbU8eWMTj6yXP6u8= +google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index bc03201d923..142ab6cad50 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:z+R4M/SuyaRsj1zu3WC+nIQyfSrSIpuDcY01/R3uCtg=", - version = "v0.0.0-20220112215332-a9c7c0acf9f2", + sum = "h1:urkRJha5HC5u/IDXqy212/tSzWXRbU8eWMTj6yXP6u8=", + version = "v0.0.0-20220114172242-44263ffb69e1", ) go_repository( name = "org_golang_google_grpc", From 32c92f1aa433285ab6616c6ba3f6cd6dc1ca6f3d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 15 Jan 2022 00:43:04 +0000 Subject: [PATCH 1168/1518] fix(deps): update google.golang.org/genproto commit hash to d2e6a12 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 67d677a31fe..7b6562813bb 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1 + google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 751751af9f8..6735bec34bc 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1 h1:urkRJha5HC5u/IDXqy212/tSzWXRbU8eWMTj6yXP6u8= -google.golang.org/genproto v0.0.0-20220114172242-44263ffb69e1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0 h1:aCsSLXylHWFno0r4S3joLpiaWayvqd2Mn4iSvx4WZZc= +google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 142ab6cad50..7c955ee73c5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:urkRJha5HC5u/IDXqy212/tSzWXRbU8eWMTj6yXP6u8=", - version = "v0.0.0-20220114172242-44263ffb69e1", + sum = "h1:aCsSLXylHWFno0r4S3joLpiaWayvqd2Mn4iSvx4WZZc=", + version = "v0.0.0-20220114231437-d2e6a121cae0", ) go_repository( name = "org_golang_google_grpc", From 02cb644087e916679297c8f72b7571fbe0c6b1cb Mon Sep 17 00:00:00 2001 From: mkusaka Date: Tue, 18 Jan 2022 12:38:20 +0900 Subject: [PATCH 1169/1518] embedding UnimplementedGreeterServer to creating_main.go.md server struct (#2502) --- docs/docs/tutorials/creating_main.go.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/docs/tutorials/creating_main.go.md b/docs/docs/tutorials/creating_main.go.md index 880277bff42..de1f0ae7aca 100644 --- a/docs/docs/tutorials/creating_main.go.md +++ b/docs/docs/tutorials/creating_main.go.md @@ -22,7 +22,9 @@ import ( helloworldpb "github.com/myuser/myrepo/proto/helloworld" ) -type server struct{} +type server struct{ + helloworldpb.UnimplementedGreeterServer +} func NewServer() *server { return &server{} From b8922460223eeb9a0ee21afa1a8120978476a093 Mon Sep 17 00:00:00 2001 From: Ethan Anderson Date: Mon, 17 Jan 2022 21:38:42 -0600 Subject: [PATCH 1170/1518] Fixes additional paths generated when many methods have the same resource path (#2496) * Fixes additional paths generated when many methods have the same http paths. Fixes #2489 * udpate the pathItemObject from the new path when we have a duplicate path * add comment for new change Co-authored-by: Ethan Anderson --- .../internal/genopenapi/template.go | 2 + .../internal/genopenapi/template_test.go | 308 ++++++++++++++++++ 2 files changed, 310 insertions(+) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 9ff0b4de6db..48b28d95f8b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1113,6 +1113,8 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re existingOperationObject = nil } } + // update the pathItemObject we are adding to with the new path + pathItemObject = paths[newPath] firstPathParameter.Name = newPathElement path = newPath parameters[firstParamIndex] = *firstPathParameter diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index ec60a3ff9c7..00beafd4f54 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -5130,6 +5130,314 @@ func TestTemplateWithInvalidDuplicateOperations(t *testing.T) { t.Error(err) } } +func TestSingleServiceTemplateWithDuplicateHttp1Operations(t *testing.T) { + fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING + field1 := &descriptorpb.FieldDescriptorProto{ + Name: proto.String("name"), + Number: proto.Int32(1), + Type: &fieldType, + } + + getFooMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("GetFooRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + getFooMsg := &descriptor.Message{ + DescriptorProto: getFooMsgDesc, + } + deleteFooMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("DeleteFooRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + deleteFooMsg := &descriptor.Message{ + DescriptorProto: deleteFooMsgDesc, + } + getFoo := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("GetFoo"), + InputType: proto.String("GetFooRequest"), + OutputType: proto.String("EmptyMessage"), + } + deleteFoo := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("DeleteFoo"), + InputType: proto.String("DeleteFooRequest"), + OutputType: proto.String("EmptyMessage"), + } + + getBarMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("GetBarRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + getBarMsg := &descriptor.Message{ + DescriptorProto: getBarMsgDesc, + } + deleteBarMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("DeleteBarRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + deleteBarMsg := &descriptor.Message{ + DescriptorProto: deleteBarMsgDesc, + } + getBar := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("GetBar"), + InputType: proto.String("GetBarRequest"), + OutputType: proto.String("EmptyMessage"), + } + deleteBar := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("DeleteBar"), + InputType: proto.String("DeleteBarRequest"), + OutputType: proto.String("EmptyMessage"), + } + + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service1"), + Method: []*descriptorpb.MethodDescriptorProto{getFoo, deleteFoo, getBar, deleteBar}, + } + + emptyMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("EmptyMessage"), + } + emptyMsg := &descriptor.Message{ + DescriptorProto: emptyMsgDesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("service1.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{getBarMsgDesc, deleteBarMsgDesc, getFooMsgDesc, deleteFooMsgDesc, emptyMsgDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{getFooMsg, deleteFooMsg, getBarMsg, deleteBarMsg, emptyMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: getFoo, + RequestType: getFooMsg, + ResponseType: getFooMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=foos/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: getFooMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: deleteFoo, + RequestType: deleteFooMsg, + ResponseType: emptyMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "DELETE", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=foos/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: deleteFooMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: getBar, + RequestType: getBarMsg, + ResponseType: getBarMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=bars/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: getBarMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: deleteBar, + RequestType: deleteBarMsg, + ResponseType: emptyMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "DELETE", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=bars/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: deleteBarMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + if got, want := len(result.Paths), 2; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + firstOpGet := result.Paths["/v1/{name}"].Get + if got, want := firstOpGet.OperationID, "Service1_GetFoo"; got != want { + t.Fatalf("First operation GET id differed, got %s want %s", got, want) + } + if got, want := len(firstOpGet.Parameters), 2; got != want { + t.Fatalf("First operation GET params length differed, got %d want %d", got, want) + } + if got, want := firstOpGet.Parameters[0].Name, "name"; got != want { + t.Fatalf("First operation GET first param name differed, got %s want %s", got, want) + } + if got, want := firstOpGet.Parameters[0].Pattern, "foos/[^/]+"; got != want { + t.Fatalf("First operation GET first param pattern differed, got %s want %s", got, want) + } + if got, want := firstOpGet.Parameters[1].In, "body"; got != want { + t.Fatalf("First operation GET second param 'in' differed, got %s want %s", got, want) + } + + firstOpDelete := result.Paths["/v1/{name}"].Delete + if got, want := firstOpDelete.OperationID, "Service1_DeleteFoo"; got != want { + t.Fatalf("First operation id DELETE differed, got %s want %s", got, want) + } + if got, want := len(firstOpDelete.Parameters), 2; got != want { + t.Fatalf("First operation DELETE params length differed, got %d want %d", got, want) + } + if got, want := firstOpDelete.Parameters[0].Name, "name"; got != want { + t.Fatalf("First operation DELETE first param name differed, got %s want %s", got, want) + } + if got, want := firstOpDelete.Parameters[0].Pattern, "foos/[^/]+"; got != want { + t.Fatalf("First operation DELETE first param pattern differed, got %s want %s", got, want) + } + if got, want := firstOpDelete.Parameters[1].In, "body"; got != want { + t.Fatalf("First operation DELETE second param 'in' differed, got %s want %s", got, want) + } + + secondOpGet := result.Paths["/v1/{name"+pathParamUniqueSuffixDeliminator+"1}"].Get + if got, want := secondOpGet.OperationID, "Service1_GetBar"; got != want { + t.Fatalf("Second operation id GET differed, got %s want %s", got, want) + } + if got, want := len(secondOpGet.Parameters), 2; got != want { + t.Fatalf("Second operation GET params length differed, got %d want %d", got, want) + } + if got, want := secondOpGet.Parameters[0].Name, "name"+pathParamUniqueSuffixDeliminator+"1"; got != want { + t.Fatalf("Second operation GET first param name differed, got %s want %s", got, want) + } + if got, want := secondOpGet.Parameters[0].Pattern, "bars/[^/]+"; got != want { + t.Fatalf("Second operation GET first param pattern differed, got %s want %s", got, want) + } + if got, want := secondOpGet.Parameters[1].In, "body"; got != want { + t.Fatalf("Second operation GET second param 'in' differed, got %s want %s", got, want) + } + + secondOpDelete := result.Paths["/v1/{name"+pathParamUniqueSuffixDeliminator+"1}"].Delete + if got, want := secondOpDelete.OperationID, "Service1_DeleteBar"; got != want { + t.Fatalf("Second operation id differed, got %s want %s", got, want) + } + if got, want := len(secondOpDelete.Parameters), 2; got != want { + t.Fatalf("Second operation params length differed, got %d want %d", got, want) + } + if got, want := secondOpDelete.Parameters[0].Name, "name"+pathParamUniqueSuffixDeliminator+"1"; got != want { + t.Fatalf("Second operation first param name differed, got %s want %s", got, want) + } + if got, want := secondOpDelete.Parameters[0].Pattern, "bars/[^/]+"; got != want { + t.Fatalf("Second operation first param pattern differed, got %s want %s", got, want) + } + if got, want := secondOpDelete.Parameters[1].In, "body"; got != want { + t.Fatalf("Second operation third param 'in' differed, got %s want %s", got, want) + } +} func TestTemplateWithDuplicateHttp1Operations(t *testing.T) { fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING From 1432a615058a64ea1de6f57e63f3391080bfe2bd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 18 Jan 2022 16:23:02 +0000 Subject: [PATCH 1171/1518] fix(deps): update google.golang.org/genproto commit hash to 00ab72f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7b6562813bb..67f8af6863d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.6 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0 + google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 google.golang.org/grpc v1.43.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 6735bec34bc..8f77dd20f02 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0 h1:aCsSLXylHWFno0r4S3joLpiaWayvqd2Mn4iSvx4WZZc= -google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 h1:zzNejm+EgrbLfDZ6lu9Uud2IVvHySPl8vQzf04laR5Q= +google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7c955ee73c5..41ea9801788 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:aCsSLXylHWFno0r4S3joLpiaWayvqd2Mn4iSvx4WZZc=", - version = "v0.0.0-20220114231437-d2e6a121cae0", + sum = "h1:zzNejm+EgrbLfDZ6lu9Uud2IVvHySPl8vQzf04laR5Q=", + version = "v0.0.0-20220118154757-00ab72f36ad5", ) go_repository( name = "org_golang_google_grpc", From fa67768a440ff01c662ed62e92a157ae2621d158 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 19 Jan 2022 21:08:18 +0000 Subject: [PATCH 1172/1518] fix(deps): update module github.com/google/go-cmp to v0.5.7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 67f8af6863d..ff6f60e8339 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v1.0.0 github.com/golang/glog v1.0.0 github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.6 + github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 diff --git a/go.sum b/go.sum index 8f77dd20f02..3741f7b819d 100644 --- a/go.sum +++ b/go.sum @@ -104,8 +104,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/repositories.bzl b/repositories.bzl index 41ea9801788..65b056273f2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -317,8 +317,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=", - version = "v0.5.6", + sum = "h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=", + version = "v0.5.7", ) go_repository( From 7094a052b3287b9e99f52d95230789ab34d2d7c4 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 19 Jan 2022 21:43:43 -0500 Subject: [PATCH 1173/1518] Update gorelease base (#2507) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5c807dfa7ff..6c1c282dd40 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.7.2 + - run: gorelease -base=v2.7.3 push_bsr_plugins: docker: - image: circleci/golang From 633327a707a44642d7b01cd4b75e7059bbceb16b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 24 Jan 2022 23:46:56 +0000 Subject: [PATCH 1174/1518] chore(deps): update dependency io_bazel_rules_go to v0.30.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 4368cba99af..801a509889a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -41,10 +41,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "2b1641428dff9018f9e85c0384f03ec6c10660d935b750e3fa1492a281a53b0f", + sha256 = "d6b2513456fe2229811da7eb67a444be7785f5323c6708b38d851d2b51e54d83", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip", ], ) From 9dbd20f1128b93742e6b8004a227ee8dbb766bf6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 25 Jan 2022 17:53:48 +0000 Subject: [PATCH 1175/1518] chore(deps): update rules_proto commit hash to 244e0b6 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 801a509889a..b1e7cca1a80 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "20b240eba17a36be4b0b22635aca63053913d5c1ee36e16be36499d167a2f533", - strip_prefix = "rules_proto-11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8", + sha256 = "56309d96254234b216195ddb6fd41ee3e5f38acfc3184814c1878581d5cc1bef", + strip_prefix = "rules_proto-244e0b64fdc6a89df8b1750eada7b909b3cbc459", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/11bf7c25e666dd7ddacbcd4d4c4a9de7a25175f8.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/244e0b64fdc6a89df8b1750eada7b909b3cbc459.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/244e0b64fdc6a89df8b1750eada7b909b3cbc459.tar.gz", ], ) From f9c619b6319e28ef1d071789767799433c417f66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Jan 2022 22:58:38 -0500 Subject: [PATCH 1176/1518] fix(deps): update module google.golang.org/grpc to v1.44.0 (master) (#2516) * fix(deps): update module google.golang.org/grpc to v1.44.0 * Update repositories.bzl Co-authored-by: Renovate Bot Co-authored-by: Johan Brandhorst-Satzkorn --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ff6f60e8339..b1d155947db 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 - google.golang.org/grpc v1.43.0 + google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index 3741f7b819d..fc2fbecc8b5 100644 --- a/go.sum +++ b/go.sum @@ -384,8 +384,8 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM= -google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index 65b056273f2..73b1c65bbf3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=", - version = "v1.43.0", + sum = "h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=", + version = "v1.44.0", ) go_repository( From 95e6765aed9e7b486e8ca0e249d18aada79e72e4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 27 Jan 2022 11:34:19 +0000 Subject: [PATCH 1177/1518] chore(deps): update rules_proto commit hash to e507ccd --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index b1e7cca1a80..90e9658bf91 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "56309d96254234b216195ddb6fd41ee3e5f38acfc3184814c1878581d5cc1bef", - strip_prefix = "rules_proto-244e0b64fdc6a89df8b1750eada7b909b3cbc459", + sha256 = "b9e1268c5bce4bb01ef31730300b8a4f562dc1211088f125c39af716f6f65f60", + strip_prefix = "rules_proto-e507ccded37c389186afaeb2b836ec576dc875dc", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/244e0b64fdc6a89df8b1750eada7b909b3cbc459.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/244e0b64fdc6a89df8b1750eada7b909b3cbc459.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/e507ccded37c389186afaeb2b836ec576dc875dc.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/e507ccded37c389186afaeb2b836ec576dc875dc.tar.gz", ], ) From 09a279d441d5819789b08c0ae17544045601ca67 Mon Sep 17 00:00:00 2001 From: Kiswanto D Date: Fri, 28 Jan 2022 11:24:32 +0700 Subject: [PATCH 1178/1518] Include Package in Service Tags when Option is Enabled (#2519) --- protoc-gen-openapiv2/internal/genopenapi/template.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 48b28d95f8b..c503be78eb7 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -870,11 +870,16 @@ func partsToRegexpMap(parts []string) map[string]string { return regExps } -func renderServiceTags(services []*descriptor.Service) []openapiTagObject { +func renderServiceTags(services []*descriptor.Service, reg *descriptor.Registry) []openapiTagObject { var tags []openapiTagObject for _, svc := range services { + tagName := svc.GetName() + if pkg := svc.File.GetPackage(); pkg != "" && reg.IsIncludePackageInTags() { + tagName = pkg + "." + tagName + } + tag := openapiTagObject{ - Name: *svc.Name, + Name: tagName, } if proto.HasExtension(svc.Options, openapi_options.E_Openapiv2Tag) { ext := proto.GetExtension(svc.Options, openapi_options.E_Openapiv2Tag) @@ -1394,7 +1399,7 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs, p.Messages); err != nil { panic(err) } - s.Tags = append(s.Tags, renderServiceTags(p.Services)...) + s.Tags = append(s.Tags, renderServiceTags(p.Services, p.reg)...) messages := messageMap{} streamingMessages := messageMap{} From 2ec242acd061125953fcf7034bcfda3a3b4749d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 28 Jan 2022 09:26:04 -0500 Subject: [PATCH 1179/1518] fix(deps): update google.golang.org/genproto commit hash to 9970aeb (master) (#2517) * fix(deps): update google.golang.org/genproto commit hash to 9970aeb * Fix Co-authored-by: Renovate Bot Co-authored-by: Johan Brandhorst-Satzkorn --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b1d155947db..09c17c54a37 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 + google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index fc2fbecc8b5..c22d18711b1 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5 h1:zzNejm+EgrbLfDZ6lu9Uud2IVvHySPl8vQzf04laR5Q= -google.golang.org/genproto v0.0.0-20220118154757-00ab72f36ad5/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 h1:YxHp5zqIcAShDEvRr5/0rVESVS+njYF68PSdazrNLJo= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 73b1c65bbf3..214b74ecfcd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:zzNejm+EgrbLfDZ6lu9Uud2IVvHySPl8vQzf04laR5Q=", - version = "v0.0.0-20220118154757-00ab72f36ad5", + sum = "h1:YxHp5zqIcAShDEvRr5/0rVESVS+njYF68PSdazrNLJo=", + version = "v0.0.0-20220126215142-9970aeb2e350", ) go_repository( name = "org_golang_google_grpc", From 22a95e12d5f30a61979d8b1c12d4d319232b2ac9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 28 Jan 2022 17:54:11 +0000 Subject: [PATCH 1180/1518] chore(deps): update dependency com_google_protobuf to v3.19.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 90e9658bf91..d62b820b6cb 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -5,9 +5,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "390191a0d7884b3e52bb812c440ad1497b9d484241f37bb8e2ccc8c2b72d6c36", - strip_prefix = "protobuf-3.19.3", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.3.tar.gz"], + sha256 = "3bd7828aa5af4b13b99c191e8b1e884ebfa9ad371b0ce264605d347f135d2568", + strip_prefix = "protobuf-3.19.4", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.4.tar.gz"], ) http_archive( From dcde918dde57d87f87f0ec43fc915ae32b2f19d3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Feb 2022 19:12:38 +0000 Subject: [PATCH 1181/1518] fix(deps): update google.golang.org/genproto commit hash to 50beb8a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 09c17c54a37..6d4853ebddd 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 + google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index c22d18711b1..c5ff03b3f75 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350 h1:YxHp5zqIcAShDEvRr5/0rVESVS+njYF68PSdazrNLJo= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44 h1:0UVUC7VWA/mIU+5a4hVWH6xa234gLcRX8ZcrFKmWWKA= +google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 214b74ecfcd..ccacc7e3793 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:YxHp5zqIcAShDEvRr5/0rVESVS+njYF68PSdazrNLJo=", - version = "v0.0.0-20220126215142-9970aeb2e350", + sum = "h1:0UVUC7VWA/mIU+5a4hVWH6xa234gLcRX8ZcrFKmWWKA=", + version = "v0.0.0-20220201184016-50beb8ab5c44", ) go_repository( name = "org_golang_google_grpc", From fabf49413ae18bd2f19033ea89d70829732d77c3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Feb 2022 01:47:26 +0000 Subject: [PATCH 1182/1518] fix(deps): update google.golang.org/genproto commit hash to 2a053f0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6d4853ebddd..8e921ffff7a 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44 + google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index c5ff03b3f75..cf9ac47ab8c 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44 h1:0UVUC7VWA/mIU+5a4hVWH6xa234gLcRX8ZcrFKmWWKA= -google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d h1:My3SknEgMxMbQeOp4Onz8T696iNcOYHJC/E7Dx+RDjc= +google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ccacc7e3793..d766d70a4f9 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0UVUC7VWA/mIU+5a4hVWH6xa234gLcRX8ZcrFKmWWKA=", - version = "v0.0.0-20220201184016-50beb8ab5c44", + sum = "h1:My3SknEgMxMbQeOp4Onz8T696iNcOYHJC/E7Dx+RDjc=", + version = "v0.0.0-20220202230416-2a053f022f0d", ) go_repository( name = "org_golang_google_grpc", From 7ee2f261a97a00c255eb5ce3ed3ba70924788649 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Feb 2022 19:00:42 +0000 Subject: [PATCH 1183/1518] fix(deps): update google.golang.org/genproto commit hash to f4ae394 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8e921ffff7a..a7aabb42a7d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d + google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index cf9ac47ab8c..295640f8b94 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d h1:My3SknEgMxMbQeOp4Onz8T696iNcOYHJC/E7Dx+RDjc= -google.golang.org/genproto v0.0.0-20220202230416-2a053f022f0d/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f h1:w9Sx4FBkwsN0jMZz8E42tMdmhZ5b2Z/vFx2LKAxxI9o= +google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d766d70a4f9..49b06527576 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:My3SknEgMxMbQeOp4Onz8T696iNcOYHJC/E7Dx+RDjc=", - version = "v0.0.0-20220202230416-2a053f022f0d", + sum = "h1:w9Sx4FBkwsN0jMZz8E42tMdmhZ5b2Z/vFx2LKAxxI9o=", + version = "v0.0.0-20220203182621-f4ae394cde3f", ) go_repository( name = "org_golang_google_grpc", From 1f832107e152507c22fce6e721a971aad5dcbf12 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Feb 2022 01:43:40 +0000 Subject: [PATCH 1184/1518] fix(deps): update google.golang.org/genproto commit hash to d6cc3cc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a7aabb42a7d..70bbfbb7fb8 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f + google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 295640f8b94..664bfc47444 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f h1:w9Sx4FBkwsN0jMZz8E42tMdmhZ5b2Z/vFx2LKAxxI9o= -google.golang.org/genproto v0.0.0-20220203182621-f4ae394cde3f/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k= +google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 49b06527576..bd72b419912 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:w9Sx4FBkwsN0jMZz8E42tMdmhZ5b2Z/vFx2LKAxxI9o=", - version = "v0.0.0-20220203182621-f4ae394cde3f", + sum = "h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k=", + version = "v0.0.0-20220204002441-d6cc3cc0770e", ) go_repository( name = "org_golang_google_grpc", From c8e5f3ca8b0c5719228e1c9f27fe148dba3c91f9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Feb 2022 20:39:33 +0000 Subject: [PATCH 1185/1518] fix(deps): update google.golang.org/genproto commit hash to 7721543 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 70bbfbb7fb8..0a3579ce128 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e + google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 664bfc47444..476af6112bd 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k= -google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 h1:i67FGOy2/zGfhE3YgHdrOrcFbOBhqdcRoBrsDqSQrOI= +google.golang.org/genproto v0.0.0-20220207185906-7721543eae58/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index bd72b419912..174f123027e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k=", - version = "v0.0.0-20220204002441-d6cc3cc0770e", + sum = "h1:i67FGOy2/zGfhE3YgHdrOrcFbOBhqdcRoBrsDqSQrOI=", + version = "v0.0.0-20220207185906-7721543eae58", ) go_repository( name = "org_golang_google_grpc", From bfda18d44d7458645d5753e9faf16dc9ccd1db41 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 9 Feb 2022 02:03:07 +0000 Subject: [PATCH 1186/1518] fix(deps): update google.golang.org/genproto commit hash to 65c12eb --- go.mod | 2 +- go.sum | 10 ++-------- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 0a3579ce128..b56f78bd639 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 + google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 476af6112bd..e110bf97f53 100644 --- a/go.sum +++ b/go.sum @@ -33,11 +33,9 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -46,7 +44,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -57,7 +54,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -137,7 +133,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -367,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220207185906-7721543eae58 h1:i67FGOy2/zGfhE3YgHdrOrcFbOBhqdcRoBrsDqSQrOI= -google.golang.org/genproto v0.0.0-20220207185906-7721543eae58/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 h1:pwzFiZfBTH/GjBWz1BcDwMBaHBo8mZvpLa7eBKJpFAk= +google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -383,7 +378,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 174f123027e..f3e5e6991bf 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:i67FGOy2/zGfhE3YgHdrOrcFbOBhqdcRoBrsDqSQrOI=", - version = "v0.0.0-20220207185906-7721543eae58", + sum = "h1:pwzFiZfBTH/GjBWz1BcDwMBaHBo8mZvpLa7eBKJpFAk=", + version = "v0.0.0-20220208230804-65c12eb4c068", ) go_repository( name = "org_golang_google_grpc", From b1011ad7d04613884b42d746084bcc2fa8d86b86 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 10 Feb 2022 18:51:30 +0000 Subject: [PATCH 1187/1518] fix(deps): update google.golang.org/genproto commit hash to 6fee9ac --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b56f78bd639..96f10896faf 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 + google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index e110bf97f53..1b580b43dce 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068 h1:pwzFiZfBTH/GjBWz1BcDwMBaHBo8mZvpLa7eBKJpFAk= -google.golang.org/genproto v0.0.0-20220208230804-65c12eb4c068/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336 h1:RK2ysGpQApbI6U7xn+ROT2rrm08lE/t8AcGqG8XI1CY= +google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f3e5e6991bf..3f5b5169d0c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:pwzFiZfBTH/GjBWz1BcDwMBaHBo8mZvpLa7eBKJpFAk=", - version = "v0.0.0-20220208230804-65c12eb4c068", + sum = "h1:RK2ysGpQApbI6U7xn+ROT2rrm08lE/t8AcGqG8XI1CY=", + version = "v0.0.0-20220210181026-6fee9acbd336", ) go_repository( name = "org_golang_google_grpc", From a6c8d792d9a135888472bbc72f73ff9a3e06187e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 18:37:27 -0500 Subject: [PATCH 1188/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v5 (#2533) Co-authored-by: Renovate Bot --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index d62b820b6cb..69b0531e791 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,9 +82,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "d368c47bbfc055010f118efb2962987475418737e901f7782d2a966d1dc80296", - strip_prefix = "buildtools-4.2.5", - urls = ["https://github.com/bazelbuild/buildtools/archive/4.2.5.tar.gz"], + sha256 = "09a94213ea0d4a844e991374511fb0d44650e9c321799ec5d5dd28b250d82ca3", + strip_prefix = "buildtools-5.0.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/5.0.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From c37d27530bd6a18025859d68910c8abe34e67dea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Feb 2022 21:22:27 -0500 Subject: [PATCH 1189/1518] chore(deps): update golang docker tag to v1.17.7 (#2536) Co-authored-by: Renovate Bot --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index a67756f3c41..c678610d995 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.6 +FROM golang:1.17.7 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index c738de5a04c..755162ee261 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.6 as builder +FROM golang:1.17.7 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 579a34c4a4a..3a494163d82 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.6 as builder +FROM golang:1.17.7 as builder ARG RELEASE_VERSION From a32d3b33d778e0077f94495818b0ef4a73736fb7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Feb 2022 12:47:04 +0000 Subject: [PATCH 1190/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v5.0.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 69b0531e791..8024f8a43b2 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,9 +82,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "09a94213ea0d4a844e991374511fb0d44650e9c321799ec5d5dd28b250d82ca3", - strip_prefix = "buildtools-5.0.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/5.0.0.tar.gz"], + sha256 = "7f43df3cca7bb4ea443b4159edd7a204c8d771890a69a50a190dc9543760ca21", + strip_prefix = "buildtools-5.0.1", + urls = ["https://github.com/bazelbuild/buildtools/archive/5.0.1.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 9f12147d7c0a62b32bff4d7b39c3fc0059942450 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Feb 2022 18:35:48 +0000 Subject: [PATCH 1191/1518] fix(deps): update google.golang.org/genproto commit hash to 1739428 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 96f10896faf..6e49d429f25 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336 + google.golang.org/genproto v0.0.0-20220211171837-173942840c17 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 1b580b43dce..59f2d0e4a78 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336 h1:RK2ysGpQApbI6U7xn+ROT2rrm08lE/t8AcGqG8XI1CY= -google.golang.org/genproto v0.0.0-20220210181026-6fee9acbd336/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220211171837-173942840c17 h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg= +google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3f5b5169d0c..62fc8d2217b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:RK2ysGpQApbI6U7xn+ROT2rrm08lE/t8AcGqG8XI1CY=", - version = "v0.0.0-20220210181026-6fee9acbd336", + sum = "h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg=", + version = "v0.0.0-20220211171837-173942840c17", ) go_repository( name = "org_golang_google_grpc", From 842e9a7bf559c3177625cd43dbf9b46a81864590 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Feb 2022 20:47:14 +0000 Subject: [PATCH 1192/1518] chore(deps): update dependency bazel_skylib to v1.2.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8024f8a43b2..0df527e6a8c 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -12,10 +12,10 @@ http_archive( http_archive( name = "bazel_skylib", - sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d", + sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz", ], ) From 54fbc1ef7efbea9762102c4de97bcfe2ac96e5e4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 15 Feb 2022 20:47:13 +0000 Subject: [PATCH 1193/1518] fix(deps): update google.golang.org/genproto commit hash to e57b466 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6e49d429f25..a08fff4c3ed 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220211171837-173942840c17 + google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 59f2d0e4a78..b92f43df3a3 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220211171837-173942840c17 h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg= -google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef h1:LgGaJzny+/at3jTXZUNh/l8VBWyAiskCHrwq6iEYE7I= +google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 62fc8d2217b..22ddee90929 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg=", - version = "v0.0.0-20220211171837-173942840c17", + sum = "h1:LgGaJzny+/at3jTXZUNh/l8VBWyAiskCHrwq6iEYE7I=", + version = "v0.0.0-20220215190005-e57b466719ef", ) go_repository( name = "org_golang_google_grpc", From 3f7c1986b617be2d4aae692abc74cf61b8ec8fe8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 16 Feb 2022 17:04:22 +0000 Subject: [PATCH 1194/1518] fix(deps): update google.golang.org/genproto commit hash to 4663080 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a08fff4c3ed..cb87fe78161 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef + google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b92f43df3a3..b73ddf2d50c 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef h1:LgGaJzny+/at3jTXZUNh/l8VBWyAiskCHrwq6iEYE7I= -google.golang.org/genproto v0.0.0-20220215190005-e57b466719ef/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58= +google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 22ddee90929..a10c89ec543 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:LgGaJzny+/at3jTXZUNh/l8VBWyAiskCHrwq6iEYE7I=", - version = "v0.0.0-20220215190005-e57b466719ef", + sum = "h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58=", + version = "v0.0.0-20220216160803-4663080d8bc8", ) go_repository( name = "org_golang_google_grpc", From e3f0402c2331a9910318e5bd7fd7c7d21e869d05 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 17 Feb 2022 17:13:18 +0000 Subject: [PATCH 1195/1518] fix(deps): update google.golang.org/genproto commit hash to d576998 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cb87fe78161..2c242402039 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 + google.golang.org/genproto v0.0.0-20220217155828-d576998c0009 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index b73ddf2d50c..a66f9208b3a 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8 h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58= -google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220217155828-d576998c0009 h1:8QEZX8dJDqdCxQVLRWzEKGOkOzuDx0AU4+bQX6LwmU4= +google.golang.org/genproto v0.0.0-20220217155828-d576998c0009/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a10c89ec543..7563183d86a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:divpuJZKgX3Qt7MFDE5v62yu0yQcQbTCD9VJp9leX58=", - version = "v0.0.0-20220216160803-4663080d8bc8", + sum = "h1:8QEZX8dJDqdCxQVLRWzEKGOkOzuDx0AU4+bQX6LwmU4=", + version = "v0.0.0-20220217155828-d576998c0009", ) go_repository( name = "org_golang_google_grpc", From 1cfc0f75c9551ffea379b0a9dba7ec77890e95a0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 09:49:47 +0000 Subject: [PATCH 1196/1518] chore(deps): update rules_proto commit hash to 0bc8db1 --- WORKSPACE | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 0df527e6a8c..c306dcd3642 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "b9e1268c5bce4bb01ef31730300b8a4f562dc1211088f125c39af716f6f65f60", - strip_prefix = "rules_proto-e507ccded37c389186afaeb2b836ec576dc875dc", + sha256 = "90eb1ae78899b1e261317448ac3dc8d0cff8a70f4217a06a8cefa0e74387e8fd", + strip_prefix = "rules_proto-0bc8db13f8dc8f5d435be07e276712db1ca11a91", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/e507ccded37c389186afaeb2b836ec576dc875dc.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/e507ccded37c389186afaeb2b836ec576dc875dc.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/0bc8db13f8dc8f5d435be07e276712db1ca11a91.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/0bc8db13f8dc8f5d435be07e276712db1ca11a91.tar.gz", ], ) From ed37f51629746cf5b61ec8b4efffa3c521b5ad29 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Feb 2022 17:44:03 +0000 Subject: [PATCH 1197/1518] fix(deps): update google.golang.org/genproto commit hash to 94dd64e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2c242402039..e357877fc06 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220217155828-d576998c0009 + google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index a66f9208b3a..f4044350017 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220217155828-d576998c0009 h1:8QEZX8dJDqdCxQVLRWzEKGOkOzuDx0AU4+bQX6LwmU4= -google.golang.org/genproto v0.0.0-20220217155828-d576998c0009/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c h1:TU4rFa5APdKTq0s6B7WTsH6Xmx0Knj86s6Biz56mErE= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7563183d86a..b1b3ef73fb1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:8QEZX8dJDqdCxQVLRWzEKGOkOzuDx0AU4+bQX6LwmU4=", - version = "v0.0.0-20220217155828-d576998c0009", + sum = "h1:TU4rFa5APdKTq0s6B7WTsH6Xmx0Knj86s6Biz56mErE=", + version = "v0.0.0-20220218161850-94dd64e39d7c", ) go_repository( name = "org_golang_google_grpc", From aa2075ce5b237f941dc98b12bd897b1d8f08aff9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Feb 2022 23:20:04 +0000 Subject: [PATCH 1198/1518] fix(deps): update google.golang.org/genproto commit hash to 43724f9 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e357877fc06..7f575e76d62 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c + google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index f4044350017..716c65f1329 100644 --- a/go.sum +++ b/go.sum @@ -362,8 +362,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c h1:TU4rFa5APdKTq0s6B7WTsH6Xmx0Knj86s6Biz56mErE= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b1b3ef73fb1..9a901545fe6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:TU4rFa5APdKTq0s6B7WTsH6Xmx0Knj86s6Biz56mErE=", - version = "v0.0.0-20220218161850-94dd64e39d7c", + sum = "h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk=", + version = "v0.0.0-20220222213610-43724f9ea8cf", ) go_repository( name = "org_golang_google_grpc", From 712c7eca30551d3615e87d7c67cb541032bf86de Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 23 Feb 2022 17:25:02 +0000 Subject: [PATCH 1199/1518] fix(deps): update golang.org/x/oauth2 commit hash to ee48083 --- go.mod | 8 ++++---- go.sum | 15 ++++++++++----- repositories.bzl | 20 ++++++++++---------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index 7f575e76d62..491c86503aa 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 + golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 @@ -16,9 +16,9 @@ require ( ) require ( - golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect - golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect - golang.org/x/text v0.3.5 // indirect + golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect + golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect + golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 716c65f1329..d34cae3ba97 100644 --- a/go.sum +++ b/go.sum @@ -207,15 +207,16 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -251,16 +252,20 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/repositories.bzl b/repositories.bzl index 9a901545fe6..a123ef00c0f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,14 +1138,14 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=", - version = "v0.0.0-20210405180319-a5a99cb37ef4", + sum = "h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=", + version = "v0.0.0-20220127200216-cd36cc0744dd", ) go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=", - version = "v0.0.0-20211104180415-d3ed0bb246c8", + sum = "h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=", + version = "v0.0.0-20220223155221-ee480838109b", ) go_repository( name = "org_golang_x_sync", @@ -1156,21 +1156,21 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE=", - version = "v0.0.0-20210510120138-977fb7262007", + sum = "h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=", + version = "v0.0.0-20211216021012-1d35b9e2eb4e", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=", - version = "v0.0.0-20201126162022-7de9c90e9dd1", + sum = "h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=", + version = "v0.0.0-20210927222741-03fcf44c2211", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=", - version = "v0.3.5", + sum = "h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=", + version = "v0.3.7", ) go_repository( From aa49958bebbc53a2191e3d3abff723648c5e4ea2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Feb 2022 13:59:21 -0500 Subject: [PATCH 1200/1518] build(deps): bump nokogiri from 1.12.5 to 1.13.3 in /docs (#2554) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.12.5 to 1.13.3. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.12.5...v1.13.3) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 7d27ebd9310..05bb556fa8d 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -209,15 +209,15 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - mini_portile2 (2.6.1) + mini_portile2 (2.8.0) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) minitest (5.14.2) multipart-post (2.1.1) - nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) + nokogiri (1.13.3) + mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.19.0) faraday (>= 0.9) @@ -225,7 +225,7 @@ GEM pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (3.1.1) - racc (1.5.2) + racc (1.6.0) rake (13.0.1) rb-fsevent (0.10.4) rb-inotify (0.10.1) From 6e2ef8e4ab2cea780a09143bbefcad3cc61b1e1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Feb 2022 20:44:37 +0000 Subject: [PATCH 1201/1518] fix(deps): update google.golang.org/genproto commit hash to 15d65a4 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 491c86503aa..f82193db63f 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf + google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index d34cae3ba97..307866e188f 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I= +google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a123ef00c0f..d8f1f32f06a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk=", - version = "v0.0.0-20220222213610-43724f9ea8cf", + sum = "h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I=", + version = "v0.0.0-20220228195345-15d65a4533f7", ) go_repository( name = "org_golang_google_grpc", From 712f3bd7534ac86c65b7cc79696ac4d996939bf9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Mar 2022 15:25:58 +0000 Subject: [PATCH 1202/1518] fix(deps): update google.golang.org/genproto commit hash to 1ac2ace --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f82193db63f..a21a4fcf32b 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 + google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 307866e188f..d2634160522 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I= -google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7 h1:6fWaU2vz6/23eNdMU1V00ZPO5AZFQ2SLsO6r/z0Z2H0= +google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d8f1f32f06a..d328d091c0f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I=", - version = "v0.0.0-20220228195345-15d65a4533f7", + sum = "h1:6fWaU2vz6/23eNdMU1V00ZPO5AZFQ2SLsO6r/z0Z2H0=", + version = "v0.0.0-20220301145929-1ac2ace0dbf7", ) go_repository( name = "org_golang_google_grpc", From 8ca093beaf8e8593bf7b45c891d39e14b3dd60d1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 2 Mar 2022 04:42:23 +0000 Subject: [PATCH 1203/1518] fix(deps): update google.golang.org/genproto commit hash to 9aa1556 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a21a4fcf32b..746545d6109 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7 + google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index d2634160522..d573d92fe1e 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7 h1:6fWaU2vz6/23eNdMU1V00ZPO5AZFQ2SLsO6r/z0Z2H0= -google.golang.org/genproto v0.0.0-20220301145929-1ac2ace0dbf7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a h1:uqouglH745GoGeZ1YFZbPBiu961tgi/9Qm5jaorajjQ= +google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d328d091c0f..b6472ea9260 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:6fWaU2vz6/23eNdMU1V00ZPO5AZFQ2SLsO6r/z0Z2H0=", - version = "v0.0.0-20220301145929-1ac2ace0dbf7", + sum = "h1:uqouglH745GoGeZ1YFZbPBiu961tgi/9Qm5jaorajjQ=", + version = "v0.0.0-20220302033224-9aa15565e42a", ) go_repository( name = "org_golang_google_grpc", From db9c664000c1c15ade14789de28772325a1c8bcc Mon Sep 17 00:00:00 2001 From: Tobias Brumhard Date: Wed, 2 Mar 2022 15:05:30 +0100 Subject: [PATCH 1204/1518] Add `WithHealthzEndpoint` as `ServeMuxOption` to register a `/healthz`endpoint (#2319) * Add HealthCheck endpoint option to ServeMux * Use outboundMarshaler for HealthCheck reponses * Rename WithHealthCheckEnabled to WithHealthzEndpoint * Add docs for WithHealthzEndpoint * Cleanup health_check.md and imports * Fix health_check.md header * Fix health_check.md header whitespace * Replace panic with error return in test grpc server Co-authored-by: Johan Brandhorst-Satzkorn * Update runtime/BUILD.bazel * Use HealthClient for WithHealthzEndpoint option Signed-off-by: Tobias Brumhard * Regenerate bazel files Signed-off-by: Tobias Brumhard Co-authored-by: Johan Brandhorst-Satzkorn --- docs/docs/operations/health_check.md | 18 +++++ runtime/BUILD.bazel | 3 + runtime/mux.go | 43 +++++++++++ runtime/mux_test.go | 103 +++++++++++++++++++++++++++ 4 files changed, 167 insertions(+) diff --git a/docs/docs/operations/health_check.md b/docs/docs/operations/health_check.md index df332804f51..c66f05da49f 100644 --- a/docs/docs/operations/health_check.md +++ b/docs/docs/operations/health_check.md @@ -36,3 +36,21 @@ func (s *serviceServer) Watch(in *health.HealthCheckRequest, _ health.Health_Wat ``` 3. You can test the functionality with [GRPC health probe](https://github.com/grpc-ecosystem/grpc-health-probe). + +## Adding `/healthz` endpoint to runtime.ServeMux + +To automatically register a `/healthz` endpoint in your `ServeMux` you can use +the `ServeMuxOption` `WithHealthzEndpoint` +which takes in a connection to your registered gRPC server. + +This endpoint will forward a request to the `Check` method described above to really check the health of the +whole system, not only the gateway itself. If your server doesn't implement the health checking protocol each request +to `/healthz` will result in the following: + +```json +{"code":12,"message":"unknown service grpc.health.v1.Health","details":[]} +``` + +If you've implemented multiple services in your server you can target specific services with the `?service=` +query parameter. This will then be added to the `health.HealthCheckRequest` in the `Service` property. With that you can +write your own logic to handle that in the health checking methods. \ No newline at end of file diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index a7a039816ea..76d23634162 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -30,6 +30,7 @@ go_library( "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes", "@org_golang_google_grpc//grpclog", + "@org_golang_google_grpc//health/grpc_health_v1", "@org_golang_google_grpc//metadata", "@org_golang_google_grpc//status", "@org_golang_google_protobuf//encoding/protojson", @@ -71,7 +72,9 @@ go_test( "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes", + "@org_golang_google_grpc//health/grpc_health_v1", "@org_golang_google_grpc//metadata", "@org_golang_google_grpc//status", "@org_golang_google_protobuf//encoding/protojson", diff --git a/runtime/mux.go b/runtime/mux.go index a282169e621..8a3238b048d 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -12,6 +12,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" @@ -204,6 +205,48 @@ func WithDisablePathLengthFallback() ServeMuxOption { } } +// WithHealthzEndpoint returns a ServeMuxOption that will add a /healthz endpoint to the created ServeMux. +// When called the handler will forward the request to the upstream grpc service health check (defined in the +// gRPC Health Checking Protocol). +// See here https://grpc-ecosystem.github.io/grpc-gateway/docs/operations/health_check/ for more information on how +// to setup the protocol in the grpc server. +// If you define a service as query parameter, this will also be forwarded as service in the HealthCheckRequest. +func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMuxOption { + return func(s *ServeMux) { + // error can be ignored since pattern is definitely valid + _ = s.HandlePath( + http.MethodGet, "/healthz", func(w http.ResponseWriter, r *http.Request, _ map[string]string, + ) { + _, outboundMarshaler := MarshalerForRequest(s, r) + + serviceQueryParam := r.URL.Query().Get("service") + + resp, err := healthCheckClient.Check(r.Context(), &grpc_health_v1.HealthCheckRequest{ + Service: serviceQueryParam, + }) + if err != nil { + s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) + return + } + + if resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING { + var err error + switch resp.GetStatus() { + case grpc_health_v1.HealthCheckResponse_NOT_SERVING, grpc_health_v1.HealthCheckResponse_UNKNOWN: + err = status.Error(codes.Unavailable, resp.String()) + case grpc_health_v1.HealthCheckResponse_SERVICE_UNKNOWN: + err = status.Error(codes.NotFound, resp.String()) + } + + s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) + return + } + + _ = outboundMarshaler.NewEncoder(w).Encode(resp) + }) + } +} + // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 0bdc72c2e23..66d0ecb2972 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -2,15 +2,21 @@ package runtime_test import ( "bytes" + "context" "fmt" "net/http" "net/http/httptest" "net/url" "strconv" + "strings" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/health/grpc_health_v1" + "google.golang.org/grpc/status" ) func TestMuxServeHTTP(t *testing.T) { @@ -598,3 +604,100 @@ func TestServeMux_HandlePath(t *testing.T) { }) } } + +var healthCheckTests = []struct { + name string + code codes.Code + status grpc_health_v1.HealthCheckResponse_ServingStatus + httpStatusCode int +}{ + { + "Test grpc error code", + codes.NotFound, + grpc_health_v1.HealthCheckResponse_UNKNOWN, + http.StatusNotFound, + }, + { + "Test HealthCheckResponse_SERVING", + codes.OK, + grpc_health_v1.HealthCheckResponse_SERVING, + http.StatusOK, + }, + { + "Test HealthCheckResponse_NOT_SERVING", + codes.OK, + grpc_health_v1.HealthCheckResponse_NOT_SERVING, + http.StatusServiceUnavailable, + }, + { + "Test HealthCheckResponse_UNKNOWN", + codes.OK, + grpc_health_v1.HealthCheckResponse_UNKNOWN, + http.StatusServiceUnavailable, + }, + { + "Test HealthCheckResponse_SERVICE_UNKNOWN", + codes.OK, + grpc_health_v1.HealthCheckResponse_SERVICE_UNKNOWN, + http.StatusNotFound, + }, +} + +func TestWithHealthzEndpoint_codes(t *testing.T) { + for _, tt := range healthCheckTests { + t.Run(tt.name, func(t *testing.T) { + mux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyHealthCheckClient{status: tt.status, code: tt.code})) + + r := httptest.NewRequest(http.MethodGet, "/healthz", nil) + rr := httptest.NewRecorder() + + mux.ServeHTTP(rr, r) + + if rr.Code != tt.httpStatusCode { + t.Errorf( + "result http status code for grpc code %q and status %q should be %d, got %d", + tt.code, tt.status, tt.httpStatusCode, rr.Code, + ) + } + }) + } +} + +func TestWithHealthzEndpoint_serviceParam(t *testing.T) { + service := "test" + + // trigger error to output service in body + dummyClient := dummyHealthCheckClient{status: grpc_health_v1.HealthCheckResponse_UNKNOWN, code: codes.Unknown} + mux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyClient)) + + r := httptest.NewRequest(http.MethodGet, "/healthz?service="+service, nil) + rr := httptest.NewRecorder() + + mux.ServeHTTP(rr, r) + + if !strings.Contains(rr.Body.String(), service) { + t.Errorf( + "service query parameter should be translated to HealthCheckRequest: expected %s to contain %s", + rr.Body.String(), service, + ) + } +} + +var _ grpc_health_v1.HealthClient = (*dummyHealthCheckClient)(nil) + +type dummyHealthCheckClient struct { + status grpc_health_v1.HealthCheckResponse_ServingStatus + code codes.Code +} + +func (g *dummyHealthCheckClient) Check(ctx context.Context, r *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (*grpc_health_v1.HealthCheckResponse, error) { + if g.code != codes.OK { + return nil, status.Error(g.code, r.GetService()) + } + + return &grpc_health_v1.HealthCheckResponse{Status: g.status}, nil +} + +func (g *dummyHealthCheckClient) Watch(ctx context.Context, r *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (grpc_health_v1.Health_WatchClient, error) { + return nil, status.Error(codes.Unimplemented, "unimplemented") +} From bd0d991030a391d41b30a895a33cc92b16735c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Wed, 2 Mar 2022 18:54:26 +0100 Subject: [PATCH 1205/1518] protoc-gen-openapiv2: remove path parameters from body parameters (#2553) * Upgrade Bazel to support compiling protoc on macOS 12. See https://github.com/protocolbuffers/protobuf/issues/8884 * Fix 404 error for rules_proto * Remove path parameters from body parameters. Fixes #1670 * Updated generated files * Update protoc-gen-openapiv2/internal/genopenapi/template.go Co-authored-by: Johan Brandhorst-Satzkorn * Update protoc-gen-openapiv2/internal/genopenapi/template.go Co-authored-by: Johan Brandhorst-Satzkorn * fix(deps): update google.golang.org/genproto commit hash to 43724f9 * fix(deps): update golang.org/x/oauth2 commit hash to ee48083 * -Use location when looking up message for field. -Align tests with new behaviour. * Add new generated files. * - Return errors instead of panic() - Use field comments instead of message when available * Generated files without re-formatting. * -Fix missing reference to schema for body field (regression in this PR) -Started in fixing generated "required" containing "snake_case" * -Fix documentation -Update generated files * -Fix description -Update generated files -Use JsonName where available -Added test for subPathParams * Fix test * Fix linter error. * Paragraph deliminator as a constant. Co-authored-by: Johan Brandhorst-Satzkorn Co-authored-by: Renovate Bot --- .bazelversion | 2 +- WORKSPACE | 8 +- examples/internal/clients/abe/BUILD.bazel | 15 +- .../internal/clients/abe/api/swagger.yaml | 732 ++++++++++- .../abe/api_a_bit_of_everything_service.go | 98 +- examples/internal/clients/abe/api_echo_rpc.go | 6 +- .../clients/abe/model_a_bit_of_everything.go | 2 +- .../abe/model_a_bit_of_everything_1.go | 64 + .../abe/model_a_bit_of_everything_2.go | 63 + .../abe/model_a_bit_of_everything_3.go | 63 + .../abe/model_a_bit_of_everything_4.go | 63 + .../abe/model_a_bit_of_everything_5.go | 59 + .../abe/model_a_bit_of_everything_6.go | 59 + .../abe/model_a_bit_of_everything_7.go | 59 + .../abe/model_a_bit_of_everything_8.go | 59 + examples/internal/clients/abe/model_book.go | 23 + .../model_examplepb_a_bit_of_everything.go | 2 +- .../clients/abe/model_the_book_to_update_.go | 23 + .../abe/model_the_book_to_update__1.go | 21 + ...cludes_the_message_and_the_update_mask.go} | 4 +- ...ludes_the_message_and_the_update_mask_1.go | 16 + ...ep_pathsingle_nested_name_single_nested.go | 18 + .../proto/examplepb/a_bit_of_everything.pb.go | 1142 ++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 1028 +++++++++++++-- .../examplepb/flow_combination.swagger.json | 20 +- .../examplepb/generated_input.swagger.json | 6 +- .../proto/examplepb/stream.swagger.json | 6 +- .../internal/genopenapi/template.go | 244 ++-- .../internal/genopenapi/template_test.go | 108 +- 30 files changed, 3089 insertions(+), 926 deletions(-) create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_1.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_2.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_3.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_4.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_5.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_6.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_7.go create mode 100644 examples/internal/clients/abe/model_a_bit_of_everything_8.go create mode 100644 examples/internal/clients/abe/model_book.go create mode 100644 examples/internal/clients/abe/model_the_book_to_update_.go create mode 100644 examples/internal/clients/abe/model_the_book_to_update__1.go rename examples/internal/clients/abe/{model_examplepb_update_v2_request.go => model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go} (74%) create mode 100644 examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go create mode 100644 examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go diff --git a/.bazelversion b/.bazelversion index fae6e3d04b2..af8c8ec7c13 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -4.2.1 +4.2.2 diff --git a/WORKSPACE b/WORKSPACE index c306dcd3642..df6b45f9a41 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -25,11 +25,11 @@ bazel_skylib_workspace() http_archive( name = "rules_proto", - sha256 = "90eb1ae78899b1e261317448ac3dc8d0cff8a70f4217a06a8cefa0e74387e8fd", - strip_prefix = "rules_proto-0bc8db13f8dc8f5d435be07e276712db1ca11a91", + sha256 = "66bfdf8782796239d3875d37e7de19b1d94301e8972b3cbd2446b332429b4df1", + strip_prefix = "rules_proto-4.0.0", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/0bc8db13f8dc8f5d435be07e276712db1ca11a91.tar.gz", - "https://github.com/bazelbuild/rules_proto/archive/0bc8db13f8dc8f5d435be07e276712db1ca11a91.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/refs/tags/4.0.0.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/refs/tags/4.0.0.tar.gz", ], ) diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 9da0e266b76..eafbb6d166d 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -12,7 +12,16 @@ go_library( "configuration.go", "enum_helper.go", "model_a_bit_of_everything.go", + "model_a_bit_of_everything_1.go", + "model_a_bit_of_everything_2.go", + "model_a_bit_of_everything_3.go", + "model_a_bit_of_everything_4.go", + "model_a_bit_of_everything_5.go", + "model_a_bit_of_everything_6.go", + "model_a_bit_of_everything_7.go", + "model_a_bit_of_everything_8.go", "model_a_bit_of_everything_nested.go", + "model_book.go", "model_examplepb_a_bit_of_everything.go", "model_examplepb_a_bit_of_everything_repeated.go", "model_examplepb_body.go", @@ -21,13 +30,17 @@ go_library( "model_examplepb_error_object.go", "model_examplepb_error_response.go", "model_examplepb_numeric_enum.go", - "model_examplepb_update_v2_request.go", "model_message_path_enum_nested_path_enum.go", "model_nested_deep_enum.go", "model_pathenum_path_enum.go", "model_protobuf_any.go", "model_rpc_status.go", "model_sub_string_message.go", + "model_the_book_to_update_.go", + "model_the_book_to_update__1.go", + "model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go", + "model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go", + "model_v1exampledeep_pathsingle_nested_name_single_nested.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index d32665ec21a..c87ae519c14 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -325,7 +325,7 @@ paths: x-optionalDataType: "Time" - name: "repeatedEnumValue" in: "query" - description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -338,7 +338,7 @@ paths: x-exportParamName: "RepeatedEnumValue" - name: "repeatedEnumAnnotation" in: "query" - description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -351,8 +351,8 @@ paths: x-exportParamName: "RepeatedEnumAnnotation" - name: "enumValueAnnotation" in: "query" - description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ - \ means 0\n - ONE: ONE means 1" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" required: false type: "string" default: "ZERO" @@ -363,7 +363,7 @@ paths: x-optionalDataType: "String" - name: "repeatedStringAnnotation" in: "query" - description: "Repeated string title. Repeated string description." + description: "Repeated string title\n\nRepeated string description." required: false type: "array" items: @@ -393,13 +393,13 @@ paths: x-optionalDataType: "Int64" - name: "requiredStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as required in Open API definition." + description: "mark a field as required in Open API definition" required: true type: "string" x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" - name: "outputOnlyStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as readonly in Open API definition." + description: "mark a field as readonly in Open API definition" required: false type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" @@ -638,7 +638,7 @@ paths: x-optionalDataType: "Time" - name: "repeatedEnumValue" in: "query" - description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -651,7 +651,7 @@ paths: x-exportParamName: "RepeatedEnumValue" - name: "repeatedEnumAnnotation" in: "query" - description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -664,8 +664,8 @@ paths: x-exportParamName: "RepeatedEnumAnnotation" - name: "enumValueAnnotation" in: "query" - description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ - \ means 0\n - ONE: ONE means 1" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" required: false type: "string" default: "ZERO" @@ -676,7 +676,7 @@ paths: x-optionalDataType: "String" - name: "repeatedStringAnnotation" in: "query" - description: "Repeated string title. Repeated string description." + description: "Repeated string title\n\nRepeated string description." required: false type: "array" items: @@ -711,13 +711,13 @@ paths: x-optionalDataType: "Int64" - name: "requiredStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as required in Open API definition." + description: "mark a field as required in Open API definition" required: true type: "string" x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" - name: "outputOnlyStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as readonly in Open API definition." + description: "mark a field as readonly in Open API definition" required: false type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" @@ -766,11 +766,11 @@ paths: type: "string" x-exportParamName: "StringValue" - in: "body" - name: "body" + name: "singleNested" required: true schema: $ref: "#/definitions/ABitOfEverythingNested" - x-exportParamName: "Body" + x-exportParamName: "SingleNested" - name: "uuid" in: "query" required: false @@ -936,7 +936,7 @@ paths: x-optionalDataType: "Time" - name: "repeatedEnumValue" in: "query" - description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -949,7 +949,7 @@ paths: x-exportParamName: "RepeatedEnumValue" - name: "repeatedEnumAnnotation" in: "query" - description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -962,8 +962,8 @@ paths: x-exportParamName: "RepeatedEnumAnnotation" - name: "enumValueAnnotation" in: "query" - description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ - \ means 0\n - ONE: ONE means 1" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" required: false type: "string" default: "ZERO" @@ -974,7 +974,7 @@ paths: x-optionalDataType: "String" - name: "repeatedStringAnnotation" in: "query" - description: "Repeated string title. Repeated string description." + description: "Repeated string title\n\nRepeated string description." required: false type: "array" items: @@ -1016,13 +1016,13 @@ paths: x-optionalDataType: "Int64" - name: "requiredStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as required in Open API definition." + description: "mark a field as required in Open API definition" required: true type: "string" x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" - name: "outputOnlyStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as readonly in Open API definition." + description: "mark a field as readonly in Open API definition" required: false type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" @@ -1260,7 +1260,7 @@ paths: x-optionalDataType: "Time" - name: "repeatedEnumValue" in: "query" - description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -1273,7 +1273,7 @@ paths: x-exportParamName: "RepeatedEnumValue" - name: "repeatedEnumAnnotation" in: "query" - description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -1286,8 +1286,8 @@ paths: x-exportParamName: "RepeatedEnumAnnotation" - name: "enumValueAnnotation" in: "query" - description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ - \ means 0\n - ONE: ONE means 1" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" required: false type: "string" default: "ZERO" @@ -1298,7 +1298,7 @@ paths: x-optionalDataType: "String" - name: "repeatedStringAnnotation" in: "query" - description: "Repeated string title. Repeated string description." + description: "Repeated string title\n\nRepeated string description." required: false type: "array" items: @@ -1340,13 +1340,13 @@ paths: x-optionalDataType: "Int64" - name: "requiredStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as required in Open API definition." + description: "mark a field as required in Open API definition" required: true type: "string" x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" - name: "outputOnlyStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as readonly in Open API definition." + description: "mark a field as readonly in Open API definition" required: false type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" @@ -1581,7 +1581,7 @@ paths: x-optionalDataType: "Time" - name: "repeatedEnumValue" in: "query" - description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -1594,7 +1594,7 @@ paths: x-exportParamName: "RepeatedEnumValue" - name: "repeatedEnumAnnotation" in: "query" - description: "Repeated numeric enum title. Repeated numeric enum description.\n\ + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false type: "array" @@ -1607,7 +1607,7 @@ paths: x-exportParamName: "RepeatedEnumAnnotation" - name: "repeatedStringAnnotation" in: "query" - description: "Repeated string title. Repeated string description." + description: "Repeated string title\n\nRepeated string description." required: false type: "array" items: @@ -1649,13 +1649,13 @@ paths: x-optionalDataType: "Int64" - name: "requiredStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as required in Open API definition." + description: "mark a field as required in Open API definition" required: true type: "string" x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" - name: "outputOnlyStringViaFieldBehaviorAnnotation" in: "query" - description: "mark a field as readonly in Open API definition." + description: "mark a field as readonly in Open API definition" required: false type: "string" x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" @@ -2053,7 +2053,7 @@ paths: name: "body" required: true schema: - $ref: "#/definitions/examplepbABitOfEverything" + $ref: "#/definitions/A bit of everything_1" x-exportParamName: "Body" responses: 200: @@ -2096,13 +2096,13 @@ paths: pattern: "publishers/[^/]+/books/[^/]+" x-exportParamName: "BookName" - in: "body" - name: "body" + name: "book" description: "The book to update.\n\nThe book's `name` field is used to identify\ \ the book to be updated.\nFormat: publishers/{publisher}/books/{book}" required: true schema: - $ref: "#/definitions/examplepbBook" - x-exportParamName: "Body" + $ref: "The book to update." + x-exportParamName: "Book" - name: "updateMask" in: "query" description: "The list of fields to be updated." @@ -2160,12 +2160,12 @@ paths: pattern: "publishers/[^/]+" x-exportParamName: "Parent" - in: "body" - name: "body" + name: "book" description: "The book to create." required: true schema: $ref: "#/definitions/examplepbBook" - x-exportParamName: "Body" + x-exportParamName: "Book" - name: "bookId" in: "query" description: "The ID to use for the book.\n\nThis must start with an alphanumeric\ @@ -2212,11 +2212,13 @@ paths: type: "string" x-exportParamName: "AbeUuid" - in: "body" - name: "body" + name: "abe" + description: "A bit of everything\n\nIntentionally complicated message type\ + \ to cover many features of Protobuf." required: true schema: - $ref: "#/definitions/examplepbABitOfEverything" - x-exportParamName: "Body" + $ref: "#/definitions/A bit of everything_2" + x-exportParamName: "Abe" - name: "updateMask" in: "query" description: "The paths to update." @@ -2260,11 +2262,13 @@ paths: type: "string" x-exportParamName: "AbeUuid" - in: "body" - name: "body" + name: "abe" + description: "A bit of everything\n\nIntentionally complicated message type\ + \ to cover many features of Protobuf." required: true schema: - $ref: "#/definitions/examplepbABitOfEverything" - x-exportParamName: "Body" + $ref: "#/definitions/A bit of everything_3" + x-exportParamName: "Abe" - name: "updateMask" in: "query" description: "The paths to update." @@ -2355,11 +2359,11 @@ paths: operationId: "ABitOfEverythingService_Echo2" parameters: - in: "body" - name: "body" + name: "value" required: true schema: type: "string" - x-exportParamName: "Body" + x-exportParamName: "Value" responses: 200: description: "A successful response." @@ -2577,11 +2581,11 @@ paths: type: "string" x-exportParamName: "Id" - in: "body" - name: "body" + name: "data" required: true schema: $ref: "#/definitions/examplepbBody" - x-exportParamName: "Body" + x-exportParamName: "Data" responses: 200: description: "A successful response." @@ -2661,7 +2665,8 @@ paths: name: "body" required: true schema: - $ref: "#/definitions/examplepbUpdateV2Request" + $ref: "#/definitions/UpdateV2Request request for update includes the message\ + \ and the update mask" x-exportParamName: "Body" responses: 200: @@ -2921,7 +2926,7 @@ definitions: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" title: "A bit of everything" - description: "Intentionaly complicated message type to cover many features of\ + description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: int64_value: 12 @@ -3091,16 +3096,6 @@ definitions: - "ZERO" - "ONE" default: "ZERO" - examplepbUpdateV2Request: - type: "object" - properties: - abe: - $ref: "#/definitions/examplepbABitOfEverything" - updateMask: - type: "string" - description: "The paths to update." - title: "UpdateV2Request request for update includes the message and the update\ - \ mask" pathenumPathEnum: type: "string" enum: @@ -3336,11 +3331,620 @@ definitions: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" title: "A bit of everything" - description: "Intentionaly complicated message type to cover many features of\ + description: "Intentionally complicated message type to cover many features of\ + \ Protobuf." + example: + int64_value: 12 + double_value: 12.3 + v1exampledeep_pathsingleNested.name_singleNested: + properties: + amount: + type: "integer" + format: "int64" + ok: + description: "DeepEnum description." + $ref: "#/definitions/NestedDeepEnum" + description: "Nested is nested type." + example: "{\"ok\":\"TRUE\"}" + A bit of everything_1: + type: "object" + required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" + - "uuid" + properties: + singleNested: + $ref: "v1exampledeep_pathsingleNested.name_singleNested" + uuid: + type: "string" + minLength: 1 + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + pathEnumValue: + $ref: "#/definitions/pathenumPathEnum" + nestedPathEnumValue: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + type: "object" + properties: {} + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeatedEnumAnnotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeatedStringAnnotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeatedNestedAnnotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nestedAnnotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64OverrideType: + type: "integer" + format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true + optionalStringValue: + type: "string" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "A bit of everything" + description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: int64_value: 12 double_value: 12.3 + The book to update.: + type: "object" + properties: + id: + type: "string" + description: "Output only. The book's ID." + readOnly: true + createTime: + type: "string" + format: "date-time" + description: "Output only. Creation time of the book." + readOnly: true + title: "The book to update." + description: "The book's `name` field is used to identify the book to be updated.\n\ + Format: publishers/{publisher}/books/{book}" + A bit of everything_2: + type: "object" + required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" + properties: + singleNested: + $ref: "#/definitions/ABitOfEverythingNested" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + pathEnumValue: + $ref: "#/definitions/pathenumPathEnum" + nestedPathEnumValue: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + type: "object" + properties: {} + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeatedEnumAnnotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeatedStringAnnotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeatedNestedAnnotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nestedAnnotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64OverrideType: + type: "integer" + format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true + optionalStringValue: + type: "string" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "A bit of everything" + description: "Intentionally complicated message type to cover many features of\ + \ Protobuf." + example: + int64_value: 12 + double_value: 12.3 + A bit of everything_3: + type: "object" + required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" + properties: + singleNested: + $ref: "#/definitions/ABitOfEverythingNested" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + pathEnumValue: + $ref: "#/definitions/pathenumPathEnum" + nestedPathEnumValue: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + type: "object" + properties: {} + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeatedEnumAnnotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeatedStringAnnotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeatedNestedAnnotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nestedAnnotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64OverrideType: + type: "integer" + format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true + optionalStringValue: + type: "string" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "A bit of everything" + description: "Intentionally complicated message type to cover many features of\ + \ Protobuf." + example: + int64_value: 12 + double_value: 12.3 + A bit of everything_4: + required: + - "doubleValue" + - "floatValue" + - "int64Value" + - "requiredStringViaFieldBehaviorAnnotation" + properties: + singleNested: + $ref: "#/definitions/ABitOfEverythingNested" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + description: "Float value field" + default: 0.2 + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + pathEnumValue: + $ref: "#/definitions/pathenumPathEnum" + nestedPathEnumValue: + $ref: "#/definitions/MessagePathEnumNestedPathEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + type: "object" + properties: {} + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + repeatedEnumAnnotation: + type: "array" + description: "Repeated numeric enum description." + title: "Repeated numeric enum title" + items: + $ref: "#/definitions/examplepbNumericEnum" + enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" + $ref: "#/definitions/examplepbNumericEnum" + repeatedStringAnnotation: + type: "array" + description: "Repeated string description." + title: "Repeated string title" + items: + type: "string" + repeatedNestedAnnotation: + type: "array" + description: "Repeated nested object description." + title: "Repeated nested object title" + items: + $ref: "#/definitions/ABitOfEverythingNested" + nestedAnnotation: + description: "Nested object description." + title: "Nested object title" + $ref: "#/definitions/ABitOfEverythingNested" + int64OverrideType: + type: "integer" + format: "int64" + requiredStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as required in Open API definition" + outputOnlyStringViaFieldBehaviorAnnotation: + type: "string" + title: "mark a field as readonly in Open API definition" + readOnly: true + optionalStringValue: + type: "string" + description: "Intentionally complicated message type to cover many features of\ + \ Protobuf." + example: "{\"int64_value\":12,\"double_value\":12.3}" + UpdateV2Request request for update includes the message and the update mask: + type: "object" + properties: + abe: + $ref: "#/definitions/A bit of everything_4" + updateMask: + type: "string" + description: "The paths to update." + title: "UpdateV2Request request for update includes the message and the update\ + \ mask" externalDocs: description: "More about gRPC-Gateway" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index bda25866910..be698fbdeae 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -344,7 +344,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedName name is nested field. * @param floatValue Float value field - * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. @@ -370,14 +370,14 @@ ABitOfEverythingServiceApiService * @param "OneofString" (optional.String) - * @param "NonConventionalNameValue" (optional.String) - * @param "TimestampValue" (optional.Time) - - * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything @@ -674,7 +674,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedOk DeepEnum description. * @param floatValue Float value field - * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -700,14 +700,14 @@ ABitOfEverythingServiceApiService * @param "OneofString" (optional.String) - * @param "NonConventionalNameValue" (optional.String) - * @param "TimestampValue" (optional.Time) - - * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. * @param "NestedAnnotationName" (optional.String) - name is nested field. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "Int64OverrideType" (optional.Int64) - - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything @@ -1003,9 +1003,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param stringValue - * @param body + * @param singleNested * @param floatValue Float value field - * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters: * @param "Uuid" (optional.String) - * @param "DoubleValue" (optional.Float64) - @@ -1028,15 +1028,15 @@ ABitOfEverythingServiceApiService * @param "OneofString" (optional.String) - * @param "NonConventionalNameValue" (optional.String) - * @param "TimestampValue" (optional.Time) - - * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. * @param "NestedAnnotationName" (optional.String) - name is nested field. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything @@ -1076,7 +1076,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { OptionalStringValue optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1206,7 +1206,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &singleNested if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -1499,7 +1499,7 @@ This API creates a new ABitOfEverything * @param pathEnumValue * @param nestedPathEnumValue * @param enumValueAnnotation Numeric enum description. - * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -1509,14 +1509,14 @@ This API creates a new ABitOfEverything * @param "RepeatedStringValue" (optional.Interface of []string) - * @param "OneofString" (optional.String) - * @param "TimestampValue" (optional.Time) - - * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. * @param "NestedAnnotationName" (optional.String) - name is nested field. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - @return ExamplepbABitOfEverything @@ -1922,7 +1922,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBody(ct ABitOfEverythingServiceApiService Create a book. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param parent The publisher in which to create the book. Format: `publishers/{publisher}` Example: `publishers/1257894000000000000` - * @param body The book to create. + * @param book The book to create. * @param optional nil or *ABitOfEverythingServiceCreateBookOpts - Optional Parameters: * @param "BookId" (optional.String) - The ID to use for the book. This must start with an alphanumeric character. @@ -1933,7 +1933,7 @@ type ABitOfEverythingServiceCreateBookOpts struct { BookId optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ctx context.Context, parent string, body ExamplepbBook, localVarOptionals *ABitOfEverythingServiceCreateBookOpts) (ExamplepbBook, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ctx context.Context, parent string, book ExamplepbBook, localVarOptionals *ABitOfEverythingServiceCreateBookOpts) (ExamplepbBook, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1971,7 +1971,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ct localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &book if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -2095,7 +2095,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ABitOfEverything1) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2560,11 +2560,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDeta ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param id - * @param body + * @param data @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWithBody(ctx context.Context, id string, body ExamplepbBody) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWithBody(ctx context.Context, id string, data ExamplepbBody) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2599,7 +2599,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWit localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &data if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -2720,7 +2720,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuid * @param floatValue Float value field - * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition. + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2746,15 +2746,15 @@ ABitOfEverythingServiceApiService * @param "OneofString" (optional.String) - * @param "NonConventionalNameValue" (optional.String) - * @param "TimestampValue" (optional.Time) - - * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title. Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "EnumValueAnnotation" (optional.String) - Numeric enum title. Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title. Repeated string description. + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. * @param "NestedAnnotationName" (optional.String) - name is nested field. * @param "NestedAnnotationAmount" (optional.Int64) - * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Int64OverrideType" (optional.Int64) - - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition. + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - @return interface{} @@ -4057,7 +4057,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx co ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param bookName The resource name of the book. Format: `publishers/{publisher}/books/{book}` Example: `publishers/1257894000000000000/books/my-book` - * @param body The book to update. The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book} + * @param book The book to update. The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book} * @param optional nil or *ABitOfEverythingServiceUpdateBookOpts - Optional Parameters: * @param "UpdateMask" (optional.String) - The list of fields to be updated. * @param "AllowMissing" (optional.Bool) - If set to true, and the book is not found, a new book will be created. In this situation, `update_mask` is ignored. @@ -4070,7 +4070,7 @@ type ABitOfEverythingServiceUpdateBookOpts struct { AllowMissing optional.Bool } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ctx context.Context, bookName string, body ExamplepbBook, localVarOptionals *ABitOfEverythingServiceUpdateBookOpts) (ExamplepbBook, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ctx context.Context, bookName string, book TheBookToUpdate_, localVarOptionals *ABitOfEverythingServiceUpdateBookOpts) (ExamplepbBook, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} @@ -4111,7 +4111,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ct localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &book if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -4231,7 +4231,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ct ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param abeUuid - * @param body + * @param abe A bit of everything Intentionally complicated message type to cover many features of Protobuf. * @param optional nil or *ABitOfEverythingServiceUpdateV2Opts - Optional Parameters: * @param "UpdateMask" (optional.String) - The paths to update. @@ -4242,7 +4242,7 @@ type ABitOfEverythingServiceUpdateV2Opts struct { UpdateMask optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, abeUuid string, abe ABitOfEverything2, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -4280,7 +4280,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &abe if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -4400,7 +4400,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param abeUuid - * @param body + * @param abe A bit of everything Intentionally complicated message type to cover many features of Protobuf. * @param optional nil or *ABitOfEverythingServiceUpdateV22Opts - Optional Parameters: * @param "UpdateMask" (optional.String) - The paths to update. @@ -4411,7 +4411,7 @@ type ABitOfEverythingServiceUpdateV22Opts struct { UpdateMask optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything, localVarOptionals *ABitOfEverythingServiceUpdateV22Opts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, abeUuid string, abe ABitOfEverything3, localVarOptionals *ABitOfEverythingServiceUpdateV22Opts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} @@ -4449,7 +4449,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &abe if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -4573,7 +4573,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, abeUuid string, body ExamplepbUpdateV2Request) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, abeUuid string, body UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} diff --git a/examples/internal/clients/abe/api_echo_rpc.go b/examples/internal/clients/abe/api_echo_rpc.go index f79c8a61b37..1578fbff89b 100644 --- a/examples/internal/clients/abe/api_echo_rpc.go +++ b/examples/internal/clients/abe/api_echo_rpc.go @@ -199,11 +199,11 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Context, val EchoRpcApiService Summary: Echo rpc Description Echo * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param value @return SubStringMessage */ -func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { +func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -237,7 +237,7 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, bo localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } // body params - localVarPostBody = &body + localVarPostBody = &value if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 1f9f5392a48..13177830042 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -14,7 +14,7 @@ import ( "time" ) -// Intentionaly complicated message type to cover many features of Protobuf. +// Intentionally complicated message type to cover many features of Protobuf. type ABitOfEverything struct { SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` Nested []ABitOfEverythingNested `json:"nested,omitempty"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go new file mode 100644 index 00000000000..94b88c08c23 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -0,0 +1,64 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything1 struct { + SingleNested *V1exampledeepPathsingleNestedNameSingleNested `json:"singleNested,omitempty"` + Uuid string `json:"uuid"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go new file mode 100644 index 00000000000..dfb9223607e --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -0,0 +1,63 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything2 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go new file mode 100644 index 00000000000..79de7f81158 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -0,0 +1,63 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything3 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go new file mode 100644 index 00000000000..bc6933331d6 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -0,0 +1,63 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything4 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_5.go b/examples/internal/clients/abe/model_a_bit_of_everything_5.go new file mode 100644 index 00000000000..bf59a1748e5 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_5.go @@ -0,0 +1,59 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything5 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_6.go b/examples/internal/clients/abe/model_a_bit_of_everything_6.go new file mode 100644 index 00000000000..468fb91c1ce --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_6.go @@ -0,0 +1,59 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything6 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_7.go b/examples/internal/clients/abe/model_a_bit_of_everything_7.go new file mode 100644 index 00000000000..e72e74f5fd9 --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_7.go @@ -0,0 +1,59 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything7 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_8.go b/examples/internal/clients/abe/model_a_bit_of_everything_8.go new file mode 100644 index 00000000000..e9a940b104a --- /dev/null +++ b/examples/internal/clients/abe/model_a_bit_of_everything_8.go @@ -0,0 +1,59 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe +import ( + "time" +) + +// Intentionally complicated message type to cover many features of Protobuf. +type ABitOfEverything8 struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + // Float value field + FloatValue float32 `json:"floatValue"` + DoubleValue float64 `json:"doubleValue"` + Int64Value string `json:"int64Value"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` + // Repeated numeric enum description. + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` + // Repeated string description. + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` + // Repeated nested object description. + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` + OptionalStringValue string `json:"optionalStringValue,omitempty"` +} diff --git a/examples/internal/clients/abe/model_book.go b/examples/internal/clients/abe/model_book.go new file mode 100644 index 00000000000..febf42b05fb --- /dev/null +++ b/examples/internal/clients/abe/model_book.go @@ -0,0 +1,23 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// An example resource type from AIP-123 used to test the behavior described in the CreateBookRequest message. See: https://google.aip.dev/123 +type Book struct { + // Output only. The book's ID. + Id string `json:"id,omitempty"` + // Output only. Creation time of the book. + CreateTime time.Time `json:"createTime,omitempty"` +} diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index 13e68e74443..dad6286c3c7 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -14,7 +14,7 @@ import ( "time" ) -// Intentionaly complicated message type to cover many features of Protobuf. +// Intentionally complicated message type to cover many features of Protobuf. type ExamplepbABitOfEverything struct { SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` Uuid string `json:"uuid"` diff --git a/examples/internal/clients/abe/model_the_book_to_update_.go b/examples/internal/clients/abe/model_the_book_to_update_.go new file mode 100644 index 00000000000..22b4e447e9c --- /dev/null +++ b/examples/internal/clients/abe/model_the_book_to_update_.go @@ -0,0 +1,23 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +// The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book} +type TheBookToUpdate_ struct { + // Output only. The book's ID. + Id string `json:"id,omitempty"` + // Output only. Creation time of the book. + CreateTime time.Time `json:"createTime,omitempty"` +} diff --git a/examples/internal/clients/abe/model_the_book_to_update__1.go b/examples/internal/clients/abe/model_the_book_to_update__1.go new file mode 100644 index 00000000000..be7408012c8 --- /dev/null +++ b/examples/internal/clients/abe/model_the_book_to_update__1.go @@ -0,0 +1,21 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe +import ( + "time" +) + +// The book's `name` field is used to identify the book to be updated. Format: publishers/{publisher}/books/{book} +type TheBookToUpdate1 struct { + // Output only. The book's ID. + Id string `json:"id,omitempty"` + // Output only. Creation time of the book. + CreateTime time.Time `json:"createTime,omitempty"` +} diff --git a/examples/internal/clients/abe/model_examplepb_update_v2_request.go b/examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go similarity index 74% rename from examples/internal/clients/abe/model_examplepb_update_v2_request.go rename to examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go index dab839628b5..128cb16f31b 100644 --- a/examples/internal/clients/abe/model_examplepb_update_v2_request.go +++ b/examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go @@ -10,8 +10,8 @@ package abe -type ExamplepbUpdateV2Request struct { - Abe *ExamplepbABitOfEverything `json:"abe,omitempty"` +type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask struct { + Abe *ABitOfEverything4 `json:"abe,omitempty"` // The paths to update. UpdateMask string `json:"updateMask,omitempty"` } diff --git a/examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go b/examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go new file mode 100644 index 00000000000..ca3f4eadfe9 --- /dev/null +++ b/examples/internal/clients/abe/model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go @@ -0,0 +1,16 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ +package abe + +type UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask1 struct { + Abe *ABitOfEverything8 `json:"abe,omitempty"` + // The paths to update. + UpdateMask string `json:"updateMask,omitempty"` +} diff --git a/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go new file mode 100644 index 00000000000..3ab04604db7 --- /dev/null +++ b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go @@ -0,0 +1,18 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +// Nested is nested type. +type V1exampledeepPathsingleNestedNameSingleNested struct { + Amount int64 `json:"amount,omitempty"` + // DeepEnum description. + Ok *NestedDeepEnum `json:"ok,omitempty"` +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index cd744337cc3..d8eda0dcc4b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1356,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xcc, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xcd, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1590,413 +1590,428 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, - 0x8e, 0x02, 0x92, 0x41, 0x8a, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, - 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, - 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, - 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, - 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, - 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, - 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, - 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, - 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x8f, 0x02, 0x92, 0x41, 0x8b, 0x02, 0x0a, 0x85, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, + 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, + 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, + 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, + 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, - 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, - 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, - 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, - 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, - 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, - 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, + 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, - 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, - 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, + 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, + 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, - 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, + 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, - 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, - 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, + 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, + 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, + 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, + 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, + 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, + 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, + 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, - 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, - 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, + 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, + 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, + 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, - 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, - 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, - 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, - 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, - 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, - 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, - 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, - 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, - 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, + 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, + 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, + 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, + 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, + 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, - 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, - 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, - 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, + 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, + 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, + 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, + 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, + 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, + 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, + 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, + 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, + 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, - 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, - 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, - 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, + 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, @@ -2005,203 +2020,188 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, + 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, - 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, + 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, - 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, + 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, - 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, + 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, + 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, + 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, + 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, + 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, + 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, + 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, + 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, + 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, + 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, + 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, - 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, - 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, - 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, - 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, - 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, - 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, + 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, + 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, + 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, + 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, + 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, + 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, + 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, + 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, + 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, + 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, + 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, + 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, - 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, - 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, - 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, - 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, - 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, - 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, - 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, - 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, - 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, - 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, - 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, - 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, - 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, - 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, - 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, - 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, - 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, - 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, - 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, - 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, + 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index dac64845b22..03da64d8172 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -235,7 +235,7 @@ message ABitOfEverything { option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { json_schema: { title: "A bit of everything" - description: "Intentionaly complicated message type to cover many features of Protobuf." + description: "Intentionally complicated message type to cover many features of Protobuf." required: ["uuid", "int64_value", "double_value"] } external_docs: { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 28a81dff4cd..1f92c478d82 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -411,7 +411,7 @@ }, { "name": "repeatedEnumValue", - "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -426,7 +426,7 @@ }, { "name": "repeatedEnumAnnotation", - "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -441,7 +441,7 @@ }, { "name": "enumValueAnnotation", - "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "string", @@ -453,7 +453,7 @@ }, { "name": "repeatedStringAnnotation", - "description": "Repeated string title. Repeated string description.", + "description": "Repeated string title\n\nRepeated string description.", "in": "query", "required": false, "type": "array", @@ -485,14 +485,14 @@ }, { "name": "requiredStringViaFieldBehaviorAnnotation", - "description": "mark a field as required in Open API definition.", + "description": "mark a field as required in Open API definition", "in": "query", "required": true, "type": "string" }, { "name": "outputOnlyStringViaFieldBehaviorAnnotation", - "description": "mark a field as readonly in Open API definition.", + "description": "mark a field as readonly in Open API definition", "in": "query", "required": false, "type": "string" @@ -753,7 +753,7 @@ }, { "name": "repeatedEnumValue", - "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -768,7 +768,7 @@ }, { "name": "repeatedEnumAnnotation", - "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -783,7 +783,7 @@ }, { "name": "enumValueAnnotation", - "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "string", @@ -795,7 +795,7 @@ }, { "name": "repeatedStringAnnotation", - "description": "Repeated string title. Repeated string description.", + "description": "Repeated string title\n\nRepeated string description.", "in": "query", "required": false, "type": "array", @@ -832,14 +832,14 @@ }, { "name": "requiredStringViaFieldBehaviorAnnotation", - "description": "mark a field as required in Open API definition.", + "description": "mark a field as required in Open API definition", "in": "query", "required": true, "type": "string" }, { "name": "outputOnlyStringViaFieldBehaviorAnnotation", - "description": "mark a field as readonly in Open API definition.", + "description": "mark a field as readonly in Open API definition", "in": "query", "required": false, "type": "string" @@ -904,7 +904,7 @@ "type": "string" }, { - "name": "body", + "name": "singleNested", "in": "body", "required": true, "schema": { @@ -1082,7 +1082,7 @@ }, { "name": "repeatedEnumValue", - "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1097,7 +1097,7 @@ }, { "name": "repeatedEnumAnnotation", - "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1112,7 +1112,7 @@ }, { "name": "enumValueAnnotation", - "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "string", @@ -1124,7 +1124,7 @@ }, { "name": "repeatedStringAnnotation", - "description": "Repeated string title. Repeated string description.", + "description": "Repeated string title\n\nRepeated string description.", "in": "query", "required": false, "type": "array", @@ -1168,14 +1168,14 @@ }, { "name": "requiredStringViaFieldBehaviorAnnotation", - "description": "mark a field as required in Open API definition.", + "description": "mark a field as required in Open API definition", "in": "query", "required": true, "type": "string" }, { "name": "outputOnlyStringViaFieldBehaviorAnnotation", - "description": "mark a field as readonly in Open API definition.", + "description": "mark a field as readonly in Open API definition", "in": "query", "required": false, "type": "string" @@ -1435,7 +1435,7 @@ }, { "name": "repeatedEnumValue", - "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1450,7 +1450,7 @@ }, { "name": "repeatedEnumAnnotation", - "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1465,7 +1465,7 @@ }, { "name": "enumValueAnnotation", - "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "string", @@ -1477,7 +1477,7 @@ }, { "name": "repeatedStringAnnotation", - "description": "Repeated string title. Repeated string description.", + "description": "Repeated string title\n\nRepeated string description.", "in": "query", "required": false, "type": "array", @@ -1521,14 +1521,14 @@ }, { "name": "requiredStringViaFieldBehaviorAnnotation", - "description": "mark a field as required in Open API definition.", + "description": "mark a field as required in Open API definition", "in": "query", "required": true, "type": "string" }, { "name": "outputOnlyStringViaFieldBehaviorAnnotation", - "description": "mark a field as readonly in Open API definition.", + "description": "mark a field as readonly in Open API definition", "in": "query", "required": false, "type": "string" @@ -1805,7 +1805,7 @@ }, { "name": "repeatedEnumValue", - "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1820,7 +1820,7 @@ }, { "name": "repeatedEnumAnnotation", - "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, "type": "array", @@ -1835,7 +1835,7 @@ }, { "name": "repeatedStringAnnotation", - "description": "Repeated string title. Repeated string description.", + "description": "Repeated string title\n\nRepeated string description.", "in": "query", "required": false, "type": "array", @@ -1879,14 +1879,14 @@ }, { "name": "requiredStringViaFieldBehaviorAnnotation", - "description": "mark a field as required in Open API definition.", + "description": "mark a field as required in Open API definition", "in": "query", "required": true, "type": "string" }, { "name": "outputOnlyStringViaFieldBehaviorAnnotation", - "description": "mark a field as readonly in Open API definition.", + "description": "mark a field as readonly in Open API definition", "in": "query", "required": false, "type": "string" @@ -2088,7 +2088,7 @@ "default": "0.2", "description": "Float value field", "required": [ - "float_value" + "floatValue" ] }, "doubleValue": { @@ -2240,7 +2240,7 @@ "type": "string", "title": "mark a field as required in Open API definition", "required": [ - "required_string_via_field_behavior_annotation" + "requiredStringViaFieldBehaviorAnnotation" ] }, "outputOnlyStringViaFieldBehaviorAnnotation": { @@ -2252,7 +2252,7 @@ "type": "string" } }, - "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "title": "A bit of everything", "externalDocs": { "description": "Find out more about ABitOfEverything", @@ -2611,7 +2611,223 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" + "type": "object", + "example": { + "int64_value": 12, + "double_value": 12.3 + }, + "properties": { + "singleNested": { + "type": "object", + "example": { + "ok": "TRUE" + }, + "properties": { + "amount": { + "type": "integer", + "format": "int64" + }, + "ok": { + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." + } + }, + "description": "Nested is nested type." + }, + "uuid": { + "type": "string", + "minLength": 1, + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "floatValue" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + }, + "optionalStringValue": { + "type": "string" + } + }, + "description": "Intentionally complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "uuid", + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] } } ], @@ -2670,12 +2886,27 @@ "pattern": "publishers/[^/]+/books/[^/]+" }, { - "name": "body", + "name": "book", "description": "The book to update.\n\nThe book's `name` field is used to identify the book to be updated.\nFormat: publishers/{publisher}/books/{book}", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbBook" + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Output only. The book's ID.", + "readOnly": true + }, + "createTime": { + "type": "string", + "format": "date-time", + "description": "Output only. Creation time of the book.", + "readOnly": true + } + }, + "description": "The book's `name` field is used to identify the book to be updated.\nFormat: publishers/{publisher}/books/{book}", + "title": "The book to update." } }, { @@ -2749,7 +2980,7 @@ "pattern": "publishers/[^/]+" }, { - "name": "body", + "name": "book", "description": "The book to create.", "in": "body", "required": true, @@ -2818,53 +3049,250 @@ "type": "string" }, { - "name": "body", + "name": "abe", + "description": "A bit of everything\n\nIntentionally complicated message type to cover many features of Protobuf.", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" - } - }, - { - "name": "updateMask", - "description": "The paths to update.", - "in": "query", - "required": false, - "type": "string" - } - ], - "tags": [ - "ABitOfEverythingService" - ] - }, - "patch": { - "operationId": "ABitOfEverythingService_UpdateV22", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "403": { - "description": "Returned when the user does not have permission to access the resource.", - "schema": {} - }, - "404": { - "description": "Returned when the resource does not exist.", - "schema": { - "type": "string", - "format": "string" - } - }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, - "500": { - "description": "Server error", + "type": "object", + "example": { + "int64_value": 12, + "double_value": 12.3 + }, + "properties": { + "singleNested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "floatValue" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + }, + "optionalStringValue": { + "type": "string" + } + }, + "description": "Intentionally complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] + } + }, + { + "name": "updateMask", + "description": "The paths to update.", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + }, + "patch": { + "operationId": "ABitOfEverythingService_UpdateV22", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", "schema": { "$ref": "#/definitions/examplepbErrorResponse" } @@ -2884,11 +3312,208 @@ "type": "string" }, { - "name": "body", + "name": "abe", + "description": "A bit of everything\n\nIntentionally complicated message type to cover many features of Protobuf.", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" + "type": "object", + "example": { + "int64_value": 12, + "double_value": 12.3 + }, + "properties": { + "singleNested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "floatValue" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + }, + "optionalStringValue": { + "type": "string" + } + }, + "description": "Intentionally complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] } }, { @@ -3025,7 +3650,7 @@ }, "parameters": [ { - "name": "body", + "name": "value", "in": "body", "required": true, "schema": { @@ -3334,7 +3959,7 @@ "type": "string" }, { - "name": "body", + "name": "data", "in": "body", "required": true, "schema": { @@ -3456,7 +4081,219 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/examplepbUpdateV2Request" + "type": "object", + "properties": { + "abe": { + "type": "object", + "example": { + "int64_value": 12, + "double_value": 12.3 + }, + "properties": { + "singleNested": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "nested": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "floatValue": { + "type": "number", + "format": "float", + "default": "0.2", + "description": "Float value field", + "required": [ + "floatValue" + ] + }, + "doubleValue": { + "type": "number", + "format": "double" + }, + "int64Value": { + "type": "string", + "format": "int64" + }, + "uint64Value": { + "type": "string", + "format": "uint64" + }, + "int32Value": { + "type": "integer", + "format": "int32" + }, + "fixed64Value": { + "type": "string", + "format": "uint64" + }, + "fixed32Value": { + "type": "integer", + "format": "int64" + }, + "boolValue": { + "type": "boolean" + }, + "stringValue": { + "type": "string" + }, + "bytesValue": { + "type": "string", + "format": "byte" + }, + "uint32Value": { + "type": "integer", + "format": "int64" + }, + "enumValue": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "pathEnumValue": { + "$ref": "#/definitions/pathenumPathEnum" + }, + "nestedPathEnumValue": { + "$ref": "#/definitions/MessagePathEnumNestedPathEnum" + }, + "sfixed32Value": { + "type": "integer", + "format": "int32" + }, + "sfixed64Value": { + "type": "string", + "format": "int64" + }, + "sint32Value": { + "type": "integer", + "format": "int32" + }, + "sint64Value": { + "type": "string", + "format": "int64" + }, + "repeatedStringValue": { + "type": "array", + "items": { + "type": "string" + } + }, + "oneofEmpty": { + "properties": {} + }, + "oneofString": { + "type": "string" + }, + "mapValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "mappedStringValue": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "mappedNestedValue": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ABitOfEverythingNested" + } + }, + "nonConventionalNameValue": { + "type": "string" + }, + "timestampValue": { + "type": "string", + "format": "date-time" + }, + "repeatedEnumValue": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "title": "repeated enum value. it is comma-separated in query" + }, + "repeatedEnumAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/examplepbNumericEnum" + }, + "description": "Repeated numeric enum description.", + "title": "Repeated numeric enum title" + }, + "enumValueAnnotation": { + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" + }, + "repeatedStringAnnotation": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Repeated string description.", + "title": "Repeated string title" + }, + "repeatedNestedAnnotation": { + "type": "array", + "items": { + "$ref": "#/definitions/ABitOfEverythingNested" + }, + "description": "Repeated nested object description.", + "title": "Repeated nested object title" + }, + "nestedAnnotation": { + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" + }, + "int64OverrideType": { + "type": "integer", + "format": "int64" + }, + "requiredStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as required in Open API definition", + "required": [ + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "outputOnlyStringViaFieldBehaviorAnnotation": { + "type": "string", + "title": "mark a field as readonly in Open API definition", + "readOnly": true + }, + "optionalStringValue": { + "type": "string" + } + }, + "description": "Intentionally complicated message type to cover many features of Protobuf.", + "title": "A bit of everything", + "externalDocs": { + "description": "Find out more about ABitOfEverything", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + }, + "required": [ + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] + }, + "updateMask": { + "type": "string", + "description": "The paths to update." + } + }, + "title": "UpdateV2Request request for update includes the message and the update mask", + "required": [ + "int64Value", + "doubleValue", + "floatValue", + "requiredStringViaFieldBehaviorAnnotation" + ] } } ], @@ -3589,7 +4426,7 @@ "default": "0.2", "description": "Float value field", "required": [ - "float_value" + "floatValue" ] }, "doubleValue": { @@ -3741,7 +4578,7 @@ "type": "string", "title": "mark a field as required in Open API definition", "required": [ - "required_string_via_field_behavior_annotation" + "requiredStringViaFieldBehaviorAnnotation" ] }, "outputOnlyStringViaFieldBehaviorAnnotation": { @@ -3753,7 +4590,7 @@ "type": "string" } }, - "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "title": "A bit of everything", "externalDocs": { "description": "Find out more about ABitOfEverything", @@ -3976,19 +4813,6 @@ "default": "ZERO", "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" }, - "examplepbUpdateV2Request": { - "type": "object", - "properties": { - "abe": { - "$ref": "#/definitions/examplepbABitOfEverything" - }, - "updateMask": { - "type": "string", - "description": "The paths to update." - } - }, - "title": "UpdateV2Request request for update includes the message and the update mask" - }, "pathenumPathEnum": { "type": "string", "enum": [ diff --git a/examples/internal/proto/examplepb/flow_combination.swagger.json b/examples/internal/proto/examplepb/flow_combination.swagger.json index 27fe73b8e58..11f0b44bcdc 100644 --- a/examples/internal/proto/examplepb/flow_combination.swagger.json +++ b/examples/internal/proto/examplepb/flow_combination.swagger.json @@ -41,7 +41,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -94,7 +94,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -144,7 +144,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -197,7 +197,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -229,7 +229,7 @@ }, "parameters": [ { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -282,7 +282,7 @@ }, "parameters": [ { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -533,7 +533,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -586,7 +586,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -717,7 +717,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { @@ -770,7 +770,7 @@ "type": "string" }, { - "name": "body", + "name": "c", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index a8eed1b13b4..65bc2235689 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -115,7 +115,7 @@ "default": "0.2", "description": "Float value field", "required": [ - "float_value" + "floatValue" ] }, "doubleValue": { @@ -267,7 +267,7 @@ "type": "string", "title": "mark a field as required in Open API definition", "required": [ - "required_string_via_field_behavior_annotation" + "requiredStringViaFieldBehaviorAnnotation" ] }, "outputOnlyStringViaFieldBehaviorAnnotation": { @@ -279,7 +279,7 @@ "type": "string" } }, - "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "title": "A bit of everything", "externalDocs": { "description": "Find out more about ABitOfEverything", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index fba2820fa01..f78bd4d4135 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -242,7 +242,7 @@ "default": "0.2", "description": "Float value field", "required": [ - "float_value" + "floatValue" ] }, "doubleValue": { @@ -394,7 +394,7 @@ "type": "string", "title": "mark a field as required in Open API definition", "required": [ - "required_string_via_field_behavior_annotation" + "requiredStringViaFieldBehaviorAnnotation" ] }, "outputOnlyStringViaFieldBehaviorAnnotation": { @@ -406,7 +406,7 @@ "type": "string" } }, - "description": "Intentionaly complicated message type to cover many features of Protobuf.", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "title": "A bit of everything", "externalDocs": { "description": "Find out more about ABitOfEverything", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index c503be78eb7..bc18775eee1 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -37,6 +37,8 @@ import ( // this will be hidden from the real grpc gateway consumer. const pathParamUniqueSuffixDeliminator = "_" +const paragraphDeliminator = "\n\n" + // wktSchemas are the schemas of well-known-types. // The schemas must match with the behavior of the JSON unmarshaler in // https://github.com/protocolbuffers/protobuf-go/blob/v1.25.0/encoding/protojson/well_known_types.go @@ -240,15 +242,12 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre if items != nil && (items.Type == "" || items.Type == "object") && !isEnum { return nil, nil // TODO: currently, mapping object in query parameter is not supported } - desc := schema.Description - if schema.Title != "" { // merge title because title of parameter object will be ignored - desc = strings.TrimSpace(schema.Title + ". " + schema.Description) - } + desc := mergeDescription(schema) // verify if the field is required required := false for _, fieldName := range schema.Required { - if fieldName == field.GetName() { + if fieldName == reg.FieldName(field) { required = true break } @@ -395,7 +394,7 @@ func skipRenderingRef(refName string) bool { return ok } -func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry, customRefs refMap, excludeFields []*descriptor.Field) openapiSchemaObject { +func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry, customRefs refMap, pathParams []descriptor.Parameter) (openapiSchemaObject, error) { schema := openapiSchemaObject{ schemaCore: schemaCore{ Type: "object", @@ -403,11 +402,11 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry } msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) if err := updateOpenAPIDataFromComments(reg, &schema, msg, msgComments, false); err != nil { - panic(err) + return openapiSchemaObject{}, err } opts, err := getMessageOpenAPIOption(reg, msg) if err != nil { - panic(err) + return openapiSchemaObject{}, err } if opts != nil { protoSchema := openapiSchemaFromProtoSchema(opts, reg, customRefs, msg) @@ -445,33 +444,31 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry } } - schema.Required = filterOutExcludedFields(schema.Required, excludeFields, reg) + schema.Required = filterOutExcludedFields(schema.Required, pathParams) for _, f := range msg.Fields { - if shouldExcludeField(reg.FieldName(f), excludeFields, reg) { + if shouldExcludeField(f.GetName(), pathParams) { continue } - fieldValue := schemaOfField(f, reg, customRefs) + subPathParams := subPathParams(f.GetName(), pathParams) + fieldSchema, err := renderFieldAsDefinition(f, reg, customRefs, subPathParams) + if err != nil { + return openapiSchemaObject{}, err + } comments := fieldProtoComments(reg, msg, f) - if err := updateOpenAPIDataFromComments(reg, &fieldValue, f, comments, false); err != nil { - panic(err) + if err := updateOpenAPIDataFromComments(reg, &fieldSchema, f, comments, false); err != nil { + return openapiSchemaObject{}, err } if requiredIdx := find(schema.Required, *f.Name); requiredIdx != -1 && reg.GetUseJSONNamesForFields() { schema.Required[requiredIdx] = f.GetJsonName() } - if fieldValue.Required != nil { - for _, req := range fieldValue.Required { - if reg.GetUseJSONNamesForFields() { - schema.Required = append(schema.Required, f.GetJsonName()) - } else { - schema.Required = append(schema.Required, req) - } - } + if fieldSchema.Required != nil { + schema.Required = append(schema.Required, fieldSchema.Required...) } - kv := keyVal{Value: fieldValue} + kv := keyVal{Value: fieldSchema} kv.Key = reg.FieldName(f) if schema.Properties == nil { schema.Properties = &openapiSchemaObjectProperties{} @@ -483,7 +480,33 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry transformAnyForJSON(&schema, reg.GetUseJSONNamesForFields()) } - return schema + return schema, nil +} + +func renderFieldAsDefinition(f *descriptor.Field, reg *descriptor.Registry, refs refMap, pathParams []descriptor.Parameter) (openapiSchemaObject, error) { + if len(pathParams) == 0 { + return schemaOfField(f, reg, refs), nil + } + location := "" + if ix := strings.LastIndex(f.Message.FQMN(), "."); ix > 0 { + location = f.Message.FQMN()[0:ix] + } + msg, err := reg.LookupMsg(location, f.GetTypeName()) + if err != nil { + return openapiSchemaObject{}, err + } + schema, err := renderMessageAsDefinition(msg, reg, refs, pathParams) + if err != nil { + return openapiSchemaObject{}, err + } + comments := fieldProtoComments(reg, f.Message, f) + if len(comments) > 0 { + // Use title and description from field instead of nested message if present. + paragraphs := strings.Split(comments, paragraphDeliminator) + schema.Title = strings.TrimSpace(paragraphs[0]) + schema.Description = strings.TrimSpace(strings.Join(paragraphs[1:], paragraphDeliminator)) + } + return schema, nil } // transformAnyForJSON should be called when the schema object represents a google.protobuf.Any, and will replace the @@ -509,11 +532,11 @@ func transformAnyForJSON(schema *openapiSchemaObject, useJSONNames bool) { } } -func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap, excludeFields []*descriptor.Field) { +func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, reg *descriptor.Registry, customRefs refMap, pathParams []descriptor.Parameter) error { for name, msg := range messages { swgName, ok := fullyQualifiedNameToOpenAPIName(msg.FQMN(), reg) if !ok { - panic(fmt.Sprintf("can't resolve OpenAPI name from '%v'", msg.FQMN())) + return fmt.Errorf("can't resolve OpenAPI name from '%v'", msg.FQMN()) } if skipRenderingRef(name) { continue @@ -522,22 +545,27 @@ func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, if opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { continue } - d[swgName] = renderMessageAsDefinition(msg, reg, customRefs, excludeFields) + var err error + d[swgName], err = renderMessageAsDefinition(msg, reg, customRefs, pathParams) + if err != nil { + return err + } } + return nil } -func shouldExcludeField(name string, excluded []*descriptor.Field, reg *descriptor.Registry) bool { - for _, f := range excluded { - if name == reg.FieldName(f) { +func shouldExcludeField(name string, excluded []descriptor.Parameter) bool { + for _, p := range excluded { + if len(p.FieldPath) == 1 && name == p.FieldPath[0].Name { return true } } return false } -func filterOutExcludedFields(fields []string, excluded []*descriptor.Field, reg *descriptor.Registry) []string { +func filterOutExcludedFields(fields []string, excluded []descriptor.Parameter) []string { var filtered []string for _, f := range fields { - if !shouldExcludeField(f, excluded, reg) { + if !shouldExcludeField(f, excluded) { filtered = append(filtered, f) } } @@ -557,7 +585,11 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o ) fd := f.FieldDescriptorProto - if m, err := reg.LookupMsg("", f.GetTypeName()); err == nil { + location := "" + if ix := strings.LastIndex(f.Message.FQMN(), "."); ix > 0 { + location = f.Message.FQMN()[0:ix] + } + if m, err := reg.LookupMsg(location, f.GetTypeName()); err == nil { if opt := m.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { fd = m.GetField()[1] aggregate = object @@ -573,7 +605,6 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o case descriptorpb.FieldDescriptorProto_TYPE_ENUM, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP: if wktSchema, ok := wktSchemas[fd.GetTypeName()]; ok { core = wktSchema - if fd.GetTypeName() == ".google.protobuf.Empty" { props = &openapiSchemaObjectProperties{} } @@ -627,7 +658,7 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o } if j, err := getFieldBehaviorOption(reg, f); err == nil { - updateSwaggerObjectFromFieldBehavior(&ret, j, f) + updateSwaggerObjectFromFieldBehavior(&ret, j, reg, f) } if reg.GetProto3OptionalNullable() && f.GetProto3Optional() { @@ -1012,51 +1043,65 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } // Now check if there is a body parameter if b.Body != nil { + // Recursively render fields as definitions as long as they contain path parameters. + // Special case for top level body if we don't have a body field. var schema openapiSchemaObject desc := "" - + var bodyFieldName string + schema = openapiSchemaObject{ + schemaCore: schemaCore{}, + } if len(b.Body.FieldPath) == 0 { - schema = openapiSchemaObject{ - schemaCore: schemaCore{}, - } - + // No field for body, use type. + bodyFieldName = "body" wknSchemaCore, isWkn := wktSchemas[meth.RequestType.FQMN()] - if !isWkn { - var bodyExcludedFields []*descriptor.Field - if len(b.PathParams) != 0 { - for _, p := range b.PathParams { - // We only support excluding top-level fields captured by path parameters. - if len(p.FieldPath) == 1 { - bodyExcludedFields = append(bodyExcludedFields, p.FieldPath[0].Target) - } - } + if isWkn { + schema.schemaCore = wknSchemaCore + // Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher. + if meth.RequestType.FQMN() == ".google.protobuf.Empty" { + schema.Properties = &openapiSchemaObjectProperties{} } - if len(bodyExcludedFields) != 0 { - schema = renderMessageAsDefinition(meth.RequestType, reg, customRefs, bodyExcludedFields) - if schema.Properties == nil || len(*schema.Properties) == 0 { - glog.Warningf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) + } else { + if len(b.PathParams) == 0 { + err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) + if err != nil { + return err } } else { - err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) + var err error + schema, err = renderMessageAsDefinition(meth.RequestType, reg, customRefs, b.PathParams) if err != nil { return err } - } - } else { - schema.schemaCore = wknSchemaCore - - // Special workaround for Empty: it's well-known type but wknSchemas only returns schema.schemaCore; but we need to set schema.Properties which is a level higher. - if meth.RequestType.FQMN() == ".google.protobuf.Empty" { - schema.Properties = &openapiSchemaObjectProperties{} + if schema.Properties == nil || len(*schema.Properties) == 0 { + glog.Warningf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) + } } } } else { - lastField := b.Body.FieldPath[len(b.Body.FieldPath)-1] - schema = schemaOfField(lastField.Target, reg, customRefs) - if schema.Description != "" { - desc = schema.Description + // Body field path is limited to one path component. From google.api.HttpRule.body: + // "NOTE: the referred field must be present at the top-level of the request message type." + // Ref: https://github.com/googleapis/googleapis/blob/b3397f5febbf21dfc69b875ddabaf76bee765058/google/api/http.proto#L350-L352 + if len(b.Body.FieldPath) > 1 { + return fmt.Errorf("Body of request '%s' is not a top level field: '%v'.", meth.Service.GetName(), b.Body.FieldPath) + } + bodyField := b.Body.FieldPath[0] + if reg.GetUseJSONNamesForFields() { + bodyFieldName = lowerCamelCase(bodyField.Name, meth.RequestType.Fields, msgs) + } else { + bodyFieldName = bodyField.Name + } + // Align pathParams with body field path. + pathParams := subPathParams(bodyFieldName, b.PathParams) + var err error + schema, err = renderFieldAsDefinition(bodyField.Target, reg, customRefs, pathParams) + if err != nil { + return err + } + if schema.Title != "" { + desc = mergeDescription(schema) } else { - desc = fieldProtoComments(reg, lastField.Target.Message, lastField.Target) + desc = fieldProtoComments(reg, bodyField.Target.Message, bodyField.Target) } } @@ -1064,7 +1109,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re desc += " (streaming inputs)" } parameters = append(parameters, openapiParameterObject{ - Name: "body", + Name: bodyFieldName, Description: desc, In: "body", Required: true, @@ -1358,6 +1403,14 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re return nil } +func mergeDescription(schema openapiSchemaObject) string { + desc := schema.Description + if schema.Title != "" { // join title because title of parameter object will be ignored + desc = strings.TrimSpace(schema.Title + paragraphDeliminator + schema.Description) + } + return desc +} + func operationForMethod(httpMethod string) func(*openapiPathItemObject) *openapiOperationObject { switch httpMethod { case "GET": @@ -1419,20 +1472,22 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { // Find all the service's messages and enumerations that are defined (recursively) // and write request, response and other custom (but referenced) types out as definition objects. findServicesMessagesAndEnumerations(p.Services, p.reg, messages, streamingMessages, enums, requestResponseRefs) - renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs, nil) + if err := renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs, nil); err != nil { + return nil, err + } renderEnumerationsAsDefinition(enums, s.Definitions, p.reg) // File itself might have some comments and metadata. packageProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), "Package") packageComments := protoComments(p.reg, p.File, nil, "Package", packageProtoPath) if err := updateOpenAPIDataFromComments(p.reg, &s, p, packageComments, true); err != nil { - panic(err) + return nil, err } // There may be additional options in the OpenAPI option in the proto. spb, err := getFileOpenAPIOption(p.reg, p.File) if err != nil { - panic(err) + return nil, err } if spb != nil { if spb.Swagger != "" { @@ -1646,7 +1701,9 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { // Finally add any references added by users that aren't // otherwise rendered. - addCustomRefs(s.Definitions, p.reg, customRefs) + if err := addCustomRefs(s.Definitions, p.reg, customRefs); err != nil { + return nil, err + } return &s, nil } @@ -1887,13 +1944,13 @@ func updateOpenAPIDataFromComments(reg *descriptor.Registry, swaggerObject inter usingTitle = true } - paragraphs := strings.Split(comment, "\n\n") + paragraphs := strings.Split(comment, paragraphDeliminator) // If there is a summary (or summary-equivalent) and it's empty, use the first // paragraph as summary, and the rest as description. if summaryValue.CanSet() { summary := strings.TrimSpace(paragraphs[0]) - description := strings.TrimSpace(strings.Join(paragraphs[1:], "\n\n")) + description := strings.TrimSpace(strings.Join(paragraphs[1:], paragraphDeliminator)) if !usingTitle || (len(summary) > 0 && summary[len(summary)-1] != '.') { // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition @@ -1918,7 +1975,7 @@ func updateOpenAPIDataFromComments(reg *descriptor.Registry, swaggerObject inter // whole comment into description if the OpenAPI object description is empty. if descriptionValue.CanSet() { if descriptionValue.Len() == 0 || isPackageObject { - descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, "\n\n"))) + descriptionValue.Set(reflect.ValueOf(strings.Join(paragraphs, paragraphDeliminator))) } return nil } @@ -2328,6 +2385,12 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option s.MaxProperties = j.GetMaxProperties() s.MinProperties = j.GetMinProperties() s.Required = j.GetRequired() + if reg.GetUseJSONNamesForFields() { + for i, r := range s.Required { + // TODO(oyvindwe): Look up field and use field.GetJsonName()? + s.Required[i] = doCamelCase(r) + } + } s.Enum = j.GetEnum() if overrideType := j.GetType(); len(overrideType) > 0 { s.Type = strings.ToLower(overrideType[0].String()) @@ -2340,7 +2403,7 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option } } -func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, field *descriptor.Field) { +func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, reg *descriptor.Registry, field *descriptor.Field) { // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 if s.Ref != "" { @@ -2350,7 +2413,11 @@ func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotation for _, fb := range j { switch fb { case annotations.FieldBehavior_REQUIRED: - s.Required = append(s.Required, *field.Name) + if reg.GetUseJSONNamesForFields() { + s.Required = append(s.Required, *field.JsonName) + } else { + s.Required = append(s.Required, *field.Name) + } case annotations.FieldBehavior_OUTPUT_ONLY: s.ReadOnly = true case annotations.FieldBehavior_FIELD_BEHAVIOR_UNSPECIFIED: @@ -2446,9 +2513,9 @@ func protoExternalDocumentationToOpenAPIExternalDocumentation(in *openapi_option } } -func addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs refMap) { +func addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs refMap) error { if len(refs) == 0 { - return + return nil } msgMap := make(messageMap) enumMap := make(enumMap) @@ -2476,11 +2543,13 @@ func addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs re // ?? Should be either enum or msg } - renderMessagesAsDefinition(msgMap, d, reg, refs, nil) + if err := renderMessagesAsDefinition(msgMap, d, reg, refs, nil); err != nil { + return err + } renderEnumerationsAsDefinition(enumMap, d, reg) // Run again in case any new refs were added - addCustomRefs(d, reg, refs) + return addCustomRefs(d, reg, refs) } func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descriptor.Message) string { @@ -2544,3 +2613,20 @@ func find(a []string, x string) int { } return -1 } + +// Make a deep copy of the outer parameters that has paramName as the first component, +// but remove the first component of the field path. +func subPathParams(paramName string, outerParams []descriptor.Parameter) []descriptor.Parameter { + var innerParams []descriptor.Parameter + for _, p := range outerParams { + if len(p.FieldPath) > 1 && p.FieldPath[0].Name == paramName { + subParam := descriptor.Parameter{ + FieldPath: p.FieldPath[1:], + Target: p.Target, + Method: p.Method, + } + innerParams = append(innerParams, subParam) + } + } + return innerParams +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 00beafd4f54..6707fbc59d8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -2297,10 +2297,6 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { Message: nested, FieldDescriptorProto: nested.GetField()[0], } - boolField := &descriptor.Field{ - Message: nested, - FieldDescriptorProto: nested.GetField()[1], - } file := descriptor.File{ FileDescriptorProto: &descriptorpb.FileDescriptorProto{ SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, @@ -2354,10 +2350,6 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { Name: "nested", Target: nestedField, }, - { - Name: "bool", - Target: boolField, - }, }), }, }, @@ -2372,12 +2364,14 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } + fmt.Fprintln(os.Stderr, "fd", file.FileDescriptorProto) err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) if err != nil { t.Fatalf("failed to load code generator request: %v", err) } + fmt.Fprintln(os.Stderr, "AllFQMNs", reg.GetAllFQMNs()) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -2463,10 +2457,6 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { Message: nested, FieldDescriptorProto: nested.GetField()[0], } - boolField := &descriptor.Field{ - Message: nested, - FieldDescriptorProto: nested.GetField()[1], - } file := descriptor.File{ FileDescriptorProto: &descriptorpb.FileDescriptorProto{ SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, @@ -2520,10 +2510,6 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { Name: "nested", Target: nestedField, }, - { - Name: "bool", - Target: boolField, - }, }), }, }, @@ -2848,12 +2834,12 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { }, }, Body: &descriptor.Body{ - FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + FieldPath: []descriptor.FieldPathComponent{ { Name: "book", Target: bookField, }, - }), + }, }, }, }, @@ -2881,7 +2867,7 @@ func TestApplyTemplateRequestWithBodyQueryParameters(t *testing.T) { args: args{file: newFile()}, want: []paramOut{ {"parent", "path", true}, - {"body", "body", true}, + {"book", "body", true}, {"book_id", "query", false}, }, }, @@ -4182,7 +4168,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { schema map[string]openapi_options.Schema // per-message schema to add defs openapiDefinitionsObject openAPIOptions *openapiconfig.OpenAPIOptions - excludedFields []*descriptor.Field + pathParams []descriptor.Parameter }{ { descr: "no OpenAPI options", @@ -4413,7 +4399,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, { - descr: "JSONSchema with excluded fields", + descr: "JSONSchema with path parameters", msgDescs: []*descriptorpb.DescriptorProto{ { Name: proto.String("Message"), @@ -4425,7 +4411,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { Options: requiredField, }, { - Name: proto.String("anExcludedField"), + Name: proto.String("aPathParameter"), Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(2), }, @@ -4464,10 +4450,12 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - excludedFields: []*descriptor.Field{ + pathParams: []descriptor.Parameter{ { - FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ - Name: strPtr("anExcludedField"), + FieldPath: descriptor.FieldPath{ + descriptor.FieldPathComponent{ + Name: ("aPathParameter"), + }, }, }, }, @@ -4589,7 +4577,9 @@ func TestRenderMessagesAsDefinition(t *testing.T) { refs := make(refMap) actual := make(openapiDefinitionsObject) - renderMessagesAsDefinition(msgMap, actual, reg, refs, test.excludedFields) + if err := renderMessagesAsDefinition(msgMap, actual, reg, refs, test.pathParams); err != nil { + t.Errorf("renderMessagesAsDefinition failed with: %s", err) + } if !reflect.DeepEqual(actual, test.defs) { t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) @@ -4598,10 +4588,6 @@ func TestRenderMessagesAsDefinition(t *testing.T) { } } -func strPtr(s string) *string { - return &s -} - func TestUpdateOpenAPIDataFromComments(t *testing.T) { tests := []struct { @@ -4930,7 +4916,9 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { refs := make(refMap) actual := make(openapiDefinitionsObject) - renderMessagesAsDefinition(msgMap, actual, reg, refs, nil) + if err := renderMessagesAsDefinition(msgMap, actual, reg, refs, nil); err != nil { + t.Errorf("renderMessagesAsDefinition failed with: %s", err) + } if !reflect.DeepEqual(actual, test.defs) { t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) @@ -5899,3 +5887,61 @@ func TestParseIncompleteSecurityRequirement(t *testing.T) { return } } + +func TestSubPathParams(t *testing.T) { + outerParams := []descriptor.Parameter{ + { + FieldPath: []descriptor.FieldPathComponent{ + { + Name: "prefix", + }, + { + Name: "first", + }, + }, + }, + { + FieldPath: []descriptor.FieldPathComponent{ + { + Name: "prefix", + }, + { + Name: "second", + }, + { + Name: "deeper", + }, + }, + }, + { + FieldPath: []descriptor.FieldPathComponent{ + { + Name: "otherprefix", + }, + { + Name: "third", + }, + }, + }, + } + subParams := subPathParams("prefix", outerParams) + + if got, want := len(subParams), 2; got != want { + t.Fatalf("Wrong number of path params, got %d want %d", got, want) + } + if got, want := len(subParams[0].FieldPath), 1; got != want { + t.Fatalf("Wrong length of path param 0, got %d want %d", got, want) + } + if got, want := subParams[0].FieldPath[0].Name, "first"; got != want { + t.Fatalf("Wrong path param 0, element 0, got %s want %s", got, want) + } + if got, want := len(subParams[1].FieldPath), 2; got != want { + t.Fatalf("Wrong length of path param 1 got %d want %d", got, want) + } + if got, want := subParams[1].FieldPath[0].Name, "second"; got != want { + t.Fatalf("Wrong path param 1, element 0, got %s want %s", got, want) + } + if got, want := subParams[1].FieldPath[1].Name, "deeper"; got != want { + t.Fatalf("Wrong path param 1, element 1, got %s want %s", got, want) + } +} From b2c605cb595775c1d11395572d820cb8114cc4ce Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 2 Mar 2022 13:11:42 -0500 Subject: [PATCH 1206/1518] Update gorelease base (#2561) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6c1c282dd40..3b599f17681 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.7.3 + - run: gorelease -base=v2.8.0 push_bsr_plugins: docker: - image: circleci/golang From b6cfb7a7ba14dcb2e79c0e17125605543b783a43 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Mar 2022 18:01:15 +0000 Subject: [PATCH 1207/1518] fix(deps): update google.golang.org/genproto commit hash to 862486e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 746545d6109..afa6531c807 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a + google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index d573d92fe1e..71b3f14f0aa 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a h1:uqouglH745GoGeZ1YFZbPBiu961tgi/9Qm5jaorajjQ= -google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc h1:fb/ViRpv3ln/LvbqZtTpoOd1YQDNH12gaGZreoSFovE= +google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b6472ea9260..b4a3b06f75e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:uqouglH745GoGeZ1YFZbPBiu961tgi/9Qm5jaorajjQ=", - version = "v0.0.0-20220302033224-9aa15565e42a", + sum = "h1:fb/ViRpv3ln/LvbqZtTpoOd1YQDNH12gaGZreoSFovE=", + version = "v0.0.0-20220303160752-862486edd9cc", ) go_repository( name = "org_golang_google_grpc", From 6941e818ef6aaa3ab766c4fd1e20ba6d86707e5f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Mar 2022 23:51:04 +0000 Subject: [PATCH 1208/1518] chore(deps): update dependency golang to v1.17.8 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c678610d995..bcfe6e82484 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.7 +FROM golang:1.17.8 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 755162ee261..3c7302389bb 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.7 as builder +FROM golang:1.17.8 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 3a494163d82..57a49a4a1c2 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.7 as builder +FROM golang:1.17.8 as builder ARG RELEASE_VERSION From 52e13fa797c1ccaa5502d7cd5f54bedfc1245627 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Mar 2022 16:05:59 +0000 Subject: [PATCH 1209/1518] fix(deps): update google.golang.org/genproto commit hash to 325a892 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index afa6531c807..3da427d2a14 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc + google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 71b3f14f0aa..fcb2eb8654c 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc h1:fb/ViRpv3ln/LvbqZtTpoOd1YQDNH12gaGZreoSFovE= -google.golang.org/genproto v0.0.0-20220303160752-862486edd9cc/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b4a3b06f75e..2d32c106d8e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fb/ViRpv3ln/LvbqZtTpoOd1YQDNH12gaGZreoSFovE=", - version = "v0.0.0-20220303160752-862486edd9cc", + sum = "h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ=", + version = "v0.0.0-20220304144024-325a89244dc8", ) go_repository( name = "org_golang_google_grpc", From 386396fd896c0f6579219583956d7a0c907f957f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 7 Mar 2022 19:56:35 +0000 Subject: [PATCH 1210/1518] fix(deps): update google.golang.org/genproto commit hash to 659dce7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3da427d2a14..5df3aafc732 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 + google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index fcb2eb8654c..3bdd3b13b45 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03 h1:roRqEkPqsCOa0ViO0CuSwDIVdttRbBMj8oU/2E7pI08= +google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2d32c106d8e..27e5f9e3378 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ=", - version = "v0.0.0-20220304144024-325a89244dc8", + sum = "h1:roRqEkPqsCOa0ViO0CuSwDIVdttRbBMj8oU/2E7pI08=", + version = "v0.0.0-20220307174427-659dce7fcb03", ) go_repository( name = "org_golang_google_grpc", From d27e1229d33cfe6f8fde11caec46a4102325a90a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 8 Mar 2022 17:57:27 +0000 Subject: [PATCH 1211/1518] fix(deps): update google.golang.org/genproto commit hash to ae0e222 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5df3aafc732..2419fdcdfce 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b - google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03 + google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 3bdd3b13b45..afd7fe7cd90 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03 h1:roRqEkPqsCOa0ViO0CuSwDIVdttRbBMj8oU/2E7pI08= -google.golang.org/genproto v0.0.0-20220307174427-659dce7fcb03/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 h1:J5ZNG1QIdstOl8aaUoFoQJfp04FKTsFV+jwkBHEchqs= +google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 27e5f9e3378..bf2544ee8c6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:roRqEkPqsCOa0ViO0CuSwDIVdttRbBMj8oU/2E7pI08=", - version = "v0.0.0-20220307174427-659dce7fcb03", + sum = "h1:J5ZNG1QIdstOl8aaUoFoQJfp04FKTsFV+jwkBHEchqs=", + version = "v0.0.0-20220308174144-ae0e22291548", ) go_repository( name = "org_golang_google_grpc", From c6ac6c90fc4d457376cd88b6fd859aa6264d3a5d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Mar 2022 20:09:30 -0500 Subject: [PATCH 1212/1518] fix(deps): update golang.org/x/oauth2 commit hash to 6242fa9 (#2576) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2419fdcdfce..4c4610ff9bd 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b + golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.27.1 diff --git a/go.sum b/go.sum index afd7fe7cd90..e7d066ce24b 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index bf2544ee8c6..8b81f7583fc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1144,8 +1144,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=", - version = "v0.0.0-20220223155221-ee480838109b", + sum = "h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=", + version = "v0.0.0-20220309155454-6242fa91716a", ) go_repository( name = "org_golang_x_sync", From c0ecb4233fcc77ec3cbec1cca006da01885989ba Mon Sep 17 00:00:00 2001 From: Roger Chapman Date: Thu, 10 Mar 2022 12:20:25 +1100 Subject: [PATCH 1213/1518] Pass annotated context to forward response handlers (#2574) --- .../internal/helloworld/helloworld.pb.gw.go | 100 ++++--- .../internal/integration/integration_test.go | 46 ++- .../examplepb/a_bit_of_everything.pb.gw.go | 280 +++++++++++------- .../proto/examplepb/echo_service.pb.gw.go | 90 +++--- .../proto/examplepb/flow_combination.pb.gw.go | 190 +++++++----- .../generate_unbound_methods.pb.gw.go | 30 +- .../examplepb/non_standard_names.pb.gw.go | 20 +- .../proto/examplepb/openapi_merge_a.pb.gw.go | 40 ++- .../proto/examplepb/openapi_merge_b.pb.gw.go | 20 +- .../examplepb/response_body_service.pb.gw.go | 35 ++- .../internal/proto/examplepb/stream.pb.gw.go | 20 +- .../unannotated_echo_service.pb.gw.go | 40 ++- .../proto/examplepb/use_go_template.pb.gw.go | 20 +- .../proto/examplepb/wrappers.pb.gw.go | 110 ++++--- .../unannotated_echo_service.pb.gw.go | 70 +++-- .../internal/gengateway/template.go | 14 +- .../internal/gengateway/template_test.go | 4 +- 17 files changed, 689 insertions(+), 440 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index a9de3f25404..13abeeb8d84 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -743,12 +743,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -766,12 +767,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -789,12 +791,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -812,12 +815,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_3(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_3(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -835,12 +839,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_4(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_4(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -858,12 +863,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_5(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_5(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -881,12 +887,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_6(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_6(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -904,12 +911,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_7(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_7(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -927,12 +935,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_8(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_8(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -950,12 +959,13 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_9(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_9(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1012,12 +1022,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1032,12 +1043,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1052,12 +1064,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1072,12 +1085,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_3(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_3(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1092,12 +1106,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_4(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_4(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1112,12 +1127,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_5(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_5(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1132,12 +1148,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_6(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_6(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1152,12 +1169,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_7(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_7(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1172,12 +1190,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_8(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_8(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1192,12 +1211,13 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_9(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Greeter_SayHello_9(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 0af113e8909..19de3ae3291 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -100,9 +100,12 @@ func TestEchoPatch(t *testing.T) { StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ "layered_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "struct_val"}}, }}, - }}}}, - ValueField: &structpb.Value{Kind: &structpb.Value_StructValue{StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ - "value_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "value_struct_val"}}}}, + }}, + }}, + ValueField: &structpb.Value{Kind: &structpb.Value_StructValue{ + StructValue: &structpb.Struct{Fields: map[string]*structpb.Value{ + "value_struct_key": {Kind: &structpb.Value_StringValue{StringValue: "value_struct_val"}}, + }}, }}, } payload, err := protojson.MarshalOptions{UseProtoNames: true}.Marshal(&sent) @@ -180,6 +183,39 @@ func TestForwardResponseOption(t *testing.T) { testEcho(t, port, "v1", "application/vnd.docker.plugins.v1.1+json") } +func TestForwardResponseOptionHTTPPathPattern(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + + ctx := context.Background() + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + port := 7080 + go func() { + if err := runGateway( + ctx, + fmt.Sprintf(":%d", port), + runtime.WithForwardResponseOption( + func(ctx context.Context, w http.ResponseWriter, _ proto.Message) error { + path, _ := runtime.HTTPPathPattern(ctx) + w.Header().Set("Content-Type", path) + return nil + }, + ), + ); err != nil { + t.Errorf("runGateway() failed with %v; want success", err) + return + } + }() + if err := waitForGateway(ctx, uint16(port)); err != nil { + t.Errorf("waitForGateway(ctx, %d) failed with %v; want success", port, err) + } + testEcho(t, port, "v1", "/v1/example/echo/{id}") +} + func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo/myid", port, apiPrefix) resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) @@ -1115,7 +1151,7 @@ func testABELookupNotFound(t *testing.T, port int, useTrailers bool) { t.Errorf("Grpc-Metadata-Uuid was %s, wanted %s", got, want) } - var trailers = map[bool]map[string]string{ + trailers := map[bool]map[string]string{ true: { "Grpc-Trailer-Foo": "foo2", "Grpc-Trailer-Bar": "bar2", @@ -1542,7 +1578,6 @@ func TestPostWithEmptyBody(t *testing.T) { apiURL := "http://localhost:8088/v2/example/postwithemptybody/name" rep, err := http.Post(apiURL, "application/json", nil) - if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return @@ -1888,7 +1923,6 @@ func testResponseStrings(t *testing.T, port int) { t.Errorf(diff) } }) - } func TestRequestQueryParams(t *testing.T) { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index d138698e894..254698b4554 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2351,12 +2351,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Create_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Create_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2374,12 +2375,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CreateBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CreateBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2397,12 +2399,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CreateBook_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CreateBook_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2420,12 +2423,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2443,12 +2447,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Lookup_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Lookup_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2466,12 +2471,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Update_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2489,12 +2495,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2512,12 +2519,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2535,12 +2543,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2558,12 +2567,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Delete_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Delete_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2581,12 +2591,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetQuery_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetQuery_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2604,12 +2615,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2627,12 +2639,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2650,12 +2663,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2673,12 +2687,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2696,12 +2711,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2719,12 +2735,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Timeout_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Timeout_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2742,12 +2759,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2765,12 +2783,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2788,12 +2807,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2811,12 +2831,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2834,12 +2855,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2857,12 +2879,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2880,12 +2903,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2903,12 +2927,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckExternalPathEnum_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2926,12 +2951,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2949,12 +2975,13 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckStatus_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckStatus_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -2981,12 +3008,13 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CamelCaseServiceName_Empty_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CamelCaseServiceName_Empty_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -3043,12 +3071,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Create_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Create_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3063,12 +3092,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CreateBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CreateBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3083,12 +3113,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CreateBook_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CreateBook_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3103,12 +3134,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateBook_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_UpdateBook_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3123,12 +3155,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Lookup_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Lookup_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3143,12 +3176,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Update_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Update_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3163,12 +3197,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_UpdateV2_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3183,12 +3218,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_UpdateV2_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3203,12 +3239,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_UpdateV2_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3223,12 +3260,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Delete_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Delete_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3243,12 +3281,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetQuery_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_GetQuery_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3263,12 +3302,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3283,12 +3323,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3303,12 +3344,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3323,12 +3365,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3343,12 +3386,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_DeepPathEcho_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_DeepPathEcho_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3363,12 +3407,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Timeout_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_Timeout_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3383,12 +3428,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_ErrorWithDetails_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_ErrorWithDetails_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3403,12 +3449,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetMessageWithBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_GetMessageWithBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3423,12 +3470,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_PostWithEmptyBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_PostWithEmptyBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3443,12 +3491,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3463,12 +3512,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3483,12 +3533,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3503,12 +3554,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3523,12 +3575,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckExternalPathEnum_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3543,12 +3596,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3563,12 +3617,13 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckStatus_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ABitOfEverythingService_CheckStatus_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -3736,12 +3791,13 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CamelCaseServiceName_Empty_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_CamelCaseServiceName_Empty_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 4600a75bfbf..8a482c994ce 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -685,12 +685,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -708,12 +709,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -731,12 +733,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -754,12 +757,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_3(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_3(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -777,12 +781,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_4(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_4(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -800,12 +805,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -823,12 +829,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -846,12 +853,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoPatch_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoPatch_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -869,12 +877,13 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoUnauthorized_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoUnauthorized_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -931,12 +940,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -951,12 +961,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -971,12 +982,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -991,12 +1003,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_3(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_Echo_3(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1011,12 +1024,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_4(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_Echo_4(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1031,12 +1045,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1051,12 +1066,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoDelete_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1071,12 +1087,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoPatch_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_EchoPatch_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1091,12 +1108,13 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoUnauthorized_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_EchoService_EchoUnauthorized_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 1dcfbc106f9..4a47da07f16 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1454,12 +1454,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1498,12 +1499,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1521,12 +1523,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1544,12 +1547,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1567,12 +1571,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_3(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_3(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1590,12 +1595,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_4(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_4(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1613,12 +1619,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_5(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_5(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1636,12 +1643,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_6(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_6(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1659,12 +1667,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1682,12 +1691,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1705,12 +1715,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1728,12 +1739,13 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -1867,12 +1879,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcEmptyRpc_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcEmptyRpc_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1887,12 +1900,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", runtime.WithHTTPPathPattern("/rpc/empty/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", runtime.WithHTTPPathPattern("/rpc/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcEmptyStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1907,12 +1921,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", runtime.WithHTTPPathPattern("/stream/empty/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", runtime.WithHTTPPathPattern("/stream/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_StreamEmptyRpc_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_StreamEmptyRpc_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1927,12 +1942,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", runtime.WithHTTPPathPattern("/stream/empty/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", runtime.WithHTTPPathPattern("/stream/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_StreamEmptyStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_StreamEmptyStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1947,12 +1963,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1967,12 +1984,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -1987,12 +2005,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2007,12 +2026,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_3(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_3(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2027,12 +2047,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_4(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_4(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2047,12 +2068,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_5(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_5(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2067,12 +2089,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_6(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyRpc_6(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2087,12 +2110,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathSingleNestedRpc_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathSingleNestedRpc_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2107,12 +2131,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2127,12 +2152,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2147,12 +2173,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2167,12 +2194,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2187,12 +2215,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2207,12 +2236,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/query/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2227,12 +2257,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_3(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_3(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2247,12 +2278,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/query/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_4(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_4(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2267,12 +2299,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_5(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_5(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2287,12 +2320,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_6(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcBodyStream_6(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2307,12 +2341,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2327,12 +2362,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2347,12 +2383,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -2367,12 +2404,13 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/stream")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_FlowCombination_RpcPathNestedStream_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go index 6f9a3127109..85748496d9a 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go @@ -145,12 +145,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -168,12 +169,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -191,12 +193,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -253,12 +256,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_GenerateUnboundMethodsEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -273,12 +277,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_EchoBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -293,12 +298,13 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_EchoDelete_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 5895118af26..729d6c64373 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -175,12 +175,13 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NonStandardService_Update_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NonStandardService_Update_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -198,12 +199,13 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -260,12 +262,13 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_NonStandardService_Update_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_NonStandardService_Update_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -280,12 +283,13 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_NonStandardService_UpdateWithJSONNames_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_NonStandardService_UpdateWithJSONNames_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go index 88e1cfaf461..d5d70b01891 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -179,12 +179,13 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceA_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceA_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -202,12 +203,13 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceA_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceA_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -234,12 +236,13 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceC_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceC_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -257,12 +260,13 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceC_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceC_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -319,12 +323,13 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceA_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceA_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -339,12 +344,13 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceA_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceA_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -412,12 +418,13 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceC_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceC_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -432,12 +439,13 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceC_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceC_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go index a9d82480425..72eaeee7d8a 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -111,12 +111,13 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceB_MethodOne_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceB_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -134,12 +135,13 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceB_MethodTwo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceB_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -196,12 +198,13 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceB_MethodOne_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceB_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -216,12 +219,13 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceB_MethodTwo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ServiceB_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index e64358861f0..3cc7b5c6d41 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -233,12 +233,13 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_GetResponseBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_GetResponseBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -256,12 +257,13 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -279,12 +281,13 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -348,12 +351,13 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_GetResponseBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ResponseBodyService_GetResponseBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -368,12 +372,13 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_ListResponseBodies_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ResponseBodyService_ListResponseBodies_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -388,12 +393,13 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_ListResponseStrings_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ResponseBodyService_ListResponseStrings_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -408,12 +414,13 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", runtime.WithHTTPPathPattern("/responsebody/stream/{data}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", runtime.WithHTTPPathPattern("/responsebody/stream/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index a760748726d..9467d888c3e 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -233,12 +233,13 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/bulk")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/bulk")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_BulkCreate_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_StreamService_BulkCreate_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -253,12 +254,13 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_List_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_StreamService_List_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -273,12 +275,13 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_BulkEcho_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_StreamService_BulkEcho_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -293,12 +296,13 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", runtime.WithHTTPPathPattern("/v1/example/download")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", runtime.WithHTTPPathPattern("/v1/example/download")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_Download_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_StreamService_Download_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index d0299af3c16..8b6c8aaf744 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -273,12 +273,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -296,12 +297,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -319,12 +321,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -342,12 +345,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -404,12 +408,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -424,12 +429,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -444,12 +450,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -464,12 +471,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 8b1f23855a4..9906f3ba37b 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -111,12 +111,13 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_LoginService_Login_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_LoginService_Login_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -134,12 +135,13 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_LoginService_Logout_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_LoginService_Logout_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -196,12 +198,13 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_LoginService_Login_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_LoginService_Login_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -216,12 +219,13 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_LoginService_Logout_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_LoginService_Logout_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 70142211250..02b39e20a0e 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -419,12 +419,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_Create_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_Create_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -442,12 +443,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateStringValue_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateStringValue_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -465,12 +467,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateInt32Value_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateInt32Value_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -488,12 +491,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateInt64Value_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateInt64Value_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -511,12 +515,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateFloatValue_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateFloatValue_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -534,12 +539,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateDoubleValue_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateDoubleValue_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -557,12 +563,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateBoolValue_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateBoolValue_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -580,12 +587,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateUInt32Value_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateUInt32Value_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -603,12 +611,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateUInt64Value_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateUInt64Value_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -626,12 +635,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateBytesValue_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateBytesValue_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -649,12 +659,13 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateEmpty_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateEmpty_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -711,12 +722,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_Create_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_Create_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -731,12 +743,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateStringValue_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateStringValue_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -751,12 +764,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateInt32Value_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateInt32Value_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -771,12 +785,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateInt64Value_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateInt64Value_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -791,12 +806,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateFloatValue_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateFloatValue_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -811,12 +827,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateDoubleValue_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateDoubleValue_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -831,12 +848,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateBoolValue_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateBoolValue_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -851,12 +869,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateUInt32Value_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateUInt32Value_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -871,12 +890,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateUInt64Value_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateUInt64Value_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -891,12 +911,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateBytesValue_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateBytesValue_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -911,12 +932,13 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateEmpty_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_WrappersService_CreateEmpty_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index f086e9b4e20..f950dff71dd 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -584,12 +584,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -607,12 +608,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -630,12 +632,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -653,12 +656,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_3(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_3(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -676,12 +680,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_4(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_4(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -699,12 +704,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -722,12 +728,13 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -784,12 +791,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -804,12 +812,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -824,12 +833,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_2(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -844,12 +854,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_3(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_3(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -864,12 +875,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_4(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_Echo_4(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -884,12 +896,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -904,12 +917,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index d07dc67144b..99e8817acfe 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -595,16 +595,17 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error {{- if $b.PathTmpl }} - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) {{- else -}} - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -675,16 +676,17 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, {{- end }} defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error {{- if $b.PathTmpl }} - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) {{- else -}} - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 2da7e8bbba3..e8acf95ae0c 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -254,7 +254,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `rctx, err := runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo", runtime.WithHTTPPathPattern("/v1"))`; !strings.Contains(got, want) { + if want := `ctx, err = runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo", runtime.WithHTTPPathPattern("/v1"))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } @@ -462,7 +462,7 @@ func TestApplyTemplateInProcess(t *testing.T) { serverStreaming: false, sigWant: []string{ `func local_request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ExampleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`, - `resp, md, err := local_request_ExampleService_Echo_0(rctx, inboundMarshaler, server, req, pathParams)`, + `resp, md, err := local_request_ExampleService_Echo_0(ctx, inboundMarshaler, server, req, pathParams)`, }, }, { From 42ceffb9724ea829f1ddf57b5d7fe67ff65aa706 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 10 Mar 2022 06:18:51 +0000 Subject: [PATCH 1214/1518] fix(deps): update module google.golang.org/grpc to v1.45.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 4c4610ff9bd..674bb1b132e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 - google.golang.org/grpc v1.44.0 + google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index e7d066ce24b..e533e869ff6 100644 --- a/go.sum +++ b/go.sum @@ -383,8 +383,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index 8b81f7583fc..d0a6ca44f39 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=", - version = "v1.44.0", + sum = "h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=", + version = "v1.45.0", ) go_repository( From fd05816c26a7cf00a78b7f0da550b10a6227d560 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Mar 2022 15:17:54 +0000 Subject: [PATCH 1215/1518] fix(deps): update google.golang.org/genproto commit hash to 1973136 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 674bb1b132e..e8dd490b8b0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 + google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index e533e869ff6..42a15db5df9 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548 h1:J5ZNG1QIdstOl8aaUoFoQJfp04FKTsFV+jwkBHEchqs= -google.golang.org/genproto v0.0.0-20220308174144-ae0e22291548/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d0a6ca44f39..1e5c3874355 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:J5ZNG1QIdstOl8aaUoFoQJfp04FKTsFV+jwkBHEchqs=", - version = "v0.0.0-20220308174144-ae0e22291548", + sum = "h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=", + version = "v0.0.0-20220310185008-1973136f34c6", ) go_repository( name = "org_golang_google_grpc", From 648f1bd13ea3a21dc6e2eb950d432c89ccc2e693 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 11 Mar 2022 18:35:24 +0000 Subject: [PATCH 1216/1518] chore(deps): update dependency bazel_skylib to v1.2.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index df6b45f9a41..a8d0df4c40a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -12,10 +12,10 @@ http_archive( http_archive( name = "bazel_skylib", - sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de", + sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.0/bazel-skylib-1.2.0.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", ], ) From 4d5b6b7823a6336e29423bb8ebb13a61da1bf4b5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 11 Mar 2022 22:27:10 -0500 Subject: [PATCH 1217/1518] Update buf version (#2584) --- .circleci/config.yml | 4 ++-- Makefile | 2 +- buf.lock | 5 +---- examples/internal/proto/examplepb/stream.swagger.json | 2 +- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3b599f17681..9cdfb55569a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.0.0-rc8 + - image: bufbuild/buf:1.1.0 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.0.0-rc8 + - image: bufbuild/buf:1.1.0 steps: - checkout - run: echo "${BUF_API_TOKEN}" | buf registry login --username grpcgatewaybot --token-stdin diff --git a/Makefile b/Makefile index f6afd4de3b0..7f84daafb6d 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh install: - go install github.com/bufbuild/buf/cmd/buf@v1.0.0-rc8 + go install github.com/bufbuild/buf/cmd/buf@v1.1.0 go install \ ./protoc-gen-openapiv2 \ ./protoc-gen-grpc-gateway diff --git a/buf.lock b/buf.lock index 8f0d541192d..b0c2371a7fd 100644 --- a/buf.lock +++ b/buf.lock @@ -4,7 +4,4 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - branch: main - commit: 6358935a97044c1494fe13d369ac2f3b - digest: b1-4hxgpEmLuajuxqkZd7NMVnKipt3zqnXaTHsBEKtUOsM= - create_time: 2021-08-13T15:04:04.653816Z + commit: 8bb768d6ffdf4397a969703e17229c64 diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index f78bd4d4135..4314fc90d94 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -213,7 +213,7 @@ "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." } }, - "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody) returns\n (google.protobuf.Empty);\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." }, "examplepbABitOfEverything": { "type": "object", From eefd4d7e7e0dd8e34da986bb039a75357e87ef9a Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 12 Mar 2022 17:22:05 -0500 Subject: [PATCH 1218/1518] Fix proto push job (#2586) Apparently buf registry login now checks usernames, lets just use BUF_TOKEN instead --- .circleci/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9cdfb55569a..f958a13800c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -150,11 +150,10 @@ jobs: - image: bufbuild/buf:1.1.0 steps: - checkout - - run: echo "${BUF_API_TOKEN}" | buf registry login --username grpcgatewaybot --token-stdin # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. # It excludes all the files that we don't want to publish, just for the push step. - run: echo -e " - examples\n - internal\n - runtime" >> buf.yaml - - run: buf push --tag "$CIRCLE_SHA1" + - run: BUF_TOKEN="${BUF_API_TOKEN}" buf push --tag "$CIRCLE_SHA1" release: executor: build-env working_directory: /home/vscode/src/grpc-gateway From 51251604e3377f6785a0626d55051b27f014081e Mon Sep 17 00:00:00 2001 From: Maksym Kryvchun Date: Mon, 14 Mar 2022 20:25:19 +0200 Subject: [PATCH 1219/1518] protoc-gen-openapiv2: support YAML generation (#2579) * Support YAML * Support yaml * Bazel * Allowed formats in the description * Error in new encoder default branch * yaml tags * yaml convertes * Review changes: MarshalYAML comment, strings quotes * Generate bazel * Review fix: yaml import package * Fix bazel generation --- go.mod | 2 +- protoc-gen-openapiv2/defs.bzl | 11 + .../internal/genopenapi/BUILD.bazel | 6 + .../internal/genopenapi/format.go | 43 +++ .../internal/genopenapi/format_test.go | 105 +++++++ .../internal/genopenapi/generator.go | 30 +- .../internal/genopenapi/generator_test.go | 59 ++++ .../internal/genopenapi/template.go | 6 +- .../internal/genopenapi/template_test.go | 10 +- .../internal/genopenapi/types.go | 282 ++++++++++-------- .../internal/genopenapi/types_test.go | 112 +++++++ protoc-gen-openapiv2/main.go | 9 +- 12 files changed, 537 insertions(+), 138 deletions(-) create mode 100644 protoc-gen-openapiv2/internal/genopenapi/format.go create mode 100644 protoc-gen-openapiv2/internal/genopenapi/format_test.go create mode 100644 protoc-gen-openapiv2/internal/genopenapi/generator_test.go create mode 100644 protoc-gen-openapiv2/internal/genopenapi/types_test.go diff --git a/go.mod b/go.mod index e8dd490b8b0..d9d55293ab6 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 + gopkg.in/yaml.v2 v2.4.0 sigs.k8s.io/yaml v1.3.0 ) @@ -21,5 +22,4 @@ require ( golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index acc703ae509..f8a155c6ff3 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -63,6 +63,7 @@ def _run_proto_gen_openapi( disable_default_errors, enums_as_ints, omit_enum_default_value, + output_format, simple_operation_ids, proto3_optional_nullable, openapi_configuration, @@ -116,6 +117,9 @@ def _run_proto_gen_openapi( if omit_enum_default_value: args.add("--openapiv2_opt", "omit_enum_default_value=true") + if output_format: + args.add("--openapiv2_opt", "output_format=%s" % output_format) + if proto3_optional_nullable: args.add("--openapiv2_opt", "proto3_optional_nullable=true") @@ -214,6 +218,7 @@ def _proto_gen_openapi_impl(ctx): disable_default_errors = ctx.attr.disable_default_errors, enums_as_ints = ctx.attr.enums_as_ints, omit_enum_default_value = ctx.attr.omit_enum_default_value, + output_format = ctx.attr.output_format, simple_operation_ids = ctx.attr.simple_operation_ids, proto3_optional_nullable = ctx.attr.proto3_optional_nullable, openapi_configuration = ctx.file.openapi_configuration, @@ -301,6 +306,12 @@ protoc_gen_openapiv2 = rule( mandatory = False, doc = "if set, omit default enum value", ), + "output_format": attr.string( + default = "json", + mandatory = False, + values = ["json", "yaml"], + doc = "output content format. Allowed values are: `json`, `yaml`", + ), "simple_operation_ids": attr.bool( default = False, mandatory = False, diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index ee267caab1a..44bb282ef08 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -6,6 +6,7 @@ go_library( name = "genopenapi", srcs = [ "doc.go", + "format.go", "generator.go", "helpers.go", "helpers_go111_old.go", @@ -23,6 +24,7 @@ go_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/rpc:status_go_proto", + "@in_gopkg_yaml_v2//:yaml_v2", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@org_golang_google_protobuf//encoding/protojson", "@org_golang_google_protobuf//proto", @@ -37,8 +39,11 @@ go_test( size = "small", srcs = [ "cycle_test.go", + "format_test.go", + "generator_test.go", "naming_test.go", "template_test.go", + "types_test.go", ], embed = [":genopenapi"], deps = [ @@ -49,6 +54,7 @@ go_test( "//runtime", "@com_github_google_go_cmp//cmp", "@go_googleapis//google/api:annotations_go_proto", + "@in_gopkg_yaml_v2//:yaml_v2", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//reflect/protodesc", diff --git a/protoc-gen-openapiv2/internal/genopenapi/format.go b/protoc-gen-openapiv2/internal/genopenapi/format.go new file mode 100644 index 00000000000..e957accc933 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/format.go @@ -0,0 +1,43 @@ +package genopenapi + +import ( + "encoding/json" + "errors" + "io" + + "gopkg.in/yaml.v2" +) + +type Format string + +const ( + FormatJSON Format = "json" + FormatYAML Format = "yaml" +) + +type ContentEncoder interface { + Encode(v interface{}) (err error) +} + +func (f Format) Validate() error { + switch f { + case FormatJSON, FormatYAML: + return nil + default: + return errors.New("unknown format: " + string(f)) + } +} + +func (f Format) NewEncoder(w io.Writer) (ContentEncoder, error) { + switch f { + case FormatYAML: + return yaml.NewEncoder(w), nil + case FormatJSON: + enc := json.NewEncoder(w) + enc.SetIndent("", " ") + + return enc, nil + default: + return nil, errors.New("unknown format: " + string(f)) + } +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/format_test.go b/protoc-gen-openapiv2/internal/genopenapi/format_test.go new file mode 100644 index 00000000000..9c3682c3d98 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/format_test.go @@ -0,0 +1,105 @@ +package genopenapi_test + +import ( + "bytes" + "encoding/json" + "io" + "reflect" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" + "gopkg.in/yaml.v2" +) + +func TestFormatValidate(t *testing.T) { + t.Parallel() + + testCases := [...]struct { + Format genopenapi.Format + Valid bool + }{{ + Format: genopenapi.FormatJSON, + Valid: true, + }, { + Format: genopenapi.FormatYAML, + Valid: true, + }, { + Format: genopenapi.Format("unknown"), + Valid: false, + }, { + Format: genopenapi.Format(""), + Valid: false, + }} + + for _, tc := range testCases { + tc := tc + + t.Run(string(tc.Format), func(t *testing.T) { + t.Parallel() + + err := tc.Format.Validate() + switch { + case tc.Valid && err != nil: + t.Fatalf("expect no validation error, got: %s", err) + case !tc.Valid && err == nil: + t.Fatal("expect validation error, got nil") + } + }) + } +} + +func TestFormatEncode(t *testing.T) { + t.Parallel() + + type contentDecoder interface { + Decode(v interface{}) error + } + + testCases := [...]struct { + Format genopenapi.Format + NewDecoder func(r io.Reader) contentDecoder + }{{ + Format: genopenapi.FormatJSON, + NewDecoder: func(r io.Reader) contentDecoder { + return json.NewDecoder(r) + }, + }, { + Format: genopenapi.FormatYAML, + NewDecoder: func(r io.Reader) contentDecoder { + return yaml.NewDecoder(r) + }, + }} + + for _, tc := range testCases { + tc := tc + + t.Run(string(tc.Format), func(t *testing.T) { + t.Parallel() + + expParams := map[string]string{ + "hello": "world", + } + + var buf bytes.Buffer + enc, err := tc.Format.NewEncoder(&buf) + if err != nil { + t.Fatalf("expect no encoder creating error, got: %s", err) + } + + err = enc.Encode(expParams) + if err != nil { + t.Fatalf("expect no encoding error, got: %s", err) + } + + gotParams := make(map[string]string) + err = tc.NewDecoder(&buf).Decode(&gotParams) + if err != nil { + t.Fatalf("expect no decoding error, got: %s", err) + } + + if !reflect.DeepEqual(expParams, gotParams) { + t.Fatalf("expected: %+v, actual: %+v", expParams, gotParams) + } + }) + } +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 0848b400505..6c56b38c79f 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -28,7 +28,8 @@ var ( ) type generator struct { - reg *descriptor.Registry + reg *descriptor.Registry + format Format } type wrapper struct { @@ -42,8 +43,11 @@ type GeneratorOptions struct { } // New returns a new generator which generates grpc gateway files. -func New(reg *descriptor.Registry) gen.Generator { - return &generator{reg: reg} +func New(reg *descriptor.Registry, format Format) gen.Generator { + return &generator{ + reg: reg, + format: format, + } } // Merge a lot of OpenAPI file (wrapper) to single one OpenAPI file @@ -143,21 +147,25 @@ func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error } // encodeOpenAPI converts OpenAPI file obj to pluginpb.CodeGeneratorResponse_File -func encodeOpenAPI(file *wrapper) (*descriptor.ResponseFile, error) { - var formatted bytes.Buffer - enc := json.NewEncoder(&formatted) - enc.SetIndent("", " ") +func encodeOpenAPI(file *wrapper, format Format) (*descriptor.ResponseFile, error) { + var contentBuf bytes.Buffer + enc, err := format.NewEncoder(&contentBuf) + if err != nil { + return nil, err + } + if err := enc.Encode(*file.swagger); err != nil { return nil, err } + name := file.fileName ext := filepath.Ext(name) base := strings.TrimSuffix(name, ext) - output := fmt.Sprintf("%s.swagger.json", base) + output := fmt.Sprintf("%s.swagger."+string(format), base) return &descriptor.ResponseFile{ CodeGeneratorResponse_File: &pluginpb.CodeGeneratorResponse_File{ Name: proto.String(output), - Content: proto.String(formatted.String()), + Content: proto.String(contentBuf.String()), }, }, nil } @@ -207,7 +215,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response if g.reg.IsAllowMerge() { targetOpenAPI := mergeTargetFile(openapis, g.reg.GetMergeFileName()) - f, err := encodeOpenAPI(targetOpenAPI) + f, err := encodeOpenAPI(targetOpenAPI, g.format) if err != nil { return nil, fmt.Errorf("failed to encode OpenAPI for %s: %s", g.reg.GetMergeFileName(), err) } @@ -215,7 +223,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response glog.V(1).Infof("New OpenAPI file will emit") } else { for _, file := range openapis { - f, err := encodeOpenAPI(file) + f, err := encodeOpenAPI(file, g.format) if err != nil { return nil, fmt.Errorf("failed to encode OpenAPI for %s: %s", file.fileName, err) } diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go new file mode 100644 index 00000000000..b7ca09dff08 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go @@ -0,0 +1,59 @@ +package genopenapi_test + +import ( + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" + "gopkg.in/yaml.v2" + + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/pluginpb" +) + +func TestGenerate_YAML(t *testing.T) { + t.Parallel() + + reg := descriptor.NewRegistry() + req := &pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{{ + Name: proto.String("file.proto"), + Package: proto.String("example"), + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("goexample/v1;goexample"), + }, + }}, + FileToGenerate: []string{ + "file.proto", + }, + } + + if err := reg.Load(req); err != nil { + t.Fatalf("failed to load request: %s", err) + } + + var targets []*descriptor.File + for _, target := range req.FileToGenerate { + f, err := reg.LookupFile(target) + if err != nil { + t.Fatalf("failed to lookup file: %s", err) + } + targets = append(targets, f) + } + + g := genopenapi.New(reg, genopenapi.FormatYAML) + resp, err := g.Generate(targets) + switch { + case err != nil: + t.Fatalf("failed to generate targets: %s", err) + case len(resp) != 1: + t.Fatalf("invalid count, expected: 1, actual: %d", len(resp)) + } + + var p map[string]interface{} + err = yaml.Unmarshal([]byte(resp[0].GetContent()), &p) + if err != nil { + t.Fatalf("failed to unmarshall yaml: %s", err) + } +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index bc18775eee1..3161d8e2fea 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1891,7 +1891,7 @@ func processHeaders(inputHdrs map[string]*openapi_options.Header) (openapiHeader if err != nil { return nil, err } - ret.Default = json.RawMessage(v.Default) + ret.Default = RawExample(v.Default) } hdrs[header] = ret } @@ -2396,7 +2396,7 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option s.Type = strings.ToLower(overrideType[0].String()) } if j != nil && j.GetExample() != "" { - s.Example = json.RawMessage(j.GetExample()) + s.Example = RawExample(j.GetExample()) } if j != nil && j.GetFormat() != "" { s.Format = j.GetFormat() @@ -2438,7 +2438,7 @@ func openapiSchemaFromProtoSchema(s *openapi_options.Schema, reg *descriptor.Reg updateswaggerObjectFromJSONSchema(&ret, s.GetJsonSchema(), reg, data) if s != nil && s.Example != "" { - ret.Example = json.RawMessage(s.Example) + ret.Example = RawExample(s.Example) } return ret diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 6707fbc59d8..e806524cf41 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1807,19 +1807,19 @@ func TestApplyTemplateHeaders(t *testing.T) { "Boolean": openapiHeaderObject{ Description: "boolean header description", Type: "boolean", - Default: json.RawMessage("true"), + Default: RawExample("true"), Pattern: "^true|false$", }, "Integer": openapiHeaderObject{ Description: "integer header description", Type: "integer", - Default: json.RawMessage("0"), + Default: RawExample("0"), Pattern: "^[0-9]$", }, "Number": openapiHeaderObject{ Description: "number header description", Type: "number", - Default: json.RawMessage("1.2"), + Default: RawExample("1.2"), Pattern: "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$", }, }, @@ -4193,7 +4193,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { defs: map[string]openapiSchemaObject{ "Message": {schemaCore: schemaCore{ Type: "object", - Example: json.RawMessage(`{"foo":"bar"}`), + Example: RawExample(`{"foo":"bar"}`), }}, }, }, @@ -4210,7 +4210,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { defs: map[string]openapiSchemaObject{ "Message": {schemaCore: schemaCore{ Type: "object", - Example: json.RawMessage(`XXXX anything goes XXXX`), + Example: RawExample(`XXXX anything goes XXXX`), }}, }, }, diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 2769053e615..8af16d5c1da 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "gopkg.in/yaml.v2" ) type param struct { @@ -15,65 +16,65 @@ type param struct { // http://swagger.io/specification/#infoObject type openapiInfoObject struct { - Title string `json:"title"` - Description string `json:"description,omitempty"` - TermsOfService string `json:"termsOfService,omitempty"` - Version string `json:"version"` + Title string `json:"title" yaml:"title"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + TermsOfService string `json:"termsOfService,omitempty" yaml:"termsOfService,omitempty"` + Version string `json:"version" yaml:"version"` - Contact *openapiContactObject `json:"contact,omitempty"` - License *openapiLicenseObject `json:"license,omitempty"` + Contact *openapiContactObject `json:"contact,omitempty" yaml:"contact,omitempty"` + License *openapiLicenseObject `json:"license,omitempty" yaml:"license,omitempty"` - extensions []extension + extensions []extension `json:"-" yaml:"-"` } // https://swagger.io/specification/#tagObject type openapiTagObject struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` - ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty"` + Name string `json:"name" yaml:"name"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` } // http://swagger.io/specification/#contactObject type openapiContactObject struct { - Name string `json:"name,omitempty"` - URL string `json:"url,omitempty"` - Email string `json:"email,omitempty"` + Name string `json:"name,omitempty" yaml:"name,omitempty"` + URL string `json:"url,omitempty" yaml:"url,omitempty"` + Email string `json:"email,omitempty" yaml:"email,omitempty"` } // http://swagger.io/specification/#licenseObject type openapiLicenseObject struct { - Name string `json:"name,omitempty"` - URL string `json:"url,omitempty"` + Name string `json:"name,omitempty" yaml:"name,omitempty"` + URL string `json:"url,omitempty" yaml:"url,omitempty"` } // http://swagger.io/specification/#externalDocumentationObject type openapiExternalDocumentationObject struct { - Description string `json:"description,omitempty"` - URL string `json:"url,omitempty"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + URL string `json:"url,omitempty" yaml:"url,omitempty"` } type extension struct { - key string - value json.RawMessage + key string `json:"-" yaml:"-"` + value json.RawMessage `json:"-" yaml:"-"` } // http://swagger.io/specification/#swaggerObject type openapiSwaggerObject struct { - Swagger string `json:"swagger"` - Info openapiInfoObject `json:"info"` - Tags []openapiTagObject `json:"tags,omitempty"` - Host string `json:"host,omitempty"` - BasePath string `json:"basePath,omitempty"` - Schemes []string `json:"schemes,omitempty"` - Consumes []string `json:"consumes"` - Produces []string `json:"produces"` - Paths openapiPathsObject `json:"paths"` - Definitions openapiDefinitionsObject `json:"definitions"` - SecurityDefinitions openapiSecurityDefinitionsObject `json:"securityDefinitions,omitempty"` - Security []openapiSecurityRequirementObject `json:"security,omitempty"` - ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty"` - - extensions []extension + Swagger string `json:"swagger" yaml:"swagger"` + Info openapiInfoObject `json:"info" yaml:"info"` + Tags []openapiTagObject `json:"tags,omitempty" yaml:"tags,omitempty"` + Host string `json:"host,omitempty" yaml:"host,omitempty"` + BasePath string `json:"basePath,omitempty" yaml:"basePath,omitempty"` + Schemes []string `json:"schemes,omitempty" yaml:"schemes,omitempty"` + Consumes []string `json:"consumes" yaml:"consumes"` + Produces []string `json:"produces" yaml:"produces"` + Paths openapiPathsObject `json:"paths" yaml:"paths"` + Definitions openapiDefinitionsObject `json:"definitions" yaml:"definitions"` + SecurityDefinitions openapiSecurityDefinitionsObject `json:"securityDefinitions,omitempty" yaml:"securityDefinitions,omitempty"` + Security []openapiSecurityRequirementObject `json:"security,omitempty" yaml:"security,omitempty"` + ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` + + extensions []extension `json:"-" yaml:"-"` } // http://swagger.io/specification/#securityDefinitionsObject @@ -81,16 +82,16 @@ type openapiSecurityDefinitionsObject map[string]openapiSecuritySchemeObject // http://swagger.io/specification/#securitySchemeObject type openapiSecuritySchemeObject struct { - Type string `json:"type"` - Description string `json:"description,omitempty"` - Name string `json:"name,omitempty"` - In string `json:"in,omitempty"` - Flow string `json:"flow,omitempty"` - AuthorizationURL string `json:"authorizationUrl,omitempty"` - TokenURL string `json:"tokenUrl,omitempty"` - Scopes openapiScopesObject `json:"scopes,omitempty"` - - extensions []extension + Type string `json:"type" yaml:"type"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + Name string `json:"name,omitempty" yaml:"name,omitempty"` + In string `json:"in,omitempty" yaml:"in,omitempty"` + Flow string `json:"flow,omitempty" yaml:"flow,omitempty"` + AuthorizationURL string `json:"authorizationUrl,omitempty" yaml:"authorizationUrl,omitempty"` + TokenURL string `json:"tokenUrl,omitempty" yaml:"tokenUrl,omitempty"` + Scopes openapiScopesObject `json:"scopes,omitempty" yaml:"scopes,omitempty"` + + extensions []extension `json:"-" yaml:"-"` } // http://swagger.io/specification/#scopesObject @@ -104,50 +105,50 @@ type openapiPathsObject map[string]openapiPathItemObject // http://swagger.io/specification/#pathItemObject type openapiPathItemObject struct { - Get *openapiOperationObject `json:"get,omitempty"` - Delete *openapiOperationObject `json:"delete,omitempty"` - Post *openapiOperationObject `json:"post,omitempty"` - Put *openapiOperationObject `json:"put,omitempty"` - Patch *openapiOperationObject `json:"patch,omitempty"` + Get *openapiOperationObject `json:"get,omitempty" yaml:"get,omitempty"` + Delete *openapiOperationObject `json:"delete,omitempty" yaml:"delete,omitempty"` + Post *openapiOperationObject `json:"post,omitempty" yaml:"post,omitempty"` + Put *openapiOperationObject `json:"put,omitempty" yaml:"put,omitempty"` + Patch *openapiOperationObject `json:"patch,omitempty" yaml:"patch,omitempty"` } // http://swagger.io/specification/#operationObject type openapiOperationObject struct { - Summary string `json:"summary,omitempty"` - Description string `json:"description,omitempty"` - OperationID string `json:"operationId"` - Responses openapiResponsesObject `json:"responses"` - Parameters openapiParametersObject `json:"parameters,omitempty"` - Tags []string `json:"tags,omitempty"` - Deprecated bool `json:"deprecated,omitempty"` - Produces []string `json:"produces,omitempty"` - - Security *[]openapiSecurityRequirementObject `json:"security,omitempty"` - ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty"` - - extensions []extension + Summary string `json:"summary,omitempty" yaml:"summary,omitempty"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + OperationID string `json:"operationId" yaml:"operationId"` + Responses openapiResponsesObject `json:"responses" yaml:"responses"` + Parameters openapiParametersObject `json:"parameters,omitempty" yaml:"parameters,omitempty"` + Tags []string `json:"tags,omitempty" yaml:"tags,omitempty"` + Deprecated bool `json:"deprecated,omitempty" yaml:"deprecated,omitempty"` + Produces []string `json:"produces,omitempty" yaml:"produces,omitempty"` + + Security *[]openapiSecurityRequirementObject `json:"security,omitempty" yaml:"security,omitempty"` + ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` + + extensions []extension `json:"-" yaml:"-"` } type openapiParametersObject []openapiParameterObject // http://swagger.io/specification/#parameterObject type openapiParameterObject struct { - Name string `json:"name"` - Description string `json:"description,omitempty"` - In string `json:"in,omitempty"` - Required bool `json:"required"` - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Items *openapiItemsObject `json:"items,omitempty"` - Enum []string `json:"enum,omitempty"` - CollectionFormat string `json:"collectionFormat,omitempty"` - Default string `json:"default,omitempty"` - MinItems *int `json:"minItems,omitempty"` - Pattern string `json:"pattern,omitempty"` + Name string `json:"name" yaml:"name"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + In string `json:"in,omitempty" yaml:"in,omitempty"` + Required bool `json:"required" yaml:"required"` + Type string `json:"type,omitempty" yaml:"type,omitempty"` + Format string `json:"format,omitempty" yaml:"format,omitempty"` + Items *openapiItemsObject `json:"items,omitempty" yaml:"items,omitempty"` + Enum []string `json:"enum,omitempty" yaml:"enum,omitempty"` + CollectionFormat string `json:"collectionFormat,omitempty" yaml:"collectionFormat,omitempty"` + Default string `json:"default,omitempty" yaml:"default,omitempty"` + MinItems *int `json:"minItems,omitempty" yaml:"minItems,omitempty"` + Pattern string `json:"pattern,omitempty" yaml:"pattern,omitempty"` // Or you can explicitly refer to another type. If this is defined all // other fields should be empty - Schema *openapiSchemaObject `json:"schema,omitempty"` + Schema *openapiSchemaObject `json:"schema,omitempty" yaml:"schema,omitempty"` } // core part of schema, which is common to itemsObject and schemaObject. @@ -158,19 +159,53 @@ type openapiParameterObject struct { // supported by generation tools such as swagger-codegen and go-swagger. // For protoc-gen-openapiv3, we'd want to add `nullable` instead. type schemaCore struct { - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Ref string `json:"$ref,omitempty"` - XNullable bool `json:"x-nullable,omitempty"` - Example json.RawMessage `json:"example,omitempty"` + Type string `json:"type,omitempty" yaml:"type,omitempty"` + Format string `json:"format,omitempty" yaml:"format,omitempty"` + Ref string `json:"$ref,omitempty" yaml:"$ref,omitempty"` + XNullable bool `json:"x-nullable,omitempty" yaml:"x-nullable,omitempty"` + Example RawExample `json:"example,omitempty" yaml:"example,omitempty"` - Items *openapiItemsObject `json:"items,omitempty"` + Items *openapiItemsObject `json:"items,omitempty" yaml:"items,omitempty"` // If the item is an enumeration include a list of all the *NAMES* of the // enum values. I'm not sure how well this will work but assuming all enums // start from 0 index it will be great. I don't think that is a good assumption. - Enum []string `json:"enum,omitempty"` - Default string `json:"default,omitempty"` + Enum []string `json:"enum,omitempty" yaml:"enum,omitempty"` + Default string `json:"default,omitempty" yaml:"default,omitempty"` +} + +type RawExample json.RawMessage + +func (m RawExample) MarshalJSON() ([]byte, error) { + return (json.RawMessage)(m).MarshalJSON() +} + +func (m *RawExample) UnmarshalJSON(data []byte) error { + return (*json.RawMessage)(m).UnmarshalJSON(data) +} + +// MarshalYAML implements yaml.Marshaler interface. +// +// It converts RawExample to one of yaml-supported types and returns it. +// +// From yaml.Marshaler docs: The Marshaler interface may be implemented +// by types to customize their behavior when being marshaled into a YAML +// document. The returned value is marshaled in place of the original +// value implementing Marshaler. +func (e RawExample) MarshalYAML() (interface{}, error) { + // From docs, json.Unmarshal will store one of next types to data: + // - bool, for JSON booleans; + // - float64, for JSON numbers; + // - string, for JSON strings; + // - []interface{}, for JSON arrays; + // - map[string]interface{}, for JSON objects; + // - nil for JSON null. + var data interface{} + if err := json.Unmarshal(e, &data); err != nil { + return nil, err + } + + return data, nil } func (s *schemaCore) setRefFromFQN(ref string, reg *descriptor.Registry) error { @@ -189,23 +224,23 @@ type openapiResponsesObject map[string]openapiResponseObject // http://swagger.io/specification/#responseObject type openapiResponseObject struct { - Description string `json:"description"` - Schema openapiSchemaObject `json:"schema"` - Examples map[string]interface{} `json:"examples,omitempty"` - Headers openapiHeadersObject `json:"headers,omitempty"` + Description string `json:"description" yaml:"description"` + Schema openapiSchemaObject `json:"schema" yaml:"schema"` + Examples map[string]interface{} `json:"examples,omitempty" yaml:"examples,omitempty"` + Headers openapiHeadersObject `json:"headers,omitempty" yaml:"headers,omitempty"` - extensions []extension + extensions []extension `json:"-" yaml:"-"` } type openapiHeadersObject map[string]openapiHeaderObject // http://swagger.io/specification/#headerObject type openapiHeaderObject struct { - Description string `json:"description,omitempty"` - Type string `json:"type,omitempty"` - Format string `json:"format,omitempty"` - Default json.RawMessage `json:"default,omitempty"` - Pattern string `json:"pattern,omitempty"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + Type string `json:"type,omitempty" yaml:"type,omitempty"` + Format string `json:"format,omitempty" yaml:"format,omitempty"` + Default RawExample `json:"default,omitempty" yaml:"default,omitempty"` + Pattern string `json:"pattern,omitempty" yaml:"pattern,omitempty"` } type keyVal struct { @@ -215,6 +250,19 @@ type keyVal struct { type openapiSchemaObjectProperties []keyVal +func (p openapiSchemaObjectProperties) MarshalYAML() (interface{}, error) { + ms := make(yaml.MapSlice, len(p)) + + for i, v := range p { + ms[i] = yaml.MapItem{ + Key: v.Key, + Value: v.Value, + } + } + + return ms, nil +} + func (op openapiSchemaObjectProperties) MarshalJSON() ([]byte, error) { var buf bytes.Buffer buf.WriteString("{") @@ -241,31 +289,31 @@ func (op openapiSchemaObjectProperties) MarshalJSON() ([]byte, error) { // http://swagger.io/specification/#schemaObject type openapiSchemaObject struct { - schemaCore + schemaCore `yaml:",inline"` // Properties can be recursively defined - Properties *openapiSchemaObjectProperties `json:"properties,omitempty"` - AdditionalProperties *openapiSchemaObject `json:"additionalProperties,omitempty"` - - Description string `json:"description,omitempty"` - Title string `json:"title,omitempty"` - - ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty"` - - ReadOnly bool `json:"readOnly,omitempty"` - MultipleOf float64 `json:"multipleOf,omitempty"` - Maximum float64 `json:"maximum,omitempty"` - ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty"` - Minimum float64 `json:"minimum,omitempty"` - ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty"` - MaxLength uint64 `json:"maxLength,omitempty"` - MinLength uint64 `json:"minLength,omitempty"` - Pattern string `json:"pattern,omitempty"` - MaxItems uint64 `json:"maxItems,omitempty"` - MinItems uint64 `json:"minItems,omitempty"` - UniqueItems bool `json:"uniqueItems,omitempty"` - MaxProperties uint64 `json:"maxProperties,omitempty"` - MinProperties uint64 `json:"minProperties,omitempty"` - Required []string `json:"required,omitempty"` + Properties *openapiSchemaObjectProperties `json:"properties,omitempty" yaml:"properties,omitempty"` + AdditionalProperties *openapiSchemaObject `json:"additionalProperties,omitempty" yaml:"additionalProperties,omitempty"` + + Description string `json:"description,omitempty" yaml:"description,omitempty"` + Title string `json:"title,omitempty" yaml:"title,omitempty"` + + ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` + + ReadOnly bool `json:"readOnly,omitempty" yaml:"readOnly,omitempty"` + MultipleOf float64 `json:"multipleOf,omitempty" yaml:"multipleOf,omitempty"` + Maximum float64 `json:"maximum,omitempty" yaml:"maximum,omitempty"` + ExclusiveMaximum bool `json:"exclusiveMaximum,omitempty" yaml:"exclusiveMaximum,omitempty"` + Minimum float64 `json:"minimum,omitempty" yaml:"minimum,omitempty"` + ExclusiveMinimum bool `json:"exclusiveMinimum,omitempty" yaml:"exclusiveMinimum,omitempty"` + MaxLength uint64 `json:"maxLength,omitempty" yaml:"maxLength,omitempty"` + MinLength uint64 `json:"minLength,omitempty" yaml:"minLength,omitempty"` + Pattern string `json:"pattern,omitempty" yaml:"pattern,omitempty"` + MaxItems uint64 `json:"maxItems,omitempty" yaml:"maxItems,omitempty"` + MinItems uint64 `json:"minItems,omitempty" yaml:"minItems,omitempty"` + UniqueItems bool `json:"uniqueItems,omitempty" yaml:"uniqueItems,omitempty"` + MaxProperties uint64 `json:"maxProperties,omitempty" yaml:"maxProperties,omitempty"` + MinProperties uint64 `json:"minProperties,omitempty" yaml:"minProperties,omitempty"` + Required []string `json:"required,omitempty" yaml:"required,omitempty"` } // http://swagger.io/specification/#definitionsObject diff --git a/protoc-gen-openapiv2/internal/genopenapi/types_test.go b/protoc-gen-openapiv2/internal/genopenapi/types_test.go new file mode 100644 index 00000000000..c6488fb8a78 --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/types_test.go @@ -0,0 +1,112 @@ +package genopenapi + +import ( + "encoding/json" + "strings" + "testing" + + "gopkg.in/yaml.v2" +) + +func newSpaceReplacer() *strings.Replacer { + return strings.NewReplacer(" ", "", "\n", "", "\t", "") +} + +func TestRawExample(t *testing.T) { + t.Parallel() + + testCases := [...]struct { + In RawExample + Exp string + }{{ + In: RawExample(`1`), + Exp: `1`, + }, { + In: RawExample(`"1"`), + Exp: `"1"`, + }, { + In: RawExample(`{"hello":"worldr"}`), + Exp: ` + hello: + worldr + `, + }} + + sr := newSpaceReplacer() + + for _, tc := range testCases { + tc := tc + + t.Run(string(tc.In), func(t *testing.T) { + t.Parallel() + + ex := RawExample(tc.In) + + out, err := yaml.Marshal(ex) + switch { + case err != nil: + t.Fatalf("expect no yaml marshal error, got: %s", err) + case !json.Valid(tc.In): + t.Fatalf("json is invalid: %#q", tc.In) + case sr.Replace(tc.Exp) != sr.Replace(string(out)): + t.Fatalf("expected: %s, actual: %s", tc.Exp, out) + } + + out, err = json.Marshal(tc.In) + switch { + case err != nil: + t.Fatalf("expect no json marshal error, got: %s", err) + case sr.Replace(string(tc.In)) != sr.Replace(string(out)): + t.Fatalf("expected: %s, actual: %s", tc.In, out) + } + }) + } +} + +func TestOpenapiSchemaObjectProperties(t *testing.T) { + t.Parallel() + + v := map[string]interface{}{ + "example": openapiSchemaObjectProperties{{ + Key: "test1", + Value: 1, + }, { + Key: "test2", + Value: 2, + }}, + } + + t.Run("yaml", func(t *testing.T) { + t.Parallel() + + const exp = ` + example: + test1: 1 + test2: 2 + ` + + sr := newSpaceReplacer() + + out, err := yaml.Marshal(v) + switch { + case err != nil: + t.Fatalf("expect no marshal error, got: %s", err) + case sr.Replace(exp) != sr.Replace(string(out)): + t.Fatalf("expected: %s, actual: %s", exp, out) + } + }) + + t.Run("json", func(t *testing.T) { + t.Parallel() + + const exp = `{"example":{"test1":1,"test2":2}}` + + got, err := json.Marshal(v) + switch { + case err != nil: + t.Fatalf("expect no marshal error, got: %s", err) + case exp != string(got): + t.Fatalf("expected: %s, actual: %s", exp, got) + } + }) +} diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 6fb450aa8e9..8728cab2d9e 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -37,6 +37,7 @@ var ( generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") omitEnumDefaultValue = flag.Bool("omit_enum_default_value", false, "if set, omit default enum value") + outputFormat = flag.String("output_format", string(genopenapi.FormatJSON), fmt.Sprintf("output content format. Allowed values are: `%s`, `%s`", genopenapi.FormatJSON, genopenapi.FormatYAML)) ) // Variables set by goreleaser at build time @@ -129,7 +130,13 @@ func main() { } } - g := genopenapi.New(reg) + format := genopenapi.Format(*outputFormat) + if err := format.Validate(); err != nil { + emitError(err) + return + } + + g := genopenapi.New(reg, format) if err := genopenapi.AddErrorDefs(reg); err != nil { emitError(err) From e13d6d0f8ce9a6c02123f2e7ad0bf14d2765fd1c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 14 Mar 2022 18:26:47 +0000 Subject: [PATCH 1220/1518] fix(deps): update google.golang.org/genproto digest to 57ef72a --- go.mod | 2 +- go.sum | 5 ++--- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index d9d55293ab6..1a8ce9ff450 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 + google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 42a15db5df9..ad057272f5f 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106 h1:ErU+UA6wxadoU8nWrsy5MZUVBs75K17zUCsUCIfrXCE= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -383,7 +383,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 1e5c3874355..cdad962c1b1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=", - version = "v0.0.0-20220310185008-1973136f34c6", + sum = "h1:ErU+UA6wxadoU8nWrsy5MZUVBs75K17zUCsUCIfrXCE=", + version = "v0.0.0-20220314164441-57ef72a4c106", ) go_repository( name = "org_golang_google_grpc", From cecba55bf487e27651338795431df86ef327c103 Mon Sep 17 00:00:00 2001 From: Brandon Cook Date: Tue, 15 Mar 2022 12:34:59 +1100 Subject: [PATCH 1221/1518] Add support for `google.api.VisibilityRule`s annotations to hide APIs and fields (#2578) * Add support for visibility rules on fields * Add more visibility options * Fix field visibility * Update go.mod * Revert module name, tidy up ifs * Tidy up defs * Tidy up code, add generated outputs * Refactor checkVisibility to be more readable * GA -> Preview * Add documentation * Fix proto linting issues * Correct bazel definition syntax * Remove compiled binary This was included from my local testing... * Update google deps imports * PR Feedback * Add in depth examples for different selectors * Remove `visibility_rule_echo_service.pb.gw.go` from tests * Apply gazelle dependency fix Co-Authored-By: Johan Brandhorst-Satzkorn * Remove unneeded print statements * Fix sentence * Allow multiple definitions of `visibility_restriction_selectors` * Add TODO to revert temporary workaround * Tidy up code based on PR feedback * Update bazel build files * Update visibility_rule_echo_service.pb.gw.go * Fix indent Co-authored-by: Johan Brandhorst-Satzkorn --- Makefile | 16 + WORKSPACE | 13 +- buf.yaml | 7 + .../mapping/customizing_openapi_output.md | 121 +++ examples/internal/proto/examplepb/BUILD.bazel | 5 + .../visibility_rule_echo_service.pb.go | 627 ++++++++++++++ .../visibility_rule_echo_service.pb.gw.go | 633 ++++++++++++++ .../visibility_rule_echo_service.proto | 105 +++ .../visibility_rule_echo_service_grpc.pb.go | 311 +++++++ ...ty_rule_internal_echo_service.buf.gen.yaml | 6 + ...ty_rule_internal_echo_service.swagger.json | 658 +++++++++++++++ ...bility_rule_none_echo_service.buf.gen.yaml | 4 + ...bility_rule_none_echo_service.swagger.json | 201 +++++ ...iew_and_internal_echo_service.buf.gen.yaml | 7 + ...iew_and_internal_echo_service.swagger.json | 792 ++++++++++++++++++ ...ity_rule_preview_echo_service.buf.gen.yaml | 6 + ...ity_rule_preview_echo_service.swagger.json | 457 ++++++++++ internal/descriptor/registry.go | 31 +- protoc-gen-openapiv2/BUILD.bazel | 1 + protoc-gen-openapiv2/defs.bzl | 14 +- .../internal/genopenapi/BUILD.bazel | 2 + .../internal/genopenapi/template.go | 122 +++ .../internal/genopenapi/template_test.go | 74 ++ protoc-gen-openapiv2/main.go | 49 +- utilities/BUILD.bazel | 6 +- utilities/string_array_flag.go | 33 + utilities/string_array_flag_test.go | 50 ++ 27 files changed, 4313 insertions(+), 38 deletions(-) create mode 100644 examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go create mode 100644 examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go create mode 100644 examples/internal/proto/examplepb/visibility_rule_echo_service.proto create mode 100644 examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go create mode 100644 examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json create mode 100644 examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json create mode 100644 examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json create mode 100644 examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml create mode 100644 examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json create mode 100644 utilities/string_array_flag.go create mode 100644 utilities/string_array_flag_test.go diff --git a/Makefile b/Makefile index 7f84daafb6d..1914b20a82b 100644 --- a/Makefile +++ b/Makefile @@ -115,6 +115,22 @@ proto: buf generate \ --template ./examples/internal/proto/examplepb/use_go_template.buf.gen.yaml \ --path examples/internal/proto/examplepb/use_go_template.proto + buf generate \ + --template ./examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/visibility_rule_echo_service.proto + mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json + buf generate \ + --template ./examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/visibility_rule_echo_service.proto + mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json + buf generate \ + --template ./examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/visibility_rule_echo_service.proto + mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json + buf generate \ + --template ./examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml \ + --path examples/internal/proto/examplepb/visibility_rule_echo_service.proto + mv examples/internal/proto/examplepb/visibility_rule_echo_service.swagger.json examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json generate: proto $(ECHO_EXAMPLE_SRCS) $(ABE_EXAMPLE_SRCS) $(UNANNOTATED_ECHO_EXAMPLE_SRCS) $(RESPONSE_BODY_EXAMPLE_SRCS) $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS) diff --git a/WORKSPACE b/WORKSPACE index a8d0df4c40a..d53f2498094 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,6 +1,7 @@ workspace(name = "grpc_ecosystem_grpc_gateway") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( @@ -48,13 +49,13 @@ http_archive( ], ) -http_archive( +# TODO: Revert https://github.com/grpc-ecosystem/grpc-gateway/pull/2578/commits/fb9b59be7f2408767657c83c5002bf700ac7c460 once +# https://github.com/bazelbuild/bazel-gazelle/pull/1194 is merged +git_repository( name = "bazel_gazelle", - sha256 = "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb", - urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", - ], + commit = "4a1aeae7cab962fd8088f42038d3a477cdca91a5", + remote = "https://github.com/johanbrandhorst/bazel-gazelle", + shallow_since = "1647116890 +0000", ) load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") diff --git a/buf.yaml b/buf.yaml index d5574ead8ab..a49edcf2446 100644 --- a/buf.yaml +++ b/buf.yaml @@ -21,6 +21,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto ENUM_VALUE_PREFIX: @@ -56,6 +57,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto - examples/internal/proto/pathenum/path_enum.proto @@ -79,6 +81,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto - runtime/internal/examplepb/example.proto @@ -98,6 +101,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto - examples/internal/proto/pathenum/path_enum.proto @@ -122,6 +126,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/wrappers.proto RPC_REQUEST_STANDARD_NAME: - examples/internal/helloworld/helloworld.proto @@ -136,6 +141,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/wrappers.proto - runtime/internal/examplepb/non_standard_names.proto RPC_RESPONSE_STANDARD_NAME: @@ -151,6 +157,7 @@ lint: - examples/internal/proto/examplepb/response_body_service.proto - examples/internal/proto/examplepb/stream.proto - examples/internal/proto/examplepb/unannotated_echo_service.proto + - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto - runtime/internal/examplepb/non_standard_names.proto diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 2f8b83c6407..f04b796e238 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -284,3 +284,124 @@ Output json: }, ``` {% endraw %} + +### Hiding fields, methods, services and enum values + +If you require internal or unreleased fields and APIs to be hidden from your API documentation, [`google.api.VisibilityRule`](https://github.com/googleapis/googleapis/blob/9916192ab15e3507e41ba2c5165182fec06120d0/google/api/visibility.proto#L89) annotations can be added to customize where they are generated. Combined with the option `visibility_restriction_selectors`, overlapping rules will appear in the OpenAPI output. + +`visibility_restriction_selectors` can be declared multiple times as an option to include multiple visibility restrictions in the output. +e.g. if you are using `buf`: + +```yaml +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - visibility_restriction_selectors=PREVIEW + - visibility_restriction_selectors=INTERNAL +``` + +or with `protoc` + +```sh +protoc --openapiv2_out=. --openapiv2_opt=visibility_restriction_selectors=PREVIEW --openapiv2_opt=visibility_restriction_selectors=INTERNAL ./path/to/file.proto +``` + +Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output. + +These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want. In this example we use `INTERNAL` and `PREVIEW`, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish. + +Note: Annotations are only supported on Services, Methods, Fields and Enum Values. + +`opt: visibility_restriction_selectors=PREVIEW` will result in: + +Input Example: +```proto3 +service Echo { + rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL"; + option (google.api.http) = { + get: "/v1/example/echo_internal" + }; + } + rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL,PREVIEW"; + option (google.api.http) = { + get: "/v1/example/echo_internal_and_preview" + }; + } +} + +message VisibilityRuleSimpleMessage { + enum VisibilityEnum { + UNSPECIFIED = 0; + VISIBLE = 1; + INTERNAL = 2 [(google.api.value_visibility).restriction = "INTERNAL"]; + PREVIEW = 3 [(google.api.value_visibility).restriction = "INTERNAL,PREVIEW"]; + } + + string internal_field = 1 [(google.api.field_visibility).restriction = "INTERNAL"]; + string preview_field = 2 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; + VisibilityEnum an_enum = 3; +} +``` + +Output json: +```json +{ + "paths": { + "/v1/example/echo_internal_and_preview": { + "get": { + "summary": "EchoInternalAndPreview is a internal and preview API that should be visible in the OpenAPI spec.", + "operationId": "VisibilityRuleEchoService_EchoInternalAndPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "UNSPECIFIED", + "VISIBLE", + "PREVIEW" + ], + "default": "UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + } + } +} +``` + +For a more in depth example see [visibility_rule_echo_service.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_echo_service.proto) and the following output files for different values of `visibility_restriction_selectors`: +- [`visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json) +- [`visibility_restriction_selectors=INTERNAL`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json) +- [`visibility_restriction_selectors=INTERNAL,visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json) +- [Not set](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json) + +{% endraw %} diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index ed37a7a0e61..87154dddc56 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -28,6 +28,8 @@ package(default_visibility = ["//visibility:public"]) # gazelle:exclude wrappers_grpc.pb.go # gazelle:exclude unannotated_echo_service.pb.gw.go # gazelle:exclude unannotated_echo_service_grpc.pb.go +# gazelle:exclude visibility_rule_echo_service.pb.gw.go +# gazelle:exclude visibility_rule_echo_service_grpc.pb.go # gazelle:exclude openapi_merge_a.proto # gazelle:exclude openapi_merge_b.proto # gazelle:go_grpc_compilers //:go_apiv2, //:go_grpc, //protoc-gen-grpc-gateway:go_gen_grpc_gateway @@ -52,6 +54,7 @@ proto_library( "stream.proto", "unannotated_echo_service.proto", "use_go_template.proto", + "visibility_rule_echo_service.proto", "wrappers.proto", ], deps = [ @@ -67,6 +70,7 @@ proto_library( "@com_google_protobuf//:wrappers_proto", "@go_googleapis//google/api:annotations_proto", "@go_googleapis//google/api:httpbody_proto", + "@go_googleapis//google/api:visibility_proto", "@go_googleapis//google/rpc:status_proto", ], ) @@ -101,6 +105,7 @@ go_proto_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/api:httpbody_go_proto", + "@go_googleapis//google/api:visibility_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@org_golang_google_protobuf//proto:go_default_library", # keep ], diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go new file mode 100644 index 00000000000..b40bf7d05eb --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go @@ -0,0 +1,627 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1 +// protoc (unknown) +// source: examples/internal/proto/examplepb/visibility_rule_echo_service.proto + +// Visibility Rule Echo Service +// Similar to echo_service.proto but with annotations to change visibility +// of services, methods, fields and enum values. +// +// `google.api.VisibilityRule` annotations are added to customize where they are generated. +// Combined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output. +// Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output. +// +// These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want. +// In this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish. + +package examplepb + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + _ "google.golang.org/genproto/googleapis/api/visibility" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type VisibilityRuleSimpleMessage_VisibilityEnum int32 + +const ( + VisibilityRuleSimpleMessage_VISIBILITY_ENUM_UNSPECIFIED VisibilityRuleSimpleMessage_VisibilityEnum = 0 + VisibilityRuleSimpleMessage_VISIBILITY_ENUM_VISIBLE VisibilityRuleSimpleMessage_VisibilityEnum = 1 + VisibilityRuleSimpleMessage_VISIBILITY_ENUM_INTERNAL VisibilityRuleSimpleMessage_VisibilityEnum = 2 + VisibilityRuleSimpleMessage_VISIBILITY_ENUM_PREVIEW VisibilityRuleSimpleMessage_VisibilityEnum = 3 +) + +// Enum value maps for VisibilityRuleSimpleMessage_VisibilityEnum. +var ( + VisibilityRuleSimpleMessage_VisibilityEnum_name = map[int32]string{ + 0: "VISIBILITY_ENUM_UNSPECIFIED", + 1: "VISIBILITY_ENUM_VISIBLE", + 2: "VISIBILITY_ENUM_INTERNAL", + 3: "VISIBILITY_ENUM_PREVIEW", + } + VisibilityRuleSimpleMessage_VisibilityEnum_value = map[string]int32{ + "VISIBILITY_ENUM_UNSPECIFIED": 0, + "VISIBILITY_ENUM_VISIBLE": 1, + "VISIBILITY_ENUM_INTERNAL": 2, + "VISIBILITY_ENUM_PREVIEW": 3, + } +) + +func (x VisibilityRuleSimpleMessage_VisibilityEnum) Enum() *VisibilityRuleSimpleMessage_VisibilityEnum { + p := new(VisibilityRuleSimpleMessage_VisibilityEnum) + *p = x + return p +} + +func (x VisibilityRuleSimpleMessage_VisibilityEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VisibilityRuleSimpleMessage_VisibilityEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0].Descriptor() +} + +func (VisibilityRuleSimpleMessage_VisibilityEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0] +} + +func (x VisibilityRuleSimpleMessage_VisibilityEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VisibilityRuleSimpleMessage_VisibilityEnum.Descriptor instead. +func (VisibilityRuleSimpleMessage_VisibilityEnum) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{1, 0} +} + +// Embedded represents a message embedded in SimpleMessage. +type VisibilityRuleEmbedded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Mark: + // *VisibilityRuleEmbedded_Progress + // *VisibilityRuleEmbedded_Note + // *VisibilityRuleEmbedded_InternalField + // *VisibilityRuleEmbedded_PreviewField + Mark isVisibilityRuleEmbedded_Mark `protobuf_oneof:"mark"` +} + +func (x *VisibilityRuleEmbedded) Reset() { + *x = VisibilityRuleEmbedded{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VisibilityRuleEmbedded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisibilityRuleEmbedded) ProtoMessage() {} + +func (x *VisibilityRuleEmbedded) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisibilityRuleEmbedded.ProtoReflect.Descriptor instead. +func (*VisibilityRuleEmbedded) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{0} +} + +func (m *VisibilityRuleEmbedded) GetMark() isVisibilityRuleEmbedded_Mark { + if m != nil { + return m.Mark + } + return nil +} + +func (x *VisibilityRuleEmbedded) GetProgress() int64 { + if x, ok := x.GetMark().(*VisibilityRuleEmbedded_Progress); ok { + return x.Progress + } + return 0 +} + +func (x *VisibilityRuleEmbedded) GetNote() string { + if x, ok := x.GetMark().(*VisibilityRuleEmbedded_Note); ok { + return x.Note + } + return "" +} + +func (x *VisibilityRuleEmbedded) GetInternalField() string { + if x, ok := x.GetMark().(*VisibilityRuleEmbedded_InternalField); ok { + return x.InternalField + } + return "" +} + +func (x *VisibilityRuleEmbedded) GetPreviewField() string { + if x, ok := x.GetMark().(*VisibilityRuleEmbedded_PreviewField); ok { + return x.PreviewField + } + return "" +} + +type isVisibilityRuleEmbedded_Mark interface { + isVisibilityRuleEmbedded_Mark() +} + +type VisibilityRuleEmbedded_Progress struct { + Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` +} + +type VisibilityRuleEmbedded_Note struct { + Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` +} + +type VisibilityRuleEmbedded_InternalField struct { + InternalField string `protobuf:"bytes,3,opt,name=internal_field,json=internalField,proto3,oneof"` +} + +type VisibilityRuleEmbedded_PreviewField struct { + PreviewField string `protobuf:"bytes,4,opt,name=preview_field,json=previewField,proto3,oneof"` +} + +func (*VisibilityRuleEmbedded_Progress) isVisibilityRuleEmbedded_Mark() {} + +func (*VisibilityRuleEmbedded_Note) isVisibilityRuleEmbedded_Mark() {} + +func (*VisibilityRuleEmbedded_InternalField) isVisibilityRuleEmbedded_Mark() {} + +func (*VisibilityRuleEmbedded_PreviewField) isVisibilityRuleEmbedded_Mark() {} + +// SimpleMessage represents a simple message sent to the Echo service. +type VisibilityRuleSimpleMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Id represents the message identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + // Types that are assignable to Code: + // *VisibilityRuleSimpleMessage_LineNum + // *VisibilityRuleSimpleMessage_Lang + Code isVisibilityRuleSimpleMessage_Code `protobuf_oneof:"code"` + Status *VisibilityRuleEmbedded `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + // Types that are assignable to Ext: + // *VisibilityRuleSimpleMessage_En + // *VisibilityRuleSimpleMessage_No + Ext isVisibilityRuleSimpleMessage_Ext `protobuf_oneof:"ext"` + InternalField string `protobuf:"bytes,8,opt,name=internal_field,json=internalField,proto3" json:"internal_field,omitempty"` + PreviewField string `protobuf:"bytes,9,opt,name=preview_field,json=previewField,proto3" json:"preview_field,omitempty"` + AnEnum VisibilityRuleSimpleMessage_VisibilityEnum `protobuf:"varint,10,opt,name=an_enum,json=anEnum,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage_VisibilityEnum" json:"an_enum,omitempty"` +} + +func (x *VisibilityRuleSimpleMessage) Reset() { + *x = VisibilityRuleSimpleMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VisibilityRuleSimpleMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisibilityRuleSimpleMessage) ProtoMessage() {} + +func (x *VisibilityRuleSimpleMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisibilityRuleSimpleMessage.ProtoReflect.Descriptor instead. +func (*VisibilityRuleSimpleMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{1} +} + +func (x *VisibilityRuleSimpleMessage) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VisibilityRuleSimpleMessage) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + +func (m *VisibilityRuleSimpleMessage) GetCode() isVisibilityRuleSimpleMessage_Code { + if m != nil { + return m.Code + } + return nil +} + +func (x *VisibilityRuleSimpleMessage) GetLineNum() int64 { + if x, ok := x.GetCode().(*VisibilityRuleSimpleMessage_LineNum); ok { + return x.LineNum + } + return 0 +} + +func (x *VisibilityRuleSimpleMessage) GetLang() string { + if x, ok := x.GetCode().(*VisibilityRuleSimpleMessage_Lang); ok { + return x.Lang + } + return "" +} + +func (x *VisibilityRuleSimpleMessage) GetStatus() *VisibilityRuleEmbedded { + if x != nil { + return x.Status + } + return nil +} + +func (m *VisibilityRuleSimpleMessage) GetExt() isVisibilityRuleSimpleMessage_Ext { + if m != nil { + return m.Ext + } + return nil +} + +func (x *VisibilityRuleSimpleMessage) GetEn() int64 { + if x, ok := x.GetExt().(*VisibilityRuleSimpleMessage_En); ok { + return x.En + } + return 0 +} + +func (x *VisibilityRuleSimpleMessage) GetNo() *VisibilityRuleEmbedded { + if x, ok := x.GetExt().(*VisibilityRuleSimpleMessage_No); ok { + return x.No + } + return nil +} + +func (x *VisibilityRuleSimpleMessage) GetInternalField() string { + if x != nil { + return x.InternalField + } + return "" +} + +func (x *VisibilityRuleSimpleMessage) GetPreviewField() string { + if x != nil { + return x.PreviewField + } + return "" +} + +func (x *VisibilityRuleSimpleMessage) GetAnEnum() VisibilityRuleSimpleMessage_VisibilityEnum { + if x != nil { + return x.AnEnum + } + return VisibilityRuleSimpleMessage_VISIBILITY_ENUM_UNSPECIFIED +} + +type isVisibilityRuleSimpleMessage_Code interface { + isVisibilityRuleSimpleMessage_Code() +} + +type VisibilityRuleSimpleMessage_LineNum struct { + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` +} + +type VisibilityRuleSimpleMessage_Lang struct { + Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` +} + +func (*VisibilityRuleSimpleMessage_LineNum) isVisibilityRuleSimpleMessage_Code() {} + +func (*VisibilityRuleSimpleMessage_Lang) isVisibilityRuleSimpleMessage_Code() {} + +type isVisibilityRuleSimpleMessage_Ext interface { + isVisibilityRuleSimpleMessage_Ext() +} + +type VisibilityRuleSimpleMessage_En struct { + En int64 `protobuf:"varint,6,opt,name=en,proto3,oneof"` +} + +type VisibilityRuleSimpleMessage_No struct { + No *VisibilityRuleEmbedded `protobuf:"bytes,7,opt,name=no,proto3,oneof"` +} + +func (*VisibilityRuleSimpleMessage_En) isVisibilityRuleSimpleMessage_Ext() {} + +func (*VisibilityRuleSimpleMessage_No) isVisibilityRuleSimpleMessage_Ext() {} + +var File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc = []byte{ + 0x0a, 0x44, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x72, + 0x75, 0x6c, 0x65, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xd0, 0x01, 0x0a, 0x16, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x12, 0x39, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, + 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, + 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x48, 0x00, 0x52, 0x0c, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x06, 0x0a, 0x04, + 0x6d, 0x61, 0x72, 0x6b, 0x22, 0xf2, 0x05, 0x0a, 0x1b, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x5e, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, + 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x58, 0x0a, 0x02, 0x6e, + 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, + 0x01, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x37, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xfa, + 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x52, + 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d, + 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, + 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x52, + 0x0c, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x73, 0x0a, + 0x07, 0x61, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x06, 0x61, 0x6e, 0x45, 0x6e, + 0x75, 0x6d, 0x22, 0xb5, 0x01, 0x0a, 0x0e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, + 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, + 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x4c, + 0x45, 0x10, 0x01, 0x12, 0x2e, 0x0a, 0x18, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, + 0x02, 0x1a, 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x4e, 0x41, 0x4c, 0x12, 0x35, 0x0a, 0x17, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x10, 0x03, + 0x1a, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, + 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x32, 0x92, 0x07, 0x0a, 0x19, 0x56, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x63, 0x68, 0x6f, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, + 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x17, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xdb, 0x01, 0x0a, 0x0c, 0x45, 0x63, + 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, + 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12, 0xd8, 0x01, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x50, 0x52, 0x45, 0x56, 0x49, + 0x45, 0x57, 0x12, 0xf9, 0x01, 0x0a, 0x16, 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, + 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, + 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x32, 0x80, + 0x02, 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, + 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x4b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, + 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, + 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x1a, + 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, + 0x4c, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes = []interface{}{ + (VisibilityRuleSimpleMessage_VisibilityEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum + (*VisibilityRuleEmbedded)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + (*VisibilityRuleSimpleMessage)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage +} +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs = []int32{ + 1, // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + 1, // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + 0, // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.an_enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum + 2, // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 6: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 7: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 8: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 9: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 10: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 11: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 2, // 12: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 8, // [8:13] is the sub-list for method output_type + 3, // [3:8] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_init() } +func file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_init() { + if File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VisibilityRuleEmbedded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VisibilityRuleSimpleMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*VisibilityRuleEmbedded_Progress)(nil), + (*VisibilityRuleEmbedded_Note)(nil), + (*VisibilityRuleEmbedded_InternalField)(nil), + (*VisibilityRuleEmbedded_PreviewField)(nil), + } + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*VisibilityRuleSimpleMessage_LineNum)(nil), + (*VisibilityRuleSimpleMessage_Lang)(nil), + (*VisibilityRuleSimpleMessage_En)(nil), + (*VisibilityRuleSimpleMessage_No)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc, + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 2, + }, + GoTypes: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs, + EnumInfos: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes, + MessageInfos: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto = out.File + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc = nil + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes = nil + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs = nil +} diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go new file mode 100644 index 00000000000..af8d45f6460 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go @@ -0,0 +1,633 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/internal/proto/examplepb/visibility_rule_echo_service.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_VisibilityRuleEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_VisibilityRuleEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VisibilityRuleEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_VisibilityRuleEchoService_EchoInternal_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_VisibilityRuleEchoService_EchoInternal_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternal_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoInternal(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VisibilityRuleEchoService_EchoInternal_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternal_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoInternal(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_VisibilityRuleEchoService_EchoPreview_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_VisibilityRuleEchoService_EchoPreview_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoPreview_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoPreview(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VisibilityRuleEchoService_EchoPreview_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoPreview_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoPreview(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_VisibilityRuleEchoService_EchoInternalAndPreview_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternalAndPreview_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoInternalAndPreview(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleEchoService_EchoInternalAndPreview_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoInternalAndPreview(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_VisibilityRuleInternalEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_VisibilityRuleInternalEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client VisibilityRuleInternalEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleInternalEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VisibilityRuleInternalEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server VisibilityRuleInternalEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VisibilityRuleSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VisibilityRuleInternalEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterVisibilityRuleEchoServiceHandlerServer registers the http handlers for service VisibilityRuleEchoService to "mux". +// UnaryRPC :call VisibilityRuleEchoServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVisibilityRuleEchoServiceHandlerFromEndpoint instead. +func RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VisibilityRuleEchoServiceServer) error { + + mux.Handle("POST", pattern_VisibilityRuleEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VisibilityRuleEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoInternal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VisibilityRuleEchoService_EchoInternal_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoInternal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VisibilityRuleEchoService_EchoPreview_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoInternalAndPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterVisibilityRuleInternalEchoServiceHandlerServer registers the http handlers for service VisibilityRuleInternalEchoService to "mux". +// UnaryRPC :call VisibilityRuleInternalEchoServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint instead. +func RegisterVisibilityRuleInternalEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VisibilityRuleInternalEchoServiceServer) error { + + mux.Handle("POST", pattern_VisibilityRuleInternalEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VisibilityRuleInternalEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleInternalEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterVisibilityRuleEchoServiceHandlerFromEndpoint is same as RegisterVisibilityRuleEchoServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterVisibilityRuleEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterVisibilityRuleEchoServiceHandler(ctx, mux, conn) +} + +// RegisterVisibilityRuleEchoServiceHandler registers the http handlers for service VisibilityRuleEchoService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterVisibilityRuleEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterVisibilityRuleEchoServiceHandlerClient(ctx, mux, NewVisibilityRuleEchoServiceClient(conn)) +} + +// RegisterVisibilityRuleEchoServiceHandlerClient registers the http handlers for service VisibilityRuleEchoService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VisibilityRuleEchoServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VisibilityRuleEchoServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "VisibilityRuleEchoServiceClient" to call the correct interceptors. +func RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VisibilityRuleEchoServiceClient) error { + + mux.Handle("POST", pattern_VisibilityRuleEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VisibilityRuleEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoInternal_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VisibilityRuleEchoService_EchoInternal_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoInternal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VisibilityRuleEchoService_EchoPreview_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_VisibilityRuleEchoService_EchoInternalAndPreview_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_VisibilityRuleEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "")) + + pattern_VisibilityRuleEchoService_EchoInternal_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_internal"}, "")) + + pattern_VisibilityRuleEchoService_EchoPreview_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_preview"}, "")) + + pattern_VisibilityRuleEchoService_EchoInternalAndPreview_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_internal_and_preview"}, "")) +) + +var ( + forward_VisibilityRuleEchoService_Echo_0 = runtime.ForwardResponseMessage + + forward_VisibilityRuleEchoService_EchoInternal_0 = runtime.ForwardResponseMessage + + forward_VisibilityRuleEchoService_EchoPreview_0 = runtime.ForwardResponseMessage + + forward_VisibilityRuleEchoService_EchoInternalAndPreview_0 = runtime.ForwardResponseMessage +) + +// RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint is same as RegisterVisibilityRuleInternalEchoServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterVisibilityRuleInternalEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterVisibilityRuleInternalEchoServiceHandler(ctx, mux, conn) +} + +// RegisterVisibilityRuleInternalEchoServiceHandler registers the http handlers for service VisibilityRuleInternalEchoService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterVisibilityRuleInternalEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterVisibilityRuleInternalEchoServiceHandlerClient(ctx, mux, NewVisibilityRuleInternalEchoServiceClient(conn)) +} + +// RegisterVisibilityRuleInternalEchoServiceHandlerClient registers the http handlers for service VisibilityRuleInternalEchoService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VisibilityRuleInternalEchoServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VisibilityRuleInternalEchoServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "VisibilityRuleInternalEchoServiceClient" to call the correct interceptors. +func RegisterVisibilityRuleInternalEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VisibilityRuleInternalEchoServiceClient) error { + + mux.Handle("POST", pattern_VisibilityRuleInternalEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VisibilityRuleInternalEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VisibilityRuleInternalEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_VisibilityRuleInternalEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "internal", "echo", "id"}, "")) +) + +var ( + forward_VisibilityRuleInternalEchoService_Echo_0 = runtime.ForwardResponseMessage +) diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.proto b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto new file mode 100644 index 00000000000..9b14f5ad1f0 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto @@ -0,0 +1,105 @@ +syntax = "proto3"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; + +// Visibility Rule Echo Service +// Similar to echo_service.proto but with annotations to change visibility +// of services, methods, fields and enum values. +// +// `google.api.VisibilityRule` annotations are added to customize where they are generated. +// Combined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output. +// Elements without `google.api.VisibilityRule` annotations will appear as usual in the generated output. +// +// These restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want. +// In this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish. +package grpc.gateway.examples.internal.proto.examplepb; + +import "google/api/annotations.proto"; +import "google/api/visibility.proto"; + +// Embedded represents a message embedded in SimpleMessage. +message VisibilityRuleEmbedded { + oneof mark { + int64 progress = 1; + string note = 2; + string internal_field = 3 [(google.api.field_visibility).restriction = "INTERNAL"]; + string preview_field = 4 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; + } +} + +// SimpleMessage represents a simple message sent to the Echo service. +message VisibilityRuleSimpleMessage { + enum VisibilityEnum { + VISIBILITY_ENUM_UNSPECIFIED = 0; + VISIBILITY_ENUM_VISIBLE = 1; + VISIBILITY_ENUM_INTERNAL = 2 [(google.api.value_visibility).restriction = "INTERNAL"]; + VISIBILITY_ENUM_PREVIEW = 3 [(google.api.value_visibility).restriction = "INTERNAL,PREVIEW"]; + } + + // Id represents the message identifier. + string id = 1; + int64 num = 2; + oneof code { + int64 line_num = 3; + string lang = 4; + } + VisibilityRuleEmbedded status = 5; + oneof ext { + int64 en = 6; + VisibilityRuleEmbedded no = 7; + } + string internal_field = 8 [(google.api.field_visibility).restriction = "INTERNAL"]; + string preview_field = 9 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; + VisibilityEnum an_enum = 10; +} + +// VisibilityRuleEchoService service responds to incoming echo requests. +// Different services will be available in the swagger documentation depending +// based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors` +// flag when calling protoc-gen-openapiv2. +service VisibilityRuleEchoService { + // Echo method receives a simple message and returns it. + // It should always be visible in the open API output. + rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.http) = { + post: "/v1/example/echo/{id}" + }; + } + // EchoInternal is an internal API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "INTERNAL". + rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL"; + option (google.api.http) = { + get: "/v1/example/echo_internal" + }; + } + // EchoPreview is a preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW". + rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "PREVIEW"; + option (google.api.http) = { + get: "/v1/example/echo_preview" + }; + } + // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". + rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL,PREVIEW"; + option (google.api.http) = { + get: "/v1/example/echo_internal_and_preview" + }; + } +} + +// VisibilityRuleInternalEchoService service responds to incoming echo requests. +// It should only be visible in the OpenAPI spec if `visibility_restriction_selectors` includes "INTERNAL". +service VisibilityRuleInternalEchoService { + option (google.api.api_visibility).restriction = "INTERNAL"; + + // Echo method receives a simple message and returns it. + // It should not be visible in the open API output. + rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.http) = { + post: "/v1/example/internal/echo/{id}" + }; + } +} diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go b/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go new file mode 100644 index 00000000000..a7e90ea15da --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go @@ -0,0 +1,311 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package examplepb + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// VisibilityRuleEchoServiceClient is the client API for VisibilityRuleEchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type VisibilityRuleEchoServiceClient interface { + // Echo method receives a simple message and returns it. + // It should always be visible in the open API output. + Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) + // EchoInternal is an internal API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "INTERNAL". + EchoInternal(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) + // EchoPreview is a preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW". + EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) + // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". + EchoInternalAndPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) +} + +type visibilityRuleEchoServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewVisibilityRuleEchoServiceClient(cc grpc.ClientConnInterface) VisibilityRuleEchoServiceClient { + return &visibilityRuleEchoServiceClient{cc} +} + +func (c *visibilityRuleEchoServiceClient) Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { + out := new(VisibilityRuleSimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *visibilityRuleEchoServiceClient) EchoInternal(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { + out := new(VisibilityRuleSimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *visibilityRuleEchoServiceClient) EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { + out := new(VisibilityRuleSimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *visibilityRuleEchoServiceClient) EchoInternalAndPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { + out := new(VisibilityRuleSimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// VisibilityRuleEchoServiceServer is the server API for VisibilityRuleEchoService service. +// All implementations should embed UnimplementedVisibilityRuleEchoServiceServer +// for forward compatibility +type VisibilityRuleEchoServiceServer interface { + // Echo method receives a simple message and returns it. + // It should always be visible in the open API output. + Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) + // EchoInternal is an internal API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "INTERNAL". + EchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) + // EchoPreview is a preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW". + EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) + // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". + EchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) +} + +// UnimplementedVisibilityRuleEchoServiceServer should be embedded to have forward compatible implementations. +type UnimplementedVisibilityRuleEchoServiceServer struct { +} + +func (UnimplementedVisibilityRuleEchoServiceServer) Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") +} +func (UnimplementedVisibilityRuleEchoServiceServer) EchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoInternal not implemented") +} +func (UnimplementedVisibilityRuleEchoServiceServer) EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoPreview not implemented") +} +func (UnimplementedVisibilityRuleEchoServiceServer) EchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method EchoInternalAndPreview not implemented") +} + +// UnsafeVisibilityRuleEchoServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to VisibilityRuleEchoServiceServer will +// result in compilation errors. +type UnsafeVisibilityRuleEchoServiceServer interface { + mustEmbedUnimplementedVisibilityRuleEchoServiceServer() +} + +func RegisterVisibilityRuleEchoServiceServer(s grpc.ServiceRegistrar, srv VisibilityRuleEchoServiceServer) { + s.RegisterService(&VisibilityRuleEchoService_ServiceDesc, srv) +} + +func _VisibilityRuleEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisibilityRuleSimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VisibilityRuleEchoServiceServer).Echo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VisibilityRuleEchoServiceServer).Echo(ctx, req.(*VisibilityRuleSimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _VisibilityRuleEchoService_EchoInternal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisibilityRuleSimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VisibilityRuleEchoServiceServer).EchoInternal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VisibilityRuleEchoServiceServer).EchoInternal(ctx, req.(*VisibilityRuleSimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _VisibilityRuleEchoService_EchoPreview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisibilityRuleSimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VisibilityRuleEchoServiceServer).EchoPreview(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VisibilityRuleEchoServiceServer).EchoPreview(ctx, req.(*VisibilityRuleSimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _VisibilityRuleEchoService_EchoInternalAndPreview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisibilityRuleSimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VisibilityRuleEchoServiceServer).EchoInternalAndPreview(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VisibilityRuleEchoServiceServer).EchoInternalAndPreview(ctx, req.(*VisibilityRuleSimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + +// VisibilityRuleEchoService_ServiceDesc is the grpc.ServiceDesc for VisibilityRuleEchoService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var VisibilityRuleEchoService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService", + HandlerType: (*VisibilityRuleEchoServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Echo", + Handler: _VisibilityRuleEchoService_Echo_Handler, + }, + { + MethodName: "EchoInternal", + Handler: _VisibilityRuleEchoService_EchoInternal_Handler, + }, + { + MethodName: "EchoPreview", + Handler: _VisibilityRuleEchoService_EchoPreview_Handler, + }, + { + MethodName: "EchoInternalAndPreview", + Handler: _VisibilityRuleEchoService_EchoInternalAndPreview_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", +} + +// VisibilityRuleInternalEchoServiceClient is the client API for VisibilityRuleInternalEchoService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type VisibilityRuleInternalEchoServiceClient interface { + // Echo method receives a simple message and returns it. + // It should not be visible in the open API output. + Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) +} + +type visibilityRuleInternalEchoServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewVisibilityRuleInternalEchoServiceClient(cc grpc.ClientConnInterface) VisibilityRuleInternalEchoServiceClient { + return &visibilityRuleInternalEchoServiceClient{cc} +} + +func (c *visibilityRuleInternalEchoServiceClient) Echo(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { + out := new(VisibilityRuleSimpleMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// VisibilityRuleInternalEchoServiceServer is the server API for VisibilityRuleInternalEchoService service. +// All implementations should embed UnimplementedVisibilityRuleInternalEchoServiceServer +// for forward compatibility +type VisibilityRuleInternalEchoServiceServer interface { + // Echo method receives a simple message and returns it. + // It should not be visible in the open API output. + Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) +} + +// UnimplementedVisibilityRuleInternalEchoServiceServer should be embedded to have forward compatible implementations. +type UnimplementedVisibilityRuleInternalEchoServiceServer struct { +} + +func (UnimplementedVisibilityRuleInternalEchoServiceServer) Echo(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") +} + +// UnsafeVisibilityRuleInternalEchoServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to VisibilityRuleInternalEchoServiceServer will +// result in compilation errors. +type UnsafeVisibilityRuleInternalEchoServiceServer interface { + mustEmbedUnimplementedVisibilityRuleInternalEchoServiceServer() +} + +func RegisterVisibilityRuleInternalEchoServiceServer(s grpc.ServiceRegistrar, srv VisibilityRuleInternalEchoServiceServer) { + s.RegisterService(&VisibilityRuleInternalEchoService_ServiceDesc, srv) +} + +func _VisibilityRuleInternalEchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VisibilityRuleSimpleMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VisibilityRuleInternalEchoServiceServer).Echo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VisibilityRuleInternalEchoServiceServer).Echo(ctx, req.(*VisibilityRuleSimpleMessage)) + } + return interceptor(ctx, in, info, handler) +} + +// VisibilityRuleInternalEchoService_ServiceDesc is the grpc.ServiceDesc for VisibilityRuleInternalEchoService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var VisibilityRuleInternalEchoService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService", + HandlerType: (*VisibilityRuleInternalEchoServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Echo", + Handler: _VisibilityRuleInternalEchoService_Echo_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", +} diff --git a/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..e1209e80deb --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.buf.gen.yaml @@ -0,0 +1,6 @@ +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - visibility_restriction_selectors=INTERNAL diff --git a/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json new file mode 100644 index 00000000000..43ca6cd1393 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_internal_echo_service.swagger.json @@ -0,0 +1,658 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", + "description": "Visibility Rule Echo Service\nSimilar to echo_service.proto but with annotations to change visibility\nof services, methods, fields and enum values.\n\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.", + "version": "version not set" + }, + "tags": [ + { + "name": "VisibilityRuleEchoService" + }, + { + "name": "VisibilityRuleInternalEchoService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should always be visible in the open API output.", + "operationId": "VisibilityRuleEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_internal": { + "get": { + "summary": "EchoInternal is an internal API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"INTERNAL\".", + "operationId": "VisibilityRuleEchoService_EchoInternal", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_internal_and_preview": { + "get": { + "summary": "EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".", + "operationId": "VisibilityRuleEchoService_EchoInternalAndPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/internal/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should not be visible in the open API output.", + "operationId": "VisibilityRuleInternalEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleInternalEchoService" + ] + } + } + }, + "definitions": { + "VisibilityRuleSimpleMessageVisibilityEnum": { + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + }, + "examplepbVisibilityRuleEmbedded": { + "type": "object", + "properties": { + "progress": { + "type": "string", + "format": "int64" + }, + "note": { + "type": "string" + }, + "internalField": { + "type": "string" + }, + "previewField": { + "type": "string" + } + }, + "description": "Embedded represents a message embedded in SimpleMessage." + }, + "examplepbVisibilityRuleSimpleMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "lang": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "en": { + "type": "string", + "format": "int64" + }, + "no": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "internalField": { + "type": "string" + }, + "previewField": { + "type": "string" + }, + "anEnum": { + "$ref": "#/definitions/VisibilityRuleSimpleMessageVisibilityEnum" + } + }, + "description": "SimpleMessage represents a simple message sent to the Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..23bf378362b --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_none_echo_service.buf.gen.yaml @@ -0,0 +1,4 @@ +version: v1 +plugins: + - name: openapiv2 + out: . diff --git a/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json new file mode 100644 index 00000000000..163de829ba7 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json @@ -0,0 +1,201 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", + "description": "Visibility Rule Echo Service\nSimilar to echo_service.proto but with annotations to change visibility\nof services, methods, fields and enum values.\n\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.", + "version": "version not set" + }, + "tags": [ + { + "name": "VisibilityRuleEchoService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should always be visible in the open API output.", + "operationId": "VisibilityRuleEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + } + }, + "definitions": { + "VisibilityRuleSimpleMessageVisibilityEnum": { + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + }, + "examplepbVisibilityRuleEmbedded": { + "type": "object", + "properties": { + "progress": { + "type": "string", + "format": "int64" + }, + "note": { + "type": "string" + } + }, + "description": "Embedded represents a message embedded in SimpleMessage." + }, + "examplepbVisibilityRuleSimpleMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "lang": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "en": { + "type": "string", + "format": "int64" + }, + "no": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "anEnum": { + "$ref": "#/definitions/VisibilityRuleSimpleMessageVisibilityEnum" + } + }, + "description": "SimpleMessage represents a simple message sent to the Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..0a2a741b972 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.buf.gen.yaml @@ -0,0 +1,7 @@ +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - visibility_restriction_selectors=PREVIEW + - visibility_restriction_selectors=INTERNAL diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json new file mode 100644 index 00000000000..94f44fdfb9b --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json @@ -0,0 +1,792 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", + "description": "Visibility Rule Echo Service\nSimilar to echo_service.proto but with annotations to change visibility\nof services, methods, fields and enum values.\n\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.", + "version": "version not set" + }, + "tags": [ + { + "name": "VisibilityRuleEchoService" + }, + { + "name": "VisibilityRuleInternalEchoService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should always be visible in the open API output.", + "operationId": "VisibilityRuleEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_internal": { + "get": { + "summary": "EchoInternal is an internal API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"INTERNAL\".", + "operationId": "VisibilityRuleEchoService_EchoInternal", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_internal_and_preview": { + "get": { + "summary": "EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".", + "operationId": "VisibilityRuleEchoService_EchoInternalAndPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_preview": { + "get": { + "summary": "EchoPreview is a preview API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"PREVIEW\".", + "operationId": "VisibilityRuleEchoService_EchoPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/internal/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should not be visible in the open API output.", + "operationId": "VisibilityRuleInternalEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "internalField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleInternalEchoService" + ] + } + } + }, + "definitions": { + "VisibilityRuleSimpleMessageVisibilityEnum": { + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_INTERNAL", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + }, + "examplepbVisibilityRuleEmbedded": { + "type": "object", + "properties": { + "progress": { + "type": "string", + "format": "int64" + }, + "note": { + "type": "string" + }, + "internalField": { + "type": "string" + }, + "previewField": { + "type": "string" + } + }, + "description": "Embedded represents a message embedded in SimpleMessage." + }, + "examplepbVisibilityRuleSimpleMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "lang": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "en": { + "type": "string", + "format": "int64" + }, + "no": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "internalField": { + "type": "string" + }, + "previewField": { + "type": "string" + }, + "anEnum": { + "$ref": "#/definitions/VisibilityRuleSimpleMessageVisibilityEnum" + } + }, + "description": "SimpleMessage represents a simple message sent to the Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml new file mode 100644 index 00000000000..c30eae1ee66 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.buf.gen.yaml @@ -0,0 +1,6 @@ +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - visibility_restriction_selectors=PREVIEW diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json new file mode 100644 index 00000000000..1f977554d69 --- /dev/null +++ b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json @@ -0,0 +1,457 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/examplepb/visibility_rule_echo_service.proto", + "description": "Visibility Rule Echo Service\nSimilar to echo_service.proto but with annotations to change visibility\nof services, methods, fields and enum values.\n\n`google.api.VisibilityRule` annotations are added to customize where they are generated.\nCombined with the option `visibility_restriction_selectors` overlapping rules will appear in the OpenAPI output.\nElements without `google.api.VisibilityRule` annotations will appear as usual in the generated output.\n\nThese restrictions and selectors are completely arbitrary and you can define whatever values or hierarchies you want.\nIn this example `INTERNAL`, `PREVIEW` are used, but `INTERNAL`, `ALPHA`, `BETA`, `RELEASED`, or anything else could be used if you wish.", + "version": "version not set" + }, + "tags": [ + { + "name": "VisibilityRuleEchoService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/echo/{id}": { + "post": { + "summary": "Echo method receives a simple message and returns it.\nIt should always be visible in the open API output.", + "operationId": "VisibilityRuleEchoService_Echo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_internal_and_preview": { + "get": { + "summary": "EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"PREVIEW\" or \"INTERNAL\".", + "operationId": "VisibilityRuleEchoService_EchoInternalAndPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + }, + "/v1/example/echo_preview": { + "get": { + "summary": "EchoPreview is a preview API that should only be visible in the OpenAPI spec\nif `visibility_restriction_selectors` includes \"PREVIEW\".", + "operationId": "VisibilityRuleEchoService_EchoPreview", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "no.previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "previewField", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "anEnum", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + } + ], + "tags": [ + "VisibilityRuleEchoService" + ] + } + } + }, + "definitions": { + "VisibilityRuleSimpleMessageVisibilityEnum": { + "type": "string", + "enum": [ + "VISIBILITY_ENUM_UNSPECIFIED", + "VISIBILITY_ENUM_VISIBLE", + "VISIBILITY_ENUM_PREVIEW" + ], + "default": "VISIBILITY_ENUM_UNSPECIFIED" + }, + "examplepbVisibilityRuleEmbedded": { + "type": "object", + "properties": { + "progress": { + "type": "string", + "format": "int64" + }, + "note": { + "type": "string" + }, + "previewField": { + "type": "string" + } + }, + "description": "Embedded represents a message embedded in SimpleMessage." + }, + "examplepbVisibilityRuleSimpleMessage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id represents the message identifier." + }, + "num": { + "type": "string", + "format": "int64" + }, + "lineNum": { + "type": "string", + "format": "int64" + }, + "lang": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "en": { + "type": "string", + "format": "int64" + }, + "no": { + "$ref": "#/definitions/examplepbVisibilityRuleEmbedded" + }, + "previewField": { + "type": "string" + }, + "anEnum": { + "$ref": "#/definitions/VisibilityRuleSimpleMessageVisibilityEnum" + } + }, + "description": "SimpleMessage represents a simple message sent to the Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 80e8eb378b3..63dbdb14536 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -71,6 +71,9 @@ type Registry struct { // name. openAPINamingStrategy string + // visibilityRestrictionSelectors is a map of selectors for `google.api.VisibilityRule`s that will be included in the OpenAPI output. + visibilityRestrictionSelectors map[string]bool + // useGoTemplate determines whether you want to use GO templates // in your protofile comments useGoTemplate bool @@ -141,13 +144,14 @@ type annotationIdentifier struct { // NewRegistry returns a new Registry. func NewRegistry() *Registry { return &Registry{ - msgs: make(map[string]*Message), - enums: make(map[string]*Enum), - files: make(map[string]*File), - pkgMap: make(map[string]string), - pkgAliases: make(map[string]string), - externalHTTPRules: make(map[string][]*annotations.HttpRule), - openAPINamingStrategy: "legacy", + msgs: make(map[string]*Message), + enums: make(map[string]*Enum), + files: make(map[string]*File), + pkgMap: make(map[string]string), + pkgAliases: make(map[string]string), + externalHTTPRules: make(map[string][]*annotations.HttpRule), + openAPINamingStrategy: "legacy", + visibilityRestrictionSelectors: make(map[string]bool), repeatedPathParamSeparator: repeatedFieldSeparator{ name: "csv", sep: ',', @@ -571,6 +575,19 @@ func (r *Registry) GetOmitEnumDefaultValue() bool { return r.omitEnumDefaultValue } +// SetVisibilityRestrictionSelectors sets the visibility restriction selectors. +func (r *Registry) SetVisibilityRestrictionSelectors(selectors []string) { + r.visibilityRestrictionSelectors = make(map[string]bool) + for _, selector := range selectors { + r.visibilityRestrictionSelectors[strings.TrimSpace(selector)] = true + } +} + +// GetVisibilityRestrictionSelectors retrieves he visibility restriction selectors. +func (r *Registry) GetVisibilityRestrictionSelectors() map[string]bool { + return r.visibilityRestrictionSelectors +} + // SetDisableDefaultErrors sets disableDefaultErrors func (r *Registry) SetDisableDefaultErrors(use bool) { r.disableDefaultErrors = use diff --git a/protoc-gen-openapiv2/BUILD.bazel b/protoc-gen-openapiv2/BUILD.bazel index 56afabe05af..6ef372c5a00 100644 --- a/protoc-gen-openapiv2/BUILD.bazel +++ b/protoc-gen-openapiv2/BUILD.bazel @@ -10,6 +10,7 @@ go_library( "//internal/codegenerator", "//internal/descriptor", "//protoc-gen-openapiv2/internal/genopenapi", + "//utilities", "@com_github_golang_glog//:glog", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//types/pluginpb", diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index f8a155c6ff3..286121015d2 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -67,7 +67,8 @@ def _run_proto_gen_openapi( simple_operation_ids, proto3_optional_nullable, openapi_configuration, - generate_unbound_methods): + generate_unbound_methods, + visibility_restriction_selectors): args = actions.args() args.add("--plugin", "protoc-gen-openapiv2=%s" % protoc_gen_openapiv2.path) @@ -123,6 +124,9 @@ def _run_proto_gen_openapi( if proto3_optional_nullable: args.add("--openapiv2_opt", "proto3_optional_nullable=true") + for visibility_restriction_selector in visibility_restriction_selectors: + args.add("--openapiv2_opt", "visibility_restriction_selectors=%s" % visibility_restriction_selector) + args.add("--openapiv2_opt", "repeated_path_param_separator=%s" % repeated_path_param_separator) proto_file_infos = _direct_source_infos(proto_info) @@ -223,6 +227,7 @@ def _proto_gen_openapi_impl(ctx): proto3_optional_nullable = ctx.attr.proto3_optional_nullable, openapi_configuration = ctx.file.openapi_configuration, generate_unbound_methods = ctx.attr.generate_unbound_methods, + visibility_restriction_selectors = ctx.attr.visibility_restriction_selectors, ), ), ), @@ -334,6 +339,13 @@ protoc_gen_openapiv2 = rule( doc = "generate swagger metadata even for RPC methods that have" + " no HttpRule annotation", ), + "visibility_restriction_selectors": attr.string_list( + mandatory = False, + doc = "list of `google.api.VisibilityRule` visibility labels to include" + + " in the generated output when a visibility annotation is defined." + + " Repeat this option to supply multiple values. Elements without" + + " visibility annotations are unaffected by this setting.", + ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 44bb282ef08..993b63db487 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -23,6 +23,7 @@ go_library( "@com_github_golang_glog//:glog", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@go_googleapis//google/api:annotations_go_proto", + "@go_googleapis//google/api:visibility_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@in_gopkg_yaml_v2//:yaml_v2", "@io_bazel_rules_go//proto/wkt:any_go_proto", @@ -54,6 +55,7 @@ go_test( "//runtime", "@com_github_google_go_cmp//cmp", "@go_googleapis//google/api:annotations_go_proto", + "@go_googleapis//google/api:visibility_go_proto", "@in_gopkg_yaml_v2//:yaml_v2", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_protobuf//proto", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 3161d8e2fea..773c3863e9d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -22,6 +22,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" openapi_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" "google.golang.org/genproto/googleapis/api/annotations" + "google.golang.org/genproto/googleapis/api/visibility" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/descriptorpb" @@ -107,6 +108,9 @@ var wktSchemas = map[string]schemaCore{ func listEnumNames(reg *descriptor.Registry, enum *descriptor.Enum) (names []string) { for _, value := range enum.GetValue() { + if !isVisible(getEnumValueVisibilityOption(value), reg) { + continue + } if reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 { continue } @@ -120,6 +124,9 @@ func listEnumNumbers(reg *descriptor.Registry, enum *descriptor.Enum) (numbers [ if reg.GetOmitEnumDefaultValue() && value.GetNumber() == 0 { continue } + if !isVisible(getEnumValueVisibilityOption(value), reg) { + continue + } numbers = append(numbers, strconv.Itoa(int(value.GetNumber()))) } return @@ -139,6 +146,10 @@ func getEnumDefault(reg *descriptor.Registry, enum *descriptor.Enum) string { // messageToQueryParameters converts a message to a list of OpenAPI query parameters. func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body) (params []openapiParameterObject, err error) { for _, field := range message.Fields { + if !isVisible(getFieldVisibilityOption(field), reg) { + continue + } + p, err := queryParams(message, field, "", reg, pathParams, body, reg.GetRecursiveDepth()) if err != nil { return nil, err @@ -321,6 +332,10 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre touchedOut := cycle.Branch() for _, nestedField := range msg.Fields { + if !isVisible(getFieldVisibilityOption(nestedField), reg) { + continue + } + fieldName := reg.FieldName(field) p, err := nestedQueryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams, body, touchedOut) if err != nil { @@ -369,6 +384,10 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto func findNestedMessagesAndEnumerations(message *descriptor.Message, reg *descriptor.Registry, m messageMap, e enumMap) { // Iterate over all the fields that for _, t := range message.Fields { + if !isVisible(getFieldVisibilityOption(t), reg) { + continue + } + fieldType := t.GetTypeName() // If the type is an empty string then it is a proto primitive if fieldType != "" { @@ -447,6 +466,10 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry schema.Required = filterOutExcludedFields(schema.Required, pathParams) for _, f := range msg.Fields { + if !isVisible(getFieldVisibilityOption(f), reg) { + continue + } + if shouldExcludeField(f.GetName(), pathParams) { continue } @@ -554,6 +577,30 @@ func renderMessagesAsDefinition(messages messageMap, d openapiDefinitionsObject, return nil } +// isVisible checks if a field/RPC is visible based on the visibility restriction +// combined with the `visibility_restriction_selectors`. +// Elements with an overlap on `visibility_restriction_selectors` are visible, those without are not visible. +// Elements without `google.api.VisibilityRule` annotations entirely are always visible. +func isVisible(r *visibility.VisibilityRule, reg *descriptor.Registry) bool { + if r == nil { + return true + } + + restrictions := strings.Split(strings.TrimSpace(r.Restriction), ",") + // No restrictions results in the element always being visible + if len(restrictions) == 0 { + return true + } + + for _, restriction := range restrictions { + if reg.GetVisibilityRestrictionSelectors()[strings.TrimSpace(restriction)] { + return true + } + } + + return false +} + func shouldExcludeField(name string, excluded []descriptor.Parameter) bool { for _, p := range excluded { if len(p.FieldPath) == 1 && name == p.FieldPath[0].Name { @@ -904,6 +951,9 @@ func partsToRegexpMap(parts []string) map[string]string { func renderServiceTags(services []*descriptor.Service, reg *descriptor.Registry) []openapiTagObject { var tags []openapiTagObject for _, svc := range services { + if !isVisible(getServiceVisibilityOption(svc), reg) { + continue + } tagName := svc.GetName() if pkg := svc.File.GetPackage(); pkg != "" && reg.IsIncludePackageInTags() { tagName = pkg + "." + tagName @@ -942,7 +992,16 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re lastFile = svc.File svcBaseIdx = svcIdx } + + if !isVisible(getServiceVisibilityOption(svc), reg) { + continue + } + for methIdx, meth := range svc.Methods { + if !isVisible(getMethodVisibilityOption(meth), reg) { + continue + } + for bIdx, b := range meth.Bindings { operationFunc := operationForMethod(b.HTTPMethod) // Iterate over all the OpenAPI parameters @@ -1997,6 +2056,9 @@ func enumValueProtoComments(reg *descriptor.Registry, enum *descriptor.Enum) str protoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.EnumDescriptorProto)(nil)), "Value") var comments []string for idx, value := range enum.GetValue() { + if !isVisible(getEnumValueVisibilityOption(value), reg) { + continue + } name := value.GetName() if reg.GetEnumsAsInts() { name = strconv.Itoa(int(value.GetNumber())) @@ -2268,6 +2330,66 @@ func extractFieldBehaviorFromFieldDescriptor(fd *descriptorpb.FieldDescriptorPro return opts, nil } +func getFieldVisibilityOption(fd *descriptor.Field) *visibility.VisibilityRule { + if fd.Options == nil { + return nil + } + if !proto.HasExtension(fd.Options, visibility.E_FieldVisibility) { + return nil + } + ext := proto.GetExtension(fd.Options, visibility.E_FieldVisibility) + opts, ok := ext.(*visibility.VisibilityRule) + if !ok { + return nil + } + return opts +} + +func getServiceVisibilityOption(fd *descriptor.Service) *visibility.VisibilityRule { + if fd.Options == nil { + return nil + } + if !proto.HasExtension(fd.Options, visibility.E_ApiVisibility) { + return nil + } + ext := proto.GetExtension(fd.Options, visibility.E_ApiVisibility) + opts, ok := ext.(*visibility.VisibilityRule) + if !ok { + return nil + } + return opts +} + +func getMethodVisibilityOption(fd *descriptor.Method) *visibility.VisibilityRule { + if fd.Options == nil { + return nil + } + if !proto.HasExtension(fd.Options, visibility.E_MethodVisibility) { + return nil + } + ext := proto.GetExtension(fd.Options, visibility.E_MethodVisibility) + opts, ok := ext.(*visibility.VisibilityRule) + if !ok { + return nil + } + return opts +} + +func getEnumValueVisibilityOption(fd *descriptorpb.EnumValueDescriptorProto) *visibility.VisibilityRule { + if fd.Options == nil { + return nil + } + if !proto.HasExtension(fd.Options, visibility.E_ValueVisibility) { + return nil + } + ext := proto.GetExtension(fd.Options, visibility.E_ValueVisibility) + opts, ok := ext.(*visibility.VisibilityRule) + if !ok { + return nil + } + return opts +} + func getMethodOpenAPIOption(reg *descriptor.Registry, meth *descriptor.Method) (*openapi_options.Operation, error) { opts, err := extractOperationOptionFromMethodDescriptor(meth.MethodDescriptorProto) if err != nil { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index e806524cf41..d82b425a94b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -19,6 +19,7 @@ import ( openapi_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/googleapis/api/annotations" + "google.golang.org/genproto/googleapis/api/visibility" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" @@ -4162,6 +4163,14 @@ func TestRenderMessagesAsDefinition(t *testing.T) { var fieldBehaviorOutputOnlyOptions = new(descriptorpb.FieldOptions) proto.SetExtension(fieldBehaviorOutputOnlyOptions, annotations.E_FieldBehavior, fieldBehaviorOutputOnlyField) + var fieldVisibilityFieldInternal = &visibility.VisibilityRule{Restriction: "INTERNAL"} + var fieldVisibilityInternalOption = new(descriptorpb.FieldOptions) + proto.SetExtension(fieldVisibilityInternalOption, visibility.E_FieldVisibility, fieldVisibilityFieldInternal) + + var fieldVisibilityFieldPreview = &visibility.VisibilityRule{Restriction: "INTERNAL,PREVIEW"} + var fieldVisibilityPreviewOption = new(descriptorpb.FieldOptions) + proto.SetExtension(fieldVisibilityPreviewOption, visibility.E_FieldVisibility, fieldVisibilityFieldPreview) + tests := []struct { descr string msgDescs []*descriptorpb.DescriptorProto @@ -4398,6 +4407,70 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, + { + descr: "JSONSchema with hidden properties", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("aInternalField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + Options: fieldVisibilityInternalOption, + }, + { + Name: proto.String("aPreviewField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + Options: fieldVisibilityPreviewOption, + }, + { + Name: proto.String("aVisibleField"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(3), + }, + }, + }, + }, + schema: map[string]openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + Required: []string{"req"}, + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"req"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "aPreviewField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + { + Key: "aVisibleField", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + }, + }, + }, + }, { descr: "JSONSchema with path parameters", msgDescs: []*descriptorpb.DescriptorProto{ @@ -4551,6 +4624,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { err := reg.Load(&pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) + reg.SetVisibilityRestrictionSelectors([]string{"PREVIEW"}) if err != nil { t.Fatalf("failed to load code generator request: %v", err) } diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 8728cab2d9e..dce7fc31552 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -10,34 +10,36 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/pluginpb" ) var ( - importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") - file = flag.String("file", "-", "where to load data from") - allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") - grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to file which describes the gRPC API Configuration in YAML format") - allowMerge = flag.Bool("allow_merge", false, "if set, generation one OpenAPI file out of multiple protos") - mergeFileName = flag.String("merge_file_name", "apidocs", "target OpenAPI file name prefix after merge") - useJSONNamesForFields = flag.Bool("json_names_for_fields", true, "if disabled, the original proto name will be used for generating OpenAPI definitions") - repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`") - versionFlag = flag.Bool("version", false, "print the current version") - allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") - includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") - useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage). DEPRECATED: prefer `openapi_naming_strategy=fqn`") - openAPINamingStrategy = flag.String("openapi_naming_strategy", "", "use the given OpenAPI naming strategy. Allowed values are `legacy`, `fqn`, `simple`. If unset, either `legacy` or `fqn` are selected, depending on the value of the `fqn_for_openapi_name` flag") - useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") - disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") - enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") - simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") - proto3OptionalNullable = flag.Bool("proto3_optional_nullable", false, "whether Proto3 Optional fields should be marked as x-nullable") - openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") - generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") - recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") - omitEnumDefaultValue = flag.Bool("omit_enum_default_value", false, "if set, omit default enum value") - outputFormat = flag.String("output_format", string(genopenapi.FormatJSON), fmt.Sprintf("output content format. Allowed values are: `%s`, `%s`", genopenapi.FormatJSON, genopenapi.FormatYAML)) + importPrefix = flag.String("import_prefix", "", "prefix to be added to go package paths for imported proto files") + file = flag.String("file", "-", "where to load data from") + allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") + grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to file which describes the gRPC API Configuration in YAML format") + allowMerge = flag.Bool("allow_merge", false, "if set, generation one OpenAPI file out of multiple protos") + mergeFileName = flag.String("merge_file_name", "apidocs", "target OpenAPI file name prefix after merge") + useJSONNamesForFields = flag.Bool("json_names_for_fields", true, "if disabled, the original proto name will be used for generating OpenAPI definitions") + repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`") + versionFlag = flag.Bool("version", false, "print the current version") + allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") + useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage). DEPRECATED: prefer `openapi_naming_strategy=fqn`") + openAPINamingStrategy = flag.String("openapi_naming_strategy", "", "use the given OpenAPI naming strategy. Allowed values are `legacy`, `fqn`, `simple`. If unset, either `legacy` or `fqn` are selected, depending on the value of the `fqn_for_openapi_name` flag") + useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") + disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") + enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") + simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") + proto3OptionalNullable = flag.Bool("proto3_optional_nullable", false, "whether Proto3 Optional fields should be marked as x-nullable") + openAPIConfiguration = flag.String("openapi_configuration", "", "path to file which describes the OpenAPI Configuration in YAML format") + generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate swagger metadata even for RPC methods that have no HttpRule annotation") + recursiveDepth = flag.Int("recursive-depth", 1000, "maximum recursion count allowed for a field type") + omitEnumDefaultValue = flag.Bool("omit_enum_default_value", false, "if set, omit default enum value") + outputFormat = flag.String("output_format", string(genopenapi.FormatJSON), fmt.Sprintf("output content format. Allowed values are: `%s`, `%s`", genopenapi.FormatJSON, genopenapi.FormatYAML)) + visibilityRestrictionSelectors = utilities.StringArrayFlag(flag.CommandLine, "visibility_restriction_selectors", "list of `google.api.VisibilityRule` visibility labels to include in the generated output when a visibility annotation is defined. Repeat this option to supply multiple values. Elements without visibility annotations are unaffected by this setting.") ) // Variables set by goreleaser at build time @@ -115,6 +117,7 @@ func main() { reg.SetGenerateUnboundMethods(*generateUnboundMethods) reg.SetRecursiveDepth(*recursiveDepth) reg.SetOmitEnumDefaultValue(*omitEnumDefaultValue) + reg.SetVisibilityRestrictionSelectors(*visibilityRestrictionSelectors) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index 5d8d12bc421..b8940946577 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -8,6 +8,7 @@ go_library( "doc.go", "pattern.go", "readerfactory.go", + "string_array_flag.go", "trie.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/utilities", @@ -16,7 +17,10 @@ go_library( go_test( name = "utilities_test", size = "small", - srcs = ["trie_test.go"], + srcs = [ + "string_array_flag_test.go", + "trie_test.go", + ], deps = [":utilities"], ) diff --git a/utilities/string_array_flag.go b/utilities/string_array_flag.go new file mode 100644 index 00000000000..d224ab776c0 --- /dev/null +++ b/utilities/string_array_flag.go @@ -0,0 +1,33 @@ +package utilities + +import ( + "flag" + "strings" +) + +// flagInterface is an cut down interface to `flag` +type flagInterface interface { + Var(value flag.Value, name string, usage string) +} + +// StringArrayFlag defines a flag with the specified name and usage string. +// The return value is the address of a `StringArrayFlags` variable that stores the repeated values of the flag. +func StringArrayFlag(f flagInterface, name string, usage string) *StringArrayFlags { + value := &StringArrayFlags{} + f.Var(value, name, usage) + return value +} + +// StringArrayFlags is a wrapper of `[]string` to provider an interface for `flag.Var` +type StringArrayFlags []string + +// String returns a string representation of `StringArrayFlags` +func (i *StringArrayFlags) String() string { + return strings.Join(*i, ",") +} + +// Set appends a value to `StringArrayFlags` +func (i *StringArrayFlags) Set(value string) error { + *i = append(*i, value) + return nil +} diff --git a/utilities/string_array_flag_test.go b/utilities/string_array_flag_test.go new file mode 100644 index 00000000000..34cbefb58cc --- /dev/null +++ b/utilities/string_array_flag_test.go @@ -0,0 +1,50 @@ +package utilities_test + +import ( + "flag" + "reflect" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" +) + +func TestStringArrayFlag(t *testing.T) { + tests := []struct { + name string + flags []string + want string + }{ + { + name: "No Value", + flags: []string{}, + want: "", + }, + { + name: "Single Value", + flags: []string{"--my_flag=1"}, + want: "1", + }, + { + name: "Repeated Value", + flags: []string{"--my_flag=1", "--my_flag=2"}, + want: "1,2", + }, + { + name: "Repeated Same Value", + flags: []string{"--my_flag=1", "--my_flag=1"}, + want: "1,1", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + flagSet := flag.NewFlagSet("test", flag.PanicOnError) + result := utilities.StringArrayFlag(flagSet, "my_flag", "repeated flag") + if err := flagSet.Parse(tt.flags); err != nil { + t.Errorf("flagSet.Parse() failed with %v", err) + } + if !reflect.DeepEqual(result.String(), tt.want) { + t.Errorf("StringArrayFlag() = %v, want %v", result.String(), tt.want) + } + }) + } +} From d8e890717a850f4bcc23f192fb567176d7f92e1b Mon Sep 17 00:00:00 2001 From: antonioiubatti93 Date: Tue, 15 Mar 2022 16:41:09 +0100 Subject: [PATCH 1222/1518] Support custom HTTP health check endpoint paths (#2587) * feature/custom HTTP health check endpoint * code: improve comment to function Co-authored-by: Johan Brandhorst-Satzkorn Co-authored-by: Johan Brandhorst-Satzkorn --- docs/docs/operations/health_check.md | 6 ++++- runtime/mux.go | 19 ++++++++++----- runtime/mux_test.go | 36 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/docs/docs/operations/health_check.md b/docs/docs/operations/health_check.md index c66f05da49f..b8a8be5a3ee 100644 --- a/docs/docs/operations/health_check.md +++ b/docs/docs/operations/health_check.md @@ -53,4 +53,8 @@ to `/healthz` will result in the following: If you've implemented multiple services in your server you can target specific services with the `?service=` query parameter. This will then be added to the `health.HealthCheckRequest` in the `Service` property. With that you can -write your own logic to handle that in the health checking methods. \ No newline at end of file +write your own logic to handle that in the health checking methods. + +Analogously, to register an `{/endpoint/path}` endpoint in your `ServeMux` with a user-defined endpoint path, you can use +the `ServeMuxOption` `WithHealthEndpointAt`, which accepts a connection to your registered gRPC server +together with a custom `endpointPath string` parameter. diff --git a/runtime/mux.go b/runtime/mux.go index 8a3238b048d..b65f2adbcd5 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -205,24 +205,24 @@ func WithDisablePathLengthFallback() ServeMuxOption { } } -// WithHealthzEndpoint returns a ServeMuxOption that will add a /healthz endpoint to the created ServeMux. +// WithHealthEndpointAt returns a ServeMuxOption that will add an endpoint to the created ServeMux at the path specified by endpointPath. // When called the handler will forward the request to the upstream grpc service health check (defined in the // gRPC Health Checking Protocol). +// // See here https://grpc-ecosystem.github.io/grpc-gateway/docs/operations/health_check/ for more information on how // to setup the protocol in the grpc server. +// // If you define a service as query parameter, this will also be forwarded as service in the HealthCheckRequest. -func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMuxOption { +func WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpointPath string) ServeMuxOption { return func(s *ServeMux) { // error can be ignored since pattern is definitely valid _ = s.HandlePath( - http.MethodGet, "/healthz", func(w http.ResponseWriter, r *http.Request, _ map[string]string, + http.MethodGet, endpointPath, func(w http.ResponseWriter, r *http.Request, _ map[string]string, ) { _, outboundMarshaler := MarshalerForRequest(s, r) - serviceQueryParam := r.URL.Query().Get("service") - resp, err := healthCheckClient.Check(r.Context(), &grpc_health_v1.HealthCheckRequest{ - Service: serviceQueryParam, + Service: r.URL.Query().Get("service"), }) if err != nil { s.errorHandler(r.Context(), s, outboundMarshaler, w, r, err) @@ -247,6 +247,13 @@ func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMux } } +// WithHealthzEndpoint returns a ServeMuxOption that will add a /healthz endpoint to the created ServeMux. +// +// See WithHealthEndpointAt for the general implementation. +func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMuxOption { + return WithHealthEndpointAt(healthCheckClient, "/healthz") +} + // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 66d0ecb2972..8e52a07e1a3 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -663,6 +663,42 @@ func TestWithHealthzEndpoint_codes(t *testing.T) { } } +func TestWithHealthEndpointAt_consistentWithHealthz(t *testing.T) { + const endpointPath = "/healthz" + + r := httptest.NewRequest(http.MethodGet, endpointPath, nil) + + for _, tt := range healthCheckTests { + tt := tt + + t.Run(tt.name, func(t *testing.T) { + client := &dummyHealthCheckClient{ + status: tt.status, + code: tt.code, + } + + w := httptest.NewRecorder() + + runtime.NewServeMux( + runtime.WithHealthEndpointAt(client, endpointPath), + ).ServeHTTP(w, r) + + refW := httptest.NewRecorder() + + runtime.NewServeMux( + runtime.WithHealthzEndpoint(client), + ).ServeHTTP(refW, r) + + if w.Code != refW.Code { + t.Errorf( + "result http status code for grpc code %q and status %q should be equal to %d, but got %d", + tt.code, tt.status, refW.Code, w.Code, + ) + } + }) + } +} + func TestWithHealthzEndpoint_serviceParam(t *testing.T) { service := "test" From 70766258c61391527e824fba1f7cd92238ef84b8 Mon Sep 17 00:00:00 2001 From: Maksym Kryvchun Date: Tue, 15 Mar 2022 21:08:28 +0200 Subject: [PATCH 1223/1518] Output format documentation (#2590) * Output format documentation * proto3 code mark * Review fixes * Review fixes: buf --- .../mapping/customizing_openapi_output.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index f04b796e238..865c0f01b22 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -404,4 +404,99 @@ For a more in depth example see [visibility_rule_echo_service.proto](https://git - [`visibility_restriction_selectors=INTERNAL,visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json) - [Not set](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json) +### Output format + +By default the output format is JSON, but it is possible to configure it using the `output_format` option. Allowed values are: `json`, `yaml`. The output format will also change the extension of the output files. + +For example, if using `buf`: +```yaml + - name: openapiv2 + out: pkg + opt: output_format=yaml +``` + +Input example: +```protobuf +syntax = "proto3"; + +package helloproto.v1; +option go_package = "helloproto/v1;helloproto"; + +import "google/api/annotations.proto"; + +service EchoService { + rpc Hello(HelloReq) returns (HelloResp) { + option (google.api.http) = { + get: "/api/hello" + }; + } +} + +message HelloReq { + string name = 1; +} + +message HelloResp { + string message = 1; +} +``` + +Output: +```yaml +swagger: "2.0" +info: + title: helloproto/v1/example.proto + version: version not set +tags: +- name: EchoService +consumes: +- application/json +produces: +- application/json +paths: + /api/hello: + get: + operationId: EchoService_Hello + responses: + "200": + description: A successful response. + schema: + $ref: '#/definitions/v1HelloResp' + default: + description: An unexpected error response. + schema: + $ref: '#/definitions/rpcStatus' + parameters: + - name: name + in: query + required: false + type: string + tags: + - EchoService +definitions: + protobufAny: + type: object + properties: + '@type': + type: string + additionalProperties: {} + rpcStatus: + type: object + properties: + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + $ref: '#/definitions/protobufAny' + v1HelloResp: + type: object + properties: + message: + type: string +``` + {% endraw %} From e4a042d59f6929ce7a9299433695032b7a51b7b8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 16 Mar 2022 02:22:34 +0000 Subject: [PATCH 1224/1518] chore(deps): update dependency golang to v1.18.0 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index bcfe6e82484..a3f1108e5ae 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.8 +FROM golang:1.18.0 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 3c7302389bb..baf7d3a5d3c 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.8 as builder +FROM golang:1.18.0 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 57a49a4a1c2..2b9115ea116 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.17.8 as builder +FROM golang:1.18.0 as builder ARG RELEASE_VERSION From c5b969a00a3e6876ea0fd4349fef0a582acc564f Mon Sep 17 00:00:00 2001 From: Brandon Cook Date: Thu, 17 Mar 2022 03:19:45 +1100 Subject: [PATCH 1225/1518] Remove duplicated endraw statement for documentation generation (#2589) * Remove duplicated endraw statement for documentation generation This was accidentally copy pasted in my last PR, breaking documentation generation. https://github.com/grpc-ecosystem/grpc-gateway/pull/2578 * Remove proto3 reference for code block * Fix code block format * proto -> protobuf --- docs/docs/mapping/customizing_openapi_output.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 865c0f01b22..259a9b55f03 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -283,7 +283,6 @@ Output json: ] }, ``` -{% endraw %} ### Hiding fields, methods, services and enum values @@ -317,7 +316,7 @@ Note: Annotations are only supported on Services, Methods, Fields and Enum Value `opt: visibility_restriction_selectors=PREVIEW` will result in: Input Example: -```proto3 +```protobuf service Echo { rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { option (google.api.method_visibility).restriction = "INTERNAL"; From 7c0259df897b96a79a8ab2a9ff289526bfaa317c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 17 Mar 2022 21:29:52 -0400 Subject: [PATCH 1226/1518] Update gorelease base --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f958a13800c..e6b85a302a0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.8.0 + - run: gorelease -base=v2.9.0 push_bsr_plugins: docker: - image: circleci/golang From 9c4c61ee82ced05c313059cb5f39ce7589b79b02 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Mar 2022 12:23:03 +0000 Subject: [PATCH 1227/1518] fix(deps): update google.golang.org/genproto digest to 0efb43f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1a8ce9ff450..2d0005b9a8d 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106 + google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index ad057272f5f..d28999458ff 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106 h1:ErU+UA6wxadoU8nWrsy5MZUVBs75K17zUCsUCIfrXCE= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e h1:fNKDNuUyC4WH+inqDMpfXDdfvwfYILbsX+oskGZ8hxg= +google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cdad962c1b1..5ccc01e0a05 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ErU+UA6wxadoU8nWrsy5MZUVBs75K17zUCsUCIfrXCE=", - version = "v0.0.0-20220314164441-57ef72a4c106", + sum = "h1:fNKDNuUyC4WH+inqDMpfXDdfvwfYILbsX+oskGZ8hxg=", + version = "v0.0.0-20220317150908-0efb43f6373e", ) go_repository( name = "org_golang_google_grpc", From c20d40b67e395dbd6f8810d462c6909bcfca4fa4 Mon Sep 17 00:00:00 2001 From: Stel Abrego Date: Sun, 20 Mar 2022 10:19:35 -0700 Subject: [PATCH 1228/1518] Add delimiter after response stream error message (#2591) (#2596) --- runtime/handler.go | 12 ++++++++---- runtime/handler_test.go | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/runtime/handler.go b/runtime/handler.go index d1e21df4810..72080c50d78 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -52,11 +52,11 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal return } if err != nil { - handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) return } if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { - handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) return } @@ -82,7 +82,7 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal if err != nil { grpclog.Infof("Failed to marshal response chunk: %v", err) - handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) + handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) return } if _, err = w.Write(buf); err != nil { @@ -200,7 +200,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re return nil } -func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error) { +func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error, delimiter []byte) { st := mux.streamErrorHandler(ctx, err) msg := errorChunk(st) if !wroteHeader { @@ -216,6 +216,10 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar grpclog.Infof("Failed to notify error to client: %v", werr) return } + if _, derr := w.Write(delimiter); derr != nil { + grpclog.Infof("Failed to send delimiter chunk: %v", err) + return + } } func errorChunk(st *status.Status) map[string]proto.Message { diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 98af7fe7ec3..3755cd31366 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -120,6 +120,7 @@ func TestForwardResponseStream(t *testing.T) { // Skip non-stream errors t.Skip("checking error encodings") } + delimiter := marshaler.Delimiter() st := status.Convert(msg.err) b, err := marshaler.Marshal(map[string]proto.Message{ "error": st.Proto(), @@ -128,7 +129,7 @@ func TestForwardResponseStream(t *testing.T) { t.Errorf("marshaler.Marshal() failed %v", err) } errBytes := body[len(want):] - if string(errBytes) != string(b) { + if string(errBytes) != string(b)+string(delimiter) { t.Errorf("ForwardResponseStream() = \"%s\" want \"%s\"", errBytes, b) } From 1d70eabf53fa3cce0f27eb96755e9b8ba109e460 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 21 Mar 2022 15:34:17 +0000 Subject: [PATCH 1229/1518] chore(deps): update dependency bufbuild/buf to v1.1.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e6b85a302a0..e7d6eee1ab8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.1.0 + - image: bufbuild/buf:1.1.1 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.1.0 + - image: bufbuild/buf:1.1.1 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 43dbac172017cb249f709ac9469bf32108ed3af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Mon, 21 Mar 2022 21:28:45 +0100 Subject: [PATCH 1230/1518] protoc-gen-openapiv2: support overriding path parameter names (#2562) * Support overriding path parameter names. * Support overriding path parameter names. * Revert using annotations in `message.proto` * Moved path_param_name to inner message as it is not defined in OpenAPIv2 * Added documentation for path_param_name * Moved pathParamName to FieldConfiguration struct to follow same pattern as in JSONSchema. * Fix tests. * Remove fieldConfiguration from openapiSchemaObject --- .../mapping/customizing_openapi_output.md | 46 + .../internal/clients/abe/api/swagger.yaml | 55 +- .../abe/api_a_bit_of_everything_service.go | 40 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1559 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 244 +-- .../internal/genopenapi/template.go | 30 +- .../internal/genopenapi/template_test.go | 20 +- protoc-gen-openapiv2/options/openapiv2.pb.go | 426 +++-- protoc-gen-openapiv2/options/openapiv2.proto | 45 +- 10 files changed, 1319 insertions(+), 1148 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 259a9b55f03..730fe44ffbb 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -403,6 +403,52 @@ For a more in depth example see [visibility_rule_echo_service.proto](https://git - [`visibility_restriction_selectors=INTERNAL,visibility_restriction_selectors=PREVIEW`](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json) - [Not set](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/visibility_rule_none_echo_service.swagger.json) +### Path parameters + +When defining HTTP bindings with path parameters that contain multiple path segments, as suggested by the [Google AIPs](https://google.aip.dev/), the path parameter names are numbered to avoid generating duplicate paths in the OpenAPI file. + +For example, consider: +```protobuf +service LibraryService { + rpc GetShelf(GetShelfRequest) returns (Shelf) { + option (google.api.http) = { + get: "/v1/{name=shelves/*}" + }; + } + rpc GetBook(GetBookRequest) returns (Book) { + option (google.api.http) = { + get: "/v1/{name=shelves/*/books/*}" + }; + } +} + +message GetShelfRequest { + string name = 1; +} + +message GetBookRequest { + string name = 1; +} +``` + +This will generate the following paths: +- `/v1/{name}` +- `/v1/{name_1}` + +To override the path parameter names, annotate the field used as path parameter: +```protobuf +message GetShelfRequest { + string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: "shelfName"}}]; +} +message GetBookRequest { + string name = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {field_configuration: {path_param_name: "bookName"}}]; +} +``` + +This will instead generate the following paths: +- `/v1/{shelfName}` +- `/v1/{bookName}` + ### Output format By default the output format is JSON, but it is possible to configure it using the `output_format` option. Allowed values are: `json`, `yaml`. The output format will also change the extension of the output files. diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index c87ae519c14..9df1bdeb0f9 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1059,17 +1059,17 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/query/{uuid}: + /v1/example/a_bit_of_everything/query/{uuidName}: get: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_GetQuery" parameters: - - name: "uuid" + - name: "uuidName" in: "path" required: true type: "string" - x-exportParamName: "Uuid" + x-exportParamName: "UuidName" - name: "singleNested.name" in: "query" description: "name is nested field." @@ -1692,22 +1692,27 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/{uuid}: - get: + /v1/example/a_bit_of_everything/{uuidName}: + put: tags: - "ABitOfEverythingService" - operationId: "ABitOfEverythingService_Lookup" + operationId: "ABitOfEverythingService_Update" parameters: - - name: "uuid" + - name: "uuidName" in: "path" required: true type: "string" - x-exportParamName: "Uuid" + x-exportParamName: "UuidName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/A bit of everything" + x-exportParamName: "Body" responses: 200: description: "A successful response." - schema: - $ref: "#/definitions/examplepbABitOfEverything" + schema: {} 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -1729,26 +1734,22 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - put: + /v1/example/a_bit_of_everything/{uuid}: + get: tags: - "ABitOfEverythingService" - operationId: "ABitOfEverythingService_Update" + operationId: "ABitOfEverythingService_Lookup" parameters: - name: "uuid" in: "path" required: true type: "string" x-exportParamName: "Uuid" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/A bit of everything" - x-exportParamName: "Body" responses: 200: description: "A successful response." - schema: {} + schema: + $ref: "#/definitions/examplepbABitOfEverything" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2200,17 +2201,17 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v2/example/a_bit_of_everything/{abe.uuid}: + /v2/example/a_bit_of_everything/{uuidName}: put: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_UpdateV2" parameters: - - name: "abe.uuid" + - name: "uuidName" in: "path" required: true type: "string" - x-exportParamName: "AbeUuid" + x-exportParamName: "UuidName" - in: "body" name: "abe" description: "A bit of everything\n\nIntentionally complicated message type\ @@ -2256,11 +2257,11 @@ paths: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_UpdateV22" parameters: - - name: "abe.uuid" + - name: "uuidName" in: "path" required: true type: "string" - x-exportParamName: "AbeUuid" + x-exportParamName: "UuidName" - in: "body" name: "abe" description: "A bit of everything\n\nIntentionally complicated message type\ @@ -2650,17 +2651,17 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" - /v2a/example/a_bit_of_everything/{abe.uuid}: + /v2a/example/a_bit_of_everything/{uuidName}: patch: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_UpdateV23" parameters: - - name: "abe.uuid" + - name: "uuidName" in: "path" required: true type: "string" - x-exportParamName: "AbeUuid" + x-exportParamName: "UuidName" - in: "body" name: "body" required: true diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index be698fbdeae..2ce645d0e08 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -2718,7 +2718,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWit /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param uuid + * @param uuidName * @param floatValue Float value field * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: @@ -2797,7 +2797,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { OptionalStringValue optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2807,8 +2807,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/query/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/query/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -3897,12 +3897,12 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceTimeout(ctx c /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param uuid + * @param uuidName * @param body @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuid string, body ABitOfEverything) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuidName string, body ABitOfEverything) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -3912,8 +3912,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx co ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -4230,7 +4230,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateBook(ct /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param abeUuid + * @param uuidName * @param abe A bit of everything Intentionally complicated message type to cover many features of Protobuf. * @param optional nil or *ABitOfEverythingServiceUpdateV2Opts - Optional Parameters: * @param "UpdateMask" (optional.String) - The paths to update. @@ -4242,7 +4242,7 @@ type ABitOfEverythingServiceUpdateV2Opts struct { UpdateMask optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, abeUuid string, abe ABitOfEverything2, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, uuidName string, abe ABitOfEverything2, localVarOptionals *ABitOfEverythingServiceUpdateV2Opts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -4252,8 +4252,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -4399,7 +4399,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param abeUuid + * @param uuidName * @param abe A bit of everything Intentionally complicated message type to cover many features of Protobuf. * @param optional nil or *ABitOfEverythingServiceUpdateV22Opts - Optional Parameters: * @param "UpdateMask" (optional.String) - The paths to update. @@ -4411,7 +4411,7 @@ type ABitOfEverythingServiceUpdateV22Opts struct { UpdateMask optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, abeUuid string, abe ABitOfEverything3, localVarOptionals *ABitOfEverythingServiceUpdateV22Opts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, uuidName string, abe ABitOfEverything3, localVarOptionals *ABitOfEverythingServiceUpdateV22Opts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} @@ -4421,8 +4421,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + localVarPath := a.client.cfg.BasePath + "/v2/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -4568,12 +4568,12 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param abeUuid + * @param uuidName * @param body @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, abeUuid string, body UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, uuidName string, body UpdateV2RequestRequestForUpdateIncludesTheMessageAndTheUpdateMask) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} @@ -4583,8 +4583,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v2a/example/a_bit_of_everything/{abe.uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"abe.uuid"+"}", fmt.Sprintf("%v", abeUuid), -1) + localVarPath := a.client.cfg.BasePath + "/v2a/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index d8eda0dcc4b..dd7e3edcbdc 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1356,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xcd, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdb, 0x1f, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1364,844 +1364,845 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x68, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0x92, 0x41, 0x51, + 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x76, 0x0a, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x62, 0x92, 0x41, 0x5f, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, - 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, - 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x7d, 0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, + 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, - 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, + 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, + 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, + 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, + 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, + 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, + 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, + 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, - 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, - 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, - 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, + 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, + 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, + 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x2a, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x88, + 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, + 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, + 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, + 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, + 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, - 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, - 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, - 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x8f, 0x02, + 0x92, 0x41, 0x8b, 0x02, 0x0a, 0x85, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, + 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, + 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, + 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, + 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, + 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, + 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, + 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, + 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, + 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, + 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, - 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, - 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, - 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, - 0x8f, 0x02, 0x92, 0x41, 0x8b, 0x02, 0x0a, 0x85, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, - 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, - 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, - 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, - 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, - 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, - 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, - 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, + 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, + 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, + 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, - 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, - 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, - 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, - 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, - 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, - 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, + 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, + 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, - 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, - 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, + 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, + 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, + 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, + 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, + 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, + 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, - 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, + 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, - 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, - 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, - 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, - 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, + 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, - 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, - 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, + 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, + 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, + 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, + 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, + 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, + 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, + 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, + 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, + 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, + 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, + 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, + 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, + 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, - 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, - 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, - 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, - 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, - 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, - 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, - 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, - 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, - 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, - 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, + 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, + 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, + 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, - 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, + 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, + 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, - 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, - 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, + 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, + 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, + 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, + 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, + 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, + 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, + 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, + 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, + 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, + 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, + 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, + 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, + 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, + 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, + 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, + 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, + 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, + 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, + 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, + 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, + 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, - 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, - 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, - 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, - 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, + 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, + 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, + 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, + 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, + 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, + 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, + 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, + 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, + 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, + 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, + 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, + 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, + 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, + 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, + 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, + 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, + 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, + 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, + 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, - 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, - 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, - 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, - 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, - 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, - 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, - 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, - 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, - 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, - 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, - 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, - 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, - 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, - 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, - 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, - 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, - 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, - 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, - 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, - 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, - 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, - 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, - 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, + 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, + 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 03da64d8172..7c4afb80006 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -266,7 +266,7 @@ message ABitOfEverything { } Nested single_nested = 25; - string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", min_length: 1}]; + string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", min_length: 1, field_configuration: {path_param_name: "uuidName"}}]; repeated Nested nested = 2; float float_value = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "Float value field", default: "0.2", required: ['float_value']}]; double double_value = 4; diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 1f92c478d82..716c8d1f2a0 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1192,7 +1192,7 @@ ] } }, - "/v1/example/a_bit_of_everything/query/{uuid}": { + "/v1/example/a_bit_of_everything/query/{uuidName}": { "get": { "operationId": "ABitOfEverythingService_GetQuery", "responses": { @@ -1234,7 +1234,7 @@ }, "parameters": [ { - "name": "uuid", + "name": "uuidName", "in": "path", "required": true, "type": "string" @@ -1903,119 +1903,7 @@ ] } }, - "/v1/example/a_bit_of_everything/{uuid}": { - "get": { - "operationId": "ABitOfEverythingService_Lookup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" - } - }, - "403": { - "description": "Returned when the user does not have permission to access the resource.", - "schema": {} - }, - "404": { - "description": "Returned when the resource does not exist.", - "schema": { - "type": "string", - "format": "string" - } - }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, - "500": { - "description": "Server error", - "schema": { - "$ref": "#/definitions/examplepbErrorResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "uuid", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "ABitOfEverythingService" - ] - }, - "delete": { - "operationId": "ABitOfEverythingService_Delete", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - }, - "403": { - "description": "Returned when the user does not have permission to access the resource.", - "schema": {} - }, - "404": { - "description": "Returned when the resource does not exist.", - "schema": { - "type": "string", - "format": "string" - } - }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, - "500": { - "description": "Server error", - "schema": { - "$ref": "#/definitions/examplepbErrorResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "uuid", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "ABitOfEverythingService" - ], - "security": [ - { - "ApiKeyAuth": [], - "OAuth2": [ - "read", - "write" - ] - } - ], - "x-irreversible": true - }, + "/v1/example/a_bit_of_everything/{uuidName}": { "put": { "operationId": "ABitOfEverythingService_Update", "responses": { @@ -2057,7 +1945,7 @@ }, "parameters": [ { - "name": "uuid", + "name": "uuidName", "in": "path", "required": true, "type": "string" @@ -2272,6 +2160,120 @@ ] } }, + "/v1/example/a_bit_of_everything/{uuid}": { + "get": { + "operationId": "ABitOfEverythingService_Lookup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + }, + "delete": { + "operationId": "ABitOfEverythingService_Delete", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuid", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ], + "security": [ + { + "ApiKeyAuth": [], + "OAuth2": [ + "read", + "write" + ] + } + ], + "x-irreversible": true + } + }, "/v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}": { "get": { "operationId": "ABitOfEverythingService_GetRepeatedQuery", @@ -3001,7 +3003,7 @@ ] } }, - "/v2/example/a_bit_of_everything/{abe.uuid}": { + "/v2/example/a_bit_of_everything/{uuidName}": { "put": { "operationId": "ABitOfEverythingService_UpdateV2", "responses": { @@ -3043,7 +3045,7 @@ }, "parameters": [ { - "name": "abe.uuid", + "name": "uuidName", "in": "path", "required": true, "type": "string" @@ -3306,7 +3308,7 @@ }, "parameters": [ { - "name": "abe.uuid", + "name": "uuidName", "in": "path", "required": true, "type": "string" @@ -4029,7 +4031,7 @@ ] } }, - "/v2a/example/a_bit_of_everything/{abe.uuid}": { + "/v2a/example/a_bit_of_everything/{uuidName}": { "patch": { "operationId": "ABitOfEverythingService_UpdateV23", "responses": { @@ -4071,7 +4073,7 @@ }, "parameters": [ { - "name": "abe.uuid", + "name": "uuidName", "in": "path", "required": true, "type": "string" diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 773c3863e9d..df915d34a2b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -909,9 +909,13 @@ func templateToParts(path string, reg *descriptor.Registry, fields []*descriptor // For example this would replace the path segment of "{foo=bar/*}" with "{foo}" or "prefix{bang=bash/**}" with "prefix{bang}". // OpenAPI 2 only allows simple path parameters with the constraints on that parameter specified in the OpenAPI // schema's "pattern" instead of in the path parameter itself. -func partsToOpenAPIPath(parts []string) string { +func partsToOpenAPIPath(parts []string, overrides map[string]string) string { for index, part := range parts { - parts[index] = canRegexp.ReplaceAllString(part, "{$1}") + part = canRegexp.ReplaceAllString(part, "{$1}") + if override, ok := overrides[part]; ok { + part = override + } + parts[index] = part } return strings.Join(parts, "/") } @@ -1010,6 +1014,8 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re parts := templateToParts(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs) // extract any constraints specified in the path placeholders into ECMA regular expressions pathParamRegexpMap := partsToRegexpMap(parts) + // Keep track of path parameter overrides + var pathParamNames = make(map[string]string) for _, parameter := range b.PathParams { var paramType, paramFormat, desc, collectionFormat, defaultValue string @@ -1084,6 +1090,13 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re if regExp, ok := pathParamRegexpMap[parameterString]; ok { pattern = regExp } + if fc := getFieldConfiguration(reg, parameter.Target); fc != nil { + pathParamName := fc.GetPathParamName() + if pathParamName != "" && pathParamName != parameterString { + pathParamNames["{"+parameterString+"}"] = "{" + pathParamName + "}" + parameterString = pathParamName + } + } parameters = append(parameters, openapiParameterObject{ Name: parameterString, Description: desc, @@ -1183,7 +1196,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } parameters = append(parameters, queryParams...) - path := partsToOpenAPIPath(parts) + path := partsToOpenAPIPath(parts, pathParamNames) pathItemObject, ok := paths[path] if !ok { pathItemObject = openapiPathItemObject{} @@ -2517,10 +2530,10 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option if overrideType := j.GetType(); len(overrideType) > 0 { s.Type = strings.ToLower(overrideType[0].String()) } - if j != nil && j.GetExample() != "" { + if j.GetExample() != "" { s.Example = RawExample(j.GetExample()) } - if j != nil && j.GetFormat() != "" { + if j.GetFormat() != "" { s.Format = j.GetFormat() } } @@ -2752,3 +2765,10 @@ func subPathParams(paramName string, outerParams []descriptor.Parameter) []descr } return innerParams } + +func getFieldConfiguration(reg *descriptor.Registry, fd *descriptor.Field) *openapi_options.JSONSchema_FieldConfiguration { + if j, err := getFieldOpenAPIOption(reg, fd); err == nil { + return j.GetFieldConfiguration() + } + return nil +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index d82b425a94b..f4b0e8b06cf 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3202,7 +3202,7 @@ func TestTemplateWithJsonCamelCase(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -3230,7 +3230,7 @@ func TestTemplateWithoutJsonCamelCase(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -3262,14 +3262,14 @@ func TestTemplateToOpenAPIPath(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -3284,7 +3284,7 @@ func BenchmarkTemplateToOpenAPIPath(b *testing.B) { reg.SetUseJSONNamesForFields(false) for i := 0; i < b.N; i++ { - _ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + _ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) } }) @@ -3293,7 +3293,7 @@ func BenchmarkTemplateToOpenAPIPath(b *testing.B) { reg.SetUseJSONNamesForFields(true) for i := 0; i < b.N; i++ { - _ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + _ = templateToOpenAPIPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) } }) } @@ -3381,8 +3381,8 @@ func TestResolveFullyQualifiedNameToOpenAPIName(t *testing.T) { } } -func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) string { - return partsToOpenAPIPath(templateToParts(path, reg, fields, msgs)) +func templateToOpenAPIPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message, pathParamNames map[string]string) string { + return partsToOpenAPIPath(templateToParts(path, reg, fields, msgs), pathParamNames) } func templateToRegexpMap(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) map[string]string { @@ -3429,14 +3429,14 @@ func TestFQMNtoOpenAPIName(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) + actual := templateToOpenAPIPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName(), make(map[string]string)) if data.expected != actual { t.Errorf("Expected templateToOpenAPIPath(%v) = %v, actual: %v", data.input, data.expected, actual) } diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 48cb5ca9ae1..69b2bbf13f2 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1405,6 +1405,8 @@ type JSONSchema struct { Format string `protobuf:"bytes,36,opt,name=format,proto3" json:"format,omitempty"` // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 Enum []string `protobuf:"bytes,46,rep,name=enum,proto3" json:"enum,omitempty"` + // Additional field level properties used when generating the OpenAPI v2 file. + FieldConfiguration *JSONSchema_FieldConfiguration `protobuf:"bytes,1001,opt,name=field_configuration,json=fieldConfiguration,proto3" json:"field_configuration,omitempty"` } func (x *JSONSchema) Reset() { @@ -1607,6 +1609,13 @@ func (x *JSONSchema) GetEnum() []string { return nil } +func (x *JSONSchema) GetFieldConfiguration() *JSONSchema_FieldConfiguration { + if x != nil { + return x.FieldConfiguration + } + return nil +} + // `Tag` is a representation of OpenAPI v2 specification's Tag object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject @@ -1981,6 +1990,59 @@ func (x *Scopes) GetScope() map[string]string { return nil } +// 'FieldConfiguration' provides additional field level properties used when generating the OpenAPI v2 file. +// These properties are not defined by OpenAPIv2, but they are used to control the generation. +type JSONSchema_FieldConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Alternative parameter name when used as path parameter. If set, this will + // be used as the complete parameter name when this field is used as a path + // parameter. Use this to avoid having auto generated path parameter names + // for overlapping paths. + PathParamName string `protobuf:"bytes,47,opt,name=path_param_name,json=pathParamName,proto3" json:"path_param_name,omitempty"` +} + +func (x *JSONSchema_FieldConfiguration) Reset() { + *x = JSONSchema_FieldConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JSONSchema_FieldConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JSONSchema_FieldConfiguration) ProtoMessage() {} + +func (x *JSONSchema_FieldConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JSONSchema_FieldConfiguration.ProtoReflect.Descriptor instead. +func (*JSONSchema_FieldConfiguration) Descriptor() ([]byte, []int) { + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *JSONSchema_FieldConfiguration) GetPathParamName() string { + if x != nil { + return x.PathParamName + } + return "" +} + // If the security scheme is of type "oauth2", then the value is a list of // scope names required for the execution. For other security scheme types, // the array MUST be empty. @@ -1995,7 +2057,7 @@ type SecurityRequirement_SecurityRequirementValue struct { func (x *SecurityRequirement_SecurityRequirementValue) Reset() { *x = SecurityRequirement_SecurityRequirementValue{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2008,7 +2070,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) String() string { func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2277,7 +2339,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x22, 0xdf, 0x07, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, + 0x08, 0x04, 0x10, 0x05, 0x22, 0x99, 0x09, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, @@ -2326,143 +2388,155 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, - 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, - 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, - 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, - 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, - 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, - 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, - 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, - 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, - 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x94, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, - 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, - 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, + 0x7a, 0x0a, 0x13, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x0a, 0x12, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, + 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, + 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, + 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, + 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, + 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, + 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, + 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, + 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, + 0x22, 0x94, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, + 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, + 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, + 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, + 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, + 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, + 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, + 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, + 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, + 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, + 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, + 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, + 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, + 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, + 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, + 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, - 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, - 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, - 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, - 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, - 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, - 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, - 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, - 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, - 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, - 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, - 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, - 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, - 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, - 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, - 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, + 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, + 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, + 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2478,7 +2552,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { } var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes @@ -2508,12 +2582,13 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - nil, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*structpb.Value)(nil), // 33: google.protobuf.Value + (*JSONSchema_FieldConfiguration)(nil), // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration + nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 33: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*structpb.Value)(nil), // 34: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info @@ -2538,30 +2613,31 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 14, // 19: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema 12, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation 1, // 21: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - 12, // 22: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 29, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 31, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 32, // 30: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 31: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 33, // 32: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 33: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 33, // 34: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 35: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 33, // 36: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 33, // 37: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 38: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 33, // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 30, // 40: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 28, // 22: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration + 12, // 23: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 29, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 2, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 3, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 4, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 19, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 30, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 32, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 33, // 31: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 8, // 32: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 8, // 34: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 34, // 35: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 36: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 34, // 37: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 34, // 38: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 17, // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 34, // 40: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 31, // 41: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 42, // [42:42] is the sub-list for method output_type + 42, // [42:42] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } @@ -2750,7 +2826,19 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JSONSchema_FieldConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { case 0: return &v.state @@ -2769,7 +2857,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, NumEnums: 5, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 0, }, diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 1a4a1845e72..6f97c8846e6 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -44,32 +44,32 @@ enum Scheme { // message Swagger { // Specifies the OpenAPI Specification version being used. It can be - // used by the OpenAPI UI and other clients to interpret the API listing. The + // used by the OpenAPI UI and other clients to interpret the API listing. The // value MUST be "2.0". string swagger = 1; - // Provides metadata about the API. The metadata can be used by the + // Provides metadata about the API. The metadata can be used by the // clients if needed. Info info = 2; - // The host (name or ip) serving the API. This MUST be the host only and does + // The host (name or ip) serving the API. This MUST be the host only and does // not include the scheme nor sub-paths. It MAY include a port. If the host is // not included, the host serving the documentation is to be used (including // the port). The host does not support path templating. string host = 3; // The base path on which the API is served, which is relative to the host. If - // it is not included, the API is served directly under the host. The value + // it is not included, the API is served directly under the host. The value // MUST start with a leading slash (/). The basePath does not support path // templating. - // Note that using `base_path` does not change the endpoint paths that are + // Note that using `base_path` does not change the endpoint paths that are // generated in the resulting OpenAPI file. If you wish to use `base_path` - // with relatively generated OpenAPI paths, the `base_path` prefix must be - // manually removed from your `google.api.http` paths and your code changed to + // with relatively generated OpenAPI paths, the `base_path` prefix must be + // manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. string base_path = 4; // The transfer protocol of the API. Values MUST be from the list: "http", // "https", "ws", "wss". If the schemes is not included, the default scheme to // be used is the one used to access the OpenAPI definition itself. repeated Scheme schemes = 5; - // A list of MIME types the APIs can consume. This is global to all APIs but + // A list of MIME types the APIs can consume. This is global to all APIs but // can be overridden on specific API calls. Value MUST be as described under // Mime Types. repeated string consumes = 6; @@ -88,8 +88,8 @@ message Swagger { // Security scheme definitions that can be used across the specification. SecurityDefinitions security_definitions = 11; // A declaration of which security schemes are applied for the API as a whole. - // The list of values describes alternative security schemes that can be used - // (that is, there is a logical OR between the security requirements). + // The list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). // Individual operations can override this definition. repeated SecurityRequirement security = 12; // field 13 is reserved for 'tags', which are supposed to be exposed as and @@ -440,12 +440,12 @@ message JSONSchema { // This property is the same for 2.0 and 3.0.0 https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/3.0.0.md#schemaObject https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject string example = 9; double multiple_of = 10; - // Maximum represents an inclusive upper limit for a numeric instance. The - // value of MUST be a number, + // Maximum represents an inclusive upper limit for a numeric instance. The + // value of MUST be a number, double maximum = 11; bool exclusive_maximum = 12; - // minimum represents an inclusive lower limit for a numeric instance. The - // value of MUST be a number, + // minimum represents an inclusive lower limit for a numeric instance. The + // value of MUST be a number, double minimum = 13; bool exclusive_minimum = 14; uint64 max_length = 15; @@ -493,7 +493,7 @@ message JSONSchema { repeated JSONSchemaSimpleTypes type = 35; // `Format` string format = 36; - // following fields are reserved, as the properties have been omitted from + // following fields are reserved, as the properties have been omitted from // OpenAPI v2: contentMediaType, contentEncoding, if, then, else reserved 37 to 41; // field 42 is reserved for 'allOf', but in OpenAPI-specific way. @@ -505,6 +505,19 @@ message JSONSchema { reserved 43 to 45; // Items in `enum` must be unique https://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.5.1 repeated string enum = 46; + + // Additional field level properties used when generating the OpenAPI v2 file. + FieldConfiguration field_configuration = 1001; + + // 'FieldConfiguration' provides additional field level properties used when generating the OpenAPI v2 file. + // These properties are not defined by OpenAPIv2, but they are used to control the generation. + message FieldConfiguration { + // Alternative parameter name when used as path parameter. If set, this will + // be used as the complete parameter name when this field is used as a path + // parameter. Use this to avoid having auto generated path parameter names + // for overlapping paths. + string path_param_name = 47; + } } // `Tag` is a representation of OpenAPI v2 specification's Tag object. @@ -521,7 +534,7 @@ message Tag { // global Tag object, then use that name to reference the tag throughout the // OpenAPI file. reserved 1; - // A short description for the tag. GFM syntax can be used for rich text + // A short description for the tag. GFM syntax can be used for rich text // representation. string description = 2; // Additional external documentation for this tag. From 20bc08a2b3015c96c3dfaac93df86b230325961d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 21 Mar 2022 16:43:16 -0400 Subject: [PATCH 1231/1518] Update gorelease base --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e7d6eee1ab8..437ac787433 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.9.0 + - run: gorelease -base=v2.10.0 push_bsr_plugins: docker: - image: circleci/golang From 65d4342af5721f4267000cfcd5a02fb2f2b36203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Mon, 21 Mar 2022 22:43:00 +0100 Subject: [PATCH 1232/1518] protoc-gen-openapiv2: Use the canonical camelCase converter for protobuf (#2599) * Use the canonical camelCase converter for protobuf. Fixes issue #2363. * Revert change that should go in separate PR --- internal/casing/LICENSE.md | 2 +- internal/casing/README.md | 8 +++++--- internal/casing/camel.go | 18 ++++++++++++++++++ .../internal/genopenapi/template.go | 14 +++----------- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/internal/casing/LICENSE.md b/internal/casing/LICENSE.md index 0f646931a46..ca708b0f8ab 100644 --- a/internal/casing/LICENSE.md +++ b/internal/casing/LICENSE.md @@ -1,4 +1,4 @@ -Copyright 2010 The Go Authors. All rights reserved. +Copyright 2010, 2019 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/internal/casing/README.md b/internal/casing/README.md index 88114463aa8..928e0c70d66 100644 --- a/internal/casing/README.md +++ b/internal/casing/README.md @@ -1,5 +1,7 @@ # Case conversion -This package contains a single function, copied from the -`github.com/golang/protobuf/protoc-gen-go/generator` package. That -modules LICENSE is referenced in its entirety in this package. +This package contains two functions: +- `Camel` copied from the `github.com/golang/protobuf/protoc-gen-go/generator` package. +- `JSONCamelCase` copied from the `github.com/protocolbuffers/protobuf-go/internal/strs` package. + +Both these modules are licensed by The Go Authors, as reflected in this package's [LICENSE.md]. diff --git a/internal/casing/camel.go b/internal/casing/camel.go index 8cfef4bf2a6..85e708ea1f4 100644 --- a/internal/casing/camel.go +++ b/internal/casing/camel.go @@ -50,6 +50,24 @@ func Camel(s string) string { return string(t) } +// JSONCamelCase converts a snake_case identifier to a camelCase identifier, +// according to the protobuf JSON specification. +func JSONCamelCase(s string) string { + var b []byte + var wasUnderscore bool + for i := 0; i < len(s); i++ { // proto identifiers are always ASCII + c := s[i] + if c != '_' { + if wasUnderscore && isASCIILower(c) { + c -= 'a' - 'A' // convert to uppercase + } + b = append(b, c) + } + wasUnderscore = c == '_' + } + return string(b) +} + // And now lots of helper functions. // Is c an ASCII lower-case letter? diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index df915d34a2b..6af43c04e81 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -2523,7 +2523,7 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option if reg.GetUseJSONNamesForFields() { for i, r := range s.Required { // TODO(oyvindwe): Look up field and use field.GetJsonName()? - s.Required[i] = doCamelCase(r) + s.Required[i] = casing.JSONCamelCase(r) } } s.Enum = j.GetEnum() @@ -2707,7 +2707,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri fieldNames := strings.Split(fieldName, ".") fieldNamesWithCamelCase := make([]string, 0) for i := 0; i < len(fieldNames)-1; i++ { - fieldNamesWithCamelCase = append(fieldNamesWithCamelCase, doCamelCase(string(fieldNames[i]))) + fieldNamesWithCamelCase = append(fieldNamesWithCamelCase, casing.JSONCamelCase(string(fieldNames[i]))) } prefix := strings.Join(fieldNamesWithCamelCase, ".") reservedJSONName := getReservedJSONName(fieldName, messageNameToFieldsToJSONName, fieldNameToType) @@ -2715,15 +2715,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri return prefix + "." + reservedJSONName } } - return doCamelCase(fieldName) -} - -func doCamelCase(input string) string { - parameterString := casing.Camel(input) - builder := &strings.Builder{} - builder.WriteString(strings.ToLower(string(parameterString[0]))) - builder.WriteString(parameterString[1:]) - return builder.String() + return casing.JSONCamelCase(fieldName) } func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[string]map[string]string, fieldNameToType map[string]string) string { From 91cc44a53bdd0cb84cdb85180db04088242394a4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Mar 2022 00:05:39 +0000 Subject: [PATCH 1233/1518] chore(deps): update dependency io_bazel_rules_go to v0.31.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index d53f2498094..ad3d1a85fd3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "d6b2513456fe2229811da7eb67a444be7785f5323c6708b38d851d2b51e54d83", + sha256 = "f2dcd210c7095febe54b804bb1cd3a58fe8435a909db2ec04e31542631cf715c", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.31.0/rules_go-v0.31.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.31.0/rules_go-v0.31.0.zip", ], ) From d59c18452de4815e0ee19969eaadf94eab1ee48d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Mar 2022 03:49:22 +0000 Subject: [PATCH 1234/1518] fix(deps): update google.golang.org/genproto digest to 435b647 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2d0005b9a8d..9d7a62602ba 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e + google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.27.1 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index d28999458ff..f27d435d3ee 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e h1:fNKDNuUyC4WH+inqDMpfXDdfvwfYILbsX+oskGZ8hxg= -google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 h1:3n0D2NdPGm0g0wrVJzXJWW5CBOoqgGBkDX9cRMJHZAY= +google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5ccc01e0a05..bb59d4db79e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fNKDNuUyC4WH+inqDMpfXDdfvwfYILbsX+oskGZ8hxg=", - version = "v0.0.0-20220317150908-0efb43f6373e", + sum = "h1:3n0D2NdPGm0g0wrVJzXJWW5CBOoqgGBkDX9cRMJHZAY=", + version = "v0.0.0-20220322021311-435b647f9ef2", ) go_repository( name = "org_golang_google_grpc", From 4d64e72196e69e6d96f81656e92040c46f0feee8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Mar 2022 10:53:45 +0000 Subject: [PATCH 1235/1518] fix(deps): update module google.golang.org/protobuf to v1.28.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 9d7a62602ba..e7781d5485f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 google.golang.org/grpc v1.45.0 - google.golang.org/protobuf v1.27.1 + google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index f27d435d3ee..601b554fbbf 100644 --- a/go.sum +++ b/go.sum @@ -397,8 +397,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index bb59d4db79e..2cd04e9c04b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1094,8 +1094,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=", - version = "v1.27.1", + sum = "h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=", + version = "v1.28.0", ) go_repository( name = "org_golang_x_crypto", From 3a31dcb8f3a31b647054a07c1a06d559f9c608c9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 23 Mar 2022 14:15:46 -0400 Subject: [PATCH 1236/1518] Revert gazelle dependency to original repository (#2605) --- WORKSPACE | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ad3d1a85fd3..c3a89964ea9 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -49,13 +49,11 @@ http_archive( ], ) -# TODO: Revert https://github.com/grpc-ecosystem/grpc-gateway/pull/2578/commits/fb9b59be7f2408767657c83c5002bf700ac7c460 once -# https://github.com/bazelbuild/bazel-gazelle/pull/1194 is merged git_repository( name = "bazel_gazelle", - commit = "4a1aeae7cab962fd8088f42038d3a477cdca91a5", - remote = "https://github.com/johanbrandhorst/bazel-gazelle", - shallow_since = "1647116890 +0000", + commit = "f377e6eff8e24508feb1a34b1e5e681982482a9f", + remote = "https://github.com/bazelbuild/bazel-gazelle", + shallow_since = "1648046534 -0400", ) load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") From 667dd5a61148cf07fe97ef7222aef762a215c1c0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 23 Mar 2022 18:17:10 +0000 Subject: [PATCH 1237/1518] fix(deps): update google.golang.org/genproto digest to ec3c684 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e7781d5485f..c5e0d8b11c0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 + google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 601b554fbbf..0a372f08dec 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2 h1:3n0D2NdPGm0g0wrVJzXJWW5CBOoqgGBkDX9cRMJHZAY= -google.golang.org/genproto v0.0.0-20220322021311-435b647f9ef2/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14 h1:17TOyVD+9MLIDtDJW9PdtMuVT7gNLEkN+G/xFYjZmr8= +google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 2cd04e9c04b..ac96d026c77 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:3n0D2NdPGm0g0wrVJzXJWW5CBOoqgGBkDX9cRMJHZAY=", - version = "v0.0.0-20220322021311-435b647f9ef2", + sum = "h1:17TOyVD+9MLIDtDJW9PdtMuVT7gNLEkN+G/xFYjZmr8=", + version = "v0.0.0-20220323144105-ec3c684e5b14", ) go_repository( name = "org_golang_google_grpc", From 9632ae82b940b3695f04045e719940f7f6b20d6f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 24 Mar 2022 15:19:50 +0000 Subject: [PATCH 1238/1518] fix(deps): update google.golang.org/genproto digest to acbaeb5 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c5e0d8b11c0..51894d1f149 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14 + google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 0a372f08dec..5c572cdd414 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14 h1:17TOyVD+9MLIDtDJW9PdtMuVT7gNLEkN+G/xFYjZmr8= -google.golang.org/genproto v0.0.0-20220323144105-ec3c684e5b14/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb h1:0m9wktIpOxGw+SSKmydXWB3Z3GTfcPP6+q75HCQa6HI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ac96d026c77..d2529377df8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:17TOyVD+9MLIDtDJW9PdtMuVT7gNLEkN+G/xFYjZmr8=", - version = "v0.0.0-20220323144105-ec3c684e5b14", + sum = "h1:0m9wktIpOxGw+SSKmydXWB3Z3GTfcPP6+q75HCQa6HI=", + version = "v0.0.0-20220324131243-acbaeb5b85eb", ) go_repository( name = "org_golang_google_grpc", From 3666435d8c5d114f60c5a5cee88a6477c58e17cc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 24 Mar 2022 22:29:04 +0000 Subject: [PATCH 1239/1518] chore(deps): update dependency bufbuild/buf to v1.2.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 437ac787433..871fc66d275 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.1.1 + - image: bufbuild/buf:1.2.0 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.1.1 + - image: bufbuild/buf:1.2.0 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 895ee1664ca62b2fd9ae3323bcbede801b6452a7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Mar 2022 02:53:49 +0000 Subject: [PATCH 1240/1518] chore(deps): update dependency bufbuild/buf to v1.2.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 871fc66d275..41b8b563d99 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.2.0 + - image: bufbuild/buf:1.2.1 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.2.0 + - image: bufbuild/buf:1.2.1 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 45ebb6703c780688285ff16ca3c6b9ac10ae6056 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Mar 2022 19:19:07 +0000 Subject: [PATCH 1241/1518] chore(deps): update dependency bufbuild/buf to v1.3.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 41b8b563d99..0a563ecaabb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.2.1 + - image: bufbuild/buf:1.3.0 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.2.1 + - image: bufbuild/buf:1.3.0 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 1d4512b2f942170e51f6c87c15a3246b2bcb01da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 20:36:06 -0400 Subject: [PATCH 1242/1518] chore(deps): update dependency com_google_protobuf to v3.20.0 (#2614) Co-authored-by: Renovate Bot --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index c3a89964ea9..c57364d9dbc 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "3bd7828aa5af4b13b99c191e8b1e884ebfa9ad371b0ce264605d347f135d2568", - strip_prefix = "protobuf-3.19.4", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.19.4.tar.gz"], + sha256 = "b07772d38ab07e55eca4d50f4b53da2d998bb221575c60a4f81100242d4b4889", + strip_prefix = "protobuf-3.20.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.20.0.tar.gz"], ) http_archive( From 801b88eb8044d792914d28053bc2ef07a93a37ff Mon Sep 17 00:00:00 2001 From: Hubert Zhang Date: Sat, 26 Mar 2022 08:47:52 +0800 Subject: [PATCH 1243/1518] Use Bytes from convert.go to unmarshal byte value (#2603) --- runtime/query.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/runtime/query.go b/runtime/query.go index fb0c84ef0cd..59003e529a3 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -1,7 +1,6 @@ package runtime import ( - "encoding/base64" "errors" "fmt" "net/url" @@ -234,7 +233,7 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro case protoreflect.StringKind: return protoreflect.ValueOfString(value), nil case protoreflect.BytesKind: - v, err := base64.URLEncoding.DecodeString(value) + v, err := Bytes(value) if err != nil { return protoreflect.Value{}, err } @@ -312,7 +311,7 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p case "google.protobuf.StringValue": msg = &wrapperspb.StringValue{Value: value} case "google.protobuf.BytesValue": - v, err := base64.URLEncoding.DecodeString(value) + v, err := Bytes(value) if err != nil { return protoreflect.Value{}, err } From c3653fd1e24106a815cd91944f4cc4a3d55ef358 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 28 Mar 2022 19:03:52 +0000 Subject: [PATCH 1244/1518] fix(deps): update google.golang.org/genproto digest to c47567c --- go.mod | 2 +- go.sum | 5 ++--- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 51894d1f149..449ee3339e1 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb + google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 5c572cdd414..c2d0bfeee68 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb h1:0m9wktIpOxGw+SSKmydXWB3Z3GTfcPP6+q75HCQa6HI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1 h1:t2YeOD7KxzUL6g5yg4+aCD/Fc0gk+O31HMo09I/QVIM= +google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -397,7 +397,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index d2529377df8..951814b0b04 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:0m9wktIpOxGw+SSKmydXWB3Z3GTfcPP6+q75HCQa6HI=", - version = "v0.0.0-20220324131243-acbaeb5b85eb", + sum = "h1:t2YeOD7KxzUL6g5yg4+aCD/Fc0gk+O31HMo09I/QVIM=", + version = "v0.0.0-20220328180837-c47567c462d1", ) go_repository( name = "org_golang_google_grpc", From 7a73d70c436c964cf9706bd5a81264c5c02a666b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 29 Mar 2022 18:31:10 +0000 Subject: [PATCH 1245/1518] fix(deps): update google.golang.org/genproto digest to 7be39ac --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 449ee3339e1..9cf5d6e47a7 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1 + google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index c2d0bfeee68..9582ce68657 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1 h1:t2YeOD7KxzUL6g5yg4+aCD/Fc0gk+O31HMo09I/QVIM= -google.golang.org/genproto v0.0.0-20220328180837-c47567c462d1/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 951814b0b04..6a24f439711 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:t2YeOD7KxzUL6g5yg4+aCD/Fc0gk+O31HMo09I/QVIM=", - version = "v0.0.0-20220328180837-c47567c462d1", + sum = "h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw=", + version = "v0.0.0-20220329172620-7be39ac1afc7", ) go_repository( name = "org_golang_google_grpc", From 3e072cefe2fbde8dd981b212b4ed9a367d88d1ac Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 31 Mar 2022 01:38:36 +0000 Subject: [PATCH 1246/1518] chore(deps): update dependency bufbuild/buf to v1.3.1 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0a563ecaabb..318b4cca4e2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.3.0 + - image: bufbuild/buf:1.3.1 steps: - checkout - run: buf build @@ -147,7 +147,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.3.0 + - image: bufbuild/buf:1.3.1 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 384f5e8e08e2a149c13ac9eb1408cb8e160fc02f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 1 Apr 2022 18:05:57 +0000 Subject: [PATCH 1247/1518] fix(deps): update google.golang.org/genproto digest to 314d38e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9cf5d6e47a7..f346ed4f090 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 + google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 9582ce68657..3634235abc2 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7 h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de h1:9Ti5SG2U4cAcluryUo/sFay3TQKoxiFMfaT0pbizU7k= +google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6a24f439711..0881cc04974 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:HOL66YCI20JvN2hVk6o2YIp9i/3RvzVUz82PqNr7fXw=", - version = "v0.0.0-20220329172620-7be39ac1afc7", + sum = "h1:9Ti5SG2U4cAcluryUo/sFay3TQKoxiFMfaT0pbizU7k=", + version = "v0.0.0-20220401170504-314d38edb7de", ) go_repository( name = "org_golang_google_grpc", From db5269c3cc7054724a4f339880efcf184a37c915 Mon Sep 17 00:00:00 2001 From: Rinat Takhautdinov Date: Mon, 4 Apr 2022 01:04:51 +0700 Subject: [PATCH 1248/1518] Correct generated field mask for google.protobuf.Struct field (#2619) * correct generate field mask for google.protobuf.struct field * added test case for found issue with struct field --- runtime/fieldmask.go | 2 +- runtime/fieldmask_test.go | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 0138ed2f769..82ab3d277b2 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -53,7 +53,7 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field } if isDynamicProtoMessage(fd.Message()) { - for _, p := range buildPathsBlindly(k, v) { + for _, p := range buildPathsBlindly(string(fd.FullName().Name()), v) { newPath := p if item.path != "" { newPath = item.path + "." + newPath diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index e458211a48e..fe3f0957968 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -60,6 +60,12 @@ func TestFieldMaskFromRequestBody(t *testing.T) { input: `{"struct_field": {"name":{"first": "bob"}, "amount": 2}}`, expected: newFieldMask("struct_field.name.first", "struct_field.amount"), }, + { + name: "NonStandardMessageWithJSONNamesForStruct", + msg: &examplepb.NonStandardMessage{}, + input: `{"lineNum": 123, "structField": {"name":"bob"}}`, + expected: newFieldMask("line_num", "struct_field.name"), + }, { name: "value", msg: &examplepb.NonStandardMessage{}, From 1e2dc704905496dd2b0679e786ae4cec13227324 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 8 Apr 2022 10:14:44 -0400 Subject: [PATCH 1249/1518] Update golangci-lint to 1.45 for Go 1.18 support (#2631) * Update golangci-lint to 1.45 for Go 1.18 support * Fix linter errors --- .github/workflows/golangci-lint.yml | 2 +- go.mod | 2 +- internal/descriptor/BUILD.bazel | 2 ++ internal/descriptor/registry.go | 4 ++- .../internal/genopenapi/BUILD.bazel | 2 ++ .../internal/genopenapi/helpers.go | 12 ++++++-- .../internal/genopenapi/template_test.go | 30 +++++++++---------- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 908efb58188..581d13225c4 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -15,5 +15,5 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v2 with: - version: v1.32 + version: v1.45 args: --enable goimports diff --git a/go.mod b/go.mod index f346ed4f090..1eb854fae17 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a + golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 @@ -19,7 +20,6 @@ require ( require ( golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect - golang.org/x/text v0.3.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect ) diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index 76304bec147..bd79674baa2 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -27,6 +27,8 @@ go_library( "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//types/descriptorpb", "@org_golang_google_protobuf//types/pluginpb", + "@org_golang_x_text//cases", + "@org_golang_x_text//language", ], ) diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 63dbdb14536..1cc9afa41f0 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -8,6 +8,8 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" + "golang.org/x/text/cases" + "golang.org/x/text/language" "google.golang.org/genproto/googleapis/api/annotations" "google.golang.org/protobuf/compiler/protogen" "google.golang.org/protobuf/types/descriptorpb" @@ -210,7 +212,7 @@ func (r *Registry) loadFile(filePath string, file *protogen.File) { Name: string(file.GoPackageName), } if r.standalone { - pkg.Alias = "ext" + strings.Title(pkg.Name) + pkg.Alias = "ext" + cases.Title(language.AmericanEnglish).String(pkg.Name) } if err := r.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil { diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 993b63db487..f52b0045539 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -32,6 +32,8 @@ go_library( "@org_golang_google_protobuf//types/descriptorpb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/pluginpb", + "@org_golang_x_text//cases", + "@org_golang_x_text//language", ], ) diff --git a/protoc-gen-openapiv2/internal/genopenapi/helpers.go b/protoc-gen-openapiv2/internal/genopenapi/helpers.go index c53d6802557..88bf4994d84 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/helpers.go +++ b/protoc-gen-openapiv2/internal/genopenapi/helpers.go @@ -1,9 +1,15 @@ -//+build go1.12 +//go:build go1.12 +// +build go1.12 package genopenapi -import "strings" +import ( + "strings" + + "golang.org/x/text/cases" + "golang.org/x/text/language" +) func fieldName(k string) string { - return strings.ReplaceAll(strings.Title(k), "-", "_") + return strings.ReplaceAll(cases.Title(language.AmericanEnglish).String(k), "-", "_") } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index f4b0e8b06cf..87cda19bdee 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -4174,7 +4174,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { tests := []struct { descr string msgDescs []*descriptorpb.DescriptorProto - schema map[string]openapi_options.Schema // per-message schema to add + schema map[string]*openapi_options.Schema // per-message schema to add defs openapiDefinitionsObject openAPIOptions *openapiconfig.OpenAPIOptions pathParams []descriptor.Parameter @@ -4184,7 +4184,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{}, + schema: map[string]*openapi_options.Schema{}, defs: map[string]openapiSchemaObject{ "Message": {schemaCore: schemaCore{Type: "object"}}, }, @@ -4194,7 +4194,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { Example: `{"foo":"bar"}`, }, @@ -4211,7 +4211,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { Example: `XXXX anything goes XXXX`, }, @@ -4228,7 +4228,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { ExternalDocs: &openapi_options.ExternalDocumentation{ Description: "glorious docs", @@ -4253,7 +4253,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "title", @@ -4374,7 +4374,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "title", @@ -4433,7 +4433,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "title", @@ -4491,7 +4491,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "title", @@ -4554,7 +4554,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "title", @@ -4639,7 +4639,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgMap[msg.FQMN()] = msg if schema, ok := test.schema[name]; ok { - proto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, &schema) + proto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, schema) } } @@ -4833,7 +4833,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { tests := []struct { descr string msgDescs []*descriptorpb.DescriptorProto - schema map[string]openapi_options.Schema // per-message schema to add + schema map[string]*openapi_options.Schema // per-message schema to add defs openapiDefinitionsObject openAPIOptions *openapiconfig.OpenAPIOptions useGoTemplate bool @@ -4843,7 +4843,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "{{.Name}}", @@ -4873,7 +4873,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { msgDescs: []*descriptorpb.DescriptorProto{ {Name: proto.String("Message")}, }, - schema: map[string]openapi_options.Schema{ + schema: map[string]*openapi_options.Schema{ "Message": { JsonSchema: &openapi_options.JSONSchema{ Title: "{{.Name}}", @@ -4978,7 +4978,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { msgMap[msg.FQMN()] = msg if schema, ok := test.schema[name]; ok { - proto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, &schema) + proto.SetExtension(d.Options, openapi_options.E_Openapiv2Schema, schema) } } From 5b100a9951e8a80a19d8d0896feb2780aef00d1f Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 8 Apr 2022 07:15:20 -0700 Subject: [PATCH 1250/1518] Turn on dependabot updates for documentation (#2604) There are a few old deps in the documentation generator. These are spurious, since we generate static HTML for the docs and upload that, but there is no harm in updating them to make the warnings go away. --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..96943351d4d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "bundler" # See documentation for possible values + directory: "/docs" # Location of package manifests + schedule: + interval: "daily" From aad7cb89cfe1b6a6d970b38114739a51ed64b4f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Apr 2022 10:51:24 -0400 Subject: [PATCH 1251/1518] fix(deps): update google.golang.org/genproto digest to 9054f6e (#2630) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1eb854fae17..af81a469b3f 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de + google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 3634235abc2..e77d6be2fb0 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de h1:9Ti5SG2U4cAcluryUo/sFay3TQKoxiFMfaT0pbizU7k= -google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0881cc04974..4a597e2319a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:9Ti5SG2U4cAcluryUo/sFay3TQKoxiFMfaT0pbizU7k=", - version = "v0.0.0-20220401170504-314d38edb7de", + sum = "h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg=", + version = "v0.0.0-20220407144326-9054f6ed7bac", ) go_repository( name = "org_golang_google_grpc", From 4e04fda6ff89a8c62016d3b250402f5103ad1207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Apr 2022 11:06:43 -0600 Subject: [PATCH 1252/1518] build(deps-dev): bump github-pages from 209 to 225 in /docs (#2633) Bumps [github-pages](https://github.com/github/pages-gem) from 209 to 225. - [Release notes](https://github.com/github/pages-gem/releases) - [Commits](https://github.com/github/pages-gem/compare/v209...v225) --- updated-dependencies: - dependency-name: github-pages dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 192 +++++++++++++++++++++++++--------------------- 1 file changed, 105 insertions(+), 87 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 05bb556fa8d..114f08bcb43 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (6.0.3.4) + activesupport (6.0.4.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -14,78 +14,98 @@ GEM execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) - concurrent-ruby (1.1.7) - dnsruby (1.61.5) + commonmarker (0.23.4) + concurrent-ruby (1.1.10) + dnsruby (1.61.9) simpleidn (~> 0.1) - em-websocket (0.5.2) + em-websocket (0.5.3) eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - ethon (0.12.0) - ffi (>= 1.3.0) + http_parser.rb (~> 0) + ethon (0.15.0) + ffi (>= 1.15.0) eventmachine (1.2.7) - execjs (2.7.0) - faraday (1.1.0) + execjs (2.8.1) + faraday (1.10.0) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.3) multipart-post (>= 1.2, < 3) - ruby2_keywords - ffi (1.13.1) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + ffi (1.15.5) forwardable-extended (2.6.0) gemoji (3.0.1) - github-pages (209) - github-pages-health-check (= 1.16.1) + github-pages (225) + github-pages-health-check (= 1.17.9) jekyll (= 3.9.0) jekyll-avatar (= 0.7.0) jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.1.6) + jekyll-commonmark-ghpages (= 0.2.0) jekyll-default-layout (= 0.1.4) jekyll-feed (= 0.15.1) jekyll-gist (= 1.5.0) jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) jekyll-mentions (= 1.6.0) jekyll-optional-front-matter (= 0.3.2) jekyll-paginate (= 1.1.0) jekyll-readme-index (= 0.3.0) jekyll-redirect-from (= 0.16.0) jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.2) + jekyll-remote-theme (= 0.4.3) jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.6.1) + jekyll-seo-tag (= 2.8.0) jekyll-sitemap (= 1.4.0) jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.1.1) - jekyll-theme-cayman (= 0.1.1) - jekyll-theme-dinky (= 0.1.1) - jekyll-theme-hacker (= 0.1.2) - jekyll-theme-leap-day (= 0.1.1) - jekyll-theme-merlot (= 0.1.1) - jekyll-theme-midnight (= 0.1.1) - jekyll-theme-minimal (= 0.1.1) - jekyll-theme-modernist (= 0.1.1) - jekyll-theme-primer (= 0.5.4) - jekyll-theme-slate (= 0.1.1) - jekyll-theme-tactile (= 0.1.1) - jekyll-theme-time-machine (= 0.1.1) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) jekyll-titles-from-headings (= 0.5.3) jemoji (= 0.12.0) - kramdown (= 2.3.0) + kramdown (= 2.3.1) kramdown-parser-gfm (= 1.1.0) liquid (= 4.0.3) mercenary (~> 0.3) minima (= 2.5.1) - nokogiri (>= 1.11.0, < 2.0) - rouge (= 3.23.0) + nokogiri (>= 1.12.5, < 2.0) + rouge (= 3.26.0) terminal-table (~> 1.4) - github-pages-health-check (1.16.1) + github-pages-health-check (1.17.9) addressable (~> 2.3) dnsruby (~> 1.60) octokit (~> 4.0) - public_suffix (~> 3.0) + public_suffix (>= 3.0, < 5.0) typhoeus (~> 1.3) - html-pipeline (2.14.0) + html-pipeline (2.14.1) activesupport (>= 2) nokogiri (>= 1.4) - http_parser.rb (0.6.0) + http_parser.rb (0.8.0) i18n (0.9.5) concurrent-ruby (~> 1.0) jekyll (3.9.0) @@ -106,12 +126,12 @@ GEM jekyll-coffeescript (1.1.1) coffee-script (~> 2.2) coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) - jekyll-commonmark-ghpages (0.1.6) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1.2) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.2.0) + commonmarker (~> 0.23.4) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) rouge (>= 2.0, < 4.0) jekyll-default-layout (0.1.4) jekyll (~> 3.0) @@ -136,57 +156,57 @@ GEM jekyll (>= 3.3, < 5.0) jekyll-relative-links (0.6.1) jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.2) + jekyll-remote-theme (0.4.3) addressable (~> 2.0) jekyll (>= 3.5, < 5.0) jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) rubyzip (>= 1.3.0, < 3.0) jekyll-sass-converter (1.5.2) sass (~> 3.4) - jekyll-seo-tag (2.6.1) - jekyll (>= 3.3, < 5.0) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) jekyll-swiss (1.0.0) - jekyll-theme-architect (0.1.1) - jekyll (~> 3.5) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.1.1) - jekyll (~> 3.5) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.1.1) - jekyll (~> 3.5) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.1.2) + jekyll-theme-hacker (0.2.0) jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.1.1) - jekyll (~> 3.5) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.1.1) - jekyll (~> 3.5) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.1.1) - jekyll (~> 3.5) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.1.1) - jekyll (~> 3.5) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.1.1) - jekyll (~> 3.5) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.5.4) + jekyll-theme-primer (0.6.0) jekyll (> 3.5, < 5.0) jekyll-github-metadata (~> 2.9) jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.1.1) - jekyll (~> 3.5) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.1.1) - jekyll (~> 3.5) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.1.1) - jekyll (~> 3.5) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) jekyll-titles-from-headings (0.5.3) jekyll (>= 3.3, < 5.0) @@ -200,12 +220,12 @@ GEM jekyll (>= 3.8.5) jekyll-seo-tag (~> 2.0) rake (>= 12.3.1, < 13.1.0) - kramdown (2.3.0) + kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.3) - listen (3.2.1) + listen (3.7.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) @@ -214,28 +234,26 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.14.2) + minitest (5.15.0) multipart-post (2.1.1) nokogiri (1.13.3) mini_portile2 (~> 2.8.0) racc (~> 1.4) - octokit (4.19.0) + octokit (4.22.0) faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (3.1.1) + public_suffix (4.0.6) racc (1.6.0) rake (13.0.1) - rb-fsevent (0.10.4) + rb-fsevent (0.11.1) rb-inotify (0.10.1) ffi (~> 1.0) rexml (3.2.5) - rouge (3.23.0) - ruby-enum (0.8.0) - i18n - ruby2_keywords (0.0.2) - rubyzip (2.3.0) + rouge (3.26.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -245,20 +263,20 @@ GEM sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) - simpleidn (0.1.1) + simpleidn (0.2.1) unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (1.2.7) + tzinfo (1.2.9) thread_safe (~> 0.1) unf (0.1.4) unf_ext - unf_ext (0.0.7.7) - unicode-display_width (1.7.0) - zeitwerk (2.4.1) + unf_ext (0.0.8.1) + unicode-display_width (1.8.0) + zeitwerk (2.5.4) PLATFORMS ruby From 99105a889cc123586f106b01364f249fc8b1851d Mon Sep 17 00:00:00 2001 From: wclssdn Date: Sun, 10 Apr 2022 10:45:17 +0800 Subject: [PATCH 1253/1518] Support google.protobuf.Value/Struct in query parameters (#2628) * support google.protobuf.Value * Update runtime/query.go great~ thank you~ Co-authored-by: Johan Brandhorst-Satzkorn * add testcases for struct.Value support * add google.protobuf.Struct support * try to fix testcase * Revert "try to fix testcase" This reverts commit e5f910f83805c209b99e7854c5a896dff616fc5f. * try to fix testcase Co-authored-by: Johan Brandhorst-Satzkorn --- runtime/BUILD.bazel | 1 + runtime/internal/examplepb/proto3.pb.go | 385 +++++++++++++----------- runtime/internal/examplepb/proto3.proto | 5 +- runtime/query.go | 16 + runtime/query_test.go | 93 ++++-- 5 files changed, 305 insertions(+), 195 deletions(-) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 76d23634162..90b23e8b9e9 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -38,6 +38,7 @@ go_library( "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//reflect/protoregistry", "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", "@org_golang_google_protobuf//types/known/wrapperspb", ], diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index ac30c27dd9c..e8abcc1b4eb 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" @@ -78,7 +79,7 @@ type Proto3Message struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Next number: 47 + // Next number: 49 Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` @@ -126,6 +127,8 @@ type Proto3Message struct { MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MapValue16 map[string]*wrapperspb.UInt64Value `protobuf:"bytes,45,rep,name=map_value16,json=mapValue16,proto3" json:"map_value16,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + StructValueValue *structpb.Value `protobuf:"bytes,47,opt,name=struct_value_value,json=structValueValue,proto3" json:"struct_value_value,omitempty"` + StructValue *structpb.Struct `protobuf:"bytes,48,opt,name=struct_value,json=structValue,proto3" json:"struct_value,omitempty"` } func (x *Proto3Message) Reset() { @@ -475,6 +478,20 @@ func (x *Proto3Message) GetMapValue16() map[string]*wrapperspb.UInt64Value { return nil } +func (x *Proto3Message) GetStructValueValue() *structpb.Value { + if x != nil { + return x.StructValueValue + } + return nil +} + +func (x *Proto3Message) GetStructValue() *structpb.Struct { + if x != nil { + return x.StructValue + } + return nil +} + type isProto3Message_OneofValue interface { isProto3Message_OneofValue() } @@ -517,209 +534,219 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x20, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, - 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x21, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x10, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x2c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x65, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x32, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6d, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6f, + 0x6e, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x01, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x6e, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, + 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, - 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, - 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6d, 0x0a, 0x16, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, + 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x18, 0x1c, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x01, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x65, 0x6f, - 0x66, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x6e, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x61, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x0a, - 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, 0x64, 0x0a, 0x0a, + 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x33, - 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x36, + 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, 0x64, - 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, 0x03, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x12, 0x64, + 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, - 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, 0x21, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, 0x0b, - 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, 0x67, 0x0a, 0x0b, + 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, + 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, 0x67, - 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x12, 0x67, + 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, - 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x18, - 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, + 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x12, 0x44, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, + 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x30, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0b, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, @@ -831,6 +858,8 @@ var file_runtime_internal_examplepb_proto3_proto_goTypes = []interface{}{ (*wrapperspb.BoolValue)(nil), // 25: google.protobuf.BoolValue (*wrapperspb.StringValue)(nil), // 26: google.protobuf.StringValue (*wrapperspb.BytesValue)(nil), // 27: google.protobuf.BytesValue + (*structpb.Value)(nil), // 28: google.protobuf.Value + (*structpb.Struct)(nil), // 29: google.protobuf.Struct } var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ 1, // 0: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message @@ -864,12 +893,14 @@ var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ 13, // 28: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry 14, // 29: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry 15, // 30: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value16:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry - 16, // 31: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 28, // 31: grpc.gateway.runtime.internal.examplepb.Proto3Message.struct_value_value:type_name -> google.protobuf.Value + 29, // 32: grpc.gateway.runtime.internal.examplepb.Proto3Message.struct_value:type_name -> google.protobuf.Struct + 16, // 33: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value + 34, // [34:34] is the sub-list for method output_type + 34, // [34:34] is the sub-list for method input_type + 34, // [34:34] is the sub-list for extension type_name + 34, // [34:34] is the sub-list for extension extendee + 0, // [0:34] is the sub-list for field type_name } func init() { file_runtime_internal_examplepb_proto3_proto_init() } diff --git a/runtime/internal/examplepb/proto3.proto b/runtime/internal/examplepb/proto3.proto index 2b6d077c95f..93ffc1256a6 100644 --- a/runtime/internal/examplepb/proto3.proto +++ b/runtime/internal/examplepb/proto3.proto @@ -8,9 +8,10 @@ import "google/protobuf/duration.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; +import "google/protobuf/struct.proto"; message Proto3Message { - // Next number: 47 + // Next number: 49 Proto3Message nested = 41; float float_value = 42; double double_value = 43; @@ -58,6 +59,8 @@ message Proto3Message { map map_value14 = 39; map map_value15 = 40; map map_value16 = 45; + google.protobuf.Value struct_value_value = 47; + google.protobuf.Struct struct_value = 48; } enum EnumValue { diff --git a/runtime/query.go b/runtime/query.go index 59003e529a3..190e9c4b3ec 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -12,10 +12,12 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/grpclog" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -320,6 +322,20 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p fm := &field_mask.FieldMask{} fm.Paths = append(fm.Paths, strings.Split(value, ",")...) msg = fm + case "google.protobuf.Value": + var v structpb.Value + err := protojson.Unmarshal([]byte(value), &v) + if err != nil { + return protoreflect.Value{}, err + } + msg = &v + case "google.protobuf.Struct": + var v structpb.Struct + err := protojson.Unmarshal([]byte(value), &v) + if err != nil { + return protoreflect.Value{}, err + } + msg = &v default: return protoreflect.Value{}, fmt.Errorf("unsupported message type: %q", string(msgDescriptor.FullName())) } diff --git a/runtime/query_test.go b/runtime/query_test.go index 512e5f75856..4bdd8731fdf 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -15,6 +15,7 @@ import ( "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -96,6 +97,25 @@ func TestPopulateParameters(t *testing.T) { fieldmaskStr := "float_value,double_value" fieldmaskPb := &field_mask.FieldMask{Paths: []string{"float_value", "double_value"}} + structValueJsonStrings := []string{`{"a":{"b":1}}`, `""`, "{}", "[]", "true", "0"} + structValueValues := make([]*structpb.Value, len(structValueJsonStrings)) + for i := range structValueValues { + structValueValues[i] = &structpb.Value{} + err := structValueValues[i].UnmarshalJSON([]byte(structValueJsonStrings[i])) + if err != nil { + t.Errorf("build struct.Value value failed: %s", err.Error()) + } + } + structJsonStrings := []string{`{"a":{"b":1}}`, "{}", `{"c":[1,2],"d":[{"e":1,"f":{}}]}`} + structValues := make([]*structpb.Struct, len(structJsonStrings)) + for i := range structValues { + structValues[i] = &structpb.Struct{} + err := structValues[i].UnmarshalJSON([]byte(structJsonStrings[i])) + if err != nil { + t.Errorf("build struct.Struct value failed: %s", err.Error()) + } + } + for i, spec := range []struct { values url.Values filter *utilities.DoubleArray @@ -149,6 +169,8 @@ func TestPopulateParameters(t *testing.T) { "map_value14[key]": {"true"}, "map_value15[true]": {"value"}, "map_value16[key]": {"2"}, + "struct_value_value": {structValueJsonStrings[0]}, + "struct_value": {structJsonStrings[0]}, }, filter: utilities.NewDoubleArray(nil), want: &examplepb.Proto3Message{ @@ -184,19 +206,21 @@ func TestPopulateParameters(t *testing.T) { "fourth": "", `~!@#$%^&*()`: "value", }, - MapValue2: map[string]int32{"key": -2}, - MapValue3: map[int32]string{-2: "value"}, - MapValue4: map[string]int64{"key": -1}, - MapValue5: map[int64]string{-1: "value"}, - MapValue6: map[string]uint32{"key": 3}, - MapValue7: map[uint32]string{3: "value"}, - MapValue8: map[string]uint64{"key": 4}, - MapValue9: map[uint64]string{4: "value"}, - MapValue10: map[string]float32{"key": 1.5}, - MapValue12: map[string]float64{"key": 2.5}, - MapValue14: map[string]bool{"key": true}, - MapValue15: map[bool]string{true: "value"}, - MapValue16: map[string]*wrapperspb.UInt64Value{"key": {Value: 2}}, + MapValue2: map[string]int32{"key": -2}, + MapValue3: map[int32]string{-2: "value"}, + MapValue4: map[string]int64{"key": -1}, + MapValue5: map[int64]string{-1: "value"}, + MapValue6: map[string]uint32{"key": 3}, + MapValue7: map[uint32]string{3: "value"}, + MapValue8: map[string]uint64{"key": 4}, + MapValue9: map[uint64]string{4: "value"}, + MapValue10: map[string]float32{"key": 1.5}, + MapValue12: map[string]float64{"key": 2.5}, + MapValue14: map[string]bool{"key": true}, + MapValue15: map[bool]string{true: "value"}, + MapValue16: map[string]*wrapperspb.UInt64Value{"key": {Value: 2}}, + StructValueValue: structValueValues[0], + StructValue: structValues[0], }, }, { @@ -225,6 +249,8 @@ func TestPopulateParameters(t *testing.T) { "wrapperBoolValue": {"true"}, "wrapperStringValue": {"str"}, "wrapperBytesValue": {"Ynl0ZXM="}, + "struct_value_value": {structValueJsonStrings[1]}, + "struct_value": {structJsonStrings[1]}, }, filter: utilities.NewDoubleArray(nil), want: &examplepb.Proto3Message{ @@ -252,17 +278,50 @@ func TestPopulateParameters(t *testing.T) { WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("bytes")}, + StructValueValue: structValueValues[1], + StructValue: structValues[1], + }, + }, + { + values: url.Values{ + "enum_value": {"Z"}, + "repeated_enum": {"X", "2", "0"}, + "struct_value_value": {structValueJsonStrings[2]}, + "struct_value": {structJsonStrings[2]}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{ + EnumValue: examplepb.EnumValue_Z, + RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_X, examplepb.EnumValue_Z, examplepb.EnumValue_X}, + StructValueValue: structValueValues[2], + StructValue: structValues[2], + }, + }, + { + values: url.Values{ + "struct_value_value": {structValueJsonStrings[3]}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{ + StructValueValue: structValueValues[3], + }, + }, + { + values: url.Values{ + "struct_value_value": {structValueJsonStrings[4]}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{ + StructValueValue: structValueValues[4], }, }, { values: url.Values{ - "enum_value": {"Z"}, - "repeated_enum": {"X", "2", "0"}, + "struct_value_value": {structValueJsonStrings[5]}, }, filter: utilities.NewDoubleArray(nil), want: &examplepb.Proto3Message{ - EnumValue: examplepb.EnumValue_Z, - RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_X, examplepb.EnumValue_Z, examplepb.EnumValue_X}, + StructValueValue: structValueValues[5], }, }, { From e33cd3da5649a0865efc0cc9de551b8b4e0ae7f3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 11 Apr 2022 22:07:18 +0000 Subject: [PATCH 1254/1518] fix(deps): update golang.org/x/oauth2 digest to 9780585 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index af81a469b3f..4f7c5c23100 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.7 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac google.golang.org/grpc v1.45.0 diff --git a/go.sum b/go.sum index e77d6be2fb0..044fa6276cf 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 4a597e2319a..3bef2b2a9b1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1144,8 +1144,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=", - version = "v0.0.0-20220309155454-6242fa91716a", + sum = "h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=", + version = "v0.0.0-20220411215720-9780585627b5", ) go_repository( name = "org_golang_x_sync", From ea4029e1bec8672694afe8cabc98e450414dee9b Mon Sep 17 00:00:00 2001 From: Joonas Bergius Date: Mon, 11 Apr 2022 21:11:01 -0500 Subject: [PATCH 1255/1518] Correct typos in error messages from loading OpenAPI Configuration (#2636) --- internal/descriptor/openapi_configuration.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/descriptor/openapi_configuration.go b/internal/descriptor/openapi_configuration.go index bce5bc52a0f..d5b4934f8c5 100644 --- a/internal/descriptor/openapi_configuration.go +++ b/internal/descriptor/openapi_configuration.go @@ -22,7 +22,7 @@ func loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string openapiConfiguration := openapiconfig.OpenAPIConfig{} if err := unmarshaler.Unmarshal(jsonContents, &openapiConfiguration); err != nil { - return nil, fmt.Errorf("failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) + return nil, fmt.Errorf("failed to parse OpenAPI Configuration from YAML in '%v': %v", yamlSourceLogName, err) } return &openapiConfiguration, nil @@ -46,7 +46,7 @@ func registerOpenAPIOptions(registry *Registry, openAPIConfig *openapiconfig.Ope func (r *Registry) LoadOpenAPIConfigFromYAML(yamlFile string) error { yamlFileContents, err := ioutil.ReadFile(yamlFile) if err != nil { - return fmt.Errorf("failed to read gRPC API Configuration description from '%v': %v", yamlFile, err) + return fmt.Errorf("failed to read OpenAPI Configuration description from '%v': %v", yamlFile, err) } config, err := loadOpenAPIConfigFromYAML(yamlFileContents, yamlFile) From 4c42ec42172963ed113d21f6bf4c2abe84f3ece2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Apr 2022 04:10:45 +0000 Subject: [PATCH 1256/1518] chore(deps): update dependency golang to v1.18.1 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index a3f1108e5ae..9a05ecab09d 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.0 +FROM golang:1.18.1 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index baf7d3a5d3c..300580cf2ca 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.0 as builder +FROM golang:1.18.1 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 2b9115ea116..1c7fd6ed972 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.0 as builder +FROM golang:1.18.1 as builder ARG RELEASE_VERSION From 86ec5f1214466aee9563cb488e4b237e8fde118f Mon Sep 17 00:00:00 2001 From: Naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Wed, 13 Apr 2022 11:38:43 -0500 Subject: [PATCH 1257/1518] Set permissions for GitHub actions (#2641) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much. - Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) Signed-off-by: naveensrinivasan <172697+naveensrinivasan@users.noreply.github.com> --- .github/workflows/golangci-lint.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 581d13225c4..aa45f5d894d 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -6,8 +6,14 @@ on: branches: - master pull_request: +permissions: + contents: read + jobs: golangci: + permissions: + contents: read # for actions/checkout to fetch code + pull-requests: read # for golangci/golangci-lint-action to fetch pull requests name: lint runs-on: ubuntu-latest steps: From 31a16c59deb43f6f760c5fd90a6053d4261de6d2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Apr 2022 18:54:55 +0000 Subject: [PATCH 1258/1518] fix(deps): update google.golang.org/genproto digest to 5e96e28 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4f7c5c23100..b55ccf36b91 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac + google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 044fa6276cf..df92c07ad0d 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 h1:XGQ6tc+EnM35IAazg4y6AHmUg4oK8NXsXaILte1vRlk= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3bef2b2a9b1..29f4c27446e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg=", - version = "v0.0.0-20220407144326-9054f6ed7bac", + sum = "h1:XGQ6tc+EnM35IAazg4y6AHmUg4oK8NXsXaILte1vRlk=", + version = "v0.0.0-20220413183235-5e96e2839df9", ) go_repository( name = "org_golang_google_grpc", From 06128de927b693cd11f3d833cf409f4503164a17 Mon Sep 17 00:00:00 2001 From: James Johnstone Date: Thu, 14 Apr 2022 15:16:26 +0100 Subject: [PATCH 1259/1518] protoc-gen-openapiv2: Add field and schema extensions (#2418) * Field and schema extensions * Remove extensions from Schema As they are already included in JSONSchema * Add documentation for extensions --- .../mapping/customizing_openapi_output.md | 29 + .../internal/clients/abe/api/swagger.yaml | 16 + .../proto/examplepb/a_bit_of_everything.pb.go | 1581 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 13 +- .../a_bit_of_everything.swagger.json | 51 +- .../examplepb/generated_input.swagger.json | 6 +- .../proto/examplepb/stream.swagger.json | 6 +- .../internal/genopenapi/generator.go | 10 + .../internal/genopenapi/template.go | 14 + .../internal/genopenapi/types.go | 4 + protoc-gen-openapiv2/options/openapiv2.pb.go | 355 ++-- protoc-gen-openapiv2/options/openapiv2.proto | 1 + 12 files changed, 1109 insertions(+), 977 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 730fe44ffbb..4227f1eead6 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -39,6 +39,12 @@ message ABitOfEverything { description: "Find out more about ABitOfEverything"; } example: "{\"uuid\": \"0cf361e1-4b44-483d-a159-54dabdf7e814\"}" + extensions: { + key: "x-irreversible"; + value { + bool_value: true; + } + } }; string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "The UUID field."}]; @@ -78,6 +84,29 @@ service ABitOfEverythingService { } ``` +[Swagger Extensions](https://swagger.io/docs/specification/2-0/swagger-extensions/) can be added as key-value pairs to the options. Keys must begin with `x-` and values can be of any type listed [here](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#value). For example: +``` +extensions: { + key: "x-amazon-apigateway-authorizer"; + value { + struct_value { + fields { + key: "type"; + value { + string_value: "token"; + } + } + fields { + key: "authorizerResultTtlInSeconds"; + value { + number_value: 60; + } + } + } + } +} +``` + Please see this [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of the options being used. ## Using google.api.field_behavior diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 9df1bdeb0f9..07662d160e4 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -159,6 +159,7 @@ paths: required: false type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -472,6 +473,7 @@ paths: required: false type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -776,6 +778,7 @@ paths: required: false type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "floatValue" @@ -1069,6 +1072,7 @@ paths: in: "path" required: true type: "string" + x-internal: true x-exportParamName: "UuidName" - name: "singleNested.name" in: "query" @@ -1549,6 +1553,7 @@ paths: required: false type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true x-exportParamName: "Uuid" x-optionalDataType: "String" - name: "bytesValue" @@ -1702,6 +1707,7 @@ paths: in: "path" required: true type: "string" + x-internal: true x-exportParamName: "UuidName" - in: "body" name: "body" @@ -2211,6 +2217,7 @@ paths: in: "path" required: true type: "string" + x-internal: true x-exportParamName: "UuidName" - in: "body" name: "abe" @@ -2261,6 +2268,7 @@ paths: in: "path" required: true type: "string" + x-internal: true x-exportParamName: "UuidName" - in: "body" name: "abe" @@ -2661,6 +2669,7 @@ paths: in: "path" required: true type: "string" + x-internal: true x-exportParamName: "UuidName" - in: "body" name: "body" @@ -2798,6 +2807,7 @@ definitions: type: "string" minLength: 1 pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true nested: type: "array" items: @@ -2932,6 +2942,7 @@ definitions: example: int64_value: 12 double_value: 12.3 + x-a-bit-of-everything-foo: "bar" examplepbABitOfEverythingRepeated: type: "object" properties: @@ -3337,6 +3348,7 @@ definitions: example: int64_value: 12 double_value: 12.3 + x-a-bit-of-everything-foo: "bar" v1exampledeep_pathsingleNested.name_singleNested: properties: amount: @@ -3362,6 +3374,7 @@ definitions: type: "string" minLength: 1 pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + x-internal: true nested: type: "array" items: @@ -3496,6 +3509,7 @@ definitions: example: int64_value: 12 double_value: 12.3 + x-a-bit-of-everything-foo: "bar" The book to update.: type: "object" properties: @@ -3655,6 +3669,7 @@ definitions: example: int64_value: 12 double_value: 12.3 + x-a-bit-of-everything-foo: "bar" A bit of everything_3: type: "object" required: @@ -3799,6 +3814,7 @@ definitions: example: int64_value: 12 double_value: 12.3 + x-a-bit-of-everything-foo: "bar" A bit of everything_4: required: - "doubleValue" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index dd7e3edcbdc..8eccb73f90e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1356,7 +1356,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdb, 0x1f, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x94, 0x20, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1364,845 +1364,848 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x76, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x62, 0x92, 0x41, 0x5f, - 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, + 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x89, 0x01, + 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x75, 0x92, 0x41, + 0x72, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, - 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, - 0x7d, 0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, + 0x32, 0x7d, 0x82, 0x03, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x12, 0x02, 0x20, 0x01, 0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, + 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, + 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, - 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, + 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, + 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, + 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, + 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, + 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, + 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, + 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, + 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, - 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, - 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, - 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, - 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, - 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, - 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, - 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, - 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, - 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, - 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x2a, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x88, - 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, - 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, - 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, - 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, - 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, - 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, + 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, + 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, + 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, + 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, + 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, + 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, + 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, + 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x8f, 0x02, - 0x92, 0x41, 0x8b, 0x02, 0x0a, 0x85, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, - 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, - 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, - 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, - 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, - 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, - 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, - 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, + 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, + 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, + 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x3a, 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, + 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, + 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, + 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, + 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, + 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, + 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, - 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, - 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, - 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, + 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, + 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, + 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, + 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, - 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, - 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, + 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, - 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, - 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, - 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, - 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, - 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, + 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, + 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, + 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, + 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, + 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, + 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, + 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, - 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, - 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, - 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, - 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, - 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, - 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, - 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, - 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, + 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, + 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, + 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, + 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, + 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, + 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, - 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, - 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, - 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, - 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, + 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, + 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, + 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, + 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, + 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, + 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, + 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, - 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, - 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, - 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, - 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, - 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, - 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, - 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, + 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, + 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, + 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, + 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, + 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, + 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, + 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, + 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, + 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, + 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, + 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, - 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, - 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, - 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, - 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, + 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, + 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, + 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, - 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, - 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, - 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, + 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, + 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, + 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, + 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, + 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, - 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, - 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, + 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, + 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, - 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, - 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, - 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, - 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, - 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, - 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, - 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, - 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, - 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, - 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, - 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, - 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, - 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, - 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, - 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, - 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, - 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, - 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, - 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, - 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, - 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, - 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, - 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, - 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, - 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, - 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, - 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, - 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, - 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, + 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, - 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, + 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, + 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, + 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, + 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, + 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, + 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, + 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, + 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, + 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, + 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, + 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, + 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, + 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, + 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, + 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, + 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, + 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, + 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, + 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, + 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, + 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, + 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, + 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, + 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, + 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, + 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, + 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, + 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, + 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, + 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, + 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, + 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, + 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, + 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, + 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 7c4afb80006..5fc0960000e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -237,6 +237,12 @@ message ABitOfEverything { title: "A bit of everything" description: "Intentionally complicated message type to cover many features of Protobuf." required: ["uuid", "int64_value", "double_value"] + extensions: { + key: "x-a-bit-of-everything-foo"; + value { + string_value: "bar"; + } + } } external_docs: { url: "https://github.com/grpc-ecosystem/grpc-gateway"; @@ -266,7 +272,12 @@ message ABitOfEverything { } Nested single_nested = 25; - string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", min_length: 1, field_configuration: {path_param_name: "uuidName"}}]; + string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + min_length: 1, + field_configuration: {path_param_name: "uuidName"}, + extensions: {key: "x-internal"; value {bool_value: true}} + }]; repeated Nested nested = 2; float float_value = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "Float value field", default: "0.2", required: ['float_value']}]; double double_value = 4; diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 716c8d1f2a0..f102e42e38f 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -239,7 +239,8 @@ "in": "query", "required": false, "type": "string", - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, { "name": "floatValue", @@ -581,7 +582,8 @@ "in": "query", "required": false, "type": "string", - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, { "name": "floatValue", @@ -916,7 +918,8 @@ "in": "query", "required": false, "type": "string", - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, { "name": "floatValue", @@ -1237,7 +1240,8 @@ "name": "uuidName", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-internal": true }, { "name": "singleNested.name", @@ -1771,7 +1775,8 @@ "in": "query", "required": false, "type": "string", - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, { "name": "bytesValue", @@ -1948,7 +1953,8 @@ "name": "uuidName", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-internal": true }, { "name": "body", @@ -2151,7 +2157,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" } } ], @@ -2639,7 +2646,8 @@ "uuid": { "type": "string", "minLength": 1, - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, "nested": { "type": "array", @@ -2829,7 +2837,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" } } ], @@ -3048,7 +3057,8 @@ "name": "uuidName", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-internal": true }, { "name": "abe", @@ -3252,7 +3262,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" } }, { @@ -3311,7 +3322,8 @@ "name": "uuidName", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-internal": true }, { "name": "abe", @@ -3515,7 +3527,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" } }, { @@ -4076,7 +4089,8 @@ "name": "uuidName", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-internal": true }, { "name": "body", @@ -4282,7 +4296,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" }, "updateMask": { "type": "string", @@ -4414,7 +4429,8 @@ "uuid": { "type": "string", "minLength": 1, - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, "nested": { "type": "array", @@ -4604,7 +4620,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" }, "examplepbABitOfEverythingRepeated": { "type": "object", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 65bc2235689..99b83e2a0d3 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -101,7 +101,8 @@ "uuid": { "type": "string", "minLength": 1, - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, "nested": { "type": "array", @@ -291,7 +292,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" }, "examplepbNumericEnum": { "type": "string", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 4314fc90d94..0025d8ebd1d 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -228,7 +228,8 @@ "uuid": { "type": "string", "minLength": 1, - "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" + "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + "x-internal": true }, "nested": { "type": "array", @@ -418,7 +419,8 @@ "doubleValue", "floatValue", "requiredStringViaFieldBehaviorAnnotation" - ] + ], + "x-a-bit-of-everything-foo": "bar" }, "examplepbNumericEnum": { "type": "string", diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 6c56b38c79f..09ff628a4dc 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -109,6 +109,16 @@ func (so openapiResponseObject) MarshalJSON() ([]byte, error) { return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiSchemaObject) MarshalJSON() ([]byte, error) { + type alias openapiSchemaObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so openapiParameterObject) MarshalJSON() ([]byte, error) { + type alias openapiParameterObject + return extensionMarshalJSON(alias(so), so.extensions) +} + func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error) { // To append arbitrary keys to the struct we'll render into json, // we're creating another struct that embeds the original one, and diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 6af43c04e81..fba6169531d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -273,6 +273,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre Format: schema.Format, Pattern: schema.Pattern, Required: required, + extensions: schema.extensions, } if param.Type == "array" { param.CollectionFormat = "multi" @@ -449,6 +450,7 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry schema.MinProperties = protoSchema.MinProperties schema.Required = protoSchema.Required schema.XNullable = protoSchema.XNullable + schema.extensions = protoSchema.extensions if protoSchema.schemaCore.Type != "" || protoSchema.schemaCore.Ref != "" { schema.schemaCore = protoSchema.schemaCore } @@ -1022,6 +1024,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re var enumNames []string var items *openapiItemsObject var minItems *int + var extensions []extension switch pt := parameter.Target.GetType(); pt { case descriptorpb.FieldDescriptorProto_TYPE_GROUP, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { @@ -1033,6 +1036,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re paramFormat = schema.Format desc = schema.Description defaultValue = schema.Default + extensions = schema.extensions } else { return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } @@ -1052,6 +1056,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re schema := schemaOfField(parameter.Target, reg, customRefs) desc = schema.Description defaultValue = schema.Default + extensions = schema.extensions default: var ok bool paramType, paramFormat, ok = primitiveSchema(pt) @@ -1062,6 +1067,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re schema := schemaOfField(parameter.Target, reg, customRefs) desc = schema.Description defaultValue = schema.Default + extensions = schema.extensions } if parameter.IsRepeated() { @@ -1111,6 +1117,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re CollectionFormat: collectionFormat, MinItems: minItems, Pattern: pattern, + extensions: extensions, }) } // Now check if there is a body parameter @@ -2527,6 +2534,13 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option } } s.Enum = j.GetEnum() + if j.GetExtensions() != nil { + exts, err := processExtensions(j.GetExtensions()) + if err != nil { + panic(err) + } + s.extensions = exts + } if overrideType := j.GetType(); len(overrideType) > 0 { s.Type = strings.ToLower(overrideType[0].String()) } diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 8af16d5c1da..ae85f24ba78 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -149,6 +149,8 @@ type openapiParameterObject struct { // Or you can explicitly refer to another type. If this is defined all // other fields should be empty Schema *openapiSchemaObject `json:"schema,omitempty" yaml:"schema,omitempty"` + + extensions []extension } // core part of schema, which is common to itemsObject and schemaObject. @@ -314,6 +316,8 @@ type openapiSchemaObject struct { MaxProperties uint64 `json:"maxProperties,omitempty" yaml:"maxProperties,omitempty"` MinProperties uint64 `json:"minProperties,omitempty" yaml:"minProperties,omitempty"` Required []string `json:"required,omitempty" yaml:"required,omitempty"` + + extensions []extension } // http://swagger.io/specification/#definitionsObject diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 69b2bbf13f2..3d6fef4dcd2 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -1407,6 +1407,7 @@ type JSONSchema struct { Enum []string `protobuf:"bytes,46,rep,name=enum,proto3" json:"enum,omitempty"` // Additional field level properties used when generating the OpenAPI v2 file. FieldConfiguration *JSONSchema_FieldConfiguration `protobuf:"bytes,1001,opt,name=field_configuration,json=fieldConfiguration,proto3" json:"field_configuration,omitempty"` + Extensions map[string]*structpb.Value `protobuf:"bytes,48,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *JSONSchema) Reset() { @@ -1616,6 +1617,13 @@ func (x *JSONSchema) GetFieldConfiguration() *JSONSchema_FieldConfiguration { return nil } +func (x *JSONSchema) GetExtensions() map[string]*structpb.Value { + if x != nil { + return x.Extensions + } + return nil +} + // `Tag` is a representation of OpenAPI v2 specification's Tag object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject @@ -2057,7 +2065,7 @@ type SecurityRequirement_SecurityRequirementValue struct { func (x *SecurityRequirement_SecurityRequirementValue) Reset() { *x = SecurityRequirement_SecurityRequirementValue{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2070,7 +2078,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) String() string { func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2339,7 +2347,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x22, 0x99, 0x09, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, + 0x08, 0x04, 0x10, 0x05, 0x22, 0xd7, 0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, @@ -2396,147 +2404,159 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x0a, 0x12, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, - 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, - 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, - 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, - 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, - 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, - 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, - 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, - 0x08, 0x25, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, - 0x22, 0x94, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, - 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, - 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, - 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, - 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, - 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, - 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, - 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, - 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, - 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, - 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, - 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, - 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, - 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, - 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, - 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, - 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, - 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, - 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, - 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, + 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, + 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, + 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, + 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, + 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, + 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, + 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x94, + 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, + 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, + 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, + 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, + 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, + 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, + 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, + 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, + 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, + 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, + 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, + 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, + 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, + 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, + 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, + 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, + 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, + 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, + 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, - 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, - 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, - 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, + 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, + 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, + 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2552,7 +2572,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { } var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes @@ -2583,12 +2603,13 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry (*JSONSchema_FieldConfiguration)(nil), // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration - nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 33: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*structpb.Value)(nil), // 34: google.protobuf.Value + nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry + nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + nil, // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 34: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*structpb.Value)(nil), // 35: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info @@ -2614,30 +2635,32 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 12, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation 1, // 21: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes 28, // 22: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration - 12, // 23: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 29, // 24: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 30, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 32, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 33, // 31: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 32: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 34: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 34, // 35: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 36: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 34, // 37: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 34, // 38: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 39: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 34, // 40: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 31, // 41: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 42, // [42:42] is the sub-list for method output_type - 42, // [42:42] is the sub-list for method input_type - 42, // [42:42] is the sub-list for extension type_name - 42, // [42:42] is the sub-list for extension extendee - 0, // [0:42] is the sub-list for field type_name + 29, // 23: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry + 12, // 24: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 30, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 2, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 3, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 4, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 19, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 31, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 33, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 34, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 8, // 33: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 35, // 34: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 8, // 35: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 35, // 36: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 37: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 35, // 38: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 35, // 39: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 35, // 40: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value + 17, // 41: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 35, // 42: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 32, // 43: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 44, // [44:44] is the sub-list for method output_type + 44, // [44:44] is the sub-list for method input_type + 44, // [44:44] is the sub-list for extension type_name + 44, // [44:44] is the sub-list for extension extendee + 0, // [0:44] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } @@ -2838,7 +2861,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { case 0: return &v.state @@ -2857,7 +2880,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, NumEnums: 5, - NumMessages: 29, + NumMessages: 30, NumExtensions: 0, NumServices: 0, }, diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 6f97c8846e6..79d378f3c64 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -518,6 +518,7 @@ message JSONSchema { // for overlapping paths. string path_param_name = 47; } + map extensions = 48; } // `Tag` is a representation of OpenAPI v2 specification's Tag object. From 5a014b09ea8c446bc5c30b65f39b1ab7a8689260 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Apr 2022 16:31:36 +0000 Subject: [PATCH 1260/1518] chore(deps): update dependency com_github_bazelbuild_buildtools to v5.1.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index c57364d9dbc..80eb58bfd82 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -81,9 +81,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "7f43df3cca7bb4ea443b4159edd7a204c8d771890a69a50a190dc9543760ca21", - strip_prefix = "buildtools-5.0.1", - urls = ["https://github.com/bazelbuild/buildtools/archive/5.0.1.tar.gz"], + sha256 = "e3bb0dc8b0274ea1aca75f1f8c0c835adbe589708ea89bf698069d0790701ea3", + strip_prefix = "buildtools-5.1.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/5.1.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 1c5e2bbcf1469061c7c92578b462c0fb846697ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Apr 2022 21:35:00 +0000 Subject: [PATCH 1261/1518] fix(deps): update google.golang.org/genproto digest to 2d67ff6 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b55ccf36b91..bebfbbd8f4a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 + google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index df92c07ad0d..22aeb661b78 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9 h1:XGQ6tc+EnM35IAazg4y6AHmUg4oK8NXsXaILte1vRlk= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 29f4c27446e..cb613bd6439 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XGQ6tc+EnM35IAazg4y6AHmUg4oK8NXsXaILte1vRlk=", - version = "v0.0.0-20220413183235-5e96e2839df9", + sum = "h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM=", + version = "v0.0.0-20220414192740-2d67ff6cf2b4", ) go_repository( name = "org_golang_google_grpc", From bc0110188a8ef8e232050c3d9b347198dc83536a Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 16 Apr 2022 21:27:53 -0400 Subject: [PATCH 1262/1518] Format protobuf files with buf (#2650) --- .circleci/config.yml | 1 + Makefile | 2 +- examples/internal/helloworld/helloworld.proto | 6 +- .../proto/examplepb/a_bit_of_everything.pb.go | 40 +- .../proto/examplepb/a_bit_of_everything.proto | 1308 +++++++++-------- .../proto/examplepb/echo_service.proto | 141 +- .../proto/examplepb/flow_combination.proto | 284 ++-- .../examplepb/generate_unbound_methods.proto | 31 +- .../proto/examplepb/generated_input.proto | 19 +- .../proto/examplepb/non_standard_names.proto | 96 +- .../proto/examplepb/openapi_merge_a.proto | 4 +- .../proto/examplepb/openapi_merge_b.proto | 40 +- .../examplepb/response_body_service.proto | 89 +- .../internal/proto/examplepb/stream.pb.go | 24 +- .../internal/proto/examplepb/stream.proto | 52 +- .../examplepb/unannotated_echo_service.proto | 59 +- .../proto/examplepb/use_go_template.proto | 132 +- .../examplepb/use_go_template.swagger.json | 4 +- .../visibility_rule_echo_service.proto | 135 +- .../internal/proto/examplepb/wrappers.pb.go | 6 +- .../internal/proto/examplepb/wrappers.proto | 156 +- .../internal/proto/pathenum/path_enum.proto | 20 +- examples/internal/proto/sub/message.proto | 6 +- examples/internal/proto/sub2/message.proto | 6 +- internal/descriptor/apiconfig/apiconfig.proto | 8 +- .../openapiconfig/openapiconfig.proto | 36 +- .../options/annotations.proto | 4 +- protoc-gen-openapiv2/options/openapiv2.proto | 4 +- runtime/internal/examplepb/example.pb.go | 16 +- runtime/internal/examplepb/example.proto | 22 +- .../examplepb/non_standard_names.proto | 104 +- runtime/internal/examplepb/proto3.pb.go | 12 +- runtime/internal/examplepb/proto3.proto | 6 +- 33 files changed, 1467 insertions(+), 1406 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 318b4cca4e2..5aa3d281a80 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -144,6 +144,7 @@ jobs: - checkout - run: buf build - run: buf lint + - run: buf format -w && git diff --exit-code - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: diff --git a/Makefile b/Makefile index 1914b20a82b..0570aa11cc4 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ $(GENERATE_UNBOUND_METHODS_EXAMPLE_SRCS): $(GENERATE_UNBOUND_METHODS_EXAMPLE_SPE $(EXAMPLE_CLIENT_DIR)/generateunboundmethods/git_push.sh install: - go install github.com/bufbuild/buf/cmd/buf@v1.1.0 + go install github.com/bufbuild/buf/cmd/buf@v1.3.1 go install \ ./protoc-gen-openapiv2 \ ./protoc-gen-grpc-gateway diff --git a/examples/internal/helloworld/helloworld.proto b/examples/internal/helloworld/helloworld.proto index fae2ab00777..96ab370104c 100644 --- a/examples/internal/helloworld/helloworld.proto +++ b/examples/internal/helloworld/helloworld.proto @@ -2,13 +2,13 @@ syntax = "proto3"; package grpc.gateway.examples.internal.helloworld; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld"; - import "google/api/annotations.proto"; import "google/protobuf/wrappers.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld"; + service Greeter { - rpc SayHello (HelloRequest) returns (HelloReply) { + rpc SayHello(HelloRequest) returns (HelloReply) { option (google.api.http) = { get: "/say/{name}" additional_bindings: { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 8eccb73f90e..22b3a2f2701 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1298,29 +1298,29 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 5fc0960000e..b74a23ba25e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -1,397 +1,432 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; -import "google/api/annotations.proto"; -import "google/api/field_behavior.proto"; -import "google/protobuf/field_mask.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/wrappers.proto"; import "examples/internal/proto/pathenum/path_enum.proto"; import "examples/internal/proto/sub/message.proto"; import "examples/internal/proto/sub2/message.proto"; +import "google/api/annotations.proto"; +import "google/api/field_behavior.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; import "google/rpc/status.proto"; import "protoc-gen-openapiv2/options/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { - info: { - title: "A Bit of Everything"; - version: "1.0"; - contact: { - name: "gRPC-Gateway project"; - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - email: "none@example.com"; - }; - license: { - name: "BSD 3-Clause License"; - url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; - }; - extensions: { - key: "x-something-something"; - value { - string_value: "yadda"; - } - } - }; - // Overwriting host entry breaks tests, so this is not done here. - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "More about gRPC-Gateway"; - } - schemes: HTTP; - schemes: HTTPS; - schemes: WSS; - consumes: "application/json"; - consumes: "application/x-foo-mime"; - produces: "application/json"; - produces: "application/x-foo-mime"; - security_definitions: { - security: { - key: "BasicAuth"; - value: { - type: TYPE_BASIC; - } - } - security: { - key: "ApiKeyAuth"; - value: { - type: TYPE_API_KEY; - in: IN_HEADER; - name: "X-API-Key"; - extensions: { - key: "x-amazon-apigateway-authtype"; - value { - string_value: "oauth2"; - } - } - extensions: { - key: "x-amazon-apigateway-authorizer"; - value { - struct_value { - fields { - key: "type"; - value { - string_value: "token"; - } - } - fields { - key: "authorizerResultTtlInSeconds"; - value { - number_value: 60; - } - } - } - } - } - } - } - security: { - key: "OAuth2"; - value: { - type: TYPE_OAUTH2; - flow: FLOW_ACCESS_CODE; - authorization_url: "https://example.com/oauth/authorize"; - token_url: "https://example.com/oauth/token"; - scopes: { - scope: { - key: "read"; - value: "Grants read access"; - } - scope: { - key: "write"; - value: "Grants write access"; - } - scope: { - key: "admin"; - value: "Grants read and write access to administrative information"; - } - } - } - } - } - security: { - security_requirement: { - key: "BasicAuth"; - value: {}; - } - security_requirement: { - key: "ApiKeyAuth"; - value: {}; - } - } - security: { - security_requirement: { - key: "OAuth2"; - value: { - scope: "read"; - scope: "write"; - } - } - security_requirement: { - key: "ApiKeyAuth"; - value: {}; - } - } - responses: { - key: "403"; - value: { - description: "Returned when the user does not have permission to access the resource."; - } - } - responses: { - key: "404"; - value: { - description: "Returned when the resource does not exist."; - schema: { - json_schema: { - type: STRING; - } - } - } - } - responses: { - key: "418"; - value: { - description: "I'm a teapot."; - schema: { - json_schema: { - ref: ".grpc.gateway.examples.internal.proto.examplepb.NumericEnum"; - } - } - } - } - responses: { - key: "500"; - value: { - description: "Server error"; - headers: { - key: "X-Correlation-Id" - value: { - description: "Unique event identifier for server requests" - type: "string" - format: "uuid" - default: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" - pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" - } - }; - schema: { - json_schema: { - ref: ".grpc.gateway.examples.internal.proto.examplepb.ErrorResponse"; - } - } - } - } - extensions: { - key: "x-grpc-gateway-foo"; - value { - string_value: "bar"; - } - } - extensions: { - key: "x-grpc-gateway-baz-list"; - value { - list_value: { - values: { - string_value: "one"; - } - values: { - bool_value: true; - } - } - } - } + info: { + title: "A Bit of Everything"; + version: "1.0"; + contact: { + name: "gRPC-Gateway project"; + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + email: "none@example.com"; + }; + license: { + name: "BSD 3-Clause License"; + url: "https://github.com/grpc-ecosystem/grpc-gateway/blob/master/LICENSE.txt"; + }; + extensions: { + key: "x-something-something"; + value { + string_value: "yadda"; + } + } + }; + // Overwriting host entry breaks tests, so this is not done here. + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "More about gRPC-Gateway"; + } + schemes: HTTP; + schemes: HTTPS; + schemes: WSS; + consumes: "application/json"; + consumes: "application/x-foo-mime"; + produces: "application/json"; + produces: "application/x-foo-mime"; + security_definitions: { + security: { + key: "BasicAuth"; + value: { + type: TYPE_BASIC; + } + } + security: { + key: "ApiKeyAuth"; + value: { + type: TYPE_API_KEY; + in: IN_HEADER; + name: "X-API-Key"; + extensions: { + key: "x-amazon-apigateway-authtype"; + value { + string_value: "oauth2"; + } + } + extensions: { + key: "x-amazon-apigateway-authorizer"; + value { + struct_value { + fields { + key: "type"; + value { + string_value: "token"; + } + } + fields { + key: "authorizerResultTtlInSeconds"; + value { + number_value: 60; + } + } + } + } + } + } + } + security: { + key: "OAuth2"; + value: { + type: TYPE_OAUTH2; + flow: FLOW_ACCESS_CODE; + authorization_url: "https://example.com/oauth/authorize"; + token_url: "https://example.com/oauth/token"; + scopes: { + scope: { + key: "read"; + value: "Grants read access"; + } + scope: { + key: "write"; + value: "Grants write access"; + } + scope: { + key: "admin"; + value: "Grants read and write access to administrative information"; + } + } + } + } + } + security: { + security_requirement: { + key: "BasicAuth"; + value: {}; + } + security_requirement: { + key: "ApiKeyAuth"; + value: {}; + } + } + security: { + security_requirement: { + key: "OAuth2"; + value: { + scope: "read"; + scope: "write"; + } + } + security_requirement: { + key: "ApiKeyAuth"; + value: {}; + } + } + responses: { + key: "403"; + value: { + description: "Returned when the user does not have permission to access the resource."; + } + } + responses: { + key: "404"; + value: { + description: "Returned when the resource does not exist."; + schema: { + json_schema: { + type: STRING; + } + } + } + } + responses: { + key: "418"; + value: { + description: "I'm a teapot."; + schema: { + json_schema: { + ref: ".grpc.gateway.examples.internal.proto.examplepb.NumericEnum"; + } + } + } + } + responses: { + key: "500"; + value: { + description: "Server error"; + headers: { + key: "X-Correlation-Id" + value: { + description: "Unique event identifier for server requests" + type: "string" + format: "uuid" + default: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" + pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" + } + }; + schema: { + json_schema: { + ref: ".grpc.gateway.examples.internal.proto.examplepb.ErrorResponse"; + } + } + } + } + extensions: { + key: "x-grpc-gateway-foo"; + value { + string_value: "bar"; + } + } + extensions: { + key: "x-grpc-gateway-baz-list"; + value { + list_value: { + values: { + string_value: "one"; + } + values: { + bool_value: true; + } + } + } + } }; -message ErrorResponse{ - string correlationId = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", - title: "x-correlation-id", - description: "Unique event identifier for server requests", - format: "uuid", - example: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" - }]; - ErrorObject error = 2; +message ErrorResponse { + string correlationId = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$", + title: "x-correlation-id", + description: "Unique event identifier for server requests", + format: "uuid", + example: "\"2438ac3c-37eb-4902-adef-ed16b4431030\"" + }]; + ErrorObject error = 2; } -message ErrorObject{ - int32 code = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - pattern: "^[0-9]$", - title: "code", - description: "Response code", - format: "integer" - }]; - string message = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - pattern: "^[a-zA-Z0-9]{1, 32}$", - title: "message", - description: "Response message" - }]; +message ErrorObject { + int32 code = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[0-9]$", + title: "code", + description: "Response code", + format: "integer" + }]; + string message = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[a-zA-Z0-9]{1, 32}$", + title: "message", + description: "Response message" + }]; } - // Intentionally complicated message type to cover many features of Protobuf. message ABitOfEverything { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - json_schema: { - title: "A bit of everything" - description: "Intentionally complicated message type to cover many features of Protobuf." - required: ["uuid", "int64_value", "double_value"] - extensions: { - key: "x-a-bit-of-everything-foo"; - value { - string_value: "bar"; - } - } - } - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "Find out more about ABitOfEverything"; - } - example: "{\"int64_value\": 12, \"double_value\": 12.3}" - }; - - // Nested is nested type. - message Nested { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - example: "{\"ok\": \"TRUE\"}" - }; - // name is nested field. - string name = 1; - uint32 amount = 2; - // DeepEnum is one or zero. - enum DeepEnum { - // FALSE is false. - FALSE = 0; - // TRUE is true. - TRUE = 1; - } - - // DeepEnum comment. - DeepEnum ok = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "DeepEnum description."}]; - } - Nested single_nested = 25; - - string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", - min_length: 1, - field_configuration: {path_param_name: "uuidName"}, - extensions: {key: "x-internal"; value {bool_value: true}} - }]; - repeated Nested nested = 2; - float float_value = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {description: "Float value field", default: "0.2", required: ['float_value']}]; - double double_value = 4; - int64 int64_value = 5; - uint64 uint64_value = 6; - int32 int32_value = 7; - fixed64 fixed64_value = 8; - fixed32 fixed32_value = 9; - bool bool_value = 10; - string string_value = 11; - bytes bytes_value = 29; - uint32 uint32_value = 13; - NumericEnum enum_value = 14; - pathenum.PathEnum path_enum_value = 30; - pathenum.MessagePathEnum.NestedPathEnum nested_path_enum_value = 31; - sfixed32 sfixed32_value = 15; - sfixed64 sfixed64_value = 16; - sint32 sint32_value = 17; - sint64 sint64_value = 18; - repeated string repeated_string_value = 19; - oneof oneof_value { - google.protobuf.Empty oneof_empty = 20; - string oneof_string = 21; - } - - map map_value = 22; - map mapped_string_value = 23; - map mapped_nested_value = 24; - - string nonConventionalNameValue = 26; - - google.protobuf.Timestamp timestamp_value = 27; - - // repeated enum value. it is comma-separated in query - repeated NumericEnum repeated_enum_value = 28; - - // repeated numeric enum comment (This comment is overridden by the field annotation) - repeated NumericEnum repeated_enum_annotation = 32 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Repeated numeric enum title", description: "Repeated numeric enum description."}]; - - // numeric enum comment (This comment is overridden by the field annotation) - NumericEnum enum_value_annotation = 33 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Numeric enum title", description: "Numeric enum description."}]; - - // repeated string comment (This comment is overridden by the field annotation) - repeated string repeated_string_annotation = 34 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Repeated string title", description: "Repeated string description."}]; - - // repeated nested object comment (This comment is overridden by the field annotation) - repeated Nested repeated_nested_annotation = 35 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Repeated nested object title", description: "Repeated nested object description."}]; - - // nested object comments (This comment is overridden by the field annotation) - Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {title: "Nested object title", description: "Nested object description."}]; - - int64 int64_override_type = 37 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {type: INTEGER}]; - - // mark a field as required in Open API definition - string required_string_via_field_behavior_annotation = 38 [(google.api.field_behavior) = REQUIRED]; - - // mark a field as readonly in Open API definition - string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; - - optional string optional_string_value = 40; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "A bit of everything" + description: "Intentionally complicated message type to cover many features of Protobuf." + required: [ + "uuid", + "int64_value", + "double_value" + ] + extensions: { + key: "x-a-bit-of-everything-foo"; + value { + string_value: "bar"; + } + } + } + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more about ABitOfEverything"; + } + example: "{\"int64_value\": 12, \"double_value\": 12.3}" + }; + + // Nested is nested type. + message Nested { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + example: "{\"ok\": \"TRUE\"}" + }; + // name is nested field. + string name = 1; + uint32 amount = 2; + // DeepEnum is one or zero. + enum DeepEnum { + // FALSE is false. + FALSE = 0; + // TRUE is true. + TRUE = 1; + } + + // DeepEnum comment. + DeepEnum ok = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "DeepEnum description." + }]; + } + Nested single_nested = 25; + + string uuid = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", + min_length: 1, + field_configuration: { + path_param_name: "uuidName" + }, + extensions: { + key: "x-internal"; + value { + bool_value: true + } + } + }]; + repeated Nested nested = 2; + float float_value = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "Float value field", + default: "0.2", + required: [ + "float_value" + ] + }]; + double double_value = 4; + int64 int64_value = 5; + uint64 uint64_value = 6; + int32 int32_value = 7; + fixed64 fixed64_value = 8; + fixed32 fixed32_value = 9; + bool bool_value = 10; + string string_value = 11; + bytes bytes_value = 29; + uint32 uint32_value = 13; + NumericEnum enum_value = 14; + pathenum.PathEnum path_enum_value = 30; + pathenum.MessagePathEnum.NestedPathEnum nested_path_enum_value = 31; + sfixed32 sfixed32_value = 15; + sfixed64 sfixed64_value = 16; + sint32 sint32_value = 17; + sint64 sint64_value = 18; + repeated string repeated_string_value = 19; + oneof oneof_value { + google.protobuf.Empty oneof_empty = 20; + string oneof_string = 21; + } + + map map_value = 22; + map mapped_string_value = 23; + map mapped_nested_value = 24; + + string nonConventionalNameValue = 26; + + google.protobuf.Timestamp timestamp_value = 27; + + // repeated enum value. it is comma-separated in query + repeated NumericEnum repeated_enum_value = 28; + + // repeated numeric enum comment (This comment is overridden by the field annotation) + repeated NumericEnum repeated_enum_annotation = 32 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + title: "Repeated numeric enum title", + description: "Repeated numeric enum description." + }]; + + // numeric enum comment (This comment is overridden by the field annotation) + NumericEnum enum_value_annotation = 33 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + title: "Numeric enum title", + description: "Numeric enum description." + }]; + + // repeated string comment (This comment is overridden by the field annotation) + repeated string repeated_string_annotation = 34 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + title: "Repeated string title", + description: "Repeated string description." + }]; + + // repeated nested object comment (This comment is overridden by the field annotation) + repeated Nested repeated_nested_annotation = 35 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + title: "Repeated nested object title", + description: "Repeated nested object description." + }]; + + // nested object comments (This comment is overridden by the field annotation) + Nested nested_annotation = 36 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + title: "Nested object title", + description: "Nested object description." + }]; + + int64 int64_override_type = 37 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + type: INTEGER + }]; + + // mark a field as required in Open API definition + string required_string_via_field_behavior_annotation = 38 [(google.api.field_behavior) = REQUIRED]; + + // mark a field as readonly in Open API definition + string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; + + optional string optional_string_value = 40; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality message ABitOfEverythingRepeated { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - example: "{\"path_repeated_bool_value\": [true, true, false, true], \"path_repeated_int32_value\": [1, 2, 3]}" - }; - - // repeated values. they are comma-separated in path - repeated float path_repeated_float_value = 1; - repeated double path_repeated_double_value = 2; - repeated int64 path_repeated_int64_value = 3; - repeated uint64 path_repeated_uint64_value = 4; - repeated int32 path_repeated_int32_value = 5; - repeated fixed64 path_repeated_fixed64_value = 6; - repeated fixed32 path_repeated_fixed32_value = 7; - repeated bool path_repeated_bool_value = 8; - repeated string path_repeated_string_value = 9; - repeated bytes path_repeated_bytes_value = 10; - repeated uint32 path_repeated_uint32_value = 11; - repeated NumericEnum path_repeated_enum_value = 12; - repeated sfixed32 path_repeated_sfixed32_value = 13; - repeated sfixed64 path_repeated_sfixed64_value = 14; - repeated sint32 path_repeated_sint32_value = 15; - repeated sint64 path_repeated_sint64_value = 16; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + example: "{\"path_repeated_bool_value\": [true, true, false, true], \"path_repeated_int32_value\": [1, 2, 3]}" + }; + + // repeated values. they are comma-separated in path + repeated float path_repeated_float_value = 1; + repeated double path_repeated_double_value = 2; + repeated int64 path_repeated_int64_value = 3; + repeated uint64 path_repeated_uint64_value = 4; + repeated int32 path_repeated_int32_value = 5; + repeated fixed64 path_repeated_fixed64_value = 6; + repeated fixed32 path_repeated_fixed32_value = 7; + repeated bool path_repeated_bool_value = 8; + repeated string path_repeated_string_value = 9; + repeated bytes path_repeated_bytes_value = 10; + repeated uint32 path_repeated_uint32_value = 11; + repeated NumericEnum path_repeated_enum_value = 12; + repeated sfixed32 path_repeated_sfixed32_value = 13; + repeated sfixed64 path_repeated_sfixed64_value = 14; + repeated sint32 path_repeated_sint32_value = 15; + repeated sint64 path_repeated_sint64_value = 16; } message CheckStatusResponse { - google.rpc.Status status = 1; + google.rpc.Status status = 1; } message Body { - string name = 1; + string name = 1; } message MessageWithBody { - string id = 1; - Body data = 2; + string id = 1; + Body data = 2; } - // NumericEnum is one or zero. enum NumericEnum { - // ZERO means 0 - ZERO = 0; - // ONE means 1 - ONE = 1; + // ZERO means 0 + ZERO = 0; + // ONE means 1 + ONE = 1; } // UpdateV2Request request for update includes the message and the update mask message UpdateV2Request { - ABitOfEverything abe = 1; - // The paths to update. - google.protobuf.FieldMask update_mask = 2; + ABitOfEverything abe = 1; + // The paths to update. + google.protobuf.FieldMask update_mask = 2; } // An example resource type from AIP-123 used to test the behavior described in @@ -399,18 +434,18 @@ message UpdateV2Request { // // See: https://google.aip.dev/123 message Book { - // The resource name of the book. - // - // Format: `publishers/{publisher}/books/{book}` - // - // Example: `publishers/1257894000000000000/books/my-book` - string name = 1; - - // Output only. The book's ID. - string id = 2; - - // Output only. Creation time of the book. - google.protobuf.Timestamp create_time = 3; + // The resource name of the book. + // + // Format: `publishers/{publisher}/books/{book}` + // + // Example: `publishers/1257894000000000000/books/my-book` + string name = 1; + + // Output only. The book's ID. + string id = 2; + + // Output only. Creation time of the book. + google.protobuf.Timestamp create_time = 3; } // A standard Create message from AIP-133 with a user-specified ID. @@ -419,293 +454,290 @@ message Book { // // See: https://google.aip.dev/133#user-specified-ids message CreateBookRequest { - // The publisher in which to create the book. - // - // Format: `publishers/{publisher}` - // - // Example: `publishers/1257894000000000000` - string parent = 1; - - // The book to create. - Book book = 2; - - // The ID to use for the book. - // - // This must start with an alphanumeric character. - string book_id = 3; + // The publisher in which to create the book. + // + // Format: `publishers/{publisher}` + // + // Example: `publishers/1257894000000000000` + string parent = 1; + + // The book to create. + Book book = 2; + + // The ID to use for the book. + // + // This must start with an alphanumeric character. + string book_id = 3; } // A standard Update message from AIP-134 // // See: https://google.aip.dev/134#request-message message UpdateBookRequest { - // The book to update. - // - // The book's `name` field is used to identify the book to be updated. - // Format: publishers/{publisher}/books/{book} - Book book = 1 [(google.api.field_behavior) = REQUIRED]; - - // The list of fields to be updated. - google.protobuf.FieldMask update_mask = 2; - - // If set to true, and the book is not found, a new book will be created. - // In this situation, `update_mask` is ignored. - bool allow_missing = 3; - + // The book to update. + // + // The book's `name` field is used to identify the book to be updated. + // Format: publishers/{publisher}/books/{book} + Book book = 1 [(google.api.field_behavior) = REQUIRED]; + + // The list of fields to be updated. + google.protobuf.FieldMask update_mask = 2; + + // If set to true, and the book is not found, a new book will be created. + // In this situation, `update_mask` is ignored. + bool allow_missing = 3; } // ABitOfEverything service is used to validate that APIs with complicated // proto messages and URL templates are still processed correctly. service ABitOfEverythingService { - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = { - description: "ABitOfEverythingService description -- which should not be used in place of the documentation comment!" - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "Find out more about EchoService"; - } - }; - - // Create a new ABitOfEverything - // - // This API creates a new ABitOfEverything - rpc Create(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" - }; - } - rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything" - body: "*" - }; - } - // Create a book. - rpc CreateBook(CreateBookRequest) returns (Book) { - option (google.api.http) = { - post: "/v1/{parent=publishers/*}/books" - body: "book" - }; - } - rpc UpdateBook(UpdateBookRequest) returns (Book) { - option (google.api.http) = { - patch: "/v1/{book.name=publishers/*/books/*}" - body: "book" - }; - } - rpc Lookup(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (ABitOfEverything) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything/{uuid}" - }; - } - rpc Update(ABitOfEverything) returns (google.protobuf.Empty) { - option (google.api.http) = { - put: "/v1/example/a_bit_of_everything/{uuid}" - body: "*" - }; - } - rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - put: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - additional_bindings: [ - { - patch: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - }, - { - patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" - body: "*" - } - ] - }; - } - - rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/v1/example/a_bit_of_everything/{uuid}" - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - security: { - security_requirement: { - key: "ApiKeyAuth"; - value: {} - } - security_requirement: { - key: "OAuth2"; - value: { - scope: "read"; - scope: "write"; - } - } - } - extensions: { - key: "x-irreversible"; - value { - bool_value: true; - } - } - }; - } - rpc GetQuery(ABitOfEverything) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything/query/{uuid}" - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - deprecated: true // For testing purposes. - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "Find out more about GetQuery"; - } - security: { - } - }; - } - rpc GetRepeatedQuery(ABitOfEverythingRepeated) returns (ABitOfEverythingRepeated) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" - }; - } - // Echo allows posting a StringMessage value. - // - // It also exposes multiple bindings. - // - // This makes it useful when validating that the OpenAPI v2 API - // description exposes documentation correctly on all paths - // defined as additional_bindings in the proto. - rpc Echo(grpc.gateway.examples.internal.proto.sub.StringMessage) returns (grpc.gateway.examples.internal.proto.sub.StringMessage) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything/echo/{value}" - additional_bindings { - post: "/v2/example/echo" - body: "value" - } - additional_bindings { - get: "/v2/example/echo" - } - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - description: "Description Echo"; - summary: "Summary: Echo rpc"; - tags: "echo rpc"; - external_docs: { - url: "https://github.com/grpc-ecosystem/grpc-gateway"; - description: "Find out more Echo"; - } - responses: { - key: "200" - value: { - examples: { - key: "application/json" - value: '{"value": "the input value"}' - } - } - } - responses: { - key: "503"; - value: { - description: "Returned when the resource is temporarily unavailable."; - extensions: { - key: "x-number"; - value { - number_value: 100; - } - } - } - } - responses: { - // Overwrites global definition. - key: "404"; - value: { - description: "Returned when the resource does not exist."; - schema: { - json_schema: { - type: INTEGER; - } - } - } - } - }; - } - rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - post: "/v1/example/deep_path/{single_nested.name}" - body: "*" - }; - } - rpc NoBindings(google.protobuf.Duration) returns (google.protobuf.Empty) {} - rpc Timeout(google.protobuf.Empty) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v2/example/timeout", - }; - } - rpc ErrorWithDetails(google.protobuf.Empty) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v2/example/errorwithdetails", - }; - } - rpc GetMessageWithBody(MessageWithBody) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/v2/example/withbody/{id}", - body: "data" - }; - } - rpc PostWithEmptyBody(Body) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/v2/example/postwithemptybody/{name}", - body: "*" - }; - } - rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" - }; - } - rpc CheckNestedEnumGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" - }; - } - rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/params/post/{string_value}" - body: "single_nested" - }; - } - rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) { - option (google.api.http) = { - get: "/v2/example/overwriteresponsecontenttype" - }; - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - produces: "application/text" - }; - } - rpc CheckExternalPathEnum(pathenum.MessageWithPathEnum) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v2/{value}:check" - }; - } - rpc CheckExternalNestedPathEnum(pathenum.MessageWithNestedPathEnum) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v3/{value}:check" - }; - } - - rpc CheckStatus(google.protobuf.Empty) returns (CheckStatusResponse) { - option (google.api.http) = { - get: "/v1/example/checkStatus" - }; - } + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = { + description: "ABitOfEverythingService description -- which should not be used in place of the documentation comment!" + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more about EchoService"; + } + }; + + // Create a new ABitOfEverything + // + // This API creates a new ABitOfEverything + rpc Create(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" + }; + } + rpc CreateBody(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything" + body: "*" + }; + } + // Create a book. + rpc CreateBook(CreateBookRequest) returns (Book) { + option (google.api.http) = { + post: "/v1/{parent=publishers/*}/books" + body: "book" + }; + } + rpc UpdateBook(UpdateBookRequest) returns (Book) { + option (google.api.http) = { + patch: "/v1/{book.name=publishers/*/books/*}" + body: "book" + }; + } + rpc Lookup(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/{uuid}" + }; + } + rpc Update(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v1/example/a_bit_of_everything/{uuid}" + body: "*" + }; + } + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + additional_bindings: [ + { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + }, + { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + } + ] + }; + } + + rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/v1/example/a_bit_of_everything/{uuid}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + security: { + security_requirement: { + key: "ApiKeyAuth"; + value: {} + } + security_requirement: { + key: "OAuth2"; + value: { + scope: "read"; + scope: "write"; + } + } + } + extensions: { + key: "x-irreversible"; + value { + bool_value: true; + } + } + }; + } + rpc GetQuery(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/query/{uuid}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + deprecated: true // For testing purposes. + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more about GetQuery"; + } + security: {} + }; + } + rpc GetRepeatedQuery(ABitOfEverythingRepeated) returns (ABitOfEverythingRepeated) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" + }; + } + // Echo allows posting a StringMessage value. + // + // It also exposes multiple bindings. + // + // This makes it useful when validating that the OpenAPI v2 API + // description exposes documentation correctly on all paths + // defined as additional_bindings in the proto. + rpc Echo(grpc.gateway.examples.internal.proto.sub.StringMessage) returns (grpc.gateway.examples.internal.proto.sub.StringMessage) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/echo/{value}" + additional_bindings { + post: "/v2/example/echo" + body: "value" + } + additional_bindings { + get: "/v2/example/echo" + } + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + description: "Description Echo"; + summary: "Summary: Echo rpc"; + tags: "echo rpc"; + external_docs: { + url: "https://github.com/grpc-ecosystem/grpc-gateway"; + description: "Find out more Echo"; + } + responses: { + key: "200" + value: { + examples: { + key: "application/json" + value: "{\"value\": \"the input value\"}" + } + } + } + responses: { + key: "503"; + value: { + description: "Returned when the resource is temporarily unavailable."; + extensions: { + key: "x-number"; + value { + number_value: 100; + } + } + } + } + responses: { + // Overwrites global definition. + key: "404"; + value: { + description: "Returned when the resource does not exist."; + schema: { + json_schema: { + type: INTEGER; + } + } + } + } + }; + } + rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/deep_path/{single_nested.name}" + body: "*" + }; + } + rpc NoBindings(google.protobuf.Duration) returns (google.protobuf.Empty) {} + rpc Timeout(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v2/example/timeout", + }; + } + rpc ErrorWithDetails(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v2/example/errorwithdetails", + }; + } + rpc GetMessageWithBody(MessageWithBody) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v2/example/withbody/{id}", + body: "data" + }; + } + rpc PostWithEmptyBody(Body) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v2/example/postwithemptybody/{name}", + body: "*" + }; + } + rpc CheckGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" + }; + } + rpc CheckNestedEnumGetQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" + }; + } + rpc CheckPostQueryParams(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/params/post/{string_value}" + body: "single_nested" + }; + } + rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) { + option (google.api.http) = { + get: "/v2/example/overwriteresponsecontenttype" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + produces: "application/text" + }; + } + rpc CheckExternalPathEnum(pathenum.MessageWithPathEnum) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v2/{value}:check" + }; + } + rpc CheckExternalNestedPathEnum(pathenum.MessageWithNestedPathEnum) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v3/{value}:check" + }; + } + + rpc CheckStatus(google.protobuf.Empty) returns (CheckStatusResponse) { + option (google.api.http) = { + get: "/v1/example/checkStatus" + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) service camelCaseServiceName { - rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) { - option (google.api.http) = { - get: "/v2/example/empty", - }; - } + rpc Empty(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + get: "/v2/example/empty", + }; + } } service AnotherServiceWithNoBindings { - rpc NoBindings(google.protobuf.Empty) returns (google.protobuf.Empty) {} + rpc NoBindings(google.protobuf.Empty) returns (google.protobuf.Empty) {} } diff --git a/examples/internal/proto/examplepb/echo_service.proto b/examples/internal/proto/examplepb/echo_service.proto index 88ae6d8bbc3..679f8f241c9 100644 --- a/examples/internal/proto/examplepb/echo_service.proto +++ b/examples/internal/proto/examplepb/echo_service.proto @@ -1,5 +1,4 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; // Echo Service // @@ -11,91 +10,93 @@ import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/struct.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // Embedded represents a message embedded in SimpleMessage. message Embedded { - oneof mark { - int64 progress = 1; - string note = 2; - } + oneof mark { + int64 progress = 1; + string note = 2; + } } // SimpleMessage represents a simple message sent to the Echo service. message SimpleMessage { - // Id represents the message identifier. - string id = 1; - int64 num = 2; - oneof code { - int64 line_num = 3; - string lang = 4; - } - Embedded status = 5; - oneof ext { - int64 en = 6; - Embedded no = 7; - } + // Id represents the message identifier. + string id = 1; + int64 num = 2; + oneof code { + int64 line_num = 3; + string lang = 4; + } + Embedded status = 5; + oneof ext { + int64 en = 6; + Embedded no = 7; + } } // DynamicMessage represents a message which can have its structure // built dynamically using Struct and Values. message DynamicMessage { - google.protobuf.Struct struct_field = 1; - google.protobuf.Value value_field = 2; + google.protobuf.Struct struct_field = 1; + google.protobuf.Value value_field = 2; } message DynamicMessageUpdate { - DynamicMessage body = 1; - google.protobuf.FieldMask update_mask = 2; + DynamicMessage body = 1; + google.protobuf.FieldMask update_mask = 2; } // Echo service responds to incoming echo requests. service EchoService { - // Echo method receives a simple message and returns it. - // - // The message posted as the id parameter will also be - // returned. - rpc Echo(SimpleMessage) returns (SimpleMessage) { - option (google.api.http) = { - post: "/v1/example/echo/{id}" - additional_bindings { - get: "/v1/example/echo/{id}/{num}" - } - additional_bindings { - get: "/v1/example/echo/{id}/{num}/{lang}" - } - additional_bindings { - get: "/v1/example/echo1/{id}/{line_num}/{status.note}" - } - additional_bindings { - get: "/v1/example/echo2/{no.note}" - } - }; - } - // EchoBody method receives a simple message and returns it. - rpc EchoBody(SimpleMessage) returns (SimpleMessage) { - option (google.api.http) = { - post: "/v1/example/echo_body" - body: "*" - }; - } - // EchoDelete method receives a simple message and returns it. - rpc EchoDelete(SimpleMessage) returns (SimpleMessage) { - option (google.api.http) = { - delete: "/v1/example/echo_delete" - }; - } - // EchoPatch method receives a NonStandardUpdateRequest and returns it. - rpc EchoPatch(DynamicMessageUpdate) returns (DynamicMessageUpdate) { - option (google.api.http) = { - patch: "/v1/example/echo_patch" - body: "body" - }; - } - // EchoUnauthorized method receives a simple message and returns it. It must - // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code - // of 401. - rpc EchoUnauthorized(SimpleMessage) returns (SimpleMessage) { - option (google.api.http) = { - get: "/v1/example/echo_unauthorized" - }; - } + // Echo method receives a simple message and returns it. + // + // The message posted as the id parameter will also be + // returned. + rpc Echo(SimpleMessage) returns (SimpleMessage) { + option (google.api.http) = { + post: "/v1/example/echo/{id}" + additional_bindings { + get: "/v1/example/echo/{id}/{num}" + } + additional_bindings { + get: "/v1/example/echo/{id}/{num}/{lang}" + } + additional_bindings { + get: "/v1/example/echo1/{id}/{line_num}/{status.note}" + } + additional_bindings { + get: "/v1/example/echo2/{no.note}" + } + }; + } + // EchoBody method receives a simple message and returns it. + rpc EchoBody(SimpleMessage) returns (SimpleMessage) { + option (google.api.http) = { + post: "/v1/example/echo_body" + body: "*" + }; + } + // EchoDelete method receives a simple message and returns it. + rpc EchoDelete(SimpleMessage) returns (SimpleMessage) { + option (google.api.http) = { + delete: "/v1/example/echo_delete" + }; + } + // EchoPatch method receives a NonStandardUpdateRequest and returns it. + rpc EchoPatch(DynamicMessageUpdate) returns (DynamicMessageUpdate) { + option (google.api.http) = { + patch: "/v1/example/echo_patch" + body: "body" + }; + } + // EchoUnauthorized method receives a simple message and returns it. It must + // always return a google.rpc.Code of `UNAUTHENTICATED` and a HTTP Status code + // of 401. + rpc EchoUnauthorized(SimpleMessage) returns (SimpleMessage) { + option (google.api.http) = { + get: "/v1/example/echo_unauthorized" + }; + } } diff --git a/examples/internal/proto/examplepb/flow_combination.proto b/examples/internal/proto/examplepb/flow_combination.proto index bb5fc0a2287..59a351d331f 100644 --- a/examples/internal/proto/examplepb/flow_combination.proto +++ b/examples/internal/proto/examplepb/flow_combination.proto @@ -1,168 +1,170 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + message EmptyProto {} message NonEmptyProto { - string a = 1; - string b = 2; - string c = 3; + string a = 1; + string b = 2; + string c = 3; } message UnaryProto { - string str = 1; + string str = 1; } message NestedProto { - UnaryProto a = 1; - string b = 2; - string c = 3; + UnaryProto a = 1; + string b = 2; + string c = 3; } message SingleNestedProto { - UnaryProto a = 1; + UnaryProto a = 1; } service FlowCombination { - rpc RpcEmptyRpc(EmptyProto) returns (EmptyProto) { - option (google.api.http) = { - post: "/rpc/empty/rpc" - }; - } - rpc RpcEmptyStream(EmptyProto) returns (stream EmptyProto) { - option (google.api.http) = { - post: "/rpc/empty/stream" - }; - } - rpc StreamEmptyRpc(stream EmptyProto) returns (EmptyProto) { - option (google.api.http) = { - post: "/stream/empty/rpc" - }; - } - rpc StreamEmptyStream(stream EmptyProto) returns (stream EmptyProto) { - option (google.api.http) = { - post: "/stream/empty/stream" - }; - } + rpc RpcEmptyRpc(EmptyProto) returns (EmptyProto) { + option (google.api.http) = { + post: "/rpc/empty/rpc" + }; + } + rpc RpcEmptyStream(EmptyProto) returns (stream EmptyProto) { + option (google.api.http) = { + post: "/rpc/empty/stream" + }; + } + rpc StreamEmptyRpc(stream EmptyProto) returns (EmptyProto) { + option (google.api.http) = { + post: "/stream/empty/rpc" + }; + } + rpc StreamEmptyStream(stream EmptyProto) returns (stream EmptyProto) { + option (google.api.http) = { + post: "/stream/empty/stream" + }; + } - rpc RpcBodyRpc(NonEmptyProto) returns (EmptyProto) { - option (google.api.http) = { - // w/ body; w/o path; w/o query - post: "/rpc/body/rpc" - body: "*" + rpc RpcBodyRpc(NonEmptyProto) returns (EmptyProto) { + option (google.api.http) = { + // w/ body; w/o path; w/o query + post: "/rpc/body/rpc" + body: "*" - // w/o body; w/ path; w/o query - additional_bindings { - post: "/rpc/path/{a}/{b}/{c}/rpc" - } - // w/o body; w/o path; w/ query - additional_bindings { - post: "/rpc/query/rpc" - } - // w/ body; w/ path; w/o query - additional_bindings { - post: "/rpc/body/path/{a}/{b}/rpc" - body: "c" - } - // w/ body; w/o path; w/ query - additional_bindings { - post: "/rpc/body/query/rpc" - body: "c" - } - // w/ body; w/ path; w/ query - additional_bindings { - post: "/rpc/body/path/{a}/query/rpc" - body: "c" - } - // w/o body; w/ path; w/ query - additional_bindings { - post: "/rpc/path/{a}/query/rpc" - } - }; - } - rpc RpcPathSingleNestedRpc(SingleNestedProto) returns (EmptyProto) { - option (google.api.http) = { - // w/o body; w/ path (IsNestedProto3); w/o query - post: "/rpc/path-nested/{a.str}/rpc" - }; - } - rpc RpcPathNestedRpc(NestedProto) returns (EmptyProto) { - option (google.api.http) = { - // w/ body; w/ path (IsNestedProto3); w/o query - post: "/rpc/path-nested/{a.str}/{b}/rpc" - body: "c" + // w/o body; w/ path; w/o query + additional_bindings { + post: "/rpc/path/{a}/{b}/{c}/rpc" + } + // w/o body; w/o path; w/ query + additional_bindings { + post: "/rpc/query/rpc" + } + // w/ body; w/ path; w/o query + additional_bindings { + post: "/rpc/body/path/{a}/{b}/rpc" + body: "c" + } + // w/ body; w/o path; w/ query + additional_bindings { + post: "/rpc/body/query/rpc" + body: "c" + } + // w/ body; w/ path; w/ query + additional_bindings { + post: "/rpc/body/path/{a}/query/rpc" + body: "c" + } + // w/o body; w/ path; w/ query + additional_bindings { + post: "/rpc/path/{a}/query/rpc" + } + }; + } + rpc RpcPathSingleNestedRpc(SingleNestedProto) returns (EmptyProto) { + option (google.api.http) = { + // w/o body; w/ path (IsNestedProto3); w/o query + post: "/rpc/path-nested/{a.str}/rpc" + }; + } + rpc RpcPathNestedRpc(NestedProto) returns (EmptyProto) { + option (google.api.http) = { + // w/ body; w/ path (IsNestedProto3); w/o query + post: "/rpc/path-nested/{a.str}/{b}/rpc" + body: "c" - // w/o body; w/ path (IsNestedProto3); w/ query - additional_bindings { - post: "/rpc/path-nested1/{a.str}/rpc" - } - // w/ body; w/ path (IsNestedProto3); w/ query - additional_bindings { - post: "/rpc/path-nested2/{a.str}/rpc" - body: "c" - } - }; - } + // w/o body; w/ path (IsNestedProto3); w/ query + additional_bindings { + post: "/rpc/path-nested1/{a.str}/rpc" + } + // w/ body; w/ path (IsNestedProto3); w/ query + additional_bindings { + post: "/rpc/path-nested2/{a.str}/rpc" + body: "c" + } + }; + } - rpc RpcBodyStream(NonEmptyProto) returns (stream EmptyProto) { - option (google.api.http) = { - // w/ body; w/o path; w/o query - post: "/rpc/body/stream" - body: "*" + rpc RpcBodyStream(NonEmptyProto) returns (stream EmptyProto) { + option (google.api.http) = { + // w/ body; w/o path; w/o query + post: "/rpc/body/stream" + body: "*" - // w/o body; w/ path; w/o query - additional_bindings { - post: "/rpc/path/{a}/{b}/{c}/stream" - } - // w/o body; w/o path; w/ query - additional_bindings { - post: "/rpc/query/stream" - } - // w/ body; w/ path; w/o query - additional_bindings { - post: "/rpc/body/path/{a}/{b}/stream" - body: "c" - } - // w/ body; w/o path; w/ query - additional_bindings { - post: "/rpc/body/query/stream" - body: "c" - } - // w/ body; w/ path; w/ query - additional_bindings { - post: "/rpc/body/path/{a}/query/stream" - body: "c" - } - // w/o body; w/ path; w/ query - additional_bindings { - post: "/rpc/path/{a}/query/stream" - } - }; - } - rpc RpcPathSingleNestedStream(SingleNestedProto) returns (stream EmptyProto) { - option (google.api.http) = { - // w/o body; w/ path (IsNestedProto3); w/o query - post: "/rpc/path-nested/{a.str}/stream" - }; - } - rpc RpcPathNestedStream(NestedProto) returns (stream EmptyProto) { - option (google.api.http) = { - // w/ body; w/ path (IsNestedProto3); w/o query - post: "/rpc/path-nested/{a.str}/{b}/stream" - body: "c" + // w/o body; w/ path; w/o query + additional_bindings { + post: "/rpc/path/{a}/{b}/{c}/stream" + } + // w/o body; w/o path; w/ query + additional_bindings { + post: "/rpc/query/stream" + } + // w/ body; w/ path; w/o query + additional_bindings { + post: "/rpc/body/path/{a}/{b}/stream" + body: "c" + } + // w/ body; w/o path; w/ query + additional_bindings { + post: "/rpc/body/query/stream" + body: "c" + } + // w/ body; w/ path; w/ query + additional_bindings { + post: "/rpc/body/path/{a}/query/stream" + body: "c" + } + // w/o body; w/ path; w/ query + additional_bindings { + post: "/rpc/path/{a}/query/stream" + } + }; + } + rpc RpcPathSingleNestedStream(SingleNestedProto) returns (stream EmptyProto) { + option (google.api.http) = { + // w/o body; w/ path (IsNestedProto3); w/o query + post: "/rpc/path-nested/{a.str}/stream" + }; + } + rpc RpcPathNestedStream(NestedProto) returns (stream EmptyProto) { + option (google.api.http) = { + // w/ body; w/ path (IsNestedProto3); w/o query + post: "/rpc/path-nested/{a.str}/{b}/stream" + body: "c" - // w/o body; w/ path (IsNestedProto3); w/ query - additional_bindings { - post: "/rpc/path-nested1/{a.str}/stream" - } - // w/ body; w/ path (IsNestedProto3); w/ query - additional_bindings { - post: "/rpc/path-nested2/{a.str}/stream" - body: "c" - } - }; - } + // w/o body; w/ path (IsNestedProto3); w/ query + additional_bindings { + post: "/rpc/path-nested1/{a.str}/stream" + } + // w/ body; w/ path (IsNestedProto3); w/ query + additional_bindings { + post: "/rpc/path-nested2/{a.str}/stream" + body: "c" + } + }; + } } diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.proto b/examples/internal/proto/examplepb/generate_unbound_methods.proto index 1c67993a2dc..51bb21f3962 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.proto +++ b/examples/internal/proto/examplepb/generate_unbound_methods.proto @@ -1,5 +1,4 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; // Generate Unannotated Methods Echo Service // Similar to echo_service.proto but without annotations and without external configuration. @@ -11,25 +10,27 @@ package grpc.gateway.examples.internal.proto.examplepb; // Do not need annotations.proto, can still use well known types as usual import "google/protobuf/duration.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. message GenerateUnboundMethodsSimpleMessage { - // Id represents the message identifier. - string id = 1; - int64 num = 2; - google.protobuf.Duration duration = 3; + // Id represents the message identifier. + string id = 1; + int64 num = 2; + google.protobuf.Duration duration = 3; } // GenerateUnboundMethodsEchoService service responds to incoming echo requests. service GenerateUnboundMethodsEchoService { - // Echo method receives a simple message and returns it. - // - // The message posted as the id parameter will also be - // returned. - rpc Echo(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); + // Echo method receives a simple message and returns it. + // + // The message posted as the id parameter will also be + // returned. + rpc Echo(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); + + // EchoBody method receives a simple message and returns it. + rpc EchoBody(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); - // EchoBody method receives a simple message and returns it. - rpc EchoBody(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); - - // EchoDelete method receives a simple message and returns it. - rpc EchoDelete(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); + // EchoDelete method receives a simple message and returns it. + rpc EchoDelete(GenerateUnboundMethodsSimpleMessage) returns (GenerateUnboundMethodsSimpleMessage); } diff --git a/examples/internal/proto/examplepb/generated_input.proto b/examples/internal/proto/examplepb/generated_input.proto index bd4ab5fb247..2bda2e7b1bf 100644 --- a/examples/internal/proto/examplepb/generated_input.proto +++ b/examples/internal/proto/examplepb/generated_input.proto @@ -1,20 +1,21 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; +import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; -import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; // This file is run through a genrule. // Defines some more operations to be added to ABitOfEverythingService service GeneratedService { - rpc Create(ABitOfEverything) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/generated_create" - body: "*" - }; - } - + rpc Create(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/generated_create" + body: "*" + }; + } } diff --git a/examples/internal/proto/examplepb/non_standard_names.proto b/examples/internal/proto/examplepb/non_standard_names.proto index 1a1a76d1378..3b40cf9f49e 100644 --- a/examples/internal/proto/examplepb/non_standard_names.proto +++ b/examples/internal/proto/examplepb/non_standard_names.proto @@ -1,75 +1,77 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // NonStandardMessage has oddly named fields. message NonStandardMessage { - // Id represents the message identifier. - string id = 1; - int64 Num = 2; - int64 line_num = 3; - string langIdent = 4; - string STATUS = 5; - int64 en_GB = 6; - string no = 7; + // Id represents the message identifier. + string id = 1; + int64 Num = 2; + int64 line_num = 3; + string langIdent = 4; + string STATUS = 5; + int64 en_GB = 6; + string no = 7; - message Thing { - message SubThing { - string sub_value = 1; - } - SubThing subThing = 1; + message Thing { + message SubThing { + string sub_value = 1; } - Thing thing = 8; + SubThing subThing = 1; + } + Thing thing = 8; } message NonStandardUpdateRequest { - NonStandardMessage body = 1; - google.protobuf.FieldMask update_mask = 2; + NonStandardMessage body = 1; + google.protobuf.FieldMask update_mask = 2; } // NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. message NonStandardMessageWithJSONNames { - // Id represents the message identifier. - string id = 1 [json_name="ID"]; - int64 Num = 2 [json_name="Num"]; - int64 line_num = 3 [json_name="LineNum"]; - string langIdent = 4 [json_name="langIdent"]; - string STATUS = 5 [json_name="status"]; - int64 en_GB = 6 [json_name="En_GB"]; - string no = 7 [json_name="yes"]; + // Id represents the message identifier. + string id = 1 [json_name = "ID"]; + int64 Num = 2 [json_name = "Num"]; + int64 line_num = 3 [json_name = "LineNum"]; + string langIdent = 4 [json_name = "langIdent"]; + string STATUS = 5 [json_name = "status"]; + int64 en_GB = 6 [json_name = "En_GB"]; + string no = 7 [json_name = "yes"]; - message Thing { - message SubThing { - string sub_value = 1 [json_name="sub_Value"]; - } - SubThing subThing = 1 [json_name="SubThing"]; + message Thing { + message SubThing { + string sub_value = 1 [json_name = "sub_Value"]; } - Thing thing = 8 [json_name="Thingy"]; + SubThing subThing = 1 [json_name = "SubThing"]; + } + Thing thing = 8 [json_name = "Thingy"]; } message NonStandardWithJSONNamesUpdateRequest { - NonStandardMessageWithJSONNames body = 1; - google.protobuf.FieldMask update_mask = 2; + NonStandardMessageWithJSONNames body = 1; + google.protobuf.FieldMask update_mask = 2; } // NonStandardService responds to incoming messages, applies a field mask and returns the masked response. service NonStandardService { - // Apply field mask to empty NonStandardMessage and return result. - rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { - option (google.api.http) = { - patch: "/v1/example/non_standard/update" - body: "body" - }; - } + // Apply field mask to empty NonStandardMessage and return result. + rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update" + body: "body" + }; + } - // Apply field mask to empty NonStandardMessageWithJSONNames and return result. - rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { - option (google.api.http) = { - patch: "/v1/example/non_standard/update_with_json_names" - body: "body" - }; - } + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update_with_json_names" + body: "body" + }; + } } diff --git a/examples/internal/proto/examplepb/openapi_merge_a.proto b/examples/internal/proto/examplepb/openapi_merge_a.proto index 007ecd70031..de4f7c52802 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.proto +++ b/examples/internal/proto/examplepb/openapi_merge_a.proto @@ -1,7 +1,5 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; - // Merging Services // // This is an example of merging two proto files. @@ -9,6 +7,8 @@ package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // InMessageA represents a message to ServiceA and ServiceC. message InMessageA { // Here is the explanation about InMessageA.values diff --git a/examples/internal/proto/examplepb/openapi_merge_b.proto b/examples/internal/proto/examplepb/openapi_merge_b.proto index 0be7b3e62d9..8390a23f4f9 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.proto +++ b/examples/internal/proto/examplepb/openapi_merge_b.proto @@ -1,7 +1,5 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; - // Merging Services // // This is an example of merging two proto files. @@ -9,36 +7,38 @@ package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // InMessageB represents a message to ServiceB. message InMessageB { - // Here is the explanation about InMessageB.values - string value = 1; + // Here is the explanation about InMessageB.values + string value = 1; } // OutMessageB represents a message returned from ServiceB. message OutMessageB { - // Here is the explanation about OutMessageB.value - repeated string values = 1; + // Here is the explanation about OutMessageB.value + repeated string values = 1; } // ServiceB service responds to incoming merge requests. service ServiceB { - // ServiceB.MethodOne receives InMessageB and returns OutMessageB - // - // Here is the detail explanation about ServiceB.MethodOne. - rpc MethodOne(InMessageB) returns (OutMessageB) { - option (google.api.http) = { + // ServiceB.MethodOne receives InMessageB and returns OutMessageB + // + // Here is the detail explanation about ServiceB.MethodOne. + rpc MethodOne(InMessageB) returns (OutMessageB) { + option (google.api.http) = { post: "/v1/example/b/1" body: "*" - }; - } - // ServiceB.MethodTwo receives OutMessageB and returns InMessageB - // - // Here is the detail explanation about ServiceB.MethodTwo. - rpc MethodTwo(OutMessageB) returns (InMessageB) { - option (google.api.http) = { + }; + } + // ServiceB.MethodTwo receives OutMessageB and returns InMessageB + // + // Here is the detail explanation about ServiceB.MethodTwo. + rpc MethodTwo(OutMessageB) returns (InMessageB) { + option (google.api.http) = { post: "/v1/example/b/2" body: "*" - }; - } + }; + } } diff --git a/examples/internal/proto/examplepb/response_body_service.proto b/examples/internal/proto/examplepb/response_body_service.proto index 9153b27f62b..31480f8341d 100644 --- a/examples/internal/proto/examplepb/response_body_service.proto +++ b/examples/internal/proto/examplepb/response_body_service.proto @@ -1,65 +1,66 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + message ResponseBodyIn { - string data = 1; + string data = 1; } message ResponseBodyOut { - message Response { - string data = 1; - } - Response response = 2; + message Response { + string data = 1; + } + Response response = 2; } message RepeatedResponseBodyOut { - message Response { - string data = 1; - enum ResponseType { - // UNKNOWN - UNKNOWN = 0; - // A is 1 - A = 1; - // B is 2 - B = 2; - } - ResponseType type = 3; - } - repeated Response response = 2; + message Response { + string data = 1; + enum ResponseType { + // UNKNOWN + UNKNOWN = 0; + // A is 1 + A = 1; + // B is 2 + B = 2; + } + ResponseType type = 3; + } + repeated Response response = 2; } message RepeatedResponseStrings { - repeated string values = 1; + repeated string values = 1; } service ResponseBodyService { - rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { - option (google.api.http) = { - get : "/responsebody/{data}" - response_body : "response" - }; - } - rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) { - option (google.api.http) = { - get : "/responsebodies/{data}" - response_body : "response" - }; - } - rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) { - option (google.api.http) = { - get : "/responsestrings/{data}" - response_body : "values" - }; - } + rpc GetResponseBody(ResponseBodyIn) returns (ResponseBodyOut) { + option (google.api.http) = { + get: "/responsebody/{data}" + response_body: "response" + }; + } + rpc ListResponseBodies(ResponseBodyIn) returns (RepeatedResponseBodyOut) { + option (google.api.http) = { + get: "/responsebodies/{data}" + response_body: "response" + }; + } + rpc ListResponseStrings(ResponseBodyIn) returns (RepeatedResponseStrings) { + option (google.api.http) = { + get: "/responsestrings/{data}" + response_body: "values" + }; + } - rpc GetResponseBodyStream(ResponseBodyIn) returns (stream ResponseBodyOut) { - option (google.api.http) = { - get : "/responsebody/stream/{data}" - response_body : "response" - }; - } + rpc GetResponseBodyStream(ResponseBodyIn) returns (stream ResponseBodyOut) { + option (google.api.http) = { + get: "/responsebody/stream/{data}" + response_body: "response" + }; + } } diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 6d1c2ef1750..ff9c0d54747 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -32,18 +32,18 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, - 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, - 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc7, + 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc7, 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, diff --git a/examples/internal/proto/examplepb/stream.proto b/examples/internal/proto/examplepb/stream.proto index beeae591eee..72f03a12803 100644 --- a/examples/internal/proto/examplepb/stream.proto +++ b/examples/internal/proto/examplepb/stream.proto @@ -1,36 +1,38 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; +import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; +import "examples/internal/proto/sub/message.proto"; import "google/api/annotations.proto"; import "google/api/httpbody.proto"; import "google/protobuf/empty.proto"; -import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; -import "examples/internal/proto/sub/message.proto"; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; // Defines some more operations to be added to ABitOfEverythingService service StreamService { - rpc BulkCreate(stream ABitOfEverything) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/bulk" - body: "*" - }; - } - rpc List(google.protobuf.Empty) returns (stream ABitOfEverything) { - option (google.api.http) = { - get: "/v1/example/a_bit_of_everything" - }; - } - rpc BulkEcho(stream grpc.gateway.examples.internal.proto.sub.StringMessage) returns (stream grpc.gateway.examples.internal.proto.sub.StringMessage) { - option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/echo" - body: "*" - }; - } + rpc BulkCreate(stream ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/bulk" + body: "*" + }; + } + rpc List(google.protobuf.Empty) returns (stream ABitOfEverything) { + option (google.api.http) = { + get: "/v1/example/a_bit_of_everything" + }; + } + rpc BulkEcho(stream grpc.gateway.examples.internal.proto.sub.StringMessage) returns (stream grpc.gateway.examples.internal.proto.sub.StringMessage) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/echo" + body: "*" + }; + } - rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) { - option (google.api.http) = { - get : "/v1/example/download" - }; - } + rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) { + option (google.api.http) = { + get: "/v1/example/download" + }; + } } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.proto b/examples/internal/proto/examplepb/unannotated_echo_service.proto index cbe0f375257..fc8fbadb97d 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.proto +++ b/examples/internal/proto/examplepb/unannotated_echo_service.proto @@ -1,5 +1,4 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; // Unannotated Echo Service // Similar to echo_service.proto but without annotations. See @@ -13,42 +12,44 @@ package grpc.gateway.examples.internal.proto.examplepb; // Do not need annotations.proto, can still use well known types as usual import "google/protobuf/duration.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; + // Embedded represents a message embedded in SimpleMessage. message UnannotatedEmbedded { - oneof mark { - int64 progress = 1; - string note = 2; - } + oneof mark { + int64 progress = 1; + string note = 2; + } } // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. message UnannotatedSimpleMessage { - // Id represents the message identifier. - string id = 1; - int64 num = 2; - google.protobuf.Duration duration = 3; - oneof code { - int64 line_num = 4; - string lang = 5; - } - UnannotatedEmbedded status = 6; - oneof ext { - int64 en = 7; - UnannotatedEmbedded no = 8; - } + // Id represents the message identifier. + string id = 1; + int64 num = 2; + google.protobuf.Duration duration = 3; + oneof code { + int64 line_num = 4; + string lang = 5; + } + UnannotatedEmbedded status = 6; + oneof ext { + int64 en = 7; + UnannotatedEmbedded no = 8; + } } // Echo service responds to incoming echo requests. service UnannotatedEchoService { - // Echo method receives a simple message and returns it. - // - // The message posted as the id parameter will also be - // returned. - rpc Echo(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); - - // EchoBody method receives a simple message and returns it. - rpc EchoBody(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); - - // EchoDelete method receives a simple message and returns it. - rpc EchoDelete(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); + // Echo method receives a simple message and returns it. + // + // The message posted as the id parameter will also be + // returned. + rpc Echo(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); + + // EchoBody method receives a simple message and returns it. + rpc EchoBody(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); + + // EchoDelete method receives a simple message and returns it. + rpc EchoDelete(UnannotatedSimpleMessage) returns (UnannotatedSimpleMessage); } diff --git a/examples/internal/proto/examplepb/use_go_template.proto b/examples/internal/proto/examplepb/use_go_template.proto index dc11abe1342..250e8c1ab32 100644 --- a/examples/internal/proto/examplepb/use_go_template.proto +++ b/examples/internal/proto/examplepb/use_go_template.proto @@ -1,85 +1,87 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + service LoginService { - // Login - // - // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. - // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". - // - // ## {{.RequestType.Name}} - // | Field ID | Name | Type | Description | - // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} - // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} - // - // ## {{.ResponseType.Name}} - // | Field ID | Name | Type | Description | - // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} - // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} - rpc Login (LoginRequest) returns (LoginReply) { - option (google.api.http) = { - post: "/v1/example/login" - body: "*" - }; - } + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + rpc Login(LoginRequest) returns (LoginReply) { + option (google.api.http) = { + post: "/v1/example/login" + body: "*" + }; + } - // Logout - // - // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. - // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". - // - // ## {{.RequestType.Name}} - // | Field ID | Name | Type | Description | - // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} - // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} - // - // ## {{.ResponseType.Name}} - // | Field ID | Name | Type | Description | - // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} - // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} - rpc Logout (LogoutRequest) returns (LogoutReply) { - option (google.api.http) = { - post: "/v1/example/logout" - body: "*" - }; - } + // Logout + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + rpc Logout(LogoutRequest) returns (LogoutReply) { + option (google.api.http) = { + post: "/v1/example/logout" + body: "*" + }; + } } message LoginRequest { - // The entered username - string username = 1; - // The entered password - string password = 2; + // The entered username + string username = 1; + // The entered password + string password = 2; } message LoginReply { - string message = 1; - // Whether you have access or not - bool access = 2; + string message = 1; + // Whether you have access or not + bool access = 2; } message LogoutRequest { - // The time the logout was registered - string timeoflogout = 1; - // This is the title - // - // This is the "Description" of field test - // you can use as many newlines as you want - // - // - // it will still format the same in the table - int32 test = 2; - // This is an array - // - // It displays that using [] infront of the type - repeated string stringarray = 3; + // The time the logout was registered + string timeoflogout = 1; + // This is the title + // + // This is the "Description" of field test + // you can use as many newlines as you want + // + // + // it will still format the same in the table + int32 test = 2; + // This is an array + // + // It displays that using [] infront of the type + repeated string stringarray = 3; } message LogoutReply { - // Message that tells you whether your - // logout was succesful or not - string message = 1; + // Message that tells you whether your + // logout was succesful or not + string message = 1; } diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 90881b9ffc5..d34b85eb0cc 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -19,7 +19,7 @@ "/v1/example/login": { "post": { "summary": "Login", - "description": "Login is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LoginRequest\" and returns a \"LoginReply\".\n\n## LoginRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | username | TYPE_STRING | The entered username | \n| 2 | password | TYPE_STRING | The entered password | \n\n## LoginReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | | \n| 2 | access | TYPE_BOOL | Whether you have access or not |", + "description": "Login is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LoginRequest\" and returns a \"LoginReply\".\n\n## LoginRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | username | TYPE_STRING | The entered username | \n| 2 | password | TYPE_STRING | The entered password | \n\n## LoginReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | | \n| 2 | access | TYPE_BOOL | Whether you have access or not |", "operationId": "LoginService_Login", "responses": { "200": { @@ -53,7 +53,7 @@ "/v1/example/logout": { "post": { "summary": "Logout", - "description": "Logout is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LogoutRequest\" and returns a \"LogoutReply\".\n\n## LogoutRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | timeoflogout | TYPE_STRING | The time the logout was registered | \n| 2 | test | TYPE_INT32 | This is the title\u003cbr\u003e\u003cbr\u003eThis is the \"Description\" of field test\u003cbr\u003eyou can use as many newlines as you want\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eit will still format the same in the table | \n| 3 | stringarray | []TYPE_STRING | This is an array\u003cbr\u003e\u003cbr\u003eIt displays that using [] infront of the type | \n\n## LogoutReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | Message that tells you whether your\u003cbr\u003elogout was succesful or not |", + "description": "Logout is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LogoutRequest\" and returns a \"LogoutReply\".\n\n## LogoutRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | timeoflogout | TYPE_STRING | The time the logout was registered | \n| 2 | test | TYPE_INT32 | This is the title\u003cbr\u003e\u003cbr\u003eThis is the \"Description\" of field test\u003cbr\u003eyou can use as many newlines as you want\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eit will still format the same in the table | \n| 3 | stringarray | []TYPE_STRING | This is an array\u003cbr\u003e\u003cbr\u003eIt displays that using [] infront of the type | \n\n## LogoutReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | Message that tells you whether your\u003cbr\u003elogout was succesful or not |", "operationId": "LoginService_Logout", "responses": { "200": { diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.proto b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto index 9b14f5ad1f0..7aa78470b88 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service.proto +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto @@ -1,5 +1,4 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; // Visibility Rule Echo Service // Similar to echo_service.proto but with annotations to change visibility @@ -16,40 +15,42 @@ package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/api/visibility.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; + // Embedded represents a message embedded in SimpleMessage. message VisibilityRuleEmbedded { - oneof mark { - int64 progress = 1; - string note = 2; - string internal_field = 3 [(google.api.field_visibility).restriction = "INTERNAL"]; - string preview_field = 4 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; - } + oneof mark { + int64 progress = 1; + string note = 2; + string internal_field = 3 [(google.api.field_visibility).restriction = "INTERNAL"]; + string preview_field = 4 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; + } } // SimpleMessage represents a simple message sent to the Echo service. message VisibilityRuleSimpleMessage { - enum VisibilityEnum { - VISIBILITY_ENUM_UNSPECIFIED = 0; - VISIBILITY_ENUM_VISIBLE = 1; - VISIBILITY_ENUM_INTERNAL = 2 [(google.api.value_visibility).restriction = "INTERNAL"]; - VISIBILITY_ENUM_PREVIEW = 3 [(google.api.value_visibility).restriction = "INTERNAL,PREVIEW"]; - } + enum VisibilityEnum { + VISIBILITY_ENUM_UNSPECIFIED = 0; + VISIBILITY_ENUM_VISIBLE = 1; + VISIBILITY_ENUM_INTERNAL = 2 [(google.api.value_visibility).restriction = "INTERNAL"]; + VISIBILITY_ENUM_PREVIEW = 3 [(google.api.value_visibility).restriction = "INTERNAL,PREVIEW"]; + } - // Id represents the message identifier. - string id = 1; - int64 num = 2; - oneof code { - int64 line_num = 3; - string lang = 4; - } - VisibilityRuleEmbedded status = 5; - oneof ext { - int64 en = 6; - VisibilityRuleEmbedded no = 7; - } - string internal_field = 8 [(google.api.field_visibility).restriction = "INTERNAL"]; - string preview_field = 9 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; - VisibilityEnum an_enum = 10; + // Id represents the message identifier. + string id = 1; + int64 num = 2; + oneof code { + int64 line_num = 3; + string lang = 4; + } + VisibilityRuleEmbedded status = 5; + oneof ext { + int64 en = 6; + VisibilityRuleEmbedded no = 7; + } + string internal_field = 8 [(google.api.field_visibility).restriction = "INTERNAL"]; + string preview_field = 9 [(google.api.field_visibility).restriction = "INTERNAL,PREVIEW"]; + VisibilityEnum an_enum = 10; } // VisibilityRuleEchoService service responds to incoming echo requests. @@ -57,49 +58,49 @@ message VisibilityRuleSimpleMessage { // based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors` // flag when calling protoc-gen-openapiv2. service VisibilityRuleEchoService { - // Echo method receives a simple message and returns it. - // It should always be visible in the open API output. - rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { - option (google.api.http) = { - post: "/v1/example/echo/{id}" - }; - } - // EchoInternal is an internal API that should only be visible in the OpenAPI spec - // if `visibility_restriction_selectors` includes "INTERNAL". - rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { - option (google.api.method_visibility).restriction = "INTERNAL"; - option (google.api.http) = { - get: "/v1/example/echo_internal" - }; - } - // EchoPreview is a preview API that should only be visible in the OpenAPI spec - // if `visibility_restriction_selectors` includes "PREVIEW". - rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { - option (google.api.method_visibility).restriction = "PREVIEW"; - option (google.api.http) = { - get: "/v1/example/echo_preview" - }; - } - // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec - // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". - rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { - option (google.api.method_visibility).restriction = "INTERNAL,PREVIEW"; - option (google.api.http) = { - get: "/v1/example/echo_internal_and_preview" - }; - } + // Echo method receives a simple message and returns it. + // It should always be visible in the open API output. + rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.http) = { + post: "/v1/example/echo/{id}" + }; + } + // EchoInternal is an internal API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "INTERNAL". + rpc EchoInternal(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL"; + option (google.api.http) = { + get: "/v1/example/echo_internal" + }; + } + // EchoPreview is a preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW". + rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "PREVIEW"; + option (google.api.http) = { + get: "/v1/example/echo_preview" + }; + } + // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec + // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". + rpc EchoInternalAndPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.method_visibility).restriction = "INTERNAL,PREVIEW"; + option (google.api.http) = { + get: "/v1/example/echo_internal_and_preview" + }; + } } // VisibilityRuleInternalEchoService service responds to incoming echo requests. // It should only be visible in the OpenAPI spec if `visibility_restriction_selectors` includes "INTERNAL". service VisibilityRuleInternalEchoService { - option (google.api.api_visibility).restriction = "INTERNAL"; + option (google.api.api_visibility).restriction = "INTERNAL"; - // Echo method receives a simple message and returns it. - // It should not be visible in the open API output. - rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { - option (google.api.http) = { - post: "/v1/example/internal/echo/{id}" - }; - } + // Echo method receives a simple message and returns it. + // It should not be visible in the open API output. + rpc Echo(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + option (google.api.http) = { + post: "/v1/example/internal/echo/{id}" + }; + } } diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index aef3c3ac2d7..8803cd7707a 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -145,10 +145,10 @@ var file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = []byte{ 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04, 0x0a, 0x08, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, diff --git a/examples/internal/proto/examplepb/wrappers.proto b/examples/internal/proto/examplepb/wrappers.proto index 6ba2c6a0bd9..dcbd9d878ec 100644 --- a/examples/internal/proto/examplepb/wrappers.proto +++ b/examples/internal/proto/examplepb/wrappers.proto @@ -1,89 +1,91 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; -import "google/protobuf/wrappers.proto"; import "google/protobuf/empty.proto"; +import "google/protobuf/wrappers.proto"; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; message Wrappers { - google.protobuf.StringValue string_value = 1; - google.protobuf.Int32Value int32_value = 2; - google.protobuf.Int64Value int64_value = 3; - google.protobuf.FloatValue float_value = 4; - google.protobuf.DoubleValue double_value = 5; - google.protobuf.BoolValue bool_value = 6; - google.protobuf.UInt32Value uint32_value = 7; - google.protobuf.UInt64Value uint64_value = 8; - google.protobuf.BytesValue bytes_value = 9; + google.protobuf.StringValue string_value = 1; + google.protobuf.Int32Value int32_value = 2; + google.protobuf.Int64Value int64_value = 3; + google.protobuf.FloatValue float_value = 4; + google.protobuf.DoubleValue double_value = 5; + google.protobuf.BoolValue bool_value = 6; + google.protobuf.UInt32Value uint32_value = 7; + google.protobuf.UInt64Value uint64_value = 8; + google.protobuf.BytesValue bytes_value = 9; } service WrappersService { - rpc Create(Wrappers) returns (Wrappers) { - option (google.api.http) = { - post: "/v1/example/wrappers" - body: "*" - }; - } + rpc Create(Wrappers) returns (Wrappers) { + option (google.api.http) = { + post: "/v1/example/wrappers" + body: "*" + }; + } - rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) { - option (google.api.http) = { - post: "/v1/testString" - body: "*" - }; - } - rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) { - option (google.api.http) = { - post: "/v1/testInt32" - body: "*" - }; - } - rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value){ - option (google.api.http) = { - post: "/v1/testInt64" - body: "*" - }; - } - rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue){ - option (google.api.http) = { - post: "/v1/testFloat" - body: "*" - }; - } - rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue){ - option (google.api.http) = { - post: "/v1/testDouble" - body: "*" - }; - } - rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue){ - option (google.api.http) = { - post: "/v1/testBool" - body: "*" - }; - } - rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value){ - option (google.api.http) = { - post: "/v1/testUint32" - body: "*" - }; - } - rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value){ - option (google.api.http) = { - post: "/v1/testUint64" - body: "*" - }; - } - rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue){ - option (google.api.http) = { - post: "/v1/testBytes" - body: "*" - }; - } - rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty){ - option (google.api.http) = { - post: "/v1/testEmpty" - body: "*" - }; - } + rpc CreateStringValue(google.protobuf.StringValue) returns (google.protobuf.StringValue) { + option (google.api.http) = { + post: "/v1/testString" + body: "*" + }; + } + rpc CreateInt32Value(google.protobuf.Int32Value) returns (google.protobuf.Int32Value) { + option (google.api.http) = { + post: "/v1/testInt32" + body: "*" + }; + } + rpc CreateInt64Value(google.protobuf.Int64Value) returns (google.protobuf.Int64Value) { + option (google.api.http) = { + post: "/v1/testInt64" + body: "*" + }; + } + rpc CreateFloatValue(google.protobuf.FloatValue) returns (google.protobuf.FloatValue) { + option (google.api.http) = { + post: "/v1/testFloat" + body: "*" + }; + } + rpc CreateDoubleValue(google.protobuf.DoubleValue) returns (google.protobuf.DoubleValue) { + option (google.api.http) = { + post: "/v1/testDouble" + body: "*" + }; + } + rpc CreateBoolValue(google.protobuf.BoolValue) returns (google.protobuf.BoolValue) { + option (google.api.http) = { + post: "/v1/testBool" + body: "*" + }; + } + rpc CreateUInt32Value(google.protobuf.UInt32Value) returns (google.protobuf.UInt32Value) { + option (google.api.http) = { + post: "/v1/testUint32" + body: "*" + }; + } + rpc CreateUInt64Value(google.protobuf.UInt64Value) returns (google.protobuf.UInt64Value) { + option (google.api.http) = { + post: "/v1/testUint64" + body: "*" + }; + } + rpc CreateBytesValue(google.protobuf.BytesValue) returns (google.protobuf.BytesValue) { + option (google.api.http) = { + post: "/v1/testBytes" + body: "*" + }; + } + rpc CreateEmpty(google.protobuf.Empty) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/testEmpty" + body: "*" + }; + } } diff --git a/examples/internal/proto/pathenum/path_enum.proto b/examples/internal/proto/pathenum/path_enum.proto index a8219949b32..fc70ac6a645 100644 --- a/examples/internal/proto/pathenum/path_enum.proto +++ b/examples/internal/proto/pathenum/path_enum.proto @@ -1,23 +1,25 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum"; + package grpc.gateway.examples.internal.pathenum; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum"; + enum PathEnum { - ABC = 0; - DEF = 1; + ABC = 0; + DEF = 1; } message MessagePathEnum { - enum NestedPathEnum { - GHI = 0; - JKL = 1; - } + enum NestedPathEnum { + GHI = 0; + JKL = 1; + } } message MessageWithPathEnum { - PathEnum value = 1; + PathEnum value = 1; } message MessageWithNestedPathEnum { - MessagePathEnum.NestedPathEnum value = 1; + MessagePathEnum.NestedPathEnum value = 1; } diff --git a/examples/internal/proto/sub/message.proto b/examples/internal/proto/sub/message.proto index 32768345c79..7b83d406c02 100644 --- a/examples/internal/proto/sub/message.proto +++ b/examples/internal/proto/sub/message.proto @@ -1,7 +1,9 @@ syntax = "proto2"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub"; + package grpc.gateway.examples.internal.proto.sub; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub"; + message StringMessage { - required string value = 1; + required string value = 1; } diff --git a/examples/internal/proto/sub2/message.proto b/examples/internal/proto/sub2/message.proto index 5ddbbaa1bc4..8c4c0f12e7d 100644 --- a/examples/internal/proto/sub2/message.proto +++ b/examples/internal/proto/sub2/message.proto @@ -1,7 +1,9 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2"; + package grpc.gateway.examples.internal.proto.sub2; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2"; + message IdMessage { - string uuid = 1; + string uuid = 1; } diff --git a/internal/descriptor/apiconfig/apiconfig.proto b/internal/descriptor/apiconfig/apiconfig.proto index aeecd777384..b7379dcd8d2 100644 --- a/internal/descriptor/apiconfig/apiconfig.proto +++ b/internal/descriptor/apiconfig/apiconfig.proto @@ -2,10 +2,10 @@ syntax = "proto3"; package grpc.gateway.internal.descriptor.apiconfig; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig"; - import "google/api/http.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig"; + // GrpcAPIService represents a stripped down version of google.api.Service . // Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto // The original imports 23 other protobuf files we are not interested in. If a significant @@ -16,6 +16,6 @@ import "google/api/http.proto"; // available features google supports in their service descriptions. Thanks to backwards // compatibility guarantees by protobuf it is safe for us to remove the other fields. message GrpcAPIService { - // Http Rule. - google.api.Http http = 1; + // Http Rule. + google.api.Http http = 1; } diff --git a/internal/descriptor/openapiconfig/openapiconfig.proto b/internal/descriptor/openapiconfig/openapiconfig.proto index f0aa69ee295..17cf86a90c8 100644 --- a/internal/descriptor/openapiconfig/openapiconfig.proto +++ b/internal/descriptor/openapiconfig/openapiconfig.proto @@ -2,50 +2,50 @@ syntax = "proto3"; package grpc.gateway.internal.descriptor.openapiconfig; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig"; - import "protoc-gen-openapiv2/options/openapiv2.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig"; + // OpenAPIFileOption represents OpenAPI options on a file message OpenAPIFileOption { - string file = 1; - grpc.gateway.protoc_gen_openapiv2.options.Swagger option = 2; + string file = 1; + grpc.gateway.protoc_gen_openapiv2.options.Swagger option = 2; } // OpenAPIMethodOption represents OpenAPI options on a method message OpenAPIMethodOption { - string method = 1; - grpc.gateway.protoc_gen_openapiv2.options.Operation option = 2; + string method = 1; + grpc.gateway.protoc_gen_openapiv2.options.Operation option = 2; } // OpenAPIMessageOption represents OpenAPI options on a message message OpenAPIMessageOption { - string message = 1; - grpc.gateway.protoc_gen_openapiv2.options.Schema option = 2; + string message = 1; + grpc.gateway.protoc_gen_openapiv2.options.Schema option = 2; } // OpenAPIServiceOption represents OpenAPI options on a service message OpenAPIServiceOption { - string service = 1; // ex: Service - grpc.gateway.protoc_gen_openapiv2.options.Tag option = 2; + string service = 1; // ex: Service + grpc.gateway.protoc_gen_openapiv2.options.Tag option = 2; } // OpenAPIFieldOption represents OpenAPI options on a field message OpenAPIFieldOption { - string field = 1; - grpc.gateway.protoc_gen_openapiv2.options.JSONSchema option = 2; + string field = 1; + grpc.gateway.protoc_gen_openapiv2.options.JSONSchema option = 2; } // OpenAPIOptions represents OpenAPI protobuf options message OpenAPIOptions { - repeated OpenAPIFileOption file = 1; - repeated OpenAPIMethodOption method = 2; - repeated OpenAPIMessageOption message = 3; - repeated OpenAPIServiceOption service = 4; - repeated OpenAPIFieldOption field = 5; + repeated OpenAPIFileOption file = 1; + repeated OpenAPIMethodOption method = 2; + repeated OpenAPIMessageOption message = 3; + repeated OpenAPIServiceOption service = 4; + repeated OpenAPIFieldOption field = 5; } // OpenAPIConfig represents a set of OpenAPI options message OpenAPIConfig { - OpenAPIOptions openapi_options = 1; + OpenAPIOptions openapi_options = 1; } diff --git a/protoc-gen-openapiv2/options/annotations.proto b/protoc-gen-openapiv2/options/annotations.proto index 1c189e2065c..d63d3c87eb3 100644 --- a/protoc-gen-openapiv2/options/annotations.proto +++ b/protoc-gen-openapiv2/options/annotations.proto @@ -2,11 +2,11 @@ syntax = "proto3"; package grpc.gateway.protoc_gen_openapiv2.options; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; - import "google/protobuf/descriptor.proto"; import "protoc-gen-openapiv2/options/openapiv2.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; + extend google.protobuf.FileOptions { // ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project. // diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 79d378f3c64..eb8f06e5beb 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -2,10 +2,10 @@ syntax = "proto3"; package grpc.gateway.protoc_gen_openapiv2.options; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; - import "google/protobuf/struct.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"; + // Scheme describes the schemes supported by the OpenAPI Swagger // and Operation objects. enum Scheme { diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 855bcb326ac..bcbe335b902 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1151,14 +1151,14 @@ var file_runtime_internal_examplepb_example_proto_rawDesc = []byte{ 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f, + 0x65, 0x70, 0x62, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x9b, 0x15, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, diff --git a/runtime/internal/examplepb/example.proto b/runtime/internal/examplepb/example.proto index e851fed6380..84886a327cc 100644 --- a/runtime/internal/examplepb/example.proto +++ b/runtime/internal/examplepb/example.proto @@ -1,11 +1,13 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; + package grpc.gateway.runtime.internal.examplepb; +import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; import "google/protobuf/field_mask.proto"; -import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; // SimpleMessage represents a simple message sent to the Echo service. message SimpleMessage { @@ -85,7 +87,9 @@ enum NumericEnum { } message ResponseBodyOut { - message Response { string data = 1; } + message Response { + string data = 1; + } Response response = 2; } @@ -112,22 +116,22 @@ message UpdateMessage { message NestedOuter { NestedOne one = 1; -}; +} message NestedOne { NestedTwo two = 1; -}; +} message NestedTwo { NestedThree three = 1; -}; +} message NestedThree { bool a = 1; bool b = 2; -}; +} message UpdateNestedRequest { NestedOuter nested = 1; google.protobuf.FieldMask update_mask = 2; -}; +} diff --git a/runtime/internal/examplepb/non_standard_names.proto b/runtime/internal/examplepb/non_standard_names.proto index 7c834a55966..d5d6a9099c6 100644 --- a/runtime/internal/examplepb/non_standard_names.proto +++ b/runtime/internal/examplepb/non_standard_names.proto @@ -1,80 +1,82 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + package grpc.gateway.runtime.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/struct.proto"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + // NonStandardMessage has oddly named fields. message NonStandardMessage { - // Id represents the message identifier. - string id = 1; - int64 Num = 2; - int64 line_num = 3; - string langIdent = 4; - string STATUS = 5; - int64 en_GB = 6; - string no = 7; + // Id represents the message identifier. + string id = 1; + int64 Num = 2; + int64 line_num = 3; + string langIdent = 4; + string STATUS = 5; + int64 en_GB = 6; + string no = 7; - message Thing { - message SubThing { - string sub_value = 1; - } - SubThing subThing = 1; + message Thing { + message SubThing { + string sub_value = 1; } - Thing thing = 8; - google.protobuf.Struct struct_field = 9; - google.protobuf.Value value_field = 10; + SubThing subThing = 1; + } + Thing thing = 8; + google.protobuf.Struct struct_field = 9; + google.protobuf.Value value_field = 10; } message NonStandardUpdateRequest { - NonStandardMessage body = 1; - google.protobuf.FieldMask update_mask = 2; + NonStandardMessage body = 1; + google.protobuf.FieldMask update_mask = 2; } // NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. message NonStandardMessageWithJSONNames { - // Id represents the message identifier. - string id = 1 [json_name="ID"]; - int64 Num = 2 [json_name="Num"]; - int64 line_num = 3 [json_name="LineNum"]; - string langIdent = 4 [json_name="langIdent"]; - string STATUS = 5 [json_name="status"]; - int64 en_GB = 6 [json_name="En_GB"]; - string no = 7 [json_name="yes"]; + // Id represents the message identifier. + string id = 1 [json_name = "ID"]; + int64 Num = 2 [json_name = "Num"]; + int64 line_num = 3 [json_name = "LineNum"]; + string langIdent = 4 [json_name = "langIdent"]; + string STATUS = 5 [json_name = "status"]; + int64 en_GB = 6 [json_name = "En_GB"]; + string no = 7 [json_name = "yes"]; - message Thing { - message SubThing { - string sub_value = 1 [json_name="sub_Value"]; - } - SubThing subThing = 1 [json_name="SubThing"]; + message Thing { + message SubThing { + string sub_value = 1 [json_name = "sub_Value"]; } - Thing thing = 8 [json_name="Thingy"]; - google.protobuf.Struct struct_field = 9 [json_name="StructField"]; - google.protobuf.Value value_field = 10 [json_name="ValueField"]; + SubThing subThing = 1 [json_name = "SubThing"]; + } + Thing thing = 8 [json_name = "Thingy"]; + google.protobuf.Struct struct_field = 9 [json_name = "StructField"]; + google.protobuf.Value value_field = 10 [json_name = "ValueField"]; } message NonStandardWithJSONNamesUpdateRequest { - NonStandardMessageWithJSONNames body = 1; - google.protobuf.FieldMask update_mask = 2; + NonStandardMessageWithJSONNames body = 1; + google.protobuf.FieldMask update_mask = 2; } // NonStandardService responds to incoming messages, applies a field mask and returns the masked response. service NonStandardService { - // Apply field mask to empty NonStandardMessage and return result. - rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { - option (google.api.http) = { - patch: "/v1/example/non_standard/update" - body: "body" - }; - } + // Apply field mask to empty NonStandardMessage and return result. + rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update" + body: "body" + }; + } - // Apply field mask to empty NonStandardMessageWithJSONNames and return result. - rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { - option (google.api.http) = { - patch: "/v1/example/non_standard/update_with_json_names" - body: "body" - }; - } + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update_with_json_names" + body: "body" + }; + } } diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index e8abcc1b4eb..a6071398d4c 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -530,12 +530,12 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x21, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, diff --git a/runtime/internal/examplepb/proto3.proto b/runtime/internal/examplepb/proto3.proto index 93ffc1256a6..7e492d391fa 100644 --- a/runtime/internal/examplepb/proto3.proto +++ b/runtime/internal/examplepb/proto3.proto @@ -2,13 +2,13 @@ syntax = "proto3"; package grpc.gateway.runtime.internal.examplepb; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; - import "google/protobuf/duration.proto"; import "google/protobuf/field_mask.proto"; +import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; -import "google/protobuf/struct.proto"; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; message Proto3Message { // Next number: 49 From ddb56bb8e63ecf3b123080c151af2caf064bdcf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Apr 2022 11:03:59 -0600 Subject: [PATCH 1263/1518] build(deps): bump nokogiri from 1.13.3 to 1.13.4 in /docs (#2638) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.3 to 1.13.4. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.4/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.3...v1.13.4) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 114f08bcb43..7151cefa1a9 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -236,7 +236,7 @@ GEM jekyll-seo-tag (~> 2.1) minitest (5.15.0) multipart-post (2.1.1) - nokogiri (1.13.3) + nokogiri (1.13.4) mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.22.0) From dc093b576ddf88868b6e8a3e773723bf9ec63001 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 17 Apr 2022 15:39:28 -0400 Subject: [PATCH 1264/1518] Add git blame ignore (#2652) Also ignore rev introducing formatting of protobuf files --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000000..cbe263961f9 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,3 @@ +# .git-blame-ignore-revs +# Formatted all protobuf files +bc0110188a8ef8e232050c3d9b347198dc83536a From 2ce32afe5735d0bfa28ee3369e5975dfb8192313 Mon Sep 17 00:00:00 2001 From: Mike Souza <1017268+MikeSouza@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:05:17 -0400 Subject: [PATCH 1265/1518] Export `defaultQueryParser` struct for custom query parsers (#2651) * Export `defaultQueryParser` struct for custom query parsers * Update v2 migration guide for query parameter parsing change --- .../development/grpc-gateway_v2_migration_guide.md | 4 ++++ runtime/query.go | 10 +++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/docs/development/grpc-gateway_v2_migration_guide.md b/docs/docs/development/grpc-gateway_v2_migration_guide.md index 9fb10dd87e5..fe3b131e983 100644 --- a/docs/docs/development/grpc-gateway_v2_migration_guide.md +++ b/docs/docs/development/grpc-gateway_v2_migration_guide.md @@ -162,3 +162,7 @@ There is no workaround for this, as we considered it a correct interpretation of ## Error handling configuration has been overhauled `runtime.HTTPError`, `runtime.OtherErrorHandler`, `runtime.GlobalHTTPErrorHandler`, `runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the use of gRPCs Status types. If you wish to configure how the gateway handles errors, please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. To handle routing errors (similar to the removed `runtime.OtherErrorHandler`) please use `runtime.WithRoutingErrorHandler`. + +## Default query parameter parsing behaviour change + +The default behaviour for query parameter parsing has changed to return an `InvalidArgument` (`400 Bad Request`) error when more than one of the same matching query parameters is parsed. Previously, it would log but not return an error, using the first query parameter that matched and ignoring any others. See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/2632) for more information. \ No newline at end of file diff --git a/runtime/query.go b/runtime/query.go index 190e9c4b3ec..c35f7dc69cb 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -24,7 +24,7 @@ import ( var valuesKeyRegexp = regexp.MustCompile(`^(.*)\[(.*)\]$`) -var currentQueryParser QueryParameterParser = &defaultQueryParser{} +var currentQueryParser QueryParameterParser = &DefaultQueryParser{} // QueryParameterParser defines interface for all query parameter parsers type QueryParameterParser interface { @@ -37,11 +37,15 @@ func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utili return currentQueryParser.Parse(msg, values, filter) } -type defaultQueryParser struct{} +// DefaultQueryParser is a QueryParameterParser which implements the default +// query parameters parsing behavior. +// +// See https://github.com/grpc-ecosystem/grpc-gateway/issues/2632 for more context. +type DefaultQueryParser struct{} // Parse populates "values" into "msg". // A value is ignored if its key starts with one of the elements in "filter". -func (*defaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { +func (*DefaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { for key, values := range values { match := valuesKeyRegexp.FindStringSubmatch(key) if len(match) == 3 { From b2339a6dee561a5cedd1ba1a7d9bb681c3e2db16 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Apr 2022 23:51:25 +0000 Subject: [PATCH 1266/1518] fix(deps): update google.golang.org/genproto digest to 44278fe --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bebfbbd8f4a..60950a4c9ca 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 + google.golang.org/genproto v0.0.0-20220420195807-44278fea765b google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 22aeb661b78..11571460740 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4 h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220420195807-44278fea765b h1:5zvsLqz9A1TKTeI6AhjJH/Vkaw0GGBs+D3GkvUUqNO0= +google.golang.org/genproto v0.0.0-20220420195807-44278fea765b/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cb613bd6439..bd2266f77b5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:myaecH64R0bIEDjNORIel4iXubqzaHU1K2z8ajBwWcM=", - version = "v0.0.0-20220414192740-2d67ff6cf2b4", + sum = "h1:5zvsLqz9A1TKTeI6AhjJH/Vkaw0GGBs+D3GkvUUqNO0=", + version = "v0.0.0-20220420195807-44278fea765b", ) go_repository( name = "org_golang_google_grpc", From 530f02388b5506dbd3d46edc89c27d61954df8b1 Mon Sep 17 00:00:00 2001 From: Stephen Rowles <7466805+srowles@users.noreply.github.com> Date: Thu, 21 Apr 2022 15:59:04 +0100 Subject: [PATCH 1267/1518] Fix typo in "uannotated" file links (#2658) --- docs/docs/mapping/examples.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/mapping/examples.md b/docs/docs/mapping/examples.md index 2559a24542d..48e8473164b 100644 --- a/docs/docs/mapping/examples.md +++ b/docs/docs/mapping/examples.md @@ -13,9 +13,9 @@ Examples are available under `examples/internal` directory. protobuf service definitions. - [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): generated Go service stubs and types. -- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): +- [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), [`proto/examplepb/unannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go): generated gRPC-Gateway clients. -- [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): +- [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.yaml): gRPC API Configuration for `unannotated_echo_service.proto`. - [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): service implementation. From 589117fa3278b341a13f058a3b1002cb4a58bc3e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Apr 2022 18:13:43 +0000 Subject: [PATCH 1268/1518] fix(deps): update google.golang.org/genproto digest to 72621c1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 60950a4c9ca..b520138bf5a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220420195807-44278fea765b + google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 11571460740..4d3a3a1c754 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220420195807-44278fea765b h1:5zvsLqz9A1TKTeI6AhjJH/Vkaw0GGBs+D3GkvUUqNO0= -google.golang.org/genproto v0.0.0-20220420195807-44278fea765b/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 h1:SeX3QUcBj3fciwnfPT9kt5gBhFy/FCZtYZ+I/RB8agc= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index bd2266f77b5..d79b6fa8000 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5zvsLqz9A1TKTeI6AhjJH/Vkaw0GGBs+D3GkvUUqNO0=", - version = "v0.0.0-20220420195807-44278fea765b", + sum = "h1:SeX3QUcBj3fciwnfPT9kt5gBhFy/FCZtYZ+I/RB8agc=", + version = "v0.0.0-20220421151946-72621c1f0bd3", ) go_repository( name = "org_golang_google_grpc", From b5ae278bc454073dfcd3672e9ed367c3816fec1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Apr 2022 22:02:29 +0000 Subject: [PATCH 1269/1518] chore(deps): update dependency bufbuild/buf to v1.4.0 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5aa3d281a80..f9eb256f167 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -139,7 +139,7 @@ jobs: docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 proto_lint: docker: - - image: bufbuild/buf:1.3.1 + - image: bufbuild/buf:1.4.0 steps: - checkout - run: buf build @@ -148,7 +148,7 @@ jobs: - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' proto_push: docker: - - image: bufbuild/buf:1.3.1 + - image: bufbuild/buf:1.4.0 steps: - checkout # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. From 5176448728086b5356ff7c3e34cbbf695062b53a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Apr 2022 05:24:56 +0000 Subject: [PATCH 1270/1518] chore(deps): update dependency com_google_protobuf to v3.20.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 80eb58bfd82..f818b487d41 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "b07772d38ab07e55eca4d50f4b53da2d998bb221575c60a4f81100242d4b4889", - strip_prefix = "protobuf-3.20.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.20.0.tar.gz"], + sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930", + strip_prefix = "protobuf-3.20.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.20.1.tar.gz"], ) http_archive( From 6daeaa2bb583857739a51a3b50d16627072ef55c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Apr 2022 17:47:07 +0000 Subject: [PATCH 1271/1518] fix(deps): update google.golang.org/genproto digest to b37d22c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b520138bf5a..91ef2cebf5d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 + google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 google.golang.org/grpc v1.45.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 4d3a3a1c754..e86413b8a49 100644 --- a/go.sum +++ b/go.sum @@ -367,8 +367,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 h1:SeX3QUcBj3fciwnfPT9kt5gBhFy/FCZtYZ+I/RB8agc= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 h1:nquqdM9+ps0JZcIiI70+tqoaIFS5Ql4ZuK8UXnz3HfE= +google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d79b6fa8000..caada03c6ed 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SeX3QUcBj3fciwnfPT9kt5gBhFy/FCZtYZ+I/RB8agc=", - version = "v0.0.0-20220421151946-72621c1f0bd3", + sum = "h1:nquqdM9+ps0JZcIiI70+tqoaIFS5Ql4ZuK8UXnz3HfE=", + version = "v0.0.0-20220422154200-b37d22cd5731", ) go_repository( name = "org_golang_google_grpc", From ba56cbfc405f7f65285396854e5493db1c212e18 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 22 Apr 2022 19:57:50 +0000 Subject: [PATCH 1272/1518] fix(deps): update module google.golang.org/grpc to v1.46.0 --- go.mod | 2 +- go.sum | 10 +++++++++- repositories.bzl | 8 ++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 91ef2cebf5d..9eab29f37c9 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 - google.golang.org/grpc v1.45.0 + google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index e86413b8a49..d5fb6943505 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,7 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -55,6 +56,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -100,6 +102,7 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -207,6 +210,7 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -250,7 +254,9 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -383,8 +389,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -397,6 +404,7 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index caada03c6ed..89c8b384186 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -204,8 +204,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:fP+fF0up6oPY49OrjPrhIJ8yQfdIM85NXMLkMg1EXVs=", - version = "v0.9.10-0.20210907150352-cf90f659a021", + sum = "h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0=", + version = "v0.10.2-0.20220325020618-49ff273808a1", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=", - version = "v1.45.0", + sum = "h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=", + version = "v1.46.0", ) go_repository( From dc93e0276ecd71b466ff64a7d61925e1b95b0731 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Apr 2022 19:07:48 +0000 Subject: [PATCH 1273/1518] fix(deps): update google.golang.org/genproto digest to 31bebde --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9eab29f37c9..74b9690076b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 + google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46 google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index d5fb6943505..fc9faef8f2f 100644 --- a/go.sum +++ b/go.sum @@ -373,8 +373,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 h1:nquqdM9+ps0JZcIiI70+tqoaIFS5Ql4ZuK8UXnz3HfE= -google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46 h1:G1IeWbjrqEq9ChWxEuRPJu6laA67+XgTFHVSAvepr38= +google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 89c8b384186..54ca106be66 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:nquqdM9+ps0JZcIiI70+tqoaIFS5Ql4ZuK8UXnz3HfE=", - version = "v0.0.0-20220422154200-b37d22cd5731", + sum = "h1:G1IeWbjrqEq9ChWxEuRPJu6laA67+XgTFHVSAvepr38=", + version = "v0.0.0-20220426171045-31bebdecfb46", ) go_repository( name = "org_golang_google_grpc", From 05b55ab178b1bba197faef38bac9293098c2f6ff Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 26 Apr 2022 21:54:57 +0000 Subject: [PATCH 1274/1518] fix(deps): update module github.com/google/go-cmp to v0.5.8 --- go.mod | 3 +-- go.sum | 5 ++--- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 74b9690076b..f8832f51f53 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v1.0.0 github.com/golang/glog v1.0.0 github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.7 + github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 @@ -20,6 +20,5 @@ require ( require ( golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect ) diff --git a/go.sum b/go.sum index fc9faef8f2f..c1351111986 100644 --- a/go.sum +++ b/go.sum @@ -103,8 +103,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -318,7 +318,6 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= diff --git a/repositories.bzl b/repositories.bzl index 54ca106be66..30307886f13 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -317,8 +317,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=", - version = "v0.5.7", + sum = "h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=", + version = "v0.5.8", ) go_repository( From 4df2dcdac5f08a8b671ffbb3e57c39690e2a86ff Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Apr 2022 19:14:13 +0000 Subject: [PATCH 1275/1518] fix(deps): update google.golang.org/genproto digest to 98d7887 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index f8832f51f53..795f20ae78d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46 + google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index c1351111986..f946a5e59be 100644 --- a/go.sum +++ b/go.sum @@ -372,8 +372,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46 h1:G1IeWbjrqEq9ChWxEuRPJu6laA67+XgTFHVSAvepr38= -google.golang.org/genproto v0.0.0-20220426171045-31bebdecfb46/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e h1:gMjH4zLGs9m+dGzR7qHCHaXMOwsJHJKKkHtyXhtOrJk= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 30307886f13..485af3546dc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:G1IeWbjrqEq9ChWxEuRPJu6laA67+XgTFHVSAvepr38=", - version = "v0.0.0-20220426171045-31bebdecfb46", + sum = "h1:gMjH4zLGs9m+dGzR7qHCHaXMOwsJHJKKkHtyXhtOrJk=", + version = "v0.0.0-20220429170224-98d788798c3e", ) go_repository( name = "org_golang_google_grpc", From 08431183cc5bd468f74b9f7d0b911293eecf7181 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 3 May 2022 21:22:38 +0000 Subject: [PATCH 1276/1518] fix(deps): update google.golang.org/genproto digest to ba3ae3f --- go.mod | 2 +- go.sum | 7 ++----- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 795f20ae78d..3e27d8218de 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e + google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index f946a5e59be..03cc0cff897 100644 --- a/go.sum +++ b/go.sum @@ -44,7 +44,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -55,7 +54,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -372,8 +370,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e h1:gMjH4zLGs9m+dGzR7qHCHaXMOwsJHJKKkHtyXhtOrJk= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs= +google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -388,7 +386,6 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index 485af3546dc..f431cde13d3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:gMjH4zLGs9m+dGzR7qHCHaXMOwsJHJKKkHtyXhtOrJk=", - version = "v0.0.0-20220429170224-98d788798c3e", + sum = "h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs=", + version = "v0.0.0-20220503193339-ba3ae3f07e29", ) go_repository( name = "org_golang_google_grpc", From 61facaa2d2109142d421709af9fb6e6a2755f225 Mon Sep 17 00:00:00 2001 From: GreyXor <79602273+GreyXor@users.noreply.github.com> Date: Wed, 4 May 2022 17:23:02 +0200 Subject: [PATCH 1277/1518] fix: Add Content-Type header to the health endpoint (#2634) * fix: Content-Type and Grpc-Metadata-Content-Type headers with the health endpoint #2611 * fix: no need to set grpc content type header * fix: remove unnecessary grpc header comment * test: lighten the Content-Type header test --- runtime/mux.go | 2 ++ runtime/mux_test.go | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/runtime/mux.go b/runtime/mux.go index b65f2adbcd5..8ba71a9e050 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -229,6 +229,8 @@ func WithHealthEndpointAt(healthCheckClient grpc_health_v1.HealthClient, endpoin return } + w.Header().Set("Content-Type", "application/json") + if resp.GetStatus() != grpc_health_v1.HealthCheckResponse_SERVING { var err error switch resp.GetStatus() { diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 8e52a07e1a3..787df38c64c 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -719,6 +719,26 @@ func TestWithHealthzEndpoint_serviceParam(t *testing.T) { } } +func TestWithHealthzEndpoint_header(t *testing.T) { + for _, tt := range healthCheckTests { + t.Run(tt.name, func(t *testing.T) { + mux := runtime.NewServeMux(runtime.WithHealthzEndpoint(&dummyHealthCheckClient{status: tt.status, code: tt.code})) + + r := httptest.NewRequest(http.MethodGet, "/healthz", nil) + rr := httptest.NewRecorder() + + mux.ServeHTTP(rr, r) + + if actualHeader := rr.Header().Get("Content-Type"); actualHeader != "application/json" { + t.Errorf( + "result http header Content-Type for grpc code %q and status %q should be application/json, got %s", + tt.code, tt.status, actualHeader, + ) + } + }) + } +} + var _ grpc_health_v1.HealthClient = (*dummyHealthCheckClient)(nil) type dummyHealthCheckClient struct { From 8f476a01ac7beea62de7352fbc775245788bcfef Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 4 May 2022 16:45:30 +0000 Subject: [PATCH 1278/1518] fix(deps): update google.golang.org/genproto digest to 98cd25c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3e27d8218de..239854a4d88 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 + google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72 google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 03cc0cff897..ecc8f237bfe 100644 --- a/go.sum +++ b/go.sum @@ -370,8 +370,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72 h1:iif0mpUetMBqcQPUoq+JnCcmzvfpp8wRx515va8wP1c= +google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f431cde13d3..01d2168c6ce 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs=", - version = "v0.0.0-20220503193339-ba3ae3f07e29", + sum = "h1:iif0mpUetMBqcQPUoq+JnCcmzvfpp8wRx515va8wP1c=", + version = "v0.0.0-20220504150022-98cd25cafc72", ) go_repository( name = "org_golang_google_grpc", From 963f1aa09bbbcf62bacdf2e3d0d6c45c3f76d7e4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 5 May 2022 17:20:03 +0000 Subject: [PATCH 1279/1518] fix(deps): update google.golang.org/genproto digest to f39f71e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 239854a4d88..3c86d40ec59 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72 + google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index ecc8f237bfe..8380ea1e119 100644 --- a/go.sum +++ b/go.sum @@ -370,8 +370,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72 h1:iif0mpUetMBqcQPUoq+JnCcmzvfpp8wRx515va8wP1c= -google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 01d2168c6ce..a9c4e281999 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:iif0mpUetMBqcQPUoq+JnCcmzvfpp8wRx515va8wP1c=", - version = "v0.0.0-20220504150022-98cd25cafc72", + sum = "h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo=", + version = "v0.0.0-20220505152158-f39f71e6c8f3", ) go_repository( name = "org_golang_google_grpc", From a1726d26b2b65904d2b51f20ad957e8084925a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Thu, 19 May 2022 04:56:46 +0200 Subject: [PATCH 1280/1518] protoc-gen-openapiv2: Remove path parameters from body when body is a snake_case field (#2600) * Don't pass camelCase'd body field name as path param prefix. * Unit test for render services with body field name in camel case --- .../internal/genopenapi/template.go | 2 +- .../internal/genopenapi/template_test.go | 176 ++++++++++++++++++ 2 files changed, 177 insertions(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index fba6169531d..21a9a8a5037 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1171,7 +1171,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re bodyFieldName = bodyField.Name } // Align pathParams with body field path. - pathParams := subPathParams(bodyFieldName, b.PathParams) + pathParams := subPathParams(bodyField.Name, b.PathParams) var err error schema, err = renderFieldAsDefinition(bodyField.Target, reg, customRefs, pathParams) if err != nil { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 87cda19bdee..1105a8b4372 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -6019,3 +6019,179 @@ func TestSubPathParams(t *testing.T) { t.Fatalf("Wrong path param 1, element 1, got %s want %s", got, want) } } + +func TestRenderServicesWithBodyFieldNameInCamelCase(t *testing.T) { + userDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("User"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("name"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("role"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + }, + }, + } + updateDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("UpdateUserRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("user_object"), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.User"), + Number: proto.Int32(1), + }, + }, + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("UpdateUser"), + InputType: proto.String("UpdateUserRequest"), + OutputType: proto.String("User"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("UserService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + userMsg := &descriptor.Message{ + DescriptorProto: userDesc, + } + updateMsg := &descriptor.Message{ + DescriptorProto: updateDesc, + } + nameField := &descriptor.Field{ + Message: userMsg, + FieldDescriptorProto: userMsg.GetField()[0], + } + nameField.JsonName = proto.String("name") + roleField := &descriptor.Field{ + Message: userMsg, + FieldDescriptorProto: userMsg.GetField()[1], + } + roleField.JsonName = proto.String("role") + userMsg.Fields = []*descriptor.Field{nameField, roleField} + userField := &descriptor.Field{ + Message: updateMsg, + FieldMessage: userMsg, + FieldDescriptorProto: updateMsg.GetField()[0], + } + userField.JsonName = proto.String("userObject") + updateMsg.Fields = []*descriptor.Field{userField} + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("example"), + Name: proto.String("user_service.proto"), + MessageType: []*descriptorpb.DescriptorProto{userDesc, updateDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{userMsg, updateMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: updateMsg, + ResponseType: userMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/users/{user_object.name}", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "user_object", + }, + { + Name: "name", + }, + }), + Target: nameField, + }, + }, + Body: &descriptor.Body{ + FieldPath: []descriptor.FieldPathComponent{ + { + Name: "user_object", + Target: userField, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + if got, want := len(result.Paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + var operation = *result.Paths["/v1/users/{userObject.name}"].Post + if got, want := len(operation.Parameters), 2; got != want { + t.Fatalf("Parameters length differed, got %d want %d", got, want) + } + + if got, want := operation.Parameters[0].Name, "userObject.name"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].In, "path"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].Name, "userObject"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].In, "body"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + // The body parameter should be inlined and not contain 'name', as this is a path parameter. + schema := operation.Parameters[1].Schema + if got, want := schema.Ref, ""; got != want { + t.Fatalf("Wrong reference, got %s want %s", got, want) + } + props := schema.Properties + if props == nil { + t.Fatal("No properties on body parameter") + } + if got, want := len(*props), 1; got != want { + t.Fatalf("Properties length differed, got %d want %d", got, want) + } + for _, v := range *props { + if got, want := v.Key, "role"; got != want { + t.Fatalf("Wrong key for property, got %s want %s", got, want) + } + } +} From ff2d738268e79c83433a439d4c42b02cd8ba341f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 May 2022 02:58:27 +0000 Subject: [PATCH 1281/1518] fix(deps): update google.golang.org/genproto digest to 4f43b33 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3c86d40ec59..36530d2eabf 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 + google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335 google.golang.org/grpc v1.46.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index 8380ea1e119..5ad3b0e1d27 100644 --- a/go.sum +++ b/go.sum @@ -370,8 +370,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335 h1:2D0OT6tPVdrQTOnVe1VQjfJPTED6EZ7fdJ/f6Db6OsY= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a9c4e281999..66839ad3126 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo=", - version = "v0.0.0-20220505152158-f39f71e6c8f3", + sum = "h1:2D0OT6tPVdrQTOnVe1VQjfJPTED6EZ7fdJ/f6Db6OsY=", + version = "v0.0.0-20220518221133-4f43b3371335", ) go_repository( name = "org_golang_google_grpc", From 4525497f6db40d3bfa7772889dc790fbdf92c3f2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 May 2022 04:42:06 +0000 Subject: [PATCH 1282/1518] chore(deps): update dependency golang to v1.18.2 --- .circleci/Dockerfile | 2 +- .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .circleci/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 9a05ecab09d..2cc767bb5c5 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.1 +FROM golang:1.18.2 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile index 300580cf2ca..3174e13bba4 100644 --- a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.1 as builder +FROM golang:1.18.2 as builder ARG RELEASE_VERSION diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile index 1c7fd6ed972..2abd04508fe 100644 --- a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.circleci/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.1 as builder +FROM golang:1.18.2 as builder ARG RELEASE_VERSION From 394566a6d2d3b691dbdc8bfa1841e311dbd81158 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 May 2022 10:35:07 +0000 Subject: [PATCH 1283/1518] chore(deps): update dependency io_bazel_rules_go to v0.32.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f818b487d41..2b207262dc3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "f2dcd210c7095febe54b804bb1cd3a58fe8435a909db2ec04e31542631cf715c", + sha256 = "ab21448cef298740765f33a7f5acee0607203e4ea321219f2a4c85a6e0fb0a27", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.31.0/rules_go-v0.31.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.31.0/rules_go-v0.31.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.32.0/rules_go-v0.32.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.32.0/rules_go-v0.32.0.zip", ], ) From 4a321516365c226b0779fcd0f6e7898ab7f7bf4a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 May 2022 12:57:25 +0000 Subject: [PATCH 1284/1518] fix(deps): update module google.golang.org/grpc to v1.46.2 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 36530d2eabf..47cfe10f089 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335 - google.golang.org/grpc v1.46.0 + google.golang.org/grpc v1.46.2 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 5ad3b0e1d27..b8f18b54d5c 100644 --- a/go.sum +++ b/go.sum @@ -386,8 +386,9 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2 h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index 66839ad3126..694244e8554 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=", - version = "v1.46.0", + sum = "h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ=", + version = "v1.46.2", ) go_repository( From 83bd27338556a7d66bba197e87dc935977399cc8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 19 May 2022 18:34:23 +0000 Subject: [PATCH 1285/1518] fix(deps): update google.golang.org/genproto digest to 3a47de7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 47cfe10f089..59c837d1d92 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335 + google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd google.golang.org/grpc v1.46.2 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/go.sum b/go.sum index b8f18b54d5c..1feee5cd1dd 100644 --- a/go.sum +++ b/go.sum @@ -370,8 +370,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335 h1:2D0OT6tPVdrQTOnVe1VQjfJPTED6EZ7fdJ/f6Db6OsY= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 694244e8554..f54bab6ec71 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1075,8 +1075,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:2D0OT6tPVdrQTOnVe1VQjfJPTED6EZ7fdJ/f6Db6OsY=", - version = "v0.0.0-20220518221133-4f43b3371335", + sum = "h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I=", + version = "v0.0.0-20220519153652-3a47de7e79bd", ) go_repository( name = "org_golang_google_grpc", From 3eca6bd97cfa99d8cba3f64004d1c1dce0d08a46 Mon Sep 17 00:00:00 2001 From: gknw <64784493+gknw@users.noreply.github.com> Date: Fri, 20 May 2022 03:16:06 +0500 Subject: [PATCH 1286/1518] Fixed []byte unmarshaling for non proto structs (#2693) --- runtime/marshal_json_test.go | 2 ++ runtime/marshal_jsonpb.go | 11 +++++++++++ runtime/marshal_jsonpb_test.go | 2 ++ 3 files changed, 15 insertions(+) diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index 490e66bab83..5037aea9348 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -197,6 +197,8 @@ var ( {data: "", json: `""`}, {data: proto.String(""), json: `""`}, {data: "foo", json: `"foo"`}, + {data: []byte("foo"), json: `"Zm9v"`}, + {data: []byte{}, json: `""`}, {data: proto.String("foo"), json: `"foo"`}, {data: int32(-1), json: "-1"}, {data: proto.Int32(-1), json: "-1"}, diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index 7387c8e3976..524ea057ccb 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -280,6 +280,17 @@ func decodeNonProtoField(d *json.Decoder, unmarshaler protojson.UnmarshalOptions return nil } if rv.Kind() == reflect.Slice { + if rv.Type().Elem().Kind() == reflect.Uint8 { + var sl []byte + if err := d.Decode(&sl); err != nil { + return err + } + if sl != nil { + rv.SetBytes(sl) + } + return nil + } + var sl []json.RawMessage if err := d.Decode(&sl); err != nil { return err diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 2d5f8bedd4c..d82290c1416 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -523,6 +523,8 @@ var ( {data: uint64(1), json: "1"}, {data: proto.Uint64(1), json: "1"}, {data: "abc", json: `"abc"`}, + {data: []byte("abc"), json: `"YWJj"`}, + {data: []byte{}, json: `""`}, {data: proto.String("abc"), json: `"abc"`}, {data: float32(1.5), json: "1.5"}, {data: proto.Float32(1.5), json: "1.5"}, From a03e3289a7df8c4bdb758edeb039dd4c39113b84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 May 2022 18:16:29 -0400 Subject: [PATCH 1287/1518] build(deps): bump nokogiri from 1.13.4 to 1.13.6 in /docs (#2695) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.4 to 1.13.6. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.4...v1.13.6) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 7151cefa1a9..2e3dd27526e 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -236,7 +236,7 @@ GEM jekyll-seo-tag (~> 2.1) minitest (5.15.0) multipart-post (2.1.1) - nokogiri (1.13.4) + nokogiri (1.13.6) mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.22.0) From 5abbca7b18feb9ba6acd5fa05c80174a2e5da8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Fri, 20 May 2022 01:52:33 +0200 Subject: [PATCH 1288/1518] Document and warn about path parameters containing "/". (#2697) --- docs/docs/mapping/customizing_openapi_output.md | 5 +++++ protoc-gen-openapiv2/internal/genopenapi/template.go | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 4227f1eead6..baa5087f571 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -478,6 +478,11 @@ This will instead generate the following paths: - `/v1/{shelfName}` - `/v1/{bookName}` +Note that path parameters in OpenAPI does not support values with `/`, as discussed in +[Support for path parameters which can contain slashes #892](https://github.com/OAI/OpenAPI-Specification/issues/892), +so tools as Swagger UI will URL encode any `/` provided as parameter value. A possible workaround for this is to write +a custom post processor for your OAS file to replace any path parameter with `/` into multiple parameters. + ### Output format By default the output format is JSON, but it is possible to configure it using the `output_format` option. Allowed values are: `json`, `yaml`. The output format will also change the extension of the output files. diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 21a9a8a5037..a6f0f4f4cab 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -938,9 +938,14 @@ func partsToOpenAPIPath(parts []string, overrides map[string]string) string { // For example "{name=organizations/*/roles/*}" would produce the regular expression for the "name" parameter of // "organizations/[^/]+/roles/[^/]+" or "{bar=bing/*/bang/**}" would produce the regular expression for the "bar" // parameter of "bing/[^/]+/bang/.+". +// +// Note that OpenAPI does not actually support path parameters with "/", see https://github.com/OAI/OpenAPI-Specification/issues/892 func partsToRegexpMap(parts []string) map[string]string { regExps := make(map[string]string) for _, part := range parts { + if strings.Contains(part, "/") { + glog.Warningf("Path parameter '%s' contains '/', which is not supported in OpenAPI", part) + } if submatch := canRegexp.FindStringSubmatch(part); len(submatch) > 2 { if strings.HasPrefix(submatch[2], "=") { // this part matches the standard and should be made into a regular expression // assume the string's characters other than "**" and "*" are literals (not necessarily a good assumption 100% of the times, but it will support most use cases) From 7ea9a2f44492e6cc8e02be3684ea44b4a446f058 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 19 May 2022 20:14:14 -0400 Subject: [PATCH 1289/1518] Update gorelease version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f9eb256f167..1abb2fd3e25 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.10.0 + - run: gorelease -base=v2.10.1 push_bsr_plugins: docker: - image: circleci/golang From b6a98d959b48f2095ae479668b019a6eada8abf0 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 22 May 2022 22:09:29 -0400 Subject: [PATCH 1290/1518] Fix node tests (#2704) It seems node tests might have been broken for several years. This now passes on my local machine. Discovered while working on #2700. --- .../a_bit_of_everything_service.spec.js | 257 ++++++++++-------- .../internal/browser/echo_service.spec.js | 48 ++-- examples/internal/browser/package.json | 3 + 3 files changed, 176 insertions(+), 132 deletions(-) diff --git a/examples/internal/browser/a_bit_of_everything_service.spec.js b/examples/internal/browser/a_bit_of_everything_service.spec.js index 66ccd54ece7..eb6058d2818 100644 --- a/examples/internal/browser/a_bit_of_everything_service.spec.js +++ b/examples/internal/browser/a_bit_of_everything_service.spec.js @@ -2,226 +2,257 @@ var SwaggerClient = require('swagger-client'); -describe('ABitOfEverythingService', function() { +describe('ABitOfEverythingService', function () { var client; - beforeEach(function(done) { + beforeEach(function (done) { new SwaggerClient({ url: "http://localhost:8080/openapiv2/a_bit_of_everything.swagger.json", usePromise: true, - }).then(function(c) { + }).then(function (c) { client = c; - }).catch(function(err) { + }).catch(function (err) { done.fail(err); }).then(done); }); - describe('Create', function() { + describe('Create', function () { var created; var expected = { - float_value: 1.5, - double_value: 2.5, - int64_value: "4294967296", - uint64_value: "9223372036854775807", - int32_value: -2147483648, - fixed64_value: "9223372036854775807", - fixed32_value: 4294967295, - bool_value: true, - string_value: "strprefix/foo", - uint32_value: 4294967295, - sfixed32_value: 2147483647, - sfixed64_value: "-4611686018427387904", - sint32_value: 2147483647, - sint64_value: "4611686018427387903", + floatValue: 1.5, + doubleValue: 2.5, + int64Value: "4294967296", + uint64Value: "9223372036854775807", + int32Value: -2147483648, + fixed64Value: "9223372036854775807", + fixed32Value: 4294967295, + boolValue: true, + stringValue: "strprefix/foo", + uint32Value: 4294967295, + sfixed32Value: 2147483647, + sfixed64Value: "-4611686018427387904", + sint32Value: 2147483647, + sint64Value: "4611686018427387903", nonConventionalNameValue: "camelCase", - enum_value: "ONE", - path_enum_value: "DEF", - nested_path_enum_value: "JKL", - enum_value_annotation: "ONE", + enumValue: "ONE", + pathEnumValue: "DEF", + nestedPathEnumValue: "JKL", + enumValueAnnotation: "ONE", + requiredStringViaFieldBehaviorAnnotation: "foo", + singleNested: null, + nested: [], + bytesValue: "", + repeatedStringValue: [], + mapValue: {}, + mappedStringValue: {}, + mappedNestedValue: {}, + timestampValue: "2006-01-02T15:04:05Z", + repeatedEnumValue: [], + repeatedEnumAnnotation: [], + repeatedStringAnnotation: [], + repeatedNestedAnnotation: [], + nestedAnnotation: null, + int64OverrideType: "0", + outputOnlyStringViaFieldBehaviorAnnotation: "", }; - beforeEach(function(done) { - client.ABitOfEverythingService.Create(expected).then(function(resp) { + beforeEach(function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_Create(expected).then(function (resp) { created = resp.obj; - }).catch(function(err) { + }).catch(function (err) { done.fail(err); }).then(done); }); - it('should assign id', function() { + it('should assign id', function () { expect(created.uuid).not.toBe(""); }); - it('should echo the request back', function() { + it('should echo the request back', function () { delete created.uuid; expect(created).toEqual(expected); }); }); - describe('CreateBody', function() { + describe('CreateBody', function () { var created; var expected = { - float_value: 1.5, - double_value: 2.5, - int64_value: "4294967296", - uint64_value: "9223372036854775807", - int32_value: -2147483648, - fixed64_value: "9223372036854775807", - fixed32_value: 4294967295, - bool_value: true, - string_value: "strprefix/foo", - uint32_value: 4294967295, - sfixed32_value: 2147483647, - sfixed64_value: "-4611686018427387904", - sint32_value: 2147483647, - sint64_value: "4611686018427387903", + floatValue: 1.5, + doubleValue: 2.5, + int64Value: "4294967296", + uint64Value: "9223372036854775807", + int32Value: -2147483648, + fixed64Value: "9223372036854775807", + fixed32Value: 4294967295, + boolValue: true, + stringValue: "strprefix/foo", + uint32Value: 4294967295, + sfixed32Value: 2147483647, + sfixed64Value: "-4611686018427387904", + sint32Value: 2147483647, + sint64Value: "4611686018427387903", nonConventionalNameValue: "camelCase", - enum_value: "ONE", - path_enum_value: "DEF", - nested_path_enum_value: "JKL", - + enumValue: "ONE", + pathEnumValue: "DEF", + nestedPathEnumValue: "JKL", nested: [ - { name: "bar", amount: 10 }, - { name: "baz", amount: 20 }, + { name: "bar", amount: 10 }, + { name: "baz", amount: 20 }, ], - repeated_string_value: ["a", "b", "c"], - oneof_string: "x", - map_value: { a: "ONE", b: 2 }, - mapped_string_value: { a: "x", b: "y" }, - mapped_nested_value: { + repeatedStringValue: ["a", "b", "c"], + oneofString: "x", + mapValue: { a: "ONE", b: 2 }, + mappedStringValue: { a: "x", b: "y" }, + mappedNestedValue: { a: { name: "x", amount: 1 }, b: { name: "y", amount: 2 }, }, + enumValueAnnotation: "ONE", + requiredStringViaFieldBehaviorAnnotation: "foo", + singleNested: null, + nested: [], + bytesValue: "", + repeatedStringValue: [], + mapValue: {}, + mappedStringValue: {}, + mappedNestedValue: {}, + timestampValue: "2006-01-02T15:04:05Z", + repeatedEnumValue: [], + repeatedEnumAnnotation: [], + repeatedStringAnnotation: [], + repeatedNestedAnnotation: [], + nestedAnnotation: null, + int64OverrideType: "0", + outputOnlyStringViaFieldBehaviorAnnotation: "", }; - beforeEach(function(done) { - client.ABitOfEverythingService.CreateBody({ + beforeEach(function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_CreateBody({ body: expected, - }).then(function(resp) { + }).then(function (resp) { created = resp.obj; - }).catch(function(err) { + }).catch(function (err) { done.fail(err); }).then(done); }); - it('should assign id', function() { + it('should assign id', function () { expect(created.uuid).not.toBe(""); }); - it('should echo the request back', function() { + it('should echo the request back', function () { delete created.uuid; expect(created).toEqual(expected); }); }); - describe('lookup', function() { + describe('lookup', function () { var created; var expected = { - bool_value: true, - string_value: "strprefix/foo", + boolValue: true, + stringValue: "strprefix/foo", }; - beforeEach(function(done) { - client.ABitOfEverythingService.CreateBody({ + beforeEach(function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_CreateBody({ body: expected, - }).then(function(resp) { + }).then(function (resp) { created = resp.obj; - }).catch(function(err) { + }).catch(function (err) { fail(err); }).finally(done); }); - it('should look up an object by uuid', function(done) { - client.ABitOfEverythingService.Lookup({ + it('should look up an object by uuid', function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_Lookup({ uuid: created.uuid - }).then(function(resp) { + }).then(function (resp) { expect(resp.obj).toEqual(created); - }).catch(function(err) { + }).catch(function (err) { fail(err.errObj); }).finally(done); }); - it('should fail if no such object', function(done) { - client.ABitOfEverythingService.Lookup({ + it('should fail if no such object', function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_Lookup({ uuid: 'not_exist', - }).then(function(resp) { + }).then(function (resp) { fail('expected failure but succeeded'); - }).catch(function(err) { + }).catch(function (err) { expect(err.status).toBe(404); }).finally(done); }); }); - describe('Delete', function() { + describe('Delete', function () { var created; var expected = { - bool_value: true, - string_value: "strprefix/foo", + boolValue: true, + stringValue: "strprefix/foo", }; - beforeEach(function(done) { - client.ABitOfEverythingService.CreateBody({ + beforeEach(function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_CreateBody({ body: expected, - }).then(function(resp) { + }).then(function (resp) { created = resp.obj; - }).catch(function(err) { + }).catch(function (err) { fail(err); }).finally(done); }); - it('should delete an object by id', function(done) { - client.ABitOfEverythingService.Delete({ + it('should delete an object by id', function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_Delete({ uuid: created.uuid - }).then(function(resp) { + }).then(function (resp) { expect(resp.obj).toEqual({}); - }).catch(function(err) { + }).catch(function (err) { fail(err.errObj); - }).then(function() { - return client.ABitOfEverythingService.Lookup({ + }).then(function () { + return client.ABitOfEverythingService.ABitOfEverythingService_Lookup({ uuid: created.uuid }); - }).then(function(resp) { + }).then(function (resp) { fail('expected failure but succeeded'); - }). catch(function(err) { + }).catch(function (err) { expect(err.status).toBe(404); }).finally(done); }); }); - describe('GetRepeatedQuery', function() { + describe('GetRepeatedQuery', function () { var repeated; var expected = { - path_repeated_float_value: [1.5, -1.5], - path_repeated_double_value: [2.5, -2.5], - path_repeated_int64_value: ["4294967296", "-4294967296"], - path_repeated_uint64_value: ["0", "9223372036854775807"], - path_repeated_int32_value: [2147483647, -2147483648], - path_repeated_fixed64_value: ["0", "9223372036854775807"], - path_repeated_fixed32_value: [0, 4294967295], - path_repeated_bool_value: [true, false], - path_repeated_string_value: ["foo", "bar"], - path_repeated_bytes_value: ["AA==", "_w=="], - path_repeated_uint32_value: [4294967295, 0], - path_repeated_enum_value: ["ONE", "ONE"], - path_repeated_sfixed32_value: [-2147483648, 2147483647], - path_repeated_sfixed64_value: ["-4294967296", "4294967296"], - path_repeated_sint32_value: [2147483646, -2147483647], - path_repeated_sint64_value: ["4611686018427387903", "-4611686018427387904"] + pathRepeatedFloatValue: [1.5, -1.5], + pathRepeatedDoubleValue: [2.5, -2.5], + pathRepeatedInt64Value: ["4294967296", "-4294967296"], + pathRepeatedUint64Value: ["0", "9223372036854775807"], + pathRepeatedInt32Value: [2147483647, -2147483648], + pathRepeatedFixed64Value: ["0", "9223372036854775807"], + pathRepeatedFixed32Value: [0, 4294967295], + pathRepeatedBoolValue: [true, false], + pathRepeatedStringValue: ["foo", "bar"], + pathRepeatedBytesValue: ["AA==", "_w=="], + pathRepeatedUint32Value: [4294967295, 0], + pathRepeatedEnumValue: ["ONE", "ONE"], + pathRepeatedSfixed32Value: [-2147483648, 2147483647], + pathRepeatedSfixed64Value: ["-4294967296", "4294967296"], + pathRepeatedSint32Value: [2147483646, -2147483647], + pathRepeatedSint64Value: ["4611686018427387903", "-4611686018427387904"] }; - beforeEach(function(done) { - client.ABitOfEverythingService.GetRepeatedQuery(expected).then(function(resp) { + beforeEach(function (done) { + client.ABitOfEverythingService.ABitOfEverythingService_GetRepeatedQuery(expected).then(function (resp) { repeated = resp.obj; - }).catch(function(err) { + }).catch(function (err) { done.fail(err); }).then(done); }); - it('should echo the request back', function() { + it('should echo the request back', function () { // API will echo a non URL safe encoding - expected.path_repeated_bytes_value = ["AA==", "/w=="]; + expected.pathRepeatedBytesValue = ["AA==", "/w=="]; expect(repeated).toEqual(expected); }); }); }); - diff --git a/examples/internal/browser/echo_service.spec.js b/examples/internal/browser/echo_service.spec.js index 72aa13ca48e..01bef88b9a9 100644 --- a/examples/internal/browser/echo_service.spec.js +++ b/examples/internal/browser/echo_service.spec.js @@ -2,40 +2,50 @@ var SwaggerClient = require('swagger-client'); -describe('EchoService', function() { +describe('EchoService', function () { var client; - beforeEach(function(done) { + beforeEach(function (done) { new SwaggerClient({ url: "http://localhost:8080/openapiv2/echo_service.swagger.json", usePromise: true, - }).then(function(c) { + }).then(function (c) { client = c; done(); }); }); - describe('Echo', function() { - it('should echo the request back', function(done) { - client.EchoService.Echo( - {id: "foo"}, - {responseContentType: "application/json"} - ).then(function(resp) { - expect(resp.obj).toEqual({id: "foo"}); - }).catch(function(err) { + describe('Echo', function () { + it('should echo the request back', function (done) { + var expected = { + id: "foo", + num: "0", + status: null + }; + client.EchoService.EchoService_Echo( + expected, + { responseContentType: "application/json" } + ).then(function (resp) { + expect(resp.obj).toEqual(expected); + }).catch(function (err) { done.fail(err); }).then(done); }); }); - describe('EchoBody', function() { - it('should echo the request back', function(done) { - client.EchoService.EchoBody( - {body: {id: "foo"}}, - {responseContentType: "application/json"} - ).then(function(resp) { - expect(resp.obj).toEqual({id: "foo"}); - }).catch(function(err) { + describe('EchoBody', function () { + it('should echo the request back', function (done) { + var expected = { + id: "foo", + num: "0", + status: null + }; + client.EchoService.EchoService_EchoBody( + { body: expected }, + { responseContentType: "application/json" } + ).then(function (resp) { + expect(resp.obj).toEqual(expected); + }).catch(function (err) { done.fail(err); }).then(done); }); diff --git a/examples/internal/browser/package.json b/examples/internal/browser/package.json index 6704265ba27..f48b60cadd0 100644 --- a/examples/internal/browser/package.json +++ b/examples/internal/browser/package.json @@ -23,5 +23,8 @@ "mout": "^1.1.0", "bower-config": "^0.6.2", "configstore": "^4.0.0" + }, + "dependencies": { + "gulp-cli": "^2.3.0" } } From a094494e7281e289af72fb6f4a28ffe45d08bc1a Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 22 May 2022 22:14:53 -0400 Subject: [PATCH 1291/1518] Fix panic in parsing null time/duration in query (#2703) When using a timestamp or duration query parameter, a value of "null" would cause the query parameter parser to panic. Instead of supporting "null" in query parameters, which causes ambiguities since values aren't quoted, lets disallow null altogether. It isn't a breaking change since any existing uses of "null" would have caused a panic. Discovered while working on #2700 --- runtime/BUILD.bazel | 1 + runtime/query.go | 6 ------ runtime/query_fuzz_test.go | 35 +++++++++++++++++++++++++++++++++++ runtime/query_test.go | 18 ++++++++++++++++++ 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 runtime/query_fuzz_test.go diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 90b23e8b9e9..b5140a3c9d1 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -61,6 +61,7 @@ go_test( "mux_internal_test.go", "mux_test.go", "pattern_test.go", + "query_fuzz_test.go", "query_test.go", ], embed = [":runtime"], diff --git a/runtime/query.go b/runtime/query.go index c35f7dc69cb..65d0da47166 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -255,18 +255,12 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p var msg proto.Message switch msgDescriptor.FullName() { case "google.protobuf.Timestamp": - if value == "null" { - break - } t, err := time.Parse(time.RFC3339Nano, value) if err != nil { return protoreflect.Value{}, err } msg = timestamppb.New(t) case "google.protobuf.Duration": - if value == "null" { - break - } d, err := time.ParseDuration(value) if err != nil { return protoreflect.Value{}, err diff --git a/runtime/query_fuzz_test.go b/runtime/query_fuzz_test.go new file mode 100644 index 00000000000..687724caee1 --- /dev/null +++ b/runtime/query_fuzz_test.go @@ -0,0 +1,35 @@ +//go:build go1.18 + +package runtime_test + +import ( + "net/url" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" +) + +func FuzzPopulateQueryParameters(f *testing.F) { + f.Add("bool_value=true&bytes_value=YWJjMTIzIT8kKiYoKSctPUB-&double_value=2.5&duration_value=13h0m0s&enum_value=1&fieldmask_value=float_value%2Cdouble_value&float_value=1.5&int32_value=-2&int64_value=-1&map_value10%5Bkey%5D=1.5&map_value11%5B1.5%5D=value&map_value12%5Bkey%5D=2.5&map_value13%5B2.5%5D=value&map_value14%5Bkey%5D=true&map_value15%5Btrue%5D=value&map_value16%5Bkey%5D=2&map_value2%5Bkey%5D=-2&map_value3%5B-2%5D=value&map_value4%5Bkey%5D=-1&map_value5%5B-1%5D=value&map_value6%5Bkey%5D=3&map_value7%5B3%5D=value&map_value8%5Bkey%5D=4&map_value9%5B4%5D=value&map_value%5Bfourth%5D=&map_value%5Bkey%5D=value&map_value%5Bsecond%5D=bar&map_value%5Bthird%5D=zzz&map_value%5B~%21%40%23%24%25%5E%26%2A%28%29%5D=value&repeated_enum=1&repeated_enum=2&repeated_enum=0&repeated_message=1&repeated_message=2&repeated_message=3&repeated_value=a&repeated_value=b&repeated_value=c&string_value=str&struct_value=%7B%22a%22%3A%7B%22b%22%3A1%7D%7D&struct_value_value=%7B%22a%22%3A%7B%22b%22%3A1%7D%7D×tamp_value=2016-12-15T12%3A23%3A32.000000049Z&uint32_value=4&uint64_value=3&wrapper_bool_value=true&wrapper_bytes_value=YWJjMTIzIT8kKiYoKSctPUB-&wrapper_double_value=2.5&wrapper_float_value=1.5&wrapper_int32_value=-2&wrapper_int64_value=-1&wrapper_string_value=str&wrapper_u_int32_value=4&wrapper_u_int64_value=3") + f.Add("boolValue=true&bytesValue=Ynl0ZXM%3D&doubleValue=2.5&durationValue=13h0m0s&enumValue=1&fieldmaskValue=float_value%2Cdouble_value&floatValue=1.5&int32Value=-2&int64Value=-1&repeatedEnum=1&repeatedEnum=2&repeatedEnum=0&repeatedValue=a&repeatedValue=b&repeatedValue=c&stringValue=str&struct_value=%7B%7D&struct_value_value=%22%22×tampValue=2016-12-15T12%3A23%3A32.000000049Z&uint32Value=4&uint64Value=3&wrapperBoolValue=true&wrapperBytesValue=Ynl0ZXM%3D&wrapperDoubleValue=2.5&wrapperFloatValue=1.5&wrapperInt32Value=-2&wrapperInt64Value=-1&wrapperStringValue=str&wrapperUInt32Value=4&wrapperUInt64Value=3") + f.Add("enum_value=Z&repeated_enum=X&repeated_enum=2&repeated_enum=0&struct_value=%7B%22c%22%3A%5B1%2C2%5D%2C%22d%22%3A%5B%7B%22e%22%3A1%2C%22f%22%3A%7B%7D%7D%5D%7D&struct_value_value=%7B%7D") + f.Add("struct_value_value=%5B%5D") + f.Add("bool_value=true&double_value=2.5&float_value=1.5&int32_value=-2&int64_value=-1&repeated_value=a&repeated_value=b&repeated_value=c&string_value=str&uint32_value=4&uint64_value=3") + f.Add("boolValue=true&doubleValue=2.5&floatValue=1.5&int32Value=-2&int64Value=-1&repeatedValue=a&repeatedValue=b&repeatedValue=c&stringValue=str&uint32Value=4&uint64Value=") + f.Add("nested.nested.map_value%5Bfirst%5D=foo&nested.nested.map_value%5Bsecond%5D=bar&nested.nested.nested.repeated_value=a&nested.nested.nested.repeated_value=b&nested.nested.nested.repeated_value=c&nested.nested.nested.string_value=s&nested.nested.string_value=t&nested.string_value=u") + f.Add("oneof_string_value=foobar") + f.Add("nested_oneof_value_one.int64Value=-1&nested_oneof_value_one.string_value=foo") + f.Fuzz(func(t *testing.T, query string) { + in := &examplepb.ABitOfEverything{} + values, err := url.ParseQuery(query) + if err != nil { + return + } + err = runtime.PopulateQueryParameters(in, values, utilities.NewDoubleArray(nil)) + if err != nil { + return + } + }) +} diff --git a/runtime/query_test.go b/runtime/query_test.go index 4bdd8731fdf..bc885aaf28e 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -449,6 +449,24 @@ func TestPopulateParameters(t *testing.T) { }, }, }, + { + // Error on "null" + values: url.Values{ + "timestampValue": {"null"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{}, + wanterr: errors.New(`parsing field "timestamp_value": parsing time "null" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "null" as "2006"`), + }, + { + // Error on "null" + values: url.Values{ + "durationValue": {"null"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{}, + wanterr: errors.New(`parsing field "duration_value": time: invalid duration "null"`), + }, { // Don't allow setting a oneof more than once values: url.Values{ From 635bbea88bf12dd14ff70efd80e40b7e5aac6eed Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 22 May 2022 22:40:39 -0400 Subject: [PATCH 1292/1518] Migrate to Github Actions (#2700) --- .circleci/README.md | 8 - .circleci/config.yml | 229 - .devcontainer/devcontainer.json | 2 +- {.circleci => .github}/Dockerfile | 0 .github/README.md | 4 + .../protoc-gen-grpc-gateway/Dockerfile | 0 .../plugins/protoc-gen-openapiv2/Dockerfile | 0 .github/workflows/ci.yml | 145 + .github/workflows/cifuzz.yml | 26 - .github/workflows/golangci-lint.yml | 25 - .github/workflows/master.yml | 25 + .github/workflows/release.yml | 50 + .github/workflows/renovate.yml | 76 + CONTRIBUTING.md | 4 +- README.md | 16 +- docs/index.md | 3 +- examples/internal/browser/.gitignore | 1 - examples/internal/browser/package-lock.json | 5968 +++++++++++++++++ 18 files changed, 6279 insertions(+), 303 deletions(-) delete mode 100644 .circleci/README.md delete mode 100644 .circleci/config.yml rename {.circleci => .github}/Dockerfile (100%) create mode 100644 .github/README.md rename {.circleci => .github}/plugins/protoc-gen-grpc-gateway/Dockerfile (100%) rename {.circleci => .github}/plugins/protoc-gen-openapiv2/Dockerfile (100%) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/cifuzz.yml delete mode 100644 .github/workflows/golangci-lint.yml create mode 100644 .github/workflows/master.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/renovate.yml create mode 100644 examples/internal/browser/package-lock.json diff --git a/.circleci/README.md b/.circleci/README.md deleted file mode 100644 index fee06d429fe..00000000000 --- a/.circleci/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## gRPC-Gateway CI testing setup - -Contained within is the CI test setup for the Gateway. It runs on Circle CI. - -### Whats up with the Dockerfile? - -The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md). -The canonical repository for this Dockerfile is `ghcr.io/grpc-ecosystem/grpc-gateway/build-env`. diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 1abb2fd3e25..00000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,229 +0,0 @@ -version: 2.1 - -commands: - configure_bazel: - description: Create Bazel config file (.bazelrc) - steps: - - run: | - cat > .bazelrc \<< EOF - startup --output_base /home/vscode/.cache/_grpc_gateway_bazel - build --test_output errors - build --features race - # Workaround https://github.com/bazelbuild/bazel/issues/3645 - # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html - build --local_ram_resources=4096 # Circle Docker runners have 4G of memory - build --local_cpu_resources=2 # Circle Docker runners have 2 vCPU - EOF - generate: - steps: - - run: make install - - run: make clean - - run: make generate - - run: go mod tidy - renovate_git_amend_push: - description: Git amend and push changes - steps: - - run: | - git add . - if output=$(git status --porcelain) && [ ! -z "$output" ]; then - git config user.name "Renovate Bot" - git config user.email "bot@renovateapp.com" - git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/grpc-ecosystem/grpc-gateway.git - git commit --amend --no-edit - git push --force-with-lease origin ${CIRCLE_BRANCH} - fi - -executors: - build-env: - environment: - ## Split key to avoid github revoking it - password0: "99544cdcb19ad4e3fd64" - password1: "3ec86b2e5a431be2d72c" - GLOG_logtostderr: "1" - docker: - - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 - auth: - username: gateway-ci-user - password: ${password0}${password1} - -jobs: - build: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - run: go build ./... - test: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - run: go test -race -coverprofile=coverage.txt ./... - - run: bash <(curl -s https://codecov.io/bash) - node_test: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - run: go mod vendor - - run: > - cd examples/internal/browser && - npm install gulp-cli && - npm install && - ./node_modules/.bin/gulp - generate: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - generate - - run: git diff --exit-code - bazel: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - restore_cache: - keys: - - v3-bazel-cache-{{ checksum "repositories.bzl" }} - - v3-bazel-cache- - - configure_bazel - - run: - name: Check that Bazel BUILD files are up-to-date - command: | - bazel run //:gazelle && - git diff --exit-code - - run: - name: Check that repositories.bzl is up-to-date - command: | - bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && - git diff --exit-code - - run: - name: Check formatting of Bazel BUILD files - command: | - bazel run //:buildifier && - git diff --exit-code - - run: - name: Run tests with Bazel - command: bazel test //... - - save_cache: - key: v3-bazel-cache-{{ checksum "repositories.bzl" }} - paths: - - /home/vscode/.cache/_grpc_gateway_bazel - gorelease: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - run: - name: Install gorelease outside local module - command: | - cd $(mktemp -d) && - go mod init tmp && - go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease -base=v2.10.1 - push_bsr_plugins: - docker: - - image: circleci/golang - steps: - - setup_remote_docker - - checkout - - run: echo "${BUF_API_TOKEN}" | docker login --username grpcgatewaybot --password-stdin plugins.buf.build - - run: | - cd .circleci/plugins/protoc-gen-grpc-gateway && - docker build -t plugins.buf.build/grpc-ecosystem/grpc-gateway:${CIRCLE_TAG}-1 --build-arg=RELEASE_VERSION=${CIRCLE_TAG} . && - docker push plugins.buf.build/grpc-ecosystem/grpc-gateway:${CIRCLE_TAG}-1 - - run: | - cd .circleci/plugins/protoc-gen-openapiv2 && - docker build -t plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 --build-arg=RELEASE_VERSION=${CIRCLE_TAG} . && - docker push plugins.buf.build/grpc-ecosystem/openapiv2:${CIRCLE_TAG}-1 - proto_lint: - docker: - - image: bufbuild/buf:1.4.0 - steps: - - checkout - - run: buf build - - run: buf lint - - run: buf format -w && git diff --exit-code - - run: buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' - proto_push: - docker: - - image: bufbuild/buf:1.4.0 - steps: - - checkout - # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. - # It excludes all the files that we don't want to publish, just for the push step. - - run: echo -e " - examples\n - internal\n - runtime" >> buf.yaml - - run: BUF_TOKEN="${BUF_API_TOKEN}" buf push --tag "$CIRCLE_SHA1" - release: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - run: go mod vendor - - run: curl -sL https://git.io/goreleaser | bash - update-repositoriesbzl: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - restore_cache: - keys: - - v3-bazel-cache-{{ checksum "repositories.bzl" }} - - v3-bazel-cache- - - configure_bazel - - run: - name: Update repositories.bzl - command: | - bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories - - renovate_git_amend_push - regenerate: - executor: build-env - working_directory: /home/vscode/src/grpc-gateway - steps: - - checkout - - generate - - renovate_git_amend_push -workflows: - version: 2 - all: - jobs: - - build - - test - - node_test - - generate - - bazel - - gorelease - - proto_lint - - proto_push: - filters: - branches: - only: /^master$/ - - release: - filters: - branches: - ignore: /.*/ - tags: - only: /v[0-9]+(\.[0-9]+)*(-.*)*/ - - push_bsr_plugins: - filters: - branches: - ignore: /.*/ - tags: - only: /v[0-9]+(\.[0-9]+)*(-.*)*/ - - update-repositoriesbzl: - filters: - branches: - only: /renovate\/master-.+/ - tags: - ignore: /.*/ - - regenerate: - requires: - # Run after update-repositoriesbzl to avoid - # git conflicts - - update-repositoriesbzl - filters: - branches: - only: /renovate\/master-.+/ - tags: - ignore: /.*/ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0386e5f372c..2ce6f07d2b1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ { "name": "Go", "build": { - "dockerfile": "../.circleci/Dockerfile", + "dockerfile": "../.github/Dockerfile", "args": { "NODE_VERSION": "10" } diff --git a/.circleci/Dockerfile b/.github/Dockerfile similarity index 100% rename from .circleci/Dockerfile rename to .github/Dockerfile diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 00000000000..5364b0d9e97 --- /dev/null +++ b/.github/README.md @@ -0,0 +1,4 @@ +### Whats up with the Dockerfile? + +The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md). +The canonical repository for this Dockerfile is `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. diff --git a/.circleci/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile similarity index 100% rename from .circleci/plugins/protoc-gen-grpc-gateway/Dockerfile rename to .github/plugins/protoc-gen-grpc-gateway/Dockerfile diff --git a/.circleci/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile similarity index 100% rename from .circleci/plugins/protoc-gen-openapiv2/Dockerfile rename to .github/plugins/protoc-gen-openapiv2/Dockerfile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000000..dbb11435154 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,145 @@ +on: + - pull_request +permissions: + contents: read +name: CI +jobs: + build: + strategy: + matrix: + go-version: [1.17.x, 1.18.x] + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/setup-go@v3 + with: + go-version: ${{ matrix.go-version }} + - uses: actions/checkout@v3 + - run: go build ./... + test: + runs-on: ubuntu-latest + steps: + - uses: actions/setup-go@v3 + with: + check-latest: true + - uses: actions/checkout@v3 + - run: go test ./... + node_test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 10 + - uses: actions/setup-go@v3 + with: + check-latest: true + - run: > + cd examples/internal/browser && + npm install gulp-cli && + npm install && + ./node_modules/.bin/gulp + generate: + container: + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + options: "--user root" + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: make install + - run: make clean + - run: make generate + - run: go mod tidy + - run: git diff --exit-code + bazel: + container: + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + options: "--user root" + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + with: + path: /home/vscode/.cache/_grpc_gateway_bazel + key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} + restore-keys: v1-bazel-cache- + - name: Configure bazel + run: | + cat > .bazelrc << EOF + startup --output_base /home/vscode/.cache/_grpc_gateway_bazel + build --test_output errors + build --features race + # Workaround https://github.com/bazelbuild/bazel/issues/3645 + # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html + build --local_ram_resources=7168 # Github runners have 7G of memory + build --local_cpu_resources=2 # Github runners have 2 vCPU + EOF + - name: Check that Bazel BUILD files are up-to-date + run: bazel run //:gazelle && git diff --exit-code + - name: Check that repositories.bzl is up-to-date + run: | + bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && + git diff --exit-code + - name: Check formatting of Bazel BUILD files + run: bazel run //:buildifier && git diff --exit-code + - name: Run tests with Bazel + run: bazel test //... + gorelease: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + check-latest: true + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.1 + proto_lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + check-latest: true + - run: make install + - run: PATH=$PATH:~/go/bin buf build + - run: PATH=$PATH:~/go/bin buf lint + - run: PATH=$PATH:~/go/bin buf format -w && git diff --exit-code + - run: PATH=$PATH:~/go/bin buf breaking --path protoc-gen-openapiv2/ --against 'https://github.com/grpc-ecosystem/grpc-gateway.git#branch=master' + golangci: + permissions: + pull-requests: read # for golangci/golangci-lint-action to fetch pull requests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: golangci/golangci-lint-action@v2 + with: + version: v1.45 + args: --enable goimports + fuzz: + runs-on: ubuntu-latest + steps: + - name: Build Fuzzers + id: build + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + with: + oss-fuzz-project-name: "grpc-gateway" + dry-run: false + language: go + - name: Run Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + with: + oss-fuzz-project-name: "grpc-gateway" + fuzz-seconds: 600 + dry-run: false + language: go + - name: Upload Crash + uses: actions/upload-artifact@v1 + if: failure() && steps.build.outcome == 'success' + with: + name: artifacts + path: ./out/artifacts diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml deleted file mode 100644 index 1c6375180b6..00000000000 --- a/.github/workflows/cifuzz.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: CIFuzz -on: [pull_request] -jobs: - Fuzzing: - runs-on: ubuntu-latest - steps: - - name: Build Fuzzers - id: build - uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master - with: - oss-fuzz-project-name: 'grpc-gateway' - dry-run: false - language: go - - name: Run Fuzzers - uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master - with: - oss-fuzz-project-name: 'grpc-gateway' - fuzz-seconds: 600 - dry-run: false - language: go - - name: Upload Crash - uses: actions/upload-artifact@v1 - if: failure() && steps.build.outcome == 'success' - with: - name: artifacts - path: ./out/artifacts diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml deleted file mode 100644 index aa45f5d894d..00000000000 --- a/.github/workflows/golangci-lint.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: golangci-lint -on: - push: - tags: - - v* - branches: - - master - pull_request: -permissions: - contents: read - -jobs: - golangci: - permissions: - contents: read # for actions/checkout to fetch code - pull-requests: read # for golangci/golangci-lint-action to fetch pull requests - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: golangci-lint - uses: golangci/golangci-lint-action@v2 - with: - version: v1.45 - args: --enable goimports diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 00000000000..5d91e321018 --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,25 @@ +on: + push: + branches: + - master + paths: + - protoc-gen-openapiv2/options/*.proto +permissions: + contents: read +name: master +jobs: + proto_push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + check-latest: true + - run: make install + # Limit pushes to protoc-gen-openapiv2 files. This is a total hack. + # It excludes all the files that we don't want to publish, just for the push step. + - run: echo -e " - examples\n - internal\n - runtime" >> buf.yaml + - run: buf push --tag "${{ github.sha }}" + env: + BUF_TOKEN: ${{ secrets.BUF_TOKEN }} + PATH: $PATH:~/go/bin diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..bfe267e8b2c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,50 @@ +on: + push: + tags: + - v2.[0-9]+.[0-9]+ +permissions: + contents: read +name: release +jobs: + goreleaser: + runs-on: ubuntu-latest + permissions: + packages: write + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-go@v3 + with: + check-latest: true + - uses: goreleaser/goreleaser-action@v2 + with: + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + push_bsr_plugins: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: docker/setup-buildx-action@v2 + - uses: docker/login-action@v2 + with: + registry: plugins.buf.build + username: grpcgatewaybot + password: ${{ secrets.BUF_TOKEN }} + - uses: docker/build-push-action@v3 + with: + push: true + tags: plugins.buf.build/grpc-ecosystem/grpc-gateway:${{ github.ref_name }}-1 + context: .github/plugins/protoc-gen-grpc-gateway + platforms: linux/amd64 + build-args: | + RELEASE_VERSION=${{ github.ref_name }} + - uses: docker/build-push-action@v3 + with: + push: true + tags: plugins.buf.build/grpc-ecosystem/openapiv2:${{ github.ref_name }}-1 + context: .github/plugins/protoc-gen-openapiv2 + platforms: linux/amd64 + build-args: | + RELEASE_VERSION=${{ github.ref_name }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 00000000000..196cb8bb313 --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,76 @@ +on: + push: + branches: + - renovate/master-* +permissions: + contents: read +name: renovate +jobs: + update_repositoriesbzl: + container: + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + options: "--user root" + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v3 + with: + path: /home/vscode/.cache/_grpc_gateway_bazel + key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} + restore-keys: v1-bazel-cache- + - name: Configure bazel + run: | + cat > .bazelrc << EOF + startup --output_base /home/vscode/.cache/_grpc_gateway_bazel + build --test_output errors + build --features race + # Workaround https://github.com/bazelbuild/bazel/issues/3645 + # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html + build --local_ram_resources=7168 # Github runners have 7G of memory + build --local_cpu_resources=2 # Github runners have 2 vCPU + EOF + - run: bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories + - run: | + git add . + if output=$(git status --porcelain) && [ ! -z "$output" ]; then + git config user.name "Renovate Bot" + git config user.email "bot@renovateapp.com" + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git commit --amend --no-edit + git push --force-with-lease origin ${{ github.ref_name }} + fi + regenerate: + container: + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + options: "--user root" + credentials: + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + runs-on: ubuntu-latest + permissions: + contents: write + needs: + # Run after update_repositoriesbzl to avoid + # git conflicts + - update_repositoriesbzl + steps: + - uses: actions/checkout@v3 + - run: make install + - run: make clean + - run: make generate + - run: go mod tidy + - run: | + git add . + if output=$(git status --porcelain) && [ ! -z "$output" ]; then + git config user.name "Renovate Bot" + git config user.email "bot@renovateapp.com" + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git commit --amend --no-edit + git push --force-with-lease origin ${{ github.ref_name }} + fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 23e2237ead1..c6c8cd6dbed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -52,8 +52,6 @@ To make a release, follow these steps: 1. Decide on a release version. The `gorelease` job can recommend whether the new release should be a patch or minor release. - See [CircleCI](https://app.circleci.com/pipelines/github/grpc-ecosystem/grpc-gateway/126/workflows/255a8a04-de9c-46a9-a66b-f107d2b39439/jobs/6428) - for an example. 1. Tag the release on `master`. 1. The release can be created using the command line, or also through GitHub's [releases UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new). @@ -61,5 +59,5 @@ To make a release, follow these steps: reviewed by another maintainer. 1. Update the release description. Try to include some of the highlights of this release, ideally with links to the PRs and crediting the contributors. -1. Update the gorelease job in .circleci/config.yaml to point to the new release version. +1. Update the gorelease job in .github/ci.yaml to point to the new release version. 1. Sit back and pat yourself on the back for a job well done :clap:. diff --git a/README.md b/README.md index f40e29fff57..f45e6901452 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@

      gRPC to JSON proxy generator following the gRPC HTTP spec

      - - +![example workflow](https://github.com/github/docs/actions/workflows/main.yml/badge.svg) + @@ -430,17 +430,17 @@ Alternatively, see the section on remotely managed plugin versions below. Note that this plugin also supports generating OpenAPI definitions for unannotated methods; use the `generate_unbound_methods` option to enable this. - It is possible with the HTTP mapping for a gRPC service method to create duplicate mappings + It is possible with the HTTP mapping for a gRPC service method to create duplicate mappings with the only difference being constraints on the path parameter. - `/v1/{name=projects/*}` and `/v1/{name=organizations/*}` both become `/v1/{name}`. When + `/v1/{name=projects/*}` and `/v1/{name=organizations/*}` both become `/v1/{name}`. When this occurs the plugin will rename the path parameter with a "_1" (or "_2" etc) suffix to differentiate the different operations. So in the above example, the 2nd path would become `/v1/{name_1=organizations/*}`. This can also cause OpenAPI clients to URL encode the "/" that is - part of the path parameter as that is what OpenAPI defines in the specification. To allow gRPC gateway to - accept the URL encoded slash and still route the request, use the UnescapingModeAllCharacters or - UnescapingModeLegacy (which is the default currently though may change in future versions). See - [Customizing Your Gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/) + part of the path parameter as that is what OpenAPI defines in the specification. To allow gRPC gateway to + accept the URL encoded slash and still route the request, use the UnescapingModeAllCharacters or + UnescapingModeLegacy (which is the default currently though may change in future versions). See + [Customizing Your Gateway](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/) for more information. ## Usage with remote plugins diff --git a/docs/index.md b/docs/index.md index 5139b2fd3c7..dde4ddc5f19 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,8 +18,7 @@ gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf ## Getting started - - + diff --git a/examples/internal/browser/.gitignore b/examples/internal/browser/.gitignore index 1dcc590b085..75ce18e9269 100644 --- a/examples/internal/browser/.gitignore +++ b/examples/internal/browser/.gitignore @@ -1,3 +1,2 @@ /bower_components /node_modules -/package-lock.json diff --git a/examples/internal/browser/package-lock.json b/examples/internal/browser/package-lock.json new file mode 100644 index 00000000000..18b31aa9262 --- /dev/null +++ b/examples/internal/browser/package-lock.json @@ -0,0 +1,5968 @@ +{ + "name": "grpc-gateway-example", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "dev": true + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha512-u1L0ZLywRziOVjUhRxI0Qg9G+4RnFB9H/Rq40YWn0dieDgO7vAYeJz6jKAO6t/aruzlDFLAPkQTT87e+f8Imaw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha512-JnJpAS0p9RmixkOvW2XwDxxzs1bd4/VAGIl6Q0EC5YOo+p+hqIhtDhn/nmFnB/xUNXbLkpE2mOjgVIBRKD4xYw==", + "dev": true + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha512-phbvN+yOk05EGoFcV/0S8N8ShnJqf6VCWRAw5he2gvRwBubFt/OzmcTNGqBt5b7Y4RK3YCgf6jrgGSR0Cwtsgw==", + "dev": true, + "requires": { + "readable-stream": "~2.0.5" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha512-KbiZEa9/vofNcVJXGwdWWn25reQ3V3dHBWbS07FTF3/TOehLnm9GEhJV4T6ZvGPkShRpmUqYwnaCrkj0mRnP6Q==", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "bower": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.14.tgz", + "integrity": "sha512-8Rq058FD91q9Nwthyhw0la9fzpBz0iwZTrt51LWl+w+PnJgZk9J+5wp3nibsJcIUPglMYXr4NRBaR+TUj0OkBQ==", + "dev": true + }, + "bower-config": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/bower-config/-/bower-config-0.6.2.tgz", + "integrity": "sha512-P9qlrsulpuklPusQ6H+44c+xBokDh6Tl5vOP6LDcebjqDitrqe/fn27uxknRMTj3LLMvqsOfjV4h+UWNCkmsfg==", + "dev": true, + "requires": { + "graceful-fs": "~2.0.0", + "mout": "~0.9.0", + "optimist": "~0.6.0", + "osenv": "0.0.3" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true + }, + "mout": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/mout/-/mout-0.9.1.tgz", + "integrity": "sha1-hPDz/WrMcxf2PeKv/cwM7gCbBHc=", + "dev": true + } + } + }, + "bower-logger": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/bower-logger/-/bower-logger-0.2.2.tgz", + "integrity": "sha512-2x4n3GsmV6w3BeMK3zHv6T88HbuMQH2MJ0KZNbQMbJq8XPARdH1p9/CXsdkOBW5sMcnBCOVGxutDJYbkh2A7QQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha512-hnvbMhZ/Ete34qnoKKyjikiYQfZbl89d5UZ29cz3EG13cv/8VRyM8Zs84luB/O7BRzC3qSng9dVovJ6jghcAvg==", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==" + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", + "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "requires": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + } + } + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "requires": { + "kind-of": "^5.0.2" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "~1.3.0" + } + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "extract-zip": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "dev": true, + "requires": { + "concat-stream": "1.5.0", + "debug": "0.7.4", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", + "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + } + }, + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "flat-map": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/flat-map/-/flat-map-0.1.0.tgz", + "integrity": "sha1-Qw7NcEDGbuhAAYgsdZMhPLhVLAQ=", + "dev": true, + "requires": { + "babel-runtime": "^6.11.6", + "is-stream": "^1.1.0", + "through": "^2.3.8" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "dev": true, + "requires": { + "async": "^2.0.1", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "~0.1.0" + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + } + } + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "^0.5.1" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "^0.1.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "^1.1.1" + } + } + } + }, + "gulp-bower": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/gulp-bower/-/gulp-bower-0.0.13.tgz", + "integrity": "sha1-fKTjxaWZ0I+torHAVMzozeTnQjU=", + "dev": true, + "requires": { + "bower": "^1.3.12", + "gulp-util": "^3.0.1", + "inquirer": "^0.11.2", + "through2": "0.6.2", + "walk": "2.3.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.2.tgz", + "integrity": "sha1-UyZYJMVV5/zcQRHc3FLH3mRjbHU=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.28 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + }, + "gulp-exit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gulp-exit/-/gulp-exit-0.0.2.tgz", + "integrity": "sha1-CCMTVIaDrQqwXUMNelYzMNTmE3A=", + "dev": true + }, + "gulp-jasmine-browser": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/gulp-jasmine-browser/-/gulp-jasmine-browser-1.9.1.tgz", + "integrity": "sha512-LsrOZ1JxoF0rri0NObyTZR1YHEOopgklBmOC37L6zayFBxjhKDG4RpqCRR8BCr67WHYO6mkSWEM8w1oQaQoJ6Q==", + "dev": true, + "requires": { + "babel-polyfill": "^6.3.14", + "babel-runtime": "^6.3.19", + "express": "^4.13.3", + "flat-map": "^0.1.0", + "jasmine-core": "^2.4.1", + "jasmine-json-stream-reporter": "^0.3.1", + "jasmine-profile-reporter": "^0.0.2", + "jasmine-terminal-reporter": "^1.0.2", + "lazypipe": "^1.0.1", + "lodash.once": "^4.0.0", + "mime": "^1.3.4", + "portastic": "^1.0.1", + "qs": "^5.2.0", + "serve-favicon": "^2.3.0", + "sourcemapped-stacktrace": "^1.0.1", + "split2": "^2.1.0", + "thenify": "^3.1.1", + "through2": "^2.0.0", + "through2-reduce": "^1.1.1", + "vinyl": "^1.2.0" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulp-process": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/gulp-process/-/gulp-process-0.1.2.tgz", + "integrity": "sha1-yN2zkzusEMzuLggSYUCX6fe6TPY=", + "dev": true, + "requires": { + "gulp-util": "^3.0.6", + "through2": "^2.0.0" + } + }, + "gulp-shell": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.5.2.tgz", + "integrity": "sha1-pJWcoGUa0ce7/nCy0K27tOGuqY0=", + "dev": true, + "requires": { + "async": "^1.5.0", + "gulp-util": "^3.0.7", + "lodash": "^4.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "^1.0.0" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inquirer": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", + "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jasmine": { + "version": "2.99.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", + "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.99.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasmine-json-stream-reporter": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/jasmine-json-stream-reporter/-/jasmine-json-stream-reporter-0.3.1.tgz", + "integrity": "sha1-8zMKYL2t5jeeF80j00O7nu+Q08w=", + "dev": true, + "requires": { + "through2": "^2.0.1", + "uuid": "^2.0.2" + } + }, + "jasmine-profile-reporter": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jasmine-profile-reporter/-/jasmine-profile-reporter-0.0.2.tgz", + "integrity": "sha1-sQ3a+at1t7xsTJ9G8kpnoEVfOXg=", + "dev": true + }, + "jasmine-terminal-reporter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/jasmine-terminal-reporter/-/jasmine-terminal-reporter-1.0.3.tgz", + "integrity": "sha1-iW8eyP30v2rs3UHFA+2nNH9hUms=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "pluralize": "^1.2.1" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonpointer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", + "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + } + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazypipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lazypipe/-/lazypipe-1.0.2.tgz", + "integrity": "sha512-CrU+NYdFHW8ElaeXCWz5IbmetiYVYq1fOCmpdAeZ8L+khbv1e7EnshyjlKqkO+pJbVPrsJQnHbVxEiLujG6qhQ==", + "dev": true, + "requires": { + "stream-combiner": "*" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash-compat": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/lodash-compat/-/lodash-compat-3.10.2.tgz", + "integrity": "sha1-xpQBKKnTD46QLNLPmf0Muk7PwYM=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "^1.0.0" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + } + } + }, + "mout": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.3.tgz", + "integrity": "sha512-vtE+eZcSj/sBkIp6gxB87MznryWP+gHIp0XX9SKrzA5TAkvz6y7VTuNruBjYdJozd8NY5i9XVIsn8cn3SwNjzg==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "natives": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.1.4", + "buffer": "^4.9.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "0.0.1", + "os-browserify": "^0.2.0", + "path-browserify": "0.0.0", + "process": "^0.11.0", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.0.5", + "stream-browserify": "^2.0.1", + "stream-http": "^2.3.1", + "string_decoder": "^0.10.25", + "timers-browserify": "^2.0.2", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.1.tgz", + "integrity": "sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" + } + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "osenv": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz", + "integrity": "sha1-zWrY3bKQkVrZ4idlV2Al1BHynLY=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "phantomjs": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-2.1.7.tgz", + "integrity": "sha1-xpEPZ5NcNyhbYRQyn8LyfV8+MTQ=", + "dev": true, + "requires": { + "extract-zip": "~1.5.0", + "fs-extra": "~0.26.4", + "hasha": "^2.2.0", + "kew": "~0.7.0", + "progress": "~1.1.8", + "request": "~2.67.0", + "request-progress": "~2.0.1", + "which": "~1.2.2" + }, + "dependencies": { + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "portastic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/portastic/-/portastic-1.0.1.tgz", + "integrity": "sha1-HJgF1D+uj2pAzw28d5QJGi6dDSo=", + "dev": true, + "requires": { + "bluebird": "^2.9.34", + "commander": "^2.8.1", + "debug": "^2.2.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", + "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "request": { + "version": "2.67.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", + "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "bl": "~1.0.0", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~1.0.0-rc3", + "har-validator": "~2.0.2", + "hawk": "~3.1.0", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.0", + "qs": "~5.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.2.0", + "tunnel-agent": "~0.4.1" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "requires": { + "sver-compat": "^1.5.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sourcemapped-stacktrace": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.11.tgz", + "integrity": "sha512-O0pcWjJqzQFVsisPlPXuNawJHHg9N9UgpJ/aDmvi9+vnS3x1C0NhwkVFzzZ1VN0Xo+bekyweoqYvBw5ZBKiNnQ==", + "dev": true, + "requires": { + "source-map": "0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + } + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "stream-consume": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", + "dev": true + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "superagent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", + "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.0.6", + "debug": "^2.2.0", + "extend": "^3.0.0", + "form-data": "1.0.0-rc4", + "formidable": "^1.0.17", + "methods": "^1.1.1", + "mime": "^1.3.4", + "qs": "^6.1.0", + "readable-stream": "^2.0.5" + }, + "dependencies": { + "form-data": { + "version": "1.0.0-rc4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", + "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", + "dev": true, + "requires": { + "async": "^1.5.2", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.10" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "swagger-client": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-2.2.21.tgz", + "integrity": "sha1-WWa+I0dyRm5EcW9l4yAIFm2u66Q=", + "dev": true, + "requires": { + "btoa": "^1.1.2", + "cookiejar": "^2.0.1", + "js-yaml": "^3.3.0", + "lodash-compat": "^3.5.0", + "q": "^1.4.1", + "superagent": "^2.2" + } + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-reduce": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/through2-reduce/-/through2-reduce-1.1.1.tgz", + "integrity": "sha1-QCv5qWQO//9RNpkbx9xyoqdnJRw=", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.1" + } + }, + "tildify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", + "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", + "dev": true, + "requires": { + "natives": "^1.1.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + } + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "walk": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.3.tgz", + "integrity": "sha1-tMDoxCRkwW274dcWZnZerAeBnl8=", + "dev": true, + "requires": { + "foreachasync": "3.x" + } + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "^0.9.0", + "chokidar": "^1.0.0", + "graceful-fs": "^4.1.2" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==", + "dev": true + } + } + }, + "webpack": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", + "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", + "dev": true, + "requires": { + "acorn": "^3.0.0", + "async": "^1.3.0", + "clone": "^1.0.2", + "enhanced-resolve": "~0.9.0", + "interpret": "^0.6.4", + "loader-utils": "^0.2.11", + "memory-fs": "~0.3.0", + "mkdirp": "~0.5.0", + "node-libs-browser": "^0.7.0", + "optimist": "~0.6.0", + "supports-color": "^3.1.0", + "tapable": "~0.1.8", + "uglify-js": "~2.7.3", + "watchpack": "^0.2.1", + "webpack-core": "~0.6.9" + }, + "dependencies": { + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "webpack-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpack-stream/-/webpack-stream-3.2.0.tgz", + "integrity": "sha1-Oh0WD7EdQXJ7fObzL3IkZPmLIYY=", + "dev": true, + "requires": { + "gulp-util": "^3.0.7", + "lodash.clone": "^4.3.2", + "lodash.some": "^4.2.2", + "memory-fs": "^0.3.0", + "through": "^2.3.8", + "vinyl": "^1.1.0", + "webpack": "^1.12.9" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "~1.0.1" + } + } + } +} From 9ad76c7ca8080950b3ef7eb7a75277e76dee0399 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 22 May 2022 23:11:51 -0400 Subject: [PATCH 1293/1518] Add protobuf and grpc runtime versions to buf plugins (#2702) --- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 12 ++++++++++++ .github/workflows/release.yml | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index 3174e13bba4..b1e5c5b7500 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -8,6 +8,18 @@ RUN go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway FROM scratch +ARG RELEASE_VERSION +ARG GO_PROTOBUF_RELEASE_VERSION +ARG GO_GRPC_RELEASE_VERSION + +# Runtime dependencies +LABEL "build.buf.plugins.runtime_library_versions.0.name"="github.com/grpc-ecosystem/grpc-gateway" +LABEL "build.buf.plugins.runtime_library_versions.0.version"="${RELEASE_VERSION}" +LABEL "build.buf.plugins.runtime_library_versions.1.name"="google.golang.org/protobuf" +LABEL "build.buf.plugins.runtime_library_versions.1.version"="${GO_PROTOBUF_RELEASE_VERSION}" +LABEL "build.buf.plugins.runtime_library_versions.2.name"="google.golang.org/grpc" +LABEL "build.buf.plugins.runtime_library_versions.2.version"="${GO_GRPC_RELEASE_VERSION}" + COPY --from=builder /go/bin/protoc-gen-grpc-gateway /usr/local/bin/protoc-gen-grpc-gateway ENTRYPOINT ["/usr/local/bin/protoc-gen-grpc-gateway"] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bfe267e8b2c..0cf27e83135 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,6 +32,12 @@ jobs: registry: plugins.buf.build username: grpcgatewaybot password: ${{ secrets.BUF_TOKEN }} + - name: Set protobuf-version + run: echo ::set-output name=version::$(go list -m -f '{{.Version}}' google.golang.org/protobuf) + id: protobuf-version + - name: Set grpc-version + run: echo ::set-output name=version::$(go list -m -f '{{.Version}}' google.golang.org/grpc) + id: grpc-version - uses: docker/build-push-action@v3 with: push: true @@ -40,6 +46,8 @@ jobs: platforms: linux/amd64 build-args: | RELEASE_VERSION=${{ github.ref_name }} + GO_PROTOBUF_RELEASE_VERSION=${{ steps.protobuf-version.outputs.version }} + GO_GRPC_RELEASE_VERSION=${{ steps.grpc-version.outputs.version }} - uses: docker/build-push-action@v3 with: push: true From caddca2f6737559b6f543a9834f105e7d4a741ee Mon Sep 17 00:00:00 2001 From: ZiQiang Chen Date: Tue, 24 May 2022 06:34:48 +0800 Subject: [PATCH 1294/1518] Fix readme display error (#2706) --- .github/{README.md => README_GITHUB.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{README.md => README_GITHUB.md} (100%) diff --git a/.github/README.md b/.github/README_GITHUB.md similarity index 100% rename from .github/README.md rename to .github/README_GITHUB.md From fea255bedb497b31c81a92e7ae22d07525bafffc Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 23 May 2022 18:38:07 -0400 Subject: [PATCH 1295/1518] Fix README display --- README.md | 3 +-- docs/index.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f45e6901452..74936a0ac3f 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@

      gRPC to JSON proxy generator following the gRPC HTTP spec

      -![example workflow](https://github.com/github/docs/actions/workflows/main.yml/badge.svg) - + diff --git a/docs/index.md b/docs/index.md index dde4ddc5f19..88910e1484a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,7 +18,7 @@ gRPC-Gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf ## Getting started - + From d161009efb445a1a4a14ec9518463382f0a7c257 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 23 May 2022 18:48:25 -0400 Subject: [PATCH 1296/1518] Include ARM64 builds in releases --- .goreleaser.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.goreleaser.yml b/.goreleaser.yml index ffbe2430c71..aeb78fe380f 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -10,6 +10,7 @@ builds: - windows goarch: - amd64 + - arm64 - main: ./protoc-gen-openapiv2/main.go id: protoc-gen-openapiv2 binary: protoc-gen-openapiv2 @@ -21,6 +22,7 @@ builds: - windows goarch: - amd64 + - arm64 archives: - name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" format: binary From 3849b8a0cf8a66fe2799ff9dc1857f0097d13411 Mon Sep 17 00:00:00 2001 From: Kurochan Date: Tue, 24 May 2022 07:49:18 +0900 Subject: [PATCH 1297/1518] openapiv2: fix comment (#2701) --- protoc-gen-openapiv2/options/openapiv2.pb.go | 4 ++-- protoc-gen-openapiv2/options/openapiv2.proto | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 3d6fef4dcd2..03c19a34a65 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -313,7 +313,7 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // info: { // title: "Echo API"; // version: "1.0"; -// description: "; +// description: ""; // contact: { // name: "gRPC-Gateway project"; // url: "https://github.com/grpc-ecosystem/grpc-gateway"; @@ -880,7 +880,7 @@ func (x *Response) GetExtensions() map[string]*structpb.Value { // info: { // title: "Echo API"; // version: "1.0"; -// description: "; +// description: ""; // contact: { // name: "gRPC-Gateway project"; // url: "https://github.com/grpc-ecosystem/grpc-gateway"; diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index eb8f06e5beb..36a2b978fdf 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -26,7 +26,7 @@ enum Scheme { // info: { // title: "Echo API"; // version: "1.0"; -// description: "; +// description: ""; // contact: { // name: "gRPC-Gateway project"; // url: "https://github.com/grpc-ecosystem/grpc-gateway"; @@ -248,7 +248,7 @@ message Response { // info: { // title: "Echo API"; // version: "1.0"; -// description: "; +// description: ""; // contact: { // name: "gRPC-Gateway project"; // url: "https://github.com/grpc-ecosystem/grpc-gateway"; From 5bfd6f2ba6012b51dc08ee148de20d8d78985350 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 23 May 2022 22:24:06 -0400 Subject: [PATCH 1298/1518] Correct goreleaser permissions --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0cf27e83135..738b7dc62aa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ jobs: goreleaser: runs-on: ubuntu-latest permissions: - packages: write + contents: write steps: - uses: actions/checkout@v3 with: From 32ac6fd93a3c9ef9597956500d45194501450a9c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 23 May 2022 22:37:07 -0400 Subject: [PATCH 1299/1518] Update gorle --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dbb11435154..e544518c204 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,7 +97,7 @@ jobs: - uses: actions/setup-go@v3 with: check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.1 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.2 proto_lint: runs-on: ubuntu-latest steps: From f3fa3ce6d8e087c338e807afccc75d117f2a4b13 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 May 2022 20:58:47 -0400 Subject: [PATCH 1300/1518] chore(deps): update dependency com_google_protobuf to v3.21.0 (master) (#2716) * chore(deps): update dependency com_google_protobuf to v3.21.0 * Fix build Co-authored-by: Renovate Bot Co-authored-by: Johan Brandhorst-Satzkorn --- WORKSPACE | 6 +++--- protoc-gen-openapiv2/defs.bzl | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 2b207262dc3..f6038bab27d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "8b28fdd45bab62d15db232ec404248901842e5340299a57765e48abe8a80d930", - strip_prefix = "protobuf-3.20.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.20.1.tar.gz"], + sha256 = "e644f9c50997b9a20ef363783d644c13be39ee330077b74aeb2a5ca680f966e9", + strip_prefix = "protobuf-3.21.0", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.0.tar.gz"], ) http_archive( diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index 286121015d2..b5805e9a740 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -349,16 +349,16 @@ protoc_gen_openapiv2 = rule( "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, - cfg = "host", + cfg = "exec", ), "_well_known_protos": attr.label( - default = "@com_google_protobuf//:well_known_protos", + default = "@com_google_protobuf//:well_known_type_protos", allow_files = True, ), "_protoc_gen_openapi": attr.label( default = Label("//protoc-gen-openapiv2:protoc-gen-openapiv2"), executable = True, - cfg = "host", + cfg = "exec", ), }, implementation = _proto_gen_openapi_impl, From 0de16aa29cb8cc7a4655b268e9aea8c0999daf80 Mon Sep 17 00:00:00 2001 From: Andrew Haines Date: Fri, 27 May 2022 01:55:56 +0100 Subject: [PATCH 1301/1518] protoc-gen-openapiv2: Fix schema types for `Value` and `Empty` well-known types (#2719) * protoc-gen-openapiv2: Don't generate object schemas for `google.protobuf.Value` * protoc-gen-openapiv2: Generate object schemas for `google.protobuf.Empty` * Regenerate files --- .../internal/clients/abe/api/swagger.yaml | 39 ++++++++++++------- .../internal/clients/echo/api/swagger.yaml | 8 ++-- .../a_bit_of_everything.swagger.json | 19 +++++++++ .../proto/examplepb/echo_service.swagger.json | 4 +- .../examplepb/generated_input.swagger.json | 2 + .../proto/examplepb/stream.swagger.json | 2 + .../proto/examplepb/wrappers.swagger.json | 2 + .../internal/genopenapi/BUILD.bazel | 1 + .../internal/genopenapi/template.go | 6 +-- .../internal/genopenapi/template_test.go | 22 +++++++++-- .../examplepb/non_standard_names.swagger.json | 8 +--- 11 files changed, 80 insertions(+), 33 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 07662d160e4..6a9cd7617d4 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1364,7 +1364,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -1718,7 +1719,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -1790,7 +1792,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2237,7 +2240,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2288,7 +2292,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2418,7 +2423,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2449,7 +2455,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2525,7 +2532,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2556,7 +2564,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2598,7 +2607,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2637,7 +2647,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2681,7 +2692,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." @@ -2720,7 +2732,8 @@ paths: responses: 200: description: "A successful response." - schema: {} + schema: + type: "object" 403: description: "Returned when the user does not have permission to access\ \ the resource." diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 950c4482401..8804e058fee 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -585,14 +585,12 @@ definitions: structField: type: "object" properties: {} - valueField: - type: "object" - properties: {} + valueField: {} description: "DynamicMessage represents a message which can have its structure\n\ built dynamically using Struct and Values." example: structField: "{}" - valueField: "{}" + valueField: "" examplepbDynamicMessageUpdate: type: "object" properties: @@ -603,7 +601,7 @@ definitions: example: body: structField: "{}" - valueField: "{}" + valueField: "" updateMask: "updateMask" examplepbEmbedded: type: "object" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index f102e42e38f..e70ba263778 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1202,6 +1202,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -1915,6 +1916,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -2055,6 +2057,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { @@ -2225,6 +2228,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -2734,6 +2738,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { @@ -3019,6 +3024,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3160,6 +3166,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { @@ -3284,6 +3291,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3425,6 +3433,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { @@ -3689,6 +3698,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3734,6 +3744,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3827,6 +3838,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3888,6 +3900,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3933,6 +3946,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -3994,6 +4008,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -4051,6 +4066,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -4194,6 +4210,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { @@ -4326,6 +4343,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -4517,6 +4535,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 3d506edd570..9f0a11dae3f 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -685,9 +685,7 @@ "structField": { "type": "object" }, - "valueField": { - "type": "object" - } + "valueField": {} }, "description": "DynamicMessage represents a message which can have its structure\nbuilt dynamically using Struct and Values." }, diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 99b83e2a0d3..5a56f94ec54 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -23,6 +23,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -189,6 +190,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 0025d8ebd1d..eb26e62d42a 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -54,6 +54,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -316,6 +317,7 @@ } }, "oneofEmpty": { + "type": "object", "properties": {} }, "oneofString": { diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index d898f99d6cb..44d8b61a897 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -155,6 +155,7 @@ "200": { "description": "A successful response.", "schema": { + "type": "object", "properties": {} } }, @@ -171,6 +172,7 @@ "in": "body", "required": true, "schema": { + "type": "object", "properties": {} } } diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index f52b0045539..3ba883314d8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -65,6 +65,7 @@ go_test( "@org_golang_google_protobuf//types/descriptorpb", "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/durationpb", + "@org_golang_google_protobuf//types/known/emptypb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", "@org_golang_google_protobuf//types/known/wrapperspb", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index a6f0f4f4cab..e066e62f881 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -88,13 +88,13 @@ var wktSchemas = map[string]schemaCore{ ".google.protobuf.BoolValue": { Type: "boolean", }, - ".google.protobuf.Empty": {}, - ".google.protobuf.Struct": { + ".google.protobuf.Empty": { Type: "object", }, - ".google.protobuf.Value": { + ".google.protobuf.Struct": { Type: "object", }, + ".google.protobuf.Value": {}, ".google.protobuf.ListValue": { Type: "array", Items: (*openapiItemsObject)(&schemaCore{ diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 1105a8b4372..7535eee4b66 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -26,6 +26,7 @@ import ( "google.golang.org/protobuf/types/descriptorpb" "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" "google.golang.org/protobuf/types/known/wrapperspb" @@ -3500,6 +3501,22 @@ func TestSchemaOfField(t *testing.T) { }, }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("empty_field"), + TypeName: proto.String(".google.protobuf.Empty"), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + Properties: &openapiSchemaObjectProperties{}, + }, + }, { field: &descriptor.Field{ FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ @@ -3732,9 +3749,7 @@ func TestSchemaOfField(t *testing.T) { }, refs: make(refMap), expected: openapiSchemaObject{ - schemaCore: schemaCore{ - Type: "object", - }, + schemaCore: schemaCore{}, }, }, { @@ -4031,6 +4046,7 @@ func TestSchemaOfField(t *testing.T) { GoPackage: proto.String("third_party/google"), }, MessageType: []*descriptorpb.DescriptorProto{ + protodesc.ToDescriptorProto((&emptypb.Empty{}).ProtoReflect().Descriptor()), protodesc.ToDescriptorProto((&structpb.Struct{}).ProtoReflect().Descriptor()), protodesc.ToDescriptorProto((&structpb.Value{}).ProtoReflect().Descriptor()), protodesc.ToDescriptorProto((&structpb.ListValue{}).ProtoReflect().Descriptor()), diff --git a/runtime/internal/examplepb/non_standard_names.swagger.json b/runtime/internal/examplepb/non_standard_names.swagger.json index 8ebf47dffbb..b2a65636629 100644 --- a/runtime/internal/examplepb/non_standard_names.swagger.json +++ b/runtime/internal/examplepb/non_standard_names.swagger.json @@ -130,9 +130,7 @@ "structField": { "type": "object" }, - "valueField": { - "type": "object" - } + "valueField": {} }, "description": "NonStandardMessage has oddly named fields." }, @@ -186,9 +184,7 @@ "StructField": { "type": "object" }, - "ValueField": { - "type": "object" - } + "ValueField": {} }, "description": "NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion." }, From dca9acb8fd17aead94aed83e259c6d690a763b8a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 27 May 2022 18:15:07 +0000 Subject: [PATCH 1302/1518] chore(deps): update dependency com_google_protobuf to v3.21.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f6038bab27d..c6f800de689 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "e644f9c50997b9a20ef363783d644c13be39ee330077b74aeb2a5ca680f966e9", - strip_prefix = "protobuf-3.21.0", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.0.tar.gz"], + sha256 = "6cec96cd159aae33aa519a4ec7114b6433e13289bec7acd160bacebdcb3cad85", + strip_prefix = "protobuf-3.21.1", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.1.tar.gz"], ) http_archive( From c3961d67f6f693b160b65682e17e45f5eb092071 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sun, 29 May 2022 15:55:51 -0400 Subject: [PATCH 1303/1518] Use custom token secret for pushes (#2725) * Use custom token secret for pushes Renovate PRs have been getting auto-closed and I suspect it's because we're using the jobs own token to push to the repository. Use a custom token instead and hope that fixes the issue. * Fix bazel file sha? Did they actually go and upload a new version of this? --- .github/workflows/renovate.yml | 8 ++------ WORKSPACE | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 196cb8bb313..ff903923cf7 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -14,8 +14,6 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest - permissions: - contents: write steps: - uses: actions/checkout@v3 @@ -41,7 +39,7 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git remote set-url origin https://x-access-token:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi @@ -53,8 +51,6 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest - permissions: - contents: write needs: # Run after update_repositoriesbzl to avoid # git conflicts @@ -70,7 +66,7 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git remote set-url origin https://x-access-token:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi diff --git a/WORKSPACE b/WORKSPACE index c6f800de689..a13336d807f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,7 +6,7 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "6cec96cd159aae33aa519a4ec7114b6433e13289bec7acd160bacebdcb3cad85", + sha256 = "a295dd3b9551d3e2749a9969583dea110c6cdcc39d02088f7c7bb1100077e081", strip_prefix = "protobuf-3.21.1", urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.1.tar.gz"], ) From 1b4088853854ee4baa62ffecfdf5ae7633bcfbc5 Mon Sep 17 00:00:00 2001 From: Naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Mon, 30 May 2022 10:06:56 -0500 Subject: [PATCH 1304/1518] chore: renovate bot setting to pin actions to a full length commit SHA (#2724) - https://docs.renovatebot.com/modules/manager/github-actions/#additional-information - Pinned actions by SHA https://github.com/ossf/scorecard/blob/main/docs/checks.md#pinned-dependencies >Pin actions to a full length commit SHA >Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. > Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, > as they would need to generate a SHA-1 collision for a valid Git object payload. - https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions - https://github.com/renovatebot/.github/blob/b0c3aa85ef2bb242580f20b02b380ca532b4ce17/default.json#L13 --- renovate.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index b731f05d871..da2c40ccd22 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,7 @@ { "extends": [ - "config:base" + "config:base", + "helpers:pinGitHubActionDigests" ], "baseBranches": [ "v1", From da91d60468310798c978067180db1472ec688287 Mon Sep 17 00:00:00 2001 From: "Michael P. Nitowski" Date: Mon, 30 May 2022 11:46:28 -0400 Subject: [PATCH 1305/1518] protoc-gen-openapiv2: Support all HTTP methods supported in OpenAPI v2 (#2726) * protoc-gen-openapiv2: Fully support all HTTP methods in OpenAPI The handling for mappings with the same path and method caused a crash when provided with an operation with a HEAD, OPTIONS, or TRACE HTTP method, which are all technically supported by OpenAPI. Also fix this same crash when an unsupported HTTP method is provided * Add HEAD, OPTIONS, and TRACE examples to a_bit_of_everything.proto Implement examples in server Test examples in integration tests Regenerate files * Remove TRACE from OpenAPI generation While TRACE is supported in OpenAPI v3, it is not supported in v2 --- .../internal/clients/abe/api/swagger.yaml | 672 ++++++++++++++++- .../abe/api_a_bit_of_everything_service.go | 704 ++++++++++++++++-- .../internal/integration/integration_test.go | 123 +++ .../proto/examplepb/a_bit_of_everything.pb.go | 338 +++++---- .../examplepb/a_bit_of_everything.pb.gw.go | 357 +++++++++ .../proto/examplepb/a_bit_of_everything.proto | 27 + .../a_bit_of_everything.swagger.json | 660 ++++++++++++++++ .../examplepb/a_bit_of_everything_grpc.pb.go | 108 +++ .../internal/server/a_bit_of_everything.go | 22 + .../internal/genopenapi/template.go | 10 +- .../internal/genopenapi/template_test.go | 362 +++++++++ .../internal/genopenapi/types.go | 14 +- 12 files changed, 3152 insertions(+), 245 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 6a9cd7617d4..9dffbda0b2d 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1699,10 +1699,10 @@ paths: schema: $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{uuidName}: - put: + head: tags: - "ABitOfEverythingService" - operationId: "ABitOfEverythingService_Update" + operationId: "ABitOfEverythingService_Exists" parameters: - name: "uuidName" in: "path" @@ -1710,34 +1710,648 @@ paths: type: "string" x-internal: true x-exportParamName: "UuidName" - - in: "body" - name: "body" + - name: "singleNested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "singleNested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "singleNested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "floatValue" + in: "query" + description: "Float value field" required: true - schema: - $ref: "#/definitions/A bit of everything" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - type: "object" - 403: - description: "Returned when the user does not have permission to access\ - \ the resource." - schema: {} - 404: - description: "Returned when the resource does not exist." - schema: - type: "string" - format: "string" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" - 500: - description: "Server error" - schema: - $ref: "#/definitions/examplepbErrorResponse" + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "doubleValue" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "boolValue" + in: "query" + required: false + type: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "stringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enumValue" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "pathEnumValue" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nestedPathEnumValue" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeatedEnumAnnotation" + in: "query" + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enumValueAnnotation" + in: "query" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeatedStringAnnotation" + in: "query" + description: "Repeated string title\n\nRepeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nestedAnnotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nestedAnnotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nestedAnnotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64OverrideType" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition" + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition" + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" + - name: "optionalStringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalStringValue" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + type: "object" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" + put: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_Update" + parameters: + - name: "uuidName" + in: "path" + required: true + type: "string" + x-internal: true + x-exportParamName: "UuidName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/A bit of everything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + type: "object" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" + options: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_CustomOptionsRequest" + parameters: + - name: "uuidName" + in: "path" + required: true + type: "string" + x-internal: true + x-exportParamName: "UuidName" + - name: "singleNested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "singleNested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "singleNested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "floatValue" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "doubleValue" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "boolValue" + in: "query" + required: false + type: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "stringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enumValue" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "pathEnumValue" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nestedPathEnumValue" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeatedEnumAnnotation" + in: "query" + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enumValueAnnotation" + in: "query" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeatedStringAnnotation" + in: "query" + description: "Repeated string title\n\nRepeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nestedAnnotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nestedAnnotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nestedAnnotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64OverrideType" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition" + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition" + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" + - name: "optionalStringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalStringValue" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + type: "object" default: description: "An unexpected error response." schema: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 2ce645d0e08..9e5321d66b7 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -2087,26 +2087,475 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ct return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuidName + * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param optional nil or *ABitOfEverythingServiceCustomOptionsRequestOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition + * @param "OptionalStringValue" (optional.String) - + +@return interface{} +*/ + +type ABitOfEverythingServiceCustomOptionsRequestOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalStringValue optional.String +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Options") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedName name is nested field. * @param body -@return ExamplepbABitOfEverything +@return ExamplepbABitOfEverything +*/ +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ABitOfEverything1) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/deep_path/{singleNested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"singleNested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuid + +@return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ABitOfEverything1) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx context.Context, uuid string) (interface{}, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Post") + localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte - localVarReturnValue ExamplepbABitOfEverything + localVarReturnValue interface{} ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/deep_path/{singleNested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"singleNested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -2129,8 +2578,6 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( if localVarHttpHeaderAccept != "" { localVarHeaderParams["Accept"] = localVarHttpHeaderAccept } - // body params - localVarPostBody = &body if ctx != nil { // API Key Authentication if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { @@ -2175,7 +2622,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( } if localVarHttpResponse.StatusCode == 200 { - var v ExamplepbABitOfEverything + var v interface{} err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2249,13 +2696,12 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param uuid @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx context.Context, uuid string) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Delete") + localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte @@ -2263,8 +2709,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx co ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + localVarPath := a.client.cfg.BasePath + "/v2/example/errorwithdetails" localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -2405,12 +2850,88 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx co /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuidName + * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param optional nil or *ABitOfEverythingServiceExistsOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition + * @param "OptionalStringValue" (optional.String) - @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) { + +type ABitOfEverythingServiceExistsOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalStringValue optional.String +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { var ( - localVarHttpMethod = strings.ToUpper("Get") + localVarHttpMethod = strings.ToUpper("Head") localVarPostBody interface{} localVarFileName string localVarFileBytes []byte @@ -2418,12 +2939,117 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDeta ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v2/example/errorwithdetails" + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuidName}" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2495,50 +3121,6 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDeta return localVarReturnValue, localVarHttpResponse, newErr } - if localVarHttpResponse.StatusCode == 403 { - var v interface{} - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - - if localVarHttpResponse.StatusCode == 404 { - var v string - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - - if localVarHttpResponse.StatusCode == 418 { - var v ExamplepbNumericEnum - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - - if localVarHttpResponse.StatusCode == 500 { - var v ExamplepbErrorResponse - err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHttpResponse, newErr - } - newErr.model = v - return localVarReturnValue, localVarHttpResponse, newErr - } - if localVarHttpResponse.StatusCode == 0 { var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 19de3ae3291..4c31d54bbe7 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -434,6 +434,10 @@ func TestABE(t *testing.T) { testABEBulkEchoZeroLength(t, 8088) testAdditionalBindings(t, 8088) testABERepeated(t, 8088) + testABEExists(t, 8088) + testABEExistsNotFound(t, 8088) + testABEOptions(t, 8088) + testABETrace(t, 8088) } func testABECreate(t *testing.T, port int) { @@ -2284,3 +2288,122 @@ func testNonStandardNames(t *testing.T, port int, method string, jsonBody string t.Errorf(diff) } } + +func testABEExists(t *testing.T, port int) { + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + cresp, err := http.Post(apiURL, "application/json", strings.NewReader(` + {"bool_value": true, "string_value": "strprefix/example"} + `)) + if err != nil { + t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) + return + } + defer cresp.Body.Close() + buf, err := ioutil.ReadAll(cresp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) + return + } + if got, want := cresp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + return + } + + want := new(examplepb.ABitOfEverything) + if err := marshaler.Unmarshal(buf, want); err != nil { + t.Errorf("marshaler.Unmarshal(%s, want) failed with %v; want success", buf, err) + return + } + + apiURL = fmt.Sprintf("%s/%s", apiURL, want.Uuid) + resp, err := http.Head(apiURL) + if err != nil { + t.Errorf("http.Head(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } +} + +func testABEExistsNotFound(t *testing.T, port int) { + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) + apiURL = fmt.Sprintf("%s/%s", apiURL, "not_exist") + resp, err := http.Head(apiURL) + if err != nil { + t.Errorf("http.Head(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + + if got, want := resp.StatusCode, http.StatusNotFound; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + return + } +} + +func testABEOptions(t *testing.T, port int) { + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/test", port) + req, err := http.NewRequest(http.MethodOptions, apiURL, strings.NewReader(` + {"bool_value": true, "string_value": "strprefix/example"} + `)) + req.Header.Set("Content-Type", "application/json") + if err != nil { + t.Errorf("http.NewRequest(http.MethodTrace, %q, ...) failed with %v; want success", apiURL, err) + return + } + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + return + } + + value := resp.Header.Get("Grpc-Metadata-Allow") + if value != "OPTIONS, GET, HEAD, POST, PUT, TRACE" { + t.Errorf("Grpc-Metadata-Allow does not have the expected HTTP methods") + t.Logf("%s", value) + } +} + +func testABETrace(t *testing.T, port int) { + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/test", port) + req, err := http.NewRequest(http.MethodTrace, apiURL, strings.NewReader(` + {"bool_value": true, "string_value": "strprefix/example"} + `)) + req.Header.Set("Content-Type", "application/json") + if err != nil { + t.Errorf("http.NewRequest(http.MethodTrace, %q, ...) failed with %v; want success", apiURL, err) + return + } + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) + return + } + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + return + } + + want := new(examplepb.ABitOfEverything) + if err := marshaler.Unmarshal(buf, want); err != nil { + t.Errorf("marshaler.Unmarshal(%s, want) failed with %v; want success", buf, err) + return + } +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 22b3a2f2701..a188ba5f129 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1740,7 +1740,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x32, 0xa0, 0x2c, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x01, 0x32, 0xb9, 0x30, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, @@ -2082,130 +2082,164 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, - 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, - 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, + 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, + 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, + 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, + 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, + 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, + 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, + 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, + 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, - 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, - 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, - 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, - 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, - 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, - 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, - 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, - 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, - 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, - 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, - 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, - 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, - 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, - 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, - 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, - 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, - 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, - 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, - 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, - 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, - 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, - 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, - 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, - 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, - 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, - 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, - 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, - 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, - 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, - 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, - 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, - 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, + 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, - 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, - 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, - 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, + 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, + 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, + 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, + 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, + 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, + 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, + 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, + 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, + 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, + 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, + 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, + 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, + 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, + 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, + 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, + 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, + 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, + 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, + 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, + 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, + 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2306,36 +2340,42 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = [ 26, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum 27, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum 19, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 19, // 52: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 19, // 53: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 10, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 10, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 19, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 19, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 19, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 5, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 19, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 19, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 4, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 28, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 19, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 6, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 19, // 78: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 19, // 79: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 54, // [54:80] is the sub-list for method output_type - 28, // [28:54] is the sub-list for method input_type + 4, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 55: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 19, // 56: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 4, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 10, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 10, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 4, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 19, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 19, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 19, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 5, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 19, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 19, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 19, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 4, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 28, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 19, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 19, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 6, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 19, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 19, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 4, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 84: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 19, // 85: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 57, // [57:86] is the sub-list for method output_type + 28, // [28:57] is the sub-list for method input_type 28, // [28:28] is the sub-list for extension type_name 28, // [28:28] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 254698b4554..36b8fd9652e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2321,6 +2321,216 @@ func local_request_ABitOfEverythingService_CheckStatus_0(ctx context.Context, ma } +var ( + filter_ABitOfEverythingService_Exists_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_Exists_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Exists_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Exists(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Exists_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Exists_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Exists(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_CustomOptionsRequest_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_CustomOptionsRequest_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CustomOptionsRequest_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CustomOptionsRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_CustomOptionsRequest_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CustomOptionsRequest_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CustomOptionsRequest(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ABitOfEverythingService_TraceRequest_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_TraceRequest_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_TraceRequest_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TraceRequest(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_TraceRequest_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_TraceRequest_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TraceRequest(ctx, &protoReq) + return msg, metadata, err + +} + func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -2993,6 +3203,78 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("HEAD", pattern_ABitOfEverythingService_Exists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Exists_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Exists_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("OPTIONS", pattern_ABitOfEverythingService_CustomOptionsRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_CustomOptionsRequest_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CustomOptionsRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("TRACE", pattern_ABitOfEverythingService_TraceRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_TraceRequest_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_TraceRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3634,6 +3916,69 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("HEAD", pattern_ABitOfEverythingService_Exists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_Exists_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Exists_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("OPTIONS", pattern_ABitOfEverythingService_CustomOptionsRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_CustomOptionsRequest_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_CustomOptionsRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("TRACE", pattern_ABitOfEverythingService_TraceRequest_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_TraceRequest_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_TraceRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3691,6 +4036,12 @@ var ( pattern_ABitOfEverythingService_CheckExternalNestedPathEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"v3", "value"}, "check")) pattern_ABitOfEverythingService_CheckStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "checkStatus"}, "")) + + pattern_ABitOfEverythingService_Exists_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + + pattern_ABitOfEverythingService_CustomOptionsRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + + pattern_ABitOfEverythingService_TraceRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) ) var ( @@ -3747,6 +4098,12 @@ var ( forward_ABitOfEverythingService_CheckExternalNestedPathEnum_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_CheckStatus_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_Exists_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_CustomOptionsRequest_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_TraceRequest_0 = runtime.ForwardResponseMessage ) // RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index b74a23ba25e..0f9deff78ab 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -728,6 +728,33 @@ service ABitOfEverythingService { get: "/v1/example/checkStatus" }; } + + rpc Exists(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + custom: { + kind: "HEAD", + path: "/v1/example/a_bit_of_everything/{uuid}" + } + }; + } + + rpc CustomOptionsRequest(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + custom: { + kind: "OPTIONS", + path: "/v1/example/a_bit_of_everything/{uuid}" + } + }; + } + + rpc TraceRequest(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + custom: { + kind: "TRACE", + path: "/v1/example/a_bit_of_everything/{uuid}" + } + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index e70ba263778..05d09ba9313 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2168,6 +2168,666 @@ "tags": [ "ABitOfEverythingService" ] + }, + "head": { + "operationId": "ABitOfEverythingService_Exists", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuidName", + "in": "path", + "required": true, + "type": "string", + "x-internal": true + }, + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "singleNested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "singleNested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "floatValue", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "doubleValue", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "boolValue", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "stringValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytesValue", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enumValue", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "pathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nestedPathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeatedStringValue", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneofString", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestampValue", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeatedEnumValue", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedEnumAnnotation", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enumValueAnnotation", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeatedStringAnnotation", + "description": "Repeated string title\n\nRepeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nestedAnnotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nestedAnnotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nestedAnnotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "int64OverrideType", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "optionalStringValue", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + }, + "options": { + "operationId": "ABitOfEverythingService_CustomOptionsRequest", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuidName", + "in": "path", + "required": true, + "type": "string", + "x-internal": true + }, + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "singleNested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "singleNested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "floatValue", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "doubleValue", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "boolValue", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "stringValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytesValue", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enumValue", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "pathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nestedPathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeatedStringValue", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneofString", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestampValue", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeatedEnumValue", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedEnumAnnotation", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enumValueAnnotation", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeatedStringAnnotation", + "description": "Repeated string title\n\nRepeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nestedAnnotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nestedAnnotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nestedAnnotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "int64OverrideType", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "optionalStringValue", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ] } }, "/v1/example/a_bit_of_everything/{uuid}": { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index c6c4df94993..b37b772e08d 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -59,6 +59,9 @@ type ABitOfEverythingServiceClient interface { CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) CheckStatus(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*CheckStatusResponse, error) + Exists(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) + CustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) + TraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) } type aBitOfEverythingServiceClient struct { @@ -285,6 +288,33 @@ func (c *aBitOfEverythingServiceClient) CheckStatus(ctx context.Context, in *emp return out, nil } +func (c *aBitOfEverythingServiceClient) Exists(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aBitOfEverythingServiceClient) CustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *aBitOfEverythingServiceClient) TraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. // All implementations should embed UnimplementedABitOfEverythingServiceServer // for forward compatibility @@ -324,6 +354,9 @@ type ABitOfEverythingServiceServer interface { CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) CheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error) + Exists(context.Context, *ABitOfEverything) (*emptypb.Empty, error) + CustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error) + TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) } // UnimplementedABitOfEverythingServiceServer should be embedded to have forward compatible implementations. @@ -402,6 +435,15 @@ func (UnimplementedABitOfEverythingServiceServer) CheckExternalNestedPathEnum(co func (UnimplementedABitOfEverythingServiceServer) CheckStatus(context.Context, *emptypb.Empty) (*CheckStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckStatus not implemented") } +func (UnimplementedABitOfEverythingServiceServer) Exists(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Exists not implemented") +} +func (UnimplementedABitOfEverythingServiceServer) CustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CustomOptionsRequest not implemented") +} +func (UnimplementedABitOfEverythingServiceServer) TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method TraceRequest not implemented") +} // UnsafeABitOfEverythingServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ABitOfEverythingServiceServer will @@ -846,6 +888,60 @@ func _ABitOfEverythingService_CheckStatus_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_Exists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).Exists(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).Exists(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + +func _ABitOfEverythingService_CustomOptionsRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).CustomOptionsRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).CustomOptionsRequest(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + +func _ABitOfEverythingService_TraceRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).TraceRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).TraceRequest(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + // ABitOfEverythingService_ServiceDesc is the grpc.ServiceDesc for ABitOfEverythingService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -949,6 +1045,18 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CheckStatus", Handler: _ABitOfEverythingService_CheckStatus_Handler, }, + { + MethodName: "Exists", + Handler: _ABitOfEverythingService_Exists_Handler, + }, + { + MethodName: "CustomOptionsRequest", + Handler: _ABitOfEverythingService_CustomOptionsRequest_Handler, + }, + { + MethodName: "TraceRequest", + Handler: _ABitOfEverythingService_TraceRequest_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index aa9efc8a770..7339ddc0766 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -358,3 +358,25 @@ func (s *_ABitOfEverythingServer) CheckExternalNestedPathEnum(ctx context.Contex func (s *_ABitOfEverythingServer) CheckStatus(ctx context.Context, empty *emptypb.Empty) (*examples.CheckStatusResponse, error) { return &examples.CheckStatusResponse{Status: &statuspb.Status{}}, nil } + +func (s *_ABitOfEverythingServer) Exists(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { + if _, ok := s.v[msg.Uuid]; ok { + return new(emptypb.Empty), nil + } + + return nil, status.Errorf(codes.NotFound, "not found") +} + +func (s *_ABitOfEverythingServer) CustomOptionsRequest(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { + err := grpc.SendHeader(ctx, metadata.New(map[string]string{ + "Allow": "OPTIONS, GET, HEAD, POST, PUT, TRACE", + })) + if err != nil { + return nil, err + } + return new(emptypb.Empty), nil +} + +func (s *_ABitOfEverythingServer) TraceRequest(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + return msg, nil +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index e066e62f881..09dd18f8562 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1477,6 +1477,10 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re pathItemObject.Put = operationObject case "PATCH": pathItemObject.Patch = operationObject + case "HEAD": + pathItemObject.Head = operationObject + case "OPTIONS": + pathItemObject.Options = operationObject } paths[path] = pathItemObject } @@ -1507,8 +1511,12 @@ func operationForMethod(httpMethod string) func(*openapiPathItemObject) *openapi return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Delete } case "PATCH": return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Patch } + case "HEAD": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Head } + case "OPTIONS": + return func(obj *openapiPathItemObject) *openapiOperationObject { return obj.Options } default: - return nil + return func(obj *openapiPathItemObject) *openapiOperationObject { return nil } } } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 7535eee4b66..f26a810c2f9 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -5517,6 +5517,368 @@ func TestSingleServiceTemplateWithDuplicateHttp1Operations(t *testing.T) { } } +func getOperation(pathItem openapiPathItemObject, httpMethod string) *openapiOperationObject { + switch httpMethod { + case "GET": + return pathItem.Get + case "POST": + return pathItem.Post + case "PUT": + return pathItem.Put + case "DELETE": + return pathItem.Delete + case "PATCH": + return pathItem.Patch + case "HEAD": + return pathItem.Head + case "OPTIONS": + return pathItem.Options + default: + return nil + } +} + +func TestSingleServiceTemplateWithDuplicateInAllSupportedHttp1Operations(t *testing.T) { + supportedMethods := []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"} + + for _, method := range supportedMethods { + fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING + field1 := &descriptorpb.FieldDescriptorProto{ + Name: proto.String("name"), + Number: proto.Int32(1), + Type: &fieldType, + } + + methodFooMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String(method + "FooRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + methodFooMsg := &descriptor.Message{ + DescriptorProto: methodFooMsgDesc, + } + methodFoo := &descriptorpb.MethodDescriptorProto{ + Name: proto.String(method + "Foo"), + InputType: proto.String(method + "FooRequest"), + OutputType: proto.String("EmptyMessage"), + } + + methodBarMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String(method + "BarRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + methodBarMsg := &descriptor.Message{ + DescriptorProto: methodBarMsgDesc, + } + methodBar := &descriptorpb.MethodDescriptorProto{ + Name: proto.String(method + "Bar"), + InputType: proto.String(method + "BarRequest"), + OutputType: proto.String("EmptyMessage"), + } + + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service1"), + Method: []*descriptorpb.MethodDescriptorProto{methodFoo, methodBar}, + } + + emptyMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("EmptyMessage"), + } + emptyMsg := &descriptor.Message{ + DescriptorProto: emptyMsgDesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("service1.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{methodBarMsgDesc, methodFooMsgDesc, emptyMsgDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{methodFooMsg, methodBarMsg, emptyMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: methodFoo, + RequestType: methodFooMsg, + ResponseType: methodFooMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: method, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=foos/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: methodFooMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: methodBar, + RequestType: methodBarMsg, + ResponseType: methodBarMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: method, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=bars/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: methodBarMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + if got, want := len(result.Paths), 2; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + firstOpMethod := getOperation(result.Paths["/v1/{name}"], method) + if got, want := firstOpMethod.OperationID, "Service1_"+method+"Foo"; got != want { + t.Fatalf("First operation %s id differed, got %s want %s", method, got, want) + } + if got, want := len(firstOpMethod.Parameters), 2; got != want { + t.Fatalf("First operation %s params length differed, got %d want %d", method, got, want) + } + if got, want := firstOpMethod.Parameters[0].Name, "name"; got != want { + t.Fatalf("First operation %s first param name differed, got %s want %s", method, got, want) + } + if got, want := firstOpMethod.Parameters[0].Pattern, "foos/[^/]+"; got != want { + t.Fatalf("First operation %s first param pattern differed, got %s want %s", method, got, want) + } + if got, want := firstOpMethod.Parameters[1].In, "body"; got != want { + t.Fatalf("First operation %s second param 'in' differed, got %s want %s", method, got, want) + } + + secondOpMethod := getOperation(result.Paths["/v1/{name"+pathParamUniqueSuffixDeliminator+"1}"], method) + if got, want := secondOpMethod.OperationID, "Service1_"+method+"Bar"; got != want { + t.Fatalf("Second operation id %s differed, got %s want %s", method, got, want) + } + if got, want := len(secondOpMethod.Parameters), 2; got != want { + t.Fatalf("Second operation %s params length differed, got %d want %d", method, got, want) + } + if got, want := secondOpMethod.Parameters[0].Name, "name"+pathParamUniqueSuffixDeliminator+"1"; got != want { + t.Fatalf("Second operation %s first param name differed, got %s want %s", method, got, want) + } + if got, want := secondOpMethod.Parameters[0].Pattern, "bars/[^/]+"; got != want { + t.Fatalf("Second operation %s first param pattern differed, got %s want %s", method, got, want) + } + if got, want := secondOpMethod.Parameters[1].In, "body"; got != want { + t.Fatalf("Second operation %s second param 'in' differed, got %s want %s", method, got, want) + } + } +} + +func TestSingleServiceTemplateWithDuplicateHttp1UnsupportedOperations(t *testing.T) { + fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING + field1 := &descriptorpb.FieldDescriptorProto{ + Name: proto.String("name"), + Number: proto.Int32(1), + Type: &fieldType, + } + + unsupportedFooMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("UnsupportedFooRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + unsupportedFooMsg := &descriptor.Message{ + DescriptorProto: unsupportedFooMsgDesc, + } + unsupportedFoo := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("UnsupportedFoo"), + InputType: proto.String("UnsupportedFooRequest"), + OutputType: proto.String("EmptyMessage"), + } + + unsupportedBarMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("UnsupportedBarRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + field1, + }, + } + unsupportedBarMsg := &descriptor.Message{ + DescriptorProto: unsupportedBarMsgDesc, + } + unsupportedBar := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("UnsupportedBar"), + InputType: proto.String("UnsupportedBarRequest"), + OutputType: proto.String("EmptyMessage"), + } + + svc1 := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Service1"), + Method: []*descriptorpb.MethodDescriptorProto{unsupportedFoo, unsupportedBar}, + } + + emptyMsgDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("EmptyMessage"), + } + emptyMsg := &descriptor.Message{ + DescriptorProto: emptyMsgDesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("service1.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{unsupportedBarMsgDesc, unsupportedFooMsgDesc, emptyMsgDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc1}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{unsupportedFooMsg, unsupportedBarMsg, emptyMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc1, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: unsupportedFoo, + RequestType: unsupportedFooMsg, + ResponseType: unsupportedFooMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "UNSUPPORTED", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=foos/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: unsupportedFooMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + { + MethodDescriptorProto: unsupportedBar, + RequestType: unsupportedBarMsg, + ResponseType: unsupportedBarMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "UNSUPPORTED", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/{name=bars/*}", + }, + PathParams: []descriptor.Parameter{ + { + Target: &descriptor.Field{ + FieldDescriptorProto: field1, + Message: unsupportedBarMsg, + }, + FieldPath: descriptor.FieldPath{ + { + Name: "name", + }, + }, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + // Just should not crash, no special handling of unsupported HTTP methods + if got, want := len(result.Paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } +} + func TestTemplateWithDuplicateHttp1Operations(t *testing.T) { fieldType := descriptorpb.FieldDescriptorProto_TYPE_STRING field1 := &descriptorpb.FieldDescriptorProto{ diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index ae85f24ba78..c5cf59e9d6d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -105,11 +105,15 @@ type openapiPathsObject map[string]openapiPathItemObject // http://swagger.io/specification/#pathItemObject type openapiPathItemObject struct { - Get *openapiOperationObject `json:"get,omitempty" yaml:"get,omitempty"` - Delete *openapiOperationObject `json:"delete,omitempty" yaml:"delete,omitempty"` - Post *openapiOperationObject `json:"post,omitempty" yaml:"post,omitempty"` - Put *openapiOperationObject `json:"put,omitempty" yaml:"put,omitempty"` - Patch *openapiOperationObject `json:"patch,omitempty" yaml:"patch,omitempty"` + Get *openapiOperationObject `json:"get,omitempty" yaml:"get,omitempty"` + Delete *openapiOperationObject `json:"delete,omitempty" yaml:"delete,omitempty"` + Post *openapiOperationObject `json:"post,omitempty" yaml:"post,omitempty"` + Put *openapiOperationObject `json:"put,omitempty" yaml:"put,omitempty"` + Patch *openapiOperationObject `json:"patch,omitempty" yaml:"patch,omitempty"` + Head *openapiOperationObject `json:"head,omitempty" yaml:"head,omitempty"` + Options *openapiOperationObject `json:"options,omitempty" yaml:"options,omitempty"` + // While TRACE is supported in OpenAPI v3, it is not supported in OpenAPI v2 + // Trace *openapiOperationObject `json:"trace,omitempty" yaml:"trace,omitempty"` } // http://swagger.io/specification/#operationObject From 4a3290c9cc37b0e0d3cc711f210131beca8e489d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Matheson=20Wergeland?= Date: Tue, 31 May 2022 03:21:45 +0200 Subject: [PATCH 1306/1518] Fix overriding path parameter with custom verbs (#2727) * Added test to render services with colon in path. * Support last part of path template to be a verb (prefixed with ':'). Fixes issue #2688 * Added example of custom verb, using a path where the path parameter name is overridden. --- .../internal/clients/abe/api/swagger.yaml | 325 +++++++ .../abe/api_a_bit_of_everything_service.go | 335 +++++++ .../proto/examplepb/a_bit_of_everything.pb.go | 900 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 119 +++ .../proto/examplepb/a_bit_of_everything.proto | 5 + .../a_bit_of_everything.swagger.json | 354 +++++++ .../examplepb/a_bit_of_everything_grpc.pb.go | 36 + .../internal/server/a_bit_of_everything.go | 13 + .../internal/genopenapi/template.go | 14 + .../internal/genopenapi/template_test.go | 173 +++- 10 files changed, 1830 insertions(+), 444 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 9dffbda0b2d..bf5491634ea 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2356,6 +2356,331 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/a_bit_of_everything/{uuidName}:custom: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_Custom" + parameters: + - name: "uuidName" + in: "path" + required: true + type: "string" + x-internal: true + x-exportParamName: "UuidName" + - name: "singleNested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "singleNested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "singleNested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "floatValue" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "doubleValue" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "boolValue" + in: "query" + required: false + type: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "stringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enumValue" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "pathEnumValue" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nestedPathEnumValue" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeatedEnumAnnotation" + in: "query" + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enumValueAnnotation" + in: "query" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeatedStringAnnotation" + in: "query" + description: "Repeated string title\n\nRepeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nestedAnnotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nestedAnnotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nestedAnnotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64OverrideType" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition" + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition" + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" + - name: "optionalStringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalStringValue" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{uuid}: get: tags: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 9e5321d66b7..d354827c520 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -2087,6 +2087,341 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBook(ct return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuidName + * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param optional nil or *ABitOfEverythingServiceCustomOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition + * @param "OptionalStringValue" (optional.String) - + +@return ExamplepbABitOfEverything +*/ + +type ABitOfEverythingServiceCustomOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalStringValue optional.String +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuidName}:custom" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index a188ba5f129..0a1252cdc47 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1740,7 +1740,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x32, 0xb9, 0x30, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x01, 0x32, 0xff, 0x31, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, @@ -1821,187 +1821,151 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, - 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, - 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, - 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, - 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, - 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, - 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, - 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, - 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, + 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, + 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, + 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, + 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, + 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, - 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, - 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, - 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, - 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, - 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, - 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, - 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, - 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, - 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, - 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, - 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, - 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, - 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, - 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, + 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, + 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, + 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, + 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, + 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, + 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, + 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, + 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, @@ -2010,236 +1974,284 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, - 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, - 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, - 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, - 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, - 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, - 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, + 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, + 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, + 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, + 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, + 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, + 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, - 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, - 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, + 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, + 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, + 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, + 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, + 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, + 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, - 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, + 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, - 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, - 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, - 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, - 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, + 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, + 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, + 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, + 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, + 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, + 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, + 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, - 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, - 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, - 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, - 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, + 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, + 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, + 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, + 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, - 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, - 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, - 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, + 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, + 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, + 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, + 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, + 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, - 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, - 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, - 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, - 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, - 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, - 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, - 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, - 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, - 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, - 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, - 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, - 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, - 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, - 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, - 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, + 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, + 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, + 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, + 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, + 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, + 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, + 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, + 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, + 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, + 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, + 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, + 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, + 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2321,61 +2333,63 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = [ 11, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest 12, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest 23, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 9, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 23, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 5, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 25, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 19, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 19, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 8, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 7, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 4, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 26, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 27, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 19, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 4, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 55: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 19, // 56: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 4, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 10, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 10, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 4, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 19, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 19, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 19, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 5, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 19, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 19, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 19, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 4, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 28, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 19, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 19, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 6, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 19, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 19, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 4, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 84: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 19, // 85: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 57, // [57:86] is the sub-list for method output_type - 28, // [28:57] is the sub-list for method input_type + 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 9, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 23, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 5, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 25, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 19, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 19, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 8, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 7, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 4, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 26, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 27, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 19, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 4, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 56: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 19, // 57: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 10, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 10, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 4, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 19, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 5, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 19, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 19, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 4, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 28, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 19, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 19, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 6, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 19, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 19, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 4, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 86: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 19, // 87: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 58, // [58:88] is the sub-list for method output_type + 28, // [28:58] is the sub-list for method input_type 28, // [28:28] is the sub-list for extension type_name 28, // [28:28] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 36b8fd9652e..323f872344c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -755,6 +755,76 @@ func local_request_ABitOfEverythingService_Lookup_0(ctx context.Context, marshal } +var ( + filter_ABitOfEverythingService_Custom_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_Custom_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Custom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_Custom_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Custom_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Custom(ctx, &protoReq) + return msg, metadata, err + +} + func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ABitOfEverything var metadata runtime.ServerMetadata @@ -2675,6 +2745,30 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_Custom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_Custom_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Custom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3454,6 +3548,27 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_Custom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_Custom_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_Custom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3993,6 +4108,8 @@ var ( pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + pattern_ABitOfEverythingService_Custom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "custom")) + pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) @@ -4055,6 +4172,8 @@ var ( forward_ABitOfEverythingService_Lookup_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Custom_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Update_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_UpdateV2_0 = runtime.ForwardResponseMessage diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 0f9deff78ab..816e2271d00 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -531,6 +531,11 @@ service ABitOfEverythingService { get: "/v1/example/a_bit_of_everything/{uuid}" }; } + rpc Custom(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/{uuid}:custom" + }; + } rpc Update(ABitOfEverything) returns (google.protobuf.Empty) { option (google.api.http) = { put: "/v1/example/a_bit_of_everything/{uuid}" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 05d09ba9313..228022d9489 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2830,6 +2830,360 @@ ] } }, + "/v1/example/a_bit_of_everything/{uuidName}:custom": { + "post": { + "operationId": "ABitOfEverythingService_Custom", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuidName", + "in": "path", + "required": true, + "type": "string", + "x-internal": true + }, + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "singleNested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "singleNested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "floatValue", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "doubleValue", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "boolValue", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "stringValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytesValue", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enumValue", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "pathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nestedPathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeatedStringValue", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneofString", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestampValue", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeatedEnumValue", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedEnumAnnotation", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enumValueAnnotation", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeatedStringAnnotation", + "description": "Repeated string title\n\nRepeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nestedAnnotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nestedAnnotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nestedAnnotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "int64OverrideType", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "optionalStringValue", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/a_bit_of_everything/{uuid}": { "get": { "operationId": "ABitOfEverythingService_Lookup", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index b37b772e08d..42deaa95707 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -33,6 +33,7 @@ type ABitOfEverythingServiceClient interface { CreateBook(ctx context.Context, in *CreateBookRequest, opts ...grpc.CallOption) (*Book, error) UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) + Custom(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -117,6 +118,15 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM return out, nil } +func (c *aBitOfEverythingServiceClient) Custom(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", in, out, opts...) @@ -328,6 +338,7 @@ type ABitOfEverythingServiceServer interface { CreateBook(context.Context, *CreateBookRequest) (*Book, error) UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) + Custom(context.Context, *ABitOfEverything) (*ABitOfEverything, error) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) UpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error) Delete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error) @@ -378,6 +389,9 @@ func (UnimplementedABitOfEverythingServiceServer) UpdateBook(context.Context, *U func (UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") } +func (UnimplementedABitOfEverythingServiceServer) Custom(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method Custom not implemented") +} func (UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } @@ -546,6 +560,24 @@ func _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_Custom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).Custom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).Custom(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ABitOfEverything) if err := dec(in); err != nil { @@ -969,6 +1001,10 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "Lookup", Handler: _ABitOfEverythingService_Lookup_Handler, }, + { + MethodName: "Custom", + Handler: _ABitOfEverythingService_Custom_Handler, + }, { MethodName: "Update", Handler: _ABitOfEverythingService_Update_Handler, diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 7339ddc0766..7563f689845 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -187,6 +187,19 @@ func (s *_ABitOfEverythingServer) Download(_ *emptypb.Empty, stream examples.Str return nil } +func (s *_ABitOfEverythingServer) Custom(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + s.m.Lock() + defer s.m.Unlock() + + glog.Info(msg) + if _, ok := s.v[msg.Uuid]; ok { + s.v[msg.Uuid] = msg + } else { + return nil, status.Errorf(codes.NotFound, "not found") + } + return msg, nil +} + func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { s.m.Lock() defer s.m.Unlock() diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 09dd18f8562..b308d1e3563 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -894,6 +894,15 @@ func templateToParts(path string, reg *descriptor.Registry, fields []*descriptor } buffer += string(char) jsonBuffer += string(char) + case ':': + // Only the last part may be a verb (":" LITERAL) + if depth == 0 { + parts = append(parts, buffer) + buffer = ":" + continue + } + buffer += string(char) + jsonBuffer += string(char) default: buffer += string(char) jsonBuffer += string(char) @@ -919,6 +928,11 @@ func partsToOpenAPIPath(parts []string, overrides map[string]string) string { } parts[index] = part } + last := len(parts) - 1 + if strings.HasPrefix(parts[last], ":") { + // Last item is a verb (":" LITERAL). + return strings.Join(parts[:last], "/") + parts[last] + } return strings.Join(parts, "/") } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index f26a810c2f9..802baf7f4df 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -6530,10 +6530,15 @@ func TestRenderServicesWithBodyFieldNameInCamelCase(t *testing.T) { t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) } - if got, want := len(result.Paths), 1; got != want { + paths := GetPaths(result) + if got, want := len(paths), 1; got != want { t.Fatalf("Results path length differed, got %d want %d", got, want) } + if got, want := paths[0], "/v1/users/{userObject.name}"; got != want { + t.Fatalf("Wrong results path, got %s want %s", got, want) + } + var operation = *result.Paths["/v1/users/{userObject.name}"].Post if got, want := len(operation.Parameters), 2; got != want { t.Fatalf("Parameters length differed, got %d want %d", got, want) @@ -6573,3 +6578,169 @@ func TestRenderServicesWithBodyFieldNameInCamelCase(t *testing.T) { } } } + +func TestRenderServicesWithColonInPath(t *testing.T) { + jsonSchema := &openapi_options.JSONSchema{ + FieldConfiguration: &openapi_options.JSONSchema_FieldConfiguration{ + PathParamName: "overrideField", + }, + } + var fieldOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema) + + reqDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + Options: fieldOptions, + }, + }, + } + resDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyResponse"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("MyMethod"), + InputType: proto.String("MyRequest"), + OutputType: proto.String("MyResponse"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("MyService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + reqMsg := &descriptor.Message{ + DescriptorProto: reqDesc, + } + resMsg := &descriptor.Message{ + DescriptorProto: resDesc, + } + reqField := &descriptor.Field{ + Message: reqMsg, + FieldDescriptorProto: reqMsg.GetField()[0], + } + resField := &descriptor.Field{ + Message: resMsg, + FieldDescriptorProto: resMsg.GetField()[0], + } + reqField.JsonName = proto.String("field") + resField.JsonName = proto.String("field") + reqMsg.Fields = []*descriptor.Field{reqField} + resMsg.Fields = []*descriptor.Field{resField} + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("example"), + Name: proto.String(",my_service.proto"), + MessageType: []*descriptorpb.DescriptorProto{reqDesc, resDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{reqMsg, resMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: reqMsg, + ResponseType: resMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/my/{field}:foo", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "field", + }, + }), + Target: reqField, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + paths := GetPaths(result) + if got, want := len(paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + if got, want := paths[0], "/my/{overrideField}:foo"; got != want { + t.Fatalf("Wrong results path, got %s want %s", got, want) + } + + var operation = *result.Paths["/my/{overrideField}:foo"].Post + if got, want := len(operation.Parameters), 2; got != want { + t.Fatalf("Parameters length differed, got %d want %d", got, want) + } + + if got, want := operation.Parameters[0].Name, "overrideField"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].In, "path"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].Type, "string"; got != want { + t.Fatalf("Wrong parameter type, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].Name, "body"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].In, "body"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } +} + +func GetPaths(req *openapiSwaggerObject) []string { + paths := make([]string, len(req.Paths)) + i := 0 + for k := range req.Paths { + paths[i] = k + i++ + } + return paths +} From 29e98e4eb0ed6ee6e60407fc6840d68c9ba81277 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 31 May 2022 20:29:09 -0400 Subject: [PATCH 1307/1518] Update git push to use full username (#2732) This worked better in my local testing --- .github/workflows/renovate.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index ff903923cf7..d2a9468e8fa 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -39,7 +39,7 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://x-access-token:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git remote set-url origin https://${{ secrets.GH_PUSH_USER }}:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi @@ -66,7 +66,7 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://x-access-token:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git + git remote set-url origin https://${{ secrets.GH_PUSH_USER }}:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi From 1a287666fa2bc269ee0b81924244b2919fc335bd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 31 May 2022 21:58:09 -0400 Subject: [PATCH 1308/1518] Lets try using the checkout token setting (#2733) --- .github/workflows/renovate.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index d2a9468e8fa..54547966f83 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -16,7 +16,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - + with: + token: ${{ secrets.GH_PUSH_TOKEN }} - uses: actions/cache@v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel @@ -39,7 +40,6 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://${{ secrets.GH_PUSH_USER }}:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi @@ -57,6 +57,8 @@ jobs: - update_repositoriesbzl steps: - uses: actions/checkout@v3 + with: + token: ${{ secrets.GH_PUSH_TOKEN }} - run: make install - run: make clean - run: make generate @@ -66,7 +68,6 @@ jobs: if output=$(git status --porcelain) && [ ! -z "$output" ]; then git config user.name "Renovate Bot" git config user.email "bot@renovateapp.com" - git remote set-url origin https://${{ secrets.GH_PUSH_USER }}:${{ secrets.GH_PUSH_TOKEN }}@github.com/grpc-ecosystem/grpc-gateway.git git commit --amend --no-edit git push --force-with-lease origin ${{ github.ref_name }} fi From 4cf9014d6cf04ad682ae106c6b6fe9a71246bd30 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 31 May 2022 22:30:10 -0400 Subject: [PATCH 1309/1518] Add old style build tag (#2734) Fixes #2713 --- runtime/query_fuzz_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/query_fuzz_test.go b/runtime/query_fuzz_test.go index 687724caee1..20a7126d7eb 100644 --- a/runtime/query_fuzz_test.go +++ b/runtime/query_fuzz_test.go @@ -1,4 +1,5 @@ //go:build go1.18 +// +build go1.18 package runtime_test From 406eec6eb9ad849ab396da5e19c40437b7692bf7 Mon Sep 17 00:00:00 2001 From: Andrei Sousa Date: Wed, 1 Jun 2022 15:44:55 +0200 Subject: [PATCH 1310/1518] fix(deps): bump yaml to v3 and remove sigs.k8s.io/yaml (#2729) --- go.mod | 3 +- go.sum | 8 +--- internal/descriptor/BUILD.bazel | 2 +- internal/descriptor/grpc_api_configuration.go | 13 ++++-- .../descriptor/grpc_api_configuration_test.go | 43 ++++++++++++++++++- internal/descriptor/openapi_configuration.go | 13 ++++-- .../descriptor/openapi_configuration_test.go | 21 ++++++++- .../internal/genopenapi/BUILD.bazel | 4 +- .../internal/genopenapi/format.go | 2 +- .../internal/genopenapi/format_test.go | 2 +- .../internal/genopenapi/generator_test.go | 2 +- .../internal/genopenapi/types.go | 12 ++---- .../internal/genopenapi/types_test.go | 2 +- repositories.bzl | 18 +++----- 14 files changed, 100 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index 59c837d1d92..25d39867bb6 100644 --- a/go.mod +++ b/go.mod @@ -13,8 +13,7 @@ require ( google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd google.golang.org/grpc v1.46.2 google.golang.org/protobuf v1.28.0 - gopkg.in/yaml.v2 v2.4.0 - sigs.k8s.io/yaml v1.3.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( diff --git a/go.sum b/go.sum index 1feee5cd1dd..9e6d0199673 100644 --- a/go.sum +++ b/go.sum @@ -48,8 +48,6 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -410,9 +408,9 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -423,5 +421,3 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index bd79674baa2..04553bc1a05 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -21,7 +21,7 @@ go_library( "//protoc-gen-openapiv2/options", "@com_github_golang_glog//:glog", "@go_googleapis//google/api:annotations_go_proto", - "@io_k8s_sigs_yaml//:yaml", + "@in_gopkg_yaml_v3//:yaml_v3", "@org_golang_google_protobuf//compiler/protogen", "@org_golang_google_protobuf//encoding/protojson", "@org_golang_google_protobuf//proto", diff --git a/internal/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go index 2e90e46a1a0..a3ae3b83ad1 100644 --- a/internal/descriptor/grpc_api_configuration.go +++ b/internal/descriptor/grpc_api_configuration.go @@ -1,19 +1,26 @@ package descriptor import ( + "encoding/json" "fmt" "io/ioutil" "strings" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig" "google.golang.org/protobuf/encoding/protojson" - "sigs.k8s.io/yaml" + "gopkg.in/yaml.v3" ) func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*apiconfig.GrpcAPIService, error) { - jsonContents, err := yaml.YAMLToJSON(yamlFileContents) + var yamlContents interface{} + err := yaml.Unmarshal(yamlFileContents, &yamlContents) if err != nil { - return nil, fmt.Errorf("failed to convert gRPC API Configuration from YAML in '%v' to JSON: %v", yamlSourceLogName, err) + return nil, fmt.Errorf("failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) + } + + jsonContents, err := json.Marshal(yamlContents) + if err != nil { + return nil, err } // As our GrpcAPIService is incomplete, accept unknown fields. diff --git a/internal/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go index 09cf0a80c53..4d8231ec35c 100644 --- a/internal/descriptor/grpc_api_configuration_test.go +++ b/internal/descriptor/grpc_api_configuration_test.go @@ -67,8 +67,8 @@ http: t.Fatal(err) } - if !strings.Contains(err.Error(), "line 7") { - t.Errorf("Expected yaml error to be detected in line 7. Got other error: %v", err) + if !strings.Contains(err.Error(), "line 6") { + t.Errorf("Expected yaml error to be detected in line 6. Got other error: %v", err) } if service != nil { @@ -147,3 +147,42 @@ http: t.Errorf("some.other.service has %v additional bindings when it should not have any. Got: %v", len(second.GetAdditionalBindings()), second.GetAdditionalBindings()) } } + +func TestLoadGrpcAPIServiceFromYAMLUnknownKeys(t *testing.T) { + service, err := loadGrpcAPIServiceFromYAML([]byte(` +type: google.api.Service +config_version: 3 + +very: key +much: 1 + +http: + rules: + - selector: some.other.service + delete: foo + invalidkey: yes +`), "example") + if err != nil { + t.Fatalf("Failed to load service description from YAML: %v", err) + } + + if service == nil { + t.Fatal("No service returned") + } + + if service.Http == nil { + t.Fatal("HTTP is empty") + } + + if len(service.Http.GetRules()) != 1 { + t.Fatalf("%v service(s) returned when two were expected. Got: %v", len(service.Http.GetRules()), service.Http) + } + + first := service.Http.GetRules()[0] + if first.GetSelector() != "some.other.service" { + t.Errorf("first.selector has unexpected selector '%v'", first.GetSelector()) + } + if first.GetDelete() != "foo" { + t.Errorf("first.selector has unexpected delete '%v'", first.GetPost()) + } +} diff --git a/internal/descriptor/openapi_configuration.go b/internal/descriptor/openapi_configuration.go index d5b4934f8c5..3487c06d64b 100644 --- a/internal/descriptor/openapi_configuration.go +++ b/internal/descriptor/openapi_configuration.go @@ -1,18 +1,25 @@ package descriptor import ( + "encoding/json" "fmt" "io/ioutil" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig" "google.golang.org/protobuf/encoding/protojson" - "sigs.k8s.io/yaml" + "gopkg.in/yaml.v3" ) func loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*openapiconfig.OpenAPIConfig, error) { - jsonContents, err := yaml.YAMLToJSON(yamlFileContents) + var yamlContents interface{} + err := yaml.Unmarshal(yamlFileContents, &yamlContents) if err != nil { - return nil, fmt.Errorf("failed to convert OpenAPI Configuration from YAML in '%v' to JSON: %v", yamlSourceLogName, err) + return nil, fmt.Errorf("failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) + } + + jsonContents, err := json.Marshal(yamlContents) + if err != nil { + return nil, err } // Reject unknown fields because OpenAPIConfig is only used here diff --git a/internal/descriptor/openapi_configuration_test.go b/internal/descriptor/openapi_configuration_test.go index 977d7e94e1c..94953c859fe 100644 --- a/internal/descriptor/openapi_configuration_test.go +++ b/internal/descriptor/openapi_configuration_test.go @@ -28,8 +28,8 @@ file: t.Fatal(err) } - if !strings.Contains(err.Error(), "line 4") { - t.Errorf("Expected yaml error to be detected in line 4. Got other error: %v", err) + if !strings.Contains(err.Error(), "line 3") { + t.Errorf("Expected yaml error to be detected in line 3. Got other error: %v", err) } if config != nil { @@ -112,3 +112,20 @@ openapiOptions: t.Fatalf("expected name to be X-API-Key but got %s", secOpt.Name) } } + +func TestLoadOpenAPIConfigFromYAMLUnknownKeys(t *testing.T) { + _, err := loadOpenAPIConfigFromYAML([]byte(` +closedapiOptions: + get: it? +openapiOptions: + file: + - file: test.proto + option: + schemes: + - HTTP +`), "openapi_options") + if err == nil { + t.Errorf("Expected invalid key error") + } + +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 3ba883314d8..20bda429d9d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -25,7 +25,7 @@ go_library( "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/api:visibility_go_proto", "@go_googleapis//google/rpc:status_go_proto", - "@in_gopkg_yaml_v2//:yaml_v2", + "@in_gopkg_yaml_v3//:yaml_v3", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@org_golang_google_protobuf//encoding/protojson", "@org_golang_google_protobuf//proto", @@ -58,7 +58,7 @@ go_test( "@com_github_google_go_cmp//cmp", "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/api:visibility_go_proto", - "@in_gopkg_yaml_v2//:yaml_v2", + "@in_gopkg_yaml_v3//:yaml_v3", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//reflect/protodesc", diff --git a/protoc-gen-openapiv2/internal/genopenapi/format.go b/protoc-gen-openapiv2/internal/genopenapi/format.go index e957accc933..52c932e2e85 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/format.go +++ b/protoc-gen-openapiv2/internal/genopenapi/format.go @@ -5,7 +5,7 @@ import ( "errors" "io" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) type Format string diff --git a/protoc-gen-openapiv2/internal/genopenapi/format_test.go b/protoc-gen-openapiv2/internal/genopenapi/format_test.go index 9c3682c3d98..564aea5d214 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/format_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/format_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) func TestFormatValidate(t *testing.T) { diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go index b7ca09dff08..5df383c9b8c 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go @@ -5,7 +5,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/descriptorpb" diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index c5cf59e9d6d..91cc1617b90 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" - "gopkg.in/yaml.v2" ) type param struct { @@ -257,16 +256,13 @@ type keyVal struct { type openapiSchemaObjectProperties []keyVal func (p openapiSchemaObjectProperties) MarshalYAML() (interface{}, error) { - ms := make(yaml.MapSlice, len(p)) + m := make(map[string]interface{}) - for i, v := range p { - ms[i] = yaml.MapItem{ - Key: v.Key, - Value: v.Value, - } + for _, v := range p { + m[v.Key] = v.Value } - return ms, nil + return m, nil } func (op openapiSchemaObjectProperties) MarshalJSON() ([]byte, error) { diff --git a/protoc-gen-openapiv2/internal/genopenapi/types_test.go b/protoc-gen-openapiv2/internal/genopenapi/types_test.go index c6488fb8a78..849cfbfbb4a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types_test.go @@ -5,7 +5,7 @@ import ( "strings" "testing" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) func newSpaceReplacer() *strings.Replacer { diff --git a/repositories.bzl b/repositories.bzl index f54bab6ec71..e937bad5d9d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -185,8 +185,8 @@ def go_repositories(): go_repository( name = "com_github_davecgh_go_spew", importpath = "github.com/davecgh/go-spew", - sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", - version = "v1.1.1", + sum = "h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=", + version = "v1.1.0", ) go_repository( name = "com_github_dgrijalva_jwt_go", @@ -1007,14 +1007,14 @@ def go_repositories(): go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=", - version = "v2.4.0", + sum = "h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=", + version = "v2.2.3", ) go_repository( name = "in_gopkg_yaml_v3", importpath = "gopkg.in/yaml.v3", - sum = "h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=", - version = "v3.0.0-20200313102051-9f266ea9e77c", + sum = "h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=", + version = "v3.0.1", ) go_repository( name = "io_etcd_go_bbolt", @@ -1022,12 +1022,6 @@ def go_repositories(): sum = "h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=", version = "v1.3.2", ) - go_repository( - name = "io_k8s_sigs_yaml", - importpath = "sigs.k8s.io/yaml", - sum = "h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=", - version = "v1.3.0", - ) go_repository( name = "io_opencensus_go", From 4805d9702a583c66fa188c4468b3cd401967963d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 1 Jun 2022 09:49:04 -0400 Subject: [PATCH 1311/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e544518c204..fb68f5c80ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,7 +97,7 @@ jobs: - uses: actions/setup-go@v3 with: check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.2 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.3 proto_lint: runs-on: ubuntu-latest steps: From 437752362b2acb46ee1397ac5be0d40b1c4e08f8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 1 Jun 2022 23:12:10 +0000 Subject: [PATCH 1312/1518] chore(deps): update dependency golang to v1.18.3 --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 2cc767bb5c5..1f69e5dcc59 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.2 +FROM golang:1.18.3 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index b1e5c5b7500..10511d82cc5 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.2 as builder +FROM golang:1.18.3 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index 2abd04508fe..208c9355008 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.2 as builder +FROM golang:1.18.3 as builder ARG RELEASE_VERSION From aec6aa29864109e41408491319a859f190ec4040 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 2 Jun 2022 21:46:10 -0400 Subject: [PATCH 1313/1518] Set fetch depth for renovate actions (#2741) This should help avoid the issue where a force push deletes all the history for a PR. Thanks to Arthur from Github for debugging this for me! --- .github/workflows/renovate.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 54547966f83..b99aa276228 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -17,6 +17,7 @@ jobs: steps: - uses: actions/checkout@v3 with: + fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - uses: actions/cache@v3 with: @@ -58,6 +59,7 @@ jobs: steps: - uses: actions/checkout@v3 with: + fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - run: make install - run: make clean From ced7848e498e862a7ef04feddab51bbe92a68851 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Jun 2022 15:46:21 +0000 Subject: [PATCH 1314/1518] chore(deps): update dependency io_bazel_rules_go to v0.33.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index a13336d807f..975fae6ce06 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "ab21448cef298740765f33a7f5acee0607203e4ea321219f2a4c85a6e0fb0a27", + sha256 = "685052b498b6ddfe562ca7a97736741d87916fe536623afb7da2824c0211c369", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.32.0/rules_go-v0.32.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.32.0/rules_go-v0.32.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip", ], ) From 10ca3272ffa4905bcf233be6c120559e403c95f2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 7 Jun 2022 15:57:37 +0000 Subject: [PATCH 1315/1518] fix(deps): update google.golang.org/genproto digest to d738665 --- go.mod | 4 ++-- go.sum | 9 ++++----- repositories.bzl | 8 ++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 25d39867bb6..4bde7c817ad 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,8 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd - google.golang.org/grpc v1.46.2 + google.golang.org/genproto v0.0.0-20220607140733-d738665f6195 + google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 9e6d0199673..8c9dabc3a24 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220607140733-d738665f6195 h1:dp5xvm3zUH+xcW+Pv1o+1phiOKLVAUA4Y2zSmvDRiRA= +google.golang.org/genproto v0.0.0-20220607140733-d738665f6195/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -384,9 +384,8 @@ google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2 h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index e937bad5d9d..abfb87a55c6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,14 +1069,14 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I=", - version = "v0.0.0-20220519153652-3a47de7e79bd", + sum = "h1:dp5xvm3zUH+xcW+Pv1o+1phiOKLVAUA4Y2zSmvDRiRA=", + version = "v0.0.0-20220607140733-d738665f6195", ) go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ=", - version = "v1.46.2", + sum = "h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8=", + version = "v1.47.0", ) go_repository( From 346e81cc12ba0780e973fc87c850ead6d61131a1 Mon Sep 17 00:00:00 2001 From: lakshkeswani <40606132+lakshkeswani@users.noreply.github.com> Date: Wed, 8 Jun 2022 00:25:07 +0000 Subject: [PATCH 1316/1518] openapiv2: Field options are properly rendered for repeated fields #2531 (#2742) * added product_id * updated updateswaggerObjectFromJSONSchema to resolve issue #2531 * added test cases in schemaoffield for issue #2531 * updated openapiItemsObject type to openapiSchemaObject for issue #2531 * genrated files after adding product id * updates * formated file * regenrated files * formated the file * Update examples/internal/proto/examplepb/a_bit_of_everything.proto Co-authored-by: Johan Brandhorst-Satzkorn * regenrated files Co-authored-by: Johan Brandhorst-Satzkorn --- examples/internal/clients/abe/BUILD.bazel | 1 + .../internal/clients/abe/api/swagger.yaml | 158 ++ .../abe/api_a_bit_of_everything_service.go | 40 + .../clients/abe/model_a_bit_of_everything.go | 2 + .../abe/model_a_bit_of_everything_1.go | 2 + .../abe/model_a_bit_of_everything_2.go | 2 + .../abe/model_a_bit_of_everything_3.go | 2 + .../abe/model_a_bit_of_everything_4.go | 2 + .../model_examplepb_a_bit_of_everything.go | 2 + ...ted_format_publisherspublisherbooksbook.go | 22 + .../proto/examplepb/a_bit_of_everything.pb.go | 1312 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 8 + .../a_bit_of_everything.swagger.json | 178 +++ .../examplepb/generated_input.swagger.json | 11 + .../proto/examplepb/stream.swagger.json | 11 + .../internal/genopenapi/template.go | 66 +- .../internal/genopenapi/template_test.go | 134 +- .../internal/genopenapi/types.go | 2 +- 18 files changed, 1275 insertions(+), 680 deletions(-) create mode 100644 examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index eafbb6d166d..b800b96dec9 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -38,6 +38,7 @@ go_library( "model_sub_string_message.go", "model_the_book_to_update_.go", "model_the_book_to_update__1.go", + "model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go", "model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask.go", "model_update_v2_request_request_for_update_includes_the_message_and_the_update_mask_1.go", "model_v1exampledeep_pathsingle_nested_name_single_nested.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index bf5491634ea..8086fd2e569 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -411,6 +411,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -730,6 +743,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -1036,6 +1062,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -1361,6 +1400,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -1672,6 +1724,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -1997,6 +2062,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -2347,6 +2425,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -2655,6 +2746,19 @@ paths: type: "string" x-exportParamName: "OptionalStringValue" x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" responses: 200: description: "A successful response." @@ -3885,6 +3989,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4291,6 +4404,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4452,6 +4574,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4612,6 +4743,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4757,6 +4897,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4901,6 +5050,15 @@ definitions: readOnly: true optionalStringValue: type: "string" + productId: + type: "array" + description: "Only digits are allowed." + title: "Test openapiv2 generation of repeated fields" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: "{\"int64_value\":12,\"double_value\":12.3}" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index d354827c520..1677b43000c 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -379,6 +379,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return ExamplepbABitOfEverything */ @@ -417,6 +418,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -537,6 +539,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -709,6 +714,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return ExamplepbABitOfEverything */ @@ -747,6 +753,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -867,6 +874,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1038,6 +1048,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return ExamplepbABitOfEverything */ @@ -1074,6 +1085,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1188,6 +1200,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1518,6 +1533,7 @@ This API creates a new ABitOfEverything * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return ExamplepbABitOfEverything */ @@ -1540,6 +1556,7 @@ type ABitOfEverythingServiceCreateOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1629,6 +1646,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2128,6 +2148,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return ExamplepbABitOfEverything */ @@ -2167,6 +2188,7 @@ type ABitOfEverythingServiceCustomOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -2290,6 +2312,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx co if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2463,6 +2488,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return interface{} */ @@ -2502,6 +2528,7 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { @@ -2625,6 +2652,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptions if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3223,6 +3253,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return interface{} */ @@ -3262,6 +3293,7 @@ type ABitOfEverythingServiceExistsOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { @@ -3385,6 +3417,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx co if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3673,6 +3708,7 @@ ABitOfEverythingServiceApiService * @param "Int64OverrideType" (optional.Int64) - * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. @return interface{} */ @@ -3712,6 +3748,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { Int64OverrideType optional.Int64 OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String + ProductId optional.Interface } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { @@ -3835,6 +3872,9 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 13177830042..80f4e6ce00e 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -60,4 +60,6 @@ type ABitOfEverything struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index 94b88c08c23..87eea2fbc15 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -61,4 +61,6 @@ type ABitOfEverything1 struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index dfb9223607e..2303f647fa9 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -60,4 +60,6 @@ type ABitOfEverything2 struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index 79de7f81158..12fb2834b45 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -60,4 +60,6 @@ type ABitOfEverything3 struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index bc6933331d6..29e254857d0 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -60,4 +60,6 @@ type ABitOfEverything4 struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index dad6286c3c7..2d8beaa48dd 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -61,4 +61,6 @@ type ExamplepbABitOfEverything struct { RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` + // Only digits are allowed. + ProductId []string `json:"productId,omitempty"` } diff --git a/examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go b/examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go new file mode 100644 index 00000000000..b928ebfe2f4 --- /dev/null +++ b/examples/internal/clients/abe/model_the_book_to_update_the_books_name_field_is_used_to_identify_the_book_to_be_updated_format_publisherspublisherbooksbook.go @@ -0,0 +1,22 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +type TheBookToUpdateTheBooksNameFieldIsUsedToIdentifyTheBookToBeUpdatedFormatPublisherspublisherbooksbook struct { + // Output only. The book's ID. + Id string `json:"id,omitempty"` + // Output only. Creation time of the book. + CreateTime time.Time `json:"createTime,omitempty"` +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 0a1252cdc47..5fa630fbd13 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -294,6 +294,8 @@ type ABitOfEverything struct { // mark a field as readonly in Open API definition OutputOnlyStringViaFieldBehaviorAnnotation string `protobuf:"bytes,39,opt,name=output_only_string_via_field_behavior_annotation,json=outputOnlyStringViaFieldBehaviorAnnotation,proto3" json:"output_only_string_via_field_behavior_annotation,omitempty"` OptionalStringValue *string `protobuf:"bytes,40,opt,name=optional_string_value,json=optionalStringValue,proto3,oneof" json:"optional_string_value,omitempty"` + // Test openapiv2 generation of repeated fields + ProductId []string `protobuf:"bytes,41,rep,name=product_id,json=productId,proto3" json:"product_id,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -608,6 +610,13 @@ func (x *ABitOfEverything) GetOptionalStringValue() string { return "" } +func (x *ABitOfEverything) GetProductId() []string { + if x != nil { + return x.ProductId + } + return nil +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1356,7 +1365,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x94, 0x20, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe2, 0x20, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1556,272 +1565,421 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, - 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x29, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2d, 0x92, 0x41, 0x2a, 0x32, + 0x18, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, + 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x78, 0x13, 0x80, 0x01, 0x01, 0x8a, 0x01, + 0x08, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x49, 0x64, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, + 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, + 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, + 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, + 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, + 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, + 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, + 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, + 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, + 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, + 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, + 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, + 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, + 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, + 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, + 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, + 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, + 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, + 0xff, 0x31, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, + 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, - 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, - 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, - 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, - 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x3a, 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, - 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, - 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, - 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, - 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, - 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, + 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, + 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, + 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, + 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, + 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, + 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, + 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, + 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, - 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, - 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, - 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, - 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, - 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, - 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, - 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, - 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, - 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, - 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, - 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, - 0x01, 0x32, 0xff, 0x31, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, - 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, + 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, + 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, - 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, + 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, + 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, + 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, + 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, + 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, + 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, - 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, - 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, - 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, - 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, + 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, + 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, + 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, + 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, + 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, + 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, + 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, + 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, @@ -1830,428 +1988,284 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, + 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, + 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, - 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, - 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, - 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, - 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, - 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, - 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, - 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, - 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, - 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, - 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, - 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, - 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, - 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, - 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, - 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, - 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, - 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, - 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, - 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, - 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, - 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, - 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, - 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, - 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, + 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, - 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, + 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, + 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, + 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, - 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, - 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, - 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, - 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, - 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, - 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, - 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, - 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, - 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, - 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, + 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, + 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, + 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, + 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, + 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, + 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, + 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, + 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, + 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, + 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, + 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, + 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, + 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, - 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, - 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, - 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, - 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, - 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, - 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, - 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, - 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, - 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, - 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, - 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, - 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, - 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, - 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, - 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, - 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, - 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, - 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, - 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, + 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, + 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, + 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, + 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, + 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, + 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, + 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, + 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, + 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, + 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, + 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, + 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, + 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, + 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, + 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, + 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 816e2271d00..2601982093f 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -374,6 +374,14 @@ message ABitOfEverything { string output_only_string_via_field_behavior_annotation = 39 [(google.api.field_behavior) = OUTPUT_ONLY]; optional string optional_string_value = 40; + + // Test openapiv2 generation of repeated fields + repeated string product_id = 41 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + pattern: "^[0-9]+$" + max_length: 19 + min_length: 1 + description: "Only digits are allowed." + }]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 228022d9489..1d4f278c6fa 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -503,6 +503,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -851,6 +865,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -1188,6 +1216,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -1543,6 +1585,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -1902,6 +1958,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -2147,6 +2217,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -2493,6 +2574,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -2823,6 +2918,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -3177,6 +3286,20 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" } ], "tags": [ @@ -3842,6 +3965,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -4270,6 +4404,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -4537,6 +4682,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5314,6 +5470,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5639,6 +5806,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 5a56f94ec54..1d81701459c 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -280,6 +280,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index eb26e62d42a..6ef2e64e7d9 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -407,6 +407,17 @@ }, "optionalStringValue": { "type": "string" + }, + "productId": { + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "description": "Only digits are allowed.", + "title": "Test openapiv2 generation of repeated fields" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index b308d1e3563..b1c908ad1d3 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -97,9 +97,10 @@ var wktSchemas = map[string]schemaCore{ ".google.protobuf.Value": {}, ".google.protobuf.ListValue": { Type: "array", - Items: (*openapiItemsObject)(&schemaCore{ - Type: "object", - }), + Items: (*openapiItemsObject)(&openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }}), }, ".google.protobuf.NullValue": { Type: "string", @@ -288,8 +289,10 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre } if items != nil { // array param.Items = &openapiItemsObject{ - Type: "string", - Enum: listEnumNames(reg, enum), + schemaCore: schemaCore{ + Type: "string", + Enum: listEnumNames(reg, enum), + }, } if reg.GetEnumsAsInts() { param.Items.Type = "integer" @@ -685,7 +688,7 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o ret = openapiSchemaObject{ schemaCore: schemaCore{ Type: "array", - Items: (*openapiItemsObject)(&core), + Items: (*openapiItemsObject)(&openapiSchemaObject{schemaCore: core}), }, } case object: @@ -1096,7 +1099,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re core.Enum = enumNames enumNames = s } - items = (*openapiItemsObject)(&core) + items = (*openapiItemsObject)(&openapiSchemaObject{schemaCore: core}) paramType = "array" paramFormat = "" collectionFormat = reg.GetRepeatedPathParamSeparatorName() @@ -2537,23 +2540,42 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option s.Title = goTemplateComments(s.Title, data, reg) s.Description = goTemplateComments(s.Description, data, reg) } - - s.ReadOnly = j.GetReadOnly() - s.MultipleOf = j.GetMultipleOf() - s.Maximum = j.GetMaximum() - s.ExclusiveMaximum = j.GetExclusiveMaximum() - s.Minimum = j.GetMinimum() - s.ExclusiveMinimum = j.GetExclusiveMinimum() - s.MaxLength = j.GetMaxLength() - s.MinLength = j.GetMinLength() - s.Pattern = j.GetPattern() - s.Default = j.GetDefault() + if s.Type == "array" { + s.Items.MaxLength = j.GetMaxLength() + s.Items.MinLength = j.GetMinLength() + s.Items.Pattern = j.GetPattern() + s.Items.Default = j.GetDefault() + s.Items.UniqueItems = j.GetUniqueItems() + s.Items.MaxProperties = j.GetMaxProperties() + s.Items.MinProperties = j.GetMinProperties() + s.Items.Required = j.GetRequired() + s.Items.Minimum = j.GetMinimum() + s.Items.Maximum = j.GetMaximum() + s.Items.ReadOnly = j.GetReadOnly() + s.Items.MultipleOf = j.GetMultipleOf() + s.Items.ExclusiveMaximum = j.GetExclusiveMaximum() + s.Items.ExclusiveMinimum = j.GetExclusiveMinimum() + s.Items.Enum = j.GetEnum() + } else { + s.MaxLength = j.GetMaxLength() + s.MinLength = j.GetMinLength() + s.Pattern = j.GetPattern() + s.Default = j.GetDefault() + s.UniqueItems = j.GetUniqueItems() + s.MaxProperties = j.GetMaxProperties() + s.MinProperties = j.GetMinProperties() + s.Required = j.GetRequired() + s.Minimum = j.GetMinimum() + s.Maximum = j.GetMaximum() + s.ReadOnly = j.GetReadOnly() + s.MultipleOf = j.GetMultipleOf() + s.ExclusiveMaximum = j.GetExclusiveMaximum() + s.ExclusiveMinimum = j.GetExclusiveMinimum() + s.Enum = j.GetEnum() + } s.MaxItems = j.GetMaxItems() s.MinItems = j.GetMinItems() - s.UniqueItems = j.GetUniqueItems() - s.MaxProperties = j.GetMaxProperties() - s.MinProperties = j.GetMinProperties() - s.Required = j.GetRequired() + if reg.GetUseJSONNamesForFields() { for i, r := range s.Required { // TODO(oyvindwe): Look up field and use field.GetJsonName()? diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 802baf7f4df..d85c64a6971 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3456,6 +3456,25 @@ func TestSchemaOfField(t *testing.T) { Title: "field title", Description: "field description", } + jsonSchemaWithOptions := &openapi_options.JSONSchema{ + Title: "field title", + Description: "field description", + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + MaxItems: 20, + MinItems: 2, + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + ReadOnly: true, + } var fieldOptions = new(descriptorpb.FieldOptions) proto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema) @@ -3496,7 +3515,9 @@ func TestSchemaOfField(t *testing.T) { schemaCore: schemaCore{ Type: "array", Items: &openapiItemsObject{ - Type: "string", + schemaCore: schemaCore{ + Type: "string", + }, }, }, }, @@ -3592,7 +3613,9 @@ func TestSchemaOfField(t *testing.T) { schemaCore: schemaCore{ Type: "array", Items: &openapiItemsObject{ - Type: "string", + schemaCore: schemaCore{ + Type: "string", + }, }, }, }, @@ -3764,9 +3787,9 @@ func TestSchemaOfField(t *testing.T) { expected: openapiSchemaObject{ schemaCore: schemaCore{ Type: "array", - Items: (*openapiItemsObject)(&schemaCore{ + Items: &openapiItemsObject{schemaCore: schemaCore{ Type: "object", - }), + }}, }, }, }, @@ -3834,8 +3857,10 @@ func TestSchemaOfField(t *testing.T) { refs: make(refMap), expected: openapiSchemaObject{ schemaCore: schemaCore{ - Type: "array", - Items: (*openapiItemsObject)(&schemaCore{Type: "string"}), + Type: "array", + Items: &openapiItemsObject{schemaCore: schemaCore{ + Type: "string", + }}, }, Title: "field title", Description: "field description", @@ -3927,8 +3952,10 @@ func TestSchemaOfField(t *testing.T) { refs: make(refMap), expected: openapiSchemaObject{ schemaCore: schemaCore{ - Type: "array", - Items: (*openapiItemsObject)(&schemaCore{Type: "string"}), + Type: "array", + Items: &openapiItemsObject{schemaCore: schemaCore{ + Type: "string", + }}, }, Title: "field title", Description: "field description", @@ -4034,6 +4061,97 @@ func TestSchemaOfField(t *testing.T) { }, }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("array_field_option"), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + }, + }, + openAPIOptions: &openapiconfig.OpenAPIOptions{ + Field: []*openapiconfig.OpenAPIFieldOption{ + { + Field: "example.Message.array_field_option", + Option: jsonSchemaWithOptions, + }, + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "array", + Items: &openapiItemsObject{ + schemaCore: schemaCore{ + Type: "string", + }, + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + ReadOnly: true, + }, + }, + Title: "field title", + Description: "field description", + MaxItems: 20, + MinItems: 2, + }, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("array_field_option"), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT64.Enum(), + }, + }, + openAPIOptions: &openapiconfig.OpenAPIOptions{ + Field: []*openapiconfig.OpenAPIFieldOption{ + { + Field: "example.Message.array_field_option", + Option: jsonSchemaWithOptions, + }, + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "array", + Items: &openapiItemsObject{ + schemaCore: schemaCore{ + Type: "string", + Format: "int64", + }, + MultipleOf: 100, + Maximum: 101, + ExclusiveMaximum: true, + Minimum: 1, + ExclusiveMinimum: true, + MaxLength: 10, + MinLength: 3, + Pattern: "[a-z]+", + UniqueItems: true, + MaxProperties: 33, + MinProperties: 22, + Required: []string{"req"}, + ReadOnly: true, + }, + }, + Title: "field title", + Description: "field description", + MaxItems: 20, + MinItems: 2, + }, + }, } for _, test := range tests { reg := descriptor.NewRegistry() diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 91cc1617b90..62fa82f1094 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -222,7 +222,7 @@ func (s *schemaCore) setRefFromFQN(ref string, reg *descriptor.Registry) error { return nil } -type openapiItemsObject schemaCore +type openapiItemsObject openapiSchemaObject // http://swagger.io/specification/#responsesObject type openapiResponsesObject map[string]openapiResponseObject From a2af31ca553844a4f6e0830b8a23ed129a721cc4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Jun 2022 01:48:21 +0000 Subject: [PATCH 1317/1518] fix(deps): update google.golang.org/genproto digest to 30acc4c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4bde7c817ad..2a07db178c1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220607140733-d738665f6195 + google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 8c9dabc3a24..f60c3eb912a 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220607140733-d738665f6195 h1:dp5xvm3zUH+xcW+Pv1o+1phiOKLVAUA4Y2zSmvDRiRA= -google.golang.org/genproto v0.0.0-20220607140733-d738665f6195/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa h1:u5ndLsuhUo/bFuumgRSYgK92eCf5IEAogxgNBqAjNqs= +google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index abfb87a55c6..78f7847db0d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:dp5xvm3zUH+xcW+Pv1o+1phiOKLVAUA4Y2zSmvDRiRA=", - version = "v0.0.0-20220607140733-d738665f6195", + sum = "h1:u5ndLsuhUo/bFuumgRSYgK92eCf5IEAogxgNBqAjNqs=", + version = "v0.0.0-20220607223854-30acc4cbd2aa", ) go_repository( name = "org_golang_google_grpc", From b92edf3ab10bdf4a3eeb57a581f5c6903bb9683b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 8 Jun 2022 19:55:59 -0400 Subject: [PATCH 1318/1518] Set version for gorelease (#2749) * Set version for gorelease This requires at least 1.18 now * Build on Go 1.16 too --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb68f5c80ff..d855c6e4fff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ jobs: build: strategy: matrix: - go-version: [1.17.x, 1.18.x] + go-version: [1.16.x, 1.17.x, 1.18.x] os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: @@ -96,6 +96,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: + go-version: 1.18 check-latest: true - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.3 proto_lint: From b996c3590a88dd35b27a280333c92988ba83ff31 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Jun 2022 20:17:08 -0400 Subject: [PATCH 1319/1518] fix(deps): update google.golang.org/genproto digest to ed9918b (#2747) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2a07db178c1..80d4d9aeb9e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa + google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index f60c3eb912a..beace1a52f9 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa h1:u5ndLsuhUo/bFuumgRSYgK92eCf5IEAogxgNBqAjNqs= -google.golang.org/genproto v0.0.0-20220607223854-30acc4cbd2aa/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac h1:ByeiW1F67iV9o8ipGskA+HWzSkMbRJuKLlwCdPxzn7A= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 78f7847db0d..8b55a40404b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:u5ndLsuhUo/bFuumgRSYgK92eCf5IEAogxgNBqAjNqs=", - version = "v0.0.0-20220607223854-30acc4cbd2aa", + sum = "h1:ByeiW1F67iV9o8ipGskA+HWzSkMbRJuKLlwCdPxzn7A=", + version = "v0.0.0-20220608133413-ed9918b62aac", ) go_repository( name = "org_golang_google_grpc", From 5d41954a8eb8075aef0c72842296da38a151411d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Jun 2022 20:17:23 -0400 Subject: [PATCH 1320/1518] fix(deps): update golang.org/x/oauth2 digest to d0670ef (#2748) Co-authored-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 80d4d9aeb9e..92cab29c12d 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 + golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac google.golang.org/grpc v1.47.0 diff --git a/go.sum b/go.sum index beace1a52f9..2d90b0b3a38 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb h1:8tDJ3aechhddbdPAxpycgXHJRMLpk/Ab+aa4OgdN5/g= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 8b55a40404b..7903e8f72c2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE=", - version = "v0.0.0-20220411215720-9780585627b5", + sum = "h1:8tDJ3aechhddbdPAxpycgXHJRMLpk/Ab+aa4OgdN5/g=", + version = "v0.0.0-20220608161450-d0670ef3b1eb", ) go_repository( name = "org_golang_x_sync", From 9d093d5cf9ab40513c1e263956d1d18905ec47e5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Jun 2022 17:27:31 +0000 Subject: [PATCH 1321/1518] fix(deps): update google.golang.org/genproto digest to 45ed7f3 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 92cab29c12d..1ec97232ee3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac + google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2d90b0b3a38..0a7672ed71e 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac h1:ByeiW1F67iV9o8ipGskA+HWzSkMbRJuKLlwCdPxzn7A= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e h1:ubR4JUtqN3ffdFjpKylv8scWk/mZstGmzXbgYSkuMl0= +google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7903e8f72c2..6e3357aa49f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ByeiW1F67iV9o8ipGskA+HWzSkMbRJuKLlwCdPxzn7A=", - version = "v0.0.0-20220608133413-ed9918b62aac", + sum = "h1:ubR4JUtqN3ffdFjpKylv8scWk/mZstGmzXbgYSkuMl0=", + version = "v0.0.0-20220614165028-45ed7f3ff16e", ) go_repository( name = "org_golang_google_grpc", From 3d2d7dfcd3c984da7b42b4a4d10d0e32e4032173 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 15 Jun 2022 15:00:05 +0000 Subject: [PATCH 1322/1518] fix(deps): update google.golang.org/genproto digest to f1464d1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1ec97232ee3..4b4a9830365 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e + google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 0a7672ed71e..f326980ce54 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e h1:ubR4JUtqN3ffdFjpKylv8scWk/mZstGmzXbgYSkuMl0= -google.golang.org/genproto v0.0.0-20220614165028-45ed7f3ff16e/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b h1:2LXbOcxY7BehyA9yu5hxYzaY67bLaJQhBX9O1zxxVis= +google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6e3357aa49f..53c00f63255 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ubR4JUtqN3ffdFjpKylv8scWk/mZstGmzXbgYSkuMl0=", - version = "v0.0.0-20220614165028-45ed7f3ff16e", + sum = "h1:2LXbOcxY7BehyA9yu5hxYzaY67bLaJQhBX9O1zxxVis=", + version = "v0.0.0-20220615141314-f1464d18c36b", ) go_repository( name = "org_golang_google_grpc", From 140d0778d8cee9ef3e2b11da26f7ac35c776b164 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Jun 2022 16:19:58 +0000 Subject: [PATCH 1323/1518] fix(deps): update google.golang.org/genproto digest to 88e70c0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4b4a9830365..a7dff0147ea 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b + google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index f326980ce54..84fb2f0825f 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b h1:2LXbOcxY7BehyA9yu5hxYzaY67bLaJQhBX9O1zxxVis= -google.golang.org/genproto v0.0.0-20220615141314-f1464d18c36b/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90 h1:4SPz2GL2CXJt28MTF8V6Ap/9ZiVbQlJeGSd9qtA7DLs= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 53c00f63255..84a6bd8228c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:2LXbOcxY7BehyA9yu5hxYzaY67bLaJQhBX9O1zxxVis=", - version = "v0.0.0-20220615141314-f1464d18c36b", + sum = "h1:4SPz2GL2CXJt28MTF8V6Ap/9ZiVbQlJeGSd9qtA7DLs=", + version = "v0.0.0-20220616135557-88e70c0c3a90", ) go_repository( name = "org_golang_google_grpc", From 344a76bbda60f2351928f05b6cd017583f0f64d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 13:45:15 +0000 Subject: [PATCH 1324/1518] fix(deps): update google.golang.org/genproto digest to 180714b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a7dff0147ea..6bb22ec0dc3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90 + google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 84fb2f0825f..2aded896c0f 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90 h1:4SPz2GL2CXJt28MTF8V6Ap/9ZiVbQlJeGSd9qtA7DLs= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad h1:kqrS+lhvaMHCxul6sKQvKJ8nAAhlVItmZV822hYFH/U= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 84a6bd8228c..a6ecdee6b48 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4SPz2GL2CXJt28MTF8V6Ap/9ZiVbQlJeGSd9qtA7DLs=", - version = "v0.0.0-20220616135557-88e70c0c3a90", + sum = "h1:kqrS+lhvaMHCxul6sKQvKJ8nAAhlVItmZV822hYFH/U=", + version = "v0.0.0-20220617124728-180714bec0ad", ) go_repository( name = "org_golang_google_grpc", From 39fde4532f9a935672e3640f2ce29ada41a9a891 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 16:22:06 +0000 Subject: [PATCH 1325/1518] fix(deps): update google.golang.org/genproto digest to 43db42f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6bb22ec0dc3..dcb0080f430 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad + google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2aded896c0f..31256fa0135 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad h1:kqrS+lhvaMHCxul6sKQvKJ8nAAhlVItmZV822hYFH/U= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7 h1:XTvrnF+agrvedRVFXmEdp+SwIvbGo7E6Y16Tr/LqURk= +google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a6ecdee6b48..0127d5c441d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:kqrS+lhvaMHCxul6sKQvKJ8nAAhlVItmZV822hYFH/U=", - version = "v0.0.0-20220617124728-180714bec0ad", + sum = "h1:XTvrnF+agrvedRVFXmEdp+SwIvbGo7E6Y16Tr/LqURk=", + version = "v0.0.0-20220621134657-43db42f103f7", ) go_repository( name = "org_golang_google_grpc", From bb3fa1c6517dd8747c318551714341135f541aa9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 18:36:50 +0000 Subject: [PATCH 1326/1518] fix(deps): update golang.org/x/oauth2 digest to fd043fe --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dcb0080f430..2cf3869b63d 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb + golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7 google.golang.org/grpc v1.47.0 diff --git a/go.sum b/go.sum index 31256fa0135..f914dc33874 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb h1:8tDJ3aechhddbdPAxpycgXHJRMLpk/Ab+aa4OgdN5/g= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 0127d5c441d..21073a0902a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:8tDJ3aechhddbdPAxpycgXHJRMLpk/Ab+aa4OgdN5/g=", - version = "v0.0.0-20220608161450-d0670ef3b1eb", + sum = "h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0=", + version = "v0.0.0-20220622183110-fd043fe589d2", ) go_repository( name = "org_golang_x_sync", From 0ab885c70c7826116ef1230a2ea5d0e950c5e540 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 22:06:09 +0000 Subject: [PATCH 1327/1518] fix(deps): update google.golang.org/genproto digest to ea41d75 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2cf3869b63d..0c6c6a1a2ea 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7 + google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index f914dc33874..06e6d0d5b78 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7 h1:XTvrnF+agrvedRVFXmEdp+SwIvbGo7E6Y16Tr/LqURk= -google.golang.org/genproto v0.0.0-20220621134657-43db42f103f7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f h1:kYlCnpX4eB0QEnXm12j4DAX4yrjjhJmsyuWtSSZ+Buo= +google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 21073a0902a..dc76c82b30d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XTvrnF+agrvedRVFXmEdp+SwIvbGo7E6Y16Tr/LqURk=", - version = "v0.0.0-20220621134657-43db42f103f7", + sum = "h1:kYlCnpX4eB0QEnXm12j4DAX4yrjjhJmsyuWtSSZ+Buo=", + version = "v0.0.0-20220622171453-ea41d75dfa0f", ) go_repository( name = "org_golang_google_grpc", From cb1fb905323b977e0ebb77a890696d7e30c9bc96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 02:24:14 +0000 Subject: [PATCH 1328/1518] fix(deps): update google.golang.org/genproto digest to 077d458 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0c6c6a1a2ea..370810ddf28 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f + google.golang.org/genproto v0.0.0-20220623142657-077d458a5694 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 06e6d0d5b78..1300e1be0d9 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f h1:kYlCnpX4eB0QEnXm12j4DAX4yrjjhJmsyuWtSSZ+Buo= -google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220623142657-077d458a5694 h1:itnFmgk4Ls5nT+mYO2ZK6F0DpKsGZLhB5BB9y5ZL2HA= +google.golang.org/genproto v0.0.0-20220623142657-077d458a5694/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index dc76c82b30d..710eafc5d3a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:kYlCnpX4eB0QEnXm12j4DAX4yrjjhJmsyuWtSSZ+Buo=", - version = "v0.0.0-20220622171453-ea41d75dfa0f", + sum = "h1:itnFmgk4Ls5nT+mYO2ZK6F0DpKsGZLhB5BB9y5ZL2HA=", + version = "v0.0.0-20220623142657-077d458a5694", ) go_repository( name = "org_golang_google_grpc", From 5acdd88dbfe52f06ab813a7c1d809d1030fd6c8d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 05:23:50 +0000 Subject: [PATCH 1329/1518] chore(deps): update dependency com_google_protobuf to v3.21.2 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 975fae6ce06..13726a1d091 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "a295dd3b9551d3e2749a9969583dea110c6cdcc39d02088f7c7bb1100077e081", - strip_prefix = "protobuf-3.21.1", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.1.tar.gz"], + sha256 = "66e1156ac78290db81335c79d1fc5a54123ebb62a43eb2e5b42a44ca23087517", + strip_prefix = "protobuf-3.21.2", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.2.tar.gz"], ) http_archive( From 8ea7156f28763adf7875da2a2a91f69df1aa6e23 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 15:24:42 +0000 Subject: [PATCH 1330/1518] fix(deps): update google.golang.org/genproto digest to 8cd45d7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 370810ddf28..ceba070d42d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220623142657-077d458a5694 + google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 1300e1be0d9..1467e977608 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220623142657-077d458a5694 h1:itnFmgk4Ls5nT+mYO2ZK6F0DpKsGZLhB5BB9y5ZL2HA= -google.golang.org/genproto v0.0.0-20220623142657-077d458a5694/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f h1:hJ/Y5SqPXbarffmAsApliUlcvMU+wScNGfyop4bZm8o= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 710eafc5d3a..01107c337bd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:itnFmgk4Ls5nT+mYO2ZK6F0DpKsGZLhB5BB9y5ZL2HA=", - version = "v0.0.0-20220623142657-077d458a5694", + sum = "h1:hJ/Y5SqPXbarffmAsApliUlcvMU+wScNGfyop4bZm8o=", + version = "v0.0.0-20220624142145-8cd45d7dbd1f", ) go_repository( name = "org_golang_google_grpc", From 29414b07e7ed504a12d63e32fd7134b489fc8047 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jun 2022 06:58:32 -0700 Subject: [PATCH 1331/1518] chore(deps): update dependency bazel to v5 (#2760) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index af8c8ec7c13..91ff57278e3 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -4.2.2 +5.2.0 From b738c75f1f5ba019a40ce8551320ee5b674d618a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 15:43:30 +0000 Subject: [PATCH 1332/1518] fix(deps): update google.golang.org/genproto digest to f754eec --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ceba070d42d..a5cf28c31c0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f + google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 1467e977608..269b3db6e33 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f h1:hJ/Y5SqPXbarffmAsApliUlcvMU+wScNGfyop4bZm8o= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7 h1:Mv5rePwTdFhAcnC6zznhkrXLz1okln7fXAVh/J7t/gQ= +google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 01107c337bd..a741860c049 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hJ/Y5SqPXbarffmAsApliUlcvMU+wScNGfyop4bZm8o=", - version = "v0.0.0-20220624142145-8cd45d7dbd1f", + sum = "h1:Mv5rePwTdFhAcnC6zznhkrXLz1okln7fXAVh/J7t/gQ=", + version = "v0.0.0-20220627151210-f754eecb4be7", ) go_repository( name = "org_golang_google_grpc", From 493569a6fd6fae9fd746ebcad82a17a5e125507b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 21:58:44 +0000 Subject: [PATCH 1333/1518] fix(deps): update google.golang.org/genproto digest to 0a92992 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index a5cf28c31c0..b8520bdd2c8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7 + google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 269b3db6e33..e64b42aa78c 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7 h1:Mv5rePwTdFhAcnC6zznhkrXLz1okln7fXAVh/J7t/gQ= -google.golang.org/genproto v0.0.0-20220627151210-f754eecb4be7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33 h1:3L4edWcjDHPWGcMl1N0YH1NSoasyvfEcZCe2rUbxHfs= +google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a741860c049..851f26fe324 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Mv5rePwTdFhAcnC6zznhkrXLz1okln7fXAVh/J7t/gQ=", - version = "v0.0.0-20220627151210-f754eecb4be7", + sum = "h1:3L4edWcjDHPWGcMl1N0YH1NSoasyvfEcZCe2rUbxHfs=", + version = "v0.0.0-20220627200112-0a929928cb33", ) go_repository( name = "org_golang_google_grpc", From 100d7abc60b5f81d437fc660be22a47e323b35ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 22:21:04 +0000 Subject: [PATCH 1334/1518] fix(deps): update golang.org/x/oauth2 digest to 02e64fa --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b8520bdd2c8..b90afe8ddd9 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 + golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33 google.golang.org/grpc v1.47.0 diff --git a/go.sum b/go.sum index e64b42aa78c..7998c50d65d 100644 --- a/go.sum +++ b/go.sum @@ -215,8 +215,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 h1:uBgVQYJLi/m8M0wzp+aGwBWt90gMRoOVf+aWTW10QHI= +golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 851f26fe324..91695a22bdb 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1138,8 +1138,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0=", - version = "v0.0.0-20220622183110-fd043fe589d2", + sum = "h1:uBgVQYJLi/m8M0wzp+aGwBWt90gMRoOVf+aWTW10QHI=", + version = "v0.0.0-20220628200809-02e64fa58f26", ) go_repository( name = "org_golang_x_sync", From 6b6c475b49f158e0a94fc4dadbcbf3ee36cb5814 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 01:24:11 +0000 Subject: [PATCH 1335/1518] fix(deps): update google.golang.org/genproto digest to d9e0b65 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b90afe8ddd9..b8ca562853e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33 + google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 7998c50d65d..39dd7902510 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33 h1:3L4edWcjDHPWGcMl1N0YH1NSoasyvfEcZCe2rUbxHfs= -google.golang.org/genproto v0.0.0-20220627200112-0a929928cb33/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 91695a22bdb..5b1839ada5c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:3L4edWcjDHPWGcMl1N0YH1NSoasyvfEcZCe2rUbxHfs=", - version = "v0.0.0-20220627200112-0a929928cb33", + sum = "h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU=", + version = "v0.0.0-20220628213854-d9e0b6570c03", ) go_repository( name = "org_golang_google_grpc", From 0ebdfba80649c56b0da0777376c970d17c3c9540 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 18:41:33 +0000 Subject: [PATCH 1336/1518] fix(deps): update google.golang.org/genproto digest to ad1d486 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b8ca562853e..4a72fa1609c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 + google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 39dd7902510..cf2971b700a 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM= +google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5b1839ada5c..d3eab418f94 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1069,8 +1069,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU=", - version = "v0.0.0-20220628213854-d9e0b6570c03", + sum = "h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM=", + version = "v0.0.0-20220630174209-ad1d48641aa7", ) go_repository( name = "org_golang_google_grpc", From b67dca635264ac3a1edaeedaf7a87963183e221b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 2 Jul 2022 23:49:46 -0400 Subject: [PATCH 1337/1518] fix(deps): update golang.org/x/oauth2 digest to 2104d58 (#2779) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 10 +- go.sum | 241 ++++++++++++++++++++++++++++++++++++++++++++++- repositories.bzl | 51 +++++----- 3 files changed, 271 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index 4a72fa1609c..c1f9d0ffc03 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 + golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 google.golang.org/grpc v1.47.0 @@ -17,7 +17,9 @@ require ( ) require ( - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect - google.golang.org/appengine v1.6.6 // indirect + github.com/kr/pretty v0.1.0 // indirect + golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect + golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect + google.golang.org/appengine v1.6.7 // indirect + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index cf2971b700a..4b115d035e6 100644 --- a/go.sum +++ b/go.sum @@ -13,14 +13,36 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -30,20 +52,26 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -51,7 +79,11 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -71,6 +103,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -86,8 +120,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -97,12 +133,18 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -110,15 +152,30 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -132,18 +189,24 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -172,6 +235,8 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -180,6 +245,9 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -207,16 +275,44 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 h1:uBgVQYJLi/m8M0wzp+aGwBWt90gMRoOVf+aWTW10QHI= -golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 h1:VnGaRqoLmqZH/3TMLJwYCEWkR4j1nuIU1U9TvbqsDUw= +golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -225,6 +321,10 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -250,14 +350,40 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -265,7 +391,9 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -311,10 +439,24 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -331,13 +473,37 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -368,6 +534,54 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM= google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -382,10 +596,27 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/repositories.bzl b/repositories.bzl index d3eab418f94..fcc4ea2cb52 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -4,8 +4,8 @@ def go_repositories(): go_repository( name = "co_honnef_go_tools", importpath = "honnef.co/go/tools", - sum = "h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=", - version = "v0.0.1-2020.1.4", + sum = "h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=", + version = "v0.0.0-20190523083050-ea95bdfd59fc", ) go_repository( name = "com_github_alecthomas_template", @@ -298,8 +298,8 @@ def go_repositories(): go_repository( name = "com_github_golang_mock", importpath = "github.com/golang/mock", - sum = "h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=", - version = "v1.4.4", + sum = "h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8=", + version = "v1.1.1", ) go_repository( name = "com_github_golang_protobuf", @@ -930,8 +930,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", - sum = "h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8=", - version = "v0.65.0", + sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", + version = "v0.34.0", ) go_repository( @@ -940,6 +940,13 @@ def go_repositories(): sum = "h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=", version = "v1.8.0", ) + go_repository( + name = "com_google_cloud_go_compute", + importpath = "cloud.google.com/go/compute", + sum = "h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=", + version = "v1.7.0", + ) + go_repository( name = "com_google_cloud_go_datastore", importpath = "cloud.google.com/go/datastore", @@ -1063,8 +1070,8 @@ def go_repositories(): go_repository( name = "org_golang_google_appengine", importpath = "google.golang.org/appengine", - sum = "h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=", - version = "v1.6.6", + sum = "h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=", + version = "v1.6.7", ) go_repository( name = "org_golang_google_genproto", @@ -1100,8 +1107,8 @@ def go_repositories(): go_repository( name = "org_golang_x_exp", importpath = "golang.org/x/exp", - sum = "h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y=", - version = "v0.0.0-20200224162631-6cc2880d07d6", + sum = "h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=", + version = "v0.0.0-20190121172915-509febef88a4", ) go_repository( @@ -1113,8 +1120,8 @@ def go_repositories(): go_repository( name = "org_golang_x_lint", importpath = "golang.org/x/lint", - sum = "h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=", - version = "v0.0.0-20200302205851-738671d3881b", + sum = "h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=", + version = "v0.0.0-20190313153728-d0100b6bd8b3", ) go_repository( @@ -1132,26 +1139,26 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=", - version = "v0.0.0-20220127200216-cd36cc0744dd", + sum = "h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ=", + version = "v0.0.0-20220624214902-1bab6f366d9e", ) go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:uBgVQYJLi/m8M0wzp+aGwBWt90gMRoOVf+aWTW10QHI=", - version = "v0.0.0-20220628200809-02e64fa58f26", + sum = "h1:VnGaRqoLmqZH/3TMLJwYCEWkR4j1nuIU1U9TvbqsDUw=", + version = "v0.0.0-20220630143837-2104d58473e0", ) go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=", - version = "v0.0.0-20200625203802-6e8e738ad208", + sum = "h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=", + version = "v0.0.0-20190423024810-112230192c58", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=", - version = "v0.0.0-20211216021012-1d35b9e2eb4e", + sum = "h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s=", + version = "v0.0.0-20220610221304-9f5ed59c137d", ) go_repository( name = "org_golang_x_term", @@ -1176,8 +1183,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k=", - version = "v0.0.0-20200825202427-b303f430e36d", + sum = "h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=", + version = "v0.0.0-20190524140312-2c0ae7006135", ) go_repository( From ade0479ca9f2e68b72c97b77fbc2126d974c3855 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 2 Jul 2022 20:49:56 -0700 Subject: [PATCH 1338/1518] Disable renovate on v1 (#2781) Renovate requires CI and v1 is not being migrated to github actions. --- renovate.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/renovate.json b/renovate.json index da2c40ccd22..6681d36e99b 100644 --- a/renovate.json +++ b/renovate.json @@ -4,7 +4,6 @@ "helpers:pinGitHubActionDigests" ], "baseBranches": [ - "v1", "master" ], "postUpdateOptions": [ @@ -20,19 +19,6 @@ ], "automerge": true }, - { - "baseBranchList": [ - "v1" - ], - "packageNames": [ - "github.com/golang/protobuf", - "google.golang.org/genproto", - "io_bazel_rules_go", - "golang.org/x/oauth2", - "google.golang.org/grpc" - ], - "enabled": false - }, { "baseBranchList": [ "master" From 6d7d485a14951c9cf314d1926362044b7d289853 Mon Sep 17 00:00:00 2001 From: Alberto Date: Sat, 2 Jul 2022 21:27:18 -0700 Subject: [PATCH 1339/1518] feat: add support for oneof fields in request bodies (#2739) * feat: add support for oneof fields in request bodies * fix: typos and codegen * chore: buf format * feat: add support for oneof fields in request bodies * fix: typos and codegen * chore: buf format * feat: prep assignable expressions in body * fix: ensure full prefix always added, tests * chore: docs * fix: generation of oneof params * fix: check nil, avoid unnecessary newlines Co-authored-by: aesadde --- .../internal/clients/echo/api/swagger.yaml | 68 ++++++++ .../internal/clients/echo/api_echo_service.go | 137 +++++++++++++++++ examples/internal/integration/client_test.go | 20 +++ .../proto/examplepb/echo_service.pb.go | 87 ++++++----- .../proto/examplepb/echo_service.pb.gw.go | 145 ++++++++++++++++++ .../proto/examplepb/echo_service.proto | 4 + .../proto/examplepb/echo_service.swagger.json | 80 ++++++++++ internal/descriptor/types.go | 47 +++++- .../internal/gengateway/template.go | 16 ++ 9 files changed, 560 insertions(+), 44 deletions(-) diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 8804e058fee..cd3b3c5dcf1 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -396,6 +396,74 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/echo_body/{id}: + put: + tags: + - "EchoService" + summary: "EchoBody method receives a simple message and returns it." + operationId: "EchoService_EchoBody2" + parameters: + - name: "id" + in: "path" + description: "Id represents the message identifier." + required: true + type: "string" + x-exportParamName: "Id" + - in: "body" + name: "no" + required: true + schema: + $ref: "#/definitions/examplepbEmbedded" + x-exportParamName: "No" + - name: "num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Num" + x-optionalDataType: "String" + - name: "lineNum" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/example/echo_delete: delete: tags: diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index 0347477d8b7..f72ef85c79a 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -826,6 +826,143 @@ func (a *EchoServiceApiService) EchoServiceEchoBody(ctx context.Context, body Ex return localVarReturnValue, localVarHttpResponse, nil } +/* +EchoServiceApiService EchoBody method receives a simple message and returns it. + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param id Id represents the message identifier. + * @param no + * @param optional nil or *EchoServiceEchoBody2Opts - Optional Parameters: + * @param "Num" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + +@return ExamplepbSimpleMessage +*/ + +type EchoServiceEchoBody2Opts struct { + Num optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String +} + +func (a *EchoServiceApiService) EchoServiceEchoBody2(ctx context.Context, id string, no ExamplepbEmbedded, localVarOptionals *EchoServiceEchoBody2Opts) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_body/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.Num.IsSet() { + localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &no + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSimpleMessage + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* EchoServiceApiService EchoDelete method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index f0bca312320..e206f537e2c 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -48,6 +48,26 @@ func TestEchoBodyClient(t *testing.T) { } } +func TestEchoBody2Client(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + + cfg := echo.NewConfiguration() + cfg.BasePath = "http://localhost:8088" + + cl := echo.NewAPIClient(cfg) + req := echo.ExamplepbEmbedded{Note: "note"} + resp, _, err := cl.EchoServiceApi.EchoServiceEchoBody2(context.Background(), "foo", req, nil) + if err != nil { + t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) + } + if got, want := resp.Id, "foo"; got != want { + t.Errorf("resp.Id = %q; want %q", got, want) + } +} + func TestAbitOfEverythingClient(t *testing.T) { if testing.Short() { t.Skip() diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index a846d8135f0..abfd52677fc 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -425,7 +425,7 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xa1, 0x08, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, + 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xc3, 0x08, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbc, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, @@ -446,7 +446,7 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, 0x7d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, + 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, @@ -454,49 +454,52 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x20, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, - 0x12, 0xab, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, + 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x42, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x5a, 0x20, 0x3a, 0x02, 0x6e, 0x6f, 0x1a, + 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x22, 0x15, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, + 0x64, 0x79, 0x12, 0xab, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0xbd, 0x01, 0x0a, 0x09, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xbd, - 0x01, 0x0a, 0x09, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, - 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x1a, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0xb7, - 0x01, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x75, 0x6e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x1a, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x32, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, + 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x68, 0x6f, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x75, 0x6e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 8a482c994ce..cc74241f1ed 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -535,6 +535,102 @@ func local_request_EchoService_EchoBody_0(ctx context.Context, marshaler runtime } +var ( + filter_EchoService_EchoBody_1 = &utilities.DoubleArray{Encoding: map[string]int{"no": 0, "id": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_EchoService_EchoBody_1(ctx context.Context, marshaler runtime.Marshaler, client EchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if protoReq.Ext == nil { + protoReq.Ext = &SimpleMessage_No{} + } else if _, ok := protoReq.Ext.(*SimpleMessage_No); !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_No, but: %t\n", protoReq.Ext) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Ext.(*SimpleMessage_No).No); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoBody_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_EchoService_EchoBody_1(ctx context.Context, marshaler runtime.Marshaler, server EchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if protoReq.Ext == nil { + protoReq.Ext = &SimpleMessage_No{} + } else if _, ok := protoReq.Ext.(*SimpleMessage_No); !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_No, but: %t\n", protoReq.Ext) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Ext.(*SimpleMessage_No).No); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoBody_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoBody(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_EchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -823,6 +919,30 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("PUT", pattern_EchoService_EchoBody_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EchoService_EchoBody_1(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoBody_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("DELETE", pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1062,6 +1182,27 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("PUT", pattern_EchoService_EchoBody_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EchoService_EchoBody_1(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_EchoService_EchoBody_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("DELETE", pattern_EchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1141,6 +1282,8 @@ var ( pattern_EchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "")) + pattern_EchoService_EchoBody_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo_body", "id"}, "")) + pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) pattern_EchoService_EchoPatch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_patch"}, "")) @@ -1161,6 +1304,8 @@ var ( forward_EchoService_EchoBody_0 = runtime.ForwardResponseMessage + forward_EchoService_EchoBody_1 = runtime.ForwardResponseMessage + forward_EchoService_EchoDelete_0 = runtime.ForwardResponseMessage forward_EchoService_EchoPatch_0 = runtime.ForwardResponseMessage diff --git a/examples/internal/proto/examplepb/echo_service.proto b/examples/internal/proto/examplepb/echo_service.proto index 679f8f241c9..7295b6976eb 100644 --- a/examples/internal/proto/examplepb/echo_service.proto +++ b/examples/internal/proto/examplepb/echo_service.proto @@ -76,6 +76,10 @@ service EchoService { option (google.api.http) = { post: "/v1/example/echo_body" body: "*" + additional_bindings { + put: "/v1/example/echo_body/{id}" + body: "no" + } }; } // EchoDelete method receives a simple message and returns it. diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 9f0a11dae3f..ea5bb98d059 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -468,6 +468,86 @@ ] } }, + "/v1/example/echo_body/{id}": { + "put": { + "summary": "EchoBody method receives a simple message and returns it.", + "operationId": "EchoService_EchoBody2", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbSimpleMessage" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "Id represents the message identifier.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "no", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbEmbedded" + } + }, + { + "name": "num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lineNum", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + } + ], + "tags": [ + "EchoService" + ] + } + }, "/v1/example/echo_delete": { "delete": { "summary": "EchoDelete method receives a simple message and returns it.", diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index 38223c3c3c0..7768d5e2f90 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -327,6 +327,12 @@ func (b Body) AssignableExpr(msgExpr string) string { return b.FieldPath.AssignableExpr(msgExpr) } +// AssignableExprPrep returns preparatory statements for an assignable expression to initialize the +// method request object. +func (b Body) AssignableExprPrep(msgExpr string) string { + return b.FieldPath.AssignableExprPrep(msgExpr) +} + // FieldPath is a path to a field from a request message. type FieldPath []FieldPathComponent @@ -356,13 +362,51 @@ func (p FieldPath) IsOptionalProto3() bool { } // AssignableExpr is an assignable expression in Go to be used to assign a value to the target field. -// It starts with "msgExpr", which is the go expression of the method request object. +// It starts with "msgExpr", which is the go expression of the method request object. Before using +// such an expression the prep statements must be emitted first, in case the field path includes +// a oneof. See FieldPath.AssignableExprPrep. func (p FieldPath) AssignableExpr(msgExpr string) string { l := len(p) if l == 0 { return msgExpr } + components := msgExpr + for i, c := range p { + // We need to check if the target is not proto3_optional first. + // Under the hood, proto3_optional uses oneof to signal to old proto3 clients + // that presence is tracked for this field. This oneof is known as a "synthetic" oneof. + if !c.Target.GetProto3Optional() && c.Target.OneofIndex != nil { + index := c.Target.OneofIndex + msg := c.Target.Message + oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) + oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() + + if c.Target.ForcePrefixedName { + oneofFieldName = msg.File.Pkg() + "." + oneofFieldName + } + + components = components + "." + oneOfName + ".(*" + oneofFieldName + ")" + } + + if i == l-1 { + components = components + "." + c.AssignableExpr() + continue + } + components = components + "." + c.ValueExpr() + } + return components +} + +// AssignableExprPrep returns preparation statements for an assignable expression to assign a value +// to the target field. The Go expression of the method request object is "msgExpr". This is only +// needed for field paths that contain oneofs. Otherwise, an empty string is returned. +func (p FieldPath) AssignableExprPrep(msgExpr string) string { + l := len(p) + if l == 0 { + return "" + } + var preparations []string components := msgExpr for i, c := range p { @@ -397,7 +441,6 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { components = components + "." + c.ValueExpr() } - preparations = append(preparations, components) return strings.Join(preparations, "\n") } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 99e8817acfe..a59b6c0fe82 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -323,6 +323,10 @@ var ( if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } + {{- $protoReq := .Body.AssignableExprPrep "protoReq" -}} + {{- if ne "" $protoReq }} + {{printf "%s" $protoReq }} + {{- end}} if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -373,6 +377,10 @@ var ( return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{else}} + {{- $protoReq := $param.AssignableExprPrep "protoReq" -}} + {{- if ne "" $protoReq }} + {{printf "%s" $protoReq }} + {{- end}} {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) @@ -484,6 +492,10 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } + {{- $protoReq := .Body.AssignableExprPrep "protoReq" -}} + {{- if ne "" $protoReq }} + {{printf "%s" $protoReq }} + {{- end}} if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -534,6 +546,10 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{else}} + {{- $protoReq := $param.AssignableExprPrep "protoReq" -}} + {{- if ne "" $protoReq }} + {{printf "%s" $protoReq }} + {{- end}} {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) From ef60d16b921b6db2c8ecd4d5264b1a0936930352 Mon Sep 17 00:00:00 2001 From: Oleg Velikanov Date: Tue, 5 Jul 2022 16:51:39 +0300 Subject: [PATCH 1340/1518] Bugfix/issue 2681 (#2773) * [issue-2681] add unit test covering the bug * [issue-2681] use message definition description as a body parameter description * [issue-2681] regenerate the files * [issue-2681] run bazel gazelle --- .../internal/clients/abe/api/swagger.yaml | 2 + .../abe/api_a_bit_of_everything_service.go | 2 +- .../internal/clients/echo/api/swagger.yaml | 1 + .../internal/clients/echo/api_echo_service.go | 2 +- .../generateunboundmethods/api/swagger.yaml | 6 + ...i_generate_unbound_methods_echo_service.go | 6 +- .../GenerateUnboundMethodsEchoServiceApi.md | 6 +- .../clients/unannotatedecho/api/swagger.yaml | 1 + .../api_unannotated_echo_service.go | 2 +- .../a_bit_of_everything.swagger.json | 1 + .../proto/examplepb/echo_service.swagger.json | 1 + .../generate_unbound_methods.swagger.json | 3 + .../examplepb/generated_input.swagger.json | 1 + .../examplepb/openapi_merge.swagger.json | 6 + .../examplepb/openapi_merge_a.swagger.json | 4 + .../examplepb/openapi_merge_b.swagger.json | 2 + .../proto/examplepb/stream.swagger.json | 2 +- .../unannotated_echo_service.swagger.json | 1 + .../internal/genopenapi/BUILD.bazel | 1 + .../internal/genopenapi/template.go | 13 +- .../internal/genopenapi/template_test.go | 114 ++++++++++++++++++ 21 files changed, 161 insertions(+), 16 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 8086fd2e569..f8650643481 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -46,6 +46,8 @@ paths: parameters: - in: "body" name: "body" + description: "Intentionally complicated message type to cover many features\ + \ of Protobuf." required: true schema: $ref: "#/definitions/examplepbABitOfEverything" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 1677b43000c..680a28871c8 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -1784,7 +1784,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body Intentionally complicated message type to cover many features of Protobuf. @return ExamplepbABitOfEverything */ diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index cd3b3c5dcf1..e56c6a5e2a7 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -383,6 +383,7 @@ paths: parameters: - in: "body" name: "body" + description: "SimpleMessage represents a simple message sent to the Echo service." required: true schema: $ref: "#/definitions/examplepbSimpleMessage" diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index f72ef85c79a..32dc2bbdade 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -729,7 +729,7 @@ func (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, noNote str /* EchoServiceApiService EchoBody method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body SimpleMessage represents a simple message sent to the Echo service. @return ExamplepbSimpleMessage */ diff --git a/examples/internal/clients/generateunboundmethods/api/swagger.yaml b/examples/internal/clients/generateunboundmethods/api/swagger.yaml index 2ff23c532ec..746556eff27 100644 --- a/examples/internal/clients/generateunboundmethods/api/swagger.yaml +++ b/examples/internal/clients/generateunboundmethods/api/swagger.yaml @@ -23,6 +23,8 @@ paths: parameters: - in: "body" name: "body" + description: "GenerateUnboundMethodsSimpleMessage represents a simple message\ + \ sent to the unannotated GenerateUnboundMethodsEchoService service." required: true schema: $ref: "#/definitions/examplepbGenerateUnboundMethodsSimpleMessage" @@ -45,6 +47,8 @@ paths: parameters: - in: "body" name: "body" + description: "GenerateUnboundMethodsSimpleMessage represents a simple message\ + \ sent to the unannotated GenerateUnboundMethodsEchoService service." required: true schema: $ref: "#/definitions/examplepbGenerateUnboundMethodsSimpleMessage" @@ -67,6 +71,8 @@ paths: parameters: - in: "body" name: "body" + description: "GenerateUnboundMethodsSimpleMessage represents a simple message\ + \ sent to the unannotated GenerateUnboundMethodsEchoService service." required: true schema: $ref: "#/definitions/examplepbGenerateUnboundMethodsSimpleMessage" diff --git a/examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go b/examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go index 1df1aa7e978..dd9c050b931 100644 --- a/examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go +++ b/examples/internal/clients/generateunboundmethods/api_generate_unbound_methods_echo_service.go @@ -28,7 +28,7 @@ type GenerateUnboundMethodsEchoServiceApiService service GenerateUnboundMethodsEchoServiceApiService Echo method receives a simple message and returns it. The message posted as the id parameter will also be returned. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. @return ExamplepbGenerateUnboundMethodsSimpleMessage */ @@ -128,7 +128,7 @@ func (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundMethodsEcho /* GenerateUnboundMethodsEchoServiceApiService EchoBody method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. @return ExamplepbGenerateUnboundMethodsSimpleMessage */ @@ -228,7 +228,7 @@ func (a *GenerateUnboundMethodsEchoServiceApiService) GenerateUnboundMethodsEcho /* GenerateUnboundMethodsEchoServiceApiService EchoDelete method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. @return ExamplepbGenerateUnboundMethodsSimpleMessage */ diff --git a/examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md b/examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md index 6d3426c300b..58446c8c6a8 100644 --- a/examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md +++ b/examples/internal/clients/generateunboundmethods/docs/GenerateUnboundMethodsEchoServiceApi.md @@ -20,7 +20,7 @@ The message posted as the id parameter will also be returned. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. - **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| | + **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | ### Return type @@ -46,7 +46,7 @@ EchoBody method receives a simple message and returns it. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. - **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| | + **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | ### Return type @@ -72,7 +72,7 @@ EchoDelete method receives a simple message and returns it. Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. - **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| | + **body** | [**ExamplepbGenerateUnboundMethodsSimpleMessage**](ExamplepbGenerateUnboundMethodsSimpleMessage.md)| GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service. | ### Return type diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index 4dbe262b630..afa15b8757e 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -248,6 +248,7 @@ paths: parameters: - in: "body" name: "body" + description: "A simple message with many types" required: true schema: $ref: "#/definitions/examplepbUnannotatedSimpleMessage" diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index 6bef548aed3..70697ae6749 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -416,7 +416,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx conte /* UnannotatedEchoServiceApiService EchoBody method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param body + * @param body A simple message with many types @return ExamplepbUnannotatedSimpleMessage */ diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 1d4f278c6fa..71064014738 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -87,6 +87,7 @@ "parameters": [ { "name": "body", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index ea5bb98d059..20d4864eac6 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -456,6 +456,7 @@ "parameters": [ { "name": "body", + "description": "SimpleMessage represents a simple message sent to the Echo service.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json index b23bd6bbc1c..521865a52de 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json +++ b/examples/internal/proto/examplepb/generate_unbound_methods.swagger.json @@ -39,6 +39,7 @@ "parameters": [ { "name": "body", + "description": "GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.", "in": "body", "required": true, "schema": { @@ -72,6 +73,7 @@ "parameters": [ { "name": "body", + "description": "GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.", "in": "body", "required": true, "schema": { @@ -105,6 +107,7 @@ "parameters": [ { "name": "body", + "description": "GenerateUnboundMethodsSimpleMessage represents a simple message sent to the unannotated GenerateUnboundMethodsEchoService service.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 1d81701459c..67b87be1e57 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -37,6 +37,7 @@ "parameters": [ { "name": "body", + "description": "Intentionally complicated message type to cover many features of Protobuf.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/openapi_merge.swagger.json b/examples/internal/proto/examplepb/openapi_merge.swagger.json index dbcaee8b96e..86bbe5c7c3b 100644 --- a/examples/internal/proto/examplepb/openapi_merge.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge.swagger.json @@ -45,6 +45,7 @@ "parameters": [ { "name": "body", + "description": "InMessageA represents a message to ServiceA and ServiceC.", "in": "body", "required": true, "schema": { @@ -79,6 +80,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageA represents a message returned from ServiceA.", "in": "body", "required": true, "schema": { @@ -113,6 +115,7 @@ "parameters": [ { "name": "body", + "description": "InMessageB represents a message to ServiceB.", "in": "body", "required": true, "schema": { @@ -147,6 +150,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageB represents a message returned from ServiceB.", "in": "body", "required": true, "schema": { @@ -181,6 +185,7 @@ "parameters": [ { "name": "body", + "description": "InMessageA represents a message to ServiceA and ServiceC.", "in": "body", "required": true, "schema": { @@ -215,6 +220,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageA represents a message returned from ServiceA.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json index 1b85e701852..a0942f2d805 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_a.swagger.json @@ -42,6 +42,7 @@ "parameters": [ { "name": "body", + "description": "InMessageA represents a message to ServiceA and ServiceC.", "in": "body", "required": true, "schema": { @@ -76,6 +77,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageA represents a message returned from ServiceA.", "in": "body", "required": true, "schema": { @@ -110,6 +112,7 @@ "parameters": [ { "name": "body", + "description": "InMessageA represents a message to ServiceA and ServiceC.", "in": "body", "required": true, "schema": { @@ -144,6 +147,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageA represents a message returned from ServiceA.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json index 49e68479ca9..a746e271188 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.swagger.json +++ b/examples/internal/proto/examplepb/openapi_merge_b.swagger.json @@ -39,6 +39,7 @@ "parameters": [ { "name": "body", + "description": "InMessageB represents a message to ServiceB.", "in": "body", "required": true, "schema": { @@ -73,6 +74,7 @@ "parameters": [ { "name": "body", + "description": "OutMessageB represents a message returned from ServiceB.", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 6ef2e64e7d9..ac5182e41c7 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -68,7 +68,7 @@ "parameters": [ { "name": "body", - "description": " (streaming inputs)", + "description": "Intentionally complicated message type to cover many features of Protobuf. (streaming inputs)", "in": "body", "required": true, "schema": { diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index aaee88ebef0..92623bb6220 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -304,6 +304,7 @@ "parameters": [ { "name": "body", + "description": "A simple message with many types", "in": "body", "required": true, "schema": { diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 20bda429d9d..d1279319fb8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -60,6 +60,7 @@ go_test( "@go_googleapis//google/api:visibility_go_proto", "@in_gopkg_yaml_v3//:yaml_v3", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@org_golang_google_protobuf//encoding/protojson", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//reflect/protodesc", "@org_golang_google_protobuf//types/descriptorpb", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index b1c908ad1d3..6d67fc2376c 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1163,17 +1163,18 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re schema.Properties = &openapiSchemaObjectProperties{} } } else { + messageSchema, err := renderMessageAsDefinition(meth.RequestType, reg, customRefs, b.PathParams) + if err != nil { + return err + } if len(b.PathParams) == 0 { - err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) + err = schema.setRefFromFQN(meth.RequestType.FQMN(), reg) if err != nil { return err } + desc = messageSchema.Description } else { - var err error - schema, err = renderMessageAsDefinition(meth.RequestType, reg, customRefs, b.PathParams) - if err != nil { - return err - } + schema = messageSchema if schema.Properties == nil || len(*schema.Properties) == 0 { glog.Warningf("created a body with 0 properties in the message, this might be unintended: %s", *meth.RequestType) } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index d85c64a6971..539406f0865 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -21,6 +21,7 @@ import ( "google.golang.org/genproto/googleapis/api/annotations" "google.golang.org/genproto/googleapis/api/visibility" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protodesc" "google.golang.org/protobuf/types/descriptorpb" @@ -6516,6 +6517,119 @@ func TestSubPathParams(t *testing.T) { } } +func TestRenderServicesParameterDescriptionNoFieldBody(t *testing.T) { + + optionsRaw := + `{ + "[grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema]": { + "jsonSchema": { + "title": "aMessage title", + "description": "aMessage description" + } + } + }` + + options := &descriptorpb.MessageOptions{} + err := protojson.Unmarshal([]byte(optionsRaw), options) + if err != nil { + t.Fatalf("Error while unmarshalling options: %s", err.Error()) + } + + aMessageDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("AMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("project_id"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("other_field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + }, + }, + Options: options, + } + someResponseDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("SomeResponse"), + } + aMeth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("AMethod"), + InputType: proto.String("AMessage"), + OutputType: proto.String("SomeResponse"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("Test"), + Method: []*descriptorpb.MethodDescriptorProto{aMeth}, + } + aMessage := &descriptor.Message{ + DescriptorProto: aMessageDesc, + } + someResponseMessage := &descriptor.Message{ + DescriptorProto: someResponseDesc, + } + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("api"), + Name: proto.String("test.proto"), + MessageType: []*descriptorpb.DescriptorProto{aMessageDesc, someResponseDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{aMessage, someResponseMessage}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: aMeth, + RequestType: aMessage, + ResponseType: someResponseMessage, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/projects/someotherpath", + }, + Body: &descriptor.Body{}, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err = reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + got := result.Paths["/v1/projects/someotherpath"].Post.Parameters[0].Description + want := "aMessage description" + + if got != want { + t.Fatalf("Wrong description for body parameter, got %s want %s", got, want) + } + +} + func TestRenderServicesWithBodyFieldNameInCamelCase(t *testing.T) { userDesc := &descriptorpb.DescriptorProto{ Name: proto.String("User"), From 74faf4b023c342ad7fd3854f4364bb3d3a88857d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Jul 2022 00:03:44 +0000 Subject: [PATCH 1341/1518] chore(deps): update dependency golang to v1.18.4 --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 1f69e5dcc59..fa9098d48bc 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.3 +FROM golang:1.18.4 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index 10511d82cc5..fa122d8833c 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.3 as builder +FROM golang:1.18.4 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index 208c9355008..d9544f2f862 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.3 as builder +FROM golang:1.18.4 as builder ARG RELEASE_VERSION From 10701c60234569ca58a78f71b0a76fbd85e0cfc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 16:37:18 -0700 Subject: [PATCH 1342/1518] build(deps-dev): bump github-pages from 225 to 227 in /docs (#2790) Bumps [github-pages](https://github.com/github/pages-gem) from 225 to 227. - [Release notes](https://github.com/github/pages-gem/releases) - [Commits](https://github.com/github/pages-gem/compare/v225...v227) --- updated-dependencies: - dependency-name: github-pages dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 64 ++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 42 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 2e3dd27526e..1f120621b0c 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - activesupport (6.0.4.7) + activesupport (6.0.5.1) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) @@ -14,7 +14,7 @@ GEM execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.23.4) + commonmarker (0.23.5) concurrent-ruby (1.1.10) dnsruby (1.61.9) simpleidn (~> 0.1) @@ -25,35 +25,16 @@ GEM ffi (>= 1.15.0) eventmachine (1.2.7) execjs (2.8.1) - faraday (1.10.0) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) + faraday (2.3.0) + faraday-net_http (~> 2.0) ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.3) - multipart-post (>= 1.2, < 3) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday-net_http (2.0.3) ffi (1.15.5) forwardable-extended (2.6.0) gemoji (3.0.1) - github-pages (225) + github-pages (227) github-pages-health-check (= 1.17.9) - jekyll (= 3.9.0) + jekyll (= 3.9.2) jekyll-avatar (= 0.7.0) jekyll-coffeescript (= 1.1.1) jekyll-commonmark-ghpages (= 0.2.0) @@ -88,12 +69,12 @@ GEM jekyll-theme-time-machine (= 0.2.0) jekyll-titles-from-headings (= 0.5.3) jemoji (= 0.12.0) - kramdown (= 2.3.1) + kramdown (= 2.3.2) kramdown-parser-gfm (= 1.1.0) liquid (= 4.0.3) mercenary (~> 0.3) minima (= 2.5.1) - nokogiri (>= 1.12.5, < 2.0) + nokogiri (>= 1.13.6, < 2.0) rouge (= 3.26.0) terminal-table (~> 1.4) github-pages-health-check (1.17.9) @@ -102,13 +83,13 @@ GEM octokit (~> 4.0) public_suffix (>= 3.0, < 5.0) typhoeus (~> 1.3) - html-pipeline (2.14.1) + html-pipeline (2.14.2) activesupport (>= 2) nokogiri (>= 1.4) http_parser.rb (0.8.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.9.0) + jekyll (3.9.2) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) @@ -220,7 +201,7 @@ GEM jekyll (>= 3.8.5) jekyll-seo-tag (~> 2.0) rake (>= 12.3.1, < 13.1.0) - kramdown (2.3.1) + kramdown (2.3.2) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) @@ -234,17 +215,16 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.15.0) - multipart-post (2.1.1) - nokogiri (1.13.6) + minitest (5.16.2) + nokogiri (1.13.7) mini_portile2 (~> 2.8.0) racc (~> 1.4) - octokit (4.22.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.6) + public_suffix (4.0.7) racc (1.6.0) rake (13.0.1) rb-fsevent (0.11.1) @@ -260,9 +240,9 @@ GEM sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.2) + sawyer (0.9.2) addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) + faraday (>= 0.17.3, < 3) simpleidn (0.2.1) unf (~> 0.1.4) terminal-table (1.8.0) @@ -274,9 +254,9 @@ GEM thread_safe (~> 0.1) unf (0.1.4) unf_ext - unf_ext (0.0.8.1) + unf_ext (0.0.8.2) unicode-display_width (1.8.0) - zeitwerk (2.5.4) + zeitwerk (2.6.0) PLATFORMS ruby From 0af52e259dbd097762c288bfd5f7bf08313083ab Mon Sep 17 00:00:00 2001 From: Naveen <172697+naveensrinivasan@users.noreply.github.com> Date: Thu, 14 Jul 2022 18:52:18 -0500 Subject: [PATCH 1343/1518] chore: Included githubactions in the dependabot config (#2673) This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure. Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool Signed-off-by: naveensrinivasan <172697+naveensrinivasan@users.noreply.github.com> --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 96943351d4d..c4740b4d25e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,3 +9,7 @@ updates: directory: "/docs" # Location of package manifests schedule: interval: "daily" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: daily From 54c01bfb8d45eff5e0cddbf23ddff2229bec5e81 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 14 Jul 2022 16:52:24 -0700 Subject: [PATCH 1344/1518] Change renovate branch trigger (#2791) Ever since we disabled renovate on v1, the branch names have changed. This means the job has not been running. Update the branch names on which this job runs. --- .github/workflows/renovate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index b99aa276228..374620444e6 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -1,7 +1,7 @@ on: push: branches: - - renovate/master-* + - renovate/* permissions: contents: read name: renovate From ed728c823ed85b45cbb4b0999c078d5e54df03f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 23:53:43 +0000 Subject: [PATCH 1345/1518] fix(deps): update google.golang.org/genproto digest to 042d03a --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c1f9d0ffc03..de462059577 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 + google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 4b115d035e6..52d9265c03b 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM= -google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 h1:zfXhTgBfGlIh3jMXN06W8qbhFGsh6MJNJiYEuhTddOI= +google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fcc4ea2cb52..19cebac1816 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM=", - version = "v0.0.0-20220630174209-ad1d48641aa7", + sum = "h1:zfXhTgBfGlIh3jMXN06W8qbhFGsh6MJNJiYEuhTddOI=", + version = "v0.0.0-20220714211235-042d03aeabc9", ) go_repository( name = "org_golang_google_grpc", From 844d5bce626e1efb95db2efa83b0110c8c81450a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Jul 2022 05:25:52 +0000 Subject: [PATCH 1346/1518] fix(deps): update module google.golang.org/grpc to v1.48.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index de462059577..38659e13aa2 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 - google.golang.org/grpc v1.47.0 + google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 52d9265c03b..61ff335a9e4 100644 --- a/go.sum +++ b/go.sum @@ -614,8 +614,9 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/repositories.bzl b/repositories.bzl index 19cebac1816..c8c6295dd6e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1082,8 +1082,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8=", - version = "v1.47.0", + sum = "h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=", + version = "v1.48.0", ) go_repository( From c87a11fb58aba78b458c9a8756b082873da36e21 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Jul 2022 22:53:38 +0000 Subject: [PATCH 1347/1518] fix(deps): update google.golang.org/genproto digest to 798f69b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 38659e13aa2..20bc656f0d9 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 + google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 61ff335a9e4..63683e9578a 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 h1:zfXhTgBfGlIh3jMXN06W8qbhFGsh6MJNJiYEuhTddOI= -google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9 h1:1aEQRgZ4Gks2SRAkLzIPpIszRazwVfjSFe1cKc+e0Jg= +google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c8c6295dd6e..7a8880adbe8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:zfXhTgBfGlIh3jMXN06W8qbhFGsh6MJNJiYEuhTddOI=", - version = "v0.0.0-20220714211235-042d03aeabc9", + sum = "h1:1aEQRgZ4Gks2SRAkLzIPpIszRazwVfjSFe1cKc+e0Jg=", + version = "v0.0.0-20220715211116-798f69b842b9", ) go_repository( name = "org_golang_google_grpc", From c75cfce18fd03a6b1e3358c37a70ae0ace09e513 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:48:55 +0000 Subject: [PATCH 1348/1518] fix(deps): update google.golang.org/genproto digest to 073382f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 20bc656f0d9..e29da435e02 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9 + google.golang.org/genproto v0.0.0-20220718134204-073382fd740c google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 63683e9578a..e32d0899a2c 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9 h1:1aEQRgZ4Gks2SRAkLzIPpIszRazwVfjSFe1cKc+e0Jg= -google.golang.org/genproto v0.0.0-20220715211116-798f69b842b9/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220718134204-073382fd740c h1:xDUAhRezFnKF6wopxkOfdWYvz2XCiRQzndyDdpwFgbc= +google.golang.org/genproto v0.0.0-20220718134204-073382fd740c/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 7a8880adbe8..660cf9eb4bf 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:1aEQRgZ4Gks2SRAkLzIPpIszRazwVfjSFe1cKc+e0Jg=", - version = "v0.0.0-20220715211116-798f69b842b9", + sum = "h1:xDUAhRezFnKF6wopxkOfdWYvz2XCiRQzndyDdpwFgbc=", + version = "v0.0.0-20220718134204-073382fd740c", ) go_repository( name = "org_golang_google_grpc", From cec112bab59e9e1e4c7ef537fdf9a04e87a56c66 Mon Sep 17 00:00:00 2001 From: Maksym Kryvchun Date: Tue, 19 Jul 2022 01:57:37 +0300 Subject: [PATCH 1349/1518] fix: extensions in YAML format [#2795] (#2797) * fix: Support extensions for YAML [#2795] * Move extensionsToMap to generator * bazel fix * define map size --- .../internal/genopenapi/BUILD.bazel | 1 + .../internal/genopenapi/generator.go | 107 ++++++++++++++++ .../internal/genopenapi/generator_test.go | 120 ++++++++++++++++-- .../internal/genopenapi/types.go | 2 +- 4 files changed, 217 insertions(+), 13 deletions(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index d1279319fb8..966ba7c3e9e 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -61,6 +61,7 @@ go_test( "@in_gopkg_yaml_v3//:yaml_v3", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//encoding/prototext", "@org_golang_google_protobuf//proto", "@org_golang_google_protobuf//reflect/protodesc", "@org_golang_google_protobuf//types/descriptorpb", diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 09ff628a4dc..7abb04abcb5 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -89,36 +89,133 @@ func (so openapiSwaggerObject) MarshalJSON() ([]byte, error) { return extensionMarshalJSON(alias(so), so.extensions) } +// MarshalYAML implements yaml.Marshaler interface. +// +// It is required in order to pass extensions inline. +// +// Example: +// extensions: {x-key: x-value} +// type: string +// +// It will be rendered as: +// x-key: x-value +// type: string +// +// Use generics when the project will be upgraded to go 1.18+. +func (so openapiSwaggerObject) MarshalYAML() (interface{}, error) { + type Alias openapiSwaggerObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiInfoObject) MarshalJSON() ([]byte, error) { type alias openapiInfoObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiInfoObject) MarshalYAML() (interface{}, error) { + type Alias openapiInfoObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiSecuritySchemeObject) MarshalJSON() ([]byte, error) { type alias openapiSecuritySchemeObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiSecuritySchemeObject) MarshalYAML() (interface{}, error) { + type Alias openapiSecuritySchemeObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiOperationObject) MarshalJSON() ([]byte, error) { type alias openapiOperationObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiOperationObject) MarshalYAML() (interface{}, error) { + type Alias openapiOperationObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiResponseObject) MarshalJSON() ([]byte, error) { type alias openapiResponseObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiResponseObject) MarshalYAML() (interface{}, error) { + type Alias openapiResponseObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiSchemaObject) MarshalJSON() ([]byte, error) { type alias openapiSchemaObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiSchemaObject) MarshalYAML() (interface{}, error) { + type Alias openapiSchemaObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func (so openapiParameterObject) MarshalJSON() ([]byte, error) { type alias openapiParameterObject return extensionMarshalJSON(alias(so), so.extensions) } +func (so openapiParameterObject) MarshalYAML() (interface{}, error) { + type Alias openapiParameterObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error) { // To append arbitrary keys to the struct we'll render into json, // we're creating another struct that embeds the original one, and @@ -262,3 +359,13 @@ func AddErrorDefs(reg *descriptor.Registry) error { }, }) } + +func extensionsToMap(extensions []extension) map[string]interface{} { + m := make(map[string]interface{}, len(extensions)) + + for _, v := range extensions { + m[v.key] = RawExample(v.value) + } + + return m +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go index 5df383c9b8c..a4437e8d319 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go @@ -1,12 +1,14 @@ package genopenapi_test import ( + "strings" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/internal/genopenapi" "gopkg.in/yaml.v3" + "google.golang.org/protobuf/encoding/prototext" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/descriptorpb" "google.golang.org/protobuf/types/pluginpb" @@ -15,7 +17,6 @@ import ( func TestGenerate_YAML(t *testing.T) { t.Parallel() - reg := descriptor.NewRegistry() req := &pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{{ Name: proto.String("file.proto"), @@ -29,31 +30,126 @@ func TestGenerate_YAML(t *testing.T) { }, } + resp := requireGenerate(t, req, genopenapi.FormatYAML) + if len(resp) != 1 { + t.Fatalf("invalid count, expected: 1, actual: %d", len(resp)) + } + + var p map[string]interface{} + err := yaml.Unmarshal([]byte(resp[0].GetContent()), &p) + if err != nil { + t.Fatalf("failed to unmarshall yaml: %s", err) + } +} + +func TestGenerateExtension(t *testing.T) { + t.Parallel() + + const in = ` + file_to_generate: "exampleproto/v1/example.proto" + parameter: "output_format=yaml,allow_delete_body=true" + proto_file: { + name: "exampleproto/v1/example.proto" + package: "example.v1" + message_type: { + name: "Foo" + field: { + name: "bar" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bar" + options: { + [grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field]: { + description: "This is bar" + extensions: { + key: "x-go-default" + value: { + string_value: "0.5s" + } + } + } + } + } + } + service: { + name: "TestService" + method: { + name: "Test" + input_type: ".example.v1.Foo" + output_type: ".example.v1.Foo" + options: {} + } + } + options: { + go_package: "exampleproto/v1;exampleproto" + } + }` + + var req pluginpb.CodeGeneratorRequest + if err := prototext.Unmarshal([]byte(in), &req); err != nil { + t.Fatalf("failed to marshall yaml: %s", err) + } + + formats := [...]genopenapi.Format{ + genopenapi.FormatJSON, + genopenapi.FormatYAML, + } + + for _, format := range formats { + format := format + + t.Run(string(format), func(t *testing.T) { + t.Parallel() + + resp := requireGenerate(t, &req, format) + if len(resp) != 1 { + t.Fatalf("invalid count, expected: 1, actual: %d", len(resp)) + } + + content := resp[0].GetContent() + + t.Log(content) + + if !strings.Contains(content, "x-go-default") { + t.Fatal("x-go-default not found in content message") + } + }) + } +} + +func requireGenerate( + tb testing.TB, + req *pluginpb.CodeGeneratorRequest, + format genopenapi.Format, +) []*descriptor.ResponseFile { + tb.Helper() + + reg := descriptor.NewRegistry() + if err := reg.Load(req); err != nil { - t.Fatalf("failed to load request: %s", err) + tb.Fatalf("failed to load request: %s", err) } var targets []*descriptor.File for _, target := range req.FileToGenerate { f, err := reg.LookupFile(target) if err != nil { - t.Fatalf("failed to lookup file: %s", err) + tb.Fatalf("failed to lookup file: %s", err) } + targets = append(targets, f) } - g := genopenapi.New(reg, genopenapi.FormatYAML) + g := genopenapi.New(reg, format) + resp, err := g.Generate(targets) switch { case err != nil: - t.Fatalf("failed to generate targets: %s", err) - case len(resp) != 1: - t.Fatalf("invalid count, expected: 1, actual: %d", len(resp)) + tb.Fatalf("failed to generate targets: %s", err) + case len(resp) != len(targets): + tb.Fatalf("invalid count, expected: %d, actual: %d", len(targets), len(resp)) } - var p map[string]interface{} - err = yaml.Unmarshal([]byte(resp[0].GetContent()), &p) - if err != nil { - t.Fatalf("failed to unmarshall yaml: %s", err) - } + return resp } diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 62fa82f1094..ae9ba330e74 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -256,7 +256,7 @@ type keyVal struct { type openapiSchemaObjectProperties []keyVal func (p openapiSchemaObjectProperties) MarshalYAML() (interface{}, error) { - m := make(map[string]interface{}) + m := make(map[string]interface{}, len(p)) for _, v := range p { m[v.Key] = v.Value From 9370beda91283d8fef8927717a43f26a7ce6d958 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 02:56:59 +0000 Subject: [PATCH 1350/1518] fix(deps): update golang.org/x/oauth2 digest to c8730f7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e29da435e02..e9fd9175d6a 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 + golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220718134204-073382fd740c google.golang.org/grpc v1.48.0 diff --git a/go.sum b/go.sum index e32d0899a2c..a05a602426a 100644 --- a/go.sum +++ b/go.sum @@ -311,8 +311,8 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 h1:VnGaRqoLmqZH/3TMLJwYCEWkR4j1nuIU1U9TvbqsDUw= -golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68= +golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 660cf9eb4bf..ee0194a68e6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1145,8 +1145,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:VnGaRqoLmqZH/3TMLJwYCEWkR4j1nuIU1U9TvbqsDUw=", - version = "v0.0.0-20220630143837-2104d58473e0", + sum = "h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68=", + version = "v0.0.0-20220718184931-c8730f7fcb92", ) go_repository( name = "org_golang_x_sync", From de53dcb45f42e0c60aef7c8412a6adc7915892af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 18:09:37 +0000 Subject: [PATCH 1351/1518] fix(deps): update google.golang.org/genproto digest to 83ca9fa --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e9fd9175d6a..3065821355e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220718134204-073382fd740c + google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index a05a602426a..ce2abefd677 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220718134204-073382fd740c h1:xDUAhRezFnKF6wopxkOfdWYvz2XCiRQzndyDdpwFgbc= -google.golang.org/genproto v0.0.0-20220718134204-073382fd740c/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM= +google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ee0194a68e6..379e2cf1cb8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:xDUAhRezFnKF6wopxkOfdWYvz2XCiRQzndyDdpwFgbc=", - version = "v0.0.0-20220718134204-073382fd740c", + sum = "h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM=", + version = "v0.0.0-20220719170305-83ca9fad585f", ) go_repository( name = "org_golang_google_grpc", From 778004b2855e7dd55170a059c98e546fb942ac6a Mon Sep 17 00:00:00 2001 From: Maksym Kryvchun Date: Wed, 20 Jul 2022 00:48:24 +0300 Subject: [PATCH 1352/1518] fix: yaml indent [#2645] (#2801) --- .../internal/genopenapi/format.go | 5 +- .../internal/genopenapi/generator_test.go | 102 ++++++++++++++++++ 2 files changed, 106 insertions(+), 1 deletion(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/format.go b/protoc-gen-openapiv2/internal/genopenapi/format.go index 52c932e2e85..6f0faa8e538 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/format.go +++ b/protoc-gen-openapiv2/internal/genopenapi/format.go @@ -31,7 +31,10 @@ func (f Format) Validate() error { func (f Format) NewEncoder(w io.Writer) (ContentEncoder, error) { switch f { case FormatYAML: - return yaml.NewEncoder(w), nil + enc := yaml.NewEncoder(w) + enc.SetIndent(2) + + return enc, nil case FormatJSON: enc := json.NewEncoder(w) enc.SetIndent("", " ") diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go index a4437e8d319..b63915ae10a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator_test.go @@ -153,3 +153,105 @@ func requireGenerate( return resp } + +func TestGeneratedYAMLIndent(t *testing.T) { + // It tests https://github.com/grpc-ecosystem/grpc-gateway/issues/2745. + const in = ` + file_to_generate: "exampleproto/v1/exampleproto.proto" + parameter: "output_format=yaml,allow_delete_body=true" + proto_file: { + name: "exampleproto/v1/exampleproto.proto" + package: "repro" + message_type: { + name: "RollupRequest" + field: { + name: "type" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".repro.RollupType" + json_name: "type" + } + } + message_type: { + name: "RollupResponse" + } + enum_type: { + name: "RollupType" + value: { + name: "UNKNOWN_ROLLUP" + number: 0 + } + value: { + name: "APPLE" + number: 1 + } + value: { + name: "BANANA" + number: 2 + } + value: { + name: "CARROT" + number: 3 + } + } + service: { + name: "Repro" + method: { + name: "GetRollup" + input_type: ".repro.RollupRequest" + output_type: ".repro.RollupResponse" + options: { + [google.api.http]: { + get: "/rollup" + } + } + } + } + options: { + go_package: "repro/foobar" + } + source_code_info: { + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 24 + span: 4 + span: 14 + leading_comments: " Apples are good\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + span: 28 + span: 4 + span: 15 + leading_comments: " Carrots are mediocre\n" + } + } + syntax: "proto3" + } + ` + + var req pluginpb.CodeGeneratorRequest + if err := prototext.Unmarshal([]byte(in), &req); err != nil { + t.Fatalf("failed to marshall yaml: %s", err) + } + + resp := requireGenerate(t, &req, genopenapi.FormatYAML) + if len(resp) != 1 { + t.Fatalf("invalid count, expected: 1, actual: %d", len(resp)) + } + + content := resp[0].GetContent() + + err := yaml.Unmarshal([]byte(content), map[string]interface{}{}) + if err != nil { + t.Log(content) + t.Fatalf("got invalid yaml: %s", err) + } +} From e574dfaf67a390980f42760d52bddd9cbc5e58df Mon Sep 17 00:00:00 2001 From: Almog Baku Date: Wed, 20 Jul 2022 01:21:26 +0300 Subject: [PATCH 1353/1518] Fix buf plugin's library version (#2800) The buf `mod` currently returns a defunct version which cause go mod to complain. See https://bufbuild.slack.com/archives/CRZ680FUH/p1658149356049699?thread_ts=1658096456.542309&cid=CRZ680FUH --- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index fa122d8833c..15560410e74 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -13,7 +13,7 @@ ARG GO_PROTOBUF_RELEASE_VERSION ARG GO_GRPC_RELEASE_VERSION # Runtime dependencies -LABEL "build.buf.plugins.runtime_library_versions.0.name"="github.com/grpc-ecosystem/grpc-gateway" +LABEL "build.buf.plugins.runtime_library_versions.0.name"="github.com/grpc-ecosystem/grpc-gateway/v2" LABEL "build.buf.plugins.runtime_library_versions.0.version"="${RELEASE_VERSION}" LABEL "build.buf.plugins.runtime_library_versions.1.name"="google.golang.org/protobuf" LABEL "build.buf.plugins.runtime_library_versions.1.version"="${GO_PROTOBUF_RELEASE_VERSION}" From c322a100c7f4940c401e80ca3de6f96bf434a3dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:39:00 -0700 Subject: [PATCH 1354/1518] chore(deps): update dependency io_bazel_rules_go to v0.34.0 (#2803) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 13726a1d091..11c582533f4 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "685052b498b6ddfe562ca7a97736741d87916fe536623afb7da2824c0211c369", + sha256 = "16e9fca53ed6bd4ff4ad76facc9b7b651a89db1689a2877d6fd7b82aa824e366", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.34.0/rules_go-v0.34.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.34.0/rules_go-v0.34.0.zip", ], ) From 9351c5f709041ddfd8b21a5f065f73a6a36f60a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:39:32 -0700 Subject: [PATCH 1355/1518] build(deps): bump goreleaser/goreleaser-action from 2 to 3 (#2792) Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 2 to 3. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](https://github.com/goreleaser/goreleaser-action/compare/v2...v3) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 738b7dc62aa..d250e84f013 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/setup-go@v3 with: check-latest: true - - uses: goreleaser/goreleaser-action@v2 + - uses: goreleaser/goreleaser-action@v3 with: args: release --rm-dist env: From ef6207b1d59aced89fbaa3d68f4ae9249cb3f191 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:39:51 -0700 Subject: [PATCH 1356/1518] build(deps): bump actions/upload-artifact from 1 to 3 (#2793) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 1 to 3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v1...v3) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d855c6e4fff..7f4802bcd9f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,7 +139,7 @@ jobs: dry-run: false language: go - name: Upload Crash - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v3 if: failure() && steps.build.outcome == 'success' with: name: artifacts From 9f825b91320bacb9f2cf1e837980a841dccb18d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:40:17 -0700 Subject: [PATCH 1357/1518] build(deps): bump golangci/golangci-lint-action from 2 to 3 (#2794) Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 2 to 3. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/v2...v3) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f4802bcd9f..2e68c27829c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,7 +117,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: golangci/golangci-lint-action@v2 + - uses: golangci/golangci-lint-action@v3 with: version: v1.45 args: --enable goimports From 2b1d714b68b04a9f503d4970cc9ec0b6f12e65ae Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 19 Jul 2022 15:55:34 -0700 Subject: [PATCH 1358/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e68c27829c..70e45d0eb68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.18 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.10.3 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.0 proto_lint: runs-on: ubuntu-latest steps: From 43748035fd2764508f21df76f6263c36f2dad964 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 21 Jul 2022 00:10:37 +0000 Subject: [PATCH 1359/1518] fix(deps): update google.golang.org/genproto digest to 176da50 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 3065821355e..4ebffbc0545 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f + google.golang.org/genproto v0.0.0-20220720214146-176da50484ac google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index ce2abefd677..6b068d3e723 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM= -google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220720214146-176da50484ac h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ= +google.golang.org/genproto v0.0.0-20220720214146-176da50484ac/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 379e2cf1cb8..80c7b73a591 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:P8EiVSxZwC6xH2niv2N66aqwMtYFg+D54gbjpcqKJtM=", - version = "v0.0.0-20220719170305-83ca9fad585f", + sum = "h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ=", + version = "v0.0.0-20220720214146-176da50484ac", ) go_repository( name = "org_golang_google_grpc", From f660dd4901cfc3149af727ab71a3330496b155a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 23:57:57 -0400 Subject: [PATCH 1360/1518] chore(deps): update dependency com_google_protobuf to v3.21.3 (#2805) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 11c582533f4..46d52807e32 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "66e1156ac78290db81335c79d1fc5a54123ebb62a43eb2e5b42a44ca23087517", - strip_prefix = "protobuf-3.21.2", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.2.tar.gz"], + sha256 = "c29d8b4b79389463c546f98b15aa4391d4ed7ec459340c47bffe15db63eb9126", + strip_prefix = "protobuf-3.21.3", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.3.tar.gz"], ) http_archive( From de06e0098143dfaa5d2bd07bf95e8926872c521e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Jul 2022 16:27:19 +0000 Subject: [PATCH 1361/1518] fix(deps): update golang.org/x/oauth2 digest to 128564f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4ebffbc0545..26e30f457dc 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 + golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220720214146-176da50484ac google.golang.org/grpc v1.48.0 diff --git a/go.sum b/go.sum index 6b068d3e723..1de4d0016e5 100644 --- a/go.sum +++ b/go.sum @@ -311,8 +311,8 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92 h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68= -golang.org/x/oauth2 v0.0.0-20220718184931-c8730f7fcb92/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 80c7b73a591..3a985d752cc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1145,8 +1145,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:oVlhw3Oe+1reYsE2Nqu19PDJfLzwdU3QUUrG86rLK68=", - version = "v0.0.0-20220718184931-c8730f7fcb92", + sum = "h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=", + version = "v0.0.0-20220722155238-128564f6959c", ) go_repository( name = "org_golang_x_sync", From d80933009cc3aced822335a38fe1ea0f4c001efe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Jul 2022 22:37:53 +0000 Subject: [PATCH 1362/1518] fix(deps): update google.golang.org/genproto digest to b98a9ff --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 26e30f457dc..7198d7ea4cb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220720214146-176da50484ac + google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 1de4d0016e5..b6a5b58f5f5 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220720214146-176da50484ac h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ= -google.golang.org/genproto v0.0.0-20220720214146-176da50484ac/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3a985d752cc..91057d5c3b5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:EOa+Yrhx1C0O+4pHeXeWrCwdI0tWI6IfUU56Vebs9wQ=", - version = "v0.0.0-20220720214146-176da50484ac", + sum = "h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w=", + version = "v0.0.0-20220722212130-b98a9ff5e252", ) go_repository( name = "org_golang_google_grpc", From 5c1af9ff50c2381548cbb24db97d6ea20a695595 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:56:53 +0000 Subject: [PATCH 1363/1518] fix(deps): update google.golang.org/genproto digest to 272f38e --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7198d7ea4cb..24ffc1ea539 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 + google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index b6a5b58f5f5..53b6af27ab8 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252 h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= +google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 91057d5c3b5..26cc260f1d2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:G5AjFxR+ibe9Taamo0TdW+iylfBYK10DSkHYdx7PZ9w=", - version = "v0.0.0-20220722212130-b98a9ff5e252", + sum = "h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM=", + version = "v0.0.0-20220725144611-272f38e5d71b", ) go_repository( name = "org_golang_google_grpc", From ae250658d0d028d1b9aeadbb1487835e1990e90f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 23:11:49 +0000 Subject: [PATCH 1364/1518] chore(deps): update dependency com_google_protobuf to v3.21.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 46d52807e32..9f345888853 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "c29d8b4b79389463c546f98b15aa4391d4ed7ec459340c47bffe15db63eb9126", - strip_prefix = "protobuf-3.21.3", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.3.tar.gz"], + sha256 = "85d42d4485f36f8cec3e475a3b9e841d7d78523cd775de3a86dba77081f4ca25", + strip_prefix = "protobuf-3.21.4", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.4.tar.gz"], ) http_archive( From 672f079d1ec726166bbdf413b1fa24bf6da2cb35 Mon Sep 17 00:00:00 2001 From: Adam Snyder Date: Tue, 26 Jul 2022 15:11:49 -0700 Subject: [PATCH 1365/1518] Default allow_repeated_fields_in_body option to true and deprecate option (#2813) * Deprecate allow_repeated_fields_in_body option with default true The allow_repeated_fields_in_body option is now ignored and always behaves as if it is set to true. Users who try to set the flag will see a warning. * Delete unused parseFlags function and tests --- internal/descriptor/registry.go | 15 -- internal/descriptor/services.go | 3 - internal/descriptor/services_test.go | 4 +- protoc-gen-grpc-gateway/BUILD.bazel | 9 +- protoc-gen-grpc-gateway/main.go | 36 +--- protoc-gen-grpc-gateway/main_test.go | 31 --- protoc-gen-openapiv2/main.go | 10 +- protoc-gen-openapiv2/main_test.go | 297 +++++++++++++-------------- 8 files changed, 158 insertions(+), 247 deletions(-) delete mode 100644 protoc-gen-grpc-gateway/main_test.go diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 1cc9afa41f0..cd2c128f3fb 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -48,9 +48,6 @@ type Registry struct { // mergeFileName target OpenAPI file name after merge mergeFileName string - // allowRepeatedFieldsInBody permits repeated field in body field path of `google.api.http` annotation option - allowRepeatedFieldsInBody bool - // includePackageInTags controls whether the package name defined in the `package` directive // in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation. includePackageInTags bool @@ -451,18 +448,6 @@ func (r *Registry) SetMergeFileName(mergeFileName string) { r.mergeFileName = mergeFileName } -// SetAllowRepeatedFieldsInBody controls whether repeated field can be used -// in `body` and `response_body` (`google.api.http` annotation option) field path or not -func (r *Registry) SetAllowRepeatedFieldsInBody(allow bool) { - r.allowRepeatedFieldsInBody = allow -} - -// IsAllowRepeatedFieldsInBody checks if repeated field can be used -// in `body` and `response_body` (`google.api.http` annotation option) field path or not -func (r *Registry) IsAllowRepeatedFieldsInBody() bool { - return r.allowRepeatedFieldsInBody -} - // SetIncludePackageInTags controls whether the package name defined in the `package` directive // in the proto file can be prepended to the gRPC service name in the `Tags` field of every operation. func (r *Registry) SetIncludePackageInTags(allow bool) { diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go index f0a96623d00..7e73b01a4ed 100644 --- a/internal/descriptor/services.go +++ b/internal/descriptor/services.go @@ -325,9 +325,6 @@ func (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) if f == nil { return nil, fmt.Errorf("no field %q found in %s", path, root.GetName()) } - if !(isPathParam || r.allowRepeatedFieldsInBody) && f.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED { - return nil, fmt.Errorf("repeated field not allowed in field path: %s in %s", f.GetName(), path) - } if isPathParam && f.GetProto3Optional() { return nil, fmt.Errorf("optional field not allowed in field path: %s in %s", f.GetName(), path) } diff --git a/internal/descriptor/services_test.go b/internal/descriptor/services_test.go index 8ce91f13476..cf8e504aaa2 100644 --- a/internal/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -1117,7 +1117,7 @@ func TestResolveFieldPath(t *testing.T) { > `, path: "string", - wantErr: true, + wantErr: false, }, // nested field { @@ -1222,7 +1222,7 @@ func TestResolveFieldPath(t *testing.T) { > `, path: "nested.nested2.terminal", - wantErr: true, + wantErr: false, }, } { var file descriptorpb.FileDescriptorProto diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index aa7ba0752c2..ca8998eaeb7 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test") +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") load("@io_bazel_rules_go//proto:compiler.bzl", "go_proto_compiler") package(default_visibility = ["//visibility:private"]) @@ -42,10 +42,3 @@ go_proto_compiler( "@org_golang_google_protobuf//proto:go_default_library", ], ) - -go_test( - name = "protoc-gen-grpc-gateway_test", - srcs = ["main_test.go"], - embed = [":protoc-gen-grpc-gateway_lib"], - deps = ["//internal/descriptor"], -) diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index a8a7c8760e3..3371b1b4bde 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -26,7 +26,7 @@ var ( useRequestContext = flag.Bool("request_context", true, "determine whether to use http.Request's context or not") allowDeleteBody = flag.Bool("allow_delete_body", false, "unless set, HTTP DELETE methods may not have a body") grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") - allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + _ = flag.Bool("allow_repeated_fields_in_body", true, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option. DEPRECATED: the value is ignored and always behaves as `true`.") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") omitPackageDoc = flag.Bool("omit_package_doc", false, "if true, no package comment will be included in the generated code") @@ -101,32 +101,6 @@ func main() { }) } -func parseFlags(reg *descriptor.Registry, parameter string) { - if parameter == "" { - return - } - - for _, p := range strings.Split(parameter, ",") { - spec := strings.SplitN(p, "=", 2) - if len(spec) == 1 { - if err := flag.CommandLine.Set(spec[0], ""); err != nil { - glog.Fatalf("Cannot set flag %s", p) - } - continue - } - - name, value := spec[0], spec[1] - - if strings.HasPrefix(name, "M") { - reg.AddPkgMap(name[1:], value) - continue - } - if err := flag.CommandLine.Set(name, value); err != nil { - glog.Fatalf("Cannot set flag %s", p) - } - } -} - func applyFlags(reg *descriptor.Registry) error { if *grpcAPIConfiguration != "" { if err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil { @@ -138,7 +112,13 @@ func applyFlags(reg *descriptor.Registry) error { } reg.SetStandalone(*standalone) reg.SetAllowDeleteBody(*allowDeleteBody) - reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) + + flag.Visit(func(f *flag.Flag) { + if f.Name == "allow_repeated_fields_in_body" { + glog.Warning("The `allow_repeated_fields_in_body` flag is deprecated and will always behave as `true`.") + } + }) + reg.SetOmitPackageDoc(*omitPackageDoc) reg.SetWarnOnUnboundMethods(*warnOnUnboundMethods) reg.SetGenerateUnboundMethods(*generateUnboundMethods) diff --git a/protoc-gen-grpc-gateway/main_test.go b/protoc-gen-grpc-gateway/main_test.go deleted file mode 100644 index c7c70b40e0a..00000000000 --- a/protoc-gen-grpc-gateway/main_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "testing" - - "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" -) - -func TestParseFlagsEmptyNoPanic(t *testing.T) { - reg := descriptor.NewRegistry() - parseFlags(reg, "") -} - -func TestParseFlags(t *testing.T) { - reg := descriptor.NewRegistry() - parseFlags(reg, "allow_repeated_fields_in_body=true") - if *allowRepeatedFieldsInBody != true { - t.Errorf("flag allow_repeated_fields_in_body was not set correctly, wanted true got %v", *allowRepeatedFieldsInBody) - } -} - -func TestParseFlagsMultiple(t *testing.T) { - reg := descriptor.NewRegistry() - parseFlags(reg, "allow_repeated_fields_in_body=true,repeated_path_param_separator=csv") - if *allowRepeatedFieldsInBody != true { - t.Errorf("flag allow_repeated_fields_in_body was not set correctly, wanted 'true' got '%v'", *allowRepeatedFieldsInBody) - } - if *repeatedPathParamSeparator != "csv" { - t.Errorf("flag importPrefix was not set correctly, wanted 'csv' got '%v'", *repeatedPathParamSeparator) - } -} diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index dce7fc31552..ec4e5c62750 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -25,7 +25,7 @@ var ( useJSONNamesForFields = flag.Bool("json_names_for_fields", true, "if disabled, the original proto name will be used for generating OpenAPI definitions") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`") versionFlag = flag.Bool("version", false, "print the current version") - allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") + _ = flag.Bool("allow_repeated_fields_in_body", true, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option. DEPRECATED: the value is ignored and always behaves as `true`.") includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. If set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") useFQNForOpenAPIName = flag.Bool("fqn_for_openapi_name", false, "if set, the object's OpenAPI names will use the fully qualified names from the proto definition (ie my.package.MyMessage.MyInnerMessage). DEPRECATED: prefer `openapi_naming_strategy=fqn`") openAPINamingStrategy = flag.String("openapi_naming_strategy", "", "use the given OpenAPI naming strategy. Allowed values are `legacy`, `fqn`, `simple`. If unset, either `legacy` or `fqn` are selected, depending on the value of the `fqn_for_openapi_name` flag") @@ -88,7 +88,13 @@ func main() { reg.SetAllowMerge(*allowMerge) reg.SetMergeFileName(*mergeFileName) reg.SetUseJSONNamesForFields(*useJSONNamesForFields) - reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) + + flag.Visit(func(f *flag.Flag) { + if f.Name == "allow_repeated_fields_in_body" { + glog.Warning("The `allow_repeated_fields_in_body` flag is deprecated and will always behave as `true`.") + } + }) + reg.SetIncludePackageInTags(*includePackageInTags) reg.SetUseFQNForOpenAPIName(*useFQNForOpenAPIName) diff --git a/protoc-gen-openapiv2/main_test.go b/protoc-gen-openapiv2/main_test.go index e1b9a1f9e63..a6f95c628ea 100644 --- a/protoc-gen-openapiv2/main_test.go +++ b/protoc-gen-openapiv2/main_test.go @@ -10,187 +10,173 @@ import ( func TestParseReqParam(t *testing.T) { testcases := []struct { - name string - expected map[string]string - request string - expectedError error - allowDeleteBodyV bool - allowMergeV bool - allowRepeatedFieldsInBodyV bool - includePackageInTagsV bool - fileV string - importPathV string - mergeFileNameV string - useFQNForOpenAPINameV bool - openAPINamingStrategyV string + name string + expected map[string]string + request string + expectedError error + allowDeleteBodyV bool + allowMergeV bool + includePackageInTagsV bool + fileV string + importPathV string + mergeFileNameV string + useFQNForOpenAPINameV bool + openAPINamingStrategyV string }{ { // this one must be first - with no leading clearFlags call it // verifies our expectation of default values as we reset by // clearFlags - name: "Test 0", - expected: map[string]string{}, - request: "", - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "-", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 0", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "-", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 1", - expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, - request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", - allowDeleteBodyV: true, - allowMergeV: true, - allowRepeatedFieldsInBodyV: true, - includePackageInTagsV: true, - fileV: "./foo.pb", - importPathV: "/bar/baz", - mergeFileNameV: "apidocs", + name: "Test 1", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", + allowDeleteBodyV: true, + allowMergeV: true, + includePackageInTagsV: true, + fileV: "./foo.pb", + importPathV: "/bar/baz", + mergeFileNameV: "apidocs", }, { - name: "Test 2", - expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, - request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", - allowDeleteBodyV: true, - allowMergeV: true, - allowRepeatedFieldsInBodyV: true, - includePackageInTagsV: true, - fileV: "./foo.pb", - importPathV: "/bar/baz", - mergeFileNameV: "test_name", + name: "Test 2", + expected: map[string]string{"google/api/annotations.proto": "github.com/googleapis/googleapis/google/api"}, + request: "allow_delete_body=true,allow_merge=true,allow_repeated_fields_in_body=true,include_package_in_tags=true,merge_file_name=test_name,file=./foo.pb,import_prefix=/bar/baz,Mgoogle/api/annotations.proto=github.com/googleapis/googleapis/google/api", + allowDeleteBodyV: true, + allowMergeV: true, + includePackageInTagsV: true, + fileV: "./foo.pb", + importPathV: "/bar/baz", + mergeFileNameV: "test_name", }, { - name: "Test 3", - expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, - request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 3", + expected: map[string]string{"a/b/c.proto": "github.com/x/y/z", "f/g/h.proto": "github.com/1/2/3/"}, + request: "allow_delete_body=false,allow_merge=false,Ma/b/c.proto=github.com/x/y/z,Mf/g/h.proto=github.com/1/2/3/", + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 4", - expected: map[string]string{}, - request: "", - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 4", + expected: map[string]string{}, + request: "", + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 5", - expected: map[string]string{}, - request: "unknown_param=17", - expectedError: errors.New("cannot set flag unknown_param=17: no such flag -unknown_param"), - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 5", + expected: map[string]string{}, + request: "unknown_param=17", + expectedError: errors.New("cannot set flag unknown_param=17: no such flag -unknown_param"), + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 6", - expected: map[string]string{}, - request: "Mfoo", - expectedError: errors.New("cannot set flag Mfoo: no such flag -Mfoo"), - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 6", + expected: map[string]string{}, + request: "Mfoo", + expectedError: errors.New("cannot set flag Mfoo: no such flag -Mfoo"), + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 7", - expected: map[string]string{}, - request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name", - allowDeleteBodyV: true, - allowMergeV: true, - allowRepeatedFieldsInBodyV: true, - includePackageInTagsV: true, - fileV: "", - importPathV: "", - mergeFileNameV: "", + name: "Test 7", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body,include_package_in_tags,merge_file_name", + allowDeleteBodyV: true, + allowMergeV: true, + includePackageInTagsV: true, + fileV: "", + importPathV: "", + mergeFileNameV: "", }, { - name: "Test 8", - expected: map[string]string{}, - request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", - expectedError: errors.New(`cannot set flag allow_repeated_fields_in_body=3: parse error`), - allowDeleteBodyV: true, - allowMergeV: true, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 8", + expected: map[string]string{}, + request: "allow_delete_body,file,import_prefix,allow_merge,allow_repeated_fields_in_body=3,merge_file_name", + expectedError: errors.New(`cannot set flag allow_repeated_fields_in_body=3: parse error`), + allowDeleteBodyV: true, + allowMergeV: true, + includePackageInTagsV: false, + fileV: "", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 9", - expected: map[string]string{}, - request: "include_package_in_tags=3", - expectedError: errors.New(`cannot set flag include_package_in_tags=3: parse error`), - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 9", + expected: map[string]string{}, + request: "include_package_in_tags=3", + expectedError: errors.New(`cannot set flag include_package_in_tags=3: parse error`), + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 10", - expected: map[string]string{}, - request: "fqn_for_openapi_name=3", - expectedError: errors.New(`cannot set flag fqn_for_openapi_name=3: parse error`), - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - useFQNForOpenAPINameV: false, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 10", + expected: map[string]string{}, + request: "fqn_for_openapi_name=3", + expectedError: errors.New(`cannot set flag fqn_for_openapi_name=3: parse error`), + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: false, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 11", - expected: map[string]string{}, - request: "fqn_for_openapi_name=true", - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - useFQNForOpenAPINameV: true, - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 11", + expected: map[string]string{}, + request: "fqn_for_openapi_name=true", + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: true, + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, { - name: "Test 12", - expected: map[string]string{}, - request: "openapi_naming_strategy=simple", - allowDeleteBodyV: false, - allowMergeV: false, - allowRepeatedFieldsInBodyV: false, - includePackageInTagsV: false, - useFQNForOpenAPINameV: false, - openAPINamingStrategyV: "simple", - fileV: "stdin", - importPathV: "", - mergeFileNameV: "apidocs", + name: "Test 12", + expected: map[string]string{}, + request: "openapi_naming_strategy=simple", + allowDeleteBodyV: false, + allowMergeV: false, + includePackageInTagsV: false, + useFQNForOpenAPINameV: false, + openAPINamingStrategyV: "simple", + fileV: "stdin", + importPathV: "", + mergeFileNameV: "apidocs", }, } @@ -217,7 +203,7 @@ func TestParseReqParam(t *testing.T) { tt.Errorf("expected error malformed, expected %q, got %q", tc.expectedError.Error(), err.Error()) } } - checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.allowRepeatedFieldsInBodyV, tc.includePackageInTagsV, tc.useFQNForOpenAPINameV, tc.openAPINamingStrategyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) + checkFlags(tc.allowDeleteBodyV, tc.allowMergeV, tc.includePackageInTagsV, tc.useFQNForOpenAPINameV, tc.openAPINamingStrategyV, tc.fileV, tc.importPathV, tc.mergeFileNameV, tt, i) clearFlags() }) @@ -227,7 +213,6 @@ func TestParseReqParam(t *testing.T) { func checkFlags( allowDeleteV, allowMergeV, - allowRepeatedFieldsInBodyV, includePackageInTagsV bool, useFQNForOpenAPINameV bool, openAPINamingStrategyV, @@ -252,9 +237,6 @@ func checkFlags( if *mergeFileName != mergeFileNameV { t.Errorf("Test %v: merge_file_name misparsed, expected '%v', got '%v'", tid, mergeFileNameV, *mergeFileName) } - if *allowRepeatedFieldsInBody != allowRepeatedFieldsInBodyV { - t.Errorf("Test %v: allow_repeated_fields_in_body misparsed, expected '%v', got '%v'", tid, allowRepeatedFieldsInBodyV, *allowRepeatedFieldsInBody) - } if *includePackageInTags != includePackageInTagsV { t.Errorf("Test %v: include_package_in_tags misparsed, expected '%v', got '%v'", tid, includePackageInTagsV, *includePackageInTags) } @@ -271,7 +253,6 @@ func clearFlags() { *file = "stdin" *allowDeleteBody = false *allowMerge = false - *allowRepeatedFieldsInBody = false *includePackageInTags = false *mergeFileName = "apidocs" *useFQNForOpenAPIName = false From 1085fb38dc98034ae6a189b45b764fa1f3bef82a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 13:58:44 +0000 Subject: [PATCH 1366/1518] fix(deps): update module google.golang.org/protobuf to v1.28.1 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 24ffc1ea539..47b825320be 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b google.golang.org/grpc v1.48.0 - google.golang.org/protobuf v1.28.0 + google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 53b6af27ab8..221c402aa37 100644 --- a/go.sum +++ b/go.sum @@ -631,8 +631,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/repositories.bzl b/repositories.bzl index 26cc260f1d2..ed15fb777ad 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1095,8 +1095,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=", - version = "v1.28.0", + sum = "h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=", + version = "v1.28.1", ) go_repository( name = "org_golang_x_crypto", From 1911ac0658cb2423d15caa0f5a32e5ccff3ec549 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 22:34:49 +0000 Subject: [PATCH 1367/1518] fix(deps): update google.golang.org/genproto digest to dd149ef --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 47b825320be..4afa335b7c7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b + google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 221c402aa37..786fef3b31c 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM= -google.golang.org/genproto v0.0.0-20220725144611-272f38e5d71b/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9 h1:d3fKQZK+1rWQMg3xLKQbPMirUCo29I/NRdI2WarSzTg= +google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ed15fb777ad..b2ec338fdd8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:SfSkJugek6xm7lWywqth4r2iTrYLpD8lOj1nMIIhMNM=", - version = "v0.0.0-20220725144611-272f38e5d71b", + sum = "h1:d3fKQZK+1rWQMg3xLKQbPMirUCo29I/NRdI2WarSzTg=", + version = "v0.0.0-20220728213248-dd149ef739b9", ) go_repository( name = "org_golang_google_grpc", From a3a0b2182185e470da32d678d9ff61be944ffd20 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 29 Jul 2022 19:45:35 -0700 Subject: [PATCH 1368/1518] Fix timeout panic (#2823) * Handle nil contexts in Context methods This will fix #2822 for users who only update their runtime * Avoid passing nil context to runtime.HTTPError This will fix #2822 for users who only update their generator --- .../internal/helloworld/helloworld.pb.gw.go | 220 +++--- .../internal/integration/integration_test.go | 33 +- .../examplepb/a_bit_of_everything.pb.gw.go | 704 ++++++++++-------- .../proto/examplepb/echo_service.pb.gw.go | 220 +++--- .../proto/examplepb/flow_combination.pb.gw.go | 418 ++++++----- .../generate_unbound_methods.pb.gw.go | 66 +- .../examplepb/non_standard_names.pb.gw.go | 44 +- .../proto/examplepb/openapi_merge_a.pb.gw.go | 88 ++- .../proto/examplepb/openapi_merge_b.pb.gw.go | 44 +- .../examplepb/response_body_service.pb.gw.go | 77 +- .../internal/proto/examplepb/stream.pb.gw.go | 44 +- .../unannotated_echo_service.pb.gw.go | 88 ++- .../proto/examplepb/use_go_template.pb.gw.go | 44 +- .../visibility_rule_echo_service.pb.gw.go | 110 +-- .../proto/examplepb/wrappers.pb.gw.go | 242 +++--- .../unannotated_echo_service.pb.gw.go | 154 ++-- .../internal/gengateway/template.go | 34 +- .../internal/gengateway/template_test.go | 4 +- runtime/context.go | 6 + 19 files changed, 1453 insertions(+), 1187 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 13abeeb8d84..6f76ae1f442 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -744,20 +744,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -768,20 +769,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -792,20 +794,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -816,20 +819,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_3(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_3(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -840,20 +844,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_4(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_4(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -864,20 +869,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_5(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_5(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -888,20 +894,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_6(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_6(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -912,20 +919,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_7(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_7(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_7(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_7(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -936,20 +944,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_8(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_8(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_8(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_8(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -960,20 +969,21 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Greeter_SayHello_9(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Greeter_SayHello_9(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_9(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_9(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1023,19 +1033,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1044,19 +1055,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/strval/{strVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1065,19 +1077,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/floatval/{floatVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1086,19 +1099,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/doubleval/{doubleVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_3(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_3(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1107,19 +1121,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/boolval/{boolVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_4(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_4(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1128,19 +1143,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/bytesval/{bytesVal}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_5(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_5(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1149,19 +1165,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int32val/{int32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_6(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_6(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1170,19 +1187,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint32val/{uint32Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_7(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_7(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_7(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_7(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1191,19 +1209,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/int64val/{int64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_8(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_8(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_8(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_8(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1212,19 +1231,20 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", runtime.WithHTTPPathPattern("/say/uint64val/{uint64Val}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Greeter_SayHello_9(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_Greeter_SayHello_9(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_Greeter_SayHello_9(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Greeter_SayHello_9(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 4c31d54bbe7..480deff3ab4 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1574,6 +1574,31 @@ func TestTimeout(t *testing.T) { } } +func TestInvalidTimeout(t *testing.T) { + if testing.Short() { + t.Skip() + return + } + + apiURL := "http://localhost:8088/v2/example/timeout" + req, err := http.NewRequest("GET", apiURL, nil) + if err != nil { + t.Errorf(`http.NewRequest("GET", %q, nil) failed with %v; want success`, apiURL, err) + return + } + req.Header.Set("Grpc-Timeout", "INVALID") + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Errorf("http.DefaultClient.Do(%#v) failed with %v; want success", req, err) + return + } + defer resp.Body.Close() + + if got, want := resp.StatusCode, http.StatusBadRequest; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + } +} + func TestPostWithEmptyBody(t *testing.T) { if testing.Short() { t.Skip() @@ -2359,8 +2384,8 @@ func testABEOptions(t *testing.T, port int) { client := &http.Client{} resp, err := client.Do(req) if err != nil { - t.Fatal(err) - } + t.Fatal(err) + } defer resp.Body.Close() if got, want := resp.StatusCode, http.StatusOK; got != want { t.Errorf("resp.StatusCode = %d; want %d", got, want) @@ -2387,8 +2412,8 @@ func testABETrace(t *testing.T, port int) { client := &http.Client{} resp, err := client.Do(req) if err != nil { - t.Fatal(err) - } + t.Fatal(err) + } defer resp.Body.Close() buf, err := ioutil.ReadAll(resp.Body) if err != nil { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 323f872344c..5037fd5466b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2632,20 +2632,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Create_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Create_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2656,20 +2657,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CreateBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CreateBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CreateBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CreateBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2680,20 +2682,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CreateBook_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CreateBook_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CreateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CreateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2704,20 +2707,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateBook_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2728,20 +2732,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Lookup_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Lookup_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Lookup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2752,20 +2757,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Custom_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Custom_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Custom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Custom_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2776,20 +2782,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Update_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Update_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2800,20 +2807,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2824,20 +2832,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2848,20 +2857,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_UpdateV2_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2872,20 +2882,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Delete_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2896,20 +2907,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetQuery_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetQuery_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2920,20 +2932,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetRepeatedQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2944,20 +2957,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2968,20 +2982,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2992,20 +3007,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3016,20 +3032,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_DeepPathEcho_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3040,20 +3057,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Timeout_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Timeout_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Timeout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Timeout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3064,20 +3082,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_ErrorWithDetails_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3088,20 +3107,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetMessageWithBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3112,20 +3132,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_PostWithEmptyBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3136,20 +3157,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3160,20 +3182,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3184,20 +3207,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckPostQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3208,20 +3232,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3232,20 +3257,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3256,20 +3282,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3280,20 +3307,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CheckStatus_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CheckStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3304,20 +3332,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_Exists_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_Exists_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Exists_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Exists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3328,20 +3357,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_CustomOptionsRequest_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CustomOptionsRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3352,20 +3382,21 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ABitOfEverythingService_TraceRequest_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ABitOfEverythingService_TraceRequest_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_TraceRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_TraceRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3385,20 +3416,21 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_CamelCaseServiceName_Empty_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_CamelCaseServiceName_Empty_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_CamelCaseServiceName_Empty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CamelCaseServiceName_Empty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3448,19 +3480,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value=strprefix/*}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Create_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3469,19 +3502,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CreateBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CreateBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CreateBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CreateBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3490,19 +3524,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBook", runtime.WithHTTPPathPattern("/v1/{parent=publishers/*}/books")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CreateBook_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CreateBook_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CreateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CreateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3511,19 +3546,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateBook", runtime.WithHTTPPathPattern("/v1/{book.name=publishers/*/books/*}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateBook_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_UpdateBook_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateBook_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateBook_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3532,19 +3568,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Lookup_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Lookup_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Lookup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3553,19 +3590,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Custom", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Custom_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Custom_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Custom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Custom_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3574,19 +3612,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Update_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3595,19 +3634,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_UpdateV2_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3616,19 +3656,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_UpdateV2_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3637,19 +3678,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", runtime.WithHTTPPathPattern("/v2a/example/a_bit_of_everything/{abe.uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_UpdateV2_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_UpdateV2_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_UpdateV2_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_UpdateV2_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3658,19 +3700,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Delete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3679,19 +3722,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/query/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetQuery_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_GetQuery_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3700,19 +3744,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetRepeatedQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetRepeatedQuery_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3721,19 +3766,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo/{value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3742,19 +3788,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3763,19 +3810,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3784,19 +3832,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", runtime.WithHTTPPathPattern("/v1/example/deep_path/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_DeepPathEcho_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_DeepPathEcho_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_DeepPathEcho_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3805,19 +3854,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", runtime.WithHTTPPathPattern("/v2/example/timeout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Timeout_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Timeout_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Timeout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Timeout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3826,19 +3876,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", runtime.WithHTTPPathPattern("/v2/example/errorwithdetails")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_ErrorWithDetails_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_ErrorWithDetails_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_ErrorWithDetails_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3847,19 +3898,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", runtime.WithHTTPPathPattern("/v2/example/withbody/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_GetMessageWithBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_GetMessageWithBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_GetMessageWithBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3868,19 +3920,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", runtime.WithHTTPPathPattern("/v2/example/postwithemptybody/{name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_PostWithEmptyBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_PostWithEmptyBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_PostWithEmptyBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3889,19 +3942,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/{single_nested.name}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3910,19 +3964,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3931,19 +3986,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/params/post/{string_value}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckPostQueryParams_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckPostQueryParams_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3952,19 +4008,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", runtime.WithHTTPPathPattern("/v2/example/overwriteresponsecontenttype")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_OverwriteResponseContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3973,19 +4030,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalPathEnum", runtime.WithHTTPPathPattern("/v2/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckExternalPathEnum_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckExternalPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -3994,19 +4052,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckExternalNestedPathEnum", runtime.WithHTTPPathPattern("/v3/{value}:check")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckExternalNestedPathEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4015,19 +4074,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckStatus", runtime.WithHTTPPathPattern("/v1/example/checkStatus")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CheckStatus_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CheckStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CheckStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CheckStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4036,19 +4096,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Exists", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_Exists_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_Exists_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_Exists_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_Exists_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4057,19 +4118,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CustomOptionsRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_CustomOptionsRequest_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_CustomOptionsRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_CustomOptionsRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4078,19 +4140,20 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/TraceRequest", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ABitOfEverythingService_TraceRequest_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ABitOfEverythingService_TraceRequest_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ABitOfEverythingService_TraceRequest_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ABitOfEverythingService_TraceRequest_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -4268,19 +4331,20 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty", runtime.WithHTTPPathPattern("/v2/example/empty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_CamelCaseServiceName_Empty_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_CamelCaseServiceName_Empty_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_CamelCaseServiceName_Empty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_CamelCaseServiceName_Empty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index cc74241f1ed..8911d98d0ff 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -782,20 +782,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -806,20 +807,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -830,20 +832,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -854,20 +857,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_3(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_3(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -878,20 +882,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_Echo_4(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_Echo_4(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -902,20 +907,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -926,20 +932,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoBody_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoBody_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoBody_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoBody_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -950,20 +957,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -974,20 +982,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoPatch_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoPatch_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoPatch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoPatch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -998,20 +1007,21 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_EchoService_EchoUnauthorized_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_EchoService_EchoUnauthorized_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoUnauthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoUnauthorized_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1061,19 +1071,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1082,19 +1093,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1103,19 +1115,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1124,19 +1137,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_3(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_Echo_3(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1145,19 +1159,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_Echo_4(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_Echo_4(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1166,19 +1181,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1187,19 +1203,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoBody_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_EchoBody_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoBody_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoBody_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1208,19 +1225,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1229,19 +1247,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoPatch", runtime.WithHTTPPathPattern("/v1/example/echo_patch")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoPatch_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_EchoPatch_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoPatch_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoPatch_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1250,19 +1269,20 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoUnauthorized", runtime.WithHTTPPathPattern("/v1/example/echo_unauthorized")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_EchoService_EchoUnauthorized_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_EchoService_EchoUnauthorized_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_EchoService_EchoUnauthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_EchoService_EchoUnauthorized_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 4a47da07f16..f4c092226c1 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1455,20 +1455,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcEmptyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1500,20 +1501,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1524,20 +1526,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1548,20 +1551,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1572,20 +1576,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_3(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_3(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1596,20 +1601,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_4(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_4(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1620,20 +1626,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_5(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_5(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1644,20 +1651,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcBodyRpc_6(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcBodyRpc_6(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1668,20 +1676,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathSingleNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1692,20 +1701,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1716,20 +1726,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1740,20 +1751,21 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FlowCombination_RpcPathNestedRpc_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1880,19 +1892,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", runtime.WithHTTPPathPattern("/rpc/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcEmptyRpc_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcEmptyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1901,19 +1914,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", runtime.WithHTTPPathPattern("/rpc/empty/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", runtime.WithHTTPPathPattern("/rpc/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcEmptyStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcEmptyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcEmptyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1922,19 +1936,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", runtime.WithHTTPPathPattern("/stream/empty/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", runtime.WithHTTPPathPattern("/stream/empty/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_StreamEmptyRpc_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_StreamEmptyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_StreamEmptyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_StreamEmptyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1943,19 +1958,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", runtime.WithHTTPPathPattern("/stream/empty/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", runtime.WithHTTPPathPattern("/stream/empty/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_StreamEmptyStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_StreamEmptyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_StreamEmptyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_StreamEmptyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -1964,19 +1980,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1985,19 +2002,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2006,19 +2024,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2027,19 +2046,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_3(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_3(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2048,19 +2068,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_4(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_4(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2069,19 +2090,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_5(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_5(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_5(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2090,19 +2112,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyRpc_6(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyRpc_6(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyRpc_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyRpc_6(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2111,19 +2134,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathSingleNestedRpc_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathSingleNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathSingleNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2132,19 +2156,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2153,19 +2178,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2174,19 +2200,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/rpc")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedRpc_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedRpc_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedRpc_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedRpc_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2195,19 +2222,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2216,19 +2244,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/{b}/{c}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_1(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2237,19 +2266,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/query/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_2(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2258,19 +2288,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_3(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_3(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_3(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_3(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2279,19 +2310,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/query/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_4(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_4(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_4(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_4(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2300,19 +2332,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/body/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_5(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_5(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_5(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_5(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2321,19 +2354,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", runtime.WithHTTPPathPattern("/rpc/path/{a}/query/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcBodyStream_6(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcBodyStream_6(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcBodyStream_6(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcBodyStream_6(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2342,19 +2376,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathSingleNestedStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathSingleNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathSingleNestedStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2363,19 +2398,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested/{a.str}/{b}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2384,19 +2420,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested1/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedStream_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedStream_1(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedStream_1(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -2405,19 +2442,20 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/stream")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", runtime.WithHTTPPathPattern("/rpc/path-nested2/{a.str}/stream")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FlowCombination_RpcPathNestedStream_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_FlowCombination_RpcPathNestedStream_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_FlowCombination_RpcPathNestedStream_2(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_FlowCombination_RpcPathNestedStream_2(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go index 85748496d9a..2a2fd881502 100644 --- a/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go +++ b/examples/internal/proto/examplepb/generate_unbound_methods.pb.gw.go @@ -146,20 +146,21 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -170,20 +171,21 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -194,20 +196,21 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerServer(ctx context.Context, ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -257,19 +260,20 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/Echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -278,19 +282,20 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoBody")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -299,19 +304,20 @@ func RegisterGenerateUnboundMethodsEchoServiceHandlerClient(ctx context.Context, defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete", runtime.WithHTTPPathPattern("/grpc.gateway.examples.internal.proto.examplepb.GenerateUnboundMethodsEchoService/EchoDelete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_GenerateUnboundMethodsEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_GenerateUnboundMethodsEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 729d6c64373..4d4a0b81993 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -176,20 +176,21 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NonStandardService_Update_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NonStandardService_Update_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NonStandardService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NonStandardService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -200,20 +201,21 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_NonStandardService_UpdateWithJSONNames_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NonStandardService_UpdateWithJSONNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NonStandardService_UpdateWithJSONNames_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -263,19 +265,20 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", runtime.WithHTTPPathPattern("/v1/example/non_standard/update")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_NonStandardService_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_NonStandardService_Update_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NonStandardService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NonStandardService_Update_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -284,19 +287,20 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", runtime.WithHTTPPathPattern("/v1/example/non_standard/update_with_json_names")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_NonStandardService_UpdateWithJSONNames_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_NonStandardService_UpdateWithJSONNames_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_NonStandardService_UpdateWithJSONNames_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_NonStandardService_UpdateWithJSONNames_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go index d5d70b01891..c8ea65183de 100644 --- a/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_a.pb.gw.go @@ -180,20 +180,21 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceA_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceA_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceA_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceA_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -204,20 +205,21 @@ func RegisterServiceAHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceA_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceA_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceA_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceA_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -237,20 +239,21 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceC_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceC_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceC_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceC_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -261,20 +264,21 @@ func RegisterServiceCHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceC_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceC_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceC_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceC_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -324,19 +328,20 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodOne", runtime.WithHTTPPathPattern("/v1/example/a/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceA_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceA_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceA_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceA_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -345,19 +350,20 @@ func RegisterServiceAHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceA/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/a/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceA_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceA_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceA_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceA_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -419,19 +425,20 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodOne", runtime.WithHTTPPathPattern("/v1/example/c/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceC_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceC_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceC_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceC_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -440,19 +447,20 @@ func RegisterServiceCHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceC/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/c/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceC_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceC_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceC_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceC_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go index 72eaeee7d8a..b5e32a02d81 100644 --- a/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go +++ b/examples/internal/proto/examplepb/openapi_merge_b.pb.gw.go @@ -112,20 +112,21 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceB_MethodOne_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceB_MethodOne_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceB_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceB_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -136,20 +137,21 @@ func RegisterServiceBHandlerServer(ctx context.Context, mux *runtime.ServeMux, s ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ServiceB_MethodTwo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ServiceB_MethodTwo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceB_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceB_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -199,19 +201,20 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodOne", runtime.WithHTTPPathPattern("/v1/example/b/1")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceB_MethodOne_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceB_MethodOne_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceB_MethodOne_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceB_MethodOne_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -220,19 +223,20 @@ func RegisterServiceBHandlerClient(ctx context.Context, mux *runtime.ServeMux, c defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ServiceB/MethodTwo", runtime.WithHTTPPathPattern("/v1/example/b/2")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ServiceB_MethodTwo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ServiceB_MethodTwo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ServiceB_MethodTwo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_ServiceB_MethodTwo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 3cc7b5c6d41..ac13e0916a1 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -234,20 +234,21 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_GetResponseBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_GetResponseBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_GetResponseBody_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_GetResponseBody_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -258,20 +259,21 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_ListResponseBodies_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_ListResponseBodies_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_ListResponseBodies_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -282,20 +284,21 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_ResponseBodyService_ListResponseStrings_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_ListResponseStrings_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_ListResponseStrings_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -352,19 +355,20 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", runtime.WithHTTPPathPattern("/responsebody/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_GetResponseBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ResponseBodyService_GetResponseBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_GetResponseBody_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_GetResponseBody_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_GetResponseBody_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -373,19 +377,20 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", runtime.WithHTTPPathPattern("/responsebodies/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_ListResponseBodies_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ResponseBodyService_ListResponseBodies_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_ListResponseBodies_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_ListResponseBodies_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseBodies_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -394,19 +399,20 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", runtime.WithHTTPPathPattern("/responsestrings/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_ListResponseStrings_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ResponseBodyService_ListResponseStrings_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_ListResponseStrings_0(ctx, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) + forward_ResponseBodyService_ListResponseStrings_0(annotatedContext, mux, outboundMarshaler, w, req, response_ResponseBodyService_ListResponseStrings_0{resp}, mux.GetForwardResponseOptions()...) }) @@ -415,19 +421,20 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", runtime.WithHTTPPathPattern("/responsebody/stream/{data}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", runtime.WithHTTPPathPattern("/responsebody/stream/{data}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_ResponseBodyService_GetResponseBodyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { + forward_ResponseBodyService_GetResponseBodyStream_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { res, err := resp.Recv() return response_ResponseBodyService_GetResponseBodyStream_0{res}, err }, mux.GetForwardResponseOptions()...) diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 9467d888c3e..ead7cb5c9b2 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -234,19 +234,20 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/bulk")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/bulk")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_BulkCreate_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_StreamService_BulkCreate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_StreamService_BulkCreate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_StreamService_BulkCreate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -255,19 +256,20 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_StreamService_List_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_StreamService_List_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_StreamService_List_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -276,19 +278,20 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/echo")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_BulkEcho_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_StreamService_BulkEcho_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_StreamService_BulkEcho_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_StreamService_BulkEcho_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -297,19 +300,20 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", runtime.WithHTTPPathPattern("/v1/example/download")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", runtime.WithHTTPPathPattern("/v1/example/download")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_StreamService_Download_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_StreamService_Download_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_StreamService_Download_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_StreamService_Download_0(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 8b6c8aaf744..1f2edb1253a 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -274,20 +274,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -298,20 +299,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -322,20 +324,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -346,20 +349,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -409,19 +413,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -430,19 +435,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -451,19 +457,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v1/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -472,19 +479,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v1/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 9906f3ba37b..86167f21c29 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -112,20 +112,21 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_LoginService_Login_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_LoginService_Login_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_LoginService_Login_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_LoginService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -136,20 +137,21 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_LoginService_Logout_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_LoginService_Logout_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_LoginService_Logout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_LoginService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -199,19 +201,20 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", runtime.WithHTTPPathPattern("/v1/example/login")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_LoginService_Login_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_LoginService_Login_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_LoginService_Login_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_LoginService_Login_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -220,19 +223,20 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", runtime.WithHTTPPathPattern("/v1/example/logout")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_LoginService_Logout_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_LoginService_Logout_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_LoginService_Logout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_LoginService_Logout_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go index af8d45f6460..ab5ee42168d 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.gw.go @@ -292,20 +292,21 @@ func RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *ru ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_VisibilityRuleEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_VisibilityRuleEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -316,20 +317,21 @@ func RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *ru ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_VisibilityRuleEchoService_EchoInternal_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoInternal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -340,20 +342,21 @@ func RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *ru ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_VisibilityRuleEchoService_EchoPreview_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -364,20 +367,21 @@ func RegisterVisibilityRuleEchoServiceHandlerServer(ctx context.Context, mux *ru ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -397,20 +401,21 @@ func RegisterVisibilityRuleInternalEchoServiceHandlerServer(ctx context.Context, ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_VisibilityRuleInternalEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleInternalEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -460,19 +465,20 @@ func RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *ru defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_VisibilityRuleEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_VisibilityRuleEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -481,19 +487,20 @@ func RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *ru defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternal", runtime.WithHTTPPathPattern("/v1/example/echo_internal")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_VisibilityRuleEchoService_EchoInternal_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoInternal_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoInternal_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -502,19 +509,20 @@ func RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *ru defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", runtime.WithHTTPPathPattern("/v1/example/echo_preview")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_VisibilityRuleEchoService_EchoPreview_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -523,19 +531,20 @@ func RegisterVisibilityRuleEchoServiceHandlerClient(ctx context.Context, mux *ru defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoInternalAndPreview", runtime.WithHTTPPathPattern("/v1/example/echo_internal_and_preview")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleEchoService_EchoInternalAndPreview_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -605,19 +614,20 @@ func RegisterVisibilityRuleInternalEchoServiceHandlerClient(ctx context.Context, defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService/Echo", runtime.WithHTTPPathPattern("/v1/example/internal/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_VisibilityRuleInternalEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_VisibilityRuleInternalEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_VisibilityRuleInternalEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 02b39e20a0e..41047b01aa2 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -420,20 +420,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_Create_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_Create_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -444,20 +445,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateStringValue_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateStringValue_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateStringValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateStringValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -468,20 +470,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateInt32Value_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateInt32Value_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -492,20 +495,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateInt64Value_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateInt64Value_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -516,20 +520,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateFloatValue_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateFloatValue_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateFloatValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateFloatValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -540,20 +545,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateDoubleValue_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateDoubleValue_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateDoubleValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateDoubleValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -564,20 +570,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateBoolValue_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateBoolValue_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateBoolValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateBoolValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -588,20 +595,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateUInt32Value_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateUInt32Value_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateUInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateUInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -612,20 +620,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateUInt64Value_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateUInt64Value_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateUInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateUInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -636,20 +645,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateBytesValue_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateBytesValue_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateBytesValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateBytesValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -660,20 +670,21 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_WrappersService_CreateEmpty_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_WrappersService_CreateEmpty_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateEmpty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateEmpty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -723,19 +734,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", runtime.WithHTTPPathPattern("/v1/example/wrappers")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_Create_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_Create_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -744,19 +756,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", runtime.WithHTTPPathPattern("/v1/testString")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateStringValue_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateStringValue_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateStringValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateStringValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -765,19 +778,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", runtime.WithHTTPPathPattern("/v1/testInt32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateInt32Value_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateInt32Value_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -786,19 +800,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", runtime.WithHTTPPathPattern("/v1/testInt64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateInt64Value_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateInt64Value_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -807,19 +822,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", runtime.WithHTTPPathPattern("/v1/testFloat")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateFloatValue_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateFloatValue_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateFloatValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateFloatValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -828,19 +844,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", runtime.WithHTTPPathPattern("/v1/testDouble")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateDoubleValue_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateDoubleValue_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateDoubleValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateDoubleValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -849,19 +866,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", runtime.WithHTTPPathPattern("/v1/testBool")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateBoolValue_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateBoolValue_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateBoolValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateBoolValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -870,19 +888,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", runtime.WithHTTPPathPattern("/v1/testUint32")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateUInt32Value_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateUInt32Value_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateUInt32Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateUInt32Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -891,19 +910,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", runtime.WithHTTPPathPattern("/v1/testUint64")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateUInt64Value_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateUInt64Value_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateUInt64Value_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateUInt64Value_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -912,19 +932,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", runtime.WithHTTPPathPattern("/v1/testBytes")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateBytesValue_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateBytesValue_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateBytesValue_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateBytesValue_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -933,19 +954,20 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", runtime.WithHTTPPathPattern("/v1/testEmpty")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_WrappersService_CreateEmpty_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_WrappersService_CreateEmpty_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_WrappersService_CreateEmpty_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_WrappersService_CreateEmpty_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index f950dff71dd..58058276271 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -585,20 +585,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -609,20 +610,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -633,20 +635,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_2(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_2(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -657,20 +660,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_3(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_3(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -681,20 +685,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_Echo_4(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_Echo_4(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -705,20 +710,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -729,20 +735,21 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -792,19 +799,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -813,19 +821,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -834,19 +843,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo/{id}/{num}/{lang}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_2(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_2(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_2(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -855,19 +865,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo1/{id}/{line_num}/{status.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_3(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_3(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_3(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -876,19 +887,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", runtime.WithHTTPPathPattern("/v2/example/echo2/{no.note}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_Echo_4(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_Echo_4(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_Echo_4(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -897,19 +909,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", runtime.WithHTTPPathPattern("/v2/example/echo_body")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoBody_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_EchoBody_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoBody_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -918,19 +931,20 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", runtime.WithHTTPPathPattern("/v2/example/echo_delete")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_UnannotatedEchoService_EchoDelete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_UnannotatedEchoService_EchoDelete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_UnannotatedEchoService_EchoDelete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index a59b6c0fe82..fb65562a72c 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -612,27 +612,28 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error + var annotatedContext context.Context {{- if $b.PathTmpl }} - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) {{- else -}} - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } {{ if $b.ResponseBody }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) {{ else }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) {{end}} }) {{end}} @@ -693,35 +694,36 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error + var annotatedContext context.Context {{- if $b.PathTmpl }} - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}", runtime.WithHTTPPathPattern("{{$b.PathTmpl.Template}}")) {{- else -}} - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") {{- end }} if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) + resp, md, err := request_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } {{if $m.GetServerStreaming}} {{ if $b.ResponseBody }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { res, err := resp.Recv() return response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{res}, err }, mux.GetForwardResponseOptions()...) {{ else }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) {{end}} {{else}} {{ if $b.ResponseBody }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) {{ else }} - forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) {{end}} {{end}} }) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index e8acf95ae0c..829c5c57103 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -254,7 +254,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `ctx, err = runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo", runtime.WithHTTPPathPattern("/v1"))`; !strings.Contains(got, want) { + if want := `annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo", runtime.WithHTTPPathPattern("/v1"))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } @@ -462,7 +462,7 @@ func TestApplyTemplateInProcess(t *testing.T) { serverStreaming: false, sigWant: []string{ `func local_request_ExampleService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server ExampleServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {`, - `resp, md, err := local_request_ExampleService_Echo_0(ctx, inboundMarshaler, server, req, pathParams)`, + `resp, md, err := local_request_ExampleService_Echo_0(annotatedContext, inboundMarshaler, server, req, pathParams)`, }, }, { diff --git a/runtime/context.go b/runtime/context.go index b5d1e6cf81b..9b1b81f5292 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -178,11 +178,17 @@ type serverMetadataKey struct{} // NewServerMetadataContext creates a new context with ServerMetadata func NewServerMetadataContext(ctx context.Context, md ServerMetadata) context.Context { + if ctx == nil { + ctx = context.Background() + } return context.WithValue(ctx, serverMetadataKey{}, md) } // ServerMetadataFromContext returns the ServerMetadata in ctx func ServerMetadataFromContext(ctx context.Context) (md ServerMetadata, ok bool) { + if ctx == nil { + return md, false + } md, ok = ctx.Value(serverMetadataKey{}).(ServerMetadata) return } From 0149eb948d58de6ba8f026e73baa8ef1492a51f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Jul 2022 22:45:56 -0400 Subject: [PATCH 1369/1518] build(deps): bump tzinfo from 1.2.9 to 1.2.10 in /docs (#2810) Bumps [tzinfo](https://github.com/tzinfo/tzinfo) from 1.2.9 to 1.2.10. - [Release notes](https://github.com/tzinfo/tzinfo/releases) - [Changelog](https://github.com/tzinfo/tzinfo/blob/master/CHANGES.md) - [Commits](https://github.com/tzinfo/tzinfo/compare/v1.2.9...v1.2.10) --- updated-dependencies: - dependency-name: tzinfo dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 1f120621b0c..f1fe46240a4 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -250,7 +250,7 @@ GEM thread_safe (0.3.6) typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (1.2.9) + tzinfo (1.2.10) thread_safe (~> 0.1) unf (0.1.4) unf_ext From 39f37d5f2303b2a2c72a9c917395404d3fa05330 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 29 Jul 2022 22:54:35 -0400 Subject: [PATCH 1370/1518] Update goreleaser base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70e45d0eb68..ca6eace8a76 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.18 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.0 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.1 proto_lint: runs-on: ubuntu-latest steps: From fd5eaaa1dd26e1aef0ef9db18527e94d755f6454 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 21:09:45 +0000 Subject: [PATCH 1371/1518] chore(deps): update dependency golang to v1.18.5 --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index fa9098d48bc..658938de3ce 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.4 +FROM golang:1.18.5 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index 15560410e74..ba576db5bee 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.4 as builder +FROM golang:1.18.5 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index d9544f2f862..6064208e2c9 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.4 as builder +FROM golang:1.18.5 as builder ARG RELEASE_VERSION From bb60155ee29271a537806e1a3483ad8fca55d31e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 23:45:46 -0400 Subject: [PATCH 1372/1518] fix(deps): update google.golang.org/genproto digest to 83ce21f (#2827) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 4afa335b7c7..40d8cca29dd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9 + google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 786fef3b31c..2e8b64df27f 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9 h1:d3fKQZK+1rWQMg3xLKQbPMirUCo29I/NRdI2WarSzTg= -google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f h1:XVHpVMvPs4MtH3h6cThzKs2snNexcfd35vQx2T3IuIY= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b2ec338fdd8..26f60c03f14 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:d3fKQZK+1rWQMg3xLKQbPMirUCo29I/NRdI2WarSzTg=", - version = "v0.0.0-20220728213248-dd149ef739b9", + sum = "h1:XVHpVMvPs4MtH3h6cThzKs2snNexcfd35vQx2T3IuIY=", + version = "v0.0.0-20220801145646-83ce21fca29f", ) go_repository( name = "org_golang_google_grpc", From 5c1c51d37f0e74ab49dab39c9dcadbc9f920f35f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 16:43:59 +0000 Subject: [PATCH 1373/1518] fix(deps): update google.golang.org/genproto digest to ce4fa29 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 40d8cca29dd..b45d6f50dce 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f + google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2e8b64df27f..ed5171e53b4 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f h1:XVHpVMvPs4MtH3h6cThzKs2snNexcfd35vQx2T3IuIY= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 h1:QntLWYqZeuBtJkth3m/6DLznnI0AHJr+AgJXvVh/izw= +google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 26f60c03f14..1a87d4d28a0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:XVHpVMvPs4MtH3h6cThzKs2snNexcfd35vQx2T3IuIY=", - version = "v0.0.0-20220801145646-83ce21fca29f", + sum = "h1:QntLWYqZeuBtJkth3m/6DLznnI0AHJr+AgJXvVh/izw=", + version = "v0.0.0-20220802133213-ce4fa296bf78", ) go_repository( name = "org_golang_google_grpc", From 2790c27d4909d2a3709557bafd00d6fd21c72b26 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 20:38:11 +0000 Subject: [PATCH 1374/1518] chore(deps): update dependency golang to v1.19.0 --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 658938de3ce..2d32212a95a 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.5 +FROM golang:1.19.0 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index ba576db5bee..c618ec3067a 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.5 as builder +FROM golang:1.19.0 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index 6064208e2c9..2839f43ef95 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.18.5 as builder +FROM golang:1.19.0 as builder ARG RELEASE_VERSION From b5b774f25c29b8d801176266b78b6f139c3b4da7 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Wed, 3 Aug 2022 14:36:39 -0700 Subject: [PATCH 1375/1518] Fix openapiv2 path parameter parsing when colon in verb (#2825) * Fix openapiv2 path parameter parsing when colon in verb This makes the openapiv2 path parameter parser consistent with our grpc-gateway handler parser. In the future, ideally we'd unify these two parsers (see #2824). * Allow colons inside variables --- .../internal/clients/abe/api/swagger.yaml | 338 +++++++ .../abe/api_a_bit_of_everything_service.go | 340 +++++++ .../proto/examplepb/a_bit_of_everything.pb.go | 911 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 121 +++ .../proto/examplepb/a_bit_of_everything.proto | 5 + .../a_bit_of_everything.swagger.json | 368 +++++++ .../examplepb/a_bit_of_everything_grpc.pb.go | 36 + .../internal/server/a_bit_of_everything.go | 13 + internal/httprule/parse_test.go | 79 ++ .../internal/genopenapi/template.go | 10 +- .../internal/genopenapi/template_test.go | 441 +++++++++ 11 files changed, 2210 insertions(+), 452 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index f8650643481..200e5660eb3 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2787,6 +2787,344 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/a_bit_of_everything/{uuidName}:custom:custom: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_DoubleColon" + parameters: + - name: "uuidName" + in: "path" + required: true + type: "string" + x-internal: true + x-exportParamName: "UuidName" + - name: "singleNested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + x-optionalDataType: "String" + - name: "singleNested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + x-optionalDataType: "Int64" + - name: "singleNested.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + x-optionalDataType: "String" + - name: "floatValue" + in: "query" + description: "Float value field" + required: true + type: "number" + default: 0.2 + format: "float" + x-exportParamName: "FloatValue" + - name: "doubleValue" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + x-optionalDataType: "Float64" + - name: "int64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + x-optionalDataType: "String" + - name: "uint64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + x-optionalDataType: "String" + - name: "int32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + x-optionalDataType: "Int32" + - name: "fixed64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + x-optionalDataType: "String" + - name: "fixed32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + x-optionalDataType: "Int64" + - name: "boolValue" + in: "query" + required: false + type: "boolean" + x-exportParamName: "BoolValue" + x-optionalDataType: "Bool" + - name: "stringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + x-optionalDataType: "String" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + x-optionalDataType: "String" + - name: "uint32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + x-optionalDataType: "Int64" + - name: "enumValue" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + x-optionalDataType: "String" + - name: "pathEnumValue" + in: "query" + required: false + type: "string" + default: "ABC" + enum: + - "ABC" + - "DEF" + x-exportParamName: "PathEnumValue" + x-optionalDataType: "String" + - name: "nestedPathEnumValue" + in: "query" + required: false + type: "string" + default: "GHI" + enum: + - "GHI" + - "JKL" + x-exportParamName: "NestedPathEnumValue" + x-optionalDataType: "String" + - name: "sfixed32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + x-optionalDataType: "Int32" + - name: "sfixed64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + x-optionalDataType: "String" + - name: "sint32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + x-optionalDataType: "Int32" + - name: "sint64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + x-optionalDataType: "String" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + x-optionalDataType: "String" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + x-optionalDataType: "String" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + x-optionalDataType: "Time" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumValue" + - name: "repeatedEnumAnnotation" + in: "query" + description: "Repeated numeric enum title\n\nRepeated numeric enum description.\n\ + \n - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + collectionFormat: "multi" + x-exportParamName: "RepeatedEnumAnnotation" + - name: "enumValueAnnotation" + in: "query" + description: "Numeric enum title\n\nNumeric enum description.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValueAnnotation" + x-optionalDataType: "String" + - name: "repeatedStringAnnotation" + in: "query" + description: "Repeated string title\n\nRepeated string description." + required: false + type: "array" + items: + type: "string" + collectionFormat: "multi" + x-exportParamName: "RepeatedStringAnnotation" + - name: "nestedAnnotation.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "NestedAnnotationName" + x-optionalDataType: "String" + - name: "nestedAnnotation.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "NestedAnnotationAmount" + x-optionalDataType: "Int64" + - name: "nestedAnnotation.ok" + in: "query" + description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "NestedAnnotationOk" + x-optionalDataType: "String" + - name: "int64OverrideType" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Int64OverrideType" + x-optionalDataType: "Int64" + - name: "requiredStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as required in Open API definition" + required: true + type: "string" + x-exportParamName: "RequiredStringViaFieldBehaviorAnnotation" + - name: "outputOnlyStringViaFieldBehaviorAnnotation" + in: "query" + description: "mark a field as readonly in Open API definition" + required: false + type: "string" + x-exportParamName: "OutputOnlyStringViaFieldBehaviorAnnotation" + x-optionalDataType: "String" + - name: "optionalStringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "OptionalStringValue" + x-optionalDataType: "String" + - name: "productId" + in: "query" + description: "Test openapiv2 generation of repeated fields\n\nOnly digits\ + \ are allowed." + required: false + type: "array" + items: + type: "string" + minLength: 1 + maxLength: 19 + pattern: "^[0-9]+$" + collectionFormat: "multi" + x-exportParamName: "ProductId" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{uuid}: get: tags: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 680a28871c8..e00a679ec15 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -3058,6 +3058,346 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx co return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param uuidName + * @param floatValue Float value field + * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param optional nil or *ABitOfEverythingServiceDoubleColonOpts - Optional Parameters: + * @param "SingleNestedName" (optional.String) - name is nested field. + * @param "SingleNestedAmount" (optional.Int64) - + * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "DoubleValue" (optional.Float64) - + * @param "Int64Value" (optional.String) - + * @param "Uint64Value" (optional.String) - + * @param "Int32Value" (optional.Int32) - + * @param "Fixed64Value" (optional.String) - + * @param "Fixed32Value" (optional.Int64) - + * @param "BoolValue" (optional.Bool) - + * @param "StringValue" (optional.String) - + * @param "BytesValue" (optional.String) - + * @param "Uint32Value" (optional.Int64) - + * @param "EnumValue" (optional.String) - - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "PathEnumValue" (optional.String) - + * @param "NestedPathEnumValue" (optional.String) - + * @param "Sfixed32Value" (optional.Int32) - + * @param "Sfixed64Value" (optional.String) - + * @param "Sint32Value" (optional.Int32) - + * @param "Sint64Value" (optional.String) - + * @param "RepeatedStringValue" (optional.Interface of []string) - + * @param "OneofString" (optional.String) - + * @param "NonConventionalNameValue" (optional.String) - + * @param "TimestampValue" (optional.Time) - + * @param "RepeatedEnumValue" (optional.Interface of []string) - repeated enum value. it is comma-separated in query - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedEnumAnnotation" (optional.Interface of []string) - Repeated numeric enum title Repeated numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "EnumValueAnnotation" (optional.String) - Numeric enum title Numeric enum description. - ZERO: ZERO means 0 - ONE: ONE means 1 + * @param "RepeatedStringAnnotation" (optional.Interface of []string) - Repeated string title Repeated string description. + * @param "NestedAnnotationName" (optional.String) - name is nested field. + * @param "NestedAnnotationAmount" (optional.Int64) - + * @param "NestedAnnotationOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. + * @param "Int64OverrideType" (optional.Int64) - + * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition + * @param "OptionalStringValue" (optional.String) - + * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + +@return ExamplepbABitOfEverything +*/ + +type ABitOfEverythingServiceDoubleColonOpts struct { + SingleNestedName optional.String + SingleNestedAmount optional.Int64 + SingleNestedOk optional.String + DoubleValue optional.Float64 + Int64Value optional.String + Uint64Value optional.String + Int32Value optional.Int32 + Fixed64Value optional.String + Fixed32Value optional.Int64 + BoolValue optional.Bool + StringValue optional.String + BytesValue optional.String + Uint32Value optional.Int64 + EnumValue optional.String + PathEnumValue optional.String + NestedPathEnumValue optional.String + Sfixed32Value optional.Int32 + Sfixed64Value optional.String + Sint32Value optional.Int32 + Sint64Value optional.String + RepeatedStringValue optional.Interface + OneofString optional.String + NonConventionalNameValue optional.String + TimestampValue optional.Time + RepeatedEnumValue optional.Interface + RepeatedEnumAnnotation optional.Interface + EnumValueAnnotation optional.String + RepeatedStringAnnotation optional.Interface + NestedAnnotationName optional.String + NestedAnnotationAmount optional.Int64 + NestedAnnotationOk optional.String + Int64OverrideType optional.Int64 + OutputOnlyStringViaFieldBehaviorAnnotation optional.String + OptionalStringValue optional.String + ProductId optional.Interface +} + +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuidName}:custom:custom" + localVarPath = strings.Replace(localVarPath, "{"+"uuidName"+"}", fmt.Sprintf("%v", uuidName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + } + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) + if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + } + localVarQueryParams.Add("requiredStringViaFieldBehaviorAnnotation", parameterToString(requiredStringViaFieldBehaviorAnnotation, "")) + if localVarOptionals != nil && localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.IsSet() { + localVarQueryParams.Add("outputOnlyStringViaFieldBehaviorAnnotation", parameterToString(localVarOptionals.OutputOnlyStringViaFieldBehaviorAnnotation.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.OptionalStringValue.IsSet() { + localVarQueryParams.Add("optionalStringValue", parameterToString(localVarOptionals.OptionalStringValue.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { + localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbABitOfEverything + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 5fa630fbd13..5a8eb919e92 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1754,7 +1754,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, - 0xff, 0x31, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, @@ -1847,425 +1847,438 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, - 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, - 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, + 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, + 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, - 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, - 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, - 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, - 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, - 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, - 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, + 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, + 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, + 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, + 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, - 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, - 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, - 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, - 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, - 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, - 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, - 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, + 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, + 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, + 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, + 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, + 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, + 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, + 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, + 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, + 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, + 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, + 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, - 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, + 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, + 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, + 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, + 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, - 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, + 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, + 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, - 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, - 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, - 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, - 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, + 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, + 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, + 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, - 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, - 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, - 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, - 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, - 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xa1, 0x0c, - 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, - 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, - 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, - 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, - 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, - 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, - 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, - 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, + 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, + 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, - 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, - 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, - 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, - 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, - 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, - 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, - 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, - 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, - 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, - 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, + 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, + 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, + 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, + 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, + 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, - 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, - 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, + 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, + 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, + 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, + 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, + 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, + 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, + 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, + 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, + 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, + 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, + 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, + 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, + 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, + 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, + 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, + 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, + 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, + 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, + 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, + 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, + 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, + 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, + 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, + 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2348,62 +2361,64 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = [ 12, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest 23, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 9, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 23, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 5, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 25, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 19, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 19, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 8, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 7, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 4, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 26, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 27, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 19, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 4, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 56: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 19, // 57: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 4, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 10, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 10, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 4, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 19, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 5, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 19, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 19, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 4, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 28, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 19, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 19, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 6, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 19, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 19, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 4, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 86: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 19, // 87: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 58, // [58:88] is the sub-list for method output_type - 28, // [28:58] is the sub-list for method input_type + 4, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 9, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 23, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 4, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 5, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 25, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 19, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 19, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 8, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 7, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 26, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 27, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 19, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 57: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 19, // 58: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 4, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 10, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 10, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 4, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 19, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 5, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 24, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 4, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 19, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 19, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 19, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 4, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 4, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 28, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 19, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 19, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 19, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 19, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 4, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 88: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 19, // 89: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 59, // [59:90] is the sub-list for method output_type + 28, // [28:59] is the sub-list for method input_type 28, // [28:28] is the sub-list for extension type_name 28, // [28:28] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 5037fd5466b..d5b1ce40952 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -825,6 +825,76 @@ func local_request_ABitOfEverythingService_Custom_0(ctx context.Context, marshal } +var ( + filter_ABitOfEverythingService_DoubleColon_0 = &utilities.DoubleArray{Encoding: map[string]int{"uuid": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_ABitOfEverythingService_DoubleColon_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_DoubleColon_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DoubleColon(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_DoubleColon_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABitOfEverything + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uuid"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uuid") + } + + protoReq.Uuid, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_DoubleColon_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DoubleColon(ctx, &protoReq) + return msg, metadata, err + +} + func request_ABitOfEverythingService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ABitOfEverything var metadata runtime.ServerMetadata @@ -2775,6 +2845,31 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_DoubleColon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom:custom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_DoubleColon_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_DoubleColon_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3607,6 +3702,28 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_DoubleColon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon", runtime.WithHTTPPathPattern("/v1/example/a_bit_of_everything/{uuid}:custom:custom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_DoubleColon_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_DoubleColon_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("PUT", pattern_ABitOfEverythingService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4173,6 +4290,8 @@ var ( pattern_ABitOfEverythingService_Custom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "custom")) + pattern_ABitOfEverythingService_DoubleColon_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "custom:custom")) + pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) @@ -4237,6 +4356,8 @@ var ( forward_ABitOfEverythingService_Custom_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_DoubleColon_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_Update_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_UpdateV2_0 = runtime.ForwardResponseMessage diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2601982093f..2409db11901 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -544,6 +544,11 @@ service ABitOfEverythingService { post: "/v1/example/a_bit_of_everything/{uuid}:custom" }; } + rpc DoubleColon(ABitOfEverything) returns (ABitOfEverything) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/{uuid}:custom:custom" + }; + } rpc Update(ABitOfEverything) returns (google.protobuf.Empty) { option (google.api.http) = { put: "/v1/example/a_bit_of_everything/{uuid}" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 71064014738..d1cc78b468d 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -3308,6 +3308,374 @@ ] } }, + "/v1/example/a_bit_of_everything/{uuidName}:custom:custom": { + "post": { + "operationId": "ABitOfEverythingService_DoubleColon", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "uuidName", + "in": "path", + "required": true, + "type": "string", + "x-internal": true + }, + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "singleNested.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "singleNested.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "floatValue", + "description": "Float value field", + "in": "query", + "required": true, + "type": "number", + "format": "float", + "default": "0.2" + }, + { + "name": "doubleValue", + "in": "query", + "required": false, + "type": "number", + "format": "double" + }, + { + "name": "int64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "uint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "int32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "fixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "fixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "boolValue", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "stringValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bytesValue", + "in": "query", + "required": false, + "type": "string", + "format": "byte" + }, + { + "name": "uint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "enumValue", + "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "pathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ABC", + "DEF" + ], + "default": "ABC" + }, + { + "name": "nestedPathEnumValue", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "GHI", + "JKL" + ], + "default": "GHI" + }, + { + "name": "sfixed32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sfixed64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "sint32Value", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "sint64Value", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "repeatedStringValue", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oneofString", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nonConventionalNameValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "timestampValue", + "in": "query", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "repeatedEnumValue", + "description": "repeated enum value. it is comma-separated in query\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "repeatedEnumAnnotation", + "description": "Repeated numeric enum title\n\nRepeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "ZERO", + "ONE" + ] + }, + "collectionFormat": "multi" + }, + { + "name": "enumValueAnnotation", + "description": "Numeric enum title\n\nNumeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "ZERO", + "ONE" + ], + "default": "ZERO" + }, + { + "name": "repeatedStringAnnotation", + "description": "Repeated string title\n\nRepeated string description.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "nestedAnnotation.name", + "description": "name is nested field.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "nestedAnnotation.amount", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "nestedAnnotation.ok", + "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "FALSE", + "TRUE" + ], + "default": "FALSE" + }, + { + "name": "int64OverrideType", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "requiredStringViaFieldBehaviorAnnotation", + "description": "mark a field as required in Open API definition", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "outputOnlyStringViaFieldBehaviorAnnotation", + "description": "mark a field as readonly in Open API definition", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "optionalStringValue", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "productId", + "description": "Test openapiv2 generation of repeated fields\n\nOnly digits are allowed.", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "maxLength": 19, + "minLength": 1, + "pattern": "^[0-9]+$" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/a_bit_of_everything/{uuid}": { "get": { "operationId": "ABitOfEverythingService_Lookup", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index 42deaa95707..206b9e1e6ec 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -34,6 +34,7 @@ type ABitOfEverythingServiceClient interface { UpdateBook(ctx context.Context, in *UpdateBookRequest, opts ...grpc.CallOption) (*Book, error) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) Custom(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + DoubleColon(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*emptypb.Empty, error) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -127,6 +128,15 @@ func (c *aBitOfEverythingServiceClient) Custom(ctx context.Context, in *ABitOfEv return out, nil } +func (c *aBitOfEverythingServiceClient) DoubleColon(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { + out := new(ABitOfEverything) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", in, out, opts...) @@ -339,6 +349,7 @@ type ABitOfEverythingServiceServer interface { UpdateBook(context.Context, *UpdateBookRequest) (*Book, error) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) Custom(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + DoubleColon(context.Context, *ABitOfEverything) (*ABitOfEverything, error) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) UpdateV2(context.Context, *UpdateV2Request) (*emptypb.Empty, error) Delete(context.Context, *sub2.IdMessage) (*emptypb.Empty, error) @@ -392,6 +403,9 @@ func (UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2. func (UnimplementedABitOfEverythingServiceServer) Custom(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Custom not implemented") } +func (UnimplementedABitOfEverythingServiceServer) DoubleColon(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { + return nil, status.Errorf(codes.Unimplemented, "method DoubleColon not implemented") +} func (UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } @@ -578,6 +592,24 @@ func _ABitOfEverythingService_Custom_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_DoubleColon_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABitOfEverything) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).DoubleColon(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DoubleColon", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).DoubleColon(ctx, req.(*ABitOfEverything)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ABitOfEverything) if err := dec(in); err != nil { @@ -1005,6 +1037,10 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "Custom", Handler: _ABitOfEverythingService_Custom_Handler, }, + { + MethodName: "DoubleColon", + Handler: _ABitOfEverythingService_DoubleColon_Handler, + }, { MethodName: "Update", Handler: _ABitOfEverythingService_Update_Handler, diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 7563f689845..f86fee742ba 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -200,6 +200,19 @@ func (s *_ABitOfEverythingServer) Custom(ctx context.Context, msg *examples.ABit return msg, nil } +func (s *_ABitOfEverythingServer) DoubleColon(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { + s.m.Lock() + defer s.m.Unlock() + + glog.Info(msg) + if _, ok := s.v[msg.Uuid]; ok { + s.v[msg.Uuid] = msg + } else { + return nil, status.Errorf(codes.NotFound, "not found") + } + return msg, nil +} + func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { s.m.Lock() defer s.m.Unlock() diff --git a/internal/httprule/parse_test.go b/internal/httprule/parse_test.go index dd1dd7907a0..25cca5d8b45 100644 --- a/internal/httprule/parse_test.go +++ b/internal/httprule/parse_test.go @@ -1,6 +1,7 @@ package httprule import ( + "errors" "flag" "fmt" "reflect" @@ -294,6 +295,84 @@ func TestParseSegments(t *testing.T) { } } +func TestParse(t *testing.T) { + for _, spec := range []struct { + input string + wantFields []string + wantOpCodes []int + wantPool []string + wantVerb string + }{ + { + input: "/v1/{name}:bla:baa", + wantFields: []string{ + "name", + }, + wantPool: []string{"v1", "name"}, + wantVerb: "bla:baa", + }, + { + input: "/v1/{name}:", + wantFields: []string{ + "name", + }, + wantPool: []string{"v1", "name"}, + wantVerb: "", + }, + { + input: "/v1/{name=segment/wi:th}", + wantFields: []string{ + "name", + }, + wantPool: []string{"v1", "segment", "wi:th", "name"}, + wantVerb: "", + }, + } { + f, err := Parse(spec.input) + if err != nil { + t.Errorf("Parse(%q) failed with %v; want success", spec.input, err) + continue + } + tmpl := f.Compile() + if !reflect.DeepEqual(tmpl.Fields, spec.wantFields) { + t.Errorf("Parse(%q).Fields = %#v; want %#v", spec.input, tmpl.Fields, spec.wantFields) + } + if !reflect.DeepEqual(tmpl.Pool, spec.wantPool) { + t.Errorf("Parse(%q).Pool = %#v; want %#v", spec.input, tmpl.Pool, spec.wantPool) + } + if tmpl.Template != spec.input { + t.Errorf("Parse(%q).Template = %q; want %q", spec.input, tmpl.Template, spec.input) + } + if tmpl.Verb != spec.wantVerb { + t.Errorf("Parse(%q).Verb = %q; want %q", spec.input, tmpl.Verb, spec.wantVerb) + } + } +} + +func TestParseError(t *testing.T) { + for _, spec := range []struct { + input string + wantError error + }{ + { + input: "v1/{name}", + wantError: InvalidTemplateError{ + tmpl: "v1/{name}", + msg: "no leading /", + }, + }, + } { + _, err := Parse(spec.input) + if err == nil { + t.Errorf("Parse(%q) unexpectedly did not fail", spec.input) + continue + } + if !errors.Is(err, spec.wantError) { + t.Errorf("Error did not match expected error: got %v wanted %v", err, spec.wantError) + } + } +} + func TestParseSegmentsWithErrors(t *testing.T) { err := flag.Set("v", "3") if err != nil { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 6d67fc2376c..64d585f827d 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -864,7 +864,8 @@ func templateToParts(path string, reg *descriptor.Registry, fields []*descriptor depth := 0 buffer := "" jsonBuffer := "" - for _, char := range path { +pathLoop: + for i, char := range path { switch char { case '{': // Push on the stack @@ -898,11 +899,12 @@ func templateToParts(path string, reg *descriptor.Registry, fields []*descriptor buffer += string(char) jsonBuffer += string(char) case ':': - // Only the last part may be a verb (":" LITERAL) if depth == 0 { + // As soon as we find a ":" outside a variable, + // everything following is a verb parts = append(parts, buffer) - buffer = ":" - continue + buffer = path[i:] + break pathLoop } buffer += string(char) jsonBuffer += string(char) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 539406f0865..0e17676010a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -6967,6 +6967,447 @@ func TestRenderServicesWithColonInPath(t *testing.T) { } } +func TestRenderServicesWithDoubleColonInPath(t *testing.T) { + reqDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + resDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyResponse"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("MyMethod"), + InputType: proto.String("MyRequest"), + OutputType: proto.String("MyResponse"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("MyService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + reqMsg := &descriptor.Message{ + DescriptorProto: reqDesc, + } + resMsg := &descriptor.Message{ + DescriptorProto: resDesc, + } + reqField := &descriptor.Field{ + Message: reqMsg, + FieldDescriptorProto: reqMsg.GetField()[0], + } + resField := &descriptor.Field{ + Message: resMsg, + FieldDescriptorProto: resMsg.GetField()[0], + } + reqField.JsonName = proto.String("field") + resField.JsonName = proto.String("field") + reqMsg.Fields = []*descriptor.Field{reqField} + resMsg.Fields = []*descriptor.Field{resField} + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("example"), + Name: proto.String(",my_service.proto"), + MessageType: []*descriptorpb.DescriptorProto{reqDesc, resDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{reqMsg, resMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: reqMsg, + ResponseType: resMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/my/{field}:foo:bar", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "field", + }, + }), + Target: reqField, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + paths := GetPaths(result) + if got, want := len(paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + if got, want := paths[0], "/my/{field}:foo:bar"; got != want { + t.Fatalf("Wrong results path, got %s want %s", got, want) + } + + var operation = *result.Paths["/my/{field}:foo:bar"].Post + if got, want := len(operation.Parameters), 2; got != want { + t.Fatalf("Parameters length differed, got %d want %d", got, want) + } + + if got, want := operation.Parameters[0].Name, "field"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].In, "path"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].Type, "string"; got != want { + t.Fatalf("Wrong parameter type, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].Name, "body"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].In, "body"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } +} + +func TestRenderServicesWithColonLastInPath(t *testing.T) { + reqDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + resDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyResponse"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("MyMethod"), + InputType: proto.String("MyRequest"), + OutputType: proto.String("MyResponse"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("MyService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + reqMsg := &descriptor.Message{ + DescriptorProto: reqDesc, + } + resMsg := &descriptor.Message{ + DescriptorProto: resDesc, + } + reqField := &descriptor.Field{ + Message: reqMsg, + FieldDescriptorProto: reqMsg.GetField()[0], + } + resField := &descriptor.Field{ + Message: resMsg, + FieldDescriptorProto: resMsg.GetField()[0], + } + reqField.JsonName = proto.String("field") + resField.JsonName = proto.String("field") + reqMsg.Fields = []*descriptor.Field{reqField} + resMsg.Fields = []*descriptor.Field{resField} + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("example"), + Name: proto.String(",my_service.proto"), + MessageType: []*descriptorpb.DescriptorProto{reqDesc, resDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{reqMsg, resMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: reqMsg, + ResponseType: resMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/my/{field}:", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "field", + }, + }), + Target: reqField, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + paths := GetPaths(result) + if got, want := len(paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + if got, want := paths[0], "/my/{field}:"; got != want { + t.Fatalf("Wrong results path, got %s want %s", got, want) + } + + var operation = *result.Paths["/my/{field}:"].Post + if got, want := len(operation.Parameters), 2; got != want { + t.Fatalf("Parameters length differed, got %d want %d", got, want) + } + + if got, want := operation.Parameters[0].Name, "field"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].In, "path"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].Type, "string"; got != want { + t.Fatalf("Wrong parameter type, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].Name, "body"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].In, "body"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } +} + +func TestRenderServicesWithColonInSegment(t *testing.T) { + reqDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyRequest"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + resDesc := &descriptorpb.DescriptorProto{ + Name: proto.String("MyResponse"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("field"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + }, + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("MyMethod"), + InputType: proto.String("MyRequest"), + OutputType: proto.String("MyResponse"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("MyService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + reqMsg := &descriptor.Message{ + DescriptorProto: reqDesc, + } + resMsg := &descriptor.Message{ + DescriptorProto: resDesc, + } + reqField := &descriptor.Field{ + Message: reqMsg, + FieldDescriptorProto: reqMsg.GetField()[0], + } + resField := &descriptor.Field{ + Message: resMsg, + FieldDescriptorProto: resMsg.GetField()[0], + } + reqField.JsonName = proto.String("field") + resField.JsonName = proto.String("field") + reqMsg.Fields = []*descriptor.Field{reqField} + resMsg.Fields = []*descriptor.Field{resField} + + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Package: proto.String("example"), + Name: proto.String(",my_service.proto"), + MessageType: []*descriptorpb.DescriptorProto{reqDesc, resDesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{reqMsg, resMsg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: reqMsg, + ResponseType: resMsg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/my/{field=segment/wi:th}", + }, + PathParams: []descriptor.Parameter{ + { + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{ + { + Name: "field", + }, + }), + Target: reqField, + }, + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + err := reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) + if err != nil { + t.Fatalf("failed to reg.Load(): %v", err) + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + paths := GetPaths(result) + if got, want := len(paths), 1; got != want { + t.Fatalf("Results path length differed, got %d want %d", got, want) + } + + if got, want := paths[0], "/my/{field}"; got != want { + t.Fatalf("Wrong results path, got %s want %s", got, want) + } + + var operation = *result.Paths["/my/{field}"].Post + if got, want := len(operation.Parameters), 2; got != want { + t.Fatalf("Parameters length differed, got %d want %d", got, want) + } + + if got, want := operation.Parameters[0].Name, "field"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].In, "path"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } + + if got, want := operation.Parameters[0].Type, "string"; got != want { + t.Fatalf("Wrong parameter type, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].Name, "body"; got != want { + t.Fatalf("Wrong parameter name, got %s want %s", got, want) + } + + if got, want := operation.Parameters[1].In, "body"; got != want { + t.Fatalf("Wrong parameter location, got %s want %s", got, want) + } +} + func GetPaths(req *openapiSwaggerObject) []string { paths := make([]string, len(req.Paths)) i := 0 From 0ad3f90a4b996030fe24104d08a93c4a37cb328d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Aug 2022 21:40:57 +0000 Subject: [PATCH 1376/1518] fix(deps): update google.golang.org/genproto digest to 8f55acc --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b45d6f50dce..e259ec53557 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 + google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index ed5171e53b4..0c7f1ef71a0 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 h1:QntLWYqZeuBtJkth3m/6DLznnI0AHJr+AgJXvVh/izw= -google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f h1:ywoA0TLvF/4n7P2lr/+bNRueYxWYUJZbRwV3hyYt8gY= +google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1a87d4d28a0..317b51068db 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:QntLWYqZeuBtJkth3m/6DLznnI0AHJr+AgJXvVh/izw=", - version = "v0.0.0-20220802133213-ce4fa296bf78", + sum = "h1:ywoA0TLvF/4n7P2lr/+bNRueYxWYUJZbRwV3hyYt8gY=", + version = "v0.0.0-20220803205849-8f55acc8769f", ) go_repository( name = "org_golang_google_grpc", From 9036b2bbf47ee6ad81e505a220fe4e6ae8be872e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Aug 2022 14:55:07 +0000 Subject: [PATCH 1377/1518] fix(deps): update google.golang.org/genproto digest to 4e6b2df --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e259ec53557..6c701c0f865 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f + google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 0c7f1ef71a0..a6ca97b1314 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f h1:ywoA0TLvF/4n7P2lr/+bNRueYxWYUJZbRwV3hyYt8gY= -google.golang.org/genproto v0.0.0-20220803205849-8f55acc8769f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612 h1:NX3L5YesD5qgxxrPHdKqHH38Ao0AG6poRXG+JljPsGU= +google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 317b51068db..556dd062667 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ywoA0TLvF/4n7P2lr/+bNRueYxWYUJZbRwV3hyYt8gY=", - version = "v0.0.0-20220803205849-8f55acc8769f", + sum = "h1:NX3L5YesD5qgxxrPHdKqHH38Ao0AG6poRXG+JljPsGU=", + version = "v0.0.0-20220804142021-4e6b2dfa6612", ) go_repository( name = "org_golang_google_grpc", From 566f811a1c96dd0f8dd14fec1e4ffe5ce2a04a1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 19:08:26 +0200 Subject: [PATCH 1378/1518] fix(deps): update google.golang.org/genproto digest to 01dd621 (#2836) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 6c701c0f865..c2c5ae57ecd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612 + google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index a6ca97b1314..71f1092d458 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612 h1:NX3L5YesD5qgxxrPHdKqHH38Ao0AG6poRXG+JljPsGU= -google.golang.org/genproto v0.0.0-20220804142021-4e6b2dfa6612/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno= +google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 556dd062667..a71b35165bd 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:NX3L5YesD5qgxxrPHdKqHH38Ao0AG6poRXG+JljPsGU=", - version = "v0.0.0-20220804142021-4e6b2dfa6612", + sum = "h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno=", + version = "v0.0.0-20220805133916-01dd62135a58", ) go_repository( name = "org_golang_google_grpc", From 820b9262d92dd56851b7759ec55a4469a5946828 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Aug 2022 04:32:38 -0400 Subject: [PATCH 1379/1518] chore(deps): update module go to 1.17 (#2831) * chore(deps): update module go to 1.19 * Move to only supporting 1.17+ Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Johan Brandhorst-Satzkorn --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca6eace8a76..6807a404348 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ jobs: build: strategy: matrix: - go-version: [1.16.x, 1.17.x, 1.18.x] + go-version: [1.17.x, 1.18.x, 1.19.x] os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: From 469d6881fca31c4aa93d5678e5df70fa6df7554b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Sat, 6 Aug 2022 04:41:40 -0400 Subject: [PATCH 1380/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6807a404348..b16a19dbcb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.18 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.1 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.2 proto_lint: runs-on: ubuntu-latest steps: From 01574870f1bb83013263f43d4ef7ae13857e1ce2 Mon Sep 17 00:00:00 2001 From: Makdon Date: Mon, 8 Aug 2022 13:48:16 +0800 Subject: [PATCH 1381/1518] fix: unnecessary -e arg for echo command in dockerfile (#2840) --- .github/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 2d32212a95a..f9020ed56cf 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -37,7 +37,7 @@ RUN apt-get update && \ ENV SWAGGER_CODEGEN_VERSION=2.4.8 RUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ -O /usr/local/bin/swagger-codegen-cli.jar && \ - echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ + echo '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' > /usr/local/bin/swagger-codegen && \ chmod +x /usr/local/bin/swagger-codegen # Install Bazelisk as bazel to manage Bazel From e023eb65ad5f051e385f8ab3db9bae5c38a921bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:20:44 +0000 Subject: [PATCH 1382/1518] fix(deps): update google.golang.org/genproto digest to bf34ca4 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c2c5ae57ecd..7bdb3bd03e0 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 + google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 71f1092d458..7419e3a65f4 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno= -google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a h1:FX/Y0fehmt5BT/GcKqm2u8l/Y1d0EQwAkI0vbXytJ60= +google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a71b35165bd..f86caf64f3c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno=", - version = "v0.0.0-20220805133916-01dd62135a58", + sum = "h1:FX/Y0fehmt5BT/GcKqm2u8l/Y1d0EQwAkI0vbXytJ60=", + version = "v0.0.0-20220808145710-bf34ca4dd83a", ) go_repository( name = "org_golang_google_grpc", From 508c1170a993af669191a7786324f916cc8643cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 20:31:11 +0000 Subject: [PATCH 1383/1518] fix(deps): update golang.org/x/oauth2 digest to 8227340 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7bdb3bd03e0..7471565d515 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c + golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a google.golang.org/grpc v1.48.0 diff --git a/go.sum b/go.sum index 7419e3a65f4..95fcb93220a 100644 --- a/go.sum +++ b/go.sum @@ -311,8 +311,8 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY= -golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 h1:dtndE8FcEta75/4kHF3AbpuWzV6f1LjnLrM4pe2SZrw= +golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index f86caf64f3c..aff8c28ae45 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1145,8 +1145,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:q3gFqPqH7NVofKo3c3yETAP//pPI+G5mvB7qqj1Y5kY=", - version = "v0.0.0-20220722155238-128564f6959c", + sum = "h1:dtndE8FcEta75/4kHF3AbpuWzV6f1LjnLrM4pe2SZrw=", + version = "v0.0.0-20220808172628-8227340efae7", ) go_repository( name = "org_golang_x_sync", From 3559535ffb26f2a733bee5bb72884874947a8d38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 23:38:50 +0000 Subject: [PATCH 1384/1518] fix(deps): update google.golang.org/genproto digest to fd01256 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 7471565d515..5776977a06d 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a + google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 95fcb93220a..f142cd166f7 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a h1:FX/Y0fehmt5BT/GcKqm2u8l/Y1d0EQwAkI0vbXytJ60= -google.golang.org/genproto v0.0.0-20220808145710-bf34ca4dd83a/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 h1:7PEE9xCtufpGJzrqweakEEnTh7YFELmnKm/ee+5jmfQ= +google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index aff8c28ae45..8f9803d4ea9 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:FX/Y0fehmt5BT/GcKqm2u8l/Y1d0EQwAkI0vbXytJ60=", - version = "v0.0.0-20220808145710-bf34ca4dd83a", + sum = "h1:7PEE9xCtufpGJzrqweakEEnTh7YFELmnKm/ee+5jmfQ=", + version = "v0.0.0-20220808204814-fd01256a5276", ) go_repository( name = "org_golang_google_grpc", From 865ae611d174dfcc7c443429549caa6982daf22b Mon Sep 17 00:00:00 2001 From: Juan Brandao Date: Tue, 9 Aug 2022 08:58:39 -0500 Subject: [PATCH 1385/1518] Fix identifiers generated from snake-cased enums not matching pb.go definitions (#2826) * Add snake-cased enums to reproduce issue * Add snake-cased enums in an imported package as well * Add CamelIdentifier wrapping function to avoid capitalizing package * Register and apply CamelIdentifier into templates with enums * Add service suffix and remove extra line * Make variable a constant * Add generated files after rebase including ours and theirs * Allow to set lint ignore rules with comments * Ignore lint rules on types that must work without following lint * Format proto to expected leading spaces --- buf.yaml | 1 + examples/internal/clients/abe/BUILD.bazel | 5 + .../internal/clients/abe/api/swagger.yaml | 89 + .../clients/abe/api_snake_enum_service.go | 187 ++ examples/internal/clients/abe/client.go | 3 + .../model_examplepb_snake_enum_response.go | 14 + .../abe/model_examplepbsnake_case_0_enum.go | 19 + .../abe/model_examplepbsnake_case_enum.go | 19 + .../model_pathenumsnake_case_for_import.go | 19 + .../proto/examplepb/a_bit_of_everything.pb.go | 1505 ++++++++++------- .../examplepb/a_bit_of_everything.pb.gw.go | 211 +++ .../proto/examplepb/a_bit_of_everything.proto | 36 + .../a_bit_of_everything.swagger.json | 113 ++ .../examplepb/a_bit_of_everything_grpc.pb.go | 84 + .../internal/proto/pathenum/path_enum.pb.go | 87 +- .../internal/proto/pathenum/path_enum.proto | 10 + internal/casing/BUILD.bazel | 8 +- internal/casing/camel.go | 17 + internal/casing/camel_test.go | 46 + .../internal/gengateway/template.go | 20 +- 20 files changed, 1853 insertions(+), 640 deletions(-) create mode 100644 examples/internal/clients/abe/api_snake_enum_service.go create mode 100644 examples/internal/clients/abe/model_examplepb_snake_enum_response.go create mode 100644 examples/internal/clients/abe/model_examplepbsnake_case_0_enum.go create mode 100644 examples/internal/clients/abe/model_examplepbsnake_case_enum.go create mode 100644 examples/internal/clients/abe/model_pathenumsnake_case_for_import.go create mode 100644 internal/casing/camel_test.go diff --git a/buf.yaml b/buf.yaml index a49edcf2446..472cb83f12d 100644 --- a/buf.yaml +++ b/buf.yaml @@ -169,6 +169,7 @@ lint: - examples/internal/proto/examplepb/flow_combination.proto - examples/internal/proto/examplepb/openapi_merge_a.proto - examples/internal/proto/examplepb/openapi_merge_b.proto + allow_comment_ignores: true # Note: the build configuration goes last in this # files so we can append excludes at push time. build: diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index b800b96dec9..15be724d6d7 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -8,6 +8,7 @@ go_library( "api_a_bit_of_everything_service.go", "api_camel_case_service_name.go", "api_echo_rpc.go", + "api_snake_enum_service.go", "client.go", "configuration.go", "enum_helper.go", @@ -30,9 +31,13 @@ go_library( "model_examplepb_error_object.go", "model_examplepb_error_response.go", "model_examplepb_numeric_enum.go", + "model_examplepb_snake_enum_response.go", + "model_examplepbsnake_case_0_enum.go", + "model_examplepbsnake_case_enum.go", "model_message_path_enum_nested_path_enum.go", "model_nested_deep_enum.go", "model_pathenum_path_enum.go", + "model_pathenumsnake_case_for_import.go", "model_protobuf_any.go", "model_rpc_status.go", "model_sub_string_message.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 200e5660eb3..e563f161d85 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -20,6 +20,7 @@ tags: url: "https://github.com/grpc-ecosystem/grpc-gateway" - name: "camelCaseServiceName" - name: "AnotherServiceWithNoBindings" +- name: "SnakeEnumService" schemes: - "http" - "https" @@ -3474,6 +3475,62 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/snake/{who}/{what}/{where}: + get: + tags: + - "SnakeEnumService" + operationId: "SnakeEnumService_SnakeEnum" + parameters: + - name: "who" + in: "path" + required: true + type: "string" + enum: + - "value_e" + - "value_f" + x-exportParamName: "Who" + - name: "what" + in: "path" + required: true + type: "string" + enum: + - "value_c" + - "value_d" + x-exportParamName: "What" + - name: "where" + in: "path" + required: true + type: "string" + enum: + - "value_x" + - "value_y" + x-exportParamName: "Where" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbSnakeEnumResponse" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/{book.name}: patch: tags: @@ -4513,12 +4570,44 @@ definitions: - "ZERO" - "ONE" default: "ZERO" + examplepbSnakeEnumResponse: + type: "object" + examplepbsnake_case_0_enum: + type: "string" + title: "Ignoring lint warnings as this enum type exist to validate proper functionality\n\ + for projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + description: "- value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_f:\ + \ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE" + enum: + - "value_e" + - "value_f" + default: "value_e" + examplepbsnake_case_enum: + type: "string" + title: "Ignoring lint warnings as this enum type exist to validate proper functionality\n\ + for projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + description: "- value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_d:\ + \ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE" + enum: + - "value_c" + - "value_d" + default: "value_c" pathenumPathEnum: type: "string" enum: - "ABC" - "DEF" default: "ABC" + pathenumsnake_case_for_import: + type: "string" + title: "Ignoring lint warnings as this enum type exist to validate proper functionality\n\ + for projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + description: "- value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_y:\ + \ buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE" + enum: + - "value_x" + - "value_y" + default: "value_x" protobufAny: type: "object" properties: diff --git a/examples/internal/clients/abe/api_snake_enum_service.go b/examples/internal/clients/abe/api_snake_enum_service.go new file mode 100644 index 00000000000..0c28d4ab4f4 --- /dev/null +++ b/examples/internal/clients/abe/api_snake_enum_service.go @@ -0,0 +1,187 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "context" + "io/ioutil" + "net/http" + "net/url" + "strings" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type SnakeEnumServiceApiService service + +/* +SnakeEnumServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param who + * @param what + * @param where + +@return ExamplepbSnakeEnumResponse +*/ +func (a *SnakeEnumServiceApiService) SnakeEnumServiceSnakeEnum(ctx context.Context, who string, what string, where string) (ExamplepbSnakeEnumResponse, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue ExamplepbSnakeEnumResponse + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/snake/{who}/{what}/{where}" + localVarPath = strings.Replace(localVarPath, "{"+"who"+"}", fmt.Sprintf("%v", who), -1) + localVarPath = strings.Replace(localVarPath, "{"+"what"+"}", fmt.Sprintf("%v", what), -1) + localVarPath = strings.Replace(localVarPath, "{"+"where"+"}", fmt.Sprintf("%v", where), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v ExamplepbSnakeEnumResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} diff --git a/examples/internal/clients/abe/client.go b/examples/internal/clients/abe/client.go index 1bf9497bd2d..8552ff007bc 100644 --- a/examples/internal/clients/abe/client.go +++ b/examples/internal/clients/abe/client.go @@ -51,6 +51,8 @@ type APIClient struct { CamelCaseServiceNameApi *CamelCaseServiceNameApiService EchoRpcApi *EchoRpcApiService + + SnakeEnumServiceApi *SnakeEnumServiceApiService } type service struct { @@ -72,6 +74,7 @@ func NewAPIClient(cfg *Configuration) *APIClient { c.ABitOfEverythingServiceApi = (*ABitOfEverythingServiceApiService)(&c.common) c.CamelCaseServiceNameApi = (*CamelCaseServiceNameApiService)(&c.common) c.EchoRpcApi = (*EchoRpcApiService)(&c.common) + c.SnakeEnumServiceApi = (*SnakeEnumServiceApiService)(&c.common) return c } diff --git a/examples/internal/clients/abe/model_examplepb_snake_enum_response.go b/examples/internal/clients/abe/model_examplepb_snake_enum_response.go new file mode 100644 index 00000000000..eff692b9826 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_snake_enum_response.go @@ -0,0 +1,14 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbSnakeEnumResponse struct { +} diff --git a/examples/internal/clients/abe/model_examplepbsnake_case_0_enum.go b/examples/internal/clients/abe/model_examplepbsnake_case_0_enum.go new file mode 100644 index 00000000000..50f149d8268 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepbsnake_case_0_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// ExamplepbsnakeCase0Enum : - value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE - value_f: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE +type ExamplepbsnakeCase0Enum string + +// List of examplepbsnake_case_0_enum +const ( + E_ExamplepbsnakeCase0Enum ExamplepbsnakeCase0Enum = "value_e" + F_ExamplepbsnakeCase0Enum ExamplepbsnakeCase0Enum = "value_f" +) diff --git a/examples/internal/clients/abe/model_examplepbsnake_case_enum.go b/examples/internal/clients/abe/model_examplepbsnake_case_enum.go new file mode 100644 index 00000000000..003b2f22f26 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepbsnake_case_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// ExamplepbsnakeCaseEnum : - value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE - value_d: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE +type ExamplepbsnakeCaseEnum string + +// List of examplepbsnake_case_enum +const ( + C_ExamplepbsnakeCaseEnum ExamplepbsnakeCaseEnum = "value_c" + D_ExamplepbsnakeCaseEnum ExamplepbsnakeCaseEnum = "value_d" +) diff --git a/examples/internal/clients/abe/model_pathenumsnake_case_for_import.go b/examples/internal/clients/abe/model_pathenumsnake_case_for_import.go new file mode 100644 index 00000000000..f6c7ec5100d --- /dev/null +++ b/examples/internal/clients/abe/model_pathenumsnake_case_for_import.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// PathenumsnakeCaseForImport : - value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE - value_y: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE +type PathenumsnakeCaseForImport string + +// List of pathenumsnake_case_for_import +const ( + X_PathenumsnakeCaseForImport PathenumsnakeCaseForImport = "value_x" + Y_PathenumsnakeCaseForImport PathenumsnakeCaseForImport = "value_y" +) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 5a8eb919e92..310ebbb2ccc 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -80,6 +80,108 @@ func (NumericEnum) EnumDescriptor() ([]byte, []int) { return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0} } +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +type SnakeCaseEnum int32 + +const ( + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCaseEnum_value_c SnakeCaseEnum = 0 + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCaseEnum_value_d SnakeCaseEnum = 1 +) + +// Enum value maps for SnakeCaseEnum. +var ( + SnakeCaseEnum_name = map[int32]string{ + 0: "value_c", + 1: "value_d", + } + SnakeCaseEnum_value = map[string]int32{ + "value_c": 0, + "value_d": 1, + } +) + +func (x SnakeCaseEnum) Enum() *SnakeCaseEnum { + p := new(SnakeCaseEnum) + *p = x + return p +} + +func (x SnakeCaseEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SnakeCaseEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1].Descriptor() +} + +func (SnakeCaseEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1] +} + +func (x SnakeCaseEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SnakeCaseEnum.Descriptor instead. +func (SnakeCaseEnum) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1} +} + +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +type SnakeCase_0Enum int32 + +const ( + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCase_0Enum_value_e SnakeCase_0Enum = 0 + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCase_0Enum_value_f SnakeCase_0Enum = 1 +) + +// Enum value maps for SnakeCase_0Enum. +var ( + SnakeCase_0Enum_name = map[int32]string{ + 0: "value_e", + 1: "value_f", + } + SnakeCase_0Enum_value = map[string]int32{ + "value_e": 0, + "value_f": 1, + } +) + +func (x SnakeCase_0Enum) Enum() *SnakeCase_0Enum { + p := new(SnakeCase_0Enum) + *p = x + return p +} + +func (x SnakeCase_0Enum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SnakeCase_0Enum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[2].Descriptor() +} + +func (SnakeCase_0Enum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[2] +} + +func (x SnakeCase_0Enum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SnakeCase_0Enum.Descriptor instead. +func (SnakeCase_0Enum) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2} +} + // DeepEnum is one or zero. type ABitOfEverything_Nested_DeepEnum int32 @@ -113,11 +215,11 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { } func (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.EnumDescriptor { - return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1].Descriptor() + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[3].Descriptor() } func (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType { - return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1] + return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[3] } func (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber { @@ -1232,6 +1334,107 @@ func (x *UpdateBookRequest) GetAllowMissing() bool { return false } +type SnakeEnumRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + What SnakeCaseEnum `protobuf:"varint,1,opt,name=what,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.SnakeCaseEnum" json:"what,omitempty"` + Who SnakeCase_0Enum `protobuf:"varint,2,opt,name=who,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.SnakeCase_0Enum" json:"who,omitempty"` + Where pathenum.SnakeCaseForImport `protobuf:"varint,3,opt,name=where,proto3,enum=grpc.gateway.examples.internal.pathenum.SnakeCaseForImport" json:"where,omitempty"` +} + +func (x *SnakeEnumRequest) Reset() { + *x = SnakeEnumRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SnakeEnumRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SnakeEnumRequest) ProtoMessage() {} + +func (x *SnakeEnumRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SnakeEnumRequest.ProtoReflect.Descriptor instead. +func (*SnakeEnumRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{11} +} + +func (x *SnakeEnumRequest) GetWhat() SnakeCaseEnum { + if x != nil { + return x.What + } + return SnakeCaseEnum_value_c +} + +func (x *SnakeEnumRequest) GetWho() SnakeCase_0Enum { + if x != nil { + return x.Who + } + return SnakeCase_0Enum_value_e +} + +func (x *SnakeEnumRequest) GetWhere() pathenum.SnakeCaseForImport { + if x != nil { + return x.Where + } + return pathenum.SnakeCaseForImport(0) +} + +type SnakeEnumResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SnakeEnumResponse) Reset() { + *x = SnakeEnumResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SnakeEnumResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SnakeEnumResponse) ProtoMessage() {} + +func (x *SnakeEnumResponse) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SnakeEnumResponse.ProtoReflect.Descriptor instead. +func (*SnakeEnumResponse) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{12} +} + // Nested is nested type. type ABitOfEverything_Nested struct { state protoimpl.MessageState @@ -1248,7 +1451,7 @@ type ABitOfEverything_Nested struct { func (x *ABitOfEverything_Nested) Reset() { *x = ABitOfEverything_Nested{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1261,7 +1464,7 @@ func (x *ABitOfEverything_Nested) String() string { func (*ABitOfEverything_Nested) ProtoMessage() {} func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1751,297 +1954,273 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, - 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, - 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, - 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, - 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, + 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, + 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, - 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, - 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, - 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, - 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, + 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, + 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, + 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, + 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, + 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, + 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, + 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, + 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, - 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, - 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, - 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, - 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, - 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, + 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, + 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, + 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, - 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, - 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, - 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, - 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, - 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, - 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, - 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, + 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, - 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, - 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, - 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, - 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, - 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, - 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, - 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, - 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, - 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, - 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, - 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, - 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, + 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, + 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, + 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, + 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, + 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, @@ -2049,236 +2228,298 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, - 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, - 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, + 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, - 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, - 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, + 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, + 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, + 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, + 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, + 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, + 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, + 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, - 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, - 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, - 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, - 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, - 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, + 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, - 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, - 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, - 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, - 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, - 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, - 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, - 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, - 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, - 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, - 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, - 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, - 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, - 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, - 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, - 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, - 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, - 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, - 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, - 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, - 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, - 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, - 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, - 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, - 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, - 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, - 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, - 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, - 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, - 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, - 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, - 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, - 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, + 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, + 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, + 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, + 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, + 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, + 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, + 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, + 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, + 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, + 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, + 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, + 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, + 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, + 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, + 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, + 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, + 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, + 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, + 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, + 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, + 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, + 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, + 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, + 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, + 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, + 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, + 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2293,135 +2534,145 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZI return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData } -var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ (NumericEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum - (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - (*ErrorResponse)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse - (*ErrorObject)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.ErrorObject - (*ABitOfEverything)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - (*ABitOfEverythingRepeated)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - (*CheckStatusResponse)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - (*Body)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.Body - (*MessageWithBody)(nil), // 8: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - (*UpdateV2Request)(nil), // 9: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - (*Book)(nil), // 10: grpc.gateway.examples.internal.proto.examplepb.Book - (*CreateBookRequest)(nil), // 11: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - (*UpdateBookRequest)(nil), // 12: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest - (*ABitOfEverything_Nested)(nil), // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - nil, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - nil, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - (pathenum.PathEnum)(0), // 17: grpc.gateway.examples.internal.pathenum.PathEnum - (pathenum.MessagePathEnum_NestedPathEnum)(0), // 18: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*emptypb.Empty)(nil), // 19: google.protobuf.Empty - (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*status.Status)(nil), // 21: google.rpc.Status - (*fieldmaskpb.FieldMask)(nil), // 22: google.protobuf.FieldMask - (*sub2.IdMessage)(nil), // 23: grpc.gateway.examples.internal.proto.sub2.IdMessage - (*sub.StringMessage)(nil), // 24: grpc.gateway.examples.internal.proto.sub.StringMessage - (*durationpb.Duration)(nil), // 25: google.protobuf.Duration - (*pathenum.MessageWithPathEnum)(nil), // 26: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - (*pathenum.MessageWithNestedPathEnum)(nil), // 27: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*wrapperspb.StringValue)(nil), // 28: google.protobuf.StringValue + (SnakeCaseEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.snake_case_enum + (SnakeCase_0Enum)(0), // 2: grpc.gateway.examples.internal.proto.examplepb.snake_case_0_enum + (ABitOfEverything_Nested_DeepEnum)(0), // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + (*ErrorResponse)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse + (*ErrorObject)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.ErrorObject + (*ABitOfEverything)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + (*ABitOfEverythingRepeated)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + (*CheckStatusResponse)(nil), // 8: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + (*Body)(nil), // 9: grpc.gateway.examples.internal.proto.examplepb.Body + (*MessageWithBody)(nil), // 10: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + (*UpdateV2Request)(nil), // 11: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + (*Book)(nil), // 12: grpc.gateway.examples.internal.proto.examplepb.Book + (*CreateBookRequest)(nil), // 13: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + (*UpdateBookRequest)(nil), // 14: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest + (*SnakeEnumRequest)(nil), // 15: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest + (*SnakeEnumResponse)(nil), // 16: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse + (*ABitOfEverything_Nested)(nil), // 17: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + nil, // 18: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + nil, // 19: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 20: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + (pathenum.PathEnum)(0), // 21: grpc.gateway.examples.internal.pathenum.PathEnum + (pathenum.MessagePathEnum_NestedPathEnum)(0), // 22: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*status.Status)(nil), // 25: google.rpc.Status + (*fieldmaskpb.FieldMask)(nil), // 26: google.protobuf.FieldMask + (pathenum.SnakeCaseForImport)(0), // 27: grpc.gateway.examples.internal.pathenum.snake_case_for_import + (*sub2.IdMessage)(nil), // 28: grpc.gateway.examples.internal.proto.sub2.IdMessage + (*sub.StringMessage)(nil), // 29: grpc.gateway.examples.internal.proto.sub.StringMessage + (*durationpb.Duration)(nil), // 30: google.protobuf.Duration + (*pathenum.MessageWithPathEnum)(nil), // 31: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + (*pathenum.MessageWithNestedPathEnum)(nil), // 32: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + (*wrapperspb.StringValue)(nil), // 33: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ - 3, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject - 13, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 13, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 5, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject + 17, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 17, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 17, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 18, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - 19, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 14, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - 15, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - 16, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - 20, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 21, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 22, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 23, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 18, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + 19, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + 20, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + 24, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 13, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 13, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 17, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 17, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 21, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status - 7, // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body - 4, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 22, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask - 20, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp - 10, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book - 10, // 23: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book - 22, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask - 1, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 13, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 4, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 11, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - 12, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest - 23, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 9, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 23, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 4, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 5, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 25, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 19, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 19, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 8, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 7, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 4, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 26, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 27, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 19, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 4, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 57: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 19, // 58: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 4, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 10, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 10, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 4, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 19, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 19, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 19, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 5, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 24, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 4, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 19, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 19, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 19, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 19, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 4, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 4, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 28, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 19, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 19, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 19, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 19, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 4, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 19, // 88: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 19, // 89: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 59, // [59:90] is the sub-list for method output_type - 28, // [28:59] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 25, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status + 9, // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body + 6, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 24, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp + 12, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book + 12, // 23: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book + 26, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask + 1, // 25: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.what:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_enum + 2, // 26: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.who:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_0_enum + 27, // 27: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.where:type_name -> grpc.gateway.examples.internal.pathenum.snake_case_for_import + 3, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 17, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 6, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 13, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + 14, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest + 28, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 6, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 11, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 28, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 6, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 7, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 29, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 30, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 23, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 23, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 10, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 9, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 6, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 31, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 32, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 23, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 6, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 60: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 23, // 61: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 15, // 62: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest + 6, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 12, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 12, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 6, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 23, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 23, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 23, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 7, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 29, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 23, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 23, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 23, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 23, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 6, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 33, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 23, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 23, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 8, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 23, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 23, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 6, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 92: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 23, // 93: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 16, // 94: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse + 63, // [63:95] is the sub-list for method output_type + 31, // [31:63] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() } @@ -2563,6 +2814,30 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SnakeEnumRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SnakeEnumResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ABitOfEverything_Nested); i { case 0: return &v.state @@ -2584,10 +2859,10 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc, - NumEnums: 2, - NumMessages: 15, + NumEnums: 4, + NumMessages: 17, NumExtensions: 0, - NumServices: 3, + NumServices: 4, }, GoTypes: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes, DependencyIndexes: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index d5b1ce40952..83847db7a30 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2689,6 +2689,112 @@ func local_request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler r } +func request_SnakeEnumService_SnakeEnum_0(ctx context.Context, marshaler runtime.Marshaler, client SnakeEnumServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SnakeEnumRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["who"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "who") + } + + e, err = runtime.Enum(val, SnakeCase_0Enum_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "who", err) + } + + protoReq.Who = SnakeCase_0Enum(e) + + val, ok = pathParams["what"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "what") + } + + e, err = runtime.Enum(val, SnakeCaseEnum_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "what", err) + } + + protoReq.What = SnakeCaseEnum(e) + + val, ok = pathParams["where"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "where") + } + + e, err = runtime.Enum(val, pathenum.SnakeCaseForImport_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "where", err) + } + + protoReq.Where = pathenum.SnakeCaseForImport(e) + + msg, err := client.SnakeEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SnakeEnumService_SnakeEnum_0(ctx context.Context, marshaler runtime.Marshaler, server SnakeEnumServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SnakeEnumRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["who"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "who") + } + + e, err = runtime.Enum(val, SnakeCase_0Enum_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "who", err) + } + + protoReq.Who = SnakeCase_0Enum(e) + + val, ok = pathParams["what"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "what") + } + + e, err = runtime.Enum(val, SnakeCaseEnum_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "what", err) + } + + protoReq.What = SnakeCaseEnum(e) + + val, ok = pathParams["where"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "where") + } + + e, err = runtime.Enum(val, pathenum.SnakeCaseForImport_value) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "where", err) + } + + protoReq.Where = pathenum.SnakeCaseForImport(e) + + msg, err := server.SnakeEnum(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterABitOfEverythingServiceHandlerServer registers the http handlers for service ABitOfEverythingService to "mux". // UnaryRPC :call ABitOfEverythingServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -3532,6 +3638,40 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime return nil } +// RegisterSnakeEnumServiceHandlerServer registers the http handlers for service SnakeEnumService to "mux". +// UnaryRPC :call SnakeEnumServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSnakeEnumServiceHandlerFromEndpoint instead. +func RegisterSnakeEnumServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SnakeEnumServiceServer) error { + + mux.Handle("GET", pattern_SnakeEnumService_SnakeEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum", runtime.WithHTTPPathPattern("/v1/example/snake/{who}/{what}/{where}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SnakeEnumService_SnakeEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_SnakeEnumService_SnakeEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterABitOfEverythingServiceHandlerFromEndpoint is same as RegisterABitOfEverythingServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterABitOfEverythingServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -4479,3 +4619,74 @@ var ( var ( forward_CamelCaseServiceName_Empty_0 = runtime.ForwardResponseMessage ) + +// RegisterSnakeEnumServiceHandlerFromEndpoint is same as RegisterSnakeEnumServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSnakeEnumServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSnakeEnumServiceHandler(ctx, mux, conn) +} + +// RegisterSnakeEnumServiceHandler registers the http handlers for service SnakeEnumService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSnakeEnumServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSnakeEnumServiceHandlerClient(ctx, mux, NewSnakeEnumServiceClient(conn)) +} + +// RegisterSnakeEnumServiceHandlerClient registers the http handlers for service SnakeEnumService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SnakeEnumServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SnakeEnumServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SnakeEnumServiceClient" to call the correct interceptors. +func RegisterSnakeEnumServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SnakeEnumServiceClient) error { + + mux.Handle("GET", pattern_SnakeEnumService_SnakeEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum", runtime.WithHTTPPathPattern("/v1/example/snake/{who}/{what}/{where}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SnakeEnumService_SnakeEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_SnakeEnumService_SnakeEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_SnakeEnumService_SnakeEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "snake", "who", "what", "where"}, "")) +) + +var ( + forward_SnakeEnumService_SnakeEnum_0 = runtime.ForwardResponseMessage +) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2409db11901..1d518ee3153 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -786,3 +786,39 @@ service camelCaseServiceName { service AnotherServiceWithNoBindings { rpc NoBindings(google.protobuf.Empty) returns (google.protobuf.Empty) {} } + +service SnakeEnumService { + rpc SnakeEnum(SnakeEnumRequest) returns (SnakeEnumResponse) { + option (google.api.http) = { + get: "/v1/example/snake/{who}/{what}/{where}" + }; + } +} + +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +enum snake_case_enum { + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_c = 0; + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_d = 1; +} + +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +enum snake_case_0_enum { + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_e = 0; + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_f = 1; +} + +message SnakeEnumRequest { + snake_case_enum what = 1; + snake_case_0_enum who = 2; + pathenum.snake_case_for_import where = 3; +} + +message SnakeEnumResponse {} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index d1cc78b468d..4eefc52447d 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -28,6 +28,9 @@ }, { "name": "AnotherServiceWithNoBindings" + }, + { + "name": "SnakeEnumService" } ], "schemes": [ @@ -4369,6 +4372,83 @@ ] } }, + "/v1/example/snake/{who}/{what}/{where}": { + "get": { + "operationId": "SnakeEnumService_SnakeEnum", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbSnakeEnumResponse" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "who", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "value_e", + "value_f" + ] + }, + { + "name": "what", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "value_c", + "value_d" + ] + }, + { + "name": "where", + "in": "path", + "required": true, + "type": "string", + "enum": [ + "value_x", + "value_y" + ] + } + ], + "tags": [ + "SnakeEnumService" + ] + } + }, "/v1/{book.name}": { "patch": { "operationId": "ABitOfEverythingService_UpdateBook", @@ -6412,6 +6492,29 @@ "default": "ZERO", "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" }, + "examplepbSnakeEnumResponse": { + "type": "object" + }, + "examplepbsnake_case_0_enum": { + "type": "string", + "enum": [ + "value_e", + "value_f" + ], + "default": "value_e", + "description": "- value_e: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_f: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE", + "title": "Ignoring lint warnings as this enum type exist to validate proper functionality\nfor projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + }, + "examplepbsnake_case_enum": { + "type": "string", + "enum": [ + "value_c", + "value_d" + ], + "default": "value_c", + "description": "- value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_d: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE", + "title": "Ignoring lint warnings as this enum type exist to validate proper functionality\nfor projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + }, "pathenumPathEnum": { "type": "string", "enum": [ @@ -6420,6 +6523,16 @@ ], "default": "ABC" }, + "pathenumsnake_case_for_import": { + "type": "string", + "enum": [ + "value_x", + "value_y" + ], + "default": "value_x", + "description": "- value_x: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_y: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE", + "title": "Ignoring lint warnings as this enum type exist to validate proper functionality\nfor projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" + }, "protobufAny": { "type": "object", "properties": { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index 206b9e1e6ec..fd444cb0579 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -1301,3 +1301,87 @@ var AnotherServiceWithNoBindings_ServiceDesc = grpc.ServiceDesc{ Streams: []grpc.StreamDesc{}, Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", } + +// SnakeEnumServiceClient is the client API for SnakeEnumService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SnakeEnumServiceClient interface { + SnakeEnum(ctx context.Context, in *SnakeEnumRequest, opts ...grpc.CallOption) (*SnakeEnumResponse, error) +} + +type snakeEnumServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSnakeEnumServiceClient(cc grpc.ClientConnInterface) SnakeEnumServiceClient { + return &snakeEnumServiceClient{cc} +} + +func (c *snakeEnumServiceClient) SnakeEnum(ctx context.Context, in *SnakeEnumRequest, opts ...grpc.CallOption) (*SnakeEnumResponse, error) { + out := new(SnakeEnumResponse) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SnakeEnumServiceServer is the server API for SnakeEnumService service. +// All implementations should embed UnimplementedSnakeEnumServiceServer +// for forward compatibility +type SnakeEnumServiceServer interface { + SnakeEnum(context.Context, *SnakeEnumRequest) (*SnakeEnumResponse, error) +} + +// UnimplementedSnakeEnumServiceServer should be embedded to have forward compatible implementations. +type UnimplementedSnakeEnumServiceServer struct { +} + +func (UnimplementedSnakeEnumServiceServer) SnakeEnum(context.Context, *SnakeEnumRequest) (*SnakeEnumResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SnakeEnum not implemented") +} + +// UnsafeSnakeEnumServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SnakeEnumServiceServer will +// result in compilation errors. +type UnsafeSnakeEnumServiceServer interface { + mustEmbedUnimplementedSnakeEnumServiceServer() +} + +func RegisterSnakeEnumServiceServer(s grpc.ServiceRegistrar, srv SnakeEnumServiceServer) { + s.RegisterService(&SnakeEnumService_ServiceDesc, srv) +} + +func _SnakeEnumService_SnakeEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SnakeEnumRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SnakeEnumServiceServer).SnakeEnum(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService/SnakeEnum", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SnakeEnumServiceServer).SnakeEnum(ctx, req.(*SnakeEnumRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SnakeEnumService_ServiceDesc is the grpc.ServiceDesc for SnakeEnumService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SnakeEnumService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService", + HandlerType: (*SnakeEnumServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SnakeEnum", + Handler: _SnakeEnumService_SnakeEnum_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", +} diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 75f94ed9067..f6add3c00c3 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -66,6 +66,57 @@ func (PathEnum) EnumDescriptor() ([]byte, []int) { return file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0} } +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +type SnakeCaseForImport int32 + +const ( + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCaseForImport_value_x SnakeCaseForImport = 0 + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + SnakeCaseForImport_value_y SnakeCaseForImport = 1 +) + +// Enum value maps for SnakeCaseForImport. +var ( + SnakeCaseForImport_name = map[int32]string{ + 0: "value_x", + 1: "value_y", + } + SnakeCaseForImport_value = map[string]int32{ + "value_x": 0, + "value_y": 1, + } +) + +func (x SnakeCaseForImport) Enum() *SnakeCaseForImport { + p := new(SnakeCaseForImport) + *p = x + return p +} + +func (x SnakeCaseForImport) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SnakeCaseForImport) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1].Descriptor() +} + +func (SnakeCaseForImport) Type() protoreflect.EnumType { + return &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1] +} + +func (x SnakeCaseForImport) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SnakeCaseForImport.Descriptor instead. +func (SnakeCaseForImport) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{1} +} + type MessagePathEnum_NestedPathEnum int32 const ( @@ -96,11 +147,11 @@ func (x MessagePathEnum_NestedPathEnum) String() string { } func (MessagePathEnum_NestedPathEnum) Descriptor() protoreflect.EnumDescriptor { - return file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1].Descriptor() + return file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[2].Descriptor() } func (MessagePathEnum_NestedPathEnum) Type() protoreflect.EnumType { - return &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1] + return &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[2] } func (x MessagePathEnum_NestedPathEnum) Number() protoreflect.EnumNumber { @@ -271,13 +322,16 @@ var file_examples_internal_proto_pathenum_path_enum_proto_rawDesc = []byte{ 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x1c, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x42, - 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x46, 0x10, 0x01, 0x42, 0x4c, 0x5a, 0x4a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x46, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x15, + 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x78, + 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x79, 0x10, 0x01, 0x42, + 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -292,18 +346,19 @@ func file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP() []byte return file_examples_internal_proto_pathenum_path_enum_proto_rawDescData } -var file_examples_internal_proto_pathenum_path_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_examples_internal_proto_pathenum_path_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_examples_internal_proto_pathenum_path_enum_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_examples_internal_proto_pathenum_path_enum_proto_goTypes = []interface{}{ (PathEnum)(0), // 0: grpc.gateway.examples.internal.pathenum.PathEnum - (MessagePathEnum_NestedPathEnum)(0), // 1: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*MessagePathEnum)(nil), // 2: grpc.gateway.examples.internal.pathenum.MessagePathEnum - (*MessageWithPathEnum)(nil), // 3: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - (*MessageWithNestedPathEnum)(nil), // 4: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + (SnakeCaseForImport)(0), // 1: grpc.gateway.examples.internal.pathenum.snake_case_for_import + (MessagePathEnum_NestedPathEnum)(0), // 2: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*MessagePathEnum)(nil), // 3: grpc.gateway.examples.internal.pathenum.MessagePathEnum + (*MessageWithPathEnum)(nil), // 4: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + (*MessageWithNestedPathEnum)(nil), // 5: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum } var file_examples_internal_proto_pathenum_path_enum_proto_depIdxs = []int32{ 0, // 0: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum.value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 1, // 1: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum.value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 2, // 1: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum.value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum 2, // [2:2] is the sub-list for method output_type 2, // [2:2] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name @@ -359,7 +414,7 @@ func file_examples_internal_proto_pathenum_path_enum_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_pathenum_path_enum_proto_rawDesc, - NumEnums: 2, + NumEnums: 3, NumMessages: 3, NumExtensions: 0, NumServices: 0, diff --git a/examples/internal/proto/pathenum/path_enum.proto b/examples/internal/proto/pathenum/path_enum.proto index fc70ac6a645..d227044485e 100644 --- a/examples/internal/proto/pathenum/path_enum.proto +++ b/examples/internal/proto/pathenum/path_enum.proto @@ -23,3 +23,13 @@ message MessageWithPathEnum { message MessageWithNestedPathEnum { MessagePathEnum.NestedPathEnum value = 1; } + +// Ignoring lint warnings as this enum type exist to validate proper functionality +// for projects that don't follow these lint rules. +// buf:lint:ignore ENUM_PASCAL_CASE +enum snake_case_for_import { + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_x = 0; + // buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE + value_y = 1; +} diff --git a/internal/casing/BUILD.bazel b/internal/casing/BUILD.bazel index 672b3564762..93de75a48b7 100644 --- a/internal/casing/BUILD.bazel +++ b/internal/casing/BUILD.bazel @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "casing", @@ -12,3 +12,9 @@ alias( actual = ":casing", visibility = ["//:__subpackages__"], ) + +go_test( + name = "casing_test", + srcs = ["camel_test.go"], + embed = [":casing"], +) diff --git a/internal/casing/camel.go b/internal/casing/camel.go index 85e708ea1f4..2b96aec9414 100644 --- a/internal/casing/camel.go +++ b/internal/casing/camel.go @@ -1,5 +1,10 @@ package casing +import ( + "path/filepath" + "strings" +) + // Camel returns the CamelCased name. // // This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package @@ -50,6 +55,18 @@ func Camel(s string) string { return string(t) } +// CamelIdentifier returns the CamelCased identifier without affecting the package name/path if any. +func CamelIdentifier(s string) string { + const dot = "." + if !strings.Contains(s, dot) { + return Camel(s) + } + identifier := filepath.Ext(s) + path := strings.TrimSuffix(s, identifier) + identifier = strings.TrimPrefix(identifier, dot) + return path + dot + Camel(identifier) +} + // JSONCamelCase converts a snake_case identifier to a camelCase identifier, // according to the protobuf JSON specification. func JSONCamelCase(s string) string { diff --git a/internal/casing/camel_test.go b/internal/casing/camel_test.go new file mode 100644 index 00000000000..ce910fa4407 --- /dev/null +++ b/internal/casing/camel_test.go @@ -0,0 +1,46 @@ +package casing + +import "testing" + +func TestCamelIdentifier(t *testing.T) { + casingTests := []struct { + name string + input string + want string + }{ + { + "regular snake case identifier", + "snake_case", + "SnakeCase", + }, + { + "snake case identifier with digit", + "snake_case_0_enum", + "SnakeCase_0Enum", + }, + { + "regular snake case identifier with package", + "pathenum.snake_case", + "pathenum.SnakeCase", + }, + { + "snake case identifier with digit and package", + "pathenum.snake_case_0_enum", + "pathenum.SnakeCase_0Enum", + }, + { + "snake case identifier with digit and multiple dots", + "path.pathenum.snake_case_0_enum", + "path.pathenum.SnakeCase_0Enum", + }, + } + + for _, ct := range casingTests { + t.Run(ct.name, func(t *testing.T) { + got := CamelIdentifier(ct.input) + if ct.want != got { + t.Errorf("want: %s, got: %s", ct.want, got) + } + }) + } +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index fb65562a72c..bd1998cbc2b 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -308,7 +308,11 @@ func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx cont } `)) - _ = template.Must(handlerTemplate.New("client-rpc-request-func").Parse(` + funcMap template.FuncMap = map[string]interface{}{ + "camelIdentifier": casing.CamelIdentifier, + } + + _ = template.Must(handlerTemplate.New("client-rpc-request-func").Funcs(funcMap).Parse(` {{$AllowPatchFeature := .AllowPatchFeature}} {{if .HasQueryParam}} var ( @@ -366,13 +370,13 @@ var ( return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{if $enum}} - e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}_value) + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}_value) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "could not parse path as enum value, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{end}} {{else if $enum}} - e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}_value) + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}_value) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } @@ -393,7 +397,7 @@ var ( } {{$param.AssignableExpr "protoReq"}} = s {{else if $enum}} - {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}(e) + {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) {{end}} {{end}} {{end}} @@ -482,7 +486,7 @@ var ( func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.InstanceName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {{end}}`, "\n", "", -1))) - _ = template.Must(localHandlerTemplate.New("local-client-rpc-request-func").Parse(` + _ = template.Must(localHandlerTemplate.New("local-client-rpc-request-func").Funcs(funcMap).Parse(` {{$AllowPatchFeature := .AllowPatchFeature}} {{template "local-request-func-signature" .}} { var protoReq {{.Method.RequestType.GoType .Method.Service.File.GoPkg.Path}} @@ -535,13 +539,13 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{if $enum}} - e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}_value) + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}_value) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "could not parse path as enum value, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{end}} {{else if $enum}} - e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}_value) + e{{if $param.IsRepeated}}s{{end}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}, {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}_value) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } @@ -563,7 +567,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct } {{$param.AssignableExpr "protoReq"}} = s {{else if $enum}} - {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}(e) + {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) {{end}} {{end}} {{end}} From 20aa41545bc4f8d02be1ea02250fa5431c919658 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Aug 2022 22:08:00 +0000 Subject: [PATCH 1386/1518] chore(deps): update dependency com_google_protobuf to v3.21.5 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 9f345888853..767dae2be11 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "85d42d4485f36f8cec3e475a3b9e841d7d78523cd775de3a86dba77081f4ca25", - strip_prefix = "protobuf-3.21.4", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.4.tar.gz"], + sha256 = "d7d204a59fd0d2d2387bd362c2155289d5060f32122c4d1d922041b61191d522", + strip_prefix = "protobuf-3.21.5", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.5.tar.gz"], ) http_archive( From 98b4e36e9fdbc74b24d0fc1d28e0521d3411cdc1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 17:26:03 +0000 Subject: [PATCH 1387/1518] fix(deps): update google.golang.org/genproto digest to 1856144 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5776977a06d..34d9a2918ef 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 + google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index f142cd166f7..1df5bc07bd1 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 h1:7PEE9xCtufpGJzrqweakEEnTh7YFELmnKm/ee+5jmfQ= -google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c h1:IooGDWedfLC6KLczH/uduUsKQP42ZZYhKx+zd50L1Sk= +google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8f9803d4ea9..5aad1ecb2a5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:7PEE9xCtufpGJzrqweakEEnTh7YFELmnKm/ee+5jmfQ=", - version = "v0.0.0-20220808204814-fd01256a5276", + sum = "h1:IooGDWedfLC6KLczH/uduUsKQP42ZZYhKx+zd50L1Sk=", + version = "v0.0.0-20220810155839-1856144b1d9c", ) go_repository( name = "org_golang_google_grpc", From ef99f1a6bc6192580bc51e3d75d9c34f925ef265 Mon Sep 17 00:00:00 2001 From: Makdon Date: Thu, 11 Aug 2022 06:02:30 +0800 Subject: [PATCH 1388/1518] switch ci build env version to 1.19 (#2845) --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b16a19dbcb2..0094b0dd81f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: ./node_modules/.bin/gulp generate: container: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.19 options: "--user root" credentials: username: ${{ github.actor }} @@ -56,7 +56,7 @@ jobs: - run: git diff --exit-code bazel: container: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.17 + image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.19 options: "--user root" credentials: username: ${{ github.actor }} From 563418954a3ba94dcaa1473d65a092262194796c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Aug 2022 16:36:35 +0000 Subject: [PATCH 1389/1518] fix(deps): update google.golang.org/genproto digest to cec7f53 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 34d9a2918ef..121188f5b2b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c + google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 1df5bc07bd1..4923618eeb0 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c h1:IooGDWedfLC6KLczH/uduUsKQP42ZZYhKx+zd50L1Sk= -google.golang.org/genproto v0.0.0-20220810155839-1856144b1d9c/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424 h1:zZnTt15U44/Txe/9cN/tVbteBkPMiyXK48hPsKRmqj4= +google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5aad1ecb2a5..d8e7d36c6c2 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:IooGDWedfLC6KLczH/uduUsKQP42ZZYhKx+zd50L1Sk=", - version = "v0.0.0-20220810155839-1856144b1d9c", + sum = "h1:zZnTt15U44/Txe/9cN/tVbteBkPMiyXK48hPsKRmqj4=", + version = "v0.0.0-20220812140447-cec7f5303424", ) go_repository( name = "org_golang_google_grpc", From 7b074f919550395e1b6ecca8c54c0b903df53d45 Mon Sep 17 00:00:00 2001 From: Makdon Date: Sat, 13 Aug 2022 11:31:17 +0800 Subject: [PATCH 1390/1518] fix: Required field does not take effect (#2829) * fix: Required field does not take effect * refactor: message option is optional * test: MessageToQueryParameters test cases for "required" option * gen: re-generate the files * test: fix broken Create method test case * gen: regenerate the files * regenerate files * refactor: use extractSchemaOptionFromMessageDescriptor instead * style: move import to second import group * style: run command `golangci-lint run --enable goimports --fix` * Apply suggestions from code review format code according review suggestions Co-authored-by: Johan Brandhorst-Satzkorn Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/abe/api/swagger.yaml | 60 +++---- .../abe/api_a_bit_of_everything_service.go | 158 ++++++------------ examples/internal/integration/BUILD.bazel | 1 + examples/internal/integration/client_test.go | 6 + .../a_bit_of_everything.swagger.json | 40 ++--- internal/httprule/parse.go | 11 +- protoc-gen-grpc-gateway/main.go | 3 +- .../internal/genopenapi/generator.go | 24 +-- .../internal/genopenapi/template.go | 33 ++-- .../internal/genopenapi/template_test.go | 128 +++++++++++++- runtime/errors.go | 9 +- 11 files changed, 269 insertions(+), 204 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index e563f161d85..853f5359421 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -159,12 +159,11 @@ paths: x-optionalDataType: "Int64" - name: "uuid" in: "query" - required: false + required: true type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-internal: true x-exportParamName: "Uuid" - x-optionalDataType: "String" - name: "floatValue" in: "query" description: "Float value field" @@ -175,18 +174,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -486,12 +483,11 @@ paths: x-optionalDataType: "String" - name: "uuid" in: "query" - required: false + required: true type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-internal: true x-exportParamName: "Uuid" - x-optionalDataType: "String" - name: "floatValue" in: "query" description: "Float value field" @@ -502,18 +498,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -804,12 +798,11 @@ paths: x-exportParamName: "SingleNested" - name: "uuid" in: "query" - required: false + required: true type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-internal: true x-exportParamName: "Uuid" - x-optionalDataType: "String" - name: "floatValue" in: "query" description: "Float value field" @@ -820,18 +813,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -1152,18 +1143,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -1606,12 +1595,11 @@ paths: x-optionalDataType: "String" - name: "uuid" in: "query" - required: false + required: true type: "string" pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" x-internal: true x-exportParamName: "Uuid" - x-optionalDataType: "String" - name: "bytesValue" in: "query" required: false @@ -1814,18 +1802,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -2177,18 +2163,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -2498,18 +2482,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false @@ -2836,18 +2818,16 @@ paths: x-exportParamName: "FloatValue" - name: "doubleValue" in: "query" - required: false + required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - x-optionalDataType: "Float64" - name: "int64Value" in: "query" - required: false + required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - x-optionalDataType: "String" - name: "uint64Value" in: "query" required: false diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index e00a679ec15..450c42d0ed1 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -343,14 +343,14 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckExternal ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedName name is nested field. + * @param uuid * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "Uuid" (optional.String) - - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -387,9 +387,6 @@ ABitOfEverythingServiceApiService type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { SingleNestedAmount optional.Int64 SingleNestedOk optional.String - Uuid optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -421,7 +418,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -444,16 +441,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { - localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) - } + localVarQueryParams.Add("uuid", parameterToString(uuid, "")) localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -678,14 +669,14 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedOk DeepEnum description. + * @param uuid * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - - * @param "Uuid" (optional.String) - - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -722,9 +713,6 @@ ABitOfEverythingServiceApiService type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 - Uuid optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -756,7 +744,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -779,16 +767,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { - localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) - } + localVarQueryParams.Add("uuid", parameterToString(uuid, "")) localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -1014,12 +996,12 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param stringValue * @param singleNested + * @param uuid * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters: - * @param "Uuid" (optional.String) - - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -1054,9 +1036,6 @@ ABitOfEverythingServiceApiService */ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { - Uuid optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -1088,7 +1067,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1105,16 +1084,10 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer localVarQueryParams := url.Values{} localVarFormParams := url.Values{} - if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { - localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) - } + localVarQueryParams.Add("uuid", parameterToString(uuid, "")) localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -1514,12 +1487,12 @@ This API creates a new ABitOfEverything * @param pathEnumValue * @param nestedPathEnumValue * @param enumValueAnnotation Numeric enum description. + * @param uuid * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "Uuid" (optional.String) - * @param "BytesValue" (optional.String) - * @param "RepeatedStringValue" (optional.Interface of []string) - * @param "OneofString" (optional.String) - @@ -1542,7 +1515,6 @@ type ABitOfEverythingServiceCreateOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - Uuid optional.String BytesValue optional.String RepeatedStringValue optional.Interface OneofString optional.String @@ -1559,7 +1531,7 @@ type ABitOfEverythingServiceCreateOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1603,9 +1575,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } - if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { - localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) - } + localVarQueryParams.Add("uuid", parameterToString(uuid, "")) if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) } @@ -2112,13 +2082,13 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuidName * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCustomOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -2157,8 +2127,6 @@ type ABitOfEverythingServiceCustomOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -2191,7 +2159,7 @@ type ABitOfEverythingServiceCustomOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2218,12 +2186,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx co localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -2452,13 +2416,13 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuidName * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceCustomOptionsRequestOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -2497,8 +2461,6 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -2531,7 +2493,7 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Options") localVarPostBody interface{} @@ -2558,12 +2520,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptions localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -3063,13 +3021,13 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuidName * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceDoubleColonOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -3108,8 +3066,6 @@ type ABitOfEverythingServiceDoubleColonOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -3142,7 +3098,7 @@ type ABitOfEverythingServiceDoubleColonOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -3169,12 +3125,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(c localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -3557,13 +3509,13 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuidName * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceExistsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -3602,8 +3554,6 @@ type ABitOfEverythingServiceExistsOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -3636,7 +3586,7 @@ type ABitOfEverythingServiceExistsOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Head") localVarPostBody interface{} @@ -3663,12 +3613,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx co localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } @@ -4012,13 +3958,13 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuidName * @param floatValue Float value field + * @param doubleValue + * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param "DoubleValue" (optional.Float64) - - * @param "Int64Value" (optional.String) - * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - * @param "Fixed64Value" (optional.String) - @@ -4057,8 +4003,6 @@ type ABitOfEverythingServiceGetQueryOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String - DoubleValue optional.Float64 - Int64Value optional.String Uint64Value optional.String Int32Value optional.Int32 Fixed64Value optional.String @@ -4091,7 +4035,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { ProductId optional.Interface } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -4118,12 +4062,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) - if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) - } - if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) - } + localVarQueryParams.Add("doubleValue", parameterToString(doubleValue, "")) + localVarQueryParams.Add("int64Value", parameterToString(int64Value, "")) if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index 385f2242f92..8e234f7dbd5 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -19,6 +19,7 @@ go_test( "//runtime", "@com_github_golang_glog//:glog", "@com_github_google_go_cmp//cmp", + "@com_github_rogpeppe_fastuuid//:fastuuid", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes", diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index e206f537e2c..0043fd9eae1 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -2,13 +2,17 @@ package integration_test import ( "context" + "fmt" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho" + "github.com/rogpeppe/fastuuid" ) +var uuidgen = fastuuid.MustNewGenerator() + func TestEchoClient(t *testing.T) { if testing.Short() { t.Skip() @@ -107,6 +111,7 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { PathEnumValue: &enumPath, NestedPathEnumValue: &messagePath, EnumValueAnnotation: &enumZero, + Uuid: fmt.Sprintf("%x", uuidgen.Next()), } resp, _, err := cl.ABitOfEverythingServiceApi.ABitOfEverythingServiceCreate( context.Background(), @@ -129,6 +134,7 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.PathEnumValue.String(), want.NestedPathEnumValue.String(), want.EnumValueAnnotation.String(), + want.Uuid, want.RequiredStringViaFieldBehaviorAnnotation, nil, ) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 4eefc52447d..bffe836a96f 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -241,7 +241,7 @@ { "name": "uuid", "in": "query", - "required": false, + "required": true, "type": "string", "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", "x-internal": true @@ -258,14 +258,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -598,7 +598,7 @@ { "name": "uuid", "in": "query", - "required": false, + "required": true, "type": "string", "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", "x-internal": true @@ -615,14 +615,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -948,7 +948,7 @@ { "name": "uuid", "in": "query", - "required": false, + "required": true, "type": "string", "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", "x-internal": true @@ -965,14 +965,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -1328,14 +1328,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -1834,7 +1834,7 @@ { "name": "uuid", "in": "query", - "required": false, + "required": true, "type": "string", "pattern": "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}", "x-internal": true @@ -2317,14 +2317,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -2661,14 +2661,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -3029,14 +3029,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, @@ -3397,14 +3397,14 @@ { "name": "doubleValue", "in": "query", - "required": false, + "required": true, "type": "number", "format": "double" }, { "name": "int64Value", "in": "query", - "required": false, + "required": true, "type": "string", "format": "int64" }, diff --git a/internal/httprule/parse.go b/internal/httprule/parse.go index 5edd784e62a..f008f7cc941 100644 --- a/internal/httprule/parse.go +++ b/internal/httprule/parse.go @@ -275,11 +275,12 @@ func (p *parser) accept(term termType) (string, error) { // expectPChars determines if "t" consists of only pchars defined in RFC3986. // // https://www.ietf.org/rfc/rfc3986.txt, P.49 -// pchar = unreserved / pct-encoded / sub-delims / ":" / "@" -// unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" -// sub-delims = "!" / "$" / "&" / "'" / "(" / ")" -// / "*" / "+" / "," / ";" / "=" -// pct-encoded = "%" HEXDIG HEXDIG +// +// pchar = unreserved / pct-encoded / sub-delims / ":" / "@" +// unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" +// sub-delims = "!" / "$" / "&" / "'" / "(" / ")" +// / "*" / "+" / "," / ";" / "=" +// pct-encoded = "%" HEXDIG HEXDIG func expectPChars(t string) error { const ( init = iota diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 3371b1b4bde..fca2f83fc7c 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -3,7 +3,8 @@ // HTTP/1 requests gRPC invocation. // You rarely need to run this program directly. Instead, put this program // into your $PATH with a name "protoc-gen-grpc-gateway" and run -// protoc --grpc-gateway_out=output_directory path/to/input.proto +// +// protoc --grpc-gateway_out=output_directory path/to/input.proto // // See README.md for more details. package main diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 7abb04abcb5..6c614919241 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -77,13 +77,13 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { // Q: What's up with the alias types here? // A: We don't want to completely override how these structs are marshaled into -// JSON, we only want to add fields (see below, extensionMarshalJSON). -// An infinite recursion would happen if we'd call json.Marshal on the struct -// that has swaggerObject as an embedded field. To avoid that, we'll create -// type aliases, and those don't have the custom MarshalJSON methods defined -// on them. See http://choly.ca/post/go-json-marshalling/ (or, if it ever -// goes away, use -// https://web.archive.org/web/20190806073003/http://choly.ca/post/go-json-marshalling/. +// JSON, we only want to add fields (see below, extensionMarshalJSON). +// An infinite recursion would happen if we'd call json.Marshal on the struct +// that has swaggerObject as an embedded field. To avoid that, we'll create +// type aliases, and those don't have the custom MarshalJSON methods defined +// on them. See http://choly.ca/post/go-json-marshalling/ (or, if it ever +// goes away, use +// https://web.archive.org/web/20190806073003/http://choly.ca/post/go-json-marshalling/. func (so openapiSwaggerObject) MarshalJSON() ([]byte, error) { type alias openapiSwaggerObject return extensionMarshalJSON(alias(so), so.extensions) @@ -94,12 +94,14 @@ func (so openapiSwaggerObject) MarshalJSON() ([]byte, error) { // It is required in order to pass extensions inline. // // Example: -// extensions: {x-key: x-value} -// type: string +// +// extensions: {x-key: x-value} +// type: string // // It will be rendered as: -// x-key: x-value -// type: string +// +// x-key: x-value +// type: string // // Use generics when the project will be upgraded to go 1.18+. func (so openapiSwaggerObject) MarshalYAML() (interface{}, error) { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 64d585f827d..0649259e3e6 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -29,13 +29,13 @@ import ( "google.golang.org/protobuf/types/known/structpb" ) -// The OpenAPI specification does not allow for more than one endpoint with the same HTTP method and path. -// This prevents multiple gRPC service methods from sharing the same stripped version of the path and method. -// For example: `GET /v1/{name=organizations/*}/roles` and `GET /v1/{name=users/*}/roles` both get stripped to `GET /v1/{name}/roles`. -// We must make the URL unique by adding a suffix and an incrementing index to each path parameter -// to differentiate the endpoints. -// Since path parameter names do not affect the request contents (i.e. they're replaced in the path) -// this will be hidden from the real grpc gateway consumer. +// The OpenAPI specification does not allow for more than one endpoint with the same HTTP method and path. +// This prevents multiple gRPC service methods from sharing the same stripped version of the path and method. +// For example: `GET /v1/{name=organizations/*}/roles` and `GET /v1/{name=users/*}/roles` both get stripped to `GET /v1/{name}/roles`. +// We must make the URL unique by adding a suffix and an incrementing index to each path parameter +// to differentiate the endpoints. +// Since path parameter names do not affect the request contents (i.e. they're replaced in the path) +// this will be hidden from the real grpc gateway consumer. const pathParamUniqueSuffixDeliminator = "_" const paragraphDeliminator = "\n\n" @@ -214,10 +214,12 @@ func (c *cycleChecker) Branch() *cycleChecker { // nestedQueryParams converts a field to a list of OpenAPI query parameters recursively. // This function is a helper function for queryParams, that keeps track of cyclical message references -// through the use of -// touched map[string]int +// through the use of +// +// touched map[string]int +// // If a cycle is discovered, an error is returned, as cyclical data structures are dangerous -// in query parameters. +// in query parameters. func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, body *descriptor.Body, cycle *cycleChecker) (params []openapiParameterObject, err error) { // make sure the parameter is not already listed as a path parameter for _, pathParam := range pathParams { @@ -264,6 +266,15 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre break } } + // verify if the field is required in message options + if messageSchema, err := extractSchemaOptionFromMessageDescriptor(message.DescriptorProto); err == nil { + for _, fieldName := range messageSchema.GetJsonSchema().GetRequired() { + if fieldName == reg.FieldName(field) { + required = true + break + } + } + } param := openapiParameterObject{ Description: desc, @@ -2268,7 +2279,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type // For example, if we are trying to locate comments related to a field named // `Address` in a message named `Person`, the path will be: // -// [4, a, 2, b] +// [4, a, 2, b] // // While `a` gets determined by the order in which the messages appear in // the proto file, and `b` is the field index specified in the proto diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 0e17676010a..31ade2aa803 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -651,7 +651,7 @@ func TestMessageToQueryParameters(t *testing.T) { } // TestMessagetoQueryParametersNoRecursive, is a check that cyclical references between messages -// are not falsely detected given previous known edge-cases. +// are not falsely detected given previous known edge-cases. func TestMessageToQueryParametersNoRecursive(t *testing.T) { type test struct { MsgDescs []*descriptorpb.DescriptorProto @@ -770,8 +770,8 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { } // TestMessagetoQueryParametersRecursive, is a check that cyclical references between messages -// are handled gracefully. The goal is to insure that attempts to add messages with cyclical -// references to query-parameters returns an error message. +// are handled gracefully. The goal is to insure that attempts to add messages with cyclical +// references to query-parameters returns an error message. func TestMessageToQueryParametersRecursive(t *testing.T) { type test struct { MsgDescs []*descriptorpb.DescriptorProto @@ -1132,6 +1132,128 @@ func TestMessageToQueryParametersWellKnownTypes(t *testing.T) { } } +func TestMessageToQueryParametersWithRequiredField(t *testing.T) { + type test struct { + MsgDescs []*descriptorpb.DescriptorProto + Message string + Params []openapiParameterObject + } + + messageSchema := &openapi_options.Schema{ + JsonSchema: &openapi_options.JSONSchema{ + Required: []string{"a"}, + }, + } + messageOption := &descriptorpb.MessageOptions{} + proto.SetExtension(messageOption, openapi_options.E_Openapiv2Schema, messageSchema) + + fieldSchema := &openapi_options.JSONSchema{Required: []string{"b"}} + fieldOption := &descriptorpb.FieldOptions{} + proto.SetExtension(fieldOption, openapi_options.E_Openapiv2Field, fieldSchema) + + // TODO(makdon): is nested field's test case necessary here? + tests := []test{ + { + MsgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("a"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("b"), + Type: descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Number: proto.Int32(2), + Options: fieldOption, + }, + { + Name: proto.String("c"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Number: proto.Int32(3), + }, + }, + Options: messageOption, + }, + }, + Message: "ExampleMessage", + Params: []openapiParameterObject{ + { + Name: "a", + In: "query", + Required: true, + Type: "string", + }, + { + Name: "b", + In: "query", + Required: true, + Type: "number", + Format: "double", + }, + { + Name: "c", + In: "query", + Required: false, + Type: "array", + CollectionFormat: "multi", + }, + }, + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*descriptorpb.ServiceDescriptorProto{}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + err := reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, + }) + if err != nil { + t.Fatalf("failed to load code generator request: %v", err) + } + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + params, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}, nil) + if err != nil { + t.Fatalf("failed to convert message to query parameters: %s", err) + } + // avoid checking Items for array types + for i := range params { + params[i].Items = nil + } + if !reflect.DeepEqual(params, test.Params) { + t.Errorf("expected %v, got %v", test.Params, params) + } + } +} + func TestApplyTemplateSimple(t *testing.T) { msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), diff --git a/runtime/errors.go b/runtime/errors.go index d9e0013c439..ec1c419339e 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -162,10 +162,11 @@ func DefaultStreamErrorHandler(_ context.Context, err error) *status.Status { // DefaultRoutingErrorHandler is our default handler for routing errors. // By default http error codes mapped on the following error codes: -// NotFound -> grpc.NotFound -// StatusBadRequest -> grpc.InvalidArgument -// MethodNotAllowed -> grpc.Unimplemented -// Other -> grpc.Internal, method is not expecting to be called for anything else +// +// NotFound -> grpc.NotFound +// StatusBadRequest -> grpc.InvalidArgument +// MethodNotAllowed -> grpc.Unimplemented +// Other -> grpc.Internal, method is not expecting to be called for anything else func DefaultRoutingErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, httpStatus int) { sterr := status.Error(codes.Internal, "Unexpected routing error") switch httpStatus { From fe9f8e44508964f5c490bb36c17db8240df3e213 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 15:42:52 +0000 Subject: [PATCH 1391/1518] fix(deps): update google.golang.org/genproto digest to 37a418b --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 121188f5b2b..bd263248bc5 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424 + google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 4923618eeb0..6075a7aa982 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424 h1:zZnTt15U44/Txe/9cN/tVbteBkPMiyXK48hPsKRmqj4= -google.golang.org/genproto v0.0.0-20220812140447-cec7f5303424/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959 h1:hw4Y42zL1VyVKxPgRHHh191fpVBGV8sNVmcow5Z8VXY= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index d8e7d36c6c2..3a5cbf527d3 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:zZnTt15U44/Txe/9cN/tVbteBkPMiyXK48hPsKRmqj4=", - version = "v0.0.0-20220812140447-cec7f5303424", + sum = "h1:hw4Y42zL1VyVKxPgRHHh191fpVBGV8sNVmcow5Z8VXY=", + version = "v0.0.0-20220815135757-37a418bb8959", ) go_repository( name = "org_golang_google_grpc", From 262859dba7136fdbf3c0424949c30aec257813dc Mon Sep 17 00:00:00 2001 From: laurentsimon <64505099+laurentsimon@users.noreply.github.com> Date: Wed, 17 Aug 2022 09:44:02 -0700 Subject: [PATCH 1392/1518] Sign release binaries with SLSA signatures (#2847) --- .github/workflows/release.yml | 23 +++++++++++++++++++++++ README.md | 14 ++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d250e84f013..560ac088e73 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,8 @@ permissions: name: release jobs: goreleaser: + outputs: + hashes: ${{ steps.hash.outputs.hashes }} runs-on: ubuntu-latest permissions: contents: write @@ -18,10 +20,31 @@ jobs: with: check-latest: true - uses: goreleaser/goreleaser-action@v3 + id: run-goreleaser with: args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Generate subject + id: hash + env: + ARTIFACTS: "${{ steps.run-goreleaser.outputs.artifacts }}" + run: | + set -euo pipefail + + checksum_file=$(echo "$ARTIFACTS" | jq -r '.[] | select (.type=="Checksum") | .path') + echo "::set-output name=hashes::$(cat $checksum_file | base64 -w0)" + provenance: + needs: [goreleaser] + permissions: + actions: read # To read the workflow path. + id-token: write # To sign the provenance. + contents: write # To add assets to a release. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.0 + with: + base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" + upload-assets: true # upload to a new release + push_bsr_plugins: runs-on: ubuntu-latest steps: diff --git a/README.md b/README.md index 74936a0ac3f..317e3c97c5c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ gRPC to JSON proxy generator following the gRPC HTTP spec + + ## About @@ -55,6 +57,7 @@ that's needed to generate a reverse-proxy with this library. ## Installation +### Compile from source The following instructions assume you are using [Go Modules](https://github.com/golang/go/wiki/Modules) for dependency management. Use a @@ -93,6 +96,17 @@ This will place four binaries in your `$GOBIN`; Make sure that your `$GOBIN` is in your `$PATH`. +### Download the binaries + +You may alternatively download the binaries from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest). +We generate [SLSA3 signatures](slsa.dev) using the OpenSSF's [slsa-framework/slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) during the release process. To verify a release binary: +1. Install the verification tool from [slsa-framework/slsa-verifier#installation](https://github.com/slsa-framework/slsa-verifier#installation). +2. Download the provenance file `attestation.intoto.jsonl` from the [GitHub releases page](https://github.com/grpc-ecosystem/grpc-gateway/releases/latest). +3. Run the verifier: +```shell +slsa-verifier -artifact-path -provenance attestation.intoto.jsonl -source github.com/grpc-ecosystem/grpc-gateway -tag +``` + Alternatively, see the section on remotely managed plugin versions below. ## Usage From 800efbb23350f038cade1ab5e75811b16aecc6e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 17:58:12 +0000 Subject: [PATCH 1393/1518] fix(deps): update google.golang.org/genproto digest to d7fd3f1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bd263248bc5..5c206bb42ad 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959 + google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 6075a7aa982..76db582921e 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959 h1:hw4Y42zL1VyVKxPgRHHh191fpVBGV8sNVmcow5Z8VXY= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1 h1:C2UVWqrgLYKrT5nh5oU6hLRm1AeEklCK5eloQA1NtFY= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3a5cbf527d3..fb7fd5f5721 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hw4Y42zL1VyVKxPgRHHh191fpVBGV8sNVmcow5Z8VXY=", - version = "v0.0.0-20220815135757-37a418bb8959", + sum = "h1:C2UVWqrgLYKrT5nh5oU6hLRm1AeEklCK5eloQA1NtFY=", + version = "v0.0.0-20220817144833-d7fd3f11b9b1", ) go_repository( name = "org_golang_google_grpc", From b62dd44331c17bb28658371f8cc9ccdb1db9bfbe Mon Sep 17 00:00:00 2001 From: laksh keswani <40606132+lakshkeswani@users.noreply.github.com> Date: Thu, 18 Aug 2022 23:06:55 +0000 Subject: [PATCH 1394/1518] Support more required fields in protoc-gen-openapiv2 (#2854) Fixes #2635 --- .../internal/clients/abe/api/swagger.yaml | 225 ++- .../abe/api_a_bit_of_everything_service.go | 99 +- .../clients/abe/model_a_bit_of_everything.go | 3 + .../abe/model_a_bit_of_everything_1.go | 3 + .../abe/model_a_bit_of_everything_2.go | 3 + .../abe/model_a_bit_of_everything_3.go | 3 + .../abe/model_a_bit_of_everything_4.go | 11 +- .../model_examplepb_a_bit_of_everything.go | 3 + examples/internal/integration/client_test.go | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 1414 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 5 + .../a_bit_of_everything.swagger.json | 321 +++- .../examplepb/generated_input.swagger.json | 24 +- .../proto/examplepb/stream.swagger.json | 24 +- .../unannotated_echo_service.swagger.json | 5 +- .../internal/genopenapi/BUILD.bazel | 1 + .../internal/genopenapi/helpers.go | 20 + .../internal/genopenapi/helpers_test.go | 66 + .../internal/genopenapi/template.go | 4 + .../internal/genopenapi/template_test.go | 132 +- 20 files changed, 1568 insertions(+), 800 deletions(-) create mode 100644 protoc-gen-openapiv2/internal/genopenapi/helpers_test.go diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 853f5359421..233178eb5af 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -424,6 +424,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -753,6 +771,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -1069,6 +1105,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -1405,6 +1459,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -1728,6 +1800,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -2064,6 +2154,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -2425,6 +2533,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -2744,6 +2870,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -3080,6 +3224,24 @@ paths: pattern: "^[0-9]+$" collectionFormat: "multi" x-exportParamName: "ProductId" + - name: "optionalStringField" + in: "query" + description: "Test openapiv2 generation of required fields with annotation\ + \ and jsonschema to reproduce" + required: false + type: "string" + x-exportParamName: "OptionalStringField" + x-optionalDataType: "String" + - name: "requiredStringField1" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField1" + - name: "requiredStringField2" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredStringField2" responses: 200: description: "A successful response." @@ -4231,6 +4393,8 @@ definitions: - "doubleValue" - "floatValue" - "int64Value" + - "requiredStringField1" + - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" - "uuid" properties: @@ -4375,6 +4539,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4684,6 +4856,8 @@ definitions: - "doubleValue" - "floatValue" - "int64Value" + - "requiredStringField1" + - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" properties: singleNested: @@ -4822,6 +4996,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4848,6 +5030,8 @@ definitions: - "doubleValue" - "floatValue" - "int64Value" + - "requiredStringField1" + - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" - "uuid" properties: @@ -4992,6 +5176,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5023,6 +5215,8 @@ definitions: - "doubleValue" - "floatValue" - "int64Value" + - "requiredStringField1" + - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" properties: singleNested: @@ -5161,6 +5355,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5177,6 +5379,8 @@ definitions: - "doubleValue" - "floatValue" - "int64Value" + - "requiredStringField1" + - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" properties: singleNested: @@ -5315,6 +5519,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5326,11 +5538,6 @@ definitions: double_value: 12.3 x-a-bit-of-everything-foo: "bar" A bit of everything_4: - required: - - "doubleValue" - - "floatValue" - - "int64Value" - - "requiredStringViaFieldBehaviorAnnotation" properties: singleNested: $ref: "#/definitions/ABitOfEverythingNested" @@ -5468,6 +5675,14 @@ definitions: minLength: 1 maxLength: 19 pattern: "^[0-9]+$" + optionalStringField: + type: "string" + title: "Test openapiv2 generation of required fields with annotation and jsonschema\ + \ to reproduce" + requiredStringField1: + type: "string" + requiredStringField2: + type: "string" description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: "{\"int64_value\":12,\"double_value\":12.3}" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 450c42d0ed1..c73d18a8985 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -348,6 +348,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. @@ -380,6 +382,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -416,9 +419,10 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -533,6 +537,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -674,6 +683,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -706,6 +717,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -742,9 +754,10 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -859,6 +872,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1001,6 +1019,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters: * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - @@ -1031,6 +1051,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -1065,9 +1086,10 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1176,6 +1198,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1489,6 +1516,8 @@ This API creates a new ABitOfEverything * @param enumValueAnnotation Numeric enum description. * @param uuid * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -1507,6 +1536,7 @@ This API creates a new ABitOfEverything * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -1529,9 +1559,10 @@ type ABitOfEverythingServiceCreateOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1619,6 +1650,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2085,6 +2121,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCustomOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2119,6 +2157,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -2157,9 +2196,10 @@ type ABitOfEverythingServiceCustomOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2279,6 +2319,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx co if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2419,6 +2464,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceCustomOptionsRequestOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2453,6 +2500,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return interface{} */ @@ -2491,9 +2539,10 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Options") localVarPostBody interface{} @@ -2613,6 +2662,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptions if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3024,6 +3078,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceDoubleColonOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -3058,6 +3114,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return ExamplepbABitOfEverything */ @@ -3096,9 +3153,10 @@ type ABitOfEverythingServiceDoubleColonOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -3218,6 +3276,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(c if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3512,6 +3575,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceExistsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -3546,6 +3611,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return interface{} */ @@ -3584,9 +3650,10 @@ type ABitOfEverythingServiceExistsOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Head") localVarPostBody interface{} @@ -3706,6 +3773,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx co if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3961,6 +4033,8 @@ ABitOfEverythingServiceApiService * @param doubleValue * @param int64Value * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition + * @param requiredStringField1 + * @param requiredStringField2 * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -3995,6 +4069,7 @@ ABitOfEverythingServiceApiService * @param "OutputOnlyStringViaFieldBehaviorAnnotation" (optional.String) - mark a field as readonly in Open API definition * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. + * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce @return interface{} */ @@ -4033,9 +4108,10 @@ type ABitOfEverythingServiceGetQueryOpts struct { OutputOnlyStringViaFieldBehaviorAnnotation optional.String OptionalStringValue optional.String ProductId optional.Interface + OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -4155,6 +4231,11 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx if localVarOptionals != nil && localVarOptionals.ProductId.IsSet() { localVarQueryParams.Add("productId", parameterToString(localVarOptionals.ProductId.Value(), "multi")) } + if localVarOptionals != nil && localVarOptionals.OptionalStringField.IsSet() { + localVarQueryParams.Add("optionalStringField", parameterToString(localVarOptionals.OptionalStringField.Value(), "")) + } + localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) + localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 80f4e6ce00e..3fcd1edecea 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -62,4 +62,7 @@ type ABitOfEverything struct { OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1"` + RequiredStringField2 string `json:"requiredStringField2"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index 87eea2fbc15..c0f60f51557 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -63,4 +63,7 @@ type ABitOfEverything1 struct { OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1"` + RequiredStringField2 string `json:"requiredStringField2"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index 2303f647fa9..dd8fab2815b 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -62,4 +62,7 @@ type ABitOfEverything2 struct { OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1"` + RequiredStringField2 string `json:"requiredStringField2"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index 12fb2834b45..385b00a178c 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -62,4 +62,7 @@ type ABitOfEverything3 struct { OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1"` + RequiredStringField2 string `json:"requiredStringField2"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index 29e254857d0..55ebca92c1a 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -19,9 +19,9 @@ type ABitOfEverything4 struct { SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` Nested []ABitOfEverythingNested `json:"nested,omitempty"` // Float value field - FloatValue float32 `json:"floatValue"` - DoubleValue float64 `json:"doubleValue"` - Int64Value string `json:"int64Value"` + FloatValue float32 `json:"floatValue,omitempty"` + DoubleValue float64 `json:"doubleValue,omitempty"` + Int64Value string `json:"int64Value,omitempty"` Uint64Value string `json:"uint64Value,omitempty"` Int32Value int32 `json:"int32Value,omitempty"` Fixed64Value string `json:"fixed64Value,omitempty"` @@ -57,9 +57,12 @@ type ABitOfEverything4 struct { // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` - RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` + RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation,omitempty"` OutputOnlyStringViaFieldBehaviorAnnotation string `json:"outputOnlyStringViaFieldBehaviorAnnotation,omitempty"` OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1,omitempty"` + RequiredStringField2 string `json:"requiredStringField2,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index 2d8beaa48dd..6ba1ac60e2b 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -63,4 +63,7 @@ type ExamplepbABitOfEverything struct { OptionalStringValue string `json:"optionalStringValue,omitempty"` // Only digits are allowed. ProductId []string `json:"productId,omitempty"` + OptionalStringField string `json:"optionalStringField,omitempty"` + RequiredStringField1 string `json:"requiredStringField1"` + RequiredStringField2 string `json:"requiredStringField2"` } diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 0043fd9eae1..50a145a8114 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -136,6 +136,8 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.EnumValueAnnotation.String(), want.Uuid, want.RequiredStringViaFieldBehaviorAnnotation, + want.StringValue, + want.StringValue, nil, ) if err != nil { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 310ebbb2ccc..3b4d8bde16b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -398,6 +398,10 @@ type ABitOfEverything struct { OptionalStringValue *string `protobuf:"bytes,40,opt,name=optional_string_value,json=optionalStringValue,proto3,oneof" json:"optional_string_value,omitempty"` // Test openapiv2 generation of repeated fields ProductId []string `protobuf:"bytes,41,rep,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + // Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + OptionalStringField string `protobuf:"bytes,42,opt,name=optional_string_field,json=optionalStringField,proto3" json:"optional_string_field,omitempty"` + RequiredStringField_1 string `protobuf:"bytes,43,opt,name=required_string_field_1,json=requiredStringField1,proto3" json:"required_string_field_1,omitempty"` + RequiredStringField_2 string `protobuf:"bytes,44,opt,name=required_string_field_2,json=requiredStringField2,proto3" json:"required_string_field_2,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -719,6 +723,27 @@ func (x *ABitOfEverything) GetProductId() []string { return nil } +func (x *ABitOfEverything) GetOptionalStringField() string { + if x != nil { + return x.OptionalStringField + } + return "" +} + +func (x *ABitOfEverything) GetRequiredStringField_1() string { + if x != nil { + return x.RequiredStringField_1 + } + return "" +} + +func (x *ABitOfEverything) GetRequiredStringField_2() string { + if x != nil { + return x.RequiredStringField_2 + } + return "" +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1568,7 +1593,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe2, 0x20, 0x0a, 0x10, 0x41, + 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8e, 0x22, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, @@ -1773,217 +1798,307 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x18, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x78, 0x13, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x08, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x49, 0x64, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x63, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x31, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x31, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x32, 0x18, + 0x2c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x32, + 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, + 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, + 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, + 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, + 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, - 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, - 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, - 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0xb4, 0x02, 0x92, 0x41, + 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, + 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, + 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, + 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, + 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, - 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, - 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, - 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, - 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, - 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, - 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, - 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, - 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, - 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, + 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, + 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, + 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, - 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, + 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x53, 0x6e, + 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, + 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, + 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x77, + 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, + 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, + 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x13, + 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, + 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, + 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, + 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x10, + 0x01, 0x32, 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, + 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, + 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, + 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, - 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, - 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, - 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, - 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, + 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, + 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, @@ -1992,77 +2107,155 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, + 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, + 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, + 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, - 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, + 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, + 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, + 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, - 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, - 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, - 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, + 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, + 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, + 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, + 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, + 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, + 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, @@ -2071,455 +2264,298 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, - 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, + 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, + 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, + 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, + 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, + 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, - 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, - 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, - 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, + 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, + 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, + 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, - 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, - 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, - 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, - 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, - 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, - 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, + 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, - 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, - 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, - 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, - 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, - 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, - 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, - 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, + 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, + 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, + 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, - 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, - 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, + 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, + 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, + 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, + 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, + 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, + 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, + 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, + 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, + 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, + 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, - 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, - 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, - 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, - 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, - 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, - 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, - 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, - 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, - 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, - 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, - 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, - 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, - 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, - 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, - 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, - 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, - 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, - 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, - 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, - 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, - 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, - 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, + 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, + 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, + 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, + 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, + 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, + 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, + 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, + 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, + 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, + 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, + 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, + 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, + 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, + 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, + 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, + 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, + 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 1d518ee3153..54b9066076e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -382,6 +382,11 @@ message ABitOfEverything { min_length: 1 description: "Only digits are allowed." }]; + + // Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + string optional_string_field = 42; + string required_string_field_1 = 43 [(google.api.field_behavior) = REQUIRED]; + string required_string_field_2 = 44 [(google.api.field_behavior) = REQUIRED]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index bffe836a96f..2e9188edeb3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -521,6 +521,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -883,6 +902,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -1234,6 +1272,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -1603,6 +1660,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -1976,6 +2052,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -2056,10 +2151,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -2209,10 +2301,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -2232,6 +2321,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -2244,7 +2343,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" } @@ -2592,6 +2693,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -2936,6 +3056,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -3304,6 +3443,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -3672,6 +3830,25 @@ "pattern": "^[0-9]+$" }, "collectionFormat": "multi" + }, + { + "name": "optionalStringField", + "description": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "requiredStringField1", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "requiredStringField2", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -4172,10 +4349,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -4325,10 +4499,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -4348,6 +4519,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -4361,7 +4542,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" } @@ -4688,10 +4871,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -4841,10 +5021,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -4864,6 +5041,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -4876,7 +5063,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" } @@ -4966,10 +5155,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -5119,10 +5305,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -5142,6 +5325,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5154,7 +5347,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" } @@ -5754,10 +5949,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -5907,10 +6099,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -5930,6 +6119,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5938,12 +6137,6 @@ "description": "Find out more about ABitOfEverything", "url": "https://github.com/grpc-ecosystem/grpc-gateway" }, - "required": [ - "int64Value", - "doubleValue", - "floatValue", - "requiredStringViaFieldBehaviorAnnotation" - ], "x-a-bit-of-everything-foo": "bar" }, "updateMask": { @@ -5956,7 +6149,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ] } } @@ -6090,10 +6285,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -6243,10 +6435,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -6266,6 +6455,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -6279,7 +6478,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 67b87be1e57..d41853960ea 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -116,10 +116,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -269,10 +266,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -292,6 +286,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -305,7 +309,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index ac5182e41c7..fa8040ba024 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -242,10 +242,7 @@ "type": "number", "format": "float", "default": "0.2", - "description": "Float value field", - "required": [ - "floatValue" - ] + "description": "Float value field" }, "doubleValue": { "type": "number", @@ -395,10 +392,7 @@ }, "requiredStringViaFieldBehaviorAnnotation": { "type": "string", - "title": "mark a field as required in Open API definition", - "required": [ - "requiredStringViaFieldBehaviorAnnotation" - ] + "title": "mark a field as required in Open API definition" }, "outputOnlyStringViaFieldBehaviorAnnotation": { "type": "string", @@ -418,6 +412,16 @@ }, "description": "Only digits are allowed.", "title": "Test openapiv2 generation of repeated fields" + }, + "optionalStringField": { + "type": "string", + "title": "Test openapiv2 generation of required fields with annotation and jsonschema to reproduce" + }, + "requiredStringField1": { + "type": "string" + }, + "requiredStringField2": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -431,7 +435,9 @@ "int64Value", "doubleValue", "floatValue", - "requiredStringViaFieldBehaviorAnnotation" + "requiredStringViaFieldBehaviorAnnotation", + "requiredStringField1", + "requiredStringField2" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 92623bb6220..fc4f3011e36 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -450,10 +450,7 @@ "type": "string", "format": "int64", "default": "42", - "description": "Int value field", - "required": [ - "num" - ] + "description": "Int value field" }, "duration": { "type": "string" diff --git a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel index 966ba7c3e9e..847990d5a78 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel +++ b/protoc-gen-openapiv2/internal/genopenapi/BUILD.bazel @@ -44,6 +44,7 @@ go_test( "cycle_test.go", "format_test.go", "generator_test.go", + "helpers_test.go", "naming_test.go", "template_test.go", "types_test.go", diff --git a/protoc-gen-openapiv2/internal/genopenapi/helpers.go b/protoc-gen-openapiv2/internal/genopenapi/helpers.go index 88bf4994d84..0885be81162 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/helpers.go +++ b/protoc-gen-openapiv2/internal/genopenapi/helpers.go @@ -13,3 +13,23 @@ import ( func fieldName(k string) string { return strings.ReplaceAll(cases.Title(language.AmericanEnglish).String(k), "-", "_") } + +//this method will filter the same fields and return the unique one +func getUniqueFields(schemaFieldsRequired []string, fieldsRequired []string) []string { + var unique []string + var index *int + + for j, schemaFieldRequired := range schemaFieldsRequired { + index = nil + for i, fieldRequired := range fieldsRequired { + if schemaFieldRequired == fieldRequired { + index = &i + break + } + } + if index == nil { + unique = append(unique, schemaFieldsRequired[j]) + } + } + return unique +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/helpers_test.go b/protoc-gen-openapiv2/internal/genopenapi/helpers_test.go new file mode 100644 index 00000000000..f27f589cb1c --- /dev/null +++ b/protoc-gen-openapiv2/internal/genopenapi/helpers_test.go @@ -0,0 +1,66 @@ +package genopenapi + +import ( + "reflect" + "testing" +) + +func Test_getUniqueFields(t *testing.T) { + type args struct { + schemaFieldsRequired []string + fieldsRequired []string + } + var tests = []struct { + name string + args args + want []string + }{ + { + name: "test_1", + args: args{ + schemaFieldsRequired: []string{"Field_1", "Field_2", "Field_3"}, + fieldsRequired: []string{"Field_2"}, + }, + want: []string{"Field_1", "Field_3"}, + }, + { + name: "test_2", + args: args{ + schemaFieldsRequired: []string{"Field_1", "Field_2", "Field_3"}, + fieldsRequired: []string{"Field_3"}, + }, + want: []string{"Field_1", "Field_2"}, + }, + { + name: "test_3", + args: args{ + schemaFieldsRequired: []string{"Field_1", "Field_2", "Field_3"}, + fieldsRequired: []string{"Field_4"}, + }, + want: []string{"Field_1", "Field_2", "Field_3"}, + }, + { + name: "test_4", + args: args{ + schemaFieldsRequired: []string{"Field_1", "Field_2", "Field_3", "Field_4", "Field_5", "Field_6"}, + fieldsRequired: []string{"Field_6", "Field_4", "Field_1"}, + }, + want: []string{"Field_2", "Field_3", "Field_5"}, + }, + { + name: "test_5", + args: args{ + schemaFieldsRequired: []string{"Field_1", "Field_2", "Field_3"}, + fieldsRequired: []string{}, + }, + want: []string{"Field_1", "Field_2", "Field_3"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := getUniqueFields(tt.args.schemaFieldsRequired, tt.args.fieldsRequired); !reflect.DeepEqual(got, tt.want) { + t.Errorf("getUniqueFields() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 0649259e3e6..fc4cf85fab7 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -504,7 +504,11 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry } if fieldSchema.Required != nil { + schema.Required = getUniqueFields(schema.Required, fieldSchema.Required) schema.Required = append(schema.Required, fieldSchema.Required...) + // To avoid populating both the field schema require and message schema require, unset the field schema require. + // See issue #2635. + fieldSchema.Required = nil } kv := keyVal{Value: fieldSchema} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 31ade2aa803..94d75e39f7a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -4623,10 +4623,21 @@ func TestRenderMessagesAsDefinition(t *testing.T) { Name: proto.String("Message"), Field: []*descriptorpb.FieldDescriptorProto{ { - Name: proto.String("aRequiredField"), + Name: proto.String("FieldOne"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("FieldTwo"), Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), - Number: proto.Int32(1), - Options: requiredField, + Number: proto.Int32(2), + Options: requiredFieldOptions, + }, + { + Name: proto.String("FieldThree"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(3), + Options: requiredFieldOptions, }, }, }, @@ -4636,7 +4647,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { JsonSchema: &openapi_options.JSONSchema{ Title: "title", Description: "desc", - Required: []string{"req"}, + Required: []string{"FieldOne", "FieldTwo"}, }, }, }, @@ -4647,17 +4658,118 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, Title: "title", Description: "desc", - Required: []string{"req", "aRequiredField"}, + Required: []string{"FieldOne", "FieldTwo", "FieldThree"}, Properties: &openapiSchemaObjectProperties{ { - Key: "aRequiredField", + Key: "FieldOne", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + { + Key: "FieldTwo", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + { + Key: "FieldThree", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + }, + }, + }, + }, + { + descr: "JSONSchema with required properties", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("FieldOne"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(3), + Options: requiredFieldOptions, + }, + }, + }, + }, + schema: map[string]*openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"FieldOne"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "FieldOne", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + }, + }, + }, + }, + { + descr: "JSONSchema with required properties by using annotations", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("FieldOne"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + Options: requiredFieldOptions, + }, + }, + }, + }, + schema: map[string]*openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"FieldOne"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "FieldOne", Value: openapiSchemaObject{ schemaCore: schemaCore{ Type: "string", }, - Description: "field description", - Title: "field title", - Required: []string{"aRequiredField"}, }, }, }, @@ -4774,7 +4886,6 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, Description: "field description", Title: "field title", - Required: []string{"aRequiredField"}, }, }, }, @@ -4835,7 +4946,6 @@ func TestRenderMessagesAsDefinition(t *testing.T) { schemaCore: schemaCore{ Type: "string", }, - Required: []string{"aRequiredField"}, }, }, { From 209f8e5908959d02d04558294bf06f0a3656d9e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Aug 2022 20:31:53 +0000 Subject: [PATCH 1395/1518] fix(deps): update google.golang.org/genproto digest to e9f0532 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5c206bb42ad..05adb8d210c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1 + google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 76db582921e..8e171f4e456 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1 h1:C2UVWqrgLYKrT5nh5oU6hLRm1AeEklCK5eloQA1NtFY= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa h1:Ux9yJCyf598uEniFPSyp8g1jtGTt77m+lzYyVgrWQaQ= +google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index fb7fd5f5721..c5f379a999a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:C2UVWqrgLYKrT5nh5oU6hLRm1AeEklCK5eloQA1NtFY=", - version = "v0.0.0-20220817144833-d7fd3f11b9b1", + sum = "h1:Ux9yJCyf598uEniFPSyp8g1jtGTt77m+lzYyVgrWQaQ=", + version = "v0.0.0-20220819174105-e9f053255caa", ) go_repository( name = "org_golang_google_grpc", From 9e28ea7ae7b7bad8d54e36e7d74122e0e4a9af5a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 20:12:41 +0000 Subject: [PATCH 1396/1518] fix(deps): update golang.org/x/oauth2 digest to 0ebed06 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 05adb8d210c..e72bddc31a9 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.8 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 + golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa google.golang.org/grpc v1.48.0 diff --git a/go.sum b/go.sum index 8e171f4e456..b8ab701b181 100644 --- a/go.sum +++ b/go.sum @@ -311,8 +311,8 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 h1:dtndE8FcEta75/4kHF3AbpuWzV6f1LjnLrM4pe2SZrw= -golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index c5f379a999a..b0d263f78db 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1145,8 +1145,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:dtndE8FcEta75/4kHF3AbpuWzV6f1LjnLrM4pe2SZrw=", - version = "v0.0.0-20220808172628-8227340efae7", + sum = "h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8=", + version = "v0.0.0-20220822191816-0ebed06d0094", ) go_repository( name = "org_golang_x_sync", From 42cf1c204f136d31ca04de6f185b8d287e888203 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 00:25:53 +0000 Subject: [PATCH 1397/1518] fix(deps): update google.golang.org/genproto digest to 9e6da59 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index e72bddc31a9..24e275950a3 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa + google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index b8ab701b181..a3e2c6d8761 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa h1:Ux9yJCyf598uEniFPSyp8g1jtGTt77m+lzYyVgrWQaQ= -google.golang.org/genproto v0.0.0-20220819174105-e9f053255caa/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b0d263f78db..a60d205e17a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Ux9yJCyf598uEniFPSyp8g1jtGTt77m+lzYyVgrWQaQ=", - version = "v0.0.0-20220819174105-e9f053255caa", + sum = "h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI=", + version = "v0.0.0-20220822174746-9e6da59bd2fc", ) go_repository( name = "org_golang_google_grpc", From 0197faf8b072910084edd1209aa2ac51833b895c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Aug 2022 04:16:49 +0000 Subject: [PATCH 1398/1518] chore(deps): update dependency bazel to v5.3.0 --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index 91ff57278e3..03f488b076a 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -5.2.0 +5.3.0 From ef449fe7dab301f39d6299d59923f31453b6e825 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 23 Aug 2022 16:46:13 -0400 Subject: [PATCH 1399/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0094b0dd81f..d05abfcdf26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.18 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.2 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.3 proto_lint: runs-on: ubuntu-latest steps: From d5987dd2cb83eb48a21309b0ee994a741006866d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 03:19:55 +0000 Subject: [PATCH 1400/1518] fix(deps): update module google.golang.org/grpc to v1.49.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 12 ++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 24e275950a3..ea34898448d 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc - google.golang.org/grpc v1.48.0 + google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index a3e2c6d8761..42fc9a8ce34 100644 --- a/go.sum +++ b/go.sum @@ -615,8 +615,9 @@ google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11 google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/repositories.bzl b/repositories.bzl index a60d205e17a..a4b347d5fa1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1082,8 +1082,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=", - version = "v1.48.0", + sum = "h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw=", + version = "v1.49.0", ) go_repository( @@ -1101,8 +1101,8 @@ def go_repositories(): go_repository( name = "org_golang_x_crypto", importpath = "golang.org/x/crypto", - sum = "h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=", - version = "v0.0.0-20200622213623-75b288015ac9", + sum = "h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=", + version = "v0.0.0-20190308221718-c2843e01d9a2", ) go_repository( name = "org_golang_x_exp", @@ -1183,8 +1183,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:5Beo0mZN8dRzgrMMkDp0jc8YXQKx9DiJ2k1dkvGsn5A=", - version = "v0.0.0-20190524140312-2c0ae7006135", + sum = "h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=", + version = "v0.0.0-20180917221912-90fa682c2a6e", ) go_repository( From 6a4f528180a671f9fe276fafa3b7ce88d1512f5a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 14:45:34 +0000 Subject: [PATCH 1401/1518] fix(deps): update google.golang.org/genproto digest to 2345490 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ea34898448d..538835eb818 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc + google.golang.org/genproto v0.0.0-20220829144015-23454907ede3 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 42fc9a8ce34..2e28a30de7f 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3 h1:4wwmycAWg7WUIFWgzxP6Wumy2GBLxmATgkhgpFnJl2U= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a4b347d5fa1..e1f6996a987 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI=", - version = "v0.0.0-20220822174746-9e6da59bd2fc", + sum = "h1:4wwmycAWg7WUIFWgzxP6Wumy2GBLxmATgkhgpFnJl2U=", + version = "v0.0.0-20220829144015-23454907ede3", ) go_repository( name = "org_golang_google_grpc", From 3a111d37fd3e34f0dd5ad48e045b1e87cf46b89a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 21:26:57 +0000 Subject: [PATCH 1402/1518] fix(deps): update google.golang.org/genproto digest to 36a9c93 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 538835eb818..58dd7e650f8 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220829144015-23454907ede3 + google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2e28a30de7f..d4eba7781e9 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3 h1:4wwmycAWg7WUIFWgzxP6Wumy2GBLxmATgkhgpFnJl2U= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf h1:Q5xNKbTSFwkuaaGaR7CMcXEM5sy19KYdUU8iF8/iRC0= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e1f6996a987..e833ef56d79 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:4wwmycAWg7WUIFWgzxP6Wumy2GBLxmATgkhgpFnJl2U=", - version = "v0.0.0-20220829144015-23454907ede3", + sum = "h1:Q5xNKbTSFwkuaaGaR7CMcXEM5sy19KYdUU8iF8/iRC0=", + version = "v0.0.0-20220829175752-36a9c930ecbf", ) go_repository( name = "org_golang_google_grpc", From 7bc2511737e5f30f0976bc2ae120a4e11f5ba255 Mon Sep 17 00:00:00 2001 From: "Il Sub Bang (ethan)" Date: Wed, 31 Aug 2022 13:03:16 +0900 Subject: [PATCH 1403/1518] fix: support for imported oneof fields in request bodies (#2867) * fix: support for oneof fields in request bodies * chore: run bazelisk * chore: update buf.yaml * fix: bazelisk --- buf.yaml | 2 + examples/internal/clients/abe/BUILD.bazel | 1 + .../internal/clients/abe/api/swagger.yaml | 44 + .../abe/api_a_bit_of_everything_service.go | 157 ++ .../abe/model_oneofenum_example_enum.go | 19 + examples/internal/proto/examplepb/BUILD.bazel | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 1987 +++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 96 + .../proto/examplepb/a_bit_of_everything.proto | 8 + .../a_bit_of_everything.swagger.json | 64 + .../examplepb/a_bit_of_everything_grpc.pb.go | 37 + examples/internal/proto/oneofenum/BUILD.bazel | 29 + .../internal/proto/oneofenum/oneof_enum.pb.go | 232 ++ .../internal/proto/oneofenum/oneof_enum.proto | 16 + .../proto/oneofenum/oneof_enum.swagger.json | 43 + examples/internal/server/BUILD.bazel | 1 + .../internal/server/a_bit_of_everything.go | 5 + internal/descriptor/types.go | 20 +- internal/descriptor/types_test.go | 6 +- .../internal/gengateway/template.go | 26 +- 20 files changed, 1784 insertions(+), 1011 deletions(-) create mode 100644 examples/internal/clients/abe/model_oneofenum_example_enum.go create mode 100644 examples/internal/proto/oneofenum/BUILD.bazel create mode 100644 examples/internal/proto/oneofenum/oneof_enum.pb.go create mode 100644 examples/internal/proto/oneofenum/oneof_enum.proto create mode 100644 examples/internal/proto/oneofenum/oneof_enum.swagger.json diff --git a/buf.yaml b/buf.yaml index 472cb83f12d..86b1da1c507 100644 --- a/buf.yaml +++ b/buf.yaml @@ -60,6 +60,7 @@ lint: - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto + - examples/internal/proto/oneofenum/oneof_enum.proto - examples/internal/proto/pathenum/path_enum.proto - examples/internal/proto/sub/message.proto - examples/internal/proto/sub2/message.proto @@ -104,6 +105,7 @@ lint: - examples/internal/proto/examplepb/visibility_rule_echo_service.proto - examples/internal/proto/examplepb/use_go_template.proto - examples/internal/proto/examplepb/wrappers.proto + - examples/internal/proto/oneofenum/oneof_enum.proto - examples/internal/proto/pathenum/path_enum.proto - examples/internal/proto/sub/message.proto - examples/internal/proto/sub2/message.proto diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 15be724d6d7..8fc1bf35e49 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -36,6 +36,7 @@ go_library( "model_examplepbsnake_case_enum.go", "model_message_path_enum_nested_path_enum.go", "model_nested_deep_enum.go", + "model_oneofenum_example_enum.go", "model_pathenum_path_enum.go", "model_pathenumsnake_case_for_import.go", "model_protobuf_any.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 233178eb5af..41e0734ff89 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -3617,6 +3617,44 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/oneofenum: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_PostOneofEnum" + parameters: + - in: "body" + name: "exampleEnum" + required: true + schema: + $ref: "#/definitions/oneofenumExampleEnum" + x-exportParamName: "ExampleEnum" + responses: + 200: + description: "A successful response." + schema: + type: "object" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/example/snake/{who}/{what}/{where}: get: tags: @@ -4744,6 +4782,12 @@ definitions: - "value_c" - "value_d" default: "value_c" + oneofenumExampleEnum: + type: "string" + enum: + - "EXAMPLE_ENUM_UNSPECIFIED" + - "EXAMPLE_ENUM_FIRST" + default: "EXAMPLE_ENUM_UNSPECIFIED" pathenumPathEnum: type: "string" enum: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index c73d18a8985..bceea6a0abb 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -4899,6 +4899,163 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceOverwriteResp return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param exampleEnum + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostOneofEnum(ctx context.Context, exampleEnum OneofenumExampleEnum) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/oneofenum" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &exampleEnum + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/clients/abe/model_oneofenum_example_enum.go b/examples/internal/clients/abe/model_oneofenum_example_enum.go new file mode 100644 index 00000000000..939f0f7f192 --- /dev/null +++ b/examples/internal/clients/abe/model_oneofenum_example_enum.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type OneofenumExampleEnum string + +// List of oneofenumExampleEnum +const ( + UNSPECIFIED_OneofenumExampleEnum OneofenumExampleEnum = "EXAMPLE_ENUM_UNSPECIFIED" + FIRST_OneofenumExampleEnum OneofenumExampleEnum = "EXAMPLE_ENUM_FIRST" +) diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index 87154dddc56..fb887c73534 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -58,6 +58,7 @@ proto_library( "wrappers.proto", ], deps = [ + "//examples/internal/proto/oneofenum:oneofenum_proto", "//examples/internal/proto/pathenum:pathenum_proto", "//examples/internal/proto/sub:sub_proto", "//examples/internal/proto/sub2:sub2_proto", @@ -98,6 +99,7 @@ go_proto_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", proto = ":examplepb_proto", deps = [ + "//examples/internal/proto/oneofenum", "//examples/internal/proto/pathenum", "//examples/internal/proto/sub", "//examples/internal/proto/sub2", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 3b4d8bde16b..ffc39071087 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -7,6 +7,7 @@ package examplepb import ( + oneofenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum" pathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" sub2 "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -1535,570 +1536,494 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x30, 0x65, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x32, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, - 0x02, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xba, 0x01, 0x92, 0x41, 0xb6, 0x01, 0x2a, - 0x10, 0x78, 0x2d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x69, - 0x64, 0x32, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x4a, 0x26, - 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, - 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, - 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x8a, 0x01, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, - 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, - 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0xa2, 0x02, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x2c, 0x92, 0x41, 0x29, 0x2a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x32, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x8a, - 0x01, 0x07, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x24, 0xa2, 0x02, 0x07, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x65, 0x72, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x92, 0x41, 0x32, 0x2a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, 0x20, 0x33, 0x32, 0x7d, - 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8e, 0x22, 0x0a, 0x10, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, + 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, + 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, + 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xe1, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xba, 0x01, 0x92, + 0x41, 0xb6, 0x01, 0x2a, 0x10, 0x78, 0x2d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2d, 0x69, 0x64, 0x32, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x4a, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, + 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, + 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x8a, 0x01, 0x45, 0x5e, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, + 0x7d, 0x24, 0xa2, 0x02, 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x0d, 0x63, 0x6f, 0x72, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x51, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa0, 0x01, 0x0a, 0x0b, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x2c, 0x92, 0x41, 0x29, 0x2a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x32, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x63, + 0x6f, 0x64, 0x65, 0x8a, 0x01, 0x07, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x24, 0xa2, 0x02, 0x07, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, + 0x92, 0x41, 0x32, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, + 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, + 0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8e, + 0x22, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x75, 0x92, 0x41, 0x72, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, + 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x82, 0x03, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x02, 0x20, 0x01, 0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, + 0x75, 0x69, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, + 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, + 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, + 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x89, 0x01, - 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x75, 0x92, 0x41, - 0x72, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, - 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, - 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, - 0x32, 0x7d, 0x82, 0x03, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x12, 0x02, 0x20, 0x01, 0xca, 0x3e, 0x0b, 0xfa, 0x02, 0x08, 0x75, 0x75, 0x69, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, + 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, + 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, + 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, - 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, - 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, + 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, + 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, + 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, - 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, - 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, - 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, + 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, + 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, + 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, + 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, + 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, + 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, - 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, - 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, - 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, - 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, - 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, - 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, - 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, - 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x64, 0x0a, 0x2d, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, + 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, + 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x64, 0x0a, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, + 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, + 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x37, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x01, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x29, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2d, + 0x92, 0x41, 0x2a, 0x32, 0x18, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, + 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x78, 0x13, 0x80, + 0x01, 0x01, 0x8a, 0x01, 0x08, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, - 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x69, 0x0a, 0x30, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, - 0x79, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x69, 0x61, 0x5f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, - 0x03, 0x52, 0x2a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x69, 0x61, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, - 0x69, 0x6f, 0x72, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, - 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x13, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x29, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2d, 0x92, 0x41, 0x2a, 0x32, - 0x18, 0x4f, 0x6e, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x78, 0x13, 0x80, 0x01, 0x01, 0x8a, 0x01, - 0x08, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x24, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x2a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x31, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x31, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, + 0x64, 0x5f, 0x32, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x31, 0x12, 0x3a, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x32, 0x18, - 0x2c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x32, - 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, - 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, - 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, - 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, - 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x65, 0x6c, 0x64, 0x32, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0xb4, 0x02, 0x92, 0x41, - 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, - 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, - 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, - 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, + 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, + 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, + 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, - 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, - 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, - 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, - 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, - 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x53, 0x6e, - 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, - 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, - 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x77, - 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, - 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, - 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x13, - 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, - 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, - 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, - 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, - 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x10, - 0x01, 0x32, 0xd1, 0x33, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, - 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, - 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, - 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, - 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, - 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, + 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, + 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, + 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, + 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, + 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, + 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, + 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, + 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, + 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, + 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, + 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, + 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, + 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, + 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, - 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, - 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, + 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, + 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, + 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, + 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, + 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xea, 0x34, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, @@ -2107,155 +2032,77 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, - 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, - 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, + 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, - 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, - 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, - 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, + 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, + 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, + 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, + 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, + 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, - 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, - 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, - 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, - 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, - 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, - 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, - 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, @@ -2264,298 +2111,465 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, - 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, - 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, - 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, - 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, - 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, - 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, + 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, - 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, - 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, - 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, - 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, + 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, + 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, + 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, + 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, + 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, + 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, + 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, + 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, + 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, + 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, + 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, + 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, + 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, + 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, + 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, + 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, + 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, + 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, - 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, - 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, - 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, - 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, + 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, + 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, - 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, - 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, - 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, - 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, - 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, - 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, - 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, - 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, - 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, - 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, - 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, - 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, - 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, - 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, - 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, - 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, - 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, - 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, - 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, - 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, - 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, - 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, - 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, - 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, - 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, - 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, - 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, - 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, - 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, - 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, + 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, + 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, + 0x45, 0x6e, 0x75, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, + 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, + 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, + 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, + 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, + 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, + 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, + 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, + 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, + 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, + 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, + 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, + 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, + 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, + 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, + 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, + 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, + 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, + 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, + 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, + 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, + 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, + 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, + 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, + 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, + 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, + 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, + 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, + 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, + 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, + 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, + 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, + 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, + 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, + 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, + 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, + 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, + 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, + 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, + 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, + 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2606,7 +2620,8 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = [ (*durationpb.Duration)(nil), // 30: google.protobuf.Duration (*pathenum.MessageWithPathEnum)(nil), // 31: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum (*pathenum.MessageWithNestedPathEnum)(nil), // 32: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*wrapperspb.StringValue)(nil), // 33: google.protobuf.StringValue + (*oneofenum.OneofEnumMessage)(nil), // 33: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage + (*wrapperspb.StringValue)(nil), // 34: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ 5, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject @@ -2669,43 +2684,45 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = [ 6, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything 6, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything 6, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 60: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 23, // 61: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 15, // 62: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest - 6, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 12, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 12, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 6, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 23, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 23, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 23, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 7, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 29, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 6, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 23, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 23, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 23, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 23, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 6, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 33, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 23, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 23, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 8, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 23, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 23, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 6, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 92: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 23, // 93: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 16, // 94: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse - 63, // [63:95] is the sub-list for method output_type - 31, // [31:63] is the sub-list for method input_type + 33, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage + 23, // 61: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 23, // 62: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 15, // 63: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest + 6, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 12, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 12, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 23, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 23, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 23, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 7, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 29, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 23, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 23, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 23, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 23, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 6, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 34, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 23, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 23, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 8, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 23, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 23, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 6, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 23, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty + 23, // 94: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 23, // 95: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 16, // 96: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse + 64, // [64:97] is the sub-list for method output_type + 31, // [31:64] is the sub-list for method input_type 31, // [31:31] is the sub-list for extension type_name 31, // [31:31] is the sub-list for extension extendee 0, // [0:31] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 83847db7a30..d81c2b123b4 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -13,6 +13,7 @@ import ( "io" "net/http" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -2671,6 +2672,50 @@ func local_request_ABitOfEverythingService_TraceRequest_0(ctx context.Context, m } +func request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq oneofenum.OneofEnumMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if protoReq.One == nil { + protoReq.One = &oneofenum.OneofEnumMessage_ExampleEnum{} + } else if _, ok := protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum); !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *oneofenum.OneofEnumMessage_ExampleEnum, but: %t\n", protoReq.One) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum).ExampleEnum); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.PostOneofEnum(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq oneofenum.OneofEnumMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if protoReq.One == nil { + protoReq.One = &oneofenum.OneofEnumMessage_ExampleEnum{} + } else if _, ok := protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum); !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *oneofenum.OneofEnumMessage_ExampleEnum, but: %t\n", protoReq.One) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.One.(*oneofenum.OneofEnumMessage_ExampleEnum).ExampleEnum); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.PostOneofEnum(ctx, &protoReq) + return msg, metadata, err + +} + func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -3601,6 +3646,31 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_PostOneofEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum", runtime.WithHTTPPathPattern("/v1/example/oneofenum")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -4414,6 +4484,28 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_PostOneofEnum_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum", runtime.WithHTTPPathPattern("/v1/example/oneofenum")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PostOneofEnum_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -4481,6 +4573,8 @@ var ( pattern_ABitOfEverythingService_CustomOptionsRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_TraceRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) + + pattern_ABitOfEverythingService_PostOneofEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "oneofenum"}, "")) ) var ( @@ -4547,6 +4641,8 @@ var ( forward_ABitOfEverythingService_CustomOptionsRequest_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_TraceRequest_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_PostOneofEnum_0 = runtime.ForwardResponseMessage ) // RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 54b9066076e..527ac889784 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package grpc.gateway.examples.internal.proto.examplepb; +import "examples/internal/proto/oneofenum/oneof_enum.proto"; import "examples/internal/proto/pathenum/path_enum.proto"; import "examples/internal/proto/sub/message.proto"; import "examples/internal/proto/sub2/message.proto"; @@ -778,6 +779,13 @@ service ABitOfEverythingService { } }; } + + rpc PostOneofEnum(grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/example/oneofenum" + body: "example_enum" + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 2e9188edeb3..c81ab3c9d37 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -4555,6 +4555,62 @@ ] } }, + "/v1/example/oneofenum": { + "post": { + "operationId": "ABitOfEverythingService_PostOneofEnum", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "exampleEnum", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/oneofenumExampleEnum" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/snake/{who}/{what}/{where}": { "get": { "operationId": "SnakeEnumService_SnakeEnum", @@ -6716,6 +6772,14 @@ "description": "- value_c: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE\n - value_d: buf:lint:ignore ENUM_VALUE_UPPER_SNAKE_CASE", "title": "Ignoring lint warnings as this enum type exist to validate proper functionality\nfor projects that don't follow these lint rules.\nbuf:lint:ignore ENUM_PASCAL_CASE" }, + "oneofenumExampleEnum": { + "type": "string", + "enum": [ + "EXAMPLE_ENUM_UNSPECIFIED", + "EXAMPLE_ENUM_FIRST" + ], + "default": "EXAMPLE_ENUM_UNSPECIFIED" + }, "pathenumPathEnum": { "type": "string", "enum": [ diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index fd444cb0579..4227137bd23 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -4,6 +4,7 @@ package examplepb import ( context "context" + oneofenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum" pathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" sub2 "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -64,6 +65,7 @@ type ABitOfEverythingServiceClient interface { Exists(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) CustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) TraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + PostOneofEnum(ctx context.Context, in *oneofenum.OneofEnumMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) } type aBitOfEverythingServiceClient struct { @@ -335,6 +337,15 @@ func (c *aBitOfEverythingServiceClient) TraceRequest(ctx context.Context, in *AB return out, nil } +func (c *aBitOfEverythingServiceClient) PostOneofEnum(ctx context.Context, in *oneofenum.OneofEnumMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. // All implementations should embed UnimplementedABitOfEverythingServiceServer // for forward compatibility @@ -379,6 +390,7 @@ type ABitOfEverythingServiceServer interface { Exists(context.Context, *ABitOfEverything) (*emptypb.Empty, error) CustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error) TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + PostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) } // UnimplementedABitOfEverythingServiceServer should be embedded to have forward compatible implementations. @@ -472,6 +484,9 @@ func (UnimplementedABitOfEverythingServiceServer) CustomOptionsRequest(context.C func (UnimplementedABitOfEverythingServiceServer) TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method TraceRequest not implemented") } +func (UnimplementedABitOfEverythingServiceServer) PostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostOneofEnum not implemented") +} // UnsafeABitOfEverythingServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ABitOfEverythingServiceServer will @@ -1006,6 +1021,24 @@ func _ABitOfEverythingService_TraceRequest_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_PostOneofEnum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(oneofenum.OneofEnumMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).PostOneofEnum(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostOneofEnum", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).PostOneofEnum(ctx, req.(*oneofenum.OneofEnumMessage)) + } + return interceptor(ctx, in, info, handler) +} + // ABitOfEverythingService_ServiceDesc is the grpc.ServiceDesc for ABitOfEverythingService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1129,6 +1162,10 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "TraceRequest", Handler: _ABitOfEverythingService_TraceRequest_Handler, }, + { + MethodName: "PostOneofEnum", + Handler: _ABitOfEverythingService_PostOneofEnum_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", diff --git a/examples/internal/proto/oneofenum/BUILD.bazel b/examples/internal/proto/oneofenum/BUILD.bazel new file mode 100644 index 00000000000..22e1a938ef7 --- /dev/null +++ b/examples/internal/proto/oneofenum/BUILD.bazel @@ -0,0 +1,29 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +package(default_visibility = ["//visibility:public"]) + +proto_library( + name = "oneofenum_proto", + srcs = ["oneof_enum.proto"], +) + +go_proto_library( + name = "oneofenum_go_proto", + compilers = ["//:go_apiv2"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum", + proto = ":oneofenum_proto", +) + +go_library( + name = "oneofenum", + embed = [":oneofenum_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum", +) + +alias( + name = "go_default_library", + actual = ":oneofenum", + visibility = ["//examples:__subpackages__"], +) diff --git a/examples/internal/proto/oneofenum/oneof_enum.pb.go b/examples/internal/proto/oneofenum/oneof_enum.pb.go new file mode 100644 index 00000000000..3a728cbdaf6 --- /dev/null +++ b/examples/internal/proto/oneofenum/oneof_enum.pb.go @@ -0,0 +1,232 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1 +// protoc (unknown) +// source: examples/internal/proto/oneofenum/oneof_enum.proto + +package oneofenum + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExampleEnum int32 + +const ( + ExampleEnum_EXAMPLE_ENUM_UNSPECIFIED ExampleEnum = 0 + ExampleEnum_EXAMPLE_ENUM_FIRST ExampleEnum = 1 +) + +// Enum value maps for ExampleEnum. +var ( + ExampleEnum_name = map[int32]string{ + 0: "EXAMPLE_ENUM_UNSPECIFIED", + 1: "EXAMPLE_ENUM_FIRST", + } + ExampleEnum_value = map[string]int32{ + "EXAMPLE_ENUM_UNSPECIFIED": 0, + "EXAMPLE_ENUM_FIRST": 1, + } +) + +func (x ExampleEnum) Enum() *ExampleEnum { + p := new(ExampleEnum) + *p = x + return p +} + +func (x ExampleEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExampleEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes[0].Descriptor() +} + +func (ExampleEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes[0] +} + +func (x ExampleEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ExampleEnum.Descriptor instead. +func (ExampleEnum) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP(), []int{0} +} + +type OneofEnumMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to One: + // *OneofEnumMessage_ExampleEnum + One isOneofEnumMessage_One `protobuf_oneof:"one"` +} + +func (x *OneofEnumMessage) Reset() { + *x = OneofEnumMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OneofEnumMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OneofEnumMessage) ProtoMessage() {} + +func (x *OneofEnumMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OneofEnumMessage.ProtoReflect.Descriptor instead. +func (*OneofEnumMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP(), []int{0} +} + +func (m *OneofEnumMessage) GetOne() isOneofEnumMessage_One { + if m != nil { + return m.One + } + return nil +} + +func (x *OneofEnumMessage) GetExampleEnum() ExampleEnum { + if x, ok := x.GetOne().(*OneofEnumMessage_ExampleEnum); ok { + return x.ExampleEnum + } + return ExampleEnum_EXAMPLE_ENUM_UNSPECIFIED +} + +type isOneofEnumMessage_One interface { + isOneofEnumMessage_One() +} + +type OneofEnumMessage_ExampleEnum struct { + ExampleEnum ExampleEnum `protobuf:"varint,1,opt,name=example_enum,json=exampleEnum,proto3,enum=grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum,oneof"` +} + +func (*OneofEnumMessage_ExampleEnum) isOneofEnumMessage_One() {} + +var File_examples_internal_proto_oneofenum_oneof_enum_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc = []byte{ + 0x0a, 0x32, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, + 0x6e, 0x75, 0x6d, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, + 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x7b, 0x0a, 0x10, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x0c, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x0b, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x05, 0x0a, 0x03, 0x6f, 0x6e, + 0x65, 0x2a, 0x43, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, + 0x0a, 0x12, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, + 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescOnce sync.Once + file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData = file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc +) + +func file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescGZIP() []byte { + file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData) + }) + return file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDescData +} + +var file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes = []interface{}{ + (ExampleEnum)(0), // 0: grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum + (*OneofEnumMessage)(nil), // 1: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage +} +var file_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage.example_enum:type_name -> grpc.gateway.examples.internal.proto.oneofenum.ExampleEnum + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_oneofenum_oneof_enum_proto_init() } +func file_examples_internal_proto_oneofenum_oneof_enum_proto_init() { + if File_examples_internal_proto_oneofenum_oneof_enum_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OneofEnumMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*OneofEnumMessage_ExampleEnum)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc, + NumEnums: 1, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs, + EnumInfos: file_examples_internal_proto_oneofenum_oneof_enum_proto_enumTypes, + MessageInfos: file_examples_internal_proto_oneofenum_oneof_enum_proto_msgTypes, + }.Build() + File_examples_internal_proto_oneofenum_oneof_enum_proto = out.File + file_examples_internal_proto_oneofenum_oneof_enum_proto_rawDesc = nil + file_examples_internal_proto_oneofenum_oneof_enum_proto_goTypes = nil + file_examples_internal_proto_oneofenum_oneof_enum_proto_depIdxs = nil +} diff --git a/examples/internal/proto/oneofenum/oneof_enum.proto b/examples/internal/proto/oneofenum/oneof_enum.proto new file mode 100644 index 00000000000..2aae719ec09 --- /dev/null +++ b/examples/internal/proto/oneofenum/oneof_enum.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; + +package grpc.gateway.examples.internal.proto.oneofenum; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum"; + +enum ExampleEnum { + EXAMPLE_ENUM_UNSPECIFIED = 0; + EXAMPLE_ENUM_FIRST = 1; +} + +message OneofEnumMessage { + oneof one { + ExampleEnum example_enum = 1; + } +} diff --git a/examples/internal/proto/oneofenum/oneof_enum.swagger.json b/examples/internal/proto/oneofenum/oneof_enum.swagger.json new file mode 100644 index 00000000000..154d7ba09b2 --- /dev/null +++ b/examples/internal/proto/oneofenum/oneof_enum.swagger.json @@ -0,0 +1,43 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/internal/proto/oneofenum/oneof_enum.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index e990dbcedc7..cc54a6ae5c5 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -17,6 +17,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server", deps = [ "//examples/internal/proto/examplepb", + "//examples/internal/proto/oneofenum", "//examples/internal/proto/pathenum", "//examples/internal/proto/standalone", "//examples/internal/proto/sub", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index f86fee742ba..2cf15d56d4e 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -9,6 +9,7 @@ import ( "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/oneofenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -406,3 +407,7 @@ func (s *_ABitOfEverythingServer) CustomOptionsRequest(ctx context.Context, msg func (s *_ABitOfEverythingServer) TraceRequest(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { return msg, nil } + +func (s *_ABitOfEverythingServer) PostOneofEnum(ctx context.Context, msg *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) { + return new(emptypb.Empty), nil +} diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index 7768d5e2f90..bb487f4dace 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -323,14 +323,14 @@ type Body struct { // AssignableExpr returns an assignable expression in Go to be used to initialize method request object. // It starts with "msgExpr", which is the go expression of the method request object. -func (b Body) AssignableExpr(msgExpr string) string { - return b.FieldPath.AssignableExpr(msgExpr) +func (b Body) AssignableExpr(msgExpr string, currentPackage string) string { + return b.FieldPath.AssignableExpr(msgExpr, currentPackage) } // AssignableExprPrep returns preparatory statements for an assignable expression to initialize the // method request object. -func (b Body) AssignableExprPrep(msgExpr string) string { - return b.FieldPath.AssignableExprPrep(msgExpr) +func (b Body) AssignableExprPrep(msgExpr string, currentPackage string) string { + return b.FieldPath.AssignableExprPrep(msgExpr, currentPackage) } // FieldPath is a path to a field from a request message. @@ -365,7 +365,7 @@ func (p FieldPath) IsOptionalProto3() bool { // It starts with "msgExpr", which is the go expression of the method request object. Before using // such an expression the prep statements must be emitted first, in case the field path includes // a oneof. See FieldPath.AssignableExprPrep. -func (p FieldPath) AssignableExpr(msgExpr string) string { +func (p FieldPath) AssignableExpr(msgExpr string, currentPackage string) string { l := len(p) if l == 0 { return msgExpr @@ -380,10 +380,10 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { index := c.Target.OneofIndex msg := c.Target.Message oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) - oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() + oneofFieldName := msg.GoType(currentPackage) + "_" + c.AssignableExpr() if c.Target.ForcePrefixedName { - oneofFieldName = msg.File.Pkg() + "." + oneofFieldName + oneofFieldName = msg.File.Pkg() + "." + msg.GetName() + "_" + c.AssignableExpr() } components = components + "." + oneOfName + ".(*" + oneofFieldName + ")" @@ -401,7 +401,7 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { // AssignableExprPrep returns preparation statements for an assignable expression to assign a value // to the target field. The Go expression of the method request object is "msgExpr". This is only // needed for field paths that contain oneofs. Otherwise, an empty string is returned. -func (p FieldPath) AssignableExprPrep(msgExpr string) string { +func (p FieldPath) AssignableExprPrep(msgExpr string, currentPackage string) string { l := len(p) if l == 0 { return "" @@ -417,10 +417,10 @@ func (p FieldPath) AssignableExprPrep(msgExpr string) string { index := c.Target.OneofIndex msg := c.Target.Message oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) - oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() + oneofFieldName := msg.GoType(currentPackage) + "_" + c.AssignableExpr() if c.Target.ForcePrefixedName { - oneofFieldName = msg.File.Pkg() + "." + oneofFieldName + oneofFieldName = msg.File.Pkg() + "." + msg.GetName() + "_" + c.AssignableExpr() } components = components + "." + oneOfName diff --git a/internal/descriptor/types_test.go b/internal/descriptor/types_test.go index 18877643a68..ba9737a17d3 100644 --- a/internal/descriptor/types_test.go +++ b/internal/descriptor/types_test.go @@ -185,7 +185,7 @@ func TestFieldPath(t *testing.T) { Target: nest1.Fields[1], }, } - if got, want := fp.AssignableExpr("resp"), "resp.GetNestField().Nest2Field.GetNestField().TerminalField"; got != want { + if got, want := fp.AssignableExpr("resp", "example"), "resp.GetNestField().Nest2Field.GetNestField().TerminalField"; got != want { t.Errorf("fp.AssignableExpr(%q) = %q; want %q", "resp", got, want) } @@ -195,12 +195,12 @@ func TestFieldPath(t *testing.T) { Target: nest2.Fields[1], }, } - if got, want := fp2.AssignableExpr("resp"), "resp.Nest2Field.GetNestField().Nest2Field.TerminalField"; got != want { + if got, want := fp2.AssignableExpr("resp", "example"), "resp.Nest2Field.GetNestField().Nest2Field.TerminalField"; got != want { t.Errorf("fp2.AssignableExpr(%q) = %q; want %q", "resp", got, want) } var fpEmpty FieldPath - if got, want := fpEmpty.AssignableExpr("resp"), "resp"; got != want { + if got, want := fpEmpty.AssignableExpr("resp", "example"), "resp"; got != want { t.Errorf("fpEmpty.AssignableExpr(%q) = %q; want %q", "resp", got, want) } } diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index bd1998cbc2b..43d3c00ac04 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -327,11 +327,11 @@ var ( if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - {{- $protoReq := .Body.AssignableExprPrep "protoReq" -}} + {{- $protoReq := .Body.AssignableExprPrep "protoReq" .Method.Service.File.GoPkg.Path -}} {{- if ne "" $protoReq }} {{printf "%s" $protoReq }} {{- end}} - if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq" .Method.Service.File.GoPkg.Path}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} @@ -381,11 +381,11 @@ var ( return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{else}} - {{- $protoReq := $param.AssignableExprPrep "protoReq" -}} + {{- $protoReq := $param.AssignableExprPrep "protoReq" $binding.Method.Service.File.GoPkg.Path -}} {{- if ne "" $protoReq }} {{printf "%s" $protoReq }} {{- end}} - {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } @@ -395,9 +395,9 @@ var ( for i, v := range es { s[i] = {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}(v) } - {{$param.AssignableExpr "protoReq"}} = s + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}} = s {{else if $enum}} - {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) {{end}} {{end}} {{end}} @@ -496,11 +496,11 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - {{- $protoReq := .Body.AssignableExprPrep "protoReq" -}} + {{- $protoReq := .Body.AssignableExprPrep "protoReq" .Method.Service.File.GoPkg.Path -}} {{- if ne "" $protoReq }} {{printf "%s" $protoReq }} {{- end}} - if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq"}}); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&{{.Body.AssignableExpr "protoReq" .Method.Service.File.GoPkg.Path}}); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} @@ -550,11 +550,11 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } {{else}} - {{- $protoReq := $param.AssignableExprPrep "protoReq" -}} + {{- $protoReq := $param.AssignableExprPrep "protoReq" $binding.Method.Service.File.GoPkg.Path -}} {{- if ne "" $protoReq }} {{printf "%s" $protoReq }} {{- end}} - {{$param.AssignableExpr "protoReq"}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}}, err = {{$param.ConvertFuncExpr}}(val{{if $param.IsRepeated}}, {{$binding.Registry.GetRepeatedPathParamSeparator | printf "%c" | printf "%q"}}{{end}}) if err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", {{$param | printf "%q"}}, err) } @@ -565,9 +565,9 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct for i, v := range es { s[i] = {{$enum.GoType $param.Method.Service.File.GoPkg.Path}}(v) } - {{$param.AssignableExpr "protoReq"}} = s + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}} = s {{else if $enum}} - {{$param.AssignableExpr "protoReq"}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) + {{$param.AssignableExpr "protoReq" $binding.Method.Service.File.GoPkg.Path}} = {{$enum.GoType $param.Method.Service.File.GoPkg.Path | camelIdentifier}}(e) {{end}} {{end}} {{end}} @@ -745,7 +745,7 @@ type response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} struct { func (m response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}) XXX_ResponseBody() interface{} { response := m.Message.(*{{$m.ResponseType.GoType $m.Service.File.GoPkg.Path}}) - return {{$b.ResponseBody.AssignableExpr "response"}} + return {{$b.ResponseBody.AssignableExpr "response" $m.Service.File.GoPkg.Path}} } {{end}} {{end}} From e8ea5bde418a534334e8a34db7103b2db72be672 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 15:49:30 +0000 Subject: [PATCH 1404/1518] chore(deps): update dependency bazel_skylib to v1.3.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 767dae2be11..84df8852877 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -13,10 +13,10 @@ http_archive( http_archive( name = "bazel_skylib", - sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728", + sha256 = "74d544d96f4a5bb630d465ca8bbcfe231e3594e5aae57e1edbf17a6eb3ca2506", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz", ], ) From 660400cf774a51e6bf1969e7651adcf1ae1637bc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 2 Sep 2022 16:06:50 +0000 Subject: [PATCH 1405/1518] fix(deps): update google.golang.org/genproto digest to 2234105 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 58dd7e650f8..b7e311b18dd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf + google.golang.org/genproto v0.0.0-20220902135211-223410557253 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index d4eba7781e9..b7d187b6734 100644 --- a/go.sum +++ b/go.sum @@ -582,8 +582,8 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf h1:Q5xNKbTSFwkuaaGaR7CMcXEM5sy19KYdUU8iF8/iRC0= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220902135211-223410557253 h1:vXJMM8Shg7TGaYxZsQ++A/FOSlbDmDtWhS/o+3w/hj4= +google.golang.org/genproto v0.0.0-20220902135211-223410557253/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e833ef56d79..2d775da7e94 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1076,8 +1076,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Q5xNKbTSFwkuaaGaR7CMcXEM5sy19KYdUU8iF8/iRC0=", - version = "v0.0.0-20220829175752-36a9c930ecbf", + sum = "h1:vXJMM8Shg7TGaYxZsQ++A/FOSlbDmDtWhS/o+3w/hj4=", + version = "v0.0.0-20220902135211-223410557253", ) go_repository( name = "org_golang_google_grpc", From 6efdab108825329ff4b76940ca8edd1807ca8931 Mon Sep 17 00:00:00 2001 From: Jonathan Ingram Date: Mon, 5 Sep 2022 14:54:06 +1000 Subject: [PATCH 1406/1518] mux: calculate verb correctly for cases like DELETE /foo/bar:archive when user provided wrong method (#2870) * add failing test for DELETE /foo/bar:archive when method is wrong The method the user meant was POST, which is supported. DELETE is not supported, but I believe this should be NotImplemented, not NotFound. * calculate verb in each handler --- runtime/mux.go | 23 +++++++++++++++++------ runtime/mux_test.go | 13 +++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 8ba71a9e050..1128592d6d9 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -343,8 +343,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } - // Verb out here is to memoize for the fallback case below - var verb string + lastComponent := components[len(components)-1] for _, h := range s.handlers[r.Method] { // If the pattern has a verb, explicitly look for a suffix in the last @@ -355,10 +354,11 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { // parser because we know what verb we're looking for, however, there // are still some cases that the parser itself cannot disambiguate. See // the comment there if interested. + + var verb string patVerb := h.pat.Verb() - l := len(components) - lastComponent := components[l-1] - var idx int = -1 + + idx := -1 if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) { idx = len(lastComponent) - len(patVerb) - 1 } @@ -368,7 +368,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } if idx > 0 { - components[l-1], verb = lastComponent[:idx], lastComponent[idx+1:] + components[len(components)-1], verb = lastComponent[:idx], lastComponent[idx+1:] } pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) @@ -394,6 +394,17 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { continue } for _, h := range handlers { + var verb string + patVerb := h.pat.Verb() + + idx := -1 + if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) { + idx = len(lastComponent) - len(patVerb) - 1 + } + if idx > 0 { + components[len(components)-1], verb = lastComponent[:idx], lastComponent[idx+1:] + } + pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) if err != nil { var mse MalformedSequenceError diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 787df38c64c..06bba472f88 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -117,6 +117,19 @@ func TestMuxServeHTTP(t *testing.T) { reqPath: "/foo", respStatus: http.StatusNotImplemented, }, + { + patterns: []stubPattern{ + { + method: "POST", + ops: []int{int(utilities.OpLitPush), 0, int(utilities.OpPush), 0, int(utilities.OpConcatN), 1, int(utilities.OpCapture), 1}, + pool: []string{"foo", "id"}, + verb: "archive", + }, + }, + reqMethod: "DELETE", + reqPath: "/foo/bar:archive", + respStatus: http.StatusNotImplemented, + }, { patterns: []stubPattern{ { From 1323d4bd98b43359507ced8e7aa77f842eda0a0d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 6 Sep 2022 11:24:11 -0700 Subject: [PATCH 1407/1518] Update googleapis dependency (#2875) Uses the slimmer version of googleapis. See https://docs.buf.build/faq#googleapis-failure for more information. --- buf.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buf.lock b/buf.lock index b0c2371a7fd..feb8c62fd64 100644 --- a/buf.lock +++ b/buf.lock @@ -4,4 +4,4 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - commit: 8bb768d6ffdf4397a969703e17229c64 + commit: 62f35d8aed1149c291d606d958a7ce32 From 77412730fb81909bb8fb10cb984e17ebed58ce4e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Sep 2022 23:52:32 +0000 Subject: [PATCH 1408/1518] chore(deps): update golang docker tag to v1.19.1 --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index f9020ed56cf..4ee4250c228 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.0 +FROM golang:1.19.1 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index c618ec3067a..320884c894e 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.0 as builder +FROM golang:1.19.1 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index 2839f43ef95..db12c09ee9d 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.0 as builder +FROM golang:1.19.1 as builder ARG RELEASE_VERSION From a6a5ee5a6d401d1f07e96b56cc6d02e4549d52a1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:02:35 -0400 Subject: [PATCH 1409/1518] chore(deps): pin dependencies (#2877) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 34 +++++++++++++++++----------------- .github/workflows/master.yml | 4 ++-- .github/workflows/release.yml | 18 +++++++++--------- .github/workflows/renovate.yml | 6 +++--- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d05abfcdf26..b7862c7265b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,27 +11,27 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/setup-go@v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: ${{ matrix.go-version }} - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: go build ./... test: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: go test ./... node_test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 with: node-version: 10 - - uses: actions/setup-go@v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - run: > @@ -48,7 +48,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: make install - run: make clean - run: make generate @@ -63,8 +63,8 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/cache@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/cache@fd5de65bc895cf536527842281bea11763fefd77 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} @@ -93,8 +93,8 @@ jobs: gorelease: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: 1.18 check-latest: true @@ -102,8 +102,8 @@ jobs: proto_lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - run: make install @@ -116,8 +116,8 @@ jobs: pull-requests: read # for golangci/golangci-lint-action to fetch pull requests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: golangci/golangci-lint-action@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: golangci/golangci-lint-action@537aa1903e5d359d0b27dbc19ddd22c5087f3fbc # tag=v3 with: version: v1.45 args: --enable goimports @@ -139,7 +139,7 @@ jobs: dry-run: false language: go - name: Upload Crash - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3 if: failure() && steps.build.outcome == 'success' with: name: artifacts diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 5d91e321018..35036aa6f21 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -11,8 +11,8 @@ jobs: proto_push: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - run: make install diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 560ac088e73..8bc746f828c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,13 +13,13 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 - - uses: actions/setup-go@v3 + - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: goreleaser/goreleaser-action@v3 + - uses: goreleaser/goreleaser-action@ff11ca24a9b39f2d36796d1fbd7a4e39c182630a # tag=v3 id: run-goreleaser with: args: release --rm-dist @@ -40,7 +40,7 @@ jobs: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@bdd89e60dc5387d8f819bebc702987956bcd4913 # tag=v1.2.0 with: base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" upload-assets: true # upload to a new release @@ -48,9 +48,9 @@ jobs: push_bsr_plugins: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: docker/setup-buildx-action@v2 - - uses: docker/login-action@v2 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 + - uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # tag=v2 with: registry: plugins.buf.build username: grpcgatewaybot @@ -61,7 +61,7 @@ jobs: - name: Set grpc-version run: echo ::set-output name=version::$(go list -m -f '{{.Version}}' google.golang.org/grpc) id: grpc-version - - uses: docker/build-push-action@v3 + - uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94 # tag=v3 with: push: true tags: plugins.buf.build/grpc-ecosystem/grpc-gateway:${{ github.ref_name }}-1 @@ -71,7 +71,7 @@ jobs: RELEASE_VERSION=${{ github.ref_name }} GO_PROTOBUF_RELEASE_VERSION=${{ steps.protobuf-version.outputs.version }} GO_GRPC_RELEASE_VERSION=${{ steps.grpc-version.outputs.version }} - - uses: docker/build-push-action@v3 + - uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94 # tag=v3 with: push: true tags: plugins.buf.build/grpc-ecosystem/openapiv2:${{ github.ref_name }}-1 diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 374620444e6..c7bd5a6afcf 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -15,11 +15,11 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - - uses: actions/cache@v3 + - uses: actions/cache@fd5de65bc895cf536527842281bea11763fefd77 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} @@ -57,7 +57,7 @@ jobs: # git conflicts - update_repositoriesbzl steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} From 73e0eb726c246671c1631d746cd9c0839d0baddd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Sep 2022 13:58:41 +0000 Subject: [PATCH 1410/1518] fix(deps): update module github.com/google/go-cmp to v0.5.9 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index b7e311b18dd..8a303ab5728 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v1.0.0 github.com/golang/glog v1.0.0 github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.8 + github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 diff --git a/go.sum b/go.sum index b7d187b6734..328b0a1809c 100644 --- a/go.sum +++ b/go.sum @@ -139,8 +139,9 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= diff --git a/repositories.bzl b/repositories.bzl index 2d775da7e94..6701bcbd3f5 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -317,8 +317,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=", - version = "v0.5.8", + sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", + version = "v0.5.9", ) go_repository( From c37ecc1812fde2145fa5e80000a6b0d259ec05ed Mon Sep 17 00:00:00 2001 From: Evan Rademacher <44209290+erademacher@users.noreply.github.com> Date: Thu, 8 Sep 2022 17:24:40 -0700 Subject: [PATCH 1411/1518] protoc-gen-openapiv2: RPC visibility setting transitively applied to messages (#2880) * protoc-gen-openapiv2: RPC visibility setting transitively applied to messages Addresses issue #2691. Skip hidden methods in findServicesMessagesAndEnumerations. * Add submessage and enum visibility tests * fix lint error in visibility proto --- .../visibility_rule_echo_service.pb.go | 422 +++++++++++++----- .../visibility_rule_echo_service.proto | 25 +- .../visibility_rule_echo_service_grpc.pb.go | 10 +- ...iew_and_internal_echo_service.swagger.json | 34 +- ...ity_rule_preview_echo_service.swagger.json | 34 +- .../internal/genopenapi/template.go | 4 + 6 files changed, 419 insertions(+), 110 deletions(-) diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go index b40bf7d05eb..10aecccbd45 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go @@ -33,6 +33,52 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// EnumInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +type VisibilityRuleEnumInPreviewMethod int32 + +const ( + VisibilityRuleEnumInPreviewMethod_VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED VisibilityRuleEnumInPreviewMethod = 0 +) + +// Enum value maps for VisibilityRuleEnumInPreviewMethod. +var ( + VisibilityRuleEnumInPreviewMethod_name = map[int32]string{ + 0: "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED", + } + VisibilityRuleEnumInPreviewMethod_value = map[string]int32{ + "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED": 0, + } +) + +func (x VisibilityRuleEnumInPreviewMethod) Enum() *VisibilityRuleEnumInPreviewMethod { + p := new(VisibilityRuleEnumInPreviewMethod) + *p = x + return p +} + +func (x VisibilityRuleEnumInPreviewMethod) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VisibilityRuleEnumInPreviewMethod) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0].Descriptor() +} + +func (VisibilityRuleEnumInPreviewMethod) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0] +} + +func (x VisibilityRuleEnumInPreviewMethod) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VisibilityRuleEnumInPreviewMethod.Descriptor instead. +func (VisibilityRuleEnumInPreviewMethod) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{0} +} + type VisibilityRuleSimpleMessage_VisibilityEnum int32 const ( @@ -69,11 +115,11 @@ func (x VisibilityRuleSimpleMessage_VisibilityEnum) String() string { } func (VisibilityRuleSimpleMessage_VisibilityEnum) Descriptor() protoreflect.EnumDescriptor { - return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0].Descriptor() + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[1].Descriptor() } func (VisibilityRuleSimpleMessage_VisibilityEnum) Type() protoreflect.EnumType { - return &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[0] + return &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes[1] } func (x VisibilityRuleSimpleMessage_VisibilityEnum) Number() protoreflect.EnumNumber { @@ -365,6 +411,122 @@ func (*VisibilityRuleSimpleMessage_En) isVisibilityRuleSimpleMessage_Ext() {} func (*VisibilityRuleSimpleMessage_No) isVisibilityRuleSimpleMessage_Ext() {} +// MessageInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +type VisibilityRuleMessageInPreviewMethod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + SubMessage *VisibilityRuleSubMessageInPreviewMethod `protobuf:"bytes,2,opt,name=sub_message,json=subMessage,proto3" json:"sub_message,omitempty"` + Enum VisibilityRuleEnumInPreviewMethod `protobuf:"varint,3,opt,name=enum,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod" json:"enum,omitempty"` +} + +func (x *VisibilityRuleMessageInPreviewMethod) Reset() { + *x = VisibilityRuleMessageInPreviewMethod{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VisibilityRuleMessageInPreviewMethod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisibilityRuleMessageInPreviewMethod) ProtoMessage() {} + +func (x *VisibilityRuleMessageInPreviewMethod) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisibilityRuleMessageInPreviewMethod.ProtoReflect.Descriptor instead. +func (*VisibilityRuleMessageInPreviewMethod) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{2} +} + +func (x *VisibilityRuleMessageInPreviewMethod) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VisibilityRuleMessageInPreviewMethod) GetSubMessage() *VisibilityRuleSubMessageInPreviewMethod { + if x != nil { + return x.SubMessage + } + return nil +} + +func (x *VisibilityRuleMessageInPreviewMethod) GetEnum() VisibilityRuleEnumInPreviewMethod { + if x != nil { + return x.Enum + } + return VisibilityRuleEnumInPreviewMethod_VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED +} + +// SubMessageInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +type VisibilityRuleSubMessageInPreviewMethod struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *VisibilityRuleSubMessageInPreviewMethod) Reset() { + *x = VisibilityRuleSubMessageInPreviewMethod{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VisibilityRuleSubMessageInPreviewMethod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VisibilityRuleSubMessageInPreviewMethod) ProtoMessage() {} + +func (x *VisibilityRuleSubMessageInPreviewMethod) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VisibilityRuleSubMessageInPreviewMethod.ProtoReflect.Descriptor instead. +func (*VisibilityRuleSubMessageInPreviewMethod) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescGZIP(), []int{3} +} + +func (x *VisibilityRuleSubMessageInPreviewMethod) GetId() string { + if x != nil { + return x.Id + } + return "" +} + var File_examples_internal_proto_examplepb_visibility_rule_echo_service_proto protoreflect.FileDescriptor var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc = []byte{ @@ -439,87 +601,114 @@ var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_ra 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x10, 0x03, 0x1a, 0x18, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x32, 0x92, 0x07, 0x0a, 0x19, 0x56, 0x69, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x63, 0x68, 0x6f, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xdb, 0x01, 0x0a, 0x0c, 0x45, 0x63, - 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, - 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12, 0xd8, 0x01, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, - 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, 0x22, 0x97, 0x02, 0x0a, 0x24, 0x56, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x78, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x50, 0x52, 0x45, 0x56, 0x49, - 0x45, 0x57, 0x12, 0xf9, 0x01, 0x0a, 0x16, 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, - 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, - 0x6f, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x32, 0x80, - 0x02, 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, - 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x4b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, - 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, + 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x52, 0x0a, 0x73, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x04, + 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, - 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x1a, - 0x10, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, - 0x4c, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x49, 0x6e, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x22, 0x39, 0x0a, 0x27, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x75, 0x62, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x2a, 0x5b, + 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, + 0x45, 0x6e, 0x75, 0x6d, 0x49, 0x6e, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x12, 0x36, 0x0a, 0x32, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, + 0x59, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x50, + 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x32, 0x9b, 0x07, 0x0a, 0x19, + 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x45, 0x63, + 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xbf, 0x01, 0x0a, 0x04, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, + 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xdb, 0x01, 0x0a, 0x0c, + 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x4b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, + 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12, 0xe1, 0x01, 0x0a, 0x0b, 0x45, 0x63, + 0x68, 0x6f, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x54, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x2f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0xfa, 0xd2, + 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x12, 0xf9, 0x01, + 0x0a, 0x16, 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x6e, + 0x64, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, + 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x32, 0x80, 0x02, 0x0a, 0x21, 0x56, 0x69, + 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0xc8, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x1a, 0x10, 0xfa, 0xd2, 0xe4, 0x93, + 0x02, 0x0a, 0x12, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x42, 0x57, 0x5a, 0x55, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -534,32 +723,37 @@ func file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_r return file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDescData } -var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_goTypes = []interface{}{ - (VisibilityRuleSimpleMessage_VisibilityEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum - (*VisibilityRuleEmbedded)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded - (*VisibilityRuleSimpleMessage)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + (VisibilityRuleEnumInPreviewMethod)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod + (VisibilityRuleSimpleMessage_VisibilityEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum + (*VisibilityRuleEmbedded)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + (*VisibilityRuleSimpleMessage)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + (*VisibilityRuleMessageInPreviewMethod)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod + (*VisibilityRuleSubMessageInPreviewMethod)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSubMessageInPreviewMethod } var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_depIdxs = []int32{ - 1, // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded - 1, // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded - 0, // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.an_enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum - 2, // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 6: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 7: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 8: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 9: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 10: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 11: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 2, // 12: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage - 8, // [8:13] is the sub-list for method output_type - 3, // [3:8] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 2, // 0: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + 2, // 1: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEmbedded + 1, // 2: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.an_enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage.VisibilityEnum + 5, // 3: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod.sub_message:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSubMessageInPreviewMethod + 0, // 4: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod.enum:type_name -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEnumInPreviewMethod + 3, // 5: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 6: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 7: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 8: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 9: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 10: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 11: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternal:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 4, // 12: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleMessageInPreviewMethod + 3, // 13: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService.EchoInternalAndPreview:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 3, // 14: grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleInternalEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleSimpleMessage + 10, // [10:15] is the sub-list for method output_type + 5, // [5:10] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_init() } @@ -592,6 +786,30 @@ func file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_i return nil } } + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VisibilityRuleMessageInPreviewMethod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VisibilityRuleSubMessageInPreviewMethod); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_msgTypes[0].OneofWrappers = []interface{}{ (*VisibilityRuleEmbedded_Progress)(nil), @@ -610,8 +828,8 @@ func file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_i File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_rawDesc, - NumEnums: 1, - NumMessages: 2, + NumEnums: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 2, }, diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.proto b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto index 7aa78470b88..06fb642d952 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service.proto +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.proto @@ -53,6 +53,29 @@ message VisibilityRuleSimpleMessage { VisibilityEnum an_enum = 10; } +// MessageInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +message VisibilityRuleMessageInPreviewMethod { + string id = 1; + VisibilityRuleSubMessageInPreviewMethod sub_message = 2; + VisibilityRuleEnumInPreviewMethod enum = 3; +} + +// SubMessageInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +message VisibilityRuleSubMessageInPreviewMethod { + string id = 1; +} + +// EnumInPreviewMethod doesn't define its own visibility restrictions, +// but is only included in a method marked as "PREVIEW", so it will only +// appear if `visibility_restriction_selectors` include "PREVIEW". +enum VisibilityRuleEnumInPreviewMethod { + VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED = 0; +} + // VisibilityRuleEchoService service responds to incoming echo requests. // Different services will be available in the swagger documentation depending // based on `google.api.VisibilityRule`s and the set `visibility_restriction_selectors` @@ -75,7 +98,7 @@ service VisibilityRuleEchoService { } // EchoPreview is a preview API that should only be visible in the OpenAPI spec // if `visibility_restriction_selectors` includes "PREVIEW". - rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleSimpleMessage) { + rpc EchoPreview(VisibilityRuleSimpleMessage) returns (VisibilityRuleMessageInPreviewMethod) { option (google.api.method_visibility).restriction = "PREVIEW"; option (google.api.http) = { get: "/v1/example/echo_preview" diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go b/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go index a7e90ea15da..09d89c532e3 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service_grpc.pb.go @@ -26,7 +26,7 @@ type VisibilityRuleEchoServiceClient interface { EchoInternal(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) // EchoPreview is a preview API that should only be visible in the OpenAPI spec // if `visibility_restriction_selectors` includes "PREVIEW". - EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) + EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleMessageInPreviewMethod, error) // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". EchoInternalAndPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) @@ -58,8 +58,8 @@ func (c *visibilityRuleEchoServiceClient) EchoInternal(ctx context.Context, in * return out, nil } -func (c *visibilityRuleEchoServiceClient) EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleSimpleMessage, error) { - out := new(VisibilityRuleSimpleMessage) +func (c *visibilityRuleEchoServiceClient) EchoPreview(ctx context.Context, in *VisibilityRuleSimpleMessage, opts ...grpc.CallOption) (*VisibilityRuleMessageInPreviewMethod, error) { + out := new(VisibilityRuleMessageInPreviewMethod) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.VisibilityRuleEchoService/EchoPreview", in, out, opts...) if err != nil { return nil, err @@ -88,7 +88,7 @@ type VisibilityRuleEchoServiceServer interface { EchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) // EchoPreview is a preview API that should only be visible in the OpenAPI spec // if `visibility_restriction_selectors` includes "PREVIEW". - EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) + EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleMessageInPreviewMethod, error) // EchoInternalAndPreview is a internal and preview API that should only be visible in the OpenAPI spec // if `visibility_restriction_selectors` includes "PREVIEW" or "INTERNAL". EchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) @@ -104,7 +104,7 @@ func (UnimplementedVisibilityRuleEchoServiceServer) Echo(context.Context, *Visib func (UnimplementedVisibilityRuleEchoServiceServer) EchoInternal(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoInternal not implemented") } -func (UnimplementedVisibilityRuleEchoServiceServer) EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { +func (UnimplementedVisibilityRuleEchoServiceServer) EchoPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleMessageInPreviewMethod, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoPreview not implemented") } func (UnimplementedVisibilityRuleEchoServiceServer) EchoInternalAndPreview(context.Context, *VisibilityRuleSimpleMessage) (*VisibilityRuleSimpleMessage, error) { diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json index 94f44fdfb9b..adac8e77ee8 100644 --- a/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/visibility_rule_preview_and_internal_echo_service.swagger.json @@ -430,7 +430,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + "$ref": "#/definitions/examplepbVisibilityRuleMessageInPreviewMethod" } }, "default": { @@ -721,6 +721,29 @@ }, "description": "Embedded represents a message embedded in SimpleMessage." }, + "examplepbVisibilityRuleEnumInPreviewMethod": { + "type": "string", + "enum": [ + "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED" + ], + "default": "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED", + "description": "EnumInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, + "examplepbVisibilityRuleMessageInPreviewMethod": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "subMessage": { + "$ref": "#/definitions/examplepbVisibilityRuleSubMessageInPreviewMethod" + }, + "enum": { + "$ref": "#/definitions/examplepbVisibilityRuleEnumInPreviewMethod" + } + }, + "description": "MessageInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, "examplepbVisibilityRuleSimpleMessage": { "type": "object", "properties": { @@ -761,6 +784,15 @@ }, "description": "SimpleMessage represents a simple message sent to the Echo service." }, + "examplepbVisibilityRuleSubMessageInPreviewMethod": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "description": "SubMessageInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, "protobufAny": { "type": "object", "properties": { diff --git a/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json index 1f977554d69..c3ae74b42e1 100644 --- a/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/visibility_rule_preview_echo_service.swagger.json @@ -255,7 +255,7 @@ "200": { "description": "A successful response.", "schema": { - "$ref": "#/definitions/examplepbVisibilityRuleSimpleMessage" + "$ref": "#/definitions/examplepbVisibilityRuleMessageInPreviewMethod" } }, "default": { @@ -389,6 +389,29 @@ }, "description": "Embedded represents a message embedded in SimpleMessage." }, + "examplepbVisibilityRuleEnumInPreviewMethod": { + "type": "string", + "enum": [ + "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED" + ], + "default": "VISIBILITY_RULE_ENUM_IN_PREVIEW_METHOD_UNSPECIFIED", + "description": "EnumInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, + "examplepbVisibilityRuleMessageInPreviewMethod": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "subMessage": { + "$ref": "#/definitions/examplepbVisibilityRuleSubMessageInPreviewMethod" + }, + "enum": { + "$ref": "#/definitions/examplepbVisibilityRuleEnumInPreviewMethod" + } + }, + "description": "MessageInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, "examplepbVisibilityRuleSimpleMessage": { "type": "object", "properties": { @@ -426,6 +449,15 @@ }, "description": "SimpleMessage represents a simple message sent to the Echo service." }, + "examplepbVisibilityRuleSubMessageInPreviewMethod": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "description": "SubMessageInPreviewMethod doesn't define its own visibility restrictions,\nbut is only included in a method marked as \"PREVIEW\", so it will only\nappear if `visibility_restriction_selectors` include \"PREVIEW\"." + }, "protobufAny": { "type": "object", "properties": { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index fc4cf85fab7..3412be362db 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -367,6 +367,10 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto for _, meth := range svc.Methods { // Request may be fully included in query { + if !isVisible(getMethodVisibilityOption(meth), reg) { + continue + } + swgReqName, ok := fullyQualifiedNameToOpenAPIName(meth.RequestType.FQMN(), reg) if !ok { glog.Errorf("couldn't resolve OpenAPI name for FQMN '%v'", meth.RequestType.FQMN()) From e799f4cadb4af8efcb6fdc85dddebe4342a69546 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 09:03:49 +0000 Subject: [PATCH 1412/1518] fix(deps): update google.golang.org/genproto digest to 51c1cc9 --- go.mod | 4 ++-- go.sum | 16 +++++++++++++--- repositories.bzl | 14 ++++++++++---- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 8a303ab5728..0a285732284 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220902135211-223410557253 + google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 @@ -19,7 +19,7 @@ require ( require ( github.com/kr/pretty v0.1.0 // indirect golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect - golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect + golang.org/x/sys v0.0.0-20220624220833-87e55d714810 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 328b0a1809c..24c49a061a4 100644 --- a/go.sum +++ b/go.sum @@ -28,6 +28,8 @@ cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Ud cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -162,7 +164,9 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -312,6 +316,7 @@ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -383,8 +388,9 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810 h1:rHZQSjJdAI4Xf5Qzeh2bBc5YJIkPFVM6oDtMFYmgws0= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -497,6 +503,7 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -583,8 +590,11 @@ google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220902135211-223410557253 h1:vXJMM8Shg7TGaYxZsQ++A/FOSlbDmDtWhS/o+3w/hj4= -google.golang.org/genproto v0.0.0-20220902135211-223410557253/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0 h1:bMz0aY2wd9TwUp9M7QfjBWuQqaFD/ZaTtvDpPDCo2Ow= +google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0/go.mod h1:rQWNQYp1kbHR3+n5cARSTCF5rlJOttUn8yIhRklGAWQ= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 6701bcbd3f5..e2823d1b24c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -933,6 +933,12 @@ def go_repositories(): sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", version = "v0.34.0", ) + go_repository( + name = "com_google_cloud_go_asset", + importpath = "cloud.google.com/go/asset", + sum = "h1:Px0CZuM7u6mcDysLR2QHlEWza0tN+iSjwCtFZtBY6DA=", + version = "v1.5.0", + ) go_repository( name = "com_google_cloud_go_bigquery", @@ -1076,8 +1082,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:vXJMM8Shg7TGaYxZsQ++A/FOSlbDmDtWhS/o+3w/hj4=", - version = "v0.0.0-20220902135211-223410557253", + sum = "h1:bMz0aY2wd9TwUp9M7QfjBWuQqaFD/ZaTtvDpPDCo2Ow=", + version = "v0.0.0-20220908141613-51c1cc9bc6d0", ) go_repository( name = "org_golang_google_grpc", @@ -1157,8 +1163,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s=", - version = "v0.0.0-20220610221304-9f5ed59c137d", + sum = "h1:rHZQSjJdAI4Xf5Qzeh2bBc5YJIkPFVM6oDtMFYmgws0=", + version = "v0.0.0-20220624220833-87e55d714810", ) go_repository( name = "org_golang_x_term", From b960133fe9488576ac8108d0dd67260c8589f70f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 08:46:30 -0700 Subject: [PATCH 1413/1518] fix(deps): update golang.org/x/oauth2 digest to f213421 (#2881) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0a285732284..26b66b52503 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 + golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0 google.golang.org/grpc v1.49.0 diff --git a/go.sum b/go.sum index 24c49a061a4..c5b016d7a0d 100644 --- a/go.sum +++ b/go.sum @@ -317,8 +317,8 @@ golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index e2823d1b24c..c11412539c4 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1151,8 +1151,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8=", - version = "v0.0.0-20220822191816-0ebed06d0094", + sum = "h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA=", + version = "v0.0.0-20220909003341-f21342109be1", ) go_repository( name = "org_golang_x_sync", From 9929882aef816e62c35d164225e02dff2bab2213 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 17:17:33 +0000 Subject: [PATCH 1414/1518] chore(deps): update dependency io_bazel_rules_go to v0.35.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 84df8852877..9670ef57bbf 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "16e9fca53ed6bd4ff4ad76facc9b7b651a89db1689a2877d6fd7b82aa824e366", + sha256 = "099a9fb96a376ccbbb7d291ed4ecbdfd42f6bc822ab77ae6f1b5cb9e914e94fa", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.34.0/rules_go-v0.34.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.34.0/rules_go-v0.34.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", ], ) From c12472a456fecdd504ccbb8eb645776c3c05f073 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Sep 2022 23:11:02 -0400 Subject: [PATCH 1415/1518] fix(deps): update google.golang.org/genproto digest to 69f6226 (#2882) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 5 +++-- repositories.bzl | 11 +++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 26b66b52503..527b5e51e57 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0 + google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index c5b016d7a0d..4cf1cb4830b 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -593,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0 h1:bMz0aY2wd9TwUp9M7QfjBWuQqaFD/ZaTtvDpPDCo2Ow= -google.golang.org/genproto v0.0.0-20220908141613-51c1cc9bc6d0/go.mod h1:rQWNQYp1kbHR3+n5cARSTCF5rlJOttUn8yIhRklGAWQ= +google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 h1:ngtP8S8JkBWfJACT9cmj5eTkS9tIWPQI5leBz/7Bq/c= +google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c11412539c4..5a086ef893e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -972,6 +972,13 @@ def go_repositories(): sum = "h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=", version = "v1.3.1", ) + go_repository( + name = "com_google_cloud_go_security", + importpath = "cloud.google.com/go/security", + sum = "h1:D7ZpeFbcu1o6Z/93vDmHxG6cWWVFTCvdN4m+dx6vcCQ=", + version = "v1.5.0", + ) + go_repository( name = "com_google_cloud_go_storage", importpath = "cloud.google.com/go/storage", @@ -1082,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:bMz0aY2wd9TwUp9M7QfjBWuQqaFD/ZaTtvDpPDCo2Ow=", - version = "v0.0.0-20220908141613-51c1cc9bc6d0", + sum = "h1:ngtP8S8JkBWfJACT9cmj5eTkS9tIWPQI5leBz/7Bq/c=", + version = "v0.0.0-20220909194730-69f6226f97e5", ) go_repository( name = "org_golang_google_grpc", From 03a1041762be72ca6d3bfbdad99204d2f931aebd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 09:23:49 -0700 Subject: [PATCH 1416/1518] fix(deps): update google.golang.org/genproto digest to ca0e39e (#2886) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 527b5e51e57..1225cc66d49 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 + google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 4cf1cb4830b..cc568aa2329 100644 --- a/go.sum +++ b/go.sum @@ -594,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5 h1:ngtP8S8JkBWfJACT9cmj5eTkS9tIWPQI5leBz/7Bq/c= -google.golang.org/genproto v0.0.0-20220909194730-69f6226f97e5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f h1:wwbo0UziciPT4Dsca+bmplW53QNAl7tiUOw7FfAcsf8= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 5a086ef893e..b7baa987946 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1089,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ngtP8S8JkBWfJACT9cmj5eTkS9tIWPQI5leBz/7Bq/c=", - version = "v0.0.0-20220909194730-69f6226f97e5", + sum = "h1:wwbo0UziciPT4Dsca+bmplW53QNAl7tiUOw7FfAcsf8=", + version = "v0.0.0-20220914142337-ca0e39ece12f", ) go_repository( name = "org_golang_google_grpc", From 6dbe965797962831790c405c4ee0b43e1acd76fe Mon Sep 17 00:00:00 2001 From: Patrick Hahn Date: Wed, 14 Sep 2022 19:11:58 +0200 Subject: [PATCH 1417/1518] protoc-gen-openapiv2: Use json_name when generating required field names (#2885) * protoc-gen-openapiv2: Use json_name when generating required field names Fix the bug from #2874 where the required fields section in the JSON schema would contain autogenerated field names, even when fields had a custom json_name value set. These would then not match up with the actual fields defined in the schema, resulting in an invalid OpenAPI spec. * Reformat protobuf * Fix failing test * Replace unclear condition when checking required query params Regenerate files, fix formatting --- .../internal/clients/abe/api/swagger.yaml | 139 ++ .../abe/api_a_bit_of_everything_service.go | 54 +- .../clients/abe/model_a_bit_of_everything.go | 2 + .../abe/model_a_bit_of_everything_1.go | 2 + .../abe/model_a_bit_of_everything_2.go | 2 + .../abe/model_a_bit_of_everything_3.go | 2 + .../abe/model_a_bit_of_everything_4.go | 2 + .../model_examplepb_a_bit_of_everything.go | 2 + examples/internal/integration/client_test.go | 44 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1435 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 10 +- .../a_bit_of_everything.swagger.json | 183 ++- .../examplepb/generated_input.swagger.json | 11 +- .../proto/examplepb/stream.swagger.json | 11 +- .../internal/genopenapi/template.go | 15 +- .../internal/genopenapi/template_test.go | 205 ++- 16 files changed, 1359 insertions(+), 760 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 41e0734ff89..c0e1fd3c96a 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -442,6 +442,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -789,6 +800,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -1123,6 +1145,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -1477,6 +1510,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -1818,6 +1862,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -2172,6 +2227,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -2551,6 +2617,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -2888,6 +2965,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -3242,6 +3330,17 @@ paths: required: true type: "string" x-exportParamName: "RequiredStringField2" + - name: "required_field_behavior_json_name_custom" + in: "query" + description: "Test openapiv2 handling of required json_name fields" + required: true + type: "string" + x-exportParamName: "RequiredFieldBehaviorJsonNameCustom" + - name: "required_field_schema_json_name_custom" + in: "query" + required: true + type: "string" + x-exportParamName: "RequiredFieldSchemaJsonNameCustom" responses: 200: description: "A successful response." @@ -4434,6 +4533,8 @@ definitions: - "requiredStringField1" - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" + - "required_field_behavior_json_name_custom" + - "required_field_schema_json_name_custom" - "uuid" properties: singleNested: @@ -4585,6 +4686,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -4903,6 +5009,8 @@ definitions: - "requiredStringField1" - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" + - "required_field_behavior_json_name_custom" + - "required_field_schema_json_name_custom" properties: singleNested: $ref: "#/definitions/ABitOfEverythingNested" @@ -5048,6 +5156,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5077,6 +5190,8 @@ definitions: - "requiredStringField1" - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" + - "required_field_behavior_json_name_custom" + - "required_field_schema_json_name_custom" - "uuid" properties: singleNested: @@ -5228,6 +5343,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5262,6 +5382,8 @@ definitions: - "requiredStringField1" - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" + - "required_field_behavior_json_name_custom" + - "required_field_schema_json_name_custom" properties: singleNested: $ref: "#/definitions/ABitOfEverythingNested" @@ -5407,6 +5529,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5426,6 +5553,8 @@ definitions: - "requiredStringField1" - "requiredStringField2" - "requiredStringViaFieldBehaviorAnnotation" + - "required_field_behavior_json_name_custom" + - "required_field_schema_json_name_custom" properties: singleNested: $ref: "#/definitions/ABitOfEverythingNested" @@ -5571,6 +5700,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5727,6 +5861,11 @@ definitions: type: "string" requiredStringField2: type: "string" + required_field_behavior_json_name_custom: + type: "string" + title: "Test openapiv2 handling of required json_name fields" + required_field_schema_json_name_custom: + type: "string" description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: "{\"int64_value\":12,\"double_value\":12.3}" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index bceea6a0abb..7df537279f5 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -350,6 +350,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. @@ -422,7 +424,7 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -542,6 +544,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -685,6 +689,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -757,7 +763,7 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -877,6 +883,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1021,6 +1029,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCheckPostQueryParamsOpts - Optional Parameters: * @param "Uint64Value" (optional.String) - * @param "Int32Value" (optional.Int32) - @@ -1089,7 +1099,7 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1203,6 +1213,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1518,6 +1530,8 @@ This API creates a new ABitOfEverything * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCreateOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -1562,7 +1576,7 @@ type ABitOfEverythingServiceCreateOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1655,6 +1669,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2123,6 +2139,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCustomOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2199,7 +2217,7 @@ type ABitOfEverythingServiceCustomOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2324,6 +2342,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx co } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2466,6 +2486,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceCustomOptionsRequestOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -2542,7 +2564,7 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Options") localVarPostBody interface{} @@ -2667,6 +2689,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptions } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3080,6 +3104,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceDoubleColonOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -3156,7 +3182,7 @@ type ABitOfEverythingServiceDoubleColonOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -3281,6 +3307,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(c } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3577,6 +3605,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceExistsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -3653,7 +3683,7 @@ type ABitOfEverythingServiceExistsOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Head") localVarPostBody interface{} @@ -3778,6 +3808,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx co } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -4035,6 +4067,8 @@ ABitOfEverythingServiceApiService * @param requiredStringViaFieldBehaviorAnnotation mark a field as required in Open API definition * @param requiredStringField1 * @param requiredStringField2 + * @param requiredFieldBehaviorJsonNameCustom Test openapiv2 handling of required json_name fields + * @param requiredFieldSchemaJsonNameCustom * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - @@ -4111,7 +4145,7 @@ type ABitOfEverythingServiceGetQueryOpts struct { OptionalStringField optional.String } -func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -4236,6 +4270,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx } localVarQueryParams.Add("requiredStringField1", parameterToString(requiredStringField1, "")) localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) + localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) + localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 3fcd1edecea..e55a54d4699 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -65,4 +65,6 @@ type ABitOfEverything struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1"` RequiredStringField2 string `json:"requiredStringField2"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index c0f60f51557..52b45cd2eab 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -66,4 +66,6 @@ type ABitOfEverything1 struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1"` RequiredStringField2 string `json:"requiredStringField2"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index dd8fab2815b..ebc7b46e5fe 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -65,4 +65,6 @@ type ABitOfEverything2 struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1"` RequiredStringField2 string `json:"requiredStringField2"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index 385b00a178c..ef6853090a3 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -65,4 +65,6 @@ type ABitOfEverything3 struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1"` RequiredStringField2 string `json:"requiredStringField2"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index 55ebca92c1a..411d1f814d3 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -65,4 +65,6 @@ type ABitOfEverything4 struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1,omitempty"` RequiredStringField2 string `json:"requiredStringField2,omitempty"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom,omitempty"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index 6ba1ac60e2b..eb224da50b2 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -66,4 +66,6 @@ type ExamplepbABitOfEverything struct { OptionalStringField string `json:"optionalStringField,omitempty"` RequiredStringField1 string `json:"requiredStringField1"` RequiredStringField2 string `json:"requiredStringField2"` + RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` + RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` } diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 50a145a8114..13caa9881b8 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -92,26 +92,28 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { messagePath := abe.JKL_MessagePathEnumNestedPathEnum want := &abe.ExamplepbABitOfEverything{ - FloatValue: 1.5, - DoubleValue: 2.5, - Int64Value: "4294967296", - Uint64Value: "9223372036854775807", - Int32Value: -2147483648, - Fixed64Value: "9223372036854775807", - Fixed32Value: 4294967295, - BoolValue: true, - StringValue: "strprefix/foo", - Uint32Value: 4294967295, - Sfixed32Value: 2147483647, - Sfixed64Value: "-4611686018427387904", - Sint32Value: 2147483647, - Sint64Value: "4611686018427387903", - NonConventionalNameValue: "camelCase", - EnumValue: &enumZero, - PathEnumValue: &enumPath, - NestedPathEnumValue: &messagePath, - EnumValueAnnotation: &enumZero, - Uuid: fmt.Sprintf("%x", uuidgen.Next()), + FloatValue: 1.5, + DoubleValue: 2.5, + Int64Value: "4294967296", + Uint64Value: "9223372036854775807", + Int32Value: -2147483648, + Fixed64Value: "9223372036854775807", + Fixed32Value: 4294967295, + BoolValue: true, + StringValue: "strprefix/foo", + Uint32Value: 4294967295, + Sfixed32Value: 2147483647, + Sfixed64Value: "-4611686018427387904", + Sint32Value: 2147483647, + Sint64Value: "4611686018427387903", + NonConventionalNameValue: "camelCase", + EnumValue: &enumZero, + PathEnumValue: &enumPath, + NestedPathEnumValue: &messagePath, + EnumValueAnnotation: &enumZero, + Uuid: fmt.Sprintf("%x", uuidgen.Next()), + RequiredFieldBehaviorJsonNameCustom: "test", + RequiredFieldSchemaJsonNameCustom: "test", } resp, _, err := cl.ABitOfEverythingServiceApi.ABitOfEverythingServiceCreate( context.Background(), @@ -138,6 +140,8 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.RequiredStringViaFieldBehaviorAnnotation, want.StringValue, want.StringValue, + want.RequiredFieldBehaviorJsonNameCustom, + want.RequiredFieldSchemaJsonNameCustom, nil, ) if err != nil { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index ffc39071087..e533826ef79 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -403,6 +403,9 @@ type ABitOfEverything struct { OptionalStringField string `protobuf:"bytes,42,opt,name=optional_string_field,json=optionalStringField,proto3" json:"optional_string_field,omitempty"` RequiredStringField_1 string `protobuf:"bytes,43,opt,name=required_string_field_1,json=requiredStringField1,proto3" json:"required_string_field_1,omitempty"` RequiredStringField_2 string `protobuf:"bytes,44,opt,name=required_string_field_2,json=requiredStringField2,proto3" json:"required_string_field_2,omitempty"` + // Test openapiv2 handling of required json_name fields + RequiredFieldBehaviorJsonName string `protobuf:"bytes,45,opt,name=required_field_behavior_json_name,json=required_field_behavior_json_name_custom,proto3" json:"required_field_behavior_json_name,omitempty"` + RequiredFieldSchemaJsonName string `protobuf:"bytes,46,opt,name=required_field_schema_json_name,json=required_field_schema_json_name_custom,proto3" json:"required_field_schema_json_name,omitempty"` } func (x *ABitOfEverything) Reset() { @@ -745,6 +748,20 @@ func (x *ABitOfEverything) GetRequiredStringField_2() string { return "" } +func (x *ABitOfEverything) GetRequiredFieldBehaviorJsonName() string { + if x != nil { + return x.RequiredFieldBehaviorJsonName + } + return "" +} + +func (x *ABitOfEverything) GetRequiredFieldSchemaJsonName() string { + if x != nil { + return x.RequiredFieldSchemaJsonName + } + return "" +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1597,8 +1614,8 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x92, 0x41, 0x32, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, - 0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8e, - 0x22, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdb, + 0x23, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, @@ -1813,217 +1830,263 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x69, 0x72, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x32, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x32, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x65, 0x6c, 0x64, 0x32, 0x12, 0x58, 0x0a, 0x21, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, + 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x03, 0xe0, 0x41, 0x02, 0x52, 0x28, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x5f, 0x6a, 0x73, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x4f, + 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x26, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, + 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x1a, + 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, + 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, + 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, + 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, + 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0xd6, 0x02, 0x92, 0x41, 0xd2, + 0x02, 0x0a, 0xcc, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x1f, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0x03, 0x22, 0x0a, 0x19, + 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, + 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, + 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, + 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, + 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, + 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, + 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, + 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, + 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, + 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, - 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, - 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, - 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, + 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x53, + 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, + 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x04, + 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, 0x77, 0x68, 0x65, + 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, + 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, + 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, + 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, + 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, + 0x10, 0x01, 0x32, 0xea, 0x34, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, + 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, - 0xb4, 0x02, 0x92, 0x41, 0xb0, 0x02, 0x0a, 0xaa, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, - 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, - 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x82, 0x03, - 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, - 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, - 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, - 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, - 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, - 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, - 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, - 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, - 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, - 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, - 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, - 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, - 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, - 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, - 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, - 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, - 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, - 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xea, 0x34, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, + 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, @@ -2032,544 +2095,510 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, + 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, - 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, - 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, - 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, - 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, + 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, + 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, + 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, - 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, + 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, - 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, + 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, - 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, - 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, - 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, - 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, - 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, + 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, + 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, + 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, + 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, + 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, - 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, + 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, - 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, - 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, - 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, + 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, + 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, - 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, - 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0x40, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, - 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, + 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, + 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, + 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, + 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, + 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, - 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, - 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, - 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, + 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, + 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, - 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, + 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, + 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, - 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, - 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, - 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, - 0x45, 0x6e, 0x75, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, - 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, - 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, - 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, - 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, - 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, - 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, + 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, + 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, + 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, - 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, - 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, - 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, - 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, - 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, - 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, - 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, - 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, - 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, - 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, - 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, - 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, - 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, - 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, - 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, - 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, - 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, - 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, - 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, - 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, - 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, - 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, - 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, - 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, - 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, - 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, - 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, - 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, - 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, - 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, - 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, + 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x1a, 0xbf, 0x01, + 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, + 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, + 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, + 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, + 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, + 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, + 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, + 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, + 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, + 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, + 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, + 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, + 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, + 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, + 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, + 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, + 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, + 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, + 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, + 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, + 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, + 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, + 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, + 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, + 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, + 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, + 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, + 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, + 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, + 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, + 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, + 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, + 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, + 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, + 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, + 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, + 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, + 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, + 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, + 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, + 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, + 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 527ac889784..2188fb19ba7 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -240,7 +240,8 @@ message ABitOfEverything { required: [ "uuid", "int64_value", - "double_value" + "double_value", + "required_field_schema_json_name" ] extensions: { key: "x-a-bit-of-everything-foo"; @@ -388,6 +389,13 @@ message ABitOfEverything { string optional_string_field = 42; string required_string_field_1 = 43 [(google.api.field_behavior) = REQUIRED]; string required_string_field_2 = 44 [(google.api.field_behavior) = REQUIRED]; + + // Test openapiv2 handling of required json_name fields + string required_field_behavior_json_name = 45 [ + json_name = "required_field_behavior_json_name_custom", + (google.api.field_behavior) = REQUIRED + ]; + string required_field_schema_json_name = 46 [json_name = "required_field_schema_json_name_custom"]; } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index c81ab3c9d37..76532ad75b2 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -540,6 +540,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -921,6 +934,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -1291,6 +1317,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -1679,6 +1718,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -2071,6 +2123,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -2331,6 +2396,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -2342,10 +2414,12 @@ "required": [ "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" } @@ -2712,6 +2786,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -3075,6 +3162,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -3462,6 +3562,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -3849,6 +3962,19 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "required_field_behavior_json_name_custom", + "description": "Test openapiv2 handling of required json_name fields", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "required_field_schema_json_name_custom", + "in": "query", + "required": true, + "type": "string" } ], "tags": [ @@ -4529,6 +4655,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -4541,10 +4674,12 @@ "uuid", "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" } @@ -5107,6 +5242,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5118,10 +5260,12 @@ "required": [ "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" } @@ -5391,6 +5535,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5402,10 +5553,12 @@ "required": [ "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" } @@ -6185,6 +6338,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -6204,10 +6364,12 @@ "required": [ "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ] } } @@ -6521,6 +6683,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -6533,10 +6702,12 @@ "uuid", "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index d41853960ea..2c746192f95 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -296,6 +296,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -308,10 +315,12 @@ "uuid", "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index fa8040ba024..583402773c6 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -422,6 +422,13 @@ }, "requiredStringField2": { "type": "string" + }, + "required_field_behavior_json_name_custom": { + "type": "string", + "title": "Test openapiv2 handling of required json_name fields" + }, + "required_field_schema_json_name_custom": { + "type": "string" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -434,10 +441,12 @@ "uuid", "int64Value", "doubleValue", + "required_field_schema_json_name_custom", "floatValue", "requiredStringViaFieldBehaviorAnnotation", "requiredStringField1", - "requiredStringField2" + "requiredStringField2", + "required_field_behavior_json_name_custom" ], "x-a-bit-of-everything-foo": "bar" }, diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 3412be362db..5ba38aa6a47 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -269,7 +269,8 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre // verify if the field is required in message options if messageSchema, err := extractSchemaOptionFromMessageDescriptor(message.DescriptorProto); err == nil { for _, fieldName := range messageSchema.GetJsonSchema().GetRequired() { - if fieldName == reg.FieldName(field) { + // Required fields can be field names or json_name values + if fieldName == field.GetJsonName() || fieldName == field.GetName() { required = true break } @@ -732,6 +733,12 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) o updateSwaggerObjectFromFieldBehavior(&ret, j, reg, f) } + for i, required := range ret.Required { + if required == f.GetName() { + ret.Required[i] = reg.FieldName(f) + } + } + if reg.GetProto3OptionalNullable() && f.GetProto3Optional() { ret.XNullable = true } @@ -2598,12 +2605,6 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option s.MaxItems = j.GetMaxItems() s.MinItems = j.GetMinItems() - if reg.GetUseJSONNamesForFields() { - for i, r := range s.Required { - // TODO(oyvindwe): Look up field and use field.GetJsonName()? - s.Required[i] = casing.JSONCamelCase(r) - } - } s.Enum = j.GetEnum() if j.GetExtensions() != nil { exts, err := processExtensions(j.GetExtensions()) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 94d75e39f7a..b53822089a9 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -715,7 +715,7 @@ func TestMessageToQueryParametersNoRecursive(t *testing.T) { Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("field"), - //Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + // Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, @@ -900,6 +900,18 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { Params []openapiParameterObject } + var requiredField = []annotations.FieldBehavior{annotations.FieldBehavior_REQUIRED} + var requiredFieldOptions = new(descriptorpb.FieldOptions) + proto.SetExtension(requiredFieldOptions, annotations.E_FieldBehavior, requiredField) + + messageSchema := &openapi_options.Schema{ + JsonSchema: &openapi_options.JSONSchema{ + Required: []string{"test_field_b"}, + }, + } + messageOption := &descriptorpb.MessageOptions{} + proto.SetExtension(messageOption, openapi_options.E_Openapiv2Schema, messageSchema) + tests := []test{ { MsgDescs: []*descriptorpb.DescriptorProto{ @@ -961,6 +973,44 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, }, }, + { + MsgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("ExampleMessage"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("test_field_a"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + JsonName: proto.String("testFieldACustom"), + Options: requiredFieldOptions, + }, + { + Name: proto.String("test_field_b"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + JsonName: proto.String("testFieldBCustom"), + }, + }, + Options: messageOption, + }, + }, + Message: "ExampleMessage", + Params: []openapiParameterObject{ + { + Name: "testFieldACustom", + In: "query", + Required: true, + Type: "string", + }, + { + Name: "testFieldBCustom", + In: "query", + Required: true, + Type: "string", + }, + }, + }, } for _, test := range tests { @@ -1004,7 +1054,7 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { t.Fatalf("failed to convert message to query parameters: %s", err) } if !reflect.DeepEqual(params, test.Params) { - t.Errorf("expected %v, got %v", test.Params, params) + t.Errorf("expected %#v, got %#v", test.Params, params) } } } @@ -3569,10 +3619,11 @@ func TestFQMNtoOpenAPIName(t *testing.T) { func TestSchemaOfField(t *testing.T) { type test struct { - field *descriptor.Field - refs refMap - expected openapiSchemaObject - openAPIOptions *openapiconfig.OpenAPIOptions + field *descriptor.Field + refs refMap + expected openapiSchemaObject + openAPIOptions *openapiconfig.OpenAPIOptions + useJSONNamesForFields bool } jsonSchema := &openapi_options.JSONSchema{ @@ -3598,6 +3649,9 @@ func TestSchemaOfField(t *testing.T) { Required: []string{"req"}, ReadOnly: true, } + jsonSchemaRequired := &openapi_options.JSONSchema{ + Required: []string{"required_via_json_schema"}, + } var fieldOptions = new(descriptorpb.FieldOptions) proto.SetExtension(fieldOptions, openapi_options.E_Openapiv2Field, jsonSchema) @@ -4275,9 +4329,54 @@ func TestSchemaOfField(t *testing.T) { MinItems: 2, }, }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("required_via_field_behavior_field_json_name"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + JsonName: proto.String("required_field_custom_name"), + Options: requiredFieldOptions, + }, + }, + refs: make(refMap), + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Required: []string{"required_field_custom_name"}, + }, + useJSONNamesForFields: true, + }, + { + field: &descriptor.Field{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ + Name: proto.String("required_via_json_schema"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + JsonName: proto.String("required_via_json_schema_json_name"), + }, + }, + openAPIOptions: &openapiconfig.OpenAPIOptions{ + Field: []*openapiconfig.OpenAPIFieldOption{ + { + Field: "example.Message.required_via_json_schema", + Option: jsonSchemaRequired, + }, + }, + }, + refs: make(refMap), + useJSONNamesForFields: true, + expected: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + Required: []string{"required_via_json_schema_json_name"}, + }, + }, } for _, test := range tests { reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(test.useJSONNamesForFields) + req := &pluginpb.CodeGeneratorRequest{ ProtoFile: []*descriptorpb.FileDescriptorProto{ { @@ -4429,12 +4528,13 @@ func TestRenderMessagesAsDefinition(t *testing.T) { proto.SetExtension(fieldVisibilityPreviewOption, visibility.E_FieldVisibility, fieldVisibilityFieldPreview) tests := []struct { - descr string - msgDescs []*descriptorpb.DescriptorProto - schema map[string]*openapi_options.Schema // per-message schema to add - defs openapiDefinitionsObject - openAPIOptions *openapiconfig.OpenAPIOptions - pathParams []descriptor.Parameter + descr string + msgDescs []*descriptorpb.DescriptorProto + schema map[string]*openapi_options.Schema // per-message schema to add + defs openapiDefinitionsObject + openAPIOptions *openapiconfig.OpenAPIOptions + pathParams []descriptor.Parameter + UseJSONNamesForFields bool }{ { descr: "no OpenAPI options", @@ -4961,6 +5061,82 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, }, + { + descr: "JSONSchema with required properties and fields with json_name", + msgDescs: []*descriptorpb.DescriptorProto{ + { + Name: proto.String("Message"), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("FieldOne"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + JsonName: proto.String("custom_json_1"), + }, + { + Name: proto.String("FieldTwo"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + JsonName: proto.String("custom_json_2"), + Options: requiredFieldOptions, + }, + { + Name: proto.String("FieldThree"), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(3), + JsonName: proto.String("custom_json_3"), + Options: requiredFieldOptions, + }, + }, + }, + }, + schema: map[string]*openapi_options.Schema{ + "Message": { + JsonSchema: &openapi_options.JSONSchema{ + Title: "title", + Description: "desc", + Required: []string{"FieldOne", "FieldTwo"}, + }, + }, + }, + defs: map[string]openapiSchemaObject{ + "Message": { + schemaCore: schemaCore{ + Type: "object", + }, + Title: "title", + Description: "desc", + Required: []string{"custom_json_1", "custom_json_2", "custom_json_3"}, + Properties: &openapiSchemaObjectProperties{ + { + Key: "custom_json_1", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + { + Key: "custom_json_2", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + { + Key: "custom_json_3", + Value: openapiSchemaObject{ + schemaCore: schemaCore{ + Type: "string", + }, + }, + }, + }, + }, + }, + UseJSONNamesForFields: true, + }, } for _, test := range tests { @@ -4992,6 +5168,11 @@ func TestRenderMessagesAsDefinition(t *testing.T) { ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) reg.SetVisibilityRestrictionSelectors([]string{"PREVIEW"}) + + if test.UseJSONNamesForFields { + reg.SetUseJSONNamesForFields(true) + } + if err != nil { t.Fatalf("failed to load code generator request: %v", err) } From cec12bea1d5e0912ca475c1b14c69105abd8dba8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 19:53:34 +0000 Subject: [PATCH 1418/1518] chore(deps): update dependency com_google_protobuf to v3.21.6 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 9670ef57bbf..105da508f54 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "d7d204a59fd0d2d2387bd362c2155289d5060f32122c4d1d922041b61191d522", - strip_prefix = "protobuf-3.21.5", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.5.tar.gz"], + sha256 = "73c95c7b0c13f597a6a1fec7121b07e90fd12b4ed7ff5a781253b3afe07fc077", + strip_prefix = "protobuf-3.21.6", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.6.tar.gz"], ) http_archive( From 5433fc8b753f825940a76435005af7aab2c3e429 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 16:50:11 -0700 Subject: [PATCH 1419/1518] fix(deps): update google.golang.org/genproto digest to 581e60b (#2888) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1225cc66d49..ee91813f511 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f + google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index cc568aa2329..fbec5cfa450 100644 --- a/go.sum +++ b/go.sum @@ -594,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f h1:wwbo0UziciPT4Dsca+bmplW53QNAl7tiUOw7FfAcsf8= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85 h1:lkYqfLZL9+9C+SltHOTeOHL6uueWYYkGp5NoeOZQsis= +google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index b7baa987946..92efcc29424 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1089,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:wwbo0UziciPT4Dsca+bmplW53QNAl7tiUOw7FfAcsf8=", - version = "v0.0.0-20220914142337-ca0e39ece12f", + sum = "h1:lkYqfLZL9+9C+SltHOTeOHL6uueWYYkGp5NoeOZQsis=", + version = "v0.0.0-20220914210030-581e60b4ef85", ) go_repository( name = "org_golang_google_grpc", From e78f570b573df28b85203f1242c949ade8e5bfc9 Mon Sep 17 00:00:00 2001 From: Takuya Yaginuma <106577540+y-takuya@users.noreply.github.com> Date: Fri, 16 Sep 2022 07:00:44 +0900 Subject: [PATCH 1420/1518] fix: support service tags in OpenAPI config file (#2817) (#2858) * fix: support service tags in OpenAPI config file * chore: add test for service tags support * fix: change the config priority for service tags --- .../clients/unannotatedecho/api/swagger.yaml | 5 + .../unannotated_echo_service.swagger.json | 7 +- .../internal/genopenapi/template.go | 41 +++++-- .../internal/genopenapi/template_test.go | 104 ++++++++++++++++++ 4 files changed, 149 insertions(+), 8 deletions(-) diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index afa15b8757e..7d2f2d17244 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -17,6 +17,11 @@ info: x-something-something: "yadda" tags: - name: "UnannotatedEchoService" + description: "UnannotatedEchoService description -- which should not be used in\ + \ place of the documentation comment!" + externalDocs: + description: "Find out more about UnannotatedEchoService" + url: "https://github.com/grpc-ecosystem/grpc-gateway" schemes: - "http" - "https" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index fc4f3011e36..f6c9c2c4f50 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -17,7 +17,12 @@ }, "tags": [ { - "name": "UnannotatedEchoService" + "name": "UnannotatedEchoService", + "description": "UnannotatedEchoService description -- which should not be used in place of the documentation comment!", + "externalDocs": { + "description": "Find out more about UnannotatedEchoService", + "url": "https://github.com/grpc-ecosystem/grpc-gateway" + } } ], "schemes": [ diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 5ba38aa6a47..0c1fc244c3f 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1018,14 +1018,13 @@ func renderServiceTags(services []*descriptor.Service, reg *descriptor.Registry) tag := openapiTagObject{ Name: tagName, } - if proto.HasExtension(svc.Options, openapi_options.E_Openapiv2Tag) { - ext := proto.GetExtension(svc.Options, openapi_options.E_Openapiv2Tag) - opts, ok := ext.(*openapi_options.Tag) - if !ok { - glog.Errorf("extension is %T; want an OpenAPI Tag object", ext) - return nil - } + opts, err := getServiceOpenAPIOption(reg, svc) + if err != nil { + glog.Error(err) + return nil + } + if opts != nil { tag.Description = opts.Description if opts.ExternalDocs != nil { tag.ExternalDocs = &openapiExternalDocumentationObject{ @@ -2362,6 +2361,23 @@ func extractSchemaOptionFromMessageDescriptor(msg *descriptorpb.DescriptorProto) return opts, nil } +// extractTagOptionFromServiceDescriptor extracts the tag of type +// openapi_options.Tag from a given proto service's descriptor. +func extractTagOptionFromServiceDescriptor(svc *descriptorpb.ServiceDescriptorProto) (*openapi_options.Tag, error) { + if svc.Options == nil { + return nil, nil + } + if !proto.HasExtension(svc.Options, openapi_options.E_Openapiv2Tag) { + return nil, nil + } + ext := proto.GetExtension(svc.Options, openapi_options.E_Openapiv2Tag) + opts, ok := ext.(*openapi_options.Tag) + if !ok { + return nil, fmt.Errorf("extension is %T; want a Tag", ext) + } + return opts, nil +} + // extractOpenAPIOptionFromFileDescriptor extracts the message of type // openapi_options.OpenAPI from a given proto method's descriptor. func extractOpenAPIOptionFromFileDescriptor(file *descriptorpb.FileDescriptorProto) (*openapi_options.Swagger, error) { @@ -2499,6 +2515,17 @@ func getMessageOpenAPIOption(reg *descriptor.Registry, msg *descriptor.Message) return opts, nil } +func getServiceOpenAPIOption(reg *descriptor.Registry, svc *descriptor.Service) (*openapi_options.Tag, error) { + if opts, ok := reg.GetOpenAPIServiceOption(svc.FQSN()); ok { + return opts, nil + } + opts, err := extractTagOptionFromServiceDescriptor(svc.ServiceDescriptorProto) + if err != nil { + return nil, err + } + return opts, nil +} + func getFileOpenAPIOption(reg *descriptor.Registry, file *descriptor.File) (*openapi_options.Swagger, error) { opts, err := extractOpenAPIOptionFromFileDescriptor(file.FileDescriptorProto) if err != nil { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index b53822089a9..329ce969180 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1517,6 +1517,110 @@ func TestApplyTemplateMultiService(t *testing.T) { } } +func TestApplyTemplateOpenAPIConfigFromYAML(t *testing.T) { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + file := descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", // TODO(achew22): Figure out what this should really be + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } + fileCL := crossLinkFixture(&file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + openapiOptions := &openapiconfig.OpenAPIOptions{ + Service: []*openapiconfig.OpenAPIServiceOption{ + { + Service: "example.ExampleService", + Option: &openapi_options.Tag{ + Description: "ExampleService description", + ExternalDocs: &openapi_options.ExternalDocumentation{ + Description: "Find out more about ExampleService", + }, + }, + }, + }, + } + if err := reg.RegisterOpenAPIOptions(openapiOptions); err != nil { + t.Errorf("reg.RegisterOpenAPIOptions for Service %#v failed with %v; want success", openapiOptions.Service, err) + return + } + + result, err := applyTemplate(param{File: fileCL, reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if want, is, name := "ExampleService description", result.Tags[0].Description, "Tags[0].Description"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + if want, is, name := "Find out more about ExampleService", result.Tags[0].ExternalDocs.Description, "Tags[0].ExternalDocs.Description"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", file) + t.Errorf("got: %s", fmt.Sprint(result)) + } +} + func TestApplyTemplateOverrideOperationID(t *testing.T) { newFile := func() *descriptor.File { msgdesc := &descriptorpb.DescriptorProto{ From 031bc11c5e7a7ed791f0325cbc01f715ae6714bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 16:58:29 -0700 Subject: [PATCH 1421/1518] fix(deps): update google.golang.org/genproto digest to 7fd63a7 (#2890) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ee91813f511..73f3f374cff 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85 + google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index fbec5cfa450..79e43d2996a 100644 --- a/go.sum +++ b/go.sum @@ -594,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85 h1:lkYqfLZL9+9C+SltHOTeOHL6uueWYYkGp5NoeOZQsis= -google.golang.org/genproto v0.0.0-20220914210030-581e60b4ef85/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de h1:5ANeKFmGdtiputJJYeUVg8nTGA/1bEirx4CgzcnPSx8= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 92efcc29424..743efa8ac42 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1089,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:lkYqfLZL9+9C+SltHOTeOHL6uueWYYkGp5NoeOZQsis=", - version = "v0.0.0-20220914210030-581e60b4ef85", + sum = "h1:5ANeKFmGdtiputJJYeUVg8nTGA/1bEirx4CgzcnPSx8=", + version = "v0.0.0-20220915135415-7fd63a7952de", ) go_repository( name = "org_golang_google_grpc", From 2b32fd03f54d962f9f46b9276445831ca071c720 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 14:53:32 -0700 Subject: [PATCH 1422/1518] fix(deps): update google.golang.org/genproto digest to 2692e88 (#2892) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 73f3f374cff..754bb9d8e00 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de + google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 79e43d2996a..abfe2127c2e 100644 --- a/go.sum +++ b/go.sum @@ -594,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de h1:5ANeKFmGdtiputJJYeUVg8nTGA/1bEirx4CgzcnPSx8= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa h1:VWkrxnAx2C2hirAP+W5ADU7e/+93Yhk//ioKd2XFyDI= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 743efa8ac42..f84438c9267 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1089,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:5ANeKFmGdtiputJJYeUVg8nTGA/1bEirx4CgzcnPSx8=", - version = "v0.0.0-20220915135415-7fd63a7952de", + sum = "h1:VWkrxnAx2C2hirAP+W5ADU7e/+93Yhk//ioKd2XFyDI=", + version = "v0.0.0-20220916172020-2692e8806bfa", ) go_repository( name = "org_golang_google_grpc", From e0db62787525b1edf6dac55ec9f79918b4300bff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 19:46:01 +0000 Subject: [PATCH 1423/1518] chore(deps): update dependency bazel to v5.3.1 --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index 03f488b076a..c7cb1311a64 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -5.3.0 +5.3.1 From c4204e6e88c033f4ad956417302a97e55b44395d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 20:10:16 -0400 Subject: [PATCH 1424/1518] fix(deps): update google.golang.org/genproto digest to 68c0371 (#2893) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 754bb9d8e00..dbb721a388e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa + google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index abfe2127c2e..5094a213d29 100644 --- a/go.sum +++ b/go.sum @@ -594,8 +594,8 @@ google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa h1:VWkrxnAx2C2hirAP+W5ADU7e/+93Yhk//ioKd2XFyDI= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51 h1:ucpgjuzWqWrj0NEwjUpsGTf2IGxyLtmuSk0oGgifjec= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f84438c9267..e4f94af45e0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1089,8 +1089,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:VWkrxnAx2C2hirAP+W5ADU7e/+93Yhk//ioKd2XFyDI=", - version = "v0.0.0-20220916172020-2692e8806bfa", + sum = "h1:ucpgjuzWqWrj0NEwjUpsGTf2IGxyLtmuSk0oGgifjec=", + version = "v0.0.0-20220919141832-68c03719ef51", ) go_repository( name = "org_golang_google_grpc", From 308336df6cd87e0a7349b2d7119af33917313d79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 14:54:18 -0700 Subject: [PATCH 1425/1518] fix(deps): update google.golang.org/genproto digest to a2a065f (#2895) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 21 ++++++++++++++++++--- repositories.bzl | 19 +++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index dbb721a388e..14dad136157 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51 + google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 @@ -18,8 +18,8 @@ require ( require ( github.com/kr/pretty v0.1.0 // indirect - golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect - golang.org/x/sys v0.0.0-20220624220833-87e55d714810 // indirect + golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect + golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 5094a213d29..00e8c5566d2 100644 --- a/go.sum +++ b/go.sum @@ -29,6 +29,7 @@ cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2Z cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -44,6 +45,7 @@ cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLq cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= @@ -56,6 +58,7 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -175,6 +178,7 @@ github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0 github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -295,8 +299,10 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -318,6 +324,7 @@ golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -390,8 +397,10 @@ golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810 h1:rHZQSjJdAI4Xf5Qzeh2bBc5YJIkPFVM6oDtMFYmgws0= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -504,7 +513,10 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -593,9 +605,12 @@ google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51 h1:ucpgjuzWqWrj0NEwjUpsGTf2IGxyLtmuSk0oGgifjec= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118 h1:1QrRpmfwloduRHGMRkFdN0DgqThxHTno7l9NW3i2PFs= +google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118/go.mod h1:LYt2tIhSVG5f6zQtdHGQukpnJ9zG6jdfbcsaO6QoG8M= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index e4f94af45e0..ed85b215ee4 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -959,6 +959,13 @@ def go_repositories(): sum = "h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=", version = "v1.1.0", ) + go_repository( + name = "com_google_cloud_go_edgecontainer", + importpath = "cloud.google.com/go/edgecontainer", + sum = "h1:PS3AxjRqMu2XS01YLG/teWFQlZrP7+a+LJBj37zBMAQ=", + version = "v0.1.0", + ) + go_repository( name = "com_google_cloud_go_firestore", importpath = "cloud.google.com/go/firestore", @@ -1089,8 +1096,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:ucpgjuzWqWrj0NEwjUpsGTf2IGxyLtmuSk0oGgifjec=", - version = "v0.0.0-20220919141832-68c03719ef51", + sum = "h1:1QrRpmfwloduRHGMRkFdN0DgqThxHTno7l9NW3i2PFs=", + version = "v0.0.0-20220920164045-a2a065f3c118", ) go_repository( name = "org_golang_google_grpc", @@ -1152,8 +1159,8 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ=", - version = "v0.0.0-20220624214902-1bab6f366d9e", + sum = "h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI=", + version = "v0.0.0-20220909164309-bea034e7d591", ) go_repository( name = "org_golang_x_oauth2", @@ -1170,8 +1177,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:rHZQSjJdAI4Xf5Qzeh2bBc5YJIkPFVM6oDtMFYmgws0=", - version = "v0.0.0-20220624220833-87e55d714810", + sum = "h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=", + version = "v0.0.0-20220728004956-3c1f35247d10", ) go_repository( name = "org_golang_x_term", From 8f1bee4aca120b47b12708670afda1cb0c0a2a50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 17:06:49 -0700 Subject: [PATCH 1426/1518] fix(deps): update google.golang.org/genproto digest to 2b89144 (#2896) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 67 ++++++++++- repositories.bzl | 301 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 363 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 14dad136157..e3542c8ff51 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118 + google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 00e8c5566d2..dc3d11ee573 100644 --- a/go.sum +++ b/go.sum @@ -30,28 +30,73 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -59,6 +104,12 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -510,12 +561,14 @@ google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/S google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -598,6 +651,7 @@ google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= @@ -605,12 +659,21 @@ google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118 h1:1QrRpmfwloduRHGMRkFdN0DgqThxHTno7l9NW3i2PFs= -google.golang.org/genproto v0.0.0-20220920164045-a2a065f3c118/go.mod h1:LYt2tIhSVG5f6zQtdHGQukpnJ9zG6jdfbcsaO6QoG8M= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006 h1:mmbq5q8M1t7dhkLw320YK4PsOXm6jdnUAkErImaIqOg= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index ed85b215ee4..03c7b793c8d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -933,12 +933,43 @@ def go_repositories(): sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", version = "v0.34.0", ) + go_repository( + name = "com_google_cloud_go_analytics", + importpath = "cloud.google.com/go/analytics", + sum = "h1:+d7hZrqp2IebYPliDiv4AwnUAIqVhMiXHm3G/G9l6ms=", + version = "v0.11.0", + ) + go_repository( + name = "com_google_cloud_go_area120", + importpath = "cloud.google.com/go/area120", + sum = "h1:WTNlum1kMjhnBToR1zbvyhR9IjRnqHJ9UshTbW2P71w=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_artifactregistry", + importpath = "cloud.google.com/go/artifactregistry", + sum = "h1:xAZG9+PMmr2sYXrirtNfSPUeDXTwphAyMB8Ak+zMbhA=", + version = "v1.6.0", + ) + go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", sum = "h1:Px0CZuM7u6mcDysLR2QHlEWza0tN+iSjwCtFZtBY6DA=", version = "v1.5.0", ) + go_repository( + name = "com_google_cloud_go_assuredworkloads", + importpath = "cloud.google.com/go/assuredworkloads", + sum = "h1:4YrCLlal8VEyEl0NsTyUU1TZ+5yikF0UOcqMHtaoCgw=", + version = "v1.5.0", + ) + go_repository( + name = "com_google_cloud_go_automl", + importpath = "cloud.google.com/go/automl", + sum = "h1:Av8bE5rMQxUl4SVfYsEczEJf1ftIKQOUGGzpzEYwodY=", + version = "v1.5.0", + ) go_repository( name = "com_google_cloud_go_bigquery", @@ -946,12 +977,61 @@ def go_repositories(): sum = "h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=", version = "v1.8.0", ) + go_repository( + name = "com_google_cloud_go_billing", + importpath = "cloud.google.com/go/billing", + sum = "h1:SHH+VeM82hsUhSvZ41QIFLO/7hL2SM6auHhCOGt9mwA=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_binaryauthorization", + importpath = "cloud.google.com/go/binaryauthorization", + sum = "h1:CQHsCbtttPweeGwjl0iVnGVR4a+vITzB2aqNoo7vs94=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_cloudtasks", + importpath = "cloud.google.com/go/cloudtasks", + sum = "h1:iamBJut/kfiaoSBiz5ehzbrLBl0okqHMDJPNHFTle6c=", + version = "v1.5.0", + ) + go_repository( name = "com_google_cloud_go_compute", importpath = "cloud.google.com/go/compute", sum = "h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=", version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_datacatalog", + importpath = "cloud.google.com/go/datacatalog", + sum = "h1:Q9DXHJhkRsPm+EfOj60EGlCK0VMSnd4T/BsVmY2Tmg4=", + version = "v1.5.0", + ) + go_repository( + name = "com_google_cloud_go_dataflow", + importpath = "cloud.google.com/go/dataflow", + sum = "h1:N9KtiJFlW/J1jqlSoQorP4Dgj18z0zHbX9xLKrJzSSU=", + version = "v0.6.0", + ) + go_repository( + name = "com_google_cloud_go_dataform", + importpath = "cloud.google.com/go/dataform", + sum = "h1:Kj89ovEwxiRZBkx8uoRt0AaS5deR6+pfpnS3XGv9z0o=", + version = "v0.3.0", + ) + go_repository( + name = "com_google_cloud_go_datalabeling", + importpath = "cloud.google.com/go/datalabeling", + sum = "h1:b7/y5HgaqRFUmbizVQ0yOXlAtEOkiZXUVrhKGOsBdGg=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_dataqna", + importpath = "cloud.google.com/go/dataqna", + sum = "h1:bFRwi0RnhZqwKHQOQ1HQj/HTbKgAkr1D6nZF8HKOepE=", + version = "v0.5.0", + ) go_repository( name = "com_google_cloud_go_datastore", @@ -959,6 +1039,31 @@ def go_repositories(): sum = "h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=", version = "v1.1.0", ) + go_repository( + name = "com_google_cloud_go_datastream", + importpath = "cloud.google.com/go/datastream", + sum = "h1:K29CyNY6MiTlsrJzuDrn02cpuRN+RCYefpxIbHB0K1Y=", + version = "v1.2.0", + ) + go_repository( + name = "com_google_cloud_go_dialogflow", + importpath = "cloud.google.com/go/dialogflow", + sum = "h1:HCW+JtJ/NbLF+kAXKWbF1M1wXtcK8goOpaiVr0uEFk4=", + version = "v1.15.0", + ) + go_repository( + name = "com_google_cloud_go_documentai", + importpath = "cloud.google.com/go/documentai", + sum = "h1:YTflsj8RJd/NougcRLc0yBpdaN/jMJ2JWAmcW29T3Xw=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_domains", + importpath = "cloud.google.com/go/domains", + sum = "h1:m8/VJIzCUE6pbfPM3/mfMesgxXV7wEpR/sRTRB6tC4E=", + version = "v0.6.0", + ) + go_repository( name = "com_google_cloud_go_edgecontainer", importpath = "cloud.google.com/go/edgecontainer", @@ -972,6 +1077,102 @@ def go_repositories(): sum = "h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY=", version = "v1.1.0", ) + go_repository( + name = "com_google_cloud_go_functions", + importpath = "cloud.google.com/go/functions", + sum = "h1:Oveqoadoi2f+yMpJtf1/OrwhTIzaR38l+6Q8/RPyM18=", + version = "v1.6.0", + ) + go_repository( + name = "com_google_cloud_go_gaming", + importpath = "cloud.google.com/go/gaming", + sum = "h1:U50kYdRPcd/E7rII8IJmVYX7R/Am94/ZxNRc/vPW7ZU=", + version = "v1.5.0", + ) + go_repository( + name = "com_google_cloud_go_gkeconnect", + importpath = "cloud.google.com/go/gkeconnect", + sum = "h1:jzwdOvCl4+xpOx2ym+mQS0XQ8kVqLQiu2hy4mmDIv5I=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_gkehub", + importpath = "cloud.google.com/go/gkehub", + sum = "h1:jVq592ihBTKspBF/gTcvWQWigIEAk3zehljQDuUwAGk=", + version = "v0.9.0", + ) + go_repository( + name = "com_google_cloud_go_language", + importpath = "cloud.google.com/go/language", + sum = "h1:setC9wek2TmgP8VuUdaigpe2N8VUDdFz9LpWuq7FyD4=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_lifesciences", + importpath = "cloud.google.com/go/lifesciences", + sum = "h1:8Mf/dMyFIFicbhrh9lcTR0By2EyV4wpWxxrUmRfmUjs=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_mediatranslation", + importpath = "cloud.google.com/go/mediatranslation", + sum = "h1:0SVGWly3pQ/95kvszCTbG3oYKfa1TOZTqqfxup4ktds=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_memcache", + importpath = "cloud.google.com/go/memcache", + sum = "h1:sp0I8gNo9a3m/+CuGF66ssi0l01JF1qJhKbI4cOgb/E=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_metastore", + importpath = "cloud.google.com/go/metastore", + sum = "h1:bK+rgvvBIB1tJawmBFcWUhSnG9nNPHUe/fY8x7oFf3Q=", + version = "v1.5.0", + ) + go_repository( + name = "com_google_cloud_go_networkconnectivity", + importpath = "cloud.google.com/go/networkconnectivity", + sum = "h1:yT8uxVTd67PvUjw9m2d589pa3yv1sJQPcQvqBga5j5o=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_networksecurity", + importpath = "cloud.google.com/go/networksecurity", + sum = "h1:+pHY1wntW9pu/rmlROG3oI+xfxuCUypmoKEVwsKMO/0=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_notebooks", + importpath = "cloud.google.com/go/notebooks", + sum = "h1:wY4We4dMXELuQF7WPFxwODZ6bUtfS9b3+/HMWz/gwVw=", + version = "v1.2.0", + ) + go_repository( + name = "com_google_cloud_go_osconfig", + importpath = "cloud.google.com/go/osconfig", + sum = "h1:4NmUr3p76C9vUle6qivljkZRRsEZNakXbTb3RcNkhRc=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_oslogin", + importpath = "cloud.google.com/go/oslogin", + sum = "h1:Q85UcQz5WLArjJX8nFLZuQ72+HtLw+xnlDuCMJESOEI=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_phishingprotection", + importpath = "cloud.google.com/go/phishingprotection", + sum = "h1:2JlDLzHfDbOhMLBrQeNDWXbhM8266izFwVhtRiKh77Q=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_privatecatalog", + importpath = "cloud.google.com/go/privatecatalog", + sum = "h1:F+sJo8MKSDOEWwrMsUerjdawn6a9NQVG7ir+IX5XYjc=", + version = "v0.5.0", + ) go_repository( name = "com_google_cloud_go_pubsub", @@ -979,11 +1180,72 @@ def go_repositories(): sum = "h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=", version = "v1.3.1", ) + go_repository( + name = "com_google_cloud_go_recaptchaenterprise_v2", + importpath = "cloud.google.com/go/recaptchaenterprise/v2", + sum = "h1:8nXbhOp7SCx4oYlocSQ31jny1K0TMlcnhfh1BGGIw10=", + version = "v2.1.0", + ) + go_repository( + name = "com_google_cloud_go_recommendationengine", + importpath = "cloud.google.com/go/recommendationengine", + sum = "h1:CR3PLwZOfNSWApMXKpMT0+zdpsJEU9ns4qNlqSBRySc=", + version = "v0.5.0", + ) + go_repository( + name = "com_google_cloud_go_recommender", + importpath = "cloud.google.com/go/recommender", + sum = "h1:mqy/VKIKCascBT1q+ZbgWAYOY+KKDwkRNHcBg1uk+uo=", + version = "v1.5.0", + ) + go_repository( + name = "com_google_cloud_go_redis", + importpath = "cloud.google.com/go/redis", + sum = "h1:pP6SOq8nDUQ9bUZoHdOVRp1nX2ANfiXyadRdWquYZIQ=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_retail", + importpath = "cloud.google.com/go/retail", + sum = "h1:cdbsv+P0nwIv7YfcY1QfQ7bA7iWDwQ2yi3fr4vfOg9s=", + version = "v1.8.0", + ) + go_repository( + name = "com_google_cloud_go_scheduler", + importpath = "cloud.google.com/go/scheduler", + sum = "h1:GzmMMK2+nSbuFvik9/tmju6DKmnVNOFXMW/SHZz+gt4=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_secretmanager", + importpath = "cloud.google.com/go/secretmanager", + sum = "h1:5v0zegRMlytVnN7J+bg5Ipqah3I2RZ67ysy00mvA+lA=", + version = "v1.6.0", + ) + go_repository( name = "com_google_cloud_go_security", importpath = "cloud.google.com/go/security", - sum = "h1:D7ZpeFbcu1o6Z/93vDmHxG6cWWVFTCvdN4m+dx6vcCQ=", - version = "v1.5.0", + sum = "h1:176N+6wf67OA6HgqhmNN/AfmUtwq50na2VKR6/6l34k=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_securitycenter", + importpath = "cloud.google.com/go/securitycenter", + sum = "h1:GEWCdMuJZ8Jjm01MvjAMuLAZKvgnt0BSlREUI1zjgjQ=", + version = "v1.13.0", + ) + go_repository( + name = "com_google_cloud_go_servicedirectory", + importpath = "cloud.google.com/go/servicedirectory", + sum = "h1:vUywoQ3ITL7Px1zSG9s/EYum+PSlHnY0zHsk7hoMt/M=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_speech", + importpath = "cloud.google.com/go/speech", + sum = "h1:T/FRwj5ZsImOno7dSckh05LPIvRgW8Gx2ARTeNqIqlY=", + version = "v1.6.0", ) go_repository( @@ -992,6 +1254,37 @@ def go_repositories(): sum = "h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=", version = "v1.10.0", ) + go_repository( + name = "com_google_cloud_go_talent", + importpath = "cloud.google.com/go/talent", + sum = "h1:21beHmO0XsFawwzxAtWNoZln8930k737/6P5DPXAQPI=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_videointelligence", + importpath = "cloud.google.com/go/videointelligence", + sum = "h1:bGbQVZDdKxMhywFruluDEgQW9g5TqAgVeT+gE6WAFOs=", + version = "v1.6.0", + ) + go_repository( + name = "com_google_cloud_go_vision_v2", + importpath = "cloud.google.com/go/vision/v2", + sum = "h1:W7DxaZ74iYxO40tYFRsfZqdOWCbUYs9fTQ8/wQNUVak=", + version = "v2.2.0", + ) + go_repository( + name = "com_google_cloud_go_webrisk", + importpath = "cloud.google.com/go/webrisk", + sum = "h1:ng1tnznwioN3iYbHJf7rQ7mce+YmBzk8v0qX7E8YXeI=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_workflows", + importpath = "cloud.google.com/go/workflows", + sum = "h1:0rYwTypSlEAqaoKO5l2mIecafBvFplpjegMghkyDHdU=", + version = "v1.6.0", + ) + go_repository( name = "com_shuralyov_dmitri_gpu_mtl", importpath = "dmitri.shuralyov.com/gpu/mtl", @@ -1096,8 +1389,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:1QrRpmfwloduRHGMRkFdN0DgqThxHTno7l9NW3i2PFs=", - version = "v0.0.0-20220920164045-a2a065f3c118", + sum = "h1:mmbq5q8M1t7dhkLw320YK4PsOXm6jdnUAkErImaIqOg=", + version = "v0.0.0-20220920201722-2b89144ce006", ) go_repository( name = "org_golang_google_grpc", From 81141d13dc0e5be5f7f9471c529650aa5fb09994 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Sep 2022 17:49:27 -0700 Subject: [PATCH 1427/1518] fix(deps): update google.golang.org/genproto digest to 23cae91 (#2897) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 6 ++++-- repositories.bzl | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index e3542c8ff51..672be7218d9 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006 + google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index dc3d11ee573..cb4034fc070 100644 --- a/go.sum +++ b/go.sum @@ -42,6 +42,7 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= @@ -51,6 +52,7 @@ cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6m cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= @@ -672,8 +674,8 @@ google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006 h1:mmbq5q8M1t7dhkLw320YK4PsOXm6jdnUAkErImaIqOg= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 h1:K1zaaMdYBXRyX+cwFnxj7M6zwDyumLQMZ5xqwGvjreQ= +google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737/go.mod h1:2r/26NEF3bFmT3eC3aZreahSal0C3Shl8Gi6vyDYqOQ= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 03c7b793c8d..05265413829 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -974,8 +974,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_bigquery", importpath = "cloud.google.com/go/bigquery", - sum = "h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=", - version = "v1.8.0", + sum = "h1:JuTk8po4bCKRwObdT0zLb1K0BGkGHJdtgs2GK3j2Gws=", + version = "v1.42.0", ) go_repository( name = "com_google_cloud_go_billing", @@ -1389,8 +1389,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:mmbq5q8M1t7dhkLw320YK4PsOXm6jdnUAkErImaIqOg=", - version = "v0.0.0-20220920201722-2b89144ce006", + sum = "h1:K1zaaMdYBXRyX+cwFnxj7M6zwDyumLQMZ5xqwGvjreQ=", + version = "v0.0.0-20220921223823-23cae91e6737", ) go_repository( name = "org_golang_google_grpc", From 6b2cf62b5e76379165000b914ef37afba9fd495c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 Sep 2022 23:11:17 -0400 Subject: [PATCH 1428/1518] fix(deps): update google.golang.org/genproto digest to dd2d53f (#2903) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 6 ++++-- repositories.bzl | 11 +++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 672be7218d9..64a6e172ad7 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 + google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index cb4034fc070..1cc3de346e8 100644 --- a/go.sum +++ b/go.sum @@ -30,6 +30,7 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= @@ -674,8 +675,9 @@ google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737 h1:K1zaaMdYBXRyX+cwFnxj7M6zwDyumLQMZ5xqwGvjreQ= -google.golang.org/genproto v0.0.0-20220921223823-23cae91e6737/go.mod h1:2r/26NEF3bFmT3eC3aZreahSal0C3Shl8Gi6vyDYqOQ= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc h1:saaNe2+SBQxandnzcD/qB1JEBQ2Pqew+KlFLLdA/XcM= +google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc/go.mod h1:yEEpwVWKMZZzo81NwRgyEJnA2fQvpXAYPVisv8EgDVs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 05265413829..57007306880 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -933,6 +933,13 @@ def go_repositories(): sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", version = "v0.34.0", ) + go_repository( + name = "com_google_cloud_go_aiplatform", + importpath = "cloud.google.com/go/aiplatform", + sum = "h1:D5nT9LhFKyXr8b/Ah+H3u5zSorUIQGuyymEJ85CaSjY=", + version = "v1.22.0", + ) + go_repository( name = "com_google_cloud_go_analytics", importpath = "cloud.google.com/go/analytics", @@ -1389,8 +1396,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:K1zaaMdYBXRyX+cwFnxj7M6zwDyumLQMZ5xqwGvjreQ=", - version = "v0.0.0-20220921223823-23cae91e6737", + sum = "h1:saaNe2+SBQxandnzcD/qB1JEBQ2Pqew+KlFLLdA/XcM=", + version = "v0.0.0-20220923205249-dd2d53f1fffc", ) go_repository( name = "org_golang_google_grpc", From c8e576926fcb89ad69b3db7b081430b7026e8427 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:43:03 -0700 Subject: [PATCH 1429/1518] fix(deps): update google.golang.org/genproto digest to 6981cbe (#2905) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 6 ++++-- repositories.bzl | 11 +++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 64a6e172ad7..9ce87544f79 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc + google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 1cc3de346e8..2f72a1350ba 100644 --- a/go.sum +++ b/go.sum @@ -53,6 +53,7 @@ cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6m cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= @@ -70,6 +71,7 @@ cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJ cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -676,8 +678,8 @@ google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc h1:saaNe2+SBQxandnzcD/qB1JEBQ2Pqew+KlFLLdA/XcM= -google.golang.org/genproto v0.0.0-20220923205249-dd2d53f1fffc/go.mod h1:yEEpwVWKMZZzo81NwRgyEJnA2fQvpXAYPVisv8EgDVs= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce h1:+2ye9vAK4F9F/LCex8dT2cDk0VnTAwUL8uRgX/6nAMU= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 57007306880..0fff09136c8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1009,6 +1009,13 @@ def go_repositories(): sum = "h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=", version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_containeranalysis", + importpath = "cloud.google.com/go/containeranalysis", + sum = "h1:seZBe4+LZGIRd72O3ZjDlftBdO4m0MjgURzlMGSvqpg=", + version = "v0.5.1", + ) + go_repository( name = "com_google_cloud_go_datacatalog", importpath = "cloud.google.com/go/datacatalog", @@ -1396,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:saaNe2+SBQxandnzcD/qB1JEBQ2Pqew+KlFLLdA/XcM=", - version = "v0.0.0-20220923205249-dd2d53f1fffc", + sum = "h1:+2ye9vAK4F9F/LCex8dT2cDk0VnTAwUL8uRgX/6nAMU=", + version = "v0.0.0-20220926220553-6981cbe3cfce", ) go_repository( name = "org_golang_google_grpc", From d38d14d5abc19a3772b94a07c75bf05d784d144d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Sep 2022 17:17:10 +0000 Subject: [PATCH 1430/1518] fix(deps): update google.golang.org/genproto digest to dcaddaf --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9ce87544f79..8a36ed5a754 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce + google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2f72a1350ba..ea0cd5fbb1b 100644 --- a/go.sum +++ b/go.sum @@ -678,8 +678,8 @@ google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce h1:+2ye9vAK4F9F/LCex8dT2cDk0VnTAwUL8uRgX/6nAMU= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704 h1:H1AcWFV69NFCMeBJ8nVLtv8uHZZ5Ozcgoq012hHEFuU= +google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 0fff09136c8..560002f9a64 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:+2ye9vAK4F9F/LCex8dT2cDk0VnTAwUL8uRgX/6nAMU=", - version = "v0.0.0-20220926220553-6981cbe3cfce", + sum = "h1:H1AcWFV69NFCMeBJ8nVLtv8uHZZ5Ozcgoq012hHEFuU=", + version = "v0.0.0-20220927151529-dcaddaf36704", ) go_repository( name = "org_golang_google_grpc", From f359052c37add75313e562d25f8554a78814d408 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 09:53:04 +0000 Subject: [PATCH 1431/1518] chore(deps): update actions/setup-node digest to 969bd26 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7862c7265b..1fc802e587b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - - uses: actions/setup-node@2fddd8803e2f5c9604345a0b591c3020ee971a93 # tag=v3 + - uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 with: node-version: 10 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 From e181e14e0fc6da7918df9674189f13211fcf5cfd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Sep 2022 21:34:38 +0000 Subject: [PATCH 1432/1518] chore(deps): update dependency com_google_protobuf to v3.21.7 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 105da508f54..5a0e7a19497 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "73c95c7b0c13f597a6a1fec7121b07e90fd12b4ed7ff5a781253b3afe07fc077", - strip_prefix = "protobuf-3.21.6", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.6.tar.gz"], + sha256 = "ce2fbea3c78147a41b2a922485d283137845303e5e1b6cbd7ece94b96ade7031", + strip_prefix = "protobuf-3.21.7", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.7.tar.gz"], ) http_archive( From 339b9c97d8589fae0dc3124ed54ad27951b866ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Sep 2022 04:29:37 +0000 Subject: [PATCH 1433/1518] fix(deps): update google.golang.org/genproto digest to 1ce7b20 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8a36ed5a754..6ccd39bc18b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704 + google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index ea0cd5fbb1b..b4935297416 100644 --- a/go.sum +++ b/go.sum @@ -678,8 +678,8 @@ google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704 h1:H1AcWFV69NFCMeBJ8nVLtv8uHZZ5Ozcgoq012hHEFuU= -google.golang.org/genproto v0.0.0-20220927151529-dcaddaf36704/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813 h1:buul04Ikd79A5tP8nGhKEyMfr+/HplsO6nqSUapWZ/M= +google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 560002f9a64..66d12c16587 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:H1AcWFV69NFCMeBJ8nVLtv8uHZZ5Ozcgoq012hHEFuU=", - version = "v0.0.0-20220927151529-dcaddaf36704", + sum = "h1:buul04Ikd79A5tP8nGhKEyMfr+/HplsO6nqSUapWZ/M=", + version = "v0.0.0-20220929141241-1ce7b20da813", ) go_repository( name = "org_golang_google_grpc", From edb1dd4df03d9af923c89f9a6427907e7328d85a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Sep 2022 08:04:49 +0000 Subject: [PATCH 1434/1518] chore(deps): update actions/cache digest to ac80757 --- .github/workflows/ci.yml | 2 +- .github/workflows/renovate.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1fc802e587b..ed4691749e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - - uses: actions/cache@fd5de65bc895cf536527842281bea11763fefd77 # tag=v3 + - uses: actions/cache@ac8075791e805656e71b4ba23325ace9e3421120 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index c7bd5a6afcf..187e6cb1e69 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - - uses: actions/cache@fd5de65bc895cf536527842281bea11763fefd77 # tag=v3 + - uses: actions/cache@ac8075791e805656e71b4ba23325ace9e3421120 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} From f0a461a796d482414d8bbd78cc6f0b5334b24009 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 2 Oct 2022 07:27:12 +0000 Subject: [PATCH 1435/1518] fix(deps): update google.golang.org/genproto digest to c98284e --- go.mod | 2 +- go.sum | 58 ++++++++++++- repositories.bzl | 208 +++++++++++++++++++++++------------------------ 3 files changed, 161 insertions(+), 107 deletions(-) diff --git a/go.mod b/go.mod index 6ccd39bc18b..24fdddd16cc 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813 + google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 google.golang.org/grpc v1.49.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index b4935297416..53701753079 100644 --- a/go.sum +++ b/go.sum @@ -31,12 +31,19 @@ cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -45,8 +52,11 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -54,54 +64,90 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -110,11 +156,16 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -575,6 +626,7 @@ google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOI google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -678,8 +730,10 @@ google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813 h1:buul04Ikd79A5tP8nGhKEyMfr+/HplsO6nqSUapWZ/M= -google.golang.org/genproto v0.0.0-20220929141241-1ce7b20da813/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 h1:Ezh2cpcnP5Rq60sLensUsFnxh7P6513NLvNtCm9iyJ4= +google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 66d12c16587..d68ba952028 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -936,46 +936,46 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_aiplatform", importpath = "cloud.google.com/go/aiplatform", - sum = "h1:D5nT9LhFKyXr8b/Ah+H3u5zSorUIQGuyymEJ85CaSjY=", - version = "v1.22.0", + sum = "h1:QqHZT1IMldf/daXoSnkJWBIqGBsw50X+xP6HSVzLRPo=", + version = "v1.24.0", ) go_repository( name = "com_google_cloud_go_analytics", importpath = "cloud.google.com/go/analytics", - sum = "h1:+d7hZrqp2IebYPliDiv4AwnUAIqVhMiXHm3G/G9l6ms=", - version = "v0.11.0", + sum = "h1:NKw6PpQi6V1O+KsjuTd+bhip9d0REYu4NevC45vtGp8=", + version = "v0.12.0", ) go_repository( name = "com_google_cloud_go_area120", importpath = "cloud.google.com/go/area120", - sum = "h1:WTNlum1kMjhnBToR1zbvyhR9IjRnqHJ9UshTbW2P71w=", - version = "v0.5.0", + sum = "h1:TCMhwWEWhCn8d44/Zs7UCICTWje9j3HuV6nVGMjdpYw=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_artifactregistry", importpath = "cloud.google.com/go/artifactregistry", - sum = "h1:xAZG9+PMmr2sYXrirtNfSPUeDXTwphAyMB8Ak+zMbhA=", - version = "v1.6.0", + sum = "h1:9yKYCozdh29v7QMx3QBuksZGtPNICFb5SVnyNvkKRGg=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", - sum = "h1:Px0CZuM7u6mcDysLR2QHlEWza0tN+iSjwCtFZtBY6DA=", - version = "v1.5.0", + sum = "h1:1zumX+e2xh1qTuBJE0ExxU45s7SmRaZQhp9EJEdQou8=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_assuredworkloads", importpath = "cloud.google.com/go/assuredworkloads", - sum = "h1:4YrCLlal8VEyEl0NsTyUU1TZ+5yikF0UOcqMHtaoCgw=", - version = "v1.5.0", + sum = "h1:2RVswX57rLj/3SneMwVk6inceggf+6wl4THRru/Joi8=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_automl", importpath = "cloud.google.com/go/automl", - sum = "h1:Av8bE5rMQxUl4SVfYsEczEJf1ftIKQOUGGzpzEYwodY=", - version = "v1.5.0", + sum = "h1:U+kHmeKGXgBvTlrecPJhwkItWaIpIscG5DUpQxBQZZg=", + version = "v1.6.0", ) go_repository( @@ -987,20 +987,20 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_billing", importpath = "cloud.google.com/go/billing", - sum = "h1:SHH+VeM82hsUhSvZ41QIFLO/7hL2SM6auHhCOGt9mwA=", - version = "v1.4.0", + sum = "h1:4RESn+mA7eGPBr5eQ4B/hbkHNivzYHbgRWpdlNeNjiE=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_binaryauthorization", importpath = "cloud.google.com/go/binaryauthorization", - sum = "h1:CQHsCbtttPweeGwjl0iVnGVR4a+vITzB2aqNoo7vs94=", - version = "v1.1.0", + sum = "h1:5F7dowxGuYQlX3LjfjH/sKf+IvI1TsItTw0sDZmoec4=", + version = "v1.2.0", ) go_repository( name = "com_google_cloud_go_cloudtasks", importpath = "cloud.google.com/go/cloudtasks", - sum = "h1:iamBJut/kfiaoSBiz5ehzbrLBl0okqHMDJPNHFTle6c=", - version = "v1.5.0", + sum = "h1:IL5W4fh6dAq9x1mO+4evrWCISOmPJegdaO0hZRZmWNE=", + version = "v1.6.0", ) go_repository( @@ -1012,39 +1012,39 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_containeranalysis", importpath = "cloud.google.com/go/containeranalysis", - sum = "h1:seZBe4+LZGIRd72O3ZjDlftBdO4m0MjgURzlMGSvqpg=", - version = "v0.5.1", + sum = "h1:2824iym832ljKdVpCBnpqm5K94YT/uHTVhNF+dRTXPI=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_datacatalog", importpath = "cloud.google.com/go/datacatalog", - sum = "h1:Q9DXHJhkRsPm+EfOj60EGlCK0VMSnd4T/BsVmY2Tmg4=", - version = "v1.5.0", + sum = "h1:xzXGAE2fAuMh+ksODKr9nRv9ega1vHjFwRqMA8tRrVE=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_dataflow", importpath = "cloud.google.com/go/dataflow", - sum = "h1:N9KtiJFlW/J1jqlSoQorP4Dgj18z0zHbX9xLKrJzSSU=", - version = "v0.6.0", + sum = "h1:CW3541Fm7KPTyZjJdnX6NtaGXYFn5XbFC5UcjgALKvU=", + version = "v0.7.0", ) go_repository( name = "com_google_cloud_go_dataform", importpath = "cloud.google.com/go/dataform", - sum = "h1:Kj89ovEwxiRZBkx8uoRt0AaS5deR6+pfpnS3XGv9z0o=", - version = "v0.3.0", + sum = "h1:fnwkyzCVcPI/TmBheGgpmK2h+hWUIDHcZBincHRhrQ0=", + version = "v0.4.0", ) go_repository( name = "com_google_cloud_go_datalabeling", importpath = "cloud.google.com/go/datalabeling", - sum = "h1:b7/y5HgaqRFUmbizVQ0yOXlAtEOkiZXUVrhKGOsBdGg=", - version = "v0.5.0", + sum = "h1:dp8jOF21n/7jwgo/uuA0RN8hvLcKO4q6s/yvwevs2ZM=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_dataqna", importpath = "cloud.google.com/go/dataqna", - sum = "h1:bFRwi0RnhZqwKHQOQ1HQj/HTbKgAkr1D6nZF8HKOepE=", - version = "v0.5.0", + sum = "h1:gx9jr41ytcA3dXkbbd409euEaWtofCVXYBvJz3iYm18=", + version = "v0.6.0", ) go_repository( @@ -1056,26 +1056,26 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_datastream", importpath = "cloud.google.com/go/datastream", - sum = "h1:K29CyNY6MiTlsrJzuDrn02cpuRN+RCYefpxIbHB0K1Y=", - version = "v1.2.0", + sum = "h1:ula4YR2K66o5wifLdPQMtR2I6KP+zvqdSEb6ncd1e0g=", + version = "v1.3.0", ) go_repository( name = "com_google_cloud_go_dialogflow", importpath = "cloud.google.com/go/dialogflow", - sum = "h1:HCW+JtJ/NbLF+kAXKWbF1M1wXtcK8goOpaiVr0uEFk4=", - version = "v1.15.0", + sum = "h1:4ccwvAOnFdgliUJyQSeyG9Yy3HW4jF24xDIX6ftbqvY=", + version = "v1.16.1", ) go_repository( name = "com_google_cloud_go_documentai", importpath = "cloud.google.com/go/documentai", - sum = "h1:YTflsj8RJd/NougcRLc0yBpdaN/jMJ2JWAmcW29T3Xw=", - version = "v1.7.0", + sum = "h1:CipwaecNhtsWUSneV2J5y8OqudHqvqPlcMHgSyh8vak=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_domains", importpath = "cloud.google.com/go/domains", - sum = "h1:m8/VJIzCUE6pbfPM3/mfMesgxXV7wEpR/sRTRB6tC4E=", - version = "v0.6.0", + sum = "h1:pu3JIgC1rswIqi5romW0JgNO6CTUydLYX8zyjiAvO1c=", + version = "v0.7.0", ) go_repository( @@ -1094,98 +1094,98 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_functions", importpath = "cloud.google.com/go/functions", - sum = "h1:Oveqoadoi2f+yMpJtf1/OrwhTIzaR38l+6Q8/RPyM18=", - version = "v1.6.0", + sum = "h1:s3Snbr2O4j4p7CuwImBas8rNNmkHS1YJANcCpKGqQSE=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_gaming", importpath = "cloud.google.com/go/gaming", - sum = "h1:U50kYdRPcd/E7rII8IJmVYX7R/Am94/ZxNRc/vPW7ZU=", - version = "v1.5.0", + sum = "h1:PKggmegChZulPW8yvtziF8P9UOuVFwbvylbEucTNups=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_gkeconnect", importpath = "cloud.google.com/go/gkeconnect", - sum = "h1:jzwdOvCl4+xpOx2ym+mQS0XQ8kVqLQiu2hy4mmDIv5I=", - version = "v0.5.0", + sum = "h1:zAcvDa04tTnGdu6TEZewaLN2tdMtUOJJ7fEceULjguA=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_gkehub", importpath = "cloud.google.com/go/gkehub", - sum = "h1:jVq592ihBTKspBF/gTcvWQWigIEAk3zehljQDuUwAGk=", - version = "v0.9.0", + sum = "h1:JTcTaYQRGsVm+qkah7WzHb6e9sf1C0laYdRPn9aN+vg=", + version = "v0.10.0", ) go_repository( name = "com_google_cloud_go_language", importpath = "cloud.google.com/go/language", - sum = "h1:setC9wek2TmgP8VuUdaigpe2N8VUDdFz9LpWuq7FyD4=", - version = "v1.4.0", + sum = "h1:Fb2iua/5/UBvUuW9PgBinwsCRDi1qoQJEuekOinHFCs=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_lifesciences", importpath = "cloud.google.com/go/lifesciences", - sum = "h1:8Mf/dMyFIFicbhrh9lcTR0By2EyV4wpWxxrUmRfmUjs=", - version = "v0.5.0", + sum = "h1:tIqhivE2LMVYkX0BLgG7xL64oNpDaFFI7teunglt1tI=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_mediatranslation", importpath = "cloud.google.com/go/mediatranslation", - sum = "h1:0SVGWly3pQ/95kvszCTbG3oYKfa1TOZTqqfxup4ktds=", - version = "v0.5.0", + sum = "h1:qAJzpxmEX+SeND10Y/4868L5wfZpo4Y3BIEnIieP4dk=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_memcache", importpath = "cloud.google.com/go/memcache", - sum = "h1:sp0I8gNo9a3m/+CuGF66ssi0l01JF1qJhKbI4cOgb/E=", - version = "v1.4.0", + sum = "h1:qTBOiSnVw7rnW6GVeH5Br8qs80ILoflNgFZySvaT4ek=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_metastore", importpath = "cloud.google.com/go/metastore", - sum = "h1:bK+rgvvBIB1tJawmBFcWUhSnG9nNPHUe/fY8x7oFf3Q=", - version = "v1.5.0", + sum = "h1:wzJ9HslsybiJ3HL2168dVonr9D/eBq0VqObiMSCrE6c=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_networkconnectivity", importpath = "cloud.google.com/go/networkconnectivity", - sum = "h1:yT8uxVTd67PvUjw9m2d589pa3yv1sJQPcQvqBga5j5o=", - version = "v1.4.0", + sum = "h1:mtIQewrz1ewMU3J0vVkUIJtAkpOqgkz4+UmcreeAm08=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_networksecurity", importpath = "cloud.google.com/go/networksecurity", - sum = "h1:+pHY1wntW9pu/rmlROG3oI+xfxuCUypmoKEVwsKMO/0=", - version = "v0.5.0", + sum = "h1:qDEX/3sipg9dS5JYsAY+YvgTjPR63cozzAWop8oZS94=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_notebooks", importpath = "cloud.google.com/go/notebooks", - sum = "h1:wY4We4dMXELuQF7WPFxwODZ6bUtfS9b3+/HMWz/gwVw=", - version = "v1.2.0", + sum = "h1:YfPI4pOYQDcqJ+thM2cGtR9oRoRv42vRfubSPZnk3DI=", + version = "v1.3.0", ) go_repository( name = "com_google_cloud_go_osconfig", importpath = "cloud.google.com/go/osconfig", - sum = "h1:4NmUr3p76C9vUle6qivljkZRRsEZNakXbTb3RcNkhRc=", - version = "v1.7.0", + sum = "h1:fkFlXCxkUt3tE8LYtF6CipuPbC/HIrciwDTjFpsTf88=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_oslogin", importpath = "cloud.google.com/go/oslogin", - sum = "h1:Q85UcQz5WLArjJX8nFLZuQ72+HtLw+xnlDuCMJESOEI=", - version = "v1.4.0", + sum = "h1:/7sVaMdtqSm6AjxW8KzoM6UKawkg3REr0XJ1zKtidpc=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_phishingprotection", importpath = "cloud.google.com/go/phishingprotection", - sum = "h1:2JlDLzHfDbOhMLBrQeNDWXbhM8266izFwVhtRiKh77Q=", - version = "v0.5.0", + sum = "h1:OrwHLSRSZyaiOt3tnY33dsKSedxbMzsXvqB21okItNQ=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_privatecatalog", importpath = "cloud.google.com/go/privatecatalog", - sum = "h1:F+sJo8MKSDOEWwrMsUerjdawn6a9NQVG7ir+IX5XYjc=", - version = "v0.5.0", + sum = "h1:Vz86uiHCtNGm1DeC32HeG2VXmOq5JRYA3VRPf8ZEcSg=", + version = "v0.6.0", ) go_repository( @@ -1197,38 +1197,38 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recaptchaenterprise_v2", importpath = "cloud.google.com/go/recaptchaenterprise/v2", - sum = "h1:8nXbhOp7SCx4oYlocSQ31jny1K0TMlcnhfh1BGGIw10=", - version = "v2.1.0", + sum = "h1:CM59ZlNZxxpn24nwXfxhL4JtnGFTJ6gfSkoFbM8FKxE=", + version = "v2.2.0", ) go_repository( name = "com_google_cloud_go_recommendationengine", importpath = "cloud.google.com/go/recommendationengine", - sum = "h1:CR3PLwZOfNSWApMXKpMT0+zdpsJEU9ns4qNlqSBRySc=", - version = "v0.5.0", + sum = "h1:6w+WxPf2LmUEqX0YyvfCoYb8aBYOcbIV25Vg6R0FLGw=", + version = "v0.6.0", ) go_repository( name = "com_google_cloud_go_recommender", importpath = "cloud.google.com/go/recommender", - sum = "h1:mqy/VKIKCascBT1q+ZbgWAYOY+KKDwkRNHcBg1uk+uo=", - version = "v1.5.0", + sum = "h1:C1tw+Qa/bgm6LoH1wuxYdoyinwKkW/jDJ0GpSJf58cE=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_redis", importpath = "cloud.google.com/go/redis", - sum = "h1:pP6SOq8nDUQ9bUZoHdOVRp1nX2ANfiXyadRdWquYZIQ=", - version = "v1.7.0", + sum = "h1:gtPd4pG/Go5mrdGQ4MJXxPHtjxtoWUBkrWLXNV1L2TA=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_retail", importpath = "cloud.google.com/go/retail", - sum = "h1:cdbsv+P0nwIv7YfcY1QfQ7bA7iWDwQ2yi3fr4vfOg9s=", - version = "v1.8.0", + sum = "h1:Q3W/JsQupZWaoFxUOugZd1Eq590R+Dk6dhacLK2h7+w=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_scheduler", importpath = "cloud.google.com/go/scheduler", - sum = "h1:GzmMMK2+nSbuFvik9/tmju6DKmnVNOFXMW/SHZz+gt4=", - version = "v1.4.0", + sum = "h1:Fe1Upic/q4cwqXbInCzgAW35QSerj8JlNwATIxDdfOI=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_secretmanager", @@ -1240,26 +1240,26 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_security", importpath = "cloud.google.com/go/security", - sum = "h1:176N+6wf67OA6HgqhmNN/AfmUtwq50na2VKR6/6l34k=", - version = "v1.7.0", + sum = "h1:linnRc3/gJYDfKbAtNixVQ52+66DpOx5MmCz0NNxal8=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_securitycenter", importpath = "cloud.google.com/go/securitycenter", - sum = "h1:GEWCdMuJZ8Jjm01MvjAMuLAZKvgnt0BSlREUI1zjgjQ=", - version = "v1.13.0", + sum = "h1:hKIggnv2eCAPjsVnFcZbytMOsFOk6p4ut0iAUDoNsNA=", + version = "v1.14.0", ) go_repository( name = "com_google_cloud_go_servicedirectory", importpath = "cloud.google.com/go/servicedirectory", - sum = "h1:vUywoQ3ITL7Px1zSG9s/EYum+PSlHnY0zHsk7hoMt/M=", - version = "v1.4.0", + sum = "h1:QmCWml/qvNOYyiPP4G52srYcsHSLCXuvydJDVLTFSe8=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_speech", importpath = "cloud.google.com/go/speech", - sum = "h1:T/FRwj5ZsImOno7dSckh05LPIvRgW8Gx2ARTeNqIqlY=", - version = "v1.6.0", + sum = "h1:bRI2QczZGpcPfuhHr63VOdfyyfYp/43N0wRuBKrd0nQ=", + version = "v1.7.0", ) go_repository( @@ -1271,32 +1271,32 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_talent", importpath = "cloud.google.com/go/talent", - sum = "h1:21beHmO0XsFawwzxAtWNoZln8930k737/6P5DPXAQPI=", - version = "v1.1.0", + sum = "h1:6c4pvu3k2idEhJRZnZ2HdVLWZUuT9fsns2gQtCzRtqA=", + version = "v1.2.0", ) go_repository( name = "com_google_cloud_go_videointelligence", importpath = "cloud.google.com/go/videointelligence", - sum = "h1:bGbQVZDdKxMhywFruluDEgQW9g5TqAgVeT+gE6WAFOs=", - version = "v1.6.0", + sum = "h1:w56i2xl1jHX2tz6rHXBPHd6xujevhImzbc16Kl+V/zQ=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_vision_v2", importpath = "cloud.google.com/go/vision/v2", - sum = "h1:W7DxaZ74iYxO40tYFRsfZqdOWCbUYs9fTQ8/wQNUVak=", - version = "v2.2.0", + sum = "h1:eEyIDJ5/98UmQrYZ6eQExUT3iHyDjzzPX29UP6x7ZQo=", + version = "v2.3.0", ) go_repository( name = "com_google_cloud_go_webrisk", importpath = "cloud.google.com/go/webrisk", - sum = "h1:ng1tnznwioN3iYbHJf7rQ7mce+YmBzk8v0qX7E8YXeI=", - version = "v1.4.0", + sum = "h1:WdHJmLSAs5bIis/WWO7pIfiRBD1PiWe1OAlPrWeM9Tk=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_workflows", importpath = "cloud.google.com/go/workflows", - sum = "h1:0rYwTypSlEAqaoKO5l2mIecafBvFplpjegMghkyDHdU=", - version = "v1.6.0", + sum = "h1:0MjX5ugKmTdbRG2Vai5aAgNAOe2wzvs/XQwFDSowy9c=", + version = "v1.7.0", ) go_repository( @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:buul04Ikd79A5tP8nGhKEyMfr+/HplsO6nqSUapWZ/M=", - version = "v0.0.0-20220929141241-1ce7b20da813", + sum = "h1:Ezh2cpcnP5Rq60sLensUsFnxh7P6513NLvNtCm9iyJ4=", + version = "v0.0.0-20220930163606-c98284e70a91", ) go_repository( name = "org_golang_google_grpc", From b2fed3ce9c921d47c82c6b888ebeae0469f6cb5d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:39:47 +0000 Subject: [PATCH 1436/1518] chore(deps): update actions/cache digest to 56461b9 --- .github/workflows/ci.yml | 2 +- .github/workflows/renovate.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed4691749e0..85f9e4a12de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - - uses: actions/cache@ac8075791e805656e71b4ba23325ace9e3421120 # tag=v3 + - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 187e6cb1e69..6075f7ba37b 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - - uses: actions/cache@ac8075791e805656e71b4ba23325ace9e3421120 # tag=v3 + - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} From 066727e47f6b4bd2f46c8f033b2b0c80d58d744e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 13:26:10 +0000 Subject: [PATCH 1437/1518] chore(deps): update actions/checkout digest to 93ea575 --- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/master.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/renovate.yml | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85f9e4a12de..cc7b142cada 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: ${{ matrix.go-version }} - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: go build ./... test: runs-on: ubuntu-latest @@ -22,12 +22,12 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: go test ./... node_test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 with: node-version: 10 @@ -48,7 +48,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: make install - run: make clean - run: make generate @@ -63,7 +63,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel @@ -93,7 +93,7 @@ jobs: gorelease: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: 1.18 @@ -102,7 +102,7 @@ jobs: proto_lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true @@ -116,7 +116,7 @@ jobs: pull-requests: read # for golangci/golangci-lint-action to fetch pull requests runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: golangci/golangci-lint-action@537aa1903e5d359d0b27dbc19ddd22c5087f3fbc # tag=v3 with: version: v1.45 diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 35036aa6f21..d384def22f3 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -11,7 +11,7 @@ jobs: proto_push: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bc746f828c..bd394c1038c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 @@ -48,7 +48,7 @@ jobs: push_bsr_plugins: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 - uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # tag=v2 with: diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 6075f7ba37b..cf67d44c848 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -15,7 +15,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} @@ -57,7 +57,7 @@ jobs: # git conflicts - update_repositoriesbzl steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} From 934c2f704ceb5220dfd0330a2e2be11275a042dc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 16:41:51 -0700 Subject: [PATCH 1438/1518] chore(deps): update golang docker tag to v1.19.2 (#2920) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 4ee4250c228..0fda8f4e8ae 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.1 +FROM golang:1.19.2 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index 320884c894e..2b35da1be58 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.1 as builder +FROM golang:1.19.2 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index db12c09ee9d..00c315119fc 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.1 as builder +FROM golang:1.19.2 as builder ARG RELEASE_VERSION From 905b59dee44ce7a16428a683da7a60997359e01b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Oct 2022 09:44:13 +0000 Subject: [PATCH 1439/1518] chore(deps): update actions/checkout digest to 2541b12 --- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/master.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/renovate.yml | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc7b142cada..85f9e4a12de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: ${{ matrix.go-version }} - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: go build ./... test: runs-on: ubuntu-latest @@ -22,12 +22,12 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: go test ./... node_test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 with: node-version: 10 @@ -48,7 +48,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - run: make install - run: make clean - run: make generate @@ -63,7 +63,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel @@ -93,7 +93,7 @@ jobs: gorelease: runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: 1.18 @@ -102,7 +102,7 @@ jobs: proto_lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true @@ -116,7 +116,7 @@ jobs: pull-requests: read # for golangci/golangci-lint-action to fetch pull requests runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: golangci/golangci-lint-action@537aa1903e5d359d0b27dbc19ddd22c5087f3fbc # tag=v3 with: version: v1.45 diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index d384def22f3..35036aa6f21 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -11,7 +11,7 @@ jobs: proto_push: runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bd394c1038c..8bc746f828c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 @@ -48,7 +48,7 @@ jobs: push_bsr_plugins: runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 - uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # tag=v2 with: diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index cf67d44c848..6075f7ba37b 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -15,7 +15,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} @@ -57,7 +57,7 @@ jobs: # git conflicts - update_repositoriesbzl steps: - - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 + - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} From 489bb7a83e4e072372be69af5700e2c9ee8d7632 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 15:22:41 +0000 Subject: [PATCH 1440/1518] fix(deps): update golang.org/x/oauth2 digest to b44042a --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 24fdddd16cc..56f7b15e406 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 + golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 google.golang.org/grpc v1.49.0 diff --git a/go.sum b/go.sum index 53701753079..23e9ab92c9e 100644 --- a/go.sum +++ b/go.sum @@ -432,8 +432,9 @@ golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1 h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 h1:3VPzK7eqH25j7GYw5w6g/GzNRc0/fYtrxz27z1gD4W0= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index d68ba952028..c5ddbfb2c61 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1472,8 +1472,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:lxqLZaMad/dJHMFZH0NiNpiEZI/nhgWhe4wgzpE+MuA=", - version = "v0.0.0-20220909003341-f21342109be1", + sum = "h1:3VPzK7eqH25j7GYw5w6g/GzNRc0/fYtrxz27z1gD4W0=", + version = "v0.0.0-20221006150949-b44042a4b9c1", ) go_repository( name = "org_golang_x_sync", From cef71ce38a2434ce6a506bf42445ae1a6b42e7cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 19:24:18 +0000 Subject: [PATCH 1441/1518] fix(deps): update module google.golang.org/grpc to v1.50.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 56f7b15e406..efb6dd5c66f 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 golang.org/x/text v0.3.7 google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 - google.golang.org/grpc v1.49.0 + google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 23e9ab92c9e..c00d8acf199 100644 --- a/go.sum +++ b/go.sum @@ -767,8 +767,9 @@ google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0 h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/repositories.bzl b/repositories.bzl index c5ddbfb2c61..f922f4f8822 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1409,8 +1409,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw=", - version = "v1.49.0", + sum = "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=", + version = "v1.50.0", ) go_repository( From 16369c13257f53415627fc9c54e5a4032fe7be88 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 18:16:20 +0000 Subject: [PATCH 1442/1518] fix(deps): update google.golang.org/genproto digest to 15ba04f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index efb6dd5c66f..e2ed4837cee 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 golang.org/x/text v0.3.7 - google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 + google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index c00d8acf199..7f840e8c034 100644 --- a/go.sum +++ b/go.sum @@ -733,8 +733,8 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91 h1:Ezh2cpcnP5Rq60sLensUsFnxh7P6513NLvNtCm9iyJ4= -google.golang.org/genproto v0.0.0-20220930163606-c98284e70a91/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e h1:halCgTFuLWDRD61piiNSxPsARANGD3Xl16hPrLgLiIg= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index f922f4f8822..b13db0a5e15 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Ezh2cpcnP5Rq60sLensUsFnxh7P6513NLvNtCm9iyJ4=", - version = "v0.0.0-20220930163606-c98284e70a91", + sum = "h1:halCgTFuLWDRD61piiNSxPsARANGD3Xl16hPrLgLiIg=", + version = "v0.0.0-20221010155953-15ba04fc1c0e", ) go_repository( name = "org_golang_google_grpc", From 0443675f6acea5bddca361673c6f0bc241dcb644 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:14:29 +0000 Subject: [PATCH 1443/1518] fix(deps): update module golang.org/x/text to v0.3.8 --- go.mod | 2 +- go.sum | 10 +++++++++- repositories.bzl | 12 ++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index e2ed4837cee..28c4562e1a5 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 - golang.org/x/text v0.3.7 + golang.org/x/text v0.3.8 google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 diff --git a/go.sum b/go.sum index 7f840e8c034..d056478f394 100644 --- a/go.sum +++ b/go.sum @@ -317,6 +317,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -330,6 +331,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -365,6 +367,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -408,6 +411,7 @@ golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -447,6 +451,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -507,6 +512,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -519,8 +525,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -575,6 +582,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/repositories.bzl b/repositories.bzl index b13db0a5e15..c4c7303a31b 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1460,8 +1460,8 @@ def go_repositories(): go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=", - version = "v0.3.0", + sum = "h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=", + version = "v0.6.0-dev.0.20220419223038-86c51ed26bb4", ) go_repository( name = "org_golang_x_net", @@ -1497,8 +1497,8 @@ def go_repositories(): go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=", - version = "v0.3.7", + sum = "h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=", + version = "v0.3.8", ) go_repository( @@ -1510,8 +1510,8 @@ def go_repositories(): go_repository( name = "org_golang_x_tools", importpath = "golang.org/x/tools", - sum = "h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=", - version = "v0.0.0-20180917221912-90fa682c2a6e", + sum = "h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=", + version = "v0.1.12", ) go_repository( From c6e5d719b5dc55e947bac37e2be30ff05343d8d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 23:52:42 -0400 Subject: [PATCH 1444/1518] build(deps-dev): bump jekyll-default-layout from 0.1.4 to 0.1.5 in /docs (#2924) Bumps [jekyll-default-layout](https://github.com/benbalter/jekyll-default-layout) from 0.1.4 to 0.1.5. - [Release notes](https://github.com/benbalter/jekyll-default-layout/releases) - [Commits](https://github.com/benbalter/jekyll-default-layout/compare/v0.1.4...v0.1.5) --- updated-dependencies: - dependency-name: jekyll-default-layout dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 260 +++++++++++++++------------------------------- 1 file changed, 82 insertions(+), 178 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index f1fe46240a4..96671f6e442 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,29 +1,21 @@ GEM remote: https://rubygems.org/ specs: - activesupport (6.0.5.1) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.4.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.23.5) concurrent-ruby (1.1.10) - dnsruby (1.61.9) - simpleidn (~> 0.1) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) ethon (0.15.0) ffi (>= 1.15.0) - eventmachine (1.2.7) execjs (2.8.1) faraday (2.3.0) faraday-net_http (~> 2.0) @@ -31,191 +23,111 @@ GEM faraday-net_http (2.0.3) ffi (1.15.5) forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (227) - github-pages-health-check (= 1.17.9) - jekyll (= 3.9.2) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.2.0) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.15.1) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) - jekyll-include-cache (= 0.2.1) - jekyll-mentions (= 1.6.0) - jekyll-optional-front-matter (= 0.3.2) + gemoji (2.1.0) + github-pages (105) + activesupport (= 4.2.7) + github-pages-health-check (= 1.2.0) + jekyll (= 3.3.1) + jekyll-avatar (= 0.4.2) + jekyll-coffeescript (= 1.0.1) + jekyll-feed (= 0.8.0) + jekyll-gist (= 1.4.0) + jekyll-github-metadata (= 2.2.0) + jekyll-mentions (= 1.2.0) jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.16.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.3) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.8.0) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.2.0) - jekyll-theme-cayman (= 0.2.0) - jekyll-theme-dinky (= 0.2.0) - jekyll-theme-hacker (= 0.2.0) - jekyll-theme-leap-day (= 0.2.0) - jekyll-theme-merlot (= 0.2.0) - jekyll-theme-midnight (= 0.2.0) - jekyll-theme-minimal (= 0.2.0) - jekyll-theme-modernist (= 0.2.0) - jekyll-theme-primer (= 0.6.0) - jekyll-theme-slate (= 0.2.0) - jekyll-theme-tactile (= 0.2.0) - jekyll-theme-time-machine (= 0.2.0) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.12.0) - kramdown (= 2.3.2) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.3) + jekyll-redirect-from (= 0.11.0) + jekyll-sass-converter (= 1.3.0) + jekyll-seo-tag (= 2.1.0) + jekyll-sitemap (= 0.12.0) + jekyll-swiss (= 0.4.0) + jemoji (= 0.7.0) + kramdown (= 1.11.1) + liquid (= 3.0.6) + listen (= 3.0.6) mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.13.6, < 2.0) - rouge (= 3.26.0) + minima (= 2.0.0) + rouge (= 1.11.1) terminal-table (~> 1.4) - github-pages-health-check (1.17.9) + github-pages-health-check (1.2.0) addressable (~> 2.3) - dnsruby (~> 1.60) + net-dns (~> 0.8) octokit (~> 4.0) - public_suffix (>= 3.0, < 5.0) - typhoeus (~> 1.3) + public_suffix (~> 1.4) + typhoeus (~> 0.7) html-pipeline (2.14.2) activesupport (>= 2) nokogiri (>= 1.4) - http_parser.rb (0.8.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.9.2) + jekyll (3.3.1) addressable (~> 2.4) colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) + jekyll-watch (~> 1.1) + kramdown (~> 1.3) + liquid (~> 3.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (~> 1.7) safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.4.0) - commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.2.0) - commonmarker (~> 0.23.4) - jekyll (~> 3.9.0) - jekyll-commonmark (~> 1.4.0) - rouge (>= 2.0, < 4.0) - jekyll-default-layout (0.1.4) + jekyll-avatar (0.4.2) jekyll (~> 3.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) + jekyll-coffeescript (1.0.1) + coffee-script (~> 2.2) + jekyll-default-layout (0.1.5) + jekyll (>= 3.0, < 5.0) + jekyll-feed (0.8.0) + jekyll (~> 3.3) + jekyll-gist (1.4.0) octokit (~> 4.2) - jekyll-github-metadata (2.13.0) - jekyll (>= 3.4, < 5.0) + jekyll-github-metadata (2.2.0) + jekyll (~> 3.1) octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.2.1) - jekyll (>= 3.7, < 5.0) - jekyll-mentions (1.6.0) + jekyll-include-cache (0.1.0) + jekyll (~> 3.3) + jekyll-mentions (1.2.0) + activesupport (~> 4.0) html-pipeline (~> 2.3) - jekyll (>= 3.7, < 5.0) + jekyll (~> 3.0) jekyll-optional-front-matter (0.3.2) jekyll (>= 3.0, < 5.0) jekyll-paginate (1.1.0) jekyll-readme-index (0.3.0) jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.16.0) - jekyll (>= 3.3, < 5.0) + jekyll-redirect-from (0.11.0) + jekyll (>= 2.0) jekyll-relative-links (0.6.1) jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.3) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) - rubyzip (>= 1.3.0, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.6.0) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) + jekyll-sass-converter (1.3.0) + sass (~> 3.2) + jekyll-seo-tag (2.1.0) + jekyll (~> 3.3) + jekyll-sitemap (0.12.0) + jekyll (~> 3.3) + jekyll-swiss (0.4.0) jekyll-titles-from-headings (0.5.3) jekyll (>= 3.3, < 5.0) - jekyll-watch (2.2.1) + jekyll-watch (1.5.1) listen (~> 3.0) - jemoji (0.12.0) - gemoji (~> 3.0) + jemoji (0.7.0) + activesupport (~> 4.0) + gemoji (~> 2.0) html-pipeline (~> 2.2) - jekyll (>= 3.0, < 5.0) - just-the-docs (0.3.3) - jekyll (>= 3.8.5) - jekyll-seo-tag (~> 2.0) - rake (>= 12.3.1, < 13.1.0) - kramdown (2.3.2) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) + jekyll (>= 3.0) + json (1.8.6) + just-the-docs (0.1.6) + jekyll (~> 3.3) + rake (~> 10.0) + kramdown (1.11.1) + liquid (3.0.6) + listen (3.0.6) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9.7) mercenary (0.3.6) mini_portile2 (2.8.0) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) + minima (2.0.0) minitest (5.16.2) + net-dns (0.9.0) nokogiri (1.13.7) mini_portile2 (~> 2.8.0) racc (~> 1.4) @@ -224,16 +136,14 @@ GEM sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.7) + public_suffix (1.5.3) racc (1.6.0) - rake (13.0.1) - rb-fsevent (0.11.1) + rake (10.5.0) + rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) + rouge (1.11.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -243,20 +153,14 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) - typhoeus (1.4.0) - ethon (>= 0.9.0) + typhoeus (0.8.0) + ethon (>= 0.8.0) tzinfo (1.2.10) thread_safe (~> 0.1) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) unicode-display_width (1.8.0) - zeitwerk (2.6.0) PLATFORMS ruby From f92416b5413ba5105cee472c4a92e0fe458dcda9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 00:47:43 -0400 Subject: [PATCH 1445/1518] build(deps): bump actions/checkout from 3.0.2 to 3.1.0 (#2922) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.2 to 3.1.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/2541b1294d2704b0964813337f33b291d3f8596b...93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 16 ++++++++-------- .github/workflows/master.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/renovate.yml | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 85f9e4a12de..cc7b142cada 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: ${{ matrix.go-version }} - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: go build ./... test: runs-on: ubuntu-latest @@ -22,12 +22,12 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: go test ./... node_test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 with: node-version: 10 @@ -48,7 +48,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - run: make install - run: make clean - run: make generate @@ -63,7 +63,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel @@ -93,7 +93,7 @@ jobs: gorelease: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: go-version: 1.18 @@ -102,7 +102,7 @@ jobs: proto_lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true @@ -116,7 +116,7 @@ jobs: pull-requests: read # for golangci/golangci-lint-action to fetch pull requests runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: golangci/golangci-lint-action@537aa1903e5d359d0b27dbc19ddd22c5087f3fbc # tag=v3 with: version: v1.45 diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 35036aa6f21..d384def22f3 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -11,7 +11,7 @@ jobs: proto_push: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bc746f828c..bd394c1038c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 @@ -48,7 +48,7 @@ jobs: push_bsr_plugins: runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 - uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # tag=v2 with: diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 6075f7ba37b..cf67d44c848 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -15,7 +15,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} @@ -57,7 +57,7 @@ jobs: # git conflicts - update_repositoriesbzl steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} From 9158dcd1e92cc85084eeb6a8f9b70528d80a95e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 00:49:05 -0400 Subject: [PATCH 1446/1518] build(deps-dev): bump mout in /examples/internal/browser (#2898) Bumps [mout](https://github.com/mout/mout) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/mout/mout/releases) - [Changelog](https://github.com/mout/mout/blob/master/CHANGELOG.md) - [Commits](https://github.com/mout/mout/compare/v1.2.3...v1.2.4) --- updated-dependencies: - dependency-name: mout dependency-type: direct:development ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/internal/browser/package-lock.json | 6 +++--- examples/internal/browser/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/internal/browser/package-lock.json b/examples/internal/browser/package-lock.json index 18b31aa9262..0ddee5b28f6 100644 --- a/examples/internal/browser/package-lock.json +++ b/examples/internal/browser/package-lock.json @@ -3673,9 +3673,9 @@ } }, "mout": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.3.tgz", - "integrity": "sha512-vtE+eZcSj/sBkIp6gxB87MznryWP+gHIp0XX9SKrzA5TAkvz6y7VTuNruBjYdJozd8NY5i9XVIsn8cn3SwNjzg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/mout/-/mout-1.2.4.tgz", + "integrity": "sha512-mZb9uOruMWgn/fw28DG4/yE3Kehfk1zKCLhuDU2O3vlKdnBBr4XaOCqVTflJ5aODavGUPqFHZgrFX3NJVuxGhQ==", "dev": true }, "ms": { diff --git a/examples/internal/browser/package.json b/examples/internal/browser/package.json index f48b60cadd0..729103d6f04 100644 --- a/examples/internal/browser/package.json +++ b/examples/internal/browser/package.json @@ -20,7 +20,7 @@ "swagger-client": "^2.1.28", "webpack-stream": "^3.2.0", "bower-logger": "^0.2.2", - "mout": "^1.1.0", + "mout": "^1.2.4", "bower-config": "^0.6.2", "configstore": "^4.0.0" }, From 7c20fbbb4ca08720dc2fbd2315023a89eb0d2d79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 00:49:18 -0400 Subject: [PATCH 1447/1518] build(deps): bump braces in /examples/internal/browser (#2900) Bumps [braces](https://github.com/micromatch/braces) from 1.8.5 to 2.3.2. - [Release notes](https://github.com/micromatch/braces/releases) - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/commits) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- examples/internal/browser/package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/internal/browser/package-lock.json b/examples/internal/browser/package-lock.json index 0ddee5b28f6..bab89c9aa73 100644 --- a/examples/internal/browser/package-lock.json +++ b/examples/internal/browser/package-lock.json @@ -173,7 +173,7 @@ "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "dev": true, "requires": { "arr-diff": "^2.0.0", @@ -625,7 +625,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" } @@ -763,13 +763,13 @@ "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "requires": { "is-extglob": "^1.0.0" From c21bafa4262df8810d03c2e31b0d45525c71b38c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 07:25:41 +0000 Subject: [PATCH 1448/1518] chore(deps): update docker/build-push-action digest to c56af95 --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bd394c1038c..ffab6187078 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: - name: Set grpc-version run: echo ::set-output name=version::$(go list -m -f '{{.Version}}' google.golang.org/grpc) id: grpc-version - - uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94 # tag=v3 + - uses: docker/build-push-action@c56af957549030174b10d6867f20e78cfd7debc5 # tag=v3 with: push: true tags: plugins.buf.build/grpc-ecosystem/grpc-gateway:${{ github.ref_name }}-1 @@ -71,7 +71,7 @@ jobs: RELEASE_VERSION=${{ github.ref_name }} GO_PROTOBUF_RELEASE_VERSION=${{ steps.protobuf-version.outputs.version }} GO_GRPC_RELEASE_VERSION=${{ steps.grpc-version.outputs.version }} - - uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94 # tag=v3 + - uses: docker/build-push-action@c56af957549030174b10d6867f20e78cfd7debc5 # tag=v3 with: push: true tags: plugins.buf.build/grpc-ecosystem/openapiv2:${{ github.ref_name }}-1 From 38561b377d5a9e2938d58a8ad44b106e90035033 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 10:55:18 +0000 Subject: [PATCH 1449/1518] chore(deps): update docker/login-action digest to f4ef78c --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ffab6187078..d4ce9ff2361 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,7 +50,7 @@ jobs: steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 - - uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # tag=v2 + - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # tag=v2 with: registry: plugins.buf.build username: grpcgatewaybot From 71500781e16ed36907f3934cd36012f0a15ef43f Mon Sep 17 00:00:00 2001 From: Kishan Kolur <54222395+kkolur@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:38:08 -0400 Subject: [PATCH 1450/1518] feat: add option to disable rendering of service tags (#2928) * feat: add option to disable rendering of service tags * Trigger Build * add docs --- .../mapping/customizing_openapi_output.md | 63 +++++++++++++++++++ internal/descriptor/registry.go | 14 +++++ protoc-gen-openapiv2/defs.bzl | 11 ++++ .../internal/genopenapi/template.go | 5 +- .../internal/genopenapi/template_test.go | 12 ++++ protoc-gen-openapiv2/main.go | 2 + 6 files changed, 106 insertions(+), 1 deletion(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index baa5087f571..5ed03f7f132 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -578,4 +578,67 @@ definitions: type: string ``` +### Disable service tag generation + +By default service tags are generated for backend services, but it is possible to disable it using the `disable_service_tags` option. Allowed values are: `true`, `false`. + +For example, if you are using `buf`: +```yaml +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - disable_service_tags=true +``` + +or with `protoc` + +```sh +protoc --openapiv2_out=. --openapiv2_opt=disable_service_tags=true ./path/to/file.proto +``` + +Input example: +```protobuf +syntax = "proto3"; + +package helloproto.v1; +option go_package = "helloproto/v1;helloproto"; + +import "google/api/annotations.proto"; + +service EchoService { + rpc Hello(HelloReq) returns (HelloResp) { + option (google.api.http) = { + get: "/api/hello" + }; + } +} + +message HelloReq { + string name = 1; +} + +message HelloResp { + string message = 1; +} +``` + +Output (tags object are not generated): +```yaml +swagger: "2.0" +info: + title: helloproto/v1/example.proto + version: version not set +consumes: +- application/json +produces: +- application/json +paths: + /api/hello: + get: + operationId: EchoService_Hello +... +``` + {% endraw %} diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index cd2c128f3fb..8a7142f1393 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -127,6 +127,10 @@ type Registry struct { // annotationMap is used to check for duplicate HTTP annotations annotationMap map[annotationIdentifier]struct{} + + // disableServiceTags disables the generation of service tags. + // This is useful if you do not want to expose the names of your backend grpc services. + disableServiceTags bool } type repeatedFieldSeparator struct { @@ -737,3 +741,13 @@ func (r *Registry) CheckDuplicateAnnotation(httpMethod string, httpTemplate stri r.annotationMap[a] = struct{}{} return nil } + +// SetDisableServiceTags sets disableServiceTags +func (r *Registry) SetDisableServiceTags(use bool) { + r.disableServiceTags = use +} + +// GetDisableServiceTags returns disableServiceTags +func (r *Registry) GetDisableServiceTags() bool { + return r.disableServiceTags +} diff --git a/protoc-gen-openapiv2/defs.bzl b/protoc-gen-openapiv2/defs.bzl index b5805e9a740..2ecb18716b6 100644 --- a/protoc-gen-openapiv2/defs.bzl +++ b/protoc-gen-openapiv2/defs.bzl @@ -61,6 +61,7 @@ def _run_proto_gen_openapi( openapi_naming_strategy, use_go_templates, disable_default_errors, + disable_service_tags, enums_as_ints, omit_enum_default_value, output_format, @@ -112,6 +113,9 @@ def _run_proto_gen_openapi( if disable_default_errors: args.add("--openapiv2_opt", "disable_default_errors=true") + if disable_service_tags: + args.add("--openapiv2_opt", "disable_service_tags=true") + if enums_as_ints: args.add("--openapiv2_opt", "enums_as_ints=true") @@ -220,6 +224,7 @@ def _proto_gen_openapi_impl(ctx): openapi_naming_strategy = ctx.attr.openapi_naming_strategy, use_go_templates = ctx.attr.use_go_templates, disable_default_errors = ctx.attr.disable_default_errors, + disable_service_tags = ctx.attr.disable_service_tags, enums_as_ints = ctx.attr.enums_as_ints, omit_enum_default_value = ctx.attr.omit_enum_default_value, output_format = ctx.attr.output_format, @@ -301,6 +306,12 @@ protoc_gen_openapiv2 = rule( doc = "if set, disables generation of default errors." + " This is useful if you have defined custom error handling", ), + "disable_service_tags": attr.bool( + default = False, + mandatory = False, + doc = "if set, disables generation of service tags." + + " This is useful if you do not want to expose the names of your backend grpc services.", + ), "enums_as_ints": attr.bool( default = False, mandatory = False, diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 0c1fc244c3f..9c49d09d9b7 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1589,7 +1589,10 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs, p.Messages); err != nil { panic(err) } - s.Tags = append(s.Tags, renderServiceTags(p.Services, p.reg)...) + + if !p.reg.GetDisableServiceTags() { + s.Tags = append(s.Tags, renderServiceTags(p.Services, p.reg)...) + } messages := messageMap{} streamingMessages := messageMap{} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 329ce969180..7369fe0886a 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1614,6 +1614,18 @@ func TestApplyTemplateOpenAPIConfigFromYAML(t *testing.T) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } + reg.SetDisableServiceTags(true) + + res, err := applyTemplate(param{File: fileCL, reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + if got, want := len(res.Tags), 0; got != want { + t.Fatalf("len(applyTemplate(%#v).Tags) = %d want to be %d", file, got, want) + } + // If there was a failure, print out the input and the json result for debugging. if t.Failed() { t.Errorf("had: %s", file) diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index ec4e5c62750..0e3907c7112 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -40,6 +40,7 @@ var ( omitEnumDefaultValue = flag.Bool("omit_enum_default_value", false, "if set, omit default enum value") outputFormat = flag.String("output_format", string(genopenapi.FormatJSON), fmt.Sprintf("output content format. Allowed values are: `%s`, `%s`", genopenapi.FormatJSON, genopenapi.FormatYAML)) visibilityRestrictionSelectors = utilities.StringArrayFlag(flag.CommandLine, "visibility_restriction_selectors", "list of `google.api.VisibilityRule` visibility labels to include in the generated output when a visibility annotation is defined. Repeat this option to supply multiple values. Elements without visibility annotations are unaffected by this setting.") + disableServiceTags = flag.Bool("disable_service_tags", false, "if set, disables generation of service tags. This is useful if you do not want to expose the names of your backend grpc services.") ) // Variables set by goreleaser at build time @@ -124,6 +125,7 @@ func main() { reg.SetRecursiveDepth(*recursiveDepth) reg.SetOmitEnumDefaultValue(*omitEnumDefaultValue) reg.SetVisibilityRestrictionSelectors(*visibilityRestrictionSelectors) + reg.SetDisableServiceTags(*disableServiceTags) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From fed2660f3528eda1fac64cc6272800a74bc2c59c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 09:54:29 -0700 Subject: [PATCH 1451/1518] chore(deps): update docker/setup-buildx-action digest to 95cb08c (#2933) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4ce9ff2361..e0d01a4d594 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,7 +49,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # tag=v2 + - uses: docker/setup-buildx-action@95cb08cb2672c73d4ffd2f422e6d11953d2a9c70 # tag=v2 - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # tag=v2 with: registry: plugins.buf.build From b96841f939f24de62ba82b9279338cef6f030e28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:04:25 +0000 Subject: [PATCH 1452/1518] chore(deps): update actions/cache digest to 1c73980 --- .github/workflows/ci.yml | 2 +- .github/workflows/renovate.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc7b142cada..b0795cef7ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 + - uses: actions/cache@1c73980b09e7aea7201f325a7aa3ad00beddcdda # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index cf67d44c848..9056e797a20 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # tag=v3 + - uses: actions/cache@1c73980b09e7aea7201f325a7aa3ad00beddcdda # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} From 4f8292a732f61e9f9cc9c0ef77e475519dfc13fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 10:06:23 -0700 Subject: [PATCH 1453/1518] chore(deps): update actions/setup-node digest to 8c91899 (#2940) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0795cef7ed..a98f5c6f2ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/setup-node@969bd2663942d722d85b6a8626225850c2f7be4b # tag=v3 + - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3 with: node-version: 10 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 From e3b2511c9c5cb60cefd608541263eea3f5ec9338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6sta=20Jonasson?= <49041719+gostajonasson@users.noreply.github.com> Date: Thu, 13 Oct 2022 21:06:47 +0200 Subject: [PATCH 1454/1518] fix: required properties of message type are required in OpenAPI (#2904) --- examples/internal/clients/abe/BUILD.bazel | 3 + .../internal/clients/abe/api/swagger.yaml | 89 +- .../abe/api_a_bit_of_everything_service.go | 157 ++ .../clients/abe/model_a_bit_of_everything.go | 2 - .../abe/model_a_bit_of_everything_1.go | 2 - .../abe/model_a_bit_of_everything_2.go | 2 - .../abe/model_a_bit_of_everything_3.go | 2 - .../abe/model_a_bit_of_everything_4.go | 2 - .../abe/model_a_bit_of_everything_nested.go | 1 - .../model_examplepb_a_bit_of_everything.go | 2 - .../clients/abe/model_examplepb_bar.go | 15 + .../clients/abe/model_examplepb_foo.go | 15 + ...examplepb_required_message_type_request.go | 16 + ...ep_pathsingle_nested_name_single_nested.go | 1 - .../proto/examplepb/a_bit_of_everything.pb.go | 1460 ++++++++++------- .../examplepb/a_bit_of_everything.pb.gw.go | 85 + .../proto/examplepb/a_bit_of_everything.proto | 22 + .../a_bit_of_everything.swagger.json | 148 +- .../examplepb/a_bit_of_everything_grpc.pb.go | 36 + .../examplepb/generated_input.swagger.json | 11 +- .../proto/examplepb/stream.swagger.json | 11 +- .../internal/server/a_bit_of_everything.go | 4 + .../internal/genopenapi/template.go | 18 +- .../internal/genopenapi/template_test.go | 3 +- 24 files changed, 1384 insertions(+), 723 deletions(-) create mode 100644 examples/internal/clients/abe/model_examplepb_bar.go create mode 100644 examples/internal/clients/abe/model_examplepb_foo.go create mode 100644 examples/internal/clients/abe/model_examplepb_required_message_type_request.go diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 8fc1bf35e49..57f5cb2da9e 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -25,12 +25,15 @@ go_library( "model_book.go", "model_examplepb_a_bit_of_everything.go", "model_examplepb_a_bit_of_everything_repeated.go", + "model_examplepb_bar.go", "model_examplepb_body.go", "model_examplepb_book.go", "model_examplepb_check_status_response.go", "model_examplepb_error_object.go", "model_examplepb_error_response.go", + "model_examplepb_foo.go", "model_examplepb_numeric_enum.go", + "model_examplepb_required_message_type_request.go", "model_examplepb_snake_enum_response.go", "model_examplepbsnake_case_0_enum.go", "model_examplepbsnake_case_enum.go", diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index c0e1fd3c96a..f31ba31ca31 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -3754,6 +3754,44 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v1/example/requiredmessagetype: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_PostRequiredMessageType" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbRequiredMessageTypeRequest" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + type: "object" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v1/example/snake/{who}/{what}/{where}: get: tags: @@ -4505,7 +4543,6 @@ definitions: type: "integer" format: "int64" ok: - description: "DeepEnum description." $ref: "#/definitions/NestedDeepEnum" description: "Nested is nested type." example: @@ -4638,8 +4675,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -4654,8 +4689,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -4794,6 +4827,13 @@ definitions: - 1 - 2 - 3 + examplepbBar: + type: "object" + required: + - "id" + properties: + id: + type: "string" examplepbBody: type: "object" properties: @@ -4858,6 +4898,13 @@ definitions: pattern: "^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$" error: $ref: "#/definitions/examplepbErrorObject" + examplepbFoo: + type: "object" + required: + - "bar" + properties: + bar: + $ref: "#/definitions/examplepbBar" examplepbNumericEnum: type: "string" description: "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE\ @@ -4866,6 +4913,17 @@ definitions: - "ZERO" - "ONE" default: "ZERO" + examplepbRequiredMessageTypeRequest: + type: "object" + required: + - "foo" + - "id" + properties: + id: + type: "string" + foo: + $ref: "#/definitions/examplepbFoo" + title: "Required message type -> OpenAPI\nhttps://github.com/grpc-ecosystem/grpc-gateway/issues/2837" examplepbSnakeEnumResponse: type: "object" examplepbsnake_case_0_enum: @@ -5108,8 +5166,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5124,8 +5180,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5177,7 +5231,6 @@ definitions: type: "integer" format: "int64" ok: - description: "DeepEnum description." $ref: "#/definitions/NestedDeepEnum" description: "Nested is nested type." example: "{\"ok\":\"TRUE\"}" @@ -5295,8 +5348,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5311,8 +5362,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5481,8 +5530,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5497,8 +5544,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5652,8 +5697,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5668,8 +5711,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5813,8 +5854,6 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: - description: "Numeric enum description." - title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5829,8 +5868,6 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: - description: "Nested object description." - title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 7df537279f5..c0436afa252 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -5092,6 +5092,163 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostOneofEnum return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostRequiredMessageType(ctx context.Context, body ExamplepbRequiredMessageTypeRequest) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/requiredmessagetype" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index e55a54d4699..4f4114a7b4c 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -48,13 +48,11 @@ type ABitOfEverything struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index 52b45cd2eab..3d6c0b5c454 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -49,13 +49,11 @@ type ABitOfEverything1 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index ebc7b46e5fe..f50314f15a4 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -48,13 +48,11 @@ type ABitOfEverything2 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index ef6853090a3..046730b8fcb 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -48,13 +48,11 @@ type ABitOfEverything3 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index 411d1f814d3..63a265551fe 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -48,13 +48,11 @@ type ABitOfEverything4 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation,omitempty"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_nested.go b/examples/internal/clients/abe/model_a_bit_of_everything_nested.go index 586778feaaa..a90f8e75207 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_nested.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_nested.go @@ -15,6 +15,5 @@ type ABitOfEverythingNested struct { // name is nested field. Name string `json:"name,omitempty"` Amount int64 `json:"amount,omitempty"` - // DeepEnum description. Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index eb224da50b2..f029321bb3b 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -49,13 +49,11 @@ type ExamplepbABitOfEverything struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` - // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` - // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_examplepb_bar.go b/examples/internal/clients/abe/model_examplepb_bar.go new file mode 100644 index 00000000000..40841f24c41 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_bar.go @@ -0,0 +1,15 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbBar struct { + Id string `json:"id"` +} diff --git a/examples/internal/clients/abe/model_examplepb_foo.go b/examples/internal/clients/abe/model_examplepb_foo.go new file mode 100644 index 00000000000..168f5b7f630 --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_foo.go @@ -0,0 +1,15 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbFoo struct { + Bar *ExamplepbBar `json:"bar"` +} diff --git a/examples/internal/clients/abe/model_examplepb_required_message_type_request.go b/examples/internal/clients/abe/model_examplepb_required_message_type_request.go new file mode 100644 index 00000000000..a64035f141c --- /dev/null +++ b/examples/internal/clients/abe/model_examplepb_required_message_type_request.go @@ -0,0 +1,16 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type ExamplepbRequiredMessageTypeRequest struct { + Id string `json:"id"` + Foo *ExamplepbFoo `json:"foo"` +} diff --git a/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go index 3ab04604db7..1997ba73ca9 100644 --- a/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go +++ b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go @@ -13,6 +13,5 @@ package abe // Nested is nested type. type V1exampledeepPathsingleNestedNameSingleNested struct { Amount int64 `json:"amount,omitempty"` - // DeepEnum description. Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index e533826ef79..1a845f95449 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1478,6 +1478,157 @@ func (*SnakeEnumResponse) Descriptor() ([]byte, []int) { return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{12} } +// Required message type -> OpenAPI +// https://github.com/grpc-ecosystem/grpc-gateway/issues/2837 +type RequiredMessageTypeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Foo *Foo `protobuf:"bytes,2,opt,name=foo,proto3" json:"foo,omitempty"` +} + +func (x *RequiredMessageTypeRequest) Reset() { + *x = RequiredMessageTypeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequiredMessageTypeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequiredMessageTypeRequest) ProtoMessage() {} + +func (x *RequiredMessageTypeRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequiredMessageTypeRequest.ProtoReflect.Descriptor instead. +func (*RequiredMessageTypeRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{13} +} + +func (x *RequiredMessageTypeRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RequiredMessageTypeRequest) GetFoo() *Foo { + if x != nil { + return x.Foo + } + return nil +} + +type Foo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bar *Bar `protobuf:"bytes,1,opt,name=bar,proto3" json:"bar,omitempty"` +} + +func (x *Foo) Reset() { + *x = Foo{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Foo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Foo) ProtoMessage() {} + +func (x *Foo) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Foo.ProtoReflect.Descriptor instead. +func (*Foo) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{14} +} + +func (x *Foo) GetBar() *Bar { + if x != nil { + return x.Bar + } + return nil +} + +type Bar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *Bar) Reset() { + *x = Bar{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Bar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Bar) ProtoMessage() {} + +func (x *Bar) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Bar.ProtoReflect.Descriptor instead. +func (*Bar) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{15} +} + +func (x *Bar) GetId() string { + if x != nil { + return x.Id + } + return "" +} + // Nested is nested type. type ABitOfEverything_Nested struct { state protoimpl.MessageState @@ -1494,7 +1645,7 @@ type ABitOfEverything_Nested struct { func (x *ABitOfEverything_Nested) Reset() { *x = ABitOfEverything_Nested{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1507,7 +1658,7 @@ func (x *ABitOfEverything_Nested) String() string { func (*ABitOfEverything_Nested) ProtoMessage() {} func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13] + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2043,562 +2194,588 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, - 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, - 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, - 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, - 0x10, 0x01, 0x32, 0xea, 0x34, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, - 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7d, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x03, 0x66, 0x6f, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, + 0x66, 0x6f, 0x6f, 0x22, 0x51, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, 0x4a, 0x0a, 0x03, 0x62, 0x61, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x72, 0x42, 0x03, 0xe0, 0x41, + 0x02, 0x52, 0x03, 0x62, 0x61, 0x72, 0x22, 0x1a, 0x0a, 0x03, 0x42, 0x61, 0x72, 0x12, 0x13, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x02, + 0x69, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, + 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, + 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, 0x10, + 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, + 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x10, 0x01, + 0x32, 0x96, 0x36, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, - 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, - 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, + 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, + 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, + 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, + 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, + 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, + 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, + 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, + 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, - 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, - 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, - 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, - 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, - 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, + 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, - 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, - 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, + 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, + 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, + 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, + 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, + 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, + 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, + 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, + 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, + 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, + 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, + 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, + 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, + 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, + 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, + 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, + 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, - 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, - 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, - 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, - 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, - 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, - 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, - 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, - 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, - 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, - 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, - 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, + 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, + 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, + 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, - 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, - 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, + 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, + 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, - 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, - 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, - 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, - 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, - 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, - 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, + 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, + 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, + 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, + 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, + 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, - 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, + 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, - 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, - 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x1a, 0xbf, 0x01, - 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, - 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, - 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, - 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, - 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, - 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, - 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x6f, 0x66, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0xa9, 0x01, 0x0a, 0x17, + 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, + 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, + 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, + 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, + 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, + 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, + 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, + 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, - 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, - 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, - 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, + 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, + 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, + 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, + 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, + 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, - 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, - 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, - 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, - 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, - 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, - 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, + 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, + 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, + 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, + 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, + 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, + 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, - 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, - 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, - 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, - 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, - 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, - 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, - 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, - 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, - 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, - 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, - 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, - 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, - 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, - 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, - 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, - 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, - 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, - 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, - 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, - 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, - 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, - 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, - 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, - 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, + 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, + 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, + 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, + 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, + 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, + 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, + 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, + 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, + 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, + 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, + 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, + 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, + 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, + 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, + 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, + 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2614,7 +2791,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZI } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ (NumericEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum (SnakeCaseEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.snake_case_enum @@ -2633,128 +2810,135 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = [ (*UpdateBookRequest)(nil), // 14: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest (*SnakeEnumRequest)(nil), // 15: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest (*SnakeEnumResponse)(nil), // 16: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse - (*ABitOfEverything_Nested)(nil), // 17: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - nil, // 18: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - nil, // 19: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 20: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - (pathenum.PathEnum)(0), // 21: grpc.gateway.examples.internal.pathenum.PathEnum - (pathenum.MessagePathEnum_NestedPathEnum)(0), // 22: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - (*emptypb.Empty)(nil), // 23: google.protobuf.Empty - (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp - (*status.Status)(nil), // 25: google.rpc.Status - (*fieldmaskpb.FieldMask)(nil), // 26: google.protobuf.FieldMask - (pathenum.SnakeCaseForImport)(0), // 27: grpc.gateway.examples.internal.pathenum.snake_case_for_import - (*sub2.IdMessage)(nil), // 28: grpc.gateway.examples.internal.proto.sub2.IdMessage - (*sub.StringMessage)(nil), // 29: grpc.gateway.examples.internal.proto.sub.StringMessage - (*durationpb.Duration)(nil), // 30: google.protobuf.Duration - (*pathenum.MessageWithPathEnum)(nil), // 31: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - (*pathenum.MessageWithNestedPathEnum)(nil), // 32: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - (*oneofenum.OneofEnumMessage)(nil), // 33: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage - (*wrapperspb.StringValue)(nil), // 34: google.protobuf.StringValue + (*RequiredMessageTypeRequest)(nil), // 17: grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest + (*Foo)(nil), // 18: grpc.gateway.examples.internal.proto.examplepb.Foo + (*Bar)(nil), // 19: grpc.gateway.examples.internal.proto.examplepb.Bar + (*ABitOfEverything_Nested)(nil), // 20: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + nil, // 21: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + nil, // 22: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + (pathenum.PathEnum)(0), // 24: grpc.gateway.examples.internal.pathenum.PathEnum + (pathenum.MessagePathEnum_NestedPathEnum)(0), // 25: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*emptypb.Empty)(nil), // 26: google.protobuf.Empty + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (*status.Status)(nil), // 28: google.rpc.Status + (*fieldmaskpb.FieldMask)(nil), // 29: google.protobuf.FieldMask + (pathenum.SnakeCaseForImport)(0), // 30: grpc.gateway.examples.internal.pathenum.snake_case_for_import + (*sub2.IdMessage)(nil), // 31: grpc.gateway.examples.internal.proto.sub2.IdMessage + (*sub.StringMessage)(nil), // 32: grpc.gateway.examples.internal.proto.sub.StringMessage + (*durationpb.Duration)(nil), // 33: google.protobuf.Duration + (*pathenum.MessageWithPathEnum)(nil), // 34: grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + (*pathenum.MessageWithNestedPathEnum)(nil), // 35: grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + (*oneofenum.OneofEnumMessage)(nil), // 36: grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage + (*wrapperspb.StringValue)(nil), // 37: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ 5, // 0: grpc.gateway.examples.internal.proto.examplepb.ErrorResponse.error:type_name -> grpc.gateway.examples.internal.proto.examplepb.ErrorObject - 17, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 17, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 20, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 20, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 21, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 22, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - 23, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 18, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry - 19, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry - 20, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry - 24, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 24, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 25, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 26, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 21, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + 22, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + 23, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + 27, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum 0, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 17, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 17, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 20, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 20, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested 0, // 16: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 25, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status + 28, // 17: grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse.status:type_name -> google.rpc.Status 9, // 18: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body 6, // 19: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 26, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask - 24, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp + 29, // 20: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 27, // 21: grpc.gateway.examples.internal.proto.examplepb.Book.create_time:type_name -> google.protobuf.Timestamp 12, // 22: grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book 12, // 23: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.book:type_name -> grpc.gateway.examples.internal.proto.examplepb.Book - 26, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask + 29, // 24: grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest.update_mask:type_name -> google.protobuf.FieldMask 1, // 25: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.what:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_enum 2, // 26: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.who:type_name -> grpc.gateway.examples.internal.proto.examplepb.snake_case_0_enum - 27, // 27: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.where:type_name -> grpc.gateway.examples.internal.pathenum.snake_case_for_import - 3, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum - 17, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested - 6, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 13, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest - 14, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest - 28, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 6, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 11, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request - 28, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage - 6, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 7, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 29, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 6, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 30, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 23, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 23, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 10, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody - 9, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body - 6, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 31, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 32, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 23, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 6, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 33, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage - 23, // 61: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 23, // 62: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 15, // 63: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest - 6, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 65: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 12, // 66: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 12, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 23, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 23, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 23, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 7, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 29, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 6, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 23, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 23, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 23, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 23, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 6, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 34, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 23, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 23, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 8, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 23, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 23, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 6, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 23, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty - 23, // 94: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 23, // 95: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 16, // 96: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse - 64, // [64:97] is the sub-list for method output_type - 31, // [31:64] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 30, // 27: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest.where:type_name -> grpc.gateway.examples.internal.pathenum.snake_case_for_import + 18, // 28: grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest.foo:type_name -> grpc.gateway.examples.internal.proto.examplepb.Foo + 19, // 29: grpc.gateway.examples.internal.proto.examplepb.Foo.bar:type_name -> grpc.gateway.examples.internal.proto.examplepb.Bar + 3, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 20, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 6, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 13, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.CreateBookRequest + 14, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateBookRequest + 31, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 6, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 11, // 41: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 31, // 42: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 6, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 7, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 32, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 33, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 26, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 26, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 10, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 9, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 6, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 34, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 35, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 26, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 6, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 36, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage + 17, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:input_type -> grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest + 26, // 64: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 26, // 65: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 15, // 66: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest + 6, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 12, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 12, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 6, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 26, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 26, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 26, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 7, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 32, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 26, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 26, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 26, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 26, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 6, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 37, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 26, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 26, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 8, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 26, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 26, // 94: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 6, // 95: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 96: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty + 26, // 97: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:output_type -> google.protobuf.Empty + 26, // 98: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 26, // 99: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 16, // 100: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse + 67, // [67:101] is the sub-list for method output_type + 33, // [33:67] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() } @@ -2920,6 +3104,42 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { } } file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequiredMessageTypeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Foo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Bar); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ABitOfEverything_Nested); i { case 0: return &v.state @@ -2942,7 +3162,7 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc, NumEnums: 4, - NumMessages: 17, + NumMessages: 20, NumExtensions: 0, NumServices: 4, }, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index d81c2b123b4..2dee90c53dc 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2716,6 +2716,40 @@ func local_request_ABitOfEverythingService_PostOneofEnum_0(ctx context.Context, } +func request_ABitOfEverythingService_PostRequiredMessageType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RequiredMessageTypeRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.PostRequiredMessageType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_PostRequiredMessageType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RequiredMessageTypeRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.PostRequiredMessageType(ctx, &protoReq) + return msg, metadata, err + +} + func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -3671,6 +3705,31 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_PostRequiredMessageType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType", runtime.WithHTTPPathPattern("/v1/example/requiredmessagetype")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -4506,6 +4565,28 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_PostRequiredMessageType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType", runtime.WithHTTPPathPattern("/v1/example/requiredmessagetype")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_PostRequiredMessageType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -4575,6 +4656,8 @@ var ( pattern_ABitOfEverythingService_TraceRequest_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) pattern_ABitOfEverythingService_PostOneofEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "oneofenum"}, "")) + + pattern_ABitOfEverythingService_PostRequiredMessageType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "requiredmessagetype"}, "")) ) var ( @@ -4643,6 +4726,8 @@ var ( forward_ABitOfEverythingService_TraceRequest_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_PostOneofEnum_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_PostRequiredMessageType_0 = runtime.ForwardResponseMessage ) // RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2188fb19ba7..fd5ea647d62 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -794,6 +794,13 @@ service ABitOfEverythingService { body: "example_enum" }; } + + rpc PostRequiredMessageType(RequiredMessageTypeRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/example/requiredmessagetype" + body: "*" + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) @@ -843,3 +850,18 @@ message SnakeEnumRequest { } message SnakeEnumResponse {} + +// Required message type -> OpenAPI +// https://github.com/grpc-ecosystem/grpc-gateway/issues/2837 +message RequiredMessageTypeRequest { + string id = 1 [(google.api.field_behavior) = REQUIRED]; + Foo foo = 2 [(google.api.field_behavior) = REQUIRED]; +} + +message Foo { + Bar bar = 1 [(google.api.field_behavior) = REQUIRED]; +} + +message Bar { + string id = 1 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 76532ad75b2..3cf9f72722b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2335,9 +2335,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -2356,9 +2354,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -4453,8 +4449,7 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum", - "description": "DeepEnum description." + "$ref": "#/definitions/NestedDeepEnum" } }, "description": "Nested is nested type." @@ -4594,9 +4589,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -4615,9 +4608,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -4746,6 +4737,62 @@ ] } }, + "/v1/example/requiredmessagetype": { + "post": { + "operationId": "ABitOfEverythingService_PostRequiredMessageType", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbRequiredMessageTypeRequest" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v1/example/snake/{who}/{what}/{where}": { "get": { "operationId": "SnakeEnumService_SnakeEnum", @@ -5181,9 +5228,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -5202,9 +5247,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -5474,9 +5517,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -5495,9 +5536,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -6277,9 +6316,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -6298,9 +6335,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -6454,8 +6489,7 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum", - "description": "DeepEnum description." + "$ref": "#/definitions/NestedDeepEnum" } }, "description": "Nested is nested type." @@ -6622,9 +6656,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -6643,9 +6675,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", @@ -6840,6 +6870,17 @@ }, "title": "ABitOfEverythingRepeated is used to validate repeated path parameter functionality" }, + "examplepbBar": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, "examplepbBody": { "type": "object", "properties": { @@ -6911,6 +6952,17 @@ } } }, + "examplepbFoo": { + "type": "object", + "properties": { + "bar": { + "$ref": "#/definitions/examplepbBar" + } + }, + "required": [ + "bar" + ] + }, "examplepbNumericEnum": { "type": "string", "enum": [ @@ -6920,6 +6972,22 @@ "default": "ZERO", "description": "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1" }, + "examplepbRequiredMessageTypeRequest": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "foo": { + "$ref": "#/definitions/examplepbFoo" + } + }, + "title": "Required message type -\u003e OpenAPI\nhttps://github.com/grpc-ecosystem/grpc-gateway/issues/2837", + "required": [ + "id", + "foo" + ] + }, "examplepbSnakeEnumResponse": { "type": "object" }, diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index 4227137bd23..dafa80ca2d4 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -66,6 +66,7 @@ type ABitOfEverythingServiceClient interface { CustomOptionsRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*emptypb.Empty, error) TraceRequest(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) PostOneofEnum(ctx context.Context, in *oneofenum.OneofEnumMessage, opts ...grpc.CallOption) (*emptypb.Empty, error) + PostRequiredMessageType(ctx context.Context, in *RequiredMessageTypeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type aBitOfEverythingServiceClient struct { @@ -346,6 +347,15 @@ func (c *aBitOfEverythingServiceClient) PostOneofEnum(ctx context.Context, in *o return out, nil } +func (c *aBitOfEverythingServiceClient) PostRequiredMessageType(ctx context.Context, in *RequiredMessageTypeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. // All implementations should embed UnimplementedABitOfEverythingServiceServer // for forward compatibility @@ -391,6 +401,7 @@ type ABitOfEverythingServiceServer interface { CustomOptionsRequest(context.Context, *ABitOfEverything) (*emptypb.Empty, error) TraceRequest(context.Context, *ABitOfEverything) (*ABitOfEverything, error) PostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) + PostRequiredMessageType(context.Context, *RequiredMessageTypeRequest) (*emptypb.Empty, error) } // UnimplementedABitOfEverythingServiceServer should be embedded to have forward compatible implementations. @@ -487,6 +498,9 @@ func (UnimplementedABitOfEverythingServiceServer) TraceRequest(context.Context, func (UnimplementedABitOfEverythingServiceServer) PostOneofEnum(context.Context, *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method PostOneofEnum not implemented") } +func (UnimplementedABitOfEverythingServiceServer) PostRequiredMessageType(context.Context, *RequiredMessageTypeRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method PostRequiredMessageType not implemented") +} // UnsafeABitOfEverythingServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ABitOfEverythingServiceServer will @@ -1039,6 +1053,24 @@ func _ABitOfEverythingService_PostOneofEnum_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_PostRequiredMessageType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequiredMessageTypeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).PostRequiredMessageType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostRequiredMessageType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).PostRequiredMessageType(ctx, req.(*RequiredMessageTypeRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ABitOfEverythingService_ServiceDesc is the grpc.ServiceDesc for ABitOfEverythingService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1166,6 +1198,10 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "PostOneofEnum", Handler: _ABitOfEverythingService_PostOneofEnum_Handler, }, + { + MethodName: "PostRequiredMessageType", + Handler: _ABitOfEverythingService_PostRequiredMessageType_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 2c746192f95..09a0f021204 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -67,8 +67,7 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum", - "description": "DeepEnum description." + "$ref": "#/definitions/NestedDeepEnum" } }, "description": "Nested is nested type." @@ -235,9 +234,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -256,9 +253,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 583402773c6..5814d0972e7 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -171,8 +171,7 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum", - "description": "DeepEnum description." + "$ref": "#/definitions/NestedDeepEnum" } }, "description": "Nested is nested type." @@ -361,9 +360,7 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum", - "description": "Numeric enum description.", - "title": "Numeric enum title" + "$ref": "#/definitions/examplepbNumericEnum" }, "repeatedStringAnnotation": { "type": "array", @@ -382,9 +379,7 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested", - "description": "Nested object description.", - "title": "Nested object title" + "$ref": "#/definitions/ABitOfEverythingNested" }, "int64OverrideType": { "type": "integer", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 2cf15d56d4e..490308937e6 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -411,3 +411,7 @@ func (s *_ABitOfEverythingServer) TraceRequest(ctx context.Context, msg *example func (s *_ABitOfEverythingServer) PostOneofEnum(ctx context.Context, msg *oneofenum.OneofEnumMessage) (*emptypb.Empty, error) { return new(emptypb.Empty), nil } + +func (s *_ABitOfEverythingServer) PostRequiredMessageType(ctx context.Context, req *examples.RequiredMessageTypeRequest) (*emptypb.Empty, error) { + return new(emptypb.Empty), nil +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 9c49d09d9b7..9735a4a6f61 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -516,6 +516,12 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry fieldSchema.Required = nil } + if fieldSchema.Ref != "" { + // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. + // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 + fieldSchema = openapiSchemaObject{schemaCore: schemaCore{Ref: fieldSchema.Ref}} + } + kv := keyVal{Value: fieldSchema} kv.Key = reg.FieldName(f) if schema.Properties == nil { @@ -1232,6 +1238,12 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } else { desc = fieldProtoComments(reg, bodyField.Target.Message, bodyField.Target) } + if schema.Ref != "" { + // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. + // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 + schema = openapiSchemaObject{schemaCore: schemaCore{Ref: schema.Ref}} + } + } if meth.GetClientStreaming() { @@ -2655,12 +2667,6 @@ func updateswaggerObjectFromJSONSchema(s *openapiSchemaObject, j *openapi_option } func updateSwaggerObjectFromFieldBehavior(s *openapiSchemaObject, j []annotations.FieldBehavior, reg *descriptor.Registry, field *descriptor.Field) { - // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. - // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 - if s.Ref != "" { - return - } - for _, fb := range j { switch fb { case annotations.FieldBehavior_REQUIRED: diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 7369fe0886a..22a2a2cd98b 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -4341,7 +4341,7 @@ func TestSchemaOfField(t *testing.T) { { field: &descriptor.Field{ FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ - Name: proto.String("message_field"), + Name: proto.String("required_message_field"), TypeName: proto.String(".example.Message"), Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), Options: requiredFieldOptions, @@ -4352,6 +4352,7 @@ func TestSchemaOfField(t *testing.T) { schemaCore: schemaCore{ Ref: "#/definitions/exampleMessage", }, + Required: []string{"required_message_field"}, }, }, { From 927db751d63265b63ad765b33f9d6daaec62c64a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:07:42 -0700 Subject: [PATCH 1455/1518] build(deps): bump actions/cache from 3 to 3.0.11 (#2941) Bumps [actions/cache](https://github.com/actions/cache) from 3 to 3.0.11. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/1c73980b09e7aea7201f325a7aa3ad00beddcdda...9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- .github/workflows/renovate.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a98f5c6f2ad..d66e95da634 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/cache@1c73980b09e7aea7201f325a7aa3ad00beddcdda # tag=v3 + - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 9056e797a20..625605b7f78 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.GH_PUSH_TOKEN }} - - uses: actions/cache@1c73980b09e7aea7201f325a7aa3ad00beddcdda # tag=v3 + - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3 with: path: /home/vscode/.cache/_grpc_gateway_bazel key: v1-bazel-cache-${{ hashFiles('repositories.bzl') }} From 2bc4140a1fb0cf5cf6667c0883aee817f0704799 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:07:54 -0700 Subject: [PATCH 1456/1518] build(deps-dev): bump jekyll-include-cache from 0.1.0 to 0.2.1 in /docs (#2934) Bumps [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) from 0.1.0 to 0.2.1. - [Release notes](https://github.com/benbalter/jekyll-include-cache/releases) - [Commits](https://github.com/benbalter/jekyll-include-cache/compare/v0.1.0...v0.2.1) --- updated-dependencies: - dependency-name: jekyll-include-cache dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 268 +++++++++++++++++++++++++++++++--------------- 1 file changed, 182 insertions(+), 86 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 96671f6e442..07faa10fefa 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,134 +1,222 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.2.7) - i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) + activesupport (6.0.6) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.4.0) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) + commonmarker (0.23.6) concurrent-ruby (1.1.10) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) ethon (0.15.0) ffi (>= 1.15.0) + eventmachine (1.2.7) execjs (2.8.1) - faraday (2.3.0) - faraday-net_http (~> 2.0) + faraday (2.6.0) + faraday-net_http (>= 2.0, < 3.1) ruby2_keywords (>= 0.0.4) - faraday-net_http (2.0.3) + faraday-net_http (3.0.1) ffi (1.15.5) forwardable-extended (2.6.0) - gemoji (2.1.0) - github-pages (105) - activesupport (= 4.2.7) - github-pages-health-check (= 1.2.0) - jekyll (= 3.3.1) - jekyll-avatar (= 0.4.2) - jekyll-coffeescript (= 1.0.1) - jekyll-feed (= 0.8.0) - jekyll-gist (= 1.4.0) - jekyll-github-metadata (= 2.2.0) - jekyll-mentions (= 1.2.0) + gemoji (3.0.1) + github-pages (227) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.2) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.2.0) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) jekyll-paginate (= 1.1.0) - jekyll-redirect-from (= 0.11.0) - jekyll-sass-converter (= 1.3.0) - jekyll-seo-tag (= 2.1.0) - jekyll-sitemap (= 0.12.0) - jekyll-swiss (= 0.4.0) - jemoji (= 0.7.0) - kramdown (= 1.11.1) - liquid (= 3.0.6) - listen (= 3.0.6) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.8.0) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.2) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) mercenary (~> 0.3) - minima (= 2.0.0) - rouge (= 1.11.1) + minima (= 2.5.1) + nokogiri (>= 1.13.6, < 2.0) + rouge (= 3.26.0) terminal-table (~> 1.4) - github-pages-health-check (1.2.0) + github-pages-health-check (1.17.9) addressable (~> 2.3) - net-dns (~> 0.8) + dnsruby (~> 1.60) octokit (~> 4.0) - public_suffix (~> 1.4) - typhoeus (~> 0.7) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) html-pipeline (2.14.2) activesupport (>= 2) nokogiri (>= 1.4) + http_parser.rb (0.8.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.3.1) + jekyll (3.9.2) addressable (~> 2.4) colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 3.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (~> 1.7) + rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-avatar (0.4.2) - jekyll (~> 3.0) - jekyll-coffeescript (1.0.1) - coffee-script (~> 2.2) - jekyll-default-layout (0.1.5) + jekyll-avatar (0.7.0) jekyll (>= 3.0, < 5.0) - jekyll-feed (0.8.0) - jekyll (~> 3.3) - jekyll-gist (1.4.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.2.0) + commonmarker (~> 0.23.4) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) octokit (~> 4.2) - jekyll-github-metadata (2.2.0) - jekyll (~> 3.1) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.1.0) - jekyll (~> 3.3) - jekyll-mentions (1.2.0) - activesupport (~> 4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) html-pipeline (~> 2.3) - jekyll (~> 3.0) + jekyll (>= 3.7, < 5.0) jekyll-optional-front-matter (0.3.2) jekyll (>= 3.0, < 5.0) jekyll-paginate (1.1.0) jekyll-readme-index (0.3.0) jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.11.0) - jekyll (>= 2.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) jekyll-relative-links (0.6.1) jekyll (>= 3.3, < 5.0) - jekyll-sass-converter (1.3.0) - sass (~> 3.2) - jekyll-seo-tag (2.1.0) - jekyll (~> 3.3) - jekyll-sitemap (0.12.0) - jekyll (~> 3.3) - jekyll-swiss (0.4.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) jekyll-titles-from-headings (0.5.3) jekyll (>= 3.3, < 5.0) - jekyll-watch (1.5.1) + jekyll-watch (2.2.1) listen (~> 3.0) - jemoji (0.7.0) - activesupport (~> 4.0) - gemoji (~> 2.0) + jemoji (0.12.0) + gemoji (~> 3.0) html-pipeline (~> 2.2) - jekyll (>= 3.0) - json (1.8.6) - just-the-docs (0.1.6) - jekyll (~> 3.3) - rake (~> 10.0) - kramdown (1.11.1) - liquid (3.0.6) - listen (3.0.6) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9.7) + jekyll (>= 3.0, < 5.0) + just-the-docs (0.3.3) + jekyll (>= 3.8.5) + jekyll-seo-tag (~> 2.0) + rake (>= 12.3.1, < 13.1.0) + kramdown (2.3.2) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) mini_portile2 (2.8.0) - minima (2.0.0) - minitest (5.16.2) - net-dns (0.9.0) - nokogiri (1.13.7) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.16.3) + nokogiri (1.13.8) mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.25.1) @@ -136,14 +224,16 @@ GEM sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (1.5.3) + public_suffix (4.0.7) racc (1.6.0) - rake (10.5.0) + rake (13.0.6) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rouge (1.11.1) + rexml (3.2.5) + rouge (3.26.0) ruby2_keywords (0.0.5) + rubyzip (2.3.2) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -153,14 +243,20 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) + simpleidn (0.2.1) + unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) - typhoeus (0.8.0) - ethon (>= 0.8.0) + typhoeus (1.4.0) + ethon (>= 0.9.0) tzinfo (1.2.10) thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) unicode-display_width (1.8.0) + zeitwerk (2.6.1) PLATFORMS ruby From d27f23bb5ba087eb13b22dba0e35ad1ce42f7685 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 18:32:27 -0400 Subject: [PATCH 1457/1518] fix(deps): update google.golang.org/genproto digest to 33fc6f8 (#2943) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 28c4562e1a5..b4e75c3ff68 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 golang.org/x/text v0.3.8 - google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e + google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4 google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index d056478f394..ecb5b4356b1 100644 --- a/go.sum +++ b/go.sum @@ -741,8 +741,8 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e h1:halCgTFuLWDRD61piiNSxPsARANGD3Xl16hPrLgLiIg= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4 h1:nZ28yoLJWNLTcERW43BN+JDsNQOdiZOFB9Dly/IUrjw= +google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index c4c7303a31b..dbce829f5ae 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:halCgTFuLWDRD61piiNSxPsARANGD3Xl16hPrLgLiIg=", - version = "v0.0.0-20221010155953-15ba04fc1c0e", + sum = "h1:nZ28yoLJWNLTcERW43BN+JDsNQOdiZOFB9Dly/IUrjw=", + version = "v0.0.0-20221013201013-33fc6f83cba4", ) go_repository( name = "org_golang_google_grpc", From 813bbcd1a729fb6548d3a02ce50c86f2278cb5c0 Mon Sep 17 00:00:00 2001 From: Sam Eiderman Date: Fri, 14 Oct 2022 22:39:38 +0300 Subject: [PATCH 1458/1518] feat: add option to add description to tags (#2939) --- .../internal/clients/abe/api/swagger.yaml | 2 + .../proto/examplepb/a_bit_of_everything.pb.go | 28 +- .../proto/examplepb/a_bit_of_everything.proto | 4 + .../a_bit_of_everything.swagger.json | 4 + .../internal/genopenapi/template.go | 15 + protoc-gen-openapiv2/options/openapiv2.pb.go | 876 +++++++++--------- protoc-gen-openapiv2/options/openapiv2.proto | 16 +- 7 files changed, 496 insertions(+), 449 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index f31ba31ca31..215925ac416 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -21,6 +21,8 @@ tags: - name: "camelCaseServiceName" - name: "AnotherServiceWithNoBindings" - name: "SnakeEnumService" +- name: "echo rpc" + description: "Echo Rpc description" schemes: - "http" - "https" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 1a845f95449..9544c989f8b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -2676,12 +2676,12 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, - 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xa1, 0x0c, + 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xc3, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xd0, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xf2, 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, @@ -2765,17 +2765,19 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, - 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, - 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, - 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, - 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, - 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, + 0x20, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x14, 0x45, 0x63, 0x68, + 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, + 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, + 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, + 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index fd5ea647d62..2b970f44ab1 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -185,6 +185,10 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { } } } + tags: { + name: "echo rpc" + description: "Echo Rpc description" + } extensions: { key: "x-grpc-gateway-foo"; value { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 3cf9f72722b..ba8663b08bb 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -31,6 +31,10 @@ }, { "name": "SnakeEnumService" + }, + { + "name": "echo rpc", + "description": "Echo Rpc description" } ], "schemes": [ diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 9735a4a6f61..d51cc5feec1 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1847,6 +1847,21 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { s.extensions = exts } + if spb.Tags != nil { + for _, v := range spb.Tags { + newTag := openapiTagObject{} + newTag.Name = v.Name + newTag.Description = v.Description + if v.ExternalDocs != nil { + newTag.ExternalDocs = &openapiExternalDocumentationObject{ + Description: v.ExternalDocs.Description, + URL: v.ExternalDocs.Url, + } + } + s.Tags = append(s.Tags, newTag) + } + } + // Additional fields on the OpenAPI v2 spec's "OpenAPI" object // should be added here, once supported in the proto. } diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 03c19a34a65..7087d77ef1b 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -378,6 +378,9 @@ type Swagger struct { // (that is, there is a logical OR between the security requirements). // Individual operations can override this definition. Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. + Tags []*Tag `protobuf:"bytes,13,rep,name=tags,proto3" json:"tags,omitempty"` // Additional external documentation. ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` Extensions map[string]*structpb.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -485,6 +488,13 @@ func (x *Swagger) GetSecurity() []*SecurityRequirement { return nil } +func (x *Swagger) GetTags() []*Tag { + if x != nil { + return x.Tags + } + return nil +} + func (x *Swagger) GetExternalDocs() *ExternalDocumentation { if x != nil { return x.ExternalDocs @@ -1633,6 +1643,10 @@ type Tag struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The name of the tag. Use it to allow override of the name of a + // global Tag object, then use that name to reference the tag throughout the + // OpenAPI file. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // A short description for the tag. GFM syntax can be used for rich text // representation. Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -1672,6 +1686,13 @@ func (*Tag) Descriptor() ([]byte, []int) { return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} } +func (x *Tag) GetName() string { + if x != nil { + return x.Name + } + return "" +} + func (x *Tag) GetDescription() string { if x != nil { return x.Description @@ -2111,7 +2132,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x07, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb3, 0x08, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, @@ -2148,415 +2169,419 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, - 0x62, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x42, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, - 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x22, - 0xff, 0x06, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, - 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x44, 0x6f, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, - 0x61, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x65, 0x0a, 0x0d, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x5a, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, - 0x09, 0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, - 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, - 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, - 0x08, 0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, - 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, - 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, + 0x6f, 0x63, 0x73, 0x12, 0x62, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xff, 0x06, + 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, + 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x61, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x12, 0x4b, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x5a, 0x0a, + 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, - 0x72, 0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, + 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, + 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, + 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0e, + 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, + 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, 0x08, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, + 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, - 0x6a, 0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, - 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, - 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x44, 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x22, 0xd7, 0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, - 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, - 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, - 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, - 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, - 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, - 0x6e, 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, - 0x7a, 0x0a, 0x13, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, - 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, - 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, - 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, - 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, - 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, - 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, - 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x94, - 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72, 0x6d, + 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, + 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x4a, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, - 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, - 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, - 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, - 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, - 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, - 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, - 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, - 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, - 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, + 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a, 0x73, + 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, + 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, + 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x0d, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, + 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x22, 0xd7, 0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, + 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, + 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, + 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, + 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, + 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, + 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x4b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x7a, 0x0a, + 0x13, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, - 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, - 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, - 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, - 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, - 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, - 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, - 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, - 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, - 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, - 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, - 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, - 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, - 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, - 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, - 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, - 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, + 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, + 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, + 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, + 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, + 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, + 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xa2, 0x01, 0x0a, + 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, + 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, - 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, - 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, - 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, + 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, + 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, + 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, + 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, + 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, + 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, + 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, + 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, + 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, + 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, + 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, + 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, + 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, + 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, + 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2617,50 +2642,51 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 20, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry 16, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions 18, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 12, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 21, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - 12, // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 22, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry - 0, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 18, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 23, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - 13, // 12: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema - 24, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry - 25, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - 26, // 15: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - 10, // 16: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact - 11, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License - 27, // 18: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - 14, // 19: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - 12, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 1, // 21: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - 28, // 22: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration - 29, // 23: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry - 12, // 24: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 30, // 25: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 31, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 33, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 34, // 32: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 33: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 35, // 34: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 35: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 35, // 36: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 37: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 35, // 38: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 35, // 39: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 35, // 40: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 41: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 35, // 42: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 32, // 43: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 44, // [44:44] is the sub-list for method output_type - 44, // [44:44] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 15, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.tags:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag + 12, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 21, // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry + 12, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 22, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry + 0, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme + 18, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + 23, // 12: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry + 13, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema + 24, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry + 25, // 15: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry + 26, // 16: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry + 10, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact + 11, // 18: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License + 27, // 19: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry + 14, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + 12, // 21: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 1, // 22: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes + 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration + 29, // 24: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry + 12, // 25: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 30, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 2, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 3, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 4, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 19, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 31, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 33, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 8, // 34: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 35, // 35: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 8, // 36: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 35, // 37: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 38: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 35, // 39: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 35, // 40: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 35, // 41: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value + 17, // 42: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 35, // 43: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 32, // 44: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 45, // [45:45] is the sub-list for method output_type + 45, // [45:45] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 36a2b978fdf..965325b8cd4 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -92,10 +92,9 @@ message Swagger { // (that is, there is a logical OR between the security requirements). // Individual operations can override this definition. repeated SecurityRequirement security = 12; - // field 13 is reserved for 'tags', which are supposed to be exposed as and - // customizable as proto services. TODO(ivucica): add processing of proto - // service objects into OpenAPI v2 Tag objects. - reserved 13; + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. + repeated Tag tags = 13; // Additional external documentation. ExternalDocumentation external_docs = 14; map extensions = 15; @@ -526,15 +525,10 @@ message JSONSchema { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject // message Tag { - // field 1 is reserved for 'name'. In our generator, this is (to be) extracted - // from the name of proto service, and thus not exposed to the user, as - // changing tag object's name would break the link to the references to the - // tag in individual operation specifications. - // - // TODO(ivucica): Add 'name' property. Use it to allow override of the name of + // The name of the tag. Use it to allow override of the name of a // global Tag object, then use that name to reference the tag throughout the // OpenAPI file. - reserved 1; + string name = 1; // A short description for the tag. GFM syntax can be used for rich text // representation. string description = 2; From c714920775c576e69264d0d80c1afcc2eacc762b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 15:04:55 -0700 Subject: [PATCH 1459/1518] fix(deps): update google.golang.org/genproto digest to 6e2ab49 (#2947) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b4e75c3ff68..32adf81c231 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 golang.org/x/text v0.3.8 - google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4 + google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index ecb5b4356b1..28d2ac70c41 100644 --- a/go.sum +++ b/go.sum @@ -741,8 +741,8 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4 h1:nZ28yoLJWNLTcERW43BN+JDsNQOdiZOFB9Dly/IUrjw= -google.golang.org/genproto v0.0.0-20221013201013-33fc6f83cba4/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b h1:IOQ/4u8ZSLV+xns0LQxzdAcdOJTDMWB+0shVM8KWXBE= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index dbce829f5ae..10ce9dd4905 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:nZ28yoLJWNLTcERW43BN+JDsNQOdiZOFB9Dly/IUrjw=", - version = "v0.0.0-20221013201013-33fc6f83cba4", + sum = "h1:IOQ/4u8ZSLV+xns0LQxzdAcdOJTDMWB+0shVM8KWXBE=", + version = "v0.0.0-20221014173430-6e2ab493f96b", ) go_repository( name = "org_golang_google_grpc", From 7fa8956044cda8855e07310cf6f83dbb39995487 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 15:05:04 -0700 Subject: [PATCH 1460/1518] fix(deps): update golang.org/x/oauth2 digest to 6fdb5e3 (#2946) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 32adf81c231..cc78c5dca10 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 + golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 golang.org/x/text v0.3.8 google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b google.golang.org/grpc v1.50.0 diff --git a/go.sum b/go.sum index 28d2ac70c41..e1d35bf5200 100644 --- a/go.sum +++ b/go.sum @@ -437,8 +437,8 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1 h1:3VPzK7eqH25j7GYw5w6g/GzNRc0/fYtrxz27z1gD4W0= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/repositories.bzl b/repositories.bzl index 10ce9dd4905..9ce75ad87a8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1472,8 +1472,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:3VPzK7eqH25j7GYw5w6g/GzNRc0/fYtrxz27z1gD4W0=", - version = "v0.0.0-20221006150949-b44042a4b9c1", + sum = "h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk=", + version = "v0.0.0-20221014153046-6fdb5e3db783", ) go_repository( name = "org_golang_x_sync", From 3feea836b3e9f76e29230e91a30f89d015c2ed87 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 15:33:50 -0700 Subject: [PATCH 1461/1518] fix(deps): update google.golang.org/genproto digest to 99cd37c (#2948) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index cc78c5dca10..d11bfa4a144 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 golang.org/x/text v0.3.8 - google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b + google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a google.golang.org/grpc v1.50.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index e1d35bf5200..b9ad0a07a06 100644 --- a/go.sum +++ b/go.sum @@ -741,8 +741,8 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b h1:IOQ/4u8ZSLV+xns0LQxzdAcdOJTDMWB+0shVM8KWXBE= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 9ce75ad87a8..33c77d51214 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:IOQ/4u8ZSLV+xns0LQxzdAcdOJTDMWB+0shVM8KWXBE=", - version = "v0.0.0-20221014173430-6e2ab493f96b", + sum = "h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw=", + version = "v0.0.0-20221014213838-99cd37c6964a", ) go_repository( name = "org_golang_google_grpc", From 99ede1f8251681a112cc3e8a912ebec99c22574f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 15:34:08 -0700 Subject: [PATCH 1462/1518] build(deps-dev): bump jekyll-default-layout from 0.1.4 to 0.1.5 in /docs (#2944) Bumps [jekyll-default-layout](https://github.com/benbalter/jekyll-default-layout) from 0.1.4 to 0.1.5. - [Release notes](https://github.com/benbalter/jekyll-default-layout/releases) - [Commits](https://github.com/benbalter/jekyll-default-layout/compare/v0.1.4...v0.1.5) --- updated-dependencies: - dependency-name: jekyll-default-layout dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 258 +++++++++++++++------------------------------- 1 file changed, 81 insertions(+), 177 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 07faa10fefa..a004773cbd3 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,29 +1,21 @@ GEM remote: https://rubygems.org/ specs: - activesupport (6.0.6) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) + activesupport (4.2.7) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.4.0) coffee-script (2.4.1) coffee-script-source execjs coffee-script-source (1.11.1) colorator (1.1.0) - commonmarker (0.23.6) concurrent-ruby (1.1.10) - dnsruby (1.61.9) - simpleidn (~> 0.1) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) ethon (0.15.0) ffi (>= 1.15.0) - eventmachine (1.2.7) execjs (2.8.1) faraday (2.6.0) faraday-net_http (>= 2.0, < 3.1) @@ -31,191 +23,111 @@ GEM faraday-net_http (3.0.1) ffi (1.15.5) forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (227) - github-pages-health-check (= 1.17.9) - jekyll (= 3.9.2) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.2.0) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.15.1) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) - jekyll-include-cache (= 0.2.1) - jekyll-mentions (= 1.6.0) - jekyll-optional-front-matter (= 0.3.2) + gemoji (2.1.0) + github-pages (105) + activesupport (= 4.2.7) + github-pages-health-check (= 1.2.0) + jekyll (= 3.3.1) + jekyll-avatar (= 0.4.2) + jekyll-coffeescript (= 1.0.1) + jekyll-feed (= 0.8.0) + jekyll-gist (= 1.4.0) + jekyll-github-metadata (= 2.2.0) + jekyll-mentions (= 1.2.0) jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.16.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.3) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.8.0) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.2.0) - jekyll-theme-cayman (= 0.2.0) - jekyll-theme-dinky (= 0.2.0) - jekyll-theme-hacker (= 0.2.0) - jekyll-theme-leap-day (= 0.2.0) - jekyll-theme-merlot (= 0.2.0) - jekyll-theme-midnight (= 0.2.0) - jekyll-theme-minimal (= 0.2.0) - jekyll-theme-modernist (= 0.2.0) - jekyll-theme-primer (= 0.6.0) - jekyll-theme-slate (= 0.2.0) - jekyll-theme-tactile (= 0.2.0) - jekyll-theme-time-machine (= 0.2.0) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.12.0) - kramdown (= 2.3.2) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.3) + jekyll-redirect-from (= 0.11.0) + jekyll-sass-converter (= 1.3.0) + jekyll-seo-tag (= 2.1.0) + jekyll-sitemap (= 0.12.0) + jekyll-swiss (= 0.4.0) + jemoji (= 0.7.0) + kramdown (= 1.11.1) + liquid (= 3.0.6) + listen (= 3.0.6) mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.13.6, < 2.0) - rouge (= 3.26.0) + minima (= 2.0.0) + rouge (= 1.11.1) terminal-table (~> 1.4) - github-pages-health-check (1.17.9) + github-pages-health-check (1.2.0) addressable (~> 2.3) - dnsruby (~> 1.60) + net-dns (~> 0.8) octokit (~> 4.0) - public_suffix (>= 3.0, < 5.0) - typhoeus (~> 1.3) + public_suffix (~> 1.4) + typhoeus (~> 0.7) html-pipeline (2.14.2) activesupport (>= 2) nokogiri (>= 1.4) - http_parser.rb (0.8.0) i18n (0.9.5) concurrent-ruby (~> 1.0) - jekyll (3.9.2) + jekyll (3.3.1) addressable (~> 2.4) colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) + jekyll-watch (~> 1.1) + kramdown (~> 1.3) + liquid (~> 3.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (~> 1.7) safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.4.0) - commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.2.0) - commonmarker (~> 0.23.4) - jekyll (~> 3.9.0) - jekyll-commonmark (~> 1.4.0) - rouge (>= 2.0, < 4.0) - jekyll-default-layout (0.1.4) + jekyll-avatar (0.4.2) jekyll (~> 3.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) + jekyll-coffeescript (1.0.1) + coffee-script (~> 2.2) + jekyll-default-layout (0.1.5) + jekyll (>= 3.0, < 5.0) + jekyll-feed (0.8.0) + jekyll (~> 3.3) + jekyll-gist (1.4.0) octokit (~> 4.2) - jekyll-github-metadata (2.13.0) - jekyll (>= 3.4, < 5.0) + jekyll-github-metadata (2.2.0) + jekyll (~> 3.1) octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.2.1) - jekyll (>= 3.7, < 5.0) - jekyll-mentions (1.6.0) + jekyll-include-cache (0.1.0) + jekyll (~> 3.3) + jekyll-mentions (1.2.0) + activesupport (~> 4.0) html-pipeline (~> 2.3) - jekyll (>= 3.7, < 5.0) + jekyll (~> 3.0) jekyll-optional-front-matter (0.3.2) jekyll (>= 3.0, < 5.0) jekyll-paginate (1.1.0) jekyll-readme-index (0.3.0) jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.16.0) - jekyll (>= 3.3, < 5.0) + jekyll-redirect-from (0.11.0) + jekyll (>= 2.0) jekyll-relative-links (0.6.1) jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.3) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) - rubyzip (>= 1.3.0, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.6.0) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) + jekyll-sass-converter (1.3.0) + sass (~> 3.2) + jekyll-seo-tag (2.1.0) + jekyll (~> 3.3) + jekyll-sitemap (0.12.0) + jekyll (~> 3.3) + jekyll-swiss (0.4.0) jekyll-titles-from-headings (0.5.3) jekyll (>= 3.3, < 5.0) - jekyll-watch (2.2.1) + jekyll-watch (1.5.1) listen (~> 3.0) - jemoji (0.12.0) - gemoji (~> 3.0) + jemoji (0.7.0) + activesupport (~> 4.0) + gemoji (~> 2.0) html-pipeline (~> 2.2) - jekyll (>= 3.0, < 5.0) - just-the-docs (0.3.3) - jekyll (>= 3.8.5) - jekyll-seo-tag (~> 2.0) - rake (>= 12.3.1, < 13.1.0) - kramdown (2.3.2) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) + jekyll (>= 3.0) + json (1.8.6) + just-the-docs (0.1.6) + jekyll (~> 3.3) + rake (~> 10.0) + kramdown (1.11.1) + liquid (3.0.6) + listen (3.0.6) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9.7) mercenary (0.3.6) mini_portile2 (2.8.0) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) + minima (2.0.0) minitest (5.16.3) + net-dns (0.9.0) nokogiri (1.13.8) mini_portile2 (~> 2.8.0) racc (~> 1.4) @@ -224,16 +136,14 @@ GEM sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.7) + public_suffix (1.5.3) racc (1.6.0) - rake (13.0.6) + rake (10.5.0) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) + rouge (1.11.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) safe_yaml (1.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -243,20 +153,14 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) thread_safe (0.3.6) - typhoeus (1.4.0) - ethon (>= 0.9.0) + typhoeus (0.8.0) + ethon (>= 0.8.0) tzinfo (1.2.10) thread_safe (~> 0.1) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) unicode-display_width (1.8.0) - zeitwerk (2.6.1) PLATFORMS ruby From c6d992ca8b35d67dc25be61d501e9a3a8c287936 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Oct 2022 16:24:14 -0700 Subject: [PATCH 1463/1518] fix(deps): update module google.golang.org/grpc to v1.50.1 (#2949) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index d11bfa4a144..142b2d568f6 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 golang.org/x/text v0.3.8 google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a - google.golang.org/grpc v1.50.0 + google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index b9ad0a07a06..a648f577109 100644 --- a/go.sum +++ b/go.sum @@ -776,8 +776,9 @@ google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0 h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/repositories.bzl b/repositories.bzl index 33c77d51214..00009cb3c17 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1409,8 +1409,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=", - version = "v1.50.0", + sum = "h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=", + version = "v1.50.1", ) go_repository( From cb10e5d47d6ba7743d0f59f492d54c64c63b900c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 03:17:43 +0000 Subject: [PATCH 1464/1518] chore(deps): update slsa-framework/slsa-github-generator action to v1.2.1 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0d01a4d594..403f7461210 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@bdd89e60dc5387d8f819bebc702987956bcd4913 # tag=v1.2.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@dc705baf82c5178c9d1555594b0652f569e22779 # tag=v1.2.1 with: base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" upload-assets: true # upload to a new release From 74b6360e71bff9ca7f4ba67eadcb0cc9f5439ba2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 09:56:41 -0700 Subject: [PATCH 1465/1518] chore(deps): update docker/setup-buildx-action digest to c74574e (#2953) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 403f7461210..e98df44fa5b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,7 +49,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: docker/setup-buildx-action@95cb08cb2672c73d4ffd2f422e6d11953d2a9c70 # tag=v2 + - uses: docker/setup-buildx-action@c74574e6c82eeedc46366be1b0d287eff9085eb6 # tag=v2 - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # tag=v2 with: registry: plugins.buf.build From ab516bcbbdae0d5a0618bd39aa1e5a7f52df6039 Mon Sep 17 00:00:00 2001 From: Kishan Kolur <54222395+kkolur@users.noreply.github.com> Date: Mon, 17 Oct 2022 12:57:17 -0400 Subject: [PATCH 1466/1518] add extensions for Tag object (#2950) * add extensions for Tag object * comments for extensions in proto file * update extensions url --- .../internal/clients/abe/api/swagger.yaml | 1 + .../clients/unannotatedecho/api/swagger.yaml | 5 + .../proto/examplepb/a_bit_of_everything.pb.go | 29 +- .../proto/examplepb/a_bit_of_everything.proto | 6 + .../a_bit_of_everything.swagger.json | 3 +- .../unannotated_echo_service.swagger.json | 9 + .../unannotated_echo_service.swagger.yaml | 7 + .../internal/genopenapi/generator.go | 17 + .../internal/genopenapi/template.go | 7 + .../internal/genopenapi/template_test.go | 19 + .../internal/genopenapi/types.go | 2 + protoc-gen-openapiv2/options/openapiv2.pb.go | 344 ++++++++++-------- protoc-gen-openapiv2/options/openapiv2.proto | 22 ++ 13 files changed, 306 insertions(+), 165 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 215925ac416..e21c4fef425 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -23,6 +23,7 @@ tags: - name: "SnakeEnumService" - name: "echo rpc" description: "Echo Rpc description" + x-traitTag: true schemes: - "http" - "https" diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index 7d2f2d17244..e3c03d81023 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -22,6 +22,11 @@ tags: externalDocs: description: "Find out more about UnannotatedEchoService" url: "https://github.com/grpc-ecosystem/grpc-gateway" +- name: "Echo" + description: "Echo description" +- name: "Internal" + description: "Internal description" + x-traitTag: true schemes: - "http" - "https" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 9544c989f8b..7e23b18f044 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -2676,13 +2676,13 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, - 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xc3, 0x0c, + 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xd5, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xf2, - 0x0b, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0x84, + 0x0c, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, @@ -2766,18 +2766,19 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x20, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x14, 0x45, 0x63, 0x68, + 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x14, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, - 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, - 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, - 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74, 0x72, 0x61, 0x69, 0x74, 0x54, 0x61, 0x67, 0x12, + 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, + 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, + 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, + 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, + 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2b970f44ab1..2bd47fac19e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -188,6 +188,12 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { tags: { name: "echo rpc" description: "Echo Rpc description" + extensions: { + key: "x-traitTag"; + value { + bool_value: true; + } + } } extensions: { key: "x-grpc-gateway-foo"; diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index ba8663b08bb..06a454911f1 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -34,7 +34,8 @@ }, { "name": "echo rpc", - "description": "Echo Rpc description" + "description": "Echo Rpc description", + "x-traitTag": true } ], "schemes": [ diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index f6c9c2c4f50..5f0f41e912f 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -23,6 +23,15 @@ "description": "Find out more about UnannotatedEchoService", "url": "https://github.com/grpc-ecosystem/grpc-gateway" } + }, + { + "name": "Echo", + "description": "Echo description" + }, + { + "name": "Internal", + "description": "Internal description", + "x-traitTag": true } ], "schemes": [ diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml index 6329dad9472..3e80d288c17 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.yaml @@ -15,6 +15,13 @@ openapiOptions: version: "1.0" extensions: x-something-something: yadda + tags: + - name: Echo + description: Echo description + - name: Internal + description: Internal description + extensions: + x-traitTag: true schemes: - HTTP - HTTPS diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 6c614919241..861094d7fbe 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -218,6 +218,23 @@ func (so openapiParameterObject) MarshalYAML() (interface{}, error) { }, nil } +func (so openapiTagObject) MarshalJSON() ([]byte, error) { + type alias openapiTagObject + return extensionMarshalJSON(alias(so), so.extensions) +} + +func (so openapiTagObject) MarshalYAML() (interface{}, error) { + type Alias openapiTagObject + + return struct { + Extension map[string]interface{} `yaml:",inline"` + Alias `yaml:",inline"` + }{ + Extension: extensionsToMap(so.extensions), + Alias: Alias(so), + }, nil +} + func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error) { // To append arbitrary keys to the struct we'll render into json, // we're creating another struct that embeds the original one, and diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index d51cc5feec1..04d8c75c5b2 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1858,6 +1858,13 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { URL: v.ExternalDocs.Url, } } + if v.Extensions != nil { + exts, err := processExtensions(v.Extensions) + if err != nil { + return nil, err + } + newTag.extensions = exts + } s.Tags = append(s.Tags, newTag) } } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 22a2a2cd98b..5af6f3321e3 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1834,6 +1834,15 @@ func TestApplyTemplateExtensions(t *testing.T) { }, }, }, + Tags: []*openapi_options.Tag{ + { + Name: "test tag", + Description: "test tag description", + Extensions: map[string]*structpb.Value{ + "x-traitTag": {Kind: &structpb.Value_BoolValue{BoolValue: true}}, + }, + }, + }, } openapiOperation := openapi_options.Operation{ Responses: map[string]*openapi_options.Response{ @@ -1936,6 +1945,16 @@ func TestApplyTemplateExtensions(t *testing.T) { }, response.extensions, "response.Extensions"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } + + var tag openapiTagObject + for _, v := range result.Tags { + tag = v + } + if want, is, name := []extension{ + {key: "x-traitTag", value: json.RawMessage("true")}, + }, tag.extensions, "Tags[0].Extensions"; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + } } t.Run("verify template options set via proto options", func(t *testing.T) { file := newFile() diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index ae9ba330e74..52f84451bbc 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -31,6 +31,8 @@ type openapiTagObject struct { Name string `json:"name" yaml:"name"` Description string `json:"description,omitempty" yaml:"description,omitempty"` ExternalDocs *openapiExternalDocumentationObject `json:"externalDocs,omitempty" yaml:"externalDocs,omitempty"` + + extensions []extension `json:"-" yaml:"-"` } // http://swagger.io/specification/#contactObject diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index 7087d77ef1b..a59ba8b38a4 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -382,8 +382,11 @@ type Swagger struct { // grouping of operations by resources or any other qualifier. Tags []*Tag `protobuf:"bytes,13,rep,name=tags,proto3" json:"tags,omitempty"` // Additional external documentation. - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Extensions map[string]*structpb.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ + Extensions map[string]*structpb.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Swagger) Reset() { @@ -578,7 +581,10 @@ type Operation struct { // (that is, there is a logical OR between the security requirements). This // definition overrides any declared top-level security. To remove a top-level // security declaration, an empty array can be used. - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ Extensions map[string]*structpb.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -809,7 +815,10 @@ type Response struct { Headers map[string]*Header `protobuf:"bytes,3,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object - Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ Extensions map[string]*structpb.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -922,7 +931,10 @@ type Info struct { License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` // Provides the version of the application API (not to be confused // with the specification version). - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ Extensions map[string]*structpb.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -1417,7 +1429,10 @@ type JSONSchema struct { Enum []string `protobuf:"bytes,46,rep,name=enum,proto3" json:"enum,omitempty"` // Additional field level properties used when generating the OpenAPI v2 file. FieldConfiguration *JSONSchema_FieldConfiguration `protobuf:"bytes,1001,opt,name=field_configuration,json=fieldConfiguration,proto3" json:"field_configuration,omitempty"` - Extensions map[string]*structpb.Value `protobuf:"bytes,48,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ + Extensions map[string]*structpb.Value `protobuf:"bytes,48,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *JSONSchema) Reset() { @@ -1652,6 +1667,10 @@ type Tag struct { Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` // Additional external documentation for this tag. ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ + Extensions map[string]*structpb.Value `protobuf:"bytes,4,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Tag) Reset() { @@ -1707,6 +1726,13 @@ func (x *Tag) GetExternalDocs() *ExternalDocumentation { return nil } +func (x *Tag) GetExtensions() map[string]*structpb.Value { + if x != nil { + return x.Extensions + } + return nil +} + // `SecurityDefinitions` is a representation of OpenAPI v2 specification's // Security Definitions object. // @@ -1804,7 +1830,10 @@ type SecurityScheme struct { TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` // The available scopes for the OAuth2 security scheme. // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ Extensions map[string]*structpb.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -2086,7 +2115,7 @@ type SecurityRequirement_SecurityRequirementValue struct { func (x *SecurityRequirement_SecurityRequirementValue) Reset() { *x = SecurityRequirement_SecurityRequirementValue{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2099,7 +2128,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) String() string { func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2457,7 +2486,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, - 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xa2, 0x01, 0x0a, + 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xd9, 0x02, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, @@ -2468,120 +2497,132 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, - 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x73, 0x12, 0x5e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, + 0x73, 0x2e, 0x54, 0x61, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, - 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, - 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, - 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, - 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, - 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, - 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, - 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, - 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, - 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, - 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, - 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, - 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, - 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, - 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, - 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, - 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, - 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, + 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, + 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, + 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, + 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, + 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, + 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, + 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, + 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, + 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, + 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, + 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, + 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, + 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, + 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, + 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, + 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, + 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, + 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, + 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, + 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2597,7 +2638,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { } var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 30) +var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes @@ -2629,12 +2670,13 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry (*JSONSchema_FieldConfiguration)(nil), // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry - nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 34: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*structpb.Value)(nil), // 35: google.protobuf.Value + nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry + nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + nil, // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 35: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*structpb.Value)(nil), // 36: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info @@ -2663,30 +2705,32 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration 29, // 24: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry 12, // 25: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 30, // 26: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 31, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 33, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 34: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 35, // 35: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 36: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 35, // 37: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 38: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 35, // 39: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 35, // 40: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 35, // 41: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 42: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 35, // 43: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 32, // 44: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 45, // [45:45] is the sub-list for method output_type - 45, // [45:45] is the sub-list for method input_type - 45, // [45:45] is the sub-list for extension type_name - 45, // [45:45] is the sub-list for extension extendee - 0, // [0:45] is the sub-list for field type_name + 30, // 26: grpc.gateway.protoc_gen_openapiv2.options.Tag.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry + 31, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 2, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 3, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 4, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 19, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 32, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 35, // 34: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 8, // 35: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 36, // 36: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 8, // 37: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 36, // 38: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 39: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 36, // 40: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 36, // 41: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 36, // 42: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value + 36, // 43: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry.value:type_name -> google.protobuf.Value + 17, // 44: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 36, // 45: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 33, // 46: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 47, // [47:47] is the sub-list for method output_type + 47, // [47:47] is the sub-list for method input_type + 47, // [47:47] is the sub-list for extension type_name + 47, // [47:47] is the sub-list for extension extendee + 0, // [0:47] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } @@ -2887,7 +2931,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { case 0: return &v.state @@ -2906,7 +2950,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, NumEnums: 5, - NumMessages: 30, + NumMessages: 31, NumExtensions: 0, NumServices: 0, }, diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 965325b8cd4..1ec57541b3c 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -97,6 +97,9 @@ message Swagger { repeated Tag tags = 13; // Additional external documentation. ExternalDocumentation external_docs = 14; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 15; } @@ -168,6 +171,9 @@ message Operation { // definition overrides any declared top-level security. To remove a top-level // security declaration, an empty array can be used. repeated SecurityRequirement security = 12; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 13; } @@ -234,6 +240,9 @@ message Response { // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object map examples = 4; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 5; } @@ -276,6 +285,9 @@ message Info { // Provides the version of the application API (not to be confused // with the specification version). string version = 6; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 7; } @@ -517,6 +529,9 @@ message JSONSchema { // for overlapping paths. string path_param_name = 47; } + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 48; } @@ -534,6 +549,10 @@ message Tag { string description = 2; // Additional external documentation for this tag. ExternalDocumentation external_docs = 3; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ + map extensions = 4; } // `SecurityDefinitions` is a representation of OpenAPI v2 specification's @@ -613,6 +632,9 @@ message SecurityScheme { // The available scopes for the OAuth2 security scheme. // Valid for oauth2. Scopes scopes = 8; + // Custom properties that start with "x-" such as "x-foo" used to describe + // extra functionality that is not covered by the standard OpenAPI Specification. + // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 9; } From 1dac1ac6439c7e32714601b945e84f21b23d9cbd Mon Sep 17 00:00:00 2001 From: Gonzalo Serrano Date: Mon, 17 Oct 2022 18:58:58 +0200 Subject: [PATCH 1467/1518] Make registry load packages deterministically (#2945) --- internal/descriptor/registry.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 8a7142f1393..9080c2f312b 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -2,6 +2,7 @@ package descriptor import ( "fmt" + "sort" "strings" "github.com/golang/glog" @@ -187,12 +188,18 @@ func (r *Registry) LoadFromPlugin(gen *protogen.Plugin) error { } func (r *Registry) load(gen *protogen.Plugin) error { - for filePath, f := range gen.FilesByPath { - r.loadFile(filePath, f) + filePaths := make([]string, 0, len(gen.FilesByPath)) + for filePath := range gen.FilesByPath { + filePaths = append(filePaths, filePath) } + sort.Strings(filePaths) - for filePath, f := range gen.FilesByPath { - if !f.Generate { + for _, filePath := range filePaths { + r.loadFile(filePath, gen.FilesByPath[filePath]) + } + + for _, filePath := range filePaths { + if !gen.FilesByPath[filePath].Generate { continue } file := r.files[filePath] From bfd7b189a675ab749ddb4f57df16d674d50c5910 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Mon, 17 Oct 2022 10:03:30 -0700 Subject: [PATCH 1468/1518] Update gorelease base --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d66e95da634..4582c94de0d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -96,9 +96,9 @@ jobs: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: - go-version: 1.18 + go-version: 1.19 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.11.3 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.12.0 proto_lint: runs-on: ubuntu-latest steps: From 662d3f8145ead347204189978ffded7aaa08c88e Mon Sep 17 00:00:00 2001 From: "Sumit S. Agrawal" <64501866+tech-sumit@users.noreply.github.com> Date: Tue, 18 Oct 2022 02:37:10 +0530 Subject: [PATCH 1469/1518] Updated gRPC code Cancelled replaced with HTTP code 499 (#2957) --- runtime/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/errors.go b/runtime/errors.go index ec1c419339e..4401c49ac7e 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -38,7 +38,7 @@ func HTTPStatusFromCode(code codes.Code) int { case codes.OK: return http.StatusOK case codes.Canceled: - return http.StatusRequestTimeout + return 499 case codes.Unknown: return http.StatusInternalServerError case codes.InvalidArgument: From 6f3adf00b9a9dc0a5e217ec5bfef723bdca72c1b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 23:12:43 +0000 Subject: [PATCH 1470/1518] chore(deps): update goreleaser/goreleaser-action digest to b508e2e --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e98df44fa5b..66dbce64df5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 with: check-latest: true - - uses: goreleaser/goreleaser-action@ff11ca24a9b39f2d36796d1fbd7a4e39c182630a # tag=v3 + - uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # tag=v3 id: run-goreleaser with: args: release --rm-dist From 92d3767a53c8e199e6a19337ca8c91e64862f4a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 02:25:52 +0000 Subject: [PATCH 1471/1518] fix(deps): update module golang.org/x/text to v0.4.0 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 142b2d568f6..2e2fa72a4f6 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 - golang.org/x/text v0.3.8 + golang.org/x/text v0.4.0 google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 diff --git a/go.sum b/go.sum index a648f577109..7cc2a895116 100644 --- a/go.sum +++ b/go.sum @@ -526,8 +526,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/repositories.bzl b/repositories.bzl index 00009cb3c17..cccbb1ca6db 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1497,8 +1497,8 @@ def go_repositories(): go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", - sum = "h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=", - version = "v0.3.8", + sum = "h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=", + version = "v0.4.0", ) go_repository( From 1786e3f2cfbbd8bd6cbe555ba87fe95b295b8a9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 11:03:33 +0000 Subject: [PATCH 1472/1518] chore(deps): update docker/setup-buildx-action digest to 8c0edbc --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 66dbce64df5..a34c4002426 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,7 +49,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: docker/setup-buildx-action@c74574e6c82eeedc46366be1b0d287eff9085eb6 # tag=v2 + - uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # tag=v2 - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # tag=v2 with: registry: plugins.buf.build From 90883f76891c9b6cbd3e7128ca8b060b45af0cec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 13:53:20 +0000 Subject: [PATCH 1473/1518] chore(deps): update actions/setup-go digest to c4a742c --- .github/workflows/ci.yml | 10 +++++----- .github/workflows/master.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4582c94de0d..79f6a04a68c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: go-version: ${{ matrix.go-version }} - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 @@ -19,7 +19,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 @@ -31,7 +31,7 @@ jobs: - uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3 with: node-version: 10 - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true - run: > @@ -94,7 +94,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: go-version: 1.19 check-latest: true @@ -103,7 +103,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true - run: make install diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index d384def22f3..dba8c4c6c99 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true - run: make install diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a34c4002426..f41c25f659c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 with: fetch-depth: 0 - - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3 + - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true - uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # tag=v3 From ed9bb09ba1e109e576f6b6b34a4791ca3336ae1b Mon Sep 17 00:00:00 2001 From: Kishan Kolur <54222395+kkolur@users.noreply.github.com> Date: Tue, 18 Oct 2022 12:55:30 -0400 Subject: [PATCH 1474/1518] fix: remove default service tag generation for methods (#2960) --- .../internal/genopenapi/template.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 04d8c75c5b2..f3886917235 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1380,13 +1380,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re responseSchema.Ref = "" } - tag := svc.GetName() - if pkg := svc.File.GetPackage(); pkg != "" && reg.IsIncludePackageInTags() { - tag = pkg + "." + tag - } - operationObject := &openapiOperationObject{ - Tags: []string{tag}, Parameters: parameters, Responses: openapiResponsesObject{ "200": openapiResponseObject{ @@ -1396,6 +1390,15 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re }, }, } + + if !reg.GetDisableServiceTags() { + tag := svc.GetName() + if pkg := svc.File.GetPackage(); pkg != "" && reg.IsIncludePackageInTags() { + tag = pkg + "." + tag + } + operationObject.Tags = []string{tag} + } + if !reg.GetDisableDefaultErrors() { errDef, hasErrDef := fullyQualifiedNameToOpenAPIName(".google.rpc.Status", reg) if hasErrDef { From b276a10854f88016cafe0288924f9b1cfda8aea2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 16:57:34 +0000 Subject: [PATCH 1475/1518] fix(deps): update google.golang.org/genproto digest to 63c7b68 --- go.mod | 2 +- go.sum | 11 +++++++++-- repositories.bzl | 24 ++++++++++++------------ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 2e2fa72a4f6..84c33f524df 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a + google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 7cc2a895116..35bc05acf2b 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,10 @@ cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -82,11 +84,13 @@ cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZx cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= @@ -128,6 +132,7 @@ cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjp cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= @@ -636,6 +641,7 @@ google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOI google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -741,8 +747,9 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= +google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index cccbb1ca6db..3b009ad0d4f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -962,14 +962,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", - sum = "h1:1zumX+e2xh1qTuBJE0ExxU45s7SmRaZQhp9EJEdQou8=", - version = "v1.7.0", + sum = "h1:qzYOcI6u4CD+0R1E8rWbrqs04fISCcg2YYxW8yBAqFM=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_assuredworkloads", importpath = "cloud.google.com/go/assuredworkloads", - sum = "h1:2RVswX57rLj/3SneMwVk6inceggf+6wl4THRru/Joi8=", - version = "v1.6.0", + sum = "h1:IYhjgcgwb5TIAhC0aWQGGOqBnP0c2xijgMGf1iJRs50=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_automl", @@ -1062,8 +1062,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_dialogflow", importpath = "cloud.google.com/go/dialogflow", - sum = "h1:4ccwvAOnFdgliUJyQSeyG9Yy3HW4jF24xDIX6ftbqvY=", - version = "v1.16.1", + sum = "h1:NU0Pj57H++JQOW225/7o34sUZ4i9/TLfWFOSbI3N1cY=", + version = "v1.17.0", ) go_repository( name = "com_google_cloud_go_documentai", @@ -1081,8 +1081,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_edgecontainer", importpath = "cloud.google.com/go/edgecontainer", - sum = "h1:PS3AxjRqMu2XS01YLG/teWFQlZrP7+a+LJBj37zBMAQ=", - version = "v0.1.0", + sum = "h1:hd6J2n5dBBRuAqnNUEsKWrp6XNPKsaxwwIyzOPZTokk=", + version = "v0.2.0", ) go_repository( @@ -1197,8 +1197,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recaptchaenterprise_v2", importpath = "cloud.google.com/go/recaptchaenterprise/v2", - sum = "h1:CM59ZlNZxxpn24nwXfxhL4JtnGFTJ6gfSkoFbM8FKxE=", - version = "v2.2.0", + sum = "h1:BkkI7C0o8CtaHvdDMr5IA+y8pk0Y5wb73C7DHQiAKnw=", + version = "v2.3.0", ) go_repository( name = "com_google_cloud_go_recommendationengine", @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw=", - version = "v0.0.0-20221014213838-99cd37c6964a", + sum = "h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg=", + version = "v0.0.0-20221018160656-63c7b68cfc55", ) go_repository( name = "org_golang_google_grpc", From 80e5aefd94f005d4346cbe911bac4d9005feb69e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:06:55 +0000 Subject: [PATCH 1476/1518] chore(deps): update dependency com_google_protobuf to v3.21.8 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 5a0e7a19497..62b42cb51a5 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "ce2fbea3c78147a41b2a922485d283137845303e5e1b6cbd7ece94b96ade7031", - strip_prefix = "protobuf-3.21.7", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.7.tar.gz"], + sha256 = "543395bc2ae58e72f7be674221db08b8f14e3bd7e3a19158f76105b3b61570a0", + strip_prefix = "protobuf-3.21.8", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.8.tar.gz"], ) http_archive( From 1c978dac8ea8b9e097ef611025aa9dc4c76f4416 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 18:24:12 +0000 Subject: [PATCH 1477/1518] fix(deps): update module golang.org/x/oauth2 to v0.1.0 --- go.mod | 6 +++--- go.sum | 11 +++++++---- repositories.bzl | 16 ++++++++-------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 84c33f524df..dd4a8bb8a27 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 + golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 google.golang.org/grpc v1.50.1 @@ -18,8 +18,8 @@ require ( require ( github.com/kr/pretty v0.1.0 // indirect - golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect - golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 35bc05acf2b..180b90aafc8 100644 --- a/go.sum +++ b/go.sum @@ -417,8 +417,9 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -442,8 +443,8 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -518,10 +519,12 @@ golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/repositories.bzl b/repositories.bzl index 3b009ad0d4f..212a69e83a0 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1466,14 +1466,14 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI=", - version = "v0.0.0-20220909164309-bea034e7d591", + sum = "h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=", + version = "v0.1.0", ) go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk=", - version = "v0.0.0-20221014153046-6fdb5e3db783", + sum = "h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y=", + version = "v0.1.0", ) go_repository( name = "org_golang_x_sync", @@ -1484,14 +1484,14 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=", - version = "v0.0.0-20220728004956-3c1f35247d10", + sum = "h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=", + version = "v0.1.0", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=", - version = "v0.0.0-20210927222741-03fcf44c2211", + sum = "h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=", + version = "v0.1.0", ) go_repository( From bd0be814bd4bf5b19114f0913ac4f7cf0daa0fad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 21:19:14 +0000 Subject: [PATCH 1478/1518] chore(deps): update dependency bazel to v5.3.2 --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index c7cb1311a64..84197c89467 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -5.3.1 +5.3.2 From 34f1f8839e791eabdce677a218b23b51d3abdd48 Mon Sep 17 00:00:00 2001 From: laurentsimon <64505099+laurentsimon@users.noreply.github.com> Date: Thu, 20 Oct 2022 09:05:40 -0700 Subject: [PATCH 1479/1518] Use tag instead of has pin for SLSA generator (#2969) * Use tag instead of has pin for SLSA generator * Update renovate.json --- .github/workflows/release.yml | 2 +- renovate.json | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f41c25f659c..8ed2a88355d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@dc705baf82c5178c9d1555594b0652f569e22779 # tag=v1.2.1 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.1 with: base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" upload-assets: true # upload to a new release diff --git a/renovate.json b/renovate.json index 6681d36e99b..59656d8638d 100644 --- a/renovate.json +++ b/renovate.json @@ -35,6 +35,11 @@ "github-pages" ], "enabled": false + }, + { + "matchManagers": ["github-actions"], + "matchPackageNames": ["slsa-framework/slsa-github-generator"], + "pinDigests": false } ] } From 85f8aacc12c3e7c41e31a04e4eca050f68c23718 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 09:31:09 +0000 Subject: [PATCH 1480/1518] chore(deps): update golangci/golangci-lint-action digest to 07db538 --- .github/workflows/ci.yml | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 100 +++++++++--------- .../visibility_rule_echo_service.pb.go | 24 ++--- 3 files changed, 63 insertions(+), 63 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 79f6a04a68c..d956e7b85b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,7 +117,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: golangci/golangci-lint-action@537aa1903e5d359d0b27dbc19ddd22c5087f3fbc # tag=v3 + - uses: golangci/golangci-lint-action@07db5389c99593f11ad7b44463c2d4233066a9b1 # tag=v3 with: version: v1.45 args: --enable goimports diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 7e23b18f044..d62cb3c6982 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -2355,29 +2355,29 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, - 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, - 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, - 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, - 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, + 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, + 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, + 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, + 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, + 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, @@ -2428,33 +2428,33 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, - 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, - 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, - 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, - 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, - 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, - 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, - 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x12, 0xc9, + 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, + 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, + 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, + 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, + 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, + 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, + 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, + 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, @@ -2553,11 +2553,11 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, + 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, + 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, + 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, diff --git a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go index 10aecccbd45..8a96f4a92cf 100644 --- a/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go +++ b/examples/internal/proto/examplepb/visibility_rule_echo_service.pb.go @@ -653,10 +653,10 @@ var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_ra 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x31, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x0a, 0x12, - 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x12, 0xe1, 0x01, 0x0a, 0x0b, 0x45, 0x63, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0xe1, 0x01, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, @@ -667,10 +667,10 @@ var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_ra 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x50, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x2f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0xfa, 0xd2, - 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x12, 0xf9, 0x01, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x2f, 0xfa, 0xd2, + 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0xf9, 0x01, 0x0a, 0x16, 0x45, 0x63, 0x68, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, @@ -682,11 +682,11 @@ var file_examples_internal_proto_examplepb_visibility_rule_echo_service_proto_ra 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, - 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x32, 0x80, 0x02, 0x0a, 0x21, 0x56, 0x69, + 0x67, 0x65, 0x22, 0x45, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x49, 0x4e, 0x54, 0x45, + 0x52, 0x4e, 0x41, 0x4c, 0x2c, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x6e, + 0x64, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x32, 0x80, 0x02, 0x0a, 0x21, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x75, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, From 64644ce774658894f03f1e5882243e8c3fb20da6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Oct 2022 21:56:24 +0000 Subject: [PATCH 1481/1518] chore(deps): update actions/upload-artifact digest to 83fd05a --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d956e7b85b2..90fbcb7f52d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -139,7 +139,7 @@ jobs: dry-run: false language: go - name: Upload Crash - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # tag=v3 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # tag=v3 if: failure() && steps.build.outcome == 'success' with: name: artifacts From 4eb16595588fc24bbe1afc8a0bf5247583e98398 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 22:36:30 +0000 Subject: [PATCH 1482/1518] fix(deps): update google.golang.org/genproto digest to 1bc688f --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dd4a8bb8a27..5497ee30d76 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 + google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 180b90aafc8..bd8e4bde310 100644 --- a/go.sum +++ b/go.sum @@ -751,8 +751,8 @@ google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= -google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 212a69e83a0..69693c1b58c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg=", - version = "v0.0.0-20221018160656-63c7b68cfc55", + sum = "h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y=", + version = "v0.0.0-20221024183307-1bc688fe9f3e", ) go_repository( name = "org_golang_google_grpc", From 1d7452c8acc660f44019b00a5408372ce3f01c64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 16:10:04 +0000 Subject: [PATCH 1483/1518] fix(deps): update google.golang.org/genproto digest to 527a21c --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5497ee30d76..64d857912da 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e + google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index bd8e4bde310..accc40cf205 100644 --- a/go.sum +++ b/go.sum @@ -751,8 +751,8 @@ google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 69693c1b58c..3581a9d5224 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1403,8 +1403,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y=", - version = "v0.0.0-20221024183307-1bc688fe9f3e", + sum = "h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU=", + version = "v0.0.0-20221025140454-527a21cfbd71", ) go_repository( name = "org_golang_google_grpc", From 31773a723e543465f186fab76d69e0a11bd4faea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Oct 2022 20:24:59 +0000 Subject: [PATCH 1484/1518] chore(deps): update dependency com_google_protobuf to v3.21.9 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 62b42cb51a5..6de9ae210b4 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") # Define before rules_proto, otherwise we receive the version of com_google_protobuf from there http_archive( name = "com_google_protobuf", - sha256 = "543395bc2ae58e72f7be674221db08b8f14e3bd7e3a19158f76105b3b61570a0", - strip_prefix = "protobuf-3.21.8", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.8.tar.gz"], + sha256 = "1add10f9bd92775b91f326da259f243881e904dd509367d5031d4c782ba82810", + strip_prefix = "protobuf-3.21.9", + urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.9.tar.gz"], ) http_archive( From 0f696dad0774348a3609f040281b14196f5b484e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Osmanagi=C4=87?= Date: Thu, 27 Oct 2022 22:56:32 +0200 Subject: [PATCH 1485/1518] Add Conduit to adopters (#2981) --- ADOPTERS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 676c0c74b71..dafe8d29fdb 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -9,6 +9,9 @@ production users that have added themselves (in alphabetical order): API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). +- [Conduit](https://github.com/ConduitIO/conduit), a data streaming tool written in Go, + uses the gRPC-Gateway since its very beginning to provide an HTTP API in addition to its gRPC API. + This makes it easier to integrate with Conduit, and the generated OpenAPI data is used in the documentation. - [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to serve millions of API requests per day [1]. - [SpiceDB](https://github.com/authzed/spicedb) uses the gRPC-Gateway to handle From a5d1e9d4bb01343db92fee4c91bb954a318870b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 21:40:34 +0000 Subject: [PATCH 1486/1518] fix(deps): update google.golang.org/genproto digest to 115e99e --- go.mod | 2 +- go.sum | 112 ++++++++++- repositories.bzl | 493 ++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 531 insertions(+), 76 deletions(-) diff --git a/go.mod b/go.mod index 64d857912da..bf0937e8877 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 + google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index accc40cf205..3363b1f563e 100644 --- a/go.sum +++ b/go.sum @@ -30,22 +30,35 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -55,74 +68,122 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7 cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -133,26 +194,43 @@ cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/G cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -160,17 +238,32 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -283,6 +376,7 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -291,6 +385,7 @@ github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/Oth github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= @@ -418,6 +513,8 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -443,6 +540,8 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -458,6 +557,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -534,6 +634,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -598,6 +699,7 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -645,6 +747,8 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -750,9 +854,13 @@ google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+S google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71 h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 3581a9d5224..a103a59f029 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -930,9 +930,22 @@ def go_repositories(): go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", - sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", - version = "v0.34.0", + sum = "h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y=", + version = "v0.105.0", ) + go_repository( + name = "com_google_cloud_go_accessapproval", + importpath = "cloud.google.com/go/accessapproval", + sum = "h1:a3HOTMJn4UJkd9tP5RsbLulZuTo/0BQNBiCyF+M843I=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_accesscontextmanager", + importpath = "cloud.google.com/go/accesscontextmanager", + sum = "h1:k571J6qjHx6aX3Xc2TTuWjnm445gvwqLM9MnU5vl5sM=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_aiplatform", importpath = "cloud.google.com/go/aiplatform", @@ -946,6 +959,25 @@ def go_repositories(): sum = "h1:NKw6PpQi6V1O+KsjuTd+bhip9d0REYu4NevC45vtGp8=", version = "v0.12.0", ) + go_repository( + name = "com_google_cloud_go_apigateway", + importpath = "cloud.google.com/go/apigateway", + sum = "h1:6ttKca2YZfWXvrQpqtV30sgoweTFiNi4KUJq8NQX9zA=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_apigeeconnect", + importpath = "cloud.google.com/go/apigeeconnect", + sum = "h1:MoA5qGxCEdoTuVptVKTfrVPis5cOtuGiA3I+fQ7Surg=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_appengine", + importpath = "cloud.google.com/go/appengine", + sum = "h1:QhFG5LFVrX37NLkfUpQ3dAR9Gznup0f6PcdPK7UuNgo=", + version = "v1.4.0", + ) + go_repository( name = "com_google_cloud_go_area120", importpath = "cloud.google.com/go/area120", @@ -955,27 +987,45 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_artifactregistry", importpath = "cloud.google.com/go/artifactregistry", - sum = "h1:9yKYCozdh29v7QMx3QBuksZGtPNICFb5SVnyNvkKRGg=", - version = "v1.7.0", + sum = "h1:AwrnS6BpiBZ8qvxEq5IQi8r3+qgI4cMoaFbzxCdrCy4=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", - sum = "h1:qzYOcI6u4CD+0R1E8rWbrqs04fISCcg2YYxW8yBAqFM=", - version = "v1.8.0", + sum = "h1:sMxKnJq59UyrQuA7BZxw5wvMUng/2eLdge5a1OW7p3E=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_assuredworkloads", importpath = "cloud.google.com/go/assuredworkloads", - sum = "h1:IYhjgcgwb5TIAhC0aWQGGOqBnP0c2xijgMGf1iJRs50=", - version = "v1.7.0", + sum = "h1:v61vhw4RR2n7jd3CcSNJPEK/OJwXemwD58QHO3nH5g4=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_automl", importpath = "cloud.google.com/go/automl", - sum = "h1:U+kHmeKGXgBvTlrecPJhwkItWaIpIscG5DUpQxBQZZg=", - version = "v1.6.0", + sum = "h1:mxglGBZ1vDAwoKvNFWnzQElAhpBimmA+MAwiblV0J/U=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_baremetalsolution", + importpath = "cloud.google.com/go/baremetalsolution", + sum = "h1:nOCMDfI/vxCyKnVvA4oo172lMBHnTNhyhfBL3/HXb/s=", + version = "v0.3.0", + ) + go_repository( + name = "com_google_cloud_go_batch", + importpath = "cloud.google.com/go/batch", + sum = "h1:wvVjJvoIBCYPEz5vMRkVMi79fEeHQpDiCvVkdRsx/D8=", + version = "v0.3.0", + ) + go_repository( + name = "com_google_cloud_go_beyondcorp", + importpath = "cloud.google.com/go/beyondcorp", + sum = "h1:dPVGvvuSwN7RBYJ/su6BCc7Ymhd6dmL2zuuVF9v2teE=", + version = "v0.2.0", ) go_repository( @@ -987,20 +1037,45 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_billing", importpath = "cloud.google.com/go/billing", - sum = "h1:4RESn+mA7eGPBr5eQ4B/hbkHNivzYHbgRWpdlNeNjiE=", - version = "v1.5.0", + sum = "h1:3ANOolJbkUAIo4yDRmKNXpUg9LCJjj1gZWaDe8fbLtQ=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_binaryauthorization", importpath = "cloud.google.com/go/binaryauthorization", - sum = "h1:5F7dowxGuYQlX3LjfjH/sKf+IvI1TsItTw0sDZmoec4=", - version = "v1.2.0", + sum = "h1:Dtsg+OM81q68H8I6wuhxpECaaCL+EQwRzh1z3Qk/BPU=", + version = "v1.3.0", ) + go_repository( + name = "com_google_cloud_go_certificatemanager", + importpath = "cloud.google.com/go/certificatemanager", + sum = "h1:LqkQLIx//smOvPcRlc7t06iIMMBR5XKa9hDmxYl/+70=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_channel", + importpath = "cloud.google.com/go/channel", + sum = "h1:JXMJPd1FsOmnpAeBp+J/zPPLungzqpsNxtgcfdeVJmg=", + version = "v1.8.0", + ) + go_repository( + name = "com_google_cloud_go_cloudbuild", + importpath = "cloud.google.com/go/cloudbuild", + sum = "h1:nRHAdoqDcgxS8f5/J24+Bom4KPEhlFUB47MF67Qi42Y=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_clouddms", + importpath = "cloud.google.com/go/clouddms", + sum = "h1:GY1TOZU4fXUfYwm9eUQo3Uv1ocQmDMqLthGeCMMRVyM=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_cloudtasks", importpath = "cloud.google.com/go/cloudtasks", - sum = "h1:IL5W4fh6dAq9x1mO+4evrWCISOmPJegdaO0hZRZmWNE=", - version = "v1.6.0", + sum = "h1:Rk6r+yV11IinyZDG5w42VPX8HwBUWKdgiY2kflJ1mzY=", + version = "v1.7.0", ) go_repository( @@ -1009,6 +1084,19 @@ def go_repositories(): sum = "h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=", version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_contactcenterinsights", + importpath = "cloud.google.com/go/contactcenterinsights", + sum = "h1:hlcZ1oUQ+uD0koFgPqx+MPjM2022heTA3e5OhyGQYfM=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_container", + importpath = "cloud.google.com/go/container", + sum = "h1:sju38eJg66Q1SYfjSOb/b0a5GvrCs1cnN3lCsLG4M+A=", + version = "v1.6.0", + ) + go_repository( name = "com_google_cloud_go_containeranalysis", importpath = "cloud.google.com/go/containeranalysis", @@ -1019,8 +1107,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_datacatalog", importpath = "cloud.google.com/go/datacatalog", - sum = "h1:xzXGAE2fAuMh+ksODKr9nRv9ega1vHjFwRqMA8tRrVE=", - version = "v1.6.0", + sum = "h1:vYBwR8Sy0jVv6AIWCz37ylpDU7IQm2KgexqzOZePIEc=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_dataflow", @@ -1034,12 +1122,32 @@ def go_repositories(): sum = "h1:fnwkyzCVcPI/TmBheGgpmK2h+hWUIDHcZBincHRhrQ0=", version = "v0.4.0", ) + go_repository( + name = "com_google_cloud_go_datafusion", + importpath = "cloud.google.com/go/datafusion", + sum = "h1:KSWJ5rZNzYodtUpPIG8fHTMiFealGSMnEH8buPYRxRU=", + version = "v1.4.0", + ) + go_repository( name = "com_google_cloud_go_datalabeling", importpath = "cloud.google.com/go/datalabeling", sum = "h1:dp8jOF21n/7jwgo/uuA0RN8hvLcKO4q6s/yvwevs2ZM=", version = "v0.6.0", ) + go_repository( + name = "com_google_cloud_go_dataplex", + importpath = "cloud.google.com/go/dataplex", + sum = "h1:70G+NfNVqLZ1Xur5HUSo+mhsOKHrEaLhDoAVta0zC6Q=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_dataproc", + importpath = "cloud.google.com/go/dataproc", + sum = "h1:6l5Np4HcJL56xytV2WrLkGcX4dD9fWupNLorwwFBVZY=", + version = "v1.7.0", + ) + go_repository( name = "com_google_cloud_go_dataqna", importpath = "cloud.google.com/go/dataqna", @@ -1056,20 +1164,34 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_datastream", importpath = "cloud.google.com/go/datastream", - sum = "h1:ula4YR2K66o5wifLdPQMtR2I6KP+zvqdSEb6ncd1e0g=", - version = "v1.3.0", + sum = "h1:jXIZI27wPR+dZ+V0c2eLg3dtIS9ZIVDRxTAYX+w6Sss=", + version = "v1.4.0", ) + go_repository( + name = "com_google_cloud_go_deploy", + importpath = "cloud.google.com/go/deploy", + sum = "h1:xJVwJtJcUPW0opljx4hmox2zPhwVT6uSJNf/2Uw2YmQ=", + version = "v1.4.0", + ) + go_repository( name = "com_google_cloud_go_dialogflow", importpath = "cloud.google.com/go/dialogflow", - sum = "h1:NU0Pj57H++JQOW225/7o34sUZ4i9/TLfWFOSbI3N1cY=", - version = "v1.17.0", + sum = "h1:hz1Sz2AXYnKsKcfg4qSbaNQT83SocTUFpHa+FiQtXqs=", + version = "v1.18.0", ) + go_repository( + name = "com_google_cloud_go_dlp", + importpath = "cloud.google.com/go/dlp", + sum = "h1:XMxKeYF9PluIiGFOpWIy9Vbm0p7wZiz+PmSQENCh+yw=", + version = "v1.6.0", + ) + go_repository( name = "com_google_cloud_go_documentai", importpath = "cloud.google.com/go/documentai", - sum = "h1:CipwaecNhtsWUSneV2J5y8OqudHqvqPlcMHgSyh8vak=", - version = "v1.8.0", + sum = "h1:z6qGScSr29w19ZdMkoWnE94BwkRqEYS1zo1XnarlLoY=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_domains", @@ -1084,6 +1206,24 @@ def go_repositories(): sum = "h1:hd6J2n5dBBRuAqnNUEsKWrp6XNPKsaxwwIyzOPZTokk=", version = "v0.2.0", ) + go_repository( + name = "com_google_cloud_go_essentialcontacts", + importpath = "cloud.google.com/go/essentialcontacts", + sum = "h1:AOuaOcGaL1Z1Hy5L4WjZHGYonI3jyNmjVyxB3UsbfX8=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_eventarc", + importpath = "cloud.google.com/go/eventarc", + sum = "h1:yzOkQ4EakJ5ZHjqPVMevvQx2T9ZDX9PAB1kY1GpLivU=", + version = "v1.7.0", + ) + go_repository( + name = "com_google_cloud_go_filestore", + importpath = "cloud.google.com/go/filestore", + sum = "h1:EOLyFUmQTPu1BFaPNDp33D4aVCQuM66agwGOIoMe+uw=", + version = "v1.3.0", + ) go_repository( name = "com_google_cloud_go_firestore", @@ -1094,15 +1234,22 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_functions", importpath = "cloud.google.com/go/functions", - sum = "h1:s3Snbr2O4j4p7CuwImBas8rNNmkHS1YJANcCpKGqQSE=", - version = "v1.7.0", + sum = "h1:aMns6pr/uwRSCUO4C4aZRwl3Ii2EVytOz1qb3/+Cl6c=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_gaming", importpath = "cloud.google.com/go/gaming", - sum = "h1:PKggmegChZulPW8yvtziF8P9UOuVFwbvylbEucTNups=", - version = "v1.6.0", + sum = "h1:NNdzlx3QIQJ3n07YA7hSM0mZfvjLk37IPsQFFPdJGzY=", + version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_gkebackup", + importpath = "cloud.google.com/go/gkebackup", + sum = "h1:i87EQ2xU6wGLmGtx61eZPgmG34UkFj/4sQdZJVm77cI=", + version = "v0.2.0", + ) + go_repository( name = "com_google_cloud_go_gkeconnect", importpath = "cloud.google.com/go/gkeconnect", @@ -1115,11 +1262,54 @@ def go_repositories(): sum = "h1:JTcTaYQRGsVm+qkah7WzHb6e9sf1C0laYdRPn9aN+vg=", version = "v0.10.0", ) + go_repository( + name = "com_google_cloud_go_gkemulticloud", + importpath = "cloud.google.com/go/gkemulticloud", + sum = "h1:YmwWEfTvLDlzloheLf0khs0Zm0n5f1UkmyWg/9TkyBM=", + version = "v0.3.0", + ) + go_repository( + name = "com_google_cloud_go_gsuiteaddons", + importpath = "cloud.google.com/go/gsuiteaddons", + sum = "h1:ARyw0SXZ8pL32f73qq+rvfBRUJhjaeaPVKU5ezCWXw0=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_iam", + importpath = "cloud.google.com/go/iam", + sum = "h1:nsqQC88kT5Iwlm4MeNGTpfMWddp6NB/UOLFTH6m1QfQ=", + version = "v0.6.0", + ) + go_repository( + name = "com_google_cloud_go_iap", + importpath = "cloud.google.com/go/iap", + sum = "h1:+qMHlGyocHc3WFAK5U+COzR8/yNocwRbtfpj1/ROyks=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_ids", + importpath = "cloud.google.com/go/ids", + sum = "h1:QG0XBQPjp+EAhTMyIbzy3BdE6z50jUPjjb8t4pnFU+M=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_iot", + importpath = "cloud.google.com/go/iot", + sum = "h1:thTIvR3CovF4c2mY8H9A/vantRJADy2ih5/S1FIZzcE=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_kms", + importpath = "cloud.google.com/go/kms", + sum = "h1:uc58n3b/n/F2yDMJzHMbXORkJSh3fzO4/+jju6eR7Zg=", + version = "v1.5.0", + ) + go_repository( name = "com_google_cloud_go_language", importpath = "cloud.google.com/go/language", - sum = "h1:Fb2iua/5/UBvUuW9PgBinwsCRDi1qoQJEuekOinHFCs=", - version = "v1.6.0", + sum = "h1:332UUOZdk3m496ZBCoR/IVcdpKB7HHXHJ/MRmV5oYog=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_lifesciences", @@ -1127,6 +1317,19 @@ def go_repositories(): sum = "h1:tIqhivE2LMVYkX0BLgG7xL64oNpDaFFI7teunglt1tI=", version = "v0.6.0", ) + go_repository( + name = "com_google_cloud_go_longrunning", + importpath = "cloud.google.com/go/longrunning", + sum = "h1:y50CXG4j0+qvEukslYFBCrzaXX0qpFbBzc3PchSu/LE=", + version = "v0.1.1", + ) + go_repository( + name = "com_google_cloud_go_managedidentities", + importpath = "cloud.google.com/go/managedidentities", + sum = "h1:DjXiirnpfYFZVznSjZp56nRVtEMkRqOkPSzv3Kdog+8=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_mediatranslation", importpath = "cloud.google.com/go/mediatranslation", @@ -1136,21 +1339,35 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_memcache", importpath = "cloud.google.com/go/memcache", - sum = "h1:qTBOiSnVw7rnW6GVeH5Br8qs80ILoflNgFZySvaT4ek=", - version = "v1.5.0", + sum = "h1:l0/5n8tYsccs7WKs6Io4i4TpEbYfjjNbZFAiUkFiNF8=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_metastore", importpath = "cloud.google.com/go/metastore", - sum = "h1:wzJ9HslsybiJ3HL2168dVonr9D/eBq0VqObiMSCrE6c=", - version = "v1.6.0", + sum = "h1:tWzZ+6StVuoMhUldBB6nxCnxJZvt6Lvcl2KkH2NDzuE=", + version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_monitoring", + importpath = "cloud.google.com/go/monitoring", + sum = "h1:zK12aN/jzLRzrRXopEOUaG6kvuF6WJmlv1mXn1L7a6E=", + version = "v1.7.0", + ) + go_repository( name = "com_google_cloud_go_networkconnectivity", importpath = "cloud.google.com/go/networkconnectivity", - sum = "h1:mtIQewrz1ewMU3J0vVkUIJtAkpOqgkz4+UmcreeAm08=", - version = "v1.5.0", + sum = "h1:dOuHLqgOBPfeOg3pxFTFh26r4U7STEt2cpwrY4tXOHs=", + version = "v1.6.0", + ) + go_repository( + name = "com_google_cloud_go_networkmanagement", + importpath = "cloud.google.com/go/networkmanagement", + sum = "h1:BVv0NDQYy+dwOgd/zeNns/WQplmpsLStWoQqkI72Bso=", + version = "v1.4.0", ) + go_repository( name = "com_google_cloud_go_networksecurity", importpath = "cloud.google.com/go/networksecurity", @@ -1160,20 +1377,39 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_notebooks", importpath = "cloud.google.com/go/notebooks", - sum = "h1:YfPI4pOYQDcqJ+thM2cGtR9oRoRv42vRfubSPZnk3DI=", + sum = "h1:zGHnJXlskHACBeiXXIe2gC5nMPos38ofT8UeLt3GNfQ=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_optimization", + importpath = "cloud.google.com/go/optimization", + sum = "h1:rdvdT5Ha+ji5U2TMTCg+xpBSBE6Hc5f5vRejf1sO88o=", + version = "v1.1.0", + ) + go_repository( + name = "com_google_cloud_go_orchestration", + importpath = "cloud.google.com/go/orchestration", + sum = "h1:VPpBBR/MdrFiMXNoGG+IliEzSmF+sgTRmlPb3SA4+x8=", version = "v1.3.0", ) + go_repository( + name = "com_google_cloud_go_orgpolicy", + importpath = "cloud.google.com/go/orgpolicy", + sum = "h1:RZNIHYRfKVhK/ZHmpVAjpltK7QovtAOwTSntf9pl1xE=", + version = "v1.4.0", + ) + go_repository( name = "com_google_cloud_go_osconfig", importpath = "cloud.google.com/go/osconfig", - sum = "h1:fkFlXCxkUt3tE8LYtF6CipuPbC/HIrciwDTjFpsTf88=", - version = "v1.8.0", + sum = "h1:Bu+46U3mzvQ1X+fAX+f2eZaiOZw3LekD9sze/i4f7+w=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_oslogin", importpath = "cloud.google.com/go/oslogin", - sum = "h1:/7sVaMdtqSm6AjxW8KzoM6UKawkg3REr0XJ1zKtidpc=", - version = "v1.5.0", + sum = "h1:hTBDUARxmYv/qcVPI3DikVNuhCrleuJsLUjlrETKhVo=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_phishingprotection", @@ -1181,6 +1417,13 @@ def go_repositories(): sum = "h1:OrwHLSRSZyaiOt3tnY33dsKSedxbMzsXvqB21okItNQ=", version = "v0.6.0", ) + go_repository( + name = "com_google_cloud_go_policytroubleshooter", + importpath = "cloud.google.com/go/policytroubleshooter", + sum = "h1:sBeOCvjJFNT/YRtXpWAX08ww70fcRHKqjVGULZ4Vr0E=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_privatecatalog", importpath = "cloud.google.com/go/privatecatalog", @@ -1197,8 +1440,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recaptchaenterprise_v2", importpath = "cloud.google.com/go/recaptchaenterprise/v2", - sum = "h1:BkkI7C0o8CtaHvdDMr5IA+y8pk0Y5wb73C7DHQiAKnw=", - version = "v2.3.0", + sum = "h1:JSN8PT1XCAv2Gx01QkVC0xIjnabwawVPCp8l7VPBU6Q=", + version = "v2.4.0", ) go_repository( name = "com_google_cloud_go_recommendationengine", @@ -1209,57 +1452,103 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recommender", importpath = "cloud.google.com/go/recommender", - sum = "h1:C1tw+Qa/bgm6LoH1wuxYdoyinwKkW/jDJ0GpSJf58cE=", - version = "v1.6.0", + sum = "h1:A50LDNE2+IJuvTCLHOSZM3/J5vZsmd4RcUm2Blh04m0=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_redis", importpath = "cloud.google.com/go/redis", - sum = "h1:gtPd4pG/Go5mrdGQ4MJXxPHtjxtoWUBkrWLXNV1L2TA=", - version = "v1.8.0", + sum = "h1:oMeAQhZG9FJbsnUQGCZYDapWNPx2flDrYxxrAi3WdWU=", + version = "v1.9.0", ) + go_repository( + name = "com_google_cloud_go_resourcemanager", + importpath = "cloud.google.com/go/resourcemanager", + sum = "h1:lJLboEWuUMexWSpW48DRMnDM6LYbtu2pN5q9YBV3fM8=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_resourcesettings", + importpath = "cloud.google.com/go/resourcesettings", + sum = "h1:Tr87MO4TbLCKkh/+8Vrx+NL0bxWiQNLOJL8dan11L7k=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_retail", importpath = "cloud.google.com/go/retail", - sum = "h1:Q3W/JsQupZWaoFxUOugZd1Eq590R+Dk6dhacLK2h7+w=", - version = "v1.9.0", + sum = "h1:wIvFcq5dgo8mnrmEFVf//yUiLzqUHGF1fyqIwiN+R6Q=", + version = "v1.10.0", ) + go_repository( + name = "com_google_cloud_go_run", + importpath = "cloud.google.com/go/run", + sum = "h1:ojwQUZe8P1xAcI8H91HJC/NkxNcKmb9/a9CZpkkZJzE=", + version = "v0.2.0", + ) + go_repository( name = "com_google_cloud_go_scheduler", importpath = "cloud.google.com/go/scheduler", - sum = "h1:Fe1Upic/q4cwqXbInCzgAW35QSerj8JlNwATIxDdfOI=", - version = "v1.5.0", + sum = "h1:iwMNmT8b2LhkcsHYYDCIxrBAVCklbbbbXvbfVLMLvX4=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_secretmanager", importpath = "cloud.google.com/go/secretmanager", - sum = "h1:5v0zegRMlytVnN7J+bg5Ipqah3I2RZ67ysy00mvA+lA=", - version = "v1.6.0", + sum = "h1:4wYWL2t10q+xUtFFS0QuWlqwQguMrwC6FDpjtMM6cUI=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_security", importpath = "cloud.google.com/go/security", - sum = "h1:linnRc3/gJYDfKbAtNixVQ52+66DpOx5MmCz0NNxal8=", - version = "v1.8.0", + sum = "h1:o9frPOtXW2f4zMlw4SYPE42LRz/hhrYVWtAEUkPvyA4=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_securitycenter", importpath = "cloud.google.com/go/securitycenter", - sum = "h1:hKIggnv2eCAPjsVnFcZbytMOsFOk6p4ut0iAUDoNsNA=", - version = "v1.14.0", + sum = "h1:Fg6hwy3Of6Q9IvBC/P0pppkUvKHmkRNy++K4/g+PZAw=", + version = "v1.15.0", + ) + go_repository( + name = "com_google_cloud_go_servicecontrol", + importpath = "cloud.google.com/go/servicecontrol", + sum = "h1:jyC94OAVsoHBDfpInk66a5ZQJZPgRzSWHQX3OFfnNqE=", + version = "v1.4.0", ) + go_repository( name = "com_google_cloud_go_servicedirectory", importpath = "cloud.google.com/go/servicedirectory", - sum = "h1:QmCWml/qvNOYyiPP4G52srYcsHSLCXuvydJDVLTFSe8=", - version = "v1.5.0", + sum = "h1:6lhsfUhTmHsiCEdmJd8mBvOO9FdDeZSzUOlGl14x/bw=", + version = "v1.6.0", + ) + go_repository( + name = "com_google_cloud_go_servicemanagement", + importpath = "cloud.google.com/go/servicemanagement", + sum = "h1:uqHy7K4df2Z+WwJUhaGMXOdwhZu03fCHbD7xRP3+B8M=", + version = "v1.4.0", + ) + go_repository( + name = "com_google_cloud_go_serviceusage", + importpath = "cloud.google.com/go/serviceusage", + sum = "h1:meJ9kF0A9F9f7ztBuyI7tMPThCmulzCI6tAiYtLmgZU=", + version = "v1.3.0", ) + go_repository( + name = "com_google_cloud_go_shell", + importpath = "cloud.google.com/go/shell", + sum = "h1:5kEngDPazPYCyXJyDSgxu8cm4rhC8zgw90IxebjAFaM=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_speech", importpath = "cloud.google.com/go/speech", - sum = "h1:bRI2QczZGpcPfuhHr63VOdfyyfYp/43N0wRuBKrd0nQ=", - version = "v1.7.0", + sum = "h1:j0SMkg35JKbVq185AR4mBR2q0ARFa/CO3g7Mkg35ZY0=", + version = "v1.8.0", ) go_repository( @@ -1268,35 +1557,93 @@ def go_repositories(): sum = "h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=", version = "v1.10.0", ) + go_repository( + name = "com_google_cloud_go_storagetransfer", + importpath = "cloud.google.com/go/storagetransfer", + sum = "h1:Xwtox/X2Jl3ariFevzZjzMlsvp3znzvryYZVxMwfZ9g=", + version = "v1.5.0", + ) + go_repository( name = "com_google_cloud_go_talent", importpath = "cloud.google.com/go/talent", - sum = "h1:6c4pvu3k2idEhJRZnZ2HdVLWZUuT9fsns2gQtCzRtqA=", - version = "v1.2.0", + sum = "h1:+hCSx3Ua8RomkTi8LpZ7dJdSVciWRod7rUlqUDnRVJA=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_texttospeech", + importpath = "cloud.google.com/go/texttospeech", + sum = "h1:m0TASV/2VF1lVmXe+VDIur6rbf2gJeAKvnm27lBCg4g=", + version = "v1.4.0", ) + go_repository( + name = "com_google_cloud_go_tpu", + importpath = "cloud.google.com/go/tpu", + sum = "h1:AH8Q8iwRW96Jt7EsuxpxOoVMBjuo+bau9yYxdO6xPY8=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_trace", + importpath = "cloud.google.com/go/trace", + sum = "h1:YmCusGVDe0scOkHKi+y/GgBZlwQjHybtQHV12AfJEgo=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_translate", + importpath = "cloud.google.com/go/translate", + sum = "h1:uxcD/O79CBRTXN0pOaETVvgyP8tM6biRqG0aVXOWWbs=", + version = "v1.3.0", + ) + go_repository( + name = "com_google_cloud_go_video", + importpath = "cloud.google.com/go/video", + sum = "h1:sTtr2Bn0c229zODjrFmRhu5x/FHT921aBBPG51IxExE=", + version = "v1.8.0", + ) + go_repository( name = "com_google_cloud_go_videointelligence", importpath = "cloud.google.com/go/videointelligence", - sum = "h1:w56i2xl1jHX2tz6rHXBPHd6xujevhImzbc16Kl+V/zQ=", - version = "v1.7.0", + sum = "h1:uwarOUvggPELA1Ihen1sDBeyLd2fbIBoiphlMgkFg24=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_vision_v2", importpath = "cloud.google.com/go/vision/v2", - sum = "h1:eEyIDJ5/98UmQrYZ6eQExUT3iHyDjzzPX29UP6x7ZQo=", - version = "v2.3.0", + sum = "h1:V7mNTkweq+C+1GquSQiCszoMvurbzoZkqtGcbkzdaO8=", + version = "v2.4.0", ) + go_repository( + name = "com_google_cloud_go_vmmigration", + importpath = "cloud.google.com/go/vmmigration", + sum = "h1:pGVbZnqcHs61mOckeZuatk5aCujGpQlG4EnF2+3jvOE=", + version = "v1.2.0", + ) + go_repository( + name = "com_google_cloud_go_vpcaccess", + importpath = "cloud.google.com/go/vpcaccess", + sum = "h1:/PHFPPMOO9M7X00pq0Tn+/ScVDVJ2AATn+78tM7is1M=", + version = "v1.4.0", + ) + go_repository( name = "com_google_cloud_go_webrisk", importpath = "cloud.google.com/go/webrisk", - sum = "h1:WdHJmLSAs5bIis/WWO7pIfiRBD1PiWe1OAlPrWeM9Tk=", - version = "v1.5.0", + sum = "h1:5Y961bETa0Nja4Ej/NdDDz1rhCKf1zwAo22lzJy23Qs=", + version = "v1.6.0", ) + go_repository( + name = "com_google_cloud_go_websecurityscanner", + importpath = "cloud.google.com/go/websecurityscanner", + sum = "h1:rkU8GGJ3GY/FoyhAM/tyZA4eNSoNmcIoY+oQkPGBhSc=", + version = "v1.3.0", + ) + go_repository( name = "com_google_cloud_go_workflows", importpath = "cloud.google.com/go/workflows", - sum = "h1:0MjX5ugKmTdbRG2Vai5aAgNAOe2wzvs/XQwFDSowy9c=", - version = "v1.7.0", + sum = "h1:las2VwuMdEytyyDhTLEKORtig48dhOViDd1U4RSIsr8=", + version = "v1.8.0", ) go_repository( @@ -1403,8 +1750,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:GEgb2jF5zxsFJpJfg9RoDDWm7tiwc/DDSTE2BtLUkXU=", - version = "v0.0.0-20221025140454-527a21cfbd71", + sum = "h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo=", + version = "v0.0.0-20221027153422-115e99e71e1c", ) go_repository( name = "org_golang_google_grpc", From 04a7ec41c9ad4817115ad829e7183ac96fd22583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B6=E4=BB=B6?= Date: Mon, 31 Oct 2022 13:00:26 +0800 Subject: [PATCH 1487/1518] feat(gen-openapiv2): support trailing comments (#2965) * feat(gen-openapiv2): support trailing comments * feat(gen-openapiv2): add examplepb for trailing comments * fix typo Co-authored-by: Johan Brandhorst-Satzkorn * fix indent * fix: regenerate the example files Co-authored-by: Johan Brandhorst-Satzkorn --- .../internal/clients/abe/api/swagger.yaml | 345 ++++ .../abe/api_a_bit_of_everything_service.go | 180 ++ .../clients/abe/model_a_bit_of_everything.go | 7 + .../abe/model_a_bit_of_everything_1.go | 7 + .../abe/model_a_bit_of_everything_2.go | 7 + .../abe/model_a_bit_of_everything_3.go | 7 + .../abe/model_a_bit_of_everything_4.go | 7 + .../model_examplepb_a_bit_of_everything.go | 7 + .../proto/examplepb/a_bit_of_everything.pb.go | 1513 +++++++++-------- .../proto/examplepb/a_bit_of_everything.proto | 9 + .../a_bit_of_everything.swagger.json | 360 ++++ .../examplepb/generated_input.swagger.json | 18 + .../proto/examplepb/stream.swagger.json | 18 + .../internal/genopenapi/template.go | 8 + 14 files changed, 1760 insertions(+), 733 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index e21c4fef425..f77de5f7460 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -456,6 +456,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -814,6 +843,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1159,6 +1217,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1524,6 +1611,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -1876,6 +1992,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2241,6 +2386,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2631,6 +2805,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -2979,6 +3182,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -3344,6 +3576,35 @@ paths: required: true type: "string" x-exportParamName: "RequiredFieldSchemaJsonNameCustom" + - name: "trailingOnly" + in: "query" + description: "Trailing only" + required: false + type: "string" + x-exportParamName: "TrailingOnly" + x-optionalDataType: "String" + - name: "trailingOnlyDot" + in: "query" + description: "Trailing only dot." + required: false + type: "string" + x-exportParamName: "TrailingOnlyDot" + x-optionalDataType: "String" + - name: "trailingBoth" + in: "query" + description: "Leading both\n\nTrailing both." + required: false + type: "string" + x-exportParamName: "TrailingBoth" + x-optionalDataType: "String" + - name: "trailingMultiline" + in: "query" + description: "Leading multiline\n\nThis is an example of a multi-line comment.\n\ + \nTrailing multiline." + required: false + type: "string" + x-exportParamName: "TrailingMultiline" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -4727,6 +4988,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5218,6 +5493,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5400,6 +5689,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5582,6 +5885,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5749,6 +6066,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" externalDocs: description: "Find out more about ABitOfEverything" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -5906,6 +6237,20 @@ definitions: title: "Test openapiv2 handling of required json_name fields" required_field_schema_json_name_custom: type: "string" + trailingOnly: + type: "string" + title: "Trailing only" + trailingOnlyDot: + type: "string" + description: "Trailing only dot." + trailingBoth: + type: "string" + description: "Trailing both." + title: "Leading both" + trailingMultiline: + type: "string" + description: "This is an example of a multi-line comment.\n\nTrailing multiline." + title: "Leading multiline" description: "Intentionally complicated message type to cover many features of\ \ Protobuf." example: "{\"int64_value\":12,\"double_value\":12.3}" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index c0436afa252..2beea8bded8 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -385,6 +385,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -422,6 +426,10 @@ type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -546,6 +554,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -724,6 +744,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -761,6 +785,10 @@ type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -885,6 +913,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1062,6 +1102,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -1097,6 +1141,10 @@ type ABitOfEverythingServiceCheckPostQueryParamsOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, singleNested ABitOfEverythingNested, uuid string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCheckPostQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1215,6 +1263,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -1551,6 +1611,10 @@ This API creates a new ABitOfEverything * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -1574,6 +1638,10 @@ type ABitOfEverythingServiceCreateOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string, uuid string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCreateOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -1671,6 +1739,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2176,6 +2256,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -2215,6 +2299,10 @@ type ABitOfEverythingServiceCustomOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -2344,6 +2432,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustom(ctx co localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2523,6 +2623,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return interface{} */ @@ -2562,6 +2666,10 @@ type ABitOfEverythingServiceCustomOptionsRequestOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptionsRequest(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceCustomOptionsRequestOpts) (interface{}, *http.Response, error) { @@ -2691,6 +2799,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCustomOptions localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3141,6 +3261,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return ExamplepbABitOfEverything */ @@ -3180,6 +3304,10 @@ type ABitOfEverythingServiceDoubleColonOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceDoubleColonOpts) (ExamplepbABitOfEverything, *http.Response, error) { @@ -3309,6 +3437,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDoubleColon(c localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -3642,6 +3782,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return interface{} */ @@ -3681,6 +3825,10 @@ type ABitOfEverythingServiceExistsOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceExistsOpts) (interface{}, *http.Response, error) { @@ -3810,6 +3958,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceExists(ctx co localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -4104,6 +4264,10 @@ ABitOfEverythingServiceApiService * @param "OptionalStringValue" (optional.String) - * @param "ProductId" (optional.Interface of []string) - Test openapiv2 generation of repeated fields Only digits are allowed. * @param "OptionalStringField" (optional.String) - Test openapiv2 generation of required fields with annotation and jsonschema to reproduce + * @param "TrailingOnly" (optional.String) - Trailing only + * @param "TrailingOnlyDot" (optional.String) - Trailing only dot. + * @param "TrailingBoth" (optional.String) - Leading both Trailing both. + * @param "TrailingMultiline" (optional.String) - Leading multiline This is an example of a multi-line comment. Trailing multiline. @return interface{} */ @@ -4143,6 +4307,10 @@ type ABitOfEverythingServiceGetQueryOpts struct { OptionalStringValue optional.String ProductId optional.Interface OptionalStringField optional.String + TrailingOnly optional.String + TrailingOnlyDot optional.String + TrailingBoth optional.String + TrailingMultiline optional.String } func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuidName string, floatValue float32, doubleValue float64, int64Value string, requiredStringViaFieldBehaviorAnnotation string, requiredStringField1 string, requiredStringField2 string, requiredFieldBehaviorJsonNameCustom string, requiredFieldSchemaJsonNameCustom string, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { @@ -4272,6 +4440,18 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx localVarQueryParams.Add("requiredStringField2", parameterToString(requiredStringField2, "")) localVarQueryParams.Add("required_field_behavior_json_name_custom", parameterToString(requiredFieldBehaviorJsonNameCustom, "")) localVarQueryParams.Add("required_field_schema_json_name_custom", parameterToString(requiredFieldSchemaJsonNameCustom, "")) + if localVarOptionals != nil && localVarOptionals.TrailingOnly.IsSet() { + localVarQueryParams.Add("trailingOnly", parameterToString(localVarOptionals.TrailingOnly.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingOnlyDot.IsSet() { + localVarQueryParams.Add("trailingOnlyDot", parameterToString(localVarOptionals.TrailingOnlyDot.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingBoth.IsSet() { + localVarQueryParams.Add("trailingBoth", parameterToString(localVarOptionals.TrailingBoth.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.TrailingMultiline.IsSet() { + localVarQueryParams.Add("trailingMultiline", parameterToString(localVarOptionals.TrailingMultiline.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 4f4114a7b4c..54ee6d4d7a8 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -65,4 +65,11 @@ type ABitOfEverything struct { RequiredStringField2 string `json:"requiredStringField2"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index 3d6c0b5c454..1dc59cdd84e 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -66,4 +66,11 @@ type ABitOfEverything1 struct { RequiredStringField2 string `json:"requiredStringField2"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index f50314f15a4..dc648a75c67 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -65,4 +65,11 @@ type ABitOfEverything2 struct { RequiredStringField2 string `json:"requiredStringField2"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index 046730b8fcb..448a1b0303d 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -65,4 +65,11 @@ type ABitOfEverything3 struct { RequiredStringField2 string `json:"requiredStringField2"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index 63a265551fe..f877d26f253 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -65,4 +65,11 @@ type ABitOfEverything4 struct { RequiredStringField2 string `json:"requiredStringField2,omitempty"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom,omitempty"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom,omitempty"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index f029321bb3b..add20a6133e 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -66,4 +66,11 @@ type ExamplepbABitOfEverything struct { RequiredStringField2 string `json:"requiredStringField2"` RequiredFieldBehaviorJsonNameCustom string `json:"required_field_behavior_json_name_custom"` RequiredFieldSchemaJsonNameCustom string `json:"required_field_schema_json_name_custom"` + TrailingOnly string `json:"trailingOnly,omitempty"` + // Trailing only dot. + TrailingOnlyDot string `json:"trailingOnlyDot,omitempty"` + // Trailing both. + TrailingBoth string `json:"trailingBoth,omitempty"` + // This is an example of a multi-line comment. Trailing multiline. + TrailingMultiline string `json:"trailingMultiline,omitempty"` } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index d62cb3c6982..083808d9d15 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -406,6 +406,14 @@ type ABitOfEverything struct { // Test openapiv2 handling of required json_name fields RequiredFieldBehaviorJsonName string `protobuf:"bytes,45,opt,name=required_field_behavior_json_name,json=required_field_behavior_json_name_custom,proto3" json:"required_field_behavior_json_name,omitempty"` RequiredFieldSchemaJsonName string `protobuf:"bytes,46,opt,name=required_field_schema_json_name,json=required_field_schema_json_name_custom,proto3" json:"required_field_schema_json_name,omitempty"` + TrailingOnly string `protobuf:"bytes,47,opt,name=trailing_only,json=trailingOnly,proto3" json:"trailing_only,omitempty"` // Trailing only + TrailingOnlyDot string `protobuf:"bytes,48,opt,name=trailing_only_dot,json=trailingOnlyDot,proto3" json:"trailing_only_dot,omitempty"` // Trailing only dot. + // Leading both + TrailingBoth string `protobuf:"bytes,49,opt,name=trailing_both,json=trailingBoth,proto3" json:"trailing_both,omitempty"` // Trailing both. + // Leading multiline + // + // This is an example of a multi-line comment. + TrailingMultiline string `protobuf:"bytes,50,opt,name=trailing_multiline,json=trailingMultiline,proto3" json:"trailing_multiline,omitempty"` // Trailing multiline. } func (x *ABitOfEverything) Reset() { @@ -762,6 +770,34 @@ func (x *ABitOfEverything) GetRequiredFieldSchemaJsonName() string { return "" } +func (x *ABitOfEverything) GetTrailingOnly() string { + if x != nil { + return x.TrailingOnly + } + return "" +} + +func (x *ABitOfEverything) GetTrailingOnlyDot() string { + if x != nil { + return x.TrailingOnlyDot + } + return "" +} + +func (x *ABitOfEverything) GetTrailingBoth() string { + if x != nil { + return x.TrailingBoth + } + return "" +} + +func (x *ABitOfEverything) GetTrailingMultiline() string { + if x != nil { + return x.TrailingMultiline + } + return "" +} + type isABitOfEverything_OneofValue interface { isABitOfEverything_OneofValue() } @@ -1765,8 +1801,8 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x92, 0x41, 0x32, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x10, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x8a, 0x01, 0x14, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, - 0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xdb, - 0x23, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x20, 0x33, 0x32, 0x7d, 0x24, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x80, + 0x25, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, @@ -1991,314 +2027,337 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x26, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, - 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x1a, - 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, - 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, 0x65, 0x70, 0x45, - 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, - 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, 0x0e, 0x7b, 0x22, 0x6f, 0x6b, - 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0xd6, 0x02, 0x92, 0x41, 0xd2, - 0x02, 0x0a, 0xcc, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, 0x49, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x1f, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0x03, 0x22, 0x0a, 0x19, - 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, - 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, 0x22, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x22, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, 0x32, - 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x09, 0x0a, - 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, - 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, - 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, - 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x5d, 0x2c, - 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, - 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, - 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, 0x0a, 0x04, 0x42, 0x6f, 0x6f, - 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, - 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x6f, - 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, + 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, + 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, + 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, + 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x5f, 0x64, 0x6f, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x6c, 0x79, 0x44, 0x6f, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x74, + 0x68, 0x18, 0x31, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, + 0x67, 0x42, 0x6f, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, + 0x67, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x32, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x6c, 0x69, 0x6e, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x42, 0x03, 0xe0, - 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x53, - 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3f, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, - 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x04, - 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, + 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x13, 0x92, 0x41, 0x10, 0x32, + 0x0e, 0x7b, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x7d, 0x1a, + 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, 0x0a, 0x05, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x6f, - 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, - 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7d, 0x0a, 0x1a, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, - 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x03, 0x66, 0x6f, 0x6f, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, - 0x66, 0x6f, 0x6f, 0x22, 0x51, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, 0x4a, 0x0a, 0x03, 0x62, 0x61, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x72, 0x42, 0x03, 0xe0, 0x41, - 0x02, 0x52, 0x03, 0x62, 0x61, 0x72, 0x22, 0x1a, 0x0a, 0x03, 0x42, 0x61, 0x72, 0x12, 0x13, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x02, - 0x69, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, - 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, - 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, - 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x64, 0x10, - 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, - 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x10, 0x01, - 0x32, 0x96, 0x36, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, + 0xd6, 0x02, 0x92, 0x41, 0xd2, 0x02, 0x0a, 0xcc, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x4a, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, + 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, + 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, + 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, + 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, + 0x1f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x82, 0x03, 0x22, 0x0a, 0x19, 0x78, 0x2d, 0x61, 0x2d, 0x62, 0x69, 0x74, 0x2d, 0x6f, 0x66, 0x2d, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, + 0x1a, 0x03, 0x62, 0x61, 0x72, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x29, 0x7b, + 0x22, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x31, + 0x32, 0x2c, 0x20, 0x22, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x31, 0x32, 0x2e, 0x33, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x89, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, + 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, - 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, + 0x0f, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, + 0x28, 0x10, 0x52, 0x19, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, + 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, + 0x11, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x64, 0x92, 0x41, 0x61, 0x32, 0x5f, 0x7b, 0x22, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, + 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, + 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, + 0x72, 0x75, 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x7d, 0x22, 0x41, 0x0a, + 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x48, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, + 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x67, + 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, + 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, + 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0xb4, 0x01, 0x0a, 0x0a, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, + 0x6f, 0x6b, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, + 0x92, 0x02, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x04, 0x77, 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x77, 0x68, 0x61, 0x74, 0x12, 0x53, 0x0a, 0x03, 0x77, 0x68, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, + 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x52, 0x03, 0x77, 0x68, 0x6f, 0x12, 0x54, + 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, + 0x73, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x77, + 0x68, 0x65, 0x72, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7d, 0x0a, 0x1a, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x03, + 0x66, 0x6f, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x46, 0x6f, 0x6f, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x03, 0x66, 0x6f, 0x6f, 0x22, 0x51, 0x0a, 0x03, 0x46, 0x6f, 0x6f, 0x12, + 0x4a, 0x0a, 0x03, 0x62, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, - 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, - 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, - 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, - 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x62, 0x6f, - 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, - 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xb0, 0x01, - 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x61, + 0x72, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x03, 0x62, 0x61, 0x72, 0x22, 0x1a, 0x0a, 0x03, 0x42, + 0x61, 0x72, 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x02, 0x52, 0x02, 0x69, 0x64, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x2b, 0x0a, 0x0f, 0x73, 0x6e, 0x61, + 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, + 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0x96, 0x36, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, + 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, + 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, + 0xb4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, + 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x3d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x7d, + 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0xb9, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x42, 0x6f, 0x6f, 0x6b, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x6f, 0x6b, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x32, 0x24, 0x2f, 0x76, + 0x31, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, + 0x2a, 0x7d, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, @@ -2307,234 +2366,143 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2d, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0xcf, 0x01, 0x0a, 0x0b, 0x44, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x6e, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x36, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x3a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, - 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, - 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x32, 0x2a, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, - 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, 0x01, 0x2a, 0x32, 0x2b, 0x2f, - 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, - 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, - 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, - 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x92, 0x41, 0x54, - 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x1a, 0x26, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x96, 0x01, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x3a, 0x03, 0x61, 0x62, + 0x65, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x30, 0x3a, + 0x01, 0x2a, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x1a, + 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x06, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, - 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, - 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, - 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, - 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, - 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, - 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5a, 0x12, 0x12, 0x10, - 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x02, 0x20, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, + 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xc9, - 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, - 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, - 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, - 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x19, 0x2f, - 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, - 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, - 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, - 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x8b, 0x01, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, + 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xa9, 0x05, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, + 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, - 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xac, 0x03, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, + 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, + 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, + 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x3b, 0x0a, 0x03, 0x34, + 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, + 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, 0x33, 0x12, + 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x73, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, 0x2d, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x5a, 0x19, 0x3a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, @@ -2542,243 +2510,322 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, - 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, - 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x1c, - 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, - 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, - 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, + 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, 0x7b, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, 0x0a, 0x0b, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, + 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, + 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, + 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, + 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, + 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, + 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, + 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, + 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, 0x12, 0x26, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, - 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, 0x6f, 0x66, - 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0xa9, 0x01, 0x0a, 0x17, - 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, - 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, - 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, - 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, - 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, 0x2f, 0x7b, - 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, 0xd5, 0x0c, - 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0x84, - 0x0c, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, - 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, - 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, - 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, - 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, - 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, - 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, - 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, 0x0a, 0x03, - 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, 0x43, 0x6f, - 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, 0x01, 0x0a, - 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, 0x34, 0x33, - 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, 0x32, 0x2d, - 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, 0x30, 0x33, - 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, 0x5b, 0x30, - 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, 0x42, 0x5d, - 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, - 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, 0x01, 0x0a, - 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, - 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x60, 0x0a, - 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0x0f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, - 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, - 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, - 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, - 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x14, 0x45, 0x63, 0x68, - 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74, 0x72, 0x61, 0x69, 0x74, 0x54, 0x61, 0x67, 0x12, - 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, + 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, + 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, + 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, + 0x45, 0x6e, 0x75, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, + 0x12, 0xa9, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbf, 0x01, 0x92, + 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, + 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, + 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x28, - 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, - 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, - 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, + 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, + 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, + 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, + 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, + 0x65, 0x7d, 0x42, 0xd5, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x92, 0x41, 0x84, 0x0c, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, + 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, + 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, + 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, + 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, + 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, + 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, + 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, + 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, + 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, + 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, + 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, + 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, + 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, + 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, + 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, + 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, + 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, + 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, + 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, + 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, + 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, + 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, + 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, + 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, + 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, + 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, + 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, + 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, + 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x6a, 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, + 0x12, 0x14, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74, 0x72, 0x61, 0x69, + 0x74, 0x54, 0x61, 0x67, 0x12, 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, + 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, + 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, + 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 2bd47fac19e..8ee93541111 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -406,6 +406,15 @@ message ABitOfEverything { (google.api.field_behavior) = REQUIRED ]; string required_field_schema_json_name = 46 [json_name = "required_field_schema_json_name_custom"]; + + string trailing_only = 47; // Trailing only + string trailing_only_dot = 48; // Trailing only dot. + // Leading both + string trailing_both = 49; // Trailing both. + // Leading multiline + // + // This is an example of a multi-line comment. + string trailing_multiline = 50; // Trailing multiline. } // ABitOfEverythingRepeated is used to validate repeated path parameter functionality diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 06a454911f1..eb4ac1e3278 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -558,6 +558,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -952,6 +980,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1335,6 +1391,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -1736,6 +1820,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -2141,6 +2253,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -2404,6 +2544,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -2800,6 +2958,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3176,6 +3362,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3576,6 +3790,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3976,6 +4218,34 @@ "in": "query", "required": true, "type": "string" + }, + { + "name": "trailingOnly", + "description": "Trailing only", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingOnlyDot", + "description": "Trailing only dot.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingBoth", + "description": "Leading both\n\nTrailing both.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "trailingMultiline", + "description": "Leading multiline\n\nThis is an example of a multi-line comment.\n\nTrailing multiline.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -4658,6 +4928,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5297,6 +5585,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -5586,6 +5892,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -6385,6 +6709,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", @@ -6725,6 +7067,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index 09a0f021204..bcb7f081b55 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -298,6 +298,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 5814d0972e7..bb11e5bda83 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -424,6 +424,24 @@ }, "required_field_schema_json_name_custom": { "type": "string" + }, + "trailingOnly": { + "type": "string", + "title": "Trailing only" + }, + "trailingOnlyDot": { + "type": "string", + "description": "Trailing only dot." + }, + "trailingBoth": { + "type": "string", + "description": "Trailing both.", + "title": "Leading both" + }, + "trailingMultiline": { + "type": "string", + "description": "This is an example of a multi-line comment.\n\nTrailing multiline.", + "title": "Leading multiline" } }, "description": "Intentionally complicated message type to cover many features of Protobuf.", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index f3886917235..6c465e670af 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -2228,6 +2228,14 @@ func protoComments(reg *descriptor.Registry, file *descriptor.File, outers []str // - join by \n comments = strings.Replace(comments, "\n ", "\n", -1) } + if loc.TrailingComments != nil { + trailing := strings.TrimSpace(*loc.TrailingComments) + if comments == "" { + comments = trailing + } else { + comments += "\n\n" + trailing + } + } return comments } return "" From a0fe8d7c8676db9674ccbc4c4fc642790a8b8065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6sta=20Jonasson?= <49041719+gostajonasson@users.noreply.github.com> Date: Tue, 1 Nov 2022 23:06:38 +0100 Subject: [PATCH 1488/1518] feat(gen-openapiv2): keep fields next to "$ref" fields (#2986) --- .../internal/clients/abe/api/swagger.yaml | 26 +++++++++ .../clients/abe/model_a_bit_of_everything.go | 2 + .../abe/model_a_bit_of_everything_1.go | 2 + .../abe/model_a_bit_of_everything_2.go | 2 + .../abe/model_a_bit_of_everything_3.go | 2 + .../abe/model_a_bit_of_everything_4.go | 2 + .../abe/model_a_bit_of_everything_nested.go | 1 + .../model_examplepb_a_bit_of_everything.go | 2 + ...ep_pathsingle_nested_name_single_nested.go | 1 + .../a_bit_of_everything.swagger.json | 54 ++++++++++++++----- .../examplepb/generated_input.swagger.json | 11 ++-- .../proto/examplepb/stream.swagger.json | 11 ++-- .../internal/genopenapi/template.go | 12 ----- 13 files changed, 96 insertions(+), 32 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index f77de5f7460..979d74dee97 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -4807,6 +4807,7 @@ definitions: type: "integer" format: "int64" ok: + description: "DeepEnum description." $ref: "#/definitions/NestedDeepEnum" description: "Nested is nested type." example: @@ -4939,6 +4940,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -4953,6 +4956,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5444,6 +5449,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5458,6 +5465,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5523,6 +5532,7 @@ definitions: type: "integer" format: "int64" ok: + description: "DeepEnum description." $ref: "#/definitions/NestedDeepEnum" description: "Nested is nested type." example: "{\"ok\":\"TRUE\"}" @@ -5640,6 +5650,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5654,6 +5666,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -5836,6 +5850,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -5850,6 +5866,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -6017,6 +6035,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -6031,6 +6051,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" @@ -6188,6 +6210,8 @@ definitions: items: $ref: "#/definitions/examplepbNumericEnum" enumValueAnnotation: + description: "Numeric enum description." + title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" repeatedStringAnnotation: type: "array" @@ -6202,6 +6226,8 @@ definitions: items: $ref: "#/definitions/ABitOfEverythingNested" nestedAnnotation: + description: "Nested object description." + title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" int64OverrideType: type: "integer" diff --git a/examples/internal/clients/abe/model_a_bit_of_everything.go b/examples/internal/clients/abe/model_a_bit_of_everything.go index 54ee6d4d7a8..25a28dc37d9 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything.go @@ -48,11 +48,13 @@ type ABitOfEverything struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_1.go b/examples/internal/clients/abe/model_a_bit_of_everything_1.go index 1dc59cdd84e..75a9ea1ee48 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_1.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_1.go @@ -49,11 +49,13 @@ type ABitOfEverything1 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_2.go b/examples/internal/clients/abe/model_a_bit_of_everything_2.go index dc648a75c67..28c009de5ca 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_2.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_2.go @@ -48,11 +48,13 @@ type ABitOfEverything2 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_3.go b/examples/internal/clients/abe/model_a_bit_of_everything_3.go index 448a1b0303d..464e7f875c2 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_3.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_3.go @@ -48,11 +48,13 @@ type ABitOfEverything3 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_4.go b/examples/internal/clients/abe/model_a_bit_of_everything_4.go index f877d26f253..c26d449ef07 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_4.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_4.go @@ -48,11 +48,13 @@ type ABitOfEverything4 struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation,omitempty"` diff --git a/examples/internal/clients/abe/model_a_bit_of_everything_nested.go b/examples/internal/clients/abe/model_a_bit_of_everything_nested.go index a90f8e75207..586778feaaa 100644 --- a/examples/internal/clients/abe/model_a_bit_of_everything_nested.go +++ b/examples/internal/clients/abe/model_a_bit_of_everything_nested.go @@ -15,5 +15,6 @@ type ABitOfEverythingNested struct { // name is nested field. Name string `json:"name,omitempty"` Amount int64 `json:"amount,omitempty"` + // DeepEnum description. Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index add20a6133e..04a06e37dfb 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -49,11 +49,13 @@ type ExamplepbABitOfEverything struct { RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` + // Numeric enum description. EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` + // Nested object description. NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` Int64OverrideType int64 `json:"int64OverrideType,omitempty"` RequiredStringViaFieldBehaviorAnnotation string `json:"requiredStringViaFieldBehaviorAnnotation"` diff --git a/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go index 1997ba73ca9..3ab04604db7 100644 --- a/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go +++ b/examples/internal/clients/abe/model_v1exampledeep_pathsingle_nested_name_single_nested.go @@ -13,5 +13,6 @@ package abe // Nested is nested type. type V1exampledeepPathsingleNestedNameSingleNested struct { Amount int64 `json:"amount,omitempty"` + // DeepEnum description. Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index eb4ac1e3278..914106787e4 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2480,7 +2480,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -2499,7 +2501,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", @@ -4724,7 +4728,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." @@ -4864,7 +4869,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -4883,7 +4890,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", @@ -5521,7 +5530,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -5540,7 +5551,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", @@ -5828,7 +5841,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -5847,7 +5862,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", @@ -6645,7 +6662,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -6664,7 +6683,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", @@ -6836,7 +6857,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." @@ -7003,7 +7025,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -7022,7 +7046,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", diff --git a/examples/internal/proto/examplepb/generated_input.swagger.json b/examples/internal/proto/examplepb/generated_input.swagger.json index bcb7f081b55..9bd39c3155a 100644 --- a/examples/internal/proto/examplepb/generated_input.swagger.json +++ b/examples/internal/proto/examplepb/generated_input.swagger.json @@ -67,7 +67,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." @@ -234,7 +235,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -253,7 +256,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index bb11e5bda83..6ece692db62 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -171,7 +171,8 @@ "format": "int64" }, "ok": { - "$ref": "#/definitions/NestedDeepEnum" + "$ref": "#/definitions/NestedDeepEnum", + "description": "DeepEnum description." } }, "description": "Nested is nested type." @@ -360,7 +361,9 @@ "title": "Repeated numeric enum title" }, "enumValueAnnotation": { - "$ref": "#/definitions/examplepbNumericEnum" + "$ref": "#/definitions/examplepbNumericEnum", + "description": "Numeric enum description.", + "title": "Numeric enum title" }, "repeatedStringAnnotation": { "type": "array", @@ -379,7 +382,9 @@ "title": "Repeated nested object title" }, "nestedAnnotation": { - "$ref": "#/definitions/ABitOfEverythingNested" + "$ref": "#/definitions/ABitOfEverythingNested", + "description": "Nested object description.", + "title": "Nested object title" }, "int64OverrideType": { "type": "integer", diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 6c465e670af..7bbd8d643a8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -516,12 +516,6 @@ func renderMessageAsDefinition(msg *descriptor.Message, reg *descriptor.Registry fieldSchema.Required = nil } - if fieldSchema.Ref != "" { - // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. - // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 - fieldSchema = openapiSchemaObject{schemaCore: schemaCore{Ref: fieldSchema.Ref}} - } - kv := keyVal{Value: fieldSchema} kv.Key = reg.FieldName(f) if schema.Properties == nil { @@ -1238,12 +1232,6 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re } else { desc = fieldProtoComments(reg, bodyField.Target.Message, bodyField.Target) } - if schema.Ref != "" { - // Per the JSON Reference syntax: Any members other than "$ref" in a JSON Reference object SHALL be ignored. - // https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3 - schema = openapiSchemaObject{schemaCore: schemaCore{Ref: schema.Ref}} - } - } if meth.GetClientStreaming() { From a63ed0e69747e4e668fbffbed370f2e50aca36d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Nov 2022 15:09:14 -0700 Subject: [PATCH 1489/1518] chore(deps): update golang docker tag to v1.19.3 (#2985) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/Dockerfile | 2 +- .github/plugins/protoc-gen-grpc-gateway/Dockerfile | 2 +- .github/plugins/protoc-gen-openapiv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/Dockerfile b/.github/Dockerfile index 0fda8f4e8ae..4ff3a47e25f 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.2 +FROM golang:1.19.3 ENV NVM_DIR="/usr/local/share/nvm" ENV NVM_SYMLINK_CURRENT=true \ diff --git a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile index 2b35da1be58..04c141e7364 100644 --- a/.github/plugins/protoc-gen-grpc-gateway/Dockerfile +++ b/.github/plugins/protoc-gen-grpc-gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.2 as builder +FROM golang:1.19.3 as builder ARG RELEASE_VERSION diff --git a/.github/plugins/protoc-gen-openapiv2/Dockerfile b/.github/plugins/protoc-gen-openapiv2/Dockerfile index 00c315119fc..8c9fcbc9ba6 100644 --- a/.github/plugins/protoc-gen-openapiv2/Dockerfile +++ b/.github/plugins/protoc-gen-openapiv2/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.2 as builder +FROM golang:1.19.3 as builder ARG RELEASE_VERSION From 4379a56d7c40bc14e1a55bee1e7886dfc38e9051 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 1 Nov 2022 15:13:40 -0700 Subject: [PATCH 1490/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90fbcb7f52d..c85b199353a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.19 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.12.0 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.13.0 proto_lint: runs-on: ubuntu-latest steps: From 8dc59538f60a753f4d82e4c2773c041a9ff34450 Mon Sep 17 00:00:00 2001 From: asraa Date: Wed, 2 Nov 2022 10:15:02 -0500 Subject: [PATCH 1491/1518] update release.yml (#2987) --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ed2a88355d..cb8667dad0e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,6 +42,7 @@ jobs: contents: write # To add assets to a release. uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.1 with: + compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163 base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" upload-assets: true # upload to a new release From c2e1a3d23c4f1ad85c1259af0ec6e8a50f4f81ee Mon Sep 17 00:00:00 2001 From: asraa Date: Wed, 2 Nov 2022 19:07:09 -0500 Subject: [PATCH 1492/1518] release: add a workflow_dispatch trigger for testing (#2989) Signed-off-by: Asra Ali Signed-off-by: Asra Ali --- .github/workflows/release.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cb8667dad0e..423cb53e1ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,10 @@ on: push: tags: - v2.[0-9]+.[0-9]+ + # For testing the workflow before pushing a tag + # This will run goreleaser with --snapshot and test the + # SLSA generator. + workflow_dispatch: permissions: contents: read name: release @@ -19,10 +23,19 @@ jobs: - uses: actions/setup-go@c4a742cab115ed795e34d4513e2cf7d472deb55f # tag=v3 with: check-latest: true + - name: Generate goreleaser args + id: args + run: | + set -euo pipefail + args='release --rm-dist' + if [[ "$GITHUB_REF" != refs/tags/* ]]; then + args+=' --snapshot' + fi + echo "args=$args" >> $GITHUB_OUTPUT - uses: goreleaser/goreleaser-action@b508e2e3ef3b19d4e4146d4f8fb3ba9db644a757 # tag=v3 id: run-goreleaser with: - args: release --rm-dist + args: ${{ steps.args.outputs.args }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Generate subject @@ -44,10 +57,11 @@ jobs: with: compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163 base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" - upload-assets: true # upload to a new release + upload-assets: ${{ github.event_name == 'push' }} # upload to a new release when pushing via tag push_bsr_plugins: runs-on: ubuntu-latest + if: github.event_name == 'push' steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # tag=v2 From 94247e5eb9d4536d601c6c0a1dad0cb18ed53634 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Sat, 5 Nov 2022 00:08:33 +0300 Subject: [PATCH 1493/1518] Use io/os instread of ioutil and use suitable verb (#2991) * Use io/os instread of ioutil and use suitable verb * Fix goimports lint issues --- .../internal/integration/integration_test.go | 119 +++++++++--------- internal/codegenerator/parse_req.go | 9 +- internal/descriptor/grpc_api_configuration.go | 6 +- internal/descriptor/openapi_configuration.go | 13 +- .../internal/genopenapi/helpers.go | 2 +- .../internal/genopenapi/template.go | 3 +- runtime/handler_test.go | 7 +- runtime/marshal_proto.go | 6 +- utilities/readerfactory.go | 3 +- 9 files changed, 80 insertions(+), 88 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 480deff3ab4..e650e0b896f 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -8,7 +8,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" "reflect" @@ -68,9 +67,9 @@ func TestEchoUnauthorized(t *testing.T) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } msg := new(statuspb.Status) @@ -125,9 +124,9 @@ func TestEchoPatch(t *testing.T) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -224,9 +223,9 @@ func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -257,9 +256,9 @@ func testEchoOneof(t *testing.T, port int, apiPrefix string, contentType string) return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -290,9 +289,9 @@ func testEchoOneof1(t *testing.T, port int, apiPrefix string, contentType string return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -323,9 +322,9 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -372,9 +371,9 @@ func testEchoBody(t *testing.T, port int, apiPrefix string, useTrailers bool) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -470,9 +469,9 @@ func testABECreate(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -580,9 +579,9 @@ func testABECreateBody(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -709,9 +708,9 @@ func testABEBulkCreate(t *testing.T, port int, useTrailers bool) { } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -792,9 +791,9 @@ func testABEBulkCreateWithError(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -819,9 +818,9 @@ func testABELookup(t *testing.T, port int) { return } defer cresp.Body.Close() - buf, err := ioutil.ReadAll(cresp.Body) + buf, err := io.ReadAll(cresp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(cresp.Body) failed with %v; want success", err) return } if got, want := cresp.StatusCode, http.StatusOK; got != want { @@ -844,9 +843,9 @@ func testABELookup(t *testing.T, port int) { } defer resp.Body.Close() - buf, err = ioutil.ReadAll(resp.Body) + buf, err = io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -893,7 +892,7 @@ func TestABEPatch(t *testing.T) { t.Fatalf("failed to issue PATCH request: %v", err) } if got, want := patchResp.StatusCode, http.StatusOK; got != want { - if body, err := ioutil.ReadAll(patchResp.Body); err != nil { + if body, err := io.ReadAll(patchResp.Body); err != nil { t.Errorf("patchResp body couldn't be read: %v", err) } else { t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) @@ -1026,7 +1025,7 @@ func TestABEPatchBody(t *testing.T) { t.Fatalf("failed to issue PATCH request: %v", err) } if got, want := patchResp.StatusCode, http.StatusOK; got != want { - if body, err := ioutil.ReadAll(patchResp.Body); err != nil { + if body, err := io.ReadAll(patchResp.Body); err != nil { t.Errorf("patchResp body couldn't be read: %v", err) } else { t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) @@ -1061,7 +1060,7 @@ func postABE(t *testing.T, port int, abe *examplepb.ABitOfEverything) (uuid stri t.Fatalf("http.Post(%q) failed with %v; want success", apiURL, err) return } - body, err := ioutil.ReadAll(postResp.Body) + body, err := io.ReadAll(postResp.Body) if err != nil { t.Fatalf("postResp body couldn't be read: %v", err) } @@ -1090,7 +1089,7 @@ func getABE(t *testing.T, port int, uuid string) *examplepb.ABitOfEverything { t.Fatalf("getResp.StatusCode= %d, want %d. resp: %v", got, want, getResp) } var getRestatuspbody examplepb.ABitOfEverything - body, err := ioutil.ReadAll(getResp.Body) + body, err := io.ReadAll(getResp.Body) if err != nil { t.Fatalf("getResp body couldn't be read: %v", err) } @@ -1123,9 +1122,9 @@ func testABELookupNotFound(t *testing.T, port int, useTrailers bool) { } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1409,9 +1408,9 @@ func testAdditionalBindings(t *testing.T, port int) { } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success; i=%d", err, i) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success; i=%d", err, i) return } if got, want := resp.StatusCode, http.StatusOK; got != want { @@ -1528,9 +1527,9 @@ func testABERepeated(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1632,9 +1631,9 @@ func TestUnknownPath(t *testing.T) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1657,9 +1656,9 @@ func TestNotImplemented(t *testing.T) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } if got, want := resp.StatusCode, http.StatusNotImplemented; got != want { @@ -1681,9 +1680,9 @@ func TestInvalidArgument(t *testing.T) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1726,9 +1725,9 @@ func testResponseBody(t *testing.T, port int) { } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Fatalf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Fatalf("io.ReadAll(resp.Body) failed with %v; want success", err) } if got, want := resp.StatusCode, tt.wantStatus; got != want { @@ -1806,9 +1805,9 @@ func testResponseBodies(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1863,9 +1862,9 @@ func testResponseStrings(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1894,9 +1893,9 @@ func testResponseStrings(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -1925,9 +1924,9 @@ func testResponseStrings(t *testing.T, port int) { return } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -2062,9 +2061,9 @@ func testRequestQueryParams(t *testing.T, port int) { } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(resp.Body) failed with %v; want success", err) return } @@ -2293,7 +2292,7 @@ func testNonStandardNames(t *testing.T, port int, method string, jsonBody string t.Fatalf("failed to issue PATCH request: %v", err) } - body, err := ioutil.ReadAll(patchResp.Body) + body, err := io.ReadAll(patchResp.Body) if err != nil { t.Errorf("patchResp body couldn't be read: %v", err) } @@ -2324,9 +2323,9 @@ func testABEExists(t *testing.T, port int) { return } defer cresp.Body.Close() - buf, err := ioutil.ReadAll(cresp.Body) + buf, err := io.ReadAll(cresp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(cresp.Body) failed with %v; want success", err) return } if got, want := cresp.StatusCode, http.StatusOK; got != want { @@ -2415,9 +2414,9 @@ func testABETrace(t *testing.T, port int) { t.Fatal(err) } defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err != nil { - t.Errorf("ioutil.ReadAll(cresp.Body) failed with %v; want success", err) + t.Errorf("io.ReadAll(cresp.Body) failed with %v; want success", err) return } if got, want := resp.StatusCode, http.StatusOK; got != want { diff --git a/internal/codegenerator/parse_req.go b/internal/codegenerator/parse_req.go index ca92d8e9985..65749a65a87 100644 --- a/internal/codegenerator/parse_req.go +++ b/internal/codegenerator/parse_req.go @@ -3,7 +3,6 @@ package codegenerator import ( "fmt" "io" - "io/ioutil" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/pluginpb" @@ -11,13 +10,13 @@ import ( // ParseRequest parses a code generator request from a proto Message. func ParseRequest(r io.Reader) (*pluginpb.CodeGeneratorRequest, error) { - input, err := ioutil.ReadAll(r) + input, err := io.ReadAll(r) if err != nil { - return nil, fmt.Errorf("failed to read code generator request: %v", err) + return nil, fmt.Errorf("failed to read code generator request: %w", err) } req := new(pluginpb.CodeGeneratorRequest) - if err = proto.Unmarshal(input, req); err != nil { - return nil, fmt.Errorf("failed to unmarshal code generator request: %v", err) + if err := proto.Unmarshal(input, req); err != nil { + return nil, fmt.Errorf("failed to unmarshal code generator request: %w", err) } return req, nil } diff --git a/internal/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go index a3ae3b83ad1..ad6cfa1de07 100644 --- a/internal/descriptor/grpc_api_configuration.go +++ b/internal/descriptor/grpc_api_configuration.go @@ -3,7 +3,7 @@ package descriptor import ( "encoding/json" "fmt" - "io/ioutil" + "os" "strings" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig" @@ -64,9 +64,9 @@ func registerHTTPRulesFromGrpcAPIService(registry *Registry, service *apiconfig. // Note that for the purposes of the gateway generator we only consider a subset of all // available features google supports in their service descriptions. func (r *Registry) LoadGrpcAPIServiceFromYAML(yamlFile string) error { - yamlFileContents, err := ioutil.ReadFile(yamlFile) + yamlFileContents, err := os.ReadFile(yamlFile) if err != nil { - return fmt.Errorf("failed to read gRPC API Configuration description from '%v': %v", yamlFile, err) + return fmt.Errorf("failed to read gRPC API Configuration description from %q: %w", yamlFile, err) } service, err := loadGrpcAPIServiceFromYAML(yamlFileContents, yamlFile) diff --git a/internal/descriptor/openapi_configuration.go b/internal/descriptor/openapi_configuration.go index 3487c06d64b..c0a58a671e8 100644 --- a/internal/descriptor/openapi_configuration.go +++ b/internal/descriptor/openapi_configuration.go @@ -3,7 +3,7 @@ package descriptor import ( "encoding/json" "fmt" - "io/ioutil" + "os" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/openapiconfig" "google.golang.org/protobuf/encoding/protojson" @@ -12,9 +12,8 @@ import ( func loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*openapiconfig.OpenAPIConfig, error) { var yamlContents interface{} - err := yaml.Unmarshal(yamlFileContents, &yamlContents) - if err != nil { - return nil, fmt.Errorf("failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) + if err := yaml.Unmarshal(yamlFileContents, &yamlContents); err != nil { + return nil, fmt.Errorf("failed to parse gRPC API Configuration from YAML in %q: %w", yamlSourceLogName, err) } jsonContents, err := json.Marshal(yamlContents) @@ -29,7 +28,7 @@ func loadOpenAPIConfigFromYAML(yamlFileContents []byte, yamlSourceLogName string openapiConfiguration := openapiconfig.OpenAPIConfig{} if err := unmarshaler.Unmarshal(jsonContents, &openapiConfiguration); err != nil { - return nil, fmt.Errorf("failed to parse OpenAPI Configuration from YAML in '%v': %v", yamlSourceLogName, err) + return nil, fmt.Errorf("failed to parse OpenAPI Configuration from YAML in '%v': %w", yamlSourceLogName, err) } return &openapiConfiguration, nil @@ -42,7 +41,7 @@ func registerOpenAPIOptions(registry *Registry, openAPIConfig *openapiconfig.Ope } if err := registry.RegisterOpenAPIOptions(openAPIConfig.OpenapiOptions); err != nil { - return fmt.Errorf("failed to register option in %s: %s", yamlSourceLogName, err) + return fmt.Errorf("failed to register option in %s: %w", yamlSourceLogName, err) } return nil } @@ -51,7 +50,7 @@ func registerOpenAPIOptions(registry *Registry, openAPIConfig *openapiconfig.Ope // and registers the OpenAPI options the given registry. // This must be done after loading the proto file. func (r *Registry) LoadOpenAPIConfigFromYAML(yamlFile string) error { - yamlFileContents, err := ioutil.ReadFile(yamlFile) + yamlFileContents, err := os.ReadFile(yamlFile) if err != nil { return fmt.Errorf("failed to read OpenAPI Configuration description from '%v': %v", yamlFile, err) } diff --git a/protoc-gen-openapiv2/internal/genopenapi/helpers.go b/protoc-gen-openapiv2/internal/genopenapi/helpers.go index 0885be81162..37b328c5575 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/helpers.go +++ b/protoc-gen-openapiv2/internal/genopenapi/helpers.go @@ -14,7 +14,7 @@ func fieldName(k string) string { return strings.ReplaceAll(cases.Title(language.AmericanEnglish).String(k), "-", "_") } -//this method will filter the same fields and return the unique one +// this method will filter the same fields and return the unique one func getUniqueFields(schemaFieldsRequired []string, fieldsRequired []string) []string { var unique []string var index *int diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 7bbd8d643a8..f23b01cf208 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" "math" "net/textproto" "os" @@ -2234,7 +2233,7 @@ func goTemplateComments(comment string, data interface{}, reg *descriptor.Regist tpl, err := template.New("").Funcs(template.FuncMap{ // Allows importing documentation from a file "import": func(name string) string { - file, err := ioutil.ReadFile(name) + file, err := os.ReadFile(name) if err != nil { return err.Error() } diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 3755cd31366..90629721916 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -3,7 +3,6 @@ package runtime_test import ( "context" "io" - "io/ioutil" "net/http" "net/http/httptest" "testing" @@ -104,7 +103,7 @@ func TestForwardResponseStream(t *testing.T) { if h := w.Header.Get("Transfer-Encoding"); h != "chunked" { t.Errorf("ForwardResponseStream missing header chunked") } - body, err := ioutil.ReadAll(w.Body) + body, err := io.ReadAll(w.Body) if err != nil { t.Errorf("Failed to read response body with %v", err) } @@ -238,7 +237,7 @@ func TestForwardResponseStreamCustomMarshaler(t *testing.T) { if h := w.Header.Get("Transfer-Encoding"); h != "chunked" { t.Errorf("ForwardResponseStream missing header chunked") } - body, err := ioutil.ReadAll(w.Body) + body, err := io.ReadAll(w.Body) if err != nil { t.Errorf("Failed to read response body with %v", err) } @@ -302,7 +301,7 @@ func TestForwardResponseMessage(t *testing.T) { if h := w.Header.Get("Content-Type"); h != tt.contentType { t.Errorf("Content-Type %v want %v", h, tt.contentType) } - body, err := ioutil.ReadAll(w.Body) + body, err := io.ReadAll(w.Body) if err != nil { t.Errorf("Failed to read response body with %v", err) } diff --git a/runtime/marshal_proto.go b/runtime/marshal_proto.go index 007f8f1a2c7..521da0f5dca 100644 --- a/runtime/marshal_proto.go +++ b/runtime/marshal_proto.go @@ -1,10 +1,8 @@ package runtime import ( - "io" - "errors" - "io/ioutil" + "io" "google.golang.org/protobuf/proto" ) @@ -38,7 +36,7 @@ func (*ProtoMarshaller) Unmarshal(data []byte, value interface{}) error { // NewDecoder returns a Decoder which reads proto stream from "reader". func (marshaller *ProtoMarshaller) NewDecoder(reader io.Reader) Decoder { return DecoderFunc(func(value interface{}) error { - buffer, err := ioutil.ReadAll(reader) + buffer, err := io.ReadAll(reader) if err != nil { return err } diff --git a/utilities/readerfactory.go b/utilities/readerfactory.go index 6dd3854665f..01d26edae3c 100644 --- a/utilities/readerfactory.go +++ b/utilities/readerfactory.go @@ -3,13 +3,12 @@ package utilities import ( "bytes" "io" - "io/ioutil" ) // IOReaderFactory takes in an io.Reader and returns a function that will allow you to create a new reader that begins // at the start of the stream func IOReaderFactory(r io.Reader) (func() io.Reader, error) { - b, err := ioutil.ReadAll(r) + b, err := io.ReadAll(r) if err != nil { return nil, err } From 1b7515f8ec8fb382cc26ba24abf078578ab8c427 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Sun, 6 Nov 2022 04:00:33 +0300 Subject: [PATCH 1494/1518] runtime pkg cleanup (#2993) --- runtime/context.go | 13 +++++-------- runtime/errors.go | 6 +++--- runtime/fieldmask.go | 3 ++- runtime/handler.go | 16 ++++++++-------- runtime/marshal_proto.go | 3 +-- runtime/mux.go | 10 ++++------ 6 files changed, 23 insertions(+), 28 deletions(-) diff --git a/runtime/context.go b/runtime/context.go index 9b1b81f5292..5ab5b3841da 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -35,11 +35,9 @@ const metadataHeaderBinarySuffix = "-Bin" const xForwardedFor = "X-Forwarded-For" const xForwardedHost = "X-Forwarded-Host" -var ( - // DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound - // header isn't present. If the value is 0 the sent `context` will not have a timeout. - DefaultContextTimeout = 0 * time.Second -) +// DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound +// header isn't present. If the value is 0 the sent `context` will not have a timeout. +var DefaultContextTimeout = 0 * time.Second // malformedHTTPHeaders lists the headers that the gRPC server may reject outright as malformed. // See https://github.com/grpc/grpc-go/pull/4803#issuecomment-986093310 for more context. @@ -106,7 +104,6 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM for _, o := range options { ctx = o(ctx) } - var pairs []string timeout := DefaultContextTimeout if tm := req.Header.Get(metadataGrpcTimeout); tm != "" { var err error @@ -115,7 +112,7 @@ func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcM return nil, nil, status.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm) } } - + var pairs []string for key, vals := range req.Header { key = textproto.CanonicalMIMEHeaderKey(key) for _, val := range vals { @@ -281,8 +278,8 @@ func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) { case 'n': return time.Nanosecond, true default: + return } - return } // isPermanentHTTPHeader checks whether hdr belongs to the list of diff --git a/runtime/errors.go b/runtime/errors.go index 4401c49ac7e..d2bcbb7d2a2 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -70,10 +70,10 @@ func HTTPStatusFromCode(code codes.Code) int { return http.StatusServiceUnavailable case codes.DataLoss: return http.StatusInternalServerError + default: + grpclog.Infof("Unknown gRPC error code: %v", code) + return http.StatusInternalServerError } - - grpclog.Infof("Unknown gRPC error code: %v", code) - return http.StatusInternalServerError } // HTTPError uses the mux-configured error handler. diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 82ab3d277b2..9d9d976f753 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -2,6 +2,7 @@ package runtime import ( "encoding/json" + "errors" "fmt" "io" "sort" @@ -44,7 +45,7 @@ func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.Field // if the item is an object, then enqueue all of its children for k, v := range m { if item.msg == nil { - return nil, fmt.Errorf("JSON structure did not match request type") + return nil, errors.New("JSON structure did not match request type") } fd := getFieldByName(item.msg.Descriptor().Fields(), k) diff --git a/runtime/handler.go b/runtime/handler.go index 72080c50d78..945f3a5ebf3 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -85,12 +85,12 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter) return } - if _, err = w.Write(buf); err != nil { + if _, err := w.Write(buf); err != nil { grpclog.Infof("Failed to send response chunk: %v", err) return } wroteHeader = true - if _, err = w.Write(delimiter); err != nil { + if _, err := w.Write(delimiter); err != nil { grpclog.Infof("Failed to send delimiter chunk: %v", err) return } @@ -207,16 +207,16 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar w.Header().Set("Content-Type", marshaler.ContentType(msg)) w.WriteHeader(HTTPStatusFromCode(st.Code())) } - buf, merr := marshaler.Marshal(msg) - if merr != nil { - grpclog.Infof("Failed to marshal an error: %v", merr) + buf, err := marshaler.Marshal(msg) + if err != nil { + grpclog.Infof("Failed to marshal an error: %v", err) return } - if _, werr := w.Write(buf); werr != nil { - grpclog.Infof("Failed to notify error to client: %v", werr) + if _, err := w.Write(buf); err != nil { + grpclog.Infof("Failed to notify error to client: %v", err) return } - if _, derr := w.Write(delimiter); derr != nil { + if _, err := w.Write(delimiter); err != nil { grpclog.Infof("Failed to send delimiter chunk: %v", err) return } diff --git a/runtime/marshal_proto.go b/runtime/marshal_proto.go index 521da0f5dca..398c780dc22 100644 --- a/runtime/marshal_proto.go +++ b/runtime/marshal_proto.go @@ -51,8 +51,7 @@ func (marshaller *ProtoMarshaller) NewEncoder(writer io.Writer) Encoder { if err != nil { return err } - _, err = writer.Write(buffer) - if err != nil { + if _, err := writer.Write(buffer); err != nil { return err } diff --git a/runtime/mux.go b/runtime/mux.go index 1128592d6d9..8dee173ba3b 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -43,9 +43,7 @@ const ( UnescapingModeDefault = UnescapingModeLegacy ) -var ( - encodedPathSplitter = regexp.MustCompile("(/|%2F)") -) +var encodedPathSplitter = regexp.MustCompile("(/|%2F)") // A HandlerFunc handles a specific pair of path pattern and HTTP method. type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) @@ -106,10 +104,10 @@ type HeaderMatcherFunc func(string) (string, bool) // keys (as specified by the IANA) to gRPC context with grpcgateway- prefix. HTTP headers that start with // 'Grpc-Metadata-' are mapped to gRPC metadata after removing prefix 'Grpc-Metadata-'. func DefaultHeaderMatcher(key string) (string, bool) { - key = textproto.CanonicalMIMEHeaderKey(key) - if isPermanentHTTPHeader(key) { + switch key = textproto.CanonicalMIMEHeaderKey(key); { + case isPermanentHTTPHeader(key): return MetadataPrefix + key, true - } else if strings.HasPrefix(key, MetadataHeaderPrefix) { + case strings.HasPrefix(key, MetadataHeaderPrefix): return key[len(MetadataHeaderPrefix):], true } return "", false From 6bb0fd8edf639cfe893cf2183b35d2c7f3972587 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 09:33:25 +0000 Subject: [PATCH 1495/1518] chore(deps): update slsa-framework/slsa-github-generator action to v1.2.2 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 423cb53e1ef..ff508d13628 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.1 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.2 with: compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163 base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" From 84c9c4bb4fc38df70d167ce6c846e143b68e877b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 19:58:27 +0000 Subject: [PATCH 1496/1518] fix(deps): update google.golang.org/genproto digest to 2d38753 --- go.mod | 2 +- go.sum | 100 ++++++++++++- repositories.bzl | 368 +++++++++++++++++++++++------------------------ 3 files changed, 284 insertions(+), 186 deletions(-) diff --git a/go.mod b/go.mod index bf0937e8877..bddad713c60 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c + google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 3363b1f563e..8b0d042bf17 100644 --- a/go.sum +++ b/go.sum @@ -32,33 +32,45 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -66,19 +78,27 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= @@ -86,23 +106,34 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= @@ -110,80 +141,113 @@ cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1 cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -195,42 +259,59 @@ cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOj cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= @@ -240,30 +321,44 @@ cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -558,6 +653,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -749,6 +845,7 @@ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -859,8 +956,9 @@ google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd h1:1eV6KuDTxraYYsYGWksp1thEGP+8dtX/TINL9h+ppiI= +google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index a103a59f029..74d95c17396 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -936,14 +936,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_accessapproval", importpath = "cloud.google.com/go/accessapproval", - sum = "h1:a3HOTMJn4UJkd9tP5RsbLulZuTo/0BQNBiCyF+M843I=", - version = "v1.4.0", + sum = "h1:/nTivgnV/n1CaAeo+ekGexTYUsKEU9jUVkoY5359+3Q=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_accesscontextmanager", importpath = "cloud.google.com/go/accesscontextmanager", - sum = "h1:k571J6qjHx6aX3Xc2TTuWjnm445gvwqLM9MnU5vl5sM=", - version = "v1.3.0", + sum = "h1:CFhNhU7pcD11cuDkQdrE6PQJgv0EXNKNv06jIzbLlCU=", + version = "v1.4.0", ) go_repository( @@ -962,20 +962,20 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_apigateway", importpath = "cloud.google.com/go/apigateway", - sum = "h1:6ttKca2YZfWXvrQpqtV30sgoweTFiNi4KUJq8NQX9zA=", - version = "v1.3.0", + sum = "h1:IIoXKR7FKrEAQhMTz5hK2wiDz2WNFHS7eVr/L1lE/rM=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_apigeeconnect", importpath = "cloud.google.com/go/apigeeconnect", - sum = "h1:MoA5qGxCEdoTuVptVKTfrVPis5cOtuGiA3I+fQ7Surg=", - version = "v1.3.0", + sum = "h1:AONoTYJviyv1vS4IkvWzq69gEVdvHx35wKXc+e6wjZQ=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_appengine", importpath = "cloud.google.com/go/appengine", - sum = "h1:QhFG5LFVrX37NLkfUpQ3dAR9Gznup0f6PcdPK7UuNgo=", - version = "v1.4.0", + sum = "h1:lmG+O5oaR9xNwaRBwE2XoMhwQHsHql5IoiGr1ptdDwU=", + version = "v1.5.0", ) go_repository( @@ -987,95 +987,95 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_artifactregistry", importpath = "cloud.google.com/go/artifactregistry", - sum = "h1:AwrnS6BpiBZ8qvxEq5IQi8r3+qgI4cMoaFbzxCdrCy4=", - version = "v1.8.0", + sum = "h1:3d0LRAU1K6vfqCahhl9fx2oGHcq+s5gftdix4v8Ibrc=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_asset", importpath = "cloud.google.com/go/asset", - sum = "h1:sMxKnJq59UyrQuA7BZxw5wvMUng/2eLdge5a1OW7p3E=", - version = "v1.9.0", + sum = "h1:aCrlaLGJWTODJX4G56ZYzJefITKEWNfbjjtHSzWpxW0=", + version = "v1.10.0", ) go_repository( name = "com_google_cloud_go_assuredworkloads", importpath = "cloud.google.com/go/assuredworkloads", - sum = "h1:v61vhw4RR2n7jd3CcSNJPEK/OJwXemwD58QHO3nH5g4=", - version = "v1.8.0", + sum = "h1:hhIdCOowsT1GG5eMCIA0OwK6USRuYTou/1ZeNxCSRtA=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_automl", importpath = "cloud.google.com/go/automl", - sum = "h1:mxglGBZ1vDAwoKvNFWnzQElAhpBimmA+MAwiblV0J/U=", - version = "v1.7.0", + sum = "h1:BMioyXSbg7d7xLibn47cs0elW6RT780IUWr42W8rp2Q=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_baremetalsolution", importpath = "cloud.google.com/go/baremetalsolution", - sum = "h1:nOCMDfI/vxCyKnVvA4oo172lMBHnTNhyhfBL3/HXb/s=", - version = "v0.3.0", + sum = "h1:g9KO6SkakcYPcc/XjAzeuUrEOXlYPnMpuiaywYaGrmQ=", + version = "v0.4.0", ) go_repository( name = "com_google_cloud_go_batch", importpath = "cloud.google.com/go/batch", - sum = "h1:wvVjJvoIBCYPEz5vMRkVMi79fEeHQpDiCvVkdRsx/D8=", - version = "v0.3.0", + sum = "h1:1jvEBY55OH4Sd2FxEXQfxGExFWov1A/IaRe+Z5Z71Fw=", + version = "v0.4.0", ) go_repository( name = "com_google_cloud_go_beyondcorp", importpath = "cloud.google.com/go/beyondcorp", - sum = "h1:dPVGvvuSwN7RBYJ/su6BCc7Ymhd6dmL2zuuVF9v2teE=", - version = "v0.2.0", + sum = "h1:w+4kThysgl0JiKshi2MKDCg2NZgOyqOI0wq2eBZyrzA=", + version = "v0.3.0", ) go_repository( name = "com_google_cloud_go_bigquery", importpath = "cloud.google.com/go/bigquery", - sum = "h1:JuTk8po4bCKRwObdT0zLb1K0BGkGHJdtgs2GK3j2Gws=", - version = "v1.42.0", + sum = "h1:u0fvz5ysJBe1jwUPI4LuPwAX+o+6fCUwf3ECeg6eDUQ=", + version = "v1.43.0", ) go_repository( name = "com_google_cloud_go_billing", importpath = "cloud.google.com/go/billing", - sum = "h1:3ANOolJbkUAIo4yDRmKNXpUg9LCJjj1gZWaDe8fbLtQ=", - version = "v1.6.0", + sum = "h1:Xkii76HWELHwBtkQVZvqmSo9GTr0O+tIbRNnMcGdlg4=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_binaryauthorization", importpath = "cloud.google.com/go/binaryauthorization", - sum = "h1:Dtsg+OM81q68H8I6wuhxpECaaCL+EQwRzh1z3Qk/BPU=", - version = "v1.3.0", + sum = "h1:pL70vXWn9TitQYXBWTK2abHl2JHLwkFRjYw6VflRqEA=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_certificatemanager", importpath = "cloud.google.com/go/certificatemanager", - sum = "h1:LqkQLIx//smOvPcRlc7t06iIMMBR5XKa9hDmxYl/+70=", - version = "v1.3.0", + sum = "h1:tzbR4UHBbgsewMWUD93JHi8EBi/gHBoSAcY1/sThFGk=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_channel", importpath = "cloud.google.com/go/channel", - sum = "h1:JXMJPd1FsOmnpAeBp+J/zPPLungzqpsNxtgcfdeVJmg=", - version = "v1.8.0", + sum = "h1:pNuUlZx0Jb0Ts9P312bmNMuH5IiFWIR4RUtLb70Ke5s=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_cloudbuild", importpath = "cloud.google.com/go/cloudbuild", - sum = "h1:nRHAdoqDcgxS8f5/J24+Bom4KPEhlFUB47MF67Qi42Y=", - version = "v1.3.0", + sum = "h1:TAAmCmAlOJ4uNBu6zwAjwhyl/7fLHHxIEazVhr3QBbQ=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_clouddms", importpath = "cloud.google.com/go/clouddms", - sum = "h1:GY1TOZU4fXUfYwm9eUQo3Uv1ocQmDMqLthGeCMMRVyM=", - version = "v1.3.0", + sum = "h1:UhzHIlgFfMr6luVYVNydw/pl9/U5kgtjCMJHnSvoVws=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_cloudtasks", importpath = "cloud.google.com/go/cloudtasks", - sum = "h1:Rk6r+yV11IinyZDG5w42VPX8HwBUWKdgiY2kflJ1mzY=", - version = "v1.7.0", + sum = "h1:faUiUgXjW8yVZ7XMnKHKm1WE4OldPBUWWfIRN/3z1dc=", + version = "v1.8.0", ) go_repository( @@ -1087,14 +1087,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_contactcenterinsights", importpath = "cloud.google.com/go/contactcenterinsights", - sum = "h1:hlcZ1oUQ+uD0koFgPqx+MPjM2022heTA3e5OhyGQYfM=", - version = "v1.3.0", + sum = "h1:tTQLI/ZvguUf9Hv+36BkG2+/PeC8Ol1q4pBW+tgCx0A=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_container", importpath = "cloud.google.com/go/container", - sum = "h1:sju38eJg66Q1SYfjSOb/b0a5GvrCs1cnN3lCsLG4M+A=", - version = "v1.6.0", + sum = "h1:nbEK/59GyDRKKlo1SqpohY1TK8LmJ2XNcvS9Gyom2A0=", + version = "v1.7.0", ) go_repository( @@ -1107,8 +1107,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_datacatalog", importpath = "cloud.google.com/go/datacatalog", - sum = "h1:vYBwR8Sy0jVv6AIWCz37ylpDU7IQm2KgexqzOZePIEc=", - version = "v1.7.0", + sum = "h1:6kZ4RIOW/uT7QWC5SfPfq/G8sYzr/v+UOmOAxy4Z1TE=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_dataflow", @@ -1119,14 +1119,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_dataform", importpath = "cloud.google.com/go/dataform", - sum = "h1:fnwkyzCVcPI/TmBheGgpmK2h+hWUIDHcZBincHRhrQ0=", - version = "v0.4.0", + sum = "h1:vLwowLF2ZB5J5gqiZCzv076lDI/Rd7zYQQFu5XO1PSg=", + version = "v0.5.0", ) go_repository( name = "com_google_cloud_go_datafusion", importpath = "cloud.google.com/go/datafusion", - sum = "h1:KSWJ5rZNzYodtUpPIG8fHTMiFealGSMnEH8buPYRxRU=", - version = "v1.4.0", + sum = "h1:j5m2hjWovTZDTQak4MJeXAR9yN7O+zMfULnjGw/OOLg=", + version = "v1.5.0", ) go_repository( @@ -1138,14 +1138,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_dataplex", importpath = "cloud.google.com/go/dataplex", - sum = "h1:70G+NfNVqLZ1Xur5HUSo+mhsOKHrEaLhDoAVta0zC6Q=", - version = "v1.3.0", + sum = "h1:cNxeA2DiWliQGi21kPRqnVeQ5xFhNoEjPRt1400Pm8Y=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_dataproc", importpath = "cloud.google.com/go/dataproc", - sum = "h1:6l5Np4HcJL56xytV2WrLkGcX4dD9fWupNLorwwFBVZY=", - version = "v1.7.0", + sum = "h1:gVOqNmElfa6n/ccG/QDlfurMWwrK3ezvy2b2eDoCmS0=", + version = "v1.8.0", ) go_repository( @@ -1164,34 +1164,34 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_datastream", importpath = "cloud.google.com/go/datastream", - sum = "h1:jXIZI27wPR+dZ+V0c2eLg3dtIS9ZIVDRxTAYX+w6Sss=", - version = "v1.4.0", + sum = "h1:PgIgbhedBtYBU6POGXFMn2uSl9vpqubc3ewTNdcU8Mk=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_deploy", importpath = "cloud.google.com/go/deploy", - sum = "h1:xJVwJtJcUPW0opljx4hmox2zPhwVT6uSJNf/2Uw2YmQ=", - version = "v1.4.0", + sum = "h1:kI6dxt8Ml0is/x7YZjLveTvR7YPzXAUD/8wQZ2nH5zA=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_dialogflow", importpath = "cloud.google.com/go/dialogflow", - sum = "h1:hz1Sz2AXYnKsKcfg4qSbaNQT83SocTUFpHa+FiQtXqs=", - version = "v1.18.0", + sum = "h1:HYHVOkoxQ9bSfNIelSZYNAtUi4CeSrCnROyOsbOqPq8=", + version = "v1.19.0", ) go_repository( name = "com_google_cloud_go_dlp", importpath = "cloud.google.com/go/dlp", - sum = "h1:XMxKeYF9PluIiGFOpWIy9Vbm0p7wZiz+PmSQENCh+yw=", - version = "v1.6.0", + sum = "h1:9I4BYeJSVKoSKgjr70fLdRDumqcUeVmHV4fd5f9LR6Y=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_documentai", importpath = "cloud.google.com/go/documentai", - sum = "h1:z6qGScSr29w19ZdMkoWnE94BwkRqEYS1zo1XnarlLoY=", - version = "v1.9.0", + sum = "h1:jfq09Fdjtnpnmt/MLyf6A3DM3ynb8B2na0K+vSXvpFM=", + version = "v1.10.0", ) go_repository( name = "com_google_cloud_go_domains", @@ -1209,20 +1209,20 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_essentialcontacts", importpath = "cloud.google.com/go/essentialcontacts", - sum = "h1:AOuaOcGaL1Z1Hy5L4WjZHGYonI3jyNmjVyxB3UsbfX8=", - version = "v1.3.0", + sum = "h1:b6csrQXCHKQmfo9h3dG/pHyoEh+fQG1Yg78a53LAviY=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_eventarc", importpath = "cloud.google.com/go/eventarc", - sum = "h1:yzOkQ4EakJ5ZHjqPVMevvQx2T9ZDX9PAB1kY1GpLivU=", - version = "v1.7.0", + sum = "h1:AgCqrmMMIcel5WWKkzz5EkCUKC3Rl5LNMMYsS+LvsI0=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_filestore", importpath = "cloud.google.com/go/filestore", - sum = "h1:EOLyFUmQTPu1BFaPNDp33D4aVCQuM66agwGOIoMe+uw=", - version = "v1.3.0", + sum = "h1:yjKOpzvqtDmL5AXbKttLc8j0hL20kuC1qPdy5HPcxp0=", + version = "v1.4.0", ) go_repository( @@ -1234,20 +1234,20 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_functions", importpath = "cloud.google.com/go/functions", - sum = "h1:aMns6pr/uwRSCUO4C4aZRwl3Ii2EVytOz1qb3/+Cl6c=", - version = "v1.8.0", + sum = "h1:35tgv1fQOtvKqH/uxJMzX3w6usneJ0zXpsFr9KAVhNE=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_gaming", importpath = "cloud.google.com/go/gaming", - sum = "h1:NNdzlx3QIQJ3n07YA7hSM0mZfvjLk37IPsQFFPdJGzY=", - version = "v1.7.0", + sum = "h1:97OAEQtDazAJD7yh/kvQdSCQuTKdR0O+qWAJBZJ4xiA=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_gkebackup", importpath = "cloud.google.com/go/gkebackup", - sum = "h1:i87EQ2xU6wGLmGtx61eZPgmG34UkFj/4sQdZJVm77cI=", - version = "v0.2.0", + sum = "h1:4K+jiv4ocqt1niN8q5Imd8imRoXBHTrdnJVt/uFFxF4=", + version = "v0.3.0", ) go_repository( @@ -1265,51 +1265,51 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_gkemulticloud", importpath = "cloud.google.com/go/gkemulticloud", - sum = "h1:YmwWEfTvLDlzloheLf0khs0Zm0n5f1UkmyWg/9TkyBM=", - version = "v0.3.0", + sum = "h1:8F1NhJj8ucNj7lK51UZMtAjSWTgP1zO18XF6vkfiPPU=", + version = "v0.4.0", ) go_repository( name = "com_google_cloud_go_gsuiteaddons", importpath = "cloud.google.com/go/gsuiteaddons", - sum = "h1:ARyw0SXZ8pL32f73qq+rvfBRUJhjaeaPVKU5ezCWXw0=", - version = "v1.3.0", + sum = "h1:TGT2oGmO5q3VH6SjcrlgPUWI0njhYv4kywLm6jag0to=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_iam", importpath = "cloud.google.com/go/iam", - sum = "h1:nsqQC88kT5Iwlm4MeNGTpfMWddp6NB/UOLFTH6m1QfQ=", - version = "v0.6.0", + sum = "h1:k4MuwOsS7zGJJ+QfZ5vBK8SgHBAvYN/23BWsiihJ1vs=", + version = "v0.7.0", ) go_repository( name = "com_google_cloud_go_iap", importpath = "cloud.google.com/go/iap", - sum = "h1:+qMHlGyocHc3WFAK5U+COzR8/yNocwRbtfpj1/ROyks=", - version = "v1.4.0", + sum = "h1:BGEXovwejOCt1zDk8hXq0bOhhRu9haXKWXXXp2B4wBM=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_ids", importpath = "cloud.google.com/go/ids", - sum = "h1:QG0XBQPjp+EAhTMyIbzy3BdE6z50jUPjjb8t4pnFU+M=", - version = "v1.1.0", + sum = "h1:LncHK4HHucb5Du310X8XH9/ICtMwZ2PCfK0ScjWiJoY=", + version = "v1.2.0", ) go_repository( name = "com_google_cloud_go_iot", importpath = "cloud.google.com/go/iot", - sum = "h1:thTIvR3CovF4c2mY8H9A/vantRJADy2ih5/S1FIZzcE=", - version = "v1.3.0", + sum = "h1:Y9+oZT9jD4GUZzORXTU45XsnQrhxmDT+TFbPil6pRVQ=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_kms", importpath = "cloud.google.com/go/kms", - sum = "h1:uc58n3b/n/F2yDMJzHMbXORkJSh3fzO4/+jju6eR7Zg=", - version = "v1.5.0", + sum = "h1:OWRZzrPmOZUzurjI2FBGtgY2mB1WaJkqhw6oIwSj0Yg=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_language", importpath = "cloud.google.com/go/language", - sum = "h1:332UUOZdk3m496ZBCoR/IVcdpKB7HHXHJ/MRmV5oYog=", - version = "v1.7.0", + sum = "h1:3Wa+IUMamL4JH3Zd3cDZUHpwyqplTACt6UZKRD2eCL4=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_lifesciences", @@ -1320,14 +1320,14 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_longrunning", importpath = "cloud.google.com/go/longrunning", - sum = "h1:y50CXG4j0+qvEukslYFBCrzaXX0qpFbBzc3PchSu/LE=", - version = "v0.1.1", + sum = "h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs=", + version = "v0.3.0", ) go_repository( name = "com_google_cloud_go_managedidentities", importpath = "cloud.google.com/go/managedidentities", - sum = "h1:DjXiirnpfYFZVznSjZp56nRVtEMkRqOkPSzv3Kdog+8=", - version = "v1.3.0", + sum = "h1:3Kdajn6X25yWQFhFCErmKSYTSvkEd3chJROny//F1A0=", + version = "v1.4.0", ) go_repository( @@ -1339,33 +1339,33 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_memcache", importpath = "cloud.google.com/go/memcache", - sum = "h1:l0/5n8tYsccs7WKs6Io4i4TpEbYfjjNbZFAiUkFiNF8=", - version = "v1.6.0", + sum = "h1:yLxUzJkZVSH2kPaHut7k+7sbIBFpvSh1LW9qjM2JDjA=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_metastore", importpath = "cloud.google.com/go/metastore", - sum = "h1:tWzZ+6StVuoMhUldBB6nxCnxJZvt6Lvcl2KkH2NDzuE=", - version = "v1.7.0", + sum = "h1:3KcShzqWdqxrDEXIBWpYJpOOrgpDj+HlBi07Grot49Y=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_monitoring", importpath = "cloud.google.com/go/monitoring", - sum = "h1:zK12aN/jzLRzrRXopEOUaG6kvuF6WJmlv1mXn1L7a6E=", - version = "v1.7.0", + sum = "h1:c9riaGSPQ4dUKWB+M1Fl0N+iLxstMbCktdEwYSPGDvA=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_networkconnectivity", importpath = "cloud.google.com/go/networkconnectivity", - sum = "h1:dOuHLqgOBPfeOg3pxFTFh26r4U7STEt2cpwrY4tXOHs=", - version = "v1.6.0", + sum = "h1:BVdIKaI68bihnXGdCVL89Jsg9kq2kg+II30fjVqo62E=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_networkmanagement", importpath = "cloud.google.com/go/networkmanagement", - sum = "h1:BVv0NDQYy+dwOgd/zeNns/WQplmpsLStWoQqkI72Bso=", - version = "v1.4.0", + sum = "h1:mDHA3CDW00imTvC5RW6aMGsD1bH+FtKwZm/52BxaiMg=", + version = "v1.5.0", ) go_repository( @@ -1377,39 +1377,39 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_notebooks", importpath = "cloud.google.com/go/notebooks", - sum = "h1:zGHnJXlskHACBeiXXIe2gC5nMPos38ofT8UeLt3GNfQ=", - version = "v1.4.0", + sum = "h1:AC8RPjNvel3ExgXjO1YOAz+teg9+j+89TNxa7pIZfww=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_optimization", importpath = "cloud.google.com/go/optimization", - sum = "h1:rdvdT5Ha+ji5U2TMTCg+xpBSBE6Hc5f5vRejf1sO88o=", - version = "v1.1.0", + sum = "h1:7PxOq9VTT7TMib/6dMoWpMvWS2E4dJEvtYzjvBreaec=", + version = "v1.2.0", ) go_repository( name = "com_google_cloud_go_orchestration", importpath = "cloud.google.com/go/orchestration", - sum = "h1:VPpBBR/MdrFiMXNoGG+IliEzSmF+sgTRmlPb3SA4+x8=", - version = "v1.3.0", + sum = "h1:39d6tqvNjd/wsSub1Bn4cEmrYcet5Ur6xpaN+SxOxtY=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_orgpolicy", importpath = "cloud.google.com/go/orgpolicy", - sum = "h1:RZNIHYRfKVhK/ZHmpVAjpltK7QovtAOwTSntf9pl1xE=", - version = "v1.4.0", + sum = "h1:erF5PHqDZb6FeFrUHiYj2JK2BMhsk8CyAg4V4amJ3rE=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_osconfig", importpath = "cloud.google.com/go/osconfig", - sum = "h1:Bu+46U3mzvQ1X+fAX+f2eZaiOZw3LekD9sze/i4f7+w=", - version = "v1.9.0", + sum = "h1:NO0RouqCOM7M2S85Eal6urMSSipWwHU8evzwS+siqUI=", + version = "v1.10.0", ) go_repository( name = "com_google_cloud_go_oslogin", importpath = "cloud.google.com/go/oslogin", - sum = "h1:hTBDUARxmYv/qcVPI3DikVNuhCrleuJsLUjlrETKhVo=", - version = "v1.6.0", + sum = "h1:pKGDPfeZHDybtw48WsnVLjoIPMi9Kw62kUE5TXCLCN4=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_phishingprotection", @@ -1420,8 +1420,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_policytroubleshooter", importpath = "cloud.google.com/go/policytroubleshooter", - sum = "h1:sBeOCvjJFNT/YRtXpWAX08ww70fcRHKqjVGULZ4Vr0E=", - version = "v1.3.0", + sum = "h1:NQklJuOUoz1BPP+Epjw81COx7IISWslkZubz/1i0UN8=", + version = "v1.4.0", ) go_repository( @@ -1440,8 +1440,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recaptchaenterprise_v2", importpath = "cloud.google.com/go/recaptchaenterprise/v2", - sum = "h1:JSN8PT1XCAv2Gx01QkVC0xIjnabwawVPCp8l7VPBU6Q=", - version = "v2.4.0", + sum = "h1:UqzFfb/WvhwXGDF1eQtdHLrmni+iByZXY4h3w9Kdyv8=", + version = "v2.5.0", ) go_repository( name = "com_google_cloud_go_recommendationengine", @@ -1452,103 +1452,103 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_recommender", importpath = "cloud.google.com/go/recommender", - sum = "h1:A50LDNE2+IJuvTCLHOSZM3/J5vZsmd4RcUm2Blh04m0=", - version = "v1.7.0", + sum = "h1:9kMZQGeYfcOD/RtZfcNKGKtoex3DdoB4zRgYU/WaIwE=", + version = "v1.8.0", ) go_repository( name = "com_google_cloud_go_redis", importpath = "cloud.google.com/go/redis", - sum = "h1:oMeAQhZG9FJbsnUQGCZYDapWNPx2flDrYxxrAi3WdWU=", - version = "v1.9.0", + sum = "h1:/zTwwBKIAD2DEWTrXZp8WD9yD/gntReF/HkPssVYd0U=", + version = "v1.10.0", ) go_repository( name = "com_google_cloud_go_resourcemanager", importpath = "cloud.google.com/go/resourcemanager", - sum = "h1:lJLboEWuUMexWSpW48DRMnDM6LYbtu2pN5q9YBV3fM8=", - version = "v1.3.0", + sum = "h1:NDao6CHMwEZIaNsdWy+tuvHaavNeGP06o1tgrR0kLvU=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_resourcesettings", importpath = "cloud.google.com/go/resourcesettings", - sum = "h1:Tr87MO4TbLCKkh/+8Vrx+NL0bxWiQNLOJL8dan11L7k=", - version = "v1.3.0", + sum = "h1:eTzOwB13WrfF0kuzG2ZXCfB3TLunSHBur4s+HFU6uSM=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_retail", importpath = "cloud.google.com/go/retail", - sum = "h1:wIvFcq5dgo8mnrmEFVf//yUiLzqUHGF1fyqIwiN+R6Q=", - version = "v1.10.0", + sum = "h1:N9fa//ecFUOEPsW/6mJHfcapPV0wBSwIUwpVZB7MQ3o=", + version = "v1.11.0", ) go_repository( name = "com_google_cloud_go_run", importpath = "cloud.google.com/go/run", - sum = "h1:ojwQUZe8P1xAcI8H91HJC/NkxNcKmb9/a9CZpkkZJzE=", - version = "v0.2.0", + sum = "h1:AWPuzU7Xtaj3Jf+QarDWIs6AJ5hM1VFQ+F6Q+VZ6OT4=", + version = "v0.3.0", ) go_repository( name = "com_google_cloud_go_scheduler", importpath = "cloud.google.com/go/scheduler", - sum = "h1:iwMNmT8b2LhkcsHYYDCIxrBAVCklbbbbXvbfVLMLvX4=", - version = "v1.6.0", + sum = "h1:K/mxOewgHGeKuATUJNGylT75Mhtjmx1TOkKukATqMT8=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_secretmanager", importpath = "cloud.google.com/go/secretmanager", - sum = "h1:4wYWL2t10q+xUtFFS0QuWlqwQguMrwC6FDpjtMM6cUI=", - version = "v1.8.0", + sum = "h1:xE6uXljAC1kCR8iadt9+/blg1fvSbmenlsDN4fT9gqw=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_security", importpath = "cloud.google.com/go/security", - sum = "h1:o9frPOtXW2f4zMlw4SYPE42LRz/hhrYVWtAEUkPvyA4=", - version = "v1.9.0", + sum = "h1:KSKzzJMyUoMRQzcz7azIgqAUqxo7rmQ5rYvimMhikqg=", + version = "v1.10.0", ) go_repository( name = "com_google_cloud_go_securitycenter", importpath = "cloud.google.com/go/securitycenter", - sum = "h1:Fg6hwy3Of6Q9IvBC/P0pppkUvKHmkRNy++K4/g+PZAw=", - version = "v1.15.0", + sum = "h1:QTVtk/Reqnx2bVIZtJKm1+mpfmwRwymmNvlaFez7fQY=", + version = "v1.16.0", ) go_repository( name = "com_google_cloud_go_servicecontrol", importpath = "cloud.google.com/go/servicecontrol", - sum = "h1:jyC94OAVsoHBDfpInk66a5ZQJZPgRzSWHQX3OFfnNqE=", - version = "v1.4.0", + sum = "h1:ImIzbOu6y4jL6ob65I++QzvqgFaoAKgHOG+RU9/c4y8=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_servicedirectory", importpath = "cloud.google.com/go/servicedirectory", - sum = "h1:6lhsfUhTmHsiCEdmJd8mBvOO9FdDeZSzUOlGl14x/bw=", - version = "v1.6.0", + sum = "h1:f7M8IMcVzO3T425AqlZbP3yLzeipsBHtRza8vVFYMhQ=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_servicemanagement", importpath = "cloud.google.com/go/servicemanagement", - sum = "h1:uqHy7K4df2Z+WwJUhaGMXOdwhZu03fCHbD7xRP3+B8M=", - version = "v1.4.0", + sum = "h1:TpkCO5M7dhKSy1bKUD9o/sSEW/U1Gtx7opA1fsiMx0c=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_serviceusage", importpath = "cloud.google.com/go/serviceusage", - sum = "h1:meJ9kF0A9F9f7ztBuyI7tMPThCmulzCI6tAiYtLmgZU=", - version = "v1.3.0", + sum = "h1:b0EwJxPJLpavSljMQh0RcdHsUrr5DQ+Nelt/3BAs5ro=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_shell", importpath = "cloud.google.com/go/shell", - sum = "h1:5kEngDPazPYCyXJyDSgxu8cm4rhC8zgw90IxebjAFaM=", - version = "v1.3.0", + sum = "h1:b1LFhFBgKsG252inyhtmsUUZwchqSz3WTvAIf3JFo4g=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_speech", importpath = "cloud.google.com/go/speech", - sum = "h1:j0SMkg35JKbVq185AR4mBR2q0ARFa/CO3g7Mkg35ZY0=", - version = "v1.8.0", + sum = "h1:yK0ocnFH4Wsf0cMdUyndJQ/hPv02oTJOxzi6AgpBy4s=", + version = "v1.9.0", ) go_repository( @@ -1560,90 +1560,90 @@ def go_repositories(): go_repository( name = "com_google_cloud_go_storagetransfer", importpath = "cloud.google.com/go/storagetransfer", - sum = "h1:Xwtox/X2Jl3ariFevzZjzMlsvp3znzvryYZVxMwfZ9g=", - version = "v1.5.0", + sum = "h1:fUe3OydbbvHcAYp07xY+2UpH4AermGbmnm7qdEj3tGE=", + version = "v1.6.0", ) go_repository( name = "com_google_cloud_go_talent", importpath = "cloud.google.com/go/talent", - sum = "h1:+hCSx3Ua8RomkTi8LpZ7dJdSVciWRod7rUlqUDnRVJA=", - version = "v1.3.0", + sum = "h1:MrekAGxLqAeAol4Sc0allOVqUGO8j+Iim8NMvpiD7tM=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_texttospeech", importpath = "cloud.google.com/go/texttospeech", - sum = "h1:m0TASV/2VF1lVmXe+VDIur6rbf2gJeAKvnm27lBCg4g=", - version = "v1.4.0", + sum = "h1:ccPiHgTewxgyAeCWgQWvZvrLmbfQSFABTMAfrSPLPyY=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_tpu", importpath = "cloud.google.com/go/tpu", - sum = "h1:AH8Q8iwRW96Jt7EsuxpxOoVMBjuo+bau9yYxdO6xPY8=", - version = "v1.3.0", + sum = "h1:ztIdKoma1Xob2qm6QwNh4Xi9/e7N3IfvtwG5AcNsj1g=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_trace", importpath = "cloud.google.com/go/trace", - sum = "h1:YmCusGVDe0scOkHKi+y/GgBZlwQjHybtQHV12AfJEgo=", - version = "v1.3.0", + sum = "h1:qO9eLn2esajC9sxpqp1YKX37nXC3L4BfGnPS0Cx9dYo=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_translate", importpath = "cloud.google.com/go/translate", - sum = "h1:uxcD/O79CBRTXN0pOaETVvgyP8tM6biRqG0aVXOWWbs=", - version = "v1.3.0", + sum = "h1:AOYOH3MspzJ/bH1YXzB+xTE8fMpn3mwhLjugwGXvMPI=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_video", importpath = "cloud.google.com/go/video", - sum = "h1:sTtr2Bn0c229zODjrFmRhu5x/FHT921aBBPG51IxExE=", - version = "v1.8.0", + sum = "h1:ttlvO4J5c1VGq6FkHqWPD/aH6PfdxujHt+muTJlW1Zk=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_videointelligence", importpath = "cloud.google.com/go/videointelligence", - sum = "h1:uwarOUvggPELA1Ihen1sDBeyLd2fbIBoiphlMgkFg24=", - version = "v1.8.0", + sum = "h1:RPFgVVXbI2b5vnrciZjtsUgpNKVtHO/WIyXUhEfuMhA=", + version = "v1.9.0", ) go_repository( name = "com_google_cloud_go_vision_v2", importpath = "cloud.google.com/go/vision/v2", - sum = "h1:V7mNTkweq+C+1GquSQiCszoMvurbzoZkqtGcbkzdaO8=", - version = "v2.4.0", + sum = "h1:TQHxRqvLMi19azwm3qYuDbEzZWmiKJNTpGbkNsfRCik=", + version = "v2.5.0", ) go_repository( name = "com_google_cloud_go_vmmigration", importpath = "cloud.google.com/go/vmmigration", - sum = "h1:pGVbZnqcHs61mOckeZuatk5aCujGpQlG4EnF2+3jvOE=", - version = "v1.2.0", + sum = "h1:A2Tl2ZmwMRpvEmhV2ibISY85fmQR+Y5w9a0PlRz5P3s=", + version = "v1.3.0", ) go_repository( name = "com_google_cloud_go_vpcaccess", importpath = "cloud.google.com/go/vpcaccess", - sum = "h1:/PHFPPMOO9M7X00pq0Tn+/ScVDVJ2AATn+78tM7is1M=", - version = "v1.4.0", + sum = "h1:woHXXtnW8b9gLFdWO9HLPalAddBQ9V4LT+1vjKwR3W8=", + version = "v1.5.0", ) go_repository( name = "com_google_cloud_go_webrisk", importpath = "cloud.google.com/go/webrisk", - sum = "h1:5Y961bETa0Nja4Ej/NdDDz1rhCKf1zwAo22lzJy23Qs=", - version = "v1.6.0", + sum = "h1:ypSnpGlJnZSXbN9a13PDmAYvVekBLnGKxQ3Q9SMwnYY=", + version = "v1.7.0", ) go_repository( name = "com_google_cloud_go_websecurityscanner", importpath = "cloud.google.com/go/websecurityscanner", - sum = "h1:rkU8GGJ3GY/FoyhAM/tyZA4eNSoNmcIoY+oQkPGBhSc=", - version = "v1.3.0", + sum = "h1:y7yIFg/h/mO+5Y5aCOtVAnpGUOgqCH5rXQ2Oc8Oq2+g=", + version = "v1.4.0", ) go_repository( name = "com_google_cloud_go_workflows", importpath = "cloud.google.com/go/workflows", - sum = "h1:las2VwuMdEytyyDhTLEKORtig48dhOViDd1U4RSIsr8=", - version = "v1.8.0", + sum = "h1:7Chpin9p50NTU8Tb7qk+I11U/IwVXmDhEoSsdccvInE=", + version = "v1.9.0", ) go_repository( @@ -1750,8 +1750,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo=", - version = "v0.0.0-20221027153422-115e99e71e1c", + sum = "h1:1eV6KuDTxraYYsYGWksp1thEGP+8dtX/TINL9h+ppiI=", + version = "v0.0.0-20221107162902-2d387536bcdd", ) go_repository( name = "org_golang_google_grpc", From 9357d1d60023cdcbafd0f5c537f410065d57559c Mon Sep 17 00:00:00 2001 From: Jonathan Ingram Date: Tue, 8 Nov 2022 16:06:39 +1100 Subject: [PATCH 1497/1518] mux: fix path components mutation (#3001) * Add verb test case for mux * avoid mutating path components inside for loop Co-authored-by: Chia-Chun Lien --- runtime/mux.go | 48 ++++++++++++++++++++++++++------------------- runtime/mux_test.go | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 20 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 8dee173ba3b..9fb2960d959 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -320,17 +320,6 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { path = r.URL.RawPath } - var components []string - // since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on "%2F" - // in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the - // path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default - // behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved - if s.unescapingMode == UnescapingModeAllCharacters { - components = encodedPathSplitter.Split(path[1:], -1) - } else { - components = strings.Split(path[1:], "/") - } - if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { r.Method = strings.ToUpper(override) if err := r.ParseForm(); err != nil { @@ -341,7 +330,18 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } - lastComponent := components[len(components)-1] + var pathComponents []string + // since in UnescapeModeLegacy, the URL will already have been fully unescaped, if we also split on "%2F" + // in this escaping mode we would be double unescaping but in UnescapingModeAllCharacters, we still do as the + // path is the RawPath (i.e. unescaped). That does mean that the behavior of this function will change its default + // behavior when the UnescapingModeDefault gets changed from UnescapingModeLegacy to UnescapingModeAllExceptReserved + if s.unescapingMode == UnescapingModeAllCharacters { + pathComponents = encodedPathSplitter.Split(path[1:], -1) + } else { + pathComponents = strings.Split(path[1:], "/") + } + + lastPathComponent := pathComponents[len(pathComponents)-1] for _, h := range s.handlers[r.Method] { // If the pattern has a verb, explicitly look for a suffix in the last @@ -357,19 +357,23 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { patVerb := h.pat.Verb() idx := -1 - if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) { - idx = len(lastComponent) - len(patVerb) - 1 + if patVerb != "" && strings.HasSuffix(lastPathComponent, ":"+patVerb) { + idx = len(lastPathComponent) - len(patVerb) - 1 } if idx == 0 { _, outboundMarshaler := MarshalerForRequest(s, r) s.routingErrorHandler(ctx, s, outboundMarshaler, w, r, http.StatusNotFound) return } + + comps := make([]string, len(pathComponents)) + copy(comps, pathComponents) + if idx > 0 { - components[len(components)-1], verb = lastComponent[:idx], lastComponent[idx+1:] + comps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:] } - pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) + pathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode) if err != nil { var mse MalformedSequenceError if ok := errors.As(err, &mse); ok { @@ -396,14 +400,18 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { patVerb := h.pat.Verb() idx := -1 - if patVerb != "" && strings.HasSuffix(lastComponent, ":"+patVerb) { - idx = len(lastComponent) - len(patVerb) - 1 + if patVerb != "" && strings.HasSuffix(lastPathComponent, ":"+patVerb) { + idx = len(lastPathComponent) - len(patVerb) - 1 } + + comps := make([]string, len(pathComponents)) + copy(comps, pathComponents) + if idx > 0 { - components[len(components)-1], verb = lastComponent[:idx], lastComponent[idx+1:] + comps[len(comps)-1], verb = lastPathComponent[:idx], lastPathComponent[idx+1:] } - pathParams, err := h.pat.MatchAndEscape(components, verb, s.unescapingMode) + pathParams, err := h.pat.MatchAndEscape(comps, verb, s.unescapingMode) if err != nil { var mse MalformedSequenceError if ok := errors.As(err, &mse); ok { diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 06bba472f88..a4e709a2004 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -478,6 +478,48 @@ func TestMuxServeHTTP(t *testing.T) { unescapingMode: runtime.UnescapingModeAllCharacters, respContent: "POST /api/v1/{name=organizations/*}:action", }, + { + patterns: []stubPattern{ + { + method: "POST", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpLitPush), 1, + int(utilities.OpLitPush), 2, + }, + pool: []string{"api", "v1", "organizations"}, + verb: "verb", + }, + { + method: "POST", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpLitPush), 1, + int(utilities.OpLitPush), 2, + }, + pool: []string{"api", "v1", "organizations"}, + verb: "", + }, + { + method: "POST", + ops: []int{ + int(utilities.OpLitPush), 0, + int(utilities.OpLitPush), 1, + int(utilities.OpLitPush), 2, + }, + pool: []string{"api", "v1", "dummies"}, + verb: "verb", + }, + }, + reqMethod: "POST", + reqPath: "/api/v1/organizations:verb", + headers: map[string]string{ + "Content-Type": "application/json", + }, + respStatus: http.StatusOK, + unescapingMode: runtime.UnescapingModeAllCharacters, + respContent: "POST /api/v1/organizations:verb", + }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { var opts []runtime.ServeMuxOption From 765c9b7140a7d378816a3b9cb389f403e102c834 Mon Sep 17 00:00:00 2001 From: stomy13 <48572568+stomy13@users.noreply.github.com> Date: Tue, 8 Nov 2022 14:22:00 +0900 Subject: [PATCH 1498/1518] fix: set consumes definition per operation (#2995) * fix: set consumes definition per operation * add an example of setting the consumes at the method level * fix: implement OverwriteRequestContentType method --- .../internal/clients/abe/api/swagger.yaml | 40 ++ .../abe/api_a_bit_of_everything_service.go | 157 +++++ .../proto/examplepb/a_bit_of_everything.pb.go | 553 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 85 +++ .../proto/examplepb/a_bit_of_everything.proto | 9 + .../a_bit_of_everything.swagger.json | 59 ++ .../examplepb/a_bit_of_everything_grpc.pb.go | 36 ++ .../internal/server/a_bit_of_everything.go | 4 + .../internal/genopenapi/template.go | 5 + .../internal/genopenapi/template_test.go | 10 +- .../internal/genopenapi/types.go | 1 + 11 files changed, 688 insertions(+), 271 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 979d74dee97..8f379132e23 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -4499,6 +4499,46 @@ paths: description: "An unexpected error response." schema: $ref: "#/definitions/rpcStatus" + /v2/example/overwriterequestcontenttype: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_OverwriteRequestContentType" + consumes: + - "application/x-bar-mime" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbBody" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + type: "object" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + 500: + description: "Server error" + schema: + $ref: "#/definitions/examplepbErrorResponse" + default: + description: "An unexpected error response." + schema: + $ref: "#/definitions/rpcStatus" /v2/example/overwriteresponsecontenttype: get: tags: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 2beea8bded8..4c4ecc9b352 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -4961,6 +4961,163 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceLookup(ctx co return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param body + +@return interface{} +*/ +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceOverwriteRequestContentType(ctx context.Context, body ExamplepbBody) (interface{}, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue interface{} + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/overwriterequestcontenttype" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/x-bar-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 500 { + var v ExamplepbErrorResponse + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RpcStatus + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 083808d9d15..cd02596624c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -2263,7 +2263,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x65, 0x5f, 0x64, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x11, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x30, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0x96, 0x36, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x65, 0x5f, 0x66, 0x10, 0x01, 0x32, 0xd3, 0x37, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, @@ -2594,238 +2594,249 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, - 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, - 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, - 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, - 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, - 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, + 0x12, 0xba, 0x01, 0x0a, 0x1b, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x4d, + 0x92, 0x41, 0x18, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x78, 0x2d, 0x62, 0x61, 0x72, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x9b, 0x01, + 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, + 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x50, 0x61, 0x74, 0x68, 0x45, + 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x94, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x33, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x8b, 0x01, + 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, - 0x76, 0x33, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x12, 0x8b, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, - 0x01, 0x0a, 0x06, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x06, + 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, 0x45, 0x41, 0x44, + 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, + 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x12, 0x26, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, - 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x42, 0x2e, 0x0a, 0x04, 0x48, - 0x45, 0x41, 0x44, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xab, 0x01, 0x0a, 0x14, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x39, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x42, 0x31, 0x0a, 0x07, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x53, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, - 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, - 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x31, 0x42, 0x2f, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x12, 0x26, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x74, 0x4f, 0x6e, 0x65, + 0x6f, 0x66, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6e, 0x75, + 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0xa9, 0x01, + 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, 0x66, - 0x45, 0x6e, 0x75, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x0c, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x65, 0x6e, 0x75, 0x6d, - 0x12, 0xa9, 0x01, 0x0a, 0x17, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x2e, 0x67, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, + 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, + 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, + 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, + 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, + 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, 0x6e, 0x61, 0x6b, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, + 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x6b, + 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbf, 0x01, 0x92, - 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, - 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, - 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0xd5, 0x01, 0x0a, 0x10, 0x53, - 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x40, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, - 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x53, 0x6e, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, - 0x68, 0x6f, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x7d, 0x42, 0xd5, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x6e, + 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x73, 0x6e, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x77, 0x68, 0x6f, 0x7d, + 0x2f, 0x7b, 0x77, 0x68, 0x61, 0x74, 0x7d, 0x2f, 0x7b, 0x77, 0x68, 0x65, 0x72, 0x65, 0x7d, 0x42, + 0xd5, 0x0c, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, + 0x41, 0x84, 0x0c, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, + 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, + 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, + 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x92, 0x41, 0x84, 0x0c, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, - 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, - 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, + 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, + 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, + 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, + 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, + 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, + 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, + 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, + 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, + 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x9b, 0x02, + 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x10, 0x58, 0x2d, + 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x64, 0x12, 0xaa, + 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x06, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, 0x26, 0x22, 0x32, + 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, 0x34, 0x39, 0x30, + 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, 0x34, 0x33, 0x31, + 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, + 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x34, + 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x38, 0x39, 0x41, + 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, 0x30, + 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, 0x03, 0x0a, 0xaa, + 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, + 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, + 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, + 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, + 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, 0x0a, 0x09, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xd6, 0x01, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, + 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, + 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, + 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x6a, 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x14, 0x45, + 0x63, 0x68, 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74, 0x72, 0x61, 0x69, 0x74, 0x54, 0x61, + 0x67, 0x12, 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, + 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, - 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, - 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, - 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, - 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, - 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, - 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, - 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x52, 0x9b, 0x02, 0x0a, 0x03, 0x35, 0x30, 0x30, 0x12, 0x93, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x3f, 0x1a, 0x3d, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbf, 0x01, 0x0a, - 0x10, 0x58, 0x2d, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x49, - 0x64, 0x12, 0xaa, 0x01, 0x0a, 0x2b, 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x12, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x32, - 0x26, 0x22, 0x32, 0x34, 0x33, 0x38, 0x61, 0x63, 0x33, 0x63, 0x2d, 0x33, 0x37, 0x65, 0x62, 0x2d, - 0x34, 0x39, 0x30, 0x32, 0x2d, 0x61, 0x64, 0x65, 0x66, 0x2d, 0x65, 0x64, 0x31, 0x36, 0x62, 0x34, - 0x34, 0x33, 0x31, 0x30, 0x33, 0x30, 0x22, 0x6a, 0x45, 0x5e, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, - 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, - 0x7d, 0x2d, 0x34, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, 0x2d, 0x5b, - 0x38, 0x39, 0x41, 0x42, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x33, 0x7d, - 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x24, 0x5a, 0x97, - 0x03, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, - 0x20, 0x02, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, - 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, - 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4e, 0x40, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, - 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x0a, 0x0f, - 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, - 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, - 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x1a, - 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x62, 0x1f, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, - 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x6a, 0x32, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, - 0x12, 0x14, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x52, 0x70, 0x63, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x10, 0x0a, 0x0a, 0x78, 0x2d, 0x74, 0x72, 0x61, 0x69, - 0x74, 0x54, 0x61, 0x67, 0x12, 0x02, 0x20, 0x01, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, - 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, - 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, - 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, + 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, + 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2938,54 +2949,56 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = [ 6, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything 6, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything 6, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 26, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 34, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum - 35, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum - 26, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty - 6, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 36, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage - 17, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:input_type -> grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest - 26, // 64: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 26, // 65: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 15, // 66: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest - 6, // 67: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 12, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 12, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book - 6, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 26, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 26, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 26, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 26, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 7, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated - 32, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage - 6, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 26, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 26, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 26, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 26, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 26, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 6, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 6, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 37, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 26, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty - 26, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty - 8, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse - 26, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty - 26, // 94: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty - 6, // 95: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything - 26, // 96: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty - 26, // 97: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:output_type -> google.protobuf.Empty - 26, // 98: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 26, // 99: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty - 16, // 100: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse - 67, // [67:101] is the sub-list for method output_type - 33, // [33:67] is the sub-list for method input_type + 9, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteRequestContentType:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 26, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 34, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithPathEnum + 35, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:input_type -> grpc.gateway.examples.internal.pathenum.MessageWithNestedPathEnum + 26, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:input_type -> google.protobuf.Empty + 6, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 62: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 36, // 63: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:input_type -> grpc.gateway.examples.internal.proto.oneofenum.OneofEnumMessage + 17, // 64: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:input_type -> grpc.gateway.examples.internal.proto.examplepb.RequiredMessageTypeRequest + 26, // 65: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 26, // 66: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 15, // 67: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:input_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumRequest + 6, // 68: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 69: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 12, // 70: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 12, // 71: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateBook:output_type -> grpc.gateway.examples.internal.proto.examplepb.Book + 6, // 72: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 73: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Custom:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 74: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DoubleColon:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 75: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 26, // 76: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 26, // 77: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 26, // 78: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 7, // 79: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 32, // 80: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 6, // 81: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 82: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 26, // 83: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 26, // 84: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 26, // 85: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 26, // 86: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 6, // 87: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 88: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 89: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 90: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteRequestContentType:output_type -> google.protobuf.Empty + 37, // 91: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 26, // 92: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalPathEnum:output_type -> google.protobuf.Empty + 26, // 93: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckExternalNestedPathEnum:output_type -> google.protobuf.Empty + 8, // 94: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckStatus:output_type -> grpc.gateway.examples.internal.proto.examplepb.CheckStatusResponse + 26, // 95: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Exists:output_type -> google.protobuf.Empty + 26, // 96: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CustomOptionsRequest:output_type -> google.protobuf.Empty + 6, // 97: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.TraceRequest:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 26, // 98: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostOneofEnum:output_type -> google.protobuf.Empty + 26, // 99: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostRequiredMessageType:output_type -> google.protobuf.Empty + 26, // 100: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 26, // 101: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 16, // 102: grpc.gateway.examples.internal.proto.examplepb.SnakeEnumService.SnakeEnum:output_type -> grpc.gateway.examples.internal.proto.examplepb.SnakeEnumResponse + 68, // [68:103] is the sub-list for method output_type + 33, // [33:68] is the sub-list for method input_type 33, // [33:33] is the sub-list for extension type_name 33, // [33:33] is the sub-list for extension extendee 0, // [0:33] is the sub-list for field type_name diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 2dee90c53dc..873dce4d621 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2310,6 +2310,40 @@ func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Co } +func request_ABitOfEverythingService_OverwriteRequestContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Body + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.OverwriteRequestContentType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_OverwriteRequestContentType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Body + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.OverwriteRequestContentType(ctx, &protoReq) + return msg, metadata, err + +} + func request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -3505,6 +3539,31 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_OverwriteRequestContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType", runtime.WithHTTPPathPattern("/v2/example/overwriterequestcontenttype")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4389,6 +4448,28 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("POST", pattern_ABitOfEverythingService_OverwriteRequestContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType", runtime.WithHTTPPathPattern("/v2/example/overwriterequestcontenttype")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_OverwriteRequestContentType_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -4641,6 +4722,8 @@ var ( pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "")) + pattern_ABitOfEverythingService_OverwriteRequestContentType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "overwriterequestcontenttype"}, "")) + pattern_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "overwriteresponsecontenttype"}, "")) pattern_ABitOfEverythingService_CheckExternalPathEnum_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"v2", "value"}, "check")) @@ -4711,6 +4794,8 @@ var ( forward_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_OverwriteRequestContentType_0 = runtime.ForwardResponseMessage + forward_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_CheckExternalPathEnum_0 = runtime.ForwardResponseMessage diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 8ee93541111..84798dbab1b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -755,6 +755,15 @@ service ABitOfEverythingService { body: "single_nested" }; } + rpc OverwriteRequestContentType(Body) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v2/example/overwriterequestcontenttype" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + consumes: "application/x-bar-mime" + }; + } rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) { option (google.api.http) = { get: "/v2/example/overwriteresponsecontenttype" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 914106787e4..7d869067a13 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -6191,6 +6191,65 @@ ] } }, + "/v2/example/overwriterequestcontenttype": { + "post": { + "operationId": "ABitOfEverythingService_OverwriteRequestContentType", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/examplepbErrorResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbBody" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ], + "consumes": [ + "application/x-bar-mime" + ] + } + }, "/v2/example/overwriteresponsecontenttype": { "get": { "operationId": "ABitOfEverythingService_OverwriteResponseContentType", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go index dafa80ca2d4..846cba4da89 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything_grpc.pb.go @@ -58,6 +58,7 @@ type ABitOfEverythingServiceClient interface { CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + OverwriteRequestContentType(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) OverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) CheckExternalPathEnum(ctx context.Context, in *pathenum.MessageWithPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) CheckExternalNestedPathEnum(ctx context.Context, in *pathenum.MessageWithNestedPathEnum, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -275,6 +276,15 @@ func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context return out, nil } +func (c *aBitOfEverythingServiceClient) OverwriteRequestContentType(ctx context.Context, in *Body, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*wrapperspb.StringValue, error) { out := new(wrapperspb.StringValue) err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) @@ -393,6 +403,7 @@ type ABitOfEverythingServiceServer interface { CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + OverwriteRequestContentType(context.Context, *Body) (*emptypb.Empty, error) OverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error) CheckExternalPathEnum(context.Context, *pathenum.MessageWithPathEnum) (*emptypb.Empty, error) CheckExternalNestedPathEnum(context.Context, *pathenum.MessageWithNestedPathEnum) (*emptypb.Empty, error) @@ -474,6 +485,9 @@ func (UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams( func (UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckPostQueryParams not implemented") } +func (UnimplementedABitOfEverythingServiceServer) OverwriteRequestContentType(context.Context, *Body) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method OverwriteRequestContentType not implemented") +} func (UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(context.Context, *emptypb.Empty) (*wrapperspb.StringValue, error) { return nil, status.Errorf(codes.Unimplemented, "method OverwriteResponseContentType not implemented") } @@ -909,6 +923,24 @@ func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_OverwriteRequestContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Body) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).OverwriteRequestContentType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteRequestContentType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).OverwriteRequestContentType(ctx, req.(*Body)) + } + return interceptor(ctx, in, info, handler) +} + func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(emptypb.Empty) if err := dec(in); err != nil { @@ -1166,6 +1198,10 @@ var ABitOfEverythingService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CheckPostQueryParams", Handler: _ABitOfEverythingService_CheckPostQueryParams_Handler, }, + { + MethodName: "OverwriteRequestContentType", + Handler: _ABitOfEverythingService_OverwriteRequestContentType_Handler, + }, { MethodName: "OverwriteResponseContentType", Handler: _ABitOfEverythingService_OverwriteResponseContentType_Handler, diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 490308937e6..d129edca2e8 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -370,6 +370,10 @@ func (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg return msg, nil } +func (s *_ABitOfEverythingServer) OverwriteRequestContentType(ctx context.Context, msg *examples.Body) (*emptypb.Empty, error) { + return &emptypb.Empty{}, nil +} + func (s *_ABitOfEverythingServer) OverwriteResponseContentType(ctx context.Context, msg *emptypb.Empty) (*wrapperspb.StringValue, error) { return &wrapperspb.StringValue{}, nil } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index f23b01cf208..25bd48c1a45 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1505,6 +1505,11 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re operationObject.extensions = exts } + if len(opts.Consumes) > 0 { + operationObject.Consumes = make([]string, len(opts.Consumes)) + copy(operationObject.Consumes, opts.Consumes) + } + if len(opts.Produces) > 0 { operationObject.Produces = make([]string, len(opts.Produces)) copy(operationObject.Produces, opts.Produces) diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 5af6f3321e3..3f1a105c385 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -1633,7 +1633,7 @@ func TestApplyTemplateOpenAPIConfigFromYAML(t *testing.T) { } } -func TestApplyTemplateOverrideOperationID(t *testing.T) { +func TestApplyTemplateOverrideWithOperation(t *testing.T) { newFile := func() *descriptor.File { msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), @@ -1717,6 +1717,12 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { if want, is := "MyExample", result.Paths["/v1/echo"].Get.OperationID; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s", *file, is, want) } + if want, is := []string{"application/xml"}, result.Paths["/v1/echo"].Get.Consumes; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).Paths[0].Get.Consumes = %s want to be %s", *file, is, want) + } + if want, is := []string{"application/json", "application/xml"}, result.Paths["/v1/echo"].Get.Produces; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).Paths[0].Get.Produces = %s want to be %s", *file, is, want) + } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { @@ -1727,6 +1733,8 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { openapiOperation := openapi_options.Operation{ OperationId: "MyExample", + Consumes: []string{"application/xml"}, + Produces: []string{"application/json", "application/xml"}, } t.Run("verify override via method option", func(t *testing.T) { diff --git a/protoc-gen-openapiv2/internal/genopenapi/types.go b/protoc-gen-openapiv2/internal/genopenapi/types.go index 52f84451bbc..8c9b45d1613 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/types.go +++ b/protoc-gen-openapiv2/internal/genopenapi/types.go @@ -126,6 +126,7 @@ type openapiOperationObject struct { Parameters openapiParametersObject `json:"parameters,omitempty" yaml:"parameters,omitempty"` Tags []string `json:"tags,omitempty" yaml:"tags,omitempty"` Deprecated bool `json:"deprecated,omitempty" yaml:"deprecated,omitempty"` + Consumes []string `json:"consumes,omitempty" yaml:"consumes,omitempty"` Produces []string `json:"produces,omitempty" yaml:"produces,omitempty"` Security *[]openapiSecurityRequirementObject `json:"security,omitempty" yaml:"security,omitempty"` From 5760f9e3c8ffab6e9b4963fe7fdffce0fbe9d56b Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Tue, 8 Nov 2022 22:49:36 +0300 Subject: [PATCH 1499/1518] protoc gen oas v2 cleanup (#2996) --- .../internal/genopenapi/generator.go | 10 +-- .../internal/genopenapi/template.go | 81 ++++++++----------- protoc-gen-openapiv2/main.go | 44 +++++----- 3 files changed, 54 insertions(+), 81 deletions(-) diff --git a/protoc-gen-openapiv2/internal/genopenapi/generator.go b/protoc-gen-openapiv2/internal/genopenapi/generator.go index 861094d7fbe..f6b3c27bf31 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/generator.go +++ b/protoc-gen-openapiv2/internal/genopenapi/generator.go @@ -23,9 +23,7 @@ import ( legacydescriptor "github.com/golang/protobuf/descriptor" ) -var ( - errNoTargetService = errors.New("no target service defined in the file") -) +var errNoTargetService = errors.New("no target service defined in the file") type generator struct { reg *descriptor.Registry @@ -326,7 +324,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response for _, file := range targets { glog.V(1).Infof("Processing %s", file.GetName()) swagger, err := applyTemplate(param{File: file, reg: g.reg}) - if err == errNoTargetService { + if errors.Is(err, errNoTargetService) { glog.V(1).Infof("%s: %v", file.GetName(), err) continue } @@ -343,7 +341,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response targetOpenAPI := mergeTargetFile(openapis, g.reg.GetMergeFileName()) f, err := encodeOpenAPI(targetOpenAPI, g.format) if err != nil { - return nil, fmt.Errorf("failed to encode OpenAPI for %s: %s", g.reg.GetMergeFileName(), err) + return nil, fmt.Errorf("failed to encode OpenAPI for %s: %w", g.reg.GetMergeFileName(), err) } files = append(files, f) glog.V(1).Infof("New OpenAPI file will emit") @@ -351,7 +349,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response for _, file := range openapis { f, err := encodeOpenAPI(file, g.format) if err != nil { - return nil, fmt.Errorf("failed to encode OpenAPI for %s: %s", file.fileName, err) + return nil, fmt.Errorf("failed to encode OpenAPI for %s: %w", file.fileName, err) } files = append(files, f) glog.V(1).Infof("New OpenAPI file will emit") diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 25bd48c1a45..3fed9f3cfbb 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -3,6 +3,7 @@ package genopenapi import ( "bytes" "encoding/json" + "errors" "fmt" "math" "net/textproto" @@ -180,7 +181,7 @@ func newCycleChecker(recursive int) *cycleChecker { // toleration func (c *cycleChecker) Check(name string) bool { count, ok := c.m[name] - count = count + 1 + count += 1 isCycle := count > c.count if isCycle { @@ -201,7 +202,7 @@ func (c *cycleChecker) Check(name string) bool { func (c *cycleChecker) Branch() *cycleChecker { copy := &cycleChecker{ count: c.count, - m: map[string]int{}, + m: make(map[string]int, len(c.m)), } for k, v := range c.m { @@ -336,8 +337,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre } // Check for cyclical message reference: - isOK := cycle.Check(*msg.Name) - if !isOK { + if ok := cycle.Check(*msg.Name); !ok { return nil, fmt.Errorf("exceeded recursive count (%d) for query parameter %q", cycle.count, fieldType) } @@ -800,7 +800,7 @@ func renderEnumerationsAsDefinition(enums enumMap, d openapiDefinitionsObject, r for _, enum := range enums { swgName, ok := fullyQualifiedNameToOpenAPIName(enum.FQEN(), reg) if !ok { - panic(fmt.Sprintf("can't resolve OpenAPI name from FQEN '%v'", enum.FQEN())) + panic(fmt.Sprintf("can't resolve OpenAPI name from FQEN %q", enum.FQEN())) } enumComments := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index)) @@ -958,8 +958,7 @@ func partsToOpenAPIPath(parts []string, overrides map[string]string) string { } parts[index] = part } - last := len(parts) - 1 - if strings.HasPrefix(parts[last], ":") { + if last := len(parts) - 1; strings.HasPrefix(parts[last], ":") { // Last item is a verb (":" LITERAL). return strings.Join(parts[:last], "/") + parts[last] } @@ -988,7 +987,7 @@ func partsToRegexpMap(parts []string) map[string]string { regExps := make(map[string]string) for _, part := range parts { if strings.Contains(part, "/") { - glog.Warningf("Path parameter '%s' contains '/', which is not supported in OpenAPI", part) + glog.Warningf("Path parameter %q contains '/', which is not supported in OpenAPI", part) } if submatch := canRegexp.FindStringSubmatch(part); len(submatch) > 2 { if strings.HasPrefix(submatch[2], "=") { // this part matches the standard and should be made into a regular expression @@ -1086,7 +1085,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re defaultValue = schema.Default extensions = schema.extensions } else { - return fmt.Errorf("only primitive and well-known types are allowed in path parameters") + return errors.New("only primitive and well-known types are allowed in path parameters") } case descriptorpb.FieldDescriptorProto_TYPE_ENUM: enum, err := reg.LookupEnum("", parameter.Target.GetTypeName()) @@ -1194,8 +1193,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re return err } if len(b.PathParams) == 0 { - err = schema.setRefFromFQN(meth.RequestType.FQMN(), reg) - if err != nil { + if err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg); err != nil { return err } desc = messageSchema.Description @@ -1211,7 +1209,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re // "NOTE: the referred field must be present at the top-level of the request message type." // Ref: https://github.com/googleapis/googleapis/blob/b3397f5febbf21dfc69b875ddabaf76bee765058/google/api/http.proto#L350-L352 if len(b.Body.FieldPath) > 1 { - return fmt.Errorf("Body of request '%s' is not a top level field: '%v'.", meth.Service.GetName(), b.Body.FieldPath) + return fmt.Errorf("Body of request %q is not a top level field: '%v'.", meth.Service.GetName(), b.Body.FieldPath) } bodyField := b.Body.FieldPath[0] if reg.GetUseJSONNamesForFields() { @@ -1315,8 +1313,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re // well, without a definition wknSchemaCore, isWkn := wktSchemas[meth.ResponseType.FQMN()] if !isWkn { - err := responseSchema.setRefFromFQN(meth.ResponseType.FQMN(), reg) - if err != nil { + if err := responseSchema.setRefFromFQN(meth.ResponseType.FQMN(), reg); err != nil { return err } } else { @@ -1878,7 +1875,7 @@ func applyTemplate(p param) (*openapiSwaggerObject, error) { } func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error) { - exts := []extension{} + exts := make([]extension, 0, len(inputExts)) for k, v := range inputExts { if !strings.HasPrefix(k, "x-") { return nil, fmt.Errorf("extension keys need to start with \"x-\": %q", k) @@ -1893,7 +1890,7 @@ func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error return exts, nil } -func validateHeaderTypeAndFormat(headerType string, format string) error { +func validateHeaderTypeAndFormat(headerType, format string) error { // The type of the object. The value MUST be one of "string", "number", "integer", "boolean", or "array" // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject // Note: currently not implementing array as we are only implementing this in the operation response context @@ -1961,50 +1958,40 @@ func validateDefaultValueTypeAndFormat(headerType string, defaultValue string, f switch format { case "date-time": unquoteTime := strings.Trim(defaultValue, `"`) - _, err := time.Parse(time.RFC3339, unquoteTime) - if err != nil { + if _, err := time.Parse(time.RFC3339, unquoteTime); err != nil { return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue) } case "date": - const ( - layoutRFC3339Date = "2006-01-02" - ) + const layoutRFC3339Date = "2006-01-02" unquoteDate := strings.Trim(defaultValue, `"`) - _, err := time.Parse(layoutRFC3339Date, unquoteDate) - if err != nil { + if _, err := time.Parse(layoutRFC3339Date, unquoteDate); err != nil { return fmt.Errorf("the provided default value %q is not a valid RFC3339 date-time string", defaultValue) } } case "number": - err := isJSONNumber(defaultValue, headerType) - if err != nil { + if err := isJSONNumber(defaultValue, headerType); err != nil { return err } case "integer": switch format { case "int32": - _, err := strconv.ParseInt(defaultValue, 0, 32) - if err != nil { + if _, err := strconv.ParseInt(defaultValue, 0, 32); err != nil { return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) } case "uint32": - _, err := strconv.ParseUint(defaultValue, 0, 32) - if err != nil { + if _, err := strconv.ParseUint(defaultValue, 0, 32); err != nil { return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) } case "int64": - _, err := strconv.ParseInt(defaultValue, 0, 64) - if err != nil { + if _, err := strconv.ParseInt(defaultValue, 0, 64); err != nil { return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) } case "uint64": - _, err := strconv.ParseUint(defaultValue, 0, 64) - if err != nil { + if _, err := strconv.ParseUint(defaultValue, 0, 64); err != nil { return fmt.Errorf("the provided default value %q does not match provided format %q", defaultValue, format) } default: - _, err := strconv.ParseInt(defaultValue, 0, 64) - if err != nil { + if _, err := strconv.ParseInt(defaultValue, 0, 64); err != nil { return fmt.Errorf("the provided default value %q does not match provided type %q", defaultValue, headerType) } } @@ -2042,7 +2029,7 @@ func isBool(s string) bool { } func processHeaders(inputHdrs map[string]*openapi_options.Header) (openapiHeadersObject, error) { - hdrs := map[string]openapiHeaderObject{} + hdrs := make(map[string]openapiHeaderObject, len(inputHdrs)) for k, v := range inputHdrs { header := textproto.CanonicalMIMEHeaderKey(k) ret := openapiHeaderObject{ @@ -2050,14 +2037,12 @@ func processHeaders(inputHdrs map[string]*openapi_options.Header) (openapiHeader Format: v.Format, Pattern: v.Pattern, } - err := validateHeaderTypeAndFormat(v.Type, v.Format) - if err != nil { + if err := validateHeaderTypeAndFormat(v.Type, v.Format); err != nil { return nil, err } ret.Type = v.Type if v.Default != "" { - err := validateDefaultValueTypeAndFormat(v.Type, v.Default, v.Format) - if err != nil { + if err := validateDefaultValueTypeAndFormat(v.Type, v.Default, v.Format); err != nil { return nil, err } ret.Default = RawExample(v.Default) @@ -2149,7 +2134,7 @@ func updateOpenAPIDataFromComments(reg *descriptor.Registry, swaggerObject inter return nil } - return fmt.Errorf("no description nor summary property") + return errors.New("no description nor summary property") } func fieldProtoComments(reg *descriptor.Registry, msg *descriptor.Message, field *descriptor.Field) string { @@ -2173,8 +2158,7 @@ func enumValueProtoComments(reg *descriptor.Registry, enum *descriptor.Enum) str if reg.GetEnumsAsInts() { name = strconv.Itoa(int(value.GetNumber())) } - str := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index), protoPath, int32(idx)) - if str != "" { + if str := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index), protoPath, int32(idx)); str != "" { comments = append(comments, name+": "+str) } } @@ -2218,7 +2202,7 @@ func protoComments(reg *descriptor.Registry, file *descriptor.File, outers []str // - determine if every (but first and last) line begins with " " // - trim every line only if that is the case // - join by \n - comments = strings.Replace(comments, "\n ", "\n", -1) + comments = strings.ReplaceAll(comments, "\n ", "\n") } if loc.TrailingComments != nil { trailing := strings.TrimSpace(*loc.TrailingComments) @@ -2255,8 +2239,7 @@ func goTemplateComments(comment string, data interface{}, reg *descriptor.Regist // to make it easier to debug the template error return err.Error() } - err = tpl.Execute(&temp, data) - if err != nil { + if err := tpl.Execute(&temp, data); err != nil { // If there is an error executing the templating insert the error as string in the comment // to make it easier to debug the error return err.Error() @@ -2730,7 +2713,7 @@ func openapiExamplesFromProtoExamples(in map[string]string) map[string]interface if len(in) == 0 { return nil } - out := make(map[string]interface{}) + out := make(map[string]interface{}, len(in)) for mimeType, exampleStr := range in { switch mimeType { case "application/json": @@ -2804,7 +2787,7 @@ func addCustomRefs(d openapiDefinitionsObject, reg *descriptor.Registry, refs re for ref := range refs { swgName, swgOk := fullyQualifiedNameToOpenAPIName(ref, reg) if !swgOk { - glog.Errorf("can't resolve OpenAPI name from CustomRef '%v'", ref) + glog.Errorf("can't resolve OpenAPI name from CustomRef %q", ref) continue } if _, ok := d[swgName]; ok { @@ -2840,7 +2823,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri return oneField.GetJsonName() } } - messageNameToFieldsToJSONName := make(map[string]map[string]string) + messageNameToFieldsToJSONName := make(map[string]map[string]string, len(msgs)) fieldNameToType := make(map[string]string) for _, msg := range msgs { fieldNameToJSONName := make(map[string]string) diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 0e3907c7112..61730718411 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -78,8 +78,7 @@ func main() { glog.V(1).Info("Parsed code generator request") pkgMap := make(map[string]string) if req.Parameter != nil { - err := parseReqParam(req.GetParameter(), flag.CommandLine, pkgMap) - if err != nil { + if err := parseReqParam(req.GetParameter(), flag.CommandLine, pkgMap); err != nil { glog.Fatalf("Error parsing flags: %v", err) } } @@ -166,7 +165,7 @@ func main() { } } - var targets []*descriptor.File + targets := make([]*descriptor.File, 0, len(req.FileToGenerate)) for _, target := range req.FileToGenerate { f, err := reg.LookupFile(target) if err != nil { @@ -218,37 +217,30 @@ func parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) erro for _, p := range strings.Split(param, ",") { spec := strings.SplitN(p, "=", 2) if len(spec) == 1 { - if spec[0] == "allow_delete_body" { - err := f.Set(spec[0], "true") - if err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + switch spec[0] { + case "allow_delete_body": + if err := f.Set(spec[0], "true"); err != nil { + return fmt.Errorf("cannot set flag %s: %w", p, err) } continue - } - if spec[0] == "allow_merge" { - err := f.Set(spec[0], "true") - if err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + case "allow_merge": + if err := f.Set(spec[0], "true"); err != nil { + return fmt.Errorf("cannot set flag %s: %w", p, err) } continue - } - if spec[0] == "allow_repeated_fields_in_body" { - err := f.Set(spec[0], "true") - if err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + case "allow_repeated_fields_in_body": + if err := f.Set(spec[0], "true"); err != nil { + return fmt.Errorf("cannot set flag %s: %w", p, err) } continue - } - if spec[0] == "include_package_in_tags" { - err := f.Set(spec[0], "true") - if err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + case "include_package_in_tags": + if err := f.Set(spec[0], "true"); err != nil { + return fmt.Errorf("cannot set flag %s: %w", p, err) } continue } - err := f.Set(spec[0], "") - if err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + if err := f.Set(spec[0], ""); err != nil { + return fmt.Errorf("cannot set flag %s: %w", p, err) } continue } @@ -258,7 +250,7 @@ func parseReqParam(param string, f *flag.FlagSet, pkgMap map[string]string) erro continue } if err := f.Set(name, value); err != nil { - return fmt.Errorf("cannot set flag %s: %v", p, err) + return fmt.Errorf("cannot set flag %s: %w", p, err) } } return nil From 31c2009e5c3fe38f165c22956e28ea05175c3601 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Nov 2022 16:37:25 +0000 Subject: [PATCH 1500/1518] fix(deps): update google.golang.org/genproto digest to 94d6d90 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index bddad713c60..d636ff66b5a 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.1.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd + google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 8b0d042bf17..60abc3a2f50 100644 --- a/go.sum +++ b/go.sum @@ -957,8 +957,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd h1:1eV6KuDTxraYYsYGWksp1thEGP+8dtX/TINL9h+ppiI= -google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66 h1:wx7sJ5GRBQLRcslTNcrTklsHhHevQvxgztW18txbbZM= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 74d95c17396..d268a5e2ab9 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1750,8 +1750,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:1eV6KuDTxraYYsYGWksp1thEGP+8dtX/TINL9h+ppiI=", - version = "v0.0.0-20221107162902-2d387536bcdd", + sum = "h1:wx7sJ5GRBQLRcslTNcrTklsHhHevQvxgztW18txbbZM=", + version = "v0.0.0-20221109142239-94d6d90a7d66", ) go_repository( name = "org_golang_google_grpc", From 44255b424493a4921e0b452497fb5b45b3877cee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Nov 2022 20:01:46 +0000 Subject: [PATCH 1501/1518] fix(deps): update module golang.org/x/oauth2 to v0.2.0 --- go.mod | 6 +++--- go.sum | 15 ++++++++------- repositories.bzl | 23 +++++++++++++++-------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index d636ff66b5a..effd66216db 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/oauth2 v0.1.0 + golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66 google.golang.org/grpc v1.50.1 @@ -18,8 +18,8 @@ require ( require ( github.com/kr/pretty v0.1.0 // indirect - golang.org/x/net v0.1.0 // indirect - golang.org/x/sys v0.1.0 // indirect + golang.org/x/net v0.2.0 // indirect + golang.org/x/sys v0.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 60abc3a2f50..d28e7ac6d40 100644 --- a/go.sum +++ b/go.sum @@ -109,6 +109,7 @@ cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOt cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= @@ -610,8 +611,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -637,8 +638,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= +golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -716,11 +717,11 @@ golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/repositories.bzl b/repositories.bzl index d268a5e2ab9..de12e583136 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1084,6 +1084,13 @@ def go_repositories(): sum = "h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=", version = "v1.7.0", ) + go_repository( + name = "com_google_cloud_go_compute_metadata", + importpath = "cloud.google.com/go/compute/metadata", + sum = "h1:nBbNSZyDpkNlo3DepaaLKVuO7ClyifSAmNloSCZrHnQ=", + version = "v0.2.0", + ) + go_repository( name = "com_google_cloud_go_contactcenterinsights", importpath = "cloud.google.com/go/contactcenterinsights", @@ -1813,14 +1820,14 @@ def go_repositories(): go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=", - version = "v0.1.0", + sum = "h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=", + version = "v0.2.0", ) go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y=", - version = "v0.1.0", + sum = "h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU=", + version = "v0.2.0", ) go_repository( name = "org_golang_x_sync", @@ -1831,14 +1838,14 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=", - version = "v0.1.0", + sum = "h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=", + version = "v0.2.0", ) go_repository( name = "org_golang_x_term", importpath = "golang.org/x/term", - sum = "h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=", - version = "v0.1.0", + sum = "h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM=", + version = "v0.2.0", ) go_repository( From 4a32cbc5108aec1ae9f71b3264e1b569c8534e71 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Thu, 10 Nov 2022 07:11:16 +0300 Subject: [PATCH 1502/1518] Use ReplaceAll instead of Replace with -1 pos (#3003) --- protoc-gen-grpc-gateway/internal/gengateway/template.go | 8 ++++---- protoc-gen-openapiv2/internal/genopenapi/template.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 43d3c00ac04..2b98b861fa0 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -253,12 +253,12 @@ var _ = metadata.Join {{end}} `)) - _ = template.Must(handlerTemplate.New("request-func-signature").Parse(strings.Replace(` + _ = template.Must(handlerTemplate.New("request-func-signature").Parse(strings.ReplaceAll(` {{if .Method.GetServerStreaming}} func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.InstanceName}}Client, req *http.Request, pathParams map[string]string) ({{.Method.Service.InstanceName}}_{{.Method.GetName}}Client, runtime.ServerMetadata, error) {{else}} func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.InstanceName}}Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) -{{end}}`, "\n", "", -1))) +{{end}}`, "\n", ""))) _ = template.Must(handlerTemplate.New("client-streaming-request-func").Parse(` {{template "request-func-signature" .}} { @@ -480,11 +480,11 @@ var ( {{end}} `)) - _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.Replace(` + _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.ReplaceAll(` {{if .Method.GetServerStreaming}} {{else}} func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.InstanceName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) -{{end}}`, "\n", "", -1))) +{{end}}`, "\n", ""))) _ = template.Must(localHandlerTemplate.New("local-client-rpc-request-func").Funcs(funcMap).Parse(` {{$AllowPatchFeature := .AllowPatchFeature}} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 3fed9f3cfbb..e75713b734c 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -2231,7 +2231,7 @@ func goTemplateComments(comment string, data interface{}, reg *descriptor.Regist }, // Grabs title and description from a field "fieldcomments": func(msg *descriptor.Message, field *descriptor.Field) string { - return strings.Replace(fieldProtoComments(reg, msg, field), "\n", "
      ", -1) + return strings.ReplaceAll(fieldProtoComments(reg, msg, field), "\n", "
      ") }, }).Parse(comment) if err != nil { From b2acb1cf9d8e5e73b4a2ee400ef7e637132ccea6 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Thu, 10 Nov 2022 07:13:06 +0300 Subject: [PATCH 1503/1518] Use errors.New instead of fmt.Errorf w/o args (#3004) --- internal/codegenerator/parse_req_test.go | 4 ++-- internal/descriptor/services.go | 5 +++-- internal/httprule/parse.go | 13 ++++++------- .../internal/gengateway/generator.go | 6 ++---- .../internal/genopenapi/template.go | 4 ++-- runtime/errors_test.go | 6 +++--- runtime/fieldmask_test.go | 4 ++-- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/internal/codegenerator/parse_req_test.go b/internal/codegenerator/parse_req_test.go index 3c0c7971ab6..acc96304d73 100644 --- a/internal/codegenerator/parse_req_test.go +++ b/internal/codegenerator/parse_req_test.go @@ -2,7 +2,7 @@ package codegenerator_test import ( "bytes" - "fmt" + "errors" "io" "strings" "testing" @@ -66,5 +66,5 @@ type invalidReader struct { } func (*invalidReader) Read(p []byte) (int, error) { - return 0, fmt.Errorf("invalid reader") + return 0, errors.New("invalid reader") } diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go index 7e73b01a4ed..8936a78222e 100644 --- a/internal/descriptor/services.go +++ b/internal/descriptor/services.go @@ -1,6 +1,7 @@ package descriptor import ( + "errors" "fmt" "strings" @@ -132,7 +133,7 @@ func (r *Registry) newMethod(svc *Service, md *descriptorpb.MethodDescriptorProt tmpl := parsed.Compile() if md.GetClientStreaming() && len(tmpl.Fields) > 0 { - return nil, fmt.Errorf("cannot use path parameter in client streaming") + return nil, errors.New("cannot use path parameter in client streaming") } b := &Binding{ @@ -259,13 +260,13 @@ func (r *Registry) newParam(meth *Method, path string) (Parameter, error) { } func (r *Registry) newBody(meth *Method, path string) (*Body, error) { - msg := meth.RequestType switch path { case "": return nil, nil case "*": return &Body{FieldPath: nil}, nil } + msg := meth.RequestType fields, err := r.resolveFieldPath(msg, path, false) if err != nil { return nil, err diff --git a/internal/httprule/parse.go b/internal/httprule/parse.go index f008f7cc941..52a8561f0f9 100644 --- a/internal/httprule/parse.go +++ b/internal/httprule/parse.go @@ -1,6 +1,7 @@ package httprule import ( + "errors" "fmt" "strings" ) @@ -164,7 +165,7 @@ func (p *parser) segment() (segment, error) { v, err := p.variable() if err != nil { - return nil, fmt.Errorf("segment neither wildcards, literal or variable: %v", err) + return nil, fmt.Errorf("segment neither wildcards, literal or variable: %w", err) } return v, err } @@ -213,7 +214,7 @@ func (p *parser) fieldPath() (string, error) { } components := []string{c} for { - if _, err = p.accept("."); err != nil { + if _, err := p.accept("."); err != nil { return strings.Join(components, "."), nil } c, err := p.accept(typeIdent) @@ -237,10 +238,8 @@ const ( typeEOF = termType("$") ) -const ( - // eof is the terminal symbol which always appears at the end of token sequence. - eof = "\u0000" -) +// eof is the terminal symbol which always appears at the end of token sequence. +const eof = "\u0000" // accept tries to accept a token in "p". // This function consumes a token and returns it if it matches to the specified "term". @@ -334,7 +333,7 @@ func expectPChars(t string) error { // expectIdent determines if "ident" is a valid identifier in .proto schema ([[:alpha:]_][[:alphanum:]_]*). func expectIdent(ident string) error { if ident == "" { - return fmt.Errorf("empty identifier") + return errors.New("empty identifier") } for pos, r := range ident { switch { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 08efcc0b2c0..849d199af3d 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -13,9 +13,7 @@ import ( "google.golang.org/protobuf/types/pluginpb" ) -var ( - errNoTargetService = errors.New("no target service defined in the file") -) +var errNoTargetService = errors.New("no target service defined in the file") type generator struct { reg *descriptor.Registry @@ -76,7 +74,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response glog.V(1).Infof("Processing %s", file.GetName()) code, err := g.generate(file) - if err == errNoTargetService { + if errors.Is(err, errNoTargetService) { glog.V(1).Infof("%s: %v", file.GetName(), err) continue } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index e75713b734c..2b5d43ce19e 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1076,7 +1076,7 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re case descriptorpb.FieldDescriptorProto_TYPE_GROUP, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { if parameter.IsRepeated() { - return fmt.Errorf("only primitive and enum types are allowed in repeated path parameters") + return errors.New("only primitive and enum types are allowed in repeated path parameters") } schema := schemaOfField(parameter.Target, reg, customRefs) paramType = schema.Type @@ -2113,7 +2113,7 @@ func updateOpenAPIDataFromComments(reg *descriptor.Registry, swaggerObject inter } if len(description) > 0 { if !descriptionValue.CanSet() { - return fmt.Errorf("encountered object type with a summary, but no description") + return errors.New("encountered object type with a summary, but no description") } // overrides the schema value only if it's empty // keep the comment precedence when updating the package definition diff --git a/runtime/errors_test.go b/runtime/errors_test.go index b340343239e..5919e8d129c 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -2,7 +2,7 @@ package runtime_test import ( "context" - "fmt" + "errors" "net/http" "net/http/httptest" "strconv" @@ -32,7 +32,7 @@ func TestDefaultHTTPError(t *testing.T) { details string }{ { - err: fmt.Errorf("example error"), + err: errors.New("example error"), status: http.StatusInternalServerError, marshaler: &runtime.JSONPb{}, contentType: "application/json", @@ -54,7 +54,7 @@ func TestDefaultHTTPError(t *testing.T) { details: "type.googleapis.com/google.rpc.PreconditionFailure", }, { - err: fmt.Errorf("example error"), + err: errors.New("example error"), status: http.StatusInternalServerError, marshaler: &CustomMarshaler{&runtime.JSONPb{}}, contentType: "Custom-Content-Type", diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index fe3f0957968..fb32872505b 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -2,7 +2,7 @@ package runtime import ( "bytes" - "fmt" + "errors" "testing" "github.com/google/go-cmp/cmp" @@ -260,7 +260,7 @@ func TestFieldMaskErrors(t *testing.T) { { name: "object under scalar", input: `{"uuid": {"a": "x"}}`, - expectedErr: fmt.Errorf("JSON structure did not match request type"), + expectedErr: errors.New("JSON structure did not match request type"), }, } { t.Run(tc.name, func(t *testing.T) { From fb6bf930d9653f32199c6523d34a116f7f93d7fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Nov 2022 22:59:45 +0000 Subject: [PATCH 1504/1518] fix(deps): update google.golang.org/genproto digest to 142d8a6 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index effd66216db..dd13ba18cae 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66 + google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index d28e7ac6d40..f4cada88eb5 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66 h1:wx7sJ5GRBQLRcslTNcrTklsHhHevQvxgztW18txbbZM= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e h1:azcyH5lGzGy7pkLCbhPe0KkKxsM7c6UA/FZIXImKE7M= +google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index de12e583136..159c63020f4 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1757,8 +1757,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:wx7sJ5GRBQLRcslTNcrTklsHhHevQvxgztW18txbbZM=", - version = "v0.0.0-20221109142239-94d6d90a7d66", + sum = "h1:azcyH5lGzGy7pkLCbhPe0KkKxsM7c6UA/FZIXImKE7M=", + version = "v0.0.0-20221111202108-142d8a6fa32e", ) go_repository( name = "org_golang_google_grpc", From 191aea609a44f86a6c0794cf8993d988a41bb92b Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Mon, 14 Nov 2022 07:16:17 +0300 Subject: [PATCH 1505/1518] Cleanup (#3012) --- internal/httprule/fuzz.go | 4 +- .../internal/genopenapi/helpers_go111_old.go | 3 +- runtime/convert.go | 46 +++++++++---------- runtime/marshal_json_test.go | 5 +- runtime/marshal_jsonpb_test.go | 14 +++--- runtime/query.go | 29 ++++++------ runtime/query_test.go | 36 +++++++-------- 7 files changed, 66 insertions(+), 71 deletions(-) diff --git a/internal/httprule/fuzz.go b/internal/httprule/fuzz.go index 138f7c12f0e..c056bd3058a 100644 --- a/internal/httprule/fuzz.go +++ b/internal/httprule/fuzz.go @@ -1,10 +1,10 @@ +//go:build gofuzz // +build gofuzz package httprule func Fuzz(data []byte) int { - _, err := Parse(string(data)) - if err != nil { + if _, err := Parse(string(data)); err != nil { return 0 } return 0 diff --git a/protoc-gen-openapiv2/internal/genopenapi/helpers_go111_old.go b/protoc-gen-openapiv2/internal/genopenapi/helpers_go111_old.go index b8db1196508..d2b504a9ab8 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/helpers_go111_old.go +++ b/protoc-gen-openapiv2/internal/genopenapi/helpers_go111_old.go @@ -1,4 +1,5 @@ -//+build !go1.12 +//go:build !go1.12 +// +build !go1.12 package genopenapi diff --git a/runtime/convert.go b/runtime/convert.go index cfa540787fd..d7b15fcfb3f 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -37,7 +37,7 @@ func BoolSlice(val, sep string) ([]bool, error) { for i, v := range s { value, err := Bool(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -57,7 +57,7 @@ func Float64Slice(val, sep string) ([]float64, error) { for i, v := range s { value, err := Float64(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -81,7 +81,7 @@ func Float32Slice(val, sep string) ([]float32, error) { for i, v := range s { value, err := Float32(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -101,7 +101,7 @@ func Int64Slice(val, sep string) ([]int64, error) { for i, v := range s { value, err := Int64(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -125,7 +125,7 @@ func Int32Slice(val, sep string) ([]int32, error) { for i, v := range s { value, err := Int32(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -145,7 +145,7 @@ func Uint64Slice(val, sep string) ([]uint64, error) { for i, v := range s { value, err := Uint64(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -169,7 +169,7 @@ func Uint32Slice(val, sep string) ([]uint32, error) { for i, v := range s { value, err := Uint32(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -197,7 +197,7 @@ func BytesSlice(val, sep string) ([][]byte, error) { for i, v := range s { value, err := Bytes(v) if err != nil { - return values, err + return nil, err } values[i] = value } @@ -209,8 +209,7 @@ func Timestamp(val string) (*timestamppb.Timestamp, error) { var r timestamppb.Timestamp val = strconv.Quote(strings.Trim(val, `"`)) unmarshaler := &protojson.UnmarshalOptions{} - err := unmarshaler.Unmarshal([]byte(val), &r) - if err != nil { + if err := unmarshaler.Unmarshal([]byte(val), &r); err != nil { return nil, err } return &r, nil @@ -221,8 +220,7 @@ func Duration(val string) (*durationpb.Duration, error) { var r durationpb.Duration val = strconv.Quote(strings.Trim(val, `"`)) unmarshaler := &protojson.UnmarshalOptions{} - err := unmarshaler.Unmarshal([]byte(val), &r) - if err != nil { + if err := unmarshaler.Unmarshal([]byte(val), &r); err != nil { return nil, err } return &r, nil @@ -257,66 +255,64 @@ func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) { for i, v := range s { value, err := Enum(v, enumValMap) if err != nil { - return values, err + return nil, err } values[i] = value } return values, nil } -/* - Support for google.protobuf.wrappers on top of primitive types -*/ +// Support for google.protobuf.wrappers on top of primitive types // StringValue well-known type support as wrapper around string type func StringValue(val string) (*wrapperspb.StringValue, error) { - return &wrapperspb.StringValue{Value: val}, nil + return wrapperspb.String(val), nil } // FloatValue well-known type support as wrapper around float32 type func FloatValue(val string) (*wrapperspb.FloatValue, error) { parsedVal, err := Float32(val) - return &wrapperspb.FloatValue{Value: parsedVal}, err + return wrapperspb.Float(parsedVal), err } // DoubleValue well-known type support as wrapper around float64 type func DoubleValue(val string) (*wrapperspb.DoubleValue, error) { parsedVal, err := Float64(val) - return &wrapperspb.DoubleValue{Value: parsedVal}, err + return wrapperspb.Double(parsedVal), err } // BoolValue well-known type support as wrapper around bool type func BoolValue(val string) (*wrapperspb.BoolValue, error) { parsedVal, err := Bool(val) - return &wrapperspb.BoolValue{Value: parsedVal}, err + return wrapperspb.Bool(parsedVal), err } // Int32Value well-known type support as wrapper around int32 type func Int32Value(val string) (*wrapperspb.Int32Value, error) { parsedVal, err := Int32(val) - return &wrapperspb.Int32Value{Value: parsedVal}, err + return wrapperspb.Int32(parsedVal), err } // UInt32Value well-known type support as wrapper around uint32 type func UInt32Value(val string) (*wrapperspb.UInt32Value, error) { parsedVal, err := Uint32(val) - return &wrapperspb.UInt32Value{Value: parsedVal}, err + return wrapperspb.UInt32(parsedVal), err } // Int64Value well-known type support as wrapper around int64 type func Int64Value(val string) (*wrapperspb.Int64Value, error) { parsedVal, err := Int64(val) - return &wrapperspb.Int64Value{Value: parsedVal}, err + return wrapperspb.Int64(parsedVal), err } // UInt64Value well-known type support as wrapper around uint64 type func UInt64Value(val string) (*wrapperspb.UInt64Value, error) { parsedVal, err := Uint64(val) - return &wrapperspb.UInt64Value{Value: parsedVal}, err + return wrapperspb.UInt64(parsedVal), err } // BytesValue well-known type support as wrapper around bytes[] type func BytesValue(val string) (*wrapperspb.BytesValue, error) { parsedVal, err := Bytes(val) - return &wrapperspb.BytesValue{Value: parsedVal}, err + return wrapperspb.Bytes(parsedVal), err } diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index 5037aea9348..8fe08aeb9bf 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -100,9 +100,8 @@ func TestJSONBuiltinUnmarshalField(t *testing.T) { func alloc(t reflect.Type) reflect.Value { if t == nil { return reflect.ValueOf(new(interface{})) - } else { - return reflect.New(t) } + return reflect.New(t) } func TestJSONBuiltinUnmarshalFieldKnownErrors(t *testing.T) { @@ -250,7 +249,7 @@ var ( json: `"2016-05-10T10:19:13.123Z"`, }, { - data: &wrapperspb.Int32Value{Value: 123}, + data: wrapperspb.Int32(123), json: "123", }, } diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index d82290c1416..43029736e37 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -637,31 +637,31 @@ var ( }, { - data: &wrapperspb.BoolValue{Value: true}, + data: wrapperspb.Bool(true), json: "true", }, { - data: &wrapperspb.DoubleValue{Value: 123.456}, + data: wrapperspb.Double(123.456), json: "123.456", }, { - data: &wrapperspb.FloatValue{Value: 123.456}, + data: wrapperspb.Float(123.456), json: "123.456", }, { - data: &wrapperspb.Int32Value{Value: -123}, + data: wrapperspb.Int32(-123), json: "-123", }, { - data: &wrapperspb.Int64Value{Value: -123}, + data: wrapperspb.Int64(-123), json: `"-123"`, }, { - data: &wrapperspb.UInt32Value{Value: 123}, + data: wrapperspb.UInt32(123), json: "123", }, { - data: &wrapperspb.UInt64Value{Value: 123}, + data: wrapperspb.UInt64(123), json: `"123"`, }, // TODO(yugui) Add other well-known types once jsonpb supports them diff --git a/runtime/query.go b/runtime/query.go index 65d0da47166..56b796e6f4d 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -180,10 +180,10 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro return protoreflect.ValueOfBool(v), nil case protoreflect.EnumKind: enum, err := protoregistry.GlobalTypes.FindEnumByName(fieldDescriptor.Enum().FullName()) - switch { - case errors.Is(err, protoregistry.NotFound): - return protoreflect.Value{}, fmt.Errorf("enum %q is not registered", fieldDescriptor.Enum().FullName()) - case err != nil: + if err != nil { + if errors.Is(err, protoregistry.NotFound) { + return protoreflect.Value{}, fmt.Errorf("enum %q is not registered", fieldDescriptor.Enum().FullName()) + } return protoreflect.Value{}, fmt.Errorf("failed to look up enum: %w", err) } // Look for enum by name @@ -194,8 +194,7 @@ func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (pro return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value) } // Look for enum by number - v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i)) - if v == nil { + if v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i)); v == nil { return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value) } } @@ -271,51 +270,51 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.DoubleValue{Value: v} + msg = wrapperspb.Double(v) case "google.protobuf.FloatValue": v, err := strconv.ParseFloat(value, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.FloatValue{Value: float32(v)} + msg = wrapperspb.Float(float32(v)) case "google.protobuf.Int64Value": v, err := strconv.ParseInt(value, 10, 64) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.Int64Value{Value: v} + msg = wrapperspb.Int64(v) case "google.protobuf.Int32Value": v, err := strconv.ParseInt(value, 10, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.Int32Value{Value: int32(v)} + msg = wrapperspb.Int32(int32(v)) case "google.protobuf.UInt64Value": v, err := strconv.ParseUint(value, 10, 64) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.UInt64Value{Value: v} + msg = wrapperspb.UInt64(v) case "google.protobuf.UInt32Value": v, err := strconv.ParseUint(value, 10, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.UInt32Value{Value: uint32(v)} + msg = wrapperspb.UInt32(uint32(v)) case "google.protobuf.BoolValue": v, err := strconv.ParseBool(value) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.BoolValue{Value: v} + msg = wrapperspb.Bool(v) case "google.protobuf.StringValue": - msg = &wrapperspb.StringValue{Value: value} + msg = wrapperspb.String(value) case "google.protobuf.BytesValue": v, err := Bytes(value) if err != nil { return protoreflect.Value{}, err } - msg = &wrapperspb.BytesValue{Value: v} + msg = wrapperspb.Bytes(v) case "google.protobuf.FieldMask": fm := &field_mask.FieldMask{} fm.Paths = append(fm.Paths, strings.Split(value, ",")...) diff --git a/runtime/query_test.go b/runtime/query_test.go index bc885aaf28e..0680264be05 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -190,15 +190,15 @@ func TestPopulateParameters(t *testing.T) { TimestampValue: timePb, DurationValue: durationPb, FieldmaskValue: fieldmaskPb, - WrapperFloatValue: &wrapperspb.FloatValue{Value: 1.5}, - WrapperDoubleValue: &wrapperspb.DoubleValue{Value: 2.5}, - WrapperInt64Value: &wrapperspb.Int64Value{Value: -1}, - WrapperInt32Value: &wrapperspb.Int32Value{Value: -2}, - WrapperUInt64Value: &wrapperspb.UInt64Value{Value: 3}, - WrapperUInt32Value: &wrapperspb.UInt32Value{Value: 4}, - WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, - WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, - WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("abc123!?$*&()'-=@~")}, + WrapperFloatValue: wrapperspb.Float(1.5), + WrapperDoubleValue: wrapperspb.Double(2.5), + WrapperInt64Value: wrapperspb.Int64(-1), + WrapperInt32Value: wrapperspb.Int32(-2), + WrapperUInt64Value: wrapperspb.UInt64(3), + WrapperUInt32Value: wrapperspb.UInt32(4), + WrapperBoolValue: wrapperspb.Bool(true), + WrapperStringValue: wrapperspb.String("str"), + WrapperBytesValue: wrapperspb.Bytes([]byte("abc123!?$*&()'-=@~")), MapValue: map[string]string{ "key": "value", "second": "bar", @@ -269,15 +269,15 @@ func TestPopulateParameters(t *testing.T) { TimestampValue: timePb, DurationValue: durationPb, FieldmaskValue: fieldmaskPb, - WrapperFloatValue: &wrapperspb.FloatValue{Value: 1.5}, - WrapperDoubleValue: &wrapperspb.DoubleValue{Value: 2.5}, - WrapperInt64Value: &wrapperspb.Int64Value{Value: -1}, - WrapperInt32Value: &wrapperspb.Int32Value{Value: -2}, - WrapperUInt64Value: &wrapperspb.UInt64Value{Value: 3}, - WrapperUInt32Value: &wrapperspb.UInt32Value{Value: 4}, - WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, - WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, - WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("bytes")}, + WrapperFloatValue: wrapperspb.Float(1.5), + WrapperDoubleValue: wrapperspb.Double(2.5), + WrapperInt64Value: wrapperspb.Int64(-1), + WrapperInt32Value: wrapperspb.Int32(-2), + WrapperUInt64Value: wrapperspb.UInt64(3), + WrapperUInt32Value: wrapperspb.UInt32(4), + WrapperBoolValue: wrapperspb.Bool(true), + WrapperStringValue: wrapperspb.String("str"), + WrapperBytesValue: wrapperspb.Bytes([]byte("bytes")), StructValueValue: structValueValues[1], StructValue: structValues[1], }, From 82da9d7798737ca718468643fb24dd17688bad29 Mon Sep 17 00:00:00 2001 From: Chris Reeves Date: Mon, 14 Nov 2022 17:20:24 +0000 Subject: [PATCH 1506/1518] Support disabling default response rendering (#3006) * feat(protoc-gen-openapiv2): support disabling default response rendering * docs: add example output for disable_default_responses * docs: note for alterting HTTP status codes for disabled default responses --- .../mapping/customizing_openapi_output.md | 99 ++++++++++++++++++- internal/descriptor/registry.go | 14 +++ .../internal/genopenapi/template.go | 16 +-- .../internal/genopenapi/template_test.go | 11 +++ protoc-gen-openapiv2/main.go | 2 + 5 files changed, 132 insertions(+), 10 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index 5ed03f7f132..d1017bf7748 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -631,14 +631,107 @@ info: title: helloproto/v1/example.proto version: version not set consumes: -- application/json + - application/json produces: -- application/json + - application/json +paths: + /api/hello: + get: + operationId: EchoService_Hello +``` + +### Disable default responses + +By default a 200 OK response is rendered for each service operation. But it is possible to disable this and explicitly define your service's responses, using the `disable_default_responses` option. Allowed values are: `true`, `false`. + +**Note**: This does not alter the behavior of the gateway itself and should be coupled with a `ForwardResponseWriter` when altering status codes, see [Controlling HTTP Response Codes](https://grpc-ecosystem.github.io/grpc-gateway/docs/mapping/customizing_your_gateway/#controlling-http-response-status-codes). + +For example, if you are using `buf`: + +```yaml +version: v1 +plugins: + - name: openapiv2 + out: . + opt: + - disable_default_responses=true +``` + +or with `protoc` + +```sh +protoc --openapiv2_out=. --openapiv2_opt=disable_default_responses=true ./path/to/file.proto +``` + +Input example: + +```protobuf +syntax = "proto3"; + +package helloproto.v1; + +import "google/api/annotations.proto"; +import "protoc-gen-openapiv2/options/annotations.proto"; + +option go_package = "helloproto/v1;helloproto"; + +service EchoService { + rpc Hello(HelloReq) returns (HelloResp) { + option (google.api.http) = {get: "/api/hello"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + responses: { + key: "201", + value: { + description: "Created"; + schema: { + json_schema: {ref: ".helloproto.v1.HelloResp"} + } + } + }; + }; + } +} + +message HelloReq { + string name = 1; +} + +message HelloResp { + string message = 1; +} +``` + +Output (default response not generated): + +```yaml +swagger: "2.0" +info: + title: helloproto/v1/hello.proto + version: version not set +consumes: + - application/json +produces: + - application/json paths: /api/hello: get: operationId: EchoService_Hello -... + responses: + "201": + description: Created + schema: + $ref: "#/definitions/v1HelloResp" + parameters: + - name: name + in: query + required: false + type: string +definitions: + v1HelloResp: + type: object + properties: + message: + type: string ``` {% endraw %} diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 9080c2f312b..fdb7717fb8a 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -132,6 +132,10 @@ type Registry struct { // disableServiceTags disables the generation of service tags. // This is useful if you do not want to expose the names of your backend grpc services. disableServiceTags bool + + // disableDefaultResponses disables the generation of default responses. + // Useful if you have to support custom response codes that are not 200. + disableDefaultResponses bool } type repeatedFieldSeparator struct { @@ -758,3 +762,13 @@ func (r *Registry) SetDisableServiceTags(use bool) { func (r *Registry) GetDisableServiceTags() bool { return r.disableServiceTags } + +// SetDisableDefaultResponses setsdisableDefaultResponses +func (r *Registry) SetDisableDefaultResponses(use bool) { + r.disableDefaultResponses = use +} + +// GetDisableDefaultResponses returns disableDefaultResponses +func (r *Registry) GetDisableDefaultResponses() bool { + return r.disableDefaultResponses +} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index 2b5d43ce19e..a77a4d7c6d3 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1366,13 +1366,15 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re operationObject := &openapiOperationObject{ Parameters: parameters, - Responses: openapiResponsesObject{ - "200": openapiResponseObject{ - Description: desc, - Schema: responseSchema, - Headers: openapiHeadersObject{}, - }, - }, + Responses: openapiResponsesObject{}, + } + + if !reg.GetDisableDefaultResponses() { + operationObject.Responses["200"] = openapiResponseObject{ + Description: desc, + Schema: responseSchema, + Headers: openapiHeadersObject{}, + } } if !reg.GetDisableServiceTags() { diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index 3f1a105c385..f4733c22540 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -3316,6 +3316,17 @@ func TestApplyTemplateProtobufAny(t *testing.T) { }, wantNumDefinitions: 3, }, + { + // we have a protobufAny in a message but with automatic rendering of responses disabled + name: "protobufAny_referenced_in_message_with_default_responses_disabled", + args: args{ + msgContainsAny: true, + regConfig: func(reg *descriptor.Registry) { + reg.SetDisableDefaultResponses(true) + }, + }, + wantNumDefinitions: 4, + }, } for _, tt := range tests { diff --git a/protoc-gen-openapiv2/main.go b/protoc-gen-openapiv2/main.go index 61730718411..092d6fa9dbc 100644 --- a/protoc-gen-openapiv2/main.go +++ b/protoc-gen-openapiv2/main.go @@ -41,6 +41,7 @@ var ( outputFormat = flag.String("output_format", string(genopenapi.FormatJSON), fmt.Sprintf("output content format. Allowed values are: `%s`, `%s`", genopenapi.FormatJSON, genopenapi.FormatYAML)) visibilityRestrictionSelectors = utilities.StringArrayFlag(flag.CommandLine, "visibility_restriction_selectors", "list of `google.api.VisibilityRule` visibility labels to include in the generated output when a visibility annotation is defined. Repeat this option to supply multiple values. Elements without visibility annotations are unaffected by this setting.") disableServiceTags = flag.Bool("disable_service_tags", false, "if set, disables generation of service tags. This is useful if you do not want to expose the names of your backend grpc services.") + disableDefaultResponses = flag.Bool("disable_default_responses", false, "if set, disables generation of default responses. Useful if you have to support custom response codes that are not 200.") ) // Variables set by goreleaser at build time @@ -125,6 +126,7 @@ func main() { reg.SetOmitEnumDefaultValue(*omitEnumDefaultValue) reg.SetVisibilityRestrictionSelectors(*visibilityRestrictionSelectors) reg.SetDisableServiceTags(*disableServiceTags) + reg.SetDisableDefaultResponses(*disableDefaultResponses) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From 7a1adab49edf63af35bada0254515676ded1a143 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 23:54:01 +0000 Subject: [PATCH 1507/1518] fix(deps): update google.golang.org/genproto digest to e4508eb --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index dd13ba18cae..d8e0122f35c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e + google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index f4cada88eb5..a8a6f821094 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e h1:azcyH5lGzGy7pkLCbhPe0KkKxsM7c6UA/FZIXImKE7M= -google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 h1:jCw9YRd2s40X9Vxi4zKsPRvSPlHWNqadVkpbMsCPzPQ= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 159c63020f4..8a1d0b3f884 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1757,8 +1757,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:azcyH5lGzGy7pkLCbhPe0KkKxsM7c6UA/FZIXImKE7M=", - version = "v0.0.0-20221111202108-142d8a6fa32e", + sum = "h1:jCw9YRd2s40X9Vxi4zKsPRvSPlHWNqadVkpbMsCPzPQ=", + version = "v0.0.0-20221114212237-e4508ebdbee1", ) go_repository( name = "org_golang_google_grpc", From e59b2ad456df32a72b5744565e40101bcd565411 Mon Sep 17 00:00:00 2001 From: Chris Reeves Date: Tue, 15 Nov 2022 22:32:53 +0000 Subject: [PATCH 1508/1518] OpenAPIv2: Support request header parameters (#3010) * feat: support request header parameters * docs: add openapi references to new parameters protos Co-Authored-By: Johan Brandhorst-Satzkorn * refactor: return error if http parameter type not defined * docs: add note about breaking compatability with Open API V2 * docs: document custom http request header parameters * chore: generate go * test: fix failing required header parameter test * test: remove unnecessary comment Co-authored-by: Johan Brandhorst-Satzkorn --- .../mapping/customizing_openapi_output.md | 89 ++ .../internal/genopenapi/template.go | 27 + .../internal/genopenapi/template_test.go | 208 +++ protoc-gen-openapiv2/options/openapiv2.pb.go | 1243 ++++++++++------- protoc-gen-openapiv2/options/openapiv2.proto | 45 + 5 files changed, 1125 insertions(+), 487 deletions(-) diff --git a/docs/docs/mapping/customizing_openapi_output.md b/docs/docs/mapping/customizing_openapi_output.md index d1017bf7748..a93828a508b 100644 --- a/docs/docs/mapping/customizing_openapi_output.md +++ b/docs/docs/mapping/customizing_openapi_output.md @@ -734,4 +734,93 @@ definitions: type: string ``` +### Custom HTTP Header Request Parameters + +By default the parameters for each operation are generated from the protocol buffer definition however you can extend the parameters to include extra HTTP headers if required. + +**NOTE**: These annotations do not alter the behaviour of the gateway and must be coupled with custom header parsing behaviour in the application. Also be aware that adding header parameters can alter the forwards and backwards compatibility of the schema. You must also set a type for your header which can be one of `STRING`, `INTEGER`, `NUMBER` or `BOOLEAN`. + +```protobuf +syntax = "proto3"; + +package helloproto.v1; + +import "google/api/annotations.proto"; +import "protoc-gen-openapiv2/options/annotations.proto"; + +option go_package = "helloproto/v1;helloproto"; + +service EchoService { + rpc Hello(HelloReq) returns (HelloResp) { + option (google.api.http) = {get: "/api/hello"}; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + parameters: { + headers: { + name: "X-Foo"; + description: "Foo Header"; + type: STRING, + required: true; + }; + headers: { + name: "X-Bar"; + description: "Bar Header"; + type: NUMBER, + }; + }; + }; + } +} + +message HelloReq { + string name = 1; +} + +message HelloResp { + string message = 1; +} +``` + +Output: + +```yaml +swagger: "2.0" +info: + title: helloproto/v1/hello.proto + version: version not set +consumes: + - application/json +produces: + - application/json +paths: + /api/hello: + get: + operationId: Hello + responses: + "200": + description: A successful response. + schema: + $ref: "#/definitions/helloproto.v1.HelloResp" + parameters: + - name: name + in: query + required: false + type: string + - name: X-Foo + description: Foo Header + in: header + required: true + type: string + - name: X-Bar + description: Bar Header + in: header + required: false + type: number +definitions: + helloproto.v1.HelloResp: + type: object + properties: + message: + type: string +``` + {% endraw %} diff --git a/protoc-gen-openapiv2/internal/genopenapi/template.go b/protoc-gen-openapiv2/internal/genopenapi/template.go index a77a4d7c6d3..cb3fedc00b2 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template.go @@ -1514,6 +1514,33 @@ func renderServices(services []*descriptor.Service, paths openapiPathsObject, re copy(operationObject.Produces, opts.Produces) } + if params := opts.Parameters; params != nil && len(params.Headers) > 0 { + for _, header := range params.Headers { + param := openapiParameterObject{ + In: "header", + Name: header.Name, + Description: header.Description, + Required: header.Required, + Format: header.Format, + } + + switch header.Type { + case openapi_options.HeaderParameter_STRING: + param.Type = "string" + case openapi_options.HeaderParameter_NUMBER: + param.Type = "number" + case openapi_options.HeaderParameter_INTEGER: + param.Type = "integer" + case openapi_options.HeaderParameter_BOOLEAN: + param.Type = "boolean" + default: + return fmt.Errorf("invalid header parameter type: %+v", header.Type) + } + + operationObject.Parameters = append(operationObject.Parameters, param) + } + } + // TODO(ivucica): add remaining fields of operation object } diff --git a/protoc-gen-openapiv2/internal/genopenapi/template_test.go b/protoc-gen-openapiv2/internal/genopenapi/template_test.go index f4733c22540..4f6daf6efb3 100644 --- a/protoc-gen-openapiv2/internal/genopenapi/template_test.go +++ b/protoc-gen-openapiv2/internal/genopenapi/template_test.go @@ -7976,6 +7976,214 @@ func TestRenderServicesWithColonInSegment(t *testing.T) { } } +func TestRenderServiceWithHeaderParameters(t *testing.T) { + file := func() descriptor.File { + msgdesc := &descriptorpb.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + + meth := &descriptorpb.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + Options: &descriptorpb.MethodOptions{}, + } + + svc := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*descriptorpb.MethodDescriptorProto{meth}, + } + + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + + return descriptor.File{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String("github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb;example"), + }, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", + }, + }, + }, + }, + }, + }, + }, + } + } + + type test struct { + file func() descriptor.File + openapiOperation *openapi_options.Operation + parameters openapiParametersObject + } + + tests := map[string]*test{ + "type string": { + file: file, + openapiOperation: &openapi_options.Operation{ + Parameters: &openapi_options.Parameters{ + Headers: []*openapi_options.HeaderParameter{ + { + Name: "X-Custom-Header", + Type: openapi_options.HeaderParameter_STRING, + }, + }, + }, + }, + parameters: openapiParametersObject{ + { + Name: "X-Custom-Header", + In: "header", + Type: "string", + }, + }, + }, + "type integer": { + file: file, + openapiOperation: &openapi_options.Operation{ + Parameters: &openapi_options.Parameters{ + Headers: []*openapi_options.HeaderParameter{ + { + Name: "X-Custom-Header", + Type: openapi_options.HeaderParameter_INTEGER, + }, + }, + }, + }, + parameters: openapiParametersObject{ + { + Name: "X-Custom-Header", + In: "header", + Type: "integer", + }, + }, + }, + "type number": { + file: file, + openapiOperation: &openapi_options.Operation{ + Parameters: &openapi_options.Parameters{ + Headers: []*openapi_options.HeaderParameter{ + { + Name: "X-Custom-Header", + Type: openapi_options.HeaderParameter_NUMBER, + }, + }, + }, + }, + parameters: openapiParametersObject{ + { + Name: "X-Custom-Header", + In: "header", + Type: "number", + }, + }, + }, + "type boolean": { + file: file, + openapiOperation: &openapi_options.Operation{ + Parameters: &openapi_options.Parameters{ + Headers: []*openapi_options.HeaderParameter{ + { + Name: "X-Custom-Header", + Type: openapi_options.HeaderParameter_BOOLEAN, + }, + }, + }, + }, + parameters: openapiParametersObject{ + { + Name: "X-Custom-Header", + In: "header", + Type: "boolean", + }, + }, + }, + "header required": { + file: file, + openapiOperation: &openapi_options.Operation{ + Parameters: &openapi_options.Parameters{ + Headers: []*openapi_options.HeaderParameter{ + { + Name: "X-Custom-Header", + Required: true, + Type: openapi_options.HeaderParameter_STRING, + }, + }, + }, + }, + parameters: openapiParametersObject{ + { + Name: "X-Custom-Header", + In: "header", + Required: true, + Type: "string", + }, + }, + }, + } + + for name, test := range tests { + test := test + + t.Run(name, func(t *testing.T) { + file := test.file() + + proto.SetExtension( + proto.Message(file.Services[0].Methods[0].Options), + openapi_options.E_Openapiv2Operation, + test.openapiOperation) + + reg := descriptor.NewRegistry() + + fileCL := crossLinkFixture(&file) + + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + } + + result, err := applyTemplate(param{File: fileCL, reg: reg}) + if err != nil { + t.Fatalf("applyTemplate(%#v) failed with %v; want success", file, err) + } + + params := result.Paths["/v1/echo"].Get.Parameters + + if !reflect.DeepEqual(params, test.parameters) { + t.Errorf("expected %+v, got %+v", test.parameters, params) + } + }) + } +} + func GetPaths(req *openapiSwaggerObject) []string { paths := make([]string, len(req.Paths)) i := 0 diff --git a/protoc-gen-openapiv2/options/openapiv2.pb.go b/protoc-gen-openapiv2/options/openapiv2.pb.go index a59ba8b38a4..93fa9c90467 100644 --- a/protoc-gen-openapiv2/options/openapiv2.pb.go +++ b/protoc-gen-openapiv2/options/openapiv2.pb.go @@ -78,6 +78,63 @@ func (Scheme) EnumDescriptor() ([]byte, []int) { return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{0} } +// `Type` is a a supported HTTP header type. +// See https://swagger.io/specification/v2/#parameterType. +type HeaderParameter_Type int32 + +const ( + HeaderParameter_UNKNOWN HeaderParameter_Type = 0 + HeaderParameter_STRING HeaderParameter_Type = 1 + HeaderParameter_NUMBER HeaderParameter_Type = 2 + HeaderParameter_INTEGER HeaderParameter_Type = 3 + HeaderParameter_BOOLEAN HeaderParameter_Type = 4 +) + +// Enum value maps for HeaderParameter_Type. +var ( + HeaderParameter_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STRING", + 2: "NUMBER", + 3: "INTEGER", + 4: "BOOLEAN", + } + HeaderParameter_Type_value = map[string]int32{ + "UNKNOWN": 0, + "STRING": 1, + "NUMBER": 2, + "INTEGER": 3, + "BOOLEAN": 4, + } +) + +func (x HeaderParameter_Type) Enum() *HeaderParameter_Type { + p := new(HeaderParameter_Type) + *p = x + return p +} + +func (x HeaderParameter_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (HeaderParameter_Type) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1].Descriptor() +} + +func (HeaderParameter_Type) Type() protoreflect.EnumType { + return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1] +} + +func (x HeaderParameter_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use HeaderParameter_Type.Descriptor instead. +func (HeaderParameter_Type) EnumDescriptor() ([]byte, []int) { + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3, 0} +} + type JSONSchema_JSONSchemaSimpleTypes int32 const ( @@ -126,11 +183,11 @@ func (x JSONSchema_JSONSchemaSimpleTypes) String() string { } func (JSONSchema_JSONSchemaSimpleTypes) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1].Descriptor() + return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2].Descriptor() } func (JSONSchema_JSONSchemaSimpleTypes) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[1] + return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2] } func (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber { @@ -139,7 +196,7 @@ func (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber { // Deprecated: Use JSONSchema_JSONSchemaSimpleTypes.Descriptor instead. func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11, 0} } // The type of the security scheme. Valid values are "basic", @@ -180,11 +237,11 @@ func (x SecurityScheme_Type) String() string { } func (SecurityScheme_Type) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2].Descriptor() + return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3].Descriptor() } func (SecurityScheme_Type) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[2] + return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3] } func (x SecurityScheme_Type) Number() protoreflect.EnumNumber { @@ -193,7 +250,7 @@ func (x SecurityScheme_Type) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_Type.Descriptor instead. func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14, 0} } // The location of the API key. Valid values are "query" or "header". @@ -230,11 +287,11 @@ func (x SecurityScheme_In) String() string { } func (SecurityScheme_In) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3].Descriptor() + return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4].Descriptor() } func (SecurityScheme_In) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[3] + return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4] } func (x SecurityScheme_In) Number() protoreflect.EnumNumber { @@ -243,7 +300,7 @@ func (x SecurityScheme_In) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_In.Descriptor instead. func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 1} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14, 1} } // The flow used by the OAuth2 security scheme. Valid values are @@ -287,11 +344,11 @@ func (x SecurityScheme_Flow) String() string { } func (SecurityScheme_Flow) Descriptor() protoreflect.EnumDescriptor { - return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4].Descriptor() + return file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5].Descriptor() } func (SecurityScheme_Flow) Type() protoreflect.EnumType { - return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[4] + return &file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes[5] } func (x SecurityScheme_Flow) Number() protoreflect.EnumNumber { @@ -300,7 +357,7 @@ func (x SecurityScheme_Flow) Number() protoreflect.EnumNumber { // Deprecated: Use SecurityScheme_Flow.Descriptor instead. func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12, 2} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -586,6 +643,10 @@ type Operation struct { // extra functionality that is not covered by the standard OpenAPI Specification. // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ Extensions map[string]*structpb.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Custom parameters such as HTTP request headers. + // See: https://swagger.io/docs/specification/2-0/describing-parameters/ + // and https://swagger.io/specification/v2/#parameter-object. + Parameters *Parameters `protobuf:"bytes,14,opt,name=parameters,proto3" json:"parameters,omitempty"` } func (x *Operation) Reset() { @@ -704,6 +765,154 @@ func (x *Operation) GetExtensions() map[string]*structpb.Value { return nil } +func (x *Operation) GetParameters() *Parameters { + if x != nil { + return x.Parameters + } + return nil +} + +// `Parameters` is a representation of OpenAPI v2 specification's parameters object. +// Note: This technically breaks compatibility with the OpenAPI 2 definition structure as we only +// allow header parameters to be set here since we do not want users specifying custom non-header +// parameters beyond those inferred from the Protobuf schema. +// See: https://swagger.io/specification/v2/#parameter-object +type Parameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // `Headers` is one or more HTTP header parameter. + // See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters + Headers []*HeaderParameter `protobuf:"bytes,1,rep,name=headers,proto3" json:"headers,omitempty"` +} + +func (x *Parameters) Reset() { + *x = Parameters{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Parameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Parameters) ProtoMessage() {} + +func (x *Parameters) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Parameters.ProtoReflect.Descriptor instead. +func (*Parameters) Descriptor() ([]byte, []int) { + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{2} +} + +func (x *Parameters) GetHeaders() []*HeaderParameter { + if x != nil { + return x.Headers + } + return nil +} + +// `HeaderParameter` a HTTP header parameter. +// See: https://swagger.io/specification/v2/#parameter-object +type HeaderParameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // `Name` is the header name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // `Description` is a short description of the header. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // `Type` is the type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. + // See: https://swagger.io/specification/v2/#parameterType. + Type HeaderParameter_Type `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter_Type" json:"type,omitempty"` + // `Format` The extending format for the previously mentioned type. + Format string `protobuf:"bytes,4,opt,name=format,proto3" json:"format,omitempty"` + // `Required` indicates if the header is optional + Required bool `protobuf:"varint,5,opt,name=required,proto3" json:"required,omitempty"` +} + +func (x *HeaderParameter) Reset() { + *x = HeaderParameter{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeaderParameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeaderParameter) ProtoMessage() {} + +func (x *HeaderParameter) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HeaderParameter.ProtoReflect.Descriptor instead. +func (*HeaderParameter) Descriptor() ([]byte, []int) { + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3} +} + +func (x *HeaderParameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HeaderParameter) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *HeaderParameter) GetType() HeaderParameter_Type { + if x != nil { + return x.Type + } + return HeaderParameter_UNKNOWN +} + +func (x *HeaderParameter) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *HeaderParameter) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + // `Header` is a representation of OpenAPI v2 specification's Header object. // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#headerObject @@ -730,7 +939,7 @@ type Header struct { func (x *Header) Reset() { *x = Header{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -743,7 +952,7 @@ func (x *Header) String() string { func (*Header) ProtoMessage() {} func (x *Header) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -756,7 +965,7 @@ func (x *Header) ProtoReflect() protoreflect.Message { // Deprecated: Use Header.ProtoReflect.Descriptor instead. func (*Header) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{2} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{4} } func (x *Header) GetDescription() string { @@ -825,7 +1034,7 @@ type Response struct { func (x *Response) Reset() { *x = Response{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -838,7 +1047,7 @@ func (x *Response) String() string { func (*Response) ProtoMessage() {} func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -851,7 +1060,7 @@ func (x *Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Response.ProtoReflect.Descriptor instead. func (*Response) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{3} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{5} } func (x *Response) GetDescription() string { @@ -941,7 +1150,7 @@ type Info struct { func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -954,7 +1163,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -967,7 +1176,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{4} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{6} } func (x *Info) GetTitle() string { @@ -1056,7 +1265,7 @@ type Contact struct { func (x *Contact) Reset() { *x = Contact{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1069,7 +1278,7 @@ func (x *Contact) String() string { func (*Contact) ProtoMessage() {} func (x *Contact) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1082,7 +1291,7 @@ func (x *Contact) ProtoReflect() protoreflect.Message { // Deprecated: Use Contact.ProtoReflect.Descriptor instead. func (*Contact) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{5} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{7} } func (x *Contact) GetName() string { @@ -1138,7 +1347,7 @@ type License struct { func (x *License) Reset() { *x = License{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1360,7 @@ func (x *License) String() string { func (*License) ProtoMessage() {} func (x *License) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1373,7 @@ func (x *License) ProtoReflect() protoreflect.Message { // Deprecated: Use License.ProtoReflect.Descriptor instead. func (*License) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{6} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8} } func (x *License) GetName() string { @@ -1213,7 +1422,7 @@ type ExternalDocumentation struct { func (x *ExternalDocumentation) Reset() { *x = ExternalDocumentation{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1226,7 +1435,7 @@ func (x *ExternalDocumentation) String() string { func (*ExternalDocumentation) ProtoMessage() {} func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1239,7 +1448,7 @@ func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalDocumentation.ProtoReflect.Descriptor instead. func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{7} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9} } func (x *ExternalDocumentation) GetDescription() string { @@ -1288,7 +1497,7 @@ type Schema struct { func (x *Schema) Reset() { *x = Schema{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1301,7 +1510,7 @@ func (x *Schema) String() string { func (*Schema) ProtoMessage() {} func (x *Schema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1314,7 +1523,7 @@ func (x *Schema) ProtoReflect() protoreflect.Message { // Deprecated: Use Schema.ProtoReflect.Descriptor instead. func (*Schema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{8} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} } func (x *Schema) GetJsonSchema() *JSONSchema { @@ -1438,7 +1647,7 @@ type JSONSchema struct { func (x *JSONSchema) Reset() { *x = JSONSchema{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1451,7 +1660,7 @@ func (x *JSONSchema) String() string { func (*JSONSchema) ProtoMessage() {} func (x *JSONSchema) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1464,7 +1673,7 @@ func (x *JSONSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use JSONSchema.ProtoReflect.Descriptor instead. func (*JSONSchema) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11} } func (x *JSONSchema) GetRef() string { @@ -1676,7 +1885,7 @@ type Tag struct { func (x *Tag) Reset() { *x = Tag{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1689,7 +1898,7 @@ func (x *Tag) String() string { func (*Tag) ProtoMessage() {} func (x *Tag) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1702,7 +1911,7 @@ func (x *Tag) ProtoReflect() protoreflect.Message { // Deprecated: Use Tag.ProtoReflect.Descriptor instead. func (*Tag) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{10} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12} } func (x *Tag) GetName() string { @@ -1754,7 +1963,7 @@ type SecurityDefinitions struct { func (x *SecurityDefinitions) Reset() { *x = SecurityDefinitions{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1767,7 +1976,7 @@ func (x *SecurityDefinitions) String() string { func (*SecurityDefinitions) ProtoMessage() {} func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1780,7 +1989,7 @@ func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityDefinitions.ProtoReflect.Descriptor instead. func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13} } func (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { @@ -1840,7 +2049,7 @@ type SecurityScheme struct { func (x *SecurityScheme) Reset() { *x = SecurityScheme{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1853,7 +2062,7 @@ func (x *SecurityScheme) String() string { func (*SecurityScheme) ProtoMessage() {} func (x *SecurityScheme) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1866,7 +2075,7 @@ func (x *SecurityScheme) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityScheme.ProtoReflect.Descriptor instead. func (*SecurityScheme) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{12} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14} } func (x *SecurityScheme) GetType() SecurityScheme_Type { @@ -1958,7 +2167,7 @@ type SecurityRequirement struct { func (x *SecurityRequirement) Reset() { *x = SecurityRequirement{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1971,7 +2180,7 @@ func (x *SecurityRequirement) String() string { func (*SecurityRequirement) ProtoMessage() {} func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1984,7 +2193,7 @@ func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { // Deprecated: Use SecurityRequirement.ProtoReflect.Descriptor instead. func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{15} } func (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue { @@ -2012,7 +2221,7 @@ type Scopes struct { func (x *Scopes) Reset() { *x = Scopes{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2025,7 +2234,7 @@ func (x *Scopes) String() string { func (*Scopes) ProtoMessage() {} func (x *Scopes) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2038,7 +2247,7 @@ func (x *Scopes) ProtoReflect() protoreflect.Message { // Deprecated: Use Scopes.ProtoReflect.Descriptor instead. func (*Scopes) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{14} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{16} } func (x *Scopes) GetScope() map[string]string { @@ -2065,7 +2274,7 @@ type JSONSchema_FieldConfiguration struct { func (x *JSONSchema_FieldConfiguration) Reset() { *x = JSONSchema_FieldConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2078,7 +2287,7 @@ func (x *JSONSchema_FieldConfiguration) String() string { func (*JSONSchema_FieldConfiguration) ProtoMessage() {} func (x *JSONSchema_FieldConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2091,7 +2300,7 @@ func (x *JSONSchema_FieldConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use JSONSchema_FieldConfiguration.ProtoReflect.Descriptor instead. func (*JSONSchema_FieldConfiguration) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{9, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{11, 0} } func (x *JSONSchema_FieldConfiguration) GetPathParamName() string { @@ -2115,7 +2324,7 @@ type SecurityRequirement_SecurityRequirementValue struct { func (x *SecurityRequirement_SecurityRequirementValue) Reset() { *x = SecurityRequirement_SecurityRequirementValue{} if protoimpl.UnsafeEnabled { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2128,7 +2337,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) String() string { func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { - mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28] + mi := &file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2141,7 +2350,7 @@ func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protorefle // Deprecated: Use SecurityRequirement_SecurityRequirementValue.ProtoReflect.Descriptor instead. func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{13, 0} + return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP(), []int{15, 0} } func (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string { @@ -2228,7 +2437,7 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xff, 0x06, + 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0xd6, 0x07, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -2271,358 +2480,388 @@ var file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc = []byte{ 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, - 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, - 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, - 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0e, - 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, - 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, 0x08, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x71, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0x62, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x54, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xa3, 0x02, 0x0a, 0x0f, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, - 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x45, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, + 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, + 0x41, 0x4e, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, + 0x22, 0xd8, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x4a, 0x04, 0x08, + 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, + 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, + 0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, + 0x0e, 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, + 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0x9a, 0x05, 0x0a, 0x08, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5a, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x12, 0x5d, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x45, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x12, 0x63, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6d, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd6, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72, + 0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, + 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a, + 0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, + 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x0d, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x12, 0x4c, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, - 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, + 0x6f, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, 0x08, + 0x04, 0x10, 0x05, 0x22, 0xd7, 0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, + 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, + 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, + 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, + 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, + 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x4b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, + 0x75, 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x7a, + 0x0a, 0x13, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, - 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xaa, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x56, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a, 0x73, - 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x63, - 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x65, 0x0a, 0x0d, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x1a, + 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, + 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, + 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, + 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, + 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, + 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, + 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, + 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xd9, 0x02, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, - 0x63, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x22, 0xd7, 0x0a, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, - 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, - 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, - 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, - 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, - 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, - 0x72, 0x61, 0x79, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x12, 0x5f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x4b, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, - 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x75, - 0x6d, 0x18, 0x2e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x7a, 0x0a, - 0x13, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0a, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, + 0x63, 0x73, 0x12, 0x5e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, - 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x3c, 0x0a, 0x12, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x55, - 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, - 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, - 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x03, - 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x55, - 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x4a, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, - 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, - 0x10, 0x18, 0x4a, 0x04, 0x08, 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, - 0x08, 0x1d, 0x10, 0x1e, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x25, 0x10, 0x2a, - 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0xd9, 0x02, 0x0a, - 0x03, 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x0d, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, - 0x73, 0x12, 0x5e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x54, 0x61, 0x67, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x68, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x76, 0x0a, 0x0d, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, + 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xff, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x4c, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, 0x0a, - 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, + 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x52, + 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, + 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, + 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, - 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x49, 0x0a, 0x06, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, + 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, + 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, + 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, + 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, + 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, + 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, + 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, + 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, + 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, + 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, + 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, + 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, + 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, + 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, - 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, - 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, - 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, - 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, - 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, - 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, - 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, - 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, - 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, - 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, - 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, - 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, - 0x44, 0x45, 0x10, 0x04, 0x22, 0xf6, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, - 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, 0x18, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x9f, 0x01, 0x0a, 0x18, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, - 0x67, 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, - 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x53, - 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, 0x53, - 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, + 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, + 0x0a, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x3b, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, + 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x57, + 0x53, 0x53, 0x10, 0x04, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, + 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2637,100 +2876,106 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescGZIP() []byte { return file_protoc_gen_openapiv2_options_openapiv2_proto_rawDescData } -var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_protoc_gen_openapiv2_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_protoc_gen_openapiv2_options_openapiv2_proto_goTypes = []interface{}{ (Scheme)(0), // 0: grpc.gateway.protoc_gen_openapiv2.options.Scheme - (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - (SecurityScheme_Type)(0), // 2: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - (SecurityScheme_In)(0), // 3: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - (SecurityScheme_Flow)(0), // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger - (*Operation)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Operation - (*Header)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Header - (*Response)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Response - (*Info)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.Info - (*Contact)(nil), // 10: grpc.gateway.protoc_gen_openapiv2.options.Contact - (*License)(nil), // 11: grpc.gateway.protoc_gen_openapiv2.options.License - (*ExternalDocumentation)(nil), // 12: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - (*Schema)(nil), // 13: grpc.gateway.protoc_gen_openapiv2.options.Schema - (*JSONSchema)(nil), // 14: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - (*Tag)(nil), // 15: grpc.gateway.protoc_gen_openapiv2.options.Tag - (*SecurityDefinitions)(nil), // 16: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - (*SecurityScheme)(nil), // 17: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - (*SecurityRequirement)(nil), // 18: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - (*Scopes)(nil), // 19: grpc.gateway.protoc_gen_openapiv2.options.Scopes - nil, // 20: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - nil, // 21: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - nil, // 22: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry - nil, // 23: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - nil, // 24: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry - nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - (*JSONSchema_FieldConfiguration)(nil), // 28: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration - nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry - nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry - nil, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - (*SecurityRequirement_SecurityRequirementValue)(nil), // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - nil, // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - nil, // 35: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - (*structpb.Value)(nil), // 36: google.protobuf.Value + (HeaderParameter_Type)(0), // 1: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type + (JSONSchema_JSONSchemaSimpleTypes)(0), // 2: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes + (SecurityScheme_Type)(0), // 3: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + (SecurityScheme_In)(0), // 4: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + (SecurityScheme_Flow)(0), // 5: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + (*Swagger)(nil), // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger + (*Operation)(nil), // 7: grpc.gateway.protoc_gen_openapiv2.options.Operation + (*Parameters)(nil), // 8: grpc.gateway.protoc_gen_openapiv2.options.Parameters + (*HeaderParameter)(nil), // 9: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter + (*Header)(nil), // 10: grpc.gateway.protoc_gen_openapiv2.options.Header + (*Response)(nil), // 11: grpc.gateway.protoc_gen_openapiv2.options.Response + (*Info)(nil), // 12: grpc.gateway.protoc_gen_openapiv2.options.Info + (*Contact)(nil), // 13: grpc.gateway.protoc_gen_openapiv2.options.Contact + (*License)(nil), // 14: grpc.gateway.protoc_gen_openapiv2.options.License + (*ExternalDocumentation)(nil), // 15: grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + (*Schema)(nil), // 16: grpc.gateway.protoc_gen_openapiv2.options.Schema + (*JSONSchema)(nil), // 17: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + (*Tag)(nil), // 18: grpc.gateway.protoc_gen_openapiv2.options.Tag + (*SecurityDefinitions)(nil), // 19: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions + (*SecurityScheme)(nil), // 20: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + (*SecurityRequirement)(nil), // 21: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + (*Scopes)(nil), // 22: grpc.gateway.protoc_gen_openapiv2.options.Scopes + nil, // 23: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry + nil, // 24: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry + nil, // 25: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry + nil, // 26: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry + nil, // 27: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry + nil, // 28: grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry + nil, // 29: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry + nil, // 30: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry + (*JSONSchema_FieldConfiguration)(nil), // 31: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration + nil, // 32: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry + nil, // 33: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry + nil, // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + nil, // 35: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + nil, // 37: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + nil, // 38: grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + (*structpb.Value)(nil), // 39: google.protobuf.Value } var file_protoc_gen_openapiv2_options_openapiv2_proto_depIdxs = []int32{ - 9, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info + 12, // 0: grpc.gateway.protoc_gen_openapiv2.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info 0, // 1: grpc.gateway.protoc_gen_openapiv2.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 20, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry - 16, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions - 18, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 15, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.tags:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag - 12, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 21, // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry - 12, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 22, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry + 23, // 2: grpc.gateway.protoc_gen_openapiv2.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry + 19, // 3: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions + 21, // 4: grpc.gateway.protoc_gen_openapiv2.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + 18, // 5: grpc.gateway.protoc_gen_openapiv2.options.Swagger.tags:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag + 15, // 6: grpc.gateway.protoc_gen_openapiv2.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 24, // 7: grpc.gateway.protoc_gen_openapiv2.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry + 15, // 8: grpc.gateway.protoc_gen_openapiv2.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 25, // 9: grpc.gateway.protoc_gen_openapiv2.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry 0, // 10: grpc.gateway.protoc_gen_openapiv2.options.Operation.schemes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scheme - 18, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement - 23, // 12: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry - 13, // 13: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema - 24, // 14: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry - 25, // 15: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry - 26, // 16: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry - 10, // 17: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact - 11, // 18: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License - 27, // 19: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry - 14, // 20: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema - 12, // 21: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 1, // 22: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes - 28, // 23: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration - 29, // 24: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry - 12, // 25: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation - 30, // 26: grpc.gateway.protoc_gen_openapiv2.options.Tag.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry - 31, // 27: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry - 2, // 28: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type - 3, // 29: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In - 4, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow - 19, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes - 32, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry - 34, // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry - 35, // 34: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry - 8, // 35: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 36, // 36: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value - 8, // 37: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response - 36, // 38: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value - 7, // 39: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header - 36, // 40: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value - 36, // 41: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value - 36, // 42: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value - 36, // 43: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry.value:type_name -> google.protobuf.Value - 17, // 44: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme - 36, // 45: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value - 33, // 46: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue - 47, // [47:47] is the sub-list for method output_type - 47, // [47:47] is the sub-list for method input_type - 47, // [47:47] is the sub-list for extension type_name - 47, // [47:47] is the sub-list for extension extendee - 0, // [0:47] is the sub-list for field type_name + 21, // 11: grpc.gateway.protoc_gen_openapiv2.options.Operation.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement + 26, // 12: grpc.gateway.protoc_gen_openapiv2.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry + 8, // 13: grpc.gateway.protoc_gen_openapiv2.options.Operation.parameters:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Parameters + 9, // 14: grpc.gateway.protoc_gen_openapiv2.options.Parameters.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter + 1, // 15: grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.HeaderParameter.Type + 16, // 16: grpc.gateway.protoc_gen_openapiv2.options.Response.schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Schema + 27, // 17: grpc.gateway.protoc_gen_openapiv2.options.Response.headers:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry + 28, // 18: grpc.gateway.protoc_gen_openapiv2.options.Response.examples:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExamplesEntry + 29, // 19: grpc.gateway.protoc_gen_openapiv2.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry + 13, // 20: grpc.gateway.protoc_gen_openapiv2.options.Info.contact:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Contact + 14, // 21: grpc.gateway.protoc_gen_openapiv2.options.Info.license:type_name -> grpc.gateway.protoc_gen_openapiv2.options.License + 30, // 22: grpc.gateway.protoc_gen_openapiv2.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry + 17, // 23: grpc.gateway.protoc_gen_openapiv2.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema + 15, // 24: grpc.gateway.protoc_gen_openapiv2.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 2, // 25: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.JSONSchemaSimpleTypes + 31, // 26: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.field_configuration:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.FieldConfiguration + 32, // 27: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry + 15, // 28: grpc.gateway.protoc_gen_openapiv2.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_openapiv2.options.ExternalDocumentation + 33, // 29: grpc.gateway.protoc_gen_openapiv2.options.Tag.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry + 34, // 30: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry + 3, // 31: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Type + 4, // 32: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.In + 5, // 33: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.Flow + 22, // 34: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes + 35, // 35: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry + 37, // 36: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry + 38, // 37: grpc.gateway.protoc_gen_openapiv2.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Scopes.ScopeEntry + 11, // 38: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 39, // 39: grpc.gateway.protoc_gen_openapiv2.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 11, // 40: grpc.gateway.protoc_gen_openapiv2.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Response + 39, // 41: grpc.gateway.protoc_gen_openapiv2.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 10, // 42: grpc.gateway.protoc_gen_openapiv2.options.Response.HeadersEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.Header + 39, // 43: grpc.gateway.protoc_gen_openapiv2.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 39, // 44: grpc.gateway.protoc_gen_openapiv2.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 39, // 45: grpc.gateway.protoc_gen_openapiv2.options.JSONSchema.ExtensionsEntry.value:type_name -> google.protobuf.Value + 39, // 46: grpc.gateway.protoc_gen_openapiv2.options.Tag.ExtensionsEntry.value:type_name -> google.protobuf.Value + 20, // 47: grpc.gateway.protoc_gen_openapiv2.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme + 39, // 48: grpc.gateway.protoc_gen_openapiv2.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 36, // 49: grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_openapiv2.options.SecurityRequirement.SecurityRequirementValue + 50, // [50:50] is the sub-list for method output_type + 50, // [50:50] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_protoc_gen_openapiv2_options_openapiv2_proto_init() } @@ -2764,7 +3009,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Header); i { + switch v := v.(*Parameters); i { case 0: return &v.state case 1: @@ -2776,7 +3021,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Response); i { + switch v := v.(*HeaderParameter); i { case 0: return &v.state case 1: @@ -2788,7 +3033,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info); i { + switch v := v.(*Header); i { case 0: return &v.state case 1: @@ -2800,7 +3045,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Contact); i { + switch v := v.(*Response); i { case 0: return &v.state case 1: @@ -2812,7 +3057,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*License); i { + switch v := v.(*Info); i { case 0: return &v.state case 1: @@ -2824,7 +3069,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternalDocumentation); i { + switch v := v.(*Contact); i { case 0: return &v.state case 1: @@ -2836,7 +3081,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Schema); i { + switch v := v.(*License); i { case 0: return &v.state case 1: @@ -2848,7 +3093,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JSONSchema); i { + switch v := v.(*ExternalDocumentation); i { case 0: return &v.state case 1: @@ -2860,7 +3105,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tag); i { + switch v := v.(*Schema); i { case 0: return &v.state case 1: @@ -2872,7 +3117,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityDefinitions); i { + switch v := v.(*JSONSchema); i { case 0: return &v.state case 1: @@ -2884,7 +3129,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityScheme); i { + switch v := v.(*Tag); i { case 0: return &v.state case 1: @@ -2896,7 +3141,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityRequirement); i { + switch v := v.(*SecurityDefinitions); i { case 0: return &v.state case 1: @@ -2908,6 +3153,30 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { } } file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityScheme); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Scopes); i { case 0: return &v.state @@ -2919,7 +3188,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*JSONSchema_FieldConfiguration); i { case 0: return &v.state @@ -2931,7 +3200,7 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { return nil } } - file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_protoc_gen_openapiv2_options_openapiv2_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { case 0: return &v.state @@ -2949,8 +3218,8 @@ func file_protoc_gen_openapiv2_options_openapiv2_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_protoc_gen_openapiv2_options_openapiv2_proto_rawDesc, - NumEnums: 5, - NumMessages: 31, + NumEnums: 6, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, diff --git a/protoc-gen-openapiv2/options/openapiv2.proto b/protoc-gen-openapiv2/options/openapiv2.proto index 1ec57541b3c..ec88735f6d5 100644 --- a/protoc-gen-openapiv2/options/openapiv2.proto +++ b/protoc-gen-openapiv2/options/openapiv2.proto @@ -175,6 +175,51 @@ message Operation { // extra functionality that is not covered by the standard OpenAPI Specification. // See: https://swagger.io/docs/specification/2-0/swagger-extensions/ map extensions = 13; + // Custom parameters such as HTTP request headers. + // See: https://swagger.io/docs/specification/2-0/describing-parameters/ + // and https://swagger.io/specification/v2/#parameter-object. + Parameters parameters = 14; +} + +// `Parameters` is a representation of OpenAPI v2 specification's parameters object. +// Note: This technically breaks compatibility with the OpenAPI 2 definition structure as we only +// allow header parameters to be set here since we do not want users specifying custom non-header +// parameters beyond those inferred from the Protobuf schema. +// See: https://swagger.io/specification/v2/#parameter-object +message Parameters { + // `Headers` is one or more HTTP header parameter. + // See: https://swagger.io/docs/specification/2-0/describing-parameters/#header-parameters + repeated HeaderParameter headers = 1; +} + +// `HeaderParameter` a HTTP header parameter. +// See: https://swagger.io/specification/v2/#parameter-object +message HeaderParameter { + // `Type` is a a supported HTTP header type. + // See https://swagger.io/specification/v2/#parameterType. + enum Type { + UNKNOWN = 0; + STRING = 1; + NUMBER = 2; + INTEGER = 3; + BOOLEAN = 4; + } + + // `Name` is the header name. + string name = 1; + // `Description` is a short description of the header. + string description = 2; + // `Type` is the type of the object. The value MUST be one of "string", "number", "integer", or "boolean". The "array" type is not supported. + // See: https://swagger.io/specification/v2/#parameterType. + Type type = 3; + // `Format` The extending format for the previously mentioned type. + string format = 4; + // `Required` indicates if the header is optional + bool required = 5; + // field 6 is reserved for 'items', but in OpenAPI-specific way. + reserved 6; + // field 7 is reserved `Collection Format`. Determines the format of the array if type array is used. + reserved 7; } // `Header` is a representation of OpenAPI v2 specification's Header object. From 5676e273f698f29e8d1c7374814cd37a97f9b72e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:34:08 -0800 Subject: [PATCH 1509/1518] build(deps): bump golangci/golangci-lint-action from 3.3.0 to 3.3.1 (#3014) Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/07db5389c99593f11ad7b44463c2d4233066a9b1...0ad9a0988b3973e851ab0a07adf248ec2e100376) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c85b199353a..8498c07e824 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,7 +117,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3 - - uses: golangci/golangci-lint-action@07db5389c99593f11ad7b44463c2d4233066a9b1 # tag=v3 + - uses: golangci/golangci-lint-action@0ad9a0988b3973e851ab0a07adf248ec2e100376 # tag=v3 with: version: v1.45 args: --enable goimports From fb3f4344d4f1d8c813694275c0448a0eacb125d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:34:40 -0800 Subject: [PATCH 1510/1518] build(deps): bump nokogiri from 1.13.8 to 1.13.9 in /docs (#2964) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.8 to 1.13.9. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/v1.13.9/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.8...v1.13.9) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index a004773cbd3..c07eb8c57b9 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -128,7 +128,7 @@ GEM minima (2.0.0) minitest (5.16.3) net-dns (0.9.0) - nokogiri (1.13.8) + nokogiri (1.13.9) mini_portile2 (~> 2.8.0) racc (~> 1.4) octokit (4.25.1) From 475b8d96f7d79887691fea8a550cc207ef5183b1 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Tue, 15 Nov 2022 14:45:48 -0800 Subject: [PATCH 1511/1518] Update gorelease base --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8498c07e824..1e37c5536c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: with: go-version: 1.19 check-latest: true - - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.13.0 + - run: go run golang.org/x/exp/cmd/gorelease@latest -base=v2.14.0 proto_lint: runs-on: ubuntu-latest steps: From 68b846832a095f71910d9961b34336e853c9c7af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Nov 2022 21:11:57 +0000 Subject: [PATCH 1512/1518] fix(deps): update google.golang.org/genproto digest to 41c2ba7 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d8e0122f35c..0760a48a776 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 + google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index a8a6f821094..2e0f51701f6 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1 h1:jCw9YRd2s40X9Vxi4zKsPRvSPlHWNqadVkpbMsCPzPQ= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472 h1:kIfItBRE5gkUKpH4H5lNGciZbka1JrmRli3ArqrKFkA= +google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 8a1d0b3f884..bb9169df8c7 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1757,8 +1757,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:jCw9YRd2s40X9Vxi4zKsPRvSPlHWNqadVkpbMsCPzPQ=", - version = "v0.0.0-20221114212237-e4508ebdbee1", + sum = "h1:kIfItBRE5gkUKpH4H5lNGciZbka1JrmRli3ArqrKFkA=", + version = "v0.0.0-20221116193143-41c2ba794472", ) go_repository( name = "org_golang_google_grpc", From ad0e6c9d235144166c6570789a829660253964fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:52:33 +0000 Subject: [PATCH 1513/1518] fix(deps): update google.golang.org/genproto digest to 8f9c968 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0760a48a776..c978ba2e3eb 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472 + google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 2e0f51701f6..c3a086fc55a 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472 h1:kIfItBRE5gkUKpH4H5lNGciZbka1JrmRli3ArqrKFkA= -google.golang.org/genproto v0.0.0-20221116193143-41c2ba794472/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029 h1:zS8DNtiDX68/osEpazR86KM1vnDELdnRgpK6/fwlQTs= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index bb9169df8c7..1dd0dce8538 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1757,8 +1757,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:kIfItBRE5gkUKpH4H5lNGciZbka1JrmRli3ArqrKFkA=", - version = "v0.0.0-20221116193143-41c2ba794472", + sum = "h1:zS8DNtiDX68/osEpazR86KM1vnDELdnRgpK6/fwlQTs=", + version = "v0.0.0-20221117204609-8f9c96812029", ) go_repository( name = "org_golang_google_grpc", From 3a65bea29f28ad72711807e1b21e022b61e5a299 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:44:53 +0000 Subject: [PATCH 1514/1518] fix(deps): update google.golang.org/genproto digest to 1645502 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c978ba2e3eb..2a8edc247dd 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 - google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029 + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 google.golang.org/grpc v1.50.1 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index c3a086fc55a..0946462be53 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029 h1:zS8DNtiDX68/osEpazR86KM1vnDELdnRgpK6/fwlQTs= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/repositories.bzl b/repositories.bzl index 1dd0dce8538..fb4b3d34c6a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1757,8 +1757,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:zS8DNtiDX68/osEpazR86KM1vnDELdnRgpK6/fwlQTs=", - version = "v0.0.0-20221117204609-8f9c96812029", + sum = "h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c=", + version = "v0.0.0-20221118155620-16455021b5e6", ) go_repository( name = "org_golang_google_grpc", From b8a48c142bb37b16e86eed9df30dacccaa6a04fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Nov 2022 20:45:58 +0000 Subject: [PATCH 1515/1518] fix(deps): update module google.golang.org/grpc to v1.51.0 --- go.mod | 2 +- go.sum | 3 ++- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 2a8edc247dd..37cb00c2ea0 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( golang.org/x/oauth2 v0.2.0 golang.org/x/text v0.4.0 google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 - google.golang.org/grpc v1.50.1 + google.golang.org/grpc v1.51.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/go.sum b/go.sum index 0946462be53..ed07b71948c 100644 --- a/go.sum +++ b/go.sum @@ -994,8 +994,9 @@ google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/repositories.bzl b/repositories.bzl index fb4b3d34c6a..8029051572e 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1763,8 +1763,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=", - version = "v1.50.1", + sum = "h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=", + version = "v1.51.0", ) go_repository( From 61c88d47766f7f1c80b0412e5985829b22e27257 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 10:18:53 +0000 Subject: [PATCH 1516/1518] chore(deps): update slsa-framework/slsa-github-generator action to v1.3.0 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ff508d13628..a3c258b11fd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.2 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.3.0 with: compile-generator: true # Workaround for https://github.com/slsa-framework/slsa-github-generator/issues/1163 base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" From c3362bf2a84c56ac6a3b07cb2de151360a08f903 Mon Sep 17 00:00:00 2001 From: Sasha Melentyev Date: Tue, 22 Nov 2022 23:09:42 +0300 Subject: [PATCH 1517/1518] utilities: Add preallocate for encoded (#3024) --- utilities/trie.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/trie.go b/utilities/trie.go index af3b703d505..dd99b0ed256 100644 --- a/utilities/trie.go +++ b/utilities/trie.go @@ -40,7 +40,7 @@ func NewDoubleArray(seqs [][]string) *DoubleArray { func registerTokens(da *DoubleArray, seqs [][]string) [][]int { var result [][]int for _, seq := range seqs { - var encoded []int + encoded := make([]int, 0, len(seq)) for _, token := range seq { if _, ok := da.Encoding[token]; !ok { da.Encoding[token] = len(da.Encoding) From 0e7b2ebe117212ae651f0370d2753f237799afdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Nov 2022 19:33:47 +0000 Subject: [PATCH 1518/1518] chore(deps): update dependency io_bazel_rules_go to v0.36.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 6de9ae210b4..c7a81b0d2dd 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,10 +42,10 @@ rules_proto_toolchains() http_archive( name = "io_bazel_rules_go", - sha256 = "099a9fb96a376ccbbb7d291ed4ecbdfd42f6bc822ab77ae6f1b5cb9e914e94fa", + sha256 = "ae013bf35bd23234d1dea46b079f1e05ba74ac0321423830119d3e787ec73483", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.36.0/rules_go-v0.36.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.36.0/rules_go-v0.36.0.zip", ], )

    Y8r5=huA$W z=*p?nTbjxlYkF`{GwPQUq|=LP?Eu!Ul(p$-CQ&L>*5J9 z+D+}(`5BF?_`wUvJ~FtEtsQ zR69REe(2wi-MQH5_0OLl$iE}*taMQ>a3X)*`jmXXIcmQ>CqWimMckLVOBfx!*C+Jr zk7*p!C&b1RN=_$(5=4XW0vg*-r&3+QZgZHCY>V|s=Gkxm41<{?b+2izv}~LJ-f0Eb zaS}uW@CP+wd3*Bm^2AOy6@zzHVz(xiLgQZTS^$p!dcB*Tyeu~kH|~llsP)W-lOdwy{bHyu-oX` z%kBz=?=(QdzRJ5yqzqj+26FM@K%aMcr45{t$@>S326(7mdLSaNRN#y&cSBC#nuoj! zgZ{y+PW7g*M!)>oCU{v~s~PyPQS%?DT6wzQ%PXXhMn>x%BO@bq9i8$Dn&eQkIBM(? zu_-LKP4TebpEn+c%WQ!MdN^LUvn2lMT3`#xQ+T$ohGgyHQdv`@ihlDcd_`FC^S*ax zcfI!Z6sT=?E~p_H|H|=QKo!yb^25iY&|kNv%LMo{I=r%VSQ0<)JlXX5{4bp5`S8D_ zizi;adesQRsB35x_V?cv5*GHIujhv>#Z&~FwsQMPtSmt;Z)I)u;XU$nLya7(tC%t^0ewx2txMG6$WfJ;xfF>*cg4hB0mYEhIxzboZ~& zt=xjO3R>3Wyct*hN~)s^ueoA0=x#rU%zH-|@gWr>h)rqu5Nj3^nQ!!gYk4)P#YUe8>nXY0d4n#srcztN;pNbpqgqlr%Yxmz z2jI4-MV*G5d!pp(rvqw#gO; zgIAEI!pKJz)i}7(R9&(SVHP^RnKdLUm7p~5I!s^)lMuZbSCL=c9E9~WN^8)v*6U&b zkdCrYF>+RI%aoKCwiAVUdj90Fu#|S`phIa46@hATdzC#iFo7KC>_N}0?N|GL_l{Yf zcDv6{MNUHl?RuumBCHVi!sFn(g(nnLcwJLkGdb6qC)Zi}BJUP4TX#4KYx15$W$Yet zHDV8LOB9+`S=paUtsbnu`U7XZ5_PKDzz(b3py26MufK2{=|kJuaCG+P3F+D%DegWj zPOup+tw4-0z!p9nIAah@YQDL<^Gp&FJtn>ue-QvW>_7~?(7O&nP( zSfcQiVg7c2*H}r1-cJwk$u!-jdD_l7@TH_Z^X_)TP0oa7=F`0EVUKT(-J3rCWn*|o z*@ksc{8X@W0d*r4DHb3CyegFl(RlFVH8uq z1!QGXJg5RC4Rzg88vP7`sI&_PZe%lNZx*eu#r16U6%LnPxO8oI5(g-iOr95}oD%TC ztqSfgaZG3PGO(Y%ZG(MBQZe{W($^Mk^42BjhLNKM@jl+DZ}@x4;(-{Ug5d`viXr66 zgouTRg2*4Bj28LZ%Qqn(BMqg3S|bB29P}5=>&Xl%`?Wb|%oK8W))^0j>Xu4HY)8rQ#ihF9!8REC(8U>58V<-z=HPH z!&*3JehYw1iFi7-Kh!pK!baw<7U?sm&?1845AV9+#9PR>YQDR92>8srm6-sUU4HWz z{tbl&`rNUr7-nR&lJMG-TiC0u2^{v_-Ft7mP1fcUjiI~ON<(ufn}&dH^>PYKKeso0 zGKr7;1i|dzS!rw<9{FI67En#`or=vEUTsws3XXIsseBn$jc``<;~fweAKsZ5-d|H~ zq`r|SSu2w;7jz^Z}Pu*^4^(caY8SY=`!|t@}`iXom`6P_|p)D#BtGytwnq zfzuW0EVj%Sy1l421|LPdfZJyEtd}um!6UMgI>qsL1VoYg(K9qY<Z5UARhvY{8t+#V>VsZfyBY9vHdOd~O5Fm36@j$1-NU*&bE=y0*pJTitlW99R)*I4{o=9yh0PJ}4_@EvwD1 zZ(!d`Grl1F$AZx1ZEv`5zA4TXrvbR5yP+$wsho!orQ3{Ae0@jaF@s`_8o9j@WA;Y4rbiyvdi-0<;JeO9RN9}%q&?M7b{bdi zP9`<6iXi?_8@Qz_^8Ce^2uc63D$`o-+A}Uv%i+(OY8pEg#LADj_W-!SOpt`2Y#i$4 zW_wzMm*Nl2z$^?^pGFUy6)8^j!-jmn3%NqFWwox)BG`D+B4PnvB>qZbVQ$&j_{#R9 zp?x1*Z3=JtN9vW;ekFtD)GKPD57r0A=>_A6g}tM@+fmt^0?ms}qL)V*;Yv0dw=$HidSA%A;A;4mAI|2y59{31KfsHv7JFp8-wrf z;^GL5psq(jJF#fuCfqK8z2J&{lj|dnB)?3M7^d#jnBq8lM8pch~S{!9TO%));ZD>S3wIZCJhi7dymA zO2T>T`_V;c5V1IUqIk_jbghNeJFga3xcXczXB{=O6bewfQ_)cS(k8fey>+bidCiB^ zvPJrE!`QwWSL_X&bk)xDo13rE-v%Y*;8o4`sWE`nbTCahcX?7;xTI~Ui=y*1j5zWw z&_#C=3JNPK1)bZRdnbu*po2%}r&7c-J zn${U|%V<^rF59alKPjIRxty&F0XB z-BlBN=3PXbP%b(JEv~obziL+A{q8Wkyj^2rnc0N1&j}4MK;W1ri!fX;$7o2U`OG6d zW!8EzEyvWZzEY_=d*uUlmE}qI>lp*9#qZi7UB{Z2kYCNP3sb?P`>d6il+~v-9}w--4$^Fm2NPrhP2{H2SO5RaoB4xXpCRZ`6*g5*vC-JV#_2Ah^Ch{#^-s|Mz*FBK% zIp*AsNA2S1+HbqdZAVMRPW7cOn$3rzC7H!8JIN(yb;|J=Y-l5=#nsx=92i)_H`G9O zj1^wgE~Wfd;?n}CZSDEdbGZ=RG87lQiaL*lP?CeA^AQMY@z_oL62D_q%yy$)a0{$g z|3RnU4>`r}2kBH@jpDJa8s;(!{58^e=7gtKUawAm!q`-JU((4(T~8XF5t@us62pkh zHO?}%a5W;)!;df(EyZqZT6@)lTJ%M?B>F&ngFI3C8;1(-(XzW6>Xb2ziyD`GsRub% zj7tXXi_RFh4i>}Lyb;TtTm1QuuRgyJnVVkv@#g7xPd&znO$0-2(*1NQ_8MX%^)Ob` zi9l=&!=Yem8&vkSEj$Bp!Mh*!p``{Z+Oof6hSadN|~u__}e zf69oE$ryECw=J9fG$mx-v@uGnoum|foPOxqCmR9&UU1uZ?R(_rhv0nkId$ARZjQ4t z8t3vU+}$7xn)Yr4PkUTvkM4e>v91KE^=hk+)8O&bFFW3m`Q-9X%QSshL`3i7f<|&` zDi_)mAx3jfQLS_QW@f%-8Tu|cllW?Hp)xXbtnqUBpv3xoGu~=zqStJcn8asaIR^C~8X@^x-+UTI{@K+} zK^N4K>2A!+|B@4KO1ZE8!MJW?rdLLHG6c!fT`B?#fS-@>Fo&N-_i$$49Y+a@d~Nzg zZ>YGMahn>M%&oEr9)FksaB?uT_7oH_25tZ{?PUL z?({#I%75zub9ko%RB2jVkFkGYOw#}D5d~mW0n#pxFC0b*r*_SbBz;6bd)TGL$GAtx zQ;rk8Rc29|N7`JthJeeD)k+@=2#UTB!$c$p3{{(_xY{g+K%e&4W&C* z+S2OkbefkoH?uHK!&{og^x?C{XvML@nrO@+7Bhk!q!V;pPqYFW3z~gbmXn z=B2f+bBFdOjl6iUP3a0b)GFF>^zuA$0CMpoxREZvXj|AlMoegCt8|%`Sn+B#*EYxZ zT@s~48jjF1u*z}eYcq9ju?~2){^P>C=$I(KiP^mEf(I>zHnqC1k*}7^$A^l?*n*F# z)8&lC#b>OW;OsQF&o3?gii*^su#P!I zu&T2U`@vXj2*z>HzAcjL|17RhnOo{a%>zDSwFt^4JNp2f|0M`vAA>s#92eD_-;vs6 zht1!Qd9E*OQ9Vh8yQ(OyV>BociW-a=y~BvWpp3(jWKiUf-NpLL+jVQlof!gBKTTb? zAM)ZTDB>f-%TdyuLZ^n>VxpyXi-JO6n2%~x9zP`ReUKD+f6>dJqAk@62S6mfvn{9v z96i?2R^GCx7RQ1IOMKXKD@Wj*yT@yp;rE}rV?_?>*p6GL3TSJO zyL~`P@%57S;Pn<}&5M;Xz3&Yc$72P&lkE|A3Vqh?ZHRQ$`GI;_vBpcL(`7`oWeX+R zhw@rrFC<&;BLn*+Cvz6-2Wic@J+*K2a~LV!_%?V8zUK0Nsa+Lz`pP_o6x>~zftG@e z5FY`zj?>2`lt}LO?|O^Ib{kcRDZFz-h5)Qu6HYhL`Sfl$S)tEVrDI=~YL2Hd#B%`8 z#$O>%oJP$1AF45L(?{8s;fYPzvVx44%RhuJY+V!?JN+*5=J4ZnnUm_Aam0C0zV(x4pkR2gQE6)W=vr8iKVb%g44T z^=$?h#7BE}@S+DG3eF$Kj+@Z8?8jjYGtg+gqmT9-J}u-Ms22HBf&(0n zpM*4DVPJszjH4{yWyZ(`Epti3Z!=nbF|<+kw7Vv4Ae<`i8Tp(8^r%?B5&x4)oql0| z45U{OOX3@<(iB-L9}U2WU(tRLwO8g=ZRuU;#vU`xfN98yfxa33%EmKk_{?6Z%Ss=- zzV+<$L8{&|tLh7$t|Ez+TZK?iPFH98L7D*|jEQY%-dyJH6#wlQyjEA4g?r5j=Dw|i zrPPz4RJ4+(`jw|=Zs)=yOXiD_hdb_65s0k(j=DA8*3f4o9#dn_moELOP!aUf*dH=xgbfv7NTW@7Ej3l=%J>MSF}vzTI1we4$3 zYVdin@-<`p;kk{4om9CDl~Xcz-ia$5j;{~T@tm@>A(}IGiIXN;s7BD_9hm^@AnLFz znP;1Qd*n4F`mqLcAjxWJ-L=}3`C%OXjh}(*++mP}DE%bhe>XW6mEjZ-)oD7tv?jp| zvj=l~DZ0Bk?;C$>hnvEueYeNE?}>c6bk#nQUM`t+TGbwbJlB^x+@8rf=)u!Ek;3}| zkNF5{mz(12`(S(p6=m>n&nCv_C;sX-b>AqNQJ~? z1x}iRIx^zKrSlISvo_B~ZzE&j?>-YxXkxIsiT!&0^qze{!PLH!Id)^`8pZ>>v%j}) z`kSq0igb=DoitEx-q8vE+qGW+vG!$bfIq_wO8 z;4Vi#3qEj{>{mL&U~QVV773wlbY3(~6L`Do+IQQN+!)p@!!xU}-cdA!d@#)m_XjSW z>r792Fkb#mpx)M|Y)4`F)wi^+_0SmJ?we|NUY>TODVv_n)0LK&R_nZcZ|1ZoL^GX- z@-?${XRrS!*aHu%&*S2fwCsV7$(0lj)^lB%GT;?t#Df(nUMo4q`tMixx>sJFekk%? z{dFqhX+!rq@GWVcABf>f6Yysi=g(|$*^BEK_4>egZgG*)Q3GWZPKi_fcYyr~bQu=a zgHPCYl#YAiJQrqAv5V3}h~E%Wr%dzV8}TLXV(&Uj9es`W6yGuoxbVk>`m_h^@hDx; z<4A+ht^GvkgxgEP$?rd+;$_<3*!q$TmO{`1s325r@1F)aoI2Q&mNs`X+=t7dzTuwg zhf`}4WFK%jL!wZ5dMI5(bN{$lZ+|cIgB^fK*LckPyx_E>zufD+9@mT?_>vdnQ)X4{ zH}IDV-t*Ps;2oJf`QD>dn%2sppG~V8FyzfeCA(yRFelAP51=}4l0rLq;Y5DUvvEc= zlT4i?>|xDW#P+^e^n8esZPmvacA=lmAGQdF`MHf~wXL4e34WQydEC4EHEMG6*tWkJ zD|3=ucd6}B?urqceNcD*H$D0T*7B78Po+qUE7Tu7Jv4j>yO0oJr60_}Bggz=VHG>u z3EEuJi?{G@QT}>1UDO(l)J9XhP5twp9jutlM*2KX$xxQQqD_wv6ek-E2zsP62nAKN zYl0DXt4!g&d8OKJs?5g6`$Qg!-xAz^3EMh+aKGtkjn}xmA+cfmohNBXihW$%@uQok zdm;cXMZ1sG8l1VYA>s0Ylcl{4M)qy5<(AzftCi)xJrvs>!{}IC-> zd{E#tL-OHb4=+R4C`DbH_WUe$>g@Q|c>m<*)9AR|$p>78tXYv*=^5Ik3PuMSd8}q9Vvu~qvCZL_UXI6 z?yRy?db%W)&4<#st}u|3dGosV_@^uayk3vrsuw#1pIRieUs}W#F70rGCS^v`PeLRu zqaBp}{!gKvxiop9ARC#Xab5G4p!b7_ zUo$vys5c;Z>KwsFeSY|(kAbd5jGB@OHC55Ms7BQxQ1wors(~~~+`ermC(%A9Nn8E> z2)%!S$fbNs9c)bez&BVsnRZ^}?z)u9pb-?X7tko>u)3rLxFUtjV$&WLuBVEycQRA; zIpdT1n%4pI_k!AD^;|tS><7tn3Thwqk*c0#xT~8}JQs;BuC_j~sd!yldV<7Wc9*j2 z-}IESqtMclvKT?j6uQNK`;%>@M0B6{XM4cfc#T=+>XTlfTo`J?MW_RK$0hXa*H zod#!sJz>O;aSq=6+opWW?5trIz7HMeG@e#-J?YrI=h?#XGhV(IEuORqx#!pnKII1M zZc&;tDoJlYGjtOVM(N7D|F~@`QwIIZJUO2UNRqD@2^6P?C;H5Q38^c56Q+HE^`)Sc zNAwzBZ2Sk)I~Pkvjz^p*L{qMQ>s(0G^;X{?4ToH4^X?MQZVy&kOiY$KXDz1f9E|iYQ0p3h)Tk5`u8`oa2cYHXihd-lb)o6x*>>l)>=pT zy3E@+OHy^?p5hnDoyE3;GMwez;nK3yuwJa&c1xxQ#W#9RJx=3*UVPI-AG(E?>mA8Y zj*PLzJpb2>fkfRoA#iHOa}b7k5#oG(98zpcHlu8vpr(pKRyLmaKr4m)CCkTulq2Yp zsrD&i5F;;YImo!Q*&l4(-zzuTmb)uCk>YXyhXclmfjr+wJPbH(Gj2@-b=eEOgUkX- z%!yBOCr;-;)4m1VP2Zj23n2A85_8amN?LN)pu@OV#+vPq(70t`{QDB2;nqTAz zkt*Rx+~;n+AeK$B>2tL5K^3YEfZka+&{$5 zJtWcHAS|H*Qxe=8ytFt)C^w$zrQ`#xs>2A0jV(UMuUtFz;pvBM)xz+&V|;O^&FQos{OQ;;dFcr9wD++j0|DH%Q(saO zGfw%Zcy`66!GEhrTwq3bUnRcb6=}bh6Zg5TikuQ)*wiN9b=1_;^}KHKk^9EptCEq% zg{)u;D62>1@7_Jxe6YAL!;H9B{11iG3(KlPJ-!feh=1ZwM%P#4%Uh6O-6BV%iB;XzuXi4L7XhwKoqUWU+!yOd61!3-13UM@ z%%npKQu~((>cvz*(nzX|_1+e$-Gm{lTl-k25-VyjOLhnT(C1*AT>XTu+>z4&jSUyf zV(Z@KAKc`tuT#LqF0UVwc6e1*z8|XEE=PB~-F4)V+VSzQ?!xjHuGwFe)sEsb6BgAx zw^-fFGnH0NvU{8glUkoRkOq?ae(Do*q?<2;4AQrX){NYB)=!(`6Ze~R!pvjaHZ^ON z`y-eekxhK{r;m&K3-4FLDmd4k$F6H5B--XbQi0wLgPrBES!l~u=4WB`XK`Dw9?ATDhB3p~-Mqzy}I8&q5^;leE6)j!TY-p7&eY#Jv)sb+K zvrAGgR$o!$u0Cx_8Sbsg(!`Mviu5_7O}}d+ zp^`&-5|*vt;p%zA*E%Crv=NfhFEN&bax$+{9-mYR96xP8GNXVqII(=L0<_YF4B0b1 zquQhG4Gxz6Q%GKEUt6BzgZx_p$E=L6pC_M|3m*I#ez~z6xOtwH8v4lSXqw@FS3j2~ zZ|X;u?oz$lknUM?H848JKxev6^(w=3GI`MVXj^T^fPOV_%;)jXoP=qzU$5jqt_QlL zvC+xH!^5FYCGs$H{9@iy1uc*BF$3BI&J_(AK$G{U(hkEbjmj>Eojdb67ANtrl z=lw5LPNN>s=)KQ<0JUE1->RznwClXX$~nsh50toZ+1DiEowo}Se`|mW;;!MZWC+il zBmXsI9E|x-7JL5xS4R3Dzu7M=y63ug?GSiSh6btYJ)GhHi17O=`x+vp@@4S%&4mvG zn93x-UqzWJlByZX(G*m^Ms0QtoY^lYQE5?HOJ)5kY^?k49NIkH`RpA=xU?mdTjSTF z6uX#bEKKzOxpH{YX#ewK!|r33&R;;G%LuceQO5^WnyZqox$D{fIlaOd>HM48m4P5>{YvecRX6`!wT;iOU106yWXS8E}<`H;!xpMF;KL*@qpPshQB7*joW}JNr%nR&A-AX@*hzPjyx|Ev^uX;NDLWPNcm%zz%wn#GCkvfbS=fIn+d5kF z@+j3^{g>|Aq3p#$O{?w+JznNsIj*0Z?^aK+&ipYR`nd}w6qS$vm=Rrb;1W#+tjAg7Rf=%Q# z&B6hyGF9O@9S70r-Q40n?6)9jandgd@Z9Jgb7S^t>9;^%)I7|5X;b?-I9m&0f*L%Y zg?e043i2!|Eq&~JAyp|+E3;!2el=QSeoWEmH}|Wu(VzuNpmH6@RZM4|t*mHg6LMXq zTH;gz*O3=Xn2MvH{Uc=g=JHCS4k_JmdAyv;8}T~$;vAs&Jy$(@SR3axoPZgoef7>o z^nWsrf4r;ZDz691Hh{C=qs?F0XXzE)srvE-^@%^t0YNU&C}xf7)v@v?fmc*u6{S04 z{kda<_R5Yj`5%1hw{bzX(Gx;1Y9+Yc_%`B!nv9|w&)>51C;R+TeHEa>XeRoR?)ubz zA9?>$!Kh4(->#eV;AqxR)rjERN~d|x?=id|M3c>HNn-7TpY~-&zxuYMt;`K~-x#u9 z<$iQn(BK!67%8t-|G+==&X{!c_f534NZMgAQ%>Tr*oD>PhHy_U%z|fCmn%xz`g4mi z`lp@c;kk=MzcTc=23=T<&QEt}0gN>|;A;U^=?(2yA3`m`jsxZy)@7w?>VFhnH_KxU zll(oicF#O6%)N>`_nbNA&)Z%m2Jz)?T&eY6LlZ9#(7>^-fm)#1w{9d=Ql@2*#0lH6 z6;b(qujr}fnigg`H~QA+)lO8TD+3Os{nE9%vpp0yWZr}8fyJ+`$CM7p(Zh%jKF{@)>V6s(fqEyN|`nY6}205iywf7v+{`fEnxCdpzy9i&u?# z$US+n%2wSc(iZFC`l1Wk<@v)t1#`H^cwgL!n7xA|-_D%Z__fUBiT^K5MVa|*RZq8i zdLMDmT)le}=-(Z?KyHyikQdSKqO!7`y?y!#rS6;-oieoy6G%zf*Oc(l!ju5%V7P4b z(IXJe-`@W+jZeBfT=r$C#R8WAp!?-JkG(_M0B-M z;0xUrUJo5SVI9<9r45=UhIO)HZ&08O>J5^3Upt4?#(tj4JM7TXg82^;--VI1i#(~Z zyMQdlakk!GobV$ZLVqot2p(LI0vSuX(J)!T4L^*u)Q)H^N}lSG-a z5N9t3U%H&xZT4Pe+gX5o=&-)uH&2wrVcqH^NYCr!OJ;nhd5)p(y>QR-$?|^}^l`P`p!)$A~%; zdQPHTG*Xy{r_KrJ-2)7~`r4AlEn#8k74HJdhU;aS?bb1B&ZW-S2-cuO$zXhXQh`b4 zOL^~r*YAY`Jj!e5S!5PVt8N|PeWzSTU4vI0|ljIdE)Ty@_FhYGB z-*2Yh?pru;ZD4RFQ{sn!49|sfuFuKjaOr|?JB~jz?Oib$9^-D6vEAzCk(j1q4Vz6E zlFQ_c*7~j9(u>}BVh?wR`e8xAR@q^z|Q z!D6`lk4l@BT$HZ@xheb!7|a<7Z2_6vgx#&eu|h`&%NVYWjaH zBxv@^t);CGBRaI9kMacDdvS+nLI*bEZ&d!K!-4^ua^eJNoR48!`6d>uV$Id8)u<8C zq(ET-p4Vm1sP0)X)a=qGH*(v3Ys89q9~ozLO48GVtk5le66b(^#}gQUtgc#MVv&{N z8evc8%IE8*N>!OXKS!p)RL|h@juXGrl&^>i%1Eos?$1YOEO_j_#8cQm@N7{JeSs9w(mNR^&AINjkwVE5g%=^LN%HKe(Fbgm2`{oGf(#IA2x<;B)d+GU$8r*GK zrg21j!Zni z2u>@;?(>X;P5PPDbmpK#O*?=ZsP-Gr6QWx%U&ijC!byvIQMrkjCpDw9-3b1ZwPb~f^gofGU{ig#y;+x=S z%kSiMZSE67k><;f`l|qQ7(H7OkO)!RGH(&hl|4LZ{z$da1&W+SX>)zw=zS?zPtHxR zqQD6EMGetQvX`5=5fXe+zJ%*!IoKENT&daBeB)0-3~cV1);Q=TDQD&#kSt(GE0NQW zPc}nUs|K>Gh0>-j2lJk3!8K>1pBY|*gnim}q<~e^#no!B`SE5_>YlNdp^`k;YDk02 zVk{)B?<}t4uYyWfEXM`5Xck5zEIdLzZGOS!B~4u+pPL9;xNVxB{(I0g>8Rg$Zzdxv z5C`f=knnrVKCyI8kcUU@esgtyW(`biakFuKo#G%gf=J7=E? z*W-qKlO)!{?-CBd8J%5SHnz5f&jpz@m0klNa=oQ$kj0I>i&b-{x%rs@mu;x6NtqZI zBx{22l__#7rcnGzk~M<>bF?-=WUb@Qr}qwK{Eh1&hMfZS1pEC%U@|N zI+!rwHkNYdhyqM9>bjJZA_UjRbMZ+S^F%-31vt_UuBfneR+Pr!F;X;JzklOpCL> zOMY3bOKQ4Txh{TX-+c9a8Xvu?SPsh<6uGWFPm2#Mgl=c~e(GblI~95KM*AA@d~(vn zHUnY&aFaMX{}Zj2%{~96z4MN0GF{hx6a`V*3<3gD)Dgsj2n3`n7NjFpkfvhjH58F5 zDA-Vt8Uq0asnUDsn2{O+3ItLJAd(0nAV!)Xd`}$5J$rw%&pG>?v(`CleINhn3gLa9 zB+ql-_w~E3RMR}-GwLH~)?yV}myGJ9h8qsf+!UHOEPxvyxlcYhj96Jco4r{*E=S#pPkf@8cwXm+4;V*)F*PmeNEc1Lf zZYDCPB)bL_32C*1MRq|sLT79me*5}UEx~RX$ZT?Kaf^7iG+s;hN9%`(YnMwdjy;Dn z0kl9;K-eK`k&*uOVfVXkF^?u`?1x3whktw(;qZ%lY5fPkX4S#h-Yv+v8560X^FaOb zOclD+ja5@y=YvR{9EbL@O1F5lY@vUt?kCN{Q=9(n_0OR@QMXTg6``{f8#{}9s8{RC zi&$KGP=6+MCW)9qZ;mXpdwN>0mHjbgu9&6a7+zeF%6ko!ggCYw0NvE#Qv{`e*+sUC z31`e`;#vcV=I#+6I){o5_dJB^tcT4{B@>vtj-_l9w)D}6TzmEPC&osB7dEvWc{Nc* zEen|sgLiY!p0IpJ!LBctbUF3KovbD|OSMgK?0NW-#feSuIM=VSB&SA?lo~`G@~2%8 zvlj!5 zJ2q@TC`+rX;ryn+n2;w9*G0Us545MD0+&V)#8}~{ei6n(Uc5P+WCG`EFTUs&6wwl^&CCCpS&o3Lzz45rrXJNf=q=7 z%vW@)a_n#;7kyjXHF1fjDOL3a{vkFt6^h1zORJX8Z)3l%DWt$hC;Xl37|P_id6zcg zo-3b;nvi<+re`AI&DYFcO_sx(6G)dF3kLK? zGCX~*-+A_wRikiku9I{l?J$Y4sCWClU4GVqqu`pcDsN64evb+m5w%d{*XZKwYFvx2sS*`3Ah@h9iFcEu(YiunKKFl=VtFx*calqY(n#JvtjvM&j-Om58Ed1RKeve4-ii?YL_4hZ&U@*kn^Jm4HuDujfxDfN! zjX){2CtYn+$fa^W0%<{#EoQ2=na`HRhf+kqU~137kzLnn)V!@MNNgflwAaTcK|!mA z#?xUDJ|&lZHaQt|uOU5>RTmf|FkD2-!*a1BMrMx9=9%U?gKl+$87t^G`__!igQVLH z0mvuEd&O!SNz41PgSVf#JeAQ{^u*O{{bxq2a`tYuP@8&sz*(gJ>66Bw{0}-jTqV06 zs;cF~y$e#`RI3qkDK=#+@6#v0~~5Tp2U{T81!6~ zhU_!erO5(I`vYW$BNL42JS~5HyKG4*Xs`g2=w}iaATZuUnbEh&_{lGxL?`=_{JDJ? zr^lm{)>BPwPqozf=em{2*qp<=!V!{qmXpA5y=mqvB*{8eo9RKAZt54FHx#uoqU#17 zb)*y;e0Y*!>fRIXz*1^523meaG>sJXpz-_Ey+fp3KaeBMTc!3U+5h2oU2arkHA*MB zc?28S^$M~zOUA5enei-PKd4sY*wg?T=VtKR6=_IUfPB56Yk$MGlr53NRu%3DObG)3 z!Owfp7yYVAGMEnKO>^#r6H<1WOnaJ5!E3ISvK*{jM0k5mvh9yj^vK3poZ2F!ye`;nNzx&I~L1w z(`QsyoV-SR*FYHrb;pI|ZFHcjmSukaUWF``6+Y7^k7wO8_$)H80Ay{9>d^yKpknNnXZ1sC0#D zh8UpUrg7X|7dQS^Rjm0QgenptW_{p4v(>hz#ilPLhSuEc|0X17%9_1^)8AJrSr-=FCE=T#H~n;+aNF!94=XIp&7Fg!sV}hCquJ%pn)ZWY zW!^TYxbaQneEG-`w6WV`EjzhVK!cDET&BdKV``Q;1y@9*H>!L5EC|f?ToIo)<*d~D4Oydc+b?z?dP8S>KGpjtebWSwQ}b3n#0SX(QBM>;b1I(Td~0Af%kZ~ z0MH)LV)ZfhTBAwWo>$g{B;nG5L#W_bm;P!ehY>obh3eVmXCD*E`QZMo@uN!DkpULMm&o$vR7_$}UxXOw-8x zVbicn@nHh>zE-pT_ogYo93PFm*6h%LjX+5Ee7hGc)X@i1rk2|#|9x)fd3I0% z?kmf9gy&h``=GFQ4vXQX#-NSk?#+@Lx#tM*7wEG>&3Q*%qDCUUgma4XZJPqO@8(uM znyRb8(6E1XhtMH_gH8yyI&qFfLL$-LBGG*m36HuvV(X_b;}2bc$mtK^^>xT_^ZL@F zk}+qA>5XSf>;Y_s69q?a87LkmTpG9k zBm`xA!awGSES$2>Ni)@+M|Zl%N;}m077pI@r5`}jB^Ea7E4vj-og=ga8^wzZ3W66t zP3&J#DyM1b(zPzX!%aoarZc?{@Ppp6tbJn%UR&lo#<2IKZpU!*?+X%D_RoYdqxzeV z$;Y+$ffGE9{?8R{E{LtLffP33X5nH47Z?dRQYJ+BAd&C>>daSodqxt}fyD{KAI;ud z_#KM;R^a_@^0YJIN0FDN^zWwS{y*hc{C8L5dv@?&;>riVPn8A<5F|A0ZjB0vV#qk{1~ z!|ahsO*Pqf{_ZXfpiX)#BUbzMgq=|H18wFWD!*_FH1kVJ)Y%(mEw6TzRN05{2hIVV zfMj$mq$N9`61b8_eHp4^WAnc9xm6VR*tLgo-v!smLb;dGeO~d3#$oSq8gC}(pz`z_ z1d@{bX8`|(>1EW`nZqd7%r}uXbwWI+Q>FU9sO(N9U2+fdZ)`MEibOfEtj9i$Z)dxA zcQ_1nPqEoMe-$bD-0=Ml9rb{q%QUfZaAQWl=$3@v+QPYcUkN&zh#<4(JNEgm>HSD0 zP+3sQALzO`_*;vZ^n+M~t{BnJJkAox5mdDp(j?==pl>04TVwdJn<`&-q^!Bu4FG!R zjO4W1@d|a#rdYl#rO;>9f7AN9x!k1_2=?u-+~D^ z$5|(>g44uvd)vob<~@QQz=yzUK7I^DYI@&mmxGbo)A_uah$|Yx2<)`MRP;%g0hnN8u3Xgd4^HuMW56F*cBmYTRzyvmkQg`o zc|BLB?PHUYf82^e4PpGu#Bo7IzFTemS*V9!aK7LnI}R%rSp=D-|9IG5W%ua5e8dt5;u<@ny8=-LfHH%RAdU2}~9}E&Hn4(ZFDEsLo%SU6>tZYnMq>b53 zmhHtBPuT(hfD&v5GRA7}b~K1SVlVjqQIaerT)mjXYU00~B^s1WiFt-|zcbI1^&1#P z4Utl+2c?FKW;vDl_UQv8fgmpk`;H_eE_p=Hk~}3tEpoj2MtmG18UxSQq9>}Ywc9;~ z4l91Y8Qbux1{nNx4An&AJ(t-rbnv;;kquWKgz&<)H^<0W`z~~_o_YkB=(vv~=R8}} zJKQ{Ho)l+JmfkpMjQ9P98TbmMD_Kb$BcJ8`BQI~z@t-RWSPRfnY33T`_d01ia}+pd zg0wKDM}!?n02_&_`{tdG?Mp}PA$@-;$7Nt-|G&q_vskJrLbAjGmUFm(F!w=ihW&Y2 zwdv3KY8y7gf6#{zISuNCaur*pgJxBPV1{l8TUk7K$kk>BWz3Uf$lE;XXOTZ%()OlZ zAe?RoG6(u3jK3g2y$mqMo4^nKopgZ6mId4Ykr@Kv>lCo~@ejGGeFS>l0BxezZ1Ol^JT@c6M%Tedcjlr7a}fGMrIUY=dpM)!B8+O#*;W>S}c3UTJi ze-J*nBm9OG_*mk88gg#D?8!XvFC(@gT2J(e3N|K!>YA^`NSRh$9cb(f3EJMuVc-)Q zRLAfw_K>HO3zBOk!23zz#&Xh|u5PDt>z-u`In1>qC4vzR_{6{or(%3cGiM>#u~X9w zw>chF(Q;vGBs<=1r2+UrkedY`AaZ}e2X{gNeDK)JfFlHZ&+B?j)$-TlO_*$H&&o~w z&6@^^B^-_oCoB&V3T$W#%!CPV*d(1u!TXd~+jdqEq{$VpL5ElpF1K#s2_<%p* zAK(KuCp;AHWyC>$ts)2tt|IK)=Y7d%`|(T%@clMl#zLuuyR`KFm=KE8+>r8sgbn# zHSRHdDbvE@Z8`@s`Bt2mpx|Sm-tI^>!=cMNtT~+5!leR@q^eb7y}VP&aF;vdKjYBW z$T`)UJBPrQ%h$=Z1KG^AL#tQvFW`d<6Mu#euq^mMdmHvbKpeFb1rPslAH^?t%(skr z&aW^vdvCZC-VD&R28B^S-~&~VlJo;Uu=2UVnTp(6c}dfyU3s+O$sC;;-cS2G_`u&I zK4ZLMGZ1|LNB{(ukI%F5^91%JQ??vH=K z2N20pL>YlxP2}NKiD*ZkQ51ftds4D_%;_ZmzU|bST+Xp;;pYSMKj%&bruAx8Ha6=7 z;Lw;}r{`I~F|4?y#$5LD&n4$eu3mf4TMEu9#N!Zf)$Cdig;i67)yey-C{yp8p_i(K z+YDp^!|bal_~MoAI9Sul=Yc&Ub3q)&#}@XxMR(sTw)ypX4p?Y8m8z=8F(;fSH8j&X z4TRiWTzj@(Tt3)P;ws}a;mkvCX2I?rBf3oNI4_Oq_bWAqWte@U%x%w0 z>eHLoEQ~e$c%z9+^Q9jGU1*wh)((;;yA1OL1C36!<_bz%{_CdUwX)*_HAV7gKPb@h zYq;Wrc&6EbgT2ilEu$T##Xq-dHh<5x{%r2?Kvm`;N{O#)v}q#z^2~B|b_~cKn;F~48V}r5X+&V&5SNx+bG5m*)A$uBo@Lwg>RnUAc%by4p|v=Z zk~~AQ6R-``lVQ%~guW-20DVwTz9u1o%N%CW2gM6YLZ$ymA6$}zwE6E2fAQsLh6LIx zCz4t*mc(v_aP&us%(L()QEP?qAks%0qiF56>51`ueOI*)WvgmTeC3{1MquL*4SBT( z^u2Ah*H_nfOjP!IU4897+K)_W86-VG~* z<39J_3qM1^)*U9+XR5@i(##0YB-DuS(;b3UL6V1~>c2VFms62aP+5tg&fr}nIUw-~ zTVzf!O+{4vQ~CfKM#-5bSpN=~W38NiX!N@e{_Rlq{2x4L|E*~|bklW0x)#XK-+p{l zHr8iHKy2(^-YxzIBk$-X106LG{-e734}1yCe{)+~`+I_UNkzq}xF=8CZr!?awO^wk zTG^xKMjjEM?OH`eYyjvZo&_|?g?~;TFoWc#xm#xnn-Ur`W(QwKSO7{xbz3SX8F5ucfd>ga5-(MRN1ZG;feSPCjh%ri52O!?~&5vJyw~Shc@iNny1tBAn(u znE*0n1p3}L12aCm;w{Ru(c1y^w!(13BS)HT>gJ0r7Z&rI0ubfjc>=L5PUuj6joRnt z?zg|=1m9qdUru}{3RnwS_4+eA(o=9aMTEo)c|xh(Q=}mLghRxFl<`TtH|WdCFmFK( zW{(X*(kGsK2KG?OGjLi)i~?8cY9Y5Wi=Wirnb5`0xbfyLu z0}Q3s3E}w%jWRFkM2%Y--gq4F%}9X-o!~A<>RLO?Unl>R;r&To6ZpXzw~&xU(1?Fi z;U5G5CMGZM3OGv*{vrA-i!AOwnq_tk~xlpJ2T8F^dJK{I~b&69vMp`l*b z3>RF5do}PB1cXSz!v_QT<9X`b`Gmdg?^VWP4ERQp3QZaVR~Po|M0E<;l?LVHts357 zjXbKFHQn;6VBhn{(rz2VCjF&&}8O=u{himf5oO(~U}g$jy(9WmYl z;%YAIWf28z<|%i90hFq)4FC1$?{jBd;#Y}HO1(86Mxk=DseO|><${1DEa$8^*S7;p zPL=T3qwHT>D$ReXSB;!Baw(RYTzDX}`vtCS;?o`L?xe@vr6FGRxlmks=9$1Mi@z!4 zV${E%^@4YfBMP9`jyzXbs>Lv2o&(*)zDd6Lg&d<(CD9tBkh_PQ>PcO|&1I?zuZZ3L=O+gC7Ccn7>ZNWUU~aChonOT7B8@+s8wAx<#k< zA_I8+p~y$aCDH`JLXOa2Cv*@~_`X?QN}@Uaq0{5y(5-bdo3NY8r#%}r>~)_u(T6mQ zavrcg9Ff-E|Gbw4a&$+MSy!>F{qYzS-R$8@*&Lz|4mJ>)!$P-@N_*XTOT=-I z_v7byF>b(KnIlZ9)*7k*a6*0BXjc1Or2ZUD*l~+7uCtQtA3cOvIp2x2T08@ntk#6J z{EoU!VaKU^jxrPAg3cbIaB zYp5vBJ~j8TS5vR(W{&lZ8;db@PPmzSF**WiWh(48>HR%i{pgm;^>;oLcl3k(z+d2~ z^c--%)F_LhqIai`Oy~u&np=Tz%bTX$Um3SYHz#}|uB-~Da)?0dJJ)|QbGe0YGAQ?W zx-#_vh}+h^1#W6ET4Ka$x#6Qq9@U-87jn%&LV}u+WhLk5&#ZJWMy5Pq-dRS>rqUSy7l471u zRG@i&97^Ala^$qYX<9XquNR#43}3z_da`BDkAF~Dez1F``^gK@OU0uD#bHZ?!?$je zWD9UcR-(6Oe;pWyr!v>u!%XFE-u?=UgQIF_Cpy6d`InGzIL+CscpB+YxZA_Kot~yn zAH3Syp|K(~))L8iDP%f@JVOq9KR&_ia4oaW3ofD-+huBFjAuRuGV3};TgoWb5z2h? zTZW%vg68Z>@jPmoO_-dfwVu)&uojg4FnV1*g7B!CJ#}rt%qMzq&r#&36F9$46;SQB z%_-h!hi(1z?nL(7E{GK>*%0^if#l1#JIXxrndfNl7w=%F8oUa(^Jg7XB=2~m{d5Ii z92Cw)?d7s7IT75;yH|wAU?*+Wk8QVo+Y~;%HH^(|4AuRf_?~^|tANBqQ+>ydVM^`; zm*Osp^LC*+8ve!;KZ!z#e!%XPXF#Z$@WjIP7eUPB^ThQKH`MtgA-QJ7TS|WLo_;@j z*7-MfU~_!lQI+QXnfh^X?`5UcS&hXHJid=tRzlH5pHP^lIS+5uD)CBXyvN$pi=yeZ zOyp`@Whm+DoT^mlIoVK#>FmyHTlYcjz$8k(;s3;={+m zX?2_&seNQ3;c%T4e7SE_9g5WdD*D`_YAs7CGY2mpsZNe8D#ZRGY?#AN$4Q6NNZt-BAyZX-O#dr31$#!pZ zELCW~?D|oczo2i2Wnb`hpO5B8AQ~;~ts7BW&wZkFCtGP35KM~|-Q07B75&OY{n(ys z@|$F)T^~7RdQaxu^~%?VCiwn$fytF&AR^INwHmB>`3>@Me-a{hz~_+PR7DOc;&z8R z;bttuqJVW{2i{Dh5jfxXlwE17&R}DP5m_Sm7bhTscXcXS3ij-h*E$^qEIZf({9Lk% zVmu2mhIt7x7eKg=;wDY&t-A@}ga@k$ias5-ZTCLMx-04QUI~Vt#Y{UX zc`o>hj_*!g^r448$JRP(>Mj-QPgB&NY{cc;a>#WK6<@Z9cwrmEnT9$QhZZ>YAbv8X zz-BTts7c9YquB0beA@n%FRcUPOw)Q}@AKPH^BdSWsDhUA)lt|IUQu;KY;$etMNyzp zwbQvp`aZ2yRN=~;jORKwu4Oih+>u&+%A6EjQ(MpdOUP7U^@$P9mBKfsvHFHaTY3s) zaQ$0hghLE?KOL-5FcTWLikKnCe7&yOJS(mR{H9gpt`-^4Jb-bt`@d11f`YVd4u-N( ztvqgFLtxDhl05zbpH%OI0^>$oQn#D>(N70o?rRfxUCRy6yBx&l0)|j&r~dcNSpF;` k{11+L{-w*1n%UZUOiIe_QVFLCt5wjwV06Az+cE0@07IGN7XSbN literal 0 HcmV?d00001 diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 62a3a147115..1077b5885e7 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -9,6 +9,7 @@ package(default_visibility = ["//visibility:public"]) # gazelle:exclude flow_combination.pb.gw.go # gazelle:exclude non_standard_names.pb.gw.go # gazelle:exclude stream.pb.gw.go +# gazelle:exclude use_go_template.pb.gw.go # gazelle:exclude wrappers.pb.gw.go # gazelle:exclude response_body_service.pb.gw.go @@ -22,6 +23,7 @@ proto_library( "response_body_service.proto", "stream.proto", "unannotated_echo_service.proto", + "use_go_template.proto", "wrappers.proto", ], deps = [ diff --git a/examples/proto/examplepb/use_go_template.pb.go b/examples/proto/examplepb/use_go_template.pb.go new file mode 100644 index 00000000000..46e939310ac --- /dev/null +++ b/examples/proto/examplepb/use_go_template.pb.go @@ -0,0 +1,440 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: examples/proto/examplepb/use_go_template.proto + +package examplepb + +import ( + context "context" + fmt "fmt" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type LoginRequest struct { + // The entered username + Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + // The entered password + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LoginRequest) Reset() { *m = LoginRequest{} } +func (m *LoginRequest) String() string { return proto.CompactTextString(m) } +func (*LoginRequest) ProtoMessage() {} +func (*LoginRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_11d6ea622d77f66b, []int{0} +} + +func (m *LoginRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LoginRequest.Unmarshal(m, b) +} +func (m *LoginRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LoginRequest.Marshal(b, m, deterministic) +} +func (m *LoginRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoginRequest.Merge(m, src) +} +func (m *LoginRequest) XXX_Size() int { + return xxx_messageInfo_LoginRequest.Size(m) +} +func (m *LoginRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LoginRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LoginRequest proto.InternalMessageInfo + +func (m *LoginRequest) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func (m *LoginRequest) GetPassword() string { + if m != nil { + return m.Password + } + return "" +} + +type LoginReply struct { + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + // Whether you have access or not + Access bool `protobuf:"varint,2,opt,name=access,proto3" json:"access,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LoginReply) Reset() { *m = LoginReply{} } +func (m *LoginReply) String() string { return proto.CompactTextString(m) } +func (*LoginReply) ProtoMessage() {} +func (*LoginReply) Descriptor() ([]byte, []int) { + return fileDescriptor_11d6ea622d77f66b, []int{1} +} + +func (m *LoginReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LoginReply.Unmarshal(m, b) +} +func (m *LoginReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LoginReply.Marshal(b, m, deterministic) +} +func (m *LoginReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoginReply.Merge(m, src) +} +func (m *LoginReply) XXX_Size() int { + return xxx_messageInfo_LoginReply.Size(m) +} +func (m *LoginReply) XXX_DiscardUnknown() { + xxx_messageInfo_LoginReply.DiscardUnknown(m) +} + +var xxx_messageInfo_LoginReply proto.InternalMessageInfo + +func (m *LoginReply) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *LoginReply) GetAccess() bool { + if m != nil { + return m.Access + } + return false +} + +type LogoutRequest struct { + // The time the logout was registered + Timeoflogout string `protobuf:"bytes,1,opt,name=timeoflogout,proto3" json:"timeoflogout,omitempty"` + // This is the title + // + // This is the "Description" of field test + // you can use as many newlines as you want + // + // + // it will still format the same in the table + Test int32 `protobuf:"varint,2,opt,name=test,proto3" json:"test,omitempty"` + // This is an array + // + // It displays that using [] infront of the type + Stringarray []string `protobuf:"bytes,3,rep,name=stringarray,proto3" json:"stringarray,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogoutRequest) Reset() { *m = LogoutRequest{} } +func (m *LogoutRequest) String() string { return proto.CompactTextString(m) } +func (*LogoutRequest) ProtoMessage() {} +func (*LogoutRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_11d6ea622d77f66b, []int{2} +} + +func (m *LogoutRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogoutRequest.Unmarshal(m, b) +} +func (m *LogoutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogoutRequest.Marshal(b, m, deterministic) +} +func (m *LogoutRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogoutRequest.Merge(m, src) +} +func (m *LogoutRequest) XXX_Size() int { + return xxx_messageInfo_LogoutRequest.Size(m) +} +func (m *LogoutRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LogoutRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LogoutRequest proto.InternalMessageInfo + +func (m *LogoutRequest) GetTimeoflogout() string { + if m != nil { + return m.Timeoflogout + } + return "" +} + +func (m *LogoutRequest) GetTest() int32 { + if m != nil { + return m.Test + } + return 0 +} + +func (m *LogoutRequest) GetStringarray() []string { + if m != nil { + return m.Stringarray + } + return nil +} + +type LogoutReply struct { + // Message that tells you whether your + // logout was succesful or not + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogoutReply) Reset() { *m = LogoutReply{} } +func (m *LogoutReply) String() string { return proto.CompactTextString(m) } +func (*LogoutReply) ProtoMessage() {} +func (*LogoutReply) Descriptor() ([]byte, []int) { + return fileDescriptor_11d6ea622d77f66b, []int{3} +} + +func (m *LogoutReply) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogoutReply.Unmarshal(m, b) +} +func (m *LogoutReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogoutReply.Marshal(b, m, deterministic) +} +func (m *LogoutReply) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogoutReply.Merge(m, src) +} +func (m *LogoutReply) XXX_Size() int { + return xxx_messageInfo_LogoutReply.Size(m) +} +func (m *LogoutReply) XXX_DiscardUnknown() { + xxx_messageInfo_LogoutReply.DiscardUnknown(m) +} + +var xxx_messageInfo_LogoutReply proto.InternalMessageInfo + +func (m *LogoutReply) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func init() { + proto.RegisterType((*LoginRequest)(nil), "grpc.gateway.examples.examplepb.LoginRequest") + proto.RegisterType((*LoginReply)(nil), "grpc.gateway.examples.examplepb.LoginReply") + proto.RegisterType((*LogoutRequest)(nil), "grpc.gateway.examples.examplepb.LogoutRequest") + proto.RegisterType((*LogoutReply)(nil), "grpc.gateway.examples.examplepb.LogoutReply") +} + +func init() { + proto.RegisterFile("examples/proto/examplepb/use_go_template.proto", fileDescriptor_11d6ea622d77f66b) +} + +var fileDescriptor_11d6ea622d77f66b = []byte{ + // 360 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x31, 0x4e, 0xeb, 0x40, + 0x14, 0x94, 0x93, 0x9f, 0xfc, 0xe4, 0x25, 0xbf, 0xf8, 0x5b, 0x04, 0xcb, 0x0a, 0x22, 0xda, 0x86, + 0x28, 0x80, 0x2d, 0xa0, 0x4b, 0x41, 0x41, 0x41, 0x95, 0xca, 0x74, 0x34, 0xd1, 0xc6, 0x3c, 0x56, + 0x96, 0x6c, 0xef, 0xb2, 0xbb, 0x4e, 0x70, 0x09, 0x12, 0x27, 0xa0, 0xe3, 0x5a, 0x5c, 0x81, 0x83, + 0xa0, 0x6c, 0x6c, 0x13, 0x28, 0x20, 0x9d, 0x67, 0xe6, 0xcd, 0x78, 0x34, 0x36, 0xf8, 0xf8, 0xc0, + 0x52, 0x99, 0xa0, 0x0e, 0xa4, 0x12, 0x46, 0x04, 0x25, 0x94, 0x8b, 0x20, 0xd7, 0x38, 0xe7, 0x62, + 0x6e, 0x30, 0x95, 0x09, 0x33, 0xe8, 0x5b, 0x9d, 0x1c, 0x70, 0x25, 0x23, 0x9f, 0x33, 0x83, 0x2b, + 0x56, 0xd4, 0x66, 0xbf, 0xb6, 0x79, 0x43, 0x2e, 0x04, 0x4f, 0x30, 0x60, 0x32, 0x0e, 0x58, 0x96, + 0x09, 0xc3, 0x4c, 0x2c, 0x32, 0xbd, 0xb1, 0xd3, 0x2b, 0xe8, 0xcf, 0x04, 0x8f, 0xb3, 0x10, 0xef, + 0x73, 0xd4, 0x86, 0x78, 0xd0, 0xc9, 0x35, 0xaa, 0x8c, 0xa5, 0xe8, 0x3a, 0x23, 0x67, 0xdc, 0x0d, + 0x6b, 0xbc, 0xd6, 0x24, 0xd3, 0x7a, 0x25, 0xd4, 0xad, 0xdb, 0xd8, 0x68, 0x15, 0xa6, 0x17, 0x00, + 0x65, 0x8e, 0x4c, 0x0a, 0xe2, 0xc2, 0xdf, 0x14, 0xb5, 0x66, 0xbc, 0x0a, 0xa9, 0x20, 0x19, 0x40, + 0x9b, 0x45, 0x11, 0x6a, 0x6d, 0x13, 0x3a, 0x61, 0x89, 0x68, 0x0c, 0xff, 0x66, 0x82, 0x8b, 0xdc, + 0x54, 0x45, 0x28, 0xf4, 0x4d, 0x9c, 0xa2, 0xb8, 0x4b, 0x2c, 0x5d, 0xe6, 0x7c, 0xe1, 0x08, 0x81, + 0x3f, 0x06, 0xb5, 0xb1, 0x51, 0xad, 0xd0, 0x3e, 0x93, 0x11, 0xf4, 0xb4, 0x51, 0x71, 0xc6, 0x99, + 0x52, 0xac, 0x70, 0x9b, 0xa3, 0xe6, 0xb8, 0x1b, 0x6e, 0x53, 0xf4, 0x10, 0x7a, 0xd5, 0xab, 0x7e, + 0xec, 0x7a, 0xf6, 0xda, 0x28, 0xc7, 0xb9, 0x46, 0xb5, 0x8c, 0x23, 0x24, 0x8f, 0x0e, 0xb4, 0x2c, + 0x41, 0x4e, 0xfc, 0x5f, 0x66, 0xf7, 0xb7, 0x57, 0xf5, 0x8e, 0x76, 0x3d, 0x97, 0x49, 0x41, 0x87, + 0x4f, 0x6f, 0xef, 0x2f, 0x8d, 0x01, 0xfd, 0x1f, 0x2c, 0x4f, 0xab, 0xcf, 0x1f, 0x24, 0x6b, 0x7d, + 0xea, 0x4c, 0xc8, 0xb3, 0x03, 0xed, 0x4d, 0x7d, 0xe2, 0xef, 0x92, 0xfa, 0x39, 0xa9, 0x77, 0xbc, + 0xf3, 0xfd, 0xba, 0xc6, 0xbe, 0xad, 0xb1, 0x47, 0xc9, 0xb7, 0x1a, 0x22, 0x37, 0x53, 0x67, 0x72, + 0xd9, 0xbb, 0xe9, 0xd6, 0xbe, 0x45, 0xdb, 0xfe, 0x4c, 0xe7, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0xf3, 0xee, 0xed, 0x28, 0xbd, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// LoginServiceClient is the client API for LoginService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type LoginServiceClient interface { + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error) + // Logout + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error) +} + +type loginServiceClient struct { + cc *grpc.ClientConn +} + +func NewLoginServiceClient(cc *grpc.ClientConn) LoginServiceClient { + return &loginServiceClient{cc} +} + +func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error) { + out := new(LoginReply) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.LoginService/Login", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *loginServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error) { + out := new(LogoutReply) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.LoginService/Logout", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// LoginServiceServer is the server API for LoginService service. +type LoginServiceServer interface { + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + Login(context.Context, *LoginRequest) (*LoginReply, error) + // Logout + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + Logout(context.Context, *LogoutRequest) (*LogoutReply, error) +} + +// UnimplementedLoginServiceServer can be embedded to have forward compatible implementations. +type UnimplementedLoginServiceServer struct { +} + +func (*UnimplementedLoginServiceServer) Login(ctx context.Context, req *LoginRequest) (*LoginReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") +} +func (*UnimplementedLoginServiceServer) Logout(ctx context.Context, req *LogoutRequest) (*LogoutReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") +} + +func RegisterLoginServiceServer(s *grpc.Server, srv LoginServiceServer) { + s.RegisterService(&_LoginService_serviceDesc, srv) +} + +func _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LoginRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoginServiceServer).Login(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.LoginService/Login", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoginServiceServer).Login(ctx, req.(*LoginRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LogoutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LoginServiceServer).Logout(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.LoginService/Logout", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LoginServiceServer).Logout(ctx, req.(*LogoutRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _LoginService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.examples.examplepb.LoginService", + HandlerType: (*LoginServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Login", + Handler: _LoginService_Login_Handler, + }, + { + MethodName: "Logout", + Handler: _LoginService_Logout_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "examples/proto/examplepb/use_go_template.proto", +} diff --git a/examples/proto/examplepb/use_go_template.pb.gw.go b/examples/proto/examplepb/use_go_template.pb.gw.go new file mode 100644 index 00000000000..68236c143ee --- /dev/null +++ b/examples/proto/examplepb/use_go_template.pb.gw.go @@ -0,0 +1,241 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/proto/examplepb/use_go_template.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage + +func request_LoginService_Login_0(ctx context.Context, marshaler runtime.Marshaler, client LoginServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LoginRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Login(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LoginService_Login_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LoginRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Login(ctx, &protoReq) + return msg, metadata, err + +} + +func request_LoginService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, client LoginServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LogoutRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Logout(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LoginService_Logout_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LogoutRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Logout(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterLoginServiceHandlerServer registers the http handlers for service LoginService to "mux". +// UnaryRPC :call LoginServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LoginServiceServer) error { + + mux.Handle("POST", pattern_LoginService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LoginService_Login_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_LoginService_Login_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LoginService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LoginService_Logout_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_LoginService_Logout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterLoginServiceHandlerFromEndpoint is same as RegisterLoginServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterLoginServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterLoginServiceHandler(ctx, mux, conn) +} + +// RegisterLoginServiceHandler registers the http handlers for service LoginService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterLoginServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterLoginServiceHandlerClient(ctx, mux, NewLoginServiceClient(conn)) +} + +// RegisterLoginServiceHandlerClient registers the http handlers for service LoginService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LoginServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LoginServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "LoginServiceClient" to call the correct interceptors. +func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LoginServiceClient) error { + + mux.Handle("POST", pattern_LoginService_Login_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LoginService_Login_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_LoginService_Login_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LoginService_Logout_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LoginService_Logout_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_LoginService_Logout_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_LoginService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "login"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_LoginService_Logout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "logout"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_LoginService_Login_0 = runtime.ForwardResponseMessage + + forward_LoginService_Logout_0 = runtime.ForwardResponseMessage +) diff --git a/examples/proto/examplepb/use_go_template.proto b/examples/proto/examplepb/use_go_template.proto new file mode 100644 index 00000000000..5a1b3161630 --- /dev/null +++ b/examples/proto/examplepb/use_go_template.proto @@ -0,0 +1,85 @@ +syntax = "proto3"; +option go_package = "examplepb"; +package grpc.gateway.examples.examplepb; + +import "google/api/annotations.proto"; + +service LoginService { + // Login + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + rpc Login (LoginRequest) returns (LoginReply) { + option (google.api.http) = { + post: "/v1/example/login" + body: "*" + }; + } + + // Logout + // + // {{.MethodDescriptorProto.Name}} is a call with the method(s) {{$first := true}}{{range .Bindings}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{.HTTPMethod}}{{end}} within the "{{.Service.Name}}" service. + // It takes in "{{.RequestType.Name}}" and returns a "{{.ResponseType.Name}}". + // + // ## {{.RequestType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | --------------------------------------------------------- | ---------------------------- | {{range .RequestType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + // + // ## {{.ResponseType.Name}} + // | Field ID | Name | Type | Description | + // | ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | {{range .ResponseType.Fields}} + // | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} + rpc Logout (LogoutRequest) returns (LogoutReply) { + option (google.api.http) = { + post: "/v1/example/logout" + body: "*" + }; + } +} + +message LoginRequest { + // The entered username + string username = 1; + // The entered password + string password = 2; +} + +message LoginReply { + string message = 1; + // Whether you have access or not + bool access = 2; +} + +message LogoutRequest { + // The time the logout was registered + string timeoflogout = 1; + // This is the title + // + // This is the "Description" of field test + // you can use as many newlines as you want + // + // + // it will still format the same in the table + int32 test = 2; + // This is an array + // + // It displays that using [] infront of the type + repeated string stringarray = 3; +} + +message LogoutReply { + // Message that tells you whether your + // logout was succesful or not + string message = 1; +} \ No newline at end of file diff --git a/examples/proto/examplepb/use_go_template.swagger.json b/examples/proto/examplepb/use_go_template.swagger.json new file mode 100644 index 00000000000..61ea6b83475 --- /dev/null +++ b/examples/proto/examplepb/use_go_template.swagger.json @@ -0,0 +1,135 @@ +{ + "swagger": "2.0", + "info": { + "title": "examples/proto/examplepb/use_go_template.proto", + "version": "version not set" + }, + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/example/login": { + "post": { + "summary": "Login", + "description": "Login is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LoginRequest\" and returns a \"LoginReply\".\n\n## LoginRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | username | TYPE_STRING | The entered username | \n| 2 | password | TYPE_STRING | The entered password | \n\n## LoginReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | | \n| 2 | access | TYPE_BOOL | Whether you have access or not |", + "operationId": "Login", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbLoginReply" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbLoginRequest" + } + } + ], + "tags": [ + "LoginService" + ] + } + }, + "/v1/example/logout": { + "post": { + "summary": "Logout", + "description": "Logout is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LogoutRequest\" and returns a \"LogoutReply\".\n\n## LogoutRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | timeoflogout | TYPE_STRING | The time the logout was registered | \n| 2 | test | TYPE_INT32 | This is the title\u003cbr\u003e\u003cbr\u003eThis is the \"Description\" of field test\u003cbr\u003eyou can use as many newlines as you want\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eit will still format the same in the table | \n| 3 | stringarray | []TYPE_STRING | This is an array\u003cbr\u003e\u003cbr\u003eIt displays that using [] infront of the type | \n\n## LogoutReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | Message that tells you whether your\u003cbr\u003elogout was succesful or not |", + "operationId": "Logout", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbLogoutReply" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbLogoutRequest" + } + } + ], + "tags": [ + "LoginService" + ] + } + } + }, + "definitions": { + "examplepbLoginReply": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "access": { + "type": "boolean", + "format": "boolean", + "title": "Whether you have access or not" + } + } + }, + "examplepbLoginRequest": { + "type": "object", + "properties": { + "username": { + "type": "string", + "title": "The entered username" + }, + "password": { + "type": "string", + "title": "The entered password" + } + } + }, + "examplepbLogoutReply": { + "type": "object", + "properties": { + "message": { + "type": "string", + "title": "Message that tells you whether your\nlogout was succesful or not" + } + } + }, + "examplepbLogoutRequest": { + "type": "object", + "properties": { + "timeoflogout": { + "type": "string", + "title": "The time the logout was registered" + }, + "test": { + "type": "integer", + "format": "int32", + "description": "This is the \"Description\" of field test\nyou can use as many newlines as you want\n\n\nit will still format the same in the table", + "title": "This is the title" + }, + "stringarray": { + "type": "array", + "items": { + "type": "string" + }, + "description": "It displays that using [] infront of the type", + "title": "This is an array" + } + } + } + } +} diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 2f056364b8f..b73c123c8f9 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -71,6 +71,10 @@ type Registry struct { // allowColonFinalSegments determines whether colons are permitted // in the final segment of a path. allowColonFinalSegments bool + + // useGoTemplate determines whether you want to use GO templates + // in your protofile comments + useGoTemplate bool } type repeatedFieldSeparator struct { @@ -446,6 +450,16 @@ func (r *Registry) GetMergeFileName() string { return r.mergeFileName } +// SetUseGoTemplate sets useGoTemplate +func (r *Registry) SetUseGoTemplate(use bool) { + r.useGoTemplate = use +} + +// GetUseGoTemplate returns useGoTemplate +func (r *Registry) GetUseGoTemplate() bool { + return r.useGoTemplate +} + // sanitizePackageName replaces unallowed character in package name // with allowed character. func sanitizePackageName(pkgName string) string { diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 4f90807f0f5..26cd7ca9e51 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -53,7 +53,6 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action output_dir = "/".join([output_dir, direct_proto_srcs[0].owner.workspace_root]) output_dir = "/".join([output_dir, direct_proto_srcs[0].dirname]) - options.append("allow_merge=true") options.append("merge_file_name=%s" % ctx.attr.name) @@ -74,6 +73,9 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action swagger_files.append(swagger_file) else: for proto in direct_proto_srcs: + if proto.basename == "use_go_template.proto": + options.append("use_go_templates=true") + swagger_file = actions.declare_file( "%s.swagger.json" % proto.basename[:-len(".proto")], sibling = proto, @@ -96,7 +98,6 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action outputs = [swagger_file], arguments = [args], ) - swagger_files.append(swagger_file) return swagger_files diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 3d97207c7eb..114252d0865 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1,8 +1,10 @@ package genswagger import ( + "bytes" "encoding/json" "fmt" + "io/ioutil" "os" "reflect" "regexp" @@ -10,6 +12,7 @@ import ( "strconv" "strings" "sync" + "text/template" "github.com/golang/glog" "github.com/golang/protobuf/jsonpb" @@ -122,7 +125,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st fieldType := field.GetTypeName() if message.File != nil { comments := fieldProtoComments(reg, message, field) - if err := updateSwaggerDataFromComments(&schema, comments, false); err != nil { + if err := updateSwaggerDataFromComments(reg, &schema, message, comments, false); err != nil { return nil, err } } @@ -285,7 +288,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, }, } msgComments := protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index)) - if err := updateSwaggerDataFromComments(&schema, msgComments, false); err != nil { + if err := updateSwaggerDataFromComments(reg, &schema, msg, msgComments, false); err != nil { panic(err) } opts, err := extractSchemaOptionFromMessageDescriptor(msg.DescriptorProto) @@ -293,7 +296,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, panic(err) } if opts != nil { - protoSchema := swaggerSchemaFromProtoSchema(opts, reg, customRefs) + protoSchema := swaggerSchemaFromProtoSchema(opts, reg, customRefs, msg) // Warning: Make sure not to overwrite any fields already set on the schema type. schema.ExternalDocs = protoSchema.ExternalDocs @@ -330,7 +333,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, for _, f := range msg.Fields { fieldValue := schemaOfField(f, reg, customRefs) comments := fieldProtoComments(reg, msg, f) - if err := updateSwaggerDataFromComments(&fieldValue, comments, false); err != nil { + if err := updateSwaggerDataFromComments(reg, &fieldValue, f, comments, false); err != nil { panic(err) } @@ -461,7 +464,7 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s } if j, err := extractJSONSchemaFromFieldDescriptor(fd); err == nil { - updateSwaggerObjectFromJSONSchema(&ret, j) + updateSwaggerObjectFromJSONSchema(&ret, j, reg, f) } return ret @@ -535,7 +538,7 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r Default: defaultValue, }, } - if err := updateSwaggerDataFromComments(&enumSchemaObject, enumComments, false); err != nil { + if err := updateSwaggerDataFromComments(reg, &enumSchemaObject, enum, enumComments, false); err != nil { panic(err) } @@ -908,7 +911,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } methComments := protoComments(reg, svc.File, nil, "Method", int32(svcIdx), methProtoPath, int32(methIdx)) - if err := updateSwaggerDataFromComments(operationObject, methComments, false); err != nil { + if err := updateSwaggerDataFromComments(reg, operationObject, meth, methComments, false); err != nil { panic(err) } @@ -917,7 +920,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if err != nil { panic(err) } - operationObject.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(opts.ExternalDocs) + operationObject.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(opts.ExternalDocs, reg, meth) // TODO(ivucica): this would be better supported by looking whether the method is deprecated in the proto file operationObject.Deprecated = opts.Deprecated @@ -958,7 +961,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re for name, resp := range opts.Responses { respObj := swaggerResponseObject{ Description: resp.Description, - Schema: swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs), + Schema: swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs, meth), } if resp.Extensions != nil { exts, err := processExtensions(resp.Extensions) @@ -1048,7 +1051,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // File itself might have some comments and metadata. packageProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") packageComments := protoComments(p.reg, p.File, nil, "Package", packageProtoPath) - if err := updateSwaggerDataFromComments(&s, packageComments, true); err != nil { + if err := updateSwaggerDataFromComments(p.reg, &s, p, packageComments, true); err != nil { panic(err) } @@ -1216,7 +1219,7 @@ func applyTemplate(p param) (*swaggerObject, error) { } s.Security = newSecurity } - s.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(spb.ExternalDocs) + s.ExternalDocs = protoExternalDocumentationToSwaggerExternalDocumentation(spb.ExternalDocs, p.reg, spb) // Populate all Paths with Responses set at top level, // preferring Responses already set over those at the top level. if spb.Responses != nil { @@ -1246,7 +1249,7 @@ func applyTemplate(p param) (*swaggerObject, error) { } respMap[k] = swaggerResponseObject{ Description: v.Description, - Schema: swaggerSchemaFromProtoSchema(v.Schema, p.reg, customRefs), + Schema: swaggerSchemaFromProtoSchema(v.Schema, p.reg, customRefs, nil), } } } @@ -1300,11 +1303,16 @@ func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error // // If there is no 'Summary', the same behavior will be attempted on 'Title', // but only if the last character is not a period. -func updateSwaggerDataFromComments(swaggerObject interface{}, comment string, isPackageObject bool) error { +func updateSwaggerDataFromComments(reg *descriptor.Registry, swaggerObject interface{}, data interface{}, comment string, isPackageObject bool) error { if len(comment) == 0 { return nil } + // Checks whether the "use_go_templates" flag is set to true + if reg.GetUseGoTemplate() { + comment = goTemplateComments(comment, data, reg) + } + // Figure out what to apply changes to. swaggerObjectValue := reflect.ValueOf(swaggerObject) infoObjectValue := swaggerObjectValue.Elem().FieldByName("Info") @@ -1435,6 +1443,37 @@ func protoComments(reg *descriptor.Registry, file *descriptor.File, outers []str return "" } +func goTemplateComments(comment string, data interface{}, reg *descriptor.Registry) string { + var temp bytes.Buffer + tpl, err := template.New("").Funcs(template.FuncMap{ + // Allows importing documentation from a file + "import": func(name string) string { + file, err := ioutil.ReadFile(name) + if err != nil { + return err.Error() + } + // Runs template over imported file + return goTemplateComments(string(file), data, reg) + }, + // Grabs title and description from a field + "fieldcomments": func(msg *descriptor.Message, field *descriptor.Field) string { + return strings.Replace(fieldProtoComments(reg, msg, field), "\n", "
    ", -1) + }, + }).Parse(comment) + if err != nil { + // If there is an error parsing the templating insert the error as string in the comment + // to make it easier to debug the template error + return err.Error() + } + err = tpl.Execute(&temp, data) + if err != nil { + // If there is an error executing the templating insert the error as string in the comment + // to make it easier to debug the error + return err.Error() + } + return temp.String() +} + var messageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "MessageType") var nestedProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)), "NestedType") var packageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") @@ -1638,9 +1677,14 @@ func protoJSONSchemaToSwaggerSchemaCore(j *swagger_options.JSONSchema, reg *desc return ret } -func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_options.JSONSchema) { +func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_options.JSONSchema, reg *descriptor.Registry, data interface{}) { s.Title = j.GetTitle() s.Description = j.GetDescription() + if reg.GetUseGoTemplate() { + s.Title = goTemplateComments(s.Title, data, reg) + s.Description = goTemplateComments(s.Description, data, reg) + } + s.ReadOnly = j.GetReadOnly() s.MultipleOf = j.GetMultipleOf() s.Maximum = j.GetMaximum() @@ -1662,13 +1706,13 @@ func updateSwaggerObjectFromJSONSchema(s *swaggerSchemaObject, j *swagger_option } } -func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { +func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Registry, refs refMap, data interface{}) swaggerSchemaObject { ret := swaggerSchemaObject{ - ExternalDocs: protoExternalDocumentationToSwaggerExternalDocumentation(s.GetExternalDocs()), + ExternalDocs: protoExternalDocumentationToSwaggerExternalDocumentation(s.GetExternalDocs(), reg, data), } ret.schemaCore = protoJSONSchemaToSwaggerSchemaCore(s.GetJsonSchema(), reg, refs) - updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema()) + updateSwaggerObjectFromJSONSchema(&ret, s.GetJsonSchema(), reg, data) if s != nil && s.Example != nil { ret.Example = json.RawMessage(s.Example.Value) @@ -1712,11 +1756,15 @@ func protoJSONSchemaTypeToFormat(in []swagger_options.JSONSchema_JSONSchemaSimpl } } -func protoExternalDocumentationToSwaggerExternalDocumentation(in *swagger_options.ExternalDocumentation) *swaggerExternalDocumentationObject { +func protoExternalDocumentationToSwaggerExternalDocumentation(in *swagger_options.ExternalDocumentation, reg *descriptor.Registry, data interface{}) *swaggerExternalDocumentationObject { if in == nil { return nil } + if reg.GetUseGoTemplate() { + in.Description = goTemplateComments(in.Description, data, reg) + } + return &swaggerExternalDocumentationObject{ Description: in.Description, URL: in.Url, diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 5f0adf4f26f..27031742f87 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1674,6 +1674,7 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { comments string expectedError error expectedSwaggerObject interface{} + useGoTemplate bool }{ { descr: "empty comments", @@ -1769,12 +1770,47 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { comments: "Any comment", expectedError: errors.New("no description nor summary property"), }, + { + descr: "without use_go_template", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "First line", + Description: "{{import \"documentation.md\"}}", + }, + comments: "First line\n\n{{import \"documentation.md\"}}", + expectedError: nil, + }, + { + descr: "error with use_go_template", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "First line", + Description: "open noneexistingfile.txt: no such file or directory", + }, + comments: "First line\n\n{{import \"noneexistingfile.txt\"}}", + expectedError: nil, + useGoTemplate: true, + }, + { + descr: "template with use_go_template", + swaggerObject: &swaggerSchemaObject{}, + expectedSwaggerObject: &swaggerSchemaObject{ + Title: "Template", + Description: `Description "which means nothing"`, + }, + comments: "Template\n\nDescription {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + expectedError: nil, + useGoTemplate: true, + }, } for _, test := range tests { t.Run(test.descr, func(t *testing.T) { - err := updateSwaggerDataFromComments(test.swaggerObject, test.comments, false) - + reg := descriptor.NewRegistry() + if test.useGoTemplate { + reg.SetUseGoTemplate(true) + } + err := updateSwaggerDataFromComments(reg, test.swaggerObject, nil, test.comments, false) if test.expectedError == nil { if err != nil { t.Errorf("unexpected error '%v'", err) @@ -1796,3 +1832,128 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { }) } } + +func TestMessageOptionsWithGoTemplate(t *testing.T) { + tests := []struct { + descr string + msgDescs []*protodescriptor.DescriptorProto + schema map[string]swagger_options.Schema // per-message schema to add + defs swaggerDefinitionsObject + useGoTemplate bool + }{ + { + descr: "external docs option", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + JsonSchema: &swagger_options.JSONSchema{ + Title: "{{.Name}}", + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + }, + ExternalDocs: &swagger_options.ExternalDocumentation{ + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + }, + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + Title: "Message", + Description: `Description "which means nothing"`, + ExternalDocs: &swaggerExternalDocumentationObject{ + Description: `Description "which means nothing"`, + }, + }, + }, + useGoTemplate: true, + }, + { + descr: "external docs option", + msgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + }, + schema: map[string]swagger_options.Schema{ + "Message": swagger_options.Schema{ + JsonSchema: &swagger_options.JSONSchema{ + Title: "{{.Name}}", + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + }, + ExternalDocs: &swagger_options.ExternalDocumentation{ + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + }, + }, + }, + defs: map[string]swaggerSchemaObject{ + "Message": swaggerSchemaObject{ + schemaCore: schemaCore{ + Type: "object", + }, + Title: "{{.Name}}", + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + ExternalDocs: &swaggerExternalDocumentationObject{ + Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", + }, + }, + }, + useGoTemplate: false, + }, + } + + for _, test := range tests { + t.Run(test.descr, func(t *testing.T) { + + msgs := []*descriptor.Message{} + for _, msgdesc := range test.msgDescs { + msgdesc.Options = &protodescriptor.MessageOptions{} + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + + reg := descriptor.NewRegistry() + reg.SetUseGoTemplate(test.useGoTemplate) + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.msgDescs, + EnumType: []*protodescriptor.EnumDescriptorProto{}, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + msgMap := map[string]*descriptor.Message{} + for _, d := range test.msgDescs { + name := d.GetName() + msg, err := reg.LookupMsg("example", name) + if err != nil { + t.Fatalf("lookup message %v: %v", name, err) + } + msgMap[msg.FQMN()] = msg + + if schema, ok := test.schema[name]; ok { + err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) + if err != nil { + t.Fatalf("SetExtension(%s, ...) returned error: %v", msg, err) + } + } + } + + refs := make(refMap) + actual := make(swaggerDefinitionsObject) + renderMessagesAsDefinition(msgMap, actual, reg, refs) + + if !reflect.DeepEqual(actual, test.defs) { + t.Errorf("Expected renderMessagesAsDefinition() to add defs %+v, not %+v", test.defs, actual) + } + }) + } +} diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 237e4604983..9befc2544f4 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -27,6 +27,7 @@ var ( allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") useFQNForSwaggerName = flag.Bool("fqn_for_swagger_name", false, "if set, the object's swagger names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") + useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") ) // Variables set by goreleaser at build time @@ -78,6 +79,7 @@ func main() { reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) reg.SetIncludePackageInTags(*includePackageInTags) reg.SetUseFQNForSwaggerName(*useFQNForSwaggerName) + reg.SetUseGoTemplate(*useGoTemplate) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From 55de1dd98b5fa1612f8157a102e72f5517782463 Mon Sep 17 00:00:00 2001 From: Dan Muller Date: Mon, 28 Oct 2019 14:36:38 -0600 Subject: [PATCH 0231/1518] fix(protoc-gen-swagger): Windows compatibility Inspired by protobuf.bzl from the main bazel repo: https://github.com/bazelbuild/bazel/blob/deeeba3fc8003cbbcc73e04f14fc5b5275e72e5d/third_party/protobuf/3.6.1/protobuf.bzl#L108 This PR introducing a windows mapping from protoc-gen-swagger to the binaries actual path. --- protoc-gen-swagger/defs.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 26cd7ca9e51..4dfca37fdac 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -57,7 +57,7 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action options.append("merge_file_name=%s" % ctx.attr.name) args = actions.args() - args.add("--plugin=%s" % protoc_gen_swagger.path) + args.add("--plugin=protoc-gen-swagger=%s" % protoc_gen_swagger.path) args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) args.add_all(["-I%s" % include for include in includes]) args.add_all([src.path for src in direct_proto_srcs]) @@ -86,7 +86,7 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action output_dir = "/".join([output_dir, proto.owner.workspace_root]) args = actions.args() - args.add("--plugin=%s" % protoc_gen_swagger.path) + args.add("--plugin=protoc-gen-swagger=%s" % protoc_gen_swagger.path) args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) args.add_all(["-I%s" % include for include in includes]) args.add(proto.path) From 69669120b0e010b88291cd9d24761297c2a17582 Mon Sep 17 00:00:00 2001 From: ch3rub1m Date: Tue, 27 Aug 2019 16:53:50 +0800 Subject: [PATCH 0232/1518] Fix templateToSwaggerPath generates invalid path --- protoc-gen-swagger/genswagger/template.go | 35 +++++++++++++++++-- .../genswagger/template_test.go | 21 +++++------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 114252d0865..a5548f3e46e 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "net/url" "os" "reflect" "regexp" @@ -17,9 +18,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" - structpb "github.com/golang/protobuf/ptypes/struct" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" + structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -678,13 +679,18 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // Parts is now an array of segments of the path. Interestingly, since the // syntax for this subsection CAN be handled by a regexp since it has no // memory. + keyre := regexp.MustCompile("{(.*)}") for index, part := range parts { // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. prefix := canRegexp.ReplaceAllString(part, "$1") if isResourceName(prefix) { - continue + sm := keyre.FindStringSubmatch(part) + key := sm[1] + esckey := url.PathEscape(key) + parts[index] = keyre.ReplaceAllString(part, fmt.Sprintf("{%s}", esckey)) + } else { + parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } - parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } return strings.Join(parts, "/") @@ -699,11 +705,31 @@ func isResourceName(prefix string) bool { return field == "parent" || field == "name" } +func extractResourceName(path string) map[string]string { + m := map[string]string{} + keyre := regexp.MustCompile("{(.*)}") + sm := keyre.FindStringSubmatch(path) + count := len(sm) + for i := 0; i < count; i++ { + key := sm[1] + parts := strings.Split(key, "=") + label := parts[0] + parts = strings.Split(label, ".") + l := len(parts) + field := parts[l-1] + if field == "parent" || field == "name" { + m[label] = key + } + } + return m +} + func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { for methIdx, meth := range svc.Methods { for bIdx, b := range meth.Bindings { + pathParamMap := extractResourceName(templateToSwaggerPath(b.PathTmpl.Template, reg)) // Iterate over all the swagger parameters parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { @@ -771,6 +797,9 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if reg.GetUseJSONNamesForFields() { parameterString = lowerCamelCase(parameterString) } + if esckey, ok := pathParamMap[parameterString]; ok { + parameterString = esckey + } parameters = append(parameters, swaggerParameterObject{ Name: parameterString, Description: desc, diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 27031742f87..8768830a8d0 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1050,16 +1050,17 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, - {"/{name=prefix/*}", "/{name=prefix/*}"}, - {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1/*/prefix2/*}"}, - {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, - {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, - {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, - {"/{name=prefix/*}:customMethod", "/{name=prefix/*}:customMethod"}, - {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1/*/prefix2/*}:customMethod"}, - {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix/*}:customMethod"}, - {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, - {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, + {"/{name=prefix/*}", "/{name=prefix%2F%2A}"}, + {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, + {"/{parent=prefix1/*}/{name=prefix2/*}", "/{parent=prefix1%2F%2A}/{name=prefix2%2F%2A}"}, + {"/{user.name=prefix/*}", "/{user.name=prefix%2F%2A}"}, + {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, + {"/{parent=prefix/*}/children", "/{parent=prefix%2F%2A}/children"}, + {"/{name=prefix/*}:customMethod", "/{name=prefix%2F%2A}:customMethod"}, + {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, + {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix%2F%2A}:customMethod"}, + {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, + {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix%2F%2A}/children:customMethod"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) From 58a91c2b3020ee25e5d3cf49cf7d342544ab773d Mon Sep 17 00:00:00 2001 From: Prateek Malhotra Date: Fri, 1 Nov 2019 10:32:09 -0400 Subject: [PATCH 0233/1518] annotations: Sort import order. --- protoc-gen-swagger/options/annotations.pb.go | 32 ++++++++++---------- protoc-gen-swagger/options/annotations.proto | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index 851af51231a..651400277ef 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -84,22 +84,22 @@ var fileDescriptor_a6a34ca6badab664 = []byte{ 0x14, 0xc5, 0xc3, 0xe6, 0xe5, 0xa5, 0xef, 0xa9, 0x58, 0x37, 0x86, 0xf8, 0x87, 0x9d, 0xc6, 0xc0, 0x8c, 0x81, 0x5d, 0x77, 0x6a, 0xe2, 0xc2, 0x44, 0x49, 0x0a, 0x2b, 0x37, 0x64, 0x18, 0x2e, 0x97, 0x49, 0x4a, 0xef, 0x64, 0x66, 0x80, 0x90, 0xb0, 0xf4, 0x13, 0xf8, 0x89, 0x8d, 0xd3, 0xd2, 0x9a, - 0x8a, 0xa6, 0xbb, 0xde, 0xdb, 0x39, 0xe7, 0x77, 0x7a, 0x3a, 0x41, 0x47, 0x1b, 0x72, 0x24, 0xbb, + 0x8a, 0xa6, 0xbb, 0xce, 0xe9, 0xbd, 0xe7, 0x77, 0x7a, 0x3a, 0x41, 0x47, 0x1b, 0x72, 0x24, 0xbb, 0x08, 0x69, 0xd7, 0xae, 0x05, 0x22, 0x18, 0x4e, 0xda, 0x29, 0x4a, 0x2d, 0x17, 0x69, 0x4a, 0x4e, - 0xf8, 0x67, 0xe6, 0x8f, 0x85, 0x57, 0x68, 0xb4, 0x64, 0x28, 0x1c, 0xac, 0xc5, 0x26, 0xdb, 0xc9, - 0x31, 0x42, 0x3a, 0xce, 0xa5, 0x2c, 0x97, 0xb6, 0x6e, 0x7e, 0xb1, 0x25, 0x0d, 0xa9, 0xd0, 0x6a, - 0xd5, 0xcb, 0x0c, 0x5a, 0x6d, 0x24, 0xc2, 0x04, 0xb8, 0x9f, 0x26, 0xcb, 0x19, 0x9f, 0x82, 0x95, - 0x46, 0x69, 0x47, 0x26, 0x3b, 0x11, 0x6d, 0x83, 0xe3, 0x42, 0xb4, 0x43, 0x85, 0x67, 0x2c, 0xd3, - 0xb1, 0x9d, 0x8e, 0x3d, 0xaa, 0x04, 0x06, 0x19, 0xe4, 0xf4, 0xfd, 0x6f, 0xbb, 0x71, 0xfd, 0xaf, - 0x77, 0xcb, 0x6a, 0x26, 0x66, 0xc3, 0x6c, 0x8e, 0x9b, 0x05, 0x29, 0xdf, 0x44, 0x6f, 0x8d, 0xe0, + 0xf8, 0x67, 0xe6, 0xc7, 0xc2, 0x2b, 0x34, 0x5a, 0x32, 0x14, 0x0e, 0xd6, 0x62, 0x93, 0x69, 0x72, + 0x8c, 0x90, 0x8e, 0xf3, 0x55, 0x96, 0xaf, 0xb6, 0xda, 0x48, 0x84, 0x09, 0x70, 0x3f, 0x32, 0x59, + 0xce, 0xf8, 0x14, 0xac, 0x34, 0x4a, 0x3b, 0x32, 0xd9, 0x5a, 0xeb, 0xe6, 0x17, 0x30, 0x69, 0x48, + 0x85, 0x56, 0xab, 0x5e, 0x36, 0x1b, 0x6d, 0x83, 0xe3, 0x42, 0xda, 0xa1, 0xc2, 0x33, 0x96, 0x31, + 0xd8, 0x8e, 0xc1, 0x1e, 0x55, 0x02, 0x83, 0xcc, 0xe2, 0xf4, 0xfd, 0x6f, 0xbb, 0x71, 0xfd, 0xaf, + 0x77, 0xcb, 0x6a, 0x26, 0x66, 0xc3, 0xec, 0x1c, 0x37, 0x0b, 0x52, 0xae, 0x44, 0x6f, 0x8d, 0xe0, 0xa4, 0xc4, 0x93, 0x06, 0xe3, 0x3b, 0x09, 0x2f, 0xbe, 0x05, 0x78, 0x06, 0x37, 0xa7, 0x69, 0x25, - 0x42, 0xaf, 0x76, 0x84, 0xc1, 0xce, 0x3a, 0x0e, 0x0b, 0x5e, 0xb1, 0x8b, 0xb6, 0x41, 0xf3, 0x4b, - 0x09, 0x72, 0x0e, 0x0b, 0x11, 0x5e, 0xee, 0x89, 0x60, 0xad, 0xc0, 0x6a, 0x0d, 0xbc, 0x7e, 0x0d, - 0xde, 0x38, 0x3e, 0x2a, 0x5b, 0xf0, 0x8b, 0xc8, 0x06, 0x07, 0x25, 0xdd, 0x09, 0xdc, 0x83, 0x1e, - 0x82, 0x59, 0x29, 0x59, 0x45, 0x77, 0x6a, 0xa3, 0x47, 0x02, 0xe3, 0xff, 0x05, 0x64, 0x24, 0x30, - 0xda, 0x06, 0x65, 0x8e, 0xf1, 0x4c, 0x41, 0x32, 0x0d, 0xcf, 0xf7, 0xfc, 0x75, 0x48, 0xaa, 0x9d, - 0xf7, 0x6b, 0x43, 0x9f, 0x86, 0x83, 0x97, 0xfc, 0x9b, 0x0f, 0x0b, 0x96, 0xb7, 0xbc, 0x7f, 0x78, - 0xbd, 0x43, 0xe5, 0xe6, 0xcb, 0x09, 0x93, 0xb4, 0xe0, 0x9f, 0x86, 0x5d, 0x90, 0x64, 0x37, 0xd6, - 0x41, 0x3e, 0xe6, 0xfe, 0xfc, 0xe7, 0xcb, 0x3e, 0xf9, 0xe3, 0xdf, 0xf5, 0x3f, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x4b, 0xc4, 0x41, 0xfb, 0x68, 0x03, 0x00, 0x00, + 0x42, 0xaf, 0x76, 0x84, 0xc1, 0xce, 0x3a, 0x0e, 0x0b, 0x5e, 0xa1, 0x45, 0xdb, 0xa0, 0xf9, 0xa5, + 0x04, 0x39, 0x87, 0x85, 0x08, 0x2f, 0xf7, 0x44, 0xb0, 0x56, 0x60, 0xb5, 0x06, 0x5e, 0xbf, 0x06, + 0x6f, 0x1c, 0x1f, 0x95, 0x2d, 0x78, 0x21, 0xb2, 0xc1, 0x41, 0x49, 0x77, 0x02, 0xf7, 0xa0, 0x87, + 0x60, 0x56, 0x4a, 0x56, 0xd1, 0x9d, 0xda, 0xe8, 0x91, 0xc0, 0xf8, 0x7f, 0x01, 0x19, 0x09, 0x8c, + 0xb6, 0x41, 0x99, 0x63, 0x3c, 0x53, 0x90, 0x4c, 0xc3, 0xf3, 0x3d, 0x7f, 0x1d, 0x92, 0x6a, 0xe7, + 0xfd, 0xda, 0xd0, 0xa7, 0xe1, 0xe0, 0x25, 0xff, 0xe6, 0xc3, 0x82, 0xe5, 0x2d, 0xef, 0x1f, 0x5e, + 0xef, 0x50, 0xb9, 0xf9, 0x72, 0xc2, 0x24, 0x2d, 0xf8, 0xa7, 0x61, 0x17, 0x24, 0xd9, 0x8d, 0x75, + 0x90, 0x1f, 0x73, 0x7f, 0xfe, 0xf3, 0x55, 0x9e, 0xfc, 0xf1, 0xef, 0xfa, 0x1f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x59, 0x78, 0xb0, 0x03, 0x68, 0x03, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/annotations.proto b/protoc-gen-swagger/options/annotations.proto index 2c0f594470e..5151fd5a652 100644 --- a/protoc-gen-swagger/options/annotations.proto +++ b/protoc-gen-swagger/options/annotations.proto @@ -4,8 +4,8 @@ package grpc.gateway.protoc_gen_swagger.options; option go_package = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"; -import "protoc-gen-swagger/options/openapiv2.proto"; import "google/protobuf/descriptor.proto"; +import "protoc-gen-swagger/options/openapiv2.proto"; extend google.protobuf.FileOptions { // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. From 9a54d888ef9c48d7960abb76c135ce670653aed3 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 3 Nov 2019 21:08:40 +0000 Subject: [PATCH 0234/1518] Update dockerfile and regenerate files Fixes #1073 --- .circleci/Dockerfile | 4 ++-- .circleci/README.md | 2 +- CONTRIBUTING.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c6cf118fc18..c44eac5c23d 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.13.1 +FROM golang:1.13.4 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). @@ -17,7 +17,7 @@ RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' chmod +x /usr/local/bin/swagger-codegen # Install protoc -ENV PROTOC_VERSION=3.9.2 +ENV PROTOC_VERSION=3.10.1 RUN wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ diff --git a/.circleci/README.md b/.circleci/README.md index aff8c5cf78c..c6ce14672fb 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -10,7 +10,7 @@ Great, it should be as simple as thus (run from the root of the directory): $ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ - make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' + make examples' ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 09951e3c4f9..8772fd3ad2a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,7 +27,7 @@ Great, it should be as simple as thus (run from the root of the directory): docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ - make examples SWAGGER_CODEGEN="${SWAGGER_CODEGEN}"' + make examples' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' ``` From 7dddcb1aacd290920dcd078eca96d90b9c1b2355 Mon Sep 17 00:00:00 2001 From: Gordon Schneider <1594377+ailurarctos@users.noreply.github.com> Date: Mon, 4 Nov 2019 08:41:47 +0900 Subject: [PATCH 0235/1518] Support creating a Swagger def with no schemes Make it so if you do not specify the schemes then no schemes will be present in the generated Swagger definition. The OpenAPIv2 spec says this means to use the same scheme that was used to access the Swagger definition itself. Fixes #1069 --- examples/clients/echo/api/swagger.yaml | 3 --- examples/clients/echo/configuration.go | 2 +- examples/clients/responsebody/api/swagger.yaml | 3 --- examples/clients/responsebody/configuration.go | 2 +- examples/clients/responsebody/docs/ResponseBodyServiceApi.md | 2 +- examples/clients/unannotatedecho/api/swagger.yaml | 3 --- examples/clients/unannotatedecho/configuration.go | 2 +- examples/proto/examplepb/echo_service.swagger.json | 4 ---- examples/proto/examplepb/response_body_service.swagger.json | 4 ---- examples/proto/examplepb/stream.swagger.json | 4 ---- .../proto/examplepb/unannotated_echo_service.swagger.json | 4 ---- examples/proto/examplepb/use_go_template.swagger.json | 4 ---- examples/proto/examplepb/wrappers.swagger.json | 4 ---- protoc-gen-swagger/genswagger/template.go | 1 - protoc-gen-swagger/genswagger/template_test.go | 4 ++-- protoc-gen-swagger/genswagger/types.go | 2 +- 16 files changed, 7 insertions(+), 41 deletions(-) diff --git a/examples/clients/echo/api/swagger.yaml b/examples/clients/echo/api/swagger.yaml index 884e7ad6bfb..9d28a1ab99b 100644 --- a/examples/clients/echo/api/swagger.yaml +++ b/examples/clients/echo/api/swagger.yaml @@ -4,9 +4,6 @@ info: description: "Echo Service API consists of a single service which returns\na message." version: "version not set" title: "Echo Service" -schemes: -- "http" -- "https" consumes: - "application/json" produces: diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 5f730c12ab7..6a44e4c9cf6 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -60,7 +60,7 @@ type Configuration struct { func NewConfiguration() *Configuration { cfg := &Configuration{ - BasePath: "http://localhost", + BasePath: "https://localhost", DefaultHeader: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", } diff --git a/examples/clients/responsebody/api/swagger.yaml b/examples/clients/responsebody/api/swagger.yaml index ca61b71ad42..b94a7273d45 100644 --- a/examples/clients/responsebody/api/swagger.yaml +++ b/examples/clients/responsebody/api/swagger.yaml @@ -3,9 +3,6 @@ swagger: "2.0" info: version: "version not set" title: "examples/proto/examplepb/response_body_service.proto" -schemes: -- "http" -- "https" consumes: - "application/json" produces: diff --git a/examples/clients/responsebody/configuration.go b/examples/clients/responsebody/configuration.go index 6a98b8dcfe0..cae2bff96f6 100644 --- a/examples/clients/responsebody/configuration.go +++ b/examples/clients/responsebody/configuration.go @@ -60,7 +60,7 @@ type Configuration struct { func NewConfiguration() *Configuration { cfg := &Configuration{ - BasePath: "http://localhost", + BasePath: "https://localhost", DefaultHeader: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", } diff --git a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md index 7645bba50b5..914a90f0113 100644 --- a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md +++ b/examples/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -1,6 +1,6 @@ # \ResponseBodyServiceApi -All URIs are relative to *http://localhost* +All URIs are relative to *https://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- diff --git a/examples/clients/unannotatedecho/api/swagger.yaml b/examples/clients/unannotatedecho/api/swagger.yaml index ca2d21a58b6..3a439d45a10 100644 --- a/examples/clients/unannotatedecho/api/swagger.yaml +++ b/examples/clients/unannotatedecho/api/swagger.yaml @@ -7,9 +7,6 @@ info: \ service which returns\na message." version: "version not set" title: "examples/proto/examplepb/unannotated_echo_service.proto" -schemes: -- "http" -- "https" consumes: - "application/json" produces: diff --git a/examples/clients/unannotatedecho/configuration.go b/examples/clients/unannotatedecho/configuration.go index 1d0dadff96c..fe53e0374ad 100644 --- a/examples/clients/unannotatedecho/configuration.go +++ b/examples/clients/unannotatedecho/configuration.go @@ -60,7 +60,7 @@ type Configuration struct { func NewConfiguration() *Configuration { cfg := &Configuration{ - BasePath: "http://localhost", + BasePath: "https://localhost", DefaultHeader: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", } diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index f1687bccf64..45187c3e463 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -5,10 +5,6 @@ "description": "Echo Service API consists of a single service which returns\na message.", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index 820129e93eb..ea0ced6dcdb 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -4,10 +4,6 @@ "title": "examples/proto/examplepb/response_body_service.proto", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index e9fcd5ed5ee..69be3d81225 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -4,10 +4,6 @@ "title": "examples/proto/examplepb/stream.proto", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/examples/proto/examplepb/unannotated_echo_service.swagger.json b/examples/proto/examplepb/unannotated_echo_service.swagger.json index 48825985057..26dc292cc17 100644 --- a/examples/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/proto/examplepb/unannotated_echo_service.swagger.json @@ -5,10 +5,6 @@ "description": "Unannotated Echo Service\nSimilar to echo_service.proto but without annotations. See\nunannotated_echo_service.yaml for the equivalent of the annotations in\ngRPC API configuration format.\n\nEcho Service API consists of a single service which returns\na message.", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/examples/proto/examplepb/use_go_template.swagger.json b/examples/proto/examplepb/use_go_template.swagger.json index 61ea6b83475..011b33aeaf7 100644 --- a/examples/proto/examplepb/use_go_template.swagger.json +++ b/examples/proto/examplepb/use_go_template.swagger.json @@ -4,10 +4,6 @@ "title": "examples/proto/examplepb/use_go_template.proto", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/proto/examplepb/wrappers.swagger.json index f45b512e1c6..7c7c8566bd6 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/proto/examplepb/wrappers.swagger.json @@ -4,10 +4,6 @@ "title": "examples/proto/examplepb/wrappers.proto", "version": "version not set" }, - "schemes": [ - "http", - "https" - ], "consumes": [ "application/json" ], diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index a5548f3e46e..b92b6937af4 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -1047,7 +1047,6 @@ func applyTemplate(p param) (*swaggerObject, error) { s := swaggerObject{ // Swagger 2.0 is the version of this document Swagger: "2.0", - Schemes: []string{"http", "https"}, Consumes: []string{"application/json"}, Produces: []string{"application/json"}, Paths: make(swaggerPathsObject), diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 8768830a8d0..69e5b070638 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -355,7 +355,7 @@ func TestApplyTemplateSimple(t *testing.T) { if want, is, name := "", result.BasePath, "BasePath"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := []string{"http", "https"}, result.Schemes, "Schemes"; !reflect.DeepEqual(is, want) { + if want, is, name := ([]string)(nil), result.Schemes, "Schemes"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } if want, is, name := []string{"application/json"}, result.Consumes, "Consumes"; !reflect.DeepEqual(is, want) { @@ -657,7 +657,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want, got := "", result.BasePath; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).BasePath = %s want to be %s", file, got, want) } - if want, got := []string{"http", "https"}, result.Schemes; !reflect.DeepEqual(got, want) { + if want, got := ([]string)(nil), result.Schemes; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).Schemes = %s want to be %s", file, got, want) } if want, got := []string{"application/json"}, result.Consumes; !reflect.DeepEqual(got, want) { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 77db96d877b..0b16d195514 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -59,7 +59,7 @@ type swaggerObject struct { Info swaggerInfoObject `json:"info"` Host string `json:"host,omitempty"` BasePath string `json:"basePath,omitempty"` - Schemes []string `json:"schemes"` + Schemes []string `json:"schemes,omitempty"` Consumes []string `json:"consumes"` Produces []string `json:"produces"` Paths swaggerPathsObject `json:"paths"` From e4d09fd2f7fdd7a6f8493ff63e23c7612a69b2de Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 4 Nov 2019 16:13:38 +0000 Subject: [PATCH 0236/1518] Generate changelog for 1.12.0 --- CHANGELOG.md | 47 +++++++++++++++++++++++++++++++++++++++++++---- Makefile | 2 +- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 492ee9f74d4..65797402f09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # Change Log +## [v1.12.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.0) (2019-11-04) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.3...v1.12.0) + +**Implemented enhancements:** + +- protoc-gen-swagger: support generating a Swagger definition with no schemes [\#1069](https://github.com/grpc-ecosystem/grpc-gateway/issues/1069) + +**Fixed bugs:** + +- "make test" fails with go mod error [\#895](https://github.com/grpc-ecosystem/grpc-gateway/issues/895) + +**Closed issues:** + +- jfbrandhorst/grpc-gateway-build-env image can't run on Windows [\#1073](https://github.com/grpc-ecosystem/grpc-gateway/issues/1073) +- EOF is received after one request [\#1071](https://github.com/grpc-ecosystem/grpc-gateway/issues/1071) +- grpc-ecosystem/grpc-gateway/third\_party/googleapis: warning: directory does not exist. [\#1068](https://github.com/grpc-ecosystem/grpc-gateway/issues/1068) +- third\_party/googleapis is missing from package [\#1065](https://github.com/grpc-ecosystem/grpc-gateway/issues/1065) +- handleForwardResponseOptions not called by DefaultHTTPError [\#1064](https://github.com/grpc-ecosystem/grpc-gateway/issues/1064) +- why marshal enum to json using string but received it with int . [\#1063](https://github.com/grpc-ecosystem/grpc-gateway/issues/1063) +- protoc-gen-swagger/genswagger does not build on go1.11 and earlier versions [\#1061](https://github.com/grpc-ecosystem/grpc-gateway/issues/1061) +- How to support custom output, implementation [\#1055](https://github.com/grpc-ecosystem/grpc-gateway/issues/1055) + +**Merged pull requests:** + +- Support creating a Swagger def with no schemes [\#1075](https://github.com/grpc-ecosystem/grpc-gateway/pull/1075) ([ailurarctos](https://github.com/ailurarctos)) +- Update dockerfile and regenerate files [\#1074](https://github.com/grpc-ecosystem/grpc-gateway/pull/1074) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- annotations: Sort import order. [\#1072](https://github.com/grpc-ecosystem/grpc-gateway/pull/1072) ([someone1](https://github.com/someone1)) +- fix\(protoc-gen-swagger\): Windows compatibility [\#1070](https://github.com/grpc-ecosystem/grpc-gateway/pull/1070) ([mrmeku](https://github.com/mrmeku)) +- adding build-scoping for builds on earlier go versions \(\<1.12\) [\#1062](https://github.com/grpc-ecosystem/grpc-gateway/pull/1062) ([marcusljx](https://github.com/marcusljx)) +- Add back bzip2 to image [\#1060](https://github.com/grpc-ecosystem/grpc-gateway/pull/1060) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Swagger 2.4.8 [\#1058](https://github.com/grpc-ecosystem/grpc-gateway/pull/1058) ([zachgersh](https://github.com/zachgersh)) +- get bazel deps back in right spot [\#1057](https://github.com/grpc-ecosystem/grpc-gateway/pull/1057) ([zachgersh](https://github.com/zachgersh)) +- use Go templates in protofile comments [\#1056](https://github.com/grpc-ecosystem/grpc-gateway/pull/1056) ([Jeremytjuh](https://github.com/Jeremytjuh)) +- Bump generators Dockerfile to 1.13.1 [\#1054](https://github.com/grpc-ecosystem/grpc-gateway/pull/1054) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Updates grpc proto deps [\#1053](https://github.com/grpc-ecosystem/grpc-gateway/pull/1053) ([zachgersh](https://github.com/zachgersh)) + ## [v1.11.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.11.3) (2019-09-30) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.2...v1.11.3) @@ -11,6 +47,7 @@ **Merged pull requests:** +- Generate changelog for 1.11.3 [\#1052](https://github.com/grpc-ecosystem/grpc-gateway/pull/1052) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Support json names in field mask generation [\#1050](https://github.com/grpc-ecosystem/grpc-gateway/pull/1050) ([william-plano-oxb](https://github.com/william-plano-oxb)) - Fix auto generated fieldmask case in patch requests [\#1049](https://github.com/grpc-ecosystem/grpc-gateway/pull/1049) ([william-plano-oxb](https://github.com/william-plano-oxb)) - Pass nested enum values through properly when used as url parameters [\#1048](https://github.com/grpc-ecosystem/grpc-gateway/pull/1048) ([mnito](https://github.com/mnito)) @@ -37,6 +74,7 @@ **Merged pull requests:** - Generate changelog for 1.11.2 [\#1045](https://github.com/grpc-ecosystem/grpc-gateway/pull/1045) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Remove "make test" recommendation from CONTRIBUTING.md [\#1040](https://github.com/grpc-ecosystem/grpc-gateway/pull/1040) ([johanbrandhorst](https://github.com/johanbrandhorst)) - examples/integration: wait for secondary gateway [\#1039](https://github.com/grpc-ecosystem/grpc-gateway/pull/1039) ([srenatus](https://github.com/srenatus)) - Update README.md [\#1038](https://github.com/grpc-ecosystem/grpc-gateway/pull/1038) ([piengeng](https://github.com/piengeng)) - Configure stale\[bot\] [\#1036](https://github.com/grpc-ecosystem/grpc-gateway/pull/1036) ([achew22](https://github.com/achew22)) @@ -110,6 +148,7 @@ **Merged pull requests:** - Generate changelog for 1.10.0 [\#1011](https://github.com/grpc-ecosystem/grpc-gateway/pull/1011) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Fix templateToSwaggerPath generates invalid path [\#1006](https://github.com/grpc-ecosystem/grpc-gateway/pull/1006) ([ch3rub1m](https://github.com/ch3rub1m)) - Allow overriding the primitive type of fields [\#1003](https://github.com/grpc-ecosystem/grpc-gateway/pull/1003) ([snowzach](https://github.com/snowzach)) - Add Continuous Fuzzing Integration via fuzzit.dev [\#1001](https://github.com/grpc-ecosystem/grpc-gateway/pull/1001) ([yevgenypats](https://github.com/yevgenypats)) @@ -1038,7 +1077,7 @@ - Method parameter in query string [\#6](https://github.com/grpc-ecosystem/grpc-gateway/issues/6) - Integrate authentication [\#4](https://github.com/grpc-ecosystem/grpc-gateway/issues/4) - Add swagger support [\#68](https://github.com/grpc-ecosystem/grpc-gateway/pull/68) ([achew22](https://github.com/achew22)) -- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([pedgeio](https://github.com/pedgeio)) +- Add runtime.WithForwardResponseOption [\#53](https://github.com/grpc-ecosystem/grpc-gateway/pull/53) ([bufdev](https://github.com/bufdev)) **Fixed bugs:** @@ -1148,15 +1187,15 @@ - Fix broken test [\#76](https://github.com/grpc-ecosystem/grpc-gateway/pull/76) ([yugui](https://github.com/yugui)) - Added missing instruction line in README [\#75](https://github.com/grpc-ecosystem/grpc-gateway/pull/75) ([betrcode](https://github.com/betrcode)) - Fix a complie error in generated go files [\#71](https://github.com/grpc-ecosystem/grpc-gateway/pull/71) ([yugui](https://github.com/yugui)) -- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([pedgeio](https://github.com/pedgeio)) +- Update generated .pb.go files in third\_party [\#69](https://github.com/grpc-ecosystem/grpc-gateway/pull/69) ([bufdev](https://github.com/bufdev)) - Bugfix/handling headers for `Authorization` and `Host` [\#65](https://github.com/grpc-ecosystem/grpc-gateway/pull/65) ([mwitkow](https://github.com/mwitkow)) - Fix `error` field always in chunk response [\#64](https://github.com/grpc-ecosystem/grpc-gateway/pull/64) ([mwitkow](https://github.com/mwitkow)) - Update .pb.go to latest version. [\#63](https://github.com/grpc-ecosystem/grpc-gateway/pull/63) ([johansja](https://github.com/johansja)) - Run more tests in Travis CI [\#60](https://github.com/grpc-ecosystem/grpc-gateway/pull/60) ([yugui](https://github.com/yugui)) - Added http error code and error status for responseStreamChunk error [\#59](https://github.com/grpc-ecosystem/grpc-gateway/pull/59) ([kdima](https://github.com/kdima)) - Fix parsing of verb and final path component. [\#55](https://github.com/grpc-ecosystem/grpc-gateway/pull/55) ([hbchai](https://github.com/hbchai)) -- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([pedgeio](https://github.com/pedgeio)) -- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([pedgeio](https://github.com/pedgeio)) +- add grpc.WithInsecure\(\) as option for grpc.Dial call in template [\#52](https://github.com/grpc-ecosystem/grpc-gateway/pull/52) ([bufdev](https://github.com/bufdev)) +- update .pb.go files for latest golang proto generation [\#51](https://github.com/grpc-ecosystem/grpc-gateway/pull/51) ([bufdev](https://github.com/bufdev)) - Fix a build error with the latest protoc-gen-go [\#50](https://github.com/grpc-ecosystem/grpc-gateway/pull/50) ([yugui](https://github.com/yugui)) - Configure Travis CI [\#49](https://github.com/grpc-ecosystem/grpc-gateway/pull/49) ([yugui](https://github.com/yugui)) - Follow a change of go package name convention in protoc-gen-go [\#48](https://github.com/grpc-ecosystem/grpc-gateway/pull/48) ([yugui](https://github.com/yugui)) diff --git a/Makefile b/Makefile index 608d9028129..4bd474ac71b 100644 --- a/Makefile +++ b/Makefile @@ -203,7 +203,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.11.3 + --future-release=v1.12.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 25b3cf084e488881438f9d04b0c6eaa8c670dd4a Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Mon, 4 Nov 2019 14:12:00 -0800 Subject: [PATCH 0237/1518] support json_names_for_fields --- protoc-gen-swagger/defs.bzl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 4dfca37fdac..02f412399fa 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -30,7 +30,7 @@ def _collect_includes(gen_dir, srcs): return includes -def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration, single_output): +def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration, single_output, json_names_for_fields): swagger_files = [] inputs = direct_proto_srcs + transitive_proto_srcs @@ -41,6 +41,9 @@ def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, action options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) inputs.append(grpc_api_configuration) + if json_names_for_fields: + options.append("json_names_for_fields=true") + includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) if single_output: @@ -117,6 +120,7 @@ def _proto_gen_swagger_impl(ctx): protoc_gen_swagger = ctx.executable._protoc_gen_swagger, grpc_api_configuration = grpc_api_configuration, single_output = ctx.attr.single_output, + json_names_for_fields = ctx.attr.json_names_for_fields, ), ), )] @@ -136,6 +140,10 @@ protoc_gen_swagger = rule( default = False, mandatory = False, ), + "json_names_for_fields": attr.bool( + default = False, + mandatory = False, + ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, From da7a886035e25b2f274f89b6f3c64bf70a9f6780 Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Mon, 4 Nov 2019 16:19:31 -0800 Subject: [PATCH 0238/1518] buildifier --- protoc-gen-swagger/defs.bzl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 02f412399fa..652e4a20b1a 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -140,10 +140,10 @@ protoc_gen_swagger = rule( default = False, mandatory = False, ), - "json_names_for_fields": attr.bool( - default = False, - mandatory = False, - ), + "json_names_for_fields": attr.bool( + default = False, + mandatory = False, + ), "_protoc": attr.label( default = "@com_google_protobuf//:protoc", executable = True, From 4076263b9f72e180a1344178dec5e00dd28327f2 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 6 Nov 2019 14:22:23 +0000 Subject: [PATCH 0239/1518] Revert "Fix templateToSwaggerPath generates invalid path" This reverts commit 69669120b0e010b88291cd9d24761297c2a17582. This commit was causing panics for some valid paths. --- protoc-gen-swagger/genswagger/template.go | 35 ++----------------- .../genswagger/template_test.go | 21 ++++++----- 2 files changed, 13 insertions(+), 43 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index b92b6937af4..f6db8c8c5c7 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "io/ioutil" - "net/url" "os" "reflect" "regexp" @@ -18,9 +17,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" + structpb "github.com/golang/protobuf/ptypes/struct" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -679,18 +678,13 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // Parts is now an array of segments of the path. Interestingly, since the // syntax for this subsection CAN be handled by a regexp since it has no // memory. - keyre := regexp.MustCompile("{(.*)}") for index, part := range parts { // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. prefix := canRegexp.ReplaceAllString(part, "$1") if isResourceName(prefix) { - sm := keyre.FindStringSubmatch(part) - key := sm[1] - esckey := url.PathEscape(key) - parts[index] = keyre.ReplaceAllString(part, fmt.Sprintf("{%s}", esckey)) - } else { - parts[index] = canRegexp.ReplaceAllString(part, "{$1}") + continue } + parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } return strings.Join(parts, "/") @@ -705,31 +699,11 @@ func isResourceName(prefix string) bool { return field == "parent" || field == "name" } -func extractResourceName(path string) map[string]string { - m := map[string]string{} - keyre := regexp.MustCompile("{(.*)}") - sm := keyre.FindStringSubmatch(path) - count := len(sm) - for i := 0; i < count; i++ { - key := sm[1] - parts := strings.Split(key, "=") - label := parts[0] - parts = strings.Split(label, ".") - l := len(parts) - field := parts[l-1] - if field == "parent" || field == "name" { - m[label] = key - } - } - return m -} - func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { for methIdx, meth := range svc.Methods { for bIdx, b := range meth.Bindings { - pathParamMap := extractResourceName(templateToSwaggerPath(b.PathTmpl.Template, reg)) // Iterate over all the swagger parameters parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { @@ -797,9 +771,6 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if reg.GetUseJSONNamesForFields() { parameterString = lowerCamelCase(parameterString) } - if esckey, ok := pathParamMap[parameterString]; ok { - parameterString = esckey - } parameters = append(parameters, swaggerParameterObject{ Name: parameterString, Description: desc, diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 69e5b070638..7a2859782a3 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1050,17 +1050,16 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, - {"/{name=prefix/*}", "/{name=prefix%2F%2A}"}, - {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, - {"/{parent=prefix1/*}/{name=prefix2/*}", "/{parent=prefix1%2F%2A}/{name=prefix2%2F%2A}"}, - {"/{user.name=prefix/*}", "/{user.name=prefix%2F%2A}"}, - {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, - {"/{parent=prefix/*}/children", "/{parent=prefix%2F%2A}/children"}, - {"/{name=prefix/*}:customMethod", "/{name=prefix%2F%2A}:customMethod"}, - {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, - {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix%2F%2A}:customMethod"}, - {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, - {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix%2F%2A}/children:customMethod"}, + {"/{name=prefix/*}", "/{name=prefix/*}"}, + {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1/*/prefix2/*}"}, + {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, + {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, + {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, + {"/{name=prefix/*}:customMethod", "/{name=prefix/*}:customMethod"}, + {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1/*/prefix2/*}:customMethod"}, + {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix/*}:customMethod"}, + {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, + {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) From 6cf5d5182357f5fd82d808748c75be8c0076f42d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 6 Nov 2019 14:22:23 +0000 Subject: [PATCH 0240/1518] Revert "Fix templateToSwaggerPath generates invalid path" This reverts commit 69669120b0e010b88291cd9d24761297c2a17582. This commit was causing panics for some valid paths. --- protoc-gen-swagger/genswagger/template.go | 35 ++----------------- .../genswagger/template_test.go | 21 ++++++----- 2 files changed, 13 insertions(+), 43 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index b92b6937af4..f6db8c8c5c7 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "io/ioutil" - "net/url" "os" "reflect" "regexp" @@ -18,9 +17,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" + structpb "github.com/golang/protobuf/ptypes/struct" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -679,18 +678,13 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { // Parts is now an array of segments of the path. Interestingly, since the // syntax for this subsection CAN be handled by a regexp since it has no // memory. - keyre := regexp.MustCompile("{(.*)}") for index, part := range parts { // If part is a resource name such as "parent", "name", "user.name", the format info must be retained. prefix := canRegexp.ReplaceAllString(part, "$1") if isResourceName(prefix) { - sm := keyre.FindStringSubmatch(part) - key := sm[1] - esckey := url.PathEscape(key) - parts[index] = keyre.ReplaceAllString(part, fmt.Sprintf("{%s}", esckey)) - } else { - parts[index] = canRegexp.ReplaceAllString(part, "{$1}") + continue } + parts[index] = canRegexp.ReplaceAllString(part, "{$1}") } return strings.Join(parts, "/") @@ -705,31 +699,11 @@ func isResourceName(prefix string) bool { return field == "parent" || field == "name" } -func extractResourceName(path string) map[string]string { - m := map[string]string{} - keyre := regexp.MustCompile("{(.*)}") - sm := keyre.FindStringSubmatch(path) - count := len(sm) - for i := 0; i < count; i++ { - key := sm[1] - parts := strings.Split(key, "=") - label := parts[0] - parts = strings.Split(label, ".") - l := len(parts) - field := parts[l-1] - if field == "parent" || field == "name" { - m[label] = key - } - } - return m -} - func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { for methIdx, meth := range svc.Methods { for bIdx, b := range meth.Bindings { - pathParamMap := extractResourceName(templateToSwaggerPath(b.PathTmpl.Template, reg)) // Iterate over all the swagger parameters parameters := swaggerParametersObject{} for _, parameter := range b.PathParams { @@ -797,9 +771,6 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if reg.GetUseJSONNamesForFields() { parameterString = lowerCamelCase(parameterString) } - if esckey, ok := pathParamMap[parameterString]; ok { - parameterString = esckey - } parameters = append(parameters, swaggerParameterObject{ Name: parameterString, Description: desc, diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 69e5b070638..7a2859782a3 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1050,17 +1050,16 @@ func TestTemplateToSwaggerPath(t *testing.T) { {"/{test=prefix/that/has/multiple/parts/to/it/*}", "/{test}"}, {"/{test1}/{test2}", "/{test1}/{test2}"}, {"/{test1}/{test2}/", "/{test1}/{test2}/"}, - {"/{name=prefix/*}", "/{name=prefix%2F%2A}"}, - {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, - {"/{parent=prefix1/*}/{name=prefix2/*}", "/{parent=prefix1%2F%2A}/{name=prefix2%2F%2A}"}, - {"/{user.name=prefix/*}", "/{user.name=prefix%2F%2A}"}, - {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}"}, - {"/{parent=prefix/*}/children", "/{parent=prefix%2F%2A}/children"}, - {"/{name=prefix/*}:customMethod", "/{name=prefix%2F%2A}:customMethod"}, - {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, - {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix%2F%2A}:customMethod"}, - {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1%2F%2A%2Fprefix2%2F%2A}:customMethod"}, - {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix%2F%2A}/children:customMethod"}, + {"/{name=prefix/*}", "/{name=prefix/*}"}, + {"/{name=prefix1/*/prefix2/*}", "/{name=prefix1/*/prefix2/*}"}, + {"/{user.name=prefix/*}", "/{user.name=prefix/*}"}, + {"/{user.name=prefix1/*/prefix2/*}", "/{user.name=prefix1/*/prefix2/*}"}, + {"/{parent=prefix/*}/children", "/{parent=prefix/*}/children"}, + {"/{name=prefix/*}:customMethod", "/{name=prefix/*}:customMethod"}, + {"/{name=prefix1/*/prefix2/*}:customMethod", "/{name=prefix1/*/prefix2/*}:customMethod"}, + {"/{user.name=prefix/*}:customMethod", "/{user.name=prefix/*}:customMethod"}, + {"/{user.name=prefix1/*/prefix2/*}:customMethod", "/{user.name=prefix1/*/prefix2/*}:customMethod"}, + {"/{parent=prefix/*}/children:customMethod", "/{parent=prefix/*}/children:customMethod"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) From f7120437bb4f6c71f7f5076ad65a45310de2c009 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 6 Nov 2019 14:43:01 +0000 Subject: [PATCH 0241/1518] Generate changelog for 1.12.1 --- CHANGELOG.md | 13 +++++++++++++ Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65797402f09..89356537f24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## [v1.12.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.1) (2019-11-06) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.0...v1.12.1) + +**Closed issues:** + +- Unable to create HTTP mapping with "/parent" [\#1079](https://github.com/grpc-ecosystem/grpc-gateway/issues/1079) + +**Merged pull requests:** + +- Revert "Fix templateToSwaggerPath generates invalid path" [\#1078](https://github.com/grpc-ecosystem/grpc-gateway/pull/1078) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Support json\_names\_for\_fields in starlark rule protoc\_gen\_swagger [\#1077](https://github.com/grpc-ecosystem/grpc-gateway/pull/1077) ([prestonvanloon](https://github.com/prestonvanloon)) + ## [v1.12.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.0) (2019-11-04) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.11.3...v1.12.0) @@ -24,6 +36,7 @@ **Merged pull requests:** +- Generate changelog for 1.12.0 [\#1076](https://github.com/grpc-ecosystem/grpc-gateway/pull/1076) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Support creating a Swagger def with no schemes [\#1075](https://github.com/grpc-ecosystem/grpc-gateway/pull/1075) ([ailurarctos](https://github.com/ailurarctos)) - Update dockerfile and regenerate files [\#1074](https://github.com/grpc-ecosystem/grpc-gateway/pull/1074) ([johanbrandhorst](https://github.com/johanbrandhorst)) - annotations: Sort import order. [\#1072](https://github.com/grpc-ecosystem/grpc-gateway/pull/1072) ([someone1](https://github.com/someone1)) diff --git a/Makefile b/Makefile index 4bd474ac71b..b9aa868f90c 100644 --- a/Makefile +++ b/Makefile @@ -203,7 +203,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.12.0 + --future-release=v1.12.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 9087bb89f1e0b10d3aa6d5bc12641f36cc192733 Mon Sep 17 00:00:00 2001 From: xin-au Date: Thu, 14 Nov 2019 01:40:31 -0800 Subject: [PATCH 0242/1518] Support reserved json name and add tests (#1085) * Support reserved json name and add tests * Correct some variable names * Optimize a logic for assigning a reserved json name to jsonCamelCaseName * Put a logic for checking if there is a reseved json name in the method of lowerCamelCase Fixes #1084 --- protoc-gen-swagger/genswagger/template.go | 21 +++++++++------ .../genswagger/template_test.go | 27 +++++++++++++------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f6db8c8c5c7..4dd5f04656d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -17,9 +17,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" - structpb "github.com/golang/protobuf/ptypes/struct" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" + structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -621,7 +621,7 @@ func resolveFullyQualifiedNameToSwaggerNames(messages []string, useFQNForSwagger var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") // Swagger expects paths of the form /path/{string_value} but grpc-gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. -func templateToSwaggerPath(path string, reg *descriptor.Registry) string { +func templateToSwaggerPath(path string, reg *descriptor.Registry, fields []*descriptor.Field) string { // It seems like the right thing to do here is to just use // strings.Split(path, "/") but that breaks badly when you hit a url like // /{my_field=prefix/*}/ and end up with 2 sections representing my_field. @@ -650,7 +650,7 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry) string { if reg.GetUseJSONNamesForFields() && len(jsonBuffer) > 1 { jsonSnakeCaseName := string(jsonBuffer[1:]) - jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName)) + jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName, fields)) prev := string(buffer[:len(buffer)-len(jsonSnakeCaseName)-2]) buffer = strings.Join([]string{prev, "{", jsonCamelCaseName, "}"}, "") jsonBuffer = "" @@ -769,7 +769,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } parameterString := parameter.String() if reg.GetUseJSONNamesForFields() { - parameterString = lowerCamelCase(parameterString) + parameterString = lowerCamelCase(parameterString, meth.RequestType.Fields) } parameters = append(parameters, swaggerParameterObject{ Name: parameterString, @@ -836,7 +836,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters = append(parameters, queryParams...) } - pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template, reg)] + pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields)] if !ok { pathItemObject = swaggerPathItemObject{} } @@ -1002,7 +1002,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re pathItemObject.Patch = operationObject break } - paths[templateToSwaggerPath(b.PathTmpl.Template, reg)] = pathItemObject + paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields)] = pathItemObject } } } @@ -1802,8 +1802,13 @@ func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs re addCustomRefs(d, reg, refs) } -func lowerCamelCase(parameter string) string { - parameterString := gogen.CamelCase(parameter) +func lowerCamelCase(fieldName string, fields []*descriptor.Field) string { + for _, oneField := range fields { + if oneField.GetName() == fieldName { + return oneField.GetJsonName() + } + } + parameterString := gogen.CamelCase(fieldName) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 7a2859782a3..dbcb238e290 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -986,6 +986,15 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { } } +func generateFieldsForJSONReservedName() []*descriptor.Field { + fields := make([]*descriptor.Field, 0) + fieldName := string("json_name") + fieldJSONName := string("jsonNAME") + fieldDescriptor := protodescriptor.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName} + field := &descriptor.Field{FieldDescriptorProto: &fieldDescriptor} + return append(fields, field) +} + func TestTemplateWithJsonCamelCase(t *testing.T) { var tests = []struct { input string @@ -1002,11 +1011,12 @@ func TestTemplateWithJsonCamelCase(t *testing.T) { {"test/{ab}", "test/{ab}"}, {"test/{a_a}", "test/{aA}"}, {"test/{ab_c}", "test/{abC}"}, + {"test/{json_name}", "test/{jsonNAME}"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1028,11 +1038,12 @@ func TestTemplateWithoutJsonCamelCase(t *testing.T) { {"test/{a}", "test/{a}"}, {"test/{ab}", "test/{ab}"}, {"test/{a_a}", "test/{a_a}"}, + {"test/{json_name}", "test/{json_name}"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1064,14 +1075,14 @@ func TestTemplateToSwaggerPath(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1086,7 +1097,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) { reg.SetUseJSONNamesForFields(false) for i := 0; i < b.N; i++ { - _ = templateToSwaggerPath(input, reg) + _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName()) } }) @@ -1095,7 +1106,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) { reg.SetUseJSONNamesForFields(true) for i := 0; i < b.N; i++ { - _ = templateToSwaggerPath(input, reg) + _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName()) } }) } @@ -1171,14 +1182,14 @@ func TestFQMNtoSwaggerName(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } From 3c06998610d4d2edea99d12228b1f6ea2d943ce4 Mon Sep 17 00:00:00 2001 From: Guilherme Santos Date: Tue, 3 Dec 2019 18:02:09 +0100 Subject: [PATCH 0243/1518] Override operation_id when available --- protoc-gen-swagger/genswagger/template.go | 3 + .../genswagger/template_test.go | 78 +++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 4dd5f04656d..dc3cf6a3130 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -934,6 +934,9 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re operationObject.Tags = make([]string, len(opts.Tags)) copy(operationObject.Tags, opts.Tags) } + if opts.OperationId != "" { + operationObject.OperationID = opts.OperationId + } if opts.Security != nil { newSecurity := []swaggerSecurityRequirementObject{} if operationObject.Security != nil { diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index dbcb238e290..c61a3346acc 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -372,6 +372,84 @@ func TestApplyTemplateSimple(t *testing.T) { } } +func TestApplyTemplateOverrideOperationID(t *testing.T) { + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + Options: &protodescriptor.MethodOptions{}, + } + swaggerOperation := swagger_options.Operation{ + OperationId: "MyExample", + } + if err := proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation); err != nil { + t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) + } + + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, + MessageType: []*protodescriptor.DescriptorProto{msgdesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", // TODO(achew22): Figure out what this should really be + }, + }, + }, + }, + }, + }, + }, + } + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: descriptor.NewRegistry()}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + if want, is := "MyExample", result.Paths["/v1/echo"].Get.OperationID; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s", file, is, want) + } + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", file) + t.Errorf("got: %s", fmt.Sprint(result)) + } +} + func TestApplyTemplateExtensions(t *testing.T) { msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), From 3141a31763d63074d892886f26cd6dda8422741e Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Sat, 7 Dec 2019 16:57:04 -0800 Subject: [PATCH 0244/1518] Add example where generated proto does not work --- examples/proto/examplepb/BUILD.bazel | 8 +++++++ .../proto/examplepb/generated_input.proto | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 examples/proto/examplepb/generated_input.proto diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 1077b5885e7..9928fa47e8e 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -13,12 +13,20 @@ package(default_visibility = ["//visibility:public"]) # gazelle:exclude wrappers.pb.gw.go # gazelle:exclude response_body_service.pb.gw.go +genrule( + name = "generated_proto", + srcs = ["generated_input.proto"], + outs = ["generated_output.proto"], + cmd = "cp $< $@", # A simple copy simulates a generated proto file. +) + proto_library( name = "examplepb_proto", srcs = [ "a_bit_of_everything.proto", "echo_service.proto", "flow_combination.proto", + "generated_output.proto", "non_standard_names.proto", "response_body_service.proto", "stream.proto", diff --git a/examples/proto/examplepb/generated_input.proto b/examples/proto/examplepb/generated_input.proto new file mode 100644 index 00000000000..8a1b7af3498 --- /dev/null +++ b/examples/proto/examplepb/generated_input.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +option go_package = "examplepb"; +package grpc.gateway.examples.examplepb; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "examples/proto/examplepb/a_bit_of_everything.proto"; +import "examples/proto/sub/message.proto"; + +// This file is run through a genrule. + +// Defines some more operations to be added to ABitOfEverythingService +service GeneratedService { + rpc Create(ABitOfEverything) returns (google.protobuf.Empty) { + option (google.api.http) = { + post: "/v1/example/a_bit_of_everything/generated_create" + body: "*" + }; + } + +} From 50c55a9810a974dc5a9e7dd1a5c0d295d525f283 Mon Sep 17 00:00:00 2001 From: Yannic Bonenberger Date: Mon, 9 Dec 2019 20:50:12 +0100 Subject: [PATCH 0245/1518] [bazel] Correctly handle proto files under `_virtual_imports` This can happen if: 1. `proto_library` contains at least one of `import_prefix/strip_import_prefix`, or 2. (for Bazel >= 1.0) at least one of `proto_library`'s `srcs` is generated. Fixes #1094 --- examples/proto/examplepb/BUILD.bazel | 7 +- protoc-gen-swagger/defs.bzl | 218 +++++++++++++++------------ 2 files changed, 129 insertions(+), 96 deletions(-) diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index 9928fa47e8e..b483934a865 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -4,20 +4,23 @@ load("@grpc_ecosystem_grpc_gateway//protoc-gen-swagger:defs.bzl", "protoc_gen_sw package(default_visibility = ["//visibility:public"]) +# TODO(yannic): Add examples/tests that use import_prefix/strip_import_prefix. + # gazelle:exclude a_bit_of_everything.pb.gw.go # gazelle:exclude echo_service.pb.gw.go # gazelle:exclude flow_combination.pb.gw.go +# gazelle:exclude generated_input.proto # gazelle:exclude non_standard_names.pb.gw.go +# gazelle:exclude response_body_service.pb.gw.go # gazelle:exclude stream.pb.gw.go # gazelle:exclude use_go_template.pb.gw.go # gazelle:exclude wrappers.pb.gw.go -# gazelle:exclude response_body_service.pb.gw.go genrule( name = "generated_proto", srcs = ["generated_input.proto"], outs = ["generated_output.proto"], - cmd = "cp $< $@", # A simple copy simulates a generated proto file. + cmd = "cp $< $@", # A simple copy simulates a generated proto file. ) proto_library( diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 652e4a20b1a..fac06f3b9b7 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -4,133 +4,163 @@ Reads the the api spec in protobuf format and generate an open-api spec. Optionally applies settings from the grpc-service configuration. """ -def _collect_includes(gen_dir, srcs): - """Build an include path mapping. - - It is important to not just collect unique dirnames, to also support - proto files of the same name from different packages. - - The implementation below is similar to what bazel does in its - ProtoCompileActionBuilder.java +# TODO(yannic): Replace with |proto_common.direct_source_infos| when +# https://github.com/bazelbuild/rules_proto/pull/22 lands. +def _direct_source_infos(proto_info, provided_sources = []): + """Returns sequence of `ProtoFileInfo` for `proto_info`'s direct sources. + + Files that are both in `proto_info`'s direct sources and in + `provided_sources` are skipped. This is useful, e.g., for well-known + protos that are already provided by the Protobuf runtime. + + Args: + proto_info: An instance of `ProtoInfo`. + provided_sources: Optional. A sequence of files to ignore. + Usually, these files are already provided by the + Protocol Buffer runtime (e.g. Well-Known protos). + + Returns: A sequence of `ProtoFileInfo` containing information about + `proto_info`'s direct sources. """ - includes = [] - for src in srcs: - ref_path = src.path - if ref_path.startswith(gen_dir): - ref_path = ref_path[len(gen_dir):].lstrip("/") + source_root = proto_info.proto_source_root + if "." == source_root: + return [struct(file = src, import_path = src.path) for src in proto_info.direct_sources] + + offset = len(source_root) + 1 # + '/'. + + infos = [] + for src in proto_info.direct_sources: + # TODO(yannic): Remove this hack when we drop support for Bazel < 1.0. + local_offset = offset + if src.root.path and not source_root.startswith(src.root.path): + # Before Bazel 1.0, `proto_source_root` wasn't guaranteed to be a + # prefix of `src.path`. This could happend, e.g., if `file` was + # generated (https://github.com/bazelbuild/bazel/issues/9215). + local_offset += len(src.root.path) + 1 # + '/'. + infos.append(struct(file = src, import_path = src.path[local_offset:])) + + return infos + +def _run_proto_gen_swagger( + actions, + proto_info, + target_name, + transitive_proto_srcs, + protoc, + protoc_gen_swagger, + grpc_api_configuration, + single_output, + json_names_for_fields): + args = actions.args() + + args.add("--plugin", "protoc-gen-swagger=%s" % protoc_gen_swagger.path) + + args.add("--swagger_opt", "logtostderr=true") + args.add("--swagger_opt", "allow_repeated_fields_in_body=true") + + extra_inputs = [] + if grpc_api_configuration: + extra_inputs.append(grpc_api_configuration) + args.add("--swagger_opt", "grpc_api_configuration=%s" % grpc_api_configuration.path) - if src.owner.workspace_root: - workspace_root = src.owner.workspace_root - ref_path = ref_path[len(workspace_root):].lstrip("/") + if json_names_for_fields: + args.add("--swagger_opt", "json_names_for_fields=true") - include = ref_path + "=" + src.path - if include not in includes: - includes.append(include) + proto_file_infos = _direct_source_infos(proto_info) - return includes + # TODO(yannic): Use |proto_info.transitive_descriptor_sets| when + # https://github.com/bazelbuild/bazel/issues/9337 is fixed. + args.add_all(proto_info.transitive_proto_path, format_each = "--proto_path=%s") -def _run_proto_gen_swagger(ctx, direct_proto_srcs, transitive_proto_srcs, actions, protoc, protoc_gen_swagger, grpc_api_configuration, single_output, json_names_for_fields): - swagger_files = [] + if single_output: + args.add("--swagger_opt", "allow_merge=true") + args.add("--swagger_opt", "merge_file_name=%s" % target_name) - inputs = direct_proto_srcs + transitive_proto_srcs - tools = [protoc_gen_swagger] + swagger_file = actions.declare_file("%s.swagger.json" % target_name) + args.add("--swagger_out", swagger_file.dirname) - options = ["logtostderr=true", "allow_repeated_fields_in_body=true"] - if grpc_api_configuration: - options.append("grpc_api_configuration=%s" % grpc_api_configuration.path) - inputs.append(grpc_api_configuration) + args.add_all([f.import_path for f in proto_file_infos]) - if json_names_for_fields: - options.append("json_names_for_fields=true") + actions.run( + executable = protoc, + tools = [protoc_gen_swagger], + inputs = depset( + direct = extra_inputs, + transitive = [transitive_proto_srcs], + ), + outputs = [swagger_file], + arguments = [args], + ) - includes = _collect_includes(ctx.genfiles_dir.path, direct_proto_srcs + transitive_proto_srcs) + return [swagger_file] - if single_output: + # TODO(yannic): We may be able to generate all files in a single action, + # but that will change at least the semantics of `use_go_template.proto`. + swagger_files = [] + for proto_file_info in proto_file_infos: + # TODO(yannic): This probably doesn't work as expected: we only add this + # option after we have seen it, so `.proto` sources that happen to be + # in the list of `.proto` files before `use_go_template.proto` will be + # compiled without this option, and all sources that get compiled after + # `use_go_template.proto` will have this option on. + if proto_file_info.file.basename == "use_go_template.proto": + args.add("--swagger_opt", "use_go_templates=true") + + file_name = "%s.swagger.json" % proto_file_info.import_path[:-len(".proto")] swagger_file = actions.declare_file( - "%s.swagger.json" % ctx.attr.name, - sibling = direct_proto_srcs[0], + "_virtual_imports/%s/%s" % (target_name, file_name), ) - output_dir = ctx.bin_dir.path - if direct_proto_srcs[0].owner.workspace_root: - output_dir = "/".join([output_dir, direct_proto_srcs[0].owner.workspace_root]) - output_dir = "/".join([output_dir, direct_proto_srcs[0].dirname]) - options.append("allow_merge=true") - options.append("merge_file_name=%s" % ctx.attr.name) + file_args = actions.args() + + offset = len(file_name) + 1 # + '/'. + file_args.add("--swagger_out", swagger_file.path[:-offset]) - args = actions.args() - args.add("--plugin=protoc-gen-swagger=%s" % protoc_gen_swagger.path) - args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) - args.add_all(["-I%s" % include for include in includes]) - args.add_all([src.path for src in direct_proto_srcs]) + file_args.add(proto_file_info.import_path) actions.run( executable = protoc, - inputs = inputs, - tools = tools, + tools = [protoc_gen_swagger], + inputs = depset( + direct = extra_inputs, + transitive = [transitive_proto_srcs], + ), outputs = [swagger_file], - arguments = [args], + arguments = [args, file_args], ) - swagger_files.append(swagger_file) - else: - for proto in direct_proto_srcs: - if proto.basename == "use_go_template.proto": - options.append("use_go_templates=true") - - swagger_file = actions.declare_file( - "%s.swagger.json" % proto.basename[:-len(".proto")], - sibling = proto, - ) - - output_dir = ctx.bin_dir.path - if proto.owner.workspace_root: - output_dir = "/".join([output_dir, proto.owner.workspace_root]) - - args = actions.args() - args.add("--plugin=protoc-gen-swagger=%s" % protoc_gen_swagger.path) - args.add("--swagger_out=%s:%s" % (",".join(options), output_dir)) - args.add_all(["-I%s" % include for include in includes]) - args.add(proto.path) - - actions.run( - executable = protoc, - inputs = inputs, - tools = tools, - outputs = [swagger_file], - arguments = [args], - ) - swagger_files.append(swagger_file) return swagger_files def _proto_gen_swagger_impl(ctx): proto = ctx.attr.proto[ProtoInfo] - grpc_api_configuration = ctx.file.grpc_api_configuration - - return [DefaultInfo( - files = depset( - _run_proto_gen_swagger( - ctx, - direct_proto_srcs = proto.direct_sources, - transitive_proto_srcs = ctx.files._well_known_protos + proto.transitive_sources.to_list(), - actions = ctx.actions, - protoc = ctx.executable._protoc, - protoc_gen_swagger = ctx.executable._protoc_gen_swagger, - grpc_api_configuration = grpc_api_configuration, - single_output = ctx.attr.single_output, - json_names_for_fields = ctx.attr.json_names_for_fields, + return [ + DefaultInfo( + files = depset( + _run_proto_gen_swagger( + actions = ctx.actions, + proto_info = proto, + target_name = ctx.attr.name, + transitive_proto_srcs = depset( + direct = ctx.files._well_known_protos, + transitive = [proto.transitive_sources], + ), + protoc = ctx.executable._protoc, + protoc_gen_swagger = ctx.executable._protoc_gen_swagger, + grpc_api_configuration = ctx.file.grpc_api_configuration, + single_output = ctx.attr.single_output, + json_names_for_fields = ctx.attr.json_names_for_fields, + ), ), ), - )] + ] protoc_gen_swagger = rule( attrs = { "proto": attr.label( - allow_rules = ["proto_library"], mandatory = True, - providers = ["proto"], + providers = [ProtoInfo], ), "grpc_api_configuration": attr.label( allow_single_file = True, From 41e8b942d30633854c7c3831ef1efb519a757cc9 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 20 Dec 2019 09:26:49 -0700 Subject: [PATCH 0246/1518] Update dependencies --- WORKSPACE | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 7430c6bc260..8515bd549ad 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -3,29 +3,60 @@ workspace(name = "grpc_ecosystem_grpc_gateway") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( - name = "io_bazel_rules_go", - sha256 = "513c12397db1bc9aa46dd62f02dd94b49a9b5d17444d49b5a04c5a89f3053c1c", + name = "bazel_skylib", + sha256 = "97e70364e9249702246c0e9444bccdc4b847bed1eb03c5a3ece4f83dfe6abc44", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.19.5/rules_go-v0.19.5.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.19.5/rules_go-v0.19.5.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.2/bazel-skylib-1.0.2.tar.gz", ], ) -load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") +load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") -go_rules_dependencies() +bazel_skylib_workspace() -go_register_toolchains() +http_archive( + name = "rules_proto", + sha256 = "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208", + strip_prefix = "rules_proto-97d8af4dc474595af3900dd85cb3a29ad28cc313", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz", + "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz", + ], +) + +load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") + +rules_proto_dependencies() + +rules_proto_toolchains() + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "io_bazel_rules_go", + sha256 = "e88471aea3a3a4f19ec1310a55ba94772d087e9ce46e41ae38ecebe17935de7b", + urls = [ + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", + ], +) http_archive( name = "bazel_gazelle", - sha256 = "7fc87f4170011201b1690326e8c16c5d802836e3a0d617d8f75c3af2b23180c4", + sha256 = "86c6d481b3f7aedc1d60c1c211c6f76da282ae197c3b3160f54bd3a8f847896f", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/0.18.2/bazel-gazelle-0.18.2.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", ], ) +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") + +go_rules_dependencies() + +go_register_toolchains() + load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") gazelle_dependencies() From e8db07a3923d3f5c77dbcea96656afe43a2757a8 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 20 Dec 2019 09:30:44 -0700 Subject: [PATCH 0247/1518] Fix BUILD files to load from rules_proto --- examples/pbwrappers/helloworld/BUILD.bazel | 1 + examples/proto/examplepb/BUILD.bazel | 1 + examples/proto/pathenum/BUILD.bazel | 1 + examples/proto/sub/BUILD.bazel | 1 + examples/proto/sub2/BUILD.bazel | 1 + internal/BUILD.bazel | 1 + protoc-gen-swagger/defs.bzl | 2 ++ protoc-gen-swagger/options/BUILD.bazel | 1 + 8 files changed, 9 insertions(+) diff --git a/examples/pbwrappers/helloworld/BUILD.bazel b/examples/pbwrappers/helloworld/BUILD.bazel index 0b6c67f8074..01949ef7e9d 100644 --- a/examples/pbwrappers/helloworld/BUILD.bazel +++ b/examples/pbwrappers/helloworld/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/proto/examplepb/BUILD.bazel index b483934a865..ac90b28a4ba 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/proto/examplepb/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") load("@grpc_ecosystem_grpc_gateway//protoc-gen-swagger:defs.bzl", "protoc_gen_swagger") diff --git a/examples/proto/pathenum/BUILD.bazel b/examples/proto/pathenum/BUILD.bazel index 26b3efc1921..06d17fc4483 100644 --- a/examples/proto/pathenum/BUILD.bazel +++ b/examples/proto/pathenum/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") diff --git a/examples/proto/sub/BUILD.bazel b/examples/proto/sub/BUILD.bazel index bc5874bba55..4500b5689d9 100644 --- a/examples/proto/sub/BUILD.bazel +++ b/examples/proto/sub/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") diff --git a/examples/proto/sub2/BUILD.bazel b/examples/proto/sub2/BUILD.bazel index 539f5b6e450..780d550ccbb 100644 --- a/examples/proto/sub2/BUILD.bazel +++ b/examples/proto/sub2/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel index 76cafe6ec7f..5f73042d6f6 100644 --- a/internal/BUILD.bazel +++ b/internal/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index fac06f3b9b7..2cb1f22fdda 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -4,6 +4,8 @@ Reads the the api spec in protobuf format and generate an open-api spec. Optionally applies settings from the grpc-service configuration. """ +load("@rules_proto//proto:defs.bzl", "ProtoInfo") + # TODO(yannic): Replace with |proto_common.direct_source_infos| when # https://github.com/bazelbuild/rules_proto/pull/22 lands. def _direct_source_infos(proto_info, provided_sources = []): diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 8dea43d297d..464a56d4539 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") From 0c6cfab68612eab74b50eef8151019d58bfe9ee4 Mon Sep 17 00:00:00 2001 From: Sean Lafferty Date: Sat, 18 Jan 2020 06:33:53 -0500 Subject: [PATCH 0248/1518] #1109 Inline streamingDefinitions in generated swagger to better support codegen tools (#1112) * #1109 Inline streamingDefinitions in generated swagger * Updated generated swagger streaming examples --- examples/proto/examplepb/stream.swagger.json | 48 ++++++------- protoc-gen-swagger/genswagger/generator.go | 3 - protoc-gen-swagger/genswagger/template.go | 70 +++++++------------ .../genswagger/template_test.go | 24 +++---- protoc-gen-swagger/genswagger/types.go | 1 - 5 files changed, 53 insertions(+), 93 deletions(-) diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 69be3d81225..84215a088c1 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -18,7 +18,16 @@ "200": { "description": "A successful response.(streaming responses)", "schema": { - "$ref": "#/x-stream-definitions/examplepbABitOfEverything" + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbABitOfEverything" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of examplepbABitOfEverything" } } }, @@ -61,7 +70,16 @@ "200": { "description": "A successful response.(streaming responses)", "schema": { - "$ref": "#/x-stream-definitions/subStringMessage" + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/subStringMessage" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of subStringMessage" } } }, @@ -374,31 +392,5 @@ } } } - }, - "x-stream-definitions": { - "examplepbABitOfEverything": { - "type": "object", - "properties": { - "result": { - "$ref": "#/definitions/examplepbABitOfEverything" - }, - "error": { - "$ref": "#/definitions/runtimeStreamError" - } - }, - "title": "Stream result of examplepbABitOfEverything" - }, - "subStringMessage": { - "type": "object", - "properties": { - "result": { - "$ref": "#/definitions/subStringMessage" - }, - "error": { - "$ref": "#/definitions/runtimeStreamError" - } - }, - "title": "Stream result of subStringMessage" - } } } diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 61c5a537661..ecf1135fde7 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -52,9 +52,6 @@ func mergeTargetFile(targets []*wrapper, mergeFileName string) *wrapper { for k, v := range f.swagger.Definitions { mergedTarget.swagger.Definitions[k] = v } - for k, v := range f.swagger.StreamDefinitions { - mergedTarget.swagger.StreamDefinitions[k] = v - } for k, v := range f.swagger.Paths { mergedTarget.swagger.Paths[k] = v } diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index dc3cf6a3130..1f43af3bf08 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -352,42 +352,6 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } } -func renderMessagesAsStreamDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry) { - for name, msg := range messages { - if skipRenderingRef(name) { - continue - } - - if opt := msg.GetOptions(); opt != nil && opt.MapEntry != nil && *opt.MapEntry { - continue - } - d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = swaggerSchemaObject{ - schemaCore: schemaCore{ - Type: "object", - }, - Title: fmt.Sprintf("Stream result of %s", fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)), - Properties: &swaggerSchemaObjectProperties{ - keyVal{ - Key: "result", - Value: swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)), - }, - }, - }, - keyVal{ - Key: "error", - Value: swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg)), - }, - }, - }, - }, - } - } -} - // schemaOfField returns a swagger Schema Object for a protobuf field. func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) swaggerSchemaObject { const ( @@ -877,8 +841,26 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } if meth.GetServerStreaming() { desc += "(streaming responses)" - // Use the streamdefinition which wraps the message in a "result" - responseSchema.Ref = strings.Replace(responseSchema.Ref, `#/definitions/`, `#/x-stream-definitions/`, 1) + responseSchema.Type = "object" + responseSchema.Title = fmt.Sprintf("Stream result of %s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)) + responseSchema.Properties = &swaggerSchemaObjectProperties{ + keyVal{ + Key: "result", + Value: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: responseSchema.Ref, + }, + }, + }, + keyVal{ + Key: "error", + Value: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg))}, + }, + }, + } + responseSchema.Ref = "" } tag := svc.GetName() @@ -1020,12 +1002,11 @@ func applyTemplate(p param) (*swaggerObject, error) { // defined off of. s := swaggerObject{ // Swagger 2.0 is the version of this document - Swagger: "2.0", - Consumes: []string{"application/json"}, - Produces: []string{"application/json"}, - Paths: make(swaggerPathsObject), - Definitions: make(swaggerDefinitionsObject), - StreamDefinitions: make(swaggerDefinitionsObject), + Swagger: "2.0", + Consumes: []string{"application/json"}, + Produces: []string{"application/json"}, + Paths: make(swaggerPathsObject), + Definitions: make(swaggerDefinitionsObject), Info: swaggerInfoObject{ Title: *p.File.Name, Version: "version not set", @@ -1047,7 +1028,6 @@ func applyTemplate(p param) (*swaggerObject, error) { e := enumMap{} findServicesMessagesAndEnumerations(p.Services, p.reg, m, ms, e, requestResponseRefs) renderMessagesAsDefinition(m, s.Definitions, p.reg, customRefs) - renderMessagesAsStreamDefinition(ms, s.StreamDefinitions, p.reg) renderEnumerationsAsDefinition(e, s.Definitions, p.reg) // File itself might have some comments and metadata. diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index c61a3346acc..3abaa6b3a5f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -892,15 +892,17 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want, got, name := 3, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) } - // stream ExampleMessage must be present - if want, got, name := 1, len(result.StreamDefinitions), "len(StreamDefinitions)"; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) + if _, ok := result.Paths["/v1/echo"].Post.Responses["200"]; !ok { + t.Errorf("applyTemplate(%#v).%s = expected 200 response to be defined", file, `result.Paths["/v1/echo"].Post.Responses["200"]`) } else { - streamExampleExampleMessage := result.StreamDefinitions["exampleExampleMessage"] - if want, got, name := "object", streamExampleExampleMessage.Type, `StreamDefinitions["exampleExampleMessage"].Type`; !reflect.DeepEqual(got, want) { + if want, got, name := "A successful response.(streaming responses)", result.Paths["/v1/echo"].Post.Responses["200"].Description, `result.Paths["/v1/echo"].Post.Responses["200"].Description`; !reflect.DeepEqual(got, want) { + t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) + } + streamExampleExampleMessage := result.Paths["/v1/echo"].Post.Responses["200"].Schema + if want, got, name := "object", streamExampleExampleMessage.Type, `result.Paths["/v1/echo"].Post.Responses["200"].Schema.Type`; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) } - if want, got, name := "Stream result of exampleExampleMessage", streamExampleExampleMessage.Title, `StreamDefinitions["exampleExampleMessage"].Title`; !reflect.DeepEqual(got, want) { + if want, got, name := "Stream result of exampleExampleMessage", streamExampleExampleMessage.Title, `result.Paths["/v1/echo"].Post.Responses["200"].Schema.Title`; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) } streamExampleExampleMessageProperties := *(streamExampleExampleMessage.Properties) @@ -925,16 +927,6 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } } } - if want, got, name := 1, len(result.Paths["/v1/echo"].Post.Responses), "len(Paths[/v1/echo].Post.Responses)"; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) - } else { - if want, got, name := "A successful response.(streaming responses)", result.Paths["/v1/echo"].Post.Responses["200"].Description, `result.Paths["/v1/echo"].Post.Responses["200"].Description`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) - } - if want, got, name := "#/x-stream-definitions/exampleExampleMessage", result.Paths["/v1/echo"].Post.Responses["200"].Schema.Ref, `result.Paths["/v1/echo"].Post.Responses["200"].Description`; !reflect.DeepEqual(got, want) { - t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) - } - } // If there was a failure, print out the input and the json result for debugging. if t.Failed() { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 0b16d195514..5765706b34b 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -64,7 +64,6 @@ type swaggerObject struct { Produces []string `json:"produces"` Paths swaggerPathsObject `json:"paths"` Definitions swaggerDefinitionsObject `json:"definitions"` - StreamDefinitions swaggerDefinitionsObject `json:"x-stream-definitions,omitempty"` SecurityDefinitions swaggerSecurityDefinitionsObject `json:"securityDefinitions,omitempty"` Security []swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` From 29dafe9f591bb820bdb08bce0ec9018ff1e75c14 Mon Sep 17 00:00:00 2001 From: Sean Lafferty Date: Sat, 18 Jan 2020 13:31:57 -0500 Subject: [PATCH 0249/1518] #1113 Fix broken parsing of camelCase oneof --- runtime/query.go | 16 +++++++++------- runtime/query_test.go | 9 +++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/runtime/query.go b/runtime/query.go index ee0207e461e..80ff21c3a4c 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -117,14 +117,16 @@ func fieldByProtoName(m reflect.Value, name string) (reflect.Value, *proto.Prope props := proto.GetProperties(m.Type()) // look up field name in oneof map - if op, ok := props.OneofTypes[name]; ok { - v := reflect.New(op.Type.Elem()) - field := m.Field(op.Field) - if !field.IsNil() { - return reflect.Value{}, nil, fmt.Errorf("field already set for %s oneof", props.Prop[op.Field].OrigName) + for _, op := range props.OneofTypes { + if name == op.Prop.OrigName || name == op.Prop.JSONName { + v := reflect.New(op.Type.Elem()) + field := m.Field(op.Field) + if !field.IsNil() { + return reflect.Value{}, nil, fmt.Errorf("field already set for %s oneof", props.Prop[op.Field].OrigName) + } + field.Set(v) + return v.Elem().Field(0), op.Prop, nil } - field.Set(v) - return v.Elem().Field(0), op.Prop, nil } for _, p := range props.Prop { diff --git a/runtime/query_test.go b/runtime/query_test.go index fb8d27ad769..e35904df2a7 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -371,6 +371,15 @@ func TestPopulateParameters(t *testing.T) { OneofValue: &proto3Message_OneofStringValue{"foobar"}, }, }, + { + values: url.Values{ + "oneofStringValue": {"foobar"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &proto3Message{ + OneofValue: &proto3Message_OneofStringValue{"foobar"}, + }, + }, { values: url.Values{ "oneof_bool_value": {"true"}, From 9470af682a5e945393b1c11aa7929c6ca7439d61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Jan 2020 01:26:54 +0000 Subject: [PATCH 0250/1518] Bump rubyzip from 1.2.3 to 2.0.0 in /docs Bumps [rubyzip](https://github.com/rubyzip/rubyzip) from 1.2.3 to 2.0.0. - [Release notes](https://github.com/rubyzip/rubyzip/releases) - [Changelog](https://github.com/rubyzip/rubyzip/blob/master/Changelog.md) - [Commits](https://github.com/rubyzip/rubyzip/compare/v1.2.3...v2.0.0) Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 9bf6baf5847..9a6ac6f8c32 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -223,7 +223,7 @@ GEM ruby-enum (0.7.2) i18n ruby_dep (1.5.0) - rubyzip (1.2.3) + rubyzip (2.0.0) safe_yaml (1.0.4) sass (3.5.6) sass-listen (~> 4.0.0) From 4cb25e12e0ffc50f1409a27259ab9488eb3a170d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 20 Jan 2020 10:50:18 +0000 Subject: [PATCH 0251/1518] docs: require Jekyll Github Token to be set This didn't run successfully without this for me --- docs/run.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/run.sh b/docs/run.sh index b9b5a2c031b..2071f85b1f7 100755 --- a/docs/run.sh +++ b/docs/run.sh @@ -18,11 +18,17 @@ if [ ! -d "${BUNDLE_DIR}" ]; then bundle update fi +if [[ ${JEKYLL_GITHUB_TOKEN} == "" ]]; then + echo "Please set \$JEKYLL_GITHUB_TOKEN before running" + exit 1 +fi + docker run --rm \ --volume="${PWD}:/srv/jekyll" \ -p 35729:35729 -p 4000:4000 \ -e "JEKYLL_UID=$(id -u)" \ -e "JEKYLL_GID=$(id -g)" \ + -e "JEKYLL_GITHUB_TOKEN=${JEKYLL_GITHUB_TOKEN}" \ --volume="/tmp/grpc-gateway-bundle:/usr/local/bundle" \ -it "jekyll/builder:${JEKYLL_VERSION}" \ jekyll serve From a86a0d601b2fe92649fb4e9139cb3b1183c79afb Mon Sep 17 00:00:00 2001 From: Alan Wang Date: Sun, 19 Jan 2020 10:25:15 +0800 Subject: [PATCH 0252/1518] fix: get wrong second services method comments, then the swagger.jsons summary not right --- protoc-gen-swagger/genswagger/template.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 1f43af3bf08..1b9e14d545f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -892,7 +892,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } - methComments := protoComments(reg, svc.File, nil, "Method", int32(svcIdx), methProtoPath, int32(methIdx)) + methComments := protoComments(reg, svc.File, nil, "Service", int32(svcIdx), methProtoPath, int32(methIdx)) if err := updateSwaggerDataFromComments(reg, operationObject, meth, methComments, false); err != nil { panic(err) } From 92f8f8839f996dbd462e63bcc6b0f4aa5a865ef6 Mon Sep 17 00:00:00 2001 From: Alan Wang Date: Wed, 22 Jan 2020 19:44:48 +0800 Subject: [PATCH 0253/1518] chore: regenerate the files after making changes --- examples/clients/abe/api/swagger.yaml | 2 -- examples/clients/abe/api_camel_case_service_name.go | 3 +-- examples/proto/examplepb/a_bit_of_everything.swagger.json | 2 -- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml index bcb92338096..ab5f7a80719 100644 --- a/examples/clients/abe/api/swagger.yaml +++ b/examples/clients/abe/api/swagger.yaml @@ -1624,8 +1624,6 @@ paths: get: tags: - "camelCaseServiceName" - summary: "Create a new ABitOfEverything" - description: "This API creates a new ABitOfEverything" operationId: "Empty" parameters: [] responses: diff --git a/examples/clients/abe/api_camel_case_service_name.go b/examples/clients/abe/api_camel_case_service_name.go index f5835bbe031..80d867e660c 100644 --- a/examples/clients/abe/api_camel_case_service_name.go +++ b/examples/clients/abe/api_camel_case_service_name.go @@ -26,8 +26,7 @@ var ( type CamelCaseServiceNameApiService service /* -CamelCaseServiceNameApiService Create a new ABitOfEverything -This API creates a new ABitOfEverything +CamelCaseServiceNameApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @return interface{} diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index e357ff5ffd7..14e86590d21 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -1926,8 +1926,6 @@ }, "/v2/example/empty": { "get": { - "summary": "Create a new ABitOfEverything", - "description": "This API creates a new ABitOfEverything", "operationId": "Empty", "responses": { "200": { From e16fcd495a18ea01dbc6f5b6ac2956a94e1981a2 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 22 Jan 2020 13:31:53 +0000 Subject: [PATCH 0254/1518] Generate changelog for 1.12.2 --- CHANGELOG.md | 42 +++++++++++++++++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89356537f24..283628989cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,44 @@ # Change Log +## [v1.12.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.2) (2020-01-22) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.1...v1.12.2) + +**Fixed bugs:** + +- Gateway does not parse oneof types correctly when using camelCase [\#1113](https://github.com/grpc-ecosystem/grpc-gateway/issues/1113) + +**Closed issues:** + +- all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp \[::1\]:50051: connect: connection refused\" [\#1111](https://github.com/grpc-ecosystem/grpc-gateway/issues/1111) +- Streaming responses are put in `x-stream-definitions` rather than `/components/schema`, which tools do not support [\#1109](https://github.com/grpc-ecosystem/grpc-gateway/issues/1109) +- Why is metadataAnnotators not \[\]func\(metadata.MD, \*http.Request\) [\#1107](https://github.com/grpc-ecosystem/grpc-gateway/issues/1107) +- protoc\_gen\_swagger: Why `protobufListValue` type is represented as object? [\#1106](https://github.com/grpc-ecosystem/grpc-gateway/issues/1106) +- The metadata of local\_request function's return is always nil [\#1105](https://github.com/grpc-ecosystem/grpc-gateway/issues/1105) +- protoc-gen-swagger: support multiple files [\#1104](https://github.com/grpc-ecosystem/grpc-gateway/issues/1104) +- grpc-gateway is incompatible with --incompatible\_load\_proto\_rules\_from\_bzl [\#1101](https://github.com/grpc-ecosystem/grpc-gateway/issues/1101) +- Any example or doc of sending large data from Postman \(json\) to the server using client side streaming? [\#1100](https://github.com/grpc-ecosystem/grpc-gateway/issues/1100) +- Why errors have both "error" and "message" field that contains same \(redundant\) data? [\#1098](https://github.com/grpc-ecosystem/grpc-gateway/issues/1098) +- Generate java grpc gateway code. [\#1097](https://github.com/grpc-ecosystem/grpc-gateway/issues/1097) +- protoc-gen-swagger gen unsupport http post in query, only support http get in query? [\#1096](https://github.com/grpc-ecosystem/grpc-gateway/issues/1096) +- Cannot generate swagger with generated protobuf [\#1094](https://github.com/grpc-ecosystem/grpc-gateway/issues/1094) +- genswagger fails on Ubuntu on Windows \(WSL\): value of type genswagger.alias is not assignable to type genswagger.alias [\#1092](https://github.com/grpc-ecosystem/grpc-gateway/issues/1092) +- protoc-gen-swagger: should use json\_name values for generating properties in swagger doc [\#1090](https://github.com/grpc-ecosystem/grpc-gateway/issues/1090) +- protoc-gen-swagger: json\_names\_for\_fields=true does not respect json\_name for path parameters [\#1084](https://github.com/grpc-ecosystem/grpc-gateway/issues/1084) +- extract protoc-gen-swagger to separate repo [\#1083](https://github.com/grpc-ecosystem/grpc-gateway/issues/1083) +- How do I load balance call grpc service? [\#1081](https://github.com/grpc-ecosystem/grpc-gateway/issues/1081) + +**Merged pull requests:** + +- docs: require Jekyll Github Token to be set [\#1118](https://github.com/grpc-ecosystem/grpc-gateway/pull/1118) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- fix: protoc-gen-swagger: get wrong second services method comments [\#1116](https://github.com/grpc-ecosystem/grpc-gateway/pull/1116) ([chinaran](https://github.com/chinaran)) +- Bump rubyzip from 1.2.3 to 2.0.0 in /docs [\#1115](https://github.com/grpc-ecosystem/grpc-gateway/pull/1115) ([dependabot[bot]](https://github.com/apps/dependabot)) +- \#1113 Fix broken parsing of camelCase oneof [\#1114](https://github.com/grpc-ecosystem/grpc-gateway/pull/1114) ([seanlaff](https://github.com/seanlaff)) +- \#1109 Inline streamingDefinitions in generated swagger to better support codegen tools [\#1112](https://github.com/grpc-ecosystem/grpc-gateway/pull/1112) ([seanlaff](https://github.com/seanlaff)) +- Explicitly load rules\_proto rules [\#1102](https://github.com/grpc-ecosystem/grpc-gateway/pull/1102) ([achew22](https://github.com/achew22)) +- \[bazel\] Correctly handle proto files under \_virtual\_imports [\#1095](https://github.com/grpc-ecosystem/grpc-gateway/pull/1095) ([Yannic](https://github.com/Yannic)) +- Override operation\_id when available [\#1091](https://github.com/grpc-ecosystem/grpc-gateway/pull/1091) ([guilherme-santos](https://github.com/guilherme-santos)) +- Support reserved json name and add tests [\#1085](https://github.com/grpc-ecosystem/grpc-gateway/pull/1085) ([xin-au](https://github.com/xin-au)) + ## [v1.12.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.1) (2019-11-06) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.0...v1.12.1) @@ -9,6 +48,7 @@ **Merged pull requests:** +- Generate changelog for 1.12.1 [\#1080](https://github.com/grpc-ecosystem/grpc-gateway/pull/1080) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Revert "Fix templateToSwaggerPath generates invalid path" [\#1078](https://github.com/grpc-ecosystem/grpc-gateway/pull/1078) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Support json\_names\_for\_fields in starlark rule protoc\_gen\_swagger [\#1077](https://github.com/grpc-ecosystem/grpc-gateway/pull/1077) ([prestonvanloon](https://github.com/prestonvanloon)) @@ -724,7 +764,7 @@ - Fixes file integrity errors on TravisCI [\#619](https://github.com/grpc-ecosystem/grpc-gateway/pull/619) ([yugui](https://github.com/yugui)) - Reorganize examples [\#618](https://github.com/grpc-ecosystem/grpc-gateway/pull/618) ([yugui](https://github.com/yugui)) - Update dependency declarations in the Makefile [\#617](https://github.com/grpc-ecosystem/grpc-gateway/pull/617) ([yugui](https://github.com/yugui)) -- Support delete method in swagger generator [\#616](https://github.com/grpc-ecosystem/grpc-gateway/pull/616) ([blackdahila](https://github.com/blackdahila)) +- Support delete method in swagger generator [\#616](https://github.com/grpc-ecosystem/grpc-gateway/pull/616) ([beerose](https://github.com/beerose)) - feat\(bazel\): Add rule for generating .swagger.json files [\#613](https://github.com/grpc-ecosystem/grpc-gateway/pull/613) ([mrmeku](https://github.com/mrmeku)) - Support UNIX domain socket in the example servers [\#609](https://github.com/grpc-ecosystem/grpc-gateway/pull/609) ([yugui](https://github.com/yugui)) - misspelling [\#601](https://github.com/grpc-ecosystem/grpc-gateway/pull/601) ([chemidy](https://github.com/chemidy)) diff --git a/Makefile b/Makefile index b9aa868f90c..eb31aa6d714 100644 --- a/Makefile +++ b/Makefile @@ -203,7 +203,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.12.1 + --future-release=v1.12.2 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From f0d0de466d4242a713e95d64685c12064495284a Mon Sep 17 00:00:00 2001 From: Josh Giles Date: Sun, 2 Feb 2020 10:56:03 -0500 Subject: [PATCH 0255/1518] Fix #1125: JSON-prefix nested-field params. (#1126) * Fix #1125: JSON-prefix nested-field params. * Add test case. --- protoc-gen-swagger/genswagger/template.go | 8 ++++- .../genswagger/template_test.go | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 1b9e14d545f..f54c7e3ed8b 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -201,7 +201,13 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st return nil, fmt.Errorf("unknown message type %s", fieldType) } for _, nestedField := range msg.Fields { - p, err := queryParams(msg, nestedField, prefix+field.GetName()+".", reg, pathParams) + var fieldName string + if reg.GetUseJSONNamesForFields() { + fieldName = field.GetJsonName() + } else { + fieldName = field.GetName() + } + p, err := queryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams) if err != nil { return nil, err } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 3abaa6b3a5f..9c1f0b74c70 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -248,6 +248,42 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, }, }, + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("SubMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("test_field_a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + JsonName: proto.String("testFieldA"), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("sub_message"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.SubMessage"), + Number: proto.Int32(1), + JsonName: proto.String("subMessage"), + }, + }, + }, + }, + Message: "ExampleMessage", + Params: []swaggerParameterObject{ + swaggerParameterObject{ + Name: "subMessage.testFieldA", + In: "query", + Required: false, + Type: "string", + }, + }, + }, } for _, test := range tests { From e1a127c6f7cf2006c77a16dbc0face2a43f2094a Mon Sep 17 00:00:00 2001 From: Josh Giles Date: Mon, 3 Feb 2020 02:39:15 -0500 Subject: [PATCH 0256/1518] Fix #1117: Support response examples. (#1124) * Fix #1117: Support response examples. Add support for examples in operation annotation responses. Merge custom response data into the default 200 response. * Regenerate files. * Documentation improvements. --- README.md | 23 + docs/_docs/usage.md | 23 + examples/clients/abe/api/swagger.yaml | 11 +- .../proto/examplepb/a_bit_of_everything.pb.go | 445 +++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 9 + .../a_bit_of_everything.swagger.json | 15 + protoc-gen-swagger/genswagger/template.go | 32 +- protoc-gen-swagger/genswagger/types.go | 5 +- protoc-gen-swagger/options/openapiv2.pb.go | 253 +++++----- protoc-gen-swagger/options/openapiv2.proto | 5 +- 10 files changed, 470 insertions(+), 351 deletions(-) diff --git a/README.md b/README.md index 9f7493d9bf2..85aaa7b6b0f 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,10 @@ annotation to your .proto file } ``` + See [a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) + for examples of more annotations you can add to customize gateway behavior + and generated Swagger output. + If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC Service Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. @@ -210,6 +214,16 @@ annotation to your .proto file ``` ## Parameters and flags + +During code generation with `protoc`, flags to grpc-gateway tools must be passed +through protoc using the `--_out=:` pattern, for +example: + +```sh +--grpc-gateway_out=logtostderr=true,repeated_path_param_separator=ssv:. +--swagger_out=logtostderr=true,repeated_path_param_separator=ssv:. +``` + `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import paths. They are compatible to [the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters) @@ -223,6 +237,15 @@ useful to pass request scoped context between the gateway and the gRPC service. logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. +Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger +output (for example, `json_names_for_fields` to output JSON names for fields +instead of protobuf names). Run `protoc-gen-swagger --help` for more flag +details. Further Swagger customization is possible by annotating your `.proto` +files with options from +[openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see +[a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) +for examples. + ## More Examples More examples are available under `examples` directory. * `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 2bb0f22cb3b..7ccf52e0abd 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -68,6 +68,10 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` + See [a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) + for examples of more annotations you can add to customize gateway behavior + and generated Swagger output. + If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](grpcapiconfiguration.html) for more information. 3. Generate gRPC stub @@ -174,6 +178,16 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. ``` ## Parameters and flags + +During code generation with `protoc`, flags to grpc-gateway tools must be passed +through protoc using the `--_out=:` pattern, for +example: + +```sh +--grpc-gateway_out=logtostderr=true,repeated_path_param_separator=ssv:. +--swagger_out=logtostderr=true,repeated_path_param_separator=ssv:. +``` + `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import path. They are compatible to [the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). @@ -182,6 +196,15 @@ This parameter can be useful to pass request scoped context between the gateway `protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. +Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger +output (for example, `json_names_for_fields` to output JSON names for fields +instead of protobuf names). Run `protoc-gen-swagger --help` for more flag +details. Further Swagger customization is possible by annotating your `.proto` +files with options from +[openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see +[a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) +for examples. + # Mapping gRPC to HTTP * [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml index ab5f7a80719..91859be58e5 100644 --- a/examples/clients/abe/api/swagger.yaml +++ b/examples/clients/abe/api/swagger.yaml @@ -75,6 +75,9 @@ paths: responses: 200: description: "A successful response." + examples: + application/json: + value: "the input value" schema: $ref: "#/definitions/subStringMessage" 403: @@ -1560,6 +1563,9 @@ paths: responses: 200: description: "A successful response." + examples: + application/json: + value: "the input value" schema: $ref: "#/definitions/subStringMessage" 403: @@ -1598,6 +1604,9 @@ paths: responses: 200: description: "A successful response." + examples: + application/json: + value: "the input value" schema: $ref: "#/definitions/subStringMessage" 403: @@ -2189,8 +2198,6 @@ definitions: properties: value: type: "string" - example: - value: "value" externalDocs: description: "More about gRPC-Gateway" url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index bbfbc52d053..78a653b0adb 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -820,228 +820,229 @@ func init() { } var fileDescriptor_3978364c010e812a = []byte{ - // 3523 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x6c, 0x1b, 0xc7, - 0x7e, 0xd7, 0x72, 0xf5, 0x39, 0xb2, 0xbe, 0x46, 0x96, 0x2d, 0xd3, 0x4a, 0x34, 0xa6, 0x9d, 0x97, - 0x35, 0x9f, 0xc9, 0x95, 0x56, 0x4a, 0x62, 0x33, 0x7d, 0x49, 0x48, 0x49, 0x76, 0x64, 0x27, 0xb2, - 0xb2, 0x76, 0xdc, 0xd4, 0x2f, 0x7e, 0xea, 0x90, 0x1c, 0x8a, 0x6b, 0x71, 0x77, 0xf6, 0xed, 0xce, - 0xca, 0xa2, 0x55, 0xb6, 0x0f, 0x6d, 0xd1, 0x02, 0xef, 0xdd, 0xf8, 0xfa, 0x81, 0xd7, 0x87, 0xf6, - 0x52, 0xf4, 0x52, 0xf4, 0x54, 0xa0, 0xa7, 0x02, 0xed, 0xa5, 0xb7, 0x02, 0x6d, 0x91, 0x02, 0x45, - 0x2f, 0x3d, 0xb5, 0xe7, 0x02, 0x45, 0x8b, 0x00, 0x3d, 0xb4, 0x28, 0x66, 0x76, 0x97, 0xdc, 0x5d, - 0x92, 0x96, 0x69, 0x17, 0x49, 0x0e, 0xf1, 0xce, 0xcc, 0xff, 0xe3, 0xf7, 0x9f, 0xf9, 0xcf, 0xff, - 0x63, 0x28, 0xa0, 0x91, 0x13, 0x6c, 0xda, 0x0d, 0xe2, 0xaa, 0xb6, 0x43, 0x19, 0x55, 0x83, 0xa1, - 0x5d, 0x56, 0xf1, 0x41, 0xd9, 0x60, 0x07, 0xb4, 0x76, 0x40, 0x8e, 0x89, 0xd3, 0x64, 0x75, 0xc3, - 0x3a, 0xcc, 0x0b, 0x1a, 0xb8, 0x7a, 0xe8, 0xd8, 0x95, 0xfc, 0x21, 0x66, 0xe4, 0x19, 0x6e, 0xe6, - 0x43, 0x01, 0xf9, 0x0e, 0x6b, 0x7a, 0xe5, 0x90, 0xd2, 0xc3, 0x06, 0x51, 0xb1, 0x6d, 0xa8, 0xd8, - 0xb2, 0x28, 0xc3, 0xcc, 0xa0, 0x96, 0xeb, 0xb3, 0xa7, 0x51, 0xb0, 0x2a, 0x46, 0x65, 0xaf, 0xa6, - 0xd6, 0x0c, 0xd2, 0xa8, 0x1e, 0x98, 0xd8, 0x3d, 0x0a, 0x28, 0x2e, 0x27, 0x29, 0x88, 0x69, 0xb3, - 0x66, 0xb0, 0xf8, 0x66, 0x72, 0xb1, 0xea, 0x39, 0x42, 0x7e, 0xb0, 0xfe, 0x76, 0xc2, 0x22, 0x1b, - 0xb3, 0x3a, 0xb1, 0x3c, 0x53, 0x7c, 0x1c, 0xf0, 0xaf, 0x10, 0x47, 0x82, 0xd0, 0xf5, 0xca, 0xaa, - 0x49, 0x5c, 0x17, 0x1f, 0x92, 0x80, 0xe2, 0x4a, 0x2f, 0x85, 0x96, 0x20, 0x59, 0x4d, 0xa2, 0x61, - 0x86, 0x49, 0x5c, 0x86, 0x4d, 0x3b, 0x20, 0xb8, 0x21, 0xfe, 0xa9, 0xe4, 0x0e, 0x89, 0x95, 0x73, - 0x9f, 0xe1, 0xc3, 0x43, 0xe2, 0xa8, 0xd4, 0x16, 0xfb, 0xd1, 0xbb, 0x37, 0x99, 0x7f, 0xb8, 0x0c, - 0xe6, 0x8b, 0x25, 0x83, 0xdd, 0xaf, 0xed, 0x74, 0x76, 0x1d, 0x3e, 0x01, 0x33, 0xae, 0x61, 0x1d, - 0x36, 0xc8, 0x81, 0x45, 0x5c, 0x46, 0xaa, 0xcb, 0x97, 0x90, 0xa4, 0x4c, 0x6b, 0x37, 0xf3, 0x67, - 0x9c, 0x43, 0x3e, 0x29, 0x29, 0xbf, 0x27, 0xf8, 0xf5, 0x73, 0xbe, 0x38, 0x7f, 0x04, 0xeb, 0x60, - 0xd4, 0xf3, 0x8c, 0xea, 0xb2, 0x84, 0x24, 0x65, 0xaa, 0xf4, 0xb0, 0x5d, 0xfc, 0xec, 0x47, 0x92, - 0xf4, 0x63, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, - 0xb3, 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, - 0xb0, 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xe9, 0x5a, 0x83, 0x62, 0x76, - 0x70, 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, - 0xb7, 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, - 0x1d, 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0x73, 0x55, 0xea, 0x95, 0x1b, 0x24, 0x10, 0x36, - 0x8a, 0x24, 0x45, 0xd2, 0xa7, 0xfd, 0x39, 0x9f, 0x64, 0x15, 0x4c, 0x1b, 0x16, 0x7b, 0x77, 0x33, - 0xa0, 0x18, 0x43, 0x92, 0x22, 0xeb, 0x40, 0x4c, 0x75, 0x64, 0x78, 0x51, 0x8a, 0x71, 0x24, 0x29, - 0xa3, 0xfa, 0xb4, 0x17, 0x21, 0xf1, 0x65, 0x6c, 0x68, 0x01, 0xc5, 0x04, 0x92, 0x94, 0x31, 0x21, - 0x63, 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x93, 0x48, 0x52, - 0xc6, 0xf5, 0x73, 0xc1, 0x64, 0x9c, 0xa8, 0x23, 0x67, 0x0a, 0x49, 0xca, 0x44, 0x40, 0x14, 0x4a, - 0x7a, 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd4, 0xa7, 0xf8, 0x4c, 0x07, - 0xac, 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb9, 0x03, 0xe8, 0xd3, 0xfe, 0x5c, 0x07, 0x6c, - 0xb9, 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0xe5, 0x9c, 0x0e, 0xc4, 0x54, 0xcc, 0xe0, 0x0e, - 0x8c, 0x19, 0x24, 0x29, 0x33, 0xbe, 0xc1, 0x21, 0x8a, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x10, 0xcc, - 0x22, 0x49, 0x99, 0xd5, 0x6e, 0x9c, 0x79, 0xf2, 0x7b, 0x9e, 0x49, 0x1c, 0xa3, 0xb2, 0x63, 0x79, - 0xa6, 0x3e, 0xc5, 0xf9, 0x7d, 0x61, 0xfb, 0x60, 0xae, 0x73, 0x8f, 0x03, 0x89, 0x6f, 0x0a, 0x89, - 0xca, 0x00, 0x89, 0xe1, 0xf5, 0xcf, 0xef, 0x63, 0x56, 0x17, 0xd2, 0x66, 0xec, 0xe0, 0xcb, 0x97, - 0xe8, 0x82, 0x0b, 0xbe, 0x33, 0x1d, 0x24, 0x05, 0xaf, 0x0a, 0xc1, 0x1f, 0x9c, 0x25, 0xf8, 0x53, - 0x3f, 0x20, 0x84, 0xf2, 0x03, 0x17, 0xed, 0xa8, 0x5b, 0xb4, 0x62, 0x63, 0x5f, 0xe9, 0x5b, 0x60, - 0xd6, 0x8d, 0x9f, 0xdf, 0x1c, 0x92, 0x94, 0x39, 0x7d, 0xc6, 0x8d, 0x1d, 0x60, 0x87, 0xac, 0xe3, - 0x0b, 0xf3, 0x48, 0x52, 0xe6, 0x43, 0xb2, 0x88, 0xd7, 0xb9, 0xd1, 0x43, 0x58, 0x40, 0x92, 0xb2, - 0xa0, 0x4f, 0xbb, 0x91, 0x43, 0x08, 0x48, 0x3a, 0x72, 0x20, 0x92, 0x14, 0xe8, 0x93, 0x84, 0x52, - 0x34, 0xb0, 0xe4, 0x10, 0x9b, 0x60, 0xbe, 0x15, 0x31, 0xbf, 0x58, 0x44, 0xb2, 0x32, 0xa5, 0x2f, - 0x86, 0x8b, 0x0f, 0x22, 0xfe, 0x71, 0x0b, 0x4c, 0x53, 0x8b, 0xf0, 0x24, 0xc1, 0x23, 0xf4, 0xf2, - 0x79, 0x11, 0x98, 0x2e, 0xe4, 0xfd, 0xa0, 0x98, 0x0f, 0x83, 0x62, 0x7e, 0x87, 0xaf, 0x7e, 0x3c, - 0xa2, 0x03, 0x41, 0x2c, 0x46, 0xf0, 0x2a, 0x38, 0xe7, 0xb3, 0xfa, 0xba, 0x96, 0x97, 0xb8, 0xf7, - 0x7d, 0x3c, 0xa2, 0xfb, 0x02, 0x7d, 0x25, 0xf0, 0x4b, 0x30, 0x65, 0x62, 0x3b, 0xc0, 0x71, 0x41, - 0x04, 0x8d, 0x0f, 0x87, 0x0f, 0x1a, 0x9f, 0x62, 0x5b, 0xc0, 0xdd, 0xb1, 0x98, 0xd3, 0xd4, 0x27, - 0xcd, 0x60, 0x08, 0x4f, 0xc0, 0xa2, 0x89, 0x6d, 0x3b, 0x69, 0xef, 0x45, 0xa1, 0xe7, 0xe3, 0x57, - 0xd2, 0x63, 0xc7, 0xf6, 0xc7, 0x57, 0xb8, 0x60, 0x26, 0xe7, 0x23, 0x9a, 0x03, 0xdf, 0xf3, 0x35, - 0x2f, 0xbf, 0x9e, 0x66, 0xdf, 0xf3, 0x7a, 0x35, 0x47, 0xe6, 0x61, 0x01, 0x2c, 0x5b, 0xd4, 0xda, - 0xa2, 0xd6, 0x31, 0xb1, 0x78, 0xe6, 0xc1, 0x8d, 0x3d, 0x6c, 0xfa, 0xe1, 0x6d, 0x39, 0x2d, 0x02, - 0xc0, 0xc0, 0x75, 0xb8, 0x05, 0xe6, 0x3a, 0xe9, 0x2d, 0x40, 0x7c, 0x59, 0x9c, 0x78, 0xba, 0xe7, - 0xc4, 0x1f, 0x86, 0x74, 0xfa, 0x6c, 0x87, 0xc5, 0x17, 0xf2, 0x25, 0xe8, 0x78, 0x52, 0xf4, 0xb2, - 0xad, 0x20, 0x79, 0xe8, 0xb8, 0xb0, 0x10, 0x0a, 0xea, 0x5e, 0xac, 0x3f, 0x93, 0xc0, 0x72, 0x5c, - 0x7c, 0x37, 0xc9, 0x2e, 0xa3, 0xe1, 0x75, 0x94, 0xb6, 0xdb, 0xc5, 0x62, 0xf6, 0xb2, 0x1e, 0x88, - 0x44, 0x96, 0xbf, 0x84, 0xb8, 0x68, 0xc4, 0x0c, 0xd6, 0x20, 0x5a, 0xa6, 0xff, 0x62, 0x95, 0xb8, - 0x15, 0xc7, 0x10, 0x99, 0x3e, 0xaf, 0x5f, 0x88, 0x22, 0x2d, 0x76, 0x10, 0xc1, 0xdf, 0x91, 0xc0, - 0x52, 0x77, 0x13, 0xa2, 0x58, 0xaf, 0x0c, 0x1f, 0x27, 0x4b, 0x5a, 0xbb, 0xa8, 0x66, 0xe1, 0x5e, - 0x2f, 0xc4, 0x4b, 0x7b, 0x03, 0x91, 0x2d, 0x76, 0x62, 0x6b, 0x04, 0xd6, 0x31, 0x48, 0x27, 0x43, - 0x41, 0x04, 0x5a, 0x86, 0xc7, 0x83, 0xd2, 0xcd, 0x76, 0xf1, 0x9d, 0xec, 0x52, 0xc7, 0x76, 0x9f, - 0x2c, 0xd0, 0xb7, 0x92, 0x9c, 0x8e, 0xa9, 0x5c, 0x8e, 0x47, 0x92, 0x88, 0xde, 0xbf, 0x92, 0x22, - 0x8a, 0x83, 0x9b, 0x11, 0x51, 0x7c, 0xf5, 0xf5, 0xaa, 0x86, 0xd2, 0xed, 0x76, 0x71, 0x2b, 0xdb, - 0xc5, 0xe6, 0x2b, 0x40, 0xb4, 0xfc, 0x94, 0x54, 0x58, 0x80, 0xfc, 0xea, 0x80, 0xd5, 0xfe, 0x06, - 0xf8, 0x72, 0x23, 0x06, 0xfc, 0x5c, 0x02, 0x0b, 0xbd, 0xb8, 0xaf, 0xbd, 0x5e, 0xbd, 0x56, 0xda, - 0x6c, 0x17, 0xd7, 0xb3, 0x8b, 0x7b, 0x7d, 0xe0, 0xa6, 0xf7, 0x06, 0xa3, 0x9c, 0xb7, 0x92, 0xe8, - 0xde, 0x03, 0x8b, 0x7e, 0x0e, 0xa0, 0xc7, 0xc4, 0x71, 0x8c, 0x2a, 0x39, 0x60, 0x4d, 0x9b, 0x2c, - 0xbf, 0xc5, 0xcb, 0x98, 0xd2, 0x44, 0xbb, 0x38, 0xfa, 0x07, 0x29, 0x49, 0xd6, 0x17, 0x04, 0xcd, - 0xfd, 0x80, 0xe4, 0x61, 0xd3, 0x26, 0xe9, 0x7f, 0x91, 0xc0, 0x78, 0x50, 0x2d, 0x42, 0x30, 0x6a, - 0x61, 0x93, 0xf8, 0xd5, 0xa2, 0x2e, 0xbe, 0xe1, 0x05, 0x30, 0x8e, 0x4d, 0xea, 0x59, 0x6c, 0x39, - 0x25, 0xd2, 0x7f, 0x30, 0x82, 0x26, 0x48, 0xd1, 0x23, 0x51, 0x94, 0xcd, 0x6a, 0xc5, 0x57, 0xb5, - 0x3e, 0xbf, 0x4d, 0x88, 0x2d, 0xdc, 0x3b, 0xdd, 0x2e, 0x5e, 0xd4, 0x96, 0xc2, 0x61, 0xdc, 0xd8, - 0x14, 0x3d, 0xca, 0xac, 0x82, 0xc9, 0x70, 0x11, 0x4e, 0x81, 0xb1, 0xdb, 0xc5, 0x4f, 0x1e, 0xec, - 0xcc, 0x8f, 0xc0, 0x49, 0x30, 0xfa, 0x50, 0xff, 0x7c, 0x67, 0x5e, 0x2a, 0x5c, 0x6c, 0x17, 0xcf, - 0x6b, 0x10, 0xce, 0x9f, 0xa2, 0x0c, 0x3d, 0xca, 0x14, 0x50, 0x86, 0xcf, 0x67, 0x50, 0x2b, 0x6d, - 0x80, 0x99, 0x58, 0x8e, 0x80, 0xf3, 0x40, 0x3e, 0x22, 0xcd, 0xc0, 0x48, 0xfe, 0x09, 0x4b, 0x60, - 0xcc, 0x0f, 0x54, 0xa9, 0x57, 0x28, 0x60, 0x7c, 0xd6, 0x42, 0xea, 0xa6, 0x94, 0xde, 0x06, 0x17, - 0xfa, 0xa7, 0x89, 0x3e, 0x3a, 0xcf, 0x47, 0x75, 0x4e, 0x45, 0xa5, 0xfc, 0x6a, 0x28, 0x25, 0x19, - 0xf2, 0xfb, 0x48, 0xd9, 0x8b, 0x4a, 0x79, 0x9d, 0xa2, 0xbb, 0xab, 0xbf, 0xf0, 0xb3, 0x54, 0xbb, - 0xf8, 0xbb, 0x29, 0xf0, 0x9b, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, - 0xa2, 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, - 0x15, 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, - 0x23, 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, - 0x29, 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, - 0xf5, 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, - 0x0b, 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, - 0x75, 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, - 0x67, 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, - 0xe6, 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, - 0xe4, 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x77, 0x12, - 0x2c, 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, - 0x46, 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, - 0xe3, 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, - 0xf4, 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, - 0x1a, 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, - 0xeb, 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, - 0xc2, 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, - 0x86, 0xc9, 0xca, 0x44, 0x1f, 0xf6, 0x50, 0xfb, 0x7b, 0x60, 0x39, 0xce, 0x1e, 0x69, 0xac, 0x26, - 0x91, 0xac, 0x4c, 0xea, 0x4b, 0x51, 0xde, 0x52, 0xa7, 0xc9, 0xea, 0xd9, 0xae, 0x58, 0xa9, 0x39, - 0x25, 0x4a, 0xeb, 0xd8, 0x76, 0xc5, 0xcb, 0xeb, 0xc4, 0x76, 0x45, 0x9b, 0x31, 0x80, 0x64, 0xe5, - 0x5c, 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x46, 0xb2, 0x32, 0xd3, - 0x7b, 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x3b, 0xf7, 0x0a, 0x85, 0x5a, 0x6c, 0x6f, - 0xba, 0xc5, 0xda, 0x87, 0x60, 0x25, 0xb1, 0x37, 0xf1, 0x43, 0x99, 0x41, 0xb2, 0x32, 0xa7, 0x5f, - 0x8a, 0xed, 0x4e, 0xac, 0x3f, 0x1a, 0x20, 0xa0, 0xe3, 0x14, 0xb3, 0x48, 0x56, 0xe6, 0xfb, 0x09, - 0x18, 0xe8, 0xcc, 0xb1, 0x3e, 0x6a, 0x0e, 0xc9, 0xca, 0x42, 0xe2, 0x74, 0x22, 0xbb, 0xd4, 0x97, - 0x39, 0xd2, 0xa9, 0xc9, 0x0a, 0xec, 0x65, 0x0e, 0x34, 0x17, 0xea, 0xed, 0x22, 0xd1, 0x2a, 0x10, - 0x9f, 0xa2, 0xcc, 0x20, 0xc7, 0xca, 0x14, 0xd0, 0xf7, 0x99, 0xe3, 0x91, 0x1b, 0xc8, 0xff, 0x7f, - 0x0d, 0x37, 0xdc, 0x60, 0xf0, 0xe4, 0x46, 0x92, 0x2d, 0x82, 0x9b, 0xf3, 0xad, 0xdf, 0x40, 0xda, - 0x0d, 0xb4, 0xf1, 0x04, 0xb5, 0x32, 0x69, 0x30, 0x5a, 0xa2, 0xd5, 0x66, 0xbf, 0xcc, 0x9d, 0xf9, - 0x12, 0xcc, 0x05, 0xed, 0xeb, 0x2f, 0x1a, 0xac, 0x2e, 0xc8, 0x66, 0x41, 0x2a, 0x7c, 0x0c, 0xd2, - 0x53, 0x06, 0x0f, 0x51, 0xa3, 0x55, 0xcc, 0x70, 0x90, 0x3d, 0xde, 0x3a, 0xf3, 0xdc, 0xb9, 0x10, - 0x5d, 0xb0, 0x64, 0x7e, 0x2a, 0x81, 0xb9, 0xcf, 0xed, 0x2a, 0x66, 0xe4, 0x91, 0xa6, 0x93, 0x1f, - 0x7a, 0xc4, 0x65, 0x70, 0x0b, 0xc8, 0xb8, 0xec, 0x83, 0x98, 0xd6, 0xd6, 0x87, 0xce, 0x45, 0x3a, - 0xe7, 0x86, 0xef, 0x83, 0x69, 0x4f, 0xc8, 0x15, 0xaf, 0x86, 0x01, 0xb4, 0xde, 0x26, 0xe4, 0xb6, - 0x41, 0x1a, 0xd5, 0x4f, 0xb1, 0x7b, 0xa4, 0x03, 0x9f, 0x9c, 0x7f, 0x67, 0x11, 0x98, 0x8e, 0xf8, - 0x26, 0x2f, 0x0f, 0x1e, 0xef, 0xe8, 0xf7, 0xe7, 0x47, 0xe0, 0x04, 0x90, 0xef, 0xef, 0xed, 0xcc, - 0x4b, 0xda, 0xcf, 0xae, 0x80, 0x8b, 0x49, 0xc5, 0x0f, 0x88, 0x73, 0x6c, 0x54, 0x08, 0xfc, 0x77, - 0x19, 0x8c, 0x6f, 0x39, 0x7c, 0xcf, 0xe1, 0xf0, 0xe8, 0xd3, 0xc3, 0xb3, 0x64, 0xfe, 0x27, 0xf5, - 0xeb, 0xff, 0xf8, 0x6f, 0x3f, 0x4d, 0x7d, 0x9d, 0xca, 0xfc, 0x67, 0x4a, 0x3d, 0x5e, 0x0f, 0x5f, - 0x68, 0xfb, 0xbd, 0xcf, 0xaa, 0xa7, 0x91, 0xf4, 0xd1, 0x52, 0x4f, 0xa3, 0x19, 0xa1, 0xa5, 0x9e, - 0x46, 0xbc, 0xb3, 0xa5, 0xba, 0xc4, 0xc6, 0x0e, 0x66, 0xd4, 0x51, 0x4f, 0xbd, 0xd8, 0xc2, 0x69, - 0xc4, 0x93, 0x5a, 0xea, 0x69, 0xec, 0x42, 0x85, 0xe3, 0xc8, 0x7a, 0xd7, 0x5d, 0x5b, 0xea, 0x69, - 0x34, 0xb6, 0x7d, 0xcf, 0x65, 0x8e, 0xed, 0x90, 0x9a, 0x71, 0xa2, 0x66, 0x5b, 0xbe, 0x92, 0x08, - 0x9b, 0x9b, 0x94, 0xe3, 0x26, 0x15, 0xb9, 0x09, 0x86, 0x38, 0xc8, 0x41, 0x3d, 0x6a, 0x4b, 0x3d, - 0xed, 0xc6, 0xaa, 0x96, 0x7a, 0x9a, 0x78, 0xd3, 0xe1, 0x9c, 0x7d, 0x1f, 0x7b, 0x62, 0x7c, 0x91, - 0xda, 0xbd, 0x05, 0xff, 0x48, 0x02, 0xc0, 0x3f, 0x70, 0x71, 0x3d, 0xbe, 0x99, 0x43, 0xcf, 0x8a, - 0x33, 0xbf, 0x96, 0x59, 0x3d, 0xe3, 0xc4, 0x0b, 0x52, 0x16, 0xfe, 0x0a, 0x18, 0xff, 0x84, 0xd2, - 0x23, 0xcf, 0x86, 0x73, 0x79, 0xd7, 0x2b, 0x6b, 0xf9, 0xdd, 0x6a, 0x70, 0xa7, 0x5f, 0x45, 0x73, - 0x5e, 0x68, 0x56, 0xe0, 0x77, 0xce, 0xf4, 0x35, 0x5e, 0x17, 0xb5, 0xe0, 0x6f, 0x49, 0x60, 0xdc, - 0xbf, 0xe3, 0xaf, 0xb2, 0x35, 0x03, 0x9e, 0x8a, 0x32, 0xeb, 0x02, 0xc5, 0x77, 0xd3, 0x2f, 0x89, - 0x82, 0x6f, 0xc3, 0x7f, 0x49, 0x60, 0x32, 0x0c, 0x36, 0x70, 0xed, 0x4c, 0x28, 0x89, 0xb8, 0x34, - 0x10, 0xc9, 0x1f, 0x4a, 0x02, 0xca, 0xef, 0x49, 0xe9, 0xac, 0x7a, 0xac, 0xbd, 0x18, 0x0b, 0x2e, - 0x93, 0xbc, 0x8f, 0x87, 0x47, 0xa9, 0xc7, 0xeb, 0xda, 0xd0, 0x2c, 0x6b, 0xda, 0x77, 0xd5, 0x63, - 0x0d, 0xbf, 0x2c, 0x8f, 0x94, 0x85, 0x7f, 0x22, 0x81, 0xf1, 0x6d, 0xd2, 0x20, 0x8c, 0xf4, 0x1e, - 0xff, 0x20, 0x9b, 0x9c, 0x76, 0xb1, 0x58, 0xbe, 0x0e, 0x66, 0x01, 0x28, 0xda, 0xc6, 0x3d, 0xd2, - 0x2c, 0x7a, 0xac, 0x0e, 0x47, 0xc0, 0x45, 0x30, 0x7e, 0x9f, 0x7f, 0x6a, 0x70, 0x06, 0x8c, 0x3a, - 0x04, 0x57, 0xc1, 0xd8, 0x33, 0xc7, 0x60, 0xe4, 0xe9, 0x79, 0x30, 0x7b, 0x92, 0x33, 0x1c, 0x87, - 0x83, 0x70, 0x8d, 0x72, 0x83, 0xc0, 0x14, 0xf2, 0xb7, 0x45, 0xc9, 0xbe, 0xac, 0x9f, 0xfc, 0xab, - 0x04, 0x26, 0xef, 0x10, 0xf6, 0x99, 0x47, 0x9c, 0xe6, 0xff, 0xa7, 0xa7, 0xfc, 0x44, 0x6a, 0x17, - 0x1f, 0x66, 0xf6, 0xc0, 0x4a, 0xbf, 0x0e, 0xa0, 0xa3, 0x70, 0xc8, 0xca, 0xff, 0x0b, 0xa9, 0x3c, - 0x22, 0xec, 0xcb, 0xc3, 0x1b, 0x67, 0xd9, 0xf7, 0x43, 0xae, 0x20, 0xb4, 0xf2, 0x27, 0x63, 0x60, - 0xfe, 0x0e, 0x61, 0x61, 0xc2, 0xf7, 0x95, 0xdf, 0x1a, 0x3e, 0xcb, 0x05, 0xfc, 0xe9, 0x57, 0x67, - 0xcd, 0xfc, 0x68, 0x54, 0x58, 0xf0, 0xdf, 0x32, 0xfc, 0x5a, 0x3e, 0xc3, 0x86, 0x4e, 0x15, 0x11, - 0xc4, 0xcb, 0x7e, 0xdd, 0x48, 0x2b, 0xb9, 0x96, 0x48, 0x2e, 0x03, 0xdb, 0x89, 0x9e, 0x35, 0xef, - 0x45, 0x8b, 0xf1, 0xa0, 0xff, 0x82, 0x82, 0xbf, 0xff, 0xea, 0x40, 0xde, 0x58, 0x9a, 0x1a, 0x5c, - 0x90, 0xf7, 0xf2, 0x75, 0x0b, 0xee, 0xbe, 0x86, 0x0c, 0x54, 0xd8, 0x9b, 0x85, 0x06, 0x54, 0xb9, - 0x03, 0x96, 0x07, 0xda, 0xe9, 0xbe, 0x48, 0x6b, 0x2c, 0x4b, 0xc2, 0xbf, 0x93, 0xc1, 0xe8, 0x4e, - 0xa5, 0x4e, 0xe1, 0xa0, 0x1f, 0x47, 0x5c, 0xaf, 0x9c, 0xf7, 0xfb, 0x8d, 0x30, 0x64, 0xbc, 0x34, - 0x65, 0xe6, 0x3f, 0x52, 0xed, 0xe2, 0x8f, 0x53, 0x60, 0x92, 0x54, 0xea, 0x14, 0x39, 0x76, 0x05, - 0x2e, 0x3c, 0xf0, 0x4c, 0x13, 0x3b, 0xcd, 0x02, 0xda, 0x09, 0xa6, 0xd2, 0xf3, 0xdb, 0xdd, 0x37, - 0x1a, 0x31, 0x9b, 0xd9, 0x06, 0x30, 0x7e, 0x51, 0x05, 0xbe, 0x21, 0xaf, 0xe7, 0xdd, 0x47, 0x40, - 0x7e, 0x67, 0x6d, 0x03, 0xde, 0x07, 0xef, 0xea, 0x84, 0x79, 0x8e, 0x45, 0xaa, 0xe8, 0x59, 0x9d, - 0x58, 0x88, 0xd5, 0x09, 0x72, 0x88, 0x4b, 0x3d, 0xa7, 0x42, 0x90, 0xe1, 0x22, 0x46, 0x4c, 0x9b, - 0x3a, 0xd8, 0x31, 0x1a, 0x4d, 0xe4, 0x59, 0xf8, 0x18, 0x1b, 0x0d, 0x5c, 0x6e, 0x90, 0x7c, 0x76, - 0x09, 0x4c, 0x9e, 0xe4, 0x2c, 0xcf, 0x2c, 0x13, 0x07, 0x4e, 0x2d, 0x8c, 0x88, 0xff, 0x7e, 0xe9, - 0xa3, 0xbb, 0xef, 0x03, 0x79, 0x73, 0x6d, 0x13, 0x6e, 0x82, 0xec, 0x0b, 0xe4, 0x56, 0x29, 0x71, - 0x91, 0x45, 0x19, 0x22, 0x27, 0x86, 0xcb, 0xf2, 0x70, 0x1c, 0x88, 0x77, 0x33, 0x71, 0xdb, 0x9e, - 0x9c, 0x1d, 0x2f, 0xf8, 0x7e, 0xa9, 0xa7, 0xfe, 0x09, 0x3d, 0xbe, 0x94, 0x99, 0x8f, 0xa6, 0x08, - 0xbe, 0x56, 0xf0, 0x9f, 0x59, 0x1e, 0x43, 0xd8, 0xb3, 0x04, 0xff, 0x42, 0x02, 0xe7, 0xb6, 0x09, - 0xb1, 0xc5, 0x8f, 0x49, 0x7c, 0xe2, 0x9b, 0xa9, 0x46, 0x3e, 0x14, 0xb6, 0xdd, 0xca, 0x6c, 0x9e, - 0x19, 0xeb, 0x63, 0xbf, 0x53, 0xe7, 0x79, 0x8b, 0x21, 0x92, 0x54, 0x11, 0x80, 0x3d, 0x5a, 0x32, - 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x28, 0xdf, 0x0e, 0x7e, 0xc2, 0x1f, 0x18, 0xe5, - 0x47, 0xe0, 0x23, 0x30, 0xf1, 0xd0, 0x30, 0x09, 0xf5, 0x18, 0x1c, 0x40, 0x34, 0x90, 0xf9, 0xb2, - 0x80, 0xbf, 0x04, 0x17, 0xa3, 0xfb, 0xc9, 0x02, 0x61, 0x75, 0x30, 0xbf, 0xe3, 0x38, 0xd4, 0xe1, - 0xfd, 0xcf, 0x36, 0x61, 0xd8, 0x68, 0xb8, 0x43, 0x2b, 0xb8, 0x26, 0x14, 0xbc, 0x09, 0x57, 0x62, - 0x07, 0xc6, 0xa5, 0x3e, 0x33, 0x58, 0xbd, 0x1a, 0x48, 0xfd, 0x6d, 0x09, 0xc0, 0x3b, 0x84, 0x25, - 0xfb, 0xad, 0xb3, 0x4b, 0x95, 0x04, 0xc7, 0x40, 0x18, 0x6f, 0x0b, 0x18, 0x57, 0x32, 0x97, 0xa2, - 0x30, 0x38, 0x82, 0x32, 0xad, 0x36, 0xd5, 0x53, 0x5e, 0x30, 0x88, 0xbe, 0x0c, 0xfe, 0x86, 0x04, - 0x16, 0xf6, 0xa9, 0xcb, 0xb8, 0x44, 0xc1, 0x2a, 0x80, 0xbc, 0x5c, 0x6b, 0x37, 0x50, 0xbb, 0x2a, - 0xb4, 0x5f, 0xcf, 0x5c, 0x8b, 0x6a, 0xb7, 0xa9, 0xcb, 0x38, 0x02, 0xf1, 0xf3, 0xa0, 0x0f, 0xa3, - 0xe3, 0x14, 0x7f, 0x23, 0x81, 0xc5, 0xad, 0x3a, 0xa9, 0x1c, 0x85, 0x59, 0x7a, 0x1f, 0x3b, 0xd8, - 0x74, 0xbf, 0x21, 0x9f, 0xbe, 0x23, 0xe0, 0x16, 0xe1, 0x87, 0x67, 0xf9, 0xb4, 0x2d, 0x50, 0xa9, - 0x87, 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0xcf, 0x12, 0x78, 0x43, 0x98, 0xe1, 0xbf, 0x92, 0xf2, 0x9e, - 0xf2, 0x5b, 0x31, 0xe8, 0x33, 0x61, 0xd0, 0x3d, 0xb8, 0x3b, 0x84, 0x41, 0x41, 0x2f, 0x24, 0xfe, - 0x3c, 0x26, 0x61, 0x1c, 0x3d, 0x6a, 0xc1, 0xbf, 0x97, 0xc0, 0x79, 0x61, 0x1a, 0x77, 0x96, 0x6f, - 0xcd, 0xa2, 0x4c, 0xe1, 0x25, 0x2d, 0xe2, 0xce, 0x16, 0xef, 0x41, 0x5b, 0x85, 0xf8, 0x5f, 0xce, - 0xa4, 0xff, 0x5a, 0x6a, 0x17, 0xff, 0x52, 0x82, 0xb5, 0x01, 0xdd, 0x7d, 0xf4, 0x37, 0x05, 0x94, - 0xcb, 0xa1, 0x67, 0x75, 0xa3, 0x52, 0x47, 0x6e, 0x9d, 0x7a, 0x8d, 0xaa, 0x08, 0xf9, 0x65, 0x82, - 0x3c, 0x97, 0x54, 0x91, 0x61, 0x21, 0xbb, 0x81, 0x2b, 0x04, 0xd1, 0x9a, 0x48, 0x0e, 0x55, 0x5a, - 0xf1, 0x4c, 0x62, 0xf9, 0x3d, 0x23, 0xaa, 0x50, 0x93, 0x0f, 0xae, 0xa4, 0x3f, 0x03, 0xab, 0xfd, - 0xca, 0x52, 0x1e, 0xba, 0xc3, 0xf7, 0x84, 0x61, 0xdf, 0xa4, 0x9f, 0x82, 0xf3, 0x15, 0x6c, 0x92, - 0xc6, 0x16, 0x76, 0x49, 0x20, 0x83, 0x37, 0xbf, 0x50, 0x07, 0x63, 0xfe, 0xef, 0xea, 0xc3, 0x06, - 0xaf, 0x4b, 0x62, 0x97, 0x17, 0xe1, 0x42, 0x2c, 0x78, 0xf1, 0x25, 0xed, 0x07, 0x60, 0xa5, 0x68, - 0x51, 0x56, 0x27, 0x4e, 0xa0, 0x89, 0x07, 0x8c, 0x48, 0x20, 0xff, 0x20, 0x16, 0xd6, 0x87, 0x55, - 0x3c, 0x52, 0xfa, 0xf3, 0xa9, 0x76, 0xf1, 0x8f, 0xa7, 0xe0, 0xd7, 0x12, 0x58, 0x2c, 0xa2, 0x92, - 0xff, 0x2b, 0x42, 0xe4, 0xfc, 0xbf, 0x00, 0xe7, 0x0f, 0xf5, 0xfd, 0xad, 0xdc, 0x1d, 0xdf, 0x74, - 0x64, 0x3b, 0xf4, 0x29, 0xa9, 0xb0, 0x61, 0xb7, 0x2c, 0x3d, 0x6f, 0x51, 0x8b, 0x7c, 0x14, 0x98, - 0xc6, 0xa9, 0xb3, 0x3f, 0x00, 0xe7, 0x4b, 0x0f, 0xb6, 0xd1, 0x46, 0x6e, 0xab, 0x81, 0x3d, 0x97, - 0xa0, 0x4f, 0x8c, 0x0a, 0xb1, 0x5c, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0x2d, 0x37, 0x68, 0x59, 0x35, - 0xb1, 0xcb, 0x88, 0xa3, 0x7e, 0xb2, 0xbb, 0xb5, 0xb3, 0xf7, 0x60, 0x27, 0xcf, 0x4e, 0x98, 0x26, - 0xaf, 0xe7, 0xd7, 0x0a, 0x08, 0x2c, 0x9d, 0xe4, 0x5c, 0x6a, 0x12, 0x61, 0x4d, 0xf7, 0x0b, 0x4e, - 0xa4, 0xc7, 0x9a, 0xb8, 0x5a, 0xc5, 0x59, 0x59, 0x4a, 0x8d, 0x6a, 0xf3, 0xd8, 0xf6, 0x7f, 0x1d, - 0x31, 0xa8, 0xa5, 0x3e, 0x75, 0xa9, 0xa5, 0x5d, 0x88, 0xce, 0x9c, 0xe4, 0x6a, 0x94, 0xe6, 0x4c, - 0xc3, 0x24, 0x85, 0x1e, 0xca, 0xc2, 0x00, 0x4a, 0x7d, 0x9f, 0xd7, 0x31, 0x1b, 0x70, 0x17, 0xdc, - 0xe9, 0xad, 0x63, 0x3c, 0x97, 0x38, 0xdd, 0x1a, 0xa6, 0x8e, 0x8f, 0x09, 0xb2, 0x89, 0x63, 0x1a, - 0xae, 0xcb, 0x5d, 0x97, 0x51, 0x84, 0x2b, 0x15, 0xe2, 0xba, 0xb1, 0x9a, 0x27, 0xaf, 0xbf, 0x46, - 0x65, 0x34, 0xa1, 0x7f, 0x0c, 0xe4, 0xcd, 0xf5, 0x9b, 0xb0, 0x08, 0x66, 0x76, 0xdf, 0x36, 0x11, - 0x46, 0x8c, 0x60, 0x9b, 0xb2, 0x3c, 0x5c, 0x03, 0xf9, 0xf4, 0x50, 0x0f, 0xc9, 0x8f, 0x7f, 0x5f, - 0x06, 0x73, 0x60, 0xaa, 0x84, 0x5d, 0xa3, 0x22, 0x9a, 0xd6, 0xd4, 0xa4, 0x04, 0xfe, 0x54, 0x8a, - 0xf5, 0xb1, 0x3f, 0x97, 0x26, 0x53, 0xe9, 0xa9, 0x2f, 0x72, 0xc5, 0xfd, 0xdd, 0xdc, 0x3d, 0xd2, - 0x44, 0xa9, 0xbb, 0x0a, 0x58, 0x39, 0xc9, 0x61, 0x13, 0x3f, 0xa7, 0x56, 0x0e, 0xdb, 0x46, 0xa0, - 0x2a, 0x87, 0x3d, 0x56, 0x67, 0x4d, 0x9b, 0xc0, 0xc9, 0xf4, 0x38, 0xe5, 0x03, 0xed, 0xee, 0x2f, - 0x83, 0x37, 0x07, 0x51, 0x52, 0xc7, 0x78, 0x4e, 0x1c, 0xf8, 0x41, 0xf6, 0x17, 0xc0, 0x1c, 0x18, - 0x15, 0x7c, 0x13, 0xe9, 0x31, 0x46, 0x8f, 0x88, 0x05, 0xae, 0x83, 0x95, 0x2e, 0x89, 0x4e, 0x5c, - 0xaf, 0xc1, 0x1e, 0xb2, 0xc6, 0xae, 0xf5, 0x80, 0x54, 0xa8, 0x55, 0x75, 0x3b, 0x15, 0xe6, 0xde, - 0x47, 0xe0, 0x9f, 0xa4, 0x4e, 0x93, 0xfd, 0xb7, 0xd2, 0xa4, 0xac, 0x8c, 0x6a, 0x57, 0x43, 0x9f, - 0x8b, 0x38, 0xa8, 0x2a, 0xf0, 0xa8, 0x1d, 0xa1, 0x85, 0xd5, 0xc1, 0x44, 0x02, 0x42, 0xe9, 0xd7, - 0x40, 0xda, 0xef, 0xd9, 0x21, 0xbc, 0xe3, 0x60, 0x8b, 0xb9, 0x88, 0x0f, 0x82, 0xb3, 0x04, 0x2b, - 0x41, 0x27, 0x0f, 0x17, 0x83, 0x45, 0x31, 0x0a, 0x57, 0xb7, 0xc0, 0x18, 0xae, 0x9a, 0x86, 0x05, - 0x0b, 0x31, 0x56, 0xab, 0x1a, 0x23, 0x13, 0xae, 0xc1, 0xc9, 0x0c, 0x97, 0xf1, 0x6a, 0xed, 0x98, - 0x20, 0xc3, 0xaa, 0x51, 0xc7, 0x14, 0xde, 0x57, 0x5e, 0x05, 0x33, 0xd1, 0x83, 0x19, 0x49, 0xbe, - 0x2e, 0x94, 0xaf, 0x0f, 0x7c, 0x5f, 0x48, 0x92, 0x3a, 0xbb, 0xe0, 0xe2, 0xa7, 0xdd, 0x68, 0x19, - 0x8d, 0x01, 0xc3, 0xde, 0xfd, 0xe7, 0x97, 0x01, 0x3c, 0xc9, 0x45, 0x67, 0xf8, 0x25, 0x81, 0x63, - 0x69, 0xb9, 0x8c, 0x9d, 0xe7, 0x0a, 0xb8, 0x98, 0x58, 0x2c, 0xe3, 0xe7, 0xb9, 0x86, 0xe1, 0x32, - 0x38, 0xa3, 0x4d, 0x83, 0xb1, 0xb4, 0x4c, 0x2d, 0x02, 0x52, 0x48, 0x7a, 0x3c, 0xd5, 0x71, 0xc7, - 0xf2, 0xb8, 0x08, 0x63, 0x1b, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x12, 0xd7, 0x52, 0x3a, - 0x2b, 0x00, 0x00, + // 3552 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x70, 0x1b, 0xc9, + 0x5e, 0xf7, 0x68, 0xfc, 0xd9, 0x8e, 0xbf, 0xda, 0x71, 0xe2, 0x28, 0xde, 0x75, 0x47, 0xc9, 0xbe, + 0x9d, 0xe8, 0x45, 0x1a, 0x7b, 0xec, 0xdd, 0x4d, 0xb4, 0xbc, 0xdd, 0x95, 0x6c, 0x27, 0xeb, 0x64, + 0xd7, 0xf1, 0x4e, 0xb2, 0x61, 0xc9, 0xdb, 0x3c, 0xd3, 0x92, 0x5a, 0xd6, 0xc4, 0x9a, 0xe9, 0x79, + 0x33, 0x3d, 0x8e, 0x15, 0x23, 0x78, 0x05, 0x14, 0x14, 0xbc, 0x9b, 0x1e, 0x1f, 0x05, 0xaf, 0xe0, + 0x42, 0x71, 0xa1, 0xde, 0x89, 0x2a, 0x4e, 0x54, 0xc1, 0x05, 0x4e, 0x1c, 0xa0, 0x16, 0x8a, 0xe2, + 0xc2, 0x09, 0xce, 0x5c, 0xa0, 0xb6, 0x8a, 0x03, 0x14, 0xd5, 0x3d, 0x33, 0xd2, 0xcc, 0x48, 0x8a, + 0xa3, 0x84, 0xda, 0xdd, 0xc3, 0x66, 0xba, 0xfb, 0xff, 0xf1, 0xfb, 0x77, 0xff, 0xfb, 0xff, 0xd1, + 0x32, 0xd0, 0xc8, 0x09, 0x36, 0xed, 0x06, 0x71, 0x55, 0xdb, 0xa1, 0x8c, 0xaa, 0xc1, 0xd0, 0x2e, + 0xab, 0xf8, 0xa0, 0x6c, 0xb0, 0x03, 0x5a, 0x3b, 0x20, 0xc7, 0xc4, 0x69, 0xb2, 0xba, 0x61, 0x1d, + 0xe6, 0x05, 0x0d, 0x5c, 0x3d, 0x74, 0xec, 0x4a, 0xfe, 0x10, 0x33, 0xf2, 0x0c, 0x37, 0xf3, 0xa1, + 0x80, 0x7c, 0x87, 0x35, 0xbd, 0x72, 0x48, 0xe9, 0x61, 0x83, 0xa8, 0xd8, 0x36, 0x54, 0x6c, 0x59, + 0x94, 0x61, 0x66, 0x50, 0xcb, 0xf5, 0xd9, 0xd3, 0x28, 0x58, 0x15, 0xa3, 0xb2, 0x57, 0x53, 0x6b, + 0x06, 0x69, 0x54, 0x0f, 0x4c, 0xec, 0x1e, 0x05, 0x14, 0x97, 0x93, 0x14, 0xc4, 0xb4, 0x59, 0x33, + 0x58, 0x7c, 0x33, 0xb9, 0x58, 0xf5, 0x1c, 0x21, 0x3f, 0x58, 0x7f, 0x3b, 0x61, 0x91, 0x8d, 0x59, + 0x9d, 0x58, 0x9e, 0x29, 0x3e, 0x0e, 0xf8, 0x57, 0x88, 0x23, 0x41, 0xe8, 0x7a, 0x65, 0xd5, 0x24, + 0xae, 0x8b, 0x0f, 0x49, 0x40, 0x71, 0xa5, 0x97, 0x42, 0x4b, 0x90, 0xac, 0x26, 0xd1, 0x30, 0xc3, + 0x24, 0x2e, 0xc3, 0xa6, 0x1d, 0x10, 0xdc, 0x10, 0xff, 0x54, 0x72, 0x87, 0xc4, 0xca, 0xb9, 0xcf, + 0xf0, 0xe1, 0x21, 0x71, 0x54, 0x6a, 0x8b, 0xfd, 0xe8, 0xdd, 0x9b, 0xcc, 0x3f, 0x5c, 0x06, 0xf3, + 0xc5, 0x92, 0xc1, 0xee, 0xd7, 0x76, 0x3a, 0xbb, 0x0e, 0x9f, 0x80, 0x19, 0xd7, 0xb0, 0x0e, 0x1b, + 0xe4, 0xc0, 0x22, 0x2e, 0x23, 0xd5, 0xe5, 0x4b, 0x48, 0x52, 0xa6, 0xb5, 0x9b, 0xf9, 0x33, 0xce, + 0x21, 0x9f, 0x94, 0x94, 0xdf, 0x13, 0xfc, 0xfa, 0x39, 0x5f, 0x9c, 0x3f, 0x82, 0x75, 0x30, 0xea, + 0x79, 0x46, 0x75, 0x59, 0x42, 0x92, 0x32, 0x55, 0x7a, 0xd8, 0x2e, 0x7e, 0xf6, 0x23, 0x49, 0xfa, + 0x6d, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, 0xb3, + 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, 0xb0, + 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xe9, 0x5a, 0x83, 0x62, 0x76, 0x70, + 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, 0xb7, + 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, 0x1d, + 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0x73, 0x55, 0xea, 0x95, 0x1b, 0x24, 0x10, 0x36, 0x8a, + 0x24, 0x45, 0xd2, 0xa7, 0xfd, 0x39, 0x9f, 0x64, 0x15, 0x4c, 0x1b, 0x16, 0x7b, 0x77, 0x33, 0xa0, + 0x18, 0x43, 0x92, 0x22, 0xeb, 0x40, 0x4c, 0x75, 0x64, 0x78, 0x51, 0x8a, 0x71, 0x24, 0x29, 0xa3, + 0xfa, 0xb4, 0x17, 0x21, 0xf1, 0x65, 0x6c, 0x68, 0x01, 0xc5, 0x04, 0x92, 0x94, 0x31, 0x21, 0x63, + 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x93, 0x48, 0x52, 0xc6, + 0xf5, 0x73, 0xc1, 0x64, 0x9c, 0xa8, 0x23, 0x67, 0x0a, 0x49, 0xca, 0x44, 0x40, 0x14, 0x4a, 0x7a, + 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd4, 0xa7, 0xf8, 0x4c, 0x07, 0xac, + 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb9, 0x03, 0xe8, 0xd3, 0xfe, 0x5c, 0x07, 0x6c, 0xb9, + 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0xe5, 0x9c, 0x0e, 0xc4, 0x54, 0xcc, 0xe0, 0x0e, 0x8c, + 0x19, 0x24, 0x29, 0x33, 0xbe, 0xc1, 0x21, 0x8a, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x10, 0xcc, 0x22, + 0x49, 0x99, 0xd5, 0x6e, 0x9c, 0x79, 0xf2, 0x7b, 0x9e, 0x49, 0x1c, 0xa3, 0xb2, 0x63, 0x79, 0xa6, + 0x3e, 0xc5, 0xf9, 0x7d, 0x61, 0xfb, 0x60, 0xae, 0x73, 0x8f, 0x03, 0x89, 0x6f, 0x0a, 0x89, 0xca, + 0x00, 0x89, 0xe1, 0xf5, 0xcf, 0xef, 0x63, 0x56, 0x17, 0xd2, 0x66, 0xec, 0xe0, 0xcb, 0x97, 0xe8, + 0x82, 0x0b, 0xbe, 0x33, 0x1d, 0x24, 0x05, 0xaf, 0x0a, 0xc1, 0x1f, 0x9c, 0x25, 0xf8, 0x53, 0x3f, + 0x20, 0x84, 0xf2, 0x03, 0x17, 0xed, 0xa8, 0x5b, 0xb4, 0x62, 0x63, 0x5f, 0xe9, 0x5b, 0x60, 0xd6, + 0x8d, 0x9f, 0xdf, 0x1c, 0x92, 0x94, 0x39, 0x7d, 0xc6, 0x8d, 0x1d, 0x60, 0x87, 0xac, 0xe3, 0x0b, + 0xf3, 0x48, 0x52, 0xe6, 0x43, 0xb2, 0x88, 0xd7, 0xb9, 0xd1, 0x43, 0x58, 0x40, 0x92, 0xb2, 0xa0, + 0x4f, 0xbb, 0x91, 0x43, 0x08, 0x48, 0x3a, 0x72, 0x20, 0x92, 0x14, 0xe8, 0x93, 0x84, 0x52, 0x34, + 0xb0, 0xe4, 0x10, 0x9b, 0x60, 0xbe, 0x15, 0x31, 0xbf, 0x58, 0x44, 0xb2, 0x32, 0xa5, 0x2f, 0x86, + 0x8b, 0x0f, 0x22, 0xfe, 0x71, 0x0b, 0x4c, 0x53, 0x8b, 0xf0, 0x24, 0xc1, 0x23, 0xf4, 0xf2, 0x79, + 0x11, 0x98, 0x2e, 0xe4, 0xfd, 0xa0, 0x98, 0x0f, 0x83, 0x62, 0x7e, 0x87, 0xaf, 0x7e, 0x3c, 0xa2, + 0x03, 0x41, 0x2c, 0x46, 0xf0, 0x2a, 0x38, 0xe7, 0xb3, 0xfa, 0xba, 0x96, 0x97, 0xb8, 0xf7, 0x7d, + 0x3c, 0xa2, 0xfb, 0x02, 0x7d, 0x25, 0xf0, 0x4b, 0x30, 0x65, 0x62, 0x3b, 0xc0, 0x71, 0x41, 0x04, + 0x8d, 0x0f, 0x87, 0x0f, 0x1a, 0x9f, 0x62, 0x5b, 0xc0, 0xdd, 0xb1, 0x98, 0xd3, 0xd4, 0x27, 0xcd, + 0x60, 0x08, 0x4f, 0xc0, 0xa2, 0x89, 0x6d, 0x3b, 0x69, 0xef, 0x45, 0xa1, 0xe7, 0xe3, 0x57, 0xd2, + 0x63, 0xc7, 0xf6, 0xc7, 0x57, 0xb8, 0x60, 0x26, 0xe7, 0x23, 0x9a, 0x03, 0xdf, 0xf3, 0x35, 0x2f, + 0xbf, 0x9e, 0x66, 0xdf, 0xf3, 0x7a, 0x35, 0x47, 0xe6, 0x61, 0x01, 0x2c, 0x5b, 0xd4, 0xda, 0xa2, + 0xd6, 0x31, 0xb1, 0x78, 0xe6, 0xc1, 0x8d, 0x3d, 0x6c, 0xfa, 0xe1, 0x6d, 0x39, 0x2d, 0x02, 0xc0, + 0xc0, 0x75, 0xb8, 0x05, 0xe6, 0x3a, 0xe9, 0x2d, 0x40, 0x7c, 0x59, 0x9c, 0x78, 0xba, 0xe7, 0xc4, + 0x1f, 0x86, 0x74, 0xfa, 0x6c, 0x87, 0xc5, 0x17, 0xf2, 0x25, 0xe8, 0x78, 0x52, 0xf4, 0xb2, 0xad, + 0x20, 0x79, 0xe8, 0xb8, 0xb0, 0x10, 0x0a, 0xea, 0x5e, 0xac, 0x9f, 0x49, 0x60, 0x39, 0x2e, 0xbe, + 0x9b, 0x64, 0x97, 0xd1, 0xf0, 0x3a, 0x4a, 0xdb, 0xed, 0x62, 0x31, 0x7b, 0x59, 0x0f, 0x44, 0x22, + 0xcb, 0x5f, 0x42, 0x5c, 0x34, 0x62, 0x06, 0x6b, 0x10, 0x2d, 0xd3, 0x7f, 0xb1, 0x4a, 0xdc, 0x8a, + 0x63, 0x88, 0x4c, 0x9f, 0xd7, 0x2f, 0x44, 0x91, 0x16, 0x3b, 0x88, 0xe0, 0xef, 0x48, 0x60, 0xa9, + 0xbb, 0x09, 0x51, 0xac, 0x57, 0x86, 0x8f, 0x93, 0x25, 0xad, 0x5d, 0x54, 0xb3, 0x70, 0xaf, 0x17, + 0xe2, 0xa5, 0xbd, 0x81, 0xc8, 0x16, 0x3b, 0xb1, 0x35, 0x02, 0xeb, 0x18, 0xa4, 0x93, 0xa1, 0x20, + 0x02, 0x2d, 0xc3, 0xe3, 0x41, 0xe9, 0x66, 0xbb, 0xf8, 0x4e, 0x76, 0xa9, 0x63, 0xbb, 0x4f, 0x16, + 0xe8, 0x5b, 0x49, 0x4e, 0xc7, 0x54, 0x2e, 0xc7, 0x23, 0x49, 0x44, 0xef, 0x5f, 0x49, 0x11, 0xc5, + 0xc1, 0xcd, 0x88, 0x28, 0xbe, 0xfa, 0x7a, 0x55, 0x43, 0xe9, 0x76, 0xbb, 0xb8, 0x95, 0xed, 0x62, + 0xf3, 0x15, 0x20, 0x5a, 0x7e, 0x4a, 0x2a, 0x2c, 0x40, 0x7e, 0x75, 0xc0, 0x6a, 0x7f, 0x03, 0x7c, + 0xb9, 0x11, 0x03, 0x7e, 0x2a, 0x81, 0x85, 0x5e, 0xdc, 0xd7, 0x5e, 0xaf, 0x5e, 0x2b, 0x6d, 0xb6, + 0x8b, 0xeb, 0xd9, 0xc5, 0xbd, 0x3e, 0x70, 0xd3, 0x7b, 0x83, 0x51, 0xce, 0x5b, 0x49, 0x74, 0xef, + 0x81, 0x45, 0x3f, 0x07, 0xd0, 0x63, 0xe2, 0x38, 0x46, 0x95, 0x1c, 0xb0, 0xa6, 0x4d, 0x96, 0xdf, + 0xe2, 0x65, 0x4c, 0x69, 0xa2, 0x5d, 0x1c, 0xfd, 0xc3, 0x94, 0x24, 0xeb, 0x0b, 0x82, 0xe6, 0x7e, + 0x40, 0xf2, 0xb0, 0x69, 0x93, 0xf4, 0xbf, 0x4a, 0x60, 0x3c, 0xa8, 0x16, 0x21, 0x18, 0xb5, 0xb0, + 0x49, 0xfc, 0x6a, 0x51, 0x17, 0xdf, 0xf0, 0x02, 0x18, 0xc7, 0x26, 0xf5, 0x2c, 0xb6, 0x9c, 0x12, + 0xe9, 0x3f, 0x18, 0x41, 0x13, 0xa4, 0xe8, 0x91, 0x28, 0xca, 0x66, 0xb5, 0xe2, 0xab, 0x5a, 0x9f, + 0xdf, 0x26, 0xc4, 0x16, 0xee, 0x9d, 0x6e, 0x17, 0x2f, 0x6a, 0x4b, 0xe1, 0x30, 0x6e, 0x6c, 0x8a, + 0x1e, 0x65, 0x56, 0xc1, 0x64, 0xb8, 0x08, 0xa7, 0xc0, 0xd8, 0xed, 0xe2, 0x27, 0x0f, 0x76, 0xe6, + 0x47, 0xe0, 0x24, 0x18, 0x7d, 0xa8, 0x7f, 0xbe, 0x33, 0x2f, 0x15, 0x2e, 0xb6, 0x8b, 0xe7, 0x35, + 0x08, 0xe7, 0x4f, 0x51, 0x86, 0x1e, 0x65, 0x0a, 0x28, 0xc3, 0xe7, 0x33, 0xa8, 0x95, 0x36, 0xc0, + 0x4c, 0x2c, 0x47, 0xc0, 0x79, 0x20, 0x1f, 0x91, 0x66, 0x60, 0x24, 0xff, 0x84, 0x25, 0x30, 0xe6, + 0x07, 0xaa, 0xd4, 0x2b, 0x14, 0x30, 0x3e, 0x6b, 0x21, 0x75, 0x53, 0x4a, 0x6f, 0x83, 0x0b, 0xfd, + 0xd3, 0x44, 0x1f, 0x9d, 0xe7, 0xa3, 0x3a, 0xa7, 0xa2, 0x52, 0x7e, 0x39, 0x94, 0x92, 0x0c, 0xf9, + 0x7d, 0xa4, 0xec, 0x45, 0xa5, 0xbc, 0x4e, 0xd1, 0xdd, 0xd5, 0x5f, 0xf8, 0x83, 0x54, 0xbb, 0xf8, + 0xbb, 0x29, 0xf0, 0xeb, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, 0xa2, + 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, 0x15, + 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, 0x23, + 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, 0x29, + 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, 0xf5, + 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, 0x0b, + 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, 0x75, + 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, 0x67, + 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, 0xe6, + 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, 0xe4, + 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x77, 0x12, 0x2c, + 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, 0x46, + 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, 0xe3, + 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, 0xf4, + 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, 0x1a, + 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, 0xeb, + 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, 0xc2, + 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, 0x86, + 0xc9, 0xca, 0x44, 0x1f, 0xf6, 0x50, 0xfb, 0x7b, 0x60, 0x39, 0xce, 0x1e, 0x69, 0xac, 0x26, 0x91, + 0xac, 0x4c, 0xea, 0x4b, 0x51, 0xde, 0x52, 0xa7, 0xc9, 0xea, 0xd9, 0xae, 0x58, 0xa9, 0x39, 0x25, + 0x4a, 0xeb, 0xd8, 0x76, 0xc5, 0xcb, 0xeb, 0xc4, 0x76, 0x45, 0x9b, 0x31, 0x80, 0x64, 0xe5, 0x5c, + 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x46, 0xb2, 0x32, 0xd3, 0x7b, + 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x3b, 0xf7, 0x0a, 0x85, 0x5a, 0x6c, 0x6f, 0xba, + 0xc5, 0xda, 0x87, 0x60, 0x25, 0xb1, 0x37, 0xf1, 0x43, 0x99, 0x41, 0xb2, 0x32, 0xa7, 0x5f, 0x8a, + 0xed, 0x4e, 0xac, 0x3f, 0x1a, 0x20, 0xa0, 0xe3, 0x14, 0xb3, 0x48, 0x56, 0xe6, 0xfb, 0x09, 0x18, + 0xe8, 0xcc, 0xb1, 0x3e, 0x6a, 0x0e, 0xc9, 0xca, 0x42, 0xe2, 0x74, 0x22, 0xbb, 0xd4, 0x97, 0x39, + 0xd2, 0xa9, 0xc9, 0x0a, 0xec, 0x65, 0x0e, 0x34, 0x17, 0xea, 0xed, 0x22, 0xd1, 0x2a, 0x10, 0x9f, + 0xa2, 0xcc, 0x20, 0xc7, 0xca, 0x14, 0xd0, 0xf7, 0x99, 0xe3, 0x91, 0x1b, 0xc8, 0xff, 0x7f, 0x0d, + 0x37, 0xdc, 0x60, 0xf0, 0xe4, 0x46, 0x92, 0x2d, 0x82, 0x9b, 0xf3, 0xad, 0xdf, 0x40, 0xda, 0x0d, + 0xb4, 0xf1, 0x04, 0xb5, 0x32, 0x69, 0x30, 0x5a, 0xa2, 0xd5, 0x66, 0xbf, 0xcc, 0x9d, 0xf9, 0x12, + 0xcc, 0x05, 0xed, 0xeb, 0xcf, 0x1b, 0xac, 0x2e, 0xc8, 0x66, 0x41, 0x2a, 0x7c, 0x0c, 0xd2, 0x53, + 0x06, 0x0f, 0x51, 0xa3, 0x55, 0xcc, 0x70, 0x90, 0x3d, 0xde, 0x3a, 0xf3, 0xdc, 0xb9, 0x10, 0x5d, + 0xb0, 0x64, 0x7e, 0x22, 0x81, 0xb9, 0xcf, 0xed, 0x2a, 0x66, 0xe4, 0x91, 0xa6, 0x93, 0x1f, 0x7a, + 0xc4, 0x65, 0x70, 0x0b, 0xc8, 0xb8, 0xec, 0x83, 0x98, 0xd6, 0xd6, 0x87, 0xce, 0x45, 0x3a, 0xe7, + 0x86, 0xef, 0x83, 0x69, 0x4f, 0xc8, 0x15, 0xaf, 0x86, 0x01, 0xb4, 0xde, 0x26, 0xe4, 0xb6, 0x41, + 0x1a, 0xd5, 0x4f, 0xb1, 0x7b, 0xa4, 0x03, 0x9f, 0x9c, 0x7f, 0x67, 0x11, 0x98, 0x8e, 0xf8, 0x26, + 0x2f, 0x0f, 0x1e, 0xef, 0xe8, 0xf7, 0xe7, 0x47, 0xe0, 0x04, 0x90, 0xef, 0xef, 0xed, 0xcc, 0x4b, + 0xda, 0x3f, 0x5d, 0x01, 0x17, 0x93, 0x8a, 0x1f, 0x10, 0xe7, 0xd8, 0xa8, 0x10, 0xf8, 0x1f, 0x32, + 0x18, 0xdf, 0x72, 0xf8, 0x9e, 0xc3, 0xe1, 0xd1, 0xa7, 0x87, 0x67, 0xc9, 0xfc, 0x4f, 0xea, 0x57, + 0xff, 0xf1, 0xdf, 0x7f, 0x92, 0xfa, 0x3a, 0x95, 0xf9, 0xcf, 0x94, 0x7a, 0xbc, 0x1e, 0xbe, 0xd0, + 0xf6, 0x7b, 0x9f, 0x55, 0x4f, 0x23, 0xe9, 0xa3, 0xa5, 0x9e, 0x46, 0x33, 0x42, 0x4b, 0x3d, 0x8d, + 0x78, 0x67, 0x4b, 0x75, 0x89, 0x8d, 0x1d, 0xcc, 0xa8, 0xa3, 0x9e, 0x7a, 0xb1, 0x85, 0xd3, 0x88, + 0x27, 0xb5, 0xd4, 0xd3, 0xd8, 0x85, 0x0a, 0xc7, 0x91, 0xf5, 0xae, 0xbb, 0xb6, 0xd4, 0xd3, 0x68, + 0x6c, 0xfb, 0x9e, 0xcb, 0x1c, 0xdb, 0x21, 0x35, 0xe3, 0x44, 0xcd, 0xb6, 0x7c, 0x25, 0x11, 0x36, + 0x37, 0x29, 0xc7, 0x4d, 0x2a, 0x72, 0x13, 0x0c, 0x71, 0x90, 0x83, 0x7a, 0xd4, 0x96, 0x7a, 0xda, + 0x8d, 0x55, 0x2d, 0xf5, 0x34, 0xf1, 0xa6, 0xc3, 0x39, 0xfb, 0x3e, 0xf6, 0xc4, 0xf8, 0x22, 0xb5, + 0x7b, 0x0b, 0xfe, 0xb1, 0x04, 0x80, 0x7f, 0xe0, 0xe2, 0x7a, 0x7c, 0x33, 0x87, 0x9e, 0x15, 0x67, + 0x7e, 0x2d, 0xb3, 0x7a, 0xc6, 0x89, 0x17, 0xa4, 0x2c, 0xfc, 0x25, 0x30, 0xfe, 0x09, 0xa5, 0x47, + 0x9e, 0x0d, 0xe7, 0xf2, 0xae, 0x57, 0xd6, 0xf2, 0xbb, 0xd5, 0xe0, 0x4e, 0xbf, 0x8a, 0xe6, 0xbc, + 0xd0, 0xac, 0xc0, 0xef, 0x9c, 0xe9, 0x6b, 0xbc, 0x2e, 0x6a, 0xc1, 0xdf, 0x90, 0xc0, 0xb8, 0x7f, + 0xc7, 0x5f, 0x65, 0x6b, 0x06, 0x3c, 0x15, 0x65, 0xd6, 0x05, 0x8a, 0xef, 0xa6, 0x5f, 0x12, 0x05, + 0xdf, 0x86, 0xff, 0x92, 0xc0, 0x64, 0x18, 0x6c, 0xe0, 0xda, 0x99, 0x50, 0x12, 0x71, 0x69, 0x20, + 0x92, 0x3f, 0x92, 0x04, 0x94, 0xdf, 0x93, 0xd2, 0x59, 0xf5, 0x58, 0x7b, 0x31, 0x16, 0x5c, 0x26, + 0x79, 0x1f, 0x0f, 0x8f, 0x52, 0x8f, 0xd7, 0xb5, 0xa1, 0x59, 0xd6, 0xb4, 0xef, 0xaa, 0xc7, 0x1a, + 0x7e, 0x59, 0x1e, 0x29, 0x0b, 0xff, 0x54, 0x02, 0xe3, 0xdb, 0xa4, 0x41, 0x18, 0xe9, 0x3d, 0xfe, + 0x41, 0x36, 0x39, 0xed, 0x62, 0xb1, 0x7c, 0x1d, 0xcc, 0x02, 0x50, 0xb4, 0x8d, 0x7b, 0xa4, 0x59, + 0xf4, 0x58, 0x1d, 0x8e, 0x80, 0x8b, 0x60, 0xfc, 0x3e, 0xff, 0xd4, 0xe0, 0x0c, 0x18, 0x75, 0x08, + 0xae, 0x82, 0xb1, 0x67, 0x8e, 0xc1, 0xc8, 0xd3, 0xf3, 0x60, 0xf6, 0x24, 0x67, 0x38, 0x0e, 0x07, + 0xe1, 0x1a, 0xe5, 0x06, 0x81, 0x29, 0xe4, 0x6f, 0x8b, 0x92, 0x7d, 0x59, 0x3f, 0xf9, 0x37, 0x09, + 0x4c, 0xde, 0x21, 0xec, 0x33, 0x8f, 0x38, 0xcd, 0xff, 0x4f, 0x4f, 0xf9, 0xb1, 0xd4, 0x2e, 0x3e, + 0xcc, 0xec, 0x81, 0x95, 0x7e, 0x1d, 0x40, 0x47, 0xe1, 0x90, 0x95, 0xff, 0x17, 0x52, 0x79, 0x44, + 0xd8, 0x97, 0x87, 0x37, 0xce, 0xb2, 0xef, 0x87, 0x5c, 0x41, 0x68, 0xe5, 0x8f, 0xc7, 0xc0, 0xfc, + 0x1d, 0xc2, 0xc2, 0x84, 0xef, 0x2b, 0xbf, 0x35, 0x7c, 0x96, 0x0b, 0xf8, 0xd3, 0xaf, 0xce, 0x9a, + 0xf9, 0xd1, 0xa8, 0xb0, 0xe0, 0xbf, 0x65, 0xf8, 0xb5, 0x7c, 0x86, 0x0d, 0x9d, 0x2a, 0x22, 0x88, + 0x97, 0xfd, 0xba, 0x91, 0x56, 0x72, 0x2d, 0x91, 0x5c, 0x06, 0xb6, 0x13, 0x3d, 0x6b, 0xde, 0x8b, + 0x16, 0xe3, 0x41, 0xff, 0x05, 0x05, 0x7f, 0xff, 0xd5, 0x81, 0xbc, 0xb1, 0x34, 0x35, 0xb8, 0x20, + 0xef, 0xe5, 0xeb, 0x16, 0xdc, 0x7d, 0x0d, 0x19, 0xa8, 0xb0, 0x37, 0x0b, 0x0d, 0xa8, 0x72, 0x07, + 0x2c, 0x0f, 0xb4, 0xd3, 0x7d, 0x91, 0xd6, 0x58, 0x96, 0x84, 0xbf, 0x35, 0x0a, 0x46, 0x77, 0x2a, + 0x75, 0x0a, 0x07, 0xfd, 0x38, 0xe2, 0x7a, 0xe5, 0xbc, 0xdf, 0x6f, 0x84, 0x21, 0xe3, 0xa5, 0x29, + 0x33, 0x3f, 0x93, 0xdb, 0xc5, 0xbf, 0x4d, 0x81, 0x49, 0x52, 0xa9, 0x53, 0xe4, 0xd8, 0x15, 0xb8, + 0xf0, 0xc0, 0x33, 0x4d, 0xec, 0x34, 0x0b, 0x68, 0x27, 0x98, 0x4a, 0xcf, 0x6f, 0x77, 0xdf, 0x68, + 0xc4, 0x6c, 0x66, 0x1b, 0xc0, 0xf8, 0x45, 0x15, 0xf8, 0x86, 0xbc, 0x9e, 0x77, 0x6f, 0x01, 0x59, + 0x5b, 0x5b, 0x83, 0x5a, 0x66, 0x0d, 0xcc, 0x63, 0xdb, 0x7f, 0x5c, 0x30, 0xa8, 0xa5, 0x3e, 0x75, + 0xa9, 0x05, 0x57, 0x4e, 0x33, 0x61, 0x19, 0x9c, 0x61, 0x75, 0x82, 0x0c, 0xcb, 0xf6, 0x82, 0x1f, + 0x02, 0x33, 0xad, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, + 0x1c, 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xa7, 0x74, 0x88, 0x4b, 0x3d, 0xa7, 0x42, 0x90, + 0xe1, 0x22, 0x46, 0x4c, 0x9b, 0x3a, 0xd8, 0x31, 0x1a, 0x4d, 0xe4, 0x59, 0xf8, 0x18, 0x1b, 0x0d, + 0x5c, 0x6e, 0x90, 0x7c, 0x76, 0x09, 0x4c, 0x9e, 0xe4, 0x2c, 0xcf, 0x2c, 0x13, 0x07, 0x4e, 0x2d, + 0x8c, 0x88, 0xff, 0x7e, 0xe1, 0xa3, 0xbb, 0xef, 0x03, 0x79, 0x73, 0x6d, 0x13, 0x6e, 0x82, 0xec, + 0x0b, 0xe4, 0x56, 0x29, 0x71, 0x91, 0x45, 0x19, 0x22, 0x27, 0x86, 0xcb, 0xf2, 0x70, 0x1c, 0x88, + 0x27, 0x37, 0x71, 0x51, 0x9f, 0x9c, 0x1d, 0x6a, 0xf8, 0x56, 0xab, 0xa7, 0xfe, 0xe1, 0x3e, 0xbe, + 0x94, 0x99, 0x8f, 0x66, 0x17, 0xbe, 0x56, 0xf0, 0x5f, 0x68, 0x1e, 0x43, 0xd8, 0xb3, 0x04, 0xff, + 0x42, 0x02, 0xe7, 0xb6, 0x09, 0xb1, 0xc5, 0xef, 0x50, 0x7c, 0xe2, 0x9b, 0x29, 0x64, 0x3e, 0x14, + 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x99, 0x26, 0x62, 0x3f, 0x71, 0xe7, 0x79, 0x77, 0x22, 0xf2, 0x5b, + 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x16, 0xd8, 0x0e, + 0x7e, 0xfd, 0x1f, 0x98, 0x20, 0x46, 0xe0, 0x23, 0x30, 0xf1, 0xd0, 0x30, 0x09, 0xf5, 0x18, 0x1c, + 0x40, 0x34, 0x90, 0xf9, 0xb2, 0x80, 0xbf, 0x04, 0x17, 0xa3, 0xfb, 0xc9, 0x02, 0x61, 0x75, 0x30, + 0xbf, 0xe3, 0x38, 0xd4, 0xe1, 0xad, 0xd3, 0x36, 0x61, 0xd8, 0x68, 0xb8, 0x43, 0x2b, 0xb8, 0x26, + 0x14, 0xbc, 0x09, 0x57, 0x62, 0x07, 0xc6, 0xa5, 0x3e, 0x33, 0x58, 0xbd, 0x1a, 0x48, 0xfd, 0x4d, + 0x09, 0xc0, 0x3b, 0x84, 0x25, 0x5b, 0xb5, 0xb3, 0xab, 0x9c, 0x04, 0xc7, 0x40, 0x18, 0x6f, 0x0b, + 0x18, 0x57, 0x32, 0x97, 0xa2, 0x30, 0x38, 0x82, 0x32, 0xad, 0x36, 0xd5, 0x53, 0x5e, 0x6b, 0x88, + 0x96, 0x0e, 0xfe, 0x9a, 0x04, 0x16, 0xf6, 0xa9, 0xcb, 0xb8, 0x44, 0xc1, 0x2a, 0x80, 0xbc, 0x5c, + 0x57, 0x38, 0x50, 0xbb, 0x2a, 0xb4, 0x5f, 0xcf, 0x5c, 0x8b, 0x6a, 0xb7, 0xa9, 0xcb, 0x38, 0x02, + 0xf1, 0xcb, 0xa2, 0x0f, 0xa3, 0xe3, 0x14, 0x7f, 0x23, 0x81, 0xc5, 0xad, 0x3a, 0xa9, 0x1c, 0x85, + 0x09, 0x7e, 0x1f, 0x3b, 0xd8, 0x74, 0xbf, 0x21, 0x9f, 0xbe, 0x23, 0xe0, 0x16, 0xe1, 0x87, 0x67, + 0xf9, 0xb4, 0x2d, 0x50, 0xa9, 0x87, 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0x2f, 0x12, 0x78, 0x43, 0x98, + 0xe1, 0x3f, 0xb0, 0xf2, 0x76, 0xf4, 0x5b, 0x31, 0xe8, 0x33, 0x61, 0xd0, 0x3d, 0xb8, 0x3b, 0x84, + 0x41, 0x41, 0x1b, 0x25, 0xfe, 0xb2, 0x26, 0x61, 0x1c, 0x3d, 0x6a, 0xc1, 0xbf, 0x97, 0xc0, 0x79, + 0x61, 0x1a, 0x77, 0x96, 0x6f, 0xcd, 0xa2, 0x4c, 0xe1, 0x25, 0x2d, 0xe2, 0xce, 0x16, 0x6f, 0x5f, + 0x5b, 0x85, 0xf8, 0x1f, 0xdd, 0xa4, 0xff, 0x5a, 0x6a, 0x17, 0xff, 0x52, 0x82, 0xb5, 0x01, 0x0f, + 0x03, 0xd1, 0x9f, 0x23, 0x50, 0x2e, 0x87, 0x9e, 0xd5, 0x8d, 0x4a, 0x1d, 0xb9, 0x75, 0xea, 0x35, + 0xaa, 0x22, 0xe4, 0x97, 0x09, 0xf2, 0x5c, 0x52, 0x45, 0x86, 0x85, 0xec, 0x06, 0xae, 0x10, 0x44, + 0x6b, 0x22, 0x39, 0x54, 0x69, 0xc5, 0x33, 0x89, 0xe5, 0xb7, 0x9b, 0xa8, 0x42, 0x4d, 0x3e, 0xb8, + 0x92, 0xfe, 0x0c, 0xac, 0xf6, 0xab, 0x68, 0x79, 0xe8, 0x0e, 0x9f, 0x22, 0x86, 0x7d, 0xce, 0x7e, + 0x0a, 0xce, 0x57, 0xb0, 0x49, 0x1a, 0x5b, 0xd8, 0x25, 0x81, 0x0c, 0xde, 0x37, 0x43, 0x1d, 0x8c, + 0xf9, 0x3f, 0xc9, 0x0f, 0x1b, 0xbc, 0x2e, 0x89, 0x5d, 0x5e, 0x84, 0x0b, 0xb1, 0xe0, 0xc5, 0x97, + 0xb4, 0x1f, 0x80, 0x95, 0xa2, 0x45, 0x59, 0x9d, 0x38, 0x81, 0x26, 0x1e, 0x30, 0x22, 0x81, 0xfc, + 0x83, 0x58, 0x58, 0x1f, 0x56, 0xf1, 0x48, 0xe9, 0xcf, 0xa7, 0xda, 0xc5, 0x3f, 0x99, 0x82, 0x5f, + 0x4b, 0x60, 0xb1, 0x88, 0x4a, 0xfe, 0x0f, 0x10, 0x91, 0xf3, 0xff, 0x02, 0x9c, 0x3f, 0xd4, 0xf7, + 0xb7, 0x72, 0x77, 0x7c, 0xd3, 0x91, 0xed, 0xd0, 0xa7, 0xa4, 0xc2, 0x86, 0xdd, 0xb2, 0xf4, 0xbc, + 0x45, 0x2d, 0xf2, 0x51, 0x60, 0x1a, 0xa7, 0xce, 0xfe, 0x00, 0x9c, 0x2f, 0x3d, 0xd8, 0x46, 0x1b, + 0xb9, 0xad, 0x06, 0xf6, 0x5c, 0x82, 0x3e, 0x31, 0x2a, 0xc4, 0x72, 0x09, 0xbc, 0x3d, 0x9c, 0x64, + 0xb5, 0xdc, 0xa0, 0x65, 0xd5, 0xc4, 0x2e, 0x23, 0x8e, 0xfa, 0xc9, 0xee, 0xd6, 0xce, 0xde, 0x83, + 0x9d, 0x3c, 0x3b, 0x61, 0x9a, 0xbc, 0x9e, 0x5f, 0x2b, 0x20, 0xb0, 0x74, 0x92, 0x73, 0xa9, 0x49, + 0x84, 0x35, 0xdd, 0x2f, 0x38, 0x91, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, + 0xf5, 0xd4, 0x3e, 0xda, 0x85, 0xe8, 0xcc, 0x49, 0xae, 0x46, 0x69, 0xce, 0x34, 0x4c, 0x52, 0xe8, + 0xa1, 0x2c, 0x0c, 0xa0, 0xd4, 0xf7, 0x79, 0x1d, 0xb3, 0x01, 0x77, 0xc1, 0x9d, 0xde, 0x3a, 0xc6, + 0x73, 0x89, 0xd3, 0xad, 0x61, 0xea, 0xf8, 0x98, 0x20, 0x9b, 0x38, 0xa6, 0xe1, 0xba, 0xdc, 0x75, + 0x19, 0x45, 0xb8, 0x52, 0x21, 0xae, 0x1b, 0xab, 0x79, 0xf2, 0xfa, 0x6b, 0x54, 0x46, 0x13, 0xfa, + 0xc7, 0x40, 0xde, 0x5c, 0xbf, 0x09, 0x8b, 0x60, 0x66, 0xf7, 0x6d, 0x13, 0x61, 0xc4, 0x08, 0xb6, + 0x29, 0xcb, 0xc3, 0x35, 0x90, 0x4f, 0x0f, 0xf5, 0x06, 0xfd, 0xf8, 0xf7, 0x65, 0x30, 0x07, 0xa6, + 0x4a, 0xd8, 0x35, 0x2a, 0xa2, 0xdf, 0x4d, 0x4d, 0x4a, 0xe0, 0xcf, 0xa4, 0x58, 0x0b, 0xfc, 0x53, + 0x69, 0x32, 0x95, 0x9e, 0xfa, 0x22, 0x57, 0xdc, 0xdf, 0xcd, 0xdd, 0x23, 0x4d, 0x94, 0xba, 0xab, + 0x80, 0x95, 0x93, 0x1c, 0x36, 0xf1, 0x73, 0x6a, 0xe5, 0xb0, 0x6d, 0x04, 0xaa, 0x72, 0xd8, 0x63, + 0x75, 0xd6, 0xb4, 0x09, 0x9c, 0x4c, 0x8f, 0x53, 0x3e, 0xd0, 0xee, 0xfe, 0x22, 0x78, 0x73, 0x10, + 0x25, 0x75, 0x8c, 0xe7, 0xc4, 0x81, 0x1f, 0x64, 0x7f, 0x0e, 0xcc, 0x81, 0x51, 0xc1, 0x37, 0x91, + 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, + 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x59, + 0xea, 0xf4, 0xe7, 0x7f, 0x27, 0x4d, 0xca, 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, + 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x05, 0xa4, 0xfd, 0x76, + 0x1f, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0x3c, 0x02, 0xc0, + 0xc5, 0x60, 0x51, 0x8c, 0xc2, 0xd5, 0x2d, 0x30, 0x86, 0xab, 0xa6, 0x61, 0xc1, 0x42, 0x8c, 0xd5, + 0xaa, 0xc6, 0xc8, 0x84, 0x6b, 0x70, 0x32, 0xc3, 0x65, 0xbc, 0x5a, 0x3b, 0xe6, 0x45, 0x79, 0x8d, + 0x3a, 0xa6, 0xf0, 0xbe, 0xf2, 0x2a, 0x98, 0x89, 0x1e, 0xcc, 0x48, 0xf2, 0x61, 0xa2, 0x7c, 0x7d, + 0xe0, 0xd3, 0x44, 0x92, 0xd4, 0xd9, 0x05, 0x17, 0x3f, 0xed, 0x46, 0xcb, 0x68, 0x0c, 0x18, 0xf6, + 0xee, 0x3f, 0xbf, 0x0c, 0xe0, 0x49, 0x2e, 0x3a, 0xc3, 0x2f, 0x09, 0x1c, 0x4b, 0xcb, 0x65, 0xec, + 0x3c, 0x57, 0xc0, 0xc5, 0xc4, 0x62, 0x19, 0x3f, 0xcf, 0x35, 0x0c, 0x97, 0xc1, 0x19, 0x6d, 0x1a, + 0x8c, 0xa5, 0x65, 0x6a, 0x11, 0x90, 0x42, 0xd2, 0xe3, 0xa9, 0x8e, 0x3b, 0x96, 0xc7, 0x45, 0x18, + 0xdb, 0xf8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xb2, 0xb5, 0x0c, 0x75, 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index e7328ca4804..79d9363fe0d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -446,6 +446,15 @@ service ABitOfEverythingService { url: "https://github.com/grpc-ecosystem/grpc-gateway"; description: "Find out more Echo"; } + responses: { + key: "200" + value: { + examples: { + key: "application/json" + value: '{"value": "the input value"}' + } + } + } responses: { key: "503"; value: { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 14e86590d21..033eb3e2f2c 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -81,6 +81,11 @@ "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" + }, + "examples": { + "application/json": { + "value": "the input value" + } } }, "403": { @@ -1830,6 +1835,11 @@ "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" + }, + "examples": { + "application/json": { + "value": "the input value" + } } }, "403": { @@ -1880,6 +1890,11 @@ "description": "A successful response.", "schema": { "$ref": "#/definitions/subStringMessage" + }, + "examples": { + "application/json": { + "value": "the input value" + } } }, "403": { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f54c7e3ed8b..6b2b62eb38f 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -950,9 +950,16 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } if opts.Responses != nil { for name, resp := range opts.Responses { - respObj := swaggerResponseObject{ - Description: resp.Description, - Schema: swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs, meth), + // Merge response data into default response if available. + respObj := operationObject.Responses[name] + if resp.Description != "" { + respObj.Description = resp.Description + } + if resp.Schema != nil { + respObj.Schema = swaggerSchemaFromProtoSchema(resp.Schema, reg, customRefs, meth) + } + if resp.Examples != nil { + respObj.Examples = swaggerExamplesFromProtoExamples(resp.Examples) } if resp.Extensions != nil { exts, err := processExtensions(resp.Extensions) @@ -1238,6 +1245,7 @@ func applyTemplate(p param) (*swaggerObject, error) { respMap[k] = swaggerResponseObject{ Description: v.Description, Schema: swaggerSchemaFromProtoSchema(v.Schema, p.reg, customRefs, nil), + Examples: swaggerExamplesFromProtoExamples(v.Examples), } } } @@ -1709,6 +1717,24 @@ func swaggerSchemaFromProtoSchema(s *swagger_options.Schema, reg *descriptor.Reg return ret } +func swaggerExamplesFromProtoExamples(in map[string]string) map[string]interface{} { + if len(in) == 0 { + return nil + } + out := make(map[string]interface{}) + for mimeType, exampleStr := range in { + switch mimeType { + case "application/json": + // JSON example objects are rendered raw. + out[mimeType] = json.RawMessage(exampleStr) + default: + // All other mimetype examples are rendered as strings. + out[mimeType] = exampleStr + } + } + return out +} + func protoJSONSchemaTypeToFormat(in []swagger_options.JSONSchema_JSONSchemaSimpleTypes) (string, string) { if len(in) == 0 { return "", "" diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 5765706b34b..47d099806f4 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -167,8 +167,9 @@ type swaggerResponsesObject map[string]swaggerResponseObject // http://swagger.io/specification/#responseObject type swaggerResponseObject struct { - Description string `json:"description"` - Schema swaggerSchemaObject `json:"schema"` + Description string `json:"description"` + Schema swaggerSchemaObject `json:"schema"` + Examples map[string]interface{} `json:"examples,omitempty"` extensions []extension } diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 727ca52783c..8ea807582e2 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -477,7 +477,10 @@ type Response struct { Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` // `Schema` optionally defines the structure of the response. // If `Schema` is not provided, it means there is no content to the response. - Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + // `Examples` gives per-mimetype response examples. + // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object + Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -523,6 +526,13 @@ func (m *Response) GetSchema() *Schema { return nil } +func (m *Response) GetExamples() map[string]string { + if m != nil { + return m.Examples + } + return nil +} + func (m *Response) GetExtensions() map[string]*_struct.Value { if m != nil { return m.Extensions @@ -1478,6 +1488,7 @@ func init() { proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry") proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry") proto.RegisterType((*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Response") + proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.protoc_gen_swagger.options.Response.ExamplesEntry") proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry") proto.RegisterType((*Info)(nil), "grpc.gateway.protoc_gen_swagger.options.Info") proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry") @@ -1503,123 +1514,125 @@ func init() { } var fileDescriptor_ba35ad8af024fb48 = []byte{ - // 1884 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x5b, 0x73, 0xdb, 0xc6, - 0xf5, 0x0f, 0x48, 0x90, 0x04, 0x0f, 0x45, 0x7a, 0xbd, 0x96, 0xf3, 0x47, 0x18, 0xdb, 0x7f, 0x85, - 0x4d, 0xa7, 0x1a, 0xbb, 0xa6, 0x12, 0xe5, 0xa1, 0x99, 0x4c, 0x6f, 0x94, 0xc4, 0xc8, 0x80, 0x65, - 0x92, 0x05, 0xa9, 0x28, 0xee, 0x8c, 0x07, 0x85, 0xc0, 0x25, 0x85, 0x18, 0x17, 0x06, 0x17, 0x49, - 0xec, 0x27, 0xe8, 0x73, 0xa7, 0xaf, 0xf9, 0x1e, 0x9d, 0x69, 0x9f, 0xfa, 0x09, 0xfa, 0x59, 0xda, - 0xe9, 0x7b, 0x67, 0x2f, 0x20, 0x41, 0x91, 0xf1, 0x90, 0x72, 0x3c, 0x79, 0xe8, 0x13, 0xf7, 0xdc, - 0x7e, 0xbb, 0x7b, 0xce, 0x9e, 0x0b, 0x08, 0x8f, 0x27, 0x61, 0x10, 0x07, 0xf6, 0xd3, 0x31, 0xf1, - 0x9f, 0x46, 0x57, 0xd6, 0x78, 0x4c, 0xc2, 0xbd, 0x60, 0x12, 0x3b, 0x81, 0x1f, 0xed, 0x05, 0x13, - 0xe2, 0x5b, 0x13, 0xe7, 0x72, 0xbf, 0xc9, 0x94, 0xf0, 0xcf, 0xc6, 0xe1, 0xc4, 0x6e, 0x8e, 0xad, - 0x98, 0x5c, 0x59, 0x53, 0xce, 0xb3, 0xcd, 0x31, 0xf1, 0x4d, 0x61, 0xd8, 0x14, 0x86, 0xf5, 0x0f, - 0xc6, 0x41, 0x30, 0x76, 0xc9, 0x1e, 0x53, 0x39, 0x4f, 0x46, 0x7b, 0x96, 0x2f, 0xf4, 0xeb, 0x0f, - 0x6e, 0x8a, 0xa2, 0x38, 0x4c, 0xec, 0x98, 0x4b, 0x1b, 0x7f, 0x55, 0xa0, 0xd4, 0xe7, 0x60, 0x58, - 0x85, 0x92, 0xc0, 0x55, 0xa5, 0x1d, 0x69, 0xb7, 0x6c, 0xa4, 0x24, 0x6e, 0x81, 0xec, 0xf8, 0xa3, - 0x40, 0xcd, 0xed, 0x48, 0xbb, 0x95, 0xfd, 0xa7, 0xcd, 0x35, 0x8f, 0xd5, 0xd4, 0xfc, 0x51, 0x60, - 0x30, 0x53, 0x8c, 0x41, 0xbe, 0x08, 0xa2, 0x58, 0xcd, 0x33, 0x64, 0xb6, 0xc6, 0x1f, 0x42, 0xf9, - 0xdc, 0x8a, 0x88, 0x39, 0xb1, 0xe2, 0x0b, 0x55, 0x66, 0x02, 0x85, 0x32, 0x7a, 0x56, 0x7c, 0x81, - 0xbf, 0x86, 0x52, 0x64, 0x5f, 0x10, 0x8f, 0x44, 0x6a, 0x61, 0x27, 0xbf, 0x5b, 0xdb, 0xff, 0xf5, - 0xda, 0xdb, 0x8a, 0x0b, 0xa5, 0xbf, 0x7d, 0x06, 0x63, 0xa4, 0x70, 0xb8, 0x0e, 0x8a, 0x1d, 0xf8, - 0x51, 0x42, 0xa1, 0x8b, 0x3b, 0x79, 0xba, 0x6b, 0x4a, 0x53, 0xd9, 0x24, 0x0c, 0x86, 0x89, 0x4d, - 0x22, 0xb5, 0xc4, 0x65, 0x29, 0x8d, 0x5f, 0x41, 0x39, 0x24, 0xd1, 0x24, 0xf0, 0x23, 0x12, 0xa9, - 0xb0, 0x93, 0xdf, 0xad, 0xec, 0xff, 0x66, 0xe3, 0x33, 0x19, 0x29, 0x42, 0xdb, 0x8f, 0xc3, 0xa9, - 0x31, 0x47, 0xc4, 0x01, 0x6c, 0x47, 0xc4, 0x4e, 0x42, 0x27, 0x9e, 0x9a, 0x43, 0x32, 0x72, 0x7c, - 0x87, 0x59, 0xaa, 0x15, 0xe6, 0xf4, 0x5f, 0xae, 0xbf, 0x93, 0x00, 0x39, 0x9a, 0x63, 0x18, 0xf7, - 0xa2, 0x65, 0x26, 0xfe, 0x1a, 0x94, 0x94, 0xad, 0x6e, 0xb1, 0xeb, 0x6c, 0xbe, 0x89, 0x41, 0xbe, - 0x4d, 0x9c, 0x90, 0x78, 0xc4, 0x8f, 0x8d, 0x19, 0x1a, 0xb6, 0xa1, 0x4a, 0xae, 0x63, 0x12, 0xfa, - 0x96, 0x6b, 0x0e, 0x03, 0x3b, 0x52, 0x6b, 0xec, 0x0e, 0xeb, 0x47, 0xb0, 0x2d, 0xac, 0x8f, 0x02, - 0x3b, 0xa1, 0xd8, 0x16, 0x65, 0x1b, 0x5b, 0x64, 0xce, 0x8e, 0xf0, 0x1f, 0x00, 0x28, 0xed, 0x47, - 0xcc, 0x4b, 0x77, 0xd8, 0x05, 0x7e, 0xbb, 0x71, 0x3c, 0xda, 0x33, 0x08, 0x1e, 0x90, 0x0c, 0x66, - 0x3d, 0x80, 0xda, 0x62, 0xb8, 0x30, 0x82, 0xfc, 0x6b, 0x32, 0x15, 0xe9, 0x41, 0x97, 0xf8, 0x18, - 0x0a, 0x97, 0x96, 0x9b, 0x10, 0x91, 0x1b, 0x9f, 0xae, 0x7d, 0x80, 0x14, 0xd9, 0xe0, 0xf6, 0x5f, - 0xe4, 0x3e, 0x97, 0xea, 0xa7, 0x70, 0xe7, 0xc6, 0x79, 0x56, 0xec, 0xf8, 0xf3, 0xc5, 0x1d, 0xdf, - 0x6f, 0xf2, 0x04, 0x6f, 0xa6, 0x09, 0xde, 0xfc, 0x8a, 0x4a, 0x33, 0xb0, 0x8d, 0x03, 0xa8, 0x2e, - 0xa4, 0x02, 0xae, 0x40, 0xe9, 0xb4, 0xf3, 0xbc, 0xd3, 0x3d, 0xeb, 0xa0, 0xf7, 0xb0, 0x02, 0xf2, - 0xb3, 0xc1, 0xa0, 0x87, 0x24, 0x5c, 0x86, 0x02, 0x5d, 0xf5, 0x51, 0x0e, 0x17, 0x21, 0x77, 0xd6, - 0x47, 0x79, 0x5c, 0x82, 0xfc, 0x59, 0xbf, 0x8f, 0x64, 0x5d, 0x56, 0x14, 0x54, 0xd6, 0x65, 0xa5, - 0x8c, 0x40, 0x97, 0x95, 0x2a, 0xaa, 0x35, 0xfe, 0x51, 0x84, 0x72, 0x77, 0x42, 0x42, 0x16, 0x1b, - 0x9a, 0xdf, 0xb1, 0x35, 0x8e, 0x54, 0x89, 0x25, 0x0d, 0x5b, 0xb3, 0x82, 0x92, 0x78, 0x9e, 0x15, - 0x4e, 0xd9, 0x59, 0x69, 0x41, 0xe1, 0x24, 0xde, 0x81, 0xca, 0x90, 0x44, 0x76, 0xe8, 0x30, 0x67, - 0x88, 0xa2, 0x90, 0x65, 0x2d, 0x3f, 0x21, 0xf9, 0x1d, 0x3c, 0xa1, 0x8f, 0x60, 0x2b, 0x48, 0x6f, - 0x60, 0x3a, 0x43, 0xb5, 0xc0, 0xcf, 0x31, 0xe3, 0x69, 0xc3, 0x5b, 0x17, 0x0b, 0x33, 0x5b, 0x2c, - 0xca, 0xec, 0x71, 0xb6, 0xd6, 0x3e, 0xfb, 0xcc, 0xad, 0x6f, 0x28, 0x17, 0xea, 0xbc, 0x3e, 0x02, - 0xdb, 0x7b, 0x56, 0xdf, 0x1e, 0x01, 0x0c, 0xc9, 0x24, 0x24, 0xb6, 0x15, 0x93, 0x21, 0x2b, 0x1f, - 0x8a, 0x91, 0xe1, 0xbc, 0xc3, 0xbc, 0x3f, 0x5f, 0x48, 0xc9, 0x2a, 0xc3, 0x3e, 0xb8, 0xc5, 0xad, - 0xff, 0x07, 0x92, 0x92, 0x27, 0x54, 0xe3, 0x6f, 0x39, 0x50, 0xd2, 0x4d, 0x6f, 0x66, 0x85, 0xb4, - 0x9c, 0x15, 0xc7, 0x50, 0x64, 0x51, 0xb6, 0xc4, 0x3e, 0x7b, 0xeb, 0x07, 0x8e, 0x99, 0x19, 0xc2, - 0x1c, 0x5b, 0x0b, 0x91, 0x2a, 0x6c, 0xf8, 0x3e, 0xd3, 0x13, 0xbf, 0x31, 0x50, 0xef, 0xcc, 0x6f, - 0x79, 0x56, 0x8e, 0x64, 0x54, 0x68, 0xfc, 0x33, 0x0f, 0x32, 0x9d, 0x31, 0xf0, 0x36, 0x14, 0x62, - 0x27, 0x76, 0x89, 0x80, 0xe6, 0xc4, 0x4d, 0x7f, 0xe6, 0x96, 0xfd, 0xb9, 0x0b, 0x28, 0x26, 0xa1, - 0x17, 0x99, 0xc1, 0xc8, 0x8c, 0x48, 0x78, 0xe9, 0xd8, 0x44, 0x14, 0xa3, 0x1a, 0xe3, 0x77, 0x47, - 0x7d, 0xce, 0xc5, 0x3a, 0x94, 0xec, 0xc0, 0x8f, 0x2d, 0x3b, 0x16, 0x95, 0xe8, 0x93, 0xb5, 0xbd, - 0x75, 0xc8, 0xed, 0x8c, 0x14, 0x80, 0x62, 0xb9, 0x8e, 0x4d, 0xfc, 0x88, 0xb0, 0x8a, 0xb3, 0x09, - 0xd6, 0x09, 0xb7, 0x33, 0x52, 0x00, 0x5a, 0x06, 0x2e, 0x49, 0x48, 0x7d, 0xac, 0x16, 0x79, 0x8d, - 0x15, 0x24, 0x7e, 0xb5, 0x10, 0xe2, 0x12, 0x0b, 0xf1, 0xaf, 0x36, 0x1a, 0xdd, 0x7e, 0x84, 0xf0, - 0x36, 0xda, 0x50, 0x12, 0xfe, 0xa2, 0x2d, 0xc5, 0xb7, 0xbc, 0x34, 0xa6, 0x6c, 0x4d, 0xb7, 0x48, - 0x42, 0x57, 0x84, 0x92, 0x2e, 0x69, 0xe8, 0x89, 0x67, 0x39, 0xae, 0x88, 0x1b, 0x27, 0x1a, 0x7b, - 0x50, 0x12, 0xae, 0x5a, 0x0f, 0xa6, 0xf1, 0x1c, 0xee, 0xaf, 0xec, 0x18, 0x6b, 0x24, 0xe5, 0x32, - 0xd8, 0xdf, 0x73, 0x50, 0xe4, 0x09, 0x87, 0x07, 0x50, 0xf9, 0x26, 0x0a, 0x7c, 0x53, 0xa4, 0xad, - 0xc4, 0xfc, 0xf0, 0xd9, 0xda, 0x61, 0xd0, 0xfb, 0xdd, 0x8e, 0x48, 0x5d, 0xa0, 0x38, 0x02, 0xf5, - 0x63, 0xa8, 0x0e, 0x1d, 0x7a, 0x02, 0xcf, 0xf1, 0xad, 0x38, 0x08, 0xc5, 0xe6, 0x8b, 0x4c, 0x3a, - 0x5f, 0x87, 0xc4, 0x1a, 0x9a, 0x81, 0xef, 0x4e, 0x99, 0x7b, 0x14, 0x43, 0xa1, 0x8c, 0xae, 0xef, - 0xae, 0x98, 0xd1, 0x0a, 0xef, 0xa0, 0xc1, 0x36, 0xa1, 0x44, 0xae, 0x2d, 0x6f, 0xe2, 0x12, 0xf6, - 0x3a, 0x2b, 0xfb, 0xdb, 0x4b, 0x2f, 0xa0, 0xe5, 0x4f, 0x8d, 0x54, 0x49, 0xa4, 0xf5, 0x77, 0x25, - 0x80, 0xf9, 0xc5, 0xa9, 0x7f, 0x43, 0x32, 0x12, 0xf1, 0xa5, 0xcb, 0x79, 0xba, 0x17, 0xde, 0x90, - 0xee, 0xc5, 0xe5, 0x48, 0xa9, 0x50, 0x1a, 0x92, 0x91, 0x95, 0xb8, 0xb1, 0x5a, 0xe2, 0xc9, 0x22, - 0xc8, 0x45, 0x57, 0x29, 0x37, 0x5c, 0xf5, 0xff, 0x50, 0xf1, 0x12, 0x37, 0x76, 0x26, 0x2e, 0x31, - 0x83, 0x91, 0x0a, 0x3b, 0xd2, 0xae, 0x64, 0x40, 0xca, 0xea, 0x8e, 0x28, 0xae, 0x67, 0x5d, 0x3b, - 0x5e, 0xe2, 0xb1, 0x76, 0x2b, 0x19, 0x29, 0x89, 0x9f, 0xc0, 0x5d, 0x72, 0x6d, 0xbb, 0x49, 0xe4, - 0x5c, 0x12, 0x33, 0xd5, 0xd9, 0x62, 0xf8, 0x68, 0x26, 0x78, 0x21, 0x94, 0x29, 0x8c, 0xe3, 0x33, - 0x95, 0xaa, 0x80, 0xe1, 0xe4, 0x0d, 0x18, 0xa1, 0x53, 0xbb, 0x09, 0x23, 0x94, 0x1f, 0x02, 0x78, - 0xd6, 0xb5, 0xe9, 0x12, 0x7f, 0x1c, 0x5f, 0xa8, 0x77, 0x76, 0xa4, 0x5d, 0xd9, 0x28, 0x7b, 0xd6, - 0xf5, 0x09, 0x63, 0x30, 0xb1, 0xe3, 0xa7, 0x62, 0x24, 0xc4, 0x8e, 0x2f, 0xc4, 0x2a, 0x94, 0x26, - 0x56, 0x4c, 0x63, 0xa8, 0xde, 0xe5, 0x3e, 0x12, 0x24, 0xf5, 0x11, 0xc5, 0x75, 0x62, 0xe2, 0x45, - 0xea, 0x36, 0xb3, 0x53, 0x3c, 0xeb, 0x5a, 0xa3, 0x34, 0x13, 0x3a, 0xbe, 0x10, 0xde, 0x17, 0x42, - 0xc7, 0xe7, 0xc2, 0x8f, 0x60, 0x2b, 0xf1, 0x9d, 0x6f, 0x13, 0x22, 0xe4, 0xef, 0xb3, 0x93, 0x57, - 0x38, 0x8f, 0xab, 0xfc, 0x14, 0x6a, 0x14, 0x7c, 0x12, 0xd2, 0xe1, 0x2b, 0x76, 0x48, 0xa4, 0xaa, - 0x0c, 0xa4, 0xea, 0x59, 0xd7, 0xbd, 0x19, 0x93, 0xa9, 0x39, 0x7e, 0x56, 0xed, 0x03, 0xa1, 0xe6, - 0xf8, 0x19, 0xb5, 0x3a, 0x28, 0x21, 0x9f, 0x50, 0x86, 0x6a, 0x9d, 0x4f, 0x66, 0x29, 0x4d, 0x1f, - 0x8f, 0x15, 0x86, 0xd6, 0x54, 0x6d, 0x30, 0x01, 0x27, 0xf0, 0x2b, 0x90, 0xe3, 0xe9, 0x84, 0xa8, - 0x3f, 0x61, 0xdf, 0x9a, 0xda, 0x2d, 0x12, 0x34, 0xb3, 0xec, 0x3b, 0xf4, 0x35, 0x0f, 0xa6, 0x13, - 0x12, 0x19, 0x0c, 0xb6, 0x71, 0x05, 0xf7, 0x57, 0x8a, 0x17, 0x47, 0xf1, 0x32, 0x14, 0x5a, 0x86, - 0xd1, 0x7a, 0x89, 0x24, 0xca, 0x3f, 0xe8, 0x76, 0x4f, 0xda, 0xad, 0x0e, 0xca, 0x51, 0x42, 0xeb, - 0x0c, 0xda, 0xc7, 0x6d, 0x03, 0xe5, 0xe9, 0xbc, 0xde, 0x39, 0x3d, 0x39, 0x41, 0x32, 0x06, 0x28, - 0x76, 0x4e, 0x5f, 0x1c, 0xb4, 0x0d, 0x54, 0xa0, 0xeb, 0xee, 0x81, 0xde, 0x3e, 0x1c, 0xa0, 0x22, - 0x5d, 0xf7, 0x07, 0x86, 0xd6, 0x39, 0x46, 0x25, 0x5d, 0x56, 0x24, 0x94, 0xd3, 0x65, 0x25, 0x87, - 0xf2, 0x3c, 0xbb, 0x66, 0x33, 0x3c, 0x46, 0xf7, 0x74, 0x59, 0xb9, 0x87, 0xb6, 0x75, 0x59, 0xf9, - 0x3f, 0xa4, 0xea, 0xb2, 0xf2, 0x21, 0x7a, 0xa0, 0xcb, 0xca, 0x03, 0xf4, 0x50, 0x97, 0x95, 0x87, - 0xe8, 0x91, 0x2e, 0x2b, 0x8f, 0x50, 0x43, 0x97, 0x95, 0x8f, 0xd1, 0x63, 0x5d, 0x56, 0x1e, 0xa3, - 0x27, 0xba, 0xac, 0x3c, 0x41, 0xcd, 0xc6, 0x9f, 0x25, 0xc8, 0x0f, 0xac, 0xf1, 0x1a, 0xfd, 0x75, - 0xa9, 0xc8, 0xe4, 0x7f, 0xf8, 0x22, 0xc3, 0xaf, 0xd8, 0xf8, 0xb7, 0x04, 0xf7, 0x56, 0x7c, 0xfa, - 0xe2, 0x51, 0x66, 0xda, 0x95, 0x58, 0x13, 0xd4, 0xdf, 0xe6, 0x53, 0x7a, 0xc6, 0xe3, 0x1d, 0x71, - 0x86, 0x5d, 0x8f, 0xa1, 0xba, 0x20, 0x5a, 0xd1, 0x0d, 0x5f, 0x2c, 0x76, 0xc3, 0x5f, 0x6c, 0x7c, - 0x0e, 0xf1, 0x4f, 0x46, 0xa6, 0x5d, 0xfe, 0xa7, 0x08, 0xb5, 0x45, 0x29, 0xee, 0x89, 0x97, 0x4c, - 0x37, 0xae, 0xdd, 0x62, 0xb4, 0xe7, 0x30, 0x4d, 0xfa, 0x3c, 0xf9, 0xe3, 0x5d, 0x23, 0xce, 0x69, - 0x8f, 0xcd, 0x67, 0x7a, 0xac, 0x0e, 0x39, 0xc7, 0x67, 0xc3, 0x52, 0x6d, 0xff, 0x8b, 0xdb, 0x9e, - 0x42, 0xf3, 0x8d, 0x9c, 0xe3, 0xd3, 0x3b, 0x8d, 0xdc, 0xe0, 0x8a, 0xd5, 0xfb, 0xb7, 0xb8, 0xd3, - 0x97, 0x6e, 0x70, 0x65, 0x30, 0x24, 0x5a, 0x51, 0xad, 0x24, 0xbe, 0x08, 0x42, 0xe7, 0x8f, 0xfc, - 0xf3, 0x8f, 0xb6, 0x70, 0xde, 0x32, 0xd0, 0x82, 0xe0, 0x34, 0x74, 0x69, 0x71, 0x8b, 0x83, 0xd7, - 0x84, 0x2b, 0xf1, 0xce, 0xa1, 0x30, 0x06, 0x15, 0xb2, 0x99, 0x3c, 0x98, 0x90, 0x88, 0xf5, 0x8d, - 0xcd, 0x66, 0x72, 0x6a, 0x66, 0x08, 0x73, 0x3c, 0x5e, 0x18, 0xd8, 0xf8, 0x37, 0xe3, 0xf1, 0x6d, - 0xaf, 0xfa, 0x23, 0x8c, 0x6e, 0xcf, 0x41, 0xa6, 0x8f, 0x06, 0x23, 0xd8, 0x1a, 0xbc, 0xec, 0xb5, - 0x4d, 0xad, 0xf3, 0x55, 0xeb, 0x44, 0x3b, 0x42, 0xef, 0xe1, 0x1a, 0x00, 0xe3, 0x1c, 0xb4, 0xfa, - 0xda, 0x21, 0x92, 0x66, 0x1a, 0xad, 0x9e, 0x66, 0x3e, 0x6f, 0xbf, 0x44, 0x39, 0x7c, 0x07, 0x2a, - 0x8c, 0xd3, 0x6d, 0x9d, 0x0e, 0x9e, 0xed, 0xa3, 0x7c, 0xe3, 0x53, 0xc8, 0x69, 0x3e, 0x35, 0xd4, - 0x3a, 0x19, 0xa0, 0x2d, 0x50, 0xb4, 0x8e, 0xf9, 0xbb, 0xd3, 0xb6, 0x41, 0x6b, 0x64, 0x15, 0xca, - 0x5a, 0xc7, 0x7c, 0xd6, 0x6e, 0x1d, 0xb5, 0x0d, 0x94, 0x6b, 0x7c, 0x03, 0x32, 0x0d, 0x30, 0x45, - 0xff, 0xf2, 0xa4, 0x7b, 0x96, 0x31, 0xbb, 0x0b, 0x55, 0xce, 0x79, 0xd1, 0x3b, 0xd1, 0x0e, 0xb5, - 0x01, 0x92, 0x66, 0xac, 0x5e, 0xab, 0xdf, 0x3f, 0xeb, 0x1a, 0x47, 0x28, 0x87, 0xb7, 0x01, 0x31, - 0x56, 0xab, 0x47, 0xb5, 0x5a, 0x03, 0xad, 0xdb, 0x41, 0xf9, 0x39, 0xf7, 0xf0, 0xb0, 0xdd, 0xef, - 0x9b, 0x87, 0xdd, 0xa3, 0x36, 0x92, 0x1b, 0xff, 0xca, 0xcd, 0xab, 0x4d, 0xe6, 0x5b, 0x18, 0xff, - 0x49, 0xca, 0xfc, 0x8b, 0x17, 0xce, 0x05, 0xa2, 0xf4, 0x9c, 0xbe, 0xcd, 0x87, 0xf6, 0x2a, 0x1e, - 0x0f, 0xee, 0xec, 0xef, 0xbd, 0x8c, 0xa4, 0xfe, 0x09, 0xa8, 0x2b, 0x0c, 0x58, 0xd4, 0x68, 0x0f, - 0x64, 0x8f, 0x4e, 0xfc, 0x5d, 0xc3, 0x89, 0xfa, 0x77, 0xd2, 0x4a, 0x93, 0xef, 0x7b, 0x21, 0xaf, - 0x17, 0x5f, 0xc8, 0x0f, 0x7e, 0xb7, 0xa5, 0x07, 0xf6, 0x17, 0x89, 0x8e, 0xd5, 0x2c, 0x57, 0x7a, - 0xd9, 0x0b, 0x54, 0x36, 0xa9, 0x2f, 0xcc, 0x9e, 0xff, 0x70, 0xe7, 0x89, 0xcb, 0x7f, 0x0e, 0x30, - 0x67, 0xae, 0xb8, 0xed, 0x76, 0xf6, 0xb6, 0xe5, 0xcc, 0xb1, 0x0e, 0x0e, 0x7f, 0xdf, 0x1a, 0x3b, - 0xf1, 0x45, 0x72, 0xde, 0xb4, 0x03, 0x6f, 0x8f, 0x1e, 0xe4, 0x29, 0xb1, 0x83, 0x68, 0x1a, 0xc5, - 0x44, 0x90, 0xe2, 0x5c, 0x7b, 0xdf, 0xff, 0xd7, 0xff, 0x79, 0x91, 0xc9, 0x3e, 0xfb, 0x6f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x29, 0x5a, 0xd3, 0x93, 0x1f, 0x18, 0x00, 0x00, + // 1910 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x5b, 0x73, 0x1a, 0xd7, + 0x1d, 0xcf, 0xc2, 0x02, 0xcb, 0x1f, 0x81, 0x8f, 0x8f, 0xe5, 0x74, 0x43, 0x6c, 0x57, 0xa1, 0xe9, + 0x54, 0x63, 0xd7, 0x28, 0x51, 0x1e, 0x9a, 0x49, 0xaf, 0x48, 0x22, 0xf2, 0xae, 0x65, 0xa0, 0x0b, + 0x8a, 0xe2, 0x76, 0x3c, 0xdb, 0xd5, 0x72, 0x40, 0x1b, 0xef, 0x85, 0xec, 0x45, 0x12, 0xfd, 0x04, + 0x7d, 0xee, 0xf4, 0x35, 0xdf, 0xa3, 0x0f, 0x7d, 0xea, 0x17, 0x68, 0x3f, 0x4b, 0x3b, 0x7d, 0xef, + 0x9c, 0xcb, 0xc2, 0x22, 0x61, 0x0f, 0xc8, 0x76, 0xfb, 0x90, 0x27, 0xce, 0xff, 0xf6, 0x3b, 0x97, + 0xff, 0xed, 0x9c, 0x05, 0x1e, 0x4e, 0xc2, 0x20, 0x0e, 0xec, 0xc7, 0x63, 0xe2, 0x3f, 0x8e, 0x2e, + 0xac, 0xf1, 0x98, 0x84, 0x3b, 0xc1, 0x24, 0x76, 0x02, 0x3f, 0xda, 0x09, 0x26, 0xc4, 0xb7, 0x26, + 0xce, 0xf9, 0x6e, 0x93, 0x29, 0xe1, 0x9f, 0x8c, 0xc3, 0x89, 0xdd, 0x1c, 0x5b, 0x31, 0xb9, 0xb0, + 0xa6, 0x9c, 0x67, 0x9b, 0x63, 0xe2, 0x9b, 0xc2, 0xb0, 0x29, 0x0c, 0xeb, 0x1f, 0x8c, 0x83, 0x60, + 0xec, 0x92, 0x1d, 0xa6, 0x72, 0x9a, 0x8c, 0x76, 0x2c, 0x5f, 0xe8, 0xd7, 0xef, 0x5d, 0x15, 0x45, + 0x71, 0x98, 0xd8, 0x31, 0x97, 0x36, 0xfe, 0xaa, 0x40, 0xa9, 0xcf, 0xc1, 0xb0, 0x0a, 0x25, 0x81, + 0xab, 0x4a, 0x5b, 0xd2, 0x76, 0xd9, 0x48, 0x49, 0xdc, 0x02, 0xd9, 0xf1, 0x47, 0x81, 0x9a, 0xdb, + 0x92, 0xb6, 0x2b, 0xbb, 0x8f, 0x9b, 0x2b, 0x2e, 0xab, 0xa9, 0xf9, 0xa3, 0xc0, 0x60, 0xa6, 0x18, + 0x83, 0x7c, 0x16, 0x44, 0xb1, 0x9a, 0x67, 0xc8, 0x6c, 0x8c, 0x3f, 0x84, 0xf2, 0xa9, 0x15, 0x11, + 0x73, 0x62, 0xc5, 0x67, 0xaa, 0xcc, 0x04, 0x0a, 0x65, 0xf4, 0xac, 0xf8, 0x0c, 0x7f, 0x0d, 0xa5, + 0xc8, 0x3e, 0x23, 0x1e, 0x89, 0xd4, 0xc2, 0x56, 0x7e, 0xbb, 0xb6, 0xfb, 0xab, 0x95, 0xa7, 0x15, + 0x1b, 0x4a, 0x7f, 0xfb, 0x0c, 0xc6, 0x48, 0xe1, 0x70, 0x1d, 0x14, 0x3b, 0xf0, 0xa3, 0x84, 0x42, + 0x17, 0xb7, 0xf2, 0x74, 0xd6, 0x94, 0xa6, 0xb2, 0x49, 0x18, 0x0c, 0x13, 0x9b, 0x44, 0x6a, 0x89, + 0xcb, 0x52, 0x1a, 0xbf, 0x80, 0x72, 0x48, 0xa2, 0x49, 0xe0, 0x47, 0x24, 0x52, 0x61, 0x2b, 0xbf, + 0x5d, 0xd9, 0xfd, 0xf5, 0xda, 0x6b, 0x32, 0x52, 0x84, 0xb6, 0x1f, 0x87, 0x53, 0x63, 0x8e, 0x88, + 0x03, 0xd8, 0x8c, 0x88, 0x9d, 0x84, 0x4e, 0x3c, 0x35, 0x87, 0x64, 0xe4, 0xf8, 0x0e, 0xb3, 0x54, + 0x2b, 0xec, 0xd0, 0x7f, 0xb1, 0xfa, 0x4c, 0x02, 0xe4, 0x60, 0x8e, 0x61, 0xdc, 0x89, 0xae, 0x33, + 0xf1, 0xd7, 0xa0, 0xa4, 0x6c, 0x75, 0x83, 0x6d, 0x67, 0xfd, 0x49, 0x0c, 0xf2, 0x6d, 0xe2, 0x84, + 0xc4, 0x23, 0x7e, 0x6c, 0xcc, 0xd0, 0xb0, 0x0d, 0x55, 0x72, 0x19, 0x93, 0xd0, 0xb7, 0x5c, 0x73, + 0x18, 0xd8, 0x91, 0x5a, 0x63, 0x7b, 0x58, 0xdd, 0x83, 0x6d, 0x61, 0x7d, 0x10, 0xd8, 0x09, 0xc5, + 0xb6, 0x28, 0xdb, 0xd8, 0x20, 0x73, 0x76, 0x84, 0xff, 0x00, 0x40, 0x69, 0x3f, 0x62, 0xa7, 0x74, + 0x8b, 0x6d, 0xe0, 0x37, 0x6b, 0xfb, 0xa3, 0x3d, 0x83, 0xe0, 0x0e, 0xc9, 0x60, 0xd6, 0x03, 0xa8, + 0x2d, 0xba, 0x0b, 0x23, 0xc8, 0xbf, 0x24, 0x53, 0x91, 0x1e, 0x74, 0x88, 0x0f, 0xa1, 0x70, 0x6e, + 0xb9, 0x09, 0x11, 0xb9, 0xf1, 0xe9, 0xca, 0x0b, 0x48, 0x91, 0x0d, 0x6e, 0xff, 0x45, 0xee, 0x73, + 0xa9, 0x7e, 0x0c, 0xb7, 0xae, 0xac, 0x67, 0xc9, 0x8c, 0x3f, 0x5d, 0x9c, 0xf1, 0xfd, 0x26, 0x4f, + 0xf0, 0x66, 0x9a, 0xe0, 0xcd, 0xaf, 0xa8, 0x34, 0x03, 0xdb, 0xd8, 0x83, 0xea, 0x42, 0x2a, 0xe0, + 0x0a, 0x94, 0x8e, 0x3b, 0x4f, 0x3b, 0xdd, 0x93, 0x0e, 0x7a, 0x0f, 0x2b, 0x20, 0x3f, 0x19, 0x0c, + 0x7a, 0x48, 0xc2, 0x65, 0x28, 0xd0, 0x51, 0x1f, 0xe5, 0x70, 0x11, 0x72, 0x27, 0x7d, 0x94, 0xc7, + 0x25, 0xc8, 0x9f, 0xf4, 0xfb, 0x48, 0xd6, 0x65, 0x45, 0x41, 0x65, 0x5d, 0x56, 0xca, 0x08, 0x74, + 0x59, 0xa9, 0xa2, 0x5a, 0xe3, 0xef, 0x45, 0x28, 0x77, 0x27, 0x24, 0x64, 0xbe, 0xa1, 0xf9, 0x1d, + 0x5b, 0xe3, 0x48, 0x95, 0x58, 0xd2, 0xb0, 0x31, 0x2b, 0x28, 0x89, 0xe7, 0x59, 0xe1, 0x94, 0xad, + 0x95, 0x16, 0x14, 0x4e, 0xe2, 0x2d, 0xa8, 0x0c, 0x49, 0x64, 0x87, 0x0e, 0x3b, 0x0c, 0x51, 0x14, + 0xb2, 0xac, 0xeb, 0x21, 0x24, 0xbf, 0x83, 0x10, 0xfa, 0x08, 0x36, 0x82, 0x74, 0x07, 0xa6, 0x33, + 0x54, 0x0b, 0x7c, 0x1d, 0x33, 0x9e, 0x36, 0xbc, 0x71, 0xb1, 0x30, 0xb3, 0xc5, 0xa2, 0xcc, 0x82, + 0xb3, 0xb5, 0xf2, 0xda, 0x67, 0xc7, 0xfa, 0x9a, 0x72, 0xa1, 0xce, 0xeb, 0x23, 0xb0, 0xb9, 0x67, + 0xf5, 0xed, 0x01, 0xc0, 0x90, 0x4c, 0x42, 0x62, 0x5b, 0x31, 0x19, 0xb2, 0xf2, 0xa1, 0x18, 0x19, + 0xce, 0x3b, 0xcc, 0xfb, 0xd3, 0x85, 0x94, 0xac, 0x32, 0xec, 0xbd, 0x1b, 0xec, 0xfa, 0x7b, 0x90, + 0x94, 0x3c, 0xa1, 0x1a, 0xff, 0xc8, 0x83, 0x92, 0x4e, 0x7a, 0x35, 0x2b, 0xa4, 0xeb, 0x59, 0x71, + 0x08, 0x45, 0xe6, 0x65, 0x4b, 0xcc, 0xb3, 0xb3, 0xba, 0xe3, 0x98, 0x99, 0x21, 0xcc, 0xf1, 0xef, + 0x41, 0x21, 0x97, 0x96, 0x37, 0x71, 0x09, 0xcd, 0xac, 0xf5, 0x5a, 0x59, 0xba, 0xde, 0x66, 0x5b, + 0x20, 0x70, 0x27, 0xcd, 0x00, 0xb1, 0xb5, 0x10, 0x06, 0x85, 0x35, 0x83, 0x3f, 0x03, 0xff, 0xea, + 0x28, 0xf8, 0x39, 0x54, 0x17, 0x66, 0x5f, 0xe2, 0x92, 0xcd, 0xac, 0x4b, 0xca, 0xff, 0x13, 0x8f, + 0xe6, 0x91, 0xdc, 0xf8, 0x67, 0x1e, 0x64, 0x7a, 0xef, 0xa1, 0xf3, 0xc7, 0x4e, 0xec, 0x12, 0x01, + 0xca, 0x89, 0xab, 0x3e, 0xce, 0x5d, 0xf7, 0xf1, 0x36, 0xa0, 0x98, 0x84, 0x5e, 0x64, 0x06, 0x23, + 0x33, 0x22, 0xe1, 0xb9, 0x63, 0x13, 0x51, 0x20, 0x6b, 0x8c, 0xdf, 0x1d, 0xf5, 0x39, 0x17, 0xeb, + 0x50, 0xb2, 0x03, 0x3f, 0xb6, 0xec, 0x58, 0x54, 0xc7, 0x4f, 0x56, 0x3e, 0xe4, 0x7d, 0x6e, 0x67, + 0xa4, 0x00, 0x14, 0xcb, 0x75, 0x6c, 0xe2, 0x47, 0x84, 0x55, 0xc1, 0x75, 0xb0, 0x8e, 0xb8, 0x9d, + 0x91, 0x02, 0xd0, 0xd2, 0x74, 0x4e, 0x42, 0x7a, 0xba, 0x6a, 0x91, 0xd7, 0x7d, 0x41, 0xe2, 0x17, + 0x0b, 0x91, 0x51, 0x62, 0x91, 0xf1, 0xcb, 0xb5, 0xae, 0x93, 0xaf, 0x8d, 0x8a, 0x77, 0xd4, 0x3f, + 0xdb, 0x50, 0x12, 0xe7, 0x45, 0xdb, 0x9c, 0x6f, 0x79, 0xa9, 0x4f, 0xd9, 0x98, 0x4e, 0x91, 0x84, + 0xae, 0x70, 0x25, 0x1d, 0x52, 0xd7, 0x13, 0xcf, 0x72, 0x5c, 0xe1, 0x37, 0x4e, 0x34, 0x76, 0xa0, + 0x24, 0x8e, 0x6a, 0x35, 0x98, 0xc6, 0x53, 0xb8, 0xbb, 0xb4, 0x8b, 0xad, 0x50, 0x28, 0xae, 0x83, + 0xfd, 0x2d, 0x07, 0x45, 0x5e, 0x04, 0xf0, 0x00, 0x2a, 0xdf, 0x44, 0x81, 0x6f, 0x8a, 0x52, 0x22, + 0xb1, 0x73, 0xf8, 0x6c, 0x65, 0x37, 0xe8, 0xfd, 0x6e, 0x47, 0x94, 0x13, 0xa0, 0x38, 0x02, 0xf5, + 0x63, 0xa8, 0x0e, 0x1d, 0xba, 0x02, 0xcf, 0xf1, 0xad, 0x38, 0x08, 0xc5, 0xe4, 0x8b, 0x4c, 0x7a, + 0xe7, 0x0f, 0x89, 0x35, 0x34, 0x03, 0xdf, 0x9d, 0xb2, 0xe3, 0x51, 0x0c, 0x85, 0x32, 0xba, 0xbe, + 0xbb, 0xe4, 0xde, 0x58, 0x78, 0x07, 0x4d, 0xbf, 0x09, 0x25, 0x51, 0xa9, 0x58, 0x74, 0x56, 0x76, + 0x37, 0xaf, 0x45, 0x40, 0xcb, 0x9f, 0x1a, 0xa9, 0x92, 0x2e, 0x2b, 0x32, 0x2a, 0x34, 0xbe, 0x2b, + 0x01, 0xcc, 0x37, 0x4e, 0xcf, 0x37, 0x24, 0x23, 0xe1, 0x5f, 0x3a, 0x9c, 0xa7, 0x7b, 0xe1, 0x35, + 0xe9, 0x5e, 0xbc, 0xee, 0x29, 0x15, 0x4a, 0x43, 0x32, 0xb2, 0x12, 0x37, 0x56, 0x4b, 0x3c, 0x59, + 0x04, 0xb9, 0x78, 0x54, 0xca, 0x95, 0xa3, 0xfa, 0x21, 0x54, 0xbc, 0xc4, 0x8d, 0x9d, 0x89, 0x4b, + 0xcc, 0x60, 0xa4, 0xc2, 0x96, 0xb4, 0x2d, 0x19, 0x90, 0xb2, 0xba, 0x23, 0x8a, 0xeb, 0x59, 0x97, + 0x8e, 0x97, 0x78, 0xec, 0x0a, 0x20, 0x19, 0x29, 0x89, 0x1f, 0xc1, 0x6d, 0x72, 0x69, 0xbb, 0x49, + 0xe4, 0x9c, 0x13, 0x33, 0xd5, 0xd9, 0x60, 0xf8, 0x68, 0x26, 0x78, 0x26, 0x94, 0x29, 0x8c, 0xe3, + 0x33, 0x95, 0xaa, 0x80, 0xe1, 0xe4, 0x15, 0x18, 0xa1, 0x53, 0xbb, 0x0a, 0x23, 0x94, 0xef, 0x03, + 0x78, 0xd6, 0xa5, 0xe9, 0x12, 0x7f, 0x1c, 0x9f, 0xa9, 0xb7, 0xb6, 0xa4, 0x6d, 0xd9, 0x28, 0x7b, + 0xd6, 0xe5, 0x11, 0x63, 0x30, 0xb1, 0xe3, 0xa7, 0x62, 0x24, 0xc4, 0x8e, 0x2f, 0xc4, 0x2a, 0x94, + 0x26, 0x56, 0x4c, 0x7d, 0xa8, 0xde, 0xe6, 0x67, 0x24, 0x48, 0x7a, 0x46, 0x14, 0xd7, 0x89, 0x89, + 0x17, 0xa9, 0x9b, 0xcc, 0x4e, 0xf1, 0xac, 0x4b, 0x8d, 0xd2, 0x4c, 0xe8, 0xf8, 0x42, 0x78, 0x57, + 0x08, 0x1d, 0x9f, 0x0b, 0x3f, 0x82, 0x8d, 0xc4, 0x77, 0xbe, 0x4d, 0x88, 0x90, 0xbf, 0xcf, 0x56, + 0x5e, 0xe1, 0x3c, 0xae, 0xf2, 0x63, 0xa8, 0x51, 0xf0, 0x49, 0x48, 0x2f, 0x84, 0xb1, 0x43, 0x22, + 0x55, 0x65, 0x20, 0x55, 0xcf, 0xba, 0xec, 0xcd, 0x98, 0x4c, 0xcd, 0xf1, 0xb3, 0x6a, 0x1f, 0x08, + 0x35, 0xc7, 0xcf, 0xa8, 0xd5, 0x41, 0x09, 0xf9, 0xad, 0x69, 0xa8, 0xd6, 0xf9, 0x6d, 0x31, 0xa5, + 0x69, 0xf0, 0x58, 0x61, 0x68, 0x4d, 0xd5, 0x06, 0x13, 0x70, 0x02, 0xbf, 0x00, 0x39, 0x9e, 0x4e, + 0x88, 0xfa, 0x23, 0xf6, 0xfe, 0xd5, 0x6e, 0x90, 0xa0, 0x99, 0x61, 0xdf, 0xa1, 0xd1, 0x3c, 0x98, + 0x4e, 0x48, 0x64, 0x30, 0xd8, 0xc6, 0x05, 0xdc, 0x5d, 0x2a, 0x5e, 0x7c, 0x1e, 0x94, 0xa1, 0xd0, + 0x32, 0x8c, 0xd6, 0x73, 0x24, 0x51, 0xfe, 0x5e, 0xb7, 0x7b, 0xd4, 0x6e, 0x75, 0x50, 0x8e, 0x12, + 0x5a, 0x67, 0xd0, 0x3e, 0x6c, 0x1b, 0x28, 0x4f, 0xdf, 0x10, 0x9d, 0xe3, 0xa3, 0x23, 0x24, 0x63, + 0x80, 0x62, 0xe7, 0xf8, 0xd9, 0x5e, 0xdb, 0x40, 0x05, 0x3a, 0xee, 0xee, 0xe9, 0xed, 0xfd, 0x01, + 0x2a, 0xd2, 0x71, 0x7f, 0x60, 0x68, 0x9d, 0x43, 0x54, 0xd2, 0x65, 0x45, 0x42, 0x39, 0x5d, 0x56, + 0x72, 0x28, 0xcf, 0xb3, 0x6b, 0xf6, 0xae, 0xc0, 0xe8, 0x8e, 0x2e, 0x2b, 0x77, 0xd0, 0xa6, 0x2e, + 0x2b, 0x3f, 0x40, 0xaa, 0x2e, 0x2b, 0x1f, 0xa2, 0x7b, 0xba, 0xac, 0xdc, 0x43, 0xf7, 0x75, 0x59, + 0xb9, 0x8f, 0x1e, 0xe8, 0xb2, 0xf2, 0x00, 0x35, 0x74, 0x59, 0xf9, 0x18, 0x3d, 0xd4, 0x65, 0xe5, + 0x21, 0x7a, 0xa4, 0xcb, 0xca, 0x23, 0xd4, 0x6c, 0xfc, 0x59, 0x82, 0xfc, 0xc0, 0x1a, 0xaf, 0xd0, + 0x5f, 0xaf, 0x15, 0x99, 0xfc, 0xdb, 0x2f, 0x32, 0x7c, 0x8b, 0x8d, 0x7f, 0x4b, 0x70, 0x67, 0xc9, + 0x73, 0x1c, 0x8f, 0x32, 0x37, 0x70, 0x89, 0x35, 0x41, 0xfd, 0x4d, 0x9e, 0xf7, 0x33, 0x9e, 0xb8, + 0x88, 0xa5, 0xd8, 0xf5, 0x18, 0xaa, 0x0b, 0xa2, 0x25, 0xdd, 0xf0, 0xd9, 0x62, 0x37, 0xfc, 0xd9, + 0xda, 0xeb, 0x10, 0x5f, 0x57, 0x32, 0xed, 0xf2, 0x3f, 0x45, 0xa8, 0x2d, 0x4a, 0x71, 0x4f, 0x44, + 0x32, 0x9d, 0xb8, 0x76, 0x83, 0xe7, 0x06, 0x87, 0x69, 0xd2, 0xf0, 0xe4, 0xc1, 0xbb, 0x82, 0x9f, + 0xd3, 0x1e, 0x9b, 0xcf, 0xf4, 0x58, 0x1d, 0x72, 0x8e, 0xcf, 0x2e, 0x4b, 0xb5, 0xdd, 0x2f, 0x6e, + 0xba, 0x0a, 0xcd, 0x37, 0x72, 0x8e, 0x4f, 0xf7, 0x34, 0x72, 0x83, 0x0b, 0x56, 0xef, 0xdf, 0x60, + 0x4f, 0x5f, 0xba, 0xc1, 0x85, 0xc1, 0x90, 0x68, 0x45, 0xb5, 0x92, 0xf8, 0x2c, 0x08, 0x9d, 0x3f, + 0xf2, 0x27, 0x29, 0x6d, 0xe1, 0xbc, 0x65, 0xa0, 0x05, 0xc1, 0x71, 0xe8, 0xd2, 0xe2, 0x16, 0x07, + 0x2f, 0x09, 0x57, 0xe2, 0x9d, 0x43, 0x61, 0x0c, 0x2a, 0x64, 0xef, 0x84, 0x60, 0x42, 0x22, 0xd6, + 0x37, 0xd6, 0x7b, 0x27, 0x50, 0x33, 0x43, 0x98, 0xe3, 0xf1, 0xc2, 0x85, 0x8d, 0xbf, 0x63, 0x0f, + 0x6f, 0xba, 0xd5, 0xff, 0xc3, 0xd5, 0xed, 0x29, 0xc8, 0x34, 0x68, 0x30, 0x82, 0x8d, 0xc1, 0xf3, + 0x5e, 0xdb, 0xd4, 0x3a, 0x5f, 0xb5, 0x8e, 0xb4, 0x03, 0xf4, 0x1e, 0xae, 0x01, 0x30, 0xce, 0x5e, + 0xab, 0xaf, 0xed, 0x23, 0x69, 0xa6, 0xd1, 0xea, 0x69, 0xe6, 0xd3, 0xf6, 0x73, 0x94, 0xc3, 0xb7, + 0xa0, 0xc2, 0x38, 0xdd, 0xd6, 0xf1, 0xe0, 0xc9, 0x2e, 0xca, 0x37, 0x3e, 0x85, 0x9c, 0xe6, 0x53, + 0x43, 0xad, 0x93, 0x01, 0xda, 0x00, 0x45, 0xeb, 0x98, 0xbf, 0x3d, 0x6e, 0x1b, 0xb4, 0x46, 0x56, + 0xa1, 0xac, 0x75, 0xcc, 0x27, 0xed, 0xd6, 0x41, 0xdb, 0x40, 0xb9, 0xc6, 0x37, 0x20, 0x53, 0x07, + 0x53, 0xf4, 0x2f, 0x8f, 0xba, 0x27, 0x19, 0xb3, 0xdb, 0x50, 0xe5, 0x9c, 0x67, 0xbd, 0x23, 0x6d, + 0x5f, 0x1b, 0x20, 0x69, 0xc6, 0xea, 0xb5, 0xfa, 0xfd, 0x93, 0xae, 0x71, 0x80, 0x72, 0x78, 0x13, + 0x10, 0x63, 0xb5, 0x7a, 0x54, 0xab, 0x35, 0xd0, 0xba, 0x1d, 0x94, 0x9f, 0x73, 0xf7, 0xf7, 0xdb, + 0xfd, 0xbe, 0xb9, 0xdf, 0x3d, 0x68, 0x23, 0xb9, 0xf1, 0xaf, 0xdc, 0xbc, 0xda, 0x64, 0xde, 0xe7, + 0xf8, 0x4f, 0x52, 0xe6, 0xcb, 0x62, 0x38, 0x17, 0x88, 0xd2, 0x73, 0xfc, 0x26, 0x8f, 0xff, 0x65, + 0x3c, 0xee, 0xdc, 0xd9, 0x27, 0xc7, 0x8c, 0xa4, 0xfe, 0x09, 0xa8, 0x4b, 0x0c, 0x98, 0xd7, 0x68, + 0x0f, 0x64, 0x41, 0x27, 0x3e, 0x21, 0x71, 0xa2, 0xfe, 0x9d, 0xb4, 0xd4, 0xe4, 0x55, 0x11, 0xf2, + 0x72, 0x31, 0x42, 0xde, 0xfa, 0xde, 0xae, 0x05, 0xd8, 0x5f, 0x24, 0x7a, 0xad, 0x66, 0xb9, 0xd2, + 0xcb, 0x6e, 0xa0, 0xb2, 0x4e, 0x7d, 0x61, 0xf6, 0xfc, 0x87, 0x1f, 0x9e, 0xd8, 0xfc, 0xe7, 0x00, + 0x73, 0xe6, 0x3a, 0x4f, 0xdc, 0xbd, 0xfd, 0xdf, 0xb5, 0xc6, 0x4e, 0x7c, 0x96, 0x9c, 0x36, 0xed, + 0xc0, 0xdb, 0xa1, 0x0b, 0x79, 0x4c, 0xec, 0x20, 0x9a, 0x46, 0x31, 0x11, 0xa4, 0x58, 0xd7, 0xce, + 0xab, 0xff, 0x8e, 0x38, 0x2d, 0x32, 0xd9, 0x67, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xbc, + 0xdd, 0xdd, 0xb3, 0x18, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 83cb564fa58..3dcac4d99ff 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -84,8 +84,9 @@ message Response { Schema schema = 2; // field 3 is reserved for 'headers'. reserved 3; - // field 3 is reserved for 'example'. - reserved 4; + // `Examples` gives per-mimetype response examples. + // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object + map examples = 4; map extensions = 5; } From b4a970d3fada3ebec7296e84782e068ca794d113 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 10 Feb 2020 12:38:22 +0000 Subject: [PATCH 0257/1518] protoc-gen-swagger: add default error response Adds a "default" error entry to all responses in the swagger definitions. Fixes #1122 --- Makefile | 2 +- examples/clients/abe/BUILD.bazel | 2 + examples/clients/abe/api/swagger.yaml | 160 ++++++++++++++ .../abe/api_a_bit_of_everything_service.go | 198 ++++++++++++++++++ .../abe/api_camel_case_service_name.go | 11 + examples/clients/abe/api_echo_rpc.go | 33 +++ examples/clients/abe/model_protobuf_any.go | 19 ++ examples/clients/abe/model_runtime_error.go | 18 ++ examples/clients/echo/BUILD.bazel | 2 + examples/clients/echo/api/swagger.yaml | 100 +++++++++ examples/clients/echo/api_echo_service.go | 77 +++++++ examples/clients/echo/model_protobuf_any.go | 18 ++ examples/clients/echo/model_runtime_error.go | 17 ++ examples/clients/responsebody/BUILD.bazel | 2 + .../clients/responsebody/api/swagger.yaml | 84 ++++++++ .../responsebody/api_response_body_service.go | 33 +++ .../clients/responsebody/docs/ProtobufAny.md | 11 + .../clients/responsebody/docs/RuntimeError.md | 13 ++ .../responsebody/model_protobuf_any.go | 18 ++ .../responsebody/model_runtime_error.go | 17 ++ examples/clients/unannotatedecho/BUILD.bazel | 2 + .../clients/unannotatedecho/api/swagger.yaml | 88 ++++++++ .../api_unannotated_echo_service.go | 44 ++++ .../unannotatedecho/model_protobuf_any.go | 18 ++ .../unannotatedecho/model_runtime_error.go | 17 ++ .../a_bit_of_everything.swagger.json | 168 +++++++++++++++ .../proto/examplepb/echo_service.swagger.json | 78 +++++++ .../response_body_service.swagger.json | 54 +++++ examples/proto/examplepb/stream.swagger.json | 39 ++++ .../unannotated_echo_service.swagger.json | 60 ++++++ .../examplepb/use_go_template.swagger.json | 48 +++++ .../proto/examplepb/wrappers.swagger.json | 102 +++++++++ internal/BUILD.bazel | 2 +- internal/errors.pb.go | 189 +++++++++++++++++ internal/errors.proto | 26 +++ internal/stream_chunk.pb.go | 119 ----------- internal/stream_chunk.proto | 15 -- protoc-gen-swagger/genswagger/template.go | 31 ++- .../genswagger/template_test.go | 2 +- runtime/errors.go | 20 +- 40 files changed, 1796 insertions(+), 161 deletions(-) create mode 100644 examples/clients/abe/model_protobuf_any.go create mode 100644 examples/clients/abe/model_runtime_error.go create mode 100644 examples/clients/echo/model_protobuf_any.go create mode 100644 examples/clients/echo/model_runtime_error.go create mode 100644 examples/clients/responsebody/docs/ProtobufAny.md create mode 100644 examples/clients/responsebody/docs/RuntimeError.md create mode 100644 examples/clients/responsebody/model_protobuf_any.go create mode 100644 examples/clients/responsebody/model_runtime_error.go create mode 100644 examples/clients/unannotatedecho/model_protobuf_any.go create mode 100644 examples/clients/unannotatedecho/model_runtime_error.go create mode 100644 internal/errors.pb.go create mode 100644 internal/errors.proto delete mode 100644 internal/stream_chunk.pb.go delete mode 100644 internal/stream_chunk.proto diff --git a/Makefile b/Makefile index eb31aa6d714..bd641d17240 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ SWAGGER_PLUGIN_FLAGS?= GOOGLEAPIS_DIR=third_party/googleapis OUTPUT_DIR=_output -RUNTIME_PROTO=internal/stream_chunk.proto +RUNTIME_PROTO=internal/errors.proto RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto diff --git a/examples/clients/abe/BUILD.bazel b/examples/clients/abe/BUILD.bazel index d64c856782d..a54d462444e 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/clients/abe/BUILD.bazel @@ -20,7 +20,9 @@ go_library( "model_message_path_enum_nested_path_enum.go", "model_nested_deep_enum.go", "model_pathenum_path_enum.go", + "model_protobuf_any.go", "model_protobuf_field_mask.go", + "model_runtime_error.go", "model_sub_string_message.go", "response.go", ], diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml index 91859be58e5..8c234914da2 100644 --- a/examples/clients/abe/api/swagger.yaml +++ b/examples/clients/abe/api/swagger.yaml @@ -59,6 +59,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/echo/{value}: get: tags: @@ -97,6 +101,10 @@ paths: description: "Returned when the resource is temporarily unavailable." schema: {} x-number: 100 + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -384,6 +392,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/params/get/{single_nested.name}: get: tags: @@ -675,6 +687,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/params/post/{string_value}: post: tags: @@ -710,6 +726,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/query/{uuid}: get: tags: @@ -1007,6 +1027,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" security: [] externalDocs: description: "Find out more about GetQuery" @@ -1161,6 +1185,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/{single_nested.name}: post: tags: @@ -1197,6 +1225,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/a_bit_of_everything/{uuid}: get: tags: @@ -1226,6 +1258,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" put: tags: - "ABitOfEverythingService" @@ -1259,6 +1295,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" delete: tags: - "ABitOfEverythingService" @@ -1286,6 +1326,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" security: - ApiKeyAuth: [] OAuth2: @@ -1479,6 +1523,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/a_bit_of_everything/{abe.uuid}: put: tags: @@ -1513,6 +1561,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" patch: tags: - "ABitOfEverythingService" @@ -1546,6 +1598,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/echo: get: tags: @@ -1585,6 +1641,10 @@ paths: description: "Returned when the resource is temporarily unavailable." schema: {} x-number: 100 + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -1626,6 +1686,10 @@ paths: description: "Returned when the resource is temporarily unavailable." schema: {} x-number: 100 + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -1652,6 +1716,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/errorwithdetails: get: tags: @@ -1675,6 +1743,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/postwithemptybody/{name}: post: tags: @@ -1709,6 +1781,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/timeout: get: tags: @@ -1732,6 +1808,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/withbody/{id}: post: tags: @@ -1766,6 +1846,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2a/example/a_bit_of_everything/{abe.uuid}: patch: tags: @@ -1800,6 +1884,10 @@ paths: description: "I'm a teapot." schema: $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" securityDefinitions: ApiKeyAuth: type: "apiKey" @@ -2110,6 +2198,64 @@ definitions: - "ABC" - "DEF" default: "ABC" + protobufAny: + type: "object" + properties: + type_url: + type: "string" + description: "A URL/resource name that uniquely identifies the type of the\ + \ serialized\nprotocol buffer message. This string must contain at least\n\ + one \"/\" character. The last segment of the URL's path must represent\n\ + the fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\ + \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\ + \nIn practice, teams usually precompile into the binary all types that they\n\ + expect it to use in the context of Any. However, for URLs which use the\n\ + scheme `http`, `https`, or no scheme, one can optionally set up a type\n\ + server that maps type URLs to message definitions as follows:\n\n* If no\ + \ scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must\ + \ yield a [google.protobuf.Type][]\n value in binary format, or produce\ + \ an error.\n* Applications are allowed to cache lookup results based on\ + \ the\n URL, or have them precompiled into a binary to avoid any\n lookup.\ + \ Therefore, binary compatibility needs to be preserved\n on changes to\ + \ types. (Use versioned type names to manage\n breaking changes.)\n\nNote:\ + \ this functionality is not currently available in the official\nprotobuf\ + \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ + \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ + \ with implementation specific semantics." + value: + type: "string" + format: "byte" + description: "Must be a valid serialized protocol buffer of the above specified\ + \ type." + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + description: "`Any` contains an arbitrary serialized protocol buffer message along\ + \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ + \ library provides support to pack/unpack Any values in the form\nof utility\ + \ functions or additional generated methods of the Any type.\n\nExample 1: Pack\ + \ and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n\ + \ ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack\ + \ and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n\ + \ ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n\ + \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ + \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ + \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ + \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ + \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ + \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ + \ URL and the unpack\nmethods only use the fully qualified type name after the\ + \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ + name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ + \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ + additional field `@type` which contains the type URL. Example:\n\n package\ + \ google.profile;\n message Person {\n string first_name = 1;\n \ + \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ + \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ + \ that representation will be embedded adding a field\n`value` which holds the\ + \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ + \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ + \ \"value\": \"1.212s\"\n }" protobufFieldMask: type: "object" properties: @@ -2193,6 +2339,20 @@ definitions: \ API method which has a FieldMask type field in the\nrequest should verify\ \ the included field paths, and return an\n`INVALID_ARGUMENT` error if any path\ \ is duplicated or unmappable." + runtimeError: + type: "object" + properties: + error: + type: "string" + code: + type: "integer" + format: "int32" + message: + type: "string" + details: + type: "array" + items: + $ref: "#/definitions/protobufAny" subStringMessage: type: "object" properties: diff --git a/examples/clients/abe/api_a_bit_of_everything_service.go b/examples/clients/abe/api_a_bit_of_everything_service.go index 2bd1d972c20..f5d1759381e 100644 --- a/examples/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/clients/abe/api_a_bit_of_everything_service.go @@ -317,6 +317,17 @@ func (a *ABitOfEverythingServiceApiService) CheckGetQueryParams(ctx context.Cont return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -613,6 +624,17 @@ func (a *ABitOfEverythingServiceApiService) CheckNestedEnumGetQueryParams(ctx co return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -750,6 +772,17 @@ func (a *ABitOfEverythingServiceApiService) CheckPostQueryParams(ctx context.Con return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -921,6 +954,17 @@ func (a *ABitOfEverythingServiceApiService) Create(ctx context.Context, floatVal return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1056,6 +1100,17 @@ func (a *ABitOfEverythingServiceApiService) CreateBody(ctx context.Context, body return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1193,6 +1248,17 @@ func (a *ABitOfEverythingServiceApiService) DeepPathEcho(ctx context.Context, si return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1327,6 +1393,17 @@ func (a *ABitOfEverythingServiceApiService) Delete(ctx context.Context, uuid str return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1459,6 +1536,17 @@ func (a *ABitOfEverythingServiceApiService) ErrorWithDetails(ctx context.Context return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1596,6 +1684,17 @@ func (a *ABitOfEverythingServiceApiService) GetMessageWithBody(ctx context.Conte return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -1884,6 +1983,17 @@ func (a *ABitOfEverythingServiceApiService) GetQuery(ctx context.Context, uuid s return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2096,6 +2206,17 @@ func (a *ABitOfEverythingServiceApiService) GetRepeatedQuery(ctx context.Context return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2230,6 +2351,17 @@ func (a *ABitOfEverythingServiceApiService) Lookup(ctx context.Context, uuid str return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2367,6 +2499,17 @@ func (a *ABitOfEverythingServiceApiService) PostWithEmptyBody(ctx context.Contex return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2499,6 +2642,17 @@ func (a *ABitOfEverythingServiceApiService) Timeout(ctx context.Context) (interf return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2636,6 +2790,17 @@ func (a *ABitOfEverythingServiceApiService) Update(ctx context.Context, uuid str return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2773,6 +2938,17 @@ func (a *ABitOfEverythingServiceApiService) UpdateV2(ctx context.Context, abeUui return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -2910,6 +3086,17 @@ func (a *ABitOfEverythingServiceApiService) UpdateV22(ctx context.Context, abeUu return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -3047,6 +3234,17 @@ func (a *ABitOfEverythingServiceApiService) UpdateV23(ctx context.Context, abeUu return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/abe/api_camel_case_service_name.go b/examples/clients/abe/api_camel_case_service_name.go index 80d867e660c..8a12b878ef7 100644 --- a/examples/clients/abe/api_camel_case_service_name.go +++ b/examples/clients/abe/api_camel_case_service_name.go @@ -151,6 +151,17 @@ func (a *CamelCaseServiceNameApiService) Empty(ctx context.Context) (interface{} return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/abe/api_echo_rpc.go b/examples/clients/abe/api_echo_rpc.go index 1dab0dc55f0..e8979f37579 100644 --- a/examples/clients/abe/api_echo_rpc.go +++ b/examples/clients/abe/api_echo_rpc.go @@ -167,6 +167,17 @@ func (a *EchoRpcApiService) Echo(ctx context.Context, value string) (SubStringMe return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -314,6 +325,17 @@ func (a *EchoRpcApiService) Echo2(ctx context.Context, body string) (SubStringMe return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -468,6 +490,17 @@ func (a *EchoRpcApiService) Echo3(ctx context.Context, localVarOptionals *Echo3O return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/abe/model_protobuf_any.go b/examples/clients/abe/model_protobuf_any.go new file mode 100644 index 00000000000..f3e536a4ab5 --- /dev/null +++ b/examples/clients/abe/model_protobuf_any.go @@ -0,0 +1,19 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +type ProtobufAny struct { + // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + TypeUrl string `json:"type_url,omitempty"` + // Must be a valid serialized protocol buffer of the above specified type. + Value string `json:"value,omitempty"` +} diff --git a/examples/clients/abe/model_runtime_error.go b/examples/clients/abe/model_runtime_error.go new file mode 100644 index 00000000000..9674e976dc7 --- /dev/null +++ b/examples/clients/abe/model_runtime_error.go @@ -0,0 +1,18 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +type RuntimeError struct { + Error_ string `json:"error,omitempty"` + Code int32 `json:"code,omitempty"` + Message string `json:"message,omitempty"` + Details []ProtobufAny `json:"details,omitempty"` +} diff --git a/examples/clients/echo/BUILD.bazel b/examples/clients/echo/BUILD.bazel index 31ac6d56986..5700dd477c1 100644 --- a/examples/clients/echo/BUILD.bazel +++ b/examples/clients/echo/BUILD.bazel @@ -10,6 +10,8 @@ go_library( "configuration.go", "model_examplepb_embedded.go", "model_examplepb_simple_message.go", + "model_protobuf_any.go", + "model_runtime_error.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo", diff --git a/examples/clients/echo/api/swagger.yaml b/examples/clients/echo/api/swagger.yaml index 9d28a1ab99b..7df1b8731c5 100644 --- a/examples/clients/echo/api/swagger.yaml +++ b/examples/clients/echo/api/swagger.yaml @@ -28,6 +28,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo/{id}/{num}: get: tags: @@ -99,6 +103,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo/{id}/{num}/{lang}: get: tags: @@ -169,6 +177,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo1/{id}/{line_num}/{status.note}: get: tags: @@ -233,6 +245,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo2/{no.note}: get: tags: @@ -299,6 +315,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo_body: post: tags: @@ -317,6 +337,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo_delete: delete: tags: @@ -389,6 +413,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" definitions: examplepbEmbedded: type: "object" @@ -436,3 +464,75 @@ definitions: status: note: "note" progress: "progress" + protobufAny: + type: "object" + properties: + type_url: + type: "string" + description: "A URL/resource name that uniquely identifies the type of the\ + \ serialized\nprotocol buffer message. This string must contain at least\n\ + one \"/\" character. The last segment of the URL's path must represent\n\ + the fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\ + \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\ + \nIn practice, teams usually precompile into the binary all types that they\n\ + expect it to use in the context of Any. However, for URLs which use the\n\ + scheme `http`, `https`, or no scheme, one can optionally set up a type\n\ + server that maps type URLs to message definitions as follows:\n\n* If no\ + \ scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must\ + \ yield a [google.protobuf.Type][]\n value in binary format, or produce\ + \ an error.\n* Applications are allowed to cache lookup results based on\ + \ the\n URL, or have them precompiled into a binary to avoid any\n lookup.\ + \ Therefore, binary compatibility needs to be preserved\n on changes to\ + \ types. (Use versioned type names to manage\n breaking changes.)\n\nNote:\ + \ this functionality is not currently available in the official\nprotobuf\ + \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ + \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ + \ with implementation specific semantics." + value: + type: "string" + format: "byte" + description: "Must be a valid serialized protocol buffer of the above specified\ + \ type." + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + description: "`Any` contains an arbitrary serialized protocol buffer message along\ + \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ + \ library provides support to pack/unpack Any values in the form\nof utility\ + \ functions or additional generated methods of the Any type.\n\nExample 1: Pack\ + \ and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n\ + \ ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack\ + \ and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n\ + \ ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n\ + \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ + \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ + \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ + \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ + \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ + \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ + \ URL and the unpack\nmethods only use the fully qualified type name after the\ + \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ + name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ + \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ + additional field `@type` which contains the type URL. Example:\n\n package\ + \ google.profile;\n message Person {\n string first_name = 1;\n \ + \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ + \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ + \ that representation will be embedded adding a field\n`value` which holds the\ + \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ + \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ + \ \"value\": \"1.212s\"\n }" + runtimeError: + type: "object" + properties: + error: + type: "string" + code: + type: "integer" + format: "int32" + message: + type: "string" + details: + type: "array" + items: + $ref: "#/definitions/protobufAny" diff --git a/examples/clients/echo/api_echo_service.go b/examples/clients/echo/api_echo_service.go index 5e5b44b450d..40524345aa6 100644 --- a/examples/clients/echo/api_echo_service.go +++ b/examples/clients/echo/api_echo_service.go @@ -109,6 +109,17 @@ func (a *EchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbS return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -240,6 +251,17 @@ func (a *EchoServiceApiService) Echo2(ctx context.Context, id string, num string return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -368,6 +390,17 @@ func (a *EchoServiceApiService) Echo3(ctx context.Context, id string, num string return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -491,6 +524,17 @@ func (a *EchoServiceApiService) Echo4(ctx context.Context, id string, lineNum st return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -620,6 +664,17 @@ func (a *EchoServiceApiService) Echo5(ctx context.Context, noNote string, localV return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -709,6 +764,17 @@ func (a *EchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbSimp return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -845,6 +911,17 @@ func (a *EchoServiceApiService) EchoDelete(ctx context.Context, localVarOptional return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/echo/model_protobuf_any.go b/examples/clients/echo/model_protobuf_any.go new file mode 100644 index 00000000000..198cda747f2 --- /dev/null +++ b/examples/clients/echo/model_protobuf_any.go @@ -0,0 +1,18 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +type ProtobufAny struct { + // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + TypeUrl string `json:"type_url,omitempty"` + // Must be a valid serialized protocol buffer of the above specified type. + Value string `json:"value,omitempty"` +} diff --git a/examples/clients/echo/model_runtime_error.go b/examples/clients/echo/model_runtime_error.go new file mode 100644 index 00000000000..836afd7ac6b --- /dev/null +++ b/examples/clients/echo/model_runtime_error.go @@ -0,0 +1,17 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +type RuntimeError struct { + Error_ string `json:"error,omitempty"` + Code int32 `json:"code,omitempty"` + Message string `json:"message,omitempty"` + Details []ProtobufAny `json:"details,omitempty"` +} diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/clients/responsebody/BUILD.bazel index f5fb6a134ad..cf94bfa564a 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/clients/responsebody/BUILD.bazel @@ -11,7 +11,9 @@ go_library( "model_examplepb_repeated_response_strings.go", "model_examplepb_response_body_out.go", "model_examplepb_response_body_out_response.go", + "model_protobuf_any.go", "model_response_response_type.go", + "model_runtime_error.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", diff --git a/examples/clients/responsebody/api/swagger.yaml b/examples/clients/responsebody/api/swagger.yaml index b94a7273d45..30d7604c7ff 100644 --- a/examples/clients/responsebody/api/swagger.yaml +++ b/examples/clients/responsebody/api/swagger.yaml @@ -26,6 +26,10 @@ paths: type: "array" items: $ref: "#/definitions/examplepbRepeatedResponseBodyOutResponse" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /responsebody/{data}: get: tags: @@ -42,6 +46,10 @@ paths: description: "" schema: $ref: "#/definitions/examplepbResponseBodyOutResponse" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /responsestrings/{data}: get: tags: @@ -60,6 +68,10 @@ paths: type: "array" items: type: "string" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" definitions: ResponseResponseType: type: "string" @@ -105,3 +117,75 @@ definitions: type: "string" example: data: "data" + protobufAny: + type: "object" + properties: + type_url: + type: "string" + description: "A URL/resource name that uniquely identifies the type of the\ + \ serialized\nprotocol buffer message. This string must contain at least\n\ + one \"/\" character. The last segment of the URL's path must represent\n\ + the fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\ + \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\ + \nIn practice, teams usually precompile into the binary all types that they\n\ + expect it to use in the context of Any. However, for URLs which use the\n\ + scheme `http`, `https`, or no scheme, one can optionally set up a type\n\ + server that maps type URLs to message definitions as follows:\n\n* If no\ + \ scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must\ + \ yield a [google.protobuf.Type][]\n value in binary format, or produce\ + \ an error.\n* Applications are allowed to cache lookup results based on\ + \ the\n URL, or have them precompiled into a binary to avoid any\n lookup.\ + \ Therefore, binary compatibility needs to be preserved\n on changes to\ + \ types. (Use versioned type names to manage\n breaking changes.)\n\nNote:\ + \ this functionality is not currently available in the official\nprotobuf\ + \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ + \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ + \ with implementation specific semantics." + value: + type: "string" + format: "byte" + description: "Must be a valid serialized protocol buffer of the above specified\ + \ type." + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + description: "`Any` contains an arbitrary serialized protocol buffer message along\ + \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ + \ library provides support to pack/unpack Any values in the form\nof utility\ + \ functions or additional generated methods of the Any type.\n\nExample 1: Pack\ + \ and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n\ + \ ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack\ + \ and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n\ + \ ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n\ + \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ + \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ + \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ + \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ + \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ + \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ + \ URL and the unpack\nmethods only use the fully qualified type name after the\ + \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ + name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ + \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ + additional field `@type` which contains the type URL. Example:\n\n package\ + \ google.profile;\n message Person {\n string first_name = 1;\n \ + \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ + \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ + \ that representation will be embedded adding a field\n`value` which holds the\ + \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ + \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ + \ \"value\": \"1.212s\"\n }" + runtimeError: + type: "object" + properties: + error: + type: "string" + code: + type: "integer" + format: "int32" + message: + type: "string" + details: + type: "array" + items: + $ref: "#/definitions/protobufAny" diff --git a/examples/clients/responsebody/api_response_body_service.go b/examples/clients/responsebody/api_response_body_service.go index 4d534a3867e..575d8b40eb4 100644 --- a/examples/clients/responsebody/api_response_body_service.go +++ b/examples/clients/responsebody/api_response_body_service.go @@ -107,6 +107,17 @@ func (a *ResponseBodyServiceApiService) GetResponseBody(ctx context.Context, dat return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -195,6 +206,17 @@ func (a *ResponseBodyServiceApiService) ListResponseBodies(ctx context.Context, return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -283,6 +305,17 @@ func (a *ResponseBodyServiceApiService) ListResponseStrings(ctx context.Context, return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/responsebody/docs/ProtobufAny.md b/examples/clients/responsebody/docs/ProtobufAny.md new file mode 100644 index 00000000000..50aaf9e772b --- /dev/null +++ b/examples/clients/responsebody/docs/ProtobufAny.md @@ -0,0 +1,11 @@ +# ProtobufAny + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**TypeUrl** | **string** | A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. | [optional] [default to null] +**Value** | **string** | Must be a valid serialized protocol buffer of the above specified type. | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/docs/RuntimeError.md b/examples/clients/responsebody/docs/RuntimeError.md new file mode 100644 index 00000000000..664dd90b514 --- /dev/null +++ b/examples/clients/responsebody/docs/RuntimeError.md @@ -0,0 +1,13 @@ +# RuntimeError + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Error_** | **string** | | [optional] [default to null] +**Code** | **int32** | | [optional] [default to null] +**Message** | **string** | | [optional] [default to null] +**Details** | [**[]ProtobufAny**](protobufAny.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/clients/responsebody/model_protobuf_any.go b/examples/clients/responsebody/model_protobuf_any.go new file mode 100644 index 00000000000..902926206f8 --- /dev/null +++ b/examples/clients/responsebody/model_protobuf_any.go @@ -0,0 +1,18 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +type ProtobufAny struct { + // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + TypeUrl string `json:"type_url,omitempty"` + // Must be a valid serialized protocol buffer of the above specified type. + Value string `json:"value,omitempty"` +} diff --git a/examples/clients/responsebody/model_runtime_error.go b/examples/clients/responsebody/model_runtime_error.go new file mode 100644 index 00000000000..a7f7a1d0569 --- /dev/null +++ b/examples/clients/responsebody/model_runtime_error.go @@ -0,0 +1,17 @@ +/* + * examples/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +type RuntimeError struct { + Error_ string `json:"error,omitempty"` + Code int32 `json:"code,omitempty"` + Message string `json:"message,omitempty"` + Details []ProtobufAny `json:"details,omitempty"` +} diff --git a/examples/clients/unannotatedecho/BUILD.bazel b/examples/clients/unannotatedecho/BUILD.bazel index 06348263dc7..f34a3fac4e0 100644 --- a/examples/clients/unannotatedecho/BUILD.bazel +++ b/examples/clients/unannotatedecho/BUILD.bazel @@ -9,6 +9,8 @@ go_library( "client.go", "configuration.go", "model_examplepb_unannotated_simple_message.go", + "model_protobuf_any.go", + "model_runtime_error.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho", diff --git a/examples/clients/unannotatedecho/api/swagger.yaml b/examples/clients/unannotatedecho/api/swagger.yaml index 3a439d45a10..da2fb50e598 100644 --- a/examples/clients/unannotatedecho/api/swagger.yaml +++ b/examples/clients/unannotatedecho/api/swagger.yaml @@ -31,6 +31,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo/{id}/{num}: get: tags: @@ -62,6 +66,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo_body: post: tags: @@ -80,6 +88,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v1/example/echo_delete: delete: tags: @@ -112,6 +124,10 @@ paths: description: "A successful response." schema: $ref: "#/definitions/examplepbUnannotatedSimpleMessage" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" definitions: examplepbUnannotatedSimpleMessage: type: "object" @@ -130,3 +146,75 @@ definitions: duration: "duration" num: "num" id: "id" + protobufAny: + type: "object" + properties: + type_url: + type: "string" + description: "A URL/resource name that uniquely identifies the type of the\ + \ serialized\nprotocol buffer message. This string must contain at least\n\ + one \"/\" character. The last segment of the URL's path must represent\n\ + the fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\ + \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\ + \nIn practice, teams usually precompile into the binary all types that they\n\ + expect it to use in the context of Any. However, for URLs which use the\n\ + scheme `http`, `https`, or no scheme, one can optionally set up a type\n\ + server that maps type URLs to message definitions as follows:\n\n* If no\ + \ scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must\ + \ yield a [google.protobuf.Type][]\n value in binary format, or produce\ + \ an error.\n* Applications are allowed to cache lookup results based on\ + \ the\n URL, or have them precompiled into a binary to avoid any\n lookup.\ + \ Therefore, binary compatibility needs to be preserved\n on changes to\ + \ types. (Use versioned type names to manage\n breaking changes.)\n\nNote:\ + \ this functionality is not currently available in the official\nprotobuf\ + \ release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\ + \nSchemes other than `http`, `https` (or the empty scheme) might be\nused\ + \ with implementation specific semantics." + value: + type: "string" + format: "byte" + description: "Must be a valid serialized protocol buffer of the above specified\ + \ type." + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + description: "`Any` contains an arbitrary serialized protocol buffer message along\ + \ with a\nURL that describes the type of the serialized message.\n\nProtobuf\ + \ library provides support to pack/unpack Any values in the form\nof utility\ + \ functions or additional generated methods of the Any type.\n\nExample 1: Pack\ + \ and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n\ + \ ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack\ + \ and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n\ + \ ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n\ + \ }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n\ + \ any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n\ + \ any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in\ + \ Go\n\n foo := &pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n\ + \ ...\n foo := &pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo);\ + \ err != nil {\n ...\n }\n\nThe pack methods provided by protobuf\ + \ library will by default use\n'type.googleapis.com/full.type.name' as the type\ + \ URL and the unpack\nmethods only use the fully qualified type name after the\ + \ last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n\ + name \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses\ + \ the regular\nrepresentation of the deserialized, embedded message, with an\n\ + additional field `@type` which contains the type URL. Example:\n\n package\ + \ google.profile;\n message Person {\n string first_name = 1;\n \ + \ string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\"\ + ,\n \"firstName\": ,\n \"lastName\": \n }\n\nIf\ + \ the embedded message type is well-known and has a custom JSON\nrepresentation,\ + \ that representation will be embedded adding a field\n`value` which holds the\ + \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ + \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ + \ \"value\": \"1.212s\"\n }" + runtimeError: + type: "object" + properties: + error: + type: "string" + code: + type: "integer" + format: "int32" + message: + type: "string" + details: + type: "array" + items: + $ref: "#/definitions/protobufAny" diff --git a/examples/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/clients/unannotatedecho/api_unannotated_echo_service.go index 7bbd4f9e92f..d864a7411e7 100644 --- a/examples/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/clients/unannotatedecho/api_unannotated_echo_service.go @@ -109,6 +109,17 @@ func (a *UnannotatedEchoServiceApiService) Echo(ctx context.Context, id string) return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -210,6 +221,17 @@ func (a *UnannotatedEchoServiceApiService) Echo2(ctx context.Context, id string, return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -299,6 +321,17 @@ func (a *UnannotatedEchoServiceApiService) EchoBody(ctx context.Context, body Ex return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } @@ -405,6 +438,17 @@ func (a *UnannotatedEchoServiceApiService) EchoDelete(ctx context.Context, local return localVarReturnValue, localVarHttpResponse, newErr } + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + return localVarReturnValue, localVarHttpResponse, newErr } diff --git a/examples/clients/unannotatedecho/model_protobuf_any.go b/examples/clients/unannotatedecho/model_protobuf_any.go new file mode 100644 index 00000000000..6959023a2ac --- /dev/null +++ b/examples/clients/unannotatedecho/model_protobuf_any.go @@ -0,0 +1,18 @@ +/* + * examples/proto/examplepb/unannotated_echo_service.proto + * + * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package unannotatedecho + +// `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } +type ProtobufAny struct { + // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. + TypeUrl string `json:"type_url,omitempty"` + // Must be a valid serialized protocol buffer of the above specified type. + Value string `json:"value,omitempty"` +} diff --git a/examples/clients/unannotatedecho/model_runtime_error.go b/examples/clients/unannotatedecho/model_runtime_error.go new file mode 100644 index 00000000000..30f7572025d --- /dev/null +++ b/examples/clients/unannotatedecho/model_runtime_error.go @@ -0,0 +1,17 @@ +/* + * examples/proto/examplepb/unannotated_echo_service.proto + * + * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package unannotatedecho + +type RuntimeError struct { + Error_ string `json:"error,omitempty"` + Code int32 `json:"code,omitempty"` + Message string `json:"message,omitempty"` + Details []ProtobufAny `json:"details,omitempty"` +} diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 033eb3e2f2c..61f298f170a 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -54,6 +54,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -109,6 +115,12 @@ "description": "Returned when the resource is temporarily unavailable.", "schema": {}, "x-number": 100 + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -154,6 +166,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -463,6 +481,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -778,6 +802,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -827,6 +857,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1157,6 +1193,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1338,6 +1380,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1388,6 +1436,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1427,6 +1481,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1476,6 +1536,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1525,6 +1591,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1755,6 +1827,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1802,6 +1880,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1863,6 +1947,12 @@ "description": "Returned when the resource is temporarily unavailable.", "schema": {}, "x-number": 100 + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1918,6 +2008,12 @@ "description": "Returned when the resource is temporarily unavailable.", "schema": {}, "x-number": 100 + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -1965,6 +2061,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "tags": [ @@ -1998,6 +2100,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "tags": [ @@ -2031,6 +2139,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -2080,6 +2194,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "tags": [ @@ -2113,6 +2233,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -2162,6 +2288,12 @@ "schema": { "$ref": "#/definitions/examplepbNumericEnum" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -2580,6 +2712,21 @@ ], "default": "ABC" }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, "protobufFieldMask": { "type": "object", "properties": { @@ -2594,6 +2741,27 @@ "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, "subStringMessage": { "type": "object", "properties": { diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/proto/examplepb/echo_service.swagger.json index 45187c3e463..f7b35c2ddee 100644 --- a/examples/proto/examplepb/echo_service.swagger.json +++ b/examples/proto/examplepb/echo_service.swagger.json @@ -23,6 +23,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -50,6 +56,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -130,6 +142,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -210,6 +228,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -284,6 +308,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -357,6 +387,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -384,6 +420,12 @@ "schema": { "$ref": "#/definitions/examplepbSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -498,6 +540,42 @@ } }, "description": "SimpleMessage represents a simple message sent to the Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/proto/examplepb/response_body_service.swagger.json index ea0ced6dcdb..50fa2d025c4 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/proto/examplepb/response_body_service.swagger.json @@ -23,6 +23,12 @@ "$ref": "#/definitions/examplepbRepeatedResponseBodyOutResponse" } } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -47,6 +53,12 @@ "schema": { "$ref": "#/definitions/examplepbResponseBodyOutResponse" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -74,6 +86,12 @@ "type": "string" } } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -149,6 +167,42 @@ "type": "string" } } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/proto/examplepb/stream.swagger.json index 84215a088c1..c4c696989a6 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/proto/examplepb/stream.swagger.json @@ -29,6 +29,12 @@ }, "title": "Stream result of examplepbABitOfEverything" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "tags": [ @@ -45,6 +51,12 @@ "schema": { "properties": {} } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -81,6 +93,12 @@ }, "title": "Stream result of subStringMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -359,6 +377,27 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, "runtimeStreamError": { "type": "object", "properties": { diff --git a/examples/proto/examplepb/unannotated_echo_service.swagger.json b/examples/proto/examplepb/unannotated_echo_service.swagger.json index 26dc292cc17..c33a67d98f6 100644 --- a/examples/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/proto/examplepb/unannotated_echo_service.swagger.json @@ -23,6 +23,12 @@ "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -50,6 +56,12 @@ "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -89,6 +101,12 @@ "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -116,6 +134,12 @@ "schema": { "$ref": "#/definitions/examplepbUnannotatedSimpleMessage" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -163,6 +187,42 @@ } }, "description": "UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service." + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/examples/proto/examplepb/use_go_template.swagger.json b/examples/proto/examplepb/use_go_template.swagger.json index 011b33aeaf7..c85ad10e119 100644 --- a/examples/proto/examplepb/use_go_template.swagger.json +++ b/examples/proto/examplepb/use_go_template.swagger.json @@ -22,6 +22,12 @@ "schema": { "$ref": "#/definitions/examplepbLoginReply" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -50,6 +56,12 @@ "schema": { "$ref": "#/definitions/examplepbLogoutReply" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -126,6 +138,42 @@ "title": "This is an array" } } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/proto/examplepb/wrappers.swagger.json index 7c7c8566bd6..b6a93601d36 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/proto/examplepb/wrappers.swagger.json @@ -20,6 +20,12 @@ "schema": { "$ref": "#/definitions/examplepbWrappers" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -47,6 +53,12 @@ "type": "boolean", "format": "boolean" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -75,6 +87,12 @@ "type": "string", "format": "byte" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -103,6 +121,12 @@ "type": "number", "format": "double" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -130,6 +154,12 @@ "schema": { "properties": {} } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -157,6 +187,12 @@ "type": "number", "format": "float" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -185,6 +221,12 @@ "type": "integer", "format": "int32" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -213,6 +255,12 @@ "type": "string", "format": "int64" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -240,6 +288,12 @@ "schema": { "type": "string" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -267,6 +321,12 @@ "type": "integer", "format": "int64" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -295,6 +355,12 @@ "type": "string", "format": "uint64" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -354,6 +420,42 @@ "format": "byte" } } + }, + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." + } + }, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel index 5f73042d6f6..5242751fb2d 100644 --- a/internal/BUILD.bazel +++ b/internal/BUILD.bazel @@ -6,7 +6,7 @@ package(default_visibility = ["//visibility:public"]) proto_library( name = "internal_proto", - srcs = ["stream_chunk.proto"], + srcs = ["errors.proto"], deps = ["@com_google_protobuf//:any_proto"], ) diff --git a/internal/errors.pb.go b/internal/errors.pb.go new file mode 100644 index 00000000000..61101d7177f --- /dev/null +++ b/internal/errors.pb.go @@ -0,0 +1,189 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: internal/errors.proto + +package internal + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +// Error is the generic error returned from unary RPCs. +type Error struct { + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + // This is to make the error more compatible with users that expect errors to be Status objects: + // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto + // It should be the exact same message as the Error field. + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Details []*any.Any `protobuf:"bytes,4,rep,name=details,proto3" json:"details,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Error) Reset() { *m = Error{} } +func (m *Error) String() string { return proto.CompactTextString(m) } +func (*Error) ProtoMessage() {} +func (*Error) Descriptor() ([]byte, []int) { + return fileDescriptor_9b093362ca6d1e03, []int{0} +} + +func (m *Error) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Error.Unmarshal(m, b) +} +func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Error.Marshal(b, m, deterministic) +} +func (m *Error) XXX_Merge(src proto.Message) { + xxx_messageInfo_Error.Merge(m, src) +} +func (m *Error) XXX_Size() int { + return xxx_messageInfo_Error.Size(m) +} +func (m *Error) XXX_DiscardUnknown() { + xxx_messageInfo_Error.DiscardUnknown(m) +} + +var xxx_messageInfo_Error proto.InternalMessageInfo + +func (m *Error) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +func (m *Error) GetCode() int32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *Error) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *Error) GetDetails() []*any.Any { + if m != nil { + return m.Details + } + return nil +} + +// StreamError is a response type which is returned when +// streaming rpc returns an error. +type StreamError struct { + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` + Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StreamError) Reset() { *m = StreamError{} } +func (m *StreamError) String() string { return proto.CompactTextString(m) } +func (*StreamError) ProtoMessage() {} +func (*StreamError) Descriptor() ([]byte, []int) { + return fileDescriptor_9b093362ca6d1e03, []int{1} +} + +func (m *StreamError) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StreamError.Unmarshal(m, b) +} +func (m *StreamError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StreamError.Marshal(b, m, deterministic) +} +func (m *StreamError) XXX_Merge(src proto.Message) { + xxx_messageInfo_StreamError.Merge(m, src) +} +func (m *StreamError) XXX_Size() int { + return xxx_messageInfo_StreamError.Size(m) +} +func (m *StreamError) XXX_DiscardUnknown() { + xxx_messageInfo_StreamError.DiscardUnknown(m) +} + +var xxx_messageInfo_StreamError proto.InternalMessageInfo + +func (m *StreamError) GetGrpcCode() int32 { + if m != nil { + return m.GrpcCode + } + return 0 +} + +func (m *StreamError) GetHttpCode() int32 { + if m != nil { + return m.HttpCode + } + return 0 +} + +func (m *StreamError) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *StreamError) GetHttpStatus() string { + if m != nil { + return m.HttpStatus + } + return "" +} + +func (m *StreamError) GetDetails() []*any.Any { + if m != nil { + return m.Details + } + return nil +} + +func init() { + proto.RegisterType((*Error)(nil), "grpc.gateway.runtime.Error") + proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError") +} + +func init() { proto.RegisterFile("internal/errors.proto", fileDescriptor_9b093362ca6d1e03) } + +var fileDescriptor_9b093362ca6d1e03 = []byte{ + // 252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xc4, 0x30, + 0x10, 0x86, 0x89, 0xbb, 0x75, 0xdb, 0xe9, 0x2d, 0x54, 0x88, 0xee, 0xc1, 0xb2, 0xa7, 0x9e, 0x52, + 0xd0, 0x27, 0xd0, 0xc5, 0x17, 0xe8, 0xde, 0xbc, 0x2c, 0xd9, 0xdd, 0x31, 0x16, 0xda, 0xa4, 0x24, + 0x53, 0xa4, 0xf8, 0x56, 0x3e, 0xa1, 0x24, 0xa5, 0xb0, 0x27, 0xf1, 0xd6, 0xf9, 0xfb, 0xcf, 0x7c, + 0x1f, 0x81, 0xbb, 0xd6, 0x10, 0x3a, 0xa3, 0xba, 0x1a, 0x9d, 0xb3, 0xce, 0xcb, 0xc1, 0x59, 0xb2, + 0xbc, 0xd0, 0x6e, 0x38, 0x4b, 0xad, 0x08, 0xbf, 0xd4, 0x24, 0xdd, 0x68, 0xa8, 0xed, 0xf1, 0xe1, + 0x5e, 0x5b, 0xab, 0x3b, 0xac, 0x63, 0xe7, 0x34, 0x7e, 0xd4, 0xca, 0x4c, 0xf3, 0xc2, 0xee, 0x1b, + 0x92, 0xb7, 0x70, 0x80, 0x17, 0x90, 0xc4, 0x4b, 0x82, 0x95, 0xac, 0xca, 0x9a, 0x79, 0xe0, 0x1c, + 0xd6, 0x67, 0x7b, 0x41, 0x71, 0x53, 0xb2, 0x2a, 0x69, 0xe2, 0x37, 0x17, 0xb0, 0xe9, 0xd1, 0x7b, + 0xa5, 0x51, 0xac, 0x62, 0x77, 0x19, 0xb9, 0x84, 0xcd, 0x05, 0x49, 0xb5, 0x9d, 0x17, 0xeb, 0x72, + 0x55, 0xe5, 0x4f, 0x85, 0x9c, 0xc9, 0x72, 0x21, 0xcb, 0x17, 0x33, 0x35, 0x4b, 0x69, 0xf7, 0xc3, + 0x20, 0x3f, 0x90, 0x43, 0xd5, 0xcf, 0x0e, 0x5b, 0xc8, 0x82, 0xff, 0x31, 0x22, 0x59, 0x44, 0xa6, + 0x21, 0xd8, 0x07, 0xec, 0x16, 0xb2, 0x4f, 0xa2, 0xe1, 0x78, 0xe5, 0x93, 0x86, 0x60, 0xff, 0xb7, + 0xd3, 0x23, 0xe4, 0x71, 0xcd, 0x93, 0xa2, 0x31, 0x78, 0x85, 0xbf, 0x10, 0xa2, 0x43, 0x4c, 0xae, + 0xa5, 0x93, 0x7f, 0x48, 0xbf, 0xc2, 0x7b, 0xba, 0xbc, 0xfd, 0xe9, 0x36, 0x56, 0x9e, 0x7f, 0x03, + 0x00, 0x00, 0xff, 0xff, 0xde, 0x72, 0x6b, 0x83, 0x8e, 0x01, 0x00, 0x00, +} diff --git a/internal/errors.proto b/internal/errors.proto new file mode 100644 index 00000000000..4fb212c6b69 --- /dev/null +++ b/internal/errors.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package grpc.gateway.runtime; +option go_package = "internal"; + +import "google/protobuf/any.proto"; + +// Error is the generic error returned from unary RPCs. +message Error { + string error = 1; + // This is to make the error more compatible with users that expect errors to be Status objects: + // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto + // It should be the exact same message as the Error field. + int32 code = 2; + string message = 3; + repeated google.protobuf.Any details = 4; +} + +// StreamError is a response type which is returned when +// streaming rpc returns an error. +message StreamError { + int32 grpc_code = 1; + int32 http_code = 2; + string message = 3; + string http_status = 4; + repeated google.protobuf.Any details = 5; +} diff --git a/internal/stream_chunk.pb.go b/internal/stream_chunk.pb.go deleted file mode 100644 index 1eca68e3350..00000000000 --- a/internal/stream_chunk.pb.go +++ /dev/null @@ -1,119 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: internal/stream_chunk.proto - -package internal - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -// StreamError is a response type which is returned when -// streaming rpc returns an error. -type StreamError struct { - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *StreamError) Reset() { *m = StreamError{} } -func (m *StreamError) String() string { return proto.CompactTextString(m) } -func (*StreamError) ProtoMessage() {} -func (*StreamError) Descriptor() ([]byte, []int) { - return fileDescriptor_9d15b670e96bbb5a, []int{0} -} - -func (m *StreamError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StreamError.Unmarshal(m, b) -} -func (m *StreamError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StreamError.Marshal(b, m, deterministic) -} -func (m *StreamError) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamError.Merge(m, src) -} -func (m *StreamError) XXX_Size() int { - return xxx_messageInfo_StreamError.Size(m) -} -func (m *StreamError) XXX_DiscardUnknown() { - xxx_messageInfo_StreamError.DiscardUnknown(m) -} - -var xxx_messageInfo_StreamError proto.InternalMessageInfo - -func (m *StreamError) GetGrpcCode() int32 { - if m != nil { - return m.GrpcCode - } - return 0 -} - -func (m *StreamError) GetHttpCode() int32 { - if m != nil { - return m.HttpCode - } - return 0 -} - -func (m *StreamError) GetMessage() string { - if m != nil { - return m.Message - } - return "" -} - -func (m *StreamError) GetHttpStatus() string { - if m != nil { - return m.HttpStatus - } - return "" -} - -func (m *StreamError) GetDetails() []*any.Any { - if m != nil { - return m.Details - } - return nil -} - -func init() { - proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError") -} - -func init() { proto.RegisterFile("internal/stream_chunk.proto", fileDescriptor_9d15b670e96bbb5a) } - -var fileDescriptor_9d15b670e96bbb5a = []byte{ - // 223 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x90, 0x41, 0x4e, 0xc3, 0x30, - 0x10, 0x45, 0x15, 0x4a, 0x69, 0x3b, 0xd9, 0x45, 0x5d, 0x18, 0xba, 0x20, 0x62, 0x95, 0x95, 0x23, - 0xc1, 0x09, 0x00, 0x71, 0x81, 0x74, 0xc7, 0xa6, 0x9a, 0x26, 0x83, 0x13, 0x91, 0xd8, 0xd1, 0x78, - 0x22, 0x94, 0x6b, 0x71, 0xc2, 0xca, 0x8e, 0xb2, 0xf4, 0x7b, 0x7f, 0xbe, 0xbe, 0x0c, 0xa7, 0xce, - 0x0a, 0xb1, 0xc5, 0xbe, 0xf4, 0xc2, 0x84, 0xc3, 0xa5, 0x6e, 0x27, 0xfb, 0xab, 0x47, 0x76, 0xe2, - 0xb2, 0xa3, 0xe1, 0xb1, 0xd6, 0x06, 0x85, 0xfe, 0x70, 0xd6, 0x3c, 0x59, 0xe9, 0x06, 0x7a, 0x7a, - 0x34, 0xce, 0x99, 0x9e, 0xca, 0x98, 0xb9, 0x4e, 0x3f, 0x25, 0xda, 0x79, 0x39, 0x78, 0xf9, 0x4f, - 0x20, 0x3d, 0xc7, 0x9e, 0x2f, 0x66, 0xc7, 0xd9, 0x09, 0x0e, 0xa1, 0xe2, 0x52, 0xbb, 0x86, 0x54, - 0x92, 0x27, 0xc5, 0xb6, 0xda, 0x07, 0xf0, 0xe9, 0x1a, 0x0a, 0xb2, 0x15, 0x19, 0x17, 0x79, 0xb7, - 0xc8, 0x00, 0xa2, 0x54, 0xb0, 0x1b, 0xc8, 0x7b, 0x34, 0xa4, 0x36, 0x79, 0x52, 0x1c, 0xaa, 0xf5, - 0x99, 0x3d, 0x43, 0x1a, 0xcf, 0xbc, 0xa0, 0x4c, 0x5e, 0xdd, 0x47, 0x0b, 0x01, 0x9d, 0x23, 0xc9, - 0x34, 0xec, 0x1a, 0x12, 0xec, 0x7a, 0xaf, 0xb6, 0xf9, 0xa6, 0x48, 0x5f, 0x8f, 0x7a, 0x59, 0xac, - 0xd7, 0xc5, 0xfa, 0xdd, 0xce, 0xd5, 0x1a, 0xfa, 0x80, 0xef, 0xfd, 0xfa, 0x09, 0xd7, 0x87, 0x18, - 0x79, 0xbb, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x7d, 0xa5, 0x18, 0x17, 0x01, 0x00, 0x00, -} diff --git a/internal/stream_chunk.proto b/internal/stream_chunk.proto deleted file mode 100644 index 55f42ce63ec..00000000000 --- a/internal/stream_chunk.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; -package grpc.gateway.runtime; -option go_package = "internal"; - -import "google/protobuf/any.proto"; - -// StreamError is a response type which is returned when -// streaming rpc returns an error. -message StreamError { - int32 grpc_code = 1; - int32 http_code = 2; - string message = 3; - string http_status = 4; - repeated google.protobuf.Any details = 5; -} diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 6b2b62eb38f..f7715c8a3ff 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -882,6 +882,15 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re Description: desc, Schema: responseSchema, }, + // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object + "default": swaggerResponseObject{ + Description: "An unexpected error response", + Schema: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg)), + }, + }, + }, }, } if bIdx == 0 { @@ -1034,14 +1043,24 @@ func applyTemplate(p param) (*swaggerObject, error) { panic(err) } + messages := messageMap{} + streamingMessages := messageMap{} + enums := enumMap{} + + // Add the error type to the message map + runtimeError, err := p.reg.LookupMsg(".grpc.gateway.runtime", "Error") + if err == nil { + messages[fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", p.reg)] = runtimeError + } else { + // just in case there is an error looking up runtimeError + glog.Error(err) + } + // Find all the service's messages and enumerations that are defined (recursively) // and write request, response and other custom (but referenced) types out as definition objects. - m := messageMap{} - ms := messageMap{} - e := enumMap{} - findServicesMessagesAndEnumerations(p.Services, p.reg, m, ms, e, requestResponseRefs) - renderMessagesAsDefinition(m, s.Definitions, p.reg, customRefs) - renderEnumerationsAsDefinition(e, s.Definitions, p.reg) + findServicesMessagesAndEnumerations(p.Services, p.reg, messages, streamingMessages, enums, requestResponseRefs) + renderMessagesAsDefinition(messages, s.Definitions, p.reg, customRefs) + renderEnumerationsAsDefinition(enums, s.Definitions, p.reg) // File itself might have some comments and metadata. packageProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 9c1f0b74c70..cda39688835 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -925,7 +925,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } // Only ExampleMessage must be present, not NestedMessage - if want, got, name := 3, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + if want, got, name := 4, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) } if _, ok := result.Paths["/v1/echo"].Post.Responses["200"]; !ok { diff --git a/runtime/errors.go b/runtime/errors.go index a36080713ce..0118ca0479d 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -5,11 +5,10 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/any" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "github.com/grpc-ecosystem/grpc-gateway/internal" ) // HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. @@ -65,21 +64,6 @@ var ( OtherErrorHandler = DefaultOtherErrorHandler ) -type errorBody struct { - Error string `protobuf:"bytes,100,name=error" json:"error"` - // This is to make the error more compatible with users that expect errors to be Status objects: - // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto - // It should be the exact same message as the Error field. - Code int32 `protobuf:"varint,1,name=code" json:"code"` - Message string `protobuf:"bytes,2,name=message" json:"message"` - Details []*any.Any `protobuf:"bytes,3,rep,name=details" json:"details,omitempty"` -} - -// Make this also conform to proto.Message for builtin JSONPb Marshaler -func (e *errorBody) Reset() { *e = errorBody{} } -func (e *errorBody) String() string { return proto.CompactTextString(e) } -func (*errorBody) ProtoMessage() {} - // DefaultHTTPError is the default implementation of HTTPError. // If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. // If otherwise, it replies with http.StatusInternalServerError. @@ -106,7 +90,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w } w.Header().Set("Content-Type", contentType) - body := &errorBody{ + body := &internal.Error{ Error: s.Message(), Message: s.Message(), Code: int32(s.Code()), From 4c2cec4158f65aebe0290d3bee883b13f7b07c6f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 11 Feb 2020 11:09:19 +0000 Subject: [PATCH 0258/1518] Generate changelog for 1.13.0 --- CHANGELOG.md | 21 +++++++++++++++++++++ Makefile | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 283628989cc..614f938ea25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## [v1.13.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.13.0) (2020-02-11) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.2...v1.13.0) + +**Implemented enhancements:** + +- \[Feature Request\] Custom Type conversion [\#754](https://github.com/grpc-ecosystem/grpc-gateway/issues/754) +- protoc-gen-swagger: add default error response [\#1127](https://github.com/grpc-ecosystem/grpc-gateway/pull/1127) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +**Closed issues:** + +- swagger: Prefix used in nested-field GET params does not respect json\_names\_for\_fields [\#1125](https://github.com/grpc-ecosystem/grpc-gateway/issues/1125) +- Generated spec missing grpc errors [\#1122](https://github.com/grpc-ecosystem/grpc-gateway/issues/1122) +- protoc-gen-swagger: Support for repeated custom message in url params [\#1119](https://github.com/grpc-ecosystem/grpc-gateway/issues/1119) +- protoc-gen-swagger: Support Response-specific examples [\#1117](https://github.com/grpc-ecosystem/grpc-gateway/issues/1117) + +**Merged pull requests:** + +- Fix \#1125: JSON-prefix nested-field params. [\#1126](https://github.com/grpc-ecosystem/grpc-gateway/pull/1126) ([jgiles](https://github.com/jgiles)) +- Fix \#1117: Support response examples. [\#1124](https://github.com/grpc-ecosystem/grpc-gateway/pull/1124) ([jgiles](https://github.com/jgiles)) + ## [v1.12.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.12.2) (2020-01-22) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.1...v1.12.2) @@ -29,6 +49,7 @@ **Merged pull requests:** +- Generate changelog for 1.12.2 [\#1120](https://github.com/grpc-ecosystem/grpc-gateway/pull/1120) ([johanbrandhorst](https://github.com/johanbrandhorst)) - docs: require Jekyll Github Token to be set [\#1118](https://github.com/grpc-ecosystem/grpc-gateway/pull/1118) ([johanbrandhorst](https://github.com/johanbrandhorst)) - fix: protoc-gen-swagger: get wrong second services method comments [\#1116](https://github.com/grpc-ecosystem/grpc-gateway/pull/1116) ([chinaran](https://github.com/chinaran)) - Bump rubyzip from 1.2.3 to 2.0.0 in /docs [\#1115](https://github.com/grpc-ecosystem/grpc-gateway/pull/1115) ([dependabot[bot]](https://github.com/apps/dependabot)) diff --git a/Makefile b/Makefile index bd641d17240..03766b669ee 100644 --- a/Makefile +++ b/Makefile @@ -203,7 +203,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.12.2 + --future-release=v1.13.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From c3048a02139600f60db5de5b5432e4650ac2da40 Mon Sep 17 00:00:00 2001 From: Nadir Boukeffa Date: Fri, 14 Feb 2020 10:59:16 +0100 Subject: [PATCH 0259/1518] Configure response content type at the method level (#1130) * Configure response content type at the method level This PR will add the possibility to configure the response content type at the method level. To do such the developer will have to set the `produces` property like in the following example. ``` rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) { option (google.api.http) = { get: "/v2/example/overwriteresponsecontenttype" }; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { produces: "application/text" }; } ``` * Fix build --- examples/clients/abe/api/swagger.yaml | 30 ++ .../abe/api_a_bit_of_everything_service.go | 143 +++++ .../proto/examplepb/a_bit_of_everything.pb.go | 488 ++++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 62 +++ .../proto/examplepb/a_bit_of_everything.proto | 9 + .../a_bit_of_everything.swagger.json | 42 ++ examples/server/BUILD.bazel | 1 + examples/server/a_bit_of_everything.go | 5 + protoc-gen-swagger/genswagger/template.go | 5 + protoc-gen-swagger/genswagger/types.go | 1 + 10 files changed, 563 insertions(+), 223 deletions(-) diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml index 8c234914da2..52ccf956d97 100644 --- a/examples/clients/abe/api/swagger.yaml +++ b/examples/clients/abe/api/swagger.yaml @@ -1747,6 +1747,36 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/runtimeError" + /v2/example/overwriteresponsecontenttype: + get: + tags: + - "ABitOfEverythingService" + operationId: "OverwriteResponseContentType" + produces: + - "application/text" + parameters: [] + responses: + 200: + description: "A successful response." + schema: + type: "string" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /v2/example/postwithemptybody/{name}: post: tags: diff --git a/examples/clients/abe/api_a_bit_of_everything_service.go b/examples/clients/abe/api_a_bit_of_everything_service.go index f5d1759381e..326be923b33 100644 --- a/examples/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/clients/abe/api_a_bit_of_everything_service.go @@ -2368,6 +2368,149 @@ func (a *ABitOfEverythingServiceApiService) Lookup(ctx context.Context, uuid str return localVarReturnValue, localVarHttpResponse, nil } +/* +ABitOfEverythingServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + +@return string +*/ +func (a *ABitOfEverythingServiceApiService) OverwriteResponseContentType(ctx context.Context) (string, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue string + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/overwriteresponsecontenttype" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/text"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 403 { + var v interface{} + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 404 { + var v string + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 418 { + var v ExamplepbNumericEnum + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/proto/examplepb/a_bit_of_everything.pb.go index 78a653b0adb..a1320ed9b51 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.go @@ -10,6 +10,7 @@ import ( duration "github.com/golang/protobuf/ptypes/duration" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" + wrappers "github.com/golang/protobuf/ptypes/wrappers" pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" @@ -820,229 +821,234 @@ func init() { } var fileDescriptor_3978364c010e812a = []byte{ - // 3552 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4d, 0x70, 0x1b, 0xc9, - 0x5e, 0xf7, 0x68, 0xfc, 0xd9, 0x8e, 0xbf, 0xda, 0x71, 0xe2, 0x28, 0xde, 0x75, 0x47, 0xc9, 0xbe, - 0x9d, 0xe8, 0x45, 0x1a, 0x7b, 0xec, 0xdd, 0x4d, 0xb4, 0xbc, 0xdd, 0x95, 0x6c, 0x27, 0xeb, 0x64, - 0xd7, 0xf1, 0x4e, 0xb2, 0x61, 0xc9, 0xdb, 0x3c, 0xd3, 0x92, 0x5a, 0xd6, 0xc4, 0x9a, 0xe9, 0x79, - 0x33, 0x3d, 0x8e, 0x15, 0x23, 0x78, 0x05, 0x14, 0x14, 0xbc, 0x9b, 0x1e, 0x1f, 0x05, 0xaf, 0xe0, - 0x42, 0x71, 0xa1, 0xde, 0x89, 0x2a, 0x4e, 0x54, 0xc1, 0x05, 0x4e, 0x1c, 0xa0, 0x16, 0x8a, 0xe2, - 0xc2, 0x09, 0xce, 0x5c, 0xa0, 0xb6, 0x8a, 0x03, 0x14, 0xd5, 0x3d, 0x33, 0xd2, 0xcc, 0x48, 0x8a, - 0xa3, 0x84, 0xda, 0xdd, 0xc3, 0x66, 0xba, 0xfb, 0xff, 0xf1, 0xfb, 0x77, 0xff, 0xfb, 0xff, 0xd1, - 0x32, 0xd0, 0xc8, 0x09, 0x36, 0xed, 0x06, 0x71, 0x55, 0xdb, 0xa1, 0x8c, 0xaa, 0xc1, 0xd0, 0x2e, - 0xab, 0xf8, 0xa0, 0x6c, 0xb0, 0x03, 0x5a, 0x3b, 0x20, 0xc7, 0xc4, 0x69, 0xb2, 0xba, 0x61, 0x1d, - 0xe6, 0x05, 0x0d, 0x5c, 0x3d, 0x74, 0xec, 0x4a, 0xfe, 0x10, 0x33, 0xf2, 0x0c, 0x37, 0xf3, 0xa1, - 0x80, 0x7c, 0x87, 0x35, 0xbd, 0x72, 0x48, 0xe9, 0x61, 0x83, 0xa8, 0xd8, 0x36, 0x54, 0x6c, 0x59, - 0x94, 0x61, 0x66, 0x50, 0xcb, 0xf5, 0xd9, 0xd3, 0x28, 0x58, 0x15, 0xa3, 0xb2, 0x57, 0x53, 0x6b, - 0x06, 0x69, 0x54, 0x0f, 0x4c, 0xec, 0x1e, 0x05, 0x14, 0x97, 0x93, 0x14, 0xc4, 0xb4, 0x59, 0x33, - 0x58, 0x7c, 0x33, 0xb9, 0x58, 0xf5, 0x1c, 0x21, 0x3f, 0x58, 0x7f, 0x3b, 0x61, 0x91, 0x8d, 0x59, - 0x9d, 0x58, 0x9e, 0x29, 0x3e, 0x0e, 0xf8, 0x57, 0x88, 0x23, 0x41, 0xe8, 0x7a, 0x65, 0xd5, 0x24, - 0xae, 0x8b, 0x0f, 0x49, 0x40, 0x71, 0xa5, 0x97, 0x42, 0x4b, 0x90, 0xac, 0x26, 0xd1, 0x30, 0xc3, - 0x24, 0x2e, 0xc3, 0xa6, 0x1d, 0x10, 0xdc, 0x10, 0xff, 0x54, 0x72, 0x87, 0xc4, 0xca, 0xb9, 0xcf, - 0xf0, 0xe1, 0x21, 0x71, 0x54, 0x6a, 0x8b, 0xfd, 0xe8, 0xdd, 0x9b, 0xcc, 0x3f, 0x5c, 0x06, 0xf3, - 0xc5, 0x92, 0xc1, 0xee, 0xd7, 0x76, 0x3a, 0xbb, 0x0e, 0x9f, 0x80, 0x19, 0xd7, 0xb0, 0x0e, 0x1b, - 0xe4, 0xc0, 0x22, 0x2e, 0x23, 0xd5, 0xe5, 0x4b, 0x48, 0x52, 0xa6, 0xb5, 0x9b, 0xf9, 0x33, 0xce, - 0x21, 0x9f, 0x94, 0x94, 0xdf, 0x13, 0xfc, 0xfa, 0x39, 0x5f, 0x9c, 0x3f, 0x82, 0x75, 0x30, 0xea, - 0x79, 0x46, 0x75, 0x59, 0x42, 0x92, 0x32, 0x55, 0x7a, 0xd8, 0x2e, 0x7e, 0xf6, 0x23, 0x49, 0xfa, - 0x6d, 0xe9, 0xde, 0xf7, 0x71, 0xae, 0x56, 0xcc, 0xdd, 0x5e, 0xcb, 0xdd, 0x7a, 0x72, 0x7a, 0xb3, - 0x95, 0x8b, 0x0e, 0x37, 0x87, 0x19, 0xae, 0x6b, 0x2d, 0x5d, 0x68, 0x80, 0xfb, 0x60, 0x3c, 0xb0, - 0x20, 0x85, 0xe4, 0xd7, 0xb2, 0x20, 0x90, 0x03, 0xef, 0x82, 0xe9, 0x5a, 0x83, 0x62, 0x76, 0x70, - 0x8c, 0x1b, 0x1e, 0x59, 0x96, 0x91, 0xa4, 0xa4, 0x4a, 0xd7, 0xdb, 0xc5, 0xef, 0x68, 0x0b, 0xb7, - 0xf9, 0x3c, 0x12, 0xf3, 0x48, 0x78, 0x58, 0x41, 0x5e, 0xcb, 0x6b, 0x5f, 0x49, 0x51, 0x06, 0x1d, - 0x88, 0xc1, 0x23, 0xfe, 0x0d, 0xaf, 0x80, 0x73, 0x55, 0xea, 0x95, 0x1b, 0x24, 0x10, 0x36, 0x8a, - 0x24, 0x45, 0xd2, 0xa7, 0xfd, 0x39, 0x9f, 0x64, 0x15, 0x4c, 0x1b, 0x16, 0x7b, 0x77, 0x33, 0xa0, - 0x18, 0x43, 0x92, 0x22, 0xeb, 0x40, 0x4c, 0x75, 0x64, 0x78, 0x51, 0x8a, 0x71, 0x24, 0x29, 0xa3, - 0xfa, 0xb4, 0x17, 0x21, 0xf1, 0x65, 0x6c, 0x68, 0x01, 0xc5, 0x04, 0x92, 0x94, 0x31, 0x21, 0x63, - 0x43, 0xf3, 0x09, 0xae, 0x82, 0x99, 0x9a, 0x71, 0x42, 0xaa, 0x1d, 0x21, 0x93, 0x48, 0x52, 0xc6, - 0xf5, 0x73, 0xc1, 0x64, 0x9c, 0xa8, 0x23, 0x67, 0x0a, 0x49, 0xca, 0x44, 0x40, 0x14, 0x4a, 0x7a, - 0x03, 0x80, 0x32, 0xa5, 0x8d, 0x80, 0x02, 0x20, 0x49, 0x99, 0xd4, 0xa7, 0xf8, 0x4c, 0x07, 0xac, - 0xcb, 0x1c, 0xc3, 0x3a, 0x0c, 0x08, 0xa6, 0xb9, 0x03, 0xe8, 0xd3, 0xfe, 0x5c, 0x07, 0x6c, 0xb9, - 0xc9, 0x88, 0x1b, 0x50, 0xbc, 0x81, 0x24, 0xe5, 0x9c, 0x0e, 0xc4, 0x54, 0xcc, 0xe0, 0x0e, 0x8c, - 0x19, 0x24, 0x29, 0x33, 0xbe, 0xc1, 0x21, 0x8a, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x10, 0xcc, 0x22, - 0x49, 0x99, 0xd5, 0x6e, 0x9c, 0x79, 0xf2, 0x7b, 0x9e, 0x49, 0x1c, 0xa3, 0xb2, 0x63, 0x79, 0xa6, - 0x3e, 0xc5, 0xf9, 0x7d, 0x61, 0xfb, 0x60, 0xae, 0x73, 0x8f, 0x03, 0x89, 0x6f, 0x0a, 0x89, 0xca, - 0x00, 0x89, 0xe1, 0xf5, 0xcf, 0xef, 0x63, 0x56, 0x17, 0xd2, 0x66, 0xec, 0xe0, 0xcb, 0x97, 0xe8, - 0x82, 0x0b, 0xbe, 0x33, 0x1d, 0x24, 0x05, 0xaf, 0x0a, 0xc1, 0x1f, 0x9c, 0x25, 0xf8, 0x53, 0x3f, - 0x20, 0x84, 0xf2, 0x03, 0x17, 0xed, 0xa8, 0x5b, 0xb4, 0x62, 0x63, 0x5f, 0xe9, 0x5b, 0x60, 0xd6, - 0x8d, 0x9f, 0xdf, 0x1c, 0x92, 0x94, 0x39, 0x7d, 0xc6, 0x8d, 0x1d, 0x60, 0x87, 0xac, 0xe3, 0x0b, - 0xf3, 0x48, 0x52, 0xe6, 0x43, 0xb2, 0x88, 0xd7, 0xb9, 0xd1, 0x43, 0x58, 0x40, 0x92, 0xb2, 0xa0, - 0x4f, 0xbb, 0x91, 0x43, 0x08, 0x48, 0x3a, 0x72, 0x20, 0x92, 0x14, 0xe8, 0x93, 0x84, 0x52, 0x34, - 0xb0, 0xe4, 0x10, 0x9b, 0x60, 0xbe, 0x15, 0x31, 0xbf, 0x58, 0x44, 0xb2, 0x32, 0xa5, 0x2f, 0x86, - 0x8b, 0x0f, 0x22, 0xfe, 0x71, 0x0b, 0x4c, 0x53, 0x8b, 0xf0, 0x24, 0xc1, 0x23, 0xf4, 0xf2, 0x79, - 0x11, 0x98, 0x2e, 0xe4, 0xfd, 0xa0, 0x98, 0x0f, 0x83, 0x62, 0x7e, 0x87, 0xaf, 0x7e, 0x3c, 0xa2, - 0x03, 0x41, 0x2c, 0x46, 0xf0, 0x2a, 0x38, 0xe7, 0xb3, 0xfa, 0xba, 0x96, 0x97, 0xb8, 0xf7, 0x7d, - 0x3c, 0xa2, 0xfb, 0x02, 0x7d, 0x25, 0xf0, 0x4b, 0x30, 0x65, 0x62, 0x3b, 0xc0, 0x71, 0x41, 0x04, - 0x8d, 0x0f, 0x87, 0x0f, 0x1a, 0x9f, 0x62, 0x5b, 0xc0, 0xdd, 0xb1, 0x98, 0xd3, 0xd4, 0x27, 0xcd, - 0x60, 0x08, 0x4f, 0xc0, 0xa2, 0x89, 0x6d, 0x3b, 0x69, 0xef, 0x45, 0xa1, 0xe7, 0xe3, 0x57, 0xd2, - 0x63, 0xc7, 0xf6, 0xc7, 0x57, 0xb8, 0x60, 0x26, 0xe7, 0x23, 0x9a, 0x03, 0xdf, 0xf3, 0x35, 0x2f, - 0xbf, 0x9e, 0x66, 0xdf, 0xf3, 0x7a, 0x35, 0x47, 0xe6, 0x61, 0x01, 0x2c, 0x5b, 0xd4, 0xda, 0xa2, - 0xd6, 0x31, 0xb1, 0x78, 0xe6, 0xc1, 0x8d, 0x3d, 0x6c, 0xfa, 0xe1, 0x6d, 0x39, 0x2d, 0x02, 0xc0, - 0xc0, 0x75, 0xb8, 0x05, 0xe6, 0x3a, 0xe9, 0x2d, 0x40, 0x7c, 0x59, 0x9c, 0x78, 0xba, 0xe7, 0xc4, - 0x1f, 0x86, 0x74, 0xfa, 0x6c, 0x87, 0xc5, 0x17, 0xf2, 0x25, 0xe8, 0x78, 0x52, 0xf4, 0xb2, 0xad, - 0x20, 0x79, 0xe8, 0xb8, 0xb0, 0x10, 0x0a, 0xea, 0x5e, 0xac, 0x9f, 0x49, 0x60, 0x39, 0x2e, 0xbe, - 0x9b, 0x64, 0x97, 0xd1, 0xf0, 0x3a, 0x4a, 0xdb, 0xed, 0x62, 0x31, 0x7b, 0x59, 0x0f, 0x44, 0x22, - 0xcb, 0x5f, 0x42, 0x5c, 0x34, 0x62, 0x06, 0x6b, 0x10, 0x2d, 0xd3, 0x7f, 0xb1, 0x4a, 0xdc, 0x8a, - 0x63, 0x88, 0x4c, 0x9f, 0xd7, 0x2f, 0x44, 0x91, 0x16, 0x3b, 0x88, 0xe0, 0xef, 0x48, 0x60, 0xa9, - 0xbb, 0x09, 0x51, 0xac, 0x57, 0x86, 0x8f, 0x93, 0x25, 0xad, 0x5d, 0x54, 0xb3, 0x70, 0xaf, 0x17, - 0xe2, 0xa5, 0xbd, 0x81, 0xc8, 0x16, 0x3b, 0xb1, 0x35, 0x02, 0xeb, 0x18, 0xa4, 0x93, 0xa1, 0x20, - 0x02, 0x2d, 0xc3, 0xe3, 0x41, 0xe9, 0x66, 0xbb, 0xf8, 0x4e, 0x76, 0xa9, 0x63, 0xbb, 0x4f, 0x16, - 0xe8, 0x5b, 0x49, 0x4e, 0xc7, 0x54, 0x2e, 0xc7, 0x23, 0x49, 0x44, 0xef, 0x5f, 0x49, 0x11, 0xc5, - 0xc1, 0xcd, 0x88, 0x28, 0xbe, 0xfa, 0x7a, 0x55, 0x43, 0xe9, 0x76, 0xbb, 0xb8, 0x95, 0xed, 0x62, - 0xf3, 0x15, 0x20, 0x5a, 0x7e, 0x4a, 0x2a, 0x2c, 0x40, 0x7e, 0x75, 0xc0, 0x6a, 0x7f, 0x03, 0x7c, - 0xb9, 0x11, 0x03, 0x7e, 0x2a, 0x81, 0x85, 0x5e, 0xdc, 0xd7, 0x5e, 0xaf, 0x5e, 0x2b, 0x6d, 0xb6, - 0x8b, 0xeb, 0xd9, 0xc5, 0xbd, 0x3e, 0x70, 0xd3, 0x7b, 0x83, 0x51, 0xce, 0x5b, 0x49, 0x74, 0xef, - 0x81, 0x45, 0x3f, 0x07, 0xd0, 0x63, 0xe2, 0x38, 0x46, 0x95, 0x1c, 0xb0, 0xa6, 0x4d, 0x96, 0xdf, - 0xe2, 0x65, 0x4c, 0x69, 0xa2, 0x5d, 0x1c, 0xfd, 0xc3, 0x94, 0x24, 0xeb, 0x0b, 0x82, 0xe6, 0x7e, - 0x40, 0xf2, 0xb0, 0x69, 0x93, 0xf4, 0xbf, 0x4a, 0x60, 0x3c, 0xa8, 0x16, 0x21, 0x18, 0xb5, 0xb0, - 0x49, 0xfc, 0x6a, 0x51, 0x17, 0xdf, 0xf0, 0x02, 0x18, 0xc7, 0x26, 0xf5, 0x2c, 0xb6, 0x9c, 0x12, - 0xe9, 0x3f, 0x18, 0x41, 0x13, 0xa4, 0xe8, 0x91, 0x28, 0xca, 0x66, 0xb5, 0xe2, 0xab, 0x5a, 0x9f, - 0xdf, 0x26, 0xc4, 0x16, 0xee, 0x9d, 0x6e, 0x17, 0x2f, 0x6a, 0x4b, 0xe1, 0x30, 0x6e, 0x6c, 0x8a, - 0x1e, 0x65, 0x56, 0xc1, 0x64, 0xb8, 0x08, 0xa7, 0xc0, 0xd8, 0xed, 0xe2, 0x27, 0x0f, 0x76, 0xe6, - 0x47, 0xe0, 0x24, 0x18, 0x7d, 0xa8, 0x7f, 0xbe, 0x33, 0x2f, 0x15, 0x2e, 0xb6, 0x8b, 0xe7, 0x35, - 0x08, 0xe7, 0x4f, 0x51, 0x86, 0x1e, 0x65, 0x0a, 0x28, 0xc3, 0xe7, 0x33, 0xa8, 0x95, 0x36, 0xc0, - 0x4c, 0x2c, 0x47, 0xc0, 0x79, 0x20, 0x1f, 0x91, 0x66, 0x60, 0x24, 0xff, 0x84, 0x25, 0x30, 0xe6, - 0x07, 0xaa, 0xd4, 0x2b, 0x14, 0x30, 0x3e, 0x6b, 0x21, 0x75, 0x53, 0x4a, 0x6f, 0x83, 0x0b, 0xfd, - 0xd3, 0x44, 0x1f, 0x9d, 0xe7, 0xa3, 0x3a, 0xa7, 0xa2, 0x52, 0x7e, 0x39, 0x94, 0x92, 0x0c, 0xf9, - 0x7d, 0xa4, 0xec, 0x45, 0xa5, 0xbc, 0x4e, 0xd1, 0xdd, 0xd5, 0x5f, 0xf8, 0x83, 0x54, 0xbb, 0xf8, - 0xbb, 0x29, 0xf0, 0xeb, 0x52, 0x76, 0xb1, 0x88, 0xca, 0x06, 0x43, 0xb4, 0x86, 0xba, 0x7d, 0xa2, - 0xb6, 0xbb, 0x6b, 0xb1, 0x30, 0x7d, 0x34, 0x51, 0x85, 0x9a, 0x76, 0xc3, 0xa8, 0x88, 0x5b, 0x15, - 0x74, 0x4f, 0x88, 0x3b, 0x1e, 0x62, 0x14, 0x55, 0xb8, 0x2b, 0x22, 0x13, 0x5b, 0x4d, 0x54, 0x23, - 0x98, 0x79, 0x0e, 0x71, 0xb9, 0xac, 0xfd, 0x30, 0x8f, 0x7c, 0x25, 0x89, 0xd6, 0xe1, 0x2b, 0x29, - 0x5a, 0x78, 0x7f, 0x25, 0xc5, 0x2a, 0xf5, 0xec, 0x23, 0x70, 0xed, 0xb6, 0x61, 0x55, 0x11, 0xf5, - 0x18, 0x32, 0xa9, 0x43, 0x10, 0x2e, 0xf3, 0xcf, 0x9e, 0x46, 0x2a, 0x5f, 0x67, 0xcc, 0x76, 0x0b, - 0xaa, 0x7a, 0x68, 0xb0, 0xba, 0x57, 0xce, 0x57, 0xa8, 0xa9, 0xf2, 0xcd, 0xc8, 0x91, 0x0a, 0x75, - 0x9b, 0x2e, 0x23, 0xc1, 0x30, 0xd8, 0x1b, 0x6d, 0x13, 0x6a, 0xa7, 0x28, 0xc3, 0xf5, 0x73, 0x67, - 0x59, 0xab, 0xd4, 0x36, 0xde, 0x5d, 0x27, 0xeb, 0xb9, 0xcd, 0xf2, 0xe6, 0x66, 0x6e, 0xf3, 0xe6, - 0x46, 0x35, 0x87, 0xd7, 0xdf, 0xb9, 0x95, 0x7b, 0x67, 0xb3, 0x8a, 0xcb, 0xd5, 0xda, 0x7b, 0xe4, - 0xe6, 0xfa, 0x66, 0x06, 0xb5, 0x4a, 0x33, 0x61, 0x4d, 0x24, 0xc0, 0x65, 0xfe, 0x77, 0x12, 0x2c, - 0x27, 0x91, 0x84, 0x41, 0x06, 0xde, 0x02, 0x97, 0x44, 0xd5, 0xd9, 0x09, 0x7a, 0xd1, 0x6e, 0x46, - 0x42, 0xb2, 0x92, 0xd2, 0x2f, 0x70, 0x82, 0x90, 0xe1, 0x76, 0xb7, 0x5d, 0x79, 0x1f, 0xa4, 0xe3, - 0xac, 0xb1, 0xe6, 0x85, 0x37, 0x58, 0x92, 0x7e, 0x31, 0xca, 0xbb, 0x1d, 0x69, 0x64, 0x7a, 0xf4, - 0x46, 0x6b, 0x43, 0x19, 0xc9, 0x8a, 0x1c, 0xd7, 0xbb, 0xdb, 0x2d, 0x13, 0x7b, 0xf4, 0xc6, 0x1a, - 0x9e, 0x51, 0x24, 0x2b, 0xa3, 0x71, 0xbd, 0x9f, 0x47, 0x6a, 0xcc, 0x7e, 0x7a, 0x3b, 0x65, 0xeb, - 0x18, 0x92, 0x95, 0xb1, 0x1e, 0xbd, 0x61, 0x05, 0xfb, 0x3d, 0x70, 0x39, 0xb1, 0x55, 0xb1, 0xc2, - 0x78, 0x1c, 0xc9, 0xca, 0xb8, 0xbe, 0x1c, 0xdb, 0xac, 0x68, 0x8d, 0xdc, 0x9f, 0x3d, 0xd2, 0x86, - 0xc9, 0xca, 0x44, 0x1f, 0xf6, 0x50, 0xfb, 0x7b, 0x60, 0x39, 0xce, 0x1e, 0x69, 0xac, 0x26, 0x91, - 0xac, 0x4c, 0xea, 0x4b, 0x51, 0xde, 0x52, 0xa7, 0xc9, 0xea, 0xd9, 0xae, 0x58, 0xa9, 0x39, 0x25, - 0x4a, 0xeb, 0xd8, 0x76, 0xc5, 0xcb, 0xeb, 0xc4, 0x76, 0x45, 0x9b, 0x31, 0x80, 0x64, 0xe5, 0x5c, - 0x7c, 0xbb, 0x4a, 0xdd, 0xc6, 0xac, 0xef, 0x31, 0x75, 0xcc, 0x9d, 0x46, 0xb2, 0x32, 0xd3, 0x7b, - 0x4c, 0xa1, 0xb5, 0x24, 0x69, 0x6d, 0xa4, 0x50, 0x3b, 0xf7, 0x0a, 0x85, 0x5a, 0x6c, 0x6f, 0xba, - 0xc5, 0xda, 0x87, 0x60, 0x25, 0xb1, 0x37, 0xf1, 0x43, 0x99, 0x41, 0xb2, 0x32, 0xa7, 0x5f, 0x8a, - 0xed, 0x4e, 0xac, 0x3f, 0x1a, 0x20, 0xa0, 0xe3, 0x14, 0xb3, 0x48, 0x56, 0xe6, 0xfb, 0x09, 0x18, - 0xe8, 0xcc, 0xb1, 0x3e, 0x6a, 0x0e, 0xc9, 0xca, 0x42, 0xe2, 0x74, 0x22, 0xbb, 0xd4, 0x97, 0x39, - 0xd2, 0xa9, 0xc9, 0x0a, 0xec, 0x65, 0x0e, 0x34, 0x17, 0xea, 0xed, 0x22, 0xd1, 0x2a, 0x10, 0x9f, - 0xa2, 0xcc, 0x20, 0xc7, 0xca, 0x14, 0xd0, 0xf7, 0x99, 0xe3, 0x91, 0x1b, 0xc8, 0xff, 0x7f, 0x0d, - 0x37, 0xdc, 0x60, 0xf0, 0xe4, 0x46, 0x92, 0x2d, 0x82, 0x9b, 0xf3, 0xad, 0xdf, 0x40, 0xda, 0x0d, - 0xb4, 0xf1, 0x04, 0xb5, 0x32, 0x69, 0x30, 0x5a, 0xa2, 0xd5, 0x66, 0xbf, 0xcc, 0x9d, 0xf9, 0x12, - 0xcc, 0x05, 0xed, 0xeb, 0xcf, 0x1b, 0xac, 0x2e, 0xc8, 0x66, 0x41, 0x2a, 0x7c, 0x0c, 0xd2, 0x53, - 0x06, 0x0f, 0x51, 0xa3, 0x55, 0xcc, 0x70, 0x90, 0x3d, 0xde, 0x3a, 0xf3, 0xdc, 0xb9, 0x10, 0x5d, - 0xb0, 0x64, 0x7e, 0x22, 0x81, 0xb9, 0xcf, 0xed, 0x2a, 0x66, 0xe4, 0x91, 0xa6, 0x93, 0x1f, 0x7a, - 0xc4, 0x65, 0x70, 0x0b, 0xc8, 0xb8, 0xec, 0x83, 0x98, 0xd6, 0xd6, 0x87, 0xce, 0x45, 0x3a, 0xe7, - 0x86, 0xef, 0x83, 0x69, 0x4f, 0xc8, 0x15, 0xaf, 0x86, 0x01, 0xb4, 0xde, 0x26, 0xe4, 0xb6, 0x41, - 0x1a, 0xd5, 0x4f, 0xb1, 0x7b, 0xa4, 0x03, 0x9f, 0x9c, 0x7f, 0x67, 0x11, 0x98, 0x8e, 0xf8, 0x26, - 0x2f, 0x0f, 0x1e, 0xef, 0xe8, 0xf7, 0xe7, 0x47, 0xe0, 0x04, 0x90, 0xef, 0xef, 0xed, 0xcc, 0x4b, - 0xda, 0x3f, 0x5d, 0x01, 0x17, 0x93, 0x8a, 0x1f, 0x10, 0xe7, 0xd8, 0xa8, 0x10, 0xf8, 0x1f, 0x32, - 0x18, 0xdf, 0x72, 0xf8, 0x9e, 0xc3, 0xe1, 0xd1, 0xa7, 0x87, 0x67, 0xc9, 0xfc, 0x4f, 0xea, 0x57, - 0xff, 0xf1, 0xdf, 0x7f, 0x92, 0xfa, 0x3a, 0x95, 0xf9, 0xcf, 0x94, 0x7a, 0xbc, 0x1e, 0xbe, 0xd0, - 0xf6, 0x7b, 0x9f, 0x55, 0x4f, 0x23, 0xe9, 0xa3, 0xa5, 0x9e, 0x46, 0x33, 0x42, 0x4b, 0x3d, 0x8d, - 0x78, 0x67, 0x4b, 0x75, 0x89, 0x8d, 0x1d, 0xcc, 0xa8, 0xa3, 0x9e, 0x7a, 0xb1, 0x85, 0xd3, 0x88, - 0x27, 0xb5, 0xd4, 0xd3, 0xd8, 0x85, 0x0a, 0xc7, 0x91, 0xf5, 0xae, 0xbb, 0xb6, 0xd4, 0xd3, 0x68, - 0x6c, 0xfb, 0x9e, 0xcb, 0x1c, 0xdb, 0x21, 0x35, 0xe3, 0x44, 0xcd, 0xb6, 0x7c, 0x25, 0x11, 0x36, - 0x37, 0x29, 0xc7, 0x4d, 0x2a, 0x72, 0x13, 0x0c, 0x71, 0x90, 0x83, 0x7a, 0xd4, 0x96, 0x7a, 0xda, - 0x8d, 0x55, 0x2d, 0xf5, 0x34, 0xf1, 0xa6, 0xc3, 0x39, 0xfb, 0x3e, 0xf6, 0xc4, 0xf8, 0x22, 0xb5, - 0x7b, 0x0b, 0xfe, 0xb1, 0x04, 0x80, 0x7f, 0xe0, 0xe2, 0x7a, 0x7c, 0x33, 0x87, 0x9e, 0x15, 0x67, - 0x7e, 0x2d, 0xb3, 0x7a, 0xc6, 0x89, 0x17, 0xa4, 0x2c, 0xfc, 0x25, 0x30, 0xfe, 0x09, 0xa5, 0x47, - 0x9e, 0x0d, 0xe7, 0xf2, 0xae, 0x57, 0xd6, 0xf2, 0xbb, 0xd5, 0xe0, 0x4e, 0xbf, 0x8a, 0xe6, 0xbc, - 0xd0, 0xac, 0xc0, 0xef, 0x9c, 0xe9, 0x6b, 0xbc, 0x2e, 0x6a, 0xc1, 0xdf, 0x90, 0xc0, 0xb8, 0x7f, - 0xc7, 0x5f, 0x65, 0x6b, 0x06, 0x3c, 0x15, 0x65, 0xd6, 0x05, 0x8a, 0xef, 0xa6, 0x5f, 0x12, 0x05, - 0xdf, 0x86, 0xff, 0x92, 0xc0, 0x64, 0x18, 0x6c, 0xe0, 0xda, 0x99, 0x50, 0x12, 0x71, 0x69, 0x20, - 0x92, 0x3f, 0x92, 0x04, 0x94, 0xdf, 0x93, 0xd2, 0x59, 0xf5, 0x58, 0x7b, 0x31, 0x16, 0x5c, 0x26, - 0x79, 0x1f, 0x0f, 0x8f, 0x52, 0x8f, 0xd7, 0xb5, 0xa1, 0x59, 0xd6, 0xb4, 0xef, 0xaa, 0xc7, 0x1a, - 0x7e, 0x59, 0x1e, 0x29, 0x0b, 0xff, 0x54, 0x02, 0xe3, 0xdb, 0xa4, 0x41, 0x18, 0xe9, 0x3d, 0xfe, - 0x41, 0x36, 0x39, 0xed, 0x62, 0xb1, 0x7c, 0x1d, 0xcc, 0x02, 0x50, 0xb4, 0x8d, 0x7b, 0xa4, 0x59, - 0xf4, 0x58, 0x1d, 0x8e, 0x80, 0x8b, 0x60, 0xfc, 0x3e, 0xff, 0xd4, 0xe0, 0x0c, 0x18, 0x75, 0x08, - 0xae, 0x82, 0xb1, 0x67, 0x8e, 0xc1, 0xc8, 0xd3, 0xf3, 0x60, 0xf6, 0x24, 0x67, 0x38, 0x0e, 0x07, - 0xe1, 0x1a, 0xe5, 0x06, 0x81, 0x29, 0xe4, 0x6f, 0x8b, 0x92, 0x7d, 0x59, 0x3f, 0xf9, 0x37, 0x09, - 0x4c, 0xde, 0x21, 0xec, 0x33, 0x8f, 0x38, 0xcd, 0xff, 0x4f, 0x4f, 0xf9, 0xb1, 0xd4, 0x2e, 0x3e, - 0xcc, 0xec, 0x81, 0x95, 0x7e, 0x1d, 0x40, 0x47, 0xe1, 0x90, 0x95, 0xff, 0x17, 0x52, 0x79, 0x44, - 0xd8, 0x97, 0x87, 0x37, 0xce, 0xb2, 0xef, 0x87, 0x5c, 0x41, 0x68, 0xe5, 0x8f, 0xc7, 0xc0, 0xfc, - 0x1d, 0xc2, 0xc2, 0x84, 0xef, 0x2b, 0xbf, 0x35, 0x7c, 0x96, 0x0b, 0xf8, 0xd3, 0xaf, 0xce, 0x9a, - 0xf9, 0xd1, 0xa8, 0xb0, 0xe0, 0xbf, 0x65, 0xf8, 0xb5, 0x7c, 0x86, 0x0d, 0x9d, 0x2a, 0x22, 0x88, - 0x97, 0xfd, 0xba, 0x91, 0x56, 0x72, 0x2d, 0x91, 0x5c, 0x06, 0xb6, 0x13, 0x3d, 0x6b, 0xde, 0x8b, - 0x16, 0xe3, 0x41, 0xff, 0x05, 0x05, 0x7f, 0xff, 0xd5, 0x81, 0xbc, 0xb1, 0x34, 0x35, 0xb8, 0x20, - 0xef, 0xe5, 0xeb, 0x16, 0xdc, 0x7d, 0x0d, 0x19, 0xa8, 0xb0, 0x37, 0x0b, 0x0d, 0xa8, 0x72, 0x07, - 0x2c, 0x0f, 0xb4, 0xd3, 0x7d, 0x91, 0xd6, 0x58, 0x96, 0x84, 0xbf, 0x35, 0x0a, 0x46, 0x77, 0x2a, - 0x75, 0x0a, 0x07, 0xfd, 0x38, 0xe2, 0x7a, 0xe5, 0xbc, 0xdf, 0x6f, 0x84, 0x21, 0xe3, 0xa5, 0x29, - 0x33, 0x3f, 0x93, 0xdb, 0xc5, 0xbf, 0x4d, 0x81, 0x49, 0x52, 0xa9, 0x53, 0xe4, 0xd8, 0x15, 0xb8, - 0xf0, 0xc0, 0x33, 0x4d, 0xec, 0x34, 0x0b, 0x68, 0x27, 0x98, 0x4a, 0xcf, 0x6f, 0x77, 0xdf, 0x68, - 0xc4, 0x6c, 0x66, 0x1b, 0xc0, 0xf8, 0x45, 0x15, 0xf8, 0x86, 0xbc, 0x9e, 0x77, 0x6f, 0x01, 0x59, - 0x5b, 0x5b, 0x83, 0x5a, 0x66, 0x0d, 0xcc, 0x63, 0xdb, 0x7f, 0x5c, 0x30, 0xa8, 0xa5, 0x3e, 0x75, - 0xa9, 0x05, 0x57, 0x4e, 0x33, 0x61, 0x19, 0x9c, 0x61, 0x75, 0x82, 0x0c, 0xcb, 0xf6, 0x82, 0x1f, - 0x02, 0x33, 0xad, 0xbb, 0x8f, 0x80, 0xfc, 0xce, 0xda, 0x06, 0xbc, 0x0f, 0xde, 0xd5, 0x09, 0xf3, - 0x1c, 0x8b, 0x54, 0xd1, 0xb3, 0x3a, 0xb1, 0x10, 0xa7, 0x74, 0x88, 0x4b, 0x3d, 0xa7, 0x42, 0x90, - 0xe1, 0x22, 0x46, 0x4c, 0x9b, 0x3a, 0xd8, 0x31, 0x1a, 0x4d, 0xe4, 0x59, 0xf8, 0x18, 0x1b, 0x0d, - 0x5c, 0x6e, 0x90, 0x7c, 0x76, 0x09, 0x4c, 0x9e, 0xe4, 0x2c, 0xcf, 0x2c, 0x13, 0x07, 0x4e, 0x2d, - 0x8c, 0x88, 0xff, 0x7e, 0xe1, 0xa3, 0xbb, 0xef, 0x03, 0x79, 0x73, 0x6d, 0x13, 0x6e, 0x82, 0xec, - 0x0b, 0xe4, 0x56, 0x29, 0x71, 0x91, 0x45, 0x19, 0x22, 0x27, 0x86, 0xcb, 0xf2, 0x70, 0x1c, 0x88, - 0x27, 0x37, 0x71, 0x51, 0x9f, 0x9c, 0x1d, 0x6a, 0xf8, 0x56, 0xab, 0xa7, 0xfe, 0xe1, 0x3e, 0xbe, - 0x94, 0x99, 0x8f, 0x66, 0x17, 0xbe, 0x56, 0xf0, 0x5f, 0x68, 0x1e, 0x43, 0xd8, 0xb3, 0x04, 0xff, - 0x42, 0x02, 0xe7, 0xb6, 0x09, 0xb1, 0xc5, 0xef, 0x50, 0x7c, 0xe2, 0x9b, 0x29, 0x64, 0x3e, 0x14, - 0xb6, 0xdd, 0xca, 0x6c, 0x9e, 0x99, 0x26, 0x62, 0x3f, 0x71, 0xe7, 0x79, 0x77, 0x22, 0xf2, 0x5b, - 0x11, 0x80, 0x3d, 0x5a, 0x32, 0xac, 0xaa, 0x61, 0x1d, 0xba, 0xf0, 0x52, 0x4f, 0x16, 0xd8, 0x0e, - 0x7e, 0xfd, 0x1f, 0x98, 0x20, 0x46, 0xe0, 0x23, 0x30, 0xf1, 0xd0, 0x30, 0x09, 0xf5, 0x18, 0x1c, - 0x40, 0x34, 0x90, 0xf9, 0xb2, 0x80, 0xbf, 0x04, 0x17, 0xa3, 0xfb, 0xc9, 0x02, 0x61, 0x75, 0x30, - 0xbf, 0xe3, 0x38, 0xd4, 0xe1, 0xad, 0xd3, 0x36, 0x61, 0xd8, 0x68, 0xb8, 0x43, 0x2b, 0xb8, 0x26, - 0x14, 0xbc, 0x09, 0x57, 0x62, 0x07, 0xc6, 0xa5, 0x3e, 0x33, 0x58, 0xbd, 0x1a, 0x48, 0xfd, 0x4d, - 0x09, 0xc0, 0x3b, 0x84, 0x25, 0x5b, 0xb5, 0xb3, 0xab, 0x9c, 0x04, 0xc7, 0x40, 0x18, 0x6f, 0x0b, - 0x18, 0x57, 0x32, 0x97, 0xa2, 0x30, 0x38, 0x82, 0x32, 0xad, 0x36, 0xd5, 0x53, 0x5e, 0x6b, 0x88, - 0x96, 0x0e, 0xfe, 0x9a, 0x04, 0x16, 0xf6, 0xa9, 0xcb, 0xb8, 0x44, 0xc1, 0x2a, 0x80, 0xbc, 0x5c, - 0x57, 0x38, 0x50, 0xbb, 0x2a, 0xb4, 0x5f, 0xcf, 0x5c, 0x8b, 0x6a, 0xb7, 0xa9, 0xcb, 0x38, 0x02, - 0xf1, 0xcb, 0xa2, 0x0f, 0xa3, 0xe3, 0x14, 0x7f, 0x23, 0x81, 0xc5, 0xad, 0x3a, 0xa9, 0x1c, 0x85, - 0x09, 0x7e, 0x1f, 0x3b, 0xd8, 0x74, 0xbf, 0x21, 0x9f, 0xbe, 0x23, 0xe0, 0x16, 0xe1, 0x87, 0x67, - 0xf9, 0xb4, 0x2d, 0x50, 0xa9, 0x87, 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0x2f, 0x12, 0x78, 0x43, 0x98, - 0xe1, 0x3f, 0xb0, 0xf2, 0x76, 0xf4, 0x5b, 0x31, 0xe8, 0x33, 0x61, 0xd0, 0x3d, 0xb8, 0x3b, 0x84, - 0x41, 0x41, 0x1b, 0x25, 0xfe, 0xb2, 0x26, 0x61, 0x1c, 0x3d, 0x6a, 0xc1, 0xbf, 0x97, 0xc0, 0x79, - 0x61, 0x1a, 0x77, 0x96, 0x6f, 0xcd, 0xa2, 0x4c, 0xe1, 0x25, 0x2d, 0xe2, 0xce, 0x16, 0x6f, 0x5f, - 0x5b, 0x85, 0xf8, 0x1f, 0xdd, 0xa4, 0xff, 0x5a, 0x6a, 0x17, 0xff, 0x52, 0x82, 0xb5, 0x01, 0x0f, - 0x03, 0xd1, 0x9f, 0x23, 0x50, 0x2e, 0x87, 0x9e, 0xd5, 0x8d, 0x4a, 0x1d, 0xb9, 0x75, 0xea, 0x35, - 0xaa, 0x22, 0xe4, 0x97, 0x09, 0xf2, 0x5c, 0x52, 0x45, 0x86, 0x85, 0xec, 0x06, 0xae, 0x10, 0x44, - 0x6b, 0x22, 0x39, 0x54, 0x69, 0xc5, 0x33, 0x89, 0xe5, 0xb7, 0x9b, 0xa8, 0x42, 0x4d, 0x3e, 0xb8, - 0x92, 0xfe, 0x0c, 0xac, 0xf6, 0xab, 0x68, 0x79, 0xe8, 0x0e, 0x9f, 0x22, 0x86, 0x7d, 0xce, 0x7e, - 0x0a, 0xce, 0x57, 0xb0, 0x49, 0x1a, 0x5b, 0xd8, 0x25, 0x81, 0x0c, 0xde, 0x37, 0x43, 0x1d, 0x8c, - 0xf9, 0x3f, 0xc9, 0x0f, 0x1b, 0xbc, 0x2e, 0x89, 0x5d, 0x5e, 0x84, 0x0b, 0xb1, 0xe0, 0xc5, 0x97, - 0xb4, 0x1f, 0x80, 0x95, 0xa2, 0x45, 0x59, 0x9d, 0x38, 0x81, 0x26, 0x1e, 0x30, 0x22, 0x81, 0xfc, - 0x83, 0x58, 0x58, 0x1f, 0x56, 0xf1, 0x48, 0xe9, 0xcf, 0xa7, 0xda, 0xc5, 0x3f, 0x99, 0x82, 0x5f, - 0x4b, 0x60, 0xb1, 0x88, 0x4a, 0xfe, 0x0f, 0x10, 0x91, 0xf3, 0xff, 0x02, 0x9c, 0x3f, 0xd4, 0xf7, - 0xb7, 0x72, 0x77, 0x7c, 0xd3, 0x91, 0xed, 0xd0, 0xa7, 0xa4, 0xc2, 0x86, 0xdd, 0xb2, 0xf4, 0xbc, - 0x45, 0x2d, 0xf2, 0x51, 0x60, 0x1a, 0xa7, 0xce, 0xfe, 0x00, 0x9c, 0x2f, 0x3d, 0xd8, 0x46, 0x1b, - 0xb9, 0xad, 0x06, 0xf6, 0x5c, 0x82, 0x3e, 0x31, 0x2a, 0xc4, 0x72, 0x09, 0xbc, 0x3d, 0x9c, 0x64, - 0xb5, 0xdc, 0xa0, 0x65, 0xd5, 0xc4, 0x2e, 0x23, 0x8e, 0xfa, 0xc9, 0xee, 0xd6, 0xce, 0xde, 0x83, - 0x9d, 0x3c, 0x3b, 0x61, 0x9a, 0xbc, 0x9e, 0x5f, 0x2b, 0x20, 0xb0, 0x74, 0x92, 0x73, 0xa9, 0x49, - 0x84, 0x35, 0xdd, 0x2f, 0x38, 0x91, 0x1e, 0x6b, 0xe2, 0x6a, 0x15, 0x67, 0x65, 0x29, 0x35, 0xaa, - 0xf5, 0xd4, 0x3e, 0xda, 0x85, 0xe8, 0xcc, 0x49, 0xae, 0x46, 0x69, 0xce, 0x34, 0x4c, 0x52, 0xe8, - 0xa1, 0x2c, 0x0c, 0xa0, 0xd4, 0xf7, 0x79, 0x1d, 0xb3, 0x01, 0x77, 0xc1, 0x9d, 0xde, 0x3a, 0xc6, - 0x73, 0x89, 0xd3, 0xad, 0x61, 0xea, 0xf8, 0x98, 0x20, 0x9b, 0x38, 0xa6, 0xe1, 0xba, 0xdc, 0x75, - 0x19, 0x45, 0xb8, 0x52, 0x21, 0xae, 0x1b, 0xab, 0x79, 0xf2, 0xfa, 0x6b, 0x54, 0x46, 0x13, 0xfa, - 0xc7, 0x40, 0xde, 0x5c, 0xbf, 0x09, 0x8b, 0x60, 0x66, 0xf7, 0x6d, 0x13, 0x61, 0xc4, 0x08, 0xb6, - 0x29, 0xcb, 0xc3, 0x35, 0x90, 0x4f, 0x0f, 0xf5, 0x06, 0xfd, 0xf8, 0xf7, 0x65, 0x30, 0x07, 0xa6, - 0x4a, 0xd8, 0x35, 0x2a, 0xa2, 0xdf, 0x4d, 0x4d, 0x4a, 0xe0, 0xcf, 0xa4, 0x58, 0x0b, 0xfc, 0x53, - 0x69, 0x32, 0x95, 0x9e, 0xfa, 0x22, 0x57, 0xdc, 0xdf, 0xcd, 0xdd, 0x23, 0x4d, 0x94, 0xba, 0xab, - 0x80, 0x95, 0x93, 0x1c, 0x36, 0xf1, 0x73, 0x6a, 0xe5, 0xb0, 0x6d, 0x04, 0xaa, 0x72, 0xd8, 0x63, - 0x75, 0xd6, 0xb4, 0x09, 0x9c, 0x4c, 0x8f, 0x53, 0x3e, 0xd0, 0xee, 0xfe, 0x22, 0x78, 0x73, 0x10, - 0x25, 0x75, 0x8c, 0xe7, 0xc4, 0x81, 0x1f, 0x64, 0x7f, 0x0e, 0xcc, 0x81, 0x51, 0xc1, 0x37, 0x91, - 0x1e, 0x63, 0xf4, 0x88, 0x58, 0xe0, 0x3a, 0x58, 0xe9, 0x92, 0xe8, 0xc4, 0xf5, 0x1a, 0xec, 0x21, - 0x6b, 0xec, 0x5a, 0x0f, 0x48, 0x85, 0x5a, 0x55, 0xb7, 0x53, 0x61, 0xee, 0x7d, 0x04, 0xfe, 0x59, - 0xea, 0xf4, 0xe7, 0x7f, 0x27, 0x4d, 0xca, 0xca, 0xa8, 0x76, 0x35, 0xf4, 0xb9, 0x88, 0x83, 0xaa, - 0x02, 0x8f, 0xda, 0x11, 0x5a, 0x58, 0x1d, 0x4c, 0x24, 0x20, 0x94, 0x7e, 0x05, 0xa4, 0xfd, 0x76, - 0x1f, 0xc2, 0x3b, 0x0e, 0xb6, 0x98, 0x8b, 0xf8, 0x20, 0x38, 0x4b, 0xb0, 0x12, 0x3c, 0x02, 0xc0, - 0xc5, 0x60, 0x51, 0x8c, 0xc2, 0xd5, 0x2d, 0x30, 0x86, 0xab, 0xa6, 0x61, 0xc1, 0x42, 0x8c, 0xd5, - 0xaa, 0xc6, 0xc8, 0x84, 0x6b, 0x70, 0x32, 0xc3, 0x65, 0xbc, 0x5a, 0x3b, 0xe6, 0x45, 0x79, 0x8d, - 0x3a, 0xa6, 0xf0, 0xbe, 0xf2, 0x2a, 0x98, 0x89, 0x1e, 0xcc, 0x48, 0xf2, 0x61, 0xa2, 0x7c, 0x7d, - 0xe0, 0xd3, 0x44, 0x92, 0xd4, 0xd9, 0x05, 0x17, 0x3f, 0xed, 0x46, 0xcb, 0x68, 0x0c, 0x18, 0xf6, - 0xee, 0x3f, 0xbf, 0x0c, 0xe0, 0x49, 0x2e, 0x3a, 0xc3, 0x2f, 0x09, 0x1c, 0x4b, 0xcb, 0x65, 0xec, - 0x3c, 0x57, 0xc0, 0xc5, 0xc4, 0x62, 0x19, 0x3f, 0xcf, 0x35, 0x0c, 0x97, 0xc1, 0x19, 0x6d, 0x1a, - 0x8c, 0xa5, 0x65, 0x6a, 0x11, 0x90, 0x42, 0xd2, 0xe3, 0xa9, 0x8e, 0x3b, 0x96, 0xc7, 0x45, 0x18, - 0xdb, 0xf8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe4, 0xb2, 0xb5, 0x0c, 0x75, 0x2b, 0x00, 0x00, + // 3621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x70, 0x1c, 0xc7, + 0x5a, 0xd7, 0xec, 0x48, 0xb2, 0xd4, 0xb2, 0x2c, 0xa9, 0x65, 0xd9, 0xf2, 0x5a, 0x89, 0xda, 0x63, + 0xe7, 0x65, 0xbc, 0xcf, 0xbb, 0x23, 0x8d, 0x94, 0xc4, 0xde, 0xf0, 0x92, 0xec, 0x4a, 0xb2, 0x23, + 0x3b, 0x91, 0x95, 0xb1, 0x63, 0x82, 0x5f, 0xfc, 0x44, 0xef, 0x6e, 0x4b, 0x3b, 0xd6, 0xce, 0xf4, + 0xbc, 0x99, 0x1e, 0x59, 0x6b, 0xb1, 0xf0, 0x0a, 0x28, 0x28, 0x78, 0xb7, 0x7d, 0xfc, 0x29, 0x48, + 0xc1, 0x85, 0xe2, 0x42, 0xbd, 0x13, 0x55, 0x9c, 0xa8, 0x82, 0x0b, 0x9c, 0x38, 0x40, 0x85, 0x2a, + 0x8a, 0x0b, 0x27, 0x38, 0x73, 0x00, 0x2a, 0x55, 0x1c, 0xa0, 0xa8, 0xee, 0x99, 0xd9, 0x9d, 0x99, + 0xdd, 0xb5, 0xbc, 0x36, 0x95, 0x97, 0x43, 0x3c, 0xdd, 0xfd, 0x7d, 0xdf, 0xef, 0xfb, 0xba, 0xbf, + 0xfe, 0xfe, 0xf4, 0x0a, 0xe8, 0xe4, 0x18, 0x5b, 0x4e, 0x83, 0x78, 0x9a, 0xe3, 0x52, 0x46, 0xb5, + 0x70, 0xe8, 0x54, 0x34, 0xbc, 0x57, 0x31, 0xd9, 0x1e, 0xdd, 0xdf, 0x23, 0x47, 0xc4, 0x6d, 0xb2, + 0xba, 0x69, 0x1f, 0x14, 0x04, 0x0d, 0x5c, 0x3e, 0x70, 0x9d, 0x6a, 0xe1, 0x00, 0x33, 0xf2, 0x0c, + 0x37, 0x0b, 0x91, 0x80, 0x42, 0x87, 0x35, 0xbb, 0x74, 0x40, 0xe9, 0x41, 0x83, 0x68, 0xd8, 0x31, + 0x35, 0x6c, 0xdb, 0x94, 0x61, 0x66, 0x52, 0xdb, 0x0b, 0xd8, 0xb3, 0x28, 0x5c, 0x15, 0xa3, 0x8a, + 0xbf, 0xaf, 0xed, 0x9b, 0xa4, 0x51, 0xdb, 0xb3, 0xb0, 0x77, 0x18, 0x52, 0x5c, 0x4e, 0x53, 0x10, + 0xcb, 0x61, 0xcd, 0x70, 0xf1, 0xcd, 0xf4, 0x62, 0xcd, 0x77, 0x85, 0xfc, 0x41, 0xeb, 0xcf, 0x5c, + 0xec, 0x38, 0xc4, 0x8d, 0xe0, 0xdf, 0x4e, 0x59, 0xec, 0x60, 0x56, 0x27, 0xb6, 0x6f, 0x89, 0x8f, + 0x3d, 0xfe, 0x15, 0xe9, 0x99, 0x22, 0xf4, 0xfc, 0x8a, 0x66, 0x11, 0xcf, 0xc3, 0x07, 0x24, 0xa4, + 0xb8, 0xd2, 0x4b, 0xa1, 0xa7, 0x48, 0x96, 0xd3, 0xda, 0x30, 0xd3, 0x22, 0x1e, 0xc3, 0x96, 0x13, + 0x12, 0xdc, 0x10, 0xff, 0x54, 0xf3, 0x07, 0xc4, 0xce, 0x7b, 0xcf, 0xf0, 0xc1, 0x01, 0x71, 0x35, + 0xea, 0x88, 0xfd, 0xea, 0xdd, 0x3b, 0xe5, 0x1f, 0x2e, 0x83, 0xd9, 0x52, 0xd9, 0x64, 0xf7, 0xf7, + 0xb7, 0x3a, 0xa7, 0x02, 0x9f, 0x80, 0x69, 0xcf, 0xb4, 0x0f, 0x1a, 0x64, 0xcf, 0x26, 0x1e, 0x23, + 0xb5, 0xc5, 0x4b, 0x48, 0x52, 0xa7, 0xf4, 0x9b, 0x85, 0x53, 0xce, 0xa9, 0x90, 0x96, 0x54, 0xd8, + 0x11, 0xfc, 0xc6, 0xd9, 0x40, 0x5c, 0x30, 0x82, 0x75, 0x30, 0xea, 0xfb, 0x66, 0x6d, 0x51, 0x42, + 0x92, 0x3a, 0x59, 0x7e, 0xd8, 0x2e, 0x7d, 0xf6, 0x23, 0x49, 0xfa, 0x6d, 0xe9, 0xde, 0xf7, 0x71, + 0x7e, 0xbf, 0x94, 0xbf, 0xbd, 0x92, 0xbf, 0xf5, 0xe4, 0xe4, 0x66, 0x2b, 0x1f, 0x1f, 0xae, 0x0f, + 0x33, 0x5c, 0xd5, 0x5b, 0x86, 0x40, 0x80, 0xbb, 0x60, 0x3c, 0xb4, 0x20, 0x83, 0xe4, 0xd7, 0xb2, + 0x20, 0x94, 0x03, 0xef, 0x82, 0xa9, 0xfd, 0x06, 0xc5, 0x6c, 0xef, 0x08, 0x37, 0x7c, 0xb2, 0x28, + 0x23, 0x49, 0xcd, 0x94, 0xaf, 0xb7, 0x4b, 0xdf, 0xd1, 0xe7, 0x6e, 0xf3, 0x79, 0x24, 0xe6, 0x91, + 0xf0, 0xc0, 0xa2, 0xbc, 0x52, 0xd0, 0xbf, 0x96, 0xe2, 0x0c, 0x06, 0x10, 0x83, 0x47, 0xfc, 0x1b, + 0x5e, 0x01, 0x67, 0x6b, 0xd4, 0xaf, 0x34, 0x48, 0x28, 0x6c, 0x14, 0x49, 0xaa, 0x64, 0x4c, 0x05, + 0x73, 0x01, 0xc9, 0x32, 0x98, 0x32, 0x6d, 0xf6, 0xee, 0x7a, 0x48, 0x31, 0x86, 0x24, 0x55, 0x36, + 0x80, 0x98, 0xea, 0xc8, 0xf0, 0xe3, 0x14, 0xe3, 0x48, 0x52, 0x47, 0x8d, 0x29, 0x3f, 0x46, 0x12, + 0xc8, 0x58, 0xd3, 0x43, 0x8a, 0x33, 0x48, 0x52, 0xc7, 0x84, 0x8c, 0x35, 0x3d, 0x20, 0xb8, 0x0a, + 0xa6, 0xf7, 0xcd, 0x63, 0x52, 0xeb, 0x08, 0x99, 0x40, 0x92, 0x3a, 0x6e, 0x9c, 0x0d, 0x27, 0x93, + 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xcf, 0x84, 0x44, 0x91, 0xa4, 0x37, 0x00, 0xa8, 0x50, 0xda, + 0x08, 0x29, 0x00, 0x92, 0xd4, 0x09, 0x63, 0x92, 0xcf, 0x74, 0x94, 0xf5, 0x98, 0x6b, 0xda, 0x07, + 0x21, 0xc1, 0x14, 0x77, 0x00, 0x63, 0x2a, 0x98, 0xeb, 0x28, 0x5b, 0x69, 0x32, 0xe2, 0x85, 0x14, + 0x6f, 0x20, 0x49, 0x3d, 0x6b, 0x00, 0x31, 0x95, 0x30, 0xb8, 0xa3, 0xc6, 0x34, 0x92, 0xd4, 0xe9, + 0xc0, 0xe0, 0x48, 0x8b, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x12, 0x9c, 0x43, 0x92, 0x7a, 0x4e, 0xbf, + 0x71, 0xea, 0xc9, 0xef, 0xf8, 0x16, 0x71, 0xcd, 0xea, 0x96, 0xed, 0x5b, 0xc6, 0x24, 0xe7, 0x0f, + 0x84, 0xed, 0x82, 0x99, 0xce, 0x3d, 0x0e, 0x25, 0xbe, 0x29, 0x24, 0xaa, 0x03, 0x24, 0x46, 0xd7, + 0xbf, 0xb0, 0x8b, 0x59, 0x5d, 0x48, 0x9b, 0x76, 0xc2, 0xaf, 0x40, 0xa2, 0x07, 0x2e, 0x04, 0xce, + 0xb4, 0x97, 0x16, 0xbc, 0x2c, 0x04, 0x7f, 0x70, 0x9a, 0xe0, 0x4f, 0x83, 0x80, 0x10, 0xc9, 0x0f, + 0x5d, 0xb4, 0x03, 0x37, 0x6f, 0x27, 0xc6, 0x01, 0xe8, 0x5b, 0xe0, 0x9c, 0x97, 0x3c, 0xbf, 0x19, + 0x24, 0xa9, 0x33, 0xc6, 0xb4, 0x97, 0x38, 0xc0, 0x0e, 0x59, 0xc7, 0x17, 0x66, 0x91, 0xa4, 0xce, + 0x46, 0x64, 0x31, 0xaf, 0xf3, 0xe2, 0x87, 0x30, 0x87, 0x24, 0x75, 0xce, 0x98, 0xf2, 0x62, 0x87, + 0x10, 0x92, 0x74, 0xe4, 0x40, 0x24, 0xa9, 0x30, 0x20, 0x89, 0xa4, 0xe8, 0x60, 0xc1, 0x25, 0x0e, + 0xc1, 0x7c, 0x2b, 0x12, 0x7e, 0x31, 0x8f, 0x64, 0x75, 0xd2, 0x98, 0x8f, 0x16, 0x1f, 0xc4, 0xfc, + 0xe3, 0x16, 0x98, 0xa2, 0x36, 0xe1, 0x49, 0x84, 0x47, 0xf0, 0xc5, 0xf3, 0x22, 0x30, 0x5d, 0x28, + 0x04, 0x41, 0xb1, 0x10, 0x05, 0xc5, 0xc2, 0x16, 0x5f, 0xfd, 0x78, 0xc4, 0x00, 0x82, 0x58, 0x8c, + 0xe0, 0x55, 0x70, 0x36, 0x60, 0x0d, 0xb0, 0x16, 0x17, 0xb8, 0xf7, 0x7d, 0x3c, 0x62, 0x04, 0x02, + 0x03, 0x10, 0xf8, 0x25, 0x98, 0xb4, 0xb0, 0x13, 0xea, 0x71, 0x41, 0x04, 0x8d, 0x0f, 0x87, 0x0f, + 0x1a, 0x9f, 0x62, 0x47, 0xa8, 0xbb, 0x65, 0x33, 0xb7, 0x69, 0x4c, 0x58, 0xe1, 0x10, 0x1e, 0x83, + 0x79, 0x8b, 0xe7, 0x8e, 0x94, 0xbd, 0x17, 0x05, 0xce, 0xc7, 0xaf, 0x84, 0xe3, 0x24, 0xf6, 0x27, + 0x00, 0x9c, 0xb3, 0xd2, 0xf3, 0x31, 0xe4, 0xd0, 0xf7, 0x02, 0xe4, 0xc5, 0xd7, 0x43, 0x0e, 0x3c, + 0xaf, 0x17, 0x39, 0x36, 0x0f, 0x8b, 0x60, 0xd1, 0xa6, 0xf6, 0x06, 0xb5, 0x8f, 0x88, 0xcd, 0x33, + 0x0f, 0x6e, 0xec, 0x60, 0x2b, 0x08, 0x6f, 0x8b, 0x59, 0x11, 0x00, 0x06, 0xae, 0xc3, 0x0d, 0x30, + 0xd3, 0x49, 0x6f, 0xa1, 0xc6, 0x97, 0xc5, 0x89, 0x67, 0x7b, 0x4e, 0xfc, 0x61, 0x44, 0x67, 0x9c, + 0xeb, 0xb0, 0x04, 0x42, 0xbe, 0x04, 0x1d, 0x4f, 0x8a, 0x5f, 0xb6, 0x25, 0x24, 0x0f, 0x1d, 0x17, + 0xe6, 0x22, 0x41, 0xdd, 0x8b, 0xf5, 0x53, 0x09, 0x2c, 0x26, 0xc5, 0x77, 0x93, 0xec, 0x22, 0x1a, + 0x1e, 0xa3, 0xbc, 0xd9, 0x2e, 0x95, 0x72, 0x97, 0x8d, 0x50, 0x24, 0xb2, 0x83, 0x25, 0xc4, 0x45, + 0x23, 0x66, 0xb2, 0x06, 0xd1, 0x95, 0xfe, 0x8b, 0x35, 0xe2, 0x55, 0x5d, 0x53, 0x64, 0xfa, 0x82, + 0x71, 0x21, 0xae, 0x69, 0xa9, 0xa3, 0x11, 0xfc, 0x1d, 0x09, 0x2c, 0x74, 0x37, 0x21, 0xae, 0xeb, + 0x95, 0xe1, 0xe3, 0x64, 0x59, 0x6f, 0x97, 0xb4, 0x1c, 0xdc, 0xe9, 0x55, 0xf1, 0xd2, 0xce, 0x40, + 0xcd, 0xe6, 0x3b, 0xb1, 0x35, 0xa6, 0xd6, 0x11, 0xc8, 0xa6, 0x43, 0x41, 0x4c, 0x35, 0x85, 0xc7, + 0x83, 0xf2, 0xcd, 0x76, 0xe9, 0x9d, 0xdc, 0x42, 0xc7, 0xf6, 0x80, 0x2c, 0xc4, 0x5b, 0x4a, 0x4f, + 0x27, 0x20, 0x17, 0x93, 0x91, 0x24, 0x86, 0xfb, 0x57, 0x52, 0x0c, 0x38, 0xbc, 0x19, 0x31, 0xe0, + 0xab, 0xaf, 0x57, 0x35, 0x94, 0x6f, 0xb7, 0x4b, 0x1b, 0xb9, 0xae, 0x6e, 0x01, 0x00, 0xa2, 0x95, + 0xa7, 0xa4, 0xca, 0x42, 0xcd, 0xaf, 0x0e, 0x58, 0xed, 0x6f, 0x40, 0x20, 0x37, 0x66, 0xc0, 0x57, + 0x12, 0x98, 0xeb, 0xd5, 0xfb, 0xda, 0xeb, 0xd5, 0x6b, 0xe5, 0xf5, 0x76, 0x69, 0x35, 0x37, 0xbf, + 0xd3, 0x47, 0xdd, 0xec, 0xce, 0x60, 0x2d, 0x67, 0xed, 0xb4, 0x76, 0xef, 0x81, 0xf9, 0x20, 0x07, + 0xd0, 0x23, 0xe2, 0xba, 0x66, 0x8d, 0xec, 0xb1, 0xa6, 0x43, 0x16, 0xdf, 0xe2, 0x65, 0x4c, 0xf9, + 0x4c, 0xbb, 0x34, 0xfa, 0x87, 0x19, 0x49, 0x36, 0xe6, 0x04, 0xcd, 0xfd, 0x90, 0xe4, 0x61, 0xd3, + 0x21, 0xd9, 0x7f, 0x91, 0xc0, 0x78, 0x58, 0x2d, 0x42, 0x30, 0x6a, 0x63, 0x8b, 0x04, 0xd5, 0xa2, + 0x21, 0xbe, 0xe1, 0x05, 0x30, 0x8e, 0x2d, 0xea, 0xdb, 0x6c, 0x31, 0x23, 0xd2, 0x7f, 0x38, 0x82, + 0x16, 0xc8, 0xd0, 0x43, 0x51, 0x94, 0x9d, 0xd3, 0x4b, 0xaf, 0x6a, 0x7d, 0x61, 0x93, 0x10, 0x47, + 0xb8, 0x77, 0xb6, 0x5d, 0xba, 0xa8, 0x2f, 0x44, 0xc3, 0xa4, 0xb1, 0x19, 0x7a, 0xa8, 0x2c, 0x83, + 0x89, 0x68, 0x11, 0x4e, 0x82, 0xb1, 0xdb, 0xa5, 0x4f, 0x1e, 0x6c, 0xcd, 0x8e, 0xc0, 0x09, 0x30, + 0xfa, 0xd0, 0xf8, 0x7c, 0x6b, 0x56, 0x2a, 0x5e, 0x6c, 0x97, 0xce, 0xeb, 0x10, 0xce, 0x9e, 0x20, + 0x85, 0x1e, 0x2a, 0x45, 0xa4, 0xf0, 0x79, 0x05, 0xb5, 0xb2, 0x26, 0x98, 0x4e, 0xe4, 0x08, 0x38, + 0x0b, 0xe4, 0x43, 0xd2, 0x0c, 0x8d, 0xe4, 0x9f, 0xb0, 0x0c, 0xc6, 0x82, 0x40, 0x95, 0x79, 0x85, + 0x02, 0x26, 0x60, 0x2d, 0x66, 0x6e, 0x4a, 0xd9, 0x4d, 0x70, 0xa1, 0x7f, 0x9a, 0xe8, 0x83, 0x79, + 0x3e, 0x8e, 0x39, 0x19, 0x97, 0xf2, 0xcb, 0x91, 0x94, 0x74, 0xc8, 0xef, 0x23, 0x65, 0x27, 0x2e, + 0xe5, 0x75, 0x8a, 0xee, 0x2e, 0x7e, 0xf1, 0x0f, 0x32, 0xed, 0xd2, 0xef, 0x66, 0xc0, 0xaf, 0x4b, + 0xb9, 0xf9, 0x12, 0xaa, 0x98, 0x0c, 0xd1, 0x7d, 0xd4, 0xed, 0x23, 0xf5, 0xed, 0x6d, 0x9b, 0x45, + 0xe9, 0xa3, 0x89, 0xaa, 0xd4, 0x72, 0x1a, 0x66, 0x55, 0xdc, 0xaa, 0xb0, 0x7b, 0x42, 0xdc, 0xf1, + 0x10, 0xa3, 0xa8, 0xca, 0x5d, 0x11, 0x59, 0xd8, 0x6e, 0xa2, 0x7d, 0x82, 0x99, 0xef, 0x12, 0x8f, + 0xcb, 0xda, 0x8d, 0xf2, 0xc8, 0xd7, 0x92, 0x68, 0x1d, 0xbe, 0x96, 0xe2, 0x85, 0xf7, 0xd7, 0x52, + 0xa2, 0x52, 0xcf, 0x3d, 0x02, 0xd7, 0x6e, 0x9b, 0x76, 0x0d, 0x51, 0x9f, 0x21, 0x8b, 0xba, 0x04, + 0xe1, 0x0a, 0xff, 0xec, 0x69, 0xa4, 0x0a, 0x75, 0xc6, 0x1c, 0xaf, 0xa8, 0x69, 0x07, 0x26, 0xab, + 0xfb, 0x95, 0x42, 0x95, 0x5a, 0x1a, 0xdf, 0x8c, 0x3c, 0xa9, 0x52, 0xaf, 0xe9, 0x31, 0x12, 0x0e, + 0xc3, 0xbd, 0xd1, 0xd7, 0xa1, 0x7e, 0x82, 0x14, 0x8e, 0xcf, 0x9d, 0x65, 0xa5, 0xba, 0xbf, 0xf6, + 0xee, 0x2a, 0x59, 0xcd, 0xaf, 0x57, 0xd6, 0xd7, 0xf3, 0xeb, 0x37, 0xd7, 0x6a, 0x79, 0xbc, 0xfa, + 0xce, 0xad, 0xfc, 0x3b, 0xeb, 0x35, 0x5c, 0xa9, 0xed, 0xbf, 0x47, 0x6e, 0xae, 0xae, 0x2b, 0xa8, + 0x55, 0x9e, 0x8e, 0x6a, 0x22, 0xa1, 0x9c, 0xf2, 0xbf, 0x13, 0x60, 0x31, 0xad, 0x49, 0x14, 0x64, + 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xef, 0x66, 0x24, 0x24, 0xab, 0x19, 0xe3, + 0x02, 0x27, 0x88, 0x18, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x36, 0xc9, 0x9a, 0x68, 0x5e, 0x78, + 0x83, 0x25, 0x19, 0x17, 0xe3, 0xbc, 0x9b, 0xb1, 0x46, 0xa6, 0x07, 0x37, 0x5e, 0x1b, 0xca, 0x48, + 0x56, 0xe5, 0x24, 0xee, 0x76, 0xb7, 0x4c, 0xec, 0xc1, 0x4d, 0x34, 0x3c, 0xa3, 0x48, 0x56, 0x47, + 0x93, 0xb8, 0x9f, 0xc7, 0x6a, 0xcc, 0x7e, 0xb8, 0x9d, 0xb2, 0x75, 0x0c, 0xc9, 0xea, 0x58, 0x0f, + 0x6e, 0x54, 0xc1, 0x7e, 0x0f, 0x5c, 0x4e, 0x6d, 0x55, 0xa2, 0x30, 0x1e, 0x47, 0xb2, 0x3a, 0x6e, + 0x2c, 0x26, 0x36, 0x2b, 0x5e, 0x23, 0xf7, 0x67, 0x8f, 0xb5, 0x61, 0xb2, 0x7a, 0xa6, 0x0f, 0x7b, + 0x84, 0xfe, 0x1e, 0x58, 0x4c, 0xb2, 0xc7, 0x1a, 0xab, 0x09, 0x24, 0xab, 0x13, 0xc6, 0x42, 0x9c, + 0xb7, 0xdc, 0x69, 0xb2, 0x7a, 0xb6, 0x2b, 0x51, 0x6a, 0x4e, 0x8a, 0xd2, 0x3a, 0xb1, 0x5d, 0xc9, + 0xf2, 0x3a, 0xb5, 0x5d, 0xf1, 0x66, 0x0c, 0x20, 0x59, 0x3d, 0x9b, 0xdc, 0xae, 0x72, 0xb7, 0x31, + 0xeb, 0x7b, 0x4c, 0x1d, 0x73, 0xa7, 0x90, 0xac, 0x4e, 0xf7, 0x1e, 0x53, 0x64, 0x2d, 0x49, 0x5b, + 0x1b, 0x2b, 0xd4, 0xce, 0xbe, 0x42, 0xa1, 0x96, 0xd8, 0x9b, 0x6e, 0xb1, 0xf6, 0x21, 0x58, 0x4a, + 0xed, 0x4d, 0xf2, 0x50, 0xa6, 0x91, 0xac, 0xce, 0x18, 0x97, 0x12, 0xbb, 0x93, 0xe8, 0x8f, 0x06, + 0x08, 0xe8, 0x38, 0xc5, 0x39, 0x24, 0xab, 0xb3, 0xfd, 0x04, 0x0c, 0x74, 0xe6, 0x44, 0x1f, 0x35, + 0x83, 0x64, 0x75, 0x2e, 0x75, 0x3a, 0xb1, 0x5d, 0xea, 0xcb, 0x1c, 0xeb, 0xd4, 0x64, 0x15, 0xf6, + 0x32, 0x87, 0xc8, 0xc5, 0x7a, 0xbb, 0x44, 0xf4, 0x2a, 0xc4, 0x27, 0x48, 0x19, 0xe4, 0x58, 0x4a, + 0x11, 0x7d, 0x9f, 0xb9, 0x3e, 0xb9, 0x81, 0x82, 0xff, 0xef, 0xe3, 0x86, 0x17, 0x0e, 0x9e, 0xdc, + 0x48, 0xb3, 0xc5, 0xf4, 0xe6, 0x7c, 0xab, 0x37, 0x90, 0x7e, 0x03, 0xad, 0x3d, 0x41, 0x2d, 0x25, + 0x0b, 0x46, 0xcb, 0xb4, 0xd6, 0xec, 0x97, 0xb9, 0x95, 0x2f, 0xc1, 0x4c, 0xd8, 0xbe, 0xfe, 0xbc, + 0xc9, 0xea, 0x82, 0xec, 0x1c, 0xc8, 0x44, 0x8f, 0x41, 0x46, 0xc6, 0xe4, 0x21, 0x6a, 0xb4, 0x86, + 0x19, 0x0e, 0xb3, 0xc7, 0x5b, 0xa7, 0x9e, 0x3b, 0x17, 0x62, 0x08, 0x16, 0xe5, 0x27, 0x12, 0x98, + 0xf9, 0xdc, 0xa9, 0x61, 0x46, 0x1e, 0xe9, 0x06, 0xf9, 0xa1, 0x4f, 0x3c, 0x06, 0x37, 0x80, 0x8c, + 0x2b, 0x81, 0x12, 0x53, 0xfa, 0xea, 0xd0, 0xb9, 0xc8, 0xe0, 0xdc, 0xf0, 0x7d, 0x30, 0xe5, 0x0b, + 0xb9, 0xe2, 0x55, 0x31, 0x54, 0xad, 0xb7, 0x09, 0xb9, 0x6d, 0x92, 0x46, 0xed, 0x53, 0xec, 0x1d, + 0x1a, 0x20, 0x20, 0xe7, 0xdf, 0x39, 0x04, 0xa6, 0x62, 0xbe, 0xc9, 0xcb, 0x83, 0xc7, 0x5b, 0xc6, + 0xfd, 0xd9, 0x11, 0x78, 0x06, 0xc8, 0xf7, 0x77, 0xb6, 0x66, 0x25, 0xfd, 0x3f, 0x14, 0x70, 0x31, + 0x0d, 0xfc, 0x80, 0xb8, 0x47, 0x66, 0x95, 0xc0, 0x7f, 0x97, 0xc1, 0xf8, 0x86, 0xcb, 0xf7, 0x1c, + 0x0e, 0xaf, 0x7d, 0x76, 0x78, 0x16, 0xe5, 0x7f, 0x32, 0xbf, 0xfa, 0x8f, 0xff, 0xf6, 0x93, 0xcc, + 0x37, 0x19, 0xe5, 0x3f, 0x33, 0xda, 0xd1, 0x6a, 0xf4, 0x82, 0xdb, 0xef, 0xfd, 0x56, 0x3b, 0x89, + 0xa5, 0x8f, 0x96, 0x76, 0x12, 0xcf, 0x08, 0x2d, 0xed, 0x24, 0xe6, 0x9d, 0x2d, 0xcd, 0x23, 0x0e, + 0x76, 0x31, 0xa3, 0xae, 0x76, 0xe2, 0x27, 0x16, 0x4e, 0x62, 0x9e, 0xd4, 0xd2, 0x4e, 0x12, 0x17, + 0x2a, 0x1a, 0xc7, 0xd6, 0xbb, 0xee, 0xda, 0xd2, 0x4e, 0xe2, 0xb1, 0xed, 0x7b, 0x1e, 0x73, 0x1d, + 0x97, 0xec, 0x9b, 0xc7, 0x5a, 0xae, 0x15, 0x80, 0xc4, 0xd8, 0xbc, 0xb4, 0x1c, 0x2f, 0x0d, 0xe4, + 0xa5, 0x18, 0x92, 0x4a, 0x0e, 0xea, 0x51, 0x5b, 0xda, 0x49, 0x37, 0x56, 0xb5, 0xb4, 0x93, 0xd4, + 0x9b, 0x0e, 0xe7, 0xec, 0xfb, 0xd8, 0x93, 0xe0, 0x8b, 0xd5, 0xee, 0x2d, 0xf8, 0xc7, 0x12, 0x00, + 0xc1, 0x81, 0x8b, 0xeb, 0xf1, 0xed, 0x1c, 0x7a, 0x4e, 0x9c, 0xf9, 0x35, 0x65, 0xf9, 0x94, 0x13, + 0x2f, 0x4a, 0x39, 0xf8, 0x4b, 0x60, 0xfc, 0x13, 0x4a, 0x0f, 0x7d, 0x07, 0xce, 0x14, 0x3c, 0xbf, + 0xa2, 0x17, 0xb6, 0x6b, 0xe1, 0x9d, 0x7e, 0x15, 0xe4, 0x82, 0x40, 0x56, 0xe1, 0x77, 0x4e, 0xf5, + 0x35, 0x5e, 0x17, 0xb5, 0xe0, 0x6f, 0x48, 0x60, 0x3c, 0xb8, 0xe3, 0xaf, 0xb2, 0x35, 0x03, 0x9e, + 0x8a, 0x94, 0x55, 0xa1, 0xc5, 0x77, 0xb3, 0x2f, 0xa9, 0x05, 0xdf, 0x86, 0xff, 0x92, 0xc0, 0x44, + 0x14, 0x6c, 0xe0, 0xca, 0xa9, 0xaa, 0xa4, 0xe2, 0xd2, 0x40, 0x4d, 0xfe, 0x48, 0x12, 0xaa, 0xfc, + 0x9e, 0x94, 0xcd, 0x69, 0x47, 0xfa, 0x8b, 0x75, 0xc1, 0x15, 0x52, 0x08, 0xf4, 0xe1, 0x51, 0xea, + 0xf1, 0xaa, 0x3e, 0x34, 0xcb, 0x8a, 0xfe, 0x5d, 0xed, 0x48, 0xc7, 0x2f, 0xcb, 0x23, 0xe5, 0xe0, + 0x9f, 0x4a, 0x60, 0x7c, 0x93, 0x34, 0x08, 0x23, 0xbd, 0xc7, 0x3f, 0xc8, 0x26, 0xb7, 0x5d, 0x2a, + 0x55, 0xae, 0x83, 0x73, 0x00, 0x94, 0x1c, 0xf3, 0x1e, 0x69, 0x96, 0x7c, 0x56, 0x87, 0x23, 0xe0, + 0x22, 0x18, 0xbf, 0xcf, 0x3f, 0x75, 0x38, 0x0d, 0x46, 0x5d, 0x82, 0x6b, 0x60, 0xec, 0x99, 0x6b, + 0x32, 0xf2, 0xf4, 0x3c, 0x38, 0x77, 0x9c, 0x37, 0x5d, 0x97, 0x2b, 0xe1, 0x99, 0x95, 0x06, 0x81, + 0x19, 0x14, 0x6c, 0x8b, 0x9a, 0x7b, 0x59, 0x3f, 0xf9, 0x57, 0x09, 0x4c, 0xdc, 0x21, 0xec, 0x33, + 0x9f, 0xb8, 0xcd, 0xff, 0x4f, 0x4f, 0xf9, 0xb1, 0xd4, 0x2e, 0x3d, 0x54, 0x76, 0xc0, 0x52, 0xbf, + 0x0e, 0xa0, 0x03, 0x38, 0x64, 0xe5, 0xff, 0x85, 0x54, 0x19, 0x11, 0xf6, 0x15, 0xe0, 0x8d, 0xd3, + 0xec, 0xfb, 0x21, 0x07, 0x88, 0xac, 0xfc, 0xf1, 0x18, 0x98, 0xbd, 0x43, 0x58, 0x94, 0xf0, 0x03, + 0xf0, 0x5b, 0xc3, 0x67, 0xb9, 0x90, 0x3f, 0xfb, 0xea, 0xac, 0xca, 0x8f, 0x46, 0x85, 0x05, 0xff, + 0x2d, 0xc3, 0x6f, 0xe4, 0x53, 0x6c, 0xe8, 0x54, 0x11, 0x61, 0xbc, 0xec, 0xd7, 0x8d, 0xb4, 0xd2, + 0x6b, 0xa9, 0xe4, 0x32, 0xb0, 0x9d, 0xe8, 0x59, 0xf3, 0x5f, 0xb4, 0x98, 0x0c, 0xfa, 0x2f, 0x28, + 0xf8, 0xfb, 0xaf, 0x0e, 0xe4, 0x4d, 0xa4, 0xa9, 0xc1, 0x05, 0x79, 0x2f, 0x5f, 0xb7, 0xe0, 0xee, + 0x6b, 0xc8, 0x40, 0xc0, 0xde, 0x2c, 0x34, 0xa0, 0xca, 0x1d, 0xb0, 0x3c, 0xd0, 0x4e, 0xef, 0x45, + 0xa8, 0x89, 0x2c, 0x09, 0x7f, 0x6b, 0x14, 0x8c, 0x6e, 0x55, 0xeb, 0x14, 0x0e, 0xfa, 0x71, 0xc4, + 0xf3, 0x2b, 0x85, 0xa0, 0xdf, 0x88, 0x42, 0xc6, 0x4b, 0x53, 0x2a, 0x3f, 0x95, 0xdb, 0xa5, 0xbf, + 0xcd, 0x80, 0x09, 0x52, 0xad, 0x53, 0xe4, 0x3a, 0x55, 0x38, 0xf7, 0xc0, 0xb7, 0x2c, 0xec, 0x36, + 0x8b, 0x68, 0x2b, 0x9c, 0xca, 0xce, 0x6e, 0x76, 0xdf, 0x68, 0xc4, 0xac, 0xb2, 0x09, 0x60, 0xf2, + 0xa2, 0x0a, 0xfd, 0x86, 0xbc, 0x9e, 0x77, 0x6f, 0x01, 0x59, 0x5f, 0x59, 0x81, 0xba, 0xb2, 0x02, + 0x66, 0xb1, 0x13, 0x3c, 0x2e, 0x98, 0xd4, 0xd6, 0x9e, 0x7a, 0xd4, 0x86, 0x4b, 0x27, 0x4a, 0x54, + 0x06, 0x2b, 0xac, 0x4e, 0x90, 0x69, 0x3b, 0x7e, 0xf8, 0x43, 0xa0, 0xd2, 0xba, 0xfb, 0x08, 0xc8, + 0xef, 0xac, 0xac, 0xc1, 0xfb, 0xe0, 0x5d, 0x83, 0x30, 0xdf, 0xb5, 0x49, 0x0d, 0x3d, 0xab, 0x13, + 0x1b, 0x71, 0x4a, 0x97, 0x78, 0xd4, 0x77, 0xab, 0x04, 0x99, 0x1e, 0x62, 0xc4, 0x72, 0xa8, 0x8b, + 0x5d, 0xb3, 0xd1, 0x44, 0xbe, 0x8d, 0x8f, 0xb0, 0xd9, 0xc0, 0x95, 0x06, 0x29, 0xe4, 0x16, 0xc0, + 0xc4, 0x71, 0xde, 0xf6, 0xad, 0x0a, 0x71, 0xe1, 0xe4, 0xdc, 0x88, 0xf8, 0xef, 0x17, 0x3e, 0xba, + 0xfb, 0x3e, 0x90, 0xd7, 0x57, 0xd6, 0xe1, 0x3a, 0xc8, 0xbd, 0x40, 0x6e, 0x8d, 0x12, 0x0f, 0xd9, + 0x94, 0x21, 0x72, 0x6c, 0x7a, 0xac, 0x00, 0xc7, 0x81, 0x78, 0x72, 0x13, 0x17, 0xf5, 0xc9, 0xe9, + 0xa1, 0x86, 0x6f, 0xb5, 0x76, 0x12, 0x1c, 0xee, 0xe3, 0x4b, 0xca, 0x6c, 0x3c, 0xbb, 0xf0, 0xb5, + 0x62, 0xf0, 0x42, 0xf3, 0x18, 0xc2, 0x9e, 0x25, 0xf8, 0x17, 0x12, 0x38, 0xbb, 0x49, 0x88, 0x23, + 0x7e, 0x87, 0xe2, 0x13, 0xdf, 0x4e, 0x21, 0xf3, 0xa1, 0xb0, 0xed, 0x96, 0xb2, 0x7e, 0x6a, 0x9a, + 0x48, 0xfc, 0xc4, 0x5d, 0xe0, 0xdd, 0x89, 0xc8, 0x6f, 0x25, 0x00, 0x76, 0x68, 0xd9, 0xb4, 0x6b, + 0xa6, 0x7d, 0xe0, 0xc1, 0x4b, 0x3d, 0x59, 0x60, 0x33, 0xfc, 0xeb, 0x80, 0x81, 0x09, 0x62, 0x04, + 0x3e, 0x02, 0x67, 0x1e, 0x9a, 0x16, 0xa1, 0x3e, 0x83, 0x03, 0x88, 0x06, 0x32, 0x5f, 0x16, 0xea, + 0x2f, 0xc0, 0xf9, 0xf8, 0x7e, 0xb2, 0x50, 0x58, 0x1d, 0xcc, 0x6e, 0xb9, 0x2e, 0x75, 0x79, 0xeb, + 0xb4, 0x49, 0x18, 0x36, 0x1b, 0xde, 0xd0, 0x00, 0xd7, 0x04, 0xc0, 0x9b, 0x70, 0x29, 0x71, 0x60, + 0x5c, 0xea, 0x33, 0x93, 0xd5, 0x6b, 0xa1, 0xd4, 0xdf, 0x94, 0x00, 0xbc, 0x43, 0x58, 0xba, 0x55, + 0x3b, 0xbd, 0xca, 0x49, 0x71, 0x0c, 0x54, 0xe3, 0x6d, 0xa1, 0xc6, 0x15, 0xe5, 0x52, 0x5c, 0x0d, + 0xae, 0x41, 0x85, 0xd6, 0x9a, 0xda, 0x09, 0xaf, 0x35, 0x44, 0x4b, 0x07, 0x7f, 0x4d, 0x02, 0x73, + 0xbb, 0xd4, 0x63, 0x5c, 0xa2, 0x60, 0x15, 0x8a, 0xbc, 0x5c, 0x57, 0x38, 0x10, 0x5d, 0x13, 0xe8, + 0xd7, 0x95, 0x6b, 0x71, 0x74, 0x87, 0x7a, 0x8c, 0x6b, 0x20, 0x7e, 0x59, 0x0c, 0xd4, 0xe8, 0x38, + 0xc5, 0xdf, 0x48, 0x60, 0x7e, 0xa3, 0x4e, 0xaa, 0x87, 0x51, 0x82, 0xdf, 0xc5, 0x2e, 0xb6, 0xbc, + 0x6f, 0xc9, 0xa7, 0xef, 0x08, 0x75, 0x4b, 0xf0, 0xc3, 0xd3, 0x7c, 0xda, 0x11, 0x5a, 0x69, 0x07, + 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0xcf, 0x12, 0x78, 0x43, 0x98, 0x11, 0x3c, 0xb0, 0xf2, 0x76, 0xf4, + 0x67, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x7b, 0x08, 0x83, 0xc2, 0x36, 0x4a, 0xfc, 0x65, + 0x4d, 0xca, 0x38, 0x7a, 0xd8, 0x82, 0x7f, 0x2f, 0x81, 0xf3, 0xc2, 0x34, 0xee, 0x2c, 0x3f, 0x33, + 0x8b, 0x94, 0xe2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xd9, 0xbe, 0xb6, 0x8a, 0xc9, 0x3f, 0xba, 0x81, + 0x5f, 0x49, 0x60, 0xe9, 0xfe, 0x11, 0x71, 0x45, 0x49, 0x6c, 0x10, 0xcf, 0xa1, 0xb6, 0x47, 0x36, + 0xa8, 0x78, 0xe8, 0x7e, 0xd8, 0x74, 0xc8, 0xc0, 0xab, 0xbf, 0xd4, 0x33, 0x1f, 0x7b, 0xe2, 0x53, + 0xb6, 0xda, 0x25, 0x58, 0x4c, 0x24, 0x31, 0x46, 0x8e, 0x99, 0x50, 0x3f, 0x07, 0xd5, 0xf8, 0x85, + 0xa0, 0x11, 0xb8, 0x1b, 0x82, 0x57, 0x03, 0x70, 0xd6, 0x74, 0x48, 0xf6, 0xaf, 0xa5, 0x76, 0xe9, + 0x2f, 0x25, 0xb8, 0x3f, 0xe0, 0xd9, 0x22, 0xfe, 0x63, 0x09, 0xca, 0xe7, 0xd1, 0xb3, 0xba, 0x59, + 0xad, 0x23, 0xaf, 0x4e, 0xfd, 0x46, 0x4d, 0x24, 0xa4, 0x0a, 0x41, 0xbe, 0x47, 0x6a, 0xc8, 0xb4, + 0x91, 0xd3, 0xc0, 0x55, 0x82, 0xe8, 0xbe, 0x48, 0x5d, 0x35, 0x5a, 0xf5, 0x2d, 0x62, 0x07, 0xcd, + 0x30, 0xaa, 0x52, 0x8b, 0x0f, 0xae, 0x64, 0x3f, 0x03, 0xcb, 0xfd, 0xea, 0x6d, 0x9e, 0x58, 0xa2, + 0x87, 0x92, 0x61, 0x1f, 0xdb, 0x9f, 0x82, 0xf3, 0x55, 0x6c, 0x91, 0xc6, 0x06, 0xf6, 0x48, 0x28, + 0x83, 0x77, 0xf5, 0xd0, 0x00, 0x63, 0xc1, 0x1f, 0x0c, 0x0c, 0x1b, 0x5a, 0x2f, 0x89, 0x4d, 0x9c, + 0x87, 0x73, 0x89, 0xd0, 0xca, 0x97, 0xf4, 0x1f, 0x80, 0xa5, 0x92, 0x4d, 0x59, 0x9d, 0xb8, 0x21, + 0x12, 0x0f, 0x67, 0xb1, 0x34, 0xf3, 0x41, 0x22, 0xe9, 0x0c, 0x0b, 0x3c, 0x52, 0xfe, 0xf3, 0xc9, + 0x76, 0xe9, 0x4f, 0x26, 0xe1, 0x37, 0x12, 0x98, 0x2f, 0xa1, 0x72, 0xf0, 0xf3, 0x48, 0xcc, 0x3b, + 0xbf, 0x00, 0xe7, 0x0f, 0x8c, 0xdd, 0x8d, 0xfc, 0x9d, 0xc0, 0x74, 0xe4, 0xb8, 0xf4, 0x29, 0xa9, + 0xb2, 0x61, 0xb7, 0x2c, 0x3b, 0x6b, 0x53, 0x9b, 0x7c, 0x14, 0x9a, 0xc6, 0xa9, 0x73, 0x3f, 0x00, + 0xe7, 0xcb, 0x0f, 0x36, 0xd1, 0x5a, 0x7e, 0xa3, 0x81, 0x7d, 0x8f, 0xa0, 0x4f, 0xcc, 0x2a, 0xb1, + 0x3d, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0xab, 0x34, 0x68, 0x45, 0xb3, 0xb0, 0xc7, 0x88, 0xab, 0x7d, + 0xb2, 0xbd, 0xb1, 0xb5, 0xf3, 0x60, 0xab, 0xc0, 0x8e, 0x99, 0x2e, 0xaf, 0x16, 0x56, 0x8a, 0x08, + 0x2c, 0x1c, 0xe7, 0x3d, 0x6a, 0x11, 0x61, 0x4d, 0xf7, 0x0b, 0x9e, 0xc9, 0x8e, 0x35, 0x71, 0xad, + 0x86, 0x73, 0xb2, 0x94, 0x19, 0xd5, 0x7b, 0x2a, 0x33, 0xfd, 0x42, 0x7c, 0xe6, 0x38, 0xbf, 0x4f, + 0x69, 0xde, 0x32, 0x2d, 0x52, 0xec, 0xa1, 0x2c, 0x0e, 0xa0, 0x34, 0x76, 0x79, 0x95, 0xb5, 0x06, + 0xb7, 0xc1, 0x9d, 0xde, 0x2a, 0xcb, 0xf7, 0x88, 0xdb, 0xad, 0xb0, 0xea, 0xf8, 0x88, 0x20, 0x87, + 0xb8, 0x96, 0xe9, 0x79, 0xdc, 0x75, 0x19, 0x45, 0xb8, 0x5a, 0x25, 0x9e, 0x97, 0xa8, 0xc8, 0x0a, + 0xc6, 0x6b, 0xd4, 0x6d, 0x67, 0x8c, 0x8f, 0x81, 0xbc, 0xbe, 0x7a, 0x13, 0x96, 0xc0, 0xf4, 0xf6, + 0xdb, 0x16, 0xc2, 0x88, 0x11, 0xec, 0x50, 0x56, 0x80, 0x2b, 0xa0, 0x90, 0x1d, 0xea, 0x85, 0xfc, + 0xf1, 0xef, 0xcb, 0x60, 0x06, 0x4c, 0x96, 0xb1, 0x67, 0x56, 0x45, 0x37, 0x9e, 0x99, 0x90, 0xc0, + 0x9f, 0x49, 0x89, 0x06, 0xfd, 0x2b, 0x69, 0x22, 0x93, 0x9d, 0xfc, 0x22, 0x5f, 0xda, 0xdd, 0xce, + 0xdf, 0x23, 0x4d, 0x94, 0xb9, 0xab, 0x82, 0xa5, 0xe3, 0x3c, 0xb6, 0xf0, 0x73, 0x6a, 0xe7, 0xb1, + 0x63, 0x86, 0x50, 0x79, 0xec, 0xb3, 0x3a, 0x0f, 0x0a, 0x70, 0x22, 0x3b, 0x4e, 0xf9, 0x40, 0xbf, + 0xfb, 0x8b, 0xe0, 0xcd, 0x41, 0x94, 0xd4, 0x35, 0x9f, 0x13, 0x17, 0x7e, 0x90, 0xfb, 0x39, 0x30, + 0x03, 0x46, 0x05, 0xdf, 0x99, 0xec, 0x18, 0xa3, 0x87, 0xc4, 0x06, 0xd7, 0xc1, 0x52, 0x97, 0xc4, + 0x20, 0x9e, 0xdf, 0x60, 0x0f, 0x59, 0x63, 0xdb, 0x7e, 0xc0, 0x63, 0x4f, 0xcd, 0xeb, 0xd4, 0xbf, + 0x3b, 0x1f, 0x81, 0x7f, 0x92, 0x3a, 0xaf, 0x07, 0x7f, 0x27, 0x4d, 0xc8, 0xea, 0xa8, 0x7e, 0x35, + 0xf2, 0xb9, 0x98, 0x83, 0x6a, 0x42, 0x1f, 0xad, 0x23, 0xb4, 0xb8, 0x3c, 0x98, 0x48, 0xa8, 0x50, + 0xfe, 0x15, 0x90, 0x0d, 0x1e, 0x23, 0x20, 0xbc, 0xe3, 0x62, 0x9b, 0x79, 0x88, 0x0f, 0xc2, 0xb3, + 0x04, 0x4b, 0xe1, 0x13, 0x05, 0x9c, 0x0f, 0x17, 0xc5, 0x28, 0x5a, 0xdd, 0x00, 0x63, 0xb8, 0x66, + 0x99, 0x36, 0x2c, 0x26, 0x58, 0xed, 0x5a, 0x82, 0x4c, 0xb8, 0x06, 0x27, 0x33, 0x3d, 0xc6, 0x6b, + 0xc9, 0x23, 0xde, 0x32, 0xec, 0x53, 0xd7, 0x12, 0xde, 0x57, 0x59, 0x06, 0xd3, 0xf1, 0x83, 0x19, + 0x49, 0x3f, 0x9b, 0x54, 0xae, 0x0f, 0x7c, 0x38, 0x49, 0x93, 0xba, 0xdb, 0xe0, 0xe2, 0xa7, 0xdd, + 0x68, 0x19, 0x8f, 0x01, 0xc3, 0xde, 0xfd, 0xe7, 0x97, 0x01, 0x3c, 0xce, 0xc7, 0x67, 0xf8, 0x25, + 0x81, 0x63, 0x59, 0xb9, 0x82, 0xdd, 0xe7, 0x2a, 0xb8, 0x98, 0x5a, 0xac, 0xe0, 0xe7, 0xf9, 0x86, + 0xe9, 0x31, 0x38, 0xad, 0x4f, 0x81, 0xb1, 0xac, 0x4c, 0x6d, 0x02, 0x32, 0x48, 0x7a, 0x3c, 0xd9, + 0x71, 0xc7, 0xca, 0xb8, 0x08, 0x63, 0x6b, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xcf, 0x9c, + 0x94, 0x33, 0x2c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1085,6 +1091,7 @@ type ABitOfEverythingServiceClient interface { CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) + OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) } type aBitOfEverythingServiceClient struct { @@ -1257,6 +1264,15 @@ func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context return out, nil } +func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) { + out := new(wrappers.StringValue) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ABitOfEverythingServiceServer is the server API for ABitOfEverythingService service. type ABitOfEverythingServiceServer interface { // Create a new ABitOfEverything @@ -1287,6 +1303,7 @@ type ABitOfEverythingServiceServer interface { CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) + OverwriteResponseContentType(context.Context, *empty.Empty) (*wrappers.StringValue, error) } // UnimplementedABitOfEverythingServiceServer can be embedded to have forward compatible implementations. @@ -1347,6 +1364,9 @@ func (*UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams func (*UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckPostQueryParams not implemented") } +func (*UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(ctx context.Context, req *empty.Empty) (*wrappers.StringValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method OverwriteResponseContentType not implemented") +} func RegisterABitOfEverythingServiceServer(s *grpc.Server, srv ABitOfEverythingServiceServer) { s.RegisterService(&_ABitOfEverythingService_serviceDesc, srv) @@ -1676,6 +1696,24 @@ func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx return interceptor(ctx, in, info, handler) } +func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(empty.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/OverwriteResponseContentType", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*empty.Empty)) + } + return interceptor(ctx, in, info, handler) +} + var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.examplepb.ABitOfEverythingService", HandlerType: (*ABitOfEverythingServiceServer)(nil), @@ -1752,6 +1790,10 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ MethodName: "CheckPostQueryParams", Handler: _ABitOfEverythingService_CheckPostQueryParams_Handler, }, + { + MethodName: "OverwriteResponseContentType", + Handler: _ABitOfEverythingService_OverwriteResponseContentType_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go index eaa39346919..2135d7f8a54 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2053,6 +2053,24 @@ func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Co } +func request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, client ABitOfEverythingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := client.OverwriteResponseContentType(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ABitOfEverythingService_OverwriteResponseContentType_0(ctx context.Context, marshaler runtime.Marshaler, server ABitOfEverythingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + msg, err := server.OverwriteResponseContentType(ctx, &protoReq) + return msg, metadata, err + +} + func request_CamelCaseServiceName_Empty_0(ctx context.Context, marshaler runtime.Marshaler, client CamelCaseServiceNameClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata @@ -2496,6 +2514,26 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ABitOfEverythingService_OverwriteResponseContentType_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -2985,6 +3023,26 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ABitOfEverythingService_OverwriteResponseContentType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ABitOfEverythingService_OverwriteResponseContentType_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ABitOfEverythingService_OverwriteResponseContentType_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -3030,6 +3088,8 @@ var ( pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "nested_enum", "single_nested.ok"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "overwriteresponsecontenttype"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -3074,6 +3134,8 @@ var ( forward_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.ForwardResponseMessage forward_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.ForwardResponseMessage + + forward_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.ForwardResponseMessage ) // RegisterCamelCaseServiceNameHandlerFromEndpoint is same as RegisterCamelCaseServiceNameHandler but diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/proto/examplepb/a_bit_of_everything.proto index 79d9363fe0d..b5e394b2970 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/proto/examplepb/a_bit_of_everything.proto @@ -6,6 +6,7 @@ import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; +import "google/protobuf/wrappers.proto"; import "examples/proto/pathenum/path_enum.proto"; import "examples/proto/sub/message.proto"; import "examples/proto/sub2/message.proto"; @@ -526,6 +527,14 @@ service ABitOfEverythingService { body: "single_nested" }; } + rpc OverwriteResponseContentType(google.protobuf.Empty) returns (google.protobuf.StringValue) { + option (google.api.http) = { + get: "/v2/example/overwriteresponsecontenttype" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + produces: "application/text" + }; + } } // camelCase and lowercase service names are valid but not recommended (use TitleCase instead) diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/proto/examplepb/a_bit_of_everything.swagger.json index 61f298f170a..5dc22410e8d 100644 --- a/examples/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/proto/examplepb/a_bit_of_everything.swagger.json @@ -2113,6 +2113,48 @@ ] } }, + "/v2/example/overwriteresponsecontenttype": { + "get": { + "operationId": "OverwriteResponseContentType", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "string" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "tags": [ + "ABitOfEverythingService" + ], + "produces": [ + "application/text" + ] + } + }, "/v2/example/postwithemptybody/{name}": { "post": { "operationId": "PostWithEmptyBody", diff --git a/examples/server/BUILD.bazel b/examples/server/BUILD.bazel index 61d14a2fde6..e5b6721790a 100644 --- a/examples/server/BUILD.bazel +++ b/examples/server/BUILD.bazel @@ -27,6 +27,7 @@ go_library( "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", + "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", diff --git a/examples/server/a_bit_of_everything.go b/examples/server/a_bit_of_everything.go index 892802fe3fc..0b87ce02639 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/server/a_bit_of_everything.go @@ -10,6 +10,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/empty" + "github.com/golang/protobuf/ptypes/wrappers" examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" @@ -314,3 +315,7 @@ func (s *_ABitOfEverythingServer) CheckNestedEnumGetQueryParams(ctx context.Cont func (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { return msg, nil } + +func (s *_ABitOfEverythingServer) OverwriteResponseContentType(ctx context.Context, msg *empty.Empty) (*wrappers.StringValue, error) { + return &wrappers.StringValue{}, nil +} diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index f7715c8a3ff..5a668783c8e 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -989,6 +989,11 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re operationObject.extensions = exts } + if len(opts.Produces) > 0 { + operationObject.Produces = make([]string, len(opts.Produces)) + copy(operationObject.Produces, opts.Produces) + } + // TODO(ivucica): add remaining fields of operation object } diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 47d099806f4..255f53c77ca 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -115,6 +115,7 @@ type swaggerOperationObject struct { Parameters swaggerParametersObject `json:"parameters,omitempty"` Tags []string `json:"tags,omitempty"` Deprecated bool `json:"deprecated,omitempty"` + Produces []string `json:"produces,omitempty"` Security *[]swaggerSecurityRequirementObject `json:"security,omitempty"` ExternalDocs *swaggerExternalDocumentationObject `json:"externalDocs,omitempty"` From 926b87df79a895741405bb079dfcb7cbb62c85ba Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 14 Feb 2020 10:29:26 +0000 Subject: [PATCH 0260/1518] Add bazel gazell to CONTRIBUTING This is the second time I've seen the previous command in isolation not entirely resolving the new files used. This should fix it. --- CONTRIBUTING.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8772fd3ad2a..e2ff6602e2e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,8 +7,8 @@ Here's the recommended process of contribution. 2. `cd $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway` 3. hack, hack, hack... 4. Make sure that your change follows best practices in Go - * [Effective Go](https://golang.org/doc/effective_go.html) - * [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) + - [Effective Go](https://golang.org/doc/effective_go.html) + - [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) 5. Make sure that `go test ./...` passes. 6. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) 7. Open a pull request in Github @@ -17,6 +17,7 @@ When you work on a larger contribution, it is also recommended that you get in t with us through the issue tracker. ### Code reviews + All submissions, including submissions by project members, require review. ### I want to regenerate the files after making changes! @@ -30,6 +31,8 @@ docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env: make examples' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' +docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ + l.gcr.io/google/bazel -c 'bazel run :gazelle' ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. From a084954bffbbb1f3a2b2e7dd9586f97dd0a71fd5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 14 Feb 2020 10:44:27 +0000 Subject: [PATCH 0261/1518] Improve installation instructions --- README.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 85aaa7b6b0f..4b9aa56b23b 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,31 @@ manager or by downloading one of the releases from the official repository: https://github.com/protocolbuffers/protobuf/releases +The following instructions assume you are using +[Go Modules](https://github.com/golang/go/wiki/Modules) for dependency +management. Use a +[tool dependency](https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module) +to track the versions of the following executable packages: + +```go +// +build tools + +package tools + +import ( + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" + _ "github.com/golang/protobuf/protoc-gen-go" +) +``` -Then use `go get -u` to download the following packages: +Run `go mod tidy` to resolve the versions. Install by running ```sh -go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -go get -u github.com/golang/protobuf/protoc-gen-go +$ go install \ + github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \ + github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger \ + github.com/golang/protobuf/protoc-gen-go ``` This will place three binaries in your `$GOBIN`; From 61d4c1d65c639306d88c6e26669fcd6a6edb14f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2020 11:48:09 +0000 Subject: [PATCH 0262/1518] Bump nokogiri from 1.10.4 to 1.10.8 in /docs (#1140) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.4 to 1.10.8. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.4...v1.10.8) Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 9a6ac6f8c32..74d3327d9ad 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -209,7 +209,7 @@ GEM minitest (5.11.3) multipart-post (2.0.0) net-dns (0.8.0) - nokogiri (1.10.4) + nokogiri (1.10.8) mini_portile2 (~> 2.4.0) octokit (4.8.0) sawyer (~> 0.8.0, >= 0.5.3) From 000dde55db19106cdd9ce34d2e54510edb78bf70 Mon Sep 17 00:00:00 2001 From: wp0pw Date: Tue, 25 Feb 2020 15:47:52 +0000 Subject: [PATCH 0263/1518] Configurable query parameters parser (#1138) * #1128 make it possible to configure query param parser implementation * Apply suggestions from code review Makes names more consistent and improves docs Co-Authored-By: Johan Brandhorst * #1128 make configured parser a global parser * update docs for configuring query parser Co-Authored-By: Johan Brandhorst * #1128 unexport default query parameter parser and rename mux option Co-authored-by: Johan Brandhorst Fixes #1128 --- runtime/mux.go | 9 +++++++++ runtime/query.go | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/runtime/mux.go b/runtime/mux.go index 1da3a58854d..6cf5b1d6fb6 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -55,6 +55,15 @@ func WithForwardResponseOption(forwardResponseOption func(context.Context, http. } } +// SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters. +// Configuring this will mean the generated swagger output is no longer correct, and it should be +// done with careful consideration. +func SetQueryParameterParser(queryParameterParser QueryParameterParser) ServeMuxOption { + return func(serveMux *ServeMux) { + currentQueryParser = queryParameterParser + } +} + // HeaderMatcherFunc checks whether a header key should be forwarded to/from gRPC context. type HeaderMatcherFunc func(string) (string, bool) diff --git a/runtime/query.go b/runtime/query.go index 80ff21c3a4c..ba66842c330 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -17,9 +17,24 @@ import ( var valuesKeyRegexp = regexp.MustCompile("^(.*)\\[(.*)\\]$") -// PopulateQueryParameters populates "values" into "msg". -// A value is ignored if its key starts with one of the elements in "filter". +var currentQueryParser QueryParameterParser = &defaultQueryParser{} + +// QueryParameterParser defines interface for all query parameter parsers +type QueryParameterParser interface { + Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error +} + +// PopulateQueryParameters parses query parameters +// into "msg" using current query parser func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { + return currentQueryParser.Parse(msg, values, filter) +} + +type defaultQueryParser struct{} + +// Parse populates "values" into "msg". +// A value is ignored if its key starts with one of the elements in "filter". +func (*defaultQueryParser) Parse(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { for key, values := range values { match := valuesKeyRegexp.FindStringSubmatch(key) if len(match) == 3 { From 9aff3552347d758821bca2c628f55f8e11d0e0c7 Mon Sep 17 00:00:00 2001 From: Wiliam Souza Date: Sat, 29 Feb 2020 05:09:18 -0300 Subject: [PATCH 0264/1518] Fix customizing your gateway documentation CustomMatcher example (#1142) * Fix customizing your gateway documentation CustomMatcher example * Add more documentation about mapping from HTTP request headers to gRPC client metadata --- docs/_docs/customizingyourgateway.md | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 49dcb1660c4..a461747fb1a 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -87,9 +87,9 @@ You might not like [the default mapping rule](http://godoc.org/github.com/grpc-e ```go func CustomMatcher(key string) (string, bool) { switch key { - case "x-custom-header1": + case "X-Custom-Header1": return key, true - case "x-custom-header2": + case "X-Custom-Header2": return "custom-header2", true default: return key, false @@ -98,8 +98,39 @@ You might not like [the default mapping rule](http://godoc.org/github.com/grpc-e ... mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) - ``` +To keep the [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) alongside with your own rules write: + +```go +func CustomMatcher(key string) (string, bool) { + switch key { + case "X-User-Id": + return key, true + default: + return runtime.DefaultHeaderMatcher(key) + } +} +``` +It will work with both: + +```bash +curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +``` +and: +```bash +curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +``` +To access this header on gRPC server side use: +```go +... +userID := "" +if md, ok := metadata.FromIncomingContext(ctx); ok { + if uID, ok := md["x-user-id"]; ok { + userID = strings.Join(uID, ",") + } +} +... +``` ## Mapping from gRPC server metadata to HTTP response headers ditto. Use [`WithOutgoingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithOutgoingHeaderMatcher). From d0f0d9d1a070ba64769d71d3c7f1e1a52d463e83 Mon Sep 17 00:00:00 2001 From: Josh Giles Date: Sun, 1 Mar 2020 16:49:45 -0500 Subject: [PATCH 0265/1518] Fix #1143: Support multiple error handlers. (#1144) * Fix #1143: Support multiple error handlers. Support specifying different custom error handlers on different muxes, or specifying custom error handlers on some muxes and using the default handlers on others. Make the runtime.HTTPError use the mux-configured error handler if present, and allow overriding the global default behavior by setting GlobalHTTPErrorHandler. Add commentary explaining the use of the different options for controlling error handling. * Stop overwriting HTTPError. * Fix WithProtoErrorHandler comment. * Document error customization options. --- docs/_docs/customizingyourgateway.md | 19 ++++++++++- runtime/errors.go | 47 +++++++++++++++++++++++++--- runtime/mux.go | 18 ++--------- 3 files changed, 64 insertions(+), 20 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index a461747fb1a..6009bff9d7f 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -234,7 +234,24 @@ if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opt ``` ## Error handler -http://mycodesmells.com/post/grpc-gateway-error-handler +The gateway uses two different error handlers for non-streaming requests: + + * `runtime.HTTPError` is called for errors from backend calls + * `runtime.OtherErrorHandler` is called for errors from parsing and routing client requests + +To override all error handling for a `*runtime.ServeMux`, use the +`runtime.WithProtoErrorHandler` serve option. + +Alternatively, you can override the global default `HTTPError` handling by +setting `runtime.GlobalHTTPErrorHandler` to a custom function, and override +the global default `OtherErrorHandler` by setting `runtime.OtherErrorHandler` +to a custom function. + +You should not set `runtime.HTTPError` directly, because that might break +any `ServeMux` set up with the `WithProtoErrorHandler` option. + +See https://mycodesmells.com/post/grpc-gateway-error-handler for an example +of writing a custom error handler function. ## Stream Error Handler The error handler described in the previous section applies only diff --git a/runtime/errors.go b/runtime/errors.go index 0118ca0479d..8ec2fc0f1c7 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -5,10 +5,10 @@ import ( "io" "net/http" + "github.com/grpc-ecosystem/grpc-gateway/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" - "github.com/grpc-ecosystem/grpc-gateway/internal" ) // HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. @@ -57,13 +57,52 @@ func HTTPStatusFromCode(code codes.Code) int { } var ( - // HTTPError replies to the request with the error. + // HTTPError replies to the request with an error. + // + // HTTPError is called: + // - From generated per-endpoint gateway handler code, when calling the backend results in an error. + // - From gateway runtime code, when forwarding the response message results in an error. + // + // The default value for HTTPError calls the custom error handler configured on the ServeMux via the + // WithProtoErrorHandler serve option if that option was used, calling GlobalHTTPErrorHandler otherwise. + // + // To customize the error handling of a particular ServeMux instance, use the WithProtoErrorHandler + // serve option. + // + // To customize the error format for all ServeMux instances not using the WithProtoErrorHandler serve + // option, set GlobalHTTPErrorHandler to a custom function. + // + // Setting this variable directly to customize error format is deprecated. + HTTPError = MuxOrGlobalHTTPError + + // GlobalHTTPErrorHandler is the HTTPError handler for all ServeMux instances not using the + // WithProtoErrorHandler serve option. + // // You can set a custom function to this variable to customize error format. - HTTPError = DefaultHTTPError - // OtherErrorHandler handles the following error used by the gateway: StatusMethodNotAllowed StatusNotFound and StatusBadRequest + GlobalHTTPErrorHandler = DefaultHTTPError + + // OtherErrorHandler handles gateway errors from parsing and routing client requests for all + // ServeMux instances not using the WithProtoErrorHandler serve option. + // + // It returns the following error codes: StatusMethodNotAllowed StatusNotFound StatusBadRequest + // + // To customize parsing and routing error handling of a particular ServeMux instance, use the + // WithProtoErrorHandler serve option. + // + // To customize parsing and routing error handling of all ServeMux instances not using the + // WithProtoErrorHandler serve option, set a custom function to this variable. OtherErrorHandler = DefaultOtherErrorHandler ) +// MuxOrGlobalHTTPError uses the mux-configured error handler, falling back to GlobalErrorHandler. +func MuxOrGlobalHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) { + if mux.protoErrorHandler != nil { + mux.protoErrorHandler(ctx, mux, marshaler, w, r, err) + } else { + GlobalHTTPErrorHandler(ctx, mux, marshaler, w, r, err) + } +} + // DefaultHTTPError is the default implementation of HTTPError. // If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. // If otherwise, it replies with http.StatusInternalServerError. diff --git a/runtime/mux.go b/runtime/mux.go index 6cf5b1d6fb6..523a9cb43c9 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -111,11 +111,11 @@ func WithMetadata(annotator func(context.Context, *http.Request) metadata.MD) Se } } -// WithProtoErrorHandler returns a ServeMuxOption for passing metadata to a gRPC context. +// WithProtoErrorHandler returns a ServeMuxOption for configuring a custom error handler. // // This can be used to handle an error as general proto message defined by gRPC. -// The response including body and status is not backward compatible with the default error handler. -// When this option is used, HTTPError and OtherErrorHandler are overwritten on initialization. +// When this option is used, the mux uses the configured error handler instead of HTTPError and +// OtherErrorHandler. func WithProtoErrorHandler(fn ProtoErrorHandlerFunc) ServeMuxOption { return func(serveMux *ServeMux) { serveMux.protoErrorHandler = fn @@ -165,18 +165,6 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { opt(serveMux) } - if serveMux.protoErrorHandler != nil { - HTTPError = serveMux.protoErrorHandler - // OtherErrorHandler is no longer used when protoErrorHandler is set. - // Overwritten by a special error handler to return Unknown. - OtherErrorHandler = func(w http.ResponseWriter, r *http.Request, _ string, _ int) { - ctx := context.Background() - _, outboundMarshaler := MarshalerForRequest(serveMux, r) - sterr := status.Error(codes.Unknown, "unexpected use of OtherErrorHandler") - serveMux.protoErrorHandler(ctx, serveMux, outboundMarshaler, w, r, sterr) - } - } - if serveMux.incomingHeaderMatcher == nil { serveMux.incomingHeaderMatcher = DefaultHeaderMatcher } From df4ff8d412d8ce99d0597295f4a12c595f9a81fb Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 26 Feb 2020 17:38:13 +0000 Subject: [PATCH 0266/1518] protoc-gen-swagger: add flag to disable default errors The new flag disable_default_errors can be used to disable the generation of the default error types. This is suitable for users that define their own error formatting. --- .../descriptor/registry.go | 14 ++++++++ protoc-gen-swagger/genswagger/template.go | 34 +++++++++++-------- protoc-gen-swagger/main.go | 2 ++ 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index b73c123c8f9..e68a9aa233b 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -75,6 +75,10 @@ type Registry struct { // useGoTemplate determines whether you want to use GO templates // in your protofile comments useGoTemplate bool + + // disableDefaultErrors disables the generation of the default error types. + // This is useful for users who have defined custom error handling. + disableDefaultErrors bool } type repeatedFieldSeparator struct { @@ -460,6 +464,16 @@ func (r *Registry) GetUseGoTemplate() bool { return r.useGoTemplate } +// SetDisableDefaultErrors sets disableDefaultErrors +func (r *Registry) SetDisableDefaultErrors(use bool) { + r.disableDefaultErrors = use +} + +// GetDisableDefaultErrors returns disableDefaultErrors +func (r *Registry) GetDisableDefaultErrors() bool { + return r.disableDefaultErrors +} + // sanitizePackageName replaces unallowed character in package name // with allowed character. func sanitizePackageName(pkgName string) string { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 5a668783c8e..9e0b5ce58af 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -882,16 +882,18 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re Description: desc, Schema: responseSchema, }, - // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object - "default": swaggerResponseObject{ - Description: "An unexpected error response", - Schema: swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg)), - }, + }, + } + if !reg.GetDisableDefaultErrors() { + // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object + operationObject.Responses["default"] = swaggerResponseObject{ + Description: "An unexpected error response", + Schema: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg)), }, }, - }, + } } if bIdx == 0 { operationObject.OperationID = fmt.Sprintf("%s", meth.GetName()) @@ -1052,13 +1054,15 @@ func applyTemplate(p param) (*swaggerObject, error) { streamingMessages := messageMap{} enums := enumMap{} - // Add the error type to the message map - runtimeError, err := p.reg.LookupMsg(".grpc.gateway.runtime", "Error") - if err == nil { - messages[fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", p.reg)] = runtimeError - } else { - // just in case there is an error looking up runtimeError - glog.Error(err) + if !p.reg.GetDisableDefaultErrors() { + // Add the error type to the message map + runtimeError, err := p.reg.LookupMsg(".grpc.gateway.runtime", "Error") + if err == nil { + messages[fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", p.reg)] = runtimeError + } else { + // just in case there is an error looking up runtimeError + glog.Error(err) + } } // Find all the service's messages and enumerations that are defined (recursively) diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 9befc2544f4..f25e431b553 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -28,6 +28,7 @@ var ( includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") useFQNForSwaggerName = flag.Bool("fqn_for_swagger_name", false, "if set, the object's swagger names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") + disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") ) // Variables set by goreleaser at build time @@ -80,6 +81,7 @@ func main() { reg.SetIncludePackageInTags(*includePackageInTags) reg.SetUseFQNForSwaggerName(*useFQNForSwaggerName) reg.SetUseGoTemplate(*useGoTemplate) + reg.SetDisableDefaultErrors(*disableDefaultErrors) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From db7fbefff7c04877cdb32e16d4a248a024428207 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 4 Mar 2020 19:28:01 +0000 Subject: [PATCH 0267/1518] Minimize API surface in anticipation of gorelease (#1146) * Move examples under internal to avoid importing This is necessary as part of adding gorelease to our CI. These packages could otherwise be considered part of our public API. This will break users who are importing these examples in their own projects. * Rename imports and regenerate files * Make generator internals private This helps remove public API surface * Move codegenerator package to internal This reduces our API surface --- .circleci/config.yml | 2 +- Makefile | 108 +-- README.md | 4 +- docs/_docs/examples.md | 2 +- docs/_docs/faq.md | 2 +- docs/_docs/patch.md | 4 +- docs/_docs/usage.md | 4 +- docs/_docs/usegotemplates.md | 2 +- examples/{ => internal}/README.md | 2 +- examples/{ => internal}/browser/.gitignore | 0 examples/{ => internal}/browser/README.md | 0 .../a_bit_of_everything_service.spec.js | 0 .../{ => internal}/browser/bin/.gitignore | 0 examples/{ => internal}/browser/bower.json | 0 .../browser/echo_service.spec.js | 0 examples/{ => internal}/browser/gulpfile.js | 24 +- examples/{ => internal}/browser/index.html | 0 examples/{ => internal}/browser/package.json | 0 .../{ => internal}/clients/abe/.gitignore | 0 .../clients/abe/.swagger-codegen-ignore | 0 .../clients/abe/.swagger-codegen/VERSION | 0 .../{ => internal}/clients/abe/BUILD.bazel | 6 +- .../clients/abe/api/swagger.yaml | 0 .../abe/api_a_bit_of_everything_service.go | 0 .../abe/api_camel_case_service_name.go | 0 .../clients/abe/api_echo_rpc.go | 0 examples/{ => internal}/clients/abe/client.go | 0 .../clients/abe/configuration.go | 0 .../{ => internal}/clients/abe/enum_helper.go | 4 +- .../abe/model_a_bit_of_everything_nested.go | 0 .../model_examplepb_a_bit_of_everything.go | 0 ..._examplepb_a_bit_of_everything_repeated.go | 0 .../clients/abe/model_examplepb_body.go | 0 .../abe/model_examplepb_numeric_enum.go | 0 .../abe/model_examplepb_update_v2_request.go | 0 ...odel_message_path_enum_nested_path_enum.go | 0 .../clients/abe/model_nested_deep_enum.go | 0 .../clients/abe/model_pathenum_path_enum.go | 0 .../clients/abe/model_protobuf_any.go | 0 .../clients/abe/model_protobuf_field_mask.go | 0 .../clients/abe/model_runtime_error.go | 0 .../clients/abe/model_sub_string_message.go | 0 .../{ => internal}/clients/abe/response.go | 0 .../{ => internal}/clients/echo/.gitignore | 0 .../clients/echo/.swagger-codegen-ignore | 0 .../clients/echo/.swagger-codegen/VERSION | 0 .../{ => internal}/clients/echo/BUILD.bazel | 2 +- .../clients/echo/api/swagger.yaml | 0 .../clients/echo/api_echo_service.go | 0 .../{ => internal}/clients/echo/client.go | 0 .../clients/echo/configuration.go | 0 .../clients/echo/model_examplepb_embedded.go | 0 .../echo/model_examplepb_simple_message.go | 0 .../clients/echo/model_protobuf_any.go | 0 .../clients/echo/model_runtime_error.go | 0 .../{ => internal}/clients/echo/response.go | 0 .../clients/responsebody/.gitignore | 0 .../responsebody/.swagger-codegen-ignore | 0 .../responsebody/.swagger-codegen/VERSION | 0 .../clients/responsebody/BUILD.bazel | 2 +- .../clients/responsebody/api/swagger.yaml | 2 +- .../responsebody/api_response_body_service.go | 2 +- .../clients/responsebody/client.go | 4 +- .../clients/responsebody/configuration.go | 2 +- .../docs/ExamplepbRepeatedResponseBodyOut.md | 0 ...xamplepbRepeatedResponseBodyOutResponse.md | 0 .../docs/ExamplepbRepeatedResponseStrings.md | 0 .../docs/ExamplepbResponseBodyMessage.md | 0 .../ExamplepbResponseBodyMessageResponse.md | 0 .../docs/ExamplepbResponseBodyOut.md | 0 .../docs/ExamplepbResponseBodyOutResponse.md | 0 .../docs/ExamplepbResponseBodyReq.md | 0 .../clients/responsebody/docs/ProtobufAny.md | 0 .../docs/ResponseBodyServiceApi.md | 0 .../responsebody/docs/ResponseResponseType.md | 0 .../clients/responsebody/docs/RuntimeError.md | 0 ...el_examplepb_repeated_response_body_out.go | 2 +- ...epb_repeated_response_body_out_response.go | 2 +- ...del_examplepb_repeated_response_strings.go | 2 +- .../model_examplepb_response_body_out.go | 2 +- ...el_examplepb_response_body_out_response.go | 2 +- .../responsebody/model_protobuf_any.go | 2 +- .../model_response_response_type.go | 2 +- .../responsebody/model_runtime_error.go | 2 +- .../clients/responsebody/response.go | 2 +- .../clients/unannotatedecho/.gitignore | 0 .../unannotatedecho/.swagger-codegen-ignore | 0 .../unannotatedecho/.swagger-codegen/VERSION | 0 .../clients/unannotatedecho/BUILD.bazel | 2 +- .../clients/unannotatedecho/api/swagger.yaml | 2 +- .../api_unannotated_echo_service.go | 2 +- .../clients/unannotatedecho/client.go | 4 +- .../clients/unannotatedecho/configuration.go | 2 +- ...el_examplepb_unannotated_simple_message.go | 2 +- .../unannotatedecho/model_protobuf_any.go | 2 +- .../unannotatedecho/model_runtime_error.go | 2 +- .../clients/unannotatedecho/response.go | 2 +- .../cmd/example-gateway-server/BUILD.bazel | 4 +- .../cmd/example-gateway-server/main.go | 4 +- .../cmd/example-grpc-server/BUILD.bazel | 4 +- .../cmd/example-grpc-server/main.go | 2 +- examples/{ => internal}/gateway/BUILD.bazel | 4 +- examples/{ => internal}/gateway/doc.go | 0 examples/{ => internal}/gateway/gateway.go | 2 +- examples/{ => internal}/gateway/handlers.go | 0 examples/{ => internal}/gateway/main.go | 0 .../helloworld/BUILD.bazel | 4 +- .../helloworld/helloworld.pb.go | 0 .../helloworld/helloworld.pb.gw.go | 0 .../helloworld/helloworld.proto | 0 .../{ => internal}/integration/BUILD.bazel | 16 +- .../{ => internal}/integration/client_test.go | 6 +- .../integration/fieldmask_test.go | 2 +- .../integration/integration_test.go | 6 +- .../{ => internal}/integration/main_test.go | 6 +- .../integration/proto_error_test.go | 0 .../proto/examplepb/BUILD.bazel | 16 +- .../proto/examplepb/a_bit_of_everything.pb.go | 625 +++++++------- .../examplepb/a_bit_of_everything.pb.gw.go | 8 +- .../proto/examplepb/a_bit_of_everything.proto | 12 +- .../a_bit_of_everything.swagger.json | 0 .../proto/examplepb/echo_service.pb.go | 96 +-- .../proto/examplepb/echo_service.pb.gw.go | 2 +- .../proto/examplepb/echo_service.proto | 2 +- .../proto/examplepb/echo_service.swagger.json | 0 .../proto/examplepb/flow_combination.pb.go | 148 ++-- .../proto/examplepb/flow_combination.pb.gw.go | 2 +- .../proto/examplepb/flow_combination.proto | 2 +- .../proto/examplepb/generated_input.proto | 5 +- .../proto/examplepb/non_standard_names.pb.go | 136 +-- .../examplepb/non_standard_names.pb.gw.go | 2 +- .../proto/examplepb/non_standard_names.proto | 2 +- .../examplepb/response_body_service.pb.go | 115 +-- .../examplepb/response_body_service.pb.gw.go | 2 +- .../examplepb/response_body_service.proto | 2 +- .../response_body_service.swagger.json | 2 +- .../proto/examplepb/stream.pb.go | 65 +- .../proto/examplepb/stream.pb.gw.go | 4 +- .../proto/examplepb/stream.proto | 8 +- .../proto/examplepb/stream.swagger.json | 2 +- .../examplepb/unannotated_echo_service.pb.go | 63 +- .../unannotated_echo_service.pb.gw.go | 2 +- .../examplepb/unannotated_echo_service.proto | 2 +- .../unannotated_echo_service.swagger.json | 2 +- .../examplepb/unannotated_echo_service.yaml | 15 + .../proto/examplepb/use_go_template.pb.go | 87 +- .../proto/examplepb/use_go_template.pb.gw.go | 2 +- .../proto/examplepb/use_go_template.proto | 4 +- .../examplepb/use_go_template.swagger.json | 2 +- .../proto/examplepb/wrappers.pb.go | 138 +-- .../proto/examplepb/wrappers.pb.gw.go | 2 +- .../proto/examplepb/wrappers.proto | 2 +- .../proto/examplepb/wrappers.swagger.json | 2 +- .../{ => internal}/proto/pathenum/BUILD.bazel | 4 +- .../proto/pathenum/path_enum.pb.go | 47 +- .../proto/pathenum/path_enum.proto | 4 +- examples/{ => internal}/proto/sub/BUILD.bazel | 4 +- .../{ => internal}/proto/sub/message.pb.go | 30 +- .../{ => internal}/proto/sub/message.proto | 2 +- .../{ => internal}/proto/sub2/BUILD.bazel | 4 +- .../{ => internal}/proto/sub2/message.pb.go | 30 +- .../{ => internal}/proto/sub2/message.proto | 2 +- examples/{ => internal}/server/BUILD.bazel | 8 +- .../server/a_bit_of_everything.go | 6 +- examples/{ => internal}/server/echo.go | 2 +- .../{ => internal}/server/fieldmask_helper.go | 0 .../server/fieldmask_helper_test.go | 0 .../{ => internal}/server/flow_combination.go | 2 +- examples/{ => internal}/server/main.go | 2 +- .../server/non_standard_names.go | 2 +- .../{ => internal}/server/responsebody.go | 2 +- .../{ => internal}/server/unannotatedecho.go | 3 +- .../examplepb/unannotated_echo_service.yaml | 15 - fuzzit.sh | 4 +- .../codegenerator}/BUILD.bazel | 4 +- .../codegenerator}/doc.go | 0 .../codegenerator}/parse_req.go | 0 .../codegenerator}/parse_req_test.go | 2 +- .../descriptor/BUILD.bazel | 8 +- .../descriptor/grpc_api_configuration.go | 0 .../descriptor/grpc_api_configuration_test.go | 0 .../descriptor/grpc_api_service.go | 0 .../descriptor/registry.go | 0 .../descriptor/registry_test.go | 0 .../descriptor/services.go | 4 +- .../descriptor/services_test.go | 2 +- .../descriptor/types.go | 2 +- .../descriptor/types_test.go | 0 .../generator/BUILD.bazel | 6 +- .../generator/generator.go | 2 +- .../httprule/BUILD.bazel | 4 +- .../httprule/compile.go | 0 .../httprule/compile_test.go | 0 .../httprule/fuzz.go | 0 .../httprule/parse.go | 0 .../httprule/parse_test.go | 0 .../httprule/types.go | 0 .../httprule/types_test.go | 0 protoc-gen-grpc-gateway/BUILD.bazel | 6 +- .../{ => internal}/gengateway/BUILD.bazel | 10 +- .../{ => internal}/gengateway/doc.go | 0 .../{ => internal}/gengateway/generator.go | 4 +- .../gengateway/generator_test.go | 2 +- .../{ => internal}/gengateway/template.go | 2 +- .../gengateway/template_test.go | 4 +- protoc-gen-grpc-gateway/main.go | 6 +- protoc-gen-swagger/BUILD.bazel | 6 +- .../{ => internal}/genswagger/BUILD.bazel | 10 +- .../{ => internal}/genswagger/doc.go | 0 .../{ => internal}/genswagger/generator.go | 4 +- .../{ => internal}/genswagger/helpers.go | 0 .../genswagger/helpers_go111_old.go | 0 .../{ => internal}/genswagger/template.go | 2 +- .../genswagger/template_test.go | 4 +- .../{ => internal}/genswagger/types.go | 2 +- protoc-gen-swagger/main.go | 6 +- runtime/BUILD.bazel | 2 +- runtime/handler_test.go | 3 +- runtime/internal/examplepb/BUILD.bazel | 31 + runtime/internal/examplepb/example.pb.go | 807 ++++++++++++++++++ runtime/internal/examplepb/example.proto | 115 +++ runtime/marshal_json_test.go | 2 +- runtime/marshal_jsonpb_test.go | 12 +- runtime/marshal_proto_test.go | 2 +- 224 files changed, 2040 insertions(+), 1066 deletions(-) rename examples/{ => internal}/README.md (96%) rename examples/{ => internal}/browser/.gitignore (100%) rename examples/{ => internal}/browser/README.md (100%) rename examples/{ => internal}/browser/a_bit_of_everything_service.spec.js (100%) rename examples/{ => internal}/browser/bin/.gitignore (100%) rename examples/{ => internal}/browser/bower.json (100%) rename examples/{ => internal}/browser/echo_service.spec.js (100%) rename examples/{ => internal}/browser/gulpfile.js (76%) rename examples/{ => internal}/browser/index.html (100%) rename examples/{ => internal}/browser/package.json (100%) rename examples/{ => internal}/clients/abe/.gitignore (100%) rename examples/{ => internal}/clients/abe/.swagger-codegen-ignore (100%) rename examples/{ => internal}/clients/abe/.swagger-codegen/VERSION (100%) rename examples/{ => internal}/clients/abe/BUILD.bazel (88%) rename examples/{ => internal}/clients/abe/api/swagger.yaml (100%) rename examples/{ => internal}/clients/abe/api_a_bit_of_everything_service.go (100%) rename examples/{ => internal}/clients/abe/api_camel_case_service_name.go (100%) rename examples/{ => internal}/clients/abe/api_echo_rpc.go (100%) rename examples/{ => internal}/clients/abe/client.go (100%) rename examples/{ => internal}/clients/abe/configuration.go (100%) rename examples/{ => internal}/clients/abe/enum_helper.go (89%) rename examples/{ => internal}/clients/abe/model_a_bit_of_everything_nested.go (100%) rename examples/{ => internal}/clients/abe/model_examplepb_a_bit_of_everything.go (100%) rename examples/{ => internal}/clients/abe/model_examplepb_a_bit_of_everything_repeated.go (100%) rename examples/{ => internal}/clients/abe/model_examplepb_body.go (100%) rename examples/{ => internal}/clients/abe/model_examplepb_numeric_enum.go (100%) rename examples/{ => internal}/clients/abe/model_examplepb_update_v2_request.go (100%) rename examples/{ => internal}/clients/abe/model_message_path_enum_nested_path_enum.go (100%) rename examples/{ => internal}/clients/abe/model_nested_deep_enum.go (100%) rename examples/{ => internal}/clients/abe/model_pathenum_path_enum.go (100%) rename examples/{ => internal}/clients/abe/model_protobuf_any.go (100%) rename examples/{ => internal}/clients/abe/model_protobuf_field_mask.go (100%) rename examples/{ => internal}/clients/abe/model_runtime_error.go (100%) rename examples/{ => internal}/clients/abe/model_sub_string_message.go (100%) rename examples/{ => internal}/clients/abe/response.go (100%) rename examples/{ => internal}/clients/echo/.gitignore (100%) rename examples/{ => internal}/clients/echo/.swagger-codegen-ignore (100%) rename examples/{ => internal}/clients/echo/.swagger-codegen/VERSION (100%) rename examples/{ => internal}/clients/echo/BUILD.bazel (96%) rename examples/{ => internal}/clients/echo/api/swagger.yaml (100%) rename examples/{ => internal}/clients/echo/api_echo_service.go (100%) rename examples/{ => internal}/clients/echo/client.go (100%) rename examples/{ => internal}/clients/echo/configuration.go (100%) rename examples/{ => internal}/clients/echo/model_examplepb_embedded.go (100%) rename examples/{ => internal}/clients/echo/model_examplepb_simple_message.go (100%) rename examples/{ => internal}/clients/echo/model_protobuf_any.go (100%) rename examples/{ => internal}/clients/echo/model_runtime_error.go (100%) rename examples/{ => internal}/clients/echo/response.go (100%) rename examples/{ => internal}/clients/responsebody/.gitignore (100%) rename examples/{ => internal}/clients/responsebody/.swagger-codegen-ignore (100%) rename examples/{ => internal}/clients/responsebody/.swagger-codegen/VERSION (100%) rename examples/{ => internal}/clients/responsebody/BUILD.bazel (95%) rename examples/{ => internal}/clients/responsebody/api/swagger.yaml (99%) rename examples/{ => internal}/clients/responsebody/api_response_body_service.go (99%) rename examples/{ => internal}/clients/responsebody/client.go (98%) rename examples/{ => internal}/clients/responsebody/configuration.go (97%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbResponseBodyMessage.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbResponseBodyOut.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ExamplepbResponseBodyReq.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ProtobufAny.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ResponseBodyServiceApi.md (100%) rename examples/{ => internal}/clients/responsebody/docs/ResponseResponseType.md (100%) rename examples/{ => internal}/clients/responsebody/docs/RuntimeError.md (100%) rename examples/{ => internal}/clients/responsebody/model_examplepb_repeated_response_body_out.go (85%) rename examples/{ => internal}/clients/responsebody/model_examplepb_repeated_response_body_out_response.go (86%) rename examples/{ => internal}/clients/responsebody/model_examplepb_repeated_response_strings.go (84%) rename examples/{ => internal}/clients/responsebody/model_examplepb_response_body_out.go (85%) rename examples/{ => internal}/clients/responsebody/model_examplepb_response_body_out_response.go (84%) rename examples/{ => internal}/clients/responsebody/model_protobuf_any.go (98%) rename examples/{ => internal}/clients/responsebody/model_response_response_type.go (88%) rename examples/{ => internal}/clients/responsebody/model_runtime_error.go (87%) rename examples/{ => internal}/clients/responsebody/response.go (95%) rename examples/{ => internal}/clients/unannotatedecho/.gitignore (100%) rename examples/{ => internal}/clients/unannotatedecho/.swagger-codegen-ignore (100%) rename examples/{ => internal}/clients/unannotatedecho/.swagger-codegen/VERSION (100%) rename examples/{ => internal}/clients/unannotatedecho/BUILD.bazel (94%) rename examples/{ => internal}/clients/unannotatedecho/api/swagger.yaml (99%) rename examples/{ => internal}/clients/unannotatedecho/api_unannotated_echo_service.go (99%) rename examples/{ => internal}/clients/unannotatedecho/client.go (98%) rename examples/{ => internal}/clients/unannotatedecho/configuration.go (97%) rename examples/{ => internal}/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go (91%) rename examples/{ => internal}/clients/unannotatedecho/model_protobuf_any.go (98%) rename examples/{ => internal}/clients/unannotatedecho/model_runtime_error.go (90%) rename examples/{ => internal}/clients/unannotatedecho/response.go (95%) rename examples/{ => internal}/cmd/example-gateway-server/BUILD.bazel (82%) rename examples/{ => internal}/cmd/example-gateway-server/main.go (77%) rename examples/{ => internal}/cmd/example-grpc-server/BUILD.bazel (82%) rename examples/{ => internal}/cmd/example-grpc-server/main.go (88%) rename examples/{ => internal}/gateway/BUILD.bazel (86%) rename examples/{ => internal}/gateway/doc.go (100%) rename examples/{ => internal}/gateway/gateway.go (95%) rename examples/{ => internal}/gateway/handlers.go (100%) rename examples/{ => internal}/gateway/main.go (100%) rename examples/{pbwrappers => internal}/helloworld/BUILD.bazel (96%) rename examples/{pbwrappers => internal}/helloworld/helloworld.pb.go (100%) rename examples/{pbwrappers => internal}/helloworld/helloworld.pb.gw.go (100%) rename examples/{pbwrappers => internal}/helloworld/helloworld.proto (100%) rename examples/{ => internal}/integration/BUILD.bazel (61%) rename examples/{ => internal}/integration/client_test.go (95%) rename examples/{ => internal}/integration/fieldmask_test.go (98%) rename examples/{ => internal}/integration/integration_test.go (99%) rename examples/{ => internal}/integration/main_test.go (88%) rename examples/{ => internal}/integration/proto_error_test.go (100%) rename examples/{ => internal}/proto/examplepb/BUILD.bazel (88%) rename examples/{ => internal}/proto/examplepb/a_bit_of_everything.pb.go (67%) rename examples/{ => internal}/proto/examplepb/a_bit_of_everything.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/a_bit_of_everything.proto (97%) rename examples/{ => internal}/proto/examplepb/a_bit_of_everything.swagger.json (100%) rename examples/{ => internal}/proto/examplepb/echo_service.pb.go (74%) rename examples/{ => internal}/proto/examplepb/echo_service.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/echo_service.proto (97%) rename examples/{ => internal}/proto/examplepb/echo_service.swagger.json (100%) rename examples/{ => internal}/proto/examplepb/flow_combination.pb.go (80%) rename examples/{ => internal}/proto/examplepb/flow_combination.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/flow_combination.proto (98%) rename examples/{ => internal}/proto/examplepb/generated_input.proto (75%) rename examples/{ => internal}/proto/examplepb/non_standard_names.pb.go (80%) rename examples/{ => internal}/proto/examplepb/non_standard_names.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/non_standard_names.proto (97%) rename examples/{ => internal}/proto/examplepb/response_body_service.pb.go (77%) rename examples/{ => internal}/proto/examplepb/response_body_service.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/response_body_service.proto (95%) rename examples/{ => internal}/proto/examplepb/response_body_service.swagger.json (99%) rename examples/{ => internal}/proto/examplepb/stream.pb.go (74%) rename examples/{ => internal}/proto/examplepb/stream.pb.gw.go (98%) rename examples/{ => internal}/proto/examplepb/stream.proto (67%) rename examples/{ => internal}/proto/examplepb/stream.swagger.json (99%) rename examples/{ => internal}/proto/examplepb/unannotated_echo_service.pb.go (76%) rename examples/{ => internal}/proto/examplepb/unannotated_echo_service.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/unannotated_echo_service.proto (96%) rename examples/{ => internal}/proto/examplepb/unannotated_echo_service.swagger.json (99%) create mode 100644 examples/internal/proto/examplepb/unannotated_echo_service.yaml rename examples/{ => internal}/proto/examplepb/use_go_template.pb.go (81%) rename examples/{ => internal}/proto/examplepb/use_go_template.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/use_go_template.proto (98%) rename examples/{ => internal}/proto/examplepb/use_go_template.swagger.json (99%) rename examples/{ => internal}/proto/examplepb/wrappers.pb.go (76%) rename examples/{ => internal}/proto/examplepb/wrappers.pb.gw.go (99%) rename examples/{ => internal}/proto/examplepb/wrappers.proto (97%) rename examples/{ => internal}/proto/examplepb/wrappers.swagger.json (99%) rename examples/{ => internal}/proto/pathenum/BUILD.bazel (91%) rename examples/{ => internal}/proto/pathenum/path_enum.pb.go (60%) rename examples/{ => internal}/proto/pathenum/path_enum.proto (71%) rename examples/{ => internal}/proto/sub/BUILD.bazel (92%) rename examples/{ => internal}/proto/sub/message.pb.go (65%) rename examples/{ => internal}/proto/sub/message.proto (69%) rename examples/{ => internal}/proto/sub2/BUILD.bazel (92%) rename examples/{ => internal}/proto/sub2/message.pb.go (63%) rename examples/{ => internal}/proto/sub2/message.proto (83%) rename examples/{ => internal}/server/BUILD.bazel (87%) rename examples/{ => internal}/server/a_bit_of_everything.go (97%) rename examples/{ => internal}/server/echo.go (91%) rename examples/{ => internal}/server/fieldmask_helper.go (100%) rename examples/{ => internal}/server/fieldmask_helper_test.go (100%) rename examples/{ => internal}/server/flow_combination.go (96%) rename examples/{ => internal}/server/main.go (91%) rename examples/{ => internal}/server/non_standard_names.go (93%) rename examples/{ => internal}/server/responsebody.go (93%) rename examples/{ => internal}/server/unannotatedecho.go (92%) delete mode 100644 examples/proto/examplepb/unannotated_echo_service.yaml rename {codegenerator => internal/codegenerator}/BUILD.bazel (81%) rename {codegenerator => internal/codegenerator}/doc.go (100%) rename {codegenerator => internal/codegenerator}/parse_req.go (100%) rename {codegenerator => internal/codegenerator}/parse_req_test.go (95%) rename {protoc-gen-grpc-gateway => internal}/descriptor/BUILD.bazel (82%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_configuration.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_configuration_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_service.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/registry.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/registry_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/services.go (98%) rename {protoc-gen-grpc-gateway => internal}/descriptor/services_test.go (99%) rename {protoc-gen-grpc-gateway => internal}/descriptor/types.go (99%) rename {protoc-gen-grpc-gateway => internal}/descriptor/types_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/generator/BUILD.bazel (51%) rename {protoc-gen-grpc-gateway => internal}/generator/generator.go (83%) rename {protoc-gen-grpc-gateway => internal}/httprule/BUILD.bazel (81%) rename {protoc-gen-grpc-gateway => internal}/httprule/compile.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/compile_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/fuzz.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/parse.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/parse_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/types.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/types_test.go (100%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/BUILD.bazel (77%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/doc.go (100%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/generator.go (96%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/generator_test.go (98%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/template.go (99%) rename protoc-gen-grpc-gateway/{ => internal}/gengateway/template_test.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/BUILD.bazel (84%) rename protoc-gen-swagger/{ => internal}/genswagger/doc.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/generator.go (97%) rename protoc-gen-swagger/{ => internal}/genswagger/helpers.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/helpers_go111_old.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/template.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/template_test.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/types.go (99%) create mode 100644 runtime/internal/examplepb/BUILD.bazel create mode 100644 runtime/internal/examplepb/example.pb.go create mode 100644 runtime/internal/examplepb/example.proto diff --git a/.circleci/config.yml b/.circleci/config.yml index f9554d0dc95..7dc1c25c06f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -26,7 +26,7 @@ jobs: - run: go mod vendor - run: > . $HOME/.nvm/nvm.sh && - cd examples/browser && + cd examples/internal/browser && npm install gulp-cli && npm install && ./node_modules/.bin/gulp diff --git a/Makefile b/Makefile index 03766b669ee..bf3e882eb46 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,8 @@ SWAGGER_PLUGIN=bin/protoc-gen-swagger SWAGGER_PLUGIN_SRC= utilities/doc.go \ utilities/pattern.go \ utilities/trie.go \ - protoc-gen-swagger/genswagger/generator.go \ - protoc-gen-swagger/genswagger/template.go \ + protoc-gen-swagger/internal/genswagger/generator.go \ + protoc-gen-swagger/internal/genswagger/template.go \ protoc-gen-swagger/main.go SWAGGER_PLUGIN_PKG=./protoc-gen-swagger GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway @@ -21,22 +21,22 @@ GATEWAY_PLUGIN_SRC= utilities/doc.go \ utilities/pattern.go \ utilities/trie.go \ protoc-gen-grpc-gateway \ - protoc-gen-grpc-gateway/descriptor \ - protoc-gen-grpc-gateway/descriptor/registry.go \ - protoc-gen-grpc-gateway/descriptor/services.go \ - protoc-gen-grpc-gateway/descriptor/types.go \ - protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go \ - protoc-gen-grpc-gateway/descriptor/grpc_api_service.go \ - protoc-gen-grpc-gateway/generator \ - protoc-gen-grpc-gateway/generator/generator.go \ - protoc-gen-grpc-gateway/gengateway \ - protoc-gen-grpc-gateway/gengateway/doc.go \ - protoc-gen-grpc-gateway/gengateway/generator.go \ - protoc-gen-grpc-gateway/gengateway/template.go \ - protoc-gen-grpc-gateway/httprule \ - protoc-gen-grpc-gateway/httprule/compile.go \ - protoc-gen-grpc-gateway/httprule/parse.go \ - protoc-gen-grpc-gateway/httprule/types.go \ + internal/descriptor \ + internal/descriptor/registry.go \ + internal/descriptor/services.go \ + internal/descriptor/types.go \ + internal/descriptor/grpc_api_configuration.go \ + internal/descriptor/grpc_api_service.go \ + internal/generator \ + internal/generator/generator.go \ + protoc-gen-grpc-gateway/internal/gengateway \ + protoc-gen-grpc-gateway/internal/gengateway/doc.go \ + protoc-gen-grpc-gateway/internal/gengateway/generator.go \ + protoc-gen-grpc-gateway/internal/gengateway/template.go \ + internal/httprule \ + internal/httprule/compile.go \ + internal/httprule/parse.go \ + internal/httprule/types.go \ protoc-gen-grpc-gateway/main.go GATEWAY_PLUGIN_FLAGS?= SWAGGER_PLUGIN_FLAGS?= @@ -50,7 +50,7 @@ RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) -PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub +PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/internal/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub ADDITIONAL_GW_FLAGS= ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) @@ -59,39 +59,42 @@ ADDITIONAL_SWG_FLAGS= ifneq "$(SWAGGER_PLUGIN_FLAGS)" "" ADDITIONAL_SWG_FLAGS=,$(SWAGGER_PLUGIN_FLAGS) endif -SWAGGER_EXAMPLES=examples/proto/examplepb/echo_service.proto \ - examples/proto/examplepb/a_bit_of_everything.proto \ - examples/proto/examplepb/wrappers.proto \ - examples/proto/examplepb/stream.proto \ - examples/proto/examplepb/unannotated_echo_service.proto \ - examples/proto/examplepb/use_go_template.proto \ - examples/proto/examplepb/response_body_service.proto - -EXAMPLES=examples/proto/examplepb/echo_service.proto \ - examples/proto/examplepb/a_bit_of_everything.proto \ - examples/proto/examplepb/stream.proto \ - examples/proto/examplepb/flow_combination.proto \ - examples/proto/examplepb/non_standard_names.proto \ - examples/proto/examplepb/wrappers.proto \ - examples/proto/examplepb/unannotated_echo_service.proto \ - examples/proto/examplepb/use_go_template.proto \ - examples/proto/examplepb/response_body_service.proto +SWAGGER_EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ + examples/internal/proto/examplepb/a_bit_of_everything.proto \ + examples/internal/proto/examplepb/wrappers.proto \ + examples/internal/proto/examplepb/stream.proto \ + examples/internal/proto/examplepb/unannotated_echo_service.proto \ + examples/internal/proto/examplepb/use_go_template.proto \ + examples/internal/proto/examplepb/response_body_service.proto + +EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ + examples/internal/proto/examplepb/a_bit_of_everything.proto \ + examples/internal/proto/examplepb/stream.proto \ + examples/internal/proto/examplepb/flow_combination.proto \ + examples/internal/proto/examplepb/non_standard_names.proto \ + examples/internal/proto/examplepb/wrappers.proto \ + examples/internal/proto/examplepb/unannotated_echo_service.proto \ + examples/internal/proto/examplepb/use_go_template.proto \ + examples/internal/proto/examplepb/response_body_service.proto EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) -EXAMPLE_DEPS=examples/proto/pathenum/path_enum.proto examples/proto/sub/message.proto examples/proto/sub2/message.proto +EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/proto/sub/message.proto examples/internal/proto/sub2/message.proto EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) -EXAMPLE_CLIENT_DIR=examples/clients -ECHO_EXAMPLE_SPEC=examples/proto/examplepb/echo_service.swagger.json +RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto +RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=pb.go) + +EXAMPLE_CLIENT_DIR=examples/internal/clients +ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \ $(EXAMPLE_CLIENT_DIR)/echo/response.go \ $(EXAMPLE_CLIENT_DIR)/echo/configuration.go \ $(EXAMPLE_CLIENT_DIR)/echo/api_echo_service.go \ $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_simple_message.go \ $(EXAMPLE_CLIENT_DIR)/echo/model_examplepb_embedded.go -ABE_EXAMPLE_SPEC=examples/proto/examplepb/a_bit_of_everything.swagger.json +ABE_EXAMPLE_SPEC=examples/internal/proto/examplepb/a_bit_of_everything.swagger.json ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/model_a_bit_of_everything_nested.go \ $(EXAMPLE_CLIENT_DIR)/abe/api_a_bit_of_everything_service.go \ $(EXAMPLE_CLIENT_DIR)/abe/client.go \ @@ -108,13 +111,13 @@ ABE_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/abe/model_a_bit_of_everything_nested.go \ $(EXAMPLE_CLIENT_DIR)/abe/model_pathenum_path_enum.go \ $(EXAMPLE_CLIENT_DIR)/abe/model_protobuf_field_mask.go \ $(EXAMPLE_CLIENT_DIR)/abe/response.go -UNANNOTATED_ECHO_EXAMPLE_SPEC=examples/proto/examplepb/unannotated_echo_service.swagger.json +UNANNOTATED_ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/unannotated_echo_service.swagger.json UNANNOTATED_ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/unannotatedecho/client.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/response.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/configuration.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/model_examplepb_unannotated_simple_message.go \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/api_unannotated_echo_service.go -RESPONSE_BODY_EXAMPLE_SPEC=examples/proto/examplepb/response_body_service.swagger.json +RESPONSE_BODY_EXAMPLE_SPEC=examples/internal/proto/examplepb/response_body_service.swagger.json RESPONSE_BODY_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/responsebody/client.go \ $(EXAMPLE_CLIENT_DIR)/responsebody/response.go \ $(EXAMPLE_CLIENT_DIR)/responsebody/configuration.go \ @@ -157,39 +160,43 @@ $(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(EXAMPLE_DEPS) protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:$(OUTPUT_DIR) $(@:.pb.go=.proto) cp $(OUTPUT_DIR)/$@ $@ || cp $(OUTPUT_DIR)/$@ $@ -$(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml +$(RUNTIME_TEST_SRCS): $(GO_PLUGIN) $(RUNTIME_TEST_PROTO) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(RUNTIME_TEST_PROTO) + +$(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) -$(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/proto/examplepb/unannotated_echo_service.yaml +$(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ - -l go -o examples/clients/echo --additional-properties packageName=echo + -l go -o examples/internal/clients/echo --additional-properties packageName=echo @rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \ $(EXAMPLE_CLIENT_DIR)/echo/git_push.sh $(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \ - -l go -o examples/clients/abe --additional-properties packageName=abe + -l go -o examples/internal/clients/abe --additional-properties packageName=abe @rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \ $(EXAMPLE_CLIENT_DIR)/abe/git_push.sh $(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(UNANNOTATED_ECHO_EXAMPLE_SPEC) \ - -l go -o examples/clients/unannotatedecho --additional-properties packageName=unannotatedecho + -l go -o examples/internal/clients/unannotatedecho --additional-properties packageName=unannotatedecho @rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \ - -l go -o examples/clients/responsebody --additional-properties packageName=responsebody + -l go -o examples/internal/clients/responsebody --additional-properties packageName=responsebody @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) -test: examples +testproto: $(RUNTIME_TEST_SRCS) +test: examples testproto go test -short -race ./... - go test -race ./examples/integration -args -network=unix -endpoint=test.sock + go test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock changelog: docker run --rm \ --interactive \ @@ -224,5 +231,6 @@ realclean: distclean rm -f $(EXAMPLE_SWAGGERSRCS) rm -f $(EXAMPLE_CLIENT_SRCS) rm -f $(OPENAPIV2_GO) + rm -f $(RUNTIME_TEST_SRCS) .PHONY: generate examples test lint clean distclean realclean diff --git a/README.md b/README.md index 4b9aa56b23b..79ca1d25d96 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ annotation to your .proto file } ``` - See [a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) + See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated Swagger output. @@ -261,7 +261,7 @@ instead of protobuf names). Run `protoc-gen-swagger --help` for more flag details. Further Swagger customization is possible by annotating your `.proto` files with options from [openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see -[a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) +[a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. ## More Examples diff --git a/docs/_docs/examples.md b/docs/_docs/examples.md index 78d93d720db..e8d5f4c77ae 100644 --- a/docs/_docs/examples.md +++ b/docs/_docs/examples.md @@ -4,7 +4,7 @@ category: documentation # Examples -Examples are available under `examples` directory. +Examples are available under `examples/internal` directory. * `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition * `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service * `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index 766c402c80b..35307c66424 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -17,7 +17,7 @@ See the question above at first. Grpc-gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So grpc-gateway itself does not always cover all the use cases you have by design. In other words, grpc-gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. -e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/main.go +e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/main.go ## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md index 2eaac3b0166..d1543eb8350 100644 --- a/docs/_docs/patch.md +++ b/docs/_docs/patch.md @@ -7,8 +7,8 @@ The HTTP PATCH method allows a resource to be partially updated. The idea, If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. There are two scenarios: -- The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. -- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. +- The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. ## Example Usage 1. Create PATCH request. diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 7ccf52e0abd..02eed3d1e0e 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -68,7 +68,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` - See [a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) + See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated Swagger output. @@ -202,7 +202,7 @@ instead of protobuf names). Run `protoc-gen-swagger --help` for more flag details. Further Swagger customization is possible by annotating your `.proto` files with options from [openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see -[a_bit_of_everything.proto](examples/proto/examplepb/a_bit_of_everything.proto) +[a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. # Mapping gRPC to HTTP diff --git a/docs/_docs/usegotemplates.md b/docs/_docs/usegotemplates.md index 69dfa9474a7..f2ae6c9ce5c 100644 --- a/docs/_docs/usegotemplates.md +++ b/docs/_docs/usegotemplates.md @@ -90,4 +90,4 @@ This is how the swagger file would be rendered in [Postman](https://www.getpostm ![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png "Postman") -For a more detailed example of a protofile that has Go templates enabled, [click here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/proto/examplepb/use_go_template.proto "Example protofile with Go template"). +For a more detailed example of a protofile that has Go templates enabled, [click here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto "Example protofile with Go template"). diff --git a/examples/README.md b/examples/internal/README.md similarity index 96% rename from examples/README.md rename to examples/internal/README.md index b7b486f244f..26d568c8a34 100644 --- a/examples/README.md +++ b/examples/internal/README.md @@ -9,7 +9,7 @@ Follow the guides from this [README.md](./browser/README.md) to run the server a ```bash # Make sure you are in the correct directory: # $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/examples -$ cd examples/browser +$ cd examples/internal/browser $ pwd # Install gulp diff --git a/examples/browser/.gitignore b/examples/internal/browser/.gitignore similarity index 100% rename from examples/browser/.gitignore rename to examples/internal/browser/.gitignore diff --git a/examples/browser/README.md b/examples/internal/browser/README.md similarity index 100% rename from examples/browser/README.md rename to examples/internal/browser/README.md diff --git a/examples/browser/a_bit_of_everything_service.spec.js b/examples/internal/browser/a_bit_of_everything_service.spec.js similarity index 100% rename from examples/browser/a_bit_of_everything_service.spec.js rename to examples/internal/browser/a_bit_of_everything_service.spec.js diff --git a/examples/browser/bin/.gitignore b/examples/internal/browser/bin/.gitignore similarity index 100% rename from examples/browser/bin/.gitignore rename to examples/internal/browser/bin/.gitignore diff --git a/examples/browser/bower.json b/examples/internal/browser/bower.json similarity index 100% rename from examples/browser/bower.json rename to examples/internal/browser/bower.json diff --git a/examples/browser/echo_service.spec.js b/examples/internal/browser/echo_service.spec.js similarity index 100% rename from examples/browser/echo_service.spec.js rename to examples/internal/browser/echo_service.spec.js diff --git a/examples/browser/gulpfile.js b/examples/internal/browser/gulpfile.js similarity index 76% rename from examples/browser/gulpfile.js rename to examples/internal/browser/gulpfile.js index 233afed40e0..a0a2411525d 100644 --- a/examples/browser/gulpfile.js +++ b/examples/internal/browser/gulpfile.js @@ -11,28 +11,28 @@ var shell = require('gulp-shell'); var jasmineBrowser = require('gulp-jasmine-browser'); var webpack = require('webpack-stream'); -gulp.task('bower', function(){ +gulp.task('bower', function () { return bower(); }); gulp.task('server', shell.task([ - 'go build -o bin/example-server github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-grpc-server', + 'go build -o bin/example-server github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-grpc-server', ])); gulp.task('gateway', shell.task([ - 'go build -o bin/example-gw github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-gateway-server', + 'go build -o bin/example-gw github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-gateway-server', ])); -gulp.task('serve-server', ['server'], function(){ +gulp.task('serve-server', ['server'], function () { gprocess.start('server-server', 'bin/example-server', [ - '--logtostderr', + '--logtostderr', ]); gulp.watch('bin/example-server', ['serve-server']); }); -gulp.task('serve-gateway', ['gateway', 'serve-server'], function(){ +gulp.task('serve-gateway', ['gateway', 'serve-server'], function () { gprocess.start('gateway-server', 'bin/example-gw', [ - '--logtostderr', '--swagger_dir', path.join(__dirname, "../proto/examplepb"), + '--logtostderr', '--swagger_dir', path.join(__dirname, "../proto/examplepb"), ]); gulp.watch('bin/example-gw', ['serve-gateway']); }); @@ -40,9 +40,9 @@ gulp.task('serve-gateway', ['gateway', 'serve-server'], function(){ gulp.task('backends', ['serve-gateway', 'serve-server']); var specFiles = ['*.spec.js']; -gulp.task('test', ['backends'], function(done) { +gulp.task('test', ['backends'], function (done) { return gulp.src(specFiles) - .pipe(webpack({output: {filename: 'spec.js'}})) + .pipe(webpack({ output: { filename: 'spec.js' } })) .pipe(jasmineBrowser.specRunner({ console: true, sourceMappedStacktrace: true, @@ -52,20 +52,20 @@ gulp.task('test', ['backends'], function(done) { catch: true, throwFailures: true, })) - .on('error', function(err) { + .on('error', function (err) { done(err); process.exit(1); }) .pipe(exit()); }); -gulp.task('serve', ['backends'], function(done) { +gulp.task('serve', ['backends'], function (done) { var JasminePlugin = require('gulp-jasmine-browser/webpack/jasmine-plugin'); var plugin = new JasminePlugin(); return gulp.src(specFiles) .pipe(webpack({ - output: {filename: 'spec.js'}, + output: { filename: 'spec.js' }, watch: true, plugins: [plugin], })) diff --git a/examples/browser/index.html b/examples/internal/browser/index.html similarity index 100% rename from examples/browser/index.html rename to examples/internal/browser/index.html diff --git a/examples/browser/package.json b/examples/internal/browser/package.json similarity index 100% rename from examples/browser/package.json rename to examples/internal/browser/package.json diff --git a/examples/clients/abe/.gitignore b/examples/internal/clients/abe/.gitignore similarity index 100% rename from examples/clients/abe/.gitignore rename to examples/internal/clients/abe/.gitignore diff --git a/examples/clients/abe/.swagger-codegen-ignore b/examples/internal/clients/abe/.swagger-codegen-ignore similarity index 100% rename from examples/clients/abe/.swagger-codegen-ignore rename to examples/internal/clients/abe/.swagger-codegen-ignore diff --git a/examples/clients/abe/.swagger-codegen/VERSION b/examples/internal/clients/abe/.swagger-codegen/VERSION similarity index 100% rename from examples/clients/abe/.swagger-codegen/VERSION rename to examples/internal/clients/abe/.swagger-codegen/VERSION diff --git a/examples/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel similarity index 88% rename from examples/clients/abe/BUILD.bazel rename to examples/internal/clients/abe/BUILD.bazel index a54d462444e..9c1bfc9ce2b 100644 --- a/examples/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -26,10 +26,10 @@ go_library( "model_sub_string_message.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/abe", deps = [ - "//examples/proto/examplepb:go_default_library", - "//examples/proto/pathenum:go_default_library", + "//examples/internal/proto/examplepb:go_default_library", + "//examples/internal/proto/pathenum:go_default_library", "//runtime:go_default_library", "@com_github_antihax_optional//:go_default_library", "@org_golang_x_oauth2//:go_default_library", diff --git a/examples/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml similarity index 100% rename from examples/clients/abe/api/swagger.yaml rename to examples/internal/clients/abe/api/swagger.yaml diff --git a/examples/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go similarity index 100% rename from examples/clients/abe/api_a_bit_of_everything_service.go rename to examples/internal/clients/abe/api_a_bit_of_everything_service.go diff --git a/examples/clients/abe/api_camel_case_service_name.go b/examples/internal/clients/abe/api_camel_case_service_name.go similarity index 100% rename from examples/clients/abe/api_camel_case_service_name.go rename to examples/internal/clients/abe/api_camel_case_service_name.go diff --git a/examples/clients/abe/api_echo_rpc.go b/examples/internal/clients/abe/api_echo_rpc.go similarity index 100% rename from examples/clients/abe/api_echo_rpc.go rename to examples/internal/clients/abe/api_echo_rpc.go diff --git a/examples/clients/abe/client.go b/examples/internal/clients/abe/client.go similarity index 100% rename from examples/clients/abe/client.go rename to examples/internal/clients/abe/client.go diff --git a/examples/clients/abe/configuration.go b/examples/internal/clients/abe/configuration.go similarity index 100% rename from examples/clients/abe/configuration.go rename to examples/internal/clients/abe/configuration.go diff --git a/examples/clients/abe/enum_helper.go b/examples/internal/clients/abe/enum_helper.go similarity index 89% rename from examples/clients/abe/enum_helper.go rename to examples/internal/clients/abe/enum_helper.go index df9e20fb66e..01a68b848dd 100644 --- a/examples/clients/abe/enum_helper.go +++ b/examples/internal/clients/abe/enum_helper.go @@ -1,8 +1,8 @@ package abe import ( - pbexamplepb "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" - pbpathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" + pbexamplepb "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + pbpathenum "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/runtime" ) diff --git a/examples/clients/abe/model_a_bit_of_everything_nested.go b/examples/internal/clients/abe/model_a_bit_of_everything_nested.go similarity index 100% rename from examples/clients/abe/model_a_bit_of_everything_nested.go rename to examples/internal/clients/abe/model_a_bit_of_everything_nested.go diff --git a/examples/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go similarity index 100% rename from examples/clients/abe/model_examplepb_a_bit_of_everything.go rename to examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go diff --git a/examples/clients/abe/model_examplepb_a_bit_of_everything_repeated.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go similarity index 100% rename from examples/clients/abe/model_examplepb_a_bit_of_everything_repeated.go rename to examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go diff --git a/examples/clients/abe/model_examplepb_body.go b/examples/internal/clients/abe/model_examplepb_body.go similarity index 100% rename from examples/clients/abe/model_examplepb_body.go rename to examples/internal/clients/abe/model_examplepb_body.go diff --git a/examples/clients/abe/model_examplepb_numeric_enum.go b/examples/internal/clients/abe/model_examplepb_numeric_enum.go similarity index 100% rename from examples/clients/abe/model_examplepb_numeric_enum.go rename to examples/internal/clients/abe/model_examplepb_numeric_enum.go diff --git a/examples/clients/abe/model_examplepb_update_v2_request.go b/examples/internal/clients/abe/model_examplepb_update_v2_request.go similarity index 100% rename from examples/clients/abe/model_examplepb_update_v2_request.go rename to examples/internal/clients/abe/model_examplepb_update_v2_request.go diff --git a/examples/clients/abe/model_message_path_enum_nested_path_enum.go b/examples/internal/clients/abe/model_message_path_enum_nested_path_enum.go similarity index 100% rename from examples/clients/abe/model_message_path_enum_nested_path_enum.go rename to examples/internal/clients/abe/model_message_path_enum_nested_path_enum.go diff --git a/examples/clients/abe/model_nested_deep_enum.go b/examples/internal/clients/abe/model_nested_deep_enum.go similarity index 100% rename from examples/clients/abe/model_nested_deep_enum.go rename to examples/internal/clients/abe/model_nested_deep_enum.go diff --git a/examples/clients/abe/model_pathenum_path_enum.go b/examples/internal/clients/abe/model_pathenum_path_enum.go similarity index 100% rename from examples/clients/abe/model_pathenum_path_enum.go rename to examples/internal/clients/abe/model_pathenum_path_enum.go diff --git a/examples/clients/abe/model_protobuf_any.go b/examples/internal/clients/abe/model_protobuf_any.go similarity index 100% rename from examples/clients/abe/model_protobuf_any.go rename to examples/internal/clients/abe/model_protobuf_any.go diff --git a/examples/clients/abe/model_protobuf_field_mask.go b/examples/internal/clients/abe/model_protobuf_field_mask.go similarity index 100% rename from examples/clients/abe/model_protobuf_field_mask.go rename to examples/internal/clients/abe/model_protobuf_field_mask.go diff --git a/examples/clients/abe/model_runtime_error.go b/examples/internal/clients/abe/model_runtime_error.go similarity index 100% rename from examples/clients/abe/model_runtime_error.go rename to examples/internal/clients/abe/model_runtime_error.go diff --git a/examples/clients/abe/model_sub_string_message.go b/examples/internal/clients/abe/model_sub_string_message.go similarity index 100% rename from examples/clients/abe/model_sub_string_message.go rename to examples/internal/clients/abe/model_sub_string_message.go diff --git a/examples/clients/abe/response.go b/examples/internal/clients/abe/response.go similarity index 100% rename from examples/clients/abe/response.go rename to examples/internal/clients/abe/response.go diff --git a/examples/clients/echo/.gitignore b/examples/internal/clients/echo/.gitignore similarity index 100% rename from examples/clients/echo/.gitignore rename to examples/internal/clients/echo/.gitignore diff --git a/examples/clients/echo/.swagger-codegen-ignore b/examples/internal/clients/echo/.swagger-codegen-ignore similarity index 100% rename from examples/clients/echo/.swagger-codegen-ignore rename to examples/internal/clients/echo/.swagger-codegen-ignore diff --git a/examples/clients/echo/.swagger-codegen/VERSION b/examples/internal/clients/echo/.swagger-codegen/VERSION similarity index 100% rename from examples/clients/echo/.swagger-codegen/VERSION rename to examples/internal/clients/echo/.swagger-codegen/VERSION diff --git a/examples/clients/echo/BUILD.bazel b/examples/internal/clients/echo/BUILD.bazel similarity index 96% rename from examples/clients/echo/BUILD.bazel rename to examples/internal/clients/echo/BUILD.bazel index 5700dd477c1..9f4aaa27eca 100644 --- a/examples/clients/echo/BUILD.bazel +++ b/examples/internal/clients/echo/BUILD.bazel @@ -14,7 +14,7 @@ go_library( "model_runtime_error.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/echo", deps = [ "@com_github_antihax_optional//:go_default_library", "@org_golang_x_oauth2//:go_default_library", diff --git a/examples/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml similarity index 100% rename from examples/clients/echo/api/swagger.yaml rename to examples/internal/clients/echo/api/swagger.yaml diff --git a/examples/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go similarity index 100% rename from examples/clients/echo/api_echo_service.go rename to examples/internal/clients/echo/api_echo_service.go diff --git a/examples/clients/echo/client.go b/examples/internal/clients/echo/client.go similarity index 100% rename from examples/clients/echo/client.go rename to examples/internal/clients/echo/client.go diff --git a/examples/clients/echo/configuration.go b/examples/internal/clients/echo/configuration.go similarity index 100% rename from examples/clients/echo/configuration.go rename to examples/internal/clients/echo/configuration.go diff --git a/examples/clients/echo/model_examplepb_embedded.go b/examples/internal/clients/echo/model_examplepb_embedded.go similarity index 100% rename from examples/clients/echo/model_examplepb_embedded.go rename to examples/internal/clients/echo/model_examplepb_embedded.go diff --git a/examples/clients/echo/model_examplepb_simple_message.go b/examples/internal/clients/echo/model_examplepb_simple_message.go similarity index 100% rename from examples/clients/echo/model_examplepb_simple_message.go rename to examples/internal/clients/echo/model_examplepb_simple_message.go diff --git a/examples/clients/echo/model_protobuf_any.go b/examples/internal/clients/echo/model_protobuf_any.go similarity index 100% rename from examples/clients/echo/model_protobuf_any.go rename to examples/internal/clients/echo/model_protobuf_any.go diff --git a/examples/clients/echo/model_runtime_error.go b/examples/internal/clients/echo/model_runtime_error.go similarity index 100% rename from examples/clients/echo/model_runtime_error.go rename to examples/internal/clients/echo/model_runtime_error.go diff --git a/examples/clients/echo/response.go b/examples/internal/clients/echo/response.go similarity index 100% rename from examples/clients/echo/response.go rename to examples/internal/clients/echo/response.go diff --git a/examples/clients/responsebody/.gitignore b/examples/internal/clients/responsebody/.gitignore similarity index 100% rename from examples/clients/responsebody/.gitignore rename to examples/internal/clients/responsebody/.gitignore diff --git a/examples/clients/responsebody/.swagger-codegen-ignore b/examples/internal/clients/responsebody/.swagger-codegen-ignore similarity index 100% rename from examples/clients/responsebody/.swagger-codegen-ignore rename to examples/internal/clients/responsebody/.swagger-codegen-ignore diff --git a/examples/clients/responsebody/.swagger-codegen/VERSION b/examples/internal/clients/responsebody/.swagger-codegen/VERSION similarity index 100% rename from examples/clients/responsebody/.swagger-codegen/VERSION rename to examples/internal/clients/responsebody/.swagger-codegen/VERSION diff --git a/examples/clients/responsebody/BUILD.bazel b/examples/internal/clients/responsebody/BUILD.bazel similarity index 95% rename from examples/clients/responsebody/BUILD.bazel rename to examples/internal/clients/responsebody/BUILD.bazel index cf94bfa564a..4b5a31badea 100644 --- a/examples/clients/responsebody/BUILD.bazel +++ b/examples/internal/clients/responsebody/BUILD.bazel @@ -16,7 +16,7 @@ go_library( "model_runtime_error.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/responsebody", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/responsebody", visibility = ["//visibility:public"], deps = ["@org_golang_x_oauth2//:go_default_library"], ) diff --git a/examples/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml similarity index 99% rename from examples/clients/responsebody/api/swagger.yaml rename to examples/internal/clients/responsebody/api/swagger.yaml index 30d7604c7ff..1b9cedfa7cc 100644 --- a/examples/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -2,7 +2,7 @@ swagger: "2.0" info: version: "version not set" - title: "examples/proto/examplepb/response_body_service.proto" + title: "examples/internal/proto/examplepb/response_body_service.proto" consumes: - "application/json" produces: diff --git a/examples/clients/responsebody/api_response_body_service.go b/examples/internal/clients/responsebody/api_response_body_service.go similarity index 99% rename from examples/clients/responsebody/api_response_body_service.go rename to examples/internal/clients/responsebody/api_response_body_service.go index 575d8b40eb4..12637f0acfa 100644 --- a/examples/clients/responsebody/api_response_body_service.go +++ b/examples/internal/clients/responsebody/api_response_body_service.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/client.go b/examples/internal/clients/responsebody/client.go similarity index 98% rename from examples/clients/responsebody/client.go rename to examples/internal/clients/responsebody/client.go index e728fd1eecd..dfe97e57135 100644 --- a/examples/clients/responsebody/client.go +++ b/examples/internal/clients/responsebody/client.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * @@ -37,7 +37,7 @@ var ( xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") ) -// APIClient manages communication with the examples/proto/examplepb/response_body_service.proto API vversion not set +// APIClient manages communication with the examples/internal/proto/examplepb/response_body_service.proto API vversion not set // In most cases there should be only one, shared, APIClient. type APIClient struct { cfg *Configuration diff --git a/examples/clients/responsebody/configuration.go b/examples/internal/clients/responsebody/configuration.go similarity index 97% rename from examples/clients/responsebody/configuration.go rename to examples/internal/clients/responsebody/configuration.go index cae2bff96f6..fa7de58d731 100644 --- a/examples/clients/responsebody/configuration.go +++ b/examples/internal/clients/responsebody/configuration.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md b/examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md rename to examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOut.md diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md b/examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md rename to examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseBodyOutResponse.md diff --git a/examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md b/examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md rename to examples/internal/clients/responsebody/docs/ExamplepbRepeatedResponseStrings.md diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md b/examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessage.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbResponseBodyMessage.md rename to examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessage.md diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md b/examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md rename to examples/internal/clients/responsebody/docs/ExamplepbResponseBodyMessageResponse.md diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md b/examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOut.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbResponseBodyOut.md rename to examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOut.md diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md b/examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md rename to examples/internal/clients/responsebody/docs/ExamplepbResponseBodyOutResponse.md diff --git a/examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md b/examples/internal/clients/responsebody/docs/ExamplepbResponseBodyReq.md similarity index 100% rename from examples/clients/responsebody/docs/ExamplepbResponseBodyReq.md rename to examples/internal/clients/responsebody/docs/ExamplepbResponseBodyReq.md diff --git a/examples/clients/responsebody/docs/ProtobufAny.md b/examples/internal/clients/responsebody/docs/ProtobufAny.md similarity index 100% rename from examples/clients/responsebody/docs/ProtobufAny.md rename to examples/internal/clients/responsebody/docs/ProtobufAny.md diff --git a/examples/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md similarity index 100% rename from examples/clients/responsebody/docs/ResponseBodyServiceApi.md rename to examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md diff --git a/examples/clients/responsebody/docs/ResponseResponseType.md b/examples/internal/clients/responsebody/docs/ResponseResponseType.md similarity index 100% rename from examples/clients/responsebody/docs/ResponseResponseType.md rename to examples/internal/clients/responsebody/docs/ResponseResponseType.md diff --git a/examples/clients/responsebody/docs/RuntimeError.md b/examples/internal/clients/responsebody/docs/RuntimeError.md similarity index 100% rename from examples/clients/responsebody/docs/RuntimeError.md rename to examples/internal/clients/responsebody/docs/RuntimeError.md diff --git a/examples/clients/responsebody/model_examplepb_repeated_response_body_out.go b/examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out.go similarity index 85% rename from examples/clients/responsebody/model_examplepb_repeated_response_body_out.go rename to examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out.go index 8ca6f95e154..574246373eb 100644 --- a/examples/clients/responsebody/model_examplepb_repeated_response_body_out.go +++ b/examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go b/examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out_response.go similarity index 86% rename from examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go rename to examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out_response.go index 9b15a6a5b2c..1ea5daf3fae 100644 --- a/examples/clients/responsebody/model_examplepb_repeated_response_body_out_response.go +++ b/examples/internal/clients/responsebody/model_examplepb_repeated_response_body_out_response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_examplepb_repeated_response_strings.go b/examples/internal/clients/responsebody/model_examplepb_repeated_response_strings.go similarity index 84% rename from examples/clients/responsebody/model_examplepb_repeated_response_strings.go rename to examples/internal/clients/responsebody/model_examplepb_repeated_response_strings.go index f25b08479ba..47ec55c7f12 100644 --- a/examples/clients/responsebody/model_examplepb_repeated_response_strings.go +++ b/examples/internal/clients/responsebody/model_examplepb_repeated_response_strings.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_examplepb_response_body_out.go b/examples/internal/clients/responsebody/model_examplepb_response_body_out.go similarity index 85% rename from examples/clients/responsebody/model_examplepb_response_body_out.go rename to examples/internal/clients/responsebody/model_examplepb_response_body_out.go index 4775292258a..ea912e8976d 100644 --- a/examples/clients/responsebody/model_examplepb_response_body_out.go +++ b/examples/internal/clients/responsebody/model_examplepb_response_body_out.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_examplepb_response_body_out_response.go b/examples/internal/clients/responsebody/model_examplepb_response_body_out_response.go similarity index 84% rename from examples/clients/responsebody/model_examplepb_response_body_out_response.go rename to examples/internal/clients/responsebody/model_examplepb_response_body_out_response.go index 8ef1dd1469e..b78f80ec655 100644 --- a/examples/clients/responsebody/model_examplepb_response_body_out_response.go +++ b/examples/internal/clients/responsebody/model_examplepb_response_body_out_response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_protobuf_any.go b/examples/internal/clients/responsebody/model_protobuf_any.go similarity index 98% rename from examples/clients/responsebody/model_protobuf_any.go rename to examples/internal/clients/responsebody/model_protobuf_any.go index 902926206f8..28dac0342e2 100644 --- a/examples/clients/responsebody/model_protobuf_any.go +++ b/examples/internal/clients/responsebody/model_protobuf_any.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_response_response_type.go b/examples/internal/clients/responsebody/model_response_response_type.go similarity index 88% rename from examples/clients/responsebody/model_response_response_type.go rename to examples/internal/clients/responsebody/model_response_response_type.go index 4db9360c72f..b249571ee56 100644 --- a/examples/clients/responsebody/model_response_response_type.go +++ b/examples/internal/clients/responsebody/model_response_response_type.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/model_runtime_error.go b/examples/internal/clients/responsebody/model_runtime_error.go similarity index 87% rename from examples/clients/responsebody/model_runtime_error.go rename to examples/internal/clients/responsebody/model_runtime_error.go index a7f7a1d0569..c23ba823000 100644 --- a/examples/clients/responsebody/model_runtime_error.go +++ b/examples/internal/clients/responsebody/model_runtime_error.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/responsebody/response.go b/examples/internal/clients/responsebody/response.go similarity index 95% rename from examples/clients/responsebody/response.go rename to examples/internal/clients/responsebody/response.go index 1fdaa337c51..09f1698e322 100644 --- a/examples/clients/responsebody/response.go +++ b/examples/internal/clients/responsebody/response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/response_body_service.proto + * examples/internal/proto/examplepb/response_body_service.proto * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * diff --git a/examples/clients/unannotatedecho/.gitignore b/examples/internal/clients/unannotatedecho/.gitignore similarity index 100% rename from examples/clients/unannotatedecho/.gitignore rename to examples/internal/clients/unannotatedecho/.gitignore diff --git a/examples/clients/unannotatedecho/.swagger-codegen-ignore b/examples/internal/clients/unannotatedecho/.swagger-codegen-ignore similarity index 100% rename from examples/clients/unannotatedecho/.swagger-codegen-ignore rename to examples/internal/clients/unannotatedecho/.swagger-codegen-ignore diff --git a/examples/clients/unannotatedecho/.swagger-codegen/VERSION b/examples/internal/clients/unannotatedecho/.swagger-codegen/VERSION similarity index 100% rename from examples/clients/unannotatedecho/.swagger-codegen/VERSION rename to examples/internal/clients/unannotatedecho/.swagger-codegen/VERSION diff --git a/examples/clients/unannotatedecho/BUILD.bazel b/examples/internal/clients/unannotatedecho/BUILD.bazel similarity index 94% rename from examples/clients/unannotatedecho/BUILD.bazel rename to examples/internal/clients/unannotatedecho/BUILD.bazel index f34a3fac4e0..95d9d6b3b67 100644 --- a/examples/clients/unannotatedecho/BUILD.bazel +++ b/examples/internal/clients/unannotatedecho/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "model_runtime_error.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/unannotatedecho", deps = [ "@com_github_antihax_optional//:go_default_library", "@org_golang_x_oauth2//:go_default_library", diff --git a/examples/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml similarity index 99% rename from examples/clients/unannotatedecho/api/swagger.yaml rename to examples/internal/clients/unannotatedecho/api/swagger.yaml index da2fb50e598..2dbae78a5f6 100644 --- a/examples/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -6,7 +6,7 @@ info: \ in\ngRPC API configuration format.\n\nEcho Service API consists of a single\ \ service which returns\na message." version: "version not set" - title: "examples/proto/examplepb/unannotated_echo_service.proto" + title: "examples/internal/proto/examplepb/unannotated_echo_service.proto" consumes: - "application/json" produces: diff --git a/examples/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go similarity index 99% rename from examples/clients/unannotatedecho/api_unannotated_echo_service.go rename to examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index d864a7411e7..8eec8d0fede 100644 --- a/examples/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/unannotatedecho/client.go b/examples/internal/clients/unannotatedecho/client.go similarity index 98% rename from examples/clients/unannotatedecho/client.go rename to examples/internal/clients/unannotatedecho/client.go index a7cdc750e4e..7907be83032 100644 --- a/examples/clients/unannotatedecho/client.go +++ b/examples/internal/clients/unannotatedecho/client.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * @@ -37,7 +37,7 @@ var ( xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") ) -// APIClient manages communication with the examples/proto/examplepb/unannotated_echo_service.proto API vversion not set +// APIClient manages communication with the examples/internal/proto/examplepb/unannotated_echo_service.proto API vversion not set // In most cases there should be only one, shared, APIClient. type APIClient struct { cfg *Configuration diff --git a/examples/clients/unannotatedecho/configuration.go b/examples/internal/clients/unannotatedecho/configuration.go similarity index 97% rename from examples/clients/unannotatedecho/configuration.go rename to examples/internal/clients/unannotatedecho/configuration.go index fe53e0374ad..1b38b7fb35f 100644 --- a/examples/clients/unannotatedecho/configuration.go +++ b/examples/internal/clients/unannotatedecho/configuration.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go similarity index 91% rename from examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go rename to examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go index c400daa0b55..689ee5b1981 100644 --- a/examples/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go +++ b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/unannotatedecho/model_protobuf_any.go b/examples/internal/clients/unannotatedecho/model_protobuf_any.go similarity index 98% rename from examples/clients/unannotatedecho/model_protobuf_any.go rename to examples/internal/clients/unannotatedecho/model_protobuf_any.go index 6959023a2ac..57dcc002ecb 100644 --- a/examples/clients/unannotatedecho/model_protobuf_any.go +++ b/examples/internal/clients/unannotatedecho/model_protobuf_any.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/unannotatedecho/model_runtime_error.go b/examples/internal/clients/unannotatedecho/model_runtime_error.go similarity index 90% rename from examples/clients/unannotatedecho/model_runtime_error.go rename to examples/internal/clients/unannotatedecho/model_runtime_error.go index 30f7572025d..8518d725074 100644 --- a/examples/clients/unannotatedecho/model_runtime_error.go +++ b/examples/internal/clients/unannotatedecho/model_runtime_error.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/clients/unannotatedecho/response.go b/examples/internal/clients/unannotatedecho/response.go similarity index 95% rename from examples/clients/unannotatedecho/response.go rename to examples/internal/clients/unannotatedecho/response.go index 3121acc8950..56f6b3e0bf8 100644 --- a/examples/clients/unannotatedecho/response.go +++ b/examples/internal/clients/unannotatedecho/response.go @@ -1,5 +1,5 @@ /* - * examples/proto/examplepb/unannotated_echo_service.proto + * examples/internal/proto/examplepb/unannotated_echo_service.proto * * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. * diff --git a/examples/cmd/example-gateway-server/BUILD.bazel b/examples/internal/cmd/example-gateway-server/BUILD.bazel similarity index 82% rename from examples/cmd/example-gateway-server/BUILD.bazel rename to examples/internal/cmd/example-gateway-server/BUILD.bazel index 0f7c5052e7e..324b14b8351 100644 --- a/examples/cmd/example-gateway-server/BUILD.bazel +++ b/examples/internal/cmd/example-gateway-server/BUILD.bazel @@ -3,10 +3,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-gateway-server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-gateway-server", visibility = ["//visibility:private"], deps = [ - "//examples/gateway:go_default_library", + "//examples/internal/gateway:go_default_library", "@com_github_golang_glog//:go_default_library", ], ) diff --git a/examples/cmd/example-gateway-server/main.go b/examples/internal/cmd/example-gateway-server/main.go similarity index 77% rename from examples/cmd/example-gateway-server/main.go rename to examples/internal/cmd/example-gateway-server/main.go index 0273ffbbbc1..ba10f1b9e5b 100644 --- a/examples/cmd/example-gateway-server/main.go +++ b/examples/internal/cmd/example-gateway-server/main.go @@ -9,13 +9,13 @@ import ( "flag" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/gateway" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway" ) var ( endpoint = flag.String("endpoint", "localhost:9090", "endpoint of the gRPC service") network = flag.String("network", "tcp", `one of "tcp" or "unix". Must be consistent to -endpoint`) - swaggerDir = flag.String("swagger_dir", "examples/proto/examplepb", "path to the directory which contains swagger definitions") + swaggerDir = flag.String("swagger_dir", "examples/internal/proto/examplepb", "path to the directory which contains swagger definitions") ) func main() { diff --git a/examples/cmd/example-grpc-server/BUILD.bazel b/examples/internal/cmd/example-grpc-server/BUILD.bazel similarity index 82% rename from examples/cmd/example-grpc-server/BUILD.bazel rename to examples/internal/cmd/example-grpc-server/BUILD.bazel index 1c66416c6ba..925cb981256 100644 --- a/examples/cmd/example-grpc-server/BUILD.bazel +++ b/examples/internal/cmd/example-grpc-server/BUILD.bazel @@ -5,9 +5,9 @@ package(default_visibility = ["//visibility:private"]) go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/cmd/example-grpc-server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-grpc-server", deps = [ - "//examples/server:go_default_library", + "//examples/internal/server:go_default_library", "@com_github_golang_glog//:go_default_library", ], ) diff --git a/examples/cmd/example-grpc-server/main.go b/examples/internal/cmd/example-grpc-server/main.go similarity index 88% rename from examples/cmd/example-grpc-server/main.go rename to examples/internal/cmd/example-grpc-server/main.go index 7f6c45f56e5..1e44a161536 100644 --- a/examples/cmd/example-grpc-server/main.go +++ b/examples/internal/cmd/example-grpc-server/main.go @@ -9,7 +9,7 @@ import ( "flag" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/server" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server" ) var ( diff --git a/examples/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel similarity index 86% rename from examples/gateway/BUILD.bazel rename to examples/internal/gateway/BUILD.bazel index 393a7c41f9c..f9c1e8a9ede 100644 --- a/examples/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -8,10 +8,10 @@ go_library( "handlers.go", "main.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/gateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway", visibility = ["//visibility:public"], deps = [ - "//examples/proto/examplepb:go_default_library", + "//examples/internal/proto/examplepb:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@org_golang_google_grpc//:go_default_library", diff --git a/examples/gateway/doc.go b/examples/internal/gateway/doc.go similarity index 100% rename from examples/gateway/doc.go rename to examples/internal/gateway/doc.go diff --git a/examples/gateway/gateway.go b/examples/internal/gateway/gateway.go similarity index 95% rename from examples/gateway/gateway.go rename to examples/internal/gateway/gateway.go index 5fccade22ce..e85fb4219b4 100644 --- a/examples/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -7,7 +7,7 @@ import ( "net/http" "time" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc" ) diff --git a/examples/gateway/handlers.go b/examples/internal/gateway/handlers.go similarity index 100% rename from examples/gateway/handlers.go rename to examples/internal/gateway/handlers.go diff --git a/examples/gateway/main.go b/examples/internal/gateway/main.go similarity index 100% rename from examples/gateway/main.go rename to examples/internal/gateway/main.go diff --git a/examples/pbwrappers/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel similarity index 96% rename from examples/pbwrappers/helloworld/BUILD.bazel rename to examples/internal/helloworld/BUILD.bazel index 01949ef7e9d..d926aca22b9 100644 --- a/examples/pbwrappers/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -15,7 +15,7 @@ proto_library( go_proto_library( name = "helloworld_go_proto", compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/pbwrappers/helloworld", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/helloworld", proto = ":helloworld_proto", visibility = ["//visibility:public"], deps = ["@go_googleapis//google/api:annotations_go_proto"], @@ -25,7 +25,7 @@ go_library( name = "go_default_library", srcs = ["helloworld.pb.gw.go"], embed = [":helloworld_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/pbwrappers/helloworld", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/helloworld", visibility = ["//visibility:public"], deps = [ "//runtime:go_default_library", diff --git a/examples/pbwrappers/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go similarity index 100% rename from examples/pbwrappers/helloworld/helloworld.pb.go rename to examples/internal/helloworld/helloworld.pb.go diff --git a/examples/pbwrappers/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go similarity index 100% rename from examples/pbwrappers/helloworld/helloworld.pb.gw.go rename to examples/internal/helloworld/helloworld.pb.gw.go diff --git a/examples/pbwrappers/helloworld/helloworld.proto b/examples/internal/helloworld/helloworld.proto similarity index 100% rename from examples/pbwrappers/helloworld/helloworld.proto rename to examples/internal/helloworld/helloworld.proto diff --git a/examples/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel similarity index 61% rename from examples/integration/BUILD.bazel rename to examples/internal/integration/BUILD.bazel index cee9f33f7f8..57a5e220e53 100644 --- a/examples/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -10,14 +10,14 @@ go_test( "proto_error_test.go", ], deps = [ - "//examples/clients/abe:go_default_library", - "//examples/clients/echo:go_default_library", - "//examples/clients/unannotatedecho:go_default_library", - "//examples/gateway:go_default_library", - "//examples/proto/examplepb:go_default_library", - "//examples/proto/pathenum:go_default_library", - "//examples/proto/sub:go_default_library", - "//examples/server:go_default_library", + "//examples/internal/clients/abe:go_default_library", + "//examples/internal/clients/echo:go_default_library", + "//examples/internal/clients/unannotatedecho:go_default_library", + "//examples/internal/gateway:go_default_library", + "//examples/internal/proto/examplepb:go_default_library", + "//examples/internal/proto/pathenum:go_default_library", + "//examples/internal/proto/sub:go_default_library", + "//examples/internal/server:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", diff --git a/examples/integration/client_test.go b/examples/internal/integration/client_test.go similarity index 95% rename from examples/integration/client_test.go rename to examples/internal/integration/client_test.go index 8ca2807d97b..813158025aa 100644 --- a/examples/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" - "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe" - "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo" - "github.com/grpc-ecosystem/grpc-gateway/examples/clients/unannotatedecho" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/abe" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/echo" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/unannotatedecho" ) func TestEchoClient(t *testing.T) { diff --git a/examples/integration/fieldmask_test.go b/examples/internal/integration/fieldmask_test.go similarity index 98% rename from examples/integration/fieldmask_test.go rename to examples/internal/integration/fieldmask_test.go index 94131079cea..18f494ac457 100644 --- a/examples/integration/fieldmask_test.go +++ b/examples/internal/integration/fieldmask_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/golang/protobuf/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/genproto/protobuf/field_mask" ) diff --git a/examples/integration/integration_test.go b/examples/internal/integration/integration_test.go similarity index 99% rename from examples/integration/integration_test.go rename to examples/internal/integration/integration_test.go index bdc5fd23777..31370468f05 100644 --- a/examples/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -20,9 +20,9 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - gw "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + gw "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" diff --git a/examples/integration/main_test.go b/examples/internal/integration/main_test.go similarity index 88% rename from examples/integration/main_test.go rename to examples/internal/integration/main_test.go index d9ff64c3cc9..3c43d6a2087 100644 --- a/examples/integration/main_test.go +++ b/examples/internal/integration/main_test.go @@ -10,15 +10,15 @@ import ( "time" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/gateway" - server "github.com/grpc-ecosystem/grpc-gateway/examples/server" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway" + server "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server" gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" ) var ( endpoint = flag.String("endpoint", "localhost:9090", "endpoint of the gRPC service") network = flag.String("network", "tcp", `one of "tcp" or "unix". Must be consistent to -endpoint`) - swaggerDir = flag.String("swagger_dir", "examples/proto/examplepb", "path to the directory which contains swagger definitions") + swaggerDir = flag.String("swagger_dir", "examples/internal/proto/examplepb", "path to the directory which contains swagger definitions") ) func runGateway(ctx context.Context, addr string, opts ...gwruntime.ServeMuxOption) error { diff --git a/examples/integration/proto_error_test.go b/examples/internal/integration/proto_error_test.go similarity index 100% rename from examples/integration/proto_error_test.go rename to examples/internal/integration/proto_error_test.go diff --git a/examples/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel similarity index 88% rename from examples/proto/examplepb/BUILD.bazel rename to examples/internal/proto/examplepb/BUILD.bazel index ac90b28a4ba..4dd1475c710 100644 --- a/examples/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -39,9 +39,9 @@ proto_library( "wrappers.proto", ], deps = [ - "//examples/proto/pathenum:pathenum_proto", - "//examples/proto/sub:sub_proto", - "//examples/proto/sub2:sub2_proto", + "//examples/internal/proto/pathenum:pathenum_proto", + "//examples/internal/proto/sub:sub_proto", + "//examples/internal/proto/sub2:sub2_proto", "//protoc-gen-swagger/options:options_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", @@ -58,12 +58,12 @@ go_proto_library( "@io_bazel_rules_go//proto:go_grpc", "//protoc-gen-grpc-gateway:go_gen_grpc_gateway", # keep ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb", proto = ":examplepb_proto", deps = [ - "//examples/proto/pathenum:go_default_library", - "//examples/proto/sub:go_default_library", - "//examples/proto/sub2:go_default_library", + "//examples/internal/proto/pathenum:go_default_library", + "//examples/internal/proto/sub:go_default_library", + "//examples/internal/proto/sub2:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", @@ -74,7 +74,7 @@ go_library( name = "go_default_library", srcs = ["unannotated_echo_service.pb.gw.go"], embed = [":examplepb_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb", deps = [ "//runtime:go_default_library", "//utilities:go_default_library", diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go similarity index 67% rename from examples/proto/examplepb/a_bit_of_everything.pb.go rename to examples/internal/proto/examplepb/a_bit_of_everything.pb.go index a1320ed9b51..a34ed9d779a 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/a_bit_of_everything.proto +// source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb @@ -11,9 +11,9 @@ import ( empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" wrappers "github.com/golang/protobuf/ptypes/wrappers" - pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" - sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" + pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" + sub "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" + sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" @@ -59,7 +59,7 @@ func (x NumericEnum) String() string { } func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{0} + return fileDescriptor_e6ccf6cab3ab66ab, []int{0} } // DeepEnum is one or zero. @@ -87,7 +87,7 @@ func (x ABitOfEverything_Nested_DeepEnum) String() string { } func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{0, 0, 0} + return fileDescriptor_e6ccf6cab3ab66ab, []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. @@ -106,9 +106,9 @@ type ABitOfEverything struct { StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value,omitempty"` - PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.PathEnum" json:"path_enum_value,omitempty"` - NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"enum_value,omitempty"` + PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.PathEnum" json:"path_enum_value,omitempty"` + NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` @@ -118,17 +118,17 @@ type ABitOfEverything struct { // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` - MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum"` MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` // repeated numeric enum comment (This comment is overridden by the field annotation) - RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` + RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` // numeric enum comment (This comment is overridden by the field annotation) - EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` + EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` // repeated string comment (This comment is overridden by the field annotation) RepeatedStringAnnotation []string `protobuf:"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3" json:"repeated_string_annotation,omitempty"` // repeated nested object comment (This comment is overridden by the field annotation) @@ -145,7 +145,7 @@ func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything) ProtoMessage() {} func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{0} + return fileDescriptor_e6ccf6cab3ab66ab, []int{0} } func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { @@ -455,7 +455,7 @@ type ABitOfEverything_Nested struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` // DeepEnum comment. - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -465,7 +465,7 @@ func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } func (*ABitOfEverything_Nested) ProtoMessage() {} func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{0, 0} + return fileDescriptor_e6ccf6cab3ab66ab, []int{0, 0} } func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { @@ -521,7 +521,7 @@ type ABitOfEverythingRepeated struct { PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3" json:"path_repeated_string_value,omitempty"` PathRepeatedBytesValue [][]byte `protobuf:"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3" json:"path_repeated_bytes_value,omitempty"` PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3" json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` + PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3" json:"path_repeated_sfixed32_value,omitempty"` PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` @@ -535,7 +535,7 @@ func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeat func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } func (*ABitOfEverythingRepeated) ProtoMessage() {} func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{1} + return fileDescriptor_e6ccf6cab3ab66ab, []int{1} } func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { @@ -679,7 +679,7 @@ func (m *Body) Reset() { *m = Body{} } func (m *Body) String() string { return proto.CompactTextString(m) } func (*Body) ProtoMessage() {} func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{2} + return fileDescriptor_e6ccf6cab3ab66ab, []int{2} } func (m *Body) XXX_Unmarshal(b []byte) error { @@ -719,7 +719,7 @@ func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } func (*MessageWithBody) ProtoMessage() {} func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{3} + return fileDescriptor_e6ccf6cab3ab66ab, []int{3} } func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { @@ -767,7 +767,7 @@ func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } func (*UpdateV2Request) ProtoMessage() {} func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_3978364c010e812a, []int{4} + return fileDescriptor_e6ccf6cab3ab66ab, []int{4} } func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { @@ -803,252 +803,253 @@ func (m *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { } func init() { - proto.RegisterEnum("grpc.gateway.examples.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) - proto.RegisterEnum("grpc.gateway.examples.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) - proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything") - proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MapValueEntry") - proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MappedNestedValueEntry") - proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.MappedStringValueEntry") - proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.examplepb.ABitOfEverything.Nested") - proto.RegisterType((*ABitOfEverythingRepeated)(nil), "grpc.gateway.examples.examplepb.ABitOfEverythingRepeated") - proto.RegisterType((*Body)(nil), "grpc.gateway.examples.examplepb.Body") - proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.examplepb.MessageWithBody") - proto.RegisterType((*UpdateV2Request)(nil), "grpc.gateway.examples.examplepb.UpdateV2Request") + proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) + proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) + proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything") + proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry") + proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry") + proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry") + proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested") + proto.RegisterType((*ABitOfEverythingRepeated)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated") + proto.RegisterType((*Body)(nil), "grpc.gateway.examples.internal.examplepb.Body") + proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.internal.examplepb.MessageWithBody") + proto.RegisterType((*UpdateV2Request)(nil), "grpc.gateway.examples.internal.examplepb.UpdateV2Request") } func init() { - proto.RegisterFile("examples/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_3978364c010e812a) -} - -var fileDescriptor_3978364c010e812a = []byte{ - // 3621 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x70, 0x1c, 0xc7, - 0x5a, 0xd7, 0xec, 0x48, 0xb2, 0xd4, 0xb2, 0x2c, 0xa9, 0x65, 0xd9, 0xf2, 0x5a, 0x89, 0xda, 0x63, - 0xe7, 0x65, 0xbc, 0xcf, 0xbb, 0x23, 0x8d, 0x94, 0xc4, 0xde, 0xf0, 0x92, 0xec, 0x4a, 0xb2, 0x23, - 0x3b, 0x91, 0x95, 0xb1, 0x63, 0x82, 0x5f, 0xfc, 0x44, 0xef, 0x6e, 0x4b, 0x3b, 0xd6, 0xce, 0xf4, - 0xbc, 0x99, 0x1e, 0x59, 0x6b, 0xb1, 0xf0, 0x0a, 0x28, 0x28, 0x78, 0xb7, 0x7d, 0xfc, 0x29, 0x48, - 0xc1, 0x85, 0xe2, 0x42, 0xbd, 0x13, 0x55, 0x9c, 0xa8, 0x82, 0x0b, 0x9c, 0x38, 0x40, 0x85, 0x2a, - 0x8a, 0x0b, 0x27, 0x38, 0x73, 0x00, 0x2a, 0x55, 0x1c, 0xa0, 0xa8, 0xee, 0x99, 0xd9, 0x9d, 0x99, - 0xdd, 0xb5, 0xbc, 0x36, 0x95, 0x97, 0x43, 0x3c, 0xdd, 0xfd, 0x7d, 0xdf, 0xef, 0xfb, 0xba, 0xbf, - 0xfe, 0xfe, 0xf4, 0x0a, 0xe8, 0xe4, 0x18, 0x5b, 0x4e, 0x83, 0x78, 0x9a, 0xe3, 0x52, 0x46, 0xb5, - 0x70, 0xe8, 0x54, 0x34, 0xbc, 0x57, 0x31, 0xd9, 0x1e, 0xdd, 0xdf, 0x23, 0x47, 0xc4, 0x6d, 0xb2, - 0xba, 0x69, 0x1f, 0x14, 0x04, 0x0d, 0x5c, 0x3e, 0x70, 0x9d, 0x6a, 0xe1, 0x00, 0x33, 0xf2, 0x0c, - 0x37, 0x0b, 0x91, 0x80, 0x42, 0x87, 0x35, 0xbb, 0x74, 0x40, 0xe9, 0x41, 0x83, 0x68, 0xd8, 0x31, - 0x35, 0x6c, 0xdb, 0x94, 0x61, 0x66, 0x52, 0xdb, 0x0b, 0xd8, 0xb3, 0x28, 0x5c, 0x15, 0xa3, 0x8a, - 0xbf, 0xaf, 0xed, 0x9b, 0xa4, 0x51, 0xdb, 0xb3, 0xb0, 0x77, 0x18, 0x52, 0x5c, 0x4e, 0x53, 0x10, - 0xcb, 0x61, 0xcd, 0x70, 0xf1, 0xcd, 0xf4, 0x62, 0xcd, 0x77, 0x85, 0xfc, 0x41, 0xeb, 0xcf, 0x5c, - 0xec, 0x38, 0xc4, 0x8d, 0xe0, 0xdf, 0x4e, 0x59, 0xec, 0x60, 0x56, 0x27, 0xb6, 0x6f, 0x89, 0x8f, - 0x3d, 0xfe, 0x15, 0xe9, 0x99, 0x22, 0xf4, 0xfc, 0x8a, 0x66, 0x11, 0xcf, 0xc3, 0x07, 0x24, 0xa4, - 0xb8, 0xd2, 0x4b, 0xa1, 0xa7, 0x48, 0x96, 0xd3, 0xda, 0x30, 0xd3, 0x22, 0x1e, 0xc3, 0x96, 0x13, - 0x12, 0xdc, 0x10, 0xff, 0x54, 0xf3, 0x07, 0xc4, 0xce, 0x7b, 0xcf, 0xf0, 0xc1, 0x01, 0x71, 0x35, - 0xea, 0x88, 0xfd, 0xea, 0xdd, 0x3b, 0xe5, 0x1f, 0x2e, 0x83, 0xd9, 0x52, 0xd9, 0x64, 0xf7, 0xf7, - 0xb7, 0x3a, 0xa7, 0x02, 0x9f, 0x80, 0x69, 0xcf, 0xb4, 0x0f, 0x1a, 0x64, 0xcf, 0x26, 0x1e, 0x23, - 0xb5, 0xc5, 0x4b, 0x48, 0x52, 0xa7, 0xf4, 0x9b, 0x85, 0x53, 0xce, 0xa9, 0x90, 0x96, 0x54, 0xd8, - 0x11, 0xfc, 0xc6, 0xd9, 0x40, 0x5c, 0x30, 0x82, 0x75, 0x30, 0xea, 0xfb, 0x66, 0x6d, 0x51, 0x42, - 0x92, 0x3a, 0x59, 0x7e, 0xd8, 0x2e, 0x7d, 0xf6, 0x23, 0x49, 0xfa, 0x6d, 0xe9, 0xde, 0xf7, 0x71, - 0x7e, 0xbf, 0x94, 0xbf, 0xbd, 0x92, 0xbf, 0xf5, 0xe4, 0xe4, 0x66, 0x2b, 0x1f, 0x1f, 0xae, 0x0f, - 0x33, 0x5c, 0xd5, 0x5b, 0x86, 0x40, 0x80, 0xbb, 0x60, 0x3c, 0xb4, 0x20, 0x83, 0xe4, 0xd7, 0xb2, - 0x20, 0x94, 0x03, 0xef, 0x82, 0xa9, 0xfd, 0x06, 0xc5, 0x6c, 0xef, 0x08, 0x37, 0x7c, 0xb2, 0x28, - 0x23, 0x49, 0xcd, 0x94, 0xaf, 0xb7, 0x4b, 0xdf, 0xd1, 0xe7, 0x6e, 0xf3, 0x79, 0x24, 0xe6, 0x91, - 0xf0, 0xc0, 0xa2, 0xbc, 0x52, 0xd0, 0xbf, 0x96, 0xe2, 0x0c, 0x06, 0x10, 0x83, 0x47, 0xfc, 0x1b, - 0x5e, 0x01, 0x67, 0x6b, 0xd4, 0xaf, 0x34, 0x48, 0x28, 0x6c, 0x14, 0x49, 0xaa, 0x64, 0x4c, 0x05, - 0x73, 0x01, 0xc9, 0x32, 0x98, 0x32, 0x6d, 0xf6, 0xee, 0x7a, 0x48, 0x31, 0x86, 0x24, 0x55, 0x36, - 0x80, 0x98, 0xea, 0xc8, 0xf0, 0xe3, 0x14, 0xe3, 0x48, 0x52, 0x47, 0x8d, 0x29, 0x3f, 0x46, 0x12, - 0xc8, 0x58, 0xd3, 0x43, 0x8a, 0x33, 0x48, 0x52, 0xc7, 0x84, 0x8c, 0x35, 0x3d, 0x20, 0xb8, 0x0a, - 0xa6, 0xf7, 0xcd, 0x63, 0x52, 0xeb, 0x08, 0x99, 0x40, 0x92, 0x3a, 0x6e, 0x9c, 0x0d, 0x27, 0x93, - 0x44, 0x1d, 0x39, 0x93, 0x48, 0x52, 0xcf, 0x84, 0x44, 0x91, 0xa4, 0x37, 0x00, 0xa8, 0x50, 0xda, - 0x08, 0x29, 0x00, 0x92, 0xd4, 0x09, 0x63, 0x92, 0xcf, 0x74, 0x94, 0xf5, 0x98, 0x6b, 0xda, 0x07, - 0x21, 0xc1, 0x14, 0x77, 0x00, 0x63, 0x2a, 0x98, 0xeb, 0x28, 0x5b, 0x69, 0x32, 0xe2, 0x85, 0x14, - 0x6f, 0x20, 0x49, 0x3d, 0x6b, 0x00, 0x31, 0x95, 0x30, 0xb8, 0xa3, 0xc6, 0x34, 0x92, 0xd4, 0xe9, - 0xc0, 0xe0, 0x48, 0x8b, 0x7b, 0x00, 0xf0, 0x5b, 0x17, 0x12, 0x9c, 0x43, 0x92, 0x7a, 0x4e, 0xbf, - 0x71, 0xea, 0xc9, 0xef, 0xf8, 0x16, 0x71, 0xcd, 0xea, 0x96, 0xed, 0x5b, 0xc6, 0x24, 0xe7, 0x0f, - 0x84, 0xed, 0x82, 0x99, 0xce, 0x3d, 0x0e, 0x25, 0xbe, 0x29, 0x24, 0xaa, 0x03, 0x24, 0x46, 0xd7, - 0xbf, 0xb0, 0x8b, 0x59, 0x5d, 0x48, 0x9b, 0x76, 0xc2, 0xaf, 0x40, 0xa2, 0x07, 0x2e, 0x04, 0xce, - 0xb4, 0x97, 0x16, 0xbc, 0x2c, 0x04, 0x7f, 0x70, 0x9a, 0xe0, 0x4f, 0x83, 0x80, 0x10, 0xc9, 0x0f, - 0x5d, 0xb4, 0x03, 0x37, 0x6f, 0x27, 0xc6, 0x01, 0xe8, 0x5b, 0xe0, 0x9c, 0x97, 0x3c, 0xbf, 0x19, - 0x24, 0xa9, 0x33, 0xc6, 0xb4, 0x97, 0x38, 0xc0, 0x0e, 0x59, 0xc7, 0x17, 0x66, 0x91, 0xa4, 0xce, - 0x46, 0x64, 0x31, 0xaf, 0xf3, 0xe2, 0x87, 0x30, 0x87, 0x24, 0x75, 0xce, 0x98, 0xf2, 0x62, 0x87, - 0x10, 0x92, 0x74, 0xe4, 0x40, 0x24, 0xa9, 0x30, 0x20, 0x89, 0xa4, 0xe8, 0x60, 0xc1, 0x25, 0x0e, - 0xc1, 0x7c, 0x2b, 0x12, 0x7e, 0x31, 0x8f, 0x64, 0x75, 0xd2, 0x98, 0x8f, 0x16, 0x1f, 0xc4, 0xfc, - 0xe3, 0x16, 0x98, 0xa2, 0x36, 0xe1, 0x49, 0x84, 0x47, 0xf0, 0xc5, 0xf3, 0x22, 0x30, 0x5d, 0x28, - 0x04, 0x41, 0xb1, 0x10, 0x05, 0xc5, 0xc2, 0x16, 0x5f, 0xfd, 0x78, 0xc4, 0x00, 0x82, 0x58, 0x8c, - 0xe0, 0x55, 0x70, 0x36, 0x60, 0x0d, 0xb0, 0x16, 0x17, 0xb8, 0xf7, 0x7d, 0x3c, 0x62, 0x04, 0x02, - 0x03, 0x10, 0xf8, 0x25, 0x98, 0xb4, 0xb0, 0x13, 0xea, 0x71, 0x41, 0x04, 0x8d, 0x0f, 0x87, 0x0f, - 0x1a, 0x9f, 0x62, 0x47, 0xa8, 0xbb, 0x65, 0x33, 0xb7, 0x69, 0x4c, 0x58, 0xe1, 0x10, 0x1e, 0x83, - 0x79, 0x8b, 0xe7, 0x8e, 0x94, 0xbd, 0x17, 0x05, 0xce, 0xc7, 0xaf, 0x84, 0xe3, 0x24, 0xf6, 0x27, - 0x00, 0x9c, 0xb3, 0xd2, 0xf3, 0x31, 0xe4, 0xd0, 0xf7, 0x02, 0xe4, 0xc5, 0xd7, 0x43, 0x0e, 0x3c, - 0xaf, 0x17, 0x39, 0x36, 0x0f, 0x8b, 0x60, 0xd1, 0xa6, 0xf6, 0x06, 0xb5, 0x8f, 0x88, 0xcd, 0x33, - 0x0f, 0x6e, 0xec, 0x60, 0x2b, 0x08, 0x6f, 0x8b, 0x59, 0x11, 0x00, 0x06, 0xae, 0xc3, 0x0d, 0x30, - 0xd3, 0x49, 0x6f, 0xa1, 0xc6, 0x97, 0xc5, 0x89, 0x67, 0x7b, 0x4e, 0xfc, 0x61, 0x44, 0x67, 0x9c, - 0xeb, 0xb0, 0x04, 0x42, 0xbe, 0x04, 0x1d, 0x4f, 0x8a, 0x5f, 0xb6, 0x25, 0x24, 0x0f, 0x1d, 0x17, - 0xe6, 0x22, 0x41, 0xdd, 0x8b, 0xf5, 0x53, 0x09, 0x2c, 0x26, 0xc5, 0x77, 0x93, 0xec, 0x22, 0x1a, - 0x1e, 0xa3, 0xbc, 0xd9, 0x2e, 0x95, 0x72, 0x97, 0x8d, 0x50, 0x24, 0xb2, 0x83, 0x25, 0xc4, 0x45, - 0x23, 0x66, 0xb2, 0x06, 0xd1, 0x95, 0xfe, 0x8b, 0x35, 0xe2, 0x55, 0x5d, 0x53, 0x64, 0xfa, 0x82, - 0x71, 0x21, 0xae, 0x69, 0xa9, 0xa3, 0x11, 0xfc, 0x1d, 0x09, 0x2c, 0x74, 0x37, 0x21, 0xae, 0xeb, - 0x95, 0xe1, 0xe3, 0x64, 0x59, 0x6f, 0x97, 0xb4, 0x1c, 0xdc, 0xe9, 0x55, 0xf1, 0xd2, 0xce, 0x40, - 0xcd, 0xe6, 0x3b, 0xb1, 0x35, 0xa6, 0xd6, 0x11, 0xc8, 0xa6, 0x43, 0x41, 0x4c, 0x35, 0x85, 0xc7, - 0x83, 0xf2, 0xcd, 0x76, 0xe9, 0x9d, 0xdc, 0x42, 0xc7, 0xf6, 0x80, 0x2c, 0xc4, 0x5b, 0x4a, 0x4f, - 0x27, 0x20, 0x17, 0x93, 0x91, 0x24, 0x86, 0xfb, 0x57, 0x52, 0x0c, 0x38, 0xbc, 0x19, 0x31, 0xe0, - 0xab, 0xaf, 0x57, 0x35, 0x94, 0x6f, 0xb7, 0x4b, 0x1b, 0xb9, 0xae, 0x6e, 0x01, 0x00, 0xa2, 0x95, - 0xa7, 0xa4, 0xca, 0x42, 0xcd, 0xaf, 0x0e, 0x58, 0xed, 0x6f, 0x40, 0x20, 0x37, 0x66, 0xc0, 0x57, - 0x12, 0x98, 0xeb, 0xd5, 0xfb, 0xda, 0xeb, 0xd5, 0x6b, 0xe5, 0xf5, 0x76, 0x69, 0x35, 0x37, 0xbf, - 0xd3, 0x47, 0xdd, 0xec, 0xce, 0x60, 0x2d, 0x67, 0xed, 0xb4, 0x76, 0xef, 0x81, 0xf9, 0x20, 0x07, - 0xd0, 0x23, 0xe2, 0xba, 0x66, 0x8d, 0xec, 0xb1, 0xa6, 0x43, 0x16, 0xdf, 0xe2, 0x65, 0x4c, 0xf9, - 0x4c, 0xbb, 0x34, 0xfa, 0x87, 0x19, 0x49, 0x36, 0xe6, 0x04, 0xcd, 0xfd, 0x90, 0xe4, 0x61, 0xd3, - 0x21, 0xd9, 0x7f, 0x91, 0xc0, 0x78, 0x58, 0x2d, 0x42, 0x30, 0x6a, 0x63, 0x8b, 0x04, 0xd5, 0xa2, - 0x21, 0xbe, 0xe1, 0x05, 0x30, 0x8e, 0x2d, 0xea, 0xdb, 0x6c, 0x31, 0x23, 0xd2, 0x7f, 0x38, 0x82, - 0x16, 0xc8, 0xd0, 0x43, 0x51, 0x94, 0x9d, 0xd3, 0x4b, 0xaf, 0x6a, 0x7d, 0x61, 0x93, 0x10, 0x47, - 0xb8, 0x77, 0xb6, 0x5d, 0xba, 0xa8, 0x2f, 0x44, 0xc3, 0xa4, 0xb1, 0x19, 0x7a, 0xa8, 0x2c, 0x83, - 0x89, 0x68, 0x11, 0x4e, 0x82, 0xb1, 0xdb, 0xa5, 0x4f, 0x1e, 0x6c, 0xcd, 0x8e, 0xc0, 0x09, 0x30, - 0xfa, 0xd0, 0xf8, 0x7c, 0x6b, 0x56, 0x2a, 0x5e, 0x6c, 0x97, 0xce, 0xeb, 0x10, 0xce, 0x9e, 0x20, - 0x85, 0x1e, 0x2a, 0x45, 0xa4, 0xf0, 0x79, 0x05, 0xb5, 0xb2, 0x26, 0x98, 0x4e, 0xe4, 0x08, 0x38, - 0x0b, 0xe4, 0x43, 0xd2, 0x0c, 0x8d, 0xe4, 0x9f, 0xb0, 0x0c, 0xc6, 0x82, 0x40, 0x95, 0x79, 0x85, - 0x02, 0x26, 0x60, 0x2d, 0x66, 0x6e, 0x4a, 0xd9, 0x4d, 0x70, 0xa1, 0x7f, 0x9a, 0xe8, 0x83, 0x79, - 0x3e, 0x8e, 0x39, 0x19, 0x97, 0xf2, 0xcb, 0x91, 0x94, 0x74, 0xc8, 0xef, 0x23, 0x65, 0x27, 0x2e, - 0xe5, 0x75, 0x8a, 0xee, 0x2e, 0x7e, 0xf1, 0x0f, 0x32, 0xed, 0xd2, 0xef, 0x66, 0xc0, 0xaf, 0x4b, - 0xb9, 0xf9, 0x12, 0xaa, 0x98, 0x0c, 0xd1, 0x7d, 0xd4, 0xed, 0x23, 0xf5, 0xed, 0x6d, 0x9b, 0x45, - 0xe9, 0xa3, 0x89, 0xaa, 0xd4, 0x72, 0x1a, 0x66, 0x55, 0xdc, 0xaa, 0xb0, 0x7b, 0x42, 0xdc, 0xf1, - 0x10, 0xa3, 0xa8, 0xca, 0x5d, 0x11, 0x59, 0xd8, 0x6e, 0xa2, 0x7d, 0x82, 0x99, 0xef, 0x12, 0x8f, - 0xcb, 0xda, 0x8d, 0xf2, 0xc8, 0xd7, 0x92, 0x68, 0x1d, 0xbe, 0x96, 0xe2, 0x85, 0xf7, 0xd7, 0x52, - 0xa2, 0x52, 0xcf, 0x3d, 0x02, 0xd7, 0x6e, 0x9b, 0x76, 0x0d, 0x51, 0x9f, 0x21, 0x8b, 0xba, 0x04, - 0xe1, 0x0a, 0xff, 0xec, 0x69, 0xa4, 0x0a, 0x75, 0xc6, 0x1c, 0xaf, 0xa8, 0x69, 0x07, 0x26, 0xab, - 0xfb, 0x95, 0x42, 0x95, 0x5a, 0x1a, 0xdf, 0x8c, 0x3c, 0xa9, 0x52, 0xaf, 0xe9, 0x31, 0x12, 0x0e, - 0xc3, 0xbd, 0xd1, 0xd7, 0xa1, 0x7e, 0x82, 0x14, 0x8e, 0xcf, 0x9d, 0x65, 0xa5, 0xba, 0xbf, 0xf6, - 0xee, 0x2a, 0x59, 0xcd, 0xaf, 0x57, 0xd6, 0xd7, 0xf3, 0xeb, 0x37, 0xd7, 0x6a, 0x79, 0xbc, 0xfa, - 0xce, 0xad, 0xfc, 0x3b, 0xeb, 0x35, 0x5c, 0xa9, 0xed, 0xbf, 0x47, 0x6e, 0xae, 0xae, 0x2b, 0xa8, - 0x55, 0x9e, 0x8e, 0x6a, 0x22, 0xa1, 0x9c, 0xf2, 0xbf, 0x13, 0x60, 0x31, 0xad, 0x49, 0x14, 0x64, - 0xe0, 0x2d, 0x70, 0x49, 0x54, 0x9d, 0x9d, 0xa0, 0x17, 0xef, 0x66, 0x24, 0x24, 0xab, 0x19, 0xe3, - 0x02, 0x27, 0x88, 0x18, 0x6e, 0x77, 0xdb, 0x95, 0xf7, 0x41, 0x36, 0xc9, 0x9a, 0x68, 0x5e, 0x78, - 0x83, 0x25, 0x19, 0x17, 0xe3, 0xbc, 0x9b, 0xb1, 0x46, 0xa6, 0x07, 0x37, 0x5e, 0x1b, 0xca, 0x48, - 0x56, 0xe5, 0x24, 0xee, 0x76, 0xb7, 0x4c, 0xec, 0xc1, 0x4d, 0x34, 0x3c, 0xa3, 0x48, 0x56, 0x47, - 0x93, 0xb8, 0x9f, 0xc7, 0x6a, 0xcc, 0x7e, 0xb8, 0x9d, 0xb2, 0x75, 0x0c, 0xc9, 0xea, 0x58, 0x0f, - 0x6e, 0x54, 0xc1, 0x7e, 0x0f, 0x5c, 0x4e, 0x6d, 0x55, 0xa2, 0x30, 0x1e, 0x47, 0xb2, 0x3a, 0x6e, - 0x2c, 0x26, 0x36, 0x2b, 0x5e, 0x23, 0xf7, 0x67, 0x8f, 0xb5, 0x61, 0xb2, 0x7a, 0xa6, 0x0f, 0x7b, - 0x84, 0xfe, 0x1e, 0x58, 0x4c, 0xb2, 0xc7, 0x1a, 0xab, 0x09, 0x24, 0xab, 0x13, 0xc6, 0x42, 0x9c, - 0xb7, 0xdc, 0x69, 0xb2, 0x7a, 0xb6, 0x2b, 0x51, 0x6a, 0x4e, 0x8a, 0xd2, 0x3a, 0xb1, 0x5d, 0xc9, - 0xf2, 0x3a, 0xb5, 0x5d, 0xf1, 0x66, 0x0c, 0x20, 0x59, 0x3d, 0x9b, 0xdc, 0xae, 0x72, 0xb7, 0x31, - 0xeb, 0x7b, 0x4c, 0x1d, 0x73, 0xa7, 0x90, 0xac, 0x4e, 0xf7, 0x1e, 0x53, 0x64, 0x2d, 0x49, 0x5b, - 0x1b, 0x2b, 0xd4, 0xce, 0xbe, 0x42, 0xa1, 0x96, 0xd8, 0x9b, 0x6e, 0xb1, 0xf6, 0x21, 0x58, 0x4a, - 0xed, 0x4d, 0xf2, 0x50, 0xa6, 0x91, 0xac, 0xce, 0x18, 0x97, 0x12, 0xbb, 0x93, 0xe8, 0x8f, 0x06, - 0x08, 0xe8, 0x38, 0xc5, 0x39, 0x24, 0xab, 0xb3, 0xfd, 0x04, 0x0c, 0x74, 0xe6, 0x44, 0x1f, 0x35, - 0x83, 0x64, 0x75, 0x2e, 0x75, 0x3a, 0xb1, 0x5d, 0xea, 0xcb, 0x1c, 0xeb, 0xd4, 0x64, 0x15, 0xf6, - 0x32, 0x87, 0xc8, 0xc5, 0x7a, 0xbb, 0x44, 0xf4, 0x2a, 0xc4, 0x27, 0x48, 0x19, 0xe4, 0x58, 0x4a, - 0x11, 0x7d, 0x9f, 0xb9, 0x3e, 0xb9, 0x81, 0x82, 0xff, 0xef, 0xe3, 0x86, 0x17, 0x0e, 0x9e, 0xdc, - 0x48, 0xb3, 0xc5, 0xf4, 0xe6, 0x7c, 0xab, 0x37, 0x90, 0x7e, 0x03, 0xad, 0x3d, 0x41, 0x2d, 0x25, - 0x0b, 0x46, 0xcb, 0xb4, 0xd6, 0xec, 0x97, 0xb9, 0x95, 0x2f, 0xc1, 0x4c, 0xd8, 0xbe, 0xfe, 0xbc, - 0xc9, 0xea, 0x82, 0xec, 0x1c, 0xc8, 0x44, 0x8f, 0x41, 0x46, 0xc6, 0xe4, 0x21, 0x6a, 0xb4, 0x86, - 0x19, 0x0e, 0xb3, 0xc7, 0x5b, 0xa7, 0x9e, 0x3b, 0x17, 0x62, 0x08, 0x16, 0xe5, 0x27, 0x12, 0x98, - 0xf9, 0xdc, 0xa9, 0x61, 0x46, 0x1e, 0xe9, 0x06, 0xf9, 0xa1, 0x4f, 0x3c, 0x06, 0x37, 0x80, 0x8c, - 0x2b, 0x81, 0x12, 0x53, 0xfa, 0xea, 0xd0, 0xb9, 0xc8, 0xe0, 0xdc, 0xf0, 0x7d, 0x30, 0xe5, 0x0b, - 0xb9, 0xe2, 0x55, 0x31, 0x54, 0xad, 0xb7, 0x09, 0xb9, 0x6d, 0x92, 0x46, 0xed, 0x53, 0xec, 0x1d, - 0x1a, 0x20, 0x20, 0xe7, 0xdf, 0x39, 0x04, 0xa6, 0x62, 0xbe, 0xc9, 0xcb, 0x83, 0xc7, 0x5b, 0xc6, - 0xfd, 0xd9, 0x11, 0x78, 0x06, 0xc8, 0xf7, 0x77, 0xb6, 0x66, 0x25, 0xfd, 0x3f, 0x14, 0x70, 0x31, - 0x0d, 0xfc, 0x80, 0xb8, 0x47, 0x66, 0x95, 0xc0, 0x7f, 0x97, 0xc1, 0xf8, 0x86, 0xcb, 0xf7, 0x1c, - 0x0e, 0xaf, 0x7d, 0x76, 0x78, 0x16, 0xe5, 0x7f, 0x32, 0xbf, 0xfa, 0x8f, 0xff, 0xf6, 0x93, 0xcc, - 0x37, 0x19, 0xe5, 0x3f, 0x33, 0xda, 0xd1, 0x6a, 0xf4, 0x82, 0xdb, 0xef, 0xfd, 0x56, 0x3b, 0x89, - 0xa5, 0x8f, 0x96, 0x76, 0x12, 0xcf, 0x08, 0x2d, 0xed, 0x24, 0xe6, 0x9d, 0x2d, 0xcd, 0x23, 0x0e, - 0x76, 0x31, 0xa3, 0xae, 0x76, 0xe2, 0x27, 0x16, 0x4e, 0x62, 0x9e, 0xd4, 0xd2, 0x4e, 0x12, 0x17, - 0x2a, 0x1a, 0xc7, 0xd6, 0xbb, 0xee, 0xda, 0xd2, 0x4e, 0xe2, 0xb1, 0xed, 0x7b, 0x1e, 0x73, 0x1d, - 0x97, 0xec, 0x9b, 0xc7, 0x5a, 0xae, 0x15, 0x80, 0xc4, 0xd8, 0xbc, 0xb4, 0x1c, 0x2f, 0x0d, 0xe4, - 0xa5, 0x18, 0x92, 0x4a, 0x0e, 0xea, 0x51, 0x5b, 0xda, 0x49, 0x37, 0x56, 0xb5, 0xb4, 0x93, 0xd4, - 0x9b, 0x0e, 0xe7, 0xec, 0xfb, 0xd8, 0x93, 0xe0, 0x8b, 0xd5, 0xee, 0x2d, 0xf8, 0xc7, 0x12, 0x00, - 0xc1, 0x81, 0x8b, 0xeb, 0xf1, 0xed, 0x1c, 0x7a, 0x4e, 0x9c, 0xf9, 0x35, 0x65, 0xf9, 0x94, 0x13, - 0x2f, 0x4a, 0x39, 0xf8, 0x4b, 0x60, 0xfc, 0x13, 0x4a, 0x0f, 0x7d, 0x07, 0xce, 0x14, 0x3c, 0xbf, - 0xa2, 0x17, 0xb6, 0x6b, 0xe1, 0x9d, 0x7e, 0x15, 0xe4, 0x82, 0x40, 0x56, 0xe1, 0x77, 0x4e, 0xf5, - 0x35, 0x5e, 0x17, 0xb5, 0xe0, 0x6f, 0x48, 0x60, 0x3c, 0xb8, 0xe3, 0xaf, 0xb2, 0x35, 0x03, 0x9e, - 0x8a, 0x94, 0x55, 0xa1, 0xc5, 0x77, 0xb3, 0x2f, 0xa9, 0x05, 0xdf, 0x86, 0xff, 0x92, 0xc0, 0x44, - 0x14, 0x6c, 0xe0, 0xca, 0xa9, 0xaa, 0xa4, 0xe2, 0xd2, 0x40, 0x4d, 0xfe, 0x48, 0x12, 0xaa, 0xfc, - 0x9e, 0x94, 0xcd, 0x69, 0x47, 0xfa, 0x8b, 0x75, 0xc1, 0x15, 0x52, 0x08, 0xf4, 0xe1, 0x51, 0xea, - 0xf1, 0xaa, 0x3e, 0x34, 0xcb, 0x8a, 0xfe, 0x5d, 0xed, 0x48, 0xc7, 0x2f, 0xcb, 0x23, 0xe5, 0xe0, - 0x9f, 0x4a, 0x60, 0x7c, 0x93, 0x34, 0x08, 0x23, 0xbd, 0xc7, 0x3f, 0xc8, 0x26, 0xb7, 0x5d, 0x2a, - 0x55, 0xae, 0x83, 0x73, 0x00, 0x94, 0x1c, 0xf3, 0x1e, 0x69, 0x96, 0x7c, 0x56, 0x87, 0x23, 0xe0, - 0x22, 0x18, 0xbf, 0xcf, 0x3f, 0x75, 0x38, 0x0d, 0x46, 0x5d, 0x82, 0x6b, 0x60, 0xec, 0x99, 0x6b, - 0x32, 0xf2, 0xf4, 0x3c, 0x38, 0x77, 0x9c, 0x37, 0x5d, 0x97, 0x2b, 0xe1, 0x99, 0x95, 0x06, 0x81, - 0x19, 0x14, 0x6c, 0x8b, 0x9a, 0x7b, 0x59, 0x3f, 0xf9, 0x57, 0x09, 0x4c, 0xdc, 0x21, 0xec, 0x33, - 0x9f, 0xb8, 0xcd, 0xff, 0x4f, 0x4f, 0xf9, 0xb1, 0xd4, 0x2e, 0x3d, 0x54, 0x76, 0xc0, 0x52, 0xbf, - 0x0e, 0xa0, 0x03, 0x38, 0x64, 0xe5, 0xff, 0x85, 0x54, 0x19, 0x11, 0xf6, 0x15, 0xe0, 0x8d, 0xd3, - 0xec, 0xfb, 0x21, 0x07, 0x88, 0xac, 0xfc, 0xf1, 0x18, 0x98, 0xbd, 0x43, 0x58, 0x94, 0xf0, 0x03, - 0xf0, 0x5b, 0xc3, 0x67, 0xb9, 0x90, 0x3f, 0xfb, 0xea, 0xac, 0xca, 0x8f, 0x46, 0x85, 0x05, 0xff, - 0x2d, 0xc3, 0x6f, 0xe4, 0x53, 0x6c, 0xe8, 0x54, 0x11, 0x61, 0xbc, 0xec, 0xd7, 0x8d, 0xb4, 0xd2, - 0x6b, 0xa9, 0xe4, 0x32, 0xb0, 0x9d, 0xe8, 0x59, 0xf3, 0x5f, 0xb4, 0x98, 0x0c, 0xfa, 0x2f, 0x28, - 0xf8, 0xfb, 0xaf, 0x0e, 0xe4, 0x4d, 0xa4, 0xa9, 0xc1, 0x05, 0x79, 0x2f, 0x5f, 0xb7, 0xe0, 0xee, - 0x6b, 0xc8, 0x40, 0xc0, 0xde, 0x2c, 0x34, 0xa0, 0xca, 0x1d, 0xb0, 0x3c, 0xd0, 0x4e, 0xef, 0x45, - 0xa8, 0x89, 0x2c, 0x09, 0x7f, 0x6b, 0x14, 0x8c, 0x6e, 0x55, 0xeb, 0x14, 0x0e, 0xfa, 0x71, 0xc4, - 0xf3, 0x2b, 0x85, 0xa0, 0xdf, 0x88, 0x42, 0xc6, 0x4b, 0x53, 0x2a, 0x3f, 0x95, 0xdb, 0xa5, 0xbf, - 0xcd, 0x80, 0x09, 0x52, 0xad, 0x53, 0xe4, 0x3a, 0x55, 0x38, 0xf7, 0xc0, 0xb7, 0x2c, 0xec, 0x36, - 0x8b, 0x68, 0x2b, 0x9c, 0xca, 0xce, 0x6e, 0x76, 0xdf, 0x68, 0xc4, 0xac, 0xb2, 0x09, 0x60, 0xf2, - 0xa2, 0x0a, 0xfd, 0x86, 0xbc, 0x9e, 0x77, 0x6f, 0x01, 0x59, 0x5f, 0x59, 0x81, 0xba, 0xb2, 0x02, - 0x66, 0xb1, 0x13, 0x3c, 0x2e, 0x98, 0xd4, 0xd6, 0x9e, 0x7a, 0xd4, 0x86, 0x4b, 0x27, 0x4a, 0x54, - 0x06, 0x2b, 0xac, 0x4e, 0x90, 0x69, 0x3b, 0x7e, 0xf8, 0x43, 0xa0, 0xd2, 0xba, 0xfb, 0x08, 0xc8, - 0xef, 0xac, 0xac, 0xc1, 0xfb, 0xe0, 0x5d, 0x83, 0x30, 0xdf, 0xb5, 0x49, 0x0d, 0x3d, 0xab, 0x13, - 0x1b, 0x71, 0x4a, 0x97, 0x78, 0xd4, 0x77, 0xab, 0x04, 0x99, 0x1e, 0x62, 0xc4, 0x72, 0xa8, 0x8b, - 0x5d, 0xb3, 0xd1, 0x44, 0xbe, 0x8d, 0x8f, 0xb0, 0xd9, 0xc0, 0x95, 0x06, 0x29, 0xe4, 0x16, 0xc0, - 0xc4, 0x71, 0xde, 0xf6, 0xad, 0x0a, 0x71, 0xe1, 0xe4, 0xdc, 0x88, 0xf8, 0xef, 0x17, 0x3e, 0xba, - 0xfb, 0x3e, 0x90, 0xd7, 0x57, 0xd6, 0xe1, 0x3a, 0xc8, 0xbd, 0x40, 0x6e, 0x8d, 0x12, 0x0f, 0xd9, - 0x94, 0x21, 0x72, 0x6c, 0x7a, 0xac, 0x00, 0xc7, 0x81, 0x78, 0x72, 0x13, 0x17, 0xf5, 0xc9, 0xe9, - 0xa1, 0x86, 0x6f, 0xb5, 0x76, 0x12, 0x1c, 0xee, 0xe3, 0x4b, 0xca, 0x6c, 0x3c, 0xbb, 0xf0, 0xb5, - 0x62, 0xf0, 0x42, 0xf3, 0x18, 0xc2, 0x9e, 0x25, 0xf8, 0x17, 0x12, 0x38, 0xbb, 0x49, 0x88, 0x23, - 0x7e, 0x87, 0xe2, 0x13, 0xdf, 0x4e, 0x21, 0xf3, 0xa1, 0xb0, 0xed, 0x96, 0xb2, 0x7e, 0x6a, 0x9a, - 0x48, 0xfc, 0xc4, 0x5d, 0xe0, 0xdd, 0x89, 0xc8, 0x6f, 0x25, 0x00, 0x76, 0x68, 0xd9, 0xb4, 0x6b, - 0xa6, 0x7d, 0xe0, 0xc1, 0x4b, 0x3d, 0x59, 0x60, 0x33, 0xfc, 0xeb, 0x80, 0x81, 0x09, 0x62, 0x04, - 0x3e, 0x02, 0x67, 0x1e, 0x9a, 0x16, 0xa1, 0x3e, 0x83, 0x03, 0x88, 0x06, 0x32, 0x5f, 0x16, 0xea, - 0x2f, 0xc0, 0xf9, 0xf8, 0x7e, 0xb2, 0x50, 0x58, 0x1d, 0xcc, 0x6e, 0xb9, 0x2e, 0x75, 0x79, 0xeb, - 0xb4, 0x49, 0x18, 0x36, 0x1b, 0xde, 0xd0, 0x00, 0xd7, 0x04, 0xc0, 0x9b, 0x70, 0x29, 0x71, 0x60, - 0x5c, 0xea, 0x33, 0x93, 0xd5, 0x6b, 0xa1, 0xd4, 0xdf, 0x94, 0x00, 0xbc, 0x43, 0x58, 0xba, 0x55, - 0x3b, 0xbd, 0xca, 0x49, 0x71, 0x0c, 0x54, 0xe3, 0x6d, 0xa1, 0xc6, 0x15, 0xe5, 0x52, 0x5c, 0x0d, - 0xae, 0x41, 0x85, 0xd6, 0x9a, 0xda, 0x09, 0xaf, 0x35, 0x44, 0x4b, 0x07, 0x7f, 0x4d, 0x02, 0x73, - 0xbb, 0xd4, 0x63, 0x5c, 0xa2, 0x60, 0x15, 0x8a, 0xbc, 0x5c, 0x57, 0x38, 0x10, 0x5d, 0x13, 0xe8, - 0xd7, 0x95, 0x6b, 0x71, 0x74, 0x87, 0x7a, 0x8c, 0x6b, 0x20, 0x7e, 0x59, 0x0c, 0xd4, 0xe8, 0x38, - 0xc5, 0xdf, 0x48, 0x60, 0x7e, 0xa3, 0x4e, 0xaa, 0x87, 0x51, 0x82, 0xdf, 0xc5, 0x2e, 0xb6, 0xbc, - 0x6f, 0xc9, 0xa7, 0xef, 0x08, 0x75, 0x4b, 0xf0, 0xc3, 0xd3, 0x7c, 0xda, 0x11, 0x5a, 0x69, 0x07, - 0x84, 0xf5, 0x75, 0x6f, 0xf8, 0xcf, 0x12, 0x78, 0x43, 0x98, 0x11, 0x3c, 0xb0, 0xf2, 0x76, 0xf4, - 0x67, 0x62, 0xd0, 0x67, 0xc2, 0xa0, 0x7b, 0x70, 0x7b, 0x08, 0x83, 0xc2, 0x36, 0x4a, 0xfc, 0x65, - 0x4d, 0xca, 0x38, 0x7a, 0xd8, 0x82, 0x7f, 0x2f, 0x81, 0xf3, 0xc2, 0x34, 0xee, 0x2c, 0x3f, 0x33, - 0x8b, 0x94, 0xe2, 0x4b, 0x5a, 0xc4, 0x9d, 0x2d, 0xd9, 0xbe, 0xb6, 0x8a, 0xc9, 0x3f, 0xba, 0x81, - 0x5f, 0x49, 0x60, 0xe9, 0xfe, 0x11, 0x71, 0x45, 0x49, 0x6c, 0x10, 0xcf, 0xa1, 0xb6, 0x47, 0x36, - 0xa8, 0x78, 0xe8, 0x7e, 0xd8, 0x74, 0xc8, 0xc0, 0xab, 0xbf, 0xd4, 0x33, 0x1f, 0x7b, 0xe2, 0x53, - 0xb6, 0xda, 0x25, 0x58, 0x4c, 0x24, 0x31, 0x46, 0x8e, 0x99, 0x50, 0x3f, 0x07, 0xd5, 0xf8, 0x85, - 0xa0, 0x11, 0xb8, 0x1b, 0x82, 0x57, 0x03, 0x70, 0xd6, 0x74, 0x48, 0xf6, 0xaf, 0xa5, 0x76, 0xe9, - 0x2f, 0x25, 0xb8, 0x3f, 0xe0, 0xd9, 0x22, 0xfe, 0x63, 0x09, 0xca, 0xe7, 0xd1, 0xb3, 0xba, 0x59, - 0xad, 0x23, 0xaf, 0x4e, 0xfd, 0x46, 0x4d, 0x24, 0xa4, 0x0a, 0x41, 0xbe, 0x47, 0x6a, 0xc8, 0xb4, - 0x91, 0xd3, 0xc0, 0x55, 0x82, 0xe8, 0xbe, 0x48, 0x5d, 0x35, 0x5a, 0xf5, 0x2d, 0x62, 0x07, 0xcd, - 0x30, 0xaa, 0x52, 0x8b, 0x0f, 0xae, 0x64, 0x3f, 0x03, 0xcb, 0xfd, 0xea, 0x6d, 0x9e, 0x58, 0xa2, - 0x87, 0x92, 0x61, 0x1f, 0xdb, 0x9f, 0x82, 0xf3, 0x55, 0x6c, 0x91, 0xc6, 0x06, 0xf6, 0x48, 0x28, - 0x83, 0x77, 0xf5, 0xd0, 0x00, 0x63, 0xc1, 0x1f, 0x0c, 0x0c, 0x1b, 0x5a, 0x2f, 0x89, 0x4d, 0x9c, - 0x87, 0x73, 0x89, 0xd0, 0xca, 0x97, 0xf4, 0x1f, 0x80, 0xa5, 0x92, 0x4d, 0x59, 0x9d, 0xb8, 0x21, - 0x12, 0x0f, 0x67, 0xb1, 0x34, 0xf3, 0x41, 0x22, 0xe9, 0x0c, 0x0b, 0x3c, 0x52, 0xfe, 0xf3, 0xc9, - 0x76, 0xe9, 0x4f, 0x26, 0xe1, 0x37, 0x12, 0x98, 0x2f, 0xa1, 0x72, 0xf0, 0xf3, 0x48, 0xcc, 0x3b, - 0xbf, 0x00, 0xe7, 0x0f, 0x8c, 0xdd, 0x8d, 0xfc, 0x9d, 0xc0, 0x74, 0xe4, 0xb8, 0xf4, 0x29, 0xa9, - 0xb2, 0x61, 0xb7, 0x2c, 0x3b, 0x6b, 0x53, 0x9b, 0x7c, 0x14, 0x9a, 0xc6, 0xa9, 0x73, 0x3f, 0x00, - 0xe7, 0xcb, 0x0f, 0x36, 0xd1, 0x5a, 0x7e, 0xa3, 0x81, 0x7d, 0x8f, 0xa0, 0x4f, 0xcc, 0x2a, 0xb1, - 0x3d, 0x02, 0x6f, 0x0f, 0x27, 0x59, 0xab, 0x34, 0x68, 0x45, 0xb3, 0xb0, 0xc7, 0x88, 0xab, 0x7d, - 0xb2, 0xbd, 0xb1, 0xb5, 0xf3, 0x60, 0xab, 0xc0, 0x8e, 0x99, 0x2e, 0xaf, 0x16, 0x56, 0x8a, 0x08, - 0x2c, 0x1c, 0xe7, 0x3d, 0x6a, 0x11, 0x61, 0x4d, 0xf7, 0x0b, 0x9e, 0xc9, 0x8e, 0x35, 0x71, 0xad, - 0x86, 0x73, 0xb2, 0x94, 0x19, 0xd5, 0x7b, 0x2a, 0x33, 0xfd, 0x42, 0x7c, 0xe6, 0x38, 0xbf, 0x4f, - 0x69, 0xde, 0x32, 0x2d, 0x52, 0xec, 0xa1, 0x2c, 0x0e, 0xa0, 0x34, 0x76, 0x79, 0x95, 0xb5, 0x06, - 0xb7, 0xc1, 0x9d, 0xde, 0x2a, 0xcb, 0xf7, 0x88, 0xdb, 0xad, 0xb0, 0xea, 0xf8, 0x88, 0x20, 0x87, - 0xb8, 0x96, 0xe9, 0x79, 0xdc, 0x75, 0x19, 0x45, 0xb8, 0x5a, 0x25, 0x9e, 0x97, 0xa8, 0xc8, 0x0a, - 0xc6, 0x6b, 0xd4, 0x6d, 0x67, 0x8c, 0x8f, 0x81, 0xbc, 0xbe, 0x7a, 0x13, 0x96, 0xc0, 0xf4, 0xf6, - 0xdb, 0x16, 0xc2, 0x88, 0x11, 0xec, 0x50, 0x56, 0x80, 0x2b, 0xa0, 0x90, 0x1d, 0xea, 0x85, 0xfc, - 0xf1, 0xef, 0xcb, 0x60, 0x06, 0x4c, 0x96, 0xb1, 0x67, 0x56, 0x45, 0x37, 0x9e, 0x99, 0x90, 0xc0, - 0x9f, 0x49, 0x89, 0x06, 0xfd, 0x2b, 0x69, 0x22, 0x93, 0x9d, 0xfc, 0x22, 0x5f, 0xda, 0xdd, 0xce, - 0xdf, 0x23, 0x4d, 0x94, 0xb9, 0xab, 0x82, 0xa5, 0xe3, 0x3c, 0xb6, 0xf0, 0x73, 0x6a, 0xe7, 0xb1, - 0x63, 0x86, 0x50, 0x79, 0xec, 0xb3, 0x3a, 0x0f, 0x0a, 0x70, 0x22, 0x3b, 0x4e, 0xf9, 0x40, 0xbf, - 0xfb, 0x8b, 0xe0, 0xcd, 0x41, 0x94, 0xd4, 0x35, 0x9f, 0x13, 0x17, 0x7e, 0x90, 0xfb, 0x39, 0x30, - 0x03, 0x46, 0x05, 0xdf, 0x99, 0xec, 0x18, 0xa3, 0x87, 0xc4, 0x06, 0xd7, 0xc1, 0x52, 0x97, 0xc4, - 0x20, 0x9e, 0xdf, 0x60, 0x0f, 0x59, 0x63, 0xdb, 0x7e, 0xc0, 0x63, 0x4f, 0xcd, 0xeb, 0xd4, 0xbf, - 0x3b, 0x1f, 0x81, 0x7f, 0x92, 0x3a, 0xaf, 0x07, 0x7f, 0x27, 0x4d, 0xc8, 0xea, 0xa8, 0x7e, 0x35, - 0xf2, 0xb9, 0x98, 0x83, 0x6a, 0x42, 0x1f, 0xad, 0x23, 0xb4, 0xb8, 0x3c, 0x98, 0x48, 0xa8, 0x50, - 0xfe, 0x15, 0x90, 0x0d, 0x1e, 0x23, 0x20, 0xbc, 0xe3, 0x62, 0x9b, 0x79, 0x88, 0x0f, 0xc2, 0xb3, - 0x04, 0x4b, 0xe1, 0x13, 0x05, 0x9c, 0x0f, 0x17, 0xc5, 0x28, 0x5a, 0xdd, 0x00, 0x63, 0xb8, 0x66, - 0x99, 0x36, 0x2c, 0x26, 0x58, 0xed, 0x5a, 0x82, 0x4c, 0xb8, 0x06, 0x27, 0x33, 0x3d, 0xc6, 0x6b, - 0xc9, 0x23, 0xde, 0x32, 0xec, 0x53, 0xd7, 0x12, 0xde, 0x57, 0x59, 0x06, 0xd3, 0xf1, 0x83, 0x19, - 0x49, 0x3f, 0x9b, 0x54, 0xae, 0x0f, 0x7c, 0x38, 0x49, 0x93, 0xba, 0xdb, 0xe0, 0xe2, 0xa7, 0xdd, - 0x68, 0x19, 0x8f, 0x01, 0xc3, 0xde, 0xfd, 0xe7, 0x97, 0x01, 0x3c, 0xce, 0xc7, 0x67, 0xf8, 0x25, - 0x81, 0x63, 0x59, 0xb9, 0x82, 0xdd, 0xe7, 0x2a, 0xb8, 0x98, 0x5a, 0xac, 0xe0, 0xe7, 0xf9, 0x86, - 0xe9, 0x31, 0x38, 0xad, 0x4f, 0x81, 0xb1, 0xac, 0x4c, 0x6d, 0x02, 0x32, 0x48, 0x7a, 0x3c, 0xd9, - 0x71, 0xc7, 0xca, 0xb8, 0x08, 0x63, 0x6b, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xcf, 0x9c, - 0x94, 0x33, 0x2c, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_e6ccf6cab3ab66ab) +} + +var fileDescriptor_e6ccf6cab3ab66ab = []byte{ + // 3643 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6c, 0x1b, 0x49, + 0x7a, 0x56, 0xb1, 0xa9, 0x57, 0xc9, 0x92, 0xa8, 0x92, 0x65, 0xcb, 0xb4, 0x66, 0x5c, 0x43, 0x7b, + 0x77, 0xdb, 0x5c, 0x93, 0x2d, 0xb5, 0xe4, 0x19, 0x9b, 0x93, 0xdd, 0x19, 0x52, 0x92, 0x3d, 0xb2, + 0x3d, 0xb2, 0xdd, 0xd6, 0x78, 0x67, 0xbc, 0x98, 0x55, 0x8a, 0x64, 0x51, 0x6c, 0x8b, 0xfd, 0xd8, + 0xee, 0x6a, 0x59, 0xb4, 0x42, 0x64, 0x12, 0x24, 0x58, 0x20, 0x09, 0x90, 0x80, 0x41, 0x12, 0x24, + 0x93, 0xb9, 0x25, 0x97, 0x60, 0x0f, 0xb9, 0xe4, 0x10, 0xec, 0x21, 0xa7, 0x60, 0x0f, 0xb9, 0x4d, + 0x80, 0xbd, 0x07, 0x09, 0x72, 0x08, 0x72, 0x0b, 0x30, 0x40, 0x0e, 0x0b, 0x04, 0x55, 0xdd, 0x4d, + 0x76, 0xf3, 0x61, 0x49, 0x23, 0x07, 0x33, 0x3e, 0x58, 0x5d, 0x55, 0xff, 0xe3, 0xfb, 0xab, 0xfe, + 0xfe, 0x1f, 0xd5, 0x84, 0xef, 0xd2, 0x43, 0x62, 0xd8, 0x0d, 0xea, 0x2a, 0xba, 0xc9, 0xa8, 0x63, + 0x92, 0x86, 0x62, 0x3b, 0x16, 0xb3, 0x94, 0x60, 0xde, 0x2e, 0x2b, 0x64, 0xb7, 0xac, 0xb3, 0x5d, + 0xab, 0xb6, 0x4b, 0x0f, 0xa8, 0xd3, 0x64, 0x75, 0xdd, 0xdc, 0xcb, 0x0b, 0x1a, 0x24, 0xef, 0x39, + 0x76, 0x25, 0xbf, 0x47, 0x18, 0x7d, 0x41, 0x9a, 0xf9, 0x50, 0x52, 0x3e, 0x94, 0x94, 0xef, 0xc8, + 0x48, 0x2f, 0xed, 0x59, 0xd6, 0x5e, 0x83, 0x2a, 0xc4, 0xd6, 0x15, 0x62, 0x9a, 0x16, 0x23, 0x4c, + 0xb7, 0x4c, 0xd7, 0x97, 0x93, 0xc6, 0xc1, 0xaa, 0x18, 0x95, 0xbd, 0x9a, 0x52, 0xd3, 0x69, 0xa3, + 0xba, 0x6b, 0x10, 0x77, 0x3f, 0xa0, 0xb8, 0xdc, 0x4b, 0x41, 0x0d, 0x9b, 0x35, 0x83, 0xc5, 0x37, + 0x7b, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x0f, 0x5b, 0x7f, 0xe1, 0x10, 0xdb, 0xa6, 0x4e, 0xa8, 0x7e, + 0x79, 0xd8, 0x1e, 0xd8, 0x84, 0xd5, 0xa9, 0xe9, 0x19, 0xe2, 0x61, 0x97, 0x3f, 0x05, 0x1c, 0xd7, + 0x87, 0x71, 0xb8, 0x5e, 0x59, 0x31, 0xa8, 0xeb, 0x92, 0x3d, 0x1a, 0x90, 0x66, 0x5f, 0x41, 0xaa, + 0xf6, 0xd0, 0x5e, 0xe9, 0x05, 0xca, 0x74, 0x83, 0xba, 0x8c, 0x18, 0x76, 0x40, 0x70, 0x43, 0xfc, + 0xa9, 0xe4, 0xf6, 0xa8, 0x99, 0x73, 0x5f, 0x90, 0xbd, 0x3d, 0xea, 0x28, 0x96, 0x2d, 0xb6, 0xb2, + 0x7f, 0x5b, 0x33, 0xff, 0xbe, 0x04, 0x53, 0xc5, 0x92, 0xce, 0x1e, 0xd6, 0x36, 0x3b, 0x27, 0x87, + 0x6a, 0x70, 0xda, 0xd5, 0xcd, 0xbd, 0x06, 0xdd, 0x35, 0xa9, 0xcb, 0x68, 0x75, 0xf1, 0x12, 0x06, + 0xf2, 0x94, 0x5a, 0xcc, 0x9f, 0xf4, 0x2c, 0xf3, 0xbd, 0x22, 0xf3, 0xdb, 0x42, 0x90, 0x76, 0xce, + 0x97, 0xeb, 0x8f, 0x50, 0x1d, 0x26, 0x3d, 0x4f, 0xaf, 0x2e, 0x02, 0x0c, 0xe4, 0xc9, 0xd2, 0x4e, + 0xbb, 0xf8, 0xf8, 0x33, 0x00, 0xfe, 0x00, 0xdc, 0xff, 0x31, 0xc9, 0xd5, 0x8a, 0xb9, 0x3b, 0xcb, + 0xb9, 0xdb, 0x9f, 0x1e, 0xdd, 0x6a, 0xe5, 0xa2, 0xc3, 0xb5, 0xd3, 0x0c, 0x57, 0xd4, 0x96, 0x26, + 0x34, 0xa0, 0x4f, 0xe0, 0x58, 0x60, 0x4a, 0x02, 0x4b, 0xaf, 0xc7, 0x94, 0x40, 0x20, 0xba, 0x07, + 0xa7, 0x6a, 0x0d, 0x8b, 0xb0, 0xdd, 0x03, 0xd2, 0xf0, 0xe8, 0xa2, 0x84, 0x81, 0x9c, 0x28, 0x5d, + 0x6f, 0x17, 0xbf, 0xab, 0xce, 0xdd, 0xe1, 0xf3, 0x58, 0xcc, 0x63, 0xe1, 0xae, 0x05, 0x69, 0x39, + 0xaf, 0x7e, 0x09, 0xa2, 0x0c, 0x1a, 0x14, 0x83, 0xa7, 0xfc, 0x19, 0xbd, 0x05, 0xcf, 0x55, 0x2d, + 0xaf, 0xdc, 0xa0, 0x81, 0xb0, 0x24, 0x06, 0x32, 0xd0, 0xa6, 0xfc, 0x39, 0x9f, 0xe4, 0x0a, 0x9c, + 0xd2, 0x4d, 0xf6, 0xf6, 0x5a, 0x40, 0x31, 0x8a, 0x81, 0x2c, 0x69, 0x50, 0x4c, 0x75, 0x64, 0x78, + 0x51, 0x8a, 0x31, 0x0c, 0xe4, 0xa4, 0x36, 0xe5, 0x45, 0x48, 0x7c, 0x19, 0xab, 0x6a, 0x40, 0x31, + 0x8e, 0x81, 0x3c, 0x2a, 0x64, 0xac, 0xaa, 0x3e, 0xc1, 0x55, 0x38, 0x5d, 0xd3, 0x0f, 0x69, 0xb5, + 0x23, 0x64, 0x02, 0x03, 0x79, 0x4c, 0x3b, 0x17, 0x4c, 0xc6, 0x89, 0x3a, 0x72, 0x26, 0x31, 0x90, + 0xc7, 0x03, 0xa2, 0x50, 0xd2, 0x1b, 0x10, 0x96, 0x2d, 0xab, 0x11, 0x50, 0x40, 0x0c, 0xe4, 0x09, + 0x6d, 0x92, 0xcf, 0x74, 0xc0, 0xba, 0xcc, 0xd1, 0xcd, 0xbd, 0x80, 0x60, 0x8a, 0x7b, 0x82, 0x36, + 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, 0x8c, 0xba, 0x01, 0xc5, 0x1b, 0x18, 0xc8, 0xe7, 0x34, 0x28, + 0xa6, 0x62, 0x06, 0x77, 0x60, 0x4c, 0x63, 0x20, 0x4f, 0xfb, 0x06, 0x87, 0x28, 0x76, 0x20, 0xe4, + 0x6f, 0x66, 0x40, 0x30, 0x83, 0x81, 0x3c, 0xa3, 0xde, 0x3c, 0xb9, 0x0b, 0x6c, 0x7b, 0x06, 0x75, + 0xf4, 0xca, 0xa6, 0xe9, 0x19, 0xda, 0x24, 0x17, 0xe4, 0x4b, 0xfd, 0x04, 0xce, 0x76, 0x5e, 0xfa, + 0x40, 0xf4, 0x9b, 0x42, 0xf4, 0xca, 0x71, 0xa2, 0xc3, 0xa0, 0x91, 0x7f, 0x44, 0x58, 0x5d, 0x88, + 0x9d, 0xb6, 0x83, 0x27, 0x5f, 0xf4, 0x6f, 0xc1, 0x0b, 0xbe, 0x7b, 0xed, 0xf6, 0x6a, 0xb8, 0x22, + 0x34, 0xdc, 0x3d, 0xb1, 0x86, 0x0f, 0xfd, 0xe8, 0x11, 0x2a, 0x0a, 0xbc, 0xb7, 0xa3, 0x77, 0xde, + 0x8c, 0x8d, 0x7d, 0xed, 0xdf, 0x81, 0x33, 0x6e, 0xfc, 0x68, 0x67, 0x31, 0x90, 0x67, 0xb5, 0x69, + 0x37, 0x76, 0xb6, 0x1d, 0xb2, 0x8e, 0x9b, 0xa4, 0x30, 0x90, 0x53, 0x21, 0x59, 0xc4, 0x21, 0xdd, + 0xe8, 0xf9, 0xcc, 0x61, 0x20, 0xcf, 0x69, 0x53, 0x6e, 0xe4, 0x7c, 0x02, 0x92, 0x8e, 0x1c, 0x84, + 0x81, 0x8c, 0x7c, 0x92, 0x50, 0x8a, 0x0a, 0x17, 0x1c, 0x6a, 0x53, 0xc2, 0xf7, 0x24, 0xe6, 0x32, + 0xf3, 0x58, 0x92, 0x27, 0xb5, 0xf9, 0x70, 0xf1, 0x49, 0xc4, 0x75, 0x6e, 0xc3, 0x29, 0xcb, 0xa4, + 0x3c, 0x2b, 0xf1, 0x4c, 0xb0, 0x78, 0x5e, 0x44, 0xb1, 0x0b, 0x79, 0x3f, 0x82, 0xe6, 0xc3, 0x08, + 0x9a, 0xdf, 0xe4, 0xab, 0x1f, 0x8c, 0x68, 0x50, 0x10, 0x8b, 0x11, 0xba, 0x0a, 0xcf, 0xf9, 0xac, + 0xbe, 0xae, 0xc5, 0x05, 0xee, 0x98, 0x1f, 0x8c, 0x68, 0xbe, 0x40, 0x5f, 0x09, 0xa2, 0x70, 0xd2, + 0x20, 0x76, 0x80, 0xe3, 0x82, 0x08, 0x2c, 0x1f, 0x9c, 0x21, 0xb0, 0x7c, 0x48, 0x6c, 0x81, 0x7b, + 0xd3, 0x64, 0x4e, 0x53, 0x9b, 0x30, 0x82, 0x21, 0xfa, 0x1d, 0x00, 0xe7, 0x0d, 0x9e, 0x8d, 0x7a, + 0x2c, 0xbf, 0x28, 0x34, 0x3e, 0x3e, 0x9b, 0x46, 0x3b, 0xb6, 0x65, 0xbe, 0xea, 0x39, 0xa3, 0x77, + 0x3e, 0x8a, 0x21, 0x70, 0x4c, 0x1f, 0xc3, 0xe2, 0x6b, 0xc2, 0xe0, 0xbb, 0x65, 0x3f, 0x86, 0xc8, + 0x3c, 0x2a, 0xc0, 0x45, 0xd3, 0x32, 0xd7, 0x2d, 0xf3, 0x80, 0x9a, 0x3c, 0x87, 0x91, 0xc6, 0x36, + 0x31, 0xfc, 0xb0, 0xb8, 0x98, 0x16, 0x81, 0x63, 0xe8, 0x3a, 0x5a, 0x87, 0xb3, 0x9d, 0x44, 0x19, + 0x40, 0xbf, 0x2c, 0xdc, 0x21, 0xdd, 0xe7, 0x0e, 0x3b, 0x21, 0x9d, 0x36, 0xd3, 0x61, 0xf1, 0x85, + 0x50, 0xd8, 0x71, 0xb3, 0xe8, 0x2b, 0xb9, 0x84, 0xa5, 0xaf, 0x1f, 0x4f, 0xe6, 0x42, 0x89, 0xdd, + 0xd7, 0xef, 0x1f, 0x00, 0x5c, 0x8c, 0xeb, 0xe9, 0xe6, 0xed, 0x45, 0x7c, 0x06, 0x65, 0xa5, 0x8d, + 0x76, 0xb1, 0x98, 0xbd, 0xac, 0x05, 0xb2, 0xb1, 0xe9, 0x2f, 0x61, 0xae, 0x03, 0x33, 0x9d, 0x35, + 0xa8, 0x9a, 0x19, 0xbc, 0x58, 0xa5, 0x6e, 0xc5, 0xd1, 0x45, 0x15, 0x91, 0xd7, 0x2e, 0x44, 0x21, + 0x17, 0x3b, 0xd0, 0xd0, 0x17, 0x00, 0x2e, 0x74, 0xb7, 0x25, 0x0a, 0xfa, 0xad, 0x33, 0x44, 0xdc, + 0x92, 0xda, 0x2e, 0x2a, 0x59, 0xb4, 0xdd, 0x8f, 0xf5, 0xd2, 0xf6, 0x50, 0x88, 0xf3, 0x9d, 0x28, + 0x1d, 0xc1, 0x77, 0x00, 0xd3, 0xbd, 0x21, 0x24, 0x82, 0x31, 0xc3, 0xe3, 0x48, 0xe9, 0x56, 0xbb, + 0x78, 0x33, 0xbb, 0xd0, 0xd9, 0x04, 0x9f, 0x2c, 0xd0, 0xb7, 0xd4, 0x3b, 0x1d, 0x53, 0xb9, 0x18, + 0x8f, 0x40, 0x11, 0xbd, 0xbf, 0x04, 0x11, 0xc5, 0xc1, 0xdb, 0x13, 0x51, 0x7c, 0xf5, 0x35, 0x55, + 0x24, 0xa5, 0x3b, 0xed, 0xe2, 0x7a, 0xb6, 0x0b, 0xd2, 0xd7, 0x84, 0xad, 0xf2, 0x73, 0x5a, 0x61, + 0x81, 0x09, 0x57, 0x87, 0xac, 0x0e, 0xb6, 0xc4, 0x97, 0x1b, 0xb1, 0xe4, 0x6f, 0x00, 0x9c, 0xeb, + 0x37, 0xe0, 0xda, 0x6b, 0xaa, 0x0e, 0x4b, 0x6b, 0xed, 0xe2, 0x4a, 0x76, 0x7e, 0x7b, 0x00, 0xee, + 0xf4, 0xf6, 0x70, 0xb8, 0x29, 0xb3, 0x17, 0xe6, 0x3b, 0x70, 0xde, 0xcf, 0x26, 0xd6, 0x01, 0x75, + 0x1c, 0xbd, 0x4a, 0x77, 0x59, 0xd3, 0xa6, 0x8b, 0xdf, 0xe1, 0xb5, 0x52, 0x69, 0xbc, 0x5d, 0x4c, + 0xfe, 0x55, 0x02, 0x48, 0xda, 0x9c, 0xa0, 0x79, 0x18, 0x90, 0xec, 0x34, 0x6d, 0x9a, 0xfe, 0x4f, + 0x00, 0xc7, 0x82, 0xda, 0x14, 0xc1, 0xa4, 0x49, 0x0c, 0xea, 0xd7, 0xa6, 0x9a, 0x78, 0x46, 0x17, + 0xe0, 0x18, 0x31, 0x2c, 0xcf, 0x64, 0x8b, 0x09, 0x51, 0x63, 0x04, 0x23, 0x74, 0x00, 0x13, 0xd6, + 0xbe, 0xa8, 0xfc, 0x66, 0xd4, 0x7b, 0x67, 0xde, 0x86, 0xfc, 0x06, 0xa5, 0xb6, 0xf0, 0xfc, 0x74, + 0xbb, 0x78, 0x51, 0x5d, 0x08, 0x87, 0x71, 0xab, 0x13, 0xd6, 0x7e, 0xe6, 0x0a, 0x9c, 0x08, 0x17, + 0xd1, 0x24, 0x1c, 0xbd, 0x53, 0x7c, 0xf0, 0x64, 0x33, 0x35, 0x82, 0x26, 0x60, 0x72, 0x47, 0xfb, + 0x68, 0x33, 0x05, 0x0a, 0x17, 0xdb, 0xc5, 0xf3, 0x2a, 0x42, 0xa9, 0x23, 0x9c, 0xb1, 0xf6, 0x33, + 0x05, 0x9c, 0xe1, 0xf3, 0x19, 0xdc, 0x4a, 0x3b, 0x70, 0x3a, 0x96, 0x6d, 0x50, 0x0a, 0x4a, 0xfb, + 0xb4, 0x19, 0x58, 0xcb, 0x1f, 0xd1, 0x7d, 0x38, 0xea, 0x87, 0xb7, 0xc4, 0x59, 0xca, 0x25, 0x5f, + 0x46, 0x21, 0x71, 0x0b, 0xa4, 0x37, 0xe0, 0x85, 0xc1, 0xf9, 0x66, 0x80, 0xf2, 0xf3, 0x51, 0xe5, + 0x93, 0x51, 0x29, 0x3f, 0x03, 0xa1, 0x98, 0xde, 0x94, 0x31, 0x40, 0xcc, 0x8f, 0xa2, 0x62, 0x5e, + 0x4b, 0xd5, 0xdf, 0x45, 0x52, 0xf8, 0xcb, 0x44, 0xbb, 0xf8, 0x67, 0x09, 0xf8, 0x7b, 0x20, 0x3b, + 0x5f, 0xc4, 0x65, 0x9d, 0x61, 0xab, 0x86, 0xbb, 0xed, 0xaf, 0xba, 0xb5, 0x65, 0xb2, 0x30, 0x0f, + 0x35, 0x71, 0xc5, 0x32, 0xec, 0x86, 0x5e, 0x11, 0xaf, 0x5e, 0xd0, 0xd0, 0x61, 0xee, 0x94, 0x98, + 0x59, 0xb8, 0xc2, 0xdd, 0x14, 0x1b, 0xc4, 0x6c, 0xe2, 0x1a, 0x25, 0xcc, 0x73, 0xa8, 0xcb, 0x65, + 0x3d, 0x0a, 0x13, 0xd2, 0x97, 0x40, 0x34, 0x31, 0x5f, 0x82, 0x68, 0xe5, 0xff, 0x25, 0x88, 0xb5, + 0x0a, 0xd9, 0xa7, 0xf0, 0xda, 0x1d, 0xdd, 0xac, 0x62, 0xcb, 0x63, 0xd8, 0xb0, 0x1c, 0x8a, 0x49, + 0x99, 0x3f, 0xf6, 0xf5, 0x76, 0xf9, 0x3a, 0x63, 0xb6, 0x5b, 0x50, 0x94, 0x3d, 0x9d, 0xd5, 0xbd, + 0x72, 0xbe, 0x62, 0x19, 0x0a, 0xdf, 0x95, 0x1c, 0xad, 0x58, 0x6e, 0xd3, 0x65, 0x34, 0x18, 0x06, + 0x9b, 0xa4, 0xae, 0x21, 0xf5, 0x08, 0x67, 0xb8, 0x7e, 0xee, 0x3f, 0xcb, 0x95, 0xda, 0xea, 0xdb, + 0x2b, 0x74, 0x25, 0xb7, 0x56, 0x5e, 0x5b, 0xcb, 0xad, 0xdd, 0x5a, 0xad, 0xe6, 0xc8, 0xca, 0xcd, + 0xdb, 0xb9, 0x9b, 0x6b, 0x55, 0x52, 0xae, 0xd6, 0xde, 0xa1, 0xb7, 0x56, 0xd6, 0x32, 0xb8, 0x55, + 0x9a, 0x0e, 0x2b, 0x2f, 0x01, 0x2e, 0xf3, 0xb3, 0x49, 0xb8, 0xd8, 0x8b, 0x24, 0x8c, 0x44, 0xe8, + 0x36, 0xbc, 0x24, 0x8a, 0xdc, 0x4e, 0x88, 0x8c, 0xb6, 0x53, 0x00, 0x4b, 0x72, 0x42, 0xbb, 0xc0, + 0x09, 0x42, 0x86, 0x3b, 0xdd, 0x7e, 0xe9, 0x5d, 0x98, 0x8e, 0xb3, 0xc6, 0xba, 0x27, 0xde, 0xea, + 0x01, 0xed, 0x62, 0x94, 0x77, 0x23, 0xd2, 0x49, 0xf5, 0xe9, 0x8d, 0x56, 0xa0, 0x12, 0x96, 0x64, + 0x29, 0xae, 0x77, 0xab, 0x5b, 0x8c, 0xf6, 0xe9, 0x8d, 0x75, 0x5c, 0x49, 0x2c, 0xc9, 0xc9, 0xb8, + 0xde, 0x8f, 0x22, 0x95, 0xec, 0x20, 0xbd, 0x9d, 0xe2, 0x78, 0x14, 0x4b, 0xf2, 0x68, 0x9f, 0xde, + 0xb0, 0x4e, 0xfe, 0x01, 0xbc, 0xdc, 0xb3, 0x55, 0xb1, 0xf2, 0x7b, 0x0c, 0x4b, 0xf2, 0x98, 0xb6, + 0x18, 0xdb, 0xac, 0x68, 0x25, 0x3e, 0x98, 0x3d, 0xd2, 0x07, 0x4a, 0xf2, 0xf8, 0x00, 0xf6, 0x50, + 0xfb, 0x3b, 0x70, 0x31, 0xce, 0x1e, 0xe9, 0xec, 0x26, 0xb0, 0x24, 0x4f, 0x68, 0x0b, 0x51, 0xde, + 0x52, 0xa7, 0xcb, 0xeb, 0xdb, 0xae, 0x58, 0x19, 0x3b, 0x29, 0x0a, 0xf8, 0xd8, 0x76, 0xc5, 0x8b, + 0xf8, 0x9e, 0xed, 0x8a, 0x76, 0x83, 0x10, 0x4b, 0xf2, 0xb9, 0xf8, 0x76, 0x95, 0xba, 0x9d, 0xe1, + 0xc0, 0x63, 0xea, 0x98, 0x3b, 0x85, 0x25, 0x79, 0xba, 0xff, 0x98, 0x42, 0x6b, 0xcd, 0x5e, 0x6b, + 0x23, 0x15, 0xdf, 0xb9, 0xb3, 0x54, 0x7c, 0xb1, 0x4d, 0xea, 0x56, 0x7d, 0xef, 0xc1, 0xa5, 0x9e, + 0x4d, 0x8a, 0x9f, 0xce, 0x34, 0x96, 0xe4, 0x59, 0xed, 0x52, 0x6c, 0x9b, 0x62, 0xed, 0xd8, 0x10, + 0x01, 0x1d, 0xef, 0x98, 0xc1, 0x92, 0x9c, 0x1a, 0x24, 0x60, 0xa8, 0x57, 0xc7, 0xda, 0xb6, 0x59, + 0x2c, 0xc9, 0x73, 0x3d, 0xc7, 0x14, 0xd9, 0xae, 0x81, 0xcc, 0x91, 0xc6, 0x50, 0x92, 0x51, 0x3f, + 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0xa9, 0x5a, 0x41, 0xe4, 0x08, 0x67, 0x86, 0x79, 0x58, 0xa6, + 0x80, 0x7f, 0xcc, 0x1c, 0x8f, 0xde, 0xc0, 0xfe, 0xff, 0x35, 0xd2, 0x70, 0x83, 0xc1, 0xa7, 0x37, + 0x7a, 0xd9, 0x22, 0xb8, 0x39, 0xdf, 0xca, 0x0d, 0xac, 0xde, 0xc0, 0xab, 0x9f, 0xe2, 0x56, 0x26, + 0x0d, 0x93, 0x25, 0xab, 0xda, 0x1c, 0x94, 0xde, 0x33, 0x14, 0xce, 0x06, 0xdd, 0xf2, 0x8f, 0x74, + 0x56, 0x17, 0x64, 0x33, 0x30, 0x11, 0xde, 0x4f, 0x69, 0x09, 0xbd, 0x8a, 0x4a, 0x30, 0x59, 0x25, + 0x8c, 0x04, 0xf9, 0x24, 0x7f, 0x72, 0x07, 0xe0, 0xd2, 0x34, 0xc1, 0x9b, 0xf9, 0x6b, 0x00, 0x67, + 0x3f, 0xb2, 0xab, 0x84, 0xd1, 0xa7, 0xaa, 0x46, 0x7f, 0xea, 0x51, 0x97, 0xa1, 0x07, 0x50, 0x22, + 0x65, 0x1f, 0xcd, 0x94, 0x5a, 0xf8, 0xfa, 0x69, 0x4a, 0xe3, 0x62, 0xd0, 0xbb, 0x70, 0xca, 0x13, + 0x0a, 0xc4, 0xf5, 0x68, 0x00, 0xb6, 0xbf, 0xd1, 0xb9, 0xa3, 0xd3, 0x46, 0xf5, 0x43, 0xe2, 0xee, + 0x6b, 0xd0, 0x27, 0xe7, 0xcf, 0x59, 0x0c, 0xa7, 0x22, 0xde, 0xca, 0x8b, 0x89, 0x67, 0x9b, 0xda, + 0xc3, 0xd4, 0x08, 0x1a, 0x87, 0xd2, 0xc3, 0xed, 0xcd, 0x14, 0x50, 0xff, 0xf1, 0x1a, 0xbc, 0xd8, + 0xab, 0xf8, 0x09, 0x75, 0x0e, 0xf4, 0x0a, 0x45, 0x9f, 0x25, 0xe1, 0xd8, 0xba, 0xc3, 0x4f, 0x01, + 0x9d, 0xc1, 0x8c, 0xf4, 0x19, 0x78, 0x33, 0xbf, 0x4e, 0xfc, 0xee, 0xbf, 0xfe, 0xc7, 0x9f, 0x26, + 0xbe, 0x4a, 0x64, 0xfe, 0x27, 0xa1, 0x1c, 0xac, 0x84, 0xb7, 0xd4, 0x83, 0xee, 0xa8, 0x95, 0xa3, + 0x48, 0xae, 0x69, 0x29, 0x47, 0xd1, 0xf4, 0xd1, 0x52, 0x8e, 0x22, 0x1e, 0xdc, 0x52, 0x5c, 0x6a, + 0x13, 0x87, 0x30, 0xcb, 0x51, 0x8e, 0xbc, 0xd8, 0xc2, 0x51, 0xc4, 0xdb, 0x5a, 0xca, 0x51, 0xec, + 0xa5, 0x0b, 0xc7, 0x91, 0xf5, 0xae, 0x4b, 0xb7, 0x94, 0xa3, 0x68, 0x20, 0xfc, 0x81, 0xcb, 0x1c, + 0xdb, 0xa1, 0x35, 0xfd, 0x50, 0xc9, 0xb6, 0x7c, 0x25, 0x11, 0x36, 0xb7, 0x57, 0x8e, 0xdb, 0xab, + 0xc8, 0xed, 0x61, 0x88, 0x83, 0x1c, 0xd6, 0x19, 0xb7, 0x94, 0xa3, 0x6e, 0x60, 0x6b, 0x29, 0x47, + 0x3d, 0xf7, 0x4d, 0x9c, 0x73, 0xe0, 0x45, 0x54, 0x8c, 0x2f, 0xd2, 0x0d, 0xb4, 0xd0, 0xdf, 0x03, + 0x08, 0x7d, 0x17, 0x10, 0xaf, 0xd0, 0x37, 0xe5, 0x06, 0x59, 0xe1, 0x05, 0xd7, 0x32, 0x57, 0x8e, + 0xf1, 0x81, 0x02, 0xc8, 0xa2, 0xdf, 0x07, 0x70, 0xec, 0x81, 0x65, 0xed, 0x7b, 0x36, 0x9a, 0xcd, + 0xbb, 0x5e, 0x59, 0xcd, 0x6f, 0x55, 0x83, 0x50, 0x70, 0x26, 0x0c, 0x79, 0x81, 0x41, 0x46, 0xdf, + 0x3d, 0xd6, 0x0f, 0x79, 0x81, 0xd5, 0x42, 0x7f, 0x0c, 0xe0, 0x98, 0x1f, 0x1a, 0xce, 0xb4, 0x6d, + 0x43, 0xae, 0xb8, 0x32, 0x2b, 0x02, 0xce, 0xf7, 0xd3, 0x27, 0x84, 0xc3, 0x77, 0xe6, 0xd7, 0x00, + 0x4e, 0x84, 0xc1, 0x0a, 0xdd, 0x3e, 0x39, 0xa6, 0x9e, 0x00, 0x37, 0x14, 0xd2, 0x17, 0x40, 0x60, + 0xfa, 0x73, 0x90, 0xce, 0x2a, 0x07, 0xea, 0xab, 0x41, 0x91, 0x32, 0xcd, 0xfb, 0xc0, 0x78, 0x94, + 0x7b, 0xb6, 0xa2, 0x9e, 0x9a, 0x65, 0x59, 0xfd, 0xbe, 0x72, 0xa0, 0x92, 0x93, 0xf2, 0x80, 0x2c, + 0xfa, 0x5b, 0x00, 0xc7, 0x36, 0x68, 0x83, 0x32, 0xda, 0xef, 0x19, 0xc3, 0x6c, 0x72, 0xda, 0xc5, + 0x62, 0xf9, 0x3a, 0x9c, 0x81, 0xb0, 0x68, 0xeb, 0xf7, 0x69, 0xb3, 0xe8, 0xb1, 0x3a, 0x1a, 0x81, + 0x17, 0xe1, 0xd8, 0x43, 0xfe, 0xa8, 0xa2, 0x69, 0x98, 0x74, 0x28, 0xa9, 0xc2, 0xd1, 0x17, 0x8e, + 0xce, 0xe8, 0xf3, 0xf3, 0x70, 0xe6, 0x30, 0xa7, 0x3b, 0x0e, 0x07, 0xe1, 0xea, 0xe5, 0x06, 0x45, + 0x09, 0xec, 0x6f, 0x8b, 0x9c, 0x3d, 0xa9, 0xe7, 0xfc, 0x37, 0x80, 0x13, 0x77, 0x29, 0x7b, 0xec, + 0x51, 0xa7, 0xf9, 0xff, 0xe2, 0x3b, 0x7f, 0x08, 0xda, 0xc5, 0x9d, 0xcc, 0x36, 0x5c, 0x1a, 0xd4, + 0x65, 0x74, 0x34, 0x9f, 0xb2, 0xbb, 0xf8, 0x18, 0x94, 0x47, 0x84, 0xa1, 0x79, 0x74, 0xe3, 0x38, + 0x43, 0x7f, 0xca, 0x15, 0x84, 0xe6, 0x7e, 0x31, 0x0a, 0x53, 0x77, 0x29, 0x0b, 0x6b, 0x09, 0x5f, + 0x79, 0xe9, 0x0c, 0x79, 0x33, 0x10, 0x94, 0x7e, 0x0d, 0x32, 0x32, 0x9f, 0x25, 0x85, 0x4d, 0xff, + 0x2b, 0xa1, 0xaf, 0xa4, 0x63, 0xac, 0xea, 0x94, 0x2c, 0x41, 0xe0, 0x1d, 0xd4, 0x03, 0xb5, 0x7a, + 0xd7, 0x7a, 0xb2, 0xd4, 0xd0, 0x26, 0xa6, 0x6f, 0xcd, 0x7b, 0xd5, 0x62, 0x3c, 0x7b, 0xbc, 0xa2, + 0xcd, 0x18, 0xbc, 0x3a, 0x94, 0x37, 0x96, 0xef, 0x86, 0xb7, 0x01, 0xfd, 0x7c, 0xdd, 0x32, 0x7f, + 0xa0, 0x21, 0x43, 0x15, 0xf6, 0xa7, 0xb3, 0x21, 0x25, 0xf5, 0x90, 0xe5, 0xa1, 0x76, 0xba, 0xaf, + 0xd2, 0x1a, 0x4b, 0xb7, 0xe8, 0xf3, 0x24, 0x4c, 0x6e, 0x56, 0xea, 0x16, 0x3a, 0xf6, 0x53, 0x90, + 0xeb, 0x95, 0xf3, 0x7e, 0xbb, 0x13, 0x86, 0x95, 0xd3, 0xb3, 0x64, 0x7e, 0x2e, 0xb5, 0x8b, 0xff, + 0x9c, 0x80, 0x13, 0xb4, 0x52, 0xb7, 0xb0, 0x63, 0x57, 0xd0, 0xdc, 0x13, 0xcf, 0x30, 0x88, 0xd3, + 0x2c, 0xe0, 0xcd, 0x60, 0x2a, 0x9d, 0xda, 0xe8, 0x5e, 0x1f, 0x89, 0xd9, 0xcc, 0x06, 0x44, 0xf1, + 0x97, 0x59, 0x20, 0x3e, 0xe5, 0x2b, 0x7c, 0xef, 0x36, 0x94, 0xd4, 0xe5, 0x65, 0xa4, 0x66, 0x96, + 0x61, 0x8a, 0xd8, 0xfe, 0x25, 0x87, 0x6e, 0x99, 0xca, 0x73, 0xd7, 0x32, 0xd1, 0xd2, 0x51, 0x26, + 0xac, 0xc2, 0x33, 0xac, 0x4e, 0xb1, 0x6e, 0xda, 0x5e, 0xf0, 0x45, 0x34, 0xd3, 0xba, 0xf7, 0x14, + 0x4a, 0x37, 0x97, 0x57, 0xd1, 0x43, 0xf8, 0xb6, 0x46, 0x99, 0xe7, 0x98, 0xb4, 0x8a, 0x5f, 0xd4, + 0xa9, 0x89, 0x39, 0xa5, 0x43, 0x5d, 0xcb, 0x73, 0x2a, 0x14, 0xeb, 0x2e, 0x66, 0xd4, 0xb0, 0x2d, + 0x87, 0x38, 0x7a, 0xa3, 0x89, 0x3d, 0x93, 0x1c, 0x10, 0xbd, 0x41, 0xca, 0x0d, 0x9a, 0xcf, 0x2e, + 0xc0, 0x89, 0xc3, 0x9c, 0xe9, 0x19, 0x65, 0xea, 0xa0, 0xc9, 0xb9, 0x11, 0xf1, 0xef, 0x93, 0xf7, + 0xef, 0xbd, 0x0b, 0xa5, 0xb5, 0xe5, 0x35, 0xb4, 0x06, 0xb3, 0xaf, 0x90, 0x5b, 0xb5, 0xa8, 0x8b, + 0x4d, 0x8b, 0x61, 0x7a, 0xa8, 0xbb, 0x2c, 0x8f, 0xc6, 0xa0, 0xb8, 0x16, 0x14, 0xaf, 0xee, 0xa7, + 0xc7, 0x87, 0x23, 0xbe, 0xd5, 0xca, 0x91, 0x7f, 0xdc, 0xcf, 0x2e, 0x65, 0x52, 0xd1, 0x54, 0xc4, + 0xd7, 0x0a, 0xfe, 0x4d, 0xd1, 0x33, 0x84, 0xfa, 0x96, 0xd0, 0x2f, 0x01, 0x3c, 0xb7, 0x41, 0xa9, + 0x2d, 0xbe, 0xba, 0xf1, 0x89, 0x6f, 0xaa, 0x46, 0x7a, 0x4f, 0x58, 0x7b, 0x3b, 0xb3, 0x76, 0x6c, + 0x96, 0x89, 0xfd, 0x1e, 0x20, 0xcf, 0xdb, 0x25, 0x91, 0x1e, 0x8b, 0x10, 0x6e, 0x5b, 0x25, 0xdd, + 0xac, 0xea, 0xe6, 0x9e, 0x8b, 0x2e, 0xf5, 0xe5, 0x8e, 0x8d, 0xe0, 0x57, 0x16, 0x43, 0xd3, 0xca, + 0x08, 0x7a, 0x0a, 0xc7, 0x77, 0x74, 0x83, 0x5a, 0x1e, 0x43, 0x43, 0x88, 0x86, 0x32, 0x5f, 0x16, + 0xf0, 0x17, 0xd0, 0x7c, 0x74, 0x87, 0x59, 0x20, 0xac, 0x0e, 0x53, 0x9b, 0x8e, 0x63, 0x39, 0xbc, + 0x97, 0xdb, 0xa0, 0x8c, 0xe8, 0x0d, 0xf7, 0xd4, 0x0a, 0xae, 0x09, 0x05, 0x6f, 0xa2, 0xa5, 0xd8, + 0x11, 0x72, 0xa9, 0x2f, 0x74, 0x56, 0xaf, 0x06, 0x52, 0xff, 0x04, 0x40, 0x74, 0x97, 0xb2, 0xde, + 0xde, 0xf1, 0x14, 0xd5, 0x52, 0x0f, 0xeb, 0x50, 0x3c, 0xdf, 0x13, 0x78, 0xde, 0xca, 0x5c, 0x8a, + 0xe2, 0xe1, 0x50, 0xca, 0x56, 0xb5, 0xa9, 0x1c, 0xf1, 0x9a, 0x45, 0xf4, 0x98, 0xe8, 0x8f, 0x00, + 0x9c, 0x7b, 0x64, 0xb9, 0x8c, 0x4b, 0x14, 0xac, 0x02, 0xd1, 0x29, 0xfb, 0xd5, 0xa1, 0x30, 0x14, + 0x01, 0xe3, 0x7a, 0xe6, 0x5a, 0x14, 0x86, 0x6d, 0xb9, 0x8c, 0x43, 0x11, 0xdf, 0x5a, 0x7d, 0x3c, + 0x1d, 0x37, 0xf9, 0x15, 0x80, 0xf3, 0xeb, 0x75, 0x5a, 0xd9, 0x0f, 0x0b, 0x85, 0x47, 0xc4, 0x21, + 0x86, 0xfb, 0x8d, 0xf9, 0xfd, 0x5d, 0x61, 0x40, 0x11, 0xbd, 0x77, 0x9c, 0xdf, 0xdb, 0x02, 0xa7, + 0xb2, 0x47, 0xd9, 0xc0, 0x57, 0x00, 0xfd, 0x17, 0x80, 0x6f, 0x08, 0xc3, 0xfc, 0xeb, 0x61, 0xde, + 0x31, 0x7f, 0x4b, 0x4c, 0x7c, 0x2c, 0x4c, 0xbc, 0x8f, 0xb6, 0x4e, 0x61, 0x62, 0xd0, 0xe9, 0x89, + 0x9f, 0x33, 0xf5, 0x98, 0x6b, 0xed, 0xb7, 0xd0, 0xbf, 0x01, 0x78, 0x5e, 0x18, 0xcb, 0x3d, 0xeb, + 0x5b, 0x64, 0x63, 0xa6, 0x70, 0x42, 0x1b, 0xb9, 0x8b, 0xc6, 0x7b, 0xee, 0x56, 0x21, 0xfe, 0x4b, + 0x27, 0xf4, 0x39, 0x80, 0x4b, 0x0f, 0x0f, 0xa8, 0x23, 0x2a, 0x73, 0x8d, 0xba, 0xb6, 0x65, 0xba, + 0x74, 0xdd, 0x12, 0x57, 0xf9, 0x3b, 0x4d, 0x9b, 0x0e, 0x0d, 0x21, 0x4b, 0x7d, 0xf3, 0x91, 0x4b, + 0xcc, 0xcc, 0x66, 0xbb, 0x88, 0x0a, 0xb1, 0xf4, 0xc8, 0xe8, 0x21, 0x13, 0xf0, 0xb3, 0x48, 0x8e, + 0xbe, 0x46, 0x56, 0xa8, 0xdc, 0x09, 0x94, 0x57, 0x7c, 0xe5, 0xac, 0x69, 0xd3, 0xf4, 0x3f, 0x81, + 0x76, 0xf1, 0x17, 0x00, 0xd5, 0x86, 0xdc, 0xbe, 0x44, 0xbf, 0x10, 0xe1, 0x5c, 0x0e, 0xbf, 0xa8, + 0xeb, 0x95, 0x3a, 0x76, 0xeb, 0x96, 0xd7, 0xa8, 0x8a, 0x54, 0x57, 0xa6, 0xd8, 0x73, 0x69, 0x15, + 0xeb, 0x26, 0xb6, 0x1b, 0xa4, 0x42, 0xb1, 0x55, 0x13, 0x49, 0xb1, 0x6a, 0x55, 0x3c, 0x83, 0x9a, + 0x7e, 0x07, 0x8f, 0x2b, 0x96, 0xc1, 0x07, 0x6f, 0xa5, 0x1f, 0xc3, 0x2b, 0x83, 0xaa, 0x7d, 0x9e, + 0xb2, 0xc2, 0xfb, 0x9e, 0xd3, 0x7e, 0x4e, 0x78, 0x0e, 0xcf, 0x57, 0x88, 0x41, 0x1b, 0xeb, 0xc4, + 0xa5, 0x81, 0x8c, 0x6d, 0x62, 0x50, 0xa4, 0xc1, 0x51, 0xff, 0x87, 0x17, 0xa7, 0x0d, 0xd1, 0x97, + 0xc4, 0x26, 0xce, 0xa3, 0xb9, 0x58, 0x88, 0xe6, 0x4b, 0xea, 0x4f, 0xe0, 0x52, 0xd1, 0xb4, 0x58, + 0x9d, 0x3a, 0x81, 0x26, 0x1e, 0x0d, 0x23, 0xe9, 0xea, 0x87, 0xb1, 0xe4, 0x75, 0x5a, 0xc5, 0x23, + 0xa5, 0x5f, 0x4c, 0xb6, 0x8b, 0x3f, 0x9f, 0x44, 0x5f, 0x01, 0x38, 0x5f, 0xc4, 0x25, 0xff, 0x03, + 0x50, 0xc4, 0x3b, 0x3f, 0x86, 0xe7, 0xf7, 0xb4, 0x47, 0xeb, 0xb9, 0xbb, 0xbe, 0xe9, 0xd8, 0x76, + 0xac, 0xe7, 0xb4, 0xc2, 0x4e, 0xbb, 0x65, 0xe9, 0x94, 0x69, 0x99, 0xf4, 0xfd, 0xc0, 0x34, 0x4e, + 0x9d, 0xfd, 0x09, 0x3c, 0x5f, 0x7a, 0xb2, 0x81, 0x57, 0x73, 0xeb, 0x0d, 0xe2, 0xb9, 0x14, 0x3f, + 0xd0, 0x2b, 0xd4, 0x74, 0x29, 0xba, 0x73, 0x3a, 0xc9, 0x4a, 0xb9, 0x61, 0x95, 0x15, 0x83, 0xb8, + 0x8c, 0x3a, 0xca, 0x83, 0xad, 0xf5, 0xcd, 0xed, 0x27, 0x9b, 0x79, 0x76, 0xc8, 0x54, 0x69, 0x25, + 0xbf, 0x5c, 0xc0, 0x70, 0xe1, 0x30, 0xe7, 0x5a, 0x06, 0x15, 0xd6, 0x74, 0x9f, 0xd0, 0x78, 0x7a, + 0xb4, 0x49, 0xaa, 0x55, 0x92, 0x95, 0x40, 0x22, 0xa9, 0xf6, 0xd5, 0x7c, 0xea, 0x85, 0xe8, 0xcc, + 0x61, 0xae, 0x66, 0x59, 0x39, 0x43, 0x37, 0x68, 0xa1, 0x8f, 0xb2, 0x30, 0x84, 0x52, 0x7b, 0xc4, + 0xeb, 0xb7, 0x55, 0xb4, 0x05, 0xef, 0xf6, 0xd7, 0x6f, 0x9e, 0x4b, 0x9d, 0x6e, 0xed, 0x56, 0x27, + 0x07, 0x14, 0xdb, 0xd4, 0x31, 0x74, 0xd7, 0xe5, 0xae, 0xcb, 0x2c, 0x4c, 0x2a, 0x15, 0xea, 0xba, + 0xb1, 0x5a, 0x2f, 0xaf, 0x9d, 0xa1, 0x22, 0x1c, 0xd7, 0x1e, 0x43, 0x69, 0x6d, 0xe5, 0x16, 0xba, + 0x07, 0xa7, 0xb7, 0xbe, 0x67, 0x60, 0x82, 0x19, 0x25, 0xb6, 0xc5, 0xf2, 0xe8, 0x36, 0x7c, 0x27, + 0xfd, 0xf5, 0xbe, 0x01, 0x3c, 0xfb, 0x0b, 0x09, 0xce, 0xc2, 0xc9, 0x12, 0x71, 0xf5, 0x8a, 0xb8, + 0x1d, 0x48, 0x4c, 0x00, 0xf8, 0x77, 0x20, 0x76, 0x61, 0xf0, 0x39, 0x98, 0x48, 0xa4, 0x27, 0x3f, + 0xce, 0x15, 0x1f, 0x6d, 0xe5, 0xee, 0xd3, 0x26, 0x4e, 0xdc, 0x93, 0xe1, 0xd2, 0x61, 0x8e, 0x18, + 0xe4, 0xa5, 0x65, 0xe6, 0x88, 0xad, 0x07, 0x3a, 0x73, 0xc4, 0x63, 0x75, 0x1e, 0x1d, 0xd0, 0x44, + 0x7a, 0xcc, 0xe2, 0x03, 0xf5, 0xde, 0x6f, 0xc2, 0x37, 0x87, 0x51, 0x5a, 0x8e, 0xfe, 0x92, 0x3a, + 0xe8, 0x87, 0xd9, 0xdf, 0x80, 0xb3, 0x30, 0x29, 0xf8, 0xc6, 0xd3, 0xa3, 0xcc, 0xda, 0xa7, 0x26, + 0xbc, 0x0e, 0x97, 0xba, 0x24, 0x1a, 0x75, 0xbd, 0x06, 0xdb, 0x61, 0x8d, 0x2d, 0xf3, 0x09, 0x0f, + 0x42, 0x55, 0xb7, 0x53, 0x62, 0x6f, 0xbf, 0x0f, 0x7f, 0x05, 0x3a, 0xb7, 0x19, 0xff, 0x02, 0x26, + 0x24, 0x39, 0xa9, 0x5e, 0x0d, 0x9d, 0x2f, 0xe2, 0xa9, 0x8a, 0xc0, 0xa3, 0x74, 0x84, 0x16, 0xae, + 0x0c, 0x27, 0x12, 0x10, 0x4a, 0xbf, 0x0d, 0xd3, 0xfe, 0xe5, 0x08, 0x42, 0x77, 0x1d, 0x62, 0x32, + 0x17, 0xf3, 0x41, 0x70, 0xa8, 0x70, 0x29, 0xb8, 0x32, 0x41, 0xf3, 0xc1, 0xa2, 0x18, 0x85, 0xab, + 0xeb, 0x70, 0x94, 0x54, 0x0d, 0xdd, 0x44, 0x85, 0x18, 0xab, 0x59, 0x8d, 0x91, 0x09, 0x1f, 0xe1, + 0x64, 0xba, 0xcb, 0x78, 0x71, 0x7a, 0xc0, 0xbb, 0x92, 0x9a, 0xe5, 0x18, 0xc2, 0x0d, 0xcb, 0x57, + 0xe0, 0x74, 0xf4, 0x60, 0x46, 0x7a, 0xaf, 0x71, 0xca, 0xd7, 0x87, 0x5e, 0xe4, 0xf4, 0x92, 0x3a, + 0x5b, 0xf0, 0xe2, 0x87, 0xdd, 0xb0, 0x19, 0x0d, 0x06, 0xa7, 0x0d, 0x02, 0x2f, 0x2f, 0x43, 0x74, + 0x98, 0x8b, 0xce, 0xf0, 0xb7, 0x05, 0x8d, 0xa6, 0xa5, 0x32, 0x71, 0x5e, 0xca, 0xf0, 0x62, 0xcf, + 0x62, 0x99, 0xbc, 0xcc, 0x35, 0x74, 0x97, 0xa1, 0x69, 0x75, 0x0a, 0x8e, 0xa6, 0x25, 0xcb, 0xa4, + 0x30, 0x81, 0xc1, 0xb3, 0xc9, 0x8e, 0x3b, 0x96, 0xc7, 0x44, 0x3c, 0x5b, 0xfd, 0xbf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xaf, 0x42, 0x84, 0x1a, 0xde, 0x2d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1104,7 +1105,7 @@ func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServi func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create", in, out, opts...) if err != nil { return nil, err } @@ -1113,7 +1114,7 @@ func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) if err != nil { return nil, err } @@ -1122,7 +1123,7 @@ func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABit func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) if err != nil { return nil, err } @@ -1131,7 +1132,7 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update", in, out, opts...) if err != nil { return nil, err } @@ -1140,7 +1141,7 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) if err != nil { return nil, err } @@ -1149,7 +1150,7 @@ func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *Update func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete", in, out, opts...) if err != nil { return nil, err } @@ -1158,7 +1159,7 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) if err != nil { return nil, err } @@ -1167,7 +1168,7 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) { out := new(ABitOfEverythingRepeated) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) if err != nil { return nil, err } @@ -1176,7 +1177,7 @@ func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -1185,7 +1186,7 @@ func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.String func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) if err != nil { return nil, err } @@ -1194,7 +1195,7 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -1203,7 +1204,7 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) if err != nil { return nil, err } @@ -1212,7 +1213,7 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) if err != nil { return nil, err } @@ -1221,7 +1222,7 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) if err != nil { return nil, err } @@ -1230,7 +1231,7 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) if err != nil { return nil, err } @@ -1239,7 +1240,7 @@ func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, i func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckGetQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -1248,7 +1249,7 @@ func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -1257,7 +1258,7 @@ func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx contex func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -1266,7 +1267,7 @@ func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) { out := new(wrappers.StringValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) if err != nil { return nil, err } @@ -1382,7 +1383,7 @@ func _ABitOfEverythingService_Create_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Create", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Create(ctx, req.(*ABitOfEverything)) @@ -1400,7 +1401,7 @@ func _ABitOfEverythingService_CreateBody_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CreateBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CreateBody(ctx, req.(*ABitOfEverything)) @@ -1418,7 +1419,7 @@ func _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Lookup", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Lookup(ctx, req.(*sub2.IdMessage)) @@ -1436,7 +1437,7 @@ func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Update", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Update(ctx, req.(*ABitOfEverything)) @@ -1454,7 +1455,7 @@ func _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/UpdateV2", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, req.(*UpdateV2Request)) @@ -1472,7 +1473,7 @@ func _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Delete", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Delete(ctx, req.(*sub2.IdMessage)) @@ -1490,7 +1491,7 @@ func _ABitOfEverythingService_GetQuery_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetQuery", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetQuery(ctx, req.(*ABitOfEverything)) @@ -1508,7 +1509,7 @@ func _ABitOfEverythingService_GetRepeatedQuery_Handler(srv interface{}, ctx cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetRepeatedQuery", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, req.(*ABitOfEverythingRepeated)) @@ -1526,7 +1527,7 @@ func _ABitOfEverythingService_Echo_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Echo", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Echo(ctx, req.(*sub.StringMessage)) @@ -1544,7 +1545,7 @@ func _ABitOfEverythingService_DeepPathEcho_Handler(srv interface{}, ctx context. } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/DeepPathEcho", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).DeepPathEcho(ctx, req.(*ABitOfEverything)) @@ -1562,7 +1563,7 @@ func _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/NoBindings", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).NoBindings(ctx, req.(*duration.Duration)) @@ -1580,7 +1581,7 @@ func _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/Timeout", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Timeout(ctx, req.(*empty.Empty)) @@ -1598,7 +1599,7 @@ func _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ctx cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/ErrorWithDetails", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, req.(*empty.Empty)) @@ -1616,7 +1617,7 @@ func _ABitOfEverythingService_GetMessageWithBody_Handler(srv interface{}, ctx co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/GetMessageWithBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetMessageWithBody(ctx, req.(*MessageWithBody)) @@ -1634,7 +1635,7 @@ func _ABitOfEverythingService_PostWithEmptyBody_Handler(srv interface{}, ctx con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/PostWithEmptyBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).PostWithEmptyBody(ctx, req.(*Body)) @@ -1652,7 +1653,7 @@ func _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{}, ctx c } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckGetQueryParams", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, req.(*ABitOfEverything)) @@ -1670,7 +1671,7 @@ func _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler(srv interfac } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, req.(*ABitOfEverything)) @@ -1688,7 +1689,7 @@ func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/CheckPostQueryParams", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, req.(*ABitOfEverything)) @@ -1706,7 +1707,7 @@ func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ABitOfEverythingService/OverwriteResponseContentType", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*empty.Empty)) @@ -1715,7 +1716,7 @@ func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface } var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.ABitOfEverythingService", + ServiceName: "grpc.gateway.examples.internal.examplepb.ABitOfEverythingService", HandlerType: (*ABitOfEverythingServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1796,7 +1797,7 @@ var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", + Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", } // CamelCaseServiceNameClient is the client API for CamelCaseServiceName service. @@ -1816,7 +1817,7 @@ func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClie func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.camelCaseServiceName/Empty", in, out, opts...) if err != nil { return nil, err } @@ -1850,7 +1851,7 @@ func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.camelCaseServiceName/Empty", + FullMethod: "/grpc.gateway.examples.internal.examplepb.camelCaseServiceName/Empty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(CamelCaseServiceNameServer).Empty(ctx, req.(*empty.Empty)) @@ -1859,7 +1860,7 @@ func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, d } var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.camelCaseServiceName", + ServiceName: "grpc.gateway.examples.internal.examplepb.camelCaseServiceName", HandlerType: (*CamelCaseServiceNameServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1868,7 +1869,7 @@ var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", + Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", } // AnotherServiceWithNoBindingsClient is the client API for AnotherServiceWithNoBindings service. @@ -1888,7 +1889,7 @@ func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWi func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -1922,7 +1923,7 @@ func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings/NoBindings", + FullMethod: "/grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, req.(*empty.Empty)) @@ -1931,7 +1932,7 @@ func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx conte } var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.AnotherServiceWithNoBindings", + ServiceName: "grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings", HandlerType: (*AnotherServiceWithNoBindingsServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1940,5 +1941,5 @@ var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/a_bit_of_everything.proto", + Metadata: "examples/internal/proto/examplepb/a_bit_of_everything.proto", } diff --git a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go similarity index 99% rename from examples/proto/examplepb/a_bit_of_everything.pb.gw.go rename to examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 2135d7f8a54..cc444791c2a 100644 --- a/examples/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/a_bit_of_everything.proto +// source: examples/internal/proto/examplepb/a_bit_of_everything.proto /* Package examplepb is a reverse proxy. @@ -16,9 +16,9 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "google.golang.org/grpc" diff --git a/examples/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto similarity index 97% rename from examples/proto/examplepb/a_bit_of_everything.proto rename to examples/internal/proto/examplepb/a_bit_of_everything.proto index b5e394b2970..e391ffa65e3 100644 --- a/examples/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -1,15 +1,15 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/wrappers.proto"; -import "examples/proto/pathenum/path_enum.proto"; -import "examples/proto/sub/message.proto"; -import "examples/proto/sub2/message.proto"; +import "examples/internal/proto/pathenum/path_enum.proto"; +import "examples/internal/proto/sub/message.proto"; +import "examples/internal/proto/sub2/message.proto"; import "google/protobuf/timestamp.proto"; import "protoc-gen-swagger/options/annotations.proto"; @@ -155,7 +155,7 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { description: "I'm a teapot."; schema: { json_schema: { - ref: ".grpc.gateway.examples.examplepb.NumericEnum"; + ref: ".grpc.gateway.examples.internal.examplepb.NumericEnum"; } } } @@ -428,7 +428,7 @@ service ABitOfEverythingService { // This makes it useful when validating that the OpenAPI v2 API // description exposes documentation correctly on all paths // defined as additional_bindings in the proto. - rpc Echo(grpc.gateway.examples.sub.StringMessage) returns (grpc.gateway.examples.sub.StringMessage) { + rpc Echo(grpc.gateway.examples.internal.sub.StringMessage) returns (grpc.gateway.examples.internal.sub.StringMessage) { option (google.api.http) = { get: "/v1/example/a_bit_of_everything/echo/{value}" additional_bindings { diff --git a/examples/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json similarity index 100% rename from examples/proto/examplepb/a_bit_of_everything.swagger.json rename to examples/internal/proto/examplepb/a_bit_of_everything.swagger.json diff --git a/examples/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go similarity index 74% rename from examples/proto/examplepb/echo_service.pb.go rename to examples/internal/proto/examplepb/echo_service.pb.go index b9f5743303b..3ca940dce39 100644 --- a/examples/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/echo_service.proto +// source: examples/internal/proto/examplepb/echo_service.proto // Echo Service // @@ -45,7 +45,7 @@ func (m *Embedded) Reset() { *m = Embedded{} } func (m *Embedded) String() string { return proto.CompactTextString(m) } func (*Embedded) ProtoMessage() {} func (*Embedded) Descriptor() ([]byte, []int) { - return fileDescriptor_01041da8d77029c8, []int{0} + return fileDescriptor_2919b738e91bb561, []int{0} } func (m *Embedded) XXX_Unmarshal(b []byte) error { @@ -134,7 +134,7 @@ func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } func (*SimpleMessage) ProtoMessage() {} func (*SimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_01041da8d77029c8, []int{1} + return fileDescriptor_2919b738e91bb561, []int{1} } func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { @@ -261,46 +261,46 @@ func (*SimpleMessage) XXX_OneofWrappers() []interface{} { } func init() { - proto.RegisterType((*Embedded)(nil), "grpc.gateway.examples.examplepb.Embedded") - proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.examples.examplepb.SimpleMessage") + proto.RegisterType((*Embedded)(nil), "grpc.gateway.examples.internal.examplepb.Embedded") + proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.examples.internal.examplepb.SimpleMessage") } func init() { - proto.RegisterFile("examples/proto/examplepb/echo_service.proto", fileDescriptor_01041da8d77029c8) -} - -var fileDescriptor_01041da8d77029c8 = []byte{ - // 470 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, - 0x14, 0xef, 0xd9, 0x6e, 0x9a, 0xbc, 0x08, 0x54, 0x9d, 0x40, 0x98, 0xb4, 0xa8, 0x91, 0xc5, 0x10, - 0x8a, 0xe4, 0x53, 0xc2, 0x06, 0x13, 0x11, 0x45, 0x5d, 0x60, 0x70, 0xb7, 0x2c, 0xd1, 0xc5, 0xf7, - 0xe4, 0x5a, 0xd8, 0x77, 0x96, 0x7d, 0x29, 0x8d, 0xac, 0x2c, 0x48, 0x6c, 0x30, 0xb1, 0xf3, 0x11, - 0xd8, 0xf8, 0x18, 0x4c, 0x7c, 0x05, 0x3e, 0x08, 0xba, 0x4b, 0x1c, 0x09, 0x5a, 0xb5, 0xea, 0x90, - 0xcd, 0xef, 0xcf, 0xef, 0xfd, 0x7e, 0xf7, 0x7b, 0xcf, 0xf0, 0x1c, 0x2f, 0x79, 0x5e, 0x64, 0x58, - 0xb1, 0xa2, 0x54, 0x5a, 0xb1, 0x75, 0x58, 0xcc, 0x18, 0xc6, 0xe7, 0x6a, 0x5a, 0x61, 0x79, 0x91, - 0xc6, 0x18, 0xda, 0x22, 0x3d, 0x4a, 0xca, 0x22, 0x0e, 0x13, 0xae, 0xf1, 0x23, 0x5f, 0x84, 0x0d, - 0x32, 0xdc, 0x60, 0x7a, 0x87, 0x89, 0x52, 0x49, 0x86, 0x8c, 0x17, 0x29, 0xe3, 0x52, 0x2a, 0xcd, - 0x75, 0xaa, 0x64, 0xb5, 0x82, 0x07, 0x6f, 0xa1, 0x7d, 0x92, 0xcf, 0x50, 0x08, 0x14, 0xf4, 0x10, - 0xda, 0x45, 0xa9, 0x92, 0x12, 0xab, 0xca, 0x27, 0x7d, 0x32, 0x70, 0x4f, 0x77, 0xa2, 0x4d, 0x86, - 0x3e, 0x00, 0x4f, 0x2a, 0x8d, 0xbe, 0xd3, 0x27, 0x83, 0xce, 0xe9, 0x4e, 0x64, 0xa3, 0x71, 0x0b, - 0xbc, 0x9c, 0x97, 0x1f, 0x82, 0xcf, 0x0e, 0xdc, 0x3b, 0x4b, 0x0d, 0xe5, 0x3b, 0xac, 0x2a, 0x9e, - 0x20, 0xbd, 0x0f, 0x4e, 0x2a, 0xec, 0x9c, 0x4e, 0xe4, 0xa4, 0x82, 0xee, 0x83, 0x2b, 0xe7, 0xb9, - 0x85, 0xbb, 0x91, 0xf9, 0xa4, 0x07, 0xd0, 0xce, 0x52, 0x89, 0x53, 0x93, 0x76, 0xd7, 0x7c, 0x7b, - 0x26, 0xf3, 0x7e, 0x9e, 0x1b, 0xba, 0x8c, 0xcb, 0xc4, 0xf7, 0x1a, 0x3a, 0x13, 0xd1, 0xd7, 0xd0, - 0xaa, 0x34, 0xd7, 0xf3, 0xca, 0xdf, 0xed, 0x93, 0x41, 0x77, 0xf4, 0x2c, 0xbc, 0xe5, 0xf9, 0x61, - 0xf3, 0xba, 0x68, 0x0d, 0xa4, 0xfb, 0xe0, 0xa0, 0xf4, 0x5b, 0x96, 0x8f, 0x44, 0x0e, 0x4a, 0xfa, - 0x0a, 0x1c, 0xa9, 0xfc, 0xbd, 0x3b, 0x0e, 0x34, 0x60, 0xa9, 0x8c, 0x01, 0xb1, 0x12, 0x38, 0xde, - 0x05, 0x17, 0x2f, 0xf5, 0xe8, 0x97, 0x07, 0xdd, 0x93, 0xf8, 0x5c, 0x9d, 0xad, 0x96, 0x44, 0xbf, - 0x3b, 0xe0, 0x99, 0x98, 0x86, 0xb7, 0x0e, 0xfe, 0xc7, 0xbe, 0xde, 0x1d, 0xfb, 0x83, 0x9f, 0xe4, - 0xd3, 0xef, 0x3f, 0xdf, 0x9c, 0x1f, 0x24, 0x78, 0xc8, 0x2e, 0x86, 0xcd, 0xcd, 0xd8, 0x8b, 0x61, - 0x75, 0x2a, 0x96, 0x93, 0x27, 0xf4, 0xe0, 0xda, 0x02, 0xab, 0xe5, 0x3c, 0x5f, 0x4e, 0x9e, 0xd2, - 0xe0, 0x86, 0x32, 0xab, 0x8d, 0xfd, 0xcb, 0xc9, 0x90, 0xb2, 0xff, 0xbb, 0x86, 0xeb, 0xb6, 0x66, - 0x95, 0x4b, 0x56, 0xaf, 0x9c, 0x0e, 0xcd, 0x81, 0x5c, 0xcb, 0x3b, 0x62, 0xb5, 0x54, 0xab, 0x32, - 0xfd, 0x42, 0xa0, 0x6d, 0x0c, 0x1a, 0x2b, 0xb1, 0xd8, 0xba, 0x49, 0x7d, 0xeb, 0x51, 0xef, 0xaa, - 0x45, 0xd3, 0x99, 0x12, 0x8b, 0x97, 0xe4, 0x98, 0x7e, 0x25, 0x00, 0x46, 0xce, 0x1b, 0xcc, 0x50, - 0xe3, 0xd6, 0x05, 0x1d, 0x59, 0x41, 0x8f, 0x8f, 0x1f, 0x5d, 0x11, 0x24, 0xac, 0x80, 0x71, 0x77, - 0xd2, 0xd9, 0x60, 0x67, 0x2d, 0xfb, 0xcf, 0xbe, 0xf8, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xe9, 0xdb, - 0x6f, 0x39, 0x21, 0x04, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/echo_service.proto", fileDescriptor_2919b738e91bb561) +} + +var fileDescriptor_2919b738e91bb561 = []byte{ + // 480 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0xcf, 0x6a, 0x13, 0x41, + 0x18, 0xef, 0xec, 0xa6, 0x69, 0xf2, 0x05, 0xa5, 0x0c, 0x8a, 0x6b, 0x5a, 0x31, 0x2c, 0x1e, 0x42, + 0x0f, 0x3b, 0x24, 0x0a, 0x82, 0xc7, 0xd0, 0x4a, 0x11, 0xf4, 0xb0, 0xbd, 0xe5, 0x12, 0x26, 0x3b, + 0x1f, 0xdb, 0xc5, 0xdd, 0x99, 0x65, 0x67, 0x52, 0x1b, 0x96, 0x5c, 0xf4, 0x11, 0x3c, 0x78, 0xd3, + 0x37, 0x10, 0x2f, 0x3e, 0x89, 0xaf, 0xe0, 0x83, 0xc8, 0x4c, 0xb2, 0x01, 0x6d, 0x91, 0xd2, 0x4b, + 0x6f, 0xfb, 0xfd, 0xfb, 0xfd, 0x7e, 0xfb, 0xfb, 0xbe, 0x81, 0x17, 0x78, 0xc9, 0x8b, 0x32, 0x47, + 0xcd, 0x32, 0x69, 0xb0, 0x92, 0x3c, 0x67, 0x65, 0xa5, 0x8c, 0x62, 0x9b, 0x7c, 0x39, 0x67, 0x98, + 0x9c, 0xab, 0x99, 0xc6, 0xea, 0x22, 0x4b, 0x30, 0x72, 0x45, 0x3a, 0x4c, 0xab, 0x32, 0x89, 0x52, + 0x6e, 0xf0, 0x03, 0x5f, 0x46, 0x0d, 0x44, 0xd4, 0x40, 0x44, 0xdb, 0xe1, 0xfe, 0x61, 0xaa, 0x54, + 0x9a, 0x23, 0xe3, 0x65, 0xc6, 0xb8, 0x94, 0xca, 0x70, 0x93, 0x29, 0xa9, 0xd7, 0x38, 0xe1, 0x6b, + 0xe8, 0x9c, 0x14, 0x73, 0x14, 0x02, 0x05, 0x3d, 0x84, 0x4e, 0x59, 0xa9, 0xb4, 0x42, 0xad, 0x03, + 0x32, 0x20, 0x43, 0xff, 0x74, 0x27, 0xde, 0x66, 0xe8, 0x03, 0x68, 0x49, 0x65, 0x30, 0xf0, 0x06, + 0x64, 0xd8, 0x3d, 0xdd, 0x89, 0x5d, 0x34, 0x69, 0x43, 0xab, 0xe0, 0xd5, 0xfb, 0xf0, 0x8b, 0x07, + 0xf7, 0xce, 0x32, 0x4b, 0xf9, 0x16, 0xb5, 0xe6, 0x29, 0xd2, 0xfb, 0xe0, 0x65, 0xc2, 0xe1, 0x74, + 0x63, 0x2f, 0x13, 0x74, 0x1f, 0x7c, 0xb9, 0x28, 0xdc, 0xb8, 0x1f, 0xdb, 0x4f, 0x7a, 0x00, 0x9d, + 0x3c, 0x93, 0x38, 0xb3, 0x69, 0x7f, 0xc3, 0xb7, 0x67, 0x33, 0xef, 0x16, 0x85, 0xa5, 0xcb, 0xb9, + 0x4c, 0x83, 0x56, 0x43, 0x67, 0x23, 0xfa, 0x06, 0xda, 0xda, 0x70, 0xb3, 0xd0, 0xc1, 0xee, 0x80, + 0x0c, 0x7b, 0xe3, 0x71, 0x74, 0x53, 0x1f, 0xa2, 0xe6, 0x37, 0xe3, 0x0d, 0x02, 0xdd, 0x07, 0x0f, + 0x65, 0xd0, 0x76, 0xc4, 0x24, 0xf6, 0x50, 0xd2, 0x63, 0xf0, 0xa4, 0x0a, 0xf6, 0x6e, 0x8b, 0x6c, + 0x51, 0xa4, 0xb2, 0x96, 0x24, 0x4a, 0xe0, 0x64, 0x17, 0x7c, 0xbc, 0x34, 0xe3, 0x4f, 0xbb, 0xd0, + 0x3b, 0x49, 0xce, 0xd5, 0xd9, 0x7a, 0x7f, 0xf4, 0x87, 0x07, 0x2d, 0x1b, 0xd3, 0x97, 0x37, 0x67, + 0xf8, 0xcb, 0xd9, 0xfe, 0x6d, 0x07, 0xc3, 0x9f, 0xe4, 0xe3, 0xaf, 0xdf, 0x9f, 0xbd, 0xef, 0x24, + 0x7c, 0xc8, 0x2e, 0x46, 0xcd, 0x81, 0xb9, 0xf3, 0x62, 0x75, 0x26, 0x56, 0xd3, 0x27, 0xf4, 0xe0, + 0xda, 0x02, 0xab, 0xe5, 0xa2, 0x58, 0x4d, 0x9f, 0xd1, 0xf0, 0x3f, 0x65, 0x56, 0xdb, 0x15, 0xad, + 0xa6, 0x23, 0xca, 0xfe, 0xed, 0x1a, 0x6d, 0xda, 0x9a, 0x75, 0xaf, 0x58, 0xbd, 0x5e, 0x42, 0x64, + 0x8f, 0xe8, 0x5a, 0xde, 0x31, 0xab, 0xa5, 0x5a, 0x97, 0xe9, 0x57, 0x02, 0x1d, 0x6b, 0xd9, 0x44, + 0x89, 0xe5, 0x1d, 0xd8, 0x36, 0x70, 0xae, 0xf5, 0xaf, 0x9a, 0x36, 0x9b, 0x2b, 0xb1, 0x7c, 0x45, + 0x8e, 0xe8, 0x37, 0x02, 0x60, 0x05, 0x1e, 0x63, 0x8e, 0x06, 0xef, 0x40, 0xe2, 0x53, 0x27, 0xf1, + 0xf1, 0xd1, 0xa3, 0x2b, 0x12, 0x85, 0x93, 0x34, 0xe9, 0x4d, 0xbb, 0xdb, 0xd9, 0x79, 0xdb, 0xbd, + 0xfd, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x28, 0x11, 0xad, 0x90, 0x7b, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -336,7 +336,7 @@ func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -345,7 +345,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts .. func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -354,7 +354,7 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } @@ -402,7 +402,7 @@ func _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.EchoService/Echo", + FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).Echo(ctx, req.(*SimpleMessage)) @@ -420,7 +420,7 @@ func _EchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.EchoService/EchoBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).EchoBody(ctx, req.(*SimpleMessage)) @@ -438,7 +438,7 @@ func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.EchoService/EchoDelete", + FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).EchoDelete(ctx, req.(*SimpleMessage)) @@ -447,7 +447,7 @@ func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec f } var _EchoService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.EchoService", + ServiceName: "grpc.gateway.examples.internal.examplepb.EchoService", HandlerType: (*EchoServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -464,5 +464,5 @@ var _EchoService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/echo_service.proto", + Metadata: "examples/internal/proto/examplepb/echo_service.proto", } diff --git a/examples/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go similarity index 99% rename from examples/proto/examplepb/echo_service.pb.gw.go rename to examples/internal/proto/examplepb/echo_service.pb.gw.go index 001f9661119..eed383c2df6 100644 --- a/examples/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/echo_service.proto +// source: examples/internal/proto/examplepb/echo_service.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/echo_service.proto b/examples/internal/proto/examplepb/echo_service.proto similarity index 97% rename from examples/proto/examplepb/echo_service.proto rename to examples/internal/proto/examplepb/echo_service.proto index 710d0576e45..29eceaa3e6d 100644 --- a/examples/proto/examplepb/echo_service.proto +++ b/examples/internal/proto/examplepb/echo_service.proto @@ -5,7 +5,7 @@ option go_package = "examplepb"; // // Echo Service API consists of a single service which returns // a message. -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; diff --git a/examples/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json similarity index 100% rename from examples/proto/examplepb/echo_service.swagger.json rename to examples/internal/proto/examplepb/echo_service.swagger.json diff --git a/examples/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go similarity index 80% rename from examples/proto/examplepb/flow_combination.pb.go rename to examples/internal/proto/examplepb/flow_combination.pb.go index fb214da5738..baaf20c2376 100644 --- a/examples/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/flow_combination.proto +// source: examples/internal/proto/examplepb/flow_combination.proto package examplepb @@ -35,7 +35,7 @@ func (m *EmptyProto) Reset() { *m = EmptyProto{} } func (m *EmptyProto) String() string { return proto.CompactTextString(m) } func (*EmptyProto) ProtoMessage() {} func (*EmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_53e866bab3f236bf, []int{0} + return fileDescriptor_005d0d82a8c98d3c, []int{0} } func (m *EmptyProto) XXX_Unmarshal(b []byte) error { @@ -69,7 +69,7 @@ func (m *NonEmptyProto) Reset() { *m = NonEmptyProto{} } func (m *NonEmptyProto) String() string { return proto.CompactTextString(m) } func (*NonEmptyProto) ProtoMessage() {} func (*NonEmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_53e866bab3f236bf, []int{1} + return fileDescriptor_005d0d82a8c98d3c, []int{1} } func (m *NonEmptyProto) XXX_Unmarshal(b []byte) error { @@ -122,7 +122,7 @@ func (m *UnaryProto) Reset() { *m = UnaryProto{} } func (m *UnaryProto) String() string { return proto.CompactTextString(m) } func (*UnaryProto) ProtoMessage() {} func (*UnaryProto) Descriptor() ([]byte, []int) { - return fileDescriptor_53e866bab3f236bf, []int{2} + return fileDescriptor_005d0d82a8c98d3c, []int{2} } func (m *UnaryProto) XXX_Unmarshal(b []byte) error { @@ -163,7 +163,7 @@ func (m *NestedProto) Reset() { *m = NestedProto{} } func (m *NestedProto) String() string { return proto.CompactTextString(m) } func (*NestedProto) ProtoMessage() {} func (*NestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_53e866bab3f236bf, []int{3} + return fileDescriptor_005d0d82a8c98d3c, []int{3} } func (m *NestedProto) XXX_Unmarshal(b []byte) error { @@ -216,7 +216,7 @@ func (m *SingleNestedProto) Reset() { *m = SingleNestedProto{} } func (m *SingleNestedProto) String() string { return proto.CompactTextString(m) } func (*SingleNestedProto) ProtoMessage() {} func (*SingleNestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_53e866bab3f236bf, []int{4} + return fileDescriptor_005d0d82a8c98d3c, []int{4} } func (m *SingleNestedProto) XXX_Unmarshal(b []byte) error { @@ -245,60 +245,62 @@ func (m *SingleNestedProto) GetA() *UnaryProto { } func init() { - proto.RegisterType((*EmptyProto)(nil), "grpc.gateway.examples.examplepb.EmptyProto") - proto.RegisterType((*NonEmptyProto)(nil), "grpc.gateway.examples.examplepb.NonEmptyProto") - proto.RegisterType((*UnaryProto)(nil), "grpc.gateway.examples.examplepb.UnaryProto") - proto.RegisterType((*NestedProto)(nil), "grpc.gateway.examples.examplepb.NestedProto") - proto.RegisterType((*SingleNestedProto)(nil), "grpc.gateway.examples.examplepb.SingleNestedProto") + proto.RegisterType((*EmptyProto)(nil), "grpc.gateway.examples.internal.examplepb.EmptyProto") + proto.RegisterType((*NonEmptyProto)(nil), "grpc.gateway.examples.internal.examplepb.NonEmptyProto") + proto.RegisterType((*UnaryProto)(nil), "grpc.gateway.examples.internal.examplepb.UnaryProto") + proto.RegisterType((*NestedProto)(nil), "grpc.gateway.examples.internal.examplepb.NestedProto") + proto.RegisterType((*SingleNestedProto)(nil), "grpc.gateway.examples.internal.examplepb.SingleNestedProto") } func init() { - proto.RegisterFile("examples/proto/examplepb/flow_combination.proto", fileDescriptor_53e866bab3f236bf) -} - -var fileDescriptor_53e866bab3f236bf = []byte{ - // 655 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x96, 0xbf, 0x8f, 0x12, 0x41, - 0x14, 0xc7, 0xf3, 0xb8, 0xc4, 0xe4, 0x86, 0xfb, 0xc1, 0x2d, 0x06, 0x81, 0xc3, 0xe3, 0x6e, 0xbc, - 0x44, 0xe2, 0x8f, 0x5d, 0x82, 0xd5, 0x51, 0x9e, 0xd1, 0x92, 0x5c, 0xb8, 0xd8, 0x6c, 0x63, 0x66, - 0x87, 0x15, 0x48, 0x60, 0x67, 0x6e, 0x77, 0x0d, 0x5e, 0x08, 0x31, 0xb1, 0xb1, 0xb4, 0xf0, 0x0f, - 0xb0, 0xb4, 0xf2, 0x1f, 0xb0, 0xb3, 0xb2, 0x31, 0xb1, 0x30, 0xb1, 0xb3, 0xb3, 0xf3, 0x9f, 0x30, - 0xfb, 0xf6, 0xc7, 0xb0, 0x0a, 0x6e, 0x30, 0x62, 0xb7, 0x6f, 0xe6, 0xbd, 0x37, 0x9f, 0xf9, 0xce, - 0xf7, 0x11, 0x88, 0x61, 0x3f, 0x63, 0x63, 0x39, 0xb2, 0x3d, 0x43, 0xba, 0xc2, 0x17, 0x71, 0x28, - 0x2d, 0xe3, 0xc9, 0x48, 0x4c, 0x1e, 0x73, 0x31, 0xb6, 0x86, 0x0e, 0xf3, 0x87, 0xc2, 0xd1, 0x31, - 0x41, 0xab, 0xf7, 0x5d, 0xc9, 0xf5, 0x3e, 0xf3, 0xed, 0x09, 0xbb, 0xd4, 0xe3, 0x6a, 0x3d, 0xa9, - 0xab, 0xd6, 0xfa, 0x42, 0xf4, 0x47, 0xb6, 0xc1, 0xe4, 0xd0, 0x60, 0x8e, 0x23, 0x7c, 0xac, 0xf6, - 0xc2, 0x72, 0xba, 0x45, 0xc8, 0x83, 0xb1, 0xf4, 0x2f, 0xcf, 0x30, 0x3a, 0x21, 0xdb, 0x1d, 0xe1, - 0xa8, 0x05, 0x6d, 0x8b, 0x00, 0x2b, 0xc3, 0x21, 0x34, 0x36, 0xbb, 0xc0, 0x82, 0xc8, 0x2a, 0xe7, - 0xc2, 0xc8, 0x0a, 0x22, 0x5e, 0xde, 0x08, 0x23, 0x4e, 0x0f, 0x08, 0x79, 0xe4, 0x30, 0x37, 0xaa, - 0x2b, 0x90, 0x0d, 0xcf, 0x77, 0xa3, 0xca, 0xe0, 0x93, 0xf6, 0x48, 0xbe, 0x63, 0x7b, 0xbe, 0xdd, - 0x0b, 0x13, 0x4e, 0xe2, 0xc6, 0xf9, 0xd6, 0x6d, 0x3d, 0xe3, 0x0a, 0xba, 0x6a, 0x9c, 0x45, 0xd1, - 0x21, 0x7b, 0xe7, 0x43, 0xa7, 0x3f, 0xb2, 0xff, 0xcd, 0x59, 0xad, 0x4f, 0xbb, 0x64, 0xf7, 0xe1, - 0x48, 0x4c, 0xee, 0x2b, 0xdd, 0xb5, 0xe7, 0x24, 0xdf, 0x95, 0x1c, 0x45, 0xea, 0x4a, 0xae, 0x65, - 0xb7, 0x54, 0x7a, 0x56, 0x57, 0x49, 0xa6, 0xa5, 0x17, 0x5f, 0xbe, 0xbf, 0xce, 0x15, 0xe8, 0x8e, - 0xe1, 0x4a, 0x6e, 0xd8, 0xc1, 0x46, 0xf0, 0xa5, 0xbd, 0x04, 0xb2, 0x13, 0x13, 0x9c, 0xfb, 0xae, - 0xcd, 0xc6, 0x6b, 0x84, 0xa8, 0x20, 0x44, 0x91, 0xee, 0xcd, 0x41, 0x78, 0x78, 0x68, 0x13, 0x90, - 0x24, 0x24, 0xf8, 0x0f, 0x72, 0x28, 0x92, 0xf0, 0x7c, 0xa5, 0x48, 0x03, 0xb4, 0x57, 0x40, 0xf6, - 0xe6, 0x48, 0xd6, 0x2e, 0x4b, 0x0d, 0x61, 0x4a, 0xf4, 0x6a, 0x1a, 0x26, 0x0c, 0x1a, 0xd0, 0x04, - 0xed, 0x5d, 0x8e, 0x90, 0xae, 0xe4, 0xa7, 0xa2, 0x87, 0xba, 0xe8, 0x99, 0xdd, 0x53, 0x93, 0xb7, - 0x1a, 0xcd, 0x07, 0x40, 0x9c, 0xf7, 0x40, 0xb7, 0xf1, 0x99, 0x2c, 0xd1, 0x43, 0x61, 0xda, 0x70, - 0xcb, 0xdc, 0xa7, 0x15, 0x5c, 0x93, 0xcc, 0x1f, 0x18, 0x53, 0x36, 0x33, 0xa6, 0xd6, 0xcc, 0x98, - 0xf2, 0x59, 0xb0, 0x68, 0xc6, 0xe6, 0xba, 0x78, 0x6a, 0xbb, 0x58, 0x61, 0xd6, 0x69, 0x55, 0xb5, - 0x48, 0xd5, 0x60, 0x3f, 0x6e, 0x96, 0x69, 0x51, 0x25, 0x24, 0x75, 0xc1, 0xce, 0x11, 0xad, 0x2d, - 0x28, 0x4d, 0xa5, 0x54, 0xe8, 0xb5, 0x34, 0x4c, 0xb2, 0xab, 0xbd, 0x01, 0x52, 0xea, 0x4a, 0x7e, - 0xc6, 0xfc, 0xc1, 0xfc, 0x08, 0x07, 0xda, 0xb5, 0x32, 0xb5, 0xf8, 0x6d, 0xe8, 0x57, 0xd3, 0xef, - 0x18, 0xe5, 0x3b, 0x88, 0xf8, 0x03, 0xb8, 0xbb, 0x0e, 0xf6, 0x32, 0xa6, 0x4c, 0xf7, 0x7c, 0x17, - 0x2f, 0xaf, 0x7d, 0x03, 0x52, 0x88, 0x08, 0x15, 0xdb, 0x9d, 0xec, 0x77, 0xfd, 0x5b, 0x2a, 0x07, - 0xa9, 0x06, 0xf4, 0x70, 0x29, 0xd5, 0xdc, 0xb3, 0x64, 0xc0, 0x27, 0x8f, 0xb3, 0x64, 0xbf, 0x0d, - 0x5c, 0xfb, 0x98, 0x23, 0xdb, 0x91, 0x63, 0xa3, 0xf9, 0x59, 0xab, 0x69, 0xbf, 0x86, 0xa6, 0xfd, - 0x0c, 0xb4, 0xa0, 0x6c, 0x13, 0x0e, 0x50, 0xe0, 0xdb, 0xf9, 0x0b, 0xa5, 0x7c, 0x1b, 0xa6, 0x98, - 0xf1, 0x4f, 0x52, 0xe8, 0xa0, 0x68, 0x91, 0xd2, 0xeb, 0x4b, 0xdc, 0x1b, 0x37, 0xe6, 0xe6, 0x3e, - 0x2d, 0xfd, 0x6a, 0x60, 0xb5, 0x79, 0x4c, 0xeb, 0x4b, 0x3d, 0xac, 0xb2, 0x6a, 0xd1, 0x90, 0x2c, - 0x4c, 0x68, 0x82, 0xf6, 0x16, 0x48, 0x65, 0x81, 0x97, 0x23, 0x55, 0xd7, 0x6e, 0xe7, 0x9b, 0x28, - 0xec, 0x51, 0x74, 0x95, 0x45, 0x2f, 0x9e, 0x90, 0xfe, 0x00, 0x52, 0x4c, 0x79, 0x3a, 0x62, 0x5c, - 0xa3, 0xad, 0x27, 0x48, 0x77, 0x41, 0x6f, 0xfc, 0xd1, 0xd6, 0x4a, 0xec, 0xec, 0x7b, 0x24, 0xaf, - 0xb6, 0x3c, 0xa5, 0x0d, 0xbc, 0x09, 0xa7, 0x79, 0x73, 0x33, 0x41, 0xb2, 0xae, 0xe0, 0x3f, 0xa0, - 0x7b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x36, 0xcd, 0x7d, 0x1f, 0x73, 0x09, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/flow_combination.proto", fileDescriptor_005d0d82a8c98d3c) +} + +var fileDescriptor_005d0d82a8c98d3c = []byte{ + // 673 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x96, 0x4f, 0x8b, 0x13, 0x3f, + 0x18, 0xc7, 0x49, 0x17, 0x7e, 0xb0, 0xe9, 0xee, 0xfe, 0xda, 0xa9, 0xd4, 0xb6, 0x5b, 0xf7, 0x4f, + 0x5c, 0xb0, 0x08, 0x4e, 0xca, 0xaa, 0xa8, 0xf5, 0x56, 0xd1, 0xe3, 0xb2, 0x74, 0x11, 0x61, 0x2e, + 0x92, 0x49, 0xc7, 0xb6, 0x30, 0x9d, 0x64, 0x67, 0x22, 0x75, 0x29, 0x3d, 0xe8, 0x3b, 0x10, 0x4f, + 0x1e, 0x7d, 0x09, 0x1e, 0xf5, 0x22, 0xbe, 0x02, 0x0f, 0x82, 0xe0, 0xdd, 0xbb, 0xaf, 0x40, 0x90, + 0xc9, 0x64, 0x26, 0x1d, 0x6d, 0x6d, 0xb7, 0x4a, 0x7b, 0x6b, 0x92, 0xe7, 0x79, 0xe6, 0x93, 0xef, + 0xf3, 0x7d, 0x42, 0xe1, 0x6d, 0xe7, 0x19, 0xe9, 0x73, 0xd7, 0x09, 0x70, 0xcf, 0x13, 0x8e, 0xef, + 0x11, 0x17, 0x73, 0x9f, 0x09, 0x86, 0xd5, 0x3e, 0xb7, 0xf1, 0x13, 0x97, 0x0d, 0x1e, 0x53, 0xd6, + 0xb7, 0x7b, 0x1e, 0x11, 0x3d, 0xe6, 0x99, 0x32, 0xc0, 0xa8, 0x75, 0x7c, 0x4e, 0xcd, 0x0e, 0x11, + 0xce, 0x80, 0x9c, 0x99, 0x71, 0x19, 0x33, 0x2e, 0x63, 0x26, 0x05, 0x2a, 0xd5, 0x0e, 0x63, 0x1d, + 0xd7, 0xc1, 0x84, 0xf7, 0x30, 0xf1, 0x3c, 0x26, 0x64, 0x99, 0x20, 0xaa, 0x83, 0x36, 0x20, 0xbc, + 0xdf, 0xe7, 0xe2, 0xec, 0x58, 0xae, 0xee, 0xc0, 0xcd, 0x23, 0xe6, 0xe9, 0x0d, 0x63, 0x03, 0x02, + 0x52, 0x02, 0x7b, 0xa0, 0xb6, 0xde, 0x02, 0x24, 0x5c, 0xd9, 0xa5, 0x4c, 0xb4, 0xb2, 0xc3, 0x15, + 0x2d, 0xad, 0x45, 0x2b, 0x8a, 0x76, 0x20, 0x7c, 0xe8, 0x11, 0x5f, 0xe5, 0xe5, 0xe0, 0x5a, 0x20, + 0x7c, 0x95, 0x19, 0xfe, 0x44, 0x7d, 0x98, 0x3d, 0x72, 0x02, 0xe1, 0xb4, 0xa3, 0x80, 0x66, 0x5c, + 0x38, 0x7b, 0x78, 0xc3, 0x9c, 0xf7, 0x2e, 0xa6, 0xfe, 0xc2, 0x2c, 0x9c, 0x47, 0x30, 0x7f, 0xd2, + 0xf3, 0x3a, 0xae, 0xf3, 0x8f, 0x3f, 0x7a, 0xf8, 0x3c, 0x0f, 0xff, 0x7f, 0xe0, 0xb2, 0xc1, 0x3d, + 0xdd, 0x12, 0xe3, 0x25, 0x80, 0xd9, 0x16, 0xa7, 0x52, 0xb7, 0x16, 0xa7, 0xc6, 0x39, 0x8a, 0x6b, + 0xad, 0x2b, 0x0b, 0x65, 0xa1, 0xe2, 0x8b, 0xcf, 0xdf, 0x5e, 0x65, 0x72, 0x68, 0x0b, 0xfb, 0x9c, + 0x62, 0x27, 0x3c, 0x08, 0x7f, 0x19, 0xaf, 0x01, 0xdc, 0x8a, 0x99, 0x4e, 0x84, 0xef, 0x90, 0xfe, + 0x52, 0xb1, 0xca, 0x12, 0xab, 0x80, 0xf2, 0x63, 0x58, 0x81, 0xc4, 0xa8, 0x03, 0xc9, 0x16, 0x31, + 0xad, 0x44, 0x32, 0xcd, 0x16, 0x11, 0x69, 0xd5, 0x6a, 0xc0, 0x78, 0x03, 0x60, 0x7e, 0x8c, 0x6d, + 0x05, 0xd2, 0x55, 0x25, 0x5e, 0x11, 0x5d, 0x48, 0xe3, 0x45, 0x8b, 0x1a, 0xa8, 0x03, 0xe3, 0x43, + 0x06, 0xc2, 0x16, 0xa7, 0x4d, 0xd6, 0x96, 0xda, 0xdd, 0x9a, 0xff, 0x33, 0xa9, 0xe9, 0x5e, 0x90, + 0xef, 0x23, 0x90, 0x80, 0xef, 0x01, 0xda, 0x94, 0xcd, 0xb5, 0x59, 0x5b, 0x8a, 0xd7, 0x00, 0x57, + 0xad, 0x6d, 0x54, 0x96, 0x7b, 0x9c, 0x88, 0x2e, 0x1e, 0x92, 0x11, 0x1e, 0xda, 0x23, 0x3c, 0xa4, + 0xa3, 0x70, 0xd3, 0x8a, 0x4d, 0x7a, 0xfa, 0xd4, 0xf1, 0x65, 0x86, 0xb5, 0x8b, 0x2a, 0xba, 0x44, + 0x2a, 0x47, 0xd6, 0xa3, 0x56, 0x09, 0x15, 0x74, 0x40, 0x92, 0x17, 0x9e, 0xec, 0xa3, 0xea, 0x84, + 0xd4, 0x54, 0x48, 0x19, 0x5d, 0x4c, 0xc3, 0x24, 0xa7, 0xc6, 0x5b, 0x00, 0x8b, 0x2d, 0x4e, 0x8f, + 0x89, 0xe8, 0x8e, 0x3f, 0x13, 0xa1, 0x9a, 0x77, 0xe7, 0x17, 0xe5, 0xb7, 0x17, 0x66, 0x41, 0x45, + 0x0f, 0xa4, 0xa0, 0x3b, 0xea, 0x46, 0x21, 0xee, 0x35, 0x4f, 0x16, 0xc5, 0x43, 0x62, 0x06, 0xc2, + 0x97, 0x72, 0x18, 0xdf, 0x01, 0xcc, 0x29, 0x66, 0x4d, 0x7b, 0xf3, 0x1c, 0xbd, 0xff, 0x6b, 0x4e, + 0x4f, 0x72, 0x76, 0xd1, 0xde, 0x54, 0xce, 0xb1, 0xd6, 0xcd, 0xb8, 0x4e, 0xd2, 0xc0, 0x29, 0xe7, + 0x0d, 0x40, 0x8d, 0xaf, 0x19, 0xb8, 0xa9, 0x7c, 0xae, 0xe6, 0x70, 0xc9, 0x56, 0xff, 0x12, 0x59, + 0xfd, 0x13, 0x40, 0x39, 0x6d, 0xb6, 0x68, 0x10, 0x43, 0xb7, 0x8f, 0x5f, 0x31, 0xe5, 0xf6, 0x28, + 0xc4, 0x8a, 0x9f, 0xbf, 0xc8, 0x77, 0x6a, 0x13, 0xa1, 0x4b, 0x53, 0x3c, 0x1f, 0x17, 0xa6, 0xd6, + 0x36, 0x2a, 0xfe, 0x6a, 0x7b, 0x7d, 0x78, 0x80, 0x76, 0xa7, 0x3a, 0x5f, 0x47, 0x55, 0xd5, 0x68, + 0x4d, 0x0c, 0xa8, 0x03, 0xe3, 0x1d, 0x80, 0xe5, 0x09, 0x13, 0xa0, 0x74, 0x5e, 0xc1, 0x10, 0x5c, + 0x91, 0x52, 0xef, 0xab, 0xcb, 0x4d, 0x72, 0x45, 0xc2, 0xfe, 0x03, 0xc0, 0x42, 0x6a, 0x12, 0x14, + 0xf5, 0x52, 0x87, 0x61, 0x20, 0x79, 0x4f, 0xd1, 0xe5, 0x3f, 0x0e, 0x83, 0x6e, 0xc8, 0xec, 0x9b, + 0x25, 0x9d, 0x9d, 0x1e, 0xd2, 0x00, 0xb4, 0x0e, 0x9a, 0x59, 0x6b, 0x3d, 0x41, 0xb2, 0xff, 0x93, + 0x7f, 0xe4, 0xae, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x96, 0x5c, 0xd1, 0x4c, 0x0a, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -335,7 +337,7 @@ func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) if err != nil { return nil, err } @@ -343,7 +345,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -375,7 +377,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -409,7 +411,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -441,7 +443,7 @@ func (x *flowCombinationStreamEmptyStreamClient) Recv() (*EmptyProto, error) { func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) if err != nil { return nil, err } @@ -450,7 +452,7 @@ func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProt func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -459,7 +461,7 @@ func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in * func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -467,7 +469,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -499,7 +501,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -531,7 +533,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -625,7 +627,7 @@ func _FlowCombination_RpcEmptyRpc_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.FlowCombination/RpcEmptyRpc", + FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcEmptyRpc(ctx, req.(*EmptyProto)) @@ -716,7 +718,7 @@ func _FlowCombination_RpcBodyRpc_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.FlowCombination/RpcBodyRpc", + FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcBodyRpc(ctx, req.(*NonEmptyProto)) @@ -734,7 +736,7 @@ func _FlowCombination_RpcPathSingleNestedRpc_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathSingleNestedRpc", + FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcPathSingleNestedRpc(ctx, req.(*SingleNestedProto)) @@ -752,7 +754,7 @@ func _FlowCombination_RpcPathNestedRpc_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.FlowCombination/RpcPathNestedRpc", + FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcPathNestedRpc(ctx, req.(*NestedProto)) @@ -824,7 +826,7 @@ func (x *flowCombinationRpcPathNestedStreamServer) Send(m *EmptyProto) error { } var _FlowCombination_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.FlowCombination", + ServiceName: "grpc.gateway.examples.internal.examplepb.FlowCombination", HandlerType: (*FlowCombinationServer)(nil), Methods: []grpc.MethodDesc{ { @@ -877,5 +879,5 @@ var _FlowCombination_serviceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "examples/proto/examplepb/flow_combination.proto", + Metadata: "examples/internal/proto/examplepb/flow_combination.proto", } diff --git a/examples/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go similarity index 99% rename from examples/proto/examplepb/flow_combination.pb.gw.go rename to examples/internal/proto/examplepb/flow_combination.pb.gw.go index 14599e7a759..ffad64a1eed 100644 --- a/examples/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/flow_combination.proto +// source: examples/internal/proto/examplepb/flow_combination.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/flow_combination.proto b/examples/internal/proto/examplepb/flow_combination.proto similarity index 98% rename from examples/proto/examplepb/flow_combination.proto rename to examples/internal/proto/examplepb/flow_combination.proto index 60096081ee1..aabde901153 100644 --- a/examples/proto/examplepb/flow_combination.proto +++ b/examples/internal/proto/examplepb/flow_combination.proto @@ -1,6 +1,6 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; diff --git a/examples/proto/examplepb/generated_input.proto b/examples/internal/proto/examplepb/generated_input.proto similarity index 75% rename from examples/proto/examplepb/generated_input.proto rename to examples/internal/proto/examplepb/generated_input.proto index 8a1b7af3498..e0e26d90c0a 100644 --- a/examples/proto/examplepb/generated_input.proto +++ b/examples/internal/proto/examplepb/generated_input.proto @@ -1,11 +1,10 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; -import "examples/proto/examplepb/a_bit_of_everything.proto"; -import "examples/proto/sub/message.proto"; +import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; // This file is run through a genrule. diff --git a/examples/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go similarity index 80% rename from examples/proto/examplepb/non_standard_names.pb.go rename to examples/internal/proto/examplepb/non_standard_names.pb.go index 2858e1e82d1..962da2cdfe3 100644 --- a/examples/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/non_standard_names.proto +// source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb @@ -46,7 +46,7 @@ func (m *NonStandardMessage) Reset() { *m = NonStandardMessage{} } func (m *NonStandardMessage) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage) ProtoMessage() {} func (*NonStandardMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{0} + return fileDescriptor_a1fc3d96d9306f6b, []int{0} } func (m *NonStandardMessage) XXX_Unmarshal(b []byte) error { @@ -134,7 +134,7 @@ func (m *NonStandardMessage_Thing) Reset() { *m = NonStandardMessage_Thi func (m *NonStandardMessage_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing) ProtoMessage() {} func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{0, 0} + return fileDescriptor_a1fc3d96d9306f6b, []int{0, 0} } func (m *NonStandardMessage_Thing) XXX_Unmarshal(b []byte) error { @@ -173,7 +173,7 @@ func (m *NonStandardMessage_Thing_SubThing) Reset() { *m = NonStandardMe func (m *NonStandardMessage_Thing_SubThing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{0, 0, 0} + return fileDescriptor_a1fc3d96d9306f6b, []int{0, 0, 0} } func (m *NonStandardMessage_Thing_SubThing) XXX_Unmarshal(b []byte) error { @@ -213,7 +213,7 @@ func (m *NonStandardUpdateRequest) Reset() { *m = NonStandardUpdateReque func (m *NonStandardUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardUpdateRequest) ProtoMessage() {} func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{1} + return fileDescriptor_a1fc3d96d9306f6b, []int{1} } func (m *NonStandardUpdateRequest) XXX_Unmarshal(b []byte) error { @@ -268,7 +268,7 @@ func (m *NonStandardMessageWithJSONNames) Reset() { *m = NonStandardMess func (m *NonStandardMessageWithJSONNames) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames) ProtoMessage() {} func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{2} + return fileDescriptor_a1fc3d96d9306f6b, []int{2} } func (m *NonStandardMessageWithJSONNames) XXX_Unmarshal(b []byte) error { @@ -356,7 +356,7 @@ func (m *NonStandardMessageWithJSONNames_Thing) Reset() { *m = NonStanda func (m *NonStandardMessageWithJSONNames_Thing) String() string { return proto.CompactTextString(m) } func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{2, 0} + return fileDescriptor_a1fc3d96d9306f6b, []int{2, 0} } func (m *NonStandardMessageWithJSONNames_Thing) XXX_Unmarshal(b []byte) error { @@ -399,7 +399,7 @@ func (m *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { } func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{2, 0, 0} + return fileDescriptor_a1fc3d96d9306f6b, []int{2, 0, 0} } func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Unmarshal(b []byte) error { @@ -439,7 +439,7 @@ func (m *NonStandardWithJSONNamesUpdateRequest) Reset() { *m = NonStanda func (m *NonStandardWithJSONNamesUpdateRequest) String() string { return proto.CompactTextString(m) } func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_fa36ad8828f19375, []int{3} + return fileDescriptor_a1fc3d96d9306f6b, []int{3} } func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Unmarshal(b []byte) error { @@ -475,62 +475,62 @@ func (m *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.Fiel } func init() { - proto.RegisterType((*NonStandardMessage)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage") - proto.RegisterType((*NonStandardMessage_Thing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage.Thing") - proto.RegisterType((*NonStandardMessage_Thing_SubThing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessage.Thing.SubThing") - proto.RegisterType((*NonStandardUpdateRequest)(nil), "grpc.gateway.examples.examplepb.NonStandardUpdateRequest") - proto.RegisterType((*NonStandardMessageWithJSONNames)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames") - proto.RegisterType((*NonStandardMessageWithJSONNames_Thing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames.Thing") - proto.RegisterType((*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), "grpc.gateway.examples.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing") - proto.RegisterType((*NonStandardWithJSONNamesUpdateRequest)(nil), "grpc.gateway.examples.examplepb.NonStandardWithJSONNamesUpdateRequest") + proto.RegisterType((*NonStandardMessage)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage") + proto.RegisterType((*NonStandardMessage_Thing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing") + proto.RegisterType((*NonStandardMessage_Thing_SubThing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing") + proto.RegisterType((*NonStandardUpdateRequest)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest") + proto.RegisterType((*NonStandardMessageWithJSONNames)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames") + proto.RegisterType((*NonStandardMessageWithJSONNames_Thing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing") + proto.RegisterType((*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing") + proto.RegisterType((*NonStandardWithJSONNamesUpdateRequest)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest") } func init() { - proto.RegisterFile("examples/proto/examplepb/non_standard_names.proto", fileDescriptor_fa36ad8828f19375) -} - -var fileDescriptor_fa36ad8828f19375 = []byte{ - // 626 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x41, 0x6f, 0xd3, 0x3c, - 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0x7a, 0x5f, 0xe4, 0x21, 0x14, 0xc2, 0xa4, 0x56, 0x95, - 0xd0, 0x7a, 0x21, 0xd1, 0xb2, 0x03, 0x02, 0x84, 0x04, 0x15, 0xac, 0x1a, 0x62, 0xad, 0x94, 0x74, - 0x20, 0x21, 0x41, 0xe4, 0x2c, 0x5e, 0x1a, 0x9a, 0xda, 0xa1, 0x76, 0x3a, 0x7a, 0xe5, 0x13, 0x4c, - 0xe2, 0x0e, 0xdc, 0xf8, 0x0e, 0xf0, 0x31, 0xb8, 0x73, 0xe2, 0x83, 0xa0, 0xd8, 0x69, 0xa9, 0x55, - 0xa1, 0xb1, 0x6e, 0xa7, 0xfa, 0x79, 0x6c, 0xff, 0x9f, 0xe7, 0x6f, 0xff, 0xe2, 0x82, 0x5d, 0xfc, - 0x1e, 0x8d, 0xd3, 0x04, 0x33, 0x3b, 0x9d, 0x50, 0x4e, 0xed, 0x22, 0x4c, 0x03, 0x9b, 0x50, 0xe2, - 0x33, 0x8e, 0x48, 0x88, 0x26, 0xa1, 0x4f, 0xd0, 0x18, 0x33, 0x4b, 0x2c, 0x81, 0x8d, 0x68, 0x92, - 0x1e, 0x5b, 0x11, 0xe2, 0xf8, 0x14, 0xcd, 0xac, 0xf9, 0x7e, 0x6b, 0xb1, 0xd3, 0xdc, 0x8e, 0x28, - 0x8d, 0x12, 0x6c, 0xa3, 0x34, 0xb6, 0x11, 0x21, 0x94, 0x23, 0x1e, 0x53, 0x52, 0x6c, 0x37, 0x9b, - 0xc5, 0xac, 0x88, 0x82, 0xec, 0xc4, 0x3e, 0x89, 0x71, 0x12, 0xfa, 0x63, 0xc4, 0x46, 0x72, 0x45, - 0xeb, 0x4c, 0x07, 0xb0, 0x47, 0x89, 0x57, 0x14, 0x3f, 0xc4, 0x8c, 0xa1, 0x08, 0xc3, 0xff, 0x40, - 0x29, 0x0e, 0x0d, 0xad, 0xa9, 0xb5, 0x6b, 0x6e, 0x29, 0x0e, 0xe1, 0x35, 0xa0, 0xf7, 0xb2, 0xb1, - 0x51, 0x6a, 0x6a, 0x6d, 0xdd, 0xcd, 0x87, 0xf0, 0x26, 0xa8, 0x26, 0x31, 0xc1, 0x3e, 0xc9, 0xc6, - 0x86, 0x2e, 0xd2, 0x9b, 0x79, 0x9c, 0x4f, 0x6d, 0x83, 0x5a, 0x82, 0x48, 0x74, 0x10, 0x62, 0xc2, - 0x8d, 0x0d, 0xa1, 0xf1, 0x27, 0x01, 0x6f, 0x80, 0x8a, 0x37, 0x78, 0x3c, 0x38, 0xf2, 0x8c, 0xb2, - 0x98, 0x2a, 0x22, 0xb8, 0x05, 0xca, 0x98, 0xf8, 0xdd, 0x8e, 0x51, 0x11, 0x6a, 0x1b, 0x98, 0x74, - 0x3b, 0x79, 0x1f, 0x84, 0x1a, 0x9b, 0xb2, 0x0f, 0x42, 0x61, 0x1f, 0x94, 0xf9, 0x30, 0x26, 0x91, - 0x51, 0x6d, 0x6a, 0xed, 0xba, 0x73, 0xcf, 0x3a, 0xe7, 0x7c, 0xac, 0x55, 0x6f, 0xd6, 0x20, 0x17, - 0x70, 0xa5, 0x8e, 0x79, 0xa6, 0x81, 0xb2, 0x48, 0xc0, 0x37, 0xa0, 0xca, 0xb2, 0x40, 0x8c, 0x85, - 0xf1, 0xba, 0xd3, 0x59, 0x5b, 0xdd, 0xf2, 0x0a, 0x25, 0x77, 0xa1, 0x69, 0xee, 0x80, 0xea, 0x3c, - 0x0b, 0x6f, 0x81, 0x1a, 0xcb, 0x02, 0x7f, 0x8a, 0x92, 0x0c, 0x17, 0xa7, 0x9c, 0x2f, 0x7c, 0x91, - 0xc7, 0xad, 0x2f, 0x1a, 0x30, 0x96, 0x84, 0x8f, 0xd2, 0x10, 0x71, 0xec, 0xe2, 0x77, 0x19, 0x66, - 0x1c, 0x76, 0xc1, 0x46, 0x40, 0xc3, 0x59, 0xd1, 0xe1, 0xde, 0x1a, 0x1d, 0xba, 0x42, 0x00, 0x3e, - 0x00, 0xf5, 0x4c, 0x28, 0x0b, 0x1a, 0xc4, 0xcd, 0xd6, 0x1d, 0xd3, 0x92, 0xc0, 0x58, 0x73, 0x60, - 0xac, 0xfd, 0x1c, 0x98, 0x43, 0xc4, 0x46, 0x2e, 0x90, 0xcb, 0xf3, 0x71, 0xeb, 0xbb, 0x0e, 0x1a, - 0xab, 0xca, 0x2f, 0x63, 0x3e, 0x7c, 0xe6, 0xf5, 0x7b, 0xbd, 0x1c, 0x60, 0x15, 0xa1, 0x83, 0x27, - 0xff, 0x86, 0xd0, 0xf3, 0xf5, 0x10, 0x62, 0x1c, 0xf1, 0x8c, 0xc1, 0xeb, 0x2a, 0x42, 0xe5, 0xa7, - 0x79, 0x00, 0xff, 0x5f, 0x62, 0x48, 0x9f, 0x61, 0x06, 0x5f, 0xab, 0x10, 0xed, 0xaf, 0x71, 0x88, - 0x8a, 0xd5, 0x82, 0xa8, 0x8a, 0xf8, 0x99, 0x99, 0x9f, 0x16, 0x48, 0x8d, 0x56, 0x90, 0xea, 0x5f, - 0x4d, 0xad, 0x25, 0xbe, 0xe6, 0x23, 0xb3, 0xbd, 0xc4, 0xd7, 0xf6, 0x2a, 0x5f, 0x22, 0x21, 0x01, - 0xfb, 0xa6, 0x81, 0xdb, 0x4b, 0x65, 0x14, 0x7d, 0x95, 0xb6, 0x81, 0x42, 0xdb, 0xa3, 0xcb, 0x36, - 0x7f, 0x05, 0xe8, 0x39, 0x9f, 0xd5, 0x07, 0xcb, 0xc3, 0x93, 0x69, 0x7c, 0x8c, 0xe1, 0x57, 0x0d, - 0x54, 0x64, 0xef, 0xf0, 0x42, 0x8f, 0x82, 0xe2, 0xd7, 0x5c, 0xe7, 0x7b, 0x6a, 0xdd, 0xf9, 0xf0, - 0xe3, 0xd7, 0xc7, 0xd2, 0x8e, 0xd3, 0xb0, 0xa7, 0xbb, 0xf3, 0x37, 0x5d, 0x79, 0xd1, 0x6d, 0xd9, - 0xfe, 0x7d, 0xe9, 0xfe, 0xa7, 0x06, 0xb6, 0x64, 0x55, 0xf5, 0x7b, 0xb9, 0x10, 0x86, 0x7f, 0xbf, - 0x33, 0xf3, 0xd2, 0xb7, 0xd4, 0x7a, 0x28, 0x0c, 0xdd, 0x75, 0xec, 0x73, 0x0c, 0xf9, 0xa7, 0x31, - 0x1f, 0xfa, 0x6f, 0x19, 0x25, 0xf2, 0x3f, 0x4b, 0x1a, 0xec, 0xd4, 0x5f, 0xd5, 0x16, 0xb5, 0x82, - 0x8a, 0xb8, 0xce, 0xbd, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x18, 0x50, 0x51, 0xb2, 0xfc, 0x06, - 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/non_standard_names.proto", fileDescriptor_a1fc3d96d9306f6b) +} + +var fileDescriptor_a1fc3d96d9306f6b = []byte{ + // 636 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6f, 0xd3, 0x3e, + 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0xfa, 0xfd, 0x90, 0x87, 0x50, 0x08, 0x93, 0x56, 0x55, + 0x42, 0xeb, 0x05, 0x47, 0x84, 0x03, 0xd2, 0x80, 0x03, 0x15, 0x30, 0x0d, 0x58, 0x87, 0x92, 0x0e, + 0x26, 0x24, 0x14, 0x39, 0x8b, 0x9b, 0x86, 0xa5, 0x76, 0xa8, 0x9d, 0x8e, 0x5e, 0x79, 0x0b, 0x9c, + 0xb8, 0x72, 0x41, 0xbc, 0x04, 0xce, 0x3b, 0x73, 0xe2, 0x2d, 0xf0, 0x02, 0x78, 0x09, 0x28, 0x76, + 0x52, 0x1a, 0x55, 0x88, 0xa9, 0xed, 0x29, 0x7e, 0x1e, 0x5b, 0xdf, 0xe7, 0xdf, 0x27, 0x36, 0xd8, + 0x23, 0xef, 0xf1, 0x28, 0x89, 0x09, 0xb7, 0x22, 0x2a, 0xc8, 0x98, 0xe2, 0xd8, 0x4a, 0xc6, 0x4c, + 0x30, 0x2b, 0xf7, 0x27, 0xbe, 0x45, 0x19, 0xf5, 0xb8, 0xc0, 0x34, 0xc0, 0xe3, 0xc0, 0xa3, 0x78, + 0x44, 0x38, 0x92, 0x47, 0x60, 0x27, 0x1c, 0x27, 0xa7, 0x28, 0xc4, 0x82, 0x9c, 0xe3, 0x29, 0x2a, + 0x84, 0x50, 0x21, 0x84, 0x66, 0x12, 0xe6, 0x76, 0xc8, 0x58, 0x18, 0x13, 0x0b, 0x27, 0x91, 0x85, + 0x29, 0x65, 0x02, 0x8b, 0x88, 0xd1, 0x5c, 0xc7, 0x6c, 0xe5, 0xbb, 0xd2, 0xf2, 0xd3, 0x81, 0x35, + 0x88, 0x48, 0x1c, 0x78, 0x23, 0xcc, 0xcf, 0xd4, 0x89, 0xf6, 0x67, 0x1d, 0xc0, 0x1e, 0xa3, 0x6e, + 0x9e, 0xc5, 0x21, 0xe1, 0x1c, 0x87, 0x04, 0xfe, 0x07, 0x2a, 0x51, 0x60, 0x68, 0x2d, 0xad, 0xd3, + 0x70, 0x2a, 0x51, 0x00, 0xaf, 0x00, 0xbd, 0x97, 0x8e, 0x8c, 0x4a, 0x4b, 0xeb, 0xe8, 0x4e, 0xb6, + 0x84, 0xd7, 0x41, 0x3d, 0x8e, 0x28, 0xf1, 0x68, 0x3a, 0x32, 0x74, 0xe9, 0xde, 0xcc, 0xec, 0x6c, + 0x6b, 0x1b, 0x34, 0x62, 0x4c, 0xc3, 0x83, 0x80, 0x50, 0x61, 0x6c, 0x48, 0x8d, 0x3f, 0x0e, 0x78, + 0x0d, 0xd4, 0xdc, 0xfe, 0xc3, 0xfe, 0xb1, 0x6b, 0x54, 0xe5, 0x56, 0x6e, 0xc1, 0x2d, 0x50, 0x25, + 0xd4, 0xdb, 0xef, 0x1a, 0x35, 0xa9, 0xb6, 0x41, 0xe8, 0x7e, 0x37, 0xcb, 0x83, 0x32, 0x63, 0x53, + 0xe5, 0x41, 0x19, 0x3c, 0x01, 0x55, 0x31, 0x8c, 0x68, 0x68, 0xd4, 0x5b, 0x5a, 0xa7, 0x69, 0x77, + 0xd1, 0x65, 0x1b, 0x85, 0x16, 0x8b, 0x44, 0xfd, 0x4c, 0xc9, 0x51, 0x82, 0xe6, 0x27, 0x0d, 0x54, + 0xa5, 0x03, 0x86, 0xa0, 0xce, 0x53, 0x5f, 0xae, 0x65, 0x07, 0x9a, 0xf6, 0xb3, 0xd5, 0xc3, 0x20, + 0x37, 0x97, 0x74, 0x66, 0xe2, 0xe6, 0x2e, 0xa8, 0x17, 0x5e, 0x78, 0x03, 0x34, 0x78, 0xea, 0x7b, + 0x13, 0x1c, 0xa7, 0x24, 0xef, 0x7b, 0x76, 0xf0, 0x65, 0x66, 0xb7, 0xbf, 0x6a, 0xc0, 0x98, 0x13, + 0x3e, 0x4e, 0x02, 0x2c, 0x88, 0x43, 0xde, 0xa5, 0x84, 0x0b, 0xf8, 0x02, 0x6c, 0xf8, 0x2c, 0x98, + 0xe6, 0xa9, 0xde, 0x5f, 0x25, 0x55, 0x47, 0x2a, 0xc1, 0x7b, 0xa0, 0x99, 0xca, 0x10, 0x12, 0x14, + 0x39, 0xf4, 0xa6, 0x6d, 0x22, 0xc5, 0x12, 0x2a, 0x58, 0x42, 0x4f, 0x32, 0x96, 0x0e, 0x31, 0x3f, + 0x73, 0x80, 0x3a, 0x9e, 0xad, 0xdb, 0xdf, 0x75, 0xb0, 0xb3, 0xa8, 0xfc, 0x2a, 0x12, 0xc3, 0xa7, + 0xee, 0x51, 0xaf, 0x97, 0x41, 0x5e, 0xa6, 0xeb, 0xe0, 0xd1, 0xe5, 0xe8, 0x7a, 0xbe, 0x1c, 0x5d, + 0x5c, 0x60, 0x91, 0x72, 0x78, 0xb5, 0x4c, 0x57, 0xf5, 0x71, 0x66, 0xc0, 0xff, 0xe7, 0xf0, 0xd2, + 0xa7, 0x84, 0xc3, 0x41, 0x99, 0xaf, 0xa3, 0x55, 0xba, 0x59, 0xaa, 0x39, 0x87, 0xad, 0x26, 0x3f, + 0x53, 0xf3, 0xcb, 0x8c, 0x36, 0xb1, 0x40, 0xdb, 0xc9, 0x9a, 0x83, 0xce, 0xa1, 0x57, 0xac, 0xcc, + 0xce, 0x1c, 0x7a, 0xdb, 0x8b, 0xe8, 0x49, 0x87, 0x62, 0xef, 0x42, 0x03, 0x37, 0xe7, 0xc2, 0x94, + 0xf4, 0xcb, 0x20, 0xbe, 0x29, 0x81, 0x78, 0xb0, 0xb6, 0x2a, 0xd6, 0x40, 0xa5, 0x7d, 0x51, 0xbe, + 0xe6, 0x5c, 0x32, 0x9e, 0x44, 0xa7, 0x04, 0x7e, 0xd3, 0x40, 0x4d, 0x15, 0x01, 0x97, 0xbb, 0x4a, + 0x4a, 0x1d, 0x30, 0x57, 0xfa, 0xf9, 0xda, 0xb7, 0x3e, 0xfc, 0xf8, 0xf9, 0xb1, 0xb2, 0x6b, 0xef, + 0x58, 0x93, 0xdb, 0xc5, 0x23, 0x51, 0x7a, 0x22, 0x2c, 0x55, 0xd0, 0x9e, 0xea, 0xc7, 0x2f, 0x0d, + 0x6c, 0xa9, 0xf0, 0xe5, 0x9f, 0x6b, 0x39, 0x66, 0xff, 0x3e, 0x57, 0x73, 0x7d, 0x93, 0x6c, 0x3f, + 0x90, 0x25, 0xde, 0xb5, 0xad, 0x7f, 0x94, 0xe8, 0x9d, 0x47, 0x62, 0xe8, 0xbd, 0xe5, 0x8c, 0xaa, + 0x67, 0x51, 0x95, 0xdc, 0x6d, 0xbe, 0x6e, 0xcc, 0x62, 0xf9, 0x35, 0x39, 0xf2, 0x3b, 0xbf, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x0f, 0xef, 0xfa, 0x6c, 0x68, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -561,7 +561,7 @@ func NewNonStandardServiceClient(cc *grpc.ClientConn) NonStandardServiceClient { func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) { out := new(NonStandardMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.NonStandardService/Update", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update", in, out, opts...) if err != nil { return nil, err } @@ -570,7 +570,7 @@ func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUp func (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) { out := new(NonStandardMessageWithJSONNames) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) if err != nil { return nil, err } @@ -610,7 +610,7 @@ func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.NonStandardService/Update", + FullMethod: "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest)) @@ -628,7 +628,7 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.NonStandardService/UpdateWithJSONNames", + FullMethod: "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest)) @@ -637,7 +637,7 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex } var _NonStandardService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.NonStandardService", + ServiceName: "grpc.gateway.examples.internal.examplepb.NonStandardService", HandlerType: (*NonStandardServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -650,5 +650,5 @@ var _NonStandardService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/non_standard_names.proto", + Metadata: "examples/internal/proto/examplepb/non_standard_names.proto", } diff --git a/examples/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go similarity index 99% rename from examples/proto/examplepb/non_standard_names.pb.gw.go rename to examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 11cb0b98adc..d3e79338163 100644 --- a/examples/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/non_standard_names.proto +// source: examples/internal/proto/examplepb/non_standard_names.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/non_standard_names.proto b/examples/internal/proto/examplepb/non_standard_names.proto similarity index 97% rename from examples/proto/examplepb/non_standard_names.proto rename to examples/internal/proto/examplepb/non_standard_names.proto index 0bf130239a4..acb2203e1d5 100644 --- a/examples/proto/examplepb/non_standard_names.proto +++ b/examples/internal/proto/examplepb/non_standard_names.proto @@ -1,6 +1,6 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; diff --git a/examples/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go similarity index 77% rename from examples/proto/examplepb/response_body_service.pb.go rename to examples/internal/proto/examplepb/response_body_service.pb.go index 879091d3e74..9bfa2cb7932 100644 --- a/examples/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/response_body_service.proto +// source: examples/internal/proto/examplepb/response_body_service.proto package examplepb @@ -53,7 +53,7 @@ func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { } func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{2, 0, 0} + return fileDescriptor_272b2870183bbe20, []int{2, 0, 0} } type ResponseBodyIn struct { @@ -67,7 +67,7 @@ func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } func (*ResponseBodyIn) ProtoMessage() {} func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{0} + return fileDescriptor_272b2870183bbe20, []int{0} } func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { @@ -106,7 +106,7 @@ func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut) ProtoMessage() {} func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{1} + return fileDescriptor_272b2870183bbe20, []int{1} } func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { @@ -145,7 +145,7 @@ func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Respon func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*ResponseBodyOut_Response) ProtoMessage() {} func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{1, 0} + return fileDescriptor_272b2870183bbe20, []int{1, 0} } func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { @@ -184,7 +184,7 @@ func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut) ProtoMessage() {} func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{2} + return fileDescriptor_272b2870183bbe20, []int{2} } func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { @@ -214,7 +214,7 @@ func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Respo type RepeatedResponseBodyOut_Response struct { Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -224,7 +224,7 @@ func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedRespon func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{2, 0} + return fileDescriptor_272b2870183bbe20, []int{2, 0} } func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { @@ -270,7 +270,7 @@ func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } func (*RepeatedResponseStrings) ProtoMessage() {} func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_df4b27f252df323f, []int{3} + return fileDescriptor_272b2870183bbe20, []int{3} } func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { @@ -299,49 +299,50 @@ func (m *RepeatedResponseStrings) GetValues() []string { } func init() { - proto.RegisterEnum("grpc.gateway.examples.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) - proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.examplepb.ResponseBodyIn") - proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut") - proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.ResponseBodyOut.Response") - proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut") - proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseBodyOut.Response") - proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.examplepb.RepeatedResponseStrings") + proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) + proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyIn") + proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyOut") + proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response") + proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut") + proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response") + proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings") } func init() { - proto.RegisterFile("examples/proto/examplepb/response_body_service.proto", fileDescriptor_df4b27f252df323f) -} - -var fileDescriptor_df4b27f252df323f = []byte{ - // 441 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x94, 0xcf, 0xaa, 0xd3, 0x40, - 0x14, 0xc6, 0x9d, 0xb4, 0x5e, 0x6f, 0x27, 0x72, 0x6f, 0x99, 0x2b, 0xf7, 0x86, 0x22, 0x1a, 0x07, - 0xd1, 0xb8, 0x49, 0x34, 0xba, 0xd0, 0x65, 0xbb, 0x91, 0xa2, 0xa4, 0x90, 0x5a, 0x04, 0x41, 0xca, - 0xa4, 0x39, 0x84, 0x40, 0xcd, 0x0c, 0x99, 0x69, 0x35, 0x88, 0x1b, 0x57, 0x2e, 0xdc, 0xb9, 0xf5, - 0x01, 0x74, 0xe1, 0xd3, 0xf8, 0x0a, 0x3e, 0x88, 0x34, 0x4d, 0x86, 0x58, 0x83, 0x5a, 0x05, 0x57, - 0x99, 0x33, 0x7f, 0xbe, 0xf3, 0xe3, 0x7c, 0xe7, 0x04, 0xdf, 0x83, 0x57, 0xec, 0x85, 0x58, 0x82, - 0xf4, 0x44, 0xce, 0x15, 0xf7, 0xaa, 0x50, 0x44, 0x5e, 0x0e, 0x52, 0xf0, 0x4c, 0xc2, 0x3c, 0xe2, - 0x71, 0x31, 0x97, 0x90, 0xaf, 0xd3, 0x05, 0xb8, 0xe5, 0x2d, 0x72, 0x35, 0xc9, 0xc5, 0xc2, 0x4d, - 0x98, 0x82, 0x97, 0xac, 0x70, 0x6b, 0x09, 0x57, 0x3f, 0x1e, 0x5c, 0x4e, 0x38, 0x4f, 0x96, 0xe0, - 0x31, 0x91, 0x7a, 0x2c, 0xcb, 0xb8, 0x62, 0x2a, 0xe5, 0x99, 0xdc, 0x3e, 0xa7, 0xd7, 0xf1, 0x51, - 0x58, 0xa9, 0x8f, 0x78, 0x5c, 0x8c, 0x33, 0x42, 0x70, 0x37, 0x66, 0x8a, 0x59, 0xc8, 0x46, 0x4e, - 0x2f, 0x2c, 0xd7, 0xf4, 0x1d, 0xc2, 0xc7, 0xcd, 0x6b, 0x93, 0x95, 0x22, 0x33, 0x7c, 0x58, 0x73, - 0x59, 0x86, 0x8d, 0x1c, 0xd3, 0x7f, 0xe0, 0xfe, 0x86, 0xc5, 0xdd, 0xd1, 0xd0, 0x71, 0xa8, 0xa5, - 0x06, 0x57, 0xf0, 0x61, 0xbd, 0xdb, 0x8a, 0xf2, 0xc9, 0xc0, 0x67, 0x21, 0x08, 0x60, 0x0a, 0xe2, - 0x5d, 0xa4, 0xe7, 0x3f, 0x20, 0x75, 0x1c, 0xd3, 0x1f, 0xfe, 0x01, 0x52, 0xab, 0x56, 0x1b, 0xda, - 0x17, 0xf4, 0x6b, 0x36, 0x12, 0xe1, 0xae, 0x2a, 0x04, 0x58, 0x1d, 0x1b, 0x39, 0x47, 0x7e, 0xf0, - 0xcf, 0xb9, 0xf5, 0xe2, 0x49, 0x21, 0x20, 0x2c, 0xb5, 0xe9, 0x2d, 0x7c, 0xb1, 0xb9, 0x4b, 0x4c, - 0x7c, 0x61, 0x16, 0x3c, 0x0a, 0x26, 0x4f, 0x83, 0xfe, 0x39, 0x72, 0x1e, 0xa3, 0x61, 0x1f, 0x6d, - 0x3e, 0xa3, 0xbe, 0x41, 0xef, 0xfc, 0x5c, 0xa9, 0xa9, 0xca, 0xd3, 0x2c, 0x91, 0xe4, 0x14, 0x1f, - 0xac, 0xd9, 0x72, 0x05, 0xd2, 0x42, 0x76, 0xc7, 0xe9, 0x85, 0x55, 0xe4, 0xbf, 0xef, 0xe2, 0x93, - 0x26, 0xcd, 0x74, 0xdb, 0x6b, 0xe4, 0x23, 0xc2, 0xc7, 0x0f, 0x41, 0x35, 0x8f, 0x88, 0xb7, 0x97, - 0xdd, 0xe3, 0x6c, 0x70, 0x7b, 0xdf, 0xfe, 0xa0, 0x37, 0xde, 0x7e, 0xfd, 0xf6, 0xc1, 0xb0, 0xc9, - 0x25, 0x3d, 0x02, 0x9b, 0x09, 0xf0, 0x5e, 0x6f, 0xaa, 0xfd, 0x26, 0xd2, 0xce, 0x90, 0xcf, 0x08, - 0x93, 0xc7, 0xa9, 0x6c, 0xf2, 0xa5, 0x20, 0xf7, 0x27, 0xbc, 0xff, 0xb7, 0x96, 0x51, 0xa7, 0x24, - 0xa5, 0xe4, 0xb4, 0x49, 0x9a, 0x82, 0x6c, 0x65, 0x3d, 0x69, 0xb2, 0xd6, 0x96, 0xfc, 0x07, 0xd8, - 0x2a, 0x15, 0xbd, 0x59, 0xc2, 0x5e, 0x23, 0x67, 0x1a, 0x56, 0x6e, 0x4f, 0x6a, 0xda, 0xaa, 0x1d, - 0x46, 0xe6, 0xb3, 0x9e, 0x56, 0x8b, 0x0e, 0xca, 0x3f, 0xc6, 0xdd, 0xef, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x07, 0xc9, 0xea, 0x62, 0xa8, 0x04, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/response_body_service.proto", fileDescriptor_272b2870183bbe20) +} + +var fileDescriptor_272b2870183bbe20 = []byte{ + // 451 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0xd4, 0xcf, 0x6a, 0xd4, 0x40, + 0x1c, 0x07, 0x70, 0x27, 0xbb, 0xd6, 0xee, 0x44, 0xda, 0x65, 0x2a, 0x6d, 0x58, 0x44, 0xe2, 0x20, + 0x1a, 0x2f, 0x09, 0xc6, 0x8b, 0x1e, 0x3c, 0x34, 0x17, 0xa9, 0xca, 0x16, 0x52, 0xa5, 0xe0, 0xc1, + 0x32, 0x69, 0x7e, 0x86, 0xc1, 0x38, 0x33, 0x64, 0xa6, 0xd5, 0x20, 0x5e, 0x7c, 0x03, 0xf1, 0x3d, + 0x3c, 0x7a, 0xd0, 0x9b, 0xaf, 0xe0, 0x2b, 0xf8, 0x20, 0xb2, 0xd9, 0x64, 0x88, 0x35, 0x88, 0xb6, + 0x82, 0xa7, 0x9d, 0x7f, 0x7c, 0xe7, 0xc3, 0xfe, 0x7e, 0x13, 0x7c, 0x0f, 0x5e, 0xb3, 0x97, 0xaa, + 0x04, 0x1d, 0x71, 0x61, 0xa0, 0x12, 0xac, 0x8c, 0x54, 0x25, 0x8d, 0x8c, 0xda, 0x75, 0x95, 0x45, + 0x15, 0x68, 0x25, 0x85, 0x86, 0x83, 0x4c, 0xe6, 0xf5, 0x81, 0x86, 0xea, 0x98, 0x1f, 0x42, 0xd8, + 0x9c, 0x22, 0x41, 0x51, 0xa9, 0xc3, 0xb0, 0x60, 0x06, 0x5e, 0xb1, 0x3a, 0xec, 0xb2, 0xc2, 0x2e, + 0x2b, 0xb4, 0x29, 0xb3, 0xcb, 0x85, 0x94, 0x45, 0x09, 0x11, 0x53, 0x3c, 0x62, 0x42, 0x48, 0xc3, + 0x0c, 0x97, 0x42, 0x2f, 0x73, 0xe8, 0x35, 0xbc, 0x96, 0xb6, 0xd7, 0x24, 0x32, 0xaf, 0x77, 0x04, + 0x21, 0x78, 0x9c, 0x33, 0xc3, 0x3c, 0xe4, 0xa3, 0x60, 0x92, 0x36, 0x63, 0xfa, 0x1e, 0xe1, 0xf5, + 0xfe, 0xb1, 0xdd, 0x23, 0x43, 0x9e, 0xe1, 0xd5, 0x0e, 0xe8, 0x39, 0x3e, 0x0a, 0xdc, 0x38, 0x09, + 0xff, 0x14, 0x15, 0x9e, 0x08, 0xb3, 0xf3, 0xd4, 0x66, 0xce, 0xae, 0xe0, 0xd5, 0x6e, 0x75, 0xd0, + 0xf4, 0xd9, 0xc1, 0x5b, 0x29, 0x28, 0x60, 0x06, 0xf2, 0x93, 0xb6, 0xe7, 0x3f, 0xd9, 0x46, 0x81, + 0x1b, 0x3f, 0xf8, 0x1b, 0xdb, 0x60, 0xe8, 0x90, 0xf1, 0x13, 0xfa, 0x3d, 0x92, 0xbc, 0xc0, 0x63, + 0x53, 0x2b, 0xf0, 0x46, 0x3e, 0x0a, 0xd6, 0xe2, 0xfd, 0x7f, 0x87, 0xb0, 0x83, 0xc7, 0xb5, 0x82, + 0xb4, 0xb9, 0x84, 0xde, 0xc4, 0x17, 0xfb, 0xab, 0xc4, 0xc5, 0x17, 0x9e, 0xcc, 0x1f, 0xce, 0x77, + 0xf7, 0xe7, 0xd3, 0x73, 0xe4, 0x3c, 0x46, 0xdb, 0x53, 0xb4, 0xf8, 0x49, 0xa6, 0x0e, 0xbd, 0xf5, + 0xeb, 0x7f, 0xb7, 0x67, 0x2a, 0x2e, 0x0a, 0x4d, 0x36, 0xf1, 0xca, 0x31, 0x2b, 0x8f, 0x40, 0x7b, + 0xc8, 0x1f, 0x05, 0x93, 0xb4, 0x9d, 0xc5, 0x5f, 0xc7, 0x78, 0xa3, 0xaf, 0xd9, 0x5b, 0xf6, 0x23, + 0xf9, 0x88, 0xf0, 0xfa, 0x7d, 0x30, 0xfd, 0x2d, 0x72, 0xe7, 0x74, 0x9d, 0xb0, 0x23, 0x66, 0x77, + 0x4f, 0xdd, 0x43, 0xf4, 0xfa, 0xbb, 0x6f, 0xdf, 0x3f, 0x38, 0x3e, 0xb9, 0x64, 0x1f, 0xce, 0xe2, + 0xdd, 0x44, 0x6f, 0x16, 0x85, 0x78, 0x9b, 0xd9, 0xa2, 0x91, 0x2f, 0x08, 0x93, 0x47, 0x5c, 0xf7, + 0xc5, 0x1c, 0xf4, 0x19, 0xcc, 0xdb, 0x67, 0x2e, 0x2b, 0x0d, 0x1a, 0x3b, 0x25, 0x9b, 0x7d, 0x3b, + 0x07, 0x3d, 0xa8, 0xdf, 0xe8, 0xeb, 0xbb, 0xb2, 0xfd, 0x17, 0x7e, 0x7b, 0x39, 0xbd, 0xd1, 0xf0, + 0xaf, 0x92, 0x2d, 0xcb, 0xd7, 0xcb, 0x9d, 0xce, 0xdf, 0x36, 0x51, 0xe2, 0x3e, 0x9d, 0xd8, 0xb4, + 0x6c, 0xa5, 0xf9, 0x04, 0xdd, 0xfe, 0x11, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x10, 0x29, 0xfa, 0x0b, + 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -371,7 +372,7 @@ func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) { out := new(ResponseBodyOut) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) if err != nil { return nil, err } @@ -380,7 +381,7 @@ func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *Res func (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) { out := new(RepeatedResponseBodyOut) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseBodies", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies", in, out, opts...) if err != nil { return nil, err } @@ -389,7 +390,7 @@ func (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in * func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) { out := new(RepeatedResponseStrings) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseStrings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings", in, out, opts...) if err != nil { return nil, err } @@ -431,7 +432,7 @@ func _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/GetResponseBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).GetResponseBody(ctx, req.(*ResponseBodyIn)) @@ -449,7 +450,7 @@ func _ResponseBodyService_ListResponseBodies_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseBodies", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, req.(*ResponseBodyIn)) @@ -467,7 +468,7 @@ func _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.ResponseBodyService/ListResponseStrings", + FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, req.(*ResponseBodyIn)) @@ -476,7 +477,7 @@ func _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx conte } var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.ResponseBodyService", + ServiceName: "grpc.gateway.examples.internal.examplepb.ResponseBodyService", HandlerType: (*ResponseBodyServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -493,5 +494,5 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/response_body_service.proto", + Metadata: "examples/internal/proto/examplepb/response_body_service.proto", } diff --git a/examples/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go similarity index 99% rename from examples/proto/examplepb/response_body_service.pb.gw.go rename to examples/internal/proto/examplepb/response_body_service.pb.gw.go index 86d9c4ed9be..558cd0617cf 100644 --- a/examples/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/response_body_service.proto +// source: examples/internal/proto/examplepb/response_body_service.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/response_body_service.proto b/examples/internal/proto/examplepb/response_body_service.proto similarity index 95% rename from examples/proto/examplepb/response_body_service.proto rename to examples/internal/proto/examplepb/response_body_service.proto index 215591daf95..2a04e786e95 100644 --- a/examples/proto/examplepb/response_body_service.proto +++ b/examples/internal/proto/examplepb/response_body_service.proto @@ -1,7 +1,7 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; diff --git a/examples/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json similarity index 99% rename from examples/proto/examplepb/response_body_service.swagger.json rename to examples/internal/proto/examplepb/response_body_service.swagger.json index 50fa2d025c4..1786b2dba94 100644 --- a/examples/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/response_body_service.proto", + "title": "examples/internal/proto/examplepb/response_body_service.proto", "version": "version not set" }, "consumes": [ diff --git a/examples/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go similarity index 74% rename from examples/proto/examplepb/stream.pb.go rename to examples/internal/proto/examplepb/stream.pb.go index 993391ebea5..93eab149b03 100644 --- a/examples/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/stream.proto +// source: examples/internal/proto/examplepb/stream.proto package examplepb @@ -8,7 +8,7 @@ import ( fmt "fmt" proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + sub "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -28,31 +28,32 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package func init() { - proto.RegisterFile("examples/proto/examplepb/stream.proto", fileDescriptor_a31ab0177843ce10) -} - -var fileDescriptor_a31ab0177843ce10 = []byte{ - // 319 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xb1, 0x4e, 0xc3, 0x30, - 0x10, 0x86, 0x15, 0x40, 0x08, 0x8c, 0x58, 0x3c, 0x30, 0x04, 0xa4, 0x42, 0x05, 0xa2, 0x30, 0xd8, - 0x6d, 0xd9, 0xd8, 0x28, 0xea, 0x06, 0x62, 0xe8, 0xc6, 0x52, 0xd9, 0xd1, 0xd5, 0xb5, 0x9a, 0xc4, - 0x96, 0x7d, 0x29, 0x54, 0x62, 0x62, 0x64, 0xed, 0x8b, 0xf0, 0x2e, 0xbc, 0x02, 0x0f, 0x82, 0xea, - 0xa4, 0x1d, 0x10, 0x51, 0xcb, 0x78, 0xbe, 0xff, 0xf7, 0xfd, 0xdf, 0x4f, 0x2e, 0xe0, 0x55, 0x64, - 0x36, 0x05, 0xcf, 0xad, 0x33, 0x68, 0x78, 0x35, 0x5a, 0xc9, 0x3d, 0x3a, 0x10, 0x19, 0x0b, 0xcf, - 0xb4, 0xa1, 0x9c, 0x4d, 0x98, 0x12, 0x08, 0x2f, 0x62, 0xc6, 0x96, 0x1e, 0xb6, 0x52, 0xc7, 0x27, - 0xca, 0x18, 0x95, 0x02, 0x17, 0x56, 0x73, 0x91, 0xe7, 0x06, 0x05, 0x6a, 0x93, 0xfb, 0xd2, 0x1e, - 0x1f, 0x57, 0xdb, 0x30, 0xc9, 0x62, 0xc4, 0x21, 0xb3, 0x38, 0xab, 0x96, 0xdd, 0xda, 0x08, 0x62, - 0x28, 0x35, 0x0e, 0xcd, 0x68, 0x08, 0x53, 0x70, 0x33, 0x1c, 0xeb, 0x5c, 0x55, 0x9e, 0xd3, 0x5f, - 0x1e, 0x5f, 0x48, 0x9e, 0x81, 0xf7, 0x42, 0x41, 0xa9, 0xe8, 0x7e, 0x6e, 0x93, 0xc3, 0x41, 0x40, - 0x18, 0x80, 0x9b, 0xea, 0x04, 0xe8, 0x47, 0x44, 0x48, 0xaf, 0x48, 0x27, 0xf7, 0x0e, 0x04, 0x02, - 0xed, 0xb0, 0x35, 0x4c, 0xec, 0xae, 0xa7, 0xf1, 0x69, 0xd4, 0x5f, 0xdd, 0x8e, 0x8f, 0x58, 0xc9, - 0xc1, 0x96, 0x1c, 0xac, 0xbf, 0xe0, 0x68, 0xf2, 0xf7, 0xaf, 0xef, 0xf9, 0xd6, 0x55, 0xf3, 0x9c, - 0x4f, 0x3b, 0xcb, 0xf8, 0x7f, 0x85, 0xe7, 0xb2, 0x48, 0x27, 0xb7, 0xd1, 0x75, 0x2b, 0xa2, 0x6f, - 0x64, 0xe7, 0x41, 0x7b, 0xa4, 0x35, 0x5f, 0xc6, 0xff, 0x4f, 0xd7, 0xbc, 0x0c, 0x29, 0xce, 0x68, - 0x63, 0x4d, 0x8a, 0x76, 0x44, 0xe7, 0x11, 0xd9, 0x5b, 0x54, 0xd1, 0x4f, 0xc6, 0x86, 0xb6, 0x6a, - 0x4e, 0xf9, 0x42, 0xb2, 0x01, 0x3a, 0x9d, 0xab, 0xc7, 0xb2, 0xd9, 0x78, 0x63, 0xe5, 0xe6, 0x8d, - 0x40, 0x32, 0x36, 0xa1, 0x91, 0x76, 0xd4, 0x3b, 0x78, 0xde, 0x5f, 0xe1, 0xc9, 0xdd, 0x50, 0xc8, - 0xcd, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x63, 0x7a, 0xd9, 0xa1, 0x02, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/stream.proto", fileDescriptor_cc5dba844cf4f624) +} + +var fileDescriptor_cc5dba844cf4f624 = []byte{ + // 328 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x90, 0xb1, 0x4e, 0xeb, 0x30, + 0x14, 0x86, 0xe5, 0x7b, 0x11, 0x82, 0x20, 0x16, 0x0f, 0x0c, 0x01, 0x09, 0x51, 0x21, 0xd1, 0x32, + 0xd8, 0x2d, 0x6c, 0x65, 0xa2, 0xa8, 0x1b, 0x88, 0xa1, 0x1b, 0x4b, 0x65, 0x47, 0xa7, 0xae, 0xd5, + 0xc4, 0x8e, 0xec, 0x93, 0x42, 0x57, 0x24, 0x9e, 0xa0, 0xcf, 0xc0, 0x13, 0x21, 0xde, 0x80, 0x07, + 0x41, 0x75, 0xd2, 0x4c, 0x54, 0x29, 0x62, 0xcc, 0x39, 0xf9, 0x8e, 0xff, 0xef, 0x8f, 0x18, 0xbc, + 0x88, 0x2c, 0x4f, 0xc1, 0x73, 0x6d, 0x10, 0x9c, 0x11, 0x29, 0xcf, 0x9d, 0x45, 0xcb, 0xab, 0x79, + 0x2e, 0xb9, 0x47, 0x07, 0x22, 0x63, 0x61, 0x4c, 0xdb, 0xca, 0xe5, 0x09, 0x53, 0x02, 0xe1, 0x59, + 0x2c, 0x6a, 0x98, 0xad, 0x61, 0x56, 0x63, 0xf1, 0x89, 0xb2, 0x56, 0xa5, 0xc0, 0x45, 0xae, 0xb9, + 0x30, 0xc6, 0xa2, 0x40, 0x6d, 0x8d, 0x2f, 0xef, 0xc4, 0xc7, 0xd5, 0x36, 0x7c, 0xc9, 0x62, 0xc2, + 0x21, 0xcb, 0x71, 0x51, 0x2d, 0x6f, 0x9a, 0x43, 0x89, 0xb1, 0xd4, 0x38, 0xb6, 0x93, 0x31, 0xcc, + 0xc1, 0x2d, 0x70, 0xaa, 0x8d, 0xaa, 0xe0, 0xce, 0x26, 0xd8, 0x17, 0x92, 0x67, 0xe0, 0xbd, 0x50, + 0x50, 0xfe, 0x7a, 0xf5, 0xf9, 0x3f, 0x3a, 0x1c, 0x05, 0xbb, 0x11, 0xb8, 0xb9, 0x4e, 0x80, 0x2e, + 0x49, 0x14, 0x0d, 0x8a, 0x74, 0x76, 0xe7, 0x40, 0x20, 0xd0, 0x3e, 0xdb, 0x56, 0x97, 0xdd, 0x0e, + 0x34, 0x3e, 0x4e, 0x86, 0x75, 0x9a, 0xf8, 0x88, 0x95, 0x8a, 0x6c, 0xad, 0xc8, 0x86, 0x2b, 0xc5, + 0x16, 0x7f, 0xfd, 0xf8, 0x5a, 0xfe, 0xeb, 0xb4, 0xce, 0xf9, 0xbc, 0xb7, 0x16, 0xfa, 0x49, 0x87, + 0xcb, 0x22, 0x9d, 0xf5, 0xc9, 0x65, 0x9b, 0xd0, 0x37, 0x12, 0xed, 0xdc, 0x6b, 0x8f, 0x74, 0xc3, + 0xcd, 0xf8, 0x0f, 0x39, 0x5b, 0x17, 0x21, 0xcf, 0x19, 0x3d, 0x6d, 0xc8, 0xd3, 0x25, 0xf4, 0x9d, + 0x44, 0x7b, 0xab, 0x76, 0x86, 0xc9, 0xd4, 0xd2, 0x5e, 0xd3, 0x9b, 0xbe, 0x90, 0x6c, 0x84, 0x4e, + 0x1b, 0xf5, 0x50, 0xb6, 0x1e, 0xff, 0x1e, 0xd9, 0xbe, 0x2d, 0x48, 0xa6, 0x36, 0xb4, 0xd5, 0x25, + 0x83, 0x83, 0xa7, 0xfd, 0x5a, 0x58, 0xee, 0x86, 0xae, 0xae, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, + 0xb8, 0x9c, 0x62, 0x91, 0xea, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -81,7 +82,7 @@ func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.examplepb.StreamService/BulkCreate", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -115,7 +116,7 @@ func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { } func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.examplepb.StreamService/List", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -147,7 +148,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.examplepb.StreamService/BulkEcho", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -276,7 +277,7 @@ func (x *streamServiceBulkEchoServer) Recv() (*sub.StringMessage, error) { } var _StreamService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.StreamService", + ServiceName: "grpc.gateway.examples.internal.examplepb.StreamService", HandlerType: (*StreamServiceServer)(nil), Methods: []grpc.MethodDesc{}, Streams: []grpc.StreamDesc{ @@ -297,5 +298,5 @@ var _StreamService_serviceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "examples/proto/examplepb/stream.proto", + Metadata: "examples/internal/proto/examplepb/stream.proto", } diff --git a/examples/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go similarity index 98% rename from examples/proto/examplepb/stream.pb.gw.go rename to examples/internal/proto/examplepb/stream.pb.gw.go index 8b33ff5c40a..3cece1b712c 100644 --- a/examples/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/stream.proto +// source: examples/internal/proto/examplepb/stream.proto /* Package examplepb is a reverse proxy. @@ -16,7 +16,7 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" "google.golang.org/grpc" diff --git a/examples/proto/examplepb/stream.proto b/examples/internal/proto/examplepb/stream.proto similarity index 67% rename from examples/proto/examplepb/stream.proto rename to examples/internal/proto/examplepb/stream.proto index 66e59dde758..8cfa647cc15 100644 --- a/examples/proto/examplepb/stream.proto +++ b/examples/internal/proto/examplepb/stream.proto @@ -1,11 +1,11 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; -import "examples/proto/examplepb/a_bit_of_everything.proto"; -import "examples/proto/sub/message.proto"; +import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; +import "examples/internal/proto/sub/message.proto"; // Defines some more operations to be added to ABitOfEverythingService service StreamService { @@ -20,7 +20,7 @@ service StreamService { get: "/v1/example/a_bit_of_everything" }; } - rpc BulkEcho(stream grpc.gateway.examples.sub.StringMessage) returns (stream grpc.gateway.examples.sub.StringMessage) { + rpc BulkEcho(stream grpc.gateway.examples.internal.sub.StringMessage) returns (stream grpc.gateway.examples.internal.sub.StringMessage) { option (google.api.http) = { post: "/v1/example/a_bit_of_everything/echo" body: "*" diff --git a/examples/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json similarity index 99% rename from examples/proto/examplepb/stream.swagger.json rename to examples/internal/proto/examplepb/stream.swagger.json index c4c696989a6..faef15b04e4 100644 --- a/examples/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/stream.proto", + "title": "examples/internal/proto/examplepb/stream.proto", "version": "version not set" }, "consumes": [ diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go similarity index 76% rename from examples/proto/examplepb/unannotated_echo_service.pb.go rename to examples/internal/proto/examplepb/unannotated_echo_service.pb.go index ba678e9a081..60c4d917a2a 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/unannotated_echo_service.proto +// source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service // Similar to echo_service.proto but without annotations. See @@ -48,7 +48,7 @@ func (m *UnannotatedSimpleMessage) Reset() { *m = UnannotatedSimpleMessa func (m *UnannotatedSimpleMessage) String() string { return proto.CompactTextString(m) } func (*UnannotatedSimpleMessage) ProtoMessage() {} func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_a57876726ab5dd80, []int{0} + return fileDescriptor_ab29419944ad9f3b, []int{0} } func (m *UnannotatedSimpleMessage) XXX_Unmarshal(b []byte) error { @@ -91,32 +91,33 @@ func (m *UnannotatedSimpleMessage) GetDuration() *duration.Duration { } func init() { - proto.RegisterType((*UnannotatedSimpleMessage)(nil), "grpc.gateway.examples.examplepb.UnannotatedSimpleMessage") + proto.RegisterType((*UnannotatedSimpleMessage)(nil), "grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage") } func init() { - proto.RegisterFile("examples/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_a57876726ab5dd80) + proto.RegisterFile("examples/internal/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_ab29419944ad9f3b) } -var fileDescriptor_a57876726ab5dd80 = []byte{ - // 268 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x87, 0x72, 0x0b, 0x92, 0xf4, - 0x4b, 0xf3, 0x12, 0xf3, 0xf2, 0xf2, 0x4b, 0x12, 0x4b, 0x52, 0x53, 0xe2, 0x53, 0x93, 0x33, 0xf2, - 0xe3, 0x8b, 0x53, 0x8b, 0xca, 0x32, 0x93, 0x53, 0xf5, 0xc0, 0x0a, 0x85, 0xe4, 0xd3, 0x8b, 0x0a, - 0x92, 0xf5, 0xd2, 0x13, 0x4b, 0x52, 0xcb, 0x13, 0x2b, 0xf5, 0x60, 0xa6, 0xe8, 0xc1, 0xf5, 0x4b, - 0xc9, 0xa5, 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0x42, 0xcc, 0x4d, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, - 0x4a, 0x2c, 0xc9, 0xcc, 0xcf, 0x83, 0x18, 0xa0, 0x54, 0xcc, 0x25, 0x11, 0x8a, 0xb0, 0x22, 0x38, - 0x13, 0xa4, 0xcd, 0x37, 0xb5, 0xb8, 0x38, 0x31, 0x3d, 0x55, 0x88, 0x8f, 0x8b, 0x29, 0x33, 0x45, - 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x88, 0x29, 0x33, 0x45, 0x48, 0x80, 0x8b, 0x39, 0xaf, 0x34, - 0x57, 0x82, 0x49, 0x81, 0x51, 0x83, 0x39, 0x08, 0xc4, 0x14, 0x32, 0xe5, 0xe2, 0x80, 0x99, 0x27, - 0xc1, 0xac, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa9, 0x07, 0xb1, 0x50, 0x0f, 0x66, 0xa1, 0x9e, 0x0b, - 0x54, 0x41, 0x10, 0x5c, 0xa9, 0xd1, 0x3c, 0x66, 0x2e, 0x31, 0x24, 0x5b, 0x5d, 0x93, 0x33, 0xf2, - 0x83, 0x21, 0xde, 0x12, 0xaa, 0xe1, 0x62, 0x01, 0x71, 0x85, 0x2c, 0xf5, 0x08, 0xf8, 0x4c, 0x0f, - 0x97, 0xb3, 0xa5, 0xc8, 0xd7, 0x2a, 0xd4, 0xc0, 0xc8, 0xc5, 0x01, 0xb2, 0xde, 0x29, 0x3f, 0xa5, - 0x72, 0x80, 0x9c, 0xd0, 0xc4, 0xc8, 0xc5, 0x05, 0x72, 0x82, 0x4b, 0x6a, 0x4e, 0x6a, 0x49, 0xea, - 0xc0, 0x38, 0xc2, 0x89, 0x3b, 0x8a, 0x13, 0xae, 0x2a, 0x89, 0x0d, 0x1c, 0x95, 0xc6, 0x80, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x9a, 0xa7, 0x7c, 0x41, 0xa5, 0x02, 0x00, 0x00, +var fileDescriptor_ab29419944ad9f3b = []byte{ + // 280 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x92, 0x31, 0x4b, 0xfb, 0x40, + 0x18, 0xc6, 0xb9, 0xe4, 0xcf, 0x9f, 0xf6, 0x2d, 0x88, 0xdc, 0x20, 0xb1, 0x83, 0x04, 0xa7, 0x4c, + 0x6f, 0xa0, 0xe2, 0x2e, 0xa1, 0x8e, 0x2e, 0x29, 0x2e, 0x2e, 0xe5, 0x92, 0xbc, 0xa6, 0x07, 0xe9, + 0x5d, 0xb8, 0xbb, 0xa8, 0xfd, 0x12, 0x0e, 0xe2, 0x57, 0xf3, 0xfb, 0xc8, 0x35, 0x4d, 0x74, 0x11, + 0x1c, 0x1c, 0xba, 0x25, 0xc7, 0x73, 0xbf, 0xdf, 0xf3, 0xc0, 0xc1, 0x0d, 0xbd, 0x88, 0x6d, 0xdb, + 0x90, 0x4d, 0xa5, 0x72, 0x64, 0x94, 0x68, 0xd2, 0xd6, 0x68, 0xa7, 0xd3, 0xc3, 0x79, 0x5b, 0xa4, + 0x9d, 0x12, 0x4a, 0x69, 0x27, 0x1c, 0x55, 0x6b, 0x2a, 0x37, 0x7a, 0x6d, 0xc9, 0x3c, 0xc9, 0x92, + 0x70, 0x1f, 0xe4, 0x49, 0x6d, 0xda, 0x12, 0x6b, 0xe1, 0xe8, 0x59, 0xec, 0x70, 0xc0, 0xe1, 0x80, + 0xc3, 0x11, 0x34, 0xbf, 0xa8, 0xb5, 0xae, 0x1b, 0xea, 0x05, 0x45, 0xf7, 0x98, 0x56, 0x9d, 0x11, + 0x4e, 0x6a, 0xd5, 0x93, 0x2e, 0x2d, 0x44, 0xf7, 0x5f, 0xae, 0x95, 0xf4, 0xd7, 0xee, 0xc8, 0x5a, + 0x51, 0x13, 0x3f, 0x81, 0x40, 0x56, 0x11, 0x8b, 0x59, 0x32, 0xcd, 0x03, 0x59, 0xf1, 0x53, 0x08, + 0x55, 0xb7, 0x8d, 0x82, 0x98, 0x25, 0x61, 0xee, 0x3f, 0xf9, 0x35, 0x4c, 0x06, 0x5e, 0x14, 0xc6, + 0x2c, 0x99, 0x2d, 0xce, 0xb1, 0x17, 0xe2, 0x20, 0xc4, 0xe5, 0x21, 0x90, 0x8f, 0xd1, 0xc5, 0x47, + 0x08, 0x67, 0xdf, 0xac, 0xb7, 0xe5, 0x46, 0xaf, 0xfa, 0x7d, 0xfc, 0x95, 0xc1, 0x3f, 0xff, 0xcf, + 0x33, 0xfc, 0xed, 0x46, 0xfc, 0x69, 0xc0, 0xfc, 0x0f, 0x18, 0xfc, 0x8d, 0xc1, 0xc4, 0x17, 0xca, + 0x74, 0xb5, 0x3b, 0x9a, 0x52, 0xef, 0x0c, 0xc0, 0x97, 0x5a, 0x52, 0x43, 0x8e, 0x8e, 0xa5, 0x56, + 0x36, 0x7b, 0x98, 0x8e, 0xa9, 0xe2, 0xff, 0xfe, 0x05, 0x5c, 0x7d, 0x06, 0x00, 0x00, 0xff, 0xff, + 0xaa, 0x31, 0x7d, 0x8e, 0xee, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -152,7 +153,7 @@ func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoService func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -161,7 +162,7 @@ func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *Unannotated func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -170,7 +171,7 @@ func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *Unannot func (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } @@ -218,7 +219,7 @@ func _UnannotatedEchoService_Echo_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.UnannotatedEchoService/Echo", + FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).Echo(ctx, req.(*UnannotatedSimpleMessage)) @@ -236,7 +237,7 @@ func _UnannotatedEchoService_EchoBody_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoBody", + FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).EchoBody(ctx, req.(*UnannotatedSimpleMessage)) @@ -254,7 +255,7 @@ func _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.UnannotatedEchoService/EchoDelete", + FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).EchoDelete(ctx, req.(*UnannotatedSimpleMessage)) @@ -263,7 +264,7 @@ func _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Con } var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.UnannotatedEchoService", + ServiceName: "grpc.gateway.examples.internal.examplepb.UnannotatedEchoService", HandlerType: (*UnannotatedEchoServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -280,5 +281,5 @@ var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/unannotated_echo_service.proto", + Metadata: "examples/internal/proto/examplepb/unannotated_echo_service.proto", } diff --git a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go similarity index 99% rename from examples/proto/examplepb/unannotated_echo_service.pb.gw.go rename to examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 27258d252ad..8936c57c0aa 100644 --- a/examples/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/unannotated_echo_service.proto +// source: examples/internal/proto/examplepb/unannotated_echo_service.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/unannotated_echo_service.proto b/examples/internal/proto/examplepb/unannotated_echo_service.proto similarity index 96% rename from examples/proto/examplepb/unannotated_echo_service.proto rename to examples/internal/proto/examplepb/unannotated_echo_service.proto index 6c3dbfeaf9a..4f926d3c6fc 100644 --- a/examples/proto/examplepb/unannotated_echo_service.proto +++ b/examples/internal/proto/examplepb/unannotated_echo_service.proto @@ -8,7 +8,7 @@ option go_package = "examplepb"; // // Echo Service API consists of a single service which returns // a message. -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; // Do not need annotations.proto, can still use well known types as usual import "google/protobuf/duration.proto"; diff --git a/examples/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json similarity index 99% rename from examples/proto/examplepb/unannotated_echo_service.swagger.json rename to examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index c33a67d98f6..36720e9367b 100644 --- a/examples/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/unannotated_echo_service.proto", + "title": "examples/internal/proto/examplepb/unannotated_echo_service.proto", "description": "Unannotated Echo Service\nSimilar to echo_service.proto but without annotations. See\nunannotated_echo_service.yaml for the equivalent of the annotations in\ngRPC API configuration format.\n\nEcho Service API consists of a single service which returns\na message.", "version": "version not set" }, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.yaml new file mode 100644 index 00000000000..0f14d1fa2fb --- /dev/null +++ b/examples/internal/proto/examplepb/unannotated_echo_service.yaml @@ -0,0 +1,15 @@ +type: google.api.Service +config_version: 3 + +http: + rules: + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo + post: "/v1/example/echo/{id}" + additional_bindings: + - get: "/v1/example/echo/{id}/{num}" + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody + post: "/v1/example/echo_body" + body: "*" + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete + delete: "/v1/example/echo_delete" + diff --git a/examples/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go similarity index 81% rename from examples/proto/examplepb/use_go_template.pb.go rename to examples/internal/proto/examplepb/use_go_template.pb.go index 46e939310ac..6eac47ee393 100644 --- a/examples/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/use_go_template.proto +// source: examples/internal/proto/examplepb/use_go_template.proto package examplepb @@ -39,7 +39,7 @@ func (m *LoginRequest) Reset() { *m = LoginRequest{} } func (m *LoginRequest) String() string { return proto.CompactTextString(m) } func (*LoginRequest) ProtoMessage() {} func (*LoginRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_11d6ea622d77f66b, []int{0} + return fileDescriptor_ed0d8910d38fbb31, []int{0} } func (m *LoginRequest) XXX_Unmarshal(b []byte) error { @@ -87,7 +87,7 @@ func (m *LoginReply) Reset() { *m = LoginReply{} } func (m *LoginReply) String() string { return proto.CompactTextString(m) } func (*LoginReply) ProtoMessage() {} func (*LoginReply) Descriptor() ([]byte, []int) { - return fileDescriptor_11d6ea622d77f66b, []int{1} + return fileDescriptor_ed0d8910d38fbb31, []int{1} } func (m *LoginReply) XXX_Unmarshal(b []byte) error { @@ -146,7 +146,7 @@ func (m *LogoutRequest) Reset() { *m = LogoutRequest{} } func (m *LogoutRequest) String() string { return proto.CompactTextString(m) } func (*LogoutRequest) ProtoMessage() {} func (*LogoutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_11d6ea622d77f66b, []int{2} + return fileDescriptor_ed0d8910d38fbb31, []int{2} } func (m *LogoutRequest) XXX_Unmarshal(b []byte) error { @@ -201,7 +201,7 @@ func (m *LogoutReply) Reset() { *m = LogoutReply{} } func (m *LogoutReply) String() string { return proto.CompactTextString(m) } func (*LogoutReply) ProtoMessage() {} func (*LogoutReply) Descriptor() ([]byte, []int) { - return fileDescriptor_11d6ea622d77f66b, []int{3} + return fileDescriptor_ed0d8910d38fbb31, []int{3} } func (m *LogoutReply) XXX_Unmarshal(b []byte) error { @@ -230,41 +230,42 @@ func (m *LogoutReply) GetMessage() string { } func init() { - proto.RegisterType((*LoginRequest)(nil), "grpc.gateway.examples.examplepb.LoginRequest") - proto.RegisterType((*LoginReply)(nil), "grpc.gateway.examples.examplepb.LoginReply") - proto.RegisterType((*LogoutRequest)(nil), "grpc.gateway.examples.examplepb.LogoutRequest") - proto.RegisterType((*LogoutReply)(nil), "grpc.gateway.examples.examplepb.LogoutReply") + proto.RegisterType((*LoginRequest)(nil), "grpc.gateway.examples.internal.examplepb.LoginRequest") + proto.RegisterType((*LoginReply)(nil), "grpc.gateway.examples.internal.examplepb.LoginReply") + proto.RegisterType((*LogoutRequest)(nil), "grpc.gateway.examples.internal.examplepb.LogoutRequest") + proto.RegisterType((*LogoutReply)(nil), "grpc.gateway.examples.internal.examplepb.LogoutReply") } func init() { - proto.RegisterFile("examples/proto/examplepb/use_go_template.proto", fileDescriptor_11d6ea622d77f66b) -} - -var fileDescriptor_11d6ea622d77f66b = []byte{ - // 360 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0x31, 0x4e, 0xeb, 0x40, - 0x14, 0x94, 0x93, 0x9f, 0xfc, 0xe4, 0x25, 0xbf, 0xf8, 0x5b, 0x04, 0xcb, 0x0a, 0x22, 0xda, 0x86, - 0x28, 0x80, 0x2d, 0xa0, 0x4b, 0x41, 0x41, 0x41, 0x95, 0xca, 0x74, 0x34, 0xd1, 0xc6, 0x3c, 0x56, - 0x96, 0x6c, 0xef, 0xb2, 0xbb, 0x4e, 0x70, 0x09, 0x12, 0x27, 0xa0, 0xe3, 0x5a, 0x5c, 0x81, 0x83, - 0xa0, 0x6c, 0x6c, 0x13, 0x28, 0x20, 0x9d, 0x67, 0xe6, 0xcd, 0x78, 0x34, 0x36, 0xf8, 0xf8, 0xc0, - 0x52, 0x99, 0xa0, 0x0e, 0xa4, 0x12, 0x46, 0x04, 0x25, 0x94, 0x8b, 0x20, 0xd7, 0x38, 0xe7, 0x62, - 0x6e, 0x30, 0x95, 0x09, 0x33, 0xe8, 0x5b, 0x9d, 0x1c, 0x70, 0x25, 0x23, 0x9f, 0x33, 0x83, 0x2b, - 0x56, 0xd4, 0x66, 0xbf, 0xb6, 0x79, 0x43, 0x2e, 0x04, 0x4f, 0x30, 0x60, 0x32, 0x0e, 0x58, 0x96, - 0x09, 0xc3, 0x4c, 0x2c, 0x32, 0xbd, 0xb1, 0xd3, 0x2b, 0xe8, 0xcf, 0x04, 0x8f, 0xb3, 0x10, 0xef, - 0x73, 0xd4, 0x86, 0x78, 0xd0, 0xc9, 0x35, 0xaa, 0x8c, 0xa5, 0xe8, 0x3a, 0x23, 0x67, 0xdc, 0x0d, - 0x6b, 0xbc, 0xd6, 0x24, 0xd3, 0x7a, 0x25, 0xd4, 0xad, 0xdb, 0xd8, 0x68, 0x15, 0xa6, 0x17, 0x00, - 0x65, 0x8e, 0x4c, 0x0a, 0xe2, 0xc2, 0xdf, 0x14, 0xb5, 0x66, 0xbc, 0x0a, 0xa9, 0x20, 0x19, 0x40, - 0x9b, 0x45, 0x11, 0x6a, 0x6d, 0x13, 0x3a, 0x61, 0x89, 0x68, 0x0c, 0xff, 0x66, 0x82, 0x8b, 0xdc, - 0x54, 0x45, 0x28, 0xf4, 0x4d, 0x9c, 0xa2, 0xb8, 0x4b, 0x2c, 0x5d, 0xe6, 0x7c, 0xe1, 0x08, 0x81, - 0x3f, 0x06, 0xb5, 0xb1, 0x51, 0xad, 0xd0, 0x3e, 0x93, 0x11, 0xf4, 0xb4, 0x51, 0x71, 0xc6, 0x99, - 0x52, 0xac, 0x70, 0x9b, 0xa3, 0xe6, 0xb8, 0x1b, 0x6e, 0x53, 0xf4, 0x10, 0x7a, 0xd5, 0xab, 0x7e, - 0xec, 0x7a, 0xf6, 0xda, 0x28, 0xc7, 0xb9, 0x46, 0xb5, 0x8c, 0x23, 0x24, 0x8f, 0x0e, 0xb4, 0x2c, - 0x41, 0x4e, 0xfc, 0x5f, 0x66, 0xf7, 0xb7, 0x57, 0xf5, 0x8e, 0x76, 0x3d, 0x97, 0x49, 0x41, 0x87, - 0x4f, 0x6f, 0xef, 0x2f, 0x8d, 0x01, 0xfd, 0x1f, 0x2c, 0x4f, 0xab, 0xcf, 0x1f, 0x24, 0x6b, 0x7d, - 0xea, 0x4c, 0xc8, 0xb3, 0x03, 0xed, 0x4d, 0x7d, 0xe2, 0xef, 0x92, 0xfa, 0x39, 0xa9, 0x77, 0xbc, - 0xf3, 0xfd, 0xba, 0xc6, 0xbe, 0xad, 0xb1, 0x47, 0xc9, 0xb7, 0x1a, 0x22, 0x37, 0x53, 0x67, 0x72, - 0xd9, 0xbb, 0xe9, 0xd6, 0xbe, 0x45, 0xdb, 0xfe, 0x4c, 0xe7, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xf3, 0xee, 0xed, 0x28, 0xbd, 0x02, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/use_go_template.proto", fileDescriptor_ed0d8910d38fbb31) +} + +var fileDescriptor_ed0d8910d38fbb31 = []byte{ + // 373 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbd, 0x8e, 0x1a, 0x31, + 0x14, 0x85, 0x35, 0x10, 0x08, 0x18, 0x52, 0xc4, 0x05, 0x19, 0x8d, 0x88, 0x84, 0xdc, 0x04, 0x51, + 0x8c, 0x95, 0x5f, 0x24, 0x8a, 0x14, 0x29, 0x52, 0x51, 0x4d, 0xba, 0x34, 0xc8, 0x4c, 0x6e, 0x2c, + 0x4b, 0x9e, 0xb1, 0x63, 0x7b, 0x20, 0xd3, 0xee, 0x2b, 0x50, 0xec, 0xdb, 0xec, 0x4b, 0xec, 0x2b, + 0xec, 0x83, 0xac, 0xc6, 0x8c, 0x59, 0x76, 0x8b, 0xd5, 0xd2, 0xcd, 0x3d, 0x57, 0xe7, 0x9b, 0xe3, + 0xa3, 0x8b, 0x96, 0xf0, 0x9f, 0x15, 0x5a, 0x82, 0xa5, 0xa2, 0x74, 0x60, 0x4a, 0x26, 0xa9, 0x36, + 0xca, 0x29, 0xda, 0xea, 0x7a, 0x4b, 0x2b, 0x0b, 0x1b, 0xae, 0x36, 0x0e, 0x0a, 0x2d, 0x99, 0x83, + 0xd4, 0xef, 0xf1, 0x9c, 0x1b, 0x9d, 0xa7, 0x9c, 0x39, 0xd8, 0xb3, 0x3a, 0x0d, 0x94, 0x34, 0x50, + 0xd2, 0x93, 0x3f, 0x99, 0x72, 0xa5, 0xb8, 0x04, 0xca, 0xb4, 0xa0, 0xac, 0x2c, 0x95, 0x63, 0x4e, + 0xa8, 0xd2, 0x1e, 0x39, 0xe4, 0x27, 0x1a, 0xaf, 0x15, 0x17, 0x65, 0x06, 0xff, 0x2a, 0xb0, 0x0e, + 0x27, 0x68, 0x50, 0xd9, 0x06, 0x51, 0x40, 0x1c, 0xcd, 0xa2, 0xf9, 0x30, 0x3b, 0xcd, 0xcd, 0x4e, + 0x33, 0x6b, 0xf7, 0xca, 0xfc, 0x89, 0x3b, 0xc7, 0x5d, 0x98, 0xc9, 0x77, 0x84, 0x5a, 0x8e, 0x96, + 0x35, 0x8e, 0xd1, 0xeb, 0x02, 0xac, 0x65, 0x3c, 0x40, 0xc2, 0x88, 0x27, 0xa8, 0xcf, 0xf2, 0x1c, + 0xac, 0xf5, 0x84, 0x41, 0xd6, 0x4e, 0x44, 0xa0, 0x37, 0x6b, 0xc5, 0x55, 0xe5, 0x42, 0x10, 0x82, + 0xc6, 0x4e, 0x14, 0xa0, 0xfe, 0x4a, 0x2f, 0xb7, 0x9c, 0x47, 0x1a, 0xc6, 0xe8, 0x95, 0x03, 0xeb, + 0x3c, 0xaa, 0x97, 0xf9, 0x6f, 0x3c, 0x43, 0x23, 0xeb, 0x8c, 0x28, 0x39, 0x33, 0x86, 0xd5, 0x71, + 0x77, 0xd6, 0x9d, 0x0f, 0xb3, 0x73, 0x89, 0x7c, 0x40, 0xa3, 0xf0, 0xab, 0x67, 0xb3, 0x7e, 0xba, + 0xe9, 0xb4, 0xe5, 0xfc, 0x02, 0xb3, 0x13, 0x39, 0xe0, 0x43, 0x84, 0x7a, 0x5e, 0xc0, 0xdf, 0xd2, + 0x97, 0xf6, 0x9f, 0x9e, 0xd7, 0x9b, 0x7c, 0xb9, 0xd8, 0xa7, 0x65, 0x4d, 0xa6, 0x57, 0xb7, 0x77, + 0x87, 0xce, 0x84, 0xbc, 0xa5, 0xbb, 0x8f, 0xe1, 0x32, 0xa8, 0x6c, 0xf6, 0xab, 0x68, 0x81, 0xaf, + 0x23, 0xd4, 0x3f, 0x3e, 0x08, 0x2f, 0x2f, 0xc2, 0x3f, 0xb4, 0x9d, 0x7c, 0xbd, 0xdc, 0xd8, 0x04, + 0x7b, 0xef, 0x83, 0xbd, 0x23, 0xf8, 0x49, 0x30, 0x55, 0xb9, 0x55, 0xb4, 0xf8, 0x31, 0xfa, 0x3d, + 0x3c, 0xf9, 0xb6, 0x7d, 0x7f, 0x70, 0x9f, 0xef, 0x03, 0x00, 0x00, 0xff, 0xff, 0x2d, 0xc0, 0x42, + 0xdb, 0xf3, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -321,7 +322,7 @@ func NewLoginServiceClient(cc *grpc.ClientConn) LoginServiceClient { func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error) { out := new(LoginReply) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.LoginService/Login", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.LoginService/Login", in, out, opts...) if err != nil { return nil, err } @@ -330,7 +331,7 @@ func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts . func (c *loginServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error) { out := new(LogoutReply) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.LoginService/Logout", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout", in, out, opts...) if err != nil { return nil, err } @@ -396,7 +397,7 @@ func _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.LoginService/Login", + FullMethod: "/grpc.gateway.examples.internal.examplepb.LoginService/Login", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(LoginServiceServer).Login(ctx, req.(*LoginRequest)) @@ -414,7 +415,7 @@ func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.LoginService/Logout", + FullMethod: "/grpc.gateway.examples.internal.examplepb.LoginService/Logout", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(LoginServiceServer).Logout(ctx, req.(*LogoutRequest)) @@ -423,7 +424,7 @@ func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func } var _LoginService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.LoginService", + ServiceName: "grpc.gateway.examples.internal.examplepb.LoginService", HandlerType: (*LoginServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -436,5 +437,5 @@ var _LoginService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/use_go_template.proto", + Metadata: "examples/internal/proto/examplepb/use_go_template.proto", } diff --git a/examples/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go similarity index 99% rename from examples/proto/examplepb/use_go_template.pb.gw.go rename to examples/internal/proto/examplepb/use_go_template.pb.gw.go index 68236c143ee..5019a18f448 100644 --- a/examples/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/use_go_template.proto +// source: examples/internal/proto/examplepb/use_go_template.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/use_go_template.proto b/examples/internal/proto/examplepb/use_go_template.proto similarity index 98% rename from examples/proto/examplepb/use_go_template.proto rename to examples/internal/proto/examplepb/use_go_template.proto index 5a1b3161630..706fd8f136a 100644 --- a/examples/proto/examplepb/use_go_template.proto +++ b/examples/internal/proto/examplepb/use_go_template.proto @@ -1,6 +1,6 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; @@ -82,4 +82,4 @@ message LogoutReply { // Message that tells you whether your // logout was succesful or not string message = 1; -} \ No newline at end of file +} diff --git a/examples/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json similarity index 99% rename from examples/proto/examplepb/use_go_template.swagger.json rename to examples/internal/proto/examplepb/use_go_template.swagger.json index c85ad10e119..642ab4539fa 100644 --- a/examples/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/use_go_template.proto", + "title": "examples/internal/proto/examplepb/use_go_template.proto", "version": "version not set" }, "consumes": [ diff --git a/examples/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go similarity index 76% rename from examples/proto/examplepb/wrappers.pb.go rename to examples/internal/proto/examplepb/wrappers.pb.go index fa9e68e2d30..bdba354be83 100644 --- a/examples/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/examplepb/wrappers.proto +// source: examples/internal/proto/examplepb/wrappers.proto package examplepb @@ -46,7 +46,7 @@ func (m *Wrappers) Reset() { *m = Wrappers{} } func (m *Wrappers) String() string { return proto.CompactTextString(m) } func (*Wrappers) ProtoMessage() {} func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_aa1e7ec5682437b9, []int{0} + return fileDescriptor_70304970d74748a4, []int{0} } func (m *Wrappers) XXX_Unmarshal(b []byte) error { @@ -131,52 +131,52 @@ func (m *Wrappers) GetBytesValue() *wrappers.BytesValue { } func init() { - proto.RegisterType((*Wrappers)(nil), "grpc.gateway.examples.examplepb.Wrappers") + proto.RegisterType((*Wrappers)(nil), "grpc.gateway.examples.internal.examplepb.Wrappers") } func init() { - proto.RegisterFile("examples/proto/examplepb/wrappers.proto", fileDescriptor_aa1e7ec5682437b9) -} - -var fileDescriptor_aa1e7ec5682437b9 = []byte{ - // 578 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, - 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x18, 0xca, 0x0d, 0xb0, - 0x8b, 0x44, 0x74, 0x55, 0x25, 0x26, 0x24, 0xa4, 0xf2, 0x21, 0x71, 0xcb, 0x34, 0x26, 0x71, 0x83, - 0xec, 0xcd, 0x8d, 0x82, 0xb2, 0x38, 0x4a, 0x9c, 0x8e, 0x5e, 0x21, 0xf1, 0x0a, 0x3c, 0x00, 0xcf, - 0xc2, 0x33, 0xf0, 0x0a, 0x3c, 0x08, 0xf2, 0x57, 0x3e, 0x9a, 0xe5, 0xc0, 0x9d, 0x9d, 0xff, 0xf9, - 0x9d, 0x7f, 0x7d, 0x7c, 0x8e, 0x8b, 0x9e, 0xf0, 0xaf, 0xf4, 0x32, 0x4b, 0x78, 0x11, 0x66, 0xb9, - 0x90, 0x22, 0xb4, 0xdb, 0x8c, 0x85, 0x57, 0x39, 0xcd, 0x32, 0x9e, 0x17, 0x81, 0x16, 0xf0, 0x41, - 0x94, 0x67, 0xe7, 0x41, 0x44, 0x25, 0xbf, 0xa2, 0xcb, 0xc0, 0x51, 0x41, 0x15, 0x4f, 0xf6, 0x23, - 0x21, 0xa2, 0x84, 0x87, 0x34, 0x8b, 0x43, 0x9a, 0xa6, 0x42, 0x52, 0x19, 0x8b, 0xd4, 0xe2, 0xe4, - 0x91, 0x55, 0xf5, 0x8e, 0x95, 0xf3, 0x95, 0xf4, 0x64, 0x6f, 0x55, 0xe7, 0x97, 0x99, 0x5c, 0x1a, - 0xd1, 0xff, 0xb5, 0x8e, 0x36, 0xce, 0x6c, 0x3c, 0x7e, 0x85, 0x36, 0x0b, 0x99, 0xc7, 0x69, 0xf4, - 0x79, 0x41, 0x93, 0x92, 0xef, 0x0c, 0x1e, 0x0f, 0x9e, 0x7a, 0xe3, 0xfd, 0xc0, 0x24, 0x08, 0x5c, - 0x82, 0xe0, 0x44, 0x07, 0x7d, 0x54, 0x31, 0x1f, 0xbc, 0xa2, 0xde, 0xe0, 0x97, 0xc8, 0x8b, 0x53, - 0x79, 0x34, 0xb6, 0xfc, 0x9a, 0xe6, 0xf7, 0x3a, 0xfc, 0x7b, 0x15, 0x63, 0x70, 0x14, 0x57, 0x6b, - 0x4b, 0x4f, 0x27, 0x96, 0xbe, 0xd1, 0x4f, 0x4f, 0x27, 0x35, 0x6d, 0xd7, 0x8a, 0x9e, 0x27, 0x82, - 0x4a, 0x4b, 0xaf, 0xf7, 0xd0, 0xef, 0x54, 0x8c, 0xa5, 0xe7, 0xd5, 0x5a, 0x1d, 0xfd, 0x42, 0x94, - 0x2c, 0xe1, 0x16, 0xbf, 0xd9, 0x73, 0xf4, 0x37, 0x3a, 0xc8, 0x1e, 0xfd, 0xa2, 0xde, 0xe0, 0x17, - 0x08, 0x31, 0x21, 0x12, 0x8b, 0x0f, 0x35, 0x4e, 0x3a, 0xf8, 0x4c, 0x88, 0xc4, 0xc0, 0x23, 0xe6, - 0x96, 0xca, 0xbb, 0x6c, 0x96, 0xed, 0x56, 0x8f, 0xf7, 0x69, 0xa3, 0x6e, 0x5e, 0xd9, 0x28, 0x9c, - 0x4d, 0x50, 0x55, 0x6e, 0x03, 0x48, 0xe0, 0x4a, 0xe7, 0x95, 0xed, 0xda, 0xb1, 0xa5, 0xe4, 0x85, - 0xe5, 0x47, 0x3d, 0xb5, 0x9b, 0xa9, 0x18, 0x5b, 0x3b, 0x56, 0xad, 0xc7, 0x3f, 0x47, 0x68, 0xcb, - 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, 0xc7, 0xdf, 0xd0, 0xf0, 0x75, 0xce, 0xa9, 0xe4, 0xf8, - 0x59, 0xf0, 0x8f, 0xf6, 0x0e, 0x1c, 0x4b, 0xfe, 0x3f, 0xd4, 0x3f, 0xf8, 0xfe, 0xfb, 0xcf, 0x8f, - 0xb5, 0x5d, 0xff, 0x7e, 0xb8, 0x78, 0xee, 0x26, 0xab, 0x6a, 0xfc, 0xe3, 0xc1, 0x21, 0xfe, 0x82, - 0xb6, 0xcd, 0x0f, 0x68, 0x34, 0x2b, 0x06, 0x5b, 0x99, 0x80, 0xaa, 0xbf, 0xab, 0x1d, 0xef, 0xf9, - 0x77, 0x94, 0xa3, 0xe4, 0x85, 0x34, 0xa2, 0xf2, 0x9a, 0xa3, 0xbb, 0xc6, 0xab, 0xbe, 0x20, 0x0c, - 0x75, 0x3d, 0x81, 0x44, 0x7f, 0x47, 0x1b, 0x61, 0xff, 0xb6, 0x33, 0xd2, 0xda, 0xaa, 0x8f, 0xbb, - 0x3a, 0x68, 0x3e, 0x08, 0x24, 0x5e, 0xeb, 0x33, 0x9d, 0xb4, 0x7c, 0xea, 0x61, 0xc1, 0xd0, 0x24, - 0x11, 0x48, 0xec, 0xfa, 0x68, 0xad, 0x75, 0x47, 0x8d, 0xa9, 0xc2, 0xe0, 0xcc, 0x11, 0x50, 0xed, - 0xde, 0x91, 0x11, 0x95, 0x17, 0x43, 0x5b, 0xc6, 0xab, 0x1a, 0x41, 0x0c, 0x8c, 0x27, 0x01, 0x34, - 0xff, 0xa1, 0x76, 0xd9, 0xf6, 0x37, 0x9d, 0x8b, 0x92, 0x5a, 0xe7, 0x69, 0x4c, 0x2a, 0x06, 0xe7, - 0x98, 0x80, 0x6a, 0xf7, 0x3c, 0xa7, 0xb1, 0xeb, 0x85, 0x96, 0x97, 0x6b, 0x06, 0x70, 0xe4, 0x09, - 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, 0xf5, 0x03, 0x80, 0xa1, 0xd7, 0x81, 0x40, 0x62, 0xb7, 0x1f, - 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, 0x7c, 0xde, 0xaa, 0x7f, 0x28, 0xfc, 0xa0, 0x93, 0x45, 0x7f, - 0x27, 0x3d, 0xdf, 0xbb, 0x89, 0xf5, 0xe7, 0xe3, 0xc1, 0xe1, 0xcc, 0xfb, 0x34, 0xaa, 0xde, 0x10, - 0x36, 0xd4, 0xd8, 0xd1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x05, 0x83, 0xaf, 0x71, 0xa0, 0x07, - 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/examplepb/wrappers.proto", fileDescriptor_70304970d74748a4) +} + +var fileDescriptor_70304970d74748a4 = []byte{ + // 587 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, + 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x00, 0xe5, 0x6a, 0xda, + 0x85, 0x03, 0x5d, 0x55, 0x89, 0x09, 0x09, 0xa9, 0x7c, 0x48, 0xdc, 0x32, 0x8d, 0x49, 0xdc, 0x20, + 0x67, 0x73, 0xa3, 0xa0, 0x2c, 0x8e, 0x12, 0xa7, 0xa3, 0xb7, 0xbc, 0x01, 0xe2, 0x4d, 0x78, 0x03, + 0x9e, 0x81, 0x57, 0xe0, 0x41, 0x90, 0xbf, 0xf2, 0xd1, 0x2c, 0x47, 0x68, 0x77, 0x8e, 0xff, 0xe7, + 0x77, 0xfe, 0xf5, 0xf1, 0x39, 0x2e, 0x7a, 0xce, 0xbf, 0xb1, 0xcb, 0x2c, 0xe1, 0x45, 0x10, 0xa7, + 0x92, 0xe7, 0x29, 0x4b, 0x82, 0x2c, 0x17, 0x52, 0x04, 0x76, 0x3f, 0x0b, 0x83, 0xab, 0x9c, 0x65, + 0x19, 0xcf, 0x0b, 0xaa, 0x05, 0x7c, 0x10, 0xe5, 0xd9, 0x39, 0x8d, 0x98, 0xe4, 0x57, 0x6c, 0x49, + 0x1d, 0x4e, 0x1d, 0x4e, 0x2b, 0x90, 0xec, 0x47, 0x42, 0x44, 0x09, 0x0f, 0x58, 0x16, 0x07, 0x2c, + 0x4d, 0x85, 0x64, 0x32, 0x16, 0xa9, 0xcd, 0x43, 0x9e, 0x58, 0x55, 0x7f, 0x85, 0xe5, 0x7c, 0xc5, + 0x87, 0xec, 0xad, 0xea, 0xfc, 0x32, 0x93, 0x4b, 0x23, 0xfa, 0xbf, 0xd7, 0xd1, 0xc6, 0x99, 0x8d, + 0xc7, 0xaf, 0xd1, 0x66, 0x21, 0xf3, 0x38, 0x8d, 0xbe, 0x2c, 0x58, 0x52, 0xf2, 0x9d, 0xc1, 0xb3, + 0xc1, 0x81, 0x37, 0xde, 0xa7, 0x26, 0x01, 0x75, 0x09, 0xe8, 0x89, 0x0e, 0xfa, 0xa4, 0x62, 0x3e, + 0x7a, 0x45, 0xfd, 0x81, 0x5f, 0x21, 0x2f, 0x4e, 0xe5, 0xd1, 0xd8, 0xf2, 0x6b, 0x9a, 0xdf, 0xeb, + 0xf0, 0x1f, 0x54, 0x8c, 0xc1, 0x51, 0x5c, 0xad, 0x2d, 0x3d, 0x9d, 0x58, 0xfa, 0x56, 0x3f, 0x3d, + 0x9d, 0xd4, 0xb4, 0x5d, 0x2b, 0x7a, 0x9e, 0x08, 0x26, 0x2d, 0xbd, 0xde, 0x43, 0xbf, 0x57, 0x31, + 0x96, 0x9e, 0x57, 0x6b, 0x75, 0xf4, 0x0b, 0x51, 0x86, 0x09, 0xb7, 0xf8, 0xed, 0x9e, 0xa3, 0xbf, + 0xd5, 0x41, 0xf6, 0xe8, 0x17, 0xf5, 0x07, 0x7e, 0x89, 0x50, 0x28, 0x44, 0x62, 0xf1, 0xa1, 0xc6, + 0x49, 0x07, 0x9f, 0x09, 0x91, 0x18, 0x78, 0x14, 0xba, 0xa5, 0xf2, 0x2e, 0x9b, 0x65, 0xbb, 0xd3, + 0xe3, 0x7d, 0xda, 0xa8, 0x9b, 0x57, 0x36, 0x0a, 0x67, 0x13, 0x54, 0x95, 0xdb, 0x00, 0x12, 0xb8, + 0xd2, 0x79, 0x65, 0xbb, 0x76, 0xe1, 0x52, 0xf2, 0xc2, 0xf2, 0xa3, 0x9e, 0xda, 0xcd, 0x54, 0x8c, + 0xad, 0x5d, 0x58, 0xad, 0xc7, 0xbf, 0x46, 0x68, 0xcb, 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, + 0xc7, 0x3f, 0x06, 0x68, 0xf8, 0x26, 0xe7, 0x4c, 0x72, 0x3c, 0xa6, 0xff, 0xdb, 0xe8, 0xd4, 0x65, + 0x21, 0x37, 0x60, 0xfc, 0xa7, 0xdf, 0xff, 0xfc, 0xfd, 0xb9, 0xb6, 0xeb, 0x3f, 0x0c, 0x16, 0x2f, + 0xdc, 0xd4, 0x55, 0xb3, 0x70, 0x3c, 0x38, 0xc4, 0x5f, 0xd1, 0xb6, 0xf9, 0x49, 0x8d, 0xfe, 0xc5, + 0x60, 0x77, 0x13, 0x50, 0xf5, 0x77, 0xb5, 0xe3, 0x03, 0xff, 0x9e, 0x72, 0x94, 0xbc, 0x90, 0x46, + 0x54, 0x5e, 0x73, 0x74, 0xdf, 0x78, 0xd5, 0x77, 0x86, 0xa1, 0x41, 0x20, 0x90, 0xe8, 0xef, 0x68, + 0x23, 0xec, 0xdf, 0x75, 0x46, 0x5a, 0x5b, 0xf5, 0x71, 0xb7, 0x09, 0x8d, 0x0c, 0x81, 0xc4, 0x6b, + 0x7d, 0xa6, 0x93, 0x96, 0x4f, 0x3d, 0x3f, 0x18, 0x1a, 0x2e, 0x02, 0x89, 0x5d, 0x1f, 0xad, 0xb5, + 0xee, 0xa8, 0x31, 0x68, 0x18, 0x1c, 0x43, 0x02, 0xaa, 0xdd, 0x3b, 0x32, 0xa2, 0xf2, 0x0a, 0xd1, + 0x96, 0xf1, 0xaa, 0xa6, 0x12, 0x03, 0x13, 0x4b, 0x00, 0xcd, 0x7f, 0xac, 0x5d, 0xb6, 0xfd, 0x4d, + 0xe7, 0xa2, 0xa4, 0xd6, 0x79, 0x1a, 0xc3, 0x8b, 0xc1, 0xd1, 0x26, 0xa0, 0xda, 0x3d, 0xcf, 0x69, + 0xec, 0x7a, 0xa1, 0xe5, 0xe5, 0x9a, 0x01, 0x7c, 0x05, 0x08, 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, + 0xf5, 0x9b, 0x80, 0xa1, 0x07, 0x83, 0x40, 0x62, 0xb7, 0x1f, 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, + 0x7c, 0xde, 0xa9, 0x3f, 0x2d, 0xfc, 0xa8, 0x93, 0x45, 0xef, 0x93, 0x9e, 0xfd, 0x6e, 0x62, 0xbd, + 0x7d, 0x3c, 0x38, 0x9c, 0x79, 0x9f, 0x47, 0xd5, 0x1b, 0x12, 0x0e, 0x35, 0x76, 0xf4, 0x2f, 0x00, + 0x00, 0xff, 0xff, 0xfe, 0xb0, 0x38, 0x00, 0xc5, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -214,7 +214,7 @@ func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) { out := new(Wrappers) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/Create", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create", in, out, opts...) if err != nil { return nil, err } @@ -223,7 +223,7 @@ func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts . func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) { out := new(wrappers.StringValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateStringValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue", in, out, opts...) if err != nil { return nil, err } @@ -232,7 +232,7 @@ func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) { out := new(wrappers.Int32Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateInt32Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value", in, out, opts...) if err != nil { return nil, err } @@ -241,7 +241,7 @@ func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) { out := new(wrappers.Int64Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateInt64Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value", in, out, opts...) if err != nil { return nil, err } @@ -250,7 +250,7 @@ func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) { out := new(wrappers.FloatValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateFloatValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue", in, out, opts...) if err != nil { return nil, err } @@ -259,7 +259,7 @@ func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) { out := new(wrappers.DoubleValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) if err != nil { return nil, err } @@ -268,7 +268,7 @@ func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) { out := new(wrappers.BoolValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateBoolValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue", in, out, opts...) if err != nil { return nil, err } @@ -277,7 +277,7 @@ func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrapper func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) { out := new(wrappers.UInt32Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) if err != nil { return nil, err } @@ -286,7 +286,7 @@ func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) { out := new(wrappers.UInt64Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) if err != nil { return nil, err } @@ -295,7 +295,7 @@ func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) { out := new(wrappers.BytesValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateBytesValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue", in, out, opts...) if err != nil { return nil, err } @@ -304,7 +304,7 @@ func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.examplepb.WrappersService/CreateEmpty", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty", in, out, opts...) if err != nil { return nil, err } @@ -378,7 +378,7 @@ func _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/Create", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/Create", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).Create(ctx, req.(*Wrappers)) @@ -396,7 +396,7 @@ func _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateStringValue", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrappers.StringValue)) @@ -414,7 +414,7 @@ func _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateInt32Value", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrappers.Int32Value)) @@ -432,7 +432,7 @@ func _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateInt64Value", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrappers.Int64Value)) @@ -450,7 +450,7 @@ func _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateFloatValue", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrappers.FloatValue)) @@ -468,7 +468,7 @@ func _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateDoubleValue", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrappers.DoubleValue)) @@ -486,7 +486,7 @@ func _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateBoolValue", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrappers.BoolValue)) @@ -504,7 +504,7 @@ func _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt32Value", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrappers.UInt32Value)) @@ -522,7 +522,7 @@ func _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateUInt64Value", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrappers.UInt64Value)) @@ -540,7 +540,7 @@ func _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateBytesValue", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrappers.BytesValue)) @@ -558,7 +558,7 @@ func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.examplepb.WrappersService/CreateEmpty", + FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*empty.Empty)) @@ -567,7 +567,7 @@ func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, } var _WrappersService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.examplepb.WrappersService", + ServiceName: "grpc.gateway.examples.internal.examplepb.WrappersService", HandlerType: (*WrappersServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -616,5 +616,5 @@ var _WrappersService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "examples/proto/examplepb/wrappers.proto", + Metadata: "examples/internal/proto/examplepb/wrappers.proto", } diff --git a/examples/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go similarity index 99% rename from examples/proto/examplepb/wrappers.pb.gw.go rename to examples/internal/proto/examplepb/wrappers.pb.gw.go index edb9b10a020..d6868454185 100644 --- a/examples/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: examples/proto/examplepb/wrappers.proto +// source: examples/internal/proto/examplepb/wrappers.proto /* Package examplepb is a reverse proxy. diff --git a/examples/proto/examplepb/wrappers.proto b/examples/internal/proto/examplepb/wrappers.proto similarity index 97% rename from examples/proto/examplepb/wrappers.proto rename to examples/internal/proto/examplepb/wrappers.proto index 48ce5a8ec6e..739e60e1f31 100644 --- a/examples/proto/examplepb/wrappers.proto +++ b/examples/internal/proto/examplepb/wrappers.proto @@ -1,6 +1,6 @@ syntax = "proto3"; option go_package = "examplepb"; -package grpc.gateway.examples.examplepb; +package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; import "google/protobuf/wrappers.proto"; diff --git a/examples/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json similarity index 99% rename from examples/proto/examplepb/wrappers.swagger.json rename to examples/internal/proto/examplepb/wrappers.swagger.json index b6a93601d36..d42d6f3fb6b 100644 --- a/examples/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "examples/proto/examplepb/wrappers.proto", + "title": "examples/internal/proto/examplepb/wrappers.proto", "version": "version not set" }, "consumes": [ diff --git a/examples/proto/pathenum/BUILD.bazel b/examples/internal/proto/pathenum/BUILD.bazel similarity index 91% rename from examples/proto/pathenum/BUILD.bazel rename to examples/internal/proto/pathenum/BUILD.bazel index 06d17fc4483..d4a69e0316a 100644 --- a/examples/proto/pathenum/BUILD.bazel +++ b/examples/internal/proto/pathenum/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "pathenum_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum", proto = ":pathenum_proto", ) go_library( name = "go_default_library", embed = [":pathenum_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum", ) diff --git a/examples/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go similarity index 60% rename from examples/proto/pathenum/path_enum.pb.go rename to examples/internal/proto/pathenum/path_enum.pb.go index 2a2e6a5e96e..10f5c55ddf1 100644 --- a/examples/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/pathenum/path_enum.proto +// source: examples/internal/proto/pathenum/path_enum.proto package pathenum @@ -42,7 +42,7 @@ func (x PathEnum) String() string { } func (PathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_dfe1d80fc8dac3c4, []int{0} + return fileDescriptor_83f42520181de088, []int{0} } type MessagePathEnum_NestedPathEnum int32 @@ -67,7 +67,7 @@ func (x MessagePathEnum_NestedPathEnum) String() string { } func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_dfe1d80fc8dac3c4, []int{0, 0} + return fileDescriptor_83f42520181de088, []int{0, 0} } type MessagePathEnum struct { @@ -80,7 +80,7 @@ func (m *MessagePathEnum) Reset() { *m = MessagePathEnum{} } func (m *MessagePathEnum) String() string { return proto.CompactTextString(m) } func (*MessagePathEnum) ProtoMessage() {} func (*MessagePathEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_dfe1d80fc8dac3c4, []int{0} + return fileDescriptor_83f42520181de088, []int{0} } func (m *MessagePathEnum) XXX_Unmarshal(b []byte) error { @@ -102,26 +102,27 @@ func (m *MessagePathEnum) XXX_DiscardUnknown() { var xxx_messageInfo_MessagePathEnum proto.InternalMessageInfo func init() { - proto.RegisterEnum("grpc.gateway.examples.pathenum.PathEnum", PathEnum_name, PathEnum_value) - proto.RegisterEnum("grpc.gateway.examples.pathenum.MessagePathEnum_NestedPathEnum", MessagePathEnum_NestedPathEnum_name, MessagePathEnum_NestedPathEnum_value) - proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.pathenum.MessagePathEnum") + proto.RegisterEnum("grpc.gateway.examples.internal.pathenum.PathEnum", PathEnum_name, PathEnum_value) + proto.RegisterEnum("grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum", MessagePathEnum_NestedPathEnum_name, MessagePathEnum_NestedPathEnum_value) + proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.internal.pathenum.MessagePathEnum") } func init() { - proto.RegisterFile("examples/proto/pathenum/path_enum.proto", fileDescriptor_dfe1d80fc8dac3c4) -} - -var fileDescriptor_dfe1d80fc8dac3c4 = []byte{ - // 175 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4f, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, - 0xcd, 0x2b, 0xcd, 0x05, 0x33, 0xe2, 0x41, 0x2c, 0x3d, 0xb0, 0x84, 0x90, 0x5c, 0x7a, 0x51, 0x41, - 0xb2, 0x5e, 0x7a, 0x62, 0x49, 0x6a, 0x79, 0x62, 0xa5, 0x1e, 0x4c, 0x97, 0x1e, 0x4c, 0xbd, 0x92, - 0x29, 0x17, 0xbf, 0x6f, 0x6a, 0x71, 0x71, 0x62, 0x7a, 0x6a, 0x40, 0x62, 0x49, 0x86, 0x2b, 0x48, - 0x48, 0x89, 0x8b, 0xcf, 0x2f, 0xb5, 0xb8, 0x24, 0x35, 0x05, 0x26, 0x22, 0xc4, 0xce, 0xc5, 0xec, - 0xee, 0xe1, 0x29, 0xc0, 0x00, 0x62, 0x78, 0x79, 0xfb, 0x08, 0x30, 0x6a, 0xc9, 0x70, 0x71, 0x20, - 0xcb, 0x3a, 0x3a, 0x39, 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x1c, 0xa2, 0xec, 0xd2, - 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x2e, 0xd0, 0x4d, 0x4d, 0xce, - 0x2f, 0xae, 0x2c, 0x2e, 0x49, 0x85, 0x72, 0xa1, 0x0e, 0xd2, 0xc7, 0xe1, 0x8d, 0x24, 0x36, 0x30, - 0xdf, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x9a, 0x10, 0xfc, 0xe8, 0x00, 0x00, 0x00, + proto.RegisterFile("examples/internal/proto/pathenum/path_enum.proto", fileDescriptor_83f42520181de088) +} + +var fileDescriptor_83f42520181de088 = []byte{ + // 187 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, + 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, 0xcd, 0x2b, 0xcd, 0x05, 0x33, 0xe2, 0x41, + 0x2c, 0x3d, 0xb0, 0x84, 0x90, 0x7a, 0x7a, 0x51, 0x41, 0xb2, 0x5e, 0x7a, 0x62, 0x49, 0x6a, 0x79, + 0x62, 0xa5, 0x1e, 0x4c, 0xbb, 0x1e, 0x4c, 0xbb, 0x1e, 0x4c, 0xa3, 0x92, 0x29, 0x17, 0xbf, 0x6f, + 0x6a, 0x71, 0x71, 0x62, 0x7a, 0x6a, 0x40, 0x62, 0x49, 0x86, 0x2b, 0x48, 0x48, 0x89, 0x8b, 0xcf, + 0x2f, 0xb5, 0xb8, 0x24, 0x35, 0x05, 0x26, 0x22, 0xc4, 0xce, 0xc5, 0xec, 0xee, 0xe1, 0x29, 0xc0, + 0x00, 0x62, 0x78, 0x79, 0xfb, 0x08, 0x30, 0x6a, 0xc9, 0x70, 0x71, 0x20, 0xcb, 0x3a, 0x3a, 0x39, + 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x3c, 0xa3, 0xdc, 0xd3, 0x33, 0x4b, 0x32, 0x4a, + 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x4e, 0xd1, 0x4d, 0x4d, 0xce, 0x2f, 0xae, 0x2c, 0x2e, + 0x49, 0x85, 0x72, 0xa1, 0x2e, 0xd3, 0x27, 0xe4, 0xb1, 0x24, 0x36, 0x30, 0xdf, 0x18, 0x10, 0x00, + 0x00, 0xff, 0xff, 0xd1, 0xc7, 0x26, 0x4c, 0x03, 0x01, 0x00, 0x00, } diff --git a/examples/proto/pathenum/path_enum.proto b/examples/internal/proto/pathenum/path_enum.proto similarity index 71% rename from examples/proto/pathenum/path_enum.proto rename to examples/internal/proto/pathenum/path_enum.proto index 5c926ff7132..76837929de8 100644 --- a/examples/proto/pathenum/path_enum.proto +++ b/examples/internal/proto/pathenum/path_enum.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/pathenum"; -package grpc.gateway.examples.pathenum; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum"; +package grpc.gateway.examples.internal.pathenum; enum PathEnum { ABC = 0; diff --git a/examples/proto/sub/BUILD.bazel b/examples/internal/proto/sub/BUILD.bazel similarity index 92% rename from examples/proto/sub/BUILD.bazel rename to examples/internal/proto/sub/BUILD.bazel index 4500b5689d9..947ab3e45c7 100644 --- a/examples/proto/sub/BUILD.bazel +++ b/examples/internal/proto/sub/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "sub_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub", proto = ":sub_proto", ) go_library( name = "go_default_library", embed = [":sub_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub", ) diff --git a/examples/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go similarity index 65% rename from examples/proto/sub/message.pb.go rename to examples/internal/proto/sub/message.pb.go index 093f92acf00..ffca991b93d 100644 --- a/examples/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/sub/message.proto +// source: examples/internal/proto/sub/message.proto package sub @@ -31,7 +31,7 @@ func (m *StringMessage) Reset() { *m = StringMessage{} } func (m *StringMessage) String() string { return proto.CompactTextString(m) } func (*StringMessage) ProtoMessage() {} func (*StringMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_fcc527d41fdbced2, []int{0} + return fileDescriptor_897f299135d10a90, []int{0} } func (m *StringMessage) XXX_Unmarshal(b []byte) error { @@ -60,19 +60,21 @@ func (m *StringMessage) GetValue() string { } func init() { - proto.RegisterType((*StringMessage)(nil), "grpc.gateway.examples.sub.StringMessage") + proto.RegisterType((*StringMessage)(nil), "grpc.gateway.examples.internal.sub.StringMessage") } -func init() { proto.RegisterFile("examples/proto/sub/message.proto", fileDescriptor_fcc527d41fdbced2) } +func init() { + proto.RegisterFile("examples/internal/proto/sub/message.proto", fileDescriptor_897f299135d10a90) +} -var fileDescriptor_fcc527d41fdbced2 = []byte{ - // 114 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0xd2, 0xcf, - 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0xd5, 0x03, 0x8b, 0x08, 0x49, 0xa6, 0x17, 0x15, 0x24, 0xeb, - 0xa5, 0x27, 0x96, 0xa4, 0x96, 0x27, 0x56, 0xea, 0xc1, 0x94, 0xeb, 0x15, 0x97, 0x26, 0x29, 0xa9, - 0x72, 0xf1, 0x06, 0x97, 0x14, 0x65, 0xe6, 0xa5, 0xfb, 0x42, 0x74, 0x08, 0x89, 0x70, 0xb1, 0x96, - 0x25, 0xe6, 0x94, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x69, 0x70, 0x06, 0x41, 0x38, 0x4e, 0xac, 0x51, - 0xcc, 0xc5, 0xa5, 0x49, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6c, 0x00, 0x25, 0x33, 0x6b, 0x00, - 0x00, 0x00, +var fileDescriptor_897f299135d10a90 = []byte{ + // 126 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, + 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0xd2, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0xd5, + 0x03, 0x8b, 0x08, 0x29, 0xa5, 0x17, 0x15, 0x24, 0xeb, 0xa5, 0x27, 0x96, 0xa4, 0x96, 0x27, 0x56, + 0xea, 0xc1, 0xf4, 0xe9, 0xc1, 0xf4, 0xe9, 0x15, 0x97, 0x26, 0x29, 0xa9, 0x72, 0xf1, 0x06, 0x97, + 0x14, 0x65, 0xe6, 0xa5, 0xfb, 0x42, 0xb4, 0x0a, 0x89, 0x70, 0xb1, 0x96, 0x25, 0xe6, 0x94, 0xa6, + 0x4a, 0x30, 0x2a, 0x30, 0x69, 0x70, 0x06, 0x41, 0x38, 0x4e, 0xac, 0x51, 0xcc, 0xc5, 0xa5, 0x49, + 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x14, 0x0c, 0x22, 0x7d, 0x00, 0x00, 0x00, } diff --git a/examples/proto/sub/message.proto b/examples/internal/proto/sub/message.proto similarity index 69% rename from examples/proto/sub/message.proto rename to examples/internal/proto/sub/message.proto index 7702a930d98..d3e67ee6038 100644 --- a/examples/proto/sub/message.proto +++ b/examples/internal/proto/sub/message.proto @@ -1,6 +1,6 @@ syntax = "proto2"; option go_package = "sub"; -package grpc.gateway.examples.sub; +package grpc.gateway.examples.internal.sub; message StringMessage { required string value = 1; diff --git a/examples/proto/sub2/BUILD.bazel b/examples/internal/proto/sub2/BUILD.bazel similarity index 92% rename from examples/proto/sub2/BUILD.bazel rename to examples/internal/proto/sub2/BUILD.bazel index 780d550ccbb..570d10c3c9f 100644 --- a/examples/proto/sub2/BUILD.bazel +++ b/examples/internal/proto/sub2/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "sub2_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2", proto = ":sub2_proto", ) go_library( name = "go_default_library", embed = [":sub2_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2", ) diff --git a/examples/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go similarity index 63% rename from examples/proto/sub2/message.pb.go rename to examples/internal/proto/sub2/message.pb.go index afda91bd768..60925d0eee5 100644 --- a/examples/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: examples/proto/sub2/message.proto +// source: examples/internal/proto/sub2/message.proto package sub2 @@ -31,7 +31,7 @@ func (m *IdMessage) Reset() { *m = IdMessage{} } func (m *IdMessage) String() string { return proto.CompactTextString(m) } func (*IdMessage) ProtoMessage() {} func (*IdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_3490899b8414eb79, []int{0} + return fileDescriptor_050dd68add910843, []int{0} } func (m *IdMessage) XXX_Unmarshal(b []byte) error { @@ -63,17 +63,19 @@ func init() { proto.RegisterType((*IdMessage)(nil), "sub2.IdMessage") } -func init() { proto.RegisterFile("examples/proto/sub2/message.proto", fileDescriptor_3490899b8414eb79) } +func init() { + proto.RegisterFile("examples/internal/proto/sub2/message.proto", fileDescriptor_050dd68add910843) +} -var fileDescriptor_3490899b8414eb79 = []byte{ - // 130 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, - 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0xd5, 0x03, 0x0b, 0x09, 0xb1, 0x80, 0xc4, 0x94, 0xe4, - 0xb9, 0x38, 0x3d, 0x53, 0x7c, 0x21, 0x12, 0x42, 0x42, 0x5c, 0x2c, 0xa5, 0xa5, 0x99, 0x29, 0x12, - 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, 0xb6, 0x93, 0x4d, 0x94, 0x55, 0x7a, 0x66, 0x49, 0x46, - 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x51, 0x41, 0xb2, 0x6e, 0x6a, 0x72, 0x7e, 0x71, - 0x65, 0x71, 0x49, 0x2a, 0x94, 0x9b, 0x9e, 0x58, 0x92, 0x5a, 0x9e, 0x58, 0xa9, 0x8f, 0xc5, 0xca, - 0x24, 0x36, 0x30, 0xdb, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xfd, 0x49, 0xe7, 0x2f, 0x90, 0x00, - 0x00, 0x00, +var fileDescriptor_050dd68add910843 = []byte{ + // 139 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xad, 0x48, 0xcc, + 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, + 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, + 0xd5, 0x03, 0x0b, 0x09, 0xb1, 0x80, 0xc4, 0x94, 0xe4, 0xb9, 0x38, 0x3d, 0x53, 0x7c, 0x21, 0x12, + 0x42, 0x42, 0x5c, 0x2c, 0xa5, 0xa5, 0x99, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, + 0xb6, 0x93, 0x6b, 0x94, 0x73, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, + 0x7a, 0x51, 0x41, 0xb2, 0x6e, 0x6a, 0x72, 0x7e, 0x71, 0x65, 0x71, 0x49, 0x2a, 0x94, 0x9b, 0x9e, + 0x58, 0x92, 0x5a, 0x9e, 0x58, 0xa9, 0x8f, 0xcf, 0xee, 0x24, 0x36, 0x30, 0xdb, 0x18, 0x10, 0x00, + 0x00, 0xff, 0xff, 0xdd, 0xb8, 0xdb, 0x58, 0xa2, 0x00, 0x00, 0x00, } diff --git a/examples/proto/sub2/message.proto b/examples/internal/proto/sub2/message.proto similarity index 83% rename from examples/proto/sub2/message.proto rename to examples/internal/proto/sub2/message.proto index 59c9bd9f9fc..77f10e80315 100644 --- a/examples/proto/sub2/message.proto +++ b/examples/internal/proto/sub2/message.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2"; package sub2; message IdMessage { diff --git a/examples/server/BUILD.bazel b/examples/internal/server/BUILD.bazel similarity index 87% rename from examples/server/BUILD.bazel rename to examples/internal/server/BUILD.bazel index e5b6721790a..4615adb1494 100644 --- a/examples/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -14,11 +14,11 @@ go_library( "responsebody.go", "unannotatedecho.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server", deps = [ - "//examples/proto/examplepb:go_default_library", - "//examples/proto/sub:go_default_library", - "//examples/proto/sub2:go_default_library", + "//examples/internal/proto/examplepb:go_default_library", + "//examples/internal/proto/sub:go_default_library", + "//examples/internal/proto/sub2:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", diff --git a/examples/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go similarity index 97% rename from examples/server/a_bit_of_everything.go rename to examples/internal/server/a_bit_of_everything.go index 0b87ce02639..ee686c22cd0 100644 --- a/examples/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -11,9 +11,9 @@ import ( "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/sub2" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" "github.com/rogpeppe/fastuuid" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" diff --git a/examples/server/echo.go b/examples/internal/server/echo.go similarity index 91% rename from examples/server/echo.go rename to examples/internal/server/echo.go index 249aeb0b211..8b749b9060e 100644 --- a/examples/server/echo.go +++ b/examples/internal/server/echo.go @@ -4,7 +4,7 @@ import ( "context" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) diff --git a/examples/server/fieldmask_helper.go b/examples/internal/server/fieldmask_helper.go similarity index 100% rename from examples/server/fieldmask_helper.go rename to examples/internal/server/fieldmask_helper.go diff --git a/examples/server/fieldmask_helper_test.go b/examples/internal/server/fieldmask_helper_test.go similarity index 100% rename from examples/server/fieldmask_helper_test.go rename to examples/internal/server/fieldmask_helper_test.go diff --git a/examples/server/flow_combination.go b/examples/internal/server/flow_combination.go similarity index 96% rename from examples/server/flow_combination.go rename to examples/internal/server/flow_combination.go index 516510f4bc6..58d68053a79 100644 --- a/examples/server/flow_combination.go +++ b/examples/internal/server/flow_combination.go @@ -4,7 +4,7 @@ import ( "context" "io" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" ) type flowCombinationServer struct{} diff --git a/examples/server/main.go b/examples/internal/server/main.go similarity index 91% rename from examples/server/main.go rename to examples/internal/server/main.go index d595c367613..5f7912eff3e 100644 --- a/examples/server/main.go +++ b/examples/internal/server/main.go @@ -5,7 +5,7 @@ import ( "net" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" "google.golang.org/grpc" ) diff --git a/examples/server/non_standard_names.go b/examples/internal/server/non_standard_names.go similarity index 93% rename from examples/server/non_standard_names.go rename to examples/internal/server/non_standard_names.go index c448259a909..414e3d8e0de 100644 --- a/examples/server/non_standard_names.go +++ b/examples/internal/server/non_standard_names.go @@ -4,7 +4,7 @@ import ( "context" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" ) // Implements NonStandardServiceServer diff --git a/examples/server/responsebody.go b/examples/internal/server/responsebody.go similarity index 93% rename from examples/server/responsebody.go rename to examples/internal/server/responsebody.go index e5dc800a423..8df32ede5fa 100644 --- a/examples/server/responsebody.go +++ b/examples/internal/server/responsebody.go @@ -3,7 +3,7 @@ package server import ( "context" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" ) // Implements of ResponseBodyServiceServer diff --git a/examples/server/unannotatedecho.go b/examples/internal/server/unannotatedecho.go similarity index 92% rename from examples/server/unannotatedecho.go rename to examples/internal/server/unannotatedecho.go index bf3bff0dfc1..b99392bf491 100644 --- a/examples/server/unannotatedecho.go +++ b/examples/internal/server/unannotatedecho.go @@ -2,8 +2,9 @@ package server import ( "context" + "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) diff --git a/examples/proto/examplepb/unannotated_echo_service.yaml b/examples/proto/examplepb/unannotated_echo_service.yaml deleted file mode 100644 index cd3a978d897..00000000000 --- a/examples/proto/examplepb/unannotated_echo_service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -type: google.api.Service -config_version: 3 - -http: - rules: - - selector: grpc.gateway.examples.examplepb.UnannotatedEchoService.Echo - post: "/v1/example/echo/{id}" - additional_bindings: - - get: "/v1/example/echo/{id}/{num}" - - selector: grpc.gateway.examples.examplepb.UnannotatedEchoService.EchoBody - post: "/v1/example/echo_body" - body: "*" - - selector: grpc.gateway.examples.examplepb.UnannotatedEchoService.EchoDelete - delete: "/v1/example/echo_delete" - diff --git a/fuzzit.sh b/fuzzit.sh index e5df5f3f843..43c0f23918b 100755 --- a/fuzzit.sh +++ b/fuzzit.sh @@ -9,9 +9,9 @@ cd go-fuzz go get ./... go build ./... -#go get -v -u ./protoc-gen-grpc-gateway/httprule +#go get -v -u ./internal/httprule cd /src/grpc-gateway -go-fuzz-build -libfuzzer -o parse-http-rule.a ./protoc-gen-grpc-gateway/httprule +go-fuzz-build -libfuzzer -o parse-http-rule.a ./internal/httprule clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 diff --git a/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel similarity index 81% rename from codegenerator/BUILD.bazel rename to internal/codegenerator/BUILD.bazel index 651177fa157..4682f41e46d 100644 --- a/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") -package(default_visibility = ["//:generators"]) +package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", @@ -8,7 +8,7 @@ go_library( "doc.go", "parse_req.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/codegenerator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator", deps = [ "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/codegenerator/doc.go b/internal/codegenerator/doc.go similarity index 100% rename from codegenerator/doc.go rename to internal/codegenerator/doc.go diff --git a/codegenerator/parse_req.go b/internal/codegenerator/parse_req.go similarity index 100% rename from codegenerator/parse_req.go rename to internal/codegenerator/parse_req.go diff --git a/codegenerator/parse_req_test.go b/internal/codegenerator/parse_req_test.go similarity index 95% rename from codegenerator/parse_req_test.go rename to internal/codegenerator/parse_req_test.go index 5f37aad9589..c6d439c8047 100644 --- a/codegenerator/parse_req_test.go +++ b/internal/codegenerator/parse_req_test.go @@ -10,7 +10,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" ) var parseReqTests = []struct { diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel similarity index 82% rename from protoc-gen-grpc-gateway/descriptor/BUILD.bazel rename to internal/descriptor/BUILD.bazel index cfbdc277a8c..8d1df906f79 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") -package(default_visibility = ["//:generators"]) +package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", @@ -11,9 +11,9 @@ go_library( "services.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor", deps = [ - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", @@ -36,7 +36,7 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go rename to internal/descriptor/grpc_api_configuration.go diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go rename to internal/descriptor/grpc_api_configuration_test.go diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_service.go b/internal/descriptor/grpc_api_service.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_service.go rename to internal/descriptor/grpc_api_service.go diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/internal/descriptor/registry.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/registry.go rename to internal/descriptor/registry.go diff --git a/protoc-gen-grpc-gateway/descriptor/registry_test.go b/internal/descriptor/registry_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/registry_test.go rename to internal/descriptor/registry_test.go diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/internal/descriptor/services.go similarity index 98% rename from protoc-gen-grpc-gateway/descriptor/services.go rename to internal/descriptor/services.go index 8916d316d18..2f9103eef4f 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/internal/descriptor/services.go @@ -7,7 +7,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" options "google.golang.org/genproto/googleapis/api/annotations" ) @@ -20,7 +20,7 @@ func (r *Registry) loadServices(file *File) error { for _, sd := range file.GetService() { glog.V(2).Infof("Registering %s", sd.GetName()) svc := &Service{ - File: file, + File: file, ServiceDescriptorProto: sd, } for _, md := range sd.GetMethod() { diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/internal/descriptor/services_test.go similarity index 99% rename from protoc-gen-grpc-gateway/descriptor/services_test.go rename to internal/descriptor/services_test.go index 1ccb8fbef0a..26329fd2a08 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" ) func compilePath(t *testing.T, path string) httprule.Template { diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/internal/descriptor/types.go similarity index 99% rename from protoc-gen-grpc-gateway/descriptor/types.go rename to internal/descriptor/types.go index 4aa75f85dbf..fcdb9940b47 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/internal/descriptor/types.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" ) // IsWellKnownType returns true if the provided fully qualified type name is considered 'well-known'. diff --git a/protoc-gen-grpc-gateway/descriptor/types_test.go b/internal/descriptor/types_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/types_test.go rename to internal/descriptor/types_test.go diff --git a/protoc-gen-grpc-gateway/generator/BUILD.bazel b/internal/generator/BUILD.bazel similarity index 51% rename from protoc-gen-grpc-gateway/generator/BUILD.bazel rename to internal/generator/BUILD.bazel index 6cb2162d847..17f3d31c5dd 100644 --- a/protoc-gen-grpc-gateway/generator/BUILD.bazel +++ b/internal/generator/BUILD.bazel @@ -1,13 +1,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") -package(default_visibility = ["//:generators"]) +package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = ["generator.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/generator", deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//internal/descriptor:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/generator/generator.go b/internal/generator/generator.go similarity index 83% rename from protoc-gen-grpc-gateway/generator/generator.go rename to internal/generator/generator.go index df55da44445..5d03cff15d0 100644 --- a/protoc-gen-grpc-gateway/generator/generator.go +++ b/internal/generator/generator.go @@ -3,7 +3,7 @@ package generator import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" ) // Generator is an abstraction of code generators. diff --git a/protoc-gen-grpc-gateway/httprule/BUILD.bazel b/internal/httprule/BUILD.bazel similarity index 81% rename from protoc-gen-grpc-gateway/httprule/BUILD.bazel rename to internal/httprule/BUILD.bazel index 89f94a14b45..2064217e6a6 100644 --- a/protoc-gen-grpc-gateway/httprule/BUILD.bazel +++ b/internal/httprule/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") -package(default_visibility = ["//:generators"]) +package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", @@ -9,7 +9,7 @@ go_library( "parse.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule", + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/httprule", deps = [ "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/protoc-gen-grpc-gateway/httprule/compile.go b/internal/httprule/compile.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/compile.go rename to internal/httprule/compile.go diff --git a/protoc-gen-grpc-gateway/httprule/compile_test.go b/internal/httprule/compile_test.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/compile_test.go rename to internal/httprule/compile_test.go diff --git a/protoc-gen-grpc-gateway/httprule/fuzz.go b/internal/httprule/fuzz.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/fuzz.go rename to internal/httprule/fuzz.go diff --git a/protoc-gen-grpc-gateway/httprule/parse.go b/internal/httprule/parse.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/parse.go rename to internal/httprule/parse.go diff --git a/protoc-gen-grpc-gateway/httprule/parse_test.go b/internal/httprule/parse_test.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/parse_test.go rename to internal/httprule/parse_test.go diff --git a/protoc-gen-grpc-gateway/httprule/types.go b/internal/httprule/types.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/types.go rename to internal/httprule/types.go diff --git a/protoc-gen-grpc-gateway/httprule/types_test.go b/internal/httprule/types_test.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/types_test.go rename to internal/httprule/types_test.go diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index cb772efe9e1..711e038c368 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -8,9 +8,9 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway", deps = [ - "//codegenerator:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/gengateway:go_default_library", + "//internal/codegenerator:go_default_library", + "//internal/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel similarity index 77% rename from protoc-gen-grpc-gateway/gengateway/BUILD.bazel rename to protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 316010f500d..b3528a9abb3 100644 --- a/protoc-gen-grpc-gateway/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -9,10 +9,10 @@ go_library( "generator.go", "template.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/gengateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway", deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/generator:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/generator:go_default_library", "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", @@ -30,8 +30,8 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], diff --git a/protoc-gen-grpc-gateway/gengateway/doc.go b/protoc-gen-grpc-gateway/internal/gengateway/doc.go similarity index 100% rename from protoc-gen-grpc-gateway/gengateway/doc.go rename to protoc-gen-grpc-gateway/internal/gengateway/doc.go diff --git a/protoc-gen-grpc-gateway/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go similarity index 96% rename from protoc-gen-grpc-gateway/gengateway/generator.go rename to protoc-gen-grpc-gateway/internal/gengateway/generator.go index 0b6bfbd2b93..d687f32be5b 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -11,8 +11,8 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/internal/generator" ) var ( diff --git a/protoc-gen-grpc-gateway/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go similarity index 98% rename from protoc-gen-grpc-gateway/gengateway/generator_test.go rename to protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index 39e5f141dbe..99d8ae0125d 100644 --- a/protoc-gen-grpc-gateway/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -7,7 +7,7 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" ) func newExampleFileDescriptor() *descriptor.File { diff --git a/protoc-gen-grpc-gateway/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go similarity index 99% rename from protoc-gen-grpc-gateway/gengateway/template.go rename to protoc-gen-grpc-gateway/internal/gengateway/template.go index 1d3d3ca8f19..fd5cc11f9be 100644 --- a/protoc-gen-grpc-gateway/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -9,7 +9,7 @@ import ( "github.com/golang/glog" generator2 "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) diff --git a/protoc-gen-grpc-gateway/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go similarity index 99% rename from protoc-gen-grpc-gateway/gengateway/template_test.go rename to protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 69809792b4c..628d53220dd 100644 --- a/protoc-gen-grpc-gateway/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 291ba7deb2f..f3ed3ae726e 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -17,9 +17,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/gengateway" + "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway" ) var ( diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index d5a1d05fcc7..0aacac9cea5 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -7,9 +7,9 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger", deps = [ - "//codegenerator:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-swagger/genswagger:go_default_library", + "//internal/codegenerator:go_default_library", + "//internal/descriptor:go_default_library", + "//protoc-gen-swagger/internal/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel similarity index 84% rename from protoc-gen-swagger/genswagger/BUILD.bazel rename to protoc-gen-swagger/internal/genswagger/BUILD.bazel index c89eb04477d..0ef9926ff20 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -12,11 +12,11 @@ go_library( "template.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger", deps = [ "//internal:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/generator:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", @@ -36,8 +36,8 @@ go_test( srcs = ["template_test.go"], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/httprule:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", diff --git a/protoc-gen-swagger/genswagger/doc.go b/protoc-gen-swagger/internal/genswagger/doc.go similarity index 100% rename from protoc-gen-swagger/genswagger/doc.go rename to protoc-gen-swagger/internal/genswagger/doc.go diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/internal/genswagger/generator.go similarity index 97% rename from protoc-gen-swagger/genswagger/generator.go rename to protoc-gen-swagger/internal/genswagger/generator.go index ecf1135fde7..6e4a554a842 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/internal/genswagger/generator.go @@ -16,8 +16,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/internal" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/internal/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/genswagger/helpers.go b/protoc-gen-swagger/internal/genswagger/helpers.go similarity index 100% rename from protoc-gen-swagger/genswagger/helpers.go rename to protoc-gen-swagger/internal/genswagger/helpers.go diff --git a/protoc-gen-swagger/genswagger/helpers_go111_old.go b/protoc-gen-swagger/internal/genswagger/helpers_go111_old.go similarity index 100% rename from protoc-gen-swagger/genswagger/helpers_go111_old.go rename to protoc-gen-swagger/internal/genswagger/helpers_go111_old.go diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go similarity index 99% rename from protoc-gen-swagger/genswagger/template.go rename to protoc-gen-swagger/internal/genswagger/template.go index 9e0b5ce58af..320e3f1b6e7 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -20,7 +20,7 @@ import ( pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go similarity index 99% rename from protoc-gen-swagger/genswagger/template_test.go rename to protoc-gen-swagger/internal/genswagger/template_test.go index cda39688835..9c8c913f33f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -12,8 +12,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/internal/genswagger/types.go similarity index 99% rename from protoc-gen-swagger/genswagger/types.go rename to protoc-gen-swagger/internal/genswagger/types.go index 255f53c77ca..d46f14cf6a1 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/internal/genswagger/types.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" ) type param struct { diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index f25e431b553..bbe25649f46 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -9,9 +9,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger" + "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger" ) var ( diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 819c45a7657..c4d18f624a8 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -64,8 +64,8 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//examples/proto/examplepb:go_default_library", "//internal:go_default_library", + "//runtime/internal/examplepb:go_default_library", "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", diff --git a/runtime/handler_test.go b/runtime/handler_test.go index c9caa25cfc0..f9a17916da1 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -8,10 +8,11 @@ import ( "testing" "context" + "github.com/golang/protobuf/proto" - pb "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/runtime" + pb "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel new file mode 100644 index 00000000000..0d36f524d8e --- /dev/null +++ b/runtime/internal/examplepb/BUILD.bazel @@ -0,0 +1,31 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +package(default_visibility = ["//visibility:public"]) + +proto_library( + name = "examplepb_proto", + srcs = [ + "example.proto", + ], + deps = [ + "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:timestamp_proto", + ], +) + +go_proto_library( + name = "examplepb_go_proto", + importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb", + proto = ":examplepb_proto", + deps = [ + "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep + ], +) + +go_library( + name = "go_default_library", + embed = [":examplepb_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb", +) diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go new file mode 100644 index 00000000000..16b27aa6214 --- /dev/null +++ b/runtime/internal/examplepb/example.pb.go @@ -0,0 +1,807 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: runtime/internal/examplepb/example.proto + +package examplepb + +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + empty "github.com/golang/protobuf/ptypes/empty" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + math "math" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +// NumericEnum is one or zero. +type NumericEnum int32 + +const ( + // ZERO means 0 + NumericEnum_ZERO NumericEnum = 0 + // ONE means 1 + NumericEnum_ONE NumericEnum = 1 +) + +var NumericEnum_name = map[int32]string{ + 0: "ZERO", + 1: "ONE", +} + +var NumericEnum_value = map[string]int32{ + "ZERO": 0, + "ONE": 1, +} + +func (x NumericEnum) String() string { + return proto.EnumName(NumericEnum_name, int32(x)) +} + +func (NumericEnum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{0} +} + +// DeepEnum is one or zero. +type ABitOfEverything_Nested_DeepEnum int32 + +const ( + // FALSE is false. + ABitOfEverything_Nested_FALSE ABitOfEverything_Nested_DeepEnum = 0 + // TRUE is true. + ABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1 +) + +var ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ + 0: "FALSE", + 1: "TRUE", +} + +var ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ + "FALSE": 0, + "TRUE": 1, +} + +func (x ABitOfEverything_Nested_DeepEnum) String() string { + return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) +} + +func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{1, 0, 0} +} + +type RepeatedResponseBodyOut_Response_ResponseType int32 + +const ( + // UNKNOWN + RepeatedResponseBodyOut_Response_UNKNOWN RepeatedResponseBodyOut_Response_ResponseType = 0 + // A is 1 + RepeatedResponseBodyOut_Response_A RepeatedResponseBodyOut_Response_ResponseType = 1 + // B is 2 + RepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2 +) + +var RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "A", + 2: "B", +} + +var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ + "UNKNOWN": 0, + "A": 1, + "B": 2, +} + +func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { + return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) +} + +func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{3, 0, 0} +} + +// SimpleMessage represents a simple message sent to the Echo service. +type SimpleMessage struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } +func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } +func (*SimpleMessage) ProtoMessage() {} +func (*SimpleMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{0} +} + +func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SimpleMessage.Unmarshal(m, b) +} +func (m *SimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SimpleMessage.Marshal(b, m, deterministic) +} +func (m *SimpleMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleMessage.Merge(m, src) +} +func (m *SimpleMessage) XXX_Size() int { + return xxx_messageInfo_SimpleMessage.Size(m) +} +func (m *SimpleMessage) XXX_DiscardUnknown() { + xxx_messageInfo_SimpleMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo + +func (m *SimpleMessage) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type ABitOfEverything struct { + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,3,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,4,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,5,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Int32Value int32 `protobuf:"varint,7,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Fixed64Value uint64 `protobuf:"fixed64,8,opt,name=fixed64_value,json=fixed64Value,proto3" json:"fixed64_value,omitempty"` + Fixed32Value uint32 `protobuf:"fixed32,9,opt,name=fixed32_value,json=fixed32Value,proto3" json:"fixed32_value,omitempty"` + BoolValue bool `protobuf:"varint,10,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"enum_value,omitempty"` + Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` + Sfixed64Value int64 `protobuf:"fixed64,16,opt,name=sfixed64_value,json=sfixed64Value,proto3" json:"sfixed64_value,omitempty"` + Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` + Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` + RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` + // Types that are valid to be assigned to OneofValue: + // *ABitOfEverything_OneofEmpty + // *ABitOfEverything_OneofString + OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum"` + MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + // repeated enum value. it is comma-separated in query + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + // repeated numeric enum comment (This comment is overridden by the field annotation) + RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` + // numeric enum comment (This comment is overridden by the field annotation) + EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` + // repeated string comment (This comment is overridden by the field annotation) + RepeatedStringAnnotation []string `protobuf:"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3" json:"repeated_string_annotation,omitempty"` + // repeated nested object comment (This comment is overridden by the field annotation) + RepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3" json:"repeated_nested_annotation,omitempty"` + // nested object comments (This comment is overridden by the field annotation) + NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` + Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } +func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } +func (*ABitOfEverything) ProtoMessage() {} +func (*ABitOfEverything) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{1} +} + +func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) +} +func (m *ABitOfEverything) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ABitOfEverything.Marshal(b, m, deterministic) +} +func (m *ABitOfEverything) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverything.Merge(m, src) +} +func (m *ABitOfEverything) XXX_Size() int { + return xxx_messageInfo_ABitOfEverything.Size(m) +} +func (m *ABitOfEverything) XXX_DiscardUnknown() { + xxx_messageInfo_ABitOfEverything.DiscardUnknown(m) +} + +var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo + +func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { + if m != nil { + return m.SingleNested + } + return nil +} + +func (m *ABitOfEverything) GetUuid() string { + if m != nil { + return m.Uuid + } + return "" +} + +func (m *ABitOfEverything) GetNested() []*ABitOfEverything_Nested { + if m != nil { + return m.Nested + } + return nil +} + +func (m *ABitOfEverything) GetFloatValue() float32 { + if m != nil { + return m.FloatValue + } + return 0 +} + +func (m *ABitOfEverything) GetDoubleValue() float64 { + if m != nil { + return m.DoubleValue + } + return 0 +} + +func (m *ABitOfEverything) GetInt64Value() int64 { + if m != nil { + return m.Int64Value + } + return 0 +} + +func (m *ABitOfEverything) GetUint64Value() uint64 { + if m != nil { + return m.Uint64Value + } + return 0 +} + +func (m *ABitOfEverything) GetInt32Value() int32 { + if m != nil { + return m.Int32Value + } + return 0 +} + +func (m *ABitOfEverything) GetFixed64Value() uint64 { + if m != nil { + return m.Fixed64Value + } + return 0 +} + +func (m *ABitOfEverything) GetFixed32Value() uint32 { + if m != nil { + return m.Fixed32Value + } + return 0 +} + +func (m *ABitOfEverything) GetBoolValue() bool { + if m != nil { + return m.BoolValue + } + return false +} + +func (m *ABitOfEverything) GetStringValue() string { + if m != nil { + return m.StringValue + } + return "" +} + +func (m *ABitOfEverything) GetBytesValue() []byte { + if m != nil { + return m.BytesValue + } + return nil +} + +func (m *ABitOfEverything) GetUint32Value() uint32 { + if m != nil { + return m.Uint32Value + } + return 0 +} + +func (m *ABitOfEverything) GetEnumValue() NumericEnum { + if m != nil { + return m.EnumValue + } + return NumericEnum_ZERO +} + +func (m *ABitOfEverything) GetSfixed32Value() int32 { + if m != nil { + return m.Sfixed32Value + } + return 0 +} + +func (m *ABitOfEverything) GetSfixed64Value() int64 { + if m != nil { + return m.Sfixed64Value + } + return 0 +} + +func (m *ABitOfEverything) GetSint32Value() int32 { + if m != nil { + return m.Sint32Value + } + return 0 +} + +func (m *ABitOfEverything) GetSint64Value() int64 { + if m != nil { + return m.Sint64Value + } + return 0 +} + +func (m *ABitOfEverything) GetRepeatedStringValue() []string { + if m != nil { + return m.RepeatedStringValue + } + return nil +} + +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() +} + +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` +} + +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` +} + +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} + +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} + +func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { + if m != nil { + return m.OneofValue + } + return nil +} + +func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { + if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { + return x.OneofEmpty + } + return nil +} + +func (m *ABitOfEverything) GetOneofString() string { + if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofString); ok { + return x.OneofString + } + return "" +} + +func (m *ABitOfEverything) GetMapValue() map[string]NumericEnum { + if m != nil { + return m.MapValue + } + return nil +} + +func (m *ABitOfEverything) GetMappedStringValue() map[string]string { + if m != nil { + return m.MappedStringValue + } + return nil +} + +func (m *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested { + if m != nil { + return m.MappedNestedValue + } + return nil +} + +func (m *ABitOfEverything) GetNonConventionalNameValue() string { + if m != nil { + return m.NonConventionalNameValue + } + return "" +} + +func (m *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { + if m != nil { + return m.TimestampValue + } + return nil +} + +func (m *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { + if m != nil { + return m.RepeatedEnumValue + } + return nil +} + +func (m *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { + if m != nil { + return m.RepeatedEnumAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { + if m != nil { + return m.EnumValueAnnotation + } + return NumericEnum_ZERO +} + +func (m *ABitOfEverything) GetRepeatedStringAnnotation() []string { + if m != nil { + return m.RepeatedStringAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { + if m != nil { + return m.RepeatedNestedAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { + if m != nil { + return m.NestedAnnotation + } + return nil +} + +func (m *ABitOfEverything) GetInt64OverrideType() int64 { + if m != nil { + return m.Int64OverrideType + } + return 0 +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ABitOfEverything) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ABitOfEverything_OneofEmpty)(nil), + (*ABitOfEverything_OneofString)(nil), + } +} + +// Nested is nested type. +type ABitOfEverything_Nested struct { + // name is nested field. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // DeepEnum comment. + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested{} } +func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } +func (*ABitOfEverything_Nested) ProtoMessage() {} +func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{1, 0} +} + +func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) +} +func (m *ABitOfEverything_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ABitOfEverything_Nested.Marshal(b, m, deterministic) +} +func (m *ABitOfEverything_Nested) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABitOfEverything_Nested.Merge(m, src) +} +func (m *ABitOfEverything_Nested) XXX_Size() int { + return xxx_messageInfo_ABitOfEverything_Nested.Size(m) +} +func (m *ABitOfEverything_Nested) XXX_DiscardUnknown() { + xxx_messageInfo_ABitOfEverything_Nested.DiscardUnknown(m) +} + +var xxx_messageInfo_ABitOfEverything_Nested proto.InternalMessageInfo + +func (m *ABitOfEverything_Nested) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *ABitOfEverything_Nested) GetAmount() uint32 { + if m != nil { + return m.Amount + } + return 0 +} + +func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { + if m != nil { + return m.Ok + } + return ABitOfEverything_Nested_FALSE +} + +type ResponseBodyOut struct { + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } +func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } +func (*ResponseBodyOut) ProtoMessage() {} +func (*ResponseBodyOut) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{2} +} + +func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) +} +func (m *ResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponseBodyOut.Marshal(b, m, deterministic) +} +func (m *ResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut.Merge(m, src) +} +func (m *ResponseBodyOut) XXX_Size() int { + return xxx_messageInfo_ResponseBodyOut.Size(m) +} +func (m *ResponseBodyOut) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBodyOut.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBodyOut proto.InternalMessageInfo + +func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { + if m != nil { + return m.Response + } + return nil +} + +type ResponseBodyOut_Response struct { + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Response{} } +func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } +func (*ResponseBodyOut_Response) ProtoMessage() {} +func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{2, 0} +} + +func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) +} +func (m *ResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResponseBodyOut_Response.Marshal(b, m, deterministic) +} +func (m *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResponseBodyOut_Response.Merge(m, src) +} +func (m *ResponseBodyOut_Response) XXX_Size() int { + return xxx_messageInfo_ResponseBodyOut_Response.Size(m) +} +func (m *ResponseBodyOut_Response) XXX_DiscardUnknown() { + xxx_messageInfo_ResponseBodyOut_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_ResponseBodyOut_Response proto.InternalMessageInfo + +func (m *ResponseBodyOut_Response) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +type RepeatedResponseBodyOut struct { + Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut{} } +func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } +func (*RepeatedResponseBodyOut) ProtoMessage() {} +func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{3} +} + +func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) +} +func (m *RepeatedResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepeatedResponseBodyOut.Marshal(b, m, deterministic) +} +func (m *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut.Merge(m, src) +} +func (m *RepeatedResponseBodyOut) XXX_Size() int { + return xxx_messageInfo_RepeatedResponseBodyOut.Size(m) +} +func (m *RepeatedResponseBodyOut) XXX_DiscardUnknown() { + xxx_messageInfo_RepeatedResponseBodyOut.DiscardUnknown(m) +} + +var xxx_messageInfo_RepeatedResponseBodyOut proto.InternalMessageInfo + +func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { + if m != nil { + return m.Response + } + return nil +} + +type RepeatedResponseBodyOut_Response struct { + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedResponseBodyOut_Response{} } +func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } +func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} +func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return fileDescriptor_411aaf1bcbdb81d6, []int{3, 0} +} + +func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) +} +func (m *RepeatedResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Marshal(b, m, deterministic) +} +func (m *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(m, src) +} +func (m *RepeatedResponseBodyOut_Response) XXX_Size() int { + return xxx_messageInfo_RepeatedResponseBodyOut_Response.Size(m) +} +func (m *RepeatedResponseBodyOut_Response) XXX_DiscardUnknown() { + xxx_messageInfo_RepeatedResponseBodyOut_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_RepeatedResponseBodyOut_Response proto.InternalMessageInfo + +func (m *RepeatedResponseBodyOut_Response) GetData() string { + if m != nil { + return m.Data + } + return "" +} + +func (m *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { + if m != nil { + return m.Type + } + return RepeatedResponseBodyOut_Response_UNKNOWN +} + +func init() { + proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) + proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) + proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) + proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.runtime.internal.examplepb.SimpleMessage") + proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything") + proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry") + proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry") + proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry") + proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested") + proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.runtime.internal.examplepb.ResponseBodyOut") + proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response") + proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut") + proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response") +} + +func init() { + proto.RegisterFile("runtime/internal/examplepb/example.proto", fileDescriptor_411aaf1bcbdb81d6) +} + +var fileDescriptor_411aaf1bcbdb81d6 = []byte{ + // 1101 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x5d, 0x73, 0x1b, 0x35, + 0x1b, 0x8d, 0xec, 0xc4, 0xb1, 0x9f, 0xb5, 0x9d, 0xb5, 0xf2, 0xd1, 0x7d, 0xdd, 0xb7, 0x64, 0xeb, + 0xd0, 0x61, 0xe1, 0x62, 0x33, 0xe3, 0x74, 0x18, 0xe8, 0x70, 0x41, 0xd2, 0x1a, 0x5a, 0xa0, 0x36, + 0xa3, 0xa4, 0x01, 0x3a, 0xc3, 0x78, 0xd6, 0xb5, 0xe2, 0x2e, 0xf1, 0x6a, 0x97, 0xfd, 0x08, 0xf5, + 0x0d, 0xc3, 0x15, 0xd7, 0xfc, 0x14, 0x6e, 0x98, 0xe1, 0x3f, 0xf1, 0x27, 0x98, 0x95, 0xb4, 0x8a, + 0xec, 0x04, 0x26, 0x34, 0xbe, 0x5a, 0xe9, 0xd1, 0xd1, 0x39, 0x47, 0x5a, 0x1d, 0x09, 0x9c, 0x38, + 0x63, 0xa9, 0x1f, 0xd0, 0x7d, 0x9f, 0xa5, 0x34, 0x66, 0xde, 0x74, 0x9f, 0xbe, 0xf1, 0x82, 0x68, + 0x4a, 0xa3, 0x51, 0xd1, 0x72, 0xa3, 0x38, 0x4c, 0x43, 0xfc, 0xde, 0x24, 0x8e, 0x5e, 0xb9, 0x13, + 0x2f, 0xa5, 0x3f, 0x79, 0x33, 0x57, 0x4e, 0x73, 0x8b, 0x69, 0xae, 0x9a, 0xd6, 0xde, 0x9d, 0x84, + 0xe1, 0x64, 0x4a, 0xf7, 0xf9, 0xb4, 0x51, 0x76, 0xb6, 0x9f, 0x03, 0x93, 0xd4, 0x0b, 0x22, 0xc1, + 0xd4, 0xbe, 0xbb, 0x08, 0xa0, 0x41, 0x94, 0xce, 0xc4, 0x60, 0x67, 0x17, 0x1a, 0xc7, 0x7e, 0xce, + 0xf4, 0x9c, 0x26, 0x89, 0x37, 0xa1, 0xb8, 0x09, 0x25, 0x7f, 0x6c, 0x21, 0x1b, 0x39, 0x35, 0x52, + 0xf2, 0xc7, 0x9d, 0xbf, 0xb6, 0xc0, 0x3c, 0x3c, 0xf2, 0xd3, 0xc1, 0x59, 0xef, 0x82, 0xc6, 0xb3, + 0xf4, 0xb5, 0xcf, 0x26, 0x98, 0x42, 0x23, 0xf1, 0xd9, 0x64, 0x4a, 0x87, 0x8c, 0x26, 0x29, 0x1d, + 0x5b, 0xff, 0xb3, 0x91, 0x63, 0x74, 0x3f, 0x75, 0x6f, 0x68, 0xda, 0x5d, 0x64, 0x74, 0xfb, 0x9c, + 0x87, 0xd4, 0x05, 0xad, 0xe8, 0x61, 0x0c, 0xab, 0x59, 0xa6, 0xdc, 0xf0, 0x36, 0xfe, 0x16, 0x2a, + 0x52, 0xb3, 0x64, 0x97, 0x97, 0xa2, 0x29, 0xf9, 0xf0, 0x2e, 0x18, 0x67, 0xd3, 0xd0, 0x4b, 0x87, + 0x17, 0xde, 0x34, 0xa3, 0x56, 0xd9, 0x46, 0x4e, 0x89, 0x00, 0x2f, 0x9d, 0xe6, 0x15, 0x7c, 0x1f, + 0xea, 0xe3, 0x30, 0x1b, 0x4d, 0xa9, 0x44, 0xac, 0xda, 0xc8, 0x41, 0xc4, 0x10, 0x35, 0x01, 0xd9, + 0x05, 0xc3, 0x67, 0xe9, 0x87, 0x0f, 0x25, 0x62, 0xcd, 0x46, 0x4e, 0x99, 0x00, 0x2f, 0x29, 0x8e, + 0x4c, 0x47, 0x54, 0x6c, 0xe4, 0xac, 0x12, 0x23, 0xd3, 0x20, 0x82, 0xe3, 0xa0, 0x2b, 0x11, 0xeb, + 0x36, 0x72, 0xd6, 0x38, 0xc7, 0x41, 0x57, 0x00, 0xf6, 0xa0, 0x71, 0xe6, 0xbf, 0xa1, 0x63, 0x45, + 0x52, 0xb5, 0x91, 0x53, 0x21, 0x75, 0x59, 0x9c, 0x07, 0x29, 0x9e, 0x9a, 0x8d, 0x9c, 0x75, 0x09, + 0x2a, 0x98, 0xee, 0x01, 0x8c, 0xc2, 0x70, 0x2a, 0x11, 0x60, 0x23, 0xa7, 0x4a, 0x6a, 0x79, 0x45, + 0x99, 0x4d, 0xd2, 0xd8, 0x67, 0x13, 0x09, 0x30, 0xf8, 0x7f, 0x30, 0x44, 0x4d, 0x99, 0x1d, 0xcd, + 0x52, 0x9a, 0x48, 0xc4, 0x3d, 0x1b, 0x39, 0x75, 0x02, 0xbc, 0x34, 0xb7, 0x60, 0x65, 0xa3, 0x61, + 0x23, 0xa7, 0x21, 0x16, 0x5c, 0xb8, 0x38, 0x06, 0xa0, 0x2c, 0x0b, 0x24, 0xa0, 0x69, 0x23, 0xa7, + 0xd9, 0x7d, 0x78, 0xe3, 0xdf, 0xda, 0xcf, 0x02, 0x1a, 0xfb, 0xaf, 0x7a, 0x2c, 0x0b, 0x48, 0x2d, + 0xe7, 0x11, 0xa4, 0x0f, 0xa0, 0x99, 0xcc, 0x6f, 0xc0, 0x86, 0x8d, 0x9c, 0x0d, 0xd2, 0x48, 0xe6, + 0x76, 0x40, 0xc1, 0xd4, 0x66, 0x9a, 0x36, 0x72, 0xcc, 0x02, 0xa6, 0xfd, 0xb6, 0x44, 0x5f, 0x45, + 0xcb, 0x46, 0x4e, 0x8b, 0x18, 0x89, 0xb6, 0x0a, 0x09, 0x51, 0x3c, 0xd8, 0x46, 0x0e, 0x16, 0x90, + 0x82, 0xa5, 0x0b, 0xdb, 0x31, 0x8d, 0xa8, 0x97, 0xd2, 0xf1, 0x70, 0x6e, 0x63, 0x37, 0xed, 0xb2, + 0x53, 0x23, 0x9b, 0xc5, 0xe0, 0xb1, 0xb6, 0xc1, 0x1f, 0x83, 0x11, 0x32, 0x1a, 0x9e, 0x0d, 0x79, + 0x6a, 0xad, 0x2d, 0x1e, 0xb4, 0x1d, 0x57, 0x64, 0xda, 0x2d, 0x32, 0xed, 0xf6, 0xf2, 0xd1, 0xa7, + 0x2b, 0x04, 0x38, 0x98, 0xf7, 0xf0, 0x1e, 0xd4, 0xc5, 0x54, 0xa1, 0x65, 0x6d, 0xe7, 0xbf, 0xef, + 0xe9, 0x0a, 0x11, 0x84, 0x42, 0x04, 0x8f, 0xa1, 0x16, 0x78, 0x91, 0xf4, 0xb1, 0xc3, 0x23, 0xf5, + 0xf9, 0xdb, 0x47, 0xea, 0xb9, 0x17, 0x71, 0xdb, 0x3d, 0x96, 0xc6, 0x33, 0x52, 0x0d, 0x64, 0x17, + 0xff, 0x82, 0x60, 0x33, 0xf0, 0xa2, 0x68, 0x71, 0xe1, 0x77, 0xb8, 0xe0, 0xd7, 0xb7, 0x12, 0x8c, + 0xe6, 0x36, 0x4c, 0x28, 0xb7, 0x82, 0xc5, 0xba, 0x6e, 0x41, 0x04, 0x5e, 0x5a, 0xb0, 0x96, 0x63, + 0x41, 0x5c, 0x26, 0x57, 0x2d, 0x68, 0x75, 0xfc, 0x08, 0x2c, 0x16, 0xb2, 0xc7, 0x21, 0xbb, 0xa0, + 0x2c, 0xf5, 0x43, 0xe6, 0x4d, 0xfb, 0x5e, 0x20, 0x6e, 0x0e, 0xab, 0xcd, 0xb3, 0xf5, 0x8f, 0xe3, + 0xf8, 0x31, 0x6c, 0xa8, 0x8b, 0x5d, 0x3a, 0xbf, 0xcb, 0xcf, 0x42, 0xfb, 0xca, 0x59, 0x38, 0x29, + 0x70, 0xa4, 0xa9, 0xa6, 0x08, 0x92, 0x31, 0xa8, 0x33, 0x36, 0xd4, 0x22, 0xf7, 0x7f, 0xbb, 0xfc, + 0xd6, 0x91, 0x6b, 0x15, 0x84, 0x3d, 0x15, 0x3d, 0x06, 0xd6, 0xbc, 0x8a, 0xc7, 0x58, 0x98, 0x7a, + 0xf9, 0x8a, 0x2c, 0xfb, 0x16, 0x52, 0x3b, 0xba, 0xd4, 0xa1, 0xe2, 0xc4, 0xaf, 0x61, 0xfb, 0x72, + 0x31, 0xba, 0xd8, 0xfd, 0x5b, 0x5c, 0x25, 0x9b, 0xea, 0x2a, 0xd1, 0x94, 0x3e, 0x81, 0xf6, 0x62, + 0x80, 0x35, 0xb9, 0x0e, 0x4f, 0xb1, 0x35, 0x9f, 0x62, 0x6d, 0xf6, 0xcf, 0xda, 0x6c, 0x79, 0x04, + 0xb5, 0xd9, 0x7b, 0x4b, 0x7a, 0xce, 0x94, 0xbe, 0xe8, 0x6b, 0xfa, 0x01, 0xb4, 0xae, 0xca, 0xbe, + 0xbb, 0xa4, 0x97, 0xdb, 0x64, 0x8b, 0x72, 0x2e, 0x6c, 0x8a, 0xfb, 0x30, 0xbc, 0xa0, 0x71, 0xec, + 0x8f, 0xe9, 0x30, 0x9d, 0x45, 0xd4, 0x7a, 0xc0, 0xdf, 0xc4, 0x16, 0x1f, 0x1a, 0xc8, 0x91, 0x93, + 0x59, 0x44, 0xdb, 0xbf, 0x23, 0xa8, 0x5c, 0x3e, 0xfc, 0xcc, 0x0b, 0x68, 0xf1, 0xf0, 0xe7, 0x6d, + 0xbc, 0x03, 0x15, 0x2f, 0x08, 0x33, 0x96, 0x5a, 0x25, 0xfe, 0x84, 0xc8, 0x1e, 0xfe, 0x0e, 0x4a, + 0xe1, 0x39, 0x7f, 0xad, 0x9b, 0xdd, 0x67, 0xb7, 0x5d, 0x86, 0xfb, 0x84, 0xd2, 0x88, 0xff, 0xff, + 0x52, 0x78, 0xde, 0xd9, 0x85, 0x6a, 0xd1, 0xc7, 0x35, 0x58, 0xfb, 0xec, 0xf0, 0xab, 0xe3, 0x9e, + 0xb9, 0x82, 0xab, 0xb0, 0x7a, 0x42, 0x5e, 0xf4, 0x4c, 0xd4, 0xfe, 0x11, 0x1a, 0x73, 0x37, 0x1e, + 0x36, 0xa1, 0x7c, 0x4e, 0x67, 0xd2, 0x77, 0xde, 0xc4, 0x5f, 0xc0, 0x9a, 0x08, 0x59, 0xe9, 0x16, + 0x87, 0x51, 0x50, 0x3c, 0x2a, 0x7d, 0x84, 0xda, 0x4f, 0x60, 0xe7, 0xfa, 0x3b, 0xef, 0x1a, 0xed, + 0x2d, 0x5d, 0xbb, 0xa6, 0xb3, 0xfc, 0x8a, 0x0a, 0x9a, 0xc5, 0x7b, 0xeb, 0x1a, 0x9a, 0x53, 0x9d, + 0x66, 0x19, 0x67, 0xe5, 0xd2, 0xc8, 0x51, 0xa3, 0x78, 0xde, 0x78, 0xa9, 0xf3, 0x1b, 0x82, 0x0d, + 0x42, 0x93, 0x28, 0x64, 0x09, 0x3d, 0x0a, 0xc7, 0xb3, 0x41, 0x96, 0xe2, 0xef, 0xa1, 0x1a, 0xcb, + 0x92, 0x74, 0x70, 0x78, 0x63, 0x07, 0x0b, 0x5c, 0xaa, 0x4f, 0x14, 0x65, 0xfb, 0x1d, 0xa8, 0x16, + 0xd5, 0xfc, 0xdc, 0x8d, 0xbd, 0xd4, 0x2b, 0xce, 0x5d, 0xde, 0xee, 0xfc, 0x59, 0x82, 0x3b, 0x44, + 0x46, 0x6a, 0xd1, 0x1a, 0x9d, 0xb3, 0x96, 0xe7, 0xf7, 0xd9, 0x7f, 0xb0, 0x76, 0x2d, 0xe7, 0x75, + 0x16, 0xff, 0x40, 0xff, 0xee, 0x11, 0xff, 0x00, 0xab, 0x3c, 0x5b, 0x22, 0x05, 0xa7, 0x4b, 0xf3, + 0xa0, 0x1a, 0x79, 0x40, 0x09, 0xd7, 0xe8, 0xbc, 0x0f, 0x75, 0xbd, 0x8a, 0x0d, 0x58, 0x7f, 0xd1, + 0xff, 0xb2, 0x3f, 0xf8, 0xa6, 0x6f, 0xae, 0xe0, 0x35, 0x40, 0x87, 0x26, 0xca, 0x3f, 0x47, 0x66, + 0xe9, 0x03, 0x1b, 0x0c, 0xed, 0x14, 0xe7, 0xb9, 0x79, 0xd9, 0x23, 0x03, 0x73, 0x05, 0xaf, 0x43, + 0x79, 0xd0, 0xef, 0x99, 0xe8, 0xc8, 0x78, 0x59, 0x53, 0x6e, 0x46, 0x15, 0xfe, 0x82, 0x1d, 0xfc, + 0x1d, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xc2, 0xf3, 0x9b, 0x25, 0x0d, 0x00, 0x00, +} diff --git a/runtime/internal/examplepb/example.proto b/runtime/internal/examplepb/example.proto new file mode 100644 index 00000000000..87d4189a736 --- /dev/null +++ b/runtime/internal/examplepb/example.proto @@ -0,0 +1,115 @@ +syntax = "proto3"; +option go_package = "examplepb"; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/empty.proto"; + +package grpc.gateway.runtime.internal.examplepb; + +// SimpleMessage represents a simple message sent to the Echo service. +message SimpleMessage { + string id = 1; +} + +message ABitOfEverything { + // Nested is nested type. + message Nested { + // name is nested field. + string name = 1; + uint32 amount = 2; + // DeepEnum is one or zero. + enum DeepEnum { + // FALSE is false. + FALSE = 0; + // TRUE is true. + TRUE = 1; + } + + // DeepEnum comment. + DeepEnum ok = 3; + } + Nested single_nested = 25; + + string uuid = 1; + repeated Nested nested = 2; + float float_value = 3; + double double_value = 4; + int64 int64_value = 5; + uint64 uint64_value = 6; + int32 int32_value = 7; + fixed64 fixed64_value = 8; + fixed32 fixed32_value = 9; + bool bool_value = 10; + string string_value = 11; + bytes bytes_value = 29; + uint32 uint32_value = 13; + NumericEnum enum_value = 14; + sfixed32 sfixed32_value = 15; + sfixed64 sfixed64_value = 16; + sint32 sint32_value = 17; + sint64 sint64_value = 18; + repeated string repeated_string_value = 19; + oneof oneof_value { + google.protobuf.Empty oneof_empty = 20; + string oneof_string = 21; + } + + map map_value = 22; + map mapped_string_value = 23; + map mapped_nested_value = 24; + + string nonConventionalNameValue = 26; + + google.protobuf.Timestamp timestamp_value = 27; + + // repeated enum value. it is comma-separated in query + repeated NumericEnum repeated_enum_value = 28; + + // repeated numeric enum comment (This comment is overridden by the field annotation) + repeated NumericEnum repeated_enum_annotation = 32; + + // numeric enum comment (This comment is overridden by the field annotation) + NumericEnum enum_value_annotation = 33; + + // repeated string comment (This comment is overridden by the field annotation) + repeated string repeated_string_annotation = 34; + + // repeated nested object comment (This comment is overridden by the field annotation) + repeated Nested repeated_nested_annotation = 35; + + // nested object comments (This comment is overridden by the field annotation) + Nested nested_annotation = 36; + + int64 int64_override_type = 37; +} + +// NumericEnum is one or zero. +enum NumericEnum { + // ZERO means 0 + ZERO = 0; + // ONE means 1 + ONE = 1; +} + +message ResponseBodyOut { + message Response { + string data = 1; + } + Response response = 2; +} + +message RepeatedResponseBodyOut { + message Response { + string data = 1; + enum ResponseType { + // UNKNOWN + UNKNOWN = 0; + // A is 1 + A = 1; + // B is 2 + B = 2; + } + ResponseType type = 3; + } + repeated Response response = 2; +} diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index 1d226d53665..e7610cead8c 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -12,8 +12,8 @@ import ( structpb "github.com/golang/protobuf/ptypes/struct" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" ) func TestJSONBuiltinMarshal(t *testing.T) { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 7d60ef7ce35..19d5bc8fb0e 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -14,8 +14,8 @@ import ( structpb "github.com/golang/protobuf/ptypes/struct" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" ) func TestJSONPbMarshal(t *testing.T) { @@ -43,10 +43,10 @@ func TestJSONPbMarshal(t *testing.T) { "b": examplepb.NumericEnum_ZERO, }, RepeatedEnumAnnotation: []examplepb.NumericEnum{}, - EnumValueAnnotation: examplepb.NumericEnum_ONE, + EnumValueAnnotation: examplepb.NumericEnum_ONE, RepeatedStringAnnotation: []string{}, RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{}, - NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, + NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, } for i, spec := range []struct { @@ -264,10 +264,10 @@ func TestJSONPbEncoder(t *testing.T) { "b": examplepb.NumericEnum_ZERO, }, RepeatedEnumAnnotation: []examplepb.NumericEnum{}, - EnumValueAnnotation: examplepb.NumericEnum_ONE, + EnumValueAnnotation: examplepb.NumericEnum_ONE, RepeatedStringAnnotation: []string{}, RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{}, - NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, + NestedAnnotation: &examplepb.ABitOfEverything_Nested{}, } for i, spec := range []struct { @@ -359,7 +359,7 @@ func TestJSONPbEncoderFields(t *testing.T) { if err := enc.Encode(fixt.data); err != nil { t.Errorf("enc.Encode(%#v) failed with %v; want success", fixt.data, err) } - if got, want := buf.String(), fixt.json + string(m.Delimiter()); got != want { + if got, want := buf.String(), fixt.json+string(m.Delimiter()); got != want { t.Errorf("enc.Encode(%#v) = %q; want %q", fixt.data, got, want) } } diff --git a/runtime/marshal_proto_test.go b/runtime/marshal_proto_test.go index 1da30b8a8d6..d653aca653a 100644 --- a/runtime/marshal_proto_test.go +++ b/runtime/marshal_proto_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/timestamp" - "github.com/grpc-ecosystem/grpc-gateway/examples/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" ) var message = &examplepb.ABitOfEverything{ From 3156ca6b04b05e72794685b353c744016e8732a7 Mon Sep 17 00:00:00 2001 From: William Langford Date: Wed, 4 Mar 2020 12:06:35 -0500 Subject: [PATCH 0268/1518] Use an interface for ContentTypeFromMessage This allows custom Marshaler implementations to vary their Content-Type based on the response --- runtime/errors.go | 4 +-- runtime/errors_test.go | 43 +++++++++++++++++--------- runtime/handler.go | 6 ++-- runtime/handler_test.go | 67 ++++++++++++++++++++++++++++++++++++----- runtime/marshaler.go | 7 +++++ runtime/proto_errors.go | 4 +-- 6 files changed, 103 insertions(+), 28 deletions(-) diff --git a/runtime/errors.go b/runtime/errors.go index 8ec2fc0f1c7..65a5dc690d4 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -123,9 +123,9 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w // Check marshaler on run time in order to keep backwards compatability // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check - if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { + if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { pb := s.Proto() - contentType = httpBodyMarshaler.ContentTypeFromMessage(pb) + contentType = typeMarshaler.ContentTypeFromMessage(pb) } w.Header().Set("Content-Type", contentType) diff --git a/runtime/errors_test.go b/runtime/errors_test.go index 6d684d4ed89..b4ce93f3f16 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -23,26 +23,41 @@ func TestDefaultHTTPError(t *testing.T) { ) for _, spec := range []struct { - err error - status int - msg string - details string + err error + status int + msg string + marshaler runtime.Marshaler + contentType string + details string }{ { - err: fmt.Errorf("example error"), - status: http.StatusInternalServerError, - msg: "example error", + err: fmt.Errorf("example error"), + status: http.StatusInternalServerError, + marshaler: &runtime.JSONPb{}, + contentType: "application/json", + msg: "example error", }, { - err: status.Error(codes.NotFound, "no such resource"), - status: http.StatusNotFound, - msg: "no such resource", + err: status.Error(codes.NotFound, "no such resource"), + status: http.StatusNotFound, + marshaler: &runtime.JSONPb{}, + contentType: "application/json", + msg: "no such resource", }, { - err: statusWithDetails.Err(), - status: http.StatusBadRequest, - msg: "failed precondition", - details: "type.googleapis.com/google.rpc.PreconditionFailure", + err: statusWithDetails.Err(), + status: http.StatusBadRequest, + marshaler: &runtime.JSONPb{}, + contentType: "application/json", + msg: "failed precondition", + details: "type.googleapis.com/google.rpc.PreconditionFailure", + }, + { + err: fmt.Errorf("example error"), + status: http.StatusInternalServerError, + marshaler: &CustomMarshaler{&runtime.JSONPb{}}, + contentType: "Custom-Content-Type", + msg: "example error", }, } { w := httptest.NewRecorder() diff --git a/runtime/handler.go b/runtime/handler.go index 2af900650dc..b894da86bf8 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -1,13 +1,13 @@ package runtime import ( + "context" "errors" "fmt" "io" "net/http" "net/textproto" - "context" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/internal" "google.golang.org/grpc/grpclog" @@ -126,8 +126,8 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha // Check marshaler on run time in order to keep backwards compatability // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check - if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { - contentType = httpBodyMarshaler.ContentTypeFromMessage(resp) + if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { + contentType = typeMarshaler.ContentTypeFromMessage(resp) } w.Header().Set("Content-Type", contentType) diff --git a/runtime/handler_test.go b/runtime/handler_test.go index f9a17916da1..912cb3acfa5 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -1,14 +1,13 @@ package runtime_test import ( + "context" "io" "io/ioutil" "net/http" "net/http/httptest" "testing" - "context" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/runtime" @@ -134,11 +133,12 @@ type CustomMarshaler struct { m *runtime.JSONPb } -func (c *CustomMarshaler) Marshal(v interface{}) ([]byte, error) { return c.m.Marshal(v) } -func (c *CustomMarshaler) Unmarshal(data []byte, v interface{}) error { return c.m.Unmarshal(data, v) } -func (c *CustomMarshaler) NewDecoder(r io.Reader) runtime.Decoder { return c.m.NewDecoder(r) } -func (c *CustomMarshaler) NewEncoder(w io.Writer) runtime.Encoder { return c.m.NewEncoder(w) } -func (c *CustomMarshaler) ContentType() string { return c.m.ContentType() } +func (c *CustomMarshaler) Marshal(v interface{}) ([]byte, error) { return c.m.Marshal(v) } +func (c *CustomMarshaler) Unmarshal(data []byte, v interface{}) error { return c.m.Unmarshal(data, v) } +func (c *CustomMarshaler) NewDecoder(r io.Reader) runtime.Decoder { return c.m.NewDecoder(r) } +func (c *CustomMarshaler) NewEncoder(w io.Writer) runtime.Encoder { return c.m.NewEncoder(w) } +func (c *CustomMarshaler) ContentType() string { return c.m.ContentType() } +func (c *CustomMarshaler) ContentTypeFromMessage(v interface{}) string { return "Custom-Content-Type" } func TestForwardResponseStreamCustomMarshaler(t *testing.T) { type msg struct { @@ -227,3 +227,56 @@ func TestForwardResponseStreamCustomMarshaler(t *testing.T) { }) } } + +func TestForwardResponseMessage(t *testing.T) { + msg := &pb.SimpleMessage{Id: "One"} + tests := []struct { + name string + marshaler runtime.Marshaler + contentType string + }{{ + name: "standard marshaler", + marshaler: &runtime.JSONPb{}, + contentType: "application/json", + }, { + name: "httpbody marshaler", + marshaler: &runtime.HTTPBodyMarshaler{&runtime.JSONPb{}}, + contentType: "application/json", + }, { + name: "custom marshaler", + marshaler: &CustomMarshaler{&runtime.JSONPb{}}, + contentType: "Custom-Content-Type", + }} + + ctx := runtime.NewServerMetadataContext(context.Background(), runtime.ServerMetadata{}) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req := httptest.NewRequest("GET", "http://example.com/foo", nil) + resp := httptest.NewRecorder() + + runtime.ForwardResponseMessage(ctx, runtime.NewServeMux(), tt.marshaler, resp, req, msg) + + w := resp.Result() + if w.StatusCode != http.StatusOK { + t.Errorf("StatusCode %d want %d", w.StatusCode, http.StatusOK) + } + if h := w.Header.Get("Content-Type"); h != tt.contentType { + t.Errorf("Content-Type %v want %v", h, tt.contentType) + } + body, err := ioutil.ReadAll(w.Body) + if err != nil { + t.Errorf("Failed to read response body with %v", err) + } + w.Body.Close() + + want, err := tt.marshaler.Marshal(msg) + if err != nil { + t.Errorf("marshaler.Marshal() failed %v", err) + } + + if string(body) != string(want) { + t.Errorf("ForwardResponseMessage() = \"%s\" want \"%s\"", body, want) + } + }) + } +} diff --git a/runtime/marshaler.go b/runtime/marshaler.go index 98fe6e88ac5..3fdf9fd8738 100644 --- a/runtime/marshaler.go +++ b/runtime/marshaler.go @@ -19,6 +19,13 @@ type Marshaler interface { ContentType() string } +// Marshalers that implement contentTypeMarshaler will have their ContentTypeFromMessage method called +// to set the Content-Type header on the response +type contentTypeMarshaler interface { + // ContentTypeFromMessage returns the Content-Type this marshaler produces from the provided message + ContentTypeFromMessage(v interface{}) string +} + // Decoder decodes a byte sequence type Decoder interface { Decode(v interface{}) error diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index ca76324efb1..ea75565868d 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -47,9 +47,9 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler // Check marshaler on run time in order to keep backwards compatability // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check - if httpBodyMarshaler, ok := marshaler.(*HTTPBodyMarshaler); ok { + if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { pb := s.Proto() - contentType = httpBodyMarshaler.ContentTypeFromMessage(pb) + contentType = typeMarshaler.ContentTypeFromMessage(pb) } w.Header().Set("Content-Type", contentType) From 9bf8596b3197acd4d9be856698107f8df4244fd0 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 4 Mar 2020 21:28:14 +0000 Subject: [PATCH 0269/1518] Generate changelog for 1.14.0 --- CHANGELOG.md | 27 ++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 614f938ea25..0de59d698e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## [v1.14.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.0) (2020-03-04) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.13.0...v1.14.0) + +**Closed issues:** + +- Swagger Codegen With Multiple Additional Bindings is resulting in missing Documentation [\#1149](https://github.com/grpc-ecosystem/grpc-gateway/issues/1149) +- google.api.http option not picked up/mapped correctly? [\#1148](https://github.com/grpc-ecosystem/grpc-gateway/issues/1148) +- cannot use multiple different error handlers in one gateway binary [\#1143](https://github.com/grpc-ecosystem/grpc-gateway/issues/1143) +- Is grpc-gateway a stateless application? [\#1139](https://github.com/grpc-ecosystem/grpc-gateway/issues/1139) +- Support for custom query parameters parsers [\#1128](https://github.com/grpc-ecosystem/grpc-gateway/issues/1128) + +**Merged pull requests:** + +- Use an interface for ContentTypeFromMessage [\#1150](https://github.com/grpc-ecosystem/grpc-gateway/pull/1150) ([wtlangford](https://github.com/wtlangford)) +- Minimize API surface in anticipation of gorelease [\#1146](https://github.com/grpc-ecosystem/grpc-gateway/pull/1146) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Fix \#1143: Support multiple error handlers. [\#1144](https://github.com/grpc-ecosystem/grpc-gateway/pull/1144) ([jgiles](https://github.com/jgiles)) +- Fix customizing your gateway documentation CustomMatcher example [\#1142](https://github.com/grpc-ecosystem/grpc-gateway/pull/1142) ([wiliamsouza](https://github.com/wiliamsouza)) +- protoc-gen-swagger: add flag to disable default errors [\#1141](https://github.com/grpc-ecosystem/grpc-gateway/pull/1141) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Bump nokogiri from 1.10.4 to 1.10.8 in /docs [\#1140](https://github.com/grpc-ecosystem/grpc-gateway/pull/1140) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Configurable query parameters parser [\#1138](https://github.com/grpc-ecosystem/grpc-gateway/pull/1138) ([wp0pw](https://github.com/wp0pw)) +- Improve installation instructions [\#1132](https://github.com/grpc-ecosystem/grpc-gateway/pull/1132) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add bazel gazelle to CONTRIBUTING [\#1131](https://github.com/grpc-ecosystem/grpc-gateway/pull/1131) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Configure response content type at the method level [\#1130](https://github.com/grpc-ecosystem/grpc-gateway/pull/1130) ([nboukeffa](https://github.com/nboukeffa)) + ## [v1.13.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.13.0) (2020-02-11) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.12.2...v1.13.0) @@ -17,6 +41,7 @@ **Merged pull requests:** +- Generate changelog for 1.13.0 [\#1129](https://github.com/grpc-ecosystem/grpc-gateway/pull/1129) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Fix \#1125: JSON-prefix nested-field params. [\#1126](https://github.com/grpc-ecosystem/grpc-gateway/pull/1126) ([jgiles](https://github.com/jgiles)) - Fix \#1117: Support response examples. [\#1124](https://github.com/grpc-ecosystem/grpc-gateway/pull/1124) ([jgiles](https://github.com/jgiles)) @@ -157,7 +182,7 @@ - nitpick spacing in other proto files [\#1032](https://github.com/grpc-ecosystem/grpc-gateway/pull/1032) ([srenatus](https://github.com/srenatus)) - nitpick a\_bit\_of\_everything.proto [\#1030](https://github.com/grpc-ecosystem/grpc-gateway/pull/1030) ([srenatus](https://github.com/srenatus)) - runtime: stop using nil ponters with Unmarshal [\#1028](https://github.com/grpc-ecosystem/grpc-gateway/pull/1028) ([johanbrandhorst](https://github.com/johanbrandhorst)) -- Small performance fix [\#1027](https://github.com/grpc-ecosystem/grpc-gateway/pull/1027) ([freedemster](https://github.com/freedemster)) +- Small performance fix [\#1027](https://github.com/grpc-ecosystem/grpc-gateway/pull/1027) ([dshemin](https://github.com/dshemin)) - docs need type assertion on proto.Message [\#1026](https://github.com/grpc-ecosystem/grpc-gateway/pull/1026) ([zachgersh](https://github.com/zachgersh)) - Update ISSUE\_TEMPLATE.md [\#1014](https://github.com/grpc-ecosystem/grpc-gateway/pull/1014) ([prologic](https://github.com/prologic)) diff --git a/Makefile b/Makefile index bf3e882eb46..09e41fd58e5 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.13.0 + --future-release=v1.14.0 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 8e3580c2e31eb8b30ec3d7a6963212e3571a84e8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 4 Mar 2020 21:56:24 +0000 Subject: [PATCH 0270/1518] Update build environment to 1.14 --- .circleci/Dockerfile | 4 ++-- .circleci/README.md | 2 +- .circleci/config.yml | 12 ++++++------ CONTRIBUTING.md | 2 +- go.mod | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index c44eac5c23d..2eff32c6fdb 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.13.4 +FROM golang:1.14.0 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). @@ -9,7 +9,7 @@ RUN apt-get update && \ # Install swagger-codegen ENV SWAGGER_CODEGEN_VERSION=2.4.8 -RUN wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ +RUN wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_CODEGEN_VERSION}/swagger-codegen-cli-${SWAGGER_CODEGEN_VERSION}.jar \ -O /usr/local/bin/swagger-codegen-cli.jar # Wrap the jar for swagger-codgen diff --git a/.circleci/README.md b/.circleci/README.md index c6ce14672fb..5fe0b18c863 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -7,7 +7,7 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. Great, it should be as simple as thus (run from the root of the directory): ```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ make examples' diff --git a/.circleci/config.yml b/.circleci/config.yml index 7dc1c25c06f..bcada21745b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,14 @@ version: 2 jobs: build: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway environment: GLOG_logtostderr: '1' @@ -19,7 +19,7 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway steps: - checkout @@ -32,7 +32,7 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway steps: - checkout @@ -42,7 +42,7 @@ jobs: - run: git diff --exit-code lint: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway steps: - checkout @@ -84,7 +84,7 @@ jobs: when: always release: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.13 + - image: jfbrandhorst/grpc-gateway-build-env:1.14 working_directory: /src/grpc-gateway steps: - checkout diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e2ff6602e2e..5fde7c282f4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,7 +25,7 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.13 \ +docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples' diff --git a/go.mod b/go.mod index 23003a8626f..c8e880d3044 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/grpc-ecosystem/grpc-gateway -go 1.13 +go 1.14 require ( github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 From 65885572220c93766045377561bfdc25888c7e1b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 4 Mar 2020 21:43:35 +0000 Subject: [PATCH 0271/1518] Add gorelease CI step This should help avoid unintentionally breaking changes. --- .circleci/config.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index bcada21745b..5f20a8d3cde 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,6 +82,19 @@ jobs: command: 'bazel run //:buildifier_check || (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always + gorelease: + docker: + - image: jfbrandhorst/grpc-gateway-build-env:1.14 + working_directory: /src/grpc-gateway + steps: + - checkout + - run: + name: Install gorelease outside local module + command: | + cd $(mktemp -d) && + go mod init tmp && + go get golang.org/x/exp/cmd/gorelease@latest + - run: gorelease release: docker: - image: jfbrandhorst/grpc-gateway-build-env:1.14 @@ -101,6 +114,7 @@ workflows: - generate - lint - bazel + - gorelease - release: filters: branches: From 0c9d3eb7ca8e28a7c8db327d6ef63902bfbfd778 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 5 Mar 2020 09:13:51 +0000 Subject: [PATCH 0272/1518] Move generator and descriptor back to public API These two packages are depended on by at least one other popular package. --- Makefile | 16 ++++++++-------- protoc-gen-grpc-gateway/BUILD.bazel | 2 +- .../descriptor/BUILD.bazel | 2 +- .../descriptor/grpc_api_configuration.go | 0 .../descriptor/grpc_api_configuration_test.go | 0 .../descriptor/grpc_api_service.go | 0 .../descriptor/registry.go | 0 .../descriptor/registry_test.go | 0 .../descriptor/services.go | 0 .../descriptor/services_test.go | 0 .../descriptor/types.go | 0 .../descriptor/types_test.go | 0 .../generator/BUILD.bazel | 4 ++-- .../generator/generator.go | 2 +- .../internal/gengateway/BUILD.bazel | 6 +++--- .../internal/gengateway/generator.go | 4 ++-- .../internal/gengateway/generator_test.go | 2 +- .../internal/gengateway/template.go | 2 +- .../internal/gengateway/template_test.go | 2 +- protoc-gen-grpc-gateway/main.go | 2 +- protoc-gen-swagger/BUILD.bazel | 2 +- .../internal/genswagger/BUILD.bazel | 6 +++--- .../internal/genswagger/generator.go | 4 ++-- .../internal/genswagger/template.go | 2 +- .../internal/genswagger/template_test.go | 2 +- protoc-gen-swagger/internal/genswagger/types.go | 2 +- protoc-gen-swagger/main.go | 2 +- 27 files changed, 32 insertions(+), 32 deletions(-) rename {internal => protoc-gen-grpc-gateway}/descriptor/BUILD.bazel (93%) rename {internal => protoc-gen-grpc-gateway}/descriptor/grpc_api_configuration.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/grpc_api_configuration_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/grpc_api_service.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/registry.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/registry_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/services.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/services_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/types.go (100%) rename {internal => protoc-gen-grpc-gateway}/descriptor/types_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/generator/BUILD.bazel (62%) rename {internal => protoc-gen-grpc-gateway}/generator/generator.go (83%) diff --git a/Makefile b/Makefile index 09e41fd58e5..cc487e260bb 100644 --- a/Makefile +++ b/Makefile @@ -21,14 +21,14 @@ GATEWAY_PLUGIN_SRC= utilities/doc.go \ utilities/pattern.go \ utilities/trie.go \ protoc-gen-grpc-gateway \ - internal/descriptor \ - internal/descriptor/registry.go \ - internal/descriptor/services.go \ - internal/descriptor/types.go \ - internal/descriptor/grpc_api_configuration.go \ - internal/descriptor/grpc_api_service.go \ - internal/generator \ - internal/generator/generator.go \ + protoc-gen-grpc-gateway/descriptor \ + protoc-gen-grpc-gateway/descriptor/registry.go \ + protoc-gen-grpc-gateway/descriptor/services.go \ + protoc-gen-grpc-gateway/descriptor/types.go \ + protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go \ + protoc-gen-grpc-gateway/descriptor/grpc_api_service.go \ + protoc-gen-grpc-gateway/generator \ + protoc-gen-grpc-gateway/generator/generator.go \ protoc-gen-grpc-gateway/internal/gengateway \ protoc-gen-grpc-gateway/internal/gengateway/doc.go \ protoc-gen-grpc-gateway/internal/gengateway/generator.go \ diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 711e038c368..22f7c363362 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -9,7 +9,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway", deps = [ "//internal/codegenerator:go_default_library", - "//internal/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", diff --git a/internal/descriptor/BUILD.bazel b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel similarity index 93% rename from internal/descriptor/BUILD.bazel rename to protoc-gen-grpc-gateway/descriptor/BUILD.bazel index 8d1df906f79..17a1c0f65ca 100644 --- a/internal/descriptor/BUILD.bazel +++ b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel @@ -11,7 +11,7 @@ go_library( "services.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor", deps = [ "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", diff --git a/internal/descriptor/grpc_api_configuration.go b/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go similarity index 100% rename from internal/descriptor/grpc_api_configuration.go rename to protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go diff --git a/internal/descriptor/grpc_api_configuration_test.go b/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go similarity index 100% rename from internal/descriptor/grpc_api_configuration_test.go rename to protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go diff --git a/internal/descriptor/grpc_api_service.go b/protoc-gen-grpc-gateway/descriptor/grpc_api_service.go similarity index 100% rename from internal/descriptor/grpc_api_service.go rename to protoc-gen-grpc-gateway/descriptor/grpc_api_service.go diff --git a/internal/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go similarity index 100% rename from internal/descriptor/registry.go rename to protoc-gen-grpc-gateway/descriptor/registry.go diff --git a/internal/descriptor/registry_test.go b/protoc-gen-grpc-gateway/descriptor/registry_test.go similarity index 100% rename from internal/descriptor/registry_test.go rename to protoc-gen-grpc-gateway/descriptor/registry_test.go diff --git a/internal/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go similarity index 100% rename from internal/descriptor/services.go rename to protoc-gen-grpc-gateway/descriptor/services.go diff --git a/internal/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go similarity index 100% rename from internal/descriptor/services_test.go rename to protoc-gen-grpc-gateway/descriptor/services_test.go diff --git a/internal/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go similarity index 100% rename from internal/descriptor/types.go rename to protoc-gen-grpc-gateway/descriptor/types.go diff --git a/internal/descriptor/types_test.go b/protoc-gen-grpc-gateway/descriptor/types_test.go similarity index 100% rename from internal/descriptor/types_test.go rename to protoc-gen-grpc-gateway/descriptor/types_test.go diff --git a/internal/generator/BUILD.bazel b/protoc-gen-grpc-gateway/generator/BUILD.bazel similarity index 62% rename from internal/generator/BUILD.bazel rename to protoc-gen-grpc-gateway/generator/BUILD.bazel index 17f3d31c5dd..7c0c6bfc15c 100644 --- a/internal/generator/BUILD.bazel +++ b/protoc-gen-grpc-gateway/generator/BUILD.bazel @@ -5,9 +5,9 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = ["generator.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/generator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator", deps = [ - "//internal/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/internal/generator/generator.go b/protoc-gen-grpc-gateway/generator/generator.go similarity index 83% rename from internal/generator/generator.go rename to protoc-gen-grpc-gateway/generator/generator.go index 5d03cff15d0..df55da44445 100644 --- a/internal/generator/generator.go +++ b/protoc-gen-grpc-gateway/generator/generator.go @@ -3,7 +3,7 @@ package generator import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" ) // Generator is an abstraction of code generators. diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index b3528a9abb3..79b70f54486 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -11,8 +11,8 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway", deps = [ - "//internal/descriptor:go_default_library", - "//internal/generator:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/generator:go_default_library", "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", @@ -30,8 +30,8 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//internal/descriptor:go_default_library", "//internal/httprule:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index d687f32be5b..0b6bfbd2b93 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -11,8 +11,8 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/internal/generator" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" ) var ( diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index 99d8ae0125d..39e5f141dbe 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -7,7 +7,7 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" ) func newExampleFileDescriptor() *descriptor.File { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index fd5cc11f9be..1d3d3ca8f19 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -9,7 +9,7 @@ import ( "github.com/golang/glog" generator2 "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 628d53220dd..aff3fa906b2 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index f3ed3ae726e..fb44e412fe5 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -18,7 +18,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway" ) diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index 0aacac9cea5..16ec801494b 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -8,7 +8,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger", deps = [ "//internal/codegenerator:go_default_library", - "//internal/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-swagger/internal/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", diff --git a/protoc-gen-swagger/internal/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel index 0ef9926ff20..7aa972a18d1 100644 --- a/protoc-gen-swagger/internal/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -15,8 +15,8 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger", deps = [ "//internal:go_default_library", - "//internal/descriptor:go_default_library", - "//internal/generator:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", @@ -36,8 +36,8 @@ go_test( srcs = ["template_test.go"], embed = [":go_default_library"], deps = [ - "//internal/descriptor:go_default_library", "//internal/httprule:go_default_library", + "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", diff --git a/protoc-gen-swagger/internal/genswagger/generator.go b/protoc-gen-swagger/internal/genswagger/generator.go index 6e4a554a842..ecf1135fde7 100644 --- a/protoc-gen-swagger/internal/genswagger/generator.go +++ b/protoc-gen-swagger/internal/genswagger/generator.go @@ -16,8 +16,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/internal" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/internal/generator" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go index 320e3f1b6e7..9e0b5ce58af 100644 --- a/protoc-gen-swagger/internal/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -20,7 +20,7 @@ import ( pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go index 9c8c913f33f..b0822d80183 100644 --- a/protoc-gen-swagger/internal/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -12,8 +12,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/internal/genswagger/types.go b/protoc-gen-swagger/internal/genswagger/types.go index d46f14cf6a1..255f53c77ca 100644 --- a/protoc-gen-swagger/internal/genswagger/types.go +++ b/protoc-gen-swagger/internal/genswagger/types.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" ) type param struct { diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index bbe25649f46..0bf1c66c4dd 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -10,7 +10,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger" ) From 83c7c1948180f4a79579be0a13eb46e820a3ddb5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 5 Mar 2020 10:15:52 +0000 Subject: [PATCH 0273/1518] Generate changelog for 1.14.1 --- CHANGELOG.md | 10 ++++++++++ Makefile | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de59d698e1..a813b873355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log +## [v1.14.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.1) (2020-03-05) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.0...v1.14.1) + +**Merged pull requests:** + +- Move generator and descriptor back to public API [\#1155](https://github.com/grpc-ecosystem/grpc-gateway/pull/1155) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Update build environment to 1.14 [\#1153](https://github.com/grpc-ecosystem/grpc-gateway/pull/1153) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add gorelease CI step [\#1152](https://github.com/grpc-ecosystem/grpc-gateway/pull/1152) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.14.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.0) (2020-03-04) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.13.0...v1.14.0) @@ -13,6 +22,7 @@ **Merged pull requests:** +- Generate changelog for 1.14.0 [\#1151](https://github.com/grpc-ecosystem/grpc-gateway/pull/1151) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Use an interface for ContentTypeFromMessage [\#1150](https://github.com/grpc-ecosystem/grpc-gateway/pull/1150) ([wtlangford](https://github.com/wtlangford)) - Minimize API surface in anticipation of gorelease [\#1146](https://github.com/grpc-ecosystem/grpc-gateway/pull/1146) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Fix \#1143: Support multiple error handlers. [\#1144](https://github.com/grpc-ecosystem/grpc-gateway/pull/1144) ([jgiles](https://github.com/jgiles)) diff --git a/Makefile b/Makefile index cc487e260bb..d39f4a9190e 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.0 + --future-release=v1.14.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 6a3b41c5cf69b9c735b9815a4162b58d34d11c39 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 9 Mar 2020 11:46:08 +0000 Subject: [PATCH 0274/1518] Move genswagger to public API again Fixes #1162 --- Makefile | 4 ++-- protoc-gen-swagger/BUILD.bazel | 2 +- protoc-gen-swagger/{internal => }/genswagger/BUILD.bazel | 2 +- protoc-gen-swagger/{internal => }/genswagger/doc.go | 0 protoc-gen-swagger/{internal => }/genswagger/generator.go | 0 protoc-gen-swagger/{internal => }/genswagger/helpers.go | 0 .../{internal => }/genswagger/helpers_go111_old.go | 0 protoc-gen-swagger/{internal => }/genswagger/template.go | 0 protoc-gen-swagger/{internal => }/genswagger/template_test.go | 0 protoc-gen-swagger/{internal => }/genswagger/types.go | 0 protoc-gen-swagger/main.go | 2 +- 11 files changed, 5 insertions(+), 5 deletions(-) rename protoc-gen-swagger/{internal => }/genswagger/BUILD.bazel (98%) rename protoc-gen-swagger/{internal => }/genswagger/doc.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/generator.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/helpers.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/helpers_go111_old.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/template.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/template_test.go (100%) rename protoc-gen-swagger/{internal => }/genswagger/types.go (100%) diff --git a/Makefile b/Makefile index d39f4a9190e..0bf44a9f0cf 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,8 @@ SWAGGER_PLUGIN=bin/protoc-gen-swagger SWAGGER_PLUGIN_SRC= utilities/doc.go \ utilities/pattern.go \ utilities/trie.go \ - protoc-gen-swagger/internal/genswagger/generator.go \ - protoc-gen-swagger/internal/genswagger/template.go \ + protoc-gen-swagger/genswagger/generator.go \ + protoc-gen-swagger/genswagger/template.go \ protoc-gen-swagger/main.go SWAGGER_PLUGIN_PKG=./protoc-gen-swagger GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index 16ec801494b..0c823e2741b 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -9,7 +9,7 @@ go_library( deps = [ "//internal/codegenerator:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-swagger/internal/genswagger:go_default_library", + "//protoc-gen-swagger/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-swagger/internal/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel similarity index 98% rename from protoc-gen-swagger/internal/genswagger/BUILD.bazel rename to protoc-gen-swagger/genswagger/BUILD.bazel index 7aa972a18d1..99ba6229f86 100644 --- a/protoc-gen-swagger/internal/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -12,7 +12,7 @@ go_library( "template.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger", deps = [ "//internal:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", diff --git a/protoc-gen-swagger/internal/genswagger/doc.go b/protoc-gen-swagger/genswagger/doc.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/doc.go rename to protoc-gen-swagger/genswagger/doc.go diff --git a/protoc-gen-swagger/internal/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/generator.go rename to protoc-gen-swagger/genswagger/generator.go diff --git a/protoc-gen-swagger/internal/genswagger/helpers.go b/protoc-gen-swagger/genswagger/helpers.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/helpers.go rename to protoc-gen-swagger/genswagger/helpers.go diff --git a/protoc-gen-swagger/internal/genswagger/helpers_go111_old.go b/protoc-gen-swagger/genswagger/helpers_go111_old.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/helpers_go111_old.go rename to protoc-gen-swagger/genswagger/helpers_go111_old.go diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/template.go rename to protoc-gen-swagger/genswagger/template.go diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/template_test.go rename to protoc-gen-swagger/genswagger/template_test.go diff --git a/protoc-gen-swagger/internal/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go similarity index 100% rename from protoc-gen-swagger/internal/genswagger/types.go rename to protoc-gen-swagger/genswagger/types.go diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 0bf1c66c4dd..fa32f42cbb1 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -11,7 +11,7 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/internal/genswagger" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger" ) var ( From 1d76dee99208b153c4f0d205af3ff91260b30c79 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 9 Mar 2020 12:55:21 +0000 Subject: [PATCH 0275/1518] Generate changelog for 1.14.2 --- CHANGELOG.md | 14 +++++++++++++- Makefile | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a813b873355..b2676120084 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,22 @@ # Change Log +## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) + +**Merged pull requests:** + +- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +**Closed issues:** + +- 1.14.x breaks clay [\#1161](https://github.com/grpc-ecosystem/grpc-gateway/issues/1161) + ## [v1.14.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.1) (2020-03-05) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.0...v1.14.1) **Merged pull requests:** +- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1151) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Move generator and descriptor back to public API [\#1155](https://github.com/grpc-ecosystem/grpc-gateway/pull/1155) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update build environment to 1.14 [\#1153](https://github.com/grpc-ecosystem/grpc-gateway/pull/1153) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add gorelease CI step [\#1152](https://github.com/grpc-ecosystem/grpc-gateway/pull/1152) ([johanbrandhorst](https://github.com/johanbrandhorst)) @@ -1334,4 +1346,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* diff --git a/Makefile b/Makefile index 0bf44a9f0cf..1b4f4a9f6fd 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.1 + --future-release=v1.14.2 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 13f6eb39fada50d19c0ab4efce7812040a618313 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 11 Mar 2020 09:25:44 +0000 Subject: [PATCH 0276/1518] Move httprule back into the public API Fixes #1168 --- Makefile | 8 ++++---- fuzzit.sh | 4 ++-- protoc-gen-grpc-gateway/descriptor/BUILD.bazel | 4 ++-- protoc-gen-grpc-gateway/descriptor/services.go | 2 +- protoc-gen-grpc-gateway/descriptor/services_test.go | 2 +- protoc-gen-grpc-gateway/descriptor/types.go | 2 +- .../httprule/BUILD.bazel | 2 +- {internal => protoc-gen-grpc-gateway}/httprule/compile.go | 0 .../httprule/compile_test.go | 0 {internal => protoc-gen-grpc-gateway}/httprule/fuzz.go | 0 {internal => protoc-gen-grpc-gateway}/httprule/parse.go | 0 .../httprule/parse_test.go | 0 {internal => protoc-gen-grpc-gateway}/httprule/types.go | 0 .../httprule/types_test.go | 0 protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel | 2 +- .../internal/gengateway/template_test.go | 2 +- protoc-gen-swagger/genswagger/BUILD.bazel | 2 +- protoc-gen-swagger/genswagger/template_test.go | 2 +- 18 files changed, 16 insertions(+), 16 deletions(-) rename {internal => protoc-gen-grpc-gateway}/httprule/BUILD.bazel (88%) rename {internal => protoc-gen-grpc-gateway}/httprule/compile.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/compile_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/fuzz.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/parse.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/parse_test.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/types.go (100%) rename {internal => protoc-gen-grpc-gateway}/httprule/types_test.go (100%) diff --git a/Makefile b/Makefile index 1b4f4a9f6fd..6c4a34d3fa2 100644 --- a/Makefile +++ b/Makefile @@ -33,10 +33,10 @@ GATEWAY_PLUGIN_SRC= utilities/doc.go \ protoc-gen-grpc-gateway/internal/gengateway/doc.go \ protoc-gen-grpc-gateway/internal/gengateway/generator.go \ protoc-gen-grpc-gateway/internal/gengateway/template.go \ - internal/httprule \ - internal/httprule/compile.go \ - internal/httprule/parse.go \ - internal/httprule/types.go \ + protoc-gen-grpc-gateway/httprule \ + protoc-gen-grpc-gateway/httprule/compile.go \ + protoc-gen-grpc-gateway/httprule/parse.go \ + protoc-gen-grpc-gateway/httprule/types.go \ protoc-gen-grpc-gateway/main.go GATEWAY_PLUGIN_FLAGS?= SWAGGER_PLUGIN_FLAGS?= diff --git a/fuzzit.sh b/fuzzit.sh index 43c0f23918b..e5df5f3f843 100755 --- a/fuzzit.sh +++ b/fuzzit.sh @@ -9,9 +9,9 @@ cd go-fuzz go get ./... go build ./... -#go get -v -u ./internal/httprule +#go get -v -u ./protoc-gen-grpc-gateway/httprule cd /src/grpc-gateway -go-fuzz-build -libfuzzer -o parse-http-rule.a ./internal/httprule +go-fuzz-build -libfuzzer -o parse-http-rule.a ./protoc-gen-grpc-gateway/httprule clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel index 17a1c0f65ca..631f5c8a503 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel @@ -13,7 +13,7 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor", deps = [ - "//internal/httprule:go_default_library", + "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", @@ -36,7 +36,7 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//internal/httprule:go_default_library", + "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index 2f9103eef4f..9efc9f9754e 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -7,7 +7,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" options "google.golang.org/genproto/googleapis/api/annotations" ) diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index 26329fd2a08..1ccb8fbef0a 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" ) func compilePath(t *testing.T, path string) httprule.Template { diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index fcdb9940b47..4aa75f85dbf 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" ) // IsWellKnownType returns true if the provided fully qualified type name is considered 'well-known'. diff --git a/internal/httprule/BUILD.bazel b/protoc-gen-grpc-gateway/httprule/BUILD.bazel similarity index 88% rename from internal/httprule/BUILD.bazel rename to protoc-gen-grpc-gateway/httprule/BUILD.bazel index 2064217e6a6..bcb42f25112 100644 --- a/internal/httprule/BUILD.bazel +++ b/protoc-gen-grpc-gateway/httprule/BUILD.bazel @@ -9,7 +9,7 @@ go_library( "parse.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/httprule", + importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule", deps = [ "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/internal/httprule/compile.go b/protoc-gen-grpc-gateway/httprule/compile.go similarity index 100% rename from internal/httprule/compile.go rename to protoc-gen-grpc-gateway/httprule/compile.go diff --git a/internal/httprule/compile_test.go b/protoc-gen-grpc-gateway/httprule/compile_test.go similarity index 100% rename from internal/httprule/compile_test.go rename to protoc-gen-grpc-gateway/httprule/compile_test.go diff --git a/internal/httprule/fuzz.go b/protoc-gen-grpc-gateway/httprule/fuzz.go similarity index 100% rename from internal/httprule/fuzz.go rename to protoc-gen-grpc-gateway/httprule/fuzz.go diff --git a/internal/httprule/parse.go b/protoc-gen-grpc-gateway/httprule/parse.go similarity index 100% rename from internal/httprule/parse.go rename to protoc-gen-grpc-gateway/httprule/parse.go diff --git a/internal/httprule/parse_test.go b/protoc-gen-grpc-gateway/httprule/parse_test.go similarity index 100% rename from internal/httprule/parse_test.go rename to protoc-gen-grpc-gateway/httprule/parse_test.go diff --git a/internal/httprule/types.go b/protoc-gen-grpc-gateway/httprule/types.go similarity index 100% rename from internal/httprule/types.go rename to protoc-gen-grpc-gateway/httprule/types.go diff --git a/internal/httprule/types_test.go b/protoc-gen-grpc-gateway/httprule/types_test.go similarity index 100% rename from internal/httprule/types_test.go rename to protoc-gen-grpc-gateway/httprule/types_test.go diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 79b70f54486..8483a78ef4f 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -30,8 +30,8 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//internal/httprule:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index aff3fa906b2..69809792b4c 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 99ba6229f86..c89eb04477d 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -36,8 +36,8 @@ go_test( srcs = ["template_test.go"], embed = [":go_default_library"], deps = [ - "//internal/httprule:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//protoc-gen-grpc-gateway/httprule:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index b0822d80183..cda39688835 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -12,8 +12,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/internal/httprule" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) From 5ec11588db26960526dccc39cf40367a54d76e16 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 11 Mar 2020 09:42:37 +0000 Subject: [PATCH 0277/1518] Generate changelog for 1.14.3 --- CHANGELOG.md | 11 +++++++++++ Makefile | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2676120084..816d64543a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) + +**Merged pull requests:** + +- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +**Closed issues:** + +- Missing httprule breaks our module [\#1168](https://github.com/grpc-ecosystem/grpc-gateway/issues/1168) + ## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) diff --git a/Makefile b/Makefile index 6c4a34d3fa2..60db5e3561c 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.2 + --future-release=v1.14.3 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 782e0485b83e0e95ec69b06d425754891d4f8933 Mon Sep 17 00:00:00 2001 From: Koptelov Nikita Date: Tue, 10 Mar 2020 13:29:47 +0300 Subject: [PATCH 0278/1518] genswagger: test-covered #1162(unset default error ref) --- .../genswagger/template_test.go | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index cda39688835..da602b03f3f 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "reflect" + "strings" "testing" "github.com/golang/protobuf/proto" @@ -2074,3 +2075,86 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { }) } } + +func TestTemplateWithoutErrorDefinition(t *testing.T) { + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{}, + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Echo"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + MessageType: []*protodescriptor.DescriptorProto{msgdesc, msgdesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "POST", + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", + }, + Body: &descriptor.Body{ + FieldPath: descriptor.FieldPath([]descriptor.FieldPathComponent{}), + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + defRsp, ok := result.Paths["/v1/echo"].Post.Responses["default"] + if !ok { + return + } + + ref := defRsp.Schema.schemaCore.Ref + // TODO utrack: is there a better way to find object by ref? + refName := strings.TrimPrefix(ref, "#/definitions/") + if refName == "" { + t.Fatal("created default Error response with empty reflink") + } + + if _, ok := result.Definitions[refName]; !ok { + t.Errorf("default Error response with reflink '%v', but its definition was not found", refName) + } +} From 6b0cd604a57118cda224f8f60dc536d758627d0e Mon Sep 17 00:00:00 2001 From: Koptelov Nikita Date: Tue, 10 Mar 2020 13:42:26 +0300 Subject: [PATCH 0279/1518] genswagger: no default response when Error is unset Swagger: do not create default response definitions if we can't find Error/StreamError in Registry, even if `DisableDefaultErrors()` is false. Logs are still emitted if default errors are enabled, but error definition was not found. grep: `.grpc.gateway.runtime.Error`, `.grpc.gateway.runtime.StreamError` Closes #1162 --- protoc-gen-swagger/genswagger/template.go | 44 ++++++++++++++++------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 9e0b5ce58af..48de50eff3e 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -518,14 +518,24 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r // Take in a FQMN or FQEN and return a swagger safe version of the FQMN func fullyQualifiedNameToSwaggerName(fqn string, reg *descriptor.Registry) string { + ret, _ := fullyQualifiedNameToSwaggerNameOk(fqn, reg) + return ret +} + +// Take in a FQMN or FQEN and return a swagger safe version of the FQMN and +// a boolean indicating if FQMN was properly resolved. +// TODO utrack: bad name? +func fullyQualifiedNameToSwaggerNameOk(fqn string, reg *descriptor.Registry) (string, bool) { registriesSeenMutex.Lock() defer registriesSeenMutex.Unlock() if mapping, present := registriesSeen[reg]; present { - return mapping[fqn] + ret, ok := mapping[fqn] + return ret, ok } mapping := resolveFullyQualifiedNameToSwaggerNames(append(reg.GetAllFQMNs(), reg.GetAllFQENs()...), reg.GetUseFQNForSwaggerName()) registriesSeen[reg] = mapping - return mapping[fqn] + ret, ok := mapping[fqn] + return ret, ok } // registriesSeen is used to memoise calls to resolveFullyQualifiedNameToSwaggerNames so @@ -849,7 +859,8 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re desc += "(streaming responses)" responseSchema.Type = "object" responseSchema.Title = fmt.Sprintf("Stream result of %s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)) - responseSchema.Properties = &swaggerSchemaObjectProperties{ + + props := swaggerSchemaObjectProperties{ keyVal{ Key: "result", Value: swaggerSchemaObject{ @@ -858,14 +869,18 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, }, }, - keyVal{ + } + streamErrDef, hasStreamError := fullyQualifiedNameToSwaggerNameOk(".grpc.gateway.runtime.StreamError", reg) + if hasStreamError { + props = append(props, keyVal{ Key: "error", Value: swaggerSchemaObject{ schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg))}, + Ref: fmt.Sprintf("#/definitions/%s", streamErrDef)}, }, - }, + }) } + responseSchema.Properties = &props responseSchema.Ref = "" } @@ -885,14 +900,17 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, } if !reg.GetDisableDefaultErrors() { - // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object - operationObject.Responses["default"] = swaggerResponseObject{ - Description: "An unexpected error response", - Schema: swaggerSchemaObject{ - schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg)), + errDef, hasErrDef := fullyQualifiedNameToSwaggerNameOk(".grpc.gateway.runtime.Error", reg) + if hasErrDef { + // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object + operationObject.Responses["default"] = swaggerResponseObject{ + Description: "An unexpected error response", + Schema: swaggerSchemaObject{ + schemaCore: schemaCore{ + Ref: fmt.Sprintf("#/definitions/%s", errDef), + }, }, - }, + } } } if bIdx == 0 { From c7d450f0f4e1bb0b1f05546c712eb040fef65d5a Mon Sep 17 00:00:00 2001 From: Koptelov Nikita Date: Wed, 11 Mar 2020 14:14:10 +0300 Subject: [PATCH 0280/1518] genswagger: emit errors if swagger name can't be resolved --- protoc-gen-swagger/genswagger/template.go | 114 ++++++++++++------ .../genswagger/template_test.go | 1 - protoc-gen-swagger/genswagger/types.go | 10 ++ 3 files changed, 88 insertions(+), 37 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 48de50eff3e..1d3ff8d475c 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -221,28 +221,40 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto for _, svc := range s { for _, meth := range svc.Methods { // Request may be fully included in query - if _, ok := refs[fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg))]; ok { - if !skipRenderingRef(meth.RequestType.FQMN()) { - m[fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)] = meth.RequestType + { + swgReqName, ok := fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg) + if !ok { + glog.Errorf("couldn't resolve swagger name for FQMN '%v'", meth.RequestType.FQMN()) + continue + } + if _, ok := refs[fmt.Sprintf("#/definitions/%s", swgReqName)]; ok { + if !skipRenderingRef(meth.RequestType.FQMN()) { + m[swgReqName] = meth.RequestType + } } } + + swgRspName, ok := fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg) + if !ok && !skipRenderingRef(meth.ResponseType.FQMN()) { + glog.Errorf("couldn't resolve swagger name for FQMN '%v'", meth.ResponseType.FQMN()) + continue + } + findNestedMessagesAndEnumerations(meth.RequestType, reg, m, e) if !skipRenderingRef(meth.ResponseType.FQMN()) { - m[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + m[swgRspName] = meth.ResponseType if meth.GetServerStreaming() { - runtimeStreamError := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg) - glog.V(1).Infof("StreamError FQMN: %s", runtimeStreamError) - streamError, err := reg.LookupMsg(".grpc.gateway.runtime", "StreamError") - if err == nil { + streamError, runtimeStreamError, err := lookupMsgAndSwaggerName(".grpc.gateway.runtime", "StreamError", reg) + if err != nil { + glog.Error(err) + } else { glog.V(1).Infof("StreamError: %v", streamError) + glog.V(1).Infof("StreamError FQMN: %s", runtimeStreamError) m[runtimeStreamError] = streamError findNestedMessagesAndEnumerations(streamError, reg, m, e) - } else { - //just in case there is an error looking up StreamError - glog.Error(err) } - ms[fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)] = meth.ResponseType + ms[swgRspName] = meth.ResponseType } } findNestedMessagesAndEnumerations(meth.ResponseType, reg, m, e) @@ -281,6 +293,10 @@ func skipRenderingRef(refName string) bool { func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, reg *descriptor.Registry, customRefs refMap) { for name, msg := range messages { + swgName, ok := fullyQualifiedNameToSwaggerName(msg.FQMN(), reg) + if !ok { + panic(fmt.Sprintf("can't resolve swagger name from '%v'", msg.FQMN())) + } if skipRenderingRef(name) { continue } @@ -354,7 +370,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, } *schema.Properties = append(*schema.Properties, kv) } - d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = schema + d[swgName] = schema } } @@ -392,12 +408,15 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s props = &swaggerSchemaObjectProperties{} } } else { + swgRef, ok := fullyQualifiedNameToSwaggerName(fd.GetTypeName(), reg) + if !ok { + panic(fmt.Sprintf("can't resolve swagger ref from typename '%v'", fd.GetTypeName())) + } core = schemaCore{ - Ref: "#/definitions/" + fullyQualifiedNameToSwaggerName(fd.GetTypeName(), reg), + Ref: "#/definitions/" + swgRef, } if refs != nil { refs[fd.GetTypeName()] = struct{}{} - } } default: @@ -492,6 +511,10 @@ func primitiveSchema(t pbdescriptor.FieldDescriptorProto_Type) (ftype, format st // renderEnumerationsAsDefinition inserts enums into the definitions object. func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, reg *descriptor.Registry) { for _, enum := range enums { + swgName, ok := fullyQualifiedNameToSwaggerName(enum.FQEN(), reg) + if !ok { + panic(fmt.Sprintf("can't resolve swagger name from FQEN '%v'", enum.FQEN())) + } enumComments := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index)) // it may be necessary to sort the result of the GetValue function. @@ -512,20 +535,13 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r panic(err) } - d[fullyQualifiedNameToSwaggerName(enum.FQEN(), reg)] = enumSchemaObject + d[swgName] = enumSchemaObject } } -// Take in a FQMN or FQEN and return a swagger safe version of the FQMN -func fullyQualifiedNameToSwaggerName(fqn string, reg *descriptor.Registry) string { - ret, _ := fullyQualifiedNameToSwaggerNameOk(fqn, reg) - return ret -} - // Take in a FQMN or FQEN and return a swagger safe version of the FQMN and // a boolean indicating if FQMN was properly resolved. -// TODO utrack: bad name? -func fullyQualifiedNameToSwaggerNameOk(fqn string, reg *descriptor.Registry) (string, bool) { +func fullyQualifiedNameToSwaggerName(fqn string, reg *descriptor.Registry) (string, bool) { registriesSeenMutex.Lock() defer registriesSeenMutex.Unlock() if mapping, present := registriesSeen[reg]; present { @@ -538,6 +554,20 @@ func fullyQualifiedNameToSwaggerNameOk(fqn string, reg *descriptor.Registry) (st return ret, ok } +// Lookup message type by location.name and return a swagger-safe version +// of its FQMN. +func lookupMsgAndSwaggerName(location, name string, reg *descriptor.Registry) (*descriptor.Message, string, error) { + msg, err := reg.LookupMsg(location, name) + if err != nil { + return nil, "", err + } + swgName, ok := fullyQualifiedNameToSwaggerName(msg.FQMN(), reg) + if !ok { + return nil, "", fmt.Errorf("can't map swagger name from FQMN '%v'", msg.FQMN()) + } + return msg, swgName, nil +} + // registriesSeen is used to memoise calls to resolveFullyQualifiedNameToSwaggerNames so // we don't repeat it unnecessarily, since it can take some time. var registriesSeen = map[*descriptor.Registry]map[string]string{} @@ -778,7 +808,10 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re wknSchemaCore, isWkn := wktSchemas[meth.RequestType.FQMN()] if !isWkn { - schema.Ref = fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.RequestType.FQMN(), reg)) + err := schema.setRefFromFQN(meth.RequestType.FQMN(), reg) + if err != nil { + return err + } } else { schema.schemaCore = wknSchemaCore @@ -836,7 +869,10 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re // well, without a definition wknSchemaCore, isWkn := wktSchemas[meth.ResponseType.FQMN()] if !isWkn { - responseSchema.Ref = fmt.Sprintf("#/definitions/%s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)) + err := responseSchema.setRefFromFQN(meth.ResponseType.FQMN(), reg) + if err != nil { + return err + } } else { responseSchema.schemaCore = wknSchemaCore @@ -858,7 +894,8 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re if meth.GetServerStreaming() { desc += "(streaming responses)" responseSchema.Type = "object" - responseSchema.Title = fmt.Sprintf("Stream result of %s", fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg)) + swgRef, _ := fullyQualifiedNameToSwaggerName(meth.ResponseType.FQMN(), reg) + responseSchema.Title = "Stream result of " + swgRef props := swaggerSchemaObjectProperties{ keyVal{ @@ -870,7 +907,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, }, } - streamErrDef, hasStreamError := fullyQualifiedNameToSwaggerNameOk(".grpc.gateway.runtime.StreamError", reg) + streamErrDef, hasStreamError := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg) if hasStreamError { props = append(props, keyVal{ Key: "error", @@ -900,7 +937,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, } if !reg.GetDisableDefaultErrors() { - errDef, hasErrDef := fullyQualifiedNameToSwaggerNameOk(".grpc.gateway.runtime.Error", reg) + errDef, hasErrDef := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg) if hasErrDef { // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object operationObject.Responses["default"] = swaggerResponseObject{ @@ -1074,9 +1111,9 @@ func applyTemplate(p param) (*swaggerObject, error) { if !p.reg.GetDisableDefaultErrors() { // Add the error type to the message map - runtimeError, err := p.reg.LookupMsg(".grpc.gateway.runtime", "Error") + runtimeError, swgRef, err := lookupMsgAndSwaggerName(".grpc.gateway.runtime", "Error", p.reg) if err == nil { - messages[fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", p.reg)] = runtimeError + messages[swgRef] = runtimeError } else { // just in case there is an error looking up runtimeError glog.Error(err) @@ -1701,8 +1738,8 @@ func protoJSONSchemaToSwaggerSchemaCore(j *swagger_options.JSONSchema, reg *desc ret := schemaCore{} if j.GetRef() != "" { - swaggerName := fullyQualifiedNameToSwaggerName(j.GetRef(), reg) - if swaggerName != "" { + swaggerName, ok := fullyQualifiedNameToSwaggerName(j.GetRef(), reg) + if ok { ret.Ref = "#/definitions/" + swaggerName if refs != nil { refs[j.GetRef()] = struct{}{} @@ -1838,19 +1875,24 @@ func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs re msgMap := make(messageMap) enumMap := make(enumMap) for ref := range refs { - if _, ok := d[fullyQualifiedNameToSwaggerName(ref, reg)]; ok { + swgName, swgOk := fullyQualifiedNameToSwaggerName(ref, reg) + if !swgOk { + glog.Errorf("can't resolve swagger name from CustomRef '%v'", ref) + continue + } + if _, ok := d[swgName]; ok { // Skip already existing definitions delete(refs, ref) continue } msg, err := reg.LookupMsg("", ref) if err == nil { - msgMap[fullyQualifiedNameToSwaggerName(ref, reg)] = msg + msgMap[swgName] = msg continue } enum, err := reg.LookupEnum("", ref) if err == nil { - enumMap[fullyQualifiedNameToSwaggerName(ref, reg)] = enum + enumMap[swgName] = enum continue } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index da602b03f3f..860064e8f04 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -2148,7 +2148,6 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { } ref := defRsp.Schema.schemaCore.Ref - // TODO utrack: is there a better way to find object by ref? refName := strings.TrimPrefix(ref, "#/definitions/") if refName == "" { t.Fatal("created default Error response with empty reflink") diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 255f53c77ca..0b4c953b3ee 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -3,6 +3,7 @@ package genswagger import ( "bytes" "encoding/json" + "fmt" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" ) @@ -161,6 +162,15 @@ type schemaCore struct { Default string `json:"default,omitempty"` } +func (s *schemaCore) setRefFromFQN(ref string, reg *descriptor.Registry) error { + name, ok := fullyQualifiedNameToSwaggerName(ref, reg) + if !ok { + return fmt.Errorf("setRefFromFQN: can't resolve swagger name from '%v'", ref) + } + s.Ref = fmt.Sprintf("#/definitions/%s", name) + return nil +} + type swaggerItemsObject schemaCore // http://swagger.io/specification/#responsesObject From d1093dfe831a1910372435673ff1b4aa3bf776b2 Mon Sep 17 00:00:00 2001 From: Koptelov Nikita Date: Wed, 11 Mar 2020 14:24:53 +0300 Subject: [PATCH 0281/1518] genswagger: fixed tests now tests require properly loaded registry to lookup swagger names and stuff. :) --- .../genswagger/template_test.go | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 860064e8f04..6b747d58556 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -37,6 +37,15 @@ func crossLinkFixture(f *descriptor.File) *descriptor.File { return f } +func reqFromFile(f *descriptor.File) *plugin.CodeGeneratorRequest { + return &plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{ + f.FileDescriptorProto, + }, + FileToGenerate: []string{f.GetName()}, + } +} + func TestMessageToQueryParameters(t *testing.T) { type test struct { MsgDescs []*protodescriptor.DescriptorProto @@ -381,7 +390,14 @@ func TestApplyTemplateSimple(t *testing.T) { }, }, } - result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: descriptor.NewRegistry()}) + reg := descriptor.NewRegistry() + fileCL := crossLinkFixture(&file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + result, err := applyTemplate(param{File: fileCL, reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -471,7 +487,15 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { }, }, } - result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: descriptor.NewRegistry()}) + + reg := descriptor.NewRegistry() + fileCL := crossLinkFixture(&file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + result, err := applyTemplate(param{File: fileCL, reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return @@ -585,7 +609,14 @@ func TestApplyTemplateExtensions(t *testing.T) { if err := proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation); err != nil { t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) } - result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: descriptor.NewRegistry()}) + reg := descriptor.NewRegistry() + fileCL := crossLinkFixture(&file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + result, err := applyTemplate(param{File: fileCL, reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) return From 63d1fcc51b07da0d0d6cb9bca803e4c2dde6afb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Czig=C3=A1ny?= Date: Sun, 15 Mar 2020 01:21:37 +0100 Subject: [PATCH 0282/1518] return error if an external HTTP rule has no matching method --- .../descriptor/registry.go | 23 +++++++++++ .../descriptor/registry_test.go | 40 +++++++++++++++++++ protoc-gen-grpc-gateway/main.go | 5 +++ 3 files changed, 68 insertions(+) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index e68a9aa233b..88d5050de3f 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -268,6 +268,29 @@ func (r *Registry) AddExternalHTTPRule(qualifiedMethodName string, rule *annotat r.externalHTTPRules[qualifiedMethodName] = append(r.externalHTTPRules[qualifiedMethodName], rule) } +// UnboundExternalHTTPRules returns the list of External HTTPRules +// which does not have a matching method in the registry +func (r *Registry) UnboundExternalHTTPRules() []string { + allServiceMethods := make(map[string]struct{}) + for _, f := range r.files { + for _, s := range f.GetService() { + svc := &Service{File: f, ServiceDescriptorProto: s} + for _, m := range s.GetMethod() { + method := &Method{Service: svc, MethodDescriptorProto: m} + allServiceMethods[method.FQMN()] = struct{}{} + } + } + } + + var missingMethods []string + for httpRuleMethod := range r.externalHTTPRules { + if _, ok := allServiceMethods[httpRuleMethod]; !ok { + missingMethods = append(missingMethods, httpRuleMethod) + } + } + return missingMethods +} + // AddPkgMap adds a mapping from a .proto file to proto package name. func (r *Registry) AddPkgMap(file, protoPkg string) { r.pkgMap[file] = protoPkg diff --git a/protoc-gen-grpc-gateway/descriptor/registry_test.go b/protoc-gen-grpc-gateway/descriptor/registry_test.go index 16e76655d59..36c53d6d4b9 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry_test.go +++ b/protoc-gen-grpc-gateway/descriptor/registry_test.go @@ -586,3 +586,43 @@ func TestLoadGoPackageInputPath(t *testing.T) { t.Errorf("file.GoPkg = %#v; want %#v", got, want) } } + +func TestUnboundExternalHTTPRules(t *testing.T) { + reg := NewRegistry() + methodName := ".example.ExampleService.Echo" + reg.AddExternalHTTPRule(methodName, nil) + assertStringSlice(t, "unbound external HTTP rules", reg.UnboundExternalHTTPRules(), []string{methodName}) + loadFile(t, reg, ` + name: "path/to/example.proto", + package: "example" + message_type < + name: "StringMessage" + field < + name: "string" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + > + > + service < + name: "ExampleService" + method < + name: "Echo" + input_type: "StringMessage" + output_type: "StringMessage" + > + > + `) + assertStringSlice(t, "unbound external HTTP rules", reg.UnboundExternalHTTPRules(), []string{}) +} + +func assertStringSlice(t *testing.T, message string, got, want []string) { + if len(got) != len(want) { + t.Errorf("%s = %#v len(%d); want %#v len(%d)", message, got, len(got), want, len(want)) + } + for i := range want { + if got[i] != want[i] { + t.Errorf("%s[%d] = %#v; want %#v", message, i, got[i], want[i]) + } + } +} diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index fb44e412fe5..6395796945d 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -103,6 +103,11 @@ func main() { emitError(err) return } + unboundHTTPRules := reg.UnboundExternalHTTPRules() + if len(unboundHTTPRules) != 0 { + emitError(fmt.Errorf("HTTP rules without a matching selector: %s", strings.Join(unboundHTTPRules, ", "))) + return + } var targets []*descriptor.File for _, target := range req.FileToGenerate { From ee513453fd80ce577c1a680b14300458072dad5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Czig=C3=A1ny?= Date: Sun, 15 Mar 2020 01:21:09 +0100 Subject: [PATCH 0283/1518] log warning if a service method has no HTTP rule The original intention was to make this an error too, but that would break example generation badly. --- .../descriptor/services.go | 2 +- .../descriptor/services_test.go | 59 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index 9efc9f9754e..5acd771045b 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -35,7 +35,7 @@ func (r *Registry) loadServices(file *File) error { optsList = append(optsList, opts) } if len(optsList) == 0 { - glog.V(1).Infof("Found non-target method: %s.%s", svc.GetName(), md.GetName()) + glog.Warningf("No HttpRule found for method: %s.%s", svc.GetName(), md.GetName()) } meth, err := r.newMethod(svc, md, optsList) if err != nil { diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index 1ccb8fbef0a..8018b0f2932 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -219,6 +219,65 @@ func TestExtractServicesSimple(t *testing.T) { testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } +func TestExtractServicesWithoutAnnotation(t *testing.T) { + src := ` + name: "path/to/example.proto", + package: "example" + message_type < + name: "StringMessage" + field < + name: "string" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + > + > + service < + name: "ExampleService" + method < + name: "Echo" + input_type: "StringMessage" + output_type: "StringMessage" + > + > + ` + var fd descriptor.FileDescriptorProto + if err := proto.UnmarshalText(src, &fd); err != nil { + t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) + } + msg := &Message{ + DescriptorProto: fd.MessageType[0], + Fields: []*Field{ + { + FieldDescriptorProto: fd.MessageType[0].Field[0], + }, + }, + } + file := &File{ + FileDescriptorProto: &fd, + GoPkg: GoPackage{ + Path: "path/to/example.pb", + Name: "example_pb", + }, + Messages: []*Message{msg}, + Services: []*Service{ + { + ServiceDescriptorProto: fd.Service[0], + Methods: []*Method{ + { + MethodDescriptorProto: fd.Service[0].Method[0], + RequestType: msg, + ResponseType: msg, + }, + }, + }, + }, + } + + crossLinkFixture(file) + testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) +} + func TestExtractServicesCrossPackage(t *testing.T) { srcs := []string{ ` From 402a3ff3cdd89e04cea969685fc55bba7f018037 Mon Sep 17 00:00:00 2001 From: Benjamin Boudreau Date: Sun, 22 Mar 2020 13:50:10 -0400 Subject: [PATCH 0284/1518] fix version spelling --- protoc-gen-grpc-gateway/main.go | 2 +- protoc-gen-swagger/main.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 6395796945d..236ce41fcc7 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -34,7 +34,7 @@ var ( repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") allowColonFinalSegments = flag.Bool("allow_colon_final_segments", false, "determines whether colons are permitted in the final segment of a path") - versionFlag = flag.Bool("version", false, "print the current verison") + versionFlag = flag.Bool("version", false, "print the current version") ) // Variables set by goreleaser at build time diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index fa32f42cbb1..03d6697fbff 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -23,7 +23,7 @@ var ( mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") - versionFlag = flag.Bool("version", false, "print the current verison") + versionFlag = flag.Bool("version", false, "print the current version") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") includePackageInTags = flag.Bool("include_package_in_tags", false, "if unset, the gRPC service name is added to the `Tags` field of each operation. if set and the `package` directive is shown in the proto file, the package name will be prepended to the service name") useFQNForSwaggerName = flag.Bool("fqn_for_swagger_name", false, "if set, the object's swagger names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") From d825bf00aabc1f4657d7b34636b095c7878d2228 Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Mon, 23 Mar 2020 11:02:32 +0100 Subject: [PATCH 0285/1518] Limit Bazel memory usage in CI. This aims to reduce/eliminate the CircleCI flakes described in #968. It's based on the approach in https://github.com/angular/angular-cli/blob/master/.circleci/bazel.rc --- .circleci/config.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5f20a8d3cde..99bcb24eeec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -69,6 +69,8 @@ jobs: startup --output_base $HOME/.cache/_grpc_gateway_bazel build --test_output errors build --features race + # Workaround https://github.com/bazelbuild/bazel/issues/3645 + build --local_resources=3072,2.0,1.0 EOF - run: name: Check that Bazel BUILD files are up-to-date From 5e68b7e7680d59fcb0a2f3b9dd808b22fede3f3d Mon Sep 17 00:00:00 2001 From: Rodrigo Queiro Date: Mon, 23 Mar 2020 11:31:21 +0100 Subject: [PATCH 0286/1518] Use 8088 instead of 8080 in integration test. This should avoid a failure on Bazel's Buildkite CI, where 8080 cannot be used. --- examples/internal/integration/client_test.go | 10 ++-- .../internal/integration/integration_test.go | 56 +++++++++---------- examples/internal/integration/main_test.go | 6 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 813158025aa..90ad997f90f 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -16,7 +16,7 @@ func TestEchoClient(t *testing.T) { } cfg := echo.NewConfiguration() - cfg.BasePath = "http://localhost:8080" + cfg.BasePath = "http://localhost:8088" cl := echo.NewAPIClient(cfg) resp, _, err := cl.EchoServiceApi.Echo(context.Background(), "foo") @@ -35,7 +35,7 @@ func TestEchoBodyClient(t *testing.T) { } cfg := echo.NewConfiguration() - cfg.BasePath = "http://localhost:8080" + cfg.BasePath = "http://localhost:8088" cl := echo.NewAPIClient(cfg) req := echo.ExamplepbSimpleMessage{Id: "foo"} @@ -55,7 +55,7 @@ func TestAbitOfEverythingClient(t *testing.T) { } cfg := abe.NewConfiguration() - cfg.BasePath = "http://localhost:8080" + cfg.BasePath = "http://localhost:8088" cl := abe.NewAPIClient(cfg) @@ -184,7 +184,7 @@ func TestUnannotatedEchoClient(t *testing.T) { } cfg := unannotatedecho.NewConfiguration() - cfg.BasePath = "http://localhost:8080" + cfg.BasePath = "http://localhost:8088" cl := unannotatedecho.NewAPIClient(cfg) @@ -204,7 +204,7 @@ func TestUnannotatedEchoBodyClient(t *testing.T) { } cfg := unannotatedecho.NewConfiguration() - cfg.BasePath = "http://localhost:8080" + cfg.BasePath = "http://localhost:8088" cl := unannotatedecho.NewAPIClient(cfg) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 31370468f05..2c569270538 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -40,11 +40,11 @@ func TestEcho(t *testing.T) { return } - testEcho(t, 8080, "application/json") - testEchoOneof(t, 8080, "application/json") - testEchoOneof1(t, 8080, "application/json") - testEchoOneof2(t, 8080, "application/json") - testEchoBody(t, 8080) + testEcho(t, 8088, "application/json") + testEchoOneof(t, 8088, "application/json") + testEchoOneof1(t, 8088, "application/json") + testEchoOneof2(t, 8088, "application/json") + testEchoBody(t, 8088) } func TestForwardResponseOption(t *testing.T) { @@ -266,17 +266,17 @@ func TestABE(t *testing.T) { return } - testABECreate(t, 8080) - testABECreateBody(t, 8080) - testABEBulkCreate(t, 8080) - testABEBulkCreateWithError(t, 8080) - testABELookup(t, 8080) - testABELookupNotFound(t, 8080) - testABEList(t, 8080) - testABEBulkEcho(t, 8080) - testABEBulkEchoZeroLength(t, 8080) - testAdditionalBindings(t, 8080) - testABERepeated(t, 8080) + testABECreate(t, 8088) + testABECreateBody(t, 8088) + testABEBulkCreate(t, 8088) + testABEBulkCreateWithError(t, 8088) + testABELookup(t, 8088) + testABELookupNotFound(t, 8088) + testABEList(t, 8088) + testABEBulkEcho(t, 8088) + testABEBulkEchoZeroLength(t, 8088) + testAdditionalBindings(t, 8088) + testABERepeated(t, 8088) } func testABECreate(t *testing.T, port int) { @@ -680,7 +680,7 @@ func TestABEPatch(t *testing.T) { return } - port := 8080 + port := 8088 // create a record with a known string_value and int32_value uuid := postABE(t, port, gw.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) @@ -724,7 +724,7 @@ func TestABEPatchBody(t *testing.T) { return } - port := 8080 + port := 8088 for _, tc := range []struct { name string @@ -1284,7 +1284,7 @@ func TestTimeout(t *testing.T) { return } - apiURL := "http://localhost:8080/v2/example/timeout" + apiURL := "http://localhost:8088/v2/example/timeout" req, err := http.NewRequest("GET", apiURL, nil) if err != nil { t.Errorf(`http.NewRequest("GET", %q, nil) failed with %v; want success`, apiURL, err) @@ -1309,7 +1309,7 @@ func TestErrorWithDetails(t *testing.T) { return } - apiURL := "http://localhost:8080/v2/example/errorwithdetails" + apiURL := "http://localhost:8088/v2/example/errorwithdetails" resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) @@ -1374,7 +1374,7 @@ func TestPostWithEmptyBody(t *testing.T) { return } - apiURL := "http://localhost:8080/v2/example/postwithemptybody/name" + apiURL := "http://localhost:8088/v2/example/postwithemptybody/name" rep, err := http.Post(apiURL, "application/json", nil) if err != nil { @@ -1395,7 +1395,7 @@ func TestUnknownPath(t *testing.T) { return } - apiURL := "http://localhost:8080" + apiURL := "http://localhost:8088" resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) @@ -1420,7 +1420,7 @@ func TestMethodNotAllowed(t *testing.T) { return } - apiURL := "http://localhost:8080/v1/example/echo/myid" + apiURL := "http://localhost:8088/v1/example/echo/myid" resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) @@ -1445,7 +1445,7 @@ func TestInvalidArgument(t *testing.T) { return } - apiURL := "http://localhost:8080/v1/example/echo/myid/not_int64" + apiURL := "http://localhost:8088/v1/example/echo/myid/not_int64" resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) @@ -1470,9 +1470,9 @@ func TestResponseBody(t *testing.T) { return } - testResponseBody(t, 8080) - testResponseBodies(t, 8080) - testResponseStrings(t, 8080) + testResponseBody(t, 8088) + testResponseBodies(t, 8088) + testResponseStrings(t, 8088) } func testResponseBody(t *testing.T, port int) { @@ -1594,7 +1594,7 @@ func TestRequestQueryParams(t *testing.T) { return } - port := 8080 + port := 8088 formValues := url.Values{} formValues.Set("string_value", "hello-world") diff --git a/examples/internal/integration/main_test.go b/examples/internal/integration/main_test.go index 3c43d6a2087..43a43d4022e 100644 --- a/examples/internal/integration/main_test.go +++ b/examples/internal/integration/main_test.go @@ -64,7 +64,7 @@ func runServers(ctx context.Context) <-chan error { } }() go func() { - if err := runGateway(ctx, ":8080"); err != nil { + if err := runGateway(ctx, ":8088"); err != nil { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() @@ -81,8 +81,8 @@ func TestMain(m *testing.M) { ch := make(chan int, 1) go func() { - if err := waitForGateway(ctx, 8080); err != nil { - glog.Errorf("waitForGateway(ctx, 8080) failed with %v; want success", err) + if err := waitForGateway(ctx, 8088); err != nil { + glog.Errorf("waitForGateway(ctx, 8088) failed with %v; want success", err) } ch <- m.Run() }() From 48f2e5a24ecf8c01055ce8129242a03e39816239 Mon Sep 17 00:00:00 2001 From: rowe0x <35551085+rowe0x@users.noreply.github.com> Date: Wed, 25 Mar 2020 16:41:34 +0800 Subject: [PATCH 0287/1518] Add enums_as_ints flag to protoc-gen-swagger (#1186) * feat: add enumAsInts flag * Update protoc-gen-swagger/genswagger/template.go Co-Authored-By: Johan Brandhorst * fix: typo * feat: add comment * feat: add test Co-authored-by: Johan Brandhorst --- .../descriptor/registry.go | 13 ++ protoc-gen-swagger/genswagger/template.go | 34 +++- .../genswagger/template_test.go | 181 ++++++++++++++++++ protoc-gen-swagger/main.go | 2 + 4 files changed, 228 insertions(+), 2 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 88d5050de3f..07b9f47b59c 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -76,6 +76,9 @@ type Registry struct { // in your protofile comments useGoTemplate bool + // enumsAsInts render enum as integer, as opposed to string + enumsAsInts bool + // disableDefaultErrors disables the generation of the default error types. // This is useful for users who have defined custom error handling. disableDefaultErrors bool @@ -487,6 +490,16 @@ func (r *Registry) GetUseGoTemplate() bool { return r.useGoTemplate } +// SetEnumsAsInts set enumsAsInts +func (r *Registry) SetEnumsAsInts(enumsAsInts bool) { + r.enumsAsInts = enumsAsInts +} + +// GetEnumsAsInts returns enumsAsInts +func (r *Registry) GetEnumsAsInts() bool { + return r.enumsAsInts +} + // SetDisableDefaultErrors sets disableDefaultErrors func (r *Registry) SetDisableDefaultErrors(use bool) { r.disableDefaultErrors = use diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 1d3ff8d475c..438e3a2f54a 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -92,6 +92,13 @@ func listEnumNames(enum *descriptor.Enum) (names []string) { return names } +func listEnumNumbers(enum *descriptor.Enum) (numbers []string) { + for _, value := range enum.GetValue() { + numbers = append(numbers, strconv.Itoa(int(value.GetNumber()))) + } + return +} + func getEnumDefault(enum *descriptor.Enum) string { for _, value := range enum.GetValue() { if value.GetNumber() == 0 { @@ -182,10 +189,19 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st Type: "string", Enum: listEnumNames(enum), } + if reg.GetEnumsAsInts() { + param.Items.Type = "integer" + param.Items.Enum = listEnumNumbers(enum) + } } else { param.Type = "string" param.Enum = listEnumNames(enum) param.Default = getEnumDefault(enum) + if reg.GetEnumsAsInts() { + param.Type = "integer" + param.Enum = listEnumNumbers(enum) + param.Default = "0" + } } valueComments := enumValueProtoComments(reg, enum) if valueComments != "" { @@ -531,6 +547,12 @@ func renderEnumerationsAsDefinition(enums enumMap, d swaggerDefinitionsObject, r Default: defaultValue, }, } + if reg.GetEnumsAsInts() { + enumSchemaObject.Type = "integer" + enumSchemaObject.Format = "int32" + enumSchemaObject.Default = "0" + enumSchemaObject.Enum = listEnumNumbers(enum) + } if err := updateSwaggerDataFromComments(reg, &enumSchemaObject, enum, enumComments, false); err != nil { panic(err) } @@ -737,13 +759,18 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } case pbdescriptor.FieldDescriptorProto_TYPE_ENUM: - paramType = "string" - paramFormat = "" enum, err := reg.LookupEnum("", parameter.Target.GetTypeName()) if err != nil { return err } + paramType = "string" + paramFormat = "" enumNames = listEnumNames(enum) + if reg.GetEnumsAsInts() { + paramType = "integer" + paramFormat = "" + enumNames = listEnumNumbers(enum) + } schema := schemaOfField(parameter.Target, reg, customRefs) desc = schema.Description defaultValue = schema.Default @@ -1470,6 +1497,9 @@ func enumValueProtoComments(reg *descriptor.Registry, enum *descriptor.Enum) str var comments []string for idx, value := range enum.GetValue() { name := value.GetName() + if reg.GetEnumsAsInts() { + name = strconv.Itoa(int(value.GetNumber())) + } str := protoComments(reg, enum.File, enum.Outers, "EnumType", int32(enum.Index), protoPath, int32(idx)) if str != "" { comments = append(comments, name+": "+str) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 6b747d58556..06e1ca763a9 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -46,6 +46,187 @@ func reqFromFile(f *descriptor.File) *plugin.CodeGeneratorRequest { } } +func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { + type test struct { + MsgDescs []*protodescriptor.DescriptorProto + Message string + Params []swaggerParameterObject + } + + tests := []test{ + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("b"), + Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Number: proto.Int32(2), + }, + { + Name: proto.String("c"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Number: proto.Int32(3), + }, + }, + }, + }, + Message: "ExampleMessage", + Params: []swaggerParameterObject{ + swaggerParameterObject{ + Name: "a", + In: "query", + Required: false, + Type: "string", + }, + swaggerParameterObject{ + Name: "b", + In: "query", + Required: false, + Type: "number", + Format: "double", + }, + swaggerParameterObject{ + Name: "c", + In: "query", + Required: false, + Type: "array", + CollectionFormat: "multi", + }, + }, + }, + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.Nested"), + Number: proto.Int32(1), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("Nested"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("deep"), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.Nested.DeepNested"), + Number: proto.Int32(2), + }, + }, + NestedType: []*protodescriptor.DescriptorProto{{ + Name: proto.String("DeepNested"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("b"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + }, + { + Name: proto.String("c"), + Type: protodescriptor.FieldDescriptorProto_TYPE_ENUM.Enum(), + TypeName: proto.String(".example.Nested.DeepNested.DeepEnum"), + Number: proto.Int32(2), + }, + }, + EnumType: []*protodescriptor.EnumDescriptorProto{ + { + Name: proto.String("DeepEnum"), + Value: []*protodescriptor.EnumValueDescriptorProto{ + {Name: proto.String("FALSE"), Number: proto.Int32(0)}, + {Name: proto.String("TRUE"), Number: proto.Int32(1)}, + }, + }, + }, + }}, + }, + }, + Message: "ExampleMessage", + Params: []swaggerParameterObject{ + swaggerParameterObject{ + Name: "nested.a", + In: "query", + Required: false, + Type: "string", + }, + swaggerParameterObject{ + Name: "nested.deep.b", + In: "query", + Required: false, + Type: "string", + }, + swaggerParameterObject{ + Name: "nested.deep.c", + In: "query", + Required: false, + Type: "integer", + Enum: []string{"0", "1"}, + Default: "0", + }, + }, + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + reg.SetEnumsAsInts(true) + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + params, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}) + if err != nil { + t.Fatalf("failed to convert message to query parameters: %s", err) + } + // avoid checking Items for array types + for i := range params { + params[i].Items = nil + } + if !reflect.DeepEqual(params, test.Params) { + t.Errorf("expected %v, got %v", test.Params, params) + } + } +} + func TestMessageToQueryParameters(t *testing.T) { type test struct { MsgDescs []*protodescriptor.DescriptorProto diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 03d6697fbff..3e9c6545255 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -29,6 +29,7 @@ var ( useFQNForSwaggerName = flag.Bool("fqn_for_swagger_name", false, "if set, the object's swagger names will use the fully qualify name from the proto definition (ie my.package.MyMessage.MyInnerMessage") useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") + enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") ) // Variables set by goreleaser at build time @@ -81,6 +82,7 @@ func main() { reg.SetIncludePackageInTags(*includePackageInTags) reg.SetUseFQNForSwaggerName(*useFQNForSwaggerName) reg.SetUseGoTemplate(*useGoTemplate) + reg.SetEnumsAsInts(*enumsAsInts) reg.SetDisableDefaultErrors(*disableDefaultErrors) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) From 4a27188098703b2128c3241bae108a0170b0a955 Mon Sep 17 00:00:00 2001 From: Xin Zhang Date: Sun, 29 Mar 2020 15:21:40 -0700 Subject: [PATCH 0288/1518] Support deep levels reserved json name (#1191) * Add message as another argument for supporting deep level reserved json name * Get reserved json name in non direct field of a grpc method * Change variable names based on google naming policy * Change variable names based on google naming policy in test * Reuse variable value * Format code * Update test names * Add doCamelCase and one more test case * Correct a comment in test * Keep all prefix in camel case * Use regular for loop instead of foreach to avoid unnecessary slicing * Update protoc-gen-swagger/genswagger/template_test.go Co-Authored-By: Johan Brandhorst * Add space in comments * Remove a unnecessary comment Co-authored-by: Johan Brandhorst --- protoc-gen-swagger/genswagger/template.go | 58 ++++++-- .../genswagger/template_test.go | 138 +++++++++++++++++- 2 files changed, 179 insertions(+), 17 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 438e3a2f54a..04005e27bd9 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -653,7 +653,7 @@ func resolveFullyQualifiedNameToSwaggerNames(messages []string, useFQNForSwagger var canRegexp = regexp.MustCompile("{([a-zA-Z][a-zA-Z0-9_.]*).*}") // Swagger expects paths of the form /path/{string_value} but grpc-gateway paths are expected to be of the form /path/{string_value=strprefix/*}. This should reformat it correctly. -func templateToSwaggerPath(path string, reg *descriptor.Registry, fields []*descriptor.Field) string { +func templateToSwaggerPath(path string, reg *descriptor.Registry, fields []*descriptor.Field, msgs []*descriptor.Message) string { // It seems like the right thing to do here is to just use // strings.Split(path, "/") but that breaks badly when you hit a url like // /{my_field=prefix/*}/ and end up with 2 sections representing my_field. @@ -682,7 +682,7 @@ func templateToSwaggerPath(path string, reg *descriptor.Registry, fields []*desc if reg.GetUseJSONNamesForFields() && len(jsonBuffer) > 1 { jsonSnakeCaseName := string(jsonBuffer[1:]) - jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName, fields)) + jsonCamelCaseName := string(lowerCamelCase(jsonSnakeCaseName, fields, msgs)) prev := string(buffer[:len(buffer)-len(jsonSnakeCaseName)-2]) buffer = strings.Join([]string{prev, "{", jsonCamelCaseName, "}"}, "") jsonBuffer = "" @@ -731,7 +731,7 @@ func isResourceName(prefix string) bool { return field == "parent" || field == "name" } -func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap) error { +func renderServices(services []*descriptor.Service, paths swaggerPathsObject, reg *descriptor.Registry, requestResponseRefs, customRefs refMap, msgs []*descriptor.Message) error { // Correctness of svcIdx and methIdx depends on 'services' containing the services in the same order as the 'file.Service' array. for svcIdx, svc := range services { for methIdx, meth := range svc.Methods { @@ -806,7 +806,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } parameterString := parameter.String() if reg.GetUseJSONNamesForFields() { - parameterString = lowerCamelCase(parameterString, meth.RequestType.Fields) + parameterString = lowerCamelCase(parameterString, meth.RequestType.Fields, msgs) } parameters = append(parameters, swaggerParameterObject{ Name: parameterString, @@ -876,7 +876,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re parameters = append(parameters, queryParams...) } - pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields)] + pathItemObject, ok := paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)] if !ok { pathItemObject = swaggerPathItemObject{} } @@ -1098,7 +1098,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re pathItemObject.Patch = operationObject break } - paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields)] = pathItemObject + paths[templateToSwaggerPath(b.PathTmpl.Template, reg, meth.RequestType.Fields, msgs)] = pathItemObject } } } @@ -1128,7 +1128,7 @@ func applyTemplate(p param) (*swaggerObject, error) { // and create entries for all of them. // Also adds custom user specified references to second map. requestResponseRefs, customRefs := refMap{}, refMap{} - if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs); err != nil { + if err := renderServices(p.Services, s.Paths, p.reg, requestResponseRefs, customRefs, p.Messages); err != nil { panic(err) } @@ -1935,15 +1935,55 @@ func addCustomRefs(d swaggerDefinitionsObject, reg *descriptor.Registry, refs re addCustomRefs(d, reg, refs) } -func lowerCamelCase(fieldName string, fields []*descriptor.Field) string { +func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descriptor.Message) string { for _, oneField := range fields { if oneField.GetName() == fieldName { return oneField.GetJsonName() } } - parameterString := gogen.CamelCase(fieldName) + messageNameToFieldsToJSONName := make(map[string]map[string]string, 0) + fieldNameToType := make(map[string]string, 0) + for _, msg := range msgs { + fieldNameToJSONName := make(map[string]string, 0) + for _, oneField := range msg.GetField() { + fieldNameToJSONName[oneField.GetName()] = oneField.GetJsonName() + fieldNameToType[oneField.GetName()] = oneField.GetTypeName() + } + messageNameToFieldsToJSONName[msg.GetName()] = fieldNameToJSONName + } + if strings.Contains(fieldName, ".") { + fieldNames := strings.Split(fieldName, ".") + fieldNamesWithCamelCase := make([]string, 0) + for i := 0; i < len(fieldNames) - 1; i++ { + fieldNamesWithCamelCase = append(fieldNamesWithCamelCase, doCamelCase(string(fieldNames[i]))) + } + prefix := strings.Join(fieldNamesWithCamelCase, ".") + reservedJSONName := getReservedJSONName(fieldName, messageNameToFieldsToJSONName,fieldNameToType) + if reservedJSONName != "" { + return prefix + "." + reservedJSONName + } + } + return doCamelCase(fieldName) +} + +func doCamelCase(input string) string { + parameterString := gogen.CamelCase(input) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) return builder.String() } + +func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[string]map[string]string, fieldNameToType map[string]string) string { + if len(strings.Split(fieldName, ".")) == 2 { + fieldNames := strings.Split(fieldName, ".") + firstVariable := fieldNames[0] + firstType := fieldNameToType[firstVariable] + firstTypeShortNames := strings.Split(firstType, ".") + firstTypeShortName := firstTypeShortNames[len(firstTypeShortNames) - 1] + return messageNameToFieldsToJSONName[firstTypeShortName][fieldNames[1]] + } + fieldNames := strings.Split(fieldName, ".") + return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) +} + diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 06e1ca763a9..c7a35a6b6c8 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -1314,6 +1314,37 @@ func generateFieldsForJSONReservedName() []*descriptor.Field { return append(fields, field) } +func generateMsgsForJSONReservedName() []*descriptor.Message { + result := make([]*descriptor.Message, 0) + // The first message, its field is field_abc and its type is NewType + // NewType field_abc + fieldName := "field_abc" + fieldJSONName := "fieldAbc" + messageName1 := "message1" + messageType := "pkg.a.NewType" + pfd := protodescriptor.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName, TypeName: &messageType} + result = append(result, + &descriptor.Message{ + DescriptorProto: &protodescriptor.DescriptorProto{ + Name: &messageName1, Field: []*protodescriptor.FieldDescriptorProto{&pfd}, + }, + }) + // The second message, its name is NewName, its type is string + // message NewType { + // string field_newName [json_name = RESERVEDJSONNAME] + // } + messageName := "NewType" + field := "field_newName" + fieldJSONName2 := "RESERVEDJSONNAME" + pfd2 := protodescriptor.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2,} + result = append(result, &descriptor.Message{ + DescriptorProto: &protodescriptor.DescriptorProto{ + Name: &messageName, Field: []*protodescriptor.FieldDescriptorProto{&pfd2}, + }, + }) + return result +} + func TestTemplateWithJsonCamelCase(t *testing.T) { var tests = []struct { input string @@ -1331,11 +1362,12 @@ func TestTemplateWithJsonCamelCase(t *testing.T) { {"test/{a_a}", "test/{aA}"}, {"test/{ab_c}", "test/{abC}"}, {"test/{json_name}", "test/{jsonNAME}"}, + {"test/{field_abc.field_newName}", "test/{fieldAbc.RESERVEDJSONNAME}"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1358,11 +1390,12 @@ func TestTemplateWithoutJsonCamelCase(t *testing.T) { {"test/{ab}", "test/{ab}"}, {"test/{a_a}", "test/{a_a}"}, {"test/{json_name}", "test/{json_name}"}, + {"test/{field_abc.field_newName}", "test/{field_abc.field_newName}"}, } reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1394,14 +1427,14 @@ func TestTemplateToSwaggerPath(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -1416,7 +1449,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) { reg.SetUseJSONNamesForFields(false) for i := 0; i < b.N; i++ { - _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName()) + _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) } }) @@ -1425,7 +1458,7 @@ func BenchmarkTemplateToSwaggerPath(b *testing.B) { reg.SetUseJSONNamesForFields(true) for i := 0; i < b.N; i++ { - _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName()) + _ = templateToSwaggerPath(input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) } }) } @@ -1501,14 +1534,14 @@ func TestFQMNtoSwaggerName(t *testing.T) { reg := descriptor.NewRegistry() reg.SetUseJSONNamesForFields(false) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } } reg.SetUseJSONNamesForFields(true) for _, data := range tests { - actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName()) + actual := templateToSwaggerPath(data.input, reg, generateFieldsForJSONReservedName(), generateMsgsForJSONReservedName()) if data.expected != actual { t.Errorf("Expected templateToSwaggerPath(%v) = %v, actual: %v", data.input, data.expected, actual) } @@ -2369,3 +2402,92 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { t.Errorf("default Error response with reflink '%v', but its definition was not found", refName) } } + +func Test_getReservedJsonName(t *testing.T) { + type args struct { + fieldName string + messageNameToFieldsToJSONName map[string]map[string]string + fieldNameToType map[string]string + } + tests := []struct { + name string + args args + want string + }{ + { + "test case 1: single dot use case", + args{ + fieldName: "abc.a_1", + messageNameToFieldsToJSONName: map[string]map[string]string{ + "Msg": { + "a_1": "a1JSONNAME", + "b_1": "b1JSONNAME", + }, + }, + fieldNameToType: map[string]string{ + "abc": "pkg1.test.Msg", + "bcd": "pkg1.test.Msg", + }, + }, + "a1JSONNAME", + }, + { + "test case 2: single dot use case with no existing field", + args{ + fieldName: "abc.d_1", + messageNameToFieldsToJSONName: map[string]map[string]string{ + "Msg": { + "a_1": "a1JSONNAME", + "b_1": "b1JSONNAME", + }, + }, + fieldNameToType: map[string]string{ + "abc": "pkg1.test.Msg", + "bcd": "pkg1.test.Msg", + }, + }, + "", + }, + { + "test case 3: double dot use case", + args{ + fieldName: "pkg.abc.a_1", + messageNameToFieldsToJSONName: map[string]map[string]string{ + "Msg": { + "a_1": "a1JSONNAME", + "b_1": "b1JSONNAME", + }, + }, + fieldNameToType: map[string]string{ + "abc": "pkg1.test.Msg", + "bcd": "pkg1.test.Msg", + }, + }, + "a1JSONNAME", + }, + { + "test case 4: double dot use case with a not existed field", + args{ + fieldName: "pkg.abc.c_1", + messageNameToFieldsToJSONName: map[string]map[string]string{ + "Msg": { + "a_1": "a1JSONNAME", + "b_1": "b1JSONNAME", + }, + }, + fieldNameToType: map[string]string{ + "abc": "pkg1.test.Msg", + "bcd": "pkg1.test.Msg", + }, + }, + "", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := getReservedJSONName(tt.args.fieldName, tt.args.messageNameToFieldsToJSONName, tt.args.fieldNameToType); got != tt.want { + t.Errorf("getReservedJSONName() = %v, want %v", got, tt.want) + } + }) + } +} From bcbdee7d69d85cb818247f298c58e399aea34d05 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Tue, 31 Mar 2020 18:01:40 -0400 Subject: [PATCH 0289/1518] Generate Swagger with Unique Operation IDs (#1193) * OperationId includes service name * Re-generate and fix tests --- .../internal/clients/abe/api/swagger.yaml | 46 +++---- .../abe/api_a_bit_of_everything_service.go | 50 +++---- .../abe/api_camel_case_service_name.go | 2 +- examples/internal/clients/abe/api_echo_rpc.go | 10 +- .../internal/clients/echo/api/swagger.yaml | 14 +- .../internal/clients/echo/api_echo_service.go | 34 ++--- .../clients/responsebody/api/swagger.yaml | 6 +- .../responsebody/api_response_body_service.go | 6 +- .../docs/ResponseBodyServiceApi.md | 18 +-- .../clients/unannotatedecho/api/swagger.yaml | 8 +- .../api_unannotated_echo_service.go | 16 +-- examples/internal/integration/client_test.go | 10 +- .../a_bit_of_everything.swagger.json | 46 +++---- .../proto/examplepb/echo_service.swagger.json | 14 +- .../response_body_service.swagger.json | 6 +- .../proto/examplepb/stream.swagger.json | 6 +- .../unannotated_echo_service.swagger.json | 8 +- .../examplepb/use_go_template.swagger.json | 4 +- .../proto/examplepb/wrappers.swagger.json | 22 ++-- protoc-gen-swagger/genswagger/template.go | 13 +- .../genswagger/template_test.go | 122 +++++++++++++++++- 21 files changed, 286 insertions(+), 175 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 52ccf956d97..742056db6f6 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -33,7 +33,7 @@ paths: post: tags: - "ABitOfEverythingService" - operationId: "CreateBody" + operationId: "ABitOfEverythingService_CreateBody" parameters: - in: "body" name: "body" @@ -69,7 +69,7 @@ paths: - "echo rpc" summary: "Summary: Echo rpc" description: "Description Echo" - operationId: "Echo" + operationId: "ABitOfEverythingService_Echo" parameters: - name: "value" in: "path" @@ -112,7 +112,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "CheckNestedEnumGetQueryParams" + operationId: "ABitOfEverythingService_CheckNestedEnumGetQueryParams" parameters: - name: "single_nested.ok" in: "path" @@ -400,7 +400,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "CheckGetQueryParams" + operationId: "ABitOfEverythingService_CheckGetQueryParams" parameters: - name: "single_nested.name" in: "path" @@ -695,7 +695,7 @@ paths: post: tags: - "ABitOfEverythingService" - operationId: "CheckPostQueryParams" + operationId: "ABitOfEverythingService_CheckPostQueryParams" parameters: - name: "string_value" in: "path" @@ -734,7 +734,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "GetQuery" + operationId: "ABitOfEverythingService_GetQuery" parameters: - name: "uuid" in: "path" @@ -1042,7 +1042,7 @@ paths: - "ABitOfEverythingService" summary: "Create a new ABitOfEverything" description: "This API creates a new ABitOfEverything" - operationId: "Create" + operationId: "ABitOfEverythingService_Create" parameters: - name: "float_value" in: "path" @@ -1193,7 +1193,7 @@ paths: post: tags: - "ABitOfEverythingService" - operationId: "DeepPathEcho" + operationId: "ABitOfEverythingService_DeepPathEcho" parameters: - name: "single_nested.name" in: "path" @@ -1233,7 +1233,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "Lookup" + operationId: "ABitOfEverythingService_Lookup" parameters: - name: "uuid" in: "path" @@ -1265,7 +1265,7 @@ paths: put: tags: - "ABitOfEverythingService" - operationId: "Update" + operationId: "ABitOfEverythingService_Update" parameters: - name: "uuid" in: "path" @@ -1302,7 +1302,7 @@ paths: delete: tags: - "ABitOfEverythingService" - operationId: "Delete" + operationId: "ABitOfEverythingService_Delete" parameters: - name: "uuid" in: "path" @@ -1340,7 +1340,7 @@ paths: : get: tags: - "ABitOfEverythingService" - operationId: "GetRepeatedQuery" + operationId: "ABitOfEverythingService_GetRepeatedQuery" parameters: - name: "path_repeated_float_value" in: "path" @@ -1531,7 +1531,7 @@ paths: put: tags: - "ABitOfEverythingService" - operationId: "UpdateV2" + operationId: "ABitOfEverythingService_UpdateV2" parameters: - name: "abe.uuid" in: "path" @@ -1568,7 +1568,7 @@ paths: patch: tags: - "ABitOfEverythingService" - operationId: "UpdateV22" + operationId: "ABitOfEverythingService_UpdateV22" parameters: - name: "abe.uuid" in: "path" @@ -1608,7 +1608,7 @@ paths: - "echo rpc" summary: "Summary: Echo rpc" description: "Description Echo" - operationId: "Echo3" + operationId: "ABitOfEverythingService_Echo3" parameters: - name: "value" in: "query" @@ -1653,7 +1653,7 @@ paths: - "echo rpc" summary: "Summary: Echo rpc" description: "Description Echo" - operationId: "Echo2" + operationId: "ABitOfEverythingService_Echo2" parameters: - in: "body" name: "body" @@ -1697,7 +1697,7 @@ paths: get: tags: - "camelCaseServiceName" - operationId: "Empty" + operationId: "camelCaseServiceName_Empty" parameters: [] responses: 200: @@ -1724,7 +1724,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "ErrorWithDetails" + operationId: "ABitOfEverythingService_ErrorWithDetails" parameters: [] responses: 200: @@ -1751,7 +1751,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "OverwriteResponseContentType" + operationId: "ABitOfEverythingService_OverwriteResponseContentType" produces: - "application/text" parameters: [] @@ -1781,7 +1781,7 @@ paths: post: tags: - "ABitOfEverythingService" - operationId: "PostWithEmptyBody" + operationId: "ABitOfEverythingService_PostWithEmptyBody" parameters: - name: "name" in: "path" @@ -1819,7 +1819,7 @@ paths: get: tags: - "ABitOfEverythingService" - operationId: "Timeout" + operationId: "ABitOfEverythingService_Timeout" parameters: [] responses: 200: @@ -1846,7 +1846,7 @@ paths: post: tags: - "ABitOfEverythingService" - operationId: "GetMessageWithBody" + operationId: "ABitOfEverythingService_GetMessageWithBody" parameters: - name: "id" in: "path" @@ -1884,7 +1884,7 @@ paths: patch: tags: - "ABitOfEverythingService" - operationId: "UpdateV23" + operationId: "ABitOfEverythingService_UpdateV23" parameters: - name: "abe.uuid" in: "path" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 326be923b33..419a2454a4a 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -32,7 +32,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedName name is nested field. * @param floatValue Float value field - * @param optional nil or *CheckGetQueryParamsOpts - Optional Parameters: + * @param optional nil or *ABitOfEverythingServiceCheckGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. * @param "Uuid" (optional.String) - @@ -68,7 +68,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -type CheckGetQueryParamsOpts struct { +type ABitOfEverythingServiceCheckGetQueryParamsOpts struct { SingleNestedAmount optional.Int64 SingleNestedOk optional.String Uuid optional.String @@ -102,7 +102,7 @@ type CheckGetQueryParamsOpts struct { Int64OverrideType optional.Int64 } -func (a *ABitOfEverythingServiceApiService) CheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, localVarOptionals *CheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQueryParams(ctx context.Context, singleNestedName string, floatValue float32, localVarOptionals *ABitOfEverythingServiceCheckGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -339,7 +339,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param singleNestedOk DeepEnum description. * @param floatValue Float value field - * @param optional nil or *CheckNestedEnumGetQueryParamsOpts - Optional Parameters: + * @param optional nil or *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "Uuid" (optional.String) - @@ -375,7 +375,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -type CheckNestedEnumGetQueryParamsOpts struct { +type ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 Uuid optional.String @@ -409,7 +409,7 @@ type CheckNestedEnumGetQueryParamsOpts struct { Int64OverrideType optional.Int64 } -func (a *ABitOfEverythingServiceApiService) CheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, localVarOptionals *CheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEnumGetQueryParams(ctx context.Context, singleNestedOk string, floatValue float32, localVarOptionals *ABitOfEverythingServiceCheckNestedEnumGetQueryParamsOpts) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -649,7 +649,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) CheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQueryParams(ctx context.Context, stringValue string, body ABitOfEverythingNested) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -815,7 +815,7 @@ This API creates a new ABitOfEverything @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) Create(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string, enumValue string, pathEnumValue string, nestedPathEnumValue string, enumValueAnnotation string) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -978,7 +978,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) CreateBody(ctx context.Context, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBody(ctx context.Context, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1125,7 +1125,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) DeepPathEcho(ctx context.Context, singleNestedName string, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho(ctx context.Context, singleNestedName string, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1272,7 +1272,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) Delete(ctx context.Context, uuid string) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx context.Context, uuid string) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} @@ -1416,7 +1416,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) ErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDetails(ctx context.Context) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -1561,7 +1561,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) GetMessageWithBody(ctx context.Context, id string, body ExamplepbBody) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWithBody(ctx context.Context, id string, body ExamplepbBody) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -1706,7 +1706,7 @@ ABitOfEverythingServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param uuid * @param floatValue Float value field - * @param optional nil or *GetQueryOpts - Optional Parameters: + * @param optional nil or *ABitOfEverythingServiceGetQueryOpts - Optional Parameters: * @param "SingleNestedName" (optional.String) - name is nested field. * @param "SingleNestedAmount" (optional.Int64) - * @param "SingleNestedOk" (optional.String) - DeepEnum description. - FALSE: FALSE is false. - TRUE: TRUE is true. @@ -1743,7 +1743,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -type GetQueryOpts struct { +type ABitOfEverythingServiceGetQueryOpts struct { SingleNestedName optional.String SingleNestedAmount optional.Int64 SingleNestedOk optional.String @@ -1778,7 +1778,7 @@ type GetQueryOpts struct { Int64OverrideType optional.Int64 } -func (a *ABitOfEverythingServiceApiService) GetQuery(ctx context.Context, uuid string, floatValue float32, localVarOptionals *GetQueryOpts) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx context.Context, uuid string, floatValue float32, localVarOptionals *ABitOfEverythingServiceGetQueryOpts) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2022,7 +2022,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverythingRepeated */ -func (a *ABitOfEverythingServiceApiService) GetRepeatedQuery(ctx context.Context, pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (ExamplepbABitOfEverythingRepeated, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetRepeatedQuery(ctx context.Context, pathRepeatedFloatValue []float32, pathRepeatedDoubleValue []float64, pathRepeatedInt64Value []string, pathRepeatedUint64Value []string, pathRepeatedInt32Value []int32, pathRepeatedFixed64Value []string, pathRepeatedFixed32Value []int64, pathRepeatedBoolValue []bool, pathRepeatedStringValue []string, pathRepeatedBytesValue []string, pathRepeatedUint32Value []int64, pathRepeatedEnumValue []string, pathRepeatedSfixed32Value []int32, pathRepeatedSfixed64Value []string, pathRepeatedSint32Value []int32, pathRepeatedSint64Value []string) (ExamplepbABitOfEverythingRepeated, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2230,7 +2230,7 @@ ABitOfEverythingServiceApiService @return ExamplepbABitOfEverything */ -func (a *ABitOfEverythingServiceApiService) Lookup(ctx context.Context, uuid string) (ExamplepbABitOfEverything, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceLookup(ctx context.Context, uuid string) (ExamplepbABitOfEverything, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2374,7 +2374,7 @@ ABitOfEverythingServiceApiService @return string */ -func (a *ABitOfEverythingServiceApiService) OverwriteResponseContentType(ctx context.Context) (string, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceOverwriteResponseContentType(ctx context.Context) (string, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2519,7 +2519,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) PostWithEmptyBody(ctx context.Context, name string, body ExamplepbBody) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostWithEmptyBody(ctx context.Context, name string, body ExamplepbBody) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -2665,7 +2665,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) Timeout(ctx context.Context) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceTimeout(ctx context.Context) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -2810,7 +2810,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) Update(ctx context.Context, uuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx context.Context, uuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -2958,7 +2958,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) UpdateV2(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Put") localVarPostBody interface{} @@ -3106,7 +3106,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) UpdateV22(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx context.Context, abeUuid string, body ExamplepbABitOfEverything) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} @@ -3254,7 +3254,7 @@ ABitOfEverythingServiceApiService @return interface{} */ -func (a *ABitOfEverythingServiceApiService) UpdateV23(ctx context.Context, abeUuid string, body ExamplepbUpdateV2Request) (interface{}, *http.Response, error) { +func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx context.Context, abeUuid string, body ExamplepbUpdateV2Request) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Patch") localVarPostBody interface{} diff --git a/examples/internal/clients/abe/api_camel_case_service_name.go b/examples/internal/clients/abe/api_camel_case_service_name.go index 8a12b878ef7..c7a4a7707e3 100644 --- a/examples/internal/clients/abe/api_camel_case_service_name.go +++ b/examples/internal/clients/abe/api_camel_case_service_name.go @@ -31,7 +31,7 @@ CamelCaseServiceNameApiService @return interface{} */ -func (a *CamelCaseServiceNameApiService) Empty(ctx context.Context) (interface{}, *http.Response, error) { +func (a *CamelCaseServiceNameApiService) CamelCaseServiceNameEmpty(ctx context.Context) (interface{}, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} diff --git a/examples/internal/clients/abe/api_echo_rpc.go b/examples/internal/clients/abe/api_echo_rpc.go index e8979f37579..8e1f06d5ad8 100644 --- a/examples/internal/clients/abe/api_echo_rpc.go +++ b/examples/internal/clients/abe/api_echo_rpc.go @@ -35,7 +35,7 @@ Description Echo @return SubStringMessage */ -func (a *EchoRpcApiService) Echo(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { +func (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -192,7 +192,7 @@ Description Echo @return SubStringMessage */ -func (a *EchoRpcApiService) Echo2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { +func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -346,17 +346,17 @@ func (a *EchoRpcApiService) Echo2(ctx context.Context, body string) (SubStringMe EchoRpcApiService Summary: Echo rpc Description Echo * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param optional nil or *Echo3Opts - Optional Parameters: + * @param optional nil or *ABitOfEverythingServiceEcho3Opts - Optional Parameters: * @param "Value" (optional.String) - @return SubStringMessage */ -type Echo3Opts struct { +type ABitOfEverythingServiceEcho3Opts struct { Value optional.String } -func (a *EchoRpcApiService) Echo3(ctx context.Context, localVarOptionals *Echo3Opts) (SubStringMessage, *http.Response, error) { +func (a *EchoRpcApiService) ABitOfEverythingServiceEcho3(ctx context.Context, localVarOptionals *ABitOfEverythingServiceEcho3Opts) (SubStringMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 7df1b8731c5..2df4be32a99 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -15,7 +15,7 @@ paths: - "EchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo" + operationId: "EchoService_Echo" parameters: - name: "id" in: "path" @@ -38,7 +38,7 @@ paths: - "EchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo2" + operationId: "EchoService_Echo2" parameters: - name: "id" in: "path" @@ -113,7 +113,7 @@ paths: - "EchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo3" + operationId: "EchoService_Echo3" parameters: - name: "id" in: "path" @@ -187,7 +187,7 @@ paths: - "EchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo4" + operationId: "EchoService_Echo4" parameters: - name: "id" in: "path" @@ -255,7 +255,7 @@ paths: - "EchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo5" + operationId: "EchoService_Echo5" parameters: - name: "no.note" in: "path" @@ -324,7 +324,7 @@ paths: tags: - "EchoService" summary: "EchoBody method receives a simple message and returns it." - operationId: "EchoBody" + operationId: "EchoService_EchoBody" parameters: - in: "body" name: "body" @@ -346,7 +346,7 @@ paths: tags: - "EchoService" summary: "EchoDelete method receives a simple message and returns it." - operationId: "EchoDelete" + operationId: "EchoService_EchoDelete" parameters: - name: "id" in: "query" diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index 40524345aa6..b4eeb7dd655 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -34,7 +34,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbSimpleMessage */ -func (a *EchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -132,7 +132,7 @@ The message posted as the id parameter will also be returned. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param id Id represents the message identifier. * @param num - * @param optional nil or *Echo2Opts - Optional Parameters: + * @param optional nil or *EchoServiceEcho2Opts - Optional Parameters: * @param "LineNum" (optional.String) - * @param "Lang" (optional.String) - * @param "StatusProgress" (optional.String) - @@ -144,7 +144,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbSimpleMessage */ -type Echo2Opts struct { +type EchoServiceEcho2Opts struct { LineNum optional.String Lang optional.String StatusProgress optional.String @@ -154,7 +154,7 @@ type Echo2Opts struct { NoNote optional.String } -func (a *EchoServiceApiService) Echo2(ctx context.Context, id string, num string, localVarOptionals *Echo2Opts) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEcho2(ctx context.Context, id string, num string, localVarOptionals *EchoServiceEcho2Opts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -275,7 +275,7 @@ The message posted as the id parameter will also be returned. * @param id Id represents the message identifier. * @param num * @param lang - * @param optional nil or *Echo3Opts - Optional Parameters: + * @param optional nil or *EchoServiceEcho3Opts - Optional Parameters: * @param "LineNum" (optional.String) - * @param "StatusProgress" (optional.String) - * @param "StatusNote" (optional.String) - @@ -286,7 +286,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbSimpleMessage */ -type Echo3Opts struct { +type EchoServiceEcho3Opts struct { LineNum optional.String StatusProgress optional.String StatusNote optional.String @@ -295,7 +295,7 @@ type Echo3Opts struct { NoNote optional.String } -func (a *EchoServiceApiService) Echo3(ctx context.Context, id string, num string, lang string, localVarOptionals *Echo3Opts) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEcho3(ctx context.Context, id string, num string, lang string, localVarOptionals *EchoServiceEcho3Opts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -414,7 +414,7 @@ The message posted as the id parameter will also be returned. * @param id Id represents the message identifier. * @param lineNum * @param statusNote - * @param optional nil or *Echo4Opts - Optional Parameters: + * @param optional nil or *EchoServiceEcho4Opts - Optional Parameters: * @param "Num" (optional.String) - * @param "Lang" (optional.String) - * @param "StatusProgress" (optional.String) - @@ -424,7 +424,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbSimpleMessage */ -type Echo4Opts struct { +type EchoServiceEcho4Opts struct { Num optional.String Lang optional.String StatusProgress optional.String @@ -432,7 +432,7 @@ type Echo4Opts struct { NoProgress optional.String } -func (a *EchoServiceApiService) Echo4(ctx context.Context, id string, lineNum string, statusNote string, localVarOptionals *Echo4Opts) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEcho4(ctx context.Context, id string, lineNum string, statusNote string, localVarOptionals *EchoServiceEcho4Opts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -546,7 +546,7 @@ EchoServiceApiService Echo method receives a simple message and returns it. The message posted as the id parameter will also be returned. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param noNote - * @param optional nil or *Echo5Opts - Optional Parameters: + * @param optional nil or *EchoServiceEcho5Opts - Optional Parameters: * @param "Id" (optional.String) - Id represents the message identifier. * @param "Num" (optional.String) - * @param "LineNum" (optional.String) - @@ -558,7 +558,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbSimpleMessage */ -type Echo5Opts struct { +type EchoServiceEcho5Opts struct { Id optional.String Num optional.String LineNum optional.String @@ -568,7 +568,7 @@ type Echo5Opts struct { NoProgress optional.String } -func (a *EchoServiceApiService) Echo5(ctx context.Context, noNote string, localVarOptionals *Echo5Opts) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, noNote string, localVarOptionals *EchoServiceEcho5Opts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -688,7 +688,7 @@ EchoServiceApiService EchoBody method receives a simple message and returns it. @return ExamplepbSimpleMessage */ -func (a *EchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbSimpleMessage) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEchoBody(ctx context.Context, body ExamplepbSimpleMessage) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -784,7 +784,7 @@ func (a *EchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbSimp /* EchoServiceApiService EchoDelete method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param optional nil or *EchoDeleteOpts - Optional Parameters: + * @param optional nil or *EchoServiceEchoDeleteOpts - Optional Parameters: * @param "Id" (optional.String) - Id represents the message identifier. * @param "Num" (optional.String) - * @param "LineNum" (optional.String) - @@ -798,7 +798,7 @@ EchoServiceApiService EchoDelete method receives a simple message and returns it @return ExamplepbSimpleMessage */ -type EchoDeleteOpts struct { +type EchoServiceEchoDeleteOpts struct { Id optional.String Num optional.String LineNum optional.String @@ -810,7 +810,7 @@ type EchoDeleteOpts struct { NoNote optional.String } -func (a *EchoServiceApiService) EchoDelete(ctx context.Context, localVarOptionals *EchoDeleteOpts) (ExamplepbSimpleMessage, *http.Response, error) { +func (a *EchoServiceApiService) EchoServiceEchoDelete(ctx context.Context, localVarOptionals *EchoServiceEchoDeleteOpts) (ExamplepbSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 1b9cedfa7cc..4a3e595dcce 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -12,7 +12,7 @@ paths: get: tags: - "ResponseBodyService" - operationId: "ListResponseBodies" + operationId: "ResponseBodyService_ListResponseBodies" parameters: - name: "data" in: "path" @@ -34,7 +34,7 @@ paths: get: tags: - "ResponseBodyService" - operationId: "GetResponseBody" + operationId: "ResponseBodyService_GetResponseBody" parameters: - name: "data" in: "path" @@ -54,7 +54,7 @@ paths: get: tags: - "ResponseBodyService" - operationId: "ListResponseStrings" + operationId: "ResponseBodyService_ListResponseStrings" parameters: - name: "data" in: "path" diff --git a/examples/internal/clients/responsebody/api_response_body_service.go b/examples/internal/clients/responsebody/api_response_body_service.go index 12637f0acfa..4a4e2d411a8 100644 --- a/examples/internal/clients/responsebody/api_response_body_service.go +++ b/examples/internal/clients/responsebody/api_response_body_service.go @@ -32,7 +32,7 @@ ResponseBodyServiceApiService @return ExamplepbResponseBodyOutResponse */ -func (a *ResponseBodyServiceApiService) GetResponseBody(ctx context.Context, data string) (ExamplepbResponseBodyOutResponse, *http.Response, error) { +func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBody(ctx context.Context, data string) (ExamplepbResponseBodyOutResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -131,7 +131,7 @@ ResponseBodyServiceApiService @return []ExamplepbRepeatedResponseBodyOutResponse */ -func (a *ResponseBodyServiceApiService) ListResponseBodies(ctx context.Context, data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *http.Response, error) { +func (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseBodies(ctx context.Context, data string) ([]ExamplepbRepeatedResponseBodyOutResponse, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -230,7 +230,7 @@ ResponseBodyServiceApiService @return []string */ -func (a *ResponseBodyServiceApiService) ListResponseStrings(ctx context.Context, data string) ([]string, *http.Response, error) { +func (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseStrings(ctx context.Context, data string) ([]string, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} diff --git a/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md index 914a90f0113..480b621c095 100644 --- a/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md +++ b/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -4,13 +4,13 @@ All URIs are relative to *https://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- -[**GetResponseBody**](ResponseBodyServiceApi.md#GetResponseBody) | **Get** /responsebody/{data} | -[**ListResponseBodies**](ResponseBodyServiceApi.md#ListResponseBodies) | **Get** /responsebodies/{data} | -[**ListResponseStrings**](ResponseBodyServiceApi.md#ListResponseStrings) | **Get** /responsestrings/{data} | +[**ResponseBodyServiceGetResponseBody**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBody) | **Get** /responsebody/{data} | +[**ResponseBodyServiceListResponseBodies**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseBodies) | **Get** /responsebodies/{data} | +[**ResponseBodyServiceListResponseStrings**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseStrings) | **Get** /responsestrings/{data} | -# **GetResponseBody** -> ExamplepbResponseBodyOutResponse GetResponseBody(ctx, data) +# **ResponseBodyServiceGetResponseBody** +> ExamplepbResponseBodyOutResponse ResponseBodyServiceGetResponseBody(ctx, data) ### Required Parameters @@ -35,8 +35,8 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **ListResponseBodies** -> []ExamplepbRepeatedResponseBodyOutResponse ListResponseBodies(ctx, data) +# **ResponseBodyServiceListResponseBodies** +> []ExamplepbRepeatedResponseBodyOutResponse ResponseBodyServiceListResponseBodies(ctx, data) ### Required Parameters @@ -61,8 +61,8 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **ListResponseStrings** -> []string ListResponseStrings(ctx, data) +# **ResponseBodyServiceListResponseStrings** +> []string ResponseBodyServiceListResponseStrings(ctx, data) ### Required Parameters diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index 2dbae78a5f6..ab5450bab15 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -18,7 +18,7 @@ paths: - "UnannotatedEchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo" + operationId: "UnannotatedEchoService_Echo" parameters: - name: "id" in: "path" @@ -41,7 +41,7 @@ paths: - "UnannotatedEchoService" summary: "Echo method receives a simple message and returns it." description: "The message posted as the id parameter will also be\nreturned." - operationId: "Echo2" + operationId: "UnannotatedEchoService_Echo2" parameters: - name: "id" in: "path" @@ -75,7 +75,7 @@ paths: tags: - "UnannotatedEchoService" summary: "EchoBody method receives a simple message and returns it." - operationId: "EchoBody" + operationId: "UnannotatedEchoService_EchoBody" parameters: - in: "body" name: "body" @@ -97,7 +97,7 @@ paths: tags: - "UnannotatedEchoService" summary: "EchoDelete method receives a simple message and returns it." - operationId: "EchoDelete" + operationId: "UnannotatedEchoService_EchoDelete" parameters: - name: "id" in: "query" diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index 8eec8d0fede..7f33b29bef0 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -34,7 +34,7 @@ The message posted as the id parameter will also be returned. @return ExamplepbUnannotatedSimpleMessage */ -func (a *UnannotatedEchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { +func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx context.Context, id string) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -132,17 +132,17 @@ The message posted as the id parameter will also be returned. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param id Id represents the message identifier. * @param num - * @param optional nil or *Echo2Opts - Optional Parameters: + * @param optional nil or *UnannotatedEchoServiceEcho2Opts - Optional Parameters: * @param "Duration" (optional.String) - @return ExamplepbUnannotatedSimpleMessage */ -type Echo2Opts struct { +type UnannotatedEchoServiceEcho2Opts struct { Duration optional.String } -func (a *UnannotatedEchoServiceApiService) Echo2(ctx context.Context, id string, num string, localVarOptionals *Echo2Opts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { +func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx context.Context, id string, num string, localVarOptionals *UnannotatedEchoServiceEcho2Opts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Get") localVarPostBody interface{} @@ -245,7 +245,7 @@ UnannotatedEchoServiceApiService EchoBody method receives a simple message and r @return ExamplepbUnannotatedSimpleMessage */ -func (a *UnannotatedEchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbUnannotatedSimpleMessage) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { +func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoBody(ctx context.Context, body ExamplepbUnannotatedSimpleMessage) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Post") localVarPostBody interface{} @@ -341,7 +341,7 @@ func (a *UnannotatedEchoServiceApiService) EchoBody(ctx context.Context, body Ex /* UnannotatedEchoServiceApiService EchoDelete method receives a simple message and returns it. * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - * @param optional nil or *EchoDeleteOpts - Optional Parameters: + * @param optional nil or *UnannotatedEchoServiceEchoDeleteOpts - Optional Parameters: * @param "Id" (optional.String) - Id represents the message identifier. * @param "Num" (optional.String) - * @param "Duration" (optional.String) - @@ -349,13 +349,13 @@ UnannotatedEchoServiceApiService EchoDelete method receives a simple message and @return ExamplepbUnannotatedSimpleMessage */ -type EchoDeleteOpts struct { +type UnannotatedEchoServiceEchoDeleteOpts struct { Id optional.String Num optional.String Duration optional.String } -func (a *UnannotatedEchoServiceApiService) EchoDelete(ctx context.Context, localVarOptionals *EchoDeleteOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { +func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx context.Context, localVarOptionals *UnannotatedEchoServiceEchoDeleteOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { var ( localVarHttpMethod = strings.ToUpper("Delete") localVarPostBody interface{} diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 90ad997f90f..ca3b1eacc51 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -19,7 +19,7 @@ func TestEchoClient(t *testing.T) { cfg.BasePath = "http://localhost:8088" cl := echo.NewAPIClient(cfg) - resp, _, err := cl.EchoServiceApi.Echo(context.Background(), "foo") + resp, _, err := cl.EchoServiceApi.EchoServiceEcho(context.Background(), "foo") if err != nil { t.Errorf(`cl.EchoServiceApi.Echo("foo") failed with %v; want success`, err) } @@ -39,7 +39,7 @@ func TestEchoBodyClient(t *testing.T) { cl := echo.NewAPIClient(cfg) req := echo.ExamplepbSimpleMessage{Id: "foo"} - resp, _, err := cl.EchoServiceApi.EchoBody(context.Background(), req) + resp, _, err := cl.EchoServiceApi.EchoServiceEchoBody(context.Background(), req) if err != nil { t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) } @@ -88,7 +88,7 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { NestedPathEnumValue: &messagePath, EnumValueAnnotation: &enumZero, } - resp, _, err := cl.ABitOfEverythingServiceApi.Create( + resp, _, err := cl.ABitOfEverythingServiceApi.ABitOfEverythingServiceCreate( context.Background(), want.FloatValue, want.DoubleValue, @@ -188,7 +188,7 @@ func TestUnannotatedEchoClient(t *testing.T) { cl := unannotatedecho.NewAPIClient(cfg) - resp, _, err := cl.UnannotatedEchoServiceApi.Echo(context.Background(), "foo") + resp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEcho(context.Background(), "foo") if err != nil { t.Errorf(`cl.Echo("foo") failed with %v; want success`, err) } @@ -209,7 +209,7 @@ func TestUnannotatedEchoBodyClient(t *testing.T) { cl := unannotatedecho.NewAPIClient(cfg) req := unannotatedecho.ExamplepbUnannotatedSimpleMessage{Id: "foo"} - resp, _, err := cl.UnannotatedEchoServiceApi.EchoBody(context.Background(), req) + resp, _, err := cl.UnannotatedEchoServiceApi.UnannotatedEchoServiceEchoBody(context.Background(), req) if err != nil { t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 5dc22410e8d..76a818c470e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -30,7 +30,7 @@ "paths": { "/v1/example/a_bit_of_everything": { "post": { - "operationId": "CreateBody", + "operationId": "ABitOfEverythingService_CreateBody", "responses": { "200": { "description": "A successful response.", @@ -81,7 +81,7 @@ "get": { "summary": "Summary: Echo rpc", "description": "Description Echo", - "operationId": "Echo", + "operationId": "ABitOfEverythingService_Echo", "responses": { "200": { "description": "A successful response.", @@ -142,7 +142,7 @@ }, "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}": { "get": { - "operationId": "CheckNestedEnumGetQueryParams", + "operationId": "ABitOfEverythingService_CheckNestedEnumGetQueryParams", "responses": { "200": { "description": "A successful response.", @@ -457,7 +457,7 @@ }, "/v1/example/a_bit_of_everything/params/get/{single_nested.name}": { "get": { - "operationId": "CheckGetQueryParams", + "operationId": "ABitOfEverythingService_CheckGetQueryParams", "responses": { "200": { "description": "A successful response.", @@ -778,7 +778,7 @@ }, "/v1/example/a_bit_of_everything/params/post/{string_value}": { "post": { - "operationId": "CheckPostQueryParams", + "operationId": "ABitOfEverythingService_CheckPostQueryParams", "responses": { "200": { "description": "A successful response.", @@ -833,7 +833,7 @@ }, "/v1/example/a_bit_of_everything/query/{uuid}": { "get": { - "operationId": "GetQuery", + "operationId": "ABitOfEverythingService_GetQuery", "responses": { "200": { "description": "A successful response.", @@ -1169,7 +1169,7 @@ "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", - "operationId": "Create", + "operationId": "ABitOfEverythingService_Create", "responses": { "200": { "description": "A successful response.", @@ -1356,7 +1356,7 @@ }, "/v1/example/a_bit_of_everything/{single_nested.name}": { "post": { - "operationId": "DeepPathEcho", + "operationId": "ABitOfEverythingService_DeepPathEcho", "responses": { "200": { "description": "A successful response.", @@ -1412,7 +1412,7 @@ }, "/v1/example/a_bit_of_everything/{uuid}": { "get": { - "operationId": "Lookup", + "operationId": "ABitOfEverythingService_Lookup", "responses": { "200": { "description": "A successful response.", @@ -1457,7 +1457,7 @@ ] }, "delete": { - "operationId": "Delete", + "operationId": "ABitOfEverythingService_Delete", "responses": { "200": { "description": "A successful response.", @@ -1512,7 +1512,7 @@ "x-irreversible": true }, "put": { - "operationId": "Update", + "operationId": "ABitOfEverythingService_Update", "responses": { "200": { "description": "A successful response.", @@ -1567,7 +1567,7 @@ }, "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}": { "get": { - "operationId": "GetRepeatedQuery", + "operationId": "ABitOfEverythingService_GetRepeatedQuery", "responses": { "200": { "description": "A successful response.", @@ -1803,7 +1803,7 @@ }, "/v2/example/a_bit_of_everything/{abe.uuid}": { "put": { - "operationId": "UpdateV2", + "operationId": "ABitOfEverythingService_UpdateV2", "responses": { "200": { "description": "A successful response.", @@ -1856,7 +1856,7 @@ ] }, "patch": { - "operationId": "UpdateV22", + "operationId": "ABitOfEverythingService_UpdateV22", "responses": { "200": { "description": "A successful response.", @@ -1913,7 +1913,7 @@ "get": { "summary": "Summary: Echo rpc", "description": "Description Echo", - "operationId": "Echo3", + "operationId": "ABitOfEverythingService_Echo3", "responses": { "200": { "description": "A successful response.", @@ -1974,7 +1974,7 @@ "post": { "summary": "Summary: Echo rpc", "description": "Description Echo", - "operationId": "Echo2", + "operationId": "ABitOfEverythingService_Echo2", "responses": { "200": { "description": "A successful response.", @@ -2037,7 +2037,7 @@ }, "/v2/example/empty": { "get": { - "operationId": "Empty", + "operationId": "camelCaseServiceName_Empty", "responses": { "200": { "description": "A successful response.", @@ -2076,7 +2076,7 @@ }, "/v2/example/errorwithdetails": { "get": { - "operationId": "ErrorWithDetails", + "operationId": "ABitOfEverythingService_ErrorWithDetails", "responses": { "200": { "description": "A successful response.", @@ -2115,7 +2115,7 @@ }, "/v2/example/overwriteresponsecontenttype": { "get": { - "operationId": "OverwriteResponseContentType", + "operationId": "ABitOfEverythingService_OverwriteResponseContentType", "responses": { "200": { "description": "A successful response.", @@ -2157,7 +2157,7 @@ }, "/v2/example/postwithemptybody/{name}": { "post": { - "operationId": "PostWithEmptyBody", + "operationId": "ABitOfEverythingService_PostWithEmptyBody", "responses": { "200": { "description": "A successful response.", @@ -2212,7 +2212,7 @@ }, "/v2/example/timeout": { "get": { - "operationId": "Timeout", + "operationId": "ABitOfEverythingService_Timeout", "responses": { "200": { "description": "A successful response.", @@ -2251,7 +2251,7 @@ }, "/v2/example/withbody/{id}": { "post": { - "operationId": "GetMessageWithBody", + "operationId": "ABitOfEverythingService_GetMessageWithBody", "responses": { "200": { "description": "A successful response.", @@ -2306,7 +2306,7 @@ }, "/v2a/example/a_bit_of_everything/{abe.uuid}": { "patch": { - "operationId": "UpdateV23", + "operationId": "ABitOfEverythingService_UpdateV23", "responses": { "200": { "description": "A successful response.", diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index f7b35c2ddee..43d9b608d56 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -16,7 +16,7 @@ "post": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo", + "operationId": "EchoService_Echo", "responses": { "200": { "description": "A successful response.", @@ -49,7 +49,7 @@ "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo2", + "operationId": "EchoService_Echo2", "responses": { "200": { "description": "A successful response.", @@ -135,7 +135,7 @@ "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo3", + "operationId": "EchoService_Echo3", "responses": { "200": { "description": "A successful response.", @@ -221,7 +221,7 @@ "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo4", + "operationId": "EchoService_Echo4", "responses": { "200": { "description": "A successful response.", @@ -301,7 +301,7 @@ "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo5", + "operationId": "EchoService_Echo5", "responses": { "200": { "description": "A successful response.", @@ -380,7 +380,7 @@ "/v1/example/echo_body": { "post": { "summary": "EchoBody method receives a simple message and returns it.", - "operationId": "EchoBody", + "operationId": "EchoService_EchoBody", "responses": { "200": { "description": "A successful response.", @@ -413,7 +413,7 @@ "/v1/example/echo_delete": { "delete": { "summary": "EchoDelete method receives a simple message and returns it.", - "operationId": "EchoDelete", + "operationId": "EchoService_EchoDelete", "responses": { "200": { "description": "A successful response.", diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 1786b2dba94..11143187def 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -13,7 +13,7 @@ "paths": { "/responsebodies/{data}": { "get": { - "operationId": "ListResponseBodies", + "operationId": "ResponseBodyService_ListResponseBodies", "responses": { "200": { "description": "", @@ -46,7 +46,7 @@ }, "/responsebody/{data}": { "get": { - "operationId": "GetResponseBody", + "operationId": "ResponseBodyService_GetResponseBody", "responses": { "200": { "description": "", @@ -76,7 +76,7 @@ }, "/responsestrings/{data}": { "get": { - "operationId": "ListResponseStrings", + "operationId": "ResponseBodyService_ListResponseStrings", "responses": { "200": { "description": "", diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index faef15b04e4..2d4681d6c4a 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -13,7 +13,7 @@ "paths": { "/v1/example/a_bit_of_everything": { "get": { - "operationId": "List", + "operationId": "StreamService_List", "responses": { "200": { "description": "A successful response.(streaming responses)", @@ -44,7 +44,7 @@ }, "/v1/example/a_bit_of_everything/bulk": { "post": { - "operationId": "BulkCreate", + "operationId": "StreamService_BulkCreate", "responses": { "200": { "description": "A successful response.", @@ -77,7 +77,7 @@ }, "/v1/example/a_bit_of_everything/echo": { "post": { - "operationId": "BulkEcho", + "operationId": "StreamService_BulkEcho", "responses": { "200": { "description": "A successful response.(streaming responses)", diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 36720e9367b..4d383edc489 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -16,7 +16,7 @@ "post": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo", + "operationId": "UnannotatedEchoService_Echo", "responses": { "200": { "description": "A successful response.", @@ -49,7 +49,7 @@ "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", - "operationId": "Echo2", + "operationId": "UnannotatedEchoService_Echo2", "responses": { "200": { "description": "A successful response.", @@ -94,7 +94,7 @@ "/v1/example/echo_body": { "post": { "summary": "EchoBody method receives a simple message and returns it.", - "operationId": "EchoBody", + "operationId": "UnannotatedEchoService_EchoBody", "responses": { "200": { "description": "A successful response.", @@ -127,7 +127,7 @@ "/v1/example/echo_delete": { "delete": { "summary": "EchoDelete method receives a simple message and returns it.", - "operationId": "EchoDelete", + "operationId": "UnannotatedEchoService_EchoDelete", "responses": { "200": { "description": "A successful response.", diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 642ab4539fa..2c68208ce1b 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -15,7 +15,7 @@ "post": { "summary": "Login", "description": "Login is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LoginRequest\" and returns a \"LoginReply\".\n\n## LoginRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | username | TYPE_STRING | The entered username | \n| 2 | password | TYPE_STRING | The entered password | \n\n## LoginReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | | \n| 2 | access | TYPE_BOOL | Whether you have access or not |", - "operationId": "Login", + "operationId": "LoginService_Login", "responses": { "200": { "description": "A successful response.", @@ -49,7 +49,7 @@ "post": { "summary": "Logout", "description": "Logout is a call with the method(s) POST within the \"LoginService\" service.\nIt takes in \"LogoutRequest\" and returns a \"LogoutReply\".\n\n## LogoutRequest\n| Field ID | Name | Type | Description |\n| ----------- | --------- | --------------------------------------------------------- | ---------------------------- | \n| 1 | timeoflogout | TYPE_STRING | The time the logout was registered | \n| 2 | test | TYPE_INT32 | This is the title\u003cbr\u003e\u003cbr\u003eThis is the \"Description\" of field test\u003cbr\u003eyou can use as many newlines as you want\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eit will still format the same in the table | \n| 3 | stringarray | []TYPE_STRING | This is an array\u003cbr\u003e\u003cbr\u003eIt displays that using [] infront of the type | \n\n## LogoutReply\n| Field ID | Name | Type | Description |\n| ----------- | --------- | ---------------------------------------------------------- | ---------------------------- | \n| 1 | message | TYPE_STRING | Message that tells you whether your\u003cbr\u003elogout was succesful or not |", - "operationId": "Logout", + "operationId": "LoginService_Logout", "responses": { "200": { "description": "A successful response.", diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index d42d6f3fb6b..0153c9592df 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -13,7 +13,7 @@ "paths": { "/v1/example/wrappers": { "post": { - "operationId": "Create", + "operationId": "WrappersService_Create", "responses": { "200": { "description": "A successful response.", @@ -45,7 +45,7 @@ }, "/v1/testBool": { "post": { - "operationId": "CreateBoolValue", + "operationId": "WrappersService_CreateBoolValue", "responses": { "200": { "description": "A successful response.", @@ -79,7 +79,7 @@ }, "/v1/testBytes": { "post": { - "operationId": "CreateBytesValue", + "operationId": "WrappersService_CreateBytesValue", "responses": { "200": { "description": "A successful response.", @@ -113,7 +113,7 @@ }, "/v1/testDouble": { "post": { - "operationId": "CreateDoubleValue", + "operationId": "WrappersService_CreateDoubleValue", "responses": { "200": { "description": "A successful response.", @@ -147,7 +147,7 @@ }, "/v1/testEmpty": { "post": { - "operationId": "CreateEmpty", + "operationId": "WrappersService_CreateEmpty", "responses": { "200": { "description": "A successful response.", @@ -179,7 +179,7 @@ }, "/v1/testFloat": { "post": { - "operationId": "CreateFloatValue", + "operationId": "WrappersService_CreateFloatValue", "responses": { "200": { "description": "A successful response.", @@ -213,7 +213,7 @@ }, "/v1/testInt32": { "post": { - "operationId": "CreateInt32Value", + "operationId": "WrappersService_CreateInt32Value", "responses": { "200": { "description": "A successful response.", @@ -247,7 +247,7 @@ }, "/v1/testInt64": { "post": { - "operationId": "CreateInt64Value", + "operationId": "WrappersService_CreateInt64Value", "responses": { "200": { "description": "A successful response.", @@ -281,7 +281,7 @@ }, "/v1/testString": { "post": { - "operationId": "CreateStringValue", + "operationId": "WrappersService_CreateStringValue", "responses": { "200": { "description": "A successful response.", @@ -313,7 +313,7 @@ }, "/v1/testUint32": { "post": { - "operationId": "CreateUInt32Value", + "operationId": "WrappersService_CreateUInt32Value", "responses": { "200": { "description": "A successful response.", @@ -347,7 +347,7 @@ }, "/v1/testUint64": { "post": { - "operationId": "CreateUInt64Value", + "operationId": "WrappersService_CreateUInt64Value", "responses": { "200": { "description": "A successful response.", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 04005e27bd9..77c99feac55 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -978,10 +978,10 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } if bIdx == 0 { - operationObject.OperationID = fmt.Sprintf("%s", meth.GetName()) + operationObject.OperationID = fmt.Sprintf("%s_%s", svc.GetName(), meth.GetName()) } else { // OperationID must be unique in an OpenAPI v2 definition. - operationObject.OperationID = fmt.Sprintf("%s%d", meth.GetName(), bIdx+1) + operationObject.OperationID = fmt.Sprintf("%s_%s%d", svc.GetName(), meth.GetName(), bIdx+1) } // Fill reference map with referenced request messages @@ -1945,7 +1945,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri fieldNameToType := make(map[string]string, 0) for _, msg := range msgs { fieldNameToJSONName := make(map[string]string, 0) - for _, oneField := range msg.GetField() { + for _, oneField := range msg.GetField() { fieldNameToJSONName[oneField.GetName()] = oneField.GetJsonName() fieldNameToType[oneField.GetName()] = oneField.GetTypeName() } @@ -1954,11 +1954,11 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri if strings.Contains(fieldName, ".") { fieldNames := strings.Split(fieldName, ".") fieldNamesWithCamelCase := make([]string, 0) - for i := 0; i < len(fieldNames) - 1; i++ { + for i := 0; i < len(fieldNames)-1; i++ { fieldNamesWithCamelCase = append(fieldNamesWithCamelCase, doCamelCase(string(fieldNames[i]))) } prefix := strings.Join(fieldNamesWithCamelCase, ".") - reservedJSONName := getReservedJSONName(fieldName, messageNameToFieldsToJSONName,fieldNameToType) + reservedJSONName := getReservedJSONName(fieldName, messageNameToFieldsToJSONName, fieldNameToType) if reservedJSONName != "" { return prefix + "." + reservedJSONName } @@ -1980,10 +1980,9 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str firstVariable := fieldNames[0] firstType := fieldNameToType[firstVariable] firstTypeShortNames := strings.Split(firstType, ".") - firstTypeShortName := firstTypeShortNames[len(firstTypeShortNames) - 1] + firstTypeShortName := firstTypeShortNames[len(firstTypeShortNames)-1] return messageNameToFieldsToJSONName[firstTypeShortName][fieldNames[1]] } fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } - diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index c7a35a6b6c8..9176eb07a51 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -606,6 +606,118 @@ func TestApplyTemplateSimple(t *testing.T) { } } +func TestApplyTemplateMultiService(t *testing.T) { + msgdesc := &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + } + meth := &protodescriptor.MethodDescriptorProto{ + Name: proto.String("Example"), + InputType: proto.String("ExampleMessage"), + OutputType: proto.String("ExampleMessage"), + } + + // Create two services that have the same method name. We will test that the + // operation IDs are different + svc := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("ExampleService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + svc2 := &protodescriptor.ServiceDescriptorProto{ + Name: proto.String("OtherService"), + Method: []*protodescriptor.MethodDescriptorProto{meth}, + } + + msg := &descriptor.Message{ + DescriptorProto: msgdesc, + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, + MessageType: []*protodescriptor.DescriptorProto{msgdesc}, + Service: []*protodescriptor.ServiceDescriptorProto{svc}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: []*descriptor.Message{msg}, + Services: []*descriptor.Service{ + { + ServiceDescriptorProto: svc, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/echo", + }, + }, + }, + }, + }, + }, + { + ServiceDescriptorProto: svc2, + Methods: []*descriptor.Method{ + { + MethodDescriptorProto: meth, + RequestType: msg, + ResponseType: msg, + Bindings: []*descriptor.Binding{ + { + HTTPMethod: "GET", + Body: &descriptor.Body{FieldPath: nil}, + PathTmpl: httprule.Template{ + Version: 1, + OpCodes: []int{0, 0}, + Template: "/v1/ping", + }, + }, + }, + }, + }, + }, + }, + } + reg := descriptor.NewRegistry() + fileCL := crossLinkFixture(&file) + err := reg.Load(reqFromFile(fileCL)) + if err != nil { + t.Errorf("reg.Load(%#v) failed with %v; want success", file, err) + return + } + result, err := applyTemplate(param{File: fileCL, reg: reg}) + if err != nil { + t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) + return + } + + // Check that the two services have unique operation IDs even though they + // have the same method name. + if want, is := "ExampleService_Example", result.Paths["/v1/echo"].Get.OperationID; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s", file, is, want) + } + if want, is := "OtherService_Example", result.Paths["/v1/ping"].Get.OperationID; !reflect.DeepEqual(is, want) { + t.Errorf("applyTemplate(%#v).Paths[0].Get.OperationID = %s want to be %s", file, is, want) + } + + // If there was a failure, print out the input and the json result for debugging. + if t.Failed() { + t.Errorf("had: %s", file) + t.Errorf("got: %s", fmt.Sprint(result)) + } +} + func TestApplyTemplateOverrideOperationID(t *testing.T) { msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), @@ -1325,10 +1437,10 @@ func generateMsgsForJSONReservedName() []*descriptor.Message { pfd := protodescriptor.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName, TypeName: &messageType} result = append(result, &descriptor.Message{ - DescriptorProto: &protodescriptor.DescriptorProto{ - Name: &messageName1, Field: []*protodescriptor.FieldDescriptorProto{&pfd}, - }, - }) + DescriptorProto: &protodescriptor.DescriptorProto{ + Name: &messageName1, Field: []*protodescriptor.FieldDescriptorProto{&pfd}, + }, + }) // The second message, its name is NewName, its type is string // message NewType { // string field_newName [json_name = RESERVEDJSONNAME] @@ -1336,7 +1448,7 @@ func generateMsgsForJSONReservedName() []*descriptor.Message { messageName := "NewType" field := "field_newName" fieldJSONName2 := "RESERVEDJSONNAME" - pfd2 := protodescriptor.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2,} + pfd2 := protodescriptor.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2} result = append(result, &descriptor.Message{ DescriptorProto: &protodescriptor.DescriptorProto{ Name: &messageName, Field: []*protodescriptor.FieldDescriptorProto{&pfd2}, From bf9862821a04ca32285827d8f6aa1d6978d34720 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 1 Apr 2020 10:11:54 +0100 Subject: [PATCH 0290/1518] Generate changelog for 1.14.4-rc.1 --- CHANGELOG.md | 51 ++++++++++++++++++++++++++++++++++++++++++--------- Makefile | 2 +- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 816d64543a3..4710a2dc249 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,66 @@ # Change Log -## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) +## [v1.14.4-rc.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4-rc.1) (2020-04-01) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.3...v1.14.4-rc.1) + +**Implemented enhancements:** + +- proto-gen-\* --version [\#649](https://github.com/grpc-ecosystem/grpc-gateway/issues/649) + +**Closed issues:** + +- protoc-gen-swagger: json\_names\_for\_fields=true does not respect json\_name for \*nested\* path parameters [\#1187](https://github.com/grpc-ecosystem/grpc-gateway/issues/1187) +- protoc-gen-grpc-gateway-ts plugin for generating Typescript types [\#1182](https://github.com/grpc-ecosystem/grpc-gateway/issues/1182) +- protoc-gen-swagger: support outputting enum parameters as integers [\#1177](https://github.com/grpc-ecosystem/grpc-gateway/issues/1177) +- protoc-gen-grpc-gateway should warn or fail if a selector does not exist [\#1175](https://github.com/grpc-ecosystem/grpc-gateway/issues/1175) +- Enum string values not supported by grpc gateway [\#1171](https://github.com/grpc-ecosystem/grpc-gateway/issues/1171) +- Swagger definition is broken if there's no default error response set [\#1162](https://github.com/grpc-ecosystem/grpc-gateway/issues/1162) +- Using golang/protobuf v1.4.0-rc.3 locks up generators [\#1158](https://github.com/grpc-ecosystem/grpc-gateway/issues/1158) **Merged pull requests:** -- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate Swagger with Unique Operation IDs [\#1193](https://github.com/grpc-ecosystem/grpc-gateway/pull/1193) ([dadgar](https://github.com/dadgar)) +- Xin/support deep levels reserved json name [\#1191](https://github.com/grpc-ecosystem/grpc-gateway/pull/1191) ([xin-au](https://github.com/xin-au)) +- feat: add enumAsInts flag [\#1186](https://github.com/grpc-ecosystem/grpc-gateway/pull/1186) ([rowe0x](https://github.com/rowe0x)) +- Use 8088 instead of 8080 in integration test. [\#1184](https://github.com/grpc-ecosystem/grpc-gateway/pull/1184) ([drigz](https://github.com/drigz)) +- Limit Bazel memory usage in CI. [\#1183](https://github.com/grpc-ecosystem/grpc-gateway/pull/1183) ([drigz](https://github.com/drigz)) +- fix version spelling [\#1181](https://github.com/grpc-ecosystem/grpc-gateway/pull/1181) ([seriousben](https://github.com/seriousben)) +- Emit error on HTTP rules without a matching selector and log warning on unbound methods [\#1178](https://github.com/grpc-ecosystem/grpc-gateway/pull/1178) ([andrascz](https://github.com/andrascz)) +- genswagger: don't emit default response if there's no Error definition [\#1166](https://github.com/grpc-ecosystem/grpc-gateway/pull/1166) ([utrack](https://github.com/utrack)) + +## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) **Closed issues:** - Missing httprule breaks our module [\#1168](https://github.com/grpc-ecosystem/grpc-gateway/issues/1168) -## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) - **Merged pull requests:** -- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.14.3 [\#1170](https://github.com/grpc-ecosystem/grpc-gateway/pull/1170) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) **Closed issues:** - 1.14.x breaks clay [\#1161](https://github.com/grpc-ecosystem/grpc-gateway/issues/1161) +- Enum string values not supported by grpc gateway [\#1159](https://github.com/grpc-ecosystem/grpc-gateway/issues/1159) +- Path parameters visible in the body of the request [\#1157](https://github.com/grpc-ecosystem/grpc-gateway/issues/1157) +- 1.14.0 breaks existing pipelines [\#1154](https://github.com/grpc-ecosystem/grpc-gateway/issues/1154) + +**Merged pull requests:** + +- Generate changelog for 1.14.2 [\#1164](https://github.com/grpc-ecosystem/grpc-gateway/pull/1164) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) ## [v1.14.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.1) (2020-03-05) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.0...v1.14.1) **Merged pull requests:** -- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1151) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1156) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Move generator and descriptor back to public API [\#1155](https://github.com/grpc-ecosystem/grpc-gateway/pull/1155) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update build environment to 1.14 [\#1153](https://github.com/grpc-ecosystem/grpc-gateway/pull/1153) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add gorelease CI step [\#1152](https://github.com/grpc-ecosystem/grpc-gateway/pull/1152) ([johanbrandhorst](https://github.com/johanbrandhorst)) @@ -1357,4 +1390,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Makefile b/Makefile index 60db5e3561c..598d343b4ce 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.3 + --future-release=v1.14.4-rc.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From da18680cd10b7acf76a7175b2b0523fda9fa188c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 1 Apr 2020 10:11:54 +0100 Subject: [PATCH 0291/1518] Generate changelog for 1.14.4-rc.1 --- CHANGELOG.md | 51 ++++++++++++++++++++++++++++++++++++++++++--------- Makefile | 2 +- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 816d64543a3..4710a2dc249 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,66 @@ # Change Log -## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) +## [v1.14.4-rc.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4-rc.1) (2020-04-01) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.3...v1.14.4-rc.1) + +**Implemented enhancements:** + +- proto-gen-\* --version [\#649](https://github.com/grpc-ecosystem/grpc-gateway/issues/649) + +**Closed issues:** + +- protoc-gen-swagger: json\_names\_for\_fields=true does not respect json\_name for \*nested\* path parameters [\#1187](https://github.com/grpc-ecosystem/grpc-gateway/issues/1187) +- protoc-gen-grpc-gateway-ts plugin for generating Typescript types [\#1182](https://github.com/grpc-ecosystem/grpc-gateway/issues/1182) +- protoc-gen-swagger: support outputting enum parameters as integers [\#1177](https://github.com/grpc-ecosystem/grpc-gateway/issues/1177) +- protoc-gen-grpc-gateway should warn or fail if a selector does not exist [\#1175](https://github.com/grpc-ecosystem/grpc-gateway/issues/1175) +- Enum string values not supported by grpc gateway [\#1171](https://github.com/grpc-ecosystem/grpc-gateway/issues/1171) +- Swagger definition is broken if there's no default error response set [\#1162](https://github.com/grpc-ecosystem/grpc-gateway/issues/1162) +- Using golang/protobuf v1.4.0-rc.3 locks up generators [\#1158](https://github.com/grpc-ecosystem/grpc-gateway/issues/1158) **Merged pull requests:** -- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate Swagger with Unique Operation IDs [\#1193](https://github.com/grpc-ecosystem/grpc-gateway/pull/1193) ([dadgar](https://github.com/dadgar)) +- Xin/support deep levels reserved json name [\#1191](https://github.com/grpc-ecosystem/grpc-gateway/pull/1191) ([xin-au](https://github.com/xin-au)) +- feat: add enumAsInts flag [\#1186](https://github.com/grpc-ecosystem/grpc-gateway/pull/1186) ([rowe0x](https://github.com/rowe0x)) +- Use 8088 instead of 8080 in integration test. [\#1184](https://github.com/grpc-ecosystem/grpc-gateway/pull/1184) ([drigz](https://github.com/drigz)) +- Limit Bazel memory usage in CI. [\#1183](https://github.com/grpc-ecosystem/grpc-gateway/pull/1183) ([drigz](https://github.com/drigz)) +- fix version spelling [\#1181](https://github.com/grpc-ecosystem/grpc-gateway/pull/1181) ([seriousben](https://github.com/seriousben)) +- Emit error on HTTP rules without a matching selector and log warning on unbound methods [\#1178](https://github.com/grpc-ecosystem/grpc-gateway/pull/1178) ([andrascz](https://github.com/andrascz)) +- genswagger: don't emit default response if there's no Error definition [\#1166](https://github.com/grpc-ecosystem/grpc-gateway/pull/1166) ([utrack](https://github.com/utrack)) + +## [v1.14.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.3) (2020-03-11) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.2...v1.14.3) **Closed issues:** - Missing httprule breaks our module [\#1168](https://github.com/grpc-ecosystem/grpc-gateway/issues/1168) -## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) - **Merged pull requests:** -- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.14.3 [\#1170](https://github.com/grpc-ecosystem/grpc-gateway/pull/1170) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Move httprule back into the public API [\#1169](https://github.com/grpc-ecosystem/grpc-gateway/pull/1169) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +## [v1.14.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.2) (2020-03-09) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.1...v1.14.2) **Closed issues:** - 1.14.x breaks clay [\#1161](https://github.com/grpc-ecosystem/grpc-gateway/issues/1161) +- Enum string values not supported by grpc gateway [\#1159](https://github.com/grpc-ecosystem/grpc-gateway/issues/1159) +- Path parameters visible in the body of the request [\#1157](https://github.com/grpc-ecosystem/grpc-gateway/issues/1157) +- 1.14.0 breaks existing pipelines [\#1154](https://github.com/grpc-ecosystem/grpc-gateway/issues/1154) + +**Merged pull requests:** + +- Generate changelog for 1.14.2 [\#1164](https://github.com/grpc-ecosystem/grpc-gateway/pull/1164) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Move genswagger to public API again [\#1163](https://github.com/grpc-ecosystem/grpc-gateway/pull/1163) ([johanbrandhorst](https://github.com/johanbrandhorst)) ## [v1.14.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.1) (2020-03-05) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.0...v1.14.1) **Merged pull requests:** -- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1151) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.14.1 [\#1156](https://github.com/grpc-ecosystem/grpc-gateway/pull/1156) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Move generator and descriptor back to public API [\#1155](https://github.com/grpc-ecosystem/grpc-gateway/pull/1155) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Update build environment to 1.14 [\#1153](https://github.com/grpc-ecosystem/grpc-gateway/pull/1153) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add gorelease CI step [\#1152](https://github.com/grpc-ecosystem/grpc-gateway/pull/1152) ([johanbrandhorst](https://github.com/johanbrandhorst)) @@ -1357,4 +1390,4 @@ -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Makefile b/Makefile index 60db5e3561c..598d343b4ce 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.3 + --future-release=v1.14.4-rc.1 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 384f7b89a3985def35a82ac7079e3ba665a4380b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 7 Apr 2020 11:12:05 +0100 Subject: [PATCH 0292/1518] Move codegenerator back to public namespace Fixes #1199 --- {internal/codegenerator => codegenerator}/BUILD.bazel | 2 +- {internal/codegenerator => codegenerator}/doc.go | 0 {internal/codegenerator => codegenerator}/parse_req.go | 0 {internal/codegenerator => codegenerator}/parse_req_test.go | 2 +- protoc-gen-grpc-gateway/BUILD.bazel | 2 +- protoc-gen-grpc-gateway/main.go | 2 +- protoc-gen-swagger/BUILD.bazel | 2 +- protoc-gen-swagger/main.go | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) rename {internal/codegenerator => codegenerator}/BUILD.bazel (88%) rename {internal/codegenerator => codegenerator}/doc.go (100%) rename {internal/codegenerator => codegenerator}/parse_req.go (100%) rename {internal/codegenerator => codegenerator}/parse_req_test.go (95%) diff --git a/internal/codegenerator/BUILD.bazel b/codegenerator/BUILD.bazel similarity index 88% rename from internal/codegenerator/BUILD.bazel rename to codegenerator/BUILD.bazel index 4682f41e46d..5c8ae566cd6 100644 --- a/internal/codegenerator/BUILD.bazel +++ b/codegenerator/BUILD.bazel @@ -8,7 +8,7 @@ go_library( "doc.go", "parse_req.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/codegenerator", deps = [ "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/internal/codegenerator/doc.go b/codegenerator/doc.go similarity index 100% rename from internal/codegenerator/doc.go rename to codegenerator/doc.go diff --git a/internal/codegenerator/parse_req.go b/codegenerator/parse_req.go similarity index 100% rename from internal/codegenerator/parse_req.go rename to codegenerator/parse_req.go diff --git a/internal/codegenerator/parse_req_test.go b/codegenerator/parse_req_test.go similarity index 95% rename from internal/codegenerator/parse_req_test.go rename to codegenerator/parse_req_test.go index c6d439c8047..5f37aad9589 100644 --- a/internal/codegenerator/parse_req_test.go +++ b/codegenerator/parse_req_test.go @@ -10,7 +10,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/codegenerator" ) var parseReqTests = []struct { diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 22f7c363362..48800845031 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -8,7 +8,7 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway", deps = [ - "//internal/codegenerator:go_default_library", + "//codegenerator:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 236ce41fcc7..dec981d4a96 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -17,7 +17,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway" ) diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index 0c823e2741b..d5a1d05fcc7 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -7,7 +7,7 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger", deps = [ - "//internal/codegenerator:go_default_library", + "//codegenerator:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-swagger/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 3e9c6545255..589e3561b94 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -9,7 +9,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger" ) From 782dabfa46c08619fe695cee324849e4875c8669 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 9 Apr 2020 11:16:42 +0100 Subject: [PATCH 0293/1518] Add GopherCon UK link to README --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 79ca1d25d96..acbc2cd76ae 100644 --- a/README.md +++ b/README.md @@ -231,6 +231,15 @@ annotation to your .proto file path/to/your_service.proto ``` +## Video intro + +This GopherCon UK 2019 presentation from our maintainer +[@JohanBrandhorst](https://github.com/johanbrandhorst) provides a good intro to +using the grpc-gateway. It uses the following boilerplate repo as a base: +https://github.com/johanbrandhorst/grpc-gateway-boilerplate. + +[![gRPC-Gateway presentation](https://img.youtube.com/vi/Pq1paKC-fXk/0.jpg)](https://www.youtube.com/watch?v=Pq1paKC-fXk) + ## Parameters and flags During code generation with `protoc`, flags to grpc-gateway tools must be passed From 6b0fe46fad37b6eef2b5c32ded5aed9af08911d6 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 9 Apr 2020 11:22:47 +0100 Subject: [PATCH 0294/1518] Remove use of deprecated bazel variable Lets use HOST_RAM*0.5. Hopefully helps a bit with the flakiness. --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 99bcb24eeec..54756aa2433 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -70,7 +70,8 @@ jobs: build --test_output errors build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 - build --local_resources=3072,2.0,1.0 + # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html + build --local_ram_resources=HOST_RAM*.5 EOF - run: name: Check that Bazel BUILD files are up-to-date From a8e50a240c668ad40f77277bb2264931adb42eac Mon Sep 17 00:00:00 2001 From: adasari <7031002+adasari@users.noreply.github.com> Date: Fri, 17 Apr 2020 13:48:55 +0530 Subject: [PATCH 0295/1518] Add support for response_body in server-side streaming RPCs (#1208) * stream changes * review comment: incorrect port value in fataf message * review comments --- .../internal/clients/responsebody/BUILD.bazel | 2 + .../clients/responsebody/api/swagger.yaml | 75 ++++++++++ .../responsebody/api_response_body_service.go | 99 ++++++++++++++ .../docs/ResponseBodyServiceApi.md | 27 ++++ .../responsebody/docs/RuntimeStreamError.md | 14 ++ .../StreamResultOfExamplepbResponseBodyOut.md | 11 ++ .../model_runtime_stream_error.go | 18 +++ ...m_result_of_examplepb_response_body_out.go | 15 ++ .../internal/integration/integration_test.go | 113 +++++++++++++--- .../examplepb/response_body_service.pb.go | 128 +++++++++++++----- .../examplepb/response_body_service.pb.gw.go | 78 +++++++++++ .../examplepb/response_body_service.proto | 7 + .../response_body_service.swagger.json | 64 +++++++++ examples/internal/server/responsebody.go | 17 +++ .../internal/gengateway/template.go | 9 +- runtime/handler.go | 23 ++-- runtime/handler_test.go | 50 ++++++- 17 files changed, 683 insertions(+), 67 deletions(-) create mode 100644 examples/internal/clients/responsebody/docs/RuntimeStreamError.md create mode 100644 examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md create mode 100644 examples/internal/clients/responsebody/model_runtime_stream_error.go create mode 100644 examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go diff --git a/examples/internal/clients/responsebody/BUILD.bazel b/examples/internal/clients/responsebody/BUILD.bazel index 4b5a31badea..9acc3d60a14 100644 --- a/examples/internal/clients/responsebody/BUILD.bazel +++ b/examples/internal/clients/responsebody/BUILD.bazel @@ -14,6 +14,8 @@ go_library( "model_protobuf_any.go", "model_response_response_type.go", "model_runtime_error.go", + "model_runtime_stream_error.go", + "model_stream_result_of_examplepb_response_body_out.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/responsebody", diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 4a3e595dcce..9a8fd0ea52a 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -30,6 +30,32 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/runtimeError" + /responsebody/stream/{data}: + get: + tags: + - "ResponseBodyService" + operationId: "ResponseBodyService_GetResponseBodyStream" + parameters: + - name: "data" + in: "path" + required: true + type: "string" + x-exportParamName: "Data" + responses: + 200: + description: "(streaming responses)" + schema: + type: "object" + properties: + result: + $ref: "#/definitions/examplepbResponseBodyOutResponse" + error: + $ref: "#/definitions/runtimeStreamError" + title: "Stream result of examplepbResponseBodyOut" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/runtimeError" /responsebody/{data}: get: tags: @@ -175,6 +201,9 @@ definitions: \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" + example: + value: "value" + type_url: "type_url" runtimeError: type: "object" properties: @@ -189,3 +218,49 @@ definitions: type: "array" items: $ref: "#/definitions/protobufAny" + runtimeStreamError: + type: "object" + properties: + grpc_code: + type: "integer" + format: "int32" + http_code: + type: "integer" + format: "int32" + message: + type: "string" + http_status: + type: "string" + details: + type: "array" + items: + $ref: "#/definitions/protobufAny" + example: + http_code: 6 + http_status: "http_status" + details: + - value: "value" + type_url: "type_url" + - value: "value" + type_url: "type_url" + message: "message" + grpc_code: 0 + Stream result of examplepbResponseBodyOut: + properties: + result: + $ref: "#/definitions/examplepbResponseBodyOutResponse" + error: + $ref: "#/definitions/runtimeStreamError" + example: + result: + data: "data" + error: + http_code: 6 + http_status: "http_status" + details: + - value: "value" + type_url: "type_url" + - value: "value" + type_url: "type_url" + message: "message" + grpc_code: 0 diff --git a/examples/internal/clients/responsebody/api_response_body_service.go b/examples/internal/clients/responsebody/api_response_body_service.go index 4a4e2d411a8..968077eb532 100644 --- a/examples/internal/clients/responsebody/api_response_body_service.go +++ b/examples/internal/clients/responsebody/api_response_body_service.go @@ -124,6 +124,105 @@ func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBody(ctx c return localVarReturnValue, localVarHttpResponse, nil } +/* +ResponseBodyServiceApiService + * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param data + +@return StreamResultOfExamplepbResponseBodyOut +*/ +func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBodyStream(ctx context.Context, data string) (StreamResultOfExamplepbResponseBodyOut, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + localVarReturnValue StreamResultOfExamplepbResponseBodyOut + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/responsebody/stream/{data}" + localVarPath = strings.Replace(localVarPath, "{"+"data"+"}", fmt.Sprintf("%v", data), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return localVarReturnValue, localVarHttpResponse, err + } + + localVarBody, err := ioutil.ReadAll(localVarHttpResponse.Body) + localVarHttpResponse.Body.Close() + if err != nil { + return localVarReturnValue, localVarHttpResponse, err + } + + if localVarHttpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err == nil { + return localVarReturnValue, localVarHttpResponse, err + } + } + + if localVarHttpResponse.StatusCode >= 300 { + newErr := GenericSwaggerError{ + body: localVarBody, + error: localVarHttpResponse.Status, + } + + if localVarHttpResponse.StatusCode == 200 { + var v StreamResultOfExamplepbResponseBodyOut + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + if localVarHttpResponse.StatusCode == 0 { + var v RuntimeError + err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHttpResponse, newErr + } + newErr.model = v + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, newErr + } + + return localVarReturnValue, localVarHttpResponse, nil +} + /* ResponseBodyServiceApiService * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). diff --git a/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md b/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md index 480b621c095..852b6c4aaf0 100644 --- a/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md +++ b/examples/internal/clients/responsebody/docs/ResponseBodyServiceApi.md @@ -5,6 +5,7 @@ All URIs are relative to *https://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- [**ResponseBodyServiceGetResponseBody**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBody) | **Get** /responsebody/{data} | +[**ResponseBodyServiceGetResponseBodyStream**](ResponseBodyServiceApi.md#ResponseBodyServiceGetResponseBodyStream) | **Get** /responsebody/stream/{data} | [**ResponseBodyServiceListResponseBodies**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseBodies) | **Get** /responsebodies/{data} | [**ResponseBodyServiceListResponseStrings**](ResponseBodyServiceApi.md#ResponseBodyServiceListResponseStrings) | **Get** /responsestrings/{data} | @@ -35,6 +36,32 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **ResponseBodyServiceGetResponseBodyStream** +> StreamResultOfExamplepbResponseBodyOut ResponseBodyServiceGetResponseBodyStream(ctx, data) + + +### Required Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. + **data** | **string**| | + +### Return type + +[**StreamResultOfExamplepbResponseBodyOut**](Stream result of examplepbResponseBodyOut.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **ResponseBodyServiceListResponseBodies** > []ExamplepbRepeatedResponseBodyOutResponse ResponseBodyServiceListResponseBodies(ctx, data) diff --git a/examples/internal/clients/responsebody/docs/RuntimeStreamError.md b/examples/internal/clients/responsebody/docs/RuntimeStreamError.md new file mode 100644 index 00000000000..efea01ae5cc --- /dev/null +++ b/examples/internal/clients/responsebody/docs/RuntimeStreamError.md @@ -0,0 +1,14 @@ +# RuntimeStreamError + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**GrpcCode** | **int32** | | [optional] [default to null] +**HttpCode** | **int32** | | [optional] [default to null] +**Message** | **string** | | [optional] [default to null] +**HttpStatus** | **string** | | [optional] [default to null] +**Details** | [**[]ProtobufAny**](protobufAny.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md b/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md new file mode 100644 index 00000000000..8cf8014022a --- /dev/null +++ b/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md @@ -0,0 +1,11 @@ +# StreamResultOfExamplepbResponseBodyOut + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Result** | [***ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) | | [optional] [default to null] +**Error_** | [***RuntimeStreamError**](runtimeStreamError.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/internal/clients/responsebody/model_runtime_stream_error.go b/examples/internal/clients/responsebody/model_runtime_stream_error.go new file mode 100644 index 00000000000..d6f45d3c3be --- /dev/null +++ b/examples/internal/clients/responsebody/model_runtime_stream_error.go @@ -0,0 +1,18 @@ +/* + * examples/internal/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +type RuntimeStreamError struct { + GrpcCode int32 `json:"grpc_code,omitempty"` + HttpCode int32 `json:"http_code,omitempty"` + Message string `json:"message,omitempty"` + HttpStatus string `json:"http_status,omitempty"` + Details []ProtobufAny `json:"details,omitempty"` +} diff --git a/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go b/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go new file mode 100644 index 00000000000..4fc188ba216 --- /dev/null +++ b/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go @@ -0,0 +1,15 @@ +/* + * examples/internal/proto/examplepb/response_body_service.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package responsebody + +type StreamResultOfExamplepbResponseBodyOut struct { + Result *ExamplepbResponseBodyOutResponse `json:"result,omitempty"` + Error_ *RuntimeStreamError `json:"error,omitempty"` +} diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 2c569270538..def7703df8e 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1,6 +1,7 @@ package integration_test import ( + "bufio" "bytes" "context" "encoding/base64" @@ -1476,26 +1477,96 @@ func TestResponseBody(t *testing.T) { } func testResponseBody(t *testing.T, port int) { - apiURL := fmt.Sprintf("http://localhost:%d/responsebody/foo", port) - resp, err := http.Get(apiURL) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) - return - } - defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return + tests := []struct { + name string + url string + wantStatus int + wantBody string + }{{ + name: "unary case", + url: "http://localhost:%d/responsebody/foo", + wantStatus: http.StatusOK, + wantBody: `{"data":"foo"}`, + }} + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + apiURL := fmt.Sprintf(tt.url, port) + resp, err := http.Get(apiURL) + if err != nil { + t.Fatalf("http.Get(%q) failed with %v; want success", apiURL, err) + } + + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatalf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + } + + if got, want := resp.StatusCode, tt.wantStatus; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + if got, want := string(buf), tt.wantBody; got != want { + t.Errorf("response = %q; want %q", got, want) + } + }) } +} - if got, want := resp.StatusCode, http.StatusOK; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) +func TestResponseBodyStream(t *testing.T) { + tests := []struct { + name string + url string + wantStatus int + wantBody []string + }{{ + name: "stream case", + url: "http://localhost:%d/responsebody/stream/foo", + wantStatus: http.StatusOK, + wantBody: []string{`{"result":{"data":"first foo"}}`, `{"result":{"data":"second foo"}}`}, + }} + + port := 8088 + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + apiURL := fmt.Sprintf(tt.url, port) + resp, err := http.Get(apiURL) + if err != nil { + t.Fatalf("http.Get(%q) failed with %v; want success", apiURL, err) + } + + defer resp.Body.Close() + body, err := readAll(resp.Body) + if err != nil { + t.Fatalf("readAll(resp.Body) failed with %v; want success", err) + } + + if got, want := resp.StatusCode, tt.wantStatus; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + } + + if !reflect.DeepEqual(tt.wantBody, body) { + t.Errorf("response = %v; want %v", body, tt.wantBody) + } + }) } +} - if got, want := string(buf), `{"data":"foo"}`; got != want { - t.Errorf("response = %q; want %q", got, want) +func readAll(body io.ReadCloser) ([]string, error) { + var b []string + reader := bufio.NewReader(body) + for { + l, err := reader.ReadBytes('\n') + switch { + case err == io.EOF: + return b, nil + case err != nil: + return nil, err + } + + b = append(b, string(bytes.TrimSpace(l))) } } @@ -1526,20 +1597,20 @@ func testResponseBodies(t *testing.T, port int) { func testResponseStrings(t *testing.T, port int) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() + + port = 8087 // Run Secondary server with different marshalling ch := make(chan error) go func() { - if err := runGateway(ctx, ":8081", runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EnumsAsInts: false, EmitDefaults: true})); err != nil { + if err := runGateway(ctx, fmt.Sprintf(":%d", port), runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EnumsAsInts: false, EmitDefaults: true})); err != nil { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() - if err := waitForGateway(ctx, 8081); err != nil { - t.Fatalf("waitForGateway(ctx, 8081) failed with %v; want success", err) + if err := waitForGateway(ctx, uint16(port)); err != nil { + t.Fatalf("waitForGateway(ctx, %d) failed with %v; want success", port, err) } - port = 8081 - for i, spec := range []struct { endpoint string expectedCode int diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 9bfa2cb7932..1d7bb328396 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -313,36 +313,38 @@ func init() { } var fileDescriptor_272b2870183bbe20 = []byte{ - // 451 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0xd4, 0xcf, 0x6a, 0xd4, 0x40, - 0x1c, 0x07, 0x70, 0x27, 0xbb, 0xd6, 0xee, 0x44, 0xda, 0x65, 0x2a, 0x6d, 0x58, 0x44, 0xe2, 0x20, - 0x1a, 0x2f, 0x09, 0xc6, 0x8b, 0x1e, 0x3c, 0x34, 0x17, 0xa9, 0xca, 0x16, 0x52, 0xa5, 0xe0, 0xc1, - 0x32, 0x69, 0x7e, 0x86, 0xc1, 0x38, 0x33, 0x64, 0xa6, 0xd5, 0x20, 0x5e, 0x7c, 0x03, 0xf1, 0x3d, - 0x3c, 0x7a, 0xd0, 0x9b, 0xaf, 0xe0, 0x2b, 0xf8, 0x20, 0xb2, 0xd9, 0x64, 0x88, 0x35, 0x88, 0xb6, - 0x82, 0xa7, 0x9d, 0x7f, 0x7c, 0xe7, 0xc3, 0xfe, 0x7e, 0x13, 0x7c, 0x0f, 0x5e, 0xb3, 0x97, 0xaa, - 0x04, 0x1d, 0x71, 0x61, 0xa0, 0x12, 0xac, 0x8c, 0x54, 0x25, 0x8d, 0x8c, 0xda, 0x75, 0x95, 0x45, - 0x15, 0x68, 0x25, 0x85, 0x86, 0x83, 0x4c, 0xe6, 0xf5, 0x81, 0x86, 0xea, 0x98, 0x1f, 0x42, 0xd8, - 0x9c, 0x22, 0x41, 0x51, 0xa9, 0xc3, 0xb0, 0x60, 0x06, 0x5e, 0xb1, 0x3a, 0xec, 0xb2, 0xc2, 0x2e, - 0x2b, 0xb4, 0x29, 0xb3, 0xcb, 0x85, 0x94, 0x45, 0x09, 0x11, 0x53, 0x3c, 0x62, 0x42, 0x48, 0xc3, - 0x0c, 0x97, 0x42, 0x2f, 0x73, 0xe8, 0x35, 0xbc, 0x96, 0xb6, 0xd7, 0x24, 0x32, 0xaf, 0x77, 0x04, - 0x21, 0x78, 0x9c, 0x33, 0xc3, 0x3c, 0xe4, 0xa3, 0x60, 0x92, 0x36, 0x63, 0xfa, 0x1e, 0xe1, 0xf5, - 0xfe, 0xb1, 0xdd, 0x23, 0x43, 0x9e, 0xe1, 0xd5, 0x0e, 0xe8, 0x39, 0x3e, 0x0a, 0xdc, 0x38, 0x09, - 0xff, 0x14, 0x15, 0x9e, 0x08, 0xb3, 0xf3, 0xd4, 0x66, 0xce, 0xae, 0xe0, 0xd5, 0x6e, 0x75, 0xd0, - 0xf4, 0xd9, 0xc1, 0x5b, 0x29, 0x28, 0x60, 0x06, 0xf2, 0x93, 0xb6, 0xe7, 0x3f, 0xd9, 0x46, 0x81, - 0x1b, 0x3f, 0xf8, 0x1b, 0xdb, 0x60, 0xe8, 0x90, 0xf1, 0x13, 0xfa, 0x3d, 0x92, 0xbc, 0xc0, 0x63, - 0x53, 0x2b, 0xf0, 0x46, 0x3e, 0x0a, 0xd6, 0xe2, 0xfd, 0x7f, 0x87, 0xb0, 0x83, 0xc7, 0xb5, 0x82, - 0xb4, 0xb9, 0x84, 0xde, 0xc4, 0x17, 0xfb, 0xab, 0xc4, 0xc5, 0x17, 0x9e, 0xcc, 0x1f, 0xce, 0x77, - 0xf7, 0xe7, 0xd3, 0x73, 0xe4, 0x3c, 0x46, 0xdb, 0x53, 0xb4, 0xf8, 0x49, 0xa6, 0x0e, 0xbd, 0xf5, - 0xeb, 0x7f, 0xb7, 0x67, 0x2a, 0x2e, 0x0a, 0x4d, 0x36, 0xf1, 0xca, 0x31, 0x2b, 0x8f, 0x40, 0x7b, - 0xc8, 0x1f, 0x05, 0x93, 0xb4, 0x9d, 0xc5, 0x5f, 0xc7, 0x78, 0xa3, 0xaf, 0xd9, 0x5b, 0xf6, 0x23, - 0xf9, 0x88, 0xf0, 0xfa, 0x7d, 0x30, 0xfd, 0x2d, 0x72, 0xe7, 0x74, 0x9d, 0xb0, 0x23, 0x66, 0x77, - 0x4f, 0xdd, 0x43, 0xf4, 0xfa, 0xbb, 0x6f, 0xdf, 0x3f, 0x38, 0x3e, 0xb9, 0x64, 0x1f, 0xce, 0xe2, - 0xdd, 0x44, 0x6f, 0x16, 0x85, 0x78, 0x9b, 0xd9, 0xa2, 0x91, 0x2f, 0x08, 0x93, 0x47, 0x5c, 0xf7, - 0xc5, 0x1c, 0xf4, 0x19, 0xcc, 0xdb, 0x67, 0x2e, 0x2b, 0x0d, 0x1a, 0x3b, 0x25, 0x9b, 0x7d, 0x3b, - 0x07, 0x3d, 0xa8, 0xdf, 0xe8, 0xeb, 0xbb, 0xb2, 0xfd, 0x17, 0x7e, 0x7b, 0x39, 0xbd, 0xd1, 0xf0, - 0xaf, 0x92, 0x2d, 0xcb, 0xd7, 0xcb, 0x9d, 0xce, 0xdf, 0x36, 0x51, 0xe2, 0x3e, 0x9d, 0xd8, 0xb4, - 0x6c, 0xa5, 0xf9, 0x04, 0xdd, 0xfe, 0x11, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x10, 0x29, 0xfa, 0x0b, - 0x05, 0x00, 0x00, + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x94, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xd9, 0xa4, 0x84, 0x66, 0x82, 0xda, 0x68, 0x0a, 0x6d, 0x14, 0x10, 0x32, 0x16, 0xa2, + 0xe6, 0x80, 0x0d, 0xe1, 0x02, 0x07, 0x0e, 0xcd, 0x05, 0x15, 0x50, 0x2a, 0x39, 0xa0, 0x4a, 0x1c, + 0xa8, 0x36, 0xcd, 0x60, 0x59, 0xa4, 0xbb, 0x2b, 0xef, 0xb6, 0x60, 0x21, 0x2e, 0x7d, 0x03, 0xc4, + 0x7b, 0x70, 0xe4, 0x00, 0xe2, 0x29, 0x78, 0x05, 0x1e, 0x04, 0xc5, 0xb1, 0x57, 0x6e, 0x6a, 0x21, + 0x68, 0x91, 0x72, 0xf2, 0xee, 0xec, 0xea, 0x9f, 0x4f, 0xfb, 0xff, 0x63, 0x78, 0x4c, 0xef, 0xf9, + 0x81, 0x9a, 0x90, 0x0e, 0x62, 0x61, 0x28, 0x11, 0x7c, 0x12, 0xa8, 0x44, 0x1a, 0x19, 0xe4, 0x75, + 0x35, 0x0a, 0x12, 0xd2, 0x4a, 0x0a, 0x4d, 0x7b, 0x23, 0x39, 0x4e, 0xf7, 0x34, 0x25, 0x47, 0xf1, + 0x3e, 0xf9, 0xd9, 0x2d, 0xf4, 0xa2, 0x44, 0xed, 0xfb, 0x11, 0x37, 0xf4, 0x8e, 0xa7, 0x7e, 0xa1, + 0xe5, 0x17, 0x5a, 0xbe, 0x55, 0xe9, 0x5e, 0x8f, 0xa4, 0x8c, 0x26, 0x14, 0x70, 0x15, 0x07, 0x5c, + 0x08, 0x69, 0xb8, 0x89, 0xa5, 0xd0, 0x33, 0x1d, 0xf7, 0x16, 0xac, 0x84, 0x79, 0x9b, 0xbe, 0x1c, + 0xa7, 0xdb, 0x02, 0x11, 0x96, 0xc6, 0xdc, 0xf0, 0x0e, 0x73, 0x98, 0xd7, 0x0c, 0xb3, 0xb5, 0xfb, + 0x89, 0xc1, 0x6a, 0xf9, 0xda, 0xce, 0xa1, 0xc1, 0xd7, 0xb0, 0x5c, 0x00, 0x76, 0x6a, 0x0e, 0xf3, + 0x5a, 0xbd, 0xbe, 0xff, 0xb7, 0x50, 0xfe, 0x9c, 0x98, 0xdd, 0x87, 0x56, 0xb3, 0x7b, 0x03, 0x96, + 0x8b, 0x6a, 0x25, 0xd3, 0xb7, 0x1a, 0x6c, 0x84, 0xa4, 0x88, 0x1b, 0x1a, 0xcf, 0xb3, 0xbd, 0x39, + 0xc1, 0x56, 0xf7, 0x5a, 0xbd, 0xa7, 0xff, 0xc2, 0x56, 0x29, 0x5a, 0xc5, 0xf8, 0x95, 0xfd, 0x19, + 0x12, 0xdf, 0xc2, 0x92, 0x49, 0x15, 0x75, 0xea, 0x0e, 0xf3, 0x56, 0x7a, 0xbb, 0xff, 0x0f, 0xc2, + 0x2e, 0x5e, 0xa4, 0x8a, 0xc2, 0xac, 0x89, 0x7b, 0x07, 0x2e, 0x97, 0xab, 0xd8, 0x82, 0x4b, 0x2f, + 0x07, 0xcf, 0x06, 0x3b, 0xbb, 0x83, 0xf6, 0x05, 0xbc, 0x08, 0x6c, 0xab, 0xcd, 0xa6, 0x9f, 0x7e, + 0xbb, 0xe6, 0xde, 0x3f, 0xfd, 0x76, 0x43, 0x93, 0xc4, 0x22, 0xd2, 0xb8, 0x0e, 0x8d, 0x23, 0x3e, + 0x39, 0x24, 0xdd, 0x61, 0x4e, 0xdd, 0x6b, 0x86, 0xf9, 0xae, 0x77, 0xdc, 0x80, 0xb5, 0x32, 0xcd, + 0x70, 0x96, 0x47, 0xfc, 0xc2, 0x60, 0xf5, 0x09, 0x99, 0xf2, 0x11, 0x3e, 0x3c, 0x5b, 0x12, 0xb6, + 0x45, 0xf7, 0xd1, 0x99, 0x33, 0xe4, 0xde, 0x3e, 0xfe, 0xf9, 0xeb, 0x73, 0xcd, 0xc1, 0x2b, 0x76, + 0x70, 0xa6, 0x73, 0x13, 0x7c, 0x98, 0x1a, 0xf1, 0x71, 0x64, 0x4d, 0xc3, 0xef, 0x0c, 0xf0, 0x79, + 0xac, 0xcb, 0xc4, 0x31, 0xe9, 0x73, 0x30, 0x6f, 0x9d, 0xdb, 0x56, 0xd7, 0xcb, 0xd8, 0x5d, 0x5c, + 0x2f, 0xb3, 0xc7, 0xa4, 0x2b, 0xe9, 0xd7, 0xca, 0xf4, 0x85, 0x6d, 0x0b, 0xc1, 0xcf, 0x9b, 0xbb, + 0x9b, 0x19, 0xfe, 0x4d, 0xdc, 0xb0, 0xf8, 0x7a, 0x76, 0x52, 0xf0, 0xe7, 0x21, 0xc2, 0x1f, 0x0c, + 0xae, 0xce, 0x85, 0x65, 0x68, 0x12, 0xe2, 0x07, 0x8b, 0x89, 0xcc, 0xdd, 0x8c, 0x7b, 0x13, 0xaf, + 0x9d, 0x8c, 0x8c, 0xce, 0x90, 0x4e, 0xbd, 0xfd, 0x3d, 0xd6, 0x6f, 0xbd, 0x6a, 0x5a, 0xb5, 0x51, + 0x23, 0xfb, 0x85, 0x3e, 0xf8, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x16, 0xc0, 0x87, 0xdb, 0xcb, 0x05, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -360,6 +362,7 @@ type ResponseBodyServiceClient interface { GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) + GetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (ResponseBodyService_GetResponseBodyStreamClient, error) } type responseBodyServiceClient struct { @@ -397,11 +400,44 @@ func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in return out, nil } +func (c *responseBodyServiceClient) GetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (ResponseBodyService_GetResponseBodyStreamClient, error) { + stream, err := c.cc.NewStream(ctx, &_ResponseBodyService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBodyStream", opts...) + if err != nil { + return nil, err + } + x := &responseBodyServiceGetResponseBodyStreamClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ResponseBodyService_GetResponseBodyStreamClient interface { + Recv() (*ResponseBodyOut, error) + grpc.ClientStream +} + +type responseBodyServiceGetResponseBodyStreamClient struct { + grpc.ClientStream +} + +func (x *responseBodyServiceGetResponseBodyStreamClient) Recv() (*ResponseBodyOut, error) { + m := new(ResponseBodyOut) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // ResponseBodyServiceServer is the server API for ResponseBodyService service. type ResponseBodyServiceServer interface { GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) ListResponseBodies(context.Context, *ResponseBodyIn) (*RepeatedResponseBodyOut, error) ListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error) + GetResponseBodyStream(*ResponseBodyIn, ResponseBodyService_GetResponseBodyStreamServer) error } // UnimplementedResponseBodyServiceServer can be embedded to have forward compatible implementations. @@ -417,6 +453,9 @@ func (*UnimplementedResponseBodyServiceServer) ListResponseBodies(ctx context.Co func (*UnimplementedResponseBodyServiceServer) ListResponseStrings(ctx context.Context, req *ResponseBodyIn) (*RepeatedResponseStrings, error) { return nil, status.Errorf(codes.Unimplemented, "method ListResponseStrings not implemented") } +func (*UnimplementedResponseBodyServiceServer) GetResponseBodyStream(req *ResponseBodyIn, srv ResponseBodyService_GetResponseBodyStreamServer) error { + return status.Errorf(codes.Unimplemented, "method GetResponseBodyStream not implemented") +} func RegisterResponseBodyServiceServer(s *grpc.Server, srv ResponseBodyServiceServer) { s.RegisterService(&_ResponseBodyService_serviceDesc, srv) @@ -476,6 +515,27 @@ func _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _ResponseBodyService_GetResponseBodyStream_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ResponseBodyIn) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ResponseBodyServiceServer).GetResponseBodyStream(m, &responseBodyServiceGetResponseBodyStreamServer{stream}) +} + +type ResponseBodyService_GetResponseBodyStreamServer interface { + Send(*ResponseBodyOut) error + grpc.ServerStream +} + +type responseBodyServiceGetResponseBodyStreamServer struct { + grpc.ServerStream +} + +func (x *responseBodyServiceGetResponseBodyStreamServer) Send(m *ResponseBodyOut) error { + return x.ServerStream.SendMsg(m) +} + var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.examplepb.ResponseBodyService", HandlerType: (*ResponseBodyServiceServer)(nil), @@ -493,6 +553,12 @@ var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ Handler: _ResponseBodyService_ListResponseStrings_Handler, }, }, - Streams: []grpc.StreamDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "GetResponseBodyStream", + Handler: _ResponseBodyService_GetResponseBodyStream_Handler, + ServerStreams: true, + }, + }, Metadata: "examples/internal/proto/examplepb/response_body_service.proto", } diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 558cd0617cf..e07cf396798 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -193,6 +193,41 @@ func local_request_ResponseBodyService_ListResponseStrings_0(ctx context.Context } +func request_ResponseBodyService_GetResponseBodyStream_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (ResponseBodyService_GetResponseBodyStreamClient, runtime.ServerMetadata, error) { + var protoReq ResponseBodyIn + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["data"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "data") + } + + protoReq.Data, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "data", err) + } + + stream, err := client.GetResponseBodyStream(ctx, &protoReq) + if err != nil { + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil + +} + // RegisterResponseBodyServiceHandlerServer registers the http handlers for service ResponseBodyService to "mux". // UnaryRPC :call ResponseBodyServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -258,6 +293,13 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. }) + mux.Handle("GET", pattern_ResponseBodyService_GetResponseBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + }) + return nil } @@ -359,6 +401,29 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. }) + mux.Handle("GET", pattern_ResponseBodyService_GetResponseBodyStream_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ResponseBodyService_GetResponseBodyStream_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ResponseBodyService_GetResponseBodyStream_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { + res, err := resp.Recv() + return response_ResponseBodyService_GetResponseBodyStream_0{res}, err + }, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -389,12 +454,23 @@ func (m response_ResponseBodyService_ListResponseStrings_0) XXX_ResponseBody() i return response.Values } +type response_ResponseBodyService_GetResponseBodyStream_0 struct { + proto.Message +} + +func (m response_ResponseBodyService_GetResponseBodyStream_0) XXX_ResponseBody() interface{} { + response := m.Message.(*ResponseBodyOut) + return response.Response +} + var ( pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ResponseBodyService_GetResponseBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"responsebody", "stream", "data"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -403,4 +479,6 @@ var ( forward_ResponseBodyService_ListResponseBodies_0 = runtime.ForwardResponseMessage forward_ResponseBodyService_ListResponseStrings_0 = runtime.ForwardResponseMessage + + forward_ResponseBodyService_GetResponseBodyStream_0 = runtime.ForwardResponseStream ) diff --git a/examples/internal/proto/examplepb/response_body_service.proto b/examples/internal/proto/examplepb/response_body_service.proto index 2a04e786e95..a1081d55713 100644 --- a/examples/internal/proto/examplepb/response_body_service.proto +++ b/examples/internal/proto/examplepb/response_body_service.proto @@ -55,4 +55,11 @@ service ResponseBodyService { response_body : "values" }; } + + rpc GetResponseBodyStream(ResponseBodyIn) returns (stream ResponseBodyOut) { + option (google.api.http) = { + get : "/responsebody/stream/{data}" + response_body : "response" + }; + } } diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 11143187def..1fad10c2042 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -44,6 +44,45 @@ ] } }, + "/responsebody/stream/{data}": { + "get": { + "operationId": "ResponseBodyService_GetResponseBodyStream", + "responses": { + "200": { + "description": "(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/examplepbResponseBodyOutResponse" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of examplepbResponseBodyOut" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "data", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "ResponseBodyService" + ] + } + }, "/responsebody/{data}": { "get": { "operationId": "ResponseBodyService_GetResponseBody", @@ -203,6 +242,31 @@ } } } + }, + "runtimeStreamError": { + "type": "object", + "properties": { + "grpc_code": { + "type": "integer", + "format": "int32" + }, + "http_code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "http_status": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } } } } diff --git a/examples/internal/server/responsebody.go b/examples/internal/server/responsebody.go index 8df32ede5fa..60fe1ac344a 100644 --- a/examples/internal/server/responsebody.go +++ b/examples/internal/server/responsebody.go @@ -2,6 +2,7 @@ package server import ( "context" + "fmt" examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" ) @@ -42,3 +43,19 @@ func (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examp Values: []string{"hello", req.Data}, }, nil } + +func (s *responseBodyServer) GetResponseBodyStream(req *examples.ResponseBodyIn, stream examples.ResponseBodyService_GetResponseBodyStreamServer) error { + if err := stream.Send(&examples.ResponseBodyOut{ + Response: &examples.ResponseBodyOut_Response{ + Data: fmt.Sprintf("first %s", req.Data), + }, + }); err != nil { + return err + } + + return stream.Send(&examples.ResponseBodyOut{ + Response: &examples.ResponseBodyOut_Response{ + Data: fmt.Sprintf("second %s", req.Data), + }, + }) +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 1d3d3ca8f19..6dd5fcf5968 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -667,7 +667,14 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, return } {{if $m.GetServerStreaming}} + {{ if $b.ResponseBody }} + forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { + res, err := resp.Recv() + return response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{res}, err + }, mux.GetForwardResponseOptions()...) + {{ else }} forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + {{end}} {{else}} {{ if $b.ResponseBody }} forward_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}(ctx, mux, outboundMarshaler, w, req, response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}{resp}, mux.GetForwardResponseOptions()...) @@ -712,4 +719,4 @@ var ( {{end}} ) {{end}}`)) -) +) \ No newline at end of file diff --git a/runtime/handler.go b/runtime/handler.go index b894da86bf8..2c62382ef08 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -61,7 +61,19 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal return } - buf, err := marshaler.Marshal(streamChunk(ctx, resp, mux.streamErrorHandler)) + var buf []byte + switch { + case resp == nil: + buf, err = marshaler.Marshal(errorChunk(streamError(ctx, mux.streamErrorHandler, errEmptyResponse))) + default: + result := map[string]interface{}{"result": resp} + if rb, ok := resp.(responseBody); ok { + result["result"] = rb.XXX_ResponseBody() + } + + buf, err = marshaler.Marshal(result) + } + if err != nil { grpclog.Infof("Failed to marshal response chunk: %v", err) handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err) @@ -184,15 +196,6 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar } } -// streamChunk returns a chunk in a response stream for the given result. The -// given errHandler is used to render an error chunk if result is nil. -func streamChunk(ctx context.Context, result proto.Message, errHandler StreamErrorHandlerFunc) map[string]proto.Message { - if result == nil { - return errorChunk(streamError(ctx, errHandler, errEmptyResponse)) - } - return map[string]proto.Message{"result": result} -} - // streamError returns the payload for the final message in a response stream // that represents the given err. func streamError(ctx context.Context, errHandler StreamErrorHandlerFunc, err error) *StreamError { diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 912cb3acfa5..ea369add028 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -17,15 +17,26 @@ import ( "google.golang.org/grpc/status" ) +type fakeReponseBodyWrapper struct { + proto.Message +} + +// XXX_ResponseBody returns id of SimpleMessage +func (r fakeReponseBodyWrapper) XXX_ResponseBody() interface{} { + resp := r.Message.(*pb.SimpleMessage) + return resp.Id +} + func TestForwardResponseStream(t *testing.T) { type msg struct { pb proto.Message err error } tests := []struct { - name string - msgs []msg - statusCode int + name string + msgs []msg + statusCode int + responseBody bool }{{ name: "encoding", msgs: []msg{ @@ -47,6 +58,22 @@ func TestForwardResponseStream(t *testing.T) { {nil, grpc.Errorf(codes.OutOfRange, "400")}, }, statusCode: http.StatusOK, + }, { + name: "response body stream case", + msgs: []msg{ + {fakeReponseBodyWrapper{&pb.SimpleMessage{Id: "One"}}, nil}, + {fakeReponseBodyWrapper{&pb.SimpleMessage{Id: "Two"}}, nil}, + }, + responseBody: true, + statusCode: http.StatusOK, + }, { + name: "response body stream error case", + msgs: []msg{ + {fakeReponseBodyWrapper{&pb.SimpleMessage{Id: "One"}}, nil}, + {nil, grpc.Errorf(codes.OutOfRange, "400")}, + }, + responseBody: true, + statusCode: http.StatusOK, }} newTestRecv := func(t *testing.T, msgs []msg) func() (proto.Message, error) { @@ -113,7 +140,22 @@ func TestForwardResponseStream(t *testing.T) { return } - b, err := marshaler.Marshal(map[string]proto.Message{"result": msg.pb}) + + var b []byte + + if tt.responseBody { + // responseBody interface is in runtime package and test is in runtime_test package. hence can't use responseBody directly + // So type casting to fakeReponseBodyWrapper struct to verify the data. + rb, ok := msg.pb.(fakeReponseBodyWrapper) + if !ok { + t.Errorf("stream responseBody failed %v", err) + } + + b, err = marshaler.Marshal(map[string]interface{}{"result": rb.XXX_ResponseBody()}) + } else { + b, err = marshaler.Marshal(map[string]interface{}{"result": msg.pb}) + } + if err != nil { t.Errorf("marshaler.Marshal() failed %v", err) } From 6f219fa3dfc57ec13ab6fcd94757f345a05dad26 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 16:08:22 +0100 Subject: [PATCH 0296/1518] Add option to disable new operationID generation The new generation model, while correct, was causing friction with some users. Add a flag to re-enable the old behaviour. --- protoc-gen-grpc-gateway/descriptor/registry.go | 14 ++++++++++++++ protoc-gen-swagger/genswagger/template.go | 10 ++++++---- protoc-gen-swagger/main.go | 2 ++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index 07b9f47b59c..a96a0edb575 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -82,6 +82,10 @@ type Registry struct { // disableDefaultErrors disables the generation of the default error types. // This is useful for users who have defined custom error handling. disableDefaultErrors bool + + // simpleOperationIDs removes the service prefix from the generated + // operationIDs. This risks generating duplicate operationIDs. + simpleOperationIDs bool } type repeatedFieldSeparator struct { @@ -510,6 +514,16 @@ func (r *Registry) GetDisableDefaultErrors() bool { return r.disableDefaultErrors } +// SetSimpleOperationIDs sets simpleOperationIDs +func (r *Registry) SetSimpleOperationIDs(use bool) { + r.simpleOperationIDs = use +} + +// GetSimpleOperationIDs returns simpleOperationIDs +func (r *Registry) GetSimpleOperationIDs() bool { + return r.simpleOperationIDs +} + // sanitizePackageName replaces unallowed character in package name // with allowed character. func sanitizePackageName(pkgName string) string { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 77c99feac55..7396d8e23ab 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -977,11 +977,13 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } } } - if bIdx == 0 { - operationObject.OperationID = fmt.Sprintf("%s_%s", svc.GetName(), meth.GetName()) - } else { + operationObject.OperationID = fmt.Sprintf("%s_%s", svc.GetName(), meth.GetName()) + if reg.GetSimpleOperationIDs() { + operationObject.OperationID = fmt.Sprintf("%s", meth.GetName()) + } + if bIdx != 0 { // OperationID must be unique in an OpenAPI v2 definition. - operationObject.OperationID = fmt.Sprintf("%s_%s%d", svc.GetName(), meth.GetName(), bIdx+1) + operationObject.OperationID += strconv.Itoa(bIdx + 1) } // Fill reference map with referenced request messages diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 589e3561b94..bc13469f034 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -30,6 +30,7 @@ var ( useGoTemplate = flag.Bool("use_go_templates", false, "if set, you can use Go templates in protofile comments") disableDefaultErrors = flag.Bool("disable_default_errors", false, "if set, disables generation of default errors. This is useful if you have defined custom error handling") enumsAsInts = flag.Bool("enums_as_ints", false, "whether to render enum values as integers, as opposed to string values") + simpleOperationIDs = flag.Bool("simple_operation_ids", false, "whether to remove the service prefix in the operationID generation. Can introduce duplicate operationIDs, use with caution.") ) // Variables set by goreleaser at build time @@ -84,6 +85,7 @@ func main() { reg.SetUseGoTemplate(*useGoTemplate) reg.SetEnumsAsInts(*enumsAsInts) reg.SetDisableDefaultErrors(*disableDefaultErrors) + reg.SetSimpleOperationIDs(*simpleOperationIDs) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return From 1cc22eef396c172422972977985a34304bae5a54 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 16:20:18 +0100 Subject: [PATCH 0297/1518] Generate changelog for 1.14.4 --- CHANGELOG.md | 22 ++++++++++++++++++++++ Makefile | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4710a2dc249..86f5223ef93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## [v1.14.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4) (2020-04-18) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.4-rc.1...v1.14.4) + +**Closed issues:** + +- custom unmarshal response error [\#1211](https://github.com/grpc-ecosystem/grpc-gateway/issues/1211) +- api annotation placeholder character case [\#1207](https://github.com/grpc-ecosystem/grpc-gateway/issues/1207) +- response\_body of http rule is ignored in case of server streaming [\#1202](https://github.com/grpc-ecosystem/grpc-gateway/issues/1202) +- Go gRPC Gateway - Type of one field in JSON is not same as in proto [\#1201](https://github.com/grpc-ecosystem/grpc-gateway/issues/1201) +- 1.14 breaks protoc-gen-go-json [\#1199](https://github.com/grpc-ecosystem/grpc-gateway/issues/1199) +- Use different field name in gateway [\#1197](https://github.com/grpc-ecosystem/grpc-gateway/issues/1197) +- No longer generate register...Server function in pb.gw.go? [\#1195](https://github.com/grpc-ecosystem/grpc-gateway/issues/1195) +- Support for source\_relative argument [\#1180](https://github.com/grpc-ecosystem/grpc-gateway/issues/1180) + +**Merged pull requests:** + +- Add option to disable new operationID generation [\#1216](https://github.com/grpc-ecosystem/grpc-gateway/pull/1216) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- http rule's response\_body support to stream rpc [\#1208](https://github.com/grpc-ecosystem/grpc-gateway/pull/1208) ([adasari](https://github.com/adasari)) +- Add GopherCon UK link to README [\#1204](https://github.com/grpc-ecosystem/grpc-gateway/pull/1204) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Move codegenerator back to public namespace [\#1200](https://github.com/grpc-ecosystem/grpc-gateway/pull/1200) ([johanbrandhorst](https://github.com/johanbrandhorst)) + ## [v1.14.4-rc.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4-rc.1) (2020-04-01) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.3...v1.14.4-rc.1) @@ -19,6 +40,7 @@ **Merged pull requests:** +- Generate changelog for 1.14.4-rc.1 [\#1194](https://github.com/grpc-ecosystem/grpc-gateway/pull/1194) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Generate Swagger with Unique Operation IDs [\#1193](https://github.com/grpc-ecosystem/grpc-gateway/pull/1193) ([dadgar](https://github.com/dadgar)) - Xin/support deep levels reserved json name [\#1191](https://github.com/grpc-ecosystem/grpc-gateway/pull/1191) ([xin-au](https://github.com/xin-au)) - feat: add enumAsInts flag [\#1186](https://github.com/grpc-ecosystem/grpc-gateway/pull/1186) ([rowe0x](https://github.com/rowe0x)) diff --git a/Makefile b/Makefile index 598d343b4ce..09222f9aaea 100644 --- a/Makefile +++ b/Makefile @@ -210,7 +210,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.4-rc.1 + --future-release=v1.14.4 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 9d6483fded2b8a1b74a8bf56b4fbf2810b39b7c5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 12:11:17 +0100 Subject: [PATCH 0298/1518] Add release guide to CONTRIBUTING.md --- CONTRIBUTING.md | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5fde7c282f4..b2112b53621 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,14 +4,14 @@ Thank you for your contribution to grpc-gateway. Here's the recommended process of contribution. 1. `go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway` -2. `cd $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway` -3. hack, hack, hack... -4. Make sure that your change follows best practices in Go +1. `cd $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway` +1. hack, hack, hack... +1. Make sure that your change follows best practices in Go - [Effective Go](https://golang.org/doc/effective_go.html) - [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) -5. Make sure that `go test ./...` passes. -6. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) -7. Open a pull request in Github +1. Make sure that `go test ./...` passes. +1. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) +1. Open a pull request in Github When you work on a larger contribution, it is also recommended that you get in touch with us through the issue tracker. @@ -36,3 +36,22 @@ docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --r ``` If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. + +### Making a release + +To make a release, follow these steps: + +1. Decide on a release version. The `gorelease` job can + recommend whether the new release should be a patch or minor release. + See [CircleCI](https://app.circleci.com/pipelines/github/grpc-ecosystem/grpc-gateway/126/workflows/255a8a04-de9c-46a9-a66b-f107d2b39439/jobs/6428) + for an example. +1. Generate a Github token with `repo` access. +1. Create a new branch and edit the Makefile `changelog` job, settings + the `future-release=` variable to the name of the version you plan to release +1. Run `CHANGELOG_GITHUB_TOKEN= make changelog` +1. Commit the `Makefile` and `CHANGELOG.md` changes. +1. Open a PR and check that everything looks right. +1. Merge the PR. +1. Tag the release on `master`, the tag should be made against the commit you just merged. +1. (Optional) Delete your Github token again. +1. (Required) Sit back and pat yourself on the back for a job well done :clap:. From f0ca341f390719df0f419041e76026fffea252df Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 12:12:15 +0100 Subject: [PATCH 0299/1518] Improve generation README docs Use paths=source_relative in README Probably the most useful feature of protoc-gen-go, it's also supported by the gateway generator, so lets add it to the example. Update generation guide Instead of using the GOPATH to import the third_party folder, recommend the use of of a protobuf source tree with the dependencies copied in. --- README.md | 60 +++++++++++++++++++++---------------------------------- 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index acbc2cd76ae..fa18d4021a8 100644 --- a/README.md +++ b/README.md @@ -125,35 +125,29 @@ annotation to your .proto file 3. Generate gRPC stub - The following generates gRPC code for Golang based on `path/to/your_service.proto`: - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --go_out=plugins=grpc:. \ - path/to/your_service.proto - ``` + You will need to provide the required third party protobuf files to the `protoc` compiler. + They are included in this repo under the `third_party/googleapis` folder, and we recommend copying + them into your `protoc` generation file structure. If you've structured your protofiles according + to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), + you could copy the files into a top-level `./google` folder. + + Here is an example of what a `protoc` command might look like: - It will generate a stub file `path/to/your_service.pb.go`. + ```sh + protoc -I. --go_out=plugins=grpc,paths=source_relative:./gen/go/ your/service/v1/your_service.proto + ``` + + It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`. 4. Implement your service in gRPC as usual 1. (Optional) Generate gRPC stub in the [other programming languages](https://grpc.io/docs/). - For example, the following generates gRPC code for Ruby based on `path/to/your_service.proto`: + For example, the following generates gRPC code for Ruby based on `your/service/v1/your_service.proto`: ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --ruby_out=. \ - path/to/your_service.proto - - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --plugin=protoc-gen-grpc=grpc_ruby_plugin \ - --grpc-ruby_out=. \ - path/to/your_service.proto + protoc -I. --ruby_out=./gen/ruby your/service/v1/your_service.proto + + protoc -I. --grpc-ruby_out=./gen/ruby your/service/v1/your_service.proto ``` 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. 3. Implement your gRPC service stubs @@ -161,14 +155,11 @@ annotation to your .proto file 5. Generate reverse-proxy using `protoc-gen-grpc-gateway` ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --grpc-gateway_out=logtostderr=true:. \ - path/to/your_service.proto + protoc -I. --grpc-gateway_out=logtostderr=true,paths=source_relative:./gen/go \ + your/service/v1/your_service.proto ``` - It will generate a reverse proxy `path/to/your_service.pb.gw.go`. + It will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go`. 6. Write an entrypoint for the HTTP reverse-proxy server @@ -176,7 +167,7 @@ annotation to your .proto file package main import ( - "context" // Use "golang.org/x/net/context" for Golang version <= 1.6 + "context" "flag" "net/http" @@ -184,7 +175,7 @@ annotation to your .proto file "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc" - gw "path/to/your_service_package" // Update + gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update ) var ( @@ -224,11 +215,7 @@ annotation to your .proto file 7. (Optional) Generate swagger definitions using `protoc-gen-swagger` ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --swagger_out=logtostderr=true:. \ - path/to/your_service.proto + protoc -I. --swagger_out=logtostderr=true:./gen/swagger your/service/v1/your_service.proto ``` ## Video intro @@ -253,8 +240,7 @@ example: `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import paths. They are compatible to -[the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters) -(except `source_relative`). +[the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). This parameter can be From 55d35778bedc15a61343cc76249516c433084eb4 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 12:12:43 +0100 Subject: [PATCH 0300/1518] Update some of the docs links --- docs/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/index.md b/docs/index.md index 57b23e1add0..7fe31f4cac7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,10 +2,10 @@ [![CircleCI](https://circleci.com/gh/grpc-ecosystem/grpc-gateway.svg?style=svg)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) -grpc-gateway is a plugin of [protoc](http://github.com/google/protobuf). -It reads [gRPC](http://github.com/grpc/grpc-common) service definition, +grpc-gateway is a plugin of [protoc](https://github.com/protocolbuffers/protobuf). +It reads a [gRPC](https://grpc.io) service definition, and generates a reverse-proxy server which translates a RESTful JSON API into gRPC. -This server is generated according to [custom options](https://cloud.google.com/service-management/reference/rpc/google.api#http) in your gRPC definition. +This server is generated according to [custom options](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.api#http) in your gRPC definition. It helps you to provide your APIs in both gRPC and RESTful style at the same time. From 60e90044b879224f99fb6309c96e923a9a8fd12c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 13:58:38 +0100 Subject: [PATCH 0301/1518] Create v2 branch and module --- BUILD | 2 +- Makefile | 2 +- README.md | 12 +-- codegenerator/BUILD.bazel | 2 +- codegenerator/parse_req_test.go | 2 +- examples/internal/README.md | 2 +- examples/internal/browser/gulpfile.js | 4 +- examples/internal/clients/abe/BUILD.bazel | 2 +- examples/internal/clients/abe/enum_helper.go | 6 +- examples/internal/clients/echo/BUILD.bazel | 2 +- .../internal/clients/responsebody/BUILD.bazel | 2 +- .../clients/unannotatedecho/BUILD.bazel | 2 +- .../cmd/example-gateway-server/BUILD.bazel | 2 +- .../cmd/example-gateway-server/main.go | 2 +- .../cmd/example-grpc-server/BUILD.bazel | 2 +- .../internal/cmd/example-grpc-server/main.go | 2 +- examples/internal/gateway/BUILD.bazel | 2 +- examples/internal/gateway/gateway.go | 4 +- examples/internal/gateway/main.go | 2 +- examples/internal/helloworld/BUILD.bazel | 4 +- .../internal/helloworld/helloworld.pb.gw.go | 4 +- examples/internal/integration/client_test.go | 6 +- .../internal/integration/fieldmask_test.go | 4 +- .../internal/integration/integration_test.go | 8 +- examples/internal/integration/main_test.go | 6 +- .../internal/integration/proto_error_test.go | 2 +- examples/internal/proto/examplepb/BUILD.bazel | 4 +- .../proto/examplepb/a_bit_of_everything.pb.go | 8 +- .../examplepb/a_bit_of_everything.pb.gw.go | 10 +- .../proto/examplepb/echo_service.pb.gw.go | 4 +- .../proto/examplepb/flow_combination.pb.gw.go | 4 +- .../examplepb/non_standard_names.pb.gw.go | 4 +- .../examplepb/response_body_service.pb.gw.go | 4 +- .../internal/proto/examplepb/stream.pb.go | 2 +- .../internal/proto/examplepb/stream.pb.gw.go | 6 +- .../unannotated_echo_service.pb.gw.go | 4 +- .../proto/examplepb/use_go_template.pb.gw.go | 4 +- .../proto/examplepb/wrappers.pb.gw.go | 4 +- examples/internal/proto/pathenum/BUILD.bazel | 4 +- .../internal/proto/pathenum/path_enum.pb.go | 8 +- .../internal/proto/pathenum/path_enum.proto | 2 +- examples/internal/proto/sub/BUILD.bazel | 4 +- examples/internal/proto/sub2/BUILD.bazel | 4 +- examples/internal/proto/sub2/message.pb.go | 8 +- examples/internal/proto/sub2/message.proto | 2 +- examples/internal/server/BUILD.bazel | 2 +- .../internal/server/a_bit_of_everything.go | 6 +- examples/internal/server/echo.go | 2 +- examples/internal/server/flow_combination.go | 2 +- examples/internal/server/main.go | 2 +- .../internal/server/non_standard_names.go | 2 +- examples/internal/server/responsebody.go | 2 +- examples/internal/server/unannotatedecho.go | 2 +- go.mod | 2 +- internal/BUILD.bazel | 4 +- protoc-gen-grpc-gateway/BUILD.bazel | 2 +- .../descriptor/BUILD.bazel | 2 +- .../descriptor/services.go | 2 +- .../descriptor/services_test.go | 2 +- protoc-gen-grpc-gateway/descriptor/types.go | 2 +- protoc-gen-grpc-gateway/generator/BUILD.bazel | 2 +- .../generator/generator.go | 2 +- protoc-gen-grpc-gateway/httprule/BUILD.bazel | 2 +- protoc-gen-grpc-gateway/httprule/compile.go | 2 +- .../httprule/compile_test.go | 2 +- .../internal/gengateway/BUILD.bazel | 2 +- .../internal/gengateway/generator.go | 8 +- .../internal/gengateway/generator_test.go | 2 +- .../internal/gengateway/template.go | 6 +- .../internal/gengateway/template_test.go | 4 +- protoc-gen-grpc-gateway/main.go | 6 +- protoc-gen-swagger/BUILD.bazel | 2 +- protoc-gen-swagger/genswagger/BUILD.bazel | 2 +- protoc-gen-swagger/genswagger/generator.go | 8 +- protoc-gen-swagger/genswagger/template.go | 4 +- .../genswagger/template_test.go | 6 +- protoc-gen-swagger/genswagger/types.go | 2 +- protoc-gen-swagger/main.go | 6 +- protoc-gen-swagger/options/BUILD.bazel | 4 +- protoc-gen-swagger/options/annotations.pb.go | 44 ++++----- protoc-gen-swagger/options/annotations.proto | 2 +- protoc-gen-swagger/options/openapiv2.pb.go | 96 +++++++++---------- protoc-gen-swagger/options/openapiv2.proto | 2 +- runtime/BUILD.bazel | 2 +- runtime/context_test.go | 2 +- runtime/convert_test.go | 2 +- runtime/errors.go | 2 +- runtime/errors_test.go | 2 +- runtime/handler.go | 2 +- runtime/handler_test.go | 6 +- runtime/internal/examplepb/BUILD.bazel | 4 +- runtime/marshal_httpbodyproto_test.go | 2 +- runtime/marshal_json_test.go | 4 +- runtime/marshal_jsonpb_test.go | 4 +- runtime/marshal_proto_test.go | 4 +- runtime/marshaler_registry_test.go | 2 +- runtime/mux_test.go | 4 +- runtime/pattern.go | 2 +- runtime/pattern_test.go | 2 +- runtime/proto_errors.go | 2 +- runtime/query.go | 2 +- runtime/query_test.go | 4 +- utilities/BUILD.bazel | 2 +- utilities/trie_test.go | 2 +- 104 files changed, 245 insertions(+), 245 deletions(-) diff --git a/BUILD b/BUILD index 08af40b556e..f649e124b47 100644 --- a/BUILD +++ b/BUILD @@ -13,7 +13,7 @@ buildifier( # gazelle:exclude third_party # gazelle:exclude vendor # gazelle:exclude _output -# gazelle:prefix github.com/grpc-ecosystem/grpc-gateway +# gazelle:prefix github.com/grpc-ecosystem/grpc-gateway/v2 gazelle(name = "gazelle") diff --git a/Makefile b/Makefile index 09222f9aaea..f0701b1992f 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) -PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/internal/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub +PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/internal/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub ADDITIONAL_GW_FLAGS= ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) diff --git a/README.md b/README.md index fa18d4021a8..16a120a299a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # grpc-gateway -[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![fuzzit](https://app.fuzzit.dev/badge?org_id=grpc-gateway)](https://app.fuzzit.dev/orgs/grpc-gateway/dashboard) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/master.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) +[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![fuzzit](https://app.fuzzit.dev/badge?org_id=grpc-gateway)](https://app.fuzzit.dev/orgs/grpc-gateway/dashboard) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). @@ -48,8 +48,8 @@ to track the versions of the following executable packages: package tools import ( - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger" _ "github.com/golang/protobuf/protoc-gen-go" ) ``` @@ -58,8 +58,8 @@ Run `go mod tidy` to resolve the versions. Install by running ```sh $ go install \ - github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway \ - github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger \ + github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \ + github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger \ github.com/golang/protobuf/protoc-gen-go ``` @@ -172,7 +172,7 @@ annotation to your .proto file "net/http" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update diff --git a/codegenerator/BUILD.bazel b/codegenerator/BUILD.bazel index 5c8ae566cd6..d9145264d63 100644 --- a/codegenerator/BUILD.bazel +++ b/codegenerator/BUILD.bazel @@ -8,7 +8,7 @@ go_library( "doc.go", "parse_req.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/codegenerator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator", deps = [ "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/codegenerator/parse_req_test.go b/codegenerator/parse_req_test.go index 5f37aad9589..fbcdb8b7bf9 100644 --- a/codegenerator/parse_req_test.go +++ b/codegenerator/parse_req_test.go @@ -10,7 +10,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" ) var parseReqTests = []struct { diff --git a/examples/internal/README.md b/examples/internal/README.md index 26d568c8a34..4a5039afc1a 100644 --- a/examples/internal/README.md +++ b/examples/internal/README.md @@ -8,7 +8,7 @@ $ dep init Follow the guides from this [README.md](./browser/README.md) to run the server and gateway. ```bash # Make sure you are in the correct directory: -# $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/examples +# $GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/v2/examples $ cd examples/internal/browser $ pwd diff --git a/examples/internal/browser/gulpfile.js b/examples/internal/browser/gulpfile.js index a0a2411525d..f1e03e5d9fa 100644 --- a/examples/internal/browser/gulpfile.js +++ b/examples/internal/browser/gulpfile.js @@ -16,11 +16,11 @@ gulp.task('bower', function () { }); gulp.task('server', shell.task([ - 'go build -o bin/example-server github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-grpc-server', + 'go build -o bin/example-server github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-grpc-server', ])); gulp.task('gateway', shell.task([ - 'go build -o bin/example-gw github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-gateway-server', + 'go build -o bin/example-gw github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-gateway-server', ])); gulp.task('serve-server', ['server'], function () { diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 9c1bfc9ce2b..9c2e6553c11 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -26,7 +26,7 @@ go_library( "model_sub_string_message.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/abe", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe", deps = [ "//examples/internal/proto/examplepb:go_default_library", "//examples/internal/proto/pathenum:go_default_library", diff --git a/examples/internal/clients/abe/enum_helper.go b/examples/internal/clients/abe/enum_helper.go index 01a68b848dd..bf5724d5365 100644 --- a/examples/internal/clients/abe/enum_helper.go +++ b/examples/internal/clients/abe/enum_helper.go @@ -1,9 +1,9 @@ package abe import ( - pbexamplepb "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" - pbpathenum "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + pbexamplepb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + pbpathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) // String returns a string representation of "NumericEnum" diff --git a/examples/internal/clients/echo/BUILD.bazel b/examples/internal/clients/echo/BUILD.bazel index 9f4aaa27eca..7fd6b4f37b8 100644 --- a/examples/internal/clients/echo/BUILD.bazel +++ b/examples/internal/clients/echo/BUILD.bazel @@ -14,7 +14,7 @@ go_library( "model_runtime_error.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/echo", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo", deps = [ "@com_github_antihax_optional//:go_default_library", "@org_golang_x_oauth2//:go_default_library", diff --git a/examples/internal/clients/responsebody/BUILD.bazel b/examples/internal/clients/responsebody/BUILD.bazel index 9acc3d60a14..911f72d0ffd 100644 --- a/examples/internal/clients/responsebody/BUILD.bazel +++ b/examples/internal/clients/responsebody/BUILD.bazel @@ -18,7 +18,7 @@ go_library( "model_stream_result_of_examplepb_response_body_out.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/responsebody", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/responsebody", visibility = ["//visibility:public"], deps = ["@org_golang_x_oauth2//:go_default_library"], ) diff --git a/examples/internal/clients/unannotatedecho/BUILD.bazel b/examples/internal/clients/unannotatedecho/BUILD.bazel index 95d9d6b3b67..f53c37cc1a8 100644 --- a/examples/internal/clients/unannotatedecho/BUILD.bazel +++ b/examples/internal/clients/unannotatedecho/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "model_runtime_error.go", "response.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/unannotatedecho", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho", deps = [ "@com_github_antihax_optional//:go_default_library", "@org_golang_x_oauth2//:go_default_library", diff --git a/examples/internal/cmd/example-gateway-server/BUILD.bazel b/examples/internal/cmd/example-gateway-server/BUILD.bazel index 324b14b8351..a111605039b 100644 --- a/examples/internal/cmd/example-gateway-server/BUILD.bazel +++ b/examples/internal/cmd/example-gateway-server/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-gateway-server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-gateway-server", visibility = ["//visibility:private"], deps = [ "//examples/internal/gateway:go_default_library", diff --git a/examples/internal/cmd/example-gateway-server/main.go b/examples/internal/cmd/example-gateway-server/main.go index ba10f1b9e5b..c12065589ec 100644 --- a/examples/internal/cmd/example-gateway-server/main.go +++ b/examples/internal/cmd/example-gateway-server/main.go @@ -9,7 +9,7 @@ import ( "flag" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway" ) var ( diff --git a/examples/internal/cmd/example-grpc-server/BUILD.bazel b/examples/internal/cmd/example-grpc-server/BUILD.bazel index 925cb981256..6f19a9bd106 100644 --- a/examples/internal/cmd/example-grpc-server/BUILD.bazel +++ b/examples/internal/cmd/example-grpc-server/BUILD.bazel @@ -5,7 +5,7 @@ package(default_visibility = ["//visibility:private"]) go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/cmd/example-grpc-server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/cmd/example-grpc-server", deps = [ "//examples/internal/server:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/examples/internal/cmd/example-grpc-server/main.go b/examples/internal/cmd/example-grpc-server/main.go index 1e44a161536..72819588836 100644 --- a/examples/internal/cmd/example-grpc-server/main.go +++ b/examples/internal/cmd/example-grpc-server/main.go @@ -9,7 +9,7 @@ import ( "flag" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server" ) var ( diff --git a/examples/internal/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel index f9c1e8a9ede..edfa9a69cbe 100644 --- a/examples/internal/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -8,7 +8,7 @@ go_library( "handlers.go", "main.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway", visibility = ["//visibility:public"], deps = [ "//examples/internal/proto/examplepb:go_default_library", diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index e85fb4219b4..e42b07d5170 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -7,8 +7,8 @@ import ( "net/http" "time" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" - gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" ) diff --git a/examples/internal/gateway/main.go b/examples/internal/gateway/main.go index ea8c6836e0a..ca2210582ed 100644 --- a/examples/internal/gateway/main.go +++ b/examples/internal/gateway/main.go @@ -5,7 +5,7 @@ import ( "net/http" "github.com/golang/glog" - gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" + gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) // Endpoint describes a gRPC endpoint diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index d926aca22b9..cf3a7ff4f69 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -15,7 +15,7 @@ proto_library( go_proto_library( name = "helloworld_go_proto", compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/helloworld", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld", proto = ":helloworld_proto", visibility = ["//visibility:public"], deps = ["@go_googleapis//google/api:annotations_go_proto"], @@ -25,7 +25,7 @@ go_library( name = "go_default_library", srcs = ["helloworld.pb.gw.go"], embed = [":helloworld_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/helloworld", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld", visibility = ["//visibility:public"], deps = [ "//runtime:go_default_library", diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index c09fe741ece..de1faecf8f0 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -13,8 +13,8 @@ import ( "net/http" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index ca3b1eacc51..2312aeec700 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -4,9 +4,9 @@ import ( "context" "testing" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/abe" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/echo" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/clients/unannotatedecho" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/abe" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho" ) func TestEchoClient(t *testing.T) { diff --git a/examples/internal/integration/fieldmask_test.go b/examples/internal/integration/fieldmask_test.go index 18f494ac457..5b5709d8ace 100644 --- a/examples/internal/integration/fieldmask_test.go +++ b/examples/internal/integration/fieldmask_test.go @@ -6,8 +6,8 @@ import ( "testing" "github.com/golang/protobuf/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/protobuf/field_mask" ) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index def7703df8e..1bcb95618fc 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -21,10 +21,10 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - gw "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + gw "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" ) diff --git a/examples/internal/integration/main_test.go b/examples/internal/integration/main_test.go index 43a43d4022e..2415528544c 100644 --- a/examples/internal/integration/main_test.go +++ b/examples/internal/integration/main_test.go @@ -10,9 +10,9 @@ import ( "time" "github.com/golang/glog" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/gateway" - server "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server" - gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/gateway" + server "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server" + gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) var ( diff --git a/examples/internal/integration/proto_error_test.go b/examples/internal/integration/proto_error_test.go index 80b92638199..82ee0f1b1dc 100644 --- a/examples/internal/integration/proto_error_test.go +++ b/examples/internal/integration/proto_error_test.go @@ -10,7 +10,7 @@ import ( "time" "github.com/golang/protobuf/jsonpb" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" ) diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index 4dd1475c710..199454cbb06 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -58,7 +58,7 @@ go_proto_library( "@io_bazel_rules_go//proto:go_grpc", "//protoc-gen-grpc-gateway:go_gen_grpc_gateway", # keep ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", proto = ":examplepb_proto", deps = [ "//examples/internal/proto/pathenum:go_default_library", @@ -74,7 +74,7 @@ go_library( name = "go_default_library", srcs = ["unannotated_echo_service.pb.gw.go"], embed = [":examplepb_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", deps = [ "//runtime:go_default_library", "//utilities:go_default_library", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index a34ed9d779a..e6f1bc175a3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -11,10 +11,10 @@ import ( empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" wrappers "github.com/golang/protobuf/ptypes/wrappers" - pathenum "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" - sub2 "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" - _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + pathenum "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" + sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + sub2 "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" grpc "google.golang.org/grpc" diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index cc444791c2a..a4540f8fd9e 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -16,11 +16,11 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index eed383c2df6..637413803db 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index ffad64a1eed..ab0ab3fbe99 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index d3e79338163..084d2de741c 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index e07cf396798..5b86722a8ab 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 93eab149b03..c58aa603403 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" - sub "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" + sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 3cece1b712c..eda39606672 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -16,9 +16,9 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 8936c57c0aa..bf82ff536ca 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 5019a18f448..14914bc3fb5 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index d6868454185..9907976e4ab 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -17,8 +17,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/pathenum/BUILD.bazel b/examples/internal/proto/pathenum/BUILD.bazel index d4a69e0316a..b578c90adf4 100644 --- a/examples/internal/proto/pathenum/BUILD.bazel +++ b/examples/internal/proto/pathenum/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "pathenum_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum", proto = ":pathenum_proto", ) go_library( name = "go_default_library", embed = [":pathenum_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum", ) diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 10f5c55ddf1..37c58a89ef6 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -112,7 +112,7 @@ func init() { } var fileDescriptor_83f42520181de088 = []byte{ - // 187 bytes of a gzipped FileDescriptorProto + // 190 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, 0xcd, 0x2b, 0xcd, 0x05, 0x33, 0xe2, 0x41, @@ -121,8 +121,8 @@ var fileDescriptor_83f42520181de088 = []byte{ 0x6a, 0x71, 0x71, 0x62, 0x7a, 0x6a, 0x40, 0x62, 0x49, 0x86, 0x2b, 0x48, 0x48, 0x89, 0x8b, 0xcf, 0x2f, 0xb5, 0xb8, 0x24, 0x35, 0x05, 0x26, 0x22, 0xc4, 0xce, 0xc5, 0xec, 0xee, 0xe1, 0x29, 0xc0, 0x00, 0x62, 0x78, 0x79, 0xfb, 0x08, 0x30, 0x6a, 0xc9, 0x70, 0x71, 0x20, 0xcb, 0x3a, 0x3a, 0x39, - 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x3c, 0xa3, 0xdc, 0xd3, 0x33, 0x4b, 0x32, 0x4a, + 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x7c, 0xa2, 0xbc, 0xd2, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x4e, 0xd1, 0x4d, 0x4d, 0xce, 0x2f, 0xae, 0x2c, 0x2e, - 0x49, 0x85, 0x72, 0xa1, 0x2e, 0xd3, 0x27, 0xe4, 0xb1, 0x24, 0x36, 0x30, 0xdf, 0x18, 0x10, 0x00, - 0x00, 0xff, 0xff, 0xd1, 0xc7, 0x26, 0x4c, 0x03, 0x01, 0x00, 0x00, + 0x49, 0x85, 0x72, 0xa1, 0x2e, 0xd3, 0x2f, 0x33, 0xd2, 0x27, 0xe4, 0xb7, 0x24, 0x36, 0x30, 0xdf, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x04, 0x17, 0xf6, 0x35, 0x06, 0x01, 0x00, 0x00, } diff --git a/examples/internal/proto/pathenum/path_enum.proto b/examples/internal/proto/pathenum/path_enum.proto index 76837929de8..44a445b2953 100644 --- a/examples/internal/proto/pathenum/path_enum.proto +++ b/examples/internal/proto/pathenum/path_enum.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/pathenum"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum"; package grpc.gateway.examples.internal.pathenum; enum PathEnum { diff --git a/examples/internal/proto/sub/BUILD.bazel b/examples/internal/proto/sub/BUILD.bazel index 947ab3e45c7..364c6f20d55 100644 --- a/examples/internal/proto/sub/BUILD.bazel +++ b/examples/internal/proto/sub/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "sub_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub", proto = ":sub_proto", ) go_library( name = "go_default_library", embed = [":sub_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub", ) diff --git a/examples/internal/proto/sub2/BUILD.bazel b/examples/internal/proto/sub2/BUILD.bazel index 570d10c3c9f..6ccf9ccca5e 100644 --- a/examples/internal/proto/sub2/BUILD.bazel +++ b/examples/internal/proto/sub2/BUILD.bazel @@ -11,12 +11,12 @@ proto_library( go_proto_library( name = "sub2_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2", proto = ":sub2_proto", ) go_library( name = "go_default_library", embed = [":sub2_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2", ) diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 60925d0eee5..9a12ecf1819 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -68,14 +68,14 @@ func init() { } var fileDescriptor_050dd68add910843 = []byte{ - // 139 bytes of a gzipped FileDescriptorProto + // 142 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xad, 0x48, 0xcc, 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0xd5, 0x03, 0x0b, 0x09, 0xb1, 0x80, 0xc4, 0x94, 0xe4, 0xb9, 0x38, 0x3d, 0x53, 0x7c, 0x21, 0x12, 0x42, 0x42, 0x5c, 0x2c, 0xa5, 0xa5, 0x99, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, - 0xb6, 0x93, 0x6b, 0x94, 0x73, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, + 0xb6, 0x93, 0x47, 0x94, 0x5b, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x51, 0x41, 0xb2, 0x6e, 0x6a, 0x72, 0x7e, 0x71, 0x65, 0x71, 0x49, 0x2a, 0x94, 0x9b, 0x9e, - 0x58, 0x92, 0x5a, 0x9e, 0x58, 0xa9, 0x8f, 0xcf, 0xee, 0x24, 0x36, 0x30, 0xdb, 0x18, 0x10, 0x00, - 0x00, 0xff, 0xff, 0xdd, 0xb8, 0xdb, 0x58, 0xa2, 0x00, 0x00, 0x00, + 0x58, 0x92, 0x5a, 0x9e, 0x58, 0xa9, 0x5f, 0x66, 0xa4, 0x8f, 0xcf, 0xfa, 0x24, 0x36, 0x30, 0xdb, + 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x38, 0x17, 0x65, 0xa5, 0x00, 0x00, 0x00, } diff --git a/examples/internal/proto/sub2/message.proto b/examples/internal/proto/sub2/message.proto index 77f10e80315..88bc1b1ab42 100644 --- a/examples/internal/proto/sub2/message.proto +++ b/examples/internal/proto/sub2/message.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2"; package sub2; message IdMessage { diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 4615adb1494..78f95a0a24e 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -14,7 +14,7 @@ go_library( "responsebody.go", "unannotatedecho.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/examples/internal/server", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server", deps = [ "//examples/internal/proto/examplepb:go_default_library", "//examples/internal/proto/sub:go_default_library", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index ee686c22cd0..e0c731d8412 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -11,9 +11,9 @@ import ( "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub" - "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/sub2" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" "github.com/rogpeppe/fastuuid" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" diff --git a/examples/internal/server/echo.go b/examples/internal/server/echo.go index 8b749b9060e..e60b80eb049 100644 --- a/examples/internal/server/echo.go +++ b/examples/internal/server/echo.go @@ -4,7 +4,7 @@ import ( "context" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) diff --git a/examples/internal/server/flow_combination.go b/examples/internal/server/flow_combination.go index 58d68053a79..db10d72754d 100644 --- a/examples/internal/server/flow_combination.go +++ b/examples/internal/server/flow_combination.go @@ -4,7 +4,7 @@ import ( "context" "io" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" ) type flowCombinationServer struct{} diff --git a/examples/internal/server/main.go b/examples/internal/server/main.go index 5f7912eff3e..932ae1b17df 100644 --- a/examples/internal/server/main.go +++ b/examples/internal/server/main.go @@ -5,7 +5,7 @@ import ( "net" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "google.golang.org/grpc" ) diff --git a/examples/internal/server/non_standard_names.go b/examples/internal/server/non_standard_names.go index 414e3d8e0de..0305470c627 100644 --- a/examples/internal/server/non_standard_names.go +++ b/examples/internal/server/non_standard_names.go @@ -4,7 +4,7 @@ import ( "context" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" ) // Implements NonStandardServiceServer diff --git a/examples/internal/server/responsebody.go b/examples/internal/server/responsebody.go index 60fe1ac344a..8ab9a231b17 100644 --- a/examples/internal/server/responsebody.go +++ b/examples/internal/server/responsebody.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" ) // Implements of ResponseBodyServiceServer diff --git a/examples/internal/server/unannotatedecho.go b/examples/internal/server/unannotatedecho.go index b99392bf491..2342be1084a 100644 --- a/examples/internal/server/unannotatedecho.go +++ b/examples/internal/server/unannotatedecho.go @@ -4,7 +4,7 @@ import ( "context" "github.com/golang/glog" - examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) diff --git a/go.mod b/go.mod index c8e880d3044..4a154ae3d14 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/grpc-ecosystem/grpc-gateway +module github.com/grpc-ecosystem/grpc-gateway/v2 go 1.14 diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel index 5242751fb2d..2a4111eab3d 100644 --- a/internal/BUILD.bazel +++ b/internal/BUILD.bazel @@ -12,12 +12,12 @@ proto_library( go_proto_library( name = "internal_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal", proto = ":internal_proto", ) go_library( name = "go_default_library", embed = [":internal_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/internal", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal", ) diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 48800845031..e39d75d3844 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -6,7 +6,7 @@ package(default_visibility = ["//visibility:private"]) go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway", deps = [ "//codegenerator:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel index 631f5c8a503..433ce26bb4e 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel @@ -11,7 +11,7 @@ go_library( "services.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor", deps = [ "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index 5acd771045b..468bbaed4bb 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -7,7 +7,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" options "google.golang.org/genproto/googleapis/api/annotations" ) diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index 8018b0f2932..ee05fc90687 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" ) func compilePath(t *testing.T, path string) httprule.Template { diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 4aa75f85dbf..e8c0667c28f 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" ) // IsWellKnownType returns true if the provided fully qualified type name is considered 'well-known'. diff --git a/protoc-gen-grpc-gateway/generator/BUILD.bazel b/protoc-gen-grpc-gateway/generator/BUILD.bazel index 7c0c6bfc15c..4c6864ab0e7 100644 --- a/protoc-gen-grpc-gateway/generator/BUILD.bazel +++ b/protoc-gen-grpc-gateway/generator/BUILD.bazel @@ -5,7 +5,7 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = ["generator.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator", deps = [ "//protoc-gen-grpc-gateway/descriptor:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-grpc-gateway/generator/generator.go b/protoc-gen-grpc-gateway/generator/generator.go index df55da44445..c927ec692fc 100644 --- a/protoc-gen-grpc-gateway/generator/generator.go +++ b/protoc-gen-grpc-gateway/generator/generator.go @@ -3,7 +3,7 @@ package generator import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" ) // Generator is an abstraction of code generators. diff --git a/protoc-gen-grpc-gateway/httprule/BUILD.bazel b/protoc-gen-grpc-gateway/httprule/BUILD.bazel index bcb42f25112..df87e3bd87c 100644 --- a/protoc-gen-grpc-gateway/httprule/BUILD.bazel +++ b/protoc-gen-grpc-gateway/httprule/BUILD.bazel @@ -9,7 +9,7 @@ go_library( "parse.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule", deps = [ "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/protoc-gen-grpc-gateway/httprule/compile.go b/protoc-gen-grpc-gateway/httprule/compile.go index 437039a3dae..162319d3f3b 100644 --- a/protoc-gen-grpc-gateway/httprule/compile.go +++ b/protoc-gen-grpc-gateway/httprule/compile.go @@ -1,7 +1,7 @@ package httprule import ( - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" ) const ( diff --git a/protoc-gen-grpc-gateway/httprule/compile_test.go b/protoc-gen-grpc-gateway/httprule/compile_test.go index 9ef297573f8..2996b99e613 100644 --- a/protoc-gen-grpc-gateway/httprule/compile_test.go +++ b/protoc-gen-grpc-gateway/httprule/compile_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" ) const ( diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 8483a78ef4f..3c5d722ca87 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -9,7 +9,7 @@ go_library( "generator.go", "template.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway", deps = [ "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/generator:go_default_library", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 0b6bfbd2b93..2c2f6fd49fb 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -11,8 +11,8 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator" ) var ( @@ -42,8 +42,8 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p "context", "io", "net/http", - "github.com/grpc-ecosystem/grpc-gateway/runtime", - "github.com/grpc-ecosystem/grpc-gateway/utilities", + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities", "github.com/golang/protobuf/descriptor", "github.com/golang/protobuf/proto", "google.golang.org/grpc", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index 39e5f141dbe..d54bd03e399 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -7,7 +7,7 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" ) func newExampleFileDescriptor() *descriptor.File { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 6dd5fcf5968..983aba49d80 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -9,8 +9,8 @@ import ( "github.com/golang/glog" generator2 "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" ) type param struct { @@ -719,4 +719,4 @@ var ( {{end}} ) {{end}}`)) -) \ No newline at end of file +) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 69809792b4c..637d30097d9 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index dec981d4a96..4355f64efae 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -17,9 +17,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway" + "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway" ) var ( diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index d5a1d05fcc7..2b5b97efbb8 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -5,7 +5,7 @@ package(default_visibility = ["//visibility:private"]) go_library( name = "go_default_library", srcs = ["main.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger", deps = [ "//codegenerator:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index c89eb04477d..b82f653ed61 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -12,7 +12,7 @@ go_library( "template.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/genswagger", deps = [ "//internal:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index ecf1135fde7..8203d64c318 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -15,10 +15,10 @@ import ( protocdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/internal" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/generator" - swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator" + swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) var ( diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 7396d8e23ab..7fe533fdcdf 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -20,8 +20,8 @@ import ( pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) var wktSchemas = map[string]schemaCore{ diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 9176eb07a51..a80b1fdbe26 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -13,9 +13,9 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" - swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/genswagger/types.go index 0b4c953b3ee..e561083d7a2 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/genswagger/types.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" ) type param struct { diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index bc13469f034..63270d490d4 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -9,9 +9,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger" + "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/genswagger" ) var ( diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 464a56d4539..9160588f860 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -15,7 +15,7 @@ filegroup( go_library( name = "go_default_library", embed = [":options_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options", ) proto_library( @@ -34,6 +34,6 @@ proto_library( go_proto_library( name = "options_go_proto", compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options", proto = ":options_proto", ) diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index 651400277ef..dfc3dcdbe5b 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -80,26 +80,26 @@ func init() { var fileDescriptor_a6a34ca6badab664 = []byte{ // 346 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xea, 0x40, - 0x14, 0xc5, 0xc3, 0xe6, 0xe5, 0xa5, 0xef, 0xa9, 0x58, 0x37, 0x86, 0xf8, 0x87, 0x9d, 0xc6, 0xc0, - 0x8c, 0x81, 0x5d, 0x77, 0x6a, 0xe2, 0xc2, 0x44, 0x49, 0x0a, 0x2b, 0x37, 0x64, 0x18, 0x2e, 0x97, - 0x49, 0x4a, 0xef, 0x64, 0x66, 0x80, 0x90, 0xb0, 0xf4, 0x13, 0xf8, 0x89, 0x8d, 0xd3, 0xd2, 0x9a, - 0x8a, 0xa6, 0xbb, 0xce, 0xe9, 0xbd, 0xe7, 0x77, 0x7a, 0x3a, 0x41, 0x47, 0x1b, 0x72, 0x24, 0xbb, - 0x08, 0x69, 0xd7, 0xae, 0x05, 0x22, 0x18, 0x4e, 0xda, 0x29, 0x4a, 0x2d, 0x17, 0x69, 0x4a, 0x4e, - 0xf8, 0x67, 0xe6, 0xc7, 0xc2, 0x2b, 0x34, 0x5a, 0x32, 0x14, 0x0e, 0xd6, 0x62, 0x93, 0x69, 0x72, - 0x8c, 0x90, 0x8e, 0xf3, 0x55, 0x96, 0xaf, 0xb6, 0xda, 0x48, 0x84, 0x09, 0x70, 0x3f, 0x32, 0x59, - 0xce, 0xf8, 0x14, 0xac, 0x34, 0x4a, 0x3b, 0x32, 0xd9, 0x5a, 0xeb, 0xe6, 0x17, 0x30, 0x69, 0x48, - 0x85, 0x56, 0xab, 0x5e, 0x36, 0x1b, 0x6d, 0x83, 0xe3, 0x42, 0xda, 0xa1, 0xc2, 0x33, 0x96, 0x31, - 0xd8, 0x8e, 0xc1, 0x1e, 0x55, 0x02, 0x83, 0xcc, 0xe2, 0xf4, 0xfd, 0x6f, 0xbb, 0x71, 0xfd, 0xaf, - 0x77, 0xcb, 0x6a, 0x26, 0x66, 0xc3, 0xec, 0x1c, 0x37, 0x0b, 0x52, 0xae, 0x44, 0x6f, 0x8d, 0xe0, - 0xa4, 0xc4, 0x93, 0x06, 0xe3, 0x3b, 0x09, 0x2f, 0xbe, 0x05, 0x78, 0x06, 0x37, 0xa7, 0x69, 0x25, - 0x42, 0xaf, 0x76, 0x84, 0xc1, 0xce, 0x3a, 0x0e, 0x0b, 0x5e, 0xa1, 0x45, 0xdb, 0xa0, 0xf9, 0xa5, - 0x04, 0x39, 0x87, 0x85, 0x08, 0x2f, 0xf7, 0x44, 0xb0, 0x56, 0x60, 0xb5, 0x06, 0x5e, 0xbf, 0x06, - 0x6f, 0x1c, 0x1f, 0x95, 0x2d, 0x78, 0x21, 0xb2, 0xc1, 0x41, 0x49, 0x77, 0x02, 0xf7, 0xa0, 0x87, - 0x60, 0x56, 0x4a, 0x56, 0xd1, 0x9d, 0xda, 0xe8, 0x91, 0xc0, 0xf8, 0x7f, 0x01, 0x19, 0x09, 0x8c, - 0xb6, 0x41, 0x99, 0x63, 0x3c, 0x53, 0x90, 0x4c, 0xc3, 0xf3, 0x3d, 0x7f, 0x1d, 0x92, 0x6a, 0xe7, - 0xfd, 0xda, 0xd0, 0xa7, 0xe1, 0xe0, 0x25, 0xff, 0xe6, 0xc3, 0x82, 0xe5, 0x2d, 0xef, 0x1f, 0x5e, - 0xef, 0x50, 0xb9, 0xf9, 0x72, 0xc2, 0x24, 0x2d, 0xf8, 0xa7, 0x61, 0x17, 0x24, 0xd9, 0x8d, 0x75, - 0x90, 0x1f, 0x73, 0x7f, 0xfe, 0xf3, 0x55, 0x9e, 0xfc, 0xf1, 0xef, 0xfa, 0x1f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x59, 0x78, 0xb0, 0x03, 0x68, 0x03, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xc2, 0x40, + 0x10, 0xc5, 0xc3, 0xc5, 0x98, 0xfa, 0x0f, 0xeb, 0xc5, 0x10, 0xff, 0x70, 0xd3, 0x18, 0xd8, 0x35, + 0xe5, 0xd6, 0xa3, 0x31, 0x1c, 0x4c, 0x94, 0xa4, 0x70, 0xf2, 0x42, 0x96, 0x65, 0x18, 0x9a, 0x94, + 0xce, 0x66, 0x77, 0x81, 0x90, 0x70, 0xf4, 0x13, 0xf8, 0x89, 0x8d, 0xdb, 0xd2, 0x9a, 0x8a, 0xa6, + 0xb7, 0xee, 0xeb, 0xcc, 0xfb, 0xbd, 0xbe, 0xae, 0xd7, 0x51, 0x9a, 0x2c, 0xc9, 0x2e, 0x42, 0xda, + 0x35, 0x6b, 0x81, 0x08, 0x9a, 0x93, 0xb2, 0x31, 0xa5, 0x86, 0x8b, 0x34, 0x25, 0x2b, 0xdc, 0x33, + 0x73, 0x63, 0xfe, 0x1d, 0x6a, 0x25, 0x19, 0x0a, 0x0b, 0x6b, 0xb1, 0xc9, 0x34, 0x39, 0x46, 0x48, + 0xc7, 0xf9, 0x2a, 0xcb, 0x57, 0x5b, 0x6d, 0x24, 0xc2, 0x04, 0xb8, 0x1b, 0x99, 0x2c, 0x67, 0x7c, + 0x0a, 0x46, 0xea, 0x58, 0x59, 0xd2, 0xd9, 0x5a, 0xeb, 0xe1, 0x1f, 0x30, 0x29, 0x48, 0x85, 0x8a, + 0x57, 0x41, 0x36, 0x1b, 0x6e, 0xbd, 0xf3, 0x42, 0xda, 0xa1, 0xfc, 0x2b, 0x96, 0x31, 0xd8, 0x8e, + 0xc1, 0xfa, 0x71, 0x02, 0x83, 0xcc, 0xe2, 0xf2, 0xf3, 0xb0, 0xdd, 0xb8, 0x3f, 0x0a, 0x1e, 0x59, + 0xcd, 0xc4, 0x6c, 0x98, 0x9d, 0xa3, 0x66, 0x41, 0xca, 0x95, 0xf0, 0xa3, 0xe1, 0x5d, 0x94, 0x78, + 0x52, 0xa0, 0x5d, 0x27, 0xfe, 0xcd, 0xaf, 0x00, 0xaf, 0x60, 0xe7, 0x34, 0xad, 0x44, 0x08, 0x6a, + 0x47, 0x18, 0xec, 0xac, 0x23, 0xbf, 0xe0, 0x15, 0x5a, 0xb8, 0xf5, 0x9a, 0x3f, 0x4a, 0x90, 0x73, + 0x58, 0x08, 0xff, 0x76, 0x4f, 0x04, 0x63, 0x04, 0x56, 0x6b, 0xe0, 0xf5, 0x6b, 0x70, 0xc6, 0xd1, + 0x59, 0xd9, 0x82, 0x13, 0x42, 0xe3, 0x9d, 0x94, 0x74, 0x2b, 0x70, 0x0f, 0x7a, 0x08, 0x7a, 0x15, + 0xcb, 0x2a, 0xba, 0x53, 0x1b, 0x3d, 0x12, 0x18, 0x1d, 0x17, 0x90, 0x91, 0xc0, 0x70, 0xeb, 0x95, + 0x39, 0xc6, 0xb3, 0x18, 0x92, 0xa9, 0x7f, 0xbd, 0xe7, 0xaf, 0x43, 0x52, 0xed, 0xbc, 0x57, 0x1b, + 0xfa, 0x32, 0x1c, 0xbc, 0xe5, 0xdf, 0x7c, 0x5a, 0xb0, 0x9c, 0xe5, 0x53, 0xff, 0xfd, 0x19, 0x63, + 0x3b, 0x5f, 0x4e, 0x98, 0xa4, 0x05, 0xff, 0x36, 0xec, 0x82, 0x24, 0xb3, 0x31, 0x16, 0xf2, 0x63, + 0xee, 0xcf, 0x57, 0x01, 0xff, 0xfb, 0x36, 0x4f, 0x0e, 0xdc, 0xbb, 0xde, 0x57, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xca, 0x4a, 0x29, 0xbb, 0x6b, 0x03, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/annotations.proto b/protoc-gen-swagger/options/annotations.proto index 5151fd5a652..206d72459f6 100644 --- a/protoc-gen-swagger/options/annotations.proto +++ b/protoc-gen-swagger/options/annotations.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package grpc.gateway.protoc_gen_swagger.options; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options"; import "google/protobuf/descriptor.proto"; import "protoc-gen-swagger/options/openapiv2.proto"; diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 8ea807582e2..a3a71b112d7 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1514,13 +1514,13 @@ func init() { } var fileDescriptor_ba35ad8af024fb48 = []byte{ - // 1910 bytes of a gzipped FileDescriptorProto + // 1913 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x5b, 0x73, 0x1a, 0xd7, 0x1d, 0xcf, 0xc2, 0x02, 0xcb, 0x1f, 0x81, 0x8f, 0x8f, 0xe5, 0x74, 0x43, 0x6c, 0x57, 0xa1, 0xe9, - 0x54, 0x63, 0xd7, 0x28, 0x51, 0x1e, 0x9a, 0x49, 0xaf, 0x48, 0x22, 0xf2, 0xae, 0x65, 0xa0, 0x0b, + 0x54, 0x63, 0xd7, 0x28, 0x51, 0x1e, 0x9a, 0x49, 0xaf, 0x48, 0xc2, 0xf2, 0xae, 0x65, 0xa0, 0x0b, 0x8a, 0xe2, 0x76, 0x3c, 0xdb, 0xd5, 0x72, 0x40, 0x1b, 0xef, 0x85, 0xec, 0x45, 0x12, 0xfd, 0x04, 0x7d, 0xee, 0xf4, 0x35, 0xdf, 0xa3, 0x0f, 0x7d, 0xea, 0x17, 0x68, 0x3f, 0x4b, 0x3b, 0x7d, 0xef, - 0x9c, 0xcb, 0xc2, 0x22, 0x61, 0x0f, 0xc8, 0x76, 0xfb, 0x90, 0x27, 0xce, 0xff, 0xf6, 0x3b, 0x97, + 0x9c, 0xcb, 0xc2, 0x22, 0x61, 0x0f, 0xc8, 0x71, 0xfb, 0x90, 0x27, 0xce, 0xff, 0xf6, 0x3b, 0x97, 0xff, 0xed, 0x9c, 0x05, 0x1e, 0x4e, 0xc2, 0x20, 0x0e, 0xec, 0xc7, 0x63, 0xe2, 0x3f, 0x8e, 0x2e, 0xac, 0xf1, 0x98, 0x84, 0x3b, 0xc1, 0x24, 0x76, 0x02, 0x3f, 0xda, 0x09, 0x26, 0xc4, 0xb7, 0x26, 0xce, 0xf9, 0x6e, 0x93, 0x29, 0xe1, 0x9f, 0x8c, 0xc3, 0x89, 0xdd, 0x1c, 0x5b, 0x31, 0xb9, 0xb0, @@ -1530,24 +1530,24 @@ var fileDescriptor_ba35ad8af024fb48 = []byte{ 0xab, 0x4a, 0x5b, 0xd2, 0x76, 0xd9, 0x48, 0x49, 0xdc, 0x02, 0xd9, 0xf1, 0x47, 0x81, 0x9a, 0xdb, 0x92, 0xb6, 0x2b, 0xbb, 0x8f, 0x9b, 0x2b, 0x2e, 0xab, 0xa9, 0xf9, 0xa3, 0xc0, 0x60, 0xa6, 0x18, 0x83, 0x7c, 0x16, 0x44, 0xb1, 0x9a, 0x67, 0xc8, 0x6c, 0x8c, 0x3f, 0x84, 0xf2, 0xa9, 0x15, 0x11, - 0x73, 0x62, 0xc5, 0x67, 0xaa, 0xcc, 0x04, 0x0a, 0x65, 0xf4, 0xac, 0xf8, 0x0c, 0x7f, 0x0d, 0xa5, + 0x73, 0x62, 0xc5, 0x67, 0xaa, 0xcc, 0x04, 0x0a, 0x65, 0xf4, 0xac, 0xf8, 0x0c, 0x7f, 0x05, 0xa5, 0xc8, 0x3e, 0x23, 0x1e, 0x89, 0xd4, 0xc2, 0x56, 0x7e, 0xbb, 0xb6, 0xfb, 0xab, 0x95, 0xa7, 0x15, 0x1b, 0x4a, 0x7f, 0xfb, 0x0c, 0xc6, 0x48, 0xe1, 0x70, 0x1d, 0x14, 0x3b, 0xf0, 0xa3, 0x84, 0x42, 0x17, 0xb7, 0xf2, 0x74, 0xd6, 0x94, 0xa6, 0xb2, 0x49, 0x18, 0x0c, 0x13, 0x9b, 0x44, 0x6a, 0x89, - 0xcb, 0x52, 0x1a, 0xbf, 0x80, 0x72, 0x48, 0xa2, 0x49, 0xe0, 0x47, 0x24, 0x52, 0x61, 0x2b, 0xbf, + 0xcb, 0x52, 0x1a, 0xbf, 0x84, 0x72, 0x48, 0xa2, 0x49, 0xe0, 0x47, 0x24, 0x52, 0x61, 0x2b, 0xbf, 0x5d, 0xd9, 0xfd, 0xf5, 0xda, 0x6b, 0x32, 0x52, 0x84, 0xb6, 0x1f, 0x87, 0x53, 0x63, 0x8e, 0x88, 0x03, 0xd8, 0x8c, 0x88, 0x9d, 0x84, 0x4e, 0x3c, 0x35, 0x87, 0x64, 0xe4, 0xf8, 0x0e, 0xb3, 0x54, 0x2b, 0xec, 0xd0, 0x7f, 0xb1, 0xfa, 0x4c, 0x02, 0xe4, 0x60, 0x8e, 0x61, 0xdc, 0x89, 0xae, 0x33, - 0xf1, 0xd7, 0xa0, 0xa4, 0x6c, 0x75, 0x83, 0x6d, 0x67, 0xfd, 0x49, 0x0c, 0xf2, 0x6d, 0xe2, 0x84, + 0xf1, 0x57, 0xa0, 0xa4, 0x6c, 0x75, 0x83, 0x6d, 0x67, 0xfd, 0x49, 0x0c, 0xf2, 0x4d, 0xe2, 0x84, 0xc4, 0x23, 0x7e, 0x6c, 0xcc, 0xd0, 0xb0, 0x0d, 0x55, 0x72, 0x19, 0x93, 0xd0, 0xb7, 0x5c, 0x73, 0x18, 0xd8, 0x91, 0x5a, 0x63, 0x7b, 0x58, 0xdd, 0x83, 0x6d, 0x61, 0x7d, 0x10, 0xd8, 0x09, 0xc5, 0xb6, 0x28, 0xdb, 0xd8, 0x20, 0x73, 0x76, 0x84, 0xff, 0x00, 0x40, 0x69, 0x3f, 0x62, 0xa7, 0x74, 0x8b, 0x6d, 0xe0, 0x37, 0x6b, 0xfb, 0xa3, 0x3d, 0x83, 0xe0, 0x0e, 0xc9, 0x60, 0xd6, 0x03, 0xa8, - 0x2d, 0xba, 0x0b, 0x23, 0xc8, 0xbf, 0x24, 0x53, 0x91, 0x1e, 0x74, 0x88, 0x0f, 0xa1, 0x70, 0x6e, + 0x2d, 0xba, 0x0b, 0x23, 0xc8, 0xbf, 0x22, 0x53, 0x91, 0x1e, 0x74, 0x88, 0x0f, 0xa1, 0x70, 0x6e, 0xb9, 0x09, 0x11, 0xb9, 0xf1, 0xe9, 0xca, 0x0b, 0x48, 0x91, 0x0d, 0x6e, 0xff, 0x45, 0xee, 0x73, 0xa9, 0x7e, 0x0c, 0xb7, 0xae, 0xac, 0x67, 0xc9, 0x8c, 0x3f, 0x5d, 0x9c, 0xf1, 0xfd, 0x26, 0x4f, - 0xf0, 0x66, 0x9a, 0xe0, 0xcd, 0xaf, 0xa8, 0x34, 0x03, 0xdb, 0xd8, 0x83, 0xea, 0x42, 0x2a, 0xe0, - 0x0a, 0x94, 0x8e, 0x3b, 0x4f, 0x3b, 0xdd, 0x93, 0x0e, 0x7a, 0x0f, 0x2b, 0x20, 0x3f, 0x19, 0x0c, + 0xf0, 0x66, 0x9a, 0xe0, 0xcd, 0x2f, 0xa9, 0x34, 0x03, 0xdb, 0xd8, 0x83, 0xea, 0x42, 0x2a, 0xe0, + 0x0a, 0x94, 0x8e, 0x3b, 0xcf, 0x3a, 0xdd, 0x93, 0x0e, 0x7a, 0x0f, 0x2b, 0x20, 0x3f, 0x1d, 0x0c, 0x7a, 0x48, 0xc2, 0x65, 0x28, 0xd0, 0x51, 0x1f, 0xe5, 0x70, 0x11, 0x72, 0x27, 0x7d, 0x94, 0xc7, 0x25, 0xc8, 0x9f, 0xf4, 0xfb, 0x48, 0xd6, 0x65, 0x45, 0x41, 0x65, 0x5d, 0x56, 0xca, 0x08, 0x74, 0x59, 0xa9, 0xa2, 0x5a, 0xe3, 0xef, 0x45, 0x28, 0x77, 0x27, 0x24, 0x64, 0xbe, 0xa1, 0xf9, 0x1d, @@ -1555,84 +1555,84 @@ var fileDescriptor_ba35ad8af024fb48 = []byte{ 0x95, 0x16, 0x14, 0x4e, 0xe2, 0x2d, 0xa8, 0x0c, 0x49, 0x64, 0x87, 0x0e, 0x3b, 0x0c, 0x51, 0x14, 0xb2, 0xac, 0xeb, 0x21, 0x24, 0xbf, 0x83, 0x10, 0xfa, 0x08, 0x36, 0x82, 0x74, 0x07, 0xa6, 0x33, 0x54, 0x0b, 0x7c, 0x1d, 0x33, 0x9e, 0x36, 0xbc, 0x71, 0xb1, 0x30, 0xb3, 0xc5, 0xa2, 0xcc, 0x82, - 0xb3, 0xb5, 0xf2, 0xda, 0x67, 0xc7, 0xfa, 0x9a, 0x72, 0xa1, 0xce, 0xeb, 0x23, 0xb0, 0xb9, 0x67, + 0xb3, 0xb5, 0xf2, 0xda, 0x67, 0xc7, 0xfa, 0x86, 0x72, 0xa1, 0xce, 0xeb, 0x23, 0xb0, 0xb9, 0x67, 0xf5, 0xed, 0x01, 0xc0, 0x90, 0x4c, 0x42, 0x62, 0x5b, 0x31, 0x19, 0xb2, 0xf2, 0xa1, 0x18, 0x19, 0xce, 0x3b, 0xcc, 0xfb, 0xd3, 0x85, 0x94, 0xac, 0x32, 0xec, 0xbd, 0x1b, 0xec, 0xfa, 0x7b, 0x90, 0x94, 0x3c, 0xa1, 0x1a, 0xff, 0xc8, 0x83, 0x92, 0x4e, 0x7a, 0x35, 0x2b, 0xa4, 0xeb, 0x59, 0x71, 0x08, 0x45, 0xe6, 0x65, 0x4b, 0xcc, 0xb3, 0xb3, 0xba, 0xe3, 0x98, 0x99, 0x21, 0xcc, 0xf1, 0xef, 0x41, 0x21, 0x97, 0x96, 0x37, 0x71, 0x09, 0xcd, 0xac, 0xf5, 0x5a, 0x59, 0xba, 0xde, 0x66, 0x5b, - 0x20, 0x70, 0x27, 0xcd, 0x00, 0xb1, 0xb5, 0x10, 0x06, 0x85, 0x35, 0x83, 0x3f, 0x03, 0xff, 0xea, + 0x20, 0x70, 0x27, 0xcd, 0x00, 0xb1, 0xb5, 0x10, 0x06, 0x85, 0x35, 0x83, 0x3f, 0x03, 0xff, 0xfa, 0x28, 0xf8, 0x39, 0x54, 0x17, 0x66, 0x5f, 0xe2, 0x92, 0xcd, 0xac, 0x4b, 0xca, 0xff, 0x13, 0x8f, 0xe6, 0x91, 0xdc, 0xf8, 0x67, 0x1e, 0x64, 0x7a, 0xef, 0xa1, 0xf3, 0xc7, 0x4e, 0xec, 0x12, 0x01, 0xca, 0x89, 0xab, 0x3e, 0xce, 0x5d, 0xf7, 0xf1, 0x36, 0xa0, 0x98, 0x84, 0x5e, 0x64, 0x06, 0x23, 0x33, 0x22, 0xe1, 0xb9, 0x63, 0x13, 0x51, 0x20, 0x6b, 0x8c, 0xdf, 0x1d, 0xf5, 0x39, 0x17, 0xeb, 0x50, 0xb2, 0x03, 0x3f, 0xb6, 0xec, 0x58, 0x54, 0xc7, 0x4f, 0x56, 0x3e, 0xe4, 0x7d, 0x6e, 0x67, 0xa4, 0x00, 0x14, 0xcb, 0x75, 0x6c, 0xe2, 0x47, 0x84, 0x55, 0xc1, 0x75, 0xb0, 0x8e, 0xb8, 0x9d, - 0x91, 0x02, 0xd0, 0xd2, 0x74, 0x4e, 0x42, 0x7a, 0xba, 0x6a, 0x91, 0xd7, 0x7d, 0x41, 0xe2, 0x17, - 0x0b, 0x91, 0x51, 0x62, 0x91, 0xf1, 0xcb, 0xb5, 0xae, 0x93, 0xaf, 0x8d, 0x8a, 0x77, 0xd4, 0x3f, + 0x91, 0x02, 0xd0, 0xd2, 0x74, 0x4e, 0x42, 0x7a, 0xba, 0x6a, 0x91, 0xd7, 0x7d, 0x41, 0xe2, 0x97, + 0x0b, 0x91, 0x51, 0x62, 0x91, 0xf1, 0xcb, 0xb5, 0xae, 0x93, 0x6f, 0x8c, 0x8a, 0x77, 0xd4, 0x3f, 0xdb, 0x50, 0x12, 0xe7, 0x45, 0xdb, 0x9c, 0x6f, 0x79, 0xa9, 0x4f, 0xd9, 0x98, 0x4e, 0x91, 0x84, 0xae, 0x70, 0x25, 0x1d, 0x52, 0xd7, 0x13, 0xcf, 0x72, 0x5c, 0xe1, 0x37, 0x4e, 0x34, 0x76, 0xa0, - 0x24, 0x8e, 0x6a, 0x35, 0x98, 0xc6, 0x53, 0xb8, 0xbb, 0xb4, 0x8b, 0xad, 0x50, 0x28, 0xae, 0x83, - 0xfd, 0x2d, 0x07, 0x45, 0x5e, 0x04, 0xf0, 0x00, 0x2a, 0xdf, 0x44, 0x81, 0x6f, 0x8a, 0x52, 0x22, + 0x24, 0x8e, 0x6a, 0x35, 0x98, 0xc6, 0x33, 0xb8, 0xbb, 0xb4, 0x8b, 0xad, 0x50, 0x28, 0xae, 0x83, + 0xfd, 0x2d, 0x07, 0x45, 0x5e, 0x04, 0xf0, 0x00, 0x2a, 0x5f, 0x47, 0x81, 0x6f, 0x8a, 0x52, 0x22, 0xb1, 0x73, 0xf8, 0x6c, 0x65, 0x37, 0xe8, 0xfd, 0x6e, 0x47, 0x94, 0x13, 0xa0, 0x38, 0x02, 0xf5, 0x63, 0xa8, 0x0e, 0x1d, 0xba, 0x02, 0xcf, 0xf1, 0xad, 0x38, 0x08, 0xc5, 0xe4, 0x8b, 0x4c, 0x7a, 0xe7, 0x0f, 0x89, 0x35, 0x34, 0x03, 0xdf, 0x9d, 0xb2, 0xe3, 0x51, 0x0c, 0x85, 0x32, 0xba, 0xbe, 0xbb, 0xe4, 0xde, 0x58, 0x78, 0x07, 0x4d, 0xbf, 0x09, 0x25, 0x51, 0xa9, 0x58, 0x74, 0x56, 0x76, - 0x37, 0xaf, 0x45, 0x40, 0xcb, 0x9f, 0x1a, 0xa9, 0x92, 0x2e, 0x2b, 0x32, 0x2a, 0x34, 0xbe, 0x2b, - 0x01, 0xcc, 0x37, 0x4e, 0xcf, 0x37, 0x24, 0x23, 0xe1, 0x5f, 0x3a, 0x9c, 0xa7, 0x7b, 0xe1, 0x35, + 0x37, 0xaf, 0x45, 0x40, 0xcb, 0x9f, 0x1a, 0xa9, 0x92, 0x2e, 0x2b, 0x32, 0x2a, 0x34, 0xbe, 0x2d, + 0x01, 0xcc, 0x37, 0x4e, 0xcf, 0x37, 0x24, 0x23, 0xe1, 0x5f, 0x3a, 0x9c, 0xa7, 0x7b, 0xe1, 0x0d, 0xe9, 0x5e, 0xbc, 0xee, 0x29, 0x15, 0x4a, 0x43, 0x32, 0xb2, 0x12, 0x37, 0x56, 0x4b, 0x3c, 0x59, 0x04, 0xb9, 0x78, 0x54, 0xca, 0x95, 0xa3, 0xfa, 0x21, 0x54, 0xbc, 0xc4, 0x8d, 0x9d, 0x89, 0x4b, 0xcc, 0x60, 0xa4, 0xc2, 0x96, 0xb4, 0x2d, 0x19, 0x90, 0xb2, 0xba, 0x23, 0x8a, 0xeb, 0x59, 0x97, 0x8e, 0x97, 0x78, 0xec, 0x0a, 0x20, 0x19, 0x29, 0x89, 0x1f, 0xc1, 0x6d, 0x72, 0x69, 0xbb, 0x49, - 0xe4, 0x9c, 0x13, 0x33, 0xd5, 0xd9, 0x60, 0xf8, 0x68, 0x26, 0x78, 0x26, 0x94, 0x29, 0x8c, 0xe3, + 0xe4, 0x9c, 0x13, 0x33, 0xd5, 0xd9, 0x60, 0xf8, 0x68, 0x26, 0x78, 0x2e, 0x94, 0x29, 0x8c, 0xe3, 0x33, 0x95, 0xaa, 0x80, 0xe1, 0xe4, 0x15, 0x18, 0xa1, 0x53, 0xbb, 0x0a, 0x23, 0x94, 0xef, 0x03, 0x78, 0xd6, 0xa5, 0xe9, 0x12, 0x7f, 0x1c, 0x9f, 0xa9, 0xb7, 0xb6, 0xa4, 0x6d, 0xd9, 0x28, 0x7b, 0xd6, 0xe5, 0x11, 0x63, 0x30, 0xb1, 0xe3, 0xa7, 0x62, 0x24, 0xc4, 0x8e, 0x2f, 0xc4, 0x2a, 0x94, 0x26, 0x56, 0x4c, 0x7d, 0xa8, 0xde, 0xe6, 0x67, 0x24, 0x48, 0x7a, 0x46, 0x14, 0xd7, 0x89, 0x89, 0x17, 0xa9, 0x9b, 0xcc, 0x4e, 0xf1, 0xac, 0x4b, 0x8d, 0xd2, 0x4c, 0xe8, 0xf8, 0x42, 0x78, 0x57, - 0x08, 0x1d, 0x9f, 0x0b, 0x3f, 0x82, 0x8d, 0xc4, 0x77, 0xbe, 0x4d, 0x88, 0x90, 0xbf, 0xcf, 0x56, + 0x08, 0x1d, 0x9f, 0x0b, 0x3f, 0x82, 0x8d, 0xc4, 0x77, 0xbe, 0x49, 0x88, 0x90, 0xbf, 0xcf, 0x56, 0x5e, 0xe1, 0x3c, 0xae, 0xf2, 0x63, 0xa8, 0x51, 0xf0, 0x49, 0x48, 0x2f, 0x84, 0xb1, 0x43, 0x22, 0x55, 0x65, 0x20, 0x55, 0xcf, 0xba, 0xec, 0xcd, 0x98, 0x4c, 0xcd, 0xf1, 0xb3, 0x6a, 0x1f, 0x08, 0x35, 0xc7, 0xcf, 0xa8, 0xd5, 0x41, 0x09, 0xf9, 0xad, 0x69, 0xa8, 0xd6, 0xf9, 0x6d, 0x31, 0xa5, - 0x69, 0xf0, 0x58, 0x61, 0x68, 0x4d, 0xd5, 0x06, 0x13, 0x70, 0x02, 0xbf, 0x00, 0x39, 0x9e, 0x4e, + 0x69, 0xf0, 0x58, 0x61, 0x68, 0x4d, 0xd5, 0x06, 0x13, 0x70, 0x02, 0xbf, 0x04, 0x39, 0x9e, 0x4e, 0x88, 0xfa, 0x23, 0xf6, 0xfe, 0xd5, 0x6e, 0x90, 0xa0, 0x99, 0x61, 0xdf, 0xa1, 0xd1, 0x3c, 0x98, 0x4e, 0x48, 0x64, 0x30, 0xd8, 0xc6, 0x05, 0xdc, 0x5d, 0x2a, 0x5e, 0x7c, 0x1e, 0x94, 0xa1, 0xd0, - 0x32, 0x8c, 0xd6, 0x73, 0x24, 0x51, 0xfe, 0x5e, 0xb7, 0x7b, 0xd4, 0x6e, 0x75, 0x50, 0x8e, 0x12, + 0x32, 0x8c, 0xd6, 0x0b, 0x24, 0x51, 0xfe, 0x5e, 0xb7, 0x7b, 0xd4, 0x6e, 0x75, 0x50, 0x8e, 0x12, 0x5a, 0x67, 0xd0, 0x3e, 0x6c, 0x1b, 0x28, 0x4f, 0xdf, 0x10, 0x9d, 0xe3, 0xa3, 0x23, 0x24, 0x63, - 0x80, 0x62, 0xe7, 0xf8, 0xd9, 0x5e, 0xdb, 0x40, 0x05, 0x3a, 0xee, 0xee, 0xe9, 0xed, 0xfd, 0x01, + 0x80, 0x62, 0xe7, 0xf8, 0xf9, 0x5e, 0xdb, 0x40, 0x05, 0x3a, 0xee, 0xee, 0xe9, 0xed, 0xfd, 0x01, 0x2a, 0xd2, 0x71, 0x7f, 0x60, 0x68, 0x9d, 0x43, 0x54, 0xd2, 0x65, 0x45, 0x42, 0x39, 0x5d, 0x56, 0x72, 0x28, 0xcf, 0xb3, 0x6b, 0xf6, 0xae, 0xc0, 0xe8, 0x8e, 0x2e, 0x2b, 0x77, 0xd0, 0xa6, 0x2e, 0x2b, 0x3f, 0x40, 0xaa, 0x2e, 0x2b, 0x1f, 0xa2, 0x7b, 0xba, 0xac, 0xdc, 0x43, 0xf7, 0x75, 0x59, 0xb9, 0x8f, 0x1e, 0xe8, 0xb2, 0xf2, 0x00, 0x35, 0x74, 0x59, 0xf9, 0x18, 0x3d, 0xd4, 0x65, 0xe5, 0x21, 0x7a, 0xa4, 0xcb, 0xca, 0x23, 0xd4, 0x6c, 0xfc, 0x59, 0x82, 0xfc, 0xc0, 0x1a, 0xaf, 0xd0, - 0x5f, 0xaf, 0x15, 0x99, 0xfc, 0xdb, 0x2f, 0x32, 0x7c, 0x8b, 0x8d, 0x7f, 0x4b, 0x70, 0x67, 0xc9, - 0x73, 0x1c, 0x8f, 0x32, 0x37, 0x70, 0x89, 0x35, 0x41, 0xfd, 0x4d, 0x9e, 0xf7, 0x33, 0x9e, 0xb8, - 0x88, 0xa5, 0xd8, 0xf5, 0x18, 0xaa, 0x0b, 0xa2, 0x25, 0xdd, 0xf0, 0xd9, 0x62, 0x37, 0xfc, 0xd9, - 0xda, 0xeb, 0x10, 0x5f, 0x57, 0x32, 0xed, 0xf2, 0x3f, 0x45, 0xa8, 0x2d, 0x4a, 0x71, 0x4f, 0x44, - 0x32, 0x9d, 0xb8, 0x76, 0x83, 0xe7, 0x06, 0x87, 0x69, 0xd2, 0xf0, 0xe4, 0xc1, 0xbb, 0x82, 0x9f, - 0xd3, 0x1e, 0x9b, 0xcf, 0xf4, 0x58, 0x1d, 0x72, 0x8e, 0xcf, 0x2e, 0x4b, 0xb5, 0xdd, 0x2f, 0x6e, - 0xba, 0x0a, 0xcd, 0x37, 0x72, 0x8e, 0x4f, 0xf7, 0x34, 0x72, 0x83, 0x0b, 0x56, 0xef, 0xdf, 0x60, - 0x4f, 0x5f, 0xba, 0xc1, 0x85, 0xc1, 0x90, 0x68, 0x45, 0xb5, 0x92, 0xf8, 0x2c, 0x08, 0x9d, 0x3f, + 0x5f, 0xaf, 0x15, 0x99, 0xfc, 0x77, 0x5f, 0x64, 0xf8, 0x16, 0x1b, 0xff, 0x96, 0xe0, 0xce, 0x92, + 0xe7, 0x38, 0x1e, 0x65, 0x6e, 0xe0, 0x12, 0x6b, 0x82, 0xfa, 0xdb, 0x3c, 0xef, 0x67, 0x3c, 0x71, + 0x11, 0x4b, 0xb1, 0xeb, 0x31, 0x54, 0x17, 0x44, 0x4b, 0xba, 0xe1, 0xf3, 0xc5, 0x6e, 0xf8, 0xb3, + 0xb5, 0xd7, 0x21, 0xbe, 0xae, 0x64, 0xda, 0xe5, 0x7f, 0x8a, 0x50, 0x5b, 0x94, 0xe2, 0x9e, 0x88, + 0x64, 0x3a, 0x71, 0xed, 0x06, 0xcf, 0x0d, 0x0e, 0xd3, 0xa4, 0xe1, 0xc9, 0x83, 0x77, 0x05, 0x3f, + 0xa7, 0x3d, 0x36, 0x9f, 0xe9, 0xb1, 0x3a, 0xe4, 0x1c, 0x9f, 0x5d, 0x96, 0x6a, 0xbb, 0x5f, 0xdc, + 0x74, 0x15, 0x9a, 0x6f, 0xe4, 0x1c, 0x9f, 0xee, 0x69, 0xe4, 0x06, 0x17, 0xac, 0xde, 0xbf, 0xc5, + 0x9e, 0x9e, 0xb8, 0xc1, 0x85, 0xc1, 0x90, 0x68, 0x45, 0xb5, 0x92, 0xf8, 0x2c, 0x08, 0x9d, 0x3f, 0xf2, 0x27, 0x29, 0x6d, 0xe1, 0xbc, 0x65, 0xa0, 0x05, 0xc1, 0x71, 0xe8, 0xd2, 0xe2, 0x16, 0x07, - 0x2f, 0x09, 0x57, 0xe2, 0x9d, 0x43, 0x61, 0x0c, 0x2a, 0x64, 0xef, 0x84, 0x60, 0x42, 0x22, 0xd6, + 0xaf, 0x08, 0x57, 0xe2, 0x9d, 0x43, 0x61, 0x0c, 0x2a, 0x64, 0xef, 0x84, 0x60, 0x42, 0x22, 0xd6, 0x37, 0xd6, 0x7b, 0x27, 0x50, 0x33, 0x43, 0x98, 0xe3, 0xf1, 0xc2, 0x85, 0x8d, 0xbf, 0x63, 0x0f, - 0x6f, 0xba, 0xd5, 0xff, 0xc3, 0xd5, 0xed, 0x29, 0xc8, 0x34, 0x68, 0x30, 0x82, 0x8d, 0xc1, 0xf3, - 0x5e, 0xdb, 0xd4, 0x3a, 0x5f, 0xb5, 0x8e, 0xb4, 0x03, 0xf4, 0x1e, 0xae, 0x01, 0x30, 0xce, 0x5e, - 0xab, 0xaf, 0xed, 0x23, 0x69, 0xa6, 0xd1, 0xea, 0x69, 0xe6, 0xd3, 0xf6, 0x73, 0x94, 0xc3, 0xb7, - 0xa0, 0xc2, 0x38, 0xdd, 0xd6, 0xf1, 0xe0, 0xc9, 0x2e, 0xca, 0x37, 0x3e, 0x85, 0x9c, 0xe6, 0x53, + 0x6f, 0xba, 0xd5, 0xff, 0xc3, 0xd5, 0xed, 0x19, 0xc8, 0x34, 0x68, 0x30, 0x82, 0x8d, 0xc1, 0x8b, + 0x5e, 0xdb, 0xd4, 0x3a, 0x5f, 0xb6, 0x8e, 0xb4, 0x03, 0xf4, 0x1e, 0xae, 0x01, 0x30, 0xce, 0x5e, + 0xab, 0xaf, 0xed, 0x23, 0x69, 0xa6, 0xd1, 0xea, 0x69, 0xe6, 0xb3, 0xf6, 0x0b, 0x94, 0xc3, 0xb7, + 0xa0, 0xc2, 0x38, 0xdd, 0xd6, 0xf1, 0xe0, 0xe9, 0x2e, 0xca, 0x37, 0x3e, 0x85, 0x9c, 0xe6, 0x53, 0x43, 0xad, 0x93, 0x01, 0xda, 0x00, 0x45, 0xeb, 0x98, 0xbf, 0x3d, 0x6e, 0x1b, 0xb4, 0x46, 0x56, - 0xa1, 0xac, 0x75, 0xcc, 0x27, 0xed, 0xd6, 0x41, 0xdb, 0x40, 0xb9, 0xc6, 0x37, 0x20, 0x53, 0x07, - 0x53, 0xf4, 0x2f, 0x8f, 0xba, 0x27, 0x19, 0xb3, 0xdb, 0x50, 0xe5, 0x9c, 0x67, 0xbd, 0x23, 0x6d, - 0x5f, 0x1b, 0x20, 0x69, 0xc6, 0xea, 0xb5, 0xfa, 0xfd, 0x93, 0xae, 0x71, 0x80, 0x72, 0x78, 0x13, - 0x10, 0x63, 0xb5, 0x7a, 0x54, 0xab, 0x35, 0xd0, 0xba, 0x1d, 0x94, 0x9f, 0x73, 0xf7, 0xf7, 0xdb, - 0xfd, 0xbe, 0xb9, 0xdf, 0x3d, 0x68, 0x23, 0xb9, 0xf1, 0xaf, 0xdc, 0xbc, 0xda, 0x64, 0xde, 0xe7, - 0xf8, 0x4f, 0x52, 0xe6, 0xcb, 0x62, 0x38, 0x17, 0x88, 0xd2, 0x73, 0xfc, 0x26, 0x8f, 0xff, 0x65, - 0x3c, 0xee, 0xdc, 0xd9, 0x27, 0xc7, 0x8c, 0xa4, 0xfe, 0x09, 0xa8, 0x4b, 0x0c, 0x98, 0xd7, 0x68, - 0x0f, 0x64, 0x41, 0x27, 0x3e, 0x21, 0x71, 0xa2, 0xfe, 0x9d, 0xb4, 0xd4, 0xe4, 0x55, 0x11, 0xf2, - 0x72, 0x31, 0x42, 0xde, 0xfa, 0xde, 0xae, 0x05, 0xd8, 0x5f, 0x24, 0x7a, 0xad, 0x66, 0xb9, 0xd2, + 0xa1, 0xac, 0x75, 0xcc, 0xa7, 0xed, 0xd6, 0x41, 0xdb, 0x40, 0xb9, 0xc6, 0xd7, 0x20, 0x53, 0x07, + 0x53, 0xf4, 0x27, 0x47, 0xdd, 0x93, 0x8c, 0xd9, 0x6d, 0xa8, 0x72, 0xce, 0xf3, 0xde, 0x91, 0xb6, + 0xaf, 0x0d, 0x90, 0x34, 0x63, 0xf5, 0x5a, 0xfd, 0xfe, 0x49, 0xd7, 0x38, 0x40, 0x39, 0xbc, 0x09, + 0x88, 0xb1, 0x5a, 0x3d, 0xaa, 0xd5, 0x1a, 0x68, 0xdd, 0x0e, 0xca, 0xcf, 0xb9, 0xfb, 0xfb, 0xed, + 0x7e, 0xdf, 0xdc, 0xef, 0x1e, 0xb4, 0x91, 0xdc, 0xf8, 0x57, 0x6e, 0x5e, 0x6d, 0x32, 0xef, 0x73, + 0xfc, 0x27, 0x29, 0xf3, 0x65, 0x31, 0x9c, 0x0b, 0x44, 0xe9, 0x39, 0x7e, 0x9b, 0xc7, 0xff, 0x32, + 0x1e, 0x77, 0xee, 0xec, 0x93, 0x63, 0x46, 0x52, 0xff, 0x04, 0xd4, 0x25, 0x06, 0xcc, 0x6b, 0xb4, + 0x07, 0xb2, 0xa0, 0x13, 0x9f, 0x90, 0x38, 0x51, 0xff, 0x56, 0x5a, 0x6a, 0xf2, 0xba, 0x08, 0x79, + 0xb5, 0x18, 0x21, 0xdf, 0xf9, 0xde, 0xae, 0x05, 0xd8, 0x5f, 0x24, 0x7a, 0xad, 0x66, 0xb9, 0xd2, 0xcb, 0x6e, 0xa0, 0xb2, 0x4e, 0x7d, 0x61, 0xf6, 0xfc, 0x87, 0x1f, 0x9e, 0xd8, 0xfc, 0xe7, 0x00, - 0x73, 0xe6, 0x3a, 0x4f, 0xdc, 0xbd, 0xfd, 0xdf, 0xb5, 0xc6, 0x4e, 0x7c, 0x96, 0x9c, 0x36, 0xed, - 0xc0, 0xdb, 0xa1, 0x0b, 0x79, 0x4c, 0xec, 0x20, 0x9a, 0x46, 0x31, 0x11, 0xa4, 0x58, 0xd7, 0xce, - 0xab, 0xff, 0x8e, 0x38, 0x2d, 0x32, 0xd9, 0x67, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xbc, - 0xdd, 0xdd, 0xb3, 0x18, 0x00, 0x00, + 0x73, 0xe6, 0x3a, 0x4f, 0xdc, 0xbd, 0x27, 0xbf, 0x3b, 0x18, 0x3b, 0xf1, 0x59, 0x72, 0xda, 0xb4, + 0x03, 0x6f, 0x87, 0x2e, 0xe4, 0x31, 0xb1, 0x83, 0x68, 0x1a, 0xc5, 0x44, 0x90, 0x62, 0x5d, 0x3b, + 0xe7, 0xbb, 0x3b, 0xaf, 0xff, 0x47, 0xe2, 0xb4, 0xc8, 0x64, 0x9f, 0xfd, 0x37, 0x00, 0x00, 0xff, + 0xff, 0x7d, 0x3e, 0x75, 0xef, 0xb6, 0x18, 0x00, 0x00, } diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 3dcac4d99ff..0af2ed112cd 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package grpc.gateway.protoc_gen_swagger.options; -option go_package = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options"; import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index c4d18f624a8..77ab42bd7bb 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -23,7 +23,7 @@ go_library( "proto_errors.go", "query.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ "//internal:go_default_library", "//utilities:go_default_library", diff --git a/runtime/context_test.go b/runtime/context_test.go index 93e28eca103..0d358016a46 100644 --- a/runtime/context_test.go +++ b/runtime/context_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc/metadata" ) diff --git a/runtime/convert_test.go b/runtime/convert_test.go index ffbc0a56553..4e61f0553ba 100644 --- a/runtime/convert_test.go +++ b/runtime/convert_test.go @@ -9,7 +9,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/timestamp" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) func TestConvertTimestamp(t *testing.T) { diff --git a/runtime/errors.go b/runtime/errors.go index 65a5dc690d4..c95e4264bc4 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -5,7 +5,7 @@ import ( "io" "net/http" - "github.com/grpc-ecosystem/grpc-gateway/internal" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" diff --git a/runtime/errors_test.go b/runtime/errors_test.go index b4ce93f3f16..afd289aebac 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/runtime/handler.go b/runtime/handler.go index 2c62382ef08..f058ba4cb71 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -9,7 +9,7 @@ import ( "net/textproto" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/internal" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "google.golang.org/grpc/grpclog" ) diff --git a/runtime/handler_test.go b/runtime/handler_test.go index ea369add028..bf2a9e922c6 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -9,9 +9,9 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/internal" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - pb "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + pb "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel index 0d36f524d8e..9eafd444acd 100644 --- a/runtime/internal/examplepb/BUILD.bazel +++ b/runtime/internal/examplepb/BUILD.bazel @@ -17,7 +17,7 @@ proto_library( go_proto_library( name = "examplepb_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb", proto = ":examplepb_proto", deps = [ "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep @@ -27,5 +27,5 @@ go_proto_library( go_library( name = "go_default_library", embed = [":examplepb_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb", ) diff --git a/runtime/marshal_httpbodyproto_test.go b/runtime/marshal_httpbodyproto_test.go index 1f07022770a..331fd28d3d7 100644 --- a/runtime/marshal_httpbodyproto_test.go +++ b/runtime/marshal_httpbodyproto_test.go @@ -4,7 +4,7 @@ import ( "bytes" "testing" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/googleapis/api/httpbody" ) diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index e7610cead8c..1339f928155 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -12,8 +12,8 @@ import ( structpb "github.com/golang/protobuf/ptypes/struct" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" ) func TestJSONBuiltinMarshal(t *testing.T) { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 19d5bc8fb0e..f0b5911d44d 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -14,8 +14,8 @@ import ( structpb "github.com/golang/protobuf/ptypes/struct" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" ) func TestJSONPbMarshal(t *testing.T) { diff --git a/runtime/marshal_proto_test.go b/runtime/marshal_proto_test.go index d653aca653a..131918c12d8 100644 --- a/runtime/marshal_proto_test.go +++ b/runtime/marshal_proto_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/timestamp" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" ) var message = &examplepb.ABitOfEverything{ diff --git a/runtime/marshaler_registry_test.go b/runtime/marshaler_registry_test.go index 194de6fee11..763a0f64949 100644 --- a/runtime/marshaler_registry_test.go +++ b/runtime/marshaler_registry_test.go @@ -6,7 +6,7 @@ import ( "net/http" "testing" - "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" ) func TestMarshalerForRequest(t *testing.T) { diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 23243d8f3a4..0672f271e22 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -8,8 +8,8 @@ import ( "net/http/httptest" "testing" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/runtime/pattern.go b/runtime/pattern.go index 09053695da7..a717ef6f1c2 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc/grpclog" ) diff --git a/runtime/pattern_test.go b/runtime/pattern_test.go index 8f5a664aba5..1b856a512a4 100644 --- a/runtime/pattern_test.go +++ b/runtime/pattern_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" ) const ( diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index ea75565868d..9a46f50d00b 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/internal" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" diff --git a/runtime/query.go b/runtime/query.go index ba66842c330..13e563cf909 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -11,7 +11,7 @@ import ( "time" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc/grpclog" ) diff --git a/runtime/query_test.go b/runtime/query_test.go index e35904df2a7..8b20c40edc5 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -13,8 +13,8 @@ import ( "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/genproto/protobuf/field_mask" ) diff --git a/utilities/BUILD.bazel b/utilities/BUILD.bazel index 7109d793231..6bb7df467fb 100644 --- a/utilities/BUILD.bazel +++ b/utilities/BUILD.bazel @@ -10,7 +10,7 @@ go_library( "readerfactory.go", "trie.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/utilities", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/utilities", ) go_test( diff --git a/utilities/trie_test.go b/utilities/trie_test.go index 0178aa827a0..615aafb2458 100644 --- a/utilities/trie_test.go +++ b/utilities/trie_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - "github.com/grpc-ecosystem/grpc-gateway/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" ) func TestMaxCommonPrefix(t *testing.T) { From 71e83c868f05f2077c56661b5e4d2e4a16d905c8 Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 15:51:18 +0530 Subject: [PATCH 0302/1518] docs: fix some broken links --- docs/_docs/examples.md | 2 +- docs/_docs/usage.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/_docs/examples.md b/docs/_docs/examples.md index e8d5f4c77ae..81003500600 100644 --- a/docs/_docs/examples.md +++ b/docs/_docs/examples.md @@ -12,6 +12,6 @@ Examples are available under `examples/internal` directory. * `server/main.go`: service implementation * `main.go`: entrypoint of the generated reverse proxy -To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)) +To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 02eed3d1e0e..924c3467c5e 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -68,7 +68,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` - See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) + See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated Swagger output. @@ -201,8 +201,8 @@ output (for example, `json_names_for_fields` to output JSON names for fields instead of protobuf names). Run `protoc-gen-swagger --help` for more flag details. Further Swagger customization is possible by annotating your `.proto` files with options from -[openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see -[a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) +[openapiv2.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/protoc-gen-swagger/options/openapiv2.proto) - see +[a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. # Mapping gRPC to HTTP From e49ee61afb9408bf1a8d334a0fce825414eaf2ff Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 15:58:22 +0530 Subject: [PATCH 0303/1518] docs: fix wire guide link --- docs/_docs/features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/features.md b/docs/_docs/features.md index 0bae3608cbb..1bead42e17e 100644 --- a/docs/_docs/features.md +++ b/docs/_docs/features.md @@ -13,7 +13,7 @@ category: documentation * Mapping streaming APIs to newline-delimited JSON streams * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definition for [Swagger](http://swagger.io). -* Setting [gRPC timeouts](http://www.grpc.io/docs/guides/wire.html) through inbound HTTP `Grpc-Timeout` header. +* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) through inbound HTTP `Grpc-Timeout` header. * Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) files as an alternative to annotation. ## Want to support From f4db4a3259acbb6bf3aa1a1520842fc21d00cb27 Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 18:29:17 +0530 Subject: [PATCH 0304/1518] docs: change godoc.org links to pkg.go.dev --- README.md | 2 +- docs/_docs/customizingyourgateway.md | 18 +++++++++--------- docs/_docs/faq.md | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index fa18d4021a8..9bc7caf80d9 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,7 @@ header. * HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`). * While configurable, the default {un,}marshaling uses -[jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with +[jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with `OrigName: true`. # Contribution diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 6009bff9d7f..86e0f8d06fa 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -11,8 +11,8 @@ order: 101 You might want to serialize request/response messages in MessagePack instead of JSON, for example. -1. Write a custom implementation of [`Marshaler`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#Marshaler) -2. Register your marshaler with [`WithMarshalerOption`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithMarshalerOption) +1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) +2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) e.g. ```go var m your.MsgPackMarshaler @@ -78,10 +78,10 @@ Note that this will conflict with any methods having input messages with fields also, this example code does not remove the query parameter `pretty` from further processing. ## Mapping from HTTP request headers to gRPC client metadata -You might not like [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. +You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. -1. Write a [`HeaderMatcherFunc`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#HeaderMatcherFunc). -2. Register the function with [`WithIncomingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithIncomingHeaderMatcher) +1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). +2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) e.g. ```go @@ -99,7 +99,7 @@ You might not like [the default mapping rule](http://godoc.org/github.com/grpc-e mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) ``` -To keep the [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) alongside with your own rules write: +To keep the [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write: ```go func CustomMatcher(key string) (string, bool) { @@ -133,7 +133,7 @@ if md, ok := metadata.FromIncomingContext(ctx); ok { ``` ## Mapping from gRPC server metadata to HTTP response headers -ditto. Use [`WithOutgoingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithOutgoingHeaderMatcher). +ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) for more info on sending / receiving gRPC metadata. @@ -166,7 +166,7 @@ Or you might want to mutate the response messages to be returned. return nil } ``` -2. Register the filter with [`WithForwardResponseOption`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithForwardResponseOption) +2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) e.g. ```go @@ -323,7 +323,7 @@ the source error has no gRPC attributes). ## Replace a response forwarder per method You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. -1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ForwardResponseMessage) or [`ForwardResponseStream`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ForwardResponseStream). +1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseMessage) or [`ForwardResponseStream`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseStream). 2. replace the default forwarder of the method with your one. e.g. add `forwarder_overwrite.go` into the go package of the generated code, diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index 35307c66424..bb62fabf446 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -16,7 +16,7 @@ See the question above at first. Grpc-gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So grpc-gateway itself does not always cover all the use cases you have by design. In other words, grpc-gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. -On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. +On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/main.go ## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? From d0825347f1509e3685a661e0ed1b7b09f2362bf0 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 19 Apr 2020 00:24:45 +0100 Subject: [PATCH 0305/1518] CI: fix the gorelease base for v2 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 54756aa2433..f395d1f9f15 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -97,7 +97,7 @@ jobs: cd $(mktemp -d) && go mod init tmp && go get golang.org/x/exp/cmd/gorelease@latest - - run: gorelease + - run: gorelease -base=v2.0.0-alpha.2 release: docker: - image: jfbrandhorst/grpc-gateway-build-env:1.14 From 8149a92e8ccad7646b4277b7e6b3915f83b8eb88 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 19 Apr 2020 00:35:58 +0100 Subject: [PATCH 0306/1518] Update README badge links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 16a120a299a..93e453927fb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # grpc-gateway -[![release](https://img.shields.io/github/release/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway) [![fuzzit](https://app.fuzzit.dev/badge?org_id=grpc-gateway)](https://app.fuzzit.dev/orgs/grpc-gateway/dashboard) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) +[![release](https://img.shields.io/github/v/release/grpc-ecosystem/grpc-gateway?include_prereleases&sort=semver&style=flat-square)](https://github.com/grpc-ecosystem/grpc-gateway/releases) [![CircleCI](https://img.shields.io/circleci/project/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://circleci.com/gh/grpc-ecosystem/grpc-gateway/tree/v2) [![fuzzit](https://app.fuzzit.dev/badge?org_id=grpc-gateway)](https://app.fuzzit.dev/orgs/grpc-gateway/dashboard) [![coverage](https://img.shields.io/codecov/c/github/grpc-ecosystem/grpc-gateway/v2.svg?style=flat-square)](https://codecov.io/gh/grpc-ecosystem/grpc-gateway) [![license](https://img.shields.io/github/license/grpc-ecosystem/grpc-gateway.svg?style=flat-square)](LICENSE.txt) The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). @@ -174,7 +174,7 @@ annotation to your .proto file "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" - + gw "github.com/yourorg/yourrepo/proto/gen/go/your/service/v1/your_service" // Update ) From e52d05c460b6d805b0db5fbbe11363b302637d6a Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 18:29:17 +0530 Subject: [PATCH 0307/1518] docs: change godoc.org links to pkg.go.dev --- README.md | 2 +- docs/_docs/customizingyourgateway.md | 18 +++++++++--------- docs/_docs/faq.md | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 93e453927fb..9f51abeea38 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,7 @@ header. * HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (prefixed with `grpcgateway-`). * While configurable, the default {un,}marshaling uses -[jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with +[jsonpb](https://pkg.go.dev/github.com/golang/protobuf/jsonpb) with `OrigName: true`. # Contribution diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 6009bff9d7f..86e0f8d06fa 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -11,8 +11,8 @@ order: 101 You might want to serialize request/response messages in MessagePack instead of JSON, for example. -1. Write a custom implementation of [`Marshaler`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#Marshaler) -2. Register your marshaler with [`WithMarshalerOption`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithMarshalerOption) +1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) +2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) e.g. ```go var m your.MsgPackMarshaler @@ -78,10 +78,10 @@ Note that this will conflict with any methods having input messages with fields also, this example code does not remove the query parameter `pretty` from further processing. ## Mapping from HTTP request headers to gRPC client metadata -You might not like [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. +You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. -1. Write a [`HeaderMatcherFunc`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#HeaderMatcherFunc). -2. Register the function with [`WithIncomingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithIncomingHeaderMatcher) +1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). +2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) e.g. ```go @@ -99,7 +99,7 @@ You might not like [the default mapping rule](http://godoc.org/github.com/grpc-e mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) ``` -To keep the [the default mapping rule](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#DefaultHeaderMatcher) alongside with your own rules write: +To keep the [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write: ```go func CustomMatcher(key string) (string, bool) { @@ -133,7 +133,7 @@ if md, ok := metadata.FromIncomingContext(ctx); ok { ``` ## Mapping from gRPC server metadata to HTTP response headers -ditto. Use [`WithOutgoingHeaderMatcher`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithOutgoingHeaderMatcher). +ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) for more info on sending / receiving gRPC metadata. @@ -166,7 +166,7 @@ Or you might want to mutate the response messages to be returned. return nil } ``` -2. Register the filter with [`WithForwardResponseOption`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#WithForwardResponseOption) +2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) e.g. ```go @@ -323,7 +323,7 @@ the source error has no gRPC attributes). ## Replace a response forwarder per method You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. -1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ForwardResponseMessage) or [`ForwardResponseStream`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ForwardResponseStream). +1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseMessage) or [`ForwardResponseStream`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseStream). 2. replace the default forwarder of the method with your one. e.g. add `forwarder_overwrite.go` into the go package of the generated code, diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index 35307c66424..bb62fabf446 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -16,7 +16,7 @@ See the question above at first. Grpc-gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So grpc-gateway itself does not always cover all the use cases you have by design. In other words, grpc-gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. -On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](http://godoc.org/github.com/grpc-ecosystem/grpc-gateway/runtime#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. +On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/main.go ## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? From 8166034d5510ef987b9ae8c56099fa5cd235a0fb Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 19 Apr 2020 15:09:20 +0100 Subject: [PATCH 0308/1518] Fix testproto generation, add to CI There was an incorrect Makefile string substitution --- .circleci/config.yml | 1 + CONTRIBUTING.md | 3 ++- Makefile | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 54756aa2433..c5529e0a622 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,6 +38,7 @@ jobs: - checkout - run: make realclean - run: make examples + - run: make testproto - run: go mod tidy - run: git diff --exit-code lint: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2112b53621..e65225089f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,7 +28,8 @@ Great, it should be as simple as thus (run from the root of the directory): docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ - make examples' + make examples && \ + make testproto' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ diff --git a/Makefile b/Makefile index 09222f9aaea..4fd2939005f 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,7 @@ EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/ EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto -RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=pb.go) +RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) EXAMPLE_CLIENT_DIR=examples/internal/clients ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json From ca41473f0a1235ea52d100411b7026f2484935df Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 15:51:18 +0530 Subject: [PATCH 0309/1518] docs: fix some broken links --- docs/_docs/examples.md | 2 +- docs/_docs/usage.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/_docs/examples.md b/docs/_docs/examples.md index e8d5f4c77ae..81003500600 100644 --- a/docs/_docs/examples.md +++ b/docs/_docs/examples.md @@ -12,6 +12,6 @@ Examples are available under `examples/internal` directory. * `server/main.go`: service implementation * `main.go`: entrypoint of the generated reverse proxy -To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/gRPC-protobufs-swagger.html)) +To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 02eed3d1e0e..924c3467c5e 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -68,7 +68,7 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. } ``` - See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) + See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated Swagger output. @@ -201,8 +201,8 @@ output (for example, `json_names_for_fields` to output JSON names for fields instead of protobuf names). Run `protoc-gen-swagger --help` for more flag details. Further Swagger customization is possible by annotating your `.proto` files with options from -[openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see -[a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) +[openapiv2.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/protoc-gen-swagger/options/openapiv2.proto) - see +[a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. # Mapping gRPC to HTTP From 11da20e69aa5b63ff68379d2afaca09e975a0e71 Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Sun, 19 Apr 2020 15:58:22 +0530 Subject: [PATCH 0310/1518] docs: fix wire guide link --- docs/_docs/features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/features.md b/docs/_docs/features.md index 0bae3608cbb..1bead42e17e 100644 --- a/docs/_docs/features.md +++ b/docs/_docs/features.md @@ -13,7 +13,7 @@ category: documentation * Mapping streaming APIs to newline-delimited JSON streams * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definition for [Swagger](http://swagger.io). -* Setting [gRPC timeouts](http://www.grpc.io/docs/guides/wire.html) through inbound HTTP `Grpc-Timeout` header. +* Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) through inbound HTTP `Grpc-Timeout` header. * Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) files as an alternative to annotation. ## Want to support From 67246c6b822b91a64e574b1773dbfd6f174b3827 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Mon, 20 Apr 2020 10:28:45 +0100 Subject: [PATCH 0311/1518] Merge pull request #1214 from grpc-ecosystem/add-season-of-docs Add season of docs project ideas page --- docs/_docs/season_of_docs.md | 114 +++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/_docs/season_of_docs.md diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md new file mode 100644 index 00000000000..a0d22c5b529 --- /dev/null +++ b/docs/_docs/season_of_docs.md @@ -0,0 +1,114 @@ +--- +category: documentation +--- + +# 2020 Season of Docs + +![Google Season of Docs](https://developers.google.com/season-of-docs/images/logo/SeasonofDocs_Logo_SecondaryGrey_300ppi.png "Season of Docs") + +This year the gRPC-Gateway is participating in the [Google Season of Docs](https://g.co/seasonofdocs). +We're excited to see what contributions this will bring to our documentation. + +## Project details + + - Organization name: **gRPC-Gateway** + - Organization description: The gRPC-Gateway brings the power and safety + of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several + common use cases: + - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. + - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. + - When quickly iterating on an JSON/HTTP API design. + - Website: https://grpc-ecosystem.github.io/grpc-gateway + - Repo: https://github.com/grpc-ecosystem/grpc-gateway + - Project administrators and mentors: + - Johan Brandhorst (@johanbrandhorst) + - Andrew Z Allen (@achew22) + +## Project Ideas + +### Refactor the existing docs site + +Our existing docs site (this site!) is decidedly starting to look a bit dated. We'd love to +have a new version with some updated styling and a better structure. The existing content +could be preserved and just reused with a fresh new look, or we could rewrite much of it. + +It's currently rendered from Markdown using [Jekyll](https://jekyllrb.com/). +[The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) +for the site is part of the main repo. + +We the best way to do this would be to have someone who is unfamiliar with the project +try to use the current material and note anything that was unclear and that they couldn't +easily find with our existing docs. + +Material: + - [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) + - [Jekyll](https://jekyllrb.com/) which powers the site now. + - [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. + - [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which + contains an intro to the project. + +### Rewrite the README with a better intro and examples + +The README has evolved since the start of the project and could do with a rewrite from +first principles. The README is the first thing our prospective users see, and it should +quickly and concisely answer the most important questions for our users. + + - What problems can the gRPC-Gateway solve? + - How do I use the gRPC-Gateway? + - What does a complete example look like? + - Where can I find more information about using it? + - Where can I learn more about the technologies the gRPC-Gateway is built on? + - How do I submit an issue report or get help? + +Material: + - [The current README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md). + +### Create a tutorial for the docs site + +We'd like to be able to point to a tutorial for one of the common use cases of the project. +The ones mentioned in the project details are the primary use cases we advertise: + + - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. + - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. + - When quickly iterating on an JSON/HTTP API design. + +It could be a single or several blog posts on our docs site, or another site, like medium. + +### Improve the "customize your gateway" section of the docs + +This is where we've collected a lot of the little tips we've developed with +users that don't quite fit in the main README or documentation. It would be great +to have a look over this and add detail where possible and generally structure it +a bit better. Maybe it could be rewritten as a FAQ that details solutions to common issues? + +Material: + - [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) + +### Improve the contributors guide + +This is currently split between +[CONTRIBUTING.md] +and the [issue template](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/ISSUE_TEMPLATE.md). +Both of these are a little ad-hoc and could do with a fresh pair of eyes. + +Material: + - [Current CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CHANGELOG.md) + - [Current issue template](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/ISSUE_TEMPLATE.md) + +### Write a v2.0.0 migration guide + +We're planning on making a v2 release of the project, which will have some backwards-compatibility breaking changes. +We need to write a migration guide so that users know what to expect when upgrading their deployments. + +This should include: + + - A list of all the breaking changes and their consequences for the user. + - For each breaking change, a guide to how their systems may need to be changed. + +Currently the scope of the v2 release is not entirely known, as it is still in progress, but we will +endavour not to make too many breaking changes as that will discourage users from upgrading. + +Material: + - [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) From dcd40f08fb43ecb372d90d56eb28a17d01e378a8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 18 Apr 2020 12:13:03 +0100 Subject: [PATCH 0312/1518] Add Season of Docs project ideas page --- docs/_docs/season_of_docs.md | 114 +++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/_docs/season_of_docs.md diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md new file mode 100644 index 00000000000..a0d22c5b529 --- /dev/null +++ b/docs/_docs/season_of_docs.md @@ -0,0 +1,114 @@ +--- +category: documentation +--- + +# 2020 Season of Docs + +![Google Season of Docs](https://developers.google.com/season-of-docs/images/logo/SeasonofDocs_Logo_SecondaryGrey_300ppi.png "Season of Docs") + +This year the gRPC-Gateway is participating in the [Google Season of Docs](https://g.co/seasonofdocs). +We're excited to see what contributions this will bring to our documentation. + +## Project details + + - Organization name: **gRPC-Gateway** + - Organization description: The gRPC-Gateway brings the power and safety + of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several + common use cases: + - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. + - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. + - When quickly iterating on an JSON/HTTP API design. + - Website: https://grpc-ecosystem.github.io/grpc-gateway + - Repo: https://github.com/grpc-ecosystem/grpc-gateway + - Project administrators and mentors: + - Johan Brandhorst (@johanbrandhorst) + - Andrew Z Allen (@achew22) + +## Project Ideas + +### Refactor the existing docs site + +Our existing docs site (this site!) is decidedly starting to look a bit dated. We'd love to +have a new version with some updated styling and a better structure. The existing content +could be preserved and just reused with a fresh new look, or we could rewrite much of it. + +It's currently rendered from Markdown using [Jekyll](https://jekyllrb.com/). +[The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) +for the site is part of the main repo. + +We the best way to do this would be to have someone who is unfamiliar with the project +try to use the current material and note anything that was unclear and that they couldn't +easily find with our existing docs. + +Material: + - [The current site](https://grpc-ecosystem.github.io/grpc-gateway/) + - [Jekyll](https://jekyllrb.com/) which powers the site now. + - [The source code](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/docs) for the site today. + - [The project README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md) which + contains an intro to the project. + +### Rewrite the README with a better intro and examples + +The README has evolved since the start of the project and could do with a rewrite from +first principles. The README is the first thing our prospective users see, and it should +quickly and concisely answer the most important questions for our users. + + - What problems can the gRPC-Gateway solve? + - How do I use the gRPC-Gateway? + - What does a complete example look like? + - Where can I find more information about using it? + - Where can I learn more about the technologies the gRPC-Gateway is built on? + - How do I submit an issue report or get help? + +Material: + - [The current README](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/README.md). + +### Create a tutorial for the docs site + +We'd like to be able to point to a tutorial for one of the common use cases of the project. +The ones mentioned in the project details are the primary use cases we advertise: + + - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API + to old users. + - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. + - When quickly iterating on an JSON/HTTP API design. + +It could be a single or several blog posts on our docs site, or another site, like medium. + +### Improve the "customize your gateway" section of the docs + +This is where we've collected a lot of the little tips we've developed with +users that don't quite fit in the main README or documentation. It would be great +to have a look over this and add detail where possible and generally structure it +a bit better. Maybe it could be rewritten as a FAQ that details solutions to common issues? + +Material: + - [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) + +### Improve the contributors guide + +This is currently split between +[CONTRIBUTING.md] +and the [issue template](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/ISSUE_TEMPLATE.md). +Both of these are a little ad-hoc and could do with a fresh pair of eyes. + +Material: + - [Current CONTRIBUTING.md](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CHANGELOG.md) + - [Current issue template](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/ISSUE_TEMPLATE.md) + +### Write a v2.0.0 migration guide + +We're planning on making a v2 release of the project, which will have some backwards-compatibility breaking changes. +We need to write a migration guide so that users know what to expect when upgrading their deployments. + +This should include: + + - A list of all the breaking changes and their consequences for the user. + - For each breaking change, a guide to how their systems may need to be changed. + +Currently the scope of the v2 release is not entirely known, as it is still in progress, but we will +endavour not to make too many breaking changes as that will discourage users from upgrading. + +Material: + - [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) From a56280a3a188572edb2d2a94e3269fb2265430c5 Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Tue, 21 Apr 2020 16:10:59 +0800 Subject: [PATCH 0313/1518] Fix query params for in-process local requests (#1212) * template query params bug * add test case for invoke in process gateway * fix bazel error --- .../internal/integration/integration_test.go | 10 ++++- examples/internal/integration/main_test.go | 7 +++- .../examplepb/a_bit_of_everything.pb.gw.go | 40 +++++++++++++++---- .../proto/examplepb/echo_service.pb.gw.go | 30 +++++++++++--- .../proto/examplepb/flow_combination.pb.gw.go | 40 +++++++++++++++---- .../examplepb/non_standard_names.pb.gw.go | 10 ++++- .../unannotated_echo_service.pb.gw.go | 15 +++++-- examples/internal/server/BUILD.bazel | 1 + examples/internal/server/main.go | 36 +++++++++++++++++ .../internal/gengateway/template.go | 7 +++- 10 files changed, 164 insertions(+), 32 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index def7703df8e..c8c236a84f2 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1660,13 +1660,19 @@ func testResponseStrings(t *testing.T, port int) { } func TestRequestQueryParams(t *testing.T) { + testRequestQueryParams(t, 8088) +} + +func TestRequestQueryParamsInProcessGateway(t *testing.T) { + testRequestQueryParams(t, 8089) +} + +func testRequestQueryParams(t *testing.T, port int) { if testing.Short() { t.Skip() return } - port := 8088 - formValues := url.Values{} formValues.Set("string_value", "hello-world") formValues.Add("repeated_string_value", "demo1") diff --git a/examples/internal/integration/main_test.go b/examples/internal/integration/main_test.go index 43a43d4022e..ba2ce5a27f4 100644 --- a/examples/internal/integration/main_test.go +++ b/examples/internal/integration/main_test.go @@ -57,7 +57,7 @@ func waitForGateway(ctx context.Context, port uint16) error { } func runServers(ctx context.Context) <-chan error { - ch := make(chan error, 2) + ch := make(chan error, 3) go func() { if err := server.Run(ctx, *network, *endpoint); err != nil { ch <- fmt.Errorf("cannot run grpc service: %v", err) @@ -68,6 +68,11 @@ func runServers(ctx context.Context) <-chan error { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() + go func() { + if err := server.RunInProcessGateway(ctx, ":8089"); err != nil { + ch <- fmt.Errorf("cannot run in process gateway service: %v", err) + } + }() return ch } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index cc444791c2a..321b5713a02 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -509,7 +509,10 @@ func local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshal protoReq.EnumValueAnnotation = NumericEnum(e) - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -752,7 +755,10 @@ func local_request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -853,7 +859,10 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1046,7 +1055,10 @@ func local_request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_GetQuery_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1565,7 +1577,10 @@ func local_request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler var protoReq sub.StringMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1880,7 +1895,10 @@ func local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Con return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1959,7 +1977,10 @@ func local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx c protoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e) - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -2044,7 +2065,10 @@ func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Co return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index eed383c2df6..0f492600bc2 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -91,7 +91,10 @@ func local_request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -182,7 +185,10 @@ func local_request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -305,7 +311,10 @@ func local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -428,7 +437,10 @@ func local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_3); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -497,7 +509,10 @@ func local_request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -564,7 +579,10 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti var protoReq SimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index ffad64a1eed..cb7a42c1630 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -318,7 +318,10 @@ func local_request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler r var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -459,7 +462,10 @@ func local_request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -544,7 +550,10 @@ func local_request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -613,7 +622,10 @@ func local_request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -682,7 +694,10 @@ func local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -789,7 +804,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -858,7 +876,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -943,7 +964,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index d3e79338163..deda9801566 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -87,7 +87,10 @@ func local_request_NonStandardService_Update_0(ctx context.Context, marshaler ru } } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_Update_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_Update_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -152,7 +155,10 @@ func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, } } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_UpdateWithJSONNames_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_UpdateWithJSONNames_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 8936c57c0aa..b084454972a 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -91,7 +91,10 @@ func local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -182,7 +185,10 @@ func local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -249,7 +255,10 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars var protoReq UnannotatedSimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 4615adb1494..e746d3c89d3 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//examples/internal/proto/examplepb:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", + "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", diff --git a/examples/internal/server/main.go b/examples/internal/server/main.go index 5f7912eff3e..fe52d4620b9 100644 --- a/examples/internal/server/main.go +++ b/examples/internal/server/main.go @@ -3,9 +3,11 @@ package server import ( "context" "net" + "net/http" "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/runtime" "google.golang.org/grpc" ) @@ -38,3 +40,37 @@ func Run(ctx context.Context, network, address string) error { }() return s.Serve(l) } + +// RunInProcessGateway starts the invoke in process http gateway. +func RunInProcessGateway(ctx context.Context, addr string, opts ...runtime.ServeMuxOption) error { + mux := runtime.NewServeMux(opts...) + + examples.RegisterEchoServiceHandlerServer(ctx, mux, newEchoServer()) + examples.RegisterFlowCombinationHandlerServer(ctx, mux, newFlowCombinationServer()) + examples.RegisterNonStandardServiceHandlerServer(ctx, mux, newNonStandardServer()) + + abe := newABitOfEverythingServer() + examples.RegisterABitOfEverythingServiceHandlerServer(ctx, mux, abe) + examples.RegisterStreamServiceHandlerServer(ctx, mux, abe) + examples.RegisterResponseBodyServiceHandlerServer(ctx, mux, newResponseBodyServer()) + + s := &http.Server{ + Addr: addr, + Handler: mux, + } + + go func() { + <-ctx.Done() + glog.Infof("Shutting down the http gateway server") + if err := s.Shutdown(context.Background()); err != nil { + glog.Errorf("Failed to shutdown http gateway server: %v", err) + } + }() + + if err := s.ListenAndServe(); err != http.ErrServerClosed { + glog.Errorf("Failed to listen and serve: %v", err) + return err + } + return nil + +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 6dd5fcf5968..2faf8a01d55 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -543,7 +543,10 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct {{end}} {{end}} {{if .HasQueryParam}} - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } {{end}} @@ -719,4 +722,4 @@ var ( {{end}} ) {{end}}`)) -) \ No newline at end of file +) From a1cc4623e000f78633ac96862ca9548e25836961 Mon Sep 17 00:00:00 2001 From: Hobo Chen Date: Tue, 21 Apr 2020 17:41:17 +0800 Subject: [PATCH 0314/1518] Fix query params for in-process requests (#1227) * template query params bug * add test case for invoke in process gateway * fix bazel error --- .../internal/integration/integration_test.go | 10 ++++- examples/internal/integration/main_test.go | 7 +++- .../examplepb/a_bit_of_everything.pb.gw.go | 40 +++++++++++++++---- .../proto/examplepb/echo_service.pb.gw.go | 30 +++++++++++--- .../proto/examplepb/flow_combination.pb.gw.go | 40 +++++++++++++++---- .../examplepb/non_standard_names.pb.gw.go | 10 ++++- .../unannotated_echo_service.pb.gw.go | 15 +++++-- examples/internal/server/BUILD.bazel | 1 + examples/internal/server/main.go | 36 +++++++++++++++++ .../internal/gengateway/template.go | 5 ++- 10 files changed, 163 insertions(+), 31 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 1bcb95618fc..9228ae4b832 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1660,13 +1660,19 @@ func testResponseStrings(t *testing.T, port int) { } func TestRequestQueryParams(t *testing.T) { + testRequestQueryParams(t, 8088) +} + +func TestRequestQueryParamsInProcessGateway(t *testing.T) { + testRequestQueryParams(t, 8089) +} + +func testRequestQueryParams(t *testing.T, port int) { if testing.Short() { t.Skip() return } - port := 8088 - formValues := url.Values{} formValues.Set("string_value", "hello-world") formValues.Add("repeated_string_value", "demo1") diff --git a/examples/internal/integration/main_test.go b/examples/internal/integration/main_test.go index 2415528544c..033b7cdd587 100644 --- a/examples/internal/integration/main_test.go +++ b/examples/internal/integration/main_test.go @@ -57,7 +57,7 @@ func waitForGateway(ctx context.Context, port uint16) error { } func runServers(ctx context.Context) <-chan error { - ch := make(chan error, 2) + ch := make(chan error, 3) go func() { if err := server.Run(ctx, *network, *endpoint); err != nil { ch <- fmt.Errorf("cannot run grpc service: %v", err) @@ -68,6 +68,11 @@ func runServers(ctx context.Context) <-chan error { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() + go func() { + if err := server.RunInProcessGateway(ctx, ":8089"); err != nil { + ch <- fmt.Errorf("cannot run in process gateway service: %v", err) + } + }() return ch } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index a4540f8fd9e..fe750204c13 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -509,7 +509,10 @@ func local_request_ABitOfEverythingService_Create_0(ctx context.Context, marshal protoReq.EnumValueAnnotation = NumericEnum(e) - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Create_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Create_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -752,7 +755,10 @@ func local_request_ABitOfEverythingService_UpdateV2_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -853,7 +859,10 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "abe.uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_UpdateV2_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_UpdateV2_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1046,7 +1055,10 @@ func local_request_ABitOfEverythingService_GetQuery_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uuid", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_GetQuery_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_GetQuery_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1565,7 +1577,10 @@ func local_request_ABitOfEverythingService_Echo_2(ctx context.Context, marshaler var protoReq sub.StringMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1880,7 +1895,10 @@ func local_request_ABitOfEverythingService_CheckGetQueryParams_0(ctx context.Con return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "single_nested.name", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckGetQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -1959,7 +1977,10 @@ func local_request_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0(ctx c protoReq.SingleNested.Ok = ABitOfEverything_Nested_DeepEnum(e) - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -2044,7 +2065,10 @@ func local_request_ABitOfEverythingService_CheckPostQueryParams_0(ctx context.Co return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "string_value", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ABitOfEverythingService_CheckPostQueryParams_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 637413803db..6c1e47e3976 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -91,7 +91,10 @@ func local_request_EchoService_Echo_0(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -182,7 +185,10 @@ func local_request_EchoService_Echo_1(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -305,7 +311,10 @@ func local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -428,7 +437,10 @@ func local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_3); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -497,7 +509,10 @@ func local_request_EchoService_Echo_4(ctx context.Context, marshaler runtime.Mar return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_Echo_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_Echo_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -564,7 +579,10 @@ func local_request_EchoService_EchoDelete_0(ctx context.Context, marshaler runti var protoReq SimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_EchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index ab0ab3fbe99..d6a2846671a 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -318,7 +318,10 @@ func local_request_FlowCombination_RpcBodyRpc_2(ctx context.Context, marshaler r var protoReq NonEmptyProto var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -459,7 +462,10 @@ func local_request_FlowCombination_RpcBodyRpc_4(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -544,7 +550,10 @@ func local_request_FlowCombination_RpcBodyRpc_5(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -613,7 +622,10 @@ func local_request_FlowCombination_RpcBodyRpc_6(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcBodyRpc_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcBodyRpc_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -682,7 +694,10 @@ func local_request_FlowCombination_RpcPathSingleNestedRpc_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathSingleNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -789,7 +804,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "b", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -858,7 +876,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -943,7 +964,10 @@ func local_request_FlowCombination_RpcPathNestedRpc_2(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "a.str", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_FlowCombination_RpcPathNestedRpc_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_FlowCombination_RpcPathNestedRpc_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 084d2de741c..c053dfb0a71 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -87,7 +87,10 @@ func local_request_NonStandardService_Update_0(ctx context.Context, marshaler ru } } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_Update_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_Update_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -152,7 +155,10 @@ func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, } } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NonStandardService_UpdateWithJSONNames_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NonStandardService_UpdateWithJSONNames_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index bf82ff536ca..fc0df4b2235 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -91,7 +91,10 @@ func local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -182,7 +185,10 @@ func local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_Echo_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -249,7 +255,10 @@ func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, mars var protoReq UnannotatedSimpleMessage var metadata runtime.ServerMetadata - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_UnannotatedEchoService_EchoDelete_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 78f95a0a24e..ddd9d4424ed 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//examples/internal/proto/examplepb:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", + "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", diff --git a/examples/internal/server/main.go b/examples/internal/server/main.go index 932ae1b17df..4ceed0a9905 100644 --- a/examples/internal/server/main.go +++ b/examples/internal/server/main.go @@ -3,9 +3,11 @@ package server import ( "context" "net" + "net/http" "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" ) @@ -38,3 +40,37 @@ func Run(ctx context.Context, network, address string) error { }() return s.Serve(l) } + +// RunInProcessGateway starts the invoke in process http gateway. +func RunInProcessGateway(ctx context.Context, addr string, opts ...runtime.ServeMuxOption) error { + mux := runtime.NewServeMux(opts...) + + examples.RegisterEchoServiceHandlerServer(ctx, mux, newEchoServer()) + examples.RegisterFlowCombinationHandlerServer(ctx, mux, newFlowCombinationServer()) + examples.RegisterNonStandardServiceHandlerServer(ctx, mux, newNonStandardServer()) + + abe := newABitOfEverythingServer() + examples.RegisterABitOfEverythingServiceHandlerServer(ctx, mux, abe) + examples.RegisterStreamServiceHandlerServer(ctx, mux, abe) + examples.RegisterResponseBodyServiceHandlerServer(ctx, mux, newResponseBodyServer()) + + s := &http.Server{ + Addr: addr, + Handler: mux, + } + + go func() { + <-ctx.Done() + glog.Infof("Shutting down the http gateway server") + if err := s.Shutdown(context.Background()); err != nil { + glog.Errorf("Failed to shutdown http gateway server: %v", err) + } + }() + + if err := s.ListenAndServe(); err != http.ErrServerClosed { + glog.Errorf("Failed to listen and serve: %v", err) + return err + } + return nil + +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 983aba49d80..1ac8df8b9df 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -543,7 +543,10 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct {{end}} {{end}} {{if .HasQueryParam}} - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } {{end}} From 6e5ab560819645ca6141421c84b49a3e62a2572e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 21 Apr 2020 16:58:03 +0100 Subject: [PATCH 0315/1518] Fix generating helloworld.proto --- Makefile | 17 +- examples/internal/helloworld/BUILD.bazel | 2 +- examples/internal/helloworld/helloworld.pb.go | 91 +-- .../internal/helloworld/helloworld.pb.gw.go | 625 +++++++++++++++++- go.mod | 2 +- 5 files changed, 673 insertions(+), 64 deletions(-) diff --git a/Makefile b/Makefile index 4fd2939005f..354d34cf591 100644 --- a/Makefile +++ b/Makefile @@ -77,12 +77,17 @@ EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ examples/internal/proto/examplepb/use_go_template.proto \ examples/internal/proto/examplepb/response_body_service.proto +HELLOWORLD=examples/internal/helloworld/helloworld.proto + EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/proto/sub/message.proto examples/internal/proto/sub2/message.proto EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) +HELLOWORLD_SVCSRCS=$(HELLOWORLD:.proto=.pb.go) +HELLOWORLD_GWSRCS=$(HELLOWORLD:.proto=.pb.gw.go) + RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) @@ -171,6 +176,14 @@ $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_c $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) +$(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(HELLOWORLD) + +$(HELLOWORLD_GWSRCS): +$(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) + + $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ -l go -o examples/internal/clients/echo --additional-properties packageName=echo @@ -192,7 +205,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh -examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) +examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) testproto: $(RUNTIME_TEST_SRCS) test: examples testproto go test -short -race ./... @@ -230,6 +243,8 @@ realclean: distclean rm -f $(EXAMPLE_GWSRCS) rm -f $(EXAMPLE_SWAGGERSRCS) rm -f $(EXAMPLE_CLIENT_SRCS) + rm -f $(HELLOWORLD_SVCSRCS) + rm -f $(HELLOWORLD_GWSRCS) rm -f $(OPENAPIV2_GO) rm -f $(RUNTIME_TEST_SRCS) diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index d926aca22b9..0a72c0032d0 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -30,11 +30,11 @@ go_library( deps = [ "//runtime:go_default_library", "//utilities:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", - "@org_golang_x_net//context:go_default_library", ], ) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 9225dfd1f88..53780205a9d 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: helloworld.proto +// source: examples/internal/helloworld/helloworld.proto package helloworld @@ -10,6 +10,8 @@ import ( wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" math "math" ) @@ -22,7 +24,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type HelloRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -44,7 +46,7 @@ func (m *HelloRequest) Reset() { *m = HelloRequest{} } func (m *HelloRequest) String() string { return proto.CompactTextString(m) } func (*HelloRequest) ProtoMessage() {} func (*HelloRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_17b8c58d586b62f2, []int{0} + return fileDescriptor_fd8fde893e1fcf9f, []int{0} } func (m *HelloRequest) XXX_Unmarshal(b []byte) error { @@ -146,7 +148,7 @@ func (m *HelloReply) Reset() { *m = HelloReply{} } func (m *HelloReply) String() string { return proto.CompactTextString(m) } func (*HelloReply) ProtoMessage() {} func (*HelloReply) Descriptor() ([]byte, []int) { - return fileDescriptor_17b8c58d586b62f2, []int{1} + return fileDescriptor_fd8fde893e1fcf9f, []int{1} } func (m *HelloReply) XXX_Unmarshal(b []byte) error { @@ -179,40 +181,43 @@ func init() { proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") } -func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) } - -var fileDescriptor_17b8c58d586b62f2 = []byte{ - // 468 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x8a, 0xd4, 0x40, - 0x14, 0x85, 0xe9, 0xd8, 0xf6, 0x4f, 0x8d, 0x0b, 0x29, 0xa4, 0x09, 0xb1, 0x91, 0xa1, 0x17, 0x32, - 0xab, 0x04, 0x7a, 0x9a, 0x11, 0x5c, 0x0e, 0xe2, 0xcf, 0x36, 0x83, 0xb3, 0xe8, 0x5d, 0x85, 0xb9, - 0xd3, 0x06, 0x6a, 0x52, 0xb1, 0x7e, 0x1c, 0xc2, 0x90, 0x8d, 0x3b, 0x77, 0x82, 0xef, 0xe0, 0xeb, - 0xb8, 0x70, 0xe9, 0xd6, 0x07, 0x91, 0xba, 0xa9, 0x4a, 0x45, 0xc6, 0xb8, 0x4b, 0xe5, 0x9c, 0xef, - 0x9e, 0x4a, 0xee, 0x21, 0x8f, 0x3f, 0x00, 0xe7, 0xe2, 0x56, 0x48, 0x7e, 0x95, 0xd6, 0x52, 0x68, - 0x41, 0x49, 0x78, 0x93, 0xac, 0x0f, 0x42, 0x1c, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, - 0x33, 0x5d, 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0x99, 0x53, 0xf1, 0x54, 0x98, 0xeb, 0xec, 0x56, 0xb2, - 0xba, 0x06, 0xe9, 0xf4, 0xcd, 0xf7, 0x29, 0x79, 0xf4, 0xd6, 0x0e, 0xcb, 0xe1, 0xa3, 0x01, 0xa5, - 0x29, 0x25, 0xd3, 0x8a, 0xdd, 0x40, 0x3c, 0x39, 0x9e, 0x9c, 0x2c, 0x73, 0x7c, 0xa6, 0x3b, 0x32, - 0x53, 0x5a, 0x5e, 0x32, 0x1e, 0x47, 0xc7, 0x93, 0x93, 0xa3, 0xed, 0x3a, 0xed, 0xa6, 0xa6, 0x7e, - 0x6a, 0x7a, 0xa1, 0x65, 0x59, 0x1d, 0x2e, 0x19, 0x37, 0x90, 0x3b, 0x2f, 0x7d, 0x41, 0x16, 0xd7, - 0x5c, 0x30, 0x6d, 0xb9, 0x07, 0xc8, 0x3d, 0xbd, 0xc7, 0xbd, 0x76, 0x06, 0x03, 0x79, 0x6f, 0xa6, - 0x2f, 0xc9, 0xf2, 0x4a, 0x98, 0x82, 0x83, 0x25, 0xa7, 0x23, 0x89, 0xaf, 0xbc, 0xc3, 0x40, 0x1e, - 0xec, 0x74, 0x47, 0xe6, 0x85, 0x10, 0xdc, 0x92, 0x0f, 0x91, 0x4c, 0xee, 0x91, 0xe7, 0x9d, 0x6e, - 0x20, 0xf7, 0x56, 0x7b, 0xd5, 0xa2, 0xd1, 0xa0, 0x2c, 0x36, 0x1b, 0xb9, 0xea, 0xb9, 0x33, 0xd8, - 0xab, 0x7a, 0xb3, 0x05, 0xcb, 0x4a, 0x9f, 0x6e, 0x2d, 0x38, 0x1f, 0x01, 0xdf, 0x39, 0x83, 0x05, - 0xbd, 0xd9, 0x7e, 0xa3, 0xe9, 0xc9, 0xc5, 0xc8, 0x37, 0xbe, 0x1f, 0xa0, 0xc1, 0xee, 0x42, 0xcf, - 0x76, 0x16, 0x5d, 0x8e, 0x87, 0xa2, 0xc1, 0x85, 0xe2, 0xb3, 0x0f, 0xed, 0x48, 0xf2, 0x9f, 0x50, - 0x8f, 0x06, 0xfb, 0xe6, 0x39, 0x21, 0xae, 0x27, 0x35, 0x6f, 0x68, 0x4c, 0xe6, 0x37, 0xa0, 0x14, - 0x3b, 0xf8, 0xa2, 0xf8, 0xe3, 0xf6, 0x57, 0x44, 0xe6, 0x6f, 0x24, 0x80, 0x06, 0x49, 0x7f, 0x44, - 0x64, 0x71, 0xc1, 0x1a, 0xe4, 0x68, 0x9c, 0x0e, 0x6a, 0x3c, 0xac, 0x5c, 0xb2, 0xfa, 0x87, 0x52, - 0xf3, 0x66, 0xf3, 0x35, 0xfa, 0xfc, 0xf3, 0xf7, 0xb7, 0xe8, 0x4b, 0x44, 0x8f, 0x32, 0xc5, 0x9a, - 0xec, 0xce, 0x96, 0xb1, 0xdd, 0xaf, 0xe8, 0x13, 0x3c, 0x2a, 0x2d, 0x3f, 0x31, 0x9e, 0xdd, 0x75, - 0x75, 0x6b, 0xf7, 0x09, 0x8d, 0xf1, 0x3d, 0xf6, 0x08, 0x15, 0xdf, 0xa8, 0x76, 0xbf, 0xa6, 0x09, - 0x6a, 0x5d, 0x51, 0x50, 0xec, 0x3b, 0xd3, 0xee, 0x63, 0xba, 0x42, 0xd5, 0xd6, 0x01, 0x35, 0xd7, - 0x8b, 0x30, 0x13, 0x17, 0xde, 0x49, 0x6e, 0xf5, 0x41, 0xc3, 0xbd, 0xa0, 0xe6, 0x37, 0x14, 0xf2, - 0x4c, 0x10, 0x4d, 0x50, 0x07, 0xe4, 0xd9, 0xce, 0x93, 0xf8, 0x9b, 0xff, 0x26, 0x9d, 0xd8, 0x2f, - 0xa1, 0x2d, 0x66, 0xb8, 0xa6, 0xd3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x65, 0xa5, 0x95, 0xa8, - 0x13, 0x04, 0x00, 0x00, +func init() { + proto.RegisterFile("examples/internal/helloworld/helloworld.proto", fileDescriptor_fd8fde893e1fcf9f) +} + +var fileDescriptor_fd8fde893e1fcf9f = []byte{ + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3d, 0x6f, 0xd4, 0x30, + 0x1c, 0xc6, 0x75, 0xe1, 0xb8, 0x17, 0x97, 0xc9, 0x42, 0xa7, 0x28, 0x9c, 0x50, 0x75, 0x03, 0xea, + 0x42, 0x22, 0x5d, 0x4f, 0x45, 0x62, 0xac, 0x10, 0x2f, 0x6b, 0x2a, 0x3a, 0xdc, 0xe6, 0xa8, 0xff, + 0x1e, 0x91, 0x7c, 0x71, 0xf0, 0x0b, 0x25, 0xaa, 0xb2, 0xb0, 0xb1, 0x21, 0xf1, 0x1d, 0xf8, 0x3a, + 0x0c, 0x8c, 0xac, 0x7c, 0x10, 0xe4, 0x7f, 0xec, 0x73, 0x50, 0x49, 0x37, 0x3b, 0xcf, 0xf3, 0xf3, + 0x63, 0xe7, 0xff, 0x90, 0xe7, 0xf0, 0x99, 0xed, 0x6b, 0x0e, 0x2a, 0x2b, 0x2b, 0x0d, 0xb2, 0x62, + 0x3c, 0xfb, 0x00, 0x9c, 0x8b, 0x1b, 0x21, 0xf9, 0x55, 0x6f, 0x99, 0xd6, 0x52, 0x68, 0x41, 0x49, + 0xf8, 0x92, 0x2c, 0x77, 0x42, 0xec, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, 0x33, 0x5d, + 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0xa9, 0x53, 0x71, 0x57, 0x98, 0xeb, 0xec, 0x46, 0xb2, 0xba, 0x06, + 0xe9, 0xf4, 0xd5, 0x8f, 0x31, 0x79, 0xf4, 0xd6, 0x1e, 0x96, 0xc3, 0x47, 0x03, 0x4a, 0x53, 0x4a, + 0xc6, 0x15, 0xdb, 0x43, 0x3c, 0x3a, 0x1e, 0x9d, 0xcc, 0x73, 0x5c, 0xd3, 0x0d, 0x99, 0x28, 0x2d, + 0x2f, 0x19, 0x8f, 0xa3, 0xe3, 0xd1, 0xc9, 0xd1, 0x7a, 0x99, 0x76, 0xa7, 0xa6, 0xfe, 0xd4, 0xf4, + 0x42, 0xcb, 0xb2, 0xda, 0x5d, 0x32, 0x6e, 0x20, 0x77, 0x5e, 0xfa, 0x82, 0xcc, 0xae, 0xb9, 0x60, + 0xda, 0x72, 0x0f, 0x90, 0x7b, 0x72, 0x87, 0x7b, 0xed, 0x0c, 0x06, 0xf2, 0x83, 0x99, 0xbe, 0x24, + 0xf3, 0x2b, 0x61, 0x0a, 0x0e, 0x96, 0x1c, 0x0f, 0x24, 0xbe, 0xf2, 0x0e, 0x03, 0x79, 0xb0, 0xd3, + 0x0d, 0x99, 0x16, 0x42, 0x70, 0x4b, 0x3e, 0x44, 0x32, 0xb9, 0x43, 0x9e, 0x77, 0xba, 0x81, 0xdc, + 0x5b, 0xed, 0x55, 0x8b, 0x46, 0x83, 0xb2, 0xd8, 0x64, 0xe0, 0xaa, 0xe7, 0xce, 0x60, 0xaf, 0xea, + 0xcd, 0x16, 0x2c, 0x2b, 0x7d, 0xba, 0xb6, 0xe0, 0x74, 0x00, 0x7c, 0xe7, 0x0c, 0x16, 0xf4, 0x66, + 0xfb, 0x46, 0x73, 0x20, 0x67, 0x03, 0x6f, 0x7c, 0xdf, 0x43, 0x83, 0xdd, 0x85, 0x9e, 0x6d, 0x2c, + 0x3a, 0x1f, 0x0e, 0x45, 0x83, 0x0b, 0xc5, 0xb5, 0x0f, 0xed, 0x48, 0x72, 0x4f, 0xa8, 0x47, 0x83, + 0x7d, 0xf5, 0x8c, 0x10, 0xd7, 0x93, 0x9a, 0x37, 0x34, 0x26, 0xd3, 0x3d, 0x28, 0xc5, 0x76, 0xbe, + 0x28, 0x7e, 0xbb, 0xfe, 0x1d, 0x91, 0xe9, 0x1b, 0x09, 0xa0, 0x41, 0xd2, 0x9f, 0x11, 0x99, 0x5d, + 0xb0, 0x06, 0x39, 0x1a, 0xa7, 0xbd, 0x1a, 0xf7, 0x2b, 0x97, 0x2c, 0xfe, 0xa3, 0xd4, 0xbc, 0x59, + 0x7d, 0x8b, 0xbe, 0xfc, 0xfa, 0xf3, 0x3d, 0xfa, 0x1a, 0xd1, 0xa3, 0x4c, 0xb1, 0x26, 0xbb, 0xb5, + 0x65, 0x6c, 0xb7, 0x0b, 0xfa, 0x18, 0xb7, 0x4a, 0xcb, 0x4f, 0x8c, 0x67, 0xb7, 0x5d, 0xdd, 0xda, + 0x6d, 0x42, 0x63, 0xfc, 0x8e, 0x3d, 0x42, 0xc5, 0x37, 0xaa, 0xdd, 0x2e, 0x69, 0x82, 0x5a, 0x57, + 0x14, 0x14, 0x0f, 0x9d, 0x69, 0xb7, 0x31, 0x5d, 0xa0, 0x6a, 0xeb, 0x80, 0x9a, 0xeb, 0x45, 0x38, + 0x13, 0x07, 0xde, 0x49, 0x6e, 0xf4, 0x41, 0xc3, 0xb9, 0xa0, 0xe6, 0x27, 0x14, 0xf2, 0x4c, 0x10, + 0x4d, 0x50, 0x7b, 0xe4, 0xd9, 0xc6, 0x93, 0xf8, 0x9b, 0xff, 0x25, 0x9d, 0x78, 0x18, 0x42, 0x5b, + 0x4c, 0x70, 0x4c, 0xa7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xca, 0x80, 0x5f, 0x77, 0x30, 0x04, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -252,6 +257,14 @@ type GreeterServer interface { SayHello(context.Context, *HelloRequest) (*HelloReply, error) } +// UnimplementedGreeterServer can be embedded to have forward compatible implementations. +type UnimplementedGreeterServer struct { +} + +func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented") +} + func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { s.RegisterService(&_Greeter_serviceDesc, srv) } @@ -284,5 +297,5 @@ var _Greeter_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "helloworld.proto", + Metadata: "examples/internal/helloworld/helloworld.proto", } diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index c09fe741ece..15839ebb7a9 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: helloworld.proto +// source: examples/internal/helloworld/helloworld.proto /* Package helloworld is a reverse proxy. @@ -9,24 +9,27 @@ It translates gRPC into RESTful JSON APIs. package helloworld import ( + "context" "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/grpc-ecosystem/grpc-gateway/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_Greeter_SayHello_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} @@ -54,7 +57,10 @@ func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -63,6 +69,40 @@ func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_1 = &utilities.DoubleArray{Encoding: map[string]int{"strVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -89,7 +129,10 @@ func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "strVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -98,6 +141,40 @@ func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["strVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "strVal") + } + + protoReq.StrVal, err = runtime.StringValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "strVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_2 = &utilities.DoubleArray{Encoding: map[string]int{"floatVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -124,7 +201,10 @@ func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "floatVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -133,6 +213,40 @@ func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["floatVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "floatVal") + } + + protoReq.FloatVal, err = runtime.FloatValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "floatVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_3 = &utilities.DoubleArray{Encoding: map[string]int{"doubleVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -159,7 +273,10 @@ func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "doubleVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_3); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -168,6 +285,40 @@ func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["doubleVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "doubleVal") + } + + protoReq.DoubleVal, err = runtime.DoubleValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "doubleVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_4 = &utilities.DoubleArray{Encoding: map[string]int{"boolVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -194,7 +345,10 @@ func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "boolVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -203,6 +357,40 @@ func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["boolVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "boolVal") + } + + protoReq.BoolVal, err = runtime.BoolValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "boolVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_5 = &utilities.DoubleArray{Encoding: map[string]int{"bytesVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -229,7 +417,10 @@ func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bytesVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -238,6 +429,40 @@ func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["bytesVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bytesVal") + } + + protoReq.BytesVal, err = runtime.BytesValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bytesVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_6 = &utilities.DoubleArray{Encoding: map[string]int{"int32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -264,7 +489,10 @@ func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -273,6 +501,40 @@ func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int32Val") + } + + protoReq.Int32Val, err = runtime.Int32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_7 = &utilities.DoubleArray{Encoding: map[string]int{"uint32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -299,7 +561,10 @@ func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_7); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -308,6 +573,40 @@ func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint32Val") + } + + protoReq.Uint32Val, err = runtime.UInt32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_8 = &utilities.DoubleArray{Encoding: map[string]int{"int64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -334,7 +633,10 @@ func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_8); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -343,6 +645,40 @@ func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int64Val") + } + + protoReq.Int64Val, err = runtime.Int64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_9 = &utilities.DoubleArray{Encoding: map[string]int{"uint64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -369,7 +705,10 @@ func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_9); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -378,6 +717,248 @@ func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint64Val") + } + + protoReq.Uint64Val, err = runtime.UInt64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGreeterHandlerServer registers the http handlers for service Greeter to "mux". +// UnaryRPC :call GreeterServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GreeterServer) error { + + mux.Handle("GET", pattern_Greeter_SayHello_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_5(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_6(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_7, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_7(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_7(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_8, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_8(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_8(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_9, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_9(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_9(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterGreeterHandlerFromEndpoint is same as RegisterGreeterHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -620,25 +1201,25 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl } var ( - pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "")) + pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "")) + pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "")) + pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "")) + pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "")) + pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "")) + pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "")) + pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "")) + pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "")) + pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "")) + pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/go.mod b/go.mod index c8e880d3044..9601cf06b7c 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.3.2 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 + golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c google.golang.org/grpc v1.24.0 From a13dd4914ad0715af8c1530e13f226e2ed4de4b9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 21 Apr 2020 16:58:03 +0100 Subject: [PATCH 0316/1518] Fix generating helloworld.proto --- Makefile | 17 +- examples/internal/helloworld/BUILD.bazel | 2 +- examples/internal/helloworld/helloworld.pb.go | 91 +-- .../internal/helloworld/helloworld.pb.gw.go | 625 +++++++++++++++++- go.mod | 2 +- 5 files changed, 673 insertions(+), 64 deletions(-) diff --git a/Makefile b/Makefile index f0701b1992f..038f8244df8 100644 --- a/Makefile +++ b/Makefile @@ -77,12 +77,17 @@ EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ examples/internal/proto/examplepb/use_go_template.proto \ examples/internal/proto/examplepb/response_body_service.proto +HELLOWORLD=examples/internal/helloworld/helloworld.proto + EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/proto/sub/message.proto examples/internal/proto/sub2/message.proto EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) +HELLOWORLD_SVCSRCS=$(HELLOWORLD:.proto=.pb.go) +HELLOWORLD_GWSRCS=$(HELLOWORLD:.proto=.pb.gw.go) + RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=pb.go) @@ -171,6 +176,14 @@ $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_c $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) +$(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(HELLOWORLD) + +$(HELLOWORLD_GWSRCS): +$(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) + + $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ -l go -o examples/internal/clients/echo --additional-properties packageName=echo @@ -192,7 +205,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh -examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) +examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) testproto: $(RUNTIME_TEST_SRCS) test: examples testproto go test -short -race ./... @@ -230,6 +243,8 @@ realclean: distclean rm -f $(EXAMPLE_GWSRCS) rm -f $(EXAMPLE_SWAGGERSRCS) rm -f $(EXAMPLE_CLIENT_SRCS) + rm -f $(HELLOWORLD_SVCSRCS) + rm -f $(HELLOWORLD_GWSRCS) rm -f $(OPENAPIV2_GO) rm -f $(RUNTIME_TEST_SRCS) diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index cf3a7ff4f69..c389c3b0a98 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -30,11 +30,11 @@ go_library( deps = [ "//runtime:go_default_library", "//utilities:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", - "@org_golang_x_net//context:go_default_library", ], ) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 9225dfd1f88..53780205a9d 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go. DO NOT EDIT. -// source: helloworld.proto +// source: examples/internal/helloworld/helloworld.proto package helloworld @@ -10,6 +10,8 @@ import ( wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" math "math" ) @@ -22,7 +24,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type HelloRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -44,7 +46,7 @@ func (m *HelloRequest) Reset() { *m = HelloRequest{} } func (m *HelloRequest) String() string { return proto.CompactTextString(m) } func (*HelloRequest) ProtoMessage() {} func (*HelloRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_17b8c58d586b62f2, []int{0} + return fileDescriptor_fd8fde893e1fcf9f, []int{0} } func (m *HelloRequest) XXX_Unmarshal(b []byte) error { @@ -146,7 +148,7 @@ func (m *HelloReply) Reset() { *m = HelloReply{} } func (m *HelloReply) String() string { return proto.CompactTextString(m) } func (*HelloReply) ProtoMessage() {} func (*HelloReply) Descriptor() ([]byte, []int) { - return fileDescriptor_17b8c58d586b62f2, []int{1} + return fileDescriptor_fd8fde893e1fcf9f, []int{1} } func (m *HelloReply) XXX_Unmarshal(b []byte) error { @@ -179,40 +181,43 @@ func init() { proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") } -func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) } - -var fileDescriptor_17b8c58d586b62f2 = []byte{ - // 468 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xcd, 0x8a, 0xd4, 0x40, - 0x14, 0x85, 0xe9, 0xd8, 0xf6, 0x4f, 0x8d, 0x0b, 0x29, 0xa4, 0x09, 0xb1, 0x91, 0xa1, 0x17, 0x32, - 0xab, 0x04, 0x7a, 0x9a, 0x11, 0x5c, 0x0e, 0xe2, 0xcf, 0x36, 0x83, 0xb3, 0xe8, 0x5d, 0x85, 0xb9, - 0xd3, 0x06, 0x6a, 0x52, 0xb1, 0x7e, 0x1c, 0xc2, 0x90, 0x8d, 0x3b, 0x77, 0x82, 0xef, 0xe0, 0xeb, - 0xb8, 0x70, 0xe9, 0xd6, 0x07, 0x91, 0xba, 0xa9, 0x4a, 0x45, 0xc6, 0xb8, 0x4b, 0xe5, 0x9c, 0xef, - 0x9e, 0x4a, 0xee, 0x21, 0x8f, 0x3f, 0x00, 0xe7, 0xe2, 0x56, 0x48, 0x7e, 0x95, 0xd6, 0x52, 0x68, - 0x41, 0x49, 0x78, 0x93, 0xac, 0x0f, 0x42, 0x1c, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, - 0x33, 0x5d, 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0x99, 0x53, 0xf1, 0x54, 0x98, 0xeb, 0xec, 0x56, 0xb2, - 0xba, 0x06, 0xe9, 0xf4, 0xcd, 0xf7, 0x29, 0x79, 0xf4, 0xd6, 0x0e, 0xcb, 0xe1, 0xa3, 0x01, 0xa5, - 0x29, 0x25, 0xd3, 0x8a, 0xdd, 0x40, 0x3c, 0x39, 0x9e, 0x9c, 0x2c, 0x73, 0x7c, 0xa6, 0x3b, 0x32, - 0x53, 0x5a, 0x5e, 0x32, 0x1e, 0x47, 0xc7, 0x93, 0x93, 0xa3, 0xed, 0x3a, 0xed, 0xa6, 0xa6, 0x7e, - 0x6a, 0x7a, 0xa1, 0x65, 0x59, 0x1d, 0x2e, 0x19, 0x37, 0x90, 0x3b, 0x2f, 0x7d, 0x41, 0x16, 0xd7, - 0x5c, 0x30, 0x6d, 0xb9, 0x07, 0xc8, 0x3d, 0xbd, 0xc7, 0xbd, 0x76, 0x06, 0x03, 0x79, 0x6f, 0xa6, - 0x2f, 0xc9, 0xf2, 0x4a, 0x98, 0x82, 0x83, 0x25, 0xa7, 0x23, 0x89, 0xaf, 0xbc, 0xc3, 0x40, 0x1e, - 0xec, 0x74, 0x47, 0xe6, 0x85, 0x10, 0xdc, 0x92, 0x0f, 0x91, 0x4c, 0xee, 0x91, 0xe7, 0x9d, 0x6e, - 0x20, 0xf7, 0x56, 0x7b, 0xd5, 0xa2, 0xd1, 0xa0, 0x2c, 0x36, 0x1b, 0xb9, 0xea, 0xb9, 0x33, 0xd8, - 0xab, 0x7a, 0xb3, 0x05, 0xcb, 0x4a, 0x9f, 0x6e, 0x2d, 0x38, 0x1f, 0x01, 0xdf, 0x39, 0x83, 0x05, - 0xbd, 0xd9, 0x7e, 0xa3, 0xe9, 0xc9, 0xc5, 0xc8, 0x37, 0xbe, 0x1f, 0xa0, 0xc1, 0xee, 0x42, 0xcf, - 0x76, 0x16, 0x5d, 0x8e, 0x87, 0xa2, 0xc1, 0x85, 0xe2, 0xb3, 0x0f, 0xed, 0x48, 0xf2, 0x9f, 0x50, - 0x8f, 0x06, 0xfb, 0xe6, 0x39, 0x21, 0xae, 0x27, 0x35, 0x6f, 0x68, 0x4c, 0xe6, 0x37, 0xa0, 0x14, - 0x3b, 0xf8, 0xa2, 0xf8, 0xe3, 0xf6, 0x57, 0x44, 0xe6, 0x6f, 0x24, 0x80, 0x06, 0x49, 0x7f, 0x44, - 0x64, 0x71, 0xc1, 0x1a, 0xe4, 0x68, 0x9c, 0x0e, 0x6a, 0x3c, 0xac, 0x5c, 0xb2, 0xfa, 0x87, 0x52, - 0xf3, 0x66, 0xf3, 0x35, 0xfa, 0xfc, 0xf3, 0xf7, 0xb7, 0xe8, 0x4b, 0x44, 0x8f, 0x32, 0xc5, 0x9a, - 0xec, 0xce, 0x96, 0xb1, 0xdd, 0xaf, 0xe8, 0x13, 0x3c, 0x2a, 0x2d, 0x3f, 0x31, 0x9e, 0xdd, 0x75, - 0x75, 0x6b, 0xf7, 0x09, 0x8d, 0xf1, 0x3d, 0xf6, 0x08, 0x15, 0xdf, 0xa8, 0x76, 0xbf, 0xa6, 0x09, - 0x6a, 0x5d, 0x51, 0x50, 0xec, 0x3b, 0xd3, 0xee, 0x63, 0xba, 0x42, 0xd5, 0xd6, 0x01, 0x35, 0xd7, - 0x8b, 0x30, 0x13, 0x17, 0xde, 0x49, 0x6e, 0xf5, 0x41, 0xc3, 0xbd, 0xa0, 0xe6, 0x37, 0x14, 0xf2, - 0x4c, 0x10, 0x4d, 0x50, 0x07, 0xe4, 0xd9, 0xce, 0x93, 0xf8, 0x9b, 0xff, 0x26, 0x9d, 0xd8, 0x2f, - 0xa1, 0x2d, 0x66, 0xb8, 0xa6, 0xd3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x65, 0xa5, 0x95, 0xa8, - 0x13, 0x04, 0x00, 0x00, +func init() { + proto.RegisterFile("examples/internal/helloworld/helloworld.proto", fileDescriptor_fd8fde893e1fcf9f) +} + +var fileDescriptor_fd8fde893e1fcf9f = []byte{ + // 482 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3d, 0x6f, 0xd4, 0x30, + 0x1c, 0xc6, 0x75, 0xe1, 0xb8, 0x17, 0x97, 0xc9, 0x42, 0xa7, 0x28, 0x9c, 0x50, 0x75, 0x03, 0xea, + 0x42, 0x22, 0x5d, 0x4f, 0x45, 0x62, 0xac, 0x10, 0x2f, 0x6b, 0x2a, 0x3a, 0xdc, 0xe6, 0xa8, 0xff, + 0x1e, 0x91, 0x7c, 0x71, 0xf0, 0x0b, 0x25, 0xaa, 0xb2, 0xb0, 0xb1, 0x21, 0xf1, 0x1d, 0xf8, 0x3a, + 0x0c, 0x8c, 0xac, 0x7c, 0x10, 0xe4, 0x7f, 0xec, 0x73, 0x50, 0x49, 0x37, 0x3b, 0xcf, 0xf3, 0xf3, + 0x63, 0xe7, 0xff, 0x90, 0xe7, 0xf0, 0x99, 0xed, 0x6b, 0x0e, 0x2a, 0x2b, 0x2b, 0x0d, 0xb2, 0x62, + 0x3c, 0xfb, 0x00, 0x9c, 0x8b, 0x1b, 0x21, 0xf9, 0x55, 0x6f, 0x99, 0xd6, 0x52, 0x68, 0x41, 0x49, + 0xf8, 0x92, 0x2c, 0x77, 0x42, 0xec, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, 0x33, 0x5d, + 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0xa9, 0x53, 0x71, 0x57, 0x98, 0xeb, 0xec, 0x46, 0xb2, 0xba, 0x06, + 0xe9, 0xf4, 0xd5, 0x8f, 0x31, 0x79, 0xf4, 0xd6, 0x1e, 0x96, 0xc3, 0x47, 0x03, 0x4a, 0x53, 0x4a, + 0xc6, 0x15, 0xdb, 0x43, 0x3c, 0x3a, 0x1e, 0x9d, 0xcc, 0x73, 0x5c, 0xd3, 0x0d, 0x99, 0x28, 0x2d, + 0x2f, 0x19, 0x8f, 0xa3, 0xe3, 0xd1, 0xc9, 0xd1, 0x7a, 0x99, 0x76, 0xa7, 0xa6, 0xfe, 0xd4, 0xf4, + 0x42, 0xcb, 0xb2, 0xda, 0x5d, 0x32, 0x6e, 0x20, 0x77, 0x5e, 0xfa, 0x82, 0xcc, 0xae, 0xb9, 0x60, + 0xda, 0x72, 0x0f, 0x90, 0x7b, 0x72, 0x87, 0x7b, 0xed, 0x0c, 0x06, 0xf2, 0x83, 0x99, 0xbe, 0x24, + 0xf3, 0x2b, 0x61, 0x0a, 0x0e, 0x96, 0x1c, 0x0f, 0x24, 0xbe, 0xf2, 0x0e, 0x03, 0x79, 0xb0, 0xd3, + 0x0d, 0x99, 0x16, 0x42, 0x70, 0x4b, 0x3e, 0x44, 0x32, 0xb9, 0x43, 0x9e, 0x77, 0xba, 0x81, 0xdc, + 0x5b, 0xed, 0x55, 0x8b, 0x46, 0x83, 0xb2, 0xd8, 0x64, 0xe0, 0xaa, 0xe7, 0xce, 0x60, 0xaf, 0xea, + 0xcd, 0x16, 0x2c, 0x2b, 0x7d, 0xba, 0xb6, 0xe0, 0x74, 0x00, 0x7c, 0xe7, 0x0c, 0x16, 0xf4, 0x66, + 0xfb, 0x46, 0x73, 0x20, 0x67, 0x03, 0x6f, 0x7c, 0xdf, 0x43, 0x83, 0xdd, 0x85, 0x9e, 0x6d, 0x2c, + 0x3a, 0x1f, 0x0e, 0x45, 0x83, 0x0b, 0xc5, 0xb5, 0x0f, 0xed, 0x48, 0x72, 0x4f, 0xa8, 0x47, 0x83, + 0x7d, 0xf5, 0x8c, 0x10, 0xd7, 0x93, 0x9a, 0x37, 0x34, 0x26, 0xd3, 0x3d, 0x28, 0xc5, 0x76, 0xbe, + 0x28, 0x7e, 0xbb, 0xfe, 0x1d, 0x91, 0xe9, 0x1b, 0x09, 0xa0, 0x41, 0xd2, 0x9f, 0x11, 0x99, 0x5d, + 0xb0, 0x06, 0x39, 0x1a, 0xa7, 0xbd, 0x1a, 0xf7, 0x2b, 0x97, 0x2c, 0xfe, 0xa3, 0xd4, 0xbc, 0x59, + 0x7d, 0x8b, 0xbe, 0xfc, 0xfa, 0xf3, 0x3d, 0xfa, 0x1a, 0xd1, 0xa3, 0x4c, 0xb1, 0x26, 0xbb, 0xb5, + 0x65, 0x6c, 0xb7, 0x0b, 0xfa, 0x18, 0xb7, 0x4a, 0xcb, 0x4f, 0x8c, 0x67, 0xb7, 0x5d, 0xdd, 0xda, + 0x6d, 0x42, 0x63, 0xfc, 0x8e, 0x3d, 0x42, 0xc5, 0x37, 0xaa, 0xdd, 0x2e, 0x69, 0x82, 0x5a, 0x57, + 0x14, 0x14, 0x0f, 0x9d, 0x69, 0xb7, 0x31, 0x5d, 0xa0, 0x6a, 0xeb, 0x80, 0x9a, 0xeb, 0x45, 0x38, + 0x13, 0x07, 0xde, 0x49, 0x6e, 0xf4, 0x41, 0xc3, 0xb9, 0xa0, 0xe6, 0x27, 0x14, 0xf2, 0x4c, 0x10, + 0x4d, 0x50, 0x7b, 0xe4, 0xd9, 0xc6, 0x93, 0xf8, 0x9b, 0xff, 0x25, 0x9d, 0x78, 0x18, 0x42, 0x5b, + 0x4c, 0x70, 0x4c, 0xa7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xca, 0x80, 0x5f, 0x77, 0x30, 0x04, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -252,6 +257,14 @@ type GreeterServer interface { SayHello(context.Context, *HelloRequest) (*HelloReply, error) } +// UnimplementedGreeterServer can be embedded to have forward compatible implementations. +type UnimplementedGreeterServer struct { +} + +func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented") +} + func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) { s.RegisterService(&_Greeter_serviceDesc, srv) } @@ -284,5 +297,5 @@ var _Greeter_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "helloworld.proto", + Metadata: "examples/internal/helloworld/helloworld.proto", } diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index de1faecf8f0..e191ddd7fd6 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: helloworld.proto +// source: examples/internal/helloworld/helloworld.proto /* Package helloworld is a reverse proxy. @@ -9,24 +9,27 @@ It translates gRPC into RESTful JSON APIs. package helloworld import ( + "context" "io" "net/http" + "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) +// Suppress "imported and not used" errors var _ codes.Code var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage var ( filter_Greeter_SayHello_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} @@ -54,7 +57,10 @@ func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_0); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -63,6 +69,40 @@ func request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_0(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_1 = &utilities.DoubleArray{Encoding: map[string]int{"strVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -89,7 +129,10 @@ func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "strVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_1); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -98,6 +141,40 @@ func request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_1(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["strVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "strVal") + } + + protoReq.StrVal, err = runtime.StringValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "strVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_2 = &utilities.DoubleArray{Encoding: map[string]int{"floatVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -124,7 +201,10 @@ func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "floatVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_2); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -133,6 +213,40 @@ func request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_2(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["floatVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "floatVal") + } + + protoReq.FloatVal, err = runtime.FloatValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "floatVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_3 = &utilities.DoubleArray{Encoding: map[string]int{"doubleVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -159,7 +273,10 @@ func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "doubleVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_3); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -168,6 +285,40 @@ func request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_3(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["doubleVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "doubleVal") + } + + protoReq.DoubleVal, err = runtime.DoubleValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "doubleVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_4 = &utilities.DoubleArray{Encoding: map[string]int{"boolVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -194,7 +345,10 @@ func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "boolVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_4); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -203,6 +357,40 @@ func request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_4(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["boolVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "boolVal") + } + + protoReq.BoolVal, err = runtime.BoolValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "boolVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_5 = &utilities.DoubleArray{Encoding: map[string]int{"bytesVal": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -229,7 +417,10 @@ func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bytesVal", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_5); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -238,6 +429,40 @@ func request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_5(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["bytesVal"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bytesVal") + } + + protoReq.BytesVal, err = runtime.BytesValue(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bytesVal", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_5); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_6 = &utilities.DoubleArray{Encoding: map[string]int{"int32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -264,7 +489,10 @@ func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_6); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -273,6 +501,40 @@ func request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_6(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int32Val") + } + + protoReq.Int32Val, err = runtime.Int32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int32Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_6); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_7 = &utilities.DoubleArray{Encoding: map[string]int{"uint32Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -299,7 +561,10 @@ func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_7); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -308,6 +573,40 @@ func request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_7(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint32Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint32Val") + } + + protoReq.Uint32Val, err = runtime.UInt32Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint32Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_7); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_8 = &utilities.DoubleArray{Encoding: map[string]int{"int64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -334,7 +633,10 @@ func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_8); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -343,6 +645,40 @@ func request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_8(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["int64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "int64Val") + } + + protoReq.Int64Val, err = runtime.Int64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "int64Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_8); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Greeter_SayHello_9 = &utilities.DoubleArray{Encoding: map[string]int{"uint64Val": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -369,7 +705,10 @@ func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64Val", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Greeter_SayHello_9); err != nil { + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -378,6 +717,248 @@ func request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler } +func local_request_Greeter_SayHello_9(ctx context.Context, marshaler runtime.Marshaler, server GreeterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HelloRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["uint64Val"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uint64Val") + } + + protoReq.Uint64Val, err = runtime.UInt64Value(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uint64Val", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Greeter_SayHello_9); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SayHello(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGreeterHandlerServer registers the http handlers for service Greeter to "mux". +// UnaryRPC :call GreeterServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GreeterServer) error { + + mux.Handle("GET", pattern_Greeter_SayHello_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_5, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_5(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_5(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_6, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_6(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_6(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_7, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_7(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_7(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_8, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_8(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_8(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Greeter_SayHello_9, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Greeter_SayHello_9(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Greeter_SayHello_9(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + // RegisterGreeterHandlerFromEndpoint is same as RegisterGreeterHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterGreeterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -620,25 +1201,25 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl } var ( - pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "")) + pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "")) + pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "")) + pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "")) + pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "")) + pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "")) + pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "")) + pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "")) + pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "")) + pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "")) + pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( diff --git a/go.mod b/go.mod index 4a154ae3d14..d5e16608271 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.3.2 github.com/rogpeppe/fastuuid v1.2.0 - golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 + golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c google.golang.org/grpc v1.24.0 From 84b3440db4159d37fe9999f9be60c8a2650c3292 Mon Sep 17 00:00:00 2001 From: Matthew Morrissette Date: Wed, 22 Apr 2020 02:53:25 -0700 Subject: [PATCH 0317/1518] Remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/generator (#1213) Fixes #1209 --- protoc-gen-swagger/genswagger/BUILD.bazel | 1 - protoc-gen-swagger/genswagger/template.go | 67 ++++++++++++++++++++++- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index c89eb04477d..49d499230cd 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -22,7 +22,6 @@ go_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 7396d8e23ab..4dc93515799 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -18,7 +18,6 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - gogen "github.com/golang/protobuf/protoc-gen-go/generator" structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" @@ -1654,7 +1653,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type // For example, if we are trying to locate comments related to a field named // `Address` in a message named `Person`, the path will be: // -// [4, a, 2, b] +// [4, a, 2, b] // // While `a` gets determined by the order in which the messages appear in // the proto file, and `b` is the field index specified in the proto @@ -1969,7 +1968,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri } func doCamelCase(input string) string { - parameterString := gogen.CamelCase(input) + parameterString := camelCase(input) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) @@ -1988,3 +1987,65 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } + +// CamelCase returns the CamelCased name. +// +// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +// There is a remote possibility of this rewrite causing a name collision, +// but it's so remote we're prepared to pretend it's nonexistent - since the +// C++ generator lowercases names, it's extremely unlikely to have two fields +// with different capitalizations. +// In short, _my_field_name_2 becomes XMyFieldName_2. +func camelCase(s string) string { + if s == "" { + return "" + } + t := make([]byte, 0, 32) + i := 0 + if s[0] == '_' { + // Need a capital letter; drop the '_'. + t = append(t, 'X') + i++ + } + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + for ; i < len(s); i++ { + c := s[i] + if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { + continue // Skip the underscore in s. + } + if isASCIIDigit(c) { + t = append(t, c) + continue + } + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c ^= ' ' // Make it a capital letter. + } + t = append(t, c) // Guaranteed not lower case. + // Accept lower case sequence that follows. + for i+1 < len(s) && isASCIILower(s[i+1]) { + i++ + t = append(t, s[i]) + } + } + return string(t) +} + +// And now lots of helper functions. + +// Is c an ASCII lower-case letter? +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} + +// Is c an ASCII digit? +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} From 6fbf5d03775f7fa1728bf597729d480a804298ac Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 19 Apr 2020 00:47:10 +0100 Subject: [PATCH 0318/1518] Upgrade protobuf to 1.4.0 --- .circleci/README.md | 13 - .circleci/config.yml | 1 + CONTRIBUTING.md | 3 +- Makefile | 6 +- codegenerator/BUILD.bazel | 2 + codegenerator/parse_req_test.go | 6 +- examples/internal/helloworld/helloworld.pb.go | 441 ++- examples/internal/integration/BUILD.bazel | 2 + .../internal/integration/integration_test.go | 30 +- .../proto/examplepb/a_bit_of_everything.pb.go | 2118 +++++++++----- .../proto/examplepb/echo_service.pb.go | 495 ++-- .../proto/examplepb/flow_combination.pb.go | 740 +++-- .../proto/examplepb/non_standard_names.pb.go | 1033 ++++--- .../examplepb/response_body_service.pb.go | 751 +++-- .../internal/proto/examplepb/stream.pb.go | 163 +- .../examplepb/unannotated_echo_service.pb.go | 258 +- .../proto/examplepb/use_go_template.pb.go | 497 ++-- .../internal/proto/examplepb/wrappers.pb.go | 462 ++- .../internal/proto/pathenum/path_enum.pb.go | 261 +- examples/internal/proto/sub/message.pb.go | 171 +- examples/internal/proto/sub2/message.pb.go | 175 +- go.mod | 6 +- go.sum | 29 +- internal/errors.pb.go | 335 ++- protoc-gen-swagger/options/annotations.pb.go | 299 +- protoc-gen-swagger/options/openapiv2.pb.go | 2553 +++++++++++------ repositories.bzl | 48 +- runtime/BUILD.bazel | 2 + runtime/internal/examplepb/BUILD.bazel | 8 +- runtime/internal/examplepb/example.pb.go | 1335 ++++++--- runtime/internal/examplepb/example.proto | 182 +- runtime/internal/examplepb/proto2.pb.go | 246 ++ runtime/internal/examplepb/proto2.proto | 18 + runtime/internal/examplepb/proto3.pb.go | 848 ++++++ runtime/internal/examplepb/proto3.proto | 61 + runtime/marshal_jsonpb_test.go | 60 +- runtime/query_test.go | 436 +-- 37 files changed, 9590 insertions(+), 4504 deletions(-) create mode 100644 runtime/internal/examplepb/proto2.pb.go create mode 100644 runtime/internal/examplepb/proto2.proto create mode 100644 runtime/internal/examplepb/proto3.pb.go create mode 100644 runtime/internal/examplepb/proto3.proto diff --git a/.circleci/README.md b/.circleci/README.md index 5fe0b18c863..0ab8a75e254 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -2,19 +2,6 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. -### I want to regenerate the files after making changes! - -Great, it should be as simple as thus (run from the root of the directory): - -```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ - /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ - make realclean && \ - make examples' -``` - -If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. - ### Whats up with the Dockerfile? The `Dockerfile` in this folder is used as the build environment when regenerating the files (see above). diff --git a/.circleci/config.yml b/.circleci/config.yml index f395d1f9f15..ff4c8c31eea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,6 +38,7 @@ jobs: - checkout - run: make realclean - run: make examples + - run: make testproto - run: go mod tidy - run: git diff --exit-code lint: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2112b53621..e65225089f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,7 +28,8 @@ Great, it should be as simple as thus (run from the root of the directory): docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ - make examples' + make examples && \ + make testproto' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ diff --git a/Makefile b/Makefile index 038f8244df8..d0a65f91c0e 100644 --- a/Makefile +++ b/Makefile @@ -88,8 +88,10 @@ EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) HELLOWORLD_SVCSRCS=$(HELLOWORLD:.proto=.pb.go) HELLOWORLD_GWSRCS=$(HELLOWORLD:.proto=.pb.gw.go) -RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto -RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=pb.go) +RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto \ + runtime/internal/examplepb/proto2.proto \ + runtime/internal/examplepb/proto3.proto +RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) EXAMPLE_CLIENT_DIR=examples/internal/clients ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json diff --git a/codegenerator/BUILD.bazel b/codegenerator/BUILD.bazel index d9145264d63..df1beb39ab7 100644 --- a/codegenerator/BUILD.bazel +++ b/codegenerator/BUILD.bazel @@ -21,6 +21,8 @@ go_test( embed = [":go_default_library"], deps = [ "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_google_go_cmp//cmp:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/codegenerator/parse_req_test.go b/codegenerator/parse_req_test.go index fbcdb8b7bf9..a75b64a4771 100644 --- a/codegenerator/parse_req_test.go +++ b/codegenerator/parse_req_test.go @@ -10,7 +10,9 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" + "google.golang.org/protobuf/testing/protocmp" ) var parseReqTests = []struct { @@ -46,8 +48,8 @@ func TestParseRequest(t *testing.T) { if !reflect.DeepEqual(err, tt.err) { t.Errorf("got %v, want %v", err, tt.err) } - if err == nil && !reflect.DeepEqual(*out, *tt.out) { - t.Errorf("got %v, want %v", *out, *tt.out) + if diff := cmp.Diff(out, tt.out, protocmp.Transform()); diff != "" { + t.Errorf(diff) } }) } diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 53780205a9d..4df007785c2 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,232 +1,377 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/helloworld/helloworld.proto package helloworld import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" wrappers "github.com/golang/protobuf/ptypes/wrappers" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type HelloRequest struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - StrVal *wrappers.StringValue `protobuf:"bytes,2,opt,name=strVal,proto3" json:"strVal,omitempty"` - FloatVal *wrappers.FloatValue `protobuf:"bytes,3,opt,name=floatVal,proto3" json:"floatVal,omitempty"` - DoubleVal *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=doubleVal,proto3" json:"doubleVal,omitempty"` - BoolVal *wrappers.BoolValue `protobuf:"bytes,5,opt,name=boolVal,proto3" json:"boolVal,omitempty"` - BytesVal *wrappers.BytesValue `protobuf:"bytes,6,opt,name=bytesVal,proto3" json:"bytesVal,omitempty"` - Int32Val *wrappers.Int32Value `protobuf:"bytes,7,opt,name=int32Val,proto3" json:"int32Val,omitempty"` - Uint32Val *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=uint32Val,proto3" json:"uint32Val,omitempty"` - Int64Val *wrappers.Int64Value `protobuf:"bytes,9,opt,name=int64Val,proto3" json:"int64Val,omitempty"` - Uint64Val *wrappers.UInt64Value `protobuf:"bytes,10,opt,name=uint64Val,proto3" json:"uint64Val,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HelloRequest) Reset() { *m = HelloRequest{} } -func (m *HelloRequest) String() string { return proto.CompactTextString(m) } -func (*HelloRequest) ProtoMessage() {} -func (*HelloRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_fd8fde893e1fcf9f, []int{0} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + StrVal *wrappers.StringValue `protobuf:"bytes,2,opt,name=strVal,proto3" json:"strVal,omitempty"` + FloatVal *wrappers.FloatValue `protobuf:"bytes,3,opt,name=floatVal,proto3" json:"floatVal,omitempty"` + DoubleVal *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=doubleVal,proto3" json:"doubleVal,omitempty"` + BoolVal *wrappers.BoolValue `protobuf:"bytes,5,opt,name=boolVal,proto3" json:"boolVal,omitempty"` + BytesVal *wrappers.BytesValue `protobuf:"bytes,6,opt,name=bytesVal,proto3" json:"bytesVal,omitempty"` + Int32Val *wrappers.Int32Value `protobuf:"bytes,7,opt,name=int32Val,proto3" json:"int32Val,omitempty"` + Uint32Val *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=uint32Val,proto3" json:"uint32Val,omitempty"` + Int64Val *wrappers.Int64Value `protobuf:"bytes,9,opt,name=int64Val,proto3" json:"int64Val,omitempty"` + Uint64Val *wrappers.UInt64Value `protobuf:"bytes,10,opt,name=uint64Val,proto3" json:"uint64Val,omitempty"` +} + +func (x *HelloRequest) Reset() { + *x = HelloRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *HelloRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_HelloRequest.Unmarshal(m, b) -} -func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic) -} -func (m *HelloRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_HelloRequest.Merge(m, src) -} -func (m *HelloRequest) XXX_Size() int { - return xxx_messageInfo_HelloRequest.Size(m) +func (x *HelloRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *HelloRequest) XXX_DiscardUnknown() { - xxx_messageInfo_HelloRequest.DiscardUnknown(m) + +func (*HelloRequest) ProtoMessage() {} + +func (x *HelloRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_HelloRequest proto.InternalMessageInfo +// Deprecated: Use HelloRequest.ProtoReflect.Descriptor instead. +func (*HelloRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_helloworld_helloworld_proto_rawDescGZIP(), []int{0} +} -func (m *HelloRequest) GetName() string { - if m != nil { - return m.Name +func (x *HelloRequest) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *HelloRequest) GetStrVal() *wrappers.StringValue { - if m != nil { - return m.StrVal +func (x *HelloRequest) GetStrVal() *wrappers.StringValue { + if x != nil { + return x.StrVal } return nil } -func (m *HelloRequest) GetFloatVal() *wrappers.FloatValue { - if m != nil { - return m.FloatVal +func (x *HelloRequest) GetFloatVal() *wrappers.FloatValue { + if x != nil { + return x.FloatVal } return nil } -func (m *HelloRequest) GetDoubleVal() *wrappers.DoubleValue { - if m != nil { - return m.DoubleVal +func (x *HelloRequest) GetDoubleVal() *wrappers.DoubleValue { + if x != nil { + return x.DoubleVal } return nil } -func (m *HelloRequest) GetBoolVal() *wrappers.BoolValue { - if m != nil { - return m.BoolVal +func (x *HelloRequest) GetBoolVal() *wrappers.BoolValue { + if x != nil { + return x.BoolVal } return nil } -func (m *HelloRequest) GetBytesVal() *wrappers.BytesValue { - if m != nil { - return m.BytesVal +func (x *HelloRequest) GetBytesVal() *wrappers.BytesValue { + if x != nil { + return x.BytesVal } return nil } -func (m *HelloRequest) GetInt32Val() *wrappers.Int32Value { - if m != nil { - return m.Int32Val +func (x *HelloRequest) GetInt32Val() *wrappers.Int32Value { + if x != nil { + return x.Int32Val } return nil } -func (m *HelloRequest) GetUint32Val() *wrappers.UInt32Value { - if m != nil { - return m.Uint32Val +func (x *HelloRequest) GetUint32Val() *wrappers.UInt32Value { + if x != nil { + return x.Uint32Val } return nil } -func (m *HelloRequest) GetInt64Val() *wrappers.Int64Value { - if m != nil { - return m.Int64Val +func (x *HelloRequest) GetInt64Val() *wrappers.Int64Value { + if x != nil { + return x.Int64Val } return nil } -func (m *HelloRequest) GetUint64Val() *wrappers.UInt64Value { - if m != nil { - return m.Uint64Val +func (x *HelloRequest) GetUint64Val() *wrappers.UInt64Value { + if x != nil { + return x.Uint64Val } return nil } type HelloReply struct { - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *HelloReply) Reset() { *m = HelloReply{} } -func (m *HelloReply) String() string { return proto.CompactTextString(m) } -func (*HelloReply) ProtoMessage() {} -func (*HelloReply) Descriptor() ([]byte, []int) { - return fileDescriptor_fd8fde893e1fcf9f, []int{1} + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } -func (m *HelloReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_HelloReply.Unmarshal(m, b) -} -func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic) -} -func (m *HelloReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_HelloReply.Merge(m, src) +func (x *HelloReply) Reset() { + *x = HelloReply{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *HelloReply) XXX_Size() int { - return xxx_messageInfo_HelloReply.Size(m) + +func (x *HelloReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *HelloReply) XXX_DiscardUnknown() { - xxx_messageInfo_HelloReply.DiscardUnknown(m) + +func (*HelloReply) ProtoMessage() {} + +func (x *HelloReply) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_helloworld_helloworld_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_HelloReply proto.InternalMessageInfo +// Deprecated: Use HelloReply.ProtoReflect.Descriptor instead. +func (*HelloReply) Descriptor() ([]byte, []int) { + return file_examples_internal_helloworld_helloworld_proto_rawDescGZIP(), []int{1} +} -func (m *HelloReply) GetMessage() string { - if m != nil { - return m.Message +func (x *HelloReply) GetMessage() string { + if x != nil { + return x.Message } return "" } -func init() { - proto.RegisterType((*HelloRequest)(nil), "helloworld.HelloRequest") - proto.RegisterType((*HelloReply)(nil), "helloworld.HelloReply") -} - -func init() { - proto.RegisterFile("examples/internal/helloworld/helloworld.proto", fileDescriptor_fd8fde893e1fcf9f) -} - -var fileDescriptor_fd8fde893e1fcf9f = []byte{ - // 482 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x3d, 0x6f, 0xd4, 0x30, - 0x1c, 0xc6, 0x75, 0xe1, 0xb8, 0x17, 0x97, 0xc9, 0x42, 0xa7, 0x28, 0x9c, 0x50, 0x75, 0x03, 0xea, - 0x42, 0x22, 0x5d, 0x4f, 0x45, 0x62, 0xac, 0x10, 0x2f, 0x6b, 0x2a, 0x3a, 0xdc, 0xe6, 0xa8, 0xff, - 0x1e, 0x91, 0x7c, 0x71, 0xf0, 0x0b, 0x25, 0xaa, 0xb2, 0xb0, 0xb1, 0x21, 0xf1, 0x1d, 0xf8, 0x3a, - 0x0c, 0x8c, 0xac, 0x7c, 0x10, 0xe4, 0x7f, 0xec, 0x73, 0x50, 0x49, 0x37, 0x3b, 0xcf, 0xf3, 0xf3, - 0x63, 0xe7, 0xff, 0x90, 0xe7, 0xf0, 0x99, 0xed, 0x6b, 0x0e, 0x2a, 0x2b, 0x2b, 0x0d, 0xb2, 0x62, - 0x3c, 0xfb, 0x00, 0x9c, 0x8b, 0x1b, 0x21, 0xf9, 0x55, 0x6f, 0x99, 0xd6, 0x52, 0x68, 0x41, 0x49, - 0xf8, 0x92, 0x2c, 0x77, 0x42, 0xec, 0x38, 0x64, 0xac, 0x2e, 0x33, 0x56, 0x55, 0x42, 0x33, 0x5d, - 0x8a, 0x4a, 0x75, 0xce, 0xe4, 0xa9, 0x53, 0x71, 0x57, 0x98, 0xeb, 0xec, 0x46, 0xb2, 0xba, 0x06, - 0xe9, 0xf4, 0xd5, 0x8f, 0x31, 0x79, 0xf4, 0xd6, 0x1e, 0x96, 0xc3, 0x47, 0x03, 0x4a, 0x53, 0x4a, - 0xc6, 0x15, 0xdb, 0x43, 0x3c, 0x3a, 0x1e, 0x9d, 0xcc, 0x73, 0x5c, 0xd3, 0x0d, 0x99, 0x28, 0x2d, - 0x2f, 0x19, 0x8f, 0xa3, 0xe3, 0xd1, 0xc9, 0xd1, 0x7a, 0x99, 0x76, 0xa7, 0xa6, 0xfe, 0xd4, 0xf4, - 0x42, 0xcb, 0xb2, 0xda, 0x5d, 0x32, 0x6e, 0x20, 0x77, 0x5e, 0xfa, 0x82, 0xcc, 0xae, 0xb9, 0x60, - 0xda, 0x72, 0x0f, 0x90, 0x7b, 0x72, 0x87, 0x7b, 0xed, 0x0c, 0x06, 0xf2, 0x83, 0x99, 0xbe, 0x24, - 0xf3, 0x2b, 0x61, 0x0a, 0x0e, 0x96, 0x1c, 0x0f, 0x24, 0xbe, 0xf2, 0x0e, 0x03, 0x79, 0xb0, 0xd3, - 0x0d, 0x99, 0x16, 0x42, 0x70, 0x4b, 0x3e, 0x44, 0x32, 0xb9, 0x43, 0x9e, 0x77, 0xba, 0x81, 0xdc, - 0x5b, 0xed, 0x55, 0x8b, 0x46, 0x83, 0xb2, 0xd8, 0x64, 0xe0, 0xaa, 0xe7, 0xce, 0x60, 0xaf, 0xea, - 0xcd, 0x16, 0x2c, 0x2b, 0x7d, 0xba, 0xb6, 0xe0, 0x74, 0x00, 0x7c, 0xe7, 0x0c, 0x16, 0xf4, 0x66, - 0xfb, 0x46, 0x73, 0x20, 0x67, 0x03, 0x6f, 0x7c, 0xdf, 0x43, 0x83, 0xdd, 0x85, 0x9e, 0x6d, 0x2c, - 0x3a, 0x1f, 0x0e, 0x45, 0x83, 0x0b, 0xc5, 0xb5, 0x0f, 0xed, 0x48, 0x72, 0x4f, 0xa8, 0x47, 0x83, - 0x7d, 0xf5, 0x8c, 0x10, 0xd7, 0x93, 0x9a, 0x37, 0x34, 0x26, 0xd3, 0x3d, 0x28, 0xc5, 0x76, 0xbe, - 0x28, 0x7e, 0xbb, 0xfe, 0x1d, 0x91, 0xe9, 0x1b, 0x09, 0xa0, 0x41, 0xd2, 0x9f, 0x11, 0x99, 0x5d, - 0xb0, 0x06, 0x39, 0x1a, 0xa7, 0xbd, 0x1a, 0xf7, 0x2b, 0x97, 0x2c, 0xfe, 0xa3, 0xd4, 0xbc, 0x59, - 0x7d, 0x8b, 0xbe, 0xfc, 0xfa, 0xf3, 0x3d, 0xfa, 0x1a, 0xd1, 0xa3, 0x4c, 0xb1, 0x26, 0xbb, 0xb5, - 0x65, 0x6c, 0xb7, 0x0b, 0xfa, 0x18, 0xb7, 0x4a, 0xcb, 0x4f, 0x8c, 0x67, 0xb7, 0x5d, 0xdd, 0xda, - 0x6d, 0x42, 0x63, 0xfc, 0x8e, 0x3d, 0x42, 0xc5, 0x37, 0xaa, 0xdd, 0x2e, 0x69, 0x82, 0x5a, 0x57, - 0x14, 0x14, 0x0f, 0x9d, 0x69, 0xb7, 0x31, 0x5d, 0xa0, 0x6a, 0xeb, 0x80, 0x9a, 0xeb, 0x45, 0x38, - 0x13, 0x07, 0xde, 0x49, 0x6e, 0xf4, 0x41, 0xc3, 0xb9, 0xa0, 0xe6, 0x27, 0x14, 0xf2, 0x4c, 0x10, - 0x4d, 0x50, 0x7b, 0xe4, 0xd9, 0xc6, 0x93, 0xf8, 0x9b, 0xff, 0x25, 0x9d, 0x78, 0x18, 0x42, 0x5b, - 0x4c, 0x70, 0x4c, 0xa7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xca, 0x80, 0x5f, 0x77, 0x30, 0x04, - 0x00, 0x00, +var File_examples_internal_helloworld_helloworld_proto protoreflect.FileDescriptor + +var file_examples_internal_helloworld_helloworld_proto_rawDesc = []byte{ + 0x0a, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2f, 0x68, + 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x04, 0x0a, 0x0c, 0x48, 0x65, + 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, + 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x72, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, + 0x09, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x12, + 0x37, 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, + 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x22, 0x26, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xdb, 0x02, 0x0a, 0x07, 0x47, + 0x72, 0x65, 0x65, 0x74, 0x65, 0x72, 0x12, 0xcf, 0x02, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, + 0x6c, 0x6c, 0x6f, 0x12, 0x18, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, + 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x12, + 0x0b, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5a, 0x16, 0x12, 0x14, + 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d, + 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18, + 0x12, 0x16, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b, + 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, + 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, + 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, + 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, + 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, + 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_helloworld_helloworld_proto_rawDescOnce sync.Once + file_examples_internal_helloworld_helloworld_proto_rawDescData = file_examples_internal_helloworld_helloworld_proto_rawDesc +) + +func file_examples_internal_helloworld_helloworld_proto_rawDescGZIP() []byte { + file_examples_internal_helloworld_helloworld_proto_rawDescOnce.Do(func() { + file_examples_internal_helloworld_helloworld_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_helloworld_helloworld_proto_rawDescData) + }) + return file_examples_internal_helloworld_helloworld_proto_rawDescData +} + +var file_examples_internal_helloworld_helloworld_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_examples_internal_helloworld_helloworld_proto_goTypes = []interface{}{ + (*HelloRequest)(nil), // 0: helloworld.HelloRequest + (*HelloReply)(nil), // 1: helloworld.HelloReply + (*wrappers.StringValue)(nil), // 2: google.protobuf.StringValue + (*wrappers.FloatValue)(nil), // 3: google.protobuf.FloatValue + (*wrappers.DoubleValue)(nil), // 4: google.protobuf.DoubleValue + (*wrappers.BoolValue)(nil), // 5: google.protobuf.BoolValue + (*wrappers.BytesValue)(nil), // 6: google.protobuf.BytesValue + (*wrappers.Int32Value)(nil), // 7: google.protobuf.Int32Value + (*wrappers.UInt32Value)(nil), // 8: google.protobuf.UInt32Value + (*wrappers.Int64Value)(nil), // 9: google.protobuf.Int64Value + (*wrappers.UInt64Value)(nil), // 10: google.protobuf.UInt64Value +} +var file_examples_internal_helloworld_helloworld_proto_depIdxs = []int32{ + 2, // 0: helloworld.HelloRequest.strVal:type_name -> google.protobuf.StringValue + 3, // 1: helloworld.HelloRequest.floatVal:type_name -> google.protobuf.FloatValue + 4, // 2: helloworld.HelloRequest.doubleVal:type_name -> google.protobuf.DoubleValue + 5, // 3: helloworld.HelloRequest.boolVal:type_name -> google.protobuf.BoolValue + 6, // 4: helloworld.HelloRequest.bytesVal:type_name -> google.protobuf.BytesValue + 7, // 5: helloworld.HelloRequest.int32Val:type_name -> google.protobuf.Int32Value + 8, // 6: helloworld.HelloRequest.uint32Val:type_name -> google.protobuf.UInt32Value + 9, // 7: helloworld.HelloRequest.int64Val:type_name -> google.protobuf.Int64Value + 10, // 8: helloworld.HelloRequest.uint64Val:type_name -> google.protobuf.UInt64Value + 0, // 9: helloworld.Greeter.SayHello:input_type -> helloworld.HelloRequest + 1, // 10: helloworld.Greeter.SayHello:output_type -> helloworld.HelloReply + 10, // [10:11] is the sub-list for method output_type + 9, // [9:10] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_examples_internal_helloworld_helloworld_proto_init() } +func file_examples_internal_helloworld_helloworld_proto_init() { + if File_examples_internal_helloworld_helloworld_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_helloworld_helloworld_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HelloRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_helloworld_helloworld_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HelloReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_helloworld_helloworld_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_helloworld_helloworld_proto_goTypes, + DependencyIndexes: file_examples_internal_helloworld_helloworld_proto_depIdxs, + MessageInfos: file_examples_internal_helloworld_helloworld_proto_msgTypes, + }.Build() + File_examples_internal_helloworld_helloworld_proto = out.File + file_examples_internal_helloworld_helloworld_proto_rawDesc = nil + file_examples_internal_helloworld_helloworld_proto_goTypes = nil + file_examples_internal_helloworld_helloworld_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // GreeterClient is the client API for Greeter service. // @@ -236,10 +381,10 @@ type GreeterClient interface { } type greeterClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewGreeterClient(cc *grpc.ClientConn) GreeterClient { +func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient { return &greeterClient{cc} } @@ -261,7 +406,7 @@ type GreeterServer interface { type UnimplementedGreeterServer struct { } -func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) { +func (*UnimplementedGreeterServer) SayHello(context.Context, *HelloRequest) (*HelloReply, error) { return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented") } diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index 57a5e220e53..f7b9d441dd4 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -23,9 +23,11 @@ go_test( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_google_go_cmp//cmp:go_default_library", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 9228ae4b832..9a326f3ed53 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -21,12 +21,14 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" + "github.com/google/go-cmp/cmp" gw "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/testing/protocmp" ) type errorBody struct { @@ -242,8 +244,8 @@ func testEchoBody(t *testing.T, port int) { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return } - if got, want := received, sent; !reflect.DeepEqual(got, want) { - t.Errorf("msg.Id = %q; want %q", got, want) + if diff := cmp.Diff(received, sent, protocmp.Transform()); diff != "" { + t.Errorf(diff) } if got, want := resp.Header.Get("Grpc-Metadata-Foo"), "foo1"; got != want { @@ -330,8 +332,8 @@ func testABECreate(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } @@ -439,8 +441,8 @@ func testABECreateBody(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } @@ -662,8 +664,8 @@ func testABELookup(t *testing.T, port int) { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return } - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } if got, want := resp.Header.Get("Grpc-Metadata-Uuid"), want.Uuid; got != want { @@ -812,8 +814,8 @@ func TestABEPatchBody(t *testing.T) { want, got := tc.want, getABE(t, port, uuid) got.Uuid = "" // empty out uuid so we don't need to worry about it in comparisons - if !reflect.DeepEqual(want, got) { - t.Errorf("want %v\ngot %v", want, got) + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } }) } @@ -1052,8 +1054,8 @@ func testABEBulkEcho(t *testing.T, port int) { }() wg.Wait() - if !reflect.DeepEqual(got, want) { - t.Errorf("got = %v; want %v", got, want) + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } @@ -1274,8 +1276,8 @@ func testABERepeated(t *testing.T, port int) { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return } - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index e6f1bc175a3..0f6c9f69872 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" empty "github.com/golang/protobuf/ptypes/empty" @@ -20,19 +22,22 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // NumericEnum is one or zero. type NumericEnum int32 @@ -44,22 +49,43 @@ const ( NumericEnum_ONE NumericEnum = 1 ) -var NumericEnum_name = map[int32]string{ - 0: "ZERO", - 1: "ONE", -} +// Enum value maps for NumericEnum. +var ( + NumericEnum_name = map[int32]string{ + 0: "ZERO", + 1: "ONE", + } + NumericEnum_value = map[string]int32{ + "ZERO": 0, + "ONE": 1, + } +) -var NumericEnum_value = map[string]int32{ - "ZERO": 0, - "ONE": 1, +func (x NumericEnum) Enum() *NumericEnum { + p := new(NumericEnum) + *p = x + return p } func (x NumericEnum) String() string { - return proto.EnumName(NumericEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NumericEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[0].Descriptor() +} + +func (NumericEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[0] +} + +func (x NumericEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use NumericEnum.Descriptor instead. func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{0} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0} } // DeepEnum is one or zero. @@ -72,26 +98,51 @@ const ( ABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1 ) -var ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ - 0: "FALSE", - 1: "TRUE", -} +// Enum value maps for ABitOfEverything_Nested_DeepEnum. +var ( + ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ + 0: "FALSE", + 1: "TRUE", + } + ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ + "FALSE": 0, + "TRUE": 1, + } +) -var ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ - "FALSE": 0, - "TRUE": 1, +func (x ABitOfEverything_Nested_DeepEnum) Enum() *ABitOfEverything_Nested_DeepEnum { + p := new(ABitOfEverything_Nested_DeepEnum) + *p = x + return p } func (x ABitOfEverything_Nested_DeepEnum) String() string { - return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1].Descriptor() +} + +func (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes[1] +} + +func (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use ABitOfEverything_Nested_DeepEnum.Descriptor instead. func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{0, 0, 0} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0, 0, 0} } // Intentionally complicated message type to cover many features of Protobuf. type ABitOfEverything struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` @@ -114,7 +165,7 @@ type ABitOfEverything struct { Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` - // Types that are valid to be assigned to OneofValue: + // Types that are assignable to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` @@ -134,208 +185,196 @@ type ABitOfEverything struct { // repeated nested object comment (This comment is overridden by the field annotation) RepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3" json:"repeated_nested_annotation,omitempty"` // nested object comments (This comment is overridden by the field annotation) - NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` - Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` + Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` } -func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } -func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } -func (*ABitOfEverything) ProtoMessage() {} -func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{0} +func (x *ABitOfEverything) Reset() { + *x = ABitOfEverything{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) -} -func (m *ABitOfEverything) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ABitOfEverything.Marshal(b, m, deterministic) +func (x *ABitOfEverything) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ABitOfEverything) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything.Merge(m, src) -} -func (m *ABitOfEverything) XXX_Size() int { - return xxx_messageInfo_ABitOfEverything.Size(m) -} -func (m *ABitOfEverything) XXX_DiscardUnknown() { - xxx_messageInfo_ABitOfEverything.DiscardUnknown(m) + +func (*ABitOfEverything) ProtoMessage() {} + +func (x *ABitOfEverything) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo +// Deprecated: Use ABitOfEverything.ProtoReflect.Descriptor instead. +func (*ABitOfEverything) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0} +} -func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { - if m != nil { - return m.SingleNested +func (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { + if x != nil { + return x.SingleNested } return nil } -func (m *ABitOfEverything) GetUuid() string { - if m != nil { - return m.Uuid +func (x *ABitOfEverything) GetUuid() string { + if x != nil { + return x.Uuid } return "" } -func (m *ABitOfEverything) GetNested() []*ABitOfEverything_Nested { - if m != nil { - return m.Nested +func (x *ABitOfEverything) GetNested() []*ABitOfEverything_Nested { + if x != nil { + return x.Nested } return nil } -func (m *ABitOfEverything) GetFloatValue() float32 { - if m != nil { - return m.FloatValue +func (x *ABitOfEverything) GetFloatValue() float32 { + if x != nil { + return x.FloatValue } return 0 } -func (m *ABitOfEverything) GetDoubleValue() float64 { - if m != nil { - return m.DoubleValue +func (x *ABitOfEverything) GetDoubleValue() float64 { + if x != nil { + return x.DoubleValue } return 0 } -func (m *ABitOfEverything) GetInt64Value() int64 { - if m != nil { - return m.Int64Value +func (x *ABitOfEverything) GetInt64Value() int64 { + if x != nil { + return x.Int64Value } return 0 } -func (m *ABitOfEverything) GetUint64Value() uint64 { - if m != nil { - return m.Uint64Value +func (x *ABitOfEverything) GetUint64Value() uint64 { + if x != nil { + return x.Uint64Value } return 0 } -func (m *ABitOfEverything) GetInt32Value() int32 { - if m != nil { - return m.Int32Value +func (x *ABitOfEverything) GetInt32Value() int32 { + if x != nil { + return x.Int32Value } return 0 } -func (m *ABitOfEverything) GetFixed64Value() uint64 { - if m != nil { - return m.Fixed64Value +func (x *ABitOfEverything) GetFixed64Value() uint64 { + if x != nil { + return x.Fixed64Value } return 0 } -func (m *ABitOfEverything) GetFixed32Value() uint32 { - if m != nil { - return m.Fixed32Value +func (x *ABitOfEverything) GetFixed32Value() uint32 { + if x != nil { + return x.Fixed32Value } return 0 } -func (m *ABitOfEverything) GetBoolValue() bool { - if m != nil { - return m.BoolValue +func (x *ABitOfEverything) GetBoolValue() bool { + if x != nil { + return x.BoolValue } return false } -func (m *ABitOfEverything) GetStringValue() string { - if m != nil { - return m.StringValue +func (x *ABitOfEverything) GetStringValue() string { + if x != nil { + return x.StringValue } return "" } -func (m *ABitOfEverything) GetBytesValue() []byte { - if m != nil { - return m.BytesValue +func (x *ABitOfEverything) GetBytesValue() []byte { + if x != nil { + return x.BytesValue } return nil } -func (m *ABitOfEverything) GetUint32Value() uint32 { - if m != nil { - return m.Uint32Value +func (x *ABitOfEverything) GetUint32Value() uint32 { + if x != nil { + return x.Uint32Value } return 0 } -func (m *ABitOfEverything) GetEnumValue() NumericEnum { - if m != nil { - return m.EnumValue +func (x *ABitOfEverything) GetEnumValue() NumericEnum { + if x != nil { + return x.EnumValue } return NumericEnum_ZERO } -func (m *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum { - if m != nil { - return m.PathEnumValue +func (x *ABitOfEverything) GetPathEnumValue() pathenum.PathEnum { + if x != nil { + return x.PathEnumValue } return pathenum.PathEnum_ABC } -func (m *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePathEnum_NestedPathEnum { - if m != nil { - return m.NestedPathEnumValue +func (x *ABitOfEverything) GetNestedPathEnumValue() pathenum.MessagePathEnum_NestedPathEnum { + if x != nil { + return x.NestedPathEnumValue } return pathenum.MessagePathEnum_GHI } -func (m *ABitOfEverything) GetSfixed32Value() int32 { - if m != nil { - return m.Sfixed32Value +func (x *ABitOfEverything) GetSfixed32Value() int32 { + if x != nil { + return x.Sfixed32Value } return 0 } -func (m *ABitOfEverything) GetSfixed64Value() int64 { - if m != nil { - return m.Sfixed64Value +func (x *ABitOfEverything) GetSfixed64Value() int64 { + if x != nil { + return x.Sfixed64Value } return 0 } -func (m *ABitOfEverything) GetSint32Value() int32 { - if m != nil { - return m.Sint32Value +func (x *ABitOfEverything) GetSint32Value() int32 { + if x != nil { + return x.Sint32Value } return 0 } -func (m *ABitOfEverything) GetSint64Value() int64 { - if m != nil { - return m.Sint64Value +func (x *ABitOfEverything) GetSint64Value() int64 { + if x != nil { + return x.Sint64Value } return 0 } -func (m *ABitOfEverything) GetRepeatedStringValue() []string { - if m != nil { - return m.RepeatedStringValue +func (x *ABitOfEverything) GetRepeatedStringValue() []string { + if x != nil { + return x.RepeatedStringValue } return nil } -type isABitOfEverything_OneofValue interface { - isABitOfEverything_OneofValue() -} - -type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` -} - -type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` -} - -func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} - -func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} - func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { if m != nil { return m.OneofValue @@ -343,172 +382,126 @@ func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { return nil } -func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { - if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { +func (x *ABitOfEverything) GetOneofEmpty() *empty.Empty { + if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty } return nil } -func (m *ABitOfEverything) GetOneofString() string { - if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofString); ok { +func (x *ABitOfEverything) GetOneofString() string { + if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofString); ok { return x.OneofString } return "" } -func (m *ABitOfEverything) GetMapValue() map[string]NumericEnum { - if m != nil { - return m.MapValue +func (x *ABitOfEverything) GetMapValue() map[string]NumericEnum { + if x != nil { + return x.MapValue } return nil } -func (m *ABitOfEverything) GetMappedStringValue() map[string]string { - if m != nil { - return m.MappedStringValue +func (x *ABitOfEverything) GetMappedStringValue() map[string]string { + if x != nil { + return x.MappedStringValue } return nil } -func (m *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested { - if m != nil { - return m.MappedNestedValue +func (x *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested { + if x != nil { + return x.MappedNestedValue } return nil } -func (m *ABitOfEverything) GetNonConventionalNameValue() string { - if m != nil { - return m.NonConventionalNameValue +func (x *ABitOfEverything) GetNonConventionalNameValue() string { + if x != nil { + return x.NonConventionalNameValue } return "" } -func (m *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { - if m != nil { - return m.TimestampValue +func (x *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { + if x != nil { + return x.TimestampValue } return nil } -func (m *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { - if m != nil { - return m.RepeatedEnumValue +func (x *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { + if x != nil { + return x.RepeatedEnumValue } return nil } -func (m *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { - if m != nil { - return m.RepeatedEnumAnnotation +func (x *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { + if x != nil { + return x.RepeatedEnumAnnotation } return nil } -func (m *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { - if m != nil { - return m.EnumValueAnnotation +func (x *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { + if x != nil { + return x.EnumValueAnnotation } return NumericEnum_ZERO } -func (m *ABitOfEverything) GetRepeatedStringAnnotation() []string { - if m != nil { - return m.RepeatedStringAnnotation +func (x *ABitOfEverything) GetRepeatedStringAnnotation() []string { + if x != nil { + return x.RepeatedStringAnnotation } return nil } -func (m *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { - if m != nil { - return m.RepeatedNestedAnnotation +func (x *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { + if x != nil { + return x.RepeatedNestedAnnotation } return nil } -func (m *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { - if m != nil { - return m.NestedAnnotation +func (x *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { + if x != nil { + return x.NestedAnnotation } return nil } -func (m *ABitOfEverything) GetInt64OverrideType() int64 { - if m != nil { - return m.Int64OverrideType +func (x *ABitOfEverything) GetInt64OverrideType() int64 { + if x != nil { + return x.Int64OverrideType } return 0 } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ABitOfEverything) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ABitOfEverything_OneofEmpty)(nil), - (*ABitOfEverything_OneofString)(nil), - } -} - -// Nested is nested type. -type ABitOfEverything_Nested struct { - // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` - // DeepEnum comment. - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested{} } -func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } -func (*ABitOfEverything_Nested) ProtoMessage() {} -func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{0, 0} +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() } -func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) -} -func (m *ABitOfEverything_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ABitOfEverything_Nested.Marshal(b, m, deterministic) -} -func (m *ABitOfEverything_Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything_Nested.Merge(m, src) -} -func (m *ABitOfEverything_Nested) XXX_Size() int { - return xxx_messageInfo_ABitOfEverything_Nested.Size(m) -} -func (m *ABitOfEverything_Nested) XXX_DiscardUnknown() { - xxx_messageInfo_ABitOfEverything_Nested.DiscardUnknown(m) +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` } -var xxx_messageInfo_ABitOfEverything_Nested proto.InternalMessageInfo - -func (m *ABitOfEverything_Nested) GetName() string { - if m != nil { - return m.Name - } - return "" +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` } -func (m *ABitOfEverything_Nested) GetAmount() uint32 { - if m != nil { - return m.Amount - } - return 0 -} +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} -func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { - if m != nil { - return m.Ok - } - return ABitOfEverything_Nested_FALSE -} +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} // ABitOfEverythingRepeated is used to validate repeated path parameter functionality type ABitOfEverythingRepeated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // repeated values. they are comma-separated in path PathRepeatedFloatValue []float32 `protobuf:"fixed32,1,rep,packed,name=path_repeated_float_value,json=pathRepeatedFloatValue,proto3" json:"path_repeated_float_value,omitempty"` PathRepeatedDoubleValue []float64 `protobuf:"fixed64,2,rep,packed,name=path_repeated_double_value,json=pathRepeatedDoubleValue,proto3" json:"path_repeated_double_value,omitempty"` @@ -526,539 +519,1334 @@ type ABitOfEverythingRepeated struct { PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` PathRepeatedSint64Value []int64 `protobuf:"zigzag64,16,rep,packed,name=path_repeated_sint64_value,json=pathRepeatedSint64Value,proto3" json:"path_repeated_sint64_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *ABitOfEverythingRepeated) Reset() { *m = ABitOfEverythingRepeated{} } -func (m *ABitOfEverythingRepeated) String() string { return proto.CompactTextString(m) } -func (*ABitOfEverythingRepeated) ProtoMessage() {} -func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{1} +func (x *ABitOfEverythingRepeated) Reset() { + *x = ABitOfEverythingRepeated{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ABitOfEverythingRepeated) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ABitOfEverythingRepeated.Unmarshal(m, b) +func (x *ABitOfEverythingRepeated) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ABitOfEverythingRepeated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ABitOfEverythingRepeated.Marshal(b, m, deterministic) -} -func (m *ABitOfEverythingRepeated) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverythingRepeated.Merge(m, src) -} -func (m *ABitOfEverythingRepeated) XXX_Size() int { - return xxx_messageInfo_ABitOfEverythingRepeated.Size(m) -} -func (m *ABitOfEverythingRepeated) XXX_DiscardUnknown() { - xxx_messageInfo_ABitOfEverythingRepeated.DiscardUnknown(m) + +func (*ABitOfEverythingRepeated) ProtoMessage() {} + +func (x *ABitOfEverythingRepeated) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ABitOfEverythingRepeated proto.InternalMessageInfo +// Deprecated: Use ABitOfEverythingRepeated.ProtoReflect.Descriptor instead. +func (*ABitOfEverythingRepeated) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{1} +} -func (m *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float32 { - if m != nil { - return m.PathRepeatedFloatValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedFloatValue() []float32 { + if x != nil { + return x.PathRepeatedFloatValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedDoubleValue() []float64 { - if m != nil { - return m.PathRepeatedDoubleValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedDoubleValue() []float64 { + if x != nil { + return x.PathRepeatedDoubleValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedInt64Value() []int64 { - if m != nil { - return m.PathRepeatedInt64Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedInt64Value() []int64 { + if x != nil { + return x.PathRepeatedInt64Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedUint64Value() []uint64 { - if m != nil { - return m.PathRepeatedUint64Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedUint64Value() []uint64 { + if x != nil { + return x.PathRepeatedUint64Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedInt32Value() []int32 { - if m != nil { - return m.PathRepeatedInt32Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedInt32Value() []int32 { + if x != nil { + return x.PathRepeatedInt32Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedFixed64Value() []uint64 { - if m != nil { - return m.PathRepeatedFixed64Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedFixed64Value() []uint64 { + if x != nil { + return x.PathRepeatedFixed64Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedFixed32Value() []uint32 { - if m != nil { - return m.PathRepeatedFixed32Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedFixed32Value() []uint32 { + if x != nil { + return x.PathRepeatedFixed32Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedBoolValue() []bool { - if m != nil { - return m.PathRepeatedBoolValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedBoolValue() []bool { + if x != nil { + return x.PathRepeatedBoolValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedStringValue() []string { - if m != nil { - return m.PathRepeatedStringValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedStringValue() []string { + if x != nil { + return x.PathRepeatedStringValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedBytesValue() [][]byte { - if m != nil { - return m.PathRepeatedBytesValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedBytesValue() [][]byte { + if x != nil { + return x.PathRepeatedBytesValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedUint32Value() []uint32 { - if m != nil { - return m.PathRepeatedUint32Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedUint32Value() []uint32 { + if x != nil { + return x.PathRepeatedUint32Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedEnumValue() []NumericEnum { - if m != nil { - return m.PathRepeatedEnumValue +func (x *ABitOfEverythingRepeated) GetPathRepeatedEnumValue() []NumericEnum { + if x != nil { + return x.PathRepeatedEnumValue } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedSfixed32Value() []int32 { - if m != nil { - return m.PathRepeatedSfixed32Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed32Value() []int32 { + if x != nil { + return x.PathRepeatedSfixed32Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedSfixed64Value() []int64 { - if m != nil { - return m.PathRepeatedSfixed64Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedSfixed64Value() []int64 { + if x != nil { + return x.PathRepeatedSfixed64Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedSint32Value() []int32 { - if m != nil { - return m.PathRepeatedSint32Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedSint32Value() []int32 { + if x != nil { + return x.PathRepeatedSint32Value } return nil } -func (m *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 { - if m != nil { - return m.PathRepeatedSint64Value +func (x *ABitOfEverythingRepeated) GetPathRepeatedSint64Value() []int64 { + if x != nil { + return x.PathRepeatedSint64Value } return nil } type Body struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Body) Reset() { *m = Body{} } -func (m *Body) String() string { return proto.CompactTextString(m) } -func (*Body) ProtoMessage() {} -func (*Body) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{2} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } -func (m *Body) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Body.Unmarshal(m, b) -} -func (m *Body) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Body.Marshal(b, m, deterministic) -} -func (m *Body) XXX_Merge(src proto.Message) { - xxx_messageInfo_Body.Merge(m, src) +func (x *Body) Reset() { + *x = Body{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Body) XXX_Size() int { - return xxx_messageInfo_Body.Size(m) + +func (x *Body) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Body) XXX_DiscardUnknown() { - xxx_messageInfo_Body.DiscardUnknown(m) + +func (*Body) ProtoMessage() {} + +func (x *Body) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Body proto.InternalMessageInfo +// Deprecated: Use Body.ProtoReflect.Descriptor instead. +func (*Body) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{2} +} -func (m *Body) GetName() string { - if m != nil { - return m.Name +func (x *Body) GetName() string { + if x != nil { + return x.Name } return "" } type MessageWithBody struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Data *Body `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *MessageWithBody) Reset() { *m = MessageWithBody{} } -func (m *MessageWithBody) String() string { return proto.CompactTextString(m) } -func (*MessageWithBody) ProtoMessage() {} -func (*MessageWithBody) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{3} + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Data *Body `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` } -func (m *MessageWithBody) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MessageWithBody.Unmarshal(m, b) -} -func (m *MessageWithBody) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MessageWithBody.Marshal(b, m, deterministic) -} -func (m *MessageWithBody) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessageWithBody.Merge(m, src) +func (x *MessageWithBody) Reset() { + *x = MessageWithBody{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MessageWithBody) XXX_Size() int { - return xxx_messageInfo_MessageWithBody.Size(m) + +func (x *MessageWithBody) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *MessageWithBody) XXX_DiscardUnknown() { - xxx_messageInfo_MessageWithBody.DiscardUnknown(m) + +func (*MessageWithBody) ProtoMessage() {} + +func (x *MessageWithBody) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_MessageWithBody proto.InternalMessageInfo +// Deprecated: Use MessageWithBody.ProtoReflect.Descriptor instead. +func (*MessageWithBody) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{3} +} -func (m *MessageWithBody) GetId() string { - if m != nil { - return m.Id +func (x *MessageWithBody) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *MessageWithBody) GetData() *Body { - if m != nil { - return m.Data +func (x *MessageWithBody) GetData() *Body { + if x != nil { + return x.Data } return nil } // UpdateV2Request request for update includes the message and the update mask type UpdateV2Request struct { - Abe *ABitOfEverything `protobuf:"bytes,1,opt,name=abe,proto3" json:"abe,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Abe *ABitOfEverything `protobuf:"bytes,1,opt,name=abe,proto3" json:"abe,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *UpdateV2Request) Reset() { + *x = UpdateV2Request{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateV2Request) ProtoMessage() {} + +func (x *UpdateV2Request) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *UpdateV2Request) Reset() { *m = UpdateV2Request{} } -func (m *UpdateV2Request) String() string { return proto.CompactTextString(m) } -func (*UpdateV2Request) ProtoMessage() {} +// Deprecated: Use UpdateV2Request.ProtoReflect.Descriptor instead. func (*UpdateV2Request) Descriptor() ([]byte, []int) { - return fileDescriptor_e6ccf6cab3ab66ab, []int{4} + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{4} } -func (m *UpdateV2Request) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdateV2Request.Unmarshal(m, b) +func (x *UpdateV2Request) GetAbe() *ABitOfEverything { + if x != nil { + return x.Abe + } + return nil } -func (m *UpdateV2Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdateV2Request.Marshal(b, m, deterministic) + +func (x *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil } -func (m *UpdateV2Request) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateV2Request.Merge(m, src) + +// Nested is nested type. +type ABitOfEverything_Nested struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is nested field. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // DeepEnum comment. + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` } -func (m *UpdateV2Request) XXX_Size() int { - return xxx_messageInfo_UpdateV2Request.Size(m) + +func (x *ABitOfEverything_Nested) Reset() { + *x = ABitOfEverything_Nested{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UpdateV2Request) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateV2Request.DiscardUnknown(m) + +func (x *ABitOfEverything_Nested) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_UpdateV2Request proto.InternalMessageInfo +func (*ABitOfEverything_Nested) ProtoMessage() {} -func (m *UpdateV2Request) GetAbe() *ABitOfEverything { - if m != nil { - return m.Abe +func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *UpdateV2Request) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask +// Deprecated: Use ABitOfEverything_Nested.ProtoReflect.Descriptor instead. +func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *ABitOfEverything_Nested) GetName() string { + if x != nil { + return x.Name } - return nil + return "" } -func init() { - proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) - proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) - proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything") - proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry") - proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry") - proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry") - proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested") - proto.RegisterType((*ABitOfEverythingRepeated)(nil), "grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated") - proto.RegisterType((*Body)(nil), "grpc.gateway.examples.internal.examplepb.Body") - proto.RegisterType((*MessageWithBody)(nil), "grpc.gateway.examples.internal.examplepb.MessageWithBody") - proto.RegisterType((*UpdateV2Request)(nil), "grpc.gateway.examples.internal.examplepb.UpdateV2Request") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/a_bit_of_everything.proto", fileDescriptor_e6ccf6cab3ab66ab) -} - -var fileDescriptor_e6ccf6cab3ab66ab = []byte{ - // 3643 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4b, 0x6c, 0x1b, 0x49, - 0x7a, 0x56, 0xb1, 0xa9, 0x57, 0xc9, 0x92, 0xa8, 0x92, 0x65, 0xcb, 0xb4, 0x66, 0x5c, 0x43, 0x7b, - 0x77, 0xdb, 0x5c, 0x93, 0x2d, 0xb5, 0xe4, 0x19, 0x9b, 0x93, 0xdd, 0x19, 0x52, 0x92, 0x3d, 0xb2, - 0x3d, 0xb2, 0xdd, 0xd6, 0x78, 0x67, 0xbc, 0x98, 0x55, 0x8a, 0x64, 0x51, 0x6c, 0x8b, 0xfd, 0xd8, - 0xee, 0x6a, 0x59, 0xb4, 0x42, 0x64, 0x12, 0x24, 0x58, 0x20, 0x09, 0x90, 0x80, 0x41, 0x12, 0x24, - 0x93, 0xb9, 0x25, 0x97, 0x60, 0x0f, 0xb9, 0xe4, 0x10, 0xec, 0x21, 0xa7, 0x60, 0x0f, 0xb9, 0x4d, - 0x80, 0xbd, 0x07, 0x09, 0x72, 0x08, 0x72, 0x0b, 0x30, 0x40, 0x0e, 0x0b, 0x04, 0x55, 0xdd, 0x4d, - 0x76, 0xf3, 0x61, 0x49, 0x23, 0x07, 0x33, 0x3e, 0x58, 0x5d, 0x55, 0xff, 0xe3, 0xfb, 0xab, 0xfe, - 0xfe, 0x1f, 0xd5, 0x84, 0xef, 0xd2, 0x43, 0x62, 0xd8, 0x0d, 0xea, 0x2a, 0xba, 0xc9, 0xa8, 0x63, - 0x92, 0x86, 0x62, 0x3b, 0x16, 0xb3, 0x94, 0x60, 0xde, 0x2e, 0x2b, 0x64, 0xb7, 0xac, 0xb3, 0x5d, - 0xab, 0xb6, 0x4b, 0x0f, 0xa8, 0xd3, 0x64, 0x75, 0xdd, 0xdc, 0xcb, 0x0b, 0x1a, 0x24, 0xef, 0x39, - 0x76, 0x25, 0xbf, 0x47, 0x18, 0x7d, 0x41, 0x9a, 0xf9, 0x50, 0x52, 0x3e, 0x94, 0x94, 0xef, 0xc8, - 0x48, 0x2f, 0xed, 0x59, 0xd6, 0x5e, 0x83, 0x2a, 0xc4, 0xd6, 0x15, 0x62, 0x9a, 0x16, 0x23, 0x4c, - 0xb7, 0x4c, 0xd7, 0x97, 0x93, 0xc6, 0xc1, 0xaa, 0x18, 0x95, 0xbd, 0x9a, 0x52, 0xd3, 0x69, 0xa3, - 0xba, 0x6b, 0x10, 0x77, 0x3f, 0xa0, 0xb8, 0xdc, 0x4b, 0x41, 0x0d, 0x9b, 0x35, 0x83, 0xc5, 0x37, - 0x7b, 0x17, 0xab, 0x9e, 0x23, 0xe4, 0x0f, 0x5b, 0x7f, 0xe1, 0x10, 0xdb, 0xa6, 0x4e, 0xa8, 0x7e, - 0x79, 0xd8, 0x1e, 0xd8, 0x84, 0xd5, 0xa9, 0xe9, 0x19, 0xe2, 0x61, 0x97, 0x3f, 0x05, 0x1c, 0xd7, - 0x87, 0x71, 0xb8, 0x5e, 0x59, 0x31, 0xa8, 0xeb, 0x92, 0x3d, 0x1a, 0x90, 0x66, 0x5f, 0x41, 0xaa, - 0xf6, 0xd0, 0x5e, 0xe9, 0x05, 0xca, 0x74, 0x83, 0xba, 0x8c, 0x18, 0x76, 0x40, 0x70, 0x43, 0xfc, - 0xa9, 0xe4, 0xf6, 0xa8, 0x99, 0x73, 0x5f, 0x90, 0xbd, 0x3d, 0xea, 0x28, 0x96, 0x2d, 0xb6, 0xb2, - 0x7f, 0x5b, 0x33, 0xff, 0xbe, 0x04, 0x53, 0xc5, 0x92, 0xce, 0x1e, 0xd6, 0x36, 0x3b, 0x27, 0x87, - 0x6a, 0x70, 0xda, 0xd5, 0xcd, 0xbd, 0x06, 0xdd, 0x35, 0xa9, 0xcb, 0x68, 0x75, 0xf1, 0x12, 0x06, - 0xf2, 0x94, 0x5a, 0xcc, 0x9f, 0xf4, 0x2c, 0xf3, 0xbd, 0x22, 0xf3, 0xdb, 0x42, 0x90, 0x76, 0xce, - 0x97, 0xeb, 0x8f, 0x50, 0x1d, 0x26, 0x3d, 0x4f, 0xaf, 0x2e, 0x02, 0x0c, 0xe4, 0xc9, 0xd2, 0x4e, - 0xbb, 0xf8, 0xf8, 0x33, 0x00, 0xfe, 0x00, 0xdc, 0xff, 0x31, 0xc9, 0xd5, 0x8a, 0xb9, 0x3b, 0xcb, - 0xb9, 0xdb, 0x9f, 0x1e, 0xdd, 0x6a, 0xe5, 0xa2, 0xc3, 0xb5, 0xd3, 0x0c, 0x57, 0xd4, 0x96, 0x26, - 0x34, 0xa0, 0x4f, 0xe0, 0x58, 0x60, 0x4a, 0x02, 0x4b, 0xaf, 0xc7, 0x94, 0x40, 0x20, 0xba, 0x07, - 0xa7, 0x6a, 0x0d, 0x8b, 0xb0, 0xdd, 0x03, 0xd2, 0xf0, 0xe8, 0xa2, 0x84, 0x81, 0x9c, 0x28, 0x5d, - 0x6f, 0x17, 0xbf, 0xab, 0xce, 0xdd, 0xe1, 0xf3, 0x58, 0xcc, 0x63, 0xe1, 0xae, 0x05, 0x69, 0x39, - 0xaf, 0x7e, 0x09, 0xa2, 0x0c, 0x1a, 0x14, 0x83, 0xa7, 0xfc, 0x19, 0xbd, 0x05, 0xcf, 0x55, 0x2d, - 0xaf, 0xdc, 0xa0, 0x81, 0xb0, 0x24, 0x06, 0x32, 0xd0, 0xa6, 0xfc, 0x39, 0x9f, 0xe4, 0x0a, 0x9c, - 0xd2, 0x4d, 0xf6, 0xf6, 0x5a, 0x40, 0x31, 0x8a, 0x81, 0x2c, 0x69, 0x50, 0x4c, 0x75, 0x64, 0x78, - 0x51, 0x8a, 0x31, 0x0c, 0xe4, 0xa4, 0x36, 0xe5, 0x45, 0x48, 0x7c, 0x19, 0xab, 0x6a, 0x40, 0x31, - 0x8e, 0x81, 0x3c, 0x2a, 0x64, 0xac, 0xaa, 0x3e, 0xc1, 0x55, 0x38, 0x5d, 0xd3, 0x0f, 0x69, 0xb5, - 0x23, 0x64, 0x02, 0x03, 0x79, 0x4c, 0x3b, 0x17, 0x4c, 0xc6, 0x89, 0x3a, 0x72, 0x26, 0x31, 0x90, - 0xc7, 0x03, 0xa2, 0x50, 0xd2, 0x1b, 0x10, 0x96, 0x2d, 0xab, 0x11, 0x50, 0x40, 0x0c, 0xe4, 0x09, - 0x6d, 0x92, 0xcf, 0x74, 0xc0, 0xba, 0xcc, 0xd1, 0xcd, 0xbd, 0x80, 0x60, 0x8a, 0x7b, 0x82, 0x36, - 0xe5, 0xcf, 0x75, 0xc0, 0x96, 0x9b, 0x8c, 0xba, 0x01, 0xc5, 0x1b, 0x18, 0xc8, 0xe7, 0x34, 0x28, - 0xa6, 0x62, 0x06, 0x77, 0x60, 0x4c, 0x63, 0x20, 0x4f, 0xfb, 0x06, 0x87, 0x28, 0x76, 0x20, 0xe4, - 0x6f, 0x66, 0x40, 0x30, 0x83, 0x81, 0x3c, 0xa3, 0xde, 0x3c, 0xb9, 0x0b, 0x6c, 0x7b, 0x06, 0x75, - 0xf4, 0xca, 0xa6, 0xe9, 0x19, 0xda, 0x24, 0x17, 0xe4, 0x4b, 0xfd, 0x04, 0xce, 0x76, 0x5e, 0xfa, - 0x40, 0xf4, 0x9b, 0x42, 0xf4, 0xca, 0x71, 0xa2, 0xc3, 0xa0, 0x91, 0x7f, 0x44, 0x58, 0x5d, 0x88, - 0x9d, 0xb6, 0x83, 0x27, 0x5f, 0xf4, 0x6f, 0xc1, 0x0b, 0xbe, 0x7b, 0xed, 0xf6, 0x6a, 0xb8, 0x22, - 0x34, 0xdc, 0x3d, 0xb1, 0x86, 0x0f, 0xfd, 0xe8, 0x11, 0x2a, 0x0a, 0xbc, 0xb7, 0xa3, 0x77, 0xde, - 0x8c, 0x8d, 0x7d, 0xed, 0xdf, 0x81, 0x33, 0x6e, 0xfc, 0x68, 0x67, 0x31, 0x90, 0x67, 0xb5, 0x69, - 0x37, 0x76, 0xb6, 0x1d, 0xb2, 0x8e, 0x9b, 0xa4, 0x30, 0x90, 0x53, 0x21, 0x59, 0xc4, 0x21, 0xdd, - 0xe8, 0xf9, 0xcc, 0x61, 0x20, 0xcf, 0x69, 0x53, 0x6e, 0xe4, 0x7c, 0x02, 0x92, 0x8e, 0x1c, 0x84, - 0x81, 0x8c, 0x7c, 0x92, 0x50, 0x8a, 0x0a, 0x17, 0x1c, 0x6a, 0x53, 0xc2, 0xf7, 0x24, 0xe6, 0x32, - 0xf3, 0x58, 0x92, 0x27, 0xb5, 0xf9, 0x70, 0xf1, 0x49, 0xc4, 0x75, 0x6e, 0xc3, 0x29, 0xcb, 0xa4, - 0x3c, 0x2b, 0xf1, 0x4c, 0xb0, 0x78, 0x5e, 0x44, 0xb1, 0x0b, 0x79, 0x3f, 0x82, 0xe6, 0xc3, 0x08, - 0x9a, 0xdf, 0xe4, 0xab, 0x1f, 0x8c, 0x68, 0x50, 0x10, 0x8b, 0x11, 0xba, 0x0a, 0xcf, 0xf9, 0xac, - 0xbe, 0xae, 0xc5, 0x05, 0xee, 0x98, 0x1f, 0x8c, 0x68, 0xbe, 0x40, 0x5f, 0x09, 0xa2, 0x70, 0xd2, - 0x20, 0x76, 0x80, 0xe3, 0x82, 0x08, 0x2c, 0x1f, 0x9c, 0x21, 0xb0, 0x7c, 0x48, 0x6c, 0x81, 0x7b, - 0xd3, 0x64, 0x4e, 0x53, 0x9b, 0x30, 0x82, 0x21, 0xfa, 0x1d, 0x00, 0xe7, 0x0d, 0x9e, 0x8d, 0x7a, - 0x2c, 0xbf, 0x28, 0x34, 0x3e, 0x3e, 0x9b, 0x46, 0x3b, 0xb6, 0x65, 0xbe, 0xea, 0x39, 0xa3, 0x77, - 0x3e, 0x8a, 0x21, 0x70, 0x4c, 0x1f, 0xc3, 0xe2, 0x6b, 0xc2, 0xe0, 0xbb, 0x65, 0x3f, 0x86, 0xc8, - 0x3c, 0x2a, 0xc0, 0x45, 0xd3, 0x32, 0xd7, 0x2d, 0xf3, 0x80, 0x9a, 0x3c, 0x87, 0x91, 0xc6, 0x36, - 0x31, 0xfc, 0xb0, 0xb8, 0x98, 0x16, 0x81, 0x63, 0xe8, 0x3a, 0x5a, 0x87, 0xb3, 0x9d, 0x44, 0x19, - 0x40, 0xbf, 0x2c, 0xdc, 0x21, 0xdd, 0xe7, 0x0e, 0x3b, 0x21, 0x9d, 0x36, 0xd3, 0x61, 0xf1, 0x85, - 0x50, 0xd8, 0x71, 0xb3, 0xe8, 0x2b, 0xb9, 0x84, 0xa5, 0xaf, 0x1f, 0x4f, 0xe6, 0x42, 0x89, 0xdd, - 0xd7, 0xef, 0x1f, 0x00, 0x5c, 0x8c, 0xeb, 0xe9, 0xe6, 0xed, 0x45, 0x7c, 0x06, 0x65, 0xa5, 0x8d, - 0x76, 0xb1, 0x98, 0xbd, 0xac, 0x05, 0xb2, 0xb1, 0xe9, 0x2f, 0x61, 0xae, 0x03, 0x33, 0x9d, 0x35, - 0xa8, 0x9a, 0x19, 0xbc, 0x58, 0xa5, 0x6e, 0xc5, 0xd1, 0x45, 0x15, 0x91, 0xd7, 0x2e, 0x44, 0x21, - 0x17, 0x3b, 0xd0, 0xd0, 0x17, 0x00, 0x2e, 0x74, 0xb7, 0x25, 0x0a, 0xfa, 0xad, 0x33, 0x44, 0xdc, - 0x92, 0xda, 0x2e, 0x2a, 0x59, 0xb4, 0xdd, 0x8f, 0xf5, 0xd2, 0xf6, 0x50, 0x88, 0xf3, 0x9d, 0x28, - 0x1d, 0xc1, 0x77, 0x00, 0xd3, 0xbd, 0x21, 0x24, 0x82, 0x31, 0xc3, 0xe3, 0x48, 0xe9, 0x56, 0xbb, - 0x78, 0x33, 0xbb, 0xd0, 0xd9, 0x04, 0x9f, 0x2c, 0xd0, 0xb7, 0xd4, 0x3b, 0x1d, 0x53, 0xb9, 0x18, - 0x8f, 0x40, 0x11, 0xbd, 0xbf, 0x04, 0x11, 0xc5, 0xc1, 0xdb, 0x13, 0x51, 0x7c, 0xf5, 0x35, 0x55, - 0x24, 0xa5, 0x3b, 0xed, 0xe2, 0x7a, 0xb6, 0x0b, 0xd2, 0xd7, 0x84, 0xad, 0xf2, 0x73, 0x5a, 0x61, - 0x81, 0x09, 0x57, 0x87, 0xac, 0x0e, 0xb6, 0xc4, 0x97, 0x1b, 0xb1, 0xe4, 0x6f, 0x00, 0x9c, 0xeb, - 0x37, 0xe0, 0xda, 0x6b, 0xaa, 0x0e, 0x4b, 0x6b, 0xed, 0xe2, 0x4a, 0x76, 0x7e, 0x7b, 0x00, 0xee, - 0xf4, 0xf6, 0x70, 0xb8, 0x29, 0xb3, 0x17, 0xe6, 0x3b, 0x70, 0xde, 0xcf, 0x26, 0xd6, 0x01, 0x75, - 0x1c, 0xbd, 0x4a, 0x77, 0x59, 0xd3, 0xa6, 0x8b, 0xdf, 0xe1, 0xb5, 0x52, 0x69, 0xbc, 0x5d, 0x4c, - 0xfe, 0x55, 0x02, 0x48, 0xda, 0x9c, 0xa0, 0x79, 0x18, 0x90, 0xec, 0x34, 0x6d, 0x9a, 0xfe, 0x4f, - 0x00, 0xc7, 0x82, 0xda, 0x14, 0xc1, 0xa4, 0x49, 0x0c, 0xea, 0xd7, 0xa6, 0x9a, 0x78, 0x46, 0x17, - 0xe0, 0x18, 0x31, 0x2c, 0xcf, 0x64, 0x8b, 0x09, 0x51, 0x63, 0x04, 0x23, 0x74, 0x00, 0x13, 0xd6, - 0xbe, 0xa8, 0xfc, 0x66, 0xd4, 0x7b, 0x67, 0xde, 0x86, 0xfc, 0x06, 0xa5, 0xb6, 0xf0, 0xfc, 0x74, - 0xbb, 0x78, 0x51, 0x5d, 0x08, 0x87, 0x71, 0xab, 0x13, 0xd6, 0x7e, 0xe6, 0x0a, 0x9c, 0x08, 0x17, - 0xd1, 0x24, 0x1c, 0xbd, 0x53, 0x7c, 0xf0, 0x64, 0x33, 0x35, 0x82, 0x26, 0x60, 0x72, 0x47, 0xfb, - 0x68, 0x33, 0x05, 0x0a, 0x17, 0xdb, 0xc5, 0xf3, 0x2a, 0x42, 0xa9, 0x23, 0x9c, 0xb1, 0xf6, 0x33, - 0x05, 0x9c, 0xe1, 0xf3, 0x19, 0xdc, 0x4a, 0x3b, 0x70, 0x3a, 0x96, 0x6d, 0x50, 0x0a, 0x4a, 0xfb, - 0xb4, 0x19, 0x58, 0xcb, 0x1f, 0xd1, 0x7d, 0x38, 0xea, 0x87, 0xb7, 0xc4, 0x59, 0xca, 0x25, 0x5f, - 0x46, 0x21, 0x71, 0x0b, 0xa4, 0x37, 0xe0, 0x85, 0xc1, 0xf9, 0x66, 0x80, 0xf2, 0xf3, 0x51, 0xe5, - 0x93, 0x51, 0x29, 0x3f, 0x03, 0xa1, 0x98, 0xde, 0x94, 0x31, 0x40, 0xcc, 0x8f, 0xa2, 0x62, 0x5e, - 0x4b, 0xd5, 0xdf, 0x45, 0x52, 0xf8, 0xcb, 0x44, 0xbb, 0xf8, 0x67, 0x09, 0xf8, 0x7b, 0x20, 0x3b, - 0x5f, 0xc4, 0x65, 0x9d, 0x61, 0xab, 0x86, 0xbb, 0xed, 0xaf, 0xba, 0xb5, 0x65, 0xb2, 0x30, 0x0f, - 0x35, 0x71, 0xc5, 0x32, 0xec, 0x86, 0x5e, 0x11, 0xaf, 0x5e, 0xd0, 0xd0, 0x61, 0xee, 0x94, 0x98, - 0x59, 0xb8, 0xc2, 0xdd, 0x14, 0x1b, 0xc4, 0x6c, 0xe2, 0x1a, 0x25, 0xcc, 0x73, 0xa8, 0xcb, 0x65, - 0x3d, 0x0a, 0x13, 0xd2, 0x97, 0x40, 0x34, 0x31, 0x5f, 0x82, 0x68, 0xe5, 0xff, 0x25, 0x88, 0xb5, - 0x0a, 0xd9, 0xa7, 0xf0, 0xda, 0x1d, 0xdd, 0xac, 0x62, 0xcb, 0x63, 0xd8, 0xb0, 0x1c, 0x8a, 0x49, - 0x99, 0x3f, 0xf6, 0xf5, 0x76, 0xf9, 0x3a, 0x63, 0xb6, 0x5b, 0x50, 0x94, 0x3d, 0x9d, 0xd5, 0xbd, - 0x72, 0xbe, 0x62, 0x19, 0x0a, 0xdf, 0x95, 0x1c, 0xad, 0x58, 0x6e, 0xd3, 0x65, 0x34, 0x18, 0x06, - 0x9b, 0xa4, 0xae, 0x21, 0xf5, 0x08, 0x67, 0xb8, 0x7e, 0xee, 0x3f, 0xcb, 0x95, 0xda, 0xea, 0xdb, - 0x2b, 0x74, 0x25, 0xb7, 0x56, 0x5e, 0x5b, 0xcb, 0xad, 0xdd, 0x5a, 0xad, 0xe6, 0xc8, 0xca, 0xcd, - 0xdb, 0xb9, 0x9b, 0x6b, 0x55, 0x52, 0xae, 0xd6, 0xde, 0xa1, 0xb7, 0x56, 0xd6, 0x32, 0xb8, 0x55, - 0x9a, 0x0e, 0x2b, 0x2f, 0x01, 0x2e, 0xf3, 0xb3, 0x49, 0xb8, 0xd8, 0x8b, 0x24, 0x8c, 0x44, 0xe8, - 0x36, 0xbc, 0x24, 0x8a, 0xdc, 0x4e, 0x88, 0x8c, 0xb6, 0x53, 0x00, 0x4b, 0x72, 0x42, 0xbb, 0xc0, - 0x09, 0x42, 0x86, 0x3b, 0xdd, 0x7e, 0xe9, 0x5d, 0x98, 0x8e, 0xb3, 0xc6, 0xba, 0x27, 0xde, 0xea, - 0x01, 0xed, 0x62, 0x94, 0x77, 0x23, 0xd2, 0x49, 0xf5, 0xe9, 0x8d, 0x56, 0xa0, 0x12, 0x96, 0x64, - 0x29, 0xae, 0x77, 0xab, 0x5b, 0x8c, 0xf6, 0xe9, 0x8d, 0x75, 0x5c, 0x49, 0x2c, 0xc9, 0xc9, 0xb8, - 0xde, 0x8f, 0x22, 0x95, 0xec, 0x20, 0xbd, 0x9d, 0xe2, 0x78, 0x14, 0x4b, 0xf2, 0x68, 0x9f, 0xde, - 0xb0, 0x4e, 0xfe, 0x01, 0xbc, 0xdc, 0xb3, 0x55, 0xb1, 0xf2, 0x7b, 0x0c, 0x4b, 0xf2, 0x98, 0xb6, - 0x18, 0xdb, 0xac, 0x68, 0x25, 0x3e, 0x98, 0x3d, 0xd2, 0x07, 0x4a, 0xf2, 0xf8, 0x00, 0xf6, 0x50, - 0xfb, 0x3b, 0x70, 0x31, 0xce, 0x1e, 0xe9, 0xec, 0x26, 0xb0, 0x24, 0x4f, 0x68, 0x0b, 0x51, 0xde, - 0x52, 0xa7, 0xcb, 0xeb, 0xdb, 0xae, 0x58, 0x19, 0x3b, 0x29, 0x0a, 0xf8, 0xd8, 0x76, 0xc5, 0x8b, - 0xf8, 0x9e, 0xed, 0x8a, 0x76, 0x83, 0x10, 0x4b, 0xf2, 0xb9, 0xf8, 0x76, 0x95, 0xba, 0x9d, 0xe1, - 0xc0, 0x63, 0xea, 0x98, 0x3b, 0x85, 0x25, 0x79, 0xba, 0xff, 0x98, 0x42, 0x6b, 0xcd, 0x5e, 0x6b, - 0x23, 0x15, 0xdf, 0xb9, 0xb3, 0x54, 0x7c, 0xb1, 0x4d, 0xea, 0x56, 0x7d, 0xef, 0xc1, 0xa5, 0x9e, - 0x4d, 0x8a, 0x9f, 0xce, 0x34, 0x96, 0xe4, 0x59, 0xed, 0x52, 0x6c, 0x9b, 0x62, 0xed, 0xd8, 0x10, - 0x01, 0x1d, 0xef, 0x98, 0xc1, 0x92, 0x9c, 0x1a, 0x24, 0x60, 0xa8, 0x57, 0xc7, 0xda, 0xb6, 0x59, - 0x2c, 0xc9, 0x73, 0x3d, 0xc7, 0x14, 0xd9, 0xae, 0x81, 0xcc, 0x91, 0xc6, 0x50, 0x92, 0x51, 0x3f, - 0x73, 0xa0, 0xb9, 0x50, 0x6f, 0x17, 0xa9, 0x5a, 0x41, 0xe4, 0x08, 0x67, 0x86, 0x79, 0x58, 0xa6, - 0x80, 0x7f, 0xcc, 0x1c, 0x8f, 0xde, 0xc0, 0xfe, 0xff, 0x35, 0xd2, 0x70, 0x83, 0xc1, 0xa7, 0x37, - 0x7a, 0xd9, 0x22, 0xb8, 0x39, 0xdf, 0xca, 0x0d, 0xac, 0xde, 0xc0, 0xab, 0x9f, 0xe2, 0x56, 0x26, - 0x0d, 0x93, 0x25, 0xab, 0xda, 0x1c, 0x94, 0xde, 0x33, 0x14, 0xce, 0x06, 0xdd, 0xf2, 0x8f, 0x74, - 0x56, 0x17, 0x64, 0x33, 0x30, 0x11, 0xde, 0x4f, 0x69, 0x09, 0xbd, 0x8a, 0x4a, 0x30, 0x59, 0x25, - 0x8c, 0x04, 0xf9, 0x24, 0x7f, 0x72, 0x07, 0xe0, 0xd2, 0x34, 0xc1, 0x9b, 0xf9, 0x6b, 0x00, 0x67, - 0x3f, 0xb2, 0xab, 0x84, 0xd1, 0xa7, 0xaa, 0x46, 0x7f, 0xea, 0x51, 0x97, 0xa1, 0x07, 0x50, 0x22, - 0x65, 0x1f, 0xcd, 0x94, 0x5a, 0xf8, 0xfa, 0x69, 0x4a, 0xe3, 0x62, 0xd0, 0xbb, 0x70, 0xca, 0x13, - 0x0a, 0xc4, 0xf5, 0x68, 0x00, 0xb6, 0xbf, 0xd1, 0xb9, 0xa3, 0xd3, 0x46, 0xf5, 0x43, 0xe2, 0xee, - 0x6b, 0xd0, 0x27, 0xe7, 0xcf, 0x59, 0x0c, 0xa7, 0x22, 0xde, 0xca, 0x8b, 0x89, 0x67, 0x9b, 0xda, - 0xc3, 0xd4, 0x08, 0x1a, 0x87, 0xd2, 0xc3, 0xed, 0xcd, 0x14, 0x50, 0xff, 0xf1, 0x1a, 0xbc, 0xd8, - 0xab, 0xf8, 0x09, 0x75, 0x0e, 0xf4, 0x0a, 0x45, 0x9f, 0x25, 0xe1, 0xd8, 0xba, 0xc3, 0x4f, 0x01, - 0x9d, 0xc1, 0x8c, 0xf4, 0x19, 0x78, 0x33, 0xbf, 0x4e, 0xfc, 0xee, 0xbf, 0xfe, 0xc7, 0x9f, 0x26, - 0xbe, 0x4a, 0x64, 0xfe, 0x27, 0xa1, 0x1c, 0xac, 0x84, 0xb7, 0xd4, 0x83, 0xee, 0xa8, 0x95, 0xa3, - 0x48, 0xae, 0x69, 0x29, 0x47, 0xd1, 0xf4, 0xd1, 0x52, 0x8e, 0x22, 0x1e, 0xdc, 0x52, 0x5c, 0x6a, - 0x13, 0x87, 0x30, 0xcb, 0x51, 0x8e, 0xbc, 0xd8, 0xc2, 0x51, 0xc4, 0xdb, 0x5a, 0xca, 0x51, 0xec, - 0xa5, 0x0b, 0xc7, 0x91, 0xf5, 0xae, 0x4b, 0xb7, 0x94, 0xa3, 0x68, 0x20, 0xfc, 0x81, 0xcb, 0x1c, - 0xdb, 0xa1, 0x35, 0xfd, 0x50, 0xc9, 0xb6, 0x7c, 0x25, 0x11, 0x36, 0xb7, 0x57, 0x8e, 0xdb, 0xab, - 0xc8, 0xed, 0x61, 0x88, 0x83, 0x1c, 0xd6, 0x19, 0xb7, 0x94, 0xa3, 0x6e, 0x60, 0x6b, 0x29, 0x47, - 0x3d, 0xf7, 0x4d, 0x9c, 0x73, 0xe0, 0x45, 0x54, 0x8c, 0x2f, 0xd2, 0x0d, 0xb4, 0xd0, 0xdf, 0x03, - 0x08, 0x7d, 0x17, 0x10, 0xaf, 0xd0, 0x37, 0xe5, 0x06, 0x59, 0xe1, 0x05, 0xd7, 0x32, 0x57, 0x8e, - 0xf1, 0x81, 0x02, 0xc8, 0xa2, 0xdf, 0x07, 0x70, 0xec, 0x81, 0x65, 0xed, 0x7b, 0x36, 0x9a, 0xcd, - 0xbb, 0x5e, 0x59, 0xcd, 0x6f, 0x55, 0x83, 0x50, 0x70, 0x26, 0x0c, 0x79, 0x81, 0x41, 0x46, 0xdf, - 0x3d, 0xd6, 0x0f, 0x79, 0x81, 0xd5, 0x42, 0x7f, 0x0c, 0xe0, 0x98, 0x1f, 0x1a, 0xce, 0xb4, 0x6d, - 0x43, 0xae, 0xb8, 0x32, 0x2b, 0x02, 0xce, 0xf7, 0xd3, 0x27, 0x84, 0xc3, 0x77, 0xe6, 0xd7, 0x00, - 0x4e, 0x84, 0xc1, 0x0a, 0xdd, 0x3e, 0x39, 0xa6, 0x9e, 0x00, 0x37, 0x14, 0xd2, 0x17, 0x40, 0x60, - 0xfa, 0x73, 0x90, 0xce, 0x2a, 0x07, 0xea, 0xab, 0x41, 0x91, 0x32, 0xcd, 0xfb, 0xc0, 0x78, 0x94, - 0x7b, 0xb6, 0xa2, 0x9e, 0x9a, 0x65, 0x59, 0xfd, 0xbe, 0x72, 0xa0, 0x92, 0x93, 0xf2, 0x80, 0x2c, - 0xfa, 0x5b, 0x00, 0xc7, 0x36, 0x68, 0x83, 0x32, 0xda, 0xef, 0x19, 0xc3, 0x6c, 0x72, 0xda, 0xc5, - 0x62, 0xf9, 0x3a, 0x9c, 0x81, 0xb0, 0x68, 0xeb, 0xf7, 0x69, 0xb3, 0xe8, 0xb1, 0x3a, 0x1a, 0x81, - 0x17, 0xe1, 0xd8, 0x43, 0xfe, 0xa8, 0xa2, 0x69, 0x98, 0x74, 0x28, 0xa9, 0xc2, 0xd1, 0x17, 0x8e, - 0xce, 0xe8, 0xf3, 0xf3, 0x70, 0xe6, 0x30, 0xa7, 0x3b, 0x0e, 0x07, 0xe1, 0xea, 0xe5, 0x06, 0x45, - 0x09, 0xec, 0x6f, 0x8b, 0x9c, 0x3d, 0xa9, 0xe7, 0xfc, 0x37, 0x80, 0x13, 0x77, 0x29, 0x7b, 0xec, - 0x51, 0xa7, 0xf9, 0xff, 0xe2, 0x3b, 0x7f, 0x08, 0xda, 0xc5, 0x9d, 0xcc, 0x36, 0x5c, 0x1a, 0xd4, - 0x65, 0x74, 0x34, 0x9f, 0xb2, 0xbb, 0xf8, 0x18, 0x94, 0x47, 0x84, 0xa1, 0x79, 0x74, 0xe3, 0x38, - 0x43, 0x7f, 0xca, 0x15, 0x84, 0xe6, 0x7e, 0x31, 0x0a, 0x53, 0x77, 0x29, 0x0b, 0x6b, 0x09, 0x5f, - 0x79, 0xe9, 0x0c, 0x79, 0x33, 0x10, 0x94, 0x7e, 0x0d, 0x32, 0x32, 0x9f, 0x25, 0x85, 0x4d, 0xff, - 0x2b, 0xa1, 0xaf, 0xa4, 0x63, 0xac, 0xea, 0x94, 0x2c, 0x41, 0xe0, 0x1d, 0xd4, 0x03, 0xb5, 0x7a, - 0xd7, 0x7a, 0xb2, 0xd4, 0xd0, 0x26, 0xa6, 0x6f, 0xcd, 0x7b, 0xd5, 0x62, 0x3c, 0x7b, 0xbc, 0xa2, - 0xcd, 0x18, 0xbc, 0x3a, 0x94, 0x37, 0x96, 0xef, 0x86, 0xb7, 0x01, 0xfd, 0x7c, 0xdd, 0x32, 0x7f, - 0xa0, 0x21, 0x43, 0x15, 0xf6, 0xa7, 0xb3, 0x21, 0x25, 0xf5, 0x90, 0xe5, 0xa1, 0x76, 0xba, 0xaf, - 0xd2, 0x1a, 0x4b, 0xb7, 0xe8, 0xf3, 0x24, 0x4c, 0x6e, 0x56, 0xea, 0x16, 0x3a, 0xf6, 0x53, 0x90, - 0xeb, 0x95, 0xf3, 0x7e, 0xbb, 0x13, 0x86, 0x95, 0xd3, 0xb3, 0x64, 0x7e, 0x2e, 0xb5, 0x8b, 0xff, - 0x9c, 0x80, 0x13, 0xb4, 0x52, 0xb7, 0xb0, 0x63, 0x57, 0xd0, 0xdc, 0x13, 0xcf, 0x30, 0x88, 0xd3, - 0x2c, 0xe0, 0xcd, 0x60, 0x2a, 0x9d, 0xda, 0xe8, 0x5e, 0x1f, 0x89, 0xd9, 0xcc, 0x06, 0x44, 0xf1, - 0x97, 0x59, 0x20, 0x3e, 0xe5, 0x2b, 0x7c, 0xef, 0x36, 0x94, 0xd4, 0xe5, 0x65, 0xa4, 0x66, 0x96, - 0x61, 0x8a, 0xd8, 0xfe, 0x25, 0x87, 0x6e, 0x99, 0xca, 0x73, 0xd7, 0x32, 0xd1, 0xd2, 0x51, 0x26, - 0xac, 0xc2, 0x33, 0xac, 0x4e, 0xb1, 0x6e, 0xda, 0x5e, 0xf0, 0x45, 0x34, 0xd3, 0xba, 0xf7, 0x14, - 0x4a, 0x37, 0x97, 0x57, 0xd1, 0x43, 0xf8, 0xb6, 0x46, 0x99, 0xe7, 0x98, 0xb4, 0x8a, 0x5f, 0xd4, - 0xa9, 0x89, 0x39, 0xa5, 0x43, 0x5d, 0xcb, 0x73, 0x2a, 0x14, 0xeb, 0x2e, 0x66, 0xd4, 0xb0, 0x2d, - 0x87, 0x38, 0x7a, 0xa3, 0x89, 0x3d, 0x93, 0x1c, 0x10, 0xbd, 0x41, 0xca, 0x0d, 0x9a, 0xcf, 0x2e, - 0xc0, 0x89, 0xc3, 0x9c, 0xe9, 0x19, 0x65, 0xea, 0xa0, 0xc9, 0xb9, 0x11, 0xf1, 0xef, 0x93, 0xf7, - 0xef, 0xbd, 0x0b, 0xa5, 0xb5, 0xe5, 0x35, 0xb4, 0x06, 0xb3, 0xaf, 0x90, 0x5b, 0xb5, 0xa8, 0x8b, - 0x4d, 0x8b, 0x61, 0x7a, 0xa8, 0xbb, 0x2c, 0x8f, 0xc6, 0xa0, 0xb8, 0x16, 0x14, 0xaf, 0xee, 0xa7, - 0xc7, 0x87, 0x23, 0xbe, 0xd5, 0xca, 0x91, 0x7f, 0xdc, 0xcf, 0x2e, 0x65, 0x52, 0xd1, 0x54, 0xc4, - 0xd7, 0x0a, 0xfe, 0x4d, 0xd1, 0x33, 0x84, 0xfa, 0x96, 0xd0, 0x2f, 0x01, 0x3c, 0xb7, 0x41, 0xa9, - 0x2d, 0xbe, 0xba, 0xf1, 0x89, 0x6f, 0xaa, 0x46, 0x7a, 0x4f, 0x58, 0x7b, 0x3b, 0xb3, 0x76, 0x6c, - 0x96, 0x89, 0xfd, 0x1e, 0x20, 0xcf, 0xdb, 0x25, 0x91, 0x1e, 0x8b, 0x10, 0x6e, 0x5b, 0x25, 0xdd, - 0xac, 0xea, 0xe6, 0x9e, 0x8b, 0x2e, 0xf5, 0xe5, 0x8e, 0x8d, 0xe0, 0x57, 0x16, 0x43, 0xd3, 0xca, - 0x08, 0x7a, 0x0a, 0xc7, 0x77, 0x74, 0x83, 0x5a, 0x1e, 0x43, 0x43, 0x88, 0x86, 0x32, 0x5f, 0x16, - 0xf0, 0x17, 0xd0, 0x7c, 0x74, 0x87, 0x59, 0x20, 0xac, 0x0e, 0x53, 0x9b, 0x8e, 0x63, 0x39, 0xbc, - 0x97, 0xdb, 0xa0, 0x8c, 0xe8, 0x0d, 0xf7, 0xd4, 0x0a, 0xae, 0x09, 0x05, 0x6f, 0xa2, 0xa5, 0xd8, - 0x11, 0x72, 0xa9, 0x2f, 0x74, 0x56, 0xaf, 0x06, 0x52, 0xff, 0x04, 0x40, 0x74, 0x97, 0xb2, 0xde, - 0xde, 0xf1, 0x14, 0xd5, 0x52, 0x0f, 0xeb, 0x50, 0x3c, 0xdf, 0x13, 0x78, 0xde, 0xca, 0x5c, 0x8a, - 0xe2, 0xe1, 0x50, 0xca, 0x56, 0xb5, 0xa9, 0x1c, 0xf1, 0x9a, 0x45, 0xf4, 0x98, 0xe8, 0x8f, 0x00, - 0x9c, 0x7b, 0x64, 0xb9, 0x8c, 0x4b, 0x14, 0xac, 0x02, 0xd1, 0x29, 0xfb, 0xd5, 0xa1, 0x30, 0x14, - 0x01, 0xe3, 0x7a, 0xe6, 0x5a, 0x14, 0x86, 0x6d, 0xb9, 0x8c, 0x43, 0x11, 0xdf, 0x5a, 0x7d, 0x3c, - 0x1d, 0x37, 0xf9, 0x15, 0x80, 0xf3, 0xeb, 0x75, 0x5a, 0xd9, 0x0f, 0x0b, 0x85, 0x47, 0xc4, 0x21, - 0x86, 0xfb, 0x8d, 0xf9, 0xfd, 0x5d, 0x61, 0x40, 0x11, 0xbd, 0x77, 0x9c, 0xdf, 0xdb, 0x02, 0xa7, - 0xb2, 0x47, 0xd9, 0xc0, 0x57, 0x00, 0xfd, 0x17, 0x80, 0x6f, 0x08, 0xc3, 0xfc, 0xeb, 0x61, 0xde, - 0x31, 0x7f, 0x4b, 0x4c, 0x7c, 0x2c, 0x4c, 0xbc, 0x8f, 0xb6, 0x4e, 0x61, 0x62, 0xd0, 0xe9, 0x89, - 0x9f, 0x33, 0xf5, 0x98, 0x6b, 0xed, 0xb7, 0xd0, 0xbf, 0x01, 0x78, 0x5e, 0x18, 0xcb, 0x3d, 0xeb, - 0x5b, 0x64, 0x63, 0xa6, 0x70, 0x42, 0x1b, 0xb9, 0x8b, 0xc6, 0x7b, 0xee, 0x56, 0x21, 0xfe, 0x4b, - 0x27, 0xf4, 0x39, 0x80, 0x4b, 0x0f, 0x0f, 0xa8, 0x23, 0x2a, 0x73, 0x8d, 0xba, 0xb6, 0x65, 0xba, - 0x74, 0xdd, 0x12, 0x57, 0xf9, 0x3b, 0x4d, 0x9b, 0x0e, 0x0d, 0x21, 0x4b, 0x7d, 0xf3, 0x91, 0x4b, - 0xcc, 0xcc, 0x66, 0xbb, 0x88, 0x0a, 0xb1, 0xf4, 0xc8, 0xe8, 0x21, 0x13, 0xf0, 0xb3, 0x48, 0x8e, - 0xbe, 0x46, 0x56, 0xa8, 0xdc, 0x09, 0x94, 0x57, 0x7c, 0xe5, 0xac, 0x69, 0xd3, 0xf4, 0x3f, 0x81, - 0x76, 0xf1, 0x17, 0x00, 0xd5, 0x86, 0xdc, 0xbe, 0x44, 0xbf, 0x10, 0xe1, 0x5c, 0x0e, 0xbf, 0xa8, - 0xeb, 0x95, 0x3a, 0x76, 0xeb, 0x96, 0xd7, 0xa8, 0x8a, 0x54, 0x57, 0xa6, 0xd8, 0x73, 0x69, 0x15, - 0xeb, 0x26, 0xb6, 0x1b, 0xa4, 0x42, 0xb1, 0x55, 0x13, 0x49, 0xb1, 0x6a, 0x55, 0x3c, 0x83, 0x9a, - 0x7e, 0x07, 0x8f, 0x2b, 0x96, 0xc1, 0x07, 0x6f, 0xa5, 0x1f, 0xc3, 0x2b, 0x83, 0xaa, 0x7d, 0x9e, - 0xb2, 0xc2, 0xfb, 0x9e, 0xd3, 0x7e, 0x4e, 0x78, 0x0e, 0xcf, 0x57, 0x88, 0x41, 0x1b, 0xeb, 0xc4, - 0xa5, 0x81, 0x8c, 0x6d, 0x62, 0x50, 0xa4, 0xc1, 0x51, 0xff, 0x87, 0x17, 0xa7, 0x0d, 0xd1, 0x97, - 0xc4, 0x26, 0xce, 0xa3, 0xb9, 0x58, 0x88, 0xe6, 0x4b, 0xea, 0x4f, 0xe0, 0x52, 0xd1, 0xb4, 0x58, - 0x9d, 0x3a, 0x81, 0x26, 0x1e, 0x0d, 0x23, 0xe9, 0xea, 0x87, 0xb1, 0xe4, 0x75, 0x5a, 0xc5, 0x23, - 0xa5, 0x5f, 0x4c, 0xb6, 0x8b, 0x3f, 0x9f, 0x44, 0x5f, 0x01, 0x38, 0x5f, 0xc4, 0x25, 0xff, 0x03, - 0x50, 0xc4, 0x3b, 0x3f, 0x86, 0xe7, 0xf7, 0xb4, 0x47, 0xeb, 0xb9, 0xbb, 0xbe, 0xe9, 0xd8, 0x76, - 0xac, 0xe7, 0xb4, 0xc2, 0x4e, 0xbb, 0x65, 0xe9, 0x94, 0x69, 0x99, 0xf4, 0xfd, 0xc0, 0x34, 0x4e, - 0x9d, 0xfd, 0x09, 0x3c, 0x5f, 0x7a, 0xb2, 0x81, 0x57, 0x73, 0xeb, 0x0d, 0xe2, 0xb9, 0x14, 0x3f, - 0xd0, 0x2b, 0xd4, 0x74, 0x29, 0xba, 0x73, 0x3a, 0xc9, 0x4a, 0xb9, 0x61, 0x95, 0x15, 0x83, 0xb8, - 0x8c, 0x3a, 0xca, 0x83, 0xad, 0xf5, 0xcd, 0xed, 0x27, 0x9b, 0x79, 0x76, 0xc8, 0x54, 0x69, 0x25, - 0xbf, 0x5c, 0xc0, 0x70, 0xe1, 0x30, 0xe7, 0x5a, 0x06, 0x15, 0xd6, 0x74, 0x9f, 0xd0, 0x78, 0x7a, - 0xb4, 0x49, 0xaa, 0x55, 0x92, 0x95, 0x40, 0x22, 0xa9, 0xf6, 0xd5, 0x7c, 0xea, 0x85, 0xe8, 0xcc, - 0x61, 0xae, 0x66, 0x59, 0x39, 0x43, 0x37, 0x68, 0xa1, 0x8f, 0xb2, 0x30, 0x84, 0x52, 0x7b, 0xc4, - 0xeb, 0xb7, 0x55, 0xb4, 0x05, 0xef, 0xf6, 0xd7, 0x6f, 0x9e, 0x4b, 0x9d, 0x6e, 0xed, 0x56, 0x27, - 0x07, 0x14, 0xdb, 0xd4, 0x31, 0x74, 0xd7, 0xe5, 0xae, 0xcb, 0x2c, 0x4c, 0x2a, 0x15, 0xea, 0xba, - 0xb1, 0x5a, 0x2f, 0xaf, 0x9d, 0xa1, 0x22, 0x1c, 0xd7, 0x1e, 0x43, 0x69, 0x6d, 0xe5, 0x16, 0xba, - 0x07, 0xa7, 0xb7, 0xbe, 0x67, 0x60, 0x82, 0x19, 0x25, 0xb6, 0xc5, 0xf2, 0xe8, 0x36, 0x7c, 0x27, - 0xfd, 0xf5, 0xbe, 0x01, 0x3c, 0xfb, 0x0b, 0x09, 0xce, 0xc2, 0xc9, 0x12, 0x71, 0xf5, 0x8a, 0xb8, - 0x1d, 0x48, 0x4c, 0x00, 0xf8, 0x77, 0x20, 0x76, 0x61, 0xf0, 0x39, 0x98, 0x48, 0xa4, 0x27, 0x3f, - 0xce, 0x15, 0x1f, 0x6d, 0xe5, 0xee, 0xd3, 0x26, 0x4e, 0xdc, 0x93, 0xe1, 0xd2, 0x61, 0x8e, 0x18, - 0xe4, 0xa5, 0x65, 0xe6, 0x88, 0xad, 0x07, 0x3a, 0x73, 0xc4, 0x63, 0x75, 0x1e, 0x1d, 0xd0, 0x44, - 0x7a, 0xcc, 0xe2, 0x03, 0xf5, 0xde, 0x6f, 0xc2, 0x37, 0x87, 0x51, 0x5a, 0x8e, 0xfe, 0x92, 0x3a, - 0xe8, 0x87, 0xd9, 0xdf, 0x80, 0xb3, 0x30, 0x29, 0xf8, 0xc6, 0xd3, 0xa3, 0xcc, 0xda, 0xa7, 0x26, - 0xbc, 0x0e, 0x97, 0xba, 0x24, 0x1a, 0x75, 0xbd, 0x06, 0xdb, 0x61, 0x8d, 0x2d, 0xf3, 0x09, 0x0f, - 0x42, 0x55, 0xb7, 0x53, 0x62, 0x6f, 0xbf, 0x0f, 0x7f, 0x05, 0x3a, 0xb7, 0x19, 0xff, 0x02, 0x26, - 0x24, 0x39, 0xa9, 0x5e, 0x0d, 0x9d, 0x2f, 0xe2, 0xa9, 0x8a, 0xc0, 0xa3, 0x74, 0x84, 0x16, 0xae, - 0x0c, 0x27, 0x12, 0x10, 0x4a, 0xbf, 0x0d, 0xd3, 0xfe, 0xe5, 0x08, 0x42, 0x77, 0x1d, 0x62, 0x32, - 0x17, 0xf3, 0x41, 0x70, 0xa8, 0x70, 0x29, 0xb8, 0x32, 0x41, 0xf3, 0xc1, 0xa2, 0x18, 0x85, 0xab, - 0xeb, 0x70, 0x94, 0x54, 0x0d, 0xdd, 0x44, 0x85, 0x18, 0xab, 0x59, 0x8d, 0x91, 0x09, 0x1f, 0xe1, - 0x64, 0xba, 0xcb, 0x78, 0x71, 0x7a, 0xc0, 0xbb, 0x92, 0x9a, 0xe5, 0x18, 0xc2, 0x0d, 0xcb, 0x57, - 0xe0, 0x74, 0xf4, 0x60, 0x46, 0x7a, 0xaf, 0x71, 0xca, 0xd7, 0x87, 0x5e, 0xe4, 0xf4, 0x92, 0x3a, - 0x5b, 0xf0, 0xe2, 0x87, 0xdd, 0xb0, 0x19, 0x0d, 0x06, 0xa7, 0x0d, 0x02, 0x2f, 0x2f, 0x43, 0x74, - 0x98, 0x8b, 0xce, 0xf0, 0xb7, 0x05, 0x8d, 0xa6, 0xa5, 0x32, 0x71, 0x5e, 0xca, 0xf0, 0x62, 0xcf, - 0x62, 0x99, 0xbc, 0xcc, 0x35, 0x74, 0x97, 0xa1, 0x69, 0x75, 0x0a, 0x8e, 0xa6, 0x25, 0xcb, 0xa4, - 0x30, 0x81, 0xc1, 0xb3, 0xc9, 0x8e, 0x3b, 0x96, 0xc7, 0x44, 0x3c, 0x5b, 0xfd, 0xbf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xaf, 0x42, 0x84, 0x1a, 0xde, 0x2d, 0x00, 0x00, +func (x *ABitOfEverything_Nested) GetAmount() uint32 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { + if x != nil { + return x.Ok + } + return ABitOfEverything_Nested_FALSE +} + +var File_examples_internal_proto_examplepb_a_bit_of_everything_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = []byte{ + 0x0a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, + 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, + 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe3, 0x1c, 0x0a, + 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x12, 0x66, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, + 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, + 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, + 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, + 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, + 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, + 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, + 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, + 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x09, 0x6d, 0x61, 0x70, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x81, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0xb5, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, + 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, + 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, + 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, + 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, + 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0xc7, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, + 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xe6, 0x01, 0x0a, 0x06, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x76, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, + 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, + 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x17, 0x92, 0x41, 0x14, 0x32, + 0x12, 0x12, 0x10, 0x7b, 0x20, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, + 0x22, 0x20, 0x7d, 0x1a, 0x72, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x87, 0x01, + 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x57, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x99, 0x02, 0x92, 0x41, 0x95, 0x02, 0x0a, 0x84, + 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, + 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x34, 0x12, + 0x32, 0x7b, 0x20, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, + 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, + 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, + 0x22, 0x20, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x87, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, + 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, + 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, + 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x19, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x10, 0x52, 0x19, 0x70, + 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x11, 0x52, 0x17, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x03, 0x28, 0x12, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x68, 0x92, 0x41, 0x65, 0x32, 0x63, 0x12, 0x61, 0x7b, 0x20, 0x22, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, + 0x74, 0x72, 0x75, 0x65, 0x2c, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x72, 0x75, + 0x65, 0x5d, 0x2c, 0x20, 0x22, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, + 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x20, 0x7d, 0x22, 0x1a, 0x0a, 0x04, + 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x9c, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, + 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, + 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, + 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, + 0x32, 0xb9, 0x24, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x80, 0x04, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, + 0xb0, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, + 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x0f, 0x2e, + 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xfd, 0x01, 0x0a, + 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, + 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, + 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, + 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x0f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x41, 0x62, 0x29, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, + 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, + 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x02, 0x20, 0x01, 0x12, 0xec, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, + 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, + 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, + 0x01, 0x62, 0x00, 0x12, 0x9d, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x42, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, + 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, + 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, + 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, + 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, + 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, + 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, + 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, + 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, 0x03, + 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, + 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, + 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, + 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, + 0x03, 0x12, 0xc7, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, + 0x68, 0x6f, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, + 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x90, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, + 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x01, 0x2a, 0x12, 0xd6, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xea, 0x01, 0x0a, 0x1d, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, + 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, + 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, + 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, + 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xbb, 0x09, 0x5a, 0x09, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xac, 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, + 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, + 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, + 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, + 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, + 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, + 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, + 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, + 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, + 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, + 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, + 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x51, 0x0a, 0x03, 0x34, + 0x31, 0x38, 0x12, 0x4a, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, + 0x6f, 0x74, 0x2e, 0x12, 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, + 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, + 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, + 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, + 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, + 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, + 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, + 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, + 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, + 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, + 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, + 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, + 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, + 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, + 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, + 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData = file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ + (NumericEnum)(0), // 0: grpc.gateway.examples.internal.examplepb.NumericEnum + (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.DeepEnum + (*ABitOfEverything)(nil), // 2: grpc.gateway.examples.internal.examplepb.ABitOfEverything + (*ABitOfEverythingRepeated)(nil), // 3: grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated + (*Body)(nil), // 4: grpc.gateway.examples.internal.examplepb.Body + (*MessageWithBody)(nil), // 5: grpc.gateway.examples.internal.examplepb.MessageWithBody + (*UpdateV2Request)(nil), // 6: grpc.gateway.examples.internal.examplepb.UpdateV2Request + (*ABitOfEverything_Nested)(nil), // 7: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + nil, // 8: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry + nil, // 9: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 10: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + (pathenum.PathEnum)(0), // 11: grpc.gateway.examples.internal.pathenum.PathEnum + (pathenum.MessagePathEnum_NestedPathEnum)(0), // 12: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*empty.Empty)(nil), // 13: google.protobuf.Empty + (*timestamp.Timestamp)(nil), // 14: google.protobuf.Timestamp + (*field_mask.FieldMask)(nil), // 15: google.protobuf.FieldMask + (*sub2.IdMessage)(nil), // 16: sub2.IdMessage + (*sub.StringMessage)(nil), // 17: grpc.gateway.examples.internal.sub.StringMessage + (*duration.Duration)(nil), // 18: google.protobuf.Duration + (*wrappers.StringValue)(nil), // 19: google.protobuf.StringValue +} +var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ + 7, // 0: grpc.gateway.examples.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + 7, // 1: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + 0, // 2: grpc.gateway.examples.internal.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 11, // 3: grpc.gateway.examples.internal.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 12, // 4: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 13, // 5: grpc.gateway.examples.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 8, // 6: grpc.gateway.examples.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry + 9, // 7: grpc.gateway.examples.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry + 10, // 8: grpc.gateway.examples.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + 14, // 9: grpc.gateway.examples.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 0, // 10: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 0, // 11: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 0, // 12: grpc.gateway.examples.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 7, // 13: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + 7, // 14: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + 0, // 15: grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 4, // 16: grpc.gateway.examples.internal.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.examplepb.Body + 2, // 17: grpc.gateway.examples.internal.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 15, // 18: grpc.gateway.examples.internal.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 1, // 19: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 20: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum + 7, // 21: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested + 2, // 22: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 23: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 16, // 24: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Lookup:input_type -> sub2.IdMessage + 2, // 25: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 6, // 26: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.examplepb.UpdateV2Request + 16, // 27: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Delete:input_type -> sub2.IdMessage + 2, // 28: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 3, // 29: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated + 17, // 30: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.sub.StringMessage + 2, // 31: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 18, // 32: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 13, // 33: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 13, // 34: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 5, // 35: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.examplepb.MessageWithBody + 4, // 36: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.examplepb.Body + 2, // 37: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 38: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 39: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 13, // 40: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 13, // 41: grpc.gateway.examples.internal.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 13, // 42: grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 2, // 43: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 44: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 45: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 13, // 46: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 13, // 47: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 13, // 48: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 13, // 49: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 3, // 50: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated + 17, // 51: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.sub.StringMessage + 2, // 52: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 13, // 53: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 13, // 54: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 13, // 55: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 13, // 56: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 13, // 57: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 2, // 58: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 59: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 60: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 19, // 61: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 13, // 62: grpc.gateway.examples.internal.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 13, // 63: grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 43, // [43:64] is the sub-list for method output_type + 22, // [22:43] is the sub-list for method input_type + 22, // [22:22] is the sub-list for extension type_name + 22, // [22:22] is the sub-list for extension extendee + 0, // [0:22] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() } +func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() { + if File_examples_internal_proto_examplepb_a_bit_of_everything_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ABitOfEverything); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ABitOfEverythingRepeated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Body); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessageWithBody); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateV2Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ABitOfEverything_Nested); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*ABitOfEverything_OneofEmpty)(nil), + (*ABitOfEverything_OneofString)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc, + NumEnums: 2, + NumMessages: 9, + NumExtensions: 0, + NumServices: 3, + }, + GoTypes: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs, + EnumInfos: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes, + MessageInfos: file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_a_bit_of_everything_proto = out.File + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = nil + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = nil + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. // @@ -1096,10 +1884,10 @@ type ABitOfEverythingServiceClient interface { } type aBitOfEverythingServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServiceClient { +func NewABitOfEverythingServiceClient(cc grpc.ClientConnInterface) ABitOfEverythingServiceClient { return &aBitOfEverythingServiceClient{cc} } @@ -1311,61 +2099,61 @@ type ABitOfEverythingServiceServer interface { type UnimplementedABitOfEverythingServiceServer struct { } -func (*UnimplementedABitOfEverythingServiceServer) Create(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) Create(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) CreateBody(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) CreateBody(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBody not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) Lookup(ctx context.Context, req *sub2.IdMessage) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) Lookup(context.Context, *sub2.IdMessage) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) Update(ctx context.Context, req *ABitOfEverything) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) Update(context.Context, *ABitOfEverything) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) UpdateV2(ctx context.Context, req *UpdateV2Request) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) UpdateV2(context.Context, *UpdateV2Request) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateV2 not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) Delete(ctx context.Context, req *sub2.IdMessage) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) Delete(context.Context, *sub2.IdMessage) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) GetQuery(ctx context.Context, req *ABitOfEverything) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) GetQuery(context.Context, *ABitOfEverything) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method GetQuery not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(ctx context.Context, req *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) { +func (*UnimplementedABitOfEverythingServiceServer) GetRepeatedQuery(context.Context, *ABitOfEverythingRepeated) (*ABitOfEverythingRepeated, error) { return nil, status.Errorf(codes.Unimplemented, "method GetRepeatedQuery not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) Echo(ctx context.Context, req *sub.StringMessage) (*sub.StringMessage, error) { +func (*UnimplementedABitOfEverythingServiceServer) Echo(context.Context, *sub.StringMessage) (*sub.StringMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) DeepPathEcho(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) DeepPathEcho(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method DeepPathEcho not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) NoBindings(ctx context.Context, req *duration.Duration) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) NoBindings(context.Context, *duration.Duration) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) Timeout(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) Timeout(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Timeout not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) ErrorWithDetails(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ErrorWithDetails not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(ctx context.Context, req *MessageWithBody) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) GetMessageWithBody(context.Context, *MessageWithBody) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method GetMessageWithBody not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(ctx context.Context, req *Body) (*empty.Empty, error) { +func (*UnimplementedABitOfEverythingServiceServer) PostWithEmptyBody(context.Context, *Body) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method PostWithEmptyBody not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) CheckGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckGetQueryParams not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) CheckNestedEnumGetQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckNestedEnumGetQueryParams not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(ctx context.Context, req *ABitOfEverything) (*ABitOfEverything, error) { +func (*UnimplementedABitOfEverythingServiceServer) CheckPostQueryParams(context.Context, *ABitOfEverything) (*ABitOfEverything, error) { return nil, status.Errorf(codes.Unimplemented, "method CheckPostQueryParams not implemented") } -func (*UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(ctx context.Context, req *empty.Empty) (*wrappers.StringValue, error) { +func (*UnimplementedABitOfEverythingServiceServer) OverwriteResponseContentType(context.Context, *empty.Empty) (*wrappers.StringValue, error) { return nil, status.Errorf(codes.Unimplemented, "method OverwriteResponseContentType not implemented") } @@ -1808,10 +2596,10 @@ type CamelCaseServiceNameClient interface { } type camelCaseServiceNameClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClient { +func NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCaseServiceNameClient { return &camelCaseServiceNameClient{cc} } @@ -1833,7 +2621,7 @@ type CamelCaseServiceNameServer interface { type UnimplementedCamelCaseServiceNameServer struct { } -func (*UnimplementedCamelCaseServiceNameServer) Empty(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { +func (*UnimplementedCamelCaseServiceNameServer) Empty(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Empty not implemented") } @@ -1880,10 +2668,10 @@ type AnotherServiceWithNoBindingsClient interface { } type anotherServiceWithNoBindingsClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWithNoBindingsClient { +func NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) AnotherServiceWithNoBindingsClient { return &anotherServiceWithNoBindingsClient{cc} } @@ -1905,7 +2693,7 @@ type AnotherServiceWithNoBindingsServer interface { type UnimplementedAnotherServiceWithNoBindingsServer struct { } -func (*UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { +func (*UnimplementedAnotherServiceWithNoBindingsServer) NoBindings(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method NoBindings not implemented") } diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 3ca940dce39..cedbde37734 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,4 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service @@ -10,78 +13,72 @@ package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // Embedded represents a message embedded in SimpleMessage. type Embedded struct { - // Types that are valid to be assigned to Mark: + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Mark: // *Embedded_Progress // *Embedded_Note - Mark isEmbedded_Mark `protobuf_oneof:"mark"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Mark isEmbedded_Mark `protobuf_oneof:"mark"` } -func (m *Embedded) Reset() { *m = Embedded{} } -func (m *Embedded) String() string { return proto.CompactTextString(m) } -func (*Embedded) ProtoMessage() {} -func (*Embedded) Descriptor() ([]byte, []int) { - return fileDescriptor_2919b738e91bb561, []int{0} +func (x *Embedded) Reset() { + *x = Embedded{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Embedded) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Embedded.Unmarshal(m, b) -} -func (m *Embedded) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Embedded.Marshal(b, m, deterministic) -} -func (m *Embedded) XXX_Merge(src proto.Message) { - xxx_messageInfo_Embedded.Merge(m, src) -} -func (m *Embedded) XXX_Size() int { - return xxx_messageInfo_Embedded.Size(m) -} -func (m *Embedded) XXX_DiscardUnknown() { - xxx_messageInfo_Embedded.DiscardUnknown(m) +func (x *Embedded) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_Embedded proto.InternalMessageInfo - -type isEmbedded_Mark interface { - isEmbedded_Mark() -} +func (*Embedded) ProtoMessage() {} -type Embedded_Progress struct { - Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` +func (x *Embedded) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type Embedded_Note struct { - Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` +// Deprecated: Use Embedded.ProtoReflect.Descriptor instead. +func (*Embedded) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{0} } -func (*Embedded_Progress) isEmbedded_Mark() {} - -func (*Embedded_Note) isEmbedded_Mark() {} - func (m *Embedded) GetMark() isEmbedded_Mark { if m != nil { return m.Mark @@ -89,102 +86,102 @@ func (m *Embedded) GetMark() isEmbedded_Mark { return nil } -func (m *Embedded) GetProgress() int64 { - if x, ok := m.GetMark().(*Embedded_Progress); ok { +func (x *Embedded) GetProgress() int64 { + if x, ok := x.GetMark().(*Embedded_Progress); ok { return x.Progress } return 0 } -func (m *Embedded) GetNote() string { - if x, ok := m.GetMark().(*Embedded_Note); ok { +func (x *Embedded) GetNote() string { + if x, ok := x.GetMark().(*Embedded_Note); ok { return x.Note } return "" } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Embedded) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Embedded_Progress)(nil), - (*Embedded_Note)(nil), - } +type isEmbedded_Mark interface { + isEmbedded_Mark() +} + +type Embedded_Progress struct { + Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` +} + +type Embedded_Note struct { + Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` } +func (*Embedded_Progress) isEmbedded_Mark() {} + +func (*Embedded_Note) isEmbedded_Mark() {} + // SimpleMessage represents a simple message sent to the Echo service. type SimpleMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Id represents the message identifier. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` - // Types that are valid to be assigned to Code: + // Types that are assignable to Code: // *SimpleMessage_LineNum // *SimpleMessage_Lang Code isSimpleMessage_Code `protobuf_oneof:"code"` Status *Embedded `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` - // Types that are valid to be assigned to Ext: + // Types that are assignable to Ext: // *SimpleMessage_En // *SimpleMessage_No - Ext isSimpleMessage_Ext `protobuf_oneof:"ext"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Ext isSimpleMessage_Ext `protobuf_oneof:"ext"` } -func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } -func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } -func (*SimpleMessage) ProtoMessage() {} -func (*SimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_2919b738e91bb561, []int{1} +func (x *SimpleMessage) Reset() { + *x = SimpleMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SimpleMessage.Unmarshal(m, b) -} -func (m *SimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SimpleMessage.Marshal(b, m, deterministic) -} -func (m *SimpleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleMessage.Merge(m, src) -} -func (m *SimpleMessage) XXX_Size() int { - return xxx_messageInfo_SimpleMessage.Size(m) +func (x *SimpleMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SimpleMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SimpleMessage.DiscardUnknown(m) -} - -var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo -func (m *SimpleMessage) GetId() string { - if m != nil { - return m.Id - } - return "" -} +func (*SimpleMessage) ProtoMessage() {} -func (m *SimpleMessage) GetNum() int64 { - if m != nil { - return m.Num +func (x *SimpleMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -type isSimpleMessage_Code interface { - isSimpleMessage_Code() +// Deprecated: Use SimpleMessage.ProtoReflect.Descriptor instead. +func (*SimpleMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP(), []int{1} } -type SimpleMessage_LineNum struct { - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` +func (x *SimpleMessage) GetId() string { + if x != nil { + return x.Id + } + return "" } -type SimpleMessage_Lang struct { - Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` +func (x *SimpleMessage) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 } -func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} - -func (*SimpleMessage_Lang) isSimpleMessage_Code() {} - func (m *SimpleMessage) GetCode() isSimpleMessage_Code { if m != nil { return m.Code @@ -192,27 +189,64 @@ func (m *SimpleMessage) GetCode() isSimpleMessage_Code { return nil } -func (m *SimpleMessage) GetLineNum() int64 { - if x, ok := m.GetCode().(*SimpleMessage_LineNum); ok { +func (x *SimpleMessage) GetLineNum() int64 { + if x, ok := x.GetCode().(*SimpleMessage_LineNum); ok { return x.LineNum } return 0 } -func (m *SimpleMessage) GetLang() string { - if x, ok := m.GetCode().(*SimpleMessage_Lang); ok { +func (x *SimpleMessage) GetLang() string { + if x, ok := x.GetCode().(*SimpleMessage_Lang); ok { return x.Lang } return "" } -func (m *SimpleMessage) GetStatus() *Embedded { +func (x *SimpleMessage) GetStatus() *Embedded { + if x != nil { + return x.Status + } + return nil +} + +func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { if m != nil { - return m.Status + return m.Ext } return nil } +func (x *SimpleMessage) GetEn() int64 { + if x, ok := x.GetExt().(*SimpleMessage_En); ok { + return x.En + } + return 0 +} + +func (x *SimpleMessage) GetNo() *Embedded { + if x, ok := x.GetExt().(*SimpleMessage_No); ok { + return x.No + } + return nil +} + +type isSimpleMessage_Code interface { + isSimpleMessage_Code() +} + +type SimpleMessage_LineNum struct { + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3,oneof"` +} + +type SimpleMessage_Lang struct { + Lang string `protobuf:"bytes,4,opt,name=lang,proto3,oneof"` +} + +func (*SimpleMessage_LineNum) isSimpleMessage_Code() {} + +func (*SimpleMessage_Lang) isSimpleMessage_Code() {} + type isSimpleMessage_Ext interface { isSimpleMessage_Ext() } @@ -229,87 +263,184 @@ func (*SimpleMessage_En) isSimpleMessage_Ext() {} func (*SimpleMessage_No) isSimpleMessage_Ext() {} -func (m *SimpleMessage) GetExt() isSimpleMessage_Ext { - if m != nil { - return m.Ext - } - return nil -} +var File_examples_internal_proto_examplepb_echo_service_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ + 0x0a, 0x34, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, + 0x0a, 0x08, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, + 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x97, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, + 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, + 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x4a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, + 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x02, 0x6e, + 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02, 0x6e, + 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, + 0x32, 0x83, 0x05, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0xb0, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, + 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, + 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, + 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, + 0x74, 0x65, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, + 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_echo_service_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_echo_service_proto_rawDesc +) -func (m *SimpleMessage) GetEn() int64 { - if x, ok := m.GetExt().(*SimpleMessage_En); ok { - return x.En +func file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_echo_service_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_echo_service_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_echo_service_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_examples_internal_proto_examplepb_echo_service_proto_goTypes = []interface{}{ + (*Embedded)(nil), // 0: grpc.gateway.examples.internal.examplepb.Embedded + (*SimpleMessage)(nil), // 1: grpc.gateway.examples.internal.examplepb.SimpleMessage +} +var file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.examplepb.SimpleMessage.status:type_name -> grpc.gateway.examples.internal.examplepb.Embedded + 0, // 1: grpc.gateway.examples.internal.examplepb.SimpleMessage.no:type_name -> grpc.gateway.examples.internal.examplepb.Embedded + 1, // 2: grpc.gateway.examples.internal.examplepb.EchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 1, // 3: grpc.gateway.examples.internal.examplepb.EchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 1, // 4: grpc.gateway.examples.internal.examplepb.EchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 1, // 5: grpc.gateway.examples.internal.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 1, // 6: grpc.gateway.examples.internal.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 1, // 7: grpc.gateway.examples.internal.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 5, // [5:8] is the sub-list for method output_type + 2, // [2:5] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_echo_service_proto_init() } +func file_examples_internal_proto_examplepb_echo_service_proto_init() { + if File_examples_internal_proto_examplepb_echo_service_proto != nil { + return } - return 0 -} - -func (m *SimpleMessage) GetNo() *Embedded { - if x, ok := m.GetExt().(*SimpleMessage_No); ok { - return x.No + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Embedded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SimpleMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*SimpleMessage) XXX_OneofWrappers() []interface{} { - return []interface{}{ + file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Embedded_Progress)(nil), + (*Embedded_Note)(nil), + } + file_examples_internal_proto_examplepb_echo_service_proto_msgTypes[1].OneofWrappers = []interface{}{ (*SimpleMessage_LineNum)(nil), (*SimpleMessage_Lang)(nil), (*SimpleMessage_En)(nil), (*SimpleMessage_No)(nil), } -} - -func init() { - proto.RegisterType((*Embedded)(nil), "grpc.gateway.examples.internal.examplepb.Embedded") - proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.examples.internal.examplepb.SimpleMessage") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/echo_service.proto", fileDescriptor_2919b738e91bb561) -} - -var fileDescriptor_2919b738e91bb561 = []byte{ - // 480 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x53, 0xcf, 0x6a, 0x13, 0x41, - 0x18, 0xef, 0xec, 0xa6, 0x69, 0xf2, 0x05, 0xa5, 0x0c, 0x8a, 0x6b, 0x5a, 0x31, 0x2c, 0x1e, 0x42, - 0x0f, 0x3b, 0x24, 0x0a, 0x82, 0xc7, 0xd0, 0x4a, 0x11, 0xf4, 0xb0, 0xbd, 0xe5, 0x12, 0x26, 0x3b, - 0x1f, 0xdb, 0xc5, 0xdd, 0x99, 0x65, 0x67, 0x52, 0x1b, 0x96, 0x5c, 0xf4, 0x11, 0x3c, 0x78, 0xd3, - 0x37, 0x10, 0x2f, 0x3e, 0x89, 0xaf, 0xe0, 0x83, 0xc8, 0x4c, 0xb2, 0x01, 0x6d, 0x91, 0xd2, 0x4b, - 0x6f, 0xfb, 0xfd, 0xfb, 0xfd, 0x7e, 0xfb, 0xfb, 0xbe, 0x81, 0x17, 0x78, 0xc9, 0x8b, 0x32, 0x47, - 0xcd, 0x32, 0x69, 0xb0, 0x92, 0x3c, 0x67, 0x65, 0xa5, 0x8c, 0x62, 0x9b, 0x7c, 0x39, 0x67, 0x98, - 0x9c, 0xab, 0x99, 0xc6, 0xea, 0x22, 0x4b, 0x30, 0x72, 0x45, 0x3a, 0x4c, 0xab, 0x32, 0x89, 0x52, - 0x6e, 0xf0, 0x03, 0x5f, 0x46, 0x0d, 0x44, 0xd4, 0x40, 0x44, 0xdb, 0xe1, 0xfe, 0x61, 0xaa, 0x54, - 0x9a, 0x23, 0xe3, 0x65, 0xc6, 0xb8, 0x94, 0xca, 0x70, 0x93, 0x29, 0xa9, 0xd7, 0x38, 0xe1, 0x6b, - 0xe8, 0x9c, 0x14, 0x73, 0x14, 0x02, 0x05, 0x3d, 0x84, 0x4e, 0x59, 0xa9, 0xb4, 0x42, 0xad, 0x03, - 0x32, 0x20, 0x43, 0xff, 0x74, 0x27, 0xde, 0x66, 0xe8, 0x03, 0x68, 0x49, 0x65, 0x30, 0xf0, 0x06, - 0x64, 0xd8, 0x3d, 0xdd, 0x89, 0x5d, 0x34, 0x69, 0x43, 0xab, 0xe0, 0xd5, 0xfb, 0xf0, 0x8b, 0x07, - 0xf7, 0xce, 0x32, 0x4b, 0xf9, 0x16, 0xb5, 0xe6, 0x29, 0xd2, 0xfb, 0xe0, 0x65, 0xc2, 0xe1, 0x74, - 0x63, 0x2f, 0x13, 0x74, 0x1f, 0x7c, 0xb9, 0x28, 0xdc, 0xb8, 0x1f, 0xdb, 0x4f, 0x7a, 0x00, 0x9d, - 0x3c, 0x93, 0x38, 0xb3, 0x69, 0x7f, 0xc3, 0xb7, 0x67, 0x33, 0xef, 0x16, 0x85, 0xa5, 0xcb, 0xb9, - 0x4c, 0x83, 0x56, 0x43, 0x67, 0x23, 0xfa, 0x06, 0xda, 0xda, 0x70, 0xb3, 0xd0, 0xc1, 0xee, 0x80, - 0x0c, 0x7b, 0xe3, 0x71, 0x74, 0x53, 0x1f, 0xa2, 0xe6, 0x37, 0xe3, 0x0d, 0x02, 0xdd, 0x07, 0x0f, - 0x65, 0xd0, 0x76, 0xc4, 0x24, 0xf6, 0x50, 0xd2, 0x63, 0xf0, 0xa4, 0x0a, 0xf6, 0x6e, 0x8b, 0x6c, - 0x51, 0xa4, 0xb2, 0x96, 0x24, 0x4a, 0xe0, 0x64, 0x17, 0x7c, 0xbc, 0x34, 0xe3, 0x4f, 0xbb, 0xd0, - 0x3b, 0x49, 0xce, 0xd5, 0xd9, 0x7a, 0x7f, 0xf4, 0x87, 0x07, 0x2d, 0x1b, 0xd3, 0x97, 0x37, 0x67, - 0xf8, 0xcb, 0xd9, 0xfe, 0x6d, 0x07, 0xc3, 0x9f, 0xe4, 0xe3, 0xaf, 0xdf, 0x9f, 0xbd, 0xef, 0x24, - 0x7c, 0xc8, 0x2e, 0x46, 0xcd, 0x81, 0xb9, 0xf3, 0x62, 0x75, 0x26, 0x56, 0xd3, 0x27, 0xf4, 0xe0, - 0xda, 0x02, 0xab, 0xe5, 0xa2, 0x58, 0x4d, 0x9f, 0xd1, 0xf0, 0x3f, 0x65, 0x56, 0xdb, 0x15, 0xad, - 0xa6, 0x23, 0xca, 0xfe, 0xed, 0x1a, 0x6d, 0xda, 0x9a, 0x75, 0xaf, 0x58, 0xbd, 0x5e, 0x42, 0x64, - 0x8f, 0xe8, 0x5a, 0xde, 0x31, 0xab, 0xa5, 0x5a, 0x97, 0xe9, 0x57, 0x02, 0x1d, 0x6b, 0xd9, 0x44, - 0x89, 0xe5, 0x1d, 0xd8, 0x36, 0x70, 0xae, 0xf5, 0xaf, 0x9a, 0x36, 0x9b, 0x2b, 0xb1, 0x7c, 0x45, - 0x8e, 0xe8, 0x37, 0x02, 0x60, 0x05, 0x1e, 0x63, 0x8e, 0x06, 0xef, 0x40, 0xe2, 0x53, 0x27, 0xf1, - 0xf1, 0xd1, 0xa3, 0x2b, 0x12, 0x85, 0x93, 0x34, 0xe9, 0x4d, 0xbb, 0xdb, 0xd9, 0x79, 0xdb, 0xbd, - 0xfd, 0xe7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x28, 0x11, 0xad, 0x90, 0x7b, 0x04, 0x00, 0x00, + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_echo_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_echo_service_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_echo_service_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_echo_service_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_echo_service_proto = out.File + file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = nil + file_examples_internal_proto_examplepb_echo_service_proto_goTypes = nil + file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // EchoServiceClient is the client API for EchoService service. // @@ -327,10 +458,10 @@ type EchoServiceClient interface { } type echoServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { +func NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient { return &echoServiceClient{cc} } @@ -378,13 +509,13 @@ type EchoServiceServer interface { type UnimplementedEchoServiceServer struct { } -func (*UnimplementedEchoServiceServer) Echo(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { +func (*UnimplementedEchoServiceServer) Echo(context.Context, *SimpleMessage) (*SimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") } -func (*UnimplementedEchoServiceServer) EchoBody(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { +func (*UnimplementedEchoServiceServer) EchoBody(context.Context, *SimpleMessage) (*SimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoBody not implemented") } -func (*UnimplementedEchoServiceServer) EchoDelete(ctx context.Context, req *SimpleMessage) (*SimpleMessage, error) { +func (*UnimplementedEchoServiceServer) EchoDelete(context.Context, *SimpleMessage) (*SimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoDelete not implemented") } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index baaf20c2376..b251ef6e5a2 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,315 +1,607 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type EmptyProto struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (m *EmptyProto) Reset() { *m = EmptyProto{} } -func (m *EmptyProto) String() string { return proto.CompactTextString(m) } -func (*EmptyProto) ProtoMessage() {} -func (*EmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_005d0d82a8c98d3c, []int{0} +func (x *EmptyProto) Reset() { + *x = EmptyProto{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *EmptyProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EmptyProto.Unmarshal(m, b) -} -func (m *EmptyProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EmptyProto.Marshal(b, m, deterministic) -} -func (m *EmptyProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_EmptyProto.Merge(m, src) -} -func (m *EmptyProto) XXX_Size() int { - return xxx_messageInfo_EmptyProto.Size(m) -} -func (m *EmptyProto) XXX_DiscardUnknown() { - xxx_messageInfo_EmptyProto.DiscardUnknown(m) +func (x *EmptyProto) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_EmptyProto proto.InternalMessageInfo +func (*EmptyProto) ProtoMessage() {} -type NonEmptyProto struct { - A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *EmptyProto) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NonEmptyProto) Reset() { *m = NonEmptyProto{} } -func (m *NonEmptyProto) String() string { return proto.CompactTextString(m) } -func (*NonEmptyProto) ProtoMessage() {} -func (*NonEmptyProto) Descriptor() ([]byte, []int) { - return fileDescriptor_005d0d82a8c98d3c, []int{1} +// Deprecated: Use EmptyProto.ProtoReflect.Descriptor instead. +func (*EmptyProto) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{0} } -func (m *NonEmptyProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonEmptyProto.Unmarshal(m, b) -} -func (m *NonEmptyProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonEmptyProto.Marshal(b, m, deterministic) +type NonEmptyProto struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` } -func (m *NonEmptyProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonEmptyProto.Merge(m, src) + +func (x *NonEmptyProto) Reset() { + *x = NonEmptyProto{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonEmptyProto) XXX_Size() int { - return xxx_messageInfo_NonEmptyProto.Size(m) + +func (x *NonEmptyProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonEmptyProto) XXX_DiscardUnknown() { - xxx_messageInfo_NonEmptyProto.DiscardUnknown(m) + +func (*NonEmptyProto) ProtoMessage() {} + +func (x *NonEmptyProto) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NonEmptyProto proto.InternalMessageInfo +// Deprecated: Use NonEmptyProto.ProtoReflect.Descriptor instead. +func (*NonEmptyProto) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{1} +} -func (m *NonEmptyProto) GetA() string { - if m != nil { - return m.A +func (x *NonEmptyProto) GetA() string { + if x != nil { + return x.A } return "" } -func (m *NonEmptyProto) GetB() string { - if m != nil { - return m.B +func (x *NonEmptyProto) GetB() string { + if x != nil { + return x.B } return "" } -func (m *NonEmptyProto) GetC() string { - if m != nil { - return m.C +func (x *NonEmptyProto) GetC() string { + if x != nil { + return x.C } return "" } type UnaryProto struct { - Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *UnaryProto) Reset() { *m = UnaryProto{} } -func (m *UnaryProto) String() string { return proto.CompactTextString(m) } -func (*UnaryProto) ProtoMessage() {} -func (*UnaryProto) Descriptor() ([]byte, []int) { - return fileDescriptor_005d0d82a8c98d3c, []int{2} + Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` } -func (m *UnaryProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UnaryProto.Unmarshal(m, b) -} -func (m *UnaryProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UnaryProto.Marshal(b, m, deterministic) -} -func (m *UnaryProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnaryProto.Merge(m, src) +func (x *UnaryProto) Reset() { + *x = UnaryProto{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UnaryProto) XXX_Size() int { - return xxx_messageInfo_UnaryProto.Size(m) + +func (x *UnaryProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UnaryProto) XXX_DiscardUnknown() { - xxx_messageInfo_UnaryProto.DiscardUnknown(m) + +func (*UnaryProto) ProtoMessage() {} + +func (x *UnaryProto) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UnaryProto proto.InternalMessageInfo +// Deprecated: Use UnaryProto.ProtoReflect.Descriptor instead. +func (*UnaryProto) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{2} +} -func (m *UnaryProto) GetStr() string { - if m != nil { - return m.Str +func (x *UnaryProto) GetStr() string { + if x != nil { + return x.Str } return "" } type NestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` - B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` - C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NestedProto) Reset() { *m = NestedProto{} } -func (m *NestedProto) String() string { return proto.CompactTextString(m) } -func (*NestedProto) ProtoMessage() {} -func (*NestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_005d0d82a8c98d3c, []int{3} + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` + B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` + C string `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` } -func (m *NestedProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NestedProto.Unmarshal(m, b) -} -func (m *NestedProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NestedProto.Marshal(b, m, deterministic) -} -func (m *NestedProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_NestedProto.Merge(m, src) +func (x *NestedProto) Reset() { + *x = NestedProto{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NestedProto) XXX_Size() int { - return xxx_messageInfo_NestedProto.Size(m) + +func (x *NestedProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NestedProto) XXX_DiscardUnknown() { - xxx_messageInfo_NestedProto.DiscardUnknown(m) + +func (*NestedProto) ProtoMessage() {} + +func (x *NestedProto) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NestedProto proto.InternalMessageInfo +// Deprecated: Use NestedProto.ProtoReflect.Descriptor instead. +func (*NestedProto) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{3} +} -func (m *NestedProto) GetA() *UnaryProto { - if m != nil { - return m.A +func (x *NestedProto) GetA() *UnaryProto { + if x != nil { + return x.A } return nil } -func (m *NestedProto) GetB() string { - if m != nil { - return m.B +func (x *NestedProto) GetB() string { + if x != nil { + return x.B } return "" } -func (m *NestedProto) GetC() string { - if m != nil { - return m.C +func (x *NestedProto) GetC() string { + if x != nil { + return x.C } return "" } type SingleNestedProto struct { - A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *SingleNestedProto) Reset() { *m = SingleNestedProto{} } -func (m *SingleNestedProto) String() string { return proto.CompactTextString(m) } -func (*SingleNestedProto) ProtoMessage() {} -func (*SingleNestedProto) Descriptor() ([]byte, []int) { - return fileDescriptor_005d0d82a8c98d3c, []int{4} + A *UnaryProto `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` } -func (m *SingleNestedProto) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SingleNestedProto.Unmarshal(m, b) -} -func (m *SingleNestedProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SingleNestedProto.Marshal(b, m, deterministic) -} -func (m *SingleNestedProto) XXX_Merge(src proto.Message) { - xxx_messageInfo_SingleNestedProto.Merge(m, src) +func (x *SingleNestedProto) Reset() { + *x = SingleNestedProto{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SingleNestedProto) XXX_Size() int { - return xxx_messageInfo_SingleNestedProto.Size(m) + +func (x *SingleNestedProto) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SingleNestedProto) XXX_DiscardUnknown() { - xxx_messageInfo_SingleNestedProto.DiscardUnknown(m) + +func (*SingleNestedProto) ProtoMessage() {} + +func (x *SingleNestedProto) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SingleNestedProto proto.InternalMessageInfo +// Deprecated: Use SingleNestedProto.ProtoReflect.Descriptor instead. +func (*SingleNestedProto) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP(), []int{4} +} -func (m *SingleNestedProto) GetA() *UnaryProto { - if m != nil { - return m.A +func (x *SingleNestedProto) GetA() *UnaryProto { + if x != nil { + return x.A } return nil } -func init() { - proto.RegisterType((*EmptyProto)(nil), "grpc.gateway.examples.internal.examplepb.EmptyProto") - proto.RegisterType((*NonEmptyProto)(nil), "grpc.gateway.examples.internal.examplepb.NonEmptyProto") - proto.RegisterType((*UnaryProto)(nil), "grpc.gateway.examples.internal.examplepb.UnaryProto") - proto.RegisterType((*NestedProto)(nil), "grpc.gateway.examples.internal.examplepb.NestedProto") - proto.RegisterType((*SingleNestedProto)(nil), "grpc.gateway.examples.internal.examplepb.SingleNestedProto") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/flow_combination.proto", fileDescriptor_005d0d82a8c98d3c) -} - -var fileDescriptor_005d0d82a8c98d3c = []byte{ - // 673 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x96, 0x4f, 0x8b, 0x13, 0x3f, - 0x18, 0xc7, 0x49, 0x17, 0x7e, 0xb0, 0xe9, 0xee, 0xfe, 0xda, 0xa9, 0xd4, 0xb6, 0x5b, 0xf7, 0x4f, - 0x5c, 0xb0, 0x08, 0x4e, 0xca, 0xaa, 0xa8, 0xf5, 0x56, 0xd1, 0xe3, 0xb2, 0x74, 0x11, 0x61, 0x2e, - 0x92, 0x49, 0xc7, 0xb6, 0x30, 0x9d, 0x64, 0x67, 0x22, 0x75, 0x29, 0x3d, 0xe8, 0x3b, 0x10, 0x4f, - 0x1e, 0x7d, 0x09, 0x1e, 0xf5, 0x22, 0xbe, 0x02, 0x0f, 0x82, 0xe0, 0xdd, 0xbb, 0xaf, 0x40, 0x90, - 0xc9, 0x64, 0x26, 0x1d, 0x6d, 0x6d, 0xb7, 0x4a, 0x7b, 0x6b, 0x92, 0xe7, 0x79, 0xe6, 0x93, 0xef, - 0xf3, 0x7d, 0x42, 0xe1, 0x6d, 0xe7, 0x19, 0xe9, 0x73, 0xd7, 0x09, 0x70, 0xcf, 0x13, 0x8e, 0xef, - 0x11, 0x17, 0x73, 0x9f, 0x09, 0x86, 0xd5, 0x3e, 0xb7, 0xf1, 0x13, 0x97, 0x0d, 0x1e, 0x53, 0xd6, - 0xb7, 0x7b, 0x1e, 0x11, 0x3d, 0xe6, 0x99, 0x32, 0xc0, 0xa8, 0x75, 0x7c, 0x4e, 0xcd, 0x0e, 0x11, - 0xce, 0x80, 0x9c, 0x99, 0x71, 0x19, 0x33, 0x2e, 0x63, 0x26, 0x05, 0x2a, 0xd5, 0x0e, 0x63, 0x1d, - 0xd7, 0xc1, 0x84, 0xf7, 0x30, 0xf1, 0x3c, 0x26, 0x64, 0x99, 0x20, 0xaa, 0x83, 0x36, 0x20, 0xbc, - 0xdf, 0xe7, 0xe2, 0xec, 0x58, 0xae, 0xee, 0xc0, 0xcd, 0x23, 0xe6, 0xe9, 0x0d, 0x63, 0x03, 0x02, - 0x52, 0x02, 0x7b, 0xa0, 0xb6, 0xde, 0x02, 0x24, 0x5c, 0xd9, 0xa5, 0x4c, 0xb4, 0xb2, 0xc3, 0x15, - 0x2d, 0xad, 0x45, 0x2b, 0x8a, 0x76, 0x20, 0x7c, 0xe8, 0x11, 0x5f, 0xe5, 0xe5, 0xe0, 0x5a, 0x20, - 0x7c, 0x95, 0x19, 0xfe, 0x44, 0x7d, 0x98, 0x3d, 0x72, 0x02, 0xe1, 0xb4, 0xa3, 0x80, 0x66, 0x5c, - 0x38, 0x7b, 0x78, 0xc3, 0x9c, 0xf7, 0x2e, 0xa6, 0xfe, 0xc2, 0x2c, 0x9c, 0x47, 0x30, 0x7f, 0xd2, - 0xf3, 0x3a, 0xae, 0xf3, 0x8f, 0x3f, 0x7a, 0xf8, 0x3c, 0x0f, 0xff, 0x7f, 0xe0, 0xb2, 0xc1, 0x3d, - 0xdd, 0x12, 0xe3, 0x25, 0x80, 0xd9, 0x16, 0xa7, 0x52, 0xb7, 0x16, 0xa7, 0xc6, 0x39, 0x8a, 0x6b, - 0xad, 0x2b, 0x0b, 0x65, 0xa1, 0xe2, 0x8b, 0xcf, 0xdf, 0x5e, 0x65, 0x72, 0x68, 0x0b, 0xfb, 0x9c, - 0x62, 0x27, 0x3c, 0x08, 0x7f, 0x19, 0xaf, 0x01, 0xdc, 0x8a, 0x99, 0x4e, 0x84, 0xef, 0x90, 0xfe, - 0x52, 0xb1, 0xca, 0x12, 0xab, 0x80, 0xf2, 0x63, 0x58, 0x81, 0xc4, 0xa8, 0x03, 0xc9, 0x16, 0x31, - 0xad, 0x44, 0x32, 0xcd, 0x16, 0x11, 0x69, 0xd5, 0x6a, 0xc0, 0x78, 0x03, 0x60, 0x7e, 0x8c, 0x6d, - 0x05, 0xd2, 0x55, 0x25, 0x5e, 0x11, 0x5d, 0x48, 0xe3, 0x45, 0x8b, 0x1a, 0xa8, 0x03, 0xe3, 0x43, - 0x06, 0xc2, 0x16, 0xa7, 0x4d, 0xd6, 0x96, 0xda, 0xdd, 0x9a, 0xff, 0x33, 0xa9, 0xe9, 0x5e, 0x90, - 0xef, 0x23, 0x90, 0x80, 0xef, 0x01, 0xda, 0x94, 0xcd, 0xb5, 0x59, 0x5b, 0x8a, 0xd7, 0x00, 0x57, - 0xad, 0x6d, 0x54, 0x96, 0x7b, 0x9c, 0x88, 0x2e, 0x1e, 0x92, 0x11, 0x1e, 0xda, 0x23, 0x3c, 0xa4, - 0xa3, 0x70, 0xd3, 0x8a, 0x4d, 0x7a, 0xfa, 0xd4, 0xf1, 0x65, 0x86, 0xb5, 0x8b, 0x2a, 0xba, 0x44, - 0x2a, 0x47, 0xd6, 0xa3, 0x56, 0x09, 0x15, 0x74, 0x40, 0x92, 0x17, 0x9e, 0xec, 0xa3, 0xea, 0x84, - 0xd4, 0x54, 0x48, 0x19, 0x5d, 0x4c, 0xc3, 0x24, 0xa7, 0xc6, 0x5b, 0x00, 0x8b, 0x2d, 0x4e, 0x8f, - 0x89, 0xe8, 0x8e, 0x3f, 0x13, 0xa1, 0x9a, 0x77, 0xe7, 0x17, 0xe5, 0xb7, 0x17, 0x66, 0x41, 0x45, - 0x0f, 0xa4, 0xa0, 0x3b, 0xea, 0x46, 0x21, 0xee, 0x35, 0x4f, 0x16, 0xc5, 0x43, 0x62, 0x06, 0xc2, - 0x97, 0x72, 0x18, 0xdf, 0x01, 0xcc, 0x29, 0x66, 0x4d, 0x7b, 0xf3, 0x1c, 0xbd, 0xff, 0x6b, 0x4e, - 0x4f, 0x72, 0x76, 0xd1, 0xde, 0x54, 0xce, 0xb1, 0xd6, 0xcd, 0xb8, 0x4e, 0xd2, 0xc0, 0x29, 0xe7, - 0x0d, 0x40, 0x8d, 0xaf, 0x19, 0xb8, 0xa9, 0x7c, 0xae, 0xe6, 0x70, 0xc9, 0x56, 0xff, 0x12, 0x59, - 0xfd, 0x13, 0x40, 0x39, 0x6d, 0xb6, 0x68, 0x10, 0x43, 0xb7, 0x8f, 0x5f, 0x31, 0xe5, 0xf6, 0x28, - 0xc4, 0x8a, 0x9f, 0xbf, 0xc8, 0x77, 0x6a, 0x13, 0xa1, 0x4b, 0x53, 0x3c, 0x1f, 0x17, 0xa6, 0xd6, - 0x36, 0x2a, 0xfe, 0x6a, 0x7b, 0x7d, 0x78, 0x80, 0x76, 0xa7, 0x3a, 0x5f, 0x47, 0x55, 0xd5, 0x68, - 0x4d, 0x0c, 0xa8, 0x03, 0xe3, 0x1d, 0x80, 0xe5, 0x09, 0x13, 0xa0, 0x74, 0x5e, 0xc1, 0x10, 0x5c, - 0x91, 0x52, 0xef, 0xab, 0xcb, 0x4d, 0x72, 0x45, 0xc2, 0xfe, 0x03, 0xc0, 0x42, 0x6a, 0x12, 0x14, - 0xf5, 0x52, 0x87, 0x61, 0x20, 0x79, 0x4f, 0xd1, 0xe5, 0x3f, 0x0e, 0x83, 0x6e, 0xc8, 0xec, 0x9b, - 0x25, 0x9d, 0x9d, 0x1e, 0xd2, 0x00, 0xb4, 0x0e, 0x9a, 0x59, 0x6b, 0x3d, 0x41, 0xb2, 0xff, 0x93, - 0x7f, 0xe4, 0xae, 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x96, 0x5c, 0xd1, 0x4c, 0x0a, 0x00, - 0x00, +var File_examples_internal_proto_examplepb_flow_combination_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []byte{ + 0x0a, 0x38, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x39, 0x0a, 0x0d, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x61, 0x12, + 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, + 0x01, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x1e, 0x0a, 0x0a, 0x55, + 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0x6d, 0x0a, 0x0b, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x42, 0x0a, 0x01, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x01, 0x61, 0x12, 0x0c, + 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x57, 0x0a, 0x11, 0x53, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x42, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x52, 0x01, 0x61, 0x32, 0x81, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6d, 0x62, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0e, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0x99, 0x01, 0x0a, 0x0e, + 0x52, 0x70, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, + 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, + 0x63, 0x28, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x14, 0x2f, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x28, 0x01, 0x30, 0x01, 0x12, 0xbf, 0x02, 0x0a, 0x0a, 0x52, 0x70, 0x63, 0x42, + 0x6f, 0x64, 0x79, 0x52, 0x70, 0x63, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x22, + 0x0d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, + 0x2a, 0x5a, 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, + 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, + 0x22, 0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, + 0x5a, 0x1f, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, + 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, + 0x63, 0x5a, 0x18, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, + 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, + 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x19, + 0x22, 0x17, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xb1, 0x01, 0x0a, 0x16, 0x52, 0x70, + 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x52, 0x70, 0x63, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, + 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xef, 0x01, + 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x70, 0x63, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, + 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, + 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x1e, 0x22, 0x1c, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x21, 0x22, 0x1c, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, + 0xd9, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x5a, + 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, + 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, + 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, + 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, 0x2f, 0x72, 0x70, 0x63, + 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, + 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1c, 0x22, 0x1a, 0x2f, + 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xb9, 0x01, 0x0a, 0x19, + 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xfd, 0x01, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, + 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x71, 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, + 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1f, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, + 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_flow_combination_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData = file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_flow_combination_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_flow_combination_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_examples_internal_proto_examplepb_flow_combination_proto_goTypes = []interface{}{ + (*EmptyProto)(nil), // 0: grpc.gateway.examples.internal.examplepb.EmptyProto + (*NonEmptyProto)(nil), // 1: grpc.gateway.examples.internal.examplepb.NonEmptyProto + (*UnaryProto)(nil), // 2: grpc.gateway.examples.internal.examplepb.UnaryProto + (*NestedProto)(nil), // 3: grpc.gateway.examples.internal.examplepb.NestedProto + (*SingleNestedProto)(nil), // 4: grpc.gateway.examples.internal.examplepb.SingleNestedProto +} +var file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs = []int32{ + 2, // 0: grpc.gateway.examples.internal.examplepb.NestedProto.a:type_name -> grpc.gateway.examples.internal.examplepb.UnaryProto + 2, // 1: grpc.gateway.examples.internal.examplepb.SingleNestedProto.a:type_name -> grpc.gateway.examples.internal.examplepb.UnaryProto + 0, // 2: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyRpc:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 3: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyStream:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 4: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyRpc:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 5: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyStream:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 1, // 6: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyRpc:input_type -> grpc.gateway.examples.internal.examplepb.NonEmptyProto + 4, // 7: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedRpc:input_type -> grpc.gateway.examples.internal.examplepb.SingleNestedProto + 3, // 8: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedRpc:input_type -> grpc.gateway.examples.internal.examplepb.NestedProto + 1, // 9: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyStream:input_type -> grpc.gateway.examples.internal.examplepb.NonEmptyProto + 4, // 10: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedStream:input_type -> grpc.gateway.examples.internal.examplepb.SingleNestedProto + 3, // 11: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedStream:input_type -> grpc.gateway.examples.internal.examplepb.NestedProto + 0, // 12: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 13: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 14: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 15: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 16: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 17: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 18: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 19: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 20: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 0, // 21: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 12, // [12:22] is the sub-list for method output_type + 2, // [2:12] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_flow_combination_proto_init() } +func file_examples_internal_proto_examplepb_flow_combination_proto_init() { + if File_examples_internal_proto_examplepb_flow_combination_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmptyProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonEmptyProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnaryProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NestedProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SingleNestedProto); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_flow_combination_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_flow_combination_proto = out.File + file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = nil + file_examples_internal_proto_examplepb_flow_combination_proto_goTypes = nil + file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // FlowCombinationClient is the client API for FlowCombination service. // @@ -328,10 +620,10 @@ type FlowCombinationClient interface { } type flowCombinationClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { +func NewFlowCombinationClient(cc grpc.ClientConnInterface) FlowCombinationClient { return &flowCombinationClient{cc} } @@ -582,34 +874,34 @@ type FlowCombinationServer interface { type UnimplementedFlowCombinationServer struct { } -func (*UnimplementedFlowCombinationServer) RpcEmptyRpc(ctx context.Context, req *EmptyProto) (*EmptyProto, error) { +func (*UnimplementedFlowCombinationServer) RpcEmptyRpc(context.Context, *EmptyProto) (*EmptyProto, error) { return nil, status.Errorf(codes.Unimplemented, "method RpcEmptyRpc not implemented") } -func (*UnimplementedFlowCombinationServer) RpcEmptyStream(req *EmptyProto, srv FlowCombination_RpcEmptyStreamServer) error { +func (*UnimplementedFlowCombinationServer) RpcEmptyStream(*EmptyProto, FlowCombination_RpcEmptyStreamServer) error { return status.Errorf(codes.Unimplemented, "method RpcEmptyStream not implemented") } -func (*UnimplementedFlowCombinationServer) StreamEmptyRpc(srv FlowCombination_StreamEmptyRpcServer) error { +func (*UnimplementedFlowCombinationServer) StreamEmptyRpc(FlowCombination_StreamEmptyRpcServer) error { return status.Errorf(codes.Unimplemented, "method StreamEmptyRpc not implemented") } -func (*UnimplementedFlowCombinationServer) StreamEmptyStream(srv FlowCombination_StreamEmptyStreamServer) error { +func (*UnimplementedFlowCombinationServer) StreamEmptyStream(FlowCombination_StreamEmptyStreamServer) error { return status.Errorf(codes.Unimplemented, "method StreamEmptyStream not implemented") } -func (*UnimplementedFlowCombinationServer) RpcBodyRpc(ctx context.Context, req *NonEmptyProto) (*EmptyProto, error) { +func (*UnimplementedFlowCombinationServer) RpcBodyRpc(context.Context, *NonEmptyProto) (*EmptyProto, error) { return nil, status.Errorf(codes.Unimplemented, "method RpcBodyRpc not implemented") } -func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedRpc(ctx context.Context, req *SingleNestedProto) (*EmptyProto, error) { +func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedRpc(context.Context, *SingleNestedProto) (*EmptyProto, error) { return nil, status.Errorf(codes.Unimplemented, "method RpcPathSingleNestedRpc not implemented") } -func (*UnimplementedFlowCombinationServer) RpcPathNestedRpc(ctx context.Context, req *NestedProto) (*EmptyProto, error) { +func (*UnimplementedFlowCombinationServer) RpcPathNestedRpc(context.Context, *NestedProto) (*EmptyProto, error) { return nil, status.Errorf(codes.Unimplemented, "method RpcPathNestedRpc not implemented") } -func (*UnimplementedFlowCombinationServer) RpcBodyStream(req *NonEmptyProto, srv FlowCombination_RpcBodyStreamServer) error { +func (*UnimplementedFlowCombinationServer) RpcBodyStream(*NonEmptyProto, FlowCombination_RpcBodyStreamServer) error { return status.Errorf(codes.Unimplemented, "method RpcBodyStream not implemented") } -func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedStream(req *SingleNestedProto, srv FlowCombination_RpcPathSingleNestedStreamServer) error { +func (*UnimplementedFlowCombinationServer) RpcPathSingleNestedStream(*SingleNestedProto, FlowCombination_RpcPathSingleNestedStreamServer) error { return status.Errorf(codes.Unimplemented, "method RpcPathSingleNestedStream not implemented") } -func (*UnimplementedFlowCombinationServer) RpcPathNestedStream(req *NestedProto, srv FlowCombination_RpcPathNestedStreamServer) error { +func (*UnimplementedFlowCombinationServer) RpcPathNestedStream(*NestedProto, FlowCombination_RpcPathNestedStreamServer) error { return status.Errorf(codes.Unimplemented, "method RpcPathNestedStream not implemented") } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 962da2cdfe3..9c37e1d90fb 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,545 +1,842 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // NonStandardMessage has oddly named fields. type NonStandardMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3" json:"line_num,omitempty"` - LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` - STATUS string `protobuf:"bytes,5,opt,name=STATUS,proto3" json:"STATUS,omitempty"` - En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=enGB,proto3" json:"en_GB,omitempty"` - No string `protobuf:"bytes,7,opt,name=no,proto3" json:"no,omitempty"` - Thing *NonStandardMessage_Thing `protobuf:"bytes,8,opt,name=thing,proto3" json:"thing,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NonStandardMessage) Reset() { *m = NonStandardMessage{} } -func (m *NonStandardMessage) String() string { return proto.CompactTextString(m) } -func (*NonStandardMessage) ProtoMessage() {} -func (*NonStandardMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{0} + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=enGB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,proto3" json:"no,omitempty"` + Thing *NonStandardMessage_Thing `protobuf:"bytes,8,opt,name=thing,proto3" json:"thing,omitempty"` } -func (m *NonStandardMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessage.Unmarshal(m, b) -} -func (m *NonStandardMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessage.Marshal(b, m, deterministic) -} -func (m *NonStandardMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage.Merge(m, src) +func (x *NonStandardMessage) Reset() { + *x = NonStandardMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardMessage) XXX_Size() int { - return xxx_messageInfo_NonStandardMessage.Size(m) + +func (x *NonStandardMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonStandardMessage) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessage.DiscardUnknown(m) + +func (*NonStandardMessage) ProtoMessage() {} + +func (x *NonStandardMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NonStandardMessage proto.InternalMessageInfo +// Deprecated: Use NonStandardMessage.ProtoReflect.Descriptor instead. +func (*NonStandardMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0} +} -func (m *NonStandardMessage) GetId() string { - if m != nil { - return m.Id +func (x *NonStandardMessage) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *NonStandardMessage) GetNum() int64 { - if m != nil { - return m.Num +func (x *NonStandardMessage) GetNum() int64 { + if x != nil { + return x.Num } return 0 } -func (m *NonStandardMessage) GetLineNum() int64 { - if m != nil { - return m.LineNum +func (x *NonStandardMessage) GetLineNum() int64 { + if x != nil { + return x.LineNum } return 0 } -func (m *NonStandardMessage) GetLangIdent() string { - if m != nil { - return m.LangIdent +func (x *NonStandardMessage) GetLangIdent() string { + if x != nil { + return x.LangIdent } return "" } -func (m *NonStandardMessage) GetSTATUS() string { - if m != nil { - return m.STATUS +func (x *NonStandardMessage) GetSTATUS() string { + if x != nil { + return x.STATUS } return "" } -func (m *NonStandardMessage) GetEn_GB() int64 { - if m != nil { - return m.En_GB +func (x *NonStandardMessage) GetEn_GB() int64 { + if x != nil { + return x.En_GB } return 0 } -func (m *NonStandardMessage) GetNo() string { - if m != nil { - return m.No +func (x *NonStandardMessage) GetNo() string { + if x != nil { + return x.No } return "" } -func (m *NonStandardMessage) GetThing() *NonStandardMessage_Thing { - if m != nil { - return m.Thing +func (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing { + if x != nil { + return x.Thing } return nil } -type NonStandardMessage_Thing struct { - SubThing *NonStandardMessage_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,proto3" json:"subThing,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NonStandardMessage_Thing) Reset() { *m = NonStandardMessage_Thing{} } -func (m *NonStandardMessage_Thing) String() string { return proto.CompactTextString(m) } -func (*NonStandardMessage_Thing) ProtoMessage() {} -func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{0, 0} -} +type NonStandardUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NonStandardMessage_Thing) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessage_Thing.Unmarshal(m, b) -} -func (m *NonStandardMessage_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessage_Thing.Marshal(b, m, deterministic) + Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } -func (m *NonStandardMessage_Thing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage_Thing.Merge(m, src) -} -func (m *NonStandardMessage_Thing) XXX_Size() int { - return xxx_messageInfo_NonStandardMessage_Thing.Size(m) -} -func (m *NonStandardMessage_Thing) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessage_Thing.DiscardUnknown(m) -} - -var xxx_messageInfo_NonStandardMessage_Thing proto.InternalMessageInfo -func (m *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing { - if m != nil { - return m.SubThing +func (x *NonStandardUpdateRequest) Reset() { + *x = NonStandardUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -type NonStandardMessage_Thing_SubThing struct { - SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=subValue,proto3" json:"sub_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *NonStandardUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonStandardMessage_Thing_SubThing) Reset() { *m = NonStandardMessage_Thing_SubThing{} } -func (m *NonStandardMessage_Thing_SubThing) String() string { return proto.CompactTextString(m) } -func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} -func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{0, 0, 0} -} +func (*NonStandardUpdateRequest) ProtoMessage() {} -func (m *NonStandardMessage_Thing_SubThing) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Unmarshal(m, b) -} -func (m *NonStandardMessage_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Marshal(b, m, deterministic) -} -func (m *NonStandardMessage_Thing_SubThing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessage_Thing_SubThing.Merge(m, src) -} -func (m *NonStandardMessage_Thing_SubThing) XXX_Size() int { - return xxx_messageInfo_NonStandardMessage_Thing_SubThing.Size(m) -} -func (m *NonStandardMessage_Thing_SubThing) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessage_Thing_SubThing.DiscardUnknown(m) -} - -var xxx_messageInfo_NonStandardMessage_Thing_SubThing proto.InternalMessageInfo - -func (m *NonStandardMessage_Thing_SubThing) GetSubValue() string { - if m != nil { - return m.SubValue +func (x *NonStandardUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -type NonStandardUpdateRequest struct { - Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NonStandardUpdateRequest) Reset() { *m = NonStandardUpdateRequest{} } -func (m *NonStandardUpdateRequest) String() string { return proto.CompactTextString(m) } -func (*NonStandardUpdateRequest) ProtoMessage() {} +// Deprecated: Use NonStandardUpdateRequest.ProtoReflect.Descriptor instead. func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{1} -} - -func (m *NonStandardUpdateRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardUpdateRequest.Unmarshal(m, b) -} -func (m *NonStandardUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardUpdateRequest.Marshal(b, m, deterministic) -} -func (m *NonStandardUpdateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardUpdateRequest.Merge(m, src) -} -func (m *NonStandardUpdateRequest) XXX_Size() int { - return xxx_messageInfo_NonStandardUpdateRequest.Size(m) + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{1} } -func (m *NonStandardUpdateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardUpdateRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_NonStandardUpdateRequest proto.InternalMessageInfo -func (m *NonStandardUpdateRequest) GetBody() *NonStandardMessage { - if m != nil { - return m.Body +func (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage { + if x != nil { + return x.Body } return nil } -func (m *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask +func (x *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask } return nil } // NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. type NonStandardMessageWithJSONNames struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,json=ID,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` - LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=LineNum,proto3" json:"line_num,omitempty"` - LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` - STATUS string `protobuf:"bytes,5,opt,name=STATUS,json=status,proto3" json:"STATUS,omitempty"` - En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=En_GB,proto3" json:"en_GB,omitempty"` - No string `protobuf:"bytes,7,opt,name=no,json=yes,proto3" json:"no,omitempty"` - Thing *NonStandardMessageWithJSONNames_Thing `protobuf:"bytes,8,opt,name=thing,json=Thingy,proto3" json:"thing,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NonStandardMessageWithJSONNames) Reset() { *m = NonStandardMessageWithJSONNames{} } -func (m *NonStandardMessageWithJSONNames) String() string { return proto.CompactTextString(m) } -func (*NonStandardMessageWithJSONNames) ProtoMessage() {} -func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{2} + Id string `protobuf:"bytes,1,opt,name=id,json=ID,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=LineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,json=status,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=En_GB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,json=yes,proto3" json:"no,omitempty"` + Thing *NonStandardMessageWithJSONNames_Thing `protobuf:"bytes,8,opt,name=thing,json=Thingy,proto3" json:"thing,omitempty"` } -func (m *NonStandardMessageWithJSONNames) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessageWithJSONNames.Unmarshal(m, b) -} -func (m *NonStandardMessageWithJSONNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessageWithJSONNames.Marshal(b, m, deterministic) -} -func (m *NonStandardMessageWithJSONNames) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames.Merge(m, src) +func (x *NonStandardMessageWithJSONNames) Reset() { + *x = NonStandardMessageWithJSONNames{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardMessageWithJSONNames) XXX_Size() int { - return xxx_messageInfo_NonStandardMessageWithJSONNames.Size(m) + +func (x *NonStandardMessageWithJSONNames) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonStandardMessageWithJSONNames) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessageWithJSONNames.DiscardUnknown(m) + +func (*NonStandardMessageWithJSONNames) ProtoMessage() {} + +func (x *NonStandardMessageWithJSONNames) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_NonStandardMessageWithJSONNames proto.InternalMessageInfo +// Deprecated: Use NonStandardMessageWithJSONNames.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2} +} -func (m *NonStandardMessageWithJSONNames) GetId() string { - if m != nil { - return m.Id +func (x *NonStandardMessageWithJSONNames) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *NonStandardMessageWithJSONNames) GetNum() int64 { - if m != nil { - return m.Num +func (x *NonStandardMessageWithJSONNames) GetNum() int64 { + if x != nil { + return x.Num } return 0 } -func (m *NonStandardMessageWithJSONNames) GetLineNum() int64 { - if m != nil { - return m.LineNum +func (x *NonStandardMessageWithJSONNames) GetLineNum() int64 { + if x != nil { + return x.LineNum } return 0 } -func (m *NonStandardMessageWithJSONNames) GetLangIdent() string { - if m != nil { - return m.LangIdent +func (x *NonStandardMessageWithJSONNames) GetLangIdent() string { + if x != nil { + return x.LangIdent } return "" } -func (m *NonStandardMessageWithJSONNames) GetSTATUS() string { - if m != nil { - return m.STATUS +func (x *NonStandardMessageWithJSONNames) GetSTATUS() string { + if x != nil { + return x.STATUS } return "" } -func (m *NonStandardMessageWithJSONNames) GetEn_GB() int64 { - if m != nil { - return m.En_GB +func (x *NonStandardMessageWithJSONNames) GetEn_GB() int64 { + if x != nil { + return x.En_GB } return 0 } -func (m *NonStandardMessageWithJSONNames) GetNo() string { - if m != nil { - return m.No +func (x *NonStandardMessageWithJSONNames) GetNo() string { + if x != nil { + return x.No } return "" } -func (m *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing { - if m != nil { - return m.Thing +func (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing { + if x != nil { + return x.Thing } return nil } -type NonStandardMessageWithJSONNames_Thing struct { - SubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,json=SubThing,proto3" json:"subThing,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} +type NonStandardWithJSONNamesUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *NonStandardMessageWithJSONNames_Thing) Reset() { *m = NonStandardMessageWithJSONNames_Thing{} } -func (m *NonStandardMessageWithJSONNames_Thing) String() string { return proto.CompactTextString(m) } -func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} -func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{2, 0} + Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } -func (m *NonStandardMessageWithJSONNames_Thing) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Unmarshal(m, b) -} -func (m *NonStandardMessageWithJSONNames_Thing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Marshal(b, m, deterministic) +func (x *NonStandardWithJSONNamesUpdateRequest) Reset() { + *x = NonStandardWithJSONNamesUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardMessageWithJSONNames_Thing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Merge(m, src) + +func (x *NonStandardWithJSONNamesUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonStandardMessageWithJSONNames_Thing) XXX_Size() int { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.Size(m) + +func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} + +func (x *NonStandardWithJSONNamesUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NonStandardMessageWithJSONNames_Thing) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing.DiscardUnknown(m) + +// Deprecated: Use NonStandardWithJSONNamesUpdateRequest.ProtoReflect.Descriptor instead. +func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{3} } -var xxx_messageInfo_NonStandardMessageWithJSONNames_Thing proto.InternalMessageInfo +func (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames { + if x != nil { + return x.Body + } + return nil +} -func (m *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing { - if m != nil { - return m.SubThing +func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask } return nil } -type NonStandardMessageWithJSONNames_Thing_SubThing struct { - SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=sub_Value,proto3" json:"sub_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type NonStandardMessage_Thing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubThing *NonStandardMessage_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,proto3" json:"subThing,omitempty"` } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() { - *m = NonStandardMessageWithJSONNames_Thing_SubThing{} +func (x *NonStandardMessage_Thing) Reset() { + *x = NonStandardMessage_Thing{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { - return proto.CompactTextString(m) + +func (x *NonStandardMessage_Thing) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} -func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{2, 0, 0} + +func (*NonStandardMessage_Thing) ProtoMessage() {} + +func (x *NonStandardMessage_Thing) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Unmarshal(m, b) +// Deprecated: Use NonStandardMessage_Thing.ProtoReflect.Descriptor instead. +func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0} } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Marshal(b, m, deterministic) + +func (x *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing { + if x != nil { + return x.SubThing + } + return nil } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Merge(m, src) + +type NonStandardMessage_Thing_SubThing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=subValue,proto3" json:"sub_value,omitempty"` } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_Size() int { - return xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.Size(m) + +func (x *NonStandardMessage_Thing_SubThing) Reset() { + *x = NonStandardMessage_Thing_SubThing{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing.DiscardUnknown(m) + +func (x *NonStandardMessage_Thing_SubThing) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NonStandardMessageWithJSONNames_Thing_SubThing proto.InternalMessageInfo +func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} -func (m *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string { - if m != nil { - return m.SubValue +func (x *NonStandardMessage_Thing_SubThing) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessage_Thing_SubThing.ProtoReflect.Descriptor instead. +func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *NonStandardMessage_Thing_SubThing) GetSubValue() string { + if x != nil { + return x.SubValue } return "" } -type NonStandardWithJSONNamesUpdateRequest struct { - Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type NonStandardMessageWithJSONNames_Thing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,json=SubThing,proto3" json:"subThing,omitempty"` } -func (m *NonStandardWithJSONNamesUpdateRequest) Reset() { *m = NonStandardWithJSONNamesUpdateRequest{} } -func (m *NonStandardWithJSONNamesUpdateRequest) String() string { return proto.CompactTextString(m) } -func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} -func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_a1fc3d96d9306f6b, []int{3} +func (x *NonStandardMessageWithJSONNames_Thing) Reset() { + *x = NonStandardMessageWithJSONNames_Thing{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessageWithJSONNames_Thing) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Unmarshal(m, b) +func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} + +func (x *NonStandardMessageWithJSONNames_Thing) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessageWithJSONNames_Thing.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0} } -func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Marshal(b, m, deterministic) + +func (x *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing { + if x != nil { + return x.SubThing + } + return nil } -func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Merge(m, src) + +type NonStandardMessageWithJSONNames_Thing_SubThing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=sub_Value,proto3" json:"sub_value,omitempty"` } -func (m *NonStandardWithJSONNamesUpdateRequest) XXX_Size() int { - return xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.Size(m) + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() { + *x = NonStandardMessageWithJSONNames_Thing_SubThing{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *NonStandardWithJSONNamesUpdateRequest) XXX_DiscardUnknown() { - xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest.DiscardUnknown(m) + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_NonStandardWithJSONNamesUpdateRequest proto.InternalMessageInfo +func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} -func (m *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames { - if m != nil { - return m.Body +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (m *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask +// Deprecated: Use NonStandardMessageWithJSONNames_Thing_SubThing.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0, 0} +} + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string { + if x != nil { + return x.SubValue } - return nil + return "" } -func init() { - proto.RegisterType((*NonStandardMessage)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage") - proto.RegisterType((*NonStandardMessage_Thing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing") - proto.RegisterType((*NonStandardMessage_Thing_SubThing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing") - proto.RegisterType((*NonStandardUpdateRequest)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest") - proto.RegisterType((*NonStandardMessageWithJSONNames)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames") - proto.RegisterType((*NonStandardMessageWithJSONNames_Thing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing") - proto.RegisterType((*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing") - proto.RegisterType((*NonStandardWithJSONNamesUpdateRequest)(nil), "grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/non_standard_names.proto", fileDescriptor_a1fc3d96d9306f6b) -} - -var fileDescriptor_a1fc3d96d9306f6b = []byte{ - // 636 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x95, 0x4f, 0x6f, 0xd3, 0x3e, - 0x18, 0xc7, 0x95, 0x66, 0xed, 0x5a, 0x57, 0xfa, 0xfd, 0x90, 0x87, 0x50, 0x08, 0x93, 0x56, 0x55, - 0x42, 0xeb, 0x05, 0x47, 0x84, 0x03, 0xd2, 0x80, 0x03, 0x15, 0x30, 0x0d, 0x58, 0x87, 0x92, 0x0e, - 0x26, 0x24, 0x14, 0x39, 0x8b, 0x9b, 0x86, 0xa5, 0x76, 0xa8, 0x9d, 0x8e, 0x5e, 0x79, 0x0b, 0x9c, - 0xb8, 0x72, 0x41, 0xbc, 0x04, 0xce, 0x3b, 0x73, 0xe2, 0x2d, 0xf0, 0x02, 0x78, 0x09, 0x28, 0x76, - 0x52, 0x1a, 0x55, 0x88, 0xa9, 0xed, 0x29, 0x7e, 0x1e, 0x5b, 0xdf, 0xe7, 0xdf, 0x27, 0x36, 0xd8, - 0x23, 0xef, 0xf1, 0x28, 0x89, 0x09, 0xb7, 0x22, 0x2a, 0xc8, 0x98, 0xe2, 0xd8, 0x4a, 0xc6, 0x4c, - 0x30, 0x2b, 0xf7, 0x27, 0xbe, 0x45, 0x19, 0xf5, 0xb8, 0xc0, 0x34, 0xc0, 0xe3, 0xc0, 0xa3, 0x78, - 0x44, 0x38, 0x92, 0x47, 0x60, 0x27, 0x1c, 0x27, 0xa7, 0x28, 0xc4, 0x82, 0x9c, 0xe3, 0x29, 0x2a, - 0x84, 0x50, 0x21, 0x84, 0x66, 0x12, 0xe6, 0x76, 0xc8, 0x58, 0x18, 0x13, 0x0b, 0x27, 0x91, 0x85, - 0x29, 0x65, 0x02, 0x8b, 0x88, 0xd1, 0x5c, 0xc7, 0x6c, 0xe5, 0xbb, 0xd2, 0xf2, 0xd3, 0x81, 0x35, - 0x88, 0x48, 0x1c, 0x78, 0x23, 0xcc, 0xcf, 0xd4, 0x89, 0xf6, 0x67, 0x1d, 0xc0, 0x1e, 0xa3, 0x6e, - 0x9e, 0xc5, 0x21, 0xe1, 0x1c, 0x87, 0x04, 0xfe, 0x07, 0x2a, 0x51, 0x60, 0x68, 0x2d, 0xad, 0xd3, - 0x70, 0x2a, 0x51, 0x00, 0xaf, 0x00, 0xbd, 0x97, 0x8e, 0x8c, 0x4a, 0x4b, 0xeb, 0xe8, 0x4e, 0xb6, - 0x84, 0xd7, 0x41, 0x3d, 0x8e, 0x28, 0xf1, 0x68, 0x3a, 0x32, 0x74, 0xe9, 0xde, 0xcc, 0xec, 0x6c, - 0x6b, 0x1b, 0x34, 0x62, 0x4c, 0xc3, 0x83, 0x80, 0x50, 0x61, 0x6c, 0x48, 0x8d, 0x3f, 0x0e, 0x78, - 0x0d, 0xd4, 0xdc, 0xfe, 0xc3, 0xfe, 0xb1, 0x6b, 0x54, 0xe5, 0x56, 0x6e, 0xc1, 0x2d, 0x50, 0x25, - 0xd4, 0xdb, 0xef, 0x1a, 0x35, 0xa9, 0xb6, 0x41, 0xe8, 0x7e, 0x37, 0xcb, 0x83, 0x32, 0x63, 0x53, - 0xe5, 0x41, 0x19, 0x3c, 0x01, 0x55, 0x31, 0x8c, 0x68, 0x68, 0xd4, 0x5b, 0x5a, 0xa7, 0x69, 0x77, - 0xd1, 0x65, 0x1b, 0x85, 0x16, 0x8b, 0x44, 0xfd, 0x4c, 0xc9, 0x51, 0x82, 0xe6, 0x27, 0x0d, 0x54, - 0xa5, 0x03, 0x86, 0xa0, 0xce, 0x53, 0x5f, 0xae, 0x65, 0x07, 0x9a, 0xf6, 0xb3, 0xd5, 0xc3, 0x20, - 0x37, 0x97, 0x74, 0x66, 0xe2, 0xe6, 0x2e, 0xa8, 0x17, 0x5e, 0x78, 0x03, 0x34, 0x78, 0xea, 0x7b, - 0x13, 0x1c, 0xa7, 0x24, 0xef, 0x7b, 0x76, 0xf0, 0x65, 0x66, 0xb7, 0xbf, 0x6a, 0xc0, 0x98, 0x13, - 0x3e, 0x4e, 0x02, 0x2c, 0x88, 0x43, 0xde, 0xa5, 0x84, 0x0b, 0xf8, 0x02, 0x6c, 0xf8, 0x2c, 0x98, - 0xe6, 0xa9, 0xde, 0x5f, 0x25, 0x55, 0x47, 0x2a, 0xc1, 0x7b, 0xa0, 0x99, 0xca, 0x10, 0x12, 0x14, - 0x39, 0xf4, 0xa6, 0x6d, 0x22, 0xc5, 0x12, 0x2a, 0x58, 0x42, 0x4f, 0x32, 0x96, 0x0e, 0x31, 0x3f, - 0x73, 0x80, 0x3a, 0x9e, 0xad, 0xdb, 0xdf, 0x75, 0xb0, 0xb3, 0xa8, 0xfc, 0x2a, 0x12, 0xc3, 0xa7, - 0xee, 0x51, 0xaf, 0x97, 0x41, 0x5e, 0xa6, 0xeb, 0xe0, 0xd1, 0xe5, 0xe8, 0x7a, 0xbe, 0x1c, 0x5d, - 0x5c, 0x60, 0x91, 0x72, 0x78, 0xb5, 0x4c, 0x57, 0xf5, 0x71, 0x66, 0xc0, 0xff, 0xe7, 0xf0, 0xd2, - 0xa7, 0x84, 0xc3, 0x41, 0x99, 0xaf, 0xa3, 0x55, 0xba, 0x59, 0xaa, 0x39, 0x87, 0xad, 0x26, 0x3f, - 0x53, 0xf3, 0xcb, 0x8c, 0x36, 0xb1, 0x40, 0xdb, 0xc9, 0x9a, 0x83, 0xce, 0xa1, 0x57, 0xac, 0xcc, - 0xce, 0x1c, 0x7a, 0xdb, 0x8b, 0xe8, 0x49, 0x87, 0x62, 0xef, 0x42, 0x03, 0x37, 0xe7, 0xc2, 0x94, - 0xf4, 0xcb, 0x20, 0xbe, 0x29, 0x81, 0x78, 0xb0, 0xb6, 0x2a, 0xd6, 0x40, 0xa5, 0x7d, 0x51, 0xbe, - 0xe6, 0x5c, 0x32, 0x9e, 0x44, 0xa7, 0x04, 0x7e, 0xd3, 0x40, 0x4d, 0x15, 0x01, 0x97, 0xbb, 0x4a, - 0x4a, 0x1d, 0x30, 0x57, 0xfa, 0xf9, 0xda, 0xb7, 0x3e, 0xfc, 0xf8, 0xf9, 0xb1, 0xb2, 0x6b, 0xef, - 0x58, 0x93, 0xdb, 0xc5, 0x23, 0x51, 0x7a, 0x22, 0x2c, 0x55, 0xd0, 0x9e, 0xea, 0xc7, 0x2f, 0x0d, - 0x6c, 0xa9, 0xf0, 0xe5, 0x9f, 0x6b, 0x39, 0x66, 0xff, 0x3e, 0x57, 0x73, 0x7d, 0x93, 0x6c, 0x3f, - 0x90, 0x25, 0xde, 0xb5, 0xad, 0x7f, 0x94, 0xe8, 0x9d, 0x47, 0x62, 0xe8, 0xbd, 0xe5, 0x8c, 0xaa, - 0x67, 0x51, 0x95, 0xdc, 0x6d, 0xbe, 0x6e, 0xcc, 0x62, 0xf9, 0x35, 0x39, 0xf2, 0x3b, 0xbf, 0x03, - 0x00, 0x00, 0xff, 0xff, 0x0f, 0xef, 0xfa, 0x6c, 0x68, 0x07, 0x00, 0x00, +var File_examples_internal_proto_examplepb_non_standard_names_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = []byte{ + 0x0a, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, + 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, + 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, + 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x58, 0x0a, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, + 0x99, 0x01, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x08, 0x73, 0x75, 0x62, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, + 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x18, + 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xcd, 0x03, 0x0a, 0x1f, 0x4e, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, + 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4e, + 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, + 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, + 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x45, + 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x79, 0x1a, 0xa7, 0x01, + 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x74, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, + 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, + 0x69, 0x6e, 0x67, 0x52, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x28, 0x0a, + 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, + 0x62, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x25, 0x4e, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x5d, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, + 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xc3, 0x03, + 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, + 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x12, 0xf0, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, + 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, + 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x32, 0x2f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, + 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x04, 0x62, + 0x6f, 0x64, 0x79, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData = file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = []interface{}{ + (*NonStandardMessage)(nil), // 0: grpc.gateway.examples.internal.examplepb.NonStandardMessage + (*NonStandardUpdateRequest)(nil), // 1: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest + (*NonStandardMessageWithJSONNames)(nil), // 2: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames + (*NonStandardWithJSONNamesUpdateRequest)(nil), // 3: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest + (*NonStandardMessage_Thing)(nil), // 4: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing + (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing + (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing + (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + (*field_mask.FieldMask)(nil), // 8: google.protobuf.FieldMask +} +var file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = []int32{ + 4, // 0: grpc.gateway.examples.internal.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing + 0, // 1: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage + 8, // 2: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 6, // 3: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing + 2, // 4: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames + 8, // 5: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 5, // 6: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing + 7, // 7: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + 1, // 8: grpc.gateway.examples.internal.examplepb.NonStandardService.Update:input_type -> grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest + 3, // 9: grpc.gateway.examples.internal.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest + 0, // 10: grpc.gateway.examples.internal.examplepb.NonStandardService.Update:output_type -> grpc.gateway.examples.internal.examplepb.NonStandardMessage + 2, // 11: grpc.gateway.examples.internal.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames + 10, // [10:12] is the sub-list for method output_type + 8, // [8:10] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_non_standard_names_proto_init() } +func file_examples_internal_proto_examplepb_non_standard_names_proto_init() { + if File_examples_internal_proto_examplepb_non_standard_names_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardWithJSONNamesUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage_Thing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage_Thing_SubThing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames_Thing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames_Thing_SubThing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_non_standard_names_proto = out.File + file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = nil + file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = nil + file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // NonStandardServiceClient is the client API for NonStandardService service. // @@ -552,10 +849,10 @@ type NonStandardServiceClient interface { } type nonStandardServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewNonStandardServiceClient(cc *grpc.ClientConn) NonStandardServiceClient { +func NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardServiceClient { return &nonStandardServiceClient{cc} } @@ -589,10 +886,10 @@ type NonStandardServiceServer interface { type UnimplementedNonStandardServiceServer struct { } -func (*UnimplementedNonStandardServiceServer) Update(ctx context.Context, req *NonStandardUpdateRequest) (*NonStandardMessage, error) { +func (*UnimplementedNonStandardServiceServer) Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") } -func (*UnimplementedNonStandardServiceServer) UpdateWithJSONNames(ctx context.Context, req *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) { +func (*UnimplementedNonStandardServiceServer) UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateWithJSONNames not implemented") } diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 1d7bb328396..17d846204ae 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,29 +1,34 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type RepeatedResponseBodyOut_Response_ResponseType int32 @@ -36,324 +41,584 @@ const ( RepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2 ) -var RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "A", - 2: "B", -} +// Enum value maps for RepeatedResponseBodyOut_Response_ResponseType. +var ( + RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "A", + 2: "B", + } + RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ + "UNKNOWN": 0, + "A": 1, + "B": 2, + } +) -var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ - "UNKNOWN": 0, - "A": 1, - "B": 2, +func (x RepeatedResponseBodyOut_Response_ResponseType) Enum() *RepeatedResponseBodyOut_Response_ResponseType { + p := new(RepeatedResponseBodyOut_Response_ResponseType) + *p = x + return p } func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { - return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{2, 0, 0} +func (RepeatedResponseBodyOut_Response_ResponseType) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes[0].Descriptor() } -type ResponseBodyIn struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (RepeatedResponseBodyOut_Response_ResponseType) Type() protoreflect.EnumType { + return &file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes[0] } -func (m *ResponseBodyIn) Reset() { *m = ResponseBodyIn{} } -func (m *ResponseBodyIn) String() string { return proto.CompactTextString(m) } -func (*ResponseBodyIn) ProtoMessage() {} -func (*ResponseBodyIn) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{0} +func (x RepeatedResponseBodyOut_Response_ResponseType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *ResponseBodyIn) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseBodyIn.Unmarshal(m, b) +// Deprecated: Use RepeatedResponseBodyOut_Response_ResponseType.Descriptor instead. +func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2, 0, 0} } -func (m *ResponseBodyIn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseBodyIn.Marshal(b, m, deterministic) + +type ResponseBodyIn struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (m *ResponseBodyIn) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyIn.Merge(m, src) + +func (x *ResponseBodyIn) Reset() { + *x = ResponseBodyIn{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResponseBodyIn) XXX_Size() int { - return xxx_messageInfo_ResponseBodyIn.Size(m) + +func (x *ResponseBodyIn) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ResponseBodyIn) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseBodyIn.DiscardUnknown(m) + +func (*ResponseBodyIn) ProtoMessage() {} + +func (x *ResponseBodyIn) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ResponseBodyIn proto.InternalMessageInfo +// Deprecated: Use ResponseBodyIn.ProtoReflect.Descriptor instead. +func (*ResponseBodyIn) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{0} +} -func (m *ResponseBodyIn) GetData() string { - if m != nil { - return m.Data +func (x *ResponseBodyIn) GetData() string { + if x != nil { + return x.Data } return "" } type ResponseBodyOut struct { - Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } -func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } -func (*ResponseBodyOut) ProtoMessage() {} -func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{1} + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` } -func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) -} -func (m *ResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseBodyOut.Marshal(b, m, deterministic) -} -func (m *ResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut.Merge(m, src) -} -func (m *ResponseBodyOut) XXX_Size() int { - return xxx_messageInfo_ResponseBodyOut.Size(m) +func (x *ResponseBodyOut) Reset() { + *x = ResponseBodyOut{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResponseBodyOut) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseBodyOut.DiscardUnknown(m) + +func (x *ResponseBodyOut) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ResponseBodyOut proto.InternalMessageInfo +func (*ResponseBodyOut) ProtoMessage() {} -func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { - if m != nil { - return m.Response +func (x *ResponseBodyOut) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type ResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use ResponseBodyOut.ProtoReflect.Descriptor instead. +func (*ResponseBodyOut) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{1} } -func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Response{} } -func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } -func (*ResponseBodyOut_Response) ProtoMessage() {} -func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{1, 0} +func (x *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { + if x != nil { + return x.Response + } + return nil } -func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) -} -func (m *ResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseBodyOut_Response.Marshal(b, m, deterministic) -} -func (m *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut_Response.Merge(m, src) +type RepeatedResponseBodyOut struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` } -func (m *ResponseBodyOut_Response) XXX_Size() int { - return xxx_messageInfo_ResponseBodyOut_Response.Size(m) + +func (x *RepeatedResponseBodyOut) Reset() { + *x = RepeatedResponseBodyOut{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResponseBodyOut_Response) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseBodyOut_Response.DiscardUnknown(m) + +func (x *RepeatedResponseBodyOut) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ResponseBodyOut_Response proto.InternalMessageInfo +func (*RepeatedResponseBodyOut) ProtoMessage() {} -func (m *ResponseBodyOut_Response) GetData() string { - if m != nil { - return m.Data +func (x *RepeatedResponseBodyOut) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" -} - -type RepeatedResponseBodyOut struct { - Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + return mi.MessageOf(x) } -func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut{} } -func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } -func (*RepeatedResponseBodyOut) ProtoMessage() {} +// Deprecated: Use RepeatedResponseBodyOut.ProtoReflect.Descriptor instead. func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{2} + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2} } -func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) -} -func (m *RepeatedResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepeatedResponseBodyOut.Marshal(b, m, deterministic) +func (x *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { + if x != nil { + return x.Response + } + return nil } -func (m *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut.Merge(m, src) + +type RepeatedResponseStrings struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` } -func (m *RepeatedResponseBodyOut) XXX_Size() int { - return xxx_messageInfo_RepeatedResponseBodyOut.Size(m) + +func (x *RepeatedResponseStrings) Reset() { + *x = RepeatedResponseStrings{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RepeatedResponseBodyOut) XXX_DiscardUnknown() { - xxx_messageInfo_RepeatedResponseBodyOut.DiscardUnknown(m) + +func (x *RepeatedResponseStrings) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_RepeatedResponseBodyOut proto.InternalMessageInfo +func (*RepeatedResponseStrings) ProtoMessage() {} -func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { - if m != nil { - return m.Response +func (x *RepeatedResponseStrings) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type RepeatedResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use RepeatedResponseStrings.ProtoReflect.Descriptor instead. +func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{3} } -func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedResponseBodyOut_Response{} } -func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } -func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} -func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{2, 0} +func (x *RepeatedResponseStrings) GetValues() []string { + if x != nil { + return x.Values + } + return nil } -func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) -} -func (m *RepeatedResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Marshal(b, m, deterministic) -} -func (m *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(m, src) +type ResponseBodyOut_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (m *RepeatedResponseBodyOut_Response) XXX_Size() int { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Size(m) + +func (x *ResponseBodyOut_Response) Reset() { + *x = ResponseBodyOut_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RepeatedResponseBodyOut_Response) XXX_DiscardUnknown() { - xxx_messageInfo_RepeatedResponseBodyOut_Response.DiscardUnknown(m) + +func (x *ResponseBodyOut_Response) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_RepeatedResponseBodyOut_Response proto.InternalMessageInfo +func (*ResponseBodyOut_Response) ProtoMessage() {} -func (m *RepeatedResponseBodyOut_Response) GetData() string { - if m != nil { - return m.Data +func (x *ResponseBodyOut_Response) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (m *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { - if m != nil { - return m.Type - } - return RepeatedResponseBodyOut_Response_UNKNOWN +// Deprecated: Use ResponseBodyOut_Response.ProtoReflect.Descriptor instead. +func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{1, 0} } -type RepeatedResponseStrings struct { - Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (x *ResponseBodyOut_Response) GetData() string { + if x != nil { + return x.Data + } + return "" } -func (m *RepeatedResponseStrings) Reset() { *m = RepeatedResponseStrings{} } -func (m *RepeatedResponseStrings) String() string { return proto.CompactTextString(m) } -func (*RepeatedResponseStrings) ProtoMessage() {} -func (*RepeatedResponseStrings) Descriptor() ([]byte, []int) { - return fileDescriptor_272b2870183bbe20, []int{3} -} +type RepeatedResponseBodyOut_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *RepeatedResponseStrings) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepeatedResponseStrings.Unmarshal(m, b) + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` } -func (m *RepeatedResponseStrings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepeatedResponseStrings.Marshal(b, m, deterministic) + +func (x *RepeatedResponseBodyOut_Response) Reset() { + *x = RepeatedResponseBodyOut_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RepeatedResponseStrings) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseStrings.Merge(m, src) + +func (x *RepeatedResponseBodyOut_Response) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RepeatedResponseStrings) XXX_Size() int { - return xxx_messageInfo_RepeatedResponseStrings.Size(m) + +func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} + +func (x *RepeatedResponseBodyOut_Response) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *RepeatedResponseStrings) XXX_DiscardUnknown() { - xxx_messageInfo_RepeatedResponseStrings.DiscardUnknown(m) + +// Deprecated: Use RepeatedResponseBodyOut_Response.ProtoReflect.Descriptor instead. +func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP(), []int{2, 0} } -var xxx_messageInfo_RepeatedResponseStrings proto.InternalMessageInfo +func (x *RepeatedResponseBodyOut_Response) GetData() string { + if x != nil { + return x.Data + } + return "" +} -func (m *RepeatedResponseStrings) GetValues() []string { - if m != nil { - return m.Values +func (x *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { + if x != nil { + return x.Type } - return nil + return RepeatedResponseBodyOut_Response_UNKNOWN } -func init() { - proto.RegisterEnum("grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) - proto.RegisterType((*ResponseBodyIn)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyIn") - proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyOut") - proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response") - proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut") - proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response") - proto.RegisterType((*RepeatedResponseStrings)(nil), "grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/response_body_service.proto", fileDescriptor_272b2870183bbe20) -} - -var fileDescriptor_272b2870183bbe20 = []byte{ - // 482 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x94, 0xc1, 0x6e, 0xd3, 0x40, - 0x10, 0x86, 0xd9, 0xa4, 0x84, 0x66, 0x82, 0xda, 0x68, 0x0a, 0x6d, 0x14, 0x10, 0x32, 0x16, 0xa2, - 0xe6, 0x80, 0x0d, 0xe1, 0x02, 0x07, 0x0e, 0xcd, 0x05, 0x15, 0x50, 0x2a, 0x39, 0xa0, 0x4a, 0x1c, - 0xa8, 0x36, 0xcd, 0x60, 0x59, 0xa4, 0xbb, 0x2b, 0xef, 0xb6, 0x60, 0x21, 0x2e, 0x7d, 0x03, 0xc4, - 0x7b, 0x70, 0xe4, 0x00, 0xe2, 0x29, 0x78, 0x05, 0x1e, 0x04, 0xc5, 0xb1, 0x57, 0x6e, 0x6a, 0x21, - 0x68, 0x91, 0x72, 0xf2, 0xee, 0xec, 0xea, 0x9f, 0x4f, 0xfb, 0xff, 0x63, 0x78, 0x4c, 0xef, 0xf9, - 0x81, 0x9a, 0x90, 0x0e, 0x62, 0x61, 0x28, 0x11, 0x7c, 0x12, 0xa8, 0x44, 0x1a, 0x19, 0xe4, 0x75, - 0x35, 0x0a, 0x12, 0xd2, 0x4a, 0x0a, 0x4d, 0x7b, 0x23, 0x39, 0x4e, 0xf7, 0x34, 0x25, 0x47, 0xf1, - 0x3e, 0xf9, 0xd9, 0x2d, 0xf4, 0xa2, 0x44, 0xed, 0xfb, 0x11, 0x37, 0xf4, 0x8e, 0xa7, 0x7e, 0xa1, - 0xe5, 0x17, 0x5a, 0xbe, 0x55, 0xe9, 0x5e, 0x8f, 0xa4, 0x8c, 0x26, 0x14, 0x70, 0x15, 0x07, 0x5c, - 0x08, 0x69, 0xb8, 0x89, 0xa5, 0xd0, 0x33, 0x1d, 0xf7, 0x16, 0xac, 0x84, 0x79, 0x9b, 0xbe, 0x1c, - 0xa7, 0xdb, 0x02, 0x11, 0x96, 0xc6, 0xdc, 0xf0, 0x0e, 0x73, 0x98, 0xd7, 0x0c, 0xb3, 0xb5, 0xfb, - 0x89, 0xc1, 0x6a, 0xf9, 0xda, 0xce, 0xa1, 0xc1, 0xd7, 0xb0, 0x5c, 0x00, 0x76, 0x6a, 0x0e, 0xf3, - 0x5a, 0xbd, 0xbe, 0xff, 0xb7, 0x50, 0xfe, 0x9c, 0x98, 0xdd, 0x87, 0x56, 0xb3, 0x7b, 0x03, 0x96, - 0x8b, 0x6a, 0x25, 0xd3, 0xb7, 0x1a, 0x6c, 0x84, 0xa4, 0x88, 0x1b, 0x1a, 0xcf, 0xb3, 0xbd, 0x39, - 0xc1, 0x56, 0xf7, 0x5a, 0xbd, 0xa7, 0xff, 0xc2, 0x56, 0x29, 0x5a, 0xc5, 0xf8, 0x95, 0xfd, 0x19, - 0x12, 0xdf, 0xc2, 0x92, 0x49, 0x15, 0x75, 0xea, 0x0e, 0xf3, 0x56, 0x7a, 0xbb, 0xff, 0x0f, 0xc2, - 0x2e, 0x5e, 0xa4, 0x8a, 0xc2, 0xac, 0x89, 0x7b, 0x07, 0x2e, 0x97, 0xab, 0xd8, 0x82, 0x4b, 0x2f, - 0x07, 0xcf, 0x06, 0x3b, 0xbb, 0x83, 0xf6, 0x05, 0xbc, 0x08, 0x6c, 0xab, 0xcd, 0xa6, 0x9f, 0x7e, - 0xbb, 0xe6, 0xde, 0x3f, 0xfd, 0x76, 0x43, 0x93, 0xc4, 0x22, 0xd2, 0xb8, 0x0e, 0x8d, 0x23, 0x3e, - 0x39, 0x24, 0xdd, 0x61, 0x4e, 0xdd, 0x6b, 0x86, 0xf9, 0xae, 0x77, 0xdc, 0x80, 0xb5, 0x32, 0xcd, - 0x70, 0x96, 0x47, 0xfc, 0xc2, 0x60, 0xf5, 0x09, 0x99, 0xf2, 0x11, 0x3e, 0x3c, 0x5b, 0x12, 0xb6, - 0x45, 0xf7, 0xd1, 0x99, 0x33, 0xe4, 0xde, 0x3e, 0xfe, 0xf9, 0xeb, 0x73, 0xcd, 0xc1, 0x2b, 0x76, - 0x70, 0xa6, 0x73, 0x13, 0x7c, 0x98, 0x1a, 0xf1, 0x71, 0x64, 0x4d, 0xc3, 0xef, 0x0c, 0xf0, 0x79, - 0xac, 0xcb, 0xc4, 0x31, 0xe9, 0x73, 0x30, 0x6f, 0x9d, 0xdb, 0x56, 0xd7, 0xcb, 0xd8, 0x5d, 0x5c, - 0x2f, 0xb3, 0xc7, 0xa4, 0x2b, 0xe9, 0xd7, 0xca, 0xf4, 0x85, 0x6d, 0x0b, 0xc1, 0xcf, 0x9b, 0xbb, - 0x9b, 0x19, 0xfe, 0x4d, 0xdc, 0xb0, 0xf8, 0x7a, 0x76, 0x52, 0xf0, 0xe7, 0x21, 0xc2, 0x1f, 0x0c, - 0xae, 0xce, 0x85, 0x65, 0x68, 0x12, 0xe2, 0x07, 0x8b, 0x89, 0xcc, 0xdd, 0x8c, 0x7b, 0x13, 0xaf, - 0x9d, 0x8c, 0x8c, 0xce, 0x90, 0x4e, 0xbd, 0xfd, 0x3d, 0xd6, 0x6f, 0xbd, 0x6a, 0x5a, 0xb5, 0x51, - 0x23, 0xfb, 0x85, 0x3e, 0xf8, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x16, 0xc0, 0x87, 0xdb, 0xcb, 0x05, - 0x00, 0x00, +var File_examples_internal_proto_examplepb_response_body_service_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = []byte{ + 0x0a, 0x3d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, + 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x91, 0x01, + 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, + 0x74, 0x12, 0x5e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xba, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x66, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, + 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb6, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0x31, + 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x32, 0x82, 0x06, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, + 0x64, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x38, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, + 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x14, 0x2f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, + 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x12, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x69, 0x65, + 0x73, 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x41, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x28, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x16, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x27, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x17, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x39, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, + 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x1b, 0x2f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_response_body_service_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData = file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_response_body_service_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_response_body_service_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_response_body_service_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_examples_internal_proto_examplepb_response_body_service_proto_goTypes = []interface{}{ + (RepeatedResponseBodyOut_Response_ResponseType)(0), // 0: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + (*ResponseBodyIn)(nil), // 1: grpc.gateway.examples.internal.examplepb.ResponseBodyIn + (*ResponseBodyOut)(nil), // 2: grpc.gateway.examples.internal.examplepb.ResponseBodyOut + (*RepeatedResponseBodyOut)(nil), // 3: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut + (*RepeatedResponseStrings)(nil), // 4: grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings + (*ResponseBodyOut_Response)(nil), // 5: grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response + (*RepeatedResponseBodyOut_Response)(nil), // 6: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response +} +var file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs = []int32{ + 5, // 0: grpc.gateway.examples.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response + 6, // 1: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response + 0, // 2: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + 1, // 3: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBody:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn + 1, // 4: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseBodies:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn + 1, // 5: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseStrings:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn + 1, // 6: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBodyStream:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn + 2, // 7: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBody:output_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut + 3, // 8: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseBodies:output_type -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut + 4, // 9: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseStrings:output_type -> grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings + 2, // 10: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBodyStream:output_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut + 7, // [7:11] is the sub-list for method output_type + 3, // [3:7] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_response_body_service_proto_init() } +func file_examples_internal_proto_examplepb_response_body_service_proto_init() { + if File_examples_internal_proto_examplepb_response_body_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseBodyIn); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseBodyOut); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepeatedResponseBodyOut); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepeatedResponseStrings); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseBodyOut_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepeatedResponseBodyOut_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc, + NumEnums: 1, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_response_body_service_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs, + EnumInfos: file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes, + MessageInfos: file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_response_body_service_proto = out.File + file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = nil + file_examples_internal_proto_examplepb_response_body_service_proto_goTypes = nil + file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ResponseBodyServiceClient is the client API for ResponseBodyService service. // @@ -366,10 +631,10 @@ type ResponseBodyServiceClient interface { } type responseBodyServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient { +func NewResponseBodyServiceClient(cc grpc.ClientConnInterface) ResponseBodyServiceClient { return &responseBodyServiceClient{cc} } @@ -444,16 +709,16 @@ type ResponseBodyServiceServer interface { type UnimplementedResponseBodyServiceServer struct { } -func (*UnimplementedResponseBodyServiceServer) GetResponseBody(ctx context.Context, req *ResponseBodyIn) (*ResponseBodyOut, error) { +func (*UnimplementedResponseBodyServiceServer) GetResponseBody(context.Context, *ResponseBodyIn) (*ResponseBodyOut, error) { return nil, status.Errorf(codes.Unimplemented, "method GetResponseBody not implemented") } -func (*UnimplementedResponseBodyServiceServer) ListResponseBodies(ctx context.Context, req *ResponseBodyIn) (*RepeatedResponseBodyOut, error) { +func (*UnimplementedResponseBodyServiceServer) ListResponseBodies(context.Context, *ResponseBodyIn) (*RepeatedResponseBodyOut, error) { return nil, status.Errorf(codes.Unimplemented, "method ListResponseBodies not implemented") } -func (*UnimplementedResponseBodyServiceServer) ListResponseStrings(ctx context.Context, req *ResponseBodyIn) (*RepeatedResponseStrings, error) { +func (*UnimplementedResponseBodyServiceServer) ListResponseStrings(context.Context, *ResponseBodyIn) (*RepeatedResponseStrings, error) { return nil, status.Errorf(codes.Unimplemented, "method ListResponseStrings not implemented") } -func (*UnimplementedResponseBodyServiceServer) GetResponseBodyStream(req *ResponseBodyIn, srv ResponseBodyService_GetResponseBodyStreamServer) error { +func (*UnimplementedResponseBodyServiceServer) GetResponseBodyStream(*ResponseBodyIn, ResponseBodyService_GetResponseBodyStreamServer) error { return status.Errorf(codes.Unimplemented, "method GetResponseBodyStream not implemented") } diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index c58aa603403..694cbaf156a 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/stream.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" @@ -13,56 +15,125 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/stream.proto", fileDescriptor_cc5dba844cf4f624) -} - -var fileDescriptor_cc5dba844cf4f624 = []byte{ - // 328 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x90, 0xb1, 0x4e, 0xeb, 0x30, - 0x14, 0x86, 0xe5, 0x7b, 0x11, 0x82, 0x20, 0x16, 0x0f, 0x0c, 0x01, 0x09, 0x51, 0x21, 0xd1, 0x32, - 0xd8, 0x2d, 0x6c, 0x65, 0xa2, 0xa8, 0x1b, 0x88, 0xa1, 0x1b, 0x4b, 0x65, 0x47, 0xa7, 0xae, 0xd5, - 0xc4, 0x8e, 0xec, 0x93, 0x42, 0x57, 0x24, 0x9e, 0xa0, 0xcf, 0xc0, 0x13, 0x21, 0xde, 0x80, 0x07, - 0x41, 0x75, 0xd2, 0x4c, 0x54, 0x29, 0x62, 0xcc, 0x39, 0xf9, 0x8e, 0xff, 0xef, 0x8f, 0x18, 0xbc, - 0x88, 0x2c, 0x4f, 0xc1, 0x73, 0x6d, 0x10, 0x9c, 0x11, 0x29, 0xcf, 0x9d, 0x45, 0xcb, 0xab, 0x79, - 0x2e, 0xb9, 0x47, 0x07, 0x22, 0x63, 0x61, 0x4c, 0xdb, 0xca, 0xe5, 0x09, 0x53, 0x02, 0xe1, 0x59, - 0x2c, 0x6a, 0x98, 0xad, 0x61, 0x56, 0x63, 0xf1, 0x89, 0xb2, 0x56, 0xa5, 0xc0, 0x45, 0xae, 0xb9, - 0x30, 0xc6, 0xa2, 0x40, 0x6d, 0x8d, 0x2f, 0xef, 0xc4, 0xc7, 0xd5, 0x36, 0x7c, 0xc9, 0x62, 0xc2, - 0x21, 0xcb, 0x71, 0x51, 0x2d, 0x6f, 0x9a, 0x43, 0x89, 0xb1, 0xd4, 0x38, 0xb6, 0x93, 0x31, 0xcc, - 0xc1, 0x2d, 0x70, 0xaa, 0x8d, 0xaa, 0xe0, 0xce, 0x26, 0xd8, 0x17, 0x92, 0x67, 0xe0, 0xbd, 0x50, - 0x50, 0xfe, 0x7a, 0xf5, 0xf9, 0x3f, 0x3a, 0x1c, 0x05, 0xbb, 0x11, 0xb8, 0xb9, 0x4e, 0x80, 0x2e, - 0x49, 0x14, 0x0d, 0x8a, 0x74, 0x76, 0xe7, 0x40, 0x20, 0xd0, 0x3e, 0xdb, 0x56, 0x97, 0xdd, 0x0e, - 0x34, 0x3e, 0x4e, 0x86, 0x75, 0x9a, 0xf8, 0x88, 0x95, 0x8a, 0x6c, 0xad, 0xc8, 0x86, 0x2b, 0xc5, - 0x16, 0x7f, 0xfd, 0xf8, 0x5a, 0xfe, 0xeb, 0xb4, 0xce, 0xf9, 0xbc, 0xb7, 0x16, 0xfa, 0x49, 0x87, - 0xcb, 0x22, 0x9d, 0xf5, 0xc9, 0x65, 0x9b, 0xd0, 0x37, 0x12, 0xed, 0xdc, 0x6b, 0x8f, 0x74, 0xc3, - 0xcd, 0xf8, 0x0f, 0x39, 0x5b, 0x17, 0x21, 0xcf, 0x19, 0x3d, 0x6d, 0xc8, 0xd3, 0x25, 0xf4, 0x9d, - 0x44, 0x7b, 0xab, 0x76, 0x86, 0xc9, 0xd4, 0xd2, 0x5e, 0xd3, 0x9b, 0xbe, 0x90, 0x6c, 0x84, 0x4e, - 0x1b, 0xf5, 0x50, 0xb6, 0x1e, 0xff, 0x1e, 0xd9, 0xbe, 0x2d, 0x48, 0xa6, 0x36, 0xb4, 0xd5, 0x25, - 0x83, 0x83, 0xa7, 0xfd, 0x5a, 0x58, 0xee, 0x86, 0xae, 0xae, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, - 0xb8, 0x9c, 0x62, 0x91, 0xea, 0x02, 0x00, 0x00, +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +var File_examples_internal_proto_examplepb_stream_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xd5, 0x03, + 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x93, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, + 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, + 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xa5, 0x01, + 0x0a, 0x08, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x31, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, + 0x2a, 0x28, 0x01, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var file_examples_internal_proto_examplepb_stream_proto_goTypes = []interface{}{ + (*ABitOfEverything)(nil), // 0: grpc.gateway.examples.internal.examplepb.ABitOfEverything + (*empty.Empty)(nil), // 1: google.protobuf.Empty + (*sub.StringMessage)(nil), // 2: grpc.gateway.examples.internal.sub.StringMessage +} +var file_examples_internal_proto_examplepb_stream_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 1, // 1: grpc.gateway.examples.internal.examplepb.StreamService.List:input_type -> google.protobuf.Empty + 2, // 2: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:input_type -> grpc.gateway.examples.internal.sub.StringMessage + 1, // 3: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty + 0, // 4: grpc.gateway.examples.internal.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 5: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.sub.StringMessage + 3, // [3:6] is the sub-list for method output_type + 0, // [0:3] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_stream_proto_init() } +func file_examples_internal_proto_examplepb_stream_proto_init() { + if File_examples_internal_proto_examplepb_stream_proto != nil { + return + } + file_examples_internal_proto_examplepb_a_bit_of_everything_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_stream_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_stream_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_stream_proto_depIdxs, + }.Build() + File_examples_internal_proto_examplepb_stream_proto = out.File + file_examples_internal_proto_examplepb_stream_proto_rawDesc = nil + file_examples_internal_proto_examplepb_stream_proto_goTypes = nil + file_examples_internal_proto_examplepb_stream_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // StreamServiceClient is the client API for StreamService service. // @@ -74,10 +145,10 @@ type StreamServiceClient interface { } type streamServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { +func NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient { return &streamServiceClient{cc} } @@ -189,13 +260,13 @@ type StreamServiceServer interface { type UnimplementedStreamServiceServer struct { } -func (*UnimplementedStreamServiceServer) BulkCreate(srv StreamService_BulkCreateServer) error { +func (*UnimplementedStreamServiceServer) BulkCreate(StreamService_BulkCreateServer) error { return status.Errorf(codes.Unimplemented, "method BulkCreate not implemented") } -func (*UnimplementedStreamServiceServer) List(req *empty.Empty, srv StreamService_ListServer) error { +func (*UnimplementedStreamServiceServer) List(*empty.Empty, StreamService_ListServer) error { return status.Errorf(codes.Unimplemented, "method List not implemented") } -func (*UnimplementedStreamServiceServer) BulkEcho(srv StreamService_BulkEchoServer) error { +func (*UnimplementedStreamServiceServer) BulkEcho(StreamService_BulkEchoServer) error { return status.Errorf(codes.Unimplemented, "method BulkEcho not implemented") } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 60c4d917a2a..c3bd7f5ed04 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,4 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service @@ -13,120 +16,223 @@ package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" duration "github.com/golang/protobuf/ptypes/duration" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Id represents the message identifier. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` - Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` + Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` } -func (m *UnannotatedSimpleMessage) Reset() { *m = UnannotatedSimpleMessage{} } -func (m *UnannotatedSimpleMessage) String() string { return proto.CompactTextString(m) } -func (*UnannotatedSimpleMessage) ProtoMessage() {} -func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_ab29419944ad9f3b, []int{0} +func (x *UnannotatedSimpleMessage) Reset() { + *x = UnannotatedSimpleMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *UnannotatedSimpleMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UnannotatedSimpleMessage.Unmarshal(m, b) +func (x *UnannotatedSimpleMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *UnannotatedSimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UnannotatedSimpleMessage.Marshal(b, m, deterministic) -} -func (m *UnannotatedSimpleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_UnannotatedSimpleMessage.Merge(m, src) -} -func (m *UnannotatedSimpleMessage) XXX_Size() int { - return xxx_messageInfo_UnannotatedSimpleMessage.Size(m) -} -func (m *UnannotatedSimpleMessage) XXX_DiscardUnknown() { - xxx_messageInfo_UnannotatedSimpleMessage.DiscardUnknown(m) + +func (*UnannotatedSimpleMessage) ProtoMessage() {} + +func (x *UnannotatedSimpleMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_UnannotatedSimpleMessage proto.InternalMessageInfo +// Deprecated: Use UnannotatedSimpleMessage.ProtoReflect.Descriptor instead. +func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{0} +} -func (m *UnannotatedSimpleMessage) GetId() string { - if m != nil { - return m.Id +func (x *UnannotatedSimpleMessage) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *UnannotatedSimpleMessage) GetNum() int64 { - if m != nil { - return m.Num +func (x *UnannotatedSimpleMessage) GetNum() int64 { + if x != nil { + return x.Num } return 0 } -func (m *UnannotatedSimpleMessage) GetDuration() *duration.Duration { - if m != nil { - return m.Duration +func (x *UnannotatedSimpleMessage) GetDuration() *duration.Duration { + if x != nil { + return x.Duration } return nil } -func init() { - proto.RegisterType((*UnannotatedSimpleMessage)(nil), "grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage") +var File_examples_internal_proto_examplepb_unannotated_echo_service_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc = []byte{ + 0x0a, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x75, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x18, + 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x32, 0xd5, 0x03, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, + 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x92, 0x01, + 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/unannotated_echo_service.proto", fileDescriptor_ab29419944ad9f3b) +var ( + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData = file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData } -var fileDescriptor_ab29419944ad9f3b = []byte{ - // 280 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x92, 0x31, 0x4b, 0xfb, 0x40, - 0x18, 0xc6, 0xb9, 0xe4, 0xcf, 0x9f, 0xf6, 0x2d, 0x88, 0xdc, 0x20, 0xb1, 0x83, 0x04, 0xa7, 0x4c, - 0x6f, 0xa0, 0xe2, 0x2e, 0xa1, 0x8e, 0x2e, 0x29, 0x2e, 0x2e, 0xe5, 0x92, 0xbc, 0xa6, 0x07, 0xe9, - 0x5d, 0xb8, 0xbb, 0xa8, 0xfd, 0x12, 0x0e, 0xe2, 0x57, 0xf3, 0xfb, 0xc8, 0x35, 0x4d, 0x74, 0x11, - 0x1c, 0x1c, 0xba, 0x25, 0xc7, 0x73, 0xbf, 0xdf, 0xf3, 0xc0, 0xc1, 0x0d, 0xbd, 0x88, 0x6d, 0xdb, - 0x90, 0x4d, 0xa5, 0x72, 0x64, 0x94, 0x68, 0xd2, 0xd6, 0x68, 0xa7, 0xd3, 0xc3, 0x79, 0x5b, 0xa4, - 0x9d, 0x12, 0x4a, 0x69, 0x27, 0x1c, 0x55, 0x6b, 0x2a, 0x37, 0x7a, 0x6d, 0xc9, 0x3c, 0xc9, 0x92, - 0x70, 0x1f, 0xe4, 0x49, 0x6d, 0xda, 0x12, 0x6b, 0xe1, 0xe8, 0x59, 0xec, 0x70, 0xc0, 0xe1, 0x80, - 0xc3, 0x11, 0x34, 0xbf, 0xa8, 0xb5, 0xae, 0x1b, 0xea, 0x05, 0x45, 0xf7, 0x98, 0x56, 0x9d, 0x11, - 0x4e, 0x6a, 0xd5, 0x93, 0x2e, 0x2d, 0x44, 0xf7, 0x5f, 0xae, 0x95, 0xf4, 0xd7, 0xee, 0xc8, 0x5a, - 0x51, 0x13, 0x3f, 0x81, 0x40, 0x56, 0x11, 0x8b, 0x59, 0x32, 0xcd, 0x03, 0x59, 0xf1, 0x53, 0x08, - 0x55, 0xb7, 0x8d, 0x82, 0x98, 0x25, 0x61, 0xee, 0x3f, 0xf9, 0x35, 0x4c, 0x06, 0x5e, 0x14, 0xc6, - 0x2c, 0x99, 0x2d, 0xce, 0xb1, 0x17, 0xe2, 0x20, 0xc4, 0xe5, 0x21, 0x90, 0x8f, 0xd1, 0xc5, 0x47, - 0x08, 0x67, 0xdf, 0xac, 0xb7, 0xe5, 0x46, 0xaf, 0xfa, 0x7d, 0xfc, 0x95, 0xc1, 0x3f, 0xff, 0xcf, - 0x33, 0xfc, 0xed, 0x46, 0xfc, 0x69, 0xc0, 0xfc, 0x0f, 0x18, 0xfc, 0x8d, 0xc1, 0xc4, 0x17, 0xca, - 0x74, 0xb5, 0x3b, 0x9a, 0x52, 0xef, 0x0c, 0xc0, 0x97, 0x5a, 0x52, 0x43, 0x8e, 0x8e, 0xa5, 0x56, - 0x36, 0x7b, 0x98, 0x8e, 0xa9, 0xe2, 0xff, 0xfe, 0x05, 0x5c, 0x7d, 0x06, 0x00, 0x00, 0xff, 0xff, - 0xaa, 0x31, 0x7d, 0x8e, 0xee, 0x02, 0x00, 0x00, +var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = []interface{}{ + (*UnannotatedSimpleMessage)(nil), // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + (*duration.Duration)(nil), // 1: google.protobuf.Duration +} +var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = []int32{ + 1, // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration + 0, // 1: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 0, // 2: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 0, // 3: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 0, // 4: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 0, // 5: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 0, // 6: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 4, // [4:7] is the sub-list for method output_type + 1, // [1:4] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init() } +func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init() { + if File_examples_internal_proto_examplepb_unannotated_echo_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnannotatedSimpleMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_unannotated_echo_service_proto = out.File + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc = nil + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = nil + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. // @@ -144,10 +250,10 @@ type UnannotatedEchoServiceClient interface { } type unannotatedEchoServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoServiceClient { +func NewUnannotatedEchoServiceClient(cc grpc.ClientConnInterface) UnannotatedEchoServiceClient { return &unannotatedEchoServiceClient{cc} } @@ -195,13 +301,13 @@ type UnannotatedEchoServiceServer interface { type UnimplementedUnannotatedEchoServiceServer struct { } -func (*UnimplementedUnannotatedEchoServiceServer) Echo(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { +func (*UnimplementedUnannotatedEchoServiceServer) Echo(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") } -func (*UnimplementedUnannotatedEchoServiceServer) EchoBody(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { +func (*UnimplementedUnannotatedEchoServiceServer) EchoBody(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoBody not implemented") } -func (*UnimplementedUnannotatedEchoServiceServer) EchoDelete(ctx context.Context, req *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { +func (*UnimplementedUnannotatedEchoServiceServer) EchoDelete(context.Context, *UnannotatedSimpleMessage) (*UnannotatedSimpleMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method EchoDelete not implemented") } diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 6eac47ee393..7e8b27b1096 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,128 +1,153 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type LoginRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The entered username Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` // The entered password - Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` } -func (m *LoginRequest) Reset() { *m = LoginRequest{} } -func (m *LoginRequest) String() string { return proto.CompactTextString(m) } -func (*LoginRequest) ProtoMessage() {} -func (*LoginRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed0d8910d38fbb31, []int{0} +func (x *LoginRequest) Reset() { + *x = LoginRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *LoginRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LoginRequest.Unmarshal(m, b) -} -func (m *LoginRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LoginRequest.Marshal(b, m, deterministic) +func (x *LoginRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LoginRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_LoginRequest.Merge(m, src) -} -func (m *LoginRequest) XXX_Size() int { - return xxx_messageInfo_LoginRequest.Size(m) -} -func (m *LoginRequest) XXX_DiscardUnknown() { - xxx_messageInfo_LoginRequest.DiscardUnknown(m) + +func (*LoginRequest) ProtoMessage() {} + +func (x *LoginRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_LoginRequest proto.InternalMessageInfo +// Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead. +func (*LoginRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{0} +} -func (m *LoginRequest) GetUsername() string { - if m != nil { - return m.Username +func (x *LoginRequest) GetUsername() string { + if x != nil { + return x.Username } return "" } -func (m *LoginRequest) GetPassword() string { - if m != nil { - return m.Password +func (x *LoginRequest) GetPassword() string { + if x != nil { + return x.Password } return "" } type LoginReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` // Whether you have access or not - Access bool `protobuf:"varint,2,opt,name=access,proto3" json:"access,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Access bool `protobuf:"varint,2,opt,name=access,proto3" json:"access,omitempty"` } -func (m *LoginReply) Reset() { *m = LoginReply{} } -func (m *LoginReply) String() string { return proto.CompactTextString(m) } -func (*LoginReply) ProtoMessage() {} -func (*LoginReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ed0d8910d38fbb31, []int{1} +func (x *LoginReply) Reset() { + *x = LoginReply{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *LoginReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LoginReply.Unmarshal(m, b) -} -func (m *LoginReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LoginReply.Marshal(b, m, deterministic) +func (x *LoginReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LoginReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_LoginReply.Merge(m, src) -} -func (m *LoginReply) XXX_Size() int { - return xxx_messageInfo_LoginReply.Size(m) -} -func (m *LoginReply) XXX_DiscardUnknown() { - xxx_messageInfo_LoginReply.DiscardUnknown(m) + +func (*LoginReply) ProtoMessage() {} + +func (x *LoginReply) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_LoginReply proto.InternalMessageInfo +// Deprecated: Use LoginReply.ProtoReflect.Descriptor instead. +func (*LoginReply) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{1} +} -func (m *LoginReply) GetMessage() string { - if m != nil { - return m.Message +func (x *LoginReply) GetMessage() string { + if x != nil { + return x.Message } return "" } -func (m *LoginReply) GetAccess() bool { - if m != nil { - return m.Access +func (x *LoginReply) GetAccess() bool { + if x != nil { + return x.Access } return false } type LogoutRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The time the logout was registered Timeoflogout string `protobuf:"bytes,1,opt,name=timeoflogout,proto3" json:"timeoflogout,omitempty"` // This is the title @@ -136,145 +161,277 @@ type LogoutRequest struct { // This is an array // // It displays that using [] infront of the type - Stringarray []string `protobuf:"bytes,3,rep,name=stringarray,proto3" json:"stringarray,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Stringarray []string `protobuf:"bytes,3,rep,name=stringarray,proto3" json:"stringarray,omitempty"` } -func (m *LogoutRequest) Reset() { *m = LogoutRequest{} } -func (m *LogoutRequest) String() string { return proto.CompactTextString(m) } -func (*LogoutRequest) ProtoMessage() {} -func (*LogoutRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ed0d8910d38fbb31, []int{2} +func (x *LogoutRequest) Reset() { + *x = LogoutRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *LogoutRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogoutRequest.Unmarshal(m, b) -} -func (m *LogoutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogoutRequest.Marshal(b, m, deterministic) -} -func (m *LogoutRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogoutRequest.Merge(m, src) -} -func (m *LogoutRequest) XXX_Size() int { - return xxx_messageInfo_LogoutRequest.Size(m) +func (x *LogoutRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogoutRequest) XXX_DiscardUnknown() { - xxx_messageInfo_LogoutRequest.DiscardUnknown(m) + +func (*LogoutRequest) ProtoMessage() {} + +func (x *LogoutRequest) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_LogoutRequest proto.InternalMessageInfo +// Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead. +func (*LogoutRequest) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{2} +} -func (m *LogoutRequest) GetTimeoflogout() string { - if m != nil { - return m.Timeoflogout +func (x *LogoutRequest) GetTimeoflogout() string { + if x != nil { + return x.Timeoflogout } return "" } -func (m *LogoutRequest) GetTest() int32 { - if m != nil { - return m.Test +func (x *LogoutRequest) GetTest() int32 { + if x != nil { + return x.Test } return 0 } -func (m *LogoutRequest) GetStringarray() []string { - if m != nil { - return m.Stringarray +func (x *LogoutRequest) GetStringarray() []string { + if x != nil { + return x.Stringarray } return nil } type LogoutReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Message that tells you whether your // logout was succesful or not - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } -func (m *LogoutReply) Reset() { *m = LogoutReply{} } -func (m *LogoutReply) String() string { return proto.CompactTextString(m) } -func (*LogoutReply) ProtoMessage() {} -func (*LogoutReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ed0d8910d38fbb31, []int{3} +func (x *LogoutReply) Reset() { + *x = LogoutReply{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *LogoutReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LogoutReply.Unmarshal(m, b) +func (x *LogoutReply) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *LogoutReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LogoutReply.Marshal(b, m, deterministic) -} -func (m *LogoutReply) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogoutReply.Merge(m, src) -} -func (m *LogoutReply) XXX_Size() int { - return xxx_messageInfo_LogoutReply.Size(m) -} -func (m *LogoutReply) XXX_DiscardUnknown() { - xxx_messageInfo_LogoutReply.DiscardUnknown(m) + +func (*LogoutReply) ProtoMessage() {} + +func (x *LogoutReply) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_LogoutReply proto.InternalMessageInfo +// Deprecated: Use LogoutReply.ProtoReflect.Descriptor instead. +func (*LogoutReply) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP(), []int{3} +} -func (m *LogoutReply) GetMessage() string { - if m != nil { - return m.Message +func (x *LogoutReply) GetMessage() string { + if x != nil { + return x.Message } return "" } -func init() { - proto.RegisterType((*LoginRequest)(nil), "grpc.gateway.examples.internal.examplepb.LoginRequest") - proto.RegisterType((*LoginReply)(nil), "grpc.gateway.examples.internal.examplepb.LoginReply") - proto.RegisterType((*LogoutRequest)(nil), "grpc.gateway.examples.internal.examplepb.LogoutRequest") - proto.RegisterType((*LogoutReply)(nil), "grpc.gateway.examples.internal.examplepb.LogoutReply") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/use_go_template.proto", fileDescriptor_ed0d8910d38fbb31) -} - -var fileDescriptor_ed0d8910d38fbb31 = []byte{ - // 373 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbd, 0x8e, 0x1a, 0x31, - 0x14, 0x85, 0x35, 0x10, 0x08, 0x18, 0x52, 0xc4, 0x05, 0x19, 0x8d, 0x88, 0x84, 0xdc, 0x04, 0x51, - 0x8c, 0x95, 0x5f, 0x24, 0x8a, 0x14, 0x29, 0x52, 0x51, 0x4d, 0xba, 0x34, 0xc8, 0x4c, 0x6e, 0x2c, - 0x4b, 0x9e, 0xb1, 0x63, 0x7b, 0x20, 0xd3, 0xee, 0x2b, 0x50, 0xec, 0xdb, 0xec, 0x4b, 0xec, 0x2b, - 0xec, 0x83, 0xac, 0xc6, 0x8c, 0x59, 0x76, 0x8b, 0xd5, 0xd2, 0xcd, 0x3d, 0x57, 0xe7, 0x9b, 0xe3, - 0xa3, 0x8b, 0x96, 0xf0, 0x9f, 0x15, 0x5a, 0x82, 0xa5, 0xa2, 0x74, 0x60, 0x4a, 0x26, 0xa9, 0x36, - 0xca, 0x29, 0xda, 0xea, 0x7a, 0x4b, 0x2b, 0x0b, 0x1b, 0xae, 0x36, 0x0e, 0x0a, 0x2d, 0x99, 0x83, - 0xd4, 0xef, 0xf1, 0x9c, 0x1b, 0x9d, 0xa7, 0x9c, 0x39, 0xd8, 0xb3, 0x3a, 0x0d, 0x94, 0x34, 0x50, - 0xd2, 0x93, 0x3f, 0x99, 0x72, 0xa5, 0xb8, 0x04, 0xca, 0xb4, 0xa0, 0xac, 0x2c, 0x95, 0x63, 0x4e, - 0xa8, 0xd2, 0x1e, 0x39, 0xe4, 0x27, 0x1a, 0xaf, 0x15, 0x17, 0x65, 0x06, 0xff, 0x2a, 0xb0, 0x0e, - 0x27, 0x68, 0x50, 0xd9, 0x06, 0x51, 0x40, 0x1c, 0xcd, 0xa2, 0xf9, 0x30, 0x3b, 0xcd, 0xcd, 0x4e, - 0x33, 0x6b, 0xf7, 0xca, 0xfc, 0x89, 0x3b, 0xc7, 0x5d, 0x98, 0xc9, 0x77, 0x84, 0x5a, 0x8e, 0x96, - 0x35, 0x8e, 0xd1, 0xeb, 0x02, 0xac, 0x65, 0x3c, 0x40, 0xc2, 0x88, 0x27, 0xa8, 0xcf, 0xf2, 0x1c, - 0xac, 0xf5, 0x84, 0x41, 0xd6, 0x4e, 0x44, 0xa0, 0x37, 0x6b, 0xc5, 0x55, 0xe5, 0x42, 0x10, 0x82, - 0xc6, 0x4e, 0x14, 0xa0, 0xfe, 0x4a, 0x2f, 0xb7, 0x9c, 0x47, 0x1a, 0xc6, 0xe8, 0x95, 0x03, 0xeb, - 0x3c, 0xaa, 0x97, 0xf9, 0x6f, 0x3c, 0x43, 0x23, 0xeb, 0x8c, 0x28, 0x39, 0x33, 0x86, 0xd5, 0x71, - 0x77, 0xd6, 0x9d, 0x0f, 0xb3, 0x73, 0x89, 0x7c, 0x40, 0xa3, 0xf0, 0xab, 0x67, 0xb3, 0x7e, 0xba, - 0xe9, 0xb4, 0xe5, 0xfc, 0x02, 0xb3, 0x13, 0x39, 0xe0, 0x43, 0x84, 0x7a, 0x5e, 0xc0, 0xdf, 0xd2, - 0x97, 0xf6, 0x9f, 0x9e, 0xd7, 0x9b, 0x7c, 0xb9, 0xd8, 0xa7, 0x65, 0x4d, 0xa6, 0x57, 0xb7, 0x77, - 0x87, 0xce, 0x84, 0xbc, 0xa5, 0xbb, 0x8f, 0xe1, 0x32, 0xa8, 0x6c, 0xf6, 0xab, 0x68, 0x81, 0xaf, - 0x23, 0xd4, 0x3f, 0x3e, 0x08, 0x2f, 0x2f, 0xc2, 0x3f, 0xb4, 0x9d, 0x7c, 0xbd, 0xdc, 0xd8, 0x04, - 0x7b, 0xef, 0x83, 0xbd, 0x23, 0xf8, 0x49, 0x30, 0x55, 0xb9, 0x55, 0xb4, 0xf8, 0x31, 0xfa, 0x3d, - 0x3c, 0xf9, 0xb6, 0x7d, 0x7f, 0x70, 0x9f, 0xef, 0x03, 0x00, 0x00, 0xff, 0xff, 0x2d, 0xc0, 0x42, - 0xdb, 0xf3, 0x02, 0x00, 0x00, +var File_examples_internal_proto_examplepb_use_go_template_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = []byte{ + 0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x75, 0x73, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x46, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x69, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, + 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, + 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xbe, 0x02, + 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, + 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, + 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x0b, + 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_use_go_template_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData = file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_use_go_template_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_use_go_template_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_examples_internal_proto_examplepb_use_go_template_proto_goTypes = []interface{}{ + (*LoginRequest)(nil), // 0: grpc.gateway.examples.internal.examplepb.LoginRequest + (*LoginReply)(nil), // 1: grpc.gateway.examples.internal.examplepb.LoginReply + (*LogoutRequest)(nil), // 2: grpc.gateway.examples.internal.examplepb.LogoutRequest + (*LogoutReply)(nil), // 3: grpc.gateway.examples.internal.examplepb.LogoutReply +} +var file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.examples.internal.examplepb.LoginService.Login:input_type -> grpc.gateway.examples.internal.examplepb.LoginRequest + 2, // 1: grpc.gateway.examples.internal.examplepb.LoginService.Logout:input_type -> grpc.gateway.examples.internal.examplepb.LogoutRequest + 1, // 2: grpc.gateway.examples.internal.examplepb.LoginService.Login:output_type -> grpc.gateway.examples.internal.examplepb.LoginReply + 3, // 3: grpc.gateway.examples.internal.examplepb.LoginService.Logout:output_type -> grpc.gateway.examples.internal.examplepb.LogoutReply + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_use_go_template_proto_init() } +func file_examples_internal_proto_examplepb_use_go_template_proto_init() { + if File_examples_internal_proto_examplepb_use_go_template_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogoutRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogoutReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_use_go_template_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_use_go_template_proto = out.File + file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = nil + file_examples_internal_proto_examplepb_use_go_template_proto_goTypes = nil + file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // LoginServiceClient is the client API for LoginService service. // @@ -313,10 +470,10 @@ type LoginServiceClient interface { } type loginServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewLoginServiceClient(cc *grpc.ClientConn) LoginServiceClient { +func NewLoginServiceClient(cc grpc.ClientConnInterface) LoginServiceClient { return &loginServiceClient{cc} } @@ -376,10 +533,10 @@ type LoginServiceServer interface { type UnimplementedLoginServiceServer struct { } -func (*UnimplementedLoginServiceServer) Login(ctx context.Context, req *LoginRequest) (*LoginReply, error) { +func (*UnimplementedLoginServiceServer) Login(context.Context, *LoginRequest) (*LoginReply, error) { return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") } -func (*UnimplementedLoginServiceServer) Logout(ctx context.Context, req *LogoutRequest) (*LogoutReply, error) { +func (*UnimplementedLoginServiceServer) Logout(context.Context, *LogoutRequest) (*LogoutReply, error) { return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") } diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index bdba354be83..18c05592dc7 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,11 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" wrappers "github.com/golang/protobuf/ptypes/wrappers" @@ -13,179 +15,375 @@ import ( grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type Wrappers struct { - StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Wrappers) Reset() { *m = Wrappers{} } -func (m *Wrappers) String() string { return proto.CompactTextString(m) } -func (*Wrappers) ProtoMessage() {} -func (*Wrappers) Descriptor() ([]byte, []int) { - return fileDescriptor_70304970d74748a4, []int{0} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Wrappers) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Wrappers.Unmarshal(m, b) + StringValue *wrappers.StringValue `protobuf:"bytes,1,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + Int32Value *wrappers.Int32Value `protobuf:"bytes,2,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Int64Value *wrappers.Int64Value `protobuf:"bytes,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + FloatValue *wrappers.FloatValue `protobuf:"bytes,4,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + BoolValue *wrappers.BoolValue `protobuf:"bytes,6,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + Uint32Value *wrappers.UInt32Value `protobuf:"bytes,7,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + Uint64Value *wrappers.UInt64Value `protobuf:"bytes,8,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + BytesValue *wrappers.BytesValue `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` } -func (m *Wrappers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Wrappers.Marshal(b, m, deterministic) -} -func (m *Wrappers) XXX_Merge(src proto.Message) { - xxx_messageInfo_Wrappers.Merge(m, src) + +func (x *Wrappers) Reset() { + *x = Wrappers{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_wrappers_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Wrappers) XXX_Size() int { - return xxx_messageInfo_Wrappers.Size(m) + +func (x *Wrappers) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Wrappers) XXX_DiscardUnknown() { - xxx_messageInfo_Wrappers.DiscardUnknown(m) + +func (*Wrappers) ProtoMessage() {} + +func (x *Wrappers) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_wrappers_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Wrappers proto.InternalMessageInfo +// Deprecated: Use Wrappers.ProtoReflect.Descriptor instead. +func (*Wrappers) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP(), []int{0} +} -func (m *Wrappers) GetStringValue() *wrappers.StringValue { - if m != nil { - return m.StringValue +func (x *Wrappers) GetStringValue() *wrappers.StringValue { + if x != nil { + return x.StringValue } return nil } -func (m *Wrappers) GetInt32Value() *wrappers.Int32Value { - if m != nil { - return m.Int32Value +func (x *Wrappers) GetInt32Value() *wrappers.Int32Value { + if x != nil { + return x.Int32Value } return nil } -func (m *Wrappers) GetInt64Value() *wrappers.Int64Value { - if m != nil { - return m.Int64Value +func (x *Wrappers) GetInt64Value() *wrappers.Int64Value { + if x != nil { + return x.Int64Value } return nil } -func (m *Wrappers) GetFloatValue() *wrappers.FloatValue { - if m != nil { - return m.FloatValue +func (x *Wrappers) GetFloatValue() *wrappers.FloatValue { + if x != nil { + return x.FloatValue } return nil } -func (m *Wrappers) GetDoubleValue() *wrappers.DoubleValue { - if m != nil { - return m.DoubleValue +func (x *Wrappers) GetDoubleValue() *wrappers.DoubleValue { + if x != nil { + return x.DoubleValue } return nil } -func (m *Wrappers) GetBoolValue() *wrappers.BoolValue { - if m != nil { - return m.BoolValue +func (x *Wrappers) GetBoolValue() *wrappers.BoolValue { + if x != nil { + return x.BoolValue } return nil } -func (m *Wrappers) GetUint32Value() *wrappers.UInt32Value { - if m != nil { - return m.Uint32Value +func (x *Wrappers) GetUint32Value() *wrappers.UInt32Value { + if x != nil { + return x.Uint32Value } return nil } -func (m *Wrappers) GetUint64Value() *wrappers.UInt64Value { - if m != nil { - return m.Uint64Value +func (x *Wrappers) GetUint64Value() *wrappers.UInt64Value { + if x != nil { + return x.Uint64Value } return nil } -func (m *Wrappers) GetBytesValue() *wrappers.BytesValue { - if m != nil { - return m.BytesValue +func (x *Wrappers) GetBytesValue() *wrappers.BytesValue { + if x != nil { + return x.BytesValue } return nil } -func init() { - proto.RegisterType((*Wrappers)(nil), "grpc.gateway.examples.internal.examplepb.Wrappers") -} - -func init() { - proto.RegisterFile("examples/internal/proto/examplepb/wrappers.proto", fileDescriptor_70304970d74748a4) -} - -var fileDescriptor_70304970d74748a4 = []byte{ - // 587 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0xdd, 0x6e, 0xd3, 0x30, - 0x14, 0xc7, 0xd5, 0x31, 0xca, 0xea, 0x0c, 0xc6, 0x0c, 0x82, 0xcd, 0x9b, 0x00, 0xe5, 0x6a, 0xda, - 0x85, 0x03, 0x5d, 0x55, 0x89, 0x09, 0x09, 0xa9, 0x7c, 0x48, 0xdc, 0x32, 0x8d, 0x49, 0xdc, 0x20, - 0x67, 0x73, 0xa3, 0xa0, 0x2c, 0x8e, 0x12, 0xa7, 0xa3, 0xb7, 0xbc, 0x01, 0xe2, 0x4d, 0x78, 0x03, - 0x9e, 0x81, 0x57, 0xe0, 0x41, 0x90, 0xbf, 0xf2, 0xd1, 0x2c, 0x47, 0x68, 0x77, 0x8e, 0xff, 0xe7, - 0x77, 0xfe, 0xf5, 0xf1, 0x39, 0x2e, 0x7a, 0xce, 0xbf, 0xb1, 0xcb, 0x2c, 0xe1, 0x45, 0x10, 0xa7, - 0x92, 0xe7, 0x29, 0x4b, 0x82, 0x2c, 0x17, 0x52, 0x04, 0x76, 0x3f, 0x0b, 0x83, 0xab, 0x9c, 0x65, - 0x19, 0xcf, 0x0b, 0xaa, 0x05, 0x7c, 0x10, 0xe5, 0xd9, 0x39, 0x8d, 0x98, 0xe4, 0x57, 0x6c, 0x49, - 0x1d, 0x4e, 0x1d, 0x4e, 0x2b, 0x90, 0xec, 0x47, 0x42, 0x44, 0x09, 0x0f, 0x58, 0x16, 0x07, 0x2c, - 0x4d, 0x85, 0x64, 0x32, 0x16, 0xa9, 0xcd, 0x43, 0x9e, 0x58, 0x55, 0x7f, 0x85, 0xe5, 0x7c, 0xc5, - 0x87, 0xec, 0xad, 0xea, 0xfc, 0x32, 0x93, 0x4b, 0x23, 0xfa, 0xbf, 0xd7, 0xd1, 0xc6, 0x99, 0x8d, - 0xc7, 0xaf, 0xd1, 0x66, 0x21, 0xf3, 0x38, 0x8d, 0xbe, 0x2c, 0x58, 0x52, 0xf2, 0x9d, 0xc1, 0xb3, - 0xc1, 0x81, 0x37, 0xde, 0xa7, 0x26, 0x01, 0x75, 0x09, 0xe8, 0x89, 0x0e, 0xfa, 0xa4, 0x62, 0x3e, - 0x7a, 0x45, 0xfd, 0x81, 0x5f, 0x21, 0x2f, 0x4e, 0xe5, 0xd1, 0xd8, 0xf2, 0x6b, 0x9a, 0xdf, 0xeb, - 0xf0, 0x1f, 0x54, 0x8c, 0xc1, 0x51, 0x5c, 0xad, 0x2d, 0x3d, 0x9d, 0x58, 0xfa, 0x56, 0x3f, 0x3d, - 0x9d, 0xd4, 0xb4, 0x5d, 0x2b, 0x7a, 0x9e, 0x08, 0x26, 0x2d, 0xbd, 0xde, 0x43, 0xbf, 0x57, 0x31, - 0x96, 0x9e, 0x57, 0x6b, 0x75, 0xf4, 0x0b, 0x51, 0x86, 0x09, 0xb7, 0xf8, 0xed, 0x9e, 0xa3, 0xbf, - 0xd5, 0x41, 0xf6, 0xe8, 0x17, 0xf5, 0x07, 0x7e, 0x89, 0x50, 0x28, 0x44, 0x62, 0xf1, 0xa1, 0xc6, - 0x49, 0x07, 0x9f, 0x09, 0x91, 0x18, 0x78, 0x14, 0xba, 0xa5, 0xf2, 0x2e, 0x9b, 0x65, 0xbb, 0xd3, - 0xe3, 0x7d, 0xda, 0xa8, 0x9b, 0x57, 0x36, 0x0a, 0x67, 0x13, 0x54, 0x95, 0xdb, 0x00, 0x12, 0xb8, - 0xd2, 0x79, 0x65, 0xbb, 0x76, 0xe1, 0x52, 0xf2, 0xc2, 0xf2, 0xa3, 0x9e, 0xda, 0xcd, 0x54, 0x8c, - 0xad, 0x5d, 0x58, 0xad, 0xc7, 0xbf, 0x46, 0x68, 0xcb, 0xf5, 0xd0, 0x09, 0xcf, 0x17, 0xf1, 0x39, - 0xc7, 0x3f, 0x06, 0x68, 0xf8, 0x26, 0xe7, 0x4c, 0x72, 0x3c, 0xa6, 0xff, 0xdb, 0xe8, 0xd4, 0x65, - 0x21, 0x37, 0x60, 0xfc, 0xa7, 0xdf, 0xff, 0xfc, 0xfd, 0xb9, 0xb6, 0xeb, 0x3f, 0x0c, 0x16, 0x2f, - 0xdc, 0xd4, 0x55, 0xb3, 0x70, 0x3c, 0x38, 0xc4, 0x5f, 0xd1, 0xb6, 0xf9, 0x49, 0x8d, 0xfe, 0xc5, - 0x60, 0x77, 0x13, 0x50, 0xf5, 0x77, 0xb5, 0xe3, 0x03, 0xff, 0x9e, 0x72, 0x94, 0xbc, 0x90, 0x46, - 0x54, 0x5e, 0x73, 0x74, 0xdf, 0x78, 0xd5, 0x77, 0x86, 0xa1, 0x41, 0x20, 0x90, 0xe8, 0xef, 0x68, - 0x23, 0xec, 0xdf, 0x75, 0x46, 0x5a, 0x5b, 0xf5, 0x71, 0xb7, 0x09, 0x8d, 0x0c, 0x81, 0xc4, 0x6b, - 0x7d, 0xa6, 0x93, 0x96, 0x4f, 0x3d, 0x3f, 0x18, 0x1a, 0x2e, 0x02, 0x89, 0x5d, 0x1f, 0xad, 0xb5, - 0xee, 0xa8, 0x31, 0x68, 0x18, 0x1c, 0x43, 0x02, 0xaa, 0xdd, 0x3b, 0x32, 0xa2, 0xf2, 0x0a, 0xd1, - 0x96, 0xf1, 0xaa, 0xa6, 0x12, 0x03, 0x13, 0x4b, 0x00, 0xcd, 0x7f, 0xac, 0x5d, 0xb6, 0xfd, 0x4d, - 0xe7, 0xa2, 0xa4, 0xd6, 0x79, 0x1a, 0xc3, 0x8b, 0xc1, 0xd1, 0x26, 0xa0, 0xda, 0x3d, 0xcf, 0x69, - 0xec, 0x7a, 0xa1, 0xe5, 0xe5, 0x9a, 0x01, 0x7c, 0x05, 0x08, 0xa8, 0x5e, 0xef, 0xb5, 0xd2, 0x0f, - 0xf5, 0x9b, 0x80, 0xa1, 0x07, 0x83, 0x40, 0x62, 0xb7, 0x1f, 0xb4, 0xa6, 0x7c, 0xce, 0x90, 0x67, - 0x7c, 0xde, 0xa9, 0x3f, 0x2d, 0xfc, 0xa8, 0x93, 0x45, 0xef, 0x93, 0x9e, 0xfd, 0x6e, 0x62, 0xbd, - 0x7d, 0x3c, 0x38, 0x9c, 0x79, 0x9f, 0x47, 0xd5, 0x1b, 0x12, 0x0e, 0x35, 0x76, 0xf4, 0x2f, 0x00, - 0x00, 0xff, 0xff, 0xfe, 0xb0, 0x38, 0x00, 0xc5, 0x07, 0x00, 0x00, +var File_examples_internal_proto_examplepb_wrappers_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04, 0x0a, 0x08, 0x57, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3f, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, + 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xb2, 0x09, 0x0a, 0x0f, + 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x91, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x1a, 0x32, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, + 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, + 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, + 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, 0x2a, 0x12, + 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, + 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x17, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, + 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, 0x2a, 0x12, + 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x3a, 0x01, 0x2a, + 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_examplepb_wrappers_proto_rawDescOnce sync.Once + file_examples_internal_proto_examplepb_wrappers_proto_rawDescData = file_examples_internal_proto_examplepb_wrappers_proto_rawDesc +) + +func file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP() []byte { + file_examples_internal_proto_examplepb_wrappers_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_examplepb_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_examplepb_wrappers_proto_rawDescData) + }) + return file_examples_internal_proto_examplepb_wrappers_proto_rawDescData +} + +var file_examples_internal_proto_examplepb_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_examplepb_wrappers_proto_goTypes = []interface{}{ + (*Wrappers)(nil), // 0: grpc.gateway.examples.internal.examplepb.Wrappers + (*wrappers.StringValue)(nil), // 1: google.protobuf.StringValue + (*wrappers.Int32Value)(nil), // 2: google.protobuf.Int32Value + (*wrappers.Int64Value)(nil), // 3: google.protobuf.Int64Value + (*wrappers.FloatValue)(nil), // 4: google.protobuf.FloatValue + (*wrappers.DoubleValue)(nil), // 5: google.protobuf.DoubleValue + (*wrappers.BoolValue)(nil), // 6: google.protobuf.BoolValue + (*wrappers.UInt32Value)(nil), // 7: google.protobuf.UInt32Value + (*wrappers.UInt64Value)(nil), // 8: google.protobuf.UInt64Value + (*wrappers.BytesValue)(nil), // 9: google.protobuf.BytesValue + (*empty.Empty)(nil), // 10: google.protobuf.Empty +} +var file_examples_internal_proto_examplepb_wrappers_proto_depIdxs = []int32{ + 1, // 0: grpc.gateway.examples.internal.examplepb.Wrappers.string_value:type_name -> google.protobuf.StringValue + 2, // 1: grpc.gateway.examples.internal.examplepb.Wrappers.int32_value:type_name -> google.protobuf.Int32Value + 3, // 2: grpc.gateway.examples.internal.examplepb.Wrappers.int64_value:type_name -> google.protobuf.Int64Value + 4, // 3: grpc.gateway.examples.internal.examplepb.Wrappers.float_value:type_name -> google.protobuf.FloatValue + 5, // 4: grpc.gateway.examples.internal.examplepb.Wrappers.double_value:type_name -> google.protobuf.DoubleValue + 6, // 5: grpc.gateway.examples.internal.examplepb.Wrappers.bool_value:type_name -> google.protobuf.BoolValue + 7, // 6: grpc.gateway.examples.internal.examplepb.Wrappers.uint32_value:type_name -> google.protobuf.UInt32Value + 8, // 7: grpc.gateway.examples.internal.examplepb.Wrappers.uint64_value:type_name -> google.protobuf.UInt64Value + 9, // 8: grpc.gateway.examples.internal.examplepb.Wrappers.bytes_value:type_name -> google.protobuf.BytesValue + 0, // 9: grpc.gateway.examples.internal.examplepb.WrappersService.Create:input_type -> grpc.gateway.examples.internal.examplepb.Wrappers + 1, // 10: grpc.gateway.examples.internal.examplepb.WrappersService.CreateStringValue:input_type -> google.protobuf.StringValue + 2, // 11: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt32Value:input_type -> google.protobuf.Int32Value + 3, // 12: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt64Value:input_type -> google.protobuf.Int64Value + 4, // 13: grpc.gateway.examples.internal.examplepb.WrappersService.CreateFloatValue:input_type -> google.protobuf.FloatValue + 5, // 14: grpc.gateway.examples.internal.examplepb.WrappersService.CreateDoubleValue:input_type -> google.protobuf.DoubleValue + 6, // 15: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBoolValue:input_type -> google.protobuf.BoolValue + 7, // 16: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt32Value:input_type -> google.protobuf.UInt32Value + 8, // 17: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt64Value:input_type -> google.protobuf.UInt64Value + 9, // 18: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBytesValue:input_type -> google.protobuf.BytesValue + 10, // 19: grpc.gateway.examples.internal.examplepb.WrappersService.CreateEmpty:input_type -> google.protobuf.Empty + 0, // 20: grpc.gateway.examples.internal.examplepb.WrappersService.Create:output_type -> grpc.gateway.examples.internal.examplepb.Wrappers + 1, // 21: grpc.gateway.examples.internal.examplepb.WrappersService.CreateStringValue:output_type -> google.protobuf.StringValue + 2, // 22: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt32Value:output_type -> google.protobuf.Int32Value + 3, // 23: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt64Value:output_type -> google.protobuf.Int64Value + 4, // 24: grpc.gateway.examples.internal.examplepb.WrappersService.CreateFloatValue:output_type -> google.protobuf.FloatValue + 5, // 25: grpc.gateway.examples.internal.examplepb.WrappersService.CreateDoubleValue:output_type -> google.protobuf.DoubleValue + 6, // 26: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBoolValue:output_type -> google.protobuf.BoolValue + 7, // 27: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt32Value:output_type -> google.protobuf.UInt32Value + 8, // 28: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt64Value:output_type -> google.protobuf.UInt64Value + 9, // 29: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBytesValue:output_type -> google.protobuf.BytesValue + 10, // 30: grpc.gateway.examples.internal.examplepb.WrappersService.CreateEmpty:output_type -> google.protobuf.Empty + 20, // [20:31] is the sub-list for method output_type + 9, // [9:20] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_examplepb_wrappers_proto_init() } +func file_examples_internal_proto_examplepb_wrappers_proto_init() { + if File_examples_internal_proto_examplepb_wrappers_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_examplepb_wrappers_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Wrappers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_examplepb_wrappers_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_examples_internal_proto_examplepb_wrappers_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_examplepb_wrappers_proto_depIdxs, + MessageInfos: file_examples_internal_proto_examplepb_wrappers_proto_msgTypes, + }.Build() + File_examples_internal_proto_examplepb_wrappers_proto = out.File + file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = nil + file_examples_internal_proto_examplepb_wrappers_proto_goTypes = nil + file_examples_internal_proto_examplepb_wrappers_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // WrappersServiceClient is the client API for WrappersService service. // @@ -205,10 +403,10 @@ type WrappersServiceClient interface { } type wrappersServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { +func NewWrappersServiceClient(cc grpc.ClientConnInterface) WrappersServiceClient { return &wrappersServiceClient{cc} } @@ -330,37 +528,37 @@ type WrappersServiceServer interface { type UnimplementedWrappersServiceServer struct { } -func (*UnimplementedWrappersServiceServer) Create(ctx context.Context, req *Wrappers) (*Wrappers, error) { +func (*UnimplementedWrappersServiceServer) Create(context.Context, *Wrappers) (*Wrappers, error) { return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") } -func (*UnimplementedWrappersServiceServer) CreateStringValue(ctx context.Context, req *wrappers.StringValue) (*wrappers.StringValue, error) { +func (*UnimplementedWrappersServiceServer) CreateStringValue(context.Context, *wrappers.StringValue) (*wrappers.StringValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateStringValue not implemented") } -func (*UnimplementedWrappersServiceServer) CreateInt32Value(ctx context.Context, req *wrappers.Int32Value) (*wrappers.Int32Value, error) { +func (*UnimplementedWrappersServiceServer) CreateInt32Value(context.Context, *wrappers.Int32Value) (*wrappers.Int32Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateInt32Value not implemented") } -func (*UnimplementedWrappersServiceServer) CreateInt64Value(ctx context.Context, req *wrappers.Int64Value) (*wrappers.Int64Value, error) { +func (*UnimplementedWrappersServiceServer) CreateInt64Value(context.Context, *wrappers.Int64Value) (*wrappers.Int64Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateInt64Value not implemented") } -func (*UnimplementedWrappersServiceServer) CreateFloatValue(ctx context.Context, req *wrappers.FloatValue) (*wrappers.FloatValue, error) { +func (*UnimplementedWrappersServiceServer) CreateFloatValue(context.Context, *wrappers.FloatValue) (*wrappers.FloatValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFloatValue not implemented") } -func (*UnimplementedWrappersServiceServer) CreateDoubleValue(ctx context.Context, req *wrappers.DoubleValue) (*wrappers.DoubleValue, error) { +func (*UnimplementedWrappersServiceServer) CreateDoubleValue(context.Context, *wrappers.DoubleValue) (*wrappers.DoubleValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateDoubleValue not implemented") } -func (*UnimplementedWrappersServiceServer) CreateBoolValue(ctx context.Context, req *wrappers.BoolValue) (*wrappers.BoolValue, error) { +func (*UnimplementedWrappersServiceServer) CreateBoolValue(context.Context, *wrappers.BoolValue) (*wrappers.BoolValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBoolValue not implemented") } -func (*UnimplementedWrappersServiceServer) CreateUInt32Value(ctx context.Context, req *wrappers.UInt32Value) (*wrappers.UInt32Value, error) { +func (*UnimplementedWrappersServiceServer) CreateUInt32Value(context.Context, *wrappers.UInt32Value) (*wrappers.UInt32Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateUInt32Value not implemented") } -func (*UnimplementedWrappersServiceServer) CreateUInt64Value(ctx context.Context, req *wrappers.UInt64Value) (*wrappers.UInt64Value, error) { +func (*UnimplementedWrappersServiceServer) CreateUInt64Value(context.Context, *wrappers.UInt64Value) (*wrappers.UInt64Value, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateUInt64Value not implemented") } -func (*UnimplementedWrappersServiceServer) CreateBytesValue(ctx context.Context, req *wrappers.BytesValue) (*wrappers.BytesValue, error) { +func (*UnimplementedWrappersServiceServer) CreateBytesValue(context.Context, *wrappers.BytesValue) (*wrappers.BytesValue, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateBytesValue not implemented") } -func (*UnimplementedWrappersServiceServer) CreateEmpty(ctx context.Context, req *empty.Empty) (*empty.Empty, error) { +func (*UnimplementedWrappersServiceServer) CreateEmpty(context.Context, *empty.Empty) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateEmpty not implemented") } diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 37c58a89ef6..1078f51ccab 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,24 +1,29 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type PathEnum int32 @@ -27,22 +32,43 @@ const ( PathEnum_DEF PathEnum = 1 ) -var PathEnum_name = map[int32]string{ - 0: "ABC", - 1: "DEF", -} +// Enum value maps for PathEnum. +var ( + PathEnum_name = map[int32]string{ + 0: "ABC", + 1: "DEF", + } + PathEnum_value = map[string]int32{ + "ABC": 0, + "DEF": 1, + } +) -var PathEnum_value = map[string]int32{ - "ABC": 0, - "DEF": 1, +func (x PathEnum) Enum() *PathEnum { + p := new(PathEnum) + *p = x + return p } func (x PathEnum) String() string { - return proto.EnumName(PathEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PathEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[0].Descriptor() } +func (PathEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[0] +} + +func (x PathEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PathEnum.Descriptor instead. func (PathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_83f42520181de088, []int{0} + return file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0} } type MessagePathEnum_NestedPathEnum int32 @@ -52,77 +78,168 @@ const ( MessagePathEnum_JKL MessagePathEnum_NestedPathEnum = 1 ) -var MessagePathEnum_NestedPathEnum_name = map[int32]string{ - 0: "GHI", - 1: "JKL", -} +// Enum value maps for MessagePathEnum_NestedPathEnum. +var ( + MessagePathEnum_NestedPathEnum_name = map[int32]string{ + 0: "GHI", + 1: "JKL", + } + MessagePathEnum_NestedPathEnum_value = map[string]int32{ + "GHI": 0, + "JKL": 1, + } +) -var MessagePathEnum_NestedPathEnum_value = map[string]int32{ - "GHI": 0, - "JKL": 1, +func (x MessagePathEnum_NestedPathEnum) Enum() *MessagePathEnum_NestedPathEnum { + p := new(MessagePathEnum_NestedPathEnum) + *p = x + return p } func (x MessagePathEnum_NestedPathEnum) String() string { - return proto.EnumName(MessagePathEnum_NestedPathEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_83f42520181de088, []int{0, 0} +func (MessagePathEnum_NestedPathEnum) Descriptor() protoreflect.EnumDescriptor { + return file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1].Descriptor() } -type MessagePathEnum struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (MessagePathEnum_NestedPathEnum) Type() protoreflect.EnumType { + return &file_examples_internal_proto_pathenum_path_enum_proto_enumTypes[1] } -func (m *MessagePathEnum) Reset() { *m = MessagePathEnum{} } -func (m *MessagePathEnum) String() string { return proto.CompactTextString(m) } -func (*MessagePathEnum) ProtoMessage() {} -func (*MessagePathEnum) Descriptor() ([]byte, []int) { - return fileDescriptor_83f42520181de088, []int{0} +func (x MessagePathEnum_NestedPathEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *MessagePathEnum) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MessagePathEnum.Unmarshal(m, b) -} -func (m *MessagePathEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MessagePathEnum.Marshal(b, m, deterministic) +// Deprecated: Use MessagePathEnum_NestedPathEnum.Descriptor instead. +func (MessagePathEnum_NestedPathEnum) EnumDescriptor() ([]byte, []int) { + return file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0, 0} } -func (m *MessagePathEnum) XXX_Merge(src proto.Message) { - xxx_messageInfo_MessagePathEnum.Merge(m, src) + +type MessagePathEnum struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (m *MessagePathEnum) XXX_Size() int { - return xxx_messageInfo_MessagePathEnum.Size(m) + +func (x *MessagePathEnum) Reset() { + *x = MessagePathEnum{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *MessagePathEnum) XXX_DiscardUnknown() { - xxx_messageInfo_MessagePathEnum.DiscardUnknown(m) + +func (x *MessagePathEnum) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_MessagePathEnum proto.InternalMessageInfo +func (*MessagePathEnum) ProtoMessage() {} -func init() { - proto.RegisterEnum("grpc.gateway.examples.internal.pathenum.PathEnum", PathEnum_name, PathEnum_value) - proto.RegisterEnum("grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum", MessagePathEnum_NestedPathEnum_name, MessagePathEnum_NestedPathEnum_value) - proto.RegisterType((*MessagePathEnum)(nil), "grpc.gateway.examples.internal.pathenum.MessagePathEnum") +func (x *MessagePathEnum) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func init() { - proto.RegisterFile("examples/internal/proto/pathenum/path_enum.proto", fileDescriptor_83f42520181de088) -} +// Deprecated: Use MessagePathEnum.ProtoReflect.Descriptor instead. +func (*MessagePathEnum) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP(), []int{0} +} + +var File_examples_internal_proto_pathenum_path_enum_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_pathenum_path_enum_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, + 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x35, 0x0a, 0x0f, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0x22, + 0x0a, 0x0e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x07, 0x0a, 0x03, 0x47, 0x48, 0x49, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4a, 0x4b, 0x4c, + 0x10, 0x01, 0x2a, 0x1c, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, + 0x0a, 0x03, 0x41, 0x42, 0x43, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x46, 0x10, 0x01, + 0x42, 0x4c, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_pathenum_path_enum_proto_rawDescOnce sync.Once + file_examples_internal_proto_pathenum_path_enum_proto_rawDescData = file_examples_internal_proto_pathenum_path_enum_proto_rawDesc +) -var fileDescriptor_83f42520181de088 = []byte{ - // 190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x48, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x48, 0x2c, 0xc9, 0x48, 0xcd, 0x2b, 0xcd, 0x05, 0x33, 0xe2, 0x41, - 0x2c, 0x3d, 0xb0, 0x84, 0x90, 0x7a, 0x7a, 0x51, 0x41, 0xb2, 0x5e, 0x7a, 0x62, 0x49, 0x6a, 0x79, - 0x62, 0xa5, 0x1e, 0x4c, 0xbb, 0x1e, 0x4c, 0xbb, 0x1e, 0x4c, 0xa3, 0x92, 0x29, 0x17, 0xbf, 0x6f, - 0x6a, 0x71, 0x71, 0x62, 0x7a, 0x6a, 0x40, 0x62, 0x49, 0x86, 0x2b, 0x48, 0x48, 0x89, 0x8b, 0xcf, - 0x2f, 0xb5, 0xb8, 0x24, 0x35, 0x05, 0x26, 0x22, 0xc4, 0xce, 0xc5, 0xec, 0xee, 0xe1, 0x29, 0xc0, - 0x00, 0x62, 0x78, 0x79, 0xfb, 0x08, 0x30, 0x6a, 0xc9, 0x70, 0x71, 0x20, 0xcb, 0x3a, 0x3a, 0x39, - 0x43, 0x64, 0x5d, 0x5c, 0xdd, 0x04, 0x18, 0x9d, 0x7c, 0xa2, 0xbc, 0xd2, 0x33, 0x4b, 0x32, 0x4a, - 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x4e, 0xd1, 0x4d, 0x4d, 0xce, 0x2f, 0xae, 0x2c, 0x2e, - 0x49, 0x85, 0x72, 0xa1, 0x2e, 0xd3, 0x2f, 0x33, 0xd2, 0x27, 0xe4, 0xb7, 0x24, 0x36, 0x30, 0xdf, - 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x04, 0x17, 0xf6, 0x35, 0x06, 0x01, 0x00, 0x00, +func file_examples_internal_proto_pathenum_path_enum_proto_rawDescGZIP() []byte { + file_examples_internal_proto_pathenum_path_enum_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_pathenum_path_enum_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_pathenum_path_enum_proto_rawDescData) + }) + return file_examples_internal_proto_pathenum_path_enum_proto_rawDescData +} + +var file_examples_internal_proto_pathenum_path_enum_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_examples_internal_proto_pathenum_path_enum_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_pathenum_path_enum_proto_goTypes = []interface{}{ + (PathEnum)(0), // 0: grpc.gateway.examples.internal.pathenum.PathEnum + (MessagePathEnum_NestedPathEnum)(0), // 1: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + (*MessagePathEnum)(nil), // 2: grpc.gateway.examples.internal.pathenum.MessagePathEnum +} +var file_examples_internal_proto_pathenum_path_enum_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_examples_internal_proto_pathenum_path_enum_proto_init() } +func file_examples_internal_proto_pathenum_path_enum_proto_init() { + if File_examples_internal_proto_pathenum_path_enum_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_pathenum_path_enum_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MessagePathEnum); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_pathenum_path_enum_proto_rawDesc, + NumEnums: 2, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_examples_internal_proto_pathenum_path_enum_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_pathenum_path_enum_proto_depIdxs, + EnumInfos: file_examples_internal_proto_pathenum_path_enum_proto_enumTypes, + MessageInfos: file_examples_internal_proto_pathenum_path_enum_proto_msgTypes, + }.Build() + File_examples_internal_proto_pathenum_path_enum_proto = out.File + file_examples_internal_proto_pathenum_path_enum_proto_rawDesc = nil + file_examples_internal_proto_pathenum_path_enum_proto_goTypes = nil + file_examples_internal_proto_pathenum_path_enum_proto_depIdxs = nil } diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index ffca991b93d..eeabe24874e 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,80 +1,149 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/sub/message.proto package sub import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type StringMessage struct { - Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *StringMessage) Reset() { *m = StringMessage{} } -func (m *StringMessage) String() string { return proto.CompactTextString(m) } -func (*StringMessage) ProtoMessage() {} -func (*StringMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_897f299135d10a90, []int{0} + Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` } -func (m *StringMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StringMessage.Unmarshal(m, b) -} -func (m *StringMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StringMessage.Marshal(b, m, deterministic) -} -func (m *StringMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringMessage.Merge(m, src) +func (x *StringMessage) Reset() { + *x = StringMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_sub_message_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *StringMessage) XXX_Size() int { - return xxx_messageInfo_StringMessage.Size(m) + +func (x *StringMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StringMessage) XXX_DiscardUnknown() { - xxx_messageInfo_StringMessage.DiscardUnknown(m) + +func (*StringMessage) ProtoMessage() {} + +func (x *StringMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_sub_message_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_StringMessage proto.InternalMessageInfo +// Deprecated: Use StringMessage.ProtoReflect.Descriptor instead. +func (*StringMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_sub_message_proto_rawDescGZIP(), []int{0} +} -func (m *StringMessage) GetValue() string { - if m != nil && m.Value != nil { - return *m.Value +func (x *StringMessage) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value } return "" } -func init() { - proto.RegisterType((*StringMessage)(nil), "grpc.gateway.examples.internal.sub.StringMessage") +var File_examples_internal_proto_sub_message_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_sub_message_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x22, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x22, + 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x05, 0x5a, 0x03, 0x73, 0x75, 0x62, +} + +var ( + file_examples_internal_proto_sub_message_proto_rawDescOnce sync.Once + file_examples_internal_proto_sub_message_proto_rawDescData = file_examples_internal_proto_sub_message_proto_rawDesc +) + +func file_examples_internal_proto_sub_message_proto_rawDescGZIP() []byte { + file_examples_internal_proto_sub_message_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_sub_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_sub_message_proto_rawDescData) + }) + return file_examples_internal_proto_sub_message_proto_rawDescData } -func init() { - proto.RegisterFile("examples/internal/proto/sub/message.proto", fileDescriptor_897f299135d10a90) +var file_examples_internal_proto_sub_message_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_sub_message_proto_goTypes = []interface{}{ + (*StringMessage)(nil), // 0: grpc.gateway.examples.internal.sub.StringMessage +} +var file_examples_internal_proto_sub_message_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -var fileDescriptor_897f299135d10a90 = []byte{ - // 126 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4c, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0xd2, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0xd5, - 0x03, 0x8b, 0x08, 0x29, 0xa5, 0x17, 0x15, 0x24, 0xeb, 0xa5, 0x27, 0x96, 0xa4, 0x96, 0x27, 0x56, - 0xea, 0xc1, 0xf4, 0xe9, 0xc1, 0xf4, 0xe9, 0x15, 0x97, 0x26, 0x29, 0xa9, 0x72, 0xf1, 0x06, 0x97, - 0x14, 0x65, 0xe6, 0xa5, 0xfb, 0x42, 0xb4, 0x0a, 0x89, 0x70, 0xb1, 0x96, 0x25, 0xe6, 0x94, 0xa6, - 0x4a, 0x30, 0x2a, 0x30, 0x69, 0x70, 0x06, 0x41, 0x38, 0x4e, 0xac, 0x51, 0xcc, 0xc5, 0xa5, 0x49, - 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x14, 0x0c, 0x22, 0x7d, 0x00, 0x00, 0x00, +func init() { file_examples_internal_proto_sub_message_proto_init() } +func file_examples_internal_proto_sub_message_proto_init() { + if File_examples_internal_proto_sub_message_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_sub_message_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_sub_message_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_examples_internal_proto_sub_message_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_sub_message_proto_depIdxs, + MessageInfos: file_examples_internal_proto_sub_message_proto_msgTypes, + }.Build() + File_examples_internal_proto_sub_message_proto = out.File + file_examples_internal_proto_sub_message_proto_rawDesc = nil + file_examples_internal_proto_sub_message_proto_goTypes = nil + file_examples_internal_proto_sub_message_proto_depIdxs = nil } diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 9a12ecf1819..d05c16cb295 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,81 +1,152 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: examples/internal/proto/sub2/message.proto package sub2 import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type IdMessage struct { - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *IdMessage) Reset() { *m = IdMessage{} } -func (m *IdMessage) String() string { return proto.CompactTextString(m) } -func (*IdMessage) ProtoMessage() {} -func (*IdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_050dd68add910843, []int{0} + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` } -func (m *IdMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_IdMessage.Unmarshal(m, b) -} -func (m *IdMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_IdMessage.Marshal(b, m, deterministic) -} -func (m *IdMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_IdMessage.Merge(m, src) +func (x *IdMessage) Reset() { + *x = IdMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_sub2_message_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *IdMessage) XXX_Size() int { - return xxx_messageInfo_IdMessage.Size(m) + +func (x *IdMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *IdMessage) XXX_DiscardUnknown() { - xxx_messageInfo_IdMessage.DiscardUnknown(m) + +func (*IdMessage) ProtoMessage() {} + +func (x *IdMessage) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_sub2_message_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_IdMessage proto.InternalMessageInfo +// Deprecated: Use IdMessage.ProtoReflect.Descriptor instead. +func (*IdMessage) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_sub2_message_proto_rawDescGZIP(), []int{0} +} -func (m *IdMessage) GetUuid() string { - if m != nil { - return m.Uuid +func (x *IdMessage) GetUuid() string { + if x != nil { + return x.Uuid } return "" } -func init() { - proto.RegisterType((*IdMessage)(nil), "sub2.IdMessage") +var File_examples_internal_proto_sub2_message_proto protoreflect.FileDescriptor + +var file_examples_internal_proto_sub2_message_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x73, 0x75, + 0x62, 0x32, 0x22, 0x1f, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_examples_internal_proto_sub2_message_proto_rawDescOnce sync.Once + file_examples_internal_proto_sub2_message_proto_rawDescData = file_examples_internal_proto_sub2_message_proto_rawDesc +) + +func file_examples_internal_proto_sub2_message_proto_rawDescGZIP() []byte { + file_examples_internal_proto_sub2_message_proto_rawDescOnce.Do(func() { + file_examples_internal_proto_sub2_message_proto_rawDescData = protoimpl.X.CompressGZIP(file_examples_internal_proto_sub2_message_proto_rawDescData) + }) + return file_examples_internal_proto_sub2_message_proto_rawDescData } -func init() { - proto.RegisterFile("examples/internal/proto/sub2/message.proto", fileDescriptor_050dd68add910843) +var file_examples_internal_proto_sub2_message_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_sub2_message_proto_goTypes = []interface{}{ + (*IdMessage)(nil), // 0: sub2.IdMessage +} +var file_examples_internal_proto_sub2_message_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -var fileDescriptor_050dd68add910843 = []byte{ - // 142 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xd2, 0x4a, 0xad, 0x48, 0xcc, - 0x2d, 0xc8, 0x49, 0x2d, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x28, - 0xca, 0x2f, 0xc9, 0xd7, 0x2f, 0x2e, 0x4d, 0x32, 0xd2, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, - 0xd5, 0x03, 0x0b, 0x09, 0xb1, 0x80, 0xc4, 0x94, 0xe4, 0xb9, 0x38, 0x3d, 0x53, 0x7c, 0x21, 0x12, - 0x42, 0x42, 0x5c, 0x2c, 0xa5, 0xa5, 0x99, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x60, - 0xb6, 0x93, 0x47, 0x94, 0x5b, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, - 0x7a, 0x51, 0x41, 0xb2, 0x6e, 0x6a, 0x72, 0x7e, 0x71, 0x65, 0x71, 0x49, 0x2a, 0x94, 0x9b, 0x9e, - 0x58, 0x92, 0x5a, 0x9e, 0x58, 0xa9, 0x5f, 0x66, 0xa4, 0x8f, 0xcf, 0xfa, 0x24, 0x36, 0x30, 0xdb, - 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x38, 0x17, 0x65, 0xa5, 0x00, 0x00, 0x00, +func init() { file_examples_internal_proto_sub2_message_proto_init() } +func file_examples_internal_proto_sub2_message_proto_init() { + if File_examples_internal_proto_sub2_message_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_examples_internal_proto_sub2_message_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_examples_internal_proto_sub2_message_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_examples_internal_proto_sub2_message_proto_goTypes, + DependencyIndexes: file_examples_internal_proto_sub2_message_proto_depIdxs, + MessageInfos: file_examples_internal_proto_sub2_message_proto_msgTypes, + }.Build() + File_examples_internal_proto_sub2_message_proto = out.File + file_examples_internal_proto_sub2_message_proto_rawDesc = nil + file_examples_internal_proto_sub2_message_proto_goTypes = nil + file_examples_internal_proto_sub2_message_proto_depIdxs = nil } diff --git a/go.mod b/go.mod index d5e16608271..a8497875276 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,13 @@ require ( github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.3.2 + github.com/golang/protobuf v1.4.0 + github.com/google/go-cmp v0.4.0 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.27.1 + google.golang.org/protobuf v1.21.0 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 20a620a8700..c5bd3afd4b5 100644 --- a/go.sum +++ b/go.sum @@ -2,7 +2,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= @@ -11,7 +14,18 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -39,15 +53,26 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967 h1:DwkfSP6tZMxKX50J0dBSqEgJvJdFYP1Gvzbjtvkmrug= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= diff --git a/internal/errors.pb.go b/internal/errors.pb.go index 61101d7177f..f8eedaeef23 100644 --- a/internal/errors.pb.go +++ b/internal/errors.pb.go @@ -1,89 +1,102 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: internal/errors.proto package internal import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" any "github.com/golang/protobuf/ptypes/any" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // Error is the generic error returned from unary RPCs. type Error struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` // This is to make the error more compatible with users that expect errors to be Status objects: // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto // It should be the exact same message as the Error field. - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - Details []*any.Any `protobuf:"bytes,4,rep,name=details,proto3" json:"details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + Details []*any.Any `protobuf:"bytes,4,rep,name=details,proto3" json:"details,omitempty"` } -func (m *Error) Reset() { *m = Error{} } -func (m *Error) String() string { return proto.CompactTextString(m) } -func (*Error) ProtoMessage() {} -func (*Error) Descriptor() ([]byte, []int) { - return fileDescriptor_9b093362ca6d1e03, []int{0} +func (x *Error) Reset() { + *x = Error{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_errors_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Error) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Error.Unmarshal(m, b) -} -func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Error.Marshal(b, m, deterministic) +func (x *Error) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Error) XXX_Merge(src proto.Message) { - xxx_messageInfo_Error.Merge(m, src) -} -func (m *Error) XXX_Size() int { - return xxx_messageInfo_Error.Size(m) -} -func (m *Error) XXX_DiscardUnknown() { - xxx_messageInfo_Error.DiscardUnknown(m) + +func (*Error) ProtoMessage() {} + +func (x *Error) ProtoReflect() protoreflect.Message { + mi := &file_internal_errors_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Error proto.InternalMessageInfo +// Deprecated: Use Error.ProtoReflect.Descriptor instead. +func (*Error) Descriptor() ([]byte, []int) { + return file_internal_errors_proto_rawDescGZIP(), []int{0} +} -func (m *Error) GetError() string { - if m != nil { - return m.Error +func (x *Error) GetError() string { + if x != nil { + return x.Error } return "" } -func (m *Error) GetCode() int32 { - if m != nil { - return m.Code +func (x *Error) GetCode() int32 { + if x != nil { + return x.Code } return 0 } -func (m *Error) GetMessage() string { - if m != nil { - return m.Message +func (x *Error) GetMessage() string { + if x != nil { + return x.Message } return "" } -func (m *Error) GetDetails() []*any.Any { - if m != nil { - return m.Details +func (x *Error) GetDetails() []*any.Any { + if x != nil { + return x.Details } return nil } @@ -91,99 +104,189 @@ func (m *Error) GetDetails() []*any.Any { // StreamError is a response type which is returned when // streaming rpc returns an error. type StreamError struct { - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *StreamError) Reset() { *m = StreamError{} } -func (m *StreamError) String() string { return proto.CompactTextString(m) } -func (*StreamError) ProtoMessage() {} -func (*StreamError) Descriptor() ([]byte, []int) { - return fileDescriptor_9b093362ca6d1e03, []int{1} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *StreamError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StreamError.Unmarshal(m, b) + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` + Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` } -func (m *StreamError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StreamError.Marshal(b, m, deterministic) -} -func (m *StreamError) XXX_Merge(src proto.Message) { - xxx_messageInfo_StreamError.Merge(m, src) + +func (x *StreamError) Reset() { + *x = StreamError{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_errors_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *StreamError) XXX_Size() int { - return xxx_messageInfo_StreamError.Size(m) + +func (x *StreamError) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *StreamError) XXX_DiscardUnknown() { - xxx_messageInfo_StreamError.DiscardUnknown(m) + +func (*StreamError) ProtoMessage() {} + +func (x *StreamError) ProtoReflect() protoreflect.Message { + mi := &file_internal_errors_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_StreamError proto.InternalMessageInfo +// Deprecated: Use StreamError.ProtoReflect.Descriptor instead. +func (*StreamError) Descriptor() ([]byte, []int) { + return file_internal_errors_proto_rawDescGZIP(), []int{1} +} -func (m *StreamError) GetGrpcCode() int32 { - if m != nil { - return m.GrpcCode +func (x *StreamError) GetGrpcCode() int32 { + if x != nil { + return x.GrpcCode } return 0 } -func (m *StreamError) GetHttpCode() int32 { - if m != nil { - return m.HttpCode +func (x *StreamError) GetHttpCode() int32 { + if x != nil { + return x.HttpCode } return 0 } -func (m *StreamError) GetMessage() string { - if m != nil { - return m.Message +func (x *StreamError) GetMessage() string { + if x != nil { + return x.Message } return "" } -func (m *StreamError) GetHttpStatus() string { - if m != nil { - return m.HttpStatus +func (x *StreamError) GetHttpStatus() string { + if x != nil { + return x.HttpStatus } return "" } -func (m *StreamError) GetDetails() []*any.Any { - if m != nil { - return m.Details +func (x *StreamError) GetDetails() []*any.Any { + if x != nil { + return x.Details } return nil } -func init() { - proto.RegisterType((*Error)(nil), "grpc.gateway.runtime.Error") - proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError") -} - -func init() { proto.RegisterFile("internal/errors.proto", fileDescriptor_9b093362ca6d1e03) } - -var fileDescriptor_9b093362ca6d1e03 = []byte{ - // 252 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xc1, 0x4a, 0xc4, 0x30, - 0x10, 0x86, 0x89, 0xbb, 0x75, 0xdb, 0xe9, 0x2d, 0x54, 0x88, 0xee, 0xc1, 0xb2, 0xa7, 0x9e, 0x52, - 0xd0, 0x27, 0xd0, 0xc5, 0x17, 0xe8, 0xde, 0xbc, 0x2c, 0xd9, 0xdd, 0x31, 0x16, 0xda, 0xa4, 0x24, - 0x53, 0xa4, 0xf8, 0x56, 0x3e, 0xa1, 0x24, 0xa5, 0xb0, 0x27, 0xf1, 0xd6, 0xf9, 0xfb, 0xcf, 0x7c, - 0x1f, 0x81, 0xbb, 0xd6, 0x10, 0x3a, 0xa3, 0xba, 0x1a, 0x9d, 0xb3, 0xce, 0xcb, 0xc1, 0x59, 0xb2, - 0xbc, 0xd0, 0x6e, 0x38, 0x4b, 0xad, 0x08, 0xbf, 0xd4, 0x24, 0xdd, 0x68, 0xa8, 0xed, 0xf1, 0xe1, - 0x5e, 0x5b, 0xab, 0x3b, 0xac, 0x63, 0xe7, 0x34, 0x7e, 0xd4, 0xca, 0x4c, 0xf3, 0xc2, 0xee, 0x1b, - 0x92, 0xb7, 0x70, 0x80, 0x17, 0x90, 0xc4, 0x4b, 0x82, 0x95, 0xac, 0xca, 0x9a, 0x79, 0xe0, 0x1c, - 0xd6, 0x67, 0x7b, 0x41, 0x71, 0x53, 0xb2, 0x2a, 0x69, 0xe2, 0x37, 0x17, 0xb0, 0xe9, 0xd1, 0x7b, - 0xa5, 0x51, 0xac, 0x62, 0x77, 0x19, 0xb9, 0x84, 0xcd, 0x05, 0x49, 0xb5, 0x9d, 0x17, 0xeb, 0x72, - 0x55, 0xe5, 0x4f, 0x85, 0x9c, 0xc9, 0x72, 0x21, 0xcb, 0x17, 0x33, 0x35, 0x4b, 0x69, 0xf7, 0xc3, - 0x20, 0x3f, 0x90, 0x43, 0xd5, 0xcf, 0x0e, 0x5b, 0xc8, 0x82, 0xff, 0x31, 0x22, 0x59, 0x44, 0xa6, - 0x21, 0xd8, 0x07, 0xec, 0x16, 0xb2, 0x4f, 0xa2, 0xe1, 0x78, 0xe5, 0x93, 0x86, 0x60, 0xff, 0xb7, - 0xd3, 0x23, 0xe4, 0x71, 0xcd, 0x93, 0xa2, 0x31, 0x78, 0x85, 0xbf, 0x10, 0xa2, 0x43, 0x4c, 0xae, - 0xa5, 0x93, 0x7f, 0x48, 0xbf, 0xc2, 0x7b, 0xba, 0xbc, 0xfd, 0xe9, 0x36, 0x56, 0x9e, 0x7f, 0x03, - 0x00, 0x00, 0xff, 0xff, 0xde, 0x72, 0x6b, 0x83, 0x8e, 0x01, 0x00, 0x00, +var File_internal_errors_proto protoreflect.FileDescriptor + +var file_internal_errors_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x70, 0x63, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x0a, 0x5a, 0x08, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_errors_proto_rawDescOnce sync.Once + file_internal_errors_proto_rawDescData = file_internal_errors_proto_rawDesc +) + +func file_internal_errors_proto_rawDescGZIP() []byte { + file_internal_errors_proto_rawDescOnce.Do(func() { + file_internal_errors_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_errors_proto_rawDescData) + }) + return file_internal_errors_proto_rawDescData +} + +var file_internal_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_internal_errors_proto_goTypes = []interface{}{ + (*Error)(nil), // 0: grpc.gateway.runtime.Error + (*StreamError)(nil), // 1: grpc.gateway.runtime.StreamError + (*any.Any)(nil), // 2: google.protobuf.Any +} +var file_internal_errors_proto_depIdxs = []int32{ + 2, // 0: grpc.gateway.runtime.Error.details:type_name -> google.protobuf.Any + 2, // 1: grpc.gateway.runtime.StreamError.details:type_name -> google.protobuf.Any + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_internal_errors_proto_init() } +func file_internal_errors_proto_init() { + if File_internal_errors_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_errors_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Error); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_internal_errors_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_errors_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_errors_proto_goTypes, + DependencyIndexes: file_internal_errors_proto_depIdxs, + MessageInfos: file_internal_errors_proto_msgTypes, + }.Build() + File_internal_errors_proto = out.File + file_internal_errors_proto_rawDesc = nil + file_internal_errors_proto_goTypes = nil + file_internal_errors_proto_depIdxs = nil } diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index dfc3dcdbe5b..7e30ae32354 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -1,105 +1,240 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: protoc-gen-swagger/options/annotations.proto package options import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 -var E_Openapiv2Swagger = &proto.ExtensionDesc{ - ExtendedType: (*descriptor.FileOptions)(nil), - ExtensionType: (*Swagger)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger", - Tag: "bytes,1042,opt,name=openapiv2_swagger", - Filename: "protoc-gen-swagger/options/annotations.proto", +var file_protoc_gen_swagger_options_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptor.FileOptions)(nil), + ExtensionType: (*Swagger)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger", + Tag: "bytes,1042,opt,name=openapiv2_swagger", + Filename: "protoc-gen-swagger/options/annotations.proto", + }, + { + ExtendedType: (*descriptor.MethodOptions)(nil), + ExtensionType: (*Operation)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_operation", + Tag: "bytes,1042,opt,name=openapiv2_operation", + Filename: "protoc-gen-swagger/options/annotations.proto", + }, + { + ExtendedType: (*descriptor.MessageOptions)(nil), + ExtensionType: (*Schema)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_schema", + Tag: "bytes,1042,opt,name=openapiv2_schema", + Filename: "protoc-gen-swagger/options/annotations.proto", + }, + { + ExtendedType: (*descriptor.ServiceOptions)(nil), + ExtensionType: (*Tag)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_tag", + Tag: "bytes,1042,opt,name=openapiv2_tag", + Filename: "protoc-gen-swagger/options/annotations.proto", + }, + { + ExtendedType: (*descriptor.FieldOptions)(nil), + ExtensionType: (*JSONSchema)(nil), + Field: 1042, + Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_field", + Tag: "bytes,1042,opt,name=openapiv2_field", + Filename: "protoc-gen-swagger/options/annotations.proto", + }, } -var E_Openapiv2Operation = &proto.ExtensionDesc{ - ExtendedType: (*descriptor.MethodOptions)(nil), - ExtensionType: (*Operation)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_operation", - Tag: "bytes,1042,opt,name=openapiv2_operation", - Filename: "protoc-gen-swagger/options/annotations.proto", -} +// Extension fields to descriptor.FileOptions. +var ( + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + // + // optional grpc.gateway.protoc_gen_swagger.options.Swagger openapiv2_swagger = 1042; + E_Openapiv2Swagger = &file_protoc_gen_swagger_options_annotations_proto_extTypes[0] +) -var E_Openapiv2Schema = &proto.ExtensionDesc{ - ExtendedType: (*descriptor.MessageOptions)(nil), - ExtensionType: (*Schema)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_schema", - Tag: "bytes,1042,opt,name=openapiv2_schema", - Filename: "protoc-gen-swagger/options/annotations.proto", -} +// Extension fields to descriptor.MethodOptions. +var ( + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + // + // optional grpc.gateway.protoc_gen_swagger.options.Operation openapiv2_operation = 1042; + E_Openapiv2Operation = &file_protoc_gen_swagger_options_annotations_proto_extTypes[1] +) -var E_Openapiv2Tag = &proto.ExtensionDesc{ - ExtendedType: (*descriptor.ServiceOptions)(nil), - ExtensionType: (*Tag)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_tag", - Tag: "bytes,1042,opt,name=openapiv2_tag", - Filename: "protoc-gen-swagger/options/annotations.proto", -} +// Extension fields to descriptor.MessageOptions. +var ( + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + // + // optional grpc.gateway.protoc_gen_swagger.options.Schema openapiv2_schema = 1042; + E_Openapiv2Schema = &file_protoc_gen_swagger_options_annotations_proto_extTypes[2] +) -var E_Openapiv2Field = &proto.ExtensionDesc{ - ExtendedType: (*descriptor.FieldOptions)(nil), - ExtensionType: (*JSONSchema)(nil), - Field: 1042, - Name: "grpc.gateway.protoc_gen_swagger.options.openapiv2_field", - Tag: "bytes,1042,opt,name=openapiv2_field", - Filename: "protoc-gen-swagger/options/annotations.proto", -} +// Extension fields to descriptor.ServiceOptions. +var ( + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + // + // optional grpc.gateway.protoc_gen_swagger.options.Tag openapiv2_tag = 1042; + E_Openapiv2Tag = &file_protoc_gen_swagger_options_annotations_proto_extTypes[3] +) + +// Extension fields to descriptor.FieldOptions. +var ( + // ID assigned by protobuf-global-extension-registry@google.com for grpc-gateway project. + // + // All IDs are the same, as assigned. It is okay that they are the same, as they extend + // different descriptor messages. + // + // optional grpc.gateway.protoc_gen_swagger.options.JSONSchema openapiv2_field = 1042; + E_Openapiv2Field = &file_protoc_gen_swagger_options_annotations_proto_extTypes[4] +) + +var File_protoc_gen_swagger_options_annotations_proto protoreflect.FileDescriptor -func init() { - proto.RegisterExtension(E_Openapiv2Swagger) - proto.RegisterExtension(E_Openapiv2Operation) - proto.RegisterExtension(E_Openapiv2Schema) - proto.RegisterExtension(E_Openapiv2Tag) - proto.RegisterExtension(E_Openapiv2Field) +var file_protoc_gen_swagger_options_annotations_proto_rawDesc = []byte{ + 0x0a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x7c, 0x0a, 0x11, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, + 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x10, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x53, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x3a, 0x84, 0x01, 0x0a, 0x13, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x7c, 0x0a, 0x10, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1f, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x76, 0x32, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x73, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x74, 0x61, 0x67, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x92, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x67, 0x52, + 0x0c, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x54, 0x61, 0x67, 0x3a, 0x7c, 0x0a, + 0x0f, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x92, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x46, 0x5a, 0x44, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, + 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -func init() { - proto.RegisterFile("protoc-gen-swagger/options/annotations.proto", fileDescriptor_a6a34ca6badab664) +var file_protoc_gen_swagger_options_annotations_proto_goTypes = []interface{}{ + (*descriptor.FileOptions)(nil), // 0: google.protobuf.FileOptions + (*descriptor.MethodOptions)(nil), // 1: google.protobuf.MethodOptions + (*descriptor.MessageOptions)(nil), // 2: google.protobuf.MessageOptions + (*descriptor.ServiceOptions)(nil), // 3: google.protobuf.ServiceOptions + (*descriptor.FieldOptions)(nil), // 4: google.protobuf.FieldOptions + (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_swagger.options.Swagger + (*Operation)(nil), // 6: grpc.gateway.protoc_gen_swagger.options.Operation + (*Schema)(nil), // 7: grpc.gateway.protoc_gen_swagger.options.Schema + (*Tag)(nil), // 8: grpc.gateway.protoc_gen_swagger.options.Tag + (*JSONSchema)(nil), // 9: grpc.gateway.protoc_gen_swagger.options.JSONSchema +} +var file_protoc_gen_swagger_options_annotations_proto_depIdxs = []int32{ + 0, // 0: grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger:extendee -> google.protobuf.FileOptions + 1, // 1: grpc.gateway.protoc_gen_swagger.options.openapiv2_operation:extendee -> google.protobuf.MethodOptions + 2, // 2: grpc.gateway.protoc_gen_swagger.options.openapiv2_schema:extendee -> google.protobuf.MessageOptions + 3, // 3: grpc.gateway.protoc_gen_swagger.options.openapiv2_tag:extendee -> google.protobuf.ServiceOptions + 4, // 4: grpc.gateway.protoc_gen_swagger.options.openapiv2_field:extendee -> google.protobuf.FieldOptions + 5, // 5: grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger:type_name -> grpc.gateway.protoc_gen_swagger.options.Swagger + 6, // 6: grpc.gateway.protoc_gen_swagger.options.openapiv2_operation:type_name -> grpc.gateway.protoc_gen_swagger.options.Operation + 7, // 7: grpc.gateway.protoc_gen_swagger.options.openapiv2_schema:type_name -> grpc.gateway.protoc_gen_swagger.options.Schema + 8, // 8: grpc.gateway.protoc_gen_swagger.options.openapiv2_tag:type_name -> grpc.gateway.protoc_gen_swagger.options.Tag + 9, // 9: grpc.gateway.protoc_gen_swagger.options.openapiv2_field:type_name -> grpc.gateway.protoc_gen_swagger.options.JSONSchema + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 5, // [5:10] is the sub-list for extension type_name + 0, // [0:5] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name } -var fileDescriptor_a6a34ca6badab664 = []byte{ - // 346 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xc2, 0x40, - 0x10, 0xc5, 0xc3, 0xc5, 0x98, 0xfa, 0x0f, 0xeb, 0xc5, 0x10, 0xff, 0x70, 0xd3, 0x18, 0xd8, 0x35, - 0xe5, 0xd6, 0xa3, 0x31, 0x1c, 0x4c, 0x94, 0xa4, 0x70, 0xf2, 0x42, 0x96, 0x65, 0x18, 0x9a, 0x94, - 0xce, 0x66, 0x77, 0x81, 0x90, 0x70, 0xf4, 0x13, 0xf8, 0x89, 0x8d, 0xdb, 0xd2, 0x9a, 0x8a, 0xa6, - 0xb7, 0xee, 0xeb, 0xcc, 0xfb, 0xbd, 0xbe, 0xae, 0xd7, 0x51, 0x9a, 0x2c, 0xc9, 0x2e, 0x42, 0xda, - 0x35, 0x6b, 0x81, 0x08, 0x9a, 0x93, 0xb2, 0x31, 0xa5, 0x86, 0x8b, 0x34, 0x25, 0x2b, 0xdc, 0x33, - 0x73, 0x63, 0xfe, 0x1d, 0x6a, 0x25, 0x19, 0x0a, 0x0b, 0x6b, 0xb1, 0xc9, 0x34, 0x39, 0x46, 0x48, - 0xc7, 0xf9, 0x2a, 0xcb, 0x57, 0x5b, 0x6d, 0x24, 0xc2, 0x04, 0xb8, 0x1b, 0x99, 0x2c, 0x67, 0x7c, - 0x0a, 0x46, 0xea, 0x58, 0x59, 0xd2, 0xd9, 0x5a, 0xeb, 0xe1, 0x1f, 0x30, 0x29, 0x48, 0x85, 0x8a, - 0x57, 0x41, 0x36, 0x1b, 0x6e, 0xbd, 0xf3, 0x42, 0xda, 0xa1, 0xfc, 0x2b, 0x96, 0x31, 0xd8, 0x8e, - 0xc1, 0xfa, 0x71, 0x02, 0x83, 0xcc, 0xe2, 0xf2, 0xf3, 0xb0, 0xdd, 0xb8, 0x3f, 0x0a, 0x1e, 0x59, - 0xcd, 0xc4, 0x6c, 0x98, 0x9d, 0xa3, 0x66, 0x41, 0xca, 0x95, 0xf0, 0xa3, 0xe1, 0x5d, 0x94, 0x78, - 0x52, 0xa0, 0x5d, 0x27, 0xfe, 0xcd, 0xaf, 0x00, 0xaf, 0x60, 0xe7, 0x34, 0xad, 0x44, 0x08, 0x6a, - 0x47, 0x18, 0xec, 0xac, 0x23, 0xbf, 0xe0, 0x15, 0x5a, 0xb8, 0xf5, 0x9a, 0x3f, 0x4a, 0x90, 0x73, - 0x58, 0x08, 0xff, 0x76, 0x4f, 0x04, 0x63, 0x04, 0x56, 0x6b, 0xe0, 0xf5, 0x6b, 0x70, 0xc6, 0xd1, - 0x59, 0xd9, 0x82, 0x13, 0x42, 0xe3, 0x9d, 0x94, 0x74, 0x2b, 0x70, 0x0f, 0x7a, 0x08, 0x7a, 0x15, - 0xcb, 0x2a, 0xba, 0x53, 0x1b, 0x3d, 0x12, 0x18, 0x1d, 0x17, 0x90, 0x91, 0xc0, 0x70, 0xeb, 0x95, - 0x39, 0xc6, 0xb3, 0x18, 0x92, 0xa9, 0x7f, 0xbd, 0xe7, 0xaf, 0x43, 0x52, 0xed, 0xbc, 0x57, 0x1b, - 0xfa, 0x32, 0x1c, 0xbc, 0xe5, 0xdf, 0x7c, 0x5a, 0xb0, 0x9c, 0xe5, 0x53, 0xff, 0xfd, 0x19, 0x63, - 0x3b, 0x5f, 0x4e, 0x98, 0xa4, 0x05, 0xff, 0x36, 0xec, 0x82, 0x24, 0xb3, 0x31, 0x16, 0xf2, 0x63, - 0xee, 0xcf, 0x57, 0x01, 0xff, 0xfb, 0x36, 0x4f, 0x0e, 0xdc, 0xbb, 0xde, 0x57, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xca, 0x4a, 0x29, 0xbb, 0x6b, 0x03, 0x00, 0x00, +func init() { file_protoc_gen_swagger_options_annotations_proto_init() } +func file_protoc_gen_swagger_options_annotations_proto_init() { + if File_protoc_gen_swagger_options_annotations_proto != nil { + return + } + file_protoc_gen_swagger_options_openapiv2_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_protoc_gen_swagger_options_annotations_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 5, + NumServices: 0, + }, + GoTypes: file_protoc_gen_swagger_options_annotations_proto_goTypes, + DependencyIndexes: file_protoc_gen_swagger_options_annotations_proto_depIdxs, + ExtensionInfos: file_protoc_gen_swagger_options_annotations_proto_extTypes, + }.Build() + File_protoc_gen_swagger_options_annotations_proto = out.File + file_protoc_gen_swagger_options_annotations_proto_rawDesc = nil + file_protoc_gen_swagger_options_annotations_proto_goTypes = nil + file_protoc_gen_swagger_options_annotations_proto_depIdxs = nil } diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index a3a71b112d7..1173e31cd68 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1,26 +1,31 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: protoc-gen-swagger/options/openapiv2.proto package options import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" any "github.com/golang/protobuf/ptypes/any" _struct "github.com/golang/protobuf/ptypes/struct" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type Swagger_SwaggerScheme int32 @@ -32,28 +37,49 @@ const ( Swagger_WSS Swagger_SwaggerScheme = 4 ) -var Swagger_SwaggerScheme_name = map[int32]string{ - 0: "UNKNOWN", - 1: "HTTP", - 2: "HTTPS", - 3: "WS", - 4: "WSS", -} +// Enum value maps for Swagger_SwaggerScheme. +var ( + Swagger_SwaggerScheme_name = map[int32]string{ + 0: "UNKNOWN", + 1: "HTTP", + 2: "HTTPS", + 3: "WS", + 4: "WSS", + } + Swagger_SwaggerScheme_value = map[string]int32{ + "UNKNOWN": 0, + "HTTP": 1, + "HTTPS": 2, + "WS": 3, + "WSS": 4, + } +) -var Swagger_SwaggerScheme_value = map[string]int32{ - "UNKNOWN": 0, - "HTTP": 1, - "HTTPS": 2, - "WS": 3, - "WSS": 4, +func (x Swagger_SwaggerScheme) Enum() *Swagger_SwaggerScheme { + p := new(Swagger_SwaggerScheme) + *p = x + return p } func (x Swagger_SwaggerScheme) String() string { - return proto.EnumName(Swagger_SwaggerScheme_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Swagger_SwaggerScheme) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[0].Descriptor() } +func (Swagger_SwaggerScheme) Type() protoreflect.EnumType { + return &file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[0] +} + +func (x Swagger_SwaggerScheme) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Swagger_SwaggerScheme.Descriptor instead. func (Swagger_SwaggerScheme) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{0, 0} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{0, 0} } type JSONSchema_JSONSchemaSimpleTypes int32 @@ -69,34 +95,55 @@ const ( JSONSchema_STRING JSONSchema_JSONSchemaSimpleTypes = 7 ) -var JSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{ - 0: "UNKNOWN", - 1: "ARRAY", - 2: "BOOLEAN", - 3: "INTEGER", - 4: "NULL", - 5: "NUMBER", - 6: "OBJECT", - 7: "STRING", -} +// Enum value maps for JSONSchema_JSONSchemaSimpleTypes. +var ( + JSONSchema_JSONSchemaSimpleTypes_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ARRAY", + 2: "BOOLEAN", + 3: "INTEGER", + 4: "NULL", + 5: "NUMBER", + 6: "OBJECT", + 7: "STRING", + } + JSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{ + "UNKNOWN": 0, + "ARRAY": 1, + "BOOLEAN": 2, + "INTEGER": 3, + "NULL": 4, + "NUMBER": 5, + "OBJECT": 6, + "STRING": 7, + } +) -var JSONSchema_JSONSchemaSimpleTypes_value = map[string]int32{ - "UNKNOWN": 0, - "ARRAY": 1, - "BOOLEAN": 2, - "INTEGER": 3, - "NULL": 4, - "NUMBER": 5, - "OBJECT": 6, - "STRING": 7, +func (x JSONSchema_JSONSchemaSimpleTypes) Enum() *JSONSchema_JSONSchemaSimpleTypes { + p := new(JSONSchema_JSONSchemaSimpleTypes) + *p = x + return p } func (x JSONSchema_JSONSchemaSimpleTypes) String() string { - return proto.EnumName(JSONSchema_JSONSchemaSimpleTypes_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (JSONSchema_JSONSchemaSimpleTypes) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[1].Descriptor() +} + +func (JSONSchema_JSONSchemaSimpleTypes) Type() protoreflect.EnumType { + return &file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[1] +} + +func (x JSONSchema_JSONSchemaSimpleTypes) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use JSONSchema_JSONSchemaSimpleTypes.Descriptor instead. func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{8, 0} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{8, 0} } // Required. The type of the security scheme. Valid values are "basic", @@ -110,26 +157,47 @@ const ( SecurityScheme_TYPE_OAUTH2 SecurityScheme_Type = 3 ) -var SecurityScheme_Type_name = map[int32]string{ - 0: "TYPE_INVALID", - 1: "TYPE_BASIC", - 2: "TYPE_API_KEY", - 3: "TYPE_OAUTH2", -} +// Enum value maps for SecurityScheme_Type. +var ( + SecurityScheme_Type_name = map[int32]string{ + 0: "TYPE_INVALID", + 1: "TYPE_BASIC", + 2: "TYPE_API_KEY", + 3: "TYPE_OAUTH2", + } + SecurityScheme_Type_value = map[string]int32{ + "TYPE_INVALID": 0, + "TYPE_BASIC": 1, + "TYPE_API_KEY": 2, + "TYPE_OAUTH2": 3, + } +) -var SecurityScheme_Type_value = map[string]int32{ - "TYPE_INVALID": 0, - "TYPE_BASIC": 1, - "TYPE_API_KEY": 2, - "TYPE_OAUTH2": 3, +func (x SecurityScheme_Type) Enum() *SecurityScheme_Type { + p := new(SecurityScheme_Type) + *p = x + return p } func (x SecurityScheme_Type) String() string { - return proto.EnumName(SecurityScheme_Type_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SecurityScheme_Type) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[2].Descriptor() +} + +func (SecurityScheme_Type) Type() protoreflect.EnumType { + return &file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[2] +} + +func (x SecurityScheme_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } +// Deprecated: Use SecurityScheme_Type.Descriptor instead. func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{11, 0} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11, 0} } // Required. The location of the API key. Valid values are "query" or "header". @@ -141,24 +209,45 @@ const ( SecurityScheme_IN_HEADER SecurityScheme_In = 2 ) -var SecurityScheme_In_name = map[int32]string{ - 0: "IN_INVALID", - 1: "IN_QUERY", - 2: "IN_HEADER", -} +// Enum value maps for SecurityScheme_In. +var ( + SecurityScheme_In_name = map[int32]string{ + 0: "IN_INVALID", + 1: "IN_QUERY", + 2: "IN_HEADER", + } + SecurityScheme_In_value = map[string]int32{ + "IN_INVALID": 0, + "IN_QUERY": 1, + "IN_HEADER": 2, + } +) -var SecurityScheme_In_value = map[string]int32{ - "IN_INVALID": 0, - "IN_QUERY": 1, - "IN_HEADER": 2, +func (x SecurityScheme_In) Enum() *SecurityScheme_In { + p := new(SecurityScheme_In) + *p = x + return p } func (x SecurityScheme_In) String() string { - return proto.EnumName(SecurityScheme_In_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SecurityScheme_In) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[3].Descriptor() +} + +func (SecurityScheme_In) Type() protoreflect.EnumType { + return &file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[3] } +func (x SecurityScheme_In) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SecurityScheme_In.Descriptor instead. func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{11, 1} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11, 1} } // Required. The flow used by the OAuth2 security scheme. Valid values are @@ -173,28 +262,49 @@ const ( SecurityScheme_FLOW_ACCESS_CODE SecurityScheme_Flow = 4 ) -var SecurityScheme_Flow_name = map[int32]string{ - 0: "FLOW_INVALID", - 1: "FLOW_IMPLICIT", - 2: "FLOW_PASSWORD", - 3: "FLOW_APPLICATION", - 4: "FLOW_ACCESS_CODE", -} +// Enum value maps for SecurityScheme_Flow. +var ( + SecurityScheme_Flow_name = map[int32]string{ + 0: "FLOW_INVALID", + 1: "FLOW_IMPLICIT", + 2: "FLOW_PASSWORD", + 3: "FLOW_APPLICATION", + 4: "FLOW_ACCESS_CODE", + } + SecurityScheme_Flow_value = map[string]int32{ + "FLOW_INVALID": 0, + "FLOW_IMPLICIT": 1, + "FLOW_PASSWORD": 2, + "FLOW_APPLICATION": 3, + "FLOW_ACCESS_CODE": 4, + } +) -var SecurityScheme_Flow_value = map[string]int32{ - "FLOW_INVALID": 0, - "FLOW_IMPLICIT": 1, - "FLOW_PASSWORD": 2, - "FLOW_APPLICATION": 3, - "FLOW_ACCESS_CODE": 4, +func (x SecurityScheme_Flow) Enum() *SecurityScheme_Flow { + p := new(SecurityScheme_Flow) + *p = x + return p } func (x SecurityScheme_Flow) String() string { - return proto.EnumName(SecurityScheme_Flow_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SecurityScheme_Flow) Descriptor() protoreflect.EnumDescriptor { + return file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[4].Descriptor() } +func (SecurityScheme_Flow) Type() protoreflect.EnumType { + return &file_protoc_gen_swagger_options_openapiv2_proto_enumTypes[4] +} + +func (x SecurityScheme_Flow) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SecurityScheme_Flow.Descriptor instead. func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{11, 2} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11, 2} } // `Swagger` is a representation of OpenAPI v2 specification's Swagger object. @@ -203,6 +313,10 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // TODO(ivucica): document fields type Swagger struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` @@ -212,125 +326,129 @@ type Swagger struct { // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Swagger) Reset() { *m = Swagger{} } -func (m *Swagger) String() string { return proto.CompactTextString(m) } -func (*Swagger) ProtoMessage() {} -func (*Swagger) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{0} + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *Swagger) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Swagger.Unmarshal(m, b) -} -func (m *Swagger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Swagger.Marshal(b, m, deterministic) -} -func (m *Swagger) XXX_Merge(src proto.Message) { - xxx_messageInfo_Swagger.Merge(m, src) +func (x *Swagger) Reset() { + *x = Swagger{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Swagger) XXX_Size() int { - return xxx_messageInfo_Swagger.Size(m) + +func (x *Swagger) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Swagger) XXX_DiscardUnknown() { - xxx_messageInfo_Swagger.DiscardUnknown(m) + +func (*Swagger) ProtoMessage() {} + +func (x *Swagger) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Swagger proto.InternalMessageInfo +// Deprecated: Use Swagger.ProtoReflect.Descriptor instead. +func (*Swagger) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{0} +} -func (m *Swagger) GetSwagger() string { - if m != nil { - return m.Swagger +func (x *Swagger) GetSwagger() string { + if x != nil { + return x.Swagger } return "" } -func (m *Swagger) GetInfo() *Info { - if m != nil { - return m.Info +func (x *Swagger) GetInfo() *Info { + if x != nil { + return x.Info } return nil } -func (m *Swagger) GetHost() string { - if m != nil { - return m.Host +func (x *Swagger) GetHost() string { + if x != nil { + return x.Host } return "" } -func (m *Swagger) GetBasePath() string { - if m != nil { - return m.BasePath +func (x *Swagger) GetBasePath() string { + if x != nil { + return x.BasePath } return "" } -func (m *Swagger) GetSchemes() []Swagger_SwaggerScheme { - if m != nil { - return m.Schemes +func (x *Swagger) GetSchemes() []Swagger_SwaggerScheme { + if x != nil { + return x.Schemes } return nil } -func (m *Swagger) GetConsumes() []string { - if m != nil { - return m.Consumes +func (x *Swagger) GetConsumes() []string { + if x != nil { + return x.Consumes } return nil } -func (m *Swagger) GetProduces() []string { - if m != nil { - return m.Produces +func (x *Swagger) GetProduces() []string { + if x != nil { + return x.Produces } return nil } -func (m *Swagger) GetResponses() map[string]*Response { - if m != nil { - return m.Responses +func (x *Swagger) GetResponses() map[string]*Response { + if x != nil { + return x.Responses } return nil } -func (m *Swagger) GetSecurityDefinitions() *SecurityDefinitions { - if m != nil { - return m.SecurityDefinitions +func (x *Swagger) GetSecurityDefinitions() *SecurityDefinitions { + if x != nil { + return x.SecurityDefinitions } return nil } -func (m *Swagger) GetSecurity() []*SecurityRequirement { - if m != nil { - return m.Security +func (x *Swagger) GetSecurity() []*SecurityRequirement { + if x != nil { + return x.Security } return nil } -func (m *Swagger) GetExternalDocs() *ExternalDocumentation { - if m != nil { - return m.ExternalDocs +func (x *Swagger) GetExternalDocs() *ExternalDocumentation { + if x != nil { + return x.ExternalDocs } return nil } -func (m *Swagger) GetExtensions() map[string]*_struct.Value { - if m != nil { - return m.Extensions +func (x *Swagger) GetExtensions() map[string]*_struct.Value { + if x != nil { + return x.Extensions } return nil } @@ -341,128 +459,136 @@ func (m *Swagger) GetExtensions() map[string]*_struct.Value { // // TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Operation) Reset() { *m = Operation{} } -func (m *Operation) String() string { return proto.CompactTextString(m) } -func (*Operation) ProtoMessage() {} -func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{1} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Operation) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Operation.Unmarshal(m, b) + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *Operation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Operation.Marshal(b, m, deterministic) -} -func (m *Operation) XXX_Merge(src proto.Message) { - xxx_messageInfo_Operation.Merge(m, src) + +func (x *Operation) Reset() { + *x = Operation{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Operation) XXX_Size() int { - return xxx_messageInfo_Operation.Size(m) + +func (x *Operation) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Operation) XXX_DiscardUnknown() { - xxx_messageInfo_Operation.DiscardUnknown(m) + +func (*Operation) ProtoMessage() {} + +func (x *Operation) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Operation proto.InternalMessageInfo +// Deprecated: Use Operation.ProtoReflect.Descriptor instead. +func (*Operation) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{1} +} -func (m *Operation) GetTags() []string { - if m != nil { - return m.Tags +func (x *Operation) GetTags() []string { + if x != nil { + return x.Tags } return nil } -func (m *Operation) GetSummary() string { - if m != nil { - return m.Summary +func (x *Operation) GetSummary() string { + if x != nil { + return x.Summary } return "" } -func (m *Operation) GetDescription() string { - if m != nil { - return m.Description +func (x *Operation) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Operation) GetExternalDocs() *ExternalDocumentation { - if m != nil { - return m.ExternalDocs +func (x *Operation) GetExternalDocs() *ExternalDocumentation { + if x != nil { + return x.ExternalDocs } return nil } -func (m *Operation) GetOperationId() string { - if m != nil { - return m.OperationId +func (x *Operation) GetOperationId() string { + if x != nil { + return x.OperationId } return "" } -func (m *Operation) GetConsumes() []string { - if m != nil { - return m.Consumes +func (x *Operation) GetConsumes() []string { + if x != nil { + return x.Consumes } return nil } -func (m *Operation) GetProduces() []string { - if m != nil { - return m.Produces +func (x *Operation) GetProduces() []string { + if x != nil { + return x.Produces } return nil } -func (m *Operation) GetResponses() map[string]*Response { - if m != nil { - return m.Responses +func (x *Operation) GetResponses() map[string]*Response { + if x != nil { + return x.Responses } return nil } -func (m *Operation) GetSchemes() []string { - if m != nil { - return m.Schemes +func (x *Operation) GetSchemes() []string { + if x != nil { + return x.Schemes } return nil } -func (m *Operation) GetDeprecated() bool { - if m != nil { - return m.Deprecated +func (x *Operation) GetDeprecated() bool { + if x != nil { + return x.Deprecated } return false } -func (m *Operation) GetSecurity() []*SecurityRequirement { - if m != nil { - return m.Security +func (x *Operation) GetSecurity() []*SecurityRequirement { + if x != nil { + return x.Security } return nil } -func (m *Operation) GetExtensions() map[string]*_struct.Value { - if m != nil { - return m.Extensions +func (x *Operation) GetExtensions() map[string]*_struct.Value { + if x != nil { + return x.Extensions } return nil } @@ -472,6 +598,10 @@ func (m *Operation) GetExtensions() map[string]*_struct.Value { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responseObject // type Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // `Description` is a short description of the response. // GFM syntax can be used for rich text representation. Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` @@ -480,62 +610,66 @@ type Response struct { Schema *Schema `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` // `Examples` gives per-mimetype response examples. // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#example-object - Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Examples map[string]string `protobuf:"bytes,4,rep,name=examples,proto3" json:"examples,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Extensions map[string]*_struct.Value `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *Response) Reset() { *m = Response{} } -func (m *Response) String() string { return proto.CompactTextString(m) } -func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{2} +func (x *Response) Reset() { + *x = Response{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Response.Unmarshal(m, b) -} -func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Response.Marshal(b, m, deterministic) +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_Response.Merge(m, src) -} -func (m *Response) XXX_Size() int { - return xxx_messageInfo_Response.Size(m) -} -func (m *Response) XXX_DiscardUnknown() { - xxx_messageInfo_Response.DiscardUnknown(m) + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Response proto.InternalMessageInfo +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{2} +} -func (m *Response) GetDescription() string { - if m != nil { - return m.Description +func (x *Response) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Response) GetSchema() *Schema { - if m != nil { - return m.Schema +func (x *Response) GetSchema() *Schema { + if x != nil { + return x.Schema } return nil } -func (m *Response) GetExamples() map[string]string { - if m != nil { - return m.Examples +func (x *Response) GetExamples() map[string]string { + if x != nil { + return x.Examples } return nil } -func (m *Response) GetExtensions() map[string]*_struct.Value { - if m != nil { - return m.Extensions +func (x *Response) GetExtensions() map[string]*_struct.Value { + if x != nil { + return x.Extensions } return nil } @@ -546,88 +680,96 @@ func (m *Response) GetExtensions() map[string]*_struct.Value { // // TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Info) Reset() { *m = Info{} } -func (m *Info) String() string { return proto.CompactTextString(m) } -func (*Info) ProtoMessage() {} -func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{3} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Info) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Info.Unmarshal(m, b) -} -func (m *Info) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Info.Marshal(b, m, deterministic) + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *Info) XXX_Merge(src proto.Message) { - xxx_messageInfo_Info.Merge(m, src) + +func (x *Info) Reset() { + *x = Info{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Info) XXX_Size() int { - return xxx_messageInfo_Info.Size(m) + +func (x *Info) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Info) XXX_DiscardUnknown() { - xxx_messageInfo_Info.DiscardUnknown(m) + +func (*Info) ProtoMessage() {} + +func (x *Info) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Info proto.InternalMessageInfo +// Deprecated: Use Info.ProtoReflect.Descriptor instead. +func (*Info) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{3} +} -func (m *Info) GetTitle() string { - if m != nil { - return m.Title +func (x *Info) GetTitle() string { + if x != nil { + return x.Title } return "" } -func (m *Info) GetDescription() string { - if m != nil { - return m.Description +func (x *Info) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Info) GetTermsOfService() string { - if m != nil { - return m.TermsOfService +func (x *Info) GetTermsOfService() string { + if x != nil { + return x.TermsOfService } return "" } -func (m *Info) GetContact() *Contact { - if m != nil { - return m.Contact +func (x *Info) GetContact() *Contact { + if x != nil { + return x.Contact } return nil } -func (m *Info) GetLicense() *License { - if m != nil { - return m.License +func (x *Info) GetLicense() *License { + if x != nil { + return x.License } return nil } -func (m *Info) GetVersion() string { - if m != nil { - return m.Version +func (x *Info) GetVersion() string { + if x != nil { + return x.Version } return "" } -func (m *Info) GetExtensions() map[string]*_struct.Value { - if m != nil { - return m.Extensions +func (x *Info) GetExtensions() map[string]*_struct.Value { + if x != nil { + return x.Extensions } return nil } @@ -638,56 +780,64 @@ func (m *Info) GetExtensions() map[string]*_struct.Value { // // TODO(ivucica): document fields type Contact struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Contact) Reset() { *m = Contact{} } -func (m *Contact) String() string { return proto.CompactTextString(m) } -func (*Contact) ProtoMessage() {} -func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{4} + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` } -func (m *Contact) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Contact.Unmarshal(m, b) -} -func (m *Contact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Contact.Marshal(b, m, deterministic) -} -func (m *Contact) XXX_Merge(src proto.Message) { - xxx_messageInfo_Contact.Merge(m, src) +func (x *Contact) Reset() { + *x = Contact{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Contact) XXX_Size() int { - return xxx_messageInfo_Contact.Size(m) + +func (x *Contact) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Contact) XXX_DiscardUnknown() { - xxx_messageInfo_Contact.DiscardUnknown(m) + +func (*Contact) ProtoMessage() {} + +func (x *Contact) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Contact proto.InternalMessageInfo +// Deprecated: Use Contact.ProtoReflect.Descriptor instead. +func (*Contact) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{4} +} -func (m *Contact) GetName() string { - if m != nil { - return m.Name +func (x *Contact) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *Contact) GetUrl() string { - if m != nil { - return m.Url +func (x *Contact) GetUrl() string { + if x != nil { + return x.Url } return "" } -func (m *Contact) GetEmail() string { - if m != nil { - return m.Email +func (x *Contact) GetEmail() string { + if x != nil { + return x.Email } return "" } @@ -697,50 +847,58 @@ func (m *Contact) GetEmail() string { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject // type License struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Required. The license name used for the API. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // A URL to the license used for the API. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` } -func (m *License) Reset() { *m = License{} } -func (m *License) String() string { return proto.CompactTextString(m) } -func (*License) ProtoMessage() {} -func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{5} +func (x *License) Reset() { + *x = License{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *License) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_License.Unmarshal(m, b) -} -func (m *License) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_License.Marshal(b, m, deterministic) -} -func (m *License) XXX_Merge(src proto.Message) { - xxx_messageInfo_License.Merge(m, src) +func (x *License) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *License) XXX_Size() int { - return xxx_messageInfo_License.Size(m) -} -func (m *License) XXX_DiscardUnknown() { - xxx_messageInfo_License.DiscardUnknown(m) + +func (*License) ProtoMessage() {} + +func (x *License) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_License proto.InternalMessageInfo +// Deprecated: Use License.ProtoReflect.Descriptor instead. +func (*License) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{5} +} -func (m *License) GetName() string { - if m != nil { - return m.Name +func (x *License) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *License) GetUrl() string { - if m != nil { - return m.Url +func (x *License) GetUrl() string { + if x != nil { + return x.Url } return "" } @@ -752,48 +910,56 @@ func (m *License) GetUrl() string { // // TODO(ivucica): document fields type ExternalDocumentation struct { - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *ExternalDocumentation) Reset() { *m = ExternalDocumentation{} } -func (m *ExternalDocumentation) String() string { return proto.CompactTextString(m) } -func (*ExternalDocumentation) ProtoMessage() {} -func (*ExternalDocumentation) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{6} + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` } -func (m *ExternalDocumentation) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExternalDocumentation.Unmarshal(m, b) -} -func (m *ExternalDocumentation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExternalDocumentation.Marshal(b, m, deterministic) -} -func (m *ExternalDocumentation) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExternalDocumentation.Merge(m, src) +func (x *ExternalDocumentation) Reset() { + *x = ExternalDocumentation{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ExternalDocumentation) XXX_Size() int { - return xxx_messageInfo_ExternalDocumentation.Size(m) + +func (x *ExternalDocumentation) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ExternalDocumentation) XXX_DiscardUnknown() { - xxx_messageInfo_ExternalDocumentation.DiscardUnknown(m) + +func (*ExternalDocumentation) ProtoMessage() {} + +func (x *ExternalDocumentation) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ExternalDocumentation proto.InternalMessageInfo +// Deprecated: Use ExternalDocumentation.ProtoReflect.Descriptor instead. +func (*ExternalDocumentation) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{6} +} -func (m *ExternalDocumentation) GetDescription() string { - if m != nil { - return m.Description +func (x *ExternalDocumentation) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *ExternalDocumentation) GetUrl() string { - if m != nil { - return m.Url +func (x *ExternalDocumentation) GetUrl() string { + if x != nil { + return x.Url } return "" } @@ -804,72 +970,80 @@ func (m *ExternalDocumentation) GetUrl() string { // // TODO(ivucica): document fields type Schema struct { - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Schema) Reset() { *m = Schema{} } -func (m *Schema) String() string { return proto.CompactTextString(m) } -func (*Schema) ProtoMessage() {} -func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{7} -} + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (m *Schema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Schema.Unmarshal(m, b) + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` + Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` } -func (m *Schema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Schema.Marshal(b, m, deterministic) -} -func (m *Schema) XXX_Merge(src proto.Message) { - xxx_messageInfo_Schema.Merge(m, src) + +func (x *Schema) Reset() { + *x = Schema{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Schema) XXX_Size() int { - return xxx_messageInfo_Schema.Size(m) + +func (x *Schema) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Schema) XXX_DiscardUnknown() { - xxx_messageInfo_Schema.DiscardUnknown(m) + +func (*Schema) ProtoMessage() {} + +func (x *Schema) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Schema proto.InternalMessageInfo +// Deprecated: Use Schema.ProtoReflect.Descriptor instead. +func (*Schema) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{7} +} -func (m *Schema) GetJsonSchema() *JSONSchema { - if m != nil { - return m.JsonSchema +func (x *Schema) GetJsonSchema() *JSONSchema { + if x != nil { + return x.JsonSchema } return nil } -func (m *Schema) GetDiscriminator() string { - if m != nil { - return m.Discriminator +func (x *Schema) GetDiscriminator() string { + if x != nil { + return x.Discriminator } return "" } -func (m *Schema) GetReadOnly() bool { - if m != nil { - return m.ReadOnly +func (x *Schema) GetReadOnly() bool { + if x != nil { + return x.ReadOnly } return false } -func (m *Schema) GetExternalDocs() *ExternalDocumentation { - if m != nil { - return m.ExternalDocs +func (x *Schema) GetExternalDocs() *ExternalDocumentation { + if x != nil { + return x.ExternalDocs } return nil } -func (m *Schema) GetExample() *any.Any { - if m != nil { - return m.Example +func (x *Schema) GetExample() *any.Any { + if x != nil { + return x.Example } return nil } @@ -886,6 +1060,10 @@ func (m *Schema) GetExample() *any.Any { // // TODO(ivucica): document fields type JSONSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Ref is used to define an external reference to include in the message. // This could be a fully qualified proto message reference, and that type must be imported // into the protofile. If no message is identified, the Ref will be used verbatim in @@ -912,181 +1090,185 @@ type JSONSchema struct { MinProperties uint64 `protobuf:"varint,25,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` Required []string `protobuf:"bytes,26,rep,name=required,proto3" json:"required,omitempty"` // Items in 'array' must be unique. - Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` - Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Array []string `protobuf:"bytes,34,rep,name=array,proto3" json:"array,omitempty"` + Type []JSONSchema_JSONSchemaSimpleTypes `protobuf:"varint,35,rep,packed,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes" json:"type,omitempty"` } -func (m *JSONSchema) Reset() { *m = JSONSchema{} } -func (m *JSONSchema) String() string { return proto.CompactTextString(m) } -func (*JSONSchema) ProtoMessage() {} -func (*JSONSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{8} +func (x *JSONSchema) Reset() { + *x = JSONSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *JSONSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_JSONSchema.Unmarshal(m, b) -} -func (m *JSONSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_JSONSchema.Marshal(b, m, deterministic) +func (x *JSONSchema) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *JSONSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_JSONSchema.Merge(m, src) -} -func (m *JSONSchema) XXX_Size() int { - return xxx_messageInfo_JSONSchema.Size(m) -} -func (m *JSONSchema) XXX_DiscardUnknown() { - xxx_messageInfo_JSONSchema.DiscardUnknown(m) + +func (*JSONSchema) ProtoMessage() {} + +func (x *JSONSchema) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_JSONSchema proto.InternalMessageInfo +// Deprecated: Use JSONSchema.ProtoReflect.Descriptor instead. +func (*JSONSchema) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{8} +} -func (m *JSONSchema) GetRef() string { - if m != nil { - return m.Ref +func (x *JSONSchema) GetRef() string { + if x != nil { + return x.Ref } return "" } -func (m *JSONSchema) GetTitle() string { - if m != nil { - return m.Title +func (x *JSONSchema) GetTitle() string { + if x != nil { + return x.Title } return "" } -func (m *JSONSchema) GetDescription() string { - if m != nil { - return m.Description +func (x *JSONSchema) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *JSONSchema) GetDefault() string { - if m != nil { - return m.Default +func (x *JSONSchema) GetDefault() string { + if x != nil { + return x.Default } return "" } -func (m *JSONSchema) GetReadOnly() bool { - if m != nil { - return m.ReadOnly +func (x *JSONSchema) GetReadOnly() bool { + if x != nil { + return x.ReadOnly } return false } -func (m *JSONSchema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf +func (x *JSONSchema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf } return 0 } -func (m *JSONSchema) GetMaximum() float64 { - if m != nil { - return m.Maximum +func (x *JSONSchema) GetMaximum() float64 { + if x != nil { + return x.Maximum } return 0 } -func (m *JSONSchema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum +func (x *JSONSchema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum } return false } -func (m *JSONSchema) GetMinimum() float64 { - if m != nil { - return m.Minimum +func (x *JSONSchema) GetMinimum() float64 { + if x != nil { + return x.Minimum } return 0 } -func (m *JSONSchema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum +func (x *JSONSchema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum } return false } -func (m *JSONSchema) GetMaxLength() uint64 { - if m != nil { - return m.MaxLength +func (x *JSONSchema) GetMaxLength() uint64 { + if x != nil { + return x.MaxLength } return 0 } -func (m *JSONSchema) GetMinLength() uint64 { - if m != nil { - return m.MinLength +func (x *JSONSchema) GetMinLength() uint64 { + if x != nil { + return x.MinLength } return 0 } -func (m *JSONSchema) GetPattern() string { - if m != nil { - return m.Pattern +func (x *JSONSchema) GetPattern() string { + if x != nil { + return x.Pattern } return "" } -func (m *JSONSchema) GetMaxItems() uint64 { - if m != nil { - return m.MaxItems +func (x *JSONSchema) GetMaxItems() uint64 { + if x != nil { + return x.MaxItems } return 0 } -func (m *JSONSchema) GetMinItems() uint64 { - if m != nil { - return m.MinItems +func (x *JSONSchema) GetMinItems() uint64 { + if x != nil { + return x.MinItems } return 0 } -func (m *JSONSchema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems +func (x *JSONSchema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems } return false } -func (m *JSONSchema) GetMaxProperties() uint64 { - if m != nil { - return m.MaxProperties +func (x *JSONSchema) GetMaxProperties() uint64 { + if x != nil { + return x.MaxProperties } return 0 } -func (m *JSONSchema) GetMinProperties() uint64 { - if m != nil { - return m.MinProperties +func (x *JSONSchema) GetMinProperties() uint64 { + if x != nil { + return x.MinProperties } return 0 } -func (m *JSONSchema) GetRequired() []string { - if m != nil { - return m.Required +func (x *JSONSchema) GetRequired() []string { + if x != nil { + return x.Required } return nil } -func (m *JSONSchema) GetArray() []string { - if m != nil { - return m.Array +func (x *JSONSchema) GetArray() []string { + if x != nil { + return x.Array } return nil } -func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { - if m != nil { - return m.Type +func (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { + if x != nil { + return x.Type } return nil } @@ -1097,50 +1279,58 @@ func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { // // TODO(ivucica): document fields type Tag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // TODO(ivucica): Description should be extracted from comments on the proto // service object. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` } -func (m *Tag) Reset() { *m = Tag{} } -func (m *Tag) String() string { return proto.CompactTextString(m) } -func (*Tag) ProtoMessage() {} -func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{9} +func (x *Tag) Reset() { + *x = Tag{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Tag) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Tag.Unmarshal(m, b) -} -func (m *Tag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Tag.Marshal(b, m, deterministic) +func (x *Tag) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Tag) XXX_Merge(src proto.Message) { - xxx_messageInfo_Tag.Merge(m, src) -} -func (m *Tag) XXX_Size() int { - return xxx_messageInfo_Tag.Size(m) -} -func (m *Tag) XXX_DiscardUnknown() { - xxx_messageInfo_Tag.DiscardUnknown(m) + +func (*Tag) ProtoMessage() {} + +func (x *Tag) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Tag proto.InternalMessageInfo +// Deprecated: Use Tag.ProtoReflect.Descriptor instead. +func (*Tag) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{9} +} -func (m *Tag) GetDescription() string { - if m != nil { - return m.Description +func (x *Tag) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Tag) GetExternalDocs() *ExternalDocumentation { - if m != nil { - return m.ExternalDocs +func (x *Tag) GetExternalDocs() *ExternalDocumentation { + if x != nil { + return x.ExternalDocs } return nil } @@ -1154,41 +1344,49 @@ func (m *Tag) GetExternalDocs() *ExternalDocumentation { // specification. This does not enforce the security schemes on the operations // and only serves to provide the relevant details for each scheme. type SecurityDefinitions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // A single security scheme definition, mapping a "name" to the scheme it defines. - Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } -func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } -func (*SecurityDefinitions) ProtoMessage() {} -func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{10} +func (x *SecurityDefinitions) Reset() { + *x = SecurityDefinitions{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) -} -func (m *SecurityDefinitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityDefinitions.Marshal(b, m, deterministic) +func (x *SecurityDefinitions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SecurityDefinitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityDefinitions.Merge(m, src) -} -func (m *SecurityDefinitions) XXX_Size() int { - return xxx_messageInfo_SecurityDefinitions.Size(m) -} -func (m *SecurityDefinitions) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityDefinitions.DiscardUnknown(m) + +func (*SecurityDefinitions) ProtoMessage() {} + +func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SecurityDefinitions proto.InternalMessageInfo +// Deprecated: Use SecurityDefinitions.ProtoReflect.Descriptor instead. +func (*SecurityDefinitions) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{10} +} -func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { - if m != nil { - return m.Security +func (x *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { + if x != nil { + return x.Security } return nil } @@ -1203,6 +1401,10 @@ func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { // a header or as a query parameter) and OAuth2's common flows (implicit, // password, application and access code). type SecurityScheme struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Required. The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` @@ -1234,97 +1436,101 @@ type SecurityScheme struct { // Required. The available scopes for the OAuth2 security scheme. // // Valid for oauth2. - Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *SecurityScheme) Reset() { *m = SecurityScheme{} } -func (m *SecurityScheme) String() string { return proto.CompactTextString(m) } -func (*SecurityScheme) ProtoMessage() {} -func (*SecurityScheme) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{11} +func (x *SecurityScheme) Reset() { + *x = SecurityScheme{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SecurityScheme) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityScheme.Unmarshal(m, b) -} -func (m *SecurityScheme) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityScheme.Marshal(b, m, deterministic) +func (x *SecurityScheme) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SecurityScheme) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityScheme.Merge(m, src) -} -func (m *SecurityScheme) XXX_Size() int { - return xxx_messageInfo_SecurityScheme.Size(m) -} -func (m *SecurityScheme) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityScheme.DiscardUnknown(m) + +func (*SecurityScheme) ProtoMessage() {} + +func (x *SecurityScheme) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SecurityScheme proto.InternalMessageInfo +// Deprecated: Use SecurityScheme.ProtoReflect.Descriptor instead. +func (*SecurityScheme) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11} +} -func (m *SecurityScheme) GetType() SecurityScheme_Type { - if m != nil { - return m.Type +func (x *SecurityScheme) GetType() SecurityScheme_Type { + if x != nil { + return x.Type } return SecurityScheme_TYPE_INVALID } -func (m *SecurityScheme) GetDescription() string { - if m != nil { - return m.Description +func (x *SecurityScheme) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *SecurityScheme) GetName() string { - if m != nil { - return m.Name +func (x *SecurityScheme) GetName() string { + if x != nil { + return x.Name } return "" } -func (m *SecurityScheme) GetIn() SecurityScheme_In { - if m != nil { - return m.In +func (x *SecurityScheme) GetIn() SecurityScheme_In { + if x != nil { + return x.In } return SecurityScheme_IN_INVALID } -func (m *SecurityScheme) GetFlow() SecurityScheme_Flow { - if m != nil { - return m.Flow +func (x *SecurityScheme) GetFlow() SecurityScheme_Flow { + if x != nil { + return x.Flow } return SecurityScheme_FLOW_INVALID } -func (m *SecurityScheme) GetAuthorizationUrl() string { - if m != nil { - return m.AuthorizationUrl +func (x *SecurityScheme) GetAuthorizationUrl() string { + if x != nil { + return x.AuthorizationUrl } return "" } -func (m *SecurityScheme) GetTokenUrl() string { - if m != nil { - return m.TokenUrl +func (x *SecurityScheme) GetTokenUrl() string { + if x != nil { + return x.TokenUrl } return "" } -func (m *SecurityScheme) GetScopes() *Scopes { - if m != nil { - return m.Scopes +func (x *SecurityScheme) GetScopes() *Scopes { + if x != nil { + return x.Scopes } return nil } -func (m *SecurityScheme) GetExtensions() map[string]*_struct.Value { - if m != nil { - return m.Extensions +func (x *SecurityScheme) GetExtensions() map[string]*_struct.Value { + if x != nil { + return x.Extensions } return nil } @@ -1341,90 +1547,52 @@ func (m *SecurityScheme) GetExtensions() map[string]*_struct.Value { // The name used for each property MUST correspond to a security scheme // declared in the Security Definitions. type SecurityRequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Each name must correspond to a security scheme which is declared in // the Security Definitions. If the security scheme is of type "oauth2", // then the value is a list of scope names required for the execution. // For other security scheme types, the array MUST be empty. - SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SecurityRequirement map[string]*SecurityRequirement_SecurityRequirementValue `protobuf:"bytes,1,rep,name=security_requirement,json=securityRequirement,proto3" json:"security_requirement,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } -func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } -func (*SecurityRequirement) ProtoMessage() {} -func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{12} +func (x *SecurityRequirement) Reset() { + *x = SecurityRequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) -} -func (m *SecurityRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityRequirement.Marshal(b, m, deterministic) -} -func (m *SecurityRequirement) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityRequirement.Merge(m, src) -} -func (m *SecurityRequirement) XXX_Size() int { - return xxx_messageInfo_SecurityRequirement.Size(m) -} -func (m *SecurityRequirement) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityRequirement.DiscardUnknown(m) +func (x *SecurityRequirement) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_SecurityRequirement proto.InternalMessageInfo +func (*SecurityRequirement) ProtoMessage() {} -func (m *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue { - if m != nil { - return m.SecurityRequirement +func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil -} - -// If the security scheme is of type "oauth2", then the value is a list of -// scope names required for the execution. For other security scheme types, -// the array MUST be empty. -type SecurityRequirement_SecurityRequirementValue struct { - Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + return mi.MessageOf(x) } -func (m *SecurityRequirement_SecurityRequirementValue) Reset() { - *m = SecurityRequirement_SecurityRequirementValue{} -} -func (m *SecurityRequirement_SecurityRequirementValue) String() string { - return proto.CompactTextString(m) -} -func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} -func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{12, 0} -} - -func (m *SecurityRequirement_SecurityRequirementValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Unmarshal(m, b) -} -func (m *SecurityRequirement_SecurityRequirementValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Marshal(b, m, deterministic) -} -func (m *SecurityRequirement_SecurityRequirementValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Merge(m, src) -} -func (m *SecurityRequirement_SecurityRequirementValue) XXX_Size() int { - return xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.Size(m) -} -func (m *SecurityRequirement_SecurityRequirementValue) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityRequirement_SecurityRequirementValue.DiscardUnknown(m) +// Deprecated: Use SecurityRequirement.ProtoReflect.Descriptor instead. +func (*SecurityRequirement) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{12} } -var xxx_messageInfo_SecurityRequirement_SecurityRequirementValue proto.InternalMessageInfo - -func (m *SecurityRequirement_SecurityRequirementValue) GetScope() []string { - if m != nil { - return m.Scope +func (x *SecurityRequirement) GetSecurityRequirement() map[string]*SecurityRequirement_SecurityRequirementValue { + if x != nil { + return x.SecurityRequirement } return nil } @@ -1435,204 +1603,805 @@ func (m *SecurityRequirement_SecurityRequirementValue) GetScope() []string { // // Lists the available scopes for an OAuth2 security scheme. type Scopes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Maps between a name of a scope to a short description of it (as the value // of the property). - Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Scope map[string]string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Scopes) Reset() { + *x = Scopes{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Scopes) Reset() { *m = Scopes{} } -func (m *Scopes) String() string { return proto.CompactTextString(m) } -func (*Scopes) ProtoMessage() {} +func (x *Scopes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Scopes) ProtoMessage() {} + +func (x *Scopes) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Scopes.ProtoReflect.Descriptor instead. func (*Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_ba35ad8af024fb48, []int{13} + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{13} } -func (m *Scopes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Scopes.Unmarshal(m, b) +func (x *Scopes) GetScope() map[string]string { + if x != nil { + return x.Scope + } + return nil } -func (m *Scopes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Scopes.Marshal(b, m, deterministic) + +// If the security scheme is of type "oauth2", then the value is a list of +// scope names required for the execution. For other security scheme types, +// the array MUST be empty. +type SecurityRequirement_SecurityRequirementValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Scope []string `protobuf:"bytes,1,rep,name=scope,proto3" json:"scope,omitempty"` } -func (m *Scopes) XXX_Merge(src proto.Message) { - xxx_messageInfo_Scopes.Merge(m, src) + +func (x *SecurityRequirement_SecurityRequirementValue) Reset() { + *x = SecurityRequirement_SecurityRequirementValue{} + if protoimpl.UnsafeEnabled { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Scopes) XXX_Size() int { - return xxx_messageInfo_Scopes.Size(m) + +func (x *SecurityRequirement_SecurityRequirementValue) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Scopes) XXX_DiscardUnknown() { - xxx_messageInfo_Scopes.DiscardUnknown(m) + +func (*SecurityRequirement_SecurityRequirementValue) ProtoMessage() {} + +func (x *SecurityRequirement_SecurityRequirementValue) ProtoReflect() protoreflect.Message { + mi := &file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Scopes proto.InternalMessageInfo +// Deprecated: Use SecurityRequirement_SecurityRequirementValue.ProtoReflect.Descriptor instead. +func (*SecurityRequirement_SecurityRequirementValue) Descriptor() ([]byte, []int) { + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{12, 0} +} -func (m *Scopes) GetScope() map[string]string { - if m != nil { - return m.Scope +func (x *SecurityRequirement_SecurityRequirementValue) GetScope() []string { + if x != nil { + return x.Scope } return nil } -func init() { - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme", Swagger_SwaggerScheme_name, Swagger_SwaggerScheme_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.JSONSchema_JSONSchemaSimpleTypes", JSONSchema_JSONSchemaSimpleTypes_name, JSONSchema_JSONSchemaSimpleTypes_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type", SecurityScheme_Type_name, SecurityScheme_Type_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In", SecurityScheme_In_name, SecurityScheme_In_value) - proto.RegisterEnum("grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow", SecurityScheme_Flow_name, SecurityScheme_Flow_value) - proto.RegisterType((*Swagger)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger") - proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry") - proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry") - proto.RegisterType((*Operation)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation") - proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry") - proto.RegisterMapType((map[string]*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry") - proto.RegisterType((*Response)(nil), "grpc.gateway.protoc_gen_swagger.options.Response") - proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.protoc_gen_swagger.options.Response.ExamplesEntry") - proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry") - proto.RegisterType((*Info)(nil), "grpc.gateway.protoc_gen_swagger.options.Info") - proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry") - proto.RegisterType((*Contact)(nil), "grpc.gateway.protoc_gen_swagger.options.Contact") - proto.RegisterType((*License)(nil), "grpc.gateway.protoc_gen_swagger.options.License") - proto.RegisterType((*ExternalDocumentation)(nil), "grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation") - proto.RegisterType((*Schema)(nil), "grpc.gateway.protoc_gen_swagger.options.Schema") - proto.RegisterType((*JSONSchema)(nil), "grpc.gateway.protoc_gen_swagger.options.JSONSchema") - proto.RegisterType((*Tag)(nil), "grpc.gateway.protoc_gen_swagger.options.Tag") - proto.RegisterType((*SecurityDefinitions)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions") - proto.RegisterMapType((map[string]*SecurityScheme)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.SecurityEntry") - proto.RegisterType((*SecurityScheme)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityScheme") - proto.RegisterMapType((map[string]*_struct.Value)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityScheme.ExtensionsEntry") - proto.RegisterType((*SecurityRequirement)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement") - proto.RegisterMapType((map[string]*SecurityRequirement_SecurityRequirementValue)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementEntry") - proto.RegisterType((*SecurityRequirement_SecurityRequirementValue)(nil), "grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementValue") - proto.RegisterType((*Scopes)(nil), "grpc.gateway.protoc_gen_swagger.options.Scopes") - proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.protoc_gen_swagger.options.Scopes.ScopeEntry") -} - -func init() { - proto.RegisterFile("protoc-gen-swagger/options/openapiv2.proto", fileDescriptor_ba35ad8af024fb48) -} - -var fileDescriptor_ba35ad8af024fb48 = []byte{ - // 1913 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x5b, 0x73, 0x1a, 0xd7, - 0x1d, 0xcf, 0xc2, 0x02, 0xcb, 0x1f, 0x81, 0x8f, 0x8f, 0xe5, 0x74, 0x43, 0x6c, 0x57, 0xa1, 0xe9, - 0x54, 0x63, 0xd7, 0x28, 0x51, 0x1e, 0x9a, 0x49, 0xaf, 0x48, 0xc2, 0xf2, 0xae, 0x65, 0xa0, 0x0b, - 0x8a, 0xe2, 0x76, 0x3c, 0xdb, 0xd5, 0x72, 0x40, 0x1b, 0xef, 0x85, 0xec, 0x45, 0x12, 0xfd, 0x04, - 0x7d, 0xee, 0xf4, 0x35, 0xdf, 0xa3, 0x0f, 0x7d, 0xea, 0x17, 0x68, 0x3f, 0x4b, 0x3b, 0x7d, 0xef, - 0x9c, 0xcb, 0xc2, 0x22, 0x61, 0x0f, 0xc8, 0x71, 0xfb, 0x90, 0x27, 0xce, 0xff, 0xf6, 0x3b, 0x97, - 0xff, 0xed, 0x9c, 0x05, 0x1e, 0x4e, 0xc2, 0x20, 0x0e, 0xec, 0xc7, 0x63, 0xe2, 0x3f, 0x8e, 0x2e, - 0xac, 0xf1, 0x98, 0x84, 0x3b, 0xc1, 0x24, 0x76, 0x02, 0x3f, 0xda, 0x09, 0x26, 0xc4, 0xb7, 0x26, - 0xce, 0xf9, 0x6e, 0x93, 0x29, 0xe1, 0x9f, 0x8c, 0xc3, 0x89, 0xdd, 0x1c, 0x5b, 0x31, 0xb9, 0xb0, - 0xa6, 0x9c, 0x67, 0x9b, 0x63, 0xe2, 0x9b, 0xc2, 0xb0, 0x29, 0x0c, 0xeb, 0x1f, 0x8c, 0x83, 0x60, - 0xec, 0x92, 0x1d, 0xa6, 0x72, 0x9a, 0x8c, 0x76, 0x2c, 0x5f, 0xe8, 0xd7, 0xef, 0x5d, 0x15, 0x45, - 0x71, 0x98, 0xd8, 0x31, 0x97, 0x36, 0xfe, 0xaa, 0x40, 0xa9, 0xcf, 0xc1, 0xb0, 0x0a, 0x25, 0x81, - 0xab, 0x4a, 0x5b, 0xd2, 0x76, 0xd9, 0x48, 0x49, 0xdc, 0x02, 0xd9, 0xf1, 0x47, 0x81, 0x9a, 0xdb, - 0x92, 0xb6, 0x2b, 0xbb, 0x8f, 0x9b, 0x2b, 0x2e, 0xab, 0xa9, 0xf9, 0xa3, 0xc0, 0x60, 0xa6, 0x18, - 0x83, 0x7c, 0x16, 0x44, 0xb1, 0x9a, 0x67, 0xc8, 0x6c, 0x8c, 0x3f, 0x84, 0xf2, 0xa9, 0x15, 0x11, - 0x73, 0x62, 0xc5, 0x67, 0xaa, 0xcc, 0x04, 0x0a, 0x65, 0xf4, 0xac, 0xf8, 0x0c, 0x7f, 0x05, 0xa5, - 0xc8, 0x3e, 0x23, 0x1e, 0x89, 0xd4, 0xc2, 0x56, 0x7e, 0xbb, 0xb6, 0xfb, 0xab, 0x95, 0xa7, 0x15, - 0x1b, 0x4a, 0x7f, 0xfb, 0x0c, 0xc6, 0x48, 0xe1, 0x70, 0x1d, 0x14, 0x3b, 0xf0, 0xa3, 0x84, 0x42, - 0x17, 0xb7, 0xf2, 0x74, 0xd6, 0x94, 0xa6, 0xb2, 0x49, 0x18, 0x0c, 0x13, 0x9b, 0x44, 0x6a, 0x89, - 0xcb, 0x52, 0x1a, 0xbf, 0x84, 0x72, 0x48, 0xa2, 0x49, 0xe0, 0x47, 0x24, 0x52, 0x61, 0x2b, 0xbf, - 0x5d, 0xd9, 0xfd, 0xf5, 0xda, 0x6b, 0x32, 0x52, 0x84, 0xb6, 0x1f, 0x87, 0x53, 0x63, 0x8e, 0x88, - 0x03, 0xd8, 0x8c, 0x88, 0x9d, 0x84, 0x4e, 0x3c, 0x35, 0x87, 0x64, 0xe4, 0xf8, 0x0e, 0xb3, 0x54, - 0x2b, 0xec, 0xd0, 0x7f, 0xb1, 0xfa, 0x4c, 0x02, 0xe4, 0x60, 0x8e, 0x61, 0xdc, 0x89, 0xae, 0x33, - 0xf1, 0x57, 0xa0, 0xa4, 0x6c, 0x75, 0x83, 0x6d, 0x67, 0xfd, 0x49, 0x0c, 0xf2, 0x4d, 0xe2, 0x84, - 0xc4, 0x23, 0x7e, 0x6c, 0xcc, 0xd0, 0xb0, 0x0d, 0x55, 0x72, 0x19, 0x93, 0xd0, 0xb7, 0x5c, 0x73, - 0x18, 0xd8, 0x91, 0x5a, 0x63, 0x7b, 0x58, 0xdd, 0x83, 0x6d, 0x61, 0x7d, 0x10, 0xd8, 0x09, 0xc5, - 0xb6, 0x28, 0xdb, 0xd8, 0x20, 0x73, 0x76, 0x84, 0xff, 0x00, 0x40, 0x69, 0x3f, 0x62, 0xa7, 0x74, - 0x8b, 0x6d, 0xe0, 0x37, 0x6b, 0xfb, 0xa3, 0x3d, 0x83, 0xe0, 0x0e, 0xc9, 0x60, 0xd6, 0x03, 0xa8, - 0x2d, 0xba, 0x0b, 0x23, 0xc8, 0xbf, 0x22, 0x53, 0x91, 0x1e, 0x74, 0x88, 0x0f, 0xa1, 0x70, 0x6e, - 0xb9, 0x09, 0x11, 0xb9, 0xf1, 0xe9, 0xca, 0x0b, 0x48, 0x91, 0x0d, 0x6e, 0xff, 0x45, 0xee, 0x73, - 0xa9, 0x7e, 0x0c, 0xb7, 0xae, 0xac, 0x67, 0xc9, 0x8c, 0x3f, 0x5d, 0x9c, 0xf1, 0xfd, 0x26, 0x4f, - 0xf0, 0x66, 0x9a, 0xe0, 0xcd, 0x2f, 0xa9, 0x34, 0x03, 0xdb, 0xd8, 0x83, 0xea, 0x42, 0x2a, 0xe0, - 0x0a, 0x94, 0x8e, 0x3b, 0xcf, 0x3a, 0xdd, 0x93, 0x0e, 0x7a, 0x0f, 0x2b, 0x20, 0x3f, 0x1d, 0x0c, - 0x7a, 0x48, 0xc2, 0x65, 0x28, 0xd0, 0x51, 0x1f, 0xe5, 0x70, 0x11, 0x72, 0x27, 0x7d, 0x94, 0xc7, - 0x25, 0xc8, 0x9f, 0xf4, 0xfb, 0x48, 0xd6, 0x65, 0x45, 0x41, 0x65, 0x5d, 0x56, 0xca, 0x08, 0x74, - 0x59, 0xa9, 0xa2, 0x5a, 0xe3, 0xef, 0x45, 0x28, 0x77, 0x27, 0x24, 0x64, 0xbe, 0xa1, 0xf9, 0x1d, - 0x5b, 0xe3, 0x48, 0x95, 0x58, 0xd2, 0xb0, 0x31, 0x2b, 0x28, 0x89, 0xe7, 0x59, 0xe1, 0x94, 0xad, - 0x95, 0x16, 0x14, 0x4e, 0xe2, 0x2d, 0xa8, 0x0c, 0x49, 0x64, 0x87, 0x0e, 0x3b, 0x0c, 0x51, 0x14, - 0xb2, 0xac, 0xeb, 0x21, 0x24, 0xbf, 0x83, 0x10, 0xfa, 0x08, 0x36, 0x82, 0x74, 0x07, 0xa6, 0x33, - 0x54, 0x0b, 0x7c, 0x1d, 0x33, 0x9e, 0x36, 0xbc, 0x71, 0xb1, 0x30, 0xb3, 0xc5, 0xa2, 0xcc, 0x82, - 0xb3, 0xb5, 0xf2, 0xda, 0x67, 0xc7, 0xfa, 0x86, 0x72, 0xa1, 0xce, 0xeb, 0x23, 0xb0, 0xb9, 0x67, - 0xf5, 0xed, 0x01, 0xc0, 0x90, 0x4c, 0x42, 0x62, 0x5b, 0x31, 0x19, 0xb2, 0xf2, 0xa1, 0x18, 0x19, - 0xce, 0x3b, 0xcc, 0xfb, 0xd3, 0x85, 0x94, 0xac, 0x32, 0xec, 0xbd, 0x1b, 0xec, 0xfa, 0x7b, 0x90, - 0x94, 0x3c, 0xa1, 0x1a, 0xff, 0xc8, 0x83, 0x92, 0x4e, 0x7a, 0x35, 0x2b, 0xa4, 0xeb, 0x59, 0x71, - 0x08, 0x45, 0xe6, 0x65, 0x4b, 0xcc, 0xb3, 0xb3, 0xba, 0xe3, 0x98, 0x99, 0x21, 0xcc, 0xf1, 0xef, - 0x41, 0x21, 0x97, 0x96, 0x37, 0x71, 0x09, 0xcd, 0xac, 0xf5, 0x5a, 0x59, 0xba, 0xde, 0x66, 0x5b, - 0x20, 0x70, 0x27, 0xcd, 0x00, 0xb1, 0xb5, 0x10, 0x06, 0x85, 0x35, 0x83, 0x3f, 0x03, 0xff, 0xfa, - 0x28, 0xf8, 0x39, 0x54, 0x17, 0x66, 0x5f, 0xe2, 0x92, 0xcd, 0xac, 0x4b, 0xca, 0xff, 0x13, 0x8f, - 0xe6, 0x91, 0xdc, 0xf8, 0x67, 0x1e, 0x64, 0x7a, 0xef, 0xa1, 0xf3, 0xc7, 0x4e, 0xec, 0x12, 0x01, - 0xca, 0x89, 0xab, 0x3e, 0xce, 0x5d, 0xf7, 0xf1, 0x36, 0xa0, 0x98, 0x84, 0x5e, 0x64, 0x06, 0x23, - 0x33, 0x22, 0xe1, 0xb9, 0x63, 0x13, 0x51, 0x20, 0x6b, 0x8c, 0xdf, 0x1d, 0xf5, 0x39, 0x17, 0xeb, - 0x50, 0xb2, 0x03, 0x3f, 0xb6, 0xec, 0x58, 0x54, 0xc7, 0x4f, 0x56, 0x3e, 0xe4, 0x7d, 0x6e, 0x67, - 0xa4, 0x00, 0x14, 0xcb, 0x75, 0x6c, 0xe2, 0x47, 0x84, 0x55, 0xc1, 0x75, 0xb0, 0x8e, 0xb8, 0x9d, - 0x91, 0x02, 0xd0, 0xd2, 0x74, 0x4e, 0x42, 0x7a, 0xba, 0x6a, 0x91, 0xd7, 0x7d, 0x41, 0xe2, 0x97, - 0x0b, 0x91, 0x51, 0x62, 0x91, 0xf1, 0xcb, 0xb5, 0xae, 0x93, 0x6f, 0x8c, 0x8a, 0x77, 0xd4, 0x3f, - 0xdb, 0x50, 0x12, 0xe7, 0x45, 0xdb, 0x9c, 0x6f, 0x79, 0xa9, 0x4f, 0xd9, 0x98, 0x4e, 0x91, 0x84, - 0xae, 0x70, 0x25, 0x1d, 0x52, 0xd7, 0x13, 0xcf, 0x72, 0x5c, 0xe1, 0x37, 0x4e, 0x34, 0x76, 0xa0, - 0x24, 0x8e, 0x6a, 0x35, 0x98, 0xc6, 0x33, 0xb8, 0xbb, 0xb4, 0x8b, 0xad, 0x50, 0x28, 0xae, 0x83, - 0xfd, 0x2d, 0x07, 0x45, 0x5e, 0x04, 0xf0, 0x00, 0x2a, 0x5f, 0x47, 0x81, 0x6f, 0x8a, 0x52, 0x22, - 0xb1, 0x73, 0xf8, 0x6c, 0x65, 0x37, 0xe8, 0xfd, 0x6e, 0x47, 0x94, 0x13, 0xa0, 0x38, 0x02, 0xf5, - 0x63, 0xa8, 0x0e, 0x1d, 0xba, 0x02, 0xcf, 0xf1, 0xad, 0x38, 0x08, 0xc5, 0xe4, 0x8b, 0x4c, 0x7a, - 0xe7, 0x0f, 0x89, 0x35, 0x34, 0x03, 0xdf, 0x9d, 0xb2, 0xe3, 0x51, 0x0c, 0x85, 0x32, 0xba, 0xbe, - 0xbb, 0xe4, 0xde, 0x58, 0x78, 0x07, 0x4d, 0xbf, 0x09, 0x25, 0x51, 0xa9, 0x58, 0x74, 0x56, 0x76, - 0x37, 0xaf, 0x45, 0x40, 0xcb, 0x9f, 0x1a, 0xa9, 0x92, 0x2e, 0x2b, 0x32, 0x2a, 0x34, 0xbe, 0x2d, - 0x01, 0xcc, 0x37, 0x4e, 0xcf, 0x37, 0x24, 0x23, 0xe1, 0x5f, 0x3a, 0x9c, 0xa7, 0x7b, 0xe1, 0x0d, - 0xe9, 0x5e, 0xbc, 0xee, 0x29, 0x15, 0x4a, 0x43, 0x32, 0xb2, 0x12, 0x37, 0x56, 0x4b, 0x3c, 0x59, - 0x04, 0xb9, 0x78, 0x54, 0xca, 0x95, 0xa3, 0xfa, 0x21, 0x54, 0xbc, 0xc4, 0x8d, 0x9d, 0x89, 0x4b, - 0xcc, 0x60, 0xa4, 0xc2, 0x96, 0xb4, 0x2d, 0x19, 0x90, 0xb2, 0xba, 0x23, 0x8a, 0xeb, 0x59, 0x97, - 0x8e, 0x97, 0x78, 0xec, 0x0a, 0x20, 0x19, 0x29, 0x89, 0x1f, 0xc1, 0x6d, 0x72, 0x69, 0xbb, 0x49, - 0xe4, 0x9c, 0x13, 0x33, 0xd5, 0xd9, 0x60, 0xf8, 0x68, 0x26, 0x78, 0x2e, 0x94, 0x29, 0x8c, 0xe3, - 0x33, 0x95, 0xaa, 0x80, 0xe1, 0xe4, 0x15, 0x18, 0xa1, 0x53, 0xbb, 0x0a, 0x23, 0x94, 0xef, 0x03, - 0x78, 0xd6, 0xa5, 0xe9, 0x12, 0x7f, 0x1c, 0x9f, 0xa9, 0xb7, 0xb6, 0xa4, 0x6d, 0xd9, 0x28, 0x7b, - 0xd6, 0xe5, 0x11, 0x63, 0x30, 0xb1, 0xe3, 0xa7, 0x62, 0x24, 0xc4, 0x8e, 0x2f, 0xc4, 0x2a, 0x94, - 0x26, 0x56, 0x4c, 0x7d, 0xa8, 0xde, 0xe6, 0x67, 0x24, 0x48, 0x7a, 0x46, 0x14, 0xd7, 0x89, 0x89, - 0x17, 0xa9, 0x9b, 0xcc, 0x4e, 0xf1, 0xac, 0x4b, 0x8d, 0xd2, 0x4c, 0xe8, 0xf8, 0x42, 0x78, 0x57, - 0x08, 0x1d, 0x9f, 0x0b, 0x3f, 0x82, 0x8d, 0xc4, 0x77, 0xbe, 0x49, 0x88, 0x90, 0xbf, 0xcf, 0x56, - 0x5e, 0xe1, 0x3c, 0xae, 0xf2, 0x63, 0xa8, 0x51, 0xf0, 0x49, 0x48, 0x2f, 0x84, 0xb1, 0x43, 0x22, - 0x55, 0x65, 0x20, 0x55, 0xcf, 0xba, 0xec, 0xcd, 0x98, 0x4c, 0xcd, 0xf1, 0xb3, 0x6a, 0x1f, 0x08, - 0x35, 0xc7, 0xcf, 0xa8, 0xd5, 0x41, 0x09, 0xf9, 0xad, 0x69, 0xa8, 0xd6, 0xf9, 0x6d, 0x31, 0xa5, - 0x69, 0xf0, 0x58, 0x61, 0x68, 0x4d, 0xd5, 0x06, 0x13, 0x70, 0x02, 0xbf, 0x04, 0x39, 0x9e, 0x4e, - 0x88, 0xfa, 0x23, 0xf6, 0xfe, 0xd5, 0x6e, 0x90, 0xa0, 0x99, 0x61, 0xdf, 0xa1, 0xd1, 0x3c, 0x98, - 0x4e, 0x48, 0x64, 0x30, 0xd8, 0xc6, 0x05, 0xdc, 0x5d, 0x2a, 0x5e, 0x7c, 0x1e, 0x94, 0xa1, 0xd0, - 0x32, 0x8c, 0xd6, 0x0b, 0x24, 0x51, 0xfe, 0x5e, 0xb7, 0x7b, 0xd4, 0x6e, 0x75, 0x50, 0x8e, 0x12, - 0x5a, 0x67, 0xd0, 0x3e, 0x6c, 0x1b, 0x28, 0x4f, 0xdf, 0x10, 0x9d, 0xe3, 0xa3, 0x23, 0x24, 0x63, - 0x80, 0x62, 0xe7, 0xf8, 0xf9, 0x5e, 0xdb, 0x40, 0x05, 0x3a, 0xee, 0xee, 0xe9, 0xed, 0xfd, 0x01, - 0x2a, 0xd2, 0x71, 0x7f, 0x60, 0x68, 0x9d, 0x43, 0x54, 0xd2, 0x65, 0x45, 0x42, 0x39, 0x5d, 0x56, - 0x72, 0x28, 0xcf, 0xb3, 0x6b, 0xf6, 0xae, 0xc0, 0xe8, 0x8e, 0x2e, 0x2b, 0x77, 0xd0, 0xa6, 0x2e, - 0x2b, 0x3f, 0x40, 0xaa, 0x2e, 0x2b, 0x1f, 0xa2, 0x7b, 0xba, 0xac, 0xdc, 0x43, 0xf7, 0x75, 0x59, - 0xb9, 0x8f, 0x1e, 0xe8, 0xb2, 0xf2, 0x00, 0x35, 0x74, 0x59, 0xf9, 0x18, 0x3d, 0xd4, 0x65, 0xe5, - 0x21, 0x7a, 0xa4, 0xcb, 0xca, 0x23, 0xd4, 0x6c, 0xfc, 0x59, 0x82, 0xfc, 0xc0, 0x1a, 0xaf, 0xd0, - 0x5f, 0xaf, 0x15, 0x99, 0xfc, 0x77, 0x5f, 0x64, 0xf8, 0x16, 0x1b, 0xff, 0x96, 0xe0, 0xce, 0x92, - 0xe7, 0x38, 0x1e, 0x65, 0x6e, 0xe0, 0x12, 0x6b, 0x82, 0xfa, 0xdb, 0x3c, 0xef, 0x67, 0x3c, 0x71, - 0x11, 0x4b, 0xb1, 0xeb, 0x31, 0x54, 0x17, 0x44, 0x4b, 0xba, 0xe1, 0xf3, 0xc5, 0x6e, 0xf8, 0xb3, - 0xb5, 0xd7, 0x21, 0xbe, 0xae, 0x64, 0xda, 0xe5, 0x7f, 0x8a, 0x50, 0x5b, 0x94, 0xe2, 0x9e, 0x88, - 0x64, 0x3a, 0x71, 0xed, 0x06, 0xcf, 0x0d, 0x0e, 0xd3, 0xa4, 0xe1, 0xc9, 0x83, 0x77, 0x05, 0x3f, - 0xa7, 0x3d, 0x36, 0x9f, 0xe9, 0xb1, 0x3a, 0xe4, 0x1c, 0x9f, 0x5d, 0x96, 0x6a, 0xbb, 0x5f, 0xdc, - 0x74, 0x15, 0x9a, 0x6f, 0xe4, 0x1c, 0x9f, 0xee, 0x69, 0xe4, 0x06, 0x17, 0xac, 0xde, 0xbf, 0xc5, - 0x9e, 0x9e, 0xb8, 0xc1, 0x85, 0xc1, 0x90, 0x68, 0x45, 0xb5, 0x92, 0xf8, 0x2c, 0x08, 0x9d, 0x3f, - 0xf2, 0x27, 0x29, 0x6d, 0xe1, 0xbc, 0x65, 0xa0, 0x05, 0xc1, 0x71, 0xe8, 0xd2, 0xe2, 0x16, 0x07, - 0xaf, 0x08, 0x57, 0xe2, 0x9d, 0x43, 0x61, 0x0c, 0x2a, 0x64, 0xef, 0x84, 0x60, 0x42, 0x22, 0xd6, - 0x37, 0xd6, 0x7b, 0x27, 0x50, 0x33, 0x43, 0x98, 0xe3, 0xf1, 0xc2, 0x85, 0x8d, 0xbf, 0x63, 0x0f, - 0x6f, 0xba, 0xd5, 0xff, 0xc3, 0xd5, 0xed, 0x19, 0xc8, 0x34, 0x68, 0x30, 0x82, 0x8d, 0xc1, 0x8b, - 0x5e, 0xdb, 0xd4, 0x3a, 0x5f, 0xb6, 0x8e, 0xb4, 0x03, 0xf4, 0x1e, 0xae, 0x01, 0x30, 0xce, 0x5e, - 0xab, 0xaf, 0xed, 0x23, 0x69, 0xa6, 0xd1, 0xea, 0x69, 0xe6, 0xb3, 0xf6, 0x0b, 0x94, 0xc3, 0xb7, - 0xa0, 0xc2, 0x38, 0xdd, 0xd6, 0xf1, 0xe0, 0xe9, 0x2e, 0xca, 0x37, 0x3e, 0x85, 0x9c, 0xe6, 0x53, - 0x43, 0xad, 0x93, 0x01, 0xda, 0x00, 0x45, 0xeb, 0x98, 0xbf, 0x3d, 0x6e, 0x1b, 0xb4, 0x46, 0x56, - 0xa1, 0xac, 0x75, 0xcc, 0xa7, 0xed, 0xd6, 0x41, 0xdb, 0x40, 0xb9, 0xc6, 0xd7, 0x20, 0x53, 0x07, - 0x53, 0xf4, 0x27, 0x47, 0xdd, 0x93, 0x8c, 0xd9, 0x6d, 0xa8, 0x72, 0xce, 0xf3, 0xde, 0x91, 0xb6, - 0xaf, 0x0d, 0x90, 0x34, 0x63, 0xf5, 0x5a, 0xfd, 0xfe, 0x49, 0xd7, 0x38, 0x40, 0x39, 0xbc, 0x09, - 0x88, 0xb1, 0x5a, 0x3d, 0xaa, 0xd5, 0x1a, 0x68, 0xdd, 0x0e, 0xca, 0xcf, 0xb9, 0xfb, 0xfb, 0xed, - 0x7e, 0xdf, 0xdc, 0xef, 0x1e, 0xb4, 0x91, 0xdc, 0xf8, 0x57, 0x6e, 0x5e, 0x6d, 0x32, 0xef, 0x73, - 0xfc, 0x27, 0x29, 0xf3, 0x65, 0x31, 0x9c, 0x0b, 0x44, 0xe9, 0x39, 0x7e, 0x9b, 0xc7, 0xff, 0x32, - 0x1e, 0x77, 0xee, 0xec, 0x93, 0x63, 0x46, 0x52, 0xff, 0x04, 0xd4, 0x25, 0x06, 0xcc, 0x6b, 0xb4, - 0x07, 0xb2, 0xa0, 0x13, 0x9f, 0x90, 0x38, 0x51, 0xff, 0x56, 0x5a, 0x6a, 0xf2, 0xba, 0x08, 0x79, - 0xb5, 0x18, 0x21, 0xdf, 0xf9, 0xde, 0xae, 0x05, 0xd8, 0x5f, 0x24, 0x7a, 0xad, 0x66, 0xb9, 0xd2, - 0xcb, 0x6e, 0xa0, 0xb2, 0x4e, 0x7d, 0x61, 0xf6, 0xfc, 0x87, 0x1f, 0x9e, 0xd8, 0xfc, 0xe7, 0x00, - 0x73, 0xe6, 0x3a, 0x4f, 0xdc, 0xbd, 0x27, 0xbf, 0x3b, 0x18, 0x3b, 0xf1, 0x59, 0x72, 0xda, 0xb4, - 0x03, 0x6f, 0x87, 0x2e, 0xe4, 0x31, 0xb1, 0x83, 0x68, 0x1a, 0xc5, 0x44, 0x90, 0x62, 0x5d, 0x3b, - 0xe7, 0xbb, 0x3b, 0xaf, 0xff, 0x47, 0xe2, 0xb4, 0xc8, 0x64, 0x9f, 0xfd, 0x37, 0x00, 0x00, 0xff, - 0xff, 0x7d, 0x3e, 0x75, 0xef, 0xb6, 0x18, 0x00, 0x00, +var File_protoc_gen_swagger_options_openapiv2_proto protoreflect.FileDescriptor + +var file_protoc_gen_swagger_options_openapiv2_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, + 0x08, 0x0a, 0x07, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x58, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x53, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x6f, 0x0a, 0x14, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x08, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x12, 0x63, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x60, 0x0a, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x6f, 0x0a, 0x0e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x42, 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x48, + 0x54, 0x54, 0x50, 0x53, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x57, 0x53, 0x10, 0x03, 0x12, 0x07, + 0x0a, 0x03, 0x57, 0x53, 0x53, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, + 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x22, 0xc2, 0x06, 0x0a, 0x09, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x63, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x58, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, + 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x62, 0x0a, 0x0a, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, + 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x6f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xcf, + 0x03, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5b, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0xd0, 0x03, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x65, 0x72, + 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x4a, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, + 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, + 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x2f, 0x0a, 0x07, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x4b, 0x0a, 0x15, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xbc, 0x02, 0x0a, 0x06, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x54, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x0a, 0x6a, + 0x73, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, + 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x63, 0x0a, 0x0d, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, + 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x9d, 0x07, 0x0a, 0x0a, 0x4a, 0x53, 0x4f, 0x4e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, + 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, + 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, + 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x22, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x5d, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4a, + 0x53, 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x77, 0x0a, 0x15, 0x4a, 0x53, + 0x4f, 0x4e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x41, 0x52, 0x52, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x42, + 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x54, 0x45, + 0x47, 0x45, 0x52, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, + 0x0a, 0x0a, 0x06, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4f, + 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, + 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x12, 0x10, + 0x13, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x17, 0x10, 0x18, 0x4a, 0x04, 0x08, + 0x1b, 0x10, 0x1c, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x1d, 0x10, 0x1e, 0x4a, + 0x04, 0x08, 0x1e, 0x10, 0x22, 0x4a, 0x04, 0x08, 0x24, 0x10, 0x2a, 0x4a, 0x04, 0x08, 0x2a, 0x10, + 0x2b, 0x4a, 0x04, 0x08, 0x2b, 0x10, 0x2e, 0x22, 0x92, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x63, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, + 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, + 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf3, 0x01, 0x0a, + 0x13, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, + 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x74, 0x0a, 0x0d, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, + 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xf5, 0x06, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x50, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, + 0x02, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x2e, 0x49, 0x6e, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x50, 0x0a, 0x04, 0x66, 0x6c, 0x6f, + 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, + 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x2e, 0x46, 0x6c, 0x6f, 0x77, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x2b, 0x0a, 0x11, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x47, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, + 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x67, + 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x55, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, + 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x41, 0x50, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x03, 0x22, 0x31, 0x0a, 0x02, 0x49, + 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, + 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x5f, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x22, 0x6a, + 0x0a, 0x04, 0x46, 0x6c, 0x6f, 0x77, 0x12, 0x10, 0x0a, 0x0c, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x49, + 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x4c, 0x4f, 0x57, + 0x5f, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x46, + 0x4c, 0x4f, 0x57, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x02, 0x12, 0x14, + 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x04, 0x22, 0xf2, 0x02, 0x0a, 0x13, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x88, 0x01, 0x0a, 0x14, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x55, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x30, 0x0a, + 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, + 0x9d, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x6b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x55, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x94, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x5f, + 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2e, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x1a, 0x38, 0x0a, 0x0a, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, + 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_protoc_gen_swagger_options_openapiv2_proto_rawDescOnce sync.Once + file_protoc_gen_swagger_options_openapiv2_proto_rawDescData = file_protoc_gen_swagger_options_openapiv2_proto_rawDesc +) + +func file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP() []byte { + file_protoc_gen_swagger_options_openapiv2_proto_rawDescOnce.Do(func() { + file_protoc_gen_swagger_options_openapiv2_proto_rawDescData = protoimpl.X.CompressGZIP(file_protoc_gen_swagger_options_openapiv2_proto_rawDescData) + }) + return file_protoc_gen_swagger_options_openapiv2_proto_rawDescData +} + +var file_protoc_gen_swagger_options_openapiv2_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_protoc_gen_swagger_options_openapiv2_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_protoc_gen_swagger_options_openapiv2_proto_goTypes = []interface{}{ + (Swagger_SwaggerScheme)(0), // 0: grpc.gateway.protoc_gen_swagger.options.Swagger.SwaggerScheme + (JSONSchema_JSONSchemaSimpleTypes)(0), // 1: grpc.gateway.protoc_gen_swagger.options.JSONSchema.JSONSchemaSimpleTypes + (SecurityScheme_Type)(0), // 2: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.Type + (SecurityScheme_In)(0), // 3: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.In + (SecurityScheme_Flow)(0), // 4: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.Flow + (*Swagger)(nil), // 5: grpc.gateway.protoc_gen_swagger.options.Swagger + (*Operation)(nil), // 6: grpc.gateway.protoc_gen_swagger.options.Operation + (*Response)(nil), // 7: grpc.gateway.protoc_gen_swagger.options.Response + (*Info)(nil), // 8: grpc.gateway.protoc_gen_swagger.options.Info + (*Contact)(nil), // 9: grpc.gateway.protoc_gen_swagger.options.Contact + (*License)(nil), // 10: grpc.gateway.protoc_gen_swagger.options.License + (*ExternalDocumentation)(nil), // 11: grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation + (*Schema)(nil), // 12: grpc.gateway.protoc_gen_swagger.options.Schema + (*JSONSchema)(nil), // 13: grpc.gateway.protoc_gen_swagger.options.JSONSchema + (*Tag)(nil), // 14: grpc.gateway.protoc_gen_swagger.options.Tag + (*SecurityDefinitions)(nil), // 15: grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions + (*SecurityScheme)(nil), // 16: grpc.gateway.protoc_gen_swagger.options.SecurityScheme + (*SecurityRequirement)(nil), // 17: grpc.gateway.protoc_gen_swagger.options.SecurityRequirement + (*Scopes)(nil), // 18: grpc.gateway.protoc_gen_swagger.options.Scopes + nil, // 19: grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry + nil, // 20: grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry + nil, // 21: grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry + nil, // 22: grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry + nil, // 23: grpc.gateway.protoc_gen_swagger.options.Response.ExamplesEntry + nil, // 24: grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry + nil, // 25: grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry + nil, // 26: grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.SecurityEntry + nil, // 27: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.ExtensionsEntry + (*SecurityRequirement_SecurityRequirementValue)(nil), // 28: grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementValue + nil, // 29: grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementEntry + nil, // 30: grpc.gateway.protoc_gen_swagger.options.Scopes.ScopeEntry + (*any.Any)(nil), // 31: google.protobuf.Any + (*_struct.Value)(nil), // 32: google.protobuf.Value +} +var file_protoc_gen_swagger_options_openapiv2_proto_depIdxs = []int32{ + 8, // 0: grpc.gateway.protoc_gen_swagger.options.Swagger.info:type_name -> grpc.gateway.protoc_gen_swagger.options.Info + 0, // 1: grpc.gateway.protoc_gen_swagger.options.Swagger.schemes:type_name -> grpc.gateway.protoc_gen_swagger.options.Swagger.SwaggerScheme + 19, // 2: grpc.gateway.protoc_gen_swagger.options.Swagger.responses:type_name -> grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry + 15, // 3: grpc.gateway.protoc_gen_swagger.options.Swagger.security_definitions:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions + 17, // 4: grpc.gateway.protoc_gen_swagger.options.Swagger.security:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityRequirement + 11, // 5: grpc.gateway.protoc_gen_swagger.options.Swagger.external_docs:type_name -> grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation + 20, // 6: grpc.gateway.protoc_gen_swagger.options.Swagger.extensions:type_name -> grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry + 11, // 7: grpc.gateway.protoc_gen_swagger.options.Operation.external_docs:type_name -> grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation + 21, // 8: grpc.gateway.protoc_gen_swagger.options.Operation.responses:type_name -> grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry + 17, // 9: grpc.gateway.protoc_gen_swagger.options.Operation.security:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityRequirement + 22, // 10: grpc.gateway.protoc_gen_swagger.options.Operation.extensions:type_name -> grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry + 12, // 11: grpc.gateway.protoc_gen_swagger.options.Response.schema:type_name -> grpc.gateway.protoc_gen_swagger.options.Schema + 23, // 12: grpc.gateway.protoc_gen_swagger.options.Response.examples:type_name -> grpc.gateway.protoc_gen_swagger.options.Response.ExamplesEntry + 24, // 13: grpc.gateway.protoc_gen_swagger.options.Response.extensions:type_name -> grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry + 9, // 14: grpc.gateway.protoc_gen_swagger.options.Info.contact:type_name -> grpc.gateway.protoc_gen_swagger.options.Contact + 10, // 15: grpc.gateway.protoc_gen_swagger.options.Info.license:type_name -> grpc.gateway.protoc_gen_swagger.options.License + 25, // 16: grpc.gateway.protoc_gen_swagger.options.Info.extensions:type_name -> grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry + 13, // 17: grpc.gateway.protoc_gen_swagger.options.Schema.json_schema:type_name -> grpc.gateway.protoc_gen_swagger.options.JSONSchema + 11, // 18: grpc.gateway.protoc_gen_swagger.options.Schema.external_docs:type_name -> grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation + 31, // 19: grpc.gateway.protoc_gen_swagger.options.Schema.example:type_name -> google.protobuf.Any + 1, // 20: grpc.gateway.protoc_gen_swagger.options.JSONSchema.type:type_name -> grpc.gateway.protoc_gen_swagger.options.JSONSchema.JSONSchemaSimpleTypes + 11, // 21: grpc.gateway.protoc_gen_swagger.options.Tag.external_docs:type_name -> grpc.gateway.protoc_gen_swagger.options.ExternalDocumentation + 26, // 22: grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.security:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.SecurityEntry + 2, // 23: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.type:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityScheme.Type + 3, // 24: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.in:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityScheme.In + 4, // 25: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.flow:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityScheme.Flow + 18, // 26: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.scopes:type_name -> grpc.gateway.protoc_gen_swagger.options.Scopes + 27, // 27: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.extensions:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityScheme.ExtensionsEntry + 29, // 28: grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.security_requirement:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementEntry + 30, // 29: grpc.gateway.protoc_gen_swagger.options.Scopes.scope:type_name -> grpc.gateway.protoc_gen_swagger.options.Scopes.ScopeEntry + 7, // 30: grpc.gateway.protoc_gen_swagger.options.Swagger.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_swagger.options.Response + 32, // 31: grpc.gateway.protoc_gen_swagger.options.Swagger.ExtensionsEntry.value:type_name -> google.protobuf.Value + 7, // 32: grpc.gateway.protoc_gen_swagger.options.Operation.ResponsesEntry.value:type_name -> grpc.gateway.protoc_gen_swagger.options.Response + 32, // 33: grpc.gateway.protoc_gen_swagger.options.Operation.ExtensionsEntry.value:type_name -> google.protobuf.Value + 32, // 34: grpc.gateway.protoc_gen_swagger.options.Response.ExtensionsEntry.value:type_name -> google.protobuf.Value + 32, // 35: grpc.gateway.protoc_gen_swagger.options.Info.ExtensionsEntry.value:type_name -> google.protobuf.Value + 16, // 36: grpc.gateway.protoc_gen_swagger.options.SecurityDefinitions.SecurityEntry.value:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityScheme + 32, // 37: grpc.gateway.protoc_gen_swagger.options.SecurityScheme.ExtensionsEntry.value:type_name -> google.protobuf.Value + 28, // 38: grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementEntry.value:type_name -> grpc.gateway.protoc_gen_swagger.options.SecurityRequirement.SecurityRequirementValue + 39, // [39:39] is the sub-list for method output_type + 39, // [39:39] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 39, // [39:39] is the sub-list for extension extendee + 0, // [0:39] is the sub-list for field type_name +} + +func init() { file_protoc_gen_swagger_options_openapiv2_proto_init() } +func file_protoc_gen_swagger_options_openapiv2_proto_init() { + if File_protoc_gen_swagger_options_openapiv2_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Swagger); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Operation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Info); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Contact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*License); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExternalDocumentation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Schema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JSONSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityDefinitions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityScheme); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Scopes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_protoc_gen_swagger_options_openapiv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityRequirement_SecurityRequirementValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_protoc_gen_swagger_options_openapiv2_proto_rawDesc, + NumEnums: 5, + NumMessages: 26, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_protoc_gen_swagger_options_openapiv2_proto_goTypes, + DependencyIndexes: file_protoc_gen_swagger_options_openapiv2_proto_depIdxs, + EnumInfos: file_protoc_gen_swagger_options_openapiv2_proto_enumTypes, + MessageInfos: file_protoc_gen_swagger_options_openapiv2_proto_msgTypes, + }.Build() + File_protoc_gen_swagger_options_openapiv2_proto = out.File + file_protoc_gen_swagger_options_openapiv2_proto_rawDesc = nil + file_protoc_gen_swagger_options_openapiv2_proto_goTypes = nil + file_protoc_gen_swagger_options_openapiv2_proto_depIdxs = nil } diff --git a/repositories.bzl b/repositories.bzl index 477883cfad3..e588d41340c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -40,8 +40,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=", - version = "v1.3.2", + sum = "h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ=", + version = "v1.4.0", ) go_repository( @@ -84,8 +84,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s=", - version = "v1.24.0", + sum = "h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=", + version = "v1.27.1", ) go_repository( name = "org_golang_x_lint", @@ -133,8 +133,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=", - version = "v0.2.0", + sum = "h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=", + version = "v0.4.0", ) go_repository( name = "org_golang_x_crypto", @@ -154,3 +154,39 @@ def go_repositories(): sum = "h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA=", version = "v0.0.0-20180407024304-ca021399b1a6", ) + go_repository( + name = "com_github_census_instrumentation_opencensus_proto", + importpath = "github.com/census-instrumentation/opencensus-proto", + sum = "h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=", + version = "v0.2.1", + ) + go_repository( + name = "com_github_envoyproxy_go_control_plane", + importpath = "github.com/envoyproxy/go-control-plane", + sum = "h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=", + version = "v0.9.1-0.20191026205805-5f8ba28d4473", + ) + go_repository( + name = "com_github_envoyproxy_protoc_gen_validate", + importpath = "github.com/envoyproxy/protoc-gen-validate", + sum = "h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_prometheus_client_model", + importpath = "github.com/prometheus/client_model", + sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", + version = "v0.0.0-20190812154241-14fe0d1b01d4", + ) + go_repository( + name = "org_golang_google_protobuf", + importpath = "google.golang.org/protobuf", + sum = "h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw=", + version = "v1.21.0", + ) + go_repository( + name = "org_golang_x_xerrors", + importpath = "golang.org/x/xerrors", + sum = "h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=", + version = "v0.0.0-20191204190536-9bdfabe68543", + ) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 77ab42bd7bb..2e47dabb126 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -70,6 +70,7 @@ go_test( "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", + "@com_github_google_go_cmp//cmp:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", @@ -82,5 +83,6 @@ go_test( "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel index 9eafd444acd..76429bea0d0 100644 --- a/runtime/internal/examplepb/BUILD.bazel +++ b/runtime/internal/examplepb/BUILD.bazel @@ -8,10 +8,15 @@ proto_library( name = "examplepb_proto", srcs = [ "example.proto", + "proto2.proto", + "proto3.proto", ], deps = [ + "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:timestamp_proto", + "@com_google_protobuf//:wrappers_proto", ], ) @@ -19,9 +24,6 @@ go_proto_library( name = "examplepb_go_proto", importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb", proto = ":examplepb_proto", - deps = [ - "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep - ], ) go_library( diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 16b27aa6214..9750cbd53c2 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,26 +1,31 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 // source: runtime/internal/examplepb/example.proto package examplepb import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // NumericEnum is one or zero. type NumericEnum int32 @@ -32,22 +37,43 @@ const ( NumericEnum_ONE NumericEnum = 1 ) -var NumericEnum_name = map[int32]string{ - 0: "ZERO", - 1: "ONE", -} +// Enum value maps for NumericEnum. +var ( + NumericEnum_name = map[int32]string{ + 0: "ZERO", + 1: "ONE", + } + NumericEnum_value = map[string]int32{ + "ZERO": 0, + "ONE": 1, + } +) -var NumericEnum_value = map[string]int32{ - "ZERO": 0, - "ONE": 1, +func (x NumericEnum) Enum() *NumericEnum { + p := new(NumericEnum) + *p = x + return p } func (x NumericEnum) String() string { - return proto.EnumName(NumericEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NumericEnum) Descriptor() protoreflect.EnumDescriptor { + return file_runtime_internal_examplepb_example_proto_enumTypes[0].Descriptor() +} + +func (NumericEnum) Type() protoreflect.EnumType { + return &file_runtime_internal_examplepb_example_proto_enumTypes[0] } +func (x NumericEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NumericEnum.Descriptor instead. func (NumericEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{0} + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{0} } // DeepEnum is one or zero. @@ -60,22 +86,43 @@ const ( ABitOfEverything_Nested_TRUE ABitOfEverything_Nested_DeepEnum = 1 ) -var ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ - 0: "FALSE", - 1: "TRUE", -} +// Enum value maps for ABitOfEverything_Nested_DeepEnum. +var ( + ABitOfEverything_Nested_DeepEnum_name = map[int32]string{ + 0: "FALSE", + 1: "TRUE", + } + ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ + "FALSE": 0, + "TRUE": 1, + } +) -var ABitOfEverything_Nested_DeepEnum_value = map[string]int32{ - "FALSE": 0, - "TRUE": 1, +func (x ABitOfEverything_Nested_DeepEnum) Enum() *ABitOfEverything_Nested_DeepEnum { + p := new(ABitOfEverything_Nested_DeepEnum) + *p = x + return p } func (x ABitOfEverything_Nested_DeepEnum) String() string { - return proto.EnumName(ABitOfEverything_Nested_DeepEnum_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ABitOfEverything_Nested_DeepEnum) Descriptor() protoreflect.EnumDescriptor { + return file_runtime_internal_examplepb_example_proto_enumTypes[1].Descriptor() } +func (ABitOfEverything_Nested_DeepEnum) Type() protoreflect.EnumType { + return &file_runtime_internal_examplepb_example_proto_enumTypes[1] +} + +func (x ABitOfEverything_Nested_DeepEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ABitOfEverything_Nested_DeepEnum.Descriptor instead. func (ABitOfEverything_Nested_DeepEnum) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{1, 0, 0} + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1, 0, 0} } type RepeatedResponseBodyOut_Response_ResponseType int32 @@ -89,67 +136,100 @@ const ( RepeatedResponseBodyOut_Response_B RepeatedResponseBodyOut_Response_ResponseType = 2 ) -var RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "A", - 2: "B", -} +// Enum value maps for RepeatedResponseBodyOut_Response_ResponseType. +var ( + RepeatedResponseBodyOut_Response_ResponseType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "A", + 2: "B", + } + RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ + "UNKNOWN": 0, + "A": 1, + "B": 2, + } +) -var RepeatedResponseBodyOut_Response_ResponseType_value = map[string]int32{ - "UNKNOWN": 0, - "A": 1, - "B": 2, +func (x RepeatedResponseBodyOut_Response_ResponseType) Enum() *RepeatedResponseBodyOut_Response_ResponseType { + p := new(RepeatedResponseBodyOut_Response_ResponseType) + *p = x + return p } func (x RepeatedResponseBodyOut_Response_ResponseType) String() string { - return proto.EnumName(RepeatedResponseBodyOut_Response_ResponseType_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{3, 0, 0} +func (RepeatedResponseBodyOut_Response_ResponseType) Descriptor() protoreflect.EnumDescriptor { + return file_runtime_internal_examplepb_example_proto_enumTypes[2].Descriptor() } -// SimpleMessage represents a simple message sent to the Echo service. -type SimpleMessage struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (RepeatedResponseBodyOut_Response_ResponseType) Type() protoreflect.EnumType { + return &file_runtime_internal_examplepb_example_proto_enumTypes[2] } -func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } -func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } -func (*SimpleMessage) ProtoMessage() {} -func (*SimpleMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{0} +func (x RepeatedResponseBodyOut_Response_ResponseType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (m *SimpleMessage) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SimpleMessage.Unmarshal(m, b) +// Deprecated: Use RepeatedResponseBodyOut_Response_ResponseType.Descriptor instead. +func (RepeatedResponseBodyOut_Response_ResponseType) EnumDescriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3, 0, 0} } -func (m *SimpleMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SimpleMessage.Marshal(b, m, deterministic) + +// SimpleMessage represents a simple message sent to the Echo service. +type SimpleMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *SimpleMessage) XXX_Merge(src proto.Message) { - xxx_messageInfo_SimpleMessage.Merge(m, src) + +func (x *SimpleMessage) Reset() { + *x = SimpleMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *SimpleMessage) XXX_Size() int { - return xxx_messageInfo_SimpleMessage.Size(m) + +func (x *SimpleMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *SimpleMessage) XXX_DiscardUnknown() { - xxx_messageInfo_SimpleMessage.DiscardUnknown(m) + +func (*SimpleMessage) ProtoMessage() {} + +func (x *SimpleMessage) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_SimpleMessage proto.InternalMessageInfo +// Deprecated: Use SimpleMessage.ProtoReflect.Descriptor instead. +func (*SimpleMessage) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{0} +} -func (m *SimpleMessage) GetId() string { - if m != nil { - return m.Id +func (x *SimpleMessage) GetId() string { + if x != nil { + return x.Id } return "" } type ABitOfEverything struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + SingleNested *ABitOfEverything_Nested `protobuf:"bytes,25,opt,name=single_nested,json=singleNested,proto3" json:"single_nested,omitempty"` Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` Nested []*ABitOfEverything_Nested `protobuf:"bytes,2,rep,name=nested,proto3" json:"nested,omitempty"` @@ -170,7 +250,7 @@ type ABitOfEverything struct { Sint32Value int32 `protobuf:"zigzag32,17,opt,name=sint32_value,json=sint32Value,proto3" json:"sint32_value,omitempty"` Sint64Value int64 `protobuf:"zigzag64,18,opt,name=sint64_value,json=sint64Value,proto3" json:"sint64_value,omitempty"` RepeatedStringValue []string `protobuf:"bytes,19,rep,name=repeated_string_value,json=repeatedStringValue,proto3" json:"repeated_string_value,omitempty"` - // Types that are valid to be assigned to OneofValue: + // Types that are assignable to OneofValue: // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` @@ -181,203 +261,194 @@ type ABitOfEverything struct { TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` - // repeated numeric enum comment (This comment is overridden by the field annotation) + // repeated numeric enum comment (This comment is overridden by the field + // annotation) RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` // numeric enum comment (This comment is overridden by the field annotation) EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.runtime.internal.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` - // repeated string comment (This comment is overridden by the field annotation) + // repeated string comment (This comment is overridden by the field + // annotation) RepeatedStringAnnotation []string `protobuf:"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3" json:"repeated_string_annotation,omitempty"` - // repeated nested object comment (This comment is overridden by the field annotation) + // repeated nested object comment (This comment is overridden by the field + // annotation) RepeatedNestedAnnotation []*ABitOfEverything_Nested `protobuf:"bytes,35,rep,name=repeated_nested_annotation,json=repeatedNestedAnnotation,proto3" json:"repeated_nested_annotation,omitempty"` // nested object comments (This comment is overridden by the field annotation) - NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` - Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NestedAnnotation *ABitOfEverything_Nested `protobuf:"bytes,36,opt,name=nested_annotation,json=nestedAnnotation,proto3" json:"nested_annotation,omitempty"` + Int64OverrideType int64 `protobuf:"varint,37,opt,name=int64_override_type,json=int64OverrideType,proto3" json:"int64_override_type,omitempty"` } -func (m *ABitOfEverything) Reset() { *m = ABitOfEverything{} } -func (m *ABitOfEverything) String() string { return proto.CompactTextString(m) } -func (*ABitOfEverything) ProtoMessage() {} -func (*ABitOfEverything) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{1} +func (x *ABitOfEverything) Reset() { + *x = ABitOfEverything{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ABitOfEverything) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ABitOfEverything.Unmarshal(m, b) +func (x *ABitOfEverything) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ABitOfEverything) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ABitOfEverything.Marshal(b, m, deterministic) -} -func (m *ABitOfEverything) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything.Merge(m, src) -} -func (m *ABitOfEverything) XXX_Size() int { - return xxx_messageInfo_ABitOfEverything.Size(m) -} -func (m *ABitOfEverything) XXX_DiscardUnknown() { - xxx_messageInfo_ABitOfEverything.DiscardUnknown(m) + +func (*ABitOfEverything) ProtoMessage() {} + +func (x *ABitOfEverything) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ABitOfEverything proto.InternalMessageInfo +// Deprecated: Use ABitOfEverything.ProtoReflect.Descriptor instead. +func (*ABitOfEverything) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1} +} -func (m *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { - if m != nil { - return m.SingleNested +func (x *ABitOfEverything) GetSingleNested() *ABitOfEverything_Nested { + if x != nil { + return x.SingleNested } return nil } -func (m *ABitOfEverything) GetUuid() string { - if m != nil { - return m.Uuid +func (x *ABitOfEverything) GetUuid() string { + if x != nil { + return x.Uuid } return "" } -func (m *ABitOfEverything) GetNested() []*ABitOfEverything_Nested { - if m != nil { - return m.Nested +func (x *ABitOfEverything) GetNested() []*ABitOfEverything_Nested { + if x != nil { + return x.Nested } return nil } -func (m *ABitOfEverything) GetFloatValue() float32 { - if m != nil { - return m.FloatValue +func (x *ABitOfEverything) GetFloatValue() float32 { + if x != nil { + return x.FloatValue } return 0 } -func (m *ABitOfEverything) GetDoubleValue() float64 { - if m != nil { - return m.DoubleValue +func (x *ABitOfEverything) GetDoubleValue() float64 { + if x != nil { + return x.DoubleValue } return 0 } -func (m *ABitOfEverything) GetInt64Value() int64 { - if m != nil { - return m.Int64Value +func (x *ABitOfEverything) GetInt64Value() int64 { + if x != nil { + return x.Int64Value } return 0 } -func (m *ABitOfEverything) GetUint64Value() uint64 { - if m != nil { - return m.Uint64Value +func (x *ABitOfEverything) GetUint64Value() uint64 { + if x != nil { + return x.Uint64Value } return 0 } -func (m *ABitOfEverything) GetInt32Value() int32 { - if m != nil { - return m.Int32Value +func (x *ABitOfEverything) GetInt32Value() int32 { + if x != nil { + return x.Int32Value } return 0 } -func (m *ABitOfEverything) GetFixed64Value() uint64 { - if m != nil { - return m.Fixed64Value +func (x *ABitOfEverything) GetFixed64Value() uint64 { + if x != nil { + return x.Fixed64Value } return 0 } -func (m *ABitOfEverything) GetFixed32Value() uint32 { - if m != nil { - return m.Fixed32Value +func (x *ABitOfEverything) GetFixed32Value() uint32 { + if x != nil { + return x.Fixed32Value } return 0 } -func (m *ABitOfEverything) GetBoolValue() bool { - if m != nil { - return m.BoolValue +func (x *ABitOfEverything) GetBoolValue() bool { + if x != nil { + return x.BoolValue } return false } -func (m *ABitOfEverything) GetStringValue() string { - if m != nil { - return m.StringValue +func (x *ABitOfEverything) GetStringValue() string { + if x != nil { + return x.StringValue } return "" } -func (m *ABitOfEverything) GetBytesValue() []byte { - if m != nil { - return m.BytesValue +func (x *ABitOfEverything) GetBytesValue() []byte { + if x != nil { + return x.BytesValue } return nil } -func (m *ABitOfEverything) GetUint32Value() uint32 { - if m != nil { - return m.Uint32Value +func (x *ABitOfEverything) GetUint32Value() uint32 { + if x != nil { + return x.Uint32Value } return 0 } -func (m *ABitOfEverything) GetEnumValue() NumericEnum { - if m != nil { - return m.EnumValue +func (x *ABitOfEverything) GetEnumValue() NumericEnum { + if x != nil { + return x.EnumValue } return NumericEnum_ZERO } -func (m *ABitOfEverything) GetSfixed32Value() int32 { - if m != nil { - return m.Sfixed32Value +func (x *ABitOfEverything) GetSfixed32Value() int32 { + if x != nil { + return x.Sfixed32Value } return 0 } -func (m *ABitOfEverything) GetSfixed64Value() int64 { - if m != nil { - return m.Sfixed64Value +func (x *ABitOfEverything) GetSfixed64Value() int64 { + if x != nil { + return x.Sfixed64Value } return 0 } -func (m *ABitOfEverything) GetSint32Value() int32 { - if m != nil { - return m.Sint32Value +func (x *ABitOfEverything) GetSint32Value() int32 { + if x != nil { + return x.Sint32Value } return 0 } -func (m *ABitOfEverything) GetSint64Value() int64 { - if m != nil { - return m.Sint64Value +func (x *ABitOfEverything) GetSint64Value() int64 { + if x != nil { + return x.Sint64Value } return 0 } -func (m *ABitOfEverything) GetRepeatedStringValue() []string { - if m != nil { - return m.RepeatedStringValue +func (x *ABitOfEverything) GetRepeatedStringValue() []string { + if x != nil { + return x.RepeatedStringValue } return nil } -type isABitOfEverything_OneofValue interface { - isABitOfEverything_OneofValue() -} - -type ABitOfEverything_OneofEmpty struct { - OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` -} - -type ABitOfEverything_OneofString struct { - OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` -} - -func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} - -func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} - func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { if m != nil { return m.OneofValue @@ -385,423 +456,771 @@ func (m *ABitOfEverything) GetOneofValue() isABitOfEverything_OneofValue { return nil } -func (m *ABitOfEverything) GetOneofEmpty() *empty.Empty { - if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { +func (x *ABitOfEverything) GetOneofEmpty() *empty.Empty { + if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofEmpty); ok { return x.OneofEmpty } return nil } -func (m *ABitOfEverything) GetOneofString() string { - if x, ok := m.GetOneofValue().(*ABitOfEverything_OneofString); ok { +func (x *ABitOfEverything) GetOneofString() string { + if x, ok := x.GetOneofValue().(*ABitOfEverything_OneofString); ok { return x.OneofString } return "" } -func (m *ABitOfEverything) GetMapValue() map[string]NumericEnum { - if m != nil { - return m.MapValue +func (x *ABitOfEverything) GetMapValue() map[string]NumericEnum { + if x != nil { + return x.MapValue } return nil } -func (m *ABitOfEverything) GetMappedStringValue() map[string]string { - if m != nil { - return m.MappedStringValue +func (x *ABitOfEverything) GetMappedStringValue() map[string]string { + if x != nil { + return x.MappedStringValue } return nil } -func (m *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested { - if m != nil { - return m.MappedNestedValue +func (x *ABitOfEverything) GetMappedNestedValue() map[string]*ABitOfEverything_Nested { + if x != nil { + return x.MappedNestedValue } return nil } -func (m *ABitOfEverything) GetNonConventionalNameValue() string { - if m != nil { - return m.NonConventionalNameValue +func (x *ABitOfEverything) GetNonConventionalNameValue() string { + if x != nil { + return x.NonConventionalNameValue } return "" } -func (m *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { - if m != nil { - return m.TimestampValue +func (x *ABitOfEverything) GetTimestampValue() *timestamp.Timestamp { + if x != nil { + return x.TimestampValue } return nil } -func (m *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { - if m != nil { - return m.RepeatedEnumValue +func (x *ABitOfEverything) GetRepeatedEnumValue() []NumericEnum { + if x != nil { + return x.RepeatedEnumValue } return nil } -func (m *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { - if m != nil { - return m.RepeatedEnumAnnotation +func (x *ABitOfEverything) GetRepeatedEnumAnnotation() []NumericEnum { + if x != nil { + return x.RepeatedEnumAnnotation } return nil } -func (m *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { - if m != nil { - return m.EnumValueAnnotation +func (x *ABitOfEverything) GetEnumValueAnnotation() NumericEnum { + if x != nil { + return x.EnumValueAnnotation } return NumericEnum_ZERO } -func (m *ABitOfEverything) GetRepeatedStringAnnotation() []string { - if m != nil { - return m.RepeatedStringAnnotation +func (x *ABitOfEverything) GetRepeatedStringAnnotation() []string { + if x != nil { + return x.RepeatedStringAnnotation } return nil } -func (m *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { - if m != nil { - return m.RepeatedNestedAnnotation +func (x *ABitOfEverything) GetRepeatedNestedAnnotation() []*ABitOfEverything_Nested { + if x != nil { + return x.RepeatedNestedAnnotation } return nil } -func (m *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { - if m != nil { - return m.NestedAnnotation +func (x *ABitOfEverything) GetNestedAnnotation() *ABitOfEverything_Nested { + if x != nil { + return x.NestedAnnotation } return nil } -func (m *ABitOfEverything) GetInt64OverrideType() int64 { - if m != nil { - return m.Int64OverrideType +func (x *ABitOfEverything) GetInt64OverrideType() int64 { + if x != nil { + return x.Int64OverrideType } return 0 } -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ABitOfEverything) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ABitOfEverything_OneofEmpty)(nil), - (*ABitOfEverything_OneofString)(nil), - } +type isABitOfEverything_OneofValue interface { + isABitOfEverything_OneofValue() } -// Nested is nested type. -type ABitOfEverything_Nested struct { - // name is nested field. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` - // DeepEnum comment. - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type ABitOfEverything_OneofEmpty struct { + OneofEmpty *empty.Empty `protobuf:"bytes,20,opt,name=oneof_empty,json=oneofEmpty,proto3,oneof"` } -func (m *ABitOfEverything_Nested) Reset() { *m = ABitOfEverything_Nested{} } -func (m *ABitOfEverything_Nested) String() string { return proto.CompactTextString(m) } -func (*ABitOfEverything_Nested) ProtoMessage() {} -func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{1, 0} +type ABitOfEverything_OneofString struct { + OneofString string `protobuf:"bytes,21,opt,name=oneof_string,json=oneofString,proto3,oneof"` } -func (m *ABitOfEverything_Nested) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ABitOfEverything_Nested.Unmarshal(m, b) -} -func (m *ABitOfEverything_Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ABitOfEverything_Nested.Marshal(b, m, deterministic) -} -func (m *ABitOfEverything_Nested) XXX_Merge(src proto.Message) { - xxx_messageInfo_ABitOfEverything_Nested.Merge(m, src) -} -func (m *ABitOfEverything_Nested) XXX_Size() int { - return xxx_messageInfo_ABitOfEverything_Nested.Size(m) -} -func (m *ABitOfEverything_Nested) XXX_DiscardUnknown() { - xxx_messageInfo_ABitOfEverything_Nested.DiscardUnknown(m) -} +func (*ABitOfEverything_OneofEmpty) isABitOfEverything_OneofValue() {} -var xxx_messageInfo_ABitOfEverything_Nested proto.InternalMessageInfo +func (*ABitOfEverything_OneofString) isABitOfEverything_OneofValue() {} -func (m *ABitOfEverything_Nested) GetName() string { - if m != nil { - return m.Name - } - return "" +type ResponseBodyOut struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` } -func (m *ABitOfEverything_Nested) GetAmount() uint32 { - if m != nil { - return m.Amount +func (x *ResponseBodyOut) Reset() { + *x = ResponseBodyOut{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return 0 } -func (m *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { - if m != nil { - return m.Ok - } - return ABitOfEverything_Nested_FALSE +func (x *ResponseBodyOut) String() string { + return protoimpl.X.MessageStringOf(x) } -type ResponseBodyOut struct { - Response *ResponseBodyOut_Response `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +func (*ResponseBodyOut) ProtoMessage() {} + +func (x *ResponseBodyOut) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (m *ResponseBodyOut) Reset() { *m = ResponseBodyOut{} } -func (m *ResponseBodyOut) String() string { return proto.CompactTextString(m) } -func (*ResponseBodyOut) ProtoMessage() {} +// Deprecated: Use ResponseBodyOut.ProtoReflect.Descriptor instead. func (*ResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{2} + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{2} } -func (m *ResponseBodyOut) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseBodyOut.Unmarshal(m, b) -} -func (m *ResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseBodyOut.Marshal(b, m, deterministic) +func (x *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { + if x != nil { + return x.Response + } + return nil } -func (m *ResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut.Merge(m, src) + +type RepeatedResponseBodyOut struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` } -func (m *ResponseBodyOut) XXX_Size() int { - return xxx_messageInfo_ResponseBodyOut.Size(m) + +func (x *RepeatedResponseBodyOut) Reset() { + *x = RepeatedResponseBodyOut{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResponseBodyOut) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseBodyOut.DiscardUnknown(m) + +func (x *RepeatedResponseBodyOut) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ResponseBodyOut proto.InternalMessageInfo +func (*RepeatedResponseBodyOut) ProtoMessage() {} -func (m *ResponseBodyOut) GetResponse() *ResponseBodyOut_Response { - if m != nil { - return m.Response +func (x *RepeatedResponseBodyOut) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type ResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use RepeatedResponseBodyOut.ProtoReflect.Descriptor instead. +func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3} } -func (m *ResponseBodyOut_Response) Reset() { *m = ResponseBodyOut_Response{} } -func (m *ResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } -func (*ResponseBodyOut_Response) ProtoMessage() {} -func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{2, 0} +func (x *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { + if x != nil { + return x.Response + } + return nil } -func (m *ResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseBodyOut_Response.Unmarshal(m, b) -} -func (m *ResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseBodyOut_Response.Marshal(b, m, deterministic) -} -func (m *ResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseBodyOut_Response.Merge(m, src) +// Nested is nested type. +type ABitOfEverything_Nested struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name is nested field. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // DeepEnum comment. + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` } -func (m *ResponseBodyOut_Response) XXX_Size() int { - return xxx_messageInfo_ResponseBodyOut_Response.Size(m) + +func (x *ABitOfEverything_Nested) Reset() { + *x = ABitOfEverything_Nested{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ResponseBodyOut_Response) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseBodyOut_Response.DiscardUnknown(m) + +func (x *ABitOfEverything_Nested) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_ResponseBodyOut_Response proto.InternalMessageInfo +func (*ABitOfEverything_Nested) ProtoMessage() {} -func (m *ResponseBodyOut_Response) GetData() string { - if m != nil { - return m.Data +func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -type RepeatedResponseBodyOut struct { - Response []*RepeatedResponseBodyOut_Response `protobuf:"bytes,2,rep,name=response,proto3" json:"response,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use ABitOfEverything_Nested.ProtoReflect.Descriptor instead. +func (*ABitOfEverything_Nested) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{1, 0} } -func (m *RepeatedResponseBodyOut) Reset() { *m = RepeatedResponseBodyOut{} } -func (m *RepeatedResponseBodyOut) String() string { return proto.CompactTextString(m) } -func (*RepeatedResponseBodyOut) ProtoMessage() {} -func (*RepeatedResponseBodyOut) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{3} +func (x *ABitOfEverything_Nested) GetName() string { + if x != nil { + return x.Name + } + return "" } -func (m *RepeatedResponseBodyOut) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepeatedResponseBodyOut.Unmarshal(m, b) +func (x *ABitOfEverything_Nested) GetAmount() uint32 { + if x != nil { + return x.Amount + } + return 0 } -func (m *RepeatedResponseBodyOut) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepeatedResponseBodyOut.Marshal(b, m, deterministic) + +func (x *ABitOfEverything_Nested) GetOk() ABitOfEverything_Nested_DeepEnum { + if x != nil { + return x.Ok + } + return ABitOfEverything_Nested_FALSE } -func (m *RepeatedResponseBodyOut) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut.Merge(m, src) + +type ResponseBodyOut_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (m *RepeatedResponseBodyOut) XXX_Size() int { - return xxx_messageInfo_RepeatedResponseBodyOut.Size(m) + +func (x *ResponseBodyOut_Response) Reset() { + *x = ResponseBodyOut_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RepeatedResponseBodyOut) XXX_DiscardUnknown() { - xxx_messageInfo_RepeatedResponseBodyOut.DiscardUnknown(m) + +func (x *ResponseBodyOut_Response) String() string { + return protoimpl.X.MessageStringOf(x) } -var xxx_messageInfo_RepeatedResponseBodyOut proto.InternalMessageInfo +func (*ResponseBodyOut_Response) ProtoMessage() {} -func (m *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Response { - if m != nil { - return m.Response +func (x *ResponseBodyOut_Response) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type RepeatedResponseBodyOut_Response struct { - Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +// Deprecated: Use ResponseBodyOut_Response.ProtoReflect.Descriptor instead. +func (*ResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{2, 0} } -func (m *RepeatedResponseBodyOut_Response) Reset() { *m = RepeatedResponseBodyOut_Response{} } -func (m *RepeatedResponseBodyOut_Response) String() string { return proto.CompactTextString(m) } -func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} -func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { - return fileDescriptor_411aaf1bcbdb81d6, []int{3, 0} +func (x *ResponseBodyOut_Response) GetData() string { + if x != nil { + return x.Data + } + return "" } -func (m *RepeatedResponseBodyOut_Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Unmarshal(m, b) -} -func (m *RepeatedResponseBodyOut_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Marshal(b, m, deterministic) +type RepeatedResponseBodyOut_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` } -func (m *RepeatedResponseBodyOut_Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_RepeatedResponseBodyOut_Response.Merge(m, src) + +func (x *RepeatedResponseBodyOut_Response) Reset() { + *x = RepeatedResponseBodyOut_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *RepeatedResponseBodyOut_Response) XXX_Size() int { - return xxx_messageInfo_RepeatedResponseBodyOut_Response.Size(m) + +func (x *RepeatedResponseBodyOut_Response) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *RepeatedResponseBodyOut_Response) XXX_DiscardUnknown() { - xxx_messageInfo_RepeatedResponseBodyOut_Response.DiscardUnknown(m) + +func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} + +func (x *RepeatedResponseBodyOut_Response) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_RepeatedResponseBodyOut_Response proto.InternalMessageInfo +// Deprecated: Use RepeatedResponseBodyOut_Response.ProtoReflect.Descriptor instead. +func (*RepeatedResponseBodyOut_Response) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{3, 0} +} -func (m *RepeatedResponseBodyOut_Response) GetData() string { - if m != nil { - return m.Data +func (x *RepeatedResponseBodyOut_Response) GetData() string { + if x != nil { + return x.Data } return "" } -func (m *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { - if m != nil { - return m.Type +func (x *RepeatedResponseBodyOut_Response) GetType() RepeatedResponseBodyOut_Response_ResponseType { + if x != nil { + return x.Type } return RepeatedResponseBodyOut_Response_UNKNOWN } -func init() { - proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.NumericEnum", NumericEnum_name, NumericEnum_value) - proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.ABitOfEverything_Nested_DeepEnum", ABitOfEverything_Nested_DeepEnum_name, ABitOfEverything_Nested_DeepEnum_value) - proto.RegisterEnum("grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType", RepeatedResponseBodyOut_Response_ResponseType_name, RepeatedResponseBodyOut_Response_ResponseType_value) - proto.RegisterType((*SimpleMessage)(nil), "grpc.gateway.runtime.internal.examplepb.SimpleMessage") - proto.RegisterType((*ABitOfEverything)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything") - proto.RegisterMapType((map[string]NumericEnum)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry") - proto.RegisterMapType((map[string]*ABitOfEverything_Nested)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry") - proto.RegisterMapType((map[string]string)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry") - proto.RegisterType((*ABitOfEverything_Nested)(nil), "grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested") - proto.RegisterType((*ResponseBodyOut)(nil), "grpc.gateway.runtime.internal.examplepb.ResponseBodyOut") - proto.RegisterType((*ResponseBodyOut_Response)(nil), "grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response") - proto.RegisterType((*RepeatedResponseBodyOut)(nil), "grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut") - proto.RegisterType((*RepeatedResponseBodyOut_Response)(nil), "grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response") -} - -func init() { - proto.RegisterFile("runtime/internal/examplepb/example.proto", fileDescriptor_411aaf1bcbdb81d6) -} - -var fileDescriptor_411aaf1bcbdb81d6 = []byte{ - // 1101 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x5d, 0x73, 0x1b, 0x35, - 0x1b, 0x8d, 0xec, 0xc4, 0xb1, 0x9f, 0xb5, 0x9d, 0xb5, 0xf2, 0xd1, 0x7d, 0xdd, 0xb7, 0x64, 0xeb, - 0xd0, 0x61, 0xe1, 0x62, 0x33, 0xe3, 0x74, 0x18, 0xe8, 0x70, 0x41, 0xd2, 0x1a, 0x5a, 0xa0, 0x36, - 0xa3, 0xa4, 0x01, 0x3a, 0xc3, 0x78, 0xd6, 0xb5, 0xe2, 0x2e, 0xf1, 0x6a, 0x97, 0xfd, 0x08, 0xf5, - 0x0d, 0xc3, 0x15, 0xd7, 0xfc, 0x14, 0x6e, 0x98, 0xe1, 0x3f, 0xf1, 0x27, 0x98, 0x95, 0xb4, 0x8a, - 0xec, 0x04, 0x26, 0x34, 0xbe, 0x5a, 0xe9, 0xd1, 0xd1, 0x39, 0x47, 0x5a, 0x1d, 0x09, 0x9c, 0x38, - 0x63, 0xa9, 0x1f, 0xd0, 0x7d, 0x9f, 0xa5, 0x34, 0x66, 0xde, 0x74, 0x9f, 0xbe, 0xf1, 0x82, 0x68, - 0x4a, 0xa3, 0x51, 0xd1, 0x72, 0xa3, 0x38, 0x4c, 0x43, 0xfc, 0xde, 0x24, 0x8e, 0x5e, 0xb9, 0x13, - 0x2f, 0xa5, 0x3f, 0x79, 0x33, 0x57, 0x4e, 0x73, 0x8b, 0x69, 0xae, 0x9a, 0xd6, 0xde, 0x9d, 0x84, - 0xe1, 0x64, 0x4a, 0xf7, 0xf9, 0xb4, 0x51, 0x76, 0xb6, 0x9f, 0x03, 0x93, 0xd4, 0x0b, 0x22, 0xc1, - 0xd4, 0xbe, 0xbb, 0x08, 0xa0, 0x41, 0x94, 0xce, 0xc4, 0x60, 0x67, 0x17, 0x1a, 0xc7, 0x7e, 0xce, - 0xf4, 0x9c, 0x26, 0x89, 0x37, 0xa1, 0xb8, 0x09, 0x25, 0x7f, 0x6c, 0x21, 0x1b, 0x39, 0x35, 0x52, - 0xf2, 0xc7, 0x9d, 0xbf, 0xb6, 0xc0, 0x3c, 0x3c, 0xf2, 0xd3, 0xc1, 0x59, 0xef, 0x82, 0xc6, 0xb3, - 0xf4, 0xb5, 0xcf, 0x26, 0x98, 0x42, 0x23, 0xf1, 0xd9, 0x64, 0x4a, 0x87, 0x8c, 0x26, 0x29, 0x1d, - 0x5b, 0xff, 0xb3, 0x91, 0x63, 0x74, 0x3f, 0x75, 0x6f, 0x68, 0xda, 0x5d, 0x64, 0x74, 0xfb, 0x9c, - 0x87, 0xd4, 0x05, 0xad, 0xe8, 0x61, 0x0c, 0xab, 0x59, 0xa6, 0xdc, 0xf0, 0x36, 0xfe, 0x16, 0x2a, - 0x52, 0xb3, 0x64, 0x97, 0x97, 0xa2, 0x29, 0xf9, 0xf0, 0x2e, 0x18, 0x67, 0xd3, 0xd0, 0x4b, 0x87, - 0x17, 0xde, 0x34, 0xa3, 0x56, 0xd9, 0x46, 0x4e, 0x89, 0x00, 0x2f, 0x9d, 0xe6, 0x15, 0x7c, 0x1f, - 0xea, 0xe3, 0x30, 0x1b, 0x4d, 0xa9, 0x44, 0xac, 0xda, 0xc8, 0x41, 0xc4, 0x10, 0x35, 0x01, 0xd9, - 0x05, 0xc3, 0x67, 0xe9, 0x87, 0x0f, 0x25, 0x62, 0xcd, 0x46, 0x4e, 0x99, 0x00, 0x2f, 0x29, 0x8e, - 0x4c, 0x47, 0x54, 0x6c, 0xe4, 0xac, 0x12, 0x23, 0xd3, 0x20, 0x82, 0xe3, 0xa0, 0x2b, 0x11, 0xeb, - 0x36, 0x72, 0xd6, 0x38, 0xc7, 0x41, 0x57, 0x00, 0xf6, 0xa0, 0x71, 0xe6, 0xbf, 0xa1, 0x63, 0x45, - 0x52, 0xb5, 0x91, 0x53, 0x21, 0x75, 0x59, 0x9c, 0x07, 0x29, 0x9e, 0x9a, 0x8d, 0x9c, 0x75, 0x09, - 0x2a, 0x98, 0xee, 0x01, 0x8c, 0xc2, 0x70, 0x2a, 0x11, 0x60, 0x23, 0xa7, 0x4a, 0x6a, 0x79, 0x45, - 0x99, 0x4d, 0xd2, 0xd8, 0x67, 0x13, 0x09, 0x30, 0xf8, 0x7f, 0x30, 0x44, 0x4d, 0x99, 0x1d, 0xcd, - 0x52, 0x9a, 0x48, 0xc4, 0x3d, 0x1b, 0x39, 0x75, 0x02, 0xbc, 0x34, 0xb7, 0x60, 0x65, 0xa3, 0x61, - 0x23, 0xa7, 0x21, 0x16, 0x5c, 0xb8, 0x38, 0x06, 0xa0, 0x2c, 0x0b, 0x24, 0xa0, 0x69, 0x23, 0xa7, - 0xd9, 0x7d, 0x78, 0xe3, 0xdf, 0xda, 0xcf, 0x02, 0x1a, 0xfb, 0xaf, 0x7a, 0x2c, 0x0b, 0x48, 0x2d, - 0xe7, 0x11, 0xa4, 0x0f, 0xa0, 0x99, 0xcc, 0x6f, 0xc0, 0x86, 0x8d, 0x9c, 0x0d, 0xd2, 0x48, 0xe6, - 0x76, 0x40, 0xc1, 0xd4, 0x66, 0x9a, 0x36, 0x72, 0xcc, 0x02, 0xa6, 0xfd, 0xb6, 0x44, 0x5f, 0x45, - 0xcb, 0x46, 0x4e, 0x8b, 0x18, 0x89, 0xb6, 0x0a, 0x09, 0x51, 0x3c, 0xd8, 0x46, 0x0e, 0x16, 0x90, - 0x82, 0xa5, 0x0b, 0xdb, 0x31, 0x8d, 0xa8, 0x97, 0xd2, 0xf1, 0x70, 0x6e, 0x63, 0x37, 0xed, 0xb2, - 0x53, 0x23, 0x9b, 0xc5, 0xe0, 0xb1, 0xb6, 0xc1, 0x1f, 0x83, 0x11, 0x32, 0x1a, 0x9e, 0x0d, 0x79, - 0x6a, 0xad, 0x2d, 0x1e, 0xb4, 0x1d, 0x57, 0x64, 0xda, 0x2d, 0x32, 0xed, 0xf6, 0xf2, 0xd1, 0xa7, - 0x2b, 0x04, 0x38, 0x98, 0xf7, 0xf0, 0x1e, 0xd4, 0xc5, 0x54, 0xa1, 0x65, 0x6d, 0xe7, 0xbf, 0xef, - 0xe9, 0x0a, 0x11, 0x84, 0x42, 0x04, 0x8f, 0xa1, 0x16, 0x78, 0x91, 0xf4, 0xb1, 0xc3, 0x23, 0xf5, - 0xf9, 0xdb, 0x47, 0xea, 0xb9, 0x17, 0x71, 0xdb, 0x3d, 0x96, 0xc6, 0x33, 0x52, 0x0d, 0x64, 0x17, - 0xff, 0x82, 0x60, 0x33, 0xf0, 0xa2, 0x68, 0x71, 0xe1, 0x77, 0xb8, 0xe0, 0xd7, 0xb7, 0x12, 0x8c, - 0xe6, 0x36, 0x4c, 0x28, 0xb7, 0x82, 0xc5, 0xba, 0x6e, 0x41, 0x04, 0x5e, 0x5a, 0xb0, 0x96, 0x63, - 0x41, 0x5c, 0x26, 0x57, 0x2d, 0x68, 0x75, 0xfc, 0x08, 0x2c, 0x16, 0xb2, 0xc7, 0x21, 0xbb, 0xa0, - 0x2c, 0xf5, 0x43, 0xe6, 0x4d, 0xfb, 0x5e, 0x20, 0x6e, 0x0e, 0xab, 0xcd, 0xb3, 0xf5, 0x8f, 0xe3, - 0xf8, 0x31, 0x6c, 0xa8, 0x8b, 0x5d, 0x3a, 0xbf, 0xcb, 0xcf, 0x42, 0xfb, 0xca, 0x59, 0x38, 0x29, - 0x70, 0xa4, 0xa9, 0xa6, 0x08, 0x92, 0x31, 0xa8, 0x33, 0x36, 0xd4, 0x22, 0xf7, 0x7f, 0xbb, 0xfc, - 0xd6, 0x91, 0x6b, 0x15, 0x84, 0x3d, 0x15, 0x3d, 0x06, 0xd6, 0xbc, 0x8a, 0xc7, 0x58, 0x98, 0x7a, - 0xf9, 0x8a, 0x2c, 0xfb, 0x16, 0x52, 0x3b, 0xba, 0xd4, 0xa1, 0xe2, 0xc4, 0xaf, 0x61, 0xfb, 0x72, - 0x31, 0xba, 0xd8, 0xfd, 0x5b, 0x5c, 0x25, 0x9b, 0xea, 0x2a, 0xd1, 0x94, 0x3e, 0x81, 0xf6, 0x62, - 0x80, 0x35, 0xb9, 0x0e, 0x4f, 0xb1, 0x35, 0x9f, 0x62, 0x6d, 0xf6, 0xcf, 0xda, 0x6c, 0x79, 0x04, - 0xb5, 0xd9, 0x7b, 0x4b, 0x7a, 0xce, 0x94, 0xbe, 0xe8, 0x6b, 0xfa, 0x01, 0xb4, 0xae, 0xca, 0xbe, - 0xbb, 0xa4, 0x97, 0xdb, 0x64, 0x8b, 0x72, 0x2e, 0x6c, 0x8a, 0xfb, 0x30, 0xbc, 0xa0, 0x71, 0xec, - 0x8f, 0xe9, 0x30, 0x9d, 0x45, 0xd4, 0x7a, 0xc0, 0xdf, 0xc4, 0x16, 0x1f, 0x1a, 0xc8, 0x91, 0x93, - 0x59, 0x44, 0xdb, 0xbf, 0x23, 0xa8, 0x5c, 0x3e, 0xfc, 0xcc, 0x0b, 0x68, 0xf1, 0xf0, 0xe7, 0x6d, - 0xbc, 0x03, 0x15, 0x2f, 0x08, 0x33, 0x96, 0x5a, 0x25, 0xfe, 0x84, 0xc8, 0x1e, 0xfe, 0x0e, 0x4a, - 0xe1, 0x39, 0x7f, 0xad, 0x9b, 0xdd, 0x67, 0xb7, 0x5d, 0x86, 0xfb, 0x84, 0xd2, 0x88, 0xff, 0xff, - 0x52, 0x78, 0xde, 0xd9, 0x85, 0x6a, 0xd1, 0xc7, 0x35, 0x58, 0xfb, 0xec, 0xf0, 0xab, 0xe3, 0x9e, - 0xb9, 0x82, 0xab, 0xb0, 0x7a, 0x42, 0x5e, 0xf4, 0x4c, 0xd4, 0xfe, 0x11, 0x1a, 0x73, 0x37, 0x1e, - 0x36, 0xa1, 0x7c, 0x4e, 0x67, 0xd2, 0x77, 0xde, 0xc4, 0x5f, 0xc0, 0x9a, 0x08, 0x59, 0xe9, 0x16, - 0x87, 0x51, 0x50, 0x3c, 0x2a, 0x7d, 0x84, 0xda, 0x4f, 0x60, 0xe7, 0xfa, 0x3b, 0xef, 0x1a, 0xed, - 0x2d, 0x5d, 0xbb, 0xa6, 0xb3, 0xfc, 0x8a, 0x0a, 0x9a, 0xc5, 0x7b, 0xeb, 0x1a, 0x9a, 0x53, 0x9d, - 0x66, 0x19, 0x67, 0xe5, 0xd2, 0xc8, 0x51, 0xa3, 0x78, 0xde, 0x78, 0xa9, 0xf3, 0x1b, 0x82, 0x0d, - 0x42, 0x93, 0x28, 0x64, 0x09, 0x3d, 0x0a, 0xc7, 0xb3, 0x41, 0x96, 0xe2, 0xef, 0xa1, 0x1a, 0xcb, - 0x92, 0x74, 0x70, 0x78, 0x63, 0x07, 0x0b, 0x5c, 0xaa, 0x4f, 0x14, 0x65, 0xfb, 0x1d, 0xa8, 0x16, - 0xd5, 0xfc, 0xdc, 0x8d, 0xbd, 0xd4, 0x2b, 0xce, 0x5d, 0xde, 0xee, 0xfc, 0x59, 0x82, 0x3b, 0x44, - 0x46, 0x6a, 0xd1, 0x1a, 0x9d, 0xb3, 0x96, 0xe7, 0xf7, 0xd9, 0x7f, 0xb0, 0x76, 0x2d, 0xe7, 0x75, - 0x16, 0xff, 0x40, 0xff, 0xee, 0x11, 0xff, 0x00, 0xab, 0x3c, 0x5b, 0x22, 0x05, 0xa7, 0x4b, 0xf3, - 0xa0, 0x1a, 0x79, 0x40, 0x09, 0xd7, 0xe8, 0xbc, 0x0f, 0x75, 0xbd, 0x8a, 0x0d, 0x58, 0x7f, 0xd1, - 0xff, 0xb2, 0x3f, 0xf8, 0xa6, 0x6f, 0xae, 0xe0, 0x35, 0x40, 0x87, 0x26, 0xca, 0x3f, 0x47, 0x66, - 0xe9, 0x03, 0x1b, 0x0c, 0xed, 0x14, 0xe7, 0xb9, 0x79, 0xd9, 0x23, 0x03, 0x73, 0x05, 0xaf, 0x43, - 0x79, 0xd0, 0xef, 0x99, 0xe8, 0xc8, 0x78, 0x59, 0x53, 0x6e, 0x46, 0x15, 0xfe, 0x82, 0x1d, 0xfc, - 0x1d, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xc2, 0xf3, 0x9b, 0x25, 0x0d, 0x00, 0x00, +var File_runtime_internal_examplepb_example_proto protoreflect.FileDescriptor + +var file_runtime_internal_examplepb_example_proto_rawDesc = []byte{ + 0x0a, 0x28, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0xeb, 0x14, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, + 0x69, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, + 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, + 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, + 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, + 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, + 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, + 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, + 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, + 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x64, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, + 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3c, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, + 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, + 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, + 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xb0, 0x01, 0x0a, + 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, + 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, + 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x1a, + 0x71, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, + 0x79, 0x4f, 0x75, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, + 0x65, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, + 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x2a, 0x20, + 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, + 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, + 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_runtime_internal_examplepb_example_proto_rawDescOnce sync.Once + file_runtime_internal_examplepb_example_proto_rawDescData = file_runtime_internal_examplepb_example_proto_rawDesc +) + +func file_runtime_internal_examplepb_example_proto_rawDescGZIP() []byte { + file_runtime_internal_examplepb_example_proto_rawDescOnce.Do(func() { + file_runtime_internal_examplepb_example_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_example_proto_rawDescData) + }) + return file_runtime_internal_examplepb_example_proto_rawDescData +} + +var file_runtime_internal_examplepb_example_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_runtime_internal_examplepb_example_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_runtime_internal_examplepb_example_proto_goTypes = []interface{}{ + (NumericEnum)(0), // 0: grpc.gateway.runtime.internal.examplepb.NumericEnum + (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum + (RepeatedResponseBodyOut_Response_ResponseType)(0), // 2: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + (*SimpleMessage)(nil), // 3: grpc.gateway.runtime.internal.examplepb.SimpleMessage + (*ABitOfEverything)(nil), // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything + (*ResponseBodyOut)(nil), // 5: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut + (*RepeatedResponseBodyOut)(nil), // 6: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut + (*ABitOfEverything_Nested)(nil), // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + nil, // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry + nil, // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + (*ResponseBodyOut_Response)(nil), // 11: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response + (*RepeatedResponseBodyOut_Response)(nil), // 12: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response + (*empty.Empty)(nil), // 13: google.protobuf.Empty + (*timestamp.Timestamp)(nil), // 14: google.protobuf.Timestamp +} +var file_runtime_internal_examplepb_example_proto_depIdxs = []int32{ + 7, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 7, // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 0, // 2: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 13, // 3: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 8, // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry + 9, // 5: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry + 10, // 6: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + 14, // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 0, // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 0, // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 0, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 7, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 7, // 12: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 11, // 13: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response + 12, // 14: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response + 1, // 15: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 16: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 7, // 17: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 2, // 18: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name +} + +func init() { file_runtime_internal_examplepb_example_proto_init() } +func file_runtime_internal_examplepb_example_proto_init() { + if File_runtime_internal_examplepb_example_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_runtime_internal_examplepb_example_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SimpleMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ABitOfEverything); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseBodyOut); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepeatedResponseBodyOut); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ABitOfEverything_Nested); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseBodyOut_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepeatedResponseBodyOut_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*ABitOfEverything_OneofEmpty)(nil), + (*ABitOfEverything_OneofString)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_runtime_internal_examplepb_example_proto_rawDesc, + NumEnums: 3, + NumMessages: 10, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_runtime_internal_examplepb_example_proto_goTypes, + DependencyIndexes: file_runtime_internal_examplepb_example_proto_depIdxs, + EnumInfos: file_runtime_internal_examplepb_example_proto_enumTypes, + MessageInfos: file_runtime_internal_examplepb_example_proto_msgTypes, + }.Build() + File_runtime_internal_examplepb_example_proto = out.File + file_runtime_internal_examplepb_example_proto_rawDesc = nil + file_runtime_internal_examplepb_example_proto_goTypes = nil + file_runtime_internal_examplepb_example_proto_depIdxs = nil } diff --git a/runtime/internal/examplepb/example.proto b/runtime/internal/examplepb/example.proto index 87d4189a736..370b397f88f 100644 --- a/runtime/internal/examplepb/example.proto +++ b/runtime/internal/examplepb/example.proto @@ -1,115 +1,103 @@ syntax = "proto3"; -option go_package = "examplepb"; - -import "google/protobuf/timestamp.proto"; -import "google/protobuf/empty.proto"; package grpc.gateway.runtime.internal.examplepb; -// SimpleMessage represents a simple message sent to the Echo service. -message SimpleMessage { - string id = 1; -} - -message ABitOfEverything { - // Nested is nested type. - message Nested { - // name is nested field. - string name = 1; - uint32 amount = 2; - // DeepEnum is one or zero. - enum DeepEnum { - // FALSE is false. - FALSE = 0; - // TRUE is true. - TRUE = 1; - } - - // DeepEnum comment. - DeepEnum ok = 3; - } - Nested single_nested = 25; - - string uuid = 1; - repeated Nested nested = 2; - float float_value = 3; - double double_value = 4; - int64 int64_value = 5; - uint64 uint64_value = 6; - int32 int32_value = 7; - fixed64 fixed64_value = 8; - fixed32 fixed32_value = 9; - bool bool_value = 10; - string string_value = 11; - bytes bytes_value = 29; - uint32 uint32_value = 13; - NumericEnum enum_value = 14; - sfixed32 sfixed32_value = 15; - sfixed64 sfixed64_value = 16; - sint32 sint32_value = 17; - sint64 sint64_value = 18; - repeated string repeated_string_value = 19; - oneof oneof_value { - google.protobuf.Empty oneof_empty = 20; - string oneof_string = 21; - } - - map map_value = 22; - map mapped_string_value = 23; - map mapped_nested_value = 24; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; - string nonConventionalNameValue = 26; - - google.protobuf.Timestamp timestamp_value = 27; - - // repeated enum value. it is comma-separated in query - repeated NumericEnum repeated_enum_value = 28; - - // repeated numeric enum comment (This comment is overridden by the field annotation) - repeated NumericEnum repeated_enum_annotation = 32; - - // numeric enum comment (This comment is overridden by the field annotation) - NumericEnum enum_value_annotation = 33; - - // repeated string comment (This comment is overridden by the field annotation) - repeated string repeated_string_annotation = 34; - - // repeated nested object comment (This comment is overridden by the field annotation) - repeated Nested repeated_nested_annotation = 35; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; - // nested object comments (This comment is overridden by the field annotation) - Nested nested_annotation = 36; +// SimpleMessage represents a simple message sent to the Echo service. +message SimpleMessage { string id = 1; } - int64 int64_override_type = 37; +message ABitOfEverything { + // Nested is nested type. + message Nested { + // name is nested field. + string name = 1; + uint32 amount = 2; + // DeepEnum is one or zero. + enum DeepEnum { + // FALSE is false. + FALSE = 0; + // TRUE is true. + TRUE = 1; + } + // DeepEnum comment. + DeepEnum ok = 3; + } + Nested single_nested = 25; + string uuid = 1; + repeated Nested nested = 2; + float float_value = 3; + double double_value = 4; + int64 int64_value = 5; + uint64 uint64_value = 6; + int32 int32_value = 7; + fixed64 fixed64_value = 8; + fixed32 fixed32_value = 9; + bool bool_value = 10; + string string_value = 11; + bytes bytes_value = 29; + uint32 uint32_value = 13; + NumericEnum enum_value = 14; + sfixed32 sfixed32_value = 15; + sfixed64 sfixed64_value = 16; + sint32 sint32_value = 17; + sint64 sint64_value = 18; + repeated string repeated_string_value = 19; + oneof oneof_value { + google.protobuf.Empty oneof_empty = 20; + string oneof_string = 21; + } + map map_value = 22; + map mapped_string_value = 23; + map mapped_nested_value = 24; + string nonConventionalNameValue = 26; + google.protobuf.Timestamp timestamp_value = 27; + // repeated enum value. it is comma-separated in query + repeated NumericEnum repeated_enum_value = 28; + // repeated numeric enum comment (This comment is overridden by the field + // annotation) + repeated NumericEnum repeated_enum_annotation = 32; + // numeric enum comment (This comment is overridden by the field annotation) + NumericEnum enum_value_annotation = 33; + // repeated string comment (This comment is overridden by the field + // annotation) + repeated string repeated_string_annotation = 34; + // repeated nested object comment (This comment is overridden by the field + // annotation) + repeated Nested repeated_nested_annotation = 35; + // nested object comments (This comment is overridden by the field annotation) + Nested nested_annotation = 36; + int64 int64_override_type = 37; } // NumericEnum is one or zero. enum NumericEnum { - // ZERO means 0 - ZERO = 0; - // ONE means 1 - ONE = 1; + // ZERO means 0 + ZERO = 0; + // ONE means 1 + ONE = 1; } message ResponseBodyOut { - message Response { - string data = 1; - } - Response response = 2; + message Response { string data = 1; } + Response response = 2; } message RepeatedResponseBodyOut { - message Response { - string data = 1; - enum ResponseType { - // UNKNOWN - UNKNOWN = 0; - // A is 1 - A = 1; - // B is 2 - B = 2; - } - ResponseType type = 3; - } - repeated Response response = 2; + message Response { + string data = 1; + enum ResponseType { + // UNKNOWN + UNKNOWN = 0; + // A is 1 + A = 1; + // B is 2 + B = 2; + } + ResponseType type = 3; + } + repeated Response response = 2; } diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go new file mode 100644 index 00000000000..7333784a6f5 --- /dev/null +++ b/runtime/internal/examplepb/proto2.pb.go @@ -0,0 +1,246 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 +// source: runtime/internal/examplepb/proto2.proto + +package examplepb + +import ( + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type Proto2Message struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FloatValue *float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + Int64Value *int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` + Int32Value *int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` + Uint64Value *uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` + Uint32Value *uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` + BoolValue *bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` + StringValue *string `protobuf:"bytes,8,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue" json:"bytes_value,omitempty"` + RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"` +} + +func (x *Proto2Message) Reset() { + *x = Proto2Message{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_proto2_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Proto2Message) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Proto2Message) ProtoMessage() {} + +func (x *Proto2Message) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_proto2_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Proto2Message.ProtoReflect.Descriptor instead. +func (*Proto2Message) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_proto2_proto_rawDescGZIP(), []int{0} +} + +func (x *Proto2Message) GetFloatValue() float32 { + if x != nil && x.FloatValue != nil { + return *x.FloatValue + } + return 0 +} + +func (x *Proto2Message) GetDoubleValue() float64 { + if x != nil && x.DoubleValue != nil { + return *x.DoubleValue + } + return 0 +} + +func (x *Proto2Message) GetInt64Value() int64 { + if x != nil && x.Int64Value != nil { + return *x.Int64Value + } + return 0 +} + +func (x *Proto2Message) GetInt32Value() int32 { + if x != nil && x.Int32Value != nil { + return *x.Int32Value + } + return 0 +} + +func (x *Proto2Message) GetUint64Value() uint64 { + if x != nil && x.Uint64Value != nil { + return *x.Uint64Value + } + return 0 +} + +func (x *Proto2Message) GetUint32Value() uint32 { + if x != nil && x.Uint32Value != nil { + return *x.Uint32Value + } + return 0 +} + +func (x *Proto2Message) GetBoolValue() bool { + if x != nil && x.BoolValue != nil { + return *x.BoolValue + } + return false +} + +func (x *Proto2Message) GetStringValue() string { + if x != nil && x.StringValue != nil { + return *x.StringValue + } + return "" +} + +func (x *Proto2Message) GetBytesValue() []byte { + if x != nil { + return x.BytesValue + } + return nil +} + +func (x *Proto2Message) GetRepeatedValue() []string { + if x != nil { + return x.RepeatedValue + } + return nil +} + +var File_runtime_internal_examplepb_proto2_proto protoreflect.FileDescriptor + +var file_runtime_internal_examplepb_proto2_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x22, 0xe5, 0x02, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, +} + +var ( + file_runtime_internal_examplepb_proto2_proto_rawDescOnce sync.Once + file_runtime_internal_examplepb_proto2_proto_rawDescData = file_runtime_internal_examplepb_proto2_proto_rawDesc +) + +func file_runtime_internal_examplepb_proto2_proto_rawDescGZIP() []byte { + file_runtime_internal_examplepb_proto2_proto_rawDescOnce.Do(func() { + file_runtime_internal_examplepb_proto2_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_proto2_proto_rawDescData) + }) + return file_runtime_internal_examplepb_proto2_proto_rawDescData +} + +var file_runtime_internal_examplepb_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_runtime_internal_examplepb_proto2_proto_goTypes = []interface{}{ + (*Proto2Message)(nil), // 0: grpc.gateway.runtime.internal.examplepb.Proto2Message +} +var file_runtime_internal_examplepb_proto2_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_runtime_internal_examplepb_proto2_proto_init() } +func file_runtime_internal_examplepb_proto2_proto_init() { + if File_runtime_internal_examplepb_proto2_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_runtime_internal_examplepb_proto2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proto2Message); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_runtime_internal_examplepb_proto2_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_runtime_internal_examplepb_proto2_proto_goTypes, + DependencyIndexes: file_runtime_internal_examplepb_proto2_proto_depIdxs, + MessageInfos: file_runtime_internal_examplepb_proto2_proto_msgTypes, + }.Build() + File_runtime_internal_examplepb_proto2_proto = out.File + file_runtime_internal_examplepb_proto2_proto_rawDesc = nil + file_runtime_internal_examplepb_proto2_proto_goTypes = nil + file_runtime_internal_examplepb_proto2_proto_depIdxs = nil +} diff --git a/runtime/internal/examplepb/proto2.proto b/runtime/internal/examplepb/proto2.proto new file mode 100644 index 00000000000..62fb7bc5ddd --- /dev/null +++ b/runtime/internal/examplepb/proto2.proto @@ -0,0 +1,18 @@ +syntax = "proto2"; + +package grpc.gateway.runtime.internal.examplepb; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; + +message Proto2Message { + optional float float_value = 42; + optional double double_value = 43; + optional int64 int64_value = 3; + optional int32 int32_value = 4; + optional uint64 uint64_value = 5; + optional uint32 uint32_value = 6; + optional bool bool_value = 7; + optional string string_value = 8; + optional bytes bytes_value = 9; + repeated string repeated_value = 10; +} diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go new file mode 100644 index 00000000000..5e27ac775f9 --- /dev/null +++ b/runtime/internal/examplepb/proto3.pb.go @@ -0,0 +1,848 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc v3.10.1 +// source: runtime/internal/examplepb/proto3.proto + +package examplepb + +import ( + proto "github.com/golang/protobuf/proto" + duration "github.com/golang/protobuf/ptypes/duration" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + wrappers "github.com/golang/protobuf/ptypes/wrappers" + field_mask "google.golang.org/genproto/protobuf/field_mask" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type EnumValue int32 + +const ( + EnumValue_X EnumValue = 0 + EnumValue_Y EnumValue = 1 + EnumValue_Z EnumValue = 2 +) + +// Enum value maps for EnumValue. +var ( + EnumValue_name = map[int32]string{ + 0: "X", + 1: "Y", + 2: "Z", + } + EnumValue_value = map[string]int32{ + "X": 0, + "Y": 1, + "Z": 2, + } +) + +func (x EnumValue) Enum() *EnumValue { + p := new(EnumValue) + *p = x + return p +} + +func (x EnumValue) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EnumValue) Descriptor() protoreflect.EnumDescriptor { + return file_runtime_internal_examplepb_proto3_proto_enumTypes[0].Descriptor() +} + +func (EnumValue) Type() protoreflect.EnumType { + return &file_runtime_internal_examplepb_proto3_proto_enumTypes[0] +} + +func (x EnumValue) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EnumValue.Descriptor instead. +func (EnumValue) EnumDescriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_proto3_proto_rawDescGZIP(), []int{0} +} + +type Proto3Message struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Int32Value int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + BoolValue bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,8,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` + EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"enum_value,omitempty"` + RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"repeated_enum,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + DurationValue *duration.Duration `protobuf:"bytes,14,opt,name=duration_value,json=durationValue,proto3" json:"duration_value,omitempty"` + FieldmaskValue *field_mask.FieldMask `protobuf:"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3" json:"fieldmask_value,omitempty"` + // Types that are assignable to OneofValue: + // *Proto3Message_OneofBoolValue + // *Proto3Message_OneofStringValue + OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` + WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` + WrapperFloatValue *wrappers.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` + WrapperInt64Value *wrappers.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` + WrapperInt32Value *wrappers.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3" json:"wrapper_int32_value,omitempty"` + WrapperUInt64Value *wrappers.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3" json:"wrapper_u_int64_value,omitempty"` + WrapperUInt32Value *wrappers.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3" json:"wrapper_u_int32_value,omitempty"` + WrapperBoolValue *wrappers.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3" json:"wrapper_bool_value,omitempty"` + WrapperStringValue *wrappers.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3" json:"wrapper_string_value,omitempty"` + WrapperBytesValue *wrappers.BytesValue `protobuf:"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3" json:"wrapper_bytes_value,omitempty"` + MapValue map[string]string `protobuf:"bytes,26,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue2 map[string]int32 `protobuf:"bytes,27,rep,name=map_value2,json=mapValue2,proto3" json:"map_value2,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue3 map[int32]string `protobuf:"bytes,28,rep,name=map_value3,json=mapValue3,proto3" json:"map_value3,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue4 map[string]int64 `protobuf:"bytes,29,rep,name=map_value4,json=mapValue4,proto3" json:"map_value4,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue5 map[int64]string `protobuf:"bytes,30,rep,name=map_value5,json=mapValue5,proto3" json:"map_value5,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue6 map[string]uint32 `protobuf:"bytes,31,rep,name=map_value6,json=mapValue6,proto3" json:"map_value6,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue7 map[uint32]string `protobuf:"bytes,32,rep,name=map_value7,json=mapValue7,proto3" json:"map_value7,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue8 map[string]uint64 `protobuf:"bytes,33,rep,name=map_value8,json=mapValue8,proto3" json:"map_value8,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue9 map[uint64]string `protobuf:"bytes,34,rep,name=map_value9,json=mapValue9,proto3" json:"map_value9,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue10 map[string]float32 `protobuf:"bytes,35,rep,name=map_value10,json=mapValue10,proto3" json:"map_value10,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` + MapValue12 map[string]float64 `protobuf:"bytes,37,rep,name=map_value12,json=mapValue12,proto3" json:"map_value12,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Proto3Message) Reset() { + *x = Proto3Message{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_proto3_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Proto3Message) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Proto3Message) ProtoMessage() {} + +func (x *Proto3Message) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_proto3_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Proto3Message.ProtoReflect.Descriptor instead. +func (*Proto3Message) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_proto3_proto_rawDescGZIP(), []int{0} +} + +func (x *Proto3Message) GetNested() *Proto3Message { + if x != nil { + return x.Nested + } + return nil +} + +func (x *Proto3Message) GetFloatValue() float32 { + if x != nil { + return x.FloatValue + } + return 0 +} + +func (x *Proto3Message) GetDoubleValue() float64 { + if x != nil { + return x.DoubleValue + } + return 0 +} + +func (x *Proto3Message) GetInt64Value() int64 { + if x != nil { + return x.Int64Value + } + return 0 +} + +func (x *Proto3Message) GetInt32Value() int32 { + if x != nil { + return x.Int32Value + } + return 0 +} + +func (x *Proto3Message) GetUint64Value() uint64 { + if x != nil { + return x.Uint64Value + } + return 0 +} + +func (x *Proto3Message) GetUint32Value() uint32 { + if x != nil { + return x.Uint32Value + } + return 0 +} + +func (x *Proto3Message) GetBoolValue() bool { + if x != nil { + return x.BoolValue + } + return false +} + +func (x *Proto3Message) GetStringValue() string { + if x != nil { + return x.StringValue + } + return "" +} + +func (x *Proto3Message) GetBytesValue() []byte { + if x != nil { + return x.BytesValue + } + return nil +} + +func (x *Proto3Message) GetRepeatedValue() []string { + if x != nil { + return x.RepeatedValue + } + return nil +} + +func (x *Proto3Message) GetEnumValue() EnumValue { + if x != nil { + return x.EnumValue + } + return EnumValue_X +} + +func (x *Proto3Message) GetRepeatedEnum() []EnumValue { + if x != nil { + return x.RepeatedEnum + } + return nil +} + +func (x *Proto3Message) GetTimestampValue() *timestamp.Timestamp { + if x != nil { + return x.TimestampValue + } + return nil +} + +func (x *Proto3Message) GetDurationValue() *duration.Duration { + if x != nil { + return x.DurationValue + } + return nil +} + +func (x *Proto3Message) GetFieldmaskValue() *field_mask.FieldMask { + if x != nil { + return x.FieldmaskValue + } + return nil +} + +func (m *Proto3Message) GetOneofValue() isProto3Message_OneofValue { + if m != nil { + return m.OneofValue + } + return nil +} + +func (x *Proto3Message) GetOneofBoolValue() bool { + if x, ok := x.GetOneofValue().(*Proto3Message_OneofBoolValue); ok { + return x.OneofBoolValue + } + return false +} + +func (x *Proto3Message) GetOneofStringValue() string { + if x, ok := x.GetOneofValue().(*Proto3Message_OneofStringValue); ok { + return x.OneofStringValue + } + return "" +} + +func (x *Proto3Message) GetWrapperDoubleValue() *wrappers.DoubleValue { + if x != nil { + return x.WrapperDoubleValue + } + return nil +} + +func (x *Proto3Message) GetWrapperFloatValue() *wrappers.FloatValue { + if x != nil { + return x.WrapperFloatValue + } + return nil +} + +func (x *Proto3Message) GetWrapperInt64Value() *wrappers.Int64Value { + if x != nil { + return x.WrapperInt64Value + } + return nil +} + +func (x *Proto3Message) GetWrapperInt32Value() *wrappers.Int32Value { + if x != nil { + return x.WrapperInt32Value + } + return nil +} + +func (x *Proto3Message) GetWrapperUInt64Value() *wrappers.UInt64Value { + if x != nil { + return x.WrapperUInt64Value + } + return nil +} + +func (x *Proto3Message) GetWrapperUInt32Value() *wrappers.UInt32Value { + if x != nil { + return x.WrapperUInt32Value + } + return nil +} + +func (x *Proto3Message) GetWrapperBoolValue() *wrappers.BoolValue { + if x != nil { + return x.WrapperBoolValue + } + return nil +} + +func (x *Proto3Message) GetWrapperStringValue() *wrappers.StringValue { + if x != nil { + return x.WrapperStringValue + } + return nil +} + +func (x *Proto3Message) GetWrapperBytesValue() *wrappers.BytesValue { + if x != nil { + return x.WrapperBytesValue + } + return nil +} + +func (x *Proto3Message) GetMapValue() map[string]string { + if x != nil { + return x.MapValue + } + return nil +} + +func (x *Proto3Message) GetMapValue2() map[string]int32 { + if x != nil { + return x.MapValue2 + } + return nil +} + +func (x *Proto3Message) GetMapValue3() map[int32]string { + if x != nil { + return x.MapValue3 + } + return nil +} + +func (x *Proto3Message) GetMapValue4() map[string]int64 { + if x != nil { + return x.MapValue4 + } + return nil +} + +func (x *Proto3Message) GetMapValue5() map[int64]string { + if x != nil { + return x.MapValue5 + } + return nil +} + +func (x *Proto3Message) GetMapValue6() map[string]uint32 { + if x != nil { + return x.MapValue6 + } + return nil +} + +func (x *Proto3Message) GetMapValue7() map[uint32]string { + if x != nil { + return x.MapValue7 + } + return nil +} + +func (x *Proto3Message) GetMapValue8() map[string]uint64 { + if x != nil { + return x.MapValue8 + } + return nil +} + +func (x *Proto3Message) GetMapValue9() map[uint64]string { + if x != nil { + return x.MapValue9 + } + return nil +} + +func (x *Proto3Message) GetMapValue10() map[string]float32 { + if x != nil { + return x.MapValue10 + } + return nil +} + +func (x *Proto3Message) GetMapValue12() map[string]float64 { + if x != nil { + return x.MapValue12 + } + return nil +} + +func (x *Proto3Message) GetMapValue14() map[string]bool { + if x != nil { + return x.MapValue14 + } + return nil +} + +func (x *Proto3Message) GetMapValue15() map[bool]string { + if x != nil { + return x.MapValue15 + } + return nil +} + +type isProto3Message_OneofValue interface { + isProto3Message_OneofValue() +} + +type Proto3Message_OneofBoolValue struct { + OneofBoolValue bool `protobuf:"varint,1,opt,name=oneof_bool_value,json=oneofBoolValue,proto3,oneof"` +} + +type Proto3Message_OneofStringValue struct { + OneofStringValue string `protobuf:"bytes,2,opt,name=oneof_string_value,json=oneofStringValue,proto3,oneof"` +} + +func (*Proto3Message_OneofBoolValue) isProto3Message_OneofValue() {} + +func (*Proto3Message_OneofStringValue) isProto3Message_OneofValue() {} + +var File_runtime_internal_examplepb_proto3_proto protoreflect.FileDescriptor + +var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x1d, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x51, 0x0a, + 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, + 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, + 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, + 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, + 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, + 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, + 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, + 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, + 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, + 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, + 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, + 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x2a, 0x20, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0x0a, + 0x01, 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, + 0x10, 0x02, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_runtime_internal_examplepb_proto3_proto_rawDescOnce sync.Once + file_runtime_internal_examplepb_proto3_proto_rawDescData = file_runtime_internal_examplepb_proto3_proto_rawDesc +) + +func file_runtime_internal_examplepb_proto3_proto_rawDescGZIP() []byte { + file_runtime_internal_examplepb_proto3_proto_rawDescOnce.Do(func() { + file_runtime_internal_examplepb_proto3_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_proto3_proto_rawDescData) + }) + return file_runtime_internal_examplepb_proto3_proto_rawDescData +} + +var file_runtime_internal_examplepb_proto3_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_runtime_internal_examplepb_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_runtime_internal_examplepb_proto3_proto_goTypes = []interface{}{ + (EnumValue)(0), // 0: grpc.gateway.runtime.internal.examplepb.EnumValue + (*Proto3Message)(nil), // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message + nil, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry + nil, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry + nil, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry + nil, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry + nil, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry + nil, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry + nil, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry + nil, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry + nil, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry + nil, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry + nil, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry + nil, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry + nil, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry + (*timestamp.Timestamp)(nil), // 15: google.protobuf.Timestamp + (*duration.Duration)(nil), // 16: google.protobuf.Duration + (*field_mask.FieldMask)(nil), // 17: google.protobuf.FieldMask + (*wrappers.DoubleValue)(nil), // 18: google.protobuf.DoubleValue + (*wrappers.FloatValue)(nil), // 19: google.protobuf.FloatValue + (*wrappers.Int64Value)(nil), // 20: google.protobuf.Int64Value + (*wrappers.Int32Value)(nil), // 21: google.protobuf.Int32Value + (*wrappers.UInt64Value)(nil), // 22: google.protobuf.UInt64Value + (*wrappers.UInt32Value)(nil), // 23: google.protobuf.UInt32Value + (*wrappers.BoolValue)(nil), // 24: google.protobuf.BoolValue + (*wrappers.StringValue)(nil), // 25: google.protobuf.StringValue + (*wrappers.BytesValue)(nil), // 26: google.protobuf.BytesValue +} +var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ + 1, // 0: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message + 0, // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue + 0, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_enum:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue + 15, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.timestamp_value:type_name -> google.protobuf.Timestamp + 16, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.duration_value:type_name -> google.protobuf.Duration + 17, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.fieldmask_value:type_name -> google.protobuf.FieldMask + 18, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue + 19, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue + 20, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value + 21, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value + 22, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value + 23, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value + 24, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue + 25, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue + 26, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue + 2, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry + 3, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry + 4, // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry + 5, // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry + 6, // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry + 7, // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry + 8, // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry + 9, // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry + 10, // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry + 11, // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry + 12, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry + 13, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry + 14, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry + 28, // [28:28] is the sub-list for method output_type + 28, // [28:28] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name +} + +func init() { file_runtime_internal_examplepb_proto3_proto_init() } +func file_runtime_internal_examplepb_proto3_proto_init() { + if File_runtime_internal_examplepb_proto3_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_runtime_internal_examplepb_proto3_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proto3Message); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_runtime_internal_examplepb_proto3_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Proto3Message_OneofBoolValue)(nil), + (*Proto3Message_OneofStringValue)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_runtime_internal_examplepb_proto3_proto_rawDesc, + NumEnums: 1, + NumMessages: 14, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_runtime_internal_examplepb_proto3_proto_goTypes, + DependencyIndexes: file_runtime_internal_examplepb_proto3_proto_depIdxs, + EnumInfos: file_runtime_internal_examplepb_proto3_proto_enumTypes, + MessageInfos: file_runtime_internal_examplepb_proto3_proto_msgTypes, + }.Build() + File_runtime_internal_examplepb_proto3_proto = out.File + file_runtime_internal_examplepb_proto3_proto_rawDesc = nil + file_runtime_internal_examplepb_proto3_proto_goTypes = nil + file_runtime_internal_examplepb_proto3_proto_depIdxs = nil +} diff --git a/runtime/internal/examplepb/proto3.proto b/runtime/internal/examplepb/proto3.proto new file mode 100644 index 00000000000..8e9b81d6093 --- /dev/null +++ b/runtime/internal/examplepb/proto3.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; + +package grpc.gateway.runtime.internal.examplepb; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb"; + +import "google/protobuf/duration.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +message Proto3Message { + Proto3Message nested = 41; + float float_value = 42; + double double_value = 43; + int64 int64_value = 3; + int32 int32_value = 4; + uint64 uint64_value = 5; + uint32 uint32_value = 6; + bool bool_value = 7; + string string_value = 8; + bytes bytes_value = 9; + repeated string repeated_value = 10; + EnumValue enum_value = 11; + repeated EnumValue repeated_enum = 12; + google.protobuf.Timestamp timestamp_value = 13; + google.protobuf.Duration duration_value = 14; + google.protobuf.FieldMask fieldmask_value = 15; + oneof oneof_value { + bool oneof_bool_value = 1; + string oneof_string_value = 2; + } + google.protobuf.DoubleValue wrapper_double_value = 17; + google.protobuf.FloatValue wrapper_float_value = 18; + google.protobuf.Int64Value wrapper_int64_value = 19; + google.protobuf.Int32Value wrapper_int32_value = 20; + google.protobuf.UInt64Value wrapper_u_int64_value = 21; + google.protobuf.UInt32Value wrapper_u_int32_value = 22; + google.protobuf.BoolValue wrapper_bool_value = 23; + google.protobuf.StringValue wrapper_string_value = 24; + google.protobuf.BytesValue wrapper_bytes_value = 25; + map map_value = 26; + map map_value2 = 27; + map map_value3 = 28; + map map_value4 = 29; + map map_value5 = 30; + map map_value6 = 31; + map map_value7 = 32; + map map_value8 = 33; + map map_value9 = 34; + map map_value10 = 35; + map map_value12 = 37; + map map_value14 = 39; + map map_value15 = 40; +} + +enum EnumValue { + X = 0; + Y = 1; + Z = 2; +} diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index f0b5911d44d..8d7d969d375 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -14,8 +14,10 @@ import ( structpb "github.com/golang/protobuf/ptypes/struct" "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" + "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" + "google.golang.org/protobuf/testing/protocmp" ) func TestJSONPbMarshal(t *testing.T) { @@ -101,27 +103,29 @@ func TestJSONPbMarshal(t *testing.T) { }, }, } { - m := runtime.JSONPb{ - EnumsAsInts: spec.enumsAsInts, - EmitDefaults: spec.emitDefaults, - Indent: spec.indent, - OrigName: spec.origName, - } - buf, err := m.Marshal(&msg) - if err != nil { - t.Errorf("m.Marshal(%v) failed with %v; want success; spec=%v", &msg, err, spec) - } + t.Run(strconv.Itoa(i), func(t *testing.T) { + m := runtime.JSONPb{ + EnumsAsInts: spec.enumsAsInts, + EmitDefaults: spec.emitDefaults, + Indent: spec.indent, + OrigName: spec.origName, + } + buf, err := m.Marshal(&msg) + if err != nil { + t.Errorf("m.Marshal(%v) failed with %v; want success; spec=%v", &msg, err, spec) + } - var got examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &got); err != nil { - t.Errorf("jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v", string(buf), err, spec) - } - if want := msg; !reflect.DeepEqual(got, want) { - t.Errorf("case %d: got = %v; want %v; spec=%v", i, &got, &want, spec) - } - if spec.verifier != nil { - spec.verifier(string(buf)) - } + var got examplepb.ABitOfEverything + if err := jsonpb.UnmarshalString(string(buf), &got); err != nil { + t.Errorf("jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v", string(buf), err, spec) + } + if diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != "" { + t.Errorf("case %d: spec=%v; %s", i, spec, diff) + } + if spec.verifier != nil { + spec.verifier(string(buf)) + } + }) } } @@ -217,8 +221,8 @@ func TestJSONPbUnmarshal(t *testing.T) { }, } - if !reflect.DeepEqual(got, want) { - t.Errorf("case %d: got = %v; want = %v", i, &got, &want) + if diff := cmp.Diff(&got, &want, protocmp.Transform()); diff != "" { + t.Errorf("case %d: %s", i, diff) } } } @@ -234,8 +238,8 @@ func TestJSONPbUnmarshalFields(t *testing.T) { if err := m.Unmarshal([]byte(fixt.json), dest.Interface()); err != nil { t.Errorf("m.Unmarshal(%q, %T) failed with %v; want success", fixt.json, dest.Interface(), err) } - if got, want := dest.Elem().Interface(), fixt.data; !reflect.DeepEqual(got, want) { - t.Errorf("dest = %#v; want %#v; input = %v", got, want, fixt.json) + if diff := cmp.Diff(dest.Elem().Interface(), fixt.data, protocmp.Transform()); diff != "" { + t.Errorf("dest = %#v; want %#v; input = %v", dest.Elem().Interface(), fixt.data, fixt.json) } } } @@ -342,8 +346,8 @@ func TestJSONPbEncoder(t *testing.T) { if err := jsonpb.UnmarshalString(buf.String(), &got); err != nil { t.Errorf("jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v", buf.String(), err, spec) } - if want := msg; !reflect.DeepEqual(got, want) { - t.Errorf("case %d: got = %v; want %v; spec=%v", i, &got, &want, spec) + if diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != "" { + t.Errorf("case %d: %s", i, diff) } if spec.verifier != nil { spec.verifier(buf.String()) @@ -444,8 +448,8 @@ func TestJSONPbDecoder(t *testing.T) { "b": examplepb.NumericEnum_ZERO, }, } - if !reflect.DeepEqual(got, want) { - t.Errorf("got = %v; want = %v; data = %v", &got, &want, data) + if diff := cmp.Diff(&got, &want, protocmp.Transform()); diff != "" { + t.Errorf("data %q: %s", data, diff) } } } diff --git a/runtime/query_test.go b/runtime/query_test.go index 8b20c40edc5..33b6ef06fa1 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -2,20 +2,21 @@ package runtime_test import ( "errors" - "fmt" "net/url" "reflect" + "strconv" "testing" "time" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/duration" - "github.com/golang/protobuf/ptypes/timestamp" "github.com/golang/protobuf/ptypes/wrappers" + "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/testing/protocmp" ) func BenchmarkPopulateQueryParameters(b *testing.B) { @@ -27,7 +28,7 @@ func BenchmarkPopulateQueryParameters(b *testing.B) { fieldmaskStr := "float_value,double_value" - msg := &proto3Message{} + msg := &examplepb.Proto3Message{} values := url.Values{ "float_value": {"1.5"}, "double_value": {"2.5"}, @@ -97,7 +98,7 @@ func TestPopulateParameters(t *testing.T) { fieldmaskStr := "float_value,double_value" fieldmaskPb := &field_mask.FieldMask{Paths: []string{"float_value", "double_value"}} - for _, spec := range []struct { + for i, spec := range []struct { values url.Values filter *utilities.DoubleArray want proto.Message @@ -150,7 +151,7 @@ func TestPopulateParameters(t *testing.T) { "map_value15[true]": {"value"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ + want: &examplepb.Proto3Message{ FloatValue: 1.5, DoubleValue: 2.5, Int64Value: -1, @@ -161,11 +162,11 @@ func TestPopulateParameters(t *testing.T) { StringValue: "str", BytesValue: []byte("bytes"), RepeatedValue: []string{"a", "b", "c"}, - EnumValue: EnumValue_Y, - RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, + EnumValue: examplepb.EnumValue_Y, + RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X}, TimestampValue: timePb, DurationValue: durationPb, - FieldMaskValue: fieldmaskPb, + FieldmaskValue: fieldmaskPb, WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, WrapperInt64Value: &wrappers.Int64Value{Value: -1}, @@ -191,9 +192,7 @@ func TestPopulateParameters(t *testing.T) { MapValue8: map[string]uint64{"key": 4}, MapValue9: map[uint64]string{4: "value"}, MapValue10: map[string]float32{"key": 1.5}, - MapValue11: map[float32]string{1.5: "value"}, MapValue12: map[string]float64{"key": 2.5}, - MapValue13: map[float64]string{2.5: "value"}, MapValue14: map[string]bool{"key": true}, MapValue15: map[bool]string{true: "value"}, }, @@ -226,7 +225,7 @@ func TestPopulateParameters(t *testing.T) { "wrapperBytesValue": {"Ynl0ZXM="}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ + want: &examplepb.Proto3Message{ FloatValue: 1.5, DoubleValue: 2.5, Int64Value: -1, @@ -237,11 +236,11 @@ func TestPopulateParameters(t *testing.T) { StringValue: "str", BytesValue: []byte("bytes"), RepeatedValue: []string{"a", "b", "c"}, - EnumValue: EnumValue_Y, - RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, + EnumValue: examplepb.EnumValue_Y, + RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X}, TimestampValue: timePb, DurationValue: durationPb, - FieldMaskValue: fieldmaskPb, + FieldmaskValue: fieldmaskPb, WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, WrapperInt64Value: &wrappers.Int64Value{Value: -1}, @@ -255,13 +254,13 @@ func TestPopulateParameters(t *testing.T) { }, { values: url.Values{ - "enum_value": {"EnumValue_Z"}, - "repeated_enum": {"EnumValue_X", "2", "0"}, + "enum_value": {"Z"}, + "repeated_enum": {"X", "2", "0"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ - EnumValue: EnumValue_Z, - RepeatedEnum: []EnumValue{EnumValue_X, EnumValue_Z, EnumValue_X}, + want: &examplepb.Proto3Message{ + EnumValue: examplepb.EnumValue_Z, + RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_X, examplepb.EnumValue_Z, examplepb.EnumValue_X}, }, }, { @@ -275,11 +274,9 @@ func TestPopulateParameters(t *testing.T) { "bool_value": {"true"}, "string_value": {"str"}, "repeated_value": {"a", "b", "c"}, - "enum_value": {"1"}, - "repeated_enum": {"1", "2", "0"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto2Message{ + want: &examplepb.Proto2Message{ FloatValue: proto.Float32(1.5), DoubleValue: proto.Float64(2.5), Int64Value: proto.Int64(-1), @@ -289,8 +286,6 @@ func TestPopulateParameters(t *testing.T) { BoolValue: proto.Bool(true), StringValue: proto.String("str"), RepeatedValue: []string{"a", "b", "c"}, - EnumValue: EnumValue_Y, - RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, }, }, { @@ -304,11 +299,9 @@ func TestPopulateParameters(t *testing.T) { "boolValue": {"true"}, "stringValue": {"str"}, "repeatedValue": {"a", "b", "c"}, - "enumValue": {"1"}, - "repeatedEnum": {"1", "2", "0"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto2Message{ + want: &examplepb.Proto2Message{ FloatValue: proto.Float32(1.5), DoubleValue: proto.Float64(2.5), Int64Value: proto.Int64(-1), @@ -318,8 +311,6 @@ func TestPopulateParameters(t *testing.T) { BoolValue: proto.Bool(true), StringValue: proto.String("str"), RepeatedValue: []string{"a", "b", "c"}, - EnumValue: EnumValue_Y, - RepeatedEnum: []EnumValue{EnumValue_Y, EnumValue_Z, EnumValue_X}, }, }, { @@ -328,28 +319,24 @@ func TestPopulateParameters(t *testing.T) { "nested.nested.nested.string_value": {"s"}, "nested.nested.string_value": {"t"}, "nested.string_value": {"u"}, - "nested_non_null.string_value": {"v"}, "nested.nested.map_value[first]": {"foo"}, "nested.nested.map_value[second]": {"bar"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ - Nested: &proto2Message{ - Nested: &proto3Message{ + want: &examplepb.Proto3Message{ + Nested: &examplepb.Proto3Message{ + Nested: &examplepb.Proto3Message{ MapValue: map[string]string{ "first": "foo", "second": "bar", }, - Nested: &proto2Message{ + Nested: &examplepb.Proto3Message{ RepeatedValue: []string{"a", "b", "c"}, - StringValue: proto.String("s"), + StringValue: "s", }, StringValue: "t", }, - StringValue: proto.String("u"), - }, - NestedNonNull: proto2Message{ - StringValue: proto.String("v"), + StringValue: "u", }, }, }, @@ -358,7 +345,7 @@ func TestPopulateParameters(t *testing.T) { "uint64_value": {"1", "2", "3", "4", "5"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ + want: &examplepb.Proto3Message{ Uint64Value: 1, }, }, @@ -367,8 +354,10 @@ func TestPopulateParameters(t *testing.T) { "oneof_string_value": {"foobar"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ - OneofValue: &proto3Message_OneofStringValue{"foobar"}, + want: &examplepb.Proto3Message{ + OneofValue: &examplepb.Proto3Message_OneofStringValue{ + OneofStringValue: "foobar", + }, }, }, { @@ -376,8 +365,10 @@ func TestPopulateParameters(t *testing.T) { "oneofStringValue": {"foobar"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ - OneofValue: &proto3Message_OneofStringValue{"foobar"}, + want: &examplepb.Proto3Message{ + OneofValue: &examplepb.Proto3Message_OneofStringValue{ + OneofStringValue: "foobar", + }, }, }, { @@ -385,8 +376,10 @@ func TestPopulateParameters(t *testing.T) { "oneof_bool_value": {"true"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{ - OneofValue: &proto3Message_OneofBoolValue{true}, + want: &examplepb.Proto3Message{ + OneofValue: &examplepb.Proto3Message_OneofBoolValue{ + OneofBoolValue: true, + }, }, }, { @@ -396,27 +389,29 @@ func TestPopulateParameters(t *testing.T) { "oneof_string_value": {"foobar"}, }, filter: utilities.NewDoubleArray(nil), - want: &proto3Message{}, + want: &examplepb.Proto3Message{}, wanterr: errors.New("field already set for oneof_value oneof"), }, } { - msg := proto.Clone(spec.want) - msg.Reset() - err := runtime.PopulateQueryParameters(msg, spec.values, spec.filter) - if spec.wanterr != nil { - if !reflect.DeepEqual(err, spec.wanterr) { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want error %v", spec.values, spec.filter, err, spec.wanterr) + t.Run(strconv.Itoa(i), func(t *testing.T) { + msg := proto.Clone(spec.want) + msg.Reset() + err := runtime.PopulateQueryParameters(msg, spec.values, spec.filter) + if spec.wanterr != nil { + if !reflect.DeepEqual(err, spec.wanterr) { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want error %v", spec.values, spec.filter, err, spec.wanterr) + } + return } - continue - } - if err != nil { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want success", spec.values, spec.filter, err) - continue - } - if got, want := msg, spec.want; !proto.Equal(got, want) { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v = %v; want %v", spec.values, spec.filter, got, want) - } + if err != nil { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want success", spec.values, spec.filter, err) + return + } + if diff := cmp.Diff(spec.want, msg, protocmp.Transform()); diff != "" { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v): %s", spec.values, spec.filter, diff) + } + }) } } @@ -480,7 +475,7 @@ func TestPopulateParametersWithFilters(t *testing.T) { filter: utilities.NewDoubleArray([][]string{ {"bool_value"}, {"repeated_value"}, }), - want: &proto3Message{ + want: &examplepb.Proto3Message{ StringValue: "str", }, }, @@ -494,7 +489,7 @@ func TestPopulateParametersWithFilters(t *testing.T) { filter: utilities.NewDoubleArray([][]string{ {"nested"}, }), - want: &proto3Message{ + want: &examplepb.Proto3Message{ StringValue: "str", }, }, @@ -508,9 +503,9 @@ func TestPopulateParametersWithFilters(t *testing.T) { filter: utilities.NewDoubleArray([][]string{ {"nested", "nested"}, }), - want: &proto3Message{ - Nested: &proto2Message{ - StringValue: proto.String("str"), + want: &examplepb.Proto3Message{ + Nested: &examplepb.Proto3Message{ + StringValue: "str", }, StringValue: "str", }, @@ -525,10 +520,10 @@ func TestPopulateParametersWithFilters(t *testing.T) { filter: utilities.NewDoubleArray([][]string{ {"nested", "nested", "string_value"}, }), - want: &proto3Message{ - Nested: &proto2Message{ - StringValue: proto.String("str"), - Nested: &proto3Message{ + want: &examplepb.Proto3Message{ + Nested: &examplepb.Proto3Message{ + StringValue: "str", + Nested: &examplepb.Proto3Message{ BoolValue: true, }, }, @@ -556,84 +551,84 @@ func TestPopulateQueryParametersWithInvalidNestedParameters(t *testing.T) { filter *utilities.DoubleArray }{ { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "float_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "double_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "int64_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "int32_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "uint64_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "uint32_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "bool_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "string_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "repeated_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "enum_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "enum_value.nested": {"test"}, }, filter: utilities.NewDoubleArray(nil), }, { - msg: &proto3Message{}, + msg: &examplepb.Proto3Message{}, values: url.Values{ "repeated_enum.nested": {"test"}, }, @@ -648,166 +643,6 @@ func TestPopulateQueryParametersWithInvalidNestedParameters(t *testing.T) { } } -type proto3Message struct { - Nested *proto2Message `protobuf:"bytes,1,opt,name=nested,json=nested" json:"nested,omitempty"` - NestedNonNull proto2Message `protobuf:"bytes,15,opt,name=nested_non_null,json=nestedNonNull" json:"nested_non_null,omitempty"` - FloatValue float32 `protobuf:"fixed32,2,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,4,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - Int32Value int32 `protobuf:"varint,5,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,7,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` - BoolValue bool `protobuf:"varint,8,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,9,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - BytesValue []byte `protobuf:"bytes,25,opt,name=bytes_value,json=bytesValue" json:"bytes_value,omitempty"` - RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"` - EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,enum=runtime_test_api.EnumValue" json:"enum_value,omitempty"` - RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,enum=runtime_test_api.EnumValue" json:"repeated_enum,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,16,opt,name=timestamp_value,json=timestampValue" json:"timestamp_value,omitempty"` - DurationValue *duration.Duration `protobuf:"bytes,42,opt,name=duration_value,json=durationValue" json:"duration_value,omitempty"` - FieldMaskValue *field_mask.FieldMask `protobuf:"bytes,27,opt,name=fieldmask_value,json=fieldmaskValue" json:"fieldmask_value,omitempty"` - OneofValue proto3Message_OneofValue `protobuf_oneof:"oneof_value"` - WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue" json:"wrapper_double_value,omitempty"` - WrapperFloatValue *wrappers.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue" json:"wrapper_float_value,omitempty"` - WrapperInt64Value *wrappers.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value" json:"wrapper_int64_value,omitempty"` - WrapperInt32Value *wrappers.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value" json:"wrapper_int32_value,omitempty"` - WrapperUInt64Value *wrappers.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value" json:"wrapper_u_int64_value,omitempty"` - WrapperUInt32Value *wrappers.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value" json:"wrapper_u_int32_value,omitempty"` - WrapperBoolValue *wrappers.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue" json:"wrapper_bool_value,omitempty"` - WrapperStringValue *wrappers.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue" json:"wrapper_string_value,omitempty"` - WrapperBytesValue *wrappers.BytesValue `protobuf:"bytes,26,opt,name=wrapper_bytes_value,json=wrapperBytesValue" json:"wrapper_bytes_value,omitempty"` - MapValue map[string]string `protobuf:"bytes,27,opt,name=map_value,json=mapValue" json:"map_value,omitempty"` - MapValue2 map[string]int32 `protobuf:"bytes,28,opt,name=map_value2,json=mapValue2" json:"map_value2,omitempty"` - MapValue3 map[int32]string `protobuf:"bytes,29,opt,name=map_value3,json=mapValue3" json:"map_value3,omitempty"` - MapValue4 map[string]int64 `protobuf:"bytes,30,opt,name=map_value4,json=mapValue4" json:"map_value4,omitempty"` - MapValue5 map[int64]string `protobuf:"bytes,31,opt,name=map_value5,json=mapValue5" json:"map_value5,omitempty"` - MapValue6 map[string]uint32 `protobuf:"bytes,32,opt,name=map_value6,json=mapValue6" json:"map_value6,omitempty"` - MapValue7 map[uint32]string `protobuf:"bytes,33,opt,name=map_value7,json=mapValue7" json:"map_value7,omitempty"` - MapValue8 map[string]uint64 `protobuf:"bytes,34,opt,name=map_value8,json=mapValue8" json:"map_value8,omitempty"` - MapValue9 map[uint64]string `protobuf:"bytes,35,opt,name=map_value9,json=mapValue9" json:"map_value9,omitempty"` - MapValue10 map[string]float32 `protobuf:"bytes,36,opt,name=map_value10,json=mapValue10" json:"map_value10,omitempty"` - MapValue11 map[float32]string `protobuf:"bytes,37,opt,name=map_value11,json=mapValue11" json:"map_value11,omitempty"` - MapValue12 map[string]float64 `protobuf:"bytes,38,opt,name=map_value12,json=mapValue12" json:"map_value12,omitempty"` - MapValue13 map[float64]string `protobuf:"bytes,39,opt,name=map_value13,json=mapValue13" json:"map_value13,omitempty"` - MapValue14 map[string]bool `protobuf:"bytes,40,opt,name=map_value14,json=mapValue14" json:"map_value14,omitempty"` - MapValue15 map[bool]string `protobuf:"bytes,41,opt,name=map_value15,json=mapValue15" json:"map_value15,omitempty"` -} - -func (m *proto3Message) Reset() { *m = proto3Message{} } -func (m *proto3Message) String() string { return proto.CompactTextString(m) } -func (*proto3Message) ProtoMessage() {} - -func (m *proto3Message) GetNested() *proto2Message { - if m != nil { - return m.Nested - } - return nil -} - -type proto3Message_OneofValue interface { - proto3Message_OneofValue() -} - -type proto3Message_OneofBoolValue struct { - OneofBoolValue bool `protobuf:"varint,13,opt,name=oneof_bool_value,json=oneofBoolValue,oneof"` -} -type proto3Message_OneofStringValue struct { - OneofStringValue string `protobuf:"bytes,14,opt,name=oneof_string_value,json=oneofStringValue,oneof"` -} - -func (*proto3Message_OneofBoolValue) proto3Message_OneofValue() {} -func (*proto3Message_OneofStringValue) proto3Message_OneofValue() {} - -func (m *proto3Message) GetOneofValue() proto3Message_OneofValue { - if m != nil { - return m.OneofValue - } - return nil -} - -func (m *proto3Message) GetOneofBoolValue() bool { - if x, ok := m.GetOneofValue().(*proto3Message_OneofBoolValue); ok { - return x.OneofBoolValue - } - return false -} - -func (m *proto3Message) GetOneofStringValue() string { - if x, ok := m.GetOneofValue().(*proto3Message_OneofStringValue); ok { - return x.OneofStringValue - } - return "" -} - -// XXX_OneofFuncs is for the internal use of the proto package. -func (*proto3Message) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _proto3Message_OneofMarshaler, _proto3Message_OneofUnmarshaler, _proto3Message_OneofSizer, []interface{}{ - (*proto3Message_OneofBoolValue)(nil), - (*proto3Message_OneofStringValue)(nil), - } -} - -func _proto3Message_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*proto3Message) - // oneof_value - switch x := m.OneofValue.(type) { - case *proto3Message_OneofBoolValue: - t := uint64(0) - if x.OneofBoolValue { - t = 1 - } - b.EncodeVarint(13<<3 | proto.WireVarint) - b.EncodeVarint(t) - case *proto3Message_OneofStringValue: - b.EncodeVarint(14<<3 | proto.WireBytes) - b.EncodeStringBytes(x.OneofStringValue) - case nil: - default: - return fmt.Errorf("proto3Message.OneofValue has unexpected type %T", x) - } - return nil -} - -func _proto3Message_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*proto3Message) - switch tag { - case 14: // oneof_value.oneof_bool_value - if wire != proto.WireVarint { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeVarint() - m.OneofValue = &proto3Message_OneofBoolValue{x != 0} - return true, err - case 15: // oneof_value.oneof_string_value - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - x, err := b.DecodeStringBytes() - m.OneofValue = &proto3Message_OneofStringValue{x} - return true, err - default: - return false, nil - } -} - -func _proto3Message_OneofSizer(msg proto.Message) (n int) { - m := msg.(*proto3Message) - // oneof_value - switch x := m.OneofValue.(type) { - case *proto3Message_OneofBoolValue: - n += proto.SizeVarint(14<<3 | proto.WireVarint) - n += 1 - case *proto3Message_OneofStringValue: - n += proto.SizeVarint(15<<3 | proto.WireBytes) - n += proto.SizeVarint(uint64(len(x.OneofStringValue))) - n += len(x.OneofStringValue) - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - type nativeProto3Message struct { NativeTimeValue *time.Time `protobuf:"bytes,1,opt,name=native_timestamp_value,json=nativeTimestampValue" json:"native_timestamp_value,omitempty"` NativeDurationValue *time.Duration `protobuf:"bytes,2,opt,name=native_duration_value,json=nativeDurationValue" json:"native_duration_value,omitempty"` @@ -816,116 +651,3 @@ type nativeProto3Message struct { func (m *nativeProto3Message) Reset() { *m = nativeProto3Message{} } func (m *nativeProto3Message) String() string { return proto.CompactTextString(m) } func (*nativeProto3Message) ProtoMessage() {} - -type proto2Message struct { - Nested *proto3Message `protobuf:"bytes,1,opt,name=nested,json=nested" json:"nested,omitempty"` - FloatValue *float32 `protobuf:"fixed32,2,opt,name=float_value,json=floatValue" json:"float_value,omitempty"` - DoubleValue *float64 `protobuf:"fixed64,3,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - Int64Value *int64 `protobuf:"varint,4,opt,name=int64_value,json=int64Value" json:"int64_value,omitempty"` - Int32Value *int32 `protobuf:"varint,5,opt,name=int32_value,json=int32Value" json:"int32_value,omitempty"` - Uint64Value *uint64 `protobuf:"varint,6,opt,name=uint64_value,json=uint64Value" json:"uint64_value,omitempty"` - Uint32Value *uint32 `protobuf:"varint,7,opt,name=uint32_value,json=uint32Value" json:"uint32_value,omitempty"` - BoolValue *bool `protobuf:"varint,8,opt,name=bool_value,json=boolValue" json:"bool_value,omitempty"` - StringValue *string `protobuf:"bytes,9,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"` - EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,enum=runtime_test_api.EnumValue" json:"enum_value,omitempty"` - RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,enum=runtime_test_api.EnumValue" json:"repeated_enum,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *proto2Message) Reset() { *m = proto2Message{} } -func (m *proto2Message) String() string { return proto.CompactTextString(m) } -func (*proto2Message) ProtoMessage() {} - -func (m *proto2Message) GetNested() *proto3Message { - if m != nil { - return m.Nested - } - return nil -} - -func (m *proto2Message) GetFloatValue() float32 { - if m != nil && m.FloatValue != nil { - return *m.FloatValue - } - return 0 -} - -func (m *proto2Message) GetDoubleValue() float64 { - if m != nil && m.DoubleValue != nil { - return *m.DoubleValue - } - return 0 -} - -func (m *proto2Message) GetInt64Value() int64 { - if m != nil && m.Int64Value != nil { - return *m.Int64Value - } - return 0 -} - -func (m *proto2Message) GetInt32Value() int32 { - if m != nil && m.Int32Value != nil { - return *m.Int32Value - } - return 0 -} - -func (m *proto2Message) GetUint64Value() uint64 { - if m != nil && m.Uint64Value != nil { - return *m.Uint64Value - } - return 0 -} - -func (m *proto2Message) GetUint32Value() uint32 { - if m != nil && m.Uint32Value != nil { - return *m.Uint32Value - } - return 0 -} - -func (m *proto2Message) GetBoolValue() bool { - if m != nil && m.BoolValue != nil { - return *m.BoolValue - } - return false -} - -func (m *proto2Message) GetStringValue() string { - if m != nil && m.StringValue != nil { - return *m.StringValue - } - return "" -} - -func (m *proto2Message) GetRepeatedValue() []string { - if m != nil { - return m.RepeatedValue - } - return nil -} - -type EnumValue int32 - -const ( - EnumValue_X EnumValue = 0 - EnumValue_Y EnumValue = 1 - EnumValue_Z EnumValue = 2 -) - -var EnumValue_name = map[int32]string{ - 0: "EnumValue_X", - 1: "EnumValue_Y", - 2: "EnumValue_Z", -} -var EnumValue_value = map[string]int32{ - "EnumValue_X": 0, - "EnumValue_Y": 1, - "EnumValue_Z": 2, -} - -func init() { - proto.RegisterEnum("runtime_test_api.EnumValue", EnumValue_name, EnumValue_value) -} From ccace35df80008d52e29268a4697b2450d646313 Mon Sep 17 00:00:00 2001 From: Matthew Morrissette Date: Wed, 22 Apr 2020 11:44:02 -0700 Subject: [PATCH 0319/1518] Remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/generator (#1237) --- protoc-gen-swagger/genswagger/BUILD.bazel | 1 - protoc-gen-swagger/genswagger/template.go | 67 ++++++++++++++++++++++- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index b82f653ed61..534cc688a30 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -22,7 +22,6 @@ go_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 7fe533fdcdf..e67ab923bed 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -18,7 +18,6 @@ import ( "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - gogen "github.com/golang/protobuf/protoc-gen-go/generator" structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" @@ -1654,7 +1653,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type // For example, if we are trying to locate comments related to a field named // `Address` in a message named `Person`, the path will be: // -// [4, a, 2, b] +// [4, a, 2, b] // // While `a` gets determined by the order in which the messages appear in // the proto file, and `b` is the field index specified in the proto @@ -1969,7 +1968,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri } func doCamelCase(input string) string { - parameterString := gogen.CamelCase(input) + parameterString := camelCase(input) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) @@ -1988,3 +1987,65 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } + +// CamelCase returns the CamelCased name. +// +// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +// There is a remote possibility of this rewrite causing a name collision, +// but it's so remote we're prepared to pretend it's nonexistent - since the +// C++ generator lowercases names, it's extremely unlikely to have two fields +// with different capitalizations. +// In short, _my_field_name_2 becomes XMyFieldName_2. +func camelCase(s string) string { + if s == "" { + return "" + } + t := make([]byte, 0, 32) + i := 0 + if s[0] == '_' { + // Need a capital letter; drop the '_'. + t = append(t, 'X') + i++ + } + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + for ; i < len(s); i++ { + c := s[i] + if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { + continue // Skip the underscore in s. + } + if isASCIIDigit(c) { + t = append(t, c) + continue + } + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c ^= ' ' // Make it a capital letter. + } + t = append(t, c) // Guaranteed not lower case. + // Accept lower case sequence that follows. + for i+1 < len(s) && isASCIILower(s[i+1]) { + i++ + t = append(t, s[i]) + } + } + return string(t) +} + +// And now lots of helper functions. + +// Is c an ASCII lower-case letter? +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} + +// Is c an ASCII digit? +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} From f40fb88d3634a7f6cdeaa795f9a9043d8fa7b476 Mon Sep 17 00:00:00 2001 From: Ayush Gupta Date: Thu, 23 Apr 2020 14:07:19 +0530 Subject: [PATCH 0320/1518] Add RPCMethod to runtime (#1234) * set rpcMethodName in request.Context * add test to check for rpcName pattern * change text in test * move rpcMethodName to annotateContext * remove rpcMethod from mux_test * remove rpcMethodName from handler * move rpcMethodKey to context --- .../internal/helloworld/helloworld.pb.gw.go | 40 +++---- .../examplepb/a_bit_of_everything.pb.gw.go | 92 ++++++++-------- .../proto/examplepb/echo_service.pb.gw.go | 28 ++--- .../proto/examplepb/flow_combination.pb.gw.go | 76 ++++++------- .../examplepb/non_standard_names.pb.gw.go | 8 +- .../examplepb/response_body_service.pb.gw.go | 14 +-- .../internal/proto/examplepb/stream.pb.gw.go | 6 +- .../unannotated_echo_service.pb.gw.go | 16 +-- .../proto/examplepb/use_go_template.pb.gw.go | 8 +- .../proto/examplepb/wrappers.pb.gw.go | 44 ++++---- .../internal/gengateway/template.go | 4 +- .../internal/gengateway/template_test.go | 3 + runtime/context.go | 31 +++++- runtime/context_test.go | 102 ++++++++++++++---- runtime/mux.go | 2 +- 15 files changed, 281 insertions(+), 193 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index e191ddd7fd6..95610308f77 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -760,7 +760,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -780,7 +780,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -800,7 +800,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -820,7 +820,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -840,7 +840,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -860,7 +860,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -880,7 +880,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -900,7 +900,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -920,7 +920,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -940,7 +940,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1001,7 +1001,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1021,7 +1021,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1041,7 +1041,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1061,7 +1061,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1081,7 +1081,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1101,7 +1101,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1121,7 +1121,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1141,7 +1141,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1161,7 +1161,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1181,7 +1181,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index fe750204c13..1411db2c963 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2122,7 +2122,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2142,7 +2142,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2162,7 +2162,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2182,7 +2182,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2202,7 +2202,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2222,7 +2222,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2242,7 +2242,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2262,7 +2262,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2282,7 +2282,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2302,7 +2302,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2322,7 +2322,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2342,7 +2342,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2362,7 +2362,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2382,7 +2382,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2402,7 +2402,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2422,7 +2422,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2442,7 +2442,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2462,7 +2462,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2482,7 +2482,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2502,7 +2502,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2522,7 +2522,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2542,7 +2542,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2570,7 +2570,7 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.CamelCaseServiceName/Empty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2631,7 +2631,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2651,7 +2651,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2671,7 +2671,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2691,7 +2691,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2711,7 +2711,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2731,7 +2731,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2751,7 +2751,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2771,7 +2771,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2791,7 +2791,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2811,7 +2811,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2831,7 +2831,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2851,7 +2851,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2871,7 +2871,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2891,7 +2891,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2911,7 +2911,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2931,7 +2931,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2951,7 +2951,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2971,7 +2971,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2991,7 +2991,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3011,7 +3011,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3031,7 +3031,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3051,7 +3051,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3204,7 +3204,7 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.CamelCaseServiceName/Empty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 6c1e47e3976..d467c0d4986 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -600,7 +600,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -620,7 +620,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -640,7 +640,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -660,7 +660,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -680,7 +680,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -700,7 +700,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -720,7 +720,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -781,7 +781,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -801,7 +801,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -821,7 +821,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -841,7 +841,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -861,7 +861,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -881,7 +881,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -901,7 +901,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index d6a2846671a..c876352a770 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1496,7 +1496,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1537,7 +1537,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1557,7 +1557,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1577,7 +1577,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1597,7 +1597,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1617,7 +1617,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1637,7 +1637,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1657,7 +1657,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1677,7 +1677,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1697,7 +1697,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1717,7 +1717,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1737,7 +1737,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1875,7 +1875,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1895,7 +1895,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1915,7 +1915,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1935,7 +1935,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1955,7 +1955,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1975,7 +1975,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1995,7 +1995,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2015,7 +2015,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2035,7 +2035,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2055,7 +2055,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2075,7 +2075,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2095,7 +2095,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2115,7 +2115,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2135,7 +2135,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2155,7 +2155,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2175,7 +2175,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2195,7 +2195,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2215,7 +2215,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2235,7 +2235,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2255,7 +2255,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2275,7 +2275,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2295,7 +2295,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2315,7 +2315,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2335,7 +2335,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2355,7 +2355,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2375,7 +2375,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index c053dfb0a71..8db9cd2524f 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -176,7 +176,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -196,7 +196,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -257,7 +257,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -277,7 +277,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 5b86722a8ab..6da76968937 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -237,7 +237,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -257,7 +257,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -277,7 +277,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -345,7 +345,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -365,7 +365,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -385,7 +385,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -405,7 +405,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index eda39606672..26b49643961 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -217,7 +217,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/BulkCreate") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -237,7 +237,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/List") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -257,7 +257,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/BulkEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index fc0df4b2235..929fa6a3199 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -276,7 +276,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -296,7 +296,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -316,7 +316,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -336,7 +336,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -397,7 +397,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -417,7 +417,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -437,7 +437,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -457,7 +457,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 14914bc3fb5..dc561fb2d27 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -108,7 +108,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Login") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -128,7 +128,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -189,7 +189,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Login") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -209,7 +209,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 9907976e4ab..7aa1045b625 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -416,7 +416,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -436,7 +436,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -456,7 +456,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -476,7 +476,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -496,7 +496,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -516,7 +516,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -536,7 +536,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -556,7 +556,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -576,7 +576,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -596,7 +596,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -616,7 +616,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -677,7 +677,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -697,7 +697,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -717,7 +717,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -737,7 +737,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -757,7 +757,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -777,7 +777,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -797,7 +797,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -817,7 +817,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -837,7 +837,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -857,7 +857,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -877,7 +877,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 1ac8df8b9df..32f7b878073 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -583,7 +583,7 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, {{- end }} defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -658,7 +658,7 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, {{- end }} defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/{{$svc.File.GetPackage}}.{{$svc.GetName}}/{{$m.GetName}}") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 637d30097d9..8c07e83b4a4 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -245,6 +245,9 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), "", runtime.AssumeColonVerbOpt(true)))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } + if want := `rctx, err := runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo")`; !strings.Contains(got, want) { + t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) + } } } diff --git a/runtime/context.go b/runtime/context.go index f8083821f3d..04da99af218 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -41,6 +41,8 @@ var ( DefaultContextTimeout = 0 * time.Second ) +type rpcMethodKey struct{} + func decodeBinHeader(v string) ([]byte, error) { if len(v)%4 == 0 { // Input was padded, or padding was not necessary. @@ -56,8 +58,8 @@ At a minimum, the RemoteAddr is included in the fashion of "X-Forwarded-For", except that the forwarded destination is not another HTTP service but rather a gRPC service. */ -func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error) { - ctx, md, err := annotateContext(ctx, mux, req) +func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName) if err != nil { return nil, err } @@ -70,8 +72,8 @@ func AnnotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (con // AnnotateIncomingContext adds context information such as metadata from the request. // Attach metadata as incoming context. -func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, error) { - ctx, md, err := annotateContext(ctx, mux, req) +func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, error) { + ctx, md, err := annotateContext(ctx, mux, req, rpcMethodName) if err != nil { return nil, err } @@ -82,7 +84,8 @@ func AnnotateIncomingContext(ctx context.Context, mux *ServeMux, req *http.Reque return metadata.NewIncomingContext(ctx, md), nil } -func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request) (context.Context, metadata.MD, error) { +func annotateContext(ctx context.Context, mux *ServeMux, req *http.Request, rpcMethodName string) (context.Context, metadata.MD, error) { + ctx = withRPCMethod(ctx, rpcMethodName) var pairs []string timeout := DefaultContextTimeout if tm := req.Header.Get(metadataGrpcTimeout); tm != "" { @@ -234,3 +237,21 @@ func isPermanentHTTPHeader(hdr string) bool { } return false } + +// RPCMethod returns the method string for the server context. The returned +// string is in the format of "/package.service/method". +func RPCMethod(ctx context.Context) (string, bool) { + m := ctx.Value(rpcMethodKey{}) + if m == nil { + return "", false + } + ms, ok := m.(string) + if !ok { + return "", false + } + return ms, true +} + +func withRPCMethod(ctx context.Context, rpcMethodName string) context.Context { + return context.WithValue(ctx, rpcMethodKey{}, rpcMethodName) +} diff --git a/runtime/context_test.go b/runtime/context_test.go index 0d358016a46..268159d3d8c 100644 --- a/runtime/context_test.go +++ b/runtime/context_test.go @@ -18,13 +18,13 @@ const ( func TestAnnotateContext_WorksWithEmpty(t *testing.T) { ctx := context.Background() - + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } request.Header.Add("Some-Irrelevant-Header", "some value") - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -37,6 +37,7 @@ func TestAnnotateContext_WorksWithEmpty(t *testing.T) { func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) @@ -46,7 +47,7 @@ func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { request.Header.Add("Grpc-Metadata-Foo-BAZ", "Value2") request.Header.Add("Grpc-Metadata-foo-bAz", "Value3") request.Header.Add("Authorization", "Token 1234567890") - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -67,10 +68,16 @@ func TestAnnotateContext_ForwardsGrpcMetadata(t *testing.T) { if got, want := md["authorization"], []string{"Token 1234567890"}; !reflect.DeepEqual(got, want) { t.Errorf(`md["authorization"] = %q want %q`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) @@ -79,7 +86,7 @@ func TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) { binData := []byte("\x00test-binary-data") request.Header.Add("Grpc-Metadata-Test-Bin", base64.StdEncoding.EncodeToString(binData)) - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -91,10 +98,16 @@ func TestAnnotateContext_ForwardGrpcBinaryMetadata(t *testing.T) { if got, want := md["test-bin"], []string{string(binData)}; !reflect.DeepEqual(got, want) { t.Errorf(`md["test-bin"] = %q want %q`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateContext_XForwardedFor(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://bar.foo.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://bar.foo.example.com", err) @@ -102,7 +115,7 @@ func TestAnnotateContext_XForwardedFor(t *testing.T) { request.Header.Add("X-Forwarded-For", "192.0.2.100") // client request.RemoteAddr = "192.0.2.200:12345" // proxy - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -118,15 +131,21 @@ func TestAnnotateContext_XForwardedFor(t *testing.T) { if got, want := md["x-forwarded-for"], []string{"192.0.2.100, 192.0.2.200"}; !reflect.DeepEqual(got, want) { t.Errorf(`md["x-forwarded-for"] = %v want %v`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateContext_SupportsTimeouts(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) } - annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -138,7 +157,7 @@ func TestAnnotateContext_SupportsTimeouts(t *testing.T) { const acceptableError = 50 * time.Millisecond runtime.DefaultContextTimeout = 10 * time.Second - annotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -181,7 +200,7 @@ func TestAnnotateContext_SupportsTimeouts(t *testing.T) { }, } { request.Header.Set("Grpc-Timeout", spec.timeout) - annotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request) + annotated, err = runtime.AnnotateContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -193,17 +212,23 @@ func TestAnnotateContext_SupportsTimeouts(t *testing.T) { if got, want := deadline.Sub(time.Now()), spec.want; got-want > acceptableError || got-want < -acceptableError { t.Errorf("deadline.Sub(time.Now()) = %v; want %v; with error %v; timeout= %q", got, want, acceptableError, spec.timeout) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } } func TestAnnotateContext_SupportsCustomAnnotators(t *testing.T) { md1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"foo": "bar"}) } md2 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"baz": "qux"}) } expected := metadata.New(map[string]string{"foo": "bar", "baz": "qux"}) + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) } - annotated, err := runtime.AnnotateContext(context.Background(), runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request) + annotated, err := runtime.AnnotateContext(context.Background(), runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateContext(ctx, %#v) failed with %v; want success", request, err) return @@ -214,17 +239,22 @@ func TestAnnotateContext_SupportsCustomAnnotators(t *testing.T) { t.Errorf("metadata.MD[%s] = %v; want %v", key, a, e) } } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) { ctx := context.Background() - + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) } request.Header.Add("Some-Irrelevant-Header", "some value") - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -233,10 +263,16 @@ func TestAnnotateIncomingContext_WorksWithEmpty(t *testing.T) { if !ok || len(md) != emptyForwardMetaCount { t.Errorf("Expected %d metadata items in context; got %v", emptyForwardMetaCount, md) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) @@ -246,7 +282,7 @@ func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { request.Header.Add("Grpc-Metadata-Foo-BAZ", "Value2") request.Header.Add("Grpc-Metadata-foo-bAz", "Value3") request.Header.Add("Authorization", "Token 1234567890") - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -267,10 +303,16 @@ func TestAnnotateIncomingContext_ForwardsGrpcMetadata(t *testing.T) { if got, want := md["authorization"], []string{"Token 1234567890"}; !reflect.DeepEqual(got, want) { t.Errorf(`md["authorization"] = %q want %q`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://www.example.com", err) @@ -279,7 +321,7 @@ func TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) { binData := []byte("\x00test-binary-data") request.Header.Add("Grpc-Metadata-Test-Bin", base64.StdEncoding.EncodeToString(binData)) - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -291,10 +333,16 @@ func TestAnnotateIncomingContext_ForwardGrpcBinaryMetadata(t *testing.T) { if got, want := md["test-bin"], []string{string(binData)}; !reflect.DeepEqual(got, want) { t.Errorf(`md["test-bin"] = %q want %q`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateIncomingContext_XForwardedFor(t *testing.T) { ctx := context.Background() + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://bar.foo.example.com", nil) if err != nil { t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", "GET", "http://bar.foo.example.com", err) @@ -302,7 +350,7 @@ func TestAnnotateIncomingContext_XForwardedFor(t *testing.T) { request.Header.Add("X-Forwarded-For", "192.0.2.100") // client request.RemoteAddr = "192.0.2.200:12345" // proxy - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -318,18 +366,23 @@ func TestAnnotateIncomingContext_XForwardedFor(t *testing.T) { if got, want := md["x-forwarded-for"], []string{"192.0.2.100, 192.0.2.200"}; !reflect.DeepEqual(got, want) { t.Errorf(`md["x-forwarded-for"] = %v want %v`, got, want) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } func TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) { // While run all test, TestAnnotateContext_SupportsTimeouts() will change the DefaultContextTimeout, so reset it to zero. runtime.DefaultContextTimeout = 0 * time.Second - + expectedRPCName := "/example.Example/Example" ctx := context.Background() request, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) } - annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err := runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -341,7 +394,7 @@ func TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) { const acceptableError = 50 * time.Millisecond runtime.DefaultContextTimeout = 10 * time.Second - annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -384,7 +437,7 @@ func TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) { }, } { request.Header.Set("Grpc-Timeout", spec.timeout) - annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request) + annotated, err = runtime.AnnotateIncomingContext(ctx, runtime.NewServeMux(), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -396,17 +449,23 @@ func TestAnnotateIncomingContext_SupportsTimeouts(t *testing.T) { if got, want := deadline.Sub(time.Now()), spec.want; got-want > acceptableError || got-want < -acceptableError { t.Errorf("deadline.Sub(time.Now()) = %v; want %v; with error %v; timeout= %q", got, want, acceptableError, spec.timeout) } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } } func TestAnnotateIncomingContext_SupportsCustomAnnotators(t *testing.T) { md1 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"foo": "bar"}) } md2 := func(context.Context, *http.Request) metadata.MD { return metadata.New(map[string]string{"baz": "qux"}) } expected := metadata.New(map[string]string{"foo": "bar", "baz": "qux"}) + expectedRPCName := "/example.Example/Example" request, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { t.Fatalf(`http.NewRequest("GET", "http://example.com", nil failed with %v; want success`, err) } - annotated, err := runtime.AnnotateIncomingContext(context.Background(), runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request) + annotated, err := runtime.AnnotateIncomingContext(context.Background(), runtime.NewServeMux(runtime.WithMetadata(md1), runtime.WithMetadata(md2)), request, expectedRPCName) if err != nil { t.Errorf("runtime.AnnotateIncomingContext(ctx, %#v) failed with %v; want success", request, err) return @@ -417,4 +476,9 @@ func TestAnnotateIncomingContext_SupportsCustomAnnotators(t *testing.T) { t.Errorf("metadata.MD[%s] = %v; want %v", key, a, e) } } + if m, ok := runtime.RPCMethod(annotated); !ok { + t.Errorf("runtime.RPCMethod(annotated) failed with no value; want %s", expectedRPCName) + } else if m != expectedRPCName { + t.Errorf("runtime.RPCMethod(annotated) failed with %s; want %s", m, expectedRPCName) + } } diff --git a/runtime/mux.go b/runtime/mux.go index 523a9cb43c9..b35708616db 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -181,7 +181,7 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { // Handle associates "h" to the pair of HTTP method and path pattern. func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { if s.lastMatchWins { - s.handlers[meth] = append([]handler{handler{pat: pat, h: h}}, s.handlers[meth]...) + s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...) } else { s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h}) } From f60488d452ff1c156cfa472eb4a870a72e922954 Mon Sep 17 00:00:00 2001 From: Matthew Morrissette Date: Thu, 23 Apr 2020 01:38:12 -0700 Subject: [PATCH 0321/1518] Remove usage of github.com/golang/protobuf/protoc-gen-go/generator (#1238) From e6d05361fee32e0f75b57de7b98b9455742384a3 Mon Sep 17 00:00:00 2001 From: Setin Sergei Date: Sat, 25 Apr 2020 15:19:01 +0300 Subject: [PATCH 0322/1518] Support generating a standalone gateway package (#1239) * standalone feature * replace trick * change default to false * go.mod newline at end of file * * generate examples * refactoring * add notes to readme.md * added BUILD.bazel * rebase to v2 * Update README.md Co-Authored-By: Johan Brandhorst * cut number of generated examples * tests for standalone echo * add missed file * magic * added tests: GoType, LoadWithStandalone, moved setting package alias from generator to registry Co-authored-by: Johan Brandhorst --- Makefile | 8 +- README.md | 16 + .../clients/unannotatedecho/BUILD.bazel | 1 + .../clients/unannotatedecho/api/swagger.yaml | 125 +++ .../api_unannotated_echo_service.go | 70 ++ .../model_examplepb_unannotated_embedded.go | 16 + ...el_examplepb_unannotated_simple_message.go | 5 + examples/internal/gateway/BUILD.bazel | 1 + examples/internal/gateway/gateway.go | 2 + .../internal/integration/integration_test.go | 174 ++-- .../internal/integration/proto_error_test.go | 4 +- .../examplepb/standalone_echo_service.yaml | 17 + .../examplepb/unannotated_echo_service.pb.go | 282 +++++- .../examplepb/unannotated_echo_service.proto | 19 +- .../unannotated_echo_service.swagger.json | 122 +++ .../internal/proto/standalone/BUILD.bazel | 19 + .../unannotated_echo_service.pb.gw.go | 954 ++++++++++++++++++ examples/internal/server/BUILD.bazel | 1 + examples/internal/server/main.go | 3 + .../descriptor/registry.go | 22 +- .../descriptor/registry_test.go | 19 + .../descriptor/services.go | 1 + .../descriptor/services_test.go | 3 + protoc-gen-grpc-gateway/descriptor/types.go | 54 +- .../descriptor/types_test.go | 63 ++ .../internal/gengateway/generator.go | 10 +- .../internal/gengateway/template.go | 20 +- protoc-gen-grpc-gateway/main.go | 5 +- 28 files changed, 1890 insertions(+), 146 deletions(-) create mode 100644 examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go create mode 100644 examples/internal/proto/examplepb/standalone_echo_service.yaml create mode 100644 examples/internal/proto/standalone/BUILD.bazel create mode 100644 examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go diff --git a/Makefile b/Makefile index d0a65f91c0e..8bfb0e46148 100644 --- a/Makefile +++ b/Makefile @@ -77,6 +77,8 @@ EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ examples/internal/proto/examplepb/use_go_template.proto \ examples/internal/proto/examplepb/response_body_service.proto +STANDALONE_EXAMPLES=examples/internal/proto/examplepb/unannotated_echo_service.proto + HELLOWORLD=examples/internal/helloworld/helloworld.proto EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) @@ -171,8 +173,12 @@ $(RUNTIME_TEST_SRCS): $(GO_PLUGIN) $(RUNTIME_TEST_PROTO) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(RUNTIME_TEST_PROTO) $(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml +$(EXAMPLE_GWSRCS): ADDITIONAL_SA_FLAGS:=,standalone=true,grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_SA_FLAGS):. $(STANDALONE_EXAMPLES) + mv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/ + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) + $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) diff --git a/README.md b/README.md index 9f51abeea38..c5a1496533c 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,22 @@ annotation to your .proto file ``` It will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go`. + + OR generate a standalone reverse-proxy if needed. + + Suppose you have a generated gRPC stub package, and you want to deploy several + API gateways using client-specific + [YAML annotations](https://grpc-ecosystem.github.io/grpc-gateway/docs/grpcapiconfiguration.html). + You can generate a grpc-gateway which imports the stub as an external + package, so you don't have to regenerate it several times. + To set the import path of the stub package, set its full path in the `go_package`. + + ```sh + protoc -I. --grpc-gateway_out=logtostderr=true,grpc_api_configuration=apiOne.yaml,paths=source_relative,standalone=true:./gen/go/client_one \ + your/service/v1/your_service.proto + + protoc -I. --grpc-gateway_out=logtostderr=true,grpc_api_configuration=apiTwo.yaml,paths=source_relative,standalone=true:./gen/go/client_two \ + your/service/v1/your_service.proto 6. Write an entrypoint for the HTTP reverse-proxy server diff --git a/examples/internal/clients/unannotatedecho/BUILD.bazel b/examples/internal/clients/unannotatedecho/BUILD.bazel index f53c37cc1a8..467850b4f91 100644 --- a/examples/internal/clients/unannotatedecho/BUILD.bazel +++ b/examples/internal/clients/unannotatedecho/BUILD.bazel @@ -8,6 +8,7 @@ go_library( "api_unannotated_echo_service.go", "client.go", "configuration.go", + "model_examplepb_unannotated_embedded.go", "model_examplepb_unannotated_simple_message.go", "model_protobuf_any.go", "model_runtime_error.go", diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index ab5450bab15..c821b3b1023 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -61,6 +61,52 @@ paths: type: "string" x-exportParamName: "Duration" x-optionalDataType: "String" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -119,6 +165,52 @@ paths: type: "string" x-exportParamName: "Duration" x-optionalDataType: "String" + - name: "line_num" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "LineNum" + x-optionalDataType: "String" + - name: "lang" + in: "query" + required: false + type: "string" + x-exportParamName: "Lang" + x-optionalDataType: "String" + - name: "status.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "StatusProgress" + x-optionalDataType: "String" + - name: "status.note" + in: "query" + required: false + type: "string" + x-exportParamName: "StatusNote" + x-optionalDataType: "String" + - name: "en" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "En" + x-optionalDataType: "String" + - name: "no.progress" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "NoProgress" + x-optionalDataType: "String" + - name: "no.note" + in: "query" + required: false + type: "string" + x-exportParamName: "NoNote" + x-optionalDataType: "String" responses: 200: description: "A successful response." @@ -129,6 +221,18 @@ paths: schema: $ref: "#/definitions/runtimeError" definitions: + examplepbUnannotatedEmbedded: + type: "object" + properties: + progress: + type: "string" + format: "int64" + note: + type: "string" + description: "Embedded represents a message embedded in SimpleMessage." + example: + note: "note" + progress: "progress" examplepbUnannotatedSimpleMessage: type: "object" properties: @@ -140,12 +244,33 @@ definitions: format: "int64" duration: type: "string" + line_num: + type: "string" + format: "int64" + lang: + type: "string" + status: + $ref: "#/definitions/examplepbUnannotatedEmbedded" + en: + type: "string" + format: "int64" + "no": + $ref: "#/definitions/examplepbUnannotatedEmbedded" description: "UnannotatedSimpleMessage represents a simple message sent to the\ \ unannotated Echo service." example: duration: "duration" + "no": + note: "note" + progress: "progress" + line_num: "line_num" num: "num" + en: "en" id: "id" + lang: "lang" + status: + note: "note" + progress: "progress" protobufAny: type: "object" properties: diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index 7f33b29bef0..99520f0ca51 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -134,12 +134,26 @@ The message posted as the id parameter will also be returned. * @param num * @param optional nil or *UnannotatedEchoServiceEcho2Opts - Optional Parameters: * @param "Duration" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - @return ExamplepbUnannotatedSimpleMessage */ type UnannotatedEchoServiceEcho2Opts struct { Duration optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String } func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx context.Context, id string, num string, localVarOptionals *UnannotatedEchoServiceEcho2Opts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { @@ -163,6 +177,27 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx conte if localVarOptionals != nil && localVarOptionals.Duration.IsSet() { localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} @@ -345,6 +380,13 @@ UnannotatedEchoServiceApiService EchoDelete method receives a simple message and * @param "Id" (optional.String) - Id represents the message identifier. * @param "Num" (optional.String) - * @param "Duration" (optional.String) - + * @param "LineNum" (optional.String) - + * @param "Lang" (optional.String) - + * @param "StatusProgress" (optional.String) - + * @param "StatusNote" (optional.String) - + * @param "En" (optional.String) - + * @param "NoProgress" (optional.String) - + * @param "NoNote" (optional.String) - @return ExamplepbUnannotatedSimpleMessage */ @@ -353,6 +395,13 @@ type UnannotatedEchoServiceEchoDeleteOpts struct { Id optional.String Num optional.String Duration optional.String + LineNum optional.String + Lang optional.String + StatusProgress optional.String + StatusNote optional.String + En optional.String + NoProgress optional.String + NoNote optional.String } func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx context.Context, localVarOptionals *UnannotatedEchoServiceEchoDeleteOpts) (ExamplepbUnannotatedSimpleMessage, *http.Response, error) { @@ -380,6 +429,27 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx if localVarOptionals != nil && localVarOptionals.Duration.IsSet() { localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) } + if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { + localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { + localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { + localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.StatusNote.IsSet() { + localVarQueryParams.Add("status.note", parameterToString(localVarOptionals.StatusNote.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.En.IsSet() { + localVarQueryParams.Add("en", parameterToString(localVarOptionals.En.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoProgress.IsSet() { + localVarQueryParams.Add("no.progress", parameterToString(localVarOptionals.NoProgress.Value(), "")) + } + if localVarOptionals != nil && localVarOptionals.NoNote.IsSet() { + localVarQueryParams.Add("no.note", parameterToString(localVarOptionals.NoNote.Value(), "")) + } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json"} diff --git a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go new file mode 100644 index 00000000000..0372fc9b738 --- /dev/null +++ b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_embedded.go @@ -0,0 +1,16 @@ +/* + * examples/internal/proto/examplepb/unannotated_echo_service.proto + * + * Unannotated Echo Service Similar to echo_service.proto but without annotations. See unannotated_echo_service.yaml for the equivalent of the annotations in gRPC API configuration format. Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package unannotatedecho + +// Embedded represents a message embedded in SimpleMessage. +type ExamplepbUnannotatedEmbedded struct { + Progress string `json:"progress,omitempty"` + Note string `json:"note,omitempty"` +} diff --git a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go index 689ee5b1981..3798e0da89b 100644 --- a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go +++ b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go @@ -15,4 +15,9 @@ type ExamplepbUnannotatedSimpleMessage struct { Id string `json:"id,omitempty"` Num string `json:"num,omitempty"` Duration string `json:"duration,omitempty"` + LineNum string `json:"line_num,omitempty"` + Lang string `json:"lang,omitempty"` + Status *ExamplepbUnannotatedEmbedded `json:"status,omitempty"` + En string `json:"en,omitempty"` + No *ExamplepbUnannotatedEmbedded `json:"no,omitempty"` } diff --git a/examples/internal/gateway/BUILD.bazel b/examples/internal/gateway/BUILD.bazel index edfa9a69cbe..2c239f0a24c 100644 --- a/examples/internal/gateway/BUILD.bazel +++ b/examples/internal/gateway/BUILD.bazel @@ -12,6 +12,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//examples/internal/proto/examplepb:go_default_library", + "//examples/internal/proto/standalone:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@org_golang_google_grpc//:go_default_library", diff --git a/examples/internal/gateway/gateway.go b/examples/internal/gateway/gateway.go index e42b07d5170..2d92712fe2a 100644 --- a/examples/internal/gateway/gateway.go +++ b/examples/internal/gateway/gateway.go @@ -8,6 +8,7 @@ import ( "time" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + standalone "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone" gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" ) @@ -19,6 +20,7 @@ func newGateway(ctx context.Context, conn *grpc.ClientConn, opts []gwruntime.Ser for _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{ examplepb.RegisterEchoServiceHandler, + standalone.RegisterUnannotatedEchoServiceHandler, examplepb.RegisterStreamServiceHandler, examplepb.RegisterABitOfEverythingServiceHandler, examplepb.RegisterFlowCombinationHandler, diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 9a326f3ed53..e37cd04cac9 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -22,7 +22,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/google/go-cmp/cmp" - gw "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -43,11 +43,15 @@ func TestEcho(t *testing.T) { return } - testEcho(t, 8088, "application/json") - testEchoOneof(t, 8088, "application/json") - testEchoOneof1(t, 8088, "application/json") - testEchoOneof2(t, 8088, "application/json") - testEchoBody(t, 8088) + for _, apiPrefix := range []string{"v1", "v2"} { + t.Run(apiPrefix, func(t *testing.T) { + testEcho(t, 8088, apiPrefix, "application/json") + testEchoOneof(t, 8088, apiPrefix, "application/json") + testEchoOneof1(t, 8088, apiPrefix, "application/json") + testEchoOneof2(t, 8088, apiPrefix, "application/json") + testEchoBody(t, 8088, apiPrefix) + }) + } } func TestForwardResponseOption(t *testing.T) { @@ -78,11 +82,11 @@ func TestForwardResponseOption(t *testing.T) { if err := waitForGateway(ctx, 8081); err != nil { t.Errorf("waitForGateway(ctx, 8081) failed with %v; want success", err) } - testEcho(t, 8081, "application/vnd.docker.plugins.v1.1+json") + testEcho(t, 8081, "v1", "application/vnd.docker.plugins.v1.1+json") } -func testEcho(t *testing.T, port int, contentType string) { - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid", port) +func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { + apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo/myid", port, apiPrefix) resp, err := http.Post(apiURL, "application/json", strings.NewReader("{}")) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) @@ -100,7 +104,7 @@ func testEcho(t *testing.T, port int, contentType string) { t.Logf("%s", buf) } - var msg gw.SimpleMessage + var msg examplepb.SimpleMessage if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -114,8 +118,8 @@ func testEcho(t *testing.T, port int, contentType string) { } } -func testEchoOneof(t *testing.T, port int, contentType string) { - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid/10/golang", port) +func testEchoOneof(t *testing.T, port int, apiPrefix string, contentType string) { + apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo/myid/10/golang", port, apiPrefix) resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) @@ -133,7 +137,7 @@ func testEchoOneof(t *testing.T, port int, contentType string) { t.Logf("%s", buf) } - var msg gw.SimpleMessage + var msg examplepb.SimpleMessage if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -147,8 +151,8 @@ func testEchoOneof(t *testing.T, port int, contentType string) { } } -func testEchoOneof1(t *testing.T, port int, contentType string) { - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo1/myid/10/golang", port) +func testEchoOneof1(t *testing.T, port int, apiPrefix string, contentType string) { + apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo1/myid/10/golang", port, apiPrefix) resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) @@ -166,7 +170,7 @@ func testEchoOneof1(t *testing.T, port int, contentType string) { t.Logf("%s", buf) } - var msg gw.SimpleMessage + var msg examplepb.SimpleMessage if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -180,8 +184,8 @@ func testEchoOneof1(t *testing.T, port int, contentType string) { } } -func testEchoOneof2(t *testing.T, port int, contentType string) { - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo2/golang", port) +func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string) { + apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo2/golang", port, apiPrefix) resp, err := http.Get(apiURL) if err != nil { t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) @@ -199,7 +203,7 @@ func testEchoOneof2(t *testing.T, port int, contentType string) { t.Logf("%s", buf) } - var msg gw.SimpleMessage + var msg examplepb.SimpleMessage if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -213,15 +217,15 @@ func testEchoOneof2(t *testing.T, port int, contentType string) { } } -func testEchoBody(t *testing.T, port int) { - sent := gw.SimpleMessage{Id: "example"} +func testEchoBody(t *testing.T, port int, apiPrefix string) { + sent := examplepb.SimpleMessage{Id: "example"} var m jsonpb.Marshaler payload, err := m.MarshalToString(&sent) if err != nil { t.Fatalf("m.MarshalToString(%#v) failed with %v; want success", payload, err) } - apiURL := fmt.Sprintf("http://localhost:%d/v1/example/echo_body", port) + apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo_body", port, apiPrefix) resp, err := http.Post(apiURL, "", strings.NewReader(payload)) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) @@ -239,7 +243,7 @@ func testEchoBody(t *testing.T, port int) { t.Logf("%s", buf) } - var received gw.SimpleMessage + var received examplepb.SimpleMessage if err := jsonpb.UnmarshalString(string(buf), &received); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -283,7 +287,7 @@ func TestABE(t *testing.T) { } func testABECreate(t *testing.T, port int) { - want := gw.ABitOfEverything{ + want := examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, Int64Value: 4294967296, @@ -299,10 +303,10 @@ func testABECreate(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", - EnumValue: gw.NumericEnum_ZERO, + EnumValue: examplepb.NumericEnum_ZERO, PathEnumValue: pathenum.PathEnum_DEF, NestedPathEnumValue: pathenum.MessagePathEnum_JKL, - EnumValueAnnotation: gw.NumericEnum_ONE, + EnumValueAnnotation: examplepb.NumericEnum_ONE, } apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s/%s/%s/%s/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue, want.EnumValue, want.PathEnumValue, want.NestedPathEnumValue, want.EnumValueAnnotation) @@ -323,7 +327,7 @@ func testABECreate(t *testing.T, port int) { t.Logf("%s", buf) } - var msg gw.ABitOfEverything + var msg examplepb.ABitOfEverything if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -338,7 +342,7 @@ func testABECreate(t *testing.T, port int) { } func testABECreateBody(t *testing.T, port int) { - want := gw.ABitOfEverything{ + want := examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, Int64Value: 4294967296, @@ -354,11 +358,11 @@ func testABECreateBody(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", - EnumValue: gw.NumericEnum_ONE, + EnumValue: examplepb.NumericEnum_ONE, PathEnumValue: pathenum.PathEnum_ABC, NestedPathEnumValue: pathenum.MessagePathEnum_GHI, - Nested: []*gw.ABitOfEverything_Nested{ + Nested: []*examplepb.ABitOfEverything_Nested{ { Name: "bar", Amount: 10, @@ -369,31 +373,31 @@ func testABECreateBody(t *testing.T, port int) { }, }, RepeatedStringValue: []string{"a", "b", "c"}, - OneofValue: &gw.ABitOfEverything_OneofString{ + OneofValue: &examplepb.ABitOfEverything_OneofString{ OneofString: "x", }, - MapValue: map[string]gw.NumericEnum{ - "a": gw.NumericEnum_ONE, - "b": gw.NumericEnum_ZERO, + MapValue: map[string]examplepb.NumericEnum{ + "a": examplepb.NumericEnum_ONE, + "b": examplepb.NumericEnum_ZERO, }, MappedStringValue: map[string]string{ "a": "x", "b": "y", }, - MappedNestedValue: map[string]*gw.ABitOfEverything_Nested{ + MappedNestedValue: map[string]*examplepb.ABitOfEverything_Nested{ "a": {Name: "x", Amount: 1}, "b": {Name: "y", Amount: 2}, }, - RepeatedEnumAnnotation: []gw.NumericEnum{ - gw.NumericEnum_ONE, - gw.NumericEnum_ZERO, + RepeatedEnumAnnotation: []examplepb.NumericEnum{ + examplepb.NumericEnum_ONE, + examplepb.NumericEnum_ZERO, }, - EnumValueAnnotation: gw.NumericEnum_ONE, + EnumValueAnnotation: examplepb.NumericEnum_ONE, RepeatedStringAnnotation: []string{ "a", "b", }, - RepeatedNestedAnnotation: []*gw.ABitOfEverything_Nested{ + RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{ { Name: "hoge", Amount: 10, @@ -403,7 +407,7 @@ func testABECreateBody(t *testing.T, port int) { Amount: 20, }, }, - NestedAnnotation: &gw.ABitOfEverything_Nested{ + NestedAnnotation: &examplepb.ABitOfEverything_Nested{ Name: "hoge", Amount: 10, }, @@ -432,7 +436,7 @@ func testABECreateBody(t *testing.T, port int) { t.Logf("%s", buf) } - var msg gw.ABitOfEverything + var msg examplepb.ABitOfEverything if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -458,7 +462,7 @@ func testABEBulkCreate(t *testing.T, port int) { for _, val := range []string{ "foo", "bar", "baz", "qux", "quux", } { - want := gw.ABitOfEverything{ + want := examplepb.ABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, Int64Value: 4294967296, @@ -474,11 +478,11 @@ func testABEBulkCreate(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", - EnumValue: gw.NumericEnum_ONE, + EnumValue: examplepb.NumericEnum_ONE, PathEnumValue: pathenum.PathEnum_ABC, NestedPathEnumValue: pathenum.MessagePathEnum_GHI, - Nested: []*gw.ABitOfEverything_Nested{ + Nested: []*examplepb.ABitOfEverything_Nested{ { Name: "hoge", Amount: 10, @@ -488,16 +492,16 @@ func testABEBulkCreate(t *testing.T, port int) { Amount: 20, }, }, - RepeatedEnumAnnotation: []gw.NumericEnum{ - gw.NumericEnum_ONE, - gw.NumericEnum_ZERO, + RepeatedEnumAnnotation: []examplepb.NumericEnum{ + examplepb.NumericEnum_ONE, + examplepb.NumericEnum_ZERO, }, - EnumValueAnnotation: gw.NumericEnum_ONE, + EnumValueAnnotation: examplepb.NumericEnum_ONE, RepeatedStringAnnotation: []string{ "a", "b", }, - RepeatedNestedAnnotation: []*gw.ABitOfEverything_Nested{ + RepeatedNestedAnnotation: []*examplepb.ABitOfEverything_Nested{ { Name: "hoge", Amount: 10, @@ -507,7 +511,7 @@ func testABEBulkCreate(t *testing.T, port int) { Amount: 20, }, }, - NestedAnnotation: &gw.ABitOfEverything_Nested{ + NestedAnnotation: &examplepb.ABitOfEverything_Nested{ Name: "hoge", Amount: 10, }, @@ -573,7 +577,7 @@ func testABEBulkCreateWithError(t *testing.T, port int) { } { time.Sleep(1 * time.Millisecond) - want := gw.ABitOfEverything{ + want := examplepb.ABitOfEverything{ StringValue: fmt.Sprintf("strprefix/%s", val), } var m jsonpb.Marshaler @@ -639,7 +643,7 @@ func testABELookup(t *testing.T, port int) { return } - var want gw.ABitOfEverything + var want examplepb.ABitOfEverything if err := jsonpb.UnmarshalString(string(buf), &want); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &want) failed with %v; want success", buf, err) return @@ -659,7 +663,7 @@ func testABELookup(t *testing.T, port int) { return } - var msg gw.ABitOfEverything + var msg examplepb.ABitOfEverything if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return @@ -686,7 +690,7 @@ func TestABEPatch(t *testing.T) { port := 8088 // create a record with a known string_value and int32_value - uuid := postABE(t, port, gw.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) + uuid := postABE(t, port, examplepb.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) // issue PATCH request, only updating string_value req, err := http.NewRequest( @@ -731,59 +735,59 @@ func TestABEPatchBody(t *testing.T) { for _, tc := range []struct { name string - originalValue gw.ABitOfEverything - input gw.UpdateV2Request - want gw.ABitOfEverything + originalValue examplepb.ABitOfEverything + input examplepb.UpdateV2Request + want examplepb.ABitOfEverything }{ { name: "with fieldmask provided", - originalValue: gw.ABitOfEverything{ + originalValue: examplepb.ABitOfEverything{ Int32Value: 42, StringValue: "rabbit", - SingleNested: &gw.ABitOfEverything_Nested{Name: "some value that will get overwritten", Amount: 345}, + SingleNested: &examplepb.ABitOfEverything_Nested{Name: "some value that will get overwritten", Amount: 345}, }, - input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ StringValue: "some value that won't get updated because it's not in the field mask", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, }, UpdateMask: &field_mask.FieldMask{Paths: []string{"single_nested"}}}, - want: gw.ABitOfEverything{ + want: examplepb.ABitOfEverything{ Int32Value: 42, StringValue: "rabbit", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, }, }, { // N.B. This case passes the empty field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with empty fieldmask", - originalValue: gw.ABitOfEverything{ + originalValue: examplepb.ABitOfEverything{ Int32Value: 42, StringValue: "some value that will get overwritten", - SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 345}, + SingleNested: &examplepb.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 345}, }, - input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ StringValue: "some updated value because the fieldMask is nil", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, }, UpdateMask: &field_mask.FieldMask{}}, - want: gw.ABitOfEverything{ + want: examplepb.ABitOfEverything{ StringValue: "some updated value because the fieldMask is nil", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 456}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, }, }, { // N.B. This case passes the nil field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with nil fieldmask", - originalValue: gw.ABitOfEverything{ + originalValue: examplepb.ABitOfEverything{ Int32Value: 42, StringValue: "some value that will get overwritten", - SingleNested: &gw.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 123}, + SingleNested: &examplepb.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 123}, }, - input: gw.UpdateV2Request{Abe: &gw.ABitOfEverything{ + input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ StringValue: "some updated value because the fieldMask is nil", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 657}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 657}, }, UpdateMask: nil}, - want: gw.ABitOfEverything{ + want: examplepb.ABitOfEverything{ StringValue: "some updated value because the fieldMask is nil", - SingleNested: &gw.ABitOfEverything_Nested{Amount: 657}, + SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 657}, }, }, } { @@ -833,7 +837,7 @@ func mustMarshal(t *testing.T, i interface{}) string { } // postABE conveniently creates a new ABE record for ease in testing -func postABE(t *testing.T, port int, abe gw.ABitOfEverything) (uuid string) { +func postABE(t *testing.T, port int, abe examplepb.ABitOfEverything) (uuid string) { apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) postResp, err := http.Post(apiURL, "application/json", strings.NewReader(mustMarshal(t, abe))) if err != nil { @@ -857,7 +861,7 @@ func postABE(t *testing.T, port int, abe gw.ABitOfEverything) (uuid string) { } // getABE conveniently fetches an ABE record for ease in testing -func getABE(t *testing.T, port int, uuid string) gw.ABitOfEverything { +func getABE(t *testing.T, port int, uuid string) examplepb.ABitOfEverything { gURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%s", port, uuid) getResp, err := http.Get(gURL) if err != nil { @@ -868,7 +872,7 @@ func getABE(t *testing.T, port int, uuid string) gw.ABitOfEverything { if got, want := getResp.StatusCode, http.StatusOK; got != want { t.Fatalf("getResp.StatusCode= %d, want %d. resp: %v", got, want, getResp) } - var getRespBody gw.ABitOfEverything + var getRespBody examplepb.ABitOfEverything body, err := ioutil.ReadAll(getResp.Body) if err != nil { t.Fatalf("getResp body couldn't be read: %v", err) @@ -957,7 +961,7 @@ func testABEList(t *testing.T, port int) { t.Errorf("item.Error = %#v; want empty; i = %d", item.Error, i) continue } - var msg gw.ABitOfEverything + var msg examplepb.ABitOfEverything if err := jsonpb.UnmarshalString(string(item.Result), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", item.Result, err) } @@ -1186,7 +1190,7 @@ func testABERepeated(t *testing.T, port int) { } return strings.Join(s, ",") } - want := gw.ABitOfEverythingRepeated{ + want := examplepb.ABitOfEverythingRepeated{ PathRepeatedFloatValue: []float32{ 1.5, -1.5, @@ -1231,9 +1235,9 @@ func testABERepeated(t *testing.T, port int) { 0, 4294967295, }, - PathRepeatedEnumValue: []gw.NumericEnum{ - gw.NumericEnum_ZERO, - gw.NumericEnum_ONE, + PathRepeatedEnumValue: []examplepb.NumericEnum{ + examplepb.NumericEnum_ZERO, + examplepb.NumericEnum_ONE, }, PathRepeatedSfixed32Value: []int32{ 2147483647, @@ -1271,7 +1275,7 @@ func testABERepeated(t *testing.T, port int) { t.Logf("%s", buf) } - var msg gw.ABitOfEverythingRepeated + var msg examplepb.ABitOfEverythingRepeated if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return diff --git a/examples/internal/integration/proto_error_test.go b/examples/internal/integration/proto_error_test.go index 82ee0f1b1dc..bc93895cf26 100644 --- a/examples/internal/integration/proto_error_test.go +++ b/examples/internal/integration/proto_error_test.go @@ -37,8 +37,8 @@ func TestWithProtoErrorHandler(t *testing.T) { if err := waitForGateway(ctx, 8082); err != nil { t.Errorf("waitForGateway(ctx, 8082) failed with %v; want success", err) } - testEcho(t, port, "application/json") - testEchoBody(t, port) + testEcho(t, port, "v1", "application/json") + testEchoBody(t, port, "v1") } func TestABEWithProtoErrorHandler(t *testing.T) { diff --git a/examples/internal/proto/examplepb/standalone_echo_service.yaml b/examples/internal/proto/examplepb/standalone_echo_service.yaml new file mode 100644 index 00000000000..de3f5f38c2f --- /dev/null +++ b/examples/internal/proto/examplepb/standalone_echo_service.yaml @@ -0,0 +1,17 @@ +type: google.api.Service +config_version: 3 + +http: + rules: + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo + post: "/v2/example/echo/{id}" + additional_bindings: + - get: "/v2/example/echo/{id}/{num}" + - get: "/v2/example/echo/{id}/{num}/{lang}" + - get: "/v2/example/echo1/{id}/{line_num}/{status.note}" + - get: "/v2/example/echo2/{no.note}" + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody + post: "/v2/example/echo_body" + body: "*" + - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete + delete: "/v2/example/echo_delete" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index c3bd7f5ed04..9c2f999bc44 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -38,6 +38,87 @@ const ( // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4 +// Embedded represents a message embedded in SimpleMessage. +type UnannotatedEmbedded struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Mark: + // *UnannotatedEmbedded_Progress + // *UnannotatedEmbedded_Note + Mark isUnannotatedEmbedded_Mark `protobuf_oneof:"mark"` +} + +func (x *UnannotatedEmbedded) Reset() { + *x = UnannotatedEmbedded{} + if protoimpl.UnsafeEnabled { + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnannotatedEmbedded) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnannotatedEmbedded) ProtoMessage() {} + +func (x *UnannotatedEmbedded) ProtoReflect() protoreflect.Message { + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnannotatedEmbedded.ProtoReflect.Descriptor instead. +func (*UnannotatedEmbedded) Descriptor() ([]byte, []int) { + return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{0} +} + +func (m *UnannotatedEmbedded) GetMark() isUnannotatedEmbedded_Mark { + if m != nil { + return m.Mark + } + return nil +} + +func (x *UnannotatedEmbedded) GetProgress() int64 { + if x, ok := x.GetMark().(*UnannotatedEmbedded_Progress); ok { + return x.Progress + } + return 0 +} + +func (x *UnannotatedEmbedded) GetNote() string { + if x, ok := x.GetMark().(*UnannotatedEmbedded_Note); ok { + return x.Note + } + return "" +} + +type isUnannotatedEmbedded_Mark interface { + isUnannotatedEmbedded_Mark() +} + +type UnannotatedEmbedded_Progress struct { + Progress int64 `protobuf:"varint,1,opt,name=progress,proto3,oneof"` +} + +type UnannotatedEmbedded_Note struct { + Note string `protobuf:"bytes,2,opt,name=note,proto3,oneof"` +} + +func (*UnannotatedEmbedded_Progress) isUnannotatedEmbedded_Mark() {} + +func (*UnannotatedEmbedded_Note) isUnannotatedEmbedded_Mark() {} + // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. type UnannotatedSimpleMessage struct { state protoimpl.MessageState @@ -48,12 +129,21 @@ type UnannotatedSimpleMessage struct { Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Num int64 `protobuf:"varint,2,opt,name=num,proto3" json:"num,omitempty"` Duration *duration.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + // Types that are assignable to Code: + // *UnannotatedSimpleMessage_LineNum + // *UnannotatedSimpleMessage_Lang + Code isUnannotatedSimpleMessage_Code `protobuf_oneof:"code"` + Status *UnannotatedEmbedded `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + // Types that are assignable to Ext: + // *UnannotatedSimpleMessage_En + // *UnannotatedSimpleMessage_No + Ext isUnannotatedSimpleMessage_Ext `protobuf_oneof:"ext"` } func (x *UnannotatedSimpleMessage) Reset() { *x = UnannotatedSimpleMessage{} if protoimpl.UnsafeEnabled { - mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -66,7 +156,7 @@ func (x *UnannotatedSimpleMessage) String() string { func (*UnannotatedSimpleMessage) ProtoMessage() {} func (x *UnannotatedSimpleMessage) ProtoReflect() protoreflect.Message { - mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0] + mi := &file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -79,7 +169,7 @@ func (x *UnannotatedSimpleMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use UnannotatedSimpleMessage.ProtoReflect.Descriptor instead. func (*UnannotatedSimpleMessage) Descriptor() ([]byte, []int) { - return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{0} + return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescGZIP(), []int{1} } func (x *UnannotatedSimpleMessage) GetId() string { @@ -103,6 +193,87 @@ func (x *UnannotatedSimpleMessage) GetDuration() *duration.Duration { return nil } +func (m *UnannotatedSimpleMessage) GetCode() isUnannotatedSimpleMessage_Code { + if m != nil { + return m.Code + } + return nil +} + +func (x *UnannotatedSimpleMessage) GetLineNum() int64 { + if x, ok := x.GetCode().(*UnannotatedSimpleMessage_LineNum); ok { + return x.LineNum + } + return 0 +} + +func (x *UnannotatedSimpleMessage) GetLang() string { + if x, ok := x.GetCode().(*UnannotatedSimpleMessage_Lang); ok { + return x.Lang + } + return "" +} + +func (x *UnannotatedSimpleMessage) GetStatus() *UnannotatedEmbedded { + if x != nil { + return x.Status + } + return nil +} + +func (m *UnannotatedSimpleMessage) GetExt() isUnannotatedSimpleMessage_Ext { + if m != nil { + return m.Ext + } + return nil +} + +func (x *UnannotatedSimpleMessage) GetEn() int64 { + if x, ok := x.GetExt().(*UnannotatedSimpleMessage_En); ok { + return x.En + } + return 0 +} + +func (x *UnannotatedSimpleMessage) GetNo() *UnannotatedEmbedded { + if x, ok := x.GetExt().(*UnannotatedSimpleMessage_No); ok { + return x.No + } + return nil +} + +type isUnannotatedSimpleMessage_Code interface { + isUnannotatedSimpleMessage_Code() +} + +type UnannotatedSimpleMessage_LineNum struct { + LineNum int64 `protobuf:"varint,4,opt,name=line_num,json=lineNum,proto3,oneof"` +} + +type UnannotatedSimpleMessage_Lang struct { + Lang string `protobuf:"bytes,5,opt,name=lang,proto3,oneof"` +} + +func (*UnannotatedSimpleMessage_LineNum) isUnannotatedSimpleMessage_Code() {} + +func (*UnannotatedSimpleMessage_Lang) isUnannotatedSimpleMessage_Code() {} + +type isUnannotatedSimpleMessage_Ext interface { + isUnannotatedSimpleMessage_Ext() +} + +type UnannotatedSimpleMessage_En struct { + En int64 `protobuf:"varint,7,opt,name=en,proto3,oneof"` +} + +type UnannotatedSimpleMessage_No struct { + No *UnannotatedEmbedded `protobuf:"bytes,8,opt,name=no,proto3,oneof"` +} + +func (*UnannotatedSimpleMessage_En) isUnannotatedSimpleMessage_Ext() {} + +func (*UnannotatedSimpleMessage_No) isUnannotatedSimpleMessage_Ext() {} + var File_examples_internal_proto_examplepb_unannotated_echo_service_proto protoreflect.FileDescriptor var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc = []byte{ @@ -114,15 +285,36 @@ var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDes 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x18, - 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x32, 0xd5, 0x03, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x13, + 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, + 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, + 0xef, 0x02, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, + 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, + 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x55, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, + 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, + 0x6e, 0x12, 0x4f, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02, + 0x6e, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, + 0x74, 0x32, 0xd5, 0x03, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, @@ -151,8 +343,13 @@ var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDes 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -167,24 +364,27 @@ func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDe return file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDescData } -var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = []interface{}{ - (*UnannotatedSimpleMessage)(nil), // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - (*duration.Duration)(nil), // 1: google.protobuf.Duration + (*UnannotatedEmbedded)(nil), // 0: grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded + (*UnannotatedSimpleMessage)(nil), // 1: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + (*duration.Duration)(nil), // 2: google.protobuf.Duration } var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = []int32{ - 1, // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration - 0, // 1: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 0, // 2: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 0, // 3: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 0, // 4: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 0, // 5: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 0, // 6: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 4, // [4:7] is the sub-list for method output_type - 1, // [1:4] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 2, // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration + 0, // 1: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.status:type_name -> grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded + 0, // 2: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.no:type_name -> grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded + 1, // 3: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 1, // 4: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 1, // 5: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 1, // 6: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 1, // 7: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 1, // 8: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 6, // [6:9] is the sub-list for method output_type + 3, // [3:6] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init() } @@ -194,6 +394,18 @@ func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init( } if !protoimpl.UnsafeEnabled { file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnannotatedEmbedded); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UnannotatedSimpleMessage); i { case 0: return &v.state @@ -206,13 +418,23 @@ func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_init( } } } + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*UnannotatedEmbedded_Progress)(nil), + (*UnannotatedEmbedded_Note)(nil), + } + file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*UnannotatedSimpleMessage_LineNum)(nil), + (*UnannotatedSimpleMessage_Lang)(nil), + (*UnannotatedSimpleMessage_En)(nil), + (*UnannotatedSimpleMessage_No)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 1, }, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.proto b/examples/internal/proto/examplepb/unannotated_echo_service.proto index 4f926d3c6fc..ec77163b544 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.proto +++ b/examples/internal/proto/examplepb/unannotated_echo_service.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -option go_package = "examplepb"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb;examplepb"; // Unannotated Echo Service // Similar to echo_service.proto but without annotations. See @@ -13,12 +13,29 @@ package grpc.gateway.examples.internal.examplepb; // Do not need annotations.proto, can still use well known types as usual import "google/protobuf/duration.proto"; +// Embedded represents a message embedded in SimpleMessage. +message UnannotatedEmbedded { + oneof mark { + int64 progress = 1; + string note = 2; + } +} + // UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service. message UnannotatedSimpleMessage { // Id represents the message identifier. string id = 1; int64 num = 2; google.protobuf.Duration duration = 3; + oneof code { + int64 line_num = 4; + string lang = 5; + } + UnannotatedEmbedded status = 6; + oneof ext { + int64 en = 7; + UnannotatedEmbedded no = 8; + } } // Echo service responds to incoming echo requests. diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 4d383edc489..1521bc4c043 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -84,6 +84,52 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "line_num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -162,6 +208,52 @@ "in": "query", "required": false, "type": "string" + }, + { + "name": "line_num", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "lang", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "status.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "status.note", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "en", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.progress", + "in": "query", + "required": false, + "type": "string", + "format": "int64" + }, + { + "name": "no.note", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -171,6 +263,19 @@ } }, "definitions": { + "examplepbUnannotatedEmbedded": { + "type": "object", + "properties": { + "progress": { + "type": "string", + "format": "int64" + }, + "note": { + "type": "string" + } + }, + "description": "Embedded represents a message embedded in SimpleMessage." + }, "examplepbUnannotatedSimpleMessage": { "type": "object", "properties": { @@ -184,6 +289,23 @@ }, "duration": { "type": "string" + }, + "line_num": { + "type": "string", + "format": "int64" + }, + "lang": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/examplepbUnannotatedEmbedded" + }, + "en": { + "type": "string", + "format": "int64" + }, + "no": { + "$ref": "#/definitions/examplepbUnannotatedEmbedded" } }, "description": "UnannotatedSimpleMessage represents a simple message sent to the unannotated Echo service." diff --git a/examples/internal/proto/standalone/BUILD.bazel b/examples/internal/proto/standalone/BUILD.bazel new file mode 100644 index 00000000000..a5c303f02e7 --- /dev/null +++ b/examples/internal/proto/standalone/BUILD.bazel @@ -0,0 +1,19 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["unannotated_echo_service.pb.gw.go"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone", + visibility = ["//examples:__subpackages__"], + deps = [ + "//examples/internal/proto/examplepb:go_default_library", + "//runtime:go_default_library", + "//utilities:go_default_library", + "@com_github_golang_protobuf//descriptor:go_default_library_gen", + "@com_github_golang_protobuf//proto:go_default_library", + "@org_golang_google_grpc//:go_default_library", + "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_grpc//grpclog:go_default_library", + "@org_golang_google_grpc//status:go_default_library", + ], +) diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go new file mode 100644 index 00000000000..acd19da52f7 --- /dev/null +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -0,0 +1,954 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: examples/internal/proto/examplepb/unannotated_echo_service.proto + +/* +Package examplepb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package examplepb + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + extExamplepb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage + +var ( + filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_UnannotatedEchoService_Echo_1 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "num": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_Echo_1(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_UnannotatedEchoService_Echo_2 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "num": 1, "lang": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}} +) + +func request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + val, ok = pathParams["lang"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "lang") + } + + if protoReq.Code == nil { + protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{} + } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) + } + protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "num") + } + + protoReq.Num, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "num", err) + } + + val, ok = pathParams["lang"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "lang") + } + + if protoReq.Code == nil { + protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{} + } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) + } + protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "lang", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_2); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_UnannotatedEchoService_Echo_3 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0, "line_num": 1, "status": 2, "note": 3}, Base: []int{1, 1, 2, 1, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 4, 2, 3, 5}} +) + +func request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["line_num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "line_num") + } + + if protoReq.Code == nil { + protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{} + } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) + } + protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "line_num", err) + } + + val, ok = pathParams["status.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "status.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "status.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + val, ok = pathParams["line_num"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "line_num") + } + + if protoReq.Code == nil { + protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{} + } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) + } + protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "line_num", err) + } + + val, ok = pathParams["status.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "status.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "status.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "status.note", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_3); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_UnannotatedEchoService_Echo_4 = &utilities.DoubleArray{Encoding: map[string]int{"no": 0, "note": 1}, Base: []int{1, 1, 1, 0}, Check: []int{0, 1, 2, 3}} +) + +func request_UnannotatedEchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["no.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "no.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "no.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_Echo_4(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["no.note"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "no.note") + } + + err = runtime.PopulateFieldFromPath(&protoReq, "no.note", val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "no.note", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_Echo_4); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Echo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoBody(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_EchoBody_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoBody(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_UnannotatedEchoService_EchoDelete_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, client extExamplepb.UnannotatedEchoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EchoDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_UnannotatedEchoService_EchoDelete_0(ctx context.Context, marshaler runtime.Marshaler, server extExamplepb.UnannotatedEchoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq extExamplepb.UnannotatedSimpleMessage + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_UnannotatedEchoService_EchoDelete_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EchoDelete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterUnannotatedEchoServiceHandlerServer registers the http handlers for service UnannotatedEchoService to "mux". +// UnaryRPC :call UnannotatedEchoServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server extExamplepb.UnannotatedEchoServiceServer) error { + + mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_2(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_3(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_Echo_4(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterUnannotatedEchoServiceHandlerFromEndpoint is same as RegisterUnannotatedEchoServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterUnannotatedEchoServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterUnannotatedEchoServiceHandler(ctx, mux, conn) +} + +// RegisterUnannotatedEchoServiceHandler registers the http handlers for service UnannotatedEchoService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterUnannotatedEchoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterUnannotatedEchoServiceHandlerClient(ctx, mux, extExamplepb.NewUnannotatedEchoServiceClient(conn)) +} + +// RegisterUnannotatedEchoServiceHandlerClient registers the http handlers for service UnannotatedEchoService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "extExamplepb.UnannotatedEchoServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "extExamplepb.UnannotatedEchoServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "extExamplepb.UnannotatedEchoServiceClient" to call the correct interceptors. +func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client extExamplepb.UnannotatedEchoServiceClient) error { + + mux.Handle("POST", pattern_UnannotatedEchoService_Echo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_Echo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_Echo_1(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_2, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_Echo_2(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_2(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_3, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_Echo_3(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_3(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_UnannotatedEchoService_Echo_4, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_Echo_4(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_Echo_4(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_UnannotatedEchoService_EchoBody_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_EchoBody_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoBody_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_UnannotatedEchoService_EchoDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_UnannotatedEchoService_EchoDelete_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_UnannotatedEchoService_EchoDelete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v2", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo", "id", "num", "lang"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo1", "id", "line_num", "status.note"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo2", "no.note"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_UnannotatedEchoService_Echo_0 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_Echo_1 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_Echo_2 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_Echo_3 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_Echo_4 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_EchoBody_0 = runtime.ForwardResponseMessage + + forward_UnannotatedEchoService_EchoDelete_0 = runtime.ForwardResponseMessage +) diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index ddd9d4424ed..77c8326a830 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -17,6 +17,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server", deps = [ "//examples/internal/proto/examplepb:go_default_library", + "//examples/internal/proto/standalone:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", "//runtime:go_default_library", diff --git a/examples/internal/server/main.go b/examples/internal/server/main.go index 4ceed0a9905..8c42443ed45 100644 --- a/examples/internal/server/main.go +++ b/examples/internal/server/main.go @@ -7,6 +7,7 @@ import ( "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + standalone "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" ) @@ -28,6 +29,7 @@ func Run(ctx context.Context, network, address string) error { examples.RegisterEchoServiceServer(s, newEchoServer()) examples.RegisterFlowCombinationServer(s, newFlowCombinationServer()) examples.RegisterNonStandardServiceServer(s, newNonStandardServer()) + examples.RegisterUnannotatedEchoServiceServer(s, newUnannotatedEchoServer()) abe := newABitOfEverythingServer() examples.RegisterABitOfEverythingServiceServer(s, abe) @@ -48,6 +50,7 @@ func RunInProcessGateway(ctx context.Context, addr string, opts ...runtime.Serve examples.RegisterEchoServiceHandlerServer(ctx, mux, newEchoServer()) examples.RegisterFlowCombinationHandlerServer(ctx, mux, newFlowCombinationServer()) examples.RegisterNonStandardServiceHandlerServer(ctx, mux, newNonStandardServer()) + standalone.RegisterUnannotatedEchoServiceHandlerServer(ctx, mux, newUnannotatedEchoServer()) abe := newABitOfEverythingServer() examples.RegisterABitOfEverythingServiceHandlerServer(ctx, mux, abe) diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/protoc-gen-grpc-gateway/descriptor/registry.go index a96a0edb575..3b343ea8ca2 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry.go +++ b/protoc-gen-grpc-gateway/descriptor/registry.go @@ -86,6 +86,8 @@ type Registry struct { // simpleOperationIDs removes the service prefix from the generated // operationIDs. This risks generating duplicate operationIDs. simpleOperationIDs bool + + standalone bool } type repeatedFieldSeparator struct { @@ -145,6 +147,10 @@ func (r *Registry) loadFile(file *descriptor.FileDescriptorProto) { Path: r.goPackagePath(file), Name: r.defaultGoPackageName(file), } + if r.standalone { + pkg.Alias = "ext" + strings.Title(pkg.Name) + } + if err := r.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil { for i := 0; ; i++ { alias := fmt.Sprintf("%s_%d", pkg.Name, i) @@ -167,15 +173,17 @@ func (r *Registry) loadFile(file *descriptor.FileDescriptorProto) { func (r *Registry) registerMsg(file *File, outerPath []string, msgs []*descriptor.DescriptorProto) { for i, md := range msgs { m := &Message{ - File: file, - Outers: outerPath, - DescriptorProto: md, - Index: i, + File: file, + Outers: outerPath, + DescriptorProto: md, + Index: i, + ForcePrefixedName: r.standalone, } for _, fd := range md.GetField() { m.Fields = append(m.Fields, &Field{ Message: m, FieldDescriptorProto: fd, + ForcePrefixedName: r.standalone, }) } file.Messages = append(file.Messages, m) @@ -197,6 +205,7 @@ func (r *Registry) registerEnum(file *File, outerPath []string, enums []*descrip Outers: outerPath, EnumDescriptorProto: ed, Index: i, + ForcePrefixedName: r.standalone, } file.Enums = append(file.Enums, e) r.enums[e.FQEN()] = e @@ -308,6 +317,11 @@ func (r *Registry) SetPrefix(prefix string) { r.prefix = prefix } +// SetStandalone registers standalone flag to control package prefix +func (r *Registry) SetStandalone(standalone bool) { + r.standalone = standalone +} + // SetImportPath registers the importPath which is used as the package if no // input files declare go_package. If it contains slashes, everything up to the // rightmost slash is ignored. diff --git a/protoc-gen-grpc-gateway/descriptor/registry_test.go b/protoc-gen-grpc-gateway/descriptor/registry_test.go index 36c53d6d4b9..1ec72a8cacd 100644 --- a/protoc-gen-grpc-gateway/descriptor/registry_test.go +++ b/protoc-gen-grpc-gateway/descriptor/registry_test.go @@ -550,6 +550,25 @@ func TestLoadOverridedPackageName(t *testing.T) { } } +func TestLoadWithStandalone(t *testing.T) { + reg := NewRegistry() + reg.SetStandalone(true) + loadFile(t, reg, ` + name: 'example.proto' + package: 'example' + options < go_package: 'example.com/xyz;pb' > + `) + file := reg.files["example.proto"] + if file == nil { + t.Errorf("reg.files[%q] = nil; want non-nil", "example.proto") + return + } + wantPkg := GoPackage{Path: "example.com/xyz", Name: "pb", Alias: "extPb"} + if got, want := file.GoPkg, wantPkg; got != want { + t.Errorf("file.GoPkg = %#v; want %#v", got, want) + } +} + func TestLoadSetInputPath(t *testing.T) { reg := NewRegistry() reg.SetImportPath("foo/examplepb") diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/protoc-gen-grpc-gateway/descriptor/services.go index 468bbaed4bb..1e7e4a58f1a 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/protoc-gen-grpc-gateway/descriptor/services.go @@ -22,6 +22,7 @@ func (r *Registry) loadServices(file *File) error { svc := &Service{ File: file, ServiceDescriptorProto: sd, + ForcePrefixedName: r.standalone, } for _, md := range sd.GetMethod() { glog.V(2).Infof("Processing %s.%s", sd.GetName(), md.GetName()) diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/protoc-gen-grpc-gateway/descriptor/services_test.go index ee05fc90687..18915aba853 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/protoc-gen-grpc-gateway/descriptor/services_test.go @@ -144,6 +144,9 @@ func crossLinkFixture(f *File) *File { } } } + for _, e := range f.Enums { + e.File = f + } return f } diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index e8c0667c28f..a0676e55965 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -51,6 +51,15 @@ type File struct { Services []*Service } +// Pkg returns package name or alias if it's present +func (f *File) Pkg() string { + pkg := f.GoPkg.Name + if alias := f.GoPkg.Alias; alias != "" { + pkg = alias + } + return pkg +} + // proto2 determines if the syntax of the file is proto2. func (f *File) proto2() bool { return f.Syntax == nil || f.GetSyntax() == "proto2" @@ -67,6 +76,8 @@ type Message struct { // Index is proto path index of this message in File. Index int + + ForcePrefixedName bool } // FQMN returns a fully qualified message name of this message. @@ -89,14 +100,10 @@ func (m *Message) GoType(currentPackage string) string { components = append(components, m.GetName()) name := strings.Join(components, "_") - if m.File.GoPkg.Path == currentPackage { + if !m.ForcePrefixedName && m.File.GoPkg.Path == currentPackage { return name } - pkg := m.File.GoPkg.Name - if alias := m.File.GoPkg.Alias; alias != "" { - pkg = alias - } - return fmt.Sprintf("%s.%s", pkg, name) + return fmt.Sprintf("%s.%s", m.File.Pkg(), name) } // Enum describes a protocol buffer enum types @@ -108,6 +115,8 @@ type Enum struct { *descriptor.EnumDescriptorProto Index int + + ForcePrefixedName bool } // FQEN returns a fully qualified enum name of this enum. @@ -130,14 +139,10 @@ func (e *Enum) GoType(currentPackage string) string { components = append(components, e.GetName()) name := strings.Join(components, "_") - if e.File.GoPkg.Path == currentPackage { + if !e.ForcePrefixedName && e.File.GoPkg.Path == currentPackage { return name } - pkg := e.File.GoPkg.Name - if alias := e.File.GoPkg.Alias; alias != "" { - pkg = alias - } - return fmt.Sprintf("%s.%s", pkg, name) + return fmt.Sprintf("%s.%s", e.File.Pkg(), name) } // Service wraps descriptor.ServiceDescriptorProto for richer features. @@ -147,6 +152,8 @@ type Service struct { *descriptor.ServiceDescriptorProto // Methods is the list of methods defined in this service. Methods []*Method + + ForcePrefixedName bool } // FQSN returns the fully qualified service name of this service. @@ -159,6 +166,23 @@ func (s *Service) FQSN() string { return strings.Join(components, ".") } +// InstanceName returns object name of the service with package prefix if needed +func (s *Service) InstanceName() string { + if !s.ForcePrefixedName { + return s.GetName() + } + return fmt.Sprintf("%s.%s", s.File.Pkg(), s.GetName()) +} + +// ClientConstructorName returns name of the Client constructor with package prefix if needed +func (s *Service) ClientConstructorName() string { + constructor := "New" + s.GetName() + "Client" + if !s.ForcePrefixedName { + return constructor + } + return fmt.Sprintf("%s.%s", s.File.Pkg(), constructor) +} + // Method wraps descriptor.MethodDescriptorProto for richer features. type Method struct { // Service is the service which this method belongs to. @@ -218,6 +242,8 @@ type Field struct { // FieldMessage is the message type of the field. FieldMessage *Message *descriptor.FieldDescriptorProto + + ForcePrefixedName bool } // Parameter is a parameter provided in http requests @@ -319,6 +345,10 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { oneOfName := gogen.CamelCase(msg.GetOneofDecl()[*index].GetName()) oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() + if c.Target.ForcePrefixedName { + oneofFieldName = msg.File.Pkg() + "." + oneofFieldName + } + components = components + "." + oneOfName s := `if %s == nil { %s =&%s{} diff --git a/protoc-gen-grpc-gateway/descriptor/types_test.go b/protoc-gen-grpc-gateway/descriptor/types_test.go index 1dcdb341ef6..9c7046b1e2e 100644 --- a/protoc-gen-grpc-gateway/descriptor/types_test.go +++ b/protoc-gen-grpc-gateway/descriptor/types_test.go @@ -204,3 +204,66 @@ func TestFieldPath(t *testing.T) { t.Errorf("fpEmpty.AssignableExpr(%q) = %q; want %q", "resp", got, want) } } + +func TestGoType(t *testing.T) { + src := ` + name: 'example.proto' + package: 'example' + message_type < + name: 'Message' + field < + name: 'field' + type: TYPE_STRING + number: 1 + > + >, + enum_type < + name: 'EnumName' + >, + ` + + var fd descriptor.FileDescriptorProto + if err := proto.UnmarshalText(src, &fd); err != nil { + t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) + } + + msg := &Message{ + DescriptorProto: fd.MessageType[0], + Fields: []*Field{ + {FieldDescriptorProto: fd.MessageType[0].Field[0]}, + }, + } + enum := &Enum{ + EnumDescriptorProto: fd.EnumType[0], + } + file := &File{ + FileDescriptorProto: &fd, + GoPkg: GoPackage{Path: "example", Name: "example"}, + Messages: []*Message{msg}, + Enums: []*Enum{enum}, + } + crossLinkFixture(file) + + if got, want := msg.GoType("example"), "Message"; got != want { + t.Errorf("msg.GoType() = %q; want %q", got, want) + } + if got, want := msg.GoType("extPackage"), "example.Message"; got != want { + t.Errorf("msg.GoType() = %q; want %q", got, want) + } + msg.ForcePrefixedName = true + if got, want := msg.GoType("example"), "example.Message"; got != want { + t.Errorf("msg.GoType() = %q; want %q", got, want) + } + + if got, want := enum.GoType("example"), "EnumName"; got != want { + t.Errorf("enum.GoType() = %q; want %q", got, want) + } + if got, want := enum.GoType("extPackage"), "example.EnumName"; got != want { + t.Errorf("enum.GoType() = %q; want %q", got, want) + } + enum.ForcePrefixedName = true + if got, want := enum.GoType("example"), "example.EnumName"; got != want { + t.Errorf("enum.GoType() = %q; want %q", got, want) + } + +} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 2c2f6fd49fb..44f1e6e9507 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -33,10 +33,12 @@ type generator struct { registerFuncSuffix string pathType pathType allowPatchFeature bool + standalone bool } // New returns a new generator which generates grpc gateway files. -func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string, allowPatchFeature bool) gen.Generator { +func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, pathTypeString string, + allowPatchFeature, standalone bool) gen.Generator { var imports []descriptor.GoPackage for _, pkgpath := range []string{ "context", @@ -85,6 +87,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p registerFuncSuffix: registerFuncSuffix, pathType: pathType, allowPatchFeature: allowPatchFeature, + standalone: standalone, } } @@ -128,6 +131,11 @@ func (g *generator) generate(file *descriptor.File) (string, error) { pkgSeen[pkg.Path] = true imports = append(imports, pkg) } + + if g.standalone { + imports = append(imports, file.GoPkg) + } + for _, svc := range file.Services { for _, m := range svc.Methods { imports = append(imports, g.addEnumPathParamImports(file, m, pkgSeen)...) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 32f7b878073..beb7475cfd5 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -159,10 +159,12 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { msgName := generator2.CamelCase(*msg.Name) msg.Name = &msgName } + for _, svc := range p.Services { var methodWithBindingsSeen bool svcName := generator2.CamelCase(*svc.Name) svc.Name = &svcName + for _, meth := range svc.Methods { glog.V(2).Infof("Processing %s.%s", svc.GetName(), meth.GetName()) methName := generator2.CamelCase(*meth.Name) @@ -254,9 +256,9 @@ var _ = descriptor.ForMessage _ = template.Must(handlerTemplate.New("request-func-signature").Parse(strings.Replace(` {{if .Method.GetServerStreaming}} -func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.GetName}}Client, req *http.Request, pathParams map[string]string) ({{.Method.Service.GetName}}_{{.Method.GetName}}Client, runtime.ServerMetadata, error) +func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.InstanceName}}Client, req *http.Request, pathParams map[string]string) ({{.Method.Service.InstanceName}}_{{.Method.GetName}}Client, runtime.ServerMetadata, error) {{else}} -func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.GetName}}Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) +func request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, client {{.Method.Service.InstanceName}}Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {{end}}`, "\n", "", -1))) _ = template.Must(handlerTemplate.New("client-streaming-request-func").Parse(` @@ -471,7 +473,7 @@ var ( _ = template.Must(localHandlerTemplate.New("local-request-func-signature").Parse(strings.Replace(` {{if .Method.GetServerStreaming}} {{else}} -func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.GetName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) +func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ctx context.Context, marshaler runtime.Marshaler, server {{.Method.Service.InstanceName}}Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {{end}}`, "\n", "", -1))) _ = template.Must(localHandlerTemplate.New("local-client-rpc-request-func").Parse(` @@ -564,7 +566,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server registers the http handlers for service {{$svc.GetName}} to "mux". // UnaryRPC :call {{$svc.GetName}}Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.GetName}}Server) error { +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Server(ctx context.Context, mux *runtime.ServeMux, server {{$svc.InstanceName}}Server) error { {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} {{if or $m.GetClientStreaming $m.GetServerStreaming}} @@ -639,15 +641,15 @@ func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}FromEndpoint(ctx context.Co // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}} registers the http handlers for service {{$svc.GetName}} to "mux". // The handlers forward requests to the grpc endpoint over "conn". func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx, mux, New{{$svc.GetName}}Client(conn)) + return Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx, mux, {{$svc.ClientConstructorName}}(conn)) } // Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client registers the http handlers for service {{$svc.GetName}} -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "{{$svc.GetName}}Client". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "{{$svc.GetName}}Client" +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "{{$svc.InstanceName}}Client". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "{{$svc.InstanceName}}Client" // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "{{$svc.GetName}}Client" to call the correct interceptors. -func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, mux *runtime.ServeMux, client {{$svc.GetName}}Client) error { +// "{{$svc.InstanceName}}Client" to call the correct interceptors. +func Register{{$svc.GetName}}{{$.RegisterFuncSuffix}}Client(ctx context.Context, mux *runtime.ServeMux, client {{$svc.InstanceName}}Client) error { {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} mux.Handle({{$b.HTTPMethod | printf "%q"}}, pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 4355f64efae..dfa392d6193 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -34,6 +34,7 @@ var ( repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") allowColonFinalSegments = flag.Bool("allow_colon_final_segments", false, "determines whether colons are permitted in the final segment of a path") + standalone = flag.Bool("standalone", false, "generates a standalone gateway package, which imports the target service package") versionFlag = flag.Bool("version", false, "print the current version") ) @@ -81,7 +82,7 @@ func main() { } } - g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *pathType, *allowPatchFeature) + g := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *pathType, *allowPatchFeature, *standalone) if *grpcAPIConfiguration != "" { if err := reg.LoadGrpcAPIServiceFromYAML(*grpcAPIConfiguration); err != nil { @@ -90,6 +91,7 @@ func main() { } } + reg.SetStandalone(*standalone) reg.SetPrefix(*importPrefix) reg.SetImportPath(*importPath) reg.SetAllowDeleteBody(*allowDeleteBody) @@ -103,6 +105,7 @@ func main() { emitError(err) return } + unboundHTTPRules := reg.UnboundExternalHTTPRules() if len(unboundHTTPRules) != 0 { emitError(fmt.Errorf("HTTP rules without a matching selector: %s", strings.Join(unboundHTTPRules, ", "))) From ead3fc06c322daada4418abcbe00e07e5017e80a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20H=C3=A5kansson?= Date: Sat, 25 Apr 2020 16:42:33 +0200 Subject: [PATCH 0323/1518] Move section about google protobufs (#1241) Fixes #1240 --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9bc7caf80d9..8fe614ff9e5 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,12 @@ annotation to your .proto file } ``` + >You will need to provide the required third party protobuf files to the `protoc` compiler. + >They are included in this repo under the `third_party/googleapis` folder, and we recommend copying + >them into your `protoc` generation file structure. If you've structured your protofiles according + >to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), + >you could copy the files into a top-level `./google` folder. + See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior and generated Swagger output. @@ -124,12 +130,6 @@ annotation to your .proto file for more information. 3. Generate gRPC stub - - You will need to provide the required third party protobuf files to the `protoc` compiler. - They are included in this repo under the `third_party/googleapis` folder, and we recommend copying - them into your `protoc` generation file structure. If you've structured your protofiles according - to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), - you could copy the files into a top-level `./google` folder. Here is an example of what a `protoc` command might look like: From 5ece2754d23849c9ed848433b75335d183dc04cd Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Tue, 28 Apr 2020 12:39:15 +0200 Subject: [PATCH 0324/1518] #1098: remove error field from error messages (#1242) * runtime/errors: remove 'error' field, use gRPC status instead Signed-off-by: Stephan Renatus * internal/errors.proto: regenerate Signed-off-by: Stephan Renatus * protoc-gen-swagger: use google.rpc.Status instead of .grpc.gateway.runtime.Error Signed-off-by: Stephan Renatus * protoc-gen-swagger: rename AddStreamError -> AddErrorDefs, add to tests There are probably better ways to write this in than calling `AddErrorDefs` everywhere. Signed-off-by: Stephan Renatus * run "bazel run :gazelle" Signed-off-by: Stephan Renatus * rebuild all the things Note: I've also run find examples -name "*runtime_error*" -delete before. It seems like those are not captured by any of the *clean make targets. Signed-off-by: Stephan Renatus * runtime/errors: fix comment, use status.Convert Signed-off-by: Stephan Renatus * integration_test: port error status test to proto_error_test.go Signed-off-by: Stephan Renatus --- examples/internal/clients/abe/BUILD.bazel | 2 +- .../internal/clients/abe/api/swagger.yaml | 50 +++--- .../abe/api_a_bit_of_everything_service.go | 38 ++--- .../abe/api_camel_case_service_name.go | 2 +- examples/internal/clients/abe/api_echo_rpc.go | 6 +- ...l_runtime_error.go => model_rpc_status.go} | 3 +- examples/internal/clients/echo/BUILD.bazel | 2 +- .../internal/clients/echo/api/swagger.yaml | 18 +-- .../internal/clients/echo/api_echo_service.go | 14 +- ...l_runtime_error.go => model_rpc_status.go} | 3 +- .../internal/clients/responsebody/BUILD.bazel | 2 +- .../clients/responsebody/api/swagger.yaml | 12 +- .../responsebody/api_response_body_service.go | 8 +- .../clients/responsebody/docs/RpcStatus.md | 12 ++ ...l_runtime_error.go => model_rpc_status.go} | 3 +- .../clients/unannotatedecho/BUILD.bazel | 2 +- .../clients/unannotatedecho/api/swagger.yaml | 12 +- .../api_unannotated_echo_service.go | 8 +- ...l_runtime_error.go => model_rpc_status.go} | 3 +- examples/internal/integration/BUILD.bazel | 2 + .../internal/integration/integration_test.go | 82 +--------- .../internal/integration/proto_error_test.go | 59 +++++++ .../a_bit_of_everything.swagger.json | 51 +++--- .../proto/examplepb/echo_service.swagger.json | 19 +-- .../response_body_service.swagger.json | 13 +- .../proto/examplepb/stream.swagger.json | 11 +- .../unannotated_echo_service.swagger.json | 13 +- .../examplepb/use_go_template.swagger.json | 9 +- .../proto/examplepb/wrappers.swagger.json | 27 ++-- internal/errors.pb.go | 150 ++++-------------- internal/errors.proto | 11 -- protoc-gen-swagger/genswagger/BUILD.bazel | 1 + protoc-gen-swagger/genswagger/generator.go | 17 +- protoc-gen-swagger/genswagger/template.go | 4 +- .../genswagger/template_test.go | 32 +++- protoc-gen-swagger/main.go | 2 +- runtime/errors.go | 21 +-- runtime/errors_test.go | 3 - 38 files changed, 301 insertions(+), 426 deletions(-) rename examples/internal/clients/abe/{model_runtime_error.go => model_rpc_status.go} (86%) rename examples/internal/clients/echo/{model_runtime_error.go => model_rpc_status.go} (84%) create mode 100644 examples/internal/clients/responsebody/docs/RpcStatus.md rename examples/internal/clients/responsebody/{model_runtime_error.go => model_rpc_status.go} (87%) rename examples/internal/clients/unannotatedecho/{model_runtime_error.go => model_rpc_status.go} (90%) diff --git a/examples/internal/clients/abe/BUILD.bazel b/examples/internal/clients/abe/BUILD.bazel index 9c2e6553c11..cfddbceac15 100644 --- a/examples/internal/clients/abe/BUILD.bazel +++ b/examples/internal/clients/abe/BUILD.bazel @@ -22,7 +22,7 @@ go_library( "model_pathenum_path_enum.go", "model_protobuf_any.go", "model_protobuf_field_mask.go", - "model_runtime_error.go", + "model_rpc_status.go", "model_sub_string_message.go", "response.go", ], diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 742056db6f6..5bae500ca54 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -62,7 +62,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/echo/{value}: get: tags: @@ -104,7 +104,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -395,7 +395,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/params/get/{single_nested.name}: get: tags: @@ -690,7 +690,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/params/post/{string_value}: post: tags: @@ -729,7 +729,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/query/{uuid}: get: tags: @@ -1030,7 +1030,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" security: [] externalDocs: description: "Find out more about GetQuery" @@ -1188,7 +1188,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{single_nested.name}: post: tags: @@ -1228,7 +1228,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{uuid}: get: tags: @@ -1261,7 +1261,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" put: tags: - "ABitOfEverythingService" @@ -1298,7 +1298,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" delete: tags: - "ABitOfEverythingService" @@ -1329,7 +1329,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" security: - ApiKeyAuth: [] OAuth2: @@ -1526,7 +1526,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/a_bit_of_everything/{abe.uuid}: put: tags: @@ -1564,7 +1564,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" patch: tags: - "ABitOfEverythingService" @@ -1601,7 +1601,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/echo: get: tags: @@ -1644,7 +1644,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -1689,7 +1689,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" @@ -1719,7 +1719,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/errorwithdetails: get: tags: @@ -1746,7 +1746,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/overwriteresponsecontenttype: get: tags: @@ -1776,7 +1776,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/postwithemptybody/{name}: post: tags: @@ -1814,7 +1814,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/timeout: get: tags: @@ -1841,7 +1841,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2/example/withbody/{id}: post: tags: @@ -1879,7 +1879,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v2a/example/a_bit_of_everything/{abe.uuid}: patch: tags: @@ -1917,7 +1917,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" securityDefinitions: ApiKeyAuth: type: "apiKey" @@ -2369,11 +2369,9 @@ definitions: \ API method which has a FieldMask type field in the\nrequest should verify\ \ the included field paths, and return an\n`INVALID_ARGUMENT` error if any path\ \ is duplicated or unmappable." - runtimeError: + rpcStatus: type: "object" properties: - error: - type: "string" code: type: "integer" format: "int32" diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index 419a2454a4a..e7b1f563612 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -318,7 +318,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -625,7 +625,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -773,7 +773,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -955,7 +955,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1101,7 +1101,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreateBody(ct } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1249,7 +1249,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1394,7 +1394,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDelete(ctx co } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1537,7 +1537,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceErrorWithDeta } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1685,7 +1685,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetMessageWit } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -1984,7 +1984,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2207,7 +2207,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetRepeatedQu } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2352,7 +2352,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceLookup(ctx co } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2495,7 +2495,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceOverwriteResp } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2643,7 +2643,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServicePostWithEmpty } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2786,7 +2786,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceTimeout(ctx c } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -2934,7 +2934,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdate(ctx co } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3082,7 +3082,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV2(ctx } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3230,7 +3230,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV22(ctx } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -3378,7 +3378,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceUpdateV23(ctx } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/abe/api_camel_case_service_name.go b/examples/internal/clients/abe/api_camel_case_service_name.go index c7a4a7707e3..9a71f70e61e 100644 --- a/examples/internal/clients/abe/api_camel_case_service_name.go +++ b/examples/internal/clients/abe/api_camel_case_service_name.go @@ -152,7 +152,7 @@ func (a *CamelCaseServiceNameApiService) CamelCaseServiceNameEmpty(ctx context.C } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/abe/api_echo_rpc.go b/examples/internal/clients/abe/api_echo_rpc.go index 8e1f06d5ad8..3abd88ac7f4 100644 --- a/examples/internal/clients/abe/api_echo_rpc.go +++ b/examples/internal/clients/abe/api_echo_rpc.go @@ -168,7 +168,7 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho(ctx context.Context, val } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -326,7 +326,7 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho2(ctx context.Context, bo } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -491,7 +491,7 @@ func (a *EchoRpcApiService) ABitOfEverythingServiceEcho3(ctx context.Context, lo } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/abe/model_runtime_error.go b/examples/internal/clients/abe/model_rpc_status.go similarity index 86% rename from examples/internal/clients/abe/model_runtime_error.go rename to examples/internal/clients/abe/model_rpc_status.go index 9674e976dc7..840daffba2c 100644 --- a/examples/internal/clients/abe/model_runtime_error.go +++ b/examples/internal/clients/abe/model_rpc_status.go @@ -10,8 +10,7 @@ package abe -type RuntimeError struct { - Error_ string `json:"error,omitempty"` +type RpcStatus struct { Code int32 `json:"code,omitempty"` Message string `json:"message,omitempty"` Details []ProtobufAny `json:"details,omitempty"` diff --git a/examples/internal/clients/echo/BUILD.bazel b/examples/internal/clients/echo/BUILD.bazel index 7fd6b4f37b8..0b2e672c5b3 100644 --- a/examples/internal/clients/echo/BUILD.bazel +++ b/examples/internal/clients/echo/BUILD.bazel @@ -11,7 +11,7 @@ go_library( "model_examplepb_embedded.go", "model_examplepb_simple_message.go", "model_protobuf_any.go", - "model_runtime_error.go", + "model_rpc_status.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/echo", diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 2df4be32a99..193d9301b5a 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -31,7 +31,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo/{id}/{num}: get: tags: @@ -106,7 +106,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo/{id}/{num}/{lang}: get: tags: @@ -180,7 +180,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo1/{id}/{line_num}/{status.note}: get: tags: @@ -248,7 +248,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo2/{no.note}: get: tags: @@ -318,7 +318,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo_body: post: tags: @@ -340,7 +340,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo_delete: delete: tags: @@ -416,7 +416,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" definitions: examplepbEmbedded: type: "object" @@ -522,11 +522,9 @@ definitions: \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" - runtimeError: + rpcStatus: type: "object" properties: - error: - type: "string" code: type: "integer" format: "int32" diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index b4eeb7dd655..b3aad8bcd2c 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -110,7 +110,7 @@ func (a *EchoServiceApiService) EchoServiceEcho(ctx context.Context, id string) } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -252,7 +252,7 @@ func (a *EchoServiceApiService) EchoServiceEcho2(ctx context.Context, id string, } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -391,7 +391,7 @@ func (a *EchoServiceApiService) EchoServiceEcho3(ctx context.Context, id string, } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -525,7 +525,7 @@ func (a *EchoServiceApiService) EchoServiceEcho4(ctx context.Context, id string, } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -665,7 +665,7 @@ func (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, noNote str } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -765,7 +765,7 @@ func (a *EchoServiceApiService) EchoServiceEchoBody(ctx context.Context, body Ex } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -912,7 +912,7 @@ func (a *EchoServiceApiService) EchoServiceEchoDelete(ctx context.Context, local } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/echo/model_runtime_error.go b/examples/internal/clients/echo/model_rpc_status.go similarity index 84% rename from examples/internal/clients/echo/model_runtime_error.go rename to examples/internal/clients/echo/model_rpc_status.go index 836afd7ac6b..f6a4b0e21ca 100644 --- a/examples/internal/clients/echo/model_runtime_error.go +++ b/examples/internal/clients/echo/model_rpc_status.go @@ -9,8 +9,7 @@ package echo -type RuntimeError struct { - Error_ string `json:"error,omitempty"` +type RpcStatus struct { Code int32 `json:"code,omitempty"` Message string `json:"message,omitempty"` Details []ProtobufAny `json:"details,omitempty"` diff --git a/examples/internal/clients/responsebody/BUILD.bazel b/examples/internal/clients/responsebody/BUILD.bazel index 911f72d0ffd..bfa8990254a 100644 --- a/examples/internal/clients/responsebody/BUILD.bazel +++ b/examples/internal/clients/responsebody/BUILD.bazel @@ -13,7 +13,7 @@ go_library( "model_examplepb_response_body_out_response.go", "model_protobuf_any.go", "model_response_response_type.go", - "model_runtime_error.go", + "model_rpc_status.go", "model_runtime_stream_error.go", "model_stream_result_of_examplepb_response_body_out.go", "response.go", diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 9a8fd0ea52a..59d02a7a163 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -29,7 +29,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /responsebody/stream/{data}: get: tags: @@ -55,7 +55,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /responsebody/{data}: get: tags: @@ -75,7 +75,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /responsestrings/{data}: get: tags: @@ -97,7 +97,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" definitions: ResponseResponseType: type: "string" @@ -204,11 +204,9 @@ definitions: example: value: "value" type_url: "type_url" - runtimeError: + rpcStatus: type: "object" properties: - error: - type: "string" code: type: "integer" format: "int32" diff --git a/examples/internal/clients/responsebody/api_response_body_service.go b/examples/internal/clients/responsebody/api_response_body_service.go index 968077eb532..4421adfd82f 100644 --- a/examples/internal/clients/responsebody/api_response_body_service.go +++ b/examples/internal/clients/responsebody/api_response_body_service.go @@ -108,7 +108,7 @@ func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBody(ctx c } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -207,7 +207,7 @@ func (a *ResponseBodyServiceApiService) ResponseBodyServiceGetResponseBodyStream } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -306,7 +306,7 @@ func (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseBodies(ct } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -405,7 +405,7 @@ func (a *ResponseBodyServiceApiService) ResponseBodyServiceListResponseStrings(c } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/responsebody/docs/RpcStatus.md b/examples/internal/clients/responsebody/docs/RpcStatus.md new file mode 100644 index 00000000000..04bc70e31fb --- /dev/null +++ b/examples/internal/clients/responsebody/docs/RpcStatus.md @@ -0,0 +1,12 @@ +# RpcStatus + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Code** | **int32** | | [optional] [default to null] +**Message** | **string** | | [optional] [default to null] +**Details** | [**[]ProtobufAny**](protobufAny.md) | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/examples/internal/clients/responsebody/model_runtime_error.go b/examples/internal/clients/responsebody/model_rpc_status.go similarity index 87% rename from examples/internal/clients/responsebody/model_runtime_error.go rename to examples/internal/clients/responsebody/model_rpc_status.go index c23ba823000..8c0d4bdbf0c 100644 --- a/examples/internal/clients/responsebody/model_runtime_error.go +++ b/examples/internal/clients/responsebody/model_rpc_status.go @@ -9,8 +9,7 @@ package responsebody -type RuntimeError struct { - Error_ string `json:"error,omitempty"` +type RpcStatus struct { Code int32 `json:"code,omitempty"` Message string `json:"message,omitempty"` Details []ProtobufAny `json:"details,omitempty"` diff --git a/examples/internal/clients/unannotatedecho/BUILD.bazel b/examples/internal/clients/unannotatedecho/BUILD.bazel index 467850b4f91..4fc29ca5847 100644 --- a/examples/internal/clients/unannotatedecho/BUILD.bazel +++ b/examples/internal/clients/unannotatedecho/BUILD.bazel @@ -11,7 +11,7 @@ go_library( "model_examplepb_unannotated_embedded.go", "model_examplepb_unannotated_simple_message.go", "model_protobuf_any.go", - "model_runtime_error.go", + "model_rpc_status.go", "response.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/clients/unannotatedecho", diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index c821b3b1023..61b0ea7d028 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -34,7 +34,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo/{id}/{num}: get: tags: @@ -115,7 +115,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo_body: post: tags: @@ -137,7 +137,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" /v1/example/echo_delete: delete: tags: @@ -219,7 +219,7 @@ paths: default: description: "An unexpected error response" schema: - $ref: "#/definitions/runtimeError" + $ref: "#/definitions/rpcStatus" definitions: examplepbUnannotatedEmbedded: type: "object" @@ -329,11 +329,9 @@ definitions: \ custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\ \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" - runtimeError: + rpcStatus: type: "object" properties: - error: - type: "string" code: type: "integer" format: "int32" diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index 99520f0ca51..7183d28741e 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -110,7 +110,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho(ctx contex } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -257,7 +257,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx conte } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -357,7 +357,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoBody(ctx co } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() @@ -509,7 +509,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx } if localVarHttpResponse.StatusCode == 0 { - var v RuntimeError + var v RpcStatus err = a.client.decode(&v, localVarBody, localVarHttpResponse.Header.Get("Content-Type")); if err != nil { newErr.error = err.Error() diff --git a/examples/internal/clients/unannotatedecho/model_runtime_error.go b/examples/internal/clients/unannotatedecho/model_rpc_status.go similarity index 90% rename from examples/internal/clients/unannotatedecho/model_runtime_error.go rename to examples/internal/clients/unannotatedecho/model_rpc_status.go index 8518d725074..2ffb74dc75d 100644 --- a/examples/internal/clients/unannotatedecho/model_runtime_error.go +++ b/examples/internal/clients/unannotatedecho/model_rpc_status.go @@ -9,8 +9,7 @@ package unannotatedecho -type RuntimeError struct { - Error_ string `json:"error,omitempty"` +type RpcStatus struct { Code int32 `json:"code,omitempty"` Message string `json:"message,omitempty"` Details []ProtobufAny `json:"details,omitempty"` diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index f7b9d441dd4..bcc837b56f1 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -23,7 +23,9 @@ go_test( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_google_go_cmp//cmp:go_default_library", + "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index e37cd04cac9..f23f6e7e133 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -26,17 +26,12 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" "google.golang.org/protobuf/testing/protocmp" ) -type errorBody struct { - Error string `json:"error"` - Code int `json:"code"` - Details []interface{} `json:"details"` -} - func TestEcho(t *testing.T) { if testing.Short() { t.Skip() @@ -616,7 +611,7 @@ func testABEBulkCreateWithError(t *testing.T, port int) { t.Logf("%s", buf) } - var msg errorBody + var msg spb.Status if err := json.Unmarshal(buf, &msg); err != nil { t.Fatalf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) } @@ -907,19 +902,19 @@ func testABELookupNotFound(t *testing.T, port int) { return } - var msg errorBody + var msg spb.Status if err := json.Unmarshal(buf, &msg); err != nil { t.Errorf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } - if got, want := msg.Code, int(codes.NotFound); got != want { + if got, want := msg.Code, int32(codes.NotFound); got != want { t.Errorf("msg.Code = %d; want %d", got, want) return } - if got, want := msg.Error, "not found"; got != want { - t.Errorf("msg.Error = %s; want %s", got, want) + if got, want := msg.Message, "not found"; got != want { + t.Errorf("msg.Message = %s; want %s", got, want) return } @@ -1310,71 +1305,6 @@ func TestTimeout(t *testing.T) { } } -func TestErrorWithDetails(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - apiURL := "http://localhost:8088/v2/example/errorwithdetails" - resp, err := http.Get(apiURL) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) - return - } - defer resp.Body.Close() - - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - } - - if got, want := resp.StatusCode, http.StatusInternalServerError; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - } - - var msg errorBody - if err := json.Unmarshal(buf, &msg); err != nil { - t.Fatalf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) - } - - if got, want := msg.Code, int(codes.Unknown); got != want { - t.Errorf("msg.Code = %d; want %d", got, want) - } - if got, want := msg.Error, "with details"; got != want { - t.Errorf("msg.Error = %s; want %s", got, want) - } - if got, want := len(msg.Details), 1; got != want { - t.Fatalf("len(msg.Details) = %q; want %q", got, want) - } - - details, ok := msg.Details[0].(map[string]interface{}) - if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0] got type: %T, want %T", msg.Details[0], map[string]interface{}{}) - } - typ, ok := details["@type"].(string) - if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0][\"@type\"] got type: %T, want %T", typ, "") - } - if got, want := details["@type"], "type.googleapis.com/google.rpc.DebugInfo"; got != want { - t.Errorf("msg.Details[\"@type\"] = %q; want %q", got, want) - } - if got, want := details["detail"], "error debug details"; got != want { - t.Errorf("msg.Details[\"detail\"] = %q; want %q", got, want) - } - entries, ok := details["stack_entries"].([]interface{}) - if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0][\"stack_entries\"] got type: %T, want %T", entries, []string{}) - } - entry, ok := entries[0].(string) - if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0][\"stack_entries\"][0] got type: %T, want %T", entry, "") - } - if got, want := entries[0], "foo:1"; got != want { - t.Errorf("msg.Details[\"stack_entries\"][0] = %q; want %q", got, want) - } -} - func TestPostWithEmptyBody(t *testing.T) { if testing.Short() { t.Skip() diff --git a/examples/internal/integration/proto_error_test.go b/examples/internal/integration/proto_error_test.go index bc93895cf26..12a636c1a62 100644 --- a/examples/internal/integration/proto_error_test.go +++ b/examples/internal/integration/proto_error_test.go @@ -10,7 +10,9 @@ import ( "time" "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/ptypes" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "google.golang.org/genproto/googleapis/rpc/errdetails" spb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" ) @@ -62,6 +64,7 @@ func TestABEWithProtoErrorHandler(t *testing.T) { testABEBulkCreate(t, port) testABELookup(t, port) testABELookupNotFoundWithProtoError(t, port) + testABELookupNotFoundWithProtoErrorIncludingDetails(t, port) testABEList(t, port) testABEBulkEcho(t, port) testABEBulkEchoZeroLength(t, port) @@ -118,6 +121,62 @@ func testABELookupNotFoundWithProtoError(t *testing.T, port uint16) { } } +func testABELookupNotFoundWithProtoErrorIncludingDetails(t *testing.T, port uint16) { + uuid := "errorwithdetails" + url := fmt.Sprintf("http://localhost:%d/v2/example/%s", port, uuid) + resp, err := http.Get(url) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", url, err) + return + } + defer resp.Body.Close() + + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusInternalServerError; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + return + } + + var msg spb.Status + if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { + t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + return + } + + if got, want := msg.Code, int32(codes.Unknown); got != want { + t.Errorf("msg.Code = %d; want %d", got, want) + return + } + + if got, want := msg.Message, "with details"; got != want { + t.Errorf("msg.Message = %s; want %s", got, want) + return + } + + details := msg.Details + if got, want := len(details), 1; got != want { + t.Fatalf("got %q details, wanted %q", got, want) + } + + detail := errdetails.DebugInfo{} + if got, want := ptypes.UnmarshalAny(msg.Details[0], &detail), error(nil); got != want { + t.Errorf("unmarshaling any: got %q, wanted %q", got, want) + } + + if got, want := len(detail.StackEntries), 1; got != want { + t.Fatalf("got %d stack entries, expected %d", got, want) + } + if got, want := detail.StackEntries[0], "foo:1"; got != want { + t.Errorf("StackEntries[0]: got %q; want %q", got, want) + } +} + func TestUnknownPathWithProtoError(t *testing.T) { if testing.Short() { t.Skip() diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 76a818c470e..883d98f0536 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -58,7 +58,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -119,7 +119,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -170,7 +170,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -485,7 +485,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -806,7 +806,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -861,7 +861,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1197,7 +1197,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1384,7 +1384,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1440,7 +1440,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1485,7 +1485,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1540,7 +1540,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1595,7 +1595,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1831,7 +1831,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1884,7 +1884,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -1951,7 +1951,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2012,7 +2012,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2065,7 +2065,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2104,7 +2104,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2143,7 +2143,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2185,7 +2185,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2240,7 +2240,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2279,7 +2279,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2334,7 +2334,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -2783,12 +2783,9 @@ "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index 43d9b608d56..e21e5ac1361 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -27,7 +27,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -60,7 +60,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -146,7 +146,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -232,7 +232,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -312,7 +312,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -391,7 +391,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -424,7 +424,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -556,12 +556,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 1fad10c2042..31f2fc59788 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -27,7 +27,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -66,7 +66,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -96,7 +96,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -129,7 +129,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -222,12 +222,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 2d4681d6c4a..b54ec910a5e 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -33,7 +33,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -55,7 +55,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -97,7 +97,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -377,12 +377,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 1521bc4c043..854d3972cf5 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -27,7 +27,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -60,7 +60,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -151,7 +151,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -184,7 +184,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -325,12 +325,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 2c68208ce1b..0e69b428172 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -26,7 +26,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -60,7 +60,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -154,12 +154,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index 0153c9592df..2fa5a12d2b3 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -24,7 +24,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -57,7 +57,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -91,7 +91,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -125,7 +125,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -158,7 +158,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -191,7 +191,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -225,7 +225,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -259,7 +259,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -292,7 +292,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -325,7 +325,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -359,7 +359,7 @@ "default": { "description": "An unexpected error response", "schema": { - "$ref": "#/definitions/runtimeError" + "$ref": "#/definitions/rpcStatus" } } }, @@ -436,12 +436,9 @@ }, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, - "runtimeError": { + "rpcStatus": { "type": "object", "properties": { - "error": { - "type": "string" - }, "code": { "type": "integer", "format": "int32" diff --git a/internal/errors.pb.go b/internal/errors.pb.go index f8eedaeef23..5a2faa56e1d 100644 --- a/internal/errors.pb.go +++ b/internal/errors.pb.go @@ -26,81 +26,6 @@ const ( // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4 -// Error is the generic error returned from unary RPCs. -type Error struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - // This is to make the error more compatible with users that expect errors to be Status objects: - // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto - // It should be the exact same message as the Error field. - Code int32 `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - Details []*any.Any `protobuf:"bytes,4,rep,name=details,proto3" json:"details,omitempty"` -} - -func (x *Error) Reset() { - *x = Error{} - if protoimpl.UnsafeEnabled { - mi := &file_internal_errors_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Error) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Error) ProtoMessage() {} - -func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_internal_errors_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Error.ProtoReflect.Descriptor instead. -func (*Error) Descriptor() ([]byte, []int) { - return file_internal_errors_proto_rawDescGZIP(), []int{0} -} - -func (x *Error) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -func (x *Error) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Error) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *Error) GetDetails() []*any.Any { - if x != nil { - return x.Details - } - return nil -} - // StreamError is a response type which is returned when // streaming rpc returns an error. type StreamError struct { @@ -118,7 +43,7 @@ type StreamError struct { func (x *StreamError) Reset() { *x = StreamError{} if protoimpl.UnsafeEnabled { - mi := &file_internal_errors_proto_msgTypes[1] + mi := &file_internal_errors_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -131,7 +56,7 @@ func (x *StreamError) String() string { func (*StreamError) ProtoMessage() {} func (x *StreamError) ProtoReflect() protoreflect.Message { - mi := &file_internal_errors_proto_msgTypes[1] + mi := &file_internal_errors_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -144,7 +69,7 @@ func (x *StreamError) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamError.ProtoReflect.Descriptor instead. func (*StreamError) Descriptor() ([]byte, []int) { - return file_internal_errors_proto_rawDescGZIP(), []int{1} + return file_internal_errors_proto_rawDescGZIP(), []int{0} } func (x *StreamError) GetGrpcCode() int32 { @@ -189,27 +114,20 @@ var file_internal_errors_proto_rawDesc = []byte{ 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, - 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x70, 0x63, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x74, 0x74, - 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x0a, 0x5a, 0x08, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x70, 0x63, + 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x70, + 0x63, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x0a, 0x5a, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -224,20 +142,18 @@ func file_internal_errors_proto_rawDescGZIP() []byte { return file_internal_errors_proto_rawDescData } -var file_internal_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_internal_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_internal_errors_proto_goTypes = []interface{}{ - (*Error)(nil), // 0: grpc.gateway.runtime.Error - (*StreamError)(nil), // 1: grpc.gateway.runtime.StreamError - (*any.Any)(nil), // 2: google.protobuf.Any + (*StreamError)(nil), // 0: grpc.gateway.runtime.StreamError + (*any.Any)(nil), // 1: google.protobuf.Any } var file_internal_errors_proto_depIdxs = []int32{ - 2, // 0: grpc.gateway.runtime.Error.details:type_name -> google.protobuf.Any - 2, // 1: grpc.gateway.runtime.StreamError.details:type_name -> google.protobuf.Any - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 1, // 0: grpc.gateway.runtime.StreamError.details:type_name -> google.protobuf.Any + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_internal_errors_proto_init() } @@ -247,18 +163,6 @@ func file_internal_errors_proto_init() { } if !protoimpl.UnsafeEnabled { file_internal_errors_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Error); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_internal_errors_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamError); i { case 0: return &v.state @@ -277,7 +181,7 @@ func file_internal_errors_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_internal_errors_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 1, NumExtensions: 0, NumServices: 0, }, diff --git a/internal/errors.proto b/internal/errors.proto index 4fb212c6b69..55f42ce63ec 100644 --- a/internal/errors.proto +++ b/internal/errors.proto @@ -4,17 +4,6 @@ option go_package = "internal"; import "google/protobuf/any.proto"; -// Error is the generic error returned from unary RPCs. -message Error { - string error = 1; - // This is to make the error more compatible with users that expect errors to be Status objects: - // https://github.com/grpc/grpc/blob/master/src/proto/grpc/status/status.proto - // It should be the exact same message as the Error field. - int32 code = 2; - string message = 3; - repeated google.protobuf.Any details = 4; -} - // StreamError is a response type which is returned when // streaming rpc returns an error. message StreamError { diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 534cc688a30..e2b2e447a8b 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/genswagger/generator.go index 8203d64c318..bb1fc5ae391 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/genswagger/generator.go @@ -19,6 +19,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" + spb "google.golang.org/genproto/googleapis/rpc/status" ) var ( @@ -217,20 +218,20 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato return files, nil } -//AddStreamError Adds grpc.gateway.runtime.StreamError and google.protobuf.Any to registry for stream responses -func AddStreamError(reg *descriptor.Registry) error { - //load internal protos +// AddErrorDefs Adds grpc.gateway.runtime.StreamError, google.rpc.Status, and google.protobuf.Any +// to registry (used for error-related API responses) +func AddErrorDefs(reg *descriptor.Registry) error { + // load internal protos any := fileDescriptorProtoForMessage(&any.Any{}) + status := fileDescriptorProtoForMessage(&spb.Status{}) streamError := fileDescriptorProtoForMessage(&internal.StreamError{}) - if err := reg.Load(&plugin.CodeGeneratorRequest{ + return reg.Load(&plugin.CodeGeneratorRequest{ ProtoFile: []*protocdescriptor.FileDescriptorProto{ any, + status, streamError, }, - }); err != nil { - return err - } - return nil + }) } func fileDescriptorProtoForMessage(msg pbdescriptor.Message) *protocdescriptor.FileDescriptorProto { diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index e67ab923bed..712c2e0657d 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -963,7 +963,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, } if !reg.GetDisableDefaultErrors() { - errDef, hasErrDef := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.Error", reg) + errDef, hasErrDef := fullyQualifiedNameToSwaggerName(".google.rpc.Status", reg) if hasErrDef { // https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#responses-object operationObject.Responses["default"] = swaggerResponseObject{ @@ -1139,7 +1139,7 @@ func applyTemplate(p param) (*swaggerObject, error) { if !p.reg.GetDisableDefaultErrors() { // Add the error type to the message map - runtimeError, swgRef, err := lookupMsgAndSwaggerName(".grpc.gateway.runtime", "Error", p.reg) + runtimeError, swgRef, err := lookupMsgAndSwaggerName("google.rpc", "Status", p.reg) if err == nil { messages[swgRef] = runtimeError } else { diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index a80b1fdbe26..3636abf2b65 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -572,6 +572,10 @@ func TestApplyTemplateSimple(t *testing.T) { }, } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } fileCL := crossLinkFixture(&file) err := reg.Load(reqFromFile(fileCL)) if err != nil { @@ -690,6 +694,10 @@ func TestApplyTemplateMultiService(t *testing.T) { }, } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } fileCL := crossLinkFixture(&file) err := reg.Load(reqFromFile(fileCL)) if err != nil { @@ -782,6 +790,10 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } fileCL := crossLinkFixture(&file) err := reg.Load(reqFromFile(fileCL)) if err != nil { @@ -903,6 +915,10 @@ func TestApplyTemplateExtensions(t *testing.T) { t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } fileCL := crossLinkFixture(&file) err := reg.Load(reqFromFile(fileCL)) if err != nil { @@ -1084,6 +1100,10 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { }, } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { @@ -1238,8 +1258,8 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { }, } reg := descriptor.NewRegistry() - if err := AddStreamError(reg); err != nil { - t.Errorf("AddStreamError(%#v) failed with %v; want success", reg, err) + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) @@ -1398,6 +1418,10 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { } reg := descriptor.NewRegistry() + if err := AddErrorDefs(reg); err != nil { + t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) + return + } reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { @@ -1405,8 +1429,8 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { return } - // Only EmptyMessage must be present, not ExampleMessage - if want, got, name := 1, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + // Only EmptyMessage must be present, not ExampleMessage (plus error status) + if want, got, name := 3, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) } diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 63270d490d4..2d6c8da6c9f 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -103,7 +103,7 @@ func main() { g := genswagger.New(reg) - if err := genswagger.AddStreamError(reg); err != nil { + if err := genswagger.AddErrorDefs(reg); err != nil { emitError(err) return } diff --git a/runtime/errors.go b/runtime/errors.go index c95e4264bc4..58c80eec857 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -5,7 +5,6 @@ import ( "io" "net/http" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" @@ -108,14 +107,12 @@ func MuxOrGlobalHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshale // If otherwise, it replies with http.StatusInternalServerError. // // The response body returned by this function is a JSON object, -// which contains a member whose key is "error" and whose value is err.Error(). +// which contains a member whose key is "message" and whose value is err.Error(). func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { const fallback = `{"error": "failed to marshal error message"}` - s, ok := status.FromError(err) - if !ok { - s = status.New(codes.Unknown, err.Error()) - } + s := status.Convert(err) + pb := s.Proto() w.Header().Del("Trailer") @@ -124,21 +121,13 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { - pb := s.Proto() contentType = typeMarshaler.ContentTypeFromMessage(pb) } w.Header().Set("Content-Type", contentType) - body := &internal.Error{ - Error: s.Message(), - Message: s.Message(), - Code: int32(s.Code()), - Details: s.Proto().GetDetails(), - } - - buf, merr := marshaler.Marshal(body) + buf, merr := marshaler.Marshal(pb) if merr != nil { - grpclog.Infof("Failed to marshal error message %q: %v", body, merr) + grpclog.Infof("Failed to marshal error message %q: %v", s, merr) w.WriteHeader(http.StatusInternalServerError) if _, err := io.WriteString(w, fallback); err != nil { grpclog.Infof("Failed to write response: %v", err) diff --git a/runtime/errors_test.go b/runtime/errors_test.go index afd289aebac..83ec1666a03 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -77,9 +77,6 @@ func TestDefaultHTTPError(t *testing.T) { continue } - if got, want := body["error"].(string), spec.msg; !strings.Contains(got, want) { - t.Errorf(`body["error"] = %q; want %q; on spec.err=%v`, got, want, spec.err) - } if got, want := body["message"].(string), spec.msg; !strings.Contains(got, want) { t.Errorf(`body["message"] = %q; want %q; on spec.err=%v`, got, want, spec.err) } From 6dc78d077172c6fbce11611cd01a2e18efb893df Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 16:53:05 +0100 Subject: [PATCH 0325/1518] Move to using github docker registry for build environment This reduces the bus factor by moving control to the repo and away from my personal docker hub account. --- .circleci/README.md | 5 ++--- .circleci/config.yml | 35 ++++++++++++++++++++++++++++------- CONTRIBUTING.md | 5 ++++- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.circleci/README.md b/.circleci/README.md index 5fe0b18c863..e1d8ce09563 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -7,7 +7,7 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. Great, it should be as simple as thus (run from the root of the directory): ```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ +$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 \ /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ make realclean && \ make examples' @@ -18,5 +18,4 @@ If this has resulted in some file changes in the repo, please ensure you check t ### Whats up with the Dockerfile? The `Dockerfile` in this folder is used as the build environment when regenerating the files (see above). -The canonical repository for this Dockerfile is `jfbrandhorst/grpc-gateway-build-env`. Please request access -before attempting to make any changes to the Dockerfile. +The canonical repository for this Dockerfile is `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. diff --git a/.circleci/config.yml b/.circleci/config.yml index c5529e0a622..8609918ccb8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,20 @@ version: 2 jobs: build: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway environment: GLOG_logtostderr: '1' @@ -19,7 +25,10 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -32,7 +41,10 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -43,7 +55,10 @@ jobs: - run: git diff --exit-code lint: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -88,7 +103,10 @@ jobs: when: always gorelease: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -101,7 +119,10 @@ jobs: - run: gorelease release: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e65225089f5..b635e39cf36 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,7 +25,7 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ +docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples && \ @@ -36,6 +36,9 @@ docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --r l.gcr.io/google/bazel -c 'bazel run :gazelle' ``` +You may need to authenticate with github to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. +You can do this by following the steps on the [Github Package docs](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages). + If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. ### Making a release From 3224275ec68bc5fe77f8ba8d365b7894e9896927 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 16:54:13 +0100 Subject: [PATCH 0326/1518] Combine bazel regeneration commands --- CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b635e39cf36..ebb63091104 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,9 +31,10 @@ docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem make examples && \ make testproto' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' -docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle' + l.gcr.io/google/bazel -c '\ + bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \ + bazel run :gazelle && \ + bazel run :buildifier' ``` You may need to authenticate with github to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. From 6219289eace970bf97fd0aa2abd9fd0def0aa2a7 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 16:53:05 +0100 Subject: [PATCH 0327/1518] Move to using github docker registry for build environment This reduces the bus factor by moving control to the repo and away from my personal docker hub account. --- .circleci/README.md | 5 ++--- .circleci/config.yml | 35 ++++++++++++++++++++++++++++------- CONTRIBUTING.md | 5 ++++- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.circleci/README.md b/.circleci/README.md index 0ab8a75e254..1338f0078a6 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -4,6 +4,5 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. ### Whats up with the Dockerfile? -The `Dockerfile` in this folder is used as the build environment when regenerating the files (see above). -The canonical repository for this Dockerfile is `jfbrandhorst/grpc-gateway-build-env`. Please request access -before attempting to make any changes to the Dockerfile. +The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md). +The canonical repository for this Dockerfile is `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. diff --git a/.circleci/config.yml b/.circleci/config.yml index ff4c8c31eea..2305a270239 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,14 +2,20 @@ version: 2 jobs: build: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway environment: GLOG_logtostderr: '1' @@ -19,7 +25,10 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -32,7 +41,10 @@ jobs: ./node_modules/.bin/gulp generate: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -43,7 +55,10 @@ jobs: - run: git diff --exit-code lint: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -88,7 +103,10 @@ jobs: when: always gorelease: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout @@ -101,7 +119,10 @@ jobs: - run: gorelease -base=v2.0.0-alpha.2 release: docker: - - image: jfbrandhorst/grpc-gateway-build-env:1.14 + - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 + auth: + username: $GITHUB_USER + password: $GITHUB_TOKEN working_directory: /src/grpc-gateway steps: - checkout diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e65225089f5..b635e39cf36 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,7 +25,7 @@ All submissions, including submissions by project members, require review. Great, it should be as simple as thus (run from the root of the directory): ```bash -docker run -v $(pwd):/src/grpc-gateway --rm jfbrandhorst/grpc-gateway-build-env:1.14 \ +docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 \ /bin/bash -c 'cd /src/grpc-gateway && \ make realclean && \ make examples && \ @@ -36,6 +36,9 @@ docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --r l.gcr.io/google/bazel -c 'bazel run :gazelle' ``` +You may need to authenticate with github to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. +You can do this by following the steps on the [Github Package docs](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages). + If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. ### Making a release From ed092bea2476276447de44ad03637f58429a7d94 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 16:54:13 +0100 Subject: [PATCH 0328/1518] Combine bazel regeneration commands --- CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b635e39cf36..ebb63091104 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,9 +31,10 @@ docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem make examples && \ make testproto' docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories; bazel run :buildifier' -docker run -itv $(pwd):/grpc-gateway -w /grpc-gateway --entrypoint /bin/bash --rm \ - l.gcr.io/google/bazel -c 'bazel run :gazelle' + l.gcr.io/google/bazel -c '\ + bazel run :gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && \ + bazel run :gazelle && \ + bazel run :buildifier' ``` You may need to authenticate with github to pull `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. From ca26f77698d42b7560239ec72e1c9e8c7b0e882e Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 17:28:32 +0100 Subject: [PATCH 0329/1518] Remove duplicate regeneration documentation This is all in CONTRIBUTING.md now. --- .circleci/README.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/.circleci/README.md b/.circleci/README.md index e1d8ce09563..1338f0078a6 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -2,20 +2,7 @@ Contained within is the CI test setup for the Gateway. It runs on Circle CI. -### I want to regenerate the files after making changes! - -Great, it should be as simple as thus (run from the root of the directory): - -```bash -$ docker run -v $(pwd):/go/src/github.com/grpc-ecosystem/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 \ - /bin/bash -c 'cd /go/src/github.com/grpc-ecosystem/grpc-gateway && \ - make realclean && \ - make examples' -``` - -If this has resulted in some file changes in the repo, please ensure you check those in with your merge request. - ### Whats up with the Dockerfile? -The `Dockerfile` in this folder is used as the build environment when regenerating the files (see above). +The `Dockerfile` in this folder is used as the build environment when regenerating the files (see CONTRIBUTING.md). The canonical repository for this Dockerfile is `docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env`. From f75e6a762b985029232b7e7c18b8c29108484d7f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 28 Apr 2020 20:56:50 +0100 Subject: [PATCH 0330/1518] Minimize public API As previously attempted on v1, so it shall be on v2. We want to minimize the public API surface to more easily allow changes that won't break users. --- Makefile | 66 +++++++++---------- examples/internal/helloworld/BUILD.bazel | 2 +- .../internal/helloworld/helloworld.pb.gw.go | 2 +- examples/internal/proto/examplepb/BUILD.bazel | 2 +- .../examplepb/a_bit_of_everything.pb.gw.go | 2 +- .../proto/examplepb/echo_service.pb.gw.go | 2 +- .../proto/examplepb/flow_combination.pb.gw.go | 2 +- .../examplepb/non_standard_names.pb.gw.go | 2 +- .../examplepb/response_body_service.pb.gw.go | 2 +- .../internal/proto/examplepb/stream.pb.gw.go | 2 +- .../unannotated_echo_service.pb.gw.go | 2 +- .../proto/examplepb/use_go_template.pb.gw.go | 2 +- .../proto/examplepb/wrappers.pb.gw.go | 2 +- .../internal/proto/standalone/BUILD.bazel | 2 +- .../unannotated_echo_service.pb.gw.go | 2 +- fuzzit.sh | 4 +- go.mod | 1 + go.sum | 3 + .../codegenerator}/BUILD.bazel | 2 +- .../codegenerator}/doc.go | 0 .../codegenerator}/parse_req.go | 0 .../codegenerator}/parse_req_test.go | 2 +- .../descriptor/BUILD.bazel | 6 +- .../descriptor/grpc_api_configuration.go | 0 .../descriptor/grpc_api_configuration_test.go | 0 .../descriptor/grpc_api_service.go | 0 .../descriptor/registry.go | 0 .../descriptor/registry_test.go | 0 .../descriptor/services.go | 2 +- .../descriptor/services_test.go | 2 +- .../descriptor/types.go | 2 +- .../descriptor/types_test.go | 0 .../generator/BUILD.bazel | 4 +- .../generator/generator.go | 2 +- .../httprule/BUILD.bazel | 6 +- .../httprule/compile.go | 2 +- .../httprule/compile_test.go | 2 +- .../httprule/fuzz.go | 0 .../httprule/parse.go | 0 .../httprule/parse_test.go | 0 .../httprule/types.go | 0 .../httprule/types_test.go | 0 {utilities => internal/utilities}/BUILD.bazel | 2 +- {utilities => internal/utilities}/doc.go | 0 {utilities => internal/utilities}/pattern.go | 0 .../utilities}/readerfactory.go | 0 {utilities => internal/utilities}/trie.go | 0 .../utilities}/trie_test.go | 2 +- protoc-gen-grpc-gateway/BUILD.bazel | 6 +- .../internal/gengateway/BUILD.bazel | 10 +-- .../internal/gengateway/generator.go | 6 +- .../internal/gengateway/generator_test.go | 2 +- .../internal/gengateway/template.go | 4 +- .../internal/gengateway/template_test.go | 4 +- protoc-gen-grpc-gateway/main.go | 4 +- protoc-gen-swagger/BUILD.bazel | 6 +- .../{ => internal}/genswagger/BUILD.bazel | 10 +-- .../{ => internal}/genswagger/doc.go | 0 .../{ => internal}/genswagger/generator.go | 4 +- .../{ => internal}/genswagger/helpers.go | 0 .../genswagger/helpers_go111_old.go | 0 .../{ => internal}/genswagger/template.go | 2 +- .../genswagger/template_test.go | 4 +- .../{ => internal}/genswagger/types.go | 2 +- protoc-gen-swagger/main.go | 6 +- repositories.bzl | 4 +- runtime/BUILD.bazel | 4 +- runtime/mux_test.go | 2 +- runtime/pattern.go | 2 +- runtime/pattern_test.go | 2 +- runtime/query.go | 2 +- runtime/query_test.go | 2 +- 72 files changed, 115 insertions(+), 111 deletions(-) rename {codegenerator => internal/codegenerator}/BUILD.bazel (90%) rename {codegenerator => internal/codegenerator}/doc.go (100%) rename {codegenerator => internal/codegenerator}/parse_req.go (100%) rename {codegenerator => internal/codegenerator}/parse_req_test.go (95%) rename {protoc-gen-grpc-gateway => internal}/descriptor/BUILD.bazel (85%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_configuration.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_configuration_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/grpc_api_service.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/registry.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/registry_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/descriptor/services.go (99%) rename {protoc-gen-grpc-gateway => internal}/descriptor/services_test.go (99%) rename {protoc-gen-grpc-gateway => internal}/descriptor/types.go (99%) rename {protoc-gen-grpc-gateway => internal}/descriptor/types_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/generator/BUILD.bazel (62%) rename {protoc-gen-grpc-gateway => internal}/generator/generator.go (82%) rename {protoc-gen-grpc-gateway => internal}/httprule/BUILD.bazel (76%) rename {protoc-gen-grpc-gateway => internal}/httprule/compile.go (97%) rename {protoc-gen-grpc-gateway => internal}/httprule/compile_test.go (97%) rename {protoc-gen-grpc-gateway => internal}/httprule/fuzz.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/parse.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/parse_test.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/types.go (100%) rename {protoc-gen-grpc-gateway => internal}/httprule/types_test.go (100%) rename {utilities => internal/utilities}/BUILD.bazel (83%) rename {utilities => internal/utilities}/doc.go (100%) rename {utilities => internal/utilities}/pattern.go (100%) rename {utilities => internal/utilities}/readerfactory.go (100%) rename {utilities => internal/utilities}/trie.go (100%) rename {utilities => internal/utilities}/trie_test.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/BUILD.bazel (84%) rename protoc-gen-swagger/{ => internal}/genswagger/doc.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/generator.go (97%) rename protoc-gen-swagger/{ => internal}/genswagger/helpers.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/helpers_go111_old.go (100%) rename protoc-gen-swagger/{ => internal}/genswagger/template.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/template_test.go (99%) rename protoc-gen-swagger/{ => internal}/genswagger/types.go (99%) diff --git a/Makefile b/Makefile index 8bfb0e46148..3fd1777f54d 100644 --- a/Makefile +++ b/Makefile @@ -8,36 +8,36 @@ GO_PROTOBUF_REPO=github.com/golang/protobuf GO_PLUGIN_PKG=$(GO_PROTOBUF_REPO)/protoc-gen-go GO_PTYPES_ANY_PKG=$(GO_PROTOBUF_REPO)/ptypes/any SWAGGER_PLUGIN=bin/protoc-gen-swagger -SWAGGER_PLUGIN_SRC= utilities/doc.go \ - utilities/pattern.go \ - utilities/trie.go \ - protoc-gen-swagger/genswagger/generator.go \ - protoc-gen-swagger/genswagger/template.go \ - protoc-gen-swagger/main.go +SWAGGER_PLUGIN_SRC= ./internal/utilities/doc.go \ + ./internal/utilities/pattern.go \ + ./internal/utilities/trie.go \ + protoc-gen-swagger/internal/genswagger/generator.go \ + protoc-gen-swagger/internal/genswagger/template.go \ + protoc-gen-swagger/main.go SWAGGER_PLUGIN_PKG=./protoc-gen-swagger GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway GATEWAY_PLUGIN_PKG=./protoc-gen-grpc-gateway -GATEWAY_PLUGIN_SRC= utilities/doc.go \ - utilities/pattern.go \ - utilities/trie.go \ - protoc-gen-grpc-gateway \ - protoc-gen-grpc-gateway/descriptor \ - protoc-gen-grpc-gateway/descriptor/registry.go \ - protoc-gen-grpc-gateway/descriptor/services.go \ - protoc-gen-grpc-gateway/descriptor/types.go \ - protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go \ - protoc-gen-grpc-gateway/descriptor/grpc_api_service.go \ - protoc-gen-grpc-gateway/generator \ - protoc-gen-grpc-gateway/generator/generator.go \ - protoc-gen-grpc-gateway/internal/gengateway \ - protoc-gen-grpc-gateway/internal/gengateway/doc.go \ - protoc-gen-grpc-gateway/internal/gengateway/generator.go \ - protoc-gen-grpc-gateway/internal/gengateway/template.go \ - protoc-gen-grpc-gateway/httprule \ - protoc-gen-grpc-gateway/httprule/compile.go \ - protoc-gen-grpc-gateway/httprule/parse.go \ - protoc-gen-grpc-gateway/httprule/types.go \ - protoc-gen-grpc-gateway/main.go +GATEWAY_PLUGIN_SRC= ./internal/utilities/doc.go \ + ./internal/utilities/pattern.go \ + ./internal/utilities/trie.go \ + ./internal/descriptor \ + ./internal/descriptor/registry.go \ + ./internal/descriptor/services.go \ + ./internal/descriptor/types.go \ + ./internal/descriptor/grpc_api_configuration.go \ + ./internal/descriptor/grpc_api_service.go \ + ./internal/generator \ + ./internal/generator/generator.go \ + protoc-gen-grpc-gateway \ + protoc-gen-grpc-gateway/internal/gengateway \ + protoc-gen-grpc-gateway/internal/gengateway/doc.go \ + protoc-gen-grpc-gateway/internal/gengateway/generator.go \ + protoc-gen-grpc-gateway/internal/gengateway/template.go \ + internal/httprule \ + internal/httprule/compile.go \ + internal/httprule/parse.go \ + internal/httprule/types.go \ + protoc-gen-grpc-gateway/main.go GATEWAY_PLUGIN_FLAGS?= SWAGGER_PLUGIN_FLAGS?= @@ -194,22 +194,22 @@ $(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ - -l go -o examples/internal/clients/echo --additional-properties packageName=echo + -l go -o examples/internal/clients/echo --additional-properties packageName=echo @rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \ $(EXAMPLE_CLIENT_DIR)/echo/git_push.sh $(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \ - -l go -o examples/internal/clients/abe --additional-properties packageName=abe + -l go -o examples/internal/clients/abe --additional-properties packageName=abe @rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \ $(EXAMPLE_CLIENT_DIR)/abe/git_push.sh $(UNANNOTATED_ECHO_EXAMPLE_SRCS): $(UNANNOTATED_ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(UNANNOTATED_ECHO_EXAMPLE_SPEC) \ - -l go -o examples/internal/clients/unannotatedecho --additional-properties packageName=unannotatedecho + -l go -o examples/internal/clients/unannotatedecho --additional-properties packageName=unannotatedecho @rm -f $(EXAMPLE_CLIENT_DIR)/unannotatedecho/README.md \ $(EXAMPLE_CLIENT_DIR)/unannotatedecho/git_push.sh $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(RESPONSE_BODY_EXAMPLE_SPEC) \ - -l go -o examples/internal/clients/responsebody --additional-properties packageName=responsebody + -l go -o examples/internal/clients/responsebody --additional-properties packageName=responsebody @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh @@ -234,11 +234,11 @@ changelog: --future-release=v1.14.4 lint: golint --set_exit_status ./runtime - golint --set_exit_status ./utilities/... + golint --set_exit_status ././internal/utilities/... golint --set_exit_status ./protoc-gen-grpc-gateway/... golint --set_exit_status ./protoc-gen-swagger/... go vet ./runtime || true - go vet ./utilities/... + go vet ././internal/utilities/... go vet ./protoc-gen-grpc-gateway/... go vet ./protoc-gen-swagger/... diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index c389c3b0a98..0ae7affc43e 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -28,8 +28,8 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld", visibility = ["//visibility:public"], deps = [ + "//internal/utilities:go_default_library", "//runtime:go_default_library", - "//utilities:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 95610308f77..1b3f5f3fe96 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index 199454cbb06..ad808e9525c 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -76,8 +76,8 @@ go_library( embed = [":examplepb_go_proto"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", deps = [ + "//internal/utilities:go_default_library", "//runtime:go_default_library", - "//utilities:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 1411db2c963..e3323be04c8 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -19,8 +19,8 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index d467c0d4986..f8565564d5a 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index c876352a770..728b3207211 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 8db9cd2524f..47f52be92a0 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 6da76968937..52480625cad 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 26b49643961..66500a5818c 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -17,8 +17,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 929fa6a3199..770c4f6e8da 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index dc561fb2d27..cda68521f19 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -15,8 +15,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 7aa1045b625..722174ae3f8 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -17,8 +17,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/examples/internal/proto/standalone/BUILD.bazel b/examples/internal/proto/standalone/BUILD.bazel index a5c303f02e7..e1dbc0835fa 100644 --- a/examples/internal/proto/standalone/BUILD.bazel +++ b/examples/internal/proto/standalone/BUILD.bazel @@ -7,8 +7,8 @@ go_library( visibility = ["//examples:__subpackages__"], deps = [ "//examples/internal/proto/examplepb:go_default_library", + "//internal/utilities:go_default_library", "//runtime:go_default_library", - "//utilities:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index acd19da52f7..34d5d39c073 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -16,8 +16,8 @@ import ( "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" extExamplepb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" diff --git a/fuzzit.sh b/fuzzit.sh index e5df5f3f843..43c0f23918b 100755 --- a/fuzzit.sh +++ b/fuzzit.sh @@ -9,9 +9,9 @@ cd go-fuzz go get ./... go build ./... -#go get -v -u ./protoc-gen-grpc-gateway/httprule +#go get -v -u ./internal/httprule cd /src/grpc-gateway -go-fuzz-build -libfuzzer -o parse-http-rule.a ./protoc-gen-grpc-gateway/httprule +go-fuzz-build -libfuzzer -o parse-http-rule.a ./internal/httprule clang-9 -fsanitize=fuzzer parse-http-rule.a -o parse-http-rule wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.29/fuzzit_Linux_x86_64 diff --git a/go.mod b/go.mod index a8497875276..ca9f273fa5c 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be + golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c google.golang.org/grpc v1.27.1 google.golang.org/protobuf v1.21.0 diff --git a/go.sum b/go.sum index c5bd3afd4b5..3a45774ec19 100644 --- a/go.sum +++ b/go.sum @@ -29,6 +29,7 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -47,6 +48,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 h1:R8bzl0244nw47n1xKs1MUMAaTNgjavKcN/aX2Ss3+Fo= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel similarity index 90% rename from codegenerator/BUILD.bazel rename to internal/codegenerator/BUILD.bazel index df1beb39ab7..9d0aa3741f1 100644 --- a/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -8,7 +8,7 @@ go_library( "doc.go", "parse_req.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator", deps = [ "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/codegenerator/doc.go b/internal/codegenerator/doc.go similarity index 100% rename from codegenerator/doc.go rename to internal/codegenerator/doc.go diff --git a/codegenerator/parse_req.go b/internal/codegenerator/parse_req.go similarity index 100% rename from codegenerator/parse_req.go rename to internal/codegenerator/parse_req.go diff --git a/codegenerator/parse_req_test.go b/internal/codegenerator/parse_req_test.go similarity index 95% rename from codegenerator/parse_req_test.go rename to internal/codegenerator/parse_req_test.go index a75b64a4771..c2eb9e757ed 100644 --- a/codegenerator/parse_req_test.go +++ b/internal/codegenerator/parse_req_test.go @@ -11,7 +11,7 @@ import ( "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/google/go-cmp/cmp" - "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "google.golang.org/protobuf/testing/protocmp" ) diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel similarity index 85% rename from protoc-gen-grpc-gateway/descriptor/BUILD.bazel rename to internal/descriptor/BUILD.bazel index 433ce26bb4e..aab8c6527a7 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -11,9 +11,9 @@ go_library( "services.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor", deps = [ - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", @@ -36,7 +36,7 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go rename to internal/descriptor/grpc_api_configuration.go diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_configuration_test.go rename to internal/descriptor/grpc_api_configuration_test.go diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_service.go b/internal/descriptor/grpc_api_service.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/grpc_api_service.go rename to internal/descriptor/grpc_api_service.go diff --git a/protoc-gen-grpc-gateway/descriptor/registry.go b/internal/descriptor/registry.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/registry.go rename to internal/descriptor/registry.go diff --git a/protoc-gen-grpc-gateway/descriptor/registry_test.go b/internal/descriptor/registry_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/registry_test.go rename to internal/descriptor/registry_test.go diff --git a/protoc-gen-grpc-gateway/descriptor/services.go b/internal/descriptor/services.go similarity index 99% rename from protoc-gen-grpc-gateway/descriptor/services.go rename to internal/descriptor/services.go index 1e7e4a58f1a..b85e6d47922 100644 --- a/protoc-gen-grpc-gateway/descriptor/services.go +++ b/internal/descriptor/services.go @@ -7,7 +7,7 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" options "google.golang.org/genproto/googleapis/api/annotations" ) diff --git a/protoc-gen-grpc-gateway/descriptor/services_test.go b/internal/descriptor/services_test.go similarity index 99% rename from protoc-gen-grpc-gateway/descriptor/services_test.go rename to internal/descriptor/services_test.go index 18915aba853..bc984aae966 100644 --- a/protoc-gen-grpc-gateway/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/proto" descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" ) func compilePath(t *testing.T, path string) httprule.Template { diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/internal/descriptor/types.go similarity index 99% rename from protoc-gen-grpc-gateway/descriptor/types.go rename to internal/descriptor/types.go index a0676e55965..c7c1baa2316 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/internal/descriptor/types.go @@ -6,7 +6,7 @@ import ( "github.com/golang/protobuf/protoc-gen-go/descriptor" gogen "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" ) // IsWellKnownType returns true if the provided fully qualified type name is considered 'well-known'. diff --git a/protoc-gen-grpc-gateway/descriptor/types_test.go b/internal/descriptor/types_test.go similarity index 100% rename from protoc-gen-grpc-gateway/descriptor/types_test.go rename to internal/descriptor/types_test.go diff --git a/protoc-gen-grpc-gateway/generator/BUILD.bazel b/internal/generator/BUILD.bazel similarity index 62% rename from protoc-gen-grpc-gateway/generator/BUILD.bazel rename to internal/generator/BUILD.bazel index 4c6864ab0e7..d1d3c9a0281 100644 --- a/protoc-gen-grpc-gateway/generator/BUILD.bazel +++ b/internal/generator/BUILD.bazel @@ -5,9 +5,9 @@ package(default_visibility = ["//visibility:public"]) go_library( name = "go_default_library", srcs = ["generator.go"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator", deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//internal/descriptor:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/generator/generator.go b/internal/generator/generator.go similarity index 82% rename from protoc-gen-grpc-gateway/generator/generator.go rename to internal/generator/generator.go index c927ec692fc..21255eaa95b 100644 --- a/protoc-gen-grpc-gateway/generator/generator.go +++ b/internal/generator/generator.go @@ -3,7 +3,7 @@ package generator import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" ) // Generator is an abstraction of code generators. diff --git a/protoc-gen-grpc-gateway/httprule/BUILD.bazel b/internal/httprule/BUILD.bazel similarity index 76% rename from protoc-gen-grpc-gateway/httprule/BUILD.bazel rename to internal/httprule/BUILD.bazel index df87e3bd87c..5fda2f0a60a 100644 --- a/protoc-gen-grpc-gateway/httprule/BUILD.bazel +++ b/internal/httprule/BUILD.bazel @@ -9,9 +9,9 @@ go_library( "parse.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule", deps = [ - "//utilities:go_default_library", + "//internal/utilities:go_default_library", "@com_github_golang_glog//:go_default_library", ], ) @@ -26,7 +26,7 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//utilities:go_default_library", + "//internal/utilities:go_default_library", "@com_github_golang_glog//:go_default_library", ], ) diff --git a/protoc-gen-grpc-gateway/httprule/compile.go b/internal/httprule/compile.go similarity index 97% rename from protoc-gen-grpc-gateway/httprule/compile.go rename to internal/httprule/compile.go index 162319d3f3b..1a4a9ed1e53 100644 --- a/protoc-gen-grpc-gateway/httprule/compile.go +++ b/internal/httprule/compile.go @@ -1,7 +1,7 @@ package httprule import ( - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) const ( diff --git a/protoc-gen-grpc-gateway/httprule/compile_test.go b/internal/httprule/compile_test.go similarity index 97% rename from protoc-gen-grpc-gateway/httprule/compile_test.go rename to internal/httprule/compile_test.go index 2996b99e613..6ab50edac84 100644 --- a/protoc-gen-grpc-gateway/httprule/compile_test.go +++ b/internal/httprule/compile_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) const ( diff --git a/protoc-gen-grpc-gateway/httprule/fuzz.go b/internal/httprule/fuzz.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/fuzz.go rename to internal/httprule/fuzz.go diff --git a/protoc-gen-grpc-gateway/httprule/parse.go b/internal/httprule/parse.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/parse.go rename to internal/httprule/parse.go diff --git a/protoc-gen-grpc-gateway/httprule/parse_test.go b/internal/httprule/parse_test.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/parse_test.go rename to internal/httprule/parse_test.go diff --git a/protoc-gen-grpc-gateway/httprule/types.go b/internal/httprule/types.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/types.go rename to internal/httprule/types.go diff --git a/protoc-gen-grpc-gateway/httprule/types_test.go b/internal/httprule/types_test.go similarity index 100% rename from protoc-gen-grpc-gateway/httprule/types_test.go rename to internal/httprule/types_test.go diff --git a/utilities/BUILD.bazel b/internal/utilities/BUILD.bazel similarity index 83% rename from utilities/BUILD.bazel rename to internal/utilities/BUILD.bazel index 6bb7df467fb..1a6d50e339a 100644 --- a/utilities/BUILD.bazel +++ b/internal/utilities/BUILD.bazel @@ -10,7 +10,7 @@ go_library( "readerfactory.go", "trie.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/utilities", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities", ) go_test( diff --git a/utilities/doc.go b/internal/utilities/doc.go similarity index 100% rename from utilities/doc.go rename to internal/utilities/doc.go diff --git a/utilities/pattern.go b/internal/utilities/pattern.go similarity index 100% rename from utilities/pattern.go rename to internal/utilities/pattern.go diff --git a/utilities/readerfactory.go b/internal/utilities/readerfactory.go similarity index 100% rename from utilities/readerfactory.go rename to internal/utilities/readerfactory.go diff --git a/utilities/trie.go b/internal/utilities/trie.go similarity index 100% rename from utilities/trie.go rename to internal/utilities/trie.go diff --git a/utilities/trie_test.go b/internal/utilities/trie_test.go similarity index 99% rename from utilities/trie_test.go rename to internal/utilities/trie_test.go index 615aafb2458..4e219e1b0ed 100644 --- a/utilities/trie_test.go +++ b/internal/utilities/trie_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) func TestMaxCommonPrefix(t *testing.T) { diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index e39d75d3844..09851518641 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -8,8 +8,8 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway", deps = [ - "//codegenerator:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", + "//internal/codegenerator:go_default_library", + "//internal/descriptor:go_default_library", "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", @@ -33,8 +33,8 @@ go_proto_compiler( suffix = ".pb.gw.go", visibility = ["//visibility:public"], deps = [ + "//internal/utilities:go_default_library", "//runtime:go_default_library", - "//utilities:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 3c5d722ca87..94f59180769 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -11,9 +11,9 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway", deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/generator:go_default_library", - "//utilities:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/generator:go_default_library", + "//internal/utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", @@ -30,8 +30,8 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/httprule:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", ], diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 44f1e6e9507..16d2513a557 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -11,8 +11,8 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" ) var ( @@ -45,7 +45,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p "io", "net/http", "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities", + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities", "github.com/golang/protobuf/descriptor", "github.com/golang/protobuf/proto", "google.golang.org/grpc", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index d54bd03e399..0d36ff9af19 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -7,7 +7,7 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" ) func newExampleFileDescriptor() *descriptor.File { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index beb7475cfd5..4b6614e9fc6 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -9,8 +9,8 @@ import ( "github.com/golang/glog" generator2 "github.com/golang/protobuf/protoc-gen-go/generator" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) type param struct { diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 8c07e83b4a4..281fe93690b 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -6,8 +6,8 @@ import ( "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index dfa392d6193..5d7a4018410 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -17,8 +17,8 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway" ) diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index 2b5b97efbb8..f6f93625f2e 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -7,9 +7,9 @@ go_library( srcs = ["main.go"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger", deps = [ - "//codegenerator:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-swagger/genswagger:go_default_library", + "//internal/codegenerator:go_default_library", + "//internal/descriptor:go_default_library", + "//protoc-gen-swagger/internal/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel similarity index 84% rename from protoc-gen-swagger/genswagger/BUILD.bazel rename to protoc-gen-swagger/internal/genswagger/BUILD.bazel index e2b2e447a8b..f4b1cdda53f 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -12,11 +12,11 @@ go_library( "template.go", "types.go", ], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/genswagger", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/internal/genswagger", deps = [ "//internal:go_default_library", - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/generator:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", @@ -36,8 +36,8 @@ go_test( srcs = ["template_test.go"], embed = [":go_default_library"], deps = [ - "//protoc-gen-grpc-gateway/descriptor:go_default_library", - "//protoc-gen-grpc-gateway/httprule:go_default_library", + "//internal/descriptor:go_default_library", + "//internal/httprule:go_default_library", "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", diff --git a/protoc-gen-swagger/genswagger/doc.go b/protoc-gen-swagger/internal/genswagger/doc.go similarity index 100% rename from protoc-gen-swagger/genswagger/doc.go rename to protoc-gen-swagger/internal/genswagger/doc.go diff --git a/protoc-gen-swagger/genswagger/generator.go b/protoc-gen-swagger/internal/genswagger/generator.go similarity index 97% rename from protoc-gen-swagger/genswagger/generator.go rename to protoc-gen-swagger/internal/genswagger/generator.go index bb1fc5ae391..4d9610578cf 100644 --- a/protoc-gen-swagger/genswagger/generator.go +++ b/protoc-gen-swagger/internal/genswagger/generator.go @@ -16,8 +16,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/v2/internal" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - gen "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" spb "google.golang.org/genproto/googleapis/rpc/status" ) diff --git a/protoc-gen-swagger/genswagger/helpers.go b/protoc-gen-swagger/internal/genswagger/helpers.go similarity index 100% rename from protoc-gen-swagger/genswagger/helpers.go rename to protoc-gen-swagger/internal/genswagger/helpers.go diff --git a/protoc-gen-swagger/genswagger/helpers_go111_old.go b/protoc-gen-swagger/internal/genswagger/helpers_go111_old.go similarity index 100% rename from protoc-gen-swagger/genswagger/helpers_go111_old.go rename to protoc-gen-swagger/internal/genswagger/helpers_go111_old.go diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go similarity index 99% rename from protoc-gen-swagger/genswagger/template.go rename to protoc-gen-swagger/internal/genswagger/template.go index 712c2e0657d..39e44bf01bc 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -19,7 +19,7 @@ import ( "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go similarity index 99% rename from protoc-gen-swagger/genswagger/template_test.go rename to protoc-gen-swagger/internal/genswagger/template_test.go index 3636abf2b65..5c65ed52972 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -13,8 +13,8 @@ import ( plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/httprule" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) diff --git a/protoc-gen-swagger/genswagger/types.go b/protoc-gen-swagger/internal/genswagger/types.go similarity index 99% rename from protoc-gen-swagger/genswagger/types.go rename to protoc-gen-swagger/internal/genswagger/types.go index e561083d7a2..b0cd58ac758 100644 --- a/protoc-gen-swagger/genswagger/types.go +++ b/protoc-gen-swagger/internal/genswagger/types.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" ) type param struct { diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 2d6c8da6c9f..d44999a9ee0 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -9,9 +9,9 @@ import ( "github.com/golang/glog" "github.com/golang/protobuf/proto" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/v2/codegenerator" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/genswagger" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/internal/genswagger" ) var ( diff --git a/repositories.bzl b/repositories.bzl index e588d41340c..e8407d2934f 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -114,8 +114,8 @@ def go_repositories(): go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=", - version = "v0.0.0-20190215142949-d0b11bdaac8a", + sum = "h1:R8bzl0244nw47n1xKs1MUMAaTNgjavKcN/aX2Ss3+Fo=", + version = "v0.0.0-20191001151750-bb3f8db39f24", ) go_repository( name = "org_golang_x_text", diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 2e47dabb126..3f0c0395b9a 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -26,7 +26,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ "//internal:go_default_library", - "//utilities:go_default_library", + "//internal/utilities:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", @@ -65,8 +65,8 @@ go_test( embed = [":go_default_library"], deps = [ "//internal:go_default_library", + "//internal/utilities:go_default_library", "//runtime/internal/examplepb:go_default_library", - "//utilities:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 0672f271e22..21ea5d143f5 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -8,8 +8,8 @@ import ( "net/http/httptest" "testing" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/runtime/pattern.go b/runtime/pattern.go index a717ef6f1c2..c2e4bf956b0 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "google.golang.org/grpc/grpclog" ) diff --git a/runtime/pattern_test.go b/runtime/pattern_test.go index 1b856a512a4..6b7e8fc4ecc 100644 --- a/runtime/pattern_test.go +++ b/runtime/pattern_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) const ( diff --git a/runtime/query.go b/runtime/query.go index 13e563cf909..b7e00548a76 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -11,7 +11,7 @@ import ( "time" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "google.golang.org/grpc/grpclog" ) diff --git a/runtime/query_test.go b/runtime/query_test.go index 33b6ef06fa1..f1586fe0569 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -12,9 +12,9 @@ import ( "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/protobuf/testing/protocmp" ) From 3d6a3074f471a57009ea574afcde045ceefaccfa Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 29 Apr 2020 13:57:54 +0100 Subject: [PATCH 0331/1518] Add user testimonials and ADOPTERS.md ADOPTERS.md is modeled after the OPA ADOPTERS.md: https://github.com/open-policy-agent/opa/blob/master/ADOPTERS.md --- ADOPTERS.md | 10 ++++++++++ README.md | 8 ++++++++ 2 files changed, 18 insertions(+) create mode 100644 ADOPTERS.md diff --git a/ADOPTERS.md b/ADOPTERS.md new file mode 100644 index 00000000000..a6e5fc7ec47 --- /dev/null +++ b/ADOPTERS.md @@ -0,0 +1,10 @@ +# Adopters + +This is a list of organizations that have spoken publicly about their adoption or +production users that have added themselves (in alphabetical order): + +* [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of + API requests per day. + +If you have adopted the gRPC-Gateway and would like to be included in this list, +feel free to submit a PR. diff --git a/README.md b/README.md index 8fe614ff9e5..12eec2094c2 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,14 @@ This helps you provide your APIs in both gRPC and RESTful style at the same time ![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) +## Testimonials + + > We use the gRPC-Gateway to serve millions of API requests per day, + and have been since 2018, and through all of that, + we have never had any issues with it. +> +> _- William Mill, [Ad Hoc](http://adhocteam.us/)_ + ## Check out our [documentation](https://grpc-ecosystem.github.io/grpc-gateway/)! ## Background From 794b7362f5f232dc85266ae7986965e75e082ecc Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 29 Apr 2020 13:57:54 +0100 Subject: [PATCH 0332/1518] Add user testimonials and ADOPTERS.md ADOPTERS.md is modeled after the OPA ADOPTERS.md: https://github.com/open-policy-agent/opa/blob/master/ADOPTERS.md --- ADOPTERS.md | 10 ++++++++++ README.md | 8 ++++++++ 2 files changed, 18 insertions(+) create mode 100644 ADOPTERS.md diff --git a/ADOPTERS.md b/ADOPTERS.md new file mode 100644 index 00000000000..a6e5fc7ec47 --- /dev/null +++ b/ADOPTERS.md @@ -0,0 +1,10 @@ +# Adopters + +This is a list of organizations that have spoken publicly about their adoption or +production users that have added themselves (in alphabetical order): + +* [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of + API requests per day. + +If you have adopted the gRPC-Gateway and would like to be included in this list, +feel free to submit a PR. diff --git a/README.md b/README.md index c5a1496533c..fe5b375a168 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,14 @@ This helps you provide your APIs in both gRPC and RESTful style at the same time ![architecture introduction diagram](https://docs.google.com/drawings/d/12hp4CPqrNPFhattL_cIoJptFvlAqm5wLQ0ggqI5mkCg/pub?w=749&h=370) +## Testimonials + + > We use the gRPC-Gateway to serve millions of API requests per day, + and have been since 2018, and through all of that, + we have never had any issues with it. +> +> _- William Mill, [Ad Hoc](http://adhocteam.us/)_ + ## Check out our [documentation](https://grpc-ecosystem.github.io/grpc-gateway/)! ## Background From 062e6e21b327827c65c9a42de702327563e17727 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 10:34:08 +0100 Subject: [PATCH 0333/1518] Add Chef to ADOPTERS.md --- ADOPTERS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index a6e5fc7ec47..48f23e70cef 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -5,6 +5,10 @@ production users that have added themselves (in alphabetical order): * [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of API requests per day. +* [Chef](https://www.chef.io/) uses gRPC-Gateway to provide the user-facing + API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated + OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). + The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. From 330be2c5566e55c6b14a48449bc10512eab35a4d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 10:42:27 +0100 Subject: [PATCH 0334/1518] Add Scaleway to ADOPTERS.md --- ADOPTERS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 48f23e70cef..83d86c954e1 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -9,6 +9,10 @@ production users that have added themselves (in alphabetical order): API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). +* [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to + serve millions of API requests per day [1]. If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. + +[1]: [The odyssey of an HTTP request in Scaleway](https://www.youtube.com/watch?v=eLxD-zIUraE&feature=youtu.be&t=480). From 71a236d6c7c55bfbe3775d9bfbce10bb482369e2 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 10:34:08 +0100 Subject: [PATCH 0335/1518] Add Chef to ADOPTERS.md --- ADOPTERS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index a6e5fc7ec47..48f23e70cef 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -5,6 +5,10 @@ production users that have added themselves (in alphabetical order): * [Ad Hoc](http://adhocteam.us/) uses the gRPC-Gateway to serve millions of API requests per day. +* [Chef](https://www.chef.io/) uses gRPC-Gateway to provide the user-facing + API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated + OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). + The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. From 269c812a01e846927a977ed64c76e469b3681b05 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 10:42:27 +0100 Subject: [PATCH 0336/1518] Add Scaleway to ADOPTERS.md --- ADOPTERS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 48f23e70cef..83d86c954e1 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -9,6 +9,10 @@ production users that have added themselves (in alphabetical order): API of [Chef Automate](https://automate.chef.io/). Furthermore, the generated OpenAPI data serves as the basis for its [API documentation](https://automate.chef.io/docs/api/). The code is Open Source, [see `github.com/chef/automate`](https://github.com/chef/automate). +* [Scaleway](https://www.scaleway.com/en/) uses the gRPC-Gateway since 2018 to + serve millions of API requests per day [1]. If you have adopted the gRPC-Gateway and would like to be included in this list, feel free to submit a PR. + +[1]: [The odyssey of an HTTP request in Scaleway](https://www.youtube.com/watch?v=eLxD-zIUraE&feature=youtu.be&t=480). From 79d5250f854ec6a8f063fee50af1fc936cad29d5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 29 Apr 2020 17:19:36 +0100 Subject: [PATCH 0337/1518] Use public key to authenticate for docker registry The token belongs to a user with no membership anywhere, and it is limited to only reading github packages. --- .circleci/config.yml | 59 ++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2305a270239..32eccae168d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,34 +1,45 @@ version: 2 jobs: build: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' + GLOG_logtostderr: '1' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway - environment: - GLOG_logtostderr: '1' steps: - checkout - run: go test -race -coverprofile=coverage.txt ./... - run: bash <(curl -s https://codecov.io/bash) node_test: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -40,11 +51,15 @@ jobs: npm install && ./node_modules/.bin/gulp generate: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -54,11 +69,15 @@ jobs: - run: go mod tidy - run: git diff --exit-code lint: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -102,11 +121,15 @@ jobs: (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always gorelease: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -118,11 +141,15 @@ jobs: go get golang.org/x/exp/cmd/gorelease@latest - run: gorelease -base=v2.0.0-alpha.2 release: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout From 79794183f1a367dd30840f54661439cf0e75514d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 29 Apr 2020 17:19:36 +0100 Subject: [PATCH 0338/1518] Use public key to authenticate for docker registry The token belongs to a user with no membership anywhere, and it is limited to only reading github packages. --- .circleci/config.yml | 59 ++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8609918ccb8..3992b28143c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,34 +1,45 @@ version: 2 jobs: build: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout - run: go build ./... test: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' + GLOG_logtostderr: '1' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway - environment: - GLOG_logtostderr: '1' steps: - checkout - run: go test -race -coverprofile=coverage.txt ./... - run: bash <(curl -s https://codecov.io/bash) node_test: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -40,11 +51,15 @@ jobs: npm install && ./node_modules/.bin/gulp generate: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -54,11 +69,15 @@ jobs: - run: go mod tidy - run: git diff --exit-code lint: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -102,11 +121,15 @@ jobs: (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always gorelease: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout @@ -118,11 +141,15 @@ jobs: go get golang.org/x/exp/cmd/gorelease@latest - run: gorelease release: + environment: + ## Split key to avoid github revoking it + password0: '99544cdcb19ad4e3fd64' + password1: '3ec86b2e5a431be2d72c' docker: - image: docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 auth: - username: $GITHUB_USER - password: $GITHUB_TOKEN + username: gateway-ci-user + password: ${password0}${password1} working_directory: /src/grpc-gateway steps: - checkout From 01598a7a8d0827f1810dd2d8f9c2dc030270d067 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 20:29:23 +0100 Subject: [PATCH 0339/1518] Remove uses of protoc-gen-go/generator Replace with internal copy of CamelCase --- examples/internal/server/BUILD.bazel | 2 +- examples/internal/server/fieldmask_helper.go | 4 +- internal/casing/BUILD.bazel | 8 +++ internal/casing/LICENSE.md | 28 ++++++++ internal/casing/README.md | 5 ++ internal/casing/camel.go | 63 ++++++++++++++++++ .../descriptor/BUILD.bazel | 2 +- protoc-gen-grpc-gateway/descriptor/types.go | 10 +-- .../internal/gengateway/BUILD.bazel | 2 +- .../internal/gengateway/template.go | 12 ++-- protoc-gen-swagger/genswagger/BUILD.bazel | 1 + protoc-gen-swagger/genswagger/template.go | 65 +------------------ 12 files changed, 123 insertions(+), 79 deletions(-) create mode 100644 internal/casing/BUILD.bazel create mode 100644 internal/casing/LICENSE.md create mode 100644 internal/casing/README.md create mode 100644 internal/casing/camel.go diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index e746d3c89d3..d68756dfd29 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -19,10 +19,10 @@ go_library( "//examples/internal/proto/examplepb:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", + "//internal/casing:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@com_github_rogpeppe_fastuuid//:go_default_library", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", diff --git a/examples/internal/server/fieldmask_helper.go b/examples/internal/server/fieldmask_helper.go index 516f19a1628..81c8886e088 100644 --- a/examples/internal/server/fieldmask_helper.go +++ b/examples/internal/server/fieldmask_helper.go @@ -5,7 +5,7 @@ import ( "reflect" "strings" - "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/internal/casing" "google.golang.org/genproto/protobuf/field_mask" ) @@ -40,7 +40,7 @@ func getField(obj interface{}, path string) (val reflect.Value) { if v.Kind() == reflect.Ptr { v = reflect.Indirect(v) } - v = v.FieldByName(generator.CamelCase(s)) + v = v.FieldByName(casing.Camel(s)) } return v diff --git a/internal/casing/BUILD.bazel b/internal/casing/BUILD.bazel new file mode 100644 index 00000000000..5a1e525b9ce --- /dev/null +++ b/internal/casing/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["camel.go"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/internal/casing", + visibility = ["//:__subpackages__"], +) diff --git a/internal/casing/LICENSE.md b/internal/casing/LICENSE.md new file mode 100644 index 00000000000..0f646931a46 --- /dev/null +++ b/internal/casing/LICENSE.md @@ -0,0 +1,28 @@ +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/internal/casing/README.md b/internal/casing/README.md new file mode 100644 index 00000000000..88114463aa8 --- /dev/null +++ b/internal/casing/README.md @@ -0,0 +1,5 @@ +# Case conversion + +This package contains a single function, copied from the +`github.com/golang/protobuf/protoc-gen-go/generator` package. That +modules LICENSE is referenced in its entirety in this package. diff --git a/internal/casing/camel.go b/internal/casing/camel.go new file mode 100644 index 00000000000..8cfef4bf2a6 --- /dev/null +++ b/internal/casing/camel.go @@ -0,0 +1,63 @@ +package casing + +// Camel returns the CamelCased name. +// +// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +// There is a remote possibility of this rewrite causing a name collision, +// but it's so remote we're prepared to pretend it's nonexistent - since the +// C++ generator lowercases names, it's extremely unlikely to have two fields +// with different capitalizations. +// In short, _my_field_name_2 becomes XMyFieldName_2. +func Camel(s string) string { + if s == "" { + return "" + } + t := make([]byte, 0, 32) + i := 0 + if s[0] == '_' { + // Need a capital letter; drop the '_'. + t = append(t, 'X') + i++ + } + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + for ; i < len(s); i++ { + c := s[i] + if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { + continue // Skip the underscore in s. + } + if isASCIIDigit(c) { + t = append(t, c) + continue + } + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c ^= ' ' // Make it a capital letter. + } + t = append(t, c) // Guaranteed not lower case. + // Accept lower case sequence that follows. + for i+1 < len(s) && isASCIILower(s[i+1]) { + i++ + t = append(t, s[i]) + } + } + return string(t) +} + +// And now lots of helper functions. + +// Is c an ASCII lower-case letter? +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} + +// Is c an ASCII digit? +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} diff --git a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel index 631f5c8a503..02aa7d2a87c 100644 --- a/protoc-gen-grpc-gateway/descriptor/BUILD.bazel +++ b/protoc-gen-grpc-gateway/descriptor/BUILD.bazel @@ -13,12 +13,12 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor", deps = [ + "//internal/casing:go_default_library", "//protoc-gen-grpc-gateway/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@go_googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index 4aa75f85dbf..ab6edbeb370 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -5,7 +5,7 @@ import ( "strings" "github.com/golang/protobuf/protoc-gen-go/descriptor" - gogen "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/httprule" ) @@ -316,7 +316,7 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { if c.Target.OneofIndex != nil { index := c.Target.OneofIndex msg := c.Target.Message - oneOfName := gogen.CamelCase(msg.GetOneofDecl()[*index].GetName()) + oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() components = components + "." + oneOfName @@ -352,15 +352,15 @@ type FieldPathComponent struct { // AssignableExpr returns an assignable expression in go for this field. func (c FieldPathComponent) AssignableExpr() string { - return gogen.CamelCase(c.Name) + return casing.Camel(c.Name) } // ValueExpr returns an expression in go for this field. func (c FieldPathComponent) ValueExpr() string { if c.Target.Message.File.proto2() { - return fmt.Sprintf("Get%s()", gogen.CamelCase(c.Name)) + return fmt.Sprintf("Get%s()", casing.Camel(c.Name)) } - return gogen.CamelCase(c.Name) + return casing.Camel(c.Name) } var ( diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 8483a78ef4f..114b26070f1 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -11,12 +11,12 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/internal/gengateway", deps = [ + "//internal/casing:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/generator:go_default_library", "//utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 2faf8a01d55..392110a66a1 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -8,7 +8,7 @@ import ( "text/template" "github.com/golang/glog" - generator2 "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" "github.com/grpc-ecosystem/grpc-gateway/utilities" ) @@ -38,7 +38,7 @@ func (b binding) GetBodyFieldPath() string { // GetBodyFieldPath returns the binding body's struct field name. func (b binding) GetBodyFieldStructName() (string, error) { if b.Body != nil && len(b.Body.FieldPath) != 0 { - return generator2.CamelCase(b.Body.FieldPath.String()), nil + return casing.Camel(b.Body.FieldPath.String()), nil } return "", errors.New("No body field found") } @@ -122,7 +122,7 @@ func (b binding) FieldMaskField() string { } } if fieldMaskField != nil { - return generator2.CamelCase(fieldMaskField.GetName()) + return casing.Camel(fieldMaskField.GetName()) } return "" } @@ -156,16 +156,16 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { var targetServices []*descriptor.Service for _, msg := range p.Messages { - msgName := generator2.CamelCase(*msg.Name) + msgName := casing.Camel(*msg.Name) msg.Name = &msgName } for _, svc := range p.Services { var methodWithBindingsSeen bool - svcName := generator2.CamelCase(*svc.Name) + svcName := casing.Camel(*svc.Name) svc.Name = &svcName for _, meth := range svc.Methods { glog.V(2).Infof("Processing %s.%s", svc.GetName(), meth.GetName()) - methName := generator2.CamelCase(*meth.Name) + methName := casing.Camel(*meth.Name) meth.Name = &methName for _, b := range meth.Bindings { methodWithBindingsSeen = true diff --git a/protoc-gen-swagger/genswagger/BUILD.bazel b/protoc-gen-swagger/genswagger/BUILD.bazel index 49d499230cd..ec44136445e 100644 --- a/protoc-gen-swagger/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/genswagger/BUILD.bazel @@ -15,6 +15,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/genswagger", deps = [ "//internal:go_default_library", + "//internal/casing:go_default_library", "//protoc-gen-grpc-gateway/descriptor:go_default_library", "//protoc-gen-grpc-gateway/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 4dc93515799..fae481d6570 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -19,6 +19,7 @@ import ( "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" structpb "github.com/golang/protobuf/ptypes/struct" + "github.com/grpc-ecosystem/grpc-gateway/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" ) @@ -1968,7 +1969,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri } func doCamelCase(input string) string { - parameterString := camelCase(input) + parameterString := casing.Camel(input) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) @@ -1987,65 +1988,3 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } - -// CamelCase returns the CamelCased name. -// -// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package -// -// If there is an interior underscore followed by a lower case letter, -// drop the underscore and convert the letter to upper case. -// There is a remote possibility of this rewrite causing a name collision, -// but it's so remote we're prepared to pretend it's nonexistent - since the -// C++ generator lowercases names, it's extremely unlikely to have two fields -// with different capitalizations. -// In short, _my_field_name_2 becomes XMyFieldName_2. -func camelCase(s string) string { - if s == "" { - return "" - } - t := make([]byte, 0, 32) - i := 0 - if s[0] == '_' { - // Need a capital letter; drop the '_'. - t = append(t, 'X') - i++ - } - // Invariant: if the next letter is lower case, it must be converted - // to upper case. - // That is, we process a word at a time, where words are marked by _ or - // upper case letter. Digits are treated as words. - for ; i < len(s); i++ { - c := s[i] - if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { - continue // Skip the underscore in s. - } - if isASCIIDigit(c) { - t = append(t, c) - continue - } - // Assume we have a letter now - if not, it's a bogus identifier. - // The next word is a sequence of characters that must start upper case. - if isASCIILower(c) { - c ^= ' ' // Make it a capital letter. - } - t = append(t, c) // Guaranteed not lower case. - // Accept lower case sequence that follows. - for i+1 < len(s) && isASCIILower(s[i+1]) { - i++ - t = append(t, s[i]) - } - } - return string(t) -} - -// And now lots of helper functions. - -// Is c an ASCII lower-case letter? -func isASCIILower(c byte) bool { - return 'a' <= c && c <= 'z' -} - -// Is c an ASCII digit? -func isASCIIDigit(c byte) bool { - return '0' <= c && c <= '9' -} From bacf8a9dd292a80e4975452ded1e835c9887e0ce Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 20:48:32 +0100 Subject: [PATCH 0340/1518] Remove uses of protoc-gen-go/generator Replace with internal copy of CamelCase --- examples/internal/server/BUILD.bazel | 2 +- examples/internal/server/fieldmask_helper.go | 4 +- internal/casing/BUILD.bazel | 8 +++ internal/casing/LICENSE.md | 28 ++++++++ internal/casing/README.md | 5 ++ internal/casing/camel.go | 63 ++++++++++++++++++ internal/descriptor/BUILD.bazel | 2 +- internal/descriptor/types.go | 10 +-- .../internal/gengateway/BUILD.bazel | 2 +- .../internal/gengateway/template.go | 12 ++-- .../internal/genswagger/BUILD.bazel | 1 + .../internal/genswagger/template.go | 65 +------------------ 12 files changed, 123 insertions(+), 79 deletions(-) create mode 100644 internal/casing/BUILD.bazel create mode 100644 internal/casing/LICENSE.md create mode 100644 internal/casing/README.md create mode 100644 internal/casing/camel.go diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 77c8326a830..b4b4b9da7ac 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -20,10 +20,10 @@ go_library( "//examples/internal/proto/standalone:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", + "//internal/casing:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@com_github_rogpeppe_fastuuid//:go_default_library", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", diff --git a/examples/internal/server/fieldmask_helper.go b/examples/internal/server/fieldmask_helper.go index 516f19a1628..48d5ca75c86 100644 --- a/examples/internal/server/fieldmask_helper.go +++ b/examples/internal/server/fieldmask_helper.go @@ -5,7 +5,7 @@ import ( "reflect" "strings" - "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "google.golang.org/genproto/protobuf/field_mask" ) @@ -40,7 +40,7 @@ func getField(obj interface{}, path string) (val reflect.Value) { if v.Kind() == reflect.Ptr { v = reflect.Indirect(v) } - v = v.FieldByName(generator.CamelCase(s)) + v = v.FieldByName(casing.Camel(s)) } return v diff --git a/internal/casing/BUILD.bazel b/internal/casing/BUILD.bazel new file mode 100644 index 00000000000..31481939d36 --- /dev/null +++ b/internal/casing/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["camel.go"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing", + visibility = ["//:__subpackages__"], +) diff --git a/internal/casing/LICENSE.md b/internal/casing/LICENSE.md new file mode 100644 index 00000000000..0f646931a46 --- /dev/null +++ b/internal/casing/LICENSE.md @@ -0,0 +1,28 @@ +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/internal/casing/README.md b/internal/casing/README.md new file mode 100644 index 00000000000..88114463aa8 --- /dev/null +++ b/internal/casing/README.md @@ -0,0 +1,5 @@ +# Case conversion + +This package contains a single function, copied from the +`github.com/golang/protobuf/protoc-gen-go/generator` package. That +modules LICENSE is referenced in its entirety in this package. diff --git a/internal/casing/camel.go b/internal/casing/camel.go new file mode 100644 index 00000000000..8cfef4bf2a6 --- /dev/null +++ b/internal/casing/camel.go @@ -0,0 +1,63 @@ +package casing + +// Camel returns the CamelCased name. +// +// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +// There is a remote possibility of this rewrite causing a name collision, +// but it's so remote we're prepared to pretend it's nonexistent - since the +// C++ generator lowercases names, it's extremely unlikely to have two fields +// with different capitalizations. +// In short, _my_field_name_2 becomes XMyFieldName_2. +func Camel(s string) string { + if s == "" { + return "" + } + t := make([]byte, 0, 32) + i := 0 + if s[0] == '_' { + // Need a capital letter; drop the '_'. + t = append(t, 'X') + i++ + } + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + for ; i < len(s); i++ { + c := s[i] + if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { + continue // Skip the underscore in s. + } + if isASCIIDigit(c) { + t = append(t, c) + continue + } + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c ^= ' ' // Make it a capital letter. + } + t = append(t, c) // Guaranteed not lower case. + // Accept lower case sequence that follows. + for i+1 < len(s) && isASCIILower(s[i+1]) { + i++ + t = append(t, s[i]) + } + } + return string(t) +} + +// And now lots of helper functions. + +// Is c an ASCII lower-case letter? +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} + +// Is c an ASCII digit? +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index aab8c6527a7..0834dc694f2 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -13,12 +13,12 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor", deps = [ + "//internal/casing:go_default_library", "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@go_googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index c7c1baa2316..41e8553ed68 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -5,7 +5,7 @@ import ( "strings" "github.com/golang/protobuf/protoc-gen-go/descriptor" - gogen "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" ) @@ -342,7 +342,7 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { if c.Target.OneofIndex != nil { index := c.Target.OneofIndex msg := c.Target.Message - oneOfName := gogen.CamelCase(msg.GetOneofDecl()[*index].GetName()) + oneOfName := casing.Camel(msg.GetOneofDecl()[*index].GetName()) oneofFieldName := msg.GetName() + "_" + c.AssignableExpr() if c.Target.ForcePrefixedName { @@ -382,15 +382,15 @@ type FieldPathComponent struct { // AssignableExpr returns an assignable expression in go for this field. func (c FieldPathComponent) AssignableExpr() string { - return gogen.CamelCase(c.Name) + return casing.Camel(c.Name) } // ValueExpr returns an expression in go for this field. func (c FieldPathComponent) ValueExpr() string { if c.Target.Message.File.proto2() { - return fmt.Sprintf("Get%s()", gogen.CamelCase(c.Name)) + return fmt.Sprintf("Get%s()", casing.Camel(c.Name)) } - return gogen.CamelCase(c.Name) + return casing.Camel(c.Name) } var ( diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 94f59180769..2d407a8dc47 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -11,12 +11,12 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway", deps = [ + "//internal/casing:go_default_library", "//internal/descriptor:go_default_library", "//internal/generator:go_default_library", "//internal/utilities:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//protoc-gen-go/generator:go_default_library_gen", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", ], ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 4b6614e9fc6..e2a159684c1 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -8,7 +8,7 @@ import ( "text/template" "github.com/golang/glog" - generator2 "github.com/golang/protobuf/protoc-gen-go/generator" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" ) @@ -38,7 +38,7 @@ func (b binding) GetBodyFieldPath() string { // GetBodyFieldPath returns the binding body's struct field name. func (b binding) GetBodyFieldStructName() (string, error) { if b.Body != nil && len(b.Body.FieldPath) != 0 { - return generator2.CamelCase(b.Body.FieldPath.String()), nil + return casing.Camel(b.Body.FieldPath.String()), nil } return "", errors.New("No body field found") } @@ -122,7 +122,7 @@ func (b binding) FieldMaskField() string { } } if fieldMaskField != nil { - return generator2.CamelCase(fieldMaskField.GetName()) + return casing.Camel(fieldMaskField.GetName()) } return "" } @@ -156,18 +156,18 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { var targetServices []*descriptor.Service for _, msg := range p.Messages { - msgName := generator2.CamelCase(*msg.Name) + msgName := casing.Camel(*msg.Name) msg.Name = &msgName } for _, svc := range p.Services { var methodWithBindingsSeen bool - svcName := generator2.CamelCase(*svc.Name) + svcName := casing.Camel(*svc.Name) svc.Name = &svcName for _, meth := range svc.Methods { glog.V(2).Infof("Processing %s.%s", svc.GetName(), meth.GetName()) - methName := generator2.CamelCase(*meth.Name) + methName := casing.Camel(*meth.Name) meth.Name = &methName for _, b := range meth.Bindings { methodWithBindingsSeen = true diff --git a/protoc-gen-swagger/internal/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel index f4b1cdda53f..233c5b8fa88 100644 --- a/protoc-gen-swagger/internal/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -15,6 +15,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/internal/genswagger", deps = [ "//internal:go_default_library", + "//internal/casing:go_default_library", "//internal/descriptor:go_default_library", "//internal/generator:go_default_library", "//protoc-gen-swagger/options:go_default_library", diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go index 39e44bf01bc..71fc606a01b 100644 --- a/protoc-gen-swagger/internal/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -19,6 +19,7 @@ import ( "github.com/golang/protobuf/proto" pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" structpb "github.com/golang/protobuf/ptypes/struct" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" ) @@ -1968,7 +1969,7 @@ func lowerCamelCase(fieldName string, fields []*descriptor.Field, msgs []*descri } func doCamelCase(input string) string { - parameterString := camelCase(input) + parameterString := casing.Camel(input) builder := &strings.Builder{} builder.WriteString(strings.ToLower(string(parameterString[0]))) builder.WriteString(parameterString[1:]) @@ -1987,65 +1988,3 @@ func getReservedJSONName(fieldName string, messageNameToFieldsToJSONName map[str fieldNames := strings.Split(fieldName, ".") return getReservedJSONName(strings.Join(fieldNames[1:], "."), messageNameToFieldsToJSONName, fieldNameToType) } - -// CamelCase returns the CamelCased name. -// -// This was moved from the now deprecated github.com/golang/protobuf/protoc-gen-go/generator package -// -// If there is an interior underscore followed by a lower case letter, -// drop the underscore and convert the letter to upper case. -// There is a remote possibility of this rewrite causing a name collision, -// but it's so remote we're prepared to pretend it's nonexistent - since the -// C++ generator lowercases names, it's extremely unlikely to have two fields -// with different capitalizations. -// In short, _my_field_name_2 becomes XMyFieldName_2. -func camelCase(s string) string { - if s == "" { - return "" - } - t := make([]byte, 0, 32) - i := 0 - if s[0] == '_' { - // Need a capital letter; drop the '_'. - t = append(t, 'X') - i++ - } - // Invariant: if the next letter is lower case, it must be converted - // to upper case. - // That is, we process a word at a time, where words are marked by _ or - // upper case letter. Digits are treated as words. - for ; i < len(s); i++ { - c := s[i] - if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { - continue // Skip the underscore in s. - } - if isASCIIDigit(c) { - t = append(t, c) - continue - } - // Assume we have a letter now - if not, it's a bogus identifier. - // The next word is a sequence of characters that must start upper case. - if isASCIILower(c) { - c ^= ' ' // Make it a capital letter. - } - t = append(t, c) // Guaranteed not lower case. - // Accept lower case sequence that follows. - for i+1 < len(s) && isASCIILower(s[i+1]) { - i++ - t = append(t, s[i]) - } - } - return string(t) -} - -// And now lots of helper functions. - -// Is c an ASCII lower-case letter? -func isASCIILower(c byte) bool { - return 'a' <= c && c <= 'z' -} - -// Is c an ASCII digit? -func isASCIIDigit(c byte) bool { - return '0' <= c && c <= '9' -} From 53da4199dcb32d044d2357788ac3211b160440e1 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 30 Apr 2020 22:35:36 +0100 Subject: [PATCH 0341/1518] runtime: replace StreamError with status.Status Following on from #1242, this replace the StreamError with a status.Status type. Also, remove the ability to configure the stream error handler. The existing handler was specific to the old type, and we can add something better back in later if necessary. Fixes #1098 --- Makefile | 14 +- .../clients/responsebody/api/swagger.yaml | 29 +-- .../StreamResultOfExamplepbResponseBodyOut.md | 2 +- ...m_result_of_examplepb_response_body_out.go | 2 +- .../response_body_service.swagger.json | 27 +-- .../proto/examplepb/stream.swagger.json | 29 +-- internal/BUILD.bazel | 23 -- internal/errors.pb.go | 196 ------------------ internal/errors.proto | 15 -- .../internal/genswagger/BUILD.bazel | 1 - .../internal/genswagger/generator.go | 5 +- .../internal/genswagger/template.go | 18 +- .../internal/genswagger/template_test.go | 4 +- runtime/BUILD.bazel | 3 - runtime/handler.go | 29 +-- runtime/handler_test.go | 12 +- runtime/mux.go | 16 -- runtime/proto_errors.go | 36 ---- 18 files changed, 28 insertions(+), 433 deletions(-) delete mode 100644 internal/BUILD.bazel delete mode 100644 internal/errors.pb.go delete mode 100644 internal/errors.proto diff --git a/Makefile b/Makefile index 3fd1777f54d..54112d090c7 100644 --- a/Makefile +++ b/Makefile @@ -44,9 +44,6 @@ SWAGGER_PLUGIN_FLAGS?= GOOGLEAPIS_DIR=third_party/googleapis OUTPUT_DIR=_output -RUNTIME_PROTO=internal/errors.proto -RUNTIME_GO=$(RUNTIME_PROTO:.proto=.pb.go) - OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) @@ -143,20 +140,15 @@ SWAGGER_CODEGEN=swagger-codegen PROTOC_INC_PATH=$(dir $(shell which protoc))/../include -generate: $(RUNTIME_GO) - .SUFFIXES: .go .proto $(GO_PLUGIN): go build -o $(GO_PLUGIN) $(GO_PLUGIN_PKG) -$(RUNTIME_GO): $(RUNTIME_PROTO) $(GO_PLUGIN) - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(RUNTIME_PROTO) - $(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(OPENAPIV2_PROTO) -$(GATEWAY_PLUGIN): $(RUNTIME_GO) $(GATEWAY_PLUGIN_SRC) +$(GATEWAY_PLUGIN): $(GATEWAY_PLUGIN_SRC) go build -o $@ $(GATEWAY_PLUGIN_PKG) $(SWAGGER_PLUGIN): $(SWAGGER_PLUGIN_SRC) $(OPENAPIV2_GO) @@ -234,11 +226,11 @@ changelog: --future-release=v1.14.4 lint: golint --set_exit_status ./runtime - golint --set_exit_status ././internal/utilities/... + golint --set_exit_status ./internal/utilities/... golint --set_exit_status ./protoc-gen-grpc-gateway/... golint --set_exit_status ./protoc-gen-swagger/... go vet ./runtime || true - go vet ././internal/utilities/... + go vet ./internal/utilities/... go vet ./protoc-gen-grpc-gateway/... go vet ./protoc-gen-swagger/... diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 59d02a7a163..4d9c6d29f51 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -50,7 +50,7 @@ paths: result: $ref: "#/definitions/examplepbResponseBodyOutResponse" error: - $ref: "#/definitions/runtimeStreamError" + $ref: "#/definitions/rpcStatus" title: "Stream result of examplepbResponseBodyOut" default: description: "An unexpected error response" @@ -216,49 +216,28 @@ definitions: type: "array" items: $ref: "#/definitions/protobufAny" - runtimeStreamError: - type: "object" - properties: - grpc_code: - type: "integer" - format: "int32" - http_code: - type: "integer" - format: "int32" - message: - type: "string" - http_status: - type: "string" - details: - type: "array" - items: - $ref: "#/definitions/protobufAny" example: - http_code: 6 - http_status: "http_status" + code: 0 details: - value: "value" type_url: "type_url" - value: "value" type_url: "type_url" message: "message" - grpc_code: 0 Stream result of examplepbResponseBodyOut: properties: result: $ref: "#/definitions/examplepbResponseBodyOutResponse" error: - $ref: "#/definitions/runtimeStreamError" + $ref: "#/definitions/rpcStatus" example: result: data: "data" error: - http_code: 6 - http_status: "http_status" + code: 0 details: - value: "value" type_url: "type_url" - value: "value" type_url: "type_url" message: "message" - grpc_code: 0 diff --git a/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md b/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md index 8cf8014022a..608ad5047c3 100644 --- a/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md +++ b/examples/internal/clients/responsebody/docs/StreamResultOfExamplepbResponseBodyOut.md @@ -4,7 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **Result** | [***ExamplepbResponseBodyOutResponse**](examplepbResponseBodyOutResponse.md) | | [optional] [default to null] -**Error_** | [***RuntimeStreamError**](runtimeStreamError.md) | | [optional] [default to null] +**Error_** | [***RpcStatus**](rpcStatus.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go b/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go index 4fc188ba216..20893eec6bd 100644 --- a/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go +++ b/examples/internal/clients/responsebody/model_stream_result_of_examplepb_response_body_out.go @@ -11,5 +11,5 @@ package responsebody type StreamResultOfExamplepbResponseBodyOut struct { Result *ExamplepbResponseBodyOutResponse `json:"result,omitempty"` - Error_ *RuntimeStreamError `json:"error,omitempty"` + Error_ *RpcStatus `json:"error,omitempty"` } diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 31f2fc59788..55d830a3a18 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -57,7 +57,7 @@ "$ref": "#/definitions/examplepbResponseBodyOutResponse" }, "error": { - "$ref": "#/definitions/runtimeStreamError" + "$ref": "#/definitions/rpcStatus" } }, "title": "Stream result of examplepbResponseBodyOut" @@ -239,31 +239,6 @@ } } } - }, - "runtimeStreamError": { - "type": "object", - "properties": { - "grpc_code": { - "type": "integer", - "format": "int32" - }, - "http_code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "http_status": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - } - } - } } } } diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index b54ec910a5e..6acfa64f7a9 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -24,7 +24,7 @@ "$ref": "#/definitions/examplepbABitOfEverything" }, "error": { - "$ref": "#/definitions/runtimeStreamError" + "$ref": "#/definitions/rpcStatus" } }, "title": "Stream result of examplepbABitOfEverything" @@ -88,7 +88,7 @@ "$ref": "#/definitions/subStringMessage" }, "error": { - "$ref": "#/definitions/runtimeStreamError" + "$ref": "#/definitions/rpcStatus" } }, "title": "Stream result of subStringMessage" @@ -395,31 +395,6 @@ } } }, - "runtimeStreamError": { - "type": "object", - "properties": { - "grpc_code": { - "type": "integer", - "format": "int32" - }, - "http_code": { - "type": "integer", - "format": "int32" - }, - "message": { - "type": "string" - }, - "http_status": { - "type": "string" - }, - "details": { - "type": "array", - "items": { - "$ref": "#/definitions/protobufAny" - } - } - } - }, "subStringMessage": { "type": "object", "properties": { diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel deleted file mode 100644 index 2a4111eab3d..00000000000 --- a/internal/BUILD.bazel +++ /dev/null @@ -1,23 +0,0 @@ -load("@rules_proto//proto:defs.bzl", "proto_library") -load("@io_bazel_rules_go//go:def.bzl", "go_library") -load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") - -package(default_visibility = ["//visibility:public"]) - -proto_library( - name = "internal_proto", - srcs = ["errors.proto"], - deps = ["@com_google_protobuf//:any_proto"], -) - -go_proto_library( - name = "internal_go_proto", - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal", - proto = ":internal_proto", -) - -go_library( - name = "go_default_library", - embed = [":internal_go_proto"], - importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal", -) diff --git a/internal/errors.pb.go b/internal/errors.pb.go deleted file mode 100644 index 5a2faa56e1d..00000000000 --- a/internal/errors.pb.go +++ /dev/null @@ -1,196 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.21.0 -// protoc v3.10.1 -// source: internal/errors.proto - -package internal - -import ( - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - -// StreamError is a response type which is returned when -// streaming rpc returns an error. -type StreamError struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode,proto3" json:"grpc_code,omitempty"` - HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode,proto3" json:"http_code,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` - HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus,proto3" json:"http_status,omitempty"` - Details []*any.Any `protobuf:"bytes,5,rep,name=details,proto3" json:"details,omitempty"` -} - -func (x *StreamError) Reset() { - *x = StreamError{} - if protoimpl.UnsafeEnabled { - mi := &file_internal_errors_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StreamError) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamError) ProtoMessage() {} - -func (x *StreamError) ProtoReflect() protoreflect.Message { - mi := &file_internal_errors_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamError.ProtoReflect.Descriptor instead. -func (*StreamError) Descriptor() ([]byte, []int) { - return file_internal_errors_proto_rawDescGZIP(), []int{0} -} - -func (x *StreamError) GetGrpcCode() int32 { - if x != nil { - return x.GrpcCode - } - return 0 -} - -func (x *StreamError) GetHttpCode() int32 { - if x != nil { - return x.HttpCode - } - return 0 -} - -func (x *StreamError) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *StreamError) GetHttpStatus() string { - if x != nil { - return x.HttpStatus - } - return "" -} - -func (x *StreamError) GetDetails() []*any.Any { - if x != nil { - return x.Details - } - return nil -} - -var File_internal_errors_proto protoreflect.FileDescriptor - -var file_internal_errors_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x19, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, - 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x72, 0x70, 0x63, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x70, - 0x63, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x0a, 0x5a, - 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_internal_errors_proto_rawDescOnce sync.Once - file_internal_errors_proto_rawDescData = file_internal_errors_proto_rawDesc -) - -func file_internal_errors_proto_rawDescGZIP() []byte { - file_internal_errors_proto_rawDescOnce.Do(func() { - file_internal_errors_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_errors_proto_rawDescData) - }) - return file_internal_errors_proto_rawDescData -} - -var file_internal_errors_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_internal_errors_proto_goTypes = []interface{}{ - (*StreamError)(nil), // 0: grpc.gateway.runtime.StreamError - (*any.Any)(nil), // 1: google.protobuf.Any -} -var file_internal_errors_proto_depIdxs = []int32{ - 1, // 0: grpc.gateway.runtime.StreamError.details:type_name -> google.protobuf.Any - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_internal_errors_proto_init() } -func file_internal_errors_proto_init() { - if File_internal_errors_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_internal_errors_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_internal_errors_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_internal_errors_proto_goTypes, - DependencyIndexes: file_internal_errors_proto_depIdxs, - MessageInfos: file_internal_errors_proto_msgTypes, - }.Build() - File_internal_errors_proto = out.File - file_internal_errors_proto_rawDesc = nil - file_internal_errors_proto_goTypes = nil - file_internal_errors_proto_depIdxs = nil -} diff --git a/internal/errors.proto b/internal/errors.proto deleted file mode 100644 index 55f42ce63ec..00000000000 --- a/internal/errors.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; -package grpc.gateway.runtime; -option go_package = "internal"; - -import "google/protobuf/any.proto"; - -// StreamError is a response type which is returned when -// streaming rpc returns an error. -message StreamError { - int32 grpc_code = 1; - int32 http_code = 2; - string message = 3; - string http_status = 4; - repeated google.protobuf.Any details = 5; -} diff --git a/protoc-gen-swagger/internal/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel index 233c5b8fa88..a3295f7c772 100644 --- a/protoc-gen-swagger/internal/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -14,7 +14,6 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/internal/genswagger", deps = [ - "//internal:go_default_library", "//internal/casing:go_default_library", "//internal/descriptor:go_default_library", "//internal/generator:go_default_library", diff --git a/protoc-gen-swagger/internal/genswagger/generator.go b/protoc-gen-swagger/internal/genswagger/generator.go index 4d9610578cf..b1f922de7f1 100644 --- a/protoc-gen-swagger/internal/genswagger/generator.go +++ b/protoc-gen-swagger/internal/genswagger/generator.go @@ -15,7 +15,6 @@ import ( protocdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" @@ -218,18 +217,16 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato return files, nil } -// AddErrorDefs Adds grpc.gateway.runtime.StreamError, google.rpc.Status, and google.protobuf.Any +// AddErrorDefs Adds google.rpc.Status and google.protobuf.Any // to registry (used for error-related API responses) func AddErrorDefs(reg *descriptor.Registry) error { // load internal protos any := fileDescriptorProtoForMessage(&any.Any{}) status := fileDescriptorProtoForMessage(&spb.Status{}) - streamError := fileDescriptorProtoForMessage(&internal.StreamError{}) return reg.Load(&plugin.CodeGeneratorRequest{ ProtoFile: []*protocdescriptor.FileDescriptorProto{ any, status, - streamError, }, }) } diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go index 71fc606a01b..fa032197acd 100644 --- a/protoc-gen-swagger/internal/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -260,18 +260,6 @@ func findServicesMessagesAndEnumerations(s []*descriptor.Service, reg *descripto if !skipRenderingRef(meth.ResponseType.FQMN()) { m[swgRspName] = meth.ResponseType - if meth.GetServerStreaming() { - streamError, runtimeStreamError, err := lookupMsgAndSwaggerName(".grpc.gateway.runtime", "StreamError", reg) - if err != nil { - glog.Error(err) - } else { - glog.V(1).Infof("StreamError: %v", streamError) - glog.V(1).Infof("StreamError FQMN: %s", runtimeStreamError) - m[runtimeStreamError] = streamError - findNestedMessagesAndEnumerations(streamError, reg, m, e) - } - ms[swgRspName] = meth.ResponseType - } } findNestedMessagesAndEnumerations(meth.ResponseType, reg, m, e) } @@ -934,13 +922,13 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re }, }, } - streamErrDef, hasStreamError := fullyQualifiedNameToSwaggerName(".grpc.gateway.runtime.StreamError", reg) - if hasStreamError { + statusDef, hasStatus := fullyQualifiedNameToSwaggerName(".google.rpc.Status", reg) + if hasStatus { props = append(props, keyVal{ Key: "error", Value: swaggerSchemaObject{ schemaCore: schemaCore{ - Ref: fmt.Sprintf("#/definitions/%s", streamErrDef)}, + Ref: fmt.Sprintf("#/definitions/%s", statusDef)}, }, }) } diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go index 5c65ed52972..6c954a7e5a5 100644 --- a/protoc-gen-swagger/internal/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -1270,7 +1270,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } // Only ExampleMessage must be present, not NestedMessage - if want, got, name := 4, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { + if want, got, name := 3, len(result.Definitions), "len(Definitions)"; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %d want to be %d", file, name, got, want) } if _, ok := result.Paths["/v1/echo"].Post.Responses["200"]; !ok { @@ -1303,7 +1303,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) } err := errorProperty.Value.(swaggerSchemaObject) - if want, got, name := "#/definitions/runtimeStreamError", err.Ref, `((*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Value.(swaggerSchemaObject)).Ref`; !reflect.DeepEqual(got, want) { + if want, got, name := "#/definitions/rpcStatus", err.Ref, `((*(StreamDefinitions["exampleExampleMessage"].Properties))[0].Value.(swaggerSchemaObject)).Ref`; !reflect.DeepEqual(got, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, got, want) } } diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 3f0c0395b9a..745fa692547 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -25,13 +25,11 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ - "//internal:go_default_library", "//internal/utilities:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", - "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", @@ -64,7 +62,6 @@ go_test( ], embed = [":go_default_library"], deps = [ - "//internal:go_default_library", "//internal/utilities:go_default_library", "//runtime/internal/examplepb:go_default_library", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", diff --git a/runtime/handler.go b/runtime/handler.go index f058ba4cb71..82a476c6536 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -2,19 +2,17 @@ package runtime import ( "context" - "errors" "fmt" "io" "net/http" "net/textproto" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal" + "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/status" ) -var errEmptyResponse = errors.New("empty response") - // ForwardResponseStream forwards the stream from gRPC server to REST client. func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { f, ok := w.(http.Flusher) @@ -64,7 +62,7 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal var buf []byte switch { case resp == nil: - buf, err = marshaler.Marshal(errorChunk(streamError(ctx, mux.streamErrorHandler, errEmptyResponse))) + buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response"))) default: result := map[string]interface{}{"result": resp} if rb, ok := resp.(responseBody); ok { @@ -181,11 +179,11 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re } func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error) { - serr := streamError(ctx, mux.streamErrorHandler, err) + st := status.Convert(err) if !wroteHeader { - w.WriteHeader(int(serr.HttpCode)) + w.WriteHeader(HTTPStatusFromCode(st.Code())) } - buf, merr := marshaler.Marshal(errorChunk(serr)) + buf, merr := marshaler.Marshal(errorChunk(st)) if merr != nil { grpclog.Infof("Failed to marshal an error: %v", merr) return @@ -196,17 +194,6 @@ func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, mar } } -// streamError returns the payload for the final message in a response stream -// that represents the given err. -func streamError(ctx context.Context, errHandler StreamErrorHandlerFunc, err error) *StreamError { - serr := errHandler(ctx, err) - if serr != nil { - return serr - } - // TODO: log about misbehaving stream error handler? - return DefaultHTTPStreamErrorHandler(ctx, err) -} - -func errorChunk(err *StreamError) map[string]proto.Message { - return map[string]proto.Message{"error": (*internal.StreamError)(err)} +func errorChunk(st *status.Status) map[string]proto.Message { + return map[string]proto.Message{"error": st.Proto()} } diff --git a/runtime/handler_test.go b/runtime/handler_test.go index bf2a9e922c6..270cfab9cc9 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -9,7 +9,6 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" pb "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/grpc" @@ -119,16 +118,9 @@ func TestForwardResponseStream(t *testing.T) { // Skip non-stream errors t.Skip("checking error encodings") } - st, _ := status.FromError(msg.err) - httpCode := runtime.HTTPStatusFromCode(st.Code()) + st := status.Convert(msg.err) b, err := marshaler.Marshal(map[string]proto.Message{ - "error": &internal.StreamError{ - GrpcCode: int32(st.Code()), - HttpCode: int32(httpCode), - Message: st.Message(), - HttpStatus: http.StatusText(httpCode), - Details: st.Proto().GetDetails(), - }, + "error": st.Proto(), }) if err != nil { t.Errorf("marshaler.Marshal() failed %v", err) diff --git a/runtime/mux.go b/runtime/mux.go index b35708616db..eb7e435365e 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -34,7 +34,6 @@ type ServeMux struct { incomingHeaderMatcher HeaderMatcherFunc outgoingHeaderMatcher HeaderMatcherFunc metadataAnnotators []func(context.Context, *http.Request) metadata.MD - streamErrorHandler StreamErrorHandlerFunc protoErrorHandler ProtoErrorHandlerFunc disablePathLengthFallback bool lastMatchWins bool @@ -129,20 +128,6 @@ func WithDisablePathLengthFallback() ServeMuxOption { } } -// WithStreamErrorHandler returns a ServeMuxOption that will use the given custom stream -// error handler, which allows for customizing the error trailer for server-streaming -// calls. -// -// For stream errors that occur before any response has been written, the mux's -// ProtoErrorHandler will be invoked. However, once data has been written, the errors must -// be handled differently: they must be included in the response body. The response body's -// final message will include the error details returned by the stream error handler. -func WithStreamErrorHandler(fn StreamErrorHandlerFunc) ServeMuxOption { - return func(serveMux *ServeMux) { - serveMux.streamErrorHandler = fn - } -} - // WithLastMatchWins returns a ServeMuxOption that will enable "last // match wins" behavior, where if multiple path patterns match a // request path, the last one defined in the .proto file will be used. @@ -158,7 +143,6 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { handlers: make(map[string][]handler), forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), marshalers: makeMarshalerMIMERegistry(), - streamErrorHandler: DefaultHTTPStreamErrorHandler, } for _, opt := range opts { diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index 9a46f50d00b..b0cf0d0bb3f 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -5,21 +5,11 @@ import ( "io" "net/http" - "github.com/golang/protobuf/ptypes/any" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" ) -// StreamErrorHandlerFunc accepts an error as a gRPC error generated via status package and translates it into a -// a proto struct used to represent error at the end of a stream. -type StreamErrorHandlerFunc func(context.Context, error) *StreamError - -// StreamError is the payload for the final message in a server stream in the event that the server returns an -// error after a response message has already been sent. -type StreamError internal.StreamError - // ProtoErrorHandlerFunc handles the error as a gRPC error generated via status package and replies to the request. type ProtoErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error) @@ -78,29 +68,3 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler handleForwardResponseTrailer(w, md) } - -// DefaultHTTPStreamErrorHandler converts the given err into a *StreamError via -// default logic. -// -// It extracts the gRPC status from err if possible. The fields of the status are -// used to populate the returned StreamError, and the HTTP status code is derived -// from the gRPC code via HTTPStatusFromCode. If the given err does not contain a -// gRPC status, an "Unknown" gRPC code is used and "Internal Server Error" HTTP code. -func DefaultHTTPStreamErrorHandler(_ context.Context, err error) *StreamError { - grpcCode := codes.Unknown - grpcMessage := err.Error() - var grpcDetails []*any.Any - if s, ok := status.FromError(err); ok { - grpcCode = s.Code() - grpcMessage = s.Message() - grpcDetails = s.Proto().GetDetails() - } - httpCode := HTTPStatusFromCode(grpcCode) - return &StreamError{ - GrpcCode: int32(grpcCode), - HttpCode: int32(httpCode), - Message: grpcMessage, - HttpStatus: http.StatusText(httpCode), - Details: grpcDetails, - } -} From 9e25b2b1e752fdf8f6c29412a711078559da63ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20=24=2E=20R=C3=B8mer?= Date: Mon, 4 May 2020 12:59:14 +0200 Subject: [PATCH 0342/1518] protoc-gen-swagger: fix infinite loop on circular references in query parameters (#1266) * Added function nestedQueryParams with map[string] parameter for keeping track of and detecting circular references. Added test TestMessageToQueryParametersRecursive for testing gracefully handling of circular references between messages. See issue #1167 * Code-review change requests accepted * More missed circle references changed to cycle Fixes #1167 --- protoc-gen-swagger/genswagger/template.go | 22 +++- .../genswagger/template_test.go | 118 ++++++++++++++++++ 2 files changed, 138 insertions(+), 2 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index fae481d6570..f700e5a3f56 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -120,8 +120,18 @@ func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Regis return params, nil } -// queryParams converts a field to a list of swagger query parameters recursively. +// queryParams converts a field to a list of swagger query parameters recursively through the use of nestedQueryParams. func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter) (params []swaggerParameterObject, err error) { + return nestedQueryParams(message, field, prefix, reg, pathParams, map[string]bool{}) +} + +// nestedQueryParams converts a field to a list of swagger query parameters recursively. +// This function is a helper function for queryParams, that keeps track of cyclical message references +// through the use of +// touched map[string]bool +// If a cycle is discovered, an error is returned, as cyclical data structures aren't allowed +// in query parameters. +func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, touched map[string]bool) (params []swaggerParameterObject, err error) { // make sure the parameter is not already listed as a path parameter for _, pathParam := range pathParams { if pathParam.Target == field { @@ -216,6 +226,14 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st if err != nil { return nil, fmt.Errorf("unknown message type %s", fieldType) } + // Check for cyclical message reference: + isCycle := touched[*msg.Name] + if isCycle { + return nil, fmt.Errorf("Recursive types are not allowed for query parameters, cycle found on %q", fieldType) + } + // Update map with the massage name so a cycle further down the recursive path can be detected. + touched[*msg.Name] = true + for _, nestedField := range msg.Fields { var fieldName string if reg.GetUseJSONNamesForFields() { @@ -223,7 +241,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } else { fieldName = field.GetName() } - p, err := queryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams) + p, err := nestedQueryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams, touched) if err != nil { return nil, err } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 9176eb07a51..85bf09f6386 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -407,6 +407,124 @@ func TestMessageToQueryParameters(t *testing.T) { } } +// TestMessagetoQueryParametersRecursive, is a check that cyclical references between messages +// are handled gracefully. The goal is to insure that attempts to add messages with cyclical +// references to query-parameters returns an error message. +func TestMessageToQueryParametersRecursive(t *testing.T) { + type test struct { + MsgDescs []*protodescriptor.DescriptorProto + Message string + } + + tests := []test{ + // First test: + // Here we test that a message that references it self through a field will return an error. + // Example proto: + // message DirectRecursiveMessage { + // DirectRecursiveMessage nested = 1; + // } + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("DirectRecursiveMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.DirectRecursiveMessage"), + Number: proto.Int32(1), + }, + }, + }, + }, + Message: "DirectRecursiveMessage", + }, + // Second test: + // Here we test that a cycle through multiple messages is detected and that an error is returned. + // Sample: + // message Root { NodeMessage nested = 1; } + // message NodeMessage { CycleMessage nested = 1; } + // message CycleMessage { Root nested = 1; } + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("RootMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.NodeMessage"), + Number: proto.Int32(1), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("NodeMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.CycleMessage"), + Number: proto.Int32(1), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("CycleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.RootMessage"), + Number: proto.Int32(1), + }, + }, + }, + }, + Message: "RootMessage", + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + _, err = messageToQueryParameters(message, reg, []descriptor.Parameter{}) + if err == nil { + t.Fatalf("It should not be allowed to have recursive query parameters") + } + } +} + func TestMessageToQueryParametersWithJsonName(t *testing.T) { type test struct { MsgDescs []*protodescriptor.DescriptorProto From e86fbdb6a7241eaea9093c4ec604a186a6ccfed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20=24=2E=20R=C3=B8mer?= Date: Mon, 4 May 2020 17:41:34 +0200 Subject: [PATCH 0343/1518] protoc-gen-swagger: fix infinite loop on circular references in query parameters (#1267) * Added function nestedQueryParams with map[string] parameter for keeping track of and detecting circular references. Added test TestMessageToQueryParametersRecursive for testing gracefully handling of circular references between messages. See issue #1167 * Code-review change requests accepted * More missed circle references changed to cycle Fixes #1167 --- .../internal/genswagger/template.go | 22 +++- .../internal/genswagger/template_test.go | 118 ++++++++++++++++++ 2 files changed, 138 insertions(+), 2 deletions(-) diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go index fa032197acd..3ad93d5627e 100644 --- a/protoc-gen-swagger/internal/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -120,8 +120,18 @@ func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Regis return params, nil } -// queryParams converts a field to a list of swagger query parameters recursively. +// queryParams converts a field to a list of swagger query parameters recursively through the use of nestedQueryParams. func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter) (params []swaggerParameterObject, err error) { + return nestedQueryParams(message, field, prefix, reg, pathParams, map[string]bool{}) +} + +// nestedQueryParams converts a field to a list of swagger query parameters recursively. +// This function is a helper function for queryParams, that keeps track of cyclical message references +// through the use of +// touched map[string]bool +// If a cycle is discovered, an error is returned, as cyclical data structures aren't allowed +// in query parameters. +func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter, touched map[string]bool) (params []swaggerParameterObject, err error) { // make sure the parameter is not already listed as a path parameter for _, pathParam := range pathParams { if pathParam.Target == field { @@ -216,6 +226,14 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st if err != nil { return nil, fmt.Errorf("unknown message type %s", fieldType) } + // Check for cyclical message reference: + isCycle := touched[*msg.Name] + if isCycle { + return nil, fmt.Errorf("Recursive types are not allowed for query parameters, cycle found on %q", fieldType) + } + // Update map with the massage name so a cycle further down the recursive path can be detected. + touched[*msg.Name] = true + for _, nestedField := range msg.Fields { var fieldName string if reg.GetUseJSONNamesForFields() { @@ -223,7 +241,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } else { fieldName = field.GetName() } - p, err := queryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams) + p, err := nestedQueryParams(msg, nestedField, prefix+fieldName+".", reg, pathParams, touched) if err != nil { return nil, err } diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go index 6c954a7e5a5..feeac889a1a 100644 --- a/protoc-gen-swagger/internal/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -407,6 +407,124 @@ func TestMessageToQueryParameters(t *testing.T) { } } +// TestMessagetoQueryParametersRecursive, is a check that cyclical references between messages +// are handled gracefully. The goal is to insure that attempts to add messages with cyclical +// references to query-parameters returns an error message. +func TestMessageToQueryParametersRecursive(t *testing.T) { + type test struct { + MsgDescs []*protodescriptor.DescriptorProto + Message string + } + + tests := []test{ + // First test: + // Here we test that a message that references it self through a field will return an error. + // Example proto: + // message DirectRecursiveMessage { + // DirectRecursiveMessage nested = 1; + // } + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("DirectRecursiveMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.DirectRecursiveMessage"), + Number: proto.Int32(1), + }, + }, + }, + }, + Message: "DirectRecursiveMessage", + }, + // Second test: + // Here we test that a cycle through multiple messages is detected and that an error is returned. + // Sample: + // message Root { NodeMessage nested = 1; } + // message NodeMessage { CycleMessage nested = 1; } + // message CycleMessage { Root nested = 1; } + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("RootMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.NodeMessage"), + Number: proto.Int32(1), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("NodeMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.CycleMessage"), + Number: proto.Int32(1), + }, + }, + }, + &protodescriptor.DescriptorProto{ + Name: proto.String("CycleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.RootMessage"), + Number: proto.Int32(1), + }, + }, + }, + }, + Message: "RootMessage", + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + _, err = messageToQueryParameters(message, reg, []descriptor.Parameter{}) + if err == nil { + t.Fatalf("It should not be allowed to have recursive query parameters") + } + } +} + func TestMessageToQueryParametersWithJsonName(t *testing.T) { type test struct { MsgDescs []*protodescriptor.DescriptorProto From 3eb98bafc370794367256bc911e4ca575d08e211 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Tue, 5 May 2020 11:54:46 -0600 Subject: [PATCH 0344/1518] Generate release notes for 1.14.5 --- CHANGELOG.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++---- Makefile | 2 +- 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86f5223ef93..755170bf738 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,73 @@ # Change Log +## [v1.14.5](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.5) (2020-05-05) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-alpha.2...v1.14.5) + +**Implemented enhancements:** + +- Standalone gateway package [\#1239](https://github.com/grpc-ecosystem/grpc-gateway/pull/1239) ([ssetin](https://github.com/ssetin)) + +**Fixed bugs:** + +- Regeneration commands don't regenerate all files [\#1229](https://github.com/grpc-ecosystem/grpc-gateway/issues/1229) + +**Closed issues:** + +- How to change title and version in generated swagger json file [\#1269](https://github.com/grpc-ecosystem/grpc-gateway/issues/1269) +- Error when using oneof name in response body selector [\#1264](https://github.com/grpc-ecosystem/grpc-gateway/issues/1264) +- httpbody.proto has incorrect go\_package [\#1263](https://github.com/grpc-ecosystem/grpc-gateway/issues/1263) +- How to implement field validation for optional parameter [\#1256](https://github.com/grpc-ecosystem/grpc-gateway/issues/1256) +- HTTP GET with query params error [\#1245](https://github.com/grpc-ecosystem/grpc-gateway/issues/1245) +- how to get customezing header [\#1244](https://github.com/grpc-ecosystem/grpc-gateway/issues/1244) +- proto function not define in yaml then grpc-gateway\_out err [\#1233](https://github.com/grpc-ecosystem/grpc-gateway/issues/1233) +- ll [\#1232](https://github.com/grpc-ecosystem/grpc-gateway/issues/1232) +- Add WithUnmarshaler NewServeMux option. [\#1226](https://github.com/grpc-ecosystem/grpc-gateway/issues/1226) +- Feature request: Reject call if there are parameters/fields that don't exist in the protobuf [\#1210](https://github.com/grpc-ecosystem/grpc-gateway/issues/1210) +- Migrate away from using the protoc-gen-go/generator package [\#1209](https://github.com/grpc-ecosystem/grpc-gateway/issues/1209) +- Swagger doc generation got stuck for infinite time if a message refers itself. [\#1167](https://github.com/grpc-ecosystem/grpc-gateway/issues/1167) +- Remove "error" field from errors. [\#1098](https://github.com/grpc-ecosystem/grpc-gateway/issues/1098) + +**Merged pull requests:** + +- V2 [\#1267](https://github.com/grpc-ecosystem/grpc-gateway/pull/1267) ([Romeren](https://github.com/Romeren)) +- protoc-gen-swagger, Fix for infinite loop on circular references in query parameters [\#1266](https://github.com/grpc-ecosystem/grpc-gateway/pull/1266) ([Romeren](https://github.com/Romeren)) +- runtime: replace StreamError with status.Status [\#1262](https://github.com/grpc-ecosystem/grpc-gateway/pull/1262) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Remove uses of protoc-gen-go/generator [\#1261](https://github.com/grpc-ecosystem/grpc-gateway/pull/1261) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Remove uses of protoc-gen-go/generator [\#1260](https://github.com/grpc-ecosystem/grpc-gateway/pull/1260) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Use public key to authenticate for docker registry [\#1259](https://github.com/grpc-ecosystem/grpc-gateway/pull/1259) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add Chef and Scaleway to ADOPTERS.md [\#1257](https://github.com/grpc-ecosystem/grpc-gateway/pull/1257) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add Chef and Scaleway to ADOPTERS.md [\#1255](https://github.com/grpc-ecosystem/grpc-gateway/pull/1255) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Use public key to authenticate for docker registry [\#1253](https://github.com/grpc-ecosystem/grpc-gateway/pull/1253) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add user testimonials and ADOPTERS.md [\#1251](https://github.com/grpc-ecosystem/grpc-gateway/pull/1251) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add user testimonials and ADOPTERS.md [\#1250](https://github.com/grpc-ecosystem/grpc-gateway/pull/1250) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Minimize public API [\#1249](https://github.com/grpc-ecosystem/grpc-gateway/pull/1249) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Remove duplicate regeneration documentation [\#1248](https://github.com/grpc-ecosystem/grpc-gateway/pull/1248) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Change build env to git repo v2 [\#1247](https://github.com/grpc-ecosystem/grpc-gateway/pull/1247) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Change build env to git repo package [\#1246](https://github.com/grpc-ecosystem/grpc-gateway/pull/1246) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- \#1098: remove error field from error messages [\#1242](https://github.com/grpc-ecosystem/grpc-gateway/pull/1242) ([srenatus](https://github.com/srenatus)) +- Move section about google protobufs [\#1241](https://github.com/grpc-ecosystem/grpc-gateway/pull/1241) ([thecodejunkie](https://github.com/thecodejunkie)) +- v2: remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/g… [\#1238](https://github.com/grpc-ecosystem/grpc-gateway/pull/1238) ([yinzara](https://github.com/yinzara)) +- remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/g… [\#1237](https://github.com/grpc-ecosystem/grpc-gateway/pull/1237) ([yinzara](https://github.com/yinzara)) +- v2: set rpcMethodName in request.Context [\#1234](https://github.com/grpc-ecosystem/grpc-gateway/pull/1234) ([AyushG3112](https://github.com/AyushG3112)) +- Fix generating helloworld.proto [\#1231](https://github.com/grpc-ecosystem/grpc-gateway/pull/1231) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Fix generating helloworld.proto [\#1230](https://github.com/grpc-ecosystem/grpc-gateway/pull/1230) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- v2 fix query params for invoked in-process local request [\#1227](https://github.com/grpc-ecosystem/grpc-gateway/pull/1227) ([hb-chen](https://github.com/hb-chen)) +- docs: fix some broken links and change godoc.org links to pkg.go.dev [\#1222](https://github.com/grpc-ecosystem/grpc-gateway/pull/1222) ([AyushG3112](https://github.com/AyushG3112)) +- Fix testproto generation, add to CI [\#1221](https://github.com/grpc-ecosystem/grpc-gateway/pull/1221) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- docs: change godoc.org links to pkg.go.dev [\#1220](https://github.com/grpc-ecosystem/grpc-gateway/pull/1220) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- docs: fix some broken links and change godoc.org links to pkg.go.dev [\#1219](https://github.com/grpc-ecosystem/grpc-gateway/pull/1219) ([AyushG3112](https://github.com/AyushG3112)) +- v2: Fix gorelease base, update README [\#1218](https://github.com/grpc-ecosystem/grpc-gateway/pull/1218) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Add season of docs project ideas page [\#1214](https://github.com/grpc-ecosystem/grpc-gateway/pull/1214) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- remove deprecated usage of github.com/golang/protobuf/protoc-gen-go/generator [\#1213](https://github.com/grpc-ecosystem/grpc-gateway/pull/1213) ([yinzara](https://github.com/yinzara)) +- fix query params for invoked in-process local request [\#1212](https://github.com/grpc-ecosystem/grpc-gateway/pull/1212) ([hb-chen](https://github.com/hb-chen)) +- Upgrade protobuf to 1.4.0 [\#1165](https://github.com/grpc-ecosystem/grpc-gateway/pull/1165) ([johanbrandhorst](https://github.com/johanbrandhorst)) + +## [v2.0.0-alpha.2](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-alpha.2) (2020-04-18) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) + +## [v2.0.0-alpha.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v2.0.0-alpha.1) (2020-04-18) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.4...v2.0.0-alpha.1) + ## [v1.14.4](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.14.4) (2020-04-18) [Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.14.4-rc.1...v1.14.4) @@ -16,7 +84,10 @@ **Merged pull requests:** +- Add Season of Docs project ideas page [\#1224](https://github.com/grpc-ecosystem/grpc-gateway/pull/1224) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Generate changelog for 1.14.4 [\#1217](https://github.com/grpc-ecosystem/grpc-gateway/pull/1217) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Add option to disable new operationID generation [\#1216](https://github.com/grpc-ecosystem/grpc-gateway/pull/1216) ([johanbrandhorst](https://github.com/johanbrandhorst)) +- Misc docs changes [\#1215](https://github.com/grpc-ecosystem/grpc-gateway/pull/1215) ([johanbrandhorst](https://github.com/johanbrandhorst)) - http rule's response\_body support to stream rpc [\#1208](https://github.com/grpc-ecosystem/grpc-gateway/pull/1208) ([adasari](https://github.com/adasari)) - Add GopherCon UK link to README [\#1204](https://github.com/grpc-ecosystem/grpc-gateway/pull/1204) ([johanbrandhorst](https://github.com/johanbrandhorst)) - Move codegenerator back to public namespace [\#1200](https://github.com/grpc-ecosystem/grpc-gateway/pull/1200) ([johanbrandhorst](https://github.com/johanbrandhorst)) @@ -150,7 +221,6 @@ - protoc-gen-swagger: support multiple files [\#1104](https://github.com/grpc-ecosystem/grpc-gateway/issues/1104) - grpc-gateway is incompatible with --incompatible\_load\_proto\_rules\_from\_bzl [\#1101](https://github.com/grpc-ecosystem/grpc-gateway/issues/1101) - Any example or doc of sending large data from Postman \(json\) to the server using client side streaming? [\#1100](https://github.com/grpc-ecosystem/grpc-gateway/issues/1100) -- Why errors have both "error" and "message" field that contains same \(redundant\) data? [\#1098](https://github.com/grpc-ecosystem/grpc-gateway/issues/1098) - Generate java grpc gateway code. [\#1097](https://github.com/grpc-ecosystem/grpc-gateway/issues/1097) - protoc-gen-swagger gen unsupport http post in query, only support http get in query? [\#1096](https://github.com/grpc-ecosystem/grpc-gateway/issues/1096) - Cannot generate swagger with generated protobuf [\#1094](https://github.com/grpc-ecosystem/grpc-gateway/issues/1094) @@ -938,7 +1008,7 @@ - properly respect file flag for protoc-gen-swagger [\#293](https://github.com/grpc-ecosystem/grpc-gateway/pull/293) ([tmc](https://github.com/tmc)) ## [v1.3.1](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.1) (2017-12-23) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3.1) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.1) **Implemented enhancements:** @@ -995,11 +1065,11 @@ - grpc-gateway/generator: respect full package [\#462](https://github.com/grpc-ecosystem/grpc-gateway/pull/462) ([glerchundi](https://github.com/glerchundi)) - Add proto marshaller for proto-over-http [\#459](https://github.com/grpc-ecosystem/grpc-gateway/pull/459) ([MatthewDolan](https://github.com/MatthewDolan)) -## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3...v1.3.0) - ## [v1.3](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3) (2017-11-03) -[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.3.0...v1.3) + +## [v1.3.0](https://github.com/grpc-ecosystem/grpc-gateway/tree/v1.3.0) (2017-11-03) +[Full Changelog](https://github.com/grpc-ecosystem/grpc-gateway/compare/v1.2.2...v1.3.0) **Closed issues:** diff --git a/Makefile b/Makefile index 354d34cf591..3acfd00b278 100644 --- a/Makefile +++ b/Makefile @@ -223,7 +223,7 @@ changelog: --compare-link \ --github-site=https://github.com \ --unreleased-label "**Next release**" \ - --future-release=v1.14.4 + --future-release=v1.14.5 lint: golint --set_exit_status ./runtime golint --set_exit_status ./utilities/... From 2cec7de0fcb07be7b4e7a48fe04abf7ddd120ec3 Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 8 May 2020 12:39:17 -0600 Subject: [PATCH 0345/1518] Add more instructions on the GitHub releases UI --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ebb63091104..d23fafe999b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,5 +58,9 @@ To make a release, follow these steps: 1. Open a PR and check that everything looks right. 1. Merge the PR. 1. Tag the release on `master`, the tag should be made against the commit you just merged. + 1. The release can be created using the command line, or also through GitHub's [releases + UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new). + 1. If you create a release using the web UI you can publish it as a draft and have it + reviewed by another maintainer. 1. (Optional) Delete your Github token again. 1. (Required) Sit back and pat yourself on the back for a job well done :clap:. From 246b6f8369d8c0ad15264c97005fa1825f72bdaf Mon Sep 17 00:00:00 2001 From: Andrew Z Allen Date: Fri, 8 May 2020 13:33:25 -0600 Subject: [PATCH 0346/1518] Add more instructions on the GitHub releases UI --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ebb63091104..d23fafe999b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,5 +58,9 @@ To make a release, follow these steps: 1. Open a PR and check that everything looks right. 1. Merge the PR. 1. Tag the release on `master`, the tag should be made against the commit you just merged. + 1. The release can be created using the command line, or also through GitHub's [releases + UI](https://github.com/grpc-ecosystem/grpc-gateway/releases/new). + 1. If you create a release using the web UI you can publish it as a draft and have it + reviewed by another maintainer. 1. (Optional) Delete your Github token again. 1. (Required) Sit back and pat yourself on the back for a job well done :clap:. From af9ae5389c5ddee0ff350bdf2e04c1ecff9931ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 May 2020 17:30:09 +0000 Subject: [PATCH 0347/1518] Add renovate.json --- renovate.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000000..f45d8f110c3 --- /dev/null +++ b/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "config:base" + ] +} From c2f06272fab2f27f3d3bc6c5fc5c6c01f52eb24e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 May 2020 21:55:37 +0000 Subject: [PATCH 0348/1518] Update golang.org/x/oauth2 commit hash to bf48bf1 --- go.mod | 2 +- go.sum | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 9601cf06b7c..e6eae3b1c5e 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/protobuf v1.3.2 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect - golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c google.golang.org/grpc v1.24.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 20a620a8700..9d6c942cf9c 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= @@ -21,14 +22,18 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= From 1a6669a6b14a06bdbab2a6dc287cf6624636c552 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 8 May 2020 22:57:03 +0100 Subject: [PATCH 0349/1518] Configure Renovate to run on master and v2 --- .github/renovate.json | 9 +++++++++ renovate.json | 5 ----- 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 .github/renovate.json delete mode 100644 renovate.json diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 00000000000..14f3401a591 --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,9 @@ +{ + "extends": [ + "config:base" + ], + "baseBranches": [ + "master", + "v2" + ] +} diff --git a/renovate.json b/renovate.json deleted file mode 100644 index f45d8f110c3..00000000000 --- a/renovate.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "config:base" - ] -} From 024dabbc0c77ed0c6e01ddc1ce134c1bb4b8d68b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 8 May 2020 23:25:48 +0100 Subject: [PATCH 0350/1518] Move renovate.json back to root I think I broke it --- .github/renovate.json => renovate.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/renovate.json => renovate.json (100%) diff --git a/.github/renovate.json b/renovate.json similarity index 100% rename from .github/renovate.json rename to renovate.json From 433cf8c46062a9383b0ea48c37612002a84a713b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 00:20:01 +0000 Subject: [PATCH 0351/1518] Update dependency com_github_bazelbuild_buildtools to v0.29.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8515bd549ad..ab052e04f49 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -83,9 +83,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "86592d703ecbe0c5cbb5139333a63268cf58d7efd2c459c8be8e69e77d135e29", - strip_prefix = "buildtools-0.26.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/0.26.0.tar.gz"], + sha256 = "f3ef44916e6be705ae862c0520bac6834dd2ff1d4ac7e5abc61fe9f12ce7a865", + strip_prefix = "buildtools-0.29.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/0.29.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 2f91de6aed373d70947b26e8dfe6f462882eca13 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 04:47:40 +0000 Subject: [PATCH 0352/1518] Update dependency com_github_bazelbuild_buildtools to v3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ab052e04f49..21ebb8dcb8d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -83,9 +83,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "f3ef44916e6be705ae862c0520bac6834dd2ff1d4ac7e5abc61fe9f12ce7a865", - strip_prefix = "buildtools-0.29.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/0.29.0.tar.gz"], + sha256 = "a0e79f5876a1552ae8000882e4189941688f359a80b2bc1d7e3a51cab6257ba1", + strip_prefix = "buildtools-3.0.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/3.0.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 569467217b71239b219cc2c29f3a279ef63b1abf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 07:29:59 +0000 Subject: [PATCH 0353/1518] Update dependency io_bazel_rules_go to v0.22.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 8515bd549ad..747d9625d3a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -35,10 +35,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "e88471aea3a3a4f19ec1310a55ba94772d087e9ce46e41ae38ecebe17935de7b", + sha256 = "7b9bbe3ea1fccb46dcfa6c3f3e29ba7ec740d8733370e21cdc8937467b4a4349", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", ], ) From 80addb23f5c6375925cbcc1e2ac10845a5d6c6b3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 09:31:38 +0000 Subject: [PATCH 0354/1518] Update golang Docker tag to v1.14.2 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 2eff32c6fdb..46d8d6fb42d 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.0 +FROM golang:1.14.2 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From eeda09ff56e7cd950c09dba3a67d33f4940bca66 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 02:32:29 +0000 Subject: [PATCH 0355/1518] Update golang Docker tag to v1.14.2 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 2eff32c6fdb..46d8d6fb42d 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.0 +FROM golang:1.14.2 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From dd7ce3e3dd63789a8aa2e3174ed594480ce96665 Mon Sep 17 00:00:00 2001 From: Anil Dasari <7031002+adasari@users.noreply.github.com> Date: Sat, 9 May 2020 15:40:51 +0530 Subject: [PATCH 0356/1518] Support streaming HttpBody * httpbody in stream * httpbody contenttype in stream response * compare content type in test * Update examples/internal/integration/integration_test.go Co-authored-by: Johan Brandhorst * httpbody readme update Co-authored-by: Johan Brandhorst --- docs/_docs/httpbody.md | 26 ++- .../internal/integration/integration_test.go | 35 +++- examples/internal/proto/examplepb/BUILD.bazel | 2 + .../internal/proto/examplepb/stream.pb.go | 164 +++++++++++++----- .../internal/proto/examplepb/stream.pb.gw.go | 48 +++++ .../internal/proto/examplepb/stream.proto | 7 + .../proto/examplepb/stream.swagger.json | 53 ++++++ examples/internal/server/BUILD.bazel | 1 + .../internal/server/a_bit_of_everything.go | 22 +++ runtime/handler.go | 15 +- 10 files changed, 319 insertions(+), 54 deletions(-) diff --git a/docs/_docs/httpbody.md b/docs/_docs/httpbody.md index 5a0f9219ada..5ca58c30c0a 100644 --- a/docs/_docs/httpbody.md +++ b/docs/_docs/httpbody.md @@ -25,7 +25,13 @@ service HttpBodyExampleService { option (google.api.http) = { get: "/helloworld" }; - } + } + + rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) { + option (google.api.http) = { + get: "/download" + }; + } } ``` @@ -41,4 +47,22 @@ func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) }, nil } +func (HttpBodyExampleService) Download(_ *empty.Empty, stream HttpBodyExampleService_DownloadServer) error { + msgs := []*httpbody.HttpBody{{ + ContentType: "text/html", + Data: []byte("Hello 1"), + }, { + ContentType: "text/html", + Data: []byte("Hello 2"), + }} + + for _, msg := range msgs { + if err := stream.Send(msg); err != nil { + return err + } + } + + return nil +} + ``` \ No newline at end of file diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index f23f6e7e133..075f6286e9f 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -59,10 +59,11 @@ func TestForwardResponseOption(t *testing.T) { ctx, cancel := context.WithCancel(ctx) defer cancel() + port := 7079 go func() { if err := runGateway( ctx, - ":8081", + fmt.Sprintf(":%d", port), runtime.WithForwardResponseOption( func(_ context.Context, w http.ResponseWriter, _ proto.Message) error { w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1.1+json") @@ -74,10 +75,10 @@ func TestForwardResponseOption(t *testing.T) { return } }() - if err := waitForGateway(ctx, 8081); err != nil { - t.Errorf("waitForGateway(ctx, 8081) failed with %v; want success", err) + if err := waitForGateway(ctx, uint16(port)); err != nil { + t.Errorf("waitForGateway(ctx, %d) failed with %v; want success", port, err) } - testEcho(t, 8081, "v1", "application/vnd.docker.plugins.v1.1+json") + testEcho(t, port, "v1", "application/vnd.docker.plugins.v1.1+json") } func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { @@ -275,6 +276,7 @@ func TestABE(t *testing.T) { testABELookup(t, 8088) testABELookupNotFound(t, 8088) testABEList(t, 8088) + testABEDownload(t, 8088) testABEBulkEcho(t, 8088) testABEBulkEchoZeroLength(t, 8088) testAdditionalBindings(t, 8088) @@ -980,6 +982,31 @@ func testABEList(t *testing.T, port int) { } } +func testABEDownload(t *testing.T, port int) { + apiURL := fmt.Sprintf("http://localhost:%d/v1/example/download", port) + resp, err := http.Get(apiURL) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + + wantHeader := "text/html" + if value := resp.Header.Get("Content-Type"); value != wantHeader { + t.Fatalf("testABEDownload() Content-Type failed: got %s, want %s", value, wantHeader) + } + + body, err := readAll(resp.Body) + if err != nil { + t.Fatalf("readAll(resp.Body) failed with %v; want success", err) + } + + want := []string{"Hello 1", "Hello 2"} + if !reflect.DeepEqual(body, want) { + t.Errorf("testABEDownload() failed: got %v, want %v", body, want) + } +} + func testABEBulkEcho(t *testing.T, port int) { reqr, reqw := io.Pipe() var wg sync.WaitGroup diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index ad808e9525c..e3ab712295c 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -49,6 +49,7 @@ proto_library( "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", "@go_googleapis//google/api:annotations_proto", + "@go_googleapis//google/api:httpbody_proto", ], ) @@ -67,6 +68,7 @@ go_proto_library( "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", + "@go_googleapis//google/api:httpbody_go_proto", ], ) diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 694cbaf156a..0d8e4a17fbd 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -12,6 +12,7 @@ import ( empty "github.com/golang/protobuf/ptypes/empty" sub "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" _ "google.golang.org/genproto/googleapis/api/annotations" + httpbody "google.golang.org/genproto/googleapis/api/httpbody" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -41,62 +42,72 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xd5, 0x03, - 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x93, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, - 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xa5, 0x01, - 0x0a, 0x08, 0x42, 0x75, 0x6c, 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x31, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, - 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, - 0x2a, 0x28, 0x01, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xaf, 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0a, 0x42, + 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x28, 0x01, + 0x12, 0x85, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x27, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xa5, 0x01, 0x0a, 0x08, 0x42, 0x75, 0x6c, + 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, + 0x12, 0x58, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_examples_internal_proto_examplepb_stream_proto_goTypes = []interface{}{ (*ABitOfEverything)(nil), // 0: grpc.gateway.examples.internal.examplepb.ABitOfEverything (*empty.Empty)(nil), // 1: google.protobuf.Empty (*sub.StringMessage)(nil), // 2: grpc.gateway.examples.internal.sub.StringMessage + (*httpbody.HttpBody)(nil), // 3: google.api.HttpBody } var file_examples_internal_proto_examplepb_stream_proto_depIdxs = []int32{ 0, // 0: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything 1, // 1: grpc.gateway.examples.internal.examplepb.StreamService.List:input_type -> google.protobuf.Empty 2, // 2: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:input_type -> grpc.gateway.examples.internal.sub.StringMessage - 1, // 3: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty - 0, // 4: grpc.gateway.examples.internal.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 5: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.sub.StringMessage - 3, // [3:6] is the sub-list for method output_type - 0, // [0:3] is the sub-list for method input_type + 1, // 3: grpc.gateway.examples.internal.examplepb.StreamService.Download:input_type -> google.protobuf.Empty + 1, // 4: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty + 0, // 5: grpc.gateway.examples.internal.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything + 2, // 6: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.sub.StringMessage + 3, // 7: grpc.gateway.examples.internal.examplepb.StreamService.Download:output_type -> google.api.HttpBody + 4, // [4:8] is the sub-list for method output_type + 0, // [0:4] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -142,6 +153,7 @@ type StreamServiceClient interface { BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) + Download(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) } type streamServiceClient struct { @@ -249,11 +261,44 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { return m, nil } +func (c *streamServiceClient) Download(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) { + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.examplepb.StreamService/Download", opts...) + if err != nil { + return nil, err + } + x := &streamServiceDownloadClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StreamService_DownloadClient interface { + Recv() (*httpbody.HttpBody, error) + grpc.ClientStream +} + +type streamServiceDownloadClient struct { + grpc.ClientStream +} + +func (x *streamServiceDownloadClient) Recv() (*httpbody.HttpBody, error) { + m := new(httpbody.HttpBody) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // StreamServiceServer is the server API for StreamService service. type StreamServiceServer interface { BulkCreate(StreamService_BulkCreateServer) error List(*empty.Empty, StreamService_ListServer) error BulkEcho(StreamService_BulkEchoServer) error + Download(*empty.Empty, StreamService_DownloadServer) error } // UnimplementedStreamServiceServer can be embedded to have forward compatible implementations. @@ -269,6 +314,9 @@ func (*UnimplementedStreamServiceServer) List(*empty.Empty, StreamService_ListSe func (*UnimplementedStreamServiceServer) BulkEcho(StreamService_BulkEchoServer) error { return status.Errorf(codes.Unimplemented, "method BulkEcho not implemented") } +func (*UnimplementedStreamServiceServer) Download(*empty.Empty, StreamService_DownloadServer) error { + return status.Errorf(codes.Unimplemented, "method Download not implemented") +} func RegisterStreamServiceServer(s *grpc.Server, srv StreamServiceServer) { s.RegisterService(&_StreamService_serviceDesc, srv) @@ -347,6 +395,27 @@ func (x *streamServiceBulkEchoServer) Recv() (*sub.StringMessage, error) { return m, nil } +func _StreamService_Download_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(empty.Empty) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StreamServiceServer).Download(m, &streamServiceDownloadServer{stream}) +} + +type StreamService_DownloadServer interface { + Send(*httpbody.HttpBody) error + grpc.ServerStream +} + +type streamServiceDownloadServer struct { + grpc.ServerStream +} + +func (x *streamServiceDownloadServer) Send(m *httpbody.HttpBody) error { + return x.ServerStream.SendMsg(m) +} + var _StreamService_serviceDesc = grpc.ServiceDesc{ ServiceName: "grpc.gateway.examples.internal.examplepb.StreamService", HandlerType: (*StreamServiceServer)(nil), @@ -368,6 +437,11 @@ var _StreamService_serviceDesc = grpc.ServiceDesc{ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "Download", + Handler: _StreamService_Download_Handler, + ServerStreams: true, + }, }, Metadata: "examples/internal/proto/examplepb/stream.proto", } diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 66500a5818c..20a3607493a 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -146,6 +146,23 @@ func request_StreamService_BulkEcho_0(ctx context.Context, marshaler runtime.Mar return stream, metadata, nil } +func request_StreamService_Download_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (StreamService_DownloadClient, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + stream, err := client.Download(ctx, &protoReq) + if err != nil { + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil + +} + // RegisterStreamServiceHandlerServer registers the http handlers for service StreamService to "mux". // UnaryRPC :call StreamServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -172,6 +189,13 @@ func RegisterStreamServiceHandlerServer(ctx context.Context, mux *runtime.ServeM return }) + mux.Handle("GET", pattern_StreamService_Download_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + }) + return nil } @@ -273,6 +297,26 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM }) + mux.Handle("GET", pattern_StreamService_Download_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/Download") + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_StreamService_Download_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_StreamService_Download_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -282,6 +326,8 @@ var ( pattern_StreamService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "", runtime.AssumeColonVerbOpt(true))) pattern_StreamService_BulkEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "echo"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_StreamService_Download_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "download"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -290,4 +336,6 @@ var ( forward_StreamService_List_0 = runtime.ForwardResponseStream forward_StreamService_BulkEcho_0 = runtime.ForwardResponseStream + + forward_StreamService_Download_0 = runtime.ForwardResponseStream ) diff --git a/examples/internal/proto/examplepb/stream.proto b/examples/internal/proto/examplepb/stream.proto index 8cfa647cc15..34bbeac0065 100644 --- a/examples/internal/proto/examplepb/stream.proto +++ b/examples/internal/proto/examplepb/stream.proto @@ -3,6 +3,7 @@ option go_package = "examplepb"; package grpc.gateway.examples.internal.examplepb; import "google/api/annotations.proto"; +import "google/api/httpbody.proto"; import "google/protobuf/empty.proto"; import "examples/internal/proto/examplepb/a_bit_of_everything.proto"; import "examples/internal/proto/sub/message.proto"; @@ -26,4 +27,10 @@ service StreamService { body: "*" }; } + + rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) { + option (google.api.http) = { + get : "/v1/example/download" + }; + } } diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index 6acfa64f7a9..dca019c1802 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -116,6 +116,37 @@ "StreamService" ] } + }, + "/v1/example/download": { + "get": { + "operationId": "StreamService_Download", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/apiHttpBody" + }, + "error": { + "$ref": "#/definitions/rpcStatus" + } + }, + "title": "Stream result of apiHttpBody" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "StreamService" + ] + } } }, "definitions": { @@ -157,6 +188,28 @@ "default": "FALSE", "description": "DeepEnum is one or zero.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true." }, + "apiHttpBody": { + "type": "object", + "properties": { + "content_type": { + "type": "string", + "description": "The HTTP Content-Type header value specifying the content type of the body." + }, + "data": { + "type": "string", + "format": "byte", + "description": "The HTTP request/response body as raw binary." + }, + "extensions": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + }, + "description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs." + } + }, + "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody) returns\n (google.protobuf.Empty);\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." + }, "examplepbABitOfEverything": { "type": "object", "example": { diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index b4b4b9da7ac..89c23e9ee5f 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -25,6 +25,7 @@ go_library( "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_rogpeppe_fastuuid//:go_default_library", + "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index e0c731d8412..3c74901a5e4 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "sync" + "time" "github.com/golang/glog" "github.com/golang/protobuf/proto" @@ -15,6 +16,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" "github.com/rogpeppe/fastuuid" + "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -156,6 +158,26 @@ func (s *_ABitOfEverythingServer) List(_ *empty.Empty, stream examples.StreamSer return nil } +func (s *_ABitOfEverythingServer) Download(_ *empty.Empty, stream examples.StreamService_DownloadServer) error { + msgs := []*httpbody.HttpBody{{ + ContentType: "text/html", + Data: []byte("Hello 1"), + }, { + ContentType: "text/html", + Data: []byte("Hello 2"), + }} + + for _, msg := range msgs { + if err := stream.Send(msg); err != nil { + return err + } + + time.Sleep(5 * time.Millisecond) + } + + return nil +} + func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*empty.Empty, error) { s.m.Lock() defer s.m.Unlock() diff --git a/runtime/handler.go b/runtime/handler.go index 82a476c6536..c519d5d098d 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -8,6 +8,7 @@ import ( "net/textproto" "github.com/golang/protobuf/proto" + "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" @@ -64,12 +65,18 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal case resp == nil: buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response"))) default: - result := map[string]interface{}{"result": resp} - if rb, ok := resp.(responseBody); ok { - result["result"] = rb.XXX_ResponseBody() + if httpBody, ok := resp.(*httpbody.HttpBody); ok { + buf = httpBody.GetData() + w.Header().Set("Content-Type", httpBody.GetContentType()) + } else { + result := map[string]interface{}{"result": resp} + if rb, ok := resp.(responseBody); ok { + result["result"] = rb.XXX_ResponseBody() + } + + buf, err = marshaler.Marshal(result) } - buf, err = marshaler.Marshal(result) } if err != nil { From 8cdc2ad0b1f466139ed88b250d7894505d97fc61 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 May 2020 23:46:32 +0000 Subject: [PATCH 0357/1518] Update google.golang.org/genproto commit hash to 43844f6 --- examples/internal/helloworld/helloworld.pb.go | 8 ++-- .../proto/examplepb/a_bit_of_everything.pb.go | 16 +++---- .../proto/examplepb/echo_service.pb.go | 8 ++-- .../proto/examplepb/flow_combination.pb.go | 8 ++-- .../proto/examplepb/non_standard_names.pb.go | 8 ++-- .../examplepb/response_body_service.pb.go | 8 ++-- .../internal/proto/examplepb/stream.pb.go | 8 ++-- .../examplepb/unannotated_echo_service.pb.go | 8 ++-- .../proto/examplepb/use_go_template.pb.go | 8 ++-- .../internal/proto/examplepb/wrappers.pb.go | 8 ++-- go.mod | 6 +-- go.sum | 17 +++++-- repositories.bzl | 44 ++++++++++++++----- 13 files changed, 94 insertions(+), 61 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 53780205a9d..60299dd8dd8 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -222,11 +222,11 @@ var fileDescriptor_fd8fde893e1fcf9f = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // GreeterClient is the client API for Greeter service. // @@ -236,10 +236,10 @@ type GreeterClient interface { } type greeterClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewGreeterClient(cc *grpc.ClientConn) GreeterClient { +func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient { return &greeterClient{cc} } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index a34ed9d779a..cb998fa36e3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1054,11 +1054,11 @@ var fileDescriptor_e6ccf6cab3ab66ab = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ABitOfEverythingServiceClient is the client API for ABitOfEverythingService service. // @@ -1096,10 +1096,10 @@ type ABitOfEverythingServiceClient interface { } type aBitOfEverythingServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewABitOfEverythingServiceClient(cc *grpc.ClientConn) ABitOfEverythingServiceClient { +func NewABitOfEverythingServiceClient(cc grpc.ClientConnInterface) ABitOfEverythingServiceClient { return &aBitOfEverythingServiceClient{cc} } @@ -1808,10 +1808,10 @@ type CamelCaseServiceNameClient interface { } type camelCaseServiceNameClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewCamelCaseServiceNameClient(cc *grpc.ClientConn) CamelCaseServiceNameClient { +func NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCaseServiceNameClient { return &camelCaseServiceNameClient{cc} } @@ -1880,10 +1880,10 @@ type AnotherServiceWithNoBindingsClient interface { } type anotherServiceWithNoBindingsClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewAnotherServiceWithNoBindingsClient(cc *grpc.ClientConn) AnotherServiceWithNoBindingsClient { +func NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) AnotherServiceWithNoBindingsClient { return &anotherServiceWithNoBindingsClient{cc} } diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index 3ca940dce39..b8513ce1742 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -305,11 +305,11 @@ var fileDescriptor_2919b738e91bb561 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // EchoServiceClient is the client API for EchoService service. // @@ -327,10 +327,10 @@ type EchoServiceClient interface { } type echoServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewEchoServiceClient(cc *grpc.ClientConn) EchoServiceClient { +func NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient { return &echoServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index baaf20c2376..b8e1dc8c52d 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -305,11 +305,11 @@ var fileDescriptor_005d0d82a8c98d3c = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // FlowCombinationClient is the client API for FlowCombination service. // @@ -328,10 +328,10 @@ type FlowCombinationClient interface { } type flowCombinationClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewFlowCombinationClient(cc *grpc.ClientConn) FlowCombinationClient { +func NewFlowCombinationClient(cc grpc.ClientConnInterface) FlowCombinationClient { return &flowCombinationClient{cc} } diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 962da2cdfe3..f10956344b9 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -535,11 +535,11 @@ var fileDescriptor_a1fc3d96d9306f6b = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // NonStandardServiceClient is the client API for NonStandardService service. // @@ -552,10 +552,10 @@ type NonStandardServiceClient interface { } type nonStandardServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewNonStandardServiceClient(cc *grpc.ClientConn) NonStandardServiceClient { +func NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardServiceClient { return &nonStandardServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 1d7bb328396..7557524ca82 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -349,11 +349,11 @@ var fileDescriptor_272b2870183bbe20 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // ResponseBodyServiceClient is the client API for ResponseBodyService service. // @@ -366,10 +366,10 @@ type ResponseBodyServiceClient interface { } type responseBodyServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewResponseBodyServiceClient(cc *grpc.ClientConn) ResponseBodyServiceClient { +func NewResponseBodyServiceClient(cc grpc.ClientConnInterface) ResponseBodyServiceClient { return &responseBodyServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 93eab149b03..a9f080f99ae 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -58,11 +58,11 @@ var fileDescriptor_cc5dba844cf4f624 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // StreamServiceClient is the client API for StreamService service. // @@ -74,10 +74,10 @@ type StreamServiceClient interface { } type streamServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewStreamServiceClient(cc *grpc.ClientConn) StreamServiceClient { +func NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient { return &streamServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 60c4d917a2a..72f946cceda 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -122,11 +122,11 @@ var fileDescriptor_ab29419944ad9f3b = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // UnannotatedEchoServiceClient is the client API for UnannotatedEchoService service. // @@ -144,10 +144,10 @@ type UnannotatedEchoServiceClient interface { } type unannotatedEchoServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewUnannotatedEchoServiceClient(cc *grpc.ClientConn) UnannotatedEchoServiceClient { +func NewUnannotatedEchoServiceClient(cc grpc.ClientConnInterface) UnannotatedEchoServiceClient { return &unannotatedEchoServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 6eac47ee393..e910bfbdae5 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -270,11 +270,11 @@ var fileDescriptor_ed0d8910d38fbb31 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // LoginServiceClient is the client API for LoginService service. // @@ -313,10 +313,10 @@ type LoginServiceClient interface { } type loginServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewLoginServiceClient(cc *grpc.ClientConn) LoginServiceClient { +func NewLoginServiceClient(cc grpc.ClientConnInterface) LoginServiceClient { return &loginServiceClient{cc} } diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index bdba354be83..e2627b1d508 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -181,11 +181,11 @@ var fileDescriptor_70304970d74748a4 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // WrappersServiceClient is the client API for WrappersService service. // @@ -205,10 +205,10 @@ type WrappersServiceClient interface { } type wrappersServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewWrappersServiceClient(cc *grpc.ClientConn) WrappersServiceClient { +func NewWrappersServiceClient(cc grpc.ClientConnInterface) WrappersServiceClient { return &wrappersServiceClient{cc} } diff --git a/go.mod b/go.mod index e6eae3b1c5e..b77d1d9eef9 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,11 @@ require ( github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.3.2 + github.com/golang/protobuf v1.3.3 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c - google.golang.org/grpc v1.24.0 + google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 + google.golang.org/grpc v1.27.0 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 9d6c942cf9c..546ee41f6db 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,10 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= @@ -12,7 +15,11 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -48,11 +55,13 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU= +google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= diff --git a/repositories.bzl b/repositories.bzl index 477883cfad3..9418741046a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -40,8 +40,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=", - version = "v1.3.2", + sum = "h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=", + version = "v1.3.3", ) go_repository( @@ -53,8 +53,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", - sum = "h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=", - version = "v0.26.0", + sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", + version = "v0.34.0", ) go_repository( name = "in_gopkg_check_v1", @@ -78,14 +78,14 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo=", - version = "v0.0.0-20190927181202-20e1ac93f88c", + sum = "h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU=", + version = "v0.0.0-20200507105951-43844f6eee31", ) go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s=", - version = "v1.24.0", + sum = "h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=", + version = "v1.27.0", ) go_repository( name = "org_golang_x_lint", @@ -102,8 +102,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=", - version = "v0.0.0-20180821212333-d2e6202438be", + sum = "h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=", + version = "v0.0.0-20200107190931-bf48bf16ab8d", ) go_repository( name = "org_golang_x_sync", @@ -154,3 +154,27 @@ def go_repositories(): sum = "h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA=", version = "v0.0.0-20180407024304-ca021399b1a6", ) + go_repository( + name = "com_github_census_instrumentation_opencensus_proto", + importpath = "github.com/census-instrumentation/opencensus-proto", + sum = "h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=", + version = "v0.2.1", + ) + go_repository( + name = "com_github_envoyproxy_go_control_plane", + importpath = "github.com/envoyproxy/go-control-plane", + sum = "h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=", + version = "v0.9.1-0.20191026205805-5f8ba28d4473", + ) + go_repository( + name = "com_github_envoyproxy_protoc_gen_validate", + importpath = "github.com/envoyproxy/protoc-gen-validate", + sum = "h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=", + version = "v0.1.0", + ) + go_repository( + name = "com_github_prometheus_client_model", + importpath = "github.com/prometheus/client_model", + sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", + version = "v0.0.0-20190812154241-14fe0d1b01d4", + ) From fcfdaa0556a57881fd39c91658025bcf421e9288 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 05:28:52 +0000 Subject: [PATCH 0358/1518] Update google.golang.org/genproto commit hash to 43844f6 --- go.mod | 2 +- go.sum | 6 ++++-- repositories.bzl | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index ca9f273fa5c..3dce726c1ed 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c + google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 google.golang.org/grpc v1.27.1 google.golang.org/protobuf v1.21.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 3a45774ec19..0dfa8523ccc 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,7 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -63,10 +64,11 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU= +google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/repositories.bzl b/repositories.bzl index e8407d2934f..844e8645912 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo=", - version = "v0.0.0-20190927181202-20e1ac93f88c", + sum = "h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU=", + version = "v0.0.0-20200507105951-43844f6eee31", ) go_repository( name = "org_golang_google_grpc", From f33255e3c3b37ae6c26a042ed7270d21b9ef35e0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 10:18:22 +0000 Subject: [PATCH 0359/1518] Update module google.golang.org/grpc to v1.29.1 --- go.mod | 2 +- go.sum | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b77d1d9eef9..7e8a8a34785 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,6 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 - google.golang.org/grpc v1.27.0 + google.golang.org/grpc v1.29.1 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 546ee41f6db..7883ef220b1 100644 --- a/go.sum +++ b/go.sum @@ -5,7 +5,10 @@ github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -60,8 +63,11 @@ google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OK google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= From 141e1d8f93945366035b90810e3b2ae911dba2ed Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 09:33:02 +0000 Subject: [PATCH 0360/1518] Update module golang/protobuf to v1.4.1 --- examples/internal/helloworld/helloworld.pb.go | 2 +- .../internal/proto/examplepb/a_bit_of_everything.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.go | 2 +- .../internal/proto/examplepb/non_standard_names.pb.go | 2 +- .../internal/proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../proto/examplepb/unannotated_echo_service.pb.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- go.mod | 4 ++-- go.sum | 4 ++++ protoc-gen-swagger/options/annotations.pb.go | 2 +- protoc-gen-swagger/options/openapiv2.pb.go | 2 +- repositories.bzl | 8 ++++---- runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 21 files changed, 28 insertions(+), 24 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 4df007785c2..de9ca7acded 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/helloworld/helloworld.proto diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 0f6c9f69872..a01a36cd5c6 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index cedbde37734..bac43dc7c9e 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/echo_service.proto diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index b251ef6e5a2..4a92cbb3557 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/flow_combination.proto diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 9c37e1d90fb..6134100d70c 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/non_standard_names.proto diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 17d846204ae..8374bf4c5e5 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/response_body_service.proto diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 0d8e4a17fbd..758b03022c0 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/stream.proto diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 9c2f999bc44..07429187f65 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 7e8b27b1096..86aede1f0cc 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/use_go_template.proto diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 18c05592dc7..b701895f8c1 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/wrappers.proto diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 1078f51ccab..b9d3de3bc9a 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/pathenum/path_enum.proto diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index eeabe24874e..64d9903c6a4 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/sub/message.proto diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index d05c16cb295..f3b1d9c1b13 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: examples/internal/proto/sub2/message.proto diff --git a/go.mod b/go.mod index 3dce726c1ed..66b68f8f7f5 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.4.0 + github.com/golang/protobuf v1.4.1 github.com/google/go-cmp v0.4.0 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect @@ -14,6 +14,6 @@ require ( golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 google.golang.org/grpc v1.27.1 - google.golang.org/protobuf v1.21.0 + google.golang.org/protobuf v1.22.0 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 0dfa8523ccc..bc480c56221 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -78,6 +80,8 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967 h1:DwkfSP6tZMxK google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index 7e30ae32354..b9231218b48 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: protoc-gen-swagger/options/annotations.proto diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 1173e31cd68..e3b17c4b193 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: protoc-gen-swagger/options/openapiv2.proto diff --git a/repositories.bzl b/repositories.bzl index 844e8645912..1893ed7c80a 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -40,8 +40,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ=", - version = "v1.4.0", + sum = "h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=", + version = "v1.4.1", ) go_repository( @@ -181,8 +181,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw=", - version = "v1.21.0", + sum = "h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=", + version = "v1.22.0", ) go_repository( name = "org_golang_x_xerrors", diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 9750cbd53c2..e84d867427f 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: runtime/internal/examplepb/example.proto diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index 7333784a6f5..fb703cc500b 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: runtime/internal/examplepb/proto2.proto diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 5e27ac775f9..0e62f5ec83b 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.21.0 +// protoc-gen-go v1.22.0 // protoc v3.10.1 // source: runtime/internal/examplepb/proto3.proto From 736daf8a5f0c3a1c02f9935783fdfa175d5982c1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 06:55:25 +0000 Subject: [PATCH 0361/1518] Update dependency bazel_gazelle to v0.20.0 --- WORKSPACE | 6 +++--- protoc-gen-swagger/options/BUILD.bazel | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 747d9625d3a..d3c4e1b9e67 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -44,10 +44,10 @@ http_archive( http_archive( name = "bazel_gazelle", - sha256 = "86c6d481b3f7aedc1d60c1c211c6f76da282ae197c3b3160f54bd3a8f847896f", + sha256 = "d8c45ee70ec39a57e7a05e5027c32b1576cc7f16d9dd37135b0eddde45cf1b10", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", ], ) diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 9160588f860..cb037a730b2 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -33,7 +33,6 @@ proto_library( go_proto_library( name = "options_go_proto", - compilers = ["@io_bazel_rules_go//proto:go_grpc"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options", proto = ":options_proto", ) From 0b0464c3ace3c5e2ffbe9811bf800044baa7135f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 10:18:33 +0000 Subject: [PATCH 0362/1518] Update module antihax/optional to v1 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7e8a8a34785..c2bb5cb18f5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/grpc-ecosystem/grpc-gateway go 1.14 require ( - github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 + github.com/antihax/optional v1.0.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.3.3 diff --git a/go.sum b/go.sum index 7883ef220b1..5fce1e7b073 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= From 72ab46821eaa42cc038ae08dc8e5c43a24ee70db Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 05:28:29 +0000 Subject: [PATCH 0363/1518] Update golang.org/x/oauth2 commit hash to bf48bf1 --- go.mod | 2 +- go.sum | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 66b68f8f7f5..f517b5b111c 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/google/go-cmp v0.4.0 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect - golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 google.golang.org/grpc v1.27.1 diff --git a/go.sum b/go.sum index bc480c56221..e144f76bcec 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= @@ -39,14 +40,18 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= From ca4e9786a60e4fe96a3523a038dc840e8b0ae44a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 May 2020 23:46:40 +0000 Subject: [PATCH 0364/1518] Update dependency bazel_gazelle to v0.20.0 --- WORKSPACE | 6 +++--- protoc-gen-swagger/options/BUILD.bazel | 1 - repositories.bzl | 14 ++++++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 21ebb8dcb8d..21b5ee64cef 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -44,10 +44,10 @@ http_archive( http_archive( name = "bazel_gazelle", - sha256 = "86c6d481b3f7aedc1d60c1c211c6f76da282ae197c3b3160f54bd3a8f847896f", + sha256 = "d8c45ee70ec39a57e7a05e5027c32b1576cc7f16d9dd37135b0eddde45cf1b10", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", ], ) diff --git a/protoc-gen-swagger/options/BUILD.bazel b/protoc-gen-swagger/options/BUILD.bazel index 464a56d4539..fb4ff11810a 100644 --- a/protoc-gen-swagger/options/BUILD.bazel +++ b/protoc-gen-swagger/options/BUILD.bazel @@ -33,7 +33,6 @@ proto_library( go_proto_library( name = "options_go_proto", - compilers = ["@io_bazel_rules_go//proto:go_grpc"], importpath = "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options", proto = ":options_proto", ) diff --git a/repositories.bzl b/repositories.bzl index 9418741046a..2886242a205 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -84,8 +84,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=", - version = "v1.27.0", + sum = "h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=", + version = "v1.29.1", ) go_repository( name = "org_golang_x_lint", @@ -163,8 +163,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=", - version = "v0.9.1-0.20191026205805-5f8ba28d4473", + sum = "h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E=", + version = "v0.9.4", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -178,3 +178,9 @@ def go_repositories(): sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", version = "v0.0.0-20190812154241-14fe0d1b01d4", ) + go_repository( + name = "com_github_cncf_udpa_go", + importpath = "github.com/cncf/udpa/go", + sum = "h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU=", + version = "v0.0.0-20191209042840-269d4d468f6f", + ) From 32b8fbcebef33eadbc93de2a0427a31f5bf1b8bd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 00:20:07 +0000 Subject: [PATCH 0365/1518] Update dependency io_bazel_rules_go to v0.22.4 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 21b5ee64cef..be7bade7fe1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -35,10 +35,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "e88471aea3a3a4f19ec1310a55ba94772d087e9ce46e41ae38ecebe17935de7b", + sha256 = "7b9bbe3ea1fccb46dcfa6c3f3e29ba7ec740d8733370e21cdc8937467b4a4349", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.20.3/rules_go-v0.20.3.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", ], ) From 562dd79e6b4f969ccddb084e18d1065d54fe0377 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 06:55:31 +0000 Subject: [PATCH 0366/1518] Update dependency com_github_bazelbuild_buildtools to v0.29.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index d3c4e1b9e67..4a3d51f1975 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -83,9 +83,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "86592d703ecbe0c5cbb5139333a63268cf58d7efd2c459c8be8e69e77d135e29", - strip_prefix = "buildtools-0.26.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/0.26.0.tar.gz"], + sha256 = "f3ef44916e6be705ae862c0520bac6834dd2ff1d4ac7e5abc61fe9f12ce7a865", + strip_prefix = "buildtools-0.29.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/0.29.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From d2a144d2272fb18f43455dab52858870f102a42a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 10:33:34 +0000 Subject: [PATCH 0367/1518] Update module google.golang.org/grpc to v1.29.1 --- go.mod | 2 +- go.sum | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f517b5b111c..2590093f616 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 - google.golang.org/grpc v1.27.1 + google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.22.0 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index e144f76bcec..594b70182e5 100644 --- a/go.sum +++ b/go.sum @@ -5,7 +5,10 @@ github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -75,9 +78,10 @@ google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OK google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 9834258306d492595e5d91482f2fdc1d16df4224 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 11:21:22 +0000 Subject: [PATCH 0368/1518] Update dependency com_github_bazelbuild_buildtools to v3 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 4a3d51f1975..be7bade7fe1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -83,9 +83,9 @@ protobuf_deps() http_archive( name = "com_github_bazelbuild_buildtools", - sha256 = "f3ef44916e6be705ae862c0520bac6834dd2ff1d4ac7e5abc61fe9f12ce7a865", - strip_prefix = "buildtools-0.29.0", - urls = ["https://github.com/bazelbuild/buildtools/archive/0.29.0.tar.gz"], + sha256 = "a0e79f5876a1552ae8000882e4189941688f359a80b2bc1d7e3a51cab6257ba1", + strip_prefix = "buildtools-3.0.0", + urls = ["https://github.com/bazelbuild/buildtools/archive/3.0.0.tar.gz"], ) load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies") From 6f6f7bb16b1771a2fb209585e18d5d3d31304a45 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 9 May 2020 11:23:03 +0000 Subject: [PATCH 0369/1518] Update module antihax/optional to v1 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 2590093f616..60a100ad8e5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/grpc-ecosystem/grpc-gateway/v2 go 1.14 require ( - github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 + github.com/antihax/optional v1.0.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.1 diff --git a/go.sum b/go.sum index 594b70182e5..aa2f1d53582 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6 h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= diff --git a/repositories.bzl b/repositories.bzl index 1893ed7c80a..a2070e0051c 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -53,8 +53,8 @@ def go_repositories(): go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", - sum = "h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=", - version = "v0.26.0", + sum = "h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=", + version = "v0.34.0", ) go_repository( name = "in_gopkg_check_v1", @@ -102,8 +102,8 @@ def go_repositories(): go_repository( name = "org_golang_x_oauth2", importpath = "golang.org/x/oauth2", - sum = "h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=", - version = "v0.0.0-20180821212333-d2e6202438be", + sum = "h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=", + version = "v0.0.0-20200107190931-bf48bf16ab8d", ) go_repository( name = "org_golang_x_sync", @@ -151,8 +151,8 @@ def go_repositories(): go_repository( name = "com_github_antihax_optional", importpath = "github.com/antihax/optional", - sum = "h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA=", - version = "v0.0.0-20180407024304-ca021399b1a6", + sum = "h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=", + version = "v1.0.0", ) go_repository( name = "com_github_census_instrumentation_opencensus_proto", From 28a41cde27974983b2686b634efccd487b8b0897 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 9 May 2020 13:46:04 +0100 Subject: [PATCH 0370/1518] Add bazel CI caching --- .circleci/config.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3992b28143c..af230099aac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -97,11 +97,15 @@ jobs: working_directory: /src/grpc-gateway steps: - checkout + - restore_cache: + keys: + - v2-bazel-cache-{{ checksum "repositories.bzl" }} + - v2-bazel-cache- - run: name: Create Bazel config file (.bazelrc) command: | cat > .bazelrc << EOF - startup --output_base $HOME/.cache/_grpc_gateway_bazel + startup --output_base /root/.cache/_grpc_gateway_bazel build --test_output errors build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 @@ -120,6 +124,10 @@ jobs: command: 'bazel run //:buildifier_check || (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always + - save_cache: + key: v2-bazel-cache-{{ checksum "repositories.bzl" }} + paths: + - /root/.cache/_grpc_gateway_bazel gorelease: environment: ## Split key to avoid github revoking it From e927670bf9be1adb5c76cf6fbd85a48a8fc60aca Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 9 May 2020 15:09:29 +0100 Subject: [PATCH 0371/1518] Further tweak bazel resource limits Use half of the Circle runners resources. --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index af230099aac..25adeb2129b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -110,7 +110,8 @@ jobs: build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html - build --local_ram_resources=HOST_RAM*.5 + build --local_ram_resources=3072 + build --local_cpu_resources=1 EOF - run: name: Check that Bazel BUILD files are up-to-date From 8ce6067b17b7e576c3f49195479cae4b2baf2fb1 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 9 May 2020 13:46:04 +0100 Subject: [PATCH 0372/1518] Add bazel CI caching --- .circleci/config.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 32eccae168d..dc0a5f16a6e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -97,11 +97,15 @@ jobs: working_directory: /src/grpc-gateway steps: - checkout + - restore_cache: + keys: + - v2-bazel-cache-{{ checksum "repositories.bzl" }} + - v2-bazel-cache- - run: name: Create Bazel config file (.bazelrc) command: | cat > .bazelrc << EOF - startup --output_base $HOME/.cache/_grpc_gateway_bazel + startup --output_base /root/.cache/_grpc_gateway_bazel build --test_output errors build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 @@ -120,6 +124,10 @@ jobs: command: 'bazel run //:buildifier_check || (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' when: always + - save_cache: + key: v2-bazel-cache-{{ checksum "repositories.bzl" }} + paths: + - /root/.cache/_grpc_gateway_bazel gorelease: environment: ## Split key to avoid github revoking it From 2a1502554348f6a73b2f9120f1062e658e03b033 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 9 May 2020 15:09:29 +0100 Subject: [PATCH 0373/1518] Further tweak bazel resource limits Use half of the Circle runners resources. --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index dc0a5f16a6e..2f2a7ad8979 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -110,7 +110,8 @@ jobs: build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html - build --local_ram_resources=HOST_RAM*.5 + build --local_ram_resources=3072 + build --local_cpu_resources=1 EOF - run: name: Check that Bazel BUILD files are up-to-date From 029cfe8146ce289d4e6e46556286aecaf8cf7ea8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 9 May 2020 12:50:21 +0100 Subject: [PATCH 0374/1518] Consolidate error handling configuration All unary and streaming error responses are now handled with a single function each, and are configured in a single place. --- docs/_docs/customizingyourgateway.md | 49 +-- examples/internal/integration/BUILD.bazel | 3 - .../internal/integration/integration_test.go | 8 +- .../internal/integration/proto_error_test.go | 281 ------------------ repositories.bzl | 14 +- runtime/BUILD.bazel | 1 - runtime/errors.go | 74 ++--- runtime/errors_test.go | 3 +- runtime/handler.go | 2 +- runtime/mux.go | 103 +++---- runtime/mux_test.go | 133 +++------ runtime/pattern.go | 3 +- runtime/proto_errors.go | 70 ----- 13 files changed, 138 insertions(+), 606 deletions(-) delete mode 100644 examples/internal/integration/proto_error_test.go delete mode 100644 runtime/proto_errors.go diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 86e0f8d06fa..11190d832f0 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -234,24 +234,14 @@ if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opt ``` ## Error handler -The gateway uses two different error handlers for non-streaming requests: - - * `runtime.HTTPError` is called for errors from backend calls - * `runtime.OtherErrorHandler` is called for errors from parsing and routing client requests - -To override all error handling for a `*runtime.ServeMux`, use the -`runtime.WithProtoErrorHandler` serve option. - -Alternatively, you can override the global default `HTTPError` handling by -setting `runtime.GlobalHTTPErrorHandler` to a custom function, and override -the global default `OtherErrorHandler` by setting `runtime.OtherErrorHandler` -to a custom function. - -You should not set `runtime.HTTPError` directly, because that might break -any `ServeMux` set up with the `WithProtoErrorHandler` option. +To override error handling for a `*runtime.ServeMux`, use the +`runtime.WithErrorHandler` option. This will configure all unary error +responses to pass through this error handler. See https://mycodesmells.com/post/grpc-gateway-error-handler for an example -of writing a custom error handler function. +of writing a custom error handler function. Note that this post targets +the v1 release of the gateway, and you no longer assign to `HTTPError` to +configure an error handler. ## Stream Error Handler The error handler described in the previous section applies only @@ -285,40 +275,33 @@ Here's an example custom handler: // handleStreamError overrides default behavior for computing an error // message for a server stream. // -// It uses a default "502 Bad Gateway" HTTP code; only emits "safe" -// messages; and does not set gRPC code or details fields (so they will +// It uses a default "502 Bad Gateway" HTTP code, only emits "safe" +// messages and does not set the details field (so it will // be omitted from the resulting JSON object that is sent to client). -func handleStreamError(ctx context.Context, err error) *runtime.StreamError { - code := http.StatusBadGateway +func handleStreamError(ctx context.Context, err error) *status.Status { + code := codes.Internal msg := "unexpected error" if s, ok := status.FromError(err); ok { - code = runtime.HTTPStatusFromCode(s.Code()) - // default message, based on the name of the gRPC code - msg = code.String() + code = s.Code() + // default message, based on the gRPC status + msg = s.Message() // see if error details include "safe" message to send // to external callers - for _, msg := s.Details() { + for _, msg := range s.Details() { if safe, ok := msg.(*SafeMessage); ok { msg = safe.Text break } } } - return &runtime.StreamError{ - HttpCode: int32(code), - HttpStatus: http.StatusText(code), - Message: msg, - } + return status.Errorf(code, msg) } ``` If no custom handler is provided, the default stream error handler will include any gRPC error attributes (code, message, detail messages), if the error being reported includes them. If the error does not have -these attributes, a gRPC code of `Unknown` (2) is reported. The default -handler will also include an HTTP code and status, which is derived -from the gRPC code (or set to `"500 Internal Server Error"` when -the source error has no gRPC attributes). +these attributes, a gRPC code of `Unknown` (2) is reported. ## Replace a response forwarder per method You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index bcc837b56f1..9755e1b7f7c 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -7,7 +7,6 @@ go_test( "fieldmask_test.go", "integration_test.go", "main_test.go", - "proto_error_test.go", ], deps = [ "//examples/internal/clients/abe:go_default_library", @@ -23,9 +22,7 @@ go_test( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", - "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_google_go_cmp//cmp:go_default_library", - "@go_googleapis//google/rpc:errdetails_go_proto", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 075f6286e9f..c34062886b9 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1250,8 +1250,8 @@ func testABERepeated(t *testing.T, port int) { "bar", }, PathRepeatedBytesValue: [][]byte{ - []byte{0x00}, - []byte{0xFF}, + {0x00}, + {0xFF}, }, PathRepeatedUint32Value: []uint32{ 0, @@ -1378,7 +1378,7 @@ func TestUnknownPath(t *testing.T) { } } -func TestMethodNotAllowed(t *testing.T) { +func TestNotImplemented(t *testing.T) { if testing.Short() { t.Skip() return @@ -1397,7 +1397,7 @@ func TestMethodNotAllowed(t *testing.T) { return } - if got, want := resp.StatusCode, http.StatusMethodNotAllowed; got != want { + if got, want := resp.StatusCode, http.StatusNotImplemented; got != want { t.Errorf("resp.StatusCode = %d; want %d", got, want) t.Logf("%s", buf) } diff --git a/examples/internal/integration/proto_error_test.go b/examples/internal/integration/proto_error_test.go deleted file mode 100644 index 12a636c1a62..00000000000 --- a/examples/internal/integration/proto_error_test.go +++ /dev/null @@ -1,281 +0,0 @@ -package integration_test - -import ( - "context" - "fmt" - "io/ioutil" - "net/http" - "strings" - "testing" - "time" - - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/ptypes" - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "google.golang.org/genproto/googleapis/rpc/errdetails" - spb "google.golang.org/genproto/googleapis/rpc/status" - "google.golang.org/grpc/codes" -) - -func runServer(ctx context.Context, t *testing.T, port uint16) { - opt := runtime.WithProtoErrorHandler(runtime.DefaultHTTPProtoErrorHandler) - if err := runGateway(ctx, fmt.Sprintf(":%d", port), opt); err != nil { - t.Errorf("runGateway() failed with %v; want success", err) - } -} - -func TestWithProtoErrorHandler(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - const port = 8082 - go runServer(ctx, t, port) - if err := waitForGateway(ctx, 8082); err != nil { - t.Errorf("waitForGateway(ctx, 8082) failed with %v; want success", err) - } - testEcho(t, port, "v1", "application/json") - testEchoBody(t, port, "v1") -} - -func TestABEWithProtoErrorHandler(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - const port = 8083 - go runServer(ctx, t, port) - if err := waitForGateway(ctx, 8083); err != nil { - t.Errorf("waitForGateway(ctx, 8083) failed with %v; want success", err) - } - - testABECreate(t, port) - testABECreateBody(t, port) - testABEBulkCreate(t, port) - testABELookup(t, port) - testABELookupNotFoundWithProtoError(t, port) - testABELookupNotFoundWithProtoErrorIncludingDetails(t, port) - testABEList(t, port) - testABEBulkEcho(t, port) - testABEBulkEchoZeroLength(t, port) - testAdditionalBindings(t, port) -} - -func testABELookupNotFoundWithProtoError(t *testing.T, port uint16) { - url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) - uuid := "not_exist" - url = fmt.Sprintf("%s/%s", url, uuid) - resp, err := http.Get(url) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) - return - } - defer resp.Body.Close() - - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } - - if got, want := resp.StatusCode, http.StatusNotFound; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - return - } - - var msg spb.Status - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) - return - } - - if got, want := msg.Code, int32(codes.NotFound); got != want { - t.Errorf("msg.Code = %d; want %d", got, want) - return - } - - if got, want := msg.Message, "not found"; got != want { - t.Errorf("msg.Message = %s; want %s", got, want) - return - } - - if got, want := resp.Header.Get("Grpc-Metadata-Uuid"), uuid; got != want { - t.Errorf("Grpc-Metadata-Uuid was %s, wanted %s", got, want) - } - if got, want := resp.Trailer.Get("Grpc-Trailer-Foo"), "foo2"; got != want { - t.Errorf("Grpc-Trailer-Foo was %q, wanted %q", got, want) - } - if got, want := resp.Trailer.Get("Grpc-Trailer-Bar"), "bar2"; got != want { - t.Errorf("Grpc-Trailer-Bar was %q, wanted %q", got, want) - } -} - -func testABELookupNotFoundWithProtoErrorIncludingDetails(t *testing.T, port uint16) { - uuid := "errorwithdetails" - url := fmt.Sprintf("http://localhost:%d/v2/example/%s", port, uuid) - resp, err := http.Get(url) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", url, err) - return - } - defer resp.Body.Close() - - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } - - if got, want := resp.StatusCode, http.StatusInternalServerError; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - return - } - - var msg spb.Status - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) - return - } - - if got, want := msg.Code, int32(codes.Unknown); got != want { - t.Errorf("msg.Code = %d; want %d", got, want) - return - } - - if got, want := msg.Message, "with details"; got != want { - t.Errorf("msg.Message = %s; want %s", got, want) - return - } - - details := msg.Details - if got, want := len(details), 1; got != want { - t.Fatalf("got %q details, wanted %q", got, want) - } - - detail := errdetails.DebugInfo{} - if got, want := ptypes.UnmarshalAny(msg.Details[0], &detail), error(nil); got != want { - t.Errorf("unmarshaling any: got %q, wanted %q", got, want) - } - - if got, want := len(detail.StackEntries), 1; got != want { - t.Fatalf("got %d stack entries, expected %d", got, want) - } - if got, want := detail.StackEntries[0], "foo:1"; got != want { - t.Errorf("StackEntries[0]: got %q; want %q", got, want) - } -} - -func TestUnknownPathWithProtoError(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - const port = 8084 - go runServer(ctx, t, port) - if err := waitForGateway(ctx, 8084); err != nil { - t.Errorf("waitForGateway(ctx, 8084) failed with %v; want success", err) - } - - url := fmt.Sprintf("http://localhost:%d", port) - resp, err := http.Post(url, "application/json", strings.NewReader("{}")) - if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) - return - } - defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } - - if got, want := resp.StatusCode, http.StatusNotImplemented; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - } - - var msg spb.Status - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) - return - } - - if got, want := msg.Code, int32(codes.Unimplemented); got != want { - t.Errorf("msg.Code = %d; want %d", got, want) - return - } - - if msg.Message == "" { - t.Errorf("msg.Message should not be empty") - return - } -} - -func TestMethodNotAllowedWithProtoError(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - const port = 8085 - go runServer(ctx, t, port) - - // Waiting for the server's getting available. - // TODO(yugui) find a better way to wait - time.Sleep(100 * time.Millisecond) - - url := fmt.Sprintf("http://localhost:%d/v1/example/echo/myid", port) - resp, err := http.Get(url) - if err != nil { - t.Errorf("http.Post(%q) failed with %v; want success", url, err) - return - } - defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } - - if got, want := resp.StatusCode, http.StatusNotImplemented; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - } - - var msg spb.Status - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) - return - } - - if got, want := msg.Code, int32(codes.Unimplemented); got != want { - t.Errorf("msg.Code = %d; want %d", got, want) - return - } - - if msg.Message == "" { - t.Errorf("msg.Message should not be empty") - return - } -} diff --git a/repositories.bzl b/repositories.bzl index a2070e0051c..fa1a255418d 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -84,8 +84,8 @@ def go_repositories(): go_repository( name = "org_golang_google_grpc", importpath = "google.golang.org/grpc", - sum = "h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=", - version = "v1.27.1", + sum = "h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=", + version = "v1.29.1", ) go_repository( name = "org_golang_x_lint", @@ -163,8 +163,8 @@ def go_repositories(): go_repository( name = "com_github_envoyproxy_go_control_plane", importpath = "github.com/envoyproxy/go-control-plane", - sum = "h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w=", - version = "v0.9.1-0.20191026205805-5f8ba28d4473", + sum = "h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E=", + version = "v0.9.4", ) go_repository( name = "com_github_envoyproxy_protoc_gen_validate", @@ -190,3 +190,9 @@ def go_repositories(): sum = "h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=", version = "v0.0.0-20191204190536-9bdfabe68543", ) + go_repository( + name = "com_github_cncf_udpa_go", + importpath = "github.com/cncf/udpa/go", + sum = "h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU=", + version = "v0.0.0-20191209042840-269d4d468f6f", + ) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 745fa692547..b5295bd120a 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -20,7 +20,6 @@ go_library( "mux.go", "pattern.go", "proto2_convert.go", - "proto_errors.go", "query.go", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", diff --git a/runtime/errors.go b/runtime/errors.go index 58c80eec857..1a47702d5ef 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -10,6 +10,12 @@ import ( "google.golang.org/grpc/status" ) +// ErrorHandlerFunc is the signature used to configure error handling. +type ErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error) + +// StreamErrorHandlerFunc is the signature used to configure stream error handling. +type StreamErrorHandlerFunc func(context.Context, error) *status.Status + // HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. // See: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto func HTTPStatusFromCode(code codes.Code) int { @@ -55,61 +61,19 @@ func HTTPStatusFromCode(code codes.Code) int { return http.StatusInternalServerError } -var ( - // HTTPError replies to the request with an error. - // - // HTTPError is called: - // - From generated per-endpoint gateway handler code, when calling the backend results in an error. - // - From gateway runtime code, when forwarding the response message results in an error. - // - // The default value for HTTPError calls the custom error handler configured on the ServeMux via the - // WithProtoErrorHandler serve option if that option was used, calling GlobalHTTPErrorHandler otherwise. - // - // To customize the error handling of a particular ServeMux instance, use the WithProtoErrorHandler - // serve option. - // - // To customize the error format for all ServeMux instances not using the WithProtoErrorHandler serve - // option, set GlobalHTTPErrorHandler to a custom function. - // - // Setting this variable directly to customize error format is deprecated. - HTTPError = MuxOrGlobalHTTPError - - // GlobalHTTPErrorHandler is the HTTPError handler for all ServeMux instances not using the - // WithProtoErrorHandler serve option. - // - // You can set a custom function to this variable to customize error format. - GlobalHTTPErrorHandler = DefaultHTTPError - - // OtherErrorHandler handles gateway errors from parsing and routing client requests for all - // ServeMux instances not using the WithProtoErrorHandler serve option. - // - // It returns the following error codes: StatusMethodNotAllowed StatusNotFound StatusBadRequest - // - // To customize parsing and routing error handling of a particular ServeMux instance, use the - // WithProtoErrorHandler serve option. - // - // To customize parsing and routing error handling of all ServeMux instances not using the - // WithProtoErrorHandler serve option, set a custom function to this variable. - OtherErrorHandler = DefaultOtherErrorHandler -) - -// MuxOrGlobalHTTPError uses the mux-configured error handler, falling back to GlobalErrorHandler. -func MuxOrGlobalHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) { - if mux.protoErrorHandler != nil { - mux.protoErrorHandler(ctx, mux, marshaler, w, r, err) - } else { - GlobalHTTPErrorHandler(ctx, mux, marshaler, w, r, err) - } +// HTTPError uses the mux-configured error handler. +func HTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) { + mux.errorHandler(ctx, mux, marshaler, w, r, err) } -// DefaultHTTPError is the default implementation of HTTPError. -// If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. +// defaultHTTPErrorHandler is the default error handler. +// If "err" is a gRPC Status, the function replies with the status code mapped by HTTPStatusFromCode. // If otherwise, it replies with http.StatusInternalServerError. // -// The response body returned by this function is a JSON object, -// which contains a member whose key is "message" and whose value is err.Error(). -func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { - const fallback = `{"error": "failed to marshal error message"}` +// The response body written by this function is a Status message marshaled by the Marshaler. +func defaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { + // return Internal when Marshal failed + const fallback = `{"code": 13, "message": "failed to marshal error message"}` s := status.Convert(err) pb := s.Proto() @@ -117,7 +81,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w w.Header().Del("Trailer") contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability + // Check marshaler at runtime in order to keep backwards compatibility. // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { @@ -151,8 +115,6 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w handleForwardResponseTrailer(w, md) } -// DefaultOtherErrorHandler is the default implementation of OtherErrorHandler. -// It simply writes a string representation of the given error into "w". -func DefaultOtherErrorHandler(w http.ResponseWriter, _ *http.Request, msg string, code int) { - http.Error(w, msg, code) +func defaultStreamErrorHandler(_ context.Context, err error) *status.Status { + return status.Convert(err) } diff --git a/runtime/errors_test.go b/runtime/errors_test.go index 83ec1666a03..5ba54eb97db 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -62,7 +62,8 @@ func TestDefaultHTTPError(t *testing.T) { } { w := httptest.NewRecorder() req, _ := http.NewRequest("", "", nil) // Pass in an empty request to match the signature - runtime.DefaultHTTPError(ctx, &runtime.ServeMux{}, &runtime.JSONPb{}, w, req, spec.err) + mux := runtime.NewServeMux() + runtime.HTTPError(ctx, mux, &runtime.JSONPb{}, w, req, spec.err) if got, want := w.Header().Get("Content-Type"), "application/json"; got != want { t.Errorf(`w.Header().Get("Content-Type") = %q; want %q; on spec.err=%v`, got, want, spec.err) diff --git a/runtime/handler.go b/runtime/handler.go index c519d5d098d..4cbf8f46259 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -186,7 +186,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re } func handleForwardResponseStreamError(ctx context.Context, wroteHeader bool, marshaler Marshaler, w http.ResponseWriter, req *http.Request, mux *ServeMux, err error) { - st := status.Convert(err) + st := mux.streamErrorHandler(ctx, err) if !wroteHeader { w.WriteHeader(HTTPStatusFromCode(st.Code())) } diff --git a/runtime/mux.go b/runtime/mux.go index eb7e435365e..70caae1dade 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -16,14 +16,6 @@ import ( // A HandlerFunc handles a specific pair of path pattern and HTTP method. type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) -// ErrUnknownURI is the error supplied to a custom ProtoErrorHandlerFunc when -// a request is received with a URI path that does not match any registered -// service method. -// -// Since gRPC servers return an "Unimplemented" code for requests with an -// unrecognized URI path, this error also has a gRPC "Unimplemented" code. -var ErrUnknownURI = status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented)) - // ServeMux is a request multiplexer for grpc-gateway. // It matches http requests to patterns and invokes the corresponding handler. type ServeMux struct { @@ -34,7 +26,8 @@ type ServeMux struct { incomingHeaderMatcher HeaderMatcherFunc outgoingHeaderMatcher HeaderMatcherFunc metadataAnnotators []func(context.Context, *http.Request) metadata.MD - protoErrorHandler ProtoErrorHandlerFunc + errorHandler ErrorHandlerFunc + streamErrorHandler StreamErrorHandlerFunc disablePathLengthFallback bool lastMatchWins bool } @@ -110,14 +103,26 @@ func WithMetadata(annotator func(context.Context, *http.Request) metadata.MD) Se } } -// WithProtoErrorHandler returns a ServeMuxOption for configuring a custom error handler. +// WithErrorHandler returns a ServeMuxOption for configuring a custom error handler. // -// This can be used to handle an error as general proto message defined by gRPC. -// When this option is used, the mux uses the configured error handler instead of HTTPError and -// OtherErrorHandler. -func WithProtoErrorHandler(fn ProtoErrorHandlerFunc) ServeMuxOption { +// This can be used to configure a custom error response. +func WithErrorHandler(fn ErrorHandlerFunc) ServeMuxOption { return func(serveMux *ServeMux) { - serveMux.protoErrorHandler = fn + serveMux.errorHandler = fn + } +} + +// WithStreamErrorHandler returns a ServeMuxOption that will use the given custom stream +// error handler, which allows for customizing the error trailer for server-streaming +// calls. +// +// For stream errors that occur before any response has been written, the mux's +// ErrorHandler will be invoked. However, once data has been written, the errors must +// be handled differently: they must be included in the response body. The response body's +// final message will include the error details returned by the stream error handler. +func WithStreamErrorHandler(fn StreamErrorHandlerFunc) ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.streamErrorHandler = fn } } @@ -143,6 +148,8 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { handlers: make(map[string][]handler), forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), marshalers: makeMarshalerMIMERegistry(), + errorHandler: defaultHTTPErrorHandler, + streamErrorHandler: defaultStreamErrorHandler, } for _, opt := range opts { @@ -177,28 +184,23 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path if !strings.HasPrefix(path, "/") { - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.InvalidArgument, http.StatusText(http.StatusBadRequest)) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) - } else { - OtherErrorHandler(w, r, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) - } + _, outboundMarshaler := MarshalerForRequest(s, r) + sterr := status.Error(codes.InvalidArgument, http.StatusText(http.StatusBadRequest)) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) return } components := strings.Split(path[1:], "/") l := len(components) var verb string - if idx := strings.LastIndex(components[l-1], ":"); idx == 0 { - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) - } else { - OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) - } + idx := strings.LastIndex(components[l-1], ":") + if idx == 0 { + _, outboundMarshaler := MarshalerForRequest(s, r) + sterr := status.Error(codes.NotFound, http.StatusText(http.StatusNotFound)) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) return - } else if idx > 0 { + } + if idx > 0 { c := components[l-1] components[l-1], verb = c[:idx], c[idx+1:] } @@ -206,13 +208,9 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && s.isPathLengthFallback(r) { r.Method = strings.ToUpper(override) if err := r.ParseForm(); err != nil { - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.InvalidArgument, err.Error()) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) - } else { - OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest) - } + _, outboundMarshaler := MarshalerForRequest(s, r) + sterr := status.Error(codes.InvalidArgument, err.Error()) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) return } } @@ -226,7 +224,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { } // lookup other methods to handle fallback from GET to POST and - // to determine if it is MethodNotAllowed or NotFound. + // to determine if it is NotImplemented or NotFound. for m, handlers := range s.handlers { if m == r.Method { continue @@ -239,34 +237,25 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { // X-HTTP-Method-Override is optional. Always allow fallback to POST. if s.isPathLengthFallback(r) { if err := r.ParseForm(); err != nil { - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - sterr := status.Error(codes.InvalidArgument, err.Error()) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, sterr) - } else { - OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest) - } + _, outboundMarshaler := MarshalerForRequest(s, r) + sterr := status.Error(codes.InvalidArgument, err.Error()) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) return } h.h(w, r, pathParams) return } - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) - } else { - OtherErrorHandler(w, r, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) - } + _, outboundMarshaler := MarshalerForRequest(s, r) + // codes.Unimplemented is the closes we have to MethodNotAllowed + sterr := status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented)) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) return } } - if s.protoErrorHandler != nil { - _, outboundMarshaler := MarshalerForRequest(s, r) - s.protoErrorHandler(ctx, s, outboundMarshaler, w, r, ErrUnknownURI) - } else { - OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) - } + _, outboundMarshaler := MarshalerForRequest(s, r) + sterr := status.Error(codes.NotFound, http.StatusText(http.StatusNotFound)) + s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr) } // GetForwardResponseOptions returns the ForwardResponseOptions associated with this ServeMux. diff --git a/runtime/mux_test.go b/runtime/mux_test.go index 21ea5d143f5..da74f1410ee 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -2,16 +2,14 @@ package runtime_test import ( "bytes" - "context" "fmt" "net/http" "net/http/httptest" + "strconv" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" ) func TestMuxServeHTTP(t *testing.T) { @@ -21,7 +19,7 @@ func TestMuxServeHTTP(t *testing.T) { pool []string verb string } - for _, spec := range []struct { + for i, spec := range []struct { patterns []stubPattern patternOpts []runtime.PatternOpt @@ -33,7 +31,6 @@ func TestMuxServeHTTP(t *testing.T) { respContent string disablePathLengthFallback bool - errHandler runtime.ProtoErrorHandlerFunc muxOpts []runtime.ServeMuxOption }{ { @@ -112,7 +109,7 @@ func TestMuxServeHTTP(t *testing.T) { }, reqMethod: "DELETE", reqPath: "/foo", - respStatus: http.StatusMethodNotAllowed, + respStatus: http.StatusNotImplemented, }, { patterns: []stubPattern{ @@ -143,8 +140,7 @@ func TestMuxServeHTTP(t *testing.T) { headers: map[string]string{ "Content-Type": "application/x-www-form-urlencoded", }, - respStatus: http.StatusMethodNotAllowed, - respContent: "Method Not Allowed\n", + respStatus: http.StatusNotImplemented, disablePathLengthFallback: true, }, { @@ -204,7 +200,7 @@ func TestMuxServeHTTP(t *testing.T) { headers: map[string]string{ "Content-Type": "application/json", }, - respStatus: http.StatusMethodNotAllowed, + respStatus: http.StatusNotImplemented, }, { patterns: []stubPattern{ @@ -245,38 +241,6 @@ func TestMuxServeHTTP(t *testing.T) { respStatus: http.StatusOK, respContent: "GET /foo/{id=*}:verb", }, - { - // mux identifying invalid path results in 'Not Found' status - // (with custom handler looking for ErrUnknownURI) - patterns: []stubPattern{ - { - method: "GET", - ops: []int{int(utilities.OpLitPush), 0}, - pool: []string{"unimplemented"}, - }, - }, - reqMethod: "GET", - reqPath: "/foobar", - respStatus: http.StatusNotFound, - respContent: "GET /foobar", - errHandler: unknownPathIs404, - }, - { - // server returning unimplemented results in 'Not Implemented' code - // even when using custom error handler - patterns: []stubPattern{ - { - method: "GET", - ops: []int{int(utilities.OpLitPush), 0}, - pool: []string{"unimplemented"}, - }, - }, - reqMethod: "GET", - reqPath: "/unimplemented", - respStatus: http.StatusNotImplemented, - respContent: `GET /unimplemented`, - errHandler: unknownPathIs404, - }, { patterns: []stubPattern{ { @@ -336,64 +300,45 @@ func TestMuxServeHTTP(t *testing.T) { muxOpts: []runtime.ServeMuxOption{runtime.WithLastMatchWins()}, }, } { - opts := spec.muxOpts - if spec.disablePathLengthFallback { - opts = append(opts, runtime.WithDisablePathLengthFallback()) - } - if spec.errHandler != nil { - opts = append(opts, runtime.WithProtoErrorHandler(spec.errHandler)) - } - mux := runtime.NewServeMux(opts...) - for _, p := range spec.patterns { - func(p stubPattern) { - pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb, spec.patternOpts...) - if err != nil { - t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) - } - mux.Handle(p.method, pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { - if r.URL.Path == "/unimplemented" { - // simulate method returning "unimplemented" error - _, m := runtime.MarshalerForRequest(mux, r) - runtime.HTTPError(r.Context(), mux, m, w, r, status.Error(codes.Unimplemented, http.StatusText(http.StatusNotImplemented))) - w.WriteHeader(http.StatusNotImplemented) - return + t.Run(strconv.Itoa(i), func(t *testing.T) { + opts := spec.muxOpts + if spec.disablePathLengthFallback { + opts = append(opts, runtime.WithDisablePathLengthFallback()) + } + mux := runtime.NewServeMux(opts...) + for _, p := range spec.patterns { + func(p stubPattern) { + pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb, spec.patternOpts...) + if err != nil { + t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) } - fmt.Fprintf(w, "%s %s", p.method, pat.String()) - }) - }(p) - } - - url := fmt.Sprintf("http://host.example%s", spec.reqPath) - r, err := http.NewRequest(spec.reqMethod, url, bytes.NewReader(nil)) - if err != nil { - t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", spec.reqMethod, url, err) - } - for name, value := range spec.headers { - r.Header.Set(name, value) - } - w := httptest.NewRecorder() - mux.ServeHTTP(w, r) + mux.Handle(p.method, pat, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) { + fmt.Fprintf(w, "%s %s", p.method, pat.String()) + }) + }(p) + } - if got, want := w.Code, spec.respStatus; got != want { - t.Errorf("w.Code = %d; want %d; patterns=%v; req=%v", got, want, spec.patterns, r) - } - if spec.respContent != "" { - if got, want := w.Body.String(), spec.respContent; got != want { - t.Errorf("w.Body = %q; want %q; patterns=%v; req=%v", got, want, spec.patterns, r) + url := fmt.Sprintf("http://host.example%s", spec.reqPath) + r, err := http.NewRequest(spec.reqMethod, url, bytes.NewReader(nil)) + if err != nil { + t.Fatalf("http.NewRequest(%q, %q, nil) failed with %v; want success", spec.reqMethod, url, err) } - } - } -} + for name, value := range spec.headers { + r.Header.Set(name, value) + } + w := httptest.NewRecorder() + mux.ServeHTTP(w, r) -func unknownPathIs404(ctx context.Context, mux *runtime.ServeMux, m runtime.Marshaler, w http.ResponseWriter, r *http.Request, err error) { - if err == runtime.ErrUnknownURI { - w.WriteHeader(http.StatusNotFound) - } else { - c := status.Convert(err).Code() - w.WriteHeader(runtime.HTTPStatusFromCode(c)) + if got, want := w.Code, spec.respStatus; got != want { + t.Errorf("w.Code = %d; want %d; patterns=%v; req=%v", got, want, spec.patterns, r) + } + if spec.respContent != "" { + if got, want := w.Body.String(), spec.respContent; got != want { + t.Errorf("w.Body = %q; want %q; patterns=%v; req=%v", got, want, spec.patterns, r) + } + } + }) } - - fmt.Fprintf(w, "%s %s", r.Method, r.URL.Path) } var defaultHeaderMatcherTests = []struct { diff --git a/runtime/pattern.go b/runtime/pattern.go index c2e4bf956b0..a1bd2496fc9 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -21,7 +21,8 @@ type op struct { operand int } -// Pattern is a template pattern of http request paths defined in github.com/googleapis/googleapis/google/api/http.proto. +// Pattern is a template pattern of http request paths defined in +// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto type Pattern struct { // ops is a list of operations ops []op diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go deleted file mode 100644 index b0cf0d0bb3f..00000000000 --- a/runtime/proto_errors.go +++ /dev/null @@ -1,70 +0,0 @@ -package runtime - -import ( - "context" - "io" - "net/http" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/status" -) - -// ProtoErrorHandlerFunc handles the error as a gRPC error generated via status package and replies to the request. -type ProtoErrorHandlerFunc func(context.Context, *ServeMux, Marshaler, http.ResponseWriter, *http.Request, error) - -var _ ProtoErrorHandlerFunc = DefaultHTTPProtoErrorHandler - -// DefaultHTTPProtoErrorHandler is an implementation of HTTPError. -// If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. -// If otherwise, it replies with http.StatusInternalServerError. -// -// The response body returned by this function is a Status message marshaled by a Marshaler. -// -// Do not set this function to HTTPError variable directly, use WithProtoErrorHandler option instead. -func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { - // return Internal when Marshal failed - const fallback = `{"code": 13, "message": "failed to marshal error message"}` - - s, ok := status.FromError(err) - if !ok { - s = status.New(codes.Unknown, err.Error()) - } - - w.Header().Del("Trailer") - - contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability - // An interface param needs to be added to the ContentType() function on - // the Marshal interface to be able to remove this check - if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { - pb := s.Proto() - contentType = typeMarshaler.ContentTypeFromMessage(pb) - } - w.Header().Set("Content-Type", contentType) - - buf, merr := marshaler.Marshal(s.Proto()) - if merr != nil { - grpclog.Infof("Failed to marshal error message %q: %v", s.Proto(), merr) - w.WriteHeader(http.StatusInternalServerError) - if _, err := io.WriteString(w, fallback); err != nil { - grpclog.Infof("Failed to write response: %v", err) - } - return - } - - md, ok := ServerMetadataFromContext(ctx) - if !ok { - grpclog.Infof("Failed to extract ServerMetadata from context") - } - - handleForwardResponseServerMetadata(w, mux, md) - handleForwardResponseTrailerHeader(w, md) - st := HTTPStatusFromCode(s.Code()) - w.WriteHeader(st) - if _, err := w.Write(buf); err != nil { - grpclog.Infof("Failed to write response: %v", err) - } - - handleForwardResponseTrailer(w, md) -} From aa09c60bf3ef5ffe34b67c68deaaa584e0464a38 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 12 May 2020 14:00:16 +0530 Subject: [PATCH 0375/1518] Improved docs/_docs/season_of_docs.md (#1317) --- docs/_docs/season_of_docs.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md index a0d22c5b529..79262ce2698 100644 --- a/docs/_docs/season_of_docs.md +++ b/docs/_docs/season_of_docs.md @@ -12,13 +12,12 @@ We're excited to see what contributions this will bring to our documentation. ## Project details - Organization name: **gRPC-Gateway** - - Organization description: The gRPC-Gateway brings the power and safety - of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several + - Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several common use cases: - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API to old users. - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - - When quickly iterating on an JSON/HTTP API design. + - When quickly iterating on a JSON/HTTP API design. - Website: https://grpc-ecosystem.github.io/grpc-gateway - Repo: https://github.com/grpc-ecosystem/grpc-gateway - Project administrators and mentors: @@ -74,7 +73,7 @@ The ones mentioned in the project details are the primary use cases we advertise - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - When quickly iterating on an JSON/HTTP API design. -It could be a single or several blog posts on our docs site, or another site, like medium. +It could be a single or several blog posts on our docs site, or another site, like Medium. ### Improve the "customize your gateway" section of the docs @@ -86,7 +85,7 @@ a bit better. Maybe it could be rewritten as a FAQ that details solutions to com Material: - [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) -### Improve the contributors guide +### Improve the contributor's guide This is currently split between [CONTRIBUTING.md] @@ -107,8 +106,8 @@ This should include: - A list of all the breaking changes and their consequences for the user. - For each breaking change, a guide to how their systems may need to be changed. -Currently the scope of the v2 release is not entirely known, as it is still in progress, but we will -endavour not to make too many breaking changes as that will discourage users from upgrading. +Currently, the scope of the v2 release is not entirely known, as it is still in progress, but we will +endeavour not to make too many breaking changes as that will discourage users from upgrading. Material: - [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) From d88f9573560a91d26e759852a849e525bf2ec31f Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 12 May 2020 14:02:06 +0530 Subject: [PATCH 0376/1518] Fixed typo and grammar in docs/_docs/usage.md (#1318) --- docs/_docs/usage.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 924c3467c5e..23d613dd812 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -5,7 +5,7 @@ category: documentation # How do I use this? ## Installation -First you need to install ProtocolBuffers 3.0.0-beta-3 or later. +First, you need to install ProtocolBuffers 3.0.0-beta-3 or later. ```sh mkdir tmp @@ -118,11 +118,11 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. It will generate a reverse proxy `path/to/your_service.pb.gw.go`. - Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. + Note: After generating the code for each of the stubs, to build the code, you will want to run ```go get .``` from the directory containing the stubs. -6. Write an entrypoint +6. Write an entry point - Now you need to write an entrypoint of the proxy server. + Now you need to write an entry point of the proxy server. ```go package main @@ -189,12 +189,12 @@ example: ``` `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import path. -They are compatible to [the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). +They are compatible with [the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). -In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). -This parameter can be useful to pass request scoped context between the gateway and the gRPC service. +Besides we also support the `request_context` parameter to use the `http.Request`'s Context (only for Go 1.7 and above). +This parameter can be useful to pass the request-scoped context between the gateway and the gRPC service. -`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. +`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with the parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger output (for example, `json_names_for_fields` to output JSON names for fields @@ -209,7 +209,7 @@ for examples. * [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) * HTTP request source IP is added as `X-Forwarded-For` gRPC request header -* HTTP request host is added as `X-Forwarded-Host` gRPC request header +* HTTP request-host is added as `X-Forwarded-Host` gRPC request header * HTTP `Authorization` header is added as `authorization` gRPC request header * Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header * HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (after removing prefix 'Grpc-Metadata-') From fe53821d24fdcf1f4ec9fa14cf01b03c2d672bfa Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 12 May 2020 20:21:03 +0530 Subject: [PATCH 0377/1518] Improved docs/_docs/season_of_docs.md (v2) (#1319) --- docs/_docs/season_of_docs.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md index a0d22c5b529..79262ce2698 100644 --- a/docs/_docs/season_of_docs.md +++ b/docs/_docs/season_of_docs.md @@ -12,13 +12,12 @@ We're excited to see what contributions this will bring to our documentation. ## Project details - Organization name: **gRPC-Gateway** - - Organization description: The gRPC-Gateway brings the power and safety - of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several + - Organization description: The gRPC-Gateway brings the power and safety of designing APIs with Protobuf and gRPC to the JSON/HTTP API world. It has several common use cases: - When a user wants to migrate an API to gRPC, but needs to expose a JSON/HTTP API to old users. - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - - When quickly iterating on an JSON/HTTP API design. + - When quickly iterating on a JSON/HTTP API design. - Website: https://grpc-ecosystem.github.io/grpc-gateway - Repo: https://github.com/grpc-ecosystem/grpc-gateway - Project administrators and mentors: @@ -74,7 +73,7 @@ The ones mentioned in the project details are the primary use cases we advertise - When a user wants to expose an existing gRPC API to a JSON/HTTP API audience. - When quickly iterating on an JSON/HTTP API design. -It could be a single or several blog posts on our docs site, or another site, like medium. +It could be a single or several blog posts on our docs site, or another site, like Medium. ### Improve the "customize your gateway" section of the docs @@ -86,7 +85,7 @@ a bit better. Maybe it could be rewritten as a FAQ that details solutions to com Material: - [The customize your gateway page](https://grpc-ecosystem.github.io/grpc-gateway/docs/customizingyourgateway.html) -### Improve the contributors guide +### Improve the contributor's guide This is currently split between [CONTRIBUTING.md] @@ -107,8 +106,8 @@ This should include: - A list of all the breaking changes and their consequences for the user. - For each breaking change, a guide to how their systems may need to be changed. -Currently the scope of the v2 release is not entirely known, as it is still in progress, but we will -endavour not to make too many breaking changes as that will discourage users from upgrading. +Currently, the scope of the v2 release is not entirely known, as it is still in progress, but we will +endeavour not to make too many breaking changes as that will discourage users from upgrading. Material: - [v2 Tracking issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/1223) From 3e4dfad4be20aa0b1796627c61eb66ce0dcf574b Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 12 May 2020 21:22:37 +0530 Subject: [PATCH 0378/1518] fixed typo in docs/_docs/usage.md in v2 branch (#1320) --- docs/_docs/usage.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 924c3467c5e..23d613dd812 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -5,7 +5,7 @@ category: documentation # How do I use this? ## Installation -First you need to install ProtocolBuffers 3.0.0-beta-3 or later. +First, you need to install ProtocolBuffers 3.0.0-beta-3 or later. ```sh mkdir tmp @@ -118,11 +118,11 @@ Make sure that your `$GOPATH/bin` is in your `$PATH`. It will generate a reverse proxy `path/to/your_service.pb.gw.go`. - Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. + Note: After generating the code for each of the stubs, to build the code, you will want to run ```go get .``` from the directory containing the stubs. -6. Write an entrypoint +6. Write an entry point - Now you need to write an entrypoint of the proxy server. + Now you need to write an entry point of the proxy server. ```go package main @@ -189,12 +189,12 @@ example: ``` `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import path. -They are compatible to [the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). +They are compatible with [the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). -In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). -This parameter can be useful to pass request scoped context between the gateway and the gRPC service. +Besides we also support the `request_context` parameter to use the `http.Request`'s Context (only for Go 1.7 and above). +This parameter can be useful to pass the request-scoped context between the gateway and the gRPC service. -`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. +`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with the parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger output (for example, `json_names_for_fields` to output JSON names for fields @@ -209,7 +209,7 @@ for examples. * [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) * HTTP request source IP is added as `X-Forwarded-For` gRPC request header -* HTTP request host is added as `X-Forwarded-Host` gRPC request header +* HTTP request-host is added as `X-Forwarded-Host` gRPC request header * HTTP `Authorization` header is added as `authorization` gRPC request header * Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header * HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (after removing prefix 'Grpc-Metadata-') From 2abb35733d4ea41a55c82a8f91247c78e0f3b75f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 13 May 2020 12:08:33 +0100 Subject: [PATCH 0379/1518] Renovate: run go mod tidy after updates --- renovate.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/renovate.json b/renovate.json index 14f3401a591..271f4fbb9b9 100644 --- a/renovate.json +++ b/renovate.json @@ -5,5 +5,8 @@ "baseBranches": [ "master", "v2" + ], + "postUpdateOptions": [ + "gomodTidy" ] } From f189ce789482aac26b67c3660b198bfcaa0a825d Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Wed, 13 May 2020 12:08:33 +0100 Subject: [PATCH 0380/1518] Renovate: run go mod tidy after updates --- renovate.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000000..271f4fbb9b9 --- /dev/null +++ b/renovate.json @@ -0,0 +1,12 @@ +{ + "extends": [ + "config:base" + ], + "baseBranches": [ + "master", + "v2" + ], + "postUpdateOptions": [ + "gomodTidy" + ] +} From 4a1e23a44c58ba999e520271d553d1c59009414f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 May 2020 11:17:54 +0000 Subject: [PATCH 0381/1518] Update google.golang.org/genproto commit hash to 09dca8e --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c2bb5cb18f5..92bbb736f08 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 + google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 google.golang.org/grpc v1.29.1 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 5fce1e7b073..ceb4b4e0933 100644 --- a/go.sum +++ b/go.sum @@ -59,8 +59,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU= -google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= From 9f52fd1a81739b9b992cc513c79cf4670581bfb1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 May 2020 11:20:15 +0000 Subject: [PATCH 0382/1518] Update google.golang.org/genproto commit hash to 09dca8e --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 60a100ad8e5..2292b2926ac 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 + google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.22.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index aa2f1d53582..16c6884a4f1 100644 --- a/go.sum +++ b/go.sum @@ -74,8 +74,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31 h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU= -google.golang.org/genproto v0.0.0-20200507105951-43844f6eee31/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= From 448189fc6cb1355803a7958cf0d492e4deb91958 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 May 2020 23:44:56 +0000 Subject: [PATCH 0383/1518] Update dependency io_bazel_rules_go to v0.23.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index be7bade7fe1..f7a70739746 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -35,10 +35,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "7b9bbe3ea1fccb46dcfa6c3f3e29ba7ec740d8733370e21cdc8937467b4a4349", + sha256 = "6a68e269802911fa419abb940c850734086869d7fe9bc8e12aaf60a09641c818", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.22.4/rules_go-v0.22.4.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.23.0/rules_go-v0.23.0.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.23.0/rules_go-v0.23.0.tar.gz", ], ) From 77f9ac83549f5d7f82a341899643d974eca9ebb5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2020 01:14:19 +0000 Subject: [PATCH 0384/1518] Update dependency bazel_gazelle to v0.21.0 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index f7a70739746..bda4c836282 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -44,10 +44,10 @@ http_archive( http_archive( name = "bazel_gazelle", - sha256 = "d8c45ee70ec39a57e7a05e5027c32b1576cc7f16d9dd37135b0eddde45cf1b10", + sha256 = "bfd86b3cbe855d6c16c6fce60d76bd51f5c8dbc9cfcaef7a2bb5c1aafd0710e8", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.20.0/bazel-gazelle-v0.20.0.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.21.0/bazel-gazelle-v0.21.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.21.0/bazel-gazelle-v0.21.0.tar.gz", ], ) From 43ced791c385fcb56edb3dd159557ca194df1d84 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Tue, 5 May 2020 23:24:35 +0100 Subject: [PATCH 0385/1518] runtime: rewrite query.go in new protoreflect --- repositories.bzl | 4 +- runtime/BUILD.bazel | 5 + runtime/internal/examplepb/proto3.pb.go | 588 +++++++++++++----------- runtime/internal/examplepb/proto3.proto | 3 + runtime/marshal_jsonpb.go | 14 + runtime/query.go | 517 +++++++++------------ runtime/query_test.go | 102 ++-- 7 files changed, 589 insertions(+), 644 deletions(-) diff --git a/repositories.bzl b/repositories.bzl index fa1a255418d..5c17c206ac1 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU=", - version = "v0.0.0-20200507105951-43844f6eee31", + sum = "h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig=", + version = "v0.0.0-20200513103714-09dca8ec2884", ) go_repository( name = "org_golang_google_grpc", diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index b5295bd120a..4d86de7b055 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -28,6 +28,7 @@ go_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", + "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", @@ -38,6 +39,9 @@ go_library( "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", + "@org_golang_google_protobuf//reflect/protoregistry:go_default_library", ], ) @@ -79,6 +83,7 @@ go_test( "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 0e62f5ec83b..bcebc066a92 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -83,48 +83,51 @@ type Proto3Message struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` - FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` - DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` - Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` - Int32Value int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` - Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` - Uint32Value uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - BoolValue bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` - StringValue string `protobuf:"bytes,8,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` - BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` - RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` - EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"enum_value,omitempty"` - RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"repeated_enum,omitempty"` - TimestampValue *timestamp.Timestamp `protobuf:"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` - DurationValue *duration.Duration `protobuf:"bytes,14,opt,name=duration_value,json=durationValue,proto3" json:"duration_value,omitempty"` - FieldmaskValue *field_mask.FieldMask `protobuf:"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3" json:"fieldmask_value,omitempty"` + // Next number: 46 + Nested *Proto3Message `protobuf:"bytes,41,opt,name=nested,proto3" json:"nested,omitempty"` + FloatValue float32 `protobuf:"fixed32,42,opt,name=float_value,json=floatValue,proto3" json:"float_value,omitempty"` + DoubleValue float64 `protobuf:"fixed64,43,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"` + Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3" json:"int64_value,omitempty"` + Int32Value int32 `protobuf:"varint,4,opt,name=int32_value,json=int32Value,proto3" json:"int32_value,omitempty"` + Uint64Value uint64 `protobuf:"varint,5,opt,name=uint64_value,json=uint64Value,proto3" json:"uint64_value,omitempty"` + Uint32Value uint32 `protobuf:"varint,6,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` + BoolValue bool `protobuf:"varint,7,opt,name=bool_value,json=boolValue,proto3" json:"bool_value,omitempty"` + StringValue string `protobuf:"bytes,8,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` + BytesValue []byte `protobuf:"bytes,9,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` + RepeatedValue []string `protobuf:"bytes,10,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` + RepeatedMessage []*wrappers.UInt64Value `protobuf:"bytes,44,rep,name=repeated_message,json=repeatedMessage,proto3" json:"repeated_message,omitempty"` + EnumValue EnumValue `protobuf:"varint,11,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"enum_value,omitempty"` + RepeatedEnum []EnumValue `protobuf:"varint,12,rep,packed,name=repeated_enum,json=repeatedEnum,proto3,enum=grpc.gateway.runtime.internal.examplepb.EnumValue" json:"repeated_enum,omitempty"` + TimestampValue *timestamp.Timestamp `protobuf:"bytes,13,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` + DurationValue *duration.Duration `protobuf:"bytes,14,opt,name=duration_value,json=durationValue,proto3" json:"duration_value,omitempty"` + FieldmaskValue *field_mask.FieldMask `protobuf:"bytes,15,opt,name=fieldmask_value,json=fieldmaskValue,proto3" json:"fieldmask_value,omitempty"` // Types that are assignable to OneofValue: // *Proto3Message_OneofBoolValue // *Proto3Message_OneofStringValue - OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` - WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` - WrapperFloatValue *wrappers.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` - WrapperInt64Value *wrappers.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` - WrapperInt32Value *wrappers.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3" json:"wrapper_int32_value,omitempty"` - WrapperUInt64Value *wrappers.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3" json:"wrapper_u_int64_value,omitempty"` - WrapperUInt32Value *wrappers.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3" json:"wrapper_u_int32_value,omitempty"` - WrapperBoolValue *wrappers.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3" json:"wrapper_bool_value,omitempty"` - WrapperStringValue *wrappers.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3" json:"wrapper_string_value,omitempty"` - WrapperBytesValue *wrappers.BytesValue `protobuf:"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3" json:"wrapper_bytes_value,omitempty"` - MapValue map[string]string `protobuf:"bytes,26,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue2 map[string]int32 `protobuf:"bytes,27,rep,name=map_value2,json=mapValue2,proto3" json:"map_value2,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue3 map[int32]string `protobuf:"bytes,28,rep,name=map_value3,json=mapValue3,proto3" json:"map_value3,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue4 map[string]int64 `protobuf:"bytes,29,rep,name=map_value4,json=mapValue4,proto3" json:"map_value4,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue5 map[int64]string `protobuf:"bytes,30,rep,name=map_value5,json=mapValue5,proto3" json:"map_value5,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue6 map[string]uint32 `protobuf:"bytes,31,rep,name=map_value6,json=mapValue6,proto3" json:"map_value6,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue7 map[uint32]string `protobuf:"bytes,32,rep,name=map_value7,json=mapValue7,proto3" json:"map_value7,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue8 map[string]uint64 `protobuf:"bytes,33,rep,name=map_value8,json=mapValue8,proto3" json:"map_value8,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue9 map[uint64]string `protobuf:"bytes,34,rep,name=map_value9,json=mapValue9,proto3" json:"map_value9,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - MapValue10 map[string]float32 `protobuf:"bytes,35,rep,name=map_value10,json=mapValue10,proto3" json:"map_value10,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` - MapValue12 map[string]float64 `protobuf:"bytes,37,rep,name=map_value12,json=mapValue12,proto3" json:"map_value12,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` - MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + OneofValue isProto3Message_OneofValue `protobuf_oneof:"oneof_value"` + WrapperDoubleValue *wrappers.DoubleValue `protobuf:"bytes,17,opt,name=wrapper_double_value,json=wrapperDoubleValue,proto3" json:"wrapper_double_value,omitempty"` + WrapperFloatValue *wrappers.FloatValue `protobuf:"bytes,18,opt,name=wrapper_float_value,json=wrapperFloatValue,proto3" json:"wrapper_float_value,omitempty"` + WrapperInt64Value *wrappers.Int64Value `protobuf:"bytes,19,opt,name=wrapper_int64_value,json=wrapperInt64Value,proto3" json:"wrapper_int64_value,omitempty"` + WrapperInt32Value *wrappers.Int32Value `protobuf:"bytes,20,opt,name=wrapper_int32_value,json=wrapperInt32Value,proto3" json:"wrapper_int32_value,omitempty"` + WrapperUInt64Value *wrappers.UInt64Value `protobuf:"bytes,21,opt,name=wrapper_u_int64_value,json=wrapperUInt64Value,proto3" json:"wrapper_u_int64_value,omitempty"` + WrapperUInt32Value *wrappers.UInt32Value `protobuf:"bytes,22,opt,name=wrapper_u_int32_value,json=wrapperUInt32Value,proto3" json:"wrapper_u_int32_value,omitempty"` + WrapperBoolValue *wrappers.BoolValue `protobuf:"bytes,23,opt,name=wrapper_bool_value,json=wrapperBoolValue,proto3" json:"wrapper_bool_value,omitempty"` + WrapperStringValue *wrappers.StringValue `protobuf:"bytes,24,opt,name=wrapper_string_value,json=wrapperStringValue,proto3" json:"wrapper_string_value,omitempty"` + WrapperBytesValue *wrappers.BytesValue `protobuf:"bytes,25,opt,name=wrapper_bytes_value,json=wrapperBytesValue,proto3" json:"wrapper_bytes_value,omitempty"` + MapValue map[string]string `protobuf:"bytes,26,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue2 map[string]int32 `protobuf:"bytes,27,rep,name=map_value2,json=mapValue2,proto3" json:"map_value2,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue3 map[int32]string `protobuf:"bytes,28,rep,name=map_value3,json=mapValue3,proto3" json:"map_value3,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue4 map[string]int64 `protobuf:"bytes,29,rep,name=map_value4,json=mapValue4,proto3" json:"map_value4,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue5 map[int64]string `protobuf:"bytes,30,rep,name=map_value5,json=mapValue5,proto3" json:"map_value5,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue6 map[string]uint32 `protobuf:"bytes,31,rep,name=map_value6,json=mapValue6,proto3" json:"map_value6,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue7 map[uint32]string `protobuf:"bytes,32,rep,name=map_value7,json=mapValue7,proto3" json:"map_value7,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue8 map[string]uint64 `protobuf:"bytes,33,rep,name=map_value8,json=mapValue8,proto3" json:"map_value8,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue9 map[uint64]string `protobuf:"bytes,34,rep,name=map_value9,json=mapValue9,proto3" json:"map_value9,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue10 map[string]float32 `protobuf:"bytes,35,rep,name=map_value10,json=mapValue10,proto3" json:"map_value10,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed32,2,opt,name=value,proto3"` + MapValue12 map[string]float64 `protobuf:"bytes,37,rep,name=map_value12,json=mapValue12,proto3" json:"map_value12,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + MapValue14 map[string]bool `protobuf:"bytes,39,rep,name=map_value14,json=mapValue14,proto3" json:"map_value14,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + MapValue15 map[bool]string `protobuf:"bytes,40,rep,name=map_value15,json=mapValue15,proto3" json:"map_value15,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapValue16 map[string]*wrappers.UInt64Value `protobuf:"bytes,45,rep,name=map_value16,json=mapValue16,proto3" json:"map_value16,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Proto3Message) Reset() { @@ -236,6 +239,13 @@ func (x *Proto3Message) GetRepeatedValue() []string { return nil } +func (x *Proto3Message) GetRepeatedMessage() []*wrappers.UInt64Value { + if x != nil { + return x.RepeatedMessage + } + return nil +} + func (x *Proto3Message) GetEnumValue() EnumValue { if x != nil { return x.EnumValue @@ -446,6 +456,13 @@ func (x *Proto3Message) GetMapValue15() map[bool]string { return nil } +func (x *Proto3Message) GetMapValue16() map[string]*wrappers.UInt64Value { + if x != nil { + return x.MapValue16 + } + return nil +} + type isProto3Message_OneofValue interface { isProto3Message_OneofValue() } @@ -478,7 +495,7 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x1d, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x1f, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, @@ -505,223 +522,240 @@ var file_runtime_internal_examplepb_proto3_proto_rawDesc = []byte{ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x51, 0x0a, - 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, - 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, - 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, - 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, + 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, - 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x51, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, - 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, + 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, - 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, - 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0e, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, + 0x0a, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x6f, 0x6e, + 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x44, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x46, 0x6c, 0x6f, + 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x5f, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, + 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4e, 0x0a, + 0x14, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, + 0x13, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x61, + 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x64, 0x0a, + 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x18, 0x1b, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x32, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x33, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x12, + 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x18, 0x1e, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x35, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x36, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, - 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, + 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x12, 0x64, 0x0a, 0x0a, 0x6d, + 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x37, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x18, + 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x12, 0x64, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x39, 0x18, 0x22, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x12, 0x67, 0x0a, + 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x18, 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, + 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x31, 0x30, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, - 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, + 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x32, 0x12, + 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x34, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, + 0x35, 0x12, 0x67, 0x0a, 0x0b, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, + 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, + 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x36, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x33, + 0x65, 0x33, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x34, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x35, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, - 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, + 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, - 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x37, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x38, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x39, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x31, 0x30, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x65, 0x31, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x31, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, - 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, 0x35, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x2a, 0x20, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0x0a, - 0x01, 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, - 0x10, 0x02, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x31, 0x35, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x31, + 0x36, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, + 0x20, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0x0a, 0x01, + 0x58, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x59, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x5a, 0x10, + 0x02, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -737,7 +771,7 @@ func file_runtime_internal_examplepb_proto3_proto_rawDescGZIP() []byte { } var file_runtime_internal_examplepb_proto3_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_runtime_internal_examplepb_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_runtime_internal_examplepb_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_runtime_internal_examplepb_proto3_proto_goTypes = []interface{}{ (EnumValue)(0), // 0: grpc.gateway.runtime.internal.examplepb.EnumValue (*Proto3Message)(nil), // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message @@ -754,53 +788,57 @@ var file_runtime_internal_examplepb_proto3_proto_goTypes = []interface{}{ nil, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry nil, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry nil, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry - (*timestamp.Timestamp)(nil), // 15: google.protobuf.Timestamp - (*duration.Duration)(nil), // 16: google.protobuf.Duration - (*field_mask.FieldMask)(nil), // 17: google.protobuf.FieldMask - (*wrappers.DoubleValue)(nil), // 18: google.protobuf.DoubleValue - (*wrappers.FloatValue)(nil), // 19: google.protobuf.FloatValue - (*wrappers.Int64Value)(nil), // 20: google.protobuf.Int64Value - (*wrappers.Int32Value)(nil), // 21: google.protobuf.Int32Value - (*wrappers.UInt64Value)(nil), // 22: google.protobuf.UInt64Value - (*wrappers.UInt32Value)(nil), // 23: google.protobuf.UInt32Value - (*wrappers.BoolValue)(nil), // 24: google.protobuf.BoolValue - (*wrappers.StringValue)(nil), // 25: google.protobuf.StringValue - (*wrappers.BytesValue)(nil), // 26: google.protobuf.BytesValue + nil, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry + (*wrappers.UInt64Value)(nil), // 16: google.protobuf.UInt64Value + (*timestamp.Timestamp)(nil), // 17: google.protobuf.Timestamp + (*duration.Duration)(nil), // 18: google.protobuf.Duration + (*field_mask.FieldMask)(nil), // 19: google.protobuf.FieldMask + (*wrappers.DoubleValue)(nil), // 20: google.protobuf.DoubleValue + (*wrappers.FloatValue)(nil), // 21: google.protobuf.FloatValue + (*wrappers.Int64Value)(nil), // 22: google.protobuf.Int64Value + (*wrappers.Int32Value)(nil), // 23: google.protobuf.Int32Value + (*wrappers.UInt32Value)(nil), // 24: google.protobuf.UInt32Value + (*wrappers.BoolValue)(nil), // 25: google.protobuf.BoolValue + (*wrappers.StringValue)(nil), // 26: google.protobuf.StringValue + (*wrappers.BytesValue)(nil), // 27: google.protobuf.BytesValue } var file_runtime_internal_examplepb_proto3_proto_depIdxs = []int32{ 1, // 0: grpc.gateway.runtime.internal.examplepb.Proto3Message.nested:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message - 0, // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue - 0, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_enum:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue - 15, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.timestamp_value:type_name -> google.protobuf.Timestamp - 16, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.duration_value:type_name -> google.protobuf.Duration - 17, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.fieldmask_value:type_name -> google.protobuf.FieldMask - 18, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue - 19, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue - 20, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value - 21, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value - 22, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value - 23, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value - 24, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue - 25, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue - 26, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue - 2, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry - 3, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry - 4, // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry - 5, // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry - 6, // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry - 7, // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry - 8, // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry - 9, // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry - 10, // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry - 11, // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry - 12, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry - 13, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry - 14, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry - 28, // [28:28] is the sub-list for method output_type - 28, // [28:28] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 16, // 1: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_message:type_name -> google.protobuf.UInt64Value + 0, // 2: grpc.gateway.runtime.internal.examplepb.Proto3Message.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue + 0, // 3: grpc.gateway.runtime.internal.examplepb.Proto3Message.repeated_enum:type_name -> grpc.gateway.runtime.internal.examplepb.EnumValue + 17, // 4: grpc.gateway.runtime.internal.examplepb.Proto3Message.timestamp_value:type_name -> google.protobuf.Timestamp + 18, // 5: grpc.gateway.runtime.internal.examplepb.Proto3Message.duration_value:type_name -> google.protobuf.Duration + 19, // 6: grpc.gateway.runtime.internal.examplepb.Proto3Message.fieldmask_value:type_name -> google.protobuf.FieldMask + 20, // 7: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_double_value:type_name -> google.protobuf.DoubleValue + 21, // 8: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_float_value:type_name -> google.protobuf.FloatValue + 22, // 9: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int64_value:type_name -> google.protobuf.Int64Value + 23, // 10: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_int32_value:type_name -> google.protobuf.Int32Value + 16, // 11: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int64_value:type_name -> google.protobuf.UInt64Value + 24, // 12: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_u_int32_value:type_name -> google.protobuf.UInt32Value + 25, // 13: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bool_value:type_name -> google.protobuf.BoolValue + 26, // 14: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_string_value:type_name -> google.protobuf.StringValue + 27, // 15: grpc.gateway.runtime.internal.examplepb.Proto3Message.wrapper_bytes_value:type_name -> google.protobuf.BytesValue + 2, // 16: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValueEntry + 3, // 17: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value2:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue2Entry + 4, // 18: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value3:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue3Entry + 5, // 19: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value4:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue4Entry + 6, // 20: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value5:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue5Entry + 7, // 21: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value6:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue6Entry + 8, // 22: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value7:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue7Entry + 9, // 23: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value8:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue8Entry + 10, // 24: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value9:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue9Entry + 11, // 25: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value10:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue10Entry + 12, // 26: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value12:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue12Entry + 13, // 27: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value14:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue14Entry + 14, // 28: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value15:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue15Entry + 15, // 29: grpc.gateway.runtime.internal.examplepb.Proto3Message.map_value16:type_name -> grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry + 16, // 30: grpc.gateway.runtime.internal.examplepb.Proto3Message.MapValue16Entry.value:type_name -> google.protobuf.UInt64Value + 31, // [31:31] is the sub-list for method output_type + 31, // [31:31] is the sub-list for method input_type + 31, // [31:31] is the sub-list for extension type_name + 31, // [31:31] is the sub-list for extension extendee + 0, // [0:31] is the sub-list for field type_name } func init() { file_runtime_internal_examplepb_proto3_proto_init() } @@ -832,7 +870,7 @@ func file_runtime_internal_examplepb_proto3_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_runtime_internal_examplepb_proto3_proto_rawDesc, NumEnums: 1, - NumMessages: 14, + NumMessages: 15, NumExtensions: 0, NumServices: 0, }, diff --git a/runtime/internal/examplepb/proto3.proto b/runtime/internal/examplepb/proto3.proto index 8e9b81d6093..f2c71287a17 100644 --- a/runtime/internal/examplepb/proto3.proto +++ b/runtime/internal/examplepb/proto3.proto @@ -10,6 +10,7 @@ import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; message Proto3Message { + // Next number: 46 Proto3Message nested = 41; float float_value = 42; double double_value = 43; @@ -21,6 +22,7 @@ message Proto3Message { string string_value = 8; bytes bytes_value = 9; repeated string repeated_value = 10; + repeated google.protobuf.UInt64Value repeated_message = 44; EnumValue enum_value = 11; repeated EnumValue repeated_enum = 12; google.protobuf.Timestamp timestamp_value = 13; @@ -52,6 +54,7 @@ message Proto3Message { map map_value12 = 37; map map_value14 = 39; map map_value15 = 40; + map map_value16 = 45; } enum EnumValue { diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index f0de351b212..c2fb9dd9d47 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -260,3 +260,17 @@ var allowUnknownFields = true func DisallowUnknownFields() { allowUnknownFields = false } + +var ( + convFromType = map[reflect.Kind]reflect.Value{ + reflect.String: reflect.ValueOf(String), + reflect.Bool: reflect.ValueOf(Bool), + reflect.Float64: reflect.ValueOf(Float64), + reflect.Float32: reflect.ValueOf(Float32), + reflect.Int64: reflect.ValueOf(Int64), + reflect.Int32: reflect.ValueOf(Int32), + reflect.Uint64: reflect.ValueOf(Uint64), + reflect.Uint32: reflect.ValueOf(Uint32), + reflect.Slice: reflect.ValueOf(Bytes), + } +) diff --git a/runtime/query.go b/runtime/query.go index b7e00548a76..ef6b8bd90ee 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -2,17 +2,23 @@ package runtime import ( "encoding/base64" + "errors" "fmt" "net/url" - "reflect" "regexp" "strconv" "strings" "time" - "github.com/golang/protobuf/proto" + legacyproto "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" + "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/grpclog" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" ) var valuesKeyRegexp = regexp.MustCompile("^(.*)\\[(.*)\\]$") @@ -45,7 +51,7 @@ func (*defaultQueryParser) Parse(msg proto.Message, values url.Values, filter *u if filter.HasCommonPrefix(fieldPath) { continue } - if err := populateFieldValueFromPath(msg, fieldPath, values); err != nil { + if err := populateFieldValueFromPath(msg.ProtoReflect(), fieldPath, values); err != nil { return err } } @@ -53,354 +59,277 @@ func (*defaultQueryParser) Parse(msg proto.Message, values url.Values, filter *u } // PopulateFieldFromPath sets a value in a nested Protobuf structure. -// It instantiates missing protobuf fields as it goes. func PopulateFieldFromPath(msg proto.Message, fieldPathString string, value string) error { fieldPath := strings.Split(fieldPathString, ".") - return populateFieldValueFromPath(msg, fieldPath, []string{value}) + return populateFieldValueFromPath(msg.ProtoReflect(), fieldPath, []string{value}) } -func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values []string) error { - m := reflect.ValueOf(msg) - if m.Kind() != reflect.Ptr { - return fmt.Errorf("unexpected type %T: %v", msg, msg) +func populateFieldValueFromPath(msgValue protoreflect.Message, fieldPath []string, values []string) error { + if len(fieldPath) < 1 { + return errors.New("no field path") + } + if len(values) < 1 { + return errors.New("no value provided") } - var props *proto.Properties - m = m.Elem() - for i, fieldName := range fieldPath { - isLast := i == len(fieldPath)-1 - if !isLast && m.Kind() != reflect.Struct { - return fmt.Errorf("non-aggregate type in the mid of path: %s", strings.Join(fieldPath, ".")) - } - var f reflect.Value - var err error - f, props, err = fieldByProtoName(m, fieldName) - if err != nil { - return err - } else if !f.IsValid() { - grpclog.Infof("field not found in %T: %s", msg, strings.Join(fieldPath, ".")) - return nil - } - switch f.Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64: - if !isLast { - return fmt.Errorf("unexpected nested field %s in %s", fieldPath[i+1], strings.Join(fieldPath[:i+1], ".")) - } - m = f - case reflect.Slice: - if !isLast { - return fmt.Errorf("unexpected repeated field in %s", strings.Join(fieldPath, ".")) - } - // Handle []byte - if f.Type().Elem().Kind() == reflect.Uint8 { - m = f - break - } - return populateRepeatedField(f, values, props) - case reflect.Ptr: - if f.IsNil() { - m = reflect.New(f.Type().Elem()) - f.Set(m.Convert(f.Type())) - } - m = f.Elem() - continue - case reflect.Struct: - m = f - continue - case reflect.Map: - if !isLast { - return fmt.Errorf("unexpected nested field %s in %s", fieldPath[i+1], strings.Join(fieldPath[:i+1], ".")) + var fieldDescriptor protoreflect.FieldDescriptor + for i, fieldName := range fieldPath { + fields := msgValue.Descriptor().Fields() + + // Get field by name + fieldDescriptor = fields.ByName(protoreflect.Name(fieldName)) + if fieldDescriptor == nil { + fieldDescriptor = fields.ByJSONName(fieldName) + if fieldDescriptor == nil { + // We're not returning an error here because this could just be + // an extra query parameter that isn't part of the request. + grpclog.Infof("field not found in %q: %q", msgValue.Descriptor().FullName(), strings.Join(fieldPath, ".")) + return nil } - return populateMapField(f, values, props) - default: - return fmt.Errorf("unexpected type %s in %T", f.Type(), msg) } - } - switch len(values) { - case 0: - return fmt.Errorf("no value of field: %s", strings.Join(fieldPath, ".")) - case 1: - default: - grpclog.Infof("too many field values: %s", strings.Join(fieldPath, ".")) - } - return populateField(m, values[0], props) -} -// fieldByProtoName looks up a field whose corresponding protobuf field name is "name". -// "m" must be a struct value. It returns zero reflect.Value if no such field found. -func fieldByProtoName(m reflect.Value, name string) (reflect.Value, *proto.Properties, error) { - props := proto.GetProperties(m.Type()) + // If this is the last element, we're done + if i == len(fieldPath)-1 { + break + } - // look up field name in oneof map - for _, op := range props.OneofTypes { - if name == op.Prop.OrigName || name == op.Prop.JSONName { - v := reflect.New(op.Type.Elem()) - field := m.Field(op.Field) - if !field.IsNil() { - return reflect.Value{}, nil, fmt.Errorf("field already set for %s oneof", props.Prop[op.Field].OrigName) - } - field.Set(v) - return v.Elem().Field(0), op.Prop, nil + // Only singular message fields are allowed + if fieldDescriptor.Message() == nil || fieldDescriptor.Cardinality() == protoreflect.Repeated { + return fmt.Errorf("invalid path: %q is not a message", fieldName) } + + // Get the nested message + msgValue = msgValue.Mutable(fieldDescriptor).Message() } - for _, p := range props.Prop { - if p.OrigName == name { - return m.FieldByName(p.Name), p, nil - } - if p.JSONName == name { - return m.FieldByName(p.Name), p, nil + // Check if oneof already set + if of := fieldDescriptor.ContainingOneof(); of != nil { + if f := msgValue.WhichOneof(of); f != nil { + return fmt.Errorf("field already set for oneof %q", of.FullName().Name()) } } - return reflect.Value{}, nil, nil -} -func populateMapField(f reflect.Value, values []string, props *proto.Properties) error { - if len(values) != 2 { - return fmt.Errorf("more than one value provided for key %s in map %s", values[0], props.Name) + switch { + case fieldDescriptor.IsList(): + return populateRepeatedField(fieldDescriptor, msgValue.Mutable(fieldDescriptor).List(), values) + case fieldDescriptor.IsMap(): + return populateMapField(fieldDescriptor, msgValue.Mutable(fieldDescriptor).Map(), values) } - key, value := values[0], values[1] - keyType := f.Type().Key() - valueType := f.Type().Elem() - if f.IsNil() { - f.Set(reflect.MakeMap(f.Type())) + if len(values) > 1 { + return fmt.Errorf("too many values for field %q: %s", fieldDescriptor.FullName().Name(), strings.Join(values, ", ")) } - keyConv, ok := convFromType[keyType.Kind()] - if !ok { - return fmt.Errorf("unsupported key type %s in map %s", keyType, props.Name) - } - valueConv, ok := convFromType[valueType.Kind()] - if !ok { - return fmt.Errorf("unsupported value type %s in map %s", valueType, props.Name) - } + return populateField(fieldDescriptor, msgValue, values[0]) +} - keyV := keyConv.Call([]reflect.Value{reflect.ValueOf(key)}) - if err := keyV[1].Interface(); err != nil { - return err.(error) - } - valueV := valueConv.Call([]reflect.Value{reflect.ValueOf(value)}) - if err := valueV[1].Interface(); err != nil { - return err.(error) +func populateField(fieldDescriptor protoreflect.FieldDescriptor, msgValue protoreflect.Message, value string) error { + v, err := parseField(fieldDescriptor, value) + if err != nil { + return fmt.Errorf("parsing field %q: %w", fieldDescriptor.FullName().Name(), err) } - f.SetMapIndex(keyV[0].Convert(keyType), valueV[0].Convert(valueType)) - + msgValue.Set(fieldDescriptor, v) return nil } -func populateRepeatedField(f reflect.Value, values []string, props *proto.Properties) error { - elemType := f.Type().Elem() +func populateRepeatedField(fieldDescriptor protoreflect.FieldDescriptor, list protoreflect.List, values []string) error { + for _, value := range values { + v, err := parseField(fieldDescriptor, value) + if err != nil { + return fmt.Errorf("parsing list %q: %w", fieldDescriptor.FullName().Name(), err) + } + list.Append(v) + } + + return nil +} - // is the destination field a slice of an enumeration type? - if enumValMap := proto.EnumValueMap(props.Enum); enumValMap != nil { - return populateFieldEnumRepeated(f, values, enumValMap) +func populateMapField(fieldDescriptor protoreflect.FieldDescriptor, mp protoreflect.Map, values []string) error { + if len(values) != 2 { + return fmt.Errorf("more than one value provided for key %q in map %q", values[0], fieldDescriptor.FullName()) } - conv, ok := convFromType[elemType.Kind()] - if !ok { - return fmt.Errorf("unsupported field type %s", elemType) + key, err := parseField(fieldDescriptor.MapKey(), values[0]) + if err != nil { + return fmt.Errorf("parsing map key %q: %w", fieldDescriptor.FullName().Name(), err) } - f.Set(reflect.MakeSlice(f.Type(), len(values), len(values)).Convert(f.Type())) - for i, v := range values { - result := conv.Call([]reflect.Value{reflect.ValueOf(v)}) - if err := result[1].Interface(); err != nil { - return err.(error) - } - f.Index(i).Set(result[0].Convert(f.Index(i).Type())) + + value, err := parseField(fieldDescriptor.MapValue(), values[1]) + if err != nil { + return fmt.Errorf("parsing map value %q: %w", fieldDescriptor.FullName().Name(), err) } + + mp.Set(key.MapKey(), value) + return nil } -func populateField(f reflect.Value, value string, props *proto.Properties) error { - i := f.Addr().Interface() - - // Handle protobuf well known types - var name string - switch m := i.(type) { - case interface{ XXX_WellKnownType() string }: - name = m.XXX_WellKnownType() - case proto.Message: - const wktPrefix = "google.protobuf." - if fullName := proto.MessageName(m); strings.HasPrefix(fullName, wktPrefix) { - name = fullName[len(wktPrefix):] +func parseField(fieldDescriptor protoreflect.FieldDescriptor, value string) (protoreflect.Value, error) { + switch fieldDescriptor.Kind() { + case protoreflect.BoolKind: + v, err := strconv.ParseBool(value) + if err != nil { + return protoreflect.Value{}, err } + return protoreflect.ValueOfBool(v), nil + case protoreflect.EnumKind: + enum, err := protoregistry.GlobalTypes.FindEnumByName(fieldDescriptor.Enum().FullName()) + switch { + case errors.Is(err, protoregistry.NotFound): + return protoreflect.Value{}, fmt.Errorf("enum %q is not registered", fieldDescriptor.Enum().FullName()) + case err != nil: + return protoreflect.Value{}, fmt.Errorf("failed to look up enum: %w", err) + } + // Look for enum by name + v := enum.Descriptor().Values().ByName(protoreflect.Name(value)) + if v == nil { + i, err := strconv.Atoi(value) + if err != nil { + return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value) + } + // Look for enum by number + v = enum.Descriptor().Values().ByNumber(protoreflect.EnumNumber(i)) + if v == nil { + return protoreflect.Value{}, fmt.Errorf("%q is not a valid value", value) + } + } + return protoreflect.ValueOfEnum(v.Number()), nil + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + v, err := strconv.ParseInt(value, 10, 32) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfInt32(int32(v)), nil + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + v, err := strconv.ParseInt(value, 10, 64) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfInt64(v), nil + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + v, err := strconv.ParseUint(value, 10, 32) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfUint32(uint32(v)), nil + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + v, err := strconv.ParseUint(value, 10, 64) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfUint64(v), nil + case protoreflect.FloatKind: + v, err := strconv.ParseFloat(value, 32) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfFloat32(float32(v)), nil + case protoreflect.DoubleKind: + v, err := strconv.ParseFloat(value, 64) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfFloat64(v), nil + case protoreflect.StringKind: + return protoreflect.ValueOfString(value), nil + case protoreflect.BytesKind: + v, err := base64.StdEncoding.DecodeString(value) + if err != nil { + return protoreflect.Value{}, err + } + return protoreflect.ValueOfBytes(v), nil + case protoreflect.MessageKind, protoreflect.GroupKind: + return parseMessage(fieldDescriptor.Message(), value) + default: + panic(fmt.Sprintf("unknown field kind: %v", fieldDescriptor.Kind())) } - switch name { - case "Timestamp": +} + +func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (protoreflect.Value, error) { + var msg proto.Message + switch msgDescriptor.FullName() { + case "google.protobuf.Timestamp": if value == "null" { - f.FieldByName("Seconds").SetInt(0) - f.FieldByName("Nanos").SetInt(0) - return nil + break } - t, err := time.Parse(time.RFC3339Nano, value) if err != nil { - return fmt.Errorf("bad Timestamp: %v", err) + return protoreflect.Value{}, err } - f.FieldByName("Seconds").SetInt(int64(t.Unix())) - f.FieldByName("Nanos").SetInt(int64(t.Nanosecond())) - return nil - case "Duration": + msg, err = ptypes.TimestampProto(t) + if err != nil { + return protoreflect.Value{}, err + } + case "google.protobuf.Duration": if value == "null" { - f.FieldByName("Seconds").SetInt(0) - f.FieldByName("Nanos").SetInt(0) - return nil + break } d, err := time.ParseDuration(value) if err != nil { - return fmt.Errorf("bad Duration: %v", err) + return protoreflect.Value{}, err } - - ns := d.Nanoseconds() - s := ns / 1e9 - ns %= 1e9 - f.FieldByName("Seconds").SetInt(s) - f.FieldByName("Nanos").SetInt(ns) - return nil - case "DoubleValue": - fallthrough - case "FloatValue": - float64Val, err := strconv.ParseFloat(value, 64) + msg = ptypes.DurationProto(d) + case "google.protobuf.DoubleValue": + v, err := strconv.ParseFloat(value, 64) if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.FieldByName("Value").SetFloat(float64Val) - return nil - case "Int64Value": - fallthrough - case "Int32Value": - int64Val, err := strconv.ParseInt(value, 10, 64) - if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.FieldByName("Value").SetInt(int64Val) - return nil - case "UInt64Value": - fallthrough - case "UInt32Value": - uint64Val, err := strconv.ParseUint(value, 10, 64) + return protoreflect.Value{}, err + } + msg = &wrappers.DoubleValue{Value: v} + case "google.protobuf.FloatValue": + v, err := strconv.ParseFloat(value, 32) if err != nil { - return fmt.Errorf("bad DoubleValue: %s", value) - } - f.FieldByName("Value").SetUint(uint64Val) - return nil - case "BoolValue": - if value == "true" { - f.FieldByName("Value").SetBool(true) - } else if value == "false" { - f.FieldByName("Value").SetBool(false) - } else { - return fmt.Errorf("bad BoolValue: %s", value) - } - return nil - case "StringValue": - f.FieldByName("Value").SetString(value) - return nil - case "BytesValue": - bytesVal, err := base64.StdEncoding.DecodeString(value) + return protoreflect.Value{}, err + } + msg = &wrappers.FloatValue{Value: float32(v)} + case "google.protobuf.Int64Value": + v, err := strconv.ParseInt(value, 10, 64) if err != nil { - return fmt.Errorf("bad BytesValue: %s", value) + return protoreflect.Value{}, err } - f.FieldByName("Value").SetBytes(bytesVal) - return nil - case "FieldMask": - p := f.FieldByName("Paths") - for _, v := range strings.Split(value, ",") { - if v != "" { - p.Set(reflect.Append(p, reflect.ValueOf(v))) - } + msg = &wrappers.Int64Value{Value: v} + case "google.protobuf.Int32Value": + v, err := strconv.ParseInt(value, 10, 32) + if err != nil { + return protoreflect.Value{}, err } - return nil - } - - // Handle Time and Duration stdlib types - switch t := i.(type) { - case *time.Time: - pt, err := time.Parse(time.RFC3339Nano, value) + msg = &wrappers.Int32Value{Value: int32(v)} + case "google.protobuf.UInt64Value": + v, err := strconv.ParseUint(value, 10, 64) if err != nil { - return fmt.Errorf("bad Timestamp: %v", err) + return protoreflect.Value{}, err } - *t = pt - return nil - case *time.Duration: - d, err := time.ParseDuration(value) + msg = &wrappers.UInt64Value{Value: v} + case "google.protobuf.UInt32Value": + v, err := strconv.ParseUint(value, 10, 32) if err != nil { - return fmt.Errorf("bad Duration: %v", err) + return protoreflect.Value{}, err } - *t = d - return nil - } - - // is the destination field an enumeration type? - if enumValMap := proto.EnumValueMap(props.Enum); enumValMap != nil { - return populateFieldEnum(f, value, enumValMap) - } - - conv, ok := convFromType[f.Kind()] - if !ok { - return fmt.Errorf("field type %T is not supported in query parameters", i) - } - result := conv.Call([]reflect.Value{reflect.ValueOf(value)}) - if err := result[1].Interface(); err != nil { - return err.(error) - } - f.Set(result[0].Convert(f.Type())) - return nil -} - -func convertEnum(value string, t reflect.Type, enumValMap map[string]int32) (reflect.Value, error) { - // see if it's an enumeration string - if enumVal, ok := enumValMap[value]; ok { - return reflect.ValueOf(enumVal).Convert(t), nil - } - - // check for an integer that matches an enumeration value - eVal, err := strconv.Atoi(value) - if err != nil { - return reflect.Value{}, fmt.Errorf("%s is not a valid %s", value, t) - } - for _, v := range enumValMap { - if v == int32(eVal) { - return reflect.ValueOf(eVal).Convert(t), nil + msg = &wrappers.UInt32Value{Value: uint32(v)} + case "google.protobuf.BoolValue": + v, err := strconv.ParseBool(value) + if err != nil { + return protoreflect.Value{}, err } - } - return reflect.Value{}, fmt.Errorf("%s is not a valid %s", value, t) -} - -func populateFieldEnum(f reflect.Value, value string, enumValMap map[string]int32) error { - cval, err := convertEnum(value, f.Type(), enumValMap) - if err != nil { - return err - } - f.Set(cval) - return nil -} - -func populateFieldEnumRepeated(f reflect.Value, values []string, enumValMap map[string]int32) error { - elemType := f.Type().Elem() - f.Set(reflect.MakeSlice(f.Type(), len(values), len(values)).Convert(f.Type())) - for i, v := range values { - result, err := convertEnum(v, elemType, enumValMap) + msg = &wrappers.BoolValue{Value: v} + case "google.protobuf.StringValue": + msg = &wrappers.StringValue{Value: value} + case "google.protobuf.BytesValue": + v, err := base64.StdEncoding.DecodeString(value) if err != nil { - return err + return protoreflect.Value{}, err + } + msg = &wrappers.BytesValue{Value: v} + case "google.protobuf.FieldMask": + fm := &field_mask.FieldMask{} + for _, v := range strings.Split(value, ",") { + fm.Paths = append(fm.Paths, v) } - f.Index(i).Set(result) + // Necessary until FieldMask is regenerated with v2 + msg = legacyproto.MessageV2(fm) + default: + return protoreflect.Value{}, fmt.Errorf("unsupported message type: %q", string(msgDescriptor.FullName())) } - return nil -} -var ( - convFromType = map[reflect.Kind]reflect.Value{ - reflect.String: reflect.ValueOf(String), - reflect.Bool: reflect.ValueOf(Bool), - reflect.Float64: reflect.ValueOf(Float64), - reflect.Float32: reflect.ValueOf(Float32), - reflect.Int64: reflect.ValueOf(Int64), - reflect.Int32: reflect.ValueOf(Int32), - reflect.Uint64: reflect.ValueOf(Uint64), - reflect.Uint32: reflect.ValueOf(Uint32), - reflect.Slice: reflect.ValueOf(Bytes), - } -) + return protoreflect.ValueOfMessage(msg.ProtoReflect()), nil +} diff --git a/runtime/query_test.go b/runtime/query_test.go index f1586fe0569..8c7e68af720 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -3,12 +3,10 @@ package runtime_test import ( "errors" "net/url" - "reflect" "strconv" "testing" "time" - "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" @@ -16,6 +14,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" ) @@ -116,6 +115,7 @@ func TestPopulateParameters(t *testing.T) { "string_value": {"str"}, "bytes_value": {"Ynl0ZXM="}, "repeated_value": {"a", "b", "c"}, + "repeated_message": {"1", "2", "3"}, "enum_value": {"1"}, "repeated_enum": {"1", "2", "0"}, "timestamp_value": {timeStr}, @@ -149,6 +149,7 @@ func TestPopulateParameters(t *testing.T) { "map_value13[2.5]": {"value"}, "map_value14[key]": {"true"}, "map_value15[true]": {"value"}, + "map_value16[key]": {"2"}, }, filter: utilities.NewDoubleArray(nil), want: &examplepb.Proto3Message{ @@ -162,6 +163,7 @@ func TestPopulateParameters(t *testing.T) { StringValue: "str", BytesValue: []byte("bytes"), RepeatedValue: []string{"a", "b", "c"}, + RepeatedMessage: []*wrappers.UInt64Value{{Value: 1}, {Value: 2}, {Value: 3}}, EnumValue: examplepb.EnumValue_Y, RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X}, TimestampValue: timePb, @@ -195,6 +197,7 @@ func TestPopulateParameters(t *testing.T) { MapValue12: map[string]float64{"key": 2.5}, MapValue14: map[string]bool{"key": true}, MapValue15: map[bool]string{true: "value"}, + MapValue16: map[string]*wrappers.UInt64Value{"key": {Value: 2}}, }, }, { @@ -340,15 +343,6 @@ func TestPopulateParameters(t *testing.T) { }, }, }, - { - values: url.Values{ - "uint64_value": {"1", "2", "3", "4", "5"}, - }, - filter: utilities.NewDoubleArray(nil), - want: &examplepb.Proto3Message{ - Uint64Value: 1, - }, - }, { values: url.Values{ "oneof_string_value": {"foobar"}, @@ -390,16 +384,33 @@ func TestPopulateParameters(t *testing.T) { }, filter: utilities.NewDoubleArray(nil), want: &examplepb.Proto3Message{}, - wanterr: errors.New("field already set for oneof_value oneof"), + wanterr: errors.New("field already set for oneof \"oneof_value\""), + }, + { + // Error when there are too many values + values: url.Values{ + "uint64_value": {"1", "2"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{}, + wanterr: errors.New("too many values for field \"uint64_value\": 1, 2"), + }, + { + // Error when dereferencing a list of messages + values: url.Values{ + "repeated_message.value": {"1"}, + }, + filter: utilities.NewDoubleArray(nil), + want: &examplepb.Proto3Message{}, + wanterr: errors.New("invalid path: \"repeated_message\" is not a message"), }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { - msg := proto.Clone(spec.want) - msg.Reset() + msg := spec.want.ProtoReflect().New().Interface() err := runtime.PopulateQueryParameters(msg, spec.values, spec.filter) if spec.wanterr != nil { - if !reflect.DeepEqual(err, spec.wanterr) { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %v; want error %v", spec.values, spec.filter, err, spec.wanterr) + if err == nil || err.Error() != spec.wanterr.Error() { + t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) failed with %q; want error %q", spec.values, spec.filter, err, spec.wanterr) } return } @@ -415,51 +426,6 @@ func TestPopulateParameters(t *testing.T) { } } -func TestPopulateParametersWithNativeTypes(t *testing.T) { - timeT := time.Date(2016, time.December, 15, 12, 23, 32, 49, time.UTC) - timeStr := timeT.Format(time.RFC3339Nano) - - durationT := 13 * time.Hour - durationStr := durationT.String() - - for _, spec := range []struct { - values url.Values - want *nativeProto3Message - }{ - { - values: url.Values{ - "native_timestamp_value": {timeStr}, - "native_duration_value": {durationStr}, - }, - want: &nativeProto3Message{ - NativeTimeValue: &timeT, - NativeDurationValue: &durationT, - }, - }, - { - values: url.Values{ - "nativeTimestampValue": {timeStr}, - "nativeDurationValue": {durationStr}, - }, - want: &nativeProto3Message{ - NativeTimeValue: &timeT, - NativeDurationValue: &durationT, - }, - }, - } { - msg := new(nativeProto3Message) - err := runtime.PopulateQueryParameters(msg, spec.values, utilities.NewDoubleArray(nil)) - - if err != nil { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, utilities.NewDoubleArray(nil)) failed with %v; want success", spec.values, err) - continue - } - if got, want := msg, spec.want; !proto.Equal(got, want) { - t.Errorf("runtime.PopulateQueryParameters(msg, %v, utilities.NewDoubleArray(nil)) = %v; want %v", spec.values, got, want) - } - } -} - func TestPopulateParametersWithFilters(t *testing.T) { for _, spec := range []struct { values url.Values @@ -531,8 +497,7 @@ func TestPopulateParametersWithFilters(t *testing.T) { }, }, } { - msg := proto.Clone(spec.want) - msg.Reset() + msg := spec.want.ProtoReflect().New().Interface() err := runtime.PopulateQueryParameters(msg, spec.values, spec.filter) if err != nil { t.Errorf("runtime.PoplateQueryParameters(msg, %v, %v) failed with %v; want success", spec.values, spec.filter, err) @@ -635,19 +600,10 @@ func TestPopulateQueryParametersWithInvalidNestedParameters(t *testing.T) { filter: utilities.NewDoubleArray(nil), }, } { - spec.msg.Reset() + spec.msg = spec.msg.ProtoReflect().New().Interface() err := runtime.PopulateQueryParameters(spec.msg, spec.values, spec.filter) if err == nil { t.Errorf("runtime.PopulateQueryParameters(msg, %v, %v) did not fail; want error", spec.values, spec.filter) } } } - -type nativeProto3Message struct { - NativeTimeValue *time.Time `protobuf:"bytes,1,opt,name=native_timestamp_value,json=nativeTimestampValue" json:"native_timestamp_value,omitempty"` - NativeDurationValue *time.Duration `protobuf:"bytes,2,opt,name=native_duration_value,json=nativeDurationValue" json:"native_duration_value,omitempty"` -} - -func (m *nativeProto3Message) Reset() { *m = nativeProto3Message{} } -func (m *nativeProto3Message) String() string { return proto.CompactTextString(m) } -func (*nativeProto3Message) ProtoMessage() {} From 699882b2a0667b4fa16daad7595cdb84671c7219 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 8 May 2020 17:29:01 +0100 Subject: [PATCH 0386/1518] runtime: rewrite fieldmask logic with protoreflect Replace the use of the descriptorpb when we can use reflection instead. Also add more thorough test and support repeated fields. --- Makefile | 3 +- examples/internal/helloworld/BUILD.bazel | 1 - .../internal/helloworld/helloworld.pb.gw.go | 2 - examples/internal/integration/BUILD.bazel | 2 - .../internal/integration/fieldmask_test.go | 183 ---- examples/internal/proto/examplepb/BUILD.bazel | 3 +- .../examplepb/a_bit_of_everything.pb.gw.go | 8 +- .../proto/examplepb/echo_service.pb.gw.go | 2 - .../proto/examplepb/flow_combination.pb.gw.go | 2 - .../examplepb/non_standard_names.pb.gw.go | 14 +- .../examplepb/response_body_service.pb.gw.go | 2 - .../internal/proto/examplepb/stream.pb.gw.go | 2 - .../unannotated_echo_service.pb.gw.go | 2 - .../proto/examplepb/use_go_template.pb.gw.go | 2 - .../proto/examplepb/wrappers.pb.gw.go | 2 - .../internal/proto/standalone/BUILD.bazel | 1 - .../unannotated_echo_service.pb.gw.go | 2 - .../internal/gengateway/generator.go | 1 - .../internal/gengateway/template.go | 7 +- runtime/BUILD.bazel | 3 +- runtime/fieldmask.go | 85 +- runtime/fieldmask_test.go | 240 ++++- runtime/internal/examplepb/BUILD.bazel | 4 + runtime/internal/examplepb/example.pb.go | 548 +++++----- runtime/internal/examplepb/example.proto | 6 + .../examplepb/non_standard_names.pb.go | 950 ++++++++++++++++++ .../examplepb/non_standard_names.proto | 75 ++ 27 files changed, 1617 insertions(+), 535 deletions(-) delete mode 100644 examples/internal/integration/fieldmask_test.go create mode 100644 runtime/internal/examplepb/non_standard_names.pb.go create mode 100644 runtime/internal/examplepb/non_standard_names.proto diff --git a/Makefile b/Makefile index 54112d090c7..93f59eda18e 100644 --- a/Makefile +++ b/Makefile @@ -89,7 +89,8 @@ HELLOWORLD_GWSRCS=$(HELLOWORLD:.proto=.pb.gw.go) RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto \ runtime/internal/examplepb/proto2.proto \ - runtime/internal/examplepb/proto3.proto + runtime/internal/examplepb/proto3.proto \ + runtime/internal/examplepb/non_standard_names.proto RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) EXAMPLE_CLIENT_DIR=examples/internal/clients diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index 0ae7affc43e..392944eee64 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -30,7 +30,6 @@ go_library( deps = [ "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 1b3f5f3fe96..6c15db6e04a 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_Greeter_SayHello_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index 9755e1b7f7c..e9e27238fc4 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -4,7 +4,6 @@ go_test( name = "go_default_test", srcs = [ "client_test.go", - "fieldmask_test.go", "integration_test.go", "main_test.go", ], @@ -19,7 +18,6 @@ go_test( "//examples/internal/server:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", diff --git a/examples/internal/integration/fieldmask_test.go b/examples/internal/integration/fieldmask_test.go deleted file mode 100644 index 5b5709d8ace..00000000000 --- a/examples/internal/integration/fieldmask_test.go +++ /dev/null @@ -1,183 +0,0 @@ -package integration_test - -import ( - "bytes" - "fmt" - "testing" - - "github.com/golang/protobuf/descriptor" - "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "google.golang.org/genproto/protobuf/field_mask" -) - -func fieldMasksEqual(fm1, fm2 *field_mask.FieldMask) bool { - if fm1 == nil && fm2 == nil { - return true - } - if fm1 == nil || fm2 == nil { - return false - } - if len(fm1.GetPaths()) != len(fm2.GetPaths()) { - return false - } - - paths := make(map[string]bool) - for _, path := range fm1.GetPaths() { - paths[path] = true - } - for _, path := range fm2.GetPaths() { - if _, ok := paths[path]; !ok { - return false - } - } - - return true -} - -func newFieldMask(paths ...string) *field_mask.FieldMask { - return &field_mask.FieldMask{Paths: paths} -} - -func fieldMaskString(fm *field_mask.FieldMask) string { - if fm == nil { - return "" - } - return fmt.Sprintf("%v", fm.GetPaths()) -} - -// N.B. These tests are here rather than in the runtime package because they need -// to import examplepb for the descriptor, which would result in a circular -// dependency since examplepb imports runtime from the pb.gw.go files -func TestFieldMaskFromRequestBodyWithDescriptor(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) - jsonInput := `{"id":"foo", "thing":{"subThing":{"sub_value":"bar"}}}` - expected := newFieldMask("id", "thing.subThing.sub_value") - - actual, err := runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(jsonInput)), md) - if !fieldMasksEqual(actual, expected) { - t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) - } - if err != nil { - t.Errorf("err %v", err) - } -} - -func TestFieldMaskFromRequestBodyWithJsonNames(t *testing.T) { - if testing.Short() { - t.Skip() - return - } - - _, md := descriptor.ForMessage(new(examplepb.NonStandardMessageWithJSONNames)) - jsonInput := `{"ID":"foo", "Thingy":{"SubThing":{"sub_Value":"bar"}}}` - expected := newFieldMask("id", "thing.subThing.sub_value") - - actual, err := runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(jsonInput)), md) - if !fieldMasksEqual(actual, expected) { - t.Errorf("want %v; got %v", fieldMaskString(expected), fieldMaskString(actual)) - } - if err != nil { - t.Errorf("err %v", err) - } -} - -// avoid compiler optimising benchmark away -var result *field_mask.FieldMask - -func BenchmarkABEFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { - if testing.Short() { - b.Skip() - return - } - - _, md := descriptor.ForMessage(new(examplepb.ABitOfEverything)) - input := `{` + - `"single_nested": {"name": "bar",` + - ` "amount": 10,` + - ` "ok": "TRUE"},` + - `"uuid": "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7",` + - `"nested": [{"name": "bar",` + - ` "amount": 10},` + - ` {"name": "baz",` + - ` "amount": 20}],` + - `"float_value": 1.5,` + - `"double_value": 2.5,` + - `"int64_value": 4294967296,` + - `"uint64_value": 9223372036854775807,` + - `"int32_value": -2147483648,` + - `"fixed64_value": 9223372036854775807,` + - `"fixed32_value": 4294967295,` + - `"bool_value": true,` + - `"string_value": "strprefix/foo",` + - `"bytes_value": "132456",` + - `"uint32_value": 4294967295,` + - `"enum_value": "ONE",` + - `"path_enum_value": "DEF",` + - `"nested_path_enum_value": "JKL",` + - `"sfixed32_value": 2147483647,` + - `"sfixed64_value": -4611686018427387904,` + - `"sint32_value": 2147483647,` + - `"sint64_value": 4611686018427387903,` + - `"repeated_string_value": ["a", "b", "c"],` + - `"oneof_value": {"oneof_string":"x"},` + - `"map_value": {"a": "ONE",` + - ` "b": "ZERO"},` + - `"mapped_string_value": {"a": "x",` + - ` "b": "y"},` + - `"mapped_nested_value": {"a": {"name": "x", "amount": 1},` + - ` "b": {"name": "y", "amount": 2}},` + - `"nonConventionalNameValue": "camelCase",` + - `"timestamp_value": "2016-05-10T10:19:13.123Z",` + - `"repeated_enum_value": ["ONE", "ZERO"],` + - `"repeated_enum_annotation": ["ONE", "ZERO"],` + - `"enum_value_annotation": "ONE",` + - `"repeated_string_annotation": ["a", "b"],` + - `"repeated_nested_annotation": [{"name": "hoge",` + - ` "amount": 10},` + - ` {"name": "fuga",` + - ` "amount": 20}],` + - `"nested_annotation": {"name": "hoge",` + - ` "amount": 10},` + - `"int64_override_type": 12345` + - `}` - var r *field_mask.FieldMask - var err error - for i := 0; i < b.N; i++ { - r, err = runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), md) - } - if err != nil { - b.Error(err) - } - result = r -} - -func BenchmarkNonStandardFieldMaskFromRequestBodyWithDescriptor(b *testing.B) { - if testing.Short() { - b.Skip() - return - } - - _, md := descriptor.ForMessage(new(examplepb.NonStandardMessage)) - input := `{` + - `"id": "foo",` + - `"Num": 2,` + - `"line_num": 3,` + - `"langIdent": "bar",` + - `"STATUS": "baz"` + - `}` - var r *field_mask.FieldMask - var err error - for i := 0; i < b.N; i++ { - r, err = runtime.FieldMaskFromRequestBody(bytes.NewReader([]byte(input)), md) - } - if err != nil { - b.Error(err) - } - result = r -} diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index e3ab712295c..af7c9b5563d 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -56,8 +56,8 @@ proto_library( go_proto_library( name = "examplepb_go_proto", compilers = [ - "@io_bazel_rules_go//proto:go_grpc", "//protoc-gen-grpc-gateway:go_gen_grpc_gateway", # keep + "@io_bazel_rules_go//proto:go_grpc", ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb", proto = ":examplepb_proto", @@ -80,7 +80,6 @@ go_library( deps = [ "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index e3323be04c8..0ad26cac2df 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" @@ -33,7 +32,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_ABitOfEverythingService_Create_0 = &utilities.DoubleArray{Encoding: map[string]int{"float_value": 0, "double_value": 1, "int64_value": 2, "uint64_value": 3, "int32_value": 4, "fixed64_value": 5, "fixed32_value": 6, "bool_value": 7, "string_value": 8, "uint32_value": 9, "sfixed32_value": 10, "sfixed64_value": 11, "sint32_value": 12, "sint64_value": 13, "nonConventionalNameValue": 14, "enum_value": 15, "path_enum_value": 16, "nested_path_enum_value": 17, "enum_value_annotation": 18}, Base: []int{1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}} @@ -783,8 +781,7 @@ func request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marshaler r return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Abe) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Abe); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -833,8 +830,7 @@ func local_request_ABitOfEverythingService_UpdateV2_1(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Abe) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Abe); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index f8565564d5a..52a6e4f291f 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_EchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 728b3207211..2a57313c2e7 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage func request_FlowCombination_RpcEmptyRpc_0(ctx context.Context, marshaler runtime.Marshaler, client FlowCombinationClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq EmptyProto diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 47f52be92a0..07a13b47af6 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_NonStandardService_Update_0 = &utilities.DoubleArray{Encoding: map[string]int{"body": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} @@ -47,8 +45,7 @@ func request_NonStandardService_Update_0(ctx context.Context, marshaler runtime. return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Body) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -79,8 +76,7 @@ func local_request_NonStandardService_Update_0(ctx context.Context, marshaler ru return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Body) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -115,8 +111,7 @@ func request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Body) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask @@ -147,8 +142,7 @@ func local_request_NonStandardService_UpdateWithJSONNames_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.Body) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Body); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.UpdateMask = fieldMask diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 52480625cad..5c704ac7fee 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage func request_ResponseBodyService_GetResponseBody_0(ctx context.Context, marshaler runtime.Marshaler, client ResponseBodyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq ResponseBodyIn diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 20a3607493a..e9cf685990e 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" @@ -31,7 +30,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage func request_StreamService_BulkCreate_0(ctx context.Context, marshaler runtime.Marshaler, client StreamServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var metadata runtime.ServerMetadata diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index 770c4f6e8da..c6997305b42 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index cda68521f19..f38c02e352e 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -29,7 +28,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage func request_LoginService_Login_0(ctx context.Context, marshaler runtime.Marshaler, client LoginServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq LoginRequest diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 722174ae3f8..49b7c3d2eb2 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" @@ -31,7 +30,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage func request_WrappersService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client WrappersServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq Wrappers diff --git a/examples/internal/proto/standalone/BUILD.bazel b/examples/internal/proto/standalone/BUILD.bazel index e1dbc0835fa..ec276799864 100644 --- a/examples/internal/proto/standalone/BUILD.bazel +++ b/examples/internal/proto/standalone/BUILD.bazel @@ -9,7 +9,6 @@ go_library( "//examples/internal/proto/examplepb:go_default_library", "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index 34d5d39c073..de4947d190f 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/descriptor" "github.com/golang/protobuf/proto" extExamplepb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" @@ -30,7 +29,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage var ( filter_UnannotatedEchoService_Echo_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 16d2513a557..633a37fbcf8 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -46,7 +46,6 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p "net/http", "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities", - "github.com/golang/protobuf/descriptor", "github.com/golang/protobuf/proto", "google.golang.org/grpc", "google.golang.org/grpc/codes", diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index e2a159684c1..6a79930d4b1 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -241,7 +241,6 @@ var _ io.Reader var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray -var _ = descriptor.ForMessage `)) handlerTemplate = template.Must(template.New("handler").Parse(` @@ -329,8 +328,7 @@ var ( } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.{{.GetBodyFieldStructName}}) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.{{.GetBodyFieldStructName}}); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask @@ -491,8 +489,7 @@ func local_request_{{.Method.Service.GetName}}_{{.Method.GetName}}_{{.Index}}(ct } {{- if and $AllowPatchFeature (eq (.HTTPMethod) "PATCH") (.FieldMaskField) (not (eq "*" .GetBodyFieldPath)) }} if protoReq.{{.FieldMaskField}} == nil || len(protoReq.{{.FieldMaskField}}.GetPaths()) == 0 { - _, md := descriptor.ForMessage(protoReq.{{.GetBodyFieldStructName}}) - if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), md); err != nil { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.{{.GetBodyFieldStructName}}); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } else { protoReq.{{.FieldMaskField}} = fieldMask diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 4d86de7b055..236a8b349fe 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -25,12 +25,10 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ "//internal/utilities:go_default_library", - "@com_github_golang_protobuf//descriptor:go_default_library_gen", "@com_github_golang_protobuf//jsonpb:go_default_library_gen", "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@go_googleapis//google/api:httpbody_go_proto", - "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", @@ -71,6 +69,7 @@ go_test( "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_google_go_cmp//cmp:go_default_library", + "@com_github_google_go_cmp//cmp/cmpopts:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", diff --git a/runtime/fieldmask.go b/runtime/fieldmask.go index 341aad5a3ea..5cd931a0d82 100644 --- a/runtime/fieldmask.go +++ b/runtime/fieldmask.go @@ -2,42 +2,29 @@ package runtime import ( "encoding/json" + "fmt" "io" "strings" - descriptor2 "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/protoc-gen-go/descriptor" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" ) -func translateName(name string, md *descriptor.DescriptorProto) (string, *descriptor.DescriptorProto) { - // TODO - should really gate this with a test that the marshaller has used json names - if md != nil { - for _, f := range md.Field { - if f.JsonName != nil && f.Name != nil && *f.JsonName == name { - var subType *descriptor.DescriptorProto - - // If the field has a TypeName then we retrieve the nested type for translating the embedded message names. - if f.TypeName != nil { - typeSplit := strings.Split(*f.TypeName, ".") - typeName := typeSplit[len(typeSplit)-1] - for _, t := range md.NestedType { - if typeName == *t.Name { - subType = t - } - } - } - return *f.Name, subType - } - } +func getFieldByName(fields protoreflect.FieldDescriptors, name string) protoreflect.FieldDescriptor { + fd := fields.ByName(protoreflect.Name(name)) + if fd != nil { + return fd } - return name, nil + + return fields.ByJSONName(name) } // FieldMaskFromRequestBody creates a FieldMask printing all complete paths from the JSON body. -func FieldMaskFromRequestBody(r io.Reader, md *descriptor.DescriptorProto) (*field_mask.FieldMask, error) { +func FieldMaskFromRequestBody(r io.Reader, msg proto.Message) (*field_mask.FieldMask, error) { fm := &field_mask.FieldMask{} var root interface{} + if err := json.NewDecoder(r).Decode(&root); err != nil { if err == io.EOF { return fm, nil @@ -45,27 +32,59 @@ func FieldMaskFromRequestBody(r io.Reader, md *descriptor.DescriptorProto) (*fie return nil, err } - queue := []fieldMaskPathItem{{node: root, md: md}} + queue := []fieldMaskPathItem{{node: root, msg: msg.ProtoReflect()}} + var repeatedChild *fieldMaskPathItem for len(queue) > 0 { // dequeue an item item := queue[0] queue = queue[1:] - if m, ok := item.node.(map[string]interface{}); ok { + m, ok := item.node.(map[string]interface{}) + switch { + case ok: // if the item is an object, then enqueue all of its children for k, v := range m { - protoName, subMd := translateName(k, item.md) - if subMsg, ok := v.(descriptor2.Message); ok { - _, subMd = descriptor2.ForMessage(subMsg) + if item.msg == nil { + return nil, fmt.Errorf("JSON structure did not match request type") + } + + fd := getFieldByName(item.msg.Descriptor().Fields(), k) + if fd == nil { + return nil, fmt.Errorf("could not find field %q in %q", k, item.msg.Descriptor().FullName()) + } + child := fieldMaskPathItem{ + path: append(item.path, string(fd.FullName().Name())), + node: v, + } + switch { + case fd.IsList(), fd.IsMap(): + if repeatedChild != nil { + // This is implied by the rule that any repeated fields must be + // last in the paths. + // Ref: https://github.com/protocolbuffers/protobuf/blob/6b0ff74ecf63e26c7315f6745de36aff66deb59d/src/google/protobuf/field_mask.proto#L85-L86 + return nil, fmt.Errorf("only one repeated value is allowed per field_mask") + } + repeatedChild = &child + // Don't add to paths until the end + case fd.Message() != nil: + child.msg = item.msg.Get(fd).Message() + fallthrough + default: + queue = append(queue, child) } - queue = append(queue, fieldMaskPathItem{path: append(item.path, protoName), node: v, md: subMd}) } - } else if len(item.path) > 0 { + case len(item.path) > 0: // otherwise, it's a leaf node so print its path fm.Paths = append(fm.Paths, strings.Join(item.path, ".")) } } + // Add any repeated fields last, as per + // https://github.com/protocolbuffers/protobuf/blob/6b0ff74ecf63e26c7315f6745de36aff66deb59d/src/google/protobuf/field_mask.proto#L85-L86 + if repeatedChild != nil { + fm.Paths = append(fm.Paths, strings.Join(repeatedChild.path, ".")) + } + return fm, nil } @@ -77,6 +96,6 @@ type fieldMaskPathItem struct { // a generic decoded json object the current item to inspect for further path extraction node interface{} - // descriptor for parent message - md *descriptor.DescriptorProto + // parent message + msg protoreflect.Message } diff --git a/runtime/fieldmask_test.go b/runtime/fieldmask_test.go index 7a5ddaae957..cbf71b42fec 100644 --- a/runtime/fieldmask_test.go +++ b/runtime/fieldmask_test.go @@ -5,63 +5,225 @@ import ( "fmt" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/testing/protocmp" ) -func fieldMasksEqual(fm1, fm2 *field_mask.FieldMask) bool { - if fm1 == nil && fm2 == nil { - return true - } - if fm1 == nil || fm2 == nil { - return false - } - if len(fm1.GetPaths()) != len(fm2.GetPaths()) { - return false - } +func newFieldMask(paths ...string) *field_mask.FieldMask { + return &field_mask.FieldMask{Paths: paths} +} - paths := make(map[string]bool) - for _, path := range fm1.GetPaths() { - paths[path] = true - } - for _, path := range fm2.GetPaths() { - if _, ok := paths[path]; !ok { - return false - } - } +func TestFieldMaskFromRequestBody(t *testing.T) { + for _, tc := range []struct { + name string + input string + msg proto.Message + expected *field_mask.FieldMask + }{ + { + name: "empty", + expected: newFieldMask(), + }, + { + name: "simple", - return true -} + msg: &examplepb.ABitOfEverything{}, + input: `{"uuid":"1234", "floatValue":3.14}`, + expected: newFieldMask("uuid", "float_value"), + }, + { + name: "NonStandardMessage", + msg: &examplepb.NonStandardMessage{}, + input: `{"id":"foo", "thing":{"subThing":{"sub_value":"bar"}}}`, + expected: newFieldMask("id", "thing.subThing.sub_value"), + }, + { + name: "NonStandardMessageWithJSONNames", + msg: &examplepb.NonStandardMessageWithJSONNames{}, + input: `{"ID":"foo", "Thingy":{"SubThing":{"sub_Value":"bar"}}}`, + expected: newFieldMask("id", "thing.subThing.sub_value"), + }, + { + name: "nested", -func newFieldMask(paths ...string) *field_mask.FieldMask { - return &field_mask.FieldMask{Paths: paths} + msg: &examplepb.ABitOfEverything{}, + input: `{"single_nested": {"name":"bob", "amount": 2}, "uuid":"1234"}`, + expected: newFieldMask("single_nested.name", "single_nested.amount", "uuid"), + }, + { + name: "map", + + msg: &examplepb.ABitOfEverything{}, + input: `{"mapped_string_value": {"a": "x"}}`, + expected: newFieldMask("mapped_string_value"), + }, + { + name: "complex", + input: ` + { + "single_nested": { + "name": "bar", + "amount": 10, + "ok": "TRUE" + }, + "uuid": "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7", + "nested": [ + { + "name": "bar", + "amount": 10 + }, + { + "name": "baz", + "amount": 20 + } + ], + "float_value": 1.5, + "double_value": 2.5, + "int64_value": 4294967296, + "int64_override_type": 12345, + "int32_value": -2147483648, + "uint64_value": 9223372036854775807, + "uint32_value": 4294967295, + "fixed64_value": 9223372036854775807, + "fixed32_value": 4294967295, + "sfixed64_value": -4611686018427387904, + "sfixed32_value": 2147483647, + "sint64_value": 4611686018427387903, + "sint32_value": 2147483647, + "bool_value": true, + "string_value": "strprefix/foo", + "bytes_value": "132456", + "enum_value": "ONE", + "oneof_string": "x", + "nonConventionalNameValue": "camelCase", + "timestamp_value": "2016-05-10T10:19:13.123Z", + "enum_value_annotation": "ONE", + "nested_annotation": { + "name": "hoge", + "amount": 10 + } + } +`, + msg: &examplepb.ABitOfEverything{}, + + expected: newFieldMask( + "single_nested.name", + "single_nested.amount", + "single_nested.ok", + "uuid", + "float_value", + "double_value", + "int64_value", + "int64_override_type", + "int32_value", + "uint64_value", + "uint32_value", + "fixed64_value", + "fixed32_value", + "sfixed64_value", + "sfixed32_value", + "sint64_value", + "sint32_value", + "bool_value", + "string_value", + "bytes_value", + "enum_value", + "oneof_string", + "nonConventionalNameValue", + "timestamp_value", + "enum_value_annotation", + "nested_annotation.name", + "nested_annotation.amount", + "nested", + ), + }, + } { + t.Run(tc.name, func(t *testing.T) { + actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), tc.msg) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if diff := cmp.Diff(tc.expected, actual, protocmp.Transform(), cmpopts.SortSlices(func(x, y string) bool { + return x < y + })); diff != "" { + t.Errorf("field masks differed:\n%s", diff) + } + }) + } } -func fieldMaskString(fm *field_mask.FieldMask) string { - if fm == nil { - return "" +func TestFieldMaskRepeatedFieldsLast(t *testing.T) { + for _, tc := range []struct { + name string + input string + expected *field_mask.FieldMask + }{ + { + name: "map", + input: `{"mapped_string_value": {"a": "x"}, "uuid":"1234"}`, + expected: &field_mask.FieldMask{ + Paths: []string{ + "uuid", + "mapped_string_value", + }, + }, + }, + { + name: "slice", + input: ` + { + "nested": [ + { + "name": "bar", + "amount": 10 + }, + { + "name": "baz", + "amount": 20 + } + ], + "uuid":"1234" + }`, + expected: &field_mask.FieldMask{ + Paths: []string{ + "uuid", + "nested", + }, + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), &examplepb.ABitOfEverything{}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if diff := cmp.Diff(tc.expected, actual, protocmp.Transform()); diff != "" { + t.Errorf("field masks differed:\n%s", diff) + } + }) } - return fmt.Sprintf("%v", fm.GetPaths()) } -func TestFieldMaskFromRequestBody(t *testing.T) { +func TestFieldMaskErrors(t *testing.T) { for _, tc := range []struct { name string input string - expected *field_mask.FieldMask expectedErr error }{ - {name: "empty", expected: newFieldMask()}, - {name: "simple", input: `{"foo":1, "bar":"baz"}`, expected: newFieldMask("foo", "bar")}, - {name: "nested", input: `{"foo": {"bar":1, "baz": 2}, "qux": 3}`, expected: newFieldMask("foo.bar", "foo.baz", "qux")}, - {name: "canonical", input: `{"f": {"b": {"d": 1, "x": 2}, "c": 1}}`, expected: newFieldMask("f.b.d", "f.b.x", "f.c")}, + { + name: "object under scalar", + input: `{"uuid": {"a": "x"}}`, + expectedErr: fmt.Errorf("JSON structure did not match request type"), + }, } { t.Run(tc.name, func(t *testing.T) { - actual, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), nil) - if !fieldMasksEqual(actual, tc.expected) { - t.Errorf("want %v; got %v", fieldMaskString(tc.expected), fieldMaskString(actual)) - } - if err != tc.expectedErr { - t.Errorf("want %v; got %v", tc.expectedErr, err) + _, err := FieldMaskFromRequestBody(bytes.NewReader([]byte(tc.input)), &examplepb.ABitOfEverything{}) + if err.Error() != tc.expectedErr.Error() { + t.Fatalf("errors did not match: got %q, wanted %q", err, tc.expectedErr) } }) } diff --git a/runtime/internal/examplepb/BUILD.bazel b/runtime/internal/examplepb/BUILD.bazel index 76429bea0d0..112932abc6f 100644 --- a/runtime/internal/examplepb/BUILD.bazel +++ b/runtime/internal/examplepb/BUILD.bazel @@ -8,6 +8,7 @@ proto_library( name = "examplepb_proto", srcs = [ "example.proto", + "non_standard_names.proto", "proto2.proto", "proto3.proto", ], @@ -17,13 +18,16 @@ proto_library( "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", + "@go_googleapis//google/api:annotations_proto", ], ) go_proto_library( name = "examplepb_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb", proto = ":examplepb_proto", + deps = ["@go_googleapis//google/api:annotations_go_proto"], ) go_library( diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index e84d867427f..a7a3fea6fbe 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -10,6 +10,7 @@ import ( proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" + field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -664,6 +665,61 @@ func (x *RepeatedResponseBodyOut) GetResponse() []*RepeatedResponseBodyOut_Respo return nil } +type UpdateMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UpdateMask *field_mask.FieldMask `protobuf:"bytes,1,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + ABitOfEverything *ABitOfEverything `protobuf:"bytes,2,opt,name=a_bit_of_everything,json=aBitOfEverything,proto3" json:"a_bit_of_everything,omitempty"` +} + +func (x *UpdateMessage) Reset() { + *x = UpdateMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateMessage) ProtoMessage() {} + +func (x *UpdateMessage) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateMessage.ProtoReflect.Descriptor instead. +func (*UpdateMessage) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_example_proto_rawDescGZIP(), []int{4} +} + +func (x *UpdateMessage) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +func (x *UpdateMessage) GetABitOfEverything() *ABitOfEverything { + if x != nil { + return x.ABitOfEverything + } + return nil +} + // Nested is nested type. type ABitOfEverything_Nested struct { state protoimpl.MessageState @@ -680,7 +736,7 @@ type ABitOfEverything_Nested struct { func (x *ABitOfEverything_Nested) Reset() { *x = ABitOfEverything_Nested{} if protoimpl.UnsafeEnabled { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -693,7 +749,7 @@ func (x *ABitOfEverything_Nested) String() string { func (*ABitOfEverything_Nested) ProtoMessage() {} func (x *ABitOfEverything_Nested) ProtoReflect() protoreflect.Message { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[4] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -741,7 +797,7 @@ type ResponseBodyOut_Response struct { func (x *ResponseBodyOut_Response) Reset() { *x = ResponseBodyOut_Response{} if protoimpl.UnsafeEnabled { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[8] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -754,7 +810,7 @@ func (x *ResponseBodyOut_Response) String() string { func (*ResponseBodyOut_Response) ProtoMessage() {} func (x *ResponseBodyOut_Response) ProtoReflect() protoreflect.Message { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[8] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -789,7 +845,7 @@ type RepeatedResponseBodyOut_Response struct { func (x *RepeatedResponseBodyOut_Response) Reset() { *x = RepeatedResponseBodyOut_Response{} if protoimpl.UnsafeEnabled { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -802,7 +858,7 @@ func (x *RepeatedResponseBodyOut_Response) String() string { func (*RepeatedResponseBodyOut_Response) ProtoMessage() {} func (x *RepeatedResponseBodyOut_Response) ProtoReflect() protoreflect.Message { - mi := &file_runtime_internal_examplepb_example_proto_msgTypes[9] + mi := &file_runtime_internal_examplepb_example_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -844,211 +900,225 @@ var file_runtime_internal_examplepb_example_proto_rawDesc = []byte{ 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0xeb, 0x14, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, - 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, + 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x1f, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0xeb, 0x14, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x0d, 0x73, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, + 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, + 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, - 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x07, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x53, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, - 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, - 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, - 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, - 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, - 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x13, - 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, - 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x64, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3c, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, - 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x65, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x22, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x7e, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x6d, 0x0a, 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, + 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xb0, + 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, - 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xb0, 0x01, 0x0a, - 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, - 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, - 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x1a, - 0x71, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, - 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, - 0x79, 0x4f, 0x75, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x02, 0x6f, 0x6b, + 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, + 0x01, 0x1a, 0x71, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x86, 0x01, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x56, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, - 0x65, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, - 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x2a, 0x20, - 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, - 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, - 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x5d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, + 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb8, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, + 0x74, 0x12, 0x65, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, + 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb5, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x56, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, + 0x22, 0xb6, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, + 0x68, 0x0a, 0x13, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x61, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1064,7 +1134,7 @@ func file_runtime_internal_examplepb_example_proto_rawDescGZIP() []byte { } var file_runtime_internal_examplepb_example_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_runtime_internal_examplepb_example_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_runtime_internal_examplepb_example_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_runtime_internal_examplepb_example_proto_goTypes = []interface{}{ (NumericEnum)(0), // 0: grpc.gateway.runtime.internal.examplepb.NumericEnum (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum @@ -1073,40 +1143,44 @@ var file_runtime_internal_examplepb_example_proto_goTypes = []interface{}{ (*ABitOfEverything)(nil), // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything (*ResponseBodyOut)(nil), // 5: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut (*RepeatedResponseBodyOut)(nil), // 6: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut - (*ABitOfEverything_Nested)(nil), // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - nil, // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry - nil, // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry - (*ResponseBodyOut_Response)(nil), // 11: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response - (*RepeatedResponseBodyOut_Response)(nil), // 12: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response - (*empty.Empty)(nil), // 13: google.protobuf.Empty - (*timestamp.Timestamp)(nil), // 14: google.protobuf.Timestamp + (*UpdateMessage)(nil), // 7: grpc.gateway.runtime.internal.examplepb.UpdateMessage + (*ABitOfEverything_Nested)(nil), // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + nil, // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry + nil, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + (*ResponseBodyOut_Response)(nil), // 12: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response + (*RepeatedResponseBodyOut_Response)(nil), // 13: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response + (*empty.Empty)(nil), // 14: google.protobuf.Empty + (*timestamp.Timestamp)(nil), // 15: google.protobuf.Timestamp + (*field_mask.FieldMask)(nil), // 16: google.protobuf.FieldMask } var file_runtime_internal_examplepb_example_proto_depIdxs = []int32{ - 7, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 7, // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 8, // 0: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 8, // 1: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested 0, // 2: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum - 13, // 3: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 8, // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry - 9, // 5: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry - 10, // 6: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry - 14, // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 14, // 3: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 9, // 4: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry + 10, // 5: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedStringValueEntry + 11, // 6: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + 15, // 7: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp 0, // 8: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum 0, // 9: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum 0, // 10: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum - 7, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 7, // 12: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 11, // 13: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response - 12, // 14: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response - 1, // 15: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 16: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum - 7, // 17: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested - 2, // 18: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 8, // 11: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 8, // 12: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 12, // 13: grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.ResponseBodyOut.Response + 13, // 14: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response + 16, // 15: grpc.gateway.runtime.internal.examplepb.UpdateMessage.update_mask:type_name -> google.protobuf.FieldMask + 4, // 16: grpc.gateway.runtime.internal.examplepb.UpdateMessage.a_bit_of_everything:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything + 1, // 17: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 18: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.NumericEnum + 8, // 19: grpc.gateway.runtime.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.runtime.internal.examplepb.ABitOfEverything.Nested + 2, // 20: grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.runtime.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_runtime_internal_examplepb_example_proto_init() } @@ -1164,6 +1238,18 @@ func file_runtime_internal_examplepb_example_proto_init() { } } file_runtime_internal_examplepb_example_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_example_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ABitOfEverything_Nested); i { case 0: return &v.state @@ -1175,7 +1261,7 @@ func file_runtime_internal_examplepb_example_proto_init() { return nil } } - file_runtime_internal_examplepb_example_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_runtime_internal_examplepb_example_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResponseBodyOut_Response); i { case 0: return &v.state @@ -1187,7 +1273,7 @@ func file_runtime_internal_examplepb_example_proto_init() { return nil } } - file_runtime_internal_examplepb_example_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_runtime_internal_examplepb_example_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RepeatedResponseBodyOut_Response); i { case 0: return &v.state @@ -1210,7 +1296,7 @@ func file_runtime_internal_examplepb_example_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_runtime_internal_examplepb_example_proto_rawDesc, NumEnums: 3, - NumMessages: 10, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/runtime/internal/examplepb/example.proto b/runtime/internal/examplepb/example.proto index 370b397f88f..ee547f1932b 100644 --- a/runtime/internal/examplepb/example.proto +++ b/runtime/internal/examplepb/example.proto @@ -6,6 +6,7 @@ option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/ import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/field_mask.proto"; // SimpleMessage represents a simple message sent to the Echo service. message SimpleMessage { string id = 1; } @@ -101,3 +102,8 @@ message RepeatedResponseBodyOut { } repeated Response response = 2; } + +message UpdateMessage { + google.protobuf.FieldMask update_mask = 1; + ABitOfEverything a_bit_of_everything = 2; +} diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go new file mode 100644 index 00000000000..dd8117470c4 --- /dev/null +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -0,0 +1,950 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.22.0 +// protoc v3.10.1 +// source: runtime/internal/examplepb/non_standard_names.proto + +package examplepb + +import ( + context "context" + proto "github.com/golang/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + field_mask "google.golang.org/genproto/protobuf/field_mask" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// NonStandardMessage has oddly named fields. +type NonStandardMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Id represents the message identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=lineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=enGB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,proto3" json:"no,omitempty"` + Thing *NonStandardMessage_Thing `protobuf:"bytes,8,opt,name=thing,proto3" json:"thing,omitempty"` +} + +func (x *NonStandardMessage) Reset() { + *x = NonStandardMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessage) ProtoMessage() {} + +func (x *NonStandardMessage) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessage.ProtoReflect.Descriptor instead. +func (*NonStandardMessage) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0} +} + +func (x *NonStandardMessage) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NonStandardMessage) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + +func (x *NonStandardMessage) GetLineNum() int64 { + if x != nil { + return x.LineNum + } + return 0 +} + +func (x *NonStandardMessage) GetLangIdent() string { + if x != nil { + return x.LangIdent + } + return "" +} + +func (x *NonStandardMessage) GetSTATUS() string { + if x != nil { + return x.STATUS + } + return "" +} + +func (x *NonStandardMessage) GetEn_GB() int64 { + if x != nil { + return x.En_GB + } + return 0 +} + +func (x *NonStandardMessage) GetNo() string { + if x != nil { + return x.No + } + return "" +} + +func (x *NonStandardMessage) GetThing() *NonStandardMessage_Thing { + if x != nil { + return x.Thing + } + return nil +} + +type NonStandardUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Body *NonStandardMessage `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *NonStandardUpdateRequest) Reset() { + *x = NonStandardUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardUpdateRequest) ProtoMessage() {} + +func (x *NonStandardUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardUpdateRequest.ProtoReflect.Descriptor instead. +func (*NonStandardUpdateRequest) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{1} +} + +func (x *NonStandardUpdateRequest) GetBody() *NonStandardMessage { + if x != nil { + return x.Body + } + return nil +} + +func (x *NonStandardUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. +type NonStandardMessageWithJSONNames struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Id represents the message identifier. + Id string `protobuf:"bytes,1,opt,name=id,json=ID,proto3" json:"id,omitempty"` + Num int64 `protobuf:"varint,2,opt,name=Num,proto3" json:"Num,omitempty"` + LineNum int64 `protobuf:"varint,3,opt,name=line_num,json=LineNum,proto3" json:"line_num,omitempty"` + LangIdent string `protobuf:"bytes,4,opt,name=langIdent,proto3" json:"langIdent,omitempty"` + STATUS string `protobuf:"bytes,5,opt,name=STATUS,json=status,proto3" json:"STATUS,omitempty"` + En_GB int64 `protobuf:"varint,6,opt,name=en_GB,json=En_GB,proto3" json:"en_GB,omitempty"` + No string `protobuf:"bytes,7,opt,name=no,json=yes,proto3" json:"no,omitempty"` + Thing *NonStandardMessageWithJSONNames_Thing `protobuf:"bytes,8,opt,name=thing,json=Thingy,proto3" json:"thing,omitempty"` +} + +func (x *NonStandardMessageWithJSONNames) Reset() { + *x = NonStandardMessageWithJSONNames{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessageWithJSONNames) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessageWithJSONNames) ProtoMessage() {} + +func (x *NonStandardMessageWithJSONNames) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessageWithJSONNames.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2} +} + +func (x *NonStandardMessageWithJSONNames) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NonStandardMessageWithJSONNames) GetNum() int64 { + if x != nil { + return x.Num + } + return 0 +} + +func (x *NonStandardMessageWithJSONNames) GetLineNum() int64 { + if x != nil { + return x.LineNum + } + return 0 +} + +func (x *NonStandardMessageWithJSONNames) GetLangIdent() string { + if x != nil { + return x.LangIdent + } + return "" +} + +func (x *NonStandardMessageWithJSONNames) GetSTATUS() string { + if x != nil { + return x.STATUS + } + return "" +} + +func (x *NonStandardMessageWithJSONNames) GetEn_GB() int64 { + if x != nil { + return x.En_GB + } + return 0 +} + +func (x *NonStandardMessageWithJSONNames) GetNo() string { + if x != nil { + return x.No + } + return "" +} + +func (x *NonStandardMessageWithJSONNames) GetThing() *NonStandardMessageWithJSONNames_Thing { + if x != nil { + return x.Thing + } + return nil +} + +type NonStandardWithJSONNamesUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Body *NonStandardMessageWithJSONNames `protobuf:"bytes,1,opt,name=body,proto3" json:"body,omitempty"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *NonStandardWithJSONNamesUpdateRequest) Reset() { + *x = NonStandardWithJSONNamesUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardWithJSONNamesUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardWithJSONNamesUpdateRequest) ProtoMessage() {} + +func (x *NonStandardWithJSONNamesUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardWithJSONNamesUpdateRequest.ProtoReflect.Descriptor instead. +func (*NonStandardWithJSONNamesUpdateRequest) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{3} +} + +func (x *NonStandardWithJSONNamesUpdateRequest) GetBody() *NonStandardMessageWithJSONNames { + if x != nil { + return x.Body + } + return nil +} + +func (x *NonStandardWithJSONNamesUpdateRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +type NonStandardMessage_Thing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubThing *NonStandardMessage_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,proto3" json:"subThing,omitempty"` +} + +func (x *NonStandardMessage_Thing) Reset() { + *x = NonStandardMessage_Thing{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessage_Thing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessage_Thing) ProtoMessage() {} + +func (x *NonStandardMessage_Thing) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessage_Thing.ProtoReflect.Descriptor instead. +func (*NonStandardMessage_Thing) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *NonStandardMessage_Thing) GetSubThing() *NonStandardMessage_Thing_SubThing { + if x != nil { + return x.SubThing + } + return nil +} + +type NonStandardMessage_Thing_SubThing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=subValue,proto3" json:"sub_value,omitempty"` +} + +func (x *NonStandardMessage_Thing_SubThing) Reset() { + *x = NonStandardMessage_Thing_SubThing{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessage_Thing_SubThing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessage_Thing_SubThing) ProtoMessage() {} + +func (x *NonStandardMessage_Thing_SubThing) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessage_Thing_SubThing.ProtoReflect.Descriptor instead. +func (*NonStandardMessage_Thing_SubThing) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *NonStandardMessage_Thing_SubThing) GetSubValue() string { + if x != nil { + return x.SubValue + } + return "" +} + +type NonStandardMessageWithJSONNames_Thing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubThing *NonStandardMessageWithJSONNames_Thing_SubThing `protobuf:"bytes,1,opt,name=subThing,json=SubThing,proto3" json:"subThing,omitempty"` +} + +func (x *NonStandardMessageWithJSONNames_Thing) Reset() { + *x = NonStandardMessageWithJSONNames_Thing{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessageWithJSONNames_Thing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessageWithJSONNames_Thing) ProtoMessage() {} + +func (x *NonStandardMessageWithJSONNames_Thing) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessageWithJSONNames_Thing.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames_Thing) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *NonStandardMessageWithJSONNames_Thing) GetSubThing() *NonStandardMessageWithJSONNames_Thing_SubThing { + if x != nil { + return x.SubThing + } + return nil +} + +type NonStandardMessageWithJSONNames_Thing_SubThing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubValue string `protobuf:"bytes,1,opt,name=sub_value,json=sub_Value,proto3" json:"sub_value,omitempty"` +} + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) Reset() { + *x = NonStandardMessageWithJSONNames_Thing_SubThing{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonStandardMessageWithJSONNames_Thing_SubThing) ProtoMessage() {} + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) ProtoReflect() protoreflect.Message { + mi := &file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonStandardMessageWithJSONNames_Thing_SubThing.ProtoReflect.Descriptor instead. +func (*NonStandardMessageWithJSONNames_Thing_SubThing) Descriptor() ([]byte, []int) { + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP(), []int{2, 0, 0} +} + +func (x *NonStandardMessageWithJSONNames_Thing_SubThing) GetSubValue() string { + if x != nil { + return x.SubValue + } + return "" +} + +var File_runtime_internal_examplepb_non_standard_names_proto protoreflect.FileDescriptor + +var file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = []byte{ + 0x0a, 0x33, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x6e, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x27, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa0, + 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, + 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, + 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, + 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x57, 0x0a, + 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, + 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, + 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x98, 0x01, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x12, 0x66, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, + 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, + 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x18, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, + 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, + 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, + 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, + 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xcb, 0x03, 0x0a, + 0x1f, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, + 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, + 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, + 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x45, 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02, 0x6e, 0x6f, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x65, 0x0a, 0x05, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x79, 0x1a, 0xa6, 0x01, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x73, 0x0a, 0x08, 0x73, + 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, + 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, + 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, + 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x1a, 0x28, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x75, 0x62, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x25, 0x4e, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, + 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, + 0xbf, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xb7, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, + 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x12, 0xee, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, + 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, + 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x32, 0x2f, 0x2f, 0x76, 0x31, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, + 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, + 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x64, + 0x79, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_runtime_internal_examplepb_non_standard_names_proto_rawDescOnce sync.Once + file_runtime_internal_examplepb_non_standard_names_proto_rawDescData = file_runtime_internal_examplepb_non_standard_names_proto_rawDesc +) + +func file_runtime_internal_examplepb_non_standard_names_proto_rawDescGZIP() []byte { + file_runtime_internal_examplepb_non_standard_names_proto_rawDescOnce.Do(func() { + file_runtime_internal_examplepb_non_standard_names_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_internal_examplepb_non_standard_names_proto_rawDescData) + }) + return file_runtime_internal_examplepb_non_standard_names_proto_rawDescData +} + +var file_runtime_internal_examplepb_non_standard_names_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_runtime_internal_examplepb_non_standard_names_proto_goTypes = []interface{}{ + (*NonStandardMessage)(nil), // 0: grpc.gateway.runtime.internal.examplepb.NonStandardMessage + (*NonStandardUpdateRequest)(nil), // 1: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest + (*NonStandardMessageWithJSONNames)(nil), // 2: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames + (*NonStandardWithJSONNamesUpdateRequest)(nil), // 3: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest + (*NonStandardMessage_Thing)(nil), // 4: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing + (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.SubThing + (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing + (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + (*field_mask.FieldMask)(nil), // 8: google.protobuf.FieldMask +} +var file_runtime_internal_examplepb_non_standard_names_proto_depIdxs = []int32{ + 4, // 0: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing + 0, // 1: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage + 8, // 2: grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 6, // 3: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing + 2, // 4: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames + 8, // 5: grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 5, // 6: grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage.Thing.SubThing + 7, // 7: grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + 1, // 8: grpc.gateway.runtime.internal.examplepb.NonStandardService.Update:input_type -> grpc.gateway.runtime.internal.examplepb.NonStandardUpdateRequest + 3, // 9: grpc.gateway.runtime.internal.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.runtime.internal.examplepb.NonStandardWithJSONNamesUpdateRequest + 0, // 10: grpc.gateway.runtime.internal.examplepb.NonStandardService.Update:output_type -> grpc.gateway.runtime.internal.examplepb.NonStandardMessage + 2, // 11: grpc.gateway.runtime.internal.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.runtime.internal.examplepb.NonStandardMessageWithJSONNames + 10, // [10:12] is the sub-list for method output_type + 8, // [8:10] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_runtime_internal_examplepb_non_standard_names_proto_init() } +func file_runtime_internal_examplepb_non_standard_names_proto_init() { + if File_runtime_internal_examplepb_non_standard_names_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardWithJSONNamesUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage_Thing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessage_Thing_SubThing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames_Thing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_internal_examplepb_non_standard_names_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonStandardMessageWithJSONNames_Thing_SubThing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_runtime_internal_examplepb_non_standard_names_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_runtime_internal_examplepb_non_standard_names_proto_goTypes, + DependencyIndexes: file_runtime_internal_examplepb_non_standard_names_proto_depIdxs, + MessageInfos: file_runtime_internal_examplepb_non_standard_names_proto_msgTypes, + }.Build() + File_runtime_internal_examplepb_non_standard_names_proto = out.File + file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = nil + file_runtime_internal_examplepb_non_standard_names_proto_goTypes = nil + file_runtime_internal_examplepb_non_standard_names_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// NonStandardServiceClient is the client API for NonStandardService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type NonStandardServiceClient interface { + // Apply field mask to empty NonStandardMessage and return result. + Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) +} + +type nonStandardServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardServiceClient { + return &nonStandardServiceClient{cc} +} + +func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) { + out := new(NonStandardMessage) + err := c.cc.Invoke(ctx, "/grpc.gateway.runtime.internal.examplepb.NonStandardService/Update", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) { + out := new(NonStandardMessageWithJSONNames) + err := c.cc.Invoke(ctx, "/grpc.gateway.runtime.internal.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NonStandardServiceServer is the server API for NonStandardService service. +type NonStandardServiceServer interface { + // Apply field mask to empty NonStandardMessage and return result. + Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) +} + +// UnimplementedNonStandardServiceServer can be embedded to have forward compatible implementations. +type UnimplementedNonStandardServiceServer struct { +} + +func (*UnimplementedNonStandardServiceServer) Update(context.Context, *NonStandardUpdateRequest) (*NonStandardMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (*UnimplementedNonStandardServiceServer) UpdateWithJSONNames(context.Context, *NonStandardWithJSONNamesUpdateRequest) (*NonStandardMessageWithJSONNames, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateWithJSONNames not implemented") +} + +func RegisterNonStandardServiceServer(s *grpc.Server, srv NonStandardServiceServer) { + s.RegisterService(&_NonStandardService_serviceDesc, srv) +} + +func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NonStandardUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NonStandardServiceServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.runtime.internal.examplepb.NonStandardService/Update", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NonStandardWithJSONNamesUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/grpc.gateway.runtime.internal.examplepb.NonStandardService/UpdateWithJSONNames", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _NonStandardService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "grpc.gateway.runtime.internal.examplepb.NonStandardService", + HandlerType: (*NonStandardServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Update", + Handler: _NonStandardService_Update_Handler, + }, + { + MethodName: "UpdateWithJSONNames", + Handler: _NonStandardService_UpdateWithJSONNames_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "runtime/internal/examplepb/non_standard_names.proto", +} diff --git a/runtime/internal/examplepb/non_standard_names.proto b/runtime/internal/examplepb/non_standard_names.proto new file mode 100644 index 00000000000..e4807fafbdf --- /dev/null +++ b/runtime/internal/examplepb/non_standard_names.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; +option go_package = "examplepb"; +package grpc.gateway.runtime.internal.examplepb; + +import "google/api/annotations.proto"; +import "google/protobuf/field_mask.proto"; + +// NonStandardMessage has oddly named fields. +message NonStandardMessage { + // Id represents the message identifier. + string id = 1; + int64 Num = 2; + int64 line_num = 3; + string langIdent = 4; + string STATUS = 5; + int64 en_GB = 6; + string no = 7; + + message Thing { + message SubThing { + string sub_value = 1; + } + SubThing subThing = 1; + } + Thing thing = 8; +} + +message NonStandardUpdateRequest { + NonStandardMessage body = 1; + google.protobuf.FieldMask update_mask = 2; +} + +// NonStandardMessageWithJSONNames maps odd field names to odd JSON names for maximum confusion. +message NonStandardMessageWithJSONNames { + // Id represents the message identifier. + string id = 1 [json_name="ID"]; + int64 Num = 2 [json_name="Num"]; + int64 line_num = 3 [json_name="LineNum"]; + string langIdent = 4 [json_name="langIdent"]; + string STATUS = 5 [json_name="status"]; + int64 en_GB = 6 [json_name="En_GB"]; + string no = 7 [json_name="yes"]; + + message Thing { + message SubThing { + string sub_value = 1 [json_name="sub_Value"]; + } + SubThing subThing = 1 [json_name="SubThing"]; + } + Thing thing = 8 [json_name="Thingy"]; +} + +message NonStandardWithJSONNamesUpdateRequest { + NonStandardMessageWithJSONNames body = 1; + google.protobuf.FieldMask update_mask = 2; +} + +// NonStandardService responds to incoming messages, applies a field mask and returns the masked response. +service NonStandardService { + // Apply field mask to empty NonStandardMessage and return result. + rpc Update(NonStandardUpdateRequest) returns (NonStandardMessage) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update" + body: "body" + }; + } + + // Apply field mask to empty NonStandardMessageWithJSONNames and return result. + rpc UpdateWithJSONNames(NonStandardWithJSONNamesUpdateRequest) returns (NonStandardMessageWithJSONNames) { + option (google.api.http) = { + patch: "/v1/example/non_standard/update_with_json_names" + body: "body" + }; + } +} From 1b447b4752045f97c3f13d181caf804a949d1b75 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Thu, 14 May 2020 17:35:44 +0100 Subject: [PATCH 0387/1518] all: correct use of go_package --- Makefile | 2 +- README.md | 20 +- docs/_docs/grpcapiconfiguration.md | 126 +- docs/_docs/usage.md | 211 +-- examples/internal/helloworld/helloworld.pb.go | 169 +- .../internal/helloworld/helloworld.pb.gw.go | 40 +- examples/internal/helloworld/helloworld.proto | 4 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1602 +++++++++-------- .../examplepb/a_bit_of_everything.pb.gw.go | 92 +- .../proto/examplepb/a_bit_of_everything.proto | 14 +- .../proto/examplepb/echo_service.pb.go | 174 +- .../proto/examplepb/echo_service.pb.gw.go | 28 +- .../proto/examplepb/echo_service.proto | 4 +- .../proto/examplepb/flow_combination.pb.go | 399 ++-- .../proto/examplepb/flow_combination.pb.gw.go | 76 +- .../proto/examplepb/flow_combination.proto | 4 +- .../proto/examplepb/generated_input.proto | 4 +- .../proto/examplepb/non_standard_names.pb.go | 272 +-- .../examplepb/non_standard_names.pb.gw.go | 8 +- .../proto/examplepb/non_standard_names.proto | 4 +- .../examplepb/response_body_service.pb.go | 221 +-- .../examplepb/response_body_service.pb.gw.go | 14 +- .../examplepb/response_body_service.proto | 4 +- .../examplepb/standalone_echo_service.yaml | 6 +- .../internal/proto/examplepb/stream.pb.go | 134 +- .../internal/proto/examplepb/stream.pb.gw.go | 8 +- .../internal/proto/examplepb/stream.proto | 6 +- .../examplepb/unannotated_echo_service.pb.go | 163 +- .../unannotated_echo_service.pb.gw.go | 16 +- .../examplepb/unannotated_echo_service.proto | 2 +- .../examplepb/unannotated_echo_service.yaml | 6 +- .../proto/examplepb/use_go_template.pb.go | 116 +- .../proto/examplepb/use_go_template.pb.gw.go | 8 +- .../proto/examplepb/use_go_template.proto | 4 +- .../internal/proto/examplepb/wrappers.pb.go | 345 ++-- .../proto/examplepb/wrappers.pb.gw.go | 44 +- .../internal/proto/examplepb/wrappers.proto | 4 +- .../unannotated_echo_service.pb.gw.go | 28 +- examples/internal/proto/sub/message.pb.go | 17 +- examples/internal/proto/sub/message.proto | 6 +- examples/internal/proto/sub2/message.pb.go | 22 +- examples/internal/proto/sub2/message.proto | 4 +- .../examplepb/non_standard_names.pb.go | 8 +- .../examplepb/non_standard_names.proto | 2 +- 44 files changed, 2131 insertions(+), 2310 deletions(-) diff --git a/Makefile b/Makefile index 93f59eda18e..069912e3605 100644 --- a/Makefile +++ b/Makefile @@ -182,7 +182,7 @@ $(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(HELLOWORLD) $(HELLOWORLD_GWSRCS): $(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) diff --git a/README.md b/README.md index fe5b375a168..4ffc1a5c585 100644 --- a/README.md +++ b/README.md @@ -85,15 +85,16 @@ Make sure that your `$GOBIN` is in your `$PATH`. `your_service.proto`: ```protobuf - syntax = "proto3"; - package example; - message StringMessage { - string value = 1; - } + syntax = "proto3"; + package your.service.v1; + option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + message StringMessage { + string value = 1; + } - service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} - } + service YourService { + rpc Echo(StringMessage) returns (StringMessage) {} + } ``` 2. Add a [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) @@ -102,7 +103,8 @@ annotation to your .proto file `your_service.proto`: ```diff syntax = "proto3"; - package example; + package your.service.v1; + option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + +import "google/api/annotations.proto"; + diff --git a/docs/_docs/grpcapiconfiguration.md b/docs/_docs/grpcapiconfiguration.md index 6547e7d4462..aa1b8408c0a 100644 --- a/docs/_docs/grpcapiconfiguration.md +++ b/docs/_docs/grpcapiconfiguration.md @@ -18,15 +18,16 @@ The following is equivalent to the basic [usage example](usage.html) but without your_service.proto: ```protobuf - syntax = "proto3"; - package example; - message StringMessage { - string value = 1; - } - - service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} - } + syntax = "proto3"; + package your.service.v1; + option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + message StringMessage { + string value = 1; + } + + service YourService { + rpc Echo(StringMessage) returns (StringMessage) {} + } ``` 2. Instead of annotating the .proto file in this step leave it untouched and create a `your_service.yaml` with the following content: @@ -36,7 +37,7 @@ The following is equivalent to the basic [usage example](usage.html) but without http: rules: - - selector: example.YourService.Echo + - selector: your.service.v1.YourService.Echo post: /v1/example/echo body: "*" ``` @@ -44,106 +45,21 @@ The following is equivalent to the basic [usage example](usage.html) but without 3. Generate gRPC stub as before - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --go_out=plugins=grpc:. \ - path/to/your_service.proto - ``` - - It will generate a stub file `path/to/your_service.pb.go`. -4. Implement your service in gRPC as usual - 1. (Optional) Generate gRPC stub in the language you want. - - e.g. - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --ruby_out=. \ - path/to/your/service_proto - - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --plugin=protoc-gen-grpc=grpc_ruby_plugin \ - --grpc-ruby_out=. \ - path/to/your/service.proto - ``` - 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. - 3. Implement your service - -5. Generate reverse-proxy. Here we have to pass the path to the `your_service.yaml` in addition to the .proto file: - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --grpc-gateway_out=logtostderr=true,grpc_api_configuration=path/to/your_service.yaml:. \ - path/to/your_service.proto - ``` - - This will generate a reverse proxy `path/to/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. - - Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. - -6. Write an entrypoint - - Now you need to write an entrypoint of the proxy server. This step is the same whether the file is annotated or not. - ```go - package main - - import ( - "flag" - "net/http" - - "github.com/golang/glog" - "golang.org/x/net/context" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "google.golang.org/grpc" - - gw "path/to/your_service_package" - ) - - var ( - echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService") - ) - - func run() error { - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - mux := runtime.NewServeMux() - opts := []grpc.DialOption{grpc.WithInsecure()} - err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts) - if err != nil { - return err - } - - return http.ListenAndServe(":8080", mux) - } - - func main() { - flag.Parse() - defer glog.Flush() + ```sh + protoc -I. --go_out=plugins=grpc,paths=source_relative:./gen/go/ your/service/v1/your_service.proto + ``` - if err := run(); err != nil { - glog.Fatal(err) - } - } - ``` + It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`. -7. (Optional) Generate swagger definitions +4. Implement your service in gRPC as usual -Swagger generation in this step is equivalent to gateway generation. Again pass the path to the yaml file in addition to the proto: +5. Generate the reverse-proxy. Here we have to pass the path to the `your_service.yaml` in addition to the .proto file: ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --swagger_out=logtostderr=true,grpc_api_configuration=path/to/your_service.yaml:. \ - path/to/your_service.proto + protoc -I. --grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=path/to/your_service.yaml:./gen/go \ + your/service/v1/your_service.proto ``` + + This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. All other steps work as before. If you want you can remove the googleapis include path in step 3 and 4 as the unannotated proto no longer requires them. diff --git a/docs/_docs/usage.md b/docs/_docs/usage.md index 23d613dd812..949daf88d87 100644 --- a/docs/_docs/usage.md +++ b/docs/_docs/usage.md @@ -4,213 +4,4 @@ category: documentation # How do I use this? -## Installation -First, you need to install ProtocolBuffers 3.0.0-beta-3 or later. - -```sh -mkdir tmp -cd tmp -git clone https://github.com/google/protobuf -cd protobuf -./autogen.sh -./configure -make -make check -sudo make install -``` - -Then, `go get -u` as usual the following packages: - -```sh -go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway -go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger -go get -u github.com/golang/protobuf/protoc-gen-go -``` - -## Usage -Make sure that your `$GOPATH/bin` is in your `$PATH`. - -1. Define your service in gRPC - - your_service.proto: - ```protobuf - syntax = "proto3"; - package example; - message StringMessage { - string value = 1; - } - - service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} - } - ``` -2. Add a [custom option](https://cloud.google.com/service-management/reference/rpc/google.api#http) to the .proto file - - your_service.proto: - ```diff - syntax = "proto3"; - package example; - + - +import "google/api/annotations.proto"; - + - message StringMessage { - string value = 1; - } - - service YourService { - - rpc Echo(StringMessage) returns (StringMessage) {} - + rpc Echo(StringMessage) returns (StringMessage) { - + option (google.api.http) = { - + post: "/v1/example/echo" - + body: "*" - + }; - + } - } - ``` - - See [a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) - for examples of more annotations you can add to customize gateway behavior - and generated Swagger output. - - If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) file. [Check our documentation](grpcapiconfiguration.html) for more information. - -3. Generate gRPC stub - - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --go_out=plugins=grpc:. \ - path/to/your_service.proto - ``` - - It will generate a stub file `path/to/your_service.pb.go`. -4. Implement your service in gRPC as usual - 1. (Optional) Generate gRPC stub in the language you want. - - e.g. - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --ruby_out=. \ - path/to/your/service_proto - - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --plugin=protoc-gen-grpc=grpc_ruby_plugin \ - --grpc-ruby_out=. \ - path/to/your/service.proto - ``` - 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. - 3. Implement your service - -5. Generate reverse-proxy - - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --grpc-gateway_out=logtostderr=true:. \ - path/to/your_service.proto - ``` - - It will generate a reverse proxy `path/to/your_service.pb.gw.go`. - - Note: After generating the code for each of the stubs, to build the code, you will want to run ```go get .``` from the directory containing the stubs. - -6. Write an entry point - - Now you need to write an entry point of the proxy server. - ```go - package main - - import ( - "flag" - "net/http" - - "github.com/golang/glog" - "golang.org/x/net/context" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "google.golang.org/grpc" - - gw "path/to/your_service_package" - ) - - var ( - echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService") - ) - - func run() error { - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - mux := runtime.NewServeMux() - opts := []grpc.DialOption{grpc.WithInsecure()} - err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts) - if err != nil { - return err - } - - return http.ListenAndServe(":8080", mux) - } - - func main() { - flag.Parse() - defer glog.Flush() - - if err := run(); err != nil { - glog.Fatal(err) - } - } - ``` - -7. (Optional) Generate swagger definitions - - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --swagger_out=logtostderr=true:. \ - path/to/your_service.proto - ``` - -## Parameters and flags - -During code generation with `protoc`, flags to grpc-gateway tools must be passed -through protoc using the `--_out=:` pattern, for -example: - -```sh ---grpc-gateway_out=logtostderr=true,repeated_path_param_separator=ssv:. ---swagger_out=logtostderr=true,repeated_path_param_separator=ssv:. -``` - -`protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to Golang import path. -They are compatible with [the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). - -Besides we also support the `request_context` parameter to use the `http.Request`'s Context (only for Go 1.7 and above). -This parameter can be useful to pass the request-scoped context between the gateway and the gRPC service. - -`protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with the parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. - -Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger -output (for example, `json_names_for_fields` to output JSON names for fields -instead of protobuf names). Run `protoc-gen-swagger --help` for more flag -details. Further Swagger customization is possible by annotating your `.proto` -files with options from -[openapiv2.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/protoc-gen-swagger/options/openapiv2.proto) - see -[a_bit_of_everything.proto](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto) -for examples. - -# Mapping gRPC to HTTP - -* [How gRPC error codes map to HTTP status codes in the response](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go#L15) -* HTTP request source IP is added as `X-Forwarded-For` gRPC request header -* HTTP request-host is added as `X-Forwarded-Host` gRPC request header -* HTTP `Authorization` header is added as `authorization` gRPC request header -* Remaining Permanent HTTP header keys (as specified by the IANA [here](http://www.iana.org/assignments/message-headers/message-headers.xhtml) are prefixed with `grpcgateway-` and added with their values to gRPC request header -* HTTP headers that start with 'Grpc-Metadata-' are mapped to gRPC metadata (after removing prefix 'Grpc-Metadata-') -* While configurable, the default {un,}marshaling uses [jsonpb](https://godoc.org/github.com/golang/protobuf/jsonpb) with `OrigName: true`. +See the README in [the repo](https://github.com/grpc-ecosystem/grpc-gateway/). diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index de9ca7acded..cbaf2742d2c 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -203,70 +203,81 @@ var file_examples_internal_helloworld_helloworld_proto_rawDesc = []byte{ 0x0a, 0x2d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x04, 0x0a, 0x0c, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, - 0x0a, 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x29, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x04, 0x0a, 0x0c, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, + 0x06, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x72, + 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x64, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x12, 0x37, + 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, - 0x72, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, - 0x09, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x12, 0x34, 0x0a, 0x07, 0x62, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x12, - 0x37, 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x12, 0x37, 0x0a, - 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x22, 0x26, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xdb, 0x02, 0x0a, 0x07, 0x47, - 0x72, 0x65, 0x65, 0x74, 0x65, 0x72, 0x12, 0xcf, 0x02, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x12, 0x18, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x12, - 0x0b, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5a, 0x16, 0x12, 0x14, - 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72, - 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d, - 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76, - 0x61, 0x6c, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18, - 0x12, 0x16, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b, - 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, - 0x2f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, - 0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, - 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, - 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, - 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, - 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, - 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x12, 0x3a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x22, 0x26, 0x0a, 0x0a, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x99, 0x03, 0x0a, 0x07, 0x47, 0x72, + 0x65, 0x65, 0x74, 0x65, 0x72, 0x12, 0x8d, 0x03, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x68, 0x65, 0x6c, + 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x90, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x02, 0x12, 0x0b, 0x2f, 0x73, + 0x61, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x5a, 0x16, 0x12, 0x14, 0x2f, 0x73, 0x61, + 0x79, 0x2f, 0x73, 0x74, 0x72, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, + 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, + 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x76, 0x61, 0x6c, 0x2f, + 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x18, 0x12, 0x16, 0x2f, + 0x73, 0x61, 0x79, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, + 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, + 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, + 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x76, 0x61, 0x6c, 0x2f, + 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1a, 0x12, 0x18, 0x2f, + 0x73, 0x61, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x69, 0x6e, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x5a, 0x1c, 0x12, 0x1a, 0x2f, 0x73, 0x61, 0x79, 0x2f, + 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x7d, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -283,8 +294,8 @@ func file_examples_internal_helloworld_helloworld_proto_rawDescGZIP() []byte { var file_examples_internal_helloworld_helloworld_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_examples_internal_helloworld_helloworld_proto_goTypes = []interface{}{ - (*HelloRequest)(nil), // 0: helloworld.HelloRequest - (*HelloReply)(nil), // 1: helloworld.HelloReply + (*HelloRequest)(nil), // 0: grpc.gateway.examples.internal.helloworld.HelloRequest + (*HelloReply)(nil), // 1: grpc.gateway.examples.internal.helloworld.HelloReply (*wrappers.StringValue)(nil), // 2: google.protobuf.StringValue (*wrappers.FloatValue)(nil), // 3: google.protobuf.FloatValue (*wrappers.DoubleValue)(nil), // 4: google.protobuf.DoubleValue @@ -296,17 +307,17 @@ var file_examples_internal_helloworld_helloworld_proto_goTypes = []interface{}{ (*wrappers.UInt64Value)(nil), // 10: google.protobuf.UInt64Value } var file_examples_internal_helloworld_helloworld_proto_depIdxs = []int32{ - 2, // 0: helloworld.HelloRequest.strVal:type_name -> google.protobuf.StringValue - 3, // 1: helloworld.HelloRequest.floatVal:type_name -> google.protobuf.FloatValue - 4, // 2: helloworld.HelloRequest.doubleVal:type_name -> google.protobuf.DoubleValue - 5, // 3: helloworld.HelloRequest.boolVal:type_name -> google.protobuf.BoolValue - 6, // 4: helloworld.HelloRequest.bytesVal:type_name -> google.protobuf.BytesValue - 7, // 5: helloworld.HelloRequest.int32Val:type_name -> google.protobuf.Int32Value - 8, // 6: helloworld.HelloRequest.uint32Val:type_name -> google.protobuf.UInt32Value - 9, // 7: helloworld.HelloRequest.int64Val:type_name -> google.protobuf.Int64Value - 10, // 8: helloworld.HelloRequest.uint64Val:type_name -> google.protobuf.UInt64Value - 0, // 9: helloworld.Greeter.SayHello:input_type -> helloworld.HelloRequest - 1, // 10: helloworld.Greeter.SayHello:output_type -> helloworld.HelloReply + 2, // 0: grpc.gateway.examples.internal.helloworld.HelloRequest.strVal:type_name -> google.protobuf.StringValue + 3, // 1: grpc.gateway.examples.internal.helloworld.HelloRequest.floatVal:type_name -> google.protobuf.FloatValue + 4, // 2: grpc.gateway.examples.internal.helloworld.HelloRequest.doubleVal:type_name -> google.protobuf.DoubleValue + 5, // 3: grpc.gateway.examples.internal.helloworld.HelloRequest.boolVal:type_name -> google.protobuf.BoolValue + 6, // 4: grpc.gateway.examples.internal.helloworld.HelloRequest.bytesVal:type_name -> google.protobuf.BytesValue + 7, // 5: grpc.gateway.examples.internal.helloworld.HelloRequest.int32Val:type_name -> google.protobuf.Int32Value + 8, // 6: grpc.gateway.examples.internal.helloworld.HelloRequest.uint32Val:type_name -> google.protobuf.UInt32Value + 9, // 7: grpc.gateway.examples.internal.helloworld.HelloRequest.int64Val:type_name -> google.protobuf.Int64Value + 10, // 8: grpc.gateway.examples.internal.helloworld.HelloRequest.uint64Val:type_name -> google.protobuf.UInt64Value + 0, // 9: grpc.gateway.examples.internal.helloworld.Greeter.SayHello:input_type -> grpc.gateway.examples.internal.helloworld.HelloRequest + 1, // 10: grpc.gateway.examples.internal.helloworld.Greeter.SayHello:output_type -> grpc.gateway.examples.internal.helloworld.HelloReply 10, // [10:11] is the sub-list for method output_type 9, // [9:10] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name @@ -390,7 +401,7 @@ func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient { func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) { out := new(HelloReply) - err := c.cc.Invoke(ctx, "/helloworld.Greeter/SayHello", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", in, out, opts...) if err != nil { return nil, err } @@ -424,7 +435,7 @@ func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/helloworld.Greeter/SayHello", + FullMethod: "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest)) @@ -433,7 +444,7 @@ func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(in } var _Greeter_serviceDesc = grpc.ServiceDesc{ - ServiceName: "helloworld.Greeter", + ServiceName: "grpc.gateway.examples.internal.helloworld.Greeter", HandlerType: (*GreeterServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 6c15db6e04a..868e0950c39 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -758,7 +758,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -778,7 +778,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -798,7 +798,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -818,7 +818,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -838,7 +838,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -858,7 +858,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -878,7 +878,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -898,7 +898,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -918,7 +918,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -938,7 +938,7 @@ func RegisterGreeterHandlerServer(ctx context.Context, mux *runtime.ServeMux, se ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -999,7 +999,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1019,7 +1019,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1039,7 +1039,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1059,7 +1059,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1079,7 +1079,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1099,7 +1099,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1119,7 +1119,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1139,7 +1139,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1159,7 +1159,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1179,7 +1179,7 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/helloworld.Greeter/SayHello") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.helloworld.Greeter/SayHello") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/helloworld/helloworld.proto b/examples/internal/helloworld/helloworld.proto index a685c65b8bc..fae2ab00777 100644 --- a/examples/internal/helloworld/helloworld.proto +++ b/examples/internal/helloworld/helloworld.proto @@ -1,6 +1,8 @@ syntax = "proto3"; -package helloworld; +package grpc.gateway.examples.internal.helloworld; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/helloworld"; import "google/api/annotations.proto"; import "google/protobuf/wrappers.proto"; diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index a01a36cd5c6..e671109f191 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -157,7 +157,7 @@ type ABitOfEverything struct { StringValue string `protobuf:"bytes,11,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` BytesValue []byte `protobuf:"bytes,29,opt,name=bytes_value,json=bytesValue,proto3" json:"bytes_value,omitempty"` Uint32Value uint32 `protobuf:"varint,13,opt,name=uint32_value,json=uint32Value,proto3" json:"uint32_value,omitempty"` - EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"enum_value,omitempty"` + EnumValue NumericEnum `protobuf:"varint,14,opt,name=enum_value,json=enumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"enum_value,omitempty"` PathEnumValue pathenum.PathEnum `protobuf:"varint,30,opt,name=path_enum_value,json=pathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.PathEnum" json:"path_enum_value,omitempty"` NestedPathEnumValue pathenum.MessagePathEnum_NestedPathEnum `protobuf:"varint,31,opt,name=nested_path_enum_value,json=nestedPathEnumValue,proto3,enum=grpc.gateway.examples.internal.pathenum.MessagePathEnum_NestedPathEnum" json:"nested_path_enum_value,omitempty"` Sfixed32Value int32 `protobuf:"fixed32,15,opt,name=sfixed32_value,json=sfixed32Value,proto3" json:"sfixed32_value,omitempty"` @@ -169,17 +169,17 @@ type ABitOfEverything struct { // *ABitOfEverything_OneofEmpty // *ABitOfEverything_OneofString OneofValue isABitOfEverything_OneofValue `protobuf_oneof:"oneof_value"` - MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum"` + MapValue map[string]NumericEnum `protobuf:"bytes,22,rep,name=map_value,json=mapValue,proto3" json:"map_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum"` MappedStringValue map[string]string `protobuf:"bytes,23,rep,name=mapped_string_value,json=mappedStringValue,proto3" json:"mapped_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MappedNestedValue map[string]*ABitOfEverything_Nested `protobuf:"bytes,24,rep,name=mapped_nested_value,json=mappedNestedValue,proto3" json:"mapped_nested_value,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` NonConventionalNameValue string `protobuf:"bytes,26,opt,name=nonConventionalNameValue,proto3" json:"nonConventionalNameValue,omitempty"` TimestampValue *timestamp.Timestamp `protobuf:"bytes,27,opt,name=timestamp_value,json=timestampValue,proto3" json:"timestamp_value,omitempty"` // repeated enum value. it is comma-separated in query - RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` + RepeatedEnumValue []NumericEnum `protobuf:"varint,28,rep,packed,name=repeated_enum_value,json=repeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"repeated_enum_value,omitempty"` // repeated numeric enum comment (This comment is overridden by the field annotation) - RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` + RepeatedEnumAnnotation []NumericEnum `protobuf:"varint,32,rep,packed,name=repeated_enum_annotation,json=repeatedEnumAnnotation,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"repeated_enum_annotation,omitempty"` // numeric enum comment (This comment is overridden by the field annotation) - EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` + EnumValueAnnotation NumericEnum `protobuf:"varint,33,opt,name=enum_value_annotation,json=enumValueAnnotation,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"enum_value_annotation,omitempty"` // repeated string comment (This comment is overridden by the field annotation) RepeatedStringAnnotation []string `protobuf:"bytes,34,rep,name=repeated_string_annotation,json=repeatedStringAnnotation,proto3" json:"repeated_string_annotation,omitempty"` // repeated nested object comment (This comment is overridden by the field annotation) @@ -514,7 +514,7 @@ type ABitOfEverythingRepeated struct { PathRepeatedStringValue []string `protobuf:"bytes,9,rep,name=path_repeated_string_value,json=pathRepeatedStringValue,proto3" json:"path_repeated_string_value,omitempty"` PathRepeatedBytesValue [][]byte `protobuf:"bytes,10,rep,name=path_repeated_bytes_value,json=pathRepeatedBytesValue,proto3" json:"path_repeated_bytes_value,omitempty"` PathRepeatedUint32Value []uint32 `protobuf:"varint,11,rep,packed,name=path_repeated_uint32_value,json=pathRepeatedUint32Value,proto3" json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` + PathRepeatedEnumValue []NumericEnum `protobuf:"varint,12,rep,packed,name=path_repeated_enum_value,json=pathRepeatedEnumValue,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.NumericEnum" json:"path_repeated_enum_value,omitempty"` PathRepeatedSfixed32Value []int32 `protobuf:"fixed32,13,rep,packed,name=path_repeated_sfixed32_value,json=pathRepeatedSfixed32Value,proto3" json:"path_repeated_sfixed32_value,omitempty"` PathRepeatedSfixed64Value []int64 `protobuf:"fixed64,14,rep,packed,name=path_repeated_sfixed64_value,json=pathRepeatedSfixed64Value,proto3" json:"path_repeated_sfixed64_value,omitempty"` PathRepeatedSint32Value []int32 `protobuf:"zigzag32,15,rep,packed,name=path_repeated_sint32_value,json=pathRepeatedSint32Value,proto3" json:"path_repeated_sint32_value,omitempty"` @@ -833,7 +833,7 @@ type ABitOfEverything_Nested struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Amount uint32 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` // DeepEnum comment. - Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` + Ok ABitOfEverything_Nested_DeepEnum `protobuf:"varint,3,opt,name=ok,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything_Nested_DeepEnum" json:"ok,omitempty"` } func (x *ABitOfEverything_Nested) Reset() { @@ -895,311 +895,317 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x0a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, - 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, - 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe3, 0x1c, 0x0a, - 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x12, 0x66, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, - 0x01, 0x4b, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, - 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, - 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, - 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, - 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x4a, - 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, 0x2e, 0x32, - 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0c, - 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1d, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x54, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, - 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, - 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, - 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a, 0x09, 0x6d, 0x61, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x81, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x51, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, + 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xb7, 0x1d, 0x0a, 0x10, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x18, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x68, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x54, 0x92, 0x41, 0x51, 0x80, 0x01, 0x01, 0x8a, 0x01, 0x4b, 0x5b, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, + 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, + 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, + 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, + 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x5f, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x12, 0x4a, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x42, 0x29, 0x92, 0x41, 0x26, 0x32, 0x11, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3a, 0x03, 0x30, + 0x2e, 0x32, 0xd2, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0c, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x07, + 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5a, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x59, 0x0a, 0x0f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, 0x68, 0x65, + 0x6e, 0x75, 0x6d, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x70, 0x61, + 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7c, 0x0a, 0x16, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x61, 0x74, + 0x68, 0x65, 0x6e, 0x75, 0x6d, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, + 0x68, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x13, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0f, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0d, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0b, 0x73, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x12, + 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, + 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, + 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0c, + 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x6b, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x16, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, + 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x65, 0x0a, 0x13, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x13, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x11, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, + 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x6b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0xb5, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, + 0x12, 0xbb, 0x01, 0x0a, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x20, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x03, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, - 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, - 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, - 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x42, 0x44, 0x92, 0x41, 0x41, 0x2a, 0x1b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x32, 0x22, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x6e, 0x75, 0x6d, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa3, + 0x01, 0x0a, 0x15, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3b, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x32, 0x92, 0x41, 0x2f, + 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, + 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, 0x35, 0x2a, 0x15, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xcd, 0x01, 0x0a, + 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x23, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, + 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xaa, 0x01, 0x0a, + 0x11, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x42, - 0x32, 0x92, 0x41, 0x2f, 0x2a, 0x12, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x65, 0x6e, - 0x75, 0x6d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x19, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, - 0x63, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x52, 0x13, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x22, 0x20, 0x03, 0x28, 0x09, 0x42, 0x38, 0x92, 0x41, - 0x35, 0x2a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1c, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0xc7, 0x01, 0x0a, 0x1a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x23, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, + 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x1a, 0xec, 0x01, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x7c, 0x0a, 0x02, 0x6f, 0x6b, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x46, 0x92, 0x41, 0x43, 0x2a, 0x1c, 0x52, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x23, 0x52, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x18, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x34, 0x92, 0x41, 0x31, 0x2a, 0x13, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x32, 0x1a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x37, 0x0a, 0x13, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, - 0x69, 0x64, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x03, 0x42, 0x07, - 0x92, 0x41, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0xe6, 0x01, 0x0a, 0x06, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x76, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4a, 0x2e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x44, + 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, 0x44, 0x65, + 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, 0x70, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x17, 0x92, 0x41, 0x14, 0x32, 0x12, 0x12, + 0x10, 0x7b, 0x20, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, 0x22, 0x20, + 0x7d, 0x1a, 0x78, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x8d, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5d, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2e, 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x32, 0x15, - 0x44, 0x65, 0x65, 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x02, 0x6f, 0x6b, 0x22, 0x1f, 0x0a, 0x08, 0x44, 0x65, 0x65, - 0x70, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x3a, 0x17, 0x92, 0x41, 0x14, 0x32, - 0x12, 0x12, 0x10, 0x7b, 0x20, 0x22, 0x6f, 0x6b, 0x22, 0x3a, 0x20, 0x22, 0x54, 0x52, 0x55, 0x45, - 0x22, 0x20, 0x7d, 0x1a, 0x72, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x87, 0x01, - 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x57, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x99, 0x02, 0x92, 0x41, 0x95, 0x02, 0x0a, 0x84, - 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x34, 0x12, - 0x32, 0x7b, 0x20, 0x22, 0x75, 0x75, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, - 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, - 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, - 0x22, 0x20, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x87, 0x09, 0x0a, 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, - 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, - 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, - 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, - 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, - 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, - 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6e, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x3a, 0x99, 0x02, 0x92, 0x41, 0x95, 0x02, 0x0a, 0x84, 0x01, 0x2a, 0x13, 0x41, 0x20, 0x62, + 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x32, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x79, 0x20, 0x63, + 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x6f, + 0x66, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0xd2, 0x01, 0x04, 0x75, 0x75, + 0x69, 0x64, 0xd2, 0x01, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0xd2, 0x01, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, + 0x56, 0x0a, 0x24, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x34, 0x12, 0x32, 0x7b, 0x20, 0x22, 0x75, 0x75, + 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x63, 0x66, 0x33, 0x36, 0x31, 0x65, 0x31, 0x2d, 0x34, + 0x62, 0x34, 0x34, 0x2d, 0x34, 0x38, 0x33, 0x64, 0x2d, 0x61, 0x31, 0x35, 0x39, 0x2d, 0x35, 0x34, + 0x64, 0x61, 0x62, 0x64, 0x66, 0x37, 0x65, 0x38, 0x31, 0x34, 0x22, 0x20, 0x7d, 0x42, 0x0d, 0x0a, + 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8d, 0x09, 0x0a, + 0x18, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, 0x16, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x01, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x03, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, + 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, + 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x16, 0x70, 0x61, + 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x06, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x07, 0x52, 0x18, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x08, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x70, 0x61, 0x74, 0x68, + 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x70, 0x61, 0x74, + 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x17, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x74, 0x0a, 0x18, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x15, 0x70, 0x61, 0x74, 0x68, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, @@ -1226,105 +1232,113 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x5d, 0x20, 0x7d, 0x22, 0x1a, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x6b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x9c, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x03, 0x61, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, - 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, - 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, - 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, - 0x32, 0xb9, 0x24, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x80, 0x04, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa2, 0x01, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x03, 0x61, 0x62, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x03, 0x61, 0x62, 0x65, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, + 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0x87, 0x26, 0x0a, + 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, - 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, - 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, - 0xb0, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3a, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf6, + 0x02, 0x22, 0xf3, 0x02, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x73, + 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3d, 0x73, 0x74, 0x72, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2f, 0x2a, 0x7d, 0x2f, 0x7b, 0x75, + 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, 0x66, + 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, + 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, + 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, + 0x70, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x06, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3a, - 0x01, 0x2a, 0x12, 0x85, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x0f, 0x2e, - 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3a, + 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, + 0x2a, 0x12, 0x83, 0x02, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x28, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2b, 0x1a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x96, + 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xfd, 0x01, 0x0a, - 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x12, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x9d, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x96, 0x01, 0x1a, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, - 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, - 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, - 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, - 0x32, 0x61, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, - 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, - 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x0f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, + 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x03, 0x61, + 0x62, 0x65, 0x5a, 0x31, 0x32, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, 0x75, 0x69, 0x64, 0x7d, + 0x3a, 0x03, 0x61, 0x62, 0x65, 0x5a, 0x30, 0x32, 0x2b, 0x2f, 0x76, 0x32, 0x61, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x61, 0x62, 0x65, 0x2e, 0x75, + 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xca, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x2e, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x2a, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, @@ -1334,298 +1348,308 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6a, 0x14, 0x0a, 0x0e, 0x78, 0x2d, 0x69, 0x72, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x12, 0x02, 0x20, 0x01, 0x12, 0xec, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x12, 0x02, 0x20, 0x01, 0x12, 0xf2, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, - 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, - 0x01, 0x62, 0x00, 0x12, 0x9d, 0x05, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x8b, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, + 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x7b, 0x75, 0x75, 0x69, + 0x64, 0x7d, 0x92, 0x41, 0x54, 0x22, 0x4e, 0x0a, 0x1c, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, + 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x47, 0x65, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, + 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x12, 0xa9, 0x05, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x48, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x42, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, - 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, - 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, - 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x22, 0x80, 0x04, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xf9, 0x03, 0x12, 0xf6, 0x03, 0x2f, + 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, + 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, + 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, - 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, - 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x7d, 0x12, 0x9b, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, - 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, - 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, - 0x6f, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, - 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, - 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, - 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x4a, 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, - 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, 0x03, - 0x35, 0x30, 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, - 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, - 0x20, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, - 0x08, 0x78, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, - 0x03, 0x12, 0xc7, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, - 0x68, 0x6f, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, - 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, + 0x78, 0x65, 0x64, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, + 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x12, 0xa7, 0x04, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, - 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, - 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, - 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, - 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x90, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, - 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0xac, 0x03, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5d, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, + 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, + 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x5a, 0x19, 0x22, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5a, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x92, 0x41, 0xc5, 0x02, 0x0a, 0x08, 0x65, 0x63, 0x68, 0x6f, + 0x20, 0x72, 0x70, 0x63, 0x12, 0x11, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x3a, 0x20, 0x45, + 0x63, 0x68, 0x6f, 0x20, 0x72, 0x70, 0x63, 0x1a, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x22, 0x44, 0x0a, 0x12, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x12, + 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4a, + 0x39, 0x0a, 0x03, 0x32, 0x30, 0x30, 0x12, 0x32, 0x22, 0x30, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x7b, 0x22, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x4a, 0x56, 0x0a, 0x03, 0x35, 0x30, + 0x33, 0x12, 0x4f, 0x0a, 0x36, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x69, 0x73, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x75, + 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x2a, 0x15, 0x0a, 0x08, 0x78, + 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x59, 0x40, 0x4a, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x12, + 0xd3, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, + 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, - 0x01, 0x2a, 0x12, 0xd6, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, + 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, + 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, - 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xea, 0x01, 0x0a, 0x1d, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, - 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, - 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, + 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, + 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x3a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, - 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, - 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, - 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, - 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, - 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, - 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0xbb, 0x09, 0x5a, 0x09, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xac, 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, - 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, - 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, - 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, - 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, - 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, - 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, - 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, - 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, - 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, - 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, - 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, - 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, - 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x51, 0x0a, 0x03, 0x34, - 0x31, 0x38, 0x12, 0x4a, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, - 0x6f, 0x74, 0x2e, 0x12, 0x39, 0x0a, 0x37, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, - 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, - 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, - 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, - 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, - 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, - 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, - 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, - 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, - 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, - 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, - 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, - 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, - 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, - 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, + 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, + 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, + 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x74, 0x65, 0x78, 0x74, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, + 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, + 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, + 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, + 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x42, 0x83, 0x0a, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x92, 0x41, 0xb2, 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, + 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, + 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, + 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, + 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, + 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, + 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, + 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, + 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, + 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, + 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, + 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, + 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, + 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, + 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, + 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, + 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, + 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, + 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, + 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, + 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, + 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, + 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, + 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, + 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, + 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, + 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, + 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, + 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1643,92 +1667,92 @@ func file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDescGZI var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_goTypes = []interface{}{ - (NumericEnum)(0), // 0: grpc.gateway.examples.internal.examplepb.NumericEnum - (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.DeepEnum - (*ABitOfEverything)(nil), // 2: grpc.gateway.examples.internal.examplepb.ABitOfEverything - (*ABitOfEverythingRepeated)(nil), // 3: grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated - (*Body)(nil), // 4: grpc.gateway.examples.internal.examplepb.Body - (*MessageWithBody)(nil), // 5: grpc.gateway.examples.internal.examplepb.MessageWithBody - (*UpdateV2Request)(nil), // 6: grpc.gateway.examples.internal.examplepb.UpdateV2Request - (*ABitOfEverything_Nested)(nil), // 7: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - nil, // 8: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry - nil, // 9: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry - nil, // 10: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry + (NumericEnum)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.NumericEnum + (ABitOfEverything_Nested_DeepEnum)(0), // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + (*ABitOfEverything)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + (*ABitOfEverythingRepeated)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + (*Body)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.Body + (*MessageWithBody)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + (*UpdateV2Request)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + (*ABitOfEverything_Nested)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + nil, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + nil, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + nil, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry (pathenum.PathEnum)(0), // 11: grpc.gateway.examples.internal.pathenum.PathEnum (pathenum.MessagePathEnum_NestedPathEnum)(0), // 12: grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum (*empty.Empty)(nil), // 13: google.protobuf.Empty (*timestamp.Timestamp)(nil), // 14: google.protobuf.Timestamp (*field_mask.FieldMask)(nil), // 15: google.protobuf.FieldMask - (*sub2.IdMessage)(nil), // 16: sub2.IdMessage - (*sub.StringMessage)(nil), // 17: grpc.gateway.examples.internal.sub.StringMessage + (*sub2.IdMessage)(nil), // 16: grpc.gateway.examples.internal.proto.sub2.IdMessage + (*sub.StringMessage)(nil), // 17: grpc.gateway.examples.internal.proto.sub.StringMessage (*duration.Duration)(nil), // 18: google.protobuf.Duration (*wrappers.StringValue)(nil), // 19: google.protobuf.StringValue } var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_depIdxs = []int32{ - 7, // 0: grpc.gateway.examples.internal.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - 7, // 1: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - 0, // 2: grpc.gateway.examples.internal.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 11, // 3: grpc.gateway.examples.internal.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum - 12, // 4: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum - 13, // 5: grpc.gateway.examples.internal.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty - 8, // 6: grpc.gateway.examples.internal.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry - 9, // 7: grpc.gateway.examples.internal.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedStringValueEntry - 10, // 8: grpc.gateway.examples.internal.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry - 14, // 9: grpc.gateway.examples.internal.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp - 0, // 10: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 0, // 11: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 0, // 12: grpc.gateway.examples.internal.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 7, // 13: grpc.gateway.examples.internal.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - 7, // 14: grpc.gateway.examples.internal.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - 0, // 15: grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 4, // 16: grpc.gateway.examples.internal.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.examplepb.Body - 2, // 17: grpc.gateway.examples.internal.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 15, // 18: grpc.gateway.examples.internal.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask - 1, // 19: grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested.DeepEnum - 0, // 20: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.examplepb.NumericEnum - 7, // 21: grpc.gateway.examples.internal.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.examplepb.ABitOfEverything.Nested - 2, // 22: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 23: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 16, // 24: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Lookup:input_type -> sub2.IdMessage - 2, // 25: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 6, // 26: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.examplepb.UpdateV2Request - 16, // 27: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Delete:input_type -> sub2.IdMessage - 2, // 28: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 3, // 29: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated - 17, // 30: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.sub.StringMessage - 2, // 31: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 18, // 32: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration - 13, // 33: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty - 13, // 34: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty - 5, // 35: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.examplepb.MessageWithBody - 4, // 36: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.examplepb.Body - 2, // 37: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 38: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 39: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 13, // 40: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty - 13, // 41: grpc.gateway.examples.internal.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty - 13, // 42: grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty - 2, // 43: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 44: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 45: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 13, // 46: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty - 13, // 47: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty - 13, // 48: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty - 13, // 49: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty - 3, // 50: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverythingRepeated - 17, // 51: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.sub.StringMessage - 2, // 52: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 13, // 53: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty - 13, // 54: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty - 13, // 55: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty - 13, // 56: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty - 13, // 57: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty - 2, // 58: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 59: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 60: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 19, // 61: grpc.gateway.examples.internal.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue - 13, // 62: grpc.gateway.examples.internal.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty - 13, // 63: grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty + 7, // 0: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.single_nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 7, // 1: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 0, // 2: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 11, // 3: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.PathEnum + 12, // 4: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_path_enum_value:type_name -> grpc.gateway.examples.internal.pathenum.MessagePathEnum.NestedPathEnum + 13, // 5: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.oneof_empty:type_name -> google.protobuf.Empty + 8, // 6: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.map_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry + 9, // 7: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_string_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedStringValueEntry + 10, // 8: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.mapped_nested_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry + 14, // 9: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.timestamp_value:type_name -> google.protobuf.Timestamp + 0, // 10: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 0, // 11: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_enum_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 0, // 12: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.enum_value_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 7, // 13: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.repeated_nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 7, // 14: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.nested_annotation:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 0, // 15: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated.path_repeated_enum_value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 4, // 16: grpc.gateway.examples.internal.proto.examplepb.MessageWithBody.data:type_name -> grpc.gateway.examples.internal.proto.examplepb.Body + 2, // 17: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.abe:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 15, // 18: grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request.update_mask:type_name -> google.protobuf.FieldMask + 1, // 19: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.ok:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested.DeepEnum + 0, // 20: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MapValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.NumericEnum + 7, // 21: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.MappedNestedValueEntry.value:type_name -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything.Nested + 2, // 22: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 23: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 16, // 24: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 2, // 25: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 6, // 26: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:input_type -> grpc.gateway.examples.internal.proto.examplepb.UpdateV2Request + 16, // 27: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:input_type -> grpc.gateway.examples.internal.proto.sub2.IdMessage + 2, // 28: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 3, // 29: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 17, // 30: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 2, // 31: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 18, // 32: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:input_type -> google.protobuf.Duration + 13, // 33: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:input_type -> google.protobuf.Empty + 13, // 34: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:input_type -> google.protobuf.Empty + 5, // 35: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.MessageWithBody + 4, // 36: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.Body + 2, // 37: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 38: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 39: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 13, // 40: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:input_type -> google.protobuf.Empty + 13, // 41: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:input_type -> google.protobuf.Empty + 13, // 42: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:input_type -> google.protobuf.Empty + 2, // 43: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 44: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CreateBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 45: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Lookup:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 13, // 46: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Update:output_type -> google.protobuf.Empty + 13, // 47: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.UpdateV2:output_type -> google.protobuf.Empty + 13, // 48: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Delete:output_type -> google.protobuf.Empty + 13, // 49: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetQuery:output_type -> google.protobuf.Empty + 3, // 50: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetRepeatedQuery:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingRepeated + 17, // 51: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Echo:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 2, // 52: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.DeepPathEcho:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 13, // 53: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.NoBindings:output_type -> google.protobuf.Empty + 13, // 54: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.Timeout:output_type -> google.protobuf.Empty + 13, // 55: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.ErrorWithDetails:output_type -> google.protobuf.Empty + 13, // 56: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.GetMessageWithBody:output_type -> google.protobuf.Empty + 13, // 57: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.PostWithEmptyBody:output_type -> google.protobuf.Empty + 2, // 58: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 59: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckNestedEnumGetQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 60: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.CheckPostQueryParams:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 19, // 61: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService.OverwriteResponseContentType:output_type -> google.protobuf.StringValue + 13, // 62: grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName.Empty:output_type -> google.protobuf.Empty + 13, // 63: grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings.NoBindings:output_type -> google.protobuf.Empty 43, // [43:64] is the sub-list for method output_type 22, // [22:43] is the sub-list for method input_type 22, // [22:22] is the sub-list for extension type_name @@ -1893,7 +1917,7 @@ func NewABitOfEverythingServiceClient(cc grpc.ClientConnInterface) ABitOfEveryth func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", in, out, opts...) if err != nil { return nil, err } @@ -1902,7 +1926,7 @@ func (c *aBitOfEverythingServiceClient) Create(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", in, out, opts...) if err != nil { return nil, err } @@ -1911,7 +1935,7 @@ func (c *aBitOfEverythingServiceClient) CreateBody(ctx context.Context, in *ABit func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", in, out, opts...) if err != nil { return nil, err } @@ -1920,7 +1944,7 @@ func (c *aBitOfEverythingServiceClient) Lookup(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", in, out, opts...) if err != nil { return nil, err } @@ -1929,7 +1953,7 @@ func (c *aBitOfEverythingServiceClient) Update(ctx context.Context, in *ABitOfEv func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *UpdateV2Request, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", in, out, opts...) if err != nil { return nil, err } @@ -1938,7 +1962,7 @@ func (c *aBitOfEverythingServiceClient) UpdateV2(ctx context.Context, in *Update func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdMessage, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", in, out, opts...) if err != nil { return nil, err } @@ -1947,7 +1971,7 @@ func (c *aBitOfEverythingServiceClient) Delete(ctx context.Context, in *sub2.IdM func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", in, out, opts...) if err != nil { return nil, err } @@ -1956,7 +1980,7 @@ func (c *aBitOfEverythingServiceClient) GetQuery(ctx context.Context, in *ABitOf func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in *ABitOfEverythingRepeated, opts ...grpc.CallOption) (*ABitOfEverythingRepeated, error) { out := new(ABitOfEverythingRepeated) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", in, out, opts...) if err != nil { return nil, err } @@ -1965,7 +1989,7 @@ func (c *aBitOfEverythingServiceClient) GetRepeatedQuery(ctx context.Context, in func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.StringMessage, opts ...grpc.CallOption) (*sub.StringMessage, error) { out := new(sub.StringMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -1974,7 +1998,7 @@ func (c *aBitOfEverythingServiceClient) Echo(ctx context.Context, in *sub.String func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", in, out, opts...) if err != nil { return nil, err } @@ -1983,7 +2007,7 @@ func (c *aBitOfEverythingServiceClient) DeepPathEcho(ctx context.Context, in *AB func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *duration.Duration, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -1992,7 +2016,7 @@ func (c *aBitOfEverythingServiceClient) NoBindings(ctx context.Context, in *dura func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", in, out, opts...) if err != nil { return nil, err } @@ -2001,7 +2025,7 @@ func (c *aBitOfEverythingServiceClient) Timeout(ctx context.Context, in *empty.E func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", in, out, opts...) if err != nil { return nil, err } @@ -2010,7 +2034,7 @@ func (c *aBitOfEverythingServiceClient) ErrorWithDetails(ctx context.Context, in func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, in *MessageWithBody, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", in, out, opts...) if err != nil { return nil, err } @@ -2019,7 +2043,7 @@ func (c *aBitOfEverythingServiceClient) GetMessageWithBody(ctx context.Context, func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, in *Body, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", in, out, opts...) if err != nil { return nil, err } @@ -2028,7 +2052,7 @@ func (c *aBitOfEverythingServiceClient) PostWithEmptyBody(ctx context.Context, i func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -2037,7 +2061,7 @@ func (c *aBitOfEverythingServiceClient) CheckGetQueryParams(ctx context.Context, func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -2046,7 +2070,7 @@ func (c *aBitOfEverythingServiceClient) CheckNestedEnumGetQueryParams(ctx contex func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context, in *ABitOfEverything, opts ...grpc.CallOption) (*ABitOfEverything, error) { out := new(ABitOfEverything) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", in, out, opts...) if err != nil { return nil, err } @@ -2055,7 +2079,7 @@ func (c *aBitOfEverythingServiceClient) CheckPostQueryParams(ctx context.Context func (c *aBitOfEverythingServiceClient) OverwriteResponseContentType(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*wrappers.StringValue, error) { out := new(wrappers.StringValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", in, out, opts...) if err != nil { return nil, err } @@ -2171,7 +2195,7 @@ func _ABitOfEverythingService_Create_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Create(ctx, req.(*ABitOfEverything)) @@ -2189,7 +2213,7 @@ func _ABitOfEverythingService_CreateBody_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CreateBody(ctx, req.(*ABitOfEverything)) @@ -2207,7 +2231,7 @@ func _ABitOfEverythingService_Lookup_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Lookup(ctx, req.(*sub2.IdMessage)) @@ -2225,7 +2249,7 @@ func _ABitOfEverythingService_Update_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Update(ctx, req.(*ABitOfEverything)) @@ -2243,7 +2267,7 @@ func _ABitOfEverythingService_UpdateV2_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).UpdateV2(ctx, req.(*UpdateV2Request)) @@ -2261,7 +2285,7 @@ func _ABitOfEverythingService_Delete_Handler(srv interface{}, ctx context.Contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Delete(ctx, req.(*sub2.IdMessage)) @@ -2279,7 +2303,7 @@ func _ABitOfEverythingService_GetQuery_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetQuery(ctx, req.(*ABitOfEverything)) @@ -2297,7 +2321,7 @@ func _ABitOfEverythingService_GetRepeatedQuery_Handler(srv interface{}, ctx cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetRepeatedQuery(ctx, req.(*ABitOfEverythingRepeated)) @@ -2315,7 +2339,7 @@ func _ABitOfEverythingService_Echo_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Echo(ctx, req.(*sub.StringMessage)) @@ -2333,7 +2357,7 @@ func _ABitOfEverythingService_DeepPathEcho_Handler(srv interface{}, ctx context. } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).DeepPathEcho(ctx, req.(*ABitOfEverything)) @@ -2351,7 +2375,7 @@ func _ABitOfEverythingService_NoBindings_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/NoBindings", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).NoBindings(ctx, req.(*duration.Duration)) @@ -2369,7 +2393,7 @@ func _ABitOfEverythingService_Timeout_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).Timeout(ctx, req.(*empty.Empty)) @@ -2387,7 +2411,7 @@ func _ABitOfEverythingService_ErrorWithDetails_Handler(srv interface{}, ctx cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).ErrorWithDetails(ctx, req.(*empty.Empty)) @@ -2405,7 +2429,7 @@ func _ABitOfEverythingService_GetMessageWithBody_Handler(srv interface{}, ctx co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).GetMessageWithBody(ctx, req.(*MessageWithBody)) @@ -2423,7 +2447,7 @@ func _ABitOfEverythingService_PostWithEmptyBody_Handler(srv interface{}, ctx con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).PostWithEmptyBody(ctx, req.(*Body)) @@ -2441,7 +2465,7 @@ func _ABitOfEverythingService_CheckGetQueryParams_Handler(srv interface{}, ctx c } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckGetQueryParams(ctx, req.(*ABitOfEverything)) @@ -2459,7 +2483,7 @@ func _ABitOfEverythingService_CheckNestedEnumGetQueryParams_Handler(srv interfac } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckNestedEnumGetQueryParams(ctx, req.(*ABitOfEverything)) @@ -2477,7 +2501,7 @@ func _ABitOfEverythingService_CheckPostQueryParams_Handler(srv interface{}, ctx } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).CheckPostQueryParams(ctx, req.(*ABitOfEverything)) @@ -2495,7 +2519,7 @@ func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ABitOfEverythingServiceServer).OverwriteResponseContentType(ctx, req.(*empty.Empty)) @@ -2504,7 +2528,7 @@ func _ABitOfEverythingService_OverwriteResponseContentType_Handler(srv interface } var _ABitOfEverythingService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.ABitOfEverythingService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService", HandlerType: (*ABitOfEverythingServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -2605,7 +2629,7 @@ func NewCamelCaseServiceNameClient(cc grpc.ClientConnInterface) CamelCaseService func (c *camelCaseServiceNameClient) Empty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.camelCaseServiceName/Empty", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName/Empty", in, out, opts...) if err != nil { return nil, err } @@ -2639,7 +2663,7 @@ func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.camelCaseServiceName/Empty", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName/Empty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(CamelCaseServiceNameServer).Empty(ctx, req.(*empty.Empty)) @@ -2648,7 +2672,7 @@ func _CamelCaseServiceName_Empty_Handler(srv interface{}, ctx context.Context, d } var _CamelCaseServiceName_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.camelCaseServiceName", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.camelCaseServiceName", HandlerType: (*CamelCaseServiceNameServer)(nil), Methods: []grpc.MethodDesc{ { @@ -2677,7 +2701,7 @@ func NewAnotherServiceWithNoBindingsClient(cc grpc.ClientConnInterface) AnotherS func (c *anotherServiceWithNoBindingsClient) NoBindings(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings/NoBindings", in, out, opts...) if err != nil { return nil, err } @@ -2711,7 +2735,7 @@ func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings/NoBindings", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings/NoBindings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(AnotherServiceWithNoBindingsServer).NoBindings(ctx, req.(*empty.Empty)) @@ -2720,7 +2744,7 @@ func _AnotherServiceWithNoBindings_NoBindings_Handler(srv interface{}, ctx conte } var _AnotherServiceWithNoBindings_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.AnotherServiceWithNoBindings", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.AnotherServiceWithNoBindings", HandlerType: (*AnotherServiceWithNoBindingsServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 0ad26cac2df..b06f5ca1436 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -2118,7 +2118,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2138,7 +2138,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2158,7 +2158,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2178,7 +2178,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2198,7 +2198,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2218,7 +2218,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2238,7 +2238,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2258,7 +2258,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2278,7 +2278,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2298,7 +2298,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2318,7 +2318,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2338,7 +2338,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2358,7 +2358,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2378,7 +2378,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2398,7 +2398,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2418,7 +2418,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2438,7 +2438,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2458,7 +2458,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2478,7 +2478,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2498,7 +2498,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2518,7 +2518,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2538,7 +2538,7 @@ func RegisterABitOfEverythingServiceHandlerServer(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2566,7 +2566,7 @@ func RegisterCamelCaseServiceNameHandlerServer(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.CamelCaseServiceName/Empty") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2627,7 +2627,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Create") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2647,7 +2647,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CreateBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CreateBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2667,7 +2667,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Lookup") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Lookup") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2687,7 +2687,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Update") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2707,7 +2707,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2727,7 +2727,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2747,7 +2747,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/UpdateV2") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/UpdateV2") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2767,7 +2767,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Delete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Delete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2787,7 +2787,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetQuery") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2807,7 +2807,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetRepeatedQuery") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetRepeatedQuery") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2827,7 +2827,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2847,7 +2847,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2867,7 +2867,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2887,7 +2887,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/DeepPathEcho") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/DeepPathEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2907,7 +2907,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/Timeout") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/Timeout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2927,7 +2927,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/ErrorWithDetails") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/ErrorWithDetails") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2947,7 +2947,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/GetMessageWithBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/GetMessageWithBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2967,7 +2967,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/PostWithEmptyBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/PostWithEmptyBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2987,7 +2987,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckGetQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3007,7 +3007,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckNestedEnumGetQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3027,7 +3027,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/CheckPostQueryParams") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/CheckPostQueryParams") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3047,7 +3047,7 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ABitOfEverythingService/OverwriteResponseContentType") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ABitOfEverythingService/OverwriteResponseContentType") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -3200,7 +3200,7 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.CamelCaseServiceName/Empty") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.CamelCaseServiceName/Empty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index e391ffa65e3..9165784370b 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -1,6 +1,8 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; + +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; @@ -155,7 +157,7 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { description: "I'm a teapot."; schema: { json_schema: { - ref: ".grpc.gateway.examples.internal.examplepb.NumericEnum"; + ref: ".grpc.gateway.examples.internal.proto.examplepb.NumericEnum"; } } } @@ -348,7 +350,7 @@ service ABitOfEverythingService { body: "*" }; } - rpc Lookup(sub2.IdMessage) returns (ABitOfEverything) { + rpc Lookup(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (ABitOfEverything) { option (google.api.http) = { get: "/v1/example/a_bit_of_everything/{uuid}" }; @@ -376,7 +378,7 @@ service ABitOfEverythingService { }; } - rpc Delete(sub2.IdMessage) returns (google.protobuf.Empty) { + rpc Delete(grpc.gateway.examples.internal.proto.sub2.IdMessage) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/v1/example/a_bit_of_everything/{uuid}" }; @@ -428,7 +430,7 @@ service ABitOfEverythingService { // This makes it useful when validating that the OpenAPI v2 API // description exposes documentation correctly on all paths // defined as additional_bindings in the proto. - rpc Echo(grpc.gateway.examples.internal.sub.StringMessage) returns (grpc.gateway.examples.internal.sub.StringMessage) { + rpc Echo(grpc.gateway.examples.internal.proto.sub.StringMessage) returns (grpc.gateway.examples.internal.proto.sub.StringMessage) { option (google.api.http) = { get: "/v1/example/a_bit_of_everything/echo/{value}" additional_bindings { diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index bac43dc7c9e..b3bd2b70431 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -269,75 +269,83 @@ var file_examples_internal_proto_examplepb_echo_service_proto_rawDesc = []byte{ 0x0a, 0x34, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, - 0x0a, 0x08, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, - 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0x97, 0x02, 0x0a, 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, - 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, - 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x4a, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, - 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x02, 0x6e, - 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02, 0x6e, - 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, 0x74, - 0x32, 0x83, 0x05, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0xb0, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, - 0x7d, 0x5a, 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, - 0x6f, 0x74, 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, - 0x74, 0x65, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, - 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, - 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x08, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, + 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0xa3, 0x02, 0x0a, + 0x0d, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, + 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, + 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, + 0x61, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x37, 0x2e, 0x67, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, + 0x02, 0x6e, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, + 0x78, 0x74, 0x32, 0xa7, 0x05, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0xbc, 0x02, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x3d, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, + 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb5, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0xae, 0x01, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x5a, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x7b, 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x6c, 0x61, 0x6e, 0x67, 0x7d, 0x5a, + 0x31, 0x12, 0x2f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, + 0x63, 0x68, 0x6f, 0x31, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x6c, 0x69, 0x6e, 0x65, 0x5f, + 0x6e, 0x75, 0x6d, 0x7d, 0x2f, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x6e, 0x6f, 0x74, + 0x65, 0x7d, 0x5a, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x32, 0x2f, 0x7b, 0x6e, 0x6f, 0x2e, 0x6e, 0x6f, 0x74, 0x65, + 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3d, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x20, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xab, + 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3d, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, - 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x4d, 0x5a, 0x4b, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -354,18 +362,18 @@ func file_examples_internal_proto_examplepb_echo_service_proto_rawDescGZIP() []b var file_examples_internal_proto_examplepb_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_examples_internal_proto_examplepb_echo_service_proto_goTypes = []interface{}{ - (*Embedded)(nil), // 0: grpc.gateway.examples.internal.examplepb.Embedded - (*SimpleMessage)(nil), // 1: grpc.gateway.examples.internal.examplepb.SimpleMessage + (*Embedded)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Embedded + (*SimpleMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage } var file_examples_internal_proto_examplepb_echo_service_proto_depIdxs = []int32{ - 0, // 0: grpc.gateway.examples.internal.examplepb.SimpleMessage.status:type_name -> grpc.gateway.examples.internal.examplepb.Embedded - 0, // 1: grpc.gateway.examples.internal.examplepb.SimpleMessage.no:type_name -> grpc.gateway.examples.internal.examplepb.Embedded - 1, // 2: grpc.gateway.examples.internal.examplepb.EchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage - 1, // 3: grpc.gateway.examples.internal.examplepb.EchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage - 1, // 4: grpc.gateway.examples.internal.examplepb.EchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage - 1, // 5: grpc.gateway.examples.internal.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage - 1, // 6: grpc.gateway.examples.internal.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage - 1, // 7: grpc.gateway.examples.internal.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.SimpleMessage + 0, // 0: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.Embedded + 0, // 1: grpc.gateway.examples.internal.proto.examplepb.SimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.Embedded + 1, // 2: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 3: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 4: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 5: grpc.gateway.examples.internal.proto.examplepb.EchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 6: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage + 1, // 7: grpc.gateway.examples.internal.proto.examplepb.EchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.SimpleMessage 5, // [5:8] is the sub-list for method output_type 2, // [2:5] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name @@ -467,7 +475,7 @@ func NewEchoServiceClient(cc grpc.ClientConnInterface) EchoServiceClient { func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -476,7 +484,7 @@ func (c *echoServiceClient) Echo(ctx context.Context, in *SimpleMessage, opts .. func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -485,7 +493,7 @@ func (c *echoServiceClient) EchoBody(ctx context.Context, in *SimpleMessage, opt func (c *echoServiceClient) EchoDelete(ctx context.Context, in *SimpleMessage, opts ...grpc.CallOption) (*SimpleMessage, error) { out := new(SimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } @@ -533,7 +541,7 @@ func _EchoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/Echo", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).Echo(ctx, req.(*SimpleMessage)) @@ -551,7 +559,7 @@ func _EchoService_EchoBody_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).EchoBody(ctx, req.(*SimpleMessage)) @@ -569,7 +577,7 @@ func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(EchoServiceServer).EchoDelete(ctx, req.(*SimpleMessage)) @@ -578,7 +586,7 @@ func _EchoService_EchoDelete_Handler(srv interface{}, ctx context.Context, dec f } var _EchoService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.EchoService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.EchoService", HandlerType: (*EchoServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 52a6e4f291f..1d6c0d60b73 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -598,7 +598,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -618,7 +618,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -638,7 +638,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -658,7 +658,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -678,7 +678,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -698,7 +698,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -718,7 +718,7 @@ func RegisterEchoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -779,7 +779,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -799,7 +799,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -819,7 +819,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -839,7 +839,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -859,7 +859,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -879,7 +879,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -899,7 +899,7 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.EchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.EchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/echo_service.proto b/examples/internal/proto/examplepb/echo_service.proto index 29eceaa3e6d..1d191403707 100644 --- a/examples/internal/proto/examplepb/echo_service.proto +++ b/examples/internal/proto/examplepb/echo_service.proto @@ -1,11 +1,11 @@ syntax = "proto3"; -option go_package = "examplepb"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; // Echo Service // // Echo Service API consists of a single service which returns // a message. -package grpc.gateway.examples.internal.examplepb; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 4a92cbb3557..54462f7ef07 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -294,168 +294,181 @@ var file_examples_internal_proto_examplepb_flow_combination_proto_rawDesc = []by 0x0a, 0x38, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x39, 0x0a, 0x0d, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x61, 0x12, - 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, - 0x01, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x1e, 0x0a, 0x0a, 0x55, - 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0x6d, 0x0a, 0x0b, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x42, 0x0a, 0x01, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x39, 0x0a, 0x0d, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, + 0x63, 0x22, 0x1e, 0x0a, 0x0a, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x10, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x74, + 0x72, 0x22, 0x73, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x48, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, + 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x5d, 0x0a, 0x11, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x48, 0x0a, 0x01, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x52, 0x01, 0x61, 0x32, 0xf9, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, + 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9d, 0x01, 0x0a, 0x0b, 0x52, 0x70, + 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x01, 0x61, 0x12, 0x0c, - 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x62, 0x12, 0x0c, 0x0a, 0x01, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x63, 0x22, 0x57, 0x0a, 0x11, 0x53, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x42, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x01, 0x61, 0x32, 0x81, 0x11, 0x0a, 0x0f, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x91, 0x01, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0e, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0x99, 0x01, 0x0a, 0x0e, - 0x52, 0x70, 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x22, 0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x52, 0x70, + 0x63, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, + 0x01, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x70, 0x63, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x70, 0x63, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, - 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, - 0x63, 0x28, 0x01, 0x12, 0xa1, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x14, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x28, 0x01, 0x30, 0x01, 0x12, 0xbf, 0x02, 0x0a, 0x0a, 0x52, 0x70, 0x63, 0x42, - 0x6f, 0x64, 0x79, 0x52, 0x70, 0x63, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x19, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x13, 0x22, 0x11, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x28, 0x01, 0x12, 0xad, 0x01, 0x0a, 0x11, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x22, - 0x0d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, - 0x2a, 0x5a, 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, - 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, - 0x22, 0x0e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, - 0x5a, 0x1f, 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, - 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, - 0x63, 0x5a, 0x18, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, - 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x19, - 0x22, 0x17, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xb1, 0x01, 0x0a, 0x16, 0x52, 0x70, - 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x52, 0x70, 0x63, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, - 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xef, 0x01, - 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, - 0x70, 0x63, 0x12, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, + 0x14, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x28, 0x01, 0x30, 0x01, 0x12, 0xcb, 0x02, 0x0a, 0x0a, 0x52, 0x70, + 0x63, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x70, 0x63, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xba, 0x01, 0x22, 0x0d, 0x2f, + 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x2a, 0x5a, + 0x1b, 0x22, 0x19, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, + 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x10, 0x22, 0x0e, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x1f, + 0x22, 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, + 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, + 0x18, 0x22, 0x13, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x19, 0x22, 0x17, + 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xbd, 0x01, 0x0a, 0x16, 0x52, 0x70, 0x63, 0x50, + 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x70, 0x63, 0x12, 0x41, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, - 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x22, 0x20, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, - 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, - 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x5a, 0x1e, 0x22, 0x1c, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x5a, 0x21, 0x22, 0x1c, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, - 0xd9, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x2a, 0x5a, - 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, - 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, - 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, 0x2f, 0x72, 0x70, 0x63, - 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x6f, - 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1c, 0x22, 0x1a, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xb9, 0x01, 0x0a, 0x19, - 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, + 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, + 0x74, 0x72, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x12, 0xfb, 0x01, 0x0a, 0x10, 0x52, 0x70, 0x63, 0x50, + 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x70, 0x63, 0x12, 0x3b, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xfd, 0x01, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, - 0x61, 0x74, 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x68, 0x22, 0x20, 0x2f, + 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, + 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x72, 0x70, 0x63, 0x3a, + 0x01, 0x63, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, + 0x70, 0x63, 0x5a, 0x21, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x72, + 0x70, 0x63, 0x3a, 0x01, 0x63, 0x12, 0xe5, 0x02, 0x0a, 0x0d, 0x52, 0x70, 0x63, 0x42, 0x6f, 0x64, + 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x71, 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, - 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1f, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xcf, 0x01, 0x22, 0x10, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, + 0x2a, 0x5a, 0x1e, 0x22, 0x1c, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, + 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x7b, 0x63, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x5a, 0x13, 0x22, 0x11, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x22, 0x22, 0x1d, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x62, + 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, + 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1b, 0x22, 0x16, 0x2f, 0x72, + 0x70, 0x63, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, + 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x1c, 0x22, + 0x1a, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x61, 0x7d, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0xc5, 0x01, + 0x0a, 0x19, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, 0x68, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x41, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x53, 0x69, 0x6e, + 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x89, 0x02, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, 0x61, 0x74, + 0x68, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3b, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x22, 0x23, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, - 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x7b, 0x62, 0x7d, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x5a, 0x21, 0x22, 0x1f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x70, + 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, 0x2e, 0x73, 0x74, + 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5a, 0x24, 0x22, 0x1f, 0x2f, 0x72, 0x70, + 0x63, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x7b, 0x61, + 0x2e, 0x73, 0x74, 0x72, 0x7d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x01, 0x63, 0x30, + 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -472,35 +485,35 @@ func file_examples_internal_proto_examplepb_flow_combination_proto_rawDescGZIP() var file_examples_internal_proto_examplepb_flow_combination_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_examples_internal_proto_examplepb_flow_combination_proto_goTypes = []interface{}{ - (*EmptyProto)(nil), // 0: grpc.gateway.examples.internal.examplepb.EmptyProto - (*NonEmptyProto)(nil), // 1: grpc.gateway.examples.internal.examplepb.NonEmptyProto - (*UnaryProto)(nil), // 2: grpc.gateway.examples.internal.examplepb.UnaryProto - (*NestedProto)(nil), // 3: grpc.gateway.examples.internal.examplepb.NestedProto - (*SingleNestedProto)(nil), // 4: grpc.gateway.examples.internal.examplepb.SingleNestedProto + (*EmptyProto)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.EmptyProto + (*NonEmptyProto)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto + (*UnaryProto)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.UnaryProto + (*NestedProto)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.NestedProto + (*SingleNestedProto)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto } var file_examples_internal_proto_examplepb_flow_combination_proto_depIdxs = []int32{ - 2, // 0: grpc.gateway.examples.internal.examplepb.NestedProto.a:type_name -> grpc.gateway.examples.internal.examplepb.UnaryProto - 2, // 1: grpc.gateway.examples.internal.examplepb.SingleNestedProto.a:type_name -> grpc.gateway.examples.internal.examplepb.UnaryProto - 0, // 2: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyRpc:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 3: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyStream:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 4: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyRpc:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 5: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyStream:input_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 1, // 6: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyRpc:input_type -> grpc.gateway.examples.internal.examplepb.NonEmptyProto - 4, // 7: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedRpc:input_type -> grpc.gateway.examples.internal.examplepb.SingleNestedProto - 3, // 8: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedRpc:input_type -> grpc.gateway.examples.internal.examplepb.NestedProto - 1, // 9: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyStream:input_type -> grpc.gateway.examples.internal.examplepb.NonEmptyProto - 4, // 10: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedStream:input_type -> grpc.gateway.examples.internal.examplepb.SingleNestedProto - 3, // 11: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedStream:input_type -> grpc.gateway.examples.internal.examplepb.NestedProto - 0, // 12: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 13: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcEmptyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 14: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 15: grpc.gateway.examples.internal.examplepb.FlowCombination.StreamEmptyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 16: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 17: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 18: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedRpc:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 19: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcBodyStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 20: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathSingleNestedStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto - 0, // 21: grpc.gateway.examples.internal.examplepb.FlowCombination.RpcPathNestedStream:output_type -> grpc.gateway.examples.internal.examplepb.EmptyProto + 2, // 0: grpc.gateway.examples.internal.proto.examplepb.NestedProto.a:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnaryProto + 2, // 1: grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto.a:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnaryProto + 0, // 2: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 3: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 4: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 5: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 1, // 6: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto + 4, // 7: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto + 3, // 8: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedRpc:input_type -> grpc.gateway.examples.internal.proto.examplepb.NestedProto + 1, // 9: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonEmptyProto + 4, // 10: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.SingleNestedProto + 3, // 11: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.NestedProto + 0, // 12: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 13: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcEmptyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 14: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 15: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.StreamEmptyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 16: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 17: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 18: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedRpc:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 19: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcBodyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 20: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathSingleNestedStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto + 0, // 21: grpc.gateway.examples.internal.proto.examplepb.FlowCombination.RpcPathNestedStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.EmptyProto 12, // [12:22] is the sub-list for method output_type 2, // [2:12] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name @@ -629,7 +642,7 @@ func NewFlowCombinationClient(cc grpc.ClientConnInterface) FlowCombinationClient func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", in, out, opts...) if err != nil { return nil, err } @@ -637,7 +650,7 @@ func (c *flowCombinationClient) RpcEmptyRpc(ctx context.Context, in *EmptyProto, } func (c *flowCombinationClient) RpcEmptyStream(ctx context.Context, in *EmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream", opts...) if err != nil { return nil, err } @@ -669,7 +682,7 @@ func (x *flowCombinationRpcEmptyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) StreamEmptyRpc(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyRpcClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyRpc", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc", opts...) if err != nil { return nil, err } @@ -703,7 +716,7 @@ func (x *flowCombinationStreamEmptyRpcClient) CloseAndRecv() (*EmptyProto, error } func (c *flowCombinationClient) StreamEmptyStream(ctx context.Context, opts ...grpc.CallOption) (FlowCombination_StreamEmptyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream", opts...) if err != nil { return nil, err } @@ -735,7 +748,7 @@ func (x *flowCombinationStreamEmptyStreamClient) Recv() (*EmptyProto, error) { func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", in, out, opts...) if err != nil { return nil, err } @@ -744,7 +757,7 @@ func (c *flowCombinationClient) RpcBodyRpc(ctx context.Context, in *NonEmptyProt func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -753,7 +766,7 @@ func (c *flowCombinationClient) RpcPathSingleNestedRpc(ctx context.Context, in * func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (*EmptyProto, error) { out := new(EmptyProto) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", in, out, opts...) if err != nil { return nil, err } @@ -761,7 +774,7 @@ func (c *flowCombinationClient) RpcPathNestedRpc(ctx context.Context, in *Nested } func (c *flowCombinationClient) RpcBodyStream(ctx context.Context, in *NonEmptyProto, opts ...grpc.CallOption) (FlowCombination_RpcBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream", opts...) if err != nil { return nil, err } @@ -793,7 +806,7 @@ func (x *flowCombinationRpcBodyStreamClient) Recv() (*EmptyProto, error) { } func (c *flowCombinationClient) RpcPathSingleNestedStream(ctx context.Context, in *SingleNestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathSingleNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[4], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream", opts...) if err != nil { return nil, err } @@ -825,7 +838,7 @@ func (x *flowCombinationRpcPathSingleNestedStreamClient) Recv() (*EmptyProto, er } func (c *flowCombinationClient) RpcPathNestedStream(ctx context.Context, in *NestedProto, opts ...grpc.CallOption) (FlowCombination_RpcPathNestedStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream", opts...) + stream, err := c.cc.NewStream(ctx, &_FlowCombination_serviceDesc.Streams[5], "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream", opts...) if err != nil { return nil, err } @@ -919,7 +932,7 @@ func _FlowCombination_RpcEmptyRpc_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcEmptyRpc(ctx, req.(*EmptyProto)) @@ -1010,7 +1023,7 @@ func _FlowCombination_RpcBodyRpc_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcBodyRpc(ctx, req.(*NonEmptyProto)) @@ -1028,7 +1041,7 @@ func _FlowCombination_RpcPathSingleNestedRpc_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcPathSingleNestedRpc(ctx, req.(*SingleNestedProto)) @@ -1046,7 +1059,7 @@ func _FlowCombination_RpcPathNestedRpc_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(FlowCombinationServer).RpcPathNestedRpc(ctx, req.(*NestedProto)) @@ -1118,7 +1131,7 @@ func (x *flowCombinationRpcPathNestedStreamServer) Send(m *EmptyProto) error { } var _FlowCombination_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.FlowCombination", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.FlowCombination", HandlerType: (*FlowCombinationServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 2a57313c2e7..02d57599993 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -1494,7 +1494,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1535,7 +1535,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1555,7 +1555,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1575,7 +1575,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1595,7 +1595,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1615,7 +1615,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1635,7 +1635,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1655,7 +1655,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1675,7 +1675,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1695,7 +1695,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1715,7 +1715,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1735,7 +1735,7 @@ func RegisterFlowCombinationHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1873,7 +1873,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1893,7 +1893,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcEmptyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcEmptyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1913,7 +1913,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1933,7 +1933,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/StreamEmptyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/StreamEmptyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1953,7 +1953,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1973,7 +1973,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -1993,7 +1993,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2013,7 +2013,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2033,7 +2033,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2053,7 +2053,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2073,7 +2073,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2093,7 +2093,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2113,7 +2113,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2133,7 +2133,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2153,7 +2153,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedRpc") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedRpc") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2173,7 +2173,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2193,7 +2193,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2213,7 +2213,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2233,7 +2233,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2253,7 +2253,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2273,7 +2273,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2293,7 +2293,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2313,7 +2313,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathSingleNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathSingleNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2333,7 +2333,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2353,7 +2353,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -2373,7 +2373,7 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.FlowCombination/RpcPathNestedStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.FlowCombination/RpcPathNestedStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/flow_combination.proto b/examples/internal/proto/examplepb/flow_combination.proto index aabde901153..2375ec75f08 100644 --- a/examples/internal/proto/examplepb/flow_combination.proto +++ b/examples/internal/proto/examplepb/flow_combination.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; diff --git a/examples/internal/proto/examplepb/generated_input.proto b/examples/internal/proto/examplepb/generated_input.proto index e0e26d90c0a..bd4ab5fb247 100644 --- a/examples/internal/proto/examplepb/generated_input.proto +++ b/examples/internal/proto/examplepb/generated_input.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 6134100d70c..1b33678e880 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -545,122 +545,130 @@ var file_examples_internal_proto_examplepb_non_standard_names_proto_rawDesc = [] 0x0a, 0x3a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, - 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, - 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, - 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x58, 0x0a, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, - 0x99, 0x01, 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x08, 0x73, 0x75, 0x62, - 0x54, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, - 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, - 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa9, 0x01, 0x0a, 0x18, - 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x03, 0x0a, + 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x13, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x65, 0x6e, 0x47, 0x42, 0x12, 0x0e, 0x0a, 0x02, 0x6e, + 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6e, 0x6f, 0x12, 0x5e, 0x0a, 0x05, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, + 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, + 0x68, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x9f, 0x01, 0x0a, 0x05, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x6d, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x68, 0x69, 0x6e, + 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x75, 0x62, 0x54, + 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x27, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x75, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xaf, 0x01, + 0x0a, 0x18, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, + 0xd9, 0x03, 0x0a, 0x1f, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, + 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x45, 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02, + 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x6c, 0x0a, + 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x55, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, + 0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x79, 0x1a, 0xad, 0x01, 0x0a, 0x05, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x7a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x5e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, + 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, + 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x28, 0x0a, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x75, 0x62, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x75, 0x62, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x25, + 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, + 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x63, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0xcd, 0x03, 0x0a, 0x1f, 0x4e, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, - 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4e, - 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x19, 0x0a, - 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x07, 0x4c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, - 0x67, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x6e, 0x5f, 0x47, 0x42, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x45, - 0x6e, 0x5f, 0x47, 0x42, 0x12, 0x0f, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x79, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x05, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x2e, - 0x54, 0x68, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x79, 0x1a, 0xa7, 0x01, - 0x0a, 0x05, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x74, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x54, 0x68, - 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xdb, 0x03, 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc5, + 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x54, 0x68, - 0x69, 0x6e, 0x67, 0x52, 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x28, 0x0a, - 0x08, 0x53, 0x75, 0x62, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x62, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, - 0x62, 0x5f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x25, 0x4e, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x5d, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, - 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, - 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x32, 0xc3, 0x03, - 0x0a, 0x12, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x32, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x12, 0xf0, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, - 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, - 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x32, 0x2f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x32, + 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x3a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x55, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x57, 0x69, 0x74, 0x68, 0x4a, + 0x53, 0x4f, 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, + 0x72, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4a, 0x53, 0x4f, + 0x4e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x32, 0x2f, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, + 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -677,29 +685,29 @@ func file_examples_internal_proto_examplepb_non_standard_names_proto_rawDescGZIP var file_examples_internal_proto_examplepb_non_standard_names_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_examples_internal_proto_examplepb_non_standard_names_proto_goTypes = []interface{}{ - (*NonStandardMessage)(nil), // 0: grpc.gateway.examples.internal.examplepb.NonStandardMessage - (*NonStandardUpdateRequest)(nil), // 1: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest - (*NonStandardMessageWithJSONNames)(nil), // 2: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames - (*NonStandardWithJSONNamesUpdateRequest)(nil), // 3: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest - (*NonStandardMessage_Thing)(nil), // 4: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing - (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing - (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing - (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + (*NonStandardMessage)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage + (*NonStandardUpdateRequest)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest + (*NonStandardMessageWithJSONNames)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames + (*NonStandardWithJSONNamesUpdateRequest)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest + (*NonStandardMessage_Thing)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing + (*NonStandardMessage_Thing_SubThing)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.SubThing + (*NonStandardMessageWithJSONNames_Thing)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing + (*NonStandardMessageWithJSONNames_Thing_SubThing)(nil), // 7: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing (*field_mask.FieldMask)(nil), // 8: google.protobuf.FieldMask } var file_examples_internal_proto_examplepb_non_standard_names_proto_depIdxs = []int32{ - 4, // 0: grpc.gateway.examples.internal.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing - 0, // 1: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage - 8, // 2: grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask - 6, // 3: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing - 2, // 4: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames - 8, // 5: grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask - 5, // 6: grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessage.Thing.SubThing - 7, // 7: grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing - 1, // 8: grpc.gateway.examples.internal.examplepb.NonStandardService.Update:input_type -> grpc.gateway.examples.internal.examplepb.NonStandardUpdateRequest - 3, // 9: grpc.gateway.examples.internal.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.examples.internal.examplepb.NonStandardWithJSONNamesUpdateRequest - 0, // 10: grpc.gateway.examples.internal.examplepb.NonStandardService.Update:output_type -> grpc.gateway.examples.internal.examplepb.NonStandardMessage - 2, // 11: grpc.gateway.examples.internal.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.examples.internal.examplepb.NonStandardMessageWithJSONNames + 4, // 0: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.thing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing + 0, // 1: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest.body:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage + 8, // 2: grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 6, // 3: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.thing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing + 2, // 4: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest.body:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames + 8, // 5: grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 5, // 6: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.subThing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage.Thing.SubThing + 7, // 7: grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.subThing:type_name -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames.Thing.SubThing + 1, // 8: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.Update:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardUpdateRequest + 3, // 9: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.UpdateWithJSONNames:input_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardWithJSONNamesUpdateRequest + 0, // 10: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.Update:output_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessage + 2, // 11: grpc.gateway.examples.internal.proto.examplepb.NonStandardService.UpdateWithJSONNames:output_type -> grpc.gateway.examples.internal.proto.examplepb.NonStandardMessageWithJSONNames 10, // [10:12] is the sub-list for method output_type 8, // [8:10] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name @@ -858,7 +866,7 @@ func NewNonStandardServiceClient(cc grpc.ClientConnInterface) NonStandardService func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessage, error) { out := new(NonStandardMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", in, out, opts...) if err != nil { return nil, err } @@ -867,7 +875,7 @@ func (c *nonStandardServiceClient) Update(ctx context.Context, in *NonStandardUp func (c *nonStandardServiceClient) UpdateWithJSONNames(ctx context.Context, in *NonStandardWithJSONNamesUpdateRequest, opts ...grpc.CallOption) (*NonStandardMessageWithJSONNames, error) { out := new(NonStandardMessageWithJSONNames) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", in, out, opts...) if err != nil { return nil, err } @@ -907,7 +915,7 @@ func _NonStandardService_Update_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NonStandardServiceServer).Update(ctx, req.(*NonStandardUpdateRequest)) @@ -925,7 +933,7 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NonStandardServiceServer).UpdateWithJSONNames(ctx, req.(*NonStandardWithJSONNamesUpdateRequest)) @@ -934,7 +942,7 @@ func _NonStandardService_UpdateWithJSONNames_Handler(srv interface{}, ctx contex } var _NonStandardService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.NonStandardService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.NonStandardService", HandlerType: (*NonStandardServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 07a13b47af6..3ce536fcd1d 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -170,7 +170,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -190,7 +190,7 @@ func RegisterNonStandardServiceHandlerServer(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -251,7 +251,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/Update") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/Update") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -271,7 +271,7 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.NonStandardService/UpdateWithJSONNames") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.NonStandardService/UpdateWithJSONNames") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/non_standard_names.proto b/examples/internal/proto/examplepb/non_standard_names.proto index acb2203e1d5..1a1a76d1378 100644 --- a/examples/internal/proto/examplepb/non_standard_names.proto +++ b/examples/internal/proto/examplepb/non_standard_names.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/protobuf/field_mask.proto"; diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 8374bf4c5e5..111cba596d6 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -323,7 +323,7 @@ type RepeatedResponseBodyOut_Response struct { unknownFields protoimpl.UnknownFields Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` - Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` + Type RepeatedResponseBodyOut_Response_ResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut_Response_ResponseType" json:"type,omitempty"` } func (x *RepeatedResponseBodyOut_Response) Reset() { @@ -379,95 +379,104 @@ var file_examples_internal_proto_examplepb_response_body_service_proto_rawDesc = 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x91, 0x01, - 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, - 0x74, 0x12, 0x5e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x1a, 0x1e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0xba, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x66, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, - 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb6, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x6b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x57, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0x31, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, + 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x97, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x64, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x1e, 0x0a, + 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc6, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x32, 0x82, 0x06, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, - 0x64, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x38, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, - 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x14, 0x2f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, - 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x69, 0x65, - 0x73, 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x41, 0x2e, 0x67, 0x72, + 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x12, 0x6c, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, + 0x79, 0x4f, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xbc, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x71, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x5d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x0c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x01, 0x12, + 0x05, 0x0a, 0x01, 0x42, 0x10, 0x02, 0x22, 0x31, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x32, 0xb2, 0x06, 0x0a, 0x13, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0xba, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x14, + 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x64, + 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xc7, + 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6f, 0x64, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x16, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xbb, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xc7, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x12, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x41, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x27, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x17, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x06, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0xbd, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, + 0x1a, 0x47, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x39, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, - 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x1b, 0x2f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x21, 0x12, 0x17, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x64, 0x61, 0x74, 0x61, 0x7d, 0x62, 0x06, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3e, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x49, 0x6e, 0x1a, 0x3f, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x4f, 0x75, 0x74, 0x22, 0x2d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x1b, 0x2f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2f, 0x7b, 0x64, 0x61, 0x74, + 0x61, 0x7d, 0x62, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x4d, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -485,26 +494,26 @@ func file_examples_internal_proto_examplepb_response_body_service_proto_rawDescG var file_examples_internal_proto_examplepb_response_body_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_examples_internal_proto_examplepb_response_body_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_examples_internal_proto_examplepb_response_body_service_proto_goTypes = []interface{}{ - (RepeatedResponseBodyOut_Response_ResponseType)(0), // 0: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType - (*ResponseBodyIn)(nil), // 1: grpc.gateway.examples.internal.examplepb.ResponseBodyIn - (*ResponseBodyOut)(nil), // 2: grpc.gateway.examples.internal.examplepb.ResponseBodyOut - (*RepeatedResponseBodyOut)(nil), // 3: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut - (*RepeatedResponseStrings)(nil), // 4: grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings - (*ResponseBodyOut_Response)(nil), // 5: grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response - (*RepeatedResponseBodyOut_Response)(nil), // 6: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response + (RepeatedResponseBodyOut_Response_ResponseType)(0), // 0: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.ResponseType + (*ResponseBodyIn)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn + (*ResponseBodyOut)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut + (*RepeatedResponseBodyOut)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut + (*RepeatedResponseStrings)(nil), // 4: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseStrings + (*ResponseBodyOut_Response)(nil), // 5: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.Response + (*RepeatedResponseBodyOut_Response)(nil), // 6: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response } var file_examples_internal_proto_examplepb_response_body_service_proto_depIdxs = []int32{ - 5, // 0: grpc.gateway.examples.internal.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut.Response - 6, // 1: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response - 0, // 2: grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut.Response.ResponseType - 1, // 3: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBody:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn - 1, // 4: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseBodies:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn - 1, // 5: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseStrings:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn - 1, // 6: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBodyStream:input_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyIn - 2, // 7: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBody:output_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut - 3, // 8: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseBodies:output_type -> grpc.gateway.examples.internal.examplepb.RepeatedResponseBodyOut - 4, // 9: grpc.gateway.examples.internal.examplepb.ResponseBodyService.ListResponseStrings:output_type -> grpc.gateway.examples.internal.examplepb.RepeatedResponseStrings - 2, // 10: grpc.gateway.examples.internal.examplepb.ResponseBodyService.GetResponseBodyStream:output_type -> grpc.gateway.examples.internal.examplepb.ResponseBodyOut + 5, // 0: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut.Response + 6, // 1: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.response:type_name -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response + 0, // 2: grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.type:type_name -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut.Response.ResponseType + 1, // 3: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn + 1, // 4: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseBodies:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn + 1, // 5: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseStrings:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn + 1, // 6: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodyStream:input_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyIn + 2, // 7: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut + 3, // 8: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseBodies:output_type -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseBodyOut + 4, // 9: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.ListResponseStrings:output_type -> grpc.gateway.examples.internal.proto.examplepb.RepeatedResponseStrings + 2, // 10: grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService.GetResponseBodyStream:output_type -> grpc.gateway.examples.internal.proto.examplepb.ResponseBodyOut 7, // [7:11] is the sub-list for method output_type 3, // [3:7] is the sub-list for method input_type 3, // [3:3] is the sub-list for extension type_name @@ -640,7 +649,7 @@ func NewResponseBodyServiceClient(cc grpc.ClientConnInterface) ResponseBodyServi func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*ResponseBodyOut, error) { out := new(ResponseBodyOut) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", in, out, opts...) if err != nil { return nil, err } @@ -649,7 +658,7 @@ func (c *responseBodyServiceClient) GetResponseBody(ctx context.Context, in *Res func (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseBodyOut, error) { out := new(RepeatedResponseBodyOut) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", in, out, opts...) if err != nil { return nil, err } @@ -658,7 +667,7 @@ func (c *responseBodyServiceClient) ListResponseBodies(ctx context.Context, in * func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (*RepeatedResponseStrings, error) { out := new(RepeatedResponseStrings) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", in, out, opts...) if err != nil { return nil, err } @@ -666,7 +675,7 @@ func (c *responseBodyServiceClient) ListResponseStrings(ctx context.Context, in } func (c *responseBodyServiceClient) GetResponseBodyStream(ctx context.Context, in *ResponseBodyIn, opts ...grpc.CallOption) (ResponseBodyService_GetResponseBodyStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &_ResponseBodyService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBodyStream", opts...) + stream, err := c.cc.NewStream(ctx, &_ResponseBodyService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream", opts...) if err != nil { return nil, err } @@ -736,7 +745,7 @@ func _ResponseBodyService_GetResponseBody_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).GetResponseBody(ctx, req.(*ResponseBodyIn)) @@ -754,7 +763,7 @@ func _ResponseBodyService_ListResponseBodies_Handler(srv interface{}, ctx contex } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).ListResponseBodies(ctx, req.(*ResponseBodyIn)) @@ -772,7 +781,7 @@ func _ResponseBodyService_ListResponseStrings_Handler(srv interface{}, ctx conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ResponseBodyServiceServer).ListResponseStrings(ctx, req.(*ResponseBodyIn)) @@ -802,7 +811,7 @@ func (x *responseBodyServiceGetResponseBodyStreamServer) Send(m *ResponseBodyOut } var _ResponseBodyService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.ResponseBodyService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService", HandlerType: (*ResponseBodyServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 5c704ac7fee..3b0cc5b5865 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -235,7 +235,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -255,7 +255,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -275,7 +275,7 @@ func RegisterResponseBodyServiceHandlerServer(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -343,7 +343,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -363,7 +363,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseBodies") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseBodies") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -383,7 +383,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/ListResponseStrings") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/ListResponseStrings") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -403,7 +403,7 @@ func RegisterResponseBodyServiceHandlerClient(ctx context.Context, mux *runtime. ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.ResponseBodyService/GetResponseBodyStream") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.ResponseBodyService/GetResponseBodyStream") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/response_body_service.proto b/examples/internal/proto/examplepb/response_body_service.proto index a1081d55713..9153b27f62b 100644 --- a/examples/internal/proto/examplepb/response_body_service.proto +++ b/examples/internal/proto/examplepb/response_body_service.proto @@ -1,7 +1,7 @@ syntax = "proto3"; -option go_package = "examplepb"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; -package grpc.gateway.examples.internal.examplepb; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; diff --git a/examples/internal/proto/examplepb/standalone_echo_service.yaml b/examples/internal/proto/examplepb/standalone_echo_service.yaml index de3f5f38c2f..fbd91924404 100644 --- a/examples/internal/proto/examplepb/standalone_echo_service.yaml +++ b/examples/internal/proto/examplepb/standalone_echo_service.yaml @@ -3,15 +3,15 @@ config_version: 3 http: rules: - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo post: "/v2/example/echo/{id}" additional_bindings: - get: "/v2/example/echo/{id}/{num}" - get: "/v2/example/echo/{id}/{num}/{lang}" - get: "/v2/example/echo1/{id}/{line_num}/{status.note}" - get: "/v2/example/echo2/{no.note}" - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody post: "/v2/example/echo_body" body: "*" - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete delete: "/v2/example/echo_delete" diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 758b03022c0..9538b5628fe 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -38,74 +38,80 @@ var file_examples_internal_proto_examplepb_stream_proto_rawDesc = []byte{ 0x0a, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, - 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xaf, 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0a, 0x42, - 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x28, 0x01, - 0x12, 0x85, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x27, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, - 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xa5, 0x01, 0x0a, 0x08, 0x42, 0x75, 0x6c, - 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x58, 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, + 0x6f, 0x64, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, + 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, + 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc7, + 0x04, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x99, 0x01, 0x0a, 0x0a, 0x42, 0x75, 0x6c, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, + 0x67, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x12, 0x8b, 0x01, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x40, 0x2e, + 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, + 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x30, 0x01, 0x12, 0xb1, 0x01, 0x0a, 0x08, 0x42, + 0x75, 0x6c, 0x6b, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, + 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x29, 0x22, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x28, 0x01, 0x30, 0x01, 0x12, 0x58, + 0x0a, 0x08, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_examples_internal_proto_examplepb_stream_proto_goTypes = []interface{}{ - (*ABitOfEverything)(nil), // 0: grpc.gateway.examples.internal.examplepb.ABitOfEverything + (*ABitOfEverything)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything (*empty.Empty)(nil), // 1: google.protobuf.Empty - (*sub.StringMessage)(nil), // 2: grpc.gateway.examples.internal.sub.StringMessage + (*sub.StringMessage)(nil), // 2: grpc.gateway.examples.internal.proto.sub.StringMessage (*httpbody.HttpBody)(nil), // 3: google.api.HttpBody } var file_examples_internal_proto_examplepb_stream_proto_depIdxs = []int32{ - 0, // 0: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:input_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 1, // 1: grpc.gateway.examples.internal.examplepb.StreamService.List:input_type -> google.protobuf.Empty - 2, // 2: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:input_type -> grpc.gateway.examples.internal.sub.StringMessage - 1, // 3: grpc.gateway.examples.internal.examplepb.StreamService.Download:input_type -> google.protobuf.Empty - 1, // 4: grpc.gateway.examples.internal.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty - 0, // 5: grpc.gateway.examples.internal.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.examplepb.ABitOfEverything - 2, // 6: grpc.gateway.examples.internal.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.sub.StringMessage - 3, // 7: grpc.gateway.examples.internal.examplepb.StreamService.Download:output_type -> google.api.HttpBody + 0, // 0: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkCreate:input_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 1, // 1: grpc.gateway.examples.internal.proto.examplepb.StreamService.List:input_type -> google.protobuf.Empty + 2, // 2: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEcho:input_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 1, // 3: grpc.gateway.examples.internal.proto.examplepb.StreamService.Download:input_type -> google.protobuf.Empty + 1, // 4: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkCreate:output_type -> google.protobuf.Empty + 0, // 5: grpc.gateway.examples.internal.proto.examplepb.StreamService.List:output_type -> grpc.gateway.examples.internal.proto.examplepb.ABitOfEverything + 2, // 6: grpc.gateway.examples.internal.proto.examplepb.StreamService.BulkEcho:output_type -> grpc.gateway.examples.internal.proto.sub.StringMessage + 3, // 7: grpc.gateway.examples.internal.proto.examplepb.StreamService.Download:output_type -> google.api.HttpBody 4, // [4:8] is the sub-list for method output_type 0, // [0:4] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -165,7 +171,7 @@ func NewStreamServiceClient(cc grpc.ClientConnInterface) StreamServiceClient { } func (c *streamServiceClient) BulkCreate(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkCreateClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.examplepb.StreamService/BulkCreate", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[0], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate", opts...) if err != nil { return nil, err } @@ -199,7 +205,7 @@ func (x *streamServiceBulkCreateClient) CloseAndRecv() (*empty.Empty, error) { } func (c *streamServiceClient) List(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_ListClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.examplepb.StreamService/List", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[1], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List", opts...) if err != nil { return nil, err } @@ -231,7 +237,7 @@ func (x *streamServiceListClient) Recv() (*ABitOfEverything, error) { } func (c *streamServiceClient) BulkEcho(ctx context.Context, opts ...grpc.CallOption) (StreamService_BulkEchoClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.examplepb.StreamService/BulkEcho", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[2], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho", opts...) if err != nil { return nil, err } @@ -262,7 +268,7 @@ func (x *streamServiceBulkEchoClient) Recv() (*sub.StringMessage, error) { } func (c *streamServiceClient) Download(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (StreamService_DownloadClient, error) { - stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.examplepb.StreamService/Download", opts...) + stream, err := c.cc.NewStream(ctx, &_StreamService_serviceDesc.Streams[3], "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download", opts...) if err != nil { return nil, err } @@ -417,7 +423,7 @@ func (x *streamServiceDownloadServer) Send(m *httpbody.HttpBody) error { } var _StreamService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.StreamService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.StreamService", HandlerType: (*StreamServiceServer)(nil), Methods: []grpc.MethodDesc{}, Streams: []grpc.StreamDesc{ diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index e9cf685990e..92508fd4079 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -239,7 +239,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/BulkCreate") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkCreate") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -259,7 +259,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/List") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/List") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -279,7 +279,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/BulkEcho") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/BulkEcho") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -299,7 +299,7 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.StreamService/Download") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.StreamService/Download") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/stream.proto b/examples/internal/proto/examplepb/stream.proto index 34bbeac0065..beeae591eee 100644 --- a/examples/internal/proto/examplepb/stream.proto +++ b/examples/internal/proto/examplepb/stream.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/api/httpbody.proto"; @@ -21,7 +21,7 @@ service StreamService { get: "/v1/example/a_bit_of_everything" }; } - rpc BulkEcho(stream grpc.gateway.examples.internal.sub.StringMessage) returns (stream grpc.gateway.examples.internal.sub.StringMessage) { + rpc BulkEcho(stream grpc.gateway.examples.internal.proto.sub.StringMessage) returns (stream grpc.gateway.examples.internal.proto.sub.StringMessage) { option (google.api.http) = { post: "/v1/example/a_bit_of_everything/echo" body: "*" diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 07429187f65..4e81b0117a4 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -281,75 +281,78 @@ var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDes 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x75, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x13, - 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, - 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, - 0xef, 0x02, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, - 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, - 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, - 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x55, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x10, 0x0a, 0x02, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, - 0x6e, 0x12, 0x4f, 0x0a, 0x02, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, 0x52, 0x02, - 0x6e, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x65, 0x78, - 0x74, 0x32, 0xd5, 0x03, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, - 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x92, 0x01, - 0x0a, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, - 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x13, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x42, 0x06, 0x0a, + 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x22, 0xfb, 0x02, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x6c, + 0x69, 0x6e, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x07, 0x6c, 0x69, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x5b, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, + 0x64, 0x65, 0x64, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x02, 0x65, + 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x02, 0x65, 0x6e, 0x12, 0x55, 0x0a, + 0x02, 0x6e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x45, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x48, 0x01, + 0x52, 0x02, 0x6e, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x42, 0x05, 0x0a, 0x03, + 0x65, 0x78, 0x74, 0x32, 0xf9, 0x03, 0x0a, 0x16, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, + 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x08, + 0x45, 0x63, 0x68, 0x6f, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, + 0x67, 0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0xa0, 0x01, 0x0a, + 0x0a, 0x45, 0x63, 0x68, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x48, 0x2e, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x48, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, - 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x3b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x55, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x65, 0x64, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, + 0x57, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x3b, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -366,20 +369,20 @@ func file_examples_internal_proto_examplepb_unannotated_echo_service_proto_rawDe var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_goTypes = []interface{}{ - (*UnannotatedEmbedded)(nil), // 0: grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded - (*UnannotatedSimpleMessage)(nil), // 1: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + (*UnannotatedEmbedded)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded + (*UnannotatedSimpleMessage)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage (*duration.Duration)(nil), // 2: google.protobuf.Duration } var file_examples_internal_proto_examplepb_unannotated_echo_service_proto_depIdxs = []int32{ - 2, // 0: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration - 0, // 1: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.status:type_name -> grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded - 0, // 2: grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage.no:type_name -> grpc.gateway.examples.internal.examplepb.UnannotatedEmbedded - 1, // 3: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 1, // 4: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 1, // 5: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 1, // 6: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 1, // 7: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage - 1, // 8: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.examplepb.UnannotatedSimpleMessage + 2, // 0: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.duration:type_name -> google.protobuf.Duration + 0, // 1: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.status:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded + 0, // 2: grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage.no:type_name -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedEmbedded + 1, // 3: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage + 1, // 4: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage + 1, // 5: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete:input_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage + 1, // 6: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage + 1, // 7: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage + 1, // 8: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete:output_type -> grpc.gateway.examples.internal.proto.examplepb.UnannotatedSimpleMessage 6, // [6:9] is the sub-list for method output_type 3, // [3:6] is the sub-list for method input_type 3, // [3:3] is the sub-list for extension type_name @@ -481,7 +484,7 @@ func NewUnannotatedEchoServiceClient(cc grpc.ClientConnInterface) UnannotatedEch func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", in, out, opts...) if err != nil { return nil, err } @@ -490,7 +493,7 @@ func (c *unannotatedEchoServiceClient) Echo(ctx context.Context, in *Unannotated func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", in, out, opts...) if err != nil { return nil, err } @@ -499,7 +502,7 @@ func (c *unannotatedEchoServiceClient) EchoBody(ctx context.Context, in *Unannot func (c *unannotatedEchoServiceClient) EchoDelete(ctx context.Context, in *UnannotatedSimpleMessage, opts ...grpc.CallOption) (*UnannotatedSimpleMessage, error) { out := new(UnannotatedSimpleMessage) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", in, out, opts...) if err != nil { return nil, err } @@ -547,7 +550,7 @@ func _UnannotatedEchoService_Echo_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).Echo(ctx, req.(*UnannotatedSimpleMessage)) @@ -565,7 +568,7 @@ func _UnannotatedEchoService_EchoBody_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).EchoBody(ctx, req.(*UnannotatedSimpleMessage)) @@ -583,7 +586,7 @@ func _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(UnannotatedEchoServiceServer).EchoDelete(ctx, req.(*UnannotatedSimpleMessage)) @@ -592,7 +595,7 @@ func _UnannotatedEchoService_EchoDelete_Handler(srv interface{}, ctx context.Con } var _UnannotatedEchoService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.UnannotatedEchoService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService", HandlerType: (*UnannotatedEchoServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index c6997305b42..be8578ed017 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -274,7 +274,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -294,7 +294,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -314,7 +314,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -334,7 +334,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -395,7 +395,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -415,7 +415,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -435,7 +435,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -455,7 +455,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.proto b/examples/internal/proto/examplepb/unannotated_echo_service.proto index ec77163b544..cbe0f375257 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.proto +++ b/examples/internal/proto/examplepb/unannotated_echo_service.proto @@ -8,7 +8,7 @@ option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal // // Echo Service API consists of a single service which returns // a message. -package grpc.gateway.examples.internal.examplepb; +package grpc.gateway.examples.internal.proto.examplepb; // Do not need annotations.proto, can still use well known types as usual import "google/protobuf/duration.proto"; diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.yaml b/examples/internal/proto/examplepb/unannotated_echo_service.yaml index 0f14d1fa2fb..f3e23846e52 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.yaml +++ b/examples/internal/proto/examplepb/unannotated_echo_service.yaml @@ -3,13 +3,13 @@ config_version: 3 http: rules: - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.Echo + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.Echo post: "/v1/example/echo/{id}" additional_bindings: - get: "/v1/example/echo/{id}/{num}" - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoBody + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoBody post: "/v1/example/echo_body" body: "*" - - selector: grpc.gateway.examples.internal.examplepb.UnannotatedEchoService.EchoDelete + - selector: grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService.EchoDelete delete: "/v1/example/echo_delete" diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 86aede1f0cc..15565aec1bc 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -272,50 +272,56 @@ var file_examples_internal_proto_examplepb_use_go_template_proto_rawDesc = []byt 0x0a, 0x37, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x75, 0x73, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x46, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3e, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x69, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, - 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x65, - 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0xbe, 0x02, - 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, - 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x46, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, + 0x3e, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, + 0x69, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x66, 0x6c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x74, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x72, 0x72, 0x61, 0x79, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x6f, + 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x32, 0xd6, 0x02, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x9f, 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3c, + 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, + 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, + 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0xa3, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, + 0x74, 0x12, 0x3d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, - 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, - 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x0b, - 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x1d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } @@ -333,16 +339,16 @@ func file_examples_internal_proto_examplepb_use_go_template_proto_rawDescGZIP() var file_examples_internal_proto_examplepb_use_go_template_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_examples_internal_proto_examplepb_use_go_template_proto_goTypes = []interface{}{ - (*LoginRequest)(nil), // 0: grpc.gateway.examples.internal.examplepb.LoginRequest - (*LoginReply)(nil), // 1: grpc.gateway.examples.internal.examplepb.LoginReply - (*LogoutRequest)(nil), // 2: grpc.gateway.examples.internal.examplepb.LogoutRequest - (*LogoutReply)(nil), // 3: grpc.gateway.examples.internal.examplepb.LogoutReply + (*LoginRequest)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.LoginRequest + (*LoginReply)(nil), // 1: grpc.gateway.examples.internal.proto.examplepb.LoginReply + (*LogoutRequest)(nil), // 2: grpc.gateway.examples.internal.proto.examplepb.LogoutRequest + (*LogoutReply)(nil), // 3: grpc.gateway.examples.internal.proto.examplepb.LogoutReply } var file_examples_internal_proto_examplepb_use_go_template_proto_depIdxs = []int32{ - 0, // 0: grpc.gateway.examples.internal.examplepb.LoginService.Login:input_type -> grpc.gateway.examples.internal.examplepb.LoginRequest - 2, // 1: grpc.gateway.examples.internal.examplepb.LoginService.Logout:input_type -> grpc.gateway.examples.internal.examplepb.LogoutRequest - 1, // 2: grpc.gateway.examples.internal.examplepb.LoginService.Login:output_type -> grpc.gateway.examples.internal.examplepb.LoginReply - 3, // 3: grpc.gateway.examples.internal.examplepb.LoginService.Logout:output_type -> grpc.gateway.examples.internal.examplepb.LogoutReply + 0, // 0: grpc.gateway.examples.internal.proto.examplepb.LoginService.Login:input_type -> grpc.gateway.examples.internal.proto.examplepb.LoginRequest + 2, // 1: grpc.gateway.examples.internal.proto.examplepb.LoginService.Logout:input_type -> grpc.gateway.examples.internal.proto.examplepb.LogoutRequest + 1, // 2: grpc.gateway.examples.internal.proto.examplepb.LoginService.Login:output_type -> grpc.gateway.examples.internal.proto.examplepb.LoginReply + 3, // 3: grpc.gateway.examples.internal.proto.examplepb.LoginService.Logout:output_type -> grpc.gateway.examples.internal.proto.examplepb.LogoutReply 2, // [2:4] is the sub-list for method output_type 0, // [0:2] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -479,7 +485,7 @@ func NewLoginServiceClient(cc grpc.ClientConnInterface) LoginServiceClient { func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginReply, error) { out := new(LoginReply) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.LoginService/Login", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", in, out, opts...) if err != nil { return nil, err } @@ -488,7 +494,7 @@ func (c *loginServiceClient) Login(ctx context.Context, in *LoginRequest, opts . func (c *loginServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutReply, error) { out := new(LogoutReply) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", in, out, opts...) if err != nil { return nil, err } @@ -554,7 +560,7 @@ func _LoginService_Login_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.LoginService/Login", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(LoginServiceServer).Login(ctx, req.(*LoginRequest)) @@ -572,7 +578,7 @@ func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.LoginService/Logout", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(LoginServiceServer).Logout(ctx, req.(*LogoutRequest)) @@ -581,7 +587,7 @@ func _LoginService_Logout_Handler(srv interface{}, ctx context.Context, dec func } var _LoginService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.LoginService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.LoginService", HandlerType: (*LoginServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index f38c02e352e..8995be6c988 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -106,7 +106,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Login") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -126,7 +126,7 @@ func RegisterLoginServiceHandlerServer(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -187,7 +187,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Login") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Login") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -207,7 +207,7 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.LoginService/Logout") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.LoginService/Logout") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/use_go_template.proto b/examples/internal/proto/examplepb/use_go_template.proto index 706fd8f136a..dc11abe1342 100644 --- a/examples/internal/proto/examplepb/use_go_template.proto +++ b/examples/internal/proto/examplepb/use_go_template.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index b701895f8c1..561ca50430a 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -149,128 +149,133 @@ var file_examples_internal_proto_examplepb_wrappers_proto_rawDesc = []byte{ 0x0a, 0x30, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x74, 0x6f, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04, 0x0a, 0x08, 0x57, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3f, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, - 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, - 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xb2, 0x09, 0x0a, 0x0f, - 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x91, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x67, 0x72, 0x70, + 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x04, + 0x0a, 0x08, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, + 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x32, 0xbe, 0x09, 0x0a, 0x0f, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x1a, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x1a, 0x32, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, - 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x57, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x01, 0x2a, 0x12, - 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, - 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, 0x2a, 0x12, - 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3a, 0x01, + 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, + 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, + 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, - 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x17, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, - 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, + 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x44, 0x6f, 0x75, 0x62, + 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x62, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, + 0x33, 0x32, 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, - 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x22, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, - 0x3a, 0x01, 0x2a, 0x12, 0x6a, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, 0x2a, 0x12, - 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, - 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x3a, 0x01, 0x2a, - 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3a, 0x01, + 0x2a, 0x12, 0x66, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x1a, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x57, 0x0a, 0x0b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, + 0x22, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x3a, + 0x01, 0x2a, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -287,7 +292,7 @@ func file_examples_internal_proto_examplepb_wrappers_proto_rawDescGZIP() []byte var file_examples_internal_proto_examplepb_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_examples_internal_proto_examplepb_wrappers_proto_goTypes = []interface{}{ - (*Wrappers)(nil), // 0: grpc.gateway.examples.internal.examplepb.Wrappers + (*Wrappers)(nil), // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers (*wrappers.StringValue)(nil), // 1: google.protobuf.StringValue (*wrappers.Int32Value)(nil), // 2: google.protobuf.Int32Value (*wrappers.Int64Value)(nil), // 3: google.protobuf.Int64Value @@ -300,37 +305,37 @@ var file_examples_internal_proto_examplepb_wrappers_proto_goTypes = []interface{ (*empty.Empty)(nil), // 10: google.protobuf.Empty } var file_examples_internal_proto_examplepb_wrappers_proto_depIdxs = []int32{ - 1, // 0: grpc.gateway.examples.internal.examplepb.Wrappers.string_value:type_name -> google.protobuf.StringValue - 2, // 1: grpc.gateway.examples.internal.examplepb.Wrappers.int32_value:type_name -> google.protobuf.Int32Value - 3, // 2: grpc.gateway.examples.internal.examplepb.Wrappers.int64_value:type_name -> google.protobuf.Int64Value - 4, // 3: grpc.gateway.examples.internal.examplepb.Wrappers.float_value:type_name -> google.protobuf.FloatValue - 5, // 4: grpc.gateway.examples.internal.examplepb.Wrappers.double_value:type_name -> google.protobuf.DoubleValue - 6, // 5: grpc.gateway.examples.internal.examplepb.Wrappers.bool_value:type_name -> google.protobuf.BoolValue - 7, // 6: grpc.gateway.examples.internal.examplepb.Wrappers.uint32_value:type_name -> google.protobuf.UInt32Value - 8, // 7: grpc.gateway.examples.internal.examplepb.Wrappers.uint64_value:type_name -> google.protobuf.UInt64Value - 9, // 8: grpc.gateway.examples.internal.examplepb.Wrappers.bytes_value:type_name -> google.protobuf.BytesValue - 0, // 9: grpc.gateway.examples.internal.examplepb.WrappersService.Create:input_type -> grpc.gateway.examples.internal.examplepb.Wrappers - 1, // 10: grpc.gateway.examples.internal.examplepb.WrappersService.CreateStringValue:input_type -> google.protobuf.StringValue - 2, // 11: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt32Value:input_type -> google.protobuf.Int32Value - 3, // 12: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt64Value:input_type -> google.protobuf.Int64Value - 4, // 13: grpc.gateway.examples.internal.examplepb.WrappersService.CreateFloatValue:input_type -> google.protobuf.FloatValue - 5, // 14: grpc.gateway.examples.internal.examplepb.WrappersService.CreateDoubleValue:input_type -> google.protobuf.DoubleValue - 6, // 15: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBoolValue:input_type -> google.protobuf.BoolValue - 7, // 16: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt32Value:input_type -> google.protobuf.UInt32Value - 8, // 17: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt64Value:input_type -> google.protobuf.UInt64Value - 9, // 18: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBytesValue:input_type -> google.protobuf.BytesValue - 10, // 19: grpc.gateway.examples.internal.examplepb.WrappersService.CreateEmpty:input_type -> google.protobuf.Empty - 0, // 20: grpc.gateway.examples.internal.examplepb.WrappersService.Create:output_type -> grpc.gateway.examples.internal.examplepb.Wrappers - 1, // 21: grpc.gateway.examples.internal.examplepb.WrappersService.CreateStringValue:output_type -> google.protobuf.StringValue - 2, // 22: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt32Value:output_type -> google.protobuf.Int32Value - 3, // 23: grpc.gateway.examples.internal.examplepb.WrappersService.CreateInt64Value:output_type -> google.protobuf.Int64Value - 4, // 24: grpc.gateway.examples.internal.examplepb.WrappersService.CreateFloatValue:output_type -> google.protobuf.FloatValue - 5, // 25: grpc.gateway.examples.internal.examplepb.WrappersService.CreateDoubleValue:output_type -> google.protobuf.DoubleValue - 6, // 26: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBoolValue:output_type -> google.protobuf.BoolValue - 7, // 27: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt32Value:output_type -> google.protobuf.UInt32Value - 8, // 28: grpc.gateway.examples.internal.examplepb.WrappersService.CreateUInt64Value:output_type -> google.protobuf.UInt64Value - 9, // 29: grpc.gateway.examples.internal.examplepb.WrappersService.CreateBytesValue:output_type -> google.protobuf.BytesValue - 10, // 30: grpc.gateway.examples.internal.examplepb.WrappersService.CreateEmpty:output_type -> google.protobuf.Empty + 1, // 0: grpc.gateway.examples.internal.proto.examplepb.Wrappers.string_value:type_name -> google.protobuf.StringValue + 2, // 1: grpc.gateway.examples.internal.proto.examplepb.Wrappers.int32_value:type_name -> google.protobuf.Int32Value + 3, // 2: grpc.gateway.examples.internal.proto.examplepb.Wrappers.int64_value:type_name -> google.protobuf.Int64Value + 4, // 3: grpc.gateway.examples.internal.proto.examplepb.Wrappers.float_value:type_name -> google.protobuf.FloatValue + 5, // 4: grpc.gateway.examples.internal.proto.examplepb.Wrappers.double_value:type_name -> google.protobuf.DoubleValue + 6, // 5: grpc.gateway.examples.internal.proto.examplepb.Wrappers.bool_value:type_name -> google.protobuf.BoolValue + 7, // 6: grpc.gateway.examples.internal.proto.examplepb.Wrappers.uint32_value:type_name -> google.protobuf.UInt32Value + 8, // 7: grpc.gateway.examples.internal.proto.examplepb.Wrappers.uint64_value:type_name -> google.protobuf.UInt64Value + 9, // 8: grpc.gateway.examples.internal.proto.examplepb.Wrappers.bytes_value:type_name -> google.protobuf.BytesValue + 0, // 9: grpc.gateway.examples.internal.proto.examplepb.WrappersService.Create:input_type -> grpc.gateway.examples.internal.proto.examplepb.Wrappers + 1, // 10: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateStringValue:input_type -> google.protobuf.StringValue + 2, // 11: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt32Value:input_type -> google.protobuf.Int32Value + 3, // 12: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt64Value:input_type -> google.protobuf.Int64Value + 4, // 13: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateFloatValue:input_type -> google.protobuf.FloatValue + 5, // 14: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateDoubleValue:input_type -> google.protobuf.DoubleValue + 6, // 15: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBoolValue:input_type -> google.protobuf.BoolValue + 7, // 16: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt32Value:input_type -> google.protobuf.UInt32Value + 8, // 17: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt64Value:input_type -> google.protobuf.UInt64Value + 9, // 18: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBytesValue:input_type -> google.protobuf.BytesValue + 10, // 19: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateEmpty:input_type -> google.protobuf.Empty + 0, // 20: grpc.gateway.examples.internal.proto.examplepb.WrappersService.Create:output_type -> grpc.gateway.examples.internal.proto.examplepb.Wrappers + 1, // 21: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateStringValue:output_type -> google.protobuf.StringValue + 2, // 22: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt32Value:output_type -> google.protobuf.Int32Value + 3, // 23: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateInt64Value:output_type -> google.protobuf.Int64Value + 4, // 24: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateFloatValue:output_type -> google.protobuf.FloatValue + 5, // 25: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateDoubleValue:output_type -> google.protobuf.DoubleValue + 6, // 26: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBoolValue:output_type -> google.protobuf.BoolValue + 7, // 27: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt32Value:output_type -> google.protobuf.UInt32Value + 8, // 28: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateUInt64Value:output_type -> google.protobuf.UInt64Value + 9, // 29: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateBytesValue:output_type -> google.protobuf.BytesValue + 10, // 30: grpc.gateway.examples.internal.proto.examplepb.WrappersService.CreateEmpty:output_type -> google.protobuf.Empty 20, // [20:31] is the sub-list for method output_type 9, // [9:20] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name @@ -412,7 +417,7 @@ func NewWrappersServiceClient(cc grpc.ClientConnInterface) WrappersServiceClient func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts ...grpc.CallOption) (*Wrappers, error) { out := new(Wrappers) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", in, out, opts...) if err != nil { return nil, err } @@ -421,7 +426,7 @@ func (c *wrappersServiceClient) Create(ctx context.Context, in *Wrappers, opts . func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrappers.StringValue, opts ...grpc.CallOption) (*wrappers.StringValue, error) { out := new(wrappers.StringValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", in, out, opts...) if err != nil { return nil, err } @@ -430,7 +435,7 @@ func (c *wrappersServiceClient) CreateStringValue(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappers.Int32Value, opts ...grpc.CallOption) (*wrappers.Int32Value, error) { out := new(wrappers.Int32Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", in, out, opts...) if err != nil { return nil, err } @@ -439,7 +444,7 @@ func (c *wrappersServiceClient) CreateInt32Value(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappers.Int64Value, opts ...grpc.CallOption) (*wrappers.Int64Value, error) { out := new(wrappers.Int64Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", in, out, opts...) if err != nil { return nil, err } @@ -448,7 +453,7 @@ func (c *wrappersServiceClient) CreateInt64Value(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappers.FloatValue, opts ...grpc.CallOption) (*wrappers.FloatValue, error) { out := new(wrappers.FloatValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", in, out, opts...) if err != nil { return nil, err } @@ -457,7 +462,7 @@ func (c *wrappersServiceClient) CreateFloatValue(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrappers.DoubleValue, opts ...grpc.CallOption) (*wrappers.DoubleValue, error) { out := new(wrappers.DoubleValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", in, out, opts...) if err != nil { return nil, err } @@ -466,7 +471,7 @@ func (c *wrappersServiceClient) CreateDoubleValue(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrappers.BoolValue, opts ...grpc.CallOption) (*wrappers.BoolValue, error) { out := new(wrappers.BoolValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", in, out, opts...) if err != nil { return nil, err } @@ -475,7 +480,7 @@ func (c *wrappersServiceClient) CreateBoolValue(ctx context.Context, in *wrapper func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrappers.UInt32Value, opts ...grpc.CallOption) (*wrappers.UInt32Value, error) { out := new(wrappers.UInt32Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", in, out, opts...) if err != nil { return nil, err } @@ -484,7 +489,7 @@ func (c *wrappersServiceClient) CreateUInt32Value(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrappers.UInt64Value, opts ...grpc.CallOption) (*wrappers.UInt64Value, error) { out := new(wrappers.UInt64Value) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", in, out, opts...) if err != nil { return nil, err } @@ -493,7 +498,7 @@ func (c *wrappersServiceClient) CreateUInt64Value(ctx context.Context, in *wrapp func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappers.BytesValue, opts ...grpc.CallOption) (*wrappers.BytesValue, error) { out := new(wrappers.BytesValue) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", in, out, opts...) if err != nil { return nil, err } @@ -502,7 +507,7 @@ func (c *wrappersServiceClient) CreateBytesValue(ctx context.Context, in *wrappe func (c *wrappersServiceClient) CreateEmpty(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) - err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty", in, out, opts...) + err := c.cc.Invoke(ctx, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", in, out, opts...) if err != nil { return nil, err } @@ -576,7 +581,7 @@ func _WrappersService_Create_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/Create", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).Create(ctx, req.(*Wrappers)) @@ -594,7 +599,7 @@ func _WrappersService_CreateStringValue_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateStringValue(ctx, req.(*wrappers.StringValue)) @@ -612,7 +617,7 @@ func _WrappersService_CreateInt32Value_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateInt32Value(ctx, req.(*wrappers.Int32Value)) @@ -630,7 +635,7 @@ func _WrappersService_CreateInt64Value_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateInt64Value(ctx, req.(*wrappers.Int64Value)) @@ -648,7 +653,7 @@ func _WrappersService_CreateFloatValue_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateFloatValue(ctx, req.(*wrappers.FloatValue)) @@ -666,7 +671,7 @@ func _WrappersService_CreateDoubleValue_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateDoubleValue(ctx, req.(*wrappers.DoubleValue)) @@ -684,7 +689,7 @@ func _WrappersService_CreateBoolValue_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateBoolValue(ctx, req.(*wrappers.BoolValue)) @@ -702,7 +707,7 @@ func _WrappersService_CreateUInt32Value_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateUInt32Value(ctx, req.(*wrappers.UInt32Value)) @@ -720,7 +725,7 @@ func _WrappersService_CreateUInt64Value_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateUInt64Value(ctx, req.(*wrappers.UInt64Value)) @@ -738,7 +743,7 @@ func _WrappersService_CreateBytesValue_Handler(srv interface{}, ctx context.Cont } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateBytesValue(ctx, req.(*wrappers.BytesValue)) @@ -756,7 +761,7 @@ func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty", + FullMethod: "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WrappersServiceServer).CreateEmpty(ctx, req.(*empty.Empty)) @@ -765,7 +770,7 @@ func _WrappersService_CreateEmpty_Handler(srv interface{}, ctx context.Context, } var _WrappersService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "grpc.gateway.examples.internal.examplepb.WrappersService", + ServiceName: "grpc.gateway.examples.internal.proto.examplepb.WrappersService", HandlerType: (*WrappersServiceServer)(nil), Methods: []grpc.MethodDesc{ { diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 49b7c3d2eb2..21d3ad6f54c 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -414,7 +414,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -434,7 +434,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -454,7 +454,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -474,7 +474,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -494,7 +494,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -514,7 +514,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -534,7 +534,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -554,7 +554,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -574,7 +574,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -594,7 +594,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -614,7 +614,7 @@ func RegisterWrappersServiceHandlerServer(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -675,7 +675,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/Create") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/Create") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -695,7 +695,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateStringValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateStringValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -715,7 +715,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt32Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -735,7 +735,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateInt64Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -755,7 +755,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateFloatValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateFloatValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -775,7 +775,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateDoubleValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateDoubleValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -795,7 +795,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBoolValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBoolValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -815,7 +815,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt32Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt32Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -835,7 +835,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateUInt64Value") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateUInt64Value") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -855,7 +855,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateBytesValue") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateBytesValue") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -875,7 +875,7 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.WrappersService/CreateEmpty") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.WrappersService/CreateEmpty") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/examplepb/wrappers.proto b/examples/internal/proto/examplepb/wrappers.proto index 739e60e1f31..6ba2c6a0bd9 100644 --- a/examples/internal/proto/examplepb/wrappers.proto +++ b/examples/internal/proto/examplepb/wrappers.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -option go_package = "examplepb"; -package grpc.gateway.examples.internal.examplepb; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; +package grpc.gateway.examples.internal.proto.examplepb; import "google/api/annotations.proto"; import "google/protobuf/wrappers.proto"; diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index de4947d190f..32e255495dd 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -599,7 +599,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -619,7 +619,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -639,7 +639,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -659,7 +659,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -679,7 +679,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -699,7 +699,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -719,7 +719,7 @@ func RegisterUnannotatedEchoServiceHandlerServer(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -780,7 +780,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -800,7 +800,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -820,7 +820,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -840,7 +840,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -860,7 +860,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/Echo") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/Echo") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -880,7 +880,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoBody") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoBody") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return @@ -900,7 +900,7 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.examplepb.UnannotatedEchoService/EchoDelete") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/grpc.gateway.examples.internal.proto.examplepb.UnannotatedEchoService/EchoDelete") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 64d9903c6a4..594da217670 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -77,12 +77,17 @@ var File_examples_internal_proto_sub_message_proto protoreflect.FileDescriptor var file_examples_internal_proto_sub_message_proto_rawDesc = []byte{ 0x0a, 0x29, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x2f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x22, 0x67, 0x72, 0x70, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x73, 0x75, 0x62, 0x22, - 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x05, 0x5a, 0x03, 0x73, 0x75, 0x62, + 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x22, 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x47, 0x5a, 0x45, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x73, 0x75, 0x62, } var ( @@ -99,7 +104,7 @@ func file_examples_internal_proto_sub_message_proto_rawDescGZIP() []byte { var file_examples_internal_proto_sub_message_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_examples_internal_proto_sub_message_proto_goTypes = []interface{}{ - (*StringMessage)(nil), // 0: grpc.gateway.examples.internal.sub.StringMessage + (*StringMessage)(nil), // 0: grpc.gateway.examples.internal.proto.sub.StringMessage } var file_examples_internal_proto_sub_message_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/examples/internal/proto/sub/message.proto b/examples/internal/proto/sub/message.proto index d3e67ee6038..348f55b9bd7 100644 --- a/examples/internal/proto/sub/message.proto +++ b/examples/internal/proto/sub/message.proto @@ -1,6 +1,8 @@ syntax = "proto2"; -option go_package = "sub"; -package grpc.gateway.examples.internal.sub; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub"; + +package grpc.gateway.examples.internal.proto.sub; message StringMessage { required string value = 1; diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index f3b1d9c1b13..3491bde1099 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -77,15 +77,17 @@ var File_examples_internal_proto_sub2_message_proto protoreflect.FileDescriptor var file_examples_internal_proto_sub2_message_proto_rawDesc = []byte{ 0x0a, 0x2a, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x2f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x73, 0x75, - 0x62, 0x32, 0x22, 0x1f, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, 0x62, 0x32, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x67, 0x72, + 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x73, 0x75, 0x62, 0x32, 0x22, 0x1f, 0x0a, 0x09, 0x49, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x75, + 0x62, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -102,7 +104,7 @@ func file_examples_internal_proto_sub2_message_proto_rawDescGZIP() []byte { var file_examples_internal_proto_sub2_message_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_examples_internal_proto_sub2_message_proto_goTypes = []interface{}{ - (*IdMessage)(nil), // 0: sub2.IdMessage + (*IdMessage)(nil), // 0: grpc.gateway.examples.internal.proto.sub2.IdMessage } var file_examples_internal_proto_sub2_message_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/examples/internal/proto/sub2/message.proto b/examples/internal/proto/sub2/message.proto index 88bc1b1ab42..ef58e733d63 100644 --- a/examples/internal/proto/sub2/message.proto +++ b/examples/internal/proto/sub2/message.proto @@ -1,6 +1,8 @@ syntax = "proto3"; + option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2"; -package sub2; + +package grpc.gateway.examples.internal.proto.sub2; message IdMessage { string uuid = 1; diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index dd8117470c4..94e16b5e7f9 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -658,8 +658,12 @@ var file_runtime_internal_examplepb_non_standard_names_proto_rawDesc = []byte{ 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x42, 0x0b, 0x5a, 0x09, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x79, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/runtime/internal/examplepb/non_standard_names.proto b/runtime/internal/examplepb/non_standard_names.proto index e4807fafbdf..a45982319e4 100644 --- a/runtime/internal/examplepb/non_standard_names.proto +++ b/runtime/internal/examplepb/non_standard_names.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -option go_package = "examplepb"; +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb"; package grpc.gateway.runtime.internal.examplepb; import "google/api/annotations.proto"; From 17cd83ce334776791e154fda5d0c717fe986a6b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2020 20:28:58 +0000 Subject: [PATCH 0388/1518] Update google.golang.org/genproto commit hash to 8feb7f2 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2292b2926ac..51d3bde9382 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 + google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2 google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.22.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 16c6884a4f1..3ac601d68ec 100644 --- a/go.sum +++ b/go.sum @@ -74,8 +74,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884 h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2 h1:RwW6+LxyOQJ7oeoZ76GIJlwt/O0J5cN2fk+q/jK27kQ= +google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= From 761e9057bc906bf74c14a412c3dce5691b9544c1 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Fri, 15 May 2020 11:52:38 +0200 Subject: [PATCH 0389/1518] docs: add example customizing unmarshal options (#1335) * docs: add example customizing unmarshal options Signed-off-by: Stephan Renatus * Update docs/_docs/customizingyourgateway.md Signed-off-by: Stephan Renatus Co-authored-by: Johan Brandhorst Co-authored-by: Johan Brandhorst --- docs/_docs/customizingyourgateway.md | 52 +++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 86e0f8d06fa..55e0a457661 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -77,6 +77,50 @@ your HTTP endpoints, the response will be pretty-printed. Note that this will conflict with any methods having input messages with fields named `pretty`; also, this example code does not remove the query parameter `pretty` from further processing. +## Customize unmarshaling per Content-Type + +Having different unmarshaling options per Content-Type is possible by wrapping the decoder and +and passing that to `runtime.WithMarshalerOption`: + +```go +type m struct { + *runtime.JSONPb + unmarshaler *jsonpb.Unmarshaler +} + +type decoderWrapper struct { + *json.Decoder + *jsonpb.Unmarshaler +} + +func (n *m) NewDecoder(r io.Reader) runtime.Decoder { + d := json.NewDecoder(r) + return &decoderWrapper{Decoder: d, Unmarshaler: n.unmarshaler} +} + +func (d *decoderWrapper) Decode(v interface{}) error { + p, ok := v.(proto.Message) + if !ok { // if it's not decoding into a proto.Message, there's no notion of unknown fields + return d.Decoder.Decode(v) + } + return d.UnmarshalNext(d.Decoder, p) // uses m's jsonpb.Unmarshaler configuration +} +``` + +This scaffolding allows us to pass a custom unmarshal options. In this example, we configure the +unmarshaler to disallow unknown fields. For demonstration purposes, we'll also change some of the +default marshaler options: + +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/json+strict", + &m{ + JSONPb: &runtime.JSONPb{EmitDefaults: true}, + unmarshaler: &jsonpb.Unmarshaler{AllowUnknownFields: false}, // explicit "false", &jsonpb.Unmarshaler{} would have the same effect + }), +) +``` + ## Mapping from HTTP request headers to gRPC client metadata You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. @@ -149,7 +193,7 @@ for more info on sending / receiving gRPC metadata. ``` ## Mutate response messages or set response headers -You might want to return a subset of response fields as HTTP response headers; +You might want to return a subset of response fields as HTTP response headers; You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. @@ -167,7 +211,7 @@ Or you might want to mutate the response messages to be returned. } ``` 2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) - + e.g. ```go mux := runtime.NewServeMux(runtime.WithForwardResponseOption(myFilter)) @@ -329,7 +373,7 @@ You might want to keep the behavior of the current marshaler but change only a m e.g. add `forwarder_overwrite.go` into the go package of the generated code, ```go package generated - + import ( "net/http" @@ -345,7 +389,7 @@ You might want to keep the behavior of the current marshaler but change only a m } runtime.ForwardResponseMessage(ctx, mux, marshaler, w, req, resp, opts...) } - + func init() { forward_MyService_Checkout_0 = forwardCheckoutResp } From 6a3f5071771ac376402ac165266c1ba16e05efd9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 11:59:40 +0100 Subject: [PATCH 0390/1518] Attempt to ignore golang/protobuf updates on master --- renovate.json | 13 +++++++++++++ repositories.bzl | 8 ++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/renovate.json b/renovate.json index 271f4fbb9b9..b717ea9ae3f 100644 --- a/renovate.json +++ b/renovate.json @@ -8,5 +8,18 @@ ], "postUpdateOptions": [ "gomodTidy" + ], + "packageRules": [ + { + "baseBranchList": [ + "master" + ], + "packageNames": [ + "github.com/golang/protobuf", + "google.golang.org/genproto", + "io_bazel_rules_go" + ], + "enabled": false + } ] } diff --git a/repositories.bzl b/repositories.bzl index 2886242a205..e10ae53c6bc 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:Bz1qTn2YRWV+9OKJtxHJiQKCiXIdf+kwuKXdt9cBxyU=", - version = "v0.0.0-20200507105951-43844f6eee31", + sum = "h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig=", + version = "v0.0.0-20200513103714-09dca8ec2884", ) go_repository( name = "org_golang_google_grpc", @@ -151,8 +151,8 @@ def go_repositories(): go_repository( name = "com_github_antihax_optional", importpath = "github.com/antihax/optional", - sum = "h1:uZuxRZCz65cG1o6K/xUqImNcYKtmk9ylqaH0itMSvzA=", - version = "v0.0.0-20180407024304-ca021399b1a6", + sum = "h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=", + version = "v1.0.0", ) go_repository( name = "com_github_census_instrumentation_opencensus_proto", From 8ab3a0afc9c051abf0606e2a10f52314d607ea4e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 May 2020 21:45:01 +0000 Subject: [PATCH 0391/1518] Update module golang/protobuf to v1.4.2 --- examples/internal/helloworld/helloworld.pb.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- .../internal/proto/examplepb/flow_combination.pb.go | 2 +- .../proto/examplepb/non_standard_names.pb.go | 2 +- .../proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../proto/examplepb/unannotated_echo_service.pb.go | 2 +- .../internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- go.mod | 4 ++-- go.sum | 4 ++++ protoc-gen-swagger/options/annotations.pb.go | 2 +- protoc-gen-swagger/options/openapiv2.pb.go | 2 +- repositories.bzl | 12 ++++++------ runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- runtime/query.go | 4 +--- 23 files changed, 32 insertions(+), 30 deletions(-) diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index cbaf2742d2c..8ae1767a6c9 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/helloworld/helloworld.proto diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index e671109f191..bb4f045b977 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index b3bd2b70431..fc75d1395c4 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/echo_service.proto diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 54462f7ef07..41d4b5f589d 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/flow_combination.proto diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index 1b33678e880..ab6cd6711de 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/non_standard_names.proto diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index 111cba596d6..a9827697d0d 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/response_body_service.proto diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 9538b5628fe..2f5a1a29215 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/stream.proto diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 4e81b0117a4..081204c654b 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 15565aec1bc..9c2cdef667d 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/use_go_template.proto diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index 561ca50430a..d0ae5bb6883 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/examplepb/wrappers.proto diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index b9d3de3bc9a..990f2dd3069 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/pathenum/path_enum.proto diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 594da217670..4fe50b7f27f 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/sub/message.proto diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 3491bde1099..2b518cbc29b 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: examples/internal/proto/sub2/message.proto diff --git a/go.mod b/go.mod index 51d3bde9382..4d02fcfe38e 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/antihax/optional v1.0.0 github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.4.1 + github.com/golang/protobuf v1.4.2 github.com/google/go-cmp v0.4.0 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect @@ -14,6 +14,6 @@ require ( golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2 google.golang.org/grpc v1.29.1 - google.golang.org/protobuf v1.22.0 + google.golang.org/protobuf v1.23.0 gopkg.in/yaml.v2 v2.2.3 // indirect ) diff --git a/go.sum b/go.sum index 3ac601d68ec..975dfd66d8a 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -91,6 +93,8 @@ google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zim google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index b9231218b48..885bd995b9d 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: protoc-gen-swagger/options/annotations.proto diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index e3b17c4b193..39ef1c2376d 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: protoc-gen-swagger/options/openapiv2.proto diff --git a/repositories.bzl b/repositories.bzl index 5c17c206ac1..be8ef67a488 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -40,8 +40,8 @@ def go_repositories(): go_repository( name = "com_github_golang_protobuf", importpath = "github.com/golang/protobuf", - sum = "h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=", - version = "v1.4.1", + sum = "h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=", + version = "v1.4.2", ) go_repository( @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:fiNLklpBwWK1mth30Hlwk+fcdBmIALlgF5iy77O37Ig=", - version = "v0.0.0-20200513103714-09dca8ec2884", + sum = "h1:RwW6+LxyOQJ7oeoZ76GIJlwt/O0J5cN2fk+q/jK27kQ=", + version = "v0.0.0-20200514193133-8feb7f20f2a2", ) go_repository( name = "org_golang_google_grpc", @@ -181,8 +181,8 @@ def go_repositories(): go_repository( name = "org_golang_google_protobuf", importpath = "google.golang.org/protobuf", - sum = "h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=", - version = "v1.22.0", + sum = "h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=", + version = "v1.23.0", ) go_repository( name = "org_golang_x_xerrors", diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index a7a3fea6fbe..85b8cdf75da 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: runtime/internal/examplepb/example.proto diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index 94e16b5e7f9..d5696d089c3 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: runtime/internal/examplepb/non_standard_names.proto diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index fb703cc500b..ad99645609f 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: runtime/internal/examplepb/proto2.proto diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index bcebc066a92..0ac73b0c422 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.22.0 +// protoc-gen-go v1.23.0 // protoc v3.10.1 // source: runtime/internal/examplepb/proto3.proto diff --git a/runtime/query.go b/runtime/query.go index ef6b8bd90ee..61cae533557 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -10,7 +10,6 @@ import ( "strings" "time" - legacyproto "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" @@ -325,8 +324,7 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p for _, v := range strings.Split(value, ",") { fm.Paths = append(fm.Paths, v) } - // Necessary until FieldMask is regenerated with v2 - msg = legacyproto.MessageV2(fm) + msg = fm default: return protoreflect.Value{}, fmt.Errorf("unsupported message type: %q", string(msgDescriptor.FullName())) } From fbd8e33f07947d8a4c331fe76baa866a005a2ba4 Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Fri, 15 May 2020 11:52:38 +0200 Subject: [PATCH 0392/1518] docs: add example customizing unmarshal options (#1335) * docs: add example customizing unmarshal options Signed-off-by: Stephan Renatus * Update docs/_docs/customizingyourgateway.md Signed-off-by: Stephan Renatus Co-authored-by: Johan Brandhorst Co-authored-by: Johan Brandhorst --- docs/_docs/customizingyourgateway.md | 52 +++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 11190d832f0..c016f4007bc 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -77,6 +77,50 @@ your HTTP endpoints, the response will be pretty-printed. Note that this will conflict with any methods having input messages with fields named `pretty`; also, this example code does not remove the query parameter `pretty` from further processing. +## Customize unmarshaling per Content-Type + +Having different unmarshaling options per Content-Type is possible by wrapping the decoder and +and passing that to `runtime.WithMarshalerOption`: + +```go +type m struct { + *runtime.JSONPb + unmarshaler *jsonpb.Unmarshaler +} + +type decoderWrapper struct { + *json.Decoder + *jsonpb.Unmarshaler +} + +func (n *m) NewDecoder(r io.Reader) runtime.Decoder { + d := json.NewDecoder(r) + return &decoderWrapper{Decoder: d, Unmarshaler: n.unmarshaler} +} + +func (d *decoderWrapper) Decode(v interface{}) error { + p, ok := v.(proto.Message) + if !ok { // if it's not decoding into a proto.Message, there's no notion of unknown fields + return d.Decoder.Decode(v) + } + return d.UnmarshalNext(d.Decoder, p) // uses m's jsonpb.Unmarshaler configuration +} +``` + +This scaffolding allows us to pass a custom unmarshal options. In this example, we configure the +unmarshaler to disallow unknown fields. For demonstration purposes, we'll also change some of the +default marshaler options: + +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/json+strict", + &m{ + JSONPb: &runtime.JSONPb{EmitDefaults: true}, + unmarshaler: &jsonpb.Unmarshaler{AllowUnknownFields: false}, // explicit "false", &jsonpb.Unmarshaler{} would have the same effect + }), +) +``` + ## Mapping from HTTP request headers to gRPC client metadata You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) and might want to pass through all the HTTP headers, for example. @@ -149,7 +193,7 @@ for more info on sending / receiving gRPC metadata. ``` ## Mutate response messages or set response headers -You might want to return a subset of response fields as HTTP response headers; +You might want to return a subset of response fields as HTTP response headers; You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. @@ -167,7 +211,7 @@ Or you might want to mutate the response messages to be returned. } ``` 2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) - + e.g. ```go mux := runtime.NewServeMux(runtime.WithForwardResponseOption(myFilter)) @@ -312,7 +356,7 @@ You might want to keep the behavior of the current marshaler but change only a m e.g. add `forwarder_overwrite.go` into the go package of the generated code, ```go package generated - + import ( "net/http" @@ -328,7 +372,7 @@ You might want to keep the behavior of the current marshaler but change only a m } runtime.ForwardResponseMessage(ctx, mux, marshaler, w, req, resp, opts...) } - + func init() { forward_MyService_Checkout_0 = forwardCheckoutResp } From 9c46e04dabfc7449a932203e261b36d119fdd96a Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 15:44:22 +0100 Subject: [PATCH 0393/1518] Group protobuf updates on v2 --- renovate.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/renovate.json b/renovate.json index b717ea9ae3f..73d759d6715 100644 --- a/renovate.json +++ b/renovate.json @@ -20,6 +20,16 @@ "io_bazel_rules_go" ], "enabled": false + }, + { + "baseBranchList": [ + "v2" + ], + "packageNames": [ + "github.com/golang/protobuf", + "google.golang.org/protobuf" + ], + "groupName": "golang/protobuf" } ] } From e869f62c5eb91e46422fd2ad555f2df115c538d9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 15:46:18 +0100 Subject: [PATCH 0394/1518] ignore jekyll updates --- renovate.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/renovate.json b/renovate.json index 73d759d6715..120fd435082 100644 --- a/renovate.json +++ b/renovate.json @@ -31,5 +31,9 @@ ], "groupName": "golang/protobuf" } + ], + "ignoreDeps": [ + "jekyll-redirect-from", + "jekyll-sitemap" ] } From acec036a3ef8ac5453445991d15479ffb879bafd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 15:56:10 +0100 Subject: [PATCH 0395/1518] Globally ignore jekyll updates --- renovate.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/renovate.json b/renovate.json index 120fd435082..74d0de5031e 100644 --- a/renovate.json +++ b/renovate.json @@ -30,10 +30,12 @@ "google.golang.org/protobuf" ], "groupName": "golang/protobuf" + }, + { + "packagePatterns": [ + "jekyll-.*" + ], + "enabled": false } - ], - "ignoreDeps": [ - "jekyll-redirect-from", - "jekyll-sitemap" ] } From 3710874e0d8208b70cb77716afd1d3244e40b1bd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 16:01:05 +0100 Subject: [PATCH 0396/1518] Renovate changes from master --- renovate.json | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/renovate.json b/renovate.json index 271f4fbb9b9..74d0de5031e 100644 --- a/renovate.json +++ b/renovate.json @@ -8,5 +8,34 @@ ], "postUpdateOptions": [ "gomodTidy" + ], + "packageRules": [ + { + "baseBranchList": [ + "master" + ], + "packageNames": [ + "github.com/golang/protobuf", + "google.golang.org/genproto", + "io_bazel_rules_go" + ], + "enabled": false + }, + { + "baseBranchList": [ + "v2" + ], + "packageNames": [ + "github.com/golang/protobuf", + "google.golang.org/protobuf" + ], + "groupName": "golang/protobuf" + }, + { + "packagePatterns": [ + "jekyll-.*" + ], + "enabled": false + } ] } From 97ad6937f3062809ddcabf23303ede43325de0b4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2020 17:29:56 +0000 Subject: [PATCH 0397/1518] Update google.golang.org/genproto commit hash to fc4c6c6 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4d02fcfe38e..21391eb636a 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2 + google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587 google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.23.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index 975dfd66d8a..7ab26261e56 100644 --- a/go.sum +++ b/go.sum @@ -76,8 +76,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2 h1:RwW6+LxyOQJ7oeoZ76GIJlwt/O0J5cN2fk+q/jK27kQ= -google.golang.org/genproto v0.0.0-20200514193133-8feb7f20f2a2/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587 h1:1Ym+vvUpq1ZHvxzn34gENJX8U4aKO+vhy2P/2+Xl6qQ= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= From d38a8e1ef215c0892354babde8a79d1559706b01 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 19:14:31 +0100 Subject: [PATCH 0398/1518] internal/descriptor: move to generated apiconfig test --- Makefile | 9 +- internal/descriptor/BUILD.bazel | 2 +- internal/descriptor/apiconfig/BUILD.bazel | 28 +++ internal/descriptor/apiconfig/apiconfig.pb.go | 170 ++++++++++++++++++ internal/descriptor/apiconfig/apiconfig.proto | 21 +++ internal/descriptor/grpc_api_configuration.go | 11 +- .../descriptor/grpc_api_configuration_test.go | 20 +-- internal/descriptor/grpc_api_service.go | 31 ---- repositories.bzl | 4 +- 9 files changed, 245 insertions(+), 51 deletions(-) create mode 100644 internal/descriptor/apiconfig/BUILD.bazel create mode 100644 internal/descriptor/apiconfig/apiconfig.pb.go create mode 100644 internal/descriptor/apiconfig/apiconfig.proto delete mode 100644 internal/descriptor/grpc_api_service.go diff --git a/Makefile b/Makefile index 069912e3605..463cd5fa7d9 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,6 @@ GATEWAY_PLUGIN_SRC= ./internal/utilities/doc.go \ ./internal/descriptor/services.go \ ./internal/descriptor/types.go \ ./internal/descriptor/grpc_api_configuration.go \ - ./internal/descriptor/grpc_api_service.go \ ./internal/generator \ ./internal/generator/generator.go \ protoc-gen-grpc-gateway \ @@ -93,6 +92,9 @@ RUNTIME_TEST_PROTO=runtime/internal/examplepb/example.proto \ runtime/internal/examplepb/non_standard_names.proto RUNTIME_TEST_SRCS=$(RUNTIME_TEST_PROTO:.proto=.pb.go) +APICONFIG_PROTO=internal/descriptor/apiconfig/apiconfig.proto +APICONFIG_SRCS=$(APICONFIG_PROTO:.proto=.pb.go) + EXAMPLE_CLIENT_DIR=examples/internal/clients ECHO_EXAMPLE_SPEC=examples/internal/proto/examplepb/echo_service.swagger.json ECHO_EXAMPLE_SRCS=$(EXAMPLE_CLIENT_DIR)/echo/client.go \ @@ -165,6 +167,9 @@ $(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(EXAMPLE_DEPS) $(RUNTIME_TEST_SRCS): $(GO_PLUGIN) $(RUNTIME_TEST_PROTO) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(RUNTIME_TEST_PROTO) +$(APICONFIG_SRCS): $(GO_PLUGIN) $(APICONFIG_PROTO) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),paths=source_relative:. $(APICONFIG_PROTO) + $(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_GWSRCS): ADDITIONAL_SA_FLAGS:=,standalone=true,grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) @@ -207,7 +212,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) -testproto: $(RUNTIME_TEST_SRCS) +testproto: $(RUNTIME_TEST_SRCS) $(APICONFIG_SRCS) test: examples testproto go test -short -race ./... go test -race ./examples/internal/integration -args -network=unix -endpoint=test.sock diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index 0834dc694f2..326847be68a 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -6,7 +6,6 @@ go_library( name = "go_default_library", srcs = [ "grpc_api_configuration.go", - "grpc_api_service.go", "registry.go", "services.go", "types.go", @@ -14,6 +13,7 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor", deps = [ "//internal/casing:go_default_library", + "//internal/descriptor/apiconfig:go_default_library", "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", diff --git a/internal/descriptor/apiconfig/BUILD.bazel b/internal/descriptor/apiconfig/BUILD.bazel new file mode 100644 index 00000000000..21443f762cd --- /dev/null +++ b/internal/descriptor/apiconfig/BUILD.bazel @@ -0,0 +1,28 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +package(default_visibility = ["//visibility:public"]) + +proto_library( + name = "apiconfig_proto", + srcs = [ + "apiconfig.proto", + ], + deps = [ + "@go_googleapis//google/api:annotations_proto", + ], +) + +go_proto_library( + name = "apiconfig_go_proto", + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig", + proto = ":apiconfig_proto", + deps = ["@go_googleapis//google/api:annotations_go_proto"], +) + +go_library( + name = "go_default_library", + embed = [":apiconfig_go_proto"], + importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig", +) diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go new file mode 100644 index 00000000000..0e87efd808f --- /dev/null +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -0,0 +1,170 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.23.0 +// protoc v3.10.1 +// source: internal/descriptor/apiconfig/apiconfig.proto + +package apiconfig + +import ( + proto "github.com/golang/protobuf/proto" + annotations "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// GrpcAPIService represents a stripped down version of google.api.Service . +// Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto +// The original imports 23 other protobuf files we are not interested in. If a significant +// subset (>50%) of these start being reproduced in this file we should swap to using the +// full generated version instead. +// +// For the purposes of the gateway generator we only consider a small subset of all +// available features google supports in their service descriptions. Thanks to backwards +// compatibility guarantees by protobuf it is safe for us to remove the other fields. +type GrpcAPIService struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Http Rule. + Http *annotations.Http `protobuf:"bytes,1,opt,name=http,proto3" json:"http,omitempty"` +} + +func (x *GrpcAPIService) Reset() { + *x = GrpcAPIService{} + if protoimpl.UnsafeEnabled { + mi := &file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GrpcAPIService) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GrpcAPIService) ProtoMessage() {} + +func (x *GrpcAPIService) ProtoReflect() protoreflect.Message { + mi := &file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GrpcAPIService.ProtoReflect.Descriptor instead. +func (*GrpcAPIService) Descriptor() ([]byte, []int) { + return file_internal_descriptor_apiconfig_apiconfig_proto_rawDescGZIP(), []int{0} +} + +func (x *GrpcAPIService) GetHttp() *annotations.Http { + if x != nil { + return x.Http + } + return nil +} + +var File_internal_descriptor_apiconfig_apiconfig_proto protoreflect.FileDescriptor + +var file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc = []byte{ + 0x0a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x2a, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x2e, 0x61, 0x70, 0x69, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x15, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x41, 0x50, 0x49, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x48, 0x74, 0x74, 0x70, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x42, 0x49, 0x5a, 0x47, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, + 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_internal_descriptor_apiconfig_apiconfig_proto_rawDescOnce sync.Once + file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData = file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc +) + +func file_internal_descriptor_apiconfig_apiconfig_proto_rawDescGZIP() []byte { + file_internal_descriptor_apiconfig_apiconfig_proto_rawDescOnce.Do(func() { + file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData) + }) + return file_internal_descriptor_apiconfig_apiconfig_proto_rawDescData +} + +var file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_internal_descriptor_apiconfig_apiconfig_proto_goTypes = []interface{}{ + (*GrpcAPIService)(nil), // 0: grpc.gateway.internal.descriptor.apiconfig.GrpcAPIService + (*annotations.Http)(nil), // 1: google.api.Http +} +var file_internal_descriptor_apiconfig_apiconfig_proto_depIdxs = []int32{ + 1, // 0: grpc.gateway.internal.descriptor.apiconfig.GrpcAPIService.http:type_name -> google.api.Http + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_internal_descriptor_apiconfig_apiconfig_proto_init() } +func file_internal_descriptor_apiconfig_apiconfig_proto_init() { + if File_internal_descriptor_apiconfig_apiconfig_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GrpcAPIService); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_internal_descriptor_apiconfig_apiconfig_proto_goTypes, + DependencyIndexes: file_internal_descriptor_apiconfig_apiconfig_proto_depIdxs, + MessageInfos: file_internal_descriptor_apiconfig_apiconfig_proto_msgTypes, + }.Build() + File_internal_descriptor_apiconfig_apiconfig_proto = out.File + file_internal_descriptor_apiconfig_apiconfig_proto_rawDesc = nil + file_internal_descriptor_apiconfig_apiconfig_proto_goTypes = nil + file_internal_descriptor_apiconfig_apiconfig_proto_depIdxs = nil +} diff --git a/internal/descriptor/apiconfig/apiconfig.proto b/internal/descriptor/apiconfig/apiconfig.proto new file mode 100644 index 00000000000..aeecd777384 --- /dev/null +++ b/internal/descriptor/apiconfig/apiconfig.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; + +package grpc.gateway.internal.descriptor.apiconfig; + +option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig"; + +import "google/api/http.proto"; + +// GrpcAPIService represents a stripped down version of google.api.Service . +// Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto +// The original imports 23 other protobuf files we are not interested in. If a significant +// subset (>50%) of these start being reproduced in this file we should swap to using the +// full generated version instead. +// +// For the purposes of the gateway generator we only consider a small subset of all +// available features google supports in their service descriptions. Thanks to backwards +// compatibility guarantees by protobuf it is safe for us to remove the other fields. +message GrpcAPIService { + // Http Rule. + google.api.Http http = 1; +} diff --git a/internal/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go index ca68ed74db1..cb112fa5ed3 100644 --- a/internal/descriptor/grpc_api_configuration.go +++ b/internal/descriptor/grpc_api_configuration.go @@ -8,9 +8,10 @@ import ( "github.com/ghodss/yaml" "github.com/golang/protobuf/jsonpb" + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig" ) -func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*GrpcAPIService, error) { +func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*apiconfig.GrpcAPIService, error) { jsonContents, err := yaml.YAMLToJSON(yamlFileContents) if err != nil { return nil, fmt.Errorf("Failed to convert gRPC API Configuration from YAML in '%v' to JSON: %v", yamlSourceLogName, err) @@ -21,7 +22,7 @@ func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName strin AllowUnknownFields: true, } - serviceConfiguration := GrpcAPIService{} + serviceConfiguration := apiconfig.GrpcAPIService{} if err := unmarshaler.Unmarshal(bytes.NewReader(jsonContents), &serviceConfiguration); err != nil { return nil, fmt.Errorf("Failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) } @@ -29,13 +30,13 @@ func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName strin return &serviceConfiguration, nil } -func registerHTTPRulesFromGrpcAPIService(registry *Registry, service *GrpcAPIService, sourceLogName string) error { - if service.HTTP == nil { +func registerHTTPRulesFromGrpcAPIService(registry *Registry, service *apiconfig.GrpcAPIService, sourceLogName string) error { + if service.Http == nil { // Nothing to do return nil } - for _, rule := range service.HTTP.GetRules() { + for _, rule := range service.Http.GetRules() { selector := "." + strings.Trim(rule.GetSelector(), " ") if strings.ContainsAny(selector, "*, ") { return fmt.Errorf("Selector '%v' in %v must specify a single service method without wildcards", rule.GetSelector(), sourceLogName) diff --git a/internal/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go index cc6cb441202..28448a180c6 100644 --- a/internal/descriptor/grpc_api_configuration_test.go +++ b/internal/descriptor/grpc_api_configuration_test.go @@ -15,7 +15,7 @@ func TestLoadGrpcAPIServiceFromYAMLEmpty(t *testing.T) { t.Fatal("No service returned") } - if service.HTTP != nil { + if service.Http != nil { t.Fatal("HTTP not empty") } } @@ -47,15 +47,15 @@ http: t.Fatal(err) } - if service.HTTP == nil { + if service.Http == nil { t.Fatal("HTTP is empty") } - if len(service.HTTP.GetRules()) != 1 { - t.Fatalf("Have %v rules instead of one. Got: %v", len(service.HTTP.GetRules()), service.HTTP.GetRules()) + if len(service.Http.GetRules()) != 1 { + t.Fatalf("Have %v rules instead of one. Got: %v", len(service.Http.GetRules()), service.Http.GetRules()) } - rule := service.HTTP.GetRules()[0] + rule := service.Http.GetRules()[0] if rule.GetSelector() != "grpctest.YourService.Echo" { t.Errorf("Rule has unexpected selector '%v'", rule.GetSelector()) } @@ -117,15 +117,15 @@ http: t.Fatal("No service returned") } - if service.HTTP == nil { + if service.Http == nil { t.Fatal("HTTP is empty") } - if len(service.HTTP.GetRules()) != 2 { - t.Fatalf("%v service(s) returned when two were expected. Got: %v", len(service.HTTP.GetRules()), service.HTTP) + if len(service.Http.GetRules()) != 2 { + t.Fatalf("%v service(s) returned when two were expected. Got: %v", len(service.Http.GetRules()), service.Http) } - first := service.HTTP.GetRules()[0] + first := service.Http.GetRules()[0] if first.GetSelector() != "first.selector" { t.Errorf("first.selector has unexpected selector '%v'", first.GetSelector()) } @@ -151,7 +151,7 @@ http: t.Errorf("first.selector additional binding 3 has unexpected patch '%v'", first.GetAdditionalBindings()[0].GetPost()) } - second := service.HTTP.GetRules()[1] + second := service.Http.GetRules()[1] if second.GetSelector() != "some.other.service" { t.Errorf("some.other.service has unexpected selector '%v'", second.GetSelector()) } diff --git a/internal/descriptor/grpc_api_service.go b/internal/descriptor/grpc_api_service.go deleted file mode 100644 index 75b824057dd..00000000000 --- a/internal/descriptor/grpc_api_service.go +++ /dev/null @@ -1,31 +0,0 @@ -package descriptor - -import ( - "github.com/golang/protobuf/proto" - "google.golang.org/genproto/googleapis/api/annotations" -) - -// GrpcAPIService represents a stripped down version of google.api.Service . -// Compare to https://github.com/googleapis/googleapis/blob/master/google/api/service.proto -// The original imports 23 other protobuf files we are not interested in. If a significant -// subset (>50%) of these start being reproduced in this file we should swap to using the -// full generated version instead. -// -// For the purposes of the gateway generator we only consider a small subset of all -// available features google supports in their service descriptions. Thanks to backwards -// compatibility guarantees by protobuf it is safe for us to remove the other fields. -// We also only implement the absolute minimum of protobuf generator boilerplate to use -// our simplified version. These should be pretty stable too. -type GrpcAPIService struct { - // Http Rule. Named Http in the actual proto. Changed to suppress linter warning. - HTTP *annotations.Http `protobuf:"bytes,9,opt,name=http" json:"http,omitempty"` -} - -// ProtoMessage returns an empty GrpcAPIService element -func (*GrpcAPIService) ProtoMessage() {} - -// Reset resets the GrpcAPIService -func (m *GrpcAPIService) Reset() { *m = GrpcAPIService{} } - -// String returns the string representation of the GrpcAPIService -func (m *GrpcAPIService) String() string { return proto.CompactTextString(m) } diff --git a/repositories.bzl b/repositories.bzl index be8ef67a488..2c98d156ee8 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:RwW6+LxyOQJ7oeoZ76GIJlwt/O0J5cN2fk+q/jK27kQ=", - version = "v0.0.0-20200514193133-8feb7f20f2a2", + sum = "h1:1Ym+vvUpq1ZHvxzn34gENJX8U4aKO+vhy2P/2+Xl6qQ=", + version = "v0.0.0-20200515170657-fc4c6c6a6587", ) go_repository( name = "org_golang_google_grpc", From 0392ecdbb0cfa5ea3faff786b6b67b791e95f482 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 15 May 2020 20:14:15 +0100 Subject: [PATCH 0399/1518] remove unused PKGMAP --- Makefile | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 463cd5fa7d9..031d5b141ca 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,6 @@ OUTPUT_DIR=_output OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) -PKGMAP=Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf/field_mask,Mgoogle/protobuf/descriptor.proto=$(GO_PLUGIN_PKG)/descriptor,Mexamples/internal/proto/sub/message.proto=github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub ADDITIONAL_GW_FLAGS= ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) @@ -149,7 +148,7 @@ $(GO_PLUGIN): go build -o $(GO_PLUGIN) $(GO_PLUGIN_PKG) $(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) - protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=$(PKGMAP),paths=source_relative:. $(OPENAPIV2_PROTO) + protoc -I $(PROTOC_INC_PATH) --plugin=$(GO_PLUGIN) -I. --go_out=paths=source_relative:. $(OPENAPIV2_PROTO) $(GATEWAY_PLUGIN): $(GATEWAY_PLUGIN_SRC) go build -o $@ $(GATEWAY_PLUGIN_PKG) @@ -158,36 +157,36 @@ $(SWAGGER_PLUGIN): $(SWAGGER_PLUGIN_SRC) $(OPENAPIV2_GO) go build -o $@ $(SWAGGER_PLUGIN_PKG) $(EXAMPLE_SVCSRCS): $(GO_PLUGIN) $(EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:. $(EXAMPLES) $(EXAMPLE_DEPSRCS): $(GO_PLUGIN) $(EXAMPLE_DEPS) mkdir -p $(OUTPUT_DIR) - protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:$(OUTPUT_DIR) $(@:.pb.go=.proto) + protoc -I $(PROTOC_INC_PATH) -I. --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:$(OUTPUT_DIR) $(@:.pb.go=.proto) cp $(OUTPUT_DIR)/$@ $@ || cp $(OUTPUT_DIR)/$@ $@ $(RUNTIME_TEST_SRCS): $(GO_PLUGIN) $(RUNTIME_TEST_PROTO) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(RUNTIME_TEST_PROTO) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:. $(RUNTIME_TEST_PROTO) $(APICONFIG_SRCS): $(GO_PLUGIN) $(APICONFIG_PROTO) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),paths=source_relative:. $(APICONFIG_PROTO) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=paths=source_relative:. $(APICONFIG_PROTO) $(EXAMPLE_GWSRCS): ADDITIONAL_GW_FLAGS:=$(ADDITIONAL_GW_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_GWSRCS): ADDITIONAL_SA_FLAGS:=,standalone=true,grpc_api_configuration=examples/internal/proto/examplepb/standalone_echo_service.yaml $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_SA_FLAGS):. $(STANDALONE_EXAMPLES) mv examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go examples/internal/proto/standalone/ - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) $(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true,$(PKGMAP)$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) $(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(HELLOWORLD) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=$(PKGMAP),plugins=grpc,paths=source_relative:. $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:. $(HELLOWORLD) $(HELLOWORLD_GWSRCS): $(HELLOWORLD_GWSRCS): $(GATEWAY_PLUGIN) $(HELLOWORLD) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative,$(PKGMAP)$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_GW_FLAGS):. $(HELLOWORLD) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) From a4287847d426bf4133e0839bf1de789360aee19c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2020 22:27:48 +0000 Subject: [PATCH 0400/1518] Update dependency io_bazel_rules_go to v0.23.1 --- WORKSPACE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index bda4c836282..ced88840a98 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -35,10 +35,10 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "6a68e269802911fa419abb940c850734086869d7fe9bc8e12aaf60a09641c818", + sha256 = "87f0fb9747854cb76a0a82430adccb6269f7d394237104a4523b51061c469171", urls = [ - "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.23.0/rules_go-v0.23.0.tar.gz", - "https://github.com/bazelbuild/rules_go/releases/download/v0.23.0/rules_go-v0.23.0.tar.gz", + "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/rules_go/releases/download/v0.23.1/rules_go-v0.23.1.tar.gz", + "https://github.com/bazelbuild/rules_go/releases/download/v0.23.1/rules_go-v0.23.1.tar.gz", ], ) From 6af515c914b16a75244ef95b6ae53ed3662dea9c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2020 23:33:49 +0000 Subject: [PATCH 0401/1518] Update module google/go-cmp to v0.4.1 --- go.mod | 2 +- go.sum | 2 ++ repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 21391eb636a..8ce286e7899 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ghodss/yaml v1.0.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.4.2 - github.com/google/go-cmp v0.4.0 + github.com/google/go-cmp v0.4.1 github.com/rogpeppe/fastuuid v1.2.0 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d diff --git a/go.sum b/go.sum index 7ab26261e56..f0c0c294396 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= diff --git a/repositories.bzl b/repositories.bzl index 2c98d156ee8..69f8da71649 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -133,8 +133,8 @@ def go_repositories(): go_repository( name = "com_github_google_go_cmp", importpath = "github.com/google/go-cmp", - sum = "h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=", - version = "v0.4.0", + sum = "h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=", + version = "v0.4.1", ) go_repository( name = "org_golang_x_crypto", From 8f3a0280ea35645ec04223f5d02c6f7db18de945 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 16 May 2020 12:29:53 +0100 Subject: [PATCH 0402/1518] Run bazel repositories check in CI This is going to mean every renovate update needs to be manually resolved but so be it --- .circleci/config.yml | 24 +++++++++++++++--------- .gitignore | 1 + 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2f2a7ad8979..48ae0136ce3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -110,21 +110,27 @@ jobs: build --features race # Workaround https://github.com/bazelbuild/bazel/issues/3645 # See https://docs.bazel.build/versions/0.23.0/command-line-reference.html - build --local_ram_resources=3072 - build --local_cpu_resources=1 + build --local_ram_resources=4096 # Circle Docker runners have 4G of memory + build --local_cpu_resources=2 # Circle Docker runners have 2 vCPU EOF - run: name: Check that Bazel BUILD files are up-to-date - command: 'bazel run //:gazelle -- --mode=diff || - (echo "ERROR: Bazel files out-of-date, please run \`bazel run :gazelle\`" >&2; exit 1)' + command: | + bazel run //:gazelle && + git diff --exit-code - run: - name: Run tests with Bazel - command: bazel test //... + name: Check that repositories.bzl is up-to-date + command: | + bazel run //:gazelle -- update-repos -from_file=go.mod -to_macro=repositories.bzl%go_repositories && + git diff --exit-code - run: name: Check formatting of Bazel BUILD files - command: 'bazel run //:buildifier_check || - (echo "ERROR: Bazel files not formatted, please run \`bazel run :buildifier\`" >&2; exit 1)' - when: always + command: | + bazel run //:buildifier && + git diff --exit-code + - run: + name: Run tests with Bazel + command: bazel test //... - save_cache: key: v2-bazel-cache-{{ checksum "repositories.bzl" }} paths: diff --git a/.gitignore b/.gitignore index 2a59512090f..9a034ffff8c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ bazel-genfiles bazel-grpc-gateway bazel-out bazel-testlogs +.bazelrc # Go vendor directory vendor From 529d2cdabb64ed7def17514e41ff477c8ef7b26b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2020 22:27:42 +0000 Subject: [PATCH 0403/1518] Update golang Docker tag to v1.14.3 --- .circleci/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 46d8d6fb42d..9274b1f0601 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.2 +FROM golang:1.14.3 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). @@ -17,7 +17,7 @@ RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' chmod +x /usr/local/bin/swagger-codegen # Install protoc -ENV PROTOC_VERSION=3.10.1 +ENV PROTOC_VERSION=3.12.0 RUN wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ From c860e27850f22cd6795410fbcbf0222f4a4241d9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 17 May 2020 20:33:09 +0100 Subject: [PATCH 0404/1518] all: regenerate with new image --- examples/internal/clients/abe/api/swagger.yaml | 2 +- examples/internal/clients/abe/model_protobuf_field_mask.go | 2 +- .../internal/proto/examplepb/a_bit_of_everything.swagger.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 742056db6f6..6250a74753f 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2368,7 +2368,7 @@ definitions: \ used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any\ \ API method which has a FieldMask type field in the\nrequest should verify\ \ the included field paths, and return an\n`INVALID_ARGUMENT` error if any path\ - \ is duplicated or unmappable." + \ is unmappable." runtimeError: type: "object" properties: diff --git a/examples/internal/clients/abe/model_protobuf_field_mask.go b/examples/internal/clients/abe/model_protobuf_field_mask.go index 9de81c0d600..5ca6567193e 100644 --- a/examples/internal/clients/abe/model_protobuf_field_mask.go +++ b/examples/internal/clients/abe/model_protobuf_field_mask.go @@ -10,7 +10,7 @@ package abe -// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is duplicated or unmappable. +// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is unmappable. type ProtobufFieldMask struct { // The set of field mask paths. Paths []string `json:"paths,omitempty"` diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 76a818c470e..888ee1a8a0a 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2780,7 +2780,7 @@ "description": "The set of field mask paths." } }, - "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", + "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, "runtimeError": { From f997e3dd60d0b5dd5b6e6590afefa0d5647d47c5 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 May 2020 23:32:17 +0000 Subject: [PATCH 0405/1518] Update golang Docker tag to v1.14.3 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 46d8d6fb42d..121dadc1a35 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.2 +FROM golang:1.14.3 # Warm apt cache and install dependencies # bzip2 is required by the node_tests (to extract its dependencies). From e7d8d2eb5a457d60f1b1881b87425ffd09354aa3 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 17 May 2020 20:43:35 +0100 Subject: [PATCH 0406/1518] build-env: update protoc version to 3.12.0 --- .circleci/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/Dockerfile b/.circleci/Dockerfile index 121dadc1a35..9274b1f0601 100644 --- a/.circleci/Dockerfile +++ b/.circleci/Dockerfile @@ -17,7 +17,7 @@ RUN echo -e '#!/bin/bash\njava -jar /usr/local/bin/swagger-codegen-cli.jar "$@"' chmod +x /usr/local/bin/swagger-codegen # Install protoc -ENV PROTOC_VERSION=3.10.1 +ENV PROTOC_VERSION=3.12.0 RUN wget https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip \ -O /protoc-${PROTOC_VERSION}-linux-x86_64.zip && \ unzip /protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ && \ From 6cd4e056859381f65af1deaca5c59a62d1a1b2e3 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 17 May 2020 20:44:01 +0100 Subject: [PATCH 0407/1518] all: regenerate files with new build-env --- examples/internal/clients/abe/api/swagger.yaml | 2 +- examples/internal/clients/abe/model_protobuf_field_mask.go | 2 +- examples/internal/helloworld/helloworld.pb.go | 2 +- examples/internal/proto/examplepb/a_bit_of_everything.pb.go | 2 +- .../internal/proto/examplepb/a_bit_of_everything.swagger.json | 2 +- examples/internal/proto/examplepb/echo_service.pb.go | 2 +- examples/internal/proto/examplepb/flow_combination.pb.go | 2 +- examples/internal/proto/examplepb/non_standard_names.pb.go | 2 +- examples/internal/proto/examplepb/response_body_service.pb.go | 2 +- examples/internal/proto/examplepb/stream.pb.go | 2 +- .../internal/proto/examplepb/unannotated_echo_service.pb.go | 2 +- examples/internal/proto/examplepb/use_go_template.pb.go | 2 +- examples/internal/proto/examplepb/wrappers.pb.go | 2 +- examples/internal/proto/pathenum/path_enum.pb.go | 2 +- examples/internal/proto/sub/message.pb.go | 2 +- examples/internal/proto/sub2/message.pb.go | 2 +- internal/descriptor/apiconfig/apiconfig.pb.go | 2 +- protoc-gen-swagger/options/annotations.pb.go | 2 +- protoc-gen-swagger/options/openapiv2.pb.go | 2 +- runtime/internal/examplepb/example.pb.go | 2 +- runtime/internal/examplepb/non_standard_names.pb.go | 2 +- runtime/internal/examplepb/proto2.pb.go | 2 +- runtime/internal/examplepb/proto3.pb.go | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 5bae500ca54..0969ef1a012 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -2368,7 +2368,7 @@ definitions: \ used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any\ \ API method which has a FieldMask type field in the\nrequest should verify\ \ the included field paths, and return an\n`INVALID_ARGUMENT` error if any path\ - \ is duplicated or unmappable." + \ is unmappable." rpcStatus: type: "object" properties: diff --git a/examples/internal/clients/abe/model_protobuf_field_mask.go b/examples/internal/clients/abe/model_protobuf_field_mask.go index 9de81c0d600..5ca6567193e 100644 --- a/examples/internal/clients/abe/model_protobuf_field_mask.go +++ b/examples/internal/clients/abe/model_protobuf_field_mask.go @@ -10,7 +10,7 @@ package abe -// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is duplicated or unmappable. +// paths: \"f.a\" paths: \"f.b.d\" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: [\"f.b\", \"f.c\"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: \"user.display_name\" paths: \"photo\" } In JSON, the same mask is represented as below: { mask: \"user.displayName,photo\" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: \"name\" } Or: mask { paths: \"sub_message\" } Note that oneof type names (\"test_oneof\" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is unmappable. type ProtobufFieldMask struct { // The set of field mask paths. Paths []string `json:"paths,omitempty"` diff --git a/examples/internal/helloworld/helloworld.pb.go b/examples/internal/helloworld/helloworld.pb.go index 8ae1767a6c9..66956d9a4a4 100644 --- a/examples/internal/helloworld/helloworld.pb.go +++ b/examples/internal/helloworld/helloworld.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/helloworld/helloworld.proto package helloworld diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index bb4f045b977..40c742debe3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/a_bit_of_everything.proto package examplepb diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 883d98f0536..2d45ea3c5b3 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -2780,7 +2780,7 @@ "description": "The set of field mask paths." } }, - "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is duplicated or unmappable.", + "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, "rpcStatus": { diff --git a/examples/internal/proto/examplepb/echo_service.pb.go b/examples/internal/proto/examplepb/echo_service.pb.go index fc75d1395c4..41f60798b10 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.go +++ b/examples/internal/proto/examplepb/echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/echo_service.proto // Echo Service diff --git a/examples/internal/proto/examplepb/flow_combination.pb.go b/examples/internal/proto/examplepb/flow_combination.pb.go index 41d4b5f589d..114493f70ff 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/flow_combination.proto package examplepb diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.go b/examples/internal/proto/examplepb/non_standard_names.pb.go index ab6cd6711de..e81a47119c2 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/non_standard_names.proto package examplepb diff --git a/examples/internal/proto/examplepb/response_body_service.pb.go b/examples/internal/proto/examplepb/response_body_service.pb.go index a9827697d0d..b24a99aae69 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/response_body_service.proto package examplepb diff --git a/examples/internal/proto/examplepb/stream.pb.go b/examples/internal/proto/examplepb/stream.pb.go index 2f5a1a29215..77992df0cc0 100644 --- a/examples/internal/proto/examplepb/stream.pb.go +++ b/examples/internal/proto/examplepb/stream.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/stream.proto package examplepb diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go index 081204c654b..45843a0bdca 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/unannotated_echo_service.proto // Unannotated Echo Service diff --git a/examples/internal/proto/examplepb/use_go_template.pb.go b/examples/internal/proto/examplepb/use_go_template.pb.go index 9c2cdef667d..5ecb022225f 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/use_go_template.proto package examplepb diff --git a/examples/internal/proto/examplepb/wrappers.pb.go b/examples/internal/proto/examplepb/wrappers.pb.go index d0ae5bb6883..f1a8bdb4543 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.go +++ b/examples/internal/proto/examplepb/wrappers.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/examplepb/wrappers.proto package examplepb diff --git a/examples/internal/proto/pathenum/path_enum.pb.go b/examples/internal/proto/pathenum/path_enum.pb.go index 990f2dd3069..38c458b8bc3 100644 --- a/examples/internal/proto/pathenum/path_enum.pb.go +++ b/examples/internal/proto/pathenum/path_enum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/pathenum/path_enum.proto package pathenum diff --git a/examples/internal/proto/sub/message.pb.go b/examples/internal/proto/sub/message.pb.go index 4fe50b7f27f..590bd6287aa 100644 --- a/examples/internal/proto/sub/message.pb.go +++ b/examples/internal/proto/sub/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/sub/message.proto package sub diff --git a/examples/internal/proto/sub2/message.pb.go b/examples/internal/proto/sub2/message.pb.go index 2b518cbc29b..90662f3c787 100644 --- a/examples/internal/proto/sub2/message.pb.go +++ b/examples/internal/proto/sub2/message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: examples/internal/proto/sub2/message.proto package sub2 diff --git a/internal/descriptor/apiconfig/apiconfig.pb.go b/internal/descriptor/apiconfig/apiconfig.pb.go index 0e87efd808f..3d496d610ef 100644 --- a/internal/descriptor/apiconfig/apiconfig.pb.go +++ b/internal/descriptor/apiconfig/apiconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: internal/descriptor/apiconfig/apiconfig.proto package apiconfig diff --git a/protoc-gen-swagger/options/annotations.pb.go b/protoc-gen-swagger/options/annotations.pb.go index 885bd995b9d..4bf06355c4e 100644 --- a/protoc-gen-swagger/options/annotations.pb.go +++ b/protoc-gen-swagger/options/annotations.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: protoc-gen-swagger/options/annotations.proto package options diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 39ef1c2376d..9c65199f196 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: protoc-gen-swagger/options/openapiv2.proto package options diff --git a/runtime/internal/examplepb/example.pb.go b/runtime/internal/examplepb/example.pb.go index 85b8cdf75da..210838963db 100644 --- a/runtime/internal/examplepb/example.pb.go +++ b/runtime/internal/examplepb/example.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: runtime/internal/examplepb/example.proto package examplepb diff --git a/runtime/internal/examplepb/non_standard_names.pb.go b/runtime/internal/examplepb/non_standard_names.pb.go index d5696d089c3..35193af2fc2 100644 --- a/runtime/internal/examplepb/non_standard_names.pb.go +++ b/runtime/internal/examplepb/non_standard_names.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: runtime/internal/examplepb/non_standard_names.proto package examplepb diff --git a/runtime/internal/examplepb/proto2.pb.go b/runtime/internal/examplepb/proto2.pb.go index ad99645609f..e901ff835b3 100644 --- a/runtime/internal/examplepb/proto2.pb.go +++ b/runtime/internal/examplepb/proto2.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: runtime/internal/examplepb/proto2.proto package examplepb diff --git a/runtime/internal/examplepb/proto3.pb.go b/runtime/internal/examplepb/proto3.pb.go index 0ac73b0c422..202e28b9400 100644 --- a/runtime/internal/examplepb/proto3.pb.go +++ b/runtime/internal/examplepb/proto3.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.23.0 -// protoc v3.10.1 +// protoc v3.12.0 // source: runtime/internal/examplepb/proto3.proto package examplepb From b7cf781ef03ceaee20cddfce1ba408aefc2d6140 Mon Sep 17 00:00:00 2001 From: Aman Jain Date: Mon, 18 May 2020 20:28:28 +0530 Subject: [PATCH 0408/1518] Fix typo in CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d23fafe999b..6b098a00540 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,7 @@ All submissions, including submissions by project members, require review. ### I want to regenerate the files after making changes! -Great, it should be as simple as thus (run from the root of the directory): +Great, it should be as simple as this (run from the root of the directory): ```bash docker run -v $(pwd):/src/grpc-gateway --rm docker.pkg.github.com/grpc-ecosystem/grpc-gateway/build-env:1.14 \ From 55996fd2e61cf1f53ae0abf544b80c3ad976c43e Mon Sep 17 00:00:00 2001 From: Aman Jain Date: Mon, 18 May 2020 22:40:02 +0530 Subject: [PATCH 0409/1518] Improve README.md (#1361) --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 12eec2094c2..9193f049c02 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which -'translates a RESTful HTTP API into gRPC. This server is generated according to the +translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. @@ -28,7 +28,7 @@ gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. However, you might still want to provide a traditional RESTful JSON API as well. Reasons can range from maintaining -backwards-compatibility, supporting languages or clients not well supported by +backward-compatibility, supporting languages or clients that are not well supported by gRPC, to simply maintaining the aesthetics and tooling involved with a RESTful JSON architecture. @@ -123,7 +123,7 @@ annotation to your .proto file >You will need to provide the required third party protobuf files to the `protoc` compiler. >They are included in this repo under the `third_party/googleapis` folder, and we recommend copying - >them into your `protoc` generation file structure. If you've structured your protofiles according + >them into your `protoc` generation file structure. If you've structured your proto files according >to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), >you could copy the files into a top-level `./google` folder. @@ -247,12 +247,12 @@ example: ``` `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to -Golang import paths. They are compatible to -[the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). +Golang import paths. They are compatible with +[the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). This parameter can be -useful to pass request scoped context between the gateway and the gRPC service. +useful to pass the request-scoped context between the gateway and the gRPC service. `protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run @@ -286,10 +286,10 @@ gRPC-gateway, and a gRPC server, see ### Supported * Generating JSON API handlers. -* Method parameters in request body. -* Method parameters in request path. +* Method parameters in the request body. +* Method parameters in the request path. * Method parameters in query string. -* Enum fields in path parameter (including repeated enum fields). +* Enum fields in the path parameter (including repeated enum fields). * Mapping streaming APIs to newline-delimited JSON streams. * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definitions for From 554b3dac4972c2957a8bc8e8ba15a241a6352b93 Mon Sep 17 00:00:00 2001 From: Aman Jain Date: Tue, 19 May 2020 00:10:42 +0530 Subject: [PATCH 0410/1518] Fix some CI comments (#1362) * Improve comments, fix indentation and add new line * Revert indentation * Add newline * Revert changes in auto generated files --- .circleci/config.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 25adeb2129b..f1e5946cb76 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: build: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: @@ -16,7 +16,7 @@ jobs: - run: go build ./... test: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' GLOG_logtostderr: '1' @@ -32,7 +32,7 @@ jobs: - run: bash <(curl -s https://codecov.io/bash) node_test: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: @@ -52,7 +52,7 @@ jobs: ./node_modules/.bin/gulp generate: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: @@ -70,7 +70,7 @@ jobs: - run: git diff --exit-code lint: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: @@ -131,7 +131,7 @@ jobs: - /root/.cache/_grpc_gateway_bazel gorelease: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: @@ -151,7 +151,7 @@ jobs: - run: gorelease release: environment: - ## Split key to avoid github revoking it + ## Split key to avoid github from revoking it password0: '99544cdcb19ad4e3fd64' password1: '3ec86b2e5a431be2d72c' docker: From c07ffeded6d65dea0800616b3c5d6e506c3cb010 Mon Sep 17 00:00:00 2001 From: Aman Jain Date: Tue, 19 May 2020 00:11:58 +0530 Subject: [PATCH 0411/1518] Improve README.md (#1363) --- README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4ffc1a5c585..6940d2cb0eb 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The grpc-gateway is a plugin of the Google protocol buffers compiler [protoc](https://github.com/protocolbuffers/protobuf). It reads protobuf service definitions and generates a reverse-proxy server which -'translates a RESTful HTTP API into gRPC. This server is generated according to the +translates a RESTful HTTP API into gRPC. This server is generated according to the [`google.api.http`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto#L46) annotations in your service definitions. @@ -28,7 +28,7 @@ gRPC is great -- it generates API clients and server stubs in many programming languages, it is fast, easy-to-use, bandwidth-efficient and its design is combat-proven by Google. However, you might still want to provide a traditional RESTful JSON API as well. Reasons can range from maintaining -backwards-compatibility, supporting languages or clients not well supported by +backward-compatibility, supporting languages or clients that are not well supported by gRPC, to simply maintaining the aesthetics and tooling involved with a RESTful JSON architecture. @@ -122,6 +122,11 @@ annotation to your .proto file + } } ``` + >You will need to provide the required third party protobuf files to the `protoc` compiler. + >They are included in this repo under the `third_party/googleapis` folder, and we recommend copying + >them into your `protoc` generation file structure. If you've structured your proto files according + >to something like [the Buf style guide](https://buf.build/docs/style-guide#files-and-packages), + >you could copy the files into a top-level `./google` folder. See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior @@ -265,12 +270,12 @@ example: ``` `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to -Golang import paths. They are compatible to -[the parameters with same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). +Golang import paths. They are compatible with +[the parameters with the same names in `protoc-gen-go`](https://github.com/golang/protobuf#parameters). In addition we also support the `request_context` parameter in order to use the `http.Request`'s Context (only for Go 1.7 and above). This parameter can be -useful to pass request scoped context between the gateway and the gRPC service. +useful to pass the request-scoped context between the gateway and the gRPC service. `protoc-gen-grpc-gateway` also supports some more command line flags to control logging. You can give these flags together with parameters above. Run @@ -304,10 +309,10 @@ gRPC-gateway, and a gRPC server, see ### Supported * Generating JSON API handlers. -* Method parameters in request body. -* Method parameters in request path. +* Method parameters in the request body. +* Method parameters in the request path. * Method parameters in query string. -* Enum fields in path parameter (including repeated enum fields). +* Enum fields in the path parameter (including repeated enum fields). * Mapping streaming APIs to newline-delimited JSON streams. * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) * Optionally emitting API definitions for From 899f1f0d2bd0cac829bf81cf9882e82d1d14f589 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 17 May 2020 20:15:14 +0100 Subject: [PATCH 0412/1518] all: replace all uses of golang/protobuf/proto We have to keep using the old ptypes, descriptor and plugin packages since rules_go forces us to use them. Eventually rules_go should move to the new API and we can purge the use of the golang/protobuf package altogether. --- examples/internal/helloworld/BUILD.bazel | 2 +- .../internal/helloworld/helloworld.pb.gw.go | 2 +- examples/internal/integration/BUILD.bazel | 4 +- examples/internal/integration/client_test.go | 2 +- .../internal/integration/integration_test.go | 536 ++++++++----- examples/internal/proto/examplepb/BUILD.bazel | 3 +- .../examplepb/a_bit_of_everything.pb.gw.go | 2 +- .../proto/examplepb/echo_service.pb.gw.go | 2 +- .../proto/examplepb/flow_combination.pb.gw.go | 2 +- .../examplepb/non_standard_names.pb.gw.go | 2 +- .../examplepb/response_body_service.pb.gw.go | 2 +- .../internal/proto/examplepb/stream.pb.gw.go | 2 +- .../unannotated_echo_service.pb.gw.go | 2 +- .../proto/examplepb/use_go_template.pb.gw.go | 2 +- .../proto/examplepb/wrappers.pb.gw.go | 2 +- .../internal/proto/standalone/BUILD.bazel | 2 +- .../unannotated_echo_service.pb.gw.go | 2 +- examples/internal/server/BUILD.bazel | 1 - .../internal/server/a_bit_of_everything.go | 57 +- internal/codegenerator/BUILD.bazel | 4 +- internal/codegenerator/parse_req.go | 8 +- internal/codegenerator/parse_req_test.go | 10 +- internal/descriptor/BUILD.bazel | 7 +- internal/descriptor/grpc_api_configuration.go | 11 +- .../descriptor/grpc_api_configuration_test.go | 15 - internal/descriptor/registry.go | 20 +- internal/descriptor/registry_test.go | 16 +- internal/descriptor/services.go | 19 +- internal/descriptor/services_test.go | 59 +- internal/descriptor/types.go | 158 ++-- internal/descriptor/types_test.go | 20 +- internal/generator/generator.go | 6 +- protoc-gen-grpc-gateway/BUILD.bazel | 2 +- .../internal/gengateway/BUILD.bazel | 4 +- .../internal/gengateway/generator.go | 12 +- .../internal/gengateway/generator_test.go | 22 +- .../internal/gengateway/template_test.go | 154 ++-- protoc-gen-grpc-gateway/main.go | 12 +- protoc-gen-swagger/BUILD.bazel | 2 +- .../internal/genswagger/BUILD.bazel | 8 +- .../internal/genswagger/generator.go | 43 +- .../internal/genswagger/template.go | 148 ++-- .../internal/genswagger/template_test.go | 751 +++++++++--------- protoc-gen-swagger/main.go | 12 +- runtime/BUILD.bazel | 7 +- runtime/convert.go | 58 +- runtime/convert_test.go | 103 +-- runtime/errors_test.go | 65 +- runtime/handler.go | 20 +- runtime/handler_test.go | 2 +- runtime/marshal_httpbodyproto.go | 4 +- runtime/marshal_httpbodyproto_test.go | 9 +- runtime/marshal_json_test.go | 14 +- runtime/marshal_jsonpb.go | 71 +- runtime/marshal_jsonpb_test.go | 316 +++++--- runtime/marshal_proto.go | 3 +- runtime/marshal_proto_test.go | 6 +- runtime/marshaler_registry.go | 11 +- runtime/mux.go | 2 +- runtime/proto2_convert.go | 2 +- runtime/query.go | 20 +- runtime/query_test.go | 42 +- 62 files changed, 1576 insertions(+), 1331 deletions(-) diff --git a/examples/internal/helloworld/BUILD.bazel b/examples/internal/helloworld/BUILD.bazel index 392944eee64..1db4735e414 100644 --- a/examples/internal/helloworld/BUILD.bazel +++ b/examples/internal/helloworld/BUILD.bazel @@ -30,10 +30,10 @@ go_library( deps = [ "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 868e0950c39..856a88a3e95 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/integration/BUILD.bazel b/examples/internal/integration/BUILD.bazel index e9e27238fc4..58525248230 100644 --- a/examples/internal/integration/BUILD.bazel +++ b/examples/internal/integration/BUILD.bazel @@ -18,13 +18,13 @@ go_test( "//examples/internal/server:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library_gen", - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", "@org_golang_google_grpc//codes:go_default_library", + "@org_golang_google_protobuf//encoding/protojson:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/examples/internal/integration/client_test.go b/examples/internal/integration/client_test.go index 2312aeec700..a4304ccd644 100644 --- a/examples/internal/integration/client_test.go +++ b/examples/internal/integration/client_test.go @@ -111,7 +111,7 @@ func testABEClientCreate(t *testing.T, cl *abe.APIClient) { want.EnumValueAnnotation.String(), ) if err != nil { - t.Errorf("cl.Create(%#v) failed with %v; want success", want, err) + t.Fatalf("cl.Create(%#v) failed with %v; want success", want, err) } if resp.Uuid == "" { t.Errorf("resp.Uuid is empty; want not empty") diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index c34062886b9..056422a1f49 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -18,20 +18,22 @@ import ( "testing" "time" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/empty" + emptypb "github.com/golang/protobuf/ptypes/empty" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - spb "google.golang.org/genproto/googleapis/rpc/status" - "google.golang.org/genproto/protobuf/field_mask" + statuspb "google.golang.org/genproto/googleapis/rpc/status" + fieldmaskpb "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" ) +var marshaler = &runtime.JSONPb{} + func TestEcho(t *testing.T) { if testing.Short() { t.Skip() @@ -101,8 +103,8 @@ func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { } var msg examplepb.SimpleMessage - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if got, want := msg.Id, "myid"; got != want { @@ -134,8 +136,8 @@ func testEchoOneof(t *testing.T, port int, apiPrefix string, contentType string) } var msg examplepb.SimpleMessage - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if got, want := msg.GetLang(), "golang"; got != want { @@ -167,8 +169,8 @@ func testEchoOneof1(t *testing.T, port int, apiPrefix string, contentType string } var msg examplepb.SimpleMessage - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if got, want := msg.GetStatus().GetNote(), "golang"; got != want { @@ -200,8 +202,8 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string } var msg examplepb.SimpleMessage - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if got, want := msg.GetNo().GetNote(), "golang"; got != want { @@ -215,14 +217,13 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string func testEchoBody(t *testing.T, port int, apiPrefix string) { sent := examplepb.SimpleMessage{Id: "example"} - var m jsonpb.Marshaler - payload, err := m.MarshalToString(&sent) + payload, err := marshaler.Marshal(&sent) if err != nil { - t.Fatalf("m.MarshalToString(%#v) failed with %v; want success", payload, err) + t.Fatalf("marshaler.Marshal(%#v) failed with %v; want success", payload, err) } apiURL := fmt.Sprintf("http://localhost:%d/%s/example/echo_body", port, apiPrefix) - resp, err := http.Post(apiURL, "", strings.NewReader(payload)) + resp, err := http.Post(apiURL, "", bytes.NewReader(payload)) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return @@ -240,8 +241,8 @@ func testEchoBody(t *testing.T, port int, apiPrefix string) { } var received examplepb.SimpleMessage - if err := jsonpb.UnmarshalString(string(buf), &received); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &received); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if diff := cmp.Diff(received, sent, protocmp.Transform()); diff != "" { @@ -325,8 +326,8 @@ func testABECreate(t *testing.T, port int) { } var msg examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if msg.Uuid == "" { @@ -410,13 +411,12 @@ func testABECreateBody(t *testing.T, port int) { }, } apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) - var m jsonpb.Marshaler - payload, err := m.MarshalToString(&want) + payload, err := marshaler.Marshal(&want) if err != nil { - t.Fatalf("m.MarshalToString(%#v) failed with %v; want success", want, err) + t.Fatalf("marshaler.Marshal(%#v) failed with %v; want success", want, err) } - resp, err := http.Post(apiURL, "application/json", strings.NewReader(payload)) + resp, err := http.Post(apiURL, "application/json", bytes.NewReader(payload)) if err != nil { t.Errorf("http.Post(%q) failed with %v; want success", apiURL, err) return @@ -434,8 +434,8 @@ func testABECreateBody(t *testing.T, port int) { } var msg examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if msg.Uuid == "" { @@ -513,9 +513,12 @@ func testABEBulkCreate(t *testing.T, port int) { Amount: 10, }, } - var m jsonpb.Marshaler - if err := m.Marshal(w, &want); err != nil { - t.Fatalf("m.Marshal(%#v, w) failed with %v; want success", want, err) + out, err := marshaler.Marshal(&want) + if err != nil { + t.Fatalf("marshaler.Marshal(%#v, w) failed with %v; want success", want, err) + } + if _, err := w.Write(out); err != nil { + t.Fatalf("w.Write() failed with %v; want success", err) } if _, err := io.WriteString(w, "\n"); err != nil { t.Errorf("w.Write(%q) failed with %v; want success", "\n", err) @@ -542,9 +545,9 @@ func testABEBulkCreate(t *testing.T, port int) { t.Logf("%s", buf) } - var msg empty.Empty - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + var msg emptypb.Empty + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } @@ -574,12 +577,17 @@ func testABEBulkCreateWithError(t *testing.T, port int) { } { time.Sleep(1 * time.Millisecond) - want := examplepb.ABitOfEverything{ + want := &examplepb.ABitOfEverything{ StringValue: fmt.Sprintf("strprefix/%s", val), } - var m jsonpb.Marshaler - if err := m.Marshal(w, &want); err != nil { - t.Fatalf("m.Marshal(%#v, w) failed with %v; want success", want, err) + out, err := marshaler.Marshal(want) + if err != nil { + t.Errorf("marshaler.Marshal(%#v, w) failed with %v; want success", want, err) + return + } + if _, err := w.Write(out); err != nil { + t.Errorf("w.Write() failed with %v; want success", err) + return } if _, err := io.WriteString(w, "\n"); err != nil { t.Errorf("w.Write(%q) failed with %v; want success", "\n", err) @@ -613,9 +621,9 @@ func testABEBulkCreateWithError(t *testing.T, port int) { t.Logf("%s", buf) } - var msg spb.Status - if err := json.Unmarshal(buf, &msg); err != nil { - t.Fatalf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) + var msg statuspb.Status + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Fatalf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) } } @@ -641,8 +649,8 @@ func testABELookup(t *testing.T, port int) { } var want examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &want); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &want) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &want); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &want) failed with %v; want success", buf, err) return } @@ -661,8 +669,8 @@ func testABELookup(t *testing.T, port int) { } var msg examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { @@ -687,7 +695,7 @@ func TestABEPatch(t *testing.T) { port := 8088 // create a record with a known string_value and int32_value - uuid := postABE(t, port, examplepb.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) + uuid := postABE(t, port, &examplepb.ABitOfEverything{StringValue: "strprefix/bar", Int32Value: 32}) // issue PATCH request, only updating string_value req, err := http.NewRequest( @@ -711,11 +719,11 @@ func TestABEPatch(t *testing.T) { } // issue GET request, verifying that string_value is changed and int32_value is not - getRespBody := getABE(t, port, uuid) - if got, want := getRespBody.StringValue, "strprefix/foo"; got != want { + getRestatuspbody := getABE(t, port, uuid) + if got, want := getRestatuspbody.StringValue, "strprefix/foo"; got != want { t.Errorf("string_value= %q; want %q", got, want) } - if got, want := getRespBody.Int32Value, int32(32); got != want { + if got, want := getRestatuspbody.Int32Value, int32(32); got != want { t.Errorf("int_32_value= %d; want %d", got, want) } } @@ -732,59 +740,89 @@ func TestABEPatchBody(t *testing.T) { for _, tc := range []struct { name string - originalValue examplepb.ABitOfEverything - input examplepb.UpdateV2Request - want examplepb.ABitOfEverything + originalValue *examplepb.ABitOfEverything + input *examplepb.UpdateV2Request + want *examplepb.ABitOfEverything }{ { name: "with fieldmask provided", - originalValue: examplepb.ABitOfEverything{ - Int32Value: 42, - StringValue: "rabbit", - SingleNested: &examplepb.ABitOfEverything_Nested{Name: "some value that will get overwritten", Amount: 345}, + originalValue: &examplepb.ABitOfEverything{ + Int32Value: 42, + StringValue: "rabbit", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "some value that will get overwritten", + Amount: 345, + }, }, - input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ - StringValue: "some value that won't get updated because it's not in the field mask", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, - }, UpdateMask: &field_mask.FieldMask{Paths: []string{"single_nested"}}}, - want: examplepb.ABitOfEverything{ - Int32Value: 42, - StringValue: "rabbit", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, + input: &examplepb.UpdateV2Request{ + Abe: &examplepb.ABitOfEverything{ + StringValue: "some value that won't get updated because it's not in the field mask", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 456, + }, + }, + UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{"single_nested"}}, + }, + want: &examplepb.ABitOfEverything{ + Int32Value: 42, + StringValue: "rabbit", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 456, + }, }, }, { // N.B. This case passes the empty field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with empty fieldmask", - originalValue: examplepb.ABitOfEverything{ - Int32Value: 42, - StringValue: "some value that will get overwritten", - SingleNested: &examplepb.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 345}, + originalValue: &examplepb.ABitOfEverything{ + Int32Value: 42, + StringValue: "some value that will get overwritten", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "value that will get empty", + Amount: 345, + }, }, - input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ - StringValue: "some updated value because the fieldMask is nil", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, - }, UpdateMask: &field_mask.FieldMask{}}, - want: examplepb.ABitOfEverything{ - StringValue: "some updated value because the fieldMask is nil", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 456}, + input: &examplepb.UpdateV2Request{ + Abe: &examplepb.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 456, + }, + }, + UpdateMask: &fieldmaskpb.FieldMask{}, + }, + want: &examplepb.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 456, + }, }, }, { // N.B. This case passes the nil field mask to the UpdateV2 method so falls back to PUT semantics as per the implementation. name: "with nil fieldmask", - originalValue: examplepb.ABitOfEverything{ - Int32Value: 42, - StringValue: "some value that will get overwritten", - SingleNested: &examplepb.ABitOfEverything_Nested{Name: "value that will get empty", Amount: 123}, + originalValue: &examplepb.ABitOfEverything{ + Int32Value: 42, + StringValue: "some value that will get overwritten", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "value that will get empty", + Amount: 123, + }, }, - input: examplepb.UpdateV2Request{Abe: &examplepb.ABitOfEverything{ - StringValue: "some updated value because the fieldMask is nil", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 657}, - }, UpdateMask: nil}, - want: examplepb.ABitOfEverything{ - StringValue: "some updated value because the fieldMask is nil", - SingleNested: &examplepb.ABitOfEverything_Nested{Amount: 657}, + input: &examplepb.UpdateV2Request{ + Abe: &examplepb.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 657, + }, + }, + UpdateMask: nil, + }, + want: &examplepb.ABitOfEverything{ + StringValue: "some updated value because the fieldMask is nil", + SingleNested: &examplepb.ABitOfEverything_Nested{ + Amount: 657, + }, }, }, } { @@ -825,7 +863,7 @@ func TestABEPatchBody(t *testing.T) { // mustMarshal marshals the given object into a json string, calling t.Fatal if an error occurs. Useful in testing to // inline marshalling whenever you don't expect the marshalling to return an error func mustMarshal(t *testing.T, i interface{}) string { - b, err := json.Marshal(i) + b, err := marshaler.Marshal(i) if err != nil { t.Fatalf("failed to marshal %#v: %v", i, err) } @@ -834,7 +872,7 @@ func mustMarshal(t *testing.T, i interface{}) string { } // postABE conveniently creates a new ABE record for ease in testing -func postABE(t *testing.T, port int, abe examplepb.ABitOfEverything) (uuid string) { +func postABE(t *testing.T, port int, abe *examplepb.ABitOfEverything) (uuid string) { apiURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything", port) postResp, err := http.Post(apiURL, "application/json", strings.NewReader(mustMarshal(t, abe))) if err != nil { @@ -848,7 +886,7 @@ func postABE(t *testing.T, port int, abe examplepb.ABitOfEverything) (uuid strin var f struct { UUID string `json:"uuid"` } - if err := json.Unmarshal(body, &f); err != nil { + if err := marshaler.Unmarshal(body, &f); err != nil { t.Fatalf("postResp body couldn't be unmarshalled: %v. body: %s", err, string(body)) } if f.UUID == "" { @@ -858,7 +896,7 @@ func postABE(t *testing.T, port int, abe examplepb.ABitOfEverything) (uuid strin } // getABE conveniently fetches an ABE record for ease in testing -func getABE(t *testing.T, port int, uuid string) examplepb.ABitOfEverything { +func getABE(t *testing.T, port int, uuid string) *examplepb.ABitOfEverything { gURL := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%s", port, uuid) getResp, err := http.Get(gURL) if err != nil { @@ -869,16 +907,16 @@ func getABE(t *testing.T, port int, uuid string) examplepb.ABitOfEverything { if got, want := getResp.StatusCode, http.StatusOK; got != want { t.Fatalf("getResp.StatusCode= %d, want %d. resp: %v", got, want, getResp) } - var getRespBody examplepb.ABitOfEverything + var getRestatuspbody examplepb.ABitOfEverything body, err := ioutil.ReadAll(getResp.Body) if err != nil { t.Fatalf("getResp body couldn't be read: %v", err) } - if err := json.Unmarshal(body, &getRespBody); err != nil { + if err := marshaler.Unmarshal(body, &getRestatuspbody); err != nil { t.Fatalf("getResp body couldn't be unmarshalled: %v body: %s", err, string(body)) } - return getRespBody + return &getRestatuspbody } func testABELookupNotFound(t *testing.T, port int) { @@ -904,9 +942,9 @@ func testABELookupNotFound(t *testing.T, port int) { return } - var msg spb.Status - if err := json.Unmarshal(buf, &msg); err != nil { - t.Errorf("json.Unmarshal(%s, &msg) failed with %v; want success", buf, err) + var msg statuspb.Status + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } @@ -940,7 +978,7 @@ func testABEList(t *testing.T, port int) { } defer resp.Body.Close() - dec := json.NewDecoder(resp.Body) + dec := marshaler.NewDecoder(resp.Body) var i int for i = 0; ; i++ { var item struct { @@ -959,8 +997,8 @@ func testABEList(t *testing.T, port int) { continue } var msg examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(item.Result), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", item.Result, err) + if err := marshaler.Unmarshal(item.Result, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", item.Result, err) } } if i <= 0 { @@ -1015,16 +1053,16 @@ func testABEBulkEcho(t *testing.T, port int) { go func() { defer wg.Done() defer reqw.Close() - var m jsonpb.Marshaler for i := 0; i < 1000; i++ { - msg := sub.StringMessage{Value: proto.String(fmt.Sprintf("message %d", i))} - buf, err := m.MarshalToString(&msg) + s := fmt.Sprintf("message %d", i) + msg := sub.StringMessage{Value: &s} + buf, err := marshaler.Marshal(&msg) if err != nil { - t.Errorf("m.Marshal(%v) failed with %v; want success", &msg, err) + t.Errorf("marshaler.Marshal(%v) failed with %v; want success", &msg, err) return } - if _, err := fmt.Fprintln(reqw, buf); err != nil { - t.Errorf("fmt.Fprintln(reqw, %q) failed with %v; want success", buf, err) + if _, err = reqw.Write(buf); err != nil { + t.Errorf("reqw.Write(%q) failed with %v; want success", string(buf), err) return } want = append(want, &msg) @@ -1054,7 +1092,7 @@ func testABEBulkEcho(t *testing.T, port int) { go func() { defer wg.Done() - dec := json.NewDecoder(resp.Body) + dec := marshaler.NewDecoder(resp.Body) for i := 0; ; i++ { var item struct { Result json.RawMessage `json:"result"` @@ -1072,8 +1110,8 @@ func testABEBulkEcho(t *testing.T, port int) { continue } var msg sub.StringMessage - if err := jsonpb.UnmarshalString(string(item.Result), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%q, &msg) failed with %v; want success", item.Result, err) + if err := marshaler.Unmarshal(item.Result, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%q, &msg) failed with %v; want success", item.Result, err) } got = append(got, &msg) } @@ -1104,7 +1142,7 @@ func testABEBulkEchoZeroLength(t *testing.T, port int) { t.Errorf("resp.StatusCode = %d; want %d", got, want) } - dec := json.NewDecoder(resp.Body) + dec := marshaler.NewDecoder(resp.Body) var item struct { Result json.RawMessage `json:"result"` Error map[string]interface{} `json:"error"` @@ -1178,8 +1216,8 @@ func testAdditionalBindings(t *testing.T, port int) { } var msg sub.StringMessage - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success; %d", buf, err, i) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success; %d", buf, err, i) return } if got, want := msg.GetValue(), "hello"; got != want { @@ -1298,8 +1336,8 @@ func testABERepeated(t *testing.T, port int) { } var msg examplepb.ABitOfEverythingRepeated - if err := jsonpb.UnmarshalString(string(buf), &msg); err != nil { - t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) + if err := marshaler.Unmarshal(buf, &msg); err != nil { + t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { @@ -1552,8 +1590,19 @@ func testResponseBodies(t *testing.T, port int) { t.Logf("%s", buf) } - if got, want := string(buf), `[{"data":"foo"}]`; got != want { - t.Errorf("response = %q; want %q", got, want) + var got []*examplepb.ResponseBodyOut_Response + err = marshaler.Unmarshal(buf, &got) + if err != nil { + t.Errorf("marshaler.Unmarshal failed with %v; want success", err) + return + } + want := []*examplepb.ResponseBodyOut_Response{ + { + Data: "foo", + }, + } + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } @@ -1565,7 +1614,11 @@ func testResponseStrings(t *testing.T, port int) { // Run Secondary server with different marshalling ch := make(chan error) go func() { - if err := runGateway(ctx, fmt.Sprintf(":%d", port), runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{EnumsAsInts: false, EmitDefaults: true})); err != nil { + err := runGateway( + ctx, + fmt.Sprintf(":%d", port), + ) + if err != nil { ch <- fmt.Errorf("cannot run gateway service: %v", err) } }() @@ -1574,51 +1627,102 @@ func testResponseStrings(t *testing.T, port int) { t.Fatalf("waitForGateway(ctx, %d) failed with %v; want success", port, err) } - for i, spec := range []struct { - endpoint string - expectedCode int - expectedBody string - }{ - { - endpoint: fmt.Sprintf("http://localhost:%d/responsestrings/foo", port), - expectedCode: http.StatusOK, - expectedBody: `["hello","foo"]`, - }, - { - endpoint: fmt.Sprintf("http://localhost:%d/responsestrings/empty", port), - expectedCode: http.StatusOK, - expectedBody: `[]`, - }, - { - endpoint: fmt.Sprintf("http://localhost:%d/responsebodies/foo", port), - expectedCode: http.StatusOK, - expectedBody: `[{"data":"foo","type":"UNKNOWN"}]`, - }, - } { - t.Run(strconv.Itoa(i), func(t *testing.T) { - apiURL := spec.endpoint - resp, err := http.Get(apiURL) - if err != nil { - t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) - return - } - defer resp.Body.Close() - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) - return - } + t.Run("Response strings", func(t *testing.T) { + apiURL := fmt.Sprintf("http://localhost:%d/responsestrings/foo", port) + resp, err := http.Get(apiURL) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } - if got, want := resp.StatusCode, spec.expectedCode; got != want { - t.Errorf("resp.StatusCode = %d; want %d", got, want) - t.Logf("%s", buf) - } + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } - if got, want := string(buf), spec.expectedBody; got != want { - t.Errorf("response = %q; want %q", got, want) - } - }) - } + var got []string + err = marshaler.Unmarshal(buf, &got) + if err != nil { + t.Errorf("marshaler.Unmarshal failed with %v; want success", err) + return + } + want := []string{"hello", "foo"} + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf(diff) + } + }) + + t.Run("Empty response strings", func(t *testing.T) { + apiURL := fmt.Sprintf("http://localhost:%d/responsestrings/empty", port) + resp, err := http.Get(apiURL) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + var got []string + err = marshaler.Unmarshal(buf, &got) + if err != nil { + t.Errorf("marshaler.Unmarshal failed with %v; want success", err) + return + } + var want []string + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf(diff) + } + }) + + t.Run("Response bodies", func(t *testing.T) { + apiURL := fmt.Sprintf("http://localhost:%d/responsebodies/foo", port) + resp, err := http.Get(apiURL) + if err != nil { + t.Errorf("http.Get(%q) failed with %v; want success", apiURL, err) + return + } + defer resp.Body.Close() + buf, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Errorf("ioutil.ReadAll(resp.Body) failed with %v; want success", err) + return + } + + if got, want := resp.StatusCode, http.StatusOK; got != want { + t.Errorf("resp.StatusCode = %d; want %d", got, want) + t.Logf("%s", buf) + } + + var got []*examplepb.ResponseBodyOut_Response + err = marshaler.Unmarshal(buf, &got) + if err != nil { + t.Errorf("marshaler.Unmarshal failed with %v; want success", err) + return + } + want := []*examplepb.ResponseBodyOut_Response{ + { + Data: "foo", + }, + } + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) + } + }) } @@ -1646,7 +1750,7 @@ func testRequestQueryParams(t *testing.T, port int) { httpMethod string contentType string apiURL string - wantContent string + wantContent *examplepb.ABitOfEverything requestContent io.Reader }{ { @@ -1654,30 +1758,56 @@ func testRequestQueryParams(t *testing.T, port int) { httpMethod: "GET", contentType: "application/json", apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), - wantContent: `{"single_nested":{"name":"foo"},"double_value":1234.56,"bool_value":true}`, + wantContent: &examplepb.ABitOfEverything{ + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "foo", + }, + DoubleValue: 1234.56, + BoolValue: true, + }, }, { name: "get nested enum url parameter", httpMethod: "GET", contentType: "application/json", // If nested_enum.OK were FALSE, the content of single_nested would be {} due to how 0 values are serialized - apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/nested_enum/TRUE", port), - wantContent: `{"single_nested":{"ok":"TRUE"}}`, + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/nested_enum/TRUE", port), + wantContent: &examplepb.ABitOfEverything{ + SingleNested: &examplepb.ABitOfEverything_Nested{ + Ok: examplepb.ABitOfEverything_Nested_TRUE, + }, + }, }, { - name: "post url query values", - httpMethod: "POST", - contentType: "application/json", - apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/post/hello-world?double_value=%v&bool_value=%v", port, 1234.56, true), - wantContent: `{"single_nested":{"name":"foo","amount":100},"double_value":1234.56,"bool_value":true,"string_value":"hello-world"}`, + name: "post url query values", + httpMethod: "POST", + contentType: "application/json", + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/post/hello-world?double_value=%v&bool_value=%v", port, 1234.56, true), + wantContent: &examplepb.ABitOfEverything{ + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "foo", + Amount: 100, + }, + DoubleValue: 1234.56, + BoolValue: true, + StringValue: "hello-world", + }, requestContent: strings.NewReader(`{"name":"foo","amount":100}`), }, { - name: "post form and url query values", - httpMethod: "POST", - contentType: "application/x-www-form-urlencoded", - apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), - wantContent: `{"single_nested":{"name":"foo"},"double_value":1234.56,"bool_value":true,"string_value":"hello-world","repeated_string_value":["demo1","demo2"]}`, + name: "post form and url query values", + httpMethod: "POST", + contentType: "application/x-www-form-urlencoded", + apiURL: fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/params/get/foo?double_value=%v&bool_value=%v", port, 1234.56, true), + wantContent: &examplepb.ABitOfEverything{ + SingleNested: &examplepb.ABitOfEverything_Nested{ + Name: "foo", + }, + DoubleValue: 1234.56, + BoolValue: true, + StringValue: "hello-world", + RepeatedStringValue: []string{"demo1", "demo2"}, + }, requestContent: strings.NewReader(formValues.Encode()), }, } @@ -1710,9 +1840,14 @@ func testRequestQueryParams(t *testing.T, port int) { t.Logf("%s", buf) } - gotContent := string(buf) - if gotContent != tc.wantContent { - t.Errorf("http.method (%q) http.url (%q) response = %q; want %q", tc.httpMethod, tc.apiURL, gotContent, tc.wantContent) + var got examplepb.ABitOfEverything + err = marshaler.Unmarshal(buf, &got) + if err != nil { + t.Errorf("marshaler.Unmarshal(buf, got) failed with %v; want success", err) + return + } + if diff := cmp.Diff(got, tc.wantContent, protocmp.Transform()); diff != "" { + t.Errorf("http.method (%q) http.url (%q)\n%s", tc.httpMethod, tc.apiURL, diff) } }) } @@ -1729,21 +1864,29 @@ func TestNonStandardNames(t *testing.T) { defer cancel() go func() { - if err := runGateway( + marshaler := &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + UseEnumNumbers: false, + EmitUnpopulated: true, + UseProtoNames: true, + }, + } + err := runGateway( ctx, ":8081", - runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}), - ); err != nil { + runtime.WithMarshalerOption(runtime.MIMEWildcard, marshaler), + ) + if err != nil { t.Errorf("runGateway() failed with %v; want success", err) return } }() go func() { - if err := runGateway( + err := runGateway( ctx, ":8082", - runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: false, EmitDefaults: true}), - ); err != nil { + ) + if err != nil { t.Errorf("runGateway() failed with %v; want success", err) return } @@ -1772,20 +1915,20 @@ func TestNonStandardNames(t *testing.T) { "Test update method using json_names in message", 8081, "update_with_json_names", - // N.B. json_names have no effect if not using OrigName: false + // N.B. json_names have no effect if not using UseProtoNames: false `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, }, { - "Test standard update method with OrigName: false marshaller option", + "Test standard update method with UseProtoNames: false marshaller option", 8082, "update", `{"id":"foo","Num":"1","lineNum":"42","langIdent":"English","STATUS":"good","enGB":"1","no":"yes","thing":{"subThing":{"subValue":"hi"}}}`, }, { - "Test update method using json_names in message with OrigName: false marshaller option", + "Test update method using json_names in message with UseProtoNames: false marshaller option", 8082, "update_with_json_names", - `{"ID":"foo","Num":"1","LineNum":"42","langIdent":"English","status":"good","En_GB":"1","yes":"no","Thingy":{"SubThing":{"sub_Value":"hi"}}}`, + `{"ID":"foo","Num":"1","LineNum":"42","langIdent":"English","status":"good","En_GB":"1","yes":"yes","Thingy":{"SubThing":{"sub_Value":"hi"}}}`, }, } { t.Run(tc.name, func(t *testing.T) { @@ -1817,7 +1960,26 @@ func testNonStandardNames(t *testing.T, port int, method string, jsonBody string t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) } - if got, want := string(body), jsonBody; got != want { - t.Errorf("got %q; want %q", got, want) + var got examplepb.NonStandardMessage + err = marshaler.Unmarshal(body, &got) + if err != nil { + t.Errorf("marshler.Unmarshal failed: %v", err) + } + want := &examplepb.NonStandardMessage{ + Id: "foo", + Num: 1, + LineNum: 42, + LangIdent: "English", + STATUS: "good", + En_GB: 1, + No: "yes", + Thing: &examplepb.NonStandardMessage_Thing{ + SubThing: &examplepb.NonStandardMessage_Thing_SubThing{ + SubValue: "hi", + }, + }, + } + if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { + t.Errorf(diff) } } diff --git a/examples/internal/proto/examplepb/BUILD.bazel b/examples/internal/proto/examplepb/BUILD.bazel index af7c9b5563d..d00c5a6b00b 100644 --- a/examples/internal/proto/examplepb/BUILD.bazel +++ b/examples/internal/proto/examplepb/BUILD.bazel @@ -69,6 +69,7 @@ go_proto_library( "@com_github_golang_protobuf//descriptor:go_default_library_gen", # keep "@go_googleapis//google/api:annotations_go_proto", "@go_googleapis//google/api:httpbody_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", # keep ], ) @@ -80,11 +81,11 @@ go_library( deps = [ "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index b06f5ca1436..5ae6bf8d50f 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/pathenum" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" @@ -24,6 +23,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 1d6c0d60b73..2daf2758222 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 02d57599993..60990f4eb13 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index 3ce536fcd1d..c8448db166d 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 3b0cc5b5865..67dfcc17bbd 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index 92508fd4079..a3199f8381e 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" @@ -22,6 +21,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index be8578ed017..a2bb5c2dbcf 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 8995be6c988..985d3dee723 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -13,13 +13,13 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 21d3ad6f54c..3401420c968 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" @@ -22,6 +21,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/proto/standalone/BUILD.bazel b/examples/internal/proto/standalone/BUILD.bazel index ec276799864..1c51d056d96 100644 --- a/examples/internal/proto/standalone/BUILD.bazel +++ b/examples/internal/proto/standalone/BUILD.bazel @@ -9,10 +9,10 @@ go_library( "//examples/internal/proto/examplepb:go_default_library", "//internal/utilities:go_default_library", "//runtime:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index 32e255495dd..afcd2be1732 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/proto" extExamplepb "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -21,6 +20,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // Suppress "imported and not used" errors diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index 89c23e9ee5f..d86eceb7ca6 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -23,7 +23,6 @@ go_library( "//internal/casing:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_rogpeppe_fastuuid//:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", diff --git a/examples/internal/server/a_bit_of_everything.go b/examples/internal/server/a_bit_of_everything.go index 3c74901a5e4..248d64801b8 100644 --- a/examples/internal/server/a_bit_of_everything.go +++ b/examples/internal/server/a_bit_of_everything.go @@ -8,10 +8,9 @@ import ( "time" "github.com/golang/glog" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/duration" - "github.com/golang/protobuf/ptypes/empty" - "github.com/golang/protobuf/ptypes/wrappers" + durationpb "github.com/golang/protobuf/ptypes/duration" + emptypb "github.com/golang/protobuf/ptypes/empty" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub" "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/sub2" @@ -102,7 +101,7 @@ func (s *_ABitOfEverythingServer) BulkCreate(stream examples.StreamService_BulkC "foo": "foo2", "bar": "bar2", })) - return stream.SendAndClose(new(empty.Empty)) + return stream.SendAndClose(new(emptypb.Empty)) } func (s *_ABitOfEverythingServer) Lookup(ctx context.Context, msg *sub2.IdMessage) (*examples.ABitOfEverything, error) { @@ -128,7 +127,7 @@ func (s *_ABitOfEverythingServer) Lookup(ctx context.Context, msg *sub2.IdMessag return nil, status.Errorf(codes.NotFound, "not found") } -func (s *_ABitOfEverythingServer) List(_ *empty.Empty, stream examples.StreamService_ListServer) error { +func (s *_ABitOfEverythingServer) List(_ *emptypb.Empty, stream examples.StreamService_ListServer) error { s.m.Lock() defer s.m.Unlock() @@ -158,7 +157,7 @@ func (s *_ABitOfEverythingServer) List(_ *empty.Empty, stream examples.StreamSer return nil } -func (s *_ABitOfEverythingServer) Download(_ *empty.Empty, stream examples.StreamService_DownloadServer) error { +func (s *_ABitOfEverythingServer) Download(_ *emptypb.Empty, stream examples.StreamService_DownloadServer) error { msgs := []*httpbody.HttpBody{{ ContentType: "text/html", Data: []byte("Hello 1"), @@ -178,7 +177,7 @@ func (s *_ABitOfEverythingServer) Download(_ *empty.Empty, stream examples.Strea return nil } -func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { s.m.Lock() defer s.m.Unlock() @@ -188,10 +187,10 @@ func (s *_ABitOfEverythingServer) Update(ctx context.Context, msg *examples.ABit } else { return nil, status.Errorf(codes.NotFound, "not found") } - return new(empty.Empty), nil + return new(emptypb.Empty), nil } -func (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.UpdateV2Request) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.UpdateV2Request) (*emptypb.Empty, error) { glog.Info(msg) // If there is no update mask do a regular update if msg.UpdateMask == nil || len(msg.UpdateMask.GetPaths()) == 0 { @@ -205,10 +204,10 @@ func (s *_ABitOfEverythingServer) UpdateV2(ctx context.Context, msg *examples.Up } else { return nil, status.Errorf(codes.NotFound, "not found") } - return new(empty.Empty), nil + return new(emptypb.Empty), nil } -func (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessage) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessage) (*emptypb.Empty, error) { s.m.Lock() defer s.m.Unlock() @@ -218,10 +217,10 @@ func (s *_ABitOfEverythingServer) Delete(ctx context.Context, msg *sub2.IdMessag } else { return nil, status.Errorf(codes.NotFound, "not found") } - return new(empty.Empty), nil + return new(emptypb.Empty), nil } -func (s *_ABitOfEverythingServer) GetQuery(ctx context.Context, msg *examples.ABitOfEverything) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) GetQuery(ctx context.Context, msg *examples.ABitOfEverything) (*emptypb.Empty, error) { s.m.Lock() defer s.m.Unlock() @@ -231,7 +230,7 @@ func (s *_ABitOfEverythingServer) GetQuery(ctx context.Context, msg *examples.AB } else { return nil, status.Errorf(codes.NotFound, "not found") } - return new(empty.Empty), nil + return new(emptypb.Empty), nil } func (s *_ABitOfEverythingServer) GetRepeatedQuery(ctx context.Context, msg *examples.ABitOfEverythingRepeated) (*examples.ABitOfEverythingRepeated, error) { @@ -293,37 +292,35 @@ func (s *_ABitOfEverythingServer) DeepPathEcho(ctx context.Context, msg *example return msg, nil } -func (s *_ABitOfEverythingServer) NoBindings(ctx context.Context, msg *duration.Duration) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) NoBindings(ctx context.Context, msg *durationpb.Duration) (*emptypb.Empty, error) { return nil, nil } -func (s *_ABitOfEverythingServer) Timeout(ctx context.Context, msg *empty.Empty) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) Timeout(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) { select { case <-ctx.Done(): return nil, ctx.Err() } } -func (s *_ABitOfEverythingServer) ErrorWithDetails(ctx context.Context, msg *empty.Empty) (*empty.Empty, error) { +func (s *_ABitOfEverythingServer) ErrorWithDetails(ctx context.Context, msg *emptypb.Empty) (*emptypb.Empty, error) { stat, err := status.New(codes.Unknown, "with details"). - WithDetails(proto.Message( - &errdetails.DebugInfo{ - StackEntries: []string{"foo:1"}, - Detail: "error debug details", - }, - )) + WithDetails(&errdetails.DebugInfo{ + StackEntries: []string{"foo:1"}, + Detail: "error debug details", + }) if err != nil { return nil, status.Errorf(codes.Internal, "unexpected error adding details: %s", err) } return nil, stat.Err() } -func (s *_ABitOfEverythingServer) GetMessageWithBody(ctx context.Context, msg *examples.MessageWithBody) (*empty.Empty, error) { - return &empty.Empty{}, nil +func (s *_ABitOfEverythingServer) GetMessageWithBody(ctx context.Context, msg *examples.MessageWithBody) (*emptypb.Empty, error) { + return &emptypb.Empty{}, nil } -func (s *_ABitOfEverythingServer) PostWithEmptyBody(ctx context.Context, msg *examples.Body) (*empty.Empty, error) { - return &empty.Empty{}, nil +func (s *_ABitOfEverythingServer) PostWithEmptyBody(ctx context.Context, msg *examples.Body) (*emptypb.Empty, error) { + return &emptypb.Empty{}, nil } func (s *_ABitOfEverythingServer) CheckGetQueryParams(ctx context.Context, msg *examples.ABitOfEverything) (*examples.ABitOfEverything, error) { @@ -338,6 +335,6 @@ func (s *_ABitOfEverythingServer) CheckPostQueryParams(ctx context.Context, msg return msg, nil } -func (s *_ABitOfEverythingServer) OverwriteResponseContentType(ctx context.Context, msg *empty.Empty) (*wrappers.StringValue, error) { - return &wrappers.StringValue{}, nil +func (s *_ABitOfEverythingServer) OverwriteResponseContentType(ctx context.Context, msg *emptypb.Empty) (*wrapperspb.StringValue, error) { + return &wrapperspb.StringValue{}, nil } diff --git a/internal/codegenerator/BUILD.bazel b/internal/codegenerator/BUILD.bazel index 9d0aa3741f1..a87434f4a5d 100644 --- a/internal/codegenerator/BUILD.bazel +++ b/internal/codegenerator/BUILD.bazel @@ -10,8 +10,8 @@ go_library( ], importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator", deps = [ - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) @@ -20,9 +20,9 @@ go_test( srcs = ["parse_req_test.go"], embed = [":go_default_library"], deps = [ - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_google_go_cmp//cmp:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], ) diff --git a/internal/codegenerator/parse_req.go b/internal/codegenerator/parse_req.go index e74575bddcd..dd489f005a2 100644 --- a/internal/codegenerator/parse_req.go +++ b/internal/codegenerator/parse_req.go @@ -5,17 +5,17 @@ import ( "io" "io/ioutil" - "github.com/golang/protobuf/proto" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" + "google.golang.org/protobuf/proto" ) // ParseRequest parses a code generator request from a proto Message. -func ParseRequest(r io.Reader) (*plugin.CodeGeneratorRequest, error) { +func ParseRequest(r io.Reader) (*pluginpb.CodeGeneratorRequest, error) { input, err := ioutil.ReadAll(r) if err != nil { return nil, fmt.Errorf("failed to read code generator request: %v", err) } - req := new(plugin.CodeGeneratorRequest) + req := new(pluginpb.CodeGeneratorRequest) if err = proto.Unmarshal(input, req); err != nil { return nil, fmt.Errorf("failed to unmarshal code generator request: %v", err) } diff --git a/internal/codegenerator/parse_req_test.go b/internal/codegenerator/parse_req_test.go index c2eb9e757ed..8decf50aaca 100644 --- a/internal/codegenerator/parse_req_test.go +++ b/internal/codegenerator/parse_req_test.go @@ -8,23 +8,23 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" + "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" ) var parseReqTests = []struct { name string in io.Reader - out *plugin.CodeGeneratorRequest + out *pluginpb.CodeGeneratorRequest err error }{ { "Empty input should produce empty output", - mustGetReader(&plugin.CodeGeneratorRequest{}), - &plugin.CodeGeneratorRequest{}, + mustGetReader(&pluginpb.CodeGeneratorRequest{}), + &pluginpb.CodeGeneratorRequest{}, nil, }, { diff --git a/internal/descriptor/BUILD.bazel b/internal/descriptor/BUILD.bazel index 326847be68a..3e74322d63a 100644 --- a/internal/descriptor/BUILD.bazel +++ b/internal/descriptor/BUILD.bazel @@ -17,11 +17,11 @@ go_library( "//internal/httprule:go_default_library", "@com_github_ghodss_yaml//:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library_gen", - "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/api:annotations_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@org_golang_google_protobuf//encoding/protojson:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) @@ -37,8 +37,9 @@ go_test( embed = [":go_default_library"], deps = [ "//internal/httprule:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@org_golang_google_protobuf//encoding/prototext:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/internal/descriptor/grpc_api_configuration.go b/internal/descriptor/grpc_api_configuration.go index cb112fa5ed3..c3a5ea8003a 100644 --- a/internal/descriptor/grpc_api_configuration.go +++ b/internal/descriptor/grpc_api_configuration.go @@ -1,14 +1,13 @@ package descriptor import ( - "bytes" "fmt" "io/ioutil" "strings" "github.com/ghodss/yaml" - "github.com/golang/protobuf/jsonpb" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor/apiconfig" + "google.golang.org/protobuf/encoding/protojson" ) func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName string) (*apiconfig.GrpcAPIService, error) { @@ -17,13 +16,13 @@ func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName strin return nil, fmt.Errorf("Failed to convert gRPC API Configuration from YAML in '%v' to JSON: %v", yamlSourceLogName, err) } - // As our GrpcAPIService is incomplete accept unkown fields. - unmarshaler := jsonpb.Unmarshaler{ - AllowUnknownFields: true, + // As our GrpcAPIService is incomplete, accept unknown fields. + unmarshaler := protojson.UnmarshalOptions{ + DiscardUnknown: true, } serviceConfiguration := apiconfig.GrpcAPIService{} - if err := unmarshaler.Unmarshal(bytes.NewReader(jsonContents), &serviceConfiguration); err != nil { + if err := unmarshaler.Unmarshal(jsonContents, &serviceConfiguration); err != nil { return nil, fmt.Errorf("Failed to parse gRPC API Configuration from YAML in '%v': %v", yamlSourceLogName, err) } diff --git a/internal/descriptor/grpc_api_configuration_test.go b/internal/descriptor/grpc_api_configuration_test.go index 28448a180c6..e6ac3d10aa3 100644 --- a/internal/descriptor/grpc_api_configuration_test.go +++ b/internal/descriptor/grpc_api_configuration_test.go @@ -5,21 +5,6 @@ import ( "testing" ) -func TestLoadGrpcAPIServiceFromYAMLEmpty(t *testing.T) { - service, err := loadGrpcAPIServiceFromYAML([]byte(``), "empty") - if err != nil { - t.Fatal(err) - } - - if service == nil { - t.Fatal("No service returned") - } - - if service.Http != nil { - t.Fatal("HTTP not empty") - } -} - func TestLoadGrpcAPIServiceFromYAMLInvalidType(t *testing.T) { // Ideally this would fail but for now this test documents that it doesn't service, err := loadGrpcAPIServiceFromYAML([]byte(`type: not.the.right.type`), "invalidtype") diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index 3b343ea8ca2..dcc2db92045 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -7,12 +7,12 @@ import ( "strings" "github.com/golang/glog" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" "google.golang.org/genproto/googleapis/api/annotations" ) -// Registry is a registry of information extracted from plugin.CodeGeneratorRequest. +// Registry is a registry of information extracted from pluginpb.CodeGeneratorRequest. type Registry struct { // msgs is a mapping from fully-qualified message name to descriptor msgs map[string]*Message @@ -112,7 +112,7 @@ func NewRegistry() *Registry { } // Load loads definitions of services, methods, messages, enumerations and fields from "req". -func (r *Registry) Load(req *plugin.CodeGeneratorRequest) error { +func (r *Registry) Load(req *pluginpb.CodeGeneratorRequest) error { for _, file := range req.GetProtoFile() { r.loadFile(file) } @@ -142,7 +142,7 @@ func (r *Registry) Load(req *plugin.CodeGeneratorRequest) error { // loadFile loads messages, enumerations and fields from "file". // It does not loads services and methods in "file". You need to call // loadServices after loadFiles is called for all files to load services and methods. -func (r *Registry) loadFile(file *descriptor.FileDescriptorProto) { +func (r *Registry) loadFile(file *descriptorpb.FileDescriptorProto) { pkg := GoPackage{ Path: r.goPackagePath(file), Name: r.defaultGoPackageName(file), @@ -170,7 +170,7 @@ func (r *Registry) loadFile(file *descriptor.FileDescriptorProto) { r.registerEnum(f, nil, file.GetEnumType()) } -func (r *Registry) registerMsg(file *File, outerPath []string, msgs []*descriptor.DescriptorProto) { +func (r *Registry) registerMsg(file *File, outerPath []string, msgs []*descriptorpb.DescriptorProto) { for i, md := range msgs { m := &Message{ File: file, @@ -198,7 +198,7 @@ func (r *Registry) registerMsg(file *File, outerPath []string, msgs []*descripto } } -func (r *Registry) registerEnum(file *File, outerPath []string, enums []*descriptor.EnumDescriptorProto) { +func (r *Registry) registerEnum(file *File, outerPath []string, enums []*descriptorpb.EnumDescriptorProto) { for i, ed := range enums { e := &Enum{ File: file, @@ -347,7 +347,7 @@ func (r *Registry) ReserveGoPackageAlias(alias, pkgpath string) error { // goPackagePath returns the go package path which go files generated from "f" should have. // It respects the mapping registered by AddPkgMap if exists. Or use go_package as import path // if it includes a slash, Otherwide, it generates a path from the file name of "f". -func (r *Registry) goPackagePath(f *descriptor.FileDescriptorProto) string { +func (r *Registry) goPackagePath(f *descriptorpb.FileDescriptorProto) string { name := f.GetName() if pkg, ok := r.pkgMap[name]; ok { return path.Join(r.prefix, pkg) @@ -548,7 +548,7 @@ func sanitizePackageName(pkgName string) string { // defaultGoPackageName returns the default go package name to be used for go files generated from "f". // You might need to use an unique alias for the package when you import it. Use ReserveGoPackageAlias to get a unique alias. -func (r *Registry) defaultGoPackageName(f *descriptor.FileDescriptorProto) string { +func (r *Registry) defaultGoPackageName(f *descriptorpb.FileDescriptorProto) string { name := r.packageIdentityName(f) return sanitizePackageName(name) } @@ -556,7 +556,7 @@ func (r *Registry) defaultGoPackageName(f *descriptor.FileDescriptorProto) strin // packageIdentityName returns the identity of packages. // protoc-gen-grpc-gateway rejects CodeGenerationRequests which contains more than one packages // as protoc-gen-go does. -func (r *Registry) packageIdentityName(f *descriptor.FileDescriptorProto) string { +func (r *Registry) packageIdentityName(f *descriptorpb.FileDescriptorProto) string { if f.Options != nil && f.Options.GoPackage != nil { gopkg := f.Options.GetGoPackage() idx := strings.LastIndex(gopkg, "/") diff --git a/internal/descriptor/registry_test.go b/internal/descriptor/registry_test.go index 1ec72a8cacd..59f05793e6a 100644 --- a/internal/descriptor/registry_test.go +++ b/internal/descriptor/registry_test.go @@ -3,14 +3,14 @@ package descriptor import ( "testing" - "github.com/golang/protobuf/proto" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" + "google.golang.org/protobuf/encoding/prototext" ) -func loadFile(t *testing.T, reg *Registry, src string) *descriptor.FileDescriptorProto { - var file descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &file); err != nil { +func loadFile(t *testing.T, reg *Registry, src string) *descriptorpb.FileDescriptorProto { + var file descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &file); err != nil { t.Fatalf("proto.UnmarshalText(%s, &file) failed with %v; want success", src, err) } reg.loadFile(&file) @@ -18,8 +18,8 @@ func loadFile(t *testing.T, reg *Registry, src string) *descriptor.FileDescripto } func load(t *testing.T, reg *Registry, src string) error { - var req plugin.CodeGeneratorRequest - if err := proto.UnmarshalText(src, &req); err != nil { + var req pluginpb.CodeGeneratorRequest + if err := prototext.Unmarshal([]byte(src), &req); err != nil { t.Fatalf("proto.UnmarshalText(%s, &file) failed with %v; want success", src, err) } return reg.Load(&req) diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go index b85e6d47922..d2f1e0aaf85 100644 --- a/internal/descriptor/services.go +++ b/internal/descriptor/services.go @@ -5,10 +5,10 @@ import ( "strings" "github.com/golang/glog" - "github.com/golang/protobuf/proto" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" options "google.golang.org/genproto/googleapis/api/annotations" + "google.golang.org/protobuf/proto" ) // loadServices registers services and their methods from "targetFile" to "r". @@ -54,7 +54,7 @@ func (r *Registry) loadServices(file *File) error { return nil } -func (r *Registry) newMethod(svc *Service, md *descriptor.MethodDescriptorProto, optsList []*options.HttpRule) (*Method, error) { +func (r *Registry) newMethod(svc *Service, md *descriptorpb.MethodDescriptorProto, optsList []*options.HttpRule) (*Method, error) { requestType, err := r.LookupMsg(svc.File.GetPackage(), md.GetInputType()) if err != nil { return nil, err @@ -184,17 +184,14 @@ func (r *Registry) newMethod(svc *Service, md *descriptor.MethodDescriptorProto, return meth, nil } -func extractAPIOptions(meth *descriptor.MethodDescriptorProto) (*options.HttpRule, error) { +func extractAPIOptions(meth *descriptorpb.MethodDescriptorProto) (*options.HttpRule, error) { if meth.Options == nil { return nil, nil } if !proto.HasExtension(meth.Options, options.E_Http) { return nil, nil } - ext, err := proto.GetExtension(meth.Options, options.E_Http) - if err != nil { - return nil, err - } + ext := proto.GetExtension(meth.Options, options.E_Http) opts, ok := ext.(*options.HttpRule) if !ok { return nil, fmt.Errorf("extension is %T; want an HttpRule", ext) @@ -214,7 +211,7 @@ func (r *Registry) newParam(meth *Method, path string) (Parameter, error) { } target := fields[l-1].Target switch target.GetType() { - case descriptor.FieldDescriptorProto_TYPE_MESSAGE, descriptor.FieldDescriptorProto_TYPE_GROUP: + case descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP: glog.V(2).Infoln("found aggregate type:", target, target.TypeName) if IsWellKnownType(*target.TypeName) { glog.V(2).Infoln("found well known aggregate type:", target) @@ -280,7 +277,7 @@ func (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) if i > 0 { f := result[i-1].Target switch f.GetType() { - case descriptor.FieldDescriptorProto_TYPE_MESSAGE, descriptor.FieldDescriptorProto_TYPE_GROUP: + case descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP: var err error msg, err = r.LookupMsg(msg.FQMN(), f.GetTypeName()) if err != nil { @@ -296,7 +293,7 @@ func (r *Registry) resolveFieldPath(msg *Message, path string, isPathParam bool) if f == nil { return nil, fmt.Errorf("no field %q found in %s", path, root.GetName()) } - if !(isPathParam || r.allowRepeatedFieldsInBody) && f.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED { + if !(isPathParam || r.allowRepeatedFieldsInBody) && f.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED { return nil, fmt.Errorf("repeated field not allowed in field path: %s in %s", f.GetName(), path) } result = append(result, FieldPathComponent{Name: c, Target: f}) diff --git a/internal/descriptor/services_test.go b/internal/descriptor/services_test.go index bc984aae966..7b68ac206c4 100644 --- a/internal/descriptor/services_test.go +++ b/internal/descriptor/services_test.go @@ -4,9 +4,10 @@ import ( "reflect" "testing" - "github.com/golang/protobuf/proto" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/proto" ) func compilePath(t *testing.T, path string) httprule.Template { @@ -17,7 +18,7 @@ func compilePath(t *testing.T, path string) httprule.Template { return parsed.Compile() } -func testExtractServices(t *testing.T, input []*descriptor.FileDescriptorProto, target string, wantSvcs []*Service) { +func testExtractServices(t *testing.T, input []*descriptorpb.FileDescriptorProto, target string, wantSvcs []*Service) { reg := NewRegistry() for _, file := range input { reg.loadFile(file) @@ -178,8 +179,8 @@ func TestExtractServicesSimple(t *testing.T) { > > ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } msg := &Message{ @@ -219,7 +220,7 @@ func TestExtractServicesSimple(t *testing.T) { } crossLinkFixture(file) - testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) + testExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } func TestExtractServicesWithoutAnnotation(t *testing.T) { @@ -244,8 +245,8 @@ func TestExtractServicesWithoutAnnotation(t *testing.T) { > > ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } msg := &Message{ @@ -278,7 +279,7 @@ func TestExtractServicesWithoutAnnotation(t *testing.T) { } crossLinkFixture(file) - testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) + testExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } func TestExtractServicesCrossPackage(t *testing.T) { @@ -323,10 +324,10 @@ func TestExtractServicesCrossPackage(t *testing.T) { > `, } - var fds []*descriptor.FileDescriptorProto + var fds []*descriptorpb.FileDescriptorProto for _, src := range srcs { - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } fds = append(fds, &fd) @@ -429,8 +430,8 @@ func TestExtractServicesWithBodyPath(t *testing.T) { > > ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } msg := &Message{ @@ -477,7 +478,7 @@ func TestExtractServicesWithBodyPath(t *testing.T) { } crossLinkFixture(file) - testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) + testExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } func TestExtractServicesWithPathParam(t *testing.T) { @@ -507,8 +508,8 @@ func TestExtractServicesWithPathParam(t *testing.T) { > > ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } msg := &Message{ @@ -558,7 +559,7 @@ func TestExtractServicesWithPathParam(t *testing.T) { } crossLinkFixture(file) - testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) + testExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } func TestExtractServicesWithAdditionalBinding(t *testing.T) { @@ -596,8 +597,8 @@ func TestExtractServicesWithAdditionalBinding(t *testing.T) { > > ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } msg := &Message{ @@ -668,7 +669,7 @@ func TestExtractServicesWithAdditionalBinding(t *testing.T) { } crossLinkFixture(file) - testExtractServices(t, []*descriptor.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) + testExtractServices(t, []*descriptorpb.FileDescriptorProto{&fd}, "path/to/example.proto", file.Services) } func TestExtractServicesWithError(t *testing.T) { @@ -967,10 +968,10 @@ func TestExtractServicesWithError(t *testing.T) { } { reg := NewRegistry() - var fds []*descriptor.FileDescriptorProto + var fds []*descriptorpb.FileDescriptorProto for _, src := range spec.srcs { - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } reg.loadFile(&fd) @@ -1149,8 +1150,8 @@ func TestResolveFieldPath(t *testing.T) { wantErr: true, }, } { - var file descriptor.FileDescriptorProto - if err := proto.UnmarshalText(spec.src, &file); err != nil { + var file descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(spec.src), &file); err != nil { t.Fatalf("proto.Unmarshal(%s) failed with %v; want success", spec.src, err) } reg := NewRegistry() @@ -1251,10 +1252,10 @@ func TestExtractServicesWithDeleteBody(t *testing.T) { reg := NewRegistry() reg.SetAllowDeleteBody(spec.allowDeleteBody) - var fds []*descriptor.FileDescriptorProto + var fds []*descriptorpb.FileDescriptorProto for _, src := range spec.srcs { - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } reg.loadFile(&fd) diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index 41e8553ed68..b02515a4682 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" ) @@ -38,9 +38,9 @@ func (p GoPackage) String() string { return fmt.Sprintf("%s %q", p.Alias, p.Path) } -// File wraps descriptor.FileDescriptorProto for richer features. +// File wraps descriptorpb.FileDescriptorProto for richer features. type File struct { - *descriptor.FileDescriptorProto + *descriptorpb.FileDescriptorProto // GoPkg is the go package of the go file generated from this file.. GoPkg GoPackage // Messages is the list of messages defined in this file. @@ -71,7 +71,7 @@ type Message struct { File *File // Outers is a list of outer messages if this message is a nested type. Outers []string - *descriptor.DescriptorProto + *descriptorpb.DescriptorProto Fields []*Field // Index is proto path index of this message in File. @@ -112,7 +112,7 @@ type Enum struct { File *File // Outers is a list of outer messages if this enum is a nested type. Outers []string - *descriptor.EnumDescriptorProto + *descriptorpb.EnumDescriptorProto Index int @@ -145,11 +145,11 @@ func (e *Enum) GoType(currentPackage string) string { return fmt.Sprintf("%s.%s", e.File.Pkg(), name) } -// Service wraps descriptor.ServiceDescriptorProto for richer features. +// Service wraps descriptorpb.ServiceDescriptorProto for richer features. type Service struct { // File is the file where this service is defined. File *File - *descriptor.ServiceDescriptorProto + *descriptorpb.ServiceDescriptorProto // Methods is the list of methods defined in this service. Methods []*Method @@ -183,11 +183,11 @@ func (s *Service) ClientConstructorName() string { return fmt.Sprintf("%s.%s", s.File.Pkg(), constructor) } -// Method wraps descriptor.MethodDescriptorProto for richer features. +// Method wraps descriptorpb.MethodDescriptorProto for richer features. type Method struct { // Service is the service which this method belongs to. Service *Service - *descriptor.MethodDescriptorProto + *descriptorpb.MethodDescriptorProto // RequestType is the message type of requests to this method. RequestType *Message @@ -235,13 +235,13 @@ func (b *Binding) ExplicitParams() []string { return result } -// Field wraps descriptor.FieldDescriptorProto for richer features. +// Field wraps descriptorpb.FieldDescriptorProto for richer features. type Field struct { // Message is the message type which this field belongs to. Message *Message // FieldMessage is the message type of the field. FieldMessage *Message - *descriptor.FieldDescriptorProto + *descriptorpb.FieldDescriptorProto ForcePrefixedName bool } @@ -280,12 +280,12 @@ func (p Parameter) ConvertFuncExpr() (string, error) { // IsEnum returns true if the field is an enum type, otherwise false is returned. func (p Parameter) IsEnum() bool { - return p.Target.GetType() == descriptor.FieldDescriptorProto_TYPE_ENUM + return p.Target.GetType() == descriptorpb.FieldDescriptorProto_TYPE_ENUM } // IsRepeated returns true if the field is repeated, otherwise false is returned. func (p Parameter) IsRepeated() bool { - return p.Target.GetLabel() == descriptor.FieldDescriptorProto_LABEL_REPEATED + return p.Target.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED } // IsProto2 returns true if the field is proto2, otherwise false is returned. @@ -394,90 +394,90 @@ func (c FieldPathComponent) ValueExpr() string { } var ( - proto3ConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ - descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64", - descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32", - descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64", - descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64", - descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32", - descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64", - descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32", - descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.Bool", - descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.String", + proto3ConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{ + descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64", + descriptorpb.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32", + descriptorpb.FieldDescriptorProto_TYPE_INT64: "runtime.Int64", + descriptorpb.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64", + descriptorpb.FieldDescriptorProto_TYPE_INT32: "runtime.Int32", + descriptorpb.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64", + descriptorpb.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32", + descriptorpb.FieldDescriptorProto_TYPE_BOOL: "runtime.Bool", + descriptorpb.FieldDescriptorProto_TYPE_STRING: "runtime.String", // FieldDescriptorProto_TYPE_GROUP // FieldDescriptorProto_TYPE_MESSAGE - descriptor.FieldDescriptorProto_TYPE_BYTES: "runtime.Bytes", - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32", - descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.Enum", - descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32", - descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64", - descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32", - descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64", + descriptorpb.FieldDescriptorProto_TYPE_BYTES: "runtime.Bytes", + descriptorpb.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32", + descriptorpb.FieldDescriptorProto_TYPE_ENUM: "runtime.Enum", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64", + descriptorpb.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32", + descriptorpb.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64", } - proto3RepeatedConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ - descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", - descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", - descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", - descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", - descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", - descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", - descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", - descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", + proto3RepeatedConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{ + descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", + descriptorpb.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", + descriptorpb.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", + descriptorpb.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", + descriptorpb.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", + descriptorpb.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", + descriptorpb.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", // FieldDescriptorProto_TYPE_GROUP // FieldDescriptorProto_TYPE_MESSAGE - descriptor.FieldDescriptorProto_TYPE_BYTES: "runtime.BytesSlice", - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", - descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", - descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", - descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_BYTES: "runtime.BytesSlice", + descriptorpb.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", + descriptorpb.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", } - proto2ConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ - descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64P", - descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32P", - descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64P", - descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64P", - descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32P", - descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64P", - descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32P", - descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolP", - descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.StringP", + proto2ConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{ + descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64P", + descriptorpb.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32P", + descriptorpb.FieldDescriptorProto_TYPE_INT64: "runtime.Int64P", + descriptorpb.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64P", + descriptorpb.FieldDescriptorProto_TYPE_INT32: "runtime.Int32P", + descriptorpb.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64P", + descriptorpb.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32P", + descriptorpb.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolP", + descriptorpb.FieldDescriptorProto_TYPE_STRING: "runtime.StringP", // FieldDescriptorProto_TYPE_GROUP // FieldDescriptorProto_TYPE_MESSAGE // FieldDescriptorProto_TYPE_BYTES // TODO(yugui) Handle bytes - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32P", - descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumP", - descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32P", - descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64P", - descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32P", - descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64P", + descriptorpb.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32P", + descriptorpb.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumP", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32P", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64P", + descriptorpb.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32P", + descriptorpb.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64P", } - proto2RepeatedConvertFuncs = map[descriptor.FieldDescriptorProto_Type]string{ - descriptor.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", - descriptor.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", - descriptor.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", - descriptor.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", - descriptor.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", - descriptor.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", - descriptor.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", - descriptor.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", + proto2RepeatedConvertFuncs = map[descriptorpb.FieldDescriptorProto_Type]string{ + descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: "runtime.Float64Slice", + descriptorpb.FieldDescriptorProto_TYPE_FLOAT: "runtime.Float32Slice", + descriptorpb.FieldDescriptorProto_TYPE_INT64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_UINT64: "runtime.Uint64Slice", + descriptorpb.FieldDescriptorProto_TYPE_INT32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_FIXED64: "runtime.Uint64Slice", + descriptorpb.FieldDescriptorProto_TYPE_FIXED32: "runtime.Uint32Slice", + descriptorpb.FieldDescriptorProto_TYPE_BOOL: "runtime.BoolSlice", + descriptorpb.FieldDescriptorProto_TYPE_STRING: "runtime.StringSlice", // FieldDescriptorProto_TYPE_GROUP // FieldDescriptorProto_TYPE_MESSAGE // FieldDescriptorProto_TYPE_BYTES // TODO(maros7) Handle bytes - descriptor.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", - descriptor.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", - descriptor.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", - descriptor.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", - descriptor.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_UINT32: "runtime.Uint32Slice", + descriptorpb.FieldDescriptorProto_TYPE_ENUM: "runtime.EnumSlice", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: "runtime.Int64Slice", + descriptorpb.FieldDescriptorProto_TYPE_SINT32: "runtime.Int32Slice", + descriptorpb.FieldDescriptorProto_TYPE_SINT64: "runtime.Int64Slice", } wellKnownTypeConv = map[string]string{ diff --git a/internal/descriptor/types_test.go b/internal/descriptor/types_test.go index 9c7046b1e2e..60e5bc0a17e 100644 --- a/internal/descriptor/types_test.go +++ b/internal/descriptor/types_test.go @@ -3,8 +3,8 @@ package descriptor import ( "testing" - "github.com/golang/protobuf/proto" - descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + "google.golang.org/protobuf/encoding/prototext" ) func TestGoPackageStandard(t *testing.T) { @@ -21,7 +21,7 @@ func TestGoPackageStandard(t *testing.T) { want: true, }, { - pkg: GoPackage{Path: "github.com/golang/protobuf/jsonpb", Name: "jsonpb"}, + pkg: GoPackage{Path: "google.golang.org/protobuf/encoding/protojson", Name: "jsonpb"}, want: false, }, { @@ -57,8 +57,8 @@ func TestGoPackageString(t *testing.T) { want: `"encoding/json"`, }, { - pkg: GoPackage{Path: "github.com/golang/protobuf/jsonpb", Name: "jsonpb"}, - want: `"github.com/golang/protobuf/jsonpb"`, + pkg: GoPackage{Path: "google.golang.org/protobuf/encoding/protojson", Name: "jsonpb"}, + want: `"google.golang.org/protobuf/encoding/protojson"`, }, { pkg: GoPackage{Path: "golang.org/x/net/context", Name: "context"}, @@ -80,7 +80,7 @@ func TestGoPackageString(t *testing.T) { } func TestFieldPath(t *testing.T) { - var fds []*descriptor.FileDescriptorProto + var fds []*descriptorpb.FileDescriptorProto for _, src := range []string{ ` name: 'example.proto' @@ -124,8 +124,8 @@ func TestFieldPath(t *testing.T) { syntax: "proto2" `, } { - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } fds = append(fds, &fd) @@ -222,8 +222,8 @@ func TestGoType(t *testing.T) { >, ` - var fd descriptor.FileDescriptorProto - if err := proto.UnmarshalText(src, &fd); err != nil { + var fd descriptorpb.FileDescriptorProto + if err := prototext.Unmarshal([]byte(src), &fd); err != nil { t.Fatalf("proto.UnmarshalText(%s, &fd) failed with %v; want success", src, err) } diff --git a/internal/generator/generator.go b/internal/generator/generator.go index 21255eaa95b..88b055bf591 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -2,12 +2,12 @@ package generator import ( - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" + descriptorpb "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" ) // Generator is an abstraction of code generators. type Generator interface { // Generate generates output files from input .proto files. - Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) + Generate(targets []*descriptorpb.File) ([]*pluginpb.CodeGeneratorResponse_File, error) } diff --git a/protoc-gen-grpc-gateway/BUILD.bazel b/protoc-gen-grpc-gateway/BUILD.bazel index 09851518641..a3d54fe0b9e 100644 --- a/protoc-gen-grpc-gateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/BUILD.bazel @@ -12,8 +12,8 @@ go_library( "//internal/descriptor:go_default_library", "//protoc-gen-grpc-gateway/internal/gengateway:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel index 2d407a8dc47..f19b6cd2619 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel +++ b/protoc-gen-grpc-gateway/internal/gengateway/BUILD.bazel @@ -16,8 +16,8 @@ go_library( "//internal/generator:go_default_library", "//internal/utilities:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) @@ -32,7 +32,7 @@ go_test( deps = [ "//internal/descriptor:go_default_library", "//internal/httprule:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go index 633a37fbcf8..be018745fcd 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go @@ -9,10 +9,10 @@ import ( "strings" "github.com/golang/glog" - "github.com/golang/protobuf/proto" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" + "google.golang.org/protobuf/proto" ) var ( @@ -46,7 +46,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p "net/http", "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities", - "github.com/golang/protobuf/proto", + "google.golang.org/protobuf/proto", "google.golang.org/grpc", "google.golang.org/grpc/codes", "google.golang.org/grpc/grpclog", @@ -90,8 +90,8 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix, p } } -func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { - var files []*plugin.CodeGeneratorResponse_File +func (g *generator) Generate(targets []*descriptor.File) ([]*pluginpb.CodeGeneratorResponse_File, error) { + var files []*pluginpb.CodeGeneratorResponse_File for _, file := range targets { glog.V(1).Infof("Processing %s", file.GetName()) code, err := g.generate(file) @@ -114,7 +114,7 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato ext := filepath.Ext(name) base := strings.TrimSuffix(name, ext) output := fmt.Sprintf("%s.pb.gw.go", base) - files = append(files, &plugin.CodeGeneratorResponse_File{ + files = append(files, &pluginpb.CodeGeneratorResponse_File{ Name: proto.String(output), Content: proto.String(string(formatted)), }) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go index 0d36ff9af19..052cd07cc8a 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go @@ -5,9 +5,9 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" - protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + "google.golang.org/protobuf/proto" ) func newExampleFileDescriptor() *descriptor.File { @@ -20,7 +20,7 @@ func newExampleFileDescriptor() *descriptor.File { } func newExampleFileDescriptorWithGoPkg(gp *descriptor.GoPackage) *descriptor.File { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } msg := &descriptor.Message{ @@ -31,31 +31,31 @@ func newExampleFileDescriptorWithGoPkg(gp *descriptor.GoPackage) *descriptor.Fil File: &descriptor.File{ GoPkg: descriptor.GoPackage{ Path: "github.com/golang/protobuf/ptypes/empty", - Name: "empty", + Name: "emptypb", }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), } - meth1 := &protodescriptor.MethodDescriptorProto{ + meth1 := &descriptorpb.MethodDescriptorProto{ Name: proto.String("ExampleWithoutBindings"), InputType: proto.String("empty.Empty"), OutputType: proto.String("empty.Empty"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth, meth1}, + Method: []*descriptorpb.MethodDescriptorProto{meth, meth1}, } return &descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: *gp, Messages: []*descriptor.Message{msg}, diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 281fe93690b..456191597b0 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -4,10 +4,10 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" - protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" + "google.golang.org/protobuf/proto" ) func crossLinkFixture(f *descriptor.File) *descriptor.File { @@ -30,28 +30,28 @@ func crossLinkFixture(f *descriptor.File) *descriptor.File { } func TestApplyTemplateHeader(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -88,44 +88,44 @@ func TestApplyTemplateHeader(t *testing.T) { } func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String("NestedMessage"), Number: proto.Int32(1), }, }, } - nesteddesc := &protodescriptor.DescriptorProto{ + nesteddesc := &descriptorpb.DescriptorProto{ Name: proto.String("NestedMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("int32"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(), Number: proto.Int32(1), }, { Name: proto.String("bool"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(), Number: proto.Int32(2), }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), ClientStreaming: proto.Bool(false), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } for _, spec := range []struct { serverStreaming bool @@ -162,11 +162,11 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { FieldDescriptorProto: nested.GetField()[1], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -252,44 +252,44 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { } func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String("NestedMessage"), Number: proto.Int32(1), }, }, } - nesteddesc := &protodescriptor.DescriptorProto{ + nesteddesc := &descriptorpb.DescriptorProto{ Name: proto.String("NestedMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("int32"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(), Number: proto.Int32(1), }, { Name: proto.String("bool"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(), Number: proto.Int32(2), }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), ClientStreaming: proto.Bool(true), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } for _, spec := range []struct { serverStreaming bool @@ -326,11 +326,11 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { FieldDescriptorProto: nested.GetField()[1], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -404,44 +404,44 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } func TestApplyTemplateInProcess(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String("NestedMessage"), Number: proto.Int32(1), }, }, } - nesteddesc := &protodescriptor.DescriptorProto{ + nesteddesc := &descriptorpb.DescriptorProto{ Name: proto.String("NestedMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("int32"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(), Number: proto.Int32(1), }, { Name: proto.String("bool"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(), Number: proto.Int32(2), }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), ClientStreaming: proto.Bool(true), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } for _, spec := range []struct { clientStreaming bool @@ -501,11 +501,11 @@ func TestApplyTemplateInProcess(t *testing.T) { FieldDescriptorProto: nested.GetField()[1], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -580,25 +580,25 @@ func TestApplyTemplateInProcess(t *testing.T) { } func TestAllowPatchFeature(t *testing.T) { - updateMaskDesc := &protodescriptor.FieldDescriptorProto{ + updateMaskDesc := &descriptorpb.FieldDescriptorProto{ Name: proto.String("UpdateMask"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".google.protobuf.FieldMask"), Number: proto.Int32(1), } - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{updateMaskDesc}, + Field: []*descriptorpb.FieldDescriptorProto{updateMaskDesc}, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, @@ -609,11 +609,11 @@ func TestAllowPatchFeature(t *testing.T) { } msg.Fields = append(msg.Fields, updateMaskField) file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -662,25 +662,25 @@ func TestAllowPatchFeature(t *testing.T) { } func TestIdentifierCapitalization(t *testing.T) { - msgdesc1 := &protodescriptor.DescriptorProto{ + msgdesc1 := &descriptorpb.DescriptorProto{ Name: proto.String("Exam_pleRequest"), } - msgdesc2 := &protodescriptor.DescriptorProto{ + msgdesc2 := &descriptorpb.DescriptorProto{ Name: proto.String("example_response"), } - meth1 := &protodescriptor.MethodDescriptorProto{ + meth1 := &descriptorpb.MethodDescriptorProto{ Name: proto.String("ExampleGe2t"), InputType: proto.String("Exam_pleRequest"), OutputType: proto.String("example_response"), } - meth2 := &protodescriptor.MethodDescriptorProto{ + meth2 := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Exampl_eGet"), InputType: proto.String("Exam_pleRequest"), OutputType: proto.String("example_response"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("Example"), - Method: []*protodescriptor.MethodDescriptorProto{meth1, meth2}, + Method: []*descriptorpb.MethodDescriptorProto{meth1, meth2}, } msg1 := &descriptor.Message{ DescriptorProto: msgdesc1, @@ -689,12 +689,12 @@ func TestIdentifierCapitalization(t *testing.T) { DescriptorProto: msgdesc2, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc1, msgdesc2}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc1, msgdesc2}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index 5d7a4018410..a4cfe83425e 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -15,11 +15,11 @@ import ( "strings" "github.com/golang/glog" - "github.com/golang/protobuf/proto" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway/internal/gengateway" + "google.golang.org/protobuf/proto" ) var ( @@ -130,15 +130,15 @@ func main() { emitFiles(out) } -func emitFiles(out []*plugin.CodeGeneratorResponse_File) { - emitResp(&plugin.CodeGeneratorResponse{File: out}) +func emitFiles(out []*pluginpb.CodeGeneratorResponse_File) { + emitResp(&pluginpb.CodeGeneratorResponse{File: out}) } func emitError(err error) { - emitResp(&plugin.CodeGeneratorResponse{Error: proto.String(err.Error())}) + emitResp(&pluginpb.CodeGeneratorResponse{Error: proto.String(err.Error())}) } -func emitResp(resp *plugin.CodeGeneratorResponse) { +func emitResp(resp *pluginpb.CodeGeneratorResponse) { buf, err := proto.Marshal(resp) if err != nil { glog.Fatal(err) diff --git a/protoc-gen-swagger/BUILD.bazel b/protoc-gen-swagger/BUILD.bazel index f6f93625f2e..70429f2a89c 100644 --- a/protoc-gen-swagger/BUILD.bazel +++ b/protoc-gen-swagger/BUILD.bazel @@ -11,8 +11,8 @@ go_library( "//internal/descriptor:go_default_library", "//protoc-gen-swagger/internal/genswagger:go_default_library", "@com_github_golang_glog//:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/protoc-gen-swagger/internal/genswagger/BUILD.bazel b/protoc-gen-swagger/internal/genswagger/BUILD.bazel index a3295f7c772..f2a4c70a781 100644 --- a/protoc-gen-swagger/internal/genswagger/BUILD.bazel +++ b/protoc-gen-swagger/internal/genswagger/BUILD.bazel @@ -20,13 +20,13 @@ go_library( "//protoc-gen-swagger/options:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library_gen", - "@com_github_golang_protobuf//jsonpb:go_default_library_gen", - "@com_github_golang_protobuf//proto:go_default_library", "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:struct_go_proto", + "@org_golang_google_protobuf//encoding/protojson:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", ], ) @@ -39,10 +39,12 @@ go_test( "//internal/descriptor:go_default_library", "//internal/httprule:go_default_library", "//protoc-gen-swagger/options:go_default_library", - "@com_github_golang_protobuf//proto:go_default_library", + "//runtime:go_default_library", + "@com_github_google_go_cmp//cmp:go_default_library", "@io_bazel_rules_go//proto/wkt:any_go_proto", "@io_bazel_rules_go//proto/wkt:compiler_plugin_go_proto", "@io_bazel_rules_go//proto/wkt:descriptor_go_proto", "@io_bazel_rules_go//proto/wkt:struct_go_proto", + "@org_golang_google_protobuf//proto:go_default_library", ], ) diff --git a/protoc-gen-swagger/internal/genswagger/generator.go b/protoc-gen-swagger/internal/genswagger/generator.go index b1f922de7f1..8ec0dc0a90a 100644 --- a/protoc-gen-swagger/internal/genswagger/generator.go +++ b/protoc-gen-swagger/internal/genswagger/generator.go @@ -10,15 +10,15 @@ import ( "strings" "github.com/golang/glog" - pbdescriptor "github.com/golang/protobuf/descriptor" - "github.com/golang/protobuf/proto" - protocdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/golang/protobuf/ptypes/any" + legacydescriptor "github.com/golang/protobuf/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" + anypb "github.com/golang/protobuf/ptypes/any" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" - spb "google.golang.org/genproto/googleapis/rpc/status" + statuspb "google.golang.org/genproto/googleapis/rpc/status" + "google.golang.org/protobuf/proto" ) var ( @@ -112,7 +112,7 @@ func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error // and thus render into what we want -- the JSON of swaggerCore with the // extensions appended. fields := []reflect.StructField{ - reflect.StructField{ // embedded + { // embedded Name: "Embedded", Type: reflect.TypeOf(so), Anonymous: true, @@ -135,8 +135,8 @@ func extensionMarshalJSON(so interface{}, extensions []extension) ([]byte, error return json.Marshal(s.Interface()) } -// encodeSwagger converts swagger file obj to plugin.CodeGeneratorResponse_File -func encodeSwagger(file *wrapper) (*plugin.CodeGeneratorResponse_File, error) { +// encodeSwagger converts swagger file obj to pluginpb.CodeGeneratorResponse_File +func encodeSwagger(file *wrapper) (*pluginpb.CodeGeneratorResponse_File, error) { var formatted bytes.Buffer enc := json.NewEncoder(&formatted) enc.SetIndent("", " ") @@ -147,14 +147,14 @@ func encodeSwagger(file *wrapper) (*plugin.CodeGeneratorResponse_File, error) { ext := filepath.Ext(name) base := strings.TrimSuffix(name, ext) output := fmt.Sprintf("%s.swagger.json", base) - return &plugin.CodeGeneratorResponse_File{ + return &pluginpb.CodeGeneratorResponse_File{ Name: proto.String(output), Content: proto.String(formatted.String()), }, nil } -func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGeneratorResponse_File, error) { - var files []*plugin.CodeGeneratorResponse_File +func (g *generator) Generate(targets []*descriptor.File) ([]*pluginpb.CodeGeneratorResponse_File, error) { + var files []*pluginpb.CodeGeneratorResponse_File if g.reg.IsAllowMerge() { var mergedTarget *descriptor.File // try to find proto leader @@ -221,18 +221,17 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*plugin.CodeGenerato // to registry (used for error-related API responses) func AddErrorDefs(reg *descriptor.Registry) error { // load internal protos - any := fileDescriptorProtoForMessage(&any.Any{}) - status := fileDescriptorProtoForMessage(&spb.Status{}) - return reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protocdescriptor.FileDescriptorProto{ + any, _ := legacydescriptor.ForMessage(&anypb.Any{}) + any.SourceCodeInfo = new(descriptorpb.SourceCodeInfo) + status, _ := legacydescriptor.ForMessage(&statuspb.Status{}) + status.SourceCodeInfo = new(descriptorpb.SourceCodeInfo) + // TODO(johanbrandhorst): Use new conversion later when possible + // any := protodesc.ToFileDescriptorProto((&anypb.Any{}).ProtoReflect().Descriptor().ParentFile()) + // status := protodesc.ToFileDescriptorProto((&statuspb.Status{}).ProtoReflect().Descriptor().ParentFile()) + return reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{ any, status, }, }) } - -func fileDescriptorProtoForMessage(msg pbdescriptor.Message) *protocdescriptor.FileDescriptorProto { - fdp, _ := pbdescriptor.ForMessage(msg) - fdp.SourceCodeInfo = &protocdescriptor.SourceCodeInfo{} - return fdp -} diff --git a/protoc-gen-swagger/internal/genswagger/template.go b/protoc-gen-swagger/internal/genswagger/template.go index 3ad93d5627e..d9ed79527be 100644 --- a/protoc-gen-swagger/internal/genswagger/template.go +++ b/protoc-gen-swagger/internal/genswagger/template.go @@ -15,72 +15,72 @@ import ( "text/template" "github.com/golang/glog" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - pbdescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" structpb "github.com/golang/protobuf/ptypes/struct" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" ) var wktSchemas = map[string]schemaCore{ - ".google.protobuf.Timestamp": schemaCore{ + ".google.protobuf.Timestamp": { Type: "string", Format: "date-time", }, - ".google.protobuf.Duration": schemaCore{ + ".google.protobuf.Duration": { Type: "string", }, - ".google.protobuf.StringValue": schemaCore{ + ".google.protobuf.StringValue": { Type: "string", }, - ".google.protobuf.BytesValue": schemaCore{ + ".google.protobuf.BytesValue": { Type: "string", Format: "byte", }, - ".google.protobuf.Int32Value": schemaCore{ + ".google.protobuf.Int32Value": { Type: "integer", Format: "int32", }, - ".google.protobuf.UInt32Value": schemaCore{ + ".google.protobuf.UInt32Value": { Type: "integer", Format: "int64", }, - ".google.protobuf.Int64Value": schemaCore{ + ".google.protobuf.Int64Value": { Type: "string", Format: "int64", }, - ".google.protobuf.UInt64Value": schemaCore{ + ".google.protobuf.UInt64Value": { Type: "string", Format: "uint64", }, - ".google.protobuf.FloatValue": schemaCore{ + ".google.protobuf.FloatValue": { Type: "number", Format: "float", }, - ".google.protobuf.DoubleValue": schemaCore{ + ".google.protobuf.DoubleValue": { Type: "number", Format: "double", }, - ".google.protobuf.BoolValue": schemaCore{ + ".google.protobuf.BoolValue": { Type: "boolean", Format: "boolean", }, - ".google.protobuf.Empty": schemaCore{}, - ".google.protobuf.Struct": schemaCore{ + ".google.protobuf.Empty": {}, + ".google.protobuf.Struct": { Type: "object", }, - ".google.protobuf.Value": schemaCore{ + ".google.protobuf.Value": { Type: "object", }, - ".google.protobuf.ListValue": schemaCore{ + ".google.protobuf.ListValue": { Type: "array", Items: (*swaggerItemsObject)(&schemaCore{ Type: "object", }), }, - ".google.protobuf.NullValue": schemaCore{ + ".google.protobuf.NullValue": { Type: "string", }, } @@ -122,7 +122,7 @@ func messageToQueryParameters(message *descriptor.Message, reg *descriptor.Regis // queryParams converts a field to a list of swagger query parameters recursively through the use of nestedQueryParams. func queryParams(message *descriptor.Message, field *descriptor.Field, prefix string, reg *descriptor.Registry, pathParams []descriptor.Parameter) (params []swaggerParameterObject, err error) { - return nestedQueryParams(message, field, prefix, reg, pathParams, map[string]bool{}) + return nestedQueryParams(message, field, prefix, reg, pathParams, map[string]bool{}) } // nestedQueryParams converts a field to a list of swagger query parameters recursively. @@ -147,7 +147,7 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre } } - isEnum := field.GetType() == pbdescriptor.FieldDescriptorProto_TYPE_ENUM + isEnum := field.GetType() == descriptorpb.FieldDescriptorProto_TYPE_ENUM items := schema.Items if schema.Type != "" || isEnum { if schema.Type == "object" { @@ -226,13 +226,13 @@ func nestedQueryParams(message *descriptor.Message, field *descriptor.Field, pre if err != nil { return nil, fmt.Errorf("unknown message type %s", fieldType) } - // Check for cyclical message reference: - isCycle := touched[*msg.Name] - if isCycle { - return nil, fmt.Errorf("Recursive types are not allowed for query parameters, cycle found on %q", fieldType) - } - // Update map with the massage name so a cycle further down the recursive path can be detected. - touched[*msg.Name] = true + // Check for cyclical message reference: + isCycle := touched[*msg.Name] + if isCycle { + return nil, fmt.Errorf("Recursive types are not allowed for query parameters, cycle found on %q", fieldType) + } + // Update map with the massage name so a cycle further down the recursive path can be detected. + touched[*msg.Name] = true for _, nestedField := range msg.Fields { var fieldName string @@ -415,14 +415,14 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s aggregate = object } } - if fd.GetLabel() == pbdescriptor.FieldDescriptorProto_LABEL_REPEATED { + if fd.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REPEATED { aggregate = array } var props *swaggerSchemaObjectProperties switch ft := fd.GetType(); ft { - case pbdescriptor.FieldDescriptorProto_TYPE_ENUM, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE, pbdescriptor.FieldDescriptorProto_TYPE_GROUP: + case descriptorpb.FieldDescriptorProto_TYPE_ENUM, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE, descriptorpb.FieldDescriptorProto_TYPE_GROUP: if wktSchema, ok := wktSchemas[fd.GetTypeName()]; ok { core = wktSchema @@ -484,46 +484,46 @@ func schemaOfField(f *descriptor.Field, reg *descriptor.Registry, refs refMap) s // primitiveSchema returns a pair of "Type" and "Format" in JSON Schema for // the given primitive field type. // The last return parameter is true iff the field type is actually primitive. -func primitiveSchema(t pbdescriptor.FieldDescriptorProto_Type) (ftype, format string, ok bool) { +func primitiveSchema(t descriptorpb.FieldDescriptorProto_Type) (ftype, format string, ok bool) { switch t { - case pbdescriptor.FieldDescriptorProto_TYPE_DOUBLE: + case descriptorpb.FieldDescriptorProto_TYPE_DOUBLE: return "number", "double", true - case pbdescriptor.FieldDescriptorProto_TYPE_FLOAT: + case descriptorpb.FieldDescriptorProto_TYPE_FLOAT: return "number", "float", true - case pbdescriptor.FieldDescriptorProto_TYPE_INT64: + case descriptorpb.FieldDescriptorProto_TYPE_INT64: return "string", "int64", true - case pbdescriptor.FieldDescriptorProto_TYPE_UINT64: + case descriptorpb.FieldDescriptorProto_TYPE_UINT64: // 64bit integer types are marshaled as string in the default JSONPb marshaler. // TODO(yugui) Add an option to declare 64bit integers as int64. // // NOTE: uint64 is not a predefined format of integer type in Swagger spec. // So we cannot expect that uint64 is commonly supported by swagger processor. return "string", "uint64", true - case pbdescriptor.FieldDescriptorProto_TYPE_INT32: + case descriptorpb.FieldDescriptorProto_TYPE_INT32: return "integer", "int32", true - case pbdescriptor.FieldDescriptorProto_TYPE_FIXED64: + case descriptorpb.FieldDescriptorProto_TYPE_FIXED64: // Ditto. return "string", "uint64", true - case pbdescriptor.FieldDescriptorProto_TYPE_FIXED32: + case descriptorpb.FieldDescriptorProto_TYPE_FIXED32: // Ditto. return "integer", "int64", true - case pbdescriptor.FieldDescriptorProto_TYPE_BOOL: + case descriptorpb.FieldDescriptorProto_TYPE_BOOL: return "boolean", "boolean", true - case pbdescriptor.FieldDescriptorProto_TYPE_STRING: + case descriptorpb.FieldDescriptorProto_TYPE_STRING: // NOTE: in swagger specifition, format should be empty on string type return "string", "", true - case pbdescriptor.FieldDescriptorProto_TYPE_BYTES: + case descriptorpb.FieldDescriptorProto_TYPE_BYTES: return "string", "byte", true - case pbdescriptor.FieldDescriptorProto_TYPE_UINT32: + case descriptorpb.FieldDescriptorProto_TYPE_UINT32: // Ditto. return "integer", "int64", true - case pbdescriptor.FieldDescriptorProto_TYPE_SFIXED32: + case descriptorpb.FieldDescriptorProto_TYPE_SFIXED32: return "integer", "int32", true - case pbdescriptor.FieldDescriptorProto_TYPE_SFIXED64: + case descriptorpb.FieldDescriptorProto_TYPE_SFIXED64: return "string", "int64", true - case pbdescriptor.FieldDescriptorProto_TYPE_SINT32: + case descriptorpb.FieldDescriptorProto_TYPE_SINT32: return "integer", "int32", true - case pbdescriptor.FieldDescriptorProto_TYPE_SINT64: + case descriptorpb.FieldDescriptorProto_TYPE_SINT64: return "string", "int64", true default: return "", "", false @@ -751,7 +751,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re var items *swaggerItemsObject var minItems *int switch pt := parameter.Target.GetType(); pt { - case pbdescriptor.FieldDescriptorProto_TYPE_GROUP, pbdescriptor.FieldDescriptorProto_TYPE_MESSAGE: + case descriptorpb.FieldDescriptorProto_TYPE_GROUP, descriptorpb.FieldDescriptorProto_TYPE_MESSAGE: if descriptor.IsWellKnownType(parameter.Target.GetTypeName()) { if parameter.IsRepeated() { return fmt.Errorf("only primitive and enum types are allowed in repeated path parameters") @@ -764,7 +764,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re } else { return fmt.Errorf("only primitive and well-known types are allowed in path parameters") } - case pbdescriptor.FieldDescriptorProto_TYPE_ENUM: + case descriptorpb.FieldDescriptorProto_TYPE_ENUM: enum, err := reg.LookupEnum("", parameter.Target.GetTypeName()) if err != nil { return err @@ -887,7 +887,7 @@ func renderServices(services []*descriptor.Service, paths swaggerPathsObject, re pathItemObject = swaggerPathItemObject{} } - methProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.ServiceDescriptorProto)(nil)), "Method") + methProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.ServiceDescriptorProto)(nil)), "Method") desc := "A successful response." var responseSchema swaggerSchemaObject @@ -1162,7 +1162,7 @@ func applyTemplate(p param) (*swaggerObject, error) { renderEnumerationsAsDefinition(enums, s.Definitions, p.reg) // File itself might have some comments and metadata. - packageProtoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") + packageProtoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), "Package") packageComments := protoComments(p.reg, p.File, nil, "Package", packageProtoPath) if err := updateSwaggerDataFromComments(p.reg, &s, p, packageComments, true); err != nil { panic(err) @@ -1395,7 +1395,7 @@ func processExtensions(inputExts map[string]*structpb.Value) ([]extension, error if !strings.HasPrefix(k, "x-") { return nil, fmt.Errorf("Extension keys need to start with \"x-\": %q", k) } - ext, err := (&jsonpb.Marshaler{Indent: " "}).MarshalToString(v) + ext, err := (&protojson.MarshalOptions{Indent: " "}).Marshal(v) if err != nil { return nil, err } @@ -1491,7 +1491,7 @@ func updateSwaggerDataFromComments(reg *descriptor.Registry, swaggerObject inter } func fieldProtoComments(reg *descriptor.Registry, msg *descriptor.Message, field *descriptor.Field) string { - protoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)), "Field") + protoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.DescriptorProto)(nil)), "Field") for i, f := range msg.Fields { if f == field { return protoComments(reg, msg.File, msg.Outers, "MessageType", int32(msg.Index), protoPath, int32(i)) @@ -1501,7 +1501,7 @@ func fieldProtoComments(reg *descriptor.Registry, msg *descriptor.Message, field } func enumValueProtoComments(reg *descriptor.Registry, enum *descriptor.Enum) string { - protoPath := protoPathIndex(reflect.TypeOf((*pbdescriptor.EnumDescriptorProto)(nil)), "Value") + protoPath := protoPathIndex(reflect.TypeOf((*descriptorpb.EnumDescriptorProto)(nil)), "Value") var comments []string for idx, value := range enum.GetValue() { name := value.GetName() @@ -1591,11 +1591,11 @@ func goTemplateComments(comment string, data interface{}, reg *descriptor.Regist return temp.String() } -var messageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "MessageType") -var nestedProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)), "NestedType") -var packageProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Package") -var serviceProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)), "Service") -var methodProtoPath = protoPathIndex(reflect.TypeOf((*pbdescriptor.ServiceDescriptorProto)(nil)), "Method") +var messageProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), "MessageType") +var nestedProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.DescriptorProto)(nil)), "NestedType") +var packageProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), "Package") +var serviceProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)), "Service") +var methodProtoPath = protoPathIndex(reflect.TypeOf((*descriptorpb.ServiceDescriptorProto)(nil)), "Method") func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, typeIndex int32, fieldPaths []int32) bool { if typeName == "Package" && typeIndex == packageProtoPath { @@ -1617,7 +1617,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type } paths = paths[2:] } else { - typeNameDescriptor := reflect.TypeOf((*pbdescriptor.FileDescriptorProto)(nil)) + typeNameDescriptor := reflect.TypeOf((*descriptorpb.FileDescriptorProto)(nil)) if len(outerPaths) > 0 { if paths[0] != messageProtoPath || paths[1] != outerPaths[0] { @@ -1636,7 +1636,7 @@ func isProtoPathMatches(paths []int32, outerPaths []int32, typeName string, type if typeName == "MessageType" { typeName = "NestedType" } - typeNameDescriptor = reflect.TypeOf((*pbdescriptor.DescriptorProto)(nil)) + typeNameDescriptor = reflect.TypeOf((*descriptorpb.DescriptorProto)(nil)) } if paths[0] != protoPathIndex(typeNameDescriptor, typeName) || paths[1] != typeIndex { @@ -1696,17 +1696,14 @@ func protoPathIndex(descriptorType reflect.Type, what string) int32 { // extractOperationOptionFromMethodDescriptor extracts the message of type // swagger_options.Operation from a given proto method's descriptor. -func extractOperationOptionFromMethodDescriptor(meth *pbdescriptor.MethodDescriptorProto) (*swagger_options.Operation, error) { +func extractOperationOptionFromMethodDescriptor(meth *descriptorpb.MethodDescriptorProto) (*swagger_options.Operation, error) { if meth.Options == nil { return nil, nil } if !proto.HasExtension(meth.Options, swagger_options.E_Openapiv2Operation) { return nil, nil } - ext, err := proto.GetExtension(meth.Options, swagger_options.E_Openapiv2Operation) - if err != nil { - return nil, err - } + ext := proto.GetExtension(meth.Options, swagger_options.E_Openapiv2Operation) opts, ok := ext.(*swagger_options.Operation) if !ok { return nil, fmt.Errorf("extension is %T; want an Operation", ext) @@ -1716,17 +1713,14 @@ func extractOperationOptionFromMethodDescriptor(meth *pbdescriptor.MethodDescrip // extractSchemaOptionFromMessageDescriptor extracts the message of type // swagger_options.Schema from a given proto message's descriptor. -func extractSchemaOptionFromMessageDescriptor(msg *pbdescriptor.DescriptorProto) (*swagger_options.Schema, error) { +func extractSchemaOptionFromMessageDescriptor(msg *descriptorpb.DescriptorProto) (*swagger_options.Schema, error) { if msg.Options == nil { return nil, nil } if !proto.HasExtension(msg.Options, swagger_options.E_Openapiv2Schema) { return nil, nil } - ext, err := proto.GetExtension(msg.Options, swagger_options.E_Openapiv2Schema) - if err != nil { - return nil, err - } + ext := proto.GetExtension(msg.Options, swagger_options.E_Openapiv2Schema) opts, ok := ext.(*swagger_options.Schema) if !ok { return nil, fmt.Errorf("extension is %T; want a Schema", ext) @@ -1736,17 +1730,14 @@ func extractSchemaOptionFromMessageDescriptor(msg *pbdescriptor.DescriptorProto) // extractSwaggerOptionFromFileDescriptor extracts the message of type // swagger_options.Swagger from a given proto method's descriptor. -func extractSwaggerOptionFromFileDescriptor(file *pbdescriptor.FileDescriptorProto) (*swagger_options.Swagger, error) { +func extractSwaggerOptionFromFileDescriptor(file *descriptorpb.FileDescriptorProto) (*swagger_options.Swagger, error) { if file.Options == nil { return nil, nil } if !proto.HasExtension(file.Options, swagger_options.E_Openapiv2Swagger) { return nil, nil } - ext, err := proto.GetExtension(file.Options, swagger_options.E_Openapiv2Swagger) - if err != nil { - return nil, err - } + ext := proto.GetExtension(file.Options, swagger_options.E_Openapiv2Swagger) opts, ok := ext.(*swagger_options.Swagger) if !ok { return nil, fmt.Errorf("extension is %T; want a Swagger object", ext) @@ -1754,17 +1745,14 @@ func extractSwaggerOptionFromFileDescriptor(file *pbdescriptor.FileDescriptorPro return opts, nil } -func extractJSONSchemaFromFieldDescriptor(fd *pbdescriptor.FieldDescriptorProto) (*swagger_options.JSONSchema, error) { +func extractJSONSchemaFromFieldDescriptor(fd *descriptorpb.FieldDescriptorProto) (*swagger_options.JSONSchema, error) { if fd.Options == nil { return nil, nil } if !proto.HasExtension(fd.Options, swagger_options.E_Openapiv2Field) { return nil, nil } - ext, err := proto.GetExtension(fd.Options, swagger_options.E_Openapiv2Field) - if err != nil { - return nil, err - } + ext := proto.GetExtension(fd.Options, swagger_options.E_Openapiv2Field) opts, ok := ext.(*swagger_options.JSONSchema) if !ok { return nil, fmt.Errorf("extension is %T; want a JSONSchema object", ext) diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go index feeac889a1a..45aae0c0667 100644 --- a/protoc-gen-swagger/internal/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -8,16 +8,20 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" - protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" - "github.com/golang/protobuf/ptypes/any" + descriptorpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" + anypb "github.com/golang/protobuf/ptypes/any" structpb "github.com/golang/protobuf/ptypes/struct" + "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" swagger_options "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/options" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "google.golang.org/protobuf/proto" ) +var marshaler = &runtime.JSONPb{} + func crossLinkFixture(f *descriptor.File) *descriptor.File { for _, m := range f.Messages { m.File = f @@ -37,9 +41,9 @@ func crossLinkFixture(f *descriptor.File) *descriptor.File { return f } -func reqFromFile(f *descriptor.File) *plugin.CodeGeneratorRequest { - return &plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{ +func reqFromFile(f *descriptor.File) *pluginpb.CodeGeneratorRequest { + return &pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{ f.FileDescriptorProto, }, FileToGenerate: []string{f.GetName()}, @@ -48,31 +52,31 @@ func reqFromFile(f *descriptor.File) *plugin.CodeGeneratorRequest { func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { type test struct { - MsgDescs []*protodescriptor.DescriptorProto + MsgDescs []*descriptorpb.DescriptorProto Message string Params []swaggerParameterObject } tests := []test{ { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(), Number: proto.Int32(2), }, { Name: proto.String("c"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), Number: proto.Int32(3), }, }, @@ -80,20 +84,20 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "a", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "b", In: "query", Required: false, Type: "number", Format: "double", }, - swaggerParameterObject{ + { Name: "c", In: "query", Required: false, @@ -103,52 +107,52 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { }, }, { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.Nested"), Number: proto.Int32(1), }, }, }, - &protodescriptor.DescriptorProto{ + { Name: proto.String("Nested"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("deep"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.Nested.DeepNested"), Number: proto.Int32(2), }, }, - NestedType: []*protodescriptor.DescriptorProto{{ + NestedType: []*descriptorpb.DescriptorProto{{ Name: proto.String("DeepNested"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("c"), - Type: protodescriptor.FieldDescriptorProto_TYPE_ENUM.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(), TypeName: proto.String(".example.Nested.DeepNested.DeepEnum"), Number: proto.Int32(2), }, }, - EnumType: []*protodescriptor.EnumDescriptorProto{ + EnumType: []*descriptorpb.EnumDescriptorProto{ { Name: proto.String("DeepEnum"), - Value: []*protodescriptor.EnumValueDescriptorProto{ + Value: []*descriptorpb.EnumValueDescriptorProto{ {Name: proto.String("FALSE"), Number: proto.Int32(0)}, {Name: proto.String("TRUE"), Number: proto.Int32(1)}, }, @@ -159,19 +163,19 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "nested.a", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "nested.deep.b", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "nested.deep.c", In: "query", Required: false, @@ -191,13 +195,13 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.MsgDescs, - Service: []*protodescriptor.ServiceDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -205,8 +209,8 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) message, err := reg.LookupMsg("", ".example."+test.Message) @@ -229,31 +233,31 @@ func TestMessageToQueryParametersWithEnumAsInt(t *testing.T) { func TestMessageToQueryParameters(t *testing.T) { type test struct { - MsgDescs []*protodescriptor.DescriptorProto + MsgDescs []*descriptorpb.DescriptorProto Message string Params []swaggerParameterObject } tests := []test{ { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_DOUBLE.Enum(), Number: proto.Int32(2), }, { Name: proto.String("c"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), Number: proto.Int32(3), }, }, @@ -261,20 +265,20 @@ func TestMessageToQueryParameters(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "a", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "b", In: "query", Required: false, Type: "number", Format: "double", }, - swaggerParameterObject{ + { Name: "c", In: "query", Required: false, @@ -284,52 +288,52 @@ func TestMessageToQueryParameters(t *testing.T) { }, }, { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.Nested"), Number: proto.Int32(1), }, }, }, - &protodescriptor.DescriptorProto{ + { Name: proto.String("Nested"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("deep"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.Nested.DeepNested"), Number: proto.Int32(2), }, }, - NestedType: []*protodescriptor.DescriptorProto{{ + NestedType: []*descriptorpb.DescriptorProto{{ Name: proto.String("DeepNested"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, { Name: proto.String("c"), - Type: protodescriptor.FieldDescriptorProto_TYPE_ENUM.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_ENUM.Enum(), TypeName: proto.String(".example.Nested.DeepNested.DeepEnum"), Number: proto.Int32(2), }, }, - EnumType: []*protodescriptor.EnumDescriptorProto{ + EnumType: []*descriptorpb.EnumDescriptorProto{ { Name: proto.String("DeepEnum"), - Value: []*protodescriptor.EnumValueDescriptorProto{ + Value: []*descriptorpb.EnumValueDescriptorProto{ {Name: proto.String("FALSE"), Number: proto.Int32(0)}, {Name: proto.String("TRUE"), Number: proto.Int32(1)}, }, @@ -340,19 +344,19 @@ func TestMessageToQueryParameters(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "nested.a", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "nested.deep.b", In: "query", Required: false, Type: "string", }, - swaggerParameterObject{ + { Name: "nested.deep.c", In: "query", Required: false, @@ -371,13 +375,13 @@ func TestMessageToQueryParameters(t *testing.T) { msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.MsgDescs, - Service: []*protodescriptor.ServiceDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -385,8 +389,8 @@ func TestMessageToQueryParameters(t *testing.T) { }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) message, err := reg.LookupMsg("", ".example."+test.Message) @@ -412,75 +416,75 @@ func TestMessageToQueryParameters(t *testing.T) { // references to query-parameters returns an error message. func TestMessageToQueryParametersRecursive(t *testing.T) { type test struct { - MsgDescs []*protodescriptor.DescriptorProto + MsgDescs []*descriptorpb.DescriptorProto Message string } tests := []test{ - // First test: - // Here we test that a message that references it self through a field will return an error. - // Example proto: - // message DirectRecursiveMessage { - // DirectRecursiveMessage nested = 1; - // } + // First test: + // Here we test that a message that references it self through a field will return an error. + // Example proto: + // message DirectRecursiveMessage { + // DirectRecursiveMessage nested = 1; + // } { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("DirectRecursiveMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ - { - Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), - TypeName: proto.String(".example.DirectRecursiveMessage"), - Number: proto.Int32(1), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.DirectRecursiveMessage"), + Number: proto.Int32(1), }, }, }, }, Message: "DirectRecursiveMessage", }, - // Second test: - // Here we test that a cycle through multiple messages is detected and that an error is returned. - // Sample: - // message Root { NodeMessage nested = 1; } - // message NodeMessage { CycleMessage nested = 1; } - // message CycleMessage { Root nested = 1; } + // Second test: + // Here we test that a cycle through multiple messages is detected and that an error is returned. + // Sample: + // message Root { NodeMessage nested = 1; } + // message NodeMessage { CycleMessage nested = 1; } + // message CycleMessage { Root nested = 1; } { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("RootMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ - { - Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), - TypeName: proto.String(".example.NodeMessage"), - Number: proto.Int32(1), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.NodeMessage"), + Number: proto.Int32(1), }, }, }, - &protodescriptor.DescriptorProto{ + { Name: proto.String("NodeMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ - { - Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), - TypeName: proto.String(".example.CycleMessage"), - Number: proto.Int32(1), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.CycleMessage"), + Number: proto.Int32(1), }, }, }, - &protodescriptor.DescriptorProto{ + { Name: proto.String("CycleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ - { - Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), - TypeName: proto.String(".example.RootMessage"), - Number: proto.Int32(1), + Field: []*descriptorpb.FieldDescriptorProto{ + { + Name: proto.String("nested"), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + TypeName: proto.String(".example.RootMessage"), + Number: proto.Int32(1), }, }, }, @@ -496,13 +500,13 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.MsgDescs, - Service: []*protodescriptor.ServiceDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -510,8 +514,8 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) message, err := reg.LookupMsg("", ".example."+test.Message) @@ -527,20 +531,20 @@ func TestMessageToQueryParametersRecursive(t *testing.T) { func TestMessageToQueryParametersWithJsonName(t *testing.T) { type test struct { - MsgDescs []*protodescriptor.DescriptorProto + MsgDescs []*descriptorpb.DescriptorProto Message string Params []swaggerParameterObject } tests := []test{ { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("test_field_a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), JsonName: proto.String("testFieldA"), }, @@ -549,7 +553,7 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "testFieldA", In: "query", Required: false, @@ -558,24 +562,24 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, }, { - MsgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{ + MsgDescs: []*descriptorpb.DescriptorProto{ + { Name: proto.String("SubMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("test_field_a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), JsonName: proto.String("testFieldA"), }, }, }, - &protodescriptor.DescriptorProto{ + { Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("sub_message"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.SubMessage"), Number: proto.Int32(1), JsonName: proto.String("subMessage"), @@ -585,7 +589,7 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, Message: "ExampleMessage", Params: []swaggerParameterObject{ - swaggerParameterObject{ + { Name: "subMessage.testFieldA", In: "query", Required: false, @@ -603,13 +607,13 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.MsgDescs, - Service: []*protodescriptor.ServiceDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -617,8 +621,8 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) message, err := reg.LookupMsg("", ".example."+test.Message) @@ -636,29 +640,29 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { } func TestApplyTemplateSimple(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -729,10 +733,10 @@ func TestApplyTemplateSimple(t *testing.T) { } func TestApplyTemplateMultiService(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), @@ -740,26 +744,26 @@ func TestApplyTemplateMultiService(t *testing.T) { // Create two services that have the same method name. We will test that the // operation IDs are different - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } - svc2 := &protodescriptor.ServiceDescriptorProto{ + svc2 := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("OtherService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -845,37 +849,34 @@ func TestApplyTemplateMultiService(t *testing.T) { } func TestApplyTemplateOverrideOperationID(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), - Options: &protodescriptor.MethodOptions{}, + Options: &descriptorpb.MethodOptions{}, } swaggerOperation := swagger_options.Operation{ OperationId: "MyExample", } - if err := proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation); err != nil { - t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) - } - - svc := &protodescriptor.ServiceDescriptorProto{ + proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation) + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -935,31 +936,31 @@ func TestApplyTemplateOverrideOperationID(t *testing.T) { } func TestApplyTemplateExtensions(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), - Options: &protodescriptor.MethodOptions{}, + Options: &descriptorpb.MethodOptions{}, } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ DescriptorProto: msgdesc, } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{"a.example/b/c.proto", "a.example/d/e.proto"}, - MessageType: []*protodescriptor.DescriptorProto{msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, - Options: &protodescriptor.FileOptions{}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, + Options: &descriptorpb.FileOptions{}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -994,44 +995,39 @@ func TestApplyTemplateExtensions(t *testing.T) { Info: &swagger_options.Info{ Title: "test", Extensions: map[string]*structpb.Value{ - "x-info-extension": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "bar"}}, + "x-info-extension": {Kind: &structpb.Value_StringValue{StringValue: "bar"}}, }, }, Extensions: map[string]*structpb.Value{ - "x-foo": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "bar"}}, - "x-bar": &structpb.Value{Kind: &structpb.Value_ListValue{ListValue: &structpb.ListValue{ + "x-foo": {Kind: &structpb.Value_StringValue{StringValue: "bar"}}, + "x-bar": {Kind: &structpb.Value_ListValue{ListValue: &structpb.ListValue{ Values: []*structpb.Value{{Kind: &structpb.Value_StringValue{StringValue: "baz"}}}, }}}, }, SecurityDefinitions: &swagger_options.SecurityDefinitions{ Security: map[string]*swagger_options.SecurityScheme{ - "somescheme": &swagger_options.SecurityScheme{ + "somescheme": { Extensions: map[string]*structpb.Value{ - "x-security-baz": &structpb.Value{Kind: &structpb.Value_BoolValue{BoolValue: true}}, + "x-security-baz": {Kind: &structpb.Value_BoolValue{BoolValue: true}}, }, }, }, }, } - if err := proto.SetExtension(proto.Message(file.FileDescriptorProto.Options), swagger_options.E_Openapiv2Swagger, &swagger); err != nil { - t.Fatalf("proto.SetExtension(FileDescriptorProto.Options) failed: %v", err) - } - + proto.SetExtension(proto.Message(file.FileDescriptorProto.Options), swagger_options.E_Openapiv2Swagger, &swagger) swaggerOperation := swagger_options.Operation{ Responses: map[string]*swagger_options.Response{ - "200": &swagger_options.Response{ + "200": { Extensions: map[string]*structpb.Value{ - "x-resp-id": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "resp1000"}}, + "x-resp-id": {Kind: &structpb.Value_StringValue{StringValue: "resp1000"}}, }, }, }, Extensions: map[string]*structpb.Value{ - "x-op-foo": &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: "baz"}}, + "x-op-foo": {Kind: &structpb.Value_StringValue{StringValue: "baz"}}, }, } - if err := proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation); err != nil { - t.Fatalf("proto.SetExtension(MethodDescriptorProto.Options) failed: %v", err) - } + proto.SetExtension(proto.Message(meth.Options), swagger_options.E_Openapiv2Operation, &swaggerOperation) reg := descriptor.NewRegistry() if err := AddErrorDefs(reg); err != nil { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) @@ -1051,11 +1047,36 @@ func TestApplyTemplateExtensions(t *testing.T) { if want, is, name := "2.0", result.Swagger, "Swagger"; !reflect.DeepEqual(is, want) { t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) } - if want, is, name := []extension{ - {key: "x-bar", value: json.RawMessage("[\n \"baz\"\n ]")}, - {key: "x-foo", value: json.RawMessage("\"bar\"")}, - }, result.extensions, "Extensions"; !reflect.DeepEqual(is, want) { - t.Errorf("applyTemplate(%#v).%s = %s want to be %s", file, name, is, want) + if got, want := len(result.extensions), 2; got != want { + t.Fatalf("len(applyTemplate(%#v).Extensions) = %d want to be %d", file, got, want) + } + if got, want := result.extensions[0].key, "x-bar"; got != want { + t.Errorf("applyTemplate(%#v).Extensions[0].key = %s want to be %s", file, got, want) + } + if got, want := result.extensions[1].key, "x-foo"; got != want { + t.Errorf("applyTemplate(%#v).Extensions[1].key = %s want to be %s", file, got, want) + } + { + var got []string + err = marshaler.Unmarshal(result.extensions[0].value, &got) + if err != nil { + t.Fatalf("marshaler.Unmarshal failed: %v", err) + } + want := []string{"baz"} + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf(diff) + } + } + { + var got string + err = marshaler.Unmarshal(result.extensions[1].value, &got) + if err != nil { + t.Fatalf("marshaler.Unmarshal failed: %v", err) + } + want := "bar" + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf(diff) + } } var scheme swaggerSecuritySchemeObject @@ -1093,44 +1114,44 @@ func TestApplyTemplateExtensions(t *testing.T) { } func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String("NestedMessage"), Number: proto.Int32(1), }, }, } - nesteddesc := &protodescriptor.DescriptorProto{ + nesteddesc := &descriptorpb.DescriptorProto{ Name: proto.String("NestedMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("int32"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(), Number: proto.Int32(1), }, { Name: proto.String("bool"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(), Number: proto.Int32(2), }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), ClientStreaming: proto.Bool(false), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } meth.ServerStreaming = proto.Bool(false) @@ -1155,12 +1176,12 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { FieldDescriptorProto: nested.GetField()[1], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1222,7 +1243,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -1252,45 +1273,45 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { } func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("nested"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String("NestedMessage"), Number: proto.Int32(1), }, }, } - nesteddesc := &protodescriptor.DescriptorProto{ + nesteddesc := &descriptorpb.DescriptorProto{ Name: proto.String("NestedMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("int32"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_INT32.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_INT32.Enum(), Number: proto.Int32(1), }, { Name: proto.String("bool"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_BOOL.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_BOOL.Enum(), Number: proto.Int32(2), }, }, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), ClientStreaming: proto.Bool(true), ServerStreaming: proto.Bool(true), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ @@ -1313,12 +1334,12 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { FieldDescriptorProto: nested.GetField()[1], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, nesteddesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, nesteddesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1380,7 +1401,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -1435,30 +1456,30 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { } func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { - reqdesc := &protodescriptor.DescriptorProto{ + reqdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("string"), - Label: protodescriptor.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), Number: proto.Int32(1), }, }, } - respdesc := &protodescriptor.DescriptorProto{ + respdesc := &descriptorpb.DescriptorProto{ Name: proto.String("EmptyMessage"), } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Example"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("EmptyMessage"), ClientStreaming: proto.Bool(false), ServerStreaming: proto.Bool(false), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } req := &descriptor.Message{ @@ -1472,12 +1493,12 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { FieldDescriptorProto: req.GetField()[0], } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{reqdesc, respdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{reqdesc, respdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -1540,7 +1561,7 @@ func TestApplyTemplateRequestWithUnusedReferences(t *testing.T) { t.Errorf("AddErrorDefs(%#v) failed with %v; want success", reg, err) return } - reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) @@ -1563,7 +1584,7 @@ func generateFieldsForJSONReservedName() []*descriptor.Field { fields := make([]*descriptor.Field, 0) fieldName := string("json_name") fieldJSONName := string("jsonNAME") - fieldDescriptor := protodescriptor.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName} + fieldDescriptor := descriptorpb.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName} field := &descriptor.Field{FieldDescriptorProto: &fieldDescriptor} return append(fields, field) } @@ -1576,11 +1597,11 @@ func generateMsgsForJSONReservedName() []*descriptor.Message { fieldJSONName := "fieldAbc" messageName1 := "message1" messageType := "pkg.a.NewType" - pfd := protodescriptor.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName, TypeName: &messageType} + pfd := descriptorpb.FieldDescriptorProto{Name: &fieldName, JsonName: &fieldJSONName, TypeName: &messageType} result = append(result, &descriptor.Message{ - DescriptorProto: &protodescriptor.DescriptorProto{ - Name: &messageName1, Field: []*protodescriptor.FieldDescriptorProto{&pfd}, + DescriptorProto: &descriptorpb.DescriptorProto{ + Name: &messageName1, Field: []*descriptorpb.FieldDescriptorProto{&pfd}, }, }) // The second message, its name is NewName, its type is string @@ -1590,10 +1611,10 @@ func generateMsgsForJSONReservedName() []*descriptor.Message { messageName := "NewType" field := "field_newName" fieldJSONName2 := "RESERVEDJSONNAME" - pfd2 := protodescriptor.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2} + pfd2 := descriptorpb.FieldDescriptorProto{Name: &field, JsonName: &fieldJSONName2} result = append(result, &descriptor.Message{ - DescriptorProto: &protodescriptor.DescriptorProto{ - Name: &messageName, Field: []*protodescriptor.FieldDescriptorProto{&pfd2}, + DescriptorProto: &descriptorpb.DescriptorProto{ + Name: &messageName, Field: []*descriptorpb.FieldDescriptorProto{&pfd2}, }, }) return result @@ -1812,9 +1833,9 @@ func TestSchemaOfField(t *testing.T) { tests := []test{ { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("primitive_field"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), }, }, refs: make(refMap), @@ -1824,10 +1845,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("repeated_primitive_field"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), }, }, refs: make(refMap), @@ -1840,10 +1861,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.StringValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1853,11 +1874,11 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("repeated_wrapped_field"), TypeName: proto.String(".google.protobuf.StringValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), - Label: protodescriptor.FieldDescriptorProto_LABEL_REPEATED.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Label: descriptorpb.FieldDescriptorProto_LABEL_REPEATED.Enum(), }, }, refs: make(refMap), @@ -1870,10 +1891,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.BytesValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1884,10 +1905,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.Int32Value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1898,10 +1919,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.UInt32Value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1912,10 +1933,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.Int64Value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1926,10 +1947,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.UInt64Value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1940,10 +1961,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.FloatValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1954,10 +1975,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.DoubleValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1968,10 +1989,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.BoolValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1982,10 +2003,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.Struct"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -1995,10 +2016,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.Value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -2008,10 +2029,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.ListValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -2024,10 +2045,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("wrapped_field"), TypeName: proto.String(".google.protobuf.NullValue"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: make(refMap), @@ -2037,10 +2058,10 @@ func TestSchemaOfField(t *testing.T) { }, { field: &descriptor.Field{ - FieldDescriptorProto: &protodescriptor.FieldDescriptorProto{ + FieldDescriptorProto: &descriptorpb.FieldDescriptorProto{ Name: proto.String("message_field"), TypeName: proto.String(".example.Message"), - Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum(), }, }, refs: refMap{".example.Message": struct{}{}}, @@ -2051,30 +2072,30 @@ func TestSchemaOfField(t *testing.T) { } reg := descriptor.NewRegistry() - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{ + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{ { - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, - MessageType: []*protodescriptor.DescriptorProto{ + MessageType: []*descriptorpb.DescriptorProto{ { Name: proto.String("Message"), - Field: []*protodescriptor.FieldDescriptorProto{ + Field: []*descriptorpb.FieldDescriptorProto{ { Name: proto.String("value"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Type: descriptorpb.FieldDescriptorProto_TYPE_STRING.Enum(), }, }, }, }, - EnumType: []*protodescriptor.EnumDescriptorProto{ + EnumType: []*descriptorpb.EnumDescriptorProto{ { Name: proto.String("Message"), }, }, - Service: []*protodescriptor.ServiceDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, }, }) @@ -2096,35 +2117,35 @@ func TestRenderMessagesAsDefinition(t *testing.T) { tests := []struct { descr string - msgDescs []*protodescriptor.DescriptorProto + msgDescs []*descriptorpb.DescriptorProto schema map[string]swagger_options.Schema // per-message schema to add defs swaggerDefinitionsObject }{ { descr: "no swagger options", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{}, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{schemaCore: schemaCore{Type: "object"}}, + "Message": {schemaCore: schemaCore{Type: "object"}}, }, }, { descr: "example option", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ - Example: &any.Any{ + "Message": { + Example: &anypb.Any{ TypeUrl: "this_isnt_used", Value: []byte(`{"foo":"bar"}`), }, }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{schemaCore: schemaCore{ + "Message": {schemaCore: schemaCore{ Type: "object", Example: json.RawMessage(`{"foo":"bar"}`), }}, @@ -2132,18 +2153,18 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, { descr: "example option with something non-json", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ - Example: &any.Any{ + "Message": { + Example: &anypb.Any{ Value: []byte(`XXXX anything goes XXXX`), }, }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{schemaCore: schemaCore{ + "Message": {schemaCore: schemaCore{ Type: "object", Example: json.RawMessage(`XXXX anything goes XXXX`), }}, @@ -2151,11 +2172,11 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, { descr: "external docs option", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ + "Message": { ExternalDocs: &swagger_options.ExternalDocumentation{ Description: "glorious docs", Url: "https://nada", @@ -2163,7 +2184,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{ + "Message": { schemaCore: schemaCore{ Type: "object", }, @@ -2176,11 +2197,11 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, { descr: "JSONSchema options", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ + "Message": { JsonSchema: &swagger_options.JSONSchema{ Title: "title", Description: "desc", @@ -2203,7 +2224,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{ + "Message": { schemaCore: schemaCore{ Type: "object", }, @@ -2234,25 +2255,25 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgs := []*descriptor.Message{} for _, msgdesc := range test.msgDescs { - msgdesc.Options = &protodescriptor.MessageOptions{} + msgdesc.Options = &descriptorpb.MessageOptions{} msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } reg := descriptor.NewRegistry() file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.msgDescs, - EnumType: []*protodescriptor.EnumDescriptorProto{}, - Service: []*protodescriptor.ServiceDescriptorProto{}, + EnumType: []*descriptorpb.EnumDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) msgMap := map[string]*descriptor.Message{} @@ -2265,10 +2286,7 @@ func TestRenderMessagesAsDefinition(t *testing.T) { msgMap[msg.FQMN()] = msg if schema, ok := test.schema[name]; ok { - err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) - if err != nil { - t.Fatalf("SetExtension(%s, ...) returned error: %v", msg, err) - } + proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) } } @@ -2453,18 +2471,18 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { func TestMessageOptionsWithGoTemplate(t *testing.T) { tests := []struct { descr string - msgDescs []*protodescriptor.DescriptorProto + msgDescs []*descriptorpb.DescriptorProto schema map[string]swagger_options.Schema // per-message schema to add defs swaggerDefinitionsObject useGoTemplate bool }{ { descr: "external docs option", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ + "Message": { JsonSchema: &swagger_options.JSONSchema{ Title: "{{.Name}}", Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", @@ -2475,7 +2493,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{ + "Message": { schemaCore: schemaCore{ Type: "object", }, @@ -2490,11 +2508,11 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { }, { descr: "external docs option", - msgDescs: []*protodescriptor.DescriptorProto{ - &protodescriptor.DescriptorProto{Name: proto.String("Message")}, + msgDescs: []*descriptorpb.DescriptorProto{ + {Name: proto.String("Message")}, }, schema: map[string]swagger_options.Schema{ - "Message": swagger_options.Schema{ + "Message": { JsonSchema: &swagger_options.JSONSchema{ Title: "{{.Name}}", Description: "Description {{with \"which means nothing\"}}{{printf \"%q\" .}}{{end}}", @@ -2505,7 +2523,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { }, }, defs: map[string]swaggerSchemaObject{ - "Message": swaggerSchemaObject{ + "Message": { schemaCore: schemaCore{ Type: "object", }, @@ -2525,26 +2543,26 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { msgs := []*descriptor.Message{} for _, msgdesc := range test.msgDescs { - msgdesc.Options = &protodescriptor.MessageOptions{} + msgdesc.Options = &descriptorpb.MessageOptions{} msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) } reg := descriptor.NewRegistry() reg.SetUseGoTemplate(test.useGoTemplate) file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), Dependency: []string{}, MessageType: test.msgDescs, - EnumType: []*protodescriptor.EnumDescriptorProto{}, - Service: []*protodescriptor.ServiceDescriptorProto{}, + EnumType: []*descriptorpb.EnumDescriptorProto{}, + Service: []*descriptorpb.ServiceDescriptorProto{}, }, Messages: msgs, } - reg.Load(&plugin.CodeGeneratorRequest{ - ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + reg.Load(&pluginpb.CodeGeneratorRequest{ + ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}, }) msgMap := map[string]*descriptor.Message{} @@ -2557,10 +2575,7 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { msgMap[msg.FQMN()] = msg if schema, ok := test.schema[name]; ok { - err := proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) - if err != nil { - t.Fatalf("SetExtension(%s, ...) returned error: %v", msg, err) - } + proto.SetExtension(d.Options, swagger_options.E_Openapiv2Schema, &schema) } } @@ -2576,18 +2591,18 @@ func TestMessageOptionsWithGoTemplate(t *testing.T) { } func TestTemplateWithoutErrorDefinition(t *testing.T) { - msgdesc := &protodescriptor.DescriptorProto{ + msgdesc := &descriptorpb.DescriptorProto{ Name: proto.String("ExampleMessage"), - Field: []*protodescriptor.FieldDescriptorProto{}, + Field: []*descriptorpb.FieldDescriptorProto{}, } - meth := &protodescriptor.MethodDescriptorProto{ + meth := &descriptorpb.MethodDescriptorProto{ Name: proto.String("Echo"), InputType: proto.String("ExampleMessage"), OutputType: proto.String("ExampleMessage"), } - svc := &protodescriptor.ServiceDescriptorProto{ + svc := &descriptorpb.ServiceDescriptorProto{ Name: proto.String("ExampleService"), - Method: []*protodescriptor.MethodDescriptorProto{meth}, + Method: []*descriptorpb.MethodDescriptorProto{meth}, } msg := &descriptor.Message{ @@ -2595,12 +2610,12 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { } file := descriptor.File{ - FileDescriptorProto: &protodescriptor.FileDescriptorProto{ - SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + FileDescriptorProto: &descriptorpb.FileDescriptorProto{ + SourceCodeInfo: &descriptorpb.SourceCodeInfo{}, Name: proto.String("example.proto"), Package: proto.String("example"), - MessageType: []*protodescriptor.DescriptorProto{msgdesc, msgdesc}, - Service: []*protodescriptor.ServiceDescriptorProto{svc}, + MessageType: []*descriptorpb.DescriptorProto{msgdesc, msgdesc}, + Service: []*descriptorpb.ServiceDescriptorProto{svc}, }, GoPkg: descriptor.GoPackage{ Path: "example.com/path/to/example/example.pb", @@ -2634,7 +2649,7 @@ func TestTemplateWithoutErrorDefinition(t *testing.T) { }, } reg := descriptor.NewRegistry() - reg.Load(&plugin.CodeGeneratorRequest{ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}}) + reg.Load(&pluginpb.CodeGeneratorRequest{ProtoFile: []*descriptorpb.FileDescriptorProto{file.FileDescriptorProto}}) result, err := applyTemplate(param{File: crossLinkFixture(&file), reg: reg}) if err != nil { t.Errorf("applyTemplate(%#v) failed with %v; want success", file, err) diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index d44999a9ee0..017510fae9b 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -7,11 +7,11 @@ import ( "strings" "github.com/golang/glog" - "github.com/golang/protobuf/proto" - plugin "github.com/golang/protobuf/protoc-gen-go/plugin" + pluginpb "github.com/golang/protobuf/protoc-gen-go/plugin" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/codegenerator" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger/internal/genswagger" + "google.golang.org/protobuf/proto" ) var ( @@ -131,15 +131,15 @@ func main() { emitFiles(out) } -func emitFiles(out []*plugin.CodeGeneratorResponse_File) { - emitResp(&plugin.CodeGeneratorResponse{File: out}) +func emitFiles(out []*pluginpb.CodeGeneratorResponse_File) { + emitResp(&pluginpb.CodeGeneratorResponse{File: out}) } func emitError(err error) { - emitResp(&plugin.CodeGeneratorResponse{Error: proto.String(err.Error())}) + emitResp(&pluginpb.CodeGeneratorResponse{Error: proto.String(err.Error())}) } -func emitResp(resp *plugin.CodeGeneratorResponse) { +func emitResp(resp *pluginpb.CodeGeneratorResponse) { buf, err := proto.Marshal(resp) if err != nil { glog.Fatal(err) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 236a8b349fe..2d971edd2f3 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -25,8 +25,6 @@ go_library( importpath = "github.com/grpc-ecosystem/grpc-gateway/v2/runtime", deps = [ "//internal/utilities:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library_gen", - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@go_googleapis//google/api:httpbody_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", @@ -37,6 +35,7 @@ go_library( "@org_golang_google_grpc//grpclog:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", "@org_golang_google_protobuf//reflect/protoregistry:go_default_library", @@ -65,13 +64,12 @@ go_test( deps = [ "//internal/utilities:go_default_library", "//runtime/internal/examplepb:go_default_library", - "@com_github_golang_protobuf//jsonpb:go_default_library_gen", - "@com_github_golang_protobuf//proto:go_default_library", "@com_github_golang_protobuf//ptypes:go_default_library_gen", "@com_github_google_go_cmp//cmp:go_default_library", "@com_github_google_go_cmp//cmp/cmpopts:go_default_library", "@go_googleapis//google/api:httpbody_go_proto", "@go_googleapis//google/rpc:errdetails_go_proto", + "@go_googleapis//google/rpc:status_go_proto", "@io_bazel_rules_go//proto/wkt:duration_go_proto", "@io_bazel_rules_go//proto/wkt:empty_go_proto", "@io_bazel_rules_go//proto/wkt:field_mask_go_proto", @@ -82,6 +80,7 @@ go_test( "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//encoding/protojson:go_default_library", "@org_golang_google_protobuf//proto:go_default_library", "@org_golang_google_protobuf//testing/protocmp:go_default_library", ], diff --git a/runtime/convert.go b/runtime/convert.go index 2c279344dc4..e122dd33949 100644 --- a/runtime/convert.go +++ b/runtime/convert.go @@ -6,10 +6,10 @@ import ( "strconv" "strings" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/ptypes/duration" - "github.com/golang/protobuf/ptypes/timestamp" - "github.com/golang/protobuf/ptypes/wrappers" + durationpb "github.com/golang/protobuf/ptypes/duration" + timestamppb "github.com/golang/protobuf/ptypes/timestamp" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" + "google.golang.org/protobuf/encoding/protojson" ) // String just returns the given string. @@ -205,9 +205,10 @@ func BytesSlice(val, sep string) ([][]byte, error) { } // Timestamp converts the given RFC3339 formatted string into a timestamp.Timestamp. -func Timestamp(val string) (*timestamp.Timestamp, error) { - var r timestamp.Timestamp - err := jsonpb.UnmarshalString(val, &r) +func Timestamp(val string) (*timestamppb.Timestamp, error) { + var r timestamppb.Timestamp + unmarshaler := &protojson.UnmarshalOptions{} + err := unmarshaler.Unmarshal([]byte(val), &r) if err != nil { return nil, err } @@ -215,9 +216,10 @@ func Timestamp(val string) (*timestamp.Timestamp, error) { } // Duration converts the given string into a timestamp.Duration. -func Duration(val string) (*duration.Duration, error) { - var r duration.Duration - err := jsonpb.UnmarshalString(val, &r) +func Duration(val string) (*durationpb.Duration, error) { + var r durationpb.Duration + unmarshaler := &protojson.UnmarshalOptions{} + err := unmarshaler.Unmarshal([]byte(val), &r) if err != nil { return nil, err } @@ -265,54 +267,54 @@ func EnumSlice(val, sep string, enumValMap map[string]int32) ([]int32, error) { */ // StringValue well-known type support as wrapper around string type -func StringValue(val string) (*wrappers.StringValue, error) { - return &wrappers.StringValue{Value: val}, nil +func StringValue(val string) (*wrapperspb.StringValue, error) { + return &wrapperspb.StringValue{Value: val}, nil } // FloatValue well-known type support as wrapper around float32 type -func FloatValue(val string) (*wrappers.FloatValue, error) { +func FloatValue(val string) (*wrapperspb.FloatValue, error) { parsedVal, err := Float32(val) - return &wrappers.FloatValue{Value: parsedVal}, err + return &wrapperspb.FloatValue{Value: parsedVal}, err } // DoubleValue well-known type support as wrapper around float64 type -func DoubleValue(val string) (*wrappers.DoubleValue, error) { +func DoubleValue(val string) (*wrapperspb.DoubleValue, error) { parsedVal, err := Float64(val) - return &wrappers.DoubleValue{Value: parsedVal}, err + return &wrapperspb.DoubleValue{Value: parsedVal}, err } // BoolValue well-known type support as wrapper around bool type -func BoolValue(val string) (*wrappers.BoolValue, error) { +func BoolValue(val string) (*wrapperspb.BoolValue, error) { parsedVal, err := Bool(val) - return &wrappers.BoolValue{Value: parsedVal}, err + return &wrapperspb.BoolValue{Value: parsedVal}, err } // Int32Value well-known type support as wrapper around int32 type -func Int32Value(val string) (*wrappers.Int32Value, error) { +func Int32Value(val string) (*wrapperspb.Int32Value, error) { parsedVal, err := Int32(val) - return &wrappers.Int32Value{Value: parsedVal}, err + return &wrapperspb.Int32Value{Value: parsedVal}, err } // UInt32Value well-known type support as wrapper around uint32 type -func UInt32Value(val string) (*wrappers.UInt32Value, error) { +func UInt32Value(val string) (*wrapperspb.UInt32Value, error) { parsedVal, err := Uint32(val) - return &wrappers.UInt32Value{Value: parsedVal}, err + return &wrapperspb.UInt32Value{Value: parsedVal}, err } // Int64Value well-known type support as wrapper around int64 type -func Int64Value(val string) (*wrappers.Int64Value, error) { +func Int64Value(val string) (*wrapperspb.Int64Value, error) { parsedVal, err := Int64(val) - return &wrappers.Int64Value{Value: parsedVal}, err + return &wrapperspb.Int64Value{Value: parsedVal}, err } // UInt64Value well-known type support as wrapper around uint64 type -func UInt64Value(val string) (*wrappers.UInt64Value, error) { +func UInt64Value(val string) (*wrapperspb.UInt64Value, error) { parsedVal, err := Uint64(val) - return &wrappers.UInt64Value{Value: parsedVal}, err + return &wrapperspb.UInt64Value{Value: parsedVal}, err } // BytesValue well-known type support as wrapper around bytes[] type -func BytesValue(val string) (*wrappers.BytesValue, error) { +func BytesValue(val string) (*wrapperspb.BytesValue, error) { parsedVal, err := Bytes(val) - return &wrappers.BytesValue{Value: parsedVal}, err + return &wrapperspb.BytesValue{Value: parsedVal}, err } diff --git a/runtime/convert_test.go b/runtime/convert_test.go index 4e61f0553ba..a4148c7aedc 100644 --- a/runtime/convert_test.go +++ b/runtime/convert_test.go @@ -1,71 +1,59 @@ package runtime_test import ( - "encoding/json" - "fmt" - "reflect" "testing" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/duration" - "github.com/golang/protobuf/ptypes/timestamp" + durationpb "github.com/golang/protobuf/ptypes/duration" + timestamppb "github.com/golang/protobuf/ptypes/timestamp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "google.golang.org/protobuf/proto" ) func TestConvertTimestamp(t *testing.T) { specs := []struct { name string input string - output *timestamp.Timestamp - wanterr error + output *timestamppb.Timestamp + wanterr bool }{ { name: "a valid RFC3339 timestamp", input: `"2016-05-10T10:19:13.123Z"`, - output: ×tamp.Timestamp{ + output: ×tamppb.Timestamp{ Seconds: 1462875553, Nanos: 123000000, }, - wanterr: nil, + wanterr: false, }, { name: "invalid timestamp", input: `"05-10-2016T10:19:13.123Z"`, output: nil, - wanterr: fmt.Errorf(`bad Timestamp: parsing time "05-10-2016T10:19:13.123Z" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "0-2016T10:19:13.123Z" as "2006"`), + wanterr: true, }, { - name: "JSON number", - input: "123", - output: nil, - wanterr: &json.UnmarshalTypeError{ - Value: "number", - Type: reflect.TypeOf("123"), - Offset: 3, - }, + name: "JSON number", + input: "123", + output: nil, + wanterr: true, }, { - name: "JSON bool", - input: "true", - output: nil, - wanterr: &json.UnmarshalTypeError{ - Value: "bool", - Type: reflect.TypeOf("123"), - Offset: 4, - }, + name: "JSON bool", + input: "true", + output: nil, + wanterr: true, }, } for _, spec := range specs { t.Run(spec.name, func(t *testing.T) { ts, err := runtime.Timestamp(spec.input) - if spec.wanterr != nil { - if !reflect.DeepEqual(err, spec.wanterr) { - t.Errorf("got unexpected error\n%#v\nexpected\n%#v", err, spec.wanterr) - } - return - } - if !proto.Equal(ts, spec.output) { + switch { + case err != nil && !spec.wanterr: + t.Errorf("got unexpected error\n%#v", err) + case err == nil && spec.wanterr: + t.Errorf("did not error when expecte") + case !proto.Equal(ts, spec.output): t.Errorf( "when testing %s; got\n%#v\nexpected\n%#v", spec.name, @@ -81,56 +69,47 @@ func TestConvertDuration(t *testing.T) { specs := []struct { name string input string - output *duration.Duration - wanterr error + output *durationpb.Duration + wanterr bool }{ { name: "a valid duration", input: `"123.456s"`, - output: &duration.Duration{ + output: &durationpb.Duration{ Seconds: 123, Nanos: 456000000, }, - wanterr: nil, + wanterr: false, }, { name: "invalid duration", input: `"123years"`, output: nil, - wanterr: fmt.Errorf(`bad Duration: time: unknown unit years in duration 123years`), + wanterr: true, }, { - name: "JSON number", - input: "123", - output: nil, - wanterr: &json.UnmarshalTypeError{ - Value: "number", - Type: reflect.TypeOf("123"), - Offset: 3, - }, + name: "JSON number", + input: "123", + output: nil, + wanterr: true, }, { - name: "JSON bool", - input: "true", - output: nil, - wanterr: &json.UnmarshalTypeError{ - Value: "bool", - Type: reflect.TypeOf("123"), - Offset: 4, - }, + name: "JSON bool", + input: "true", + output: nil, + wanterr: true, }, } for _, spec := range specs { t.Run(spec.name, func(t *testing.T) { ts, err := runtime.Duration(spec.input) - if spec.wanterr != nil { - if !reflect.DeepEqual(err, spec.wanterr) { - t.Errorf("got unexpected error\n%#v\nexpected\n%#v", err, spec.wanterr) - } - return - } - if !proto.Equal(ts, spec.output) { + switch { + case err != nil && !spec.wanterr: + t.Errorf("got unexpected error\n%#v", err) + case err == nil && spec.wanterr: + t.Errorf("did not error when expecte") + case !proto.Equal(ts, spec.output): t.Errorf( "when testing %s; got\n%#v\nexpected\n%#v", spec.name, diff --git a/runtime/errors_test.go b/runtime/errors_test.go index 5ba54eb97db..02463ee8483 100644 --- a/runtime/errors_test.go +++ b/runtime/errors_test.go @@ -2,15 +2,16 @@ package runtime_test import ( "context" - "encoding/json" "fmt" "net/http" "net/http/httptest" + "strconv" "strings" "testing" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/googleapis/rpc/errdetails" + statuspb "google.golang.org/genproto/googleapis/rpc/status" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -22,7 +23,7 @@ func TestDefaultHTTPError(t *testing.T) { &errdetails.PreconditionFailure{}, ) - for _, spec := range []struct { + for i, spec := range []struct { err error status int msg string @@ -60,41 +61,39 @@ func TestDefaultHTTPError(t *testing.T) { msg: "example error", }, } { - w := httptest.NewRecorder() - req, _ := http.NewRequest("", "", nil) // Pass in an empty request to match the signature - mux := runtime.NewServeMux() - runtime.HTTPError(ctx, mux, &runtime.JSONPb{}, w, req, spec.err) + t.Run(strconv.Itoa(i), func(t *testing.T) { + w := httptest.NewRecorder() + req, _ := http.NewRequest("", "", nil) // Pass in an empty request to match the signature + mux := runtime.NewServeMux() + marshaler := &runtime.JSONPb{} + runtime.HTTPError(ctx, mux, marshaler, w, req, spec.err) - if got, want := w.Header().Get("Content-Type"), "application/json"; got != want { - t.Errorf(`w.Header().Get("Content-Type") = %q; want %q; on spec.err=%v`, got, want, spec.err) - } - if got, want := w.Code, spec.status; got != want { - t.Errorf("w.Code = %d; want %d", got, want) - } - - body := make(map[string]interface{}) - if err := json.Unmarshal(w.Body.Bytes(), &body); err != nil { - t.Errorf("json.Unmarshal(%q, &body) failed with %v; want success", w.Body.Bytes(), err) - continue - } - - if got, want := body["message"].(string), spec.msg; !strings.Contains(got, want) { - t.Errorf(`body["message"] = %q; want %q; on spec.err=%v`, got, want, spec.err) - } + if got, want := w.Header().Get("Content-Type"), "application/json"; got != want { + t.Errorf(`w.Header().Get("Content-Type") = %q; want %q; on spec.err=%v`, got, want, spec.err) + } + if got, want := w.Code, spec.status; got != want { + t.Errorf("w.Code = %d; want %d", got, want) + } - if spec.details != "" { - details, ok := body["details"].([]interface{}) - if !ok { - t.Errorf(`body["details"] = %T; want %T`, body["details"], []interface{}{}) - continue + var st statuspb.Status + if err := marshaler.Unmarshal(w.Body.Bytes(), &st); err != nil { + t.Errorf("marshaler.Unmarshal(%q, &body) failed with %v; want success", w.Body.Bytes(), err) + return } - if len(details) != 1 { - t.Errorf(`len(body["details"]) = %v; want 1`, len(details)) - continue + + if got, want := st.Message, spec.msg; !strings.Contains(got, want) { + t.Errorf(`st.Message = %q; want %q; on spec.err=%v`, got, want, spec.err) } - if details[0].(map[string]interface{})["@type"] != spec.details { - t.Errorf(`details.@type = %s; want %s`, details[0].(map[string]interface{})["@type"], spec.details) + + if spec.details != "" { + if len(st.Details) != 1 { + t.Errorf(`len(st.Details) = %v; want 1`, len(st.Details)) + return + } + if st.Details[0].TypeUrl != spec.details { + t.Errorf(`details.type_url = %s; want %s`, st.Details[0].TypeUrl, spec.details) + } } - } + }) } } diff --git a/runtime/handler.go b/runtime/handler.go index 4cbf8f46259..9c445e83890 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -7,11 +7,11 @@ import ( "net/http" "net/textproto" - "github.com/golang/protobuf/proto" "google.golang.org/genproto/googleapis/api/httpbody" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // ForwardResponseStream forwards the stream from gRPC server to REST client. @@ -61,22 +61,20 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal } var buf []byte + httpBody, isHTTPBody := resp.(*httpbody.HttpBody) switch { case resp == nil: buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response"))) + case isHTTPBody: + buf = httpBody.GetData() + w.Header().Set("Content-Type", httpBody.GetContentType()) default: - if httpBody, ok := resp.(*httpbody.HttpBody); ok { - buf = httpBody.GetData() - w.Header().Set("Content-Type", httpBody.GetContentType()) - } else { - result := map[string]interface{}{"result": resp} - if rb, ok := resp.(responseBody); ok { - result["result"] = rb.XXX_ResponseBody() - } - - buf, err = marshaler.Marshal(result) + result := map[string]interface{}{"result": resp} + if rb, ok := resp.(responseBody); ok { + result["result"] = rb.XXX_ResponseBody() } + buf, err = marshaler.Marshal(result) } if err != nil { diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 270cfab9cc9..3a7aec6c8f2 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -8,12 +8,12 @@ import ( "net/http/httptest" "testing" - "github.com/golang/protobuf/proto" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" pb "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) type fakeReponseBodyWrapper struct { diff --git a/runtime/marshal_httpbodyproto.go b/runtime/marshal_httpbodyproto.go index f55285b5d6c..1f13f4d5f67 100644 --- a/runtime/marshal_httpbodyproto.go +++ b/runtime/marshal_httpbodyproto.go @@ -4,10 +4,10 @@ import ( "google.golang.org/genproto/googleapis/api/httpbody" ) -// SetHTTPBodyMarshaler overwrite the default marshaler with the HTTPBodyMarshaler +// SetHTTPBodyMarshaler overwrites the default marshaler with the HTTPBodyMarshaler func SetHTTPBodyMarshaler(serveMux *ServeMux) { serveMux.marshalers.mimeMap[MIMEWildcard] = &HTTPBodyMarshaler{ - Marshaler: &JSONPb{OrigName: true}, + Marshaler: defaultMarshaler, } } diff --git a/runtime/marshal_httpbodyproto_test.go b/runtime/marshal_httpbodyproto_test.go index 331fd28d3d7..4782d085415 100644 --- a/runtime/marshal_httpbodyproto_test.go +++ b/runtime/marshal_httpbodyproto_test.go @@ -6,12 +6,15 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/genproto/googleapis/api/httpbody" + "google.golang.org/protobuf/encoding/protojson" ) func TestHTTPBodyContentType(t *testing.T) { m := runtime.HTTPBodyMarshaler{ &runtime.JSONPb{ - OrigName: true, + MarshalOptions: protojson.MarshalOptions{ + UseProtoNames: true, + }, }, } expected := "CustomContentType" @@ -31,7 +34,9 @@ func TestHTTPBodyContentType(t *testing.T) { func TestHTTPBodyMarshal(t *testing.T) { m := runtime.HTTPBodyMarshaler{ &runtime.JSONPb{ - OrigName: true, + MarshalOptions: protojson.MarshalOptions{ + UseProtoNames: true, + }, }, } expected := []byte("Some test") diff --git a/runtime/marshal_json_test.go b/runtime/marshal_json_test.go index 1339f928155..67a0370a2b8 100644 --- a/runtime/marshal_json_test.go +++ b/runtime/marshal_json_test.go @@ -7,13 +7,13 @@ import ( "strings" "testing" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/empty" + emptypb "github.com/golang/protobuf/ptypes/empty" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/golang/protobuf/ptypes/timestamp" - "github.com/golang/protobuf/ptypes/wrappers" + timestamppb "github.com/golang/protobuf/ptypes/timestamp" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" + "google.golang.org/protobuf/proto" ) func TestJSONBuiltinMarshal(t *testing.T) { @@ -210,7 +210,7 @@ var ( {data: true, json: "true"}, {data: proto.Bool(true), json: "true"}, {data: (*string)(nil), json: "null"}, - {data: new(empty.Empty), json: "{}"}, + {data: new(emptypb.Empty), json: "{}"}, {data: examplepb.NumericEnum_ONE, json: "1"}, {data: nil, json: "null"}, {data: (*string)(nil), json: "null"}, @@ -238,14 +238,14 @@ var ( json: `"abc"`, }, { - data: ×tamp.Timestamp{ + data: ×tamppb.Timestamp{ Seconds: 1462875553, Nanos: 123000000, }, json: `"2016-05-10T10:19:13.123Z"`, }, { - data: &wrappers.Int32Value{Value: 123}, + data: &wrapperspb.Int32Value{Value: 123}, json: "123", }, { diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index c2fb9dd9d47..c5f06120c74 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -7,17 +7,20 @@ import ( "io" "reflect" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" ) // JSONPb is a Marshaler which marshals/unmarshals into/from JSON -// with the "github.com/golang/protobuf/jsonpb". -// It supports fully functionality of protobuf unlike JSONBuiltin. +// with the "google.golang.org/protobuf/encoding/protojson" marshaler. +// It supports the full functionality of protobuf unlike JSONBuiltin. // // The NewDecoder method returns a DecoderWrapper, so the underlying // *json.Decoder methods can be used. -type JSONPb jsonpb.Marshaler +type JSONPb struct { + protojson.MarshalOptions + protojson.UnmarshalOptions +} // ContentType always returns "application/json". func (*JSONPb) ContentType() string { @@ -47,7 +50,13 @@ func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error { _, err = w.Write(buf) return err } - return (*jsonpb.Marshaler)(j).Marshal(w, p) + b, err := j.MarshalOptions.Marshal(p) + if err != nil { + return err + } + + _, err = w.Write(b) + return err } var ( @@ -74,7 +83,7 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { if rv.Kind() == reflect.Slice { if rv.IsNil() { - if j.EmitDefaults { + if j.EmitUnpopulated { return []byte("[]"), nil } return []byte("null"), nil @@ -93,7 +102,7 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { return nil, err } } - if err = (*jsonpb.Marshaler)(j).Marshal(&buf, rv.Index(i).Interface().(proto.Message)); err != nil { + if err = j.marshalTo(&buf, rv.Index(i).Interface().(proto.Message)); err != nil { return nil, err } } @@ -120,7 +129,7 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { } return json.Marshal(m) } - if enum, ok := rv.Interface().(protoEnum); ok && !j.EnumsAsInts { + if enum, ok := rv.Interface().(protoEnum); ok && !j.UseEnumNumbers { return json.Marshal(enum.String()) } return json.Marshal(rv.Interface()) @@ -172,8 +181,18 @@ func decodeJSONPb(d *json.Decoder, v interface{}) error { if !ok { return decodeNonProtoField(d, v) } - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: allowUnknownFields} - return unmarshaler.UnmarshalNext(d, p) + + // Decode into bytes for marshalling + var b json.RawMessage + err := d.Decode(&b) + if err != nil { + return err + } + + unmarshaler := &protojson.UnmarshalOptions{ + DiscardUnknown: allowUnknownFields, + } + return unmarshaler.Unmarshal([]byte(b), p) } func decodeNonProtoField(d *json.Decoder, v interface{}) error { @@ -186,8 +205,17 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { rv.Set(reflect.New(rv.Type().Elem())) } if rv.Type().ConvertibleTo(typeProtoMessage) { - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: allowUnknownFields} - return unmarshaler.UnmarshalNext(d, rv.Interface().(proto.Message)) + // Decode into bytes for marshalling + var b json.RawMessage + err := d.Decode(&b) + if err != nil { + return err + } + + unmarshaler := &protojson.UnmarshalOptions{ + DiscardUnknown: allowUnknownFields, + } + return unmarshaler.Unmarshal([]byte(b), rv.Interface().(proto.Message)) } rv = rv.Elem() } @@ -218,6 +246,23 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { } return nil } + if rv.Kind() == reflect.Slice { + var sl []json.RawMessage + if err := d.Decode(&sl); err != nil { + return err + } + if sl != nil { + rv.Set(reflect.MakeSlice(rv.Type(), 0, 0)) + } + for _, item := range sl { + bv := reflect.New(rv.Type().Elem()) + if err := unmarshalJSONPb([]byte(item), bv.Interface()); err != nil { + return err + } + rv.Set(reflect.Append(rv, bv.Elem())) + } + return nil + } if _, ok := rv.Interface().(protoEnum); ok { var repr interface{} if err := d.Decode(&repr); err != nil { diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 8d7d969d375..05f494827bf 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -7,16 +7,16 @@ import ( "strings" "testing" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/duration" - "github.com/golang/protobuf/ptypes/empty" + durationpb "github.com/golang/protobuf/ptypes/duration" + emptypb "github.com/golang/protobuf/ptypes/empty" structpb "github.com/golang/protobuf/ptypes/struct" - "github.com/golang/protobuf/ptypes/timestamp" - "github.com/golang/protobuf/ptypes/wrappers" + timestamppb "github.com/golang/protobuf/ptypes/timestamp" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" ) @@ -27,7 +27,7 @@ func TestJSONPbMarshal(t *testing.T) { MappedStringValue: map[string]string{}, MappedNestedValue: map[string]*examplepb.ABitOfEverything_Nested{}, RepeatedEnumValue: []examplepb.NumericEnum{}, - TimestampValue: ×tamp.Timestamp{}, + TimestampValue: ×tamppb.Timestamp{}, Uuid: "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7", Nested: []*examplepb.ABitOfEverything_Nested{ { @@ -52,16 +52,13 @@ func TestJSONPbMarshal(t *testing.T) { } for i, spec := range []struct { - enumsAsInts, emitDefaults bool - indent string - origName bool - verifier func(json string) + useEnumNumbers, emitUnpopulated bool + indent string + useProtoNames bool + verifier func(json string) }{ { verifier: func(json string) { - if strings.ContainsAny(json, " \t\r\n") { - t.Errorf("strings.ContainsAny(%q, %q) = true; want false", json, " \t\r\n") - } if !strings.Contains(json, "ONE") { t.Errorf(`strings.Contains(%q, "ONE") = false; want true`, json) } @@ -71,7 +68,7 @@ func TestJSONPbMarshal(t *testing.T) { }, }, { - enumsAsInts: true, + useEnumNumbers: true, verifier: func(json string) { if strings.Contains(json, "ONE") { t.Errorf(`strings.Contains(%q, "ONE") = true; want false`, json) @@ -79,7 +76,7 @@ func TestJSONPbMarshal(t *testing.T) { }, }, { - emitDefaults: true, + emitUnpopulated: true, verifier: func(json string) { if want := `"sfixed32Value"`; !strings.Contains(json, want) { t.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want) @@ -95,7 +92,7 @@ func TestJSONPbMarshal(t *testing.T) { }, }, { - origName: true, + useProtoNames: true, verifier: func(json string) { if want := "uint64_value"; !strings.Contains(json, want) { t.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want) @@ -105,10 +102,12 @@ func TestJSONPbMarshal(t *testing.T) { } { t.Run(strconv.Itoa(i), func(t *testing.T) { m := runtime.JSONPb{ - EnumsAsInts: spec.enumsAsInts, - EmitDefaults: spec.emitDefaults, - Indent: spec.indent, - OrigName: spec.origName, + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: spec.emitUnpopulated, + Indent: spec.indent, + UseProtoNames: spec.useProtoNames, + UseEnumNumbers: spec.useEnumNumbers, + }, } buf, err := m.Marshal(&msg) if err != nil { @@ -116,7 +115,8 @@ func TestJSONPbMarshal(t *testing.T) { } var got examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(string(buf), &got); err != nil { + unmarshaler := &protojson.UnmarshalOptions{} + if err = unmarshaler.Unmarshal(buf, &got); err != nil { t.Errorf("jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v", string(buf), err, spec) } if diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != "" { @@ -131,7 +131,7 @@ func TestJSONPbMarshal(t *testing.T) { func TestJSONPbMarshalFields(t *testing.T) { var m runtime.JSONPb - m.EnumsAsInts = true // builtin fixtures include an enum, expected to be marshaled as int + m.UseEnumNumbers = true // builtin fixtures include an enum, expected to be marshaled as int for _, spec := range builtinFieldFixtures { buf, err := m.Marshal(spec.data) if err != nil { @@ -142,7 +142,7 @@ func TestJSONPbMarshalFields(t *testing.T) { } } - m.EnumsAsInts = false + m.UseEnumNumbers = false buf, err := m.Marshal(examplepb.NumericEnum_ONE) if err != nil { t.Errorf("m.Marshal(%#v) failed with %v; want success", examplepb.NumericEnum_ONE, err) @@ -251,7 +251,7 @@ func TestJSONPbEncoder(t *testing.T) { MappedStringValue: map[string]string{}, MappedNestedValue: map[string]*examplepb.ABitOfEverything_Nested{}, RepeatedEnumValue: []examplepb.NumericEnum{}, - TimestampValue: ×tamp.Timestamp{}, + TimestampValue: ×tamppb.Timestamp{}, Uuid: "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7", Nested: []*examplepb.ABitOfEverything_Nested{ { @@ -275,19 +275,13 @@ func TestJSONPbEncoder(t *testing.T) { } for i, spec := range []struct { - enumsAsInts, emitDefaults bool - indent string - origName bool - verifier func(json string) + useEnumNumbers, emitUnpopulated bool + indent string + useProtoNames bool + verifier func(json string) }{ { verifier: func(json string) { - // remove trailing delimiter before verifying - json = strings.TrimSuffix(json, "\n") - - if strings.ContainsAny(json, " \t\r\n") { - t.Errorf("strings.ContainsAny(%q, %q) = true; want false", json, " \t\r\n") - } if !strings.Contains(json, "ONE") { t.Errorf(`strings.Contains(%q, "ONE") = false; want true`, json) } @@ -297,7 +291,7 @@ func TestJSONPbEncoder(t *testing.T) { }, }, { - enumsAsInts: true, + useEnumNumbers: true, verifier: func(json string) { if strings.Contains(json, "ONE") { t.Errorf(`strings.Contains(%q, "ONE") = true; want false`, json) @@ -305,7 +299,7 @@ func TestJSONPbEncoder(t *testing.T) { }, }, { - emitDefaults: true, + emitUnpopulated: true, verifier: func(json string) { if want := `"sfixed32Value"`; !strings.Contains(json, want) { t.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want) @@ -321,7 +315,7 @@ func TestJSONPbEncoder(t *testing.T) { }, }, { - origName: true, + useProtoNames: true, verifier: func(json string) { if want := "uint64_value"; !strings.Contains(json, want) { t.Errorf(`strings.Contains(%q, %q) = false; want true`, json, want) @@ -330,10 +324,12 @@ func TestJSONPbEncoder(t *testing.T) { }, } { m := runtime.JSONPb{ - EnumsAsInts: spec.enumsAsInts, - EmitDefaults: spec.emitDefaults, - Indent: spec.indent, - OrigName: spec.origName, + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: spec.emitUnpopulated, + Indent: spec.indent, + UseProtoNames: spec.useProtoNames, + UseEnumNumbers: spec.useEnumNumbers, + }, } var buf bytes.Buffer @@ -343,7 +339,8 @@ func TestJSONPbEncoder(t *testing.T) { } var got examplepb.ABitOfEverything - if err := jsonpb.UnmarshalString(buf.String(), &got); err != nil { + unmarshaler := &protojson.UnmarshalOptions{} + if err := unmarshaler.Unmarshal(buf.Bytes(), &got); err != nil { t.Errorf("jsonpb.UnmarshalString(%q, &got) failed with %v; want success; spec=%v", buf.String(), err, spec) } if diff := cmp.Diff(&got, &msg, protocmp.Transform()); diff != "" { @@ -368,7 +365,7 @@ func TestJSONPbEncoderFields(t *testing.T) { } } - m.EnumsAsInts = true + m.UseEnumNumbers = true buf, err := m.Marshal(examplepb.NumericEnum_ONE) if err != nil { t.Errorf("m.Marshal(%#v) failed with %v; want success", examplepb.NumericEnum_ONE, err) @@ -552,26 +549,23 @@ var ( json: `{"true":{"id":"foo"}}`, }, { - data: &duration.Duration{ + data: &durationpb.Duration{ Seconds: 123, Nanos: 456000000, }, json: `"123.456s"`, }, { - data: ×tamp.Timestamp{ + data: ×tamppb.Timestamp{ Seconds: 1462875553, Nanos: 123000000, }, json: `"2016-05-10T10:19:13.123Z"`, }, { - data: new(empty.Empty), + data: new(emptypb.Empty), json: "{}", }, - - // TODO(yugui) Enable unmarshaling of the following examples - // once jsonpb supports them. { data: &structpb.Value{ Kind: new(structpb.Value_NullValue), @@ -621,31 +615,31 @@ var ( }, { - data: &wrappers.BoolValue{Value: true}, + data: &wrapperspb.BoolValue{Value: true}, json: "true", }, { - data: &wrappers.DoubleValue{Value: 123.456}, + data: &wrapperspb.DoubleValue{Value: 123.456}, json: "123.456", }, { - data: &wrappers.FloatValue{Value: 123.456}, + data: &wrapperspb.FloatValue{Value: 123.456}, json: "123.456", }, { - data: &wrappers.Int32Value{Value: -123}, + data: &wrapperspb.Int32Value{Value: -123}, json: "-123", }, { - data: &wrappers.Int64Value{Value: -123}, + data: &wrapperspb.Int64Value{Value: -123}, json: `"-123"`, }, { - data: &wrappers.UInt32Value{Value: 123}, + data: &wrapperspb.UInt32Value{Value: 123}, json: "123", }, { - data: &wrappers.UInt64Value{Value: 123}, + data: &wrapperspb.UInt64Value{Value: 123}, json: `"123"`, }, // TODO(yugui) Add other well-known types once jsonpb supports them @@ -653,144 +647,210 @@ var ( ) func TestJSONPbMarshalResponseBodies(t *testing.T) { + marshaler := &runtime.JSONPb{} for i, spec := range []struct { - input interface{} - emitDefaults bool - verifier func(json string) + input interface{} + emitUnpopulated bool + verifier func(*testing.T, interface{}, []byte) }{ { input: &examplepb.ResponseBodyOut{ Response: &examplepb.ResponseBodyOut_Response{Data: "abcdef"}, }, - verifier: func(json string) { - expected := `{"response":{"data":"abcdef"}}` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out examplepb.ResponseBodyOut + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, &out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { - emitDefaults: true, - input: &examplepb.ResponseBodyOut{}, - verifier: func(json string) { - expected := `{"response":null}` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + emitUnpopulated: true, + input: &examplepb.ResponseBodyOut{}, + verifier: func(t *testing.T, input interface{}, json []byte) { + var out examplepb.ResponseBodyOut + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, &out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: &examplepb.RepeatedResponseBodyOut_Response{}, - verifier: func(json string) { - expected := `{}` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, &out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { - emitDefaults: true, - input: &examplepb.RepeatedResponseBodyOut_Response{}, - verifier: func(json string) { - expected := `{"data":"","type":"UNKNOWN"}` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + emitUnpopulated: true, + input: &examplepb.RepeatedResponseBodyOut_Response{}, + verifier: func(t *testing.T, input interface{}, json []byte) { + var out examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, &out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil), - verifier: func(json string) { - expected := `null` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []*examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { - emitDefaults: true, - input: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil), - verifier: func(json string) { - expected := `[]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + emitUnpopulated: true, + input: ([]*examplepb.RepeatedResponseBodyOut_Response)(nil), + verifier: func(t *testing.T, _ interface{}, json []byte) { + var out []*examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff([]*examplepb.RepeatedResponseBodyOut_Response{}, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: []*examplepb.RepeatedResponseBodyOut_Response{}, - verifier: func(json string) { - expected := `[]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []*examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: []string{"something"}, - verifier: func(json string) { - expected := `["something"]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []string + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: []string{}, - verifier: func(json string) { - expected := `[]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []string + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: ([]string)(nil), - verifier: func(json string) { - expected := `null` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []string + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { - emitDefaults: true, - input: ([]string)(nil), - verifier: func(json string) { - expected := `[]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + emitUnpopulated: true, + input: ([]string)(nil), + verifier: func(t *testing.T, _ interface{}, json []byte) { + var out []string + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff([]string{}, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { input: []*examplepb.RepeatedResponseBodyOut_Response{ - &examplepb.RepeatedResponseBodyOut_Response{}, - &examplepb.RepeatedResponseBodyOut_Response{ + {}, + { Data: "abc", Type: examplepb.RepeatedResponseBodyOut_Response_A, }, }, - verifier: func(json string) { - expected := `[{},{"data":"abc","type":"A"}]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []*examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, { - emitDefaults: true, + emitUnpopulated: true, input: []*examplepb.RepeatedResponseBodyOut_Response{ - &examplepb.RepeatedResponseBodyOut_Response{}, - &examplepb.RepeatedResponseBodyOut_Response{ + {}, + { Data: "abc", Type: examplepb.RepeatedResponseBodyOut_Response_B, }, }, - verifier: func(json string) { - expected := `[{"data":"","type":"UNKNOWN"},{"data":"abc","type":"B"}]` - if json != expected { - t.Errorf("json not equal (%q, %q)", json, expected) + verifier: func(t *testing.T, input interface{}, json []byte) { + var out []*examplepb.RepeatedResponseBodyOut_Response + err := marshaler.Unmarshal(json, &out) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + diff := cmp.Diff(input, out, protocmp.Transform()) + if diff != "" { + t.Errorf("json not equal:\n%s", diff) } }, }, @@ -798,7 +858,9 @@ func TestJSONPbMarshalResponseBodies(t *testing.T) { t.Run(strconv.Itoa(i), func(t *testing.T) { m := runtime.JSONPb{ - EmitDefaults: spec.emitDefaults, + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: spec.emitUnpopulated, + }, } val := spec.input buf, err := m.Marshal(val) @@ -806,7 +868,7 @@ func TestJSONPbMarshalResponseBodies(t *testing.T) { t.Errorf("m.Marshal(%v) failed with %v; want success; spec=%v", val, err, spec) } if spec.verifier != nil { - spec.verifier(string(buf)) + spec.verifier(t, spec.input, buf) } }) } diff --git a/runtime/marshal_proto.go b/runtime/marshal_proto.go index f65d1a2676b..69eeecc9224 100644 --- a/runtime/marshal_proto.go +++ b/runtime/marshal_proto.go @@ -4,8 +4,9 @@ import ( "io" "errors" - "github.com/golang/protobuf/proto" "io/ioutil" + + "google.golang.org/protobuf/proto" ) // ProtoMarshaller is a Marshaller which marshals/unmarshals into/from serialize proto bytes diff --git a/runtime/marshal_proto_test.go b/runtime/marshal_proto_test.go index 131918c12d8..df156ac0b16 100644 --- a/runtime/marshal_proto_test.go +++ b/runtime/marshal_proto_test.go @@ -4,10 +4,10 @@ import ( "bytes" "testing" - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/timestamp" + timestamppb "github.com/golang/protobuf/ptypes/timestamp" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" + "google.golang.org/protobuf/proto" ) var message = &examplepb.ABitOfEverything{ @@ -16,7 +16,7 @@ var message = &examplepb.ABitOfEverything{ MappedStringValue: nil, MappedNestedValue: nil, RepeatedEnumValue: nil, - TimestampValue: ×tamp.Timestamp{}, + TimestampValue: ×tamppb.Timestamp{}, Uuid: "6EC2446F-7E89-4127-B3E6-5C05E6BECBA7", Nested: []*examplepb.ABitOfEverything_Nested{ { diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 5cc53ae4f68..146b34a7dae 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -3,6 +3,8 @@ package runtime import ( "errors" "net/http" + + "google.golang.org/protobuf/encoding/protojson" ) // MIMEWildcard is the fallback MIME type used for requests which do not match @@ -13,7 +15,14 @@ var ( acceptHeader = http.CanonicalHeaderKey("Accept") contentTypeHeader = http.CanonicalHeaderKey("Content-Type") - defaultMarshaler = &JSONPb{OrigName: true} + defaultMarshaler = &JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + // TODO(johanbrandhorst): Change this to true before v2 + EmitUnpopulated: false, + // TODO(johanbrandhorst): Change this to false before v2 + UseProtoNames: true, + }, + } ) // MarshalerForRequest returns the inbound/outbound marshalers for this request. diff --git a/runtime/mux.go b/runtime/mux.go index 70caae1dade..b33bf47d7d5 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -7,10 +7,10 @@ import ( "net/textproto" "strings" - "github.com/golang/protobuf/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" ) // A HandlerFunc handles a specific pair of path pattern and HTTP method. diff --git a/runtime/proto2_convert.go b/runtime/proto2_convert.go index a3151e2a552..d549407f20f 100644 --- a/runtime/proto2_convert.go +++ b/runtime/proto2_convert.go @@ -1,7 +1,7 @@ package runtime import ( - "github.com/golang/protobuf/proto" + "google.golang.org/protobuf/proto" ) // StringP returns a pointer to a string whose pointee is same as the given string value. diff --git a/runtime/query.go b/runtime/query.go index 61cae533557..aab332ae56c 100644 --- a/runtime/query.go +++ b/runtime/query.go @@ -11,7 +11,7 @@ import ( "time" "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/wrappers" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "google.golang.org/genproto/protobuf/field_mask" "google.golang.org/grpc/grpclog" @@ -274,51 +274,51 @@ func parseMessage(msgDescriptor protoreflect.MessageDescriptor, value string) (p if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.DoubleValue{Value: v} + msg = &wrapperspb.DoubleValue{Value: v} case "google.protobuf.FloatValue": v, err := strconv.ParseFloat(value, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.FloatValue{Value: float32(v)} + msg = &wrapperspb.FloatValue{Value: float32(v)} case "google.protobuf.Int64Value": v, err := strconv.ParseInt(value, 10, 64) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.Int64Value{Value: v} + msg = &wrapperspb.Int64Value{Value: v} case "google.protobuf.Int32Value": v, err := strconv.ParseInt(value, 10, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.Int32Value{Value: int32(v)} + msg = &wrapperspb.Int32Value{Value: int32(v)} case "google.protobuf.UInt64Value": v, err := strconv.ParseUint(value, 10, 64) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.UInt64Value{Value: v} + msg = &wrapperspb.UInt64Value{Value: v} case "google.protobuf.UInt32Value": v, err := strconv.ParseUint(value, 10, 32) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.UInt32Value{Value: uint32(v)} + msg = &wrapperspb.UInt32Value{Value: uint32(v)} case "google.protobuf.BoolValue": v, err := strconv.ParseBool(value) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.BoolValue{Value: v} + msg = &wrapperspb.BoolValue{Value: v} case "google.protobuf.StringValue": - msg = &wrappers.StringValue{Value: value} + msg = &wrapperspb.StringValue{Value: value} case "google.protobuf.BytesValue": v, err := base64.StdEncoding.DecodeString(value) if err != nil { return protoreflect.Value{}, err } - msg = &wrappers.BytesValue{Value: v} + msg = &wrapperspb.BytesValue{Value: v} case "google.protobuf.FieldMask": fm := &field_mask.FieldMask{} for _, v := range strings.Split(value, ",") { diff --git a/runtime/query_test.go b/runtime/query_test.go index 8c7e68af720..c7ded11eb97 100644 --- a/runtime/query_test.go +++ b/runtime/query_test.go @@ -8,7 +8,7 @@ import ( "time" "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/wrappers" + wrapperspb "github.com/golang/protobuf/ptypes/wrappers" "github.com/google/go-cmp/cmp" "github.com/grpc-ecosystem/grpc-gateway/v2/internal/utilities" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" @@ -163,21 +163,21 @@ func TestPopulateParameters(t *testing.T) { StringValue: "str", BytesValue: []byte("bytes"), RepeatedValue: []string{"a", "b", "c"}, - RepeatedMessage: []*wrappers.UInt64Value{{Value: 1}, {Value: 2}, {Value: 3}}, + RepeatedMessage: []*wrapperspb.UInt64Value{{Value: 1}, {Value: 2}, {Value: 3}}, EnumValue: examplepb.EnumValue_Y, RepeatedEnum: []examplepb.EnumValue{examplepb.EnumValue_Y, examplepb.EnumValue_Z, examplepb.EnumValue_X}, TimestampValue: timePb, DurationValue: durationPb, FieldmaskValue: fieldmaskPb, - WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, - WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, - WrapperInt64Value: &wrappers.Int64Value{Value: -1}, - WrapperInt32Value: &wrappers.Int32Value{Value: -2}, - WrapperUInt64Value: &wrappers.UInt64Value{Value: 3}, - WrapperUInt32Value: &wrappers.UInt32Value{Value: 4}, - WrapperBoolValue: &wrappers.BoolValue{Value: true}, - WrapperStringValue: &wrappers.StringValue{Value: "str"}, - WrapperBytesValue: &wrappers.BytesValue{Value: []byte("bytes")}, + WrapperFloatValue: &wrapperspb.FloatValue{Value: 1.5}, + WrapperDoubleValue: &wrapperspb.DoubleValue{Value: 2.5}, + WrapperInt64Value: &wrapperspb.Int64Value{Value: -1}, + WrapperInt32Value: &wrapperspb.Int32Value{Value: -2}, + WrapperUInt64Value: &wrapperspb.UInt64Value{Value: 3}, + WrapperUInt32Value: &wrapperspb.UInt32Value{Value: 4}, + WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, + WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, + WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("bytes")}, MapValue: map[string]string{ "key": "value", "second": "bar", @@ -197,7 +197,7 @@ func TestPopulateParameters(t *testing.T) { MapValue12: map[string]float64{"key": 2.5}, MapValue14: map[string]bool{"key": true}, MapValue15: map[bool]string{true: "value"}, - MapValue16: map[string]*wrappers.UInt64Value{"key": {Value: 2}}, + MapValue16: map[string]*wrapperspb.UInt64Value{"key": {Value: 2}}, }, }, { @@ -244,15 +244,15 @@ func TestPopulateParameters(t *testing.T) { TimestampValue: timePb, DurationValue: durationPb, FieldmaskValue: fieldmaskPb, - WrapperFloatValue: &wrappers.FloatValue{Value: 1.5}, - WrapperDoubleValue: &wrappers.DoubleValue{Value: 2.5}, - WrapperInt64Value: &wrappers.Int64Value{Value: -1}, - WrapperInt32Value: &wrappers.Int32Value{Value: -2}, - WrapperUInt64Value: &wrappers.UInt64Value{Value: 3}, - WrapperUInt32Value: &wrappers.UInt32Value{Value: 4}, - WrapperBoolValue: &wrappers.BoolValue{Value: true}, - WrapperStringValue: &wrappers.StringValue{Value: "str"}, - WrapperBytesValue: &wrappers.BytesValue{Value: []byte("bytes")}, + WrapperFloatValue: &wrapperspb.FloatValue{Value: 1.5}, + WrapperDoubleValue: &wrapperspb.DoubleValue{Value: 2.5}, + WrapperInt64Value: &wrapperspb.Int64Value{Value: -1}, + WrapperInt32Value: &wrapperspb.Int32Value{Value: -2}, + WrapperUInt64Value: &wrapperspb.UInt64Value{Value: 3}, + WrapperUInt32Value: &wrapperspb.UInt32Value{Value: 4}, + WrapperBoolValue: &wrapperspb.BoolValue{Value: true}, + WrapperStringValue: &wrapperspb.StringValue{Value: "str"}, + WrapperBytesValue: &wrapperspb.BytesValue{Value: []byte("bytes")}, }, }, { From 050d8dacc9539a8067348856196cb9960e36ba70 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 19 May 2020 15:41:59 +0530 Subject: [PATCH 0413/1518] Add Pull Request Template (#1366) * added PULL_REQUEST_TEMPLATE.md * moved ISSUE_TEMPLATE and ISSUE_TEMPLATE to .github * moved PULL_REQUEST_TEMPLATE.md file to .github --- .github/ISSUE_TEMPLATE.md | 66 ++++++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 24 ++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000000..9cb92f9eecc --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,66 @@ +# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps before submitting an issue. + +- [ ] Check if your issue has already been reported (https://github.com/grpc-ecosystem/grpc-gateway/issues). +- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases). +- [ ] Update your copy of the `grpc-gateway` library to the latest version from github: + ```sh + go get -u github.com/grpc-ecosystem/grpc-gateway + ``` +- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-swagger` binary from your `PATH`, + and reinstall the latest versions: + ```sh + go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway + go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger + ``` + +## I still have a problem! + +Please consider reaching out for help on a chat forum, such as +[Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway). +It's much easier to help with common debugging steps in a chat, and some of +the maintainers are reading the channel regularly. If you +submit an issue which is clearly an environment setup problem, or it's obvious +you haven't tried seeking help somewhere else first, we may close your issue. + +## I still have a problem! + +Please follow these steps to submit a bug report: + +### Bug reports: + +Fill in the following sections with explanations of what's gone wrong. + +### Steps you follow to reproduce the error: + +```html + +``` + +Your steps here. + +### What did you expect to happen instead: + +```html + +``` + +Your answer here. + +### What's your theory on why it isn't working: + +```html + +``` + +Your theory here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..a11d1705de9 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,24 @@ + + +#### References to other Issues or PRs + + + +#### Have you read the [Contributing Guidelines](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md)? + +#### Brief description of what is fixed or changed + +#### Other comments From eaa3b8f337d73fcbeb45167061a541f0229c42a2 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Tue, 19 May 2020 16:16:08 +0530 Subject: [PATCH 0414/1518] Delete ISSUE_TEMPLATE.md (#1368) --- ISSUE_TEMPLATE.md | 66 ----------------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 9cb92f9eecc..00000000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,66 +0,0 @@ -# The gRPC-Gateway project is maintained by volunteers in their spare time. Please follow these troubleshooting steps before submitting an issue. - -- [ ] Check if your issue has already been reported (https://github.com/grpc-ecosystem/grpc-gateway/issues). -- [ ] Update your protoc to the [latest version](https://github.com/google/protobuf/releases). -- [ ] Update your copy of the `grpc-gateway` library to the latest version from github: - ```sh - go get -u github.com/grpc-ecosystem/grpc-gateway - ``` -- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-swagger` binary from your `PATH`, - and reinstall the latest versions: - ```sh - go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger - ``` - -## I still have a problem! - -Please consider reaching out for help on a chat forum, such as -[Gophers Slack](https://invite.slack.golangbridge.org/) (channel #grpc-gateway). -It's much easier to help with common debugging steps in a chat, and some of -the maintainers are reading the channel regularly. If you -submit an issue which is clearly an environment setup problem, or it's obvious -you haven't tried seeking help somewhere else first, we may close your issue. - -## I still have a problem! - -Please follow these steps to submit a bug report: - -### Bug reports: - -Fill in the following sections with explanations of what's gone wrong. - -### Steps you follow to reproduce the error: - -```html - -``` - -Your steps here. - -### What did you expect to happen instead: - -```html - -``` - -Your answer here. - -### What's your theory on why it isn't working: - -```html - -``` - -Your theory here. From 008092028579ba606146bfea44faacfbbc14c16a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 May 2020 14:48:18 +0000 Subject: [PATCH 0415/1518] Update google.golang.org/genproto commit hash to 08726f3 --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8ce286e7899..d40369cac87 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587 + google.golang.org/genproto v0.0.0-20200519141106-08726f379972 google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.23.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index f0c0c294396..c97a0e42088 100644 --- a/go.sum +++ b/go.sum @@ -78,8 +78,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587 h1:1Ym+vvUpq1ZHvxzn34gENJX8U4aKO+vhy2P/2+Xl6qQ= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200519141106-08726f379972 h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI= +google.golang.org/genproto v0.0.0-20200519141106-08726f379972/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/repositories.bzl b/repositories.bzl index 69f8da71649..5948bef0727 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:1Ym+vvUpq1ZHvxzn34gENJX8U4aKO+vhy2P/2+Xl6qQ=", - version = "v0.0.0-20200515170657-fc4c6c6a6587", + sum = "h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI=", + version = "v0.0.0-20200519141106-08726f379972", ) go_repository( name = "org_golang_google_grpc", From 6f539048b675c34438fa3441982f7272d0f094cc Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Thu, 21 May 2020 13:37:08 +0530 Subject: [PATCH 0416/1518] PR and Issue template added to v2 branch (#1371) * Delete ISSUE_TEMPLATE.md * Create ISSUE_TEMPLATE.md * Create PULL_REQUEST_TEMPLATE.md --- .../ISSUE_TEMPLATE.md | 0 .github/PULL_REQUEST_TEMPLATE.md | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+) rename ISSUE_TEMPLATE.md => .github/ISSUE_TEMPLATE.md (100%) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md similarity index 100% rename from ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..a11d1705de9 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,24 @@ + + +#### References to other Issues or PRs + + + +#### Have you read the [Contributing Guidelines](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/CONTRIBUTING.md)? + +#### Brief description of what is fixed or changed + +#### Other comments From b5646780d6795a574eaba978905e507cfb70c2f9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 May 2020 11:36:31 +0000 Subject: [PATCH 0417/1518] Update google.golang.org/genproto commit hash to e9a78aa --- go.mod | 2 +- go.sum | 4 ++-- repositories.bzl | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index d40369cac87..75290da1a20 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect - google.golang.org/genproto v0.0.0-20200519141106-08726f379972 + google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7 google.golang.org/grpc v1.29.1 google.golang.org/protobuf v1.23.0 gopkg.in/yaml.v2 v2.2.3 // indirect diff --git a/go.sum b/go.sum index c97a0e42088..34165a8998a 100644 --- a/go.sum +++ b/go.sum @@ -78,8 +78,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200519141106-08726f379972 h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI= -google.golang.org/genproto v0.0.0-20200519141106-08726f379972/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7 h1:JUs1uIDQ46c7iI0QuMPzAHqXaSmqKF0f9freFMk2ivs= +google.golang.org/genproto v0.0.0-20200521103424-e9a78aa275b7/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= diff --git a/repositories.bzl b/repositories.bzl index 5948bef0727..f0a5e3541b6 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -78,8 +78,8 @@ def go_repositories(): go_repository( name = "org_golang_google_genproto", importpath = "google.golang.org/genproto", - sum = "h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI=", - version = "v0.0.0-20200519141106-08726f379972", + sum = "h1:JUs1uIDQ46c7iI0QuMPzAHqXaSmqKF0f9freFMk2ivs=", + version = "v0.0.0-20200521103424-e9a78aa275b7", ) go_repository( name = "org_golang_google_grpc", From 2d9c2c0926798ac1ce179848adbff5404315e4d0 Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Thu, 21 May 2020 20:56:27 +0530 Subject: [PATCH 0418/1518] Fix prose in customizingyourgateway.md (#1359) * improved customizingyourgateway.md * removed tabs * formatted go snippets in customizingyourgateway.md * Revert "formatted go snippets in customizingyourgateway.md" This reverts commit f80d90956bef63eb7b2005eddfd706054b5f57d2. deleted: .DS_Store deleted: docs/.DS_Store deleted: docs/_docs/.DS_Store modified: docs/_docs/customizingyourgateway.md * Revert "Revert "formatted go snippets in customizingyourgateway.md"" This reverts commit e3d2ad1829f9d5edbf04697e65d32a8da4aa4c48. * Revert "Revert "Revert "formatted go snippets in customizingyourgateway.md""" This reverts commit bab70451e8c8c23750fa74889e63ed94001d5f36. * formatted go snippet * reverted code * reverted changes * removed unwanted spaces --- docs/_docs/customizingyourgateway.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 55e0a457661..581aa3daae9 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -63,7 +63,7 @@ type Marshaler struct { // A string to indent each level by. The presence of this field will // also cause a space to appear between the field separator and - // value, and for newlines to be appear between fields and array + // value, and for newlines to appear between fields and array // elements. Indent string @@ -79,8 +79,7 @@ also, this example code does not remove the query parameter `pretty` from furthe ## Customize unmarshaling per Content-Type -Having different unmarshaling options per Content-Type is possible by wrapping the decoder and -and passing that to `runtime.WithMarshalerOption`: +Having different unmarshaling options per Content-Type is possible by wrapping the decoder and passing that to `runtime.WithMarshalerOption`: ```go type m struct { @@ -303,7 +302,7 @@ to RPC methods that have a unary response. When the method has a streaming response, grpc-gateway handles that by emitting a newline-separated stream of "chunks". Each -chunk is an envelope that can container either a response message +chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, and only when the RPC handler ends abnormally (i.e. with an error code). @@ -317,7 +316,7 @@ mux := runtime.NewServeMux( ``` The signature of the handler is much more rigid because we need -to know the structure of the error payload in order to properly +to know the structure of the error payload to properly encode the "chunk" schema into a Swagger/OpenAPI spec. So the function must return a `*runtime.StreamError`. The handler From 7404eadd890344ce0d9ab1ada9467fbe6cdf95ad Mon Sep 17 00:00:00 2001 From: Rajiv Singh Date: Fri, 22 May 2020 13:27:05 +0530 Subject: [PATCH 0419/1518] Improve prose in customizingyourgateway.md (#1374) * Update customizingyourgateway.md * Update customizingyourgateway.md --- docs/_docs/customizingyourgateway.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index c016f4007bc..e1df0aa3209 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -63,7 +63,7 @@ type Marshaler struct { // A string to indent each level by. The presence of this field will // also cause a space to appear between the field separator and - // value, and for newlines to be appear between fields and array + // value, and for newlines to appear between fields and array // elements. Indent string @@ -79,8 +79,7 @@ also, this example code does not remove the query parameter `pretty` from furthe ## Customize unmarshaling per Content-Type -Having different unmarshaling options per Content-Type is possible by wrapping the decoder and -and passing that to `runtime.WithMarshalerOption`: +Having different unmarshaling options per Content-Type is possible by wrapping the decoder and passing that to `runtime.WithMarshalerOption`: ```go type m struct { @@ -293,7 +292,7 @@ to RPC methods that have a unary response. When the method has a streaming response, grpc-gateway handles that by emitting a newline-separated stream of "chunks". Each -chunk is an envelope that can container either a response message +chunk is an envelope that can contain either a response message or an error. Only the last chunk will include an error, and only when the RPC handler ends abnormally (i.e. with an error code). @@ -307,7 +306,7 @@ mux := runtime.NewServeMux( ``` The signature of the handler is much more rigid because we need -to know the structure of the error payload in order to properly +to know the structure of the error payload to properly encode the "chunk" schema into a Swagger/OpenAPI spec. So the function must return a `*runtime.StreamError`. The handler From ed290d0d603b92fa7d55da2986e6feff89189035 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 22 May 2020 22:11:47 +0100 Subject: [PATCH 0420/1518] examples/internal/server: rewrite fieldmask_helper In protoreflect. --- examples/internal/server/BUILD.bazel | 12 +- examples/internal/server/fieldmask_helper.go | 54 ++++----- .../internal/server/fieldmask_helper_test.go | 104 ------------------ 3 files changed, 22 insertions(+), 148 deletions(-) delete mode 100644 examples/internal/server/fieldmask_helper_test.go diff --git a/examples/internal/server/BUILD.bazel b/examples/internal/server/BUILD.bazel index d86eceb7ca6..e88e7db6b2b 100644 --- a/examples/internal/server/BUILD.bazel +++ b/examples/internal/server/BUILD.bazel @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) @@ -20,7 +20,6 @@ go_library( "//examples/internal/proto/standalone:go_default_library", "//examples/internal/proto/sub:go_default_library", "//examples/internal/proto/sub2:go_default_library", - "//internal/casing:go_default_library", "//runtime:go_default_library", "@com_github_golang_glog//:go_default_library", "@com_github_rogpeppe_fastuuid//:go_default_library", @@ -34,12 +33,7 @@ go_library( "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", + "@org_golang_google_protobuf//proto:go_default_library", + "@org_golang_google_protobuf//reflect/protoreflect:go_default_library", ], ) - -go_test( - name = "go_default_test", - srcs = ["fieldmask_helper_test.go"], - embed = [":go_default_library"], - deps = ["@io_bazel_rules_go//proto/wkt:field_mask_go_proto"], -) diff --git a/examples/internal/server/fieldmask_helper.go b/examples/internal/server/fieldmask_helper.go index 48d5ca75c86..091c3552298 100644 --- a/examples/internal/server/fieldmask_helper.go +++ b/examples/internal/server/fieldmask_helper.go @@ -1,56 +1,40 @@ package server import ( - "log" - "reflect" "strings" - "github.com/grpc-ecosystem/grpc-gateway/v2/internal/casing" "google.golang.org/genproto/protobuf/field_mask" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" ) -func applyFieldMask(patchee, patcher interface{}, mask *field_mask.FieldMask) { +func applyFieldMask(patchee, patcher proto.Message, mask *field_mask.FieldMask) { if mask == nil { return } + if patchee.ProtoReflect().Descriptor().FullName() != patcher.ProtoReflect().Descriptor().FullName() { + panic("patchee and patcher must be same type") + } for _, path := range mask.GetPaths() { - val := getField(patcher, path) - if val.IsValid() { - setValue(patchee, val, path) - } + patcherField, patcherParent := getField(patcher.ProtoReflect(), path) + patcheeField, patcheeParent := getField(patchee.ProtoReflect(), path) + patcheeParent.Set(patcheeField, patcherParent.Get(patcherField)) } } -func getField(obj interface{}, path string) (val reflect.Value) { - // this func is lazy -- if anything bad happens just return nil - defer func() { - if r := recover(); r != nil { - log.Printf("failed to get field:\npath: %q\nobj: %#v\nerr: %v", path, obj, r) - val = reflect.Value{} - } - }() - - v := reflect.ValueOf(obj) - if len(path) == 0 { - return v - } +func getField(msg protoreflect.Message, path string) (field protoreflect.FieldDescriptor, parent protoreflect.Message) { + fields := msg.Descriptor().Fields() + parent = msg + names := strings.Split(path, ".") + for i, name := range names { + field = fields.ByName(protoreflect.Name(name)) - for _, s := range strings.Split(path, ".") { - if v.Kind() == reflect.Ptr { - v = reflect.Indirect(v) + if i < len(names)-1 { + parent = parent.Get(field).Message() + fields = field.Message().Fields() } - v = v.FieldByName(casing.Camel(s)) } - return v -} - -func setValue(obj interface{}, newValue reflect.Value, path string) { - defer func() { - if r := recover(); r != nil { - log.Printf("failed to set value:\nnewValue: %#v\npath: %q\nobj: %#v\nerr: %v", newValue, path, obj, r) - } - }() - getField(obj, path).Set(newValue) + return field, parent } diff --git a/examples/internal/server/fieldmask_helper_test.go b/examples/internal/server/fieldmask_helper_test.go deleted file mode 100644 index 9ad6584ae21..00000000000 --- a/examples/internal/server/fieldmask_helper_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package server - -import ( - "reflect" - "testing" - - "google.golang.org/genproto/protobuf/field_mask" -) - -func TestApplyFieldMask(t *testing.T) { - for _, test := range []struct { - name string - patchee interface{} - patcher interface{} - fieldMask *field_mask.FieldMask - expected interface{} - }{ - {"nil fieldMask", &a{E: 64}, &a{E: 42}, nil, &a{E: 64}}, - {"empty paths", &a{E: 63}, &a{E: 42}, &field_mask.FieldMask{}, &a{E: 63}}, - {"simple path", - &a{E: 23, Foo: "test"}, - &a{BeefCake: &b{}, E: 42}, - &field_mask.FieldMask{Paths: []string{"e"}}, - &a{E: 42, Foo: "test"}}, - {"nested", - &a{BeefCake: &b{CowCount: 85}}, - &a{BeefCake: &b{CowCount: 58, Data: nil}}, - &field_mask.FieldMask{Paths: []string{"beef_cake.cow_count"}}, - &a{BeefCake: &b{CowCount: 58}}}, - {"multiple paths", - &a{BeefCake: &b{CowCount: 40, Data: []int{1, 2, 3}}, E: 34, Foo: "catapult"}, - &a{BeefCake: &b{CowCount: 56}, Foo: "lettuce"}, - &field_mask.FieldMask{Paths: []string{"beef_cake.cow_count", "foo"}}, - &a{BeefCake: &b{CowCount: 56, Data: []int{1, 2, 3}}, E: 34, Foo: "lettuce"}}, - } { - t.Run(test.name, func(t *testing.T) { - applyFieldMask(test.patchee, test.patcher, test.fieldMask) - if !reflect.DeepEqual(test.patchee, test.expected) { - t.Errorf("expected %v, but was %v", test.expected, test.patchee) - } - }) - } -} - -func TestGetValue(t *testing.T) { - for _, test := range []struct { - name string - input interface{} - path string - expected interface{} - }{ - {"empty", &a{E: 45, Foo: "test"}, "", &a{E: 45, Foo: "test"}}, - {"pointer-simple", &a{E: 45}, "E", 45}, - {"pointer-nested", &a{BeefCake: &b{CowCount: 42}}, "beef_cake.cow_count", 42}, - {"pointer-complex type", &a{BeefCake: &b{Data: []int{1, 2}}}, "beef_cake.data", []int{1, 2}}, - {"pointer-invalid path", &a{Foo: "test"}, "x.y", nil}, - {"simple", a{E: 45}, "E", 45}, - {"nested", a{BeefCake: &b{CowCount: 42}}, "beef_cake.cow_count", 42}, - {"complex type", a{BeefCake: &b{Data: []int{1, 2}}}, "beef_cake.data", []int{1, 2}}, - {"invalid path", a{Foo: "test"}, "X.Y", nil}, - } { - t.Run(test.name, func(t *testing.T) { - if actual := getField(test.input, test.path); actual.IsValid() { - if !reflect.DeepEqual(test.expected, actual.Interface()) { - t.Errorf("expected %v, but got %v", test.expected, actual) - } - } else if test.expected != nil { - t.Errorf("expected nil, but was %v", actual) - } - }) - } -} - -func TestSetValue(t *testing.T) { - for _, test := range []struct { - name string - obj interface{} - newValue interface{} - path string - expected interface{} - }{ - {"simple", &a{E: 45}, 34, "e", 34}, - {"nested", &a{BeefCake: &b{CowCount: 54}}, 43, "beef_cake.cow_count", 43}, - {"complex type", &a{BeefCake: &b{Data: []int{1, 2}}}, []int{3, 4}, "beef_cake.data", []int{3, 4}}, - } { - t.Run(test.name, func(t *testing.T) { - setValue(test.obj, reflect.ValueOf(test.newValue), test.path) - if actual := getField(test.obj, test.path).Interface(); !reflect.DeepEqual(actual, test.expected) { - t.Errorf("expected %v, but got %v", test.newValue, actual) - } - }) - } -} - -type a struct { - BeefCake *b - E int - Foo string -} - -type b struct { - CowCount int - Data []int -} From 3ed822c17d92c73c266ba544de3c18b601b04cf8 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 22 May 2020 22:11:58 +0100 Subject: [PATCH 0421/1518] Change default marshaller to use JSON names --- .../internal/clients/abe/api/swagger.yaml | 376 +++++++++--------- .../abe/api_a_bit_of_everything_service.go | 272 ++++++------- .../model_examplepb_a_bit_of_everything.go | 66 +-- ..._examplepb_a_bit_of_everything_repeated.go | 32 +- .../abe/model_examplepb_update_v2_request.go | 2 +- .../clients/abe/model_protobuf_any.go | 2 +- .../internal/clients/echo/api/swagger.yaml | 18 +- .../internal/clients/echo/api_echo_service.go | 12 +- .../echo/model_examplepb_simple_message.go | 2 +- .../clients/echo/model_protobuf_any.go | 2 +- .../clients/responsebody/api/swagger.yaml | 20 +- .../responsebody/model_protobuf_any.go | 2 +- .../clients/unannotatedecho/api/swagger.yaml | 10 +- .../api_unannotated_echo_service.go | 4 +- ...el_examplepb_unannotated_simple_message.go | 2 +- .../unannotatedecho/model_protobuf_any.go | 2 +- .../internal/integration/integration_test.go | 143 +++++-- .../a_bit_of_everything.swagger.json | 374 ++++++++--------- .../proto/examplepb/echo_service.swagger.json | 16 +- .../response_body_service.swagger.json | 2 +- .../proto/examplepb/stream.swagger.json | 70 ++-- .../unannotated_echo_service.swagger.json | 8 +- .../examplepb/use_go_template.swagger.json | 2 +- .../proto/examplepb/wrappers.swagger.json | 20 +- protoc-gen-swagger/main.go | 2 +- runtime/marshaler_registry.go | 2 - 26 files changed, 778 insertions(+), 685 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index 0969ef1a012..c118da4eac1 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -108,13 +108,13 @@ paths: externalDocs: description: "Find out more Echo" url: "https://github.com/grpc-ecosystem/grpc-gateway" - /v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}: + /v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}: get: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_CheckNestedEnumGetQueryParams" parameters: - - name: "single_nested.ok" + - name: "singleNested.ok" in: "path" description: "DeepEnum description." required: true @@ -123,14 +123,14 @@ paths: - "FALSE" - "TRUE" x-exportParamName: "SingleNestedOk" - - name: "single_nested.name" + - name: "singleNested.name" in: "query" description: "name is nested field." required: false type: "string" x-exportParamName: "SingleNestedName" x-optionalDataType: "String" - - name: "single_nested.amount" + - name: "singleNested.amount" in: "query" required: false type: "integer" @@ -143,7 +143,7 @@ paths: type: "string" x-exportParamName: "Uuid" x-optionalDataType: "String" - - name: "float_value" + - name: "floatValue" in: "query" description: "Float value field" required: true @@ -151,76 +151,76 @@ paths: default: 0.2 format: "float" x-exportParamName: "FloatValue" - - name: "double_value" + - name: "doubleValue" in: "query" required: false type: "number" format: "double" x-exportParamName: "DoubleValue" x-optionalDataType: "Float64" - - name: "int64_value" + - name: "int64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Int64Value" x-optionalDataType: "String" - - name: "uint64_value" + - name: "uint64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Uint64Value" x-optionalDataType: "String" - - name: "int32_value" + - name: "int32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Int32Value" x-optionalDataType: "Int32" - - name: "fixed64_value" + - name: "fixed64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Fixed64Value" x-optionalDataType: "String" - - name: "fixed32_value" + - name: "fixed32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Fixed32Value" x-optionalDataType: "Int64" - - name: "bool_value" + - name: "boolValue" in: "query" required: false type: "boolean" format: "boolean" x-exportParamName: "BoolValue" x-optionalDataType: "Bool" - - name: "string_value" + - name: "stringValue" in: "query" required: false type: "string" x-exportParamName: "StringValue" x-optionalDataType: "String" - - name: "bytes_value" + - name: "bytesValue" in: "query" required: false type: "string" format: "byte" x-exportParamName: "BytesValue" x-optionalDataType: "String" - - name: "uint32_value" + - name: "uint32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Uint32Value" x-optionalDataType: "Int64" - - name: "enum_value" + - name: "enumValue" in: "query" description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false @@ -231,7 +231,7 @@ paths: - "ONE" x-exportParamName: "EnumValue" x-optionalDataType: "String" - - name: "path_enum_value" + - name: "pathEnumValue" in: "query" required: false type: "string" @@ -241,7 +241,7 @@ paths: - "DEF" x-exportParamName: "PathEnumValue" x-optionalDataType: "String" - - name: "nested_path_enum_value" + - name: "nestedPathEnumValue" in: "query" required: false type: "string" @@ -251,35 +251,35 @@ paths: - "JKL" x-exportParamName: "NestedPathEnumValue" x-optionalDataType: "String" - - name: "sfixed32_value" + - name: "sfixed32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sfixed32Value" x-optionalDataType: "Int32" - - name: "sfixed64_value" + - name: "sfixed64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sfixed64Value" x-optionalDataType: "String" - - name: "sint32_value" + - name: "sint32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sint32Value" x-optionalDataType: "Int32" - - name: "sint64_value" + - name: "sint64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sint64Value" x-optionalDataType: "String" - - name: "repeated_string_value" + - name: "repeatedStringValue" in: "query" required: false type: "array" @@ -287,7 +287,7 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringValue" - - name: "oneof_string" + - name: "oneofString" in: "query" required: false type: "string" @@ -299,14 +299,14 @@ paths: type: "string" x-exportParamName: "NonConventionalNameValue" x-optionalDataType: "String" - - name: "timestamp_value" + - name: "timestampValue" in: "query" required: false type: "string" format: "date-time" x-exportParamName: "TimestampValue" x-optionalDataType: "Time" - - name: "repeated_enum_value" + - name: "repeatedEnumValue" in: "query" description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" @@ -319,7 +319,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumValue" - - name: "repeated_enum_annotation" + - name: "repeatedEnumAnnotation" in: "query" description: "Repeated numeric enum title. Repeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" @@ -332,7 +332,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumAnnotation" - - name: "enum_value_annotation" + - name: "enumValueAnnotation" in: "query" description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ \ means 0\n - ONE: ONE means 1" @@ -344,7 +344,7 @@ paths: - "ONE" x-exportParamName: "EnumValueAnnotation" x-optionalDataType: "String" - - name: "repeated_string_annotation" + - name: "repeatedStringAnnotation" in: "query" description: "Repeated string title. Repeated string description." required: false @@ -353,21 +353,21 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringAnnotation" - - name: "nested_annotation.name" + - name: "nestedAnnotation.name" in: "query" description: "name is nested field." required: false type: "string" x-exportParamName: "NestedAnnotationName" x-optionalDataType: "String" - - name: "nested_annotation.amount" + - name: "nestedAnnotation.amount" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "NestedAnnotationAmount" x-optionalDataType: "Int64" - - name: "int64_override_type" + - name: "int64OverrideType" in: "query" required: false type: "integer" @@ -396,26 +396,26 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/params/get/{single_nested.name}: + /v1/example/a_bit_of_everything/params/get/{singleNested.name}: get: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_CheckGetQueryParams" parameters: - - name: "single_nested.name" + - name: "singleNested.name" in: "path" description: "name is nested field." required: true type: "string" x-exportParamName: "SingleNestedName" - - name: "single_nested.amount" + - name: "singleNested.amount" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "SingleNestedAmount" x-optionalDataType: "Int64" - - name: "single_nested.ok" + - name: "singleNested.ok" in: "query" description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ \ TRUE is true." @@ -433,7 +433,7 @@ paths: type: "string" x-exportParamName: "Uuid" x-optionalDataType: "String" - - name: "float_value" + - name: "floatValue" in: "query" description: "Float value field" required: true @@ -441,76 +441,76 @@ paths: default: 0.2 format: "float" x-exportParamName: "FloatValue" - - name: "double_value" + - name: "doubleValue" in: "query" required: false type: "number" format: "double" x-exportParamName: "DoubleValue" x-optionalDataType: "Float64" - - name: "int64_value" + - name: "int64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Int64Value" x-optionalDataType: "String" - - name: "uint64_value" + - name: "uint64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Uint64Value" x-optionalDataType: "String" - - name: "int32_value" + - name: "int32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Int32Value" x-optionalDataType: "Int32" - - name: "fixed64_value" + - name: "fixed64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Fixed64Value" x-optionalDataType: "String" - - name: "fixed32_value" + - name: "fixed32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Fixed32Value" x-optionalDataType: "Int64" - - name: "bool_value" + - name: "boolValue" in: "query" required: false type: "boolean" format: "boolean" x-exportParamName: "BoolValue" x-optionalDataType: "Bool" - - name: "string_value" + - name: "stringValue" in: "query" required: false type: "string" x-exportParamName: "StringValue" x-optionalDataType: "String" - - name: "bytes_value" + - name: "bytesValue" in: "query" required: false type: "string" format: "byte" x-exportParamName: "BytesValue" x-optionalDataType: "String" - - name: "uint32_value" + - name: "uint32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Uint32Value" x-optionalDataType: "Int64" - - name: "enum_value" + - name: "enumValue" in: "query" description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false @@ -521,7 +521,7 @@ paths: - "ONE" x-exportParamName: "EnumValue" x-optionalDataType: "String" - - name: "path_enum_value" + - name: "pathEnumValue" in: "query" required: false type: "string" @@ -531,7 +531,7 @@ paths: - "DEF" x-exportParamName: "PathEnumValue" x-optionalDataType: "String" - - name: "nested_path_enum_value" + - name: "nestedPathEnumValue" in: "query" required: false type: "string" @@ -541,35 +541,35 @@ paths: - "JKL" x-exportParamName: "NestedPathEnumValue" x-optionalDataType: "String" - - name: "sfixed32_value" + - name: "sfixed32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sfixed32Value" x-optionalDataType: "Int32" - - name: "sfixed64_value" + - name: "sfixed64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sfixed64Value" x-optionalDataType: "String" - - name: "sint32_value" + - name: "sint32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sint32Value" x-optionalDataType: "Int32" - - name: "sint64_value" + - name: "sint64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sint64Value" x-optionalDataType: "String" - - name: "repeated_string_value" + - name: "repeatedStringValue" in: "query" required: false type: "array" @@ -577,7 +577,7 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringValue" - - name: "oneof_string" + - name: "oneofString" in: "query" required: false type: "string" @@ -589,14 +589,14 @@ paths: type: "string" x-exportParamName: "NonConventionalNameValue" x-optionalDataType: "String" - - name: "timestamp_value" + - name: "timestampValue" in: "query" required: false type: "string" format: "date-time" x-exportParamName: "TimestampValue" x-optionalDataType: "Time" - - name: "repeated_enum_value" + - name: "repeatedEnumValue" in: "query" description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" @@ -609,7 +609,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumValue" - - name: "repeated_enum_annotation" + - name: "repeatedEnumAnnotation" in: "query" description: "Repeated numeric enum title. Repeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" @@ -622,7 +622,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumAnnotation" - - name: "enum_value_annotation" + - name: "enumValueAnnotation" in: "query" description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ \ means 0\n - ONE: ONE means 1" @@ -634,7 +634,7 @@ paths: - "ONE" x-exportParamName: "EnumValueAnnotation" x-optionalDataType: "String" - - name: "repeated_string_annotation" + - name: "repeatedStringAnnotation" in: "query" description: "Repeated string title. Repeated string description." required: false @@ -643,14 +643,14 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringAnnotation" - - name: "nested_annotation.amount" + - name: "nestedAnnotation.amount" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "NestedAnnotationAmount" x-optionalDataType: "Int64" - - name: "nested_annotation.ok" + - name: "nestedAnnotation.ok" in: "query" description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ \ TRUE is true." @@ -662,7 +662,7 @@ paths: - "TRUE" x-exportParamName: "NestedAnnotationOk" x-optionalDataType: "String" - - name: "int64_override_type" + - name: "int64OverrideType" in: "query" required: false type: "integer" @@ -691,13 +691,13 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/params/post/{string_value}: + /v1/example/a_bit_of_everything/params/post/{stringValue}: post: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_CheckPostQueryParams" parameters: - - name: "string_value" + - name: "stringValue" in: "path" required: true type: "string" @@ -741,21 +741,21 @@ paths: required: true type: "string" x-exportParamName: "Uuid" - - name: "single_nested.name" + - name: "singleNested.name" in: "query" description: "name is nested field." required: false type: "string" x-exportParamName: "SingleNestedName" x-optionalDataType: "String" - - name: "single_nested.amount" + - name: "singleNested.amount" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "SingleNestedAmount" x-optionalDataType: "Int64" - - name: "single_nested.ok" + - name: "singleNested.ok" in: "query" description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ \ TRUE is true." @@ -767,7 +767,7 @@ paths: - "TRUE" x-exportParamName: "SingleNestedOk" x-optionalDataType: "String" - - name: "float_value" + - name: "floatValue" in: "query" description: "Float value field" required: true @@ -775,76 +775,76 @@ paths: default: 0.2 format: "float" x-exportParamName: "FloatValue" - - name: "double_value" + - name: "doubleValue" in: "query" required: false type: "number" format: "double" x-exportParamName: "DoubleValue" x-optionalDataType: "Float64" - - name: "int64_value" + - name: "int64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Int64Value" x-optionalDataType: "String" - - name: "uint64_value" + - name: "uint64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Uint64Value" x-optionalDataType: "String" - - name: "int32_value" + - name: "int32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Int32Value" x-optionalDataType: "Int32" - - name: "fixed64_value" + - name: "fixed64Value" in: "query" required: false type: "string" format: "uint64" x-exportParamName: "Fixed64Value" x-optionalDataType: "String" - - name: "fixed32_value" + - name: "fixed32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Fixed32Value" x-optionalDataType: "Int64" - - name: "bool_value" + - name: "boolValue" in: "query" required: false type: "boolean" format: "boolean" x-exportParamName: "BoolValue" x-optionalDataType: "Bool" - - name: "string_value" + - name: "stringValue" in: "query" required: false type: "string" x-exportParamName: "StringValue" x-optionalDataType: "String" - - name: "bytes_value" + - name: "bytesValue" in: "query" required: false type: "string" format: "byte" x-exportParamName: "BytesValue" x-optionalDataType: "String" - - name: "uint32_value" + - name: "uint32Value" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "Uint32Value" x-optionalDataType: "Int64" - - name: "enum_value" + - name: "enumValue" in: "query" description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" required: false @@ -855,7 +855,7 @@ paths: - "ONE" x-exportParamName: "EnumValue" x-optionalDataType: "String" - - name: "path_enum_value" + - name: "pathEnumValue" in: "query" required: false type: "string" @@ -865,7 +865,7 @@ paths: - "DEF" x-exportParamName: "PathEnumValue" x-optionalDataType: "String" - - name: "nested_path_enum_value" + - name: "nestedPathEnumValue" in: "query" required: false type: "string" @@ -875,35 +875,35 @@ paths: - "JKL" x-exportParamName: "NestedPathEnumValue" x-optionalDataType: "String" - - name: "sfixed32_value" + - name: "sfixed32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sfixed32Value" x-optionalDataType: "Int32" - - name: "sfixed64_value" + - name: "sfixed64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sfixed64Value" x-optionalDataType: "String" - - name: "sint32_value" + - name: "sint32Value" in: "query" required: false type: "integer" format: "int32" x-exportParamName: "Sint32Value" x-optionalDataType: "Int32" - - name: "sint64_value" + - name: "sint64Value" in: "query" required: false type: "string" format: "int64" x-exportParamName: "Sint64Value" x-optionalDataType: "String" - - name: "repeated_string_value" + - name: "repeatedStringValue" in: "query" required: false type: "array" @@ -911,7 +911,7 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringValue" - - name: "oneof_string" + - name: "oneofString" in: "query" required: false type: "string" @@ -923,14 +923,14 @@ paths: type: "string" x-exportParamName: "NonConventionalNameValue" x-optionalDataType: "String" - - name: "timestamp_value" + - name: "timestampValue" in: "query" required: false type: "string" format: "date-time" x-exportParamName: "TimestampValue" x-optionalDataType: "Time" - - name: "repeated_enum_value" + - name: "repeatedEnumValue" in: "query" description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ \ ZERO means 0\n - ONE: ONE means 1" @@ -943,7 +943,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumValue" - - name: "repeated_enum_annotation" + - name: "repeatedEnumAnnotation" in: "query" description: "Repeated numeric enum title. Repeated numeric enum description.\n\ \n - ZERO: ZERO means 0\n - ONE: ONE means 1" @@ -956,7 +956,7 @@ paths: - "ONE" collectionFormat: "multi" x-exportParamName: "RepeatedEnumAnnotation" - - name: "enum_value_annotation" + - name: "enumValueAnnotation" in: "query" description: "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO\ \ means 0\n - ONE: ONE means 1" @@ -968,7 +968,7 @@ paths: - "ONE" x-exportParamName: "EnumValueAnnotation" x-optionalDataType: "String" - - name: "repeated_string_annotation" + - name: "repeatedStringAnnotation" in: "query" description: "Repeated string title. Repeated string description." required: false @@ -977,21 +977,21 @@ paths: type: "string" collectionFormat: "multi" x-exportParamName: "RepeatedStringAnnotation" - - name: "nested_annotation.name" + - name: "nestedAnnotation.name" in: "query" description: "name is nested field." required: false type: "string" x-exportParamName: "NestedAnnotationName" x-optionalDataType: "String" - - name: "nested_annotation.amount" + - name: "nestedAnnotation.amount" in: "query" required: false type: "integer" format: "int64" x-exportParamName: "NestedAnnotationAmount" x-optionalDataType: "Int64" - - name: "nested_annotation.ok" + - name: "nestedAnnotation.ok" in: "query" description: "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE:\ \ TRUE is true." @@ -1003,7 +1003,7 @@ paths: - "TRUE" x-exportParamName: "NestedAnnotationOk" x-optionalDataType: "String" - - name: "int64_override_type" + - name: "int64OverrideType" in: "query" required: false type: "integer" @@ -1036,7 +1036,7 @@ paths: description: "Find out more about GetQuery" url: "https://github.com/grpc-ecosystem/grpc-gateway" deprecated: true - ? /v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation} + ? /v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation} : post: tags: - "ABitOfEverythingService" @@ -1044,7 +1044,7 @@ paths: description: "This API creates a new ABitOfEverything" operationId: "ABitOfEverythingService_Create" parameters: - - name: "float_value" + - name: "floatValue" in: "path" description: "Float value field" required: true @@ -1052,78 +1052,78 @@ paths: default: 0.2 format: "float" x-exportParamName: "FloatValue" - - name: "double_value" + - name: "doubleValue" in: "path" required: true type: "number" format: "double" x-exportParamName: "DoubleValue" - - name: "int64_value" + - name: "int64Value" in: "path" required: true type: "string" format: "int64" x-exportParamName: "Int64Value" - - name: "uint64_value" + - name: "uint64Value" in: "path" required: true type: "string" format: "uint64" x-exportParamName: "Uint64Value" - - name: "int32_value" + - name: "int32Value" in: "path" required: true type: "integer" format: "int32" x-exportParamName: "Int32Value" - - name: "fixed64_value" + - name: "fixed64Value" in: "path" required: true type: "string" format: "uint64" x-exportParamName: "Fixed64Value" - - name: "fixed32_value" + - name: "fixed32Value" in: "path" required: true type: "integer" format: "int64" x-exportParamName: "Fixed32Value" - - name: "bool_value" + - name: "boolValue" in: "path" required: true type: "boolean" format: "boolean" x-exportParamName: "BoolValue" - - name: "string_value" + - name: "stringValue" in: "path" required: true type: "string" x-exportParamName: "StringValue" - - name: "uint32_value" + - name: "uint32Value" in: "path" required: true type: "integer" format: "int64" x-exportParamName: "Uint32Value" - - name: "sfixed32_value" + - name: "sfixed32Value" in: "path" required: true type: "integer" format: "int32" x-exportParamName: "Sfixed32Value" - - name: "sfixed64_value" + - name: "sfixed64Value" in: "path" required: true type: "string" format: "int64" x-exportParamName: "Sfixed64Value" - - name: "sint32_value" + - name: "sint32Value" in: "path" required: true type: "integer" format: "int32" x-exportParamName: "Sint32Value" - - name: "sint64_value" + - name: "sint64Value" in: "path" required: true type: "string" @@ -1134,7 +1134,7 @@ paths: required: true type: "string" x-exportParamName: "NonConventionalNameValue" - - name: "enum_value" + - name: "enumValue" in: "path" required: true type: "string" @@ -1142,7 +1142,7 @@ paths: - "ZERO" - "ONE" x-exportParamName: "EnumValue" - - name: "path_enum_value" + - name: "pathEnumValue" in: "path" required: true type: "string" @@ -1150,7 +1150,7 @@ paths: - "ABC" - "DEF" x-exportParamName: "PathEnumValue" - - name: "nested_path_enum_value" + - name: "nestedPathEnumValue" in: "path" required: true type: "string" @@ -1158,7 +1158,7 @@ paths: - "GHI" - "JKL" x-exportParamName: "NestedPathEnumValue" - - name: "enum_value_annotation" + - name: "enumValueAnnotation" in: "path" description: "Numeric enum description." required: true @@ -1189,13 +1189,13 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/{single_nested.name}: + /v1/example/a_bit_of_everything/{singleNested.name}: post: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_DeepPathEcho" parameters: - - name: "single_nested.name" + - name: "singleNested.name" in: "path" description: "name is nested field." required: true @@ -1336,13 +1336,13 @@ paths: - "read" - "write" x-irreversible: true - ? /v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value} + ? /v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value} : get: tags: - "ABitOfEverythingService" operationId: "ABitOfEverythingService_GetRepeatedQuery" parameters: - - name: "path_repeated_float_value" + - name: "pathRepeatedFloatValue" in: "path" description: "repeated values. they are comma-separated in path" required: true @@ -1353,7 +1353,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedFloatValue" - - name: "path_repeated_double_value" + - name: "pathRepeatedDoubleValue" in: "path" required: true type: "array" @@ -1363,7 +1363,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedDoubleValue" - - name: "path_repeated_int64_value" + - name: "pathRepeatedInt64Value" in: "path" required: true type: "array" @@ -1373,7 +1373,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedInt64Value" - - name: "path_repeated_uint64_value" + - name: "pathRepeatedUint64Value" in: "path" required: true type: "array" @@ -1383,7 +1383,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedUint64Value" - - name: "path_repeated_int32_value" + - name: "pathRepeatedInt32Value" in: "path" required: true type: "array" @@ -1393,7 +1393,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedInt32Value" - - name: "path_repeated_fixed64_value" + - name: "pathRepeatedFixed64Value" in: "path" required: true type: "array" @@ -1403,7 +1403,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedFixed64Value" - - name: "path_repeated_fixed32_value" + - name: "pathRepeatedFixed32Value" in: "path" required: true type: "array" @@ -1413,7 +1413,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedFixed32Value" - - name: "path_repeated_bool_value" + - name: "pathRepeatedBoolValue" in: "path" required: true type: "array" @@ -1423,7 +1423,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedBoolValue" - - name: "path_repeated_string_value" + - name: "pathRepeatedStringValue" in: "path" required: true type: "array" @@ -1432,7 +1432,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedStringValue" - - name: "path_repeated_bytes_value" + - name: "pathRepeatedBytesValue" in: "path" required: true type: "array" @@ -1443,7 +1443,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedBytesValue" - - name: "path_repeated_uint32_value" + - name: "pathRepeatedUint32Value" in: "path" required: true type: "array" @@ -1453,7 +1453,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedUint32Value" - - name: "path_repeated_enum_value" + - name: "pathRepeatedEnumValue" in: "path" required: true type: "array" @@ -1465,7 +1465,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedEnumValue" - - name: "path_repeated_sfixed32_value" + - name: "pathRepeatedSfixed32Value" in: "path" required: true type: "array" @@ -1475,7 +1475,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedSfixed32Value" - - name: "path_repeated_sfixed64_value" + - name: "pathRepeatedSfixed64Value" in: "path" required: true type: "array" @@ -1485,7 +1485,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedSfixed64Value" - - name: "path_repeated_sint32_value" + - name: "pathRepeatedSint32Value" in: "path" required: true type: "array" @@ -1495,7 +1495,7 @@ paths: collectionFormat: "csv" minItems: 1 x-exportParamName: "PathRepeatedSint32Value" - - name: "path_repeated_sint64_value" + - name: "pathRepeatedSint64Value" in: "path" required: true type: "array" @@ -1971,11 +1971,9 @@ definitions: examplepbABitOfEverything: type: "object" required: - - "double_value" - - "int64_value" - "uuid" properties: - single_nested: + singleNested: $ref: "#/definitions/ABitOfEverythingNested" uuid: type: "string" @@ -1985,117 +1983,117 @@ definitions: type: "array" items: $ref: "#/definitions/ABitOfEverythingNested" - float_value: + floatValue: type: "number" format: "float" description: "Float value field" default: 0.2 - double_value: + doubleValue: type: "number" format: "double" - int64_value: + int64Value: type: "string" format: "int64" - uint64_value: + uint64Value: type: "string" format: "uint64" - int32_value: + int32Value: type: "integer" format: "int32" - fixed64_value: + fixed64Value: type: "string" format: "uint64" - fixed32_value: + fixed32Value: type: "integer" format: "int64" - bool_value: + boolValue: type: "boolean" format: "boolean" - string_value: + stringValue: type: "string" - bytes_value: + bytesValue: type: "string" format: "byte" pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" - uint32_value: + uint32Value: type: "integer" format: "int64" - enum_value: + enumValue: $ref: "#/definitions/examplepbNumericEnum" - path_enum_value: + pathEnumValue: $ref: "#/definitions/pathenumPathEnum" - nested_path_enum_value: + nestedPathEnumValue: $ref: "#/definitions/MessagePathEnumNestedPathEnum" - sfixed32_value: + sfixed32Value: type: "integer" format: "int32" - sfixed64_value: + sfixed64Value: type: "string" format: "int64" - sint32_value: + sint32Value: type: "integer" format: "int32" - sint64_value: + sint64Value: type: "string" format: "int64" - repeated_string_value: + repeatedStringValue: type: "array" items: type: "string" - oneof_empty: + oneofEmpty: type: "object" properties: {} - oneof_string: + oneofString: type: "string" - map_value: + mapValue: type: "object" additionalProperties: $ref: "#/definitions/examplepbNumericEnum" - mapped_string_value: + mappedStringValue: type: "object" additionalProperties: type: "string" - mapped_nested_value: + mappedNestedValue: type: "object" additionalProperties: $ref: "#/definitions/ABitOfEverythingNested" nonConventionalNameValue: type: "string" - timestamp_value: + timestampValue: type: "string" format: "date-time" - repeated_enum_value: + repeatedEnumValue: type: "array" title: "repeated enum value. it is comma-separated in query" items: $ref: "#/definitions/examplepbNumericEnum" - repeated_enum_annotation: + repeatedEnumAnnotation: type: "array" description: "Repeated numeric enum description." title: "Repeated numeric enum title" items: $ref: "#/definitions/examplepbNumericEnum" - enum_value_annotation: + enumValueAnnotation: description: "Numeric enum description." title: "Numeric enum title" $ref: "#/definitions/examplepbNumericEnum" - repeated_string_annotation: + repeatedStringAnnotation: type: "array" description: "Repeated string description." title: "Repeated string title" items: type: "string" - repeated_nested_annotation: + repeatedNestedAnnotation: type: "array" description: "Repeated nested object description." title: "Repeated nested object title" items: $ref: "#/definitions/ABitOfEverythingNested" - nested_annotation: + nestedAnnotation: description: "Nested object description." title: "Nested object title" $ref: "#/definitions/ABitOfEverythingNested" - int64_override_type: + int64OverrideType: type: "integer" format: "int64" externalDocs: @@ -2109,82 +2107,82 @@ definitions: examplepbABitOfEverythingRepeated: type: "object" properties: - path_repeated_float_value: + pathRepeatedFloatValue: type: "array" title: "repeated values. they are comma-separated in path" items: type: "number" format: "float" - path_repeated_double_value: + pathRepeatedDoubleValue: type: "array" items: type: "number" format: "double" - path_repeated_int64_value: + pathRepeatedInt64Value: type: "array" items: type: "string" format: "int64" - path_repeated_uint64_value: + pathRepeatedUint64Value: type: "array" items: type: "string" format: "uint64" - path_repeated_int32_value: + pathRepeatedInt32Value: type: "array" items: type: "integer" format: "int32" - path_repeated_fixed64_value: + pathRepeatedFixed64Value: type: "array" items: type: "string" format: "uint64" - path_repeated_fixed32_value: + pathRepeatedFixed32Value: type: "array" items: type: "integer" format: "int64" - path_repeated_bool_value: + pathRepeatedBoolValue: type: "array" items: type: "boolean" format: "boolean" - path_repeated_string_value: + pathRepeatedStringValue: type: "array" items: type: "string" - path_repeated_bytes_value: + pathRepeatedBytesValue: type: "array" items: type: "string" format: "byte" pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" - path_repeated_uint32_value: + pathRepeatedUint32Value: type: "array" items: type: "integer" format: "int64" - path_repeated_enum_value: + pathRepeatedEnumValue: type: "array" items: $ref: "#/definitions/examplepbNumericEnum" - path_repeated_sfixed32_value: + pathRepeatedSfixed32Value: type: "array" items: type: "integer" format: "int32" - path_repeated_sfixed64_value: + pathRepeatedSfixed64Value: type: "array" items: type: "string" format: "int64" - path_repeated_sint32_value: + pathRepeatedSint32Value: type: "array" items: type: "integer" format: "int32" - path_repeated_sint64_value: + pathRepeatedSint64Value: type: "array" items: type: "string" @@ -2218,7 +2216,7 @@ definitions: properties: abe: $ref: "#/definitions/examplepbABitOfEverything" - update_mask: + updateMask: $ref: "#/definitions/protobufFieldMask" title: "UpdateV2Request request for update includes the message and the update\ \ mask" @@ -2231,7 +2229,7 @@ definitions: protobufAny: type: "object" properties: - type_url: + typeUrl: type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index e7b1f563612..c1a5be6c627 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -112,106 +112,106 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckGetQuery ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/{single_nested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/{singleNested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"singleNested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { - localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { - localVarQueryParams.Add("single_nested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) } - localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { - localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { - localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { - localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { - localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { - localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { - localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { - localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { - localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { - localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { - localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { - localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { - localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { - localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { - localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { - localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { - localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { - localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { - localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { - localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { - localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { - localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { - localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { - localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { - localVarQueryParams.Add("nested_annotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { - localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -419,106 +419,106 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckNestedEn ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.ok"+"}", fmt.Sprintf("%v", singleNestedOk), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}" + localVarPath = strings.Replace(localVarPath, "{"+"singleNested.ok"+"}", fmt.Sprintf("%v", singleNestedOk), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { - localVarQueryParams.Add("single_nested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) } if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { - localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uuid.IsSet() { localVarQueryParams.Add("uuid", parameterToString(localVarOptionals.Uuid.Value(), "")) } - localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { - localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { - localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { - localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { - localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { - localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { - localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { - localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { - localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { - localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { - localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { - localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { - localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { - localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { - localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { - localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { - localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { - localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { - localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { - localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { - localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { - localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { - localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { - localVarQueryParams.Add("nested_annotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { - localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { - localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -659,8 +659,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCheckPostQuer ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/post/{string_value}" - localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/params/post/{stringValue}" + localVarPath = strings.Replace(localVarPath, "{"+"stringValue"+"}", fmt.Sprintf("%v", stringValue), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -825,26 +825,26 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceCreate(ctx co ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}" - localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint64_value"+"}", fmt.Sprintf("%v", uint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int32_value"+"}", fmt.Sprintf("%v", int32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed64_value"+"}", fmt.Sprintf("%v", fixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed32_value"+"}", fmt.Sprintf("%v", fixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"bool_value"+"}", fmt.Sprintf("%v", boolValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint32_value"+"}", fmt.Sprintf("%v", uint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed32_value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed64_value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}" + localVarPath = strings.Replace(localVarPath, "{"+"floatValue"+"}", fmt.Sprintf("%v", floatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"doubleValue"+"}", fmt.Sprintf("%v", doubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int64Value"+"}", fmt.Sprintf("%v", int64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint64Value"+"}", fmt.Sprintf("%v", uint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int32Value"+"}", fmt.Sprintf("%v", int32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed64Value"+"}", fmt.Sprintf("%v", fixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed32Value"+"}", fmt.Sprintf("%v", fixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"boolValue"+"}", fmt.Sprintf("%v", boolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"stringValue"+"}", fmt.Sprintf("%v", stringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint32Value"+"}", fmt.Sprintf("%v", uint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed32Value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed64Value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint32Value"+"}", fmt.Sprintf("%v", sint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint64Value"+"}", fmt.Sprintf("%v", sint64Value), -1) localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"enum_value"+"}", fmt.Sprintf("%v", enumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_enum_value"+"}", fmt.Sprintf("%v", pathEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"nested_path_enum_value"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"enum_value_annotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enumValue"+"}", fmt.Sprintf("%v", enumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathEnumValue"+"}", fmt.Sprintf("%v", pathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"nestedPathEnumValue"+"}", fmt.Sprintf("%v", nestedPathEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"enumValueAnnotation"+"}", fmt.Sprintf("%v", enumValueAnnotation), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1135,8 +1135,8 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{single_nested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{singleNested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"singleNested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1796,101 +1796,101 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetQuery(ctx localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.SingleNestedName.IsSet() { - localVarQueryParams.Add("single_nested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) + localVarQueryParams.Add("singleNested.name", parameterToString(localVarOptionals.SingleNestedName.Value(), "")) } if localVarOptionals != nil && localVarOptionals.SingleNestedAmount.IsSet() { - localVarQueryParams.Add("single_nested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) + localVarQueryParams.Add("singleNested.amount", parameterToString(localVarOptionals.SingleNestedAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.SingleNestedOk.IsSet() { - localVarQueryParams.Add("single_nested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) + localVarQueryParams.Add("singleNested.ok", parameterToString(localVarOptionals.SingleNestedOk.Value(), "")) } - localVarQueryParams.Add("float_value", parameterToString(floatValue, "")) + localVarQueryParams.Add("floatValue", parameterToString(floatValue, "")) if localVarOptionals != nil && localVarOptionals.DoubleValue.IsSet() { - localVarQueryParams.Add("double_value", parameterToString(localVarOptionals.DoubleValue.Value(), "")) + localVarQueryParams.Add("doubleValue", parameterToString(localVarOptionals.DoubleValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64Value.IsSet() { - localVarQueryParams.Add("int64_value", parameterToString(localVarOptionals.Int64Value.Value(), "")) + localVarQueryParams.Add("int64Value", parameterToString(localVarOptionals.Int64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint64Value.IsSet() { - localVarQueryParams.Add("uint64_value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) + localVarQueryParams.Add("uint64Value", parameterToString(localVarOptionals.Uint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int32Value.IsSet() { - localVarQueryParams.Add("int32_value", parameterToString(localVarOptionals.Int32Value.Value(), "")) + localVarQueryParams.Add("int32Value", parameterToString(localVarOptionals.Int32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed64Value.IsSet() { - localVarQueryParams.Add("fixed64_value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) + localVarQueryParams.Add("fixed64Value", parameterToString(localVarOptionals.Fixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Fixed32Value.IsSet() { - localVarQueryParams.Add("fixed32_value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) + localVarQueryParams.Add("fixed32Value", parameterToString(localVarOptionals.Fixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BoolValue.IsSet() { - localVarQueryParams.Add("bool_value", parameterToString(localVarOptionals.BoolValue.Value(), "")) + localVarQueryParams.Add("boolValue", parameterToString(localVarOptionals.BoolValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.StringValue.IsSet() { - localVarQueryParams.Add("string_value", parameterToString(localVarOptionals.StringValue.Value(), "")) + localVarQueryParams.Add("stringValue", parameterToString(localVarOptionals.StringValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.BytesValue.IsSet() { - localVarQueryParams.Add("bytes_value", parameterToString(localVarOptionals.BytesValue.Value(), "")) + localVarQueryParams.Add("bytesValue", parameterToString(localVarOptionals.BytesValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Uint32Value.IsSet() { - localVarQueryParams.Add("uint32_value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) + localVarQueryParams.Add("uint32Value", parameterToString(localVarOptionals.Uint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.EnumValue.IsSet() { - localVarQueryParams.Add("enum_value", parameterToString(localVarOptionals.EnumValue.Value(), "")) + localVarQueryParams.Add("enumValue", parameterToString(localVarOptionals.EnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.PathEnumValue.IsSet() { - localVarQueryParams.Add("path_enum_value", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) + localVarQueryParams.Add("pathEnumValue", parameterToString(localVarOptionals.PathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedPathEnumValue.IsSet() { - localVarQueryParams.Add("nested_path_enum_value", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) + localVarQueryParams.Add("nestedPathEnumValue", parameterToString(localVarOptionals.NestedPathEnumValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed32Value.IsSet() { - localVarQueryParams.Add("sfixed32_value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarOptionals.Sfixed32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sfixed64Value.IsSet() { - localVarQueryParams.Add("sfixed64_value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarOptionals.Sfixed64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint32Value.IsSet() { - localVarQueryParams.Add("sint32_value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) + localVarQueryParams.Add("sint32Value", parameterToString(localVarOptionals.Sint32Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Sint64Value.IsSet() { - localVarQueryParams.Add("sint64_value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) + localVarQueryParams.Add("sint64Value", parameterToString(localVarOptionals.Sint64Value.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringValue.IsSet() { - localVarQueryParams.Add("repeated_string_value", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarOptionals.RepeatedStringValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.OneofString.IsSet() { - localVarQueryParams.Add("oneof_string", parameterToString(localVarOptionals.OneofString.Value(), "")) + localVarQueryParams.Add("oneofString", parameterToString(localVarOptionals.OneofString.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NonConventionalNameValue.IsSet() { localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarOptionals.NonConventionalNameValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.TimestampValue.IsSet() { - localVarQueryParams.Add("timestamp_value", parameterToString(localVarOptionals.TimestampValue.Value(), "")) + localVarQueryParams.Add("timestampValue", parameterToString(localVarOptionals.TimestampValue.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumValue.IsSet() { - localVarQueryParams.Add("repeated_enum_value", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarOptionals.RepeatedEnumValue.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.RepeatedEnumAnnotation.IsSet() { - localVarQueryParams.Add("repeated_enum_annotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedEnumAnnotation", parameterToString(localVarOptionals.RepeatedEnumAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.EnumValueAnnotation.IsSet() { - localVarQueryParams.Add("enum_value_annotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) + localVarQueryParams.Add("enumValueAnnotation", parameterToString(localVarOptionals.EnumValueAnnotation.Value(), "")) } if localVarOptionals != nil && localVarOptionals.RepeatedStringAnnotation.IsSet() { - localVarQueryParams.Add("repeated_string_annotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) + localVarQueryParams.Add("repeatedStringAnnotation", parameterToString(localVarOptionals.RepeatedStringAnnotation.Value(), "multi")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationName.IsSet() { - localVarQueryParams.Add("nested_annotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.name", parameterToString(localVarOptionals.NestedAnnotationName.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationAmount.IsSet() { - localVarQueryParams.Add("nested_annotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.amount", parameterToString(localVarOptionals.NestedAnnotationAmount.Value(), "")) } if localVarOptionals != nil && localVarOptionals.NestedAnnotationOk.IsSet() { - localVarQueryParams.Add("nested_annotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) + localVarQueryParams.Add("nestedAnnotation.ok", parameterToString(localVarOptionals.NestedAnnotationOk.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Int64OverrideType.IsSet() { - localVarQueryParams.Add("int64_override_type", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) + localVarQueryParams.Add("int64OverrideType", parameterToString(localVarOptionals.Int64OverrideType.Value(), "")) } // to determine the Content-Type header localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} @@ -2032,23 +2032,23 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceGetRepeatedQu ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}" - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_float_value"+"}", fmt.Sprintf("%v", pathRepeatedFloatValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_double_value"+"}", fmt.Sprintf("%v", pathRepeatedDoubleValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int64_value"+"}", fmt.Sprintf("%v", pathRepeatedInt64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint64_value"+"}", fmt.Sprintf("%v", pathRepeatedUint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_int32_value"+"}", fmt.Sprintf("%v", pathRepeatedInt32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_fixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedFixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bool_value"+"}", fmt.Sprintf("%v", pathRepeatedBoolValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_string_value"+"}", fmt.Sprintf("%v", pathRepeatedStringValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_bytes_value"+"}", fmt.Sprintf("%v", pathRepeatedBytesValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_uint32_value"+"}", fmt.Sprintf("%v", pathRepeatedUint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_enum_value"+"}", fmt.Sprintf("%v", pathRepeatedEnumValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed32_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sfixed64_value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint32_value"+"}", fmt.Sprintf("%v", pathRepeatedSint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"path_repeated_sint64_value"+"}", fmt.Sprintf("%v", pathRepeatedSint64Value), -1) + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}" + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedFloatValue"+"}", fmt.Sprintf("%v", pathRepeatedFloatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedDoubleValue"+"}", fmt.Sprintf("%v", pathRepeatedDoubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedInt64Value"+"}", fmt.Sprintf("%v", pathRepeatedInt64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedUint64Value"+"}", fmt.Sprintf("%v", pathRepeatedUint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedInt32Value"+"}", fmt.Sprintf("%v", pathRepeatedInt32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedFixed64Value"+"}", fmt.Sprintf("%v", pathRepeatedFixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedFixed32Value"+"}", fmt.Sprintf("%v", pathRepeatedFixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedBoolValue"+"}", fmt.Sprintf("%v", pathRepeatedBoolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedStringValue"+"}", fmt.Sprintf("%v", pathRepeatedStringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedBytesValue"+"}", fmt.Sprintf("%v", pathRepeatedBytesValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedUint32Value"+"}", fmt.Sprintf("%v", pathRepeatedUint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedEnumValue"+"}", fmt.Sprintf("%v", pathRepeatedEnumValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedSfixed32Value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedSfixed64Value"+"}", fmt.Sprintf("%v", pathRepeatedSfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedSint32Value"+"}", fmt.Sprintf("%v", pathRepeatedSint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"pathRepeatedSint64Value"+"}", fmt.Sprintf("%v", pathRepeatedSint64Value), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go index d97adde4a02..c2705f70237 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything.go @@ -16,46 +16,46 @@ import ( // Intentionaly complicated message type to cover many features of Protobuf. type ExamplepbABitOfEverything struct { - SingleNested *ABitOfEverythingNested `json:"single_nested,omitempty"` + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` Uuid string `json:"uuid"` Nested []ABitOfEverythingNested `json:"nested,omitempty"` // Float value field - FloatValue float32 `json:"float_value,omitempty"` - DoubleValue float64 `json:"double_value"` - Int64Value string `json:"int64_value"` - Uint64Value string `json:"uint64_value,omitempty"` - Int32Value int32 `json:"int32_value,omitempty"` - Fixed64Value string `json:"fixed64_value,omitempty"` - Fixed32Value int64 `json:"fixed32_value,omitempty"` - BoolValue bool `json:"bool_value,omitempty"` - StringValue string `json:"string_value,omitempty"` - BytesValue string `json:"bytes_value,omitempty"` - Uint32Value int64 `json:"uint32_value,omitempty"` - EnumValue *ExamplepbNumericEnum `json:"enum_value,omitempty"` - PathEnumValue *PathenumPathEnum `json:"path_enum_value,omitempty"` - NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nested_path_enum_value,omitempty"` - Sfixed32Value int32 `json:"sfixed32_value,omitempty"` - Sfixed64Value string `json:"sfixed64_value,omitempty"` - Sint32Value int32 `json:"sint32_value,omitempty"` - Sint64Value string `json:"sint64_value,omitempty"` - RepeatedStringValue []string `json:"repeated_string_value,omitempty"` - OneofEmpty *interface{} `json:"oneof_empty,omitempty"` - OneofString string `json:"oneof_string,omitempty"` - MapValue map[string]ExamplepbNumericEnum `json:"map_value,omitempty"` - MappedStringValue map[string]string `json:"mapped_string_value,omitempty"` - MappedNestedValue map[string]ABitOfEverythingNested `json:"mapped_nested_value,omitempty"` + FloatValue float32 `json:"floatValue,omitempty"` + DoubleValue float64 `json:"doubleValue,omitempty"` + Int64Value string `json:"int64Value,omitempty"` + Uint64Value string `json:"uint64Value,omitempty"` + Int32Value int32 `json:"int32Value,omitempty"` + Fixed64Value string `json:"fixed64Value,omitempty"` + Fixed32Value int64 `json:"fixed32Value,omitempty"` + BoolValue bool `json:"boolValue,omitempty"` + StringValue string `json:"stringValue,omitempty"` + BytesValue string `json:"bytesValue,omitempty"` + Uint32Value int64 `json:"uint32Value,omitempty"` + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + PathEnumValue *PathenumPathEnum `json:"pathEnumValue,omitempty"` + NestedPathEnumValue *MessagePathEnumNestedPathEnum `json:"nestedPathEnumValue,omitempty"` + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + Sfixed64Value string `json:"sfixed64Value,omitempty"` + Sint32Value int32 `json:"sint32Value,omitempty"` + Sint64Value string `json:"sint64Value,omitempty"` + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + OneofEmpty *interface{} `json:"oneofEmpty,omitempty"` + OneofString string `json:"oneofString,omitempty"` + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` - TimestampValue time.Time `json:"timestamp_value,omitempty"` - RepeatedEnumValue []ExamplepbNumericEnum `json:"repeated_enum_value,omitempty"` + TimestampValue time.Time `json:"timestampValue,omitempty"` + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` // Repeated numeric enum description. - RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeated_enum_annotation,omitempty"` + RepeatedEnumAnnotation []ExamplepbNumericEnum `json:"repeatedEnumAnnotation,omitempty"` // Numeric enum description. - EnumValueAnnotation *ExamplepbNumericEnum `json:"enum_value_annotation,omitempty"` + EnumValueAnnotation *ExamplepbNumericEnum `json:"enumValueAnnotation,omitempty"` // Repeated string description. - RepeatedStringAnnotation []string `json:"repeated_string_annotation,omitempty"` + RepeatedStringAnnotation []string `json:"repeatedStringAnnotation,omitempty"` // Repeated nested object description. - RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeated_nested_annotation,omitempty"` + RepeatedNestedAnnotation []ABitOfEverythingNested `json:"repeatedNestedAnnotation,omitempty"` // Nested object description. - NestedAnnotation *ABitOfEverythingNested `json:"nested_annotation,omitempty"` - Int64OverrideType int64 `json:"int64_override_type,omitempty"` + NestedAnnotation *ABitOfEverythingNested `json:"nestedAnnotation,omitempty"` + Int64OverrideType int64 `json:"int64OverrideType,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go index 3bde251e8d5..4e0b39bd9a1 100644 --- a/examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go +++ b/examples/internal/clients/abe/model_examplepb_a_bit_of_everything_repeated.go @@ -11,20 +11,20 @@ package abe type ExamplepbABitOfEverythingRepeated struct { - PathRepeatedFloatValue []float32 `json:"path_repeated_float_value,omitempty"` - PathRepeatedDoubleValue []float64 `json:"path_repeated_double_value,omitempty"` - PathRepeatedInt64Value []string `json:"path_repeated_int64_value,omitempty"` - PathRepeatedUint64Value []string `json:"path_repeated_uint64_value,omitempty"` - PathRepeatedInt32Value []int32 `json:"path_repeated_int32_value,omitempty"` - PathRepeatedFixed64Value []string `json:"path_repeated_fixed64_value,omitempty"` - PathRepeatedFixed32Value []int64 `json:"path_repeated_fixed32_value,omitempty"` - PathRepeatedBoolValue []bool `json:"path_repeated_bool_value,omitempty"` - PathRepeatedStringValue []string `json:"path_repeated_string_value,omitempty"` - PathRepeatedBytesValue []string `json:"path_repeated_bytes_value,omitempty"` - PathRepeatedUint32Value []int64 `json:"path_repeated_uint32_value,omitempty"` - PathRepeatedEnumValue []ExamplepbNumericEnum `json:"path_repeated_enum_value,omitempty"` - PathRepeatedSfixed32Value []int32 `json:"path_repeated_sfixed32_value,omitempty"` - PathRepeatedSfixed64Value []string `json:"path_repeated_sfixed64_value,omitempty"` - PathRepeatedSint32Value []int32 `json:"path_repeated_sint32_value,omitempty"` - PathRepeatedSint64Value []string `json:"path_repeated_sint64_value,omitempty"` + PathRepeatedFloatValue []float32 `json:"pathRepeatedFloatValue,omitempty"` + PathRepeatedDoubleValue []float64 `json:"pathRepeatedDoubleValue,omitempty"` + PathRepeatedInt64Value []string `json:"pathRepeatedInt64Value,omitempty"` + PathRepeatedUint64Value []string `json:"pathRepeatedUint64Value,omitempty"` + PathRepeatedInt32Value []int32 `json:"pathRepeatedInt32Value,omitempty"` + PathRepeatedFixed64Value []string `json:"pathRepeatedFixed64Value,omitempty"` + PathRepeatedFixed32Value []int64 `json:"pathRepeatedFixed32Value,omitempty"` + PathRepeatedBoolValue []bool `json:"pathRepeatedBoolValue,omitempty"` + PathRepeatedStringValue []string `json:"pathRepeatedStringValue,omitempty"` + PathRepeatedBytesValue []string `json:"pathRepeatedBytesValue,omitempty"` + PathRepeatedUint32Value []int64 `json:"pathRepeatedUint32Value,omitempty"` + PathRepeatedEnumValue []ExamplepbNumericEnum `json:"pathRepeatedEnumValue,omitempty"` + PathRepeatedSfixed32Value []int32 `json:"pathRepeatedSfixed32Value,omitempty"` + PathRepeatedSfixed64Value []string `json:"pathRepeatedSfixed64Value,omitempty"` + PathRepeatedSint32Value []int32 `json:"pathRepeatedSint32Value,omitempty"` + PathRepeatedSint64Value []string `json:"pathRepeatedSint64Value,omitempty"` } diff --git a/examples/internal/clients/abe/model_examplepb_update_v2_request.go b/examples/internal/clients/abe/model_examplepb_update_v2_request.go index 544c83ad794..95c9a710212 100644 --- a/examples/internal/clients/abe/model_examplepb_update_v2_request.go +++ b/examples/internal/clients/abe/model_examplepb_update_v2_request.go @@ -12,5 +12,5 @@ package abe type ExamplepbUpdateV2Request struct { Abe *ExamplepbABitOfEverything `json:"abe,omitempty"` - UpdateMask *ProtobufFieldMask `json:"update_mask,omitempty"` + UpdateMask *ProtobufFieldMask `json:"updateMask,omitempty"` } diff --git a/examples/internal/clients/abe/model_protobuf_any.go b/examples/internal/clients/abe/model_protobuf_any.go index f3e536a4ab5..f0b26154ef9 100644 --- a/examples/internal/clients/abe/model_protobuf_any.go +++ b/examples/internal/clients/abe/model_protobuf_any.go @@ -13,7 +13,7 @@ package abe // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"type_url,omitempty"` + TypeUrl string `json:"typeUrl,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. Value string `json:"value,omitempty"` } diff --git a/examples/internal/clients/echo/api/swagger.yaml b/examples/internal/clients/echo/api/swagger.yaml index 193d9301b5a..c11835f5328 100644 --- a/examples/internal/clients/echo/api/swagger.yaml +++ b/examples/internal/clients/echo/api/swagger.yaml @@ -52,7 +52,7 @@ paths: type: "string" format: "int64" x-exportParamName: "Num" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -132,7 +132,7 @@ paths: required: true type: "string" x-exportParamName: "Lang" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -181,7 +181,7 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" - /v1/example/echo1/{id}/{line_num}/{status.note}: + /v1/example/echo1/{id}/{lineNum}/{status.note}: get: tags: - "EchoService" @@ -195,7 +195,7 @@ paths: required: true type: "string" x-exportParamName: "Id" - - name: "line_num" + - name: "lineNum" in: "path" required: true type: "string" @@ -276,7 +276,7 @@ paths: format: "int64" x-exportParamName: "Num" x-optionalDataType: "String" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -362,7 +362,7 @@ paths: format: "int64" x-exportParamName: "Num" x-optionalDataType: "String" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -439,7 +439,7 @@ definitions: num: type: "string" format: "int64" - line_num: + lineNum: type: "string" format: "int64" lang: @@ -456,8 +456,8 @@ definitions: "no": note: "note" progress: "progress" - line_num: "line_num" num: "num" + lineNum: "lineNum" en: "en" id: "id" lang: "lang" @@ -467,7 +467,7 @@ definitions: protobufAny: type: "object" properties: - type_url: + typeUrl: type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ diff --git a/examples/internal/clients/echo/api_echo_service.go b/examples/internal/clients/echo/api_echo_service.go index b3aad8bcd2c..5a4eb49d1f9 100644 --- a/examples/internal/clients/echo/api_echo_service.go +++ b/examples/internal/clients/echo/api_echo_service.go @@ -173,7 +173,7 @@ func (a *EchoServiceApiService) EchoServiceEcho2(ctx context.Context, id string, localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) @@ -315,7 +315,7 @@ func (a *EchoServiceApiService) EchoServiceEcho3(ctx context.Context, id string, localVarFormParams := url.Values{} if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.StatusProgress.IsSet() { localVarQueryParams.Add("status.progress", parameterToString(localVarOptionals.StatusProgress.Value(), "")) @@ -442,9 +442,9 @@ func (a *EchoServiceApiService) EchoServiceEcho4(ctx context.Context, id string, ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/echo1/{id}/{line_num}/{status.note}" + localVarPath := a.client.cfg.BasePath + "/v1/example/echo1/{id}/{lineNum}/{status.note}" localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"line_num"+"}", fmt.Sprintf("%v", lineNum), -1) + localVarPath = strings.Replace(localVarPath, "{"+"lineNum"+"}", fmt.Sprintf("%v", lineNum), -1) localVarPath = strings.Replace(localVarPath, "{"+"status.note"+"}", fmt.Sprintf("%v", statusNote), -1) localVarHeaderParams := make(map[string]string) @@ -592,7 +592,7 @@ func (a *EchoServiceApiService) EchoServiceEcho5(ctx context.Context, noNote str localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) } if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) @@ -833,7 +833,7 @@ func (a *EchoServiceApiService) EchoServiceEchoDelete(ctx context.Context, local localVarQueryParams.Add("num", parameterToString(localVarOptionals.Num.Value(), "")) } if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) diff --git a/examples/internal/clients/echo/model_examplepb_simple_message.go b/examples/internal/clients/echo/model_examplepb_simple_message.go index d0c0d90e9eb..9b029fa0a57 100644 --- a/examples/internal/clients/echo/model_examplepb_simple_message.go +++ b/examples/internal/clients/echo/model_examplepb_simple_message.go @@ -14,7 +14,7 @@ type ExamplepbSimpleMessage struct { // Id represents the message identifier. Id string `json:"id,omitempty"` Num string `json:"num,omitempty"` - LineNum string `json:"line_num,omitempty"` + LineNum string `json:"lineNum,omitempty"` Lang string `json:"lang,omitempty"` Status *ExamplepbEmbedded `json:"status,omitempty"` En string `json:"en,omitempty"` diff --git a/examples/internal/clients/echo/model_protobuf_any.go b/examples/internal/clients/echo/model_protobuf_any.go index 198cda747f2..eca688d5411 100644 --- a/examples/internal/clients/echo/model_protobuf_any.go +++ b/examples/internal/clients/echo/model_protobuf_any.go @@ -12,7 +12,7 @@ package echo // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"type_url,omitempty"` + TypeUrl string `json:"typeUrl,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. Value string `json:"value,omitempty"` } diff --git a/examples/internal/clients/responsebody/api/swagger.yaml b/examples/internal/clients/responsebody/api/swagger.yaml index 4d9c6d29f51..59eec35d14f 100644 --- a/examples/internal/clients/responsebody/api/swagger.yaml +++ b/examples/internal/clients/responsebody/api/swagger.yaml @@ -146,7 +146,7 @@ definitions: protobufAny: type: "object" properties: - type_url: + typeUrl: type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ @@ -202,8 +202,8 @@ definitions: \n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n\ \ \"value\": \"1.212s\"\n }" example: + typeUrl: "typeUrl" value: "value" - type_url: "type_url" rpcStatus: type: "object" properties: @@ -219,10 +219,10 @@ definitions: example: code: 0 details: - - value: "value" - type_url: "type_url" - - value: "value" - type_url: "type_url" + - typeUrl: "typeUrl" + value: "value" + - typeUrl: "typeUrl" + value: "value" message: "message" Stream result of examplepbResponseBodyOut: properties: @@ -236,8 +236,8 @@ definitions: error: code: 0 details: - - value: "value" - type_url: "type_url" - - value: "value" - type_url: "type_url" + - typeUrl: "typeUrl" + value: "value" + - typeUrl: "typeUrl" + value: "value" message: "message" diff --git a/examples/internal/clients/responsebody/model_protobuf_any.go b/examples/internal/clients/responsebody/model_protobuf_any.go index 28dac0342e2..37441229127 100644 --- a/examples/internal/clients/responsebody/model_protobuf_any.go +++ b/examples/internal/clients/responsebody/model_protobuf_any.go @@ -12,7 +12,7 @@ package responsebody // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"type_url,omitempty"` + TypeUrl string `json:"typeUrl,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. Value string `json:"value,omitempty"` } diff --git a/examples/internal/clients/unannotatedecho/api/swagger.yaml b/examples/internal/clients/unannotatedecho/api/swagger.yaml index 61b0ea7d028..94f0ff5937c 100644 --- a/examples/internal/clients/unannotatedecho/api/swagger.yaml +++ b/examples/internal/clients/unannotatedecho/api/swagger.yaml @@ -61,7 +61,7 @@ paths: type: "string" x-exportParamName: "Duration" x-optionalDataType: "String" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -165,7 +165,7 @@ paths: type: "string" x-exportParamName: "Duration" x-optionalDataType: "String" - - name: "line_num" + - name: "lineNum" in: "query" required: false type: "string" @@ -244,7 +244,7 @@ definitions: format: "int64" duration: type: "string" - line_num: + lineNum: type: "string" format: "int64" lang: @@ -263,8 +263,8 @@ definitions: "no": note: "note" progress: "progress" - line_num: "line_num" num: "num" + lineNum: "lineNum" en: "en" id: "id" lang: "lang" @@ -274,7 +274,7 @@ definitions: protobufAny: type: "object" properties: - type_url: + typeUrl: type: "string" description: "A URL/resource name that uniquely identifies the type of the\ \ serialized\nprotocol buffer message. This string must contain at least\n\ diff --git a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go index 7183d28741e..79d1c9ae844 100644 --- a/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go +++ b/examples/internal/clients/unannotatedecho/api_unannotated_echo_service.go @@ -178,7 +178,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEcho2(ctx conte localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) } if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) @@ -430,7 +430,7 @@ func (a *UnannotatedEchoServiceApiService) UnannotatedEchoServiceEchoDelete(ctx localVarQueryParams.Add("duration", parameterToString(localVarOptionals.Duration.Value(), "")) } if localVarOptionals != nil && localVarOptionals.LineNum.IsSet() { - localVarQueryParams.Add("line_num", parameterToString(localVarOptionals.LineNum.Value(), "")) + localVarQueryParams.Add("lineNum", parameterToString(localVarOptionals.LineNum.Value(), "")) } if localVarOptionals != nil && localVarOptionals.Lang.IsSet() { localVarQueryParams.Add("lang", parameterToString(localVarOptionals.Lang.Value(), "")) diff --git a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go index 3798e0da89b..79c87c6416e 100644 --- a/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go +++ b/examples/internal/clients/unannotatedecho/model_examplepb_unannotated_simple_message.go @@ -15,7 +15,7 @@ type ExamplepbUnannotatedSimpleMessage struct { Id string `json:"id,omitempty"` Num string `json:"num,omitempty"` Duration string `json:"duration,omitempty"` - LineNum string `json:"line_num,omitempty"` + LineNum string `json:"lineNum,omitempty"` Lang string `json:"lang,omitempty"` Status *ExamplepbUnannotatedEmbedded `json:"status,omitempty"` En string `json:"en,omitempty"` diff --git a/examples/internal/clients/unannotatedecho/model_protobuf_any.go b/examples/internal/clients/unannotatedecho/model_protobuf_any.go index 57dcc002ecb..4b15d3ef00d 100644 --- a/examples/internal/clients/unannotatedecho/model_protobuf_any.go +++ b/examples/internal/clients/unannotatedecho/model_protobuf_any.go @@ -12,7 +12,7 @@ package unannotatedecho // `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example \"foo.bar.com/x/y.z\" will yield type name \"y.z\". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { \"@type\": \"type.googleapis.com/google.profile.Person\", \"firstName\": , \"lastName\": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { \"@type\": \"type.googleapis.com/google.protobuf.Duration\", \"value\": \"1.212s\" } type ProtobufAny struct { // A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one \"/\" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading \".\" is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics. - TypeUrl string `json:"type_url,omitempty"` + TypeUrl string `json:"typeUrl,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. Value string `json:"value,omitempty"` } diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 056422a1f49..64afbdd0c3f 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1904,40 +1904,149 @@ func TestNonStandardNames(t *testing.T) { port int method string jsonBody string + want proto.Message }{ { "Test standard update method", 8081, "update", - `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, + `{ + "id": "foo", + "Num": "1", + "line_num": "42", + "langIdent": "English", + "STATUS": "good", + "en_GB": "1", + "no": "yes", + "thing": { + "subThing": { + "sub_value": "hi" + } + } + }`, + &examplepb.NonStandardMessage{ + Id: "foo", + Num: 1, + LineNum: 42, + LangIdent: "English", + STATUS: "good", + En_GB: 1, + No: "yes", + Thing: &examplepb.NonStandardMessage_Thing{ + SubThing: &examplepb.NonStandardMessage_Thing_SubThing{ + SubValue: "hi", + }, + }, + }, }, { "Test update method using json_names in message", 8081, "update_with_json_names", // N.B. json_names have no effect if not using UseProtoNames: false - `{"id":"foo","Num":"1","line_num":"42","langIdent":"English","STATUS":"good","en_GB":"1","no":"yes","thing":{"subThing":{"sub_value":"hi"}}}`, + `{ + "id": "foo", + "Num": "1", + "line_num": "42", + "langIdent": "English", + "STATUS": "good", + "en_GB": "1", + "no": "yes", + "thing": { + "subThing": { + "sub_value": "hi" + } + } + }`, + &examplepb.NonStandardMessageWithJSONNames{ + Id: "foo", + Num: 1, + LineNum: 42, + LangIdent: "English", + STATUS: "good", + En_GB: 1, + No: "yes", + Thing: &examplepb.NonStandardMessageWithJSONNames_Thing{ + SubThing: &examplepb.NonStandardMessageWithJSONNames_Thing_SubThing{ + SubValue: "hi", + }, + }, + }, }, { "Test standard update method with UseProtoNames: false marshaller option", 8082, "update", - `{"id":"foo","Num":"1","lineNum":"42","langIdent":"English","STATUS":"good","enGB":"1","no":"yes","thing":{"subThing":{"subValue":"hi"}}}`, + `{ + "id": "foo", + "Num": "1", + "lineNum": "42", + "langIdent": "English", + "STATUS": "good", + "enGB": "1", + "no": "yes", + "thing": { + "subThing": { + "subValue": "hi" + } + } + }`, + &examplepb.NonStandardMessage{ + Id: "foo", + Num: 1, + LineNum: 42, + LangIdent: "English", + STATUS: "good", + En_GB: 1, + No: "yes", + Thing: &examplepb.NonStandardMessage_Thing{ + SubThing: &examplepb.NonStandardMessage_Thing_SubThing{ + SubValue: "hi", + }, + }, + }, }, { "Test update method using json_names in message with UseProtoNames: false marshaller option", 8082, "update_with_json_names", - `{"ID":"foo","Num":"1","LineNum":"42","langIdent":"English","status":"good","En_GB":"1","yes":"yes","Thingy":{"SubThing":{"sub_Value":"hi"}}}`, + `{ + "ID": "foo", + "Num": "1", + "LineNum": "42", + "langIdent": "English", + "status": "good", + "En_GB": "1", + "yes": "yes", + "Thingy": { + "SubThing": { + "sub_Value": "hi" + } + } + }`, + &examplepb.NonStandardMessageWithJSONNames{ + Id: "foo", + Num: 1, + LineNum: 42, + LangIdent: "English", + STATUS: "good", + En_GB: 1, + No: "yes", + Thing: &examplepb.NonStandardMessageWithJSONNames_Thing{ + SubThing: &examplepb.NonStandardMessageWithJSONNames_Thing_SubThing{ + SubValue: "hi", + }, + }, + }, }, } { t.Run(tc.name, func(t *testing.T) { - testNonStandardNames(t, tc.port, tc.method, tc.jsonBody) + testNonStandardNames(t, tc.port, tc.method, tc.jsonBody, tc.want) }) } } -func testNonStandardNames(t *testing.T, port int, method string, jsonBody string) { +func testNonStandardNames(t *testing.T, port int, method string, jsonBody string, want proto.Message) { req, err := http.NewRequest( http.MethodPatch, fmt.Sprintf("http://localhost:%d/v1/example/non_standard/%s", port, method), @@ -1956,28 +2065,16 @@ func testNonStandardNames(t *testing.T, port int, method string, jsonBody string t.Errorf("patchResp body couldn't be read: %v", err) } + t.Log(string(body)) + if got, want := patchResp.StatusCode, http.StatusOK; got != want { t.Errorf("patchResp.StatusCode= %d; want %d resp: %v", got, want, string(body)) } - var got examplepb.NonStandardMessage - err = marshaler.Unmarshal(body, &got) + got := want.ProtoReflect().New().Interface() + err = marshaler.Unmarshal(body, got) if err != nil { - t.Errorf("marshler.Unmarshal failed: %v", err) - } - want := &examplepb.NonStandardMessage{ - Id: "foo", - Num: 1, - LineNum: 42, - LangIdent: "English", - STATUS: "good", - En_GB: 1, - No: "yes", - Thing: &examplepb.NonStandardMessage_Thing{ - SubThing: &examplepb.NonStandardMessage_Thing_SubThing{ - SubValue: "hi", - }, - }, + t.Fatalf("marshaler.Unmarshal failed: %v", err) } if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { t.Errorf(diff) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index 2d45ea3c5b3..f3dd78a5cf5 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -140,7 +140,7 @@ } } }, - "/v1/example/a_bit_of_everything/params/get/nested_enum/{single_nested.ok}": { + "/v1/example/a_bit_of_everything/params/get/nested_enum/{singleNested.ok}": { "get": { "operationId": "ABitOfEverythingService_CheckNestedEnumGetQueryParams", "responses": { @@ -176,7 +176,7 @@ }, "parameters": [ { - "name": "single_nested.ok", + "name": "singleNested.ok", "description": "DeepEnum description.", "in": "path", "required": true, @@ -187,14 +187,14 @@ ] }, { - "name": "single_nested.name", + "name": "singleNested.name", "description": "name is nested field.", "in": "query", "required": false, "type": "string" }, { - "name": "single_nested.amount", + "name": "singleNested.amount", "in": "query", "required": false, "type": "integer", @@ -207,7 +207,7 @@ "type": "string" }, { - "name": "float_value", + "name": "floatValue", "description": "Float value field", "in": "query", "required": true, @@ -216,76 +216,76 @@ "default": "0.2" }, { - "name": "double_value", + "name": "doubleValue", "in": "query", "required": false, "type": "number", "format": "double" }, { - "name": "int64_value", + "name": "int64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "uint64_value", + "name": "uint64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "int32_value", + "name": "int32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "fixed64_value", + "name": "fixed64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "fixed32_value", + "name": "fixed32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "bool_value", + "name": "boolValue", "in": "query", "required": false, "type": "boolean", "format": "boolean" }, { - "name": "string_value", + "name": "stringValue", "in": "query", "required": false, "type": "string" }, { - "name": "bytes_value", + "name": "bytesValue", "in": "query", "required": false, "type": "string", "format": "byte" }, { - "name": "uint32_value", + "name": "uint32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "enum_value", + "name": "enumValue", "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -297,7 +297,7 @@ "default": "ZERO" }, { - "name": "path_enum_value", + "name": "pathEnumValue", "in": "query", "required": false, "type": "string", @@ -308,7 +308,7 @@ "default": "ABC" }, { - "name": "nested_path_enum_value", + "name": "nestedPathEnumValue", "in": "query", "required": false, "type": "string", @@ -319,35 +319,35 @@ "default": "GHI" }, { - "name": "sfixed32_value", + "name": "sfixed32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sfixed64_value", + "name": "sfixed64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "sint32_value", + "name": "sint32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sint64_value", + "name": "sint64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "repeated_string_value", + "name": "repeatedStringValue", "in": "query", "required": false, "type": "array", @@ -357,7 +357,7 @@ "collectionFormat": "multi" }, { - "name": "oneof_string", + "name": "oneofString", "in": "query", "required": false, "type": "string" @@ -369,14 +369,14 @@ "type": "string" }, { - "name": "timestamp_value", + "name": "timestampValue", "in": "query", "required": false, "type": "string", "format": "date-time" }, { - "name": "repeated_enum_value", + "name": "repeatedEnumValue", "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -391,7 +391,7 @@ "collectionFormat": "multi" }, { - "name": "repeated_enum_annotation", + "name": "repeatedEnumAnnotation", "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -406,7 +406,7 @@ "collectionFormat": "multi" }, { - "name": "enum_value_annotation", + "name": "enumValueAnnotation", "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -418,7 +418,7 @@ "default": "ZERO" }, { - "name": "repeated_string_annotation", + "name": "repeatedStringAnnotation", "description": "Repeated string title. Repeated string description.", "in": "query", "required": false, @@ -429,21 +429,21 @@ "collectionFormat": "multi" }, { - "name": "nested_annotation.name", + "name": "nestedAnnotation.name", "description": "name is nested field.", "in": "query", "required": false, "type": "string" }, { - "name": "nested_annotation.amount", + "name": "nestedAnnotation.amount", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "int64_override_type", + "name": "int64OverrideType", "in": "query", "required": false, "type": "integer", @@ -455,7 +455,7 @@ ] } }, - "/v1/example/a_bit_of_everything/params/get/{single_nested.name}": { + "/v1/example/a_bit_of_everything/params/get/{singleNested.name}": { "get": { "operationId": "ABitOfEverythingService_CheckGetQueryParams", "responses": { @@ -491,21 +491,21 @@ }, "parameters": [ { - "name": "single_nested.name", + "name": "singleNested.name", "description": "name is nested field.", "in": "path", "required": true, "type": "string" }, { - "name": "single_nested.amount", + "name": "singleNested.amount", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "single_nested.ok", + "name": "singleNested.ok", "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, @@ -523,7 +523,7 @@ "type": "string" }, { - "name": "float_value", + "name": "floatValue", "description": "Float value field", "in": "query", "required": true, @@ -532,76 +532,76 @@ "default": "0.2" }, { - "name": "double_value", + "name": "doubleValue", "in": "query", "required": false, "type": "number", "format": "double" }, { - "name": "int64_value", + "name": "int64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "uint64_value", + "name": "uint64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "int32_value", + "name": "int32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "fixed64_value", + "name": "fixed64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "fixed32_value", + "name": "fixed32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "bool_value", + "name": "boolValue", "in": "query", "required": false, "type": "boolean", "format": "boolean" }, { - "name": "string_value", + "name": "stringValue", "in": "query", "required": false, "type": "string" }, { - "name": "bytes_value", + "name": "bytesValue", "in": "query", "required": false, "type": "string", "format": "byte" }, { - "name": "uint32_value", + "name": "uint32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "enum_value", + "name": "enumValue", "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -613,7 +613,7 @@ "default": "ZERO" }, { - "name": "path_enum_value", + "name": "pathEnumValue", "in": "query", "required": false, "type": "string", @@ -624,7 +624,7 @@ "default": "ABC" }, { - "name": "nested_path_enum_value", + "name": "nestedPathEnumValue", "in": "query", "required": false, "type": "string", @@ -635,35 +635,35 @@ "default": "GHI" }, { - "name": "sfixed32_value", + "name": "sfixed32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sfixed64_value", + "name": "sfixed64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "sint32_value", + "name": "sint32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sint64_value", + "name": "sint64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "repeated_string_value", + "name": "repeatedStringValue", "in": "query", "required": false, "type": "array", @@ -673,7 +673,7 @@ "collectionFormat": "multi" }, { - "name": "oneof_string", + "name": "oneofString", "in": "query", "required": false, "type": "string" @@ -685,14 +685,14 @@ "type": "string" }, { - "name": "timestamp_value", + "name": "timestampValue", "in": "query", "required": false, "type": "string", "format": "date-time" }, { - "name": "repeated_enum_value", + "name": "repeatedEnumValue", "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -707,7 +707,7 @@ "collectionFormat": "multi" }, { - "name": "repeated_enum_annotation", + "name": "repeatedEnumAnnotation", "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -722,7 +722,7 @@ "collectionFormat": "multi" }, { - "name": "enum_value_annotation", + "name": "enumValueAnnotation", "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -734,7 +734,7 @@ "default": "ZERO" }, { - "name": "repeated_string_annotation", + "name": "repeatedStringAnnotation", "description": "Repeated string title. Repeated string description.", "in": "query", "required": false, @@ -745,14 +745,14 @@ "collectionFormat": "multi" }, { - "name": "nested_annotation.amount", + "name": "nestedAnnotation.amount", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "nested_annotation.ok", + "name": "nestedAnnotation.ok", "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, @@ -764,7 +764,7 @@ "default": "FALSE" }, { - "name": "int64_override_type", + "name": "int64OverrideType", "in": "query", "required": false, "type": "integer", @@ -776,7 +776,7 @@ ] } }, - "/v1/example/a_bit_of_everything/params/post/{string_value}": { + "/v1/example/a_bit_of_everything/params/post/{stringValue}": { "post": { "operationId": "ABitOfEverythingService_CheckPostQueryParams", "responses": { @@ -812,7 +812,7 @@ }, "parameters": [ { - "name": "string_value", + "name": "stringValue", "in": "path", "required": true, "type": "string" @@ -873,21 +873,21 @@ "type": "string" }, { - "name": "single_nested.name", + "name": "singleNested.name", "description": "name is nested field.", "in": "query", "required": false, "type": "string" }, { - "name": "single_nested.amount", + "name": "singleNested.amount", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "single_nested.ok", + "name": "singleNested.ok", "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, @@ -899,7 +899,7 @@ "default": "FALSE" }, { - "name": "float_value", + "name": "floatValue", "description": "Float value field", "in": "query", "required": true, @@ -908,76 +908,76 @@ "default": "0.2" }, { - "name": "double_value", + "name": "doubleValue", "in": "query", "required": false, "type": "number", "format": "double" }, { - "name": "int64_value", + "name": "int64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "uint64_value", + "name": "uint64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "int32_value", + "name": "int32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "fixed64_value", + "name": "fixed64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "fixed32_value", + "name": "fixed32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "bool_value", + "name": "boolValue", "in": "query", "required": false, "type": "boolean", "format": "boolean" }, { - "name": "string_value", + "name": "stringValue", "in": "query", "required": false, "type": "string" }, { - "name": "bytes_value", + "name": "bytesValue", "in": "query", "required": false, "type": "string", "format": "byte" }, { - "name": "uint32_value", + "name": "uint32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "enum_value", + "name": "enumValue", "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -989,7 +989,7 @@ "default": "ZERO" }, { - "name": "path_enum_value", + "name": "pathEnumValue", "in": "query", "required": false, "type": "string", @@ -1000,7 +1000,7 @@ "default": "ABC" }, { - "name": "nested_path_enum_value", + "name": "nestedPathEnumValue", "in": "query", "required": false, "type": "string", @@ -1011,35 +1011,35 @@ "default": "GHI" }, { - "name": "sfixed32_value", + "name": "sfixed32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sfixed64_value", + "name": "sfixed64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "sint32_value", + "name": "sint32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sint64_value", + "name": "sint64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "repeated_string_value", + "name": "repeatedStringValue", "in": "query", "required": false, "type": "array", @@ -1049,7 +1049,7 @@ "collectionFormat": "multi" }, { - "name": "oneof_string", + "name": "oneofString", "in": "query", "required": false, "type": "string" @@ -1061,14 +1061,14 @@ "type": "string" }, { - "name": "timestamp_value", + "name": "timestampValue", "in": "query", "required": false, "type": "string", "format": "date-time" }, { - "name": "repeated_enum_value", + "name": "repeatedEnumValue", "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -1083,7 +1083,7 @@ "collectionFormat": "multi" }, { - "name": "repeated_enum_annotation", + "name": "repeatedEnumAnnotation", "description": "Repeated numeric enum title. Repeated numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -1098,7 +1098,7 @@ "collectionFormat": "multi" }, { - "name": "enum_value_annotation", + "name": "enumValueAnnotation", "description": "Numeric enum title. Numeric enum description.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -1110,7 +1110,7 @@ "default": "ZERO" }, { - "name": "repeated_string_annotation", + "name": "repeatedStringAnnotation", "description": "Repeated string title. Repeated string description.", "in": "query", "required": false, @@ -1121,21 +1121,21 @@ "collectionFormat": "multi" }, { - "name": "nested_annotation.name", + "name": "nestedAnnotation.name", "description": "name is nested field.", "in": "query", "required": false, "type": "string" }, { - "name": "nested_annotation.amount", + "name": "nestedAnnotation.amount", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "nested_annotation.ok", + "name": "nestedAnnotation.ok", "description": "DeepEnum description.\n\n - FALSE: FALSE is false.\n - TRUE: TRUE is true.", "in": "query", "required": false, @@ -1147,7 +1147,7 @@ "default": "FALSE" }, { - "name": "int64_override_type", + "name": "int64OverrideType", "in": "query", "required": false, "type": "integer", @@ -1165,7 +1165,7 @@ } } }, - "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}/{enum_value}/{path_enum_value}/{nested_path_enum_value}/{enum_value_annotation}": { + "/v1/example/a_bit_of_everything/{floatValue}/{doubleValue}/{int64Value}/separator/{uint64Value}/{int32Value}/{fixed64Value}/{fixed32Value}/{boolValue}/{stringValue}/{uint32Value}/{sfixed32Value}/{sfixed64Value}/{sint32Value}/{sint64Value}/{nonConventionalNameValue}/{enumValue}/{pathEnumValue}/{nestedPathEnumValue}/{enumValueAnnotation}": { "post": { "summary": "Create a new ABitOfEverything", "description": "This API creates a new ABitOfEverything", @@ -1203,7 +1203,7 @@ }, "parameters": [ { - "name": "float_value", + "name": "floatValue", "description": "Float value field", "in": "path", "required": true, @@ -1212,90 +1212,90 @@ "default": "0.2" }, { - "name": "double_value", + "name": "doubleValue", "in": "path", "required": true, "type": "number", "format": "double" }, { - "name": "int64_value", + "name": "int64Value", "in": "path", "required": true, "type": "string", "format": "int64" }, { - "name": "uint64_value", + "name": "uint64Value", "in": "path", "required": true, "type": "string", "format": "uint64" }, { - "name": "int32_value", + "name": "int32Value", "in": "path", "required": true, "type": "integer", "format": "int32" }, { - "name": "fixed64_value", + "name": "fixed64Value", "in": "path", "required": true, "type": "string", "format": "uint64" }, { - "name": "fixed32_value", + "name": "fixed32Value", "in": "path", "required": true, "type": "integer", "format": "int64" }, { - "name": "bool_value", + "name": "boolValue", "in": "path", "required": true, "type": "boolean", "format": "boolean" }, { - "name": "string_value", + "name": "stringValue", "in": "path", "required": true, "type": "string" }, { - "name": "uint32_value", + "name": "uint32Value", "in": "path", "required": true, "type": "integer", "format": "int64" }, { - "name": "sfixed32_value", + "name": "sfixed32Value", "in": "path", "required": true, "type": "integer", "format": "int32" }, { - "name": "sfixed64_value", + "name": "sfixed64Value", "in": "path", "required": true, "type": "string", "format": "int64" }, { - "name": "sint32_value", + "name": "sint32Value", "in": "path", "required": true, "type": "integer", "format": "int32" }, { - "name": "sint64_value", + "name": "sint64Value", "in": "path", "required": true, "type": "string", @@ -1308,7 +1308,7 @@ "type": "string" }, { - "name": "enum_value", + "name": "enumValue", "in": "path", "required": true, "type": "string", @@ -1318,7 +1318,7 @@ ] }, { - "name": "path_enum_value", + "name": "pathEnumValue", "in": "path", "required": true, "type": "string", @@ -1328,7 +1328,7 @@ ] }, { - "name": "nested_path_enum_value", + "name": "nestedPathEnumValue", "in": "path", "required": true, "type": "string", @@ -1338,7 +1338,7 @@ ] }, { - "name": "enum_value_annotation", + "name": "enumValueAnnotation", "description": "Numeric enum description.", "in": "path", "required": true, @@ -1354,7 +1354,7 @@ ] } }, - "/v1/example/a_bit_of_everything/{single_nested.name}": { + "/v1/example/a_bit_of_everything/{singleNested.name}": { "post": { "operationId": "ABitOfEverythingService_DeepPathEcho", "responses": { @@ -1390,7 +1390,7 @@ }, "parameters": [ { - "name": "single_nested.name", + "name": "singleNested.name", "description": "name is nested field.", "in": "path", "required": true, @@ -1565,7 +1565,7 @@ ] } }, - "/v1/example/a_bit_of_everything_repeated/{path_repeated_float_value}/{path_repeated_double_value}/{path_repeated_int64_value}/{path_repeated_uint64_value}/{path_repeated_int32_value}/{path_repeated_fixed64_value}/{path_repeated_fixed32_value}/{path_repeated_bool_value}/{path_repeated_string_value}/{path_repeated_bytes_value}/{path_repeated_uint32_value}/{path_repeated_enum_value}/{path_repeated_sfixed32_value}/{path_repeated_sfixed64_value}/{path_repeated_sint32_value}/{path_repeated_sint64_value}": { + "/v1/example/a_bit_of_everything_repeated/{pathRepeatedFloatValue}/{pathRepeatedDoubleValue}/{pathRepeatedInt64Value}/{pathRepeatedUint64Value}/{pathRepeatedInt32Value}/{pathRepeatedFixed64Value}/{pathRepeatedFixed32Value}/{pathRepeatedBoolValue}/{pathRepeatedStringValue}/{pathRepeatedBytesValue}/{pathRepeatedUint32Value}/{pathRepeatedEnumValue}/{pathRepeatedSfixed32Value}/{pathRepeatedSfixed64Value}/{pathRepeatedSint32Value}/{pathRepeatedSint64Value}": { "get": { "operationId": "ABitOfEverythingService_GetRepeatedQuery", "responses": { @@ -1601,7 +1601,7 @@ }, "parameters": [ { - "name": "path_repeated_float_value", + "name": "pathRepeatedFloatValue", "description": "repeated values. they are comma-separated in path", "in": "path", "required": true, @@ -1614,7 +1614,7 @@ "minItems": 1 }, { - "name": "path_repeated_double_value", + "name": "pathRepeatedDoubleValue", "in": "path", "required": true, "type": "array", @@ -1626,7 +1626,7 @@ "minItems": 1 }, { - "name": "path_repeated_int64_value", + "name": "pathRepeatedInt64Value", "in": "path", "required": true, "type": "array", @@ -1638,7 +1638,7 @@ "minItems": 1 }, { - "name": "path_repeated_uint64_value", + "name": "pathRepeatedUint64Value", "in": "path", "required": true, "type": "array", @@ -1650,7 +1650,7 @@ "minItems": 1 }, { - "name": "path_repeated_int32_value", + "name": "pathRepeatedInt32Value", "in": "path", "required": true, "type": "array", @@ -1662,7 +1662,7 @@ "minItems": 1 }, { - "name": "path_repeated_fixed64_value", + "name": "pathRepeatedFixed64Value", "in": "path", "required": true, "type": "array", @@ -1674,7 +1674,7 @@ "minItems": 1 }, { - "name": "path_repeated_fixed32_value", + "name": "pathRepeatedFixed32Value", "in": "path", "required": true, "type": "array", @@ -1686,7 +1686,7 @@ "minItems": 1 }, { - "name": "path_repeated_bool_value", + "name": "pathRepeatedBoolValue", "in": "path", "required": true, "type": "array", @@ -1698,7 +1698,7 @@ "minItems": 1 }, { - "name": "path_repeated_string_value", + "name": "pathRepeatedStringValue", "in": "path", "required": true, "type": "array", @@ -1709,7 +1709,7 @@ "minItems": 1 }, { - "name": "path_repeated_bytes_value", + "name": "pathRepeatedBytesValue", "in": "path", "required": true, "type": "array", @@ -1721,7 +1721,7 @@ "minItems": 1 }, { - "name": "path_repeated_uint32_value", + "name": "pathRepeatedUint32Value", "in": "path", "required": true, "type": "array", @@ -1733,7 +1733,7 @@ "minItems": 1 }, { - "name": "path_repeated_enum_value", + "name": "pathRepeatedEnumValue", "in": "path", "required": true, "type": "array", @@ -1748,7 +1748,7 @@ "minItems": 1 }, { - "name": "path_repeated_sfixed32_value", + "name": "pathRepeatedSfixed32Value", "in": "path", "required": true, "type": "array", @@ -1760,7 +1760,7 @@ "minItems": 1 }, { - "name": "path_repeated_sfixed64_value", + "name": "pathRepeatedSfixed64Value", "in": "path", "required": true, "type": "array", @@ -1772,7 +1772,7 @@ "minItems": 1 }, { - "name": "path_repeated_sint32_value", + "name": "pathRepeatedSint32Value", "in": "path", "required": true, "type": "array", @@ -1784,7 +1784,7 @@ "minItems": 1 }, { - "name": "path_repeated_sint64_value", + "name": "pathRepeatedSint64Value", "in": "path", "required": true, "type": "array", @@ -2405,7 +2405,7 @@ "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" }, "properties": { - "single_nested": { + "singleNested": { "$ref": "#/definitions/ABitOfEverythingNested" }, "uuid": { @@ -2419,7 +2419,7 @@ "$ref": "#/definitions/ABitOfEverythingNested" } }, - "float_value": { + "floatValue": { "type": "number", "format": "float", "default": "0.2", @@ -2428,95 +2428,95 @@ "float_value" ] }, - "double_value": { + "doubleValue": { "type": "number", "format": "double" }, - "int64_value": { + "int64Value": { "type": "string", "format": "int64" }, - "uint64_value": { + "uint64Value": { "type": "string", "format": "uint64" }, - "int32_value": { + "int32Value": { "type": "integer", "format": "int32" }, - "fixed64_value": { + "fixed64Value": { "type": "string", "format": "uint64" }, - "fixed32_value": { + "fixed32Value": { "type": "integer", "format": "int64" }, - "bool_value": { + "boolValue": { "type": "boolean", "format": "boolean" }, - "string_value": { + "stringValue": { "type": "string" }, - "bytes_value": { + "bytesValue": { "type": "string", "format": "byte" }, - "uint32_value": { + "uint32Value": { "type": "integer", "format": "int64" }, - "enum_value": { + "enumValue": { "$ref": "#/definitions/examplepbNumericEnum" }, - "path_enum_value": { + "pathEnumValue": { "$ref": "#/definitions/pathenumPathEnum" }, - "nested_path_enum_value": { + "nestedPathEnumValue": { "$ref": "#/definitions/MessagePathEnumNestedPathEnum" }, - "sfixed32_value": { + "sfixed32Value": { "type": "integer", "format": "int32" }, - "sfixed64_value": { + "sfixed64Value": { "type": "string", "format": "int64" }, - "sint32_value": { + "sint32Value": { "type": "integer", "format": "int32" }, - "sint64_value": { + "sint64Value": { "type": "string", "format": "int64" }, - "repeated_string_value": { + "repeatedStringValue": { "type": "array", "items": { "type": "string" } }, - "oneof_empty": { + "oneofEmpty": { "properties": {} }, - "oneof_string": { + "oneofString": { "type": "string" }, - "map_value": { + "mapValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/examplepbNumericEnum" } }, - "mapped_string_value": { + "mappedStringValue": { "type": "object", "additionalProperties": { "type": "string" } }, - "mapped_nested_value": { + "mappedNestedValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ABitOfEverythingNested" @@ -2525,18 +2525,18 @@ "nonConventionalNameValue": { "type": "string" }, - "timestamp_value": { + "timestampValue": { "type": "string", "format": "date-time" }, - "repeated_enum_value": { + "repeatedEnumValue": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" }, "title": "repeated enum value. it is comma-separated in query" }, - "repeated_enum_annotation": { + "repeatedEnumAnnotation": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" @@ -2544,12 +2544,12 @@ "description": "Repeated numeric enum description.", "title": "Repeated numeric enum title" }, - "enum_value_annotation": { + "enumValueAnnotation": { "$ref": "#/definitions/examplepbNumericEnum", "description": "Numeric enum description.", "title": "Numeric enum title" }, - "repeated_string_annotation": { + "repeatedStringAnnotation": { "type": "array", "items": { "type": "string" @@ -2557,7 +2557,7 @@ "description": "Repeated string description.", "title": "Repeated string title" }, - "repeated_nested_annotation": { + "repeatedNestedAnnotation": { "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" @@ -2565,12 +2565,12 @@ "description": "Repeated nested object description.", "title": "Repeated nested object title" }, - "nested_annotation": { + "nestedAnnotation": { "$ref": "#/definitions/ABitOfEverythingNested", "description": "Nested object description.", "title": "Nested object title" }, - "int64_override_type": { + "int64OverrideType": { "type": "integer", "format": "int64" } @@ -2603,7 +2603,7 @@ ] }, "properties": { - "path_repeated_float_value": { + "pathRepeatedFloatValue": { "type": "array", "items": { "type": "number", @@ -2611,103 +2611,103 @@ }, "title": "repeated values. they are comma-separated in path" }, - "path_repeated_double_value": { + "pathRepeatedDoubleValue": { "type": "array", "items": { "type": "number", "format": "double" } }, - "path_repeated_int64_value": { + "pathRepeatedInt64Value": { "type": "array", "items": { "type": "string", "format": "int64" } }, - "path_repeated_uint64_value": { + "pathRepeatedUint64Value": { "type": "array", "items": { "type": "string", "format": "uint64" } }, - "path_repeated_int32_value": { + "pathRepeatedInt32Value": { "type": "array", "items": { "type": "integer", "format": "int32" } }, - "path_repeated_fixed64_value": { + "pathRepeatedFixed64Value": { "type": "array", "items": { "type": "string", "format": "uint64" } }, - "path_repeated_fixed32_value": { + "pathRepeatedFixed32Value": { "type": "array", "items": { "type": "integer", "format": "int64" } }, - "path_repeated_bool_value": { + "pathRepeatedBoolValue": { "type": "array", "items": { "type": "boolean", "format": "boolean" } }, - "path_repeated_string_value": { + "pathRepeatedStringValue": { "type": "array", "items": { "type": "string" } }, - "path_repeated_bytes_value": { + "pathRepeatedBytesValue": { "type": "array", "items": { "type": "string", "format": "byte" } }, - "path_repeated_uint32_value": { + "pathRepeatedUint32Value": { "type": "array", "items": { "type": "integer", "format": "int64" } }, - "path_repeated_enum_value": { + "pathRepeatedEnumValue": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" } }, - "path_repeated_sfixed32_value": { + "pathRepeatedSfixed32Value": { "type": "array", "items": { "type": "integer", "format": "int32" } }, - "path_repeated_sfixed64_value": { + "pathRepeatedSfixed64Value": { "type": "array", "items": { "type": "string", "format": "int64" } }, - "path_repeated_sint32_value": { + "pathRepeatedSint32Value": { "type": "array", "items": { "type": "integer", "format": "int32" } }, - "path_repeated_sint64_value": { + "pathRepeatedSint64Value": { "type": "array", "items": { "type": "string", @@ -2740,7 +2740,7 @@ "abe": { "$ref": "#/definitions/examplepbABitOfEverything" }, - "update_mask": { + "updateMask": { "$ref": "#/definitions/protobufFieldMask" } }, @@ -2757,7 +2757,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/echo_service.swagger.json b/examples/internal/proto/examplepb/echo_service.swagger.json index e21e5ac1361..a9f5a73c43d 100644 --- a/examples/internal/proto/examplepb/echo_service.swagger.json +++ b/examples/internal/proto/examplepb/echo_service.swagger.json @@ -80,7 +80,7 @@ "format": "int64" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -172,7 +172,7 @@ "type": "string" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -217,7 +217,7 @@ ] } }, - "/v1/example/echo1/{id}/{line_num}/{status.note}": { + "/v1/example/echo1/{id}/{lineNum}/{status.note}": { "get": { "summary": "Echo method receives a simple message and returns it.", "description": "The message posted as the id parameter will also be\nreturned.", @@ -245,7 +245,7 @@ "type": "string" }, { - "name": "line_num", + "name": "lineNum", "in": "path", "required": true, "type": "string", @@ -338,7 +338,7 @@ "format": "int64" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -444,7 +444,7 @@ "format": "int64" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -521,7 +521,7 @@ "type": "string", "format": "int64" }, - "line_num": { + "lineNum": { "type": "string", "format": "int64" }, @@ -544,7 +544,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/response_body_service.swagger.json b/examples/internal/proto/examplepb/response_body_service.swagger.json index 55d830a3a18..8098bac39bd 100644 --- a/examples/internal/proto/examplepb/response_body_service.swagger.json +++ b/examples/internal/proto/examplepb/response_body_service.swagger.json @@ -210,7 +210,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/stream.swagger.json b/examples/internal/proto/examplepb/stream.swagger.json index dca019c1802..d7a238464fe 100644 --- a/examples/internal/proto/examplepb/stream.swagger.json +++ b/examples/internal/proto/examplepb/stream.swagger.json @@ -191,7 +191,7 @@ "apiHttpBody": { "type": "object", "properties": { - "content_type": { + "contentType": { "type": "string", "description": "The HTTP Content-Type header value specifying the content type of the body." }, @@ -216,7 +216,7 @@ "uuid": "0cf361e1-4b44-483d-a159-54dabdf7e814" }, "properties": { - "single_nested": { + "singleNested": { "$ref": "#/definitions/ABitOfEverythingNested" }, "uuid": { @@ -230,7 +230,7 @@ "$ref": "#/definitions/ABitOfEverythingNested" } }, - "float_value": { + "floatValue": { "type": "number", "format": "float", "default": "0.2", @@ -239,95 +239,95 @@ "float_value" ] }, - "double_value": { + "doubleValue": { "type": "number", "format": "double" }, - "int64_value": { + "int64Value": { "type": "string", "format": "int64" }, - "uint64_value": { + "uint64Value": { "type": "string", "format": "uint64" }, - "int32_value": { + "int32Value": { "type": "integer", "format": "int32" }, - "fixed64_value": { + "fixed64Value": { "type": "string", "format": "uint64" }, - "fixed32_value": { + "fixed32Value": { "type": "integer", "format": "int64" }, - "bool_value": { + "boolValue": { "type": "boolean", "format": "boolean" }, - "string_value": { + "stringValue": { "type": "string" }, - "bytes_value": { + "bytesValue": { "type": "string", "format": "byte" }, - "uint32_value": { + "uint32Value": { "type": "integer", "format": "int64" }, - "enum_value": { + "enumValue": { "$ref": "#/definitions/examplepbNumericEnum" }, - "path_enum_value": { + "pathEnumValue": { "$ref": "#/definitions/pathenumPathEnum" }, - "nested_path_enum_value": { + "nestedPathEnumValue": { "$ref": "#/definitions/MessagePathEnumNestedPathEnum" }, - "sfixed32_value": { + "sfixed32Value": { "type": "integer", "format": "int32" }, - "sfixed64_value": { + "sfixed64Value": { "type": "string", "format": "int64" }, - "sint32_value": { + "sint32Value": { "type": "integer", "format": "int32" }, - "sint64_value": { + "sint64Value": { "type": "string", "format": "int64" }, - "repeated_string_value": { + "repeatedStringValue": { "type": "array", "items": { "type": "string" } }, - "oneof_empty": { + "oneofEmpty": { "properties": {} }, - "oneof_string": { + "oneofString": { "type": "string" }, - "map_value": { + "mapValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/examplepbNumericEnum" } }, - "mapped_string_value": { + "mappedStringValue": { "type": "object", "additionalProperties": { "type": "string" } }, - "mapped_nested_value": { + "mappedNestedValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ABitOfEverythingNested" @@ -336,18 +336,18 @@ "nonConventionalNameValue": { "type": "string" }, - "timestamp_value": { + "timestampValue": { "type": "string", "format": "date-time" }, - "repeated_enum_value": { + "repeatedEnumValue": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" }, "title": "repeated enum value. it is comma-separated in query" }, - "repeated_enum_annotation": { + "repeatedEnumAnnotation": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" @@ -355,12 +355,12 @@ "description": "Repeated numeric enum description.", "title": "Repeated numeric enum title" }, - "enum_value_annotation": { + "enumValueAnnotation": { "$ref": "#/definitions/examplepbNumericEnum", "description": "Numeric enum description.", "title": "Numeric enum title" }, - "repeated_string_annotation": { + "repeatedStringAnnotation": { "type": "array", "items": { "type": "string" @@ -368,7 +368,7 @@ "description": "Repeated string description.", "title": "Repeated string title" }, - "repeated_nested_annotation": { + "repeatedNestedAnnotation": { "type": "array", "items": { "$ref": "#/definitions/ABitOfEverythingNested" @@ -376,12 +376,12 @@ "description": "Repeated nested object description.", "title": "Repeated nested object title" }, - "nested_annotation": { + "nestedAnnotation": { "$ref": "#/definitions/ABitOfEverythingNested", "description": "Nested object description.", "title": "Nested object title" }, - "int64_override_type": { + "int64OverrideType": { "type": "integer", "format": "int64" } @@ -418,7 +418,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json index 854d3972cf5..3fc144f19e5 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json +++ b/examples/internal/proto/examplepb/unannotated_echo_service.swagger.json @@ -86,7 +86,7 @@ "type": "string" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -210,7 +210,7 @@ "type": "string" }, { - "name": "line_num", + "name": "lineNum", "in": "query", "required": false, "type": "string", @@ -290,7 +290,7 @@ "duration": { "type": "string" }, - "line_num": { + "lineNum": { "type": "string", "format": "int64" }, @@ -313,7 +313,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/use_go_template.swagger.json b/examples/internal/proto/examplepb/use_go_template.swagger.json index 0e69b428172..95a58f1818c 100644 --- a/examples/internal/proto/examplepb/use_go_template.swagger.json +++ b/examples/internal/proto/examplepb/use_go_template.swagger.json @@ -142,7 +142,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/examples/internal/proto/examplepb/wrappers.swagger.json b/examples/internal/proto/examplepb/wrappers.swagger.json index 2fa5a12d2b3..27f26d4fe71 100644 --- a/examples/internal/proto/examplepb/wrappers.swagger.json +++ b/examples/internal/proto/examplepb/wrappers.swagger.json @@ -384,38 +384,38 @@ "examplepbWrappers": { "type": "object", "properties": { - "string_value": { + "stringValue": { "type": "string" }, - "int32_value": { + "int32Value": { "type": "integer", "format": "int32" }, - "int64_value": { + "int64Value": { "type": "string", "format": "int64" }, - "float_value": { + "floatValue": { "type": "number", "format": "float" }, - "double_value": { + "doubleValue": { "type": "number", "format": "double" }, - "bool_value": { + "boolValue": { "type": "boolean", "format": "boolean" }, - "uint32_value": { + "uint32Value": { "type": "integer", "format": "int64" }, - "uint64_value": { + "uint64Value": { "type": "string", "format": "uint64" }, - "bytes_value": { + "bytesValue": { "type": "string", "format": "byte" } @@ -424,7 +424,7 @@ "protobufAny": { "type": "object", "properties": { - "type_url": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." }, diff --git a/protoc-gen-swagger/main.go b/protoc-gen-swagger/main.go index 017510fae9b..f9efbdd250c 100644 --- a/protoc-gen-swagger/main.go +++ b/protoc-gen-swagger/main.go @@ -21,7 +21,7 @@ var ( grpcAPIConfiguration = flag.String("grpc_api_configuration", "", "path to gRPC API Configuration in YAML format") allowMerge = flag.Bool("allow_merge", false, "if set, generation one swagger file out of multiple protos") mergeFileName = flag.String("merge_file_name", "apidocs", "target swagger file name prefix after merge") - useJSONNamesForFields = flag.Bool("json_names_for_fields", false, "if it sets Field.GetJsonName() will be used for generating swagger definitions, otherwise Field.GetName() will be used") + useJSONNamesForFields = flag.Bool("json_names_for_fields", true, "if disabled, the original proto name will be used for generating swagger definitions") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") versionFlag = flag.Bool("version", false, "print the current version") allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 146b34a7dae..3a8677aa26e 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -19,8 +19,6 @@ var ( MarshalOptions: protojson.MarshalOptions{ // TODO(johanbrandhorst): Change this to true before v2 EmitUnpopulated: false, - // TODO(johanbrandhorst): Change this to false before v2 - UseProtoNames: true, }, } ) From 49942f1f83e9882e93422fde03593f304cb8e09b Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Fri, 22 May 2020 22:34:05 +0100 Subject: [PATCH 0422/1518] runtime: make default marshaler emit default values Fixes #233 --- examples/internal/integration/integration_test.go | 2 +- runtime/marshaler_registry.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index 64afbdd0c3f..ddedb50d00d 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1683,7 +1683,7 @@ func testResponseStrings(t *testing.T, port int) { t.Errorf("marshaler.Unmarshal failed with %v; want success", err) return } - var want []string + want := []string{} if diff := cmp.Diff(got, want); diff != "" { t.Errorf(diff) } diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 3a8677aa26e..5a62c2b476d 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -17,8 +17,7 @@ var ( defaultMarshaler = &JSONPb{ MarshalOptions: protojson.MarshalOptions{ - // TODO(johanbrandhorst): Change this to true before v2 - EmitUnpopulated: false, + EmitUnpopulated: true, }, } ) From f9f8a3435861703c6bfb1c4e484634e8ae596842 Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 08:28:31 +0100 Subject: [PATCH 0423/1518] Add missing documentation for openapiv2 proto definition (#1375) --- protoc-gen-swagger/options/openapiv2.pb.go | 243 ++++++++++++++------- protoc-gen-swagger/options/openapiv2.proto | 180 +++++++++++---- 2 files changed, 298 insertions(+), 125 deletions(-) diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 8ea807582e2..c15e2d14845 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -99,7 +99,7 @@ func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { return fileDescriptor_ba35ad8af024fb48, []int{8, 0} } -// Required. The type of the security scheme. Valid values are "basic", +// The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". type SecurityScheme_Type int32 @@ -132,7 +132,7 @@ func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor_ba35ad8af024fb48, []int{11, 0} } -// Required. The location of the API key. Valid values are "query" or "header". +// The location of the API key. Valid values are "query" or "header". type SecurityScheme_In int32 const ( @@ -161,7 +161,7 @@ func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { return fileDescriptor_ba35ad8af024fb48, []int{11, 1} } -// Required. The flow used by the OAuth2 security scheme. Valid values are +// The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". type SecurityScheme_Flow int32 @@ -201,24 +201,52 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject // -// TODO(ivucica): document fields type Swagger struct { + // Specifies the Swagger Specification version being used. It can be + // used by the Swagger UI and other clients to interpret the API listing. The + // value MUST be "2.0". Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, - // it allows you to remove this portion from the path endpoints in your Swagger file making them easier - // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting - // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the - // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // Provides metadata about the API. The metadata can be used by the + // clients if needed. + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + // The host (name or ip) serving the API. This MUST be the host only and does + // not include the scheme nor sub-paths. It MAY include a port. If the host is + // not included, the host serving the documentation is to be used (including + // the port). The host does not support path templating. + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + // The base path on which the API is served, which is relative to the host. If + // it is not included, the API is served directly under the host. The value + // MUST start with a leading slash (/). The basePath does not support path + // templating. + // Note that using `base_path` does not change the endpoint paths that are + // generated in the resulting Swagger file. If you wish to use `base_path` + // with relatively generated Swagger paths, the `base_path` prefix must be + // manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + // The transfer protocol of the API. Values MUST be from the list: "http", + // "https", "ws", "wss". If the schemes is not included, the default scheme to + // be used is the one used to access the Swagger definition itself. + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + // A list of MIME types the APIs can consume. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + // A list of MIME types the APIs can produce. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + // An object to hold responses that can be used across operations. This + // property does not define global responses for all operations. + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Security scheme definitions that can be used across the specification. + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + // A declaration of which security schemes are applied for the API as a whole. + // The list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). + // Individual operations can override this definition. + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + // Additional external documentation. ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -339,18 +367,46 @@ func (m *Swagger) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject // -// TODO(ivucica): document fields type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + // A short summary of what the operation does. For maximum readability in the + // swagger-ui, this field SHOULD be less than 120 characters. + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + // A verbose explanation of the operation behavior. GFM syntax can be used for + // rich text representation. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Additional external documentation for this operation. + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // Unique string used to identify the operation. The id MUST be unique among + // all operations described in the API. Tools and libraries MAY use the + // operationId to uniquely identify an operation, therefore, it is recommended + // to follow common programming naming conventions. + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + // A list of MIME types the operation can consume. This overrides the consumes + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + // A list of MIME types the operation can produce. This overrides the produces + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + // The list of possible responses as they are returned from executing this + // operation. + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The transfer protocol for the operation. Values MUST be from the list: + // "http", "https", "ws", "wss". The value overrides the Swagger Object + // schemes definition. + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + // Declares this operation to be deprecated. Usage of the declared operation + // should be refrained. Default value is false. + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // A declaration of which security schemes are applied for this operation. The + // list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). This + // definition overrides any declared top-level security. To remove a top-level + // security declaration, an empty array can be used. Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -544,13 +600,20 @@ func (m *Response) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // -// TODO(ivucica): document fields type Info struct { - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + // The title of the application. + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + // A short description of the application. GFM syntax can be used for rich + // text representation. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // The Terms of Service for the API. + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + // The contact information for the exposed API. + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + // The license information for the exposed API. + License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + // Provides the version of the application API (not to be confused + // with the specification version). Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` @@ -636,10 +699,14 @@ func (m *Info) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject // -// TODO(ivucica): document fields type Contact struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The identifying name of the contact person/organization. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The URL pointing to the contact information. MUST be in the format of a + // URL. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The email address of the contact person/organization. MUST be in the format + // of an email address. Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -697,9 +764,9 @@ func (m *Contact) GetEmail() string { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject // type License struct { - // Required. The license name used for the API. + // The license name used for the API. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // A URL to the license used for the API. + // A URL to the license used for the API. MUST be in the format of a URL. Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -750,9 +817,12 @@ func (m *License) GetUrl() string { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject // -// TODO(ivucica): document fields type ExternalDocumentation struct { - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // A short description of the target documentation. GFM syntax can be used for + // rich text representation. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // The URL for the target documentation. Value MUST be in the format + // of a URL. Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -802,16 +872,27 @@ func (m *ExternalDocumentation) GetUrl() string { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject // -// TODO(ivucica): document fields type Schema struct { - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` + // Adds support for polymorphism. The discriminator is the schema property + // name that is used to differentiate between other schema that inherit this + // schema. The property name used MUST be defined at this schema and it MUST + // be in the required property list. When used, the value MUST be the name of + // this schema or any schema that inherits it. + Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + // Relevant only for Schema "properties" definitions. Declares the property as + // "read only". This means that it MAY be sent as part of a response but MUST + // NOT be sent as part of the request. Properties marked as readOnly being + // true SHOULD NOT be in the required list of the defined schema. Default + // value is false. + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + // Additional external documentation for this schema. + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // A free-form property to include an example of an instance for this schema. + Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Schema) Reset() { *m = Schema{} } @@ -887,19 +968,25 @@ func (m *Schema) GetExample() *any.Any { // TODO(ivucica): document fields type JSONSchema struct { // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must be imported - // into the protofile. If no message is identified, the Ref will be used verbatim in - // the output. + // This could be a fully qualified proto message reference, and that type must + // be imported into the protofile. If no message is identified, the Ref will + // be used verbatim in the output. // For example: // `ref: ".google.protobuf.Timestamp"`. - Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` - ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` + // The title of the schema. + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + // A short description of the schema. + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + // Maximum represents an inclusive upper limit for a numeric instance. The + // value of MUST be a number, + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + // minimum represents an inclusive lower limit for a numeric instance. The + // value of MUST be a number, Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` @@ -1095,11 +1182,11 @@ func (m *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject // -// TODO(ivucica): document fields type Tag struct { - // TODO(ivucica): Description should be extracted from comments on the proto - // service object. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // A short description for the tag. GFM syntax can be used for rich text + // representation. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // Additional external documentation for this tag. ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1154,7 +1241,8 @@ func (m *Tag) GetExternalDocs() *ExternalDocumentation { // specification. This does not enforce the security schemes on the operations // and only serves to provide the relevant details for each scheme. type SecurityDefinitions struct { - // A single security scheme definition, mapping a "name" to the scheme it defines. + // A single security scheme definition, mapping a "name" to the scheme it + // defines. Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1203,36 +1291,31 @@ func (m *SecurityDefinitions) GetSecurity() map[string]*SecurityScheme { // a header or as a query parameter) and OAuth2's common flows (implicit, // password, application and access code). type SecurityScheme struct { - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` // A short description for security scheme. Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // Required. The name of the header or query parameter to be used. - // + // The name of the header or query parameter to be used. // Valid for apiKey. Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // Required. The location of the API key. Valid values are "query" or "header". - // + // The location of the API key. Valid values are "query" or + // "header". // Valid for apiKey. In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". - // // Valid for oauth2. Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` - // Required. The authorization URL to be used for this flow. This SHOULD be in + // The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. - // // Valid for oauth2/implicit and oauth2/accessCode. AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` - // Required. The token URL to be used for this flow. This SHOULD be in the + // The token URL to be used for this flow. This SHOULD be in the // form of a URL. - // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - // Required. The available scopes for the OAuth2 security scheme. - // + // The available scopes for the OAuth2 security scheme. // Valid for oauth2. Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 3dcac4d99ff..f3c05f492fb 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -11,16 +11,27 @@ import "google/protobuf/struct.proto"; // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject // -// TODO(ivucica): document fields message Swagger { + // Specifies the Swagger Specification version being used. It can be + // used by the Swagger UI and other clients to interpret the API listing. The + // value MUST be "2.0". string swagger = 1; + // Provides metadata about the API. The metadata can be used by the + // clients if needed. Info info = 2; + // The host (name or ip) serving the API. This MUST be the host only and does + // not include the scheme nor sub-paths. It MAY include a port. If the host is + // not included, the host serving the documentation is to be used (including + // the port). The host does not support path templating. string host = 3; - // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, - // it allows you to remove this portion from the path endpoints in your Swagger file making them easier - // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting - // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the - // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // The base path on which the API is served, which is relative to the host. If + // it is not included, the API is served directly under the host. The value + // MUST start with a leading slash (/). The basePath does not support path + // templating. + // Note that using `base_path` does not change the endpoint paths that are + // generated in the resulting Swagger file. If you wish to use `base_path` + // with relatively generated Swagger paths, the `base_path` prefix must be + // manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. string base_path = 4; enum SwaggerScheme { @@ -30,21 +41,38 @@ message Swagger { WS = 3; WSS = 4; } + // The transfer protocol of the API. Values MUST be from the list: "http", + // "https", "ws", "wss". If the schemes is not included, the default scheme to + // be used is the one used to access the Swagger definition itself. repeated SwaggerScheme schemes = 5; + // A list of MIME types the APIs can consume. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. repeated string consumes = 6; + // A list of MIME types the APIs can produce. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. repeated string produces = 7; // field 8 is reserved for 'paths'. reserved 8; // field 9 is reserved for 'definitions', which at this time are already // exposed as and customizable as proto messages. reserved 9; + // An object to hold responses that can be used across operations. This + // property does not define global responses for all operations. map responses = 10; + // Security scheme definitions that can be used across the specification. SecurityDefinitions security_definitions = 11; + // A declaration of which security schemes are applied for the API as a whole. + // The list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). + // Individual operations can override this definition. repeated SecurityRequirement security = 12; // field 13 is reserved for 'tags', which are supposed to be exposed as and // customizable as proto services. TODO(ivucica): add processing of proto // service objects into OpenAPI v2 Tag objects. reserved 13; + // Additional external documentation. ExternalDocumentation external_docs = 14; map extensions = 15; } @@ -53,20 +81,48 @@ message Swagger { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject // -// TODO(ivucica): document fields message Operation { + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. repeated string tags = 1; + // A short summary of what the operation does. For maximum readability in the + // swagger-ui, this field SHOULD be less than 120 characters. string summary = 2; + // A verbose explanation of the operation behavior. GFM syntax can be used for + // rich text representation. string description = 3; + // Additional external documentation for this operation. ExternalDocumentation external_docs = 4; + // Unique string used to identify the operation. The id MUST be unique among + // all operations described in the API. Tools and libraries MAY use the + // operationId to uniquely identify an operation, therefore, it is recommended + // to follow common programming naming conventions. string operation_id = 5; + // A list of MIME types the operation can consume. This overrides the consumes + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. repeated string consumes = 6; + // A list of MIME types the operation can produce. This overrides the produces + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. repeated string produces = 7; // field 8 is reserved for 'parameters'. reserved 8; + // The list of possible responses as they are returned from executing this + // operation. map responses = 9; + // The transfer protocol for the operation. Values MUST be from the list: + // "http", "https", "ws", "wss". The value overrides the Swagger Object + // schemes definition. repeated string schemes = 10; + // Declares this operation to be deprecated. Usage of the declared operation + // should be refrained. Default value is false. bool deprecated = 11; + // A declaration of which security schemes are applied for this operation. The + // list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). This + // definition overrides any declared top-level security. To remove a top-level + // security declaration, an empty array can be used. repeated SecurityRequirement security = 12; map extensions = 13; } @@ -94,13 +150,20 @@ message Response { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // -// TODO(ivucica): document fields message Info { + // The title of the application. string title = 1; + // A short description of the application. GFM syntax can be used for rich + // text representation. string description = 2; + // The Terms of Service for the API. string terms_of_service = 3; + // The contact information for the exposed API. Contact contact = 4; + // The license information for the exposed API. License license = 5; + // Provides the version of the application API (not to be confused + // with the specification version). string version = 6; map extensions = 7; } @@ -109,10 +172,14 @@ message Info { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject // -// TODO(ivucica): document fields message Contact { + // The identifying name of the contact person/organization. string name = 1; + // The URL pointing to the contact information. MUST be in the format of a + // URL. string url = 2; + // The email address of the contact person/organization. MUST be in the format + // of an email address. string email = 3; } @@ -121,9 +188,9 @@ message Contact { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject // message License { - // Required. The license name used for the API. + // The license name used for the API. string name = 1; - // A URL to the license used for the API. + // A URL to the license used for the API. MUST be in the format of a URL. string url = 2; } @@ -132,9 +199,12 @@ message License { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject // -// TODO(ivucica): document fields message ExternalDocumentation { + // A short description of the target documentation. GFM syntax can be used for + // rich text representation. string description = 1; + // The URL for the target documentation. Value MUST be in the format + // of a URL. string url = 2; } @@ -142,14 +212,25 @@ message ExternalDocumentation { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject // -// TODO(ivucica): document fields message Schema { JSONSchema json_schema = 1; + // Adds support for polymorphism. The discriminator is the schema property + // name that is used to differentiate between other schema that inherit this + // schema. The property name used MUST be defined at this schema and it MUST + // be in the required property list. When used, the value MUST be the name of + // this schema or any schema that inherits it. string discriminator = 2; + // Relevant only for Schema "properties" definitions. Declares the property as + // "read only". This means that it MAY be sent as part of a response but MUST + // NOT be sent as part of the request. Properties marked as readOnly being + // true SHOULD NOT be in the required list of the defined schema. Default + // value is false. bool read_only = 3; // field 4 is reserved for 'xml'. reserved 4; + // Additional external documentation for this schema. ExternalDocumentation external_docs = 5; + // A free-form property to include an example of an instance for this schema. google.protobuf.Any example = 6; } @@ -170,23 +251,30 @@ message JSONSchema { // field 2 is reserved for '$schema', omitted from OpenAPI v2. reserved 2; // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must be imported - // into the protofile. If no message is identified, the Ref will be used verbatim in - // the output. + // This could be a fully qualified proto message reference, and that type must + // be imported into the protofile. If no message is identified, the Ref will + // be used verbatim in the output. // For example: // `ref: ".google.protobuf.Timestamp"`. string ref = 3; // field 4 is reserved for '$comment', omitted from OpenAPI v2. reserved 4; + // The title of the schema. string title = 5; + // A short description of the schema. string description = 6; string default = 7; bool read_only = 8; - // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in favor of 'example' field. + // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in + // favor of 'example' field. reserved 9; double multiple_of = 10; + // Maximum represents an inclusive upper limit for a numeric instance. The + // value of MUST be a number, double maximum = 11; bool exclusive_maximum = 12; + // minimum represents an inclusive lower limit for a numeric instance. The + // value of MUST be a number, double minimum = 13; bool exclusive_minimum = 14; uint64 max_length = 15; @@ -194,7 +282,8 @@ message JSONSchema { string pattern = 17; // field 18 is reserved for 'additionalItems', omitted from OpenAPI v2. reserved 18; - // field 19 is reserved for 'items', but in OpenAPI-specific way. TODO(ivucica): add 'items'? + // field 19 is reserved for 'items', but in OpenAPI-specific way. + // TODO(ivucica): add 'items'? reserved 19; uint64 max_items = 20; uint64 min_items = 21; @@ -204,13 +293,16 @@ message JSONSchema { uint64 max_properties = 24; uint64 min_properties = 25; repeated string required = 26; - // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific way. TODO(ivucica): add 'additionalProperties'? + // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific + // way. TODO(ivucica): add 'additionalProperties'? reserved 27; // field 28 is reserved for 'definitions', omitted from OpenAPI v2. reserved 28; - // field 29 is reserved for 'properties', but in OpenAPI-specific way. TODO(ivucica): add 'additionalProperties'? + // field 29 is reserved for 'properties', but in OpenAPI-specific way. + // TODO(ivucica): add 'additionalProperties'? reserved 29; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: // patternProperties, dependencies, propertyNames, const reserved 30 to 33; // Items in 'array' must be unique. @@ -228,12 +320,14 @@ message JSONSchema { } repeated JSONSchemaSimpleTypes type = 35; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: - // format, contentMediaType, contentEncoding, if, then, else + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: format, contentMediaType, contentEncoding, if, then, else reserved 36 to 41; - // field 42 is reserved for 'allOf', but in OpenAPI-specific way. TODO(ivucica): add 'allOf'? + // field 42 is reserved for 'allOf', but in OpenAPI-specific way. + // TODO(ivucica): add 'allOf'? reserved 42; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: // anyOf, oneOf, not reserved 43 to 45; } @@ -242,7 +336,6 @@ message JSONSchema { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject // -// TODO(ivucica): document fields message Tag { // field 1 is reserved for 'name'. In our generator, this is (to be) extracted // from the name of proto service, and thus not exposed to the user, as @@ -253,9 +346,10 @@ message Tag { // global Tag object, then use that name to reference the tag throughout the // Swagger file. reserved 1; - // TODO(ivucica): Description should be extracted from comments on the proto - // service object. + // A short description for the tag. GFM syntax can be used for rich text + // representation. string description = 2; + // Additional external documentation for this tag. ExternalDocumentation external_docs = 3; } @@ -268,7 +362,8 @@ message Tag { // specification. This does not enforce the security schemes on the operations // and only serves to provide the relevant details for each scheme. message SecurityDefinitions { - // A single security scheme definition, mapping a "name" to the scheme it defines. + // A single security scheme definition, mapping a "name" to the scheme it + // defines. map security = 1; } @@ -282,7 +377,7 @@ message SecurityDefinitions { // a header or as a query parameter) and OAuth2's common flows (implicit, // password, application and access code). message SecurityScheme { - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". enum Type { TYPE_INVALID = 0; @@ -291,14 +386,14 @@ message SecurityScheme { TYPE_OAUTH2 = 3; } - // Required. The location of the API key. Valid values are "query" or "header". + // The location of the API key. Valid values are "query" or "header". enum In { IN_INVALID = 0; IN_QUERY = 1; IN_HEADER = 2; } - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". enum Flow { FLOW_INVALID = 0; @@ -308,36 +403,31 @@ message SecurityScheme { FLOW_ACCESS_CODE = 4; } - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". Type type = 1; // A short description for security scheme. string description = 2; - // Required. The name of the header or query parameter to be used. - // + // The name of the header or query parameter to be used. // Valid for apiKey. string name = 3; - // Required. The location of the API key. Valid values are "query" or "header". - // + // The location of the API key. Valid values are "query" or + // "header". // Valid for apiKey. In in = 4; - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". - // // Valid for oauth2. Flow flow = 5; - // Required. The authorization URL to be used for this flow. This SHOULD be in + // The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. - // // Valid for oauth2/implicit and oauth2/accessCode. string authorization_url = 6; - // Required. The token URL to be used for this flow. This SHOULD be in the + // The token URL to be used for this flow. This SHOULD be in the // form of a URL. - // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. string token_url = 7; - // Required. The available scopes for the OAuth2 security scheme. - // + // The available scopes for the OAuth2 security scheme. // Valid for oauth2. Scopes scopes = 8; map extensions = 9; From 96e4573a8cc6a37b3c68ee7fa3ea6af938efe47a Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 08:28:31 +0100 Subject: [PATCH 0424/1518] Add missing documentation for openapiv2 proto definition (#1375) --- protoc-gen-swagger/options/openapiv2.pb.go | 249 ++++++++++++++------- protoc-gen-swagger/options/openapiv2.proto | 180 +++++++++++---- 2 files changed, 301 insertions(+), 128 deletions(-) diff --git a/protoc-gen-swagger/options/openapiv2.pb.go b/protoc-gen-swagger/options/openapiv2.pb.go index 9c65199f196..86c9069d3df 100644 --- a/protoc-gen-swagger/options/openapiv2.pb.go +++ b/protoc-gen-swagger/options/openapiv2.pb.go @@ -146,7 +146,7 @@ func (JSONSchema_JSONSchemaSimpleTypes) EnumDescriptor() ([]byte, []int) { return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{8, 0} } -// Required. The type of the security scheme. Valid values are "basic", +// The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". type SecurityScheme_Type int32 @@ -200,7 +200,7 @@ func (SecurityScheme_Type) EnumDescriptor() ([]byte, []int) { return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11, 0} } -// Required. The location of the API key. Valid values are "query" or "header". +// The location of the API key. Valid values are "query" or "header". type SecurityScheme_In int32 const ( @@ -250,7 +250,7 @@ func (SecurityScheme_In) EnumDescriptor() ([]byte, []int) { return file_protoc_gen_swagger_options_openapiv2_proto_rawDescGZIP(), []int{11, 1} } -// Required. The flow used by the OAuth2 security scheme. Valid values are +// The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". type SecurityScheme_Flow int32 @@ -311,30 +311,58 @@ func (SecurityScheme_Flow) EnumDescriptor() ([]byte, []int) { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject // -// TODO(ivucica): document fields type Swagger struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Specifies the Swagger Specification version being used. It can be + // used by the Swagger UI and other clients to interpret the API listing. The + // value MUST be "2.0". Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, - // it allows you to remove this portion from the path endpoints in your Swagger file making them easier - // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting - // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the - // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // Provides metadata about the API. The metadata can be used by the + // clients if needed. + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + // The host (name or ip) serving the API. This MUST be the host only and does + // not include the scheme nor sub-paths. It MAY include a port. If the host is + // not included, the host serving the documentation is to be used (including + // the port). The host does not support path templating. + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + // The base path on which the API is served, which is relative to the host. If + // it is not included, the API is served directly under the host. The value + // MUST start with a leading slash (/). The basePath does not support path + // templating. + // Note that using `base_path` does not change the endpoint paths that are + // generated in the resulting Swagger file. If you wish to use `base_path` + // with relatively generated Swagger paths, the `base_path` prefix must be + // manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + // The transfer protocol of the API. Values MUST be from the list: "http", + // "https", "ws", "wss". If the schemes is not included, the default scheme to + // be used is the one used to access the Swagger definition itself. + Schemes []Swagger_SwaggerScheme `protobuf:"varint,5,rep,packed,name=schemes,proto3,enum=grpc.gateway.protoc_gen_swagger.options.Swagger_SwaggerScheme" json:"schemes,omitempty"` + // A list of MIME types the APIs can consume. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + // A list of MIME types the APIs can produce. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + // An object to hold responses that can be used across operations. This + // property does not define global responses for all operations. + Responses map[string]*Response `protobuf:"bytes,10,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Security scheme definitions that can be used across the specification. + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,11,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + // A declaration of which security schemes are applied for the API as a whole. + // The list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). + // Individual operations can override this definition. + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + // Additional external documentation. + ExternalDocs *ExternalDocumentation `protobuf:"bytes,14,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,15,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Swagger) Reset() { @@ -457,24 +485,52 @@ func (x *Swagger) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject // -// TODO(ivucica): document fields type Operation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + // A short summary of what the operation does. For maximum readability in the + // swagger-ui, this field SHOULD be less than 120 characters. + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + // A verbose explanation of the operation behavior. GFM syntax can be used for + // rich text representation. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Additional external documentation for this operation. + ExternalDocs *ExternalDocumentation `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // Unique string used to identify the operation. The id MUST be unique among + // all operations described in the API. Tools and libraries MAY use the + // operationId to uniquely identify an operation, therefore, it is recommended + // to follow common programming naming conventions. + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + // A list of MIME types the operation can consume. This overrides the consumes + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + // A list of MIME types the operation can produce. This overrides the produces + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + // The list of possible responses as they are returned from executing this + // operation. + Responses map[string]*Response `protobuf:"bytes,9,rep,name=responses,proto3" json:"responses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The transfer protocol for the operation. Values MUST be from the list: + // "http", "https", "ws", "wss". The value overrides the Swagger Object + // schemes definition. + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + // Declares this operation to be deprecated. Usage of the declared operation + // should be refrained. Default value is false. + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // A declaration of which security schemes are applied for this operation. The + // list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). This + // definition overrides any declared top-level security. To remove a top-level + // security declaration, an empty array can be used. + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,13,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Operation) Reset() { @@ -678,19 +734,26 @@ func (x *Response) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // -// TODO(ivucica): document fields type Info struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` - License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The title of the application. + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + // A short description of the application. GFM syntax can be used for rich + // text representation. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // The Terms of Service for the API. + TermsOfService string `protobuf:"bytes,3,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + // The contact information for the exposed API. + Contact *Contact `protobuf:"bytes,4,opt,name=contact,proto3" json:"contact,omitempty"` + // The license information for the exposed API. + License *License `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` + // Provides the version of the application API (not to be confused + // with the specification version). + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + Extensions map[string]*_struct.Value `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *Info) Reset() { @@ -778,14 +841,18 @@ func (x *Info) GetExtensions() map[string]*_struct.Value { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject // -// TODO(ivucica): document fields type Contact struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The identifying name of the contact person/organization. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The URL pointing to the contact information. MUST be in the format of a + // URL. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The email address of the contact person/organization. MUST be in the format + // of an email address. Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` } @@ -851,9 +918,9 @@ type License struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The license name used for the API. + // The license name used for the API. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // A URL to the license used for the API. + // A URL to the license used for the API. MUST be in the format of a URL. Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` } @@ -908,14 +975,17 @@ func (x *License) GetUrl() string { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject // -// TODO(ivucica): document fields type ExternalDocumentation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // A short description of the target documentation. GFM syntax can be used for + // rich text representation. Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The URL for the target documentation. Value MUST be in the format + // of a URL. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` } func (x *ExternalDocumentation) Reset() { @@ -968,17 +1038,28 @@ func (x *ExternalDocumentation) GetUrl() string { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject // -// TODO(ivucica): document fields type Schema struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` - Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` + JsonSchema *JSONSchema `protobuf:"bytes,1,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"` + // Adds support for polymorphism. The discriminator is the schema property + // name that is used to differentiate between other schema that inherit this + // schema. The property name used MUST be defined at this schema and it MUST + // be in the required property list. When used, the value MUST be the name of + // this schema or any schema that inherits it. + Discriminator string `protobuf:"bytes,2,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + // Relevant only for Schema "properties" definitions. Declares the property as + // "read only". This means that it MAY be sent as part of a response but MUST + // NOT be sent as part of the request. Properties marked as readOnly being + // true SHOULD NOT be in the required list of the defined schema. Default + // value is false. + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + // Additional external documentation for this schema. + ExternalDocs *ExternalDocumentation `protobuf:"bytes,5,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // A free-form property to include an example of an instance for this schema. + Example *any.Any `protobuf:"bytes,6,opt,name=example,proto3" json:"example,omitempty"` } func (x *Schema) Reset() { @@ -1065,19 +1146,25 @@ type JSONSchema struct { unknownFields protoimpl.UnknownFields // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must be imported - // into the protofile. If no message is identified, the Ref will be used verbatim in - // the output. + // This could be a fully qualified proto message reference, and that type must + // be imported into the protofile. If no message is identified, the Ref will + // be used verbatim in the output. // For example: // `ref: ".google.protobuf.Timestamp"`. - Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` - Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` - ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Ref string `protobuf:"bytes,3,opt,name=ref,proto3" json:"ref,omitempty"` + // The title of the schema. + Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"` + // A short description of the schema. + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + Default string `protobuf:"bytes,7,opt,name=default,proto3" json:"default,omitempty"` + ReadOnly bool `protobuf:"varint,8,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + MultipleOf float64 `protobuf:"fixed64,10,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + // Maximum represents an inclusive upper limit for a numeric instance. The + // value of MUST be a number, + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + // minimum represents an inclusive lower limit for a numeric instance. The + // value of MUST be a number, Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` MaxLength uint64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` @@ -1277,15 +1364,15 @@ func (x *JSONSchema) GetType() []JSONSchema_JSONSchemaSimpleTypes { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject // -// TODO(ivucica): document fields type Tag struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // TODO(ivucica): Description should be extracted from comments on the proto - // service object. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // A short description for the tag. GFM syntax can be used for rich text + // representation. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // Additional external documentation for this tag. ExternalDocs *ExternalDocumentation `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` } @@ -1348,7 +1435,8 @@ type SecurityDefinitions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // A single security scheme definition, mapping a "name" to the scheme it defines. + // A single security scheme definition, mapping a "name" to the scheme it + // defines. Security map[string]*SecurityScheme `protobuf:"bytes,1,rep,name=security,proto3" json:"security,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -1405,36 +1493,31 @@ type SecurityScheme struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". Type SecurityScheme_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Type" json:"type,omitempty"` // A short description for security scheme. Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // Required. The name of the header or query parameter to be used. - // + // The name of the header or query parameter to be used. // Valid for apiKey. Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // Required. The location of the API key. Valid values are "query" or "header". - // + // The location of the API key. Valid values are "query" or + // "header". // Valid for apiKey. In SecurityScheme_In `protobuf:"varint,4,opt,name=in,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_In" json:"in,omitempty"` - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". - // // Valid for oauth2. Flow SecurityScheme_Flow `protobuf:"varint,5,opt,name=flow,proto3,enum=grpc.gateway.protoc_gen_swagger.options.SecurityScheme_Flow" json:"flow,omitempty"` - // Required. The authorization URL to be used for this flow. This SHOULD be in + // The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. - // // Valid for oauth2/implicit and oauth2/accessCode. AuthorizationUrl string `protobuf:"bytes,6,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` - // Required. The token URL to be used for this flow. This SHOULD be in the + // The token URL to be used for this flow. This SHOULD be in the // form of a URL. - // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. TokenUrl string `protobuf:"bytes,7,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - // Required. The available scopes for the OAuth2 security scheme. - // + // The available scopes for the OAuth2 security scheme. // Valid for oauth2. Scopes *Scopes `protobuf:"bytes,8,opt,name=scopes,proto3" json:"scopes,omitempty"` Extensions map[string]*_struct.Value `protobuf:"bytes,9,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` diff --git a/protoc-gen-swagger/options/openapiv2.proto b/protoc-gen-swagger/options/openapiv2.proto index 0af2ed112cd..3cc1d343df5 100644 --- a/protoc-gen-swagger/options/openapiv2.proto +++ b/protoc-gen-swagger/options/openapiv2.proto @@ -11,16 +11,27 @@ import "google/protobuf/struct.proto"; // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#swaggerObject // -// TODO(ivucica): document fields message Swagger { + // Specifies the Swagger Specification version being used. It can be + // used by the Swagger UI and other clients to interpret the API listing. The + // value MUST be "2.0". string swagger = 1; + // Provides metadata about the API. The metadata can be used by the + // clients if needed. Info info = 2; + // The host (name or ip) serving the API. This MUST be the host only and does + // not include the scheme nor sub-paths. It MAY include a port. If the host is + // not included, the host serving the documentation is to be used (including + // the port). The host does not support path templating. string host = 3; - // `base_path` is the common prefix path used on all API endpoints (ie. /api, /v1, etc.). By adding this, - // it allows you to remove this portion from the path endpoints in your Swagger file making them easier - // to read. Note that using `base_path` does not change the endpoint paths that are generated in the resulting - // Swagger file. If you wish to use `base_path` with relatively generated Swagger paths, the - // `base_path` prefix must be manually removed from your `google.api.http` paths and your code changed to + // The base path on which the API is served, which is relative to the host. If + // it is not included, the API is served directly under the host. The value + // MUST start with a leading slash (/). The basePath does not support path + // templating. + // Note that using `base_path` does not change the endpoint paths that are + // generated in the resulting Swagger file. If you wish to use `base_path` + // with relatively generated Swagger paths, the `base_path` prefix must be + // manually removed from your `google.api.http` paths and your code changed to // serve the API from the `base_path`. string base_path = 4; enum SwaggerScheme { @@ -30,21 +41,38 @@ message Swagger { WS = 3; WSS = 4; } + // The transfer protocol of the API. Values MUST be from the list: "http", + // "https", "ws", "wss". If the schemes is not included, the default scheme to + // be used is the one used to access the Swagger definition itself. repeated SwaggerScheme schemes = 5; + // A list of MIME types the APIs can consume. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. repeated string consumes = 6; + // A list of MIME types the APIs can produce. This is global to all APIs but + // can be overridden on specific API calls. Value MUST be as described under + // Mime Types. repeated string produces = 7; // field 8 is reserved for 'paths'. reserved 8; // field 9 is reserved for 'definitions', which at this time are already // exposed as and customizable as proto messages. reserved 9; + // An object to hold responses that can be used across operations. This + // property does not define global responses for all operations. map responses = 10; + // Security scheme definitions that can be used across the specification. SecurityDefinitions security_definitions = 11; + // A declaration of which security schemes are applied for the API as a whole. + // The list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). + // Individual operations can override this definition. repeated SecurityRequirement security = 12; // field 13 is reserved for 'tags', which are supposed to be exposed as and // customizable as proto services. TODO(ivucica): add processing of proto // service objects into OpenAPI v2 Tag objects. reserved 13; + // Additional external documentation. ExternalDocumentation external_docs = 14; map extensions = 15; } @@ -53,20 +81,48 @@ message Swagger { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#operationObject // -// TODO(ivucica): document fields message Operation { + // A list of tags for API documentation control. Tags can be used for logical + // grouping of operations by resources or any other qualifier. repeated string tags = 1; + // A short summary of what the operation does. For maximum readability in the + // swagger-ui, this field SHOULD be less than 120 characters. string summary = 2; + // A verbose explanation of the operation behavior. GFM syntax can be used for + // rich text representation. string description = 3; + // Additional external documentation for this operation. ExternalDocumentation external_docs = 4; + // Unique string used to identify the operation. The id MUST be unique among + // all operations described in the API. Tools and libraries MAY use the + // operationId to uniquely identify an operation, therefore, it is recommended + // to follow common programming naming conventions. string operation_id = 5; + // A list of MIME types the operation can consume. This overrides the consumes + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. repeated string consumes = 6; + // A list of MIME types the operation can produce. This overrides the produces + // definition at the Swagger Object. An empty value MAY be used to clear the + // global definition. Value MUST be as described under Mime Types. repeated string produces = 7; // field 8 is reserved for 'parameters'. reserved 8; + // The list of possible responses as they are returned from executing this + // operation. map responses = 9; + // The transfer protocol for the operation. Values MUST be from the list: + // "http", "https", "ws", "wss". The value overrides the Swagger Object + // schemes definition. repeated string schemes = 10; + // Declares this operation to be deprecated. Usage of the declared operation + // should be refrained. Default value is false. bool deprecated = 11; + // A declaration of which security schemes are applied for this operation. The + // list of values describes alternative security schemes that can be used + // (that is, there is a logical OR between the security requirements). This + // definition overrides any declared top-level security. To remove a top-level + // security declaration, an empty array can be used. repeated SecurityRequirement security = 12; map extensions = 13; } @@ -94,13 +150,20 @@ message Response { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#infoObject // -// TODO(ivucica): document fields message Info { + // The title of the application. string title = 1; + // A short description of the application. GFM syntax can be used for rich + // text representation. string description = 2; + // The Terms of Service for the API. string terms_of_service = 3; + // The contact information for the exposed API. Contact contact = 4; + // The license information for the exposed API. License license = 5; + // Provides the version of the application API (not to be confused + // with the specification version). string version = 6; map extensions = 7; } @@ -109,10 +172,14 @@ message Info { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#contactObject // -// TODO(ivucica): document fields message Contact { + // The identifying name of the contact person/organization. string name = 1; + // The URL pointing to the contact information. MUST be in the format of a + // URL. string url = 2; + // The email address of the contact person/organization. MUST be in the format + // of an email address. string email = 3; } @@ -121,9 +188,9 @@ message Contact { // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#licenseObject // message License { - // Required. The license name used for the API. + // The license name used for the API. string name = 1; - // A URL to the license used for the API. + // A URL to the license used for the API. MUST be in the format of a URL. string url = 2; } @@ -132,9 +199,12 @@ message License { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#externalDocumentationObject // -// TODO(ivucica): document fields message ExternalDocumentation { + // A short description of the target documentation. GFM syntax can be used for + // rich text representation. string description = 1; + // The URL for the target documentation. Value MUST be in the format + // of a URL. string url = 2; } @@ -142,14 +212,25 @@ message ExternalDocumentation { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#schemaObject // -// TODO(ivucica): document fields message Schema { JSONSchema json_schema = 1; + // Adds support for polymorphism. The discriminator is the schema property + // name that is used to differentiate between other schema that inherit this + // schema. The property name used MUST be defined at this schema and it MUST + // be in the required property list. When used, the value MUST be the name of + // this schema or any schema that inherits it. string discriminator = 2; + // Relevant only for Schema "properties" definitions. Declares the property as + // "read only". This means that it MAY be sent as part of a response but MUST + // NOT be sent as part of the request. Properties marked as readOnly being + // true SHOULD NOT be in the required list of the defined schema. Default + // value is false. bool read_only = 3; // field 4 is reserved for 'xml'. reserved 4; + // Additional external documentation for this schema. ExternalDocumentation external_docs = 5; + // A free-form property to include an example of an instance for this schema. google.protobuf.Any example = 6; } @@ -170,23 +251,30 @@ message JSONSchema { // field 2 is reserved for '$schema', omitted from OpenAPI v2. reserved 2; // Ref is used to define an external reference to include in the message. - // This could be a fully qualified proto message reference, and that type must be imported - // into the protofile. If no message is identified, the Ref will be used verbatim in - // the output. + // This could be a fully qualified proto message reference, and that type must + // be imported into the protofile. If no message is identified, the Ref will + // be used verbatim in the output. // For example: // `ref: ".google.protobuf.Timestamp"`. string ref = 3; // field 4 is reserved for '$comment', omitted from OpenAPI v2. reserved 4; + // The title of the schema. string title = 5; + // A short description of the schema. string description = 6; string default = 7; bool read_only = 8; - // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in favor of 'example' field. + // field 9 is reserved for 'examples', which is omitted from OpenAPI v2 in + // favor of 'example' field. reserved 9; double multiple_of = 10; + // Maximum represents an inclusive upper limit for a numeric instance. The + // value of MUST be a number, double maximum = 11; bool exclusive_maximum = 12; + // minimum represents an inclusive lower limit for a numeric instance. The + // value of MUST be a number, double minimum = 13; bool exclusive_minimum = 14; uint64 max_length = 15; @@ -194,7 +282,8 @@ message JSONSchema { string pattern = 17; // field 18 is reserved for 'additionalItems', omitted from OpenAPI v2. reserved 18; - // field 19 is reserved for 'items', but in OpenAPI-specific way. TODO(ivucica): add 'items'? + // field 19 is reserved for 'items', but in OpenAPI-specific way. + // TODO(ivucica): add 'items'? reserved 19; uint64 max_items = 20; uint64 min_items = 21; @@ -204,13 +293,16 @@ message JSONSchema { uint64 max_properties = 24; uint64 min_properties = 25; repeated string required = 26; - // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific way. TODO(ivucica): add 'additionalProperties'? + // field 27 is reserved for 'additionalProperties', but in OpenAPI-specific + // way. TODO(ivucica): add 'additionalProperties'? reserved 27; // field 28 is reserved for 'definitions', omitted from OpenAPI v2. reserved 28; - // field 29 is reserved for 'properties', but in OpenAPI-specific way. TODO(ivucica): add 'additionalProperties'? + // field 29 is reserved for 'properties', but in OpenAPI-specific way. + // TODO(ivucica): add 'additionalProperties'? reserved 29; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: // patternProperties, dependencies, propertyNames, const reserved 30 to 33; // Items in 'array' must be unique. @@ -228,12 +320,14 @@ message JSONSchema { } repeated JSONSchemaSimpleTypes type = 35; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: - // format, contentMediaType, contentEncoding, if, then, else + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: format, contentMediaType, contentEncoding, if, then, else reserved 36 to 41; - // field 42 is reserved for 'allOf', but in OpenAPI-specific way. TODO(ivucica): add 'allOf'? + // field 42 is reserved for 'allOf', but in OpenAPI-specific way. + // TODO(ivucica): add 'allOf'? reserved 42; - // following fields are reserved, as the properties have been omitted from OpenAPI v2: + // following fields are reserved, as the properties have been omitted from + // OpenAPI v2: // anyOf, oneOf, not reserved 43 to 45; } @@ -242,7 +336,6 @@ message JSONSchema { // // See: https://github.com/OAI/OpenAPI-Specification/blob/3.0.0/versions/2.0.md#tagObject // -// TODO(ivucica): document fields message Tag { // field 1 is reserved for 'name'. In our generator, this is (to be) extracted // from the name of proto service, and thus not exposed to the user, as @@ -253,9 +346,10 @@ message Tag { // global Tag object, then use that name to reference the tag throughout the // Swagger file. reserved 1; - // TODO(ivucica): Description should be extracted from comments on the proto - // service object. + // A short description for the tag. GFM syntax can be used for rich text + // representation. string description = 2; + // Additional external documentation for this tag. ExternalDocumentation external_docs = 3; } @@ -268,7 +362,8 @@ message Tag { // specification. This does not enforce the security schemes on the operations // and only serves to provide the relevant details for each scheme. message SecurityDefinitions { - // A single security scheme definition, mapping a "name" to the scheme it defines. + // A single security scheme definition, mapping a "name" to the scheme it + // defines. map security = 1; } @@ -282,7 +377,7 @@ message SecurityDefinitions { // a header or as a query parameter) and OAuth2's common flows (implicit, // password, application and access code). message SecurityScheme { - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". enum Type { TYPE_INVALID = 0; @@ -291,14 +386,14 @@ message SecurityScheme { TYPE_OAUTH2 = 3; } - // Required. The location of the API key. Valid values are "query" or "header". + // The location of the API key. Valid values are "query" or "header". enum In { IN_INVALID = 0; IN_QUERY = 1; IN_HEADER = 2; } - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". enum Flow { FLOW_INVALID = 0; @@ -308,36 +403,31 @@ message SecurityScheme { FLOW_ACCESS_CODE = 4; } - // Required. The type of the security scheme. Valid values are "basic", + // The type of the security scheme. Valid values are "basic", // "apiKey" or "oauth2". Type type = 1; // A short description for security scheme. string description = 2; - // Required. The name of the header or query parameter to be used. - // + // The name of the header or query parameter to be used. // Valid for apiKey. string name = 3; - // Required. The location of the API key. Valid values are "query" or "header". - // + // The location of the API key. Valid values are "query" or + // "header". // Valid for apiKey. In in = 4; - // Required. The flow used by the OAuth2 security scheme. Valid values are + // The flow used by the OAuth2 security scheme. Valid values are // "implicit", "password", "application" or "accessCode". - // // Valid for oauth2. Flow flow = 5; - // Required. The authorization URL to be used for this flow. This SHOULD be in + // The authorization URL to be used for this flow. This SHOULD be in // the form of a URL. - // // Valid for oauth2/implicit and oauth2/accessCode. string authorization_url = 6; - // Required. The token URL to be used for this flow. This SHOULD be in the + // The token URL to be used for this flow. This SHOULD be in the // form of a URL. - // // Valid for oauth2/password, oauth2/application and oauth2/accessCode. string token_url = 7; - // Required. The available scopes for the OAuth2 security scheme. - // + // The available scopes for the OAuth2 security scheme. // Valid for oauth2. Scopes scopes = 8; map extensions = 9; From 690734d434be90d7272e4468d93346d0725256be Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 17:24:29 +0100 Subject: [PATCH 0425/1518] Remove usage of deprecated grpc.Errorf API (#1380) --- .../internal/proto/examplepb/echo_service.pb.gw.go | 8 ++++---- protoc-gen-grpc-gateway/descriptor/types.go | 2 +- runtime/BUILD.bazel | 1 - runtime/handler_test.go | 11 +++++------ 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 0f492600bc2..2353a417db1 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -242,7 +242,7 @@ func request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler if protoReq.Code == nil { protoReq.Code = &SimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val) @@ -303,7 +303,7 @@ func local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Mar if protoReq.Code == nil { protoReq.Code = &SimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val) @@ -357,7 +357,7 @@ func request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler if protoReq.Code == nil { protoReq.Code = &SimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val) @@ -418,7 +418,7 @@ func local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Mar if protoReq.Code == nil { protoReq.Code = &SimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val) diff --git a/protoc-gen-grpc-gateway/descriptor/types.go b/protoc-gen-grpc-gateway/descriptor/types.go index ab6edbeb370..3238ec18928 100644 --- a/protoc-gen-grpc-gateway/descriptor/types.go +++ b/protoc-gen-grpc-gateway/descriptor/types.go @@ -323,7 +323,7 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { s := `if %s == nil { %s =&%s{} } else if _, ok := %s.(*%s); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *%s, but: %%t\n",%s) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *%s, but: %%t\n",%s) }` preparations = append(preparations, fmt.Sprintf(s, components, components, oneofFieldName, components, oneofFieldName, oneofFieldName, components)) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index c4d18f624a8..58b72b9cf75 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -78,7 +78,6 @@ go_test( "@io_bazel_rules_go//proto/wkt:struct_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", - "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", diff --git a/runtime/handler_test.go b/runtime/handler_test.go index ea369add028..570602d4c08 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -12,7 +12,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/internal" "github.com/grpc-ecosystem/grpc-gateway/runtime" pb "github.com/grpc-ecosystem/grpc-gateway/runtime/internal/examplepb" - "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -49,13 +48,13 @@ func TestForwardResponseStream(t *testing.T) { statusCode: http.StatusOK, }, { name: "error", - msgs: []msg{{nil, grpc.Errorf(codes.OutOfRange, "400")}}, + msgs: []msg{{nil, status.Errorf(codes.OutOfRange, "400")}}, statusCode: http.StatusBadRequest, }, { name: "stream_error", msgs: []msg{ {&pb.SimpleMessage{Id: "One"}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, statusCode: http.StatusOK, }, { @@ -70,7 +69,7 @@ func TestForwardResponseStream(t *testing.T) { name: "response body stream error case", msgs: []msg{ {fakeReponseBodyWrapper{&pb.SimpleMessage{Id: "One"}}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, responseBody: true, statusCode: http.StatusOK, @@ -203,13 +202,13 @@ func TestForwardResponseStreamCustomMarshaler(t *testing.T) { statusCode: http.StatusOK, }, { name: "error", - msgs: []msg{{nil, grpc.Errorf(codes.OutOfRange, "400")}}, + msgs: []msg{{nil, status.Errorf(codes.OutOfRange, "400")}}, statusCode: http.StatusBadRequest, }, { name: "stream_error", msgs: []msg{ {&pb.SimpleMessage{Id: "One"}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, statusCode: http.StatusOK, }} From 9e8664e509ec178cb64ba5182a08b1b1becfde9e Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 19:11:30 +0100 Subject: [PATCH 0426/1518] Fix various misspellings (#1381) --- protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go | 2 +- runtime/context.go | 2 +- runtime/errors.go | 2 +- runtime/handler.go | 2 +- runtime/marshal_httpbodyproto.go | 2 +- runtime/marshaler.go | 2 +- runtime/proto_errors.go | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go b/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go index ca68ed74db1..0ebc7c82d55 100644 --- a/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go +++ b/protoc-gen-grpc-gateway/descriptor/grpc_api_configuration.go @@ -16,7 +16,7 @@ func loadGrpcAPIServiceFromYAML(yamlFileContents []byte, yamlSourceLogName strin return nil, fmt.Errorf("Failed to convert gRPC API Configuration from YAML in '%v' to JSON: %v", yamlSourceLogName, err) } - // As our GrpcAPIService is incomplete accept unkown fields. + // As our GrpcAPIService is incomplete accept unknown fields. unmarshaler := jsonpb.Unmarshaler{ AllowUnknownFields: true, } diff --git a/runtime/context.go b/runtime/context.go index f8083821f3d..07673f3e70a 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -201,7 +201,7 @@ func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) { } // isPermanentHTTPHeader checks whether hdr belongs to the list of -// permenant request headers maintained by IANA. +// permanent request headers maintained by IANA. // http://www.iana.org/assignments/message-headers/message-headers.xml func isPermanentHTTPHeader(hdr string) bool { switch hdr { diff --git a/runtime/errors.go b/runtime/errors.go index 65a5dc690d4..3feba61340d 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -120,7 +120,7 @@ func DefaultHTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w w.Header().Del("Trailer") contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability + // Check marshaler on run time in order to keep backwards compatibility // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { diff --git a/runtime/handler.go b/runtime/handler.go index 2c62382ef08..e6e8f286e12 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -135,7 +135,7 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha handleForwardResponseTrailerHeader(w, md) contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability + // Check marshaler on run time in order to keep backwards compatibility // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { diff --git a/runtime/marshal_httpbodyproto.go b/runtime/marshal_httpbodyproto.go index f55285b5d6c..525b0338c74 100644 --- a/runtime/marshal_httpbodyproto.go +++ b/runtime/marshal_httpbodyproto.go @@ -19,7 +19,7 @@ type HTTPBodyMarshaler struct { Marshaler } -// ContentType implementation to keep backwards compatability with marshal interface +// ContentType implementation to keep backwards compatibility with marshal interface func (h *HTTPBodyMarshaler) ContentType() string { return h.ContentTypeFromMessage(nil) } diff --git a/runtime/marshaler.go b/runtime/marshaler.go index 3fdf9fd8738..46153294217 100644 --- a/runtime/marshaler.go +++ b/runtime/marshaler.go @@ -50,6 +50,6 @@ func (f EncoderFunc) Encode(v interface{}) error { return f(v) } // Delimited defines the streaming delimiter. type Delimited interface { - // Delimiter returns the record seperator for the stream. + // Delimiter returns the record separator for the stream. Delimiter() []byte } diff --git a/runtime/proto_errors.go b/runtime/proto_errors.go index ea75565868d..3fd30da22a7 100644 --- a/runtime/proto_errors.go +++ b/runtime/proto_errors.go @@ -44,7 +44,7 @@ func DefaultHTTPProtoErrorHandler(ctx context.Context, mux *ServeMux, marshaler w.Header().Del("Trailer") contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability + // Check marshaler on run time in order to keep backwards compatibility // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { From 560f0a4ec03c1dfc989705de40f0c8c11719730b Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 19:12:46 +0100 Subject: [PATCH 0427/1518] Remove usage of deprecated grpc.Errorf API (#1380) (#1382) --- .../internal/proto/examplepb/echo_service.pb.gw.go | 8 ++++---- .../standalone/unannotated_echo_service.pb.gw.go | 8 ++++---- internal/descriptor/types.go | 2 +- runtime/BUILD.bazel | 1 - runtime/handler_test.go | 11 +++++------ 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 2daf2758222..412d1c30b36 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -240,7 +240,7 @@ func request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Marshaler if protoReq.Code == nil { protoReq.Code = &SimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val) @@ -301,7 +301,7 @@ func local_request_EchoService_Echo_2(ctx context.Context, marshaler runtime.Mar if protoReq.Code == nil { protoReq.Code = &SimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*SimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_Lang).Lang, err = runtime.String(val) @@ -355,7 +355,7 @@ func request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Marshaler if protoReq.Code == nil { protoReq.Code = &SimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val) @@ -416,7 +416,7 @@ func local_request_EchoService_Echo_3(ctx context.Context, marshaler runtime.Mar if protoReq.Code == nil { protoReq.Code = &SimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*SimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *SimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*SimpleMessage_LineNum).LineNum, err = runtime.Int64(val) diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index afcd2be1732..8aeef22b892 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -241,7 +241,7 @@ func request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler runtim if protoReq.Code == nil { protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val) @@ -302,7 +302,7 @@ func local_request_UnannotatedEchoService_Echo_2(ctx context.Context, marshaler if protoReq.Code == nil { protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_Lang{} } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_Lang, but: %t\n", protoReq.Code) } protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_Lang).Lang, err = runtime.String(val) @@ -356,7 +356,7 @@ func request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler runtim if protoReq.Code == nil { protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val) @@ -417,7 +417,7 @@ func local_request_UnannotatedEchoService_Echo_3(ctx context.Context, marshaler if protoReq.Code == nil { protoReq.Code = &extExamplepb.UnannotatedSimpleMessage_LineNum{} } else if _, ok := protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *extExamplepb.UnannotatedSimpleMessage_LineNum, but: %t\n", protoReq.Code) } protoReq.Code.(*extExamplepb.UnannotatedSimpleMessage_LineNum).LineNum, err = runtime.Int64(val) diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go index b02515a4682..8e2d5c6c5ee 100644 --- a/internal/descriptor/types.go +++ b/internal/descriptor/types.go @@ -353,7 +353,7 @@ func (p FieldPath) AssignableExpr(msgExpr string) string { s := `if %s == nil { %s =&%s{} } else if _, ok := %s.(*%s); !ok { - return nil, metadata, grpc.Errorf(codes.InvalidArgument, "expect type: *%s, but: %%t\n",%s) + return nil, metadata, status.Errorf(codes.InvalidArgument, "expect type: *%s, but: %%t\n",%s) }` preparations = append(preparations, fmt.Sprintf(s, components, components, oneofFieldName, components, oneofFieldName, oneofFieldName, components)) diff --git a/runtime/BUILD.bazel b/runtime/BUILD.bazel index 2d971edd2f3..352252a146f 100644 --- a/runtime/BUILD.bazel +++ b/runtime/BUILD.bazel @@ -76,7 +76,6 @@ go_test( "@io_bazel_rules_go//proto/wkt:struct_go_proto", "@io_bazel_rules_go//proto/wkt:timestamp_go_proto", "@io_bazel_rules_go//proto/wkt:wrappers_go_proto", - "@org_golang_google_grpc//:go_default_library", "@org_golang_google_grpc//codes:go_default_library", "@org_golang_google_grpc//metadata:go_default_library", "@org_golang_google_grpc//status:go_default_library", diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 3a7aec6c8f2..6e2d19bd776 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -10,7 +10,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" pb "github.com/grpc-ecosystem/grpc-gateway/v2/runtime/internal/examplepb" - "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" @@ -48,13 +47,13 @@ func TestForwardResponseStream(t *testing.T) { statusCode: http.StatusOK, }, { name: "error", - msgs: []msg{{nil, grpc.Errorf(codes.OutOfRange, "400")}}, + msgs: []msg{{nil, status.Errorf(codes.OutOfRange, "400")}}, statusCode: http.StatusBadRequest, }, { name: "stream_error", msgs: []msg{ {&pb.SimpleMessage{Id: "One"}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, statusCode: http.StatusOK, }, { @@ -69,7 +68,7 @@ func TestForwardResponseStream(t *testing.T) { name: "response body stream error case", msgs: []msg{ {fakeReponseBodyWrapper{&pb.SimpleMessage{Id: "One"}}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, responseBody: true, statusCode: http.StatusOK, @@ -195,13 +194,13 @@ func TestForwardResponseStreamCustomMarshaler(t *testing.T) { statusCode: http.StatusOK, }, { name: "error", - msgs: []msg{{nil, grpc.Errorf(codes.OutOfRange, "400")}}, + msgs: []msg{{nil, status.Errorf(codes.OutOfRange, "400")}}, statusCode: http.StatusBadRequest, }, { name: "stream_error", msgs: []msg{ {&pb.SimpleMessage{Id: "One"}, nil}, - {nil, grpc.Errorf(codes.OutOfRange, "400")}, + {nil, status.Errorf(codes.OutOfRange, "400")}, }, statusCode: http.StatusOK, }} From e090d4ae9356ac41415e5b21dded26ba9dbca79c Mon Sep 17 00:00:00 2001 From: Ben Wells Date: Sat, 23 May 2020 19:11:30 +0100 Subject: [PATCH 0428/1518] Fix various misspellings (#1381) --- protoc-gen-swagger/internal/genswagger/template_test.go | 4 ++-- runtime/context.go | 2 +- runtime/handler.go | 2 +- runtime/marshal_httpbodyproto.go | 2 +- runtime/marshaler.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/protoc-gen-swagger/internal/genswagger/template_test.go b/protoc-gen-swagger/internal/genswagger/template_test.go index 45aae0c0667..0e9492d884e 100644 --- a/protoc-gen-swagger/internal/genswagger/template_test.go +++ b/protoc-gen-swagger/internal/genswagger/template_test.go @@ -2451,14 +2451,14 @@ func TestUpdateSwaggerDataFromComments(t *testing.T) { t.Errorf("unexpected error '%v'", err) } if !reflect.DeepEqual(test.swaggerObject, test.expectedSwaggerObject) { - t.Errorf("swaggerObject was not updated corretly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) + t.Errorf("swaggerObject was not updated correctly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) } } else { if err == nil { t.Error("expected update error not returned") } if !reflect.DeepEqual(test.swaggerObject, test.expectedSwaggerObject) { - t.Errorf("swaggerObject was not updated corretly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) + t.Errorf("swaggerObject was not updated correctly, expected '%+v', got '%+v'", test.expectedSwaggerObject, test.swaggerObject) } if err.Error() != test.expectedError.Error() { t.Errorf("expected error malformed, expected %q, got %q", test.expectedError.Error(), err.Error()) diff --git a/runtime/context.go b/runtime/context.go index 04da99af218..bb52a37f1b3 100644 --- a/runtime/context.go +++ b/runtime/context.go @@ -204,7 +204,7 @@ func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) { } // isPermanentHTTPHeader checks whether hdr belongs to the list of -// permenant request headers maintained by IANA. +// permanent request headers maintained by IANA. // http://www.iana.org/assignments/message-headers/message-headers.xml func isPermanentHTTPHeader(hdr string) bool { switch hdr { diff --git a/runtime/handler.go b/runtime/handler.go index 9c445e83890..af147c32ca8 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -138,7 +138,7 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha handleForwardResponseTrailerHeader(w, md) contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatability + // Check marshaler on run time in order to keep backwards compatibility // An interface param needs to be added to the ContentType() function on // the Marshal interface to be able to remove this check if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { diff --git a/runtime/marshal_httpbodyproto.go b/runtime/marshal_httpbodyproto.go index 1f13f4d5f67..3dc109a1283 100644 --- a/runtime/marshal_httpbodyproto.go +++ b/runtime/marshal_httpbodyproto.go @@ -19,7 +19,7 @@ type HTTPBodyMarshaler struct { Marshaler } -// ContentType implementation to keep backwards compatability with marshal interface +// ContentType implementation to keep backwards compatibility with marshal interface func (h *HTTPBodyMarshaler) ContentType() string { return h.ContentTypeFromMessage(nil) } diff --git a/runtime/marshaler.go b/runtime/marshaler.go index 3fdf9fd8738..46153294217 100644 --- a/runtime/marshaler.go +++ b/runtime/marshaler.go @@ -50,6 +50,6 @@ func (f EncoderFunc) Encode(v interface{}) error { return f(v) } // Delimited defines the streaming delimiter. type Delimited interface { - // Delimiter returns the record seperator for the stream. + // Delimiter returns the record separator for the stream. Delimiter() []byte } From 32c763385d4989e5d33890f99293180701fef0de Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 23 May 2020 21:31:24 +0100 Subject: [PATCH 0429/1518] Implement last-match-wins behaviour in mux In accordance with the http.proto spec, we should use last-match-wins to determine which handler is chosen if two are matched. See https://github.com/grpc-ecosystem/grpc-gateway/issues/224 for more discussion. --- .../internal/clients/abe/api/swagger.yaml | 80 ++-- .../abe/api_a_bit_of_everything_service.go | 2 +- .../internal/helloworld/helloworld.pb.gw.go | 20 +- .../internal/integration/integration_test.go | 2 +- .../proto/examplepb/a_bit_of_everything.pb.go | 394 +++++++++--------- .../examplepb/a_bit_of_everything.pb.gw.go | 46 +- .../proto/examplepb/a_bit_of_everything.proto | 2 +- .../a_bit_of_everything.swagger.json | 112 ++--- .../proto/examplepb/echo_service.pb.gw.go | 14 +- .../proto/examplepb/flow_combination.pb.gw.go | 52 +-- .../examplepb/non_standard_names.pb.gw.go | 4 +- .../examplepb/response_body_service.pb.gw.go | 8 +- .../internal/proto/examplepb/stream.pb.gw.go | 8 +- .../unannotated_echo_service.pb.gw.go | 8 +- .../proto/examplepb/use_go_template.pb.gw.go | 4 +- .../proto/examplepb/wrappers.pb.gw.go | 22 +- .../unannotated_echo_service.pb.gw.go | 14 +- internal/descriptor/registry.go | 14 - .../internal/gengateway/template.go | 8 +- .../internal/gengateway/template_test.go | 4 +- protoc-gen-grpc-gateway/main.go | 2 - runtime/mux.go | 16 +- runtime/mux_test.go | 30 +- runtime/pattern.go | 42 +- 24 files changed, 420 insertions(+), 488 deletions(-) diff --git a/examples/internal/clients/abe/api/swagger.yaml b/examples/internal/clients/abe/api/swagger.yaml index c118da4eac1..9f4cf2d307c 100644 --- a/examples/internal/clients/abe/api/swagger.yaml +++ b/examples/internal/clients/abe/api/swagger.yaml @@ -1189,46 +1189,6 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" - /v1/example/a_bit_of_everything/{singleNested.name}: - post: - tags: - - "ABitOfEverythingService" - operationId: "ABitOfEverythingService_DeepPathEcho" - parameters: - - name: "singleNested.name" - in: "path" - description: "name is nested field." - required: true - type: "string" - x-exportParamName: "SingleNestedName" - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/examplepbABitOfEverything" - x-exportParamName: "Body" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/examplepbABitOfEverything" - 403: - description: "Returned when the user does not have permission to access\ - \ the resource." - schema: {} - 404: - description: "Returned when the resource does not exist." - schema: - type: "string" - format: "string" - 418: - description: "I'm a teapot." - schema: - $ref: "#/definitions/examplepbNumericEnum" - default: - description: "An unexpected error response" - schema: - $ref: "#/definitions/rpcStatus" /v1/example/a_bit_of_everything/{uuid}: get: tags: @@ -1527,6 +1487,46 @@ paths: description: "An unexpected error response" schema: $ref: "#/definitions/rpcStatus" + /v1/example/deep_path/{singleNested.name}: + post: + tags: + - "ABitOfEverythingService" + operationId: "ABitOfEverythingService_DeepPathEcho" + parameters: + - name: "singleNested.name" + in: "path" + description: "name is nested field." + required: true + type: "string" + x-exportParamName: "SingleNestedName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "A successful response." + schema: + $ref: "#/definitions/examplepbABitOfEverything" + 403: + description: "Returned when the user does not have permission to access\ + \ the resource." + schema: {} + 404: + description: "Returned when the resource does not exist." + schema: + type: "string" + format: "string" + 418: + description: "I'm a teapot." + schema: + $ref: "#/definitions/examplepbNumericEnum" + default: + description: "An unexpected error response" + schema: + $ref: "#/definitions/rpcStatus" /v2/example/a_bit_of_everything/{abe.uuid}: put: tags: diff --git a/examples/internal/clients/abe/api_a_bit_of_everything_service.go b/examples/internal/clients/abe/api_a_bit_of_everything_service.go index c1a5be6c627..1dae61ef5a6 100644 --- a/examples/internal/clients/abe/api_a_bit_of_everything_service.go +++ b/examples/internal/clients/abe/api_a_bit_of_everything_service.go @@ -1135,7 +1135,7 @@ func (a *ABitOfEverythingServiceApiService) ABitOfEverythingServiceDeepPathEcho( ) // create path and map variables - localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{singleNested.name}" + localVarPath := a.client.cfg.BasePath + "/v1/example/deep_path/{singleNested.name}" localVarPath = strings.Replace(localVarPath, "{"+"singleNested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) localVarHeaderParams := make(map[string]string) diff --git a/examples/internal/helloworld/helloworld.pb.gw.go b/examples/internal/helloworld/helloworld.pb.gw.go index 856a88a3e95..1670678176c 100644 --- a/examples/internal/helloworld/helloworld.pb.gw.go +++ b/examples/internal/helloworld/helloworld.pb.gw.go @@ -1199,25 +1199,25 @@ func RegisterGreeterHandlerClient(ctx context.Context, mux *runtime.ServeMux, cl } var ( - pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"say", "name"}, "")) - pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "strval", "strVal"}, "")) - pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "floatval", "floatVal"}, "")) - pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "doubleval", "doubleVal"}, "")) - pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "boolval", "boolVal"}, "")) - pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "bytesval", "bytesVal"}, "")) - pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int32val", "int32Val"}, "")) - pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_7 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint32val", "uint32Val"}, "")) - pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_8 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "int64val", "int64Val"}, "")) - pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Greeter_SayHello_9 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"say", "uint64val", "uint64Val"}, "")) ) var ( diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index ddedb50d00d..f7f8ff33f68 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -1053,7 +1053,7 @@ func testABEBulkEcho(t *testing.T, port int) { go func() { defer wg.Done() defer reqw.Close() - for i := 0; i < 1000; i++ { + for i := 0; i < 10; i++ { s := fmt.Sprintf("message %d", i) msg := sub.StringMessage{Value: &s} buf, err := marshaler.Marshal(&msg) diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go index 40c742debe3..a01668cb46c 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.go @@ -1251,7 +1251,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x2a, 0x20, 0x0a, 0x0b, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, - 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0x87, 0x26, 0x0a, + 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x32, 0xfd, 0x25, 0x0a, 0x17, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x04, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, @@ -1441,7 +1441,7 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x03, 0x12, - 0xd3, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, + 0xc9, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x65, 0x70, 0x50, 0x61, 0x74, 0x68, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, @@ -1450,206 +1450,206 @@ var file_examples_internal_proto_examplepb_a_bit_of_everything_proto_rawDesc = [ 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x34, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, - 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, - 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, - 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, - 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, - 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, - 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, - 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, - 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, - 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, - 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, - 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x64, 0x65, 0x65, 0x70, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x41, 0x0a, 0x0a, 0x4e, + 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, + 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x57, + 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x96, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x57, + 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x57, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x50, 0x6f, + 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x34, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, - 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, - 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, - 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, - 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x74, 0x65, 0x78, 0x74, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, - 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, - 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, - 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, - 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x42, 0x83, 0x0a, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, - 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x70, 0x62, 0x92, 0x41, 0xb2, 0x09, 0x12, 0xf6, 0x01, 0x0a, 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, - 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x2e, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x62, 0x6f, 0x64, 0x79, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xe2, + 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, + 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, + 0x61, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x7b, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0xf6, 0x01, 0x0a, 0x1d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x12, 0x49, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x2f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x2f, 0x7b, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2e, 0x6f, 0x6b, 0x7d, 0x12, 0xed, 0x01, 0x0a, + 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x6f, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, + 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x1a, 0x40, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, + 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x4b, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x61, + 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x6f, 0x73, 0x74, 0x2f, 0x7b, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x0d, 0x73, + 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x9b, 0x01, 0x0a, + 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, + 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x74, 0x79, 0x70, 0x65, 0x92, 0x41, 0x12, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x1a, 0xbf, 0x01, 0x92, 0x41, 0xbb, + 0x01, 0x12, 0x66, 0x41, 0x42, 0x69, 0x74, 0x4f, 0x66, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, + 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, + 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x21, 0x1a, 0x51, 0x0a, 0x1f, 0x46, 0x69, 0x6e, + 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, + 0x20, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x32, 0x6a, 0x0a, 0x14, + 0x63, 0x61, 0x6d, 0x65, 0x6c, 0x43, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x19, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x5e, 0x0a, 0x1c, 0x41, 0x6e, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x4e, 0x6f, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x6f, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x83, 0x0a, 0x5a, 0x4b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x92, 0x41, 0xb2, 0x09, 0x12, 0xf6, 0x01, 0x0a, + 0x13, 0x41, 0x20, 0x42, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, + 0x68, 0x69, 0x6e, 0x67, 0x22, 0x58, 0x0a, 0x14, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, + 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, + 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x1a, 0x10, 0x6e, 0x6f, 0x6e, 0x65, 0x40, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2a, 0x5e, 0x0a, 0x14, 0x42, 0x53, 0x44, 0x20, - 0x33, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x12, 0x46, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, - 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, - 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, - 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, - 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, - 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, - 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, - 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, - 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, - 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, - 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, - 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, - 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, - 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, - 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2f, 0x62, 0x6c, 0x6f, 0x62, 0x2f, 0x6d, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2e, 0x74, 0x78, 0x74, 0x32, 0x03, + 0x31, 0x2e, 0x30, 0x3a, 0x20, 0x0a, 0x15, 0x78, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, + 0x6e, 0x67, 0x2d, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x1a, 0x05, + 0x79, 0x61, 0x64, 0x64, 0x61, 0x2a, 0x03, 0x01, 0x02, 0x04, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x16, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, + 0x6d, 0x69, 0x6d, 0x65, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x16, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x66, 0x6f, 0x6f, 0x2d, 0x6d, 0x69, 0x6d, 0x65, 0x52, 0x50, + 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, + 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, + 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, + 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x52, 0x57, 0x0a, + 0x03, 0x34, 0x31, 0x38, 0x12, 0x50, 0x0a, 0x0d, 0x49, 0x27, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x65, + 0x61, 0x70, 0x6f, 0x74, 0x2e, 0x12, 0x3f, 0x0a, 0x3d, 0x1a, 0x3b, 0x2e, 0x67, 0x72, 0x70, 0x63, + 0x2e, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x5a, 0x97, 0x03, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x0a, 0xaa, 0x01, 0x0a, 0x0a, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x9b, 0x01, 0x08, 0x02, 0x1a, 0x09, + 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x65, 0x79, 0x20, 0x02, 0x4a, 0x28, 0x0a, 0x1c, 0x78, + 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, - 0x68, 0x74, 0x79, 0x70, 0x65, 0x12, 0x08, 0x1a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x4a, - 0x60, 0x0a, 0x1e, 0x78, 0x2d, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x2d, 0x61, 0x70, 0x69, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, - 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, - 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, - 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, - 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, - 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, - 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, - 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, - 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, - 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, - 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x3e, 0x2a, 0x3c, 0x0a, 0x0f, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x07, 0x1a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x29, 0x0a, 0x1c, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x54, 0x74, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x09, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x0a, 0xd6, 0x01, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, + 0x68, 0x32, 0x12, 0xcb, 0x01, 0x08, 0x03, 0x28, 0x04, 0x32, 0x23, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x61, 0x75, 0x74, 0x68, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x3a, 0x1f, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, + 0x7f, 0x0a, 0x1a, 0x0a, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x12, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x1c, 0x0a, + 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x0a, 0x43, 0x0a, 0x05, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x3a, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x61, + 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x62, 0x1f, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x62, 0x29, 0x0a, 0x17, 0x0a, 0x06, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x0d, 0x0a, + 0x04, 0x72, 0x65, 0x61, 0x64, 0x0a, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x0a, 0x0e, 0x0a, 0x0a, + 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x72, 0x49, 0x0a, 0x17, + 0x4d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x67, 0x52, 0x50, 0x43, 0x2d, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2d, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x7a, 0x1b, 0x0a, 0x12, 0x78, 0x2d, 0x67, 0x72, 0x70, + 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x66, 0x6f, 0x6f, 0x12, 0x05, 0x1a, + 0x03, 0x62, 0x61, 0x72, 0x7a, 0x28, 0x0a, 0x17, 0x78, 0x2d, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2d, 0x62, 0x61, 0x7a, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x12, + 0x0d, 0x32, 0x0b, 0x0a, 0x05, 0x1a, 0x03, 0x6f, 0x6e, 0x65, 0x0a, 0x02, 0x20, 0x01, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go index 5ae6bf8d50f..2f0a76bab88 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go +++ b/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go @@ -3067,49 +3067,49 @@ func RegisterABitOfEverythingServiceHandlerClient(ctx context.Context, mux *runt } var ( - pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 2, 12, 1, 0, 4, 2, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18, 1, 0, 4, 1, 5, 19, 1, 0, 4, 1, 5, 20, 1, 0, 4, 1, 5, 21, 1, 0, 4, 1, 5, 22, 1, 0, 4, 1, 5, 23}, []string{"v1", "example", "a_bit_of_everything", "float_value", "double_value", "int64_value", "separator", "uint64_value", "int32_value", "fixed64_value", "fixed32_value", "bool_value", "strprefix", "string_value", "uint32_value", "sfixed32_value", "sfixed64_value", "sint32_value", "sint64_value", "nonConventionalNameValue", "enum_value", "path_enum_value", "nested_path_enum_value", "enum_value_annotation"}, "")) - pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CreateBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) - pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) - pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) - pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_UpdateV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) - pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_UpdateV2_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "a_bit_of_everything", "abe.uuid"}, "")) - pattern_ABitOfEverythingService_UpdateV2_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_UpdateV2_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2a", "example", "a_bit_of_everything", "abe.uuid"}, "")) - pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "uuid"}, "")) - pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_GetQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "query", "uuid"}, "")) - pattern_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{"v1", "example", "a_bit_of_everything_repeated", "path_repeated_float_value", "path_repeated_double_value", "path_repeated_int64_value", "path_repeated_uint64_value", "path_repeated_int32_value", "path_repeated_fixed64_value", "path_repeated_fixed32_value", "path_repeated_bool_value", "path_repeated_string_value", "path_repeated_bytes_value", "path_repeated_uint32_value", "path_repeated_enum_value", "path_repeated_sfixed32_value", "path_repeated_sfixed64_value", "path_repeated_sint32_value", "path_repeated_sint64_value"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_GetRepeatedQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8, 1, 0, 4, 1, 5, 9, 1, 0, 4, 1, 5, 10, 1, 0, 4, 1, 5, 11, 1, 0, 4, 1, 5, 12, 1, 0, 4, 1, 5, 13, 1, 0, 4, 1, 5, 14, 1, 0, 4, 1, 5, 15, 1, 0, 4, 1, 5, 16, 1, 0, 4, 1, 5, 17, 1, 0, 4, 1, 5, 18}, []string{"v1", "example", "a_bit_of_everything_repeated", "path_repeated_float_value", "path_repeated_double_value", "path_repeated_int64_value", "path_repeated_uint64_value", "path_repeated_int32_value", "path_repeated_fixed64_value", "path_repeated_fixed32_value", "path_repeated_bool_value", "path_repeated_string_value", "path_repeated_bytes_value", "path_repeated_uint32_value", "path_repeated_enum_value", "path_repeated_sfixed32_value", "path_repeated_sfixed64_value", "path_repeated_sint32_value", "path_repeated_sint64_value"}, "")) - pattern_ABitOfEverythingService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "echo", "value"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "a_bit_of_everything", "echo", "value"}, "")) - pattern_ABitOfEverythingService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "")) - pattern_ABitOfEverythingService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo"}, "")) - pattern_ABitOfEverythingService_DeepPathEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "a_bit_of_everything", "single_nested.name"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_DeepPathEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "deep_path", "single_nested.name"}, "")) - pattern_ABitOfEverythingService_Timeout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "timeout"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_Timeout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "timeout"}, "")) - pattern_ABitOfEverythingService_ErrorWithDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "errorwithdetails"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_ErrorWithDetails_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "errorwithdetails"}, "")) - pattern_ABitOfEverythingService_GetMessageWithBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "withbody", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_GetMessageWithBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "withbody", "id"}, "")) - pattern_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "postwithemptybody", "name"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_PostWithEmptyBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "postwithemptybody", "name"}, "")) - pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CheckGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "single_nested.name"}, "")) - pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "nested_enum", "single_nested.ok"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CheckNestedEnumGetQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "example", "a_bit_of_everything", "params", "get", "nested_enum", "single_nested.ok"}, "")) - pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_CheckPostQueryParams_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "a_bit_of_everything", "params", "post", "string_value"}, "")) - pattern_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "overwriteresponsecontenttype"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ABitOfEverythingService_OverwriteResponseContentType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "overwriteresponsecontenttype"}, "")) ) var ( @@ -3220,7 +3220,7 @@ func RegisterCamelCaseServiceNameHandlerClient(ctx context.Context, mux *runtime } var ( - pattern_CamelCaseServiceName_Empty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "empty"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_CamelCaseServiceName_Empty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "empty"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.proto b/examples/internal/proto/examplepb/a_bit_of_everything.proto index 9165784370b..dfe0e29f5f4 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.proto +++ b/examples/internal/proto/examplepb/a_bit_of_everything.proto @@ -486,7 +486,7 @@ service ABitOfEverythingService { } rpc DeepPathEcho(ABitOfEverything) returns (ABitOfEverything) { option (google.api.http) = { - post: "/v1/example/a_bit_of_everything/{single_nested.name}" + post: "/v1/example/deep_path/{single_nested.name}" body: "*" }; } diff --git a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json index f3dd78a5cf5..e3312bb2ab6 100644 --- a/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json +++ b/examples/internal/proto/examplepb/a_bit_of_everything.swagger.json @@ -1354,62 +1354,6 @@ ] } }, - "/v1/example/a_bit_of_everything/{singleNested.name}": { - "post": { - "operationId": "ABitOfEverythingService_DeepPathEcho", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" - } - }, - "403": { - "description": "Returned when the user does not have permission to access the resource.", - "schema": {} - }, - "404": { - "description": "Returned when the resource does not exist.", - "schema": { - "type": "string", - "format": "string" - } - }, - "418": { - "description": "I'm a teapot.", - "schema": { - "$ref": "#/definitions/examplepbNumericEnum" - } - }, - "default": { - "description": "An unexpected error response", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "singleNested.name", - "description": "name is nested field.", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/examplepbABitOfEverything" - } - } - ], - "tags": [ - "ABitOfEverythingService" - ] - } - }, "/v1/example/a_bit_of_everything/{uuid}": { "get": { "operationId": "ABitOfEverythingService_Lookup", @@ -1801,6 +1745,62 @@ ] } }, + "/v1/example/deep_path/{singleNested.name}": { + "post": { + "operationId": "ABitOfEverythingService_DeepPathEcho", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + }, + "403": { + "description": "Returned when the user does not have permission to access the resource.", + "schema": {} + }, + "404": { + "description": "Returned when the resource does not exist.", + "schema": { + "type": "string", + "format": "string" + } + }, + "418": { + "description": "I'm a teapot.", + "schema": { + "$ref": "#/definitions/examplepbNumericEnum" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "singleNested.name", + "description": "name is nested field.", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/examplepbABitOfEverything" + } + } + ], + "tags": [ + "ABitOfEverythingService" + ] + } + }, "/v2/example/a_bit_of_everything/{abe.uuid}": { "put": { "operationId": "ABitOfEverythingService_UpdateV2", diff --git a/examples/internal/proto/examplepb/echo_service.pb.gw.go b/examples/internal/proto/examplepb/echo_service.pb.gw.go index 412d1c30b36..76cc8f91076 100644 --- a/examples/internal/proto/examplepb/echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/echo_service.pb.gw.go @@ -919,19 +919,19 @@ func RegisterEchoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux } var ( - pattern_EchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "")) - pattern_EchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "")) - pattern_EchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo", "id", "num", "lang"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo", "id", "num", "lang"}, "")) - pattern_EchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo1", "id", "line_num", "status.note"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v1", "example", "echo1", "id", "line_num", "status.note"}, "")) - pattern_EchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo2", "no.note"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo2", "no.note"}, "")) - pattern_EchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "")) - pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_EchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/flow_combination.pb.gw.go b/examples/internal/proto/examplepb/flow_combination.pb.gw.go index 60990f4eb13..b77740b9ef2 100644 --- a/examples/internal/proto/examplepb/flow_combination.pb.gw.go +++ b/examples/internal/proto/examplepb/flow_combination.pb.gw.go @@ -2393,57 +2393,57 @@ func RegisterFlowCombinationHandlerClient(ctx context.Context, mux *runtime.Serv } var ( - pattern_FlowCombination_RpcEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "empty"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "empty"}, "")) - pattern_FlowCombination_RpcEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "empty", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "empty", "stream"}, "")) - pattern_FlowCombination_StreamEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stream", "empty", "rpc"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_StreamEmptyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stream", "empty", "rpc"}, "")) - pattern_FlowCombination_StreamEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"stream", "empty"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_StreamEmptyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"stream", "empty"}, "")) - pattern_FlowCombination_RpcBodyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "body"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "body"}, "")) - pattern_FlowCombination_RpcBodyRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "path", "a", "b", "c"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "path", "a", "b", "c"}, "")) - pattern_FlowCombination_RpcBodyRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "query"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"rpc", "query"}, "")) - pattern_FlowCombination_RpcBodyRpc_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "body", "path", "a", "b"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 0}, []string{"rpc", "body", "path", "a", "b"}, "")) - pattern_FlowCombination_RpcBodyRpc_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{"rpc", "body", "query"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 0}, []string{"rpc", "body", "query"}, "")) - pattern_FlowCombination_RpcBodyRpc_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 0}, []string{"rpc", "body", "path", "a", "query"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 0}, []string{"rpc", "body", "path", "a", "query"}, "")) - pattern_FlowCombination_RpcBodyRpc_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 0}, []string{"rpc", "path", "a", "query"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyRpc_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 0}, []string{"rpc", "path", "a", "query"}, "")) - pattern_FlowCombination_RpcPathSingleNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathSingleNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) - pattern_FlowCombination_RpcPathNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{"rpc", "path-nested", "a.str", "b"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedRpc_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 0}, []string{"rpc", "path-nested", "a.str", "b"}, "")) - pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedRpc_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) - pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedRpc_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 0}, []string{"rpc", "path-nested", "a.str"}, "")) - pattern_FlowCombination_RpcBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "body", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "body", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "path", "a", "b", "c", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "path", "a", "b", "c", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"rpc", "query", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "body", "path", "a", "b", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"rpc", "body", "path", "a", "b", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"rpc", "body", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"rpc", "body", "query", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"rpc", "body", "path", "a", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_5 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"rpc", "body", "path", "a", "query", "stream"}, "")) - pattern_FlowCombination_RpcBodyStream_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"rpc", "path", "a", "query", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcBodyStream_6 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"rpc", "path", "a", "query", "stream"}, "")) - pattern_FlowCombination_RpcPathSingleNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathSingleNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) - pattern_FlowCombination_RpcPathNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"rpc", "path-nested", "a.str", "b", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"rpc", "path-nested", "a.str", "b", "stream"}, "")) - pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedStream_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) - pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_FlowCombination_RpcPathNestedStream_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"rpc", "path-nested", "a.str", "stream"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go index c8448db166d..c8d1a3e01de 100644 --- a/examples/internal/proto/examplepb/non_standard_names.pb.gw.go +++ b/examples/internal/proto/examplepb/non_standard_names.pb.gw.go @@ -291,9 +291,9 @@ func RegisterNonStandardServiceHandlerClient(ctx context.Context, mux *runtime.S } var ( - pattern_NonStandardService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_NonStandardService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update"}, "")) - pattern_NonStandardService_UpdateWithJSONNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update_with_json_names"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_NonStandardService_UpdateWithJSONNames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "non_standard", "update_with_json_names"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/response_body_service.pb.gw.go b/examples/internal/proto/examplepb/response_body_service.pb.gw.go index 67dfcc17bbd..81245fe2c10 100644 --- a/examples/internal/proto/examplepb/response_body_service.pb.gw.go +++ b/examples/internal/proto/examplepb/response_body_service.pb.gw.go @@ -462,13 +462,13 @@ func (m response_ResponseBodyService_GetResponseBodyStream_0) XXX_ResponseBody() } var ( - pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ResponseBodyService_GetResponseBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebody", "data"}, "")) - pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ResponseBodyService_ListResponseBodies_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsebodies", "data"}, "")) - pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ResponseBodyService_ListResponseStrings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"responsestrings", "data"}, "")) - pattern_ResponseBodyService_GetResponseBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"responsebody", "stream", "data"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_ResponseBodyService_GetResponseBodyStream_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"responsebody", "stream", "data"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/stream.pb.gw.go b/examples/internal/proto/examplepb/stream.pb.gw.go index a3199f8381e..7008f157a46 100644 --- a/examples/internal/proto/examplepb/stream.pb.gw.go +++ b/examples/internal/proto/examplepb/stream.pb.gw.go @@ -319,13 +319,13 @@ func RegisterStreamServiceHandlerClient(ctx context.Context, mux *runtime.ServeM } var ( - pattern_StreamService_BulkCreate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "bulk"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_StreamService_BulkCreate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "bulk"}, "")) - pattern_StreamService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_StreamService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "a_bit_of_everything"}, "")) - pattern_StreamService_BulkEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "echo"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_StreamService_BulkEcho_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "example", "a_bit_of_everything", "echo"}, "")) - pattern_StreamService_Download_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "download"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_StreamService_Download_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "download"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go index a2bb5c2dbcf..38c6b22be1c 100644 --- a/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/examplepb/unannotated_echo_service.pb.gw.go @@ -475,13 +475,13 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti } var ( - pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "example", "echo", "id"}, "")) - pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "example", "echo", "id", "num"}, "")) - pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_body"}, "")) - pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "echo_delete"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/use_go_template.pb.gw.go b/examples/internal/proto/examplepb/use_go_template.pb.gw.go index 985d3dee723..39e061cbae1 100644 --- a/examples/internal/proto/examplepb/use_go_template.pb.gw.go +++ b/examples/internal/proto/examplepb/use_go_template.pb.gw.go @@ -227,9 +227,9 @@ func RegisterLoginServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu } var ( - pattern_LoginService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "login"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_LoginService_Login_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "login"}, "")) - pattern_LoginService_Logout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "logout"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_LoginService_Logout_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "logout"}, "")) ) var ( diff --git a/examples/internal/proto/examplepb/wrappers.pb.gw.go b/examples/internal/proto/examplepb/wrappers.pb.gw.go index 3401420c968..885a96735ad 100644 --- a/examples/internal/proto/examplepb/wrappers.pb.gw.go +++ b/examples/internal/proto/examplepb/wrappers.pb.gw.go @@ -895,27 +895,27 @@ func RegisterWrappersServiceHandlerClient(ctx context.Context, mux *runtime.Serv } var ( - pattern_WrappersService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "wrappers"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "example", "wrappers"}, "")) - pattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testString"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateStringValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testString"}, "")) - pattern_WrappersService_CreateInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt32"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt32"}, "")) - pattern_WrappersService_CreateInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt64"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testInt64"}, "")) - pattern_WrappersService_CreateFloatValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testFloat"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateFloatValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testFloat"}, "")) - pattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testDouble"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateDoubleValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testDouble"}, "")) - pattern_WrappersService_CreateBoolValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBool"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateBoolValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBool"}, "")) - pattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint32"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateUInt32Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint32"}, "")) - pattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint64"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateUInt64Value_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testUint64"}, "")) - pattern_WrappersService_CreateBytesValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBytes"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateBytesValue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testBytes"}, "")) - pattern_WrappersService_CreateEmpty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testEmpty"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_WrappersService_CreateEmpty_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "testEmpty"}, "")) ) var ( diff --git a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go index 8aeef22b892..78263134b54 100644 --- a/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go +++ b/examples/internal/proto/standalone/unannotated_echo_service.pb.gw.go @@ -920,19 +920,19 @@ func RegisterUnannotatedEchoServiceHandlerClient(ctx context.Context, mux *runti } var ( - pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo", "id"}, "")) - pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v2", "example", "echo", "id", "num"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v2", "example", "echo", "id", "num"}, "")) - pattern_UnannotatedEchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo", "id", "num", "lang"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_2 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo", "id", "num", "lang"}, "")) - pattern_UnannotatedEchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo1", "id", "line_num", "status.note"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_3 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"v2", "example", "echo1", "id", "line_num", "status.note"}, "")) - pattern_UnannotatedEchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo2", "no.note"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_Echo_4 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "example", "echo2", "no.note"}, "")) - pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_body"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_EchoBody_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_body"}, "")) - pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_delete"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_UnannotatedEchoService_EchoDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "example", "echo_delete"}, "")) ) var ( diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go index dcc2db92045..4ed1cbcf7be 100644 --- a/internal/descriptor/registry.go +++ b/internal/descriptor/registry.go @@ -68,10 +68,6 @@ type Registry struct { // all the elements of the FQN without any separator useFQNForSwaggerName bool - // allowColonFinalSegments determines whether colons are permitted - // in the final segment of a path. - allowColonFinalSegments bool - // useGoTemplate determines whether you want to use GO templates // in your protofile comments useGoTemplate bool @@ -478,16 +474,6 @@ func (r *Registry) SetUseFQNForSwaggerName(use bool) { r.useFQNForSwaggerName = use } -// GetAllowColonFinalSegments returns allowColonFinalSegments -func (r *Registry) GetAllowColonFinalSegments() bool { - return r.allowColonFinalSegments -} - -// SetAllowColonFinalSegments sets allowColonFinalSegments -func (r *Registry) SetAllowColonFinalSegments(use bool) { - r.allowColonFinalSegments = use -} - // GetUseFQNForSwaggerName returns useFQNForSwaggerName func (r *Registry) GetUseFQNForSwaggerName() bool { return r.useFQNForSwaggerName diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template.go b/protoc-gen-grpc-gateway/internal/gengateway/template.go index 6a79930d4b1..bd8f50eae9b 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template.go @@ -145,7 +145,6 @@ type trailerParams struct { Services []*descriptor.Service UseRequestContext bool RegisterFuncSuffix string - AssumeColonVerb bool } func applyTemplate(p param, reg *descriptor.Registry) (string, error) { @@ -197,15 +196,10 @@ func applyTemplate(p param, reg *descriptor.Registry) (string, error) { return "", errNoTargetService } - assumeColonVerb := true - if reg != nil { - assumeColonVerb = !reg.GetAllowColonFinalSegments() - } tp := trailerParams{ Services: targetServices, UseRequestContext: p.UseRequestContext, RegisterFuncSuffix: p.RegisterFuncSuffix, - AssumeColonVerb: assumeColonVerb, } // Local if err := localTrailerTemplate.Execute(w, tp); err != nil { @@ -708,7 +702,7 @@ func (m response_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}}) XXX_ResponseBody( var ( {{range $m := $svc.Methods}} {{range $b := $m.Bindings}} - pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} = runtime.MustPattern(runtime.NewPattern({{$b.PathTmpl.Version}}, {{$b.PathTmpl.OpCodes | printf "%#v"}}, {{$b.PathTmpl.Pool | printf "%#v"}}, {{$b.PathTmpl.Verb | printf "%q"}}, runtime.AssumeColonVerbOpt({{$.AssumeColonVerb}}))) + pattern_{{$svc.GetName}}_{{$m.GetName}}_{{$b.Index}} = runtime.MustPattern(runtime.NewPattern({{$b.PathTmpl.Version}}, {{$b.PathTmpl.OpCodes | printf "%#v"}}, {{$b.PathTmpl.Pool | printf "%#v"}}, {{$b.PathTmpl.Verb | printf "%q"}})) {{end}} {{end}} ) diff --git a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go index 456191597b0..76996e75c1e 100644 --- a/protoc-gen-grpc-gateway/internal/gengateway/template_test.go +++ b/protoc-gen-grpc-gateway/internal/gengateway/template_test.go @@ -242,7 +242,7 @@ func TestApplyTemplateRequestWithoutClientStreaming(t *testing.T) { if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), "", runtime.AssumeColonVerbOpt(true)))`; !strings.Contains(got, want) { + if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } if want := `rctx, err := runtime.AnnotateContext(ctx, mux, req, "/example.ExampleService/Echo")`; !strings.Contains(got, want) { @@ -397,7 +397,7 @@ func TestApplyTemplateRequestWithClientStreaming(t *testing.T) { if want := `func RegisterExampleServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } - if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), "", runtime.AssumeColonVerbOpt(true)))`; !strings.Contains(got, want) { + if want := `pattern_ExampleService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{0, 0}, []string(nil), ""))`; !strings.Contains(got, want) { t.Errorf("applyTemplate(%#v) = %s; want to contain %s", file, got, want) } } diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go index a4cfe83425e..64ca6dd1fa4 100644 --- a/protoc-gen-grpc-gateway/main.go +++ b/protoc-gen-grpc-gateway/main.go @@ -33,7 +33,6 @@ var ( allowRepeatedFieldsInBody = flag.Bool("allow_repeated_fields_in_body", false, "allows to use repeated field in `body` and `response_body` field of `google.api.http` annotation option") repeatedPathParamSeparator = flag.String("repeated_path_param_separator", "csv", "configures how repeated fields should be split. Allowed values are `csv`, `pipes`, `ssv` and `tsv`.") allowPatchFeature = flag.Bool("allow_patch_feature", true, "determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask).") - allowColonFinalSegments = flag.Bool("allow_colon_final_segments", false, "determines whether colons are permitted in the final segment of a path") standalone = flag.Bool("standalone", false, "generates a standalone gateway package, which imports the target service package") versionFlag = flag.Bool("version", false, "print the current version") ) @@ -96,7 +95,6 @@ func main() { reg.SetImportPath(*importPath) reg.SetAllowDeleteBody(*allowDeleteBody) reg.SetAllowRepeatedFieldsInBody(*allowRepeatedFieldsInBody) - reg.SetAllowColonFinalSegments(*allowColonFinalSegments) if err := reg.SetRepeatedPathParamSeparator(*repeatedPathParamSeparator); err != nil { emitError(err) return diff --git a/runtime/mux.go b/runtime/mux.go index b33bf47d7d5..16d700c49b2 100644 --- a/runtime/mux.go +++ b/runtime/mux.go @@ -29,7 +29,6 @@ type ServeMux struct { errorHandler ErrorHandlerFunc streamErrorHandler StreamErrorHandlerFunc disablePathLengthFallback bool - lastMatchWins bool } // ServeMuxOption is an option that can be given to a ServeMux on construction. @@ -133,15 +132,6 @@ func WithDisablePathLengthFallback() ServeMuxOption { } } -// WithLastMatchWins returns a ServeMuxOption that will enable "last -// match wins" behavior, where if multiple path patterns match a -// request path, the last one defined in the .proto file will be used. -func WithLastMatchWins() ServeMuxOption { - return func(serveMux *ServeMux) { - serveMux.lastMatchWins = true - } -} - // NewServeMux returns a new ServeMux whose internal mapping is empty. func NewServeMux(opts ...ServeMuxOption) *ServeMux { serveMux := &ServeMux{ @@ -171,11 +161,7 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux { // Handle associates "h" to the pair of HTTP method and path pattern. func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { - if s.lastMatchWins { - s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...) - } else { - s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h}) - } + s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...) } // ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path. diff --git a/runtime/mux_test.go b/runtime/mux_test.go index da74f1410ee..50f1787a797 100644 --- a/runtime/mux_test.go +++ b/runtime/mux_test.go @@ -20,8 +20,7 @@ func TestMuxServeHTTP(t *testing.T) { verb string } for i, spec := range []struct { - patterns []stubPattern - patternOpts []runtime.PatternOpt + patterns []stubPattern reqMethod string reqPath string @@ -31,7 +30,6 @@ func TestMuxServeHTTP(t *testing.T) { respContent string disablePathLengthFallback bool - muxOpts []runtime.ServeMuxOption }{ { patterns: nil, @@ -68,12 +66,12 @@ func TestMuxServeHTTP(t *testing.T) { patterns: []stubPattern{ { method: "GET", - ops: []int{int(utilities.OpLitPush), 0}, - pool: []string{"foo"}, + ops: []int{int(utilities.OpPush), 0}, }, { method: "GET", - ops: []int{int(utilities.OpPush), 0}, + ops: []int{int(utilities.OpLitPush), 0}, + pool: []string{"foo"}, }, }, reqMethod: "GET", @@ -249,9 +247,8 @@ func TestMuxServeHTTP(t *testing.T) { pool: []string{"foo", "id"}, }, }, - patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, - reqMethod: "GET", - reqPath: "/foo/bar", + reqMethod: "GET", + reqPath: "/foo/bar", headers: map[string]string{ "Content-Type": "application/json", }, @@ -266,9 +263,8 @@ func TestMuxServeHTTP(t *testing.T) { pool: []string{"foo", "id"}, }, }, - patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, - reqMethod: "GET", - reqPath: "/foo/bar:123", + reqMethod: "GET", + reqPath: "/foo/bar:123", headers: map[string]string{ "Content-Type": "application/json", }, @@ -289,26 +285,24 @@ func TestMuxServeHTTP(t *testing.T) { verb: "verb", }, }, - patternOpts: []runtime.PatternOpt{runtime.AssumeColonVerbOpt(false)}, - reqMethod: "POST", - reqPath: "/foo/bar:verb", + reqMethod: "POST", + reqPath: "/foo/bar:verb", headers: map[string]string{ "Content-Type": "application/json", }, respStatus: http.StatusOK, respContent: "POST /foo/{id=*}:verb", - muxOpts: []runtime.ServeMuxOption{runtime.WithLastMatchWins()}, }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { - opts := spec.muxOpts + var opts []runtime.ServeMuxOption if spec.disablePathLengthFallback { opts = append(opts, runtime.WithDisablePathLengthFallback()) } mux := runtime.NewServeMux(opts...) for _, p := range spec.patterns { func(p stubPattern) { - pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb, spec.patternOpts...) + pat, err := runtime.NewPattern(1, p.ops, p.pool, p.verb) if err != nil { t.Fatalf("runtime.NewPattern(1, %#v, %#v, %q) failed with %v; want success", p.ops, p.pool, p.verb, err) } diff --git a/runtime/pattern.go b/runtime/pattern.go index a1bd2496fc9..b3178240968 100644 --- a/runtime/pattern.go +++ b/runtime/pattern.go @@ -36,31 +36,14 @@ type Pattern struct { tailLen int // verb is the VERB part of the path pattern. It is empty if the pattern does not have VERB part. verb string - // assumeColonVerb indicates whether a path suffix after a final - // colon may only be interpreted as a verb. - assumeColonVerb bool } -type patternOptions struct { - assumeColonVerb bool -} - -// PatternOpt is an option for creating Patterns. -type PatternOpt func(*patternOptions) - // NewPattern returns a new Pattern from the given definition values. // "ops" is a sequence of op codes. "pool" is a constant pool. // "verb" is the verb part of the pattern. It is empty if the pattern does not have the part. // "version" must be 1 for now. // It returns an error if the given definition is invalid. -func NewPattern(version int, ops []int, pool []string, verb string, opts ...PatternOpt) (Pattern, error) { - options := patternOptions{ - assumeColonVerb: true, - } - for _, o := range opts { - o(&options) - } - +func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) { if version != 1 { grpclog.Infof("unsupported version: %d", version) return Pattern{}, ErrInvalidPattern @@ -140,13 +123,12 @@ func NewPattern(version int, ops []int, pool []string, verb string, opts ...Patt typedOps = append(typedOps, op) } return Pattern{ - ops: typedOps, - pool: pool, - vars: vars, - stacksize: maxstack, - tailLen: tailLen, - verb: verb, - assumeColonVerb: options.assumeColonVerb, + ops: typedOps, + pool: pool, + vars: vars, + stacksize: maxstack, + tailLen: tailLen, + verb: verb, }, nil } @@ -163,7 +145,7 @@ func MustPattern(p Pattern, err error) Pattern { // If otherwise, the function returns an error. func (p Pattern) Match(components []string, verb string) (map[string]string, error) { if p.verb != verb { - if p.assumeColonVerb || p.verb != "" { + if p.verb != "" { return nil, ErrNotMatch } if len(components) == 0 { @@ -253,11 +235,3 @@ func (p Pattern) String() string { } return "/" + segs } - -// AssumeColonVerbOpt indicates whether a path suffix after a final -// colon may only be interpreted as a verb. -func AssumeColonVerbOpt(val bool) PatternOpt { - return PatternOpt(func(o *patternOptions) { - o.assumeColonVerb = val - }) -} From 885c0bd4dc0c018f9fc368ecf9cb26ee451bf24c Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 23 May 2020 22:13:47 +0100 Subject: [PATCH 0430/1518] runtime: make HTTPBodyMarshaler the default google.api.HttpBody provides complete control over the output format and content type, and we should support this natively in the gateway, and not force users to set their marshaler explicitly. --- runtime/errors.go | 8 +------- runtime/handler.go | 14 +++++--------- runtime/handler_test.go | 11 +++++------ runtime/marshal_httpbodyproto.go | 21 +++++---------------- runtime/marshal_httpbodyproto_test.go | 4 ++-- runtime/marshal_json.go | 2 +- runtime/marshal_jsonpb.go | 6 +++--- runtime/marshal_proto.go | 2 +- runtime/marshaler.go | 11 +++-------- runtime/marshaler_registry.go | 8 +++++--- runtime/marshaler_registry_test.go | 10 +++++----- 11 files changed, 36 insertions(+), 61 deletions(-) diff --git a/runtime/errors.go b/runtime/errors.go index 1a47702d5ef..6955343a088 100644 --- a/runtime/errors.go +++ b/runtime/errors.go @@ -80,13 +80,7 @@ func defaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh w.Header().Del("Trailer") - contentType := marshaler.ContentType() - // Check marshaler at runtime in order to keep backwards compatibility. - // An interface param needs to be added to the ContentType() function on - // the Marshal interface to be able to remove this check - if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { - contentType = typeMarshaler.ContentTypeFromMessage(pb) - } + contentType := marshaler.ContentType(pb) w.Header().Set("Content-Type", contentType) buf, merr := marshaler.Marshal(pb) diff --git a/runtime/handler.go b/runtime/handler.go index af147c32ca8..2628c2b1c72 100644 --- a/runtime/handler.go +++ b/runtime/handler.go @@ -32,7 +32,6 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal handleForwardResponseServerMetadata(w, mux, md) w.Header().Set("Transfer-Encoding", "chunked") - w.Header().Set("Content-Type", marshaler.ContentType()) if err := handleForwardResponseOptions(ctx, w, nil, opts); err != nil { HTTPError(ctx, mux, marshaler, w, req, err) return @@ -60,6 +59,10 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal return } + if !wroteHeader { + w.Header().Set("Content-Type", marshaler.ContentType(resp)) + } + var buf []byte httpBody, isHTTPBody := resp.(*httpbody.HttpBody) switch { @@ -67,7 +70,6 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response"))) case isHTTPBody: buf = httpBody.GetData() - w.Header().Set("Content-Type", httpBody.GetContentType()) default: result := map[string]interface{}{"result": resp} if rb, ok := resp.(responseBody); ok { @@ -137,13 +139,7 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha handleForwardResponseServerMetadata(w, mux, md) handleForwardResponseTrailerHeader(w, md) - contentType := marshaler.ContentType() - // Check marshaler on run time in order to keep backwards compatibility - // An interface param needs to be added to the ContentType() function on - // the Marshal interface to be able to remove this check - if typeMarshaler, ok := marshaler.(contentTypeMarshaler); ok { - contentType = typeMarshaler.ContentTypeFromMessage(resp) - } + contentType := marshaler.ContentType(resp) w.Header().Set("Content-Type", contentType) if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { diff --git a/runtime/handler_test.go b/runtime/handler_test.go index 6e2d19bd776..d227c57f176 100644 --- a/runtime/handler_test.go +++ b/runtime/handler_test.go @@ -166,12 +166,11 @@ type CustomMarshaler struct { m *runtime.JSONPb } -func (c *CustomMarshaler) Marshal(v interface{}) ([]byte, error) { return c.m.Marshal(v) } -func (c *CustomMarshaler) Unmarshal(data []byte, v interface{}) error { return c.m.Unmarshal(data, v) } -func (c *CustomMarshaler) NewDecoder(r io.Reader) runtime.Decoder { return c.m.NewDecoder(r) } -func (c *CustomMarshaler) NewEncoder(w io.Writer) runtime.Encoder { return c.m.NewEncoder(w) } -func (c *CustomMarshaler) ContentType() string { return c.m.ContentType() } -func (c *CustomMarshaler) ContentTypeFromMessage(v interface{}) string { return "Custom-Content-Type" } +func (c *CustomMarshaler) Marshal(v interface{}) ([]byte, error) { return c.m.Marshal(v) } +func (c *CustomMarshaler) Unmarshal(data []byte, v interface{}) error { return c.m.Unmarshal(data, v) } +func (c *CustomMarshaler) NewDecoder(r io.Reader) runtime.Decoder { return c.m.NewDecoder(r) } +func (c *CustomMarshaler) NewEncoder(w io.Writer) runtime.Encoder { return c.m.NewEncoder(w) } +func (c *CustomMarshaler) ContentType(v interface{}) string { return "Custom-Content-Type" } func TestForwardResponseStreamCustomMarshaler(t *testing.T) { type msg struct { diff --git a/runtime/marshal_httpbodyproto.go b/runtime/marshal_httpbodyproto.go index 3dc109a1283..b86135c889b 100644 --- a/runtime/marshal_httpbodyproto.go +++ b/runtime/marshal_httpbodyproto.go @@ -4,13 +4,6 @@ import ( "google.golang.org/genproto/googleapis/api/httpbody" ) -// SetHTTPBodyMarshaler overwrites the default marshaler with the HTTPBodyMarshaler -func SetHTTPBodyMarshaler(serveMux *ServeMux) { - serveMux.marshalers.mimeMap[MIMEWildcard] = &HTTPBodyMarshaler{ - Marshaler: defaultMarshaler, - } -} - // HTTPBodyMarshaler is a Marshaler which supports marshaling of a // google.api.HttpBody message as the full response body if it is // the actual message used as the response. If not, then this will @@ -19,18 +12,14 @@ type HTTPBodyMarshaler struct { Marshaler } -// ContentType implementation to keep backwards compatibility with marshal interface -func (h *HTTPBodyMarshaler) ContentType() string { - return h.ContentTypeFromMessage(nil) -} - -// ContentTypeFromMessage in case v is a google.api.HttpBody message it returns -// its specified content type otherwise fall back to the default Marshaler. -func (h *HTTPBodyMarshaler) ContentTypeFromMessage(v interface{}) string { +// ContentType returns its specified content type in case v is a +// google.api.HttpBody message, otherwise it will fall back to the default Marshalers +// content type. +func (h *HTTPBodyMarshaler) ContentType(v interface{}) string { if httpBody, ok := v.(*httpbody.HttpBody); ok { return httpBody.GetContentType() } - return h.Marshaler.ContentType() + return h.Marshaler.ContentType(v) } // Marshal marshals "v" by returning the body bytes if v is a diff --git a/runtime/marshal_httpbodyproto_test.go b/runtime/marshal_httpbodyproto_test.go index 4782d085415..64eb6594043 100644 --- a/runtime/marshal_httpbodyproto_test.go +++ b/runtime/marshal_httpbodyproto_test.go @@ -21,11 +21,11 @@ func TestHTTPBodyContentType(t *testing.T) { message := &httpbody.HttpBody{ ContentType: expected, } - res := m.ContentType() + res := m.ContentType(nil) if res != "application/json" { t.Errorf("content type not equal (%q, %q)", res, expected) } - res = m.ContentTypeFromMessage(message) + res = m.ContentType(message) if res != expected { t.Errorf("content type not equal (%q, %q)", res, expected) } diff --git a/runtime/marshal_json.go b/runtime/marshal_json.go index f9d3a585a4c..d6aa8257836 100644 --- a/runtime/marshal_json.go +++ b/runtime/marshal_json.go @@ -15,7 +15,7 @@ import ( type JSONBuiltin struct{} // ContentType always Returns "application/json". -func (*JSONBuiltin) ContentType() string { +func (*JSONBuiltin) ContentType(_ interface{}) string { return "application/json" } diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index c5f06120c74..ddd3895ee1a 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -23,7 +23,7 @@ type JSONPb struct { } // ContentType always returns "application/json". -func (*JSONPb) ContentType() string { +func (*JSONPb) ContentType(_ interface{}) string { return "application/json" } @@ -65,8 +65,8 @@ var ( ) // marshalNonProto marshals a non-message field of a protobuf message. -// This function does not correctly marshals arbitrary data structure into JSON, -// but it is only capable of marshaling non-message field values of protobuf, +// This function does not correctly marshal arbitrary data structures into JSON, +// it is only capable of marshaling non-message field values of protobuf, // i.e. primitive types, enums; pointers to primitives or enums; maps from // integer/string types to primitives/enums/pointers to messages. func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { diff --git a/runtime/marshal_proto.go b/runtime/marshal_proto.go index 69eeecc9224..007f8f1a2c7 100644 --- a/runtime/marshal_proto.go +++ b/runtime/marshal_proto.go @@ -13,7 +13,7 @@ import ( type ProtoMarshaller struct{} // ContentType always returns "application/octet-stream". -func (*ProtoMarshaller) ContentType() string { +func (*ProtoMarshaller) ContentType(_ interface{}) string { return "application/octet-stream" } diff --git a/runtime/marshaler.go b/runtime/marshaler.go index 46153294217..2c0d25ff493 100644 --- a/runtime/marshaler.go +++ b/runtime/marshaler.go @@ -16,14 +16,9 @@ type Marshaler interface { // NewEncoder returns an Encoder which writes bytes sequence into "w". NewEncoder(w io.Writer) Encoder // ContentType returns the Content-Type which this marshaler is responsible for. - ContentType() string -} - -// Marshalers that implement contentTypeMarshaler will have their ContentTypeFromMessage method called -// to set the Content-Type header on the response -type contentTypeMarshaler interface { - // ContentTypeFromMessage returns the Content-Type this marshaler produces from the provided message - ContentTypeFromMessage(v interface{}) string + // The parameter describes the type which is being marshalled, which can sometimes + // affect the content type returned. + ContentType(v interface{}) string } // Decoder decodes a byte sequence diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 5a62c2b476d..2ab149aa2ec 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -15,9 +15,11 @@ var ( acceptHeader = http.CanonicalHeaderKey("Accept") contentTypeHeader = http.CanonicalHeaderKey("Content-Type") - defaultMarshaler = &JSONPb{ - MarshalOptions: protojson.MarshalOptions{ - EmitUnpopulated: true, + defaultMarshaler = &HTTPBodyMarshaler{ + Marshaler: &JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: true, + }, }, } ) diff --git a/runtime/marshaler_registry_test.go b/runtime/marshaler_registry_test.go index 763a0f64949..c87efbee79a 100644 --- a/runtime/marshaler_registry_test.go +++ b/runtime/marshaler_registry_test.go @@ -20,11 +20,11 @@ func TestMarshalerForRequest(t *testing.T) { mux := runtime.NewServeMux() in, out := runtime.MarshalerForRequest(mux, r) - if _, ok := in.(*runtime.JSONPb); !ok { - t.Errorf("in = %#v; want a runtime.JSONPb", in) + if _, ok := in.(*runtime.HTTPBodyMarshaler); !ok { + t.Errorf("in = %#v; want a runtime.HTTPBodyMarshaler", in) } - if _, ok := out.(*runtime.JSONPb); !ok { - t.Errorf("out = %#v; want a runtime.JSONPb", in) + if _, ok := out.(*runtime.HTTPBodyMarshaler); !ok { + t.Errorf("out = %#v; want a runtime.HTTPBodyMarshaler", in) } var marshalers [3]dummyMarshaler @@ -78,7 +78,7 @@ func TestMarshalerForRequest(t *testing.T) { type dummyMarshaler struct{} -func (dummyMarshaler) ContentType() string { return "" } +func (dummyMarshaler) ContentType(_ interface{}) string { return "" } func (dummyMarshaler) Marshal(interface{}) ([]byte, error) { return nil, errors.New("not implemented") } From ffdd31c7f175803b8131ddafd4a03a1577e63be1 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sat, 23 May 2020 23:01:54 +0100 Subject: [PATCH 0431/1518] runtime: remove DisallowUnknownFields() This is now entirely controlled by the marshaller options. --- .../internal/integration/integration_test.go | 32 +++++++------- examples/internal/server/responsebody.go | 7 +++- runtime/marshal_jsonpb.go | 42 +++++++------------ runtime/marshal_jsonpb_test.go | 8 ++-- runtime/marshaler_registry.go | 3 ++ 5 files changed, 45 insertions(+), 47 deletions(-) diff --git a/examples/internal/integration/integration_test.go b/examples/internal/integration/integration_test.go index f7f8ff33f68..8f98da5d9d8 100644 --- a/examples/internal/integration/integration_test.go +++ b/examples/internal/integration/integration_test.go @@ -102,7 +102,7 @@ func testEcho(t *testing.T, port int, apiPrefix string, contentType string) { t.Logf("%s", buf) } - var msg examplepb.SimpleMessage + var msg examplepb.UnannotatedSimpleMessage if err := marshaler.Unmarshal(buf, &msg); err != nil { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return @@ -135,7 +135,7 @@ func testEchoOneof(t *testing.T, port int, apiPrefix string, contentType string) t.Logf("%s", buf) } - var msg examplepb.SimpleMessage + var msg examplepb.UnannotatedSimpleMessage if err := marshaler.Unmarshal(buf, &msg); err != nil { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return @@ -168,7 +168,7 @@ func testEchoOneof1(t *testing.T, port int, apiPrefix string, contentType string t.Logf("%s", buf) } - var msg examplepb.SimpleMessage + var msg examplepb.UnannotatedSimpleMessage if err := marshaler.Unmarshal(buf, &msg); err != nil { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return @@ -201,7 +201,7 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string t.Logf("%s", buf) } - var msg examplepb.SimpleMessage + var msg examplepb.UnannotatedSimpleMessage if err := marshaler.Unmarshal(buf, &msg); err != nil { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return @@ -216,7 +216,7 @@ func testEchoOneof2(t *testing.T, port int, apiPrefix string, contentType string } func testEchoBody(t *testing.T, port int, apiPrefix string) { - sent := examplepb.SimpleMessage{Id: "example"} + sent := examplepb.UnannotatedSimpleMessage{Id: "example"} payload, err := marshaler.Marshal(&sent) if err != nil { t.Fatalf("marshaler.Marshal(%#v) failed with %v; want success", payload, err) @@ -240,12 +240,12 @@ func testEchoBody(t *testing.T, port int, apiPrefix string) { t.Logf("%s", buf) } - var received examplepb.SimpleMessage + var received examplepb.UnannotatedSimpleMessage if err := marshaler.Unmarshal(buf, &received); err != nil { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } - if diff := cmp.Diff(received, sent, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(&received, &sent, protocmp.Transform()); diff != "" { t.Errorf(diff) } @@ -334,7 +334,7 @@ func testABECreate(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(&msg, &want, protocmp.Transform()); diff != "" { t.Errorf(diff) } } @@ -442,7 +442,7 @@ func testABECreateBody(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(&msg, &want, protocmp.Transform()); diff != "" { t.Errorf(diff) } } @@ -673,7 +673,7 @@ func testABELookup(t *testing.T, port int) { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } - if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(&msg, &want, protocmp.Transform()); diff != "" { t.Errorf(diff) } @@ -1340,7 +1340,7 @@ func testABERepeated(t *testing.T, port int) { t.Errorf("marshaler.Unmarshal(%s, &msg) failed with %v; want success", buf, err) return } - if diff := cmp.Diff(msg, want, protocmp.Transform()); diff != "" { + if diff := cmp.Diff(&msg, &want, protocmp.Transform()); diff != "" { t.Errorf(diff) } } @@ -1590,15 +1590,16 @@ func testResponseBodies(t *testing.T, port int) { t.Logf("%s", buf) } - var got []*examplepb.ResponseBodyOut_Response + var got []*examplepb.RepeatedResponseBodyOut_Response err = marshaler.Unmarshal(buf, &got) if err != nil { t.Errorf("marshaler.Unmarshal failed with %v; want success", err) return } - want := []*examplepb.ResponseBodyOut_Response{ + want := []*examplepb.RepeatedResponseBodyOut_Response{ { Data: "foo", + Type: examplepb.RepeatedResponseBodyOut_Response_UNKNOWN, }, } if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { @@ -1708,15 +1709,16 @@ func testResponseStrings(t *testing.T, port int) { t.Logf("%s", buf) } - var got []*examplepb.ResponseBodyOut_Response + var got []*examplepb.RepeatedResponseBodyOut_Response err = marshaler.Unmarshal(buf, &got) if err != nil { t.Errorf("marshaler.Unmarshal failed with %v; want success", err) return } - want := []*examplepb.ResponseBodyOut_Response{ + want := []*examplepb.RepeatedResponseBodyOut_Response{ { Data: "foo", + Type: examplepb.RepeatedResponseBodyOut_Response_UNKNOWN, }, } if diff := cmp.Diff(got, want, protocmp.Transform()); diff != "" { diff --git a/examples/internal/server/responsebody.go b/examples/internal/server/responsebody.go index 8ab9a231b17..e44d06541ff 100644 --- a/examples/internal/server/responsebody.go +++ b/examples/internal/server/responsebody.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/golang/glog" examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" ) @@ -16,6 +17,7 @@ func newResponseBodyServer() examples.ResponseBodyServiceServer { } func (s *responseBodyServer) GetResponseBody(ctx context.Context, req *examples.ResponseBodyIn) (*examples.ResponseBodyOut, error) { + glog.Info(req) return &examples.ResponseBodyOut{ Response: &examples.ResponseBodyOut_Response{ Data: req.Data, @@ -24,9 +26,10 @@ func (s *responseBodyServer) GetResponseBody(ctx context.Context, req *examples. } func (s *responseBodyServer) ListResponseBodies(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseBodyOut, error) { + glog.Info(req) return &examples.RepeatedResponseBodyOut{ Response: []*examples.RepeatedResponseBodyOut_Response{ - &examples.RepeatedResponseBodyOut_Response{ + { Data: req.Data, }, }, @@ -34,6 +37,7 @@ func (s *responseBodyServer) ListResponseBodies(ctx context.Context, req *exampl } func (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examples.ResponseBodyIn) (*examples.RepeatedResponseStrings, error) { + glog.Info(req) if req.Data == "empty" { return &examples.RepeatedResponseStrings{ Values: []string{}, @@ -45,6 +49,7 @@ func (s *responseBodyServer) ListResponseStrings(ctx context.Context, req *examp } func (s *responseBodyServer) GetResponseBodyStream(req *examples.ResponseBodyIn, stream examples.ResponseBodyService_GetResponseBodyStreamServer) error { + glog.Info(req) if err := stream.Send(&examples.ResponseBodyOut{ Response: &examples.ResponseBodyOut_Response{ Data: fmt.Sprintf("first %s", req.Data), diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index ddd3895ee1a..b551fb028d7 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -137,25 +137,29 @@ func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { // Unmarshal unmarshals JSON "data" into "v" func (j *JSONPb) Unmarshal(data []byte, v interface{}) error { - return unmarshalJSONPb(data, v) + return unmarshalJSONPb(data, j.UnmarshalOptions, v) } // NewDecoder returns a Decoder which reads JSON stream from "r". func (j *JSONPb) NewDecoder(r io.Reader) Decoder { d := json.NewDecoder(r) - return DecoderWrapper{Decoder: d} + return DecoderWrapper{ + Decoder: d, + UnmarshalOptions: j.UnmarshalOptions, + } } // DecoderWrapper is a wrapper around a *json.Decoder that adds // support for protos to the Decode method. type DecoderWrapper struct { *json.Decoder + protojson.UnmarshalOptions } // Decode wraps the embedded decoder's Decode method to support // protos using a jsonpb.Unmarshaler. func (d DecoderWrapper) Decode(v interface{}) error { - return decodeJSONPb(d.Decoder, v) + return decodeJSONPb(d.Decoder, d.UnmarshalOptions, v) } // NewEncoder returns an Encoder which writes JSON stream into "w". @@ -171,15 +175,15 @@ func (j *JSONPb) NewEncoder(w io.Writer) Encoder { }) } -func unmarshalJSONPb(data []byte, v interface{}) error { +func unmarshalJSONPb(data []byte, unmarshaler protojson.UnmarshalOptions, v interface{}) error { d := json.NewDecoder(bytes.NewReader(data)) - return decodeJSONPb(d, v) + return decodeJSONPb(d, unmarshaler, v) } -func decodeJSONPb(d *json.Decoder, v interface{}) error { +func decodeJSONPb(d *json.Decoder, unmarshaler protojson.UnmarshalOptions, v interface{}) error { p, ok := v.(proto.Message) if !ok { - return decodeNonProtoField(d, v) + return decodeNonProtoField(d, unmarshaler, v) } // Decode into bytes for marshalling @@ -189,13 +193,10 @@ func decodeJSONPb(d *json.Decoder, v interface{}) error { return err } - unmarshaler := &protojson.UnmarshalOptions{ - DiscardUnknown: allowUnknownFields, - } return unmarshaler.Unmarshal([]byte(b), p) } -func decodeNonProtoField(d *json.Decoder, v interface{}) error { +func decodeNonProtoField(d *json.Decoder, unmarshaler protojson.UnmarshalOptions, v interface{}) error { rv := reflect.ValueOf(v) if rv.Kind() != reflect.Ptr { return fmt.Errorf("%T is not a pointer", v) @@ -212,9 +213,6 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { return err } - unmarshaler := &protojson.UnmarshalOptions{ - DiscardUnknown: allowUnknownFields, - } return unmarshaler.Unmarshal([]byte(b), rv.Interface().(proto.Message)) } rv = rv.Elem() @@ -239,7 +237,7 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { } bk := result[0] bv := reflect.New(rv.Type().Elem()) - if err := unmarshalJSONPb([]byte(*v), bv.Interface()); err != nil { + if err := unmarshalJSONPb([]byte(*v), unmarshaler, bv.Interface()); err != nil { return err } rv.SetMapIndex(bk, bv.Elem()) @@ -256,7 +254,7 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { } for _, item := range sl { bv := reflect.New(rv.Type().Elem()) - if err := unmarshalJSONPb([]byte(item), bv.Interface()); err != nil { + if err := unmarshalJSONPb([]byte(item), unmarshaler, bv.Interface()); err != nil { return err } rv.Set(reflect.Append(rv, bv.Elem())) @@ -294,18 +292,6 @@ func (j *JSONPb) Delimiter() []byte { return []byte("\n") } -// allowUnknownFields helps not to return an error when the destination -// is a struct and the input contains object keys which do not match any -// non-ignored, exported fields in the destination. -var allowUnknownFields = true - -// DisallowUnknownFields enables option in decoder (unmarshaller) to -// return an error when it finds an unknown field. This function must be -// called before using the JSON marshaller. -func DisallowUnknownFields() { - allowUnknownFields = false -} - var ( convFromType = map[reflect.Kind]reflect.Value{ reflect.String: reflect.ValueOf(String), diff --git a/runtime/marshal_jsonpb_test.go b/runtime/marshal_jsonpb_test.go index 05f494827bf..e5085625a9e 100644 --- a/runtime/marshal_jsonpb_test.go +++ b/runtime/marshal_jsonpb_test.go @@ -471,7 +471,11 @@ func TestJSONPbDecoderFields(t *testing.T) { func TestJSONPbDecoderUnknownField(t *testing.T) { var ( - m runtime.JSONPb + m = runtime.JSONPb{ + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: false, + }, + } got examplepb.ABitOfEverything ) data := `{ @@ -479,8 +483,6 @@ func TestJSONPbDecoderUnknownField(t *testing.T) { "unknownField": "111" }` - runtime.DisallowUnknownFields() - r := strings.NewReader(data) dec := m.NewDecoder(r) if err := dec.Decode(&got); err == nil { diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 2ab149aa2ec..c2cb832ce34 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -20,6 +20,9 @@ var ( MarshalOptions: protojson.MarshalOptions{ EmitUnpopulated: true, }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, }, } ) From 1189f2c0c79de8698f0fe1f81c6f181e631119c9 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 24 May 2020 19:00:37 +0100 Subject: [PATCH 0432/1518] Update docs for v2 (#1388) * Tidy up docs * Update docs for v2 migration --- docs/_docs/customizingyourgateway.md | 301 +++++++++++---------------- docs/_docs/examples.md | 30 ++- docs/_docs/faq.md | 33 ++- docs/_docs/grpcapiconfiguration.md | 20 +- docs/_docs/httpbody.md | 22 +- docs/_docs/patch.md | 102 +++++---- docs/_docs/season_of_docs.md | 1 + docs/_docs/usegotemplates.md | 47 +++-- docs/_docs/v2-migration.md | 115 ++++++++++ 9 files changed, 391 insertions(+), 280 deletions(-) create mode 100644 docs/_docs/v2-migration.md diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index e1df0aa3209..8528a4a4fc5 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -13,34 +13,54 @@ You might want to serialize request/response messages in MessagePack instead of 1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) 2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) - e.g. - ```go - var m your.MsgPackMarshaler - mux := runtime.NewServeMux(runtime.WithMarshalerOption("application/x-msgpack", m)) - ``` + e.g. + ```go + var m your.MsgPackMarshaler + mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/x-msgpack", m), + ) + ``` You can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/marshal_jsonpb.go) for reference. -### Using camelCase for JSON +### Using proto names in JSON -The protocol buffer compiler generates camelCase JSON tags that can be used with jsonpb package. By default jsonpb Marshaller uses `OrigName: true` which uses the exact case used in the proto files. To use camelCase for the JSON representation, - ```go - mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName:false})) - ``` +The protocol buffer compiler generates camelCase JSON tags that are used by default. +If you want to use the exact case used in the proto files, set `UseProtoNames: true`: +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + UseProtoNames: true, + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + }), +) +``` ### Pretty-print JSON responses when queried with ?pretty You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows: 1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) - that translates the provided query parameter into a custom `Accept` header, and + that translates the provided query parameter into a custom `Accept` header, and 2. Register a pretty-printing marshaler for that MIME code. For example: ```go mux := runtime.NewServeMux( - runtime.WithMarshalerOption("application/json+pretty", &runtime.JSONPb{Indent: " "}), + runtime.WithMarshalerOption("application/json+pretty", &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + Indent: " ", + Multiline: true, // Optional, implied by presence of "Indent". + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + }), ) prettier := func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -55,22 +75,6 @@ prettier := func(h http.Handler) http.Handler { http.ListenAndServe(":8080", prettier(mux)) ``` -Note that `runtime.JSONPb{Indent: " "}` will do the trick for pretty-printing: it wraps -`jsonpb.Marshaler`: -```go -type Marshaler struct { - // ... - - // A string to indent each level by. The presence of this field will - // also cause a space to appear between the field separator and - // value, and for newlines to appear between fields and array - // elements. - Indent string - - // ... -} -``` - Now, either when passing the header `Accept: application/json+pretty` or appending `?pretty` to your HTTP endpoints, the response will be pretty-printed. @@ -79,44 +83,16 @@ also, this example code does not remove the query parameter `pretty` from furthe ## Customize unmarshaling per Content-Type -Having different unmarshaling options per Content-Type is possible by wrapping the decoder and passing that to `runtime.WithMarshalerOption`: - -```go -type m struct { - *runtime.JSONPb - unmarshaler *jsonpb.Unmarshaler -} - -type decoderWrapper struct { - *json.Decoder - *jsonpb.Unmarshaler -} - -func (n *m) NewDecoder(r io.Reader) runtime.Decoder { - d := json.NewDecoder(r) - return &decoderWrapper{Decoder: d, Unmarshaler: n.unmarshaler} -} - -func (d *decoderWrapper) Decode(v interface{}) error { - p, ok := v.(proto.Message) - if !ok { // if it's not decoding into a proto.Message, there's no notion of unknown fields - return d.Decoder.Decode(v) - } - return d.UnmarshalNext(d.Decoder, p) // uses m's jsonpb.Unmarshaler configuration -} -``` - -This scaffolding allows us to pass a custom unmarshal options. In this example, we configure the -unmarshaler to disallow unknown fields. For demonstration purposes, we'll also change some of the -default marshaler options: +Having different unmarshaling options per Content-Type is as easy as +configuring a custom marshaler: ```go mux := runtime.NewServeMux( - runtime.WithMarshalerOption("application/json+strict", - &m{ - JSONPb: &runtime.JSONPb{EmitDefaults: true}, - unmarshaler: &jsonpb.Unmarshaler{AllowUnknownFields: false}, // explicit "false", &jsonpb.Unmarshaler{} would have the same effect - }), + runtime.WithMarshalerOption("application/json+strict", &runtime.JSONPb{ + UnmarshalOptions: &protojson.UnmarshalOptions{ + DiscardUnknown: false, // explicit "false", &protojson.UnmarshalOptions{} would have the same effect + }, + }), ) ``` @@ -126,70 +102,66 @@ You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc 1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). 2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) - e.g. - ```go - func CustomMatcher(key string) (string, bool) { - switch key { - case "X-Custom-Header1": - return key, true - case "X-Custom-Header2": - return "custom-header2", true - default: - return key, false - } - } - ... - - mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) - ``` + e.g. + ```go + func CustomMatcher(key string) (string, bool) { + switch key { + case "X-Custom-Header1": + return key, true + case "X-Custom-Header2": + return "custom-header2", true + default: + return key, false + } + } + + mux := runtime.NewServeMux( + runtime.WithIncomingHeaderMatcher(CustomMatcher), + ) + ``` + To keep the [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write: ```go func CustomMatcher(key string) (string, bool) { - switch key { - case "X-User-Id": - return key, true - default: - return runtime.DefaultHeaderMatcher(key) - } + switch key { + case "X-User-Id": + return key, true + default: + return runtime.DefaultHeaderMatcher(key) + } } ``` It will work with both: -```bash -curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +```shell +$ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` and: -```bash -curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +```shell +$ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` To access this header on gRPC server side use: ```go -... userID := "" if md, ok := metadata.FromIncomingContext(ctx); ok { - if uID, ok := md["x-user-id"]; ok { - userID = strings.Join(uID, ",") - } + if uID, ok := md["x-user-id"]; ok { + userID = strings.Join(uID, ",") + } } -... ``` ## Mapping from gRPC server metadata to HTTP response headers ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) -for more info on sending / receiving gRPC metadata. - - e.g. - - ```go - ... - if appendCustomHeader { - grpc.SendHeader(ctx, metadata.New(map[string]string{ - "x-custom-header1": "value", - })) - } - ``` +for more info on sending / receiving gRPC metadata, e.g. +```go +if appendCustomHeader { + grpc.SendHeader(ctx, metadata.New(map[string]string{ + "x-custom-header1": "value", + })) +} +``` ## Mutate response messages or set response headers You might want to return a subset of response fields as HTTP response headers; @@ -197,24 +169,25 @@ You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. 1. Write a filter function. - ```go - func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error { - t, ok := resp.(*externalpb.Tokenizer) - if ok { - w.Header().Set("X-My-Tracking-Token", t.Token) - t.Token = "" + ```go + func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error { + t, ok := resp.(*externalpb.Tokenizer) + if ok { + w.Header().Set("X-My-Tracking-Token", t.Token) + t.Token = "" + } + return nil } - - return nil - } - ``` + ``` 2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) - e.g. - ```go - mux := runtime.NewServeMux(runtime.WithForwardResponseOption(myFilter)) - ``` + e.g. + ```go + mux := runtime.NewServeMux( + runtime.WithForwardResponseOption(myFilter), + ) + ``` ## OpenTracing Support @@ -222,35 +195,34 @@ If your project uses [OpenTracing](https://github.com/opentracing/opentracing-go ```go import ( - ... - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" + "github.com/opentracing/opentracing-go" + "github.com/opentracing/opentracing-go/ext" ) var grpcGatewayTag = opentracing.Tag{Key: string(ext.Component), Value: "grpc-gateway"} func tracingWrapper(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - parentSpanContext, err := opentracing.GlobalTracer().Extract( - opentracing.HTTPHeaders, - opentracing.HTTPHeadersCarrier(r.Header)) - if err == nil || err == opentracing.ErrSpanContextNotFound { - serverSpan := opentracing.GlobalTracer().StartSpan( - "ServeHTTP", - // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. - ext.RPCServerOption(parentSpanContext), - grpcGatewayTag, - ) - r = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan)) - defer serverSpan.Finish() - } - h.ServeHTTP(w, r) - }) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + parentSpanContext, err := opentracing.GlobalTracer().Extract( + opentracing.HTTPHeaders, + opentracing.HTTPHeadersCarrier(r.Header)) + if err == nil || err == opentracing.ErrSpanContextNotFound { + serverSpan := opentracing.GlobalTracer().StartSpan( + "ServeHTTP", + // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. + ext.RPCServerOption(parentSpanContext), + grpcGatewayTag, + ) + r = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan)) + defer serverSpan.Finish() + } + h.ServeHTTP(w, r) + }) } // Then just wrap the mux returned by runtime.NewServeMux() like this if err := http.ListenAndServe(":8080", tracingWrapper(mux)); err != nil { - log.Fatalf("failed to start gateway server on 8080: %v", err) + log.Fatalf("failed to start gateway server on 8080: %v", err) } ``` @@ -259,17 +231,16 @@ the services. E.g. ```go import ( - ... - "google.golang.org/grpc" - "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" + "google.golang.org/grpc" + "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" ) opts := []grpc.DialOption{ - grpc.WithUnaryInterceptor( - grpc_opentracing.UnaryClientInterceptor( - grpc_opentracing.WithTracer(opentracing.GlobalTracer()), - ), - ), + grpc.WithUnaryInterceptor( + grpc_opentracing.UnaryClientInterceptor( + grpc_opentracing.WithTracer(opentracing.GlobalTracer()), + ), + ), } if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opts); err != nil { log.Fatalf("could not register HTTP service: %v", err) @@ -302,7 +273,8 @@ streams, you must install a _different_ error handler: ```go mux := runtime.NewServeMux( - runtime.WithStreamErrorHandler(handleStreamError)) + runtime.WithStreamErrorHandler(handleStreamError), +) ``` The signature of the handler is much more rigid because we need @@ -345,34 +317,3 @@ If no custom handler is provided, the default stream error handler will include any gRPC error attributes (code, message, detail messages), if the error being reported includes them. If the error does not have these attributes, a gRPC code of `Unknown` (2) is reported. - -## Replace a response forwarder per method -You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. - -1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseMessage) or [`ForwardResponseStream`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseStream). -2. replace the default forwarder of the method with your one. - - e.g. add `forwarder_overwrite.go` into the go package of the generated code, - ```go - package generated - - import ( - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/golang/protobuf/proto" - "golang.org/x/net/context" - ) - - func forwardCheckoutResp(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { - if someCondition(resp) { - http.Error(w, "not enough credit", http. StatusPaymentRequired) - return - } - runtime.ForwardResponseMessage(ctx, mux, marshaler, w, req, resp, opts...) - } - - func init() { - forward_MyService_Checkout_0 = forwardCheckoutResp - } - ``` diff --git a/docs/_docs/examples.md b/docs/_docs/examples.md index 81003500600..cf22cc3d7ec 100644 --- a/docs/_docs/examples.md +++ b/docs/_docs/examples.md @@ -5,13 +5,29 @@ category: documentation # Examples Examples are available under `examples/internal` directory. -* `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition - * `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service - * `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service - * `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for ```unannotated_echo_service.proto``` -* `server/main.go`: service implementation -* `main.go`: entrypoint of the generated reverse proxy +* [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), + [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.proto), + [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto): + protobuf service definitions. +* [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), + [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), + [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): + generated Go service stubs and types. +* [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), + [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), + [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): + generated gRPC-gateway clients. + * [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): + gRPC API Configuration for `unannotated_echo_service.proto`. +* [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): + service implementation. +* [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/gateway/main.go): + entrypoint of the generated reverse proxy. -To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) +To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), +gRPC-gateway, and a gRPC server, see +[this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) +(and its accompanying +[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index bb62fabf446..348f77387b7 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -6,27 +6,42 @@ title: FAQ # FAQ ## How can I write the annotations which grpc-gateway requires? -Grpc-gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto). -So first check out the documentation if it is feasible in the spec. +The gRPC-Gateway follows the spec of +[`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), +so first check out the documentation if it is feasible in the spec. -See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in grpc-io mailing list. +See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) +in the grpc-io mailing list. ## I want to support a certain style of HTTP request but the code generated by grpc-gateway does not. How can I support this style? See the question above at first. -Grpc-gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So grpc-gateway itself does not always cover all the use cases you have by design. In other words, grpc-gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. +The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but +complicated annotations. So the gateway itself does not always cover all the use cases you +have by design. In other words, the gateway automates typical boring boilerplate mapping +between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. -On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. -e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/main.go +On the other hand, you can still add whatever you want as a middleware which wraps +[`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). +Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), +you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party +libraries in Go. +e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/gateway/main.go ## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? -AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. +AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates +usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. ## Why are the models in the swagger specification prefixed with the last part of the proto package name? -The reason to generate the prefixes is that we don't have a guaranteed unique namespace. If two packages produce different Foo messages then we will have trouble. +The reason to generate the prefixes is that we don't have a guaranteed unique namespace. +If two packages produce different Foo messages then we will have trouble. ## Why not strip the prefix? -When a message is added which happens to conflict with another message (e.g. by importing a message with the same name from a different package) it will break code that is very far away from the code that changed. This is in an effort to adhere to the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). +When a message is added which happens to conflict with another message +(e.g. by importing a message with the same name from a different package) +it will break code that is very far away from the code that changed. +This is in an effort to adhere to the +[principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). diff --git a/docs/_docs/grpcapiconfiguration.md b/docs/_docs/grpcapiconfiguration.md index aa1b8408c0a..0c0846aa777 100644 --- a/docs/_docs/grpcapiconfiguration.md +++ b/docs/_docs/grpcapiconfiguration.md @@ -16,8 +16,8 @@ The following is equivalent to the basic [usage example](usage.html) but without 1. Define your service in gRPC as usual - your_service.proto: - ```protobuf + your_service.proto: + ```protobuf syntax = "proto3"; package your.service.v1; option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; @@ -28,9 +28,10 @@ The following is equivalent to the basic [usage example](usage.html) but without service YourService { rpc Echo(StringMessage) returns (StringMessage) {} } - ``` + ``` -2. Instead of annotating the .proto file in this step leave it untouched and create a `your_service.yaml` with the following content: +2. Instead of annotating the .proto file in this step leave it untouched + and create a `your_service.yaml` with the following content: ```yaml type: google.api.Service config_version: 3 @@ -53,12 +54,13 @@ The following is equivalent to the basic [usage example](usage.html) but without 4. Implement your service in gRPC as usual -5. Generate the reverse-proxy. Here we have to pass the path to the `your_service.yaml` in addition to the .proto file: +5. Generate the reverse-proxy. Here we have to pass the path to + the `your_service.yaml` in addition to the .proto file: - ```sh - protoc -I. --grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=path/to/your_service.yaml:./gen/go \ - your/service/v1/your_service.proto - ``` + ```sh + protoc -I. --grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=path/to/your_service.yaml:./gen/go \ + your/service/v1/your_service.proto + ``` This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. diff --git a/docs/_docs/httpbody.md b/docs/_docs/httpbody.md index 5ca58c30c0a..afca9554dfd 100644 --- a/docs/_docs/httpbody.md +++ b/docs/_docs/httpbody.md @@ -2,44 +2,35 @@ category: documentation --- -# HttpBody message Feature +# HttpBody messages The [HTTP Body](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! ## Example Usage -1. Create a mux and configure it to use the `HTTPBodyMarshaler`. +1. Define your service in gRPC with an httpbody response message -```golang - mux := runtime.NewServeMux() - runtime.SetHTTPBodyMarshaler(mux) -``` -2. Define your service in gRPC with an httpbody response message - -```golang +```protobuf import "google/api/httpbody.proto"; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; service HttpBodyExampleService { - - rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) { + rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) { option (google.api.http) = { get: "/helloworld" }; } - rpc Download(google.protobuf.Empty) returns (stream google.api.HttpBody) { option (google.api.http) = { get: "/download" }; } - } ``` 3. Generate gRPC and reverse-proxy stubs and implement your service. ## Example service implementation -```golang +```go func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) { return &httpbody.HttpBody{ ContentType: "text/html", @@ -64,5 +55,4 @@ func (HttpBodyExampleService) Download(_ *empty.Empty, stream HttpBodyExampleSer return nil } - -``` \ No newline at end of file +``` diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md index d1543eb8350..f31ce9a865c 100644 --- a/docs/_docs/patch.md +++ b/docs/_docs/patch.md @@ -5,60 +5,86 @@ category: documentation # Patch Feature The HTTP PATCH method allows a resource to be partially updated. -The idea, If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. +If a binding is mapped to patch and the request message has exactly one +FieldMask message in it, additional code is rendered for the gateway +handler that will populate the FieldMask based on the request body. + There are two scenarios: -- The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. -- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. +- The FieldMask is hidden from the REST request as per the + [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) + (as in the first additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) + example). + In this case, the FieldMask is updated from the request body and + set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second + additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) + example). + For this case, the field mask is left untouched by the gateway. ## Example Usage 1. Create PATCH request. - The PATCH request needs to include the message and the update mask. -```golang -// UpdateV2Request request for update includes the message and the update mask -message UpdateV2Request { - ABitOfEverything abe = 1; - google.protobuf.FieldMask update_mask = 2; -} -``` + The PATCH request needs to include the message and the update mask. + ```protobuf + // UpdateV2Request request for update includes the message and the update mask + message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; + } + ``` 2. Define your service in gRPC -If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. + If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. -```golang -rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - put: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - additional_bindings { - patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" body: "abe" - } - }; -} -``` + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; + } + ``` -If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. + If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. -```golang -rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" - body: "*" - }; -} -``` + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; + } + ``` 3. Generate gRPC and reverse-proxy stubs and implement your service. ## Curl examples -In the example below we will partially update our ABitOfEverything resource by passing only the field we want to change. Since we are using the endpoint with field mask hidden we only need to pass the field we want to change ("string_value") and it will keep everything else in our resource the same. -``` -curl --data '{"string_value": "strprefix/foo"}' -X PATCH http://address:port/v2/example/a_bit_of_everything/1 +In the example below we will partially update our ABitOfEverything +resource by passing only the field we want to change. Since we are +using the endpoint with field mask hidden we only need to pass the +field we want to change ("string_value") and it will keep everything +else in our resource the same. +```shell +$ curl \ + --data '{"string_value": "strprefix/foo"}' \ + -X PATCH \ + http://address:port/v2/example/a_bit_of_everything/1 ``` -If we know what fields we want to update then we can use PATCH with field mask approach. For this we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask. -``` -curl --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' -X PATCH http://address:port/v2a/example/a_bit_of_everything/1 +If we know what fields we want to update then we can use PATCH with +field mask approach. For this we need to pass the resource and the +update_mask. Below only the "single_nested" will get updated because +that is what we specify in the field_mask. +```shell +$ curl \ + --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' \ + -X PATCH \ + http://address:port/v2a/example/a_bit_of_everything/1 ``` diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md index 79262ce2698..ce273c2aa96 100644 --- a/docs/_docs/season_of_docs.md +++ b/docs/_docs/season_of_docs.md @@ -1,5 +1,6 @@ --- category: documentation +name: 2020 Season of Docs --- # 2020 Season of Docs diff --git a/docs/_docs/usegotemplates.md b/docs/_docs/usegotemplates.md index f2ae6c9ce5c..68649b2f21a 100644 --- a/docs/_docs/usegotemplates.md +++ b/docs/_docs/usegotemplates.md @@ -1,17 +1,24 @@ -| Title | Category | -| -------------------------------------- | ------------- | -| Use go templates in protofile comments | Documentation | +--- +category: documentation +name: Use go templates in protofile comments +--- # Use go templates in protofile comments -Use [Go templates](https://golang.org/pkg/text/template/ "Package template") in your protofile comments to allow more advanced documentation such as: +Use [Go templates](https://golang.org/pkg/text/template/) +in your protofile comments to allow more advanced documentation such +as: * Documentation about fields in the proto objects. -* Import the content of external files (such as [Markdown](https://en.wikipedia.org/wiki/Markdown "Markdown Github")). +* Import the content of external files (such as + [Markdown](https://en.wikipedia.org/wiki/Markdown)). ## How to use it -By default this function is turned off, so if you want to use it you have to set the `use_go_templates` flag to true inside of the `swagger_out` flag. -```bash +By default this function is turned off, so if you want to use it you +have to set the `use_go_templates` flag to true inside of the +`swagger_out` flag. + +```shell --swagger_out=use_go_templates=true:. ``` @@ -19,15 +26,12 @@ By default this function is turned off, so if you want to use it you have to set Example of a bash script with the `use_go_templates` flag set to true: -```bash -protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway \ - --go_out=plugins=grpc:. \ - --grpc-gateway_out=logtostderr=true:. \ - --swagger_out=logtostderr=true,use_go_templates=true:. \ - *.proto +```shell +$ protoc -I. \ + --go_out=plugins=grpc:. \ + --grpc-gateway_out=logtostderr=true:. \ + --swagger_out=logtostderr=true,use_go_templates=true:. \ + path/to/my/proto/v1/myproto.proto ``` ### Example proto file @@ -80,14 +84,15 @@ The content of `tables.md`: ### SwaggerUI -This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/ "SwaggerUI site") +This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/) -![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png "SwaggerUI") +![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png) ### Postman -This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/ "Postman site") +This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/) -![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png "Postman") +![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png) -For a more detailed example of a protofile that has Go templates enabled, [click here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto "Example protofile with Go template"). +For a more detailed example of a protofile that has Go templates enabled, +[see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). diff --git a/docs/_docs/v2-migration.md b/docs/_docs/v2-migration.md new file mode 100644 index 00000000000..8e1b749f7d1 --- /dev/null +++ b/docs/_docs/v2-migration.md @@ -0,0 +1,115 @@ +--- +title: v2 migration guide +category: documentation +--- + +# gRPC-Gateway v2 migration guide + +This guide is supposed to help users of the gateway migrate from v1 to v2. +See https://github.com/grpc-ecosystem/grpc-gateway/issues/1223 for detailed +information on all changes that were made specifically to v2. + +The following behavioural defaults have been changed: + +## We now use the camelCase JSON names by default +See +[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) +and +[original pull request](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) +for more information. + +If you want to revert to the old behaviour, configure a custom marshaler with +`UseProtoNames: true`: +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + UseProtoNames: true, + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + }), +) +``` + +To change the swagger generator behaviour to match, set `json_names_for_fields=false` when generating: + +```shell +--swagger_out=json_names_for_fields=false:./gen/swagger path/to/my/proto/v1/myproto.proto +``` + +## We now emit default vaules for all fields + +See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/233) +for more information. + +If you want to revert to the old behaviour, configure a custom marshaler with +`EmitUnpopulated: false`: +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: false, + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + }), +) +``` + +## We now support google.api.HttpBody message types by default + +The `runtime.SetHTTPBodyMarshaler` function has disappeared, and is now +enabled by default. If you for some reason don't want `HttpBody` messages to be +respected, you can disable it by overwriting the default marshaler: + +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: true, + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + }), +) +``` + +## runtime.DisallowUnknownFields has been removed + +All marshalling settings are now inherited from the configured marshaler. If you wish +to disallow unknown fields, configure a custom marshaler: + +```go +mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{ + MarshalOptions: protojson.MarshalOptions{ + EmitUnpopulated: true, + }, + UnmarshalOptions: protojson.UnmarshalOptions{ + DiscardUnknown: false, + }, + }), +) +``` + +## WithLastMatchWins and allow_colon_final_segments=true is now default behaviour + +If you were previously specifying these, please remove them, as this is now +the default behaviour. See +[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/224) +for more information. + +There is no workaround for this, as we considered it a correct interpretation of the spec. +If this breaks your application, carefully consider the order in which you define your +services. + +## Error handling configuration has been overhauled + +`runtime.HTTPError`, `runtime.OtherErrorHandler`, `runtime.GlobalHTTPErrorHandler`, +`runtime.WithProtoErrorHandler` are all gone. Error handling is rewritten around the +use of gRPCs Status types. If you wish to configure how the gateway handles errors, +please use `runtime.WithErrorHandler` and `runtime.WithStreamErrorHandler`. From 5f308a64332c5ecb82131685ca7995334d5f9fe5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 24 May 2020 13:27:53 +0100 Subject: [PATCH 0433/1518] Tidy up docs --- docs/_docs/customizingyourgateway.md | 228 ++++++++++++--------------- docs/_docs/examples.md | 30 +++- docs/_docs/faq.md | 33 ++-- docs/_docs/grpcapiconfiguration.md | 138 ++++------------ docs/_docs/httpbody.md | 17 +- docs/_docs/patch.md | 102 +++++++----- docs/_docs/season_of_docs.md | 1 + docs/_docs/usegotemplates.md | 47 +++--- 8 files changed, 270 insertions(+), 326 deletions(-) diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 581aa3daae9..69c71f0b605 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -13,27 +13,29 @@ You might want to serialize request/response messages in MessagePack instead of 1. Write a custom implementation of [`Marshaler`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#Marshaler) 2. Register your marshaler with [`WithMarshalerOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithMarshalerOption) - e.g. - ```go - var m your.MsgPackMarshaler - mux := runtime.NewServeMux(runtime.WithMarshalerOption("application/x-msgpack", m)) - ``` + e.g. + ```go + var m your.MsgPackMarshaler + mux := runtime.NewServeMux( + runtime.WithMarshalerOption("application/x-msgpack", m), + ) + ``` You can see [the default implementation for JSON](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/marshal_jsonpb.go) for reference. ### Using camelCase for JSON The protocol buffer compiler generates camelCase JSON tags that can be used with jsonpb package. By default jsonpb Marshaller uses `OrigName: true` which uses the exact case used in the proto files. To use camelCase for the JSON representation, - ```go - mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName:false})) - ``` +```go +mux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName:false})) +``` ### Pretty-print JSON responses when queried with ?pretty You can have Elasticsearch-style `?pretty` support in your gateway's endpoints as follows: 1. Wrap the ServeMux using a stdlib [`http.HandlerFunc`](https://golang.org/pkg/net/http/#HandlerFunc) - that translates the provided query parameter into a custom `Accept` header, and + that translates the provided query parameter into a custom `Accept` header, and 2. Register a pretty-printing marshaler for that MIME code. For example: @@ -112,11 +114,10 @@ default marshaler options: ```go mux := runtime.NewServeMux( - runtime.WithMarshalerOption("application/json+strict", - &m{ - JSONPb: &runtime.JSONPb{EmitDefaults: true}, - unmarshaler: &jsonpb.Unmarshaler{AllowUnknownFields: false}, // explicit "false", &jsonpb.Unmarshaler{} would have the same effect - }), + runtime.WithMarshalerOption("application/json+strict", &m{ + JSONPb: &runtime.JSONPb{EmitDefaults: true}, + unmarshaler: &jsonpb.Unmarshaler{AllowUnknownFields: false}, // explicit "false", &jsonpb.Unmarshaler{} would have the same effect + }), ) ``` @@ -126,70 +127,66 @@ You might not like [the default mapping rule](https://pkg.go.dev/github.com/grpc 1. Write a [`HeaderMatcherFunc`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#HeaderMatcherFunc). 2. Register the function with [`WithIncomingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithIncomingHeaderMatcher) - e.g. - ```go - func CustomMatcher(key string) (string, bool) { - switch key { - case "X-Custom-Header1": - return key, true - case "X-Custom-Header2": - return "custom-header2", true - default: - return key, false - } - } - ... - - mux := runtime.NewServeMux(runtime.WithIncomingHeaderMatcher(CustomMatcher)) - ``` + e.g. + ```go + func CustomMatcher(key string) (string, bool) { + switch key { + case "X-Custom-Header1": + return key, true + case "X-Custom-Header2": + return "custom-header2", true + default: + return key, false + } + } + + mux := runtime.NewServeMux( + runtime.WithIncomingHeaderMatcher(CustomMatcher), + ) + ``` + To keep the [the default mapping rule](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#DefaultHeaderMatcher) alongside with your own rules write: ```go func CustomMatcher(key string) (string, bool) { - switch key { - case "X-User-Id": - return key, true - default: - return runtime.DefaultHeaderMatcher(key) - } + switch key { + case "X-User-Id": + return key, true + default: + return runtime.DefaultHeaderMatcher(key) + } } ``` It will work with both: -```bash -curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +```shell +$ curl --header "x-user-id: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` and: -```bash -curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... +```shell +$ curl --header "X-USER-ID: 100d9f38-2777-4ee2-ac3b-b3a108f81a30" ... ``` To access this header on gRPC server side use: ```go -... userID := "" if md, ok := metadata.FromIncomingContext(ctx); ok { - if uID, ok := md["x-user-id"]; ok { - userID = strings.Join(uID, ",") - } + if uID, ok := md["x-user-id"]; ok { + userID = strings.Join(uID, ",") + } } -... ``` ## Mapping from gRPC server metadata to HTTP response headers ditto. Use [`WithOutgoingHeaderMatcher`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithOutgoingHeaderMatcher). See [gRPC metadata docs](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md) -for more info on sending / receiving gRPC metadata. - - e.g. - - ```go - ... - if appendCustomHeader { - grpc.SendHeader(ctx, metadata.New(map[string]string{ - "x-custom-header1": "value", - })) - } - ``` +for more info on sending / receiving gRPC metadata, e.g. +```go +if appendCustomHeader { + grpc.SendHeader(ctx, metadata.New(map[string]string{ + "x-custom-header1": "value", + })) +} +``` ## Mutate response messages or set response headers You might want to return a subset of response fields as HTTP response headers; @@ -197,24 +194,25 @@ You might want to simply set an application-specific token in a header. Or you might want to mutate the response messages to be returned. 1. Write a filter function. - ```go - func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error { - t, ok := resp.(*externalpb.Tokenizer) - if ok { - w.Header().Set("X-My-Tracking-Token", t.Token) - t.Token = "" + ```go + func myFilter(ctx context.Context, w http.ResponseWriter, resp proto.Message) error { + t, ok := resp.(*externalpb.Tokenizer) + if ok { + w.Header().Set("X-My-Tracking-Token", t.Token) + t.Token = "" + } + return nil } - - return nil - } - ``` + ``` 2. Register the filter with [`WithForwardResponseOption`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#WithForwardResponseOption) - e.g. - ```go - mux := runtime.NewServeMux(runtime.WithForwardResponseOption(myFilter)) - ``` + e.g. + ```go + mux := runtime.NewServeMux( + runtime.WithForwardResponseOption(myFilter), + ) + ``` ## OpenTracing Support @@ -222,35 +220,34 @@ If your project uses [OpenTracing](https://github.com/opentracing/opentracing-go ```go import ( - ... - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" + "github.com/opentracing/opentracing-go" + "github.com/opentracing/opentracing-go/ext" ) var grpcGatewayTag = opentracing.Tag{Key: string(ext.Component), Value: "grpc-gateway"} func tracingWrapper(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - parentSpanContext, err := opentracing.GlobalTracer().Extract( - opentracing.HTTPHeaders, - opentracing.HTTPHeadersCarrier(r.Header)) - if err == nil || err == opentracing.ErrSpanContextNotFound { - serverSpan := opentracing.GlobalTracer().StartSpan( - "ServeHTTP", - // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. - ext.RPCServerOption(parentSpanContext), - grpcGatewayTag, - ) - r = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan)) - defer serverSpan.Finish() - } - h.ServeHTTP(w, r) - }) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + parentSpanContext, err := opentracing.GlobalTracer().Extract( + opentracing.HTTPHeaders, + opentracing.HTTPHeadersCarrier(r.Header)) + if err == nil || err == opentracing.ErrSpanContextNotFound { + serverSpan := opentracing.GlobalTracer().StartSpan( + "ServeHTTP", + // this is magical, it attaches the new span to the parent parentSpanContext, and creates an unparented one if empty. + ext.RPCServerOption(parentSpanContext), + grpcGatewayTag, + ) + r = r.WithContext(opentracing.ContextWithSpan(r.Context(), serverSpan)) + defer serverSpan.Finish() + } + h.ServeHTTP(w, r) + }) } // Then just wrap the mux returned by runtime.NewServeMux() like this if err := http.ListenAndServe(":8080", tracingWrapper(mux)); err != nil { - log.Fatalf("failed to start gateway server on 8080: %v", err) + log.Fatalf("failed to start gateway server on 8080: %v", err) } ``` @@ -259,17 +256,16 @@ the services. E.g. ```go import ( - ... - "google.golang.org/grpc" - "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" + "google.golang.org/grpc" + "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" ) opts := []grpc.DialOption{ - grpc.WithUnaryInterceptor( - grpc_opentracing.UnaryClientInterceptor( - grpc_opentracing.WithTracer(opentracing.GlobalTracer()), - ), - ), + grpc.WithUnaryInterceptor( + grpc_opentracing.UnaryClientInterceptor( + grpc_opentracing.WithTracer(opentracing.GlobalTracer()), + ), + ), } if err := pb.RegisterMyServiceHandlerFromEndpoint(ctx, mux, serviceEndpoint, opts); err != nil { log.Fatalf("could not register HTTP service: %v", err) @@ -312,7 +308,8 @@ streams, you must install a _different_ error handler: ```go mux := runtime.NewServeMux( - runtime.WithStreamErrorHandler(handleStreamError)) + runtime.WithStreamErrorHandler(handleStreamError), +) ``` The signature of the handler is much more rigid because we need @@ -362,34 +359,3 @@ these attributes, a gRPC code of `Unknown` (2) is reported. The default handler will also include an HTTP code and status, which is derived from the gRPC code (or set to `"500 Internal Server Error"` when the source error has no gRPC attributes). - -## Replace a response forwarder per method -You might want to keep the behavior of the current marshaler but change only a message forwarding of a certain API method. - -1. write a custom forwarder which is compatible to [`ForwardResponseMessage`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseMessage) or [`ForwardResponseStream`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ForwardResponseStream). -2. replace the default forwarder of the method with your one. - - e.g. add `forwarder_overwrite.go` into the go package of the generated code, - ```go - package generated - - import ( - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "github.com/golang/protobuf/proto" - "golang.org/x/net/context" - ) - - func forwardCheckoutResp(ctx context.Context, mux *runtime.ServeMux, marshaler runtime.Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { - if someCondition(resp) { - http.Error(w, "not enough credit", http. StatusPaymentRequired) - return - } - runtime.ForwardResponseMessage(ctx, mux, marshaler, w, req, resp, opts...) - } - - func init() { - forward_MyService_Checkout_0 = forwardCheckoutResp - } - ``` diff --git a/docs/_docs/examples.md b/docs/_docs/examples.md index 81003500600..cf22cc3d7ec 100644 --- a/docs/_docs/examples.md +++ b/docs/_docs/examples.md @@ -5,13 +5,29 @@ category: documentation # Examples Examples are available under `examples/internal` directory. -* `proto/examplepb/echo_service.proto`, `proto/examplepb/a_bit_of_everything.proto`, `proto/examplepb/unannotated_echo_service.proto`: service definition - * `proto/examplepb/echo_service.pb.go`, `proto/examplepb/a_bit_of_everything.pb.go`, `proto/examplepb/unannotated_echo_service.pb.go`: [generated] stub of the service - * `proto/examplepb/echo_service.pb.gw.go`, `proto/examplepb/a_bit_of_everything.pb.gw.go`, `proto/examplepb/uannotated_echo_service.pb.gw.go`: [generated] reverse proxy for the service - * `proto/examplepb/unannotated_echo_service.yaml`: gRPC API Configuration for ```unannotated_echo_service.proto``` -* `server/main.go`: service implementation -* `main.go`: entrypoint of the generated reverse proxy +* [`proto/examplepb/echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.proto), + [`proto/examplepb/a_bit_of_everything.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.proto), + [`proto/examplepb/unannotated_echo_service.proto`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.proto): + protobuf service definitions. +* [`proto/examplepb/echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.go), + [`proto/examplepb/a_bit_of_everything.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.go), + [`proto/examplepb/unannotated_echo_service.pb.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/unannotated_echo_service.pb.go): + generated Go service stubs and types. +* [`proto/examplepb/echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/echo_service.pb.gw.go), + [`proto/examplepb/a_bit_of_everything.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/a_bit_of_everything.pb.gw.go), + [`proto/examplepb/uannotated_echo_service.pb.gw.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.pb.gw.go): + generated gRPC-gateway clients. + * [`proto/examplepb/unannotated_echo_service.yaml`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/proto/examplepb/uannotated_echo_service.yaml): + gRPC API Configuration for `unannotated_echo_service.proto`. +* [`server/main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/server/main.go): + service implementation. +* [`main.go`](https://github.com/grpc-ecosystem/grpc-gateway/tree/master/examples/internal/gateway/main.go): + entrypoint of the generated reverse proxy. -To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), gRPC-gateway, and a gRPC server, see [this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) (and its accompanying [blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) +To use the same port for custom HTTP handlers (e.g. serving `swagger.json`), +gRPC-gateway, and a gRPC server, see +[this code example by CoreOS](https://github.com/philips/grpc-gateway-example/blob/master/cmd/serve.go) +(and its accompanying +[blog post](https://coreos.com/blog/grpc-protobufs-swagger.html)) diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index bb62fabf446..348f77387b7 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -6,27 +6,42 @@ title: FAQ # FAQ ## How can I write the annotations which grpc-gateway requires? -Grpc-gateway follows the spec of [`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto). -So first check out the documentation if it is feasible in the spec. +The gRPC-Gateway follows the spec of +[`google.api.HttpRule`](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto), +so first check out the documentation if it is feasible in the spec. -See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) in grpc-io mailing list. +See also [a past discussion](https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/VNCDHjeE6pUJ) +in the grpc-io mailing list. ## I want to support a certain style of HTTP request but the code generated by grpc-gateway does not. How can I support this style? See the question above at first. -Grpc-gateway is intended to cover 80% of use cases without forcing you to write comprehensive but complicated annotations. So grpc-gateway itself does not always cover all the use cases you have by design. In other words, grpc-gateway automates typical boring boilerplate mapping between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. +The gRPC-Gateway is intended to cover 80% of use cases without forcing you to write comprehensive but +complicated annotations. So the gateway itself does not always cover all the use cases you +have by design. In other words, the gateway automates typical boring boilerplate mapping +between gRPC and HTTP/1 communication, but it does not do arbitrarily complex custom mappings for you. -On the other hand, you can still add whatever you want as a middleware which wraps [`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party libraries in Go. -e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/main.go +On the other hand, you can still add whatever you want as a middleware which wraps +[`runtime.ServeMux`](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/runtime?tab=doc#ServeMux). +Since `runtime.ServeMux` is just a standard [`http.Handler`](http://golang.org/pkg/http#Handler), +you can easily write a custom wrapper of `runtime.ServeMux`, leveraged with existing third-party +libraries in Go. +e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/gateway/main.go ## My gRPC server is written in (Scala|C++|Ruby|Haskell|....). Is there a (Scala|C++|Ruby|Haskell|....) version of grpc-gateway? -AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. +AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates +usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. ## Why are the models in the swagger specification prefixed with the last part of the proto package name? -The reason to generate the prefixes is that we don't have a guaranteed unique namespace. If two packages produce different Foo messages then we will have trouble. +The reason to generate the prefixes is that we don't have a guaranteed unique namespace. +If two packages produce different Foo messages then we will have trouble. ## Why not strip the prefix? -When a message is added which happens to conflict with another message (e.g. by importing a message with the same name from a different package) it will break code that is very far away from the code that changed. This is in an effort to adhere to the [principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). +When a message is added which happens to conflict with another message +(e.g. by importing a message with the same name from a different package) +it will break code that is very far away from the code that changed. +This is in an effort to adhere to the +[principle of least astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). diff --git a/docs/_docs/grpcapiconfiguration.md b/docs/_docs/grpcapiconfiguration.md index 6547e7d4462..0c0846aa777 100644 --- a/docs/_docs/grpcapiconfiguration.md +++ b/docs/_docs/grpcapiconfiguration.md @@ -16,27 +16,29 @@ The following is equivalent to the basic [usage example](usage.html) but without 1. Define your service in gRPC as usual - your_service.proto: - ```protobuf - syntax = "proto3"; - package example; - message StringMessage { - string value = 1; - } - - service YourService { - rpc Echo(StringMessage) returns (StringMessage) {} - } - ``` + your_service.proto: + ```protobuf + syntax = "proto3"; + package your.service.v1; + option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1"; + message StringMessage { + string value = 1; + } + + service YourService { + rpc Echo(StringMessage) returns (StringMessage) {} + } + ``` -2. Instead of annotating the .proto file in this step leave it untouched and create a `your_service.yaml` with the following content: +2. Instead of annotating the .proto file in this step leave it untouched + and create a `your_service.yaml` with the following content: ```yaml type: google.api.Service config_version: 3 http: rules: - - selector: example.YourService.Echo + - selector: your.service.v1.YourService.Echo post: /v1/example/echo body: "*" ``` @@ -44,106 +46,22 @@ The following is equivalent to the basic [usage example](usage.html) but without 3. Generate gRPC stub as before - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --go_out=plugins=grpc:. \ - path/to/your_service.proto - ``` + ```sh + protoc -I. --go_out=plugins=grpc,paths=source_relative:./gen/go/ your/service/v1/your_service.proto + ``` - It will generate a stub file `path/to/your_service.pb.go`. -4. Implement your service in gRPC as usual - 1. (Optional) Generate gRPC stub in the language you want. - - e.g. - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --ruby_out=. \ - path/to/your/service_proto - - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --plugin=protoc-gen-grpc=grpc_ruby_plugin \ - --grpc-ruby_out=. \ - path/to/your/service.proto - ``` - 2. Add the googleapis-common-protos gem (or your language equivalent) as a dependency to your project. - 3. Implement your service + It will generate a stub file with path `./gen/go/your/service/v1/your_service.pb.go`. -5. Generate reverse-proxy. Here we have to pass the path to the `your_service.yaml` in addition to the .proto file: - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --grpc-gateway_out=logtostderr=true,grpc_api_configuration=path/to/your_service.yaml:. \ - path/to/your_service.proto - ``` - - This will generate a reverse proxy `path/to/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. - - Note: After generating the code for each of the stubs, in order to build the code, you will want to run ```go get .``` from the directory containing the stubs. +4. Implement your service in gRPC as usual -6. Write an entrypoint - - Now you need to write an entrypoint of the proxy server. This step is the same whether the file is annotated or not. - ```go - package main +5. Generate the reverse-proxy. Here we have to pass the path to + the `your_service.yaml` in addition to the .proto file: - import ( - "flag" - "net/http" - - "github.com/golang/glog" - "golang.org/x/net/context" - "github.com/grpc-ecosystem/grpc-gateway/runtime" - "google.golang.org/grpc" - - gw "path/to/your_service_package" - ) - - var ( - echoEndpoint = flag.String("echo_endpoint", "localhost:9090", "endpoint of YourService") - ) - - func run() error { - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - mux := runtime.NewServeMux() - opts := []grpc.DialOption{grpc.WithInsecure()} - err := gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts) - if err != nil { - return err - } - - return http.ListenAndServe(":8080", mux) - } - - func main() { - flag.Parse() - defer glog.Flush() + ```sh + protoc -I. --grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=path/to/your_service.yaml:./gen/go \ + your/service/v1/your_service.proto + ``` - if err := run(); err != nil { - glog.Fatal(err) - } - } - ``` - -7. (Optional) Generate swagger definitions - -Swagger generation in this step is equivalent to gateway generation. Again pass the path to the yaml file in addition to the proto: - - ```sh - protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - --swagger_out=logtostderr=true,grpc_api_configuration=path/to/your_service.yaml:. \ - path/to/your_service.proto - ``` + This will generate a reverse proxy `gen/go/your/service/v1/your_service.pb.gw.go` that is identical to the one produced for the annotated proto. All other steps work as before. If you want you can remove the googleapis include path in step 3 and 4 as the unannotated proto no longer requires them. diff --git a/docs/_docs/httpbody.md b/docs/_docs/httpbody.md index 5a0f9219ada..50dc523c9cb 100644 --- a/docs/_docs/httpbody.md +++ b/docs/_docs/httpbody.md @@ -2,43 +2,40 @@ category: documentation --- -# HttpBody message Feature +# HttpBody messages The [HTTP Body](https://github.com/googleapis/googleapis/blob/master/google/api/httpbody.proto) messages allows a response message to be specified with custom data content and a custom content type header. The values included in the HTTPBody response will be used verbatim in the returned message from the gateway. Make sure you format your response carefully! ## Example Usage 1. Create a mux and configure it to use the `HTTPBodyMarshaler`. -```golang +```protobuf mux := runtime.NewServeMux() runtime.SetHTTPBodyMarshaler(mux) ``` 2. Define your service in gRPC with an httpbody response message -```golang +```protobuf import "google/api/httpbody.proto"; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; service HttpBodyExampleService { - - rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) { + rpc HelloWorld(google.protobuf.Empty) returns (google.api.HttpBody) { option (google.api.http) = { get: "/helloworld" }; - } - + } } ``` 3. Generate gRPC and reverse-proxy stubs and implement your service. ## Example service implementation -```golang +```go func (*HttpBodyExampleService) Helloworld(ctx context.Context, in *empty.Empty) (*httpbody.HttpBody, error) { return &httpbody.HttpBody{ ContentType: "text/html", Data: []byte("Hello World"), }, nil } - -``` \ No newline at end of file +``` diff --git a/docs/_docs/patch.md b/docs/_docs/patch.md index d1543eb8350..f31ce9a865c 100644 --- a/docs/_docs/patch.md +++ b/docs/_docs/patch.md @@ -5,60 +5,86 @@ category: documentation # Patch Feature The HTTP PATCH method allows a resource to be partially updated. -The idea, If a binding is mapped to patch and the request message has exactly one FieldMask message in it, additional code is rendered for the gateway handler that will populate the FieldMask based on the request body. +If a binding is mapped to patch and the request message has exactly one +FieldMask message in it, additional code is rendered for the gateway +handler that will populate the FieldMask based on the request body. + There are two scenarios: -- The FieldMask is hidden from the REST request as per the [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) (as in the first additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) example). In this case, the FieldMask is updated from the request body and set in the gRPC request message. -- The FieldMask is exposed to the REST request (as in the second additional binding in the [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) example). For this case, the field mask is left untouched by the gateway. +- The FieldMask is hidden from the REST request as per the + [Google API design guide](https://cloud.google.com/apis/design/standard_methods#update) + (as in the first additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L366) + example). + In this case, the FieldMask is updated from the request body and + set in the gRPC request message. +- The FieldMask is exposed to the REST request (as in the second + additional binding in the + [UpdateV2](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/a_bit_of_everything.proto#L370) + example). + For this case, the field mask is left untouched by the gateway. ## Example Usage 1. Create PATCH request. - The PATCH request needs to include the message and the update mask. -```golang -// UpdateV2Request request for update includes the message and the update mask -message UpdateV2Request { - ABitOfEverything abe = 1; - google.protobuf.FieldMask update_mask = 2; -} -``` + The PATCH request needs to include the message and the update mask. + ```protobuf + // UpdateV2Request request for update includes the message and the update mask + message UpdateV2Request { + ABitOfEverything abe = 1; + google.protobuf.FieldMask update_mask = 2; + } + ``` 2. Define your service in gRPC -If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. + If you want to use PATCH with fieldmask hidden from REST request only include the request message in the body. -```golang -rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - put: "/v2/example/a_bit_of_everything/{abe.uuid}" - body: "abe" - additional_bindings { - patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + put: "/v2/example/a_bit_of_everything/{abe.uuid}" body: "abe" - } - }; -} -``` + additional_bindings { + patch: "/v2/example/a_bit_of_everything/{abe.uuid}" + body: "abe" + } + }; + } + ``` -If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. + If you want to use PATCH with fieldmask exposed to the REST request then include the entire request message. -```golang -rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { - option (google.api.http) = { - patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" - body: "*" - }; -} -``` + ```protobuf + rpc UpdateV2(UpdateV2Request) returns (google.protobuf.Empty) { + option (google.api.http) = { + patch: "/v2a/example/a_bit_of_everything/{abe.uuid}" + body: "*" + }; + } + ``` 3. Generate gRPC and reverse-proxy stubs and implement your service. ## Curl examples -In the example below we will partially update our ABitOfEverything resource by passing only the field we want to change. Since we are using the endpoint with field mask hidden we only need to pass the field we want to change ("string_value") and it will keep everything else in our resource the same. -``` -curl --data '{"string_value": "strprefix/foo"}' -X PATCH http://address:port/v2/example/a_bit_of_everything/1 +In the example below we will partially update our ABitOfEverything +resource by passing only the field we want to change. Since we are +using the endpoint with field mask hidden we only need to pass the +field we want to change ("string_value") and it will keep everything +else in our resource the same. +```shell +$ curl \ + --data '{"string_value": "strprefix/foo"}' \ + -X PATCH \ + http://address:port/v2/example/a_bit_of_everything/1 ``` -If we know what fields we want to update then we can use PATCH with field mask approach. For this we need to pass the resource and the update_mask. Below only the "single_nested" will get updated because that is what we specify in the field_mask. -``` -curl --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' -X PATCH http://address:port/v2a/example/a_bit_of_everything/1 +If we know what fields we want to update then we can use PATCH with +field mask approach. For this we need to pass the resource and the +update_mask. Below only the "single_nested" will get updated because +that is what we specify in the field_mask. +```shell +$ curl \ + --data '{"abe":{"single_nested":{"amount":457},"string_value":"some value that won't get updated because not in the field mask"},"update_mask":{"paths":["single_nested"]}}' \ + -X PATCH \ + http://address:port/v2a/example/a_bit_of_everything/1 ``` diff --git a/docs/_docs/season_of_docs.md b/docs/_docs/season_of_docs.md index 79262ce2698..ce273c2aa96 100644 --- a/docs/_docs/season_of_docs.md +++ b/docs/_docs/season_of_docs.md @@ -1,5 +1,6 @@ --- category: documentation +name: 2020 Season of Docs --- # 2020 Season of Docs diff --git a/docs/_docs/usegotemplates.md b/docs/_docs/usegotemplates.md index f2ae6c9ce5c..68649b2f21a 100644 --- a/docs/_docs/usegotemplates.md +++ b/docs/_docs/usegotemplates.md @@ -1,17 +1,24 @@ -| Title | Category | -| -------------------------------------- | ------------- | -| Use go templates in protofile comments | Documentation | +--- +category: documentation +name: Use go templates in protofile comments +--- # Use go templates in protofile comments -Use [Go templates](https://golang.org/pkg/text/template/ "Package template") in your protofile comments to allow more advanced documentation such as: +Use [Go templates](https://golang.org/pkg/text/template/) +in your protofile comments to allow more advanced documentation such +as: * Documentation about fields in the proto objects. -* Import the content of external files (such as [Markdown](https://en.wikipedia.org/wiki/Markdown "Markdown Github")). +* Import the content of external files (such as + [Markdown](https://en.wikipedia.org/wiki/Markdown)). ## How to use it -By default this function is turned off, so if you want to use it you have to set the `use_go_templates` flag to true inside of the `swagger_out` flag. -```bash +By default this function is turned off, so if you want to use it you +have to set the `use_go_templates` flag to true inside of the +`swagger_out` flag. + +```shell --swagger_out=use_go_templates=true:. ``` @@ -19,15 +26,12 @@ By default this function is turned off, so if you want to use it you have to set Example of a bash script with the `use_go_templates` flag set to true: -```bash -protoc -I/usr/local/include -I. \ - -I$GOPATH/src \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ - -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway \ - --go_out=plugins=grpc:. \ - --grpc-gateway_out=logtostderr=true:. \ - --swagger_out=logtostderr=true,use_go_templates=true:. \ - *.proto +```shell +$ protoc -I. \ + --go_out=plugins=grpc:. \ + --grpc-gateway_out=logtostderr=true:. \ + --swagger_out=logtostderr=true,use_go_templates=true:. \ + path/to/my/proto/v1/myproto.proto ``` ### Example proto file @@ -80,14 +84,15 @@ The content of `tables.md`: ### SwaggerUI -This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/ "SwaggerUI site") +This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/) -![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png "SwaggerUI") +![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png) ### Postman -This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/ "Postman site") +This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/) -![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png "Postman") +![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png) -For a more detailed example of a protofile that has Go templates enabled, [click here](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto "Example protofile with Go template"). +For a more detailed example of a protofile that has Go templates enabled, +[see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). From cca518b53bedcb23c7f234db20d35772fcf209ba Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 24 May 2020 22:36:29 +0100 Subject: [PATCH 0434/1518] examples/internal: remove old generated files --- .../responsebody/docs/RuntimeStreamError.md | 14 -------------- .../responsebody/model_runtime_stream_error.go | 18 ------------------ 2 files changed, 32 deletions(-) delete mode 100644 examples/internal/clients/responsebody/docs/RuntimeStreamError.md delete mode 100644 examples/internal/clients/responsebody/model_runtime_stream_error.go diff --git a/examples/internal/clients/responsebody/docs/RuntimeStreamError.md b/examples/internal/clients/responsebody/docs/RuntimeStreamError.md deleted file mode 100644 index efea01ae5cc..00000000000 --- a/examples/internal/clients/responsebody/docs/RuntimeStreamError.md +++ /dev/null @@ -1,14 +0,0 @@ -# RuntimeStreamError - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**GrpcCode** | **int32** | | [optional] [default to null] -**HttpCode** | **int32** | | [optional] [default to null] -**Message** | **string** | | [optional] [default to null] -**HttpStatus** | **string** | | [optional] [default to null] -**Details** | [**[]ProtobufAny**](protobufAny.md) | | [optional] [default to null] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/examples/internal/clients/responsebody/model_runtime_stream_error.go b/examples/internal/clients/responsebody/model_runtime_stream_error.go deleted file mode 100644 index d6f45d3c3be..00000000000 --- a/examples/internal/clients/responsebody/model_runtime_stream_error.go +++ /dev/null @@ -1,18 +0,0 @@ -/* - * examples/internal/proto/examplepb/response_body_service.proto - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * API version: version not set - * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) - */ - -package responsebody - -type RuntimeStreamError struct { - GrpcCode int32 `json:"grpc_code,omitempty"` - HttpCode int32 `json:"http_code,omitempty"` - Message string `json:"message,omitempty"` - HttpStatus string `json:"http_status,omitempty"` - Details []ProtobufAny `json:"details,omitempty"` -} From 57089bcd823029c032dfab1a53735194abfd9773 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 24 May 2020 22:44:41 +0100 Subject: [PATCH 0435/1518] protoc-gen-swagger: update bazel rule json_names_for_fields defaults to true now --- docs/_docs/v2-migration.md | 2 ++ protoc-gen-swagger/defs.bzl | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/_docs/v2-migration.md b/docs/_docs/v2-migration.md index 8e1b749f7d1..fde14f82124 100644 --- a/docs/_docs/v2-migration.md +++ b/docs/_docs/v2-migration.md @@ -39,6 +39,8 @@ To change the swagger generator behaviour to match, set `json_names_for_fields=f --swagger_out=json_names_for_fields=false:./gen/swagger path/to/my/proto/v1/myproto.proto ``` +If using the Bazel rule, set `json_names_for_fields=False`. + ## We now emit default vaules for all fields See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/233) diff --git a/protoc-gen-swagger/defs.bzl b/protoc-gen-swagger/defs.bzl index 2cb1f22fdda..be6c7d3b4f1 100644 --- a/protoc-gen-swagger/defs.bzl +++ b/protoc-gen-swagger/defs.bzl @@ -66,8 +66,8 @@ def _run_proto_gen_swagger( extra_inputs.append(grpc_api_configuration) args.add("--swagger_opt", "grpc_api_configuration=%s" % grpc_api_configuration.path) - if json_names_for_fields: - args.add("--swagger_opt", "json_names_for_fields=true") + if not json_names_for_fields: + args.add("--swagger_opt", "json_names_for_fields=false") proto_file_infos = _direct_source_infos(proto_info) @@ -173,7 +173,7 @@ protoc_gen_swagger = rule( mandatory = False, ), "json_names_for_fields": attr.bool( - default = False, + default = True, mandatory = False, ), "_protoc": attr.label( From 2ee1c8c31112562852b88ece31fa9b0b8d074ca5 Mon Sep 17 00:00:00 2001 From: Johan Brandhorst Date: Sun, 24 May 2020 22:36:03 +0100 Subject: [PATCH 0436/1518] all: rename protoc-gen-swagger to protoc-gen-openapiv2 Fixes #675 --- .github/ISSUE_TEMPLATE.md | 4 +- .goreleaser.yml | 6 +- BUILD | 2 +- Makefile | 44 +- README.md | 22 +- bin/.gitignore | 2 +- docs/_docs/aws.md | 2 +- docs/_docs/customizingyourgateway.md | 2 +- docs/_docs/cygwin.md | 4 +- docs/_docs/faq.md | 2 +- docs/_docs/features.md | 2 +- docs/_docs/usegotemplates.md | 16 +- docs/_docs/v2-migration.md | 29 +- examples/internal/README.md | 2 +- .../a_bit_of_everything_service.spec.js | 2 +- .../internal/browser/echo_service.spec.js | 2 +- examples/internal/browser/gulpfile.js | 2 +- examples/internal/browser/index.html | 2 +- .../internal/clients/responsebody/BUILD.bazel | 1 - .../cmd/example-gateway-server/main.go | 4 +- examples/internal/gateway/handlers.go | 6 +- examples/internal/gateway/main.go | 8 +- examples/internal/integration/main_test.go | 4 +- examples/internal/proto/examplepb/BUILD.bazel | 14 +- .../proto/examplepb/a_bit_of_everything.pb.go | 1366 ++++++++--------- .../proto/examplepb/a_bit_of_everything.proto | 38 +- internal/descriptor/registry.go | 34 +- .../BUILD.bazel | 6 +- .../defs.bzl | 58 +- .../internal/genopenapi}/BUILD.bazel | 8 +- .../internal/genopenapi/doc.go | 2 + .../internal/genopenapi}/generator.go | 58 +- .../internal/genopenapi}/helpers.go | 2 +- .../internal/genopenapi}/helpers_go111_old.go | 2 +- .../internal/genopenapi}/template.go | 352 ++--- .../internal/genopenapi}/template_test.go | 262 ++-- .../internal/genopenapi}/types.go | 100 +- .../main.go | 16 +- .../main_test.go | 20 +- .../options/BUILD.bazel | 4 +- .../options/annotations.pb.go | 241 +++ .../options/annotations.proto | 6 +- .../options/openapiv2.pb.go | 1107 ++++++------- .../options/openapiv2.proto | 43 +- protoc-gen-swagger/internal/genswagger/doc.go | 2 - protoc-gen-swagger/options/annotations.pb.go | 240 --- runtime/mux.go | 2 +- 47 files changed, 2095 insertions(+), 2058 deletions(-) rename {protoc-gen-swagger => protoc-gen-openapiv2}/BUILD.bazel (86%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/defs.bzl (79%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/BUILD.bazel (88%) create mode 100644 protoc-gen-openapiv2/internal/genopenapi/doc.go rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/generator.go (81%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/helpers.go (86%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/helpers_go111_old.go (87%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/template.go (84%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/template_test.go (91%) rename {protoc-gen-swagger/internal/genswagger => protoc-gen-openapiv2/internal/genopenapi}/types.go (72%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/main.go (92%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/main_test.go (92%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/options/BUILD.bazel (94%) create mode 100644 protoc-gen-openapiv2/options/annotations.pb.go rename {protoc-gen-swagger => protoc-gen-openapiv2}/options/annotations.proto (92%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/options/openapiv2.pb.go (57%) rename {protoc-gen-swagger => protoc-gen-openapiv2}/options/openapiv2.proto (95%) delete mode 100644 protoc-gen-swagger/internal/genswagger/doc.go delete mode 100644 protoc-gen-swagger/options/annotations.pb.go diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 9cb92f9eecc..23f0f71a680 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -6,11 +6,11 @@ ```sh go get -u github.com/grpc-ecosystem/grpc-gateway ``` -- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-swagger` binary from your `PATH`, +- [ ] Delete the `protoc-gen-grpc-gateway` and `protoc-gen-openapiv2` binary from your `PATH`, and reinstall the latest versions: ```sh go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger + go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-openapiv2 ``` ## I still have a problem! diff --git a/.goreleaser.yml b/.goreleaser.yml index bcc63e544d3..ffbe2430c71 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -10,9 +10,9 @@ builds: - windows goarch: - amd64 - - main: ./protoc-gen-swagger/main.go - id: protoc-gen-swagger - binary: protoc-gen-swagger + - main: ./protoc-gen-openapiv2/main.go + id: protoc-gen-openapiv2 + binary: protoc-gen-openapiv2 env: - CGO_ENABLED=0 goos: diff --git a/BUILD b/BUILD index f649e124b47..d0b40ee0274 100644 --- a/BUILD +++ b/BUILD @@ -21,6 +21,6 @@ package_group( name = "generators", packages = [ "//protoc-gen-grpc-gateway/...", - "//protoc-gen-swagger/...", + "//protoc-gen-openapiv2/...", ], ) diff --git a/Makefile b/Makefile index 031d5b141ca..57e46b3c4f4 100644 --- a/Makefile +++ b/Makefile @@ -7,14 +7,14 @@ GO_PLUGIN=bin/protoc-gen-go GO_PROTOBUF_REPO=github.com/golang/protobuf GO_PLUGIN_PKG=$(GO_PROTOBUF_REPO)/protoc-gen-go GO_PTYPES_ANY_PKG=$(GO_PROTOBUF_REPO)/ptypes/any -SWAGGER_PLUGIN=bin/protoc-gen-swagger -SWAGGER_PLUGIN_SRC= ./internal/utilities/doc.go \ +OPENAPI_PLUGIN=bin/protoc-gen-openapiv2 +OPENAPI_PLUGIN_SRC= ./internal/utilities/doc.go \ ./internal/utilities/pattern.go \ ./internal/utilities/trie.go \ - protoc-gen-swagger/internal/genswagger/generator.go \ - protoc-gen-swagger/internal/genswagger/template.go \ - protoc-gen-swagger/main.go -SWAGGER_PLUGIN_PKG=./protoc-gen-swagger + protoc-gen-openapiv2/internal/genopenapi/generator.go \ + protoc-gen-openapiv2/internal/genopenapi/template.go \ + protoc-gen-openapiv2/main.go +OPENAPI_PLUGIN_PKG=./protoc-gen-openapiv2 GATEWAY_PLUGIN=bin/protoc-gen-grpc-gateway GATEWAY_PLUGIN_PKG=./protoc-gen-grpc-gateway GATEWAY_PLUGIN_SRC= ./internal/utilities/doc.go \ @@ -38,12 +38,12 @@ GATEWAY_PLUGIN_SRC= ./internal/utilities/doc.go \ internal/httprule/types.go \ protoc-gen-grpc-gateway/main.go GATEWAY_PLUGIN_FLAGS?= -SWAGGER_PLUGIN_FLAGS?= +OPENAPI_PLUGIN_FLAGS?= GOOGLEAPIS_DIR=third_party/googleapis OUTPUT_DIR=_output -OPENAPIV2_PROTO=protoc-gen-swagger/options/openapiv2.proto protoc-gen-swagger/options/annotations.proto +OPENAPIV2_PROTO=protoc-gen-openapiv2/options/openapiv2.proto protoc-gen-openapiv2/options/annotations.proto OPENAPIV2_GO=$(OPENAPIV2_PROTO:.proto=.pb.go) ADDITIONAL_GW_FLAGS= @@ -51,10 +51,10 @@ ifneq "$(GATEWAY_PLUGIN_FLAGS)" "" ADDITIONAL_GW_FLAGS=,$(GATEWAY_PLUGIN_FLAGS) endif ADDITIONAL_SWG_FLAGS= -ifneq "$(SWAGGER_PLUGIN_FLAGS)" "" - ADDITIONAL_SWG_FLAGS=,$(SWAGGER_PLUGIN_FLAGS) +ifneq "$(OPENAPI_PLUGIN_FLAGS)" "" + ADDITIONAL_SWG_FLAGS=,$(OPENAPI_PLUGIN_FLAGS) endif -SWAGGER_EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ +OPENAPI_EXAMPLES=examples/internal/proto/examplepb/echo_service.proto \ examples/internal/proto/examplepb/a_bit_of_everything.proto \ examples/internal/proto/examplepb/wrappers.proto \ examples/internal/proto/examplepb/stream.proto \ @@ -78,7 +78,7 @@ HELLOWORLD=examples/internal/helloworld/helloworld.proto EXAMPLE_SVCSRCS=$(EXAMPLES:.proto=.pb.go) EXAMPLE_GWSRCS=$(EXAMPLES:.proto=.pb.gw.go) -EXAMPLE_SWAGGERSRCS=$(SWAGGER_EXAMPLES:.proto=.swagger.json) +EXAMPLE_OPENAPISRCS=$(OPENAPI_EXAMPLES:.proto=.swagger.json) EXAMPLE_DEPS=examples/internal/proto/pathenum/path_enum.proto examples/internal/proto/sub/message.proto examples/internal/proto/sub2/message.proto EXAMPLE_DEPSRCS=$(EXAMPLE_DEPS:.proto=.pb.go) @@ -153,8 +153,8 @@ $(OPENAPIV2_GO): $(OPENAPIV2_PROTO) $(GO_PLUGIN) $(GATEWAY_PLUGIN): $(GATEWAY_PLUGIN_SRC) go build -o $@ $(GATEWAY_PLUGIN_PKG) -$(SWAGGER_PLUGIN): $(SWAGGER_PLUGIN_SRC) $(OPENAPIV2_GO) - go build -o $@ $(SWAGGER_PLUGIN_PKG) +$(OPENAPI_PLUGIN): $(OPENAPI_PLUGIN_SRC) $(OPENAPIV2_GO) + go build -o $@ $(OPENAPI_PLUGIN_PKG) $(EXAMPLE_SVCSRCS): $(GO_PLUGIN) $(EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:. $(EXAMPLES) @@ -177,9 +177,9 @@ $(EXAMPLE_GWSRCS): $(GATEWAY_PLUGIN) $(EXAMPLES) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GATEWAY_PLUGIN) --grpc-gateway_out=logtostderr=true,allow_repeated_fields_in_body=true,paths=source_relative$(ADDITIONAL_GW_FLAGS):. $(EXAMPLES) -$(EXAMPLE_SWAGGERSRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml -$(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) - protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(SWAGGER_PLUGIN) --swagger_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true$(ADDITIONAL_SWG_FLAGS):. $(SWAGGER_EXAMPLES) +$(EXAMPLE_OPENAPISRCS): ADDITIONAL_SWG_FLAGS:=$(ADDITIONAL_SWG_FLAGS),grpc_api_configuration=examples/internal/proto/examplepb/unannotated_echo_service.yaml +$(EXAMPLE_OPENAPISRCS): $(OPENAPI_PLUGIN) $(OPENAPI_EXAMPLES) + protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(OPENAPI_PLUGIN) --openapiv2_out=logtostderr=true,allow_repeated_fields_in_body=true,use_go_templates=true$(ADDITIONAL_SWG_FLAGS):. $(OPENAPI_EXAMPLES) $(HELLOWORLD_SVCSRCS): $(GO_PLUGIN) $(HELLOWORLD) protoc -I $(PROTOC_INC_PATH) -I. -I$(GOOGLEAPIS_DIR) --plugin=$(GO_PLUGIN) --go_out=plugins=grpc,paths=source_relative:. $(HELLOWORLD) @@ -210,7 +210,7 @@ $(RESPONSE_BODY_EXAMPLE_SRCS): $(RESPONSE_BODY_EXAMPLE_SPEC) @rm -f $(EXAMPLE_CLIENT_DIR)/responsebody/README.md \ $(EXAMPLE_CLIENT_DIR)/responsebody/git_push.sh -examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) +examples: $(EXAMPLE_DEPSRCS) $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_OPENAPISRCS) $(EXAMPLE_CLIENT_SRCS) $(HELLOWORLD_SVCSRCS) $(HELLOWORLD_GWSRCS) testproto: $(RUNTIME_TEST_SRCS) $(APICONFIG_SRCS) test: examples testproto go test -short -race ./... @@ -233,20 +233,20 @@ lint: golint --set_exit_status ./runtime golint --set_exit_status ./internal/utilities/... golint --set_exit_status ./protoc-gen-grpc-gateway/... - golint --set_exit_status ./protoc-gen-swagger/... + golint --set_exit_status ./protoc-gen-openapiv2/... go vet ./runtime || true go vet ./internal/utilities/... go vet ./protoc-gen-grpc-gateway/... - go vet ./protoc-gen-swagger/... + go vet ./protoc-gen-openapiv2/... clean: - rm -f $(GATEWAY_PLUGIN) $(SWAGGER_PLUGIN) + rm -f $(GATEWAY_PLUGIN) $(OPENAPI_PLUGIN) distclean: clean rm -f $(GO_PLUGIN) realclean: distclean rm -f $(EXAMPLE_SVCSRCS) $(EXAMPLE_DEPSRCS) rm -f $(EXAMPLE_GWSRCS) - rm -f $(EXAMPLE_SWAGGERSRCS) + rm -f $(EXAMPLE_OPENAPISRCS) rm -f $(EXAMPLE_CLIENT_SRCS) rm -f $(HELLOWORLD_SVCSRCS) rm -f $(HELLOWORLD_GWSRCS) diff --git a/README.md b/README.md index 6940d2cb0eb..e3f220b5d6c 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ package tools import ( _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2" _ "github.com/golang/protobuf/protoc-gen-go" ) ``` @@ -67,14 +67,14 @@ Run `go mod tidy` to resolve the versions. Install by running ```sh $ go install \ github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \ - github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-swagger \ + github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \ github.com/golang/protobuf/protoc-gen-go ``` This will place three binaries in your `$GOBIN`; * `protoc-gen-grpc-gateway` -* `protoc-gen-swagger` +* `protoc-gen-openapiv2` * `protoc-gen-go` Make sure that your `$GOBIN` is in your `$PATH`. @@ -130,7 +130,7 @@ annotation to your .proto file See [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples of more annotations you can add to customize gateway behavior - and generated Swagger output. + and generated OpenAPI output. If you do not want to modify the proto file for use with grpc-gateway you can alternatively use an external @@ -243,10 +243,10 @@ annotation to your .proto file } ``` -7. (Optional) Generate swagger definitions using `protoc-gen-swagger` +7. (Optional) Generate OpenAPI definitions using `protoc-gen-openapiv2` ```sh - protoc -I. --swagger_out=logtostderr=true:./gen/swagger your/service/v1/your_service.proto + protoc -I. --openapiv2_out=logtostderr=true:./gen/openapiv2 your/service/v1/your_service.proto ``` ## Video intro @@ -266,7 +266,7 @@ example: ```sh --grpc-gateway_out=logtostderr=true,repeated_path_param_separator=ssv:. ---swagger_out=logtostderr=true,repeated_path_param_separator=ssv:. +--openapiv2_out=logtostderr=true,repeated_path_param_separator=ssv:. ``` `protoc-gen-grpc-gateway` supports custom mapping from Protobuf `import` to @@ -281,12 +281,12 @@ useful to pass the request-scoped context between the gateway and the gRPC servi logging. You can give these flags together with parameters above. Run `protoc-gen-grpc-gateway --help` for more details about the flags. -Similarly, `protoc-gen-swagger` supports command-line flags to control Swagger +Similarly, `protoc-gen-openapiv2` supports command-line flags to control OpenAPI output (for example, `json_names_for_fields` to output JSON names for fields -instead of protobuf names). Run `protoc-gen-swagger --help` for more flag -details. Further Swagger customization is possible by annotating your `.proto` +instead of protobuf names). Run `protoc-gen-openapiv2 --help` for more flag +details. Further OpenAPI customization is possible by annotating your `.proto` files with options from -[openapiv2.proto](protoc-gen-swagger/options/openapiv2.proto) - see +[openapiv2.proto](protoc-gen-openapiv2/options/openapiv2.proto) - see [a_bit_of_everything.proto](examples/internal/proto/examplepb/a_bit_of_everything.proto) for examples. diff --git a/bin/.gitignore b/bin/.gitignore index f20d08cf066..26df9ea603b 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,3 +1,3 @@ /protoc-gen-go /protoc-gen-grpc-gateway -/protoc-gen-swagger +/protoc-gen-openapiv2 diff --git a/docs/_docs/aws.md b/docs/_docs/aws.md index 96e98c089b6..33d3a51cbf6 100644 --- a/docs/_docs/aws.md +++ b/docs/_docs/aws.md @@ -4,7 +4,7 @@ category: documentation # AWS -## Import swagger documentation into AWS API Gateway +## Import OpenAPI documentation into AWS API Gateway The AWS API gateway service allows importing of an OpenAPI specification to create a REST API. The process is very straightforward and can be found [here](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html). Here are some tips to consider when importing the documentation: diff --git a/docs/_docs/customizingyourgateway.md b/docs/_docs/customizingyourgateway.md index 8528a4a4fc5..805db6afe64 100644 --- a/docs/_docs/customizingyourgateway.md +++ b/docs/_docs/customizingyourgateway.md @@ -279,7 +279,7 @@ mux := runtime.NewServeMux( The signature of the handler is much more rigid because we need to know the structure of the error payload to properly -encode the "chunk" schema into a Swagger/OpenAPI spec. +encode the "chunk" schema into an OpenAPI spec. So the function must return a `*runtime.StreamError`. The handler can choose to omit some fields and can filter/transform the original diff --git a/docs/_docs/cygwin.md b/docs/_docs/cygwin.md index 5e0a37fafa6..db2170877bb 100644 --- a/docs/_docs/cygwin.md +++ b/docs/_docs/cygwin.md @@ -34,7 +34,7 @@ From an elevated cmd.exe prompt set the GOPATH variable in windows and add the ` Then `go get -u -v` the following packages: go get -u -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - go get -u -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger + go get -u -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-openapiv2 go get -u -v github.com/golang/protobuf/protoc-gen-go This will probably fail with similar output. @@ -62,7 +62,7 @@ Adjust steps 3, 5 and 7 like this. protoc expects native windows paths. protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=plugins=grpc:. ./path/to/your_service.proto protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --grpc-gateway_out=logtostderr=true:. ./path/to/your_service.proto - protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --swagger_out=logtostderr=true:. ./path/to/your_service.proto + protoc -I. -I$(cygpath -w /usr/local/include) -I${GOPATH}/src -I${GOPATH}/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --openapiv2_out=logtostderr=true:. ./path/to/your_service.proto Then `cd` into the directory where your entry-point `main.go` file is located and run diff --git a/docs/_docs/faq.md b/docs/_docs/faq.md index 348f77387b7..30e34011428 100644 --- a/docs/_docs/faq.md +++ b/docs/_docs/faq.md @@ -33,7 +33,7 @@ e.g. https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/interna AFAIK, no. But it should not be a big issue because the reverse-proxy which grpc-gateway generates usually works as an independent process and communicates with your gRPC server over TCP or a unix-domain socket. -## Why are the models in the swagger specification prefixed with the last part of the proto package name? +## Why are the models in the OpenAPI specification prefixed with the last part of the proto package name? The reason to generate the prefixes is that we don't have a guaranteed unique namespace. If two packages produce different Foo messages then we will have trouble. diff --git a/docs/_docs/features.md b/docs/_docs/features.md index 1bead42e17e..a137a289ffe 100644 --- a/docs/_docs/features.md +++ b/docs/_docs/features.md @@ -12,7 +12,7 @@ category: documentation * Enum fields in path parameter (including repeated enum fields). * Mapping streaming APIs to newline-delimited JSON streams * Mapping HTTP headers with `Grpc-Metadata-` prefix to gRPC metadata (prefixed with `grpcgateway-`) -* Optionally emitting API definition for [Swagger](http://swagger.io). +* Optionally emitting API definition for [OpenAPI](http://swagger.io). * Setting [gRPC timeouts](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md) through inbound HTTP `Grpc-Timeout` header. * Partial support for [gRPC API Configuration](https://cloud.google.com/endpoints/docs/grpc/grpc-service-config) files as an alternative to annotation. diff --git a/docs/_docs/usegotemplates.md b/docs/_docs/usegotemplates.md index 68649b2f21a..2bca1ab17f8 100644 --- a/docs/_docs/usegotemplates.md +++ b/docs/_docs/usegotemplates.md @@ -16,10 +16,10 @@ as: By default this function is turned off, so if you want to use it you have to set the `use_go_templates` flag to true inside of the -`swagger_out` flag. +`openapiv2_out` flag. ```shell ---swagger_out=use_go_templates=true:. +--openapiv2_out=use_go_templates=true:. ``` ### Example script @@ -30,7 +30,7 @@ Example of a bash script with the `use_go_templates` flag set to true: $ protoc -I. \ --go_out=plugins=grpc:. \ --grpc-gateway_out=logtostderr=true:. \ - --swagger_out=logtostderr=true,use_go_templates=true:. \ + --openapiv2_out=logtostderr=true,use_go_templates=true:. \ path/to/my/proto/v1/myproto.proto ``` @@ -80,19 +80,19 @@ The content of `tables.md`: | {{.Number}} | {{.Name}} | {{if eq .Label.String "LABEL_REPEATED"}}[]{{end}}{{.Type}} | {{fieldcomments .Message .}} | {{end}} ``` -## Swagger output +## OpenAPI output ### SwaggerUI -This is how the swagger file would be rendered in [SwaggerUI](https://swagger.io/tools/swagger-ui/) +This is how the OpenAPI file would be rendered in [Swagger UI](https://swagger.io/tools/swagger-ui/) -![Screenshot swaggerfile in SwaggerUI](../_imgs/gotemplates/swaggerui.png) +![Screenshot OpenAPI file in SwaggerUI](../_imgs/gotemplates/swaggerui.png) ### Postman -This is how the swagger file would be rendered in [Postman](https://www.getpostman.com/) +This is how the OpenAPI file would be rendered in [Postman](https://www.getpostman.com/) -![Screenshot swaggerfile in Postman](../_imgs/gotemplates/postman.png) +![Screenshot OpenAPI file in Postman](../_imgs/gotemplates/postman.png) For a more detailed example of a protofile that has Go templates enabled, [see the examples](https://github.com/grpc-ecosystem/grpc-gateway/blob/master/examples/internal/proto/examplepb/use_go_template.proto). diff --git a/docs/_docs/v2-migration.md b/docs/_docs/v2-migration.md index fde14f82124..a198ad4e60a 100644 --- a/docs/_docs/v2-migration.md +++ b/docs/_docs/v2-migration.md @@ -11,6 +11,31 @@ information on all changes that were made specifically to v2. The following behavioural defaults have been changed: +## protoc-gen-swagger has been renamed protoc-gen-openapiv2 + +See +[the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/675) +for more information. Apart from the new name, the only real +difference to users will be a slightly different proto annotation: + +```protobuf +import "protoc-gen-openapiv2/options/annotations.proto"; +``` +instead of +```protobuf +import "protoc-gen-swagger/options/annotations.proto"; +``` +and +```protobuf +option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { +``` +instead of +```protobuf +option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = { +``` + +The bazel rule has been renamed `protoc_gen_openapiv2`. + ## We now use the camelCase JSON names by default See [the original issue](https://github.com/grpc-ecosystem/grpc-gateway/issues/375) @@ -33,10 +58,10 @@ mux := runtime.NewServeMux( ) ``` -To change the swagger generator behaviour to match, set `json_names_for_fields=false` when generating: +To change the OpenAPI generator behaviour to match, set `json_names_for_fields=false` when generating: ```shell ---swagger_out=json_names_for_fields=false:./gen/swagger path/to/my/proto/v1/myproto.proto +--openapiv2_out=json_names_for_fields=false:./gen/openapiv2 path/to/my/proto/v1/myproto.proto ``` If using the Bazel rule, set `json_names_for_fields=False`. diff --git a/examples/internal/README.md b/examples/internal/README.md index 4a5039afc1a..55a1234d694 100644 --- a/examples/internal/README.md +++ b/examples/internal/README.md @@ -26,7 +26,7 @@ Then you can use curl or a browser to test: ```bash # List all apis -$ curl http://localhost:8080/swagger/echo_service.swagger.json +$ curl http://localhost:8080/openapiv2/echo_service.swagger.json # Visit the apis $ curl -XPOST http://localhost:8080/v1/example/echo/foo diff --git a/examples/internal/browser/a_bit_of_everything_service.spec.js b/examples/internal/browser/a_bit_of_everything_service.spec.js index 21512ab78aa..66ccd54ece7 100644 --- a/examples/internal/browser/a_bit_of_everything_service.spec.js +++ b/examples/internal/browser/a_bit_of_everything_service.spec.js @@ -7,7 +7,7 @@ describe('ABitOfEverythingService', function() { beforeEach(function(done) { new SwaggerClient({ - url: "http://localhost:8080/swagger/a_bit_of_everything.swagger.json", + url: "http://localhost:8080/openapiv2/a_bit_of_everything.swagger.json", usePromise: true, }).then(function(c) { client = c; diff --git a/examples/internal/browser/echo_service.spec.js b/examples/internal/browser/echo_service.spec.js index 97888c3e6c7..72aa13ca48e 100644 --- a/examples/internal/browser/echo_service.spec.js +++ b/examples/internal/browser/echo_service.spec.js @@ -7,7 +7,7 @@ describe('EchoService', function() { beforeEach(function(done) { new SwaggerClient({ - url: "http://localhost:8080/swagger/echo_service.swagger.json", + url: "http://localhost:8080/openapiv2/echo_service.swagger.json", usePromise: true, }).then(function(c) { client = c; diff --git a/examples/internal/browser/gulpfile.js b/examples/internal/browser/gulpfile.js index f1e03e5d9fa..f287428d80e 100644 --- a/examples/internal/browser/gulpfile.js +++ b/examples/internal/browser/gulpfile.js @@ -32,7 +32,7 @@ gulp.task('serve-server', ['server'], function () { gulp.task('serve-gateway', ['gateway', 'serve-server'], function () { gprocess.start('gateway-server', 'bin/example-gw', [ - '--logtostderr', '--swagger_dir', path.join(__dirname, "../proto/examplepb"), + '--logtostderr', '--openapi_dir', path.join(__dirname, "../proto/examplepb"), ]); gulp.watch('bin/example-gw', ['serve-gateway']); }); diff --git a/examples/internal/browser/index.html b/examples/internal/browser/index.html index 7817451ca82..da9e223e3bf 100644 --- a/examples/internal/browser/index.html +++ b/examples/internal/browser/index.html @@ -4,7 +4,7 @@ + {% if site.search_enabled != false %} + {% if site.search.button %} +
    + + + {% endif %} + +